<?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>210014</bug_id>
          
          <creation_ts>2020-04-04 19:46:10 -0700</creation_ts>
          <short_desc>Web Inspector: replace `featureGuard` and `availability` with a combined `condition` that accepts any macro</short_desc>
          <delta_ts>2021-06-24 03:33:47 -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>Web Inspector</component>
          <version>WebKit Local Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=227345</see_also>
          <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>
          
          <blocked>212436</blocked>
    
    <blocked>212494</blocked>
    
    <blocked>212497</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Devin Rousso">hi</reporter>
          <assigned_to name="Devin Rousso">hi</assigned_to>
          <cc>annulen</cc>
    
    <cc>bburg</cc>
    
    <cc>cgarcia</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hi</cc>
    
    <cc>inspector-bugzilla-changes</cc>
    
    <cc>jbedard</cc>
    
    <cc>joepeck</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>saam</cc>
    
    <cc>sergio</cc>
    
    <cc>timothy</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1637793</commentid>
    <comment_count>0</comment_count>
    <who name="Devin Rousso">hi</who>
    <bug_when>2020-04-04 19:46:10 -0700</bug_when>
    <thetext>A benefit of this is that the frontend wouldn&apos;t generate code for things that have a non-matching `condition` (e.g. we wouldn&apos;t have an `IndexedDB` agent in the frontend if `ENABLE(INDEXED_DATABASE)` is not set).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1637794</commentid>
    <comment_count>1</comment_count>
      <attachid>395472</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2020-04-04 19:48:46 -0700</bug_when>
    <thetext>Created attachment 395472
[Patch] WIP

Because we use macros in &apos;InspectorBackendCommands.js&apos; too, we need to preprocess it.  I&apos;ve managed to get it working with `make`, but it also isn&apos;t nicely formatted (lots of extra newlines).  I need to get CMake working too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1637795</commentid>
    <comment_count>2</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2020-04-04 19:52:12 -0700</bug_when>
    <thetext>This patch modifies the inspector protocol generator. Please ensure that you have rebaselined any generator test results (i.e., by running `Tools/Scripts/run-inspector-generator-tests --reset-results`)

This patch modifies the inspector protocol. Please ensure that any frontend changes appropriately use feature checks for new protocol features.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1637873</commentid>
    <comment_count>3</comment_count>
      <attachid>395472</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2020-04-05 06:49:11 -0700</bug_when>
    <thetext>Comment on attachment 395472
[Patch] WIP

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

&gt; Source/JavaScriptCore/DerivedSources.make:319


Use unifdef -B and you will not need the perl.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1653141</commentid>
    <comment_count>4</comment_count>
      <attachid>399502</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2020-05-15 12:33:22 -0700</bug_when>
    <thetext>Created attachment 399502
[Patch] WIP

The changes I&apos;ve made to Source/JavaScriptCore/DerivedSources.make are working for me, but I think I still need to fix Sources/JavaScriptCore/CMakeLists.txt</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1653153</commentid>
    <comment_count>5</comment_count>
      <attachid>399504</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2020-05-15 13:12:43 -0700</bug_when>
    <thetext>Created attachment 399504
[Patch] WIP

fix some miscellaneous build issues</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1653160</commentid>
    <comment_count>6</comment_count>
      <attachid>399507</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2020-05-15 13:45:21 -0700</bug_when>
    <thetext>Created attachment 399507
[Patch] WIP

oops it should be `ENABLE` not `HAVE` :P</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1653221</commentid>
    <comment_count>7</comment_count>
      <attachid>399526</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2020-05-15 16:21:19 -0700</bug_when>
    <thetext>Created attachment 399526
[Patch] WIP

fix tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1653352</commentid>
    <comment_count>8</comment_count>
      <attachid>399563</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2020-05-16 13:39:07 -0700</bug_when>
    <thetext>Created attachment 399563
[Patch] WIP

attempt for CMake</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1655033</commentid>
    <comment_count>9</comment_count>
      <attachid>399975</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2020-05-21 12:41:03 -0700</bug_when>
    <thetext>Created attachment 399975
[Patch] WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1655136</commentid>
    <comment_count>10</comment_count>
      <attachid>399996</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2020-05-21 16:19:30 -0700</bug_when>
    <thetext>Created attachment 399996
[Patch] WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1655184</commentid>
    <comment_count>11</comment_count>
      <attachid>400008</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2020-05-21 18:26:18 -0700</bug_when>
    <thetext>Created attachment 400008
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1655185</commentid>
    <comment_count>12</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-05-21 18:27:47 -0700</bug_when>
    <thetext>&lt;rdar://problem/63521191&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1655186</commentid>
    <comment_count>13</comment_count>
      <attachid>400009</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2020-05-21 18:45:02 -0700</bug_when>
    <thetext>Created attachment 400009
Patch

rebase</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1655467</commentid>
    <comment_count>14</comment_count>
      <attachid>400009</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2020-05-22 15:35:14 -0700</bug_when>
    <thetext>Comment on attachment 400009
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1656446</commentid>
    <comment_count>15</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-05-27 11:09:51 -0700</bug_when>
    <thetext>Committed r262203: &lt;https://trac.webkit.org/changeset/262203&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 400009.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1772236</commentid>
    <comment_count>16</comment_count>
      <attachid>400009</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-06-24 03:33:47 -0700</bug_when>
    <thetext>Comment on attachment 400009
Patch

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

&gt; Source/WebInspectorUI/CMakeLists.txt:52
&gt; +            InspectorBackendCommands

This caused the inspector to be copied for every incremental build, see bug #227345</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>395472</attachid>
            <date>2020-04-04 19:48:46 -0700</date>
            <delta_ts>2020-05-15 12:33:22 -0700</delta_ts>
            <desc>[Patch] WIP</desc>
            <filename>protocol-condition.diff</filename>
            <type>text/plain</type>
            <size>2688520</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCAzZmYyMjVlMDcxZC4uNjFlOWMx
NjRkYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTEyMTUsNiArMTIx
NSwxMiBAQCBhZGRfY3VzdG9tX2NvbW1hbmQoCiAgICAgREVQRU5EUyAke0phdmFTY3JpcHRDb3Jl
X0lOU1BFQ1RPUl9QUk9UT0NPTF9TQ1JJUFRTfQogICAgIENPTU1BTkQgJHtQWVRIT05fRVhFQ1VU
QUJMRX0gJHtKYXZhU2NyaXB0Q29yZV9JTlNQRUNUT1JfU0NSSVBUU19ESVJ9L2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weSAtLW91dHB1dERpciAiJHtKYXZhU2NyaXB0Q29y
ZV9ERVJJVkVEX1NPVVJDRVNfRElSfS9pbnNwZWN0b3IiIC0tZnJhbWV3b3JrIEphdmFTY3JpcHRD
b3JlICR7SmF2YVNjcmlwdENvcmVfREVSSVZFRF9TT1VSQ0VTX0RJUn0vQ29tYmluZWREb21haW5z
Lmpzb24KICAgICBWRVJCQVRJTSkKK2FkZF9jdXN0b21fY29tbWFuZCgKKyAgICBPVVRQVVQgJHtK
YXZhU2NyaXB0Q29yZV9ERVJJVkVEX1NPVVJDRVNfRElSfS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFj
a2VuZENvbW1hbmRzLmpzCisgICAgTUFJTl9ERVBFTkRFTkNZICR7SmF2YVNjcmlwdENvcmVfSU5T
UEVDVE9SX1NDUklQVFNfRElSfS9wcmVwcm9jZXNzLnBsCisgICAgREVQRU5EUyAke0phdmFTY3Jp
cHRDb3JlX0RFUklWRURfU09VUkNFU19ESVJ9L2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kQ29t
bWFuZHMuanMKKyAgICBDT01NQU5EICR7UEVSTF9FWEVDVVRBQkxFfSAke0phdmFTY3JpcHRDb3Jl
X0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0vcHJlcHJvY2Vzcy5wbCAtLWlucHV0ICIke0phdmFTY3Jp
cHRDb3JlX0RFUklWRURfU09VUkNFU19ESVJ9L2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kQ29t
bWFuZHMuanMiIC0tZGVmaW5lcyAiJHtGRUFUVVJFX0RFRklORVNfV0lUSF9TUEFDRV9TRVBBUkFU
T1J9IiAtLXByZXByb2Nlc3NvciAiJHtDT0RFX0dFTkVSQVRPUl9QUkVQUk9DRVNTT1J9IiAtLW91
dHB1dCAiJHtKYXZhU2NyaXB0Q29yZV9ERVJJVkVEX1NPVVJDRVNfRElSfS9pbnNwZWN0b3IvSW5z
cGVjdG9yQmFja2VuZENvbW1hbmRzLmpzIiAKKyAgICBWRVJCQVRJTSkKIAogIyBKU0NCdWlsdGlu
cwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFr
ZSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCmluZGV4IGU5ZDgw
NGQ5ZThiLi45MjI4NWU2ZTE4NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rl
cml2ZWRTb3VyY2VzLm1ha2UKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3Vy
Y2VzLm1ha2UKQEAgLTI0MSw2ICsyNDEsOCBAQCBJTlNQRUNUT1JfRE9NQUlOUyA6PSBcCiAgICAg
JChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3RvY29sL0FuaW1hdGlvbi5qc29uIFwKICAg
ICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvQXBwbGljYXRpb25DYWNoZS5q
c29uIFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvQXVkaXQuanNv
biBcCisgICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3RvY29sL0Jyb3dzZXIuanNv
biBcCisgICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3RvY29sL0NQVVByb2ZpbGVy
Lmpzb24gXAogICAgICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9wcm90b2NvbC9DU1MuanNv
biBcCiAgICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3RvY29sL0NhbnZhcy5qc29u
IFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvQ29uc29sZS5qc29u
IFwKQEAgLTI0OSwzNSArMjUxLDI0IEBAIElOU1BFQ1RPUl9ET01BSU5TIDo9IFwKICAgICAkKEph
dmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvRE9NU3RvcmFnZS5qc29uIFwKICAgICAk
KEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvRGF0YWJhc2UuanNvbiBcCiAgICAg
JChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3RvY29sL0RlYnVnZ2VyLmpzb24gXAotICAg
ICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9wcm90b2NvbC9Ccm93c2VyLmpzb24gXAogICAg
ICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9wcm90b2NvbC9HZW5lcmljVHlwZXMuanNvbiBc
CiAgICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3RvY29sL0hlYXAuanNvbiBcCisg
ICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3RvY29sL0luZGV4ZWREQi5qc29uIFwK
ICAgICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvSW5zcGVjdG9yLmpzb24g
XAogICAgICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9wcm90b2NvbC9MYXllclRyZWUuanNv
biBcCisgICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3RvY29sL01lbW9yeS5qc29u
IFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvTmV0d29yay5qc29u
IFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvUGFnZS5qc29uIFwK
ICAgICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvUmVjb3JkaW5nLmpzb24g
XAogICAgICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9wcm90b2NvbC9SdW50aW1lLmpzb24g
XAogICAgICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9wcm90b2NvbC9TY3JpcHRQcm9maWxl
ci5qc29uIFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvU2VjdXJp
dHkuanNvbiBcCisgICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3RvY29sL1NlcnZp
Y2VXb3JrZXIuanNvbiBcCiAgICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3RvY29s
L1RhcmdldC5qc29uIFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wv
VGltZWxpbmUuanNvbiBcCiAgICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3RvY29s
L1dvcmtlci5qc29uIFwKICMKIAotaWZlcSAoJChmaW5kc3RyaW5nIEVOQUJMRV9JTkRFWEVEX0RB
VEFCQVNFLCQoRkVBVFVSRV9ERUZJTkVTKSksIEVOQUJMRV9JTkRFWEVEX0RBVEFCQVNFKQotICAg
IElOU1BFQ1RPUl9ET01BSU5TIDo9ICQoSU5TUEVDVE9SX0RPTUFJTlMpICQoSmF2YVNjcmlwdENv
cmUpL2luc3BlY3Rvci9wcm90b2NvbC9JbmRleGVkREIuanNvbgotZW5kaWYKLQotaWZlcSAoJChm
aW5kc3RyaW5nIEVOQUJMRV9SRVNPVVJDRV9VU0FHRSwkKEZFQVRVUkVfREVGSU5FUykpLCBFTkFC
TEVfUkVTT1VSQ0VfVVNBR0UpCi0gICAgSU5TUEVDVE9SX0RPTUFJTlMgOj0gJChJTlNQRUNUT1Jf
RE9NQUlOUykgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3RvY29sL0NQVVByb2ZpbGVy
Lmpzb24KLSAgICBJTlNQRUNUT1JfRE9NQUlOUyA6PSAkKElOU1BFQ1RPUl9ET01BSU5TKSAkKEph
dmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvTWVtb3J5Lmpzb24KLWVuZGlmCi0KLWlm
ZXEgKCQoZmluZHN0cmluZyBFTkFCTEVfU0VSVklDRV9XT1JLRVIsJChGRUFUVVJFX0RFRklORVMp
KSwgRU5BQkxFX1NFUlZJQ0VfV09SS0VSKQotICAgIElOU1BFQ1RPUl9ET01BSU5TIDo9ICQoSU5T
UEVDVE9SX0RPTUFJTlMpICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9wcm90b2NvbC9TZXJ2
aWNlV29ya2VyLmpzb24KLWVuZGlmCi0KIElOU1BFQ1RPUl9HRU5FUkFUT1JfU0NSSVBUUyA9IFwK
IAkkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL19faW5pdF9fLnB5
IFwKIAkkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5l
cmF0b3JfdGVtcGxhdGVzLnB5IFwKQEAgLTMyNSw2ICszMTYsOCBAQCBDb21iaW5lZERvbWFpbnMu
anNvbiA6ICQoSmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVIpL2dlbmVyYXRlLWNvbWJpbmVkLWlu
c3BlY3RvcgogIyBJbnNwZWN0b3IgQmFja2VuZCBEaXNwYXRjaGVycywgRnJvbnRlbmQgRGlzcGF0
Y2hlcnMsIFR5cGUgQnVpbGRlcnMKICQoSU5TUEVDVE9SX0RJU1BBVENIRVJfRklMRVNfUEFUVEVS
TlMpIDogQ29tYmluZWREb21haW5zLmpzb24gJChJTlNQRUNUT1JfR0VORVJBVE9SX1NDUklQVFMp
CiAJJChQWVRIT04pICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weSAtLWZyYW1ld29yayBKYXZhU2NyaXB0Q29y
ZSAtLW91dHB1dERpciBpbnNwZWN0b3IgLi9Db21iaW5lZERvbWFpbnMuanNvbgorCSQoQ0MpIC1z
dGQ9Z251KysxeiAteCBjKysgLUUgLVAgJChTREtfRkxBR1MpICQoVEFSR0VUX1RSSVBMRV9GTEFH
UykgJChGUkFNRVdPUktfRkxBR1MpICQoSEVBREVSX0ZMQUdTKSAtaW5jbHVkZSAid3RmL1BsYXRm
b3JtLmgiIGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMgLW8gaW5zcGVjdG9y
L0luc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcworIyAJJChQRVJMKSAtcCAtZSAicy9eXG4rLy8i
IGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMgPiBpbnNwZWN0b3IvSW5zcGVj
dG9yQmFja2VuZENvbW1hbmRzLmpzCiAKIEluamVjdGVkU2NyaXB0U291cmNlLmggOiBpbnNwZWN0
b3IvSW5qZWN0ZWRTY3JpcHRTb3VyY2UuanMgJChKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUikv
anNtaW4ucHkgJChKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUikveHhkLnBsCiAJZWNobyAiLy8j
IHNvdXJjZVVSTD1fX0luamVjdGVkU2NyaXB0X0luamVjdGVkU2NyaXB0U291cmNlLmpzIiA+IC4v
SW5qZWN0ZWRTY3JpcHRTb3VyY2UubWluLmpzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL0NQVVByb2ZpbGVyLmpzb24gYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL0NQVVByb2ZpbGVyLmpzb24KaW5kZXggY2ZhY2Qw
MWRiNzMuLmUxNzkyMjIwNzk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3Byb3RvY29sL0NQVVByb2ZpbGVyLmpzb24KKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9wcm90b2NvbC9DUFVQcm9maWxlci5qc29uCkBAIC0xLDcgKzEsNyBAQAog
ewogICAgICJkb21haW4iOiAiQ1BVUHJvZmlsZXIiLAogICAgICJkZXNjcmlwdGlvbiI6ICJDUFVQ
cm9maWxlciBkb21haW4gZXhwb3NlcyBjcHUgdXNhZ2UgdHJhY2tpbmcuIiwKLSAgICAiZmVhdHVy
ZUd1YXJkIjogIkVOQUJMRShSRVNPVVJDRV9VU0FHRSkiLAorICAgICJjb25kaXRpb24iOiAiRU5B
QkxFKFJFU09VUkNFX1VTQUdFKSIsCiAgICAgImRlYnVnZ2FibGVUeXBlcyI6IFsicGFnZSIsICJ3
ZWItcGFnZSJdLAogICAgICJ0YXJnZXRUeXBlcyI6IFsicGFnZSJdLAogICAgICJ0eXBlcyI6IFsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvQ2Fu
dmFzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL0NhbnZh
cy5qc29uCmluZGV4IGFiNTQ0NDBmMDRhLi42MDQ2MDJlNTM2YiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9DYW52YXMuanNvbgorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL0NhbnZhcy5qc29uCkBAIC0xMSw2
ICsxMSw3IEBACiAgICAgICAgIH0sCiAgICAgICAgIHsKICAgICAgICAgICAgICJpZCI6ICJQcm9n
cmFtSWQiLAorICAgICAgICAgICAgImNvbmRpdGlvbiI6ICJFTkFCTEUoV0VCR0wpIHx8IEVOQUJM
RShXRUJHUFUpIiwKICAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCiAgICAgICAgICAgICAi
ZGVzY3JpcHRpb24iOiAiVW5pcXVlIHNoYWRlciBwcm9ncmFtIGlkZW50aWZpZXIuIgogICAgICAg
ICB9LApAQCAtMjIsMTEgKzIzLDEzIEBACiAgICAgICAgIH0sCiAgICAgICAgIHsKICAgICAgICAg
ICAgICJpZCI6ICJQcm9ncmFtVHlwZSIsCisgICAgICAgICAgICAiY29uZGl0aW9uIjogIkVOQUJM
RShXRUJHTCkgfHwgRU5BQkxFKFdFQkdQVSkiLAogICAgICAgICAgICAgInR5cGUiOiAic3RyaW5n
IiwKICAgICAgICAgICAgICJlbnVtIjogWyJjb21wdXRlIiwgInJlbmRlciJdCiAgICAgICAgIH0s
CiAgICAgICAgIHsKICAgICAgICAgICAgICJpZCI6ICJTaGFkZXJUeXBlIiwKKyAgICAgICAgICAg
ICJjb25kaXRpb24iOiAiRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKSIsCiAgICAgICAg
ICAgICAidHlwZSI6ICJzdHJpbmciLAogICAgICAgICAgICAgImVudW0iOiBbImNvbXB1dGUiLCAi
ZnJhZ21lbnQiLCAidmVydGV4Il0KICAgICAgICAgfSwKQEAgLTYxLDggKzY0LDkgQEAKICAgICAg
ICAgfSwKICAgICAgICAgewogICAgICAgICAgICAgImlkIjogIlNoYWRlclByb2dyYW0iLAotICAg
ICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJJ
bmZvcm1hdGlvbiBhYm91dCBhIFdlYkdML1dlYkdMMiBzaGFkZXIgcHJvZ3JhbSBvciBXZWJHUFUg
c2hhZGVyIHBpcGVsaW5lLiIsCisgICAgICAgICAgICAiY29uZGl0aW9uIjogIkVOQUJMRShXRUJH
TCkgfHwgRU5BQkxFKFdFQkdQVSkiLAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKICAg
ICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwogICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJv
Z3JhbUlkIiwgIiRyZWYiOiAiUHJvZ3JhbUlkIiB9LAogICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAicHJvZ3JhbVR5cGUiLCAiJHJlZiI6ICJQcm9ncmFtVHlwZSIgfSwKQEAgLTE0Nyw2ICsxNTEs
NyBAQAogICAgICAgICB7CiAgICAgICAgICAgICAibmFtZSI6ICJyZXF1ZXN0U2hhZGVyU291cmNl
IiwKICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJSZXF1ZXN0cyB0aGUgc291cmNlIG9mIHRo
ZSBzaGFkZXIgb2YgdGhlIGdpdmVuIHR5cGUgZnJvbSB0aGUgcHJvZ3JhbSB3aXRoIHRoZSBnaXZl
biBpZC4iLAorICAgICAgICAgICAgImNvbmRpdGlvbiI6ICJFTkFCTEUoV0VCR0wpIHx8IEVOQUJM
RShXRUJHUFUpIiwKICAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwogICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAicHJvZ3JhbUlkIiwgIiRyZWYiOiAiUHJvZ3JhbUlkIiB9LAogICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAic2hhZGVyVHlwZSIsICIkcmVmIjogIlNoYWRlclR5cGUiIH0KQEAg
LTE1OCw2ICsxNjMsNyBAQAogICAgICAgICB7CiAgICAgICAgICAgICAibmFtZSI6ICJ1cGRhdGVT
aGFkZXIiLAogICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkNvbXBpbGVzIGFuZCBsaW5rcyB0
aGUgc2hhZGVyIHdpdGggaWRlbnRpZmllciBhbmQgdHlwZSB3aXRoIHRoZSBnaXZlbiBzb3VyY2Ug
Y29kZS4iLAorICAgICAgICAgICAgImNvbmRpdGlvbiI6ICJFTkFCTEUoV0VCR0wpIHx8IEVOQUJM
RShXRUJHUFUpIiwKICAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwogICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAicHJvZ3JhbUlkIiwgIiRyZWYiOiAiUHJvZ3JhbUlkIiB9LAogICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAic2hhZGVyVHlwZSIsICIkcmVmIjogIlNoYWRlclR5cGUiIH0sCkBA
IC0xNjcsNiArMTczLDcgQEAKICAgICAgICAgewogICAgICAgICAgICAgIm5hbWUiOiAic2V0U2hh
ZGVyUHJvZ3JhbURpc2FibGVkIiwKICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJFbmFibGUv
ZGlzYWJsZSB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgZ2l2ZW4gc2hhZGVyIHByb2dyYW0uIiwKKyAg
ICAgICAgICAgICJjb25kaXRpb24iOiAiRU5BQkxFKFdFQkdMKSIsCiAgICAgICAgICAgICAicGFy
YW1ldGVycyI6IFsKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInByb2dyYW1JZCIsICIkcmVm
IjogIlByb2dyYW1JZCIgfSwKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRpc2FibGVkIiwg
InR5cGUiOiAiYm9vbGVhbiIgfQpAQCAtMTc1LDYgKzE4Miw3IEBACiAgICAgICAgIHsKICAgICAg
ICAgICAgICJuYW1lIjogInNldFNoYWRlclByb2dyYW1IaWdobGlnaHRlZCIsCiAgICAgICAgICAg
ICAiZGVzY3JpcHRpb24iOiAiRW5hYmxlL2Rpc2FibGUgaGlnaGxpZ2h0aW5nIG9mIHRoZSBnaXZl
biBzaGFkZXIgcHJvZ3JhbS4iLAorICAgICAgICAgICAgImNvbmRpdGlvbiI6ICJFTkFCTEUoV0VC
R0wpIiwKICAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwogICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAicHJvZ3JhbUlkIiwgIiRyZWYiOiAiUHJvZ3JhbUlkIiB9LAogICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAiaGlnaGxpZ2h0ZWQiLCAidHlwZSI6ICJib29sZWFuIiB9CkBAIC0yMzgsMTIg
KzI0NiwxNCBAQAogICAgICAgICB9LAogICAgICAgICB7CiAgICAgICAgICAgICAibmFtZSI6ICJw
cm9ncmFtQ3JlYXRlZCIsCisgICAgICAgICAgICAiY29uZGl0aW9uIjogIkVOQUJMRShXRUJHTCkg
fHwgRU5BQkxFKFdFQkdQVSkiLAogICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCiAgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJzaGFkZXJQcm9ncmFtIiwgIiRyZWYiOiAiU2hhZGVyUHJvZ3Jh
bSIgfQogICAgICAgICAgICAgXQogICAgICAgICB9LAogICAgICAgICB7CiAgICAgICAgICAgICAi
bmFtZSI6ICJwcm9ncmFtRGVsZXRlZCIsCisgICAgICAgICAgICAiY29uZGl0aW9uIjogIkVOQUJM
RShXRUJHTCkgfHwgRU5BQkxFKFdFQkdQVSkiLAogICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBb
CiAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcm9ncmFtSWQiLCAiJHJlZiI6ICJQcm9ncmFt
SWQiIH0KICAgICAgICAgICAgIF0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvcHJvdG9jb2wvRE9NLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3Byb3RvY29sL0RPTS5qc29uCmluZGV4IDM4Y2I0OGJlZGYyLi4zYWE0YTI4Y2MyZCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9ET00uanNv
bgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL0RPTS5qc29u
CkBAIC0zOTksNiArMzk5LDE2IEBACiAgICAgICAgIHsKICAgICAgICAgICAgICJuYW1lIjogInNl
dEluc3BlY3RNb2RlRW5hYmxlZCIsCiAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRW50ZXJz
IHRoZSAnaW5zcGVjdCcgbW9kZS4gSW4gdGhpcyBtb2RlLCBlbGVtZW50cyB0aGF0IHVzZXIgaXMg
aG92ZXJpbmcgb3ZlciBhcmUgaGlnaGxpZ2h0ZWQuIEJhY2tlbmQgdGhlbiBnZW5lcmF0ZXMgJ2lu
c3BlY3QnIGNvbW1hbmQgdXBvbiBlbGVtZW50IHNlbGVjdGlvbi4iLAorICAgICAgICAgICAgImNv
bmRpdGlvbiI6ICJQTEFURk9STShJT1NfRkFNSUxZKSIsCisgICAgICAgICAgICAicGFyYW1ldGVy
cyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImVuYWJsZWQiLCAidHlwZSI6ICJib29s
ZWFuIiwgImRlc2NyaXB0aW9uIjogIlRydWUgdG8gZW5hYmxlIGluc3BlY3Rpb24gbW9kZSwgZmFs
c2UgdG8gZGlzYWJsZSBpdC4iIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJoaWdobGln
aHRDb25maWciLCAiJHJlZiI6ICJIaWdobGlnaHRDb25maWciLCAib3B0aW9uYWwiOiB0cnVlLCAi
ZGVzY3JpcHRpb24iOiAiQSBkZXNjcmlwdG9yIGZvciB0aGUgaGlnaGxpZ2h0IGFwcGVhcmFuY2Ug
b2YgaG92ZXJlZC1vdmVyIG5vZGVzLiBNYXkgYmUgb21pdHRlZCBpZiA8Y29kZT5lbmFibGVkID09
IGZhbHNlPC9jb2RlPi4iIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgewor
ICAgICAgICAgICAgIm5hbWUiOiAic2V0SW5zcGVjdE1vZGVFbmFibGVkIiwKKyAgICAgICAgICAg
ICJkZXNjcmlwdGlvbiI6ICJFbnRlcnMgdGhlICdpbnNwZWN0JyBtb2RlLiBJbiB0aGlzIG1vZGUs
IGVsZW1lbnRzIHRoYXQgdXNlciBpcyBob3ZlcmluZyBvdmVyIGFyZSBoaWdobGlnaHRlZC4gQmFj
a2VuZCB0aGVuIGdlbmVyYXRlcyAnaW5zcGVjdCcgY29tbWFuZCB1cG9uIGVsZW1lbnQgc2VsZWN0
aW9uLiIsCisgICAgICAgICAgICAiY29uZGl0aW9uIjogIiFQTEFURk9STShJT1NfRkFNSUxZKSIs
CiAgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKICAgICAgICAgICAgICAgICB7ICJuYW1lIjog
ImVuYWJsZWQiLCAidHlwZSI6ICJib29sZWFuIiwgImRlc2NyaXB0aW9uIjogIlRydWUgdG8gZW5h
YmxlIGluc3BlY3Rpb24gbW9kZSwgZmFsc2UgdG8gZGlzYWJsZSBpdC4iIH0sCiAgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJoaWdobGlnaHRDb25maWciLCAiJHJlZiI6ICJIaWdobGlnaHRDb25m
aWciLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiQSBkZXNjcmlwdG9yIGZvciB0
aGUgaGlnaGxpZ2h0IGFwcGVhcmFuY2Ugb2YgaG92ZXJlZC1vdmVyIG5vZGVzLiBNYXkgYmUgb21p
dHRlZCBpZiA8Y29kZT5lbmFibGVkID09IGZhbHNlPC9jb2RlPi4iIH0sCkBAIC02ODgsNiArNjk4
LDcgQEAKICAgICAgICAgewogICAgICAgICAgICAgIm5hbWUiOiAicG93ZXJFZmZpY2llbnRQbGF5
YmFja1N0YXRlQ2hhbmdlZCIsCiAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQ2FsbGVkIHdo
ZW4gYW4gZWxlbWVudCBlbnRlcnMvZXhpdHMgYSBwb3dlciBlZmZpY2llbnQgcGxheWJhY2sgc3Rh
dGUuIiwKKyAgICAgICAgICAgICJjb25kaXRpb24iOiAiRU5BQkxFKFZJREVPKSIsCiAgICAgICAg
ICAgICAicGFyYW1ldGVycyI6IFsKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vZGVJZCIs
ICIkcmVmIjogIk5vZGVJZCIgfSwKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFt
cCIsICIkcmVmIjogIk5ldHdvcmsuVGltZXN0YW1wIiB9LApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9JbmRleGVkREIuanNvbiBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvSW5kZXhlZERCLmpzb24KaW5kZXggOWQy
MzAwODkzMDcuLjg0M2QxYTZkY2I0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3Byb3RvY29sL0luZGV4ZWREQi5qc29uCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvSW5kZXhlZERCLmpzb24KQEAgLTEsNiArMSw2IEBACiB7
CiAgICAgImRvbWFpbiI6ICJJbmRleGVkREIiLAotICAgICJmZWF0dXJlR3VhcmQiOiAiRU5BQkxF
KElOREVYRURfREFUQUJBU0UpIiwKKyAgICAiY29uZGl0aW9uIjogIkVOQUJMRShJTkRFWEVEX0RB
VEFCQVNFKSIsCiAgICAgImRlYnVnZ2FibGVUeXBlcyI6IFsicGFnZSIsICJ3ZWItcGFnZSJdLAog
ICAgICJ0YXJnZXRUeXBlcyI6IFsicGFnZSJdLAogICAgICJ0eXBlcyI6IFsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvSW5zcGVjdG9yLmpzb24g
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL0luc3BlY3Rvci5qc29u
CmluZGV4IDJiYjhkNjI4NTVhLi5mZjkyZjNlNzBjOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9JbnNwZWN0b3IuanNvbgorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL0luc3BlY3Rvci5qc29uCkBAIC0zMyw2
ICszMyw3IEBACiAgICAgICAgIHsKICAgICAgICAgICAgICJuYW1lIjogImFjdGl2YXRlRXh0cmFE
b21haW5zIiwKICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJGaXJlZCB3aGVuIHRoZSBiYWNr
ZW5kIGhhcyBhbHRlcm5hdGUgZG9tYWlucyB0aGF0IG5lZWQgdG8gYmUgYWN0aXZhdGVkLiIsCisg
ICAgICAgICAgICAiY29uZGl0aW9uIjogIkVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKSIsCiAgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKICAgICAgICAgICAgICAgICB7
ICJuYW1lIjogImRvbWFpbnMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgInR5cGUiOiAi
c3RyaW5nIiB9LCAiZGVzY3JpcHRpb24iOiAiRG9tYWluIG5hbWVzIHRoYXQgbmVlZCBhY3RpdmF0
aW9uIiB9CiAgICAgICAgICAgICBdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3Byb3RvY29sL01lbW9yeS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9wcm90b2NvbC9NZW1vcnkuanNvbgppbmRleCAwYzNkOTE0Mzg3MS4uZjVjOWRhMWIw
ZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wv
TWVtb3J5Lmpzb24KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2Nv
bC9NZW1vcnkuanNvbgpAQCAtMSw3ICsxLDcgQEAKIHsKICAgICAiZG9tYWluIjogIk1lbW9yeSIs
CiAgICAgImRlc2NyaXB0aW9uIjogIk1lbW9yeSBkb21haW4gZXhwb3NlcyBwYWdlIG1lbW9yeSB0
cmFja2luZy4iLAotICAgICJmZWF0dXJlR3VhcmQiOiAiRU5BQkxFKFJFU09VUkNFX1VTQUdFKSIs
CisgICAgImNvbmRpdGlvbiI6ICJFTkFCTEUoUkVTT1VSQ0VfVVNBR0UpIiwKICAgICAiZGVidWdn
YWJsZVR5cGVzIjogWyJwYWdlIiwgIndlYi1wYWdlIl0sCiAgICAgInRhcmdldFR5cGVzIjogWyJw
YWdlIl0sCiAgICAgInR5cGVzIjogWwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9wcm90b2NvbC9QYWdlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3Byb3RvY29sL1BhZ2UuanNvbgppbmRleCA3ODk4MDgxMDE0MS4uNGJkYWVlNTdhMjcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvUGFn
ZS5qc29uCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvUGFn
ZS5qc29uCkBAIC00Myw2ICs0Myw3IEBACiAgICAgICAgIHsKICAgICAgICAgICAgICJpZCI6ICJB
cHBlYXJhbmNlIiwKICAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAi
Y29uZGl0aW9uIjogIkhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpIiwKICAgICAgICAgICAgICJl
bnVtIjogWyJMaWdodCIsICJEYXJrIl0sCiAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiUGFn
ZSBhcHBlYXJhbmNlIG5hbWUuIgogICAgICAgICB9LApAQCAtMjI3LDYgKzIyOCw3IEBACiAgICAg
ICAgIHsKICAgICAgICAgICAgICJuYW1lIjogInNldFNob3dSdWxlcnMiLAogICAgICAgICAgICAg
ImRlc2NyaXB0aW9uIjogIlJlcXVlc3RzIHRoYXQgYmFja2VuZCBkcmF3IHJ1bGVycyBpbiB0aGUg
aW5zcGVjdG9yIG92ZXJsYXkiLAorICAgICAgICAgICAgImNvbmRpdGlvbiI6ICIhUExBVEZPUk0o
SU9TX0ZBTUlMWSkiLAogICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCiAgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJyZXN1bHQiLCAidHlwZSI6ICJib29sZWFuIiwgImRlc2NyaXB0aW9uIjog
IlRydWUgZm9yIHNob3dpbmcgcnVsZXJzIiB9CiAgICAgICAgICAgICBdCkBAIC0yNDgsNiArMjUw
LDcgQEAKICAgICAgICAgewogICAgICAgICAgICAgIm5hbWUiOiAic2V0Rm9yY2VkQXBwZWFyYW5j
ZSIsCiAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRm9yY2VzIHRoZSBnaXZlbiBhcHBlYXJh
bmNlIGZvciB0aGUgcGFnZS4iLAorICAgICAgICAgICAgImNvbmRpdGlvbiI6ICJIQVZFKE9TX0RB
UktfTU9ERV9TVVBQT1JUKSIsCiAgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKICAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogImFwcGVhcmFuY2UiLCAiJHJlZiI6ICJBcHBlYXJhbmNlIiwgImRl
c2NyaXB0aW9uIjogIkFwcGVhcmFuY2UgbmFtZSB0byBmb3JjZS4gRW1wdHkgc3RyaW5nIGRpc2Fi
bGVzIHRoZSBvdmVycmlkZS4iIH0KICAgICAgICAgICAgIF0KQEAgLTI3OSw2ICsyODIsNyBAQAog
ICAgICAgICB7CiAgICAgICAgICAgICAibmFtZSI6ICJhcmNoaXZlIiwKICAgICAgICAgICAgICJk
ZXNjcmlwdGlvbiI6ICJHcmFiIGFuIGFyY2hpdmUgb2YgdGhlIHBhZ2UuIiwKKyAgICAgICAgICAg
ICJjb25kaXRpb24iOiAiRU5BQkxFKFdFQl9BUkNISVZFKSAmJiBVU0UoQ0YpIiwKICAgICAgICAg
ICAgICJyZXR1cm5zIjogWwogICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YSIsICJ0eXBl
IjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJCYXNlNjQtZW5jb2RlZCB3ZWIgYXJjaGl2ZS4i
IH0KICAgICAgICAgICAgIF0KQEAgLTM0Myw2ICszNDcsNyBAQAogICAgICAgICB7CiAgICAgICAg
ICAgICAibmFtZSI6ICJkZWZhdWx0QXBwZWFyYW5jZURpZENoYW5nZSIsCiAgICAgICAgICAgICAi
ZGVzY3JpcHRpb24iOiAiRmlyZWQgd2hlbiBwYWdlJ3MgZGVmYXVsdCBhcHBlYXJhbmNlIGNoYW5n
ZXMsIGV2ZW4gaWYgdGhlcmUgaXMgYSBmb3JjZWQgYXBwZWFyYW5jZS4iLAorICAgICAgICAgICAg
ImNvbmRpdGlvbiI6ICJIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKSIsCiAgICAgICAgICAgICAi
cGFyYW1ldGVycyI6IFsKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImFwcGVhcmFuY2UiLCAi
JHJlZiI6ICJBcHBlYXJhbmNlIiwgImRlc2NyaXB0aW9uIjogIk5hbWUgb2YgdGhlIGFwcGVhcmFu
Y2UgdGhhdCBpcyBhY3RpdmUgKG5vdCBjb25zaWRlcmluZyBhbnkgZm9yY2VkIGFwcGVhcmFuY2Uu
KSIgfQogICAgICAgICAgICAgXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9wcm90b2NvbC9TZXJ2aWNlV29ya2VyLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3Byb3RvY29sL1NlcnZpY2VXb3JrZXIuanNvbgppbmRleCA4YWMzZDRmN2Q2
Yi4uMGM1MDMwZmI2ODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3IvcHJvdG9jb2wvU2VydmljZVdvcmtlci5qc29uCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvcHJvdG9jb2wvU2VydmljZVdvcmtlci5qc29uCkBAIC0xLDYgKzEsNyBAQAog
ewogICAgICJkb21haW4iOiAiU2VydmljZVdvcmtlciIsCiAgICAgImRlc2NyaXB0aW9uIjogIkFj
dGlvbnMgYW5kIGV2ZW50cyByZWxhdGVkIHRvIHRoZSBpbnNwZWN0ZWQgc2VydmljZSB3b3JrZXIu
IiwKKyAgICAiY29uZGl0aW9uIjogIkVOQUJMRShTRVJWSUNFX1dPUktFUikiLAogICAgICJkZWJ1
Z2dhYmxlVHlwZXMiOiBbInNlcnZpY2Utd29ya2VyIl0sCiAgICAgInRhcmdldFR5cGVzIjogWyJz
ZXJ2aWNlLXdvcmtlciJdLAogICAgICJ0eXBlcyI6IFsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3JfdGVtcGxh
dGVzLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Y3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkKaW5kZXggYzdiMWM4N2UxMTkuLjA3NTE0NjcyYTRj
IDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9jcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weQpA
QCAtMTA4LDcgKzEwOCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNo
ZXIoQWx0ZXJuYXRlJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNw
YXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0K
IHByaXZhdGU6CiAgICAgQWx0ZXJuYXRlJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyKiBt
X2FsdGVybmF0ZURpc3BhdGNoZXIgeyBudWxscHRyIH07Ci0jZW5kaWYiIiIpCisjZW5kaWYgLy8g
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpIiIiKQogCiAgICAgQmFja2Vu
ZERpc3BhdGNoZXJIZWFkZXJBc3luY0NvbW1hbmREZWNsYXJhdGlvbiA9ICgKICAgICAiIiIgICAg
JHtjbGFzc0FuZEV4cG9ydE1hY3JvfSAke2NhbGxiYWNrTmFtZX0gOiBwdWJsaWMgQmFja2VuZERp
c3BhdGNoZXI6OkNhbGxiYWNrQmFzZSB7CkBAIC0xMjcsOCArMTI3LDggQEAgcHJpdmF0ZToKICAg
ICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFyYW1ldGVycyk7CiAKICR7ZGlzcGF0
Y2hDYXNlc30KLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFBy
b3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJyR7ZG9tYWlu
TmFtZX0uIiArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKKworICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5v
dEZvdW5kLCAiJyR7ZG9tYWluTmFtZX0uIiArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsK
IH0iIiIpCiAKICAgICBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uTGFyZ2VTd2l0Y2gg
PSAoCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9nZW5lcmF0ZV9jcHBfYWx0ZXJuYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIu
cHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0ZV9jcHBfYWx0ZXJuYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKaW5kZXggZTYy
Nzg4MGUxMzMuLmRjZDBiZjM0N2FmIDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYWx0ZXJuYXRlX2JhY2tlbmRf
ZGlzcGF0Y2hlcl9oZWFkZXIucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNo
ZXJfaGVhZGVyLnB5CkBAIC04Nyw3ICs4Nyw3IEBAIGNsYXNzIENwcEFsdGVybmF0ZUJhY2tlbmRE
aXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgICAgICAnY29t
bWFuZERlY2xhcmF0aW9ucyc6ICdcbicuam9pbihjb21tYW5kX2RlY2xhcmF0aW9ucyksCiAgICAg
ICAgIH0KIAotICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihk
b21haW4sIFRlbXBsYXRlKENwcFRlbXBsYXRlcy5BbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlckhl
YWRlckRvbWFpbkhhbmRsZXJJbnRlcmZhY2VEZWNsYXJhdGlvbikuc3Vic3RpdHV0ZShOb25lLCAq
KmhhbmRsZXJfYXJncykpCisgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3Jf
Y29uZGl0aW9uKGRvbWFpbi5jb25kaXRpb24sIFRlbXBsYXRlKENwcFRlbXBsYXRlcy5BbHRlcm5h
dGVCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckRvbWFpbkhhbmRsZXJJbnRlcmZhY2VEZWNsYXJhdGlv
bikuc3Vic3RpdHV0ZShOb25lLCAqKmhhbmRsZXJfYXJncykpCiAKICAgICBkZWYgX2dlbmVyYXRl
X2hhbmRsZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQoc2VsZiwgY29tbWFuZCk6CiAgICAgICAg
IGxpbmVzID0gW10KQEAgLTEwMCw0ICsxMDAsNCBAQCBjbGFzcyBDcHBBbHRlcm5hdGVCYWNrZW5k
RGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICAgICAgJ3Bh
cmFtZXRlcnMnOiAnLCAnLmpvaW4ocGFyYW1ldGVycyksCiAgICAgICAgIH0KICAgICAgICAgbGlu
ZXMuYXBwZW5kKCcgICAgdmlydHVhbCB2b2lkICUoY29tbWFuZE5hbWUpcyglKHBhcmFtZXRlcnMp
cykgPSAwOycgJSBjb21tYW5kX2FyZ3MpCi0gICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMp
CisgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGNvbW1h
bmQuY29uZGl0aW9uLCAnXG4nLmpvaW4obGluZXMpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRf
ZGlzcGF0Y2hlcl9oZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQpp
bmRleCBlM2ZlNGUxMDA0Mi4uMTBkOGYxNGJkNWYgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rp
c3BhdGNoZXJfaGVhZGVyLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5
CkBAIC05MSw3ICs5MSw3IEBAIGNsYXNzIENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJh
dG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgIGxpbmVzID0gW10KICAgICAgICAgbGluZXMuYXBw
ZW5kKCcjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpJykKICAgICAg
ICAgZm9yIGRvbWFpbiBpbiBkb21haW5zOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYu
d3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCAnY2xhc3MgQWx0ZXJuYXRlJXNCYWNr
ZW5kRGlzcGF0Y2hlcjsnICUgZG9tYWluLmRvbWFpbl9uYW1lKSkKKyAgICAgICAgICAgIGxpbmVz
LmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRvbWFpbi5jb25kaXRp
b24sICdjbGFzcyBBbHRlcm5hdGUlc0JhY2tlbmREaXNwYXRjaGVyOycgJSBkb21haW4uZG9tYWlu
X25hbWUpKQogICAgICAgICBsaW5lcy5hcHBlbmQoJyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUyknKQogICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVz
KQogCkBAIC0xMTMsNyArMTEzLDcgQEAgY2xhc3MgQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJH
ZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgICAgICdjb21tYW5kRGVjbGFyYXRpb25z
JzogIlxuIi5qb2luKGNvbW1hbmRfZGVjbGFyYXRpb25zKQogICAgICAgICB9CiAKLSAgICAgICAg
cmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCBUZW1wbGF0ZShD
cHBUZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNoZXJIZWFkZXJEb21haW5IYW5kbGVyRGVjbGFyYXRp
b24pLnN1YnN0aXR1dGUoTm9uZSwgKipoYW5kbGVyX2FyZ3MpKQorICAgICAgICByZXR1cm4gc2Vs
Zi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9uLCBUZW1wbGF0
ZShDcHBUZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNoZXJIZWFkZXJEb21haW5IYW5kbGVyRGVjbGFy
YXRpb24pLnN1YnN0aXR1dGUoTm9uZSwgKipoYW5kbGVyX2FyZ3MpKQogCiAgICAgZGVmIF9nZW5l
cmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfcGFyYW1ldGVyKHNlbGYsIHBhcmFtZXRlciwgY29tbWFu
ZCk6CiAgICAgICAgIGVudW1fYXJncyA9IHsKQEAgLTE2MSw3ICsxNjEsNyBAQCBjbGFzcyBDcHBC
YWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICAg
ICAgJ3BhcmFtZXRlcnMnOiAiLCAiLmpvaW4ocGFyYW1ldGVycykKICAgICAgICAgfQogICAgICAg
ICBsaW5lcy5hcHBlbmQoJyAgICB2aXJ0dWFsIHZvaWQgJShjb21tYW5kTmFtZSlzKCUocGFyYW1l
dGVycylzKSA9IDA7JyAlIGNvbW1hbmRfYXJncykKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihs
aW5lcykKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24o
Y29tbWFuZC5jb25kaXRpb24sICdcbicuam9pbihsaW5lcykpCiAKICAgICBkZWYgX2dlbmVyYXRl
X2FzeW5jX2hhbmRsZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQoc2VsZiwgY29tbWFuZCk6CiAg
ICAgICAgIGNhbGxiYWNrTmFtZSA9ICIlc0NhbGxiYWNrIiAlIHVjZmlyc3QoY29tbWFuZC5jb21t
YW5kX25hbWUpCkBAIC0xOTIsNyArMTkyLDcgQEAgY2xhc3MgQ3BwQmFja2VuZERpc3BhdGNoZXJI
ZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgICAgICdvdXRQYXJhbWV0ZXJz
JzogIiwgIi5qb2luKG91dF9wYXJhbWV0ZXJzKSwKICAgICAgICAgfQogCi0gICAgICAgIHJldHVy
biBUZW1wbGF0ZShDcHBUZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNoZXJIZWFkZXJBc3luY0NvbW1h
bmREZWNsYXJhdGlvbikuc3Vic3RpdHV0ZShOb25lLCAqKmNvbW1hbmRfYXJncykKKyAgICAgICAg
cmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oY29tbWFuZC5jb25kaXRp
b24sIFRlbXBsYXRlKENwcFRlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hlckhlYWRlckFzeW5jQ29t
bWFuZERlY2xhcmF0aW9uKS5zdWJzdGl0dXRlKE5vbmUsICoqY29tbWFuZF9hcmdzKSkKIAogICAg
IGRlZiBfZ2VuZXJhdGVfZGlzcGF0Y2hlcl9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbihzZWxmLCBk
b21haW4pOgogICAgICAgICBjbGFzc0NvbXBvbmVudHMgPSBbJ2NsYXNzJ10KQEAgLTIyMCw3ICsy
MjAsNyBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihDcHBHZW5l
cmF0b3IpOgogICAgICAgICAgICAgJ2NvbW1hbmREZWNsYXJhdGlvbnMnOiAiXG4iLmpvaW4oZGVj
bGFyYXRpb25zKQogICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1
YXJkX2Zvcl9kb21haW4oZG9tYWluLCBUZW1wbGF0ZShDcHBUZW1wbGF0ZXMuQmFja2VuZERpc3Bh
dGNoZXJIZWFkZXJEb21haW5EaXNwYXRjaGVyRGVjbGFyYXRpb24pLnN1YnN0aXR1dGUoTm9uZSwg
KipoYW5kbGVyX2FyZ3MpKQorICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9y
X2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9uLCBUZW1wbGF0ZShDcHBUZW1wbGF0ZXMuQmFja2Vu
ZERpc3BhdGNoZXJIZWFkZXJEb21haW5EaXNwYXRjaGVyRGVjbGFyYXRpb24pLnN1YnN0aXR1dGUo
Tm9uZSwgKipoYW5kbGVyX2FyZ3MpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9kaXNwYXRjaGVyX2Rl
Y2xhcmF0aW9uX2Zvcl9jb21tYW5kKHNlbGYsIGNvbW1hbmQpOgotICAgICAgICByZXR1cm4gIiAg
ICB2b2lkICVzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRl
cnMpOyIgJSBjb21tYW5kLmNvbW1hbmRfbmFtZQorICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dp
dGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihjb21tYW5kLmNvbmRpdGlvbiwgIiAgICB2b2lkICVzKGxv
bmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOyIgJSBjb21t
YW5kLmNvbW1hbmRfbmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1w
bGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5
CmluZGV4IGExNTk2MWE2NDc0Li5kYWYxOWM5NTBmYiAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRf
ZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVy
X2ltcGxlbWVudGF0aW9uLnB5CkBAIC02MCw3ICs2MCw3IEBAIGNsYXNzIENwcEJhY2tlbmREaXNw
YXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgICAg
IHNlY29uZGFyeV9pbmNsdWRlcy5hcHBlbmQoJycpCiAgICAgICAgICAgICBzZWNvbmRhcnlfaW5j
bHVkZXMuYXBwZW5kKCcjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
JykKICAgICAgICAgICAgIHNlY29uZGFyeV9pbmNsdWRlcy5hcHBlbmQoJyNpbmNsdWRlICIlc0Fs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIicgJSBzZWxmLnByb3RvY29sX25hbWUoKSkKLSAg
ICAgICAgICAgIHNlY29uZGFyeV9pbmNsdWRlcy5hcHBlbmQoJyNlbmRpZicpCisgICAgICAgICAg
ICBzZWNvbmRhcnlfaW5jbHVkZXMuYXBwZW5kKCcjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpJykKIAogICAgICAgICBoZWFkZXJfYXJncyA9IHsKICAgICAg
ICAgICAgICdwcmltYXJ5SW5jbHVkZSc6ICciJXNCYWNrZW5kRGlzcGF0Y2hlcnMuaCInICUgc2Vs
Zi5wcm90b2NvbF9uYW1lKCksCkBAIC05Myw3ICs5Myw3IEBAIGNsYXNzIENwcEJhY2tlbmREaXNw
YXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgICAg
ICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lCiAgICAgICAgIH0KICAgICAgICAgZGVz
dHJ1Y3RvciA9ICclKGRvbWFpbk5hbWUpc0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6fiUoZG9t
YWluTmFtZSlzQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9JyAlIGRlc3RydWN0b3JfYXJn
cwotICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4s
IGRlc3RydWN0b3IpCisgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29u
ZGl0aW9uKGRvbWFpbi5jb25kaXRpb24sIGRlc3RydWN0b3IpCiAKICAgICBkZWYgX2dlbmVyYXRl
X2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25zX2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToKICAg
ICAgICAgaW1wbGVtZW50YXRpb25zID0gW10KQEAgLTExNSwxNyArMTE1LDI5IEBAIGNsYXNzIENw
cEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToK
ICAgICAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fz
eW5jX2Rpc3BhdGNoZXJfY2xhc3NfZm9yX2RvbWFpbihjb21tYW5kLCBkb21haW4pKQogICAgICAg
ICAgICAgaW1wbGVtZW50YXRpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2lt
cGxlbWVudGF0aW9uX2Zvcl9jb21tYW5kKGNvbW1hbmQsIGRvbWFpbikpCiAKLSAgICAgICAgcmV0
dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCAnXG5cbicuam9pbihp
bXBsZW1lbnRhdGlvbnMpKQorICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9y
X2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9uLCAnXG5cbicuam9pbihpbXBsZW1lbnRhdGlvbnMp
KQogCiAgICAgZGVmIF9nZW5lcmF0ZV9zbWFsbF9kaXNwYXRjaGVyX3N3aXRjaF9pbXBsZW1lbnRh
dGlvbl9mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6CiAgICAgICAgIGNvbW1hbmRzID0gc2VsZi5j
b21tYW5kc19mb3JfZG9tYWluKGRvbWFpbikKIAogICAgICAgICBjYXNlcyA9IFtdCi0gICAgICAg
IGNhc2VzLmFwcGVuZCgnICAgIGlmIChtZXRob2QgPT0gIiVzIiknICUgY29tbWFuZHNbMF0uY29t
bWFuZF9uYW1lKQotICAgICAgICBjYXNlcy5hcHBlbmQoJyAgICAgICAgJXMocmVxdWVzdElkLCBX
VEZNb3ZlKHBhcmFtZXRlcnMpKTsnICUgY29tbWFuZHNbMF0uY29tbWFuZF9uYW1lKQorCisgICAg
ICAgIGZpcnN0X2NvbW1hbmRfc3RyaW5nID0gIlxuIi5qb2luKFsKKyAgICAgICAgICAgICcgICAg
aWYgKG1ldGhvZCA9PSAiJXMiKSB7JyAlIGNvbW1hbmRzWzBdLmNvbW1hbmRfbmFtZSwKKyAgICAg
ICAgICAgICcgICAgICAgICVzKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7JyAlIGNv
bW1hbmRzWzBdLmNvbW1hbmRfbmFtZSwKKyAgICAgICAgICAgICcgICAgICAgIHJldHVybjsnLAor
ICAgICAgICAgICAgJyAgICB9JywKKyAgICAgICAgXSkKKyAgICAgICAgY2FzZXMuYXBwZW5kKHNl
bGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oY29tbWFuZHNbMF0uY29uZGl0aW9uLCBm
aXJzdF9jb21tYW5kX3N0cmluZykpCisKICAgICAgICAgZm9yIGNvbW1hbmQgaW4gY29tbWFuZHNb
MTpdOgotICAgICAgICAgICAgY2FzZXMuYXBwZW5kKCcgICAgZWxzZSBpZiAobWV0aG9kID09ICIl
cyIpJyAlIGNvbW1hbmQuY29tbWFuZF9uYW1lKQotICAgICAgICAgICAgY2FzZXMuYXBwZW5kKCcg
ICAgICAgICVzKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7JyAlIGNvbW1hbmQuY29t
bWFuZF9uYW1lKQorICAgICAgICAgICAgYWRkaXRpb25hbF9jb21tYW5kX3N0cmluZyA9ICJcbiIu
am9pbihbCisgICAgICAgICAgICAgICAgJyAgICBpZiAobWV0aG9kID09ICIlcyIpIHsnICUgY29t
bWFuZC5jb21tYW5kX25hbWUsCisgICAgICAgICAgICAgICAgJyAgICAgICAgJXMocmVxdWVzdElk
LCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsnICUgY29tbWFuZC5jb21tYW5kX25hbWUsCisgICAgICAg
ICAgICAgICAgJyAgICAgICAgcmV0dXJuOycsCisgICAgICAgICAgICAgICAgJyAgICB9JywKKyAg
ICAgICAgICAgIF0pCisgICAgICAgICAgICBjYXNlcy5hcHBlbmQoc2VsZi53cmFwX3dpdGhfZ3Vh
cmRfZm9yX2NvbmRpdGlvbihjb21tYW5kLmNvbmRpdGlvbiwgYWRkaXRpb25hbF9jb21tYW5kX3N0
cmluZykpCiAKICAgICAgICAgc3dpdGNoX2FyZ3MgPSB7CiAgICAgICAgICAgICAnZG9tYWluTmFt
ZSc6IGRvbWFpbi5kb21haW5fbmFtZSwKQEAgLTE0Myw3ICsxNTUsNyBAQCBjbGFzcyBDcHBCYWNr
ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAg
ICAgICAgICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUsCiAgICAgICAgICAg
ICAgICAgJ2NvbW1hbmROYW1lJzogY29tbWFuZC5jb21tYW5kX25hbWUKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGNhc2VzLmFwcGVuZCgnICAgICAgICAgICAgeyAiJShjb21tYW5kTmFtZSlz
IiwgJiUoZG9tYWluTmFtZSlzQmFja2VuZERpc3BhdGNoZXI6OiUoY29tbWFuZE5hbWUpcyB9LCcg
JSBhcmdzKQorICAgICAgICAgICAgY2FzZXMuYXBwZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zv
cl9jb25kaXRpb24oY29tbWFuZC5jb25kaXRpb24sICcgICAgICAgICAgICB7ICIlKGNvbW1hbmRO
YW1lKXMiLCAmJShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0Y2hlcjo6JShjb21tYW5kTmFtZSlz
IH0sJyAlIGFyZ3MpKQogCiAgICAgICAgIHN3aXRjaF9hcmdzID0gewogICAgICAgICAgICAgJ2Rv
bWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUsCkBAIC0xODUsNyArMTk3LDcgQEAgY2xhc3Mg
Q3BwQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihDcHBHZW5lcmF0b3Ip
OgogICAgICAgICAgICAgJ2Zvcm1hbFBhcmFtZXRlcnMnOiAiLCAiLmpvaW4oZm9ybWFsX3BhcmFt
ZXRlcnMpLAogICAgICAgICAgICAgJ291dFBhcmFtZXRlckFzc2lnbm1lbnRzJzogIlxuIi5qb2lu
KG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMpCiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFRl
bXBsYXRlKENwcFRlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uQXN5bmND
b21tYW5kKS5zdWJzdGl0dXRlKE5vbmUsICoqYXN5bmNfYXJncykKKyAgICAgICAgcmV0dXJuIHNl
bGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oY29tbWFuZC5jb25kaXRpb24sIFRlbXBs
YXRlKENwcFRlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uQXN5bmNDb21t
YW5kKS5zdWJzdGl0dXRlKE5vbmUsICoqYXN5bmNfYXJncykpCiAKICAgICBkZWYgX2dlbmVyYXRl
X2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25fZm9yX2NvbW1hbmQoc2VsZiwgY29tbWFuZCwgZG9t
YWluKToKICAgICAgICAgaW5fcGFyYW1ldGVyX2RlY2xhcmF0aW9ucyA9IFtdCkBAIC0zMDQsNyAr
MzE2LDcgQEAgY2xhc3MgQ3BwQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRv
cihDcHBHZW5lcmF0b3IpOgogICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIG1fYWx0
ZXJuYXRlRGlzcGF0Y2hlci0+JShjb21tYW5kTmFtZSlzKCUoYWx0ZXJuYXRlSW52b2NhdGlvblBh
cmFtZXRlcnMpcyk7JyAlIGNvbW1hbmRfYXJncykKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgn
ICAgICAgICByZXR1cm47JykKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIH0nKQotICAg
ICAgICAgICAgbGluZXMuYXBwZW5kKCcjZW5kaWYnKQorICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCcjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpJykKICAg
ICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKIAogICAgICAgICBpZiBjb21tYW5kLmlzX2FzeW5j
OgpAQCAtMzM0LDQgKzM0Niw0IEBAIGNsYXNzIENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50
YXRpb25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgn
ICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmRE
aXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOycpCiAKICAgICAgICAgbGlu
ZXMuYXBwZW5kKCd9JykKLSAgICAgICAgcmV0dXJuICJcbiIuam9pbihsaW5lcykKKyAgICAgICAg
cmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oY29tbWFuZC5jb25kaXRp
b24sICJcbiIuam9pbihsaW5lcykpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hl
cl9oZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKaW5kZXggNWNm
NzQ3ODU0MzMuLjExOWQyM2MzOGNkIDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hl
cl9oZWFkZXIucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CkBAIC0x
MTEsNyArMTExLDcgQEAgY2xhc3MgQ3BwRnJvbnRlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9y
KENwcEdlbmVyYXRvcik6CiAgICAgICAgICAgICAnZXZlbnREZWNsYXJhdGlvbnMnOiAiXG4iLmpv
aW4oZXZlbnRfZGVjbGFyYXRpb25zKQogICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuIHNlbGYu
d3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCBUZW1wbGF0ZShDcHBUZW1wbGF0ZXMu
RnJvbnRlbmREaXNwYXRjaGVyRG9tYWluRGlzcGF0Y2hlckRlY2xhcmF0aW9uKS5zdWJzdGl0dXRl
KE5vbmUsICoqaGFuZGxlcl9hcmdzKSkKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1
YXJkX2Zvcl9jb25kaXRpb24oZG9tYWluLmNvbmRpdGlvbiwgVGVtcGxhdGUoQ3BwVGVtcGxhdGVz
LkZyb250ZW5kRGlzcGF0Y2hlckRvbWFpbkRpc3BhdGNoZXJEZWNsYXJhdGlvbikuc3Vic3RpdHV0
ZShOb25lLCAqKmhhbmRsZXJfYXJncykpCiAKICAgICBkZWYgX2dlbmVyYXRlX2Rpc3BhdGNoZXJf
ZGVjbGFyYXRpb25fZm9yX2V2ZW50KHNlbGYsIGV2ZW50LCBkb21haW4sIHVzZWRfZW51bV9uYW1l
cyk6CiAgICAgICAgIGZvcm1hbF9wYXJhbWV0ZXJzID0gW10KQEAgLTEyMyw0ICsxMjMsNCBAQCBj
bGFzcyBDcHBGcm9udGVuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToK
ICAgICAgICAgICAgICAgICB1c2VkX2VudW1fbmFtZXMuYWRkKHBhcmFtZXRlci5wYXJhbWV0ZXJf
bmFtZSkKIAogICAgICAgICBsaW5lcy5hcHBlbmQoIiAgICB2b2lkICVzKCVzKTsiICUgKGV2ZW50
LmV2ZW50X25hbWUsICIsICIuam9pbihmb3JtYWxfcGFyYW1ldGVycykpKQotICAgICAgICByZXR1
cm4gIlxuIi5qb2luKGxpbmVzKQorICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRf
Zm9yX2NvbmRpdGlvbihldmVudC5jb25kaXRpb24sICJcbiIuam9pbihsaW5lcykpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9u
dGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CmluZGV4IDkwNGQyMjdhNmU5Li42NmRj
NmUxODVjZiAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRp
b24ucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVn
ZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKQEAg
LTgyLDcgKzgyLDcgQEAgY2xhc3MgQ3BwRnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25H
ZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgZm9yIGV2ZW50IGluIGV2ZW50czoKICAg
ICAgICAgICAgIGltcGxlbWVudGF0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfZGlzcGF0Y2hl
cl9pbXBsZW1lbnRhdGlvbl9mb3JfZXZlbnQoZXZlbnQsIGRvbWFpbikpCiAKLSAgICAgICAgcmV0
dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCAnXG5cbicuam9pbihp
bXBsZW1lbnRhdGlvbnMpKQorICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9y
X2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9uLCAnXG5cbicuam9pbihpbXBsZW1lbnRhdGlvbnMp
KQogCiAgICAgZGVmIF9nZW5lcmF0ZV9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uX2Zvcl9ldmVu
dChzZWxmLCBldmVudCwgZG9tYWluKToKICAgICAgICAgbGluZXMgPSBbXQpAQCAtMTMxLDQgKzEz
MSw0IEBAIGNsYXNzIENwcEZyb250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9y
KENwcEdlbmVyYXRvcik6CiAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKICAgICAgICAgbGluZXMu
YXBwZW5kKCcgICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNP
TlN0cmluZygpKTsnKQogICAgICAgICBsaW5lcy5hcHBlbmQoJ30nKQotICAgICAgICByZXR1cm4g
IlxuIi5qb2luKGxpbmVzKQorICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9y
X2NvbmRpdGlvbihldmVudC5jb25kaXRpb24sICJcbiIuam9pbihsaW5lcykpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2hlYWRl
ci5weQppbmRleCA0MjNkN2EyMzAwOC4uNWUwYTZmNTY5MWUgMTAwNzU1Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90
b2NvbF90eXBlc19oZWFkZXIucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2hlYWRlci5weQpA
QCAtMTA1LDcgKzEwNSw3IEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNIZWFkZXJHZW5lcmF0b3Io
Q3BwR2VuZXJhdG9yKToKICAgICAgICAgICAgICAgICBkb21haW5fbGluZXMuYXBwZW5kKCdzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIFZFUlNJT04gPSAlczsnICUgdmVyc2lvbikKIAogICAgICAg
ICAgICAgZG9tYWluX2xpbmVzLmFwcGVuZCgnfSAvLyAlcycgJSBkb21haW4uZG9tYWluX25hbWUp
Ci0gICAgICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2Rv
bWFpbihkb21haW4sICdcbicuam9pbihkb21haW5fbGluZXMpKSkKKyAgICAgICAgICAgIHNlY3Rp
b25zLmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRvbWFpbi5jb25k
aXRpb24sICdcbicuam9pbihkb21haW5fbGluZXMpKSkKIAogICAgICAgICBpZiBsZW4oc2VjdGlv
bnMpID09IDA6CiAgICAgICAgICAgICByZXR1cm4gJycKQEAgLTEzMiwxMCArMTMyLDEwIEBAIGNs
YXNzIENwcFByb3RvY29sVHlwZXNIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAg
ICAgICAgIGRvbWFpbl9saW5lcy5hcHBlbmQoJ25hbWVzcGFjZSAlcyB7JyAlIGRvbWFpbi5kb21h
aW5fbmFtZSkKIAogICAgICAgICAgICAgIyBGb3J3YXJkLWRlY2xhcmUgYWxsIGNsYXNzZXMgc28g
dGhlIHR5cGUgYnVpbGRlcnMgd29uJ3QgYnJlYWsgaWYgcmVhcnJhbmdlZC4KLSAgICAgICAgICAg
IGRvbWFpbl9saW5lcy5leHRlbmQoJ2NsYXNzICVzOycgJSBvYmplY3RfdHlwZS5yYXdfbmFtZSgp
IGZvciBvYmplY3RfdHlwZSBpbiBvYmplY3RfdHlwZXMpCi0gICAgICAgICAgICBkb21haW5fbGlu
ZXMuZXh0ZW5kKCdlbnVtIGNsYXNzICVzOycgJSBlbnVtX3R5cGUucmF3X25hbWUoKSBmb3IgZW51
bV90eXBlIGluIGVudW1fdHlwZXMpCisgICAgICAgICAgICBkb21haW5fbGluZXMuZXh0ZW5kKHNl
bGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24ob2JqZWN0X3R5cGUuZGVjbGFyYXRpb24o
KS5jb25kaXRpb24sICdjbGFzcyAlczsnICUgb2JqZWN0X3R5cGUucmF3X25hbWUoKSkgZm9yIG9i
amVjdF90eXBlIGluIG9iamVjdF90eXBlcykKKyAgICAgICAgICAgIGRvbWFpbl9saW5lcy5leHRl
bmQoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihlbnVtX3R5cGUuZGVjbGFyYXRp
b24oKS5jb25kaXRpb24sICdlbnVtIGNsYXNzICVzOycgJSBlbnVtX3R5cGUucmF3X25hbWUoKSkg
Zm9yIGVudW1fdHlwZSBpbiBlbnVtX3R5cGVzKQogICAgICAgICAgICAgZG9tYWluX2xpbmVzLmFw
cGVuZCgnfSAvLyAlcycgJSBkb21haW4uZG9tYWluX25hbWUpCi0gICAgICAgICAgICBzZWN0aW9u
cy5hcHBlbmQoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4sICdcbicuam9p
bihkb21haW5fbGluZXMpKSkKKyAgICAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLndyYXBf
d2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRvbWFpbi5jb25kaXRpb24sICdcbicuam9pbihkb21h
aW5fbGluZXMpKSkKIAogICAgICAgICBpZiBsZW4oc2VjdGlvbnMpID09IDA6CiAgICAgICAgICAg
ICByZXR1cm4gJycKQEAgLTE3MCw3ICsxNzAsNyBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVzSGVh
ZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgICAgICBpZiBsZW4oZGVjbGFyYXRp
b24uZGVzY3JpcHRpb24pID4gMDoKICAgICAgICAgICAgICAgICB0eXBlZGVmX2xpbmVzLmFwcGVu
ZCgnLyogJXMgKi8nICUgZGVjbGFyYXRpb24uZGVzY3JpcHRpb24pCiAgICAgICAgICAgICB0eXBl
ZGVmX2xpbmVzLmFwcGVuZCgndHlwZWRlZiAlcyAlczsnICUgKHByaW1pdGl2ZV9uYW1lLCBkZWNs
YXJhdGlvbi50eXBlX25hbWUpKQotICAgICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCdcbicuam9p
bih0eXBlZGVmX2xpbmVzKSkKKyAgICAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLndyYXBf
d2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRlY2xhcmF0aW9uLmNvbmRpdGlvbiwgJ1xuJy5qb2lu
KHR5cGVkZWZfbGluZXMpKSkKIAogICAgICAgICBmb3IgZGVjbGFyYXRpb24gaW4gYXJyYXlfZGVj
bGFyYXRpb25zOgogICAgICAgICAgICAgZWxlbWVudF90eXBlID0gQ3BwR2VuZXJhdG9yLmNwcF9w
cm90b2NvbF90eXBlX2Zvcl90eXBlKGRlY2xhcmF0aW9uLnR5cGUuZWxlbWVudF90eXBlKQpAQCAt
MTc4LDEzICsxNzgsMTMgQEAgY2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0hlYWRlckdlbmVyYXRvcihD
cHBHZW5lcmF0b3IpOgogICAgICAgICAgICAgaWYgbGVuKGRlY2xhcmF0aW9uLmRlc2NyaXB0aW9u
KSA+IDA6CiAgICAgICAgICAgICAgICAgdHlwZWRlZl9saW5lcy5hcHBlbmQoJy8qICVzICovJyAl
IGRlY2xhcmF0aW9uLmRlc2NyaXB0aW9uKQogICAgICAgICAgICAgdHlwZWRlZl9saW5lcy5hcHBl
bmQoJ3R5cGVkZWYgSlNPTjo6QXJyYXlPZjwlcz4gJXM7JyAlIChlbGVtZW50X3R5cGUsIGRlY2xh
cmF0aW9uLnR5cGVfbmFtZSkpCi0gICAgICAgICAgICBzZWN0aW9ucy5hcHBlbmQoJ1xuJy5qb2lu
KHR5cGVkZWZfbGluZXMpKQorICAgICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYud3JhcF93
aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZGVjbGFyYXRpb24uY29uZGl0aW9uLCAnXG4nLmpvaW4o
dHlwZWRlZl9saW5lcykpKQogCiAgICAgICAgIGxpbmVzID0gW10KICAgICAgICAgbGluZXMuYXBw
ZW5kKCduYW1lc3BhY2UgJXMgeycgJSBkb21haW4uZG9tYWluX25hbWUpCiAgICAgICAgIGxpbmVz
LmFwcGVuZCgnXG4nLmpvaW4oc2VjdGlvbnMpKQogICAgICAgICBsaW5lcy5hcHBlbmQoJ30gLy8g
JXMnICUgZG9tYWluLmRvbWFpbl9uYW1lKQotICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhf
Z3VhcmRfZm9yX2RvbWFpbihkb21haW4sICdcbicuam9pbihsaW5lcykpCisgICAgICAgIHJldHVy
biBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRvbWFpbi5jb25kaXRpb24sICdc
bicuam9pbihsaW5lcykpCiAKICAgICBkZWYgX2dlbmVyYXRlX2VudW1fY29uc3RhbnRfdmFsdWVf
Y29udmVyc2lvbl9tZXRob2RzKHNlbGYpOgogICAgICAgICBpZiBub3Qgc2VsZi5hc3NpZ25lZF9l
bnVtX3ZhbHVlcygpOgpAQCAtMjI3LDcgKzIyNyw3IEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNI
ZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgbGluZXMuYXBwZW5kKCduYW1l
c3BhY2UgJXMgeycgJSBkb21haW4uZG9tYWluX25hbWUpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgn
XG4nLmpvaW4oc2VjdGlvbnMpKQogICAgICAgICBsaW5lcy5hcHBlbmQoJ30gLy8gJXMnICUgZG9t
YWluLmRvbWFpbl9uYW1lKQotICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9y
X2RvbWFpbihkb21haW4sICdcbicuam9pbihsaW5lcykpCisgICAgICAgIHJldHVybiBzZWxmLndy
YXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRvbWFpbi5jb25kaXRpb24sICdcbicuam9pbihs
aW5lcykpCiAKICAgICBkZWYgX2dlbmVyYXRlX2NsYXNzX2Zvcl9vYmplY3RfZGVjbGFyYXRpb24o
c2VsZiwgdHlwZV9kZWNsYXJhdGlvbiwgZG9tYWluKToKICAgICAgICAgaWYgbGVuKHR5cGVfZGVj
bGFyYXRpb24udHlwZV9tZW1iZXJzKSA9PSAwOgpAQCAtMjc5LDEzICsyNzksMTMgQEAgY2xhc3Mg
Q3BwUHJvdG9jb2xUeXBlc0hlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogCiAgICAgICAg
IGxpbmVzLmFwcGVuZCgnfTsnKQogICAgICAgICBsaW5lcy5hcHBlbmQoJycpCi0gICAgICAgIHJl
dHVybiAnXG4nLmpvaW4obGluZXMpCisgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFy
ZF9mb3JfY29uZGl0aW9uKHR5cGVfZGVjbGFyYXRpb24uY29uZGl0aW9uLCAnXG4nLmpvaW4obGlu
ZXMpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9zdHJ1Y3RfZm9yX2VudW1fZGVjbGFyYXRpb24oc2Vs
ZiwgZW51bV9kZWNsYXJhdGlvbik6CiAgICAgICAgIGxpbmVzID0gW10KICAgICAgICAgbGluZXMu
YXBwZW5kKCcvKiAlcyAqLycgJSBlbnVtX2RlY2xhcmF0aW9uLmRlc2NyaXB0aW9uKQogICAgICAg
ICBsaW5lcy5leHRlbmQoc2VsZi5fZ2VuZXJhdGVfc3RydWN0X2Zvcl9lbnVtX3R5cGUoZW51bV9k
ZWNsYXJhdGlvbi50eXBlX25hbWUsIGVudW1fZGVjbGFyYXRpb24udHlwZSkpCi0gICAgICAgIHJl
dHVybiAnXG4nLmpvaW4obGluZXMpCisgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFy
ZF9mb3JfY29uZGl0aW9uKGVudW1fZGVjbGFyYXRpb24uY29uZGl0aW9uLCAnXG4nLmpvaW4obGlu
ZXMpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9zdHJ1Y3RfZm9yX2Fub255bW91c19lbnVtX21lbWJl
cihzZWxmLCBlbnVtX21lbWJlcik6CiAgICAgICAgIGRlZiBhcHBseV9pbmRlbnRhdGlvbihsaW5l
KToKQEAgLTM4MSwxMCArMzgxLDEwIEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNIZWFkZXJHZW5l
cmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgICAgIGZvciB0eXBlX2RlY2xhcmF0aW9uIGlu
IGRlY2xhcmF0aW9uc190b19nZW5lcmF0ZToKICAgICAgICAgICAgICAgICBmb3IgdHlwZV9tZW1i
ZXIgaW4gdHlwZV9kZWNsYXJhdGlvbi50eXBlX21lbWJlcnM6CiAgICAgICAgICAgICAgICAgICAg
IGlmIGlzaW5zdGFuY2UodHlwZV9tZW1iZXIudHlwZSwgRW51bVR5cGUpOgotICAgICAgICAgICAg
ICAgICAgICAgICAgdHlwZV9hcmd1bWVudHMuYXBwZW5kKChDcHBHZW5lcmF0b3IuY3BwX3Byb3Rv
Y29sX3R5cGVfZm9yX3R5cGVfbWVtYmVyKHR5cGVfbWVtYmVyLCB0eXBlX2RlY2xhcmF0aW9uKSwg
RmFsc2UpKQorICAgICAgICAgICAgICAgICAgICAgICAgdHlwZV9hcmd1bWVudHMuYXBwZW5kKChz
ZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKHR5cGVfZGVjbGFyYXRpb24uY29uZGl0
aW9uLCBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGVfbWVtYmVyKHR5cGVf
bWVtYmVyLCB0eXBlX2RlY2xhcmF0aW9uKSksIEZhbHNlKSkKIAogICAgICAgICAgICAgICAgIGlm
IGlzaW5zdGFuY2UodHlwZV9kZWNsYXJhdGlvbi50eXBlLCBPYmplY3RUeXBlKToKLSAgICAgICAg
ICAgICAgICAgICAgdHlwZV9hcmd1bWVudHMuYXBwZW5kKChDcHBHZW5lcmF0b3IuY3BwX3Byb3Rv
Y29sX3R5cGVfZm9yX3R5cGUodHlwZV9kZWNsYXJhdGlvbi50eXBlKSwgR2VuZXJhdG9yLnR5cGVf
bmVlZHNfcnVudGltZV9jYXN0cyh0eXBlX2RlY2xhcmF0aW9uLnR5cGUpKSkKKyAgICAgICAgICAg
ICAgICAgICAgdHlwZV9hcmd1bWVudHMuYXBwZW5kKChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3Jf
Y29uZGl0aW9uKHR5cGVfZGVjbGFyYXRpb24uY29uZGl0aW9uLCBDcHBHZW5lcmF0b3IuY3BwX3By
b3RvY29sX3R5cGVfZm9yX3R5cGUodHlwZV9kZWNsYXJhdGlvbi50eXBlKSksIEdlbmVyYXRvci50
eXBlX25lZWRzX3J1bnRpbWVfY2FzdHModHlwZV9kZWNsYXJhdGlvbi50eXBlKSkpCiAKICAgICAg
ICAgc3RydWN0X2tleXdvcmRzID0gWydzdHJ1Y3QnXQogICAgICAgICBmdW5jdGlvbl9rZXl3b3Jk
cyA9IFsnc3RhdGljIHZvaWQnXQpAQCAtNDM3LDE5ICs0MzcsMjAgQEAgY2xhc3MgQ3BwUHJvdG9j
b2xUeXBlc0hlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICAgICAgZG9tYWlu
X2xpbmVzLmFwcGVuZCgiLy8gRW51bXMgaW4gdGhlICclcycgRG9tYWluIiAlIGRvbWFpbi5kb21h
aW5fbmFtZSkKICAgICAgICAgICAgIGZvciBlbnVtX3R5cGUgaW4gZW51bV90eXBlczoKICAgICAg
ICAgICAgICAgICBjcHBfcHJvdG9jb2xfdHlwZSA9IENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xf
dHlwZV9mb3JfdHlwZShlbnVtX3R5cGUpCi0gICAgICAgICAgICAgICAgZG9tYWluX2xpbmVzLmFw
cGVuZCgndGVtcGxhdGU8PicpCi0gICAgICAgICAgICAgICAgZG9tYWluX2xpbmVzLmFwcGVuZCgn
JXMgcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPCVzPihjb25zdCBTdHJpbmcmKTsnICUgKHJldHVy
bl90eXBlX3dpdGhfZXhwb3J0X21hY3JvKGNwcF9wcm90b2NvbF90eXBlKSwgY3BwX3Byb3RvY29s
X3R5cGUpKQorICAgICAgICAgICAgICAgIGRvbWFpbl9saW5lcy5hcHBlbmQoc2VsZi53cmFwX3dp
dGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihlbnVtX3R5cGUuZGVjbGFyYXRpb24oKS5jb25kaXRpb24s
ICd0ZW1wbGF0ZTw+XG4lcyBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8JXM+KGNvbnN0IFN0cmlu
ZyYpOycgJSAocmV0dXJuX3R5cGVfd2l0aF9leHBvcnRfbWFjcm8oY3BwX3Byb3RvY29sX3R5cGUp
LCBjcHBfcHJvdG9jb2xfdHlwZSkpKQogCiAgICAgICAgICAgICBmb3Igb2JqZWN0X3R5cGUgaW4g
b2JqZWN0X3R5cGVzOgorICAgICAgICAgICAgICAgIG9iamVjdF9saW5lcyA9IFtdCiAgICAgICAg
ICAgICAgICAgZm9yIGVudW1fbWVtYmVyIGluIGZpbHRlcih0eXBlX21lbWJlcl9pc19hbm9ueW1v
dXNfZW51bV90eXBlLCBvYmplY3RfdHlwZS5tZW1iZXJzKToKICAgICAgICAgICAgICAgICAgICAg
Y3BwX3Byb3RvY29sX3R5cGUgPSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5
cGVfbWVtYmVyKGVudW1fbWVtYmVyLCBvYmplY3RfdHlwZS5kZWNsYXJhdGlvbigpKQotICAgICAg
ICAgICAgICAgICAgICBkb21haW5fbGluZXMuYXBwZW5kKCd0ZW1wbGF0ZTw+JykKLSAgICAgICAg
ICAgICAgICAgICAgZG9tYWluX2xpbmVzLmFwcGVuZCgnJXMgcGFyc2VFbnVtVmFsdWVGcm9tU3Ry
aW5nPCVzPihjb25zdCBTdHJpbmcmKTsnICUgKHJldHVybl90eXBlX3dpdGhfZXhwb3J0X21hY3Jv
KGNwcF9wcm90b2NvbF90eXBlKSwgY3BwX3Byb3RvY29sX3R5cGUpKQorICAgICAgICAgICAgICAg
ICAgICBvYmplY3RfbGluZXMuYXBwZW5kKCd0ZW1wbGF0ZTw+XG4lcyBwYXJzZUVudW1WYWx1ZUZy
b21TdHJpbmc8JXM+KGNvbnN0IFN0cmluZyYpOycgJSAocmV0dXJuX3R5cGVfd2l0aF9leHBvcnRf
bWFjcm8oY3BwX3Byb3RvY29sX3R5cGUpLCBjcHBfcHJvdG9jb2xfdHlwZSkpCisgICAgICAgICAg
ICAgICAgaWYgbGVuKG9iamVjdF9saW5lcyk6CisgICAgICAgICAgICAgICAgICAgIGRvbWFpbl9s
aW5lcy5hcHBlbmQoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihvYmplY3RfdHlw
ZS5kZWNsYXJhdGlvbigpLmNvbmRpdGlvbiwgJ1xuJy5qb2luKG9iamVjdF9saW5lcykpKQogCiAg
ICAgICAgICAgICBpZiBsZW4oZG9tYWluX2xpbmVzKSA9PSAxOgogICAgICAgICAgICAgICAgIGNv
bnRpbnVlICAjIE5vIHJlYWwgZGVjbGFyYXRpb25zIHRvIGVtaXQsIGp1c3QgdGhlIGRvbWFpbiBj
b21tZW50LiBTa2lwLgogCi0gICAgICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi53cmFwX3dp
dGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4sICdcbicuam9pbihkb21haW5fbGluZXMpKSkKKyAg
ICAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0
aW9uKGRvbWFpbi5jb25kaXRpb24sICdcbicuam9pbihkb21haW5fbGluZXMpKSkKIAogICAgICAg
ICBpZiBsZW4oc2VjdGlvbnMpID09IDE6CiAgICAgICAgICAgICByZXR1cm4gW10gIyBObyByZWFs
IHNlY3Rpb25zIHRvIGVtaXQsIGp1c3QgdGhlIG5hbWVzcGFjZSBhbmQgdGVtcGxhdGUgZGVjbGFy
YXRpb24uIFNraXAuCkBAIC00NzQsMTQgKzQ3NSwyMCBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVz
SGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKCcnKQogICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgndGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RydWN0IERlZmF1bHRIYXNoOycpCiAKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykK
LSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgiLy8gSGFzaCBkZWNsYXJhdGlvbnMgaW4gdGhlICcl
cycgRG9tYWluIiAlIGRvbWFpbi5kb21haW5fbmFtZSkKKyAgICAgICAgICAgIGRvbWFpbl9saW5l
cyA9IFtdCisKKyAgICAgICAgICAgIGRvbWFpbl9saW5lcy5hcHBlbmQoJycpCisgICAgICAgICAg
ICBkb21haW5fbGluZXMuYXBwZW5kKCIvLyBIYXNoIGRlY2xhcmF0aW9ucyBpbiB0aGUgJyVzJyBE
b21haW4iICUgZG9tYWluLmRvbWFpbl9uYW1lKQogCiAgICAgICAgICAgICBmb3IgZW51bV90eXBl
IGluIGVudW1fdHlwZXM6Ci0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCd0ZW1wbGF0ZTw+
JykKLSAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ3N0cnVjdCBEZWZhdWx0SGFzaDxJbnNw
ZWN0b3I6OlByb3RvY29sOjolczo6JXM+IHsnICUgKGRvbWFpbi5kb21haW5fbmFtZSwgZW51bV90
eXBlLnJhd19uYW1lKCkpKQotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHR5cGVk
ZWYgSW50SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjolczo6JXM+IEhhc2g7JyAlIChkb21haW4u
ZG9tYWluX25hbWUsIGVudW1fdHlwZS5yYXdfbmFtZSgpKSkKLSAgICAgICAgICAgICAgICBsaW5l
cy5hcHBlbmQoJ307JykKKyAgICAgICAgICAgICAgICBlbnVtX2xpbmVzID0gW10KKyAgICAgICAg
ICAgICAgICBlbnVtX2xpbmVzLmFwcGVuZCgndGVtcGxhdGU8PicpCisgICAgICAgICAgICAgICAg
ZW51bV9saW5lcy5hcHBlbmQoJ3N0cnVjdCBEZWZhdWx0SGFzaDxJbnNwZWN0b3I6OlByb3RvY29s
Ojolczo6JXM+IHsnICUgKGRvbWFpbi5kb21haW5fbmFtZSwgZW51bV90eXBlLnJhd19uYW1lKCkp
KQorICAgICAgICAgICAgICAgIGVudW1fbGluZXMuYXBwZW5kKCcgICAgdHlwZWRlZiBJbnRIYXNo
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OiVzOjolcz4gSGFzaDsnICUgKGRvbWFpbi5kb21haW5fbmFt
ZSwgZW51bV90eXBlLnJhd19uYW1lKCkpKQorICAgICAgICAgICAgICAgIGVudW1fbGluZXMuYXBw
ZW5kKCd9OycpCisgICAgICAgICAgICAgICAgZG9tYWluX2xpbmVzLmFwcGVuZChzZWxmLndyYXBf
d2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGVudW1fdHlwZS5kZWNsYXJhdGlvbigpLmNvbmRpdGlv
biwgJ1xuJy5qb2luKGVudW1fbGluZXMpKSkKKworICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNl
bGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZG9tYWluLmNvbmRpdGlvbiwgJ1xuJy5q
b2luKGRvbWFpbl9saW5lcykpKQogCiAgICAgICAgIGlmIGxlbihsaW5lcykgPT0gMDoKICAgICAg
ICAgICAgIHJldHVybiBbXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVu
dGF0aW9uLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVn
ZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5CmluZGV4IDY1
Y2ViZjU4M2VlLi44NTMwZTY1NDMxZiAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2lt
cGxlbWVudGF0aW9uLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5w
eQpAQCAtMTMwLDcgKzEzMCw3IEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlv
bkdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICAgICAgICAgICd9JywKICAgICAgICAg
ICAgICAgICAnJywKICAgICAgICAgICAgIF0pCi0gICAgICAgICAgICByZXR1cm4gYm9keV9saW5l
cworICAgICAgICAgICAgcmV0dXJuICdcbicuam9pbihib2R5X2xpbmVzKQogCiAgICAgICAgIHR5
cGVfZGVjbGFyYXRpb25zID0gc2VsZi50eXBlX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluKGRvbWFp
bikKICAgICAgICAgZGVjbGFyYXRpb25fdHlwZXMgPSBbZGVjbC50eXBlIGZvciBkZWNsIGluIHR5
cGVfZGVjbGFyYXRpb25zXQpAQCAtMTQ2LDE3ICsxNDYsMjAgQEAgY2xhc3MgQ3BwUHJvdG9jb2xU
eXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgIGxpbmVz
LmFwcGVuZCgiLy8gRW51bXMgaW4gdGhlICclcycgRG9tYWluIiAlIGRvbWFpbi5kb21haW5fbmFt
ZSkKICAgICAgICAgZm9yIGVudW1fdHlwZSBpbiBlbnVtX3R5cGVzOgogICAgICAgICAgICAgY3Bw
X3Byb3RvY29sX3R5cGUgPSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGUo
ZW51bV90eXBlKQotICAgICAgICAgICAgbGluZXMuZXh0ZW5kKGdlbmVyYXRlX2NvbnZlcnNpb25f
bWV0aG9kX2JvZHkoZW51bV90eXBlLCBjcHBfcHJvdG9jb2xfdHlwZSkpCisgICAgICAgICAgICBs
aW5lcy5hcHBlbmQoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihlbnVtX3R5cGUu
ZGVjbGFyYXRpb24oKS5jb25kaXRpb24sIGdlbmVyYXRlX2NvbnZlcnNpb25fbWV0aG9kX2JvZHko
ZW51bV90eXBlLCBjcHBfcHJvdG9jb2xfdHlwZSkpKQogCiAgICAgICAgIGZvciBvYmplY3RfdHlw
ZSBpbiBvYmplY3RfdHlwZXM6CisgICAgICAgICAgICBvYmplY3RfbGluZXMgPSBbXQogICAgICAg
ICAgICAgZm9yIGVudW1fbWVtYmVyIGluIGZpbHRlcih0eXBlX21lbWJlcl9pc19hbm9ueW1vdXNf
ZW51bV90eXBlLCBvYmplY3RfdHlwZS5tZW1iZXJzKToKICAgICAgICAgICAgICAgICBjcHBfcHJv
dG9jb2xfdHlwZSA9IENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZV9tZW1i
ZXIoZW51bV9tZW1iZXIsIG9iamVjdF90eXBlLmRlY2xhcmF0aW9uKCkpCi0gICAgICAgICAgICAg
ICAgbGluZXMuZXh0ZW5kKGdlbmVyYXRlX2NvbnZlcnNpb25fbWV0aG9kX2JvZHkoZW51bV9tZW1i
ZXIudHlwZSwgY3BwX3Byb3RvY29sX3R5cGUpKQorICAgICAgICAgICAgICAgIG9iamVjdF9saW5l
cy5hcHBlbmQoZ2VuZXJhdGVfY29udmVyc2lvbl9tZXRob2RfYm9keShlbnVtX21lbWJlci50eXBl
LCBjcHBfcHJvdG9jb2xfdHlwZSkpCisgICAgICAgICAgICBpZiBsZW4ob2JqZWN0X2xpbmVzKToK
KyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2Nv
bmRpdGlvbihvYmplY3RfdHlwZS5kZWNsYXJhdGlvbigpLmNvbmRpdGlvbiwgJ1xuJy5qb2luKG9i
amVjdF9saW5lcykpKQogCiAgICAgICAgIGlmIGxlbihsaW5lcykgPT0gMToKICAgICAgICAgICAg
IHJldHVybiAnJyAgIyBObyByZWFsIGRlY2xhcmF0aW9ucyB0byBlbWl0LCBqdXN0IHRoZSBkb21h
aW4gY29tbWVudC4KIAotICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2Rv
bWFpbihkb21haW4sICdcbicuam9pbihsaW5lcykpCisgICAgICAgIHJldHVybiBzZWxmLndyYXBf
d2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRvbWFpbi5jb25kaXRpb24sICdcbicuam9pbihsaW5l
cykpCiAKICAgICBkZWYgX2dlbmVyYXRlX2VudW1fbWFwcGluZ19hbmRfY29udmVyc2lvbl9tZXRo
b2RzKHNlbGYsIGRvbWFpbnMpOgogICAgICAgICBzZWN0aW9ucyA9IFtdCkBAIC0xNzMsMTIgKzE3
NiwxNSBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IoQ3Bw
R2VuZXJhdG9yKToKICAgICBkZWYgX2dlbmVyYXRlX29wZW5fZmllbGRfbmFtZXMoc2VsZik6CiAg
ICAgICAgIGxpbmVzID0gW10KICAgICAgICAgZm9yIGRvbWFpbiBpbiBzZWxmLmRvbWFpbnNfdG9f
Z2VuZXJhdGUoKToKKyAgICAgICAgICAgIGRvbWFpbl9saW5lcyA9IFtdCiAgICAgICAgICAgICB0
eXBlX2RlY2xhcmF0aW9ucyA9IHNlbGYudHlwZV9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbihkb21h
aW4pCiAgICAgICAgICAgICBmb3IgdHlwZV9kZWNsYXJhdGlvbiBpbiBbZGVjbCBmb3IgZGVjbCBp
biB0eXBlX2RlY2xhcmF0aW9ucyBpZiBHZW5lcmF0b3IudHlwZV9oYXNfb3Blbl9maWVsZHMoZGVj
bC50eXBlKV06CiAgICAgICAgICAgICAgICAgb3Blbl9tZW1iZXJzID0gR2VuZXJhdG9yLm9wZW5f
ZmllbGRzKHR5cGVfZGVjbGFyYXRpb24pCiAgICAgICAgICAgICAgICAgZm9yIHR5cGVfbWVtYmVy
IGluIHNvcnRlZChvcGVuX21lbWJlcnMsIGtleT1sYW1iZGEgbWVtYmVyOiBtZW1iZXIubWVtYmVy
X25hbWUpOgogICAgICAgICAgICAgICAgICAgICBmaWVsZF9uYW1lID0gJzo6Jy5qb2luKFsnSW5z
cGVjdG9yJywgJ1Byb3RvY29sJywgZG9tYWluLmRvbWFpbl9uYW1lLCB1Y2ZpcnN0KHR5cGVfZGVj
bGFyYXRpb24udHlwZV9uYW1lKSwgdWNmaXJzdCh0eXBlX21lbWJlci5tZW1iZXJfbmFtZSldKQot
ICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ2NvbnN0IGNoYXIqICVzID0gIiVzIjsn
ICUgKGZpZWxkX25hbWUsIHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lKSkKKyAgICAgICAgICAgICAg
ICAgICAgZG9tYWluX2xpbmVzLmFwcGVuZCgnY29uc3QgY2hhciogJXMgPSAiJXMiOycgJSAoZmll
bGRfbmFtZSwgdHlwZV9tZW1iZXIubWVtYmVyX25hbWUpKQorICAgICAgICAgICAgaWYgbGVuKGRv
bWFpbl9saW5lcyk6CisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYud3JhcF93aXRo
X2d1YXJkX2Zvcl9jb25kaXRpb24oZG9tYWluLmNvbmRpdGlvbiwgJ1xuJy5qb2luKGRvbWFpbl9s
aW5lcykpKQogCiAgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCiAKQEAgLTE4OCwxNiAr
MTk0LDE5IEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihD
cHBHZW5lcmF0b3IpOgogICAgICAgICBkZWNsYXJhdGlvbnNfdG9fZ2VuZXJhdGUgPSBbZGVjbCBm
b3IgZGVjbCBpbiB0eXBlX2RlY2xhcmF0aW9ucyBpZiBzZWxmLnR5cGVfbmVlZHNfc2hhcGVfYXNz
ZXJ0aW9ucyhkZWNsLnR5cGUpXQogCiAgICAgICAgIGZvciB0eXBlX2RlY2xhcmF0aW9uIGluIGRl
Y2xhcmF0aW9uc190b19nZW5lcmF0ZToKKyAgICAgICAgICAgIHR5cGVfbGluZXMgPSBbXQogICAg
ICAgICAgICAgZm9yIHR5cGVfbWVtYmVyIGluIHR5cGVfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJz
OgogICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodHlwZV9tZW1iZXIudHlwZSwgRW51bVR5
cGUpOgotICAgICAgICAgICAgICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVf
YXNzZXJ0aW9uX2Zvcl9lbnVtKHR5cGVfbWVtYmVyLCB0eXBlX2RlY2xhcmF0aW9uKSkKKyAgICAg
ICAgICAgICAgICAgICAgdHlwZV9saW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYXNzZXJ0aW9u
X2Zvcl9lbnVtKHR5cGVfbWVtYmVyLCB0eXBlX2RlY2xhcmF0aW9uKSkKIAogICAgICAgICAgICAg
aWYgaXNpbnN0YW5jZSh0eXBlX2RlY2xhcmF0aW9uLnR5cGUsIE9iamVjdFR5cGUpOgotICAgICAg
ICAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hc3NlcnRpb25fZm9yX29i
amVjdF9kZWNsYXJhdGlvbih0eXBlX2RlY2xhcmF0aW9uKSkKKyAgICAgICAgICAgICAgICB0eXBl
X2xpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hc3NlcnRpb25fZm9yX29iamVjdF9kZWNsYXJh
dGlvbih0eXBlX2RlY2xhcmF0aW9uKSkKICAgICAgICAgICAgICAgICBpZiBHZW5lcmF0b3IudHlw
ZV9uZWVkc19ydW50aW1lX2Nhc3RzKHR5cGVfZGVjbGFyYXRpb24udHlwZSk6Ci0gICAgICAgICAg
ICAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9ydW50aW1lX2Nhc3RfZm9y
X29iamVjdF9kZWNsYXJhdGlvbih0eXBlX2RlY2xhcmF0aW9uKSkKKyAgICAgICAgICAgICAgICAg
ICAgdHlwZV9saW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfcnVudGltZV9jYXN0X2Zvcl9vYmpl
Y3RfZGVjbGFyYXRpb24odHlwZV9kZWNsYXJhdGlvbikpCisgICAgICAgICAgICBpZiBsZW4odHlw
ZV9saW5lcyk6CisgICAgICAgICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYud3JhcF93aXRo
X2d1YXJkX2Zvcl9jb25kaXRpb24odHlwZV9kZWNsYXJhdGlvbi5jb25kaXRpb24sICdcblxuJy5q
b2luKHR5cGVfbGluZXMpKSkKIAotICAgICAgICByZXR1cm4gJ1xuXG4nLmpvaW4oc2VjdGlvbnMp
CisgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRvbWFp
bi5jb25kaXRpb24sICdcblxuJy5qb2luKHNlY3Rpb25zKSkKIAogICAgIGRlZiBfZ2VuZXJhdGVf
cnVudGltZV9jYXN0X2Zvcl9vYmplY3RfZGVjbGFyYXRpb24oc2VsZiwgb2JqZWN0X2RlY2xhcmF0
aW9uKToKICAgICAgICAgYXJncyA9IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2pzX2JhY2tlbmRfY29tbWFuZHMu
cHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0ZV9qc19iYWNrZW5kX2NvbW1hbmRzLnB5CmluZGV4IGJiZjc2ZjkyOTExLi43MzEyNjk3Y2I1
NiAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vZ2VuZXJhdGVfanNfYmFja2VuZF9jb21tYW5kcy5weQorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9qc19iYWNrZW5kX2Nv
bW1hbmRzLnB5CkBAIC05Niw3ICs5Niw3IEBAIGNsYXNzIEpTQmFja2VuZENvbW1hbmRzR2VuZXJh
dG9yKEdlbmVyYXRvcik6CiAgICAgICAgICAgICAgICAgICAgICdlbnVtTmFtZSc6IGRlY2xhcmF0
aW9uLnR5cGVfbmFtZSwKICAgICAgICAgICAgICAgICAgICAgJ2VudW1NYXAnOiAiLCAiLmpvaW4o
WyclczogIiVzIicgJSAoR2VuZXJhdG9yLnN0eWxpemVkX25hbWVfZm9yX2VudW1fdmFsdWUoZW51
bV92YWx1ZSksIGVudW1fdmFsdWUpIGZvciBlbnVtX3ZhbHVlIGluIGRlY2xhcmF0aW9uLnR5cGUu
ZW51bV92YWx1ZXMoKV0pCiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGxpbmVz
LmFwcGVuZCgnSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIiUoZG9tYWluTmFtZSlzLiUo
ZW51bU5hbWUpcyIsIHslKGVudW1NYXApc30pOycgJSBlbnVtX2FyZ3MpCisgICAgICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZGVjbGFy
YXRpb24uY29uZGl0aW9uLCAnSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIiUoZG9tYWlu
TmFtZSlzLiUoZW51bU5hbWUpcyIsIHslKGVudW1NYXApc30pOycgJSBlbnVtX2FyZ3MpKQogCiAg
ICAgICAgICAgICBkZWYgaXNfYW5vbnltb3VzX2VudW1fbWVtYmVyKHR5cGVfbWVtYmVyKToKICAg
ICAgICAgICAgICAgICByZXR1cm4gaXNpbnN0YW5jZSh0eXBlX21lbWJlci50eXBlLCBFbnVtVHlw
ZSkgYW5kIHR5cGVfbWVtYmVyLnR5cGUuaXNfYW5vbnltb3VzCkBAIC0xMjgsMTYgKzEyOCwxOCBA
QCBjbGFzcyBKU0JhY2tlbmRDb21tYW5kc0dlbmVyYXRvcihHZW5lcmF0b3IpOgogICAgICAgICAg
ICAgICAgICdjYWxsUGFyYW1zJzogIiwgIi5qb2luKFtnZW5lcmF0ZV9wYXJhbWV0ZXJfb2JqZWN0
KHBhcmFtZXRlcikgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLmNhbGxfcGFyYW1ldGVyc10pLAog
ICAgICAgICAgICAgICAgICdyZXR1cm5QYXJhbXMnOiAiLCAiLmpvaW4oWyciJXMiJyAlIHBhcmFt
ZXRlci5wYXJhbWV0ZXJfbmFtZSBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQucmV0dXJuX3BhcmFt
ZXRlcnNdKSwKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnSW5zcGVj
dG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIiUoZG9tYWluTmFtZSlzLiUoY29tbWFuZE5hbWUp
cyIsICUodGFyZ2V0VHlwZXMpcywgWyUoY2FsbFBhcmFtcylzXSwgWyUocmV0dXJuUGFyYW1zKXNd
KTsnICUgY29tbWFuZF9hcmdzKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYud3JhcF93
aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oY29tbWFuZC5jb25kaXRpb24sICdJbnNwZWN0b3JCYWNr
ZW5kLnJlZ2lzdGVyQ29tbWFuZCgiJShkb21haW5OYW1lKXMuJShjb21tYW5kTmFtZSlzIiwgJSh0
YXJnZXRUeXBlcylzLCBbJShjYWxsUGFyYW1zKXNdLCBbJShyZXR1cm5QYXJhbXMpc10pOycgJSBj
b21tYW5kX2FyZ3MpKQogCiAgICAgICAgIGZvciBldmVudCBpbiBldmVudHM6CisgICAgICAgICAg
ICBldmVudF9saW5lcyA9IFtdCisKICAgICAgICAgICAgIGZvciBwYXJhbSBpbiBmaWx0ZXIoaXNf
YW5vbnltb3VzX2VudW1fcGFyYW0sIGV2ZW50LmV2ZW50X3BhcmFtZXRlcnMpOgogICAgICAgICAg
ICAgICAgIGVudW1fYXJncyA9IHsKICAgICAgICAgICAgICAgICAgICAgJ2RvbWFpbk5hbWUnOiBk
b21haW4uZG9tYWluX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICdlbnVtTmFtZSc6ICclcyVz
JyAlICh1Y2ZpcnN0KGV2ZW50LmV2ZW50X25hbWUpLCB1Y2ZpcnN0KHBhcmFtLnBhcmFtZXRlcl9u
YW1lKSksCiAgICAgICAgICAgICAgICAgICAgICdlbnVtTWFwJzogIiwgIi5qb2luKFsnJXM6ICIl
cyInICUgKEdlbmVyYXRvci5zdHlsaXplZF9uYW1lX2Zvcl9lbnVtX3ZhbHVlKGVudW1fdmFsdWUp
LCBlbnVtX3ZhbHVlKSBmb3IgZW51bV92YWx1ZSBpbiBwYXJhbS50eXBlLmVudW1fdmFsdWVzKCld
KSwKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdJbnNw
ZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiJShkb21haW5OYW1lKXMuJShlbnVtTmFtZSlzIiwg
eyUoZW51bU1hcClzfSk7JyAlIGVudW1fYXJncykKKyAgICAgICAgICAgICAgICBldmVudF9saW5l
cy5hcHBlbmQoJ0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCIlKGRvbWFpbk5hbWUpcy4l
KGVudW1OYW1lKXMiLCB7JShlbnVtTWFwKXN9KTsnICUgZW51bV9hcmdzKQogCiAgICAgICAgICAg
ICBldmVudF9hcmdzID0gewogICAgICAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRv
bWFpbl9uYW1lLApAQCAtMTQ1LDcgKzE0Nyw5IEBAIGNsYXNzIEpTQmFja2VuZENvbW1hbmRzR2Vu
ZXJhdG9yKEdlbmVyYXRvcik6CiAgICAgICAgICAgICAgICAgJ3RhcmdldFR5cGVzJzoganNvbi5k
dW1wcyhldmVudC50YXJnZXRfdHlwZXMpLAogICAgICAgICAgICAgICAgICdwYXJhbXMnOiAiLCAi
LmpvaW4oWyciJXMiJyAlIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSBmb3IgcGFyYW1ldGVyIGlu
IGV2ZW50LmV2ZW50X3BhcmFtZXRlcnNdKSwKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxp
bmVzLmFwcGVuZCgnSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckV2ZW50KCIlKGRvbWFpbk5hbWUp
cy4lKGV2ZW50TmFtZSlzIiwgJSh0YXJnZXRUeXBlcylzLCBbJShwYXJhbXMpc10pOycgJSBldmVu
dF9hcmdzKQorICAgICAgICAgICAgZXZlbnRfbGluZXMuYXBwZW5kKCdJbnNwZWN0b3JCYWNrZW5k
LnJlZ2lzdGVyRXZlbnQoIiUoZG9tYWluTmFtZSlzLiUoZXZlbnROYW1lKXMiLCAlKHRhcmdldFR5
cGVzKXMsIFslKHBhcmFtcylzXSk7JyAlIGV2ZW50X2FyZ3MpCisKKyAgICAgICAgICAgIGxpbmVz
LmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGV2ZW50LmNvbmRpdGlv
biwgJ1xuJy5qb2luKGV2ZW50X2xpbmVzKSkpCiAKICAgICAgICAgaGFzX2FzeW5jX2NvbW1hbmRz
ID0gYW55KFtjb21tYW5kLmlzX2FzeW5jIGZvciBjb21tYW5kIGluIGNvbW1hbmRzXSkKICAgICAg
ICAgaWYgbGVuKGV2ZW50cykgPiAwIG9yIGhhc19hc3luY19jb21tYW5kczoKQEAgLTE2MCw0ICsx
NjQsNCBAQCBjbGFzcyBKU0JhY2tlbmRDb21tYW5kc0dlbmVyYXRvcihHZW5lcmF0b3IpOgogICAg
ICAgICB9CiAgICAgICAgIGxpbmVzLmFwcGVuZCgnSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURv
bWFpbigiJShkb21haW5OYW1lKXMiLCAlKGRlYnVnZ2FibGVUeXBlcylzKTsnICUgYWN0aXZhdGVf
YXJncykKIAotICAgICAgICByZXR1cm4gIlxuIi5qb2luKGxpbmVzKQorICAgICAgICByZXR1cm4g
c2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9uLCAiXG4i
LmpvaW4obGluZXMpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVy
LnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2Vu
ZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CmluZGV4IDA1MTIyYzZjYWJk
Li4yMDY3YTdhZmVhMSAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVy
LnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L2dlbmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQpAQCAtOTksNyArOTks
NyBAQCBjbGFzcyBPYmpDQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IoT2JqQ0dlbmVy
YXRvcik6CiAgICAgICAgICAgICAnb2JqY1ByZWZpeCc6IHNlbGYub2JqY19wcmVmaXgoKSwKICAg
ICAgICAgfQogCi0gICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWlu
KGRvbWFpbiwgVGVtcGxhdGUoT2JqQ1RlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hlckhlYWRlckRv
bWFpbkhhbmRsZXJPYmpDRGVjbGFyYXRpb24pLnN1YnN0aXR1dGUoTm9uZSwgKipoYW5kbGVyX2Fy
Z3MpKQorICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihk
b21haW4uY29uZGl0aW9uLCBUZW1wbGF0ZShPYmpDVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVy
SGVhZGVyRG9tYWluSGFuZGxlck9iakNEZWNsYXJhdGlvbikuc3Vic3RpdHV0ZShOb25lLCAqKmhh
bmRsZXJfYXJncykpCiAKICAgICBkZWYgX2dlbmVyYXRlX29iamNfaGFuZGxlcl9kZWNsYXJhdGlv
bl9mb3JfY29tbWFuZChzZWxmLCBjb21tYW5kKToKICAgICAgICAgbGluZXMgPSBbXQpAQCAtMTEy
LDQgKzExMiw0IEBAIGNsYXNzIE9iakNCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihP
YmpDR2VuZXJhdG9yKToKICAgICAgICAgICAgICdwYXJhbWV0ZXJzJzogJywgJy5qb2luKHBhcmFt
ZXRlcnMpLAogICAgICAgICB9CiAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHZpcnR1YWwgdm9p
ZCAlKGNvbW1hbmROYW1lKXMoJShwYXJhbWV0ZXJzKXMpIG92ZXJyaWRlOycgJSBjb21tYW5kX2Fy
Z3MpCi0gICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisgICAgICAgIHJldHVybiBzZWxm
LndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGNvbW1hbmQuY29uZGl0aW9uLCAnXG4nLmpv
aW4obGluZXMpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50
YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQppbmRl
eCBhMWI5ZTE3OTcwNS4uMDIzMWJmNTg5M2QgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfYmFja2VuZF9kaXNw
YXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2lt
cGxlbWVudGF0aW9uLnB5CkBAIC0xMDQsMTAgKzEwNCwxMCBAQCBjbGFzcyBPYmpDQmFja2VuZERp
c3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKICAgICAgICAg
ICAgICdpbnZvY2F0aW9uJzogc2VsZi5fZ2VuZXJhdGVfaW52b2NhdGlvbl9mb3JfY29tbWFuZChk
b21haW4sIGNvbW1hbmQpLAogICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93
aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCBUZW1wbGF0ZShPYmpDVGVtcGxhdGVzLkJhY2tl
bmREaXNwYXRjaGVySGVhZGVyRG9tYWluSGFuZGxlckltcGxlbWVudGF0aW9uKS5zdWJzdGl0dXRl
KE5vbmUsICoqY29tbWFuZF9hcmdzKSkKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1
YXJkX2Zvcl9jb25kaXRpb24oZG9tYWluLmNvbmRpdGlvbiwgVGVtcGxhdGUoT2JqQ1RlbXBsYXRl
cy5CYWNrZW5kRGlzcGF0Y2hlckhlYWRlckRvbWFpbkhhbmRsZXJJbXBsZW1lbnRhdGlvbikuc3Vi
c3RpdHV0ZShOb25lLCAqKmNvbW1hbmRfYXJncykpCiAKICAgICBkZWYgX2dlbmVyYXRlX3Jlc3Bv
bmRzX3RvX3NlbGVjdG9yX2Zvcl9jb21tYW5kKHNlbGYsIGRvbWFpbiwgY29tbWFuZCk6Ci0gICAg
ICAgIHJldHVybiAnW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvciglc1dp
dGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazolcyldJyAlIChjb21tYW5kLmNvbW1hbmRf
bmFtZSwgJycuam9pbihtYXAobGFtYmRhIHBhcmFtZXRlcjogJyVzOicgJSBwYXJhbWV0ZXIucGFy
YW1ldGVyX25hbWUsIGNvbW1hbmQuY2FsbF9wYXJhbWV0ZXJzKSkpCisgICAgICAgIHJldHVybiBz
ZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGNvbW1hbmQuY29uZGl0aW9uLCAnW21f
ZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvciglc1dpdGhFcnJvckNhbGxiYWNr
OnN1Y2Nlc3NDYWxsYmFjazolcyldJyAlIChjb21tYW5kLmNvbW1hbmRfbmFtZSwgJycuam9pbiht
YXAobGFtYmRhIHBhcmFtZXRlcjogJyVzOicgJSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUsIGNv
bW1hbmQuY2FsbF9wYXJhbWV0ZXJzKSkpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9zdWNjZXNzX2Js
b2NrX2Zvcl9jb21tYW5kKHNlbGYsIGRvbWFpbiwgY29tbWFuZCk6CiAgICAgICAgIGxpbmVzID0g
W10KQEAgLTE1Niw3ICsxNTYsNyBAQCBjbGFzcyBPYmpDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1l
bnRhdGlvbkdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKICAgICAgICAgICAgIGxpbmVzLmFwcGVu
ZCgnICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBK
U09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7JykKIAogICAgICAgICBsaW5lcy5hcHBlbmQo
JyAgICB9OycpCi0gICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisgICAgICAgIHJldHVy
biBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGNvbW1hbmQuY29uZGl0aW9uLCAn
XG4nLmpvaW4obGluZXMpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9jb252ZXJzaW9uc19mb3JfY29t
bWFuZChzZWxmLCBkb21haW4sIGNvbW1hbmQpOgogICAgICAgICBsaW5lcyA9IFtdCkBAIC0xOTks
NyArMTk5LDcgQEAgY2xhc3MgT2JqQ0JhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5l
cmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAKICAgICAgICAgaWYgbGluZXM6CiAgICAgICAgICAgICBs
aW5lcy5hcHBlbmQoJycpCi0gICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisgICAgICAg
IHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGNvbW1hbmQuY29uZGl0
aW9uLCAnXG4nLmpvaW4obGluZXMpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9pbnZvY2F0aW9uX2Zv
cl9jb21tYW5kKHNlbGYsIGRvbWFpbiwgY29tbWFuZCk6CiAgICAgICAgIHBhaXJzID0gW10KQEAg
LTIxOSw0ICsyMTksNCBAQCBjbGFzcyBPYmpDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlv
bkdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKIAogICAgICAgICAgICAgICAgIG9wdGlvbmFsX2V4
cHJlc3Npb24gPSAnKCVzID8gJiVzIDogbmlsKScgJSAoaW5fcGFyYW1fbmFtZSwgb2JqY19pbl9w
YXJhbV9leHByZXNzaW9uKQogICAgICAgICAgICAgICAgIHBhaXJzLmFwcGVuZCgnJXM6JXMnICUg
KHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwgb3B0aW9uYWxfZXhwcmVzc2lvbikpCi0gICAgICAg
IHJldHVybiAnICAgIFttX2RlbGVnYXRlICVzJXNdOycgJSAoY29tbWFuZC5jb21tYW5kX25hbWUs
ICcgJy5qb2luKHBhaXJzKSkKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zv
cl9jb25kaXRpb24oY29tbWFuZC5jb25kaXRpb24sICcgICAgW21fZGVsZWdhdGUgJXMlc107JyAl
IChjb21tYW5kLmNvbW1hbmRfbmFtZSwgJyAnLmpvaW4ocGFpcnMpKSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29i
amNfaGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vZ2VuZXJhdGVfb2JqY19oZWFkZXIucHkKaW5kZXggMTVmYjc0YmU4YmYuLjI1ZTlmYWUx
MDFkIDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9nZW5lcmF0ZV9vYmpjX2hlYWRlci5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2hlYWRlci5weQpAQCAt
MzEsMTIgKzMxLDEyIEBAIGZyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQogCiB0cnk6CiAgICAg
ZnJvbSAuZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKLSAgICBmcm9tIC5tb2Rl
bHMgaW1wb3J0IE9iamVjdFR5cGUsIEVudW1UeXBlLCBQbGF0Zm9ybXMKKyAgICBmcm9tIC5tb2Rl
bHMgaW1wb3J0IE9iamVjdFR5cGUsIEVudW1UeXBlCiAgICAgZnJvbSAub2JqY19nZW5lcmF0b3Ig
aW1wb3J0IE9iakNHZW5lcmF0b3IsIGpvaW5fdHlwZV9hbmRfbmFtZQogICAgIGZyb20gLm9iamNf
Z2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgT2JqQ0dlbmVyYXRvclRlbXBsYXRlcyBhcyBPYmpD
VGVtcGxhdGVzCiBleGNlcHQgVmFsdWVFcnJvcjoKICAgICBmcm9tIGdlbmVyYXRvciBpbXBvcnQg
R2VuZXJhdG9yLCB1Y2ZpcnN0Ci0gICAgZnJvbSBtb2RlbHMgaW1wb3J0IE9iamVjdFR5cGUsIEVu
dW1UeXBlLCBQbGF0Zm9ybXMKKyAgICBmcm9tIG1vZGVscyBpbXBvcnQgT2JqZWN0VHlwZSwgRW51
bVR5cGUKICAgICBmcm9tIG9iamNfZ2VuZXJhdG9yIGltcG9ydCBPYmpDR2VuZXJhdG9yLCBqb2lu
X3R5cGVfYW5kX25hbWUKICAgICBmcm9tIG9iamNfZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQg
T2JqQ0dlbmVyYXRvclRlbXBsYXRlcyBhcyBPYmpDVGVtcGxhdGVzCiAKQEAgLTg3LDcgKzg3LDYg
QEAgY2xhc3MgT2JqQ0hlYWRlckdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKICAgICAgICAgc2Vj
dGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgpKQogICAgICAgICBzZWN0aW9ucy5h
cHBlbmQoVGVtcGxhdGUoT2JqQ1RlbXBsYXRlcy5IZWFkZXJQcmVsdWRlKS5zdWJzdGl0dXRlKE5v
bmUsICoqaGVhZGVyUHJlbHVkZV9hcmdzKSkKICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCdcbicu
am9pbihbX2YgZm9yIF9mIGluIG1hcChzZWxmLl9nZW5lcmF0ZV9mb3J3YXJkX2RlY2xhcmF0aW9u
cywgdHlwZV9kb21haW5zKSBpZiBfZl0pKQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5f
Z2VuZXJhdGVfZW51bV9mb3JfcGxhdGZvcm1zKCkpCiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZCgn
XG4nLmpvaW4oW19mIGZvciBfZiBpbiBtYXAoc2VsZi5fZ2VuZXJhdGVfZW51bXMsIHR5cGVfZG9t
YWlucykgaWYgX2ZdKSkKICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCdcbicuam9pbihbX2YgZm9y
IF9mIGluIG1hcChzZWxmLl9nZW5lcmF0ZV90eXBlcywgdHlwZV9kb21haW5zKSBpZiBfZl0pKQog
CkBAIC0xMDMsNDIgKzEwMiw1MSBAQCBjbGFzcyBPYmpDSGVhZGVyR2VuZXJhdG9yKE9iakNHZW5l
cmF0b3IpOgogICAgICAgICBmb3IgZGVjbGFyYXRpb24gaW4gc2VsZi50eXBlX2RlY2xhcmF0aW9u
c19mb3JfZG9tYWluKGRvbWFpbik6CiAgICAgICAgICAgICBpZiAoaXNpbnN0YW5jZShkZWNsYXJh
dGlvbi50eXBlLCBPYmplY3RUeXBlKSk6CiAgICAgICAgICAgICAgICAgb2JqY19uYW1lID0gc2Vs
Zi5vYmpjX25hbWVfZm9yX3R5cGUoZGVjbGFyYXRpb24udHlwZSkKLSAgICAgICAgICAgICAgICBs
aW5lcy5hcHBlbmQoJ0BjbGFzcyAlczsnICUgb2JqY19uYW1lKQotICAgICAgICByZXR1cm4gJ1xu
Jy5qb2luKGxpbmVzKQorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLndyYXBfd2l0
aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRlY2xhcmF0aW9uLmNvbmRpdGlvbiwgJ0BjbGFzcyAlczsn
ICUgb2JqY19uYW1lKSkKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9j
b25kaXRpb24oZG9tYWluLmNvbmRpdGlvbiwgJ1xuJy5qb2luKGxpbmVzKSkKIAogICAgIGRlZiBf
Z2VuZXJhdGVfZW51bXMoc2VsZiwgZG9tYWluKToKICAgICAgICAgbGluZXMgPSBbXQogCiAgICAg
ICAgICMgVHlwZSBlbnVtcyBhbmQgbWVtYmVyIGVudW1zLgogICAgICAgICBmb3IgZGVjbGFyYXRp
b24gaW4gc2VsZi50eXBlX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluKGRvbWFpbik6CisgICAgICAg
ICAgICBkZWNsYXJhdGlvbl9saW5lcyA9IFtdCiAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGRl
Y2xhcmF0aW9uLnR5cGUsIEVudW1UeXBlKToKLSAgICAgICAgICAgICAgICBhZGRfbmV3bGluZShs
aW5lcykKLSAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnlt
b3VzX2VudW1fZm9yX2RlY2xhcmF0aW9uKGRvbWFpbiwgZGVjbGFyYXRpb24pKQorICAgICAgICAg
ICAgICAgIGFkZF9uZXdsaW5lKGRlY2xhcmF0aW9uX2xpbmVzKQorICAgICAgICAgICAgICAgIGRl
Y2xhcmF0aW9uX2xpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3Jf
ZGVjbGFyYXRpb24oZG9tYWluLCBkZWNsYXJhdGlvbikpCiAgICAgICAgICAgICBlbHNlOgogICAg
ICAgICAgICAgICAgIGZvciBtZW1iZXIgaW4gZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzOgogICAg
ICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG1lbWJlci50eXBlLCBFbnVtVHlwZSkgYW5k
IG1lbWJlci50eXBlLmlzX2Fub255bW91czoKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZF9u
ZXdsaW5lKGxpbmVzKQotICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYu
X2dlbmVyYXRlX2Fub255bW91c19lbnVtX2Zvcl9tZW1iZXIoZG9tYWluLCBkZWNsYXJhdGlvbiwg
bWVtYmVyKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZF9uZXdsaW5lKGRlY2xhcmF0aW9u
X2xpbmVzKQorICAgICAgICAgICAgICAgICAgICAgICAgZGVjbGFyYXRpb25fbGluZXMuYXBwZW5k
KHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2Zvcl9tZW1iZXIoZG9tYWluLCBkZWNsYXJh
dGlvbiwgbWVtYmVyKSkKKyAgICAgICAgICAgIGlmIGxlbihkZWNsYXJhdGlvbl9saW5lcyk6Cisg
ICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25k
aXRpb24oZGVjbGFyYXRpb24uY29uZGl0aW9uLCAnXG4nLmpvaW4oZGVjbGFyYXRpb25fbGluZXMp
KSkKIAogICAgICAgICAjIEFub255bW91cyBjb21tYW5kIGVudW1zLgogICAgICAgICBmb3IgY29t
bWFuZCBpbiBzZWxmLmNvbW1hbmRzX2Zvcl9kb21haW4oZG9tYWluKToKKyAgICAgICAgICAgIGNv
bW1hbmRfbGluZXMgPSBbXQogICAgICAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLmNh
bGxfcGFyYW1ldGVyczoKICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHBhcmFtZXRlci50
eXBlLCBFbnVtVHlwZSkgYW5kIHBhcmFtZXRlci50eXBlLmlzX2Fub255bW91czoKLSAgICAgICAg
ICAgICAgICAgICAgYWRkX25ld2xpbmUobGluZXMpCi0gICAgICAgICAgICAgICAgICAgIGxpbmVz
LmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfcGFyYW1ldGVyKGRvbWFp
biwgY29tbWFuZC5jb21tYW5kX25hbWUsIHBhcmFtZXRlcikpCisgICAgICAgICAgICAgICAgICAg
IGFkZF9uZXdsaW5lKGNvbW1hbmRfbGluZXMpCisgICAgICAgICAgICAgICAgICAgIGNvbW1hbmRf
bGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2Zvcl9wYXJhbWV0ZXIo
ZG9tYWluLCBjb21tYW5kLmNvbW1hbmRfbmFtZSwgcGFyYW1ldGVyKSkKICAgICAgICAgICAgIGZv
ciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVyczoKICAgICAgICAgICAgICAg
ICBpZiBpc2luc3RhbmNlKHBhcmFtZXRlci50eXBlLCBFbnVtVHlwZSkgYW5kIHBhcmFtZXRlci50
eXBlLmlzX2Fub255bW91czoKLSAgICAgICAgICAgICAgICAgICAgYWRkX25ld2xpbmUobGluZXMp
Ci0gICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1v
dXNfZW51bV9mb3JfcGFyYW1ldGVyKGRvbWFpbiwgY29tbWFuZC5jb21tYW5kX25hbWUsIHBhcmFt
ZXRlcikpCisgICAgICAgICAgICAgICAgICAgIGFkZF9uZXdsaW5lKGNvbW1hbmRfbGluZXMpCisg
ICAgICAgICAgICAgICAgICAgIGNvbW1hbmRfbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fu
b255bW91c19lbnVtX2Zvcl9wYXJhbWV0ZXIoZG9tYWluLCBjb21tYW5kLmNvbW1hbmRfbmFtZSwg
cGFyYW1ldGVyKSkKKyAgICAgICAgICAgIGlmIGxlbihjb21tYW5kX2xpbmVzKToKKyAgICAgICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihj
b21tYW5kLmNvbmRpdGlvbiwgJ1xuJy5qb2luKGNvbW1hbmRfbGluZXMpKSkKIAogICAgICAgICAj
IEFub255bW91cyBldmVudCBlbnVtcy4KICAgICAgICAgZm9yIGV2ZW50IGluIHNlbGYuZXZlbnRz
X2Zvcl9kb21haW4oZG9tYWluKToKKyAgICAgICAgICAgIGV2ZW50X2xpbmVzID0gW10KICAgICAg
ICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gZXZlbnQuZXZlbnRfcGFyYW1ldGVyczoKICAgICAgICAg
ICAgICAgICBpZiBpc2luc3RhbmNlKHBhcmFtZXRlci50eXBlLCBFbnVtVHlwZSkgYW5kIHBhcmFt
ZXRlci50eXBlLmlzX2Fub255bW91czoKLSAgICAgICAgICAgICAgICAgICAgYWRkX25ld2xpbmUo
bGluZXMpCi0gICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9h
bm9ueW1vdXNfZW51bV9mb3JfcGFyYW1ldGVyKGRvbWFpbiwgZXZlbnQuZXZlbnRfbmFtZSwgcGFy
YW1ldGVyKSkKKyAgICAgICAgICAgICAgICAgICAgYWRkX25ld2xpbmUoZXZlbnRfbGluZXMpCisg
ICAgICAgICAgICAgICAgICAgIGV2ZW50X2xpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9u
eW1vdXNfZW51bV9mb3JfcGFyYW1ldGVyKGRvbWFpbiwgZXZlbnQuZXZlbnRfbmFtZSwgcGFyYW1l
dGVyKSkKKyAgICAgICAgICAgIGlmIGxlbihldmVudF9saW5lcyk6CisgICAgICAgICAgICAgICAg
bGluZXMuYXBwZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZXZlbnQuY29u
ZGl0aW9uLCAnXG4nLmpvaW4oZXZlbnRfbGluZXMpKSkKIAotICAgICAgICByZXR1cm4gJ1xuJy5q
b2luKGxpbmVzKQorICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRp
dGlvbihkb21haW4uY29uZGl0aW9uLCAnXG4nLmpvaW4obGluZXMpKQogCiAgICAgZGVmIF9nZW5l
cmF0ZV90eXBlcyhzZWxmLCBkb21haW4pOgogICAgICAgICBsaW5lcyA9IFtdCkBAIC0xNDcsMTIg
KzE1NSw3IEBAIGNsYXNzIE9iakNIZWFkZXJHZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAg
ICAgICAgICBpZiBpc2luc3RhbmNlKGRlY2xhcmF0aW9uLnR5cGUsIE9iamVjdFR5cGUpOgogICAg
ICAgICAgICAgICAgIGFkZF9uZXdsaW5lKGxpbmVzKQogICAgICAgICAgICAgICAgIGxpbmVzLmFw
cGVuZChzZWxmLl9nZW5lcmF0ZV90eXBlX2ludGVyZmFjZShkb21haW4sIGRlY2xhcmF0aW9uKSkK
LSAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKLQotICAgIGRlZiBfZ2VuZXJhdGVfZW51
bV9mb3JfcGxhdGZvcm1zKHNlbGYpOgotICAgICAgICBvYmpjX2VudW1fbmFtZSA9ICclc1BsYXRm
b3JtJyAlIHNlbGYub2JqY19wcmVmaXgoKQotICAgICAgICBlbnVtX3ZhbHVlcyA9IFtwbGF0Zm9y
bS5uYW1lIGZvciBwbGF0Zm9ybSBpbiBQbGF0Zm9ybXNdCi0gICAgICAgIHJldHVybiBzZWxmLl9n
ZW5lcmF0ZV9lbnVtKG9iamNfZW51bV9uYW1lLCBlbnVtX3ZhbHVlcykKKyAgICAgICAgcmV0dXJu
IHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZG9tYWluLmNvbmRpdGlvbiwgJ1xu
Jy5qb2luKGxpbmVzKSkKIAogICAgIGRlZiBfZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX2Rl
Y2xhcmF0aW9uKHNlbGYsIGRvbWFpbiwgZGVjbGFyYXRpb24pOgogICAgICAgICBvYmpjX2VudW1f
bmFtZSA9IHNlbGYub2JqY19lbnVtX25hbWVfZm9yX2Fub255bW91c19lbnVtX2RlY2xhcmF0aW9u
KGRlY2xhcmF0aW9uKQpAQCAtMTk0LDcgKzE5Nyw3IEBAIGNsYXNzIE9iakNIZWFkZXJHZW5lcmF0
b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgICAgIGZvciBtZW1iZXIgaW4gb3B0aW9uYWxfbWVtYmVy
czoKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnLyogb3B0aW9uYWwgKi8gJyArIHNlbGYuX2dl
bmVyYXRlX21lbWJlcl9wcm9wZXJ0eShkZWNsYXJhdGlvbiwgbWVtYmVyKSkKICAgICAgICAgbGlu
ZXMuYXBwZW5kKCdAZW5kJykKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKyAgICAg
ICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZGVjbGFyYXRpb24u
Y29uZGl0aW9uLCAnXG4nLmpvaW4obGluZXMpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9pbml0X21l
dGhvZF9mb3JfcmVxdWlyZWRfbWVtYmVycyhzZWxmLCBkb21haW4sIGRlY2xhcmF0aW9uLCByZXF1
aXJlZF9tZW1iZXJzKToKICAgICAgICAgcGFpcnMgPSBbXQpAQCAtMjE5LDcgKzIyMiw3IEBAIGNs
YXNzIE9iakNIZWFkZXJHZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgICAgICAgICBmb3Ig
Y29tbWFuZCBpbiBzZWxmLmNvbW1hbmRzX2Zvcl9kb21haW4oZG9tYWluKToKICAgICAgICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfc2luZ2xlX2NvbW1hbmRfcHJvdG9jb2wo
ZG9tYWluLCBjb21tYW5kKSkKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnQGVuZCcpCi0gICAg
ICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0
aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRvbWFpbi5jb25kaXRpb24sICdcbicuam9pbihsaW5lcykp
CiAKICAgICBkZWYgX2dlbmVyYXRlX3NpbmdsZV9jb21tYW5kX3Byb3RvY29sKHNlbGYsIGRvbWFp
biwgY29tbWFuZCk6CiAgICAgICAgIHBhaXJzID0gW10KQEAgLTIyOCw3ICsyMzEsNyBAQCBjbGFz
cyBPYmpDSGVhZGVyR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogICAgICAgICBmb3IgcGFyYW1l
dGVyIGluIGNvbW1hbmQuY2FsbF9wYXJhbWV0ZXJzOgogICAgICAgICAgICAgcGFyYW1fbmFtZSA9
IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQogICAgICAgICAgICAgcGFpcnMuYXBwZW5kKCclczoo
JXMpJXMnICUgKHBhcmFtX25hbWUsIHNlbGYub2JqY190eXBlX2Zvcl9wYXJhbShkb21haW4sIGNv
bW1hbmQuY29tbWFuZF9uYW1lLCBwYXJhbWV0ZXIpLCBwYXJhbV9uYW1lKSkKLSAgICAgICAgcmV0
dXJuICctICh2b2lkKSVzV2l0aCVzOycgJSAoY29tbWFuZC5jb21tYW5kX25hbWUsICcgJy5qb2lu
KHBhaXJzKSkKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRp
b24oY29tbWFuZC5jb25kaXRpb24sICctICh2b2lkKSVzV2l0aCVzOycgJSAoY29tbWFuZC5jb21t
YW5kX25hbWUsICcgJy5qb2luKHBhaXJzKSkpCiAKICAgICBkZWYgX2NhbGxiYWNrX2Jsb2NrX2Zv
cl9jb21tYW5kKHNlbGYsIGRvbWFpbiwgY29tbWFuZCk6CiAgICAgICAgIHBhaXJzID0gW10KQEAg
LTI0OSw3ICsyNTIsNyBAQCBjbGFzcyBPYmpDSGVhZGVyR2VuZXJhdG9yKE9iakNHZW5lcmF0b3Ip
OgogICAgICAgICAgICAgZm9yIGV2ZW50IGluIGV2ZW50czoKICAgICAgICAgICAgICAgICBsaW5l
cy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfc2luZ2xlX2V2ZW50X2ludGVyZmFjZShkb21haW4sIGV2
ZW50KSkKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnQGVuZCcpCi0gICAgICAgIHJldHVybiAn
XG4nLmpvaW4obGluZXMpCisgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3Jf
Y29uZGl0aW9uKGRvbWFpbi5jb25kaXRpb24sICdcbicuam9pbihsaW5lcykpCiAKICAgICBkZWYg
X2dlbmVyYXRlX3NpbmdsZV9ldmVudF9pbnRlcmZhY2Uoc2VsZiwgZG9tYWluLCBldmVudCk6CiAg
ICAgICAgIGlmIG5vdCBldmVudC5ldmVudF9wYXJhbWV0ZXJzOgpAQCAtMjU5LDQgKzI2Miw0IEBA
IGNsYXNzIE9iakNIZWFkZXJHZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgICAgICAgICBw
YXJhbV9uYW1lID0gcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCiAgICAgICAgICAgICBwYWlycy5h
cHBlbmQoJyVzOiglcyklcycgJSAocGFyYW1fbmFtZSwgc2VsZi5vYmpjX3R5cGVfZm9yX3BhcmFt
KGRvbWFpbiwgZXZlbnQuZXZlbnRfbmFtZSwgcGFyYW1ldGVyKSwgcGFyYW1fbmFtZSkpCiAgICAg
ICAgIHBhaXJzWzBdID0gdWNmaXJzdChwYWlyc1swXSkKLSAgICAgICAgcmV0dXJuICctICh2b2lk
KSVzV2l0aCVzOycgJSAoZXZlbnQuZXZlbnRfbmFtZSwgJyAnLmpvaW4ocGFpcnMpKQorICAgICAg
ICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihldmVudC5jb25kaXRp
b24sICctICh2b2lkKSVzV2l0aCVzOycgJSAoZXZlbnQuZXZlbnRfbmFtZSwgJyAnLmpvaW4ocGFp
cnMpKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfcHJvdG9jb2xfdHlwZV9jb252ZXJzaW9uc19oZWFkZXIu
cHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVfY29udmVyc2lvbnNfaGVhZGVyLnB5CmluZGV4IDI1NzFm
NGIyMmE4Li41NDAxNTFhNTFhOSAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBlX2NvbnZl
cnNpb25zX2hlYWRlci5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVfY29udmVyc2lvbnNfaGVh
ZGVyLnB5CkBAIC0zMSwxMiArMzEsMTIgQEAgZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCiAK
IHRyeToKICAgICBmcm9tIC5nZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvcgotICAgIGZyb20gLm1v
ZGVscyBpbXBvcnQgRW51bVR5cGUsIEZyYW1ld29ya3MsIFBsYXRmb3JtcworICAgIGZyb20gLm1v
ZGVscyBpbXBvcnQgRW51bVR5cGUsIEZyYW1ld29ya3MKICAgICBmcm9tIC5vYmpjX2dlbmVyYXRv
ciBpbXBvcnQgT2JqQ0dlbmVyYXRvcgogICAgIGZyb20gLm9iamNfZ2VuZXJhdG9yX3RlbXBsYXRl
cyBpbXBvcnQgT2JqQ0dlbmVyYXRvclRlbXBsYXRlcyBhcyBPYmpDVGVtcGxhdGVzCiBleGNlcHQg
VmFsdWVFcnJvcjoKICAgICBmcm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yCi0gICAgZnJv
bSBtb2RlbHMgaW1wb3J0IEVudW1UeXBlLCBGcmFtZXdvcmtzLCBQbGF0Zm9ybXMKKyAgICBmcm9t
IG1vZGVscyBpbXBvcnQgRW51bVR5cGUsIEZyYW1ld29ya3MKICAgICBmcm9tIG9iamNfZ2VuZXJh
dG9yIGltcG9ydCBPYmpDR2VuZXJhdG9yCiAgICAgZnJvbSBvYmpjX2dlbmVyYXRvcl90ZW1wbGF0
ZXMgaW1wb3J0IE9iakNHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgT2JqQ1RlbXBsYXRlcwogCkBAIC03
NSw3ICs3NSw2IEBAIGNsYXNzIE9iakNQcm90b2NvbFR5cGVDb252ZXJzaW9uc0hlYWRlckdlbmVy
YXRvcihPYmpDR2VuZXJhdG9yKToKICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJh
dGVfbGljZW5zZSgpKQogICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoT2JqQ1RlbXBs
YXRlcy5UeXBlQ29udmVyc2lvbnNIZWFkZXJQcmVsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVh
ZGVyX2FyZ3MpKQogICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoT2JqQ1RlbXBsYXRl
cy5UeXBlQ29udmVyc2lvbnNIZWFkZXJTdGFuZGFyZCkuc3Vic3RpdHV0ZShOb25lKSkKLSAgICAg
ICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2VudW1fY29udmVyc2lvbl9mb3JfcGxh
dGZvcm1zKCkpCiAgICAgICAgIHNlY3Rpb25zLmV4dGVuZChsaXN0KG1hcChzZWxmLl9nZW5lcmF0
ZV9lbnVtX2NvbnZlcnNpb25fZnVuY3Rpb25zLCBkb21haW5zKSkpCiAgICAgICAgIHNlY3Rpb25z
LmFwcGVuZChUZW1wbGF0ZShPYmpDVGVtcGxhdGVzLlR5cGVDb252ZXJzaW9uc0hlYWRlclBvc3Rs
dWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQogICAgICAgICByZXR1cm4gJ1xu
XG4nLmpvaW4oc2VjdGlvbnMpCkBAIC04NSw0MiArODQsNDMgQEAgY2xhc3MgT2JqQ1Byb3RvY29s
VHlwZUNvbnZlcnNpb25zSGVhZGVyR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogCiAgICAgICAg
ICMgVHlwZSBlbnVtcyBhbmQgbWVtYmVyIGVudW1zLgogICAgICAgICBmb3IgZGVjbGFyYXRpb24g
aW4gc2VsZi50eXBlX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluKGRvbWFpbik6CisgICAgICAgICAg
ICBkZWNsYXJhdGlvbl9saW5lcyA9IFtdCiAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGRlY2xh
cmF0aW9uLnR5cGUsIEVudW1UeXBlKToKLSAgICAgICAgICAgICAgICBhZGRfbmV3bGluZShsaW5l
cykKLSAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnltb3Vz
X2VudW1fY29udmVyc2lvbl9mb3JfZGVjbGFyYXRpb24oZG9tYWluLCBkZWNsYXJhdGlvbikpCisg
ICAgICAgICAgICAgICAgYWRkX25ld2xpbmUoZGVjbGFyYXRpb25fbGluZXMpCisgICAgICAgICAg
ICAgICAgZGVjbGFyYXRpb25fbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19l
bnVtX2NvbnZlcnNpb25fZm9yX2RlY2xhcmF0aW9uKGRvbWFpbiwgZGVjbGFyYXRpb24pKQogICAg
ICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBmb3IgbWVtYmVyIGluIGRlY2xhcmF0aW9u
LnR5cGVfbWVtYmVyczoKICAgICAgICAgICAgICAgICAgICAgaWYgKGlzaW5zdGFuY2UobWVtYmVy
LnR5cGUsIEVudW1UeXBlKSBhbmQgbWVtYmVyLnR5cGUuaXNfYW5vbnltb3VzKToKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGFkZF9uZXdsaW5lKGxpbmVzKQotICAgICAgICAgICAgICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2NvbnZlcnNpb25f
Zm9yX21lbWJlcihkb21haW4sIGRlY2xhcmF0aW9uLCBtZW1iZXIpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgYWRkX25ld2xpbmUoZGVjbGFyYXRpb25fbGluZXMpCisgICAgICAgICAgICAgICAg
ICAgICAgICBkZWNsYXJhdGlvbl9saW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnltb3Vz
X2VudW1fY29udmVyc2lvbl9mb3JfbWVtYmVyKGRvbWFpbiwgZGVjbGFyYXRpb24sIG1lbWJlcikp
CisgICAgICAgICAgICBpZiBsZW4oZGVjbGFyYXRpb25fbGluZXMpOgorICAgICAgICAgICAgICAg
IGxpbmVzLmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRlY2xhcmF0
aW9uLmNvbmRpdGlvbiwgJ1xuJy5qb2luKGRlY2xhcmF0aW9uX2xpbmVzKSkpCiAKICAgICAgICAg
IyBBbm9ueW1vdXMgY29tbWFuZCBlbnVtcy4KICAgICAgICAgZm9yIGNvbW1hbmQgaW4gc2VsZi5j
b21tYW5kc19mb3JfZG9tYWluKGRvbWFpbik6CisgICAgICAgICAgICBjb21tYW5kX2xpbmVzID0g
W10KICAgICAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6
CiAgICAgICAgICAgICAgICAgaWYgKGlzaW5zdGFuY2UocGFyYW1ldGVyLnR5cGUsIEVudW1UeXBl
KSBhbmQgcGFyYW1ldGVyLnR5cGUuaXNfYW5vbnltb3VzKToKLSAgICAgICAgICAgICAgICAgICAg
YWRkX25ld2xpbmUobGluZXMpCi0gICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxm
Ll9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9jb252ZXJzaW9uX2Zvcl9wYXJhbWV0ZXIoZG9tYWlu
LCBjb21tYW5kLmNvbW1hbmRfbmFtZSwgcGFyYW1ldGVyKSkKKyAgICAgICAgICAgICAgICAgICAg
YWRkX25ld2xpbmUoY29tbWFuZF9saW5lcykKKyAgICAgICAgICAgICAgICAgICAgY29tbWFuZF9s
aW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fY29udmVyc2lvbl9mb3Jf
cGFyYW1ldGVyKGRvbWFpbiwgY29tbWFuZC5jb21tYW5kX25hbWUsIHBhcmFtZXRlcikpCiAgICAg
ICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnM6CiAgICAg
ICAgICAgICAgICAgaWYgKGlzaW5zdGFuY2UocGFyYW1ldGVyLnR5cGUsIEVudW1UeXBlKSBhbmQg
cGFyYW1ldGVyLnR5cGUuaXNfYW5vbnltb3VzKToKLSAgICAgICAgICAgICAgICAgICAgYWRkX25l
d2xpbmUobGluZXMpCi0gICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5l
cmF0ZV9hbm9ueW1vdXNfZW51bV9jb252ZXJzaW9uX2Zvcl9wYXJhbWV0ZXIoZG9tYWluLCBjb21t
YW5kLmNvbW1hbmRfbmFtZSwgcGFyYW1ldGVyKSkKKyAgICAgICAgICAgICAgICAgICAgYWRkX25l
d2xpbmUoY29tbWFuZF9saW5lcykKKyAgICAgICAgICAgICAgICAgICAgY29tbWFuZF9saW5lcy5h
cHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fY29udmVyc2lvbl9mb3JfcGFyYW1l
dGVyKGRvbWFpbiwgY29tbWFuZC5jb21tYW5kX25hbWUsIHBhcmFtZXRlcikpCisgICAgICAgICAg
ICBpZiBsZW4oY29tbWFuZF9saW5lcyk6CisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNl
bGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oY29tbWFuZC5jb25kaXRpb24sICdcbicu
am9pbihjb21tYW5kX2xpbmVzKSkpCiAKICAgICAgICAgIyBBbm9ueW1vdXMgZXZlbnQgZW51bXMu
CiAgICAgICAgIGZvciBldmVudCBpbiBzZWxmLmV2ZW50c19mb3JfZG9tYWluKGRvbWFpbik6Cisg
ICAgICAgICAgICBldmVudF9saW5lcyA9IFtdCiAgICAgICAgICAgICBmb3IgcGFyYW1ldGVyIGlu
IGV2ZW50LmV2ZW50X3BhcmFtZXRlcnM6CiAgICAgICAgICAgICAgICAgaWYgKGlzaW5zdGFuY2Uo
cGFyYW1ldGVyLnR5cGUsIEVudW1UeXBlKSBhbmQgcGFyYW1ldGVyLnR5cGUuaXNfYW5vbnltb3Vz
KToKLSAgICAgICAgICAgICAgICAgICAgYWRkX25ld2xpbmUobGluZXMpCi0gICAgICAgICAgICAg
ICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9jb252ZXJz
aW9uX2Zvcl9wYXJhbWV0ZXIoZG9tYWluLCBldmVudC5ldmVudF9uYW1lLCBwYXJhbWV0ZXIpKQor
ICAgICAgICAgICAgICAgICAgICBhZGRfbmV3bGluZShldmVudF9saW5lcykKKyAgICAgICAgICAg
ICAgICAgICAgZXZlbnRfbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVt
X2NvbnZlcnNpb25fZm9yX3BhcmFtZXRlcihkb21haW4sIGV2ZW50LmV2ZW50X25hbWUsIHBhcmFt
ZXRlcikpCisgICAgICAgICAgICBpZiBsZW4oZXZlbnRfbGluZXMpOgorICAgICAgICAgICAgICAg
IGxpbmVzLmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGV2ZW50LmNv
bmRpdGlvbiwgJ1xuJy5qb2luKGV2ZW50X2xpbmVzKSkpCiAKLSAgICAgICAgcmV0dXJuICdcbicu
am9pbihsaW5lcykKLQotICAgIGRlZiBfZ2VuZXJhdGVfZW51bV9jb252ZXJzaW9uX2Zvcl9wbGF0
Zm9ybXMoc2VsZik6Ci0gICAgICAgIG9iamNfZW51bV9uYW1lID0gJyVzUGxhdGZvcm0nICUgc2Vs
Zi5vYmpjX3ByZWZpeCgpCi0gICAgICAgIGVudW1fdmFsdWVzID0gW3BsYXRmb3JtLm5hbWUgZm9y
IHBsYXRmb3JtIGluIFBsYXRmb3Jtc10KLSAgICAgICAgbGluZXMgPSBbXQotICAgICAgICBsaW5l
cy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfZW51bV9vYmpjX3RvX3Byb3RvY29sX3N0cmluZyhvYmpj
X2VudW1fbmFtZSwgZW51bV92YWx1ZXMpKQotICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2Vu
ZXJhdGVfZW51bV9mcm9tX3Byb3RvY29sX3N0cmluZyhvYmpjX2VudW1fbmFtZSwgZW51bV92YWx1
ZXMpKQotICAgICAgICByZXR1cm4gJ1xuXG4nLmpvaW4obGluZXMpCisgICAgICAgIHJldHVybiBz
ZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRvbWFpbi5jb25kaXRpb24sICdcbicu
am9pbihsaW5lcykpCiAKICAgICBkZWYgX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2NvbnZlcnNp
b25fZm9yX2RlY2xhcmF0aW9uKHNlbGYsIGRvbWFpbiwgZGVjbGFyYXRpb24pOgogICAgICAgICBv
YmpjX2VudW1fbmFtZSA9IHNlbGYub2JqY19lbnVtX25hbWVfZm9yX2Fub255bW91c19lbnVtX2Rl
Y2xhcmF0aW9uKGRlY2xhcmF0aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBlX2Nv
bnZlcnNpb25zX2ltcGxlbWVudGF0aW9uLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBlX2NvbnZlcnNp
b25zX2ltcGxlbWVudGF0aW9uLnB5CmluZGV4IGEzNmQ4MTNlY2VlLi5mYmQxMzFhNjZlMiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBlX2NvbnZlcnNpb25zX2ltcGxlbWVudGF0aW9uLnB5
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dl
bmVyYXRlX29iamNfcHJvdG9jb2xfdHlwZV9jb252ZXJzaW9uc19pbXBsZW1lbnRhdGlvbi5weQpA
QCAtODMsMTUgKzgzLDE2IEBAIGNsYXNzIE9iakNQcm90b2NvbFR5cGVDb252ZXJzaW9uc0ltcGxl
bWVudGF0aW9uR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogICAgIGRlZiBfZ2VuZXJhdGVfdHlw
ZV9mYWN0b3J5X2NhdGVnb3J5X2ludGVyZmFjZShzZWxmLCBkb21haW5zKToKICAgICAgICAgbGlu
ZXMgPSBbXQogICAgICAgICBmb3IgZG9tYWluIGluIGRvbWFpbnM6Ci0gICAgICAgICAgICBsaW5l
cy5hcHBlbmQoJ0BpbnRlcmZhY2UgJXNUeXBlQ29udmVyc2lvbnMgKCVzRG9tYWluKScgJSAoc2Vs
Zi5wcm90b2NvbF9uYW1lKCksIGRvbWFpbi5kb21haW5fbmFtZSkpCi0gICAgICAgICAgICBsaW5l
cy5hcHBlbmQoJycpCisgICAgICAgICAgICBkb21haW5fbGluZXMgPSBbXQorICAgICAgICAgICAg
ZG9tYWluX2xpbmVzLmFwcGVuZCgnQGludGVyZmFjZSAlc1R5cGVDb252ZXJzaW9ucyAoJXNEb21h
aW4pJyAlIChzZWxmLnByb3RvY29sX25hbWUoKSwgZG9tYWluLmRvbWFpbl9uYW1lKSkKKyAgICAg
ICAgICAgIGFkZF9uZXdsaW5lKGRvbWFpbl9saW5lcykKIAogICAgICAgICAgICAgZm9yIGRlY2xh
cmF0aW9uIGluIHNlbGYudHlwZV9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbihkb21haW4pOgotICAg
ICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV90eXBlX2ZhY3RvcnlfbWV0
aG9kX2RlY2xhcmF0aW9uKGRvbWFpbiwgZGVjbGFyYXRpb24pKQotCi0gICAgICAgICAgICBhZGRf
bmV3bGluZShsaW5lcykKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnQGVuZCcpCisgICAgICAg
ICAgICAgICAgZG9tYWluX2xpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV90eXBlX2ZhY3Rvcnlf
bWV0aG9kX2RlY2xhcmF0aW9uKGRvbWFpbiwgZGVjbGFyYXRpb24pKQogCisgICAgICAgICAgICBh
ZGRfbmV3bGluZShkb21haW5fbGluZXMpCisgICAgICAgICAgICBkb21haW5fbGluZXMuYXBwZW5k
KCdAZW5kJykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9m
b3JfY29uZGl0aW9uKGRvbWFpbi5jb25kaXRpb24sICdcbicuam9pbihkb21haW5fbGluZXMpKSkK
ICAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKIAogICAgIGRlZiBfZ2VuZXJhdGVfdHlw
ZV9mYWN0b3J5X21ldGhvZF9kZWNsYXJhdGlvbihzZWxmLCBkb21haW4sIGRlY2xhcmF0aW9uKToK
QEAgLTEwMCwyMCArMTAxLDIzIEBAIGNsYXNzIE9iakNQcm90b2NvbFR5cGVDb252ZXJzaW9uc0lt
cGxlbWVudGF0aW9uR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogICAgICAgICAgICAgcmVzb2x2
ZWRfdHlwZSA9IHJlc29sdmVkX3R5cGUuYWxpYXNlZF90eXBlCiAgICAgICAgIGlmIGlzaW5zdGFu
Y2UocmVzb2x2ZWRfdHlwZSwgKE9iamVjdFR5cGUsIEFycmF5VHlwZSwgUHJpbWl0aXZlVHlwZSkp
OgogICAgICAgICAgICAgb2JqY190eXBlID0gc2VsZi5vYmpjX2NsYXNzX2Zvcl90eXBlKHJlc29s
dmVkX3R5cGUpCi0gICAgICAgICAgICByZXR1cm4gJysgKHZvaWQpX3BhcnNlJXM6KCVzICoqKW91
dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOycgJSAoZGVjbGFyYXRpb24udHlwZS5yYXdf
bmFtZSgpLCBvYmpjX3R5cGUpCisgICAgICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3Vh
cmRfZm9yX2NvbmRpdGlvbihkZWNsYXJhdGlvbi5jb25kaXRpb24sICcrICh2b2lkKV9wYXJzZSVz
OiglcyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsnICUgKGRlY2xhcmF0aW9u
LnR5cGUucmF3X25hbWUoKSwgb2JqY190eXBlKSkKICAgICAgICAgaWYgaXNpbnN0YW5jZShyZXNv
bHZlZF90eXBlLCBFbnVtVHlwZSk6Ci0gICAgICAgICAgICByZXR1cm4gJysgKHZvaWQpX3BhcnNl
JXM6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOycgJSBkZWNs
YXJhdGlvbi50eXBlLnJhd19uYW1lKCkKKyAgICAgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0
aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRlY2xhcmF0aW9uLmNvbmRpdGlvbiwgJysgKHZvaWQpX3Bh
cnNlJXM6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOycgJSBk
ZWNsYXJhdGlvbi50eXBlLnJhd19uYW1lKCkpCiAKICAgICBkZWYgX2dlbmVyYXRlX3R5cGVfZmFj
dG9yeV9jYXRlZ29yeV9pbXBsZW1lbnRhdGlvbihzZWxmLCBkb21haW5zKToKICAgICAgICAgbGlu
ZXMgPSBbXQogICAgICAgICBmb3IgZG9tYWluIGluIGRvbWFpbnM6Ci0gICAgICAgICAgICBsaW5l
cy5hcHBlbmQoJ0BpbXBsZW1lbnRhdGlvbiAlc1R5cGVDb252ZXJzaW9ucyAoJXNEb21haW4pJyAl
IChzZWxmLnByb3RvY29sX25hbWUoKSwgZG9tYWluLmRvbWFpbl9uYW1lKSkKLSAgICAgICAgICAg
IGxpbmVzLmFwcGVuZCgnJykKKyAgICAgICAgICAgIGRvbWFpbl9saW5lcyA9IFtdCisgICAgICAg
ICAgICBkb21haW5fbGluZXMuYXBwZW5kKCdAaW1wbGVtZW50YXRpb24gJXNUeXBlQ29udmVyc2lv
bnMgKCVzRG9tYWluKScgJSAoc2VsZi5wcm90b2NvbF9uYW1lKCksIGRvbWFpbi5kb21haW5fbmFt
ZSkpCisgICAgICAgICAgICBhZGRfbmV3bGluZShkb21haW5fbGluZXMpCiAKICAgICAgICAgICAg
IGZvciBkZWNsYXJhdGlvbiBpbiBzZWxmLnR5cGVfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4oZG9t
YWluKToKLSAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfdHlwZV9m
YWN0b3J5X21ldGhvZF9pbXBsZW1lbnRhdGlvbihkb21haW4sIGRlY2xhcmF0aW9uKSkKLSAgICAg
ICAgICAgICAgICBhZGRfbmV3bGluZShsaW5lcykKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgn
QGVuZCcpCisgICAgICAgICAgICAgICAgZG9tYWluX2xpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0
ZV90eXBlX2ZhY3RvcnlfbWV0aG9kX2ltcGxlbWVudGF0aW9uKGRvbWFpbiwgZGVjbGFyYXRpb24p
KQorICAgICAgICAgICAgICAgIGFkZF9uZXdsaW5lKGRvbWFpbl9saW5lcykKKworICAgICAgICAg
ICAgZG9tYWluX2xpbmVzLmFwcGVuZCgnQGVuZCcpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQo
c2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9uLCAnXG4n
LmpvaW4oZG9tYWluX2xpbmVzKSkpCiAgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCiAK
ICAgICBkZWYgX2dlbmVyYXRlX3R5cGVfZmFjdG9yeV9tZXRob2RfaW1wbGVtZW50YXRpb24oc2Vs
ZiwgZG9tYWluLCBkZWNsYXJhdGlvbik6CkBAIC0xNDEsNCArMTQ1LDQgQEAgY2xhc3MgT2JqQ1By
b3RvY29sVHlwZUNvbnZlcnNpb25zSW1wbGVtZW50YXRpb25HZW5lcmF0b3IoT2JqQ0dlbmVyYXRv
cik6CiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JB
RF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsnKQogICAgICAgICAgICAgbGlu
ZXMuYXBwZW5kKCcgICAgKm91dFZhbHVlID0gW1slcyBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBh
eWxvYWRdOycgJSAob2JqY19jbGFzcykpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnfScpCi0gICAg
ICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0
aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRlY2xhcmF0aW9uLmNvbmRpdGlvbiwgJ1xuJy5qb2luKGxp
bmVzKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZV9vYmpjX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5CmluZGV4IGM4NzA4ODFhYmQ4
Li4wMGQ3YTBhZmU3ZCAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBlc19pbXBsZW1lbnRh
dGlvbi5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5CkBAIC05
MSw3ICs5MSw3IEBAIGNsYXNzIE9iakNQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0
b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgICAgICAgICBpZiAoaXNpbnN0YW5jZShkZWNsYXJhdGlv
bi50eXBlLCBPYmplY3RUeXBlKSk6CiAgICAgICAgICAgICAgICAgYWRkX25ld2xpbmUobGluZXMp
CiAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfdHlwZV9pbXBsZW1l
bnRhdGlvbihkb21haW4sIGRlY2xhcmF0aW9uKSkKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihs
aW5lcykKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24o
ZG9tYWluLmNvbmRpdGlvbiwgJ1xuJy5qb2luKGxpbmVzKSkKIAogICAgIGRlZiBnZW5lcmF0ZV90
eXBlX2ltcGxlbWVudGF0aW9uKHNlbGYsIGRvbWFpbiwgZGVjbGFyYXRpb24pOgogICAgICAgICBs
aW5lcyA9IFtdCkBAIC0xMTIsNyArMTEyLDcgQEAgY2xhc3MgT2JqQ1Byb3RvY29sVHlwZXNJbXBs
ZW1lbnRhdGlvbkdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKICAgICAgICAgICAgIGxpbmVzLmFw
cGVuZChzZWxmLl9nZW5lcmF0ZV9nZXR0ZXJfZm9yX21lbWJlcihkb21haW4sIGRlY2xhcmF0aW9u
LCBtZW1iZXIpKQogICAgICAgICBsaW5lcy5hcHBlbmQoJycpCiAgICAgICAgIGxpbmVzLmFwcGVu
ZCgnQGVuZCcpCi0gICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisgICAgICAgIHJldHVy
biBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRlY2xhcmF0aW9uLmNvbmRpdGlv
biwgJ1xuJy5qb2luKGxpbmVzKSkKIAogICAgIGRlZiBfZ2VuZXJhdGVfaW5pdF9tZXRob2RfZm9y
X3Byb3RvY29sX29iamVjdChzZWxmLCBkb21haW4sIGRlY2xhcmF0aW9uKToKICAgICAgICAgbGlu
ZXMgPSBbXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vZ2VuZXJhdG9yLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yLnB5CmluZGV4IDhjMmZiYjhiYzUyLi45NGQxOGQ5
ZDY2MSAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vZ2VuZXJhdG9yLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRvci5weQpAQCAtMzEsMTAgKzMxLDEwIEBAIGZyb20g
c3RyaW5nIGltcG9ydCBUZW1wbGF0ZQogCiB0cnk6CiAgICAgZnJvbSAuZ2VuZXJhdG9yX3RlbXBs
YXRlcyBpbXBvcnQgR2VuZXJhdG9yVGVtcGxhdGVzIGFzIFRlbXBsYXRlcwotICAgIGZyb20gLm1v
ZGVscyBpbXBvcnQgUHJpbWl0aXZlVHlwZSwgT2JqZWN0VHlwZSwgQXJyYXlUeXBlLCBFbnVtVHlw
ZSwgQWxpYXNlZFR5cGUsIEZyYW1ld29ya3MsIFBsYXRmb3JtcworICAgIGZyb20gLm1vZGVscyBp
bXBvcnQgUHJpbWl0aXZlVHlwZSwgT2JqZWN0VHlwZSwgQXJyYXlUeXBlLCBFbnVtVHlwZSwgQWxp
YXNlZFR5cGUsIEZyYW1ld29ya3MKIGV4Y2VwdCBWYWx1ZUVycm9yOgogICAgIGZyb20gZ2VuZXJh
dG9yX3RlbXBsYXRlcyBpbXBvcnQgR2VuZXJhdG9yVGVtcGxhdGVzIGFzIFRlbXBsYXRlcwotICAg
IGZyb20gbW9kZWxzIGltcG9ydCBQcmltaXRpdmVUeXBlLCBPYmplY3RUeXBlLCBBcnJheVR5cGUs
IEVudW1UeXBlLCBBbGlhc2VkVHlwZSwgRnJhbWV3b3JrcywgUGxhdGZvcm1zCisgICAgZnJvbSBt
b2RlbHMgaW1wb3J0IFByaW1pdGl2ZVR5cGUsIE9iamVjdFR5cGUsIEFycmF5VHlwZSwgRW51bVR5
cGUsIEFsaWFzZWRUeXBlLCBGcmFtZXdvcmtzCiAKIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdn
bG9iYWwnKQogCkBAIC05NCwzNSArOTQsMjggQEAgX1RZUEVTX1dJVEhfT1BFTl9GSUVMRFMgPSB7
CiB9CiAKIGNsYXNzIEdlbmVyYXRvcjoKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWwsIHBs
YXRmb3JtLCBpbnB1dF9maWxlcGF0aCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBp
bnB1dF9maWxlcGF0aCk6CiAgICAgICAgIHNlbGYuX21vZGVsID0gbW9kZWwKLSAgICAgICAgc2Vs
Zi5fcGxhdGZvcm0gPSBwbGF0Zm9ybQogICAgICAgICBzZWxmLl9pbnB1dF9maWxlcGF0aCA9IGlu
cHV0X2ZpbGVwYXRoCiAgICAgICAgIHNlbGYuX3NldHRpbmdzID0ge30KIAogICAgIGRlZiBtb2Rl
bChzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuX21vZGVsCiAKLSAgICBkZWYgcGxhdGZvcm0o
c2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLl9wbGF0Zm9ybQotCiAgICAgZGVmIHNldF9nZW5l
cmF0b3Jfc2V0dGluZyhzZWxmLCBrZXksIHZhbHVlKToKICAgICAgICAgc2VsZi5fc2V0dGluZ3Nb
a2V5XSA9IHZhbHVlCiAKLSAgICBkZWYgY2FuX2dlbmVyYXRlX3BsYXRmb3JtKHNlbGYsIG1vZGVs
X3BsYXRmb3JtKToKLSAgICAgICAgcmV0dXJuIG1vZGVsX3BsYXRmb3JtIGlzIFBsYXRmb3Jtcy5H
ZW5lcmljIG9yIHNlbGYuX3BsYXRmb3JtIGlzIFBsYXRmb3Jtcy5BbGwgb3IgbW9kZWxfcGxhdGZv
cm0gaXMgc2VsZi5fcGxhdGZvcm0KLQogICAgIGRlZiB2ZXJzaW9uX2Zvcl9kb21haW4oc2VsZiwg
ZG9tYWluKToKICAgICAgICAgcmV0dXJuIGRvbWFpbi52ZXJzaW9uKCkKIAogICAgIGRlZiB0eXBl
X2RlY2xhcmF0aW9uc19mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6Ci0gICAgICAgIHJldHVybiBb
dHlwZV9kZWNsYXJhdGlvbiBmb3IgdHlwZV9kZWNsYXJhdGlvbiBpbiBkb21haW4uYWxsX3R5cGVf
ZGVjbGFyYXRpb25zKCkgaWYgc2VsZi5jYW5fZ2VuZXJhdGVfcGxhdGZvcm0odHlwZV9kZWNsYXJh
dGlvbi5wbGF0Zm9ybSldCisgICAgICAgIHJldHVybiBkb21haW4uYWxsX3R5cGVfZGVjbGFyYXRp
b25zKCkKIAogICAgIGRlZiBjb21tYW5kc19mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6Ci0gICAg
ICAgIHJldHVybiBbY29tbWFuZCBmb3IgY29tbWFuZCBpbiBkb21haW4uYWxsX2NvbW1hbmRzKCkg
aWYgc2VsZi5jYW5fZ2VuZXJhdGVfcGxhdGZvcm0oY29tbWFuZC5wbGF0Zm9ybSldCisgICAgICAg
IHJldHVybiBkb21haW4uYWxsX2NvbW1hbmRzKCkKIAogICAgIGRlZiBldmVudHNfZm9yX2RvbWFp
bihzZWxmLCBkb21haW4pOgotICAgICAgICByZXR1cm4gW2V2ZW50IGZvciBldmVudCBpbiBkb21h
aW4uYWxsX2V2ZW50cygpIGlmIHNlbGYuY2FuX2dlbmVyYXRlX3BsYXRmb3JtKGV2ZW50LnBsYXRm
b3JtKV0KKyAgICAgICAgcmV0dXJuIGRvbWFpbi5hbGxfZXZlbnRzKCkKIAogICAgICMgVGhlIGdv
b2Z5IG5hbWUgaXMgdG8gZGlzYW1iaWd1YXRlIGdlbmVyYXRvciBzZXR0aW5ncyBmcm9tIGZyYW1l
d29yayBzZXR0aW5ncy4KICAgICBkZWYgZ2V0X2dlbmVyYXRvcl9zZXR0aW5nKHNlbGYsIGtleSwg
ZGVmYXVsdD1Ob25lKToKQEAgLTI2NywyMiArMjYwLDE1IEBAIGNsYXNzIEdlbmVyYXRvcjoKICAg
ICAgICAgc2VsZi5fYXNzaWduZWRfZW51bV92YWx1ZXMuYXBwZW5kKGVudW1fdmFsdWUpCiAKICAg
ICAjIE1pc2NlbGxhbmVvdXMgdGV4dCBtYW5pcHVsYXRpb24gcm91dGluZXMuCi0gICAgZGVmIHdy
YXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKHNlbGYsIGRvbWFpbiwgdGV4dCk6Ci0gICAgICAgIGlm
IHNlbGYubW9kZWwoKS5mcmFtZXdvcmsgaXMgRnJhbWV3b3Jrcy5XZWJJbnNwZWN0b3I6Ci0gICAg
ICAgICAgICByZXR1cm4gdGV4dAotICAgICAgICBndWFyZCA9IGRvbWFpbi5mZWF0dXJlX2d1YXJk
Ci0gICAgICAgIGlmIGd1YXJkOgotICAgICAgICAgICAgcmV0dXJuIEdlbmVyYXRvci53cmFwX3dp
dGhfZ3VhcmQoZ3VhcmQsIHRleHQpCisgICAgZGVmIHdyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0
aW9uKHNlbGYsIGNvbmRpdGlvbiwgdGV4dCk6CisgICAgICAgIGlmIGNvbmRpdGlvbjoKKyAgICAg
ICAgICAgIHJldHVybiAnXG4nLmpvaW4oWworICAgICAgICAgICAgICAgICcjaWYgJXMnICUgY29u
ZGl0aW9uLAorICAgICAgICAgICAgICAgIHRleHQsCisgICAgICAgICAgICAgICAgJyNlbmRpZiAv
LyAlcycgJSBjb25kaXRpb24sCisgICAgICAgICAgICBdKQogICAgICAgICByZXR1cm4gdGV4dAog
Ci0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiB3cmFwX3dpdGhfZ3VhcmQoZ3VhcmQsIHRleHQp
OgotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKFsKLSAgICAgICAgICAgICcjaWYgJXMnICUgZ3Vh
cmQsCi0gICAgICAgICAgICB0ZXh0LAotICAgICAgICAgICAgJyNlbmRpZiAvLyAlcycgJSBndWFy
ZCwKLSAgICAgICAgXSkKLQogICAgIEBzdGF0aWNtZXRob2QKICAgICBkZWYgc3R5bGl6ZWRfbmFt
ZV9mb3JfZW51bV92YWx1ZShlbnVtX3ZhbHVlKToKICAgICAgICAgcmVnZXggPSAnKCVzKScgJSAi
fCIuam9pbihfQUxXQVlTX1NQRUNJQUxDQVNFRF9FTlVNX1ZBTFVFX1NVQlNUUklOR1MpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9t
b2RlbHMucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9tb2RlbHMucHkKaW5kZXggNmQ5N2EwOTNjMzQuLjFkZjJiZGY2NjVhIDEwMDc1NQotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9tb2RlbHMucHkK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vbW9k
ZWxzLnB5CkBAIC0xMzYsNDEgKzEzNiw2IEBAIGNsYXNzIEZyYW1ld29ya3M6CiAgICAgVGVzdCA9
IEZyYW1ld29yaygiVGVzdCIpCiAKIAotY2xhc3MgUGxhdGZvcm06Ci0gICAgZGVmIF9faW5pdF9f
KHNlbGYsIG5hbWUpOgotICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCi0KLSAgICBAc3RhdGljbWV0
aG9kCi0gICAgZGVmIGZyb21TdHJpbmcocGxhdGZvcm1TdHJpbmcpOgotICAgICAgICBwbGF0Zm9y
bVN0cmluZyA9IHBsYXRmb3JtU3RyaW5nLmxvd2VyKCkKLSAgICAgICAgaWYgcGxhdGZvcm1TdHJp
bmcgPT0gImlvcyI6Ci0gICAgICAgICAgICByZXR1cm4gUGxhdGZvcm1zLmlPUwotCi0gICAgICAg
IGlmIHBsYXRmb3JtU3RyaW5nID09ICJtYWNvcyI6Ci0gICAgICAgICAgICByZXR1cm4gUGxhdGZv
cm1zLm1hY09TCi0KLSAgICAgICAgaWYgcGxhdGZvcm1TdHJpbmcgPT0gImFsbCI6Ci0gICAgICAg
ICAgICByZXR1cm4gUGxhdGZvcm1zLkFsbAotCi0gICAgICAgIGlmIHBsYXRmb3JtU3RyaW5nID09
ICJnZW5lcmljIiBvciBub3QgcGxhdGZvcm1TdHJpbmc6Ci0gICAgICAgICAgICByZXR1cm4gUGxh
dGZvcm1zLkdlbmVyaWMKLQotICAgICAgICByYWlzZSBQYXJzZUV4Y2VwdGlvbigiVW5rbm93biBw
bGF0Zm9ybTogJXMiICUgcGxhdGZvcm1TdHJpbmcpCi0KLQotY2xhc3MgUGxhdGZvcm1zOgotICAg
IEFsbCA9IFBsYXRmb3JtKCJhbGwiKQotICAgIEdlbmVyaWMgPSBQbGF0Zm9ybSgiZ2VuZXJpYyIp
Ci0gICAgaU9TID0gUGxhdGZvcm0oImlvcyIpCi0gICAgbWFjT1MgPSBQbGF0Zm9ybSgibWFjb3Mi
KQotCi0gICAgIyBBbGxvdyBpdGVyYXRpb24gb3ZlciBhbGwgcGxhdGZvcm1zLiBTZWUgPGh0dHA6
Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNTQzNDQwMC8+LgotICAgIGNsYXNzIF9fbWV0
YWNsYXNzX18odHlwZSk6Ci0gICAgICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKLSAgICAgICAgICAg
IGZvciBhdHRyIGluIGRpcihQbGF0Zm9ybXMpOgotICAgICAgICAgICAgICAgIGlmIG5vdCBhdHRy
LnN0YXJ0c3dpdGgoIl9fIik6Ci0gICAgICAgICAgICAgICAgICAgIHlpZWxkIGdldGF0dHIoUGxh
dGZvcm1zLCBhdHRyKQotCiBjbGFzcyBUeXBlUmVmZXJlbmNlOgogICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCB0eXBlX2tpbmQsIHJlZmVyZW5jZWRfdHlwZV9uYW1lLCBlbnVtX3ZhbHVlcywgYXJyYXlf
aXRlbXMpOgogICAgICAgICBzZWxmLnR5cGVfa2luZCA9IHR5cGVfa2luZApAQCAtNDM5LDcgKzQw
NCw3IEBAIGNsYXNzIFByb3RvY29sOgogICAgICAgICAgICAgICAgIHJhaXNlIFBhcnNlRXhjZXB0
aW9uKCJNYWxmb3JtZWQgZG9tYWluIHNwZWNpZmljYXRpb246IGV2ZW50cyBpcyBub3QgYW4gYXJy
YXkiKQogICAgICAgICAgICAgZXZlbnRzLmV4dGVuZChbc2VsZi5wYXJzZV9ldmVudChldmVudCwg
ZGVidWdnYWJsZV90eXBlcykgZm9yIGV2ZW50IGluIGpzb25bJ2V2ZW50cyddXSkKIAotICAgICAg
ICBzZWxmLmRvbWFpbnMuYXBwZW5kKERvbWFpbihqc29uWydkb21haW4nXSwganNvbi5nZXQoJ2Rl
c2NyaXB0aW9uJywgJycpLCBqc29uLmdldCgnZmVhdHVyZUd1YXJkJyksIGRlYnVnZ2FibGVfdHlw
ZXMsIHRhcmdldF90eXBlcywgaXNTdXBwbGVtZW50YWwsIHZlcnNpb24sIHR5cGVzLCBjb21tYW5k
cywgZXZlbnRzKSkKKyAgICAgICAgc2VsZi5kb21haW5zLmFwcGVuZChEb21haW4oanNvblsnZG9t
YWluJ10sIGpzb24uZ2V0KCdkZXNjcmlwdGlvbicsICcnKSwganNvbi5nZXQoJ2NvbmRpdGlvbicp
LCBkZWJ1Z2dhYmxlX3R5cGVzLCB0YXJnZXRfdHlwZXMsIGlzU3VwcGxlbWVudGFsLCB2ZXJzaW9u
LCB0eXBlcywgY29tbWFuZHMsIGV2ZW50cykpCiAKICAgICBkZWYgcGFyc2VfdHlwZV9kZWNsYXJh
dGlvbihzZWxmLCBqc29uKToKICAgICAgICAgY2hlY2tfZm9yX3JlcXVpcmVkX3Byb3BlcnRpZXMo
WydpZCcsICd0eXBlJ10sIGpzb24sICJ0eXBlIikKQEAgLTQ1Nyw4ICs0MjIsNyBAQCBjbGFzcyBQ
cm90b2NvbDoKICAgICAgICAgICAgIHJhaXNlIFBhcnNlRXhjZXB0aW9uKCJNYWxmb3JtZWQgZG9t
YWluIHNwZWNpZmljYXRpb246IHR5cGUgZGVjbGFyYXRpb24gZm9yICVzIGhhcyBkdXBsaWNhdGUg
bWVtYmVyIG5hbWVzIiAlIGpzb25bJ2lkJ10pCiAKICAgICAgICAgdHlwZV9yZWYgPSBUeXBlUmVm
ZXJlbmNlKGpzb25bJ3R5cGUnXSwganNvbi5nZXQoJyRyZWYnKSwganNvbi5nZXQoJ2VudW0nKSwg
anNvbi5nZXQoJ2l0ZW1zJykpCi0gICAgICAgIHBsYXRmb3JtID0gUGxhdGZvcm0uZnJvbVN0cmlu
Zyhqc29uLmdldCgncGxhdGZvcm0nLCAnZ2VuZXJpYycpKQotICAgICAgICByZXR1cm4gVHlwZURl
Y2xhcmF0aW9uKGpzb25bJ2lkJ10sIHR5cGVfcmVmLCBqc29uLmdldCgiZGVzY3JpcHRpb24iLCAi
IiksIHBsYXRmb3JtLCB0eXBlX21lbWJlcnMpCisgICAgICAgIHJldHVybiBUeXBlRGVjbGFyYXRp
b24oanNvblsnaWQnXSwgdHlwZV9yZWYsIGpzb24uZ2V0KCJkZXNjcmlwdGlvbiIsICIiKSwganNv
bi5nZXQoJ2NvbmRpdGlvbicpLCB0eXBlX21lbWJlcnMpCiAKICAgICBkZWYgcGFyc2VfdHlwZV9t
ZW1iZXIoc2VsZiwganNvbik6CiAgICAgICAgIGNoZWNrX2Zvcl9yZXF1aXJlZF9wcm9wZXJ0aWVz
KFsnbmFtZSddLCBqc29uLCAidHlwZSBtZW1iZXIiKQpAQCAtNTA5LDggKzQ3Myw3IEBAIGNsYXNz
IFByb3RvY29sOgogICAgICAgICAgICAgaWYgbGVuKGR1cGxpY2F0ZV9uYW1lcykgPiAwOgogICAg
ICAgICAgICAgICAgIHJhaXNlIFBhcnNlRXhjZXB0aW9uKCJNYWxmb3JtZWQgZG9tYWluIHNwZWNp
ZmljYXRpb246IHJldHVybiBwYXJhbWV0ZXIgbGlzdCBmb3IgY29tbWFuZCAlcyBoYXMgZHVwbGlj
YXRlIHBhcmFtZXRlciBuYW1lcyIgJSBqc29uWyduYW1lJ10pCiAKLSAgICAgICAgcGxhdGZvcm0g
PSBQbGF0Zm9ybS5mcm9tU3RyaW5nKGpzb24uZ2V0KCdwbGF0Zm9ybScsICdnZW5lcmljJykpCi0g
ICAgICAgIHJldHVybiBDb21tYW5kKGpzb25bJ25hbWUnXSwgdGFyZ2V0X3R5cGVzLCBjYWxsX3Bh
cmFtZXRlcnMsIHJldHVybl9wYXJhbWV0ZXJzLCBqc29uLmdldCgnZGVzY3JpcHRpb24nLCAiIiks
IHBsYXRmb3JtLCBqc29uLmdldCgnYXN5bmMnLCBGYWxzZSkpCisgICAgICAgIHJldHVybiBDb21t
YW5kKGpzb25bJ25hbWUnXSwgdGFyZ2V0X3R5cGVzLCBjYWxsX3BhcmFtZXRlcnMsIHJldHVybl9w
YXJhbWV0ZXJzLCBqc29uLmdldCgnZGVzY3JpcHRpb24nLCAiIiksIGpzb24uZ2V0KCdjb25kaXRp
b24nKSwganNvbi5nZXQoJ2FzeW5jJywgRmFsc2UpKQogCiAgICAgZGVmIHBhcnNlX2V2ZW50KHNl
bGYsIGpzb24sIGRlYnVnZ2FibGVfdHlwZXMpOgogICAgICAgICBjaGVja19mb3JfcmVxdWlyZWRf
cHJvcGVydGllcyhbJ25hbWUnXSwganNvbiwgImV2ZW50IikKQEAgLTU0NCw4ICs1MDcsNyBAQCBj
bGFzcyBQcm90b2NvbDoKICAgICAgICAgICAgIGlmIGxlbihkdXBsaWNhdGVfbmFtZXMpID4gMDoK
ICAgICAgICAgICAgICAgICByYWlzZSBQYXJzZUV4Y2VwdGlvbigiTWFsZm9ybWVkIGRvbWFpbiBz
cGVjaWZpY2F0aW9uOiBwYXJhbWV0ZXIgbGlzdCBmb3IgZXZlbnQgJXMgaGFzIGR1cGxpY2F0ZSBw
YXJhbWV0ZXIgbmFtZXMiICUganNvblsnbmFtZSddKQogCi0gICAgICAgIHBsYXRmb3JtID0gUGxh
dGZvcm0uZnJvbVN0cmluZyhqc29uLmdldCgncGxhdGZvcm0nLCAnZ2VuZXJpYycpKQotICAgICAg
ICByZXR1cm4gRXZlbnQoanNvblsnbmFtZSddLCB0YXJnZXRfdHlwZXMsIGV2ZW50X3BhcmFtZXRl
cnMsIGpzb24uZ2V0KCdkZXNjcmlwdGlvbicsICIiKSwgcGxhdGZvcm0pCisgICAgICAgIHJldHVy
biBFdmVudChqc29uWyduYW1lJ10sIHRhcmdldF90eXBlcywgZXZlbnRfcGFyYW1ldGVycywganNv
bi5nZXQoJ2Rlc2NyaXB0aW9uJywgIiIpLCBqc29uLmdldCgnY29uZGl0aW9uJykpCiAKICAgICBk
ZWYgcGFyc2VfY2FsbF9vcl9yZXR1cm5fcGFyYW1ldGVyKHNlbGYsIGpzb24pOgogICAgICAgICBj
aGVja19mb3JfcmVxdWlyZWRfcHJvcGVydGllcyhbJ25hbWUnXSwganNvbiwgInBhcmFtZXRlciIp
CkBAIC02NDMsMTAgKzYwNSwxMCBAQCBjbGFzcyBQcm90b2NvbDoKIAogCiBjbGFzcyBEb21haW46
Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGRvbWFpbl9uYW1lLCBkZXNjcmlwdGlvbiwgZmVhdHVy
ZV9ndWFyZCwgZGVidWdnYWJsZV90eXBlcywgdGFyZ2V0X3R5cGVzLCBpc1N1cHBsZW1lbnRhbCwg
dmVyc2lvbiwgdHlwZV9kZWNsYXJhdGlvbnMsIGNvbW1hbmRzLCBldmVudHMpOgorICAgIGRlZiBf
X2luaXRfXyhzZWxmLCBkb21haW5fbmFtZSwgZGVzY3JpcHRpb24sIGNvbmRpdGlvbiwgZGVidWdn
YWJsZV90eXBlcywgdGFyZ2V0X3R5cGVzLCBpc1N1cHBsZW1lbnRhbCwgdmVyc2lvbiwgdHlwZV9k
ZWNsYXJhdGlvbnMsIGNvbW1hbmRzLCBldmVudHMpOgogICAgICAgICBzZWxmLmRvbWFpbl9uYW1l
ID0gZG9tYWluX25hbWUKICAgICAgICAgc2VsZi5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uCi0g
ICAgICAgIHNlbGYuZmVhdHVyZV9ndWFyZCA9IGZlYXR1cmVfZ3VhcmQKKyAgICAgICAgc2VsZi5j
b25kaXRpb24gPSBjb25kaXRpb24KICAgICAgICAgc2VsZi5kZWJ1Z2dhYmxlX3R5cGVzID0gZGVi
dWdnYWJsZV90eXBlcwogICAgICAgICBzZWxmLnRhcmdldF90eXBlcyA9IHRhcmdldF90eXBlcwog
ICAgICAgICBzZWxmLmlzX3N1cHBsZW1lbnRhbCA9IGlzU3VwcGxlbWVudGFsCkBAIC02ODYsMTEg
KzY0OCwxMSBAQCBjbGFzcyBEb21haW5zOgogCiAKIGNsYXNzIFR5cGVEZWNsYXJhdGlvbjoKLSAg
ICBkZWYgX19pbml0X18oc2VsZiwgdHlwZV9uYW1lLCB0eXBlX3JlZiwgZGVzY3JpcHRpb24sIHBs
YXRmb3JtLCB0eXBlX21lbWJlcnMpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0eXBlX25hbWUs
IHR5cGVfcmVmLCBkZXNjcmlwdGlvbiwgY29uZGl0aW9uLCB0eXBlX21lbWJlcnMpOgogICAgICAg
ICBzZWxmLnR5cGVfbmFtZSA9IHR5cGVfbmFtZQogICAgICAgICBzZWxmLnR5cGVfcmVmID0gdHlw
ZV9yZWYKICAgICAgICAgc2VsZi5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uCi0gICAgICAgIHNl
bGYucGxhdGZvcm0gPSBwbGF0Zm9ybQorICAgICAgICBzZWxmLmNvbmRpdGlvbiA9IGNvbmRpdGlv
bgogICAgICAgICBzZWxmLnR5cGVfbWVtYmVycyA9IHR5cGVfbWVtYmVycwogCiAgICAgICAgIGlm
IHNlbGYudHlwZV9uYW1lICE9IHVjZmlyc3Qoc2VsZi50eXBlX25hbWUpOgpAQCAtNzM0LDEzICs2
OTYsMTMgQEAgY2xhc3MgUGFyYW1ldGVyOgogCiAKIGNsYXNzIENvbW1hbmQ6Ci0gICAgZGVmIF9f
aW5pdF9fKHNlbGYsIGNvbW1hbmRfbmFtZSwgdGFyZ2V0X3R5cGVzLCBjYWxsX3BhcmFtZXRlcnMs
IHJldHVybl9wYXJhbWV0ZXJzLCBkZXNjcmlwdGlvbiwgcGxhdGZvcm0sIGlzX2FzeW5jKToKKyAg
ICBkZWYgX19pbml0X18oc2VsZiwgY29tbWFuZF9uYW1lLCB0YXJnZXRfdHlwZXMsIGNhbGxfcGFy
YW1ldGVycywgcmV0dXJuX3BhcmFtZXRlcnMsIGRlc2NyaXB0aW9uLCBjb25kaXRpb24sIGlzX2Fz
eW5jKToKICAgICAgICAgc2VsZi5jb21tYW5kX25hbWUgPSBjb21tYW5kX25hbWUKICAgICAgICAg
c2VsZi50YXJnZXRfdHlwZXMgPSB0YXJnZXRfdHlwZXMKICAgICAgICAgc2VsZi5jYWxsX3BhcmFt
ZXRlcnMgPSBjYWxsX3BhcmFtZXRlcnMKICAgICAgICAgc2VsZi5yZXR1cm5fcGFyYW1ldGVycyA9
IHJldHVybl9wYXJhbWV0ZXJzCiAgICAgICAgIHNlbGYuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlv
bgotICAgICAgICBzZWxmLnBsYXRmb3JtID0gcGxhdGZvcm0KKyAgICAgICAgc2VsZi5jb25kaXRp
b24gPSBjb25kaXRpb24KICAgICAgICAgc2VsZi5pc19hc3luYyA9IGlzX2FzeW5jCiAKICAgICBk
ZWYgcmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMoc2VsZiwgcHJvdG9jb2wsIGRvbWFpbik6CkBAIC03
NTQsMTIgKzcxNiwxMiBAQCBjbGFzcyBDb21tYW5kOgogCiAKIGNsYXNzIEV2ZW50OgotICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBldmVudF9uYW1lLCB0YXJnZXRfdHlwZXMsIGV2ZW50X3BhcmFtZXRl
cnMsIGRlc2NyaXB0aW9uLCBwbGF0Zm9ybSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGV2ZW50
X25hbWUsIHRhcmdldF90eXBlcywgZXZlbnRfcGFyYW1ldGVycywgZGVzY3JpcHRpb24sIGNvbmRp
dGlvbik6CiAgICAgICAgIHNlbGYuZXZlbnRfbmFtZSA9IGV2ZW50X25hbWUKICAgICAgICAgc2Vs
Zi50YXJnZXRfdHlwZXMgPSB0YXJnZXRfdHlwZXMKICAgICAgICAgc2VsZi5ldmVudF9wYXJhbWV0
ZXJzID0gZXZlbnRfcGFyYW1ldGVycwogICAgICAgICBzZWxmLmRlc2NyaXB0aW9uID0gZGVzY3Jp
cHRpb24KLSAgICAgICAgc2VsZi5wbGF0Zm9ybSA9IHBsYXRmb3JtCisgICAgICAgIHNlbGYuY29u
ZGl0aW9uID0gY29uZGl0aW9uCiAKICAgICBkZWYgcmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMoc2Vs
ZiwgcHJvdG9jb2wsIGRvbWFpbik6CiAgICAgICAgIGxvZy5kZWJ1ZygiPj4gUmVzb2x2aW5nIHR5
cGUgcmVmZXJlbmNlcyBmb3IgcGFyYW1ldGVycyBpbiBldmVudDogJXMiICUgc2VsZi5ldmVudF9u
YW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vcHJlcHJvY2Vzcy5wbCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL3ByZXByb2Nlc3MucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAuLjhjZDhhZTAxZTJmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vcHJlcHJvY2Vzcy5wbApAQCAtMCww
ICsxLDEwNCBAQAorIyEgL3Vzci9iaW4vZW52IHBlcmwKKyMKKyMgICBUaGlzIGZpbGUgaXMgcGFy
dCBvZiB0aGUgV2ViS2l0IHByb2plY3QKKyMKKyMgICBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIyAgIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
IyAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyMKKyMgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyAgIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisjICAg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjICAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorIyAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisjICAgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyMgICBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsK
KwordXNlIENvbmZpZzsKK3VzZSBHZXRvcHQ6Okxvbmc7Cit1c2UgSVBDOjpPcGVuMjsKK3VzZSBJ
UEM6Ok9wZW4zOwordXNlIFRleHQ6OlBhcnNlV29yZHM7CisKK215ICRpbnB1dFBhdGg7CitteSAk
ZGVmaW5lczsKK215ICRwcmVwcm9jZXNzb3I7CitteSAkb3V0cHV0UGF0aDsKK0dldE9wdGlvbnMo
J2lucHV0PXMnID0+IFwkaW5wdXRQYXRoLAorICAgICAgICAgICAnZGVmaW5lcz1zJyA9PiBcJGRl
ZmluZXMsCisgICAgICAgICAgICdwcmVwcm9jZXNzb3I9cycgPT4gXCRwcmVwcm9jZXNzb3IsCisg
ICAgICAgICAgICdvdXRwdXQ9cycgPT4gXCRvdXRwdXRQYXRoKTsKKworbXkgQGFyZ3MgPSAoKTsK
K2lmICghJHByZXByb2Nlc3NvcikgeworICAgIGlmICgkQ29uZmlnOjpDb25maWd7Im9zbmFtZSJ9
IGVxICJNU1dpbjMyIikgeworICAgICAgICAkcHJlcHJvY2Vzc29yID0gJEVOVntDQ30gfHwgImNs
IjsKKyAgICAgICAgcHVzaChAYXJncywgcXcoL0VQKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
JHByZXByb2Nlc3NvciA9ICRFTlZ7Q0N9IHx8ICgteCAiL3Vzci9iaW4vY2xhbmciID8gIi91c3Iv
YmluL2NsYW5nIiA6ICIvdXNyL2Jpbi9nY2MiKTsKKyAgICAgICAgcHVzaChAYXJncywgcXcoLUUg
LVAgLXggYysrKSk7CisgICAgfQorfQorCitpZiAoJENvbmZpZzo6Q29uZmlneyJvc25hbWUifSBl
cSAiZGFyd2luIikgeworICAgIHB1c2goQGFyZ3MsICItSSIgLiAkRU5We0JVSUxUX1BST0RVQ1RT
X0RJUn0gLiAiL3Vzci9sb2NhbC9pbmNsdWRlIikgaWYgJEVOVntCVUlMVF9QUk9EVUNUU19ESVJ9
OworICAgIHB1c2goQGFyZ3MsICItaXN5c3Jvb3QiLCAkRU5We1NES1JPT1R9KSBpZiAkRU5We1NE
S1JPT1R9OworfQorCisjIFJlbW92ZSBkb3VibGUgcXVvdGF0aW9ucyBmcm9tICRkZWZpbmVzIGFu
ZCBleHRyYWN0IG1hY3Jvcy4KKyMgRm9yIGV4YW1wbGUsIGlmICRkZWZpbmVzIGlzICcgIkE9MSIg
IkI9MSIgQz0xICIiICAgIEQgICcsCisjIHRoZW4gaXQgaXMgY29udmVydGVkIGludG8gZm91ciBt
YWNyb3MgLURBPTEsIC1EQj0xLCAtREM9MSBhbmQgLURELgorJGRlZmluZXMgPX4gcy9cIi8vZzsK
K215IEBtYWNyb3MgPSBncmVwIHsgJF8gfSBzcGxpdCgvXHMrLywgJGRlZmluZXMpOyAjIGdyZXAg
c2tpcHMgZW1wdHkgbWFjcm9zLgorQG1hY3JvcyA9IG1hcCB7ICItRCRfIiB9IEBtYWNyb3M7CisK
K215ICRwaWQgPSAwOworaWYgKCRDb25maWd7b3NuYW1lfSBlcSAiY3lnd2luIikgeworICAgICRF
TlZ7UEFUSH0gPSAiJEVOVntQQVRIfTovY3lnZHJpdmUvYy9jeWd3aW4vYmluIjsKKyAgICBteSBA
cHJlcHJvY2Vzc29yQW5kRmxhZ3M7CisgICAgaWYgKCRwcmVwcm9jZXNzb3IgZXEgIi91c3IvYmlu
L2djYyIpIHsKKyAgICAgICAgQHByZXByb2Nlc3NvckFuZEZsYWdzID0gc3BsaXQoJyAnLCAkcHJl
cHJvY2Vzc29yKTsKKyAgICB9IGVsc2UgeyAgICAgICAgCisgICAgICAgICRwcmVwcm9jZXNzb3Ig
PX4gLyIoLiopIi87CisgICAgICAgIGNob21wKG15ICRwcmVwcm9jZXNzb3IgPSBgY3lncGF0aCAt
dSAnJDEnYCkgaWYgKGRlZmluZWQgJDEpOworICAgICAgICBjaG9tcCgkaW5wdXRQYXRoID0gYGN5
Z3BhdGggLXcgJyRpbnB1dFBhdGgnYCk7CisgICAgICAgIEBwcmVwcm9jZXNzb3JBbmRGbGFncyA9
ICgkcHJlcHJvY2Vzc29yLCAiL25vbG9nbyIsICIvRVAiKTsKKyAgICB9CisgICAgIyBUaGlzIGNh
bGwgY2FuIGZhaWwgaWYgV2luZG93cyByZWJhc2VzIGN5Z3dpbiwgc28gcmV0cnkgYSBmZXcgdGlt
ZXMgdW50aWwgaXQgc3VjY2VlZHMuCisgICAgZm9yIChteSAkdHJpZXMgPSAwOyAhJHBpZCAmJiAo
JHRyaWVzIDwgMjApOyAkdHJpZXMrKykgeworICAgICAgICBldmFsIHsKKyAgICAgICAgICAgICMg
U3VwcHJlc3MgU1RERVJSIHNvIHRoYXQgaWYgd2UncmUgdXNpbmcgY2wuZXhlLCB0aGUgb3V0cHV0
CisgICAgICAgICAgICAjIG5hbWUgaXNuJ3QgbmVlZGxlc3NseSBlY2hvZWQuCisgICAgICAgICAg
ICB1c2UgU3ltYm9sICdnZW5zeW0nOyBteSAkZXJyID0gZ2Vuc3ltOworICAgICAgICAgICAgJHBp
ZCA9IG9wZW4zKFwqUFBfSU4sIFwqUFBfT1VULCAkZXJyLCBAcHJlcHJvY2Vzc29yQW5kRmxhZ3Ms
IEBhcmdzLCBAbWFjcm9zLCAkaW5wdXRQYXRoKTsKKyAgICAgICAgICAgIDE7CisgICAgICAgIH0g
b3IgZG8geworICAgICAgICAgICAgc2xlZXAgMTsKKyAgICAgICAgfQorICAgIH07Cit9IGVsc2lm
ICgkQ29uZmlnOjpDb25maWd7Im9zbmFtZSJ9IGVxICJNU1dpbjMyIikgeworICAgICMgU3VwcHJl
c3MgU1RERVJSIHNvIHRoYXQgaWYgd2UncmUgdXNpbmcgY2wuZXhlLCB0aGUgb3V0cHV0CisgICAg
IyBuYW1lIGlzbid0IG5lZWRsZXNzbHkgZWNob2VkLgorICAgIHVzZSBTeW1ib2wgJ2dlbnN5bSc7
IG15ICRlcnIgPSBnZW5zeW07CisgICAgJHBpZCA9IG9wZW4zKFwqUFBfSU4sIFwqUFBfT1VULCAk
ZXJyLCAkcHJlcHJvY2Vzc29yLCBAYXJncywgQG1hY3JvcywgJGlucHV0UGF0aCk7Cit9IGVsc2Ug
eworICAgICRwaWQgPSBvcGVuMihcKlBQX09VVCwgXCpQUF9JTiwgc2hlbGx3b3JkcygkcHJlcHJv
Y2Vzc29yKSwgQGFyZ3MsIEBtYWNyb3MsICRpbnB1dFBhdGgpOworfQorY2xvc2UgUFBfSU47Citt
eSBAbGluZXMgPSA8UFBfT1VUPjsKK2Nsb3NlIFBQX09VVDsKK3dhaXRwaWQoJHBpZCwgMCk7CisK
K29wZW4gT1VUUFVULCAiPiRvdXRwdXRQYXRoIiB8fCBkaWUgIkNvdWxkIG5vdCBvcGVuICRvdXRw
dXRQYXRoIGZvciB3cml0aW5nIjsKK2ZvcmVhY2ggbXkgJGxpbmUgKEBsaW5lcykgeworICAgIHBy
aW50IE9VVFBVVCAkbGluZTsKK30KK2Nsb3NlIE9VVFBVVDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CmluZGV4IDJiMWQ4NzgyY2Iy
Li5iZDE5YzAwMjc1MSAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CkBAIC0xMTcsNyArMTE3LDYgQEAgZGVmIGdlbmVyYXRlX2Zy
b21fc3BlY2lmaWNhdGlvbihwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGg9Tm9uZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2RpcnBhdGg9Tm9uZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yY2Vfb3V0cHV0PUZhbHNlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXdvcmtfbmFtZT0iIiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcGxhdGZvcm1fbmFtZT0iIiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ2VuZXJhdGVfZnJvbnRlbmQ9VHJ1ZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ2VuZXJhdGVfYmFja2VuZD1UcnVlKToKIApAQCAtMTMwLDcgKzEyOSw2IEBA
IGRlZiBnZW5lcmF0ZV9mcm9tX3NwZWNpZmljYXRpb24ocHJpbWFyeV9zcGVjaWZpY2F0aW9uX2Zp
bGVwYXRoPU5vbmUsCiAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIGU6CiAgICAgICAgICAg
ICByYWlzZSBFeGNlcHRpb24oIkVycm9yIHBhcnNpbmcgdmFsaWQgSlNPTiBpbiBmaWxlOiAiICsg
ZmlsZXBhdGggKyAiXG5QYXJzZSBlcnJvcjogIiArIHN0cihlKSkKIAotICAgIHBsYXRmb3JtID0g
UGxhdGZvcm0uZnJvbVN0cmluZyhwbGF0Zm9ybV9uYW1lKQogICAgIHByb3RvY29sID0gbW9kZWxz
LlByb3RvY29sKGZyYW1ld29ya19uYW1lKQogICAgIGZvciBzcGVjaWZpY2F0aW9uIGluIHN1cHBs
ZW1lbnRhbF9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoczoKICAgICAgICAgbG9hZF9zcGVjaWZpY2F0
aW9uKHByb3RvY29sLCBzcGVjaWZpY2F0aW9uLCBpc1N1cHBsZW1lbnRhbD1UcnVlKQpAQCAtMTM4
LDcgKzEzNiw3IEBAIGRlZiBnZW5lcmF0ZV9mcm9tX3NwZWNpZmljYXRpb24ocHJpbWFyeV9zcGVj
aWZpY2F0aW9uX2ZpbGVwYXRoPU5vbmUsCiAKICAgICBwcm90b2NvbC5yZXNvbHZlX3R5cGVzKCkK
IAotICAgIGdlbmVyYXRvcl9hcmd1bWVudHMgPSBbcHJvdG9jb2wsIHBsYXRmb3JtLCBwcmltYXJ5
X3NwZWNpZmljYXRpb25fZmlsZXBhdGhdCisgICAgZ2VuZXJhdG9yX2FyZ3VtZW50cyA9IFtwcm90
b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoXQogICAgIGdlbmVyYXRvcnMgPSBb
XQogCiAgICAgaWYgcHJvdG9jb2wuZnJhbWV3b3JrIGlzIEZyYW1ld29ya3MuVGVzdDoKQEAgLTIy
OSw3ICsyMjcsNiBAQCBkZWYgZ2VuZXJhdGVfZnJvbV9zcGVjaWZpY2F0aW9uKHByaW1hcnlfc3Bl
Y2lmaWNhdGlvbl9maWxlcGF0aD1Ob25lLAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgog
ICAgIGFsbG93ZWRfZnJhbWV3b3JrX25hbWVzID0gWydKYXZhU2NyaXB0Q29yZScsICdXZWJJbnNw
ZWN0b3InLCAnV2ViSW5zcGVjdG9yVUknLCAnV2ViS2l0JywgJ1Rlc3QnXQotICAgIGFsbG93ZWRf
cGxhdGZvcm1fbmFtZXMgPSBbJ2lPUycsICdtYWNPUycsICdhbGwnLCAnZ2VuZXJpYyddCiAgICAg
Y2xpX3BhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcih1c2FnZT0idXNhZ2U6ICVwcm9nIFtv
cHRpb25zXSBQcmltYXJ5UHJvdG9jb2wuanNvbiBbU3VwcGxlbWVudGFsUHJvdG9jb2wuanNvbiAu
Li5dIikKICAgICBjbGlfcGFyc2VyLmFkZF9vcHRpb24oIi1vIiwgIi0tb3V0cHV0RGlyIiwgaGVs
cD0iRGlyZWN0b3J5IHdoZXJlIGdlbmVyYXRlZCBmaWxlcyBzaG91bGQgYmUgd3JpdHRlbi4iKQog
ICAgIGNsaV9wYXJzZXIuYWRkX29wdGlvbigiLS1mcmFtZXdvcmsiLCB0eXBlPSJjaG9pY2UiLCBj
aG9pY2VzPWFsbG93ZWRfZnJhbWV3b3JrX25hbWVzLCBoZWxwPSJUaGUgZnJhbWV3b3JrIHRoYXQg
dGhlIHByaW1hcnkgc3BlY2lmaWNhdGlvbiBiZWxvbmdzIHRvLiIpCkBAIC0yMzgsNyArMjM1LDYg
QEAgaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICBjbGlfcGFyc2VyLmFkZF9vcHRpb24o
Ii10IiwgIi0tdGVzdCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGhlbHA9IkVuYWJsZSB0ZXN0IG1v
ZGUuIFVzZSB1bmlxdWUgb3V0cHV0IGZpbGVuYW1lcyBjcmVhdGVkIGJ5IHByZXBlbmRpbmcgdGhl
IGlucHV0IGZpbGVuYW1lLiIpCiAgICAgY2xpX3BhcnNlci5hZGRfb3B0aW9uKCItLWZyb250ZW5k
IiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgaGVscD0iR2VuZXJhdGUgY29kZSBmb3IgdGhlIGZyb250
ZW5kLXNpZGUgb2YgdGhlIHByb3RvY29sIG9ubHkuIikKICAgICBjbGlfcGFyc2VyLmFkZF9vcHRp
b24oIi0tYmFja2VuZCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGhlbHA9IkdlbmVyYXRlIGNvZGUg
Zm9yIHRoZSBiYWNrZW5kLXNpZGUgb2YgdGhlIHByb3RvY29sIG9ubHkuIikKLSAgICBjbGlfcGFy
c2VyLmFkZF9vcHRpb24oIi0tcGxhdGZvcm0iLCBkZWZhdWx0PSJnZW5lcmljIiwgaGVscD0iVGhl
IHBsYXRmb3JtIG9mIHRoZSBiYWNrZW5kIGJlaW5nIGdlbmVyYXRlZC4gRm9yIGV4YW1wbGUsIHdl
IGNvbXBpbGUgV2ViS2l0MiBmb3IgZWl0aGVyIG1hY09TIG9yIGlPUy4gVGhpcyB2YWx1ZSBpcyBj
YXNlLWluc2Vuc2l0aXZlLiBBbGxvd2VkIHZhbHVlczogJXMiICUgIiwgIi5qb2luKGFsbG93ZWRf
cGxhdGZvcm1fbmFtZXMpKQogICAgIG9wdGlvbnMgPSBOb25lCiAKICAgICBhcmdfb3B0aW9ucywg
YXJnX3ZhbHVlcyA9IGNsaV9wYXJzZXIucGFyc2VfYXJncygpCkBAIC0yNjQsNyArMjYwLDYgQEAg
aWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICAgICAgJ291dHB1dF9kaXJwYXRoJzogYXJn
X29wdGlvbnMub3V0cHV0RGlyLAogICAgICAgICAnY29uY2F0ZW5hdGVfb3V0cHV0JzogYXJnX29w
dGlvbnMudGVzdCwKICAgICAgICAgJ2ZyYW1ld29ya19uYW1lJzogYXJnX29wdGlvbnMuZnJhbWV3
b3JrLAotICAgICAgICAncGxhdGZvcm1fbmFtZSc6IGFyZ19vcHRpb25zLnBsYXRmb3JtLAogICAg
ICAgICAnZm9yY2Vfb3V0cHV0JzogYXJnX29wdGlvbnMuZm9yY2UsCiAgICAgICAgICdnZW5lcmF0
ZV9iYWNrZW5kJzogZ2VuZXJhdGVfYmFja2VuZCwKICAgICAgICAgJ2dlbmVyYXRlX2Zyb250ZW5k
JzogZ2VuZXJhdGVfZnJvbnRlbmQsCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvYWxsL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3Jt
Lmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvYWxs
L2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDgxN2YxMzVlZTVhLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvYWxsL2RlZmluaXRpb25zLXdpdGgtbWFjLXBs
YXRmb3JtLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi17Ci0gICAgImRvbWFp
biI6ICJOZXR3b3JrIiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJp
ZCI6ICJOZXR3b3JrRXJyb3IiLAotICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKLSAgICAg
ICAgICAgICJwbGF0Zm9ybSI6ICJtYWNvcyIsCi0gICAgICAgICAgICAicHJvcGVydGllcyI6IFsK
LSAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm1lc3NhZ2UiLCAidHlwZSI6ICJzdHJpbmciLCAi
ZGVzY3JpcHRpb24iOiAiRXJyb3IgbWVzc2FnZS4iIH0sCi0gICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJjb2RlIiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBjb2Rl
LiIgfQotICAgICAgICAgICAgXQotICAgICAgICB9Ci0gICAgXSwKLSAgICAiY29tbWFuZHMiOiBb
Ci0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJjZSIsCi0gICAgICAg
ICAgICAicGxhdGZvcm0iOiAibWFjb3MiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxv
YWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVk
IHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKLSAgICAgICAgfQotICAgIF0sCi0g
ICAgImV2ZW50cyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAicmVzb3VyY2VM
b2FkZWQiLAotICAgICAgICAgICAgInBsYXRmb3JtIjogIm1hY29zIiwKLSAgICAgICAgICAgICJk
ZXNjcmlwdGlvbiI6ICJBIHJlc291cmNlIHdhcyBsb2FkZWQuIgotICAgICAgICB9Ci0gICAgXQot
fQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2FsbC9leHBlY3RlZC9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uLXJlc3Vs
dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9hbGwvZXhw
ZWN0ZWQvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbi1yZXN1bHQKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliM2NlZTZiZTY1Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvYWxsL2V4cGVjdGVkL2Rl
ZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24tcmVzdWx0CisrKyAvZGV2L251bGwKQEAg
LTEsMTIxNyArMCwwIEBACi0jIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRz
LmpzCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1t
YWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0vLyBOZXR3b3JrCi1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJOZXR3b3Jr
IiwgbnVsbCk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiTmV0d29yay5sb2Fk
UmVzb3VyY2UiLCBudWxsLCBbXSwgW10pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckV2ZW50
KCJOZXR3b3JrLnJlc291cmNlTG9hZGVkIiwgbnVsbCwgW10pOwotSW5zcGVjdG9yQmFja2VuZC5y
ZWdpc3Rlck5ldHdvcmtEaXNwYXRjaGVyID0gSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRpc3Bh
dGNoZXIuYmluZChJbnNwZWN0b3JCYWNrZW5kLCAiTmV0d29yayIpOwotSW5zcGVjdG9yQmFja2Vu
ZC5hY3RpdmF0ZURvbWFpbigiTmV0d29yayIsIG51bGwpOwotIyMjIEVuZCBGaWxlOiBJbnNwZWN0
b3JCYWNrZW5kQ29tbWFuZHMuanMKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmlu
aXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCi0j
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotCi1uYW1l
c3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewot
cHVibGljOgotICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNw
YXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlz
cGF0Y2hlcik7IH0KLSAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBj
b25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Ci1wcml2YXRlOgotICAg
IFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKLX07Ci0KLQot
Y2xhc3MgQWx0ZXJuYXRlTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5BbHRlcm5hdGVOZXR3
b3JrQmFja2VuZERpc3BhdGNoZXIoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNl
KGxvbmcgY2FsbElkKSA9IDA7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotI2Vu
ZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotIyMjIEVuZCBG
aWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0
UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFt
ZXNwYWNlIEluc3BlY3RvciB7Ci0KLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCi0jaWYg
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi1jbGFzcyBBbHRlcm5hdGVO
ZXR3b3JrQmFja2VuZERpc3BhdGNoZXI7Ci0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCi0KLWNsYXNzIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIgewotcHVibGljOgotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UoRXJyb3JTdHJpbmcm
KSA9IDA7Ci1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB+TmV0d29ya0JhY2tlbmREaXNwYXRjaGVy
SGFuZGxlcigpOwotfTsKLQotY2xhc3MgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDog
cHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICBzdGF0
aWMgUmVmPE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVy
JiwgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIHZvaWQgZGlzcGF0Y2go
bG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYm
IG1lc3NhZ2UpIG92ZXJyaWRlOwotcHJpdmF0ZToKLSAgICB2b2lkIGxvYWRSZXNvdXJjZShsb25n
IHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKLSNpZiBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLXB1YmxpYzoKLSAgICB2b2lkIHNl
dEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyKiBh
bHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURp
c3BhdGNoZXI7IH0KLXByaXZhdGU6Ci0gICAgQWx0ZXJuYXRlTmV0d29ya0JhY2tlbmREaXNwYXRj
aGVyKiBtX2FsdGVybmF0ZURpc3BhdGNoZXIgeyBudWxscHRyIH07Ci0jZW5kaWYKLXByaXZhdGU6
Ci0gICAgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiwgTmV0d29y
a0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIqIG1fYWdlbnQgeyBudWxscHRyIH07Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1
ZXMuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKLSNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jZW5kaWYK
LQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLU5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXI6On5OZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9Ci0KLVJlZjxOZXR3b3Jr
QmFja2VuZERpc3BhdGNoZXI+IE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEJhY2tl
bmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVy
SGFuZGxlciogYWdlbnQpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTmV0d29ya0JhY2tl
bmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOwotfQotCi1OZXR3b3JrQmFj
a2VuZERpc3BhdGNoZXI6Ok5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hl
ciYgYmFja2VuZERpc3BhdGNoZXIsIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFn
ZW50KQotICAgIDogU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNo
ZXIpCi0gICAgLCBtX2FnZW50KGFnZW50KQotewotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJl
Z2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbigiTmV0d29yayJfcywgdGhpcyk7Ci19Ci0KLXZvaWQg
TmV0d29ya0JhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3Qg
U3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKLXsKLSAgICBSZWY8
TmV0d29ya0JhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKLQotICAgIFJlZlB0cjxK
U09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMi
X3MsIHBhcmFtZXRlcnMpOwotCi0gICAgaWYgKG1ldGhvZCA9PSAibG9hZFJlc291cmNlIikKLSAg
ICAgICAgbG9hZFJlc291cmNlKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7Ci0gICAg
ZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJh
Y2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrLiIgKyBtZXRob2QgKyAi
JyB3YXMgbm90IGZvdW5kIik7Ci19Ci0KLXZvaWQgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyOjps
b2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCi17Ci0j
aWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0gICAgaWYgKG1fYWx0
ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRS
ZXNvdXJjZShyZXF1ZXN0SWQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAg
ICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZShlcnJvcik7Ci0K
LSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5z
ZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNl
Ci0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2Vu
ZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMu
Y3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0u
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21h
IG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDx3dGYv
SlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgRnJvbnRlbmRSb3V0ZXI7Ci0KLWNsYXNzIE5ldHdvcmtG
cm9udGVuZERpc3BhdGNoZXIgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGlj
OgotICAgIE5ldHdvcmtGcm9udGVuZERpc3BhdGNoZXIoRnJvbnRlbmRSb3V0ZXImIGZyb250ZW5k
Um91dGVyKSA6IG1fZnJvbnRlbmRSb3V0ZXIoZnJvbnRlbmRSb3V0ZXIpIHsgfQotICAgIHZvaWQg
cmVzb3VyY2VMb2FkZWQoKTsKLXByaXZhdGU6Ci0gICAgRnJvbnRlbmRSb3V0ZXImIG1fZnJvbnRl
bmRSb3V0ZXI7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTog
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5k
RGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5p
dGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEZyb250
ZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZy
b250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKLQotdm9pZCBOZXR3b3JrRnJvbnRlbmREaXNwYXRjaGVyOjpyZXNvdXJj
ZUxvYWRlZCgpCi17Ci0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywg
Ik5ldHdvcmsucmVzb3VyY2VMb2FkZWQiX3MpOwotCi0gICAgbV9mcm9udGVuZFJvdXRlci5zZW5k
RXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0j
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1
ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotbmFt
ZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLS8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgotbmFtZXNw
YWNlIE5ldHdvcmsgewotY2xhc3MgTmV0d29ya0Vycm9yOwotfSAvLyBOZXR3b3JrCi0vLyBFbmQg
b2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCi0KLQotCi0KLW5hbWVzcGFjZSBOZXR3b3JrIHsKLWNs
YXNzIE5ldHdvcmtFcnJvciA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKLXB1YmxpYzoKLSAg
ICBlbnVtIHsKLSAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAotICAgICAgICBNZXNzYWdlU2V0ID0g
MSA8PCAwLAotICAgICAgICBDb2RlU2V0ID0gMSA8PCAxLAotICAgICAgICBBbGxGaWVsZHNTZXQg
PSAoTWVzc2FnZVNldCB8IENvZGVTZXQpCi0gICAgfTsKLQotICAgIHRlbXBsYXRlPGludCBTVEFU
RT4KLSAgICBjbGFzcyBCdWlsZGVyIHsKLSAgICBwcml2YXRlOgotICAgICAgICBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiBtX3Jlc3VsdDsKLQotICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRl
cjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBCdWlsZGVyKFJlZjwvKk5ldHdvcmtFcnJvciovSlNPTjo6T2JqZWN0
PiYmIG9iamVjdCkKLSAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwg
YnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKLSAgICAgICAgfQotICAgICAgICBm
cmllbmQgY2xhc3MgTmV0d29ya0Vycm9yOwotICAgIHB1YmxpYzoKLQotICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgTWVzc2FnZVNldD4mIHNldE1lc3NhZ2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAg
ICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE1lc3NhZ2VTZXQp
LCBwcm9wZXJ0eV9tZXNzYWdlX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXRTdHJpbmcoIm1lc3NhZ2UiX3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3Rh
dGU8TWVzc2FnZVNldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBD
b2RlU2V0PiYgc2V0Q29kZShpbnQgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBDb2RlU2V0KSwgcHJvcGVydHlfY29kZV9hbHJlYWR5X3NldCk7
Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcigiY29kZSJfcywgdmFsdWUpOwotICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb2RlU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgUmVmPE5ldHdvcmtFcnJvcj4gcmVsZWFzZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7
Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoTmV0d29ya0Vycm9yKSA9PSBzaXpl
b2YoSlNPTjo6T2JqZWN0KSwgY2Fubm90X2Nhc3QpOwotCi0gICAgICAgICAgICBSZWY8SlNPTjo6
T2JqZWN0PiBqc29uUmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKLSAgICAgICAg
ICAgIGF1dG8gcmVzdWx0ID0gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8TmV0d29ya0Vy
cm9yPio+KCZqc29uUmVzdWx0KSk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAg
ICB9Ci0gICAgfTsKLQotICAgIC8qCi0gICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgotICAg
ICAqIFJlZjxOZXR3b3JrRXJyb3I+IHJlc3VsdCA9IE5ldHdvcmtFcnJvcjo6Y3JlYXRlKCkKLSAg
ICAgKiAgICAgLnNldE1lc3NhZ2UoLi4uKQotICAgICAqICAgICAuc2V0Q29kZSguLi4pCi0gICAg
ICogICAgIC5yZWxlYXNlKCk7Ci0gICAgICovCi0gICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNT
ZXQ+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4o
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7Ci0gICAgfQotfTsKLQotfSAvLyBOZXR3b3JrCi0KLQot
Ci19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xPYmplY3RzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRl
ZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbE9iamVjdHMuaCIKLQotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLW5hbWVzcGFj
ZSBQcm90b2NvbCB7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAot
Ci0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9y
bS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMu
aD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLUBwcm90b2NvbCBUZXN0UHJvdG9jb2xO
ZXR3b3JrRG9tYWluSGFuZGxlcjsKLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotY2xhc3Mg
T2JqQ0luc3BlY3Rvck5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRl
cm5hdGVOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwotcHVibGljOgotICAgIE9iakNJbnNwZWN0b3JOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIo
aWQ8VGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0
ZSA9IGhhbmRsZXI7IH0KLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgcmVxdWVz
dElkKSBvdmVycmlkZTsKLXByaXZhdGU6Ci0gICAgUmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbE5l
dHdvcmtEb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5o
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0
Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNp
bXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJz
LmgiCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0K
LW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrQmFja2Vu
ZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZShsb25nIHJlcXVlc3RJZCkKLXsKLSAgICBpZiAoIVtt
X2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IobG9hZFJlc291cmNlV2l0aEVy
cm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6
TWV0aG9kTm90Rm91bmQsICInTmV0d29yay5sb2FkUmVzb3VyY2UnIHdhcyBub3QgZm91bmQiX3Mp
OwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcg
KmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJy
b3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKLSAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICB9Owot
Ci0gICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2Up
OwotICAgIH07Ci0KLSAgICBbbV9kZWxlZ2F0ZSBsb2FkUmVzb3VyY2VXaXRoRXJyb3JDYWxsYmFj
azplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOwotfQotCi0K
LX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJh
Y2tlbmREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbi5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMt
d2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+Ci0KLV9fYXR0
cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9j
b2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4s
IHNldHRlcj1zZXROZXR3b3JrSGFuZGxlcjopIGlkPFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5I
YW5kbGVyPiBuZXR3b3JrSGFuZGxlcjsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkg
VGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkV2ZW50RGlzcGF0Y2hlciAqbmV0d29ya0V2ZW50RGlz
cGF0Y2hlcjsKLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRp
b24uaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRm
b3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2lt
cG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2xJbnRlcm5hbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgi
Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgot
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+
Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0
Y2hlcnMuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVycy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW1wbGVtZW50YXRpb24g
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29u
dHJvbGxlciogX2NvbnRyb2xsZXI7Ci0gICAgaWQ8VGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkhh
bmRsZXI+IF9uZXR3b3JrSGFuZGxlcjsKLSAgICBUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluRXZl
bnREaXNwYXRjaGVyICpfbmV0d29ya0V2ZW50RGlzcGF0Y2hlcjsKLX0KLQotLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKilj
b250cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0g
ICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIpOwotICAgIF9jb250cm9s
bGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClkZWFsbG9j
Ci17Ci0gICAgW19uZXR3b3JrSGFuZGxlciByZWxlYXNlXTsKLSAgICBbX25ldHdvcmtFdmVudERp
c3BhdGNoZXIgcmVsZWFzZV07Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi0tICh2b2lkKXNl
dE5ldHdvcmtIYW5kbGVyOihpZDxUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluSGFuZGxlcj4paGFu
ZGxlcgotewotICAgIGlmIChoYW5kbGVyID09IF9uZXR3b3JrSGFuZGxlcikKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgW19uZXR3b3JrSGFuZGxlciByZWxlYXNlXTsKLSAgICBfbmV0d29ya0hhbmRs
ZXIgPSBbaGFuZGxlciByZXRhaW5dOwotCi0gICAgYXV0byBhbHRlcm5hdGVEaXNwYXRjaGVyID0g
bWFrZVVuaXF1ZTxPYmpDSW5zcGVjdG9yTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyPihoYW5kbGVy
KTsKLSAgICBhdXRvIGFsdGVybmF0ZUFnZW50ID0gbWFrZVVuaXF1ZTxBbHRlcm5hdGVEaXNwYXRj
aGFibGVBZ2VudDxOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIsIEFsdGVybmF0ZU5ldHdvcmtCYWNr
ZW5kRGlzcGF0Y2hlcj4+KCJOZXR3b3JrIl9zLCAqX2NvbnRyb2xsZXIsIFdURk1vdmUoYWx0ZXJu
YXRlRGlzcGF0Y2hlcikpOwotICAgIF9jb250cm9sbGVyLT5hcHBlbmRFeHRyYUFnZW50KFdURk1v
dmUoYWx0ZXJuYXRlQWdlbnQpKTsKLX0KLQotLSAoaWQ8VGVzdFByb3RvY29sTmV0d29ya0RvbWFp
bkhhbmRsZXI+KW5ldHdvcmtIYW5kbGVyCi17Ci0gICAgcmV0dXJuIF9uZXR3b3JrSGFuZGxlcjsK
LX0KLQotLSAoVGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkV2ZW50RGlzcGF0Y2hlciAqKW5ldHdv
cmtFdmVudERpc3BhdGNoZXIKLXsKLSAgICBpZiAoIV9uZXR3b3JrRXZlbnREaXNwYXRjaGVyKQot
ICAgICAgICBfbmV0d29ya0V2ZW50RGlzcGF0Y2hlciA9IFtbVGVzdFByb3RvY29sTmV0d29ya0Rv
bWFpbkV2ZW50RGlzcGF0Y2hlciBhbGxvY10gaW5pdFdpdGhDb250cm9sbGVyOl9jb250cm9sbGVy
XTsKLSAgICByZXR1cm4gX25ldHdvcmtFdmVudERpc3BhdGNoZXI7Ci19Ci0KLUBlbmQKLQotCi0j
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2Nv
bEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgot
I2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsK
LQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5FdmVudERpc3BhdGNo
ZXIKLXsKLSAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwot
fQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3Bl
Y3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwot
ICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxl
cik7Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQot
Ci0tICh2b2lkKXJlc291cmNlTG9hZGVkCi17Ci0gICAgY29uc3QgRnJvbnRlbmRSb3V0ZXImIHJv
dXRlciA9IF9jb250cm9sbGVyLT5mcm9udGVuZFJvdXRlcigpOwotCi0gICAgUmVmPEpTT046Ok9i
amVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNz
YWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIk5ldHdvcmsucmVzb3VyY2VMb2FkZWQiX3MpOwot
ICAgIHJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKLX0KLQot
QGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQot
Ci0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91
bmRhdGlvbi5oPgotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0
Lmg+Ci0KLQotQGNsYXNzIFRlc3RQcm90b2NvbE5ldHdvcmtFcnJvcjsKLQotdHlwZWRlZiBOU19F
TlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sUGxhdGZvcm0pIHsKLSAgICBUZXN0UHJvdG9jb2xQ
bGF0Zm9ybUFsbCwKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWMsCi0gICAgVGVzdFBy
b3RvY29sUGxhdGZvcm1JT1MsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUywKLX07Ci0K
LQotCi0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFj
ZSBUZXN0UHJvdG9jb2xOZXR3b3JrRXJyb3IgOiBSV0lQcm90b2NvbEpTT05PYmplY3QKLS0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4g
KilwYXlsb2FkOwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVBy
b3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhN
ZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZTooaW50KWNvZGU7Ci0vKiByZXF1aXJlZCAq
LyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKm1lc3NhZ2U7Ci0vKiByZXF1
aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQgY29kZTsKLUBlbmQKLQot
QHByb3RvY29sIFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5IYW5kbGVyIDxOU09iamVjdD4KLUBv
cHRpb25hbAotLSAodm9pZClsb2FkUmVzb3VyY2VXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShO
U1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKHZv
aWQpKXN1Y2Nlc3NDYWxsYmFjazsKLUBlbmQKLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAo
ImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5FdmVudERp
c3BhdGNoZXIgOiBOU09iamVjdAotLSAodm9pZClyZXNvdXJjZUxvYWRlZDsKLUBlbmQKLQotCi0j
aW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3Rz
Lmg+Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbEludGVybmFsLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBk
ZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAi
VGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1
ZXMuaD4KLQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluRXZlbnREaXNwYXRj
aGVyIChQcml2YXRlKQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooSW5zcGVj
dG9yOjpBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXI7Ci1AZW5kCi0K
LQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgi
Ci0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+Ci0K
LW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+
Ci1PcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcm
IHZhbHVlKTsKLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFBs
YXRmb3JtIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3Rv
Y29sUGxhdGZvcm1BbGw6Ci0gICAgICAgIHJldHVybiAiYWxsIl9zOwotICAgIGNhc2UgVGVzdFBy
b3RvY29sUGxhdGZvcm1HZW5lcmljOgotICAgICAgICByZXR1cm4gImdlbmVyaWMiX3M7Ci0gICAg
Y2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzoKLSAgICAgICAgcmV0dXJuICJpb3MiX3M7Ci0g
ICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOgotICAgICAgICByZXR1cm4gIm1hY29z
Il9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2Nv
bFBsYXRmb3JtPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAg
ICBpZiAodmFsdWUgPT0gImFsbCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9y
bUFsbDsKLSAgICBpZiAodmFsdWUgPT0gImdlbmVyaWMiKQotICAgICAgICByZXR1cm4gVGVzdFBy
b3RvY29sUGxhdGZvcm1HZW5lcmljOwotICAgIGlmICh2YWx1ZSA9PSAiaW9zIikKLSAgICAgICAg
cmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOwotICAgIGlmICh2YWx1ZSA9PSAibWFjb3Mi
KQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzsKLSAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwotfQotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVz
dFByb3RvY29sVHlwZVBhcnNlci5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29s
SlNPTk9iamVjdFByaXZhdGUuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGlu
dGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKE5ldHdvcmtEb21haW4pCi0KLSsg
KHZvaWQpX3BhcnNlTmV0d29ya0Vycm9yOihUZXN0UHJvdG9jb2xOZXR3b3JrRXJyb3IgKiopb3V0
VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9u
IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoTmV0d29ya0RvbWFpbikKLQotKyAodm9pZClf
cGFyc2VOZXR3b3JrRXJyb3I6KFRlc3RQcm90b2NvbE5ldHdvcmtFcnJvciAqKilvdXRWYWx1ZSBm
cm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZ
UEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IFtbVGVz
dFByb3RvY29sTmV0d29ya0Vycm9yIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07Ci19
Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5t
bQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUu
aD4KLSNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5o
PgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0
UHJvdG9jb2xOZXR3b3JrRXJyb3IKLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoo
bm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZAotewotICAgIGlm
ICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AibWVzc2FnZSJdLCBA
Im1lc3NhZ2UiKTsKLSAgICBzZWxmLm1lc3NhZ2UgPSBwYXlsb2FkW0AibWVzc2FnZSJdOwotCi0g
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiY29kZSJd
LCBAImNvZGUiKTsKLSAgICBzZWxmLmNvZGUgPSBbcGF5bG9hZFtAImNvZGUiXSBpbnRlZ2VyVmFs
dWVdOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90
b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopb2JqZWN0Ci17Ci0gICAgaWYgKCEo
c2VsZiA9IFtzdXBlciBpbml0V2l0aEpTT05PYmplY3Q6W29iamVjdCB0b0pTT05PYmplY3RdLmdl
dCgpXSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlIGNvZGU6KGlu
dCljb2RlCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJldHVy
biBuaWw7Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKG1lc3Nh
Z2UsIEAibWVzc2FnZSIpOwotCi0gICAgc2VsZi5tZXNzYWdlID0gbWVzc2FnZTsKLSAgICBzZWxm
LmNvZGUgPSBjb2RlOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpc2V0TWVzc2Fn
ZTooTlNTdHJpbmcgKiltZXNzYWdlCi17Ci0gICAgW3N1cGVyIHNldFN0cmluZzptZXNzYWdlIGZv
cktleTpAIm1lc3NhZ2UiXTsKLX0KLQotLSAoTlNTdHJpbmcgKiltZXNzYWdlCi17Ci0gICAgcmV0
dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJtZXNzYWdlIl07Ci19Ci0KLS0gKHZvaWQpc2V0Q29k
ZTooaW50KWNvZGUKLXsKLSAgICBbc3VwZXIgc2V0SW50ZWdlcjpjb2RlIGZvcktleTpAImNvZGUi
XTsKLX0KLQotLSAoaW50KWNvZGUKLXsKLSAgICByZXR1cm4gW3N1cGVyIGludGVnZXJGb3JLZXk6
QCJjb2RlIl07Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVz
Lm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5q
c29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2NvbW1h
bmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZDI3YWI2NWI5MmEKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvY29t
bWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCkBAIC0w
LDAgKzEsOSBAQAorWworeworICAgICJkb21haW4iOiAiRG9tYWluIiwKKyAgICAiZGVidWdnYWJs
ZVR5cGVzIjogWyJwYWdlIl0sCisgICAgInRhcmdldFR5cGVzIjogWyJwYWdlIiwgIndvcmtlciJd
LAorICAgICJjb21tYW5kcyI6IFt7Im5hbWUiOiAiQ29tbWFuZCJ9XSwKKyAgICAiZXZlbnRzIjog
W3sibmFtZSI6ICJFdmVudCJ9XQorfQorXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2NvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRl
Lmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvY29t
bWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMC4uMTEyNjJlODg5ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvY29tbWFuZHMtd2l0aC1hc3luYy1h
dHRyaWJ1dGUuanNvbgpAQCAtMCwwICsxLDEwOSBAQAoreworICAgICJkb21haW4iOiAiRGF0YWJh
c2UiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkRhdGFi
YXNlSWQiLAorICAgICAgICAgICAgInR5cGUiOiAiaW50ZWdlciIsCisgICAgICAgICAgICAiZGVz
Y3JpcHRpb24iOiAiVW5pcXVlIGlkZW50aWZpZXIgb2YgRGF0YWJhc2Ugb2JqZWN0LiIKKyAgICAg
ICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlByaW1hcnlDb2xvcnMiLAorICAg
ICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICJlbnVtIjogWyJyZWQiLCAi
Z3JlZW4iLCAiYmx1ZSJdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6
ICJDb2xvckxpc3QiLAorICAgICAgICAgICAgInR5cGUiOiAiYXJyYXkiLAorICAgICAgICAgICAg
Iml0ZW1zIjogeyAiJHJlZiI6ICJQcmltYXJ5Q29sb3JzIiB9CisgICAgICAgIH0sCisgICAgICAg
IHsKKyAgICAgICAgICAgICJpZCI6ICJFcnJvciIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmpl
Y3QiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkRhdGFiYXNlIGVycm9yLiIsCisgICAg
ICAgICAgICAicHJvcGVydGllcyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm1lc3Nh
Z2UiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgbWVzc2FnZS4iIH0s
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2RlIiwgInR5cGUiOiAiaW50ZWdlciIsICJk
ZXNjcmlwdGlvbiI6ICJFcnJvciBjb2RlLiIgfQorICAgICAgICAgICAgXQorICAgICAgICB9Cisg
ICAgXSwKKyAgICAiY29tbWFuZHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjog
ImV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMiLAorICAgICAgICAgICAgInBhcmFt
ZXRlcnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYi
OiAiRGF0YWJhc2VJZCIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInF1ZXJ5IiwgInR5
cGUiOiAic3RyaW5nIiB9CisgICAgICAgICAgICBdLAorICAgICAgICAgICAgInJldHVybnMiOiBb
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5
IiwgIm9wdGlvbmFsIjogdHJ1ZSwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwKKyAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlv
bmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5
cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIsICJvcHRpb25h
bCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRhdGFiYXNlSWQiLCAiJHJl
ZiI6ICJEYXRhYmFzZUlkIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAic3FsRXJyb3IiLCAiJHJlZiI6ICJFcnJvciIsICJvcHRpb25hbCI6IHRydWUgfSwK
KyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNjcmVlbkNvbG9yIiwgIiRyZWYiOiAiUHJpbWFy
eUNvbG9ycyIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjog
ImFsdGVybmF0ZUNvbG9ycyIsICIkcmVmIjogIkNvbG9yTGlzdCIsICJvcHRpb25hbCI6IHRydWUg
fSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInByaW50Q29sb3IiLCAidHlwZSI6ICJzdHJp
bmciLCAiZW51bSI6IFsiY3lhbiIsICJtYWdlbnRhIiwgInllbGxvdyIsICJibGFjayJdLCAib3B0
aW9uYWwiOiB0cnVlIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAg
ICAgICAgICAgIm5hbWUiOiAiZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMiLAor
ICAgICAgICAgICAgImFzeW5jIjogdHJ1ZSwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwor
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNl
SWQiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJxdWVyeSIsICJ0eXBlIjogInN0cmlu
ZyIgfQorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJyZXR1cm5zIjogWworICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJvcHRpb25h
bCI6IHRydWUsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWUg
fSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJl
ciIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVl
cyIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiLCAib3B0aW9uYWwiOiB0cnVlIH0s
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJh
c2VJZCIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNx
bEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlDb2xvcnMiLCAi
b3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJhbHRlcm5hdGVD
b2xvcnMiLCAiJHJlZiI6ICJDb2xvckxpc3QiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0i
OiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSwgIm9wdGlvbmFsIjogdHJ1
ZSB9CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJu
YW1lIjogImV4ZWN1dGVTUUxTeW5jIiwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQi
IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJxdWVyeSIsICJ0eXBlIjogInN0cmluZyIg
fQorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJyZXR1cm5zIjogWworICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsg
InR5cGUiOiAic3RyaW5nIiB9IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIs
ICJ0eXBlIjogInN0cmluZyIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFt
cCIsICJ0eXBlIjogIm51bWJlciIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVl
cyIsICJ0eXBlIjogIm9iamVjdCIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxv
YWQiLCAidHlwZSI6ICJhbnkiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFz
ZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjog
InNxbEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJhbHRlcm5hdGVDb2xvcnMiLCAiJHJlZiI6ICJDb2xvckxpc3QiIH0sCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlDb2xvcnMiIH0sCisg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwg
ImVudW0iOiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSB9CisgICAgICAg
ICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImV4ZWN1
dGVTUUxBc3luYyIsCisgICAgICAgICAgICAiYXN5bmMiOiB0cnVlLAorICAgICAgICAgICAgInBh
cmFtZXRlcnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRy
ZWYiOiAiRGF0YWJhc2VJZCIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInF1ZXJ5Iiwg
InR5cGUiOiAic3RyaW5nIiB9CisgICAgICAgICAgICBdLAorICAgICAgICAgICAgInJldHVybnMi
OiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFy
cmF5IiwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwKKyAgICAgICAgICAgICAgICB7
ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiB9LAorICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiB9LAorICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiB9LAorICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIgfSwKKyAgICAgICAgICAgICAgICB7
ICJuYW1lIjogImRhdGFiYXNlSWQiLCAiJHJlZiI6ICJEYXRhYmFzZUlkIiB9LAorICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAic3FsRXJyb3IiLCAiJHJlZiI6ICJFcnJvciIgfSwKKyAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInNjcmVlbkNvbG9yIiwgIiRyZWYiOiAiUHJpbWFyeUNvbG9ycyIg
fSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImFsdGVybmF0ZUNvbG9ycyIsICIkcmVmIjog
IkNvbG9yTGlzdCIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInByaW50Q29sb3IiLCAi
dHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsiY3lhbiIsICJtYWdlbnRhIiwgInllbGxvdyIsICJi
bGFjayJdIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9jb21tYW5kcy13
aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbiBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNh
bGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMC4uMzYxZDU3ZDgyMGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxs
LXJldHVybi1wYXJhbWV0ZXJzLmpzb24KQEAgLTAsMCArMSw4NSBAQAoreworICAgICJkb21haW4i
OiAiRGF0YWJhc2UiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlk
IjogIkRhdGFiYXNlSWQiLAorICAgICAgICAgICAgInR5cGUiOiAiaW50ZWdlciIsCisgICAgICAg
ICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIGlkZW50aWZpZXIgb2YgRGF0YWJhc2Ugb2JqZWN0
LiIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlByaW1hcnlDb2xv
cnMiLAorICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICJlbnVtIjog
WyJyZWQiLCAiZ3JlZW4iLCAiYmx1ZSJdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAg
ICAgICJpZCI6ICJDb2xvckxpc3QiLAorICAgICAgICAgICAgInR5cGUiOiAiYXJyYXkiLAorICAg
ICAgICAgICAgIml0ZW1zIjogeyAiJHJlZiI6ICJQcmltYXJ5Q29sb3JzIiB9CisgICAgICAgIH0s
CisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJFcnJvciIsCisgICAgICAgICAgICAidHlw
ZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkRhdGFiYXNlIGVycm9y
LiIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogIm1lc3NhZ2UiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgbWVz
c2FnZS4iIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2RlIiwgInR5cGUiOiAiaW50
ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBjb2RlLiIgfQorICAgICAgICAgICAgXQorICAg
ICAgICB9CisgICAgXSwKKyAgICAiY29tbWFuZHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAg
ICJuYW1lIjogImV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMiLAorICAgICAgICAgICAgInBh
cmFtZXRlcnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0
eXBlIjogImFycmF5IiwgIm9wdGlvbmFsIjogdHJ1ZSwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJp
bmciIH0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3Ry
aW5nIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGlt
ZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjog
dHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFu
eSIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRhdGFi
YXNlSWQiLCAiJHJlZiI6ICJEYXRhYmFzZUlkIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAic3FsRXJyb3IiLCAiJHJlZiI6ICJFcnJvciIsICJvcHRpb25h
bCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNjcmVlbkNvbG9yIiwgIiRy
ZWYiOiAiUHJpbWFyeUNvbG9ycyIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogImFsdGVybmF0ZUNvbG9ycyIsICIkcmVmIjogIkNvbG9yTGlzdCIsICJvcHRp
b25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInByaW50Q29sb3IiLCAi
dHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsiY3lhbiIsICJtYWdlbnRhIiwgInllbGxvdyIsICJi
bGFjayJdLCAib3B0aW9uYWwiOiB0cnVlIH0KKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAi
cmV0dXJucyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5
cGUiOiAiYXJyYXkiLCAib3B0aW9uYWwiOiB0cnVlLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmlu
ZyIgfSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJp
bmciLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1l
c3RhbXAiLCAidHlwZSI6ICJudW1iZXIiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0
cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55
IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJh
c2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVycm9yIiwgIm9wdGlvbmFs
IjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2NyZWVuQ29sb3IiLCAiJHJl
ZiI6ICJQcmltYXJ5Q29sb3JzIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwgIiRyZWYiOiAiQ29sb3JMaXN0IiwgIm9wdGlv
bmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJpbnRDb2xvciIsICJ0
eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93IiwgImJs
YWNrIl0sICJvcHRpb25hbCI6IHRydWUgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAg
ICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMi
LAorICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJp
bmciIH0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3Ry
aW5nIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAi
bnVtYmVyIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAi
b2JqZWN0IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjog
ImFueSIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRhdGFiYXNlSWQiLCAiJHJlZiI6
ICJEYXRhYmFzZUlkIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic3FsRXJyb3IiLCAi
JHJlZiI6ICJFcnJvciIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNjcmVlbkNvbG9y
IiwgIiRyZWYiOiAiUHJpbWFyeUNvbG9ycyIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjog
ImFsdGVybmF0ZUNvbG9ycyIsICIkcmVmIjogIkNvbG9yTGlzdCIgfSwKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInByaW50Q29sb3IiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsiY3lh
biIsICJtYWdlbnRhIiwgInllbGxvdyIsICJibGFjayJdIH0KKyAgICAgICAgICAgIF0sCisgICAg
ICAgICAgICAicmV0dXJucyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5h
bWVzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAor
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciIH0sCisg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiIH0s
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiIH0s
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiB9LAor
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNl
SWQiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVy
cm9yIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6
ICJQcmltYXJ5Q29sb3JzIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYWx0ZXJuYXRl
Q29sb3JzIiwgIiRyZWYiOiAiQ29sb3JMaXN0IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJjeWFuIiwgIm1hZ2Vu
dGEiLCAieWVsbG93IiwgImJsYWNrIl0gfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAg
XQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24gYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxh
dGZvcm0uanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOWJlNDZh
MTdhZDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgpAQCAtMCww
ICsxLDI4IEBACit7CisgICAgImRvbWFpbiI6ICJOZXR3b3JrIiwKKyAgICAidHlwZXMiOiBbCisg
ICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJOZXR3b3JrRXJyb3IiLAorICAgICAgICAgICAg
InR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAgICJjb25kaXRpb24iOiAiUExBVEZPUk0oTUFD
KSIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogIm1lc3NhZ2UiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgbWVz
c2FnZS4iIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2RlIiwgInR5cGUiOiAiaW50
ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBjb2RlLiIgfQorICAgICAgICAgICAgXQorICAg
ICAgICB9CisgICAgXSwKKyAgICAiY29tbWFuZHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAg
ICJuYW1lIjogImxvYWRSZXNvdXJjZSIsCisgICAgICAgICAgICAiY29uZGl0aW9uIjogIlBMQVRG
T1JNKE1BQykiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2Ug
aW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBj
cm9zcyBvcmlnaW4gY2hlY2tzLiIKKyAgICAgICAgfQorICAgIF0sCisgICAgImV2ZW50cyI6IFsK
KyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAicmVzb3VyY2VMb2FkZWQiLAorICAgICAg
ICAgICAgImNvbmRpdGlvbiI6ICJQTEFURk9STShNQUMpIiwKKyAgICAgICAgICAgICJkZXNjcmlw
dGlvbiI6ICJBIHJlc291cmNlIHdhcyBsb2FkZWQuIgorICAgICAgICB9CisgICAgXQorfQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2Rv
bWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9kb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24KbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjFmZWIwYzlhMjdlCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2RvbWFpbi1k
ZWJ1Z2dhYmxlVHlwZXMuanNvbgpAQCAtMCwwICsxLDggQEAKK1sKK3sKKyAgICAiZG9tYWluIjog
IkRvbWFpbiIsCisgICAgImRlYnVnZ2FibGVUeXBlcyI6IFsid2ViLXBhZ2UiXSwKKyAgICAiY29t
bWFuZHMiOiBbeyJuYW1lIjogIkNvbW1hbmQifV0sCisgICAgImV2ZW50cyI6IFt7Im5hbWUiOiAi
RXZlbnQifV0KK30KK10KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9kb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdn
YWJsZVR5cGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9kb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNv
bgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZjYyZmIzOGJhNzgKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpz
b24KQEAgLTAsMCArMSw4IEBACitbCit7CisgICAgImRvbWFpbiI6ICJEb21haW4iLAorICAgICJk
ZWJ1Z2dhYmxlVHlwZXMiOiBbInBhZ2UiXSwKKyAgICAiY29tbWFuZHMiOiBbeyJuYW1lIjogIkNv
bW1hbmQiLCAidGFyZ2V0VHlwZXMiOiBbInBhZ2UiLCAid29ya2VyIl19XSwKKyAgICAiZXZlbnRz
IjogW3sibmFtZSI6ICJFdmVudCJ9XQorfQorXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2RvbWFpbi10YXJnZXRUeXBlcy5qc29uIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2RvbWFpbi10YXJn
ZXRUeXBlcy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42YTZl
NDBkNjBhZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9kb21haW4tdGFyZ2V0VHlwZXMuanNvbgpAQCAtMCwwICsxLDggQEAK
K1sKK3sKKyAgICAiZG9tYWluIjogIkRvbWFpbiIsCisgICAgInRhcmdldFR5cGVzIjogWyJwYWdl
Il0sCisgICAgImNvbW1hbmRzIjogW3sibmFtZSI6ICJDb21tYW5kIiwgInRhcmdldFR5cGVzIjog
WyJwYWdlIl19XSwKKyAgICAiZXZlbnRzIjogW3sibmFtZSI6ICJFdmVudCIsICJ0YXJnZXRUeXBl
cyI6IFsicGFnZSJdfV0KK30KK10KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVz
Lmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZG9t
YWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwLi45NGE4ZWNiMTc2ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9kb21haW5zLXdpdGgtdmFy
eWluZy1jb21tYW5kLXNpemVzLmpzb24KQEAgLTAsMCArMSw1NCBAQAorWworeworICAgICJkb21h
aW4iOiAiTmV0d29yazEiLAorICAgICJjb21tYW5kcyI6IFsKKyAgICAgICAgeworICAgICAgICAg
ICAgIm5hbWUiOiAibG9hZFJlc291cmNlMSIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAi
TG9hZHMgYSByZXNvdXJjZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0
ZWQgcGFnZSB3aXRob3V0IGNyb3NzIG9yaWdpbiBjaGVja3MuIgorICAgICAgICB9CisgICAgXQor
fSwKK3sKKyAgICAiZG9tYWluIjogIk5ldHdvcmsyIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAg
IHsKKyAgICAgICAgICAgICJpZCI6ICJMb2FkZXJJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJz
dHJpbmciLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBsb2FkZXIgaWRlbnRp
Zmllci4iCisgICAgICAgIH0KKyAgICBdCit9LAoreworICAgICJkb21haW4iOiAiTmV0d29yazMi
LAorICAgICJjb21tYW5kcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAibG9h
ZFJlc291cmNlMSIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9hZHMgYSByZXNvdXJj
ZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFnZSB3aXRob3V0
IGNyb3NzIG9yaWdpbiBjaGVja3MuIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAg
ICAibmFtZSI6ICJsb2FkUmVzb3VyY2UyIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJM
b2FkcyBhIHJlc291cmNlIGluIHRoZSBjb250ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGluc3BlY3Rl
ZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNoZWNrcy4iCisgICAgICAgIH0sCisgICAgICAg
IHsKKyAgICAgICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJjZTMiLAorICAgICAgICAgICAgImRl
c2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBv
biB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKKyAgICAg
ICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAibG9hZFJlc291cmNlNCIsCisg
ICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9hZHMgYSByZXNvdXJjZSBpbiB0aGUgY29udGV4
dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFnZSB3aXRob3V0IGNyb3NzIG9yaWdpbiBj
aGVja3MuIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJsb2Fk
UmVzb3VyY2U1IiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBhIHJlc291cmNl
IGluIHRoZSBjb250ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGluc3BlY3RlZCBwYWdlIHdpdGhvdXQg
Y3Jvc3Mgb3JpZ2luIGNoZWNrcy4iCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAg
ICJuYW1lIjogImxvYWRSZXNvdXJjZTYiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxv
YWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVk
IHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKKyAgICAgICAgfSwKKyAgICAgICAg
eworICAgICAgICAgICAgIm5hbWUiOiAibG9hZFJlc291cmNlNyIsCisgICAgICAgICAgICAiZGVz
Y3JpcHRpb24iOiAiTG9hZHMgYSByZXNvdXJjZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1lIG9u
IHRoZSBpbnNwZWN0ZWQgcGFnZSB3aXRob3V0IGNyb3NzIG9yaWdpbiBjaGVja3MuIgorICAgICAg
ICB9CisgICAgXQorfQorXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2VudW0tdmFsdWVzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZW51bS12YWx1ZXMuanNvbgpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uY2RhZDYxZGY3YzkKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZW51bS12YWx1
ZXMuanNvbgpAQCAtMCwwICsxLDM1IEBACit7ImRvbWFpbnMiOlsKK3sKKyAgICAiZG9tYWluIjog
IlR5cGVEb21haW4iLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlk
IjogIlR5cGVEb21haW5FbnVtIiwKKyAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAg
ICAgICAgICAiZW51bSI6IFsic2hhcmVkIiwgInJlZCIsICJncmVlbiIsICJibHVlIl0KKyAgICAg
ICAgfQorICAgIF0KK30sCit7CisgICAgImRvbWFpbiI6ICJDb21tYW5kRG9tYWluIiwKKyAgICAi
Y29tbWFuZHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImNvbW1hbmRXaXRo
RW51bVJldHVyblZhbHVlIiwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogW10sCisgICAgICAg
ICAgICAicmV0dXJucyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInJldHVyblZhbHVl
IiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbInNoYXJlZCIsICJjeWFuIiwgIm1hZ2VudGEi
LCAieWVsbG93Il0gfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXQorfSwKK3sKKyAg
ICAiZG9tYWluIjogIkV2ZW50RG9tYWluIiwKKyAgICAiZXZlbnRzIjogWworICAgICAgICB7Cisg
ICAgICAgICAgICAibmFtZSI6ICJldmVudFdpdGhFbnVtUGFyYW1ldGVyIiwKKyAgICAgICAgICAg
ICJwYXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGFyYW1ldGVyIiwg
InR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbInNoYXJlZCIsICJibGFjayIsICJ3aGl0ZSJdIH0K
KyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0KK30KK119CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXZlbnQtdGFyZ2V0VHlw
ZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9ldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRv
bWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwLi40ZGZlZDQxZWQyMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9ldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRv
bWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCkBAIC0wLDAgKzEsOCBAQAorWworeworICAgICJkb21h
aW4iOiAiRG9tYWluIiwKKyAgICAiZGVidWdnYWJsZVR5cGVzIjogWyJwYWdlIl0sCisgICAgImNv
bW1hbmRzIjogW3sibmFtZSI6ICJDb21tYW5kIn1dLAorICAgICJldmVudHMiOiBbeyJuYW1lIjog
IkV2ZW50IiwgInRhcmdldFR5cGVzIjogWyJwYWdlIiwgIndvcmtlciJdfV0KK30KK10KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9ldmVu
dHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5q
c29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jYWJiZjEwYjgzNgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9ldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KQEAgLTAsMCArMSw1
OSBAQAoreworICAgICJkb21haW4iOiAiRGF0YWJhc2UiLAorICAgICJ0eXBlcyI6IFsKKyAgICAg
ICAgeworICAgICAgICAgICAgImlkIjogIkRhdGFiYXNlSWQiLAorICAgICAgICAgICAgInR5cGUi
OiAic3RyaW5nIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgaWRlbnRpZmll
ciBvZiBEYXRhYmFzZSBvYmplY3QuIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAg
ICAiaWQiOiAiUHJpbWFyeUNvbG9ycyIsCisgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAor
ICAgICAgICAgICAgInZhbHVlcyI6IFsicmVkIiwgImdyZWVuIiwgImJsdWUiXQorICAgICAgICB9
LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiQ29sb3JMaXN0IiwKKyAgICAgICAgICAg
ICJ0eXBlIjogImFycmF5IiwKKyAgICAgICAgICAgICJpdGVtcyI6IHsgIiRyZWYiOiAiUHJpbWFy
eUNvbG9ycyIgfQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiRXJy
b3IiLAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAgICJkZXNjcmlw
dGlvbiI6ICJEYXRhYmFzZSBlcnJvci4iLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJtZXNzYWdlIiwgInR5cGUiOiAic3RyaW5nIiwgImRl
c2NyaXB0aW9uIjogIkVycm9yIG1lc3NhZ2UuIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAiY29kZSIsICJ0eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgY29kZS4i
IH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgImV2ZW50cyI6IFsKKyAg
ICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVy
cyIsCisgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAib3B0aW9uYWwiOiB0cnVlLCAiaXRl
bXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
bm90ZXMiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiLCAib3B0aW9uYWwi
OiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJv
YmplY3QiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJw
YXlsb2FkIiwgInR5cGUiOiAiYW55IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAic3FsRXJyb3IiLCAiJHJlZiI6ICJFcnJvciIsICJvcHRpb25hbCI6IHRy
dWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNjcmVlbkNvbG9yIiwgIiRyZWYiOiAi
UHJpbWFyeUNvbG9ycyIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJu
YW1lIjogImFsdGVybmF0ZUNvbG9ycyIsICIkcmVmIjogIkNvbG9yTGlzdCIsICJvcHRpb25hbCI6
IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInByaW50Q29sb3IiLCAidHlwZSI6
ICJzdHJpbmciLCAidmFsdWVzIjogWyJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93IiwgImJsYWNr
Il0sICJvcHRpb25hbCI6IHRydWUgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAg
ICB7CisgICAgICAgICAgICAibmFtZSI6ICJkaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMi
LAorICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJp
bmciIH0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3Ry
aW5nIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAi
bnVtYmVyIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAi
b2JqZWN0IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjog
ImFueSIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAi
RXJyb3IiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVm
IjogIlByaW1hcnlDb2xvcnMiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJhbHRlcm5h
dGVDb2xvcnMiLCAiJHJlZiI6ICJDb2xvckxpc3QiIH0sCisgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgInZhbHVlcyI6IFsiY3lhbiIsICJt
YWdlbnRhIiwgInllbGxvdyIsICJibGFjayJdIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQor
ICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRl
YnVnZ2FibGVUeXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21h
aW4tZGVidWdnYWJsZVR5cGUuanNvbi1yZXN1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAuLjgyY2RlOGRlNzg3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmQtdGFyZ2V0
VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1yZXN1bHQKQEAgLTAsMCAr
MSwxMDMwIEBACisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZC10YXJnZXRUeXBlLW1hdGNo
aW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKy8vIERvbWFpbgorSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRv
bWFpbigiRG9tYWluIiwgWyJwYWdlIiwgIndvcmtlciJdKTsKK0luc3BlY3RvckJhY2tlbmQucmVn
aXN0ZXJDb21tYW5kKCJEb21haW4uQ29tbWFuZCIsIG51bGwsIFtdLCBbXSk7CitJbnNwZWN0b3JC
YWNrZW5kLnJlZ2lzdGVyRXZlbnQoIkRvbWFpbi5FdmVudCIsIG51bGwsIFtdKTsKK0luc3BlY3Rv
ckJhY2tlbmQucmVnaXN0ZXJEb21haW5EaXNwYXRjaGVyID0gSW5zcGVjdG9yQmFja2VuZC5yZWdp
c3RlckRpc3BhdGNoZXIuYmluZChJbnNwZWN0b3JCYWNrZW5kLCAiRG9tYWluIik7CitJbnNwZWN0
b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJEb21haW4iLCBbInBhZ2UiXSk7CisjIyMgRW5kIEZp
bGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcworCisjIyMgQmVnaW4gRmlsZTogVGVzdEFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5q
c29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEg
b25jZQorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyNp
bmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNz
IEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldEJhY2tl
bmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1f
YmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9CisgICAgQmFja2VuZERp
c3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlz
cGF0Y2hlci5nZXQoKTsgfQorcHJpdmF0ZToKKyAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+
IG1fYmFja2VuZERpc3BhdGNoZXI7Cit9OworCisKK2NsYXNzIEFsdGVybmF0ZURvbWFpbkJhY2tl
bmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1Ymxp
YzoKKyAgICB2aXJ0dWFsIH5BbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQor
ICAgIHZpcnR1YWwgdm9pZCBDb21tYW5kKGxvbmcgY2FsbElkKSA9IDA7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQorIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1k
b21haW4tZGVidWdnYWJsZVR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVj
dHMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVj
dG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKKyNpZiBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK2NsYXNzIEFsdGVybmF0ZURvbWFpbkJhY2tlbmRE
aXNwYXRjaGVyOworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENI
RVJTKQorCitjbGFzcyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgeworcHVibGljOgor
ICAgIHZpcnR1YWwgdm9pZCBDb21tYW5kKEVycm9yU3RyaW5nJikgPSAwOworcHJvdGVjdGVkOgor
ICAgIHZpcnR1YWwgfkRvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOworfTsKKworY2xh
c3MgRG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFj
a2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8RG9tYWluQmFja2VuZERp
c3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIERvbWFpbkJhY2tlbmREaXNwYXRj
aGVySGFuZGxlciopOworICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0
cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIG92ZXJyaWRlOworcHJp
dmF0ZToKKyAgICB2b2lkIENvbW1hbmQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+JiYgcGFyYW1ldGVycyk7CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCitwdWJsaWM6CisgICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0
ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJu
YXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KK3ByaXZhdGU6CisgICAgQWx0
ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIqIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciB7IG51
bGxwdHIgfTsKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKK3ByaXZhdGU6CisgICAgRG9tYWluQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNo
ZXImLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICBEb21haW5CYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQgeyBudWxscHRyIH07Cit9OworCit9IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisK
KyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4t
ZGVidWdnYWJsZVR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0
ZXIuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRl
c3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK0RvbWFpbkJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlcjo6fkRvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQor
CitSZWY8RG9tYWluQmFja2VuZERpc3BhdGNoZXI+IERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpj
cmVhdGUoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBEb21haW5CYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERv
bWFpbkJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOworfQorCitE
b21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6RG9tYWluQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERp
c3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIqIGFnZW50KQorICAgIDogU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERp
c3BhdGNoZXIpCisgICAgLCBtX2FnZW50KGFnZW50KQoreworICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbigiRG9tYWluIl9zLCB0aGlzKTsKK30KKwor
dm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNv
bnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCit7CisgICAg
UmVmPERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKKworICAgIFJlZlB0
cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7CisgICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJh
bXMiX3MsIHBhcmFtZXRlcnMpOworCisgICAgaWYgKG1ldGhvZCA9PSAiQ29tbWFuZCIpIHsKKyAg
ICAgICAgQ29tbWFuZChyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xF
cnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRG9tYWluLiIgKyBtZXRo
b2QgKyAiJyB3YXMgbm90IGZvdW5kIik7Cit9CisKK3ZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNo
ZXI6OkNvbW1hbmQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCit7Cisj
aWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisgICAgaWYgKG1fYWx0
ZXJuYXRlRGlzcGF0Y2hlcikgeworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPkNvbW1h
bmQocmVxdWVzdElkKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUo
SU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworICAgIEVycm9yU3RyaW5nIGVycm9y
OworICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
CisgICAgbV9hZ2VudC0+Q29tbWFuZChlcnJvcik7CisKKyAgICBpZiAoIWVycm9yLmxlbmd0aCgp
KQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBX
VEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2VuZERpc3Bh
dGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9y
LCBXVEZNb3ZlKGVycm9yKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMg
RW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBU
ZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPHd0Zi9KU09O
VmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJ
bnNwZWN0b3IgeworCitjbGFzcyBGcm9udGVuZFJvdXRlcjsKKworY2xhc3MgRG9tYWluRnJvbnRl
bmREaXNwYXRjaGVyIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAg
ICBEb21haW5Gcm9udGVuZERpc3BhdGNoZXIoRnJvbnRlbmRSb3V0ZXImIGZyb250ZW5kUm91dGVy
KSA6IG1fZnJvbnRlbmRSb3V0ZXIoZnJvbnRlbmRSb3V0ZXIpIHsgfQorICAgIHZvaWQgRXZlbnQo
KTsKK3ByaXZhdGU6CisgICAgRnJvbnRlbmRSb3V0ZXImIG1fZnJvbnRlbmRSb3V0ZXI7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlz
cGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3Bw
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZC10YXJnZXRUeXBlLW1h
dGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0
RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25h
bWVzcGFjZSBJbnNwZWN0b3IgeworCit2b2lkIERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcjo6RXZl
bnQoKQoreworICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21h
aW4uRXZlbnQiX3MpOworCisgICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3Nh
Z2UtPnRvSlNPTlN0cmluZygpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMj
IyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Cisj
aW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKwor
CituYW1lc3BhY2UgUHJvdG9jb2wgeworCisKKworCisKKworCisKKworfSAvLyBuYW1lc3BhY2Ug
UHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbE9iamVjdHMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5j
cHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5cGUt
bWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRl
c3RQcm90b2NvbE9iamVjdHMuaCIKKworI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK25hbWVz
cGFjZSBQcm90b2NvbCB7CisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNw
cAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hp
bmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVy
bmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKwor
QHByb3RvY29sIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI7CisKK25hbWVzcGFjZSBJ
bnNwZWN0b3IgeworCisKK2NsYXNzIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hl
ciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciB7CisgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgT2JqQ0luc3BlY3RvckRvbWFp
bkJhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IGhh
bmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KKyAgICB2aXJ0dWFsIHZvaWQgQ29tbWFu
ZChsb25nIHJlcXVlc3RJZCkgb3ZlcnJpZGU7Citwcml2YXRlOgorICAgIFJldGFpblB0cjxpZDxU
ZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKK307CisKK30gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmRE
aXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0
Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdl
dFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0
ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgIlRlc3RQcm90
b2NvbEludGVybmFsLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgi
CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisK
K3ZvaWQgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcg
cmVxdWVzdElkKQoreworICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBz
ZWxlY3RvcihDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Cisg
ICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElk
LCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRG9tYWluLkNvbW1hbmQnIHdh
cyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGlu
Z0Vycm9ycygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWQgZXJyb3JDYWxsYmFj
ayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJl
cG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJy
b3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJv
cnMoKTsKKyAgICB9OworCisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKKyAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKSwgZmFsc2UpOworICAgIH07CisKKyAgICBbbV9kZWxlZ2F0ZSBDb21tYW5kV2l0aEVy
cm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNr
XTsKK30KKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbENvbmZpZ3VyYXRpb24uaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNv
bW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxXZWJJbnNw
ZWN0b3IvVGVzdFByb3RvY29sLmg+CisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZh
dWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QK
K0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4sIHNldHRlcj1zZXREb21haW5IYW5kbGVyOikg
aWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4gZG9tYWluSGFuZGxlcjsKK0Bwcm9w
ZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnRE
aXNwYXRjaGVyICpkb21haW5FdmVudERpc3BhdGNoZXI7CitAZW5kCisKKworIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbENvbmZpZ3VyYXRpb24ubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBj
b21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbi5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5o
IgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisjaW1wb3J0IDxK
YXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgorI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgorCit1
c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2Nv
bnRyb2xsZXI7CisgICAgaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4gX2RvbWFp
bkhhbmRsZXI7CisgICAgVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyICpf
ZG9tYWluRXZlbnREaXNwYXRjaGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250
cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAg
ICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5p
bDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVy
OworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbX2RvbWFp
bkhhbmRsZXIgcmVsZWFzZV07CisgICAgW19kb21haW5FdmVudERpc3BhdGNoZXIgcmVsZWFzZV07
CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistICh2b2lkKXNldERvbWFpbkhhbmRsZXI6KGlk
PFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+KWhhbmRsZXIKK3sKKyAgICBpZiAoaGFu
ZGxlciA9PSBfZG9tYWluSGFuZGxlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgW19kb21haW5I
YW5kbGVyIHJlbGVhc2VdOworICAgIF9kb21haW5IYW5kbGVyID0gW2hhbmRsZXIgcmV0YWluXTsK
KworICAgIGF1dG8gYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IG1ha2VVbmlxdWU8T2JqQ0luc3BlY3Rv
ckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyPihoYW5kbGVyKTsKKyAgICBhdXRvIGFsdGVybmF0ZUFn
ZW50ID0gbWFrZVVuaXF1ZTxBbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudDxEb21haW5CYWNrZW5k
RGlzcGF0Y2hlciwgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXI+PigiRG9tYWluIl9z
LCAqX2NvbnRyb2xsZXIsIFdURk1vdmUoYWx0ZXJuYXRlRGlzcGF0Y2hlcikpOworICAgIF9jb250
cm9sbGVyLT5hcHBlbmRFeHRyYUFnZW50KFdURk1vdmUoYWx0ZXJuYXRlQWdlbnQpKTsKK30KKwor
LSAoaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4pZG9tYWluSGFuZGxlcgorewor
ICAgIHJldHVybiBfZG9tYWluSGFuZGxlcjsKK30KKworLSAoVGVzdFByb3RvY29sRG9tYWluRG9t
YWluRXZlbnREaXNwYXRjaGVyICopZG9tYWluRXZlbnREaXNwYXRjaGVyCit7CisgICAgaWYgKCFf
ZG9tYWluRXZlbnREaXNwYXRjaGVyKQorICAgICAgICBfZG9tYWluRXZlbnREaXNwYXRjaGVyID0g
W1tUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgYWxsb2NdIGluaXRXaXRo
Q29udHJvbGxlcjpfY29udHJvbGxlcl07CisgICAgcmV0dXJuIF9kb21haW5FdmVudERpc3BhdGNo
ZXI7Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRp
b24ubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0K
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5cGUtbWF0
Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKwor
I2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDx3dGYvSlNP
TlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRp
b24gVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyCit7CisgICAgQXVnbWVu
dGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKK30KKworLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKilj
b250cm9sbGVyCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisg
ICAgICAgIHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250cm9s
bGVyID0gY29udHJvbGxlcjsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClFdmVudAor
eworICAgIGNvbnN0IEZyb250ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29udHJvbGxlci0+ZnJvbnRl
bmRSb3V0ZXIoKTsKKworICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3Ms
ICJEb21haW4uRXZlbnQiX3MpOworICAgIHJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRv
SlNPTlN0cmluZygpKTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
RXZlbnREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hp
bmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKKyNp
bXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KKworCisKKworCisK
KworCitAcHJvdG9jb2wgVGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlciA8TlNPYmplY3Q+
CitAb3B0aW9uYWwKKy0gKHZvaWQpQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5T
U3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikodm9p
ZCkpc3VjY2Vzc0NhbGxiYWNrOworQGVuZAorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgi
ZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNw
YXRjaGVyIDogTlNPYmplY3QKKy0gKHZvaWQpRXZlbnQ7CitAZW5kCisKKworI2ltcG9ydCA8V2Vi
SW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgorCisjIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJ
bnRlcm5hbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZC10YXJn
ZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgor
I2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKKyNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8d3Rm
L0pTT05WYWx1ZXMuaD4KKworQGludGVyZmFjZSBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVu
dERpc3BhdGNoZXIgKFByaXZhdGUpCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVy
OihJbnNwZWN0b3I6OkF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcjsK
K0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1
Z2dhYmxlVHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVBy
b3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordGVt
cGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgorT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9t
UHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7CisKK30gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisK
KyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9t
YWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisKKyNp
bXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5o
IgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4K
KwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisKKworCisKKyMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xUeXBlcy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmQt
dGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJ
bnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNp
bXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisjaW1w
b3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNp
bmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5
cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbi1yZXN1
bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbi1yZXN1bHQKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmFkOGU1MmNkMGFkCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVk
L2NvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24tcmVzdWx0CkBAIC0wLDAgKzEsMTc4
MiBAQAorIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcworLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRl
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworLy8gRGF0
YWJhc2UKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIkRhdGFiYXNlIiwgbnVsbCk7
CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiRGF0YWJhc2UuUHJpbWFyeUNvbG9ycyIs
IHtSZWQ6ICJyZWQiLCBHcmVlbjogImdyZWVuIiwgQmx1ZTogImJsdWUifSk7CitJbnNwZWN0b3JC
YWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiRGF0YWJhc2UuZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJl
dHVyblZhbHVlcyIsIG51bGwsIFt7Im5hbWUiOiAiZGF0YWJhc2VJZCIsICJ0eXBlIjogIm51bWJl
ciJ9LCB7Im5hbWUiOiAicXVlcnkiLCAidHlwZSI6ICJzdHJpbmcifV0sIFsiY29sdW1uTmFtZXMi
LCAibm90ZXMiLCAidGltZXN0YW1wIiwgInZhbHVlcyIsICJwYXlsb2FkIiwgImRhdGFiYXNlSWQi
LCAic3FsRXJyb3IiLCAic2NyZWVuQ29sb3IiLCAiYWx0ZXJuYXRlQ29sb3JzIiwgInByaW50Q29s
b3IiXSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiRGF0YWJhc2UuZXhlY3V0
ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMiLCBudWxsLCBbeyJuYW1lIjogImRhdGFiYXNl
SWQiLCAidHlwZSI6ICJudW1iZXIifSwgeyJuYW1lIjogInF1ZXJ5IiwgInR5cGUiOiAic3RyaW5n
In1dLCBbImNvbHVtbk5hbWVzIiwgIm5vdGVzIiwgInRpbWVzdGFtcCIsICJ2YWx1ZXMiLCAicGF5
bG9hZCIsICJkYXRhYmFzZUlkIiwgInNxbEVycm9yIiwgInNjcmVlbkNvbG9yIiwgImFsdGVybmF0
ZUNvbG9ycyIsICJwcmludENvbG9yIl0pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1h
bmQoIkRhdGFiYXNlLmV4ZWN1dGVTUUxTeW5jIiwgbnVsbCwgW3sibmFtZSI6ICJkYXRhYmFzZUlk
IiwgInR5cGUiOiAibnVtYmVyIn0sIHsibmFtZSI6ICJxdWVyeSIsICJ0eXBlIjogInN0cmluZyJ9
XSwgWyJjb2x1bW5OYW1lcyIsICJub3RlcyIsICJ0aW1lc3RhbXAiLCAidmFsdWVzIiwgInBheWxv
YWQiLCAiZGF0YWJhc2VJZCIsICJzcWxFcnJvciIsICJhbHRlcm5hdGVDb2xvcnMiLCAic2NyZWVu
Q29sb3IiLCAicHJpbnRDb2xvciJdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5k
KCJEYXRhYmFzZS5leGVjdXRlU1FMQXN5bmMiLCBudWxsLCBbeyJuYW1lIjogImRhdGFiYXNlSWQi
LCAidHlwZSI6ICJudW1iZXIifSwgeyJuYW1lIjogInF1ZXJ5IiwgInR5cGUiOiAic3RyaW5nIn1d
LCBbImNvbHVtbk5hbWVzIiwgIm5vdGVzIiwgInRpbWVzdGFtcCIsICJ2YWx1ZXMiLCAicGF5bG9h
ZCIsICJkYXRhYmFzZUlkIiwgInNxbEVycm9yIiwgInNjcmVlbkNvbG9yIiwgImFsdGVybmF0ZUNv
bG9ycyIsICJwcmludENvbG9yIl0pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRhdGFiYXNl
RGlzcGF0Y2hlciA9IEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEaXNwYXRjaGVyLmJpbmQoSW5z
cGVjdG9yQmFja2VuZCwgIkRhdGFiYXNlIik7CitJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9t
YWluKCJEYXRhYmFzZSIsIG51bGwpOworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29t
bWFuZHMuanMKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hl
cnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5
bmMtYXR0cmlidXRlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorCituYW1lc3BhY2UgSW5zcGVj
dG9yIHsKKworY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAg
IHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRp
c3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0K
KyAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVy
biBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Citwcml2YXRlOgorICAgIFJlZlB0cjxCYWNr
ZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKK307CisKKworY2xhc3MgQWx0ZXJu
YXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlz
cGF0Y2hlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+QWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlcigpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMU3luY09wdGlvbmFs
UmV0dXJuVmFsdWVzKGxvbmcgY2FsbElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5n
JiBpbl9xdWVyeSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMQXN5bmNPcHRpb25h
bFJldHVyblZhbHVlcyhsb25nIGNhbGxJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmlu
ZyYgaW5fcXVlcnkpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTFN5bmMobG9uZyBj
YWxsSWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxBc3luYyhsb25nIGNhbGxJZCwgaW50IGluX2RhdGFi
YXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCisjIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAor
CisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJy
b3JTdHJpbmc7CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
K2NsYXNzIEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI7CisjZW5kaWYgLy8gRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKK2NsYXNzIERhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKK3B1YmxpYzoKKyAgICAvLyBOYW1lZCBhZnRlciBwYXJh
bWV0ZXIgJ3ByaW50Q29sb3InIHdoaWxlIGdlbmVyYXRpbmcgY29tbWFuZC9ldmVudCBleGVjdXRl
U1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzLgorICAgIGVudW0gY2xhc3MgUHJpbnRDb2xvciB7
CisgICAgICAgIEN5YW4gPSAzLAorICAgICAgICBNYWdlbnRhID0gNCwKKyAgICAgICAgWWVsbG93
ID0gNSwKKyAgICAgICAgQmxhY2sgPSA2LAorICAgIH07IC8vIGVudW0gY2xhc3MgUHJpbnRDb2xv
cgorICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKEVy
cm9yU3RyaW5nJiwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnksIFJl
ZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiBvcHRfb3V0X2NvbHVtbk5hbWVzLCBPcHRpb25h
bDxTdHJpbmc+JiBvcHRfb3V0X25vdGVzLCBPcHRpb25hbDxkb3VibGU+JiBvcHRfb3V0X3RpbWVz
dGFtcCwgT3B0aW9uYWw8SlNPTjo6T2JqZWN0PiYgb3B0X291dF92YWx1ZXMsIE9wdGlvbmFsPEpT
T046OlZhbHVlPiYgb3B0X291dF9wYXlsb2FkLCBPcHRpb25hbDxpbnQ+JiBvcHRfb3V0X2RhdGFi
YXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiBvcHRf
b3V0X3NxbEVycm9yLCBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9y
cyogb3B0X291dF9zY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFi
YXNlOjpDb2xvckxpc3Q+JiBvcHRfb3V0X2FsdGVybmF0ZUNvbG9ycywgRGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3IqIG9wdF9vdXRfcHJpbnRDb2xvcikgPSAwOwor
ICAgIGNsYXNzIEV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2sgOiBw
dWJsaWMgQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZSB7CisgICAgcHVibGljOgorICAg
ICAgICBFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrKFJlZjxCYWNr
ZW5kRGlzcGF0Y2hlcj4mJiwgaW50IGlkKTsKKyAgICAgICAgdm9pZCBzZW5kU3VjY2VzcyhSZWZQ
dHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYmIGNvbHVtbk5hbWVzLCBPcHRpb25hbDxTdHJpbmc+
JiBub3RlcywgT3B0aW9uYWw8ZG91YmxlPiYgdGltZXN0YW1wLCBPcHRpb25hbDxKU09OOjpPYmpl
Y3Q+JiB2YWx1ZXMsIE9wdGlvbmFsPEpTT046OlZhbHVlPiYgcGF5bG9hZCwgT3B0aW9uYWw8aW50
PiYgZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJv
cj4mJiBzcWxFcnJvciwgT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlBy
aW1hcnlDb2xvcnM+IHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0
YWJhc2U6OkNvbG9yTGlzdD4mJiBhbHRlcm5hdGVDb2xvcnMsIE9wdGlvbmFsPERhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yPiBwcmludENvbG9yKTsKKyAgICB9Owor
ICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhpbnQg
aW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSwgUmVmPEV4ZWN1dGVTUUxBc3lu
Y09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2s+JiYgY2FsbGJhY2spID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgZXhlY3V0ZVNRTFN5bmMoRXJyb3JTdHJpbmcmLCBpbnQgaW5fZGF0YWJhc2VJZCwg
Y29uc3QgU3RyaW5nJiBpbl9xdWVyeSwgUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mIG91
dF9jb2x1bW5OYW1lcywgU3RyaW5nKiBvdXRfbm90ZXMsIGRvdWJsZSogb3V0X3RpbWVzdGFtcCwg
SlNPTjo6T2JqZWN0KiBvdXRfdmFsdWVzLCBKU09OOjpWYWx1ZSogb3V0X3BheWxvYWQsIGludCog
b3V0X2RhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJy
b3I+JiBvdXRfc3FsRXJyb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6
Q29sb3JMaXN0PiYgb3V0X2FsdGVybmF0ZUNvbG9ycywgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0
YWJhc2U6OlByaW1hcnlDb2xvcnMqIG91dF9zY3JlZW5Db2xvciwgRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3IqIG91dF9wcmludENvbG9yKSA9IDA7CisgICAgY2xh
c3MgRXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2sgOiBwdWJsaWMgQmFja2VuZERpc3BhdGNoZXI6OkNh
bGxiYWNrQmFzZSB7CisgICAgcHVibGljOgorICAgICAgICBFeGVjdXRlU1FMQXN5bmNDYWxsYmFj
ayhSZWY8QmFja2VuZERpc3BhdGNoZXI+JiYsIGludCBpZCk7CisgICAgICAgIHZvaWQgc2VuZFN1
Y2Nlc3MoUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mJiBjb2x1bW5OYW1lcywgY29uc3Qg
U3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgSlNPTjo6T2JqZWN0IHZhbHVlcywgSlNP
Tjo6VmFsdWUgcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEYXRhYmFzZTo6RXJyb3I+JiYgc3FsRXJyb3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpQcmltYXJ5Q29sb3JzIHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4mJiBhbHRlcm5hdGVDb2xvcnMsIERhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yIHByaW50Q29sb3IpOworICAgIH07Cisg
ICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxBc3luYyhpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3Qg
U3RyaW5nJiBpbl9xdWVyeSwgUmVmPEV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrPiYmIGNhbGxiYWNr
KSA9IDA7Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIoKTsKK307CisKK2NsYXNzIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIgZmluYWwg
OiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHN0
YXRpYyBSZWY8RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRj
aGVyJiwgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICB2b2lkIGRpc3Bh
dGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVj
dD4mJiBtZXNzYWdlKSBvdmVycmlkZTsKK3ByaXZhdGU6CisgICAgdm9pZCBleGVjdXRlU1FMU3lu
Y09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0
PiYmIHBhcmFtZXRlcnMpOworICAgIHZvaWQgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7
CisgICAgdm9pZCBleGVjdXRlU1FMU3luYyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9i
amVjdD4mJiBwYXJhbWV0ZXJzKTsKKyAgICB2b2lkIGV4ZWN1dGVTUUxBc3luYyhsb25nIHJlcXVl
c3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyNpZiBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK3B1YmxpYzoKKyAgICB2b2lkIHNldEFsdGVy
bmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJu
YXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRj
aGVyOyB9Citwcml2YXRlOgorICAgIEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIq
IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciB7IG51bGxwdHIgfTsKKyNlbmRpZiAvLyBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK3ByaXZhdGU6CisgICAgRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYsIERhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyKik7CisgICAgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdl
bnQgeyBudWxscHRyIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQg
RmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFj
a2VuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNv
bW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRl
IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisK
KyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyNpbmNsdWRlICJU
ZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCisjZW5kaWYgLy8gRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6fkRhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyKCkgeyB9CisKK1JlZjxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNw
YXRjaGVyLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCit7CisgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlz
cGF0Y2hlciwgYWdlbnQpKTsKK30KKworRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6RGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIs
IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKKyAgICA6IFN1cHBsZW1l
bnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQorICAgICwgbV9hZ2VudChh
Z2VudCkKK3sKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JE
b21haW4oIkRhdGFiYXNlIl9zLCB0aGlzKTsKK30KKwordm9pZCBEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJl
ZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKK3sKKyAgICBSZWY8RGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CisKKyAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJh
bWV0ZXJzOworICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsK
KworICAgIGlmIChtZXRob2QgPT0gImV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMi
KSB7CisgICAgICAgIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMocmVxdWVzdElk
LCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAo
bWV0aG9kID09ICJleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyIpIHsKKyAgICAg
ICAgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMocmVxdWVzdElkLCBXVEZNb3Zl
KHBhcmFtZXRlcnMpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAobWV0aG9kID09
ICJleGVjdXRlU1FMU3luYyIpIHsKKyAgICAgICAgZXhlY3V0ZVNRTFN5bmMocmVxdWVzdElkLCBX
VEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAobWV0
aG9kID09ICJleGVjdXRlU1FMQXN5bmMiKSB7CisgICAgICAgIGV4ZWN1dGVTUUxBc3luYyhyZXF1
ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0
Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRGF0YWJhc2UuIiArIG1ldGhvZCArICInIHdhcyBub3Qg
Zm91bmQiKTsKK30KKwordm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FM
U3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmIHBhcmFtZXRlcnMpCit7CisgICAgaW50IGluX2RhdGFiYXNlSWQgPSBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5nZXRJbnRlZ2VyKHBhcmFtZXRlcnMuZ2V0KCksICJkYXRhYmFzZUlkIl9zLCBu
dWxscHRyKTsKKyAgICBTdHJpbmcgaW5fcXVlcnkgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRT
dHJpbmcocGFyYW1ldGVycy5nZXQoKSwgInF1ZXJ5Il9zLCBudWxscHRyKTsKKyAgICBpZiAobV9i
YWNrZW5kRGlzcGF0Y2hlci0+aGFzUHJvdG9jb2xFcnJvcnMoKSkgeworICAgICAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZh
bGlkUGFyYW1zLCAiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICdEYXRhYmFzZS5leGVjdXRlU1FM
U3luY09wdGlvbmFsUmV0dXJuVmFsdWVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiX3MpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCisgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeworICAgICAgICBtX2FsdGVy
bmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMocmVxdWVz
dElkLCBpbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisj
ZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyAgICBF
cnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IG91dF9j
b2x1bW5OYW1lczsKKyAgICBPcHRpb25hbDxTdHJpbmc+IG91dF9ub3RlczsKKyAgICBPcHRpb25h
bDxkb3VibGU+IG91dF90aW1lc3RhbXA7CisgICAgT3B0aW9uYWw8SlNPTjo6T2JqZWN0PiBvdXRf
dmFsdWVzOworICAgIE9wdGlvbmFsPEpTT046OlZhbHVlPiBvdXRfcGF5bG9hZDsKKyAgICBPcHRp
b25hbDxpbnQ+IG91dF9kYXRhYmFzZUlkOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpEYXRhYmFzZTo6RXJyb3I+IG91dF9zcWxFcnJvcjsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyBvdXRfc2NyZWVuQ29sb3I7CisgICAgUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IG91dF9hbHRlcm5hdGVDb2xv
cnM7CisgICAgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3Igb3V0
X3ByaW50Q29sb3I7CisgICAgbV9hZ2VudC0+ZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZh
bHVlcyhlcnJvciwgaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnksIG91dF9jb2x1bW5OYW1lcywgb3V0
X25vdGVzLCBvdXRfdGltZXN0YW1wLCBvdXRfdmFsdWVzLCBvdXRfcGF5bG9hZCwgb3V0X2RhdGFi
YXNlSWQsIG91dF9zcWxFcnJvciwgb3V0X3NjcmVlbkNvbG9yLCBvdXRfYWx0ZXJuYXRlQ29sb3Jz
LCBvdXRfcHJpbnRDb2xvcik7CisKKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7CisgICAgICAg
IGlmIChvdXRfY29sdW1uTmFtZXMpCisgICAgICAgICAgICByZXN1bHQtPnNldEFycmF5KCJjb2x1
bW5OYW1lcyJfcywgb3V0X2NvbHVtbk5hbWVzKTsKKyAgICAgICAgaWYgKG91dF9ub3Rlcy5oYXNW
YWx1ZSgpKQorICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCAqb3V0X25v
dGVzKTsKKyAgICAgICAgaWYgKG91dF90aW1lc3RhbXAuaGFzVmFsdWUoKSkKKyAgICAgICAgICAg
IHJlc3VsdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICpvdXRfdGltZXN0YW1wKTsKKyAgICAg
ICAgaWYgKG91dF92YWx1ZXMuaGFzVmFsdWUoKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0T2Jq
ZWN0KCJ2YWx1ZXMiX3MsICpvdXRfdmFsdWVzKTsKKyAgICAgICAgaWYgKG91dF9wYXlsb2FkLmhh
c1ZhbHVlKCkpCisgICAgICAgICAgICByZXN1bHQtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCAqb3V0
X3BheWxvYWQpOworICAgICAgICBpZiAob3V0X2RhdGFiYXNlSWQuaGFzVmFsdWUoKSkKKyAgICAg
ICAgICAgIHJlc3VsdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgKm91dF9kYXRhYmFzZUlk
KTsKKyAgICAgICAgaWYgKG91dF9zcWxFcnJvcikKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0T2Jq
ZWN0KCJzcWxFcnJvciJfcywgb3V0X3NxbEVycm9yKTsKKyAgICAgICAgaWYgKG91dF9zY3JlZW5D
b2xvci5oYXNWYWx1ZSgpKQorICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInNjcmVlbkNv
bG9yIl9zLCAqb3V0X3NjcmVlbkNvbG9yKTsKKyAgICAgICAgaWYgKG91dF9hbHRlcm5hdGVDb2xv
cnMpCisgICAgICAgICAgICByZXN1bHQtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIG91
dF9hbHRlcm5hdGVDb2xvcnMpOworICAgICAgICBpZiAob3V0X3ByaW50Q29sb3IuaGFzVmFsdWUo
KSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCAqb3V0X3By
aW50Q29sb3IpOworICAgIH0KKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQorICAgICAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCks
IGZhbHNlKTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFBy
b3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9y
KSk7Cit9CisKK0RhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5
bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJl
dHVyblZhbHVlc0NhbGxiYWNrKFJlZjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBiYWNrZW5kRGlzcGF0
Y2hlciwgaW50IGlkKSA6IEJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UoV1RGTW92ZShi
YWNrZW5kRGlzcGF0Y2hlciksIGlkKSB7IH0KKwordm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjazo6
c2VuZFN1Y2Nlc3MoUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mJiBjb2x1bW5OYW1lcywg
T3B0aW9uYWw8U3RyaW5nPiYgbm90ZXMsIE9wdGlvbmFsPGRvdWJsZT4mIHRpbWVzdGFtcCwgT3B0
aW9uYWw8SlNPTjo6T2JqZWN0PiYgdmFsdWVzLCBPcHRpb25hbDxKU09OOjpWYWx1ZT4mIHBheWxv
YWQsIE9wdGlvbmFsPGludD4mIGRhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpEYXRhYmFzZTo6RXJyb3I+JiYgc3FsRXJyb3IsIE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiBzY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiYgYWx0ZXJuYXRlQ29sb3JzLCBPcHRp
b25hbDxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvcj4gcHJpbnRD
b2xvcikKK3sKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVj
dDo6Y3JlYXRlKCk7CisgICAgaWYgKGNvbHVtbk5hbWVzKQorICAgICAgICBqc29uTWVzc2FnZS0+
c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBjb2x1bW5OYW1lcyk7CisgICAgaWYgKG5vdGVzLmhh
c1ZhbHVlKCkpCisgICAgICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm5vdGVzIl9zLCAqbm90
ZXMpOworICAgIGlmICh0aW1lc3RhbXAuaGFzVmFsdWUoKSkKKyAgICAgICAganNvbk1lc3NhZ2Ut
PnNldERvdWJsZSgidGltZXN0YW1wIl9zLCAqdGltZXN0YW1wKTsKKyAgICBpZiAodmFsdWVzLmhh
c1ZhbHVlKCkpCisgICAgICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoInZhbHVlcyJfcywgKnZh
bHVlcyk7CisgICAgaWYgKHBheWxvYWQuaGFzVmFsdWUoKSkKKyAgICAgICAganNvbk1lc3NhZ2Ut
PnNldFZhbHVlKCJwYXlsb2FkIl9zLCAqcGF5bG9hZCk7CisgICAgaWYgKGRhdGFiYXNlSWQuaGFz
VmFsdWUoKSkKKyAgICAgICAganNvbk1lc3NhZ2UtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3Ms
ICpkYXRhYmFzZUlkKTsKKyAgICBpZiAoc3FsRXJyb3IpCisgICAgICAgIGpzb25NZXNzYWdlLT5z
ZXRPYmplY3QoInNxbEVycm9yIl9zLCBzcWxFcnJvcik7CisgICAgaWYgKHNjcmVlbkNvbG9yLmhh
c1ZhbHVlKCkpCisgICAgICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9z
LCAqc2NyZWVuQ29sb3IpOworICAgIGlmIChhbHRlcm5hdGVDb2xvcnMpCisgICAgICAgIGpzb25N
ZXNzYWdlLT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCBhbHRlcm5hdGVDb2xvcnMpOwor
ICAgIGlmIChwcmludENvbG9yLmhhc1ZhbHVlKCkpCisgICAgICAgIGpzb25NZXNzYWdlLT5zZXRT
dHJpbmcoInByaW50Q29sb3IiX3MsICpwcmludENvbG9yKTsKKyAgICBDYWxsYmFja0Jhc2U6OnNl
bmRTdWNjZXNzKFdURk1vdmUoanNvbk1lc3NhZ2UpKTsKK30KKwordm9pZCBEYXRhYmFzZUJhY2tl
bmREaXNwYXRjaGVyOjpleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHJl
cXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKQoreworICAgIGludCBp
bl9kYXRhYmFzZUlkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0SW50ZWdlcihwYXJhbWV0ZXJz
LmdldCgpLCAiZGF0YWJhc2VJZCJfcywgbnVsbHB0cik7CisgICAgU3RyaW5nIGluX3F1ZXJ5ID0g
bV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksICJxdWVyeSJf
cywgbnVsbHB0cik7CisgICAgaWYgKG1fYmFja2VuZERpc3BhdGNoZXItPmhhc1Byb3RvY29sRXJy
b3JzKCkpIHsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJv
cihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgIlNvbWUgYXJndW1lbnRzIG9mIG1l
dGhvZCAnRGF0YWJhc2UuZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMnIGNhbid0
IGJlIHByb2Nlc3NlZCJfcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNpZiBFTkFCTEUo
SU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyAgICBpZiAobV9hbHRlcm5hdGVEaXNw
YXRjaGVyKSB7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZVNRTEFzeW5j
T3B0aW9uYWxSZXR1cm5WYWx1ZXMocmVxdWVzdElkLCBpbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCisKKyAgICBSZWY8RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXI6OkV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2s+IGNhbGxi
YWNrID0gYWRvcHRSZWYoKm5ldyBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhl
Y3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjayhtX2JhY2tlbmREaXNwYXRj
aGVyLmNvcHlSZWYoKSwgcmVxdWVzdElkKSk7CisgICAgbV9hZ2VudC0+ZXhlY3V0ZVNRTEFzeW5j
T3B0aW9uYWxSZXR1cm5WYWx1ZXMoaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnksIGNhbGxiYWNrLmNv
cHlSZWYoKSk7CisKK30KKwordm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRl
U1FMU3luYyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJz
KQoreworICAgIGludCBpbl9kYXRhYmFzZUlkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0SW50
ZWdlcihwYXJhbWV0ZXJzLmdldCgpLCAiZGF0YWJhc2VJZCJfcywgbnVsbHB0cik7CisgICAgU3Ry
aW5nIGluX3F1ZXJ5ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMu
Z2V0KCksICJxdWVyeSJfcywgbnVsbHB0cik7CisgICAgaWYgKG1fYmFja2VuZERpc3BhdGNoZXIt
Pmhhc1Byb3RvY29sRXJyb3JzKCkpIHsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVw
b3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgIlNvbWUg
YXJndW1lbnRzIG9mIG1ldGhvZCAnRGF0YWJhc2UuZXhlY3V0ZVNRTFN5bmMnIGNhbid0IGJlIHBy
b2Nlc3NlZCJfcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNpZiBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVy
KSB7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZVNRTFN5bmMocmVxdWVz
dElkLCBpbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisj
ZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyAgICBF
cnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IG91dF9j
b2x1bW5OYW1lczsKKyAgICBTdHJpbmcgb3V0X25vdGVzOworICAgIGRvdWJsZSBvdXRfdGltZXN0
YW1wOworICAgIEpTT046Ok9iamVjdCBvdXRfdmFsdWVzOworICAgIEpTT046OlZhbHVlIG91dF9w
YXlsb2FkOworICAgIGludCBvdXRfZGF0YWJhc2VJZDsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBvdXRfc3FsRXJyb3I7CisgICAgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IG91dF9hbHRlcm5hdGVDb2xvcnM7
CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgb3V0X3Nj
cmVlbkNvbG9yOworICAgIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENv
bG9yIG91dF9wcmludENvbG9yOworICAgIG1fYWdlbnQtPmV4ZWN1dGVTUUxTeW5jKGVycm9yLCBp
bl9kYXRhYmFzZUlkLCBpbl9xdWVyeSwgb3V0X2NvbHVtbk5hbWVzLCAmb3V0X25vdGVzLCAmb3V0
X3RpbWVzdGFtcCwgb3V0X3ZhbHVlcywgJm91dF9wYXlsb2FkLCAmb3V0X2RhdGFiYXNlSWQsIG91
dF9zcWxFcnJvciwgb3V0X2FsdGVybmF0ZUNvbG9ycywgJm91dF9zY3JlZW5Db2xvciwgJm91dF9w
cmludENvbG9yKTsKKworICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIHsKKyAgICAgICAgcmVzdWx0
LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIG91dF9jb2x1bW5OYW1lcyk7CisgICAgICAgIHJl
c3VsdC0+c2V0U3RyaW5nKCJub3RlcyJfcywgb3V0X25vdGVzKTsKKyAgICAgICAgcmVzdWx0LT5z
ZXREb3VibGUoInRpbWVzdGFtcCJfcywgb3V0X3RpbWVzdGFtcCk7CisgICAgICAgIHJlc3VsdC0+
c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIG91dF92YWx1ZXMpOworICAgICAgICByZXN1bHQtPnNldFZh
bHVlKCJwYXlsb2FkIl9zLCBvdXRfcGF5bG9hZCk7CisgICAgICAgIHJlc3VsdC0+c2V0SW50ZWdl
cigiZGF0YWJhc2VJZCJfcywgb3V0X2RhdGFiYXNlSWQpOworICAgICAgICByZXN1bHQtPnNldE9i
amVjdCgic3FsRXJyb3IiX3MsIG91dF9zcWxFcnJvcik7CisgICAgICAgIHJlc3VsdC0+c2V0QXJy
YXkoImFsdGVybmF0ZUNvbG9ycyJfcywgb3V0X2FsdGVybmF0ZUNvbG9ycyk7CisgICAgICAgIHJl
c3VsdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVz
dEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKG91dF9zY3JlZW5Db2xvcikpOworICAgICAg
ICByZXN1bHQtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6
VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKG91dF9wcmludENvbG9yKSk7CisgICAg
fQorICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOworICAgIGVs
c2UKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNr
ZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKK30KKworRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrOjpFeGVj
dXRlU1FMQXN5bmNDYWxsYmFjayhSZWY8QmFja2VuZERpc3BhdGNoZXI+JiYgYmFja2VuZERpc3Bh
dGNoZXIsIGludCBpZCkgOiBCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlKFdURk1vdmUo
YmFja2VuZERpc3BhdGNoZXIpLCBpZCkgeyB9CisKK3ZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrOjpzZW5kU3VjY2VzcyhSZWZQdHI8
SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYmIGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG5vdGVz
LCBkb3VibGUgdGltZXN0YW1wLCBKU09OOjpPYmplY3QgdmFsdWVzLCBKU09OOjpWYWx1ZSBwYXls
b2FkLCBpbnQgZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNl
OjpFcnJvcj4mJiBzcWxFcnJvciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1h
cnlDb2xvcnMgc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFz
ZTo6Q29sb3JMaXN0PiYmIGFsdGVybmF0ZUNvbG9ycywgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXI6OlByaW50Q29sb3IgcHJpbnRDb2xvcikKK3sKKyAgICBSZWY8SlNPTjo6T2JqZWN0
PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAganNvbk1lc3NhZ2Ut
PnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgY29sdW1uTmFtZXMpOworICAgIGpzb25NZXNzYWdl
LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBub3Rlcyk7CisgICAganNvbk1lc3NhZ2UtPnNldERvdWJs
ZSgidGltZXN0YW1wIl9zLCB0aW1lc3RhbXApOworICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3Qo
InZhbHVlcyJfcywgdmFsdWVzKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0VmFsdWUoInBheWxvYWQi
X3MsIHBheWxvYWQpOworICAgIGpzb25NZXNzYWdlLT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9z
LCBkYXRhYmFzZUlkKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywg
c3FsRXJyb3IpOworICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoc2Ny
ZWVuQ29sb3IpKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJf
cywgYWx0ZXJuYXRlQ29sb3JzKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJwcmludENv
bG9yIl9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50
VmFsdWUocHJpbnRDb2xvcikpOworICAgIENhbGxiYWNrQmFzZTo6c2VuZFN1Y2Nlc3MoV1RGTW92
ZShqc29uTWVzc2FnZSkpOworfQorCit2b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4
ZWN1dGVTUUxBc3luYyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJh
bWV0ZXJzKQoreworICAgIGludCBpbl9kYXRhYmFzZUlkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+
Z2V0SW50ZWdlcihwYXJhbWV0ZXJzLmdldCgpLCAiZGF0YWJhc2VJZCJfcywgbnVsbHB0cik7Cisg
ICAgU3RyaW5nIGluX3F1ZXJ5ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFt
ZXRlcnMuZ2V0KCksICJxdWVyeSJfcywgbnVsbHB0cik7CisgICAgaWYgKG1fYmFja2VuZERpc3Bh
dGNoZXItPmhhc1Byb3RvY29sRXJyb3JzKCkpIHsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywg
IlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnRGF0YWJhc2UuZXhlY3V0ZVNRTEFzeW5jJyBjYW4n
dCBiZSBwcm9jZXNzZWQiX3MpOworICAgICAgICByZXR1cm47CisgICAgfQorCisjaWYgRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisgICAgaWYgKG1fYWx0ZXJuYXRlRGlz
cGF0Y2hlcikgeworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVTUUxBc3lu
YyhyZXF1ZXN0SWQsIGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5KTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
KworICAgIFJlZjxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFz
eW5jQ2FsbGJhY2s+IGNhbGxiYWNrID0gYWRvcHRSZWYoKm5ldyBEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2sobV9iYWNrZW5kRGlzcGF0Y2hl
ci5jb3B5UmVmKCksIHJlcXVlc3RJZCkpOworICAgIG1fYWdlbnQtPmV4ZWN1dGVTUUxBc3luYyhp
bl9kYXRhYmFzZUlkLCBpbl9xdWVyeSwgY2FsbGJhY2suY29weVJlZigpKTsKKworfQorCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNo
ZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmli
dXRlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8
d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEZyb250ZW5kUm91dGVyOworCit9IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAor
CisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMu
Y3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgor
I2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisK
KworbmFtZXNwYWNlIFByb3RvY29sIHsKKworCisKKy8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgor
bmFtZXNwYWNlIERhdGFiYXNlIHsKK2NsYXNzIEVycm9yOworZW51bSBjbGFzcyBQcmltYXJ5Q29s
b3JzOworfSAvLyBEYXRhYmFzZQorLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgorCisK
Ky8vIFR5cGVkZWZzLgorbmFtZXNwYWNlIERhdGFiYXNlIHsKKy8qIFVuaXF1ZSBpZGVudGlmaWVy
IG9mIERhdGFiYXNlIG9iamVjdC4gKi8KK3R5cGVkZWYgaW50IERhdGFiYXNlSWQ7Cit0eXBlZGVm
IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xv
cnM+IENvbG9yTGlzdDsKK30gLy8gRGF0YWJhc2UKKy8vIEVuZCBvZiB0eXBlZGVmcy4KKworbmFt
ZXNwYWNlIFRlc3RIZWxwZXJzIHsKKworU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBj
b2RlKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVl
KFQgZW51bVZhbHVlKQoreworICAgIHJldHVybiBnZXRFbnVtQ29uc3RhbnRWYWx1ZShzdGF0aWNf
Y2FzdDxpbnQ+KGVudW1WYWx1ZSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwor
CituYW1lc3BhY2UgRGF0YWJhc2UgeworLyogICovCitlbnVtIGNsYXNzIFByaW1hcnlDb2xvcnMg
eworICAgIFJlZCA9IDAsCisgICAgR3JlZW4gPSAxLAorICAgIEJsdWUgPSAyLAorfTsgLy8gZW51
bSBjbGFzcyBQcmltYXJ5Q29sb3JzCisvKiBEYXRhYmFzZSBlcnJvci4gKi8KK2NsYXNzIEVycm9y
IDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgeworcHVibGljOgorICAgIGVudW0geworICAgICAg
ICBOb0ZpZWxkc1NldCA9IDAsCisgICAgICAgIE1lc3NhZ2VTZXQgPSAxIDw8IDAsCisgICAgICAg
IENvZGVTZXQgPSAxIDw8IDEsCisgICAgICAgIEFsbEZpZWxkc1NldCA9IChNZXNzYWdlU2V0IHwg
Q29kZVNldCkKKyAgICB9OworCisgICAgdGVtcGxhdGU8aW50IFNUQVRFPgorICAgIGNsYXNzIEJ1
aWxkZXIgeworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVz
dWx0OworCisgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4m
IGNhc3RTdGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRf
Y2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAg
IEJ1aWxkZXIoUmVmPC8qRXJyb3IqL0pTT046Ok9iamVjdD4mJiBvYmplY3QpCisgICAgICAgICAg
ICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25f
aW5pdF9zdGF0ZSk7CisgICAgICAgIH0KKyAgICAgICAgZnJpZW5kIGNsYXNzIEVycm9yOworICAg
IHB1YmxpYzoKKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTWVzc2FnZVNldD4mIHNldE1lc3Nh
Z2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoIShTVEFURSAmIE1lc3NhZ2VTZXQpLCBwcm9wZXJ0eV9tZXNzYWdlX2FscmVhZHlfc2V0
KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1lc3NhZ2UiX3MsIHZhbHVlKTsK
KyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TWVzc2FnZVNldD4oKTsKKyAgICAgICAgfQor
CisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2RlU2V0PiYgc2V0Q29kZShpbnQgdmFsdWUpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2RlU2V0KSwg
cHJvcGVydHlfY29kZV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50
ZWdlcigiY29kZSJfcywgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb2Rl
U2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgUmVmPEVycm9yPiByZWxlYXNlKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCBy
ZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihF
cnJvcikgPT0gc2l6ZW9mKEpTT046Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsKKworICAgICAgICAg
ICAgUmVmPEpTT046Ok9iamVjdD4ganNvblJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxs
KCk7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8
UmVmPEVycm9yPio+KCZqc29uUmVzdWx0KSk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgICAgICB9CisgICAgfTsKKworICAgIC8qCisgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9y
OgorICAgICAqIFJlZjxFcnJvcj4gcmVzdWx0ID0gRXJyb3I6OmNyZWF0ZSgpCisgICAgICogICAg
IC5zZXRNZXNzYWdlKC4uLikKKyAgICAgKiAgICAgLnNldENvZGUoLi4uKQorICAgICAqICAgICAu
cmVsZWFzZSgpOworICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVh
dGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9i
amVjdDo6Y3JlYXRlKCkpOworICAgIH0KK307CisKK30gLy8gRGF0YWJhc2UKKworCisKK25hbWVz
cGFjZSBUZXN0SGVscGVycyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFByb3RvY29sRW51bVR5cGU+
CitPcHRpb25hbDxQcm90b2NvbEVudW1UeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmcoY29u
c3QgU3RyaW5nJik7CisKKy8vIEVudW1zIGluIHRoZSAnRGF0YWJhc2UnIERvbWFpbgordGVtcGxh
dGU8PgorT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xv
cnM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFz
ZTo6UHJpbWFyeUNvbG9ycz4oY29uc3QgU3RyaW5nJik7CisKK30gLy8gbmFtZXNwYWNlIFRlc3RI
ZWxwZXJzCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERl
ZmF1bHRIYXNoOworCisvLyBIYXNoIGRlY2xhcmF0aW9ucyBpbiB0aGUgJ0RhdGFiYXNlJyBEb21h
aW4KK3RlbXBsYXRlPD4KK3N0cnVjdCBEZWZhdWx0SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpE
YXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4geworICAgIHR5cGVkZWYgSW50SGFzaDxJbnNwZWN0b3I6
OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gSGFzaDsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdURgorIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorCisjaW5jbHVkZSA8d3RmL09wdGlvbmFs
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9y
IHsKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKKwor
c3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFsdWVzW10gPSB7CisgICAg
InJlZCIsCisgICAgImdyZWVuIiwKKyAgICAiYmx1ZSIsCisgICAgImN5YW4iLAorICAgICJtYWdl
bnRhIiwKKyAgICAieWVsbG93IiwKKyAgICAiYmxhY2siLAorfTsKKworU3RyaW5nIGdldEVudW1D
b25zdGFudFZhbHVlKGludCBjb2RlKSB7CisgICAgcmV0dXJuIGVudW1fY29uc3RhbnRfdmFsdWVz
W2NvZGVdOworfQorCisvLyBFbnVtcyBpbiB0aGUgJ0RhdGFiYXNlJyBEb21haW4KK3RlbXBsYXRl
PD4KK09wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3Jz
PiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6
OlByaW1hcnlDb2xvcnM+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCit7CisgICAgc3Rh
dGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0geworICAgICAgICAoc2l6ZV90KUlu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzOjpSZWQsCisgICAgICAg
IChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM6Okdy
ZWVuLAorICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmlt
YXJ5Q29sb3JzOjpCbHVlLAorICAgIH07CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAzOyAr
K2kpCisgICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tj
b25zdGFudFZhbHVlc1tpXV0pCisgICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzKWNvbnN0YW50VmFsdWVzW2ldOworCisgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKK30KKworCit9IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycworCisK
KworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisK
KyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8d3Rm
L1JldGFpblB0ci5oPgorCitAcHJvdG9jb2wgVGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5k
bGVyOworCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCitjbGFzcyBPYmpDSW5zcGVjdG9yRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVyIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoK
KyAgICBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9j
b2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhs
b25nIHJlcXVlc3RJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkp
IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVy
blZhbHVlcyhsb25nIHJlcXVlc3RJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYg
aW5fcXVlcnkpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMU3luYyhsb25n
IHJlcXVlc3RJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpIG92
ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMQXN5bmMobG9uZyByZXF1ZXN0SWQs
IGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KSBvdmVycmlkZTsKK3By
aXZhdGU6CisgICAgUmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxl
cj4+IG1fZGVsZWdhdGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIK
KyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSAi
VGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorCituYW1lc3BhY2UgSW5zcGVj
dG9yIHsKKwordm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhl
Y3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHJlcXVlc3RJZCwgaW50IGluX2Rh
dGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpCit7CisgICAgaWYgKCFbbV9kZWxlZ2F0
ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1
cm5WYWx1ZXNXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6ZGF0YWJhc2VJZDpxdWVy
eTopXSkgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9y
KHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RhdGFiYXNl
LmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMnIHdhcyBub3QgZm91bmQiX3MpOwor
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVy
cm9yKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3Io
cmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICB9OworCisg
ICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKipjb2x1bW5O
YW1lcywgTlNTdHJpbmcgKipub3RlcywgZG91YmxlICp0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNP
Tk9iamVjdCAqKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqcGF5bG9hZCwgaW50ICpk
YXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqc3FsRXJyb3IsIFRlc3RQcm90
b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0cmlu
Zz4qLyAqKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3lu
Y09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvciAqcHJpbnRDb2xvcikgeworICAgICAgICBS
ZWY8SlNPTjo6T2JqZWN0PiByZXN1bHRPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwor
ICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoY29sdW1u
TmFtZXMsIEAiY29sdW1uTmFtZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURf
T1BUSU9OQUxfUEFSQU1FVEVSKG5vdGVzLCBAIm5vdGVzIik7CisgICAgICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUih2YWx1ZXMsIEAidmFsdWVzIik7CisgICAg
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihwYXlsb2FkLCBA
InBheWxvYWQiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFS
QU1FVEVSKHNxbEVycm9yLCBAInNxbEVycm9yIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihhbHRlcm5hdGVDb2xvcnMsIEAiYWx0ZXJuYXRlQ29s
b3JzIik7CisgICAgICAgIGlmIChjb2x1bW5OYW1lcykKKyAgICAgICAgICAgIHJlc3VsdE9iamVj
dC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB0b0pTT05TdHJpbmdBcnJheSgqY29sdW1uTmFt
ZXMpKTsKKyAgICAgICAgaWYgKG5vdGVzKQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRT
dHJpbmcoIm5vdGVzIl9zLCAqbm90ZXMpOworICAgICAgICBpZiAodGltZXN0YW1wKQorICAgICAg
ICAgICAgcmVzdWx0T2JqZWN0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgKnRpbWVzdGFtcCk7
CisgICAgICAgIGlmICh2YWx1ZXMpCisgICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVj
dCgidmFsdWVzIl9zLCBbKnZhbHVlcyB0b0pTT05PYmplY3RdKTsKKyAgICAgICAgaWYgKHBheWxv
YWQpCisgICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBbKnBh
eWxvYWQgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIGlmIChkYXRhYmFzZUlkKQorICAgICAgICAg
ICAgcmVzdWx0T2JqZWN0LT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCAqZGF0YWJhc2VJZCk7
CisgICAgICAgIGlmIChzcWxFcnJvcikKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2Jq
ZWN0KCJzcWxFcnJvciJfcywgWypzcWxFcnJvciB0b0pTT05PYmplY3RdKTsKKyAgICAgICAgaWYg
KHNjcmVlbkNvbG9yKQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInNjcmVl
bkNvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKCpzY3JlZW5Db2xvcikpOworICAgICAgICBpZiAo
YWx0ZXJuYXRlQ29sb3JzKQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheSgiYWx0
ZXJuYXRlQ29sb3JzIl9zLCB0b0pTT05TdHJpbmdBcnJheSgqYWx0ZXJuYXRlQ29sb3JzKSk7Cisg
ICAgICAgIGlmIChwcmludENvbG9yKQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJp
bmcoInByaW50Q29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcoKnByaW50Q29sb3IpKTsKKyAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShy
ZXN1bHRPYmplY3QpLCBmYWxzZSk7CisgICAgfTsKKworICAgIGludCBvX2luX2RhdGFiYXNlSWQg
PSBpbl9kYXRhYmFzZUlkOworICAgIE5TU3RyaW5nICpvX2luX3F1ZXJ5ID0gaW5fcXVlcnk7CisK
KyAgICBbbV9kZWxlZ2F0ZSBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzV2l0aEVy
cm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNr
IGRhdGFiYXNlSWQ6b19pbl9kYXRhYmFzZUlkIHF1ZXJ5Om9faW5fcXVlcnldOworfQorCit2b2lk
IE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMQXN5bmNP
cHRpb25hbFJldHVyblZhbHVlcyhsb25nIHJlcXVlc3RJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNv
bnN0IFN0cmluZyYgaW5fcXVlcnkpCit7CisgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1Rv
U2VsZWN0b3I6QHNlbGVjdG9yKGV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzV2l0
aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOmRhdGFiYXNlSWQ6cXVlcnk6KV0pIHsKKyAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQs
IEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS5leGVjdXRlU1FM
QXN5bmNPcHRpb25hbFJldHVyblZhbHVlcycgd2FzIG5vdCBmb3VuZCJfcyk7CisgICAgICAgIGJh
Y2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKKyAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQs
IEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5k
RGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgIH07CisKKyAgICBpZCBzdWNj
ZXNzQ2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmNvbHVtbk5hbWVzLCBOU1N0
cmluZyAqKm5vdGVzLCBkb3VibGUgKnRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoq
dmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipwYXlsb2FkLCBpbnQgKmRhdGFiYXNlSWQs
IFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJh
c2VQcmltYXJ5Q29sb3JzICpzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICoqYWx0
ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFs
UmV0dXJuVmFsdWVzUHJpbnRDb2xvciAqcHJpbnRDb2xvcikgeworICAgICAgICBSZWY8SlNPTjo6
T2JqZWN0PiByZXN1bHRPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBU
SFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoY29sdW1uTmFtZXMsIEAi
Y29sdW1uTmFtZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxf
UEFSQU1FVEVSKG5vdGVzLCBAIm5vdGVzIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
QkFEX09QVElPTkFMX1BBUkFNRVRFUih2YWx1ZXMsIEAidmFsdWVzIik7CisgICAgICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihwYXlsb2FkLCBAInBheWxvYWQi
KTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHNx
bEVycm9yLCBAInNxbEVycm9yIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09Q
VElPTkFMX1BBUkFNRVRFUihhbHRlcm5hdGVDb2xvcnMsIEAiYWx0ZXJuYXRlQ29sb3JzIik7Cisg
ICAgICAgIGlmIChjb2x1bW5OYW1lcykKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJy
YXkoImNvbHVtbk5hbWVzIl9zLCB0b0pTT05TdHJpbmdBcnJheSgqY29sdW1uTmFtZXMpKTsKKyAg
ICAgICAgaWYgKG5vdGVzKQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoIm5v
dGVzIl9zLCAqbm90ZXMpOworICAgICAgICBpZiAodGltZXN0YW1wKQorICAgICAgICAgICAgcmVz
dWx0T2JqZWN0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgKnRpbWVzdGFtcCk7CisgICAgICAg
IGlmICh2YWx1ZXMpCisgICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdCgidmFsdWVz
Il9zLCBbKnZhbHVlcyB0b0pTT05PYmplY3RdKTsKKyAgICAgICAgaWYgKHBheWxvYWQpCisgICAg
ICAgICAgICByZXN1bHRPYmplY3QtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBbKnBheWxvYWQgdG9K
U09OT2JqZWN0XSk7CisgICAgICAgIGlmIChkYXRhYmFzZUlkKQorICAgICAgICAgICAgcmVzdWx0
T2JqZWN0LT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCAqZGF0YWJhc2VJZCk7CisgICAgICAg
IGlmIChzcWxFcnJvcikKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KCJzcWxF
cnJvciJfcywgWypzcWxFcnJvciB0b0pTT05PYmplY3RdKTsKKyAgICAgICAgaWYgKHNjcmVlbkNv
bG9yKQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9z
LCB0b1Byb3RvY29sU3RyaW5nKCpzY3JlZW5Db2xvcikpOworICAgICAgICBpZiAoYWx0ZXJuYXRl
Q29sb3JzKQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29s
b3JzIl9zLCB0b0pTT05TdHJpbmdBcnJheSgqYWx0ZXJuYXRlQ29sb3JzKSk7CisgICAgICAgIGlm
IChwcmludENvbG9yKQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInByaW50
Q29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcoKnByaW50Q29sb3IpKTsKKyAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHRPYmpl
Y3QpLCBmYWxzZSk7CisgICAgfTsKKworICAgIGludCBvX2luX2RhdGFiYXNlSWQgPSBpbl9kYXRh
YmFzZUlkOworICAgIE5TU3RyaW5nICpvX2luX3F1ZXJ5ID0gaW5fcXVlcnk7CisKKyAgICBbbV9k
ZWxlZ2F0ZSBleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1dpdGhFcnJvckNhbGxi
YWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjayBkYXRhYmFz
ZUlkOm9faW5fZGF0YWJhc2VJZCBxdWVyeTpvX2luX3F1ZXJ5XTsKK30KKwordm9pZCBPYmpDSW5z
cGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTFN5bmMobG9uZyByZXF1
ZXN0SWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KQoreworICAg
IGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihleGVjdXRlU1FM
U3luY1dpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazpkYXRhYmFzZUlkOnF1ZXJ5Oild
KSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVx
dWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRGF0YWJhc2UuZXhl
Y3V0ZVNRTFN5bmMnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7CisgICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0
Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICB9OworCisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0g
XihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqbm90ZXMsIGRv
dWJsZSB0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqdmFsdWVzLCBSV0lQcm90b2Nv
bEpTT05PYmplY3QgKnBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFz
ZUVycm9yICpzcWxFcnJvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICphbHRlcm5hdGVDb2xvcnMs
IFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyBzY3JlZW5Db2xvciwgVGVzdFByb3Rv
Y29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3IgcHJpbnRDb2xvcikgeworICAgICAg
ICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHRPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihjb2x1bW5O
YW1lcywgQCJjb2x1bW5OYW1lcyIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJ
UkVEX1BBUkFNRVRFUihub3RlcywgQCJub3RlcyIpOworICAgICAgICBUSFJPV19FWENFUFRJT05f
Rk9SX1JFUVVJUkVEX1BBUkFNRVRFUih2YWx1ZXMsIEAidmFsdWVzIik7CisgICAgICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHBheWxvYWQsIEAicGF5bG9hZCIpOwor
ICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihzcWxFcnJvciwg
QCJzcWxFcnJvciIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFN
RVRFUihhbHRlcm5hdGVDb2xvcnMsIEAiYWx0ZXJuYXRlQ29sb3JzIik7CisgICAgICAgIHJlc3Vs
dE9iamVjdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB0b0pTT05TdHJpbmdBcnJheShjb2x1
bW5OYW1lcykpOworICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygibm90ZXMiX3MsIG5v
dGVzKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgdGlt
ZXN0YW1wKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgW3Zh
bHVlcyB0b0pTT05PYmplY3RdKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRWYWx1ZSgicGF5
bG9hZCJfcywgW3BheWxvYWQgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+
c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgZGF0YWJhc2VJZCk7CisgICAgICAgIHJlc3VsdE9i
amVjdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgW3NxbEVycm9yIHRvSlNPTk9iamVjdF0pOwor
ICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIHRvSlNP
TlN0cmluZ0FycmF5KGFsdGVybmF0ZUNvbG9ycykpOworICAgICAgICByZXN1bHRPYmplY3QtPnNl
dFN0cmluZygic2NyZWVuQ29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcoc2NyZWVuQ29sb3IpKTsK
KyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsIHRvUHJvdG9j
b2xTdHJpbmcocHJpbnRDb2xvcikpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5k
UmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdE9iamVjdCksIGZhbHNlKTsKKyAgICB9
OworCisgICAgaW50IG9faW5fZGF0YWJhc2VJZCA9IGluX2RhdGFiYXNlSWQ7CisgICAgTlNTdHJp
bmcgKm9faW5fcXVlcnkgPSBpbl9xdWVyeTsKKworICAgIFttX2RlbGVnYXRlIGV4ZWN1dGVTUUxT
eW5jV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vz
c0NhbGxiYWNrIGRhdGFiYXNlSWQ6b19pbl9kYXRhYmFzZUlkIHF1ZXJ5Om9faW5fcXVlcnldOwor
fQorCit2b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRl
U1FMQXN5bmMobG9uZyByZXF1ZXN0SWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcm
IGluX3F1ZXJ5KQoreworICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBz
ZWxlY3RvcihleGVjdXRlU1FMQXN5bmNXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6
ZGF0YWJhc2VJZDpxdWVyeTopXSkgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBv
cnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZv
dW5kLCAiJ0RhdGFiYXNlLmV4ZWN1dGVTUUxBc3luYycgd2FzIG5vdCBmb3VuZCJfcyk7CisgICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3Ip
IHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1
ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgIH07CisKKyAgICBp
ZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqY29sdW1uTmFtZXMs
IE5TU3RyaW5nICpub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0
ICp2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQs
IFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFz
ZVByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqYWx0ZXJu
YXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3Ig
cHJpbnRDb2xvcikgeworICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHRPYmplY3QgPSBK
U09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJ
UkVEX1BBUkFNRVRFUihjb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOworICAgICAgICBUSFJP
V19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihub3RlcywgQCJub3RlcyIpOworICAg
ICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUih2YWx1ZXMsIEAidmFs
dWVzIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHBh
eWxvYWQsIEAicGF5bG9hZCIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVE
X1BBUkFNRVRFUihzcWxFcnJvciwgQCJzcWxFcnJvciIpOworICAgICAgICBUSFJPV19FWENFUFRJ
T05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihhbHRlcm5hdGVDb2xvcnMsIEAiYWx0ZXJuYXRlQ29s
b3JzIik7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB0
b0pTT05TdHJpbmdBcnJheShjb2x1bW5OYW1lcykpOworICAgICAgICByZXN1bHRPYmplY3QtPnNl
dFN0cmluZygibm90ZXMiX3MsIG5vdGVzKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXREb3Vi
bGUoInRpbWVzdGFtcCJfcywgdGltZXN0YW1wKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRP
YmplY3QoInZhbHVlcyJfcywgW3ZhbHVlcyB0b0pTT05PYmplY3RdKTsKKyAgICAgICAgcmVzdWx0
T2JqZWN0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgW3BheWxvYWQgdG9KU09OT2JqZWN0XSk7Cisg
ICAgICAgIHJlc3VsdE9iamVjdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgZGF0YWJhc2VJ
ZCk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgW3NxbEVy
cm9yIHRvSlNPTk9iamVjdF0pOworICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygic2Ny
ZWVuQ29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcoc2NyZWVuQ29sb3IpKTsKKyAgICAgICAgcmVz
dWx0T2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCB0b0pTT05TdHJpbmdBcnJh
eShhbHRlcm5hdGVDb2xvcnMpKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInBy
aW50Q29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcocHJpbnRDb2xvcikpOworICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdE9i
amVjdCksIGZhbHNlKTsKKyAgICB9OworCisgICAgaW50IG9faW5fZGF0YWJhc2VJZCA9IGluX2Rh
dGFiYXNlSWQ7CisgICAgTlNTdHJpbmcgKm9faW5fcXVlcnkgPSBpbl9xdWVyeTsKKworICAgIFtt
X2RlbGVnYXRlIGV4ZWN1dGVTUUxBc3luY1dpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sg
c3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjayBkYXRhYmFzZUlkOm9faW5fZGF0YWJhc2VJ
ZCBxdWVyeTpvX2luX3F1ZXJ5XTsKK30KKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKwor
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8V2ViSW5zcGVj
dG9yL1Rlc3RQcm90b2NvbC5oPgorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVs
dCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0CitA
cHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluLCBzZXR0ZXI9c2V0RGF0YWJhc2VIYW5kbGVyOikg
aWQ8VGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyPiBkYXRhYmFzZUhhbmRsZXI7CitA
ZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24uaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwu
aCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Cisj
aW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKwor
dXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24KK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9j
b250cm9sbGVyOworICAgIGlkPFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4gX2Rh
dGFiYXNlSGFuZGxlcjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjoo
QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCit7CisgICAgc2VsZiA9
IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAg
QVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKKyAgICBy
ZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgW19kYXRhYmFzZUhhbmRs
ZXIgcmVsZWFzZV07CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistICh2b2lkKXNldERhdGFi
YXNlSGFuZGxlcjooaWQ8VGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyPiloYW5kbGVy
Cit7CisgICAgaWYgKGhhbmRsZXIgPT0gX2RhdGFiYXNlSGFuZGxlcikKKyAgICAgICAgcmV0dXJu
OworCisgICAgW19kYXRhYmFzZUhhbmRsZXIgcmVsZWFzZV07CisgICAgX2RhdGFiYXNlSGFuZGxl
ciA9IFtoYW5kbGVyIHJldGFpbl07CisKKyAgICBhdXRvIGFsdGVybmF0ZURpc3BhdGNoZXIgPSBt
YWtlVW5pcXVlPE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPihoYW5kbGVy
KTsKKyAgICBhdXRvIGFsdGVybmF0ZUFnZW50ID0gbWFrZVVuaXF1ZTxBbHRlcm5hdGVEaXNwYXRj
aGFibGVBZ2VudDxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyLCBBbHRlcm5hdGVEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVyPj4oIkRhdGFiYXNlIl9zLCAqX2NvbnRyb2xsZXIsIFdURk1vdmUoYWx0
ZXJuYXRlRGlzcGF0Y2hlcikpOworICAgIF9jb250cm9sbGVyLT5hcHBlbmRFeHRyYUFnZW50KFdU
Rk1vdmUoYWx0ZXJuYXRlQWdlbnQpKTsKK30KKworLSAoaWQ8VGVzdFByb3RvY29sRGF0YWJhc2VE
b21haW5IYW5kbGVyPilkYXRhYmFzZUhhbmRsZXIKK3sKKyAgICByZXR1cm4gX2RhdGFiYXNlSGFu
ZGxlcjsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJh
dGlvbi5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5t
bQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMt
YXR0cmlidXRlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2lu
ZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZl
bnREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0
ZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBv
cnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJ
UHJvdG9jb2xKU09OT2JqZWN0Lmg+CisKKworQGNsYXNzIFRlc3RQcm90b2NvbERhdGFiYXNlRXJy
b3I7CisKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGF0YWJhc2VQ
cmltYXJ5Q29sb3JzKSB7CisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzUmVk
LAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc0dyZWVuLAorICAgIFRlc3RQ
cm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc0JsdWUsCit9OworCit0eXBlZGVmIE5TX0VOVU0o
TlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1
cm5WYWx1ZXNQcmludENvbG9yKSB7CisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FM
U3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvckN5YW4sCisgICAgVGVzdFByb3RvY29s
RGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvck1hZ2Vu
dGEsCisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJu
VmFsdWVzUHJpbnRDb2xvclllbGxvdywKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVT
UUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yQmxhY2ssCit9OworCit0eXBlZGVm
IE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09w
dGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvcikgeworICAgIFRlc3RQcm90b2NvbERhdGFiYXNl
RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yQ3lhbiwKKyAgICBU
ZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJp
bnRDb2xvck1hZ2VudGEsCisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNP
cHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JZZWxsb3csCisgICAgVGVzdFByb3RvY29sRGF0
YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JCbGFjaywK
K307CisKK3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhl
Y3V0ZVNRTFN5bmNQcmludENvbG9yKSB7CisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRl
U1FMU3luY1ByaW50Q29sb3JDeWFuLAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNR
TFN5bmNQcmludENvbG9yTWFnZW50YSwKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVT
UUxTeW5jUHJpbnRDb2xvclllbGxvdywKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVT
UUxTeW5jUHJpbnRDb2xvckJsYWNrLAorfTsKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwg
VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yKSB7CisgICAgVGVz
dFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yQ3lhbiwKKyAgICBUZXN0
UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JNYWdlbnRhLAorICAgIFRl
c3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvclllbGxvdywKKyAgICBU
ZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JCbGFjaywKK307CisK
KworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRl
c3RQcm90b2NvbERhdGFiYXNlRXJyb3IgOiBSV0lQcm90b2NvbEpTT05PYmplY3QKKy0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilw
YXlsb2FkOworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3Rv
Y29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhNZXNz
YWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZTooaW50KWNvZGU7CisvKiByZXF1aXJlZCAqLyBA
cHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKm1lc3NhZ2U7CisvKiByZXF1aXJl
ZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQgY29kZTsKK0BlbmQKKworQHBy
b3RvY29sIFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlciA8TlNPYmplY3Q+CitAb3B0
aW9uYWwKKy0gKHZvaWQpZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1dpdGhFcnJv
ckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNz
Q2FsbGJhY2s6KHZvaWQoXikoTlNBcnJheS8qPE5TU3RyaW5nPiovICoqY29sdW1uTmFtZXMsIE5T
U3RyaW5nICoqbm90ZXMsIGRvdWJsZSAqdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3Qg
Kip2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnBheWxvYWQsIGludCAqZGF0YWJhc2VJ
ZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRh
YmFzZVByaW1hcnlDb2xvcnMgKnNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiph
bHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25h
bFJldHVyblZhbHVlc1ByaW50Q29sb3IgKnByaW50Q29sb3IpKXN1Y2Nlc3NDYWxsYmFjayBkYXRh
YmFzZUlkOihpbnQpZGF0YWJhc2VJZCBxdWVyeTooTlNTdHJpbmcgKilxdWVyeTsKKy0gKHZvaWQp
ZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNXaXRoRXJyb3JDYWxsYmFjazoodm9p
ZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lk
KF4pKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqKm5vdGVz
LCBkb3VibGUgKnRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqdmFsdWVzLCBSV0lQ
cm90b2NvbEpTT05PYmplY3QgKipwYXlsb2FkLCBpbnQgKmRhdGFiYXNlSWQsIFRlc3RQcm90b2Nv
bERhdGFiYXNlRXJyb3IgKipzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29s
b3JzICpzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICoqYWx0ZXJuYXRlQ29sb3Jz
LCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVz
UHJpbnRDb2xvciAqcHJpbnRDb2xvcikpc3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNlSWQ6KGludClk
YXRhYmFzZUlkIHF1ZXJ5OihOU1N0cmluZyAqKXF1ZXJ5OworLSAodm9pZClleGVjdXRlU1FMU3lu
Y1dpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFj
ayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoTlNBcnJheS8qPE5TU3RyaW5nPiovICpjb2x1bW5O
YW1lcywgTlNTdHJpbmcgKm5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05P
YmplY3QgKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkLCBpbnQgZGF0YWJh
c2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqc3FsRXJyb3IsIE5TQXJyYXkvKjxOU1N0
cmluZz4qLyAqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xv
cnMgc2NyZWVuQ29sb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENv
bG9yIHByaW50Q29sb3IpKXN1Y2Nlc3NDYWxsYmFjayBkYXRhYmFzZUlkOihpbnQpZGF0YWJhc2VJ
ZCBxdWVyeTooTlNTdHJpbmcgKilxdWVyeTsKKy0gKHZvaWQpZXhlY3V0ZVNRTEFzeW5jV2l0aEVy
cm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nl
c3NDYWxsYmFjazoodm9pZCheKShOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmNvbHVtbk5hbWVzLCBO
U1N0cmluZyAqbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAq
dmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBU
ZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQ
cmltYXJ5Q29sb3JzIHNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmFsdGVybmF0
ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yIHBy
aW50Q29sb3IpKXN1Y2Nlc3NDYWxsYmFjayBkYXRhYmFzZUlkOihpbnQpZGF0YWJhc2VJZCBxdWVy
eTooTlNTdHJpbmcgKilxdWVyeTsKK0BlbmQKKworCisKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9y
L1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgorCisjIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5o
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1h
dHRyaWJ1dGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmpl
Y3RQcml2YXRlLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3Rv
ckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKKworCisKKyMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9y
dCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgorCituYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgorT3B0aW9u
YWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7
CisKKworaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbERhdGFiYXNl
UHJpbWFyeUNvbG9ycyB2YWx1ZSkKK3sKKyAgICBzd2l0Y2godmFsdWUpIHsKKyAgICBjYXNlIFRl
c3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc1JlZDoKKyAgICAgICAgcmV0dXJuICJyZWQi
X3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNHcmVlbjoKKyAg
ICAgICAgcmV0dXJuICJncmVlbiJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlUHJp
bWFyeUNvbG9yc0JsdWU6CisgICAgICAgIHJldHVybiAiYmx1ZSJfczsKKyAgICB9Cit9CisKK3Rl
bXBsYXRlPD4KK2lubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xv
cnM+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIGlmICh2
YWx1ZSA9PSAicmVkIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFy
eUNvbG9yc1JlZDsKKyAgICBpZiAodmFsdWUgPT0gImdyZWVuIikKKyAgICAgICAgcmV0dXJuIFRl
c3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc0dyZWVuOworICAgIGlmICh2YWx1ZSA9PSAi
Ymx1ZSIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNC
bHVlOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK2lubGluZSBTdHJpbmcgdG9Qcm90
b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1
cm5WYWx1ZXNQcmludENvbG9yIHZhbHVlKQoreworICAgIHN3aXRjaCh2YWx1ZSkgeworICAgIGNh
c2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVz
UHJpbnRDb2xvckN5YW46CisgICAgICAgIHJldHVybiAiY3lhbiJfczsKKyAgICBjYXNlIFRlc3RQ
cm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29s
b3JNYWdlbnRhOgorICAgICAgICByZXR1cm4gIm1hZ2VudGEiX3M7CisgICAgY2FzZSBUZXN0UHJv
dG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9y
WWVsbG93OgorICAgICAgICByZXR1cm4gInllbGxvdyJfczsKKyAgICBjYXNlIFRlc3RQcm90b2Nv
bERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JCbGFj
azoKKyAgICAgICAgcmV0dXJuICJibGFjayJfczsKKyAgICB9Cit9CisKK3RlbXBsYXRlPD4KK2lu
bGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxS
ZXR1cm5WYWx1ZXNQcmludENvbG9yPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2
YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gImN5YW4iKQorICAgICAgICByZXR1cm4gVGVzdFBy
b3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xv
ckN5YW47CisgICAgaWYgKHZhbHVlID09ICJtYWdlbnRhIikKKyAgICAgICAgcmV0dXJuIFRlc3RQ
cm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29s
b3JNYWdlbnRhOworICAgIGlmICh2YWx1ZSA9PSAieWVsbG93IikKKyAgICAgICAgcmV0dXJuIFRl
c3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50
Q29sb3JZZWxsb3c7CisgICAgaWYgKHZhbHVlID09ICJibGFjayIpCisgICAgICAgIHJldHVybiBU
ZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmlu
dENvbG9yQmxhY2s7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKworaW5saW5lIFN0cmlu
ZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0
aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yIHZhbHVlKQoreworICAgIHN3aXRjaCh2YWx1ZSkg
eworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJl
dHVyblZhbHVlc1ByaW50Q29sb3JDeWFuOgorICAgICAgICByZXR1cm4gImN5YW4iX3M7CisgICAg
Y2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFs
dWVzUHJpbnRDb2xvck1hZ2VudGE6CisgICAgICAgIHJldHVybiAibWFnZW50YSJfczsKKyAgICBj
YXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1
ZXNQcmludENvbG9yWWVsbG93OgorICAgICAgICByZXR1cm4gInllbGxvdyJfczsKKyAgICBjYXNl
IFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQ
cmludENvbG9yQmxhY2s6CisgICAgICAgIHJldHVybiAiYmxhY2siX3M7CisgICAgfQorfQorCit0
ZW1wbGF0ZTw+CitpbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FM
QXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3I+IGZyb21Qcm90b2NvbFN0cmluZyhj
b25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSAiY3lhbiIpCisgICAgICAg
IHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJu
VmFsdWVzUHJpbnRDb2xvckN5YW47CisgICAgaWYgKHZhbHVlID09ICJtYWdlbnRhIikKKyAgICAg
ICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1
cm5WYWx1ZXNQcmludENvbG9yTWFnZW50YTsKKyAgICBpZiAodmFsdWUgPT0gInllbGxvdyIpCisg
ICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFs
UmV0dXJuVmFsdWVzUHJpbnRDb2xvclllbGxvdzsKKyAgICBpZiAodmFsdWUgPT0gImJsYWNrIikK
KyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXNQcmludENvbG9yQmxhY2s7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
K30KKworaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbERhdGFiYXNl
RXhlY3V0ZVNRTFN5bmNQcmludENvbG9yIHZhbHVlKQoreworICAgIHN3aXRjaCh2YWx1ZSkgewor
ICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3JDeWFu
OgorICAgICAgICByZXR1cm4gImN5YW4iX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFz
ZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvck1hZ2VudGE6CisgICAgICAgIHJldHVybiAibWFnZW50
YSJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENv
bG9yWWVsbG93OgorICAgICAgICByZXR1cm4gInllbGxvdyJfczsKKyAgICBjYXNlIFRlc3RQcm90
b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yQmxhY2s6CisgICAgICAgIHJldHVy
biAiYmxhY2siX3M7CisgICAgfQorfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgT3B0aW9uYWw8VGVz
dFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3I+IGZyb21Qcm90b2NvbFN0
cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSAiY3lhbiIpCisg
ICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xv
ckN5YW47CisgICAgaWYgKHZhbHVlID09ICJtYWdlbnRhIikKKyAgICAgICAgcmV0dXJuIFRlc3RQ
cm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yTWFnZW50YTsKKyAgICBpZiAo
dmFsdWUgPT0gInllbGxvdyIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVTUUxTeW5jUHJpbnRDb2xvclllbGxvdzsKKyAgICBpZiAodmFsdWUgPT0gImJsYWNrIikK
KyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENv
bG9yQmxhY2s7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKworaW5saW5lIFN0cmluZyB0
b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRD
b2xvciB2YWx1ZSkKK3sKKyAgICBzd2l0Y2godmFsdWUpIHsKKyAgICBjYXNlIFRlc3RQcm90b2Nv
bERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvckN5YW46CisgICAgICAgIHJldHVybiAi
Y3lhbiJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJp
bnRDb2xvck1hZ2VudGE6CisgICAgICAgIHJldHVybiAibWFnZW50YSJfczsKKyAgICBjYXNlIFRl
c3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvclllbGxvdzoKKyAgICAg
ICAgcmV0dXJuICJ5ZWxsb3ciX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVTUUxBc3luY1ByaW50Q29sb3JCbGFjazoKKyAgICAgICAgcmV0dXJuICJibGFjayJfczsKKyAg
ICB9Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xEYXRhYmFz
ZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3I+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJp
bmcmIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSAiY3lhbiIpCisgICAgICAgIHJldHVybiBU
ZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JDeWFuOworICAgIGlm
ICh2YWx1ZSA9PSAibWFnZW50YSIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFz
ZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JNYWdlbnRhOworICAgIGlmICh2YWx1ZSA9PSAieWVs
bG93IikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5j
UHJpbnRDb2xvclllbGxvdzsKKyAgICBpZiAodmFsdWUgPT0gImJsYWNrIikKKyAgICAgICAgcmV0
dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvckJsYWNrOwor
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgor
CisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBv
cnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQ
cm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7
CisKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChEYXRhYmFzZURvbWFp
bikKKworKyAodm9pZClfcGFyc2VEYXRhYmFzZUlkOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9t
UGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNlUHJpbWFyeUNvbG9yczooTlNOdW1i
ZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisrICh2b2lkKV9wYXJzZUNv
bG9yTGlzdDooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihp
ZClwYXlsb2FkOworKyAodm9pZClfcGFyc2VFcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJv
ciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKworQGVuZAorCitAaW1wbGVt
ZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChEYXRhYmFzZURvbWFpbikKKwor
KyAodm9pZClfcGFyc2VEYXRhYmFzZUlkOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9h
ZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9h
ZCwgW05TTnVtYmVyIGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gKE5TTnVtYmVyICopcGF5bG9h
ZDsKK30KKworKyAodm9pZClfcGFyc2VQcmltYXJ5Q29sb3JzOihOU051bWJlciAqKilvdXRWYWx1
ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFE
X1RZUEUocGF5bG9hZCwgW05TU3RyaW5nIGNsYXNzXSk7CisgICAgT3B0aW9uYWw8VGVzdFByb3Rv
Y29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzPiByZXN1bHQgPSBJbnNwZWN0b3I6OmZyb21Qcm90b2Nv
bFN0cmluZzxUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnM+KHBheWxvYWQpOworICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX0VOVU1fVkFMVUUocmVzdWx0LCBAIlByaW1hcnlDb2xv
cnMiKTsKKyAgICAqb3V0VmFsdWUgPSBAKHJlc3VsdC52YWx1ZSgpKTsKK30KKworKyAodm9pZClf
cGFyc2VDb2xvckxpc3Q6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5
bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5
bG9hZCwgW05TQXJyYXkvKjxOU1N0cmluZz4qLyBjbGFzc10pOworICAgICpvdXRWYWx1ZSA9IChO
U0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilwYXlsb2FkOworfQorCisrICh2b2lkKV9wYXJzZUVycm9y
OihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClw
YXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNE
aWN0aW9uYXJ5IGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xEYXRhYmFz
ZUVycm9yIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07Cit9CisKK0BlbmQKKworCisj
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorCisjIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFs
LmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8
V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKyNpbXBvcnQgPHd0
Zi9Bc3NlcnRpb25zLmg+CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1l
c3BhY2UgSW5zcGVjdG9yOworCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xEYXRhYmFz
ZUVycm9yCisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0
aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1
cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAIm1lc3NhZ2UiXSwgQCJtZXNzYWdlIik7Cisg
ICAgc2VsZi5tZXNzYWdlID0gcGF5bG9hZFtAIm1lc3NhZ2UiXTsKKworICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImNvZGUiXSwgQCJjb2RlIik7Cisg
ICAgc2VsZi5jb2RlID0gW3BheWxvYWRbQCJjb2RlIl0gaW50ZWdlclZhbHVlXTsKKworICAgIHJl
dHVybiBzZWxmOworfQorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJX
SVByb3RvY29sSlNPTk9iamVjdCAqKW9iamVjdAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIg
aW5pdFdpdGhKU09OT2JqZWN0OltvYmplY3QgdG9KU09OT2JqZWN0XS5nZXQoKV0pKQorICAgICAg
ICByZXR1cm4gbmlsOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKGluc3RhbmNldHlwZSlp
bml0V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBjb2RlOihpbnQpY29kZQoreworICAg
IGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShtZXNzYWdlLCBAIm1lc3NhZ2Ui
KTsKKworICAgIHNlbGYubWVzc2FnZSA9IG1lc3NhZ2U7CisgICAgc2VsZi5jb2RlID0gY29kZTsK
KworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXNldE1lc3NhZ2U6KE5TU3RyaW5nICop
bWVzc2FnZQoreworICAgIFtzdXBlciBzZXRTdHJpbmc6bWVzc2FnZSBmb3JLZXk6QCJtZXNzYWdl
Il07Cit9CisKKy0gKE5TU3RyaW5nICopbWVzc2FnZQoreworICAgIHJldHVybiBbc3VwZXIgc3Ry
aW5nRm9yS2V5OkAibWVzc2FnZSJdOworfQorCistICh2b2lkKXNldENvZGU6KGludCljb2RlCit7
CisgICAgW3N1cGVyIHNldEludGVnZXI6Y29kZSBmb3JLZXk6QCJjb2RlIl07Cit9CisKKy0gKGlu
dCljb2RlCit7CisgICAgcmV0dXJuIFtzdXBlciBpbnRlZ2VyRm9yS2V5OkAiY29kZSJdOworfQor
CitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVk
L2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uLXJlc3Vs
dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbi1yZXN1
bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmMyMWIzZTg4OTk4Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1l
dGVycy5qc29uLXJlc3VsdApAQCAtMCwwICsxLDE2NDMgQEAKKyMjIyBCZWdpbiBGaWxlOiBJbnNw
ZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisvLyBEYXRhYmFzZQorSW5z
cGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiRGF0YWJhc2UiLCBudWxsKTsKK0luc3BlY3Rv
ckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJEYXRhYmFzZS5QcmltYXJ5Q29sb3JzIiwge1JlZDogInJl
ZCIsIEdyZWVuOiAiZ3JlZW4iLCBCbHVlOiAiYmx1ZSJ9KTsKK0luc3BlY3RvckJhY2tlbmQucmVn
aXN0ZXJDb21tYW5kKCJEYXRhYmFzZS5leGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzIiwgbnVs
bCwgW3sibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6
IHRydWV9LCB7Im5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0
cnVlfSwgeyJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6
IHRydWV9LCB7Im5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjog
dHJ1ZX0sIHsibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjog
dHJ1ZX0sIHsibmFtZSI6ICJkYXRhYmFzZUlkIiwgInR5cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFs
IjogdHJ1ZX0sIHsibmFtZSI6ICJzcWxFcnJvciIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25h
bCI6IHRydWV9LCB7Im5hbWUiOiAic2NyZWVuQ29sb3IiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0
aW9uYWwiOiB0cnVlfSwgeyJuYW1lIjogImFsdGVybmF0ZUNvbG9ycyIsICJ0eXBlIjogIm9iamVj
dCIsICJvcHRpb25hbCI6IHRydWV9LCB7Im5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0
cmluZyIsICJvcHRpb25hbCI6IHRydWV9XSwgWyJjb2x1bW5OYW1lcyIsICJub3RlcyIsICJ0aW1l
c3RhbXAiLCAidmFsdWVzIiwgInBheWxvYWQiLCAiZGF0YWJhc2VJZCIsICJzcWxFcnJvciIsICJz
Y3JlZW5Db2xvciIsICJhbHRlcm5hdGVDb2xvcnMiLCAicHJpbnRDb2xvciJdKTsKK0luc3BlY3Rv
ckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJEYXRhYmFzZS5leGVjdXRlTm9PcHRpb25hbFBhcmFt
ZXRlcnMiLCBudWxsLCBbeyJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAib2JqZWN0In0s
IHsibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyJ9LCB7Im5hbWUiOiAidGltZXN0YW1w
IiwgInR5cGUiOiAibnVtYmVyIn0sIHsibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3Qi
fSwgeyJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJvYmplY3QifSwgeyJuYW1lIjogImRhdGFi
YXNlSWQiLCAidHlwZSI6ICJudW1iZXIifSwgeyJuYW1lIjogInNxbEVycm9yIiwgInR5cGUiOiAi
b2JqZWN0In0sIHsibmFtZSI6ICJzY3JlZW5Db2xvciIsICJ0eXBlIjogInN0cmluZyJ9LCB7Im5h
bWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwgInR5cGUiOiAib2JqZWN0In0sIHsibmFtZSI6ICJwcmlu
dENvbG9yIiwgInR5cGUiOiAic3RyaW5nIn1dLCBbImNvbHVtbk5hbWVzIiwgIm5vdGVzIiwgInRp
bWVzdGFtcCIsICJ2YWx1ZXMiLCAicGF5bG9hZCIsICJkYXRhYmFzZUlkIiwgInNxbEVycm9yIiwg
InNjcmVlbkNvbG9yIiwgImFsdGVybmF0ZUNvbG9ycyIsICJwcmludENvbG9yIl0pOworSW5zcGVj
dG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiRGF0YWJhc2UiLCBudWxsKTsKKyMjIyBFbmQgRmls
ZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0
ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UK
KworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCisjaW5jbHVk
ZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckZyb250ZW5kUm91dGVyLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdm9pZCBzZXRCYWNrZW5kRGlz
cGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tl
bmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQorICAgIEJhY2tlbmREaXNwYXRj
aGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNo
ZXIuZ2V0KCk7IH0KK3ByaXZhdGU6CisgICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2Jh
Y2tlbmREaXNwYXRjaGVyOworfTsKKworCitjbGFzcyBBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoK
KyAgICB2aXJ0dWFsIH5BbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKCkgeyB9Cisg
ICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyBjYWxsSWQs
IGNvbnN0IEpTT046OkFycmF5KiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nKiBpbl9ub3Rl
cywgY29uc3QgZG91YmxlKiBpbl90aW1lc3RhbXAsIGNvbnN0IEpTT046Ok9iamVjdCogaW5fdmFs
dWVzLCBjb25zdCBKU09OOjpWYWx1ZSogaW5fcGF5bG9hZCwgY29uc3QgaW50KiBpbl9kYXRhYmFz
ZUlkLCBjb25zdCBKU09OOjpPYmplY3QqIGluX3NxbEVycm9yLCBjb25zdCBTdHJpbmcqIGluX3Nj
cmVlbkNvbG9yLCBjb25zdCBKU09OOjpBcnJheSogaW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBT
dHJpbmcqIGluX3ByaW50Q29sb3IpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZU5vT3B0
aW9uYWxQYXJhbWV0ZXJzKGxvbmcgY2FsbElkLCBjb25zdCBKU09OOjpBcnJheSYgaW5fY29sdW1u
TmFtZXMsIGNvbnN0IFN0cmluZyYgaW5fbm90ZXMsIGRvdWJsZSBpbl90aW1lc3RhbXAsIGNvbnN0
IEpTT046Ok9iamVjdCYgaW5fdmFsdWVzLCBKU09OOjpWYWx1ZSBpbl9wYXlsb2FkLCBpbnQgaW5f
ZGF0YWJhc2VJZCwgY29uc3QgSlNPTjo6T2JqZWN0JiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5n
JiBpbl9zY3JlZW5Db2xvciwgY29uc3QgSlNPTjo6QXJyYXkmIGluX2FsdGVybmF0ZUNvbG9ycywg
Y29uc3QgU3RyaW5nJiBpbl9wcmludENvbG9yKSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENI
RVJTKQorIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKwor
IyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFy
YW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0eXBl
ZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQorY2xhc3MgQWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjsK
KyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworY2xh
c3MgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgeworcHVibGljOgorICAgIC8vIE5h
bWVkIGFmdGVyIHBhcmFtZXRlciAncHJpbnRDb2xvcicgd2hpbGUgZ2VuZXJhdGluZyBjb21tYW5k
L2V2ZW50IGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMuCisgICAgZW51bSBjbGFzcyBQcmlu
dENvbG9yIHsKKyAgICAgICAgQ3lhbiA9IDMsCisgICAgICAgIE1hZ2VudGEgPSA0LAorICAgICAg
ICBZZWxsb3cgPSA1LAorICAgICAgICBCbGFjayA9IDYsCisgICAgfTsgLy8gZW51bSBjbGFzcyBQ
cmludENvbG9yCisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMo
RXJyb3JTdHJpbmcmLCBjb25zdCBKU09OOjpBcnJheSogb3B0X2luX2NvbHVtbk5hbWVzLCBjb25z
dCBTdHJpbmcqIG9wdF9pbl9ub3RlcywgY29uc3QgZG91YmxlKiBvcHRfaW5fdGltZXN0YW1wLCBj
b25zdCBKU09OOjpPYmplY3QqIG9wdF9pbl92YWx1ZXMsIGNvbnN0IEpTT046OlZhbHVlKiBvcHRf
aW5fcGF5bG9hZCwgY29uc3QgaW50KiBvcHRfaW5fZGF0YWJhc2VJZCwgY29uc3QgSlNPTjo6T2Jq
ZWN0KiBvcHRfaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyogb3B0X2luX3NjcmVlbkNvbG9yLCBj
b25zdCBKU09OOjpBcnJheSogb3B0X2luX2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nKiBv
cHRfaW5fcHJpbnRDb2xvciwgUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mIG9wdF9vdXRf
Y29sdW1uTmFtZXMsIE9wdGlvbmFsPFN0cmluZz4mIG9wdF9vdXRfbm90ZXMsIE9wdGlvbmFsPGRv
dWJsZT4mIG9wdF9vdXRfdGltZXN0YW1wLCBPcHRpb25hbDxKU09OOjpPYmplY3Q+JiBvcHRfb3V0
X3ZhbHVlcywgT3B0aW9uYWw8SlNPTjo6VmFsdWU+JiBvcHRfb3V0X3BheWxvYWQsIE9wdGlvbmFs
PGludD4mIG9wdF9vdXRfZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpFcnJvcj4mIG9wdF9vdXRfc3FsRXJyb3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpQcmltYXJ5Q29sb3JzKiBvcHRfb3V0X3NjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4mIG9wdF9vdXRfYWx0ZXJuYXRlQ29s
b3JzLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciogb3B0X291
dF9wcmludENvbG9yKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVOb09wdGlvbmFsUGFy
YW1ldGVycyhFcnJvclN0cmluZyYsIGNvbnN0IEpTT046OkFycmF5JiBpbl9jb2x1bW5OYW1lcywg
Y29uc3QgU3RyaW5nJiBpbl9ub3RlcywgZG91YmxlIGluX3RpbWVzdGFtcCwgY29uc3QgSlNPTjo6
T2JqZWN0JiBpbl92YWx1ZXMsIEpTT046OlZhbHVlIGluX3BheWxvYWQsIGludCBpbl9kYXRhYmFz
ZUlkLCBjb25zdCBKU09OOjpPYmplY3QmIGluX3NxbEVycm9yLCBjb25zdCBTdHJpbmcmIGluX3Nj
cmVlbkNvbG9yLCBjb25zdCBKU09OOjpBcnJheSYgaW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBT
dHJpbmcmIGluX3ByaW50Q29sb3IsIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiBvdXRf
Y29sdW1uTmFtZXMsIFN0cmluZyogb3V0X25vdGVzLCBkb3VibGUqIG91dF90aW1lc3RhbXAsIEpT
T046Ok9iamVjdCogb3V0X3ZhbHVlcywgSlNPTjo6VmFsdWUqIG91dF9wYXlsb2FkLCBpbnQqIG91
dF9kYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9y
PiYgb3V0X3NxbEVycm9yLCBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNv
bG9ycyogb3V0X3NjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6OkNvbG9yTGlzdD4mIG91dF9hbHRlcm5hdGVDb2xvcnMsIERhdGFiYXNlQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyOjpQcmludENvbG9yKiBvdXRfcHJpbnRDb2xvcikgPSAwOworcHJvdGVjdGVk
OgorICAgIHZpcnR1YWwgfkRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7Cit9Owor
CitjbGFzcyBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1l
bnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPERhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIERhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJ
ZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkgb3Zl
cnJpZGU7Citwcml2YXRlOgorICAgIHZvaWQgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhs
b25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyAgICB2
b2lkIGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpT
T046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKK3B1YmxpYzoKKyAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIo
QWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikg
eyBtX2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9Citwcml2YXRl
OgorICAgIEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIqIG1fYWx0ZXJuYXRlRGlz
cGF0Y2hlciB7IG51bGxwdHIgfTsKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKK3ByaXZhdGU6CisgICAgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihC
YWNrZW5kRGlzcGF0Y2hlciYsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Cisg
ICAgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQgeyBudWxscHRyIH07
Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tl
bmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJz
LmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0
aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0
QmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVk
ZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgor
CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjaW5jbHVkZSAi
VGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgorI2VuZGlmIC8vIEVOQUJMRShJTlNQ
RUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwor
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5EYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVySGFuZGxlcigpIHsgfQorCitSZWY8RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4gRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlz
cGF0Y2hlciwgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQoreworICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERp
c3BhdGNoZXIsIGFnZW50KSk7Cit9CisKK0RhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OkRhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVy
LCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCisgICAgOiBTdXBwbGVt
ZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKKyAgICAsIG1fYWdlbnQo
YWdlbnQpCit7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9y
RG9tYWluKCJEYXRhYmFzZSJfcywgdGhpcyk7Cit9CisKK3ZvaWQgRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBS
ZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCit7CisgICAgUmVmPERhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOworCisgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFy
YW1ldGVyczsKKyAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFyYW1ldGVycyk7
CisKKyAgICBpZiAobWV0aG9kID09ICJleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzIikgewor
ICAgICAgICBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKHJlcXVlc3RJZCwgV1RGTW92ZShw
YXJhbWV0ZXJzKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKG1ldGhvZCA9PSAi
ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIikgeworICAgICAgICBleGVjdXRlTm9PcHRpb25h
bFBhcmFtZXRlcnMocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJy
b3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RhdGFiYXNlLiIgKyBtZXRo
b2QgKyAiJyB3YXMgbm90IGZvdW5kIik7Cit9CisKK3ZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlcjo6ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhsb25nIHJlcXVlc3RJZCwgUmVmUHRy
PEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKQoreworICAgIGJvb2wgb3B0X2luX2NvbHVtbk5h
bWVzX3ZhbHVlRm91bmQgPSBmYWxzZTsKKyAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IG9wdF9pbl9j
b2x1bW5OYW1lcyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEFycmF5KHBhcmFtZXRlcnMuZ2V0
KCksICJjb2x1bW5OYW1lcyJfcywgJm9wdF9pbl9jb2x1bW5OYW1lc192YWx1ZUZvdW5kKTsKKyAg
ICBib29sIG9wdF9pbl9ub3Rlc192YWx1ZUZvdW5kID0gZmFsc2U7CisgICAgU3RyaW5nIG9wdF9p
bl9ub3RlcyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwYXJhbWV0ZXJzLmdldCgp
LCAibm90ZXMiX3MsICZvcHRfaW5fbm90ZXNfdmFsdWVGb3VuZCk7CisgICAgYm9vbCBvcHRfaW5f
dGltZXN0YW1wX3ZhbHVlRm91bmQgPSBmYWxzZTsKKyAgICBkb3VibGUgb3B0X2luX3RpbWVzdGFt
cCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldERvdWJsZShwYXJhbWV0ZXJzLmdldCgpLCAidGlt
ZXN0YW1wIl9zLCAmb3B0X2luX3RpbWVzdGFtcF92YWx1ZUZvdW5kKTsKKyAgICBib29sIG9wdF9p
bl92YWx1ZXNfdmFsdWVGb3VuZCA9IGZhbHNlOworICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG9w
dF9pbl92YWx1ZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRPYmplY3QocGFyYW1ldGVycy5n
ZXQoKSwgInZhbHVlcyJfcywgJm9wdF9pbl92YWx1ZXNfdmFsdWVGb3VuZCk7CisgICAgYm9vbCBv
cHRfaW5fcGF5bG9hZF92YWx1ZUZvdW5kID0gZmFsc2U7CisgICAgUmVmUHRyPEpTT046OlZhbHVl
PiBvcHRfaW5fcGF5bG9hZCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFZhbHVlKHBhcmFtZXRl
cnMuZ2V0KCksICJwYXlsb2FkIl9zLCAmb3B0X2luX3BheWxvYWRfdmFsdWVGb3VuZCk7CisgICAg
Ym9vbCBvcHRfaW5fZGF0YWJhc2VJZF92YWx1ZUZvdW5kID0gZmFsc2U7CisgICAgaW50IG9wdF9p
bl9kYXRhYmFzZUlkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0SW50ZWdlcihwYXJhbWV0ZXJz
LmdldCgpLCAiZGF0YWJhc2VJZCJfcywgJm9wdF9pbl9kYXRhYmFzZUlkX3ZhbHVlRm91bmQpOwor
ICAgIGJvb2wgb3B0X2luX3NxbEVycm9yX3ZhbHVlRm91bmQgPSBmYWxzZTsKKyAgICBSZWZQdHI8
SlNPTjo6T2JqZWN0PiBvcHRfaW5fc3FsRXJyb3IgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRP
YmplY3QocGFyYW1ldGVycy5nZXQoKSwgInNxbEVycm9yIl9zLCAmb3B0X2luX3NxbEVycm9yX3Zh
bHVlRm91bmQpOworICAgIGJvb2wgb3B0X2luX3NjcmVlbkNvbG9yX3ZhbHVlRm91bmQgPSBmYWxz
ZTsKKyAgICBTdHJpbmcgb3B0X2luX3NjcmVlbkNvbG9yID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+
Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksICJzY3JlZW5Db2xvciJfcywgJm9wdF9pbl9zY3Jl
ZW5Db2xvcl92YWx1ZUZvdW5kKTsKKyAgICBib29sIG9wdF9pbl9hbHRlcm5hdGVDb2xvcnNfdmFs
dWVGb3VuZCA9IGZhbHNlOworICAgIFJlZlB0cjxKU09OOjpBcnJheT4gb3B0X2luX2FsdGVybmF0
ZUNvbG9ycyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEFycmF5KHBhcmFtZXRlcnMuZ2V0KCks
ICJhbHRlcm5hdGVDb2xvcnMiX3MsICZvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzX3ZhbHVlRm91bmQp
OworICAgIGJvb2wgb3B0X2luX3ByaW50Q29sb3JfdmFsdWVGb3VuZCA9IGZhbHNlOworICAgIFN0
cmluZyBvcHRfaW5fcHJpbnRDb2xvciA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhw
YXJhbWV0ZXJzLmdldCgpLCAicHJpbnRDb2xvciJfcywgJm9wdF9pbl9wcmludENvbG9yX3ZhbHVl
Rm91bmQpOworICAgIGlmIChtX2JhY2tlbmREaXNwYXRjaGVyLT5oYXNQcm90b2NvbEVycm9ycygp
KSB7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFj
a2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsICJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2Qg
J0RhdGFiYXNlLmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMnIGNhbid0IGJlIHByb2Nlc3Nl
ZCJfcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKKyAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Cisg
ICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVy
cyhyZXF1ZXN0SWQsIG9wdF9pbl9jb2x1bW5OYW1lc192YWx1ZUZvdW5kID8gb3B0X2luX2NvbHVt
bk5hbWVzLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX25vdGVzX3ZhbHVlRm91bmQgPyAmb3B0X2lu
X25vdGVzIDogbnVsbHB0ciwgb3B0X2luX3RpbWVzdGFtcF92YWx1ZUZvdW5kID8gJm9wdF9pbl90
aW1lc3RhbXAgOiBudWxscHRyLCBvcHRfaW5fdmFsdWVzX3ZhbHVlRm91bmQgPyBvcHRfaW5fdmFs
dWVzLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX3BheWxvYWRfdmFsdWVGb3VuZCA/IG9wdF9pbl9w
YXlsb2FkLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX2RhdGFiYXNlSWRfdmFsdWVGb3VuZCA/ICZv
cHRfaW5fZGF0YWJhc2VJZCA6IG51bGxwdHIsIG9wdF9pbl9zcWxFcnJvcl92YWx1ZUZvdW5kID8g
b3B0X2luX3NxbEVycm9yLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX3NjcmVlbkNvbG9yX3ZhbHVl
Rm91bmQgPyAmb3B0X2luX3NjcmVlbkNvbG9yIDogbnVsbHB0ciwgb3B0X2luX2FsdGVybmF0ZUNv
bG9yc192YWx1ZUZvdW5kID8gb3B0X2luX2FsdGVybmF0ZUNvbG9ycy5nZXQoKSA6IG51bGxwdHIs
IG9wdF9pbl9wcmludENvbG9yX3ZhbHVlRm91bmQgPyAmb3B0X2luX3ByaW50Q29sb3IgOiBudWxs
cHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgIFJl
ZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVm
UHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gb3V0X2NvbHVtbk5hbWVzOworICAgIE9wdGlvbmFs
PFN0cmluZz4gb3V0X25vdGVzOworICAgIE9wdGlvbmFsPGRvdWJsZT4gb3V0X3RpbWVzdGFtcDsK
KyAgICBPcHRpb25hbDxKU09OOjpPYmplY3Q+IG91dF92YWx1ZXM7CisgICAgT3B0aW9uYWw8SlNP
Tjo6VmFsdWU+IG91dF9wYXlsb2FkOworICAgIE9wdGlvbmFsPGludD4gb3V0X2RhdGFiYXNlSWQ7
CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gb3V0X3Nx
bEVycm9yOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3Jz
IG91dF9zY3JlZW5Db2xvcjsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6OkNvbG9yTGlzdD4gb3V0X2FsdGVybmF0ZUNvbG9yczsKKyAgICBEYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciBvdXRfcHJpbnRDb2xvcjsKKyAgICBtX2FnZW50
LT5leGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGVycm9yLCBvcHRfaW5fY29sdW1uTmFtZXNf
dmFsdWVGb3VuZCA/IG9wdF9pbl9jb2x1bW5OYW1lcy5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9u
b3Rlc192YWx1ZUZvdW5kID8gJm9wdF9pbl9ub3RlcyA6IG51bGxwdHIsIG9wdF9pbl90aW1lc3Rh
bXBfdmFsdWVGb3VuZCA/ICZvcHRfaW5fdGltZXN0YW1wIDogbnVsbHB0ciwgb3B0X2luX3ZhbHVl
c192YWx1ZUZvdW5kID8gb3B0X2luX3ZhbHVlcy5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9wYXls
b2FkX3ZhbHVlRm91bmQgPyBvcHRfaW5fcGF5bG9hZC5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9k
YXRhYmFzZUlkX3ZhbHVlRm91bmQgPyAmb3B0X2luX2RhdGFiYXNlSWQgOiBudWxscHRyLCBvcHRf
aW5fc3FsRXJyb3JfdmFsdWVGb3VuZCA/IG9wdF9pbl9zcWxFcnJvci5nZXQoKSA6IG51bGxwdHIs
IG9wdF9pbl9zY3JlZW5Db2xvcl92YWx1ZUZvdW5kID8gJm9wdF9pbl9zY3JlZW5Db2xvciA6IG51
bGxwdHIsIG9wdF9pbl9hbHRlcm5hdGVDb2xvcnNfdmFsdWVGb3VuZCA/IG9wdF9pbl9hbHRlcm5h
dGVDb2xvcnMuZ2V0KCkgOiBudWxscHRyLCBvcHRfaW5fcHJpbnRDb2xvcl92YWx1ZUZvdW5kID8g
Jm9wdF9pbl9wcmludENvbG9yIDogbnVsbHB0ciwgb3V0X2NvbHVtbk5hbWVzLCBvdXRfbm90ZXMs
IG91dF90aW1lc3RhbXAsIG91dF92YWx1ZXMsIG91dF9wYXlsb2FkLCBvdXRfZGF0YWJhc2VJZCwg
b3V0X3NxbEVycm9yLCBvdXRfc2NyZWVuQ29sb3IsIG91dF9hbHRlcm5hdGVDb2xvcnMsIG91dF9w
cmludENvbG9yKTsKKworICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIHsKKyAgICAgICAgaWYgKG91
dF9jb2x1bW5OYW1lcykKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVz
Il9zLCBvdXRfY29sdW1uTmFtZXMpOworICAgICAgICBpZiAob3V0X25vdGVzLmhhc1ZhbHVlKCkp
CisgICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZygibm90ZXMiX3MsICpvdXRfbm90ZXMpOwor
ICAgICAgICBpZiAob3V0X3RpbWVzdGFtcC5oYXNWYWx1ZSgpKQorICAgICAgICAgICAgcmVzdWx0
LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgKm91dF90aW1lc3RhbXApOworICAgICAgICBpZiAo
b3V0X3ZhbHVlcy5oYXNWYWx1ZSgpKQorICAgICAgICAgICAgcmVzdWx0LT5zZXRPYmplY3QoInZh
bHVlcyJfcywgKm91dF92YWx1ZXMpOworICAgICAgICBpZiAob3V0X3BheWxvYWQuaGFzVmFsdWUo
KSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsICpvdXRfcGF5bG9h
ZCk7CisgICAgICAgIGlmIChvdXRfZGF0YWJhc2VJZC5oYXNWYWx1ZSgpKQorICAgICAgICAgICAg
cmVzdWx0LT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCAqb3V0X2RhdGFiYXNlSWQpOworICAg
ICAgICBpZiAob3V0X3NxbEVycm9yKQorICAgICAgICAgICAgcmVzdWx0LT5zZXRPYmplY3QoInNx
bEVycm9yIl9zLCBvdXRfc3FsRXJyb3IpOworICAgICAgICBpZiAob3V0X3NjcmVlbkNvbG9yLmhh
c1ZhbHVlKCkpCisgICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3Ms
ICpvdXRfc2NyZWVuQ29sb3IpOworICAgICAgICBpZiAob3V0X2FsdGVybmF0ZUNvbG9ycykKKyAg
ICAgICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgb3V0X2FsdGVy
bmF0ZUNvbG9ycyk7CisgICAgICAgIGlmIChvdXRfcHJpbnRDb2xvci5oYXNWYWx1ZSgpKQorICAg
ICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsICpvdXRfcHJpbnRDb2xv
cik7CisgICAgfQorICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCisgICAgICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2Up
OworICAgIGVsc2UKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xF
cnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKK30K
Kwordm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlTm9PcHRpb25hbFBhcmFt
ZXRlcnMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycykK
K3sKKyAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGluX2NvbHVtbk5hbWVzID0gbV9iYWNrZW5kRGlz
cGF0Y2hlci0+Z2V0QXJyYXkocGFyYW1ldGVycy5nZXQoKSwgImNvbHVtbk5hbWVzIl9zLCBudWxs
cHRyKTsKKyAgICBTdHJpbmcgaW5fbm90ZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJp
bmcocGFyYW1ldGVycy5nZXQoKSwgIm5vdGVzIl9zLCBudWxscHRyKTsKKyAgICBkb3VibGUgaW5f
dGltZXN0YW1wID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0RG91YmxlKHBhcmFtZXRlcnMuZ2V0
KCksICJ0aW1lc3RhbXAiX3MsIG51bGxwdHIpOworICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGlu
X3ZhbHVlcyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldE9iamVjdChwYXJhbWV0ZXJzLmdldCgp
LCAidmFsdWVzIl9zLCBudWxscHRyKTsKKyAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IGluX3BheWxv
YWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRWYWx1ZShwYXJhbWV0ZXJzLmdldCgpLCAicGF5
bG9hZCJfcywgbnVsbHB0cik7CisgICAgaW50IGluX2RhdGFiYXNlSWQgPSBtX2JhY2tlbmREaXNw
YXRjaGVyLT5nZXRJbnRlZ2VyKHBhcmFtZXRlcnMuZ2V0KCksICJkYXRhYmFzZUlkIl9zLCBudWxs
cHRyKTsKKyAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBpbl9zcWxFcnJvciA9IG1fYmFja2VuZERp
c3BhdGNoZXItPmdldE9iamVjdChwYXJhbWV0ZXJzLmdldCgpLCAic3FsRXJyb3IiX3MsIG51bGxw
dHIpOworICAgIFN0cmluZyBpbl9zY3JlZW5Db2xvciA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdl
dFN0cmluZyhwYXJhbWV0ZXJzLmdldCgpLCAic2NyZWVuQ29sb3IiX3MsIG51bGxwdHIpOworICAg
IFJlZlB0cjxKU09OOjpBcnJheT4gaW5fYWx0ZXJuYXRlQ29sb3JzID0gbV9iYWNrZW5kRGlzcGF0
Y2hlci0+Z2V0QXJyYXkocGFyYW1ldGVycy5nZXQoKSwgImFsdGVybmF0ZUNvbG9ycyJfcywgbnVs
bHB0cik7CisgICAgU3RyaW5nIGluX3ByaW50Q29sb3IgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5n
ZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgInByaW50Q29sb3IiX3MsIG51bGxwdHIpOworICAg
IGlmIChtX2JhY2tlbmREaXNwYXRjaGVyLT5oYXNQcm90b2NvbEVycm9ycygpKSB7CisgICAgICAg
IG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNo
ZXI6OkludmFsaWRQYXJhbXMsICJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJ0RhdGFiYXNlLmV4
ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycycgY2FuJ3QgYmUgcHJvY2Vzc2VkIl9zKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQorICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKKyAgICAgICAgbV9hbHRl
cm5hdGVEaXNwYXRjaGVyLT5leGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMocmVxdWVzdElkLCAq
aW5fY29sdW1uTmFtZXMsIGluX25vdGVzLCBpbl90aW1lc3RhbXAsICppbl92YWx1ZXMsICppbl9w
YXlsb2FkLCBpbl9kYXRhYmFzZUlkLCAqaW5fc3FsRXJyb3IsIGluX3NjcmVlbkNvbG9yLCAqaW5f
YWx0ZXJuYXRlQ29sb3JzLCBpbl9wcmludENvbG9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworICAg
IEVycm9yU3RyaW5nIGVycm9yOworICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gb3V0
X2NvbHVtbk5hbWVzOworICAgIFN0cmluZyBvdXRfbm90ZXM7CisgICAgZG91YmxlIG91dF90aW1l
c3RhbXA7CisgICAgSlNPTjo6T2JqZWN0IG91dF92YWx1ZXM7CisgICAgSlNPTjo6VmFsdWUgb3V0
X3BheWxvYWQ7CisgICAgaW50IG91dF9kYXRhYmFzZUlkOworICAgIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IG91dF9zcWxFcnJvcjsKKyAgICBJbnNwZWN0b3I6
OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyBvdXRfc2NyZWVuQ29sb3I7CisgICAg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IG91dF9hbHRl
cm5hdGVDb2xvcnM7CisgICAgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50
Q29sb3Igb3V0X3ByaW50Q29sb3I7CisgICAgbV9hZ2VudC0+ZXhlY3V0ZU5vT3B0aW9uYWxQYXJh
bWV0ZXJzKGVycm9yLCAqaW5fY29sdW1uTmFtZXMsIGluX25vdGVzLCBpbl90aW1lc3RhbXAsICpp
bl92YWx1ZXMsICppbl9wYXlsb2FkLCBpbl9kYXRhYmFzZUlkLCAqaW5fc3FsRXJyb3IsIGluX3Nj
cmVlbkNvbG9yLCAqaW5fYWx0ZXJuYXRlQ29sb3JzLCBpbl9wcmludENvbG9yLCBvdXRfY29sdW1u
TmFtZXMsICZvdXRfbm90ZXMsICZvdXRfdGltZXN0YW1wLCBvdXRfdmFsdWVzLCAmb3V0X3BheWxv
YWQsICZvdXRfZGF0YWJhc2VJZCwgb3V0X3NxbEVycm9yLCAmb3V0X3NjcmVlbkNvbG9yLCBvdXRf
YWx0ZXJuYXRlQ29sb3JzLCAmb3V0X3ByaW50Q29sb3IpOworCisgICAgaWYgKCFlcnJvci5sZW5n
dGgoKSkgeworICAgICAgICByZXN1bHQtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgb3V0X2Nv
bHVtbk5hbWVzKTsKKyAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBvdXRfbm90
ZXMpOworICAgICAgICByZXN1bHQtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCBvdXRfdGltZXN0
YW1wKTsKKyAgICAgICAgcmVzdWx0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgb3V0X3ZhbHVlcyk7
CisgICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIG91dF9wYXlsb2FkKTsKKyAg
ICAgICAgcmVzdWx0LT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCBvdXRfZGF0YWJhc2VJZCk7
CisgICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgb3V0X3NxbEVycm9yKTsK
KyAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCBJbnNwZWN0b3I6OlBy
b3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUob3V0X3NjcmVlbkNvbG9y
KSk7CisgICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgb3V0X2Fs
dGVybmF0ZUNvbG9ycyk7CisgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9z
LCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUo
b3V0X3ByaW50Q29sb3IpKTsKKyAgICB9CisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKKyAgICAg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShy
ZXN1bHQpLCBmYWxzZSk7CisgICAgZWxzZQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5y
ZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92
ZShlcnJvcikpOworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxl
OiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250
ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1h
bmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Igewor
CitjbGFzcyBGcm9udGVuZFJvdXRlcjsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMg
RW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRl
c3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAK
KworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFy
YW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9j
b2xUeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBJbnNw
ZWN0b3IgeworCisKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworCisKKy8vIEZvcndhcmQgZGVj
bGFyYXRpb25zLgorbmFtZXNwYWNlIERhdGFiYXNlIHsKK2NsYXNzIEVycm9yOworZW51bSBjbGFz
cyBQcmltYXJ5Q29sb3JzOworfSAvLyBEYXRhYmFzZQorLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFy
YXRpb25zLgorCisKKy8vIFR5cGVkZWZzLgorbmFtZXNwYWNlIERhdGFiYXNlIHsKKy8qIFVuaXF1
ZSBpZGVudGlmaWVyIG9mIERhdGFiYXNlIG9iamVjdC4gKi8KK3R5cGVkZWYgaW50IERhdGFiYXNl
SWQ7Cit0eXBlZGVmIEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6
OlByaW1hcnlDb2xvcnM+IENvbG9yTGlzdDsKK30gLy8gRGF0YWJhc2UKKy8vIEVuZCBvZiB0eXBl
ZGVmcy4KKworbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKKworU3RyaW5nIGdldEVudW1Db25zdGFu
dFZhbHVlKGludCBjb2RlKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdldEVudW1D
b25zdGFudFZhbHVlKFQgZW51bVZhbHVlKQoreworICAgIHJldHVybiBnZXRFbnVtQ29uc3RhbnRW
YWx1ZShzdGF0aWNfY2FzdDxpbnQ+KGVudW1WYWx1ZSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBU
ZXN0SGVscGVycworCituYW1lc3BhY2UgRGF0YWJhc2UgeworLyogICovCitlbnVtIGNsYXNzIFBy
aW1hcnlDb2xvcnMgeworICAgIFJlZCA9IDAsCisgICAgR3JlZW4gPSAxLAorICAgIEJsdWUgPSAy
LAorfTsgLy8gZW51bSBjbGFzcyBQcmltYXJ5Q29sb3JzCisvKiBEYXRhYmFzZSBlcnJvci4gKi8K
K2NsYXNzIEVycm9yIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgeworcHVibGljOgorICAgIGVu
dW0geworICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCisgICAgICAgIE1lc3NhZ2VTZXQgPSAxIDw8
IDAsCisgICAgICAgIENvZGVTZXQgPSAxIDw8IDEsCisgICAgICAgIEFsbEZpZWxkc1NldCA9IChN
ZXNzYWdlU2V0IHwgQ29kZVNldCkKKyAgICB9OworCisgICAgdGVtcGxhdGU8aW50IFNUQVRFPgor
ICAgIGNsYXNzIEJ1aWxkZXIgeworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxKU09OOjpP
YmplY3Q+IG1fcmVzdWx0OworCisgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNU
QVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAq
cmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKKyAgICAgICAg
fQorCisgICAgICAgIEJ1aWxkZXIoUmVmPC8qRXJyb3IqL0pTT046Ok9iamVjdD4mJiBvYmplY3Qp
CisgICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKKyAgICAgICAgeworICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3Jl
YXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CisgICAgICAgIH0KKyAgICAgICAgZnJpZW5kIGNsYXNz
IEVycm9yOworICAgIHB1YmxpYzoKKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTWVzc2FnZVNl
dD4mIHNldE1lc3NhZ2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE1lc3NhZ2VTZXQpLCBwcm9wZXJ0eV9tZXNzYWdl
X2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1lc3NhZ2Ui
X3MsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TWVzc2FnZVNldD4oKTsK
KyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2RlU2V0PiYgc2V0Q29kZShp
bnQgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUg
JiBDb2RlU2V0KSwgcHJvcGVydHlfY29kZV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0SW50ZWdlcigiY29kZSJfcywgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNh
c3RTdGF0ZTxDb2RlU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgUmVmPEVycm9yPiByZWxl
YXNlKCkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxs
RmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKHNpemVvZihFcnJvcikgPT0gc2l6ZW9mKEpTT046Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsK
KworICAgICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4ganNvblJlc3VsdCA9IG1fcmVzdWx0LnJl
bGVhc2VOb25OdWxsKCk7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFdURk1vdmUoKnJlaW50
ZXJwcmV0X2Nhc3Q8UmVmPEVycm9yPio+KCZqc29uUmVzdWx0KSk7CisgICAgICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgICAgICB9CisgICAgfTsKKworICAgIC8qCisgICAgICogU3ludGhldGlj
IGNvbnN0cnVjdG9yOgorICAgICAqIFJlZjxFcnJvcj4gcmVzdWx0ID0gRXJyb3I6OmNyZWF0ZSgp
CisgICAgICogICAgIC5zZXRNZXNzYWdlKC4uLikKKyAgICAgKiAgICAgLnNldENvZGUoLi4uKQor
ICAgICAqICAgICAucmVsZWFzZSgpOworICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVyPE5vRmll
bGRzU2V0PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNT
ZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOworICAgIH0KK307CisKK30gLy8gRGF0YWJhc2UK
KworCisKK25hbWVzcGFjZSBUZXN0SGVscGVycyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFByb3Rv
Y29sRW51bVR5cGU+CitPcHRpb25hbDxQcm90b2NvbEVudW1UeXBlPiBwYXJzZUVudW1WYWx1ZUZy
b21TdHJpbmcoY29uc3QgU3RyaW5nJik7CisKKy8vIEVudW1zIGluIHRoZSAnRGF0YWJhc2UnIERv
bWFpbgordGVtcGxhdGU8PgorT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6
OlByaW1hcnlDb2xvcnM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4oY29uc3QgU3RyaW5nJik7CisKK30gLy8gbmFt
ZXNwYWNlIFRlc3RIZWxwZXJzCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RydWN0IERlZmF1bHRIYXNoOworCisvLyBIYXNoIGRlY2xhcmF0aW9ucyBpbiB0aGUgJ0Rh
dGFiYXNlJyBEb21haW4KK3RlbXBsYXRlPD4KK3N0cnVjdCBEZWZhdWx0SGFzaDxJbnNwZWN0b3I6
OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4geworICAgIHR5cGVkZWYgSW50SGFz
aDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gSGFzaDsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdURgorIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3Rz
LmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVy
bi1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMu
aCIKKworI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisK
K25hbWVzcGFjZSBUZXN0SGVscGVycyB7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBlbnVt
X2NvbnN0YW50X3ZhbHVlc1tdID0geworICAgICJyZWQiLAorICAgICJncmVlbiIsCisgICAgImJs
dWUiLAorICAgICJjeWFuIiwKKyAgICAibWFnZW50YSIsCisgICAgInllbGxvdyIsCisgICAgImJs
YWNrIiwKK307CisKK1N0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgeworICAg
IHJldHVybiBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb2RlXTsKK30KKworLy8gRW51bXMgaW4gdGhl
ICdEYXRhYmFzZScgRG9tYWluCit0ZW1wbGF0ZTw+CitPcHRpb25hbDxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPihjb25zdCBTdHJpbmcm
IHByb3RvY29sU3RyaW5nKQoreworICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3RhbnRWYWx1
ZXNbXSA9IHsKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6
UHJpbWFyeUNvbG9yczo6UmVkLAorICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzOjpHcmVlbiwKKyAgICAgICAgKHNpemVfdClJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9yczo6Qmx1ZSwKKyAgICB9OworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMzsgKytpKQorICAgICAgICBpZiAocHJvdG9jb2xTdHJp
bmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNbaV1dKQorICAgICAgICAg
ICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycylj
b25zdGFudFZhbHVlc1tpXTsKKworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKKworfSAv
LyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKKworCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisK
K30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9i
amVjdHMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hl
cnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0
aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+
CisKK0Bwcm90b2NvbCBUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI7CisKK25hbWVz
cGFjZSBJbnNwZWN0b3IgeworCisKK2NsYXNzIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIE9iakNJbnNw
ZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbERhdGFiYXNlRG9t
YWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQorICAgIHZpcnR1
YWwgdm9pZCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBjb25z
dCBKU09OOjpBcnJheSogaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyogaW5fbm90ZXMsIGNv
bnN0IGRvdWJsZSogaW5fdGltZXN0YW1wLCBjb25zdCBKU09OOjpPYmplY3QqIGluX3ZhbHVlcywg
Y29uc3QgSlNPTjo6VmFsdWUqIGluX3BheWxvYWQsIGNvbnN0IGludCogaW5fZGF0YWJhc2VJZCwg
Y29uc3QgSlNPTjo6T2JqZWN0KiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nKiBpbl9zY3JlZW5D
b2xvciwgY29uc3QgSlNPTjo6QXJyYXkqIGluX2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5n
KiBpbl9wcmludENvbG9yKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZU5vT3B0
aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBjb25zdCBKU09OOjpBcnJheSYgaW5fY29s
dW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgaW5fbm90ZXMsIGRvdWJsZSBpbl90aW1lc3RhbXAsIGNv
bnN0IEpTT046Ok9iamVjdCYgaW5fdmFsdWVzLCBKU09OOjpWYWx1ZSBpbl9wYXlsb2FkLCBpbnQg
aW5fZGF0YWJhc2VJZCwgY29uc3QgSlNPTjo6T2JqZWN0JiBpbl9zcWxFcnJvciwgY29uc3QgU3Ry
aW5nJiBpbl9zY3JlZW5Db2xvciwgY29uc3QgSlNPTjo6QXJyYXkmIGluX2FsdGVybmF0ZUNvbG9y
cywgY29uc3QgU3RyaW5nJiBpbl9wcmludENvbG9yKSBvdmVycmlkZTsKK3ByaXZhdGU6CisgICAg
UmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdh
dGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmln
LmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1
ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKworbmFtZXNwYWNlIElu
c3BlY3RvciB7CisKK3ZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6
OmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIGNvbnN0IEpTT046
OkFycmF5KiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nKiBpbl9ub3RlcywgY29uc3QgZG91
YmxlKiBpbl90aW1lc3RhbXAsIGNvbnN0IEpTT046Ok9iamVjdCogaW5fdmFsdWVzLCBjb25zdCBK
U09OOjpWYWx1ZSogaW5fcGF5bG9hZCwgY29uc3QgaW50KiBpbl9kYXRhYmFzZUlkLCBjb25zdCBK
U09OOjpPYmplY3QqIGluX3NxbEVycm9yLCBjb25zdCBTdHJpbmcqIGluX3NjcmVlbkNvbG9yLCBj
b25zdCBKU09OOjpBcnJheSogaW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcqIGluX3By
aW50Q29sb3IpCit7CisgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNl
bGVjdG9yKGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNXaXRoRXJyb3JDYWxsYmFjazpzdWNj
ZXNzQ2FsbGJhY2s6Y29sdW1uTmFtZXM6bm90ZXM6dGltZXN0YW1wOnZhbHVlczpwYXlsb2FkOmRh
dGFiYXNlSWQ6c3FsRXJyb3I6c2NyZWVuQ29sb3I6YWx0ZXJuYXRlQ29sb3JzOnByaW50Q29sb3I6
KV0pIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihy
ZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS5l
eGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAg
YmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewor
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJ
ZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgfTsKKworICAgIGlkIHN1
Y2Nlc3NDYWxsYmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiovICoqY29sdW1uTmFtZXMsIE5T
U3RyaW5nICoqbm90ZXMsIGRvdWJsZSAqdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3Qg
Kip2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnBheWxvYWQsIGludCAqZGF0YWJhc2VJ
ZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRh
YmFzZVByaW1hcnlDb2xvcnMgKnNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiph
bHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFy
YW1ldGVyc1ByaW50Q29sb3IgKnByaW50Q29sb3IpIHsKKyAgICAgICAgUmVmPEpTT046Ok9iamVj
dD4gcmVzdWx0T2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgVEhST1df
RVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKGNvbHVtbk5hbWVzLCBAImNvbHVt
bk5hbWVzIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFN
RVRFUihub3RlcywgQCJub3RlcyIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9P
UFRJT05BTF9QQVJBTUVURVIodmFsdWVzLCBAInZhbHVlcyIpOworICAgICAgICBUSFJPV19FWENF
UFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIocGF5bG9hZCwgQCJwYXlsb2FkIik7Cisg
ICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihzcWxFcnJv
ciwgQCJzcWxFcnJvciIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05B
TF9QQVJBTUVURVIoYWx0ZXJuYXRlQ29sb3JzLCBAImFsdGVybmF0ZUNvbG9ycyIpOworICAgICAg
ICBpZiAoY29sdW1uTmFtZXMpCisgICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJj
b2x1bW5OYW1lcyJfcywgdG9KU09OU3RyaW5nQXJyYXkoKmNvbHVtbk5hbWVzKSk7CisgICAgICAg
IGlmIChub3RlcykKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJub3RlcyJf
cywgKm5vdGVzKTsKKyAgICAgICAgaWYgKHRpbWVzdGFtcCkKKyAgICAgICAgICAgIHJlc3VsdE9i
amVjdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICp0aW1lc3RhbXApOworICAgICAgICBpZiAo
dmFsdWVzKQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInZhbHVlcyJfcywg
Wyp2YWx1ZXMgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIGlmIChwYXlsb2FkKQorICAgICAgICAg
ICAgcmVzdWx0T2JqZWN0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgWypwYXlsb2FkIHRvSlNPTk9i
amVjdF0pOworICAgICAgICBpZiAoZGF0YWJhc2VJZCkKKyAgICAgICAgICAgIHJlc3VsdE9iamVj
dC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgKmRhdGFiYXNlSWQpOworICAgICAgICBpZiAo
c3FsRXJyb3IpCisgICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdCgic3FsRXJyb3Ii
X3MsIFsqc3FsRXJyb3IgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIGlmIChzY3JlZW5Db2xvcikK
KyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgdG9Q
cm90b2NvbFN0cmluZygqc2NyZWVuQ29sb3IpKTsKKyAgICAgICAgaWYgKGFsdGVybmF0ZUNvbG9y
cykKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJf
cywgdG9KU09OU3RyaW5nQXJyYXkoKmFsdGVybmF0ZUNvbG9ycykpOworICAgICAgICBpZiAocHJp
bnRDb2xvcikKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJwcmludENvbG9y
Il9zLCB0b1Byb3RvY29sU3RyaW5nKCpwcmludENvbG9yKSk7CisgICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0T2JqZWN0KSwg
ZmFsc2UpOworICAgIH07CisKKyAgICBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKm9faW5fY29sdW1u
TmFtZXM7CisgICAgaWYgKGluX2NvbHVtbk5hbWVzKQorICAgICAgICBvX2luX2NvbHVtbk5hbWVz
ID0gdG9PYmpDU3RyaW5nQXJyYXkoaW5fY29sdW1uTmFtZXMpOworICAgIE5TU3RyaW5nICpvX2lu
X25vdGVzOworICAgIGlmIChpbl9ub3RlcykKKyAgICAgICAgb19pbl9ub3RlcyA9ICppbl9ub3Rl
czsKKyAgICBkb3VibGUgb19pbl90aW1lc3RhbXA7CisgICAgaWYgKGluX3RpbWVzdGFtcCkKKyAg
ICAgICAgb19pbl90aW1lc3RhbXAgPSAqaW5fdGltZXN0YW1wOworICAgIFJXSVByb3RvY29sSlNP
Tk9iamVjdCAqb19pbl92YWx1ZXM7CisgICAgaWYgKGluX3ZhbHVlcykKKyAgICAgICAgb19pbl92
YWx1ZXMgPSBbW1tSV0lQcm90b2NvbEpTT05PYmplY3QgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVj
dDppbl92YWx1ZXNdIGF1dG9yZWxlYXNlXTsKKyAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9f
aW5fcGF5bG9hZDsKKyAgICBpZiAoaW5fcGF5bG9hZCkKKyAgICAgICAgb19pbl9wYXlsb2FkID0g
W1tbUldJUHJvdG9jb2xKU09OT2JqZWN0IGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6aW5fcGF5
bG9hZF0gYXV0b3JlbGVhc2VdOworICAgIGludCBvX2luX2RhdGFiYXNlSWQ7CisgICAgaWYgKGlu
X2RhdGFiYXNlSWQpCisgICAgICAgIG9faW5fZGF0YWJhc2VJZCA9ICppbl9kYXRhYmFzZUlkOwor
ICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKm9faW5fc3FsRXJyb3I7CisgICAgaWYgKGlu
X3NxbEVycm9yKQorICAgICAgICBvX2luX3NxbEVycm9yID0gW1tbVGVzdFByb3RvY29sRGF0YWJh
c2VFcnJvciBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0OmluX3NxbEVycm9yXSBhdXRvcmVsZWFz
ZV07CisgICAgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzPiBvX2lu
X3NjcmVlbkNvbG9yOworICAgIGlmIChpbl9zY3JlZW5Db2xvcikKKyAgICAgICAgb19pbl9zY3Jl
ZW5Db2xvciA9IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlD
b2xvcnM+KCppbl9zY3JlZW5Db2xvcik7CisgICAgTlNBcnJheS8qPE5TU3RyaW5nPiovICpvX2lu
X2FsdGVybmF0ZUNvbG9yczsKKyAgICBpZiAoaW5fYWx0ZXJuYXRlQ29sb3JzKQorICAgICAgICBv
X2luX2FsdGVybmF0ZUNvbG9ycyA9IHRvT2JqQ1N0cmluZ0FycmF5KGluX2FsdGVybmF0ZUNvbG9y
cyk7CisgICAgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQ
YXJhbWV0ZXJzUHJpbnRDb2xvcj4gb19pbl9wcmludENvbG9yOworICAgIGlmIChpbl9wcmludENv
bG9yKQorICAgICAgICBvX2luX3ByaW50Q29sb3IgPSBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFBy
b3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvcj4oKmlu
X3ByaW50Q29sb3IpOworCisgICAgW21fZGVsZWdhdGUgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1l
dGVyc1dpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nl
c3NDYWxsYmFjayBjb2x1bW5OYW1lczooaW5fY29sdW1uTmFtZXMgPyAmb19pbl9jb2x1bW5OYW1l
cyA6IG5pbCkgbm90ZXM6KGluX25vdGVzID8gJm9faW5fbm90ZXMgOiBuaWwpIHRpbWVzdGFtcDoo
aW5fdGltZXN0YW1wID8gJm9faW5fdGltZXN0YW1wIDogbmlsKSB2YWx1ZXM6KGluX3ZhbHVlcyA/
ICZvX2luX3ZhbHVlcyA6IG5pbCkgcGF5bG9hZDooaW5fcGF5bG9hZCA/ICZvX2luX3BheWxvYWQg
OiBuaWwpIGRhdGFiYXNlSWQ6KGluX2RhdGFiYXNlSWQgPyAmb19pbl9kYXRhYmFzZUlkIDogbmls
KSBzcWxFcnJvcjooaW5fc3FsRXJyb3IgPyAmb19pbl9zcWxFcnJvciA6IG5pbCkgc2NyZWVuQ29s
b3I6KGluX3NjcmVlbkNvbG9yID8gJm9faW5fc2NyZWVuQ29sb3IudmFsdWUoKSA6IG5pbCkgYWx0
ZXJuYXRlQ29sb3JzOihpbl9hbHRlcm5hdGVDb2xvcnMgPyAmb19pbl9hbHRlcm5hdGVDb2xvcnMg
OiBuaWwpIHByaW50Q29sb3I6KGluX3ByaW50Q29sb3IgPyAmb19pbl9wcmludENvbG9yLnZhbHVl
KCkgOiBuaWwpXTsKK30KKwordm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlcjo6ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBjb25zdCBK
U09OOjpBcnJheSYgaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgaW5fbm90ZXMsIGRvdWJs
ZSBpbl90aW1lc3RhbXAsIGNvbnN0IEpTT046Ok9iamVjdCYgaW5fdmFsdWVzLCBKU09OOjpWYWx1
ZSBpbl9wYXlsb2FkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgSlNPTjo6T2JqZWN0JiBpbl9z
cWxFcnJvciwgY29uc3QgU3RyaW5nJiBpbl9zY3JlZW5Db2xvciwgY29uc3QgSlNPTjo6QXJyYXkm
IGluX2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBpbl9wcmludENvbG9yKQoreworICAg
IGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihleGVjdXRlTm9P
cHRpb25hbFBhcmFtZXRlcnNXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6Y29sdW1u
TmFtZXM6bm90ZXM6dGltZXN0YW1wOnZhbHVlczpwYXlsb2FkOmRhdGFiYXNlSWQ6c3FsRXJyb3I6
c2NyZWVuQ29sb3I6YWx0ZXJuYXRlQ29sb3JzOnByaW50Q29sb3I6KV0pIHsKKyAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmRE
aXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS5leGVjdXRlTm9PcHRpb25hbFBh
cmFtZXRlcnMnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigp
LT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWQg
ZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7CisgICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hl
cjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2Vu
ZFBlbmRpbmdFcnJvcnMoKTsKKyAgICB9OworCisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihO
U0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqbm90ZXMsIGRvdWJs
ZSB0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqdmFsdWVzLCBSV0lQcm90b2NvbEpT
T05PYmplY3QgKnBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVy
cm9yICpzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzIHNjcmVlbkNv
bG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29s
RGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yIHByaW50Q29sb3Ip
IHsKKyAgICAgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVU
RVIoY29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIobm90ZXMsIEAibm90ZXMiKTsKKyAgICAgICAgVEhST1df
RVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIodmFsdWVzLCBAInZhbHVlcyIpOworICAg
ICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihwYXlsb2FkLCBAInBh
eWxvYWQiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIo
c3FsRXJyb3IsIEAic3FsRXJyb3IiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFV
SVJFRF9QQVJBTUVURVIoYWx0ZXJuYXRlQ29sb3JzLCBAImFsdGVybmF0ZUNvbG9ycyIpOworICAg
ICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgdG9KU09OU3RyaW5n
QXJyYXkoY29sdW1uTmFtZXMpKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoIm5v
dGVzIl9zLCBub3Rlcyk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0RG91YmxlKCJ0aW1lc3Rh
bXAiX3MsIHRpbWVzdGFtcCk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KCJ2YWx1
ZXMiX3MsIFt2YWx1ZXMgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0
VmFsdWUoInBheWxvYWQiX3MsIFtwYXlsb2FkIHRvSlNPTk9iamVjdF0pOworICAgICAgICByZXN1
bHRPYmplY3QtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsIGRhdGFiYXNlSWQpOworICAgICAg
ICByZXN1bHRPYmplY3QtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIFtzcWxFcnJvciB0b0pTT05P
YmplY3RdKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9z
LCB0b1Byb3RvY29sU3RyaW5nKHNjcmVlbkNvbG9yKSk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+
c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5nQXJyYXkoYWx0ZXJuYXRl
Q29sb3JzKSk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9z
LCB0b1Byb3RvY29sU3RyaW5nKHByaW50Q29sb3IpKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHRPYmplY3QpLCBmYWxz
ZSk7CisgICAgfTsKKworICAgIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqb19pbl9jb2x1bW5OYW1l
cyA9IHRvT2JqQ1N0cmluZ0FycmF5KCZpbl9jb2x1bW5OYW1lcyk7CisgICAgTlNTdHJpbmcgKm9f
aW5fbm90ZXMgPSBpbl9ub3RlczsKKyAgICBkb3VibGUgb19pbl90aW1lc3RhbXAgPSBpbl90aW1l
c3RhbXA7CisgICAgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvX2luX3ZhbHVlcyA9IFtbW1JXSVBy
b3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0OiZpbl92YWx1ZXNdIGF1
dG9yZWxlYXNlXTsKKyAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9faW5fcGF5bG9hZCA9IFtb
W1JXSVByb3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0OiZpbl9wYXls
b2FkXSBhdXRvcmVsZWFzZV07CisgICAgaW50IG9faW5fZGF0YWJhc2VJZCA9IGluX2RhdGFiYXNl
SWQ7CisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqb19pbl9zcWxFcnJvciA9IFtbW1Rl
c3RQcm90b2NvbERhdGFiYXNlRXJyb3IgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDomaW5fc3Fs
RXJyb3JdIGF1dG9yZWxlYXNlXTsKKyAgICBPcHRpb25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZVBy
aW1hcnlDb2xvcnM+IG9faW5fc2NyZWVuQ29sb3IgPSBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFBy
b3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzPihpbl9zY3JlZW5Db2xvcik7CisgICAgaWYgKCFv
X2luX3NjcmVlbkNvbG9yKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFBy
b3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsICJQYXJhbWV0ZXIg
J3NjcmVlbkNvbG9yJyBvZiBtZXRob2QgJ0RhdGFiYXNlLmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1l
dGVycycgY2Fubm90IGJlIHByb2Nlc3NlZCJfcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgTlNBcnJheS8qPE5TU3RyaW5nPiovICpvX2luX2FsdGVybmF0ZUNvbG9ycyA9IHRvT2JqQ1N0
cmluZ0FycmF5KCZpbl9hbHRlcm5hdGVDb2xvcnMpOworICAgIE9wdGlvbmFsPFRlc3RQcm90b2Nv
bERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvcj4gb19pbl9wcmlu
dENvbG9yID0gZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5v
T3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvcj4oaW5fcHJpbnRDb2xvcik7CisgICAgaWYgKCFv
X2luX3ByaW50Q29sb3IpIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJv
dG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgIlBhcmFtZXRlciAn
cHJpbnRDb2xvcicgb2YgbWV0aG9kICdEYXRhYmFzZS5leGVjdXRlTm9PcHRpb25hbFBhcmFtZXRl
cnMnIGNhbm5vdCBiZSBwcm9jZXNzZWQiX3MpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgW21fZGVsZWdhdGUgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzV2l0aEVycm9yQ2FsbGJh
Y2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrIGNvbHVtbk5h
bWVzOm9faW5fY29sdW1uTmFtZXMgbm90ZXM6b19pbl9ub3RlcyB0aW1lc3RhbXA6b19pbl90aW1l
c3RhbXAgdmFsdWVzOm9faW5fdmFsdWVzIHBheWxvYWQ6b19pbl9wYXlsb2FkIGRhdGFiYXNlSWQ6
b19pbl9kYXRhYmFzZUlkIHNxbEVycm9yOm9faW5fc3FsRXJyb3Igc2NyZWVuQ29sb3I6b19pbl9z
Y3JlZW5Db2xvci52YWx1ZSgpIGFsdGVybmF0ZUNvbG9yczpvX2luX2FsdGVybmF0ZUNvbG9ycyBw
cmludENvbG9yOm9faW5fcHJpbnRDb2xvci52YWx1ZSgpXTsKK30KKworCit9IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hl
cnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2Fs
bC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KKworX19h
dHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90
b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAorQHByb3BlcnR5IChub25hdG9taWMsIHJldGFp
biwgc2V0dGVyPXNldERhdGFiYXNlSGFuZGxlcjopIGlkPFRlc3RQcm90b2NvbERhdGFiYXNlRG9t
YWluSGFuZGxlcj4gZGF0YWJhc2VIYW5kbGVyOworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xD
b25maWd1cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFu
ZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sQ29u
ZmlndXJhdGlvbi5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2ltcG9y
dCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0
Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENv
cmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgorCit1c2luZyBuYW1l
c3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJh
dGlvbgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7
CisgICAgaWQ8VGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyPiBfZGF0YWJhc2VIYW5k
bGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJs
ZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGlu
aXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29u
dHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVybiBzZWxm
OworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbX2RhdGFiYXNlSGFuZGxlciByZWxlYXNl
XTsKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0gKHZvaWQpc2V0RGF0YWJhc2VIYW5kbGVy
OihpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+KWhhbmRsZXIKK3sKKyAgICBp
ZiAoaGFuZGxlciA9PSBfZGF0YWJhc2VIYW5kbGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBb
X2RhdGFiYXNlSGFuZGxlciByZWxlYXNlXTsKKyAgICBfZGF0YWJhc2VIYW5kbGVyID0gW2hhbmRs
ZXIgcmV0YWluXTsKKworICAgIGF1dG8gYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IG1ha2VVbmlxdWU8
T2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+KGhhbmRsZXIpOworICAgIGF1
dG8gYWx0ZXJuYXRlQWdlbnQgPSBtYWtlVW5pcXVlPEFsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50
PERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIsIEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3Bh
dGNoZXI+PigiRGF0YWJhc2UiX3MsICpfY29udHJvbGxlciwgV1RGTW92ZShhbHRlcm5hdGVEaXNw
YXRjaGVyKSk7CisgICAgX2NvbnRyb2xsZXItPmFwcGVuZEV4dHJhQWdlbnQoV1RGTW92ZShhbHRl
cm5hdGVBZ2VudCkpOworfQorCistIChpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRs
ZXI+KWRhdGFiYXNlSGFuZGxlcgoreworICAgIHJldHVybiBfZGF0YWJhc2VIYW5kbGVyOworfQor
CitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisK
KyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJl
dHVybi1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgor
Cit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sRXZlbnREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFs
LWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKworI2lt
cG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgorCisKK0BjbGFzcyBU
ZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yOworCisKK3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIs
IFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycykgeworICAgIFRlc3RQcm90b2NvbERh
dGFiYXNlUHJpbWFyeUNvbG9yc1JlZCwKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlD
b2xvcnNHcmVlbiwKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNCbHVlLAor
fTsKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVj
dXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvcikgeworICAgIFRlc3RQcm90b2NvbERh
dGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JDeWFuLAorICAgIFRl
c3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JN
YWdlbnRhLAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1l
dGVyc1ByaW50Q29sb3JZZWxsb3csCisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxs
T3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckJsYWNrLAorfTsKKwordHlwZWRlZiBOU19FTlVN
KE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0
ZXJzUHJpbnRDb2xvcikgeworICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlv
bmFsUGFyYW1ldGVyc1ByaW50Q29sb3JDeWFuLAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhl
Y3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JNYWdlbnRhLAorICAgIFRlc3RQcm90
b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JZZWxsb3cs
CisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJp
bnRDb2xvckJsYWNrLAorfTsKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3Rv
Y29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yKSB7CisgICAg
VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9y
Q3lhbiwKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVy
c1ByaW50Q29sb3JNYWdlbnRhLAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0
aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvclllbGxvdywKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFz
ZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JCbGFjaywKK307CisKK3R5cGVk
ZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9u
YWxQYXJhbWV0ZXJzUHJpbnRDb2xvcikgeworICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0
ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckN5YW4sCisgICAgVGVzdFByb3RvY29sRGF0
YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yTWFnZW50YSwKKyAgICBU
ZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JZ
ZWxsb3csCisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRl
cnNQcmludENvbG9yQmxhY2ssCit9OworCisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJk
ZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIDogUldJUHJv
dG9jb2xKU09OT2JqZWN0CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rp
b25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0
aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OworLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlIGNvZGU6KGlu
dCljb2RlOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3Ry
aW5nICptZXNzYWdlOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2ln
bikgaW50IGNvZGU7CitAZW5kCisKK0Bwcm90b2NvbCBUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFp
bkhhbmRsZXIgPE5TT2JqZWN0PgorQG9wdGlvbmFsCistICh2b2lkKWV4ZWN1dGVBbGxPcHRpb25h
bFBhcmFtZXRlcnNXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVy
cm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0cmluZz4q
LyAqKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqKm5vdGVzLCBkb3VibGUgKnRpbWVzdGFtcCwgUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICoqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipwYXls
b2FkLCBpbnQgKmRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipzcWxFcnJv
ciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzICpzY3JlZW5Db2xvciwgTlNBcnJh
eS8qPE5TU3RyaW5nPiovICoqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yICpwcmludENvbG9yKSlzdWNjZXNz
Q2FsbGJhY2sgY29sdW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKiljb2x1bW5OYW1l
cyBub3RlczooTlNTdHJpbmcgKiopbm90ZXMgdGltZXN0YW1wOihkb3VibGUgKil0aW1lc3RhbXAg
dmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKiopdmFsdWVzIHBheWxvYWQ6KFJXSVByb3Rv
Y29sSlNPTk9iamVjdCAqKilwYXlsb2FkIGRhdGFiYXNlSWQ6KGludCAqKWRhdGFiYXNlSWQgc3Fs
RXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKiopc3FsRXJyb3Igc2NyZWVuQ29sb3I6
KFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqKXNjcmVlbkNvbG9yIGFsdGVybmF0
ZUNvbG9yczooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKWFsdGVybmF0ZUNvbG9ycyBwcmludENv
bG9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmlu
dENvbG9yICopcHJpbnRDb2xvcjsKKy0gKHZvaWQpZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJz
V2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNr
IHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKShOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmNvbHVtbk5h
bWVzLCBOU1N0cmluZyAqbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9i
amVjdCAqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnBheWxvYWQsIGludCBkYXRhYmFz
ZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0
YWJhc2VQcmltYXJ5Q29sb3JzIHNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmFs
dGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFt
ZXRlcnNQcmludENvbG9yIHByaW50Q29sb3IpKXN1Y2Nlc3NDYWxsYmFjayBjb2x1bW5OYW1lczoo
TlNBcnJheS8qPE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMgbm90ZXM6KE5TU3RyaW5nICopbm90
ZXMgdGltZXN0YW1wOihkb3VibGUpdGltZXN0YW1wIHZhbHVlczooUldJUHJvdG9jb2xKU09OT2Jq
ZWN0ICopdmFsdWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQgZGF0
YWJhc2VJZDooaW50KWRhdGFiYXNlSWQgc3FsRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJy
b3IgKilzcWxFcnJvciBzY3JlZW5Db2xvcjooVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29s
b3JzKXNjcmVlbkNvbG9yIGFsdGVybmF0ZUNvbG9yczooTlNBcnJheS8qPE5TU3RyaW5nPiovICop
YWx0ZXJuYXRlQ29sb3JzIHByaW50Q29sb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5v
T3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvcilwcmludENvbG9yOworQGVuZAorCisKKworCisj
aW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3Rz
Lmg+CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKKworIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbEludGVybmFsLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBj
b21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9j
b2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCisjaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBv
cnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKKworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
SW50ZXJuYWwuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
LmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlv
bmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgPFdl
Ykluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KKworbmFtZXNwYWNlIElu
c3BlY3RvciB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KK09wdGlvbmFsPE9i
akNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOworCisK
K2lubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1h
cnlDb2xvcnMgdmFsdWUpCit7CisgICAgc3dpdGNoKHZhbHVlKSB7CisgICAgY2FzZSBUZXN0UHJv
dG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNSZWQ6CisgICAgICAgIHJldHVybiAicmVkIl9zOwor
ICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzR3JlZW46CisgICAgICAg
IHJldHVybiAiZ3JlZW4iX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlD
b2xvcnNCbHVlOgorICAgICAgICByZXR1cm4gImJsdWUiX3M7CisgICAgfQorfQorCit0ZW1wbGF0
ZTw+CitpbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzPiBm
cm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUg
PT0gInJlZCIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xv
cnNSZWQ7CisgICAgaWYgKHZhbHVlID09ICJncmVlbiIpCisgICAgICAgIHJldHVybiBUZXN0UHJv
dG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNHcmVlbjsKKyAgICBpZiAodmFsdWUgPT0gImJsdWUi
KQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzQmx1ZTsK
KyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCitpbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xT
dHJpbmcoVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJp
bnRDb2xvciB2YWx1ZSkKK3sKKyAgICBzd2l0Y2godmFsdWUpIHsKKyAgICBjYXNlIFRlc3RQcm90
b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JDeWFuOgor
ICAgICAgICByZXR1cm4gImN5YW4iX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yTWFnZW50YToKKyAgICAgICAgcmV0
dXJuICJtYWdlbnRhIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxs
T3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvclllbGxvdzoKKyAgICAgICAgcmV0dXJuICJ5ZWxs
b3ciX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBh
cmFtZXRlcnNQcmludENvbG9yQmxhY2s6CisgICAgICAgIHJldHVybiAiYmxhY2siX3M7CisgICAg
fQorfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VF
eGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvcj4gZnJvbVByb3RvY29sU3RyaW5n
KGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09ICJjeWFuIikKKyAgICAg
ICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVy
c1ByaW50Q29sb3JDeWFuOworICAgIGlmICh2YWx1ZSA9PSAibWFnZW50YSIpCisgICAgICAgIHJl
dHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmlu
dENvbG9yTWFnZW50YTsKKyAgICBpZiAodmFsdWUgPT0gInllbGxvdyIpCisgICAgICAgIHJldHVy
biBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENv
bG9yWWVsbG93OworICAgIGlmICh2YWx1ZSA9PSAiYmxhY2siKQorICAgICAgICByZXR1cm4gVGVz
dFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckJs
YWNrOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK2lubGluZSBTdHJpbmcgdG9Qcm90
b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRl
cnNQcmludENvbG9yIHZhbHVlKQoreworICAgIHN3aXRjaCh2YWx1ZSkgeworICAgIGNhc2UgVGVz
dFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckN5
YW46CisgICAgICAgIHJldHVybiAiY3lhbiJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFi
YXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JNYWdlbnRhOgorICAgICAg
ICByZXR1cm4gIm1hZ2VudGEiX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yWWVsbG93OgorICAgICAgICByZXR1cm4g
InllbGxvdyJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlv
bmFsUGFyYW1ldGVyc1ByaW50Q29sb3JCbGFjazoKKyAgICAgICAgcmV0dXJuICJibGFjayJfczsK
KyAgICB9Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xEYXRh
YmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yPiBmcm9tUHJvdG9jb2xT
dHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gImN5YW4iKQor
ICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJh
bWV0ZXJzUHJpbnRDb2xvckN5YW47CisgICAgaWYgKHZhbHVlID09ICJtYWdlbnRhIikKKyAgICAg
ICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVy
c1ByaW50Q29sb3JNYWdlbnRhOworICAgIGlmICh2YWx1ZSA9PSAieWVsbG93IikKKyAgICAgICAg
cmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1By
aW50Q29sb3JZZWxsb3c7CisgICAgaWYgKHZhbHVlID09ICJibGFjayIpCisgICAgICAgIHJldHVy
biBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENv
bG9yQmxhY2s7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKworaW5saW5lIFN0cmluZyB0
b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJh
bWV0ZXJzUHJpbnRDb2xvciB2YWx1ZSkKK3sKKyAgICBzd2l0Y2godmFsdWUpIHsKKyAgICBjYXNl
IFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xv
ckN5YW46CisgICAgICAgIHJldHVybiAiY3lhbiJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERh
dGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvck1hZ2VudGE6CisgICAg
ICAgIHJldHVybiAibWFnZW50YSJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhl
Y3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvclllbGxvdzoKKyAgICAgICAgcmV0dXJu
ICJ5ZWxsb3ciX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlv
bmFsUGFyYW1ldGVyc1ByaW50Q29sb3JCbGFjazoKKyAgICAgICAgcmV0dXJuICJibGFjayJfczsK
KyAgICB9Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xEYXRh
YmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3I+IGZyb21Qcm90b2NvbFN0
cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSAiY3lhbiIpCisg
ICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1l
dGVyc1ByaW50Q29sb3JDeWFuOworICAgIGlmICh2YWx1ZSA9PSAibWFnZW50YSIpCisgICAgICAg
IHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1By
aW50Q29sb3JNYWdlbnRhOworICAgIGlmICh2YWx1ZSA9PSAieWVsbG93IikKKyAgICAgICAgcmV0
dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRD
b2xvclllbGxvdzsKKyAgICBpZiAodmFsdWUgPT0gImJsYWNrIikKKyAgICAgICAgcmV0dXJuIFRl
c3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckJs
YWNrOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK2lubGluZSBTdHJpbmcgdG9Qcm90
b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVy
c1ByaW50Q29sb3IgdmFsdWUpCit7CisgICAgc3dpdGNoKHZhbHVlKSB7CisgICAgY2FzZSBUZXN0
UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JDeWFu
OgorICAgICAgICByZXR1cm4gImN5YW4iX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFz
ZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JNYWdlbnRhOgorICAgICAgICBy
ZXR1cm4gIm1hZ2VudGEiX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVO
b09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JZZWxsb3c6CisgICAgICAgIHJldHVybiAieWVs
bG93Il9zOworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBh
cmFtZXRlcnNQcmludENvbG9yQmxhY2s6CisgICAgICAgIHJldHVybiAiYmxhY2siX3M7CisgICAg
fQorfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VF
eGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yPiBmcm9tUHJvdG9jb2xTdHJpbmco
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gImN5YW4iKQorICAgICAg
ICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQ
cmludENvbG9yQ3lhbjsKKyAgICBpZiAodmFsdWUgPT0gIm1hZ2VudGEiKQorICAgICAgICByZXR1
cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENv
bG9yTWFnZW50YTsKKyAgICBpZiAodmFsdWUgPT0gInllbGxvdyIpCisgICAgICAgIHJldHVybiBU
ZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JZ
ZWxsb3c7CisgICAgaWYgKHZhbHVlID09ICJibGFjayIpCisgICAgICAgIHJldHVybiBUZXN0UHJv
dG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JCbGFjazsK
KyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
KworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorCisjIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJh
bWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisKKyNpbXBvcnQgIlRlc3RQ
cm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgorI2ltcG9ydCA8
V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKwordXNpbmcgbmFt
ZXNwYWNlIEluc3BlY3RvcjsKKworQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMgKERhdGFiYXNlRG9tYWluKQorCisrICh2b2lkKV9wYXJzZURhdGFiYXNlSWQ6KE5TTnVtYmVy
ICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworKyAodm9pZClfcGFyc2VQcmlt
YXJ5Q29sb3JzOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsK
KysgKHZvaWQpX3BhcnNlQ29sb3JMaXN0OihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopb3V0VmFs
dWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisrICh2b2lkKV9wYXJzZUVycm9yOihUZXN0UHJv
dG9jb2xEYXRhYmFzZUVycm9yICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwor
CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKERh
dGFiYXNlRG9tYWluKQorCisrICh2b2lkKV9wYXJzZURhdGFiYXNlSWQ6KE5TTnVtYmVyICoqKW91
dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9CQURfVFlQRShwYXlsb2FkLCBbTlNOdW1iZXIgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSAo
TlNOdW1iZXIgKilwYXlsb2FkOworfQorCisrICh2b2lkKV9wYXJzZVByaW1hcnlDb2xvcnM6KE5T
TnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1df
RVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKKyAgICBP
cHRpb25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnM+IHJlc3VsdCA9IEluc3Bl
Y3Rvcjo6ZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9y
cz4ocGF5bG9hZCk7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfRU5VTV9WQUxVRShyZXN1
bHQsIEAiUHJpbWFyeUNvbG9ycyIpOworICAgICpvdXRWYWx1ZSA9IEAocmVzdWx0LnZhbHVlKCkp
OworfQorCisrICh2b2lkKV9wYXJzZUNvbG9yTGlzdDooTlNBcnJheS8qPE5TU3RyaW5nPiovICoq
KW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNBcnJheS8qPE5TU3RyaW5nPiovIGNsYXNzXSk7Cisg
ICAgKm91dFZhbHVlID0gKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKXBheWxvYWQ7Cit9CisKKysg
KHZvaWQpX3BhcnNlRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKiopb3V0VmFsdWUg
ZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9U
WVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSBbW1Rl
c3RQcm90b2NvbERhdGFiYXNlRXJyb3IgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsK
K30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
Lm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4t
cGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29s
SlNPTk9iamVjdFByaXZhdGUuaD4KKyNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW1wb3J0
IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisKK0Bp
bXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yCisKKy0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAq
KXBheWxvYWQKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0
dXJuIG5pbDsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5
bG9hZFtAIm1lc3NhZ2UiXSwgQCJtZXNzYWdlIik7CisgICAgc2VsZi5tZXNzYWdlID0gcGF5bG9h
ZFtAIm1lc3NhZ2UiXTsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVS
VFkocGF5bG9hZFtAImNvZGUiXSwgQCJjb2RlIik7CisgICAgc2VsZi5jb2RlID0gW3BheWxvYWRb
QCJjb2RlIl0gaW50ZWdlclZhbHVlXTsKKworICAgIHJldHVybiBzZWxmOworfQorLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9i
amVjdAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmpl
Y3QgdG9KU09OT2JqZWN0XS5nZXQoKV0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgcmV0
dXJuIHNlbGY7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3RyaW5n
ICopbWVzc2FnZSBjb2RlOihpbnQpY29kZQoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5p
dF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFV
SVJFRF9QUk9QRVJUWShtZXNzYWdlLCBAIm1lc3NhZ2UiKTsKKworICAgIHNlbGYubWVzc2FnZSA9
IG1lc3NhZ2U7CisgICAgc2VsZi5jb2RlID0gY29kZTsKKworICAgIHJldHVybiBzZWxmOworfQor
CistICh2b2lkKXNldE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZQoreworICAgIFtzdXBlciBz
ZXRTdHJpbmc6bWVzc2FnZSBmb3JLZXk6QCJtZXNzYWdlIl07Cit9CisKKy0gKE5TU3RyaW5nICop
bWVzc2FnZQoreworICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAibWVzc2FnZSJdOwor
fQorCistICh2b2lkKXNldENvZGU6KGludCljb2RlCit7CisgICAgW3N1cGVyIHNldEludGVnZXI6
Y29kZSBmb3JLZXk6QCJjb2RlIl07Cit9CisKKy0gKGludCljb2RlCit7CisgICAgcmV0dXJuIFtz
dXBlciBpbnRlZ2VyRm9yS2V5OkAiY29kZSJdOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RlZmluaXRpb25zLXdpdGgtbWFjLXBs
YXRmb3JtLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24tcmVz
dWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xOTlmMjVlZDdlMgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9leHBlY3RlZC9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uLXJlc3Vs
dApAQCAtMCwwICsxLDEyMjggQEAKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29t
bWFuZHMuanMKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13
aXRoLW1hYy1wbGF0Zm9ybS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKy8vIE5ldHdvcmsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIk5l
dHdvcmsiLCBudWxsKTsKKyNpZiBQTEFURk9STShNQUMpCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lz
dGVyQ29tbWFuZCgiTmV0d29yay5sb2FkUmVzb3VyY2UiLCBudWxsLCBbXSwgW10pOworI2VuZGlm
IC8vIFBMQVRGT1JNKE1BQykKKyNpZiBQTEFURk9STShNQUMpCitJbnNwZWN0b3JCYWNrZW5kLnJl
Z2lzdGVyRXZlbnQoIk5ldHdvcmsucmVzb3VyY2VMb2FkZWQiLCBudWxsLCBbXSk7CisjZW5kaWYg
Ly8gUExBVEZPUk0oTUFDKQorSW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rlck5ldHdvcmtEaXNwYXRj
aGVyID0gSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRpc3BhdGNoZXIuYmluZChJbnNwZWN0b3JC
YWNrZW5kLCAiTmV0d29yayIpOworSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiTmV0
d29yayIsIG51bGwpOworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMK
KworIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRm
b3JtLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3By
YWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
KworI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwor
Y2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHZvaWQgc2V0
QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIp
IHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KKyAgICBCYWNr
ZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tl
bmREaXNwYXRjaGVyLmdldCgpOyB9Citwcml2YXRlOgorICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0
Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKK307CisKKworY2xhc3MgQWx0ZXJuYXRlTmV0d29y
a0JhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsK
K3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5BbHRlcm5hdGVOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIo
KSB7IH0KKyNpZiBQTEFURk9STShNQUMpCisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZShs
b25nIGNhbGxJZCkgPSAwOworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKK307CisKK30gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCisjIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hl
cnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0u
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJp
bmcgRXJyb3JTdHJpbmc7CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKK2NsYXNzIEFsdGVybmF0ZU5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjsKKyNlbmRpZiAv
LyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworY2xhc3MgTmV0d29y
a0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CitwdWJsaWM6CisjaWYgUExBVEZPUk0oTUFDKQor
ICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UoRXJyb3JTdHJpbmcmKSA9IDA7CisjZW5kaWYg
Ly8gUExBVEZPUk0oTUFDKQorcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgfk5ldHdvcmtCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIoKTsKK307CisKK2NsYXNzIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hl
ciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6
CisgICAgc3RhdGljIFJlZjxOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5k
RGlzcGF0Y2hlciYsIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICB2b2lk
IGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046
Ok9iamVjdD4mJiBtZXNzYWdlKSBvdmVycmlkZTsKK3ByaXZhdGU6CisjaWYgUExBVEZPUk0oTUFD
KQorICAgIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmIHBhcmFtZXRlcnMpOworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKKyNpZiBFTkFCTEUo
SU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK3B1YmxpYzoKKyAgICB2b2lkIHNldEFs
dGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyKiBhbHRl
cm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3Bh
dGNoZXI7IH0KK3ByaXZhdGU6CisgICAgQWx0ZXJuYXRlTmV0d29ya0JhY2tlbmREaXNwYXRjaGVy
KiBtX2FsdGVybmF0ZURpc3BhdGNoZXIgeyBudWxscHRyIH07CisjZW5kaWYgLy8gRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCitwcml2YXRlOgorICAgIE5ldHdvcmtCYWNr
ZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYsIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIqKTsKKyAgICBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50
IHsgbnVsbHB0ciB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZp
bGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tl
bmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZp
bml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0QmFj
a2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JG
cm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8
d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCisj
aWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjaW5jbHVkZSAiVGVz
dEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgorI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworTmV0
d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6fk5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXIoKSB7IH0KKworUmVmPE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcj4gTmV0d29ya0JhY2tl
bmREaXNwYXRjaGVyOjpjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVy
LCBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKK3sKKyAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIs
IGFnZW50KSk7Cit9CisKK05ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjo6TmV0d29ya0JhY2tlbmRE
aXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgTmV0d29ya0Jh
Y2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCisgICAgOiBTdXBwbGVtZW50YWxCYWNrZW5k
RGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKKyAgICAsIG1fYWdlbnQoYWdlbnQpCit7Cisg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKCJOZXR3
b3JrIl9zLCB0aGlzKTsKK30KKwordm9pZCBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI6OmRpc3Bh
dGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVj
dD4mJiBtZXNzYWdlKQoreworICAgIFJlZjxOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI+IHByb3Rl
Y3QoKnRoaXMpOworCisgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVyczsKKyAgICBt
ZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFyYW1ldGVycyk7CisKKyNpZiBQTEFURk9S
TShNQUMpCisgICAgaWYgKG1ldGhvZCA9PSAibG9hZFJlc291cmNlIikgeworICAgICAgICBsb2Fk
UmVzb3VyY2UocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCisKKyAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3Vu
ZCwgIidOZXR3b3JrLiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7Cit9CisKKyNpZiBQ
TEFURk9STShNQUMpCit2b2lkIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNl
KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQoreworI2lmIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorICAgIGlmIChtX2FsdGVybmF0ZURpc3Bh
dGNoZXIpIHsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2UocmVx
dWVzdElkKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAg
IFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAg
bV9hZ2VudC0+bG9hZFJlc291cmNlKGVycm9yKTsKKworICAgIGlmICghZXJyb3IubGVuZ3RoKCkp
CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdU
Rk1vdmUocmVzdWx0KSwgZmFsc2UpOworICAgIGVsc2UKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3Is
IFdURk1vdmUoZXJyb3IpKTsKK30KKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCisKK30gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMu
Y3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0u
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDx3dGYv
SlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKKworY2xhc3MgRnJvbnRlbmRSb3V0ZXI7CisKK2NsYXNzIE5ldHdvcmtG
cm9udGVuZERpc3BhdGNoZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGlj
OgorICAgIE5ldHdvcmtGcm9udGVuZERpc3BhdGNoZXIoRnJvbnRlbmRSb3V0ZXImIGZyb250ZW5k
Um91dGVyKSA6IG1fZnJvbnRlbmRSb3V0ZXIoZnJvbnRlbmRSb3V0ZXIpIHsgfQorI2lmIFBMQVRG
T1JNKE1BQykKKyAgICB2b2lkIHJlc291cmNlTG9hZGVkKCk7CisjZW5kaWYgLy8gUExBVEZPUk0o
TUFDKQorcHJpdmF0ZToKKyAgICBGcm9udGVuZFJvdXRlciYgbV9mcm9udGVuZFJvdXRlcjsKK307
CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmRE
aXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5j
cHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1h
Yy1wbGF0Zm9ybS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVy
cy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Ig
eworCisjaWYgUExBVEZPUk0oTUFDKQordm9pZCBOZXR3b3JrRnJvbnRlbmREaXNwYXRjaGVyOjpy
ZXNvdXJjZUxvYWRlZCgpCit7CisgICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBK
U09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhv
ZCJfcywgIk5ldHdvcmsucmVzb3VyY2VMb2FkZWQiX3MpOworCisgICAgbV9mcm9udGVuZFJvdXRl
ci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKK30KKyNlbmRpZiAvLyBQ
TEFURk9STShNQUMpCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6
IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sT2JqZWN0cy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlv
bnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvclByb3RvY29sVHlwZXMuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCitu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKworCisv
LyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KK25hbWVzcGFjZSBOZXR3b3JrIHsKKyNpZiBQTEFURk9S
TShNQUMpCitjbGFzcyBOZXR3b3JrRXJyb3I7CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorfSAv
LyBOZXR3b3JrCisvLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCisKKworCisKK25hbWVz
cGFjZSBOZXR3b3JrIHsKKyNpZiBQTEFURk9STShNQUMpCitjbGFzcyBOZXR3b3JrRXJyb3IgOiBw
dWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CitwdWJsaWM6CisgICAgZW51bSB7CisgICAgICAgIE5v
RmllbGRzU2V0ID0gMCwKKyAgICAgICAgTWVzc2FnZVNldCA9IDEgPDwgMCwKKyAgICAgICAgQ29k
ZVNldCA9IDEgPDwgMSwKKyAgICAgICAgQWxsRmllbGRzU2V0ID0gKE1lc3NhZ2VTZXQgfCBDb2Rl
U2V0KQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CisgICAgY2xhc3MgQnVpbGRl
ciB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7
CisKKyAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2Fz
dFN0YXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0
PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgQnVp
bGRlcihSZWY8LypOZXR3b3JrRXJyb3IqL0pTT046Ok9iamVjdD4mJiBvYmplY3QpCisgICAgICAg
ICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKKyAgICAgICAgeworICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9u
b25faW5pdF9zdGF0ZSk7CisgICAgICAgIH0KKyAgICAgICAgZnJpZW5kIGNsYXNzIE5ldHdvcmtF
cnJvcjsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1lc3NhZ2VTZXQ+
JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNZXNzYWdlU2V0KSwgcHJvcGVydHlfbWVzc2FnZV9h
bHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJtZXNzYWdlIl9z
LCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1lc3NhZ2VTZXQ+KCk7Cisg
ICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29kZVNldD4mIHNldENvZGUoaW50
IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
Q29kZVNldCksIHByb3BlcnR5X2NvZGVfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1
bHQtPnNldEludGVnZXIoImNvZGUiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0
U3RhdGU8Q29kZVNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIFJlZjxOZXR3b3JrRXJyb3I+
IHJlbGVhc2UoKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9
PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOworICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoc2l6ZW9mKE5ldHdvcmtFcnJvcikgPT0gc2l6ZW9mKEpTT046Ok9iamVjdCksIGNh
bm5vdF9jYXN0KTsKKworICAgICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4ganNvblJlc3VsdCA9
IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFdU
Rk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPE5ldHdvcmtFcnJvcj4qPigmanNvblJlc3VsdCkp
OworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAv
KgorICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKKyAgICAgKiBSZWY8TmV0d29ya0Vycm9y
PiByZXN1bHQgPSBOZXR3b3JrRXJyb3I6OmNyZWF0ZSgpCisgICAgICogICAgIC5zZXRNZXNzYWdl
KC4uLikKKyAgICAgKiAgICAgLnNldENvZGUoLi4uKQorICAgICAqICAgICAucmVsZWFzZSgpOwor
ICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRl
KCkpOworICAgIH0KK307CisKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCit9IC8vIE5ldHdvcmsK
KworCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgorIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKworIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgorLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
VGVzdFByb3RvY29sT2JqZWN0cy5oIgorCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFt
ZXNwYWNlIFByb3RvY29sIHsKKworCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMu
Y3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBs
YXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVycy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworQHByb3RvY29sIFRlc3RQcm90
b2NvbE5ldHdvcmtEb21haW5IYW5kbGVyOworCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCitj
bGFzcyBPYmpDSW5zcGVjdG9yTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGlj
IEFsdGVybmF0ZU5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlciB7CisgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CitwdWJsaWM6CisgICAgT2JqQ0luc3BlY3Rvck5ldHdvcmtCYWNrZW5kRGlzcGF0
Y2hlcihpZDxUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2Rl
bGVnYXRlID0gaGFuZGxlcjsgfQorI2lmIFBMQVRGT1JNKE1BQykKKyAgICB2aXJ0dWFsIHZvaWQg
bG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkKSBvdmVycmlkZTsKKyNlbmRpZiAvLyBQTEFURk9S
TShNQUMpCitwcml2YXRlOgorICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xOZXR3b3JrRG9t
YWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
KworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJj
b25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisj
aW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorCituYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKKwordm9pZCBPYmpDSW5zcGVjdG9yTmV0d29ya0JhY2tlbmREaXNwYXRj
aGVyOjpsb2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0SWQpCit7CisgICAgaWYgKCEjaWYgUExBVEZP
Uk0oTUFDKQorW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVz
b3VyY2VXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6KV0KKyNlbmRpZiAvLyBQTEFU
Rk9STShNQUMpKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29s
RXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0
d29yay5sb2FkUmVzb3VyY2UnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7CisgICAgICAgIGJh
Y2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5k
RGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICB9OworCisjaWYgUExBVEZPUk0oTUFDKQor
ICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCkt
PnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsK
KyAgICB9OworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKKyNpZiBQTEFURk9STShNQUMpCisKKyNl
bmRpZiAvLyBQTEFURk9STShNQUMpCisjaWYgUExBVEZPUk0oTUFDKQorICAgIFttX2RlbGVnYXRl
IGxvYWRSZXNvdXJjZVdpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxi
YWNrOnN1Y2Nlc3NDYWxsYmFja107CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorfQorCisKK30g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tl
bmREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJh
dGlvbi5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0
aC1tYWMtcGxhdGZvcm0uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+CisKK19fYXR0cmli
dXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xD
b25maWd1cmF0aW9uIDogTlNPYmplY3QKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4sIHNl
dHRlcj1zZXROZXR3b3JrSGFuZGxlcjopIGlkPFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5IYW5k
bGVyPiBuZXR3b3JrSGFuZGxlcjsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgVGVz
dFByb3RvY29sTmV0d29ya0RvbWFpbkV2ZW50RGlzcGF0Y2hlciAqbmV0d29ya0V2ZW50RGlzcGF0
Y2hlcjsKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24u
aAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3Jt
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9y
dCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJ
bnRlcm5hbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisj
aW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgorI2lt
cG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Cisj
aW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hl
cnMuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
cy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gVGVz
dFByb3RvY29sQ29uZmlndXJhdGlvbgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJv
bGxlciogX2NvbnRyb2xsZXI7CisgICAgaWQ8VGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkhhbmRs
ZXI+IF9uZXR3b3JrSGFuZGxlcjsKKyAgICBUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluRXZlbnRE
aXNwYXRjaGVyICpfbmV0d29ya0V2ZW50RGlzcGF0Y2hlcjsKK30KKworLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250
cm9sbGVyCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAg
ICAgIHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250cm9sbGVy
ID0gY29udHJvbGxlcjsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7
CisgICAgW19uZXR3b3JrSGFuZGxlciByZWxlYXNlXTsKKyAgICBbX25ldHdvcmtFdmVudERpc3Bh
dGNoZXIgcmVsZWFzZV07CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistICh2b2lkKXNldE5l
dHdvcmtIYW5kbGVyOihpZDxUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluSGFuZGxlcj4paGFuZGxl
cgoreworICAgIGlmIChoYW5kbGVyID09IF9uZXR3b3JrSGFuZGxlcikKKyAgICAgICAgcmV0dXJu
OworCisgICAgW19uZXR3b3JrSGFuZGxlciByZWxlYXNlXTsKKyAgICBfbmV0d29ya0hhbmRsZXIg
PSBbaGFuZGxlciByZXRhaW5dOworCisgICAgYXV0byBhbHRlcm5hdGVEaXNwYXRjaGVyID0gbWFr
ZVVuaXF1ZTxPYmpDSW5zcGVjdG9yTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyPihoYW5kbGVyKTsK
KyAgICBhdXRvIGFsdGVybmF0ZUFnZW50ID0gbWFrZVVuaXF1ZTxBbHRlcm5hdGVEaXNwYXRjaGFi
bGVBZ2VudDxOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIsIEFsdGVybmF0ZU5ldHdvcmtCYWNrZW5k
RGlzcGF0Y2hlcj4+KCJOZXR3b3JrIl9zLCAqX2NvbnRyb2xsZXIsIFdURk1vdmUoYWx0ZXJuYXRl
RGlzcGF0Y2hlcikpOworICAgIF9jb250cm9sbGVyLT5hcHBlbmRFeHRyYUFnZW50KFdURk1vdmUo
YWx0ZXJuYXRlQWdlbnQpKTsKK30KKworLSAoaWQ8VGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkhh
bmRsZXI+KW5ldHdvcmtIYW5kbGVyCit7CisgICAgcmV0dXJuIF9uZXR3b3JrSGFuZGxlcjsKK30K
KworLSAoVGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkV2ZW50RGlzcGF0Y2hlciAqKW5ldHdvcmtF
dmVudERpc3BhdGNoZXIKK3sKKyAgICBpZiAoIV9uZXR3b3JrRXZlbnREaXNwYXRjaGVyKQorICAg
ICAgICBfbmV0d29ya0V2ZW50RGlzcGF0Y2hlciA9IFtbVGVzdFByb3RvY29sTmV0d29ya0RvbWFp
bkV2ZW50RGlzcGF0Y2hlciBhbGxvY10gaW5pdFdpdGhDb250cm9sbGVyOl9jb250cm9sbGVyXTsK
KyAgICByZXR1cm4gX25ldHdvcmtFdmVudERpc3BhdGNoZXI7Cit9CisKK0BlbmQKKworCisjIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKworIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCisvLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbElu
dGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2lt
cG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKwor
QGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5FdmVudERpc3BhdGNoZXIK
K3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworfQor
CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3Rv
ckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAg
IGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7
CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQorCist
ICh2b2lkKXJlc291cmNlTG9hZGVkCit7CisgICAgY29uc3QgRnJvbnRlbmRSb3V0ZXImIHJvdXRl
ciA9IF9jb250cm9sbGVyLT5mcm9udGVuZFJvdXRlcigpOworCisgICAgUmVmPEpTT046Ok9iamVj
dD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGpzb25NZXNzYWdl
LT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIk5ldHdvcmsucmVzb3VyY2VMb2FkZWQiX3MpOworICAg
IHJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKK30KKworQGVu
ZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorCisj
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRh
dGlvbi5oPgorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+
CisKKworI2lmIFBMQVRGT1JNKE1BQykKK0BjbGFzcyBUZXN0UHJvdG9jb2xOZXR3b3JrRXJyb3I7
CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorCisKKworCisjaWYgUExBVEZPUk0oTUFDKQorX19h
dHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90
b2NvbE5ldHdvcmtFcnJvciA6IFJXSVByb3RvY29sSlNPTk9iamVjdAorLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQ7
CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09O
T2JqZWN0ICopanNvbk9iamVjdDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6KE5T
U3RyaW5nICopbWVzc2FnZSBjb2RlOihpbnQpY29kZTsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0
eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqbWVzc2FnZTsKKy8qIHJlcXVpcmVkICovIEBw
cm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCBjb2RlOworQGVuZAorI2VuZGlmIC8vIFBM
QVRGT1JNKE1BQykKKworQHByb3RvY29sIFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5IYW5kbGVy
IDxOU09iamVjdD4KK0BvcHRpb25hbAorI2lmIFBMQVRGT1JNKE1BQykKKy0gKHZvaWQpbG9hZFJl
c291cmNlV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNh
bGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKSh2b2lkKSlzdWNjZXNzQ2FsbGJhY2s7Cisj
ZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorQGVuZAorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5
ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkV2ZW50
RGlzcGF0Y2hlciA6IE5TT2JqZWN0CistICh2b2lkKXJlc291cmNlTG9hZGVkOworQGVuZAorCisK
KyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVj
dHMuaD4KKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAorCisjIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sSW50ZXJuYWwuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0
ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENv
cmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDx3dGYvSlNPTlZh
bHVlcy5oPgorCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5FdmVudERpc3Bh
dGNoZXIgKFByaXZhdGUpCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihJbnNw
ZWN0b3I6OkF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcjsKK0BlbmQK
KworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKworIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wu
aCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4K
KworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlw
ZT4KK09wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpOworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3Rv
Y29sVHlwZVBhcnNlci5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9i
amVjdFByaXZhdGUuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGludGVyZmFj
ZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKE5ldHdvcmtEb21haW4pCisKKyNpZiBQTEFU
Rk9STShNQUMpCisrICh2b2lkKV9wYXJzZU5ldHdvcmtFcnJvcjooVGVzdFByb3RvY29sTmV0d29y
a0Vycm9yICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworI2VuZGlmIC8vIFBM
QVRGT1JNKE1BQykKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zIChOZXR3b3JrRG9tYWluKQorCisjaWYgUExBVEZPUk0oTUFDKQorKyAodm9pZClf
cGFyc2VOZXR3b3JrRXJyb3I6KFRlc3RQcm90b2NvbE5ldHdvcmtFcnJvciAqKilvdXRWYWx1ZSBm
cm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZ
UEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOworICAgICpvdXRWYWx1ZSA9IFtbVGVz
dFByb3RvY29sTmV0d29ya0Vycm9yIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07Cit9
CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMt
d2l0aC1tYWMtcGxhdGZvcm0uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQ
cm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgor
I2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsK
KworCisjaWYgUExBVEZPUk0oTUFDKQorQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbE5ldHdv
cmtFcnJvcgorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGlj
dGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCit7CisgICAgaWYgKCEoc2VsZiA9IFtz
dXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBUSFJPV19FWENFUFRJT05f
Rk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJtZXNzYWdlIl0sIEAibWVzc2FnZSIpOwor
ICAgIHNlbGYubWVzc2FnZSA9IHBheWxvYWRbQCJtZXNzYWdlIl07CisKKyAgICBUSFJPV19FWENF
UFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJjb2RlIl0sIEAiY29kZSIpOwor
ICAgIHNlbGYuY29kZSA9IFtwYXlsb2FkW0AiY29kZSJdIGludGVnZXJWYWx1ZV07CisKKyAgICBy
ZXR1cm4gc2VsZjsKK30KKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihS
V0lQcm90b2NvbEpTT05PYmplY3QgKilvYmplY3QKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVy
IGluaXRXaXRoSlNPTk9iamVjdDpbb2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0KCldKSkKKyAgICAg
ICAgcmV0dXJuIG5pbDsKKworICAgIHJldHVybiBzZWxmOworfQorCistIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZTooaW50KWNvZGUKK3sKKyAg
ICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkobWVzc2FnZSwgQCJtZXNzYWdl
Iik7CisKKyAgICBzZWxmLm1lc3NhZ2UgPSBtZXNzYWdlOworICAgIHNlbGYuY29kZSA9IGNvZGU7
CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClzZXRNZXNzYWdlOihOU1N0cmluZyAq
KW1lc3NhZ2UKK3sKKyAgICBbc3VwZXIgc2V0U3RyaW5nOm1lc3NhZ2UgZm9yS2V5OkAibWVzc2Fn
ZSJdOworfQorCistIChOU1N0cmluZyAqKW1lc3NhZ2UKK3sKKyAgICByZXR1cm4gW3N1cGVyIHN0
cmluZ0ZvcktleTpAIm1lc3NhZ2UiXTsKK30KKworLSAodm9pZClzZXRDb2RlOihpbnQpY29kZQor
eworICAgIFtzdXBlciBzZXRJbnRlZ2VyOmNvZGUgZm9yS2V5OkAiY29kZSJdOworfQorCistIChp
bnQpY29kZQoreworICAgIHJldHVybiBbc3VwZXIgaW50ZWdlckZvcktleTpAImNvZGUiXTsKK30K
KworQGVuZAorI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uLXJl
c3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC9kb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24tcmVzdWx0Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5iZjE3Zjk0MWUwYwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21h
aW4tZGVidWdnYWJsZVR5cGVzLmpzb24tcmVzdWx0CkBAIC0wLDAgKzEsMTAzMCBAQAorIyMjIEJl
Z2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcworLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbgorLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisvLyBEb21haW4KK0luc3BlY3RvckJhY2tl
bmQucmVnaXN0ZXJEb21haW4oIkRvbWFpbiIsIG51bGwpOworSW5zcGVjdG9yQmFja2VuZC5yZWdp
c3RlckNvbW1hbmQoIkRvbWFpbi5Db21tYW5kIiwgbnVsbCwgW10sIFtdKTsKK0luc3BlY3RvckJh
Y2tlbmQucmVnaXN0ZXJFdmVudCgiRG9tYWluLkV2ZW50IiwgbnVsbCwgW10pOworSW5zcGVjdG9y
QmFja2VuZC5yZWdpc3RlckRvbWFpbkRpc3BhdGNoZXIgPSBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lz
dGVyRGlzcGF0Y2hlci5iaW5kKEluc3BlY3RvckJhY2tlbmQsICJEb21haW4iKTsKK0luc3BlY3Rv
ckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkRvbWFpbiIsIFsid2ViLXBhZ2UiXSk7CisjIyMgRW5k
IEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcworCisjIyMgQmVnaW4gRmlsZTogVGVz
dEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBl
cy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
Lmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4K
KworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNr
ZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZN
b3ZlKGRpc3BhdGNoZXIpOyB9CisgICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRj
aGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQorcHJpdmF0
ZToKKyAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Cit9
OworCisKK2NsYXNzIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5BbHRlcm5h
dGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBDb21tYW5k
KGxvbmcgY2FsbElkKSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2Vu
ZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorIyMjIEVuZCBG
aWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6
IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bE9iamVjdHMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKKyNpZiBFTkFCTEUo
SU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK2NsYXNzIEFsdGVybmF0ZURvbWFpbkJh
Y2tlbmREaXNwYXRjaGVyOworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQorCitjbGFzcyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgeworcHVi
bGljOgorICAgIHZpcnR1YWwgdm9pZCBDb21tYW5kKEVycm9yU3RyaW5nJikgPSAwOworcHJvdGVj
dGVkOgorICAgIHZpcnR1YWwgfkRvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOworfTsK
KworY2xhc3MgRG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVu
dGFsQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8RG9tYWluQmFj
a2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIERvbWFpbkJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlciopOworICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNv
bnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIG92ZXJyaWRl
OworcHJpdmF0ZToKKyAgICB2b2lkIENvbW1hbmQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09O
OjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCitwdWJsaWM6CisgICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFs
dGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1f
YWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KK3ByaXZhdGU6Cisg
ICAgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIqIG1fYWx0ZXJuYXRlRGlzcGF0Y2hl
ciB7IG51bGxwdHIgfTsKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKK3ByaXZhdGU6CisgICAgRG9tYWluQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERp
c3BhdGNoZXImLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICBEb21haW5C
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQgeyBudWxscHRyIH07Cit9OworCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVy
cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYv
SlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQorI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIK
KyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKK0RvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6fkRv
bWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQorCitSZWY8RG9tYWluQmFja2VuZERp
c3BhdGNoZXI+IERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoQmFja2VuZERpc3BhdGNo
ZXImIGJhY2tlbmREaXNwYXRjaGVyLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFn
ZW50KQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERvbWFpbkJhY2tlbmREaXNwYXRjaGVy
KGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOworfQorCitEb21haW5CYWNrZW5kRGlzcGF0Y2hl
cjo6RG9tYWluQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNw
YXRjaGVyLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQorICAgIDogU3Vw
cGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCisgICAgLCBtX2Fn
ZW50KGFnZW50KQoreworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hl
ckZvckRvbWFpbigiRG9tYWluIl9zLCB0aGlzKTsKK30KKwordm9pZCBEb21haW5CYWNrZW5kRGlz
cGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBS
ZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCit7CisgICAgUmVmPERvbWFpbkJhY2tlbmREaXNw
YXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKKworICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFt
ZXRlcnM7CisgICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRlcnMpOwor
CisgICAgaWYgKG1ldGhvZCA9PSAiQ29tbWFuZCIpIHsKKyAgICAgICAgQ29tbWFuZChyZXF1ZXN0
SWQsIFdURk1vdmUocGFyYW1ldGVycykpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hl
cjo6TWV0aG9kTm90Rm91bmQsICInRG9tYWluLiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5k
Iik7Cit9CisKK3ZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9uZyByZXF1
ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCit7CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCisgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewor
ICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPkNvbW1hbmQocmVxdWVzdElkKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKKworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgIFJlZjxKU09OOjpPYmpl
Y3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9hZ2VudC0+Q29tbWFu
ZChlcnJvcik7CisKKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQorICAgICAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNl
KTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29s
RXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5k
RGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVy
cy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLWRlYnVnZ2FibGVU
eXBlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUg
PHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25h
bWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBGcm9udGVuZFJvdXRlcjsKKworY2xhc3MgRG9t
YWluRnJvbnRlbmREaXNwYXRjaGVyIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1
YmxpYzoKKyAgICBEb21haW5Gcm9udGVuZERpc3BhdGNoZXIoRnJvbnRlbmRSb3V0ZXImIGZyb250
ZW5kUm91dGVyKSA6IG1fZnJvbnRlbmRSb3V0ZXIoZnJvbnRlbmRSb3V0ZXIpIHsgfQorICAgIHZv
aWQgRXZlbnQoKTsKK3ByaXZhdGU6CisgICAgRnJvbnRlbmRSb3V0ZXImIG1fZnJvbnRlbmRSb3V0
ZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEZy
b250ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0
Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLWRlYnVn
Z2FibGVUeXBlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVy
cy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Ig
eworCit2b2lkIERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcjo6RXZlbnQoKQoreworICAgIFJlZjxK
U09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBq
c29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOworCisg
ICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygp
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEZy
b250ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmpl
Y3RzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJs
ZVR5cGVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2Nv
bFR5cGVzLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CisKKworCituYW1lc3BhY2UgUHJvdG9jb2wgeworCisKKworCisKKworCisKKworfSAv
LyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sT2JqZWN0cy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4t
ZGVidWdnYWJsZVR5cGVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVj
dHMuaCIKKworI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK25hbWVzcGFjZSBQcm90b2NvbCB7
CisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorCisjIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24KKy8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2luY2x1ZGUgPHd0Zi9S
ZXRhaW5QdHIuaD4KKworQHByb3RvY29sIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI7
CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKK2NsYXNzIE9iakNJbnNwZWN0b3JEb21haW5C
YWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlz
cGF0Y2hlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgT2Jq
Q0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbERvbWFpbkRv
bWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgQ29tbWFuZChsb25nIHJlcXVlc3RJZCkgb3ZlcnJpZGU7Citwcml2YXRlOgorICAg
IFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0
ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBkb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9j
b2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFs
LmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW5jbHVkZSA8
d3RmL0pTT05WYWx1ZXMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3ZvaWQgT2JqQ0lu
c3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElkKQor
eworICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihDb21t
YW5kV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7CisgICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlz
cGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRG9tYWluLkNvbW1hbmQnIHdhcyBub3QgZm91bmQi
X3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJp
bmcgKmVycm9yKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29s
RXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsK
KyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICB9
OworCisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKKyAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFs
c2UpOworICAgIH07CisKKyAgICBbbV9kZWxlZ2F0ZSBDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6
ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKK30KKworCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNr
ZW5kRGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3Vy
YXRpb24uaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dh
YmxlVHlwZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+CisKK19fYXR0cmlidXRlX18o
KHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1
cmF0aW9uIDogTlNPYmplY3QKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4sIHNldHRlcj1z
ZXREb21haW5IYW5kbGVyOikgaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4gZG9t
YWluSGFuZGxlcjsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgVGVzdFByb3RvY29s
RG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyICpkb21haW5FdmVudERpc3BhdGNoZXI7CitAZW5k
CisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24KKy8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sQ29u
ZmlndXJhdGlvbi5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2ltcG9y
dCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0
Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENv
cmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgorCit1c2luZyBuYW1l
c3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJh
dGlvbgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7
CisgICAgaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4gX2RvbWFpbkhhbmRsZXI7
CisgICAgVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyICpfZG9tYWluRXZl
bnREaXNwYXRjaGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihB
dWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0g
W3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBB
U1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJl
dHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbX2RvbWFpbkhhbmRsZXIg
cmVsZWFzZV07CisgICAgW19kb21haW5FdmVudERpc3BhdGNoZXIgcmVsZWFzZV07CisgICAgW3N1
cGVyIGRlYWxsb2NdOworfQorCistICh2b2lkKXNldERvbWFpbkhhbmRsZXI6KGlkPFRlc3RQcm90
b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+KWhhbmRsZXIKK3sKKyAgICBpZiAoaGFuZGxlciA9PSBf
ZG9tYWluSGFuZGxlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgW19kb21haW5IYW5kbGVyIHJl
bGVhc2VdOworICAgIF9kb21haW5IYW5kbGVyID0gW2hhbmRsZXIgcmV0YWluXTsKKworICAgIGF1
dG8gYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IG1ha2VVbmlxdWU8T2JqQ0luc3BlY3RvckRvbWFpbkJh
Y2tlbmREaXNwYXRjaGVyPihoYW5kbGVyKTsKKyAgICBhdXRvIGFsdGVybmF0ZUFnZW50ID0gbWFr
ZVVuaXF1ZTxBbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudDxEb21haW5CYWNrZW5kRGlzcGF0Y2hl
ciwgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXI+PigiRG9tYWluIl9zLCAqX2NvbnRy
b2xsZXIsIFdURk1vdmUoYWx0ZXJuYXRlRGlzcGF0Y2hlcikpOworICAgIF9jb250cm9sbGVyLT5h
cHBlbmRFeHRyYUFnZW50KFdURk1vdmUoYWx0ZXJuYXRlQWdlbnQpKTsKK30KKworLSAoaWQ8VGVz
dFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4pZG9tYWluSGFuZGxlcgoreworICAgIHJldHVy
biBfZG9tYWluSGFuZGxlcjsKK30KKworLSAoVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnRE
aXNwYXRjaGVyICopZG9tYWluRXZlbnREaXNwYXRjaGVyCit7CisgICAgaWYgKCFfZG9tYWluRXZl
bnREaXNwYXRjaGVyKQorICAgICAgICBfZG9tYWluRXZlbnREaXNwYXRjaGVyID0gW1tUZXN0UHJv
dG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgYWxsb2NdIGluaXRXaXRoQ29udHJvbGxl
cjpfY29udHJvbGxlcl07CisgICAgcmV0dXJuIF9kb21haW5FdmVudERpc3BhdGNoZXI7Cit9CisK
K0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKwor
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFBy
b3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
LmgiCisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVj
dG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNw
YXRjaGVyCit7CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxl
cjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJ
bnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0
XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNvbnRy
b2xsZXIpOworICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKKyAgICByZXR1cm4gc2VsZjsK
K30KKworLSAodm9pZClFdmVudAoreworICAgIGNvbnN0IEZyb250ZW5kUm91dGVyJiByb3V0ZXIg
PSBfY29udHJvbGxlci0+ZnJvbnRlbmRSb3V0ZXIoKTsKKworICAgIFJlZjxKU09OOjpPYmplY3Q+
IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBqc29uTWVzc2FnZS0+
c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOworICAgIHJvdXRlci5zZW5k
RXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKK30KKworQGVuZAorCisKKyMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21h
aW4tZGVidWdnYWJsZVR5cGVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKKyNpbXBvcnQg
PFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KKworCisKKworCisKKworCitA
cHJvdG9jb2wgVGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlciA8TlNPYmplY3Q+CitAb3B0
aW9uYWwKKy0gKHZvaWQpQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5n
ICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikodm9pZCkpc3Vj
Y2Vzc0NhbGxiYWNrOworQGVuZAorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVs
dCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVy
IDogTlNPYmplY3QKKy0gKHZvaWQpRXZlbnQ7CitAZW5kCisKKworI2ltcG9ydCA8V2ViSW5zcGVj
dG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgorCisjIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5h
bC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLWRlYnVnZ2FibGVU
eXBlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNp
bXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFBy
aXZhdGUuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29u
dHJvbGxlci5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKworQGludGVyZmFjZSBUZXN0
UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKFByaXZhdGUpCistIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihJbnNwZWN0b3I6OkF1Z21lbnRhYmxlSW5zcGVjdG9y
Q29udHJvbGxlciopY29udHJvbGxlcjsKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbEludGVybmFsLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLWRlYnVnZ2Fi
bGVUeXBlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
KyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3Rv
Y29sQXJyYXlDb252ZXJzaW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordGVtcGxh
dGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgorT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJv
dG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7CisKK30gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisKKyMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9y
dCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVBy
b3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsK
KworCisKKworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1t
CisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJ
bnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNp
bXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisjaW1w
b3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNp
bmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5
cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVn
Z2FibGVUeXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1k
ZWJ1Z2dhYmxlVHlwZS5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMC4uMzM2YjFhNGQ2NGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWluLXRhcmdldFR5cGUt
bWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tcmVzdWx0CkBAIC0wLDAgKzEsMTAz
MCBAQAorIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcworLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRv
bWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKy8vIERvbWFpbgorSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigi
RG9tYWluIiwgbnVsbCk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiRG9tYWlu
LkNvbW1hbmQiLCBbInBhZ2UiLCAid29ya2VyIl0sIFtdLCBbXSk7CitJbnNwZWN0b3JCYWNrZW5k
LnJlZ2lzdGVyRXZlbnQoIkRvbWFpbi5FdmVudCIsIG51bGwsIFtdKTsKK0luc3BlY3RvckJhY2tl
bmQucmVnaXN0ZXJEb21haW5EaXNwYXRjaGVyID0gSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRp
c3BhdGNoZXIuYmluZChJbnNwZWN0b3JCYWNrZW5kLCAiRG9tYWluIik7CitJbnNwZWN0b3JCYWNr
ZW5kLmFjdGl2YXRlRG9tYWluKCJEb21haW4iLCBbInBhZ2UiXSk7CisjIyMgRW5kIEZpbGU6IElu
c3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcworCisjIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
ZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisK
KyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworI2luY2x1ZGUg
IlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JG
cm9udGVuZFJvdXRlci5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgQWx0ZXJu
YXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHZvaWQgc2V0QmFja2VuZERpc3Bh
dGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5k
RGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KKyAgICBCYWNrZW5kRGlzcGF0Y2hl
ciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVy
LmdldCgpOyB9Citwcml2YXRlOgorICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNr
ZW5kRGlzcGF0Y2hlcjsKK307CisKKworY2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3Bh
dGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAg
IHZpcnR1YWwgfkFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKCkgeyB9CisgICAgdmly
dHVhbCB2b2lkIENvbW1hbmQobG9uZyBjYWxsSWQpID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCisjIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAor
CisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRl
YnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisK
K3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCitjbGFzcyBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hl
cjsKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKwor
Y2xhc3MgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0
dWFsIHZvaWQgQ29tbWFuZChFcnJvclN0cmluZyYpID0gMDsKK3Byb3RlY3RlZDoKKyAgICB2aXJ0
dWFsIH5Eb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKK307CisKK2NsYXNzIERvbWFp
bkJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNw
YXRjaGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPERvbWFpbkJhY2tlbmREaXNwYXRjaGVy
PiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIqKTsKKyAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1l
dGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBvdmVycmlkZTsKK3ByaXZhdGU6Cisg
ICAgdm9pZCBDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBh
cmFtZXRlcnMpOworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQor
cHVibGljOgorICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0Y2hlcihBbHRlcm5hdGVEb21haW5C
YWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVybmF0ZURpc3Bh
dGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9Citwcml2YXRlOgorICAgIEFsdGVybmF0ZURv
bWFpbkJhY2tlbmREaXNwYXRjaGVyKiBtX2FsdGVybmF0ZURpc3BhdGNoZXIgeyBudWxscHRyIH07
CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCitwcml2
YXRlOgorICAgIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiwgRG9t
YWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgRG9tYWluQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyKiBtX2FnZW50IHsgbnVsbHB0ciB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVn
aW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJs
ZVR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgor
CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNp
bmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQorI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlz
cGF0Y2hlcnMuaCIKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK0RvbWFpbkJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlcjo6fkRvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQorCitSZWY8RG9t
YWluQmFja2VuZERpc3BhdGNoZXI+IERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoQmFj
a2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIqIGFnZW50KQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERvbWFpbkJhY2tl
bmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOworfQorCitEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlcjo6RG9tYWluQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXIm
IGJhY2tlbmREaXNwYXRjaGVyLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50
KQorICAgIDogU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIp
CisgICAgLCBtX2FnZW50KGFnZW50KQoreworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lz
dGVyRGlzcGF0Y2hlckZvckRvbWFpbigiRG9tYWluIl9zLCB0aGlzKTsKK30KKwordm9pZCBEb21h
aW5CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmlu
ZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCit7CisgICAgUmVmPERvbWFp
bkJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKKworICAgIFJlZlB0cjxKU09OOjpP
YmplY3Q+IHBhcmFtZXRlcnM7CisgICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBh
cmFtZXRlcnMpOworCisgICAgaWYgKG1ldGhvZCA9PSAiQ29tbWFuZCIpIHsKKyAgICAgICAgQ29t
bWFuZChyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNr
ZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRG9tYWluLiIgKyBtZXRob2QgKyAiJyB3
YXMgbm90IGZvdW5kIik7Cit9CisKK3ZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1h
bmQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCit7CisjaWYgRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisgICAgaWYgKG1fYWx0ZXJuYXRlRGlz
cGF0Y2hlcikgeworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPkNvbW1hbmQocmVxdWVz
dElkKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgIFJl
ZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9h
Z2VudC0+Q29tbWFuZChlcnJvcik7CisKKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQorICAgICAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJl
c3VsdCksIGZhbHNlKTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJl
cG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3Zl
KGVycm9yKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6
IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlu
LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7
CisKK2NsYXNzIEZyb250ZW5kUm91dGVyOworCitjbGFzcyBEb21haW5Gcm9udGVuZERpc3BhdGNo
ZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIERvbWFpbkZy
b250ZW5kRGlzcGF0Y2hlcihGcm9udGVuZFJvdXRlciYgZnJvbnRlbmRSb3V0ZXIpIDogbV9mcm9u
dGVuZFJvdXRlcihmcm9udGVuZFJvdXRlcikgeyB9CisgICAgdm9pZCBFdmVudCgpOworcHJpdmF0
ZToKKyAgICBGcm9udGVuZFJvdXRlciYgbV9mcm9udGVuZFJvdXRlcjsKK307CisKK30gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5o
CisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21h
aW4tZGVidWdnYWJsZVR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlz
cGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5k
Um91dGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5z
cGVjdG9yIHsKKwordm9pZCBEb21haW5Gcm9udGVuZERpc3BhdGNoZXI6OkV2ZW50KCkKK3sKKyAg
ICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
CisgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9z
KTsKKworICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05T
dHJpbmcoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6
IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sT2JqZWN0cy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRh
cmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+CisjaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCituYW1lc3BhY2Ug
UHJvdG9jb2wgeworCisKKworCisKKworCisKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKwor
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVj
dHMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21h
aW4tZGVidWdnYWJsZVR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2Jq
ZWN0cy5oIgorCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFByb3RvY29s
IHsKKworCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1
Z2dhYmxlVHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlz
cGF0Y2hlcnMuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKK0Bwcm90b2NvbCBUZXN0
UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyOworCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwor
CitjbGFzcyBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJs
aWMgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIgeworICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOworcHVibGljOgorICAgIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0
Y2hlcihpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVs
ZWdhdGUgPSBoYW5kbGVyOyB9CisgICAgdmlydHVhbCB2b2lkIENvbW1hbmQobG9uZyByZXF1ZXN0
SWQpIG92ZXJyaWRlOworcHJpdmF0ZToKKyAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sRG9t
YWluRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAor
CisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmct
ZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xC
YWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgi
CisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW5jbHVkZSA8d3Rm
L0pTT05WYWx1ZXMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3ZvaWQgT2JqQ0luc3Bl
Y3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElkKQorewor
ICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihDb21tYW5k
V2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7CisgICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0
Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRG9tYWluLkNvbW1hbmQnIHdhcyBub3QgZm91bmQiX3Mp
OworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcg
KmVycm9yKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJy
b3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICB9Owor
CisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2Up
OworICAgIH07CisKKyAgICBbbV9kZWxlZ2F0ZSBDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6ZXJy
b3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKK30KKworCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5k
RGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRp
b24uaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBl
LW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9j
b2wuaD4KKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJm
YWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAorQHByb3BlcnR5IChub25h
dG9taWMsIHJldGFpbiwgc2V0dGVyPXNldERvbWFpbkhhbmRsZXI6KSBpZDxUZXN0UHJvdG9jb2xE
b21haW5Eb21haW5IYW5kbGVyPiBkb21haW5IYW5kbGVyOworQHByb3BlcnR5IChub25hdG9taWMs
IHJlYWRvbmx5KSBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKmRvbWFp
bkV2ZW50RGlzcGF0Y2hlcjsKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENv
bmZpZ3VyYXRpb24uaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
bi5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBl
LW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRp
b24uaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbXBvcnQgIlRlc3RQ
cm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0
ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21l
bnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIElu
c3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KK3sK
KyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworICAgIGlk
PFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IF9kb21haW5IYW5kbGVyOworICAgIFRl
c3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqX2RvbWFpbkV2ZW50RGlzcGF0
Y2hlcjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFi
bGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCit7CisgICAgc2VsZiA9IFtzdXBlciBp
bml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNv
bnRyb2xsZXIpOworICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKKyAgICByZXR1cm4gc2Vs
ZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgW19kb21haW5IYW5kbGVyIHJlbGVhc2Vd
OworICAgIFtfZG9tYWluRXZlbnREaXNwYXRjaGVyIHJlbGVhc2VdOworICAgIFtzdXBlciBkZWFs
bG9jXTsKK30KKworLSAodm9pZClzZXREb21haW5IYW5kbGVyOihpZDxUZXN0UHJvdG9jb2xEb21h
aW5Eb21haW5IYW5kbGVyPiloYW5kbGVyCit7CisgICAgaWYgKGhhbmRsZXIgPT0gX2RvbWFpbkhh
bmRsZXIpCisgICAgICAgIHJldHVybjsKKworICAgIFtfZG9tYWluSGFuZGxlciByZWxlYXNlXTsK
KyAgICBfZG9tYWluSGFuZGxlciA9IFtoYW5kbGVyIHJldGFpbl07CisKKyAgICBhdXRvIGFsdGVy
bmF0ZURpc3BhdGNoZXIgPSBtYWtlVW5pcXVlPE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlz
cGF0Y2hlcj4oaGFuZGxlcik7CisgICAgYXV0byBhbHRlcm5hdGVBZ2VudCA9IG1ha2VVbmlxdWU8
QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8RG9tYWluQmFja2VuZERpc3BhdGNoZXIsIEFsdGVy
bmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyPj4oIkRvbWFpbiJfcywgKl9jb250cm9sbGVyLCBX
VEZNb3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIpKTsKKyAgICBfY29udHJvbGxlci0+YXBwZW5kRXh0
cmFBZ2VudChXVEZNb3ZlKGFsdGVybmF0ZUFnZW50KSk7Cit9CisKKy0gKGlkPFRlc3RQcm90b2Nv
bERvbWFpbkRvbWFpbkhhbmRsZXI+KWRvbWFpbkhhbmRsZXIKK3sKKyAgICByZXR1cm4gX2RvbWFp
bkhhbmRsZXI7Cit9CisKKy0gKFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hl
ciAqKWRvbWFpbkV2ZW50RGlzcGF0Y2hlcgoreworICAgIGlmICghX2RvbWFpbkV2ZW50RGlzcGF0
Y2hlcikKKyAgICAgICAgX2RvbWFpbkV2ZW50RGlzcGF0Y2hlciA9IFtbVGVzdFByb3RvY29sRG9t
YWluRG9tYWluRXZlbnREaXNwYXRjaGVyIGFsbG9jXSBpbml0V2l0aENvbnRyb2xsZXI6X2NvbnRy
b2xsZXJdOworICAgIHJldHVybiBfZG9tYWluRXZlbnREaXNwYXRjaGVyOworfQorCitAZW5kCisK
KworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVn
Z2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2lu
ZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sRG9t
YWluRG9tYWluRXZlbnREaXNwYXRjaGVyCit7CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250
cm9sbGVyKiBfY29udHJvbGxlcjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJv
bGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCit7CisgICAg
c2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7
CisgICAgQVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsK
KyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClFdmVudAoreworICAgIGNvbnN0IEZyb250
ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29udHJvbGxlci0+ZnJvbnRlbmRSb3V0ZXIoKTsKKworICAg
IFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
KyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3Mp
OworICAgIHJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKK30K
KworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5t
bQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJs
ZVR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisj
aW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKworI2ltcG9ydCA8V2ViSW5zcGVjdG9y
L1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgorCisKKworCisKKworCisKK0Bwcm90b2NvbCBUZXN0
UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyIDxOU09iamVjdD4KK0BvcHRpb25hbAorLSAodm9p
ZClDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJv
ckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKSh2b2lkKSlzdWNjZXNzQ2FsbGJhY2s7
CitAZW5kCisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVy
ZmFjZSBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgOiBOU09iamVjdAor
LSAodm9pZClFdmVudDsKK0BlbmQKKworCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9j
b2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21h
aW4tZGVidWdnYWJsZVR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2Nv
bEpTT05PYmplY3RQcml2YXRlLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJs
ZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK0Bp
bnRlcmZhY2UgVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyIChQcml2YXRl
KQorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooSW5zcGVjdG9yOjpBdWdtZW50
YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXI7CitAZW5kCisKKworIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRv
bWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90
b2NvbC5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9u
cy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0Vu
dW1UeXBlPgorT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3Qg
U3RyaW5nJiB2YWx1ZSk7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBkb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgi
CisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0
b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5z
cGVjdG9yOworCisKKworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9t
YWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAi
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJ
UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4K
KyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7
CisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RvbWFp
bi10YXJnZXRUeXBlcy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW4tdGFyZ2V0VHlwZXMuanNvbi1yZXN1bHQK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjJkYzQ2NDY1YzVmCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V4cGVjdGVkL2RvbWFpbi10YXJnZXRUeXBlcy5qc29uLXJlc3VsdApAQCAtMCwwICsxLDEw
MzAgQEAKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZXMuanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisvLyBEb21haW4KK0luc3Bl
Y3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIkRvbWFpbiIsIFsicGFnZSJdKTsKK0luc3BlY3Rv
ckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJEb21haW4uQ29tbWFuZCIsIFsicGFnZSJdLCBbXSwg
W10pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckV2ZW50KCJEb21haW4uRXZlbnQiLCBbInBh
Z2UiXSwgW10pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbkRpc3BhdGNoZXIgPSBJ
bnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRGlzcGF0Y2hlci5iaW5kKEluc3BlY3RvckJhY2tlbmQs
ICJEb21haW4iKTsKK0luc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkRvbWFpbiIsIG51
bGwpOworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlcy5qc29uCisvLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyNpbmNsdWRlICJUZXN0UHJv
dG9jb2xUeXBlcy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRS
b3V0ZXIuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEFsdGVybmF0ZUJhY2tl
bmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJl
ZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNo
ZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9CisgICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tl
bmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsg
fQorcHJpdmF0ZToKKyAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3Bh
dGNoZXI7Cit9OworCisKK2NsYXNzIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyIDog
cHVibGljIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFs
IH5BbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQorICAgIHZpcnR1YWwgdm9p
ZCBDb21tYW5kKGxvbmcgY2FsbElkKSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQor
IyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFBy
b3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVz
cGFjZSBJbnNwZWN0b3IgeworCit0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKworI2lmIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorY2xhc3MgQWx0ZXJuYXRlRG9t
YWluQmFja2VuZERpc3BhdGNoZXI7CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCisKK2NsYXNzIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7
CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIENvbW1hbmQoRXJyb3JTdHJpbmcmKSA9IDA7Citw
cm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+RG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7
Cit9OworCitjbGFzcyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBw
bGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxEb21h
aW5CYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgRG9tYWluQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJ
ZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkgb3Zl
cnJpZGU7Citwcml2YXRlOgorICAgIHZvaWQgQ29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVmUHRy
PEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVS
TkFURV9ESVNQQVRDSEVSUykKK3B1YmxpYzoKKyAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNo
ZXIoQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIp
IHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQorcHJpdmF0
ZToKKyAgICBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciogbV9hbHRlcm5hdGVEaXNw
YXRjaGVyIHsgbnVsbHB0ciB9OworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQorcHJpdmF0ZToKKyAgICBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihCYWNr
ZW5kRGlzcGF0Y2hlciYsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIERv
bWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2VudCB7IG51bGxwdHIgfTsKK307CisK
K30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3Bh
dGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVzLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3Rm
L0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKKyNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgi
CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKK25h
bWVzcGFjZSBJbnNwZWN0b3IgeworCitEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5E
b21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KKworUmVmPERvbWFpbkJhY2tlbmRE
aXNwYXRjaGVyPiBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEJhY2tlbmREaXNwYXRj
aGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBh
Z2VudCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEb21haW5CYWNrZW5kRGlzcGF0Y2hl
cihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKK30KKworRG9tYWluQmFja2VuZERpc3BhdGNo
ZXI6OkRvbWFpbkJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlz
cGF0Y2hlciwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKKyAgICA6IFN1
cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQorICAgICwgbV9h
Z2VudChhZ2VudCkKK3sKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNo
ZXJGb3JEb21haW4oIkRvbWFpbiJfcywgdGhpcyk7Cit9CisKK3ZvaWQgRG9tYWluQmFja2VuZERp
c3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwg
UmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQoreworICAgIFJlZjxEb21haW5CYWNrZW5kRGlz
cGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CisKKyAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJh
bWV0ZXJzOworICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsK
KworICAgIGlmIChtZXRob2QgPT0gIkNvbW1hbmQiKSB7CisgICAgICAgIENvbW1hbmQocmVxdWVz
dElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNo
ZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3Vu
ZCIpOworfQorCit2b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVx
dWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQoreworI2lmIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQorICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsK
KyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5Db21tYW5kKHJlcXVlc3RJZCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCisKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWY8SlNPTjo6T2Jq
ZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYWdlbnQtPkNvbW1h
bmQoZXJyb3IpOworCisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKKyAgICAgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxz
ZSk7CisgICAgZWxzZQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2Nv
bEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0QmFja2Vu
ZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hl
cnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBl
cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPHd0
Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVz
cGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBGcm9udGVuZFJvdXRlcjsKKworY2xhc3MgRG9tYWlu
RnJvbnRlbmREaXNwYXRjaGVyIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1Ymxp
YzoKKyAgICBEb21haW5Gcm9udGVuZERpc3BhdGNoZXIoRnJvbnRlbmRSb3V0ZXImIGZyb250ZW5k
Um91dGVyKSA6IG1fZnJvbnRlbmRSb3V0ZXIoZnJvbnRlbmRSb3V0ZXIpIHsgfQorICAgIHZvaWQg
RXZlbnQoKTsKK3ByaXZhdGU6CisgICAgRnJvbnRlbmRSb3V0ZXImIG1fZnJvbnRlbmRSb3V0ZXI7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250
ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hl
cnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5
cGVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCisK
KyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3Zv
aWQgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVyOjpFdmVudCgpCit7CisgICAgUmVmPEpTT046Ok9i
amVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGpzb25NZXNz
YWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7CisKKyAgICBtX2Zy
b250ZW5kUm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmRE
aXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlcy5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgor
I2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisK
KworbmFtZXNwYWNlIFByb3RvY29sIHsKKworCisKKworCisKKworCisKK30gLy8gbmFtZXNwYWNl
IFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xPYmplY3RzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMu
Y3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVz
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKworI2luY2x1
ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKworCit9IC8vIG5h
bWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBkb21haW4tdGFyZ2V0VHlwZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRl
QmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCitAcHJv
dG9jb2wgVGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcjsKKworbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CisKKworY2xhc3MgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyIGZp
bmFsIDogcHVibGljIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyIHsKKyAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBPYmpDSW5zcGVjdG9yRG9tYWluQmFj
a2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4gaGFuZGxl
cikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQorICAgIHZpcnR1YWwgdm9pZCBDb21tYW5kKGxv
bmcgcmVxdWVzdElkKSBvdmVycmlkZTsKK3ByaXZhdGU6CisgICAgUmV0YWluUHRyPGlkPFRlc3RQ
cm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOworfTsKKworfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3Bh
dGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVy
cy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBl
cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBv
cnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgi
CisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2luY2x1ZGUgIlRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisKK25h
bWVzcGFjZSBJbnNwZWN0b3IgeworCit2b2lkIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlz
cGF0Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVlc3RJZCkKK3sKKyAgICBpZiAoIVttX2RlbGVnYXRl
IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOnN1
Y2Nlc3NDYWxsYmFjazopXSkgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQ
cm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5k
LCAiJ0RvbWFpbi5Db21tYW5kJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgeworICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2Vu
ZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgfTsKKworICAgIGlkIHN1Y2Nlc3NDYWxs
YmFjayA9IF57CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1
ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKKyAgICB9OworCisgICAgW21f
ZGVsZWdhdGUgQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0Nh
bGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107Cit9CisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisKKyMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZXMuanNvbgorLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVz
dFByb3RvY29sLmg+CisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQor
QGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKK0Bwcm9wZXJ0
eSAobm9uYXRvbWljLCByZXRhaW4sIHNldHRlcj1zZXREb21haW5IYW5kbGVyOikgaWQ8VGVzdFBy
b3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4gZG9tYWluSGFuZGxlcjsKK0Bwcm9wZXJ0eSAobm9u
YXRvbWljLCByZWFkb25seSkgVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVy
ICpkb21haW5FdmVudERpc3BhdGNoZXI7CitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xDb25maWd1cmF0aW9uLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZp
Z3VyYXRpb24ubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFy
Z2V0VHlwZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCisKKyNpbXBvcnQgIlRlc3RQ
cm90b2NvbEludGVybmFsLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hl
cnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50
Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xs
ZXIuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmRE
aXNwYXRjaGVycy5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXJzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRh
dGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCit7CisgICAgQXVnbWVudGFibGVJbnNwZWN0
b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKKyAgICBpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21h
aW5IYW5kbGVyPiBfZG9tYWluSGFuZGxlcjsKKyAgICBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5F
dmVudERpc3BhdGNoZXIgKl9kb21haW5FdmVudERpc3BhdGNoZXI7Cit9CisKKy0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciop
Y29udHJvbGxlcgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQor
ICAgICAgICByZXR1cm4gbmlsOworICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBfY29udHJv
bGxlciA9IGNvbnRyb2xsZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxv
YworeworICAgIFtfZG9tYWluSGFuZGxlciByZWxlYXNlXTsKKyAgICBbX2RvbWFpbkV2ZW50RGlz
cGF0Y2hlciByZWxlYXNlXTsKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0gKHZvaWQpc2V0
RG9tYWluSGFuZGxlcjooaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4paGFuZGxl
cgoreworICAgIGlmIChoYW5kbGVyID09IF9kb21haW5IYW5kbGVyKQorICAgICAgICByZXR1cm47
CisKKyAgICBbX2RvbWFpbkhhbmRsZXIgcmVsZWFzZV07CisgICAgX2RvbWFpbkhhbmRsZXIgPSBb
aGFuZGxlciByZXRhaW5dOworCisgICAgYXV0byBhbHRlcm5hdGVEaXNwYXRjaGVyID0gbWFrZVVu
aXF1ZTxPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXI+KGhhbmRsZXIpOworICAg
IGF1dG8gYWx0ZXJuYXRlQWdlbnQgPSBtYWtlVW5pcXVlPEFsdGVybmF0ZURpc3BhdGNoYWJsZUFn
ZW50PERvbWFpbkJhY2tlbmREaXNwYXRjaGVyLCBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0
Y2hlcj4+KCJEb21haW4iX3MsICpfY29udHJvbGxlciwgV1RGTW92ZShhbHRlcm5hdGVEaXNwYXRj
aGVyKSk7CisgICAgX2NvbnRyb2xsZXItPmFwcGVuZEV4dHJhQWdlbnQoV1RGTW92ZShhbHRlcm5h
dGVBZ2VudCkpOworfQorCistIChpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPilk
b21haW5IYW5kbGVyCit7CisgICAgcmV0dXJuIF9kb21haW5IYW5kbGVyOworfQorCistIChUZXN0
UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKilkb21haW5FdmVudERpc3BhdGNo
ZXIKK3sKKyAgICBpZiAoIV9kb21haW5FdmVudERpc3BhdGNoZXIpCisgICAgICAgIF9kb21haW5F
dmVudERpc3BhdGNoZXIgPSBbW1Rlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hl
ciBhbGxvY10gaW5pdFdpdGhDb250cm9sbGVyOl9jb250cm9sbGVyXTsKKyAgICByZXR1cm4gX2Rv
bWFpbkV2ZW50RGlzcGF0Y2hlcjsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbi5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZl
bnREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFp
bi10YXJnZXRUeXBlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwor
dXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2Nv
bERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlcgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9y
Q29udHJvbGxlciogX2NvbnRyb2xsZXI7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENv
bnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgorewor
ICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4g
bmlsOworICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xs
ZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpRXZlbnQKK3sKKyAgICBjb25zdCBG
cm9udGVuZFJvdXRlciYgcm91dGVyID0gX2NvbnRyb2xsZXItPmZyb250ZW5kUm91dGVyKCk7CisK
KyAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRl
KCk7CisgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50
Il9zKTsKKyAgICByb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7
Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hl
cnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVzLmpzb24KKy8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0
aW9uLmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4K
KworCisKKworCisKKworCitAcHJvdG9jb2wgVGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxl
ciA8TlNPYmplY3Q+CitAb3B0aW9uYWwKKy0gKHZvaWQpQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNr
Oih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6
KHZvaWQoXikodm9pZCkpc3VjY2Vzc0NhbGxiYWNrOworQGVuZAorCitfX2F0dHJpYnV0ZV9fKCh2
aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sRG9tYWluRG9t
YWluRXZlbnREaXNwYXRjaGVyIDogTlNPYmplY3QKKy0gKHZvaWQpRXZlbnQ7CitAZW5kCisKKwor
I2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0
cy5oPgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
ZG9tYWluLXRhcmdldFR5cGVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9j
b2xKU09OT2JqZWN0UHJpdmF0ZS5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFi
bGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCitA
aW50ZXJmYWNlIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAoUHJpdmF0
ZSkKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEluc3BlY3Rvcjo6QXVnbWVu
dGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyOworQGVuZAorCisKKyMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBk
b21haW4tdGFyZ2V0VHlwZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rv
ci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7
CisKK3RlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KK09wdGlvbmFsPE9iakNFbnVtVHlw
ZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOworCit9IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVzLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgor
I2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9y
L1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3Bl
Y3RvcjsKKworCisKKworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlcy5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2Nv
bEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgor
I2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKyNp
bXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1
c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
VHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpz
b24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbi1yZXN1bHQK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmVkZDAyMTJlZDIzCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V4cGVjdGVkL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbi1yZXN1
bHQKQEAgLTAsMCArMSwxNDIyIEBACisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENv
bW1hbmRzLmpzCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRo
LXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKy8vIE5ldHdvcmsxCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9t
YWluKCJOZXR3b3JrMSIsIG51bGwpOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQo
Ik5ldHdvcmsxLmxvYWRSZXNvdXJjZTEiLCBudWxsLCBbXSwgW10pOworSW5zcGVjdG9yQmFja2Vu
ZC5hY3RpdmF0ZURvbWFpbigiTmV0d29yazEiLCBudWxsKTsKKworLy8gTmV0d29yazMKK0luc3Bl
Y3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIk5ldHdvcmszIiwgbnVsbCk7CitJbnNwZWN0b3JC
YWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiTmV0d29yazMubG9hZFJlc291cmNlMSIsIG51bGwsIFtd
LCBbXSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiTmV0d29yazMubG9hZFJl
c291cmNlMiIsIG51bGwsIFtdLCBbXSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFu
ZCgiTmV0d29yazMubG9hZFJlc291cmNlMyIsIG51bGwsIFtdLCBbXSk7CitJbnNwZWN0b3JCYWNr
ZW5kLnJlZ2lzdGVyQ29tbWFuZCgiTmV0d29yazMubG9hZFJlc291cmNlNCIsIG51bGwsIFtdLCBb
XSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiTmV0d29yazMubG9hZFJlc291
cmNlNSIsIG51bGwsIFtdLCBbXSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgi
TmV0d29yazMubG9hZFJlc291cmNlNiIsIG51bGwsIFtdLCBbXSk7CitJbnNwZWN0b3JCYWNrZW5k
LnJlZ2lzdGVyQ29tbWFuZCgiTmV0d29yazMubG9hZFJlc291cmNlNyIsIG51bGwsIFtdLCBbXSk7
CitJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJOZXR3b3JrMyIsIG51bGwpOworIyMj
IEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKKworIyMjIEJlZ2luIEZpbGU6
IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKwor
I2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCisjaW5jbHVkZSAi
VGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZy
b250ZW5kUm91dGVyLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBBbHRlcm5h
dGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0
Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmRE
aXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQorICAgIEJhY2tlbmREaXNwYXRjaGVy
KiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIu
Z2V0KCk7IH0KK3ByaXZhdGU6CisgICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tl
bmREaXNwYXRjaGVyOworfTsKKworCitjbGFzcyBBbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNw
YXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAg
ICB2aXJ0dWFsIH5BbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKCkgeyB9CisgICAg
dmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTEobG9uZyBjYWxsSWQpID0gMDsKK307CitjbGFzcyBB
bHRlcm5hdGVOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJhY2tl
bmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5BbHRlcm5hdGVOZXR3b3JrM0Jh
Y2tlbmREaXNwYXRjaGVyKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTEobG9u
ZyBjYWxsSWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMihsb25nIGNhbGxJ
ZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UzKGxvbmcgY2FsbElkKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTQobG9uZyBjYWxsSWQpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlNShsb25nIGNhbGxJZCkgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBsb2FkUmVzb3VyY2U2KGxvbmcgY2FsbElkKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGxv
YWRSZXNvdXJjZTcobG9uZyBjYWxsSWQpID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
CisjIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMg
QmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0eXBlZGVmIFN0cmluZyBFcnJv
clN0cmluZzsKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQor
Y2xhc3MgQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjsKK2NsYXNzIEFsdGVybmF0
ZU5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI7CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKK2NsYXNzIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMShFcnJvclN0
cmluZyYpID0gMDsKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5OZXR3b3JrMUJhY2tlbmREaXNw
YXRjaGVySGFuZGxlcigpOworfTsKKworY2xhc3MgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UxKEVycm9yU3Ry
aW5nJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UyKEVycm9yU3RyaW5nJikg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UzKEVycm9yU3RyaW5nJikgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2U0KEVycm9yU3RyaW5nJikgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBsb2FkUmVzb3VyY2U1KEVycm9yU3RyaW5nJikgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBsb2FkUmVzb3VyY2U2KEVycm9yU3RyaW5nJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBs
b2FkUmVzb3VyY2U3KEVycm9yU3RyaW5nJikgPSAwOworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwg
fk5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7Cit9OworCitjbGFzcyBOZXR3b3Jr
MUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNw
YXRjaGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPE5ldHdvcmsxQmFja2VuZERpc3BhdGNo
ZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyKik7CisgICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5n
JiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkgb3ZlcnJpZGU7Citwcml2YXRl
OgorICAgIHZvaWQgbG9hZFJlc291cmNlMShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9i
amVjdD4mJiBwYXJhbWV0ZXJzKTsKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKK3B1YmxpYzoKKyAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJu
YXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2Fs
dGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9Citwcml2YXRlOgorICAg
IEFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIqIG1fYWx0ZXJuYXRlRGlzcGF0Y2hl
ciB7IG51bGxwdHIgfTsKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKK3ByaXZhdGU6CisgICAgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5k
RGlzcGF0Y2hlciYsIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgTmV0
d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQgeyBudWxscHRyIH07Cit9Owor
CitjbGFzcyBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1l
bnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPE5ldHdvcmsz
QmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIE5ldHdvcmszQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJ
ZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkgb3Zl
cnJpZGU7Citwcml2YXRlOgorICAgIHZvaWQgbG9hZFJlc291cmNlMShsb25nIHJlcXVlc3RJZCwg
UmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyAgICB2b2lkIGxvYWRSZXNvdXJj
ZTIobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Cisg
ICAgdm9pZCBsb2FkUmVzb3VyY2UzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0
PiYmIHBhcmFtZXRlcnMpOworICAgIHZvaWQgbG9hZFJlc291cmNlNChsb25nIHJlcXVlc3RJZCwg
UmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyAgICB2b2lkIGxvYWRSZXNvdXJj
ZTUobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Cisg
ICAgdm9pZCBsb2FkUmVzb3VyY2U2KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0
PiYmIHBhcmFtZXRlcnMpOworICAgIHZvaWQgbG9hZFJlc291cmNlNyhsb25nIHJlcXVlc3RJZCwg
UmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyNpZiBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK3B1YmxpYzoKKyAgICB2b2lkIHNldEFsdGVybmF0ZURp
c3BhdGNoZXIoQWx0ZXJuYXRlTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlz
cGF0Y2hlcikgeyBtX2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9
Citwcml2YXRlOgorICAgIEFsdGVybmF0ZU5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIqIG1fYWx0
ZXJuYXRlRGlzcGF0Y2hlciB7IG51bGxwdHIgfTsKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK3ByaXZhdGU6CisgICAgTmV0d29yazNCYWNrZW5kRGlz
cGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYsIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyKik7CisgICAgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQgeyBu
dWxscHRyIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTog
VGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERp
c3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMt
d2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEJh
Y2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
RnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUg
PHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwor
I2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorI2luY2x1ZGUgIlRl
c3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK05l
dHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIoKSB7IH0KK05ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+TmV0d29y
azNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KKworUmVmPE5ldHdvcmsxQmFja2VuZERp
c3BhdGNoZXI+IE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShCYWNrZW5kRGlzcGF0
Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
KiBhZ2VudCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBOZXR3b3JrMUJhY2tlbmREaXNw
YXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOworfQorCitOZXR3b3JrMUJhY2tlbmRE
aXNwYXRjaGVyOjpOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBi
YWNrZW5kRGlzcGF0Y2hlciwgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50
KQorICAgIDogU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIp
CisgICAgLCBtX2FnZW50KGFnZW50KQoreworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lz
dGVyRGlzcGF0Y2hlckZvckRvbWFpbigiTmV0d29yazEiX3MsIHRoaXMpOworfQorCit2b2lkIE5l
dHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBT
dHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQoreworICAgIFJlZjxO
ZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKKworICAgIFJlZlB0cjxK
U09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7CisgICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMi
X3MsIHBhcmFtZXRlcnMpOworCisgICAgaWYgKG1ldGhvZCA9PSAibG9hZFJlc291cmNlMSIpIHsK
KyAgICAgICAgbG9hZFJlc291cmNlMShyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0
UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29y
azEuIiArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKK30KKwordm9pZCBOZXR3b3JrMUJh
Y2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UxKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiYmKQoreworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENI
RVJTKQorICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKKyAgICAgICAgbV9hbHRlcm5h
dGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2UxKHJlcXVlc3RJZCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
CisKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQg
PSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTEoZXJy
b3IpOworCisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Cisg
ICAgZWxzZQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9y
KEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOworfQorCitS
ZWY8TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcj4gTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6
Y3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgTmV0d29yazNCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIsIGFnZW50KSk7Cit9
CisKK05ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6Ok5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIo
QmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBOZXR3b3JrM0JhY2tlbmREaXNw
YXRjaGVySGFuZGxlciogYWdlbnQpCisgICAgOiBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hl
cihiYWNrZW5kRGlzcGF0Y2hlcikKKyAgICAsIG1fYWdlbnQoYWdlbnQpCit7CisgICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKCJOZXR3b3JrMyJfcywg
dGhpcyk7Cit9CisKK3ZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9u
ZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1l
c3NhZ2UpCit7CisgICAgUmVmPE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRo
aXMpOworCisgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVyczsKKyAgICBtZXNzYWdl
LT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFyYW1ldGVycyk7CisKKyAgICB0eXBlZGVmIHZvaWQg
KE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OipDYWxsSGFuZGxlcikobG9uZyByZXF1ZXN0SWQs
IFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSk7CisgICAgdHlwZWRlZiBIYXNoTWFwPFN0
cmluZywgQ2FsbEhhbmRsZXI+IERpc3BhdGNoTWFwOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxEaXNwYXRjaE1hcD4gZGlzcGF0Y2hNYXA7CisgICAgaWYgKGRpc3BhdGNoTWFwLmdldCgpLmlz
RW1wdHkoKSkgeworICAgICAgICBzdGF0aWMgY29uc3Qgc3RydWN0IE1ldGhvZFRhYmxlIHsKKyAg
ICAgICAgICAgIGNvbnN0IGNoYXIqIG5hbWU7CisgICAgICAgICAgICBDYWxsSGFuZGxlciBoYW5k
bGVyOworICAgICAgICB9IGNvbW1hbmRzW10gPSB7CisgICAgICAgICAgICB7ICJsb2FkUmVzb3Vy
Y2UxIiwgJk5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTEgfSwKKyAgICAg
ICAgICAgIHsgImxvYWRSZXNvdXJjZTIiLCAmTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9h
ZFJlc291cmNlMiB9LAorICAgICAgICAgICAgeyAibG9hZFJlc291cmNlMyIsICZOZXR3b3JrM0Jh
Y2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UzIH0sCisgICAgICAgICAgICB7ICJsb2FkUmVz
b3VyY2U0IiwgJk5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTQgfSwKKyAg
ICAgICAgICAgIHsgImxvYWRSZXNvdXJjZTUiLCAmTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6
bG9hZFJlc291cmNlNSB9LAorICAgICAgICAgICAgeyAibG9hZFJlc291cmNlNiIsICZOZXR3b3Jr
M0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U2IH0sCisgICAgICAgICAgICB7ICJsb2Fk
UmVzb3VyY2U3IiwgJk5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTcgfSwK
KyAgICAgICAgfTsKKyAgICAgICAgc2l6ZV90IGxlbmd0aCA9IFdURl9BUlJBWV9MRU5HVEgoY29t
bWFuZHMpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQorICAg
ICAgICAgICAgZGlzcGF0Y2hNYXAuZ2V0KCkuYWRkKGNvbW1hbmRzW2ldLm5hbWUsIGNvbW1hbmRz
W2ldLmhhbmRsZXIpOworICAgIH0KKworICAgIGF1dG8gZmluZFJlc3VsdCA9IGRpc3BhdGNoTWFw
LmdldCgpLmZpbmQobWV0aG9kKTsKKyAgICBpZiAoZmluZFJlc3VsdCA9PSBkaXNwYXRjaE1hcC5n
ZXQoKS5lbmQoKSkgeworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2Nv
bEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMy4iICsg
bWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgKCgqdGhpcykuKmZpbmRSZXN1bHQtPnZhbHVlKShyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1l
dGVycykpOworfQorCit2b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJj
ZTEobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCit7CisjaWYgRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisgICAgaWYgKG1fYWx0ZXJuYXRlRGlz
cGF0Y2hlcikgeworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZTEo
cmVxdWVzdElkKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworICAgIEVycm9yU3RyaW5nIGVycm9yOwor
ICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Cisg
ICAgbV9hZ2VudC0+bG9hZFJlc291cmNlMShlcnJvcik7CisKKyAgICBpZiAoIWVycm9yLmxlbmd0
aCgpKQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElk
LCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVy
cm9yLCBXVEZNb3ZlKGVycm9yKSk7Cit9CisKK3ZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hl
cjo6bG9hZFJlc291cmNlMihsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikK
K3sKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyAgICBpZiAo
bV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+
bG9hZFJlc291cmNlMihyZXF1ZXN0SWQpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlm
IC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCisgICAgRXJyb3JT
dHJpbmcgZXJyb3I7CisgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKTsKKyAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2UyKGVycm9yKTsKKworICAgIGlm
ICghZXJyb3IubGVuZ3RoKCkpCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNw
b25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOworICAgIGVsc2UKKyAgICAg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0
Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKK30KKwordm9pZCBOZXR3b3JrM0Jh
Y2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiYmKQoreworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENI
RVJTKQorICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKKyAgICAgICAgbV9hbHRlcm5h
dGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2UzKHJlcXVlc3RJZCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
CisKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQg
PSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTMoZXJy
b3IpOworCisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Cisg
ICAgZWxzZQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9y
KEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOworfQorCit2
b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTQobG9uZyByZXF1ZXN0
SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCit7CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCisgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeworICAg
ICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZTQocmVxdWVzdElkKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKKworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgIFJlZjxKU09OOjpP
YmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9hZ2VudC0+bG9h
ZFJlc291cmNlNChlcnJvcik7CisKKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQorICAgICAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3Vs
dCksIGZhbHNlKTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9y
dFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVy
cm9yKSk7Cit9CisKK3ZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNl
NShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKK3sKKyNpZiBFTkFCTEUo
SU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyAgICBpZiAobV9hbHRlcm5hdGVEaXNw
YXRjaGVyKSB7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlNShy
ZXF1ZXN0SWQpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmIC8vIEVOQUJMRShJTlNQ
RUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCisgICAgRXJyb3JTdHJpbmcgZXJyb3I7Cisg
ICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAg
ICBtX2FnZW50LT5sb2FkUmVzb3VyY2U1KGVycm9yKTsKKworICAgIGlmICghZXJyb3IubGVuZ3Ro
KCkpCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQs
IFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOworICAgIGVsc2UKKyAgICAgICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJy
b3IsIFdURk1vdmUoZXJyb3IpKTsKK30KKwordm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVy
Ojpsb2FkUmVzb3VyY2U2KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQor
eworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorICAgIGlmICht
X2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5s
b2FkUmVzb3VyY2U2KHJlcXVlc3RJZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYg
Ly8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyAgICBFcnJvclN0
cmluZyBlcnJvcjsKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOworICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTYoZXJyb3IpOworCisgICAgaWYg
KCFlcnJvci5sZW5ndGgoKSkKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3Bv
bnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7CisgICAgZWxzZQorICAgICAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRj
aGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOworfQorCit2b2lkIE5ldHdvcmszQmFj
a2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTcobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09O
OjpPYmplY3Q+JiYpCit7CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCisgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeworICAgICAgICBtX2FsdGVybmF0
ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZTcocmVxdWVzdElkKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
KworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9
IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9hZ2VudC0+bG9hZFJlc291cmNlNyhlcnJv
cik7CisKKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQorICAgICAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKKyAg
ICBlbHNlCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3Io
QmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0
Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29t
bWFuZC1zaXplcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2lu
Y2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBGcm9udGVuZFJvdXRlcjsKKworfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNo
ZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1h
bmQtc2l6ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMu
aCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsK
KworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5k
RGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1j
b21tYW5kLXNpemVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQ
cm90b2NvbFR5cGVzLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNl
IEluc3BlY3RvciB7CisKKworCituYW1lc3BhY2UgUHJvdG9jb2wgeworCisKKworCisKKy8vIFR5
cGVkZWZzLgorbmFtZXNwYWNlIE5ldHdvcmsyIHsKKy8qIFVuaXF1ZSBsb2FkZXIgaWRlbnRpZmll
ci4gKi8KK3R5cGVkZWYgU3RyaW5nIExvYWRlcklkOworfSAvLyBOZXR3b3JrMgorLy8gRW5kIG9m
IHR5cGVkZWZzLgorCisKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorCisjIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKworI2luY2x1ZGUgPHd0Zi9P
cHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIElu
c3BlY3RvciB7CisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKworCit9IC8vIG5hbWVzcGFjZSBQ
cm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xPYmplY3RzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2Vu
ZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5z
LXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4K
KworQHByb3RvY29sIFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcjsKK0Bwcm90b2Nv
bCBUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkhhbmRsZXI7CisKK25hbWVzcGFjZSBJbnNwZWN0
b3IgeworCisKK2NsYXNzIE9iakNJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyIGZp
bmFsIDogcHVibGljIEFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIgeworICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIE9iakNJbnNwZWN0b3JOZXR3b3Jr
MUJhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4g
aGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQorICAgIHZpcnR1YWwgdm9pZCBsb2Fk
UmVzb3VyY2UxKGxvbmcgcmVxdWVzdElkKSBvdmVycmlkZTsKK3ByaXZhdGU6CisgICAgUmV0YWlu
UHRyPGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7Cit9
OworCitjbGFzcyBPYmpDSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6
IHB1YmxpYyBBbHRlcm5hdGVOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyIHsKKyAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBPYmpDSW5zcGVjdG9yTmV0d29yazNCYWNr
ZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkhhbmRsZXI+IGhhbmRs
ZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291
cmNlMShsb25nIHJlcXVlc3RJZCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNv
dXJjZTIobG9uZyByZXF1ZXN0SWQpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVz
b3VyY2UzKGxvbmcgcmVxdWVzdElkKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJl
c291cmNlNChsb25nIHJlcXVlc3RJZCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGxvYWRS
ZXNvdXJjZTUobG9uZyByZXF1ZXN0SWQpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBsb2Fk
UmVzb3VyY2U2KGxvbmcgcmVxdWVzdElkKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgbG9h
ZFJlc291cmNlNyhsb25nIHJlcXVlc3RJZCkgb3ZlcnJpZGU7Citwcml2YXRlOgorICAgIFJldGFp
blB0cjxpZDxUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJh
Y2tlbmREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRv
bWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRl
c3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSAiVGVzdFByb3RvY29s
SW50ZXJuYWwuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNp
bmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordm9p
ZCBPYmpDSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMShs
b25nIHJlcXVlc3RJZCkKK3sKKyAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3Rv
cjpAc2VsZWN0b3IobG9hZFJlc291cmNlMVdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFj
azopXSkgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9y
KHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmsx
LmxvYWRSZXNvdXJjZTEnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7CisgICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlz
cGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICB9OworCisgICAgaWQgc3VjY2Vzc0NhbGxiYWNr
ID0gXnsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJ
ZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2UpOworICAgIH07CisKKyAgICBbbV9kZWxl
Z2F0ZSBsb2FkUmVzb3VyY2UxV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNz
Q2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKK30KKworCit2b2lkIE9iakNJbnNwZWN0b3JOZXR3
b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UxKGxvbmcgcmVxdWVzdElkKQorewor
ICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVz
b3VyY2UxV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7CisgICAgICAgIGJh
Y2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5k
RGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMubG9hZFJlc291cmNlMScgd2Fz
IG5vdCBmb3VuZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5n
RXJyb3JzKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZCBlcnJvckNhbGxiYWNr
ID0gXihOU1N0cmluZyAqZXJyb3IpIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVw
b3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJv
ciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9y
cygpOworICAgIH07CisKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeeworICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpLCBmYWxzZSk7CisgICAgfTsKKworICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZTFX
aXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2Fs
bGJhY2tdOworfQorCit2b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVy
Ojpsb2FkUmVzb3VyY2UyKGxvbmcgcmVxdWVzdElkKQoreworICAgIGlmICghW21fZGVsZWdhdGUg
cmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2UyV2l0aEVycm9yQ2FsbGJh
Y2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJl
cG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90
Rm91bmQsICInTmV0d29yazMubG9hZFJlc291cmNlMicgd2FzIG5vdCBmb3VuZCJfcyk7CisgICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3Ip
IHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1
ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgIH07CisKKyAgICBp
ZCBzdWNjZXNzQ2FsbGJhY2sgPSBeeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5k
UmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAg
fTsKKworICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZTJXaXRoRXJyb3JDYWxsYmFjazplcnJv
ckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOworfQorCit2b2lkIE9i
akNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UzKGxvbmcg
cmVxdWVzdElkKQoreworICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBz
ZWxlY3Rvcihsb2FkUmVzb3VyY2UzV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOild
KSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVx
dWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMubG9h
ZFJlc291cmNlMycgd2FzIG5vdCBmb3VuZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVy
KCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKKyAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRj
aGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5z
ZW5kUGVuZGluZ0Vycm9ycygpOworICAgIH07CisKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBe
eworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBK
U09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgfTsKKworICAgIFttX2RlbGVnYXRl
IGxvYWRSZXNvdXJjZTNXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxs
YmFjazpzdWNjZXNzQ2FsbGJhY2tdOworfQorCit2b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0Jh
Y2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U0KGxvbmcgcmVxdWVzdElkKQoreworICAgIGlm
ICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2U0
V2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7CisgICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0
Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMubG9hZFJlc291cmNlNCcgd2FzIG5vdCBm
b3VuZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3Jz
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZCBlcnJvckNhbGxiYWNrID0gXihO
U1N0cmluZyAqZXJyb3IpIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJv
dG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJy
b3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwor
ICAgIH07CisKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeeworICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
LCBmYWxzZSk7CisgICAgfTsKKworICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZTRXaXRoRXJy
b3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2td
OworfQorCit2b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2Fk
UmVzb3VyY2U1KGxvbmcgcmVxdWVzdElkKQoreworICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9u
ZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2U1V2l0aEVycm9yQ2FsbGJhY2s6c3Vj
Y2Vzc0NhbGxiYWNrOildKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFBy
b3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQs
ICInTmV0d29yazMubG9hZFJlc291cmNlNScgd2FzIG5vdCBmb3VuZCJfcyk7CisgICAgICAgIGJh
Y2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKKyAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQs
IEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5k
RGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgIH07CisKKyAgICBpZCBzdWNj
ZXNzQ2FsbGJhY2sgPSBeeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9u
c2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgfTsKKwor
ICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZTVXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxi
YWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOworfQorCit2b2lkIE9iakNJbnNw
ZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U2KGxvbmcgcmVxdWVz
dElkKQoreworICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rv
cihsb2FkUmVzb3VyY2U2V2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Cisg
ICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElk
LCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMubG9hZFJlc291
cmNlNicgd2FzIG5vdCBmb3VuZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNl
bmRQZW5kaW5nRXJyb3JzKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZCBlcnJv
ckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpT
ZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVu
ZGluZ0Vycm9ycygpOworICAgIH07CisKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeeworICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgfTsKKworICAgIFttX2RlbGVnYXRlIGxvYWRS
ZXNvdXJjZTZXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpz
dWNjZXNzQ2FsbGJhY2tdOworfQorCit2b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmRE
aXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U3KGxvbmcgcmVxdWVzdElkKQoreworICAgIGlmICghW21f
ZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2U3V2l0aEVy
cm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6
TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMubG9hZFJlc291cmNlNycgd2FzIG5vdCBmb3VuZCJf
cyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmlu
ZyAqZXJyb3IpIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xF
cnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwor
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgIH07
CisKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxz
ZSk7CisgICAgfTsKKworICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZTdXaXRoRXJyb3JDYWxs
YmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOworfQor
CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bEJhY2tlbmREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29u
ZmlndXJhdGlvbi5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13
aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4K
KworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRl
c3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAorQHByb3BlcnR5IChub25hdG9taWMs
IHJldGFpbiwgc2V0dGVyPXNldE5ldHdvcmsxSGFuZGxlcjopIGlkPFRlc3RQcm90b2NvbE5ldHdv
cmsxRG9tYWluSGFuZGxlcj4gbmV0d29yazFIYW5kbGVyOworQHByb3BlcnR5IChub25hdG9taWMs
IHJldGFpbiwgc2V0dGVyPXNldE5ldHdvcmszSGFuZGxlcjopIGlkPFRlc3RQcm90b2NvbE5ldHdv
cmszRG9tYWluSGFuZGxlcj4gbmV0d29yazNIYW5kbGVyOworQGVuZAorCisKKyMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
ZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3Vy
YXRpb24uaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbXBvcnQgIlRl
c3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1
Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKwordXNpbmcgbmFtZXNwYWNl
IEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24K
K3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworICAg
IGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4gX25ldHdvcmsxSGFuZGxlcjsK
KyAgICBpZDxUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkhhbmRsZXI+IF9uZXR3b3JrM0hhbmRs
ZXI7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxl
SW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5p
dF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIEFTU0VSVChjb250
cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAgcmV0dXJuIHNlbGY7
Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIFtfbmV0d29yazFIYW5kbGVyIHJlbGVhc2Vd
OworICAgIFtfbmV0d29yazNIYW5kbGVyIHJlbGVhc2VdOworICAgIFtzdXBlciBkZWFsbG9jXTsK
K30KKworLSAodm9pZClzZXROZXR3b3JrMUhhbmRsZXI6KGlkPFRlc3RQcm90b2NvbE5ldHdvcmsx
RG9tYWluSGFuZGxlcj4paGFuZGxlcgoreworICAgIGlmIChoYW5kbGVyID09IF9uZXR3b3JrMUhh
bmRsZXIpCisgICAgICAgIHJldHVybjsKKworICAgIFtfbmV0d29yazFIYW5kbGVyIHJlbGVhc2Vd
OworICAgIF9uZXR3b3JrMUhhbmRsZXIgPSBbaGFuZGxlciByZXRhaW5dOworCisgICAgYXV0byBh
bHRlcm5hdGVEaXNwYXRjaGVyID0gbWFrZVVuaXF1ZTxPYmpDSW5zcGVjdG9yTmV0d29yazFCYWNr
ZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7CisgICAgYXV0byBhbHRlcm5hdGVBZ2VudCA9IG1ha2VV
bmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hl
ciwgQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4+KCJOZXR3b3JrMSJfcywgKl9j
b250cm9sbGVyLCBXVEZNb3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIpKTsKKyAgICBfY29udHJvbGxl
ci0+YXBwZW5kRXh0cmFBZ2VudChXVEZNb3ZlKGFsdGVybmF0ZUFnZW50KSk7Cit9CisKKy0gKGlk
PFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4pbmV0d29yazFIYW5kbGVyCit7Cisg
ICAgcmV0dXJuIF9uZXR3b3JrMUhhbmRsZXI7Cit9CisKKy0gKHZvaWQpc2V0TmV0d29yazNIYW5k
bGVyOihpZDxUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkhhbmRsZXI+KWhhbmRsZXIKK3sKKyAg
ICBpZiAoaGFuZGxlciA9PSBfbmV0d29yazNIYW5kbGVyKQorICAgICAgICByZXR1cm47CisKKyAg
ICBbX25ldHdvcmszSGFuZGxlciByZWxlYXNlXTsKKyAgICBfbmV0d29yazNIYW5kbGVyID0gW2hh
bmRsZXIgcmV0YWluXTsKKworICAgIGF1dG8gYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IG1ha2VVbmlx
dWU8T2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI+KGhhbmRsZXIpOworICAg
IGF1dG8gYWx0ZXJuYXRlQWdlbnQgPSBtYWtlVW5pcXVlPEFsdGVybmF0ZURpc3BhdGNoYWJsZUFn
ZW50PE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIsIEFsdGVybmF0ZU5ldHdvcmszQmFja2VuZERp
c3BhdGNoZXI+PigiTmV0d29yazMiX3MsICpfY29udHJvbGxlciwgV1RGTW92ZShhbHRlcm5hdGVE
aXNwYXRjaGVyKSk7CisgICAgX2NvbnRyb2xsZXItPmFwcGVuZEV4dHJhQWdlbnQoV1RGTW92ZShh
bHRlcm5hdGVBZ2VudCkpOworfQorCistIChpZDxUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkhh
bmRsZXI+KW5ldHdvcmszSGFuZGxlcgoreworICAgIHJldHVybiBfbmV0d29yazNIYW5kbGVyOwor
fQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1t
CisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFu
ZC1zaXplcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
KyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcg
bmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50
RGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1z
aXplcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNp
bXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3Iv
UldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+CisKKworCisKKworCisKKworQHByb3RvY29sIFRlc3RQ
cm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlciA8TlNPYmplY3Q+CitAb3B0aW9uYWwKKy0gKHZv
aWQpbG9hZFJlc291cmNlMVdpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJv
cikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikodm9pZCkpc3VjY2Vzc0Nh
bGxiYWNrOworQGVuZAorCitAcHJvdG9jb2wgVGVzdFByb3RvY29sTmV0d29yazNEb21haW5IYW5k
bGVyIDxOU09iamVjdD4KK0BvcHRpb25hbAorLSAodm9pZClsb2FkUmVzb3VyY2UxV2l0aEVycm9y
Q2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3ND
YWxsYmFjazoodm9pZCheKSh2b2lkKSlzdWNjZXNzQ2FsbGJhY2s7CistICh2b2lkKWxvYWRSZXNv
dXJjZTJXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2Fs
bGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKHZvaWQpKXN1Y2Nlc3NDYWxsYmFjazsKKy0g
KHZvaWQpbG9hZFJlc291cmNlM1dpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICpl
cnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikodm9pZCkpc3VjY2Vz
c0NhbGxiYWNrOworLSAodm9pZClsb2FkUmVzb3VyY2U0V2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQo
XikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZChe
KSh2b2lkKSlzdWNjZXNzQ2FsbGJhY2s7CistICh2b2lkKWxvYWRSZXNvdXJjZTVXaXRoRXJyb3JD
YWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0Nh
bGxiYWNrOih2b2lkKF4pKHZvaWQpKXN1Y2Nlc3NDYWxsYmFjazsKKy0gKHZvaWQpbG9hZFJlc291
cmNlNldpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxs
YmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikodm9pZCkpc3VjY2Vzc0NhbGxiYWNrOworLSAo
dm9pZClsb2FkUmVzb3VyY2U3V2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVy
cm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKSh2b2lkKSlzdWNjZXNz
Q2FsbGJhY2s7CitAZW5kCisKKworCisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2Nv
bEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4KKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2wuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6
ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1w
b3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2
YXRlLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRy
b2xsZXIuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKKworCisKKyMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21h
aW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0
IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+CisKK25hbWVzcGFj
ZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+CitPcHRpb25h
bDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsK
KworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5z
LXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
LmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sVHlw
ZVBhcnNlci5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFBy
aXZhdGUuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGludGVyZmFjZSBUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKE5ldHdvcmsyRG9tYWluKQorCisrICh2b2lkKV9wYXJz
ZUxvYWRlcklkOihOU1N0cmluZyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsK
KworQGVuZAorCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChO
ZXR3b3JrMkRvbWFpbikKKworKyAodm9pZClfcGFyc2VMb2FkZXJJZDooTlNTdHJpbmcgKiopb3V0
VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9S
X0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBjbGFzc10pOworICAgICpvdXRWYWx1ZSA9IChO
U1N0cmluZyAqKXBheWxvYWQ7Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlw
ZXMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFy
eWluZy1jb21tYW5kLXNpemVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAi
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJ
UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4K
KyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7
CisKKworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9l
bnVtLXZhbHVlcy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC9lbnVtLXZhbHVlcy5qc29uLXJlc3VsdApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uN2RmYzE5NDEyYTEKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvZW51bS12YWx1ZXMuanNvbi1yZXN1bHQKQEAgLTAsMCArMSwxMjAzIEBACisjIyMgQmVnaW4g
RmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisvLyBUeXBlRG9tYWluCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVy
RG9tYWluKCJUeXBlRG9tYWluIiwgbnVsbCk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51
bSgiVHlwZURvbWFpbi5UeXBlRG9tYWluRW51bSIsIHtTaGFyZWQ6ICJzaGFyZWQiLCBSZWQ6ICJy
ZWQiLCBHcmVlbjogImdyZWVuIiwgQmx1ZTogImJsdWUifSk7CitJbnNwZWN0b3JCYWNrZW5kLmFj
dGl2YXRlRG9tYWluKCJUeXBlRG9tYWluIiwgbnVsbCk7CisKKy8vIENvbW1hbmREb21haW4KK0lu
c3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIkNvbW1hbmREb21haW4iLCBudWxsKTsKK0lu
c3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJDb21tYW5kRG9tYWluLmNvbW1hbmRXaXRo
RW51bVJldHVyblZhbHVlIiwgbnVsbCwgW10sIFsicmV0dXJuVmFsdWUiXSk7CitJbnNwZWN0b3JC
YWNrZW5kLmFjdGl2YXRlRG9tYWluKCJDb21tYW5kRG9tYWluIiwgbnVsbCk7CisKKy8vIEV2ZW50
RG9tYWluCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJFdmVudERvbWFpbiIsIG51
bGwpOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIkV2ZW50RG9tYWluLkV2ZW50V2l0
aEVudW1QYXJhbWV0ZXJQYXJhbWV0ZXIiLCB7U2hhcmVkOiAic2hhcmVkIiwgQmxhY2s6ICJibGFj
ayIsIFdoaXRlOiAid2hpdGUifSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnQoIkV2
ZW50RG9tYWluLmV2ZW50V2l0aEVudW1QYXJhbWV0ZXIiLCBudWxsLCBbInBhcmFtZXRlciJdKTsK
K0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudERvbWFpbkRpc3BhdGNoZXIgPSBJbnNwZWN0
b3JCYWNrZW5kLnJlZ2lzdGVyRGlzcGF0Y2hlci5iaW5kKEluc3BlY3RvckJhY2tlbmQsICJFdmVu
dERvbWFpbiIpOworSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiRXZlbnREb21haW4i
LCBudWxsKTsKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCisKKyMj
IyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyNpbmNsdWRlICJUZXN0UHJvdG9j
b2xUeXBlcy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0
ZXIuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEFsdGVybmF0ZUJhY2tlbmRE
aXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0
cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIg
PSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9CisgICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmRE
aXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQor
cHJpdmF0ZToKKyAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNo
ZXI7Cit9OworCisKK2NsYXNzIEFsdGVybmF0ZUNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hl
ciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdmly
dHVhbCB+QWx0ZXJuYXRlQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKCkgeyB9CisgICAg
dmlydHVhbCB2b2lkIGNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlKGxvbmcgY2FsbElkKSA9IDA7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQ
RUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRl
QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0
Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3R5cGVkZWYgU3RyaW5n
IEVycm9yU3RyaW5nOworCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCitjbGFzcyBBbHRlcm5hdGVDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI7CisjZW5k
aWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKK2NsYXNzIENv
bW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgeworcHVibGljOgorICAgIC8vIE5h
bWVkIGFmdGVyIHBhcmFtZXRlciAncmV0dXJuVmFsdWUnIHdoaWxlIGdlbmVyYXRpbmcgY29tbWFu
ZC9ldmVudCBjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZS4KKyAgICBlbnVtIGNsYXNzIFJldHVy
blZhbHVlIHsKKyAgICAgICAgU2hhcmVkID0gMCwKKyAgICAgICAgQ3lhbiA9IDYsCisgICAgICAg
IE1hZ2VudGEgPSA3LAorICAgICAgICBZZWxsb3cgPSA4LAorICAgIH07IC8vIGVudW0gY2xhc3Mg
UmV0dXJuVmFsdWUKKyAgICB2aXJ0dWFsIHZvaWQgY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUo
RXJyb3JTdHJpbmcmLCBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpSZXR1
cm5WYWx1ZSogb3V0X3JldHVyblZhbHVlKSA9IDA7Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+
Q29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOworfTsKKworY2xhc3MgQ29t
bWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJh
Y2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPENvbW1hbmREb21haW5C
YWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgQ29tbWFuZERvbWFp
bkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1
ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2Up
IG92ZXJyaWRlOworcHJpdmF0ZToKKyAgICB2b2lkIGNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVl
KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOworI2lm
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorcHVibGljOgorICAgIHZv
aWQgc2V0QWx0ZXJuYXRlRGlzcGF0Y2hlcihBbHRlcm5hdGVDb21tYW5kRG9tYWluQmFja2VuZERp
c3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0g
YWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQorcHJpdmF0ZToKKyAgICBBbHRlcm5hdGVDb21tYW5kRG9t
YWluQmFja2VuZERpc3BhdGNoZXIqIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciB7IG51bGxwdHIgfTsK
KyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK3ByaXZh
dGU6CisgICAgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVy
JiwgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIENvbW1hbmRE
b21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQgeyBudWxscHRyIH07Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNw
YXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL0pTT05W
YWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKKyNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCisjZW5k
aWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKK25hbWVzcGFj
ZSBJbnNwZWN0b3IgeworCitDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+
Q29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQorCitSZWY8Q29tbWFu
ZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI6
OmNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIENvbW1hbmREb21h
aW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQoreworICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwg
YWdlbnQpKTsKK30KKworQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kRG9t
YWluQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVy
LCBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKKyAgICA6IFN1
cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQorICAgICwgbV9h
Z2VudChhZ2VudCkKK3sKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNo
ZXJGb3JEb21haW4oIkNvbW1hbmREb21haW4iX3MsIHRoaXMpOworfQorCit2b2lkIENvbW1hbmRE
b21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0
cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCit7CisgICAgUmVmPENv
bW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CisKKyAgICBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOworICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFy
YW1zIl9zLCBwYXJhbWV0ZXJzKTsKKworICAgIGlmIChtZXRob2QgPT0gImNvbW1hbmRXaXRoRW51
bVJldHVyblZhbHVlIikgeworICAgICAgICBjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShyZXF1
ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0
Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInQ29tbWFuZERvbWFpbi4iICsgbWV0aG9kICsgIicgd2Fz
IG5vdCBmb3VuZCIpOworfQorCit2b2lkIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6
Y29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpP
YmplY3Q+JiYpCit7CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
CisgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeworICAgICAgICBtX2FsdGVybmF0ZURp
c3BhdGNoZXItPmNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlKHJlcXVlc3RJZCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCisKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWY8SlNPTjo6T2JqZWN0
PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIENvbW1hbmREb21haW5CYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlJldHVyblZhbHVlIG91dF9yZXR1cm5WYWx1ZTsKKyAgICBt
X2FnZW50LT5jb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShlcnJvciwgJm91dF9yZXR1cm5WYWx1
ZSk7CisKKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQorICAgICAgICByZXN1bHQtPnNldFN0cmlu
ZygicmV0dXJuVmFsdWUiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRF
bnVtQ29uc3RhbnRWYWx1ZShvdXRfcmV0dXJuVmFsdWUpKTsKKworICAgIGlmICghZXJyb3IubGVu
Z3RoKCkpCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0
SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOworICAgIGVsc2UKKyAgICAgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVy
RXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisK
KyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZp
bGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0
cy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBGcm9udGVuZFJvdXRl
cjsKKworY2xhc3MgRXZlbnREb21haW5Gcm9udGVuZERpc3BhdGNoZXIgeworICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIEV2ZW50RG9tYWluRnJvbnRlbmREaXNwYXRj
aGVyKEZyb250ZW5kUm91dGVyJiBmcm9udGVuZFJvdXRlcikgOiBtX2Zyb250ZW5kUm91dGVyKGZy
b250ZW5kUm91dGVyKSB7IH0KKyAgICAgICAgLy8gTmFtZWQgYWZ0ZXIgcGFyYW1ldGVyICdwYXJh
bWV0ZXInIHdoaWxlIGdlbmVyYXRpbmcgY29tbWFuZC9ldmVudCBldmVudFdpdGhFbnVtUGFyYW1l
dGVyLgorICAgICAgICBlbnVtIGNsYXNzIFBhcmFtZXRlciB7CisgICAgICAgICAgICBTaGFyZWQg
PSAwLAorICAgICAgICAgICAgQmxhY2sgPSA0LAorICAgICAgICAgICAgV2hpdGUgPSA1LAorICAg
ICAgICB9OyAvLyBlbnVtIGNsYXNzIFBhcmFtZXRlcgorICAgIHZvaWQgZXZlbnRXaXRoRW51bVBh
cmFtZXRlcihQYXJhbWV0ZXIgcGFyYW1ldGVyKTsKK3ByaXZhdGU6CisgICAgRnJvbnRlbmRSb3V0
ZXImIG1fZnJvbnRlbmRSb3V0ZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMj
IyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTog
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gZW51bS12YWx1ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlz
cGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5k
Um91dGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5z
cGVjdG9yIHsKKwordm9pZCBFdmVudERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcjo6ZXZlbnRXaXRo
RW51bVBhcmFtZXRlcihQYXJhbWV0ZXIgcGFyYW1ldGVyKQoreworICAgIFJlZjxKU09OOjpPYmpl
Y3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBqc29uTWVzc2Fn
ZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJFdmVudERvbWFpbi5ldmVudFdpdGhFbnVtUGFyYW1l
dGVyIl9zKTsKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiBwYXJhbXNPYmplY3QgPSBKU09OOjpPYmpl
Y3Q6OmNyZWF0ZSgpOworICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJwYXJhbWV0ZXIiX3Ms
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShw
YXJhbWV0ZXIpKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiX3MsIFdURk1v
dmUocGFyYW1zT2JqZWN0KSk7CisKKyAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChqc29u
TWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
KworIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JQcm90b2NvbFR5cGVzLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKKworCituYW1lc3BhY2UgUHJvdG9jb2wgeworCisKKworLy8g
Rm9yd2FyZCBkZWNsYXJhdGlvbnMuCituYW1lc3BhY2UgVHlwZURvbWFpbiB7CitlbnVtIGNsYXNz
IFR5cGVEb21haW5FbnVtOworfSAvLyBUeXBlRG9tYWluCisvLyBFbmQgb2YgZm9yd2FyZCBkZWNs
YXJhdGlvbnMuCisKKworCisKK25hbWVzcGFjZSBUZXN0SGVscGVycyB7CisKK1N0cmluZyBnZXRF
bnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmlu
ZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkKK3sKKyAgICByZXR1cm4gZ2V0RW51
bUNvbnN0YW50VmFsdWUoc3RhdGljX2Nhc3Q8aW50PihlbnVtVmFsdWUpKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgVGVzdEhlbHBlcnMKKworbmFtZXNwYWNlIFR5cGVEb21haW4geworLyogICovCitl
bnVtIGNsYXNzIFR5cGVEb21haW5FbnVtIHsKKyAgICBTaGFyZWQgPSAwLAorICAgIFJlZCA9IDEs
CisgICAgR3JlZW4gPSAyLAorICAgIEJsdWUgPSAzLAorfTsgLy8gZW51bSBjbGFzcyBUeXBlRG9t
YWluRW51bQorfSAvLyBUeXBlRG9tYWluCisKKworCituYW1lc3BhY2UgVGVzdEhlbHBlcnMgewor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBQcm90b2NvbEVudW1UeXBlPgorT3B0aW9uYWw8UHJvdG9jb2xF
bnVtVHlwZT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYpOworCisvLyBF
bnVtcyBpbiB0aGUgJ1R5cGVEb21haW4nIERvbWFpbgordGVtcGxhdGU8PgorT3B0aW9uYWw8SW5z
cGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW0+IHBhcnNlRW51bVZh
bHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWlu
RW51bT4oY29uc3QgU3RyaW5nJik7CisKK30gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCisKK30g
Ly8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCituYW1l
c3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwor
CisvLyBIYXNoIGRlY2xhcmF0aW9ucyBpbiB0aGUgJ1R5cGVEb21haW4nIERvbWFpbgordGVtcGxh
dGU8Pgorc3RydWN0IERlZmF1bHRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46
OlR5cGVEb21haW5FbnVtPiB7CisgICAgdHlwZWRlZiBJbnRIYXNoPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlR5cGVEb21haW46OlR5cGVEb21haW5FbnVtPiBIYXNoOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV1RGCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorCisjIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xP
YmplY3RzLmgiCisKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCituYW1lc3BhY2UgUHJvdG9j
b2wgeworCituYW1lc3BhY2UgVGVzdEhlbHBlcnMgeworCitzdGF0aWMgY29uc3QgY2hhciogY29u
c3QgZW51bV9jb25zdGFudF92YWx1ZXNbXSA9IHsKKyAgICAic2hhcmVkIiwKKyAgICAicmVkIiwK
KyAgICAiZ3JlZW4iLAorICAgICJibHVlIiwKKyAgICAiYmxhY2siLAorICAgICJ3aGl0ZSIsCisg
ICAgImN5YW4iLAorICAgICJtYWdlbnRhIiwKKyAgICAieWVsbG93IiwKK307CisKK1N0cmluZyBn
ZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgeworICAgIHJldHVybiBlbnVtX2NvbnN0YW50
X3ZhbHVlc1tjb2RlXTsKK30KKworLy8gRW51bXMgaW4gdGhlICdUeXBlRG9tYWluJyBEb21haW4K
K3RlbXBsYXRlPD4KK09wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46OlR5
cGVEb21haW5FbnVtPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW0+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJp
bmcpCit7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0geworICAg
ICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46OlR5cGVEb21haW5F
bnVtOjpTaGFyZWQsCisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURv
bWFpbjo6VHlwZURvbWFpbkVudW06OlJlZCwKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlBy
b3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51bTo6R3JlZW4sCisgICAgICAgIChzaXpl
X3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW06OkJsdWUs
CisgICAgfTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDQ7ICsraSkKKyAgICAgICAgaWYg
KHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ld
XSkKKyAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6
VHlwZURvbWFpbkVudW0pY29uc3RhbnRWYWx1ZXNbaV07CisKKyAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworfQorCisKK30gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCisKKworCit9IC8vIG5hbWVz
cGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBl
bnVtLXZhbHVlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlz
cGF0Y2hlcnMuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKK0Bwcm90b2NvbCBUZXN0
UHJvdG9jb2xDb21tYW5kRG9tYWluRG9tYWluSGFuZGxlcjsKKworbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CisKKworY2xhc3MgT2JqQ0luc3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hl
ciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIg
eworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIE9iakNJbnNwZWN0
b3JDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sQ29tbWFuZERv
bWFpbkRvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUobG9uZyByZXF1ZXN0SWQp
IG92ZXJyaWRlOworcHJpdmF0ZToKKyAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sQ29tbWFu
ZERvbWFpbkRvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJz
LmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgi
CisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUg
IlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKworbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CisKK3ZvaWQgT2JqQ0luc3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hl
cjo6Y29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUobG9uZyByZXF1ZXN0SWQpCit7CisgICAgaWYg
KCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGNvbW1hbmRXaXRoRW51
bVJldHVyblZhbHVlV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7CisgICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBC
YWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInQ29tbWFuZERvbWFpbi5jb21tYW5k
V2l0aEVudW1SZXR1cm5WYWx1ZScgd2FzIG5vdCBmb3VuZCJfcyk7CisgICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKKyAgICAgICAg
YmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tl
bmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgIH07CisKKyAgICBpZCBzdWNjZXNzQ2Fs
bGJhY2sgPSBeKFRlc3RQcm90b2NvbENvbW1hbmREb21haW5Db21tYW5kV2l0aEVudW1SZXR1cm5W
YWx1ZVJldHVyblZhbHVlIHJldHVyblZhbHVlKSB7CisgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+
IHJlc3VsdE9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIHJlc3VsdE9i
amVjdC0+c2V0U3RyaW5nKCJyZXR1cm5WYWx1ZSJfcywgdG9Qcm90b2NvbFN0cmluZyhyZXR1cm5W
YWx1ZSkpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVz
dElkLCBXVEZNb3ZlKHJlc3VsdE9iamVjdCksIGZhbHNlKTsKKyAgICB9OworCisgICAgW21fZGVs
ZWdhdGUgY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWVXaXRoRXJyb3JDYWxsYmFjazplcnJvckNh
bGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOworfQorCisKK30gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNw
YXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5o
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxXZWJJbnNw
ZWN0b3IvVGVzdFByb3RvY29sLmg+CisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZh
dWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QK
K0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4sIHNldHRlcj1zZXRDb21tYW5kRG9tYWluSGFu
ZGxlcjopIGlkPFRlc3RQcm90b2NvbENvbW1hbmREb21haW5Eb21haW5IYW5kbGVyPiBjb21tYW5k
RG9tYWluSGFuZGxlcjsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgVGVzdFByb3Rv
Y29sRXZlbnREb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKmV2ZW50RG9tYWluRXZlbnREaXNw
YXRjaGVyOworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
bi5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xD
b25maWd1cmF0aW9uLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW1w
b3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0
Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+CisKK3VzaW5nIG5h
bWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1
cmF0aW9uCit7CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxl
cjsKKyAgICBpZDxUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluRG9tYWluSGFuZGxlcj4gX2NvbW1h
bmREb21haW5IYW5kbGVyOworICAgIFRlc3RQcm90b2NvbEV2ZW50RG9tYWluRG9tYWluRXZlbnRE
aXNwYXRjaGVyICpfZXZlbnREb21haW5FdmVudERpc3BhdGNoZXI7Cit9CisKKy0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciop
Y29udHJvbGxlcgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQor
ICAgICAgICByZXR1cm4gbmlsOworICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBfY29udHJv
bGxlciA9IGNvbnRyb2xsZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxv
YworeworICAgIFtfY29tbWFuZERvbWFpbkhhbmRsZXIgcmVsZWFzZV07CisgICAgW19ldmVudERv
bWFpbkV2ZW50RGlzcGF0Y2hlciByZWxlYXNlXTsKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisK
Ky0gKHZvaWQpc2V0Q29tbWFuZERvbWFpbkhhbmRsZXI6KGlkPFRlc3RQcm90b2NvbENvbW1hbmRE
b21haW5Eb21haW5IYW5kbGVyPiloYW5kbGVyCit7CisgICAgaWYgKGhhbmRsZXIgPT0gX2NvbW1h
bmREb21haW5IYW5kbGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBbX2NvbW1hbmREb21haW5I
YW5kbGVyIHJlbGVhc2VdOworICAgIF9jb21tYW5kRG9tYWluSGFuZGxlciA9IFtoYW5kbGVyIHJl
dGFpbl07CisKKyAgICBhdXRvIGFsdGVybmF0ZURpc3BhdGNoZXIgPSBtYWtlVW5pcXVlPE9iakNJ
bnNwZWN0b3JDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI+KGhhbmRsZXIpOworICAgIGF1
dG8gYWx0ZXJuYXRlQWdlbnQgPSBtYWtlVW5pcXVlPEFsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50
PENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlciwgQWx0ZXJuYXRlQ29tbWFuZERvbWFpbkJh
Y2tlbmREaXNwYXRjaGVyPj4oIkNvbW1hbmREb21haW4iX3MsICpfY29udHJvbGxlciwgV1RGTW92
ZShhbHRlcm5hdGVEaXNwYXRjaGVyKSk7CisgICAgX2NvbnRyb2xsZXItPmFwcGVuZEV4dHJhQWdl
bnQoV1RGTW92ZShhbHRlcm5hdGVBZ2VudCkpOworfQorCistIChpZDxUZXN0UHJvdG9jb2xDb21t
YW5kRG9tYWluRG9tYWluSGFuZGxlcj4pY29tbWFuZERvbWFpbkhhbmRsZXIKK3sKKyAgICByZXR1
cm4gX2NvbW1hbmREb21haW5IYW5kbGVyOworfQorCistIChUZXN0UHJvdG9jb2xFdmVudERvbWFp
bkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqKWV2ZW50RG9tYWluRXZlbnREaXNwYXRjaGVyCit7Cisg
ICAgaWYgKCFfZXZlbnREb21haW5FdmVudERpc3BhdGNoZXIpCisgICAgICAgIF9ldmVudERvbWFp
bkV2ZW50RGlzcGF0Y2hlciA9IFtbVGVzdFByb3RvY29sRXZlbnREb21haW5Eb21haW5FdmVudERp
c3BhdGNoZXIgYWxsb2NdIGluaXRXaXRoQ29udHJvbGxlcjpfY29udHJvbGxlcl07CisgICAgcmV0
dXJuIF9ldmVudERvbWFpbkV2ZW50RGlzcGF0Y2hlcjsKK30KKworQGVuZAorCisKKyMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAi
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5o
PgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFBy
b3RvY29sRXZlbnREb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIKK3sKKyAgICBBdWdtZW50YWJs
ZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworfQorCistIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRy
b2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAg
ICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIg
PSBjb250cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWV2ZW50V2l0aEVu
dW1QYXJhbWV0ZXJXaXRoUGFyYW1ldGVyOihUZXN0UHJvdG9jb2xFdmVudERvbWFpbkV2ZW50V2l0
aEVudW1QYXJhbWV0ZXJQYXJhbWV0ZXIpcGFyYW1ldGVyCit7CisgICAgY29uc3QgRnJvbnRlbmRS
b3V0ZXImIHJvdXRlciA9IF9jb250cm9sbGVyLT5mcm9udGVuZFJvdXRlcigpOworCisgICAgUmVm
PEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAg
IGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkV2ZW50RG9tYWluLmV2ZW50V2l0
aEVudW1QYXJhbWV0ZXIiX3MpOworICAgIFJlZjxKU09OOjpPYmplY3Q+IHBhcmFtc09iamVjdCA9
IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInBh
cmFtZXRlciJfcywgdG9Qcm90b2NvbFN0cmluZyhwYXJhbWV0ZXIpKTsKKyAgICBqc29uTWVzc2Fn
ZS0+c2V0T2JqZWN0KCJwYXJhbXMiX3MsIFdURk1vdmUocGFyYW1zT2JqZWN0KSk7CisgICAgcm91
dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworfQorCitAZW5kCisK
KworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGVudW0tdmFsdWVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKKyNpbXBvcnQgPFdl
Ykluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KKworCisKKworCit0eXBlZGVmIE5T
X0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bSkgeworICAgIFRlc3RQ
cm90b2NvbFR5cGVEb21haW5FbnVtU2hhcmVkLAorICAgIFRlc3RQcm90b2NvbFR5cGVEb21haW5F
bnVtUmVkLAorICAgIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtR3JlZW4sCisgICAgVGVzdFBy
b3RvY29sVHlwZURvbWFpbkVudW1CbHVlLAorfTsKKworCisKK0Bwcm90b2NvbCBUZXN0UHJvdG9j
b2xDb21tYW5kRG9tYWluRG9tYWluSGFuZGxlciA8TlNPYmplY3Q+CitAb3B0aW9uYWwKKy0gKHZv
aWQpY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWVXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShO
U1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKFRl
c3RQcm90b2NvbENvbW1hbmREb21haW5Db21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZVJldHVyblZh
bHVlIHJldHVyblZhbHVlKSlzdWNjZXNzQ2FsbGJhY2s7CitAZW5kCisKK19fYXR0cmlidXRlX18o
KHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xFdmVudERv
bWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciA6IE5TT2JqZWN0CistICh2b2lkKWV2ZW50V2l0aEVu
dW1QYXJhbWV0ZXJXaXRoUGFyYW1ldGVyOihUZXN0UHJvdG9jb2xFdmVudERvbWFpbkV2ZW50V2l0
aEVudW1QYXJhbWV0ZXJQYXJhbWV0ZXIpcGFyYW1ldGVyOworQGVuZAorCisKKyNpbXBvcnQgPFdl
Ykluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4KKworIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
SW50ZXJuYWwuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVz
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9y
dCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0
ZS5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9s
bGVyLmg+CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCitAaW50ZXJmYWNlIFRlc3RQcm90
b2NvbEV2ZW50RG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyIChQcml2YXRlKQorLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooSW5zcGVjdG9yOjpBdWdtZW50YWJsZUluc3BlY3Rv
ckNvbnRyb2xsZXIqKWNvbnRyb2xsZXI7CitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xJbnRlcm5hbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAi
VGVzdFByb3RvY29sLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNv
bnZlcnNpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBPYmpDRW51bVR5cGU+CitPcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmlu
Zyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKKworCitpbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJp
bmcoVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0gdmFsdWUpCit7CisgICAgc3dpdGNoKHZhbHVl
KSB7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bVNoYXJlZDoKKyAgICAgICAg
cmV0dXJuICJzaGFyZWQiX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bVJl
ZDoKKyAgICAgICAgcmV0dXJuICJyZWQiX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xUeXBlRG9t
YWluRW51bUdyZWVuOgorICAgICAgICByZXR1cm4gImdyZWVuIl9zOworICAgIGNhc2UgVGVzdFBy
b3RvY29sVHlwZURvbWFpbkVudW1CbHVlOgorICAgICAgICByZXR1cm4gImJsdWUiX3M7CisgICAg
fQorfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sVHlwZURvbWFp
bkVudW0+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIGlm
ICh2YWx1ZSA9PSAic2hhcmVkIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFR5cGVEb21h
aW5FbnVtU2hhcmVkOworICAgIGlmICh2YWx1ZSA9PSAicmVkIikKKyAgICAgICAgcmV0dXJuIFRl
c3RQcm90b2NvbFR5cGVEb21haW5FbnVtUmVkOworICAgIGlmICh2YWx1ZSA9PSAiZ3JlZW4iKQor
ICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1HcmVlbjsKKyAgICBpZiAo
dmFsdWUgPT0gImJsdWUiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sVHlwZURvbWFpbkVu
dW1CbHVlOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisK
KyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucy5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQ
cm90b2NvbFR5cGVQYXJzZXIuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpT
T05PYmplY3RQcml2YXRlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbnRl
cmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChUeXBlRG9tYWluRG9tYWluKQorCisr
ICh2b2lkKV9wYXJzZVR5cGVEb21haW5FbnVtOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5
bG9hZDooaWQpcGF5bG9hZDsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zIChUeXBlRG9tYWluRG9tYWluKQorCisrICh2b2lkKV9wYXJzZVR5cGVE
b21haW5FbnVtOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAor
eworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TU3RyaW5nIGNs
YXNzXSk7CisgICAgT3B0aW9uYWw8VGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0+IHJlc3VsdCA9
IEluc3BlY3Rvcjo6ZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVt
PihwYXlsb2FkKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9FTlVNX1ZBTFVFKHJlc3Vs
dCwgQCJUeXBlRG9tYWluRW51bSIpOworICAgICpvdXRWYWx1ZSA9IEAocmVzdWx0LnZhbHVlKCkp
OworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5h
bC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQg
PFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisjaW1wb3J0IDx3
dGYvQXNzZXJ0aW9ucy5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFt
ZXNwYWNlIEluc3BlY3RvcjsKKworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBl
cy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL2V2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2Fi
bGVUeXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL2V2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVn
Z2FibGVUeXBlLmpzb24tcmVzdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwLi5iOWEzMTFhMWQ5NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9ldmVudC10YXJnZXRUeXBlLW1hdGNo
aW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJlc3VsdApAQCAtMCwwICsxLDEwMzAgQEAK
KyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1k
ZWJ1Z2dhYmxlVHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKy8vIERvbWFpbgorSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiRG9tYWlu
IiwgbnVsbCk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiRG9tYWluLkNvbW1h
bmQiLCBudWxsLCBbXSwgW10pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckV2ZW50KCJEb21h
aW4uRXZlbnQiLCBbInBhZ2UiLCAid29ya2VyIl0sIFtdKTsKK0luc3BlY3RvckJhY2tlbmQucmVn
aXN0ZXJEb21haW5EaXNwYXRjaGVyID0gSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRpc3BhdGNo
ZXIuYmluZChJbnNwZWN0b3JCYWNrZW5kLCAiRG9tYWluIik7CitJbnNwZWN0b3JCYWNrZW5kLmFj
dGl2YXRlRG9tYWluKCJEb21haW4iLCBbInBhZ2UiXSk7CisjIyMgRW5kIEZpbGU6IEluc3BlY3Rv
ckJhY2tlbmRDb21tYW5kcy5qcworCisjIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tl
bmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnQt
dGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2lmIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCisjaW5jbHVkZSAiVGVzdFBy
b3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5k
Um91dGVyLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihS
ZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRj
aGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQorICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNr
ZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7
IH0KK3ByaXZhdGU6CisgICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNw
YXRjaGVyOworfTsKKworCitjbGFzcyBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciA6
IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdmlydHVh
bCB+QWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIoKSB7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgQ29tbWFuZChsb25nIGNhbGxJZCkgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
KyMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxl
VHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0eXBlZGVm
IFN0cmluZyBFcnJvclN0cmluZzsKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQorY2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXI7CisjZW5k
aWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKK2NsYXNzIERv
bWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lk
IENvbW1hbmQoRXJyb3JTdHJpbmcmKSA9IDA7Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+RG9t
YWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7Cit9OworCitjbGFzcyBEb21haW5CYWNrZW5k
RGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7
CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRl
KEJhY2tlbmREaXNwYXRjaGVyJiwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Cisg
ICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJl
ZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkgb3ZlcnJpZGU7Citwcml2YXRlOgorICAgIHZvaWQg
Q29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJz
KTsKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK3B1YmxpYzoK
KyAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlRG9tYWluQmFja2VuZERp
c3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0g
YWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQorcHJpdmF0ZToKKyAgICBBbHRlcm5hdGVEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlciogbV9hbHRlcm5hdGVEaXNwYXRjaGVyIHsgbnVsbHB0ciB9OworI2VuZGlm
IC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorcHJpdmF0ZToKKyAg
ICBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYsIERvbWFpbkJhY2tl
bmREaXNwYXRjaGVySGFuZGxlciopOworICAgIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxl
ciogbV9hZ2VudCB7IG51bGxwdHIgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgor
IyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6
IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3
dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQorI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMu
aCIKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKwor
bmFtZXNwYWNlIEluc3BlY3RvciB7CisKK0RvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6
fkRvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQorCitSZWY8RG9tYWluQmFja2Vu
ZERpc3BhdGNoZXI+IERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoQmFja2VuZERpc3Bh
dGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIq
IGFnZW50KQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERvbWFpbkJhY2tlbmREaXNwYXRj
aGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOworfQorCitEb21haW5CYWNrZW5kRGlzcGF0
Y2hlcjo6RG9tYWluQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmRE
aXNwYXRjaGVyLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQorICAgIDog
U3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCisgICAgLCBt
X2FnZW50KGFnZW50KQoreworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0
Y2hlckZvckRvbWFpbigiRG9tYWluIl9zLCB0aGlzKTsKK30KKwordm9pZCBEb21haW5CYWNrZW5k
RGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9k
LCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCit7CisgICAgUmVmPERvbWFpbkJhY2tlbmRE
aXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKKworICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBh
cmFtZXRlcnM7CisgICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRlcnMp
OworCisgICAgaWYgKG1ldGhvZCA9PSAiQ29tbWFuZCIpIHsKKyAgICAgICAgQ29tbWFuZChyZXF1
ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0
Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRG9tYWluLiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZv
dW5kIik7Cit9CisKK3ZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9uZyBy
ZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCit7CisjaWYgRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikg
eworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPkNvbW1hbmQocmVxdWVzdElkKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKKworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgIFJlZjxKU09OOjpP
YmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9hZ2VudC0+Q29t
bWFuZChlcnJvcik7CisKKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQorICAgICAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZh
bHNlKTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3Rv
Y29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNr
ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRj
aGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0VHlw
ZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3Mg
RnJvbnRlbmRSb3V0ZXI7CisKK2NsYXNzIERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlciB7CisgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgRG9tYWluRnJvbnRlbmREaXNw
YXRjaGVyKEZyb250ZW5kUm91dGVyJiBmcm9udGVuZFJvdXRlcikgOiBtX2Zyb250ZW5kUm91dGVy
KGZyb250ZW5kUm91dGVyKSB7IH0KKyAgICB2b2lkIEV2ZW50KCk7Citwcml2YXRlOgorICAgIEZy
b250ZW5kUm91dGVyJiBtX2Zyb250ZW5kUm91dGVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2Fi
bGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgi
CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisK
K3ZvaWQgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVyOjpFdmVudCgpCit7CisgICAgUmVmPEpTT046
Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGpzb25N
ZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7CisKKyAgICBt
X2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMu
aAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRhcmdldFR5cGUtbWF0
Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMu
aD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCituYW1lc3BhY2UgUHJvdG9jb2wgewor
CisKKworCisKKworCisKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorCisjIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxl
VHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisKKyNp
bmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisK
K25hbWVzcGFjZSBJbnNwZWN0b3IgeworCituYW1lc3BhY2UgUHJvdG9jb2wgeworCisKKworfSAv
LyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Cisj
aW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCitAcHJvdG9jb2wgVGVzdFByb3RvY29sRG9tYWlu
RG9tYWluSGFuZGxlcjsKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworY2xhc3MgT2JqQ0lu
c3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZURv
bWFpbkJhY2tlbmREaXNwYXRjaGVyIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1
YmxpYzoKKyAgICBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFBy
b3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxl
cjsgfQorICAgIHZpcnR1YWwgdm9pZCBDb21tYW5kKGxvbmcgcmVxdWVzdElkKSBvdmVycmlkZTsK
K3ByaXZhdGU6CisgICAgUmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRs
ZXI+PiBtX2RlbGVnYXRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2Fi
bGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hl
cnMuaCIKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW5jbHVkZSAiVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4K
KworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3ZvaWQgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tl
bmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElkKQoreworICAgIGlmICghW21fZGVs
ZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihDb21tYW5kV2l0aEVycm9yQ2FsbGJh
Y2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJl
cG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90
Rm91bmQsICInRG9tYWluLkNvbW1hbmQnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7CisgICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBC
YWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICB9OworCisgICAgaWQgc3VjY2Vz
c0NhbGxiYWNrID0gXnsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNl
KHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2UpOworICAgIH07CisKKyAg
ICBbbV9kZWxlZ2F0ZSBDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNj
ZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKK30KKworCit9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0K
KworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWlu
LWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgorCitfX2F0dHJp
YnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbiA6IE5TT2JqZWN0CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluLCBz
ZXR0ZXI9c2V0RG9tYWluSGFuZGxlcjopIGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRs
ZXI+IGRvbWFpbkhhbmRsZXI7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFRlc3RQ
cm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqZG9tYWluRXZlbnREaXNwYXRjaGVy
OworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisK
KyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4t
ZGVidWdnYWJsZVR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCisKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlz
cGF0Y2hlcnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJs
ZUFnZW50Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNv
bnRyb2xsZXIuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVycy5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXJzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBs
ZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCit7CisgICAgQXVnbWVudGFibGVJ
bnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKKyAgICBpZDxUZXN0UHJvdG9jb2xEb21h
aW5Eb21haW5IYW5kbGVyPiBfZG9tYWluSGFuZGxlcjsKKyAgICBUZXN0UHJvdG9jb2xEb21haW5E
b21haW5FdmVudERpc3BhdGNoZXIgKl9kb21haW5FdmVudERpc3BhdGNoZXI7Cit9CisKKy0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJv
bGxlciopY29udHJvbGxlcgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFz
ZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBf
Y29udHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQp
ZGVhbGxvYworeworICAgIFtfZG9tYWluSGFuZGxlciByZWxlYXNlXTsKKyAgICBbX2RvbWFpbkV2
ZW50RGlzcGF0Y2hlciByZWxlYXNlXTsKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0gKHZv
aWQpc2V0RG9tYWluSGFuZGxlcjooaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4p
aGFuZGxlcgoreworICAgIGlmIChoYW5kbGVyID09IF9kb21haW5IYW5kbGVyKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBbX2RvbWFpbkhhbmRsZXIgcmVsZWFzZV07CisgICAgX2RvbWFpbkhhbmRs
ZXIgPSBbaGFuZGxlciByZXRhaW5dOworCisgICAgYXV0byBhbHRlcm5hdGVEaXNwYXRjaGVyID0g
bWFrZVVuaXF1ZTxPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXI+KGhhbmRsZXIp
OworICAgIGF1dG8gYWx0ZXJuYXRlQWdlbnQgPSBtYWtlVW5pcXVlPEFsdGVybmF0ZURpc3BhdGNo
YWJsZUFnZW50PERvbWFpbkJhY2tlbmREaXNwYXRjaGVyLCBBbHRlcm5hdGVEb21haW5CYWNrZW5k
RGlzcGF0Y2hlcj4+KCJEb21haW4iX3MsICpfY29udHJvbGxlciwgV1RGTW92ZShhbHRlcm5hdGVE
aXNwYXRjaGVyKSk7CisgICAgX2NvbnRyb2xsZXItPmFwcGVuZEV4dHJhQWdlbnQoV1RGTW92ZShh
bHRlcm5hdGVBZ2VudCkpOworfQorCistIChpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5k
bGVyPilkb21haW5IYW5kbGVyCit7CisgICAgcmV0dXJuIF9kb21haW5IYW5kbGVyOworfQorCist
IChUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKilkb21haW5FdmVudERp
c3BhdGNoZXIKK3sKKyAgICBpZiAoIV9kb21haW5FdmVudERpc3BhdGNoZXIpCisgICAgICAgIF9k
b21haW5FdmVudERpc3BhdGNoZXIgPSBbW1Rlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlz
cGF0Y2hlciBhbGxvY10gaW5pdFdpdGhDb250cm9sbGVyOl9jb250cm9sbGVyXTsKKyAgICByZXR1
cm4gX2RvbWFpbkV2ZW50RGlzcGF0Y2hlcjsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sRXZlbnREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFBy
b3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
LmgiCisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVj
dG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNw
YXRjaGVyCit7CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxl
cjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJ
bnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0
XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNvbnRy
b2xsZXIpOworICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKKyAgICByZXR1cm4gc2VsZjsK
K30KKworLSAodm9pZClFdmVudAoreworICAgIGNvbnN0IEZyb250ZW5kUm91dGVyJiByb3V0ZXIg
PSBfY29udHJvbGxlci0+ZnJvbnRlbmRSb3V0ZXIoKTsKKworICAgIFJlZjxKU09OOjpPYmplY3Q+
IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBqc29uTWVzc2FnZS0+
c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOworICAgIHJvdXRlci5zZW5k
RXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKK30KKworQGVuZAorCisKKyMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVu
dC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPEZvdW5kYXRpb24v
Rm91bmRhdGlvbi5oPgorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2Jq
ZWN0Lmg+CisKKworCisKKworCisKKworQHByb3RvY29sIFRlc3RQcm90b2NvbERvbWFpbkRvbWFp
bkhhbmRsZXIgPE5TT2JqZWN0PgorQG9wdGlvbmFsCistICh2b2lkKUNvbW1hbmRXaXRoRXJyb3JD
YWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0Nh
bGxiYWNrOih2b2lkKF4pKHZvaWQpKXN1Y2Nlc3NDYWxsYmFjazsKK0BlbmQKKworX19hdHRyaWJ1
dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbERv
bWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciA6IE5TT2JqZWN0CistICh2b2lkKUV2ZW50OworQGVu
ZAorCisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0
eU9iamVjdHMuaD4KKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAorCisjIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAi
VGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5o
IgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVy
Lmg+CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCitAaW50ZXJmYWNlIFRlc3RQcm90b2Nv
bERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAoUHJpdmF0ZSkKKy0gKGluc3RhbmNldHlwZSlp
bml0V2l0aENvbnRyb2xsZXI6KEluc3BlY3Rvcjo6QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9s
bGVyKiljb250cm9sbGVyOworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50
ZXJuYWwuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudC10YXJnZXRUeXBlLW1hdGNo
aW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCA8V2Vi
SW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgorCituYW1lc3BhY2UgSW5z
cGVjdG9yIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgorT3B0aW9uYWw8T2Jq
Q0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7CisKK30g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudC10YXJnZXRUeXBl
LW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucy5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2Nv
bFR5cGVQYXJzZXIuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmpl
Y3RQcml2YXRlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworCisKKworCisj
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorCisjIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRl
c3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucy5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZh
dGUuaD4KKyNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVl
cy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisKKyMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9ldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0
ZXJzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbi1yZXN1
bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjgzYWJkYzc3YjI1Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbi1yZXN1
bHQKQEAgLTAsMCArMSwxMTgyIEBACisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENv
bW1hbmRzLmpzCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgt
b3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKy8vIERhdGFiYXNlCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWlu
KCJEYXRhYmFzZSIsIG51bGwpOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckV2ZW50KCJEYXRh
YmFzZS5kaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzIiwgbnVsbCwgWyJjb2x1bW5OYW1lcyIs
ICJub3RlcyIsICJ0aW1lc3RhbXAiLCAidmFsdWVzIiwgInBheWxvYWQiLCAic3FsRXJyb3IiLCAi
c2NyZWVuQ29sb3IiLCAiYWx0ZXJuYXRlQ29sb3JzIiwgInByaW50Q29sb3IiXSk7CitJbnNwZWN0
b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnQoIkRhdGFiYXNlLmRpZEV4ZWN1dGVOb09wdGlvbmFsUGFy
YW1ldGVycyIsIG51bGwsIFsiY29sdW1uTmFtZXMiLCAibm90ZXMiLCAidGltZXN0YW1wIiwgInZh
bHVlcyIsICJwYXlsb2FkIiwgInNxbEVycm9yIiwgInNjcmVlbkNvbG9yIiwgImFsdGVybmF0ZUNv
bG9ycyIsICJwcmludENvbG9yIl0pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRhdGFiYXNl
RGlzcGF0Y2hlciA9IEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEaXNwYXRjaGVyLmJpbmQoSW5z
cGVjdG9yQmFja2VuZCwgIkRhdGFiYXNlIik7CitJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9t
YWluKCJEYXRhYmFzZSIsIG51bGwpOworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29t
bWFuZHMuanMKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hl
cnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlv
bmFsLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisKK25hbWVzcGFjZSBJbnNw
ZWN0b3IgeworCitjbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6Cisg
ICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYg
ZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsg
fQorICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0
dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KK3ByaXZhdGU6CisgICAgUmVmUHRyPEJh
Y2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOworfTsKKworCisKKworfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKKyMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0
ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3R5cGVkZWYg
U3RyaW5nIEVycm9yU3RyaW5nOworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMg
RW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVz
dEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNp
bmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyNpbmNs
dWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCisjZW5kaWYgLy8gRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKK25hbWVzcGFjZSBJbnNwZWN0b3Ig
eworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEJh
Y2tlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3Bh
dGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1v
cHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3Rz
LmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEZyb250ZW5kUm91dGVy
OworCitjbGFzcyBEYXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hlciB7CisgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgRGF0YWJhc2VGcm9udGVuZERpc3BhdGNoZXIoRnJv
bnRlbmRSb3V0ZXImIGZyb250ZW5kUm91dGVyKSA6IG1fZnJvbnRlbmRSb3V0ZXIoZnJvbnRlbmRS
b3V0ZXIpIHsgfQorICAgIHZvaWQgZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyhSZWZQdHI8
SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nKiBub3Rlcywg
Y29uc3QgZG91YmxlKiB0aW1lc3RhbXAsIFJlZlB0cjxKU09OOjpPYmplY3Q+IHZhbHVlcywgUmVm
UHRyPEpTT046OlZhbHVlPiBwYXlsb2FkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0
YWJhc2U6OkVycm9yPiBzcWxFcnJvciwgY29uc3QgU3RyaW5nKiBzY3JlZW5Db2xvciwgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IGFsdGVybmF0ZUNvbG9y
cywgY29uc3QgU3RyaW5nKiBwcmludENvbG9yKTsKKyAgICB2b2lkIGRpZEV4ZWN1dGVOb09wdGlv
bmFsUGFyYW1ldGVycyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiBjb2x1bW5OYW1lcywg
Y29uc3QgU3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUmVmUHRyPEpTT046Ok9iamVj
dD4gdmFsdWVzLCBSZWZQdHI8SlNPTjo6VmFsdWU+IHBheWxvYWQsIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVycm9yLCBjb25zdCBTdHJpbmcmIHNjcmVl
bkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4g
YWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcmIHByaW50Q29sb3IpOworcHJpdmF0ZToKKyAg
ICBGcm9udGVuZFJvdXRlciYgbV9mcm9udGVuZFJvdXRlcjsKK307CisKK30gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisKKyMj
IyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3ZvaWQgRGF0YWJh
c2VGcm9udGVuZERpc3BhdGNoZXI6OmRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMoUmVmUHRy
PEpTT046OkFycmF5T2Y8U3RyaW5nPj4gY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyogbm90ZXMs
IGNvbnN0IGRvdWJsZSogdGltZXN0YW1wLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiB2YWx1ZXMsIFJl
ZlB0cjxKU09OOjpWYWx1ZT4gcGF5bG9hZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpFcnJvcj4gc3FsRXJyb3IsIGNvbnN0IFN0cmluZyogc2NyZWVuQ29sb3IsIFJlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiBhbHRlcm5hdGVDb2xv
cnMsIGNvbnN0IFN0cmluZyogcHJpbnRDb2xvcikKK3sKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiBq
c29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAganNvbk1lc3NhZ2UtPnNl
dFN0cmluZygibWV0aG9kIl9zLCAiRGF0YWJhc2UuZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVy
cyJfcyk7CisgICAgUmVmPEpTT046Ok9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKTsKKyAgICBpZiAoY29sdW1uTmFtZXMpCisgICAgICAgIHBhcmFtc09iamVjdC0+
c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBjb2x1bW5OYW1lcyk7CisgICAgaWYgKG5vdGVzKQor
ICAgICAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygibm90ZXMiX3MsICpub3Rlcyk7CisgICAg
aWYgKHRpbWVzdGFtcCkKKyAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXREb3VibGUoInRpbWVzdGFt
cCJfcywgKnRpbWVzdGFtcCk7CisgICAgaWYgKHZhbHVlcykKKyAgICAgICAgcGFyYW1zT2JqZWN0
LT5zZXRPYmplY3QoInZhbHVlcyJfcywgdmFsdWVzKTsKKyAgICBpZiAocGF5bG9hZCkKKyAgICAg
ICAgcGFyYW1zT2JqZWN0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgKnBheWxvYWQpOworICAgIGlm
IChzcWxFcnJvcikKKyAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9z
LCBzcWxFcnJvcik7CisgICAgaWYgKHNjcmVlbkNvbG9yKQorICAgICAgICBwYXJhbXNPYmplY3Qt
PnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsICpzY3JlZW5Db2xvcik7CisgICAgaWYgKGFsdGVy
bmF0ZUNvbG9ycykKKyAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29s
b3JzIl9zLCBhbHRlcm5hdGVDb2xvcnMpOworICAgIGlmIChwcmludENvbG9yKQorICAgICAgICBw
YXJhbXNPYmplY3QtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgKnByaW50Q29sb3IpOworICAg
IGpzb25NZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyJfcywgV1RGTW92ZShwYXJhbXNPYmplY3Qp
KTsKKworICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05T
dHJpbmcoKSk7Cit9CisKK3ZvaWQgRGF0YWJhc2VGcm9udGVuZERpc3BhdGNoZXI6OmRpZEV4ZWN1
dGVOb09wdGlvbmFsUGFyYW1ldGVycyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiBjb2x1
bW5OYW1lcywgY29uc3QgU3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUmVmUHRyPEpT
T046Ok9iamVjdD4gdmFsdWVzLCBSZWZQdHI8SlNPTjo6VmFsdWU+IHBheWxvYWQsIFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVycm9yLCBjb25zdCBTdHJp
bmcmIHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNv
bG9yTGlzdD4gYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcmIHByaW50Q29sb3IpCit7Cisg
ICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OworICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRhdGFiYXNlLmRpZEV4
ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyJfcyk7CisgICAgUmVmPEpTT046Ok9iamVjdD4gcGFy
YW1zT2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwYXJhbXNPYmplY3QtPnNl
dEFycmF5KCJjb2x1bW5OYW1lcyJfcywgY29sdW1uTmFtZXMpOworICAgIHBhcmFtc09iamVjdC0+
c2V0U3RyaW5nKCJub3RlcyJfcywgbm90ZXMpOworICAgIHBhcmFtc09iamVjdC0+c2V0RG91Ymxl
KCJ0aW1lc3RhbXAiX3MsIHRpbWVzdGFtcCk7CisgICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3Qo
InZhbHVlcyJfcywgdmFsdWVzKTsKKyAgICBwYXJhbXNPYmplY3QtPnNldFZhbHVlKCJwYXlsb2Fk
Il9zLCBwYXlsb2FkKTsKKyAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgic3FsRXJyb3IiX3Ms
IHNxbEVycm9yKTsKKyAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3Ms
IHNjcmVlbkNvbG9yKTsKKyAgICBwYXJhbXNPYmplY3QtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xv
cnMiX3MsIGFsdGVybmF0ZUNvbG9ycyk7CisgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInBy
aW50Q29sb3IiX3MsIHByaW50Q29sb3IpOworICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoInBh
cmFtcyJfcywgV1RGTW92ZShwYXJhbXNPYmplY3QpKTsKKworICAgIG1fZnJvbnRlbmRSb3V0ZXIu
c2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNw
cAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgor
I2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisK
KworbmFtZXNwYWNlIFByb3RvY29sIHsKKworCisKKy8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgor
bmFtZXNwYWNlIERhdGFiYXNlIHsKK2NsYXNzIEVycm9yOworfSAvLyBEYXRhYmFzZQorLy8gRW5k
IG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgorCisKKy8vIFR5cGVkZWZzLgorbmFtZXNwYWNlIERh
dGFiYXNlIHsKKy8qIFVuaXF1ZSBpZGVudGlmaWVyIG9mIERhdGFiYXNlIG9iamVjdC4gKi8KK3R5
cGVkZWYgU3RyaW5nIERhdGFiYXNlSWQ7Cit0eXBlZGVmIFN0cmluZyBQcmltYXJ5Q29sb3JzOwor
dHlwZWRlZiBKU09OOjpBcnJheU9mPFN0cmluZz4gQ29sb3JMaXN0OworfSAvLyBEYXRhYmFzZQor
Ly8gRW5kIG9mIHR5cGVkZWZzLgorCituYW1lc3BhY2UgRGF0YWJhc2UgeworLyogRGF0YWJhc2Ug
ZXJyb3IuICovCitjbGFzcyBFcnJvciA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKK3B1Ymxp
YzoKKyAgICBlbnVtIHsKKyAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAorICAgICAgICBNZXNzYWdl
U2V0ID0gMSA8PCAwLAorICAgICAgICBDb2RlU2V0ID0gMSA8PCAxLAorICAgICAgICBBbGxGaWVs
ZHNTZXQgPSAoTWVzc2FnZVNldCB8IENvZGVTZXQpCisgICAgfTsKKworICAgIHRlbXBsYXRlPGlu
dCBTVEFURT4KKyAgICBjbGFzcyBCdWlsZGVyIHsKKyAgICBwcml2YXRlOgorICAgICAgICBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiBtX3Jlc3VsdDsKKworICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4g
QnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7
CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyKFJlZjwvKkVycm9yKi9KU09OOjpPYmplY3Q+
JiYgb2JqZWN0KQorICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBi
dWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAgICAgICB9CisgICAgICAgIGZy
aWVuZCBjbGFzcyBFcnJvcjsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8
IE1lc3NhZ2VTZXQ+JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIHsK
KyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNZXNzYWdlU2V0KSwgcHJvcGVy
dHlfbWVzc2FnZV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5n
KCJtZXNzYWdlIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1lc3Nh
Z2VTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29kZVNldD4m
IHNldENvZGUoaW50IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgQ29kZVNldCksIHByb3BlcnR5X2NvZGVfYWxyZWFkeV9zZXQpOworICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldEludGVnZXIoImNvZGUiX3MsIHZhbHVlKTsKKyAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8Q29kZVNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIFJlZjxF
cnJvcj4gcmVsZWFzZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNU
QVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CisgICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChzaXplb2YoRXJyb3IpID09IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5u
b3RfY2FzdCk7CisKKyAgICAgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25SZXN1bHQgPSBt
X3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBXVEZN
b3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxFcnJvcj4qPigmanNvblJlc3VsdCkpOworICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvKgorICAgICAq
IFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKKyAgICAgKiBSZWY8RXJyb3I+IHJlc3VsdCA9IEVycm9y
OjpjcmVhdGUoKQorICAgICAqICAgICAuc2V0TWVzc2FnZSguLi4pCisgICAgICogICAgIC5zZXRD
b2RlKC4uLikKKyAgICAgKiAgICAgLnJlbGVhc2UoKTsKKyAgICAgKi8KKyAgICBzdGF0aWMgQnVp
bGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBCdWlsZGVy
PE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICB9Cit9OworCit9IC8v
IERhdGFiYXNlCisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorCisjaW5jbHVkZSA8d3RmL09wdGlv
bmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVj
dG9yIHsKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworCisKK30gLy8gbmFtZXNwYWNlIFByb3Rv
Y29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbE9iamVjdHMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlz
cGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRo
LW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRl
QmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCisKKwor
bmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25m
aWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5j
bHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorCituYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90
b2NvbC5oPgorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRl
cmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0CitAcHJvcGVydHkgKG5v
bmF0b21pYywgcmVhZG9ubHkpIFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluRXZlbnREaXNwYXRj
aGVyICpkYXRhYmFzZUV2ZW50RGlzcGF0Y2hlcjsKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbi5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50
cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgi
CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9j
b2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0
ZURpc3BhdGNoYWJsZUFnZW50Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJs
ZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0
b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCit7CisgICAg
QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKKyAgICBUZXN0UHJv
dG9jb2xEYXRhYmFzZURvbWFpbkV2ZW50RGlzcGF0Y2hlciAqX2RhdGFiYXNlRXZlbnREaXNwYXRj
aGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJs
ZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGlu
aXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29u
dHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVybiBzZWxm
OworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbX2RhdGFiYXNlRXZlbnREaXNwYXRjaGVy
IHJlbGVhc2VdOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAoVGVzdFByb3RvY29sRGF0
YWJhc2VEb21haW5FdmVudERpc3BhdGNoZXIgKilkYXRhYmFzZUV2ZW50RGlzcGF0Y2hlcgorewor
ICAgIGlmICghX2RhdGFiYXNlRXZlbnREaXNwYXRjaGVyKQorICAgICAgICBfZGF0YWJhc2VFdmVu
dERpc3BhdGNoZXIgPSBbW1Rlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluRXZlbnREaXNwYXRjaGVy
IGFsbG9jXSBpbml0V2l0aENvbnRyb2xsZXI6X2NvbnRyb2xsZXJdOworICAgIHJldHVybiBfZGF0
YWJhc2VFdmVudERpc3BhdGNoZXI7Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2
ZW50RGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVu
dHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKwor
I2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDx3dGYvSlNP
TlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRp
b24gVGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5FdmVudERpc3BhdGNoZXIKK3sKKyAgICBBdWdt
ZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworfQorCistIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIq
KWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikK
KyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRy
b2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRpZEV4
ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnNXaXRoQ29sdW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmlu
Zz4qLyAqKiljb2x1bW5OYW1lcyBub3RlczooTlNTdHJpbmcgKiopbm90ZXMgdGltZXN0YW1wOihk
b3VibGUgKil0aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKiopdmFsdWVz
IHBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKilwYXlsb2FkIHNxbEVycm9yOihUZXN0
UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqKXNxbEVycm9yIHNjcmVlbkNvbG9yOihOU1N0cmluZyAq
KilzY3JlZW5Db2xvciBhbHRlcm5hdGVDb2xvcnM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKilh
bHRlcm5hdGVDb2xvcnMgcHJpbnRDb2xvcjooTlNTdHJpbmcgKiopcHJpbnRDb2xvcgoreworICAg
IGNvbnN0IEZyb250ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29udHJvbGxlci0+ZnJvbnRlbmRSb3V0
ZXIoKTsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihj
b2x1bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFE
X09QVElPTkFMX1BBUkFNRVRFUihub3RlcywgQCJub3RlcyIpOworICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUih2YWx1ZXMsIEAidmFsdWVzIik7CisgICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHBheWxvYWQsIEAicGF5bG9h
ZCIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihzcWxF
cnJvciwgQCJzcWxFcnJvciIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFM
X1BBUkFNRVRFUihzY3JlZW5Db2xvciwgQCJzY3JlZW5Db2xvciIpOworICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihhbHRlcm5hdGVDb2xvcnMsIEAiYWx0ZXJu
YXRlQ29sb3JzIik7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1F
VEVSKHByaW50Q29sb3IsIEAicHJpbnRDb2xvciIpOworCisgICAgUmVmPEpTT046Ok9iamVjdD4g
anNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGpzb25NZXNzYWdlLT5z
ZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRhdGFiYXNlLmRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRl
cnMiX3MpOworICAgIFJlZjxKU09OOjpPYmplY3Q+IHBhcmFtc09iamVjdCA9IEpTT046Ok9iamVj
dDo6Y3JlYXRlKCk7CisgICAgaWYgKGNvbHVtbk5hbWVzKQorICAgICAgICBwYXJhbXNPYmplY3Qt
PnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgdG9KU09OU3RyaW5nQXJyYXkoKCpjb2x1bW5OYW1l
cykpKTsKKyAgICBpZiAobm90ZXMpCisgICAgICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJu
b3RlcyJfcywgKCpub3RlcykpOworICAgIGlmICh0aW1lc3RhbXApCisgICAgICAgIHBhcmFtc09i
amVjdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICgqdGltZXN0YW1wKSk7CisgICAgaWYgKHZh
bHVlcykKKyAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgWygqdmFs
dWVzKSB0b0pTT05PYmplY3RdKTsKKyAgICBpZiAocGF5bG9hZCkKKyAgICAgICAgcGFyYW1zT2Jq
ZWN0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgWygqcGF5bG9hZCkgdG9KU09OT2JqZWN0XSk7Cisg
ICAgaWYgKHNxbEVycm9yKQorICAgICAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgic3FsRXJy
b3IiX3MsIFsoKnNxbEVycm9yKSB0b0pTT05PYmplY3RdKTsKKyAgICBpZiAoc2NyZWVuQ29sb3Ip
CisgICAgICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgKCpzY3Jl
ZW5Db2xvcikpOworICAgIGlmIChhbHRlcm5hdGVDb2xvcnMpCisgICAgICAgIHBhcmFtc09iamVj
dC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5nQXJyYXkoKCphbHRl
cm5hdGVDb2xvcnMpKSk7CisgICAgaWYgKHByaW50Q29sb3IpCisgICAgICAgIHBhcmFtc09iamVj
dC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCAoKnByaW50Q29sb3IpKTsKKyAgICBqc29uTWVz
c2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiX3MsIFdURk1vdmUocGFyYW1zT2JqZWN0KSk7CisgICAg
cm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworfQorCistICh2
b2lkKWRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1dpdGhDb2x1bW5OYW1lczooTlNBcnJh
eS8qPE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMgbm90ZXM6KE5TU3RyaW5nICopbm90ZXMgdGlt
ZXN0YW1wOihkb3VibGUpdGltZXN0YW1wIHZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0ICop
dmFsdWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQgc3FsRXJyb3I6
KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKilzcWxFcnJvciBzY3JlZW5Db2xvcjooTlNTdHJp
bmcgKilzY3JlZW5Db2xvciBhbHRlcm5hdGVDb2xvcnM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAq
KWFsdGVybmF0ZUNvbG9ycyBwcmludENvbG9yOihOU1N0cmluZyAqKXByaW50Q29sb3IKK3sKKyAg
ICBjb25zdCBGcm9udGVuZFJvdXRlciYgcm91dGVyID0gX2NvbnRyb2xsZXItPmZyb250ZW5kUm91
dGVyKCk7CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihjb2x1
bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlS
RURfUEFSQU1FVEVSKG5vdGVzLCBAIm5vdGVzIik7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9S
RVFVSVJFRF9QQVJBTUVURVIodmFsdWVzLCBAInZhbHVlcyIpOworICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHBheWxvYWQsIEAicGF5bG9hZCIpOworICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHNxbEVycm9yLCBAInNxbEVycm9yIik7
CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoc2NyZWVuQ29sb3Is
IEAic2NyZWVuQ29sb3IiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFN
RVRFUihhbHRlcm5hdGVDb2xvcnMsIEAiYWx0ZXJuYXRlQ29sb3JzIik7CisgICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIocHJpbnRDb2xvciwgQCJwcmludENvbG9yIik7
CisKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7CisgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRGF0YWJhc2Uu
ZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIl9zKTsKKyAgICBSZWY8SlNPTjo6T2JqZWN0
PiBwYXJhbXNPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIHBhcmFtc09iamVj
dC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB0b0pTT05TdHJpbmdBcnJheShjb2x1bW5OYW1l
cykpOworICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJub3RlcyJfcywgbm90ZXMpOworICAg
IHBhcmFtc09iamVjdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIHRpbWVzdGFtcCk7CisgICAg
cGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgW3ZhbHVlcyB0b0pTT05PYmplY3Rd
KTsKKyAgICBwYXJhbXNPYmplY3QtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBbcGF5bG9hZCB0b0pT
T05PYmplY3RdKTsKKyAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIFtz
cWxFcnJvciB0b0pTT05PYmplY3RdKTsKKyAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygic2Ny
ZWVuQ29sb3IiX3MsIHNjcmVlbkNvbG9yKTsKKyAgICBwYXJhbXNPYmplY3QtPnNldEFycmF5KCJh
bHRlcm5hdGVDb2xvcnMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KGFsdGVybmF0ZUNvbG9ycykpOwor
ICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCBwcmludENvbG9yKTsK
KyAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiX3MsIFdURk1vdmUocGFyYW1zT2Jq
ZWN0KSk7CisgICAgcm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkp
OworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNo
ZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxGb3Vu
ZGF0aW9uL0ZvdW5kYXRpb24uaD4KKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29s
SlNPTk9iamVjdC5oPgorCisKK0BjbGFzcyBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yOworCisK
KworCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2Ug
VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciA6IFJXSVByb3RvY29sSlNPTk9iamVjdAorLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAq
KXBheWxvYWQ7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJv
dG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aE1l
c3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBjb2RlOihpbnQpY29kZTsKKy8qIHJlcXVpcmVkICov
IEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqbWVzc2FnZTsKKy8qIHJlcXVp
cmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCBjb2RlOworQGVuZAorCisK
KworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRl
c3RQcm90b2NvbERhdGFiYXNlRG9tYWluRXZlbnREaXNwYXRjaGVyIDogTlNPYmplY3QKKy0gKHZv
aWQpZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVyc1dpdGhDb2x1bW5OYW1lczooTlNBcnJheS8q
PE5TU3RyaW5nPiovICoqKWNvbHVtbk5hbWVzIG5vdGVzOihOU1N0cmluZyAqKilub3RlcyB0aW1l
c3RhbXA6KGRvdWJsZSAqKXRpbWVzdGFtcCB2YWx1ZXM6KFJXSVByb3RvY29sSlNPTk9iamVjdCAq
Kil2YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqKXBheWxvYWQgc3FsRXJy
b3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKiopc3FsRXJyb3Igc2NyZWVuQ29sb3I6KE5T
U3RyaW5nICoqKXNjcmVlbkNvbG9yIGFsdGVybmF0ZUNvbG9yczooTlNBcnJheS8qPE5TU3RyaW5n
PiovICoqKWFsdGVybmF0ZUNvbG9ycyBwcmludENvbG9yOihOU1N0cmluZyAqKilwcmludENvbG9y
OworLSAodm9pZClkaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNXaXRoQ29sdW1uTmFtZXM6
KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWNvbHVtbk5hbWVzIG5vdGVzOihOU1N0cmluZyAqKW5v
dGVzIHRpbWVzdGFtcDooZG91YmxlKXRpbWVzdGFtcCB2YWx1ZXM6KFJXSVByb3RvY29sSlNPTk9i
amVjdCAqKXZhbHVlcyBwYXlsb2FkOihSV0lQcm90b2NvbEpTT05PYmplY3QgKilwYXlsb2FkIHNx
bEVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICopc3FsRXJyb3Igc2NyZWVuQ29sb3I6
KE5TU3RyaW5nICopc2NyZWVuQ29sb3IgYWx0ZXJuYXRlQ29sb3JzOihOU0FycmF5Lyo8TlNTdHJp
bmc+Ki8gKilhbHRlcm5hdGVDb2xvcnMgcHJpbnRDb2xvcjooTlNTdHJpbmcgKilwcmludENvbG9y
OworQGVuZAorCisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0
aWJpbGl0eU9iamVjdHMuaD4KKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAorCisjIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9j
b2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCisjaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBv
cnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sRGF0YWJhc2VE
b21haW5FdmVudERpc3BhdGNoZXIgKFByaXZhdGUpCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhD
b250cm9sbGVyOihJbnNwZWN0b3I6OkF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29u
dHJvbGxlcjsKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgK
KworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVy
cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBv
cnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJy
YXlDb252ZXJzaW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgT2JqQ0VudW1UeXBlPgorT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xT
dHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorCisjIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIK
KyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rv
ci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNw
ZWN0b3I7CisKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChEYXRhYmFz
ZURvbWFpbikKKworKyAodm9pZClfcGFyc2VEYXRhYmFzZUlkOihOU1N0cmluZyAqKilvdXRWYWx1
ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNlUHJpbWFyeUNvbG9yczoo
TlNTdHJpbmcgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisrICh2b2lkKV9w
YXJzZUNvbG9yTGlzdDooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKW91dFZhbHVlIGZyb21QYXls
b2FkOihpZClwYXlsb2FkOworKyAodm9pZClfcGFyc2VFcnJvcjooVGVzdFByb3RvY29sRGF0YWJh
c2VFcnJvciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKworQGVuZAorCitA
aW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChEYXRhYmFzZURvbWFp
bikKKworKyAodm9pZClfcGFyc2VEYXRhYmFzZUlkOihOU1N0cmluZyAqKilvdXRWYWx1ZSBmcm9t
UGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUo
cGF5bG9hZCwgW05TU3RyaW5nIGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gKE5TU3RyaW5nICop
cGF5bG9hZDsKK30KKworKyAodm9pZClfcGFyc2VQcmltYXJ5Q29sb3JzOihOU1N0cmluZyAqKilv
dXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfQkFEX1RZUEUocGF5bG9hZCwgW05TU3RyaW5nIGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0g
KE5TU3RyaW5nICopcGF5bG9hZDsKK30KKworKyAodm9pZClfcGFyc2VDb2xvckxpc3Q6KE5TQXJy
YXkvKjxOU1N0cmluZz4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAorewor
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TQXJyYXkvKjxOU1N0
cmluZz4qLyBjbGFzc10pOworICAgICpvdXRWYWx1ZSA9IChOU0FycmF5Lyo8TlNTdHJpbmc+Ki8g
KilwYXlsb2FkOworfQorCisrICh2b2lkKV9wYXJzZUVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFz
ZUVycm9yICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1df
RVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7Cisg
ICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGFsbG9jXSBpbml0V2l0
aFBheWxvYWQ6cGF5bG9hZF07Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlw
ZXMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRp
b25hbC1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJv
dG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKyNp
bXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisK
KworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IKKworLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwg
aWQ+ICopcGF5bG9hZAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAg
ICByZXR1cm4gbmlsOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJU
WShwYXlsb2FkW0AibWVzc2FnZSJdLCBAIm1lc3NhZ2UiKTsKKyAgICBzZWxmLm1lc3NhZ2UgPSBw
YXlsb2FkW0AibWVzc2FnZSJdOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9Q
Uk9QRVJUWShwYXlsb2FkW0AiY29kZSJdLCBAImNvZGUiKTsKKyAgICBzZWxmLmNvZGUgPSBbcGF5
bG9hZFtAImNvZGUiXSBpbnRlZ2VyVmFsdWVdOworCisgICAgcmV0dXJuIHNlbGY7Cit9CistIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0
ICopb2JqZWN0Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEpTT05PYmplY3Q6
W29iamVjdCB0b0pTT05PYmplY3RdLmdldCgpXSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAg
ICByZXR1cm4gc2VsZjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTWVzc2FnZTooTlNT
dHJpbmcgKiltZXNzYWdlIGNvZGU6KGludCljb2RlCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBl
ciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9S
X1JFUVVJUkVEX1BST1BFUlRZKG1lc3NhZ2UsIEAibWVzc2FnZSIpOworCisgICAgc2VsZi5tZXNz
YWdlID0gbWVzc2FnZTsKKyAgICBzZWxmLmNvZGUgPSBjb2RlOworCisgICAgcmV0dXJuIHNlbGY7
Cit9CisKKy0gKHZvaWQpc2V0TWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlCit7CisgICAgW3N1
cGVyIHNldFN0cmluZzptZXNzYWdlIGZvcktleTpAIm1lc3NhZ2UiXTsKK30KKworLSAoTlNTdHJp
bmcgKiltZXNzYWdlCit7CisgICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJtZXNzYWdl
Il07Cit9CisKKy0gKHZvaWQpc2V0Q29kZTooaW50KWNvZGUKK3sKKyAgICBbc3VwZXIgc2V0SW50
ZWdlcjpjb2RlIGZvcktleTpAImNvZGUiXTsKK30KKworLSAoaW50KWNvZGUKK3sKKyAgICByZXR1
cm4gW3N1cGVyIGludGVnZXJGb3JLZXk6QCJjb2RlIl07Cit9CisKK0BlbmQKKworCisjIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1jb21tYW5kLXRh
cmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tZXJyb3IgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1v
bi1jb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24t
ZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmExMzBhZDcwYzQw
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRv
bWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBNYWxm
b3JtZWQgZG9tYWluIHNwZWNpZmljYXRpb246IGRvbWFpbiBEb21haW4gaGFzIGFuIGl0ZW0gaW4g
dGFyZ2V0VHlwZXMgIlt1J3dvcmtlciddIiB0aGF0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgYW55IHZh
bHVlIGluIGRlYnVnZ2FibGVUeXBlcyAiW3UnamF2YXNjcmlwdCddIi4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWls
LW9uLWNvbW1hbmQtdGFyZ2V0VHlwZXMtdHlwZS5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tY29tbWFuZC10
YXJnZXRUeXBlcy10eXBlLmpzb24tZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAuLjk5ZjVlMWE0YThlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tY29tbWFuZC10
YXJnZXRUeXBlcy10eXBlLmpzb24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6IE1hbGZvcm1l
ZCBkb21haW4gc3BlY2lmaWNhdGlvbjogdGFyZ2V0VHlwZXMgbGlzdCBmb3IgY29tbWFuZCBQYWdl
T25seSBpcyBub3QgYW4gYXJyYXkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlw
ZXMtdmFsdWUuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlwZXMtdmFsdWUuanNv
bi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMjFhMzY1Njk5
MjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1jb21tYW5kLXRhcmdldFR5cGVzLXZhbHVlLmpz
b24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6IE1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNh
dGlvbjogdGFyZ2V0VHlwZXMgbGlzdCBmb3IgY29tbWFuZCBQYWdlT25seSBpcyBhbiB1bnN1cHBv
cnRlZCBzdHJpbmcuIFdhczogIlt1J3BhZ2VlJ10iLCBBbGxvd2VkIHZhbHVlczogc2VydmljZS13
b3JrZXIsIGphdmFzY3JpcHQsIHdvcmtlciwgcGFnZSwgd2ViLXBhZ2UKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWls
LW9uLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMtdHlwZS5qc29uLWVycm9yIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZG9tYWlu
LWRlYnVnZ2FibGVUeXBlcy10eXBlLmpzb24tZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAuLjJiODk4YmE3YmU3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZG9t
YWluLWRlYnVnZ2FibGVUeXBlcy10eXBlLmpzb24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6
IE1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjogZGVidWdnYWJsZVR5cGVzIGZvciBkb21h
aW4gV2ViT25seSBpcyBub3QgYW4gYXJyYXkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWRvbWFpbi1kZWJ1
Z2dhYmxlVHlwZXMtdmFsdWUuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWRvbWFpbi1kZWJ1Z2dhYmxlVHlw
ZXMtdmFsdWUuanNvbi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MC4uYmY3MWQ0NzBjYmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4tZGVidWdnYWJs
ZVR5cGVzLXZhbHVlLmpzb24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6IE1hbGZvcm1lZCBk
b21haW4gc3BlY2lmaWNhdGlvbjogZGVidWdnYWJsZVR5cGVzIGZvciBkb21haW4gV2ViT25seSBp
cyBhbiB1bnN1cHBvcnRlZCBzdHJpbmcuIFdhczogIlt1J3dlYmInXSIsIEFsbG93ZWQgdmFsdWVz
OiBzZXJ2aWNlLXdvcmtlciwgamF2YXNjcmlwdCwgcGFnZSwgd2ViLXBhZ2UKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9m
YWlsLW9uLWRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5q
c29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL2ZhaWwtb24tZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVn
Z2FibGVUeXBlLmpzb24tZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAuLjg2N2UzNTAwODk4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZG9tYWluLXRhcmdldFR5
cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tZXJyb3IKQEAgLTAsMCArMSBA
QAorRVJST1I6IE1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjogY29tbWFuZCBDb21tYW5k
IGhhcyBhbiBpdGVtIGluIHRhcmdldFR5cGVzICJbdSd3b3JrZXInXSIgdGhhdCBpcyBub3Qgc3Vw
cG9ydGVkIGJ5IGFueSB2YWx1ZSBpbiBkZWJ1Z2dhYmxlVHlwZXMgIlt1J2phdmFzY3JpcHQnXSIu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZXMtdHlwZS5qc29uLWVycm9yIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2Zh
aWwtb24tZG9tYWluLXRhcmdldFR5cGVzLXR5cGUuanNvbi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZTlhMzU5MzNhMzUKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFp
bC1vbi1kb21haW4tdGFyZ2V0VHlwZXMtdHlwZS5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VS
Uk9SOiBNYWxmb3JtZWQgZG9tYWluIHNwZWNpZmljYXRpb246IHRhcmdldFR5cGVzIGZvciBkb21h
aW4gUGFnZU9ubHkgaXMgbm90IGFuIGFycmF5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4tdGFy
Z2V0VHlwZXMtdmFsdWUuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWRvbWFpbi10YXJnZXRUeXBlcy12YWx1
ZS5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40Njgw
N2Y3MmZjNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWRvbWFpbi10YXJnZXRUeXBlcy12YWx1
ZS5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBNYWxmb3JtZWQgZG9tYWluIHNwZWNp
ZmljYXRpb246IHRhcmdldFR5cGVzIGZvciBkb21haW4gUGFnZU9ubHkgaXMgYW4gdW5zdXBwb3J0
ZWQgc3RyaW5nLiBXYXM6ICJbdSdwYWdlZSddIiwgQWxsb3dlZCB2YWx1ZXM6IHNlcnZpY2Utd29y
a2VyLCBqYXZhc2NyaXB0LCB3b3JrZXIsIHBhZ2UsIHdlYi1wYWdlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1v
bi1kdXBsaWNhdGUtY29tbWFuZC1jYWxsLXBhcmFtZXRlci1uYW1lcy5qc29uLWVycm9yIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwt
b24tZHVwbGljYXRlLWNvbW1hbmQtY2FsbC1wYXJhbWV0ZXItbmFtZXMuanNvbi1lcnJvcgpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uM2Y3NTZkZTMyNTAKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1jYWxsLXBhcmFtZXRlci1uYW1lcy5q
c29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBNYWxmb3JtZWQgZG9tYWluIHNwZWNpZmlj
YXRpb246IGNhbGwgcGFyYW1ldGVyIGxpc3QgZm9yIGNvbW1hbmQgcHJvY2Vzc1BvaW50cyBoYXMg
ZHVwbGljYXRlIHBhcmFtZXRlciBuYW1lcwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLWNv
bW1hbmQtcmV0dXJuLXBhcmFtZXRlci1uYW1lcy5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRl
LWNvbW1hbmQtcmV0dXJuLXBhcmFtZXRlci1uYW1lcy5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5lYTE0OGZmNjdjOQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9m
YWlsLW9uLWR1cGxpY2F0ZS1jb21tYW5kLXJldHVybi1wYXJhbWV0ZXItbmFtZXMuanNvbi1lcnJv
cgpAQCAtMCwwICsxIEBACitFUlJPUjogTWFsZm9ybWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9uOiBy
ZXR1cm4gcGFyYW1ldGVyIGxpc3QgZm9yIGNvbW1hbmQgcHJvY2Vzc1BvaW50cyBoYXMgZHVwbGlj
YXRlIHBhcmFtZXRlciBuYW1lcwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLWV2ZW50LXBh
cmFtZXRlci1uYW1lcy5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLWV2ZW50LXBhcmFtZXRl
ci1uYW1lcy5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
Li5jNzFiYmQyMWMyYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS1ldmVudC1w
YXJhbWV0ZXItbmFtZXMuanNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjogTWFsZm9ybWVk
IGRvbWFpbiBzcGVjaWZpY2F0aW9uOiBwYXJhbWV0ZXIgbGlzdCBmb3IgZXZlbnQgcHJvY2Vzc2Vk
UG9pbnRzIGhhcyBkdXBsaWNhdGUgcGFyYW1ldGVyIG5hbWVzCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1k
dXBsaWNhdGUtdHlwZS1kZWNsYXJhdGlvbnMuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS10
eXBlLWRlY2xhcmF0aW9ucy5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwLi40NDdjZGY4ZTI4ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0
ZS10eXBlLWRlY2xhcmF0aW9ucy5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBEdXBs
aWNhdGUgdHlwZSBkZWNsYXJhdGlvbjogUnVudGltZS5SZW1vdGVPYmplY3RJZApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVk
L2ZhaWwtb24tZHVwbGljYXRlLXR5cGUtbWVtYmVyLW5hbWVzLmpzb24tZXJyb3IgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1k
dXBsaWNhdGUtdHlwZS1tZW1iZXItbmFtZXMuanNvbi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMC4uZDUzNzZhNzdhNDUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1v
bi1kdXBsaWNhdGUtdHlwZS1tZW1iZXItbmFtZXMuanNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitF
UlJPUjogTWFsZm9ybWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9uOiB0eXBlIGRlY2xhcmF0aW9uIGZv
ciBQb2ludCBoYXMgZHVwbGljYXRlIG1lbWJlciBuYW1lcwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZW51
bS13aXRoLW5vLXZhbHVlcy5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZW51bS13aXRoLW5vLXZhbHVlcy5q
c29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yNjU1YzJi
OTA3ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWVudW0td2l0aC1uby12YWx1ZXMuanNvbi1l
cnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjogVHlwZSByZWZlcmVuY2Ugd2l0aCBlbnVtIHZhbHVl
cyBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIGVudW0gdmFsdWUuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1l
dmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLWVycm9y
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVk
L2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUu
anNvbi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYjY1ZDdh
MGQxOTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1ldmVudC10YXJnZXRUeXBlLW1hdGNoaW5n
LWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBN
YWxmb3JtZWQgZG9tYWluIHNwZWNpZmljYXRpb246IGV2ZW50IEV2ZW50IGhhcyBhbiBpdGVtIGlu
IHRhcmdldFR5cGVzICJbdSd3b3JrZXInXSIgdGhhdCBpcyBub3Qgc3VwcG9ydGVkIGJ5IGFueSB2
YWx1ZSBpbiBkZWJ1Z2dhYmxlVHlwZXMgIlt1J2phdmFzY3JpcHQnXSIuCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFp
bC1vbi1ldmVudC10YXJnZXRUeXBlcy10eXBlLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1ldmVudC10YXJn
ZXRUeXBlcy10eXBlLmpzb24tZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAuLjc0MDNlMTNhODA5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZXZlbnQtdGFyZ2V0
VHlwZXMtdHlwZS5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBNYWxmb3JtZWQgZG9t
YWluIHNwZWNpZmljYXRpb246IHRhcmdldFR5cGVzIGZvciBldmVudCBQYWdlT25seSBpcyBub3Qg
YW4gYXJyYXkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGVzLXZhbHVlLmpzb24t
ZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvZmFpbC1vbi1ldmVudC10YXJnZXRUeXBlcy12YWx1ZS5qc29uLWVycm9yCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44MzAxMmE5ZmU0ZQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGVzLXZhbHVlLmpzb24tZXJyb3IKQEAgLTAsMCAr
MSBAQAorRVJST1I6IE1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjogdGFyZ2V0VHlwZXMg
Zm9yIGV2ZW50IFBhZ2VPbmx5IGlzIGFuIHVuc3VwcG9ydGVkIHN0cmluZy4gV2FzOiAiW3UncGFn
ZWUnXSIsIEFsbG93ZWQgdmFsdWVzOiBzZXJ2aWNlLXdvcmtlciwgamF2YXNjcmlwdCwgd29ya2Vy
LCBwYWdlLCB3ZWItcGFnZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tbnVtYmVyLXR5cGVkLW9wdGlvbmFs
LXBhcmFtZXRlci1mbGFnLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwt
cGFyYW1ldGVyLWZsYWcuanNvbi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMC4uOTdiMmFmMGU0N2UKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1udW1iZXItdHlw
ZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJP
UjogVGhlICdvcHRpb25hbCcgZmxhZyBmb3IgYSBwYXJhbWV0ZXIgbXVzdCBiZSBhIGJvb2xlYW4g
bGl0ZXJhbC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRpb25hbC10eXBlLW1l
bWJlci5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tbnVtYmVyLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVy
Lmpzb24tZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjg2ZGYz
NzUwYzFhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tbnVtYmVyLXR5cGVkLW9wdGlvbmFsLXR5
cGUtbWVtYmVyLmpzb24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6IFRoZSAnb3B0aW9uYWwn
IGZsYWcgZm9yIGEgdHlwZSBtZW1iZXIgbXVzdCBiZSBhIGJvb2xlYW4gbGl0ZXJhbC4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC9mYWlsLW9uLXN0cmluZy10eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29uLWVy
cm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVj
dGVkL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24tZXJy
b3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjk3YjJhZjBlNDdlCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1m
bGFnLmpzb24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6IFRoZSAnb3B0aW9uYWwnIGZsYWcg
Zm9yIGEgcGFyYW1ldGVyIG11c3QgYmUgYSBib29sZWFuIGxpdGVyYWwuCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFp
bC1vbi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNvbi1lcnJvciBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9u
LXN0cmluZy10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29uLWVycm9yCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44NmRmMzc1MGMxYQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC9mYWlsLW9uLXN0cmluZy10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29uLWVycm9yCkBA
IC0wLDAgKzEgQEAKK0VSUk9SOiBUaGUgJ29wdGlvbmFsJyBmbGFnIGZvciBhIHR5cGUgbWVtYmVy
IG11c3QgYmUgYSBib29sZWFuIGxpdGVyYWwuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi10eXBlLWRlY2xh
cmF0aW9uLXVzaW5nLXR5cGUtcmVmZXJlbmNlLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi10eXBlLWRlY2xh
cmF0aW9uLXVzaW5nLXR5cGUtcmVmZXJlbmNlLmpzb24tZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAuLjQyZjU3NTNhNDM5Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwt
b24tdHlwZS1kZWNsYXJhdGlvbi11c2luZy10eXBlLXJlZmVyZW5jZS5qc29uLWVycm9yCkBAIC0w
LDAgKzEgQEAKK0VSUk9SOiBUeXBlIHJlZmVyZW5jZSBjYW5ub3QgaGF2ZSBib3RoICd0eXBlJyBh
bmQgJyRyZWYnIGtleXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi10eXBlLXJlZmVyZW5jZS1hcy1wcmlt
aXRpdmUtdHlwZS5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS1yZWZlcmVuY2UtYXMtcHJpbWl0aXZl
LXR5cGUuanNvbi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u
ZDc2YmMxYzc3NzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi10eXBlLXJlZmVyZW5jZS1hcy1w
cmltaXRpdmUtdHlwZS5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBUeXBlIHJlZmVy
ZW5jZSAnRGF0YWJhc2VJZCcgaXMgbm90IGEgcHJpbWl0aXZlIHR5cGUuIEFsbG93ZWQgdmFsdWVz
OiBpbnRlZ2VyLCBudW1iZXIsIHN0cmluZywgYm9vbGVhbiwgZW51bSwgb2JqZWN0LCBhcnJheSwg
YW55CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi10eXBlLXdpdGgtbG93ZXJjYXNlLW5hbWUuanNvbi1lcnJv
ciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC9mYWlsLW9uLXR5cGUtd2l0aC1sb3dlcmNhc2UtbmFtZS5qc29uLWVycm9yCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40ZTQ2MjI1MGMwYQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC9mYWlsLW9uLXR5cGUtd2l0aC1sb3dlcmNhc2UtbmFtZS5qc29uLWVycm9yCkBAIC0wLDAgKzEg
QEAKK0VSUk9SOiBUeXBlcyBtdXN0IGJlZ2luIHdpdGggYW4gdXBwZXJjYXNlIGNoYXJhY3Rlci4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9leHBlY3RlZC9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1kZWNsYXJh
dGlvbi5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLWRl
Y2xhcmF0aW9uLmpzb24tZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAuLjJkMzhlNjQ2NzVkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tdW5rbm93bi10eXBlLXJl
ZmVyZW5jZS1pbi10eXBlLWRlY2xhcmF0aW9uLmpzb24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJS
T1I6IFR5cGUgcmVmZXJlbmNlICdkcmFnb24nIGlzIG5vdCBhIHByaW1pdGl2ZSB0eXBlLiBBbGxv
d2VkIHZhbHVlczogaW50ZWdlciwgbnVtYmVyLCBzdHJpbmcsIGJvb2xlYW4sIGVudW0sIG9iamVj
dCwgYXJyYXksIGFueQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1p
bi10eXBlLW1lbWJlci5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1p
bi10eXBlLW1lbWJlci5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwLi5mYWY2NjcyY2JlZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXVua25vd24tdHlw
ZS1yZWZlcmVuY2UtaW4tdHlwZS1tZW1iZXIuanNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJP
UjogTG9va3VwIGZhaWxlZCBmb3IgdHlwZSByZWZlcmVuY2U6IENvbG9yIChyZWZlcmVuY2VkIGZy
b20gZG9tYWluOiBGYW50YXN5KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2dlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0
dXJlLWd1YXJkcy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC9nZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFy
ZHMuanNvbi1yZXN1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmQx
NDJlZjhhN2Y0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2dlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJl
LWd1YXJkcy5qc29uLXJlc3VsdApAQCAtMCwwICsxLDExODggQEAKKyMjIyBCZWdpbiBGaWxlOiBJ
bnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisvLyBOZXR3b3JrMQorSW5zcGVjdG9y
QmFja2VuZC5yZWdpc3RlckRvbWFpbigiTmV0d29yazEiLCBudWxsKTsKK0luc3BlY3RvckJhY2tl
bmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMS5sb2FkUmVzb3VyY2UiLCBudWxsLCBbXSwgW10p
OworSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiTmV0d29yazEiLCBudWxsKTsKKwor
Ly8gTmV0d29yazMKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIk5ldHdvcmszIiwg
bnVsbCk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnQoIk5ldHdvcmszLnJlc291cmNl
TG9hZGVkIiwgbnVsbCwgW10pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rlck5ldHdvcmszRGlz
cGF0Y2hlciA9IEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEaXNwYXRjaGVyLmJpbmQoSW5zcGVj
dG9yQmFja2VuZCwgIk5ldHdvcmszIik7CitJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWlu
KCJOZXR3b3JrMyIsIG51bGwpOworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFu
ZHMuanMKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMu
aAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0
aC1mZWF0dXJlLWd1YXJkcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKworbmFtZXNwYWNlIElu
c3BlY3RvciB7CisKK2NsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoK
KyAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4m
JiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIp
OyB9CisgICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQorcHJpdmF0ZToKKyAgICBSZWZQdHI8
QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Cit9OworCisKK2NsYXNzIEFs
dGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2Vu
ZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgfkFsdGVybmF0ZU5ldHdvcmsxQmFj
a2VuZERpc3BhdGNoZXIoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlKGxvbmcg
Y2FsbElkKSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8v
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorIyMjIEVuZCBGaWxlOiBU
ZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdl
bmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVz
dFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25h
bWVzcGFjZSBJbnNwZWN0b3IgeworCit0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKworI2lm
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorY2xhc3MgQWx0ZXJuYXRl
TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjsKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKKworY2xhc3MgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UoRXJyb3JTdHJp
bmcmKSA9IDA7Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+TmV0d29yazFCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXIoKTsKK307CisKK2NsYXNzIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIgZmlu
YWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAg
IHN0YXRpYyBSZWY8TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNw
YXRjaGVyJiwgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICB2b2lkIGRp
c3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9i
amVjdD4mJiBtZXNzYWdlKSBvdmVycmlkZTsKK3ByaXZhdGU6CisgICAgdm9pZCBsb2FkUmVzb3Vy
Y2UobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Cisj
aWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCitwdWJsaWM6CisgICAg
dm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3Bh
dGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0
ZXJuYXRlRGlzcGF0Y2hlcjsgfQorcHJpdmF0ZToKKyAgICBBbHRlcm5hdGVOZXR3b3JrMUJhY2tl
bmREaXNwYXRjaGVyKiBtX2FsdGVybmF0ZURpc3BhdGNoZXIgeyBudWxscHRyIH07CisjZW5kaWYg
Ly8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCitwcml2YXRlOgorICAg
IE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImLCBOZXR3b3JrMUJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyKiBtX2FnZW50IHsgbnVsbHB0ciB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4g
RmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvSlNP
TlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQorI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNl
bmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworbmFtZXNw
YWNlIEluc3BlY3RvciB7CisKK05ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+TmV0
d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KKworUmVmPE5ldHdvcmsxQmFja2Vu
ZERpc3BhdGNoZXI+IE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShCYWNrZW5kRGlz
cGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyKiBhZ2VudCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBOZXR3b3JrMUJhY2tlbmRE
aXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOworfQorCitOZXR3b3JrMUJhY2tl
bmREaXNwYXRjaGVyOjpOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVy
JiBiYWNrZW5kRGlzcGF0Y2hlciwgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFn
ZW50KQorICAgIDogU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNo
ZXIpCisgICAgLCBtX2FnZW50KGFnZW50KQoreworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJl
Z2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbigiTmV0d29yazEiX3MsIHRoaXMpOworfQorCit2b2lk
IE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25z
dCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQoreworICAgIFJl
ZjxOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKKworICAgIFJlZlB0
cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7CisgICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJh
bXMiX3MsIHBhcmFtZXRlcnMpOworCisgICAgaWYgKG1ldGhvZCA9PSAibG9hZFJlc291cmNlIikg
eworICAgICAgICBsb2FkUmVzb3VyY2UocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9y
dFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdv
cmsxLiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7Cit9CisKK3ZvaWQgTmV0d29yazFC
YWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiYmKQoreworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENI
RVJTKQorICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKKyAgICAgICAgbV9hbHRlcm5h
dGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2UocmVxdWVzdElkKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
KworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9
IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9hZ2VudC0+bG9hZFJlc291cmNlKGVycm9y
KTsKKworICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOworICAg
IGVsc2UKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihC
YWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVh
dHVyZS1ndWFyZHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNp
bmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgRnJvbnRlbmRSb3V0ZXI7CisKK2Ns
YXNzIE5ldHdvcmszRnJvbnRlbmREaXNwYXRjaGVyIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKK3B1YmxpYzoKKyAgICBOZXR3b3JrM0Zyb250ZW5kRGlzcGF0Y2hlcihGcm9udGVuZFJv
dXRlciYgZnJvbnRlbmRSb3V0ZXIpIDogbV9mcm9udGVuZFJvdXRlcihmcm9udGVuZFJvdXRlcikg
eyB9CisgICAgdm9pZCByZXNvdXJjZUxvYWRlZCgpOworcHJpdmF0ZToKKyAgICBGcm9udGVuZFJv
dXRlciYgbV9mcm9udGVuZFJvdXRlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgor
IyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxl
OiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordm9pZCBOZXR3b3JrM0Zyb250
ZW5kRGlzcGF0Y2hlcjo6cmVzb3VyY2VMb2FkZWQoKQoreworICAgIFJlZjxKU09OOjpPYmplY3Q+
IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBqc29uTWVzc2FnZS0+
c2V0U3RyaW5nKCJtZXRob2QiX3MsICJOZXR3b3JrMy5yZXNvdXJjZUxvYWRlZCJfcyk7CisKKyAg
ICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkp
OworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0RnJv
bnRlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVj
dHMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMt
d2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yUHJvdG9jb2xUeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25h
bWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworCisKKy8v
IEZvcndhcmQgZGVjbGFyYXRpb25zLgorbmFtZXNwYWNlIE5ldHdvcmsyIHsKK2NsYXNzIE5ldHdv
cmtFcnJvcjsKK30gLy8gTmV0d29yazIKKy8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4K
KworCisKKworbmFtZXNwYWNlIE5ldHdvcmsyIHsKK2NsYXNzIE5ldHdvcmtFcnJvciA6IHB1Ymxp
YyBKU09OOjpPYmplY3RCYXNlIHsKK3B1YmxpYzoKKyAgICBlbnVtIHsKKyAgICAgICAgTm9GaWVs
ZHNTZXQgPSAwLAorICAgICAgICBNZXNzYWdlU2V0ID0gMSA8PCAwLAorICAgICAgICBDb2RlU2V0
ID0gMSA8PCAxLAorICAgICAgICBBbGxGaWVsZHNTZXQgPSAoTWVzc2FnZVNldCB8IENvZGVTZXQp
CisgICAgfTsKKworICAgIHRlbXBsYXRlPGludCBTVEFURT4KKyAgICBjbGFzcyBCdWlsZGVyIHsK
KyAgICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBtX3Jlc3VsdDsKKwor
ICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3Rh
dGUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVp
bGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVy
KFJlZjwvKk5ldHdvcmtFcnJvciovSlNPTjo6T2JqZWN0PiYmIG9iamVjdCkKKyAgICAgICAgICAg
IDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQorICAgICAgICB7CisgICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9p
bml0X3N0YXRlKTsKKyAgICAgICAgfQorICAgICAgICBmcmllbmQgY2xhc3MgTmV0d29ya0Vycm9y
OworICAgIHB1YmxpYzoKKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTWVzc2FnZVNldD4mIHNl
dE1lc3NhZ2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIE1lc3NhZ2VTZXQpLCBwcm9wZXJ0eV9tZXNzYWdlX2FscmVh
ZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1lc3NhZ2UiX3MsIHZh
bHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TWVzc2FnZVNldD4oKTsKKyAgICAg
ICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2RlU2V0PiYgc2V0Q29kZShpbnQgdmFs
dWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2Rl
U2V0KSwgcHJvcGVydHlfY29kZV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0SW50ZWdlcigiY29kZSJfcywgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0
ZTxDb2RlU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgUmVmPE5ldHdvcmtFcnJvcj4gcmVs
ZWFzZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFs
bEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CisgICAgICAgICAgICBDT01QSUxFX0FT
U0VSVChzaXplb2YoTmV0d29ya0Vycm9yKSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0KSwgY2Fubm90
X2Nhc3QpOworCisgICAgICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uUmVzdWx0ID0gbV9y
ZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gV1RGTW92
ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8TmV0d29ya0Vycm9yPio+KCZqc29uUmVzdWx0KSk7Cisg
ICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgfTsKKworICAgIC8qCisg
ICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgorICAgICAqIFJlZjxOZXR3b3JrRXJyb3I+IHJl
c3VsdCA9IE5ldHdvcmtFcnJvcjo6Y3JlYXRlKCkKKyAgICAgKiAgICAgLnNldE1lc3NhZ2UoLi4u
KQorICAgICAqICAgICAuc2V0Q29kZSguLi4pCisgICAgICogICAgIC5yZWxlYXNlKCk7CisgICAg
ICovCisgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCisgICAgeworICAg
ICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7
CisgICAgfQorfTsKKworfSAvLyBOZXR3b3JrMgorCisKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9j
b2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bE9iamVjdHMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVh
dHVyZS1ndWFyZHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5o
IgorCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKwor
CisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgor
CisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisKKyMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbmNs
dWRlIDx3dGYvUmV0YWluUHRyLmg+CisKK0Bwcm90b2NvbCBUZXN0UHJvdG9jb2xOZXR3b3JrMURv
bWFpbkhhbmRsZXI7CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKK2NsYXNzIE9iakNJbnNw
ZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZU5l
dHdvcmsxQmFja2VuZERpc3BhdGNoZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwor
cHVibGljOgorICAgIE9iakNJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKGlkPFRl
c3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0g
aGFuZGxlcjsgfQorICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0SWQp
IG92ZXJyaWRlOworcHJpdmF0ZToKKyAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sTmV0d29y
azFEb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisK
KyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVy
ZS1ndWFyZHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRj
aGVycy5oIgorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5o
PgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordm9pZCBPYmpDSW5zcGVjdG9yTmV0d29yazFC
YWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkKQoreworICAgIGlm
ICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2VX
aXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsKKyAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRj
aGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMS5sb2FkUmVzb3VyY2UnIHdhcyBub3QgZm91
bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNT
dHJpbmcgKmVycm9yKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3Rv
Y29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9y
KTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAg
ICB9OworCisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKKyAgICAgICAgYmFja2VuZERpc3Bh
dGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwg
ZmFsc2UpOworICAgIH07CisKKyAgICBbbV9kZWxlZ2F0ZSBsb2FkUmVzb3VyY2VXaXRoRXJyb3JD
YWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOwor
fQorCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbi5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJh
dGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2Nv
bC5oPgorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZh
Y2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0CitAcHJvcGVydHkgKG5vbmF0
b21pYywgcmV0YWluLCBzZXR0ZXI9c2V0TmV0d29yazFIYW5kbGVyOikgaWQ8VGVzdFByb3RvY29s
TmV0d29yazFEb21haW5IYW5kbGVyPiBuZXR3b3JrMUhhbmRsZXI7CitAcHJvcGVydHkgKG5vbmF0
b21pYywgcmVhZG9ubHkpIFRlc3RQcm90b2NvbE5ldHdvcmszRG9tYWluRXZlbnREaXNwYXRjaGVy
ICpuZXR3b3JrM0V2ZW50RGlzcGF0Y2hlcjsKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24uaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29u
ZmlndXJhdGlvbi5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRl
LWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24u
aCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbXBvcnQgIlRlc3RQcm90
b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJu
YXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRh
YmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3Bl
Y3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KK3sKKyAg
ICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworICAgIGlkPFRl
c3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4gX25ldHdvcmsxSGFuZGxlcjsKKyAgICBU
ZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkV2ZW50RGlzcGF0Y2hlciAqX25ldHdvcmszRXZlbnRE
aXNwYXRjaGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdt
ZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1
cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NF
UlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVy
biBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbX25ldHdvcmsxSGFuZGxlciBy
ZWxlYXNlXTsKKyAgICBbX25ldHdvcmszRXZlbnREaXNwYXRjaGVyIHJlbGVhc2VdOworICAgIFtz
dXBlciBkZWFsbG9jXTsKK30KKworLSAodm9pZClzZXROZXR3b3JrMUhhbmRsZXI6KGlkPFRlc3RQ
cm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4paGFuZGxlcgoreworICAgIGlmIChoYW5kbGVy
ID09IF9uZXR3b3JrMUhhbmRsZXIpCisgICAgICAgIHJldHVybjsKKworICAgIFtfbmV0d29yazFI
YW5kbGVyIHJlbGVhc2VdOworICAgIF9uZXR3b3JrMUhhbmRsZXIgPSBbaGFuZGxlciByZXRhaW5d
OworCisgICAgYXV0byBhbHRlcm5hdGVEaXNwYXRjaGVyID0gbWFrZVVuaXF1ZTxPYmpDSW5zcGVj
dG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7CisgICAgYXV0byBhbHRlcm5h
dGVBZ2VudCA9IG1ha2VVbmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8TmV0d29yazFC
YWNrZW5kRGlzcGF0Y2hlciwgQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4+KCJO
ZXR3b3JrMSJfcywgKl9jb250cm9sbGVyLCBXVEZNb3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIpKTsK
KyAgICBfY29udHJvbGxlci0+YXBwZW5kRXh0cmFBZ2VudChXVEZNb3ZlKGFsdGVybmF0ZUFnZW50
KSk7Cit9CisKKy0gKGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4pbmV0d29y
azFIYW5kbGVyCit7CisgICAgcmV0dXJuIF9uZXR3b3JrMUhhbmRsZXI7Cit9CisKKy0gKFRlc3RQ
cm90b2NvbE5ldHdvcmszRG9tYWluRXZlbnREaXNwYXRjaGVyICopbmV0d29yazNFdmVudERpc3Bh
dGNoZXIKK3sKKyAgICBpZiAoIV9uZXR3b3JrM0V2ZW50RGlzcGF0Y2hlcikKKyAgICAgICAgX25l
dHdvcmszRXZlbnREaXNwYXRjaGVyID0gW1tUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkV2ZW50
RGlzcGF0Y2hlciBhbGxvY10gaW5pdFdpdGhDb250cm9sbGVyOl9jb250cm9sbGVyXTsKKyAgICBy
ZXR1cm4gX25ldHdvcmszRXZlbnREaXNwYXRjaGVyOworfQorCitAZW5kCisKKworIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29s
SW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisj
aW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwor
CitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sTmV0d29yazNEb21haW5FdmVudERpc3BhdGNo
ZXIKK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwor
fQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3Bl
Y3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOwor
ICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxl
cik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQor
CistICh2b2lkKXJlc291cmNlTG9hZGVkCit7CisgICAgY29uc3QgRnJvbnRlbmRSb3V0ZXImIHJv
dXRlciA9IF9jb250cm9sbGVyLT5mcm9udGVuZFJvdXRlcigpOworCisgICAgUmVmPEpTT046Ok9i
amVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGpzb25NZXNz
YWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIk5ldHdvcmszLnJlc291cmNlTG9hZGVkIl9zKTsK
KyAgICByb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cit9CisK
K0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0K
KworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8Rm91bmRh
dGlvbi9Gb3VuZGF0aW9uLmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpT
T05PYmplY3QuaD4KKworCitAY2xhc3MgVGVzdFByb3RvY29sTmV0d29yazJOZXR3b3JrRXJyb3I7
CisKKworCisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVy
ZmFjZSBUZXN0UHJvdG9jb2xOZXR3b3JrMk5ldHdvcmtFcnJvciA6IFJXSVByb3RvY29sSlNPTk9i
amVjdAorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3Ry
aW5nICosIGlkPiAqKXBheWxvYWQ7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9i
amVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKKy0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBjb2RlOihpbnQpY29kZTsKKy8q
IHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqbWVzc2Fn
ZTsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCBjb2Rl
OworQGVuZAorCitAcHJvdG9jb2wgVGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyIDxO
U09iamVjdD4KK0BvcHRpb25hbAorLSAodm9pZClsb2FkUmVzb3VyY2VXaXRoRXJyb3JDYWxsYmFj
azoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNr
Oih2b2lkKF4pKHZvaWQpKXN1Y2Nlc3NDYWxsYmFjazsKK0BlbmQKKworX19hdHRyaWJ1dGVfXygo
dmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbE5ldHdvcmsz
RG9tYWluRXZlbnREaXNwYXRjaGVyIDogTlNPYmplY3QKKy0gKHZvaWQpcmVzb3VyY2VMb2FkZWQ7
CitAZW5kCisKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRp
YmlsaXR5T2JqZWN0cy5oPgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFBy
b3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgorI2lt
cG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Cisj
aW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbE5ldHdv
cmszRG9tYWluRXZlbnREaXNwYXRjaGVyIChQcml2YXRlKQorLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoQ29udHJvbGxlcjooSW5zcGVjdG9yOjpBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIq
KWNvbnRyb2xsZXI7CitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5h
bC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0
dXJlLWd1YXJkcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVBy
b3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordGVt
cGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgorT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9t
UHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7CisKKworCit9IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMu
aAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1
cmUtZ3VhcmRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisKKyNpbXBvcnQgIlRl
c3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgorI2ltcG9y
dCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKwordXNpbmcg
bmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMgKE5ldHdvcmsyRG9tYWluKQorCisrICh2b2lkKV9wYXJzZU5ldHdvcmtFcnJvcjooVGVz
dFByb3RvY29sTmV0d29yazJOZXR3b3JrRXJyb3IgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlk
KXBheWxvYWQ7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucyAoTmV0d29yazJEb21haW4pCisKKysgKHZvaWQpX3BhcnNlTmV0d29ya0Vycm9yOihU
ZXN0UHJvdG9jb2xOZXR3b3JrMk5ldHdvcmtFcnJvciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDoo
aWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwg
W05TRGljdGlvbmFyeSBjbGFzc10pOworICAgICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sTmV0
d29yazJOZXR3b3JrRXJyb3IgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKK30KKwor
QGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisK
KyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRl
c3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucy5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZh
dGUuaD4KKyNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVl
cy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisKK0BpbXBsZW1lbnRhdGlvbiBU
ZXN0UHJvdG9jb2xOZXR3b3JrMk5ldHdvcmtFcnJvcgorCistIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2Fk
Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7
CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJt
ZXNzYWdlIl0sIEAibWVzc2FnZSIpOworICAgIHNlbGYubWVzc2FnZSA9IHBheWxvYWRbQCJtZXNz
YWdlIl07CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxv
YWRbQCJjb2RlIl0sIEAiY29kZSIpOworICAgIHNlbGYuY29kZSA9IFtwYXlsb2FkW0AiY29kZSJd
IGludGVnZXJWYWx1ZV07CisKKyAgICByZXR1cm4gc2VsZjsKK30KKy0gKGluc3RhbmNldHlwZSlp
bml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilvYmplY3QKK3sK
KyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoSlNPTk9iamVjdDpbb2JqZWN0IHRvSlNP
Tk9iamVjdF0uZ2V0KCldKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHJldHVybiBzZWxm
OworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3Nh
Z2UgY29kZTooaW50KWNvZGUKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAg
ICAgICAgcmV0dXJuIG5pbDsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJP
UEVSVFkobWVzc2FnZSwgQCJtZXNzYWdlIik7CisKKyAgICBzZWxmLm1lc3NhZ2UgPSBtZXNzYWdl
OworICAgIHNlbGYuY29kZSA9IGNvZGU7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9p
ZClzZXRNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UKK3sKKyAgICBbc3VwZXIgc2V0U3RyaW5n
Om1lc3NhZ2UgZm9yS2V5OkAibWVzc2FnZSJdOworfQorCistIChOU1N0cmluZyAqKW1lc3NhZ2UK
K3sKKyAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAIm1lc3NhZ2UiXTsKK30KKworLSAo
dm9pZClzZXRDb2RlOihpbnQpY29kZQoreworICAgIFtzdXBlciBzZXRJbnRlZ2VyOmNvZGUgZm9y
S2V5OkAiY29kZSJdOworfQorCistIChpbnQpY29kZQoreworICAgIHJldHVybiBbc3VwZXIgaW50
ZWdlckZvcktleTpAImNvZGUiXTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5q
c29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9leHBlY3RlZC9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uLXJlc3VsdApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uY2Y1YTU5MzFiYzAKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbi1yZXN1bHQKQEAgLTAs
MCArMSw4NzkgQEAKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50
LWRvbWFpbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Cisj
IyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcworCisjIyMgQmVnaW4gRmls
ZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2lm
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCisjaW5jbHVkZSAiVGVz
dFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250
ZW5kUm91dGVyLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hl
cihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNw
YXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQorICAgIEJhY2tlbmREaXNwYXRjaGVyKiBi
YWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0
KCk7IH0KK3ByaXZhdGU6CisgICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmRE
aXNwYXRjaGVyOworfTsKKworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRp
ZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyMjIyBFbmQgRmls
ZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBU
ZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFBy
b3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVz
cGFjZSBJbnNwZWN0b3IgeworCit0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKworCisKK30g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNo
ZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21h
aW4uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNs
dWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQorI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0
Y2hlcnMuaCIKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVn
aW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7
CisKK2NsYXNzIEZyb250ZW5kUm91dGVyOworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMj
IyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTog
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgorLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisK
KyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFByb3Rv
Y29sIHsKKworCisKKworCisvLyBUeXBlZGVmcy4KK25hbWVzcGFjZSBSdW50aW1lIHsKKy8qIFVu
aXF1ZSBvYmplY3QgaWRlbnRpZmllci4gKi8KK3R5cGVkZWYgU3RyaW5nIFJlbW90ZU9iamVjdElk
OworfSAvLyBSdW50aW1lCisKK25hbWVzcGFjZSBSdW50aW1lMiB7CisvKiBVbmlxdWUgb2JqZWN0
IGlkZW50aWZpZXIuICovCit0eXBlZGVmIFN0cmluZyBSZW1vdGVPYmplY3RJZDsKK30gLy8gUnVu
dGltZTIKKy8vIEVuZCBvZiB0eXBlZGVmcy4KKworCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29s
CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xP
YmplY3RzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21h
aW4uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorCisjaW5j
bHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCitu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworCisKK30gLy8g
bmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5Q
dHIuaD4KKworCisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKK30gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5o
CisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRv
bWFpbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNp
bXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJz
LmgiCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisK
K25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9y
L1Rlc3RQcm90b2NvbC5oPgorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIp
KSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0CitAZW5k
CisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90
b2NvbENvbmZpZ3VyYXRpb24uaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIK
KyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW1w
b3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKwordXNp
bmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENv
bmZpZ3VyYXRpb24KK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250
cm9sbGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50
YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVy
IGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQo
Y29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVybiBz
ZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisK
K0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKwor
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5q
c29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5oIgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNl
IEluc3BlY3RvcjsKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hl
cnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxGb3VuZGF0
aW9uL0ZvdW5kYXRpb24uaD4KKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNP
Tk9iamVjdC5oPgorCisKKworCisKKworCisKKworCisKKworCisjaW1wb3J0IDxXZWJJbnNwZWN0
b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+CisKKyMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFs
LmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVy
ZW50LWRvbWFpbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9i
amVjdFByaXZhdGUuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVj
dG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKworCisKKworIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1w
b3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+CisKK25hbWVz
cGFjZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+CitPcHRp
b25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVl
KTsKKworCisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
c2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xU
eXBlUGFyc2VyLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0
UHJpdmF0ZS5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW50ZXJmYWNlIFRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoUnVudGltZURvbWFpbikKKworKyAodm9pZClfcGFy
c2VSZW1vdGVPYmplY3RJZDooTlNTdHJpbmcgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBh
eWxvYWQ7CisKK0BlbmQKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChS
dW50aW1lMkRvbWFpbikKKworKyAodm9pZClfcGFyc2VSZW1vdGVPYmplY3RJZDooTlNTdHJpbmcg
Kiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisKK0BlbmQKKworQGltcGxlbWVu
dGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoUnVudGltZURvbWFpbikKKworKyAo
dm9pZClfcGFyc2VSZW1vdGVPYmplY3RJZDooTlNTdHJpbmcgKiopb3V0VmFsdWUgZnJvbVBheWxv
YWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxv
YWQsIFtOU1N0cmluZyBjbGFzc10pOworICAgICpvdXRWYWx1ZSA9IChOU1N0cmluZyAqKXBheWxv
YWQ7Cit9CisKK0BlbmQKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMgKFJ1bnRpbWUyRG9tYWluKQorCisrICh2b2lkKV9wYXJzZVJlbW90ZU9iamVjdElkOihOU1N0
cmluZyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TU3RyaW5nIGNsYXNzXSk7CisgICAgKm91
dFZhbHVlID0gKE5TU3RyaW5nICopcGF5bG9hZDsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xUeXBlcy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUt
dHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2lt
cG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0
b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorI2ltcG9ydCA8d3RmL0Fzc2VydGlv
bnMuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNw
ZWN0b3I7CisKKworCisKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24tcmVzdWx0IGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3NoYWRv
d2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMC4uMTA3MjEyYjliNDgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2hhZG93
ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24tcmVzdWx0CkBAIC0wLDAgKzEsMTA4OSBAQAor
IyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcworLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisjIyMgRW5kIEZpbGU6
IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcworCisjIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVy
bmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5
cGVzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5o
PgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXIgeworcHVibGljOgorICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJh
Y2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdU
Rk1vdmUoZGlzcGF0Y2hlcik7IH0KKyAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3Bh
dGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Citwcml2
YXRlOgorICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsK
K307CisKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjIyMgRW5kIEZpbGU6IFRlc3RBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmRE
aXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQt
b3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmpl
Y3RzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCisKKworfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisj
IyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYv
SlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQorI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIK
KyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMj
IEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTog
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVz
dFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFz
cyBGcm9udGVuZFJvdXRlcjsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZp
bGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9u
dGVuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNo
YWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0
RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25h
bWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVu
ZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbE9iamVjdHMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNo
YWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25z
Lmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFByb3RvY29sIHsK
KworCisKKy8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgorbmFtZXNwYWNlIFJ1bnRpbWUgeworY2xh
c3MgS2V5UGF0aDsKK30gLy8gUnVudGltZQorLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25z
LgorCisKKworCituYW1lc3BhY2UgVGVzdEhlbHBlcnMgeworCitTdHJpbmcgZ2V0RW51bUNvbnN0
YW50VmFsdWUoaW50IGNvZGUpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgZ2V0RW51
bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFsdWUpCit7CisgICAgcmV0dXJuIGdldEVudW1Db25zdGFu
dFZhbHVlKHN0YXRpY19jYXN0PGludD4oZW51bVZhbHVlKSk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFRlc3RIZWxwZXJzCisKK25hbWVzcGFjZSBSdW50aW1lIHsKKy8qIEtleSBwYXRoLiAqLworY2xh
c3MgS2V5UGF0aCA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKK3B1YmxpYzoKKyAgICAvLyBO
YW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICd0eXBlJyB3aGlsZSBnZW5lcmF0aW5nIEtleVBhdGgu
CisgICAgZW51bSBjbGFzcyBUeXBlIHsKKyAgICAgICAgTnVsbCA9IDAsCisgICAgICAgIFN0cmlu
ZyA9IDEsCisgICAgICAgIEFycmF5ID0gMiwKKyAgICB9OyAvLyBlbnVtIGNsYXNzIFR5cGUKKyAg
ICBlbnVtIHsKKyAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAorICAgICAgICBUeXBlU2V0ID0gMSA8
PCAwLAorICAgICAgICBBbGxGaWVsZHNTZXQgPSAoVHlwZVNldCkKKyAgICB9OworCisgICAgdGVt
cGxhdGU8aW50IFNUQVRFPgorICAgIGNsYXNzIEJ1aWxkZXIgeworICAgIHByaXZhdGU6CisgICAg
ICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVzdWx0OworCisgICAgICAgIHRlbXBsYXRlPGlu
dCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4q
Pih0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXIoUmVmPC8qS2V5UGF0aCovSlNP
Tjo6T2JqZWN0PiYmIG9iamVjdCkKKyAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmpl
Y3QpKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0Zp
ZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKKyAgICAgICAgfQor
ICAgICAgICBmcmllbmQgY2xhc3MgS2V5UGF0aDsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgQnVp
bGRlcjxTVEFURSB8IFR5cGVTZXQ+JiBzZXRUeXBlKFR5cGUgdmFsdWUpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUeXBlU2V0KSwgcHJvcGVydHlfdHlw
ZV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ0eXBlIl9z
LCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUo
dmFsdWUpKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VHlwZVNldD4oKTsKKyAgICAg
ICAgfQorCisgICAgICAgIFJlZjxLZXlQYXRoPiByZWxlYXNlKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90
X3JlYWR5KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihLZXlQYXRoKSA9PSBz
aXplb2YoSlNPTjo6T2JqZWN0KSwgY2Fubm90X2Nhc3QpOworCisgICAgICAgICAgICBSZWY8SlNP
Tjo6T2JqZWN0PiBqc29uUmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKKyAgICAg
ICAgICAgIGF1dG8gcmVzdWx0ID0gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8S2V5UGF0
aD4qPigmanNvblJlc3VsdCkpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAg
fQorICAgIH07CisKKyAgICAvKgorICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKKyAgICAg
KiBSZWY8S2V5UGF0aD4gcmVzdWx0ID0gS2V5UGF0aDo6Y3JlYXRlKCkKKyAgICAgKiAgICAgLnNl
dFR5cGUoLi4uKQorICAgICAqICAgICAucmVsZWFzZSgpOworICAgICAqLworICAgIHN0YXRpYyBC
dWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxk
ZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOworICAgIH0KKworICAgIHZv
aWQgc2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgeworICAgICAgICBKU09OOjpP
YmplY3RCYXNlOjpzZXRTdHJpbmcoInN0cmluZyJfcywgdmFsdWUpOworICAgIH0KKworICAgIHZv
aWQgc2V0QXJyYXkoUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gdmFsdWUpCisgICAgewor
ICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRBcnJheSgiYXJyYXkiX3MsIFdURk1vdmUodmFs
dWUpKTsKKyAgICB9Cit9OworCit9IC8vIFJ1bnRpbWUKKworCisKK25hbWVzcGFjZSBUZXN0SGVs
cGVycyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFByb3RvY29sRW51bVR5cGU+CitPcHRpb25hbDxQ
cm90b2NvbEVudW1UeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJik7
CisKKy8vIEVudW1zIGluIHRoZSAnUnVudGltZScgRG9tYWluCit0ZW1wbGF0ZTw+CitPcHRpb25h
bDxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlPiBwYXJzZUVudW1W
YWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlw
ZT4oY29uc3QgU3RyaW5nJik7CisKK30gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCisKK30gLy8g
bmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bE9iamVjdHMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQt
b3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bE9iamVjdHMuaCIKKworI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK25hbWVzcGFjZSBQcm90
b2NvbCB7CisKK25hbWVzcGFjZSBUZXN0SGVscGVycyB7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBj
b25zdCBlbnVtX2NvbnN0YW50X3ZhbHVlc1tdID0geworICAgICJudWxsIiwKKyAgICAic3RyaW5n
IiwKKyAgICAiYXJyYXkiLAorfTsKKworU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBj
b2RlKSB7CisgICAgcmV0dXJuIGVudW1fY29uc3RhbnRfdmFsdWVzW2NvZGVdOworfQorCisvLyBF
bnVtcyBpbiB0aGUgJ1J1bnRpbWUnIERvbWFpbgordGVtcGxhdGU8PgorT3B0aW9uYWw8SW5zcGVj
dG9yOjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZT4gcGFyc2VFbnVtVmFsdWVGcm9t
U3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6OlR5cGU+KGNvbnN0
IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCit7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25z
dGFudFZhbHVlc1tdID0geworICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1
bnRpbWU6OktleVBhdGg6OlR5cGU6Ok51bGwsCisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQ
cm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZTo6U3RyaW5nLAorICAgICAgICAoc2l6ZV90
KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6OlR5cGU6OkFycmF5LAorICAg
IH07CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAzOyArK2kpCisgICAgICAgIGlmIChwcm90
b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCisg
ICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6
OlR5cGUpY29uc3RhbnRWYWx1ZXNbaV07CisKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQor
CisKK30gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90
b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xPYmplY3RzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERp
c3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1v
cHRpb25hbC10eXBlLXNldHRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRl
QmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCisKKwor
bmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZp
Zy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNs
dWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisKK25hbWVzcGFjZSBJ
bnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24uaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9j
b2wuaD4KKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJm
YWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAorQGVuZAorCisKKyMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbi5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2ltcG9ydCAi
VGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgorCit1c2luZyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
bgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Cit9
CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVj
dG9yQ29udHJvbGxlciopY29udHJvbGxlcgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Cisg
ICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIEFTU0VSVChjb250cm9sbGVy
KTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9CisK
Ky0gKHZvaWQpZGVhbGxvYworeworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworQGVuZAorCisK
KyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorCisjIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90
b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5o
IgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3Rv
cjsKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKwor
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KKy8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3Vu
ZGF0aW9uLmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3Qu
aD4KKworCitAY2xhc3MgVGVzdFByb3RvY29sUnVudGltZUtleVBhdGg7CisKKwordHlwZWRlZiBO
U19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlKSB7CisgICAg
VGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlTnVsbCwKKyAgICBUZXN0UHJvdG9jb2xSdW50
aW1lS2V5UGF0aFR5cGVTdHJpbmcsCisgICAgVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBl
QXJyYXksCit9OworCisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQor
QGludGVyZmFjZSBUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aCA6IFJXSVByb3RvY29sSlNPTk9i
amVjdAorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3Ry
aW5nICosIGlkPiAqKXBheWxvYWQ7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9i
amVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKKy0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aFR5cGU6KFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZSl0eXBlOworLyog
cmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgVGVzdFByb3RvY29sUnVu
dGltZUtleVBhdGhUeXBlIHR5cGU7CisvKiBvcHRpb25hbCAqLyBAcHJvcGVydHkgKG5vbmF0b21p
YywgY29weSkgTlNTdHJpbmcgKnN0cmluZzsKKy8qIG9wdGlvbmFsICovIEBwcm9wZXJ0eSAobm9u
YXRvbWljLCBjb3B5KSBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmFycmF5OworQGVuZAorCisKKwor
CisKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5
T2JqZWN0cy5oPgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisj
aW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgorI2ltcG9ydCA8SmF2YVNj
cmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDx3dGYv
SlNPTlZhbHVlcy5oPgorCisKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFs
LmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0
ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lt
cG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xB
cnJheUNvbnZlcnNpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBPYmpDRW51bVR5cGU+CitPcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2Nv
bFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKKworCitpbmxpbmUgU3RyaW5nIHRvUHJvdG9j
b2xTdHJpbmcoVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlIHZhbHVlKQoreworICAgIHN3
aXRjaCh2YWx1ZSkgeworICAgIGNhc2UgVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlTnVs
bDoKKyAgICAgICAgcmV0dXJuICJudWxsIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sUnVudGlt
ZUtleVBhdGhUeXBlU3RyaW5nOgorICAgICAgICByZXR1cm4gInN0cmluZyJfczsKKyAgICBjYXNl
IFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZUFycmF5OgorICAgICAgICByZXR1cm4gImFy
cmF5Il9zOworICAgIH0KK30KKwordGVtcGxhdGU8PgoraW5saW5lIE9wdGlvbmFsPFRlc3RQcm90
b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYg
dmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09ICJudWxsIikKKyAgICAgICAgcmV0dXJuIFRlc3RQ
cm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZU51bGw7CisgICAgaWYgKHZhbHVlID09ICJzdHJpbmci
KQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlU3RyaW5nOwor
ICAgIGlmICh2YWx1ZSA9PSAiYXJyYXkiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUnVu
dGltZUtleVBhdGhUeXBlQXJyYXk7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKworfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFs
LXR5cGUtc2V0dGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorCisjaW1wb3J0
ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKKyNp
bXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisKK3Vz
aW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zIChSdW50aW1lRG9tYWluKQorCisrICh2b2lkKV9wYXJzZUtleVBhdGg6KFRlc3RQ
cm90b2NvbFJ1bnRpbWVLZXlQYXRoICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2Fk
OworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMg
KFJ1bnRpbWVEb21haW4pCisKKysgKHZvaWQpX3BhcnNlS2V5UGF0aDooVGVzdFByb3RvY29sUnVu
dGltZUtleVBhdGggKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBU
SFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3Nd
KTsKKyAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoIGFsbG9jXSBp
bml0V2l0aFBheWxvYWQ6cGF5bG9hZF07Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sVHlwZXMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1v
cHRpb25hbC10eXBlLXNldHRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0
ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9S
V0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5o
PgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3Rv
cjsKKworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sUnVudGltZUtleVBhdGgKKworLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJp
bmcgKiwgaWQ+ICopcGF5bG9hZAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQor
ICAgICAgICByZXR1cm4gbmlsOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9Q
Uk9QRVJUWShwYXlsb2FkW0AidHlwZSJdLCBAInR5cGUiKTsKKyAgICBPcHRpb25hbDxUZXN0UHJv
dG9jb2xSdW50aW1lS2V5UGF0aFR5cGU+IHR5cGUgPSBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFBy
b3RvY29sUnVudGltZUtleVBhdGhUeXBlPihwYXlsb2FkW0AidHlwZSJdKTsKKyAgICBUSFJPV19F
WENFUFRJT05fRk9SX0JBRF9FTlVNX1ZBTFVFKHR5cGUsIEAidHlwZSIpOworICAgIHNlbGYudHlw
ZSA9IHR5cGUudmFsdWUoKTsKKworICAgIHNlbGYuc3RyaW5nID0gcGF5bG9hZFtAInN0cmluZyJd
OworCisgICAgc2VsZi5hcnJheSA9IHBheWxvYWRbQCJhcnJheSJdOworCisgICAgcmV0dXJuIHNl
bGY7Cit9CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9j
b2xKU09OT2JqZWN0ICopb2JqZWN0Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0
aEpTT05PYmplY3Q6W29iamVjdCB0b0pTT05PYmplY3RdLmdldCgpXSkpCisgICAgICAgIHJldHVy
biBuaWw7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
VHlwZTooVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlKXR5cGUKK3sKKyAgICBpZiAoIShz
ZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHNlbGYudHlw
ZSA9IHR5cGU7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClzZXRUeXBlOihUZXN0
UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGUpdHlwZQoreworICAgIFtzdXBlciBzZXRTdHJpbmc6
dG9Qcm90b2NvbFN0cmluZyh0eXBlKSBmb3JLZXk6QCJ0eXBlIl07Cit9CisKKy0gKFRlc3RQcm90
b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZSl0eXBlCit7CisgICAgcmV0dXJuIGZyb21Qcm90b2NvbFN0
cmluZzxUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGU+KFtzdXBlciBzdHJpbmdGb3JLZXk6
QCJ0eXBlIl0pLnZhbHVlKCk7Cit9CisKKy0gKHZvaWQpc2V0U3RyaW5nOihOU1N0cmluZyAqKXN0
cmluZworeworICAgIFtzdXBlciBzZXRTdHJpbmc6c3RyaW5nIGZvcktleTpAInN0cmluZyJdOwor
fQorCistIChOU1N0cmluZyAqKXN0cmluZworeworICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9y
S2V5OkAic3RyaW5nIl07Cit9CisKKy0gKHZvaWQpc2V0QXJyYXk6KE5TQXJyYXkvKjxOU1N0cmlu
Zz4qLyAqKWFycmF5Cit7CisgICAgW3N1cGVyIHNldEpTT05BcnJheTp0b0pTT05TdHJpbmdBcnJh
eShhcnJheSkgZm9yS2V5OkAiYXJyYXkiXTsKK30KKworLSAoTlNBcnJheS8qPE5TU3RyaW5nPiov
ICopYXJyYXkKK3sKKyAgICByZXR1cm4gdG9PYmpDU3RyaW5nQXJyYXkoW3N1cGVyIEpTT05BcnJh
eUZvcktleTpAImFycmF5Il0pOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3Nob3VsZC1zdHJpcC1jb21tZW50cy5qc29uLXJlc3Vs
dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC9zaG91bGQtc3RyaXAtY29tbWVudHMuanNvbi1yZXN1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAuLmViYTg4ZDExM2NhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3Nob3VsZC1z
dHJpcC1jb21tZW50cy5qc29uLXJlc3VsdApAQCAtMCwwICsxLDgzNSBAQAorIyMjIEJlZ2luIEZp
bGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcworLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHNob3VsZC1zdHJpcC1jb21tZW50cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21t
YW5kcy5qcworCisjIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVy
cy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlwLWNvbW1l
bnRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3By
YWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
KworI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwor
Y2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHZvaWQgc2V0
QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIp
IHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KKyAgICBCYWNr
ZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tl
bmREaXNwYXRjaGVyLmdldCgpOyB9Citwcml2YXRlOgorICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0
Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKK307CisKKworCisKK30gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCisjIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisj
IyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KKy8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
KworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwor
CisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5k
RGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5j
cHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaG91bGQtc3RyaXAtY29tbWVu
dHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNs
dWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQorI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0
Y2hlcnMuaCIKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVn
aW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHNob3VsZC1zdHJpcC1jb21tZW50cy5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVz
dFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFz
cyBGcm9udGVuZFJvdXRlcjsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZp
bGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9u
dGVuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNo
b3VsZC1zdHJpcC1jb21tZW50cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0RnJvbnRlbmRE
aXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRl
bmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJ
bnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBU
ZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bE9iamVjdHMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNob3VsZC1zdHJp
cC1jb21tZW50cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJv
dG9jb2xUeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBJ
bnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworCisKKworCisKKworCisK
K30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbE9iamVjdHMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hv
dWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9i
amVjdHMuaCIKKworI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK25hbWVzcGFjZSBQcm90b2Nv
bCB7CisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorCisjIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBzaG91bGQtc3RyaXAtY29tbWVudHMuanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8d3Rm
L1JldGFpblB0ci5oPgorCisKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3Bh
dGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVy
cy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNob3VsZC1zdHJpcC1jb21t
ZW50cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNp
bXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJz
LmgiCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisK
K25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHNob3VsZC1zdHJpcC1jb21tZW50cy5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJv
dG9jb2wuaD4KKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50
ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAorQGVuZAorCisKKyMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
bi5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2ltcG9ydCAiVGVzdFBy
b3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRl
cm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVu
dGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5z
cGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgorewor
ICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Cit9CisKKy0g
KGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29u
dHJvbGxlciopY29udHJvbGxlcgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYg
KCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAg
ICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZv
aWQpZGVhbGxvYworeworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworQGVuZAorCisKKyMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorCisjIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHNob3VsZC1zdHJpcC1jb21tZW50cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgi
CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8d3Rm
L0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisjIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxk
LXN0cmlwLWNvbW1lbnRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKKyNpbXBvcnQgPFdl
Ykluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KKworCisKKworCisKKworCisKKwor
CisKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5
T2JqZWN0cy5oPgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJU
ZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVl
cy5oPgorCisKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29s
LmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+
CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5
cGU+CitPcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJp
bmcmIHZhbHVlKTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHNob3VsZC1zdHJpcC1jb21tZW50cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgor
CisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJz
ZXIuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRl
Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworCisKKworCisjIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sVHlwZXMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaG91
bGQtc3RyaXAtY29tbWVudHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQ
cm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgor
I2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsK
KworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1k
ZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFy
YXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOGZmZjlhNGUwZTMKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlw
ZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24tcmVzdWx0CkBAIC0wLDAg
KzEsODU2IEBACisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2Vk
LXByaW1pdGl2ZS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZl
LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisj
cHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Igewor
CitjbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdm9pZCBz
ZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hl
cikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQorICAgIEJh
Y2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFj
a2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KK3ByaXZhdGU6CisgICAgUmVmUHRyPEJhY2tlbmREaXNw
YXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOworfTsKKworCisKKworfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKKyMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisK
KyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5
cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBT
dHJpbmcgRXJyb3JTdHJpbmc7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBF
bmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0
QmFja2VuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCisvLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVz
Lmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
CisjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgorI2VuZGlmIC8v
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCituYW1lc3BhY2UgSW5z
cGVjdG9yIHsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6
IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1k
ZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0
UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNz
IEZyb250ZW5kUm91dGVyOworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmls
ZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250
ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlw
ZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgor
CisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+CisjaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCituYW1l
c3BhY2UgUHJvdG9jb2wgeworCisKKworCisKKy8vIFR5cGVkZWZzLgorbmFtZXNwYWNlIFJ1bnRp
bWUgeworLyogVW5pcXVlIG9iamVjdCBpZGVudGlmaWVyLiAqLwordHlwZWRlZiBpbnQgUmVtb3Rl
T2JqZWN0SWQ7Cit9IC8vIFJ1bnRpbWUKKy8vIEVuZCBvZiB0eXBlZGVmcy4KKworCisKK30gLy8g
bmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bE9iamVjdHMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNs
YXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRl
c3RQcm90b2NvbE9iamVjdHMuaCIKKworI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK25hbWVz
cGFjZSBQcm90b2NvbCB7CisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNw
cAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQt
cHJpbWl0aXZlLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2Vu
ZERpc3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCisKKworbmFtZXNw
YWNlIEluc3BlY3RvciB7CisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNv
bmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNp
bmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisKK25hbWVzcGFj
ZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rv
ci9UZXN0UHJvdG9jb2wuaD4KKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQi
KSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAorQGVu
ZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBl
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9y
dCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJ
bnRlcm5hbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisj
aW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgorI2lt
cG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Cisj
aW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hl
cnMuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
cy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gVGVz
dFByb3RvY29sQ29uZmlndXJhdGlvbgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJv
bGxlciogX2NvbnRyb2xsZXI7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xs
ZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgoreworICAgIHNl
bGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOwor
ICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Cisg
ICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIFtzdXBlciBkZWFs
bG9jXTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJh
dGlvbi5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5t
bQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxp
YXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMu
aD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1h
bGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKKyNpbXBv
cnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KKworCisKKworCisKKwor
CisKKworCisKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRp
YmlsaXR5T2JqZWN0cy5oPgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVz
dFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgor
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+
CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCisKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbEludGVybmFsLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJh
dGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0IDxX
ZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+CisKK25hbWVzcGFjZSBJ
bnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+CitPcHRpb25hbDxP
YmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKKwor
CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xh
cmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xU
eXBlUGFyc2VyLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0
UHJpdmF0ZS5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW50ZXJmYWNlIFRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoUnVudGltZURvbWFpbikKKworKyAodm9pZClfcGFy
c2VSZW1vdGVPYmplY3RJZDooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBh
eWxvYWQ7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucyAoUnVudGltZURvbWFpbikKKworKyAodm9pZClfcGFyc2VSZW1vdGVPYmplY3RJZDooTlNO
dW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19F
WENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU051bWJlciBjbGFzc10pOworICAgICpv
dXRWYWx1ZSA9IChOU051bWJlciAqKXBheWxvYWQ7Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sVHlwZXMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBl
LWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5h
bC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQg
PFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisjaW1wb3J0IDx3
dGYvQXNzZXJ0aW9ucy5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFt
ZXNwYWNlIEluc3BlY3RvcjsKKworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBl
cy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uLXJlc3VsdCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90
eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbi1yZXN1bHQKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAuLmJiODRhYjhmOGIxCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUt
ZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uLXJlc3VsdApAQCAtMCwwICsxLDEwMzggQEAKKyMj
IyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisvLyBEZWJ1Z2dlcgorSW5z
cGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiRGVidWdnZXIiLCBudWxsKTsKK0luc3BlY3Rv
ckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJEZWJ1Z2dlci5SZWFzb24iLCB7RGllZDogIkRpZWQiLCBG
YWludGVkOiAiRmFpbnRlZCIsIEh1bmdyeTogIkh1bmdyeSJ9KTsKK0luc3BlY3RvckJhY2tlbmQu
YWN0aXZhdGVEb21haW4oIkRlYnVnZ2VyIiwgbnVsbCk7CisjIyMgRW5kIEZpbGU6IEluc3BlY3Rv
ckJhY2tlbmRDb21tYW5kcy5qcworCisjIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tl
bmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1k
ZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVS
TkFURV9ESVNQQVRDSEVSUykKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorCituYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKKworY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVi
bGljOgorICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRj
aGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0
Y2hlcik7IH0KKyAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25z
dCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Citwcml2YXRlOgorICAgIFJl
ZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKK307CisKKworCisK
K30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5k
RGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5o
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJh
eS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3R5cGVk
ZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisj
IyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTog
VGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
VGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2lu
Y2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorI2luY2x1
ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNlbmRpZiAvLyBFTkFCTEUo
SU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworbmFtZXNwYWNlIEluc3BlY3RvciB7
CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0QmFj
a2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0
Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRp
b24tYXJyYXktdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgor
I2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBGcm9udGVuZFJvdXRlcjsKKwor
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3Bh
dGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXkt
dHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgor
CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNw
YXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlw
ZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBl
cy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Ig
eworCisKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworCisKKy8vIEZvcndhcmQgZGVjbGFyYXRp
b25zLgorbmFtZXNwYWNlIERlYnVnZ2VyIHsKK2VudW0gY2xhc3MgUmVhc29uOworfSAvLyBEZWJ1
Z2dlcgorLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgorCisKKy8vIFR5cGVkZWZzLgor
bmFtZXNwYWNlIERlYnVnZ2VyIHsKK3R5cGVkZWYgaW50IEJyZWFrcG9pbnRJZDsKK30gLy8gRGVi
dWdnZXIKKworbmFtZXNwYWNlIFJ1bnRpbWUgewordHlwZWRlZiBpbnQgT2JqZWN0SWQ7Cit0eXBl
ZGVmIEpTT046OkFycmF5T2Y8aW50PiBMdWNreU51bWJlcnM7Cit0eXBlZGVmIEpTT046OkFycmF5
T2Y8U3RyaW5nPiBCYWJ5TmFtZXM7Cit0eXBlZGVmIEpTT046OkFycmF5T2Y8aW50PiBOZXdPYmpl
Y3RzOwordHlwZWRlZiBKU09OOjpBcnJheU9mPGludD4gT2xkT2JqZWN0czsKK3R5cGVkZWYgSlNP
Tjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uPiBTdG9wUmVh
c29uczsKK30gLy8gUnVudGltZQorLy8gRW5kIG9mIHR5cGVkZWZzLgorCituYW1lc3BhY2UgVGVz
dEhlbHBlcnMgeworCitTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpOworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFs
dWUpCit7CisgICAgcmV0dXJuIGdldEVudW1Db25zdGFudFZhbHVlKHN0YXRpY19jYXN0PGludD4o
ZW51bVZhbHVlKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCisKK25hbWVzcGFj
ZSBEZWJ1Z2dlciB7CisvKiAgKi8KK2VudW0gY2xhc3MgUmVhc29uIHsKKyAgICBEaWVkID0gMCwK
KyAgICBGYWludGVkID0gMSwKKyAgICBIdW5ncnkgPSAyLAorfTsgLy8gZW51bSBjbGFzcyBSZWFz
b24KK30gLy8gRGVidWdnZXIKKworCisKK25hbWVzcGFjZSBUZXN0SGVscGVycyB7CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFByb3RvY29sRW51bVR5cGU+CitPcHRpb25hbDxQcm90b2NvbEVudW1UeXBl
PiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJik7CisKKy8vIEVudW1zIGlu
IHRoZSAnRGVidWdnZXInIERvbWFpbgordGVtcGxhdGU8PgorT3B0aW9uYWw8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbj4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb24+KGNvbnN0IFN0cmluZyYpOworCit9IC8v
IG5hbWVzcGFjZSBUZXN0SGVscGVycworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKKworLy8gSGFzaCBkZWNsYXJhdGlvbnMgaW4gdGhl
ICdEZWJ1Z2dlcicgRG9tYWluCit0ZW1wbGF0ZTw+CitzdHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbj4geworICAgIHR5cGVkZWYgSW50SGFzaDxJ
bnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uPiBIYXNoOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV1RGCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorCisjIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorCisjaW5jbHVkZSA8d3RmL09wdGlvbmFs
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9y
IHsKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKKwor
c3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFsdWVzW10gPSB7CisgICAg
IkRpZWQiLAorICAgICJGYWludGVkIiwKKyAgICAiSHVuZ3J5IiwKK307CisKK1N0cmluZyBnZXRF
bnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgeworICAgIHJldHVybiBlbnVtX2NvbnN0YW50X3Zh
bHVlc1tjb2RlXTsKK30KKworLy8gRW51bXMgaW4gdGhlICdEZWJ1Z2dlcicgRG9tYWluCit0ZW1w
bGF0ZTw+CitPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uPiBw
YXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OlJl
YXNvbj4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKK3sKKyAgICBzdGF0aWMgY29uc3Qg
c2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7CisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbjo6RGllZCwKKyAgICAgICAgKHNpemVfdClJbnNwZWN0
b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uOjpGYWludGVkLAorICAgICAgICAoc2l6ZV90
KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb246Okh1bmdyeSwKKyAgICB9Owor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMzsgKytpKQorICAgICAgICBpZiAocHJvdG9jb2xT
dHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNbaV1dKQorICAgICAg
ICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uKWNvbnN0
YW50VmFsdWVzW2ldOworCisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKworCit9IC8vIG5h
bWVzcGFjZSBUZXN0SGVscGVycworCisKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0
cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5o
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJh
eS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVycy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworCisKK25hbWVzcGFjZSBJbnNw
ZWN0b3IgeworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRl
c3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSAiVGVzdFByb3RvY29s
SW50ZXJuYWwuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNp
bmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2Vu
ZERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0
aW9uLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9u
LWFycmF5LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+CisKK19fYXR0cmlidXRl
X18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25m
aWd1cmF0aW9uIDogTlNPYmplY3QKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24uaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJh
dGlvbi5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRp
b24tYXJyYXktdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKKworI2ltcG9ydCAi
VGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNw
YXRjaGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxl
QWdlbnQuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29u
dHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXJzLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxl
bWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KK3sKKyAgICBBdWdtZW50YWJsZUlu
c3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xs
ZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAg
cmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBj
b250cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAg
ICBbc3VwZXIgZGVhbGxvY107Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbENvbmZpZ3VyYXRpb24ubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50
RGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRl
Y2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0
ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVz
Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2wuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24t
YXJyYXktdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCisjaW1wb3J0IDxXZWJJbnNw
ZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+CisKKworCisKKwordHlwZWRlZiBOU19FTlVN
KE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGVidWdnZXJSZWFzb24pIHsKKyAgICBUZXN0UHJvdG9j
b2xEZWJ1Z2dlclJlYXNvbkRpZWQsCisgICAgVGVzdFByb3RvY29sRGVidWdnZXJSZWFzb25GYWlu
dGVkLAorICAgIFRlc3RQcm90b2NvbERlYnVnZ2VyUmVhc29uSHVuZ3J5LAorfTsKKworCisKKwor
CisKKworCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxp
dHlPYmplY3RzLmg+CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNp
bXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCisjaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPHd0Zi9K
U09OVmFsdWVzLmg+CisKKworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwu
aAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUu
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0
ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5
Q29udmVyc2lvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3RlbXBsYXRlPHR5cGVu
YW1lIE9iakNFbnVtVHlwZT4KK09wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3Ry
aW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOworCisKK2lubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0
cmluZyhUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbiB2YWx1ZSkKK3sKKyAgICBzd2l0Y2godmFs
dWUpIHsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERlYnVnZ2VyUmVhc29uRGllZDoKKyAgICAgICAg
cmV0dXJuICJEaWVkIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sRGVidWdnZXJSZWFzb25GYWlu
dGVkOgorICAgICAgICByZXR1cm4gIkZhaW50ZWQiX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xE
ZWJ1Z2dlclJlYXNvbkh1bmdyeToKKyAgICAgICAgcmV0dXJuICJIdW5ncnkiX3M7CisgICAgfQor
fQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sRGVidWdnZXJSZWFz
b24+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIGlmICh2
YWx1ZSA9PSAiRGllZCIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNv
bkRpZWQ7CisgICAgaWYgKHZhbHVlID09ICJGYWludGVkIikKKyAgICAgICAgcmV0dXJuIFRlc3RQ
cm90b2NvbERlYnVnZ2VyUmVhc29uRmFpbnRlZDsKKyAgICBpZiAodmFsdWUgPT0gIkh1bmdyeSIp
CisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbkh1bmdyeTsKKyAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworfQorCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisK
KyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90
b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisK
K0BpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChEZWJ1Z2dlckRvbWFpbikK
KworKyAodm9pZClfcGFyc2VCcmVha3BvaW50SWQ6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21Q
YXlsb2FkOihpZClwYXlsb2FkOworKyAodm9pZClfcGFyc2VSZWFzb246KE5TTnVtYmVyICoqKW91
dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworCitAZW5kCitAaW50ZXJmYWNlIFRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucyAoUnVudGltZURvbWFpbikKKworKyAodm9pZClfcGFyc2VP
YmplY3RJZDooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Cisr
ICh2b2lkKV9wYXJzZUx1Y2t5TnVtYmVyczooTlNBcnJheS8qPE5TTnVtYmVyPiovICoqKW91dFZh
bHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworKyAodm9pZClfcGFyc2VCYWJ5TmFtZXM6KE5T
QXJyYXkvKjxOU1N0cmluZz4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsK
KysgKHZvaWQpX3BhcnNlTmV3T2JqZWN0czooTlNBcnJheS8qPE5TTnVtYmVyPiovICoqKW91dFZh
bHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworKyAodm9pZClfcGFyc2VPbGRPYmplY3RzOihO
U0FycmF5Lyo8TlNOdW1iZXI+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7
CisrICh2b2lkKV9wYXJzZVN0b3BSZWFzb25zOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopb3V0
VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9u
IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoRGVidWdnZXJEb21haW4pCisKKysgKHZvaWQp
X3BhcnNlQnJlYWtwb2ludElkOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQp
cGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05T
TnVtYmVyIGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gKE5TTnVtYmVyICopcGF5bG9hZDsKK30K
KworKyAodm9pZClfcGFyc2VSZWFzb246KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2Fk
OihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2Fk
LCBbTlNTdHJpbmcgY2xhc3NdKTsKKyAgICBPcHRpb25hbDxUZXN0UHJvdG9jb2xEZWJ1Z2dlclJl
YXNvbj4gcmVzdWx0ID0gSW5zcGVjdG9yOjpmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29s
RGVidWdnZXJSZWFzb24+KHBheWxvYWQpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX0VO
VU1fVkFMVUUocmVzdWx0LCBAIlJlYXNvbiIpOworICAgICpvdXRWYWx1ZSA9IEAocmVzdWx0LnZh
bHVlKCkpOworfQorCitAZW5kCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zIChSdW50aW1lRG9tYWluKQorCisrICh2b2lkKV9wYXJzZU9iamVjdElkOihOU051bWJl
ciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TTnVtYmVyIGNsYXNzXSk7CisgICAgKm91dFZh
bHVlID0gKE5TTnVtYmVyICopcGF5bG9hZDsKK30KKworKyAodm9pZClfcGFyc2VMdWNreU51bWJl
cnM6KE5TQXJyYXkvKjxOU051bWJlcj4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5
bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TQXJy
YXkvKjxOU051bWJlcj4qLyBjbGFzc10pOworICAgICpvdXRWYWx1ZSA9IChOU0FycmF5Lyo8TlNO
dW1iZXI+Ki8gKilwYXlsb2FkOworfQorCisrICh2b2lkKV9wYXJzZUJhYnlOYW1lczooTlNBcnJh
eS8qPE5TU3RyaW5nPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7Cisg
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNBcnJheS8qPE5TU3Ry
aW5nPiovIGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAq
KXBheWxvYWQ7Cit9CisKKysgKHZvaWQpX3BhcnNlTmV3T2JqZWN0czooTlNBcnJheS8qPE5TTnVt
YmVyPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1df
RVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNBcnJheS8qPE5TTnVtYmVyPiovIGNs
YXNzXSk7CisgICAgKm91dFZhbHVlID0gKE5TQXJyYXkvKjxOU051bWJlcj4qLyAqKXBheWxvYWQ7
Cit9CisKKysgKHZvaWQpX3BhcnNlT2xkT2JqZWN0czooTlNBcnJheS8qPE5TTnVtYmVyPiovICoq
KW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNBcnJheS8qPE5TTnVtYmVyPiovIGNsYXNzXSk7Cisg
ICAgKm91dFZhbHVlID0gKE5TQXJyYXkvKjxOU051bWJlcj4qLyAqKXBheWxvYWQ7Cit9CisKKysg
KHZvaWQpX3BhcnNlU3RvcFJlYXNvbnM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKilvdXRWYWx1
ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFE
X1RZUEUocGF5bG9hZCwgW05TQXJyYXkvKjxOU1N0cmluZz4qLyBjbGFzc10pOworICAgICpvdXRW
YWx1ZSA9IChOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilwYXlsb2FkOworfQorCitAZW5kCisKKwor
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwu
aCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDxX
ZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorI2ltcG9ydCA8d3Rm
L0Fzc2VydGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVz
cGFjZSBJbnNwZWN0b3I7CisKKworCisKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5
cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbi1yZXN1bHQg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
dHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbi1yZXN1bHQKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAuLjA5NzAwMGQxODZiCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUt
ZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24tcmVzdWx0CkBAIC0wLDAgKzEsMTA1MSBAQAorIyMj
IEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcworLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworLy8gUnVudGltZQorSW5zcGVj
dG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiUnVudGltZSIsIG51bGwpOworSW5zcGVjdG9yQmFj
a2VuZC5yZWdpc3RlckVudW0oIlJ1bnRpbWUuRmFybUFuaW1hbHMiLCB7UGlnczogIlBpZ3MiLCBD
b3dzOiAiQ293cyIsIENhdHM6ICJDYXRzIiwgSGVuczogIkhlbnMifSk7CitJbnNwZWN0b3JCYWNr
ZW5kLnJlZ2lzdGVyRW51bSgiUnVudGltZS5Ud29MZWdnZWRBbmltYWxzIiwge0R1Y2tzOiAiRHVj
a3MiLCBIZW5zOiAiSGVucyIsIENyb3dzOiAiQ3Jvd3MiLCBGbGFtaW5nb3M6ICJGbGFtaW5nb3Mi
fSk7CitJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJSdW50aW1lIiwgbnVsbCk7Cisj
IyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcworCisjIyMgQmVnaW4gRmls
ZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2lmIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCisjaW5jbHVkZSAiVGVzdFBy
b3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5k
Um91dGVyLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihS
ZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRj
aGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQorICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNr
ZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7
IH0KK3ByaXZhdGU6CisgICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNw
YXRjaGVyOworfTsKKworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAv
LyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyMjIyBFbmQgRmlsZTog
VGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0
QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0
eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29s
T2JqZWN0cy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJ
bnNwZWN0b3IgeworCit0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKworCisKK30gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgK
KworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYv
SlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQorI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIK
KyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMj
IEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTog
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJv
dG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEZy
b250ZW5kUm91dGVyOworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTog
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5k
RGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1k
ZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEZyb250ZW5k
RGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250
ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTog
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xPYmplY3RzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xh
cmF0aW9uLWVudW0tdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yUHJvdG9jb2xUeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVz
cGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworCisKKy8vIEZv
cndhcmQgZGVjbGFyYXRpb25zLgorbmFtZXNwYWNlIFJ1bnRpbWUgeworZW51bSBjbGFzcyBGYXJt
QW5pbWFsczsKK2VudW0gY2xhc3MgVHdvTGVnZ2VkQW5pbWFsczsKK30gLy8gUnVudGltZQorLy8g
RW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgorCisKKworCituYW1lc3BhY2UgVGVzdEhlbHBl
cnMgeworCitTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpOworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFsdWUpCit7
CisgICAgcmV0dXJuIGdldEVudW1Db25zdGFudFZhbHVlKHN0YXRpY19jYXN0PGludD4oZW51bVZh
bHVlKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCisKK25hbWVzcGFjZSBSdW50
aW1lIHsKKy8qICAqLworZW51bSBjbGFzcyBGYXJtQW5pbWFscyB7CisgICAgUGlncyA9IDAsCisg
ICAgQ293cyA9IDEsCisgICAgQ2F0cyA9IDIsCisgICAgSGVucyA9IDMsCit9OyAvLyBlbnVtIGNs
YXNzIEZhcm1BbmltYWxzCisvKiAgKi8KK2VudW0gY2xhc3MgVHdvTGVnZ2VkQW5pbWFscyB7Cisg
ICAgRHVja3MgPSA0LAorICAgIEhlbnMgPSAzLAorICAgIENyb3dzID0gNSwKKyAgICBGbGFtaW5n
b3MgPSA2LAorfTsgLy8gZW51bSBjbGFzcyBUd29MZWdnZWRBbmltYWxzCit9IC8vIFJ1bnRpbWUK
KworCisKK25hbWVzcGFjZSBUZXN0SGVscGVycyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFByb3Rv
Y29sRW51bVR5cGU+CitPcHRpb25hbDxQcm90b2NvbEVudW1UeXBlPiBwYXJzZUVudW1WYWx1ZUZy
b21TdHJpbmcoY29uc3QgU3RyaW5nJik7CisKKy8vIEVudW1zIGluIHRoZSAnUnVudGltZScgRG9t
YWluCit0ZW1wbGF0ZTw+CitPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpG
YXJtQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlJ1bnRpbWU6OkZhcm1BbmltYWxzPihjb25zdCBTdHJpbmcmKTsKK3RlbXBsYXRlPD4KK09wdGlv
bmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM+IHBhcnNl
RW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUd29MZWdn
ZWRBbmltYWxzPihjb25zdCBTdHJpbmcmKTsKKworfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMK
KworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisK
K25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhh
c2g7CisKKy8vIEhhc2ggZGVjbGFyYXRpb25zIGluIHRoZSAnUnVudGltZScgRG9tYWluCit0ZW1w
bGF0ZTw+CitzdHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6
RmFybUFuaW1hbHM+IHsKKyAgICB0eXBlZGVmIEludEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6
UnVudGltZTo6RmFybUFuaW1hbHM+IEhhc2g7Cit9OwordGVtcGxhdGU8Pgorc3RydWN0IERlZmF1
bHRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM+IHsK
KyAgICB0eXBlZGVmIEludEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHdvTGVn
Z2VkQW5pbWFscz4gSGFzaDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9i
amVjdHMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJh
dGlvbi1lbnVtLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0
cy5oIgorCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFByb3RvY29sIHsK
KworbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKKworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVu
dW1fY29uc3RhbnRfdmFsdWVzW10gPSB7CisgICAgIlBpZ3MiLAorICAgICJDb3dzIiwKKyAgICAi
Q2F0cyIsCisgICAgIkhlbnMiLAorICAgICJEdWNrcyIsCisgICAgIkNyb3dzIiwKKyAgICAiRmxh
bWluZ29zIiwKK307CisKK1N0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgewor
ICAgIHJldHVybiBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb2RlXTsKK30KKworLy8gRW51bXMgaW4g
dGhlICdSdW50aW1lJyBEb21haW4KK3RlbXBsYXRlPD4KK09wdGlvbmFsPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5z
cGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM+KGNvbnN0IFN0cmluZyYgcHJv
dG9jb2xTdHJpbmcpCit7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1td
ID0geworICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1B
bmltYWxzOjpQaWdzLAorICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRp
bWU6OkZhcm1BbmltYWxzOjpDb3dzLAorICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9j
b2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzOjpDYXRzLAorICAgICAgICAoc2l6ZV90KUluc3BlY3Rv
cjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzOjpIZW5zLAorICAgIH07CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCA0OyArK2kpCisgICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9
PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCisgICAgICAgICAgICBy
ZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzKWNvbnN0YW50
VmFsdWVzW2ldOworCisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKwordGVtcGxhdGU8Pgor
T3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFscz4g
cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3
b0xlZ2dlZEFuaW1hbHM+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCit7CisgICAgc3Rh
dGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0geworICAgICAgICAoc2l6ZV90KUlu
c3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM6OkR1Y2tzLAorICAg
ICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1h
bHM6OkhlbnMsCisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6
VHdvTGVnZ2VkQW5pbWFsczo6Q3Jvd3MsCisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90
b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFsczo6RmxhbWluZ29zLAorICAgIH07CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCA0OyArK2kpCisgICAgICAgIGlmIChwcm90b2NvbFN0cmlu
ZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCisgICAgICAgICAg
ICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHMp
Y29uc3RhbnRWYWx1ZXNbaV07CisKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCisKK30g
Ly8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAor
Cit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xP
YmplY3RzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNo
ZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9u
LWVudW0tdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlz
cGF0Y2hlcnMuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKKworCituYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSAiVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIK
KyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwor
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFj
a2VuZERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1
cmF0aW9uLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0
aW9uLWVudW0tdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KKworX19hdHRyaWJ1
dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbENv
bmZpZ3VyYXRpb24gOiBOU09iamVjdAorQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1
cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJh
dGlvbi1lbnVtLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCisKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlz
cGF0Y2hlcnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJs
ZUFnZW50Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNv
bnRyb2xsZXIuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVycy5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXJzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBs
ZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCit7CisgICAgQXVnbWVudGFibGVJ
bnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9s
bGVyCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAg
IHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250cm9sbGVyID0g
Y29udHJvbGxlcjsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7Cisg
ICAgW3N1cGVyIGRlYWxsb2NdOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xDb25maWd1cmF0aW9uLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVu
dERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1k
ZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0
ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVz
Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2wuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24t
ZW51bS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKKyNpbXBvcnQgPFdlYkluc3Bl
Y3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KKworCisKKworCit0eXBlZGVmIE5TX0VOVU0o
TlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHMpIHsKKyAgICBUZXN0UHJv
dG9jb2xSdW50aW1lRmFybUFuaW1hbHNQaWdzLAorICAgIFRlc3RQcm90b2NvbFJ1bnRpbWVGYXJt
QW5pbWFsc0Nvd3MsCisgICAgVGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzQ2F0cywKKyAg
ICBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHNIZW5zLAorfTsKKwordHlwZWRlZiBOU19F
TlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHMpIHsKKyAg
ICBUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFsc0R1Y2tzLAorICAgIFRlc3RQcm90
b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzSGVucywKKyAgICBUZXN0UHJvdG9jb2xSdW50aW1l
VHdvTGVnZ2VkQW5pbWFsc0Nyb3dzLAorICAgIFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRB
bmltYWxzRmxhbWluZ29zLAorfTsKKworCisKKworCisKKworCisjaW1wb3J0IDxXZWJJbnNwZWN0
b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+CisKKyMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFs
LmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVu
dW0tdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
KyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVj
dFByaXZhdGUuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9y
Q29udHJvbGxlci5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKworCisKKworIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0IDxX
ZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+CisKK25hbWVzcGFjZSBJ
bnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+CitPcHRpb25hbDxP
YmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKKwor
CitpbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sUnVudGltZUZhcm1B
bmltYWxzIHZhbHVlKQoreworICAgIHN3aXRjaCh2YWx1ZSkgeworICAgIGNhc2UgVGVzdFByb3Rv
Y29sUnVudGltZUZhcm1BbmltYWxzUGlnczoKKyAgICAgICAgcmV0dXJuICJQaWdzIl9zOworICAg
IGNhc2UgVGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzQ293czoKKyAgICAgICAgcmV0dXJu
ICJDb3dzIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzQ2F0czoK
KyAgICAgICAgcmV0dXJuICJDYXRzIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sUnVudGltZUZh
cm1BbmltYWxzSGVuczoKKyAgICAgICAgcmV0dXJuICJIZW5zIl9zOworICAgIH0KK30KKwordGVt
cGxhdGU8PgoraW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFscz4g
ZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVl
ID09ICJQaWdzIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFs
c1BpZ3M7CisgICAgaWYgKHZhbHVlID09ICJDb3dzIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90
b2NvbFJ1bnRpbWVGYXJtQW5pbWFsc0Nvd3M7CisgICAgaWYgKHZhbHVlID09ICJDYXRzIikKKyAg
ICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFsc0NhdHM7CisgICAgaWYg
KHZhbHVlID09ICJIZW5zIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFJ1bnRpbWVGYXJt
QW5pbWFsc0hlbnM7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKworaW5saW5lIFN0cmlu
ZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzIHZh
bHVlKQoreworICAgIHN3aXRjaCh2YWx1ZSkgeworICAgIGNhc2UgVGVzdFByb3RvY29sUnVudGlt
ZVR3b0xlZ2dlZEFuaW1hbHNEdWNrczoKKyAgICAgICAgcmV0dXJuICJEdWNrcyJfczsKKyAgICBj
YXNlIFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzSGVuczoKKyAgICAgICAgcmV0
dXJuICJIZW5zIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1h
bHNDcm93czoKKyAgICAgICAgcmV0dXJuICJDcm93cyJfczsKKyAgICBjYXNlIFRlc3RQcm90b2Nv
bFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzRmxhbWluZ29zOgorICAgICAgICByZXR1cm4gIkZsYW1p
bmdvcyJfczsKKyAgICB9Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBPcHRpb25hbDxUZXN0UHJv
dG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFscz4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0
cmluZyYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09ICJEdWNrcyIpCisgICAgICAgIHJldHVy
biBUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFsc0R1Y2tzOworICAgIGlmICh2YWx1
ZSA9PSAiSGVucyIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2Vk
QW5pbWFsc0hlbnM7CisgICAgaWYgKHZhbHVlID09ICJDcm93cyIpCisgICAgICAgIHJldHVybiBU
ZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFsc0Nyb3dzOworICAgIGlmICh2YWx1ZSA9
PSAiRmxhbWluZ29zIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdn
ZWRBbmltYWxzRmxhbWluZ29zOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK30gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMu
bW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVu
dW0tdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
KyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorCisjaW1wb3J0ICJUZXN0
UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKKyNpbXBvcnQg
PFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisKK3VzaW5nIG5h
bWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zIChSdW50aW1lRG9tYWluKQorCisrICh2b2lkKV9wYXJzZUZhcm1BbmltYWxzOihOU051bWJl
ciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNlVHdv
TGVnZ2VkQW5pbWFsczooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxv
YWQ7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cyAoUnVudGltZURvbWFpbikKKworKyAodm9pZClfcGFyc2VGYXJtQW5pbWFsczooTlNOdW1iZXIg
Kiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJ
T05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBjbGFzc10pOworICAgIE9wdGlvbmFs
PFRlc3RQcm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFscz4gcmVzdWx0ID0gSW5zcGVjdG9yOjpmcm9t
UHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzPihwYXlsb2FkKTsK
KyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9FTlVNX1ZBTFVFKHJlc3VsdCwgQCJGYXJtQW5p
bWFscyIpOworICAgICpvdXRWYWx1ZSA9IEAocmVzdWx0LnZhbHVlKCkpOworfQorCisrICh2b2lk
KV9wYXJzZVR3b0xlZ2dlZEFuaW1hbHM6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2Fk
OihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2Fk
LCBbTlNTdHJpbmcgY2xhc3NdKTsKKyAgICBPcHRpb25hbDxUZXN0UHJvdG9jb2xSdW50aW1lVHdv
TGVnZ2VkQW5pbWFscz4gcmVzdWx0ID0gSW5zcGVjdG9yOjpmcm9tUHJvdG9jb2xTdHJpbmc8VGVz
dFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHM+KHBheWxvYWQpOworICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfQkFEX0VOVU1fVkFMVUUocmVzdWx0LCBAIlR3b0xlZ2dlZEFuaW1hbHMiKTsK
KyAgICAqb3V0VmFsdWUgPSBAKHJlc3VsdC52YWx1ZSgpKTsKK30KKworQGVuZAorCisKKyMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisKKyMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xUeXBlcy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKwor
I2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDxXZWJJbnNw
ZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorI2ltcG9ydCA8d3RmL0Fzc2Vy
dGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJ
bnNwZWN0b3I7CisKKworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24tcmVzdWx0IGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVj
bGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbi1yZXN1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAuLmM5NWI5ZDhjMWY1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFy
YXRpb24tb2JqZWN0LXR5cGUuanNvbi1yZXN1bHQKQEAgLTAsMCArMSwyNDIwIEBACisjIyMgQmVn
aW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKy8vIERhdGFiYXNlCitJbnNwZWN0
b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJEYXRhYmFzZSIsIG51bGwpOworSW5zcGVjdG9yQmFj
a2VuZC5yZWdpc3RlckVudW0oIkRhdGFiYXNlLk1vdXNlQnV0dG9uIiwge05vbmU6ICJOb25lIiwg
TGVmdDogIkxlZnQiLCBNaWRkbGU6ICJNaWRkbGUiLCBSaWdodDogIlJpZ2h0In0pOworSW5zcGVj
dG9yQmFja2VuZC5yZWdpc3RlckVudW0oIkRhdGFiYXNlLk9wdGlvbmFsUGFyYW1ldGVyQnVuZGxl
RGlyZWN0aW9uYWxpdHkiLCB7TFRSOiAiTFRSIiwgUlRMOiAiUlRMIn0pOworSW5zcGVjdG9yQmFj
a2VuZC5yZWdpc3RlckVudW0oIkRhdGFiYXNlLlBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5
Iiwge0xUUjogIkxUUiIsIFJUTDogIlJUTCJ9KTsKK0luc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVE
b21haW4oIkRhdGFiYXNlIiwgbnVsbCk7CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRD
b21tYW5kcy5qcworCisjIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlv
bi1vYmplY3QtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKworbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CisKK2NsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAg
ICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBk
aXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9
CisgICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1
cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQorcHJpdmF0ZToKKyAgICBSZWZQdHI8QmFj
a2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Cit9OworCisKKworCit9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQorIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUu
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJp
bmcgRXJyb3JTdHJpbmc7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQg
RmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFj
a2VuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5
cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEJh
Y2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
RnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUg
PHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwor
I2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorI2luY2x1ZGUgIlRl
c3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKwor
Cit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERp
c3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMu
aAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2Jq
ZWN0LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNs
dWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgor
CituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgRnJvbnRlbmRSb3V0ZXI7CisKK30gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVy
cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBl
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCisKKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK30gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNo
ZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5q
c29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5o
PgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Igewor
CisKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworCisKKy8vIEZvcndhcmQgZGVjbGFyYXRpb25z
LgorbmFtZXNwYWNlIERhdGFiYXNlIHsKK2NsYXNzIEVycm9yOworY2xhc3MgT3B0aW9uYWxQYXJh
bWV0ZXJCdW5kbGU7CitjbGFzcyBQYXJhbWV0ZXJCdW5kbGU7CitjbGFzcyBPYmplY3RXaXRoUHJv
cGVydHlOYW1lQ29uZmxpY3RzOworY2xhc3MgRHVtbXlPYmplY3Q7CitlbnVtIGNsYXNzIE1vdXNl
QnV0dG9uOworfSAvLyBEYXRhYmFzZQorCituYW1lc3BhY2UgVGVzdCB7CitjbGFzcyBQYXJhbWV0
ZXJCdW5kbGU7Cit9IC8vIFRlc3QKKy8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KKwor
CisvLyBUeXBlZGVmcy4KK25hbWVzcGFjZSBEYXRhYmFzZSB7Cit0eXBlZGVmIEpTT046OkFycmF5
T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBFcnJvckxpc3Q7Cit9IC8v
IERhdGFiYXNlCisvLyBFbmQgb2YgdHlwZWRlZnMuCisKK25hbWVzcGFjZSBUZXN0SGVscGVycyB7
CisKK1N0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSk7CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IFN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkKK3sKKyAg
ICByZXR1cm4gZ2V0RW51bUNvbnN0YW50VmFsdWUoc3RhdGljX2Nhc3Q8aW50PihlbnVtVmFsdWUp
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKKworbmFtZXNwYWNlIERhdGFiYXNl
IHsKKy8qIERhdGFiYXNlIGVycm9yLiAqLworY2xhc3MgRXJyb3IgOiBwdWJsaWMgSlNPTjo6T2Jq
ZWN0QmFzZSB7CitwdWJsaWM6CisgICAgZW51bSB7CisgICAgICAgIE5vRmllbGRzU2V0ID0gMCwK
KyAgICAgICAgTWVzc2FnZVNldCA9IDEgPDwgMCwKKyAgICAgICAgQ29kZVNldCA9IDEgPDwgMSwK
KyAgICAgICAgQWxsRmllbGRzU2V0ID0gKE1lc3NhZ2VTZXQgfCBDb2RlU2V0KQorICAgIH07CisK
KyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CisgICAgY2xhc3MgQnVpbGRlciB7CisgICAgcHJpdmF0
ZToKKyAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7CisKKyAgICAgICAgdGVt
cGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUg
fCBTVEVQPio+KHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcihSZWY8LypFcnJv
ciovSlNPTjo6T2JqZWN0PiYmIG9iamVjdCkKKyAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92
ZShvYmplY3QpKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9
PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKKyAgICAg
ICAgfQorICAgICAgICBmcmllbmQgY2xhc3MgRXJyb3I7CisgICAgcHVibGljOgorCisgICAgICAg
IEJ1aWxkZXI8U1RBVEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIHZh
bHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTWVz
c2FnZVNldCksIHByb3BlcnR5X21lc3NhZ2VfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldFN0cmluZygibWVzc2FnZSJfcywgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxNZXNzYWdlU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxT
VEFURSB8IENvZGVTZXQ+JiBzZXRDb2RlKGludCB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENvZGVTZXQpLCBwcm9wZXJ0eV9jb2RlX2FscmVh
ZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2VyKCJjb2RlIl9zLCB2YWx1
ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvZGVTZXQ+KCk7CisgICAgICAgIH0K
KworICAgICAgICBSZWY8RXJyb3I+IHJlbGVhc2UoKQorICAgICAgICB7CisgICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkp
OworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEVycm9yKSA9PSBzaXplb2YoSlNP
Tjo6T2JqZWN0KSwgY2Fubm90X2Nhc3QpOworCisgICAgICAgICAgICBSZWY8SlNPTjo6T2JqZWN0
PiBqc29uUmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKKyAgICAgICAgICAgIGF1
dG8gcmVzdWx0ID0gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8RXJyb3I+Kj4oJmpzb25S
ZXN1bHQpKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICB9Owor
CisgICAgLyoKKyAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CisgICAgICogUmVmPEVycm9y
PiByZXN1bHQgPSBFcnJvcjo6Y3JlYXRlKCkKKyAgICAgKiAgICAgLnNldE1lc3NhZ2UoLi4uKQor
ICAgICAqICAgICAuc2V0Q29kZSguLi4pCisgICAgICogICAgIC5yZWxlYXNlKCk7CisgICAgICov
CisgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCisgICAgeworICAgICAg
ICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7Cisg
ICAgfQorfTsKKworLyogRW51bWVyYXRlcyBkaWZmZXJlbnQgbW91c2UgYnV0dG9ucyB0aGF0IGNh
biBiZSB1c2VkLiAqLworZW51bSBjbGFzcyBNb3VzZUJ1dHRvbiB7CisgICAgTm9uZSA9IDAsCisg
ICAgTGVmdCA9IDEsCisgICAgTWlkZGxlID0gMiwKKyAgICBSaWdodCA9IDMsCit9OyAvLyBlbnVt
IGNsYXNzIE1vdXNlQnV0dG9uCitjbGFzcyBPcHRpb25hbFBhcmFtZXRlckJ1bmRsZSA6IHB1Ymxp
YyBKU09OOjpPYmplY3RCYXNlIHsKK3B1YmxpYzoKKyAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0
eSBuYW1lICdkaXJlY3Rpb25hbGl0eScgd2hpbGUgZ2VuZXJhdGluZyBPcHRpb25hbFBhcmFtZXRl
ckJ1bmRsZS4KKyAgICBlbnVtIGNsYXNzIERpcmVjdGlvbmFsaXR5IHsKKyAgICAgICAgTFRSID0g
NCwKKyAgICAgICAgUlRMID0gNSwKKyAgICB9OyAvLyBlbnVtIGNsYXNzIERpcmVjdGlvbmFsaXR5
CisgICAgZW51bSB7CisgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKKyAgICAgICAgQWxsRmllbGRz
U2V0ID0gMAorICAgIH07CisKKyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CisgICAgY2xhc3MgQnVp
bGRlciB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbV9yZXN1
bHQ7CisKKyAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYg
Y2FzdFN0YXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9j
YXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAg
QnVpbGRlcihSZWY8LypPcHRpb25hbFBhcmFtZXRlckJ1bmRsZSovSlNPTjo6T2JqZWN0PiYmIG9i
amVjdCkKKyAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQorICAgICAgICB7
CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRl
cl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKKyAgICAgICAgfQorICAgICAgICBmcmllbmQg
Y2xhc3MgT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU7CisgICAgcHVibGljOgorCisgICAgICAgIFJl
ZjxPcHRpb25hbFBhcmFtZXRlckJ1bmRsZT4gcmVsZWFzZSgpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9y
ZWFkeSk7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoT3B0aW9uYWxQYXJhbWV0
ZXJCdW5kbGUpID09IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7CisKKyAgICAg
ICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25SZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9u
TnVsbCgpOworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBXVEZNb3ZlKCpyZWludGVycHJldF9j
YXN0PFJlZjxPcHRpb25hbFBhcmFtZXRlckJ1bmRsZT4qPigmanNvblJlc3VsdCkpOworICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvKgorICAgICAq
IFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKKyAgICAgKiBSZWY8T3B0aW9uYWxQYXJhbWV0ZXJCdW5k
bGU+IHJlc3VsdCA9IE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpjcmVhdGUoKQorICAgICAqICAg
ICAucmVsZWFzZSgpOworICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBj
cmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046
Ok9iamVjdDo6Y3JlYXRlKCkpOworICAgIH0KKworICAgIHZvaWQgc2V0Q29sdW1uTmFtZXMoUmVm
UHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gdmFsdWUpCisgICAgeworICAgICAgICBKU09OOjpP
YmplY3RCYXNlOjpzZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIFdURk1vdmUodmFsdWUpKTsKKyAg
ICB9CisKKyAgICB2b2lkIHNldEJ1dHRvbnMoUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPj4gdmFsdWUpCisgICAgeworICAgICAg
ICBKU09OOjpPYmplY3RCYXNlOjpzZXRBcnJheSgiYnV0dG9ucyJfcywgV1RGTW92ZSh2YWx1ZSkp
OworICAgIH0KKworICAgIHZvaWQgc2V0RGlyZWN0aW9uYWxpdHkoRGlyZWN0aW9uYWxpdHkgdmFs
dWUpCisgICAgeworICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRTdHJpbmcoImRpcmVjdGlv
bmFsaXR5Il9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0
YW50VmFsdWUodmFsdWUpKTsKKyAgICB9CisKKyAgICB2b2lkIHNldE5vdGVzKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCisgICAgeworICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRTdHJpbmcoIm5v
dGVzIl9zLCB2YWx1ZSk7CisgICAgfQorCisgICAgdm9pZCBzZXRUaW1lc3RhbXAoZG91YmxlIHZh
bHVlKQorICAgIHsKKyAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0RG91YmxlKCJ0aW1lc3Rh
bXAiX3MsIHZhbHVlKTsKKyAgICB9CisKKyAgICB2b2lkIHNldFZhbHVlcyhSZWZQdHI8SlNPTjo6
T2JqZWN0PiB2YWx1ZSkKKyAgICB7CisgICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldE9iamVj
dCgidmFsdWVzIl9zLCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgfQorCisgICAgdm9pZCBzZXRQYXls
b2FkKFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWUpCisgICAgeworICAgICAgICBKU09OOjpPYmpl
Y3RCYXNlOjpzZXRWYWx1ZSgicGF5bG9hZCJfcywgV1RGTW92ZSh2YWx1ZSkpOworICAgIH0KKwor
ICAgIHZvaWQgc2V0RXJyb3IoUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpF
cnJvcj4gdmFsdWUpCisgICAgeworICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRPYmplY3Qo
ImVycm9yIl9zLCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgfQorCisgICAgdm9pZCBzZXRFcnJvckxp
c3QoUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvckxpc3Q+IHZhbHVl
KQorICAgIHsKKyAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0QXJyYXkoImVycm9yTGlzdCJf
cywgV1RGTW92ZSh2YWx1ZSkpOworICAgIH0KK307CisKK2NsYXNzIFBhcmFtZXRlckJ1bmRsZSA6
IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKK3B1YmxpYzoKKyAgICAvLyBOYW1lZCBhZnRlciBw
cm9wZXJ0eSBuYW1lICdkaXJlY3Rpb25hbGl0eScgd2hpbGUgZ2VuZXJhdGluZyBQYXJhbWV0ZXJC
dW5kbGUuCisgICAgZW51bSBjbGFzcyBEaXJlY3Rpb25hbGl0eSB7CisgICAgICAgIExUUiA9IDQs
CisgICAgICAgIFJUTCA9IDUsCisgICAgfTsgLy8gZW51bSBjbGFzcyBEaXJlY3Rpb25hbGl0eQor
ICAgIGVudW0geworICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCisgICAgICAgIENvbHVtbk5hbWVz
U2V0ID0gMSA8PCAwLAorICAgICAgICBCdXR0b25zU2V0ID0gMSA8PCAxLAorICAgICAgICBEaXJl
Y3Rpb25hbGl0eVNldCA9IDEgPDwgMiwKKyAgICAgICAgTm90ZXNTZXQgPSAxIDw8IDMsCisgICAg
ICAgIFRpbWVzdGFtcFNldCA9IDEgPDwgNCwKKyAgICAgICAgVmFsdWVzU2V0ID0gMSA8PCA1LAor
ICAgICAgICBQYXlsb2FkU2V0ID0gMSA8PCA2LAorICAgICAgICBFcnJvclNldCA9IDEgPDwgNywK
KyAgICAgICAgRXJyb3JMaXN0U2V0ID0gMSA8PCA4LAorICAgICAgICBBbGxGaWVsZHNTZXQgPSAo
Q29sdW1uTmFtZXNTZXQgfCBCdXR0b25zU2V0IHwgRGlyZWN0aW9uYWxpdHlTZXQgfCBOb3Rlc1Nl
dCB8IFRpbWVzdGFtcFNldCB8IFZhbHVlc1NldCB8IFBheWxvYWRTZXQgfCBFcnJvclNldCB8IEVy
cm9yTGlzdFNldCkKKyAgICB9OworCisgICAgdGVtcGxhdGU8aW50IFNUQVRFPgorICAgIGNsYXNz
IEJ1aWxkZXIgeworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1f
cmVzdWx0OworCisgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RF
UD4mIGNhc3RTdGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnBy
ZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKKyAgICAgICAgfQorCisgICAg
ICAgIEJ1aWxkZXIoUmVmPC8qUGFyYW1ldGVyQnVuZGxlKi9KU09OOjpPYmplY3Q+JiYgb2JqZWN0
KQorICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2Ny
ZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAgICAgICB9CisgICAgICAgIGZyaWVuZCBjbGFz
cyBQYXJhbWV0ZXJCdW5kbGU7CisgICAgcHVibGljOgorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBDb2x1bW5OYW1lc1NldD4mIHNldENvbHVtbk5hbWVzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0
cmluZz4+IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgQ29sdW1uTmFtZXNTZXQpLCBwcm9wZXJ0eV9jb2x1bW5OYW1lc19hbHJlYWR5X3NldCk7
CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB2YWx1ZSk7
CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvbHVtbk5hbWVzU2V0PigpOworICAgICAg
ICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IEJ1dHRvbnNTZXQ+JiBzZXRCdXR0b25zKFJl
ZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1
dHRvbj4+IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgQnV0dG9uc1NldCksIHByb3BlcnR5X2J1dHRvbnNfYWxyZWFkeV9zZXQpOworICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJidXR0b25zIl9zLCB2YWx1ZSk7CisgICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPEJ1dHRvbnNTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgRGlyZWN0aW9uYWxpdHlTZXQ+JiBzZXREaXJlY3Rpb25hbGl0eShEaXJl
Y3Rpb25hbGl0eSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
IShTVEFURSAmIERpcmVjdGlvbmFsaXR5U2V0KSwgcHJvcGVydHlfZGlyZWN0aW9uYWxpdHlfYWxy
ZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygiZGlyZWN0aW9uYWxp
dHkiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRW
YWx1ZSh2YWx1ZSkpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxEaXJlY3Rpb25hbGl0
eVNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBOb3Rlc1NldD4m
IHNldE5vdGVzKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBOb3Rlc1NldCksIHByb3BlcnR5X25vdGVzX2FscmVhZHlf
c2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCB2YWx1ZSk7
CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE5vdGVzU2V0PigpOworICAgICAgICB9CisK
KyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFRpbWVzdGFtcFNldD4mIHNldFRpbWVzdGFtcChkb3Vi
bGUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUg
JiBUaW1lc3RhbXBTZXQpLCBwcm9wZXJ0eV90aW1lc3RhbXBfYWxyZWFkeV9zZXQpOworICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCB2YWx1ZSk7CisgICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPFRpbWVzdGFtcFNldD4oKTsKKyAgICAgICAgfQorCisgICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBWYWx1ZXNTZXQ+JiBzZXRWYWx1ZXMoUmVmUHRyPEpTT046Ok9i
amVjdD4gdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBWYWx1ZXNTZXQpLCBwcm9wZXJ0eV92YWx1ZXNfYWxyZWFkeV9zZXQpOworICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldE9iamVjdCgidmFsdWVzIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPFZhbHVlc1NldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBQYXlsb2FkU2V0PiYgc2V0UGF5bG9hZChSZWZQdHI8SlNPTjo6VmFsdWU+IHZh
bHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgUGF5
bG9hZFNldCksIHByb3BlcnR5X3BheWxvYWRfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPFBheWxvYWRTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgRXJyb3JTZXQ+JiBzZXRFcnJvcihSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0
YWJhc2U6OkVycm9yPiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIEVycm9yU2V0KSwgcHJvcGVydHlfZXJyb3JfYWxyZWFkeV9zZXQpOworICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdCgiZXJyb3IiX3MsIHZhbHVlKTsKKyAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8RXJyb3JTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgRXJyb3JMaXN0U2V0PiYgc2V0RXJyb3JMaXN0KFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3JMaXN0PiB2YWx1ZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEVycm9yTGlzdFNldCksIHByb3BlcnR5
X2Vycm9yTGlzdF9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXko
ImVycm9yTGlzdCJfcywgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxFcnJv
ckxpc3RTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBSZWY8UGFyYW1ldGVyQnVuZGxlPiBy
ZWxlYXNlKCkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0g
QWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKHNpemVvZihQYXJhbWV0ZXJCdW5kbGUpID09IHNpemVvZihKU09OOjpPYmplY3QpLCBj
YW5ub3RfY2FzdCk7CisKKyAgICAgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25SZXN1bHQg
PSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBX
VEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxQYXJhbWV0ZXJCdW5kbGU+Kj4oJmpzb25SZXN1
bHQpKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICB9OworCisg
ICAgLyoKKyAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CisgICAgICogUmVmPFBhcmFtZXRl
ckJ1bmRsZT4gcmVzdWx0ID0gUGFyYW1ldGVyQnVuZGxlOjpjcmVhdGUoKQorICAgICAqICAgICAu
c2V0Q29sdW1uTmFtZXMoLi4uKQorICAgICAqICAgICAuc2V0QnV0dG9ucyguLi4pCisgICAgICog
ICAgIC5zZXREaXJlY3Rpb25hbGl0eSguLi4pCisgICAgICogICAgIC5zZXROb3RlcyguLi4pCisg
ICAgICogICAgIC5zZXRUaW1lc3RhbXAoLi4uKQorICAgICAqICAgICAuc2V0VmFsdWVzKC4uLikK
KyAgICAgKiAgICAgLnNldFBheWxvYWQoLi4uKQorICAgICAqICAgICAuc2V0RXJyb3IoLi4uKQor
ICAgICAqICAgICAuc2V0RXJyb3JMaXN0KC4uLikKKyAgICAgKiAgICAgLnJlbGVhc2UoKTsKKyAg
ICAgKi8KKyAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
KTsKKyAgICB9Cit9OworCisvKiBDb25mbGljdGVkIG5hbWVzIG1heSBjYXVzZSBnZW5lcmF0ZWQg
Z2V0dGVycy9zZXR0ZXJzIHRvIGNsYXNoIHdpdGggYnVpbHQtaW4gSW5zcGVjdG9yT2JqZWN0IG1l
dGhvZHMuICovCitjbGFzcyBPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzIDogcHVibGlj
IEpTT046Ok9iamVjdEJhc2UgeworcHVibGljOgorICAgIGVudW0geworICAgICAgICBOb0ZpZWxk
c1NldCA9IDAsCisgICAgICAgIEludGVnZXJTZXQgPSAxIDw8IDAsCisgICAgICAgIEFycmF5U2V0
ID0gMSA8PCAxLAorICAgICAgICBTdHJpbmdTZXQgPSAxIDw8IDIsCisgICAgICAgIFZhbHVlU2V0
ID0gMSA8PCAzLAorICAgICAgICBPYmplY3RTZXQgPSAxIDw8IDQsCisgICAgICAgIEFsbEZpZWxk
c1NldCA9IChJbnRlZ2VyU2V0IHwgQXJyYXlTZXQgfCBTdHJpbmdTZXQgfCBWYWx1ZVNldCB8IE9i
amVjdFNldCkKKyAgICB9OworCisgICAgdGVtcGxhdGU8aW50IFNUQVRFPgorICAgIGNsYXNzIEJ1
aWxkZXIgeworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVz
dWx0OworCisgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4m
IGNhc3RTdGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRf
Y2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAg
IEJ1aWxkZXIoUmVmPC8qT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cyovSlNPTjo6T2Jq
ZWN0PiYmIG9iamVjdCkKKyAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQor
ICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1Nl
dCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKKyAgICAgICAgfQorICAgICAg
ICBmcmllbmQgY2xhc3MgT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0czsKKyAgICBwdWJs
aWM6CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IEludGVnZXJTZXQ+JiBzZXRJbnRlZ2VyKGNv
bnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBJbnRlZ2VyU2V0KSwgcHJvcGVydHlfaW50ZWdlcl9hbHJlYWR5X3NldCk7Cisg
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJpbnRlZ2VyIl9zLCB2YWx1ZSk7CisgICAg
ICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEludGVnZXJTZXQ+KCk7CisgICAgICAgIH0KKworICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgQXJyYXlTZXQ+JiBzZXRBcnJheShjb25zdCBTdHJpbmcmIHZh
bHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQXJy
YXlTZXQpLCBwcm9wZXJ0eV9hcnJheV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0U3RyaW5nKCJhcnJheSJfcywgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxBcnJheVNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBT
dHJpbmdTZXQ+JiBzZXRTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFN0cmluZ1NldCksIHByb3BlcnR5X3N0
cmluZ19hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJzdHJp
bmciX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U3RyaW5nU2V0Pigp
OworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFZhbHVlU2V0PiYgc2V0VmFs
dWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoIShTVEFURSAmIFZhbHVlU2V0KSwgcHJvcGVydHlfdmFsdWVfYWxyZWFkeV9zZXQpOwor
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidmFsdWUiX3MsIHZhbHVlKTsKKyAgICAg
ICAgICAgIHJldHVybiBjYXN0U3RhdGU8VmFsdWVTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgT2JqZWN0U2V0PiYgc2V0T2JqZWN0KGNvbnN0IFN0cmluZyYgdmFs
dWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBPYmpl
Y3RTZXQpLCBwcm9wZXJ0eV9vYmplY3RfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1
bHQtPnNldFN0cmluZygib2JqZWN0Il9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2Fz
dFN0YXRlPE9iamVjdFNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIFJlZjxPYmplY3RXaXRo
UHJvcGVydHlOYW1lQ29uZmxpY3RzPiByZWxlYXNlKCkKKyAgICAgICAgeworICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5
KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihPYmplY3RXaXRoUHJvcGVydHlO
YW1lQ29uZmxpY3RzKSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0KSwgY2Fubm90X2Nhc3QpOworCisg
ICAgICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uUmVzdWx0ID0gbV9yZXN1bHQucmVsZWFz
ZU5vbk51bGwoKTsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gV1RGTW92ZSgqcmVpbnRlcnBy
ZXRfY2FzdDxSZWY8T2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cz4qPigmanNvblJlc3Vs
dCkpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgIH07CisKKyAg
ICAvKgorICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKKyAgICAgKiBSZWY8T2JqZWN0V2l0
aFByb3BlcnR5TmFtZUNvbmZsaWN0cz4gcmVzdWx0ID0gT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNv
bmZsaWN0czo6Y3JlYXRlKCkKKyAgICAgKiAgICAgLnNldEludGVnZXIoLi4uKQorICAgICAqICAg
ICAuc2V0QXJyYXkoLi4uKQorICAgICAqICAgICAuc2V0U3RyaW5nKC4uLikKKyAgICAgKiAgICAg
LnNldFZhbHVlKC4uLikKKyAgICAgKiAgICAgLnNldE9iamVjdCguLi4pCisgICAgICogICAgIC5y
ZWxlYXNlKCk7CisgICAgICovCisgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0
ZSgpCisgICAgeworICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKSk7CisgICAgfQorfTsKKworfSAvLyBEYXRhYmFzZQorCituYW1lc3BhY2Ug
VGVzdCB7CitjbGFzcyBQYXJhbWV0ZXJCdW5kbGUgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7
CitwdWJsaWM6CisgICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAnZGlyZWN0aW9uYWxp
dHknIHdoaWxlIGdlbmVyYXRpbmcgUGFyYW1ldGVyQnVuZGxlLgorICAgIGVudW0gY2xhc3MgRGly
ZWN0aW9uYWxpdHkgeworICAgICAgICBMVFIgPSA0LAorICAgICAgICBSVEwgPSA1LAorICAgIH07
IC8vIGVudW0gY2xhc3MgRGlyZWN0aW9uYWxpdHkKKyAgICBlbnVtIHsKKyAgICAgICAgTm9GaWVs
ZHNTZXQgPSAwLAorICAgICAgICBEaXJlY3Rpb25hbGl0eVNldCA9IDEgPDwgMCwKKyAgICAgICAg
QnV0dG9uc1NldCA9IDEgPDwgMSwKKyAgICAgICAgQ29sdW1uTmFtZXNTZXQgPSAxIDw8IDIsCisg
ICAgICAgIE5vdGVzU2V0ID0gMSA8PCAzLAorICAgICAgICBUaW1lc3RhbXBTZXQgPSAxIDw8IDQs
CisgICAgICAgIFZhbHVlc1NldCA9IDEgPDwgNSwKKyAgICAgICAgUGF5bG9hZFNldCA9IDEgPDwg
NiwKKyAgICAgICAgRXJyb3JTZXQgPSAxIDw8IDcsCisgICAgICAgIEFsbEZpZWxkc1NldCA9IChE
aXJlY3Rpb25hbGl0eVNldCB8IEJ1dHRvbnNTZXQgfCBDb2x1bW5OYW1lc1NldCB8IE5vdGVzU2V0
IHwgVGltZXN0YW1wU2V0IHwgVmFsdWVzU2V0IHwgUGF5bG9hZFNldCB8IEVycm9yU2V0KQorICAg
IH07CisKKyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CisgICAgY2xhc3MgQnVpbGRlciB7CisgICAg
cHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7CisKKyAgICAg
ICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8
U1RBVEUgfCBTVEVQPio+KHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcihSZWY8
LypQYXJhbWV0ZXJCdW5kbGUqL0pTT046Ok9iamVjdD4mJiBvYmplY3QpCisgICAgICAgICAgICA6
IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5p
dF9zdGF0ZSk7CisgICAgICAgIH0KKyAgICAgICAgZnJpZW5kIGNsYXNzIFBhcmFtZXRlckJ1bmRs
ZTsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IERpcmVjdGlvbmFsaXR5
U2V0PiYgc2V0RGlyZWN0aW9uYWxpdHkoRGlyZWN0aW9uYWxpdHkgdmFsdWUpCisgICAgICAgIHsK
KyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBEaXJlY3Rpb25hbGl0eVNldCks
IHByb3BlcnR5X2RpcmVjdGlvbmFsaXR5X2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXRTdHJpbmcoImRpcmVjdGlvbmFsaXR5Il9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpU
ZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUodmFsdWUpKTsKKyAgICAgICAgICAgIHJl
dHVybiBjYXN0U3RhdGU8RGlyZWN0aW9uYWxpdHlTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgQnV0dG9uc1NldD4mIHNldEJ1dHRvbnMoUmVmUHRyPEpTT046OkFy
cmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPj4gdmFsdWUp
CisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBCdXR0b25z
U2V0KSwgcHJvcGVydHlfYnV0dG9uc19hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0QXJyYXkoImJ1dHRvbnMiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0
U3RhdGU8QnV0dG9uc1NldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBDb2x1bW5OYW1lc1NldD4mIHNldENvbHVtbk5hbWVzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0
cmluZz4+IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgQ29sdW1uTmFtZXNTZXQpLCBwcm9wZXJ0eV9jb2x1bW5OYW1lc19hbHJlYWR5X3NldCk7
CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB2YWx1ZSk7
CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvbHVtbk5hbWVzU2V0PigpOworICAgICAg
ICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IE5vdGVzU2V0PiYgc2V0Tm90ZXMoY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIE5vdGVzU2V0KSwgcHJvcGVydHlfbm90ZXNfYWxyZWFkeV9zZXQpOworICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldFN0cmluZygibm90ZXMiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIHJl
dHVybiBjYXN0U3RhdGU8Tm90ZXNTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgVGltZXN0YW1wU2V0PiYgc2V0VGltZXN0YW1wKGRvdWJsZSB2YWx1ZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFRpbWVzdGFtcFNldCks
IHByb3BlcnR5X3RpbWVzdGFtcF9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0
U3RhdGU8VGltZXN0YW1wU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IFZhbHVlc1NldD4mIHNldFZhbHVlcyhSZWZQdHI8SlNPTjo6T2JqZWN0PiB2YWx1ZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFZhbHVlc1NldCks
IHByb3BlcnR5X3ZhbHVlc19hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
T2JqZWN0KCJ2YWx1ZXMiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8
VmFsdWVzU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFBheWxv
YWRTZXQ+JiBzZXRQYXlsb2FkKFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWUpCisgICAgICAgIHsK
KyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBQYXlsb2FkU2V0KSwgcHJvcGVy
dHlfcGF5bG9hZF9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0VmFsdWUo
InBheWxvYWQiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8UGF5bG9h
ZFNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBFcnJvclNldD4m
IHNldEVycm9yKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHZh
bHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRXJy
b3JTZXQpLCBwcm9wZXJ0eV9lcnJvcl9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0T2JqZWN0KCJlcnJvciJfcywgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxFcnJvclNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIFJlZjxQYXJhbWV0ZXJCdW5k
bGU+IHJlbGVhc2UoKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFU
RSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOworICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoc2l6ZW9mKFBhcmFtZXRlckJ1bmRsZSkgPT0gc2l6ZW9mKEpTT046Ok9iamVj
dCksIGNhbm5vdF9jYXN0KTsKKworICAgICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4ganNvblJl
c3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgICAgICBhdXRvIHJlc3Vs
dCA9IFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPFBhcmFtZXRlckJ1bmRsZT4qPigmanNv
blJlc3VsdCkpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgIH07
CisKKyAgICAvKgorICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKKyAgICAgKiBSZWY8UGFy
YW1ldGVyQnVuZGxlPiByZXN1bHQgPSBQYXJhbWV0ZXJCdW5kbGU6OmNyZWF0ZSgpCisgICAgICog
ICAgIC5zZXREaXJlY3Rpb25hbGl0eSguLi4pCisgICAgICogICAgIC5zZXRCdXR0b25zKC4uLikK
KyAgICAgKiAgICAgLnNldENvbHVtbk5hbWVzKC4uLikKKyAgICAgKiAgICAgLnNldE5vdGVzKC4u
LikKKyAgICAgKiAgICAgLnNldFRpbWVzdGFtcCguLi4pCisgICAgICogICAgIC5zZXRWYWx1ZXMo
Li4uKQorICAgICAqICAgICAuc2V0UGF5bG9hZCguLi4pCisgICAgICogICAgIC5zZXRFcnJvcigu
Li4pCisgICAgICogICAgIC5yZWxlYXNlKCk7CisgICAgICovCisgICAgc3RhdGljIEJ1aWxkZXI8
Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0Zp
ZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7CisgICAgfQorfTsKKworfSAvLyBUZXN0
CisKKworCituYW1lc3BhY2UgVGVzdEhlbHBlcnMgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBQcm90
b2NvbEVudW1UeXBlPgorT3B0aW9uYWw8UHJvdG9jb2xFbnVtVHlwZT4gcGFyc2VFbnVtVmFsdWVG
cm9tU3RyaW5nKGNvbnN0IFN0cmluZyYpOworCisvLyBFbnVtcyBpbiB0aGUgJ0RhdGFiYXNlJyBE
b21haW4KK3RlbXBsYXRlPD4KK09wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNl
OjpNb3VzZUJ1dHRvbj4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4oY29uc3QgU3RyaW5nJik7Cit0ZW1wbGF0ZTw+CitP
cHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6T3B0aW9uYWxQYXJhbWV0ZXJC
dW5kbGU6OkRpcmVjdGlvbmFsaXR5PiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RGF0YWJhc2U6Ok9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25h
bGl0eT4oY29uc3QgU3RyaW5nJik7Cit0ZW1wbGF0ZTw+CitPcHRpb25hbDxJbnNwZWN0b3I6OlBy
b3RvY29sOjpEYXRhYmFzZTo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4gcGFyc2VF
bnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQYXJhbWV0
ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5Pihjb25zdCBTdHJpbmcmKTsKKworLy8gRW51bXMgaW4g
dGhlICdUZXN0JyBEb21haW4KK3RlbXBsYXRlPD4KK09wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlRlc3Q6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+IHBhcnNlRW51bVZhbHVl
RnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRp
cmVjdGlvbmFsaXR5Pihjb25zdCBTdHJpbmcmKTsKKworfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBl
cnMKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
CisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVs
dEhhc2g7CisKKy8vIEhhc2ggZGVjbGFyYXRpb25zIGluIHRoZSAnRGF0YWJhc2UnIERvbWFpbgor
dGVtcGxhdGU8Pgorc3RydWN0IERlZmF1bHRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFi
YXNlOjpNb3VzZUJ1dHRvbj4geworICAgIHR5cGVkZWYgSW50SGFzaDxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b24+IEhhc2g7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
VEYKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisKKyMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
VGVzdFByb3RvY29sT2JqZWN0cy5oIgorCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFt
ZXNwYWNlIFByb3RvY29sIHsKKworbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKKworc3RhdGljIGNv
bnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFsdWVzW10gPSB7CisgICAgIk5vbmUiLAor
ICAgICJMZWZ0IiwKKyAgICAiTWlkZGxlIiwKKyAgICAiUmlnaHQiLAorICAgICJMVFIiLAorICAg
ICJSVEwiLAorfTsKKworU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7Cisg
ICAgcmV0dXJuIGVudW1fY29uc3RhbnRfdmFsdWVzW2NvZGVdOworfQorCisvLyBFbnVtcyBpbiB0
aGUgJ0RhdGFiYXNlJyBEb21haW4KK3RlbXBsYXRlPD4KK09wdGlvbmFsPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4oY29uc3QgU3RyaW5nJiBw
cm90b2NvbFN0cmluZykKK3sKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVz
W10gPSB7CisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1v
dXNlQnV0dG9uOjpOb25lLAorICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpNb3VzZUJ1dHRvbjo6TGVmdCwKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlBy
b3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b246Ok1pZGRsZSwKKyAgICAgICAgKHNpemVfdClJ
bnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b246OlJpZ2h0LAorICAgIH07
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCA0OyArK2kpCisgICAgICAgIGlmIChwcm90b2Nv
bFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCisgICAg
ICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRv
biljb25zdGFudFZhbHVlc1tpXTsKKworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK3Rl
bXBsYXRlPD4KK09wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpPcHRpb25h
bFBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmlu
ZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU6
OkRpcmVjdGlvbmFsaXR5Pihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQoreworICAgIHN0
YXRpYyBjb25zdCBzaXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsKKyAgICAgICAgKHNpemVfdClJ
bnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU6OkRp
cmVjdGlvbmFsaXR5OjpMVFIsCisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6Ok9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eTo6UlRMLAor
ICAgIH07CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAyOyArK2kpCisgICAgICAgIGlmIChw
cm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0p
CisgICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpPcHRp
b25hbFBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHkpY29uc3RhbnRWYWx1ZXNbaV07CisK
KyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCit0ZW1wbGF0ZTw+CitPcHRpb25hbDxJbnNw
ZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0
eT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNl
OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5Pihjb25zdCBTdHJpbmcmIHByb3RvY29s
U3RyaW5nKQoreworICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsK
KyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UGFyYW1ldGVy
QnVuZGxlOjpEaXJlY3Rpb25hbGl0eTo6TFRSLAorICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRhdGFiYXNlOjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5OjpSVEws
CisgICAgfTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDI7ICsraSkKKyAgICAgICAgaWYg
KHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ld
XSkKKyAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlBh
cmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHkpY29uc3RhbnRWYWx1ZXNbaV07CisKKyAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworfQorCisKKy8vIEVudW1zIGluIHRoZSAnVGVzdCcgRG9tYWlu
Cit0ZW1wbGF0ZTw+CitPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpQYXJhbWV0
ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5PiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVj
dG9yOjpQcm90b2NvbDo6VGVzdDo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4oY29u
c3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKK3sKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNv
bnN0YW50VmFsdWVzW10gPSB7CisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6
VGVzdDo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eTo6TFRSLAorICAgICAgICAoc2l6
ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9u
YWxpdHk6OlJUTCwKKyAgICB9OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMjsgKytpKQor
ICAgICAgICBpZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3Rh
bnRWYWx1ZXNbaV1dKQorICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpU
ZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5KWNvbnN0YW50VmFsdWVzW2ldOwor
CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKworCit9IC8vIG5hbWVzcGFjZSBUZXN0SGVs
cGVycworCisKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbmNs
dWRlIDx3dGYvUmV0YWluUHRyLmg+CisKKworCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNr
ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERp
c3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNs
YXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFj
a2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgor
I2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9K
U09OVmFsdWVzLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMu
bW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUu
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0
IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+CisKK19fYXR0cmlidXRlX18oKHZpc2liaWxp
dHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDog
TlNPYmplY3QKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRp
b24uaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5
cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1w
b3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2Nv
bEludGVybmFsLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIK
KyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+Cisj
aW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4K
KyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVycy5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXJzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBU
ZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCit7CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250
cm9sbGVyKiBfY29udHJvbGxlcjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJv
bGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCit7CisgICAg
c2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7
CisgICAgQVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsK
KyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgW3N1cGVyIGRl
YWxsb2NdOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1
cmF0aW9uLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJz
Lm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1v
YmplY3QtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNp
bmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2
ZW50RGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlw
ZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBv
cnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJ
UHJvdG9jb2xKU09OT2JqZWN0Lmg+CisKKworQGNsYXNzIFRlc3RQcm90b2NvbERhdGFiYXNlRXJy
b3I7CitAY2xhc3MgVGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTsK
K0BjbGFzcyBUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZTsKK0BjbGFzcyBUZXN0
UHJvdG9jb2xEYXRhYmFzZU9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHM7CitAY2xhc3Mg
VGVzdFByb3RvY29sRGF0YWJhc2VEdW1teU9iamVjdDsKK0BjbGFzcyBUZXN0UHJvdG9jb2xUZXN0
UGFyYW1ldGVyQnVuZGxlOworCisKK3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90
b2NvbERhdGFiYXNlTW91c2VCdXR0b24pIHsKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNl
QnV0dG9uTm9uZSwKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9uTGVmdCwKKyAg
ICBUZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9uTWlkZGxlLAorICAgIFRlc3RQcm90b2Nv
bERhdGFiYXNlTW91c2VCdXR0b25SaWdodCwKK307CisKK3R5cGVkZWYgTlNfRU5VTShOU0ludGVn
ZXIsIFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25h
bGl0eSkgeworICAgIFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGVE
aXJlY3Rpb25hbGl0eUxUUiwKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1l
dGVyQnVuZGxlRGlyZWN0aW9uYWxpdHlSVEwsCit9OworCit0eXBlZGVmIE5TX0VOVU0oTlNJbnRl
Z2VyLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5KSB7
CisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eUxU
UiwKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5
UlRMLAorfTsKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sVGVzdFBh
cmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5KSB7CisgICAgVGVzdFByb3RvY29sVGVzdFBhcmFt
ZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5TFRSLAorICAgIFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0
ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eVJUTCwKK307CisKKworX19hdHRyaWJ1dGVfXygodmlzaWJp
bGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3Ig
OiBSV0lQcm90b2NvbEpTT05PYmplY3QKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6
KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkOworLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmpl
Y3Q7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2Ug
Y29kZTooaW50KWNvZGU7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29w
eSkgTlNTdHJpbmcgKm1lc3NhZ2U7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21p
YywgYXNzaWduKSBpbnQgY29kZTsKK0BlbmQKKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAo
ImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJh
bWV0ZXJCdW5kbGUgOiBSV0lQcm90b2NvbEpTT05PYmplY3QKKy0gKGluc3RhbmNldHlwZSlpbml0
V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkOworLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVj
dCAqKWpzb25PYmplY3Q7CisvKiBvcHRpb25hbCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29w
eSkgTlNBcnJheS8qPE5TU3RyaW5nPiovICpjb2x1bW5OYW1lczsKKy8qIG9wdGlvbmFsICovIEBw
cm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmJ1dHRvbnM7
CisvKiBvcHRpb25hbCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBUZXN0UHJvdG9j
b2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHkgZGlyZWN0aW9u
YWxpdHk7CisvKiBvcHRpb25hbCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJp
bmcgKm5vdGVzOworLyogb3B0aW9uYWwgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikg
ZG91YmxlIHRpbWVzdGFtcDsKKy8qIG9wdGlvbmFsICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBy
ZXRhaW4pIFJXSVByb3RvY29sSlNPTk9iamVjdCAqdmFsdWVzOworLyogb3B0aW9uYWwgKi8gQHBy
b3BlcnR5IChub25hdG9taWMsIHJldGFpbikgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2Fk
OworLyogb3B0aW9uYWwgKi8gQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgVGVzdFByb3Rv
Y29sRGF0YWJhc2VFcnJvciAqZXJyb3I7CisvKiBvcHRpb25hbCAqLyBAcHJvcGVydHkgKG5vbmF0
b21pYywgY29weSkgTlNBcnJheS8qPFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I+Ki8gKmVycm9y
TGlzdDsKK0BlbmQKKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitA
aW50ZXJmYWNlIFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlIDogUldJUHJvdG9j
b2xKU09OT2JqZWN0CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25h
cnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBy
b3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OworLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoQ29sdW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWNv
bHVtbk5hbWVzIGJ1dHRvbnM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWJ1dHRvbnMgZGlyZWN0
aW9uYWxpdHk6KFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxp
dHkpZGlyZWN0aW9uYWxpdHkgbm90ZXM6KE5TU3RyaW5nICopbm90ZXMgdGltZXN0YW1wOihkb3Vi
bGUpdGltZXN0YW1wIHZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopdmFsdWVzIHBheWxv
YWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQgZXJyb3I6KFRlc3RQcm90b2NvbERh
dGFiYXNlRXJyb3IgKillcnJvciBlcnJvckxpc3Q6KE5TQXJyYXkvKjxUZXN0UHJvdG9jb2xEYXRh
YmFzZUVycm9yPiovICopZXJyb3JMaXN0OworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25h
dG9taWMsIGNvcHkpIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqY29sdW1uTmFtZXM7CisvKiByZXF1
aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNBcnJheS8qPE5TU3RyaW5nPiov
ICpidXR0b25zOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikg
VGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSBkaXJlY3Rp
b25hbGl0eTsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0
cmluZyAqbm90ZXM7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWdu
KSBkb3VibGUgdGltZXN0YW1wOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMs
IHJldGFpbikgUldJUHJvdG9jb2xKU09OT2JqZWN0ICp2YWx1ZXM7CisvKiByZXF1aXJlZCAqLyBA
cHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluKSBSV0lQcm90b2NvbEpTT05PYmplY3QgKnBheWxv
YWQ7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluKSBUZXN0UHJv
dG9jb2xEYXRhYmFzZUVycm9yICplcnJvcjsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9u
YXRvbWljLCBjb3B5KSBOU0FycmF5Lyo8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4qLyAqZXJy
b3JMaXN0OworQGVuZAorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkK
K0BpbnRlcmZhY2UgVGVzdFByb3RvY29sRGF0YWJhc2VPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29u
ZmxpY3RzIDogUldJUHJvdG9jb2xKU09OT2JqZWN0CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQ
YXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKKy0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilq
c29uT2JqZWN0OworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSW50ZWdlcjooTlNTdHJpbmcgKilp
bnRlZ2VyIGFycmF5OihOU1N0cmluZyAqKWFycmF5IHN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcg
dmFsdWU6KE5TU3RyaW5nICopdmFsdWUgb2JqZWN0OihOU1N0cmluZyAqKW9iamVjdDsKKy8qIHJl
cXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqaW50ZWdlcjsK
Ky8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqYXJy
YXk7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcg
KnN0cmluZzsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0
cmluZyAqdmFsdWU7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkg
TlNTdHJpbmcgKm9iamVjdDsKK0BlbmQKKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRl
ZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbERhdGFiYXNlRHVtbXlPYmplY3QgOiBS
V0lQcm90b2NvbEpTT05PYmplY3QKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5T
RGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkOworLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7
CitAZW5kCisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVy
ZmFjZSBUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlIDogUldJUHJvdG9jb2xKU09OT2Jq
ZWN0CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJp
bmcgKiwgaWQ+ICopcGF5bG9hZDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2Jq
ZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OworLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoRGlyZWN0aW9uYWxpdHk6KFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVE
aXJlY3Rpb25hbGl0eSlkaXJlY3Rpb25hbGl0eSBidXR0b25zOihOU0FycmF5Lyo8TlNTdHJpbmc+
Ki8gKilidXR0b25zIGNvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5O
YW1lcyBub3RlczooTlNTdHJpbmcgKilub3RlcyB0aW1lc3RhbXA6KGRvdWJsZSl0aW1lc3RhbXAg
dmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKil2YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9j
b2xKU09OT2JqZWN0ICopcGF5bG9hZCBlcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAq
KWVycm9yOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgVGVz
dFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5IGRpcmVjdGlvbmFsaXR5
OworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TQXJyYXkvKjxO
U1N0cmluZz4qLyAqYnV0dG9uczsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWlj
LCBjb3B5KSBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmNvbHVtbk5hbWVzOworLyogcmVxdWlyZWQg
Ki8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICpub3RlczsKKy8qIHJlcXVp
cmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGRvdWJsZSB0aW1lc3RhbXA7Cisv
KiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluKSBSV0lQcm90b2NvbEpT
T05PYmplY3QgKnZhbHVlczsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBy
ZXRhaW4pIFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5bG9hZDsKKy8qIHJlcXVpcmVkICovIEBw
cm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKmVy
cm9yOworQGVuZAorCisKKworCisKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29s
QnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRl
c3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIK
KyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5o
PgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xJbnRlcm5hbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFy
YXRpb24tb2JqZWN0LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rv
ci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7
CisKK3RlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KK09wdGlvbmFsPE9iakNFbnVtVHlw
ZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOworCisKK2lubGluZSBT
dHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9uIHZh
bHVlKQoreworICAgIHN3aXRjaCh2YWx1ZSkgeworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJh
c2VNb3VzZUJ1dHRvbk5vbmU6CisgICAgICAgIHJldHVybiAiTm9uZSJfczsKKyAgICBjYXNlIFRl
c3RQcm90b2NvbERhdGFiYXNlTW91c2VCdXR0b25MZWZ0OgorICAgICAgICByZXR1cm4gIkxlZnQi
X3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9uTWlkZGxlOgorICAg
ICAgICByZXR1cm4gIk1pZGRsZSJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlTW91
c2VCdXR0b25SaWdodDoKKyAgICAgICAgcmV0dXJuICJSaWdodCJfczsKKyAgICB9Cit9CisKK3Rl
bXBsYXRlPD4KK2lubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9u
PiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAodmFs
dWUgPT0gIk5vbmUiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VNb3VzZUJ1
dHRvbk5vbmU7CisgICAgaWYgKHZhbHVlID09ICJMZWZ0IikKKyAgICAgICAgcmV0dXJuIFRlc3RQ
cm90b2NvbERhdGFiYXNlTW91c2VCdXR0b25MZWZ0OworICAgIGlmICh2YWx1ZSA9PSAiTWlkZGxl
IikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VCdXR0b25NaWRkbGU7
CisgICAgaWYgKHZhbHVlID09ICJSaWdodCIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xE
YXRhYmFzZU1vdXNlQnV0dG9uUmlnaHQ7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKwor
aW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9u
YWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSB2YWx1ZSkKK3sKKyAgICBzd2l0Y2godmFs
dWUpIHsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5k
bGVEaXJlY3Rpb25hbGl0eUxUUjoKKyAgICAgICAgcmV0dXJuICJMVFIiX3M7CisgICAgY2FzZSBU
ZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHlS
VEw6CisgICAgICAgIHJldHVybiAiUlRMIl9zOworICAgIH0KK30KKwordGVtcGxhdGU8PgoraW5s
aW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGVE
aXJlY3Rpb25hbGl0eT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7
CisgICAgaWYgKHZhbHVlID09ICJMVFIiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0
YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5TFRSOworICAgIGlmICh2
YWx1ZSA9PSAiUlRMIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9u
YWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eVJUTDsKKyAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworfQorCitpbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sRGF0
YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSB2YWx1ZSkKK3sKKyAgICBzd2l0Y2go
dmFsdWUpIHsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlRGly
ZWN0aW9uYWxpdHlMVFI6CisgICAgICAgIHJldHVybiAiTFRSIl9zOworICAgIGNhc2UgVGVzdFBy
b3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eVJUTDoKKyAgICAgICAg
cmV0dXJuICJSVEwiX3M7CisgICAgfQorfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgT3B0aW9uYWw8
VGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eT4gZnJvbVBy
b3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09ICJM
VFIiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGVE
aXJlY3Rpb25hbGl0eUxUUjsKKyAgICBpZiAodmFsdWUgPT0gIlJUTCIpCisgICAgICAgIHJldHVy
biBUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5UlRMOwor
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKKworaW5saW5lIFN0cmluZyB0b1Byb3RvY29s
U3RyaW5nKFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSB2YWx1
ZSkKK3sKKyAgICBzd2l0Y2godmFsdWUpIHsKKyAgICBjYXNlIFRlc3RQcm90b2NvbFRlc3RQYXJh
bWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eUxUUjoKKyAgICAgICAgcmV0dXJuICJMVFIiX3M7Cisg
ICAgY2FzZSBUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHlSVEw6
CisgICAgICAgIHJldHVybiAiUlRMIl9zOworICAgIH0KK30KKwordGVtcGxhdGU8PgoraW5saW5l
IE9wdGlvbmFsPFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eT4g
ZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVl
ID09ICJMVFIiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRs
ZURpcmVjdGlvbmFsaXR5TFRSOworICAgIGlmICh2YWx1ZSA9PSAiUlRMIikKKyAgICAgICAgcmV0
dXJuIFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eVJUTDsKKyAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKwor
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorCisjIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90
b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisK
K0BpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChEYXRhYmFzZURvbWFpbikK
KworKyAodm9pZClfcGFyc2VFcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKilvdXRW
YWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNlRXJyb3JMaXN0OihO
U0FycmF5Lyo8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5
bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNlTW91c2VCdXR0b246KE5TTnVtYmVyICoq
KW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworKyAodm9pZClfcGFyc2VPcHRpb25h
bFBhcmFtZXRlckJ1bmRsZTooVGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1
bmRsZSAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNl
UGFyYW1ldGVyQnVuZGxlOihUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZSAqKilv
dXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNlT2JqZWN0V2l0
aFByb3BlcnR5TmFtZUNvbmZsaWN0czooVGVzdFByb3RvY29sRGF0YWJhc2VPYmplY3RXaXRoUHJv
cGVydHlOYW1lQ29uZmxpY3RzICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwor
KyAodm9pZClfcGFyc2VEdW1teU9iamVjdDooVGVzdFByb3RvY29sRGF0YWJhc2VEdW1teU9iamVj
dCAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKworQGVuZAorQGludGVyZmFj
ZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFRlc3REb21haW4pCisKKysgKHZvaWQpX3Bh
cnNlUGFyYW1ldGVyQnVuZGxlOihUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlICoqKW91
dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlv
biBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKERhdGFiYXNlRG9tYWluKQorCisrICh2b2lk
KV9wYXJzZUVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqKW91dFZhbHVlIGZyb21Q
YXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShw
YXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gW1tUZXN0UHJv
dG9jb2xEYXRhYmFzZUVycm9yIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07Cit9CisK
KysgKHZvaWQpX3BhcnNlRXJyb3JMaXN0OihOU0FycmF5Lyo8VGVzdFByb3RvY29sRGF0YWJhc2VF
cnJvcj4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TQXJyYXkvKjxUZXN0UHJvdG9jb2xE
YXRhYmFzZUVycm9yPiovIGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gKE5TQXJyYXkvKjxUZXN0
UHJvdG9jb2xEYXRhYmFzZUVycm9yPiovICopcGF5bG9hZDsKK30KKworKyAodm9pZClfcGFyc2VN
b3VzZUJ1dHRvbjooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQK
K3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBj
bGFzc10pOworICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VCdXR0b24+IHJl
c3VsdCA9IEluc3BlY3Rvcjo6ZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERhdGFiYXNl
TW91c2VCdXR0b24+KHBheWxvYWQpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX0VOVU1f
VkFMVUUocmVzdWx0LCBAIk1vdXNlQnV0dG9uIik7CisgICAgKm91dFZhbHVlID0gQChyZXN1bHQu
dmFsdWUoKSk7Cit9CisKKysgKHZvaWQpX3BhcnNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU6KFRl
c3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUgKiopb3V0VmFsdWUgZnJv
bVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBF
KHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQ
cm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUgYWxsb2NdIGluaXRXaXRoUGF5
bG9hZDpwYXlsb2FkXTsKK30KKworKyAodm9pZClfcGFyc2VQYXJhbWV0ZXJCdW5kbGU6KFRlc3RQ
cm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihp
ZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBb
TlNEaWN0aW9uYXJ5IGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xEYXRh
YmFzZVBhcmFtZXRlckJ1bmRsZSBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOworfQor
CisrICh2b2lkKV9wYXJzZU9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHM6KFRlc3RQcm90
b2NvbERhdGFiYXNlT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cyAqKilvdXRWYWx1ZSBm
cm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZ
UEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOworICAgICpvdXRWYWx1ZSA9IFtbVGVz
dFByb3RvY29sRGF0YWJhc2VPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzIGFsbG9jXSBp
bml0V2l0aFBheWxvYWQ6cGF5bG9hZF07Cit9CisKKysgKHZvaWQpX3BhcnNlRHVtbXlPYmplY3Q6
KFRlc3RQcm90b2NvbERhdGFiYXNlRHVtbXlPYmplY3QgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6
KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQs
IFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbERh
dGFiYXNlRHVtbXlPYmplY3QgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKK30KKwor
QGVuZAorQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoVGVzdERv
bWFpbikKKworKyAodm9pZClfcGFyc2VQYXJhbWV0ZXJCdW5kbGU6KFRlc3RQcm90b2NvbFRlc3RQ
YXJhbWV0ZXJCdW5kbGUgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAg
ICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xh
c3NdKTsKKyAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGUg
YWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKK30KKworQGVuZAorCisKKyMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xUeXBlcy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5
cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisj
aW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPFdlYkluc3Bl
Y3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisjaW1wb3J0IDx3dGYvQXNzZXJ0
aW9ucy5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIElu
c3BlY3RvcjsKKworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcgor
CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxO
U1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0
XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJ
UkVEX1BST1BFUlRZKHBheWxvYWRbQCJtZXNzYWdlIl0sIEAibWVzc2FnZSIpOworICAgIHNlbGYu
bWVzc2FnZSA9IHBheWxvYWRbQCJtZXNzYWdlIl07CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9S
X1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJjb2RlIl0sIEAiY29kZSIpOworICAgIHNlbGYu
Y29kZSA9IFtwYXlsb2FkW0AiY29kZSJdIGludGVnZXJWYWx1ZV07CisKKyAgICByZXR1cm4gc2Vs
ZjsKK30KKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2Nv
bEpTT05PYmplY3QgKilvYmplY3QKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRo
SlNPTk9iamVjdDpbb2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0KCldKSkKKyAgICAgICAgcmV0dXJu
IG5pbDsKKworICAgIHJldHVybiBzZWxmOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhN
ZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZTooaW50KWNvZGUKK3sKKyAgICBpZiAoIShz
ZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkobWVzc2FnZSwgQCJtZXNzYWdlIik7CisKKyAg
ICBzZWxmLm1lc3NhZ2UgPSBtZXNzYWdlOworICAgIHNlbGYuY29kZSA9IGNvZGU7CisKKyAgICBy
ZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClzZXRNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UK
K3sKKyAgICBbc3VwZXIgc2V0U3RyaW5nOm1lc3NhZ2UgZm9yS2V5OkAibWVzc2FnZSJdOworfQor
CistIChOU1N0cmluZyAqKW1lc3NhZ2UKK3sKKyAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0Zvcktl
eTpAIm1lc3NhZ2UiXTsKK30KKworLSAodm9pZClzZXRDb2RlOihpbnQpY29kZQoreworICAgIFtz
dXBlciBzZXRJbnRlZ2VyOmNvZGUgZm9yS2V5OkAiY29kZSJdOworfQorCistIChpbnQpY29kZQor
eworICAgIHJldHVybiBbc3VwZXIgaW50ZWdlckZvcktleTpAImNvZGUiXTsKK30KKworQGVuZAor
CitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1
bmRsZQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlv
bmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBl
ciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBzZWxmLmNvbHVtbk5hbWVzID0g
cGF5bG9hZFtAImNvbHVtbk5hbWVzIl07CisKKyAgICBzZWxmLmJ1dHRvbnMgPSBwYXlsb2FkW0Ai
YnV0dG9ucyJdOworCisgICAgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBh
cmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5PiBkaXJlY3Rpb25hbGl0eSA9IGZyb21Qcm90b2Nv
bFN0cmluZzxUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlRGlyZWN0
aW9uYWxpdHk+KHBheWxvYWRbQCJkaXJlY3Rpb25hbGl0eSJdKTsKKyAgICBpZiAoZGlyZWN0aW9u
YWxpdHkpCisgICAgICAgIHNlbGYuZGlyZWN0aW9uYWxpdHkgPSBkaXJlY3Rpb25hbGl0eS52YWx1
ZSgpOworCisgICAgc2VsZi5ub3RlcyA9IHBheWxvYWRbQCJub3RlcyJdOworCisgICAgc2VsZi50
aW1lc3RhbXAgPSBbcGF5bG9hZFtAInRpbWVzdGFtcCJdIGRvdWJsZVZhbHVlXTsKKworICAgIHNl
bGYudmFsdWVzID0gcGF5bG9hZFtAInZhbHVlcyJdOworCisgICAgc2VsZi5wYXlsb2FkID0gcGF5
bG9hZFtAInBheWxvYWQiXTsKKworICAgIHNlbGYuZXJyb3IgPSBbW1Rlc3RQcm90b2NvbERhdGFi
YXNlRXJyb3IgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkW0AiZXJyb3IiXV07CisKKyAg
ICBzZWxmLmVycm9yTGlzdCA9IG9iamNBcnJheUZyb21QYXlsb2FkPFRlc3RQcm90b2NvbERhdGFi
YXNlRXJyb3I+KHBheWxvYWRbQCJlcnJvckxpc3QiXSk7CisKKyAgICByZXR1cm4gc2VsZjsKK30K
Ky0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05P
YmplY3QgKilvYmplY3QKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoSlNPTk9i
amVjdDpbb2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0KCldKSkKKyAgICAgICAgcmV0dXJuIG5pbDsK
KworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXNldENvbHVtbk5hbWVzOihOU0FycmF5
Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcworeworICAgIFtzdXBlciBzZXRKU09OQXJyYXk6
dG9KU09OU3RyaW5nQXJyYXkoY29sdW1uTmFtZXMpIGZvcktleTpAImNvbHVtbk5hbWVzIl07Cit9
CisKKy0gKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWNvbHVtbk5hbWVzCit7CisgICAgcmV0dXJu
IHRvT2JqQ1N0cmluZ0FycmF5KFtzdXBlciBKU09OQXJyYXlGb3JLZXk6QCJjb2x1bW5OYW1lcyJd
KTsKK30KKworLSAodm9pZClzZXRCdXR0b25zOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilidXR0
b25zCit7CisgICAgW3N1cGVyIHNldEpTT05BcnJheTp0b0pTT05TdHJpbmdBcnJheShidXR0b25z
KSBmb3JLZXk6QCJidXR0b25zIl07Cit9CisKKy0gKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWJ1
dHRvbnMKK3sKKyAgICByZXR1cm4gdG9PYmpDU3RyaW5nQXJyYXkoW3N1cGVyIEpTT05BcnJheUZv
cktleTpAImJ1dHRvbnMiXSk7Cit9CisKKy0gKHZvaWQpc2V0RGlyZWN0aW9uYWxpdHk6KFRlc3RQ
cm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSlkaXJl
Y3Rpb25hbGl0eQoreworICAgIFtzdXBlciBzZXRTdHJpbmc6dG9Qcm90b2NvbFN0cmluZyhkaXJl
Y3Rpb25hbGl0eSkgZm9yS2V5OkAiZGlyZWN0aW9uYWxpdHkiXTsKK30KKworLSAoVGVzdFByb3Rv
Y29sRGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5KWRpcmVjdGlv
bmFsaXR5Cit7CisgICAgcmV0dXJuIGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xEYXRh
YmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHk+KFtzdXBlciBzdHJpbmdG
b3JLZXk6QCJkaXJlY3Rpb25hbGl0eSJdKS52YWx1ZSgpOworfQorCistICh2b2lkKXNldE5vdGVz
OihOU1N0cmluZyAqKW5vdGVzCit7CisgICAgW3N1cGVyIHNldFN0cmluZzpub3RlcyBmb3JLZXk6
QCJub3RlcyJdOworfQorCistIChOU1N0cmluZyAqKW5vdGVzCit7CisgICAgcmV0dXJuIFtzdXBl
ciBzdHJpbmdGb3JLZXk6QCJub3RlcyJdOworfQorCistICh2b2lkKXNldFRpbWVzdGFtcDooZG91
YmxlKXRpbWVzdGFtcAoreworICAgIFtzdXBlciBzZXREb3VibGU6dGltZXN0YW1wIGZvcktleTpA
InRpbWVzdGFtcCJdOworfQorCistIChkb3VibGUpdGltZXN0YW1wCit7CisgICAgcmV0dXJuIFtz
dXBlciBkb3VibGVGb3JLZXk6QCJ0aW1lc3RhbXAiXTsKK30KKworLSAodm9pZClzZXRWYWx1ZXM6
KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcworeworICAgIFtzdXBlciBzZXRPYmplY3Q6
dmFsdWVzIGZvcktleTpAInZhbHVlcyJdOworfQorCistIChSV0lQcm90b2NvbEpTT05PYmplY3Qg
Kil2YWx1ZXMKK3sKKyAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9iamVjdCA9IFtzdXBlciBv
YmplY3RGb3JLZXk6QCJ2YWx1ZXMiXTsKKyAgICBpZiAoIW9iamVjdCkKKyAgICAgICAgcmV0dXJu
IG5pbDsKKyAgICByZXR1cm4gW1tSV0lQcm90b2NvbEpTT05PYmplY3QgYWxsb2NdIGluaXRXaXRo
SlNPTk9iamVjdDpbW3N1cGVyIG9iamVjdEZvcktleTpAInZhbHVlcyJdIHRvSlNPTk9iamVjdF0u
Z2V0KCldOworfQorCistICh2b2lkKXNldFBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAq
KXBheWxvYWQKK3sKKyAgICBbc3VwZXIgc2V0T2JqZWN0OnBheWxvYWQgZm9yS2V5OkAicGF5bG9h
ZCJdOworfQorCistIChSV0lQcm90b2NvbEpTT05PYmplY3QgKilwYXlsb2FkCit7CisgICAgUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICpvYmplY3QgPSBbc3VwZXIgb2JqZWN0Rm9yS2V5OkAicGF5bG9h
ZCJdOworICAgIGlmICghb2JqZWN0KQorICAgICAgICByZXR1cm4gbmlsOworICAgIHJldHVybiBb
W1JXSVByb3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0Oltbc3VwZXIg
b2JqZWN0Rm9yS2V5OkAicGF5bG9hZCJdIHRvSlNPTk9iamVjdF0uZ2V0KCldOworfQorCistICh2
b2lkKXNldEVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICopZXJyb3IKK3sKKyAgICBb
c3VwZXIgc2V0T2JqZWN0OmVycm9yIGZvcktleTpAImVycm9yIl07Cit9CisKKy0gKFRlc3RQcm90
b2NvbERhdGFiYXNlRXJyb3IgKillcnJvcgoreworICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAq
b2JqZWN0ID0gW3N1cGVyIG9iamVjdEZvcktleTpAImVycm9yIl07CisgICAgaWYgKCFvYmplY3Qp
CisgICAgICAgIHJldHVybiBuaWw7CisgICAgcmV0dXJuIFtbVGVzdFByb3RvY29sRGF0YWJhc2VF
cnJvciBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0Oltbc3VwZXIgb2JqZWN0Rm9yS2V5OkAiZXJy
b3IiXSB0b0pTT05PYmplY3RdLmdldCgpXTsKK30KKworLSAodm9pZClzZXRFcnJvckxpc3Q6KE5T
QXJyYXkvKjxUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yPiovICopZXJyb3JMaXN0Cit7CisgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRV9JTl9BUlJBWShlcnJvckxpc3QsIFtUZXN0UHJv
dG9jb2xEYXRhYmFzZUVycm9yIGNsYXNzXSk7CisgICAgW3N1cGVyIHNldEpTT05BcnJheTp0b0pT
T05PYmplY3RBcnJheShlcnJvckxpc3QpIGZvcktleTpAImVycm9yTGlzdCJdOworfQorCistIChO
U0FycmF5Lyo8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4qLyAqKWVycm9yTGlzdAoreworICAg
IHJldHVybiB0b09iakNBcnJheTxUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yPihbc3VwZXIgSlNP
TkFycmF5Rm9yS2V5OkAiZXJyb3JMaXN0Il0pOworfQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlv
biBUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZQorCistIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilw
YXlsb2FkCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVy
biBuaWw7CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxv
YWRbQCJjb2x1bW5OYW1lcyJdLCBAImNvbHVtbk5hbWVzIik7CisgICAgc2VsZi5jb2x1bW5OYW1l
cyA9IHBheWxvYWRbQCJjb2x1bW5OYW1lcyJdOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9S
RVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiYnV0dG9ucyJdLCBAImJ1dHRvbnMiKTsKKyAgICBz
ZWxmLmJ1dHRvbnMgPSBwYXlsb2FkW0AiYnV0dG9ucyJdOworCisgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiZGlyZWN0aW9uYWxpdHkiXSwgQCJkaXJl
Y3Rpb25hbGl0eSIpOworICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVy
QnVuZGxlRGlyZWN0aW9uYWxpdHk+IGRpcmVjdGlvbmFsaXR5ID0gZnJvbVByb3RvY29sU3RyaW5n
PFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHk+KHBheWxv
YWRbQCJkaXJlY3Rpb25hbGl0eSJdKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9FTlVN
X1ZBTFVFKGRpcmVjdGlvbmFsaXR5LCBAImRpcmVjdGlvbmFsaXR5Iik7CisgICAgc2VsZi5kaXJl
Y3Rpb25hbGl0eSA9IGRpcmVjdGlvbmFsaXR5LnZhbHVlKCk7CisKKyAgICBUSFJPV19FWENFUFRJ
T05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJub3RlcyJdLCBAIm5vdGVzIik7Cisg
ICAgc2VsZi5ub3RlcyA9IHBheWxvYWRbQCJub3RlcyJdOworCisgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AidGltZXN0YW1wIl0sIEAidGltZXN0YW1w
Iik7CisgICAgc2VsZi50aW1lc3RhbXAgPSBbcGF5bG9hZFtAInRpbWVzdGFtcCJdIGRvdWJsZVZh
bHVlXTsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9h
ZFtAInZhbHVlcyJdLCBAInZhbHVlcyIpOworICAgIHNlbGYudmFsdWVzID0gcGF5bG9hZFtAInZh
bHVlcyJdOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXls
b2FkW0AicGF5bG9hZCJdLCBAInBheWxvYWQiKTsKKyAgICBzZWxmLnBheWxvYWQgPSBwYXlsb2Fk
W0AicGF5bG9hZCJdOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJU
WShwYXlsb2FkW0AiZXJyb3IiXSwgQCJlcnJvciIpOworICAgIHNlbGYuZXJyb3IgPSBbW1Rlc3RQ
cm90b2NvbERhdGFiYXNlRXJyb3IgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkW0AiZXJy
b3IiXV07CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxv
YWRbQCJlcnJvckxpc3QiXSwgQCJlcnJvckxpc3QiKTsKKyAgICBzZWxmLmVycm9yTGlzdCA9IG9i
amNBcnJheUZyb21QYXlsb2FkPFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I+KHBheWxvYWRbQCJl
cnJvckxpc3QiXSk7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKy0gKGluc3RhbmNldHlwZSlpbml0
V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilvYmplY3QKK3sKKyAg
ICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoSlNPTk9iamVjdDpbb2JqZWN0IHRvSlNPTk9i
amVjdF0uZ2V0KCldKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHJldHVybiBzZWxmOwor
fQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb2x1bW5OYW1lczooTlNBcnJheS8qPE5TU3Ry
aW5nPiovICopY29sdW1uTmFtZXMgYnV0dG9uczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopYnV0
dG9ucyBkaXJlY3Rpb25hbGl0eTooVGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGVE
aXJlY3Rpb25hbGl0eSlkaXJlY3Rpb25hbGl0eSBub3RlczooTlNTdHJpbmcgKilub3RlcyB0aW1l
c3RhbXA6KGRvdWJsZSl0aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKil2
YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZCBlcnJvcjooVGVz
dFByb3RvY29sRGF0YWJhc2VFcnJvciAqKWVycm9yIGVycm9yTGlzdDooTlNBcnJheS8qPFRlc3RQ
cm90b2NvbERhdGFiYXNlRXJyb3I+Ki8gKillcnJvckxpc3QKK3sKKyAgICBpZiAoIShzZWxmID0g
W3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfUkVRVUlSRURfUFJPUEVSVFkoY29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsKKyAg
ICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKGJ1dHRvbnMsIEAiYnV0dG9u
cyIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkobm90ZXMsIEAi
bm90ZXMiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHZhbHVl
cywgQCJ2YWx1ZXMiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZ
KHBheWxvYWQsIEAicGF5bG9hZCIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURf
UFJPUEVSVFkoZXJyb3IsIEAiZXJyb3IiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJ
UkVEX1BST1BFUlRZKGVycm9yTGlzdCwgQCJlcnJvckxpc3QiKTsKKyAgICBUSFJPV19FWENFUFRJ
T05fRk9SX0JBRF9UWVBFX0lOX0FSUkFZKGVycm9yTGlzdCwgW1Rlc3RQcm90b2NvbERhdGFiYXNl
RXJyb3IgY2xhc3NdKTsKKworICAgIHNlbGYuY29sdW1uTmFtZXMgPSBjb2x1bW5OYW1lczsKKyAg
ICBzZWxmLmJ1dHRvbnMgPSBidXR0b25zOworICAgIHNlbGYuZGlyZWN0aW9uYWxpdHkgPSBkaXJl
Y3Rpb25hbGl0eTsKKyAgICBzZWxmLm5vdGVzID0gbm90ZXM7CisgICAgc2VsZi50aW1lc3RhbXAg
PSB0aW1lc3RhbXA7CisgICAgc2VsZi52YWx1ZXMgPSB2YWx1ZXM7CisgICAgc2VsZi5wYXlsb2Fk
ID0gcGF5bG9hZDsKKyAgICBzZWxmLmVycm9yID0gZXJyb3I7CisgICAgc2VsZi5lcnJvckxpc3Qg
PSBlcnJvckxpc3Q7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClzZXRDb2x1bW5O
YW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMKK3sKKyAgICBbc3VwZXIg
c2V0SlNPTkFycmF5OnRvSlNPTlN0cmluZ0FycmF5KGNvbHVtbk5hbWVzKSBmb3JLZXk6QCJjb2x1
bW5OYW1lcyJdOworfQorCistIChOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcwor
eworICAgIHJldHVybiB0b09iakNTdHJpbmdBcnJheShbc3VwZXIgSlNPTkFycmF5Rm9yS2V5OkAi
Y29sdW1uTmFtZXMiXSk7Cit9CisKKy0gKHZvaWQpc2V0QnV0dG9uczooTlNBcnJheS8qPE5TU3Ry
aW5nPiovICopYnV0dG9ucworeworICAgIFtzdXBlciBzZXRKU09OQXJyYXk6dG9KU09OU3RyaW5n
QXJyYXkoYnV0dG9ucykgZm9yS2V5OkAiYnV0dG9ucyJdOworfQorCistIChOU0FycmF5Lyo8TlNT
dHJpbmc+Ki8gKilidXR0b25zCit7CisgICAgcmV0dXJuIHRvT2JqQ1N0cmluZ0FycmF5KFtzdXBl
ciBKU09OQXJyYXlGb3JLZXk6QCJidXR0b25zIl0pOworfQorCistICh2b2lkKXNldERpcmVjdGlv
bmFsaXR5OihUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5
KWRpcmVjdGlvbmFsaXR5Cit7CisgICAgW3N1cGVyIHNldFN0cmluZzp0b1Byb3RvY29sU3RyaW5n
KGRpcmVjdGlvbmFsaXR5KSBmb3JLZXk6QCJkaXJlY3Rpb25hbGl0eSJdOworfQorCistIChUZXN0
UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5KWRpcmVjdGlvbmFs
aXR5Cit7CisgICAgcmV0dXJuIGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xEYXRhYmFz
ZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5Pihbc3VwZXIgc3RyaW5nRm9yS2V5OkAiZGly
ZWN0aW9uYWxpdHkiXSkudmFsdWUoKTsKK30KKworLSAodm9pZClzZXROb3RlczooTlNTdHJpbmcg
Kilub3RlcworeworICAgIFtzdXBlciBzZXRTdHJpbmc6bm90ZXMgZm9yS2V5OkAibm90ZXMiXTsK
K30KKworLSAoTlNTdHJpbmcgKilub3RlcworeworICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9y
S2V5OkAibm90ZXMiXTsKK30KKworLSAodm9pZClzZXRUaW1lc3RhbXA6KGRvdWJsZSl0aW1lc3Rh
bXAKK3sKKyAgICBbc3VwZXIgc2V0RG91YmxlOnRpbWVzdGFtcCBmb3JLZXk6QCJ0aW1lc3RhbXAi
XTsKK30KKworLSAoZG91YmxlKXRpbWVzdGFtcAoreworICAgIHJldHVybiBbc3VwZXIgZG91Ymxl
Rm9yS2V5OkAidGltZXN0YW1wIl07Cit9CisKKy0gKHZvaWQpc2V0VmFsdWVzOihSV0lQcm90b2Nv
bEpTT05PYmplY3QgKil2YWx1ZXMKK3sKKyAgICBbc3VwZXIgc2V0T2JqZWN0OnZhbHVlcyBmb3JL
ZXk6QCJ2YWx1ZXMiXTsKK30KKworLSAoUldJUHJvdG9jb2xKU09OT2JqZWN0ICopdmFsdWVzCit7
CisgICAgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvYmplY3QgPSBbc3VwZXIgb2JqZWN0Rm9yS2V5
OkAidmFsdWVzIl07CisgICAgaWYgKCFvYmplY3QpCisgICAgICAgIHJldHVybiBuaWw7CisgICAg
cmV0dXJuIFtbUldJUHJvdG9jb2xKU09OT2JqZWN0IGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6
W1tzdXBlciBvYmplY3RGb3JLZXk6QCJ2YWx1ZXMiXSB0b0pTT05PYmplY3RdLmdldCgpXTsKK30K
KworLSAodm9pZClzZXRQYXlsb2FkOihSV0lQcm90b2NvbEpTT05PYmplY3QgKilwYXlsb2FkCit7
CisgICAgW3N1cGVyIHNldE9iamVjdDpwYXlsb2FkIGZvcktleTpAInBheWxvYWQiXTsKK30KKwor
LSAoUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZAoreworICAgIFJXSVByb3RvY29sSlNP
Tk9iamVjdCAqb2JqZWN0ID0gW3N1cGVyIG9iamVjdEZvcktleTpAInBheWxvYWQiXTsKKyAgICBp
ZiAoIW9iamVjdCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICByZXR1cm4gW1tSV0lQcm90b2Nv
bEpTT05PYmplY3QgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDpbW3N1cGVyIG9iamVjdEZvcktl
eTpAInBheWxvYWQiXSB0b0pTT05PYmplY3RdLmdldCgpXTsKK30KKworLSAodm9pZClzZXRFcnJv
cjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKWVycm9yCit7CisgICAgW3N1cGVyIHNldE9i
amVjdDplcnJvciBmb3JLZXk6QCJlcnJvciJdOworfQorCistIChUZXN0UHJvdG9jb2xEYXRhYmFz
ZUVycm9yICopZXJyb3IKK3sKKyAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9iamVjdCA9IFtz
dXBlciBvYmplY3RGb3JLZXk6QCJlcnJvciJdOworICAgIGlmICghb2JqZWN0KQorICAgICAgICBy
ZXR1cm4gbmlsOworICAgIHJldHVybiBbW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgYWxsb2Nd
IGluaXRXaXRoSlNPTk9iamVjdDpbW3N1cGVyIG9iamVjdEZvcktleTpAImVycm9yIl0gdG9KU09O
T2JqZWN0XS5nZXQoKV07Cit9CisKKy0gKHZvaWQpc2V0RXJyb3JMaXN0OihOU0FycmF5Lyo8VGVz
dFByb3RvY29sRGF0YWJhc2VFcnJvcj4qLyAqKWVycm9yTGlzdAoreworICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfQkFEX1RZUEVfSU5fQVJSQVkoZXJyb3JMaXN0LCBbVGVzdFByb3RvY29sRGF0YWJh
c2VFcnJvciBjbGFzc10pOworICAgIFtzdXBlciBzZXRKU09OQXJyYXk6dG9KU09OT2JqZWN0QXJy
YXkoZXJyb3JMaXN0KSBmb3JLZXk6QCJlcnJvckxpc3QiXTsKK30KKworLSAoTlNBcnJheS8qPFRl
c3RQcm90b2NvbERhdGFiYXNlRXJyb3I+Ki8gKillcnJvckxpc3QKK3sKKyAgICByZXR1cm4gdG9P
YmpDQXJyYXk8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4oW3N1cGVyIEpTT05BcnJheUZvcktl
eTpAImVycm9yTGlzdCJdKTsKK30KKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3Rv
Y29sRGF0YWJhc2VPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzCisKKy0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlk
PiAqKXBheWxvYWQKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAg
cmV0dXJuIG5pbDsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFko
cGF5bG9hZFtAImludGVnZXIiXSwgQCJpbnRlZ2VyIik7CisgICAgc2VsZi5pbnRlZ2VyID0gcGF5
bG9hZFtAImludGVnZXIiXTsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJP
UEVSVFkocGF5bG9hZFtAImFycmF5Il0sIEAiYXJyYXkiKTsKKyAgICBzZWxmLmFycmF5ID0gcGF5
bG9hZFtAImFycmF5Il07CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BF
UlRZKHBheWxvYWRbQCJzdHJpbmciXSwgQCJzdHJpbmciKTsKKyAgICBzZWxmLnN0cmluZyA9IHBh
eWxvYWRbQCJzdHJpbmciXTsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJP
UEVSVFkocGF5bG9hZFtAInZhbHVlIl0sIEAidmFsdWUiKTsKKyAgICBzZWxmLnZhbHVlID0gcGF5
bG9hZFtAInZhbHVlIl07CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BF
UlRZKHBheWxvYWRbQCJvYmplY3QiXSwgQCJvYmplY3QiKTsKKyAgICBzZWxmLm9iamVjdCA9IHBh
eWxvYWRbQCJvYmplY3QiXTsKKworICAgIHJldHVybiBzZWxmOworfQorLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9iamVjdAor
eworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmplY3QgdG9K
U09OT2JqZWN0XS5nZXQoKV0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgcmV0dXJuIHNl
bGY7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aEludGVnZXI6KE5TU3RyaW5nICopaW50
ZWdlciBhcnJheTooTlNTdHJpbmcgKilhcnJheSBzdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nIHZh
bHVlOihOU1N0cmluZyAqKXZhbHVlIG9iamVjdDooTlNTdHJpbmcgKilvYmplY3QKK3sKKyAgICBp
ZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkoaW50ZWdlciwgQCJpbnRlZ2VyIik7
CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShhcnJheSwgQCJhcnJh
eSIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkoc3RyaW5nLCBA
InN0cmluZyIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkodmFs
dWUsIEAidmFsdWUiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZ
KG9iamVjdCwgQCJvYmplY3QiKTsKKworICAgIHNlbGYuaW50ZWdlciA9IGludGVnZXI7CisgICAg
c2VsZi5hcnJheSA9IGFycmF5OworICAgIHNlbGYuc3RyaW5nID0gc3RyaW5nOworICAgIHNlbGYu
dmFsdWUgPSB2YWx1ZTsKKyAgICBzZWxmLm9iamVjdCA9IG9iamVjdDsKKworICAgIHJldHVybiBz
ZWxmOworfQorCistICh2b2lkKXNldEludGVnZXI6KE5TU3RyaW5nICopaW50ZWdlcgoreworICAg
IFtzdXBlciBzZXRTdHJpbmc6aW50ZWdlciBmb3JLZXk6QCJpbnRlZ2VyIl07Cit9CisKKy0gKE5T
U3RyaW5nICopaW50ZWdlcgoreworICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAiaW50
ZWdlciJdOworfQorCistICh2b2lkKXNldEFycmF5OihOU1N0cmluZyAqKWFycmF5Cit7CisgICAg
W3N1cGVyIHNldFN0cmluZzphcnJheSBmb3JLZXk6QCJhcnJheSJdOworfQorCistIChOU1N0cmlu
ZyAqKWFycmF5Cit7CisgICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJhcnJheSJdOwor
fQorCistICh2b2lkKXNldFN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcKK3sKKyAgICBbc3VwZXIg
c2V0U3RyaW5nOnN0cmluZyBmb3JLZXk6QCJzdHJpbmciXTsKK30KKworLSAoTlNTdHJpbmcgKilz
dHJpbmcKK3sKKyAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAInN0cmluZyJdOworfQor
CistICh2b2lkKXNldFZhbHVlOihOU1N0cmluZyAqKXZhbHVlCit7CisgICAgW3N1cGVyIHNldFN0
cmluZzp2YWx1ZSBmb3JLZXk6QCJ2YWx1ZSJdOworfQorCistIChOU1N0cmluZyAqKXZhbHVlCit7
CisgICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJ2YWx1ZSJdOworfQorCistICh2b2lk
KXNldE9iamVjdDooTlNTdHJpbmcgKilvYmplY3QKK3sKKyAgICBbc3VwZXIgc2V0U3RyaW5nOm9i
amVjdCBmb3JLZXk6QCJvYmplY3QiXTsKK30KKworLSAoTlNTdHJpbmcgKilvYmplY3QKK3sKKyAg
ICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAIm9iamVjdCJdOworfQorCitAZW5kCisKK0Bp
bXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xEYXRhYmFzZUR1bW15T2JqZWN0CisKKy0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICos
IGlkPiAqKXBheWxvYWQKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAg
ICAgcmV0dXJuIG5pbDsKKworICAgIHJldHVybiBzZWxmOworfQorLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9iamVjdAorewor
ICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmplY3QgdG9KU09O
T2JqZWN0XS5nZXQoKV0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgcmV0dXJuIHNlbGY7
Cit9CisKK0BlbmQKKworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVGVzdFBhcmFtZXRl
ckJ1bmRsZQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGlj
dGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCit7CisgICAgaWYgKCEoc2VsZiA9IFtz
dXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBUSFJPV19FWENFUFRJT05f
Rk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJkaXJlY3Rpb25hbGl0eSJdLCBAImRpcmVj
dGlvbmFsaXR5Iik7CisgICAgT3B0aW9uYWw8VGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRs
ZURpcmVjdGlvbmFsaXR5PiBkaXJlY3Rpb25hbGl0eSA9IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0
UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHk+KHBheWxvYWRbQCJkaXJl
Y3Rpb25hbGl0eSJdKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9FTlVNX1ZBTFVFKGRp
cmVjdGlvbmFsaXR5LCBAImRpcmVjdGlvbmFsaXR5Iik7CisgICAgc2VsZi5kaXJlY3Rpb25hbGl0
eSA9IGRpcmVjdGlvbmFsaXR5LnZhbHVlKCk7CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JF
UVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJidXR0b25zIl0sIEAiYnV0dG9ucyIpOworICAgIHNl
bGYuYnV0dG9ucyA9IHBheWxvYWRbQCJidXR0b25zIl07CisKKyAgICBUSFJPV19FWENFUFRJT05f
Rk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJjb2x1bW5OYW1lcyJdLCBAImNvbHVtbk5h
bWVzIik7CisgICAgc2VsZi5jb2x1bW5OYW1lcyA9IHBheWxvYWRbQCJjb2x1bW5OYW1lcyJdOwor
CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0Aibm90
ZXMiXSwgQCJub3RlcyIpOworICAgIHNlbGYubm90ZXMgPSBwYXlsb2FkW0Aibm90ZXMiXTsKKwor
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAInRpbWVz
dGFtcCJdLCBAInRpbWVzdGFtcCIpOworICAgIHNlbGYudGltZXN0YW1wID0gW3BheWxvYWRbQCJ0
aW1lc3RhbXAiXSBkb3VibGVWYWx1ZV07CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJ
UkVEX1BST1BFUlRZKHBheWxvYWRbQCJ2YWx1ZXMiXSwgQCJ2YWx1ZXMiKTsKKyAgICBzZWxmLnZh
bHVlcyA9IHBheWxvYWRbQCJ2YWx1ZXMiXTsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVR
VUlSRURfUFJPUEVSVFkocGF5bG9hZFtAInBheWxvYWQiXSwgQCJwYXlsb2FkIik7CisgICAgc2Vs
Zi5wYXlsb2FkID0gcGF5bG9hZFtAInBheWxvYWQiXTsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImVycm9yIl0sIEAiZXJyb3IiKTsKKyAgICBz
ZWxmLmVycm9yID0gW1tUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGFsbG9jXSBpbml0V2l0aFBh
eWxvYWQ6cGF5bG9hZFtAImVycm9yIl1dOworCisgICAgcmV0dXJuIHNlbGY7Cit9CistIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICop
b2JqZWN0Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEpTT05PYmplY3Q6W29i
amVjdCB0b0pTT05PYmplY3RdLmdldCgpXSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBy
ZXR1cm4gc2VsZjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRGlyZWN0aW9uYWxpdHk6
KFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSlkaXJlY3Rpb25h
bGl0eSBidXR0b25zOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilidXR0b25zIGNvbHVtbk5hbWVz
OihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcyBub3RlczooTlNTdHJpbmcgKilu
b3RlcyB0aW1lc3RhbXA6KGRvdWJsZSl0aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90b2NvbEpTT05P
YmplY3QgKil2YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZCBl
cnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKWVycm9yCit7CisgICAgaWYgKCEoc2Vs
ZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBUSFJPV19FWENF
UFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKGJ1dHRvbnMsIEAiYnV0dG9ucyIpOworICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkoY29sdW1uTmFtZXMsIEAiY29sdW1u
TmFtZXMiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKG5vdGVz
LCBAIm5vdGVzIik7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWSh2
YWx1ZXMsIEAidmFsdWVzIik7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9Q
RVJUWShwYXlsb2FkLCBAInBheWxvYWQiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJ
UkVEX1BST1BFUlRZKGVycm9yLCBAImVycm9yIik7CisKKyAgICBzZWxmLmRpcmVjdGlvbmFsaXR5
ID0gZGlyZWN0aW9uYWxpdHk7CisgICAgc2VsZi5idXR0b25zID0gYnV0dG9uczsKKyAgICBzZWxm
LmNvbHVtbk5hbWVzID0gY29sdW1uTmFtZXM7CisgICAgc2VsZi5ub3RlcyA9IG5vdGVzOworICAg
IHNlbGYudGltZXN0YW1wID0gdGltZXN0YW1wOworICAgIHNlbGYudmFsdWVzID0gdmFsdWVzOwor
ICAgIHNlbGYucGF5bG9hZCA9IHBheWxvYWQ7CisgICAgc2VsZi5lcnJvciA9IGVycm9yOworCisg
ICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpc2V0RGlyZWN0aW9uYWxpdHk6KFRlc3RQcm90
b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSlkaXJlY3Rpb25hbGl0eQorewor
ICAgIFtzdXBlciBzZXRTdHJpbmc6dG9Qcm90b2NvbFN0cmluZyhkaXJlY3Rpb25hbGl0eSkgZm9y
S2V5OkAiZGlyZWN0aW9uYWxpdHkiXTsKK30KKworLSAoVGVzdFByb3RvY29sVGVzdFBhcmFtZXRl
ckJ1bmRsZURpcmVjdGlvbmFsaXR5KWRpcmVjdGlvbmFsaXR5Cit7CisgICAgcmV0dXJuIGZyb21Q
cm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxp
dHk+KFtzdXBlciBzdHJpbmdGb3JLZXk6QCJkaXJlY3Rpb25hbGl0eSJdKS52YWx1ZSgpOworfQor
CistICh2b2lkKXNldEJ1dHRvbnM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWJ1dHRvbnMKK3sK
KyAgICBbc3VwZXIgc2V0SlNPTkFycmF5OnRvSlNPTlN0cmluZ0FycmF5KGJ1dHRvbnMpIGZvcktl
eTpAImJ1dHRvbnMiXTsKK30KKworLSAoTlNBcnJheS8qPE5TU3RyaW5nPiovICopYnV0dG9ucwor
eworICAgIHJldHVybiB0b09iakNTdHJpbmdBcnJheShbc3VwZXIgSlNPTkFycmF5Rm9yS2V5OkAi
YnV0dG9ucyJdKTsKK30KKworLSAodm9pZClzZXRDb2x1bW5OYW1lczooTlNBcnJheS8qPE5TU3Ry
aW5nPiovICopY29sdW1uTmFtZXMKK3sKKyAgICBbc3VwZXIgc2V0SlNPTkFycmF5OnRvSlNPTlN0
cmluZ0FycmF5KGNvbHVtbk5hbWVzKSBmb3JLZXk6QCJjb2x1bW5OYW1lcyJdOworfQorCistIChO
U0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcworeworICAgIHJldHVybiB0b09iakNT
dHJpbmdBcnJheShbc3VwZXIgSlNPTkFycmF5Rm9yS2V5OkAiY29sdW1uTmFtZXMiXSk7Cit9CisK
Ky0gKHZvaWQpc2V0Tm90ZXM6KE5TU3RyaW5nICopbm90ZXMKK3sKKyAgICBbc3VwZXIgc2V0U3Ry
aW5nOm5vdGVzIGZvcktleTpAIm5vdGVzIl07Cit9CisKKy0gKE5TU3RyaW5nICopbm90ZXMKK3sK
KyAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAIm5vdGVzIl07Cit9CisKKy0gKHZvaWQp
c2V0VGltZXN0YW1wOihkb3VibGUpdGltZXN0YW1wCit7CisgICAgW3N1cGVyIHNldERvdWJsZTp0
aW1lc3RhbXAgZm9yS2V5OkAidGltZXN0YW1wIl07Cit9CisKKy0gKGRvdWJsZSl0aW1lc3RhbXAK
K3sKKyAgICByZXR1cm4gW3N1cGVyIGRvdWJsZUZvcktleTpAInRpbWVzdGFtcCJdOworfQorCist
ICh2b2lkKXNldFZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopdmFsdWVzCit7CisgICAg
W3N1cGVyIHNldE9iamVjdDp2YWx1ZXMgZm9yS2V5OkAidmFsdWVzIl07Cit9CisKKy0gKFJXSVBy
b3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcworeworICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAq
b2JqZWN0ID0gW3N1cGVyIG9iamVjdEZvcktleTpAInZhbHVlcyJdOworICAgIGlmICghb2JqZWN0
KQorICAgICAgICByZXR1cm4gbmlsOworICAgIHJldHVybiBbW1JXSVByb3RvY29sSlNPTk9iamVj
dCBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0Oltbc3VwZXIgb2JqZWN0Rm9yS2V5OkAidmFsdWVz
Il0gdG9KU09OT2JqZWN0XS5nZXQoKV07Cit9CisKKy0gKHZvaWQpc2V0UGF5bG9hZDooUldJUHJv
dG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZAoreworICAgIFtzdXBlciBzZXRPYmplY3Q6cGF5bG9h
ZCBmb3JLZXk6QCJwYXlsb2FkIl07Cit9CisKKy0gKFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBh
eWxvYWQKK3sKKyAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9iamVjdCA9IFtzdXBlciBvYmpl
Y3RGb3JLZXk6QCJwYXlsb2FkIl07CisgICAgaWYgKCFvYmplY3QpCisgICAgICAgIHJldHVybiBu
aWw7CisgICAgcmV0dXJuIFtbUldJUHJvdG9jb2xKU09OT2JqZWN0IGFsbG9jXSBpbml0V2l0aEpT
T05PYmplY3Q6W1tzdXBlciBvYmplY3RGb3JLZXk6QCJwYXlsb2FkIl0gdG9KU09OT2JqZWN0XS5n
ZXQoKV07Cit9CisKKy0gKHZvaWQpc2V0RXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3Ig
KillcnJvcgoreworICAgIFtzdXBlciBzZXRPYmplY3Q6ZXJyb3IgZm9yS2V5OkAiZXJyb3IiXTsK
K30KKworLSAoVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKWVycm9yCit7CisgICAgUldJUHJv
dG9jb2xKU09OT2JqZWN0ICpvYmplY3QgPSBbc3VwZXIgb2JqZWN0Rm9yS2V5OkAiZXJyb3IiXTsK
KyAgICBpZiAoIW9iamVjdCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICByZXR1cm4gW1tUZXN0
UHJvdG9jb2xEYXRhYmFzZUVycm9yIGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6W1tzdXBlciBv
YmplY3RGb3JLZXk6QCJlcnJvciJdIHRvSlNPTk9iamVjdF0uZ2V0KCldOworfQorCitAZW5kCisK
KworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtcmVx
dWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1yZXF1aXJpbmctcnVudGltZS1j
YXN0cy5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u
ZDljOTc2ZWZlMzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0
cy5qc29uLXJlc3VsdApAQCAtMCwwICsxLDE2MTQgQEAKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0
b3JCYWNrZW5kQ29tbWFuZHMuanMKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0
eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworLy8gVGVzdAorSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRv
bWFpbigiVGVzdCIsIG51bGwpOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIlRlc3Qu
VW5jYXN0ZWRBbmltYWxzIiwge1BpZ3M6ICJQaWdzIiwgQ293czogIkNvd3MiLCBDYXRzOiAiQ2F0
cyIsIEhlbnM6ICJIZW5zIn0pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIlRlc3Qu
Q2FzdGVkQW5pbWFscyIsIHtEdWNrczogIkR1Y2tzIiwgSGVuczogIkhlbnMiLCBDcm93czogIkNy
b3dzIiwgRmxhbWluZ29zOiAiRmxhbWluZ29zIn0pOworSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0
ZURvbWFpbigiVGVzdCIsIG51bGwpOworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29t
bWFuZHMuanMKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hl
cnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1
bnRpbWUtY2FzdHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0
b3IgeworCitjbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAg
dm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlz
cGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQor
ICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJu
IG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KK3ByaXZhdGU6CisgICAgUmVmUHRyPEJhY2tl
bmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOworfTsKKworCisKKworfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKKyMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVy
cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3R5cGVkZWYgU3RyaW5n
IEVycm9yU3RyaW5nOworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZp
bGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tl
bmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBl
LXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RCYWNr
ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZy
b250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3
dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNp
ZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyNpbmNsdWRlICJUZXN0
QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKwor
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNw
YXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1l
LWNhc3RzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVk
ZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwor
bmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEZyb250ZW5kUm91dGVyOworCit9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMu
aAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5q
c29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVy
cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4K
KyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwor
CisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKworCisvLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4K
K25hbWVzcGFjZSBUZXN0IHsKK2NsYXNzIFR5cGVOZWVkaW5nQ2FzdDsKK2NsYXNzIFJlY3Vyc2l2
ZU9iamVjdDE7CitjbGFzcyBSZWN1cnNpdmVPYmplY3QyOworZW51bSBjbGFzcyBVbmNhc3RlZEFu
aW1hbHM7CitlbnVtIGNsYXNzIENhc3RlZEFuaW1hbHM7Cit9IC8vIFRlc3QKKy8vIEVuZCBvZiBm
b3J3YXJkIGRlY2xhcmF0aW9ucy4KKworCisvLyBUeXBlZGVmcy4KK25hbWVzcGFjZSBUZXN0IHsK
K3R5cGVkZWYgaW50IENhc3RlZE9iamVjdElkOwordHlwZWRlZiBpbnQgVW5jYXN0ZWRPYmplY3RJ
ZDsKK30gLy8gVGVzdAorLy8gRW5kIG9mIHR5cGVkZWZzLgorCituYW1lc3BhY2UgVGVzdEhlbHBl
cnMgeworCitTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpOworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFsdWUpCit7
CisgICAgcmV0dXJuIGdldEVudW1Db25zdGFudFZhbHVlKHN0YXRpY19jYXN0PGludD4oZW51bVZh
bHVlKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCisKK25hbWVzcGFjZSBUZXN0
IHsKKy8qIEEgZHVtbXkgdHlwZSB0aGF0IHJlcXVpcmVzIHJ1bnRpbWUgY2FzdHMsIGFuZCBmb3Jj
ZXMgbm9uLXByaW1pdGl2ZSByZWZlcmVuY2VkIHR5cGVzIHRvIGFsc28gZW1pdCBydW50aW1lIGNh
c3QgaGVscGVycy4gKi8KK2NsYXNzIFR5cGVOZWVkaW5nQ2FzdCA6IHB1YmxpYyBKU09OOjpPYmpl
Y3RCYXNlIHsKK3B1YmxpYzoKKyAgICBlbnVtIHsKKyAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAor
ICAgICAgICBTdHJpbmdTZXQgPSAxIDw8IDAsCisgICAgICAgIE51bWJlclNldCA9IDEgPDwgMSwK
KyAgICAgICAgQW5pbWFsc1NldCA9IDEgPDwgMiwKKyAgICAgICAgSWRTZXQgPSAxIDw8IDMsCisg
ICAgICAgIFRyZWVTZXQgPSAxIDw8IDQsCisgICAgICAgIEFsbEZpZWxkc1NldCA9IChTdHJpbmdT
ZXQgfCBOdW1iZXJTZXQgfCBBbmltYWxzU2V0IHwgSWRTZXQgfCBUcmVlU2V0KQorICAgIH07CisK
KyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CisgICAgY2xhc3MgQnVpbGRlciB7CisgICAgcHJpdmF0
ZToKKyAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7CisKKyAgICAgICAgdGVt
cGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUg
fCBTVEVQPio+KHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcihSZWY8LypUeXBl
TmVlZGluZ0Nhc3QqL0pTT046Ok9iamVjdD4mJiBvYmplY3QpCisgICAgICAgICAgICA6IG1fcmVz
dWx0KFdURk1vdmUob2JqZWN0KSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0
ZSk7CisgICAgICAgIH0KKyAgICAgICAgZnJpZW5kIGNsYXNzIFR5cGVOZWVkaW5nQ2FzdDsKKyAg
ICBwdWJsaWM6CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFN0cmluZ1NldD4mIHNldFN0cmlu
Zyhjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgU3RyaW5nU2V0KSwgcHJvcGVydHlfc3RyaW5nX2FscmVhZHlfc2V0KTsK
KyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInN0cmluZyJfcywgdmFsdWUpOworICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTdHJpbmdTZXQ+KCk7CisgICAgICAgIH0KKworICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgTnVtYmVyU2V0PiYgc2V0TnVtYmVyKGludCB2YWx1ZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE51bWJlclNldCks
IHByb3BlcnR5X251bWJlcl9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
SW50ZWdlcigibnVtYmVyIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PE51bWJlclNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBBbmlt
YWxzU2V0PiYgc2V0QW5pbWFscyhJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmlt
YWxzIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRF
ICYgQW5pbWFsc1NldCksIHByb3BlcnR5X2FuaW1hbHNfYWxyZWFkeV9zZXQpOworICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldFN0cmluZygiYW5pbWFscyJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6
VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKHZhbHVlKSk7CisgICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPEFuaW1hbHNTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgSWRTZXQ+JiBzZXRJZChpbnQgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBJZFNldCksIHByb3BlcnR5X2lkX2FscmVhZHlf
c2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2VyKCJpZCJfcywgdmFsdWUpOwor
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxJZFNldD4oKTsKKyAgICAgICAgfQorCisgICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBUcmVlU2V0PiYgc2V0VHJlZShSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT4gdmFsdWUpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUcmVlU2V0KSwgcHJvcGVydHlfdHJlZV9h
bHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJ0cmVlIl9zLCB2
YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFRyZWVTZXQ+KCk7CisgICAgICAg
IH0KKworICAgICAgICBSZWY8VHlwZU5lZWRpbmdDYXN0PiByZWxlYXNlKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRf
aXNfbm90X3JlYWR5KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihUeXBlTmVl
ZGluZ0Nhc3QpID09IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7CisKKyAgICAg
ICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25SZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9u
TnVsbCgpOworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBXVEZNb3ZlKCpyZWludGVycHJldF9j
YXN0PFJlZjxUeXBlTmVlZGluZ0Nhc3Q+Kj4oJmpzb25SZXN1bHQpKTsKKyAgICAgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyoKKyAgICAgKiBTeW50aGV0
aWMgY29uc3RydWN0b3I6CisgICAgICogUmVmPFR5cGVOZWVkaW5nQ2FzdD4gcmVzdWx0ID0gVHlw
ZU5lZWRpbmdDYXN0OjpjcmVhdGUoKQorICAgICAqICAgICAuc2V0U3RyaW5nKC4uLikKKyAgICAg
KiAgICAgLnNldE51bWJlciguLi4pCisgICAgICogICAgIC5zZXRBbmltYWxzKC4uLikKKyAgICAg
KiAgICAgLnNldElkKC4uLikKKyAgICAgKiAgICAgLnNldFRyZWUoLi4uKQorICAgICAqICAgICAu
cmVsZWFzZSgpOworICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVh
dGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9i
amVjdDo6Y3JlYXRlKCkpOworICAgIH0KK307CisKKy8qICAqLworZW51bSBjbGFzcyBVbmNhc3Rl
ZEFuaW1hbHMgeworICAgIFBpZ3MgPSA0LAorICAgIENvd3MgPSA1LAorICAgIENhdHMgPSA2LAor
ICAgIEhlbnMgPSAxLAorfTsgLy8gZW51bSBjbGFzcyBVbmNhc3RlZEFuaW1hbHMKKy8qICAqLwor
ZW51bSBjbGFzcyBDYXN0ZWRBbmltYWxzIHsKKyAgICBEdWNrcyA9IDAsCisgICAgSGVucyA9IDEs
CisgICAgQ3Jvd3MgPSAyLAorICAgIEZsYW1pbmdvcyA9IDMsCit9OyAvLyBlbnVtIGNsYXNzIENh
c3RlZEFuaW1hbHMKK2NsYXNzIFJlY3Vyc2l2ZU9iamVjdDEgOiBwdWJsaWMgSlNPTjo6T2JqZWN0
QmFzZSB7CitwdWJsaWM6CisgICAgZW51bSB7CisgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKKyAg
ICAgICAgQWxsRmllbGRzU2V0ID0gMAorICAgIH07CisKKyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+
CisgICAgY2xhc3MgQnVpbGRlciB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPEpTT046
Ok9iamVjdD4gbV9yZXN1bHQ7CisKKyAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8
U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
ICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOworICAgICAg
ICB9CisKKyAgICAgICAgQnVpbGRlcihSZWY8LypSZWN1cnNpdmVPYmplY3QxKi9KU09OOjpPYmpl
Y3Q+JiYgb2JqZWN0KQorICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0
LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAgICAgICB9CisgICAgICAg
IGZyaWVuZCBjbGFzcyBSZWN1cnNpdmVPYmplY3QxOworICAgIHB1YmxpYzoKKworICAgICAgICBS
ZWY8UmVjdXJzaXZlT2JqZWN0MT4gcmVsZWFzZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7
CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoUmVjdXJzaXZlT2JqZWN0MSkgPT0g
c2l6ZW9mKEpTT046Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsKKworICAgICAgICAgICAgUmVmPEpT
T046Ok9iamVjdD4ganNvblJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7CisgICAg
ICAgICAgICBhdXRvIHJlc3VsdCA9IFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPFJlY3Vy
c2l2ZU9iamVjdDE+Kj4oJmpzb25SZXN1bHQpKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyoKKyAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0
b3I6CisgICAgICogUmVmPFJlY3Vyc2l2ZU9iamVjdDE+IHJlc3VsdCA9IFJlY3Vyc2l2ZU9iamVj
dDE6OmNyZWF0ZSgpCisgICAgICogICAgIC5yZWxlYXNlKCk7CisgICAgICovCisgICAgc3RhdGlj
IEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gQnVp
bGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7CisgICAgfQorCisgICAg
dm9pZCBzZXRPYmooUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9i
amVjdDI+IHZhbHVlKQorICAgIHsKKyAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0T2JqZWN0
KCJvYmoiX3MsIFdURk1vdmUodmFsdWUpKTsKKyAgICB9Cit9OworCitjbGFzcyBSZWN1cnNpdmVP
YmplY3QyIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgeworcHVibGljOgorICAgIGVudW0gewor
ICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCisgICAgICAgIEFsbEZpZWxkc1NldCA9IDAKKyAgICB9
OworCisgICAgdGVtcGxhdGU8aW50IFNUQVRFPgorICAgIGNsYXNzIEJ1aWxkZXIgeworICAgIHBy
aXZhdGU6CisgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVzdWx0OworCisgICAgICAg
IHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNU
QVRFIHwgU1RFUD4qPih0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXIoUmVmPC8q
UmVjdXJzaXZlT2JqZWN0MiovSlNPTjo6T2JqZWN0PiYmIG9iamVjdCkKKyAgICAgICAgICAgIDog
bV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxF
X0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0
X3N0YXRlKTsKKyAgICAgICAgfQorICAgICAgICBmcmllbmQgY2xhc3MgUmVjdXJzaXZlT2JqZWN0
MjsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgUmVmPFJlY3Vyc2l2ZU9iamVjdDI+IHJlbGVhc2Uo
KQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVs
ZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
c2l6ZW9mKFJlY3Vyc2l2ZU9iamVjdDIpID09IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5ub3Rf
Y2FzdCk7CisKKyAgICAgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25SZXN1bHQgPSBtX3Jl
c3VsdC5yZWxlYXNlTm9uTnVsbCgpOworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBXVEZNb3Zl
KCpyZWludGVycHJldF9jYXN0PFJlZjxSZWN1cnNpdmVPYmplY3QyPio+KCZqc29uUmVzdWx0KSk7
CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgfTsKKworICAgIC8q
CisgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgorICAgICAqIFJlZjxSZWN1cnNpdmVPYmpl
Y3QyPiByZXN1bHQgPSBSZWN1cnNpdmVPYmplY3QyOjpjcmVhdGUoKQorICAgICAqICAgICAucmVs
ZWFzZSgpOworICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVj
dDo6Y3JlYXRlKCkpOworICAgIH0KKworICAgIHZvaWQgc2V0T2JqKFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QxPiB2YWx1ZSkKKyAgICB7CisgICAgICAg
IEpTT046Ok9iamVjdEJhc2U6OnNldE9iamVjdCgib2JqIl9zLCBXVEZNb3ZlKHZhbHVlKSk7Cisg
ICAgfQorfTsKKworfSAvLyBUZXN0CisKK3RlbXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8
SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz4geworc3RhdGljIHZvaWQg
YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSlNPTjo6VmFsdWUqKTsKK307Cit0ZW1wbGF0ZTw+
IHN0cnVjdCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVk
aW5nQ2FzdD4geworc3RhdGljIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBl
TmVlZGluZ0Nhc3Q+IHJ1bnRpbWVDYXN0KFJlZlB0cjxKU09OOjpWYWx1ZT4mJiB2YWx1ZSk7Citz
dGF0aWMgdm9pZCBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShKU09OOjpWYWx1ZSopOworfTsK
K3RlbXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVz
dDo6UmVjdXJzaXZlT2JqZWN0MT4geworc3RhdGljIHZvaWQgYXNzZXJ0VmFsdWVIYXNFeHBlY3Rl
ZFR5cGUoSlNPTjo6VmFsdWUqKTsKK307Cit0ZW1wbGF0ZTw+IHN0cnVjdCBCaW5kaW5nVHJhaXRz
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDI+IHsKK3N0YXRpYyB2
b2lkIGFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEpTT046OlZhbHVlKik7Cit9OworCituYW1l
c3BhY2UgVGVzdEhlbHBlcnMgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBQcm90b2NvbEVudW1UeXBl
PgorT3B0aW9uYWw8UHJvdG9jb2xFbnVtVHlwZT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nKGNv
bnN0IFN0cmluZyYpOworCisvLyBFbnVtcyBpbiB0aGUgJ1Rlc3QnIERvbWFpbgordGVtcGxhdGU8
PgorT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzPiBw
YXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VW5jYXN0
ZWRBbmltYWxzPihjb25zdCBTdHJpbmcmKTsKK3RlbXBsYXRlPD4KK09wdGlvbmFsPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmlu
ZzxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPihjb25zdCBTdHJpbmcm
KTsKKworfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9j
b2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7CisKKy8vIEhhc2ggZGVjbGFyYXRp
b25zIGluIHRoZSAnVGVzdCcgRG9tYWluCit0ZW1wbGF0ZTw+CitzdHJ1Y3QgRGVmYXVsdEhhc2g8
SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzPiB7CisgICAgdHlwZWRl
ZiBJbnRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFscz4gSGFz
aDsKK307Cit0ZW1wbGF0ZTw+CitzdHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6VGVzdDo6Q2FzdGVkQW5pbWFscz4geworICAgIHR5cGVkZWYgSW50SGFzaDxJbnNwZWN0b3I6
OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPiBIYXNoOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV1RGCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorCisjIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KKy8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKworI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisK
K25hbWVzcGFjZSBQcm90b2NvbCB7CisKK25hbWVzcGFjZSBUZXN0SGVscGVycyB7CisKK3N0YXRp
YyBjb25zdCBjaGFyKiBjb25zdCBlbnVtX2NvbnN0YW50X3ZhbHVlc1tdID0geworICAgICJEdWNr
cyIsCisgICAgIkhlbnMiLAorICAgICJDcm93cyIsCisgICAgIkZsYW1pbmdvcyIsCisgICAgIlBp
Z3MiLAorICAgICJDb3dzIiwKKyAgICAiQ2F0cyIsCit9OworCitTdHJpbmcgZ2V0RW51bUNvbnN0
YW50VmFsdWUoaW50IGNvZGUpIHsKKyAgICByZXR1cm4gZW51bV9jb25zdGFudF92YWx1ZXNbY29k
ZV07Cit9CisKKy8vIEVudW1zIGluIHRoZSAnVGVzdCcgRG9tYWluCit0ZW1wbGF0ZTw+CitPcHRp
b25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM+IHBhcnNlRW51
bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1h
bHM+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCit7CisgICAgc3RhdGljIGNvbnN0IHNp
emVfdCBjb25zdGFudFZhbHVlc1tdID0geworICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJv
dG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFsczo6UGlncywKKyAgICAgICAgKHNpemVfdClJbnNw
ZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM6OkNvd3MsCisgICAgICAgIChz
aXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzOjpDYXRzLAor
ICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFs
czo6SGVucywKKyAgICB9OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgNDsgKytpKQorICAg
ICAgICBpZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRW
YWx1ZXNbaV1dKQorICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0
OjpVbmNhc3RlZEFuaW1hbHMpY29uc3RhbnRWYWx1ZXNbaV07CisKKyAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworfQorCit0ZW1wbGF0ZTw+CitPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpU
ZXN0OjpDYXN0ZWRBbmltYWxzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmlu
ZykKK3sKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7CisgICAg
ICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFsczo6RHVj
a3MsCisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5p
bWFsczo6SGVucywKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpD
YXN0ZWRBbmltYWxzOjpDcm93cywKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29s
OjpUZXN0OjpDYXN0ZWRBbmltYWxzOjpGbGFtaW5nb3MsCisgICAgfTsKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IDQ7ICsraSkKKyAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1f
Y29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKKyAgICAgICAgICAgIHJldHVybiAo
SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscyljb25zdGFudFZhbHVlc1tp
XTsKKworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKKworfSAvLyBuYW1lc3BhY2UgVGVz
dEhlbHBlcnMKKworCisKK3ZvaWQgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpU
ZXN0OjpDYXN0ZWRBbmltYWxzPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSlNPTjo6VmFs
dWUqIHZhbHVlKQoreworI2lmIEFTU0VSVF9FTkFCTEVECisgICAgQVNTRVJUX0FSRyh2YWx1ZSwg
dmFsdWUpOworICAgIFN0cmluZyByZXN1bHQ7CisgICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdmFs
dWUtPmFzU3RyaW5nKHJlc3VsdCk7CisgICAgQVNTRVJUKGNhc3RTdWNjZWVkZWQpOworICAgIEFT
U0VSVChyZXN1bHQgPT0gIkR1Y2tzIiB8fCByZXN1bHQgPT0gIkhlbnMiIHx8IHJlc3VsdCA9PSAi
Q3Jvd3MiIHx8IHJlc3VsdCA9PSAiRmxhbWluZ29zIik7CisjZWxzZSAvLyBBU1NFUlRfRU5BQkxF
RAorICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7CisjZW5kaWYgLy8gQVNTRVJUX0VOQUJMRUQKK30K
Kwordm9pZCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVk
aW5nQ2FzdD46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEpTT046OlZhbHVlKiB2YWx1ZSkK
K3sKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgIEFTU0VSVF9BUkcodmFsdWUsIHZhbHVlKTsKKyAg
ICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBvYmplY3Q7CisgICAgYm9vbCBjYXN0U3VjY2VlZGVkID0g
dmFsdWUtPmFzT2JqZWN0KG9iamVjdCk7CisgICAgQVNTRVJUX1VOVVNFRChjYXN0U3VjY2VlZGVk
LCBjYXN0U3VjY2VlZGVkKTsKKyAgICB7CisgICAgICAgIGF1dG8gc3RyaW5nUG9zID0gb2JqZWN0
LT5maW5kKCJzdHJpbmciX3MpOworICAgICAgICBBU1NFUlQoc3RyaW5nUG9zICE9IG9iamVjdC0+
ZW5kKCkpOworICAgICAgICBCaW5kaW5nVHJhaXRzPFN0cmluZz46OmFzc2VydFZhbHVlSGFzRXhw
ZWN0ZWRUeXBlKHN0cmluZ1Bvcy0+dmFsdWUuZ2V0KCkpOworICAgIH0KKyAgICB7CisgICAgICAg
IGF1dG8gbnVtYmVyUG9zID0gb2JqZWN0LT5maW5kKCJudW1iZXIiX3MpOworICAgICAgICBBU1NF
UlQobnVtYmVyUG9zICE9IG9iamVjdC0+ZW5kKCkpOworICAgICAgICBCaW5kaW5nVHJhaXRzPGlu
dD46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKG51bWJlclBvcy0+dmFsdWUuZ2V0KCkpOwor
ICAgIH0KKyAgICB7CisgICAgICAgIGF1dG8gYW5pbWFsc1BvcyA9IG9iamVjdC0+ZmluZCgiYW5p
bWFscyJfcyk7CisgICAgICAgIEFTU0VSVChhbmltYWxzUG9zICE9IG9iamVjdC0+ZW5kKCkpOwor
ICAgICAgICBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFu
aW1hbHM+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShhbmltYWxzUG9zLT52YWx1ZS5nZXQo
KSk7CisgICAgfQorICAgIHsKKyAgICAgICAgYXV0byBpZFBvcyA9IG9iamVjdC0+ZmluZCgiaWQi
X3MpOworICAgICAgICBBU1NFUlQoaWRQb3MgIT0gb2JqZWN0LT5lbmQoKSk7CisgICAgICAgIEJp
bmRpbmdUcmFpdHM8aW50Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoaWRQb3MtPnZhbHVl
LmdldCgpKTsKKyAgICB9CisgICAgeworICAgICAgICBhdXRvIHRyZWVQb3MgPSBvYmplY3QtPmZp
bmQoInRyZWUiX3MpOworICAgICAgICBBU1NFUlQodHJlZVBvcyAhPSBvYmplY3QtPmVuZCgpKTsK
KyAgICAgICAgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNp
dmVPYmplY3QxPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUodHJlZVBvcy0+dmFsdWUuZ2V0
KCkpOworICAgIH0KKworICAgIGludCBmb3VuZFByb3BlcnRpZXNDb3VudCA9IDU7CisgICAgaWYg
KGZvdW5kUHJvcGVydGllc0NvdW50ICE9IG9iamVjdC0+c2l6ZSgpKQorICAgICAgICBGQVRBTCgi
VW5leHBlY3RlZCBwcm9wZXJ0aWVzIGluIG9iamVjdDogJXNcbiIsIG9iamVjdC0+dG9KU09OU3Ry
aW5nKCkuYXNjaWkoKS5kYXRhKCkpOworI2Vsc2UgLy8gQVNTRVJUX0VOQUJMRUQKKyAgICBVTlVT
RURfUEFSQU0odmFsdWUpOworI2VuZGlmIC8vIEFTU0VSVF9FTkFCTEVECit9CisKK1JlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+IEJpbmRpbmdUcmFpdHM8
SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0Pjo6cnVudGltZUNhc3Qo
UmVmUHRyPEpTT046OlZhbHVlPiYmIHZhbHVlKQoreworICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+
IHJlc3VsdDsKKyAgICBib29sIGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNPYmplY3QocmVzdWx0
KTsKKyAgICBBU1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQpOworICAg
IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0
Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUocmVzdWx0LmdldCgpKTsKKyAgICBDT01QSUxF
X0FTU0VSVChzaXplb2YoSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0
KSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0QmFzZSksIHR5cGVfY2FzdF9wcm9ibGVtKTsKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdD
YXN0Kj4oc3RhdGljX2Nhc3Q8SlNPTjo6T2JqZWN0QmFzZSo+KHJlc3VsdC5nZXQoKSkpOworfQor
CisKK3ZvaWQgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNp
dmVPYmplY3QxPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSlNPTjo6VmFsdWUqIHZhbHVl
KQoreworI2lmIEFTU0VSVF9FTkFCTEVECisgICAgQVNTRVJUX0FSRyh2YWx1ZSwgdmFsdWUpOwor
ICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG9iamVjdDsKKyAgICBib29sIGNhc3RTdWNjZWVkZWQg
PSB2YWx1ZS0+YXNPYmplY3Qob2JqZWN0KTsKKyAgICBBU1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVk
ZWQsIGNhc3RTdWNjZWVkZWQpOworCisgICAgaW50IGZvdW5kUHJvcGVydGllc0NvdW50ID0gMDsK
KyAgICB7CisgICAgICAgIGF1dG8gb2JqUG9zID0gb2JqZWN0LT5maW5kKCJvYmoiX3MpOworICAg
ICAgICBpZiAob2JqUG9zICE9IG9iamVjdC0+ZW5kKCkpIHsKKyAgICAgICAgICAgIEJpbmRpbmdU
cmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0Mj46OmFzc2Vy
dFZhbHVlSGFzRXhwZWN0ZWRUeXBlKG9ialBvcy0+dmFsdWUuZ2V0KCkpOworICAgICAgICAgICAg
Kytmb3VuZFByb3BlcnRpZXNDb3VudDsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoZm91bmRQ
cm9wZXJ0aWVzQ291bnQgIT0gb2JqZWN0LT5zaXplKCkpCisgICAgICAgIEZBVEFMKCJVbmV4cGVj
dGVkIHByb3BlcnRpZXMgaW4gb2JqZWN0OiAlc1xuIiwgb2JqZWN0LT50b0pTT05TdHJpbmcoKS5h
c2NpaSgpLmRhdGEoKSk7CisjZWxzZSAvLyBBU1NFUlRfRU5BQkxFRAorICAgIFVOVVNFRF9QQVJB
TSh2YWx1ZSk7CisjZW5kaWYgLy8gQVNTRVJUX0VOQUJMRUQKK30KKwordm9pZCBCaW5kaW5nVHJh
aXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDI+Ojphc3NlcnRW
YWx1ZUhhc0V4cGVjdGVkVHlwZShKU09OOjpWYWx1ZSogdmFsdWUpCit7CisjaWYgQVNTRVJUX0VO
QUJMRUQKKyAgICBBU1NFUlRfQVJHKHZhbHVlLCB2YWx1ZSk7CisgICAgUmVmUHRyPEpTT046Ok9i
amVjdD4gb2JqZWN0OworICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9IHZhbHVlLT5hc09iamVjdChv
YmplY3QpOworICAgIEFTU0VSVF9VTlVTRUQoY2FzdFN1Y2NlZWRlZCwgY2FzdFN1Y2NlZWRlZCk7
CisKKyAgICBpbnQgZm91bmRQcm9wZXJ0aWVzQ291bnQgPSAwOworICAgIHsKKyAgICAgICAgYXV0
byBvYmpQb3MgPSBvYmplY3QtPmZpbmQoIm9iaiJfcyk7CisgICAgICAgIGlmIChvYmpQb3MgIT0g
b2JqZWN0LT5lbmQoKSkgeworICAgICAgICAgICAgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlBy
b3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QxPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5
cGUob2JqUG9zLT52YWx1ZS5nZXQoKSk7CisgICAgICAgICAgICArK2ZvdW5kUHJvcGVydGllc0Nv
dW50OworICAgICAgICB9CisgICAgfQorICAgIGlmIChmb3VuZFByb3BlcnRpZXNDb3VudCAhPSBv
YmplY3QtPnNpemUoKSkKKyAgICAgICAgRkFUQUwoIlVuZXhwZWN0ZWQgcHJvcGVydGllcyBpbiBv
YmplY3Q6ICVzXG4iLCBvYmplY3QtPnRvSlNPTlN0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKKyNl
bHNlIC8vIEFTU0VSVF9FTkFCTEVECisgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKKyNlbmRpZiAv
LyBBU1NFUlRfRU5BQkxFRAorfQorCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNw
cAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNh
c3RzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVy
cy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworCisKK25hbWVzcGFjZSBJbnNwZWN0
b3IgeworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0
UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbElu
dGVybmFsLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW5j
bHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK30gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmRE
aXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
bi5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVu
dGltZS1jYXN0cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KKworX19hdHRyaWJ1dGVf
XygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZp
Z3VyYXRpb24gOiBOU09iamVjdAorQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbi5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0
aW9uLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmct
cnVudGltZS1jYXN0cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKKworI2ltcG9ydCAi
VGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNw
YXRjaGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxl
QWdlbnQuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29u
dHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXJzLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxl
bWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KK3sKKyAgICBBdWdtZW50YWJsZUlu
c3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xs
ZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAg
cmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBj
b250cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAg
ICBbc3VwZXIgZGVhbGxvY107Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbENvbmZpZ3VyYXRpb24ubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50
RGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJl
cXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9y
dCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDx3dGYvSlNPTlZhbHVl
cy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisKKyMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1y
dW50aW1lLWNhc3RzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKKyNpbXBvcnQgPFdlYklu
c3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KKworCitAY2xhc3MgVGVzdFByb3RvY29s
VGVzdFR5cGVOZWVkaW5nQ2FzdDsKK0BjbGFzcyBUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2Jq
ZWN0MTsKK0BjbGFzcyBUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MjsKKworCit0eXBl
ZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzKSB7
CisgICAgVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc1BpZ3MsCisgICAgVGVzdFByb3Rv
Y29sVGVzdFVuY2FzdGVkQW5pbWFsc0Nvd3MsCisgICAgVGVzdFByb3RvY29sVGVzdFVuY2FzdGVk
QW5pbWFsc0NhdHMsCisgICAgVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc0hlbnMsCit9
OworCit0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5p
bWFscykgeworICAgIFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzRHVja3MsCisgICAgVGVz
dFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHNIZW5zLAorICAgIFRlc3RQcm90b2NvbFRlc3RDYXN0
ZWRBbmltYWxzQ3Jvd3MsCisgICAgVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHNGbGFtaW5n
b3MsCit9OworCisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGlu
dGVyZmFjZSBUZXN0UHJvdG9jb2xUZXN0VHlwZU5lZWRpbmdDYXN0IDogUldJUHJvdG9jb2xKU09O
T2JqZWN0CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNT
dHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29s
T2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OworLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZyBudW1iZXI6KGludCludW1iZXIg
YW5pbWFsczooVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHMpYW5pbWFscyBpZGVudGlmaWVy
OihpbnQpaWRlbnRpZmllciB0cmVlOihUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSAq
KXRyZWU7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJp
bmcgKnN0cmluZzsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24p
IGludCBudW1iZXI7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWdu
KSBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFscyBhbmltYWxzOworLyogcmVxdWlyZWQgKi8g
QHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgaW50IGlkZW50aWZpZXI7CisvKiByZXF1aXJl
ZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluKSBUZXN0UHJvdG9jb2xUZXN0UmVjdXJz
aXZlT2JqZWN0MSAqdHJlZTsKK0BlbmQKKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRl
ZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxIDog
UldJUHJvdG9jb2xKU09OT2JqZWN0CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihO
U0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKKy0gKGluc3RhbmNldHlwZSlp
bml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0
OworLyogb3B0aW9uYWwgKi8gQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgVGVzdFByb3Rv
Y29sVGVzdFJlY3Vyc2l2ZU9iamVjdDIgKm9iajsKK0BlbmQKKworX19hdHRyaWJ1dGVfXygodmlz
aWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbFRlc3RSZWN1cnNp
dmVPYmplY3QyIDogUldJUHJvdG9jb2xKU09OT2JqZWN0CistIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKKy0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3Qg
Kilqc29uT2JqZWN0OworLyogb3B0aW9uYWwgKi8gQHByb3BlcnR5IChub25hdG9taWMsIHJldGFp
bikgVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgKm9iajsKK0BlbmQKKworCisKKwor
CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9i
amVjdHMuaD4KKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAorCisjIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBv
cnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0
Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPHd0Zi9KU09O
VmFsdWVzLmg+CisKKworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAor
CisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAi
VGVzdFByb3RvY29sLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNv
bnZlcnNpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBPYmpDRW51bVR5cGU+CitPcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmlu
Zyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKKworCitpbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJp
bmcoVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFscyB2YWx1ZSkKK3sKKyAgICBzd2l0Y2go
dmFsdWUpIHsKKyAgICBjYXNlIFRlc3RQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHNQaWdzOgor
ICAgICAgICByZXR1cm4gIlBpZ3MiX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xUZXN0VW5jYXN0
ZWRBbmltYWxzQ293czoKKyAgICAgICAgcmV0dXJuICJDb3dzIl9zOworICAgIGNhc2UgVGVzdFBy
b3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc0NhdHM6CisgICAgICAgIHJldHVybiAiQ2F0cyJfczsK
KyAgICBjYXNlIFRlc3RQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHNIZW5zOgorICAgICAgICBy
ZXR1cm4gIkhlbnMiX3M7CisgICAgfQorfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgT3B0aW9uYWw8
VGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFscz4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0
IFN0cmluZyYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09ICJQaWdzIikKKyAgICAgICAgcmV0
dXJuIFRlc3RQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHNQaWdzOworICAgIGlmICh2YWx1ZSA9
PSAiQ293cyIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxz
Q293czsKKyAgICBpZiAodmFsdWUgPT0gIkNhdHMiKQorICAgICAgICByZXR1cm4gVGVzdFByb3Rv
Y29sVGVzdFVuY2FzdGVkQW5pbWFsc0NhdHM7CisgICAgaWYgKHZhbHVlID09ICJIZW5zIikKKyAg
ICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHNIZW5zOworICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK2lubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhU
ZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFscyB2YWx1ZSkKK3sKKyAgICBzd2l0Y2godmFsdWUp
IHsKKyAgICBjYXNlIFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzRHVja3M6CisgICAgICAg
IHJldHVybiAiRHVja3MiX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFs
c0hlbnM6CisgICAgICAgIHJldHVybiAiSGVucyJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbFRl
c3RDYXN0ZWRBbmltYWxzQ3Jvd3M6CisgICAgICAgIHJldHVybiAiQ3Jvd3MiX3M7CisgICAgY2Fz
ZSBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFsc0ZsYW1pbmdvczoKKyAgICAgICAgcmV0dXJu
ICJGbGFtaW5nb3MiX3M7CisgICAgfQorfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgT3B0aW9uYWw8
VGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHM+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBT
dHJpbmcmIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSAiRHVja3MiKQorICAgICAgICByZXR1
cm4gVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHNEdWNrczsKKyAgICBpZiAodmFsdWUgPT0g
IkhlbnMiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHNIZW5z
OworICAgIGlmICh2YWx1ZSA9PSAiQ3Jvd3MiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29s
VGVzdENhc3RlZEFuaW1hbHNDcm93czsKKyAgICBpZiAodmFsdWUgPT0gIkZsYW1pbmdvcyIpCisg
ICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFsc0ZsYW1pbmdvczsKKyAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKwor
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorCisjIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90
b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisK
K0BpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChUZXN0RG9tYWluKQorCisr
ICh2b2lkKV9wYXJzZVR5cGVOZWVkaW5nQ2FzdDooVGVzdFByb3RvY29sVGVzdFR5cGVOZWVkaW5n
Q2FzdCAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNl
Q2FzdGVkT2JqZWN0SWQ6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXls
b2FkOworKyAodm9pZClfcGFyc2VVbmNhc3RlZE9iamVjdElkOihOU051bWJlciAqKilvdXRWYWx1
ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNlVW5jYXN0ZWRBbmltYWxz
OihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQp
X3BhcnNlQ2FzdGVkQW5pbWFsczooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlk
KXBheWxvYWQ7CisrICh2b2lkKV9wYXJzZVJlY3Vyc2l2ZU9iamVjdDE6KFRlc3RQcm90b2NvbFRl
c3RSZWN1cnNpdmVPYmplY3QxICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwor
KyAodm9pZClfcGFyc2VSZWN1cnNpdmVPYmplY3QyOihUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZl
T2JqZWN0MiAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKworQGVuZAorCitA
aW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChUZXN0RG9tYWluKQor
CisrICh2b2lkKV9wYXJzZVR5cGVOZWVkaW5nQ2FzdDooVGVzdFByb3RvY29sVGVzdFR5cGVOZWVk
aW5nQ2FzdCAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOwor
ICAgICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sVGVzdFR5cGVOZWVkaW5nQ2FzdCBhbGxvY10g
aW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOworfQorCisrICh2b2lkKV9wYXJzZUNhc3RlZE9iamVj
dElkOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TTnVtYmVyIGNsYXNzXSk7
CisgICAgKm91dFZhbHVlID0gKE5TTnVtYmVyICopcGF5bG9hZDsKK30KKworKyAodm9pZClfcGFy
c2VVbmNhc3RlZE9iamVjdElkOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQp
cGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05T
TnVtYmVyIGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gKE5TTnVtYmVyICopcGF5bG9hZDsKK30K
KworKyAodm9pZClfcGFyc2VVbmNhc3RlZEFuaW1hbHM6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZy
b21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQ
RShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKKyAgICBPcHRpb25hbDxUZXN0UHJvdG9jb2xU
ZXN0VW5jYXN0ZWRBbmltYWxzPiByZXN1bHQgPSBJbnNwZWN0b3I6OmZyb21Qcm90b2NvbFN0cmlu
ZzxUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzPihwYXlsb2FkKTsKKyAgICBUSFJPV19F
WENFUFRJT05fRk9SX0JBRF9FTlVNX1ZBTFVFKHJlc3VsdCwgQCJVbmNhc3RlZEFuaW1hbHMiKTsK
KyAgICAqb3V0VmFsdWUgPSBAKHJlc3VsdC52YWx1ZSgpKTsKK30KKworKyAodm9pZClfcGFyc2VD
YXN0ZWRBbmltYWxzOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9h
ZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TU3RyaW5n
IGNsYXNzXSk7CisgICAgT3B0aW9uYWw8VGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHM+IHJl
c3VsdCA9IEluc3BlY3Rvcjo6ZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbFRlc3RDYXN0
ZWRBbmltYWxzPihwYXlsb2FkKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9FTlVNX1ZB
TFVFKHJlc3VsdCwgQCJDYXN0ZWRBbmltYWxzIik7CisgICAgKm91dFZhbHVlID0gQChyZXN1bHQu
dmFsdWUoKSk7Cit9CisKKysgKHZvaWQpX3BhcnNlUmVjdXJzaXZlT2JqZWN0MTooVGVzdFByb3Rv
Y29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxv
YWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rp
b25hcnkgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbFRlc3RSZWN1cnNp
dmVPYmplY3QxIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07Cit9CisKKysgKHZvaWQp
X3BhcnNlUmVjdXJzaXZlT2JqZWN0MjooVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDIg
Kiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJ
T05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKKyAgICAqb3V0
VmFsdWUgPSBbW1Rlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QyIGFsbG9jXSBpbml0V2l0
aFBheWxvYWQ6cGF5bG9hZF07Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlw
ZXMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1y
dW50aW1lLWNhc3RzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9j
b2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbXBv
cnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKwor
QGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFRlc3RUeXBlTmVlZGluZ0Nhc3QKKworLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcg
KiwgaWQ+ICopcGF5bG9hZAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAg
ICAgICByZXR1cm4gbmlsOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9Q
RVJUWShwYXlsb2FkW0Aic3RyaW5nIl0sIEAic3RyaW5nIik7CisgICAgc2VsZi5zdHJpbmcgPSBw
YXlsb2FkW0Aic3RyaW5nIl07CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BS
T1BFUlRZKHBheWxvYWRbQCJudW1iZXIiXSwgQCJudW1iZXIiKTsKKyAgICBzZWxmLm51bWJlciA9
IFtwYXlsb2FkW0AibnVtYmVyIl0gaW50ZWdlclZhbHVlXTsKKworICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImFuaW1hbHMiXSwgQCJhbmltYWxzIik7
CisgICAgT3B0aW9uYWw8VGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHM+IGFuaW1hbHMgPSBm
cm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHM+KHBheWxvYWRb
QCJhbmltYWxzIl0pOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX0VOVU1fVkFMVUUoYW5p
bWFscywgQCJhbmltYWxzIik7CisgICAgc2VsZi5hbmltYWxzID0gYW5pbWFscy52YWx1ZSgpOwor
CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiaWQi
XSwgQCJpZCIpOworICAgIHNlbGYuaWRlbnRpZmllciA9IFtwYXlsb2FkW0AiaWQiXSBpbnRlZ2Vy
VmFsdWVdOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXls
b2FkW0AidHJlZSJdLCBAInRyZWUiKTsKKyAgICBzZWxmLnRyZWUgPSBbW1Rlc3RQcm90b2NvbFRl
c3RSZWN1cnNpdmVPYmplY3QxIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZFtAInRyZWUi
XV07CisKKyAgICByZXR1cm4gc2VsZjsKK30KKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3Rv
Y29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilvYmplY3QKK3sKKyAgICBpZiAoIShz
ZWxmID0gW3N1cGVyIGluaXRXaXRoSlNPTk9iamVjdDpbb2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0
KCldKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHJldHVybiBzZWxmOworfQorCistIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nIG51bWJlcjooaW50
KW51bWJlciBhbmltYWxzOihUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFscylhbmltYWxzIGlk
ZW50aWZpZXI6KGludClpZGVudGlmaWVyIHRyZWU6KFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVP
YmplY3QxICopdHJlZQoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAg
ICByZXR1cm4gbmlsOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJU
WShzdHJpbmcsIEAic3RyaW5nIik7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9Q
Uk9QRVJUWSh0cmVlLCBAInRyZWUiKTsKKworICAgIHNlbGYuc3RyaW5nID0gc3RyaW5nOworICAg
IHNlbGYubnVtYmVyID0gbnVtYmVyOworICAgIHNlbGYuYW5pbWFscyA9IGFuaW1hbHM7CisgICAg
c2VsZi5pZGVudGlmaWVyID0gaWRlbnRpZmllcjsKKyAgICBzZWxmLnRyZWUgPSB0cmVlOworCisg
ICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpc2V0U3RyaW5nOihOU1N0cmluZyAqKXN0cmlu
ZworeworICAgIFtzdXBlciBzZXRTdHJpbmc6c3RyaW5nIGZvcktleTpAInN0cmluZyJdOworfQor
CistIChOU1N0cmluZyAqKXN0cmluZworeworICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5
OkAic3RyaW5nIl07Cit9CisKKy0gKHZvaWQpc2V0TnVtYmVyOihpbnQpbnVtYmVyCit7CisgICAg
W3N1cGVyIHNldEludGVnZXI6bnVtYmVyIGZvcktleTpAIm51bWJlciJdOworfQorCistIChpbnQp
bnVtYmVyCit7CisgICAgcmV0dXJuIFtzdXBlciBpbnRlZ2VyRm9yS2V5OkAibnVtYmVyIl07Cit9
CisKKy0gKHZvaWQpc2V0QW5pbWFsczooVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHMpYW5p
bWFscworeworICAgIFtzdXBlciBzZXRTdHJpbmc6dG9Qcm90b2NvbFN0cmluZyhhbmltYWxzKSBm
b3JLZXk6QCJhbmltYWxzIl07Cit9CisKKy0gKFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxz
KWFuaW1hbHMKK3sKKyAgICByZXR1cm4gZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbFRl
c3RDYXN0ZWRBbmltYWxzPihbc3VwZXIgc3RyaW5nRm9yS2V5OkAiYW5pbWFscyJdKS52YWx1ZSgp
OworfQorCistICh2b2lkKXNldElkZW50aWZpZXI6KGludClpZGVudGlmaWVyCit7CisgICAgW3N1
cGVyIHNldEludGVnZXI6aWRlbnRpZmllciBmb3JLZXk6QCJpZCJdOworfQorCistIChpbnQpaWRl
bnRpZmllcgoreworICAgIHJldHVybiBbc3VwZXIgaW50ZWdlckZvcktleTpAImlkIl07Cit9CisK
Ky0gKHZvaWQpc2V0VHJlZTooVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgKil0cmVl
Cit7CisgICAgW3N1cGVyIHNldE9iamVjdDp0cmVlIGZvcktleTpAInRyZWUiXTsKK30KKworLSAo
VGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgKil0cmVlCit7CisgICAgUldJUHJvdG9j
b2xKU09OT2JqZWN0ICpvYmplY3QgPSBbc3VwZXIgb2JqZWN0Rm9yS2V5OkAidHJlZSJdOworICAg
IGlmICghb2JqZWN0KQorICAgICAgICByZXR1cm4gbmlsOworICAgIHJldHVybiBbW1Rlc3RQcm90
b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxIGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6W1tzdXBl
ciBvYmplY3RGb3JLZXk6QCJ0cmVlIl0gdG9KU09OT2JqZWN0XS5nZXQoKV07Cit9CisKK0BlbmQK
KworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxCisKKy0g
KGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3Ry
aW5nICosIGlkPiAqKXBheWxvYWQKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkK
KyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHNlbGYub2JqID0gW1tUZXN0UHJvdG9jb2xUZXN0
UmVjdXJzaXZlT2JqZWN0MiBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRbQCJvYmoiXV07
CisKKyAgICByZXR1cm4gc2VsZjsKK30KKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29s
T2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilvYmplY3QKK3sKKyAgICBpZiAoIShzZWxm
ID0gW3N1cGVyIGluaXRXaXRoSlNPTk9iamVjdDpbb2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0KCld
KSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lk
KXNldE9iajooVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDIgKilvYmoKK3sKKyAgICBb
c3VwZXIgc2V0T2JqZWN0Om9iaiBmb3JLZXk6QCJvYmoiXTsKK30KKworLSAoVGVzdFByb3RvY29s
VGVzdFJlY3Vyc2l2ZU9iamVjdDIgKilvYmoKK3sKKyAgICBSV0lQcm90b2NvbEpTT05PYmplY3Qg
Km9iamVjdCA9IFtzdXBlciBvYmplY3RGb3JLZXk6QCJvYmoiXTsKKyAgICBpZiAoIW9iamVjdCkK
KyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICByZXR1cm4gW1tUZXN0UHJvdG9jb2xUZXN0UmVjdXJz
aXZlT2JqZWN0MiBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0Oltbc3VwZXIgb2JqZWN0Rm9yS2V5
OkAib2JqIl0gdG9KU09OT2JqZWN0XS5nZXQoKV07Cit9CisKK0BlbmQKKworQGltcGxlbWVudGF0
aW9uIFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QyCisKKy0gKGluc3RhbmNldHlwZSlp
bml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBh
eWxvYWQKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJu
IG5pbDsKKworICAgIHNlbGYub2JqID0gW1tUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0
MSBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRbQCJvYmoiXV07CisKKyAgICByZXR1cm4g
c2VsZjsKK30KKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90
b2NvbEpTT05PYmplY3QgKilvYmplY3QKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRX
aXRoSlNPTk9iamVjdDpbb2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0KCldKSkKKyAgICAgICAgcmV0
dXJuIG5pbDsKKworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXNldE9iajooVGVzdFBy
b3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgKilvYmoKK3sKKyAgICBbc3VwZXIgc2V0T2JqZWN0
Om9iaiBmb3JLZXk6QCJvYmoiXTsKK30KKworLSAoVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9i
amVjdDEgKilvYmoKK3sKKyAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9iamVjdCA9IFtzdXBl
ciBvYmplY3RGb3JLZXk6QCJvYmoiXTsKKyAgICBpZiAoIW9iamVjdCkKKyAgICAgICAgcmV0dXJu
IG5pbDsKKyAgICByZXR1cm4gW1tUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSBhbGxv
Y10gaW5pdFdpdGhKU09OT2JqZWN0Oltbc3VwZXIgb2JqZWN0Rm9yS2V5OkAib2JqIl0gdG9KU09O
T2JqZWN0XS5nZXQoKV07Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uLXJlc3Vs
dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC90eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5iYWNiNjU2NWE4MgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBl
LXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0CkBAIC0wLDAgKzEsMTEyOSBAQAorIyMj
IEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcworLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0
b3JCYWNrZW5kQ29tbWFuZHMuanMKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUt
d2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisKK25hbWVzcGFj
ZSBJbnNwZWN0b3IgeworCitjbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJs
aWM6CisgICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNo
ZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRj
aGVyKTsgfQorICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0
IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KK3ByaXZhdGU6CisgICAgUmVm
UHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOworfTsKKworCisKKwor
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKKyMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmRE
aXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXdpdGgtb3Blbi1wYXJhbWV0
ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3R5cGVkZWYg
U3RyaW5nIEVycm9yU3RyaW5nOworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMg
RW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVz
dEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSB0eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRl
IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisK
KyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyNpbmNsdWRlICJU
ZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCisjZW5kaWYgLy8gRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisK
KworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmRE
aXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJz
LmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXdpdGgtb3Blbi1wYXJh
bWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVk
ZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwor
bmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEZyb250ZW5kUm91dGVyOworCit9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMu
aAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5j
cHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KKyNpbmNs
dWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK25h
bWVzcGFjZSBQcm90b2NvbCB7CisKKworCisvLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KK25hbWVz
cGFjZSBUZXN0IHsKK2NsYXNzIE5vT3BlblBhcmFtZXRlcnM7CitjbGFzcyBPcGVuUGFyYW1ldGVy
czsKK30gLy8gVGVzdAorLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgorCisKKworCitu
YW1lc3BhY2UgVGVzdCB7CitjbGFzcyBOb09wZW5QYXJhbWV0ZXJzIDogcHVibGljIEpTT046Ok9i
amVjdEJhc2UgeworcHVibGljOgorICAgIGVudW0geworICAgICAgICBOb0ZpZWxkc1NldCA9IDAs
CisgICAgICAgIE9uZVNldCA9IDEgPDwgMCwKKyAgICAgICAgVHdvU2V0ID0gMSA8PCAxLAorICAg
ICAgICBBbGxGaWVsZHNTZXQgPSAoT25lU2V0IHwgVHdvU2V0KQorICAgIH07CisKKyAgICB0ZW1w
bGF0ZTxpbnQgU1RBVEU+CisgICAgY2xhc3MgQnVpbGRlciB7CisgICAgcHJpdmF0ZToKKyAgICAg
ICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7CisKKyAgICAgICAgdGVtcGxhdGU8aW50
IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+
KHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcihSZWY8LypOb09wZW5QYXJhbWV0
ZXJzKi9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQorICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZN
b3ZlKG9iamVjdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRF
ID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAg
ICAgICB9CisgICAgICAgIGZyaWVuZCBjbGFzcyBOb09wZW5QYXJhbWV0ZXJzOworICAgIHB1Ymxp
YzoKKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgT25lU2V0PiYgc2V0T25lKGRvdWJsZSB2YWx1
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE9uZVNl
dCksIHByb3BlcnR5X29uZV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
RG91YmxlKCJvbmUiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8T25l
U2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFR3b1NldD4mIHNl
dFR3byhkb3VibGUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBUd29TZXQpLCBwcm9wZXJ0eV90d29fYWxyZWFkeV9zZXQpOworICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldERvdWJsZSgidHdvIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPFR3b1NldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIFJlZjxOb09wZW5Q
YXJhbWV0ZXJzPiByZWxlYXNlKCkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihOb09wZW5QYXJhbWV0ZXJzKSA9PSBzaXplb2YoSlNP
Tjo6T2JqZWN0KSwgY2Fubm90X2Nhc3QpOworCisgICAgICAgICAgICBSZWY8SlNPTjo6T2JqZWN0
PiBqc29uUmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKKyAgICAgICAgICAgIGF1
dG8gcmVzdWx0ID0gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8Tm9PcGVuUGFyYW1ldGVy
cz4qPigmanNvblJlc3VsdCkpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAg
fQorICAgIH07CisKKyAgICAvKgorICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKKyAgICAg
KiBSZWY8Tm9PcGVuUGFyYW1ldGVycz4gcmVzdWx0ID0gTm9PcGVuUGFyYW1ldGVyczo6Y3JlYXRl
KCkKKyAgICAgKiAgICAgLnNldE9uZSguLi4pCisgICAgICogICAgIC5zZXRUd28oLi4uKQorICAg
ICAqICAgICAucmVsZWFzZSgpOworICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRz
U2V0PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+
KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOworICAgIH0KK307CisKK2NsYXNzIE9wZW5QYXJhbWV0
ZXJzIDogcHVibGljIEpTT046Ok9iamVjdCB7CitwdWJsaWM6CisgICAgZW51bSB7CisgICAgICAg
IE5vRmllbGRzU2V0ID0gMCwKKyAgICAgICAgQWxwaGFTZXQgPSAxIDw8IDAsCisgICAgICAgIEJl
dGFTZXQgPSAxIDw8IDEsCisgICAgICAgIEFsbEZpZWxkc1NldCA9IChBbHBoYVNldCB8IEJldGFT
ZXQpCisgICAgfTsKKworICAgIHRlbXBsYXRlPGludCBTVEFURT4KKyAgICBjbGFzcyBCdWlsZGVy
IHsKKyAgICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBtX3Jlc3VsdDsK
KworICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0
U3RhdGUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8
QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBCdWls
ZGVyKFJlZjwvKk9wZW5QYXJhbWV0ZXJzKi9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQorICAgICAg
ICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5f
bm9uX2luaXRfc3RhdGUpOworICAgICAgICB9CisgICAgICAgIGZyaWVuZCBjbGFzcyBPcGVuUGFy
YW1ldGVyczsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IEFscGhhU2V0
PiYgc2V0QWxwaGEoZG91YmxlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxF
X0FTU0VSVCghKFNUQVRFICYgQWxwaGFTZXQpLCBwcm9wZXJ0eV9hbHBoYV9hbHJlYWR5X3NldCk7
CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0RG91YmxlKCJhbHBoYSJfcywgdmFsdWUpOworICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxBbHBoYVNldD4oKTsKKyAgICAgICAgfQorCisgICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBCZXRhU2V0PiYgc2V0QmV0YShkb3VibGUgdmFsdWUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBCZXRhU2V0KSwgcHJv
cGVydHlfYmV0YV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0RG91Ymxl
KCJiZXRhIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEJldGFTZXQ+
KCk7CisgICAgICAgIH0KKworICAgICAgICBSZWY8T3BlblBhcmFtZXRlcnM+IHJlbGVhc2UoKQor
ICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNT
ZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6
ZW9mKE9wZW5QYXJhbWV0ZXJzKSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0KSwgY2Fubm90X2Nhc3Qp
OworCisgICAgICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uUmVzdWx0ID0gbV9yZXN1bHQu
cmVsZWFzZU5vbk51bGwoKTsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gV1RGTW92ZSgqcmVp
bnRlcnByZXRfY2FzdDxSZWY8T3BlblBhcmFtZXRlcnM+Kj4oJmpzb25SZXN1bHQpKTsKKyAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyoKKyAgICAg
KiBTeW50aGV0aWMgY29uc3RydWN0b3I6CisgICAgICogUmVmPE9wZW5QYXJhbWV0ZXJzPiByZXN1
bHQgPSBPcGVuUGFyYW1ldGVyczo6Y3JlYXRlKCkKKyAgICAgKiAgICAgLnNldEFscGhhKC4uLikK
KyAgICAgKiAgICAgLnNldEJldGEoLi4uKQorICAgICAqICAgICAucmVsZWFzZSgpOworICAgICAq
LworICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOwor
ICAgIH0KKworICAgIC8vIFByb3BlcnR5IG5hbWVzIGZvciB0eXBlIGdlbmVyYXRlZCBhcyBvcGVu
LgorICAgIE5vbmUgc3RhdGljIGNvbnN0IGNoYXIqIEFscGhhOworfTsKKworfSAvLyBUZXN0CisK
KworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
KyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdFBy
b3RvY29sT2JqZWN0cy5oIgorCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNl
IFByb3RvY29sIHsKKworY29uc3QgY2hhciogSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6T3Bl
blBhcmFtZXRlcnM6OkFscGhhID0gImFscGhhIjsKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wK
KworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
T2JqZWN0cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRj
aGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRoLW9wZW4t
cGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlz
cGF0Y2hlcnMuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKKworCituYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAi
VGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlICJUZXN0UHJvdG9j
b2xJbnRlcm5hbC5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgor
I2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNr
ZW5kRGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3Vy
YXRpb24uaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtd2l0aC1vcGVu
LXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+CisKK19fYXR0cmlidXRl
X18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25m
aWd1cmF0aW9uIDogTlNPYmplY3QKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24uaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJh
dGlvbi5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtd2l0aC1vcGVu
LXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCisKKyNpbXBvcnQgIlRl
c3RQcm90b2NvbEludGVybmFsLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0
Y2hlcnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFn
ZW50Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRy
b2xsZXIuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tl
bmREaXNwYXRjaGVycy5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXJzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1l
bnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCit7CisgICAgQXVnbWVudGFibGVJbnNw
ZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVy
Cit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJl
dHVybiBuaWw7CisgICAgQVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250cm9sbGVyID0gY29u
dHJvbGxlcjsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAg
W3N1cGVyIGRlYWxsb2NdOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xDb25maWd1cmF0aW9uLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERp
c3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRo
LW9wZW4tcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4K
KwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5o
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRoLW9wZW4tcGFyYW1l
dGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNp
bXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3Iv
UldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+CisKKworQGNsYXNzIFRlc3RQcm90b2NvbFRlc3ROb09w
ZW5QYXJhbWV0ZXJzOworQGNsYXNzIFRlc3RQcm90b2NvbFRlc3RPcGVuUGFyYW1ldGVyczsKKwor
CisKKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNl
IFRlc3RQcm90b2NvbFRlc3ROb09wZW5QYXJhbWV0ZXJzIDogUldJUHJvdG9jb2xKU09OT2JqZWN0
CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcg
KiwgaWQ+ICopcGF5bG9hZDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0
OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OworLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoT25lOihkb3VibGUpb25lIHR3bzooZG91YmxlKXR3bzsKKy8qIHJlcXVpcmVkICovIEBw
cm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGRvdWJsZSBvbmU7CisvKiByZXF1aXJlZCAqLyBA
cHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBkb3VibGUgdHdvOworQGVuZAorCitfX2F0dHJp
YnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29s
VGVzdE9wZW5QYXJhbWV0ZXJzIDogUldJUHJvdG9jb2xKU09OT2JqZWN0CistIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9h
ZDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpT
T05PYmplY3QgKilqc29uT2JqZWN0OworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQWxwaGE6KGRv
dWJsZSlhbHBoYSBiZXRhOihkb3VibGUpYmV0YTsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAo
bm9uYXRvbWljLCBhc3NpZ24pIGRvdWJsZSBhbHBoYTsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0
eSAobm9uYXRvbWljLCBhc3NpZ24pIGRvdWJsZSBiZXRhOworQGVuZAorCisKKworCisKKworI2lt
cG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5o
PgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xJbnRlcm5hbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlw
ZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFBy
b3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21l
bnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4K
KworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wu
aCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4K
KworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlw
ZT4KK09wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpOworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xU
eXBlUGFyc2VyLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0
UHJpdmF0ZS5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW50ZXJmYWNlIFRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoVGVzdERvbWFpbikKKworKyAodm9pZClfcGFyc2VO
b09wZW5QYXJhbWV0ZXJzOihUZXN0UHJvdG9jb2xUZXN0Tm9PcGVuUGFyYW1ldGVycyAqKilvdXRW
YWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNlT3BlblBhcmFtZXRl
cnM6KFRlc3RQcm90b2NvbFRlc3RPcGVuUGFyYW1ldGVycyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9h
ZDooaWQpcGF5bG9hZDsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zIChUZXN0RG9tYWluKQorCisrICh2b2lkKV9wYXJzZU5vT3BlblBhcmFtZXRl
cnM6KFRlc3RQcm90b2NvbFRlc3ROb09wZW5QYXJhbWV0ZXJzICoqKW91dFZhbHVlIGZyb21QYXls
b2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXls
b2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9j
b2xUZXN0Tm9PcGVuUGFyYW1ldGVycyBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOwor
fQorCisrICh2b2lkKV9wYXJzZU9wZW5QYXJhbWV0ZXJzOihUZXN0UHJvdG9jb2xUZXN0T3BlblBh
cmFtZXRlcnMgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJP
V19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsK
KyAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbFRlc3RPcGVuUGFyYW1ldGVycyBhbGxvY10g
aW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbFR5cGVzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRo
LW9wZW4tcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVBy
b3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKyNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Cisj
aW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwor
CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUZXN0Tm9PcGVuUGFyYW1ldGVycworCist
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0
cmluZyAqLCBpZD4gKilwYXlsb2FkCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkp
CisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVE
X1BST1BFUlRZKHBheWxvYWRbQCJvbmUiXSwgQCJvbmUiKTsKKyAgICBzZWxmLm9uZSA9IFtwYXls
b2FkW0Aib25lIl0gZG91YmxlVmFsdWVdOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFV
SVJFRF9QUk9QRVJUWShwYXlsb2FkW0AidHdvIl0sIEAidHdvIik7CisgICAgc2VsZi50d28gPSBb
cGF5bG9hZFtAInR3byJdIGRvdWJsZVZhbHVlXTsKKworICAgIHJldHVybiBzZWxmOworfQorLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVj
dCAqKW9iamVjdAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0
OltvYmplY3QgdG9KU09OT2JqZWN0XS5nZXQoKV0pKQorICAgICAgICByZXR1cm4gbmlsOworCisg
ICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aE9uZTooZG91Ymxl
KW9uZSB0d286KGRvdWJsZSl0d28KK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkK
KyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHNlbGYub25lID0gb25lOworICAgIHNlbGYudHdv
ID0gdHdvOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpc2V0T25lOihkb3VibGUp
b25lCit7CisgICAgW3N1cGVyIHNldERvdWJsZTpvbmUgZm9yS2V5OkAib25lIl07Cit9CisKKy0g
KGRvdWJsZSlvbmUKK3sKKyAgICByZXR1cm4gW3N1cGVyIGRvdWJsZUZvcktleTpAIm9uZSJdOwor
fQorCistICh2b2lkKXNldFR3bzooZG91YmxlKXR3bworeworICAgIFtzdXBlciBzZXREb3VibGU6
dHdvIGZvcktleTpAInR3byJdOworfQorCistIChkb3VibGUpdHdvCit7CisgICAgcmV0dXJuIFtz
dXBlciBkb3VibGVGb3JLZXk6QCJ0d28iXTsKK30KKworQGVuZAorCitAaW1wbGVtZW50YXRpb24g
VGVzdFByb3RvY29sVGVzdE9wZW5QYXJhbWV0ZXJzCisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0
aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQK
K3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsK
KworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImFs
cGhhIl0sIEAiYWxwaGEiKTsKKyAgICBzZWxmLmFscGhhID0gW3BheWxvYWRbQCJhbHBoYSJdIGRv
dWJsZVZhbHVlXTsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFko
cGF5bG9hZFtAImJldGEiXSwgQCJiZXRhIik7CisgICAgc2VsZi5iZXRhID0gW3BheWxvYWRbQCJi
ZXRhIl0gZG91YmxlVmFsdWVdOworCisgICAgcmV0dXJuIHNlbGY7Cit9CistIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopb2JqZWN0
Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEpTT05PYmplY3Q6W29iamVjdCB0
b0pTT05PYmplY3RdLmdldCgpXSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICByZXR1cm4g
c2VsZjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQWxwaGE6KGRvdWJsZSlhbHBoYSBi
ZXRhOihkb3VibGUpYmV0YQoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAg
ICAgICByZXR1cm4gbmlsOworCisgICAgc2VsZi5hbHBoYSA9IGFscGhhOworICAgIHNlbGYuYmV0
YSA9IGJldGE7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClzZXRBbHBoYTooZG91
YmxlKWFscGhhCit7CisgICAgW3N1cGVyIHNldERvdWJsZTphbHBoYSBmb3JLZXk6QCJhbHBoYSJd
OworfQorCistIChkb3VibGUpYWxwaGEKK3sKKyAgICByZXR1cm4gW3N1cGVyIGRvdWJsZUZvcktl
eTpAImFscGhhIl07Cit9CisKKy0gKHZvaWQpc2V0QmV0YTooZG91YmxlKWJldGEKK3sKKyAgICBb
c3VwZXIgc2V0RG91YmxlOmJldGEgZm9yS2V5OkAiYmV0YSJdOworfQorCistIChkb3VibGUpYmV0
YQoreworICAgIHJldHVybiBbc3VwZXIgZG91YmxlRm9yS2V5OkAiYmV0YSJdOworfQorCitAZW5k
CisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3ZlcnNp
b24uanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvdmVyc2lvbi5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMC4uNjVmNGUyZTY2NTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdmVyc2lvbi5q
c29uLXJlc3VsdApAQCAtMCwwICsxLDg0NSBAQAorIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJh
Y2tlbmRDb21tYW5kcy5qcworLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHZlcnNp
b24uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisvLyBW
ZXJzaW9uRG9tYWluCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJWZXJzaW9uRG9t
YWluIiwgbnVsbCk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyVmVyc2lvbigiVmVyc2lvbkRv
bWFpbiIsIDQyKTsKK0luc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIlZlcnNpb25Eb21h
aW4iLCBudWxsKTsKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCisK
KyMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24KKy8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUo
SU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bFR5cGVzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRl
ci5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERp
c3BhdGNoZXIgeworcHVibGljOgorICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRy
PEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9
IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KKyAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERp
c3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Citw
cml2YXRlOgorICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hl
cjsKK307CisKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjIyMgRW5kIEZpbGU6IFRlc3RB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tl
bmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lv
bi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0eXBlZGVmIFN0
cmluZyBFcnJvclN0cmluZzsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVu
ZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
dmVyc2lvbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgi
CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgor
I2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVk
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCisjaWYgRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmRE
aXNwYXRjaGVycy5oIgorI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK30gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMj
IyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lvbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29s
T2JqZWN0cy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBGcm9udGVu
ZFJvdXRlcjsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RG
cm9udGVuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3Bh
dGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHZlcnNpb24uanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMu
Y3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCituYW1lc3BhY2UgUHJvdG9jb2wg
eworCisvLyBWZXJzaW9ucy4KK25hbWVzcGFjZSBWZXJzaW9uRG9tYWluIHsKK3N0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgVkVSU0lPTiA9IDQyOworfSAvLyBWZXJzaW9uRG9tYWluCisvLyBFbmQg
b2YgdmVyc2lvbnMuCisKKworCisKKworCisKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKwor
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVj
dHMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKworI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK25h
bWVzcGFjZSBQcm90b2NvbCB7CisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3Rz
LmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2luY2x1ZGUgPHd0
Zi9SZXRhaW5QdHIuaD4KKworCisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKK30gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNw
YXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hl
cnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmln
LmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1
ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKworbmFtZXNwYWNlIElu
c3BlY3RvciB7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbi5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
dmVyc2lvbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
KyNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KKworX19hdHRyaWJ1dGVfXygo
dmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3Vy
YXRpb24gOiBOU09iamVjdAorQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29u
ZmlndXJhdGlvbi5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9u
Lm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lvbi5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90
b2NvbENvbmZpZ3VyYXRpb24uaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIK
KyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW1w
b3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKwordXNp
bmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENv
bmZpZ3VyYXRpb24KK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250
cm9sbGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50
YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVy
IGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQo
Y29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVybiBz
ZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisK
K0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKwor
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwu
aCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDx3
dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisKKyMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJz
aW9uLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lt
cG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9S
V0lQcm90b2NvbEpTT05PYmplY3QuaD4KKworCisKKworCisKKworCisKKworCisKKworI2ltcG9y
dCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgor
CisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xJbnRlcm5hbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lv
bi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBv
cnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZh
dGUuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJv
bGxlci5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKworCisKKworIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHZlcnNp
b24uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1w
b3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFy
cmF5Q29udmVyc2lvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3RlbXBsYXRlPHR5
cGVuYW1lIE9iakNFbnVtVHlwZT4KK09wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29s
U3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
KworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorCisjIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lvbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5o
IgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQ
YXJzZXIuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2
YXRlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworCisKKworCisjIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorCisjIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sVHlwZXMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB2
ZXJzaW9uLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09O
T2JqZWN0UHJpdmF0ZS5oPgorI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbXBvcnQgPHd0
Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tY29tbWFuZC10YXJnZXRUeXBl
LW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tY29tbWFuZC10YXJnZXRUeXBlLW1h
dGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwLi5kNmRmOWU0YmQ5YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWNvbW1hbmQtdGFy
Z2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgpAQCAtMCwwICsxLDkg
QEAKK1sKK3sKKyAgICAiZG9tYWluIjogIkRvbWFpbiIsCisgICAgImRlYnVnZ2FibGVUeXBlcyI6
IFsiamF2YXNjcmlwdCJdLAorICAgICJ0YXJnZXRUeXBlcyI6IFsid29ya2VyIl0sCisgICAgImNv
bW1hbmRzIjogW3sibmFtZSI6ICJDb21tYW5kIn1dLAorICAgICJldmVudHMiOiBbeyJuYW1lIjog
IkV2ZW50In1dCit9CitdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1jb21tYW5kLXRhcmdldFR5cGVzLXR5cGUuanNvbiBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWNv
bW1hbmQtdGFyZ2V0VHlwZXMtdHlwZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwLi42NDA1OWY4NGJjZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlw
ZXMtdHlwZS5qc29uCkBAIC0wLDAgKzEsOSBAQAoreworICAgICJkb21haW4iOiAiRG9tYWluIiwK
KyAgICAiY29tbWFuZHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIlBhZ2VP
bmx5IiwKKyAgICAgICAgICAgICJ0YXJnZXRUeXBlcyI6ICJwYWdlZSIKKyAgICAgICAgfQorICAg
IF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlwZXMtdmFsdWUuanNvbiBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWNvbW1hbmQtdGFy
Z2V0VHlwZXMtdmFsdWUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MC4uNTAyMDQ0NzJlYzgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1jb21tYW5kLXRhcmdldFR5cGVzLXZhbHVl
Lmpzb24KQEAgLTAsMCArMSw5IEBACit7CisgICAgImRvbWFpbiI6ICJEb21haW4iLAorICAgICJj
b21tYW5kcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiUGFnZU9ubHkiLAor
ICAgICAgICAgICAgInRhcmdldFR5cGVzIjogWyJwYWdlZSJdCisgICAgICAgIH0KKyAgICBdCit9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZmFpbC1vbi1kb21haW4tZGVidWdnYWJsZVR5cGVzLXR5cGUuanNvbiBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWRvbWFpbi1kZWJ1Z2dh
YmxlVHlwZXMtdHlwZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
Li45NzQ4ZjQyMzQ3MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMtdHlw
ZS5qc29uCkBAIC0wLDAgKzEsOSBAQAoreworICAgICJkb21haW4iOiAiV2ViT25seSIsCisgICAg
ImRlYnVnZ2FibGVUeXBlcyI6ICJ3ZWJiIiwKKyAgICAiY29tbWFuZHMiOiBbCisgICAgICAgIHsK
KyAgICAgICAgICAgICJuYW1lIjogImVuYWJsZSIKKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWls
LW9uLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMtdmFsdWUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWRvbWFpbi1kZWJ1Z2dhYmxlVHlw
ZXMtdmFsdWUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYjI1
MmRkYmQ4M2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kb21haW4tZGVidWdnYWJsZVR5cGVzLXZhbHVlLmpz
b24KQEAgLTAsMCArMSw5IEBACit7CisgICAgImRvbWFpbiI6ICJXZWJPbmx5IiwKKyAgICAiZGVi
dWdnYWJsZVR5cGVzIjogWyJ3ZWJiIl0sCisgICAgImNvbW1hbmRzIjogWworICAgICAgICB7Cisg
ICAgICAgICAgICAibmFtZSI6ICJlbmFibGUiCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1v
bi1kb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbiBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWRv
bWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi43YWEwMjgwNDY1NwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9m
YWlsLW9uLWRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5q
c29uCkBAIC0wLDAgKzEsOCBAQAorWworeworICAgICJkb21haW4iOiAiRG9tYWluIiwKKyAgICAi
ZGVidWdnYWJsZVR5cGVzIjogWyJqYXZhc2NyaXB0Il0sCisgICAgImNvbW1hbmRzIjogW3sibmFt
ZSI6ICJDb21tYW5kIiwgInRhcmdldFR5cGVzIjogWyJ3b3JrZXIiXX1dLAorICAgICJldmVudHMi
OiBbeyJuYW1lIjogIkV2ZW50In1dCit9CitdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZXMt
dHlwZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2ZhaWwtb24tZG9tYWluLXRhcmdldFR5cGVzLXR5cGUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMC4uZDgyMjI2NzQxNDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kb21haW4t
dGFyZ2V0VHlwZXMtdHlwZS5qc29uCkBAIC0wLDAgKzEsOSBAQAoreworICAgICJkb21haW4iOiAi
UGFnZU9ubHkiLAorICAgICJ0YXJnZXRUeXBlcyI6ICJwYWdlZSIsCisgICAgImNvbW1hbmRzIjog
WworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJlbmFibGUiCisgICAgICAgIH0KKyAg
ICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZXMtdmFsdWUuanNvbiBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWRvbWFpbi10YXJn
ZXRUeXBlcy12YWx1ZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
Li5lN2IxMGQ3ZjE1NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWRvbWFpbi10YXJnZXRUeXBlcy12YWx1ZS5q
c29uCkBAIC0wLDAgKzEsOSBAQAoreworICAgICJkb21haW4iOiAiUGFnZU9ubHkiLAorICAgICJ0
YXJnZXRUeXBlcyI6IFsicGFnZWUiXSwKKyAgICAiY29tbWFuZHMiOiBbCisgICAgICAgIHsKKyAg
ICAgICAgICAgICJuYW1lIjogImVuYWJsZSIKKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9u
LWR1cGxpY2F0ZS1jb21tYW5kLWNhbGwtcGFyYW1ldGVyLW5hbWVzLmpzb24gYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kdXBsaWNhdGUtY29t
bWFuZC1jYWxsLXBhcmFtZXRlci1uYW1lcy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwLi5iYWI3NmNhNjI3OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWR1cGxpY2F0ZS1jb21t
YW5kLWNhbGwtcGFyYW1ldGVyLW5hbWVzLmpzb24KQEAgLTAsMCArMSwxNiBAQAoreworICAgICJk
b21haW4iOiAiT3ZlcmxheSIsCisgICAgImNvbW1hbmRzIjogWworICAgICAgICB7CisgICAgICAg
ICAgICAibmFtZSI6ICJwcm9jZXNzUG9pbnRzIiwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjog
WworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicG9pbnQiLCAidHlwZSI6ICJudW1iZXIiIH0s
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwb2ludCIsICJ0eXBlIjogIm51bWJlciIgfQor
ICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJyZXR1cm5zIjogWworICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAicmVzdWx0MSIsICJ0eXBlIjogInN0cmluZyIgfSwKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInJlc3VsdDIiLCAidHlwZSI6ICJzdHJpbmciIH0KKyAgICAgICAgICAgIF0K
KyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWR1cGxpY2F0ZS1jb21tYW5kLXJldHVybi1w
YXJhbWV0ZXItbmFtZXMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9mYWlsLW9uLWR1cGxpY2F0ZS1jb21tYW5kLXJldHVybi1wYXJhbWV0ZXItbmFt
ZXMuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYzhiYjE1YzA0
YjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1yZXR1cm4tcGFyYW1ldGVyLW5h
bWVzLmpzb24KQEAgLTAsMCArMSwxNiBAQAoreworICAgICJkb21haW4iOiAiT3ZlcmxheSIsCisg
ICAgImNvbW1hbmRzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJwcm9jZXNz
UG9pbnRzIiwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAicG9pbnQxIiwgInR5cGUiOiAibnVtYmVyIiB9LAorICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAicG9pbnQyIiwgInR5cGUiOiAibnVtYmVyIiB9CisgICAgICAgICAgICBdLAorICAg
ICAgICAgICAgInJldHVybnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJyZXN1bHQi
LCAidHlwZSI6ICJzdHJpbmciIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJyZXN1bHQi
LCAidHlwZSI6ICJzdHJpbmciIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0KK30K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9mYWlsLW9uLWR1cGxpY2F0ZS1ldmVudC1wYXJhbWV0ZXItbmFtZXMuanNvbiBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWR1cGxpY2F0ZS1l
dmVudC1wYXJhbWV0ZXItbmFtZXMuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMC4uZDNkM2IzY2M2NDIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kdXBsaWNhdGUtZXZlbnQtcGFy
YW1ldGVyLW5hbWVzLmpzb24KQEAgLTAsMCArMSwxMiBAQAoreworICAgICJkb21haW4iOiAiT3Zl
cmxheSIsCisgICAgImV2ZW50cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAi
cHJvY2Vzc2VkUG9pbnRzIiwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAicG9pbnQiLCAidHlwZSI6ICJudW1iZXIiIH0sCisgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJwb2ludCIsICJ0eXBlIjogIm51bWJlciIgfQorICAgICAgICAgICAg
XQorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZHVwbGljYXRlLXR5cGUtZGVjbGFyYXRp
b25zLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1kZWNsYXJhdGlvbnMuanNvbgpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNzAyZmM2YTMyNzAKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kdXBs
aWNhdGUtdHlwZS1kZWNsYXJhdGlvbnMuanNvbgpAQCAtMCwwICsxLDE1IEBACit7CisgICAgImRv
bWFpbiI6ICJSdW50aW1lIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAg
ICJpZCI6ICJSZW1vdGVPYmplY3RJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAor
ICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4iCisg
ICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJSZW1vdGVPYmplY3RJZCIs
CisgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgImRlc2NyaXB0aW9u
IjogIlVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4iCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFp
bC1vbi1kdXBsaWNhdGUtdHlwZS1tZW1iZXItbmFtZXMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLW1lbWJl
ci1uYW1lcy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hZWJh
Y2VlOGIyMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLW1lbWJlci1uYW1lcy5qc29u
CkBAIC0wLDAgKzEsMTUgQEAKK1sKK3sKKyAgICAiZG9tYWluIjogIk92ZXJsYXlUeXBlcyIsCisg
ICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiUG9pbnQiLAorICAg
ICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwor
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAieCIsICJ0eXBlIjogImludGVnZXIiIH0sCisgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJ4IiwgInR5cGUiOiAiaW50ZWdlciIgfQorICAgICAgICAg
ICAgXQorICAgICAgICB9CisgICAgXQorfQorXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZW51bS13aXRoLW5vLXZhbHVl
cy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2Zh
aWwtb24tZW51bS13aXRoLW5vLXZhbHVlcy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwLi4yMzJhN2MzMjQ5YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWVudW0td2l0aC1uby12
YWx1ZXMuanNvbgpAQCAtMCwwICsxLDEwIEBACit7CisgICAgImRvbWFpbiI6ICJEYXRhYmFzZSIs
CisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiUHJpbWFyeUNv
bG9ycyIsCisgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgImVudW0i
OiBbXQorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlwZS1tYXRj
aGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmct
ZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAuLjkxMzJjZTA4ODI4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlwZS1t
YXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgpAQCAtMCwwICsxLDggQEAKK1sKK3sK
KyAgICAiZG9tYWluIjogIkRvbWFpbiIsCisgICAgImRlYnVnZ2FibGVUeXBlcyI6IFsiamF2YXNj
cmlwdCJdLAorICAgICJjb21tYW5kcyI6IFt7Im5hbWUiOiAiQ29tbWFuZCJ9XSwKKyAgICAiZXZl
bnRzIjogW3sibmFtZSI6ICJFdmVudCIsICJ0YXJnZXRUeXBlcyI6IFsid29ya2VyIl19XQorfQor
XQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlwZXMtdHlwZS5qc29uIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlwZXMt
dHlwZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5lNTRlZDFm
NWM2YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGVzLXR5cGUuanNvbgpAQCAtMCww
ICsxLDkgQEAKK3sKKyAgICAiZG9tYWluIjogIkRvbWFpbiIsCisgICAgImV2ZW50cyI6IFsKKyAg
ICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiUGFnZU9ubHkiLAorICAgICAgICAgICAgInRh
cmdldFR5cGVzIjogInBhZ2VlIgorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZXZlbnQt
dGFyZ2V0VHlwZXMtdmFsdWUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGVzLXZhbHVlLmpzb24KbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjU4ODRiZmQ3YTZiCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2Zh
aWwtb24tZXZlbnQtdGFyZ2V0VHlwZXMtdmFsdWUuanNvbgpAQCAtMCwwICsxLDkgQEAKK3sKKyAg
ICAiZG9tYWluIjogIkRvbWFpbiIsCisgICAgImV2ZW50cyI6IFsKKyAgICAgICAgeworICAgICAg
ICAgICAgIm5hbWUiOiAiUGFnZU9ubHkiLAorICAgICAgICAgICAgInRhcmdldFR5cGVzIjogWyJw
YWdlZSJdCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9u
YWwtcGFyYW1ldGVyLWZsYWcuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxh
Zy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi43MzA4ZGI5OTJk
NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxhZy5q
c29uCkBAIC0wLDAgKzEsMTggQEAKK3sKKyAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKKyAgICAi
dHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJEYXRhYmFzZUlkIiwKKyAg
ICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAi
VW5pcXVlIGlkZW50aWZpZXIgb2YgRGF0YWJhc2Ugb2JqZWN0LiIKKyAgICAgICAgfQorICAgIF0s
CisgICAgImV2ZW50cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiZGlkRXhl
Y3V0ZU9wdGlvbmFsUGFyYW1ldGVycyIsCisgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAic3RyaW5nIiwg
Im9wdGlvbmFsIjogMCB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFp
bC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNvbiBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLW51bWJlci10eXBlZC1v
cHRpb25hbC10eXBlLW1lbWJlci5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwLi5hZmVhNTU1ZWM0ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRpb25h
bC10eXBlLW1lbWJlci5qc29uCkBAIC0wLDAgKzEsMTYgQEAKK1sKK3sKKyAgICAiZG9tYWluIjog
IkRhdGFiYXNlIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6
ICJFcnJvciIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgImRl
c2NyaXB0aW9uIjogIkRhdGFiYXNlIGVycm9yLiIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6
IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm1lc3NhZ2UiLCAidHlwZSI6ICJzdHJpbmci
LCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgbWVzc2FnZS4iIH0sCisgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJjb2RlIiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBj
b2RlLiIsICJvcHRpb25hbCI6IDAgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXQor
fQorXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24g
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1z
dHJpbmctdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbgpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNDAxMmM3OWI2YjMKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1zdHJp
bmctdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbgpAQCAtMCwwICsxLDE4IEBACit7
CisgICAgImRvbWFpbiI6ICJEYXRhYmFzZSIsCisgICAgInR5cGVzIjogWworICAgICAgICB7Cisg
ICAgICAgICAgICAiaWQiOiAiRGF0YWJhc2VJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJzdHJp
bmciLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBpZGVudGlmaWVyIG9mIERh
dGFiYXNlIG9iamVjdC4iCisgICAgICAgIH0KKyAgICBdLAorICAgICJldmVudHMiOiBbCisgICAg
ICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMi
LAorICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6ICJ0cnVlIiB9Cisg
ICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1zdHJpbmctdHlwZWQt
b3B0aW9uYWwtdHlwZS1tZW1iZXIuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXN0cmluZy10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJl
ci5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jYTNlZjI4YThm
OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9mYWlsLW9uLXN0cmluZy10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29u
CkBAIC0wLDAgKzEsMTYgQEAKK1sKK3sKKyAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKKyAgICAi
dHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJFcnJvciIsCisgICAgICAg
ICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkRhdGFi
YXNlIGVycm9yLiIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogIm1lc3NhZ2UiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAi
RXJyb3IgbWVzc2FnZS4iIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2RlIiwgInR5
cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBjb2RlLiIsICJvcHRpb25hbCI6
ICJmYWxzZSIgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXQorfQorXQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwt
b24tdHlwZS1kZWNsYXJhdGlvbi11c2luZy10eXBlLXJlZmVyZW5jZS5qc29uIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdHlwZS1kZWNsYXJh
dGlvbi11c2luZy10eXBlLXJlZmVyZW5jZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwLi4xOWI3NTkwY2NjNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXR5cGUtZGVjbGFyYXRp
b24tdXNpbmctdHlwZS1yZWZlcmVuY2UuanNvbgpAQCAtMCwwICsxLDEzIEBACitbCit7CisgICAg
ImRvbWFpbiI6ICJSdW50aW1lIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAg
ICAgICJpZCI6ICJSZW1vdGVPYmplY3RJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3Qi
LAorICAgICAgICAgICAgIiRyZWYiOiAiU29tZVR5cGUiLAorICAgICAgICAgICAgImRlc2NyaXB0
aW9uIjogIlVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4iCisgICAgICAgIH0KKyAgICBdCit9Citd
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZmFpbC1vbi10eXBlLXJlZmVyZW5jZS1hcy1wcmltaXRpdmUtdHlwZS5qc29uIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdHlwZS1yZWZl
cmVuY2UtYXMtcHJpbWl0aXZlLXR5cGUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMC4uOGM4M2JiZmNlNDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi10eXBlLXJlZmVyZW5jZS1h
cy1wcmltaXRpdmUtdHlwZS5qc29uCkBAIC0wLDAgKzEsMTggQEAKK3sKKyAgICAiZG9tYWluIjog
IkRhdGFiYXNlIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6
ICJEYXRhYmFzZUlkIiwKKyAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAg
ICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIGlkZW50aWZpZXIgb2YgRGF0YWJhc2Ugb2JqZWN0LiIK
KyAgICAgICAgfQorICAgIF0sCisgICAgImV2ZW50cyI6IFsKKyAgICAgICAgeworICAgICAgICAg
ICAgIm5hbWUiOiAiZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyIsCisgICAgICAgICAgICAi
cGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwg
InR5cGUiOiAiRGF0YWJhc2VJZCIgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXQor
fQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2ZhaWwtb24tdHlwZS13aXRoLWxvd2VyY2FzZS1uYW1lLmpzb24gYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi10eXBlLXdpdGgtbG93ZXJj
YXNlLW5hbWUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNTMx
OTAxZTRhOWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi10eXBlLXdpdGgtbG93ZXJjYXNlLW5hbWUuanNvbgpA
QCAtMCwwICsxLDEwIEBACit7CisgICAgImRvbWFpbiI6ICJEYXRhYmFzZSIsCisgICAgInR5cGVz
IjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiZGF0YWJhc2VJZCIsCisgICAgICAg
ICAgICAidHlwZSI6ICJpbnRlZ2VyIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlx
dWUgaWRlbnRpZmllciBvZiBEYXRhYmFzZSBvYmplY3QuIgorICAgICAgICB9CisgICAgXQorfQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLWRlY2xhcmF0aW9uLmpzb24g
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi11
bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtZGVjbGFyYXRpb24uanNvbgpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZDY4ODdhMjc0MTEKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1v
bi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtZGVjbGFyYXRpb24uanNvbgpAQCAtMCww
ICsxLDEyIEBACitbCit7CisgICAgImRvbWFpbiI6ICJSdW50aW1lIiwKKyAgICAidHlwZXMiOiBb
CisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJSZW1vdGVPYmplY3RJZCIsCisgICAgICAg
ICAgICAidHlwZSI6ICJkcmFnb24iLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1
ZSBvYmplY3QgaWRlbnRpZmllci4iCisgICAgICAgIH0KKyAgICBdCit9CitdCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi11
bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtbWVtYmVyLmpzb24gYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi11bmtub3duLXR5cGUtcmVm
ZXJlbmNlLWluLXR5cGUtbWVtYmVyLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAuLmI4MTdkYjUwNDRkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVy
ZW5jZS1pbi10eXBlLW1lbWJlci5qc29uCkBAIC0wLDAgKzEsMTUgQEAKK1sKK3sKKyAgICAiZG9t
YWluIjogIkZhbnRhc3kiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAg
ImlkIjogIkRyYWdvbkVnZyIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAg
ICAgICAgImRlc2NyaXB0aW9uIjogIkEgZHJhZ29uIGVnZy4iLAorICAgICAgICAgICAgInByb3Bl
cnRpZXMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2xvciIsICIkcmVmIjogIkNv
bG9yIiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdCit9CitdCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJhdGUt
ZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3Vh
cmRzLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjY3Y2Y4ZTU4
MmY2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCkBA
IC0wLDAgKzEsMzYgQEAKK1sKK3sKKyAgICAiZG9tYWluIjogIk5ldHdvcmsxIiwKKyAgICAiZmVh
dHVyZUd1YXJkIjogIlBMQVRGT1JNKFdFQl9DT01NQU5EUykiLAorICAgICJjb21tYW5kcyI6IFsK
KyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAibG9hZFJlc291cmNlIiwKKyAgICAgICAg
ICAgICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBhIHJlc291cmNlIGluIHRoZSBjb250ZXh0IG9mIGEg
ZnJhbWUgb24gdGhlIGluc3BlY3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNoZWNrcy4i
CisgICAgICAgIH0KKyAgICBdCit9LAoreworICAgICJkb21haW4iOiAiTmV0d29yazIiLAorICAg
ICJmZWF0dXJlR3VhcmQiOiAiUExBVEZPUk0oV0VCX1RZUEVTKSIsCisgICAgInR5cGVzIjogWwor
ICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiTmV0d29ya0Vycm9yIiwKKyAgICAgICAgICAg
ICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKKyAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogIm1lc3NhZ2UiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRp
b24iOiAiRXJyb3IgbWVzc2FnZS4iIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2Rl
IiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBjb2RlLiIgfQorICAg
ICAgICAgICAgXQorICAgICAgICB9CisgICAgXQorfSwKK3sKKyAgICAiZG9tYWluIjogIk5ldHdv
cmszIiwKKyAgICAiZmVhdHVyZUd1YXJkIjogIlBMQVRGT1JNKFdFQl9FVkVOVFMpIiwKKyAgICAi
ZXZlbnRzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJyZXNvdXJjZUxvYWRl
ZCIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQSByZXNvdXJjZSB3YXMgbG9hZGVkLiIK
KyAgICAgICAgfQorICAgIF0KK30KK10KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2NvbW1hbmQtdGFyZ2V0VHlwZS1tYXRj
aGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2NvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGlu
Zy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggZDI3YWI2NWI5MmEuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2NvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGlu
Zy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBA
QAotWwotewotICAgICJkb21haW4iOiAiRG9tYWluIiwKLSAgICAiZGVidWdnYWJsZVR5cGVzIjog
WyJwYWdlIl0sCi0gICAgInRhcmdldFR5cGVzIjogWyJwYWdlIiwgIndvcmtlciJdLAotICAgICJj
b21tYW5kcyI6IFt7Im5hbWUiOiAiQ29tbWFuZCJ9XSwKLSAgICAiZXZlbnRzIjogW3sibmFtZSI6
ICJFdmVudCJ9XQotfQotXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUu
anNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmljL2NvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDExMjYyZTg4OWZhLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9jb21tYW5kcy13aXRoLWFz
eW5jLWF0dHJpYnV0ZS5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsMTA5ICswLDAgQEAKLXsKLSAg
ICAiZG9tYWluIjogIkRhdGFiYXNlIiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAg
ICAgICAgICJpZCI6ICJEYXRhYmFzZUlkIiwKLSAgICAgICAgICAgICJ0eXBlIjogImludGVnZXIi
LAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBpZGVudGlmaWVyIG9mIERhdGFi
YXNlIG9iamVjdC4iCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJQ
cmltYXJ5Q29sb3JzIiwKLSAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCi0gICAgICAgICAg
ICAiZW51bSI6IFsicmVkIiwgImdyZWVuIiwgImJsdWUiXQotICAgICAgICB9LAotICAgICAgICB7
Ci0gICAgICAgICAgICAiaWQiOiAiQ29sb3JMaXN0IiwKLSAgICAgICAgICAgICJ0eXBlIjogImFy
cmF5IiwKLSAgICAgICAgICAgICJpdGVtcyI6IHsgIiRyZWYiOiAiUHJpbWFyeUNvbG9ycyIgfQot
ICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiRXJyb3IiLAotICAgICAg
ICAgICAgInR5cGUiOiAib2JqZWN0IiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJEYXRh
YmFzZSBlcnJvci4iLAotICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCi0gICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJtZXNzYWdlIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjog
IkVycm9yIG1lc3NhZ2UuIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29kZSIsICJ0
eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgY29kZS4iIH0KLSAgICAgICAg
ICAgIF0KLSAgICAgICAgfQotICAgIF0sCi0gICAgImNvbW1hbmRzIjogWwotICAgICAgICB7Ci0g
ICAgICAgICAgICAibmFtZSI6ICJleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzIiwK
LSAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
ZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiIH0sCi0gICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJxdWVyeSIsICJ0eXBlIjogInN0cmluZyIgfQotICAgICAgICAgICAgXSwKLSAgICAg
ICAgICAgICJyZXR1cm5zIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFt
ZXMiLCAidHlwZSI6ICJhcnJheSIsICJvcHRpb25hbCI6IHRydWUsICJpdGVtcyI6IHsgInR5cGUi
OiAic3RyaW5nIiB9IH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBl
IjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1l
IjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRp
b25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlw
ZSI6ICJhbnkiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIsICJvcHRpb25hbCI6IHRydWUgfSwK
LSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiLCAi
b3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5Db2xv
ciIsICIkcmVmIjogIlByaW1hcnlDb2xvcnMiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJhbHRlcm5hdGVDb2xvcnMiLCAiJHJlZiI6ICJDb2xvckxpc3Qi
LCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcmludENv
bG9yIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxs
b3ciLCAiYmxhY2siXSwgIm9wdGlvbmFsIjogdHJ1ZSB9Ci0gICAgICAgICAgICBdCi0gICAgICAg
IH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImV4ZWN1dGVTUUxBc3luY09wdGlv
bmFsUmV0dXJuVmFsdWVzIiwKLSAgICAgICAgICAgICJhc3luYyI6IHRydWUsCi0gICAgICAgICAg
ICAicGFyYW1ldGVycyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRhdGFiYXNlSWQi
LCAiJHJlZiI6ICJEYXRhYmFzZUlkIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicXVl
cnkiLCAidHlwZSI6ICJzdHJpbmciIH0KLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAicmV0
dXJucyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUi
OiAiYXJyYXkiLCAib3B0aW9uYWwiOiB0cnVlLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIg
fSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmci
LCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3Rh
bXAiLCAidHlwZSI6ICJudW1iZXIiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0cnVl
IH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55Iiwg
Im9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJ
ZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVycm9yIiwgIm9wdGlvbmFsIjog
dHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6
ICJQcmltYXJ5Q29sb3JzIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwgIiRyZWYiOiAiQ29sb3JMaXN0IiwgIm9wdGlvbmFs
IjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBl
IjogInN0cmluZyIsICJlbnVtIjogWyJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93IiwgImJsYWNr
Il0sICJvcHRpb25hbCI6IHRydWUgfQotICAgICAgICAgICAgXQotICAgICAgICB9LAotICAgICAg
ICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJleGVjdXRlU1FMU3luYyIsCi0gICAgICAgICAgICAi
cGFyYW1ldGVycyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRhdGFiYXNlSWQiLCAi
JHJlZiI6ICJEYXRhYmFzZUlkIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicXVlcnki
LCAidHlwZSI6ICJzdHJpbmciIH0KLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAicmV0dXJu
cyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAi
YXJyYXkiLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAotICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciIH0sCi0gICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiIH0sCi0gICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiIH0sCi0gICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiB9LAotICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiIH0sCi0gICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVycm9yIiB9LAotICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwgIiRyZWYiOiAiQ29sb3JMaXN0
IiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6ICJQ
cmltYXJ5Q29sb3JzIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJpbnRDb2xvciIs
ICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93Iiwg
ImJsYWNrIl0gfQotICAgICAgICAgICAgXQotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAg
ICAgICAibmFtZSI6ICJleGVjdXRlU1FMQXN5bmMiLAotICAgICAgICAgICAgImFzeW5jIjogdHJ1
ZSwKLSAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiIH0sCi0gICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJxdWVyeSIsICJ0eXBlIjogInN0cmluZyIgfQotICAgICAgICAgICAgXSwKLSAg
ICAgICAgICAgICJyZXR1cm5zIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1u
TmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0s
Ci0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIgfSwK
LSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIg
fSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIg
fSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiIH0s
Ci0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJh
c2VJZCIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAi
RXJyb3IiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVm
IjogIlByaW1hcnlDb2xvcnMiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJhbHRlcm5h
dGVDb2xvcnMiLCAiJHJlZiI6ICJDb2xvckxpc3QiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbImN5YW4iLCAibWFn
ZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0KLSAg
ICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFt
ZXRlcnMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9nZW5lcmljL2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5q
c29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNjFkNTdkODIwZC4uMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24K
KysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBACi17Ci0gICAgImRvbWFpbiI6ICJEYXRhYmFz
ZSIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiRGF0YWJh
c2VJZCIsCi0gICAgICAgICAgICAidHlwZSI6ICJpbnRlZ2VyIiwKLSAgICAgICAgICAgICJkZXNj
cmlwdGlvbiI6ICJVbmlxdWUgaWRlbnRpZmllciBvZiBEYXRhYmFzZSBvYmplY3QuIgotICAgICAg
ICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiUHJpbWFyeUNvbG9ycyIsCi0gICAg
ICAgICAgICAidHlwZSI6ICJzdHJpbmciLAotICAgICAgICAgICAgImVudW0iOiBbInJlZCIsICJn
cmVlbiIsICJibHVlIl0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjog
IkNvbG9yTGlzdCIsCi0gICAgICAgICAgICAidHlwZSI6ICJhcnJheSIsCi0gICAgICAgICAgICAi
aXRlbXMiOiB7ICIkcmVmIjogIlByaW1hcnlDb2xvcnMiIH0KLSAgICAgICAgfSwKLSAgICAgICAg
ewotICAgICAgICAgICAgImlkIjogIkVycm9yIiwKLSAgICAgICAgICAgICJ0eXBlIjogIm9iamVj
dCIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRGF0YWJhc2UgZXJyb3IuIiwKLSAgICAg
ICAgICAgICJwcm9wZXJ0aWVzIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibWVzc2Fn
ZSIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBtZXNzYWdlLiIgfSwK
LSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvZGUiLCAidHlwZSI6ICJpbnRlZ2VyIiwgImRl
c2NyaXB0aW9uIjogIkVycm9yIGNvZGUuIiB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0KLSAg
ICBdLAotICAgICJjb21tYW5kcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAi
ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyIsCi0gICAgICAgICAgICAicGFyYW1ldGVycyI6
IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJy
YXkiLCAib3B0aW9uYWwiOiB0cnVlLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAot
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0
aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAi
dHlwZSI6ICJudW1iZXIiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0g
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiwgIm9wdGlv
bmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIk
cmVmIjogIkRhdGFiYXNlSWQiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVycm9yIiwgIm9wdGlvbmFsIjogdHJ1ZSB9
LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6ICJQcmlt
YXJ5Q29sb3JzIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAiYWx0ZXJuYXRlQ29sb3JzIiwgIiRyZWYiOiAiQ29sb3JMaXN0IiwgIm9wdGlvbmFsIjogdHJ1
ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0
cmluZyIsICJlbnVtIjogWyJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93IiwgImJsYWNrIl0sICJv
cHRpb25hbCI6IHRydWUgfQotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJyZXR1cm5zIjog
WwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJh
eSIsICJvcHRpb25hbCI6IHRydWUsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCi0g
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRp
b25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0
eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJu
YW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiLCAib3B0aW9u
YWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRy
ZWYiOiAiRGF0YWJhc2VJZCIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7
ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiLCAib3B0aW9uYWwiOiB0cnVlIH0s
Ci0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVmIjogIlByaW1h
cnlDb2xvcnMiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJhbHRlcm5hdGVDb2xvcnMiLCAiJHJlZiI6ICJDb2xvckxpc3QiLCAib3B0aW9uYWwiOiB0cnVl
IH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3Ry
aW5nIiwgImVudW0iOiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSwgIm9w
dGlvbmFsIjogdHJ1ZSB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAg
ICAgICAgICAgICJuYW1lIjogImV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyIsCi0gICAgICAg
ICAgICAicGFyYW1ldGVycyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5h
bWVzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAot
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciIH0sCi0g
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiIH0s
Ci0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiIH0s
Ci0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiB9LAot
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNl
SWQiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVy
cm9yIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6
ICJQcmltYXJ5Q29sb3JzIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYWx0ZXJuYXRl
Q29sb3JzIiwgIiRyZWYiOiAiQ29sb3JMaXN0IiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJjeWFuIiwgIm1hZ2Vu
dGEiLCAieWVsbG93IiwgImJsYWNrIl0gfQotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJy
ZXR1cm5zIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlw
ZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCi0gICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIgfSwKLSAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIgfSwKLSAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIgfSwKLSAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiIH0sCi0gICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIgfSwKLSAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiIH0sCi0g
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlD
b2xvcnMiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJhbHRlcm5hdGVDb2xvcnMiLCAi
JHJlZiI6ICJDb2xvckxpc3QiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcmludENv
bG9yIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxs
b3ciLCAiYmxhY2siXSB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0KLSAgICBdCi19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2Vu
ZXJpYy9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZGVmaW5pdGlvbnMtd2l0aC1t
YWMtcGxhdGZvcm0uanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODE3ZjEzNWVl
NWEuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKysr
IC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi17Ci0gICAgImRvbWFpbiI6ICJOZXR3b3JrIiwK
LSAgICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJOZXR3b3JrRXJy
b3IiLAotICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKLSAgICAgICAgICAgICJwbGF0Zm9y
bSI6ICJtYWNvcyIsCi0gICAgICAgICAgICAicHJvcGVydGllcyI6IFsKLSAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogIm1lc3NhZ2UiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAi
RXJyb3IgbWVzc2FnZS4iIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2RlIiwgInR5
cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBjb2RlLiIgfQotICAgICAgICAg
ICAgXQotICAgICAgICB9Ci0gICAgXSwKLSAgICAiY29tbWFuZHMiOiBbCi0gICAgICAgIHsKLSAg
ICAgICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJjZSIsCi0gICAgICAgICAgICAicGxhdGZvcm0i
OiAibWFjb3MiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2Ug
aW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBj
cm9zcyBvcmlnaW4gY2hlY2tzLiIKLSAgICAgICAgfQotICAgIF0sCi0gICAgImV2ZW50cyI6IFsK
LSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAicmVzb3VyY2VMb2FkZWQiLAotICAgICAg
ICAgICAgInBsYXRmb3JtIjogIm1hY29zIiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJB
IHJlc291cmNlIHdhcyBsb2FkZWQuIgotICAgICAgICB9Ci0gICAgXQotfQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZG9t
YWluLWRlYnVnZ2FibGVUeXBlcy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZmViMGM5YTI3ZS4uMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZG9t
YWluLWRlYnVnZ2FibGVUeXBlcy5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1b
Ci17Ci0gICAgImRvbWFpbiI6ICJEb21haW4iLAotICAgICJkZWJ1Z2dhYmxlVHlwZXMiOiBbIndl
Yi1wYWdlIl0sCi0gICAgImNvbW1hbmRzIjogW3sibmFtZSI6ICJDb21tYW5kIn1dLAotICAgICJl
dmVudHMiOiBbeyJuYW1lIjogIkV2ZW50In1dCi19Ci1dCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9kb21haW4tdGFyZ2V0
VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbiBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2RvbWFpbi10YXJnZXRUeXBl
LW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBmNjJmYjM4YmE3OC4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZG9tYWluLXRhcmdldFR5cGUt
bWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw4
ICswLDAgQEAKLVsKLXsKLSAgICAiZG9tYWluIjogIkRvbWFpbiIsCi0gICAgImRlYnVnZ2FibGVU
eXBlcyI6IFsicGFnZSJdLAotICAgICJjb21tYW5kcyI6IFt7Im5hbWUiOiAiQ29tbWFuZCIsICJ0
YXJnZXRUeXBlcyI6IFsicGFnZSIsICJ3b3JrZXIiXX1dLAotICAgICJldmVudHMiOiBbeyJuYW1l
IjogIkV2ZW50In1dCi19Ci1dCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9kb21haW4tdGFyZ2V0VHlwZXMuanNvbiBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2RvbWFp
bi10YXJnZXRUeXBlcy5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YTZlNDBk
NjBhZC4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZG9tYWluLXRhcmdldFR5cGVzLmpzb24KKysrIC9kZXYvbnVs
bApAQCAtMSw4ICswLDAgQEAKLVsKLXsKLSAgICAiZG9tYWluIjogIkRvbWFpbiIsCi0gICAgInRh
cmdldFR5cGVzIjogWyJwYWdlIl0sCi0gICAgImNvbW1hbmRzIjogW3sibmFtZSI6ICJDb21tYW5k
IiwgInRhcmdldFR5cGVzIjogWyJwYWdlIl19XSwKLSAgICAiZXZlbnRzIjogW3sibmFtZSI6ICJF
dmVudCIsICJ0YXJnZXRUeXBlcyI6IFsicGFnZSJdfV0KLX0KLV0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2RvbWFpbnMt
d2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1h
bmQtc2l6ZXMuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTRhOGVjYjE3NmQu
LjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgor
KysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLVsKLXsKLSAgICAiZG9tYWluIjogIk5ldHdv
cmsxIiwKLSAgICAiY29tbWFuZHMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjog
ImxvYWRSZXNvdXJjZTEiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVz
b3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0
aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKLSAgICAgICAgfQotICAgIF0KLX0sCi17Ci0gICAg
ImRvbWFpbiI6ICJOZXR3b3JrMiIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7Ci0gICAgICAg
ICAgICAiaWQiOiAiTG9hZGVySWQiLAotICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKLSAg
ICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgbG9hZGVyIGlkZW50aWZpZXIuIgotICAg
ICAgICB9Ci0gICAgXQotfSwKLXsKLSAgICAiZG9tYWluIjogIk5ldHdvcmszIiwKLSAgICAiY29t
bWFuZHMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJjZTEi
LAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNv
bnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmln
aW4gY2hlY2tzLiIKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAi
bG9hZFJlc291cmNlMiIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9hZHMgYSByZXNv
dXJjZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFnZSB3aXRo
b3V0IGNyb3NzIG9yaWdpbiBjaGVja3MuIgotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAg
ICAgICAibmFtZSI6ICJsb2FkUmVzb3VyY2UzIiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6
ICJMb2FkcyBhIHJlc291cmNlIGluIHRoZSBjb250ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGluc3Bl
Y3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNoZWNrcy4iCi0gICAgICAgIH0sCi0gICAg
ICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJjZTQiLAotICAgICAgICAgICAg
ImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFt
ZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKLSAg
ICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAibG9hZFJlc291cmNlNSIs
Ci0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9hZHMgYSByZXNvdXJjZSBpbiB0aGUgY29u
dGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFnZSB3aXRob3V0IGNyb3NzIG9yaWdp
biBjaGVja3MuIgotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJs
b2FkUmVzb3VyY2U2IiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBhIHJlc291
cmNlIGluIHRoZSBjb250ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGluc3BlY3RlZCBwYWdlIHdpdGhv
dXQgY3Jvc3Mgb3JpZ2luIGNoZWNrcy4iCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAg
ICAgICJuYW1lIjogImxvYWRSZXNvdXJjZTciLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjog
IkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVj
dGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKLSAgICAgICAgfQotICAgIF0K
LX0KLV0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL2VudW0tdmFsdWVzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9lbnVtLXZhbHVlcy5qc29uCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZGFkNjFkZjdjOS4uMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZW51bS12
YWx1ZXMuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLXsiZG9tYWlucyI6Wwot
ewotICAgICJkb21haW4iOiAiVHlwZURvbWFpbiIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7
Ci0gICAgICAgICAgICAiaWQiOiAiVHlwZURvbWFpbkVudW0iLAotICAgICAgICAgICAgInR5cGUi
OiAic3RyaW5nIiwKLSAgICAgICAgICAgICJlbnVtIjogWyJzaGFyZWQiLCAicmVkIiwgImdyZWVu
IiwgImJsdWUiXQotICAgICAgICB9Ci0gICAgXQotfSwKLXsKLSAgICAiZG9tYWluIjogIkNvbW1h
bmREb21haW4iLAotICAgICJjb21tYW5kcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgIm5h
bWUiOiAiY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUiLAotICAgICAgICAgICAgInBhcmFtZXRl
cnMiOiBbXSwKLSAgICAgICAgICAgICJyZXR1cm5zIjogWwotICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAicmV0dXJuVmFsdWUiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsic2hhcmVkIiwg
ImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciXSB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0K
LSAgICBdCi19LAotewotICAgICJkb21haW4iOiAiRXZlbnREb21haW4iLAotICAgICJldmVudHMi
OiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImV2ZW50V2l0aEVudW1QYXJhbWV0
ZXIiLAotICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJwYXJhbWV0ZXIiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsic2hhcmVkIiwgImJs
YWNrIiwgIndoaXRlIl0gfQotICAgICAgICAgICAgXQotICAgICAgICB9Ci0gICAgXQotfQotXX0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9nZW5lcmljL2V2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBl
Lmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2Vu
ZXJpYy9ldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29u
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZGZlZDQxZWQyMS4uMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVy
aWMvZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgor
KysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotWwotewotICAgICJkb21haW4iOiAiRG9tYWlu
IiwKLSAgICAiZGVidWdnYWJsZVR5cGVzIjogWyJwYWdlIl0sCi0gICAgImNvbW1hbmRzIjogW3si
bmFtZSI6ICJDb21tYW5kIn1dLAotICAgICJldmVudHMiOiBbeyJuYW1lIjogIkV2ZW50IiwgInRh
cmdldFR5cGVzIjogWyJwYWdlIiwgIndvcmtlciJdfV0KLX0KLV0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V2ZW50cy13
aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRl
cnMuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2FiYmYxMGI4MzYuLjAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9nZW5lcmljL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgorKysgL2Rldi9u
dWxsCkBAIC0xLDU5ICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKLSAgICAi
dHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJEYXRhYmFzZUlkIiwKLSAg
ICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAi
VW5pcXVlIGlkZW50aWZpZXIgb2YgRGF0YWJhc2Ugb2JqZWN0LiIKLSAgICAgICAgfSwKLSAgICAg
ICAgewotICAgICAgICAgICAgImlkIjogIlByaW1hcnlDb2xvcnMiLAotICAgICAgICAgICAgInR5
cGUiOiAic3RyaW5nIiwKLSAgICAgICAgICAgICJ2YWx1ZXMiOiBbInJlZCIsICJncmVlbiIsICJi
bHVlIl0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIkNvbG9yTGlz
dCIsCi0gICAgICAgICAgICAidHlwZSI6ICJhcnJheSIsCi0gICAgICAgICAgICAiaXRlbXMiOiB7
ICIkcmVmIjogIlByaW1hcnlDb2xvcnMiIH0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAg
ICAgICAgImlkIjogIkVycm9yIiwKLSAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCi0gICAg
ICAgICAgICAiZGVzY3JpcHRpb24iOiAiRGF0YWJhc2UgZXJyb3IuIiwKLSAgICAgICAgICAgICJw
cm9wZXJ0aWVzIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibWVzc2FnZSIsICJ0eXBl
IjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBtZXNzYWdlLiIgfSwKLSAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogImNvZGUiLCAidHlwZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9u
IjogIkVycm9yIGNvZGUuIiB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0KLSAgICBdLAotICAg
ICJldmVudHMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImRpZEV4ZWN1dGVP
cHRpb25hbFBhcmFtZXRlcnMiLAotICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCi0gICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIm9wdGlv
bmFsIjogdHJ1ZSwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwKLSAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1
ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVt
YmVyIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFs
dWVzIiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIsICJvcHRpb25hbCI6IHRydWUg
fSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAiRXJyb3Ii
LCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5D
b2xvciIsICIkcmVmIjogIlByaW1hcnlDb2xvcnMiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJhbHRlcm5hdGVDb2xvcnMiLCAiJHJlZiI6ICJDb2xvckxp
c3QiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcmlu
dENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgInZhbHVlcyI6IFsiY3lhbiIsICJtYWdlbnRhIiwg
InllbGxvdyIsICJibGFjayJdLCAib3B0aW9uYWwiOiB0cnVlIH0KLSAgICAgICAgICAgIF0KLSAg
ICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiZGlkRXhlY3V0ZU5vT3B0
aW9uYWxQYXJhbWV0ZXJzIiwKLSAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwotICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6
IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3Rl
cyIsICJ0eXBlIjogInN0cmluZyIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVz
dGFtcCIsICJ0eXBlIjogIm51bWJlciIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZh
bHVlcyIsICJ0eXBlIjogIm9iamVjdCIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBh
eWxvYWQiLCAidHlwZSI6ICJhbnkiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzcWxF
cnJvciIsICIkcmVmIjogIkVycm9yIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2Ny
ZWVuQ29sb3IiLCAiJHJlZiI6ICJQcmltYXJ5Q29sb3JzIiB9LAotICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwgIiRyZWYiOiAiQ29sb3JMaXN0IiB9LAotICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmluZyIsICJ2YWx1
ZXMiOiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSB9Ci0gICAgICAgICAg
ICBdCi0gICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9jb21tYW5kLXRhcmdl
dFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tcmVzdWx0IGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQv
Y29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJl
c3VsdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDg1YWE2MWU2YjcuLjAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL2V4cGVjdGVkL2NvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdn
YWJsZVR5cGUuanNvbi1yZXN1bHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMDYzICswLDAgQEAKLSMj
IyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRl
YnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotLy8gRG9tYWluCi1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJEb21haW4i
LCBbInBhZ2UiLCAid29ya2VyIl0pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQo
IkRvbWFpbi5Db21tYW5kIiwgbnVsbCwgW10sIFtdKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0
ZXJFdmVudCgiRG9tYWluLkV2ZW50IiwgbnVsbCwgW10pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdp
c3RlckRvbWFpbkRpc3BhdGNoZXIgPSBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRGlzcGF0Y2hl
ci5iaW5kKEluc3BlY3RvckJhY2tlbmQsICJEb21haW4iKTsKLUluc3BlY3RvckJhY2tlbmQuYWN0
aXZhdGVEb21haW4oIkRvbWFpbiIsIFsicGFnZSJdKTsKLSMjIyBFbmQgRmlsZTogSW5zcGVjdG9y
QmFja2VuZENvbW1hbmRzLmpzCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2Vu
ZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5k
LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQotI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbFR5cGVzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVu
ZFJvdXRlci5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgQWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIo
UmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0
Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KLSAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFj
a2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgp
OyB9Ci1wcml2YXRlOgotICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlz
cGF0Y2hlcjsKLX07Ci0KLQotY2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIg
OiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZpcnR1
YWwgfkFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKCkgeyB9Ci0gICAgdmlydHVhbCB2
b2lkIENvbW1hbmQobG9uZyBjYWxsSWQpID0gMDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgotCi0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
Ci0jIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dh
YmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10eXBl
ZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQotY2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXI7Ci0j
ZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0KLWNsYXNz
IERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB2
b2lkIENvbW1hbmQoRXJyb3JTdHJpbmcmKSA9IDA7Ci1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB+
RG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7Ci19OwotCi1jbGFzcyBEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hl
ciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gY3Jl
YXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7
Ci0gICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2Qs
IFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkgb3ZlcnJpZGU7Ci1wcml2YXRlOgotICAgIHZv
aWQgQ29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0
ZXJzKTsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLXB1Ymxp
YzoKLSAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlRG9tYWluQmFja2Vu
ZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVy
ID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQotcHJpdmF0ZToKLSAgICBBbHRlcm5hdGVEb21haW5C
YWNrZW5kRGlzcGF0Y2hlciogbV9hbHRlcm5hdGVEaXNwYXRjaGVyIHsgbnVsbHB0ciB9OwotI2Vu
ZGlmCi1wcml2YXRlOgotICAgIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRj
aGVyJiwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgRG9tYWluQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50IHsgbnVsbHB0ciB9OwotfTsKLQotfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAot
Ci0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWlu
LWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0
Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91
dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJE
ZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNpZiBFTkFCTEUo
SU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSNpbmNsdWRlICJUZXN0QWx0ZXJuYXRl
QmFja2VuZERpc3BhdGNoZXJzLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0K
LURvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6fkRvbWFpbkJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlcigpIHsgfQotCi1SZWY8RG9tYWluQmFja2VuZERpc3BhdGNoZXI+IERvbWFpbkJhY2tl
bmREaXNwYXRjaGVyOjpjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVy
LCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQotewotICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBh
Z2VudCkpOwotfQotCi1Eb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6RG9tYWluQmFja2VuZERpc3Bh
dGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBEb21haW5CYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQotICAgIDogU3VwcGxlbWVudGFsQmFja2VuZERpc3Bh
dGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCi0gICAgLCBtX2FnZW50KGFnZW50KQotewotICAgIG1f
YmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbigiRG9tYWluIl9z
LCB0aGlzKTsKLX0KLQotdm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9u
ZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1l
c3NhZ2UpCi17Ci0gICAgUmVmPERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlz
KTsKLQotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+
Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRlcnMpOwotCi0gICAgaWYgKG1ldGhvZCA9PSAi
Q29tbWFuZCIpCi0gICAgICAgIENvbW1hbmQocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMp
KTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29s
RXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi4iICsgbWV0
aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOwotfQotCi12b2lkIERvbWFpbkJhY2tlbmREaXNwYXRj
aGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQotewot
I2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotICAgIGlmIChtX2Fs
dGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5Db21t
YW5kKHJlcXVlc3RJZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIEVy
cm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9i
amVjdDo6Y3JlYXRlKCk7Ci0gICAgbV9hZ2VudC0+Q29tbWFuZChlcnJvcik7Ci0KLSAgICBpZiAo
IWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9u
c2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAg
IG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNo
ZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMj
IyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1
Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2lu
Y2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBGcm9udGVuZFJvdXRlcjsKLQotY2xh
c3MgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKLXB1YmxpYzoKLSAgICBEb21haW5Gcm9udGVuZERpc3BhdGNoZXIoRnJvbnRlbmRSb3V0ZXIm
IGZyb250ZW5kUm91dGVyKSA6IG1fZnJvbnRlbmRSb3V0ZXIoZnJvbnRlbmRSb3V0ZXIpIHsgfQot
ICAgIHZvaWQgRXZlbnQoKTsKLXByaXZhdGU6Ci0gICAgRnJvbnRlbmRSb3V0ZXImIG1fZnJvbnRl
bmRSb3V0ZXI7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTog
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5k
RGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFu
ZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi12b2lkIERvbWFpbkZyb250ZW5k
RGlzcGF0Y2hlcjo6RXZlbnQoKQotewotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdl
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJt
ZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOwotCi0gICAgbV9mcm9udGVuZFJvdXRlci5zZW5k
RXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVn
Z2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90
b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFtZXNwYWNlIElu
c3BlY3RvciB7Ci0KLQotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotCi0KLQotCi0KLQot
fSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sT2JqZWN0cy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21t
YW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLQotI2luY2x1ZGUgPHd0Zi9PcHRp
b25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3Bl
Y3RvciB7Ci0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90
b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xPYmplY3RzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERp
c3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRh
cmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2luY2x1ZGUgPHd0Zi9S
ZXRhaW5QdHIuaD4KLQotQHByb3RvY29sIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI7
Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLWNsYXNzIE9iakNJbnNwZWN0b3JEb21haW5C
YWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlz
cGF0Y2hlciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgT2Jq
Q0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbERvbWFpbkRv
bWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KLSAgICB2aXJ0
dWFsIHZvaWQgQ29tbWFuZChsb25nIHJlcXVlc3RJZCkgb3ZlcnJpZGU7Ci1wcml2YXRlOgotICAg
IFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0
ZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29u
ZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLQotbmFtZXNwYWNl
IEluc3BlY3RvciB7Ci0KLXZvaWQgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVy
OjpDb21tYW5kKGxvbmcgcmVxdWVzdElkKQotewotICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9u
ZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0Nh
bGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29s
RXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRG9t
YWluLkNvbW1hbmQnIHdhcyBub3QgZm91bmQiX3MpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
aWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0
Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICB9OwotCi0gICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0g
XnsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwg
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2UpOwotICAgIH07Ci0KLSAgICBbbV9kZWxlZ2F0
ZSBDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6
c3VjY2Vzc0NhbGxiYWNrXTsKLX0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJs
ZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0j
aW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+Ci0KLV9fYXR0cmlidXRlX18oKHZp
c2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0
aW9uIDogTlNPYmplY3QKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4sIHNldHRlcj1zZXRE
b21haW5IYW5kbGVyOikgaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4gZG9tYWlu
SGFuZGxlcjsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgVGVzdFByb3RvY29sRG9t
YWluRG9tYWluRXZlbnREaXNwYXRjaGVyICpkb21haW5FdmVudERpc3BhdGNoZXI7Ci1AZW5kCi0K
LQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2Fi
bGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgotCi0jaW1wb3J0ICJUZXN0UHJv
dG9jb2xJbnRlcm5hbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJz
LmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5o
PgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVy
Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlz
cGF0Y2hlcnMuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVycy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW1wbGVtZW50YXRp
b24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9y
Q29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci0gICAgaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWlu
SGFuZGxlcj4gX2RvbWFpbkhhbmRsZXI7Ci0gICAgVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZl
bnREaXNwYXRjaGVyICpfZG9tYWluRXZlbnREaXNwYXRjaGVyOwotfQotCi0tIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNv
bnRyb2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAg
ICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRyb2xs
ZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWRlYWxsb2MK
LXsKLSAgICBbX2RvbWFpbkhhbmRsZXIgcmVsZWFzZV07Ci0gICAgW19kb21haW5FdmVudERpc3Bh
dGNoZXIgcmVsZWFzZV07Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi0tICh2b2lkKXNldERv
bWFpbkhhbmRsZXI6KGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+KWhhbmRsZXIK
LXsKLSAgICBpZiAoaGFuZGxlciA9PSBfZG9tYWluSGFuZGxlcikKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgW19kb21haW5IYW5kbGVyIHJlbGVhc2VdOwotICAgIF9kb21haW5IYW5kbGVyID0gW2hh
bmRsZXIgcmV0YWluXTsKLQotICAgIGF1dG8gYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IG1ha2VVbmlx
dWU8T2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyPihoYW5kbGVyKTsKLSAgICBh
dXRvIGFsdGVybmF0ZUFnZW50ID0gbWFrZVVuaXF1ZTxBbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2Vu
dDxEb21haW5CYWNrZW5kRGlzcGF0Y2hlciwgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNo
ZXI+PigiRG9tYWluIl9zLCAqX2NvbnRyb2xsZXIsIFdURk1vdmUoYWx0ZXJuYXRlRGlzcGF0Y2hl
cikpOwotICAgIF9jb250cm9sbGVyLT5hcHBlbmRFeHRyYUFnZW50KFdURk1vdmUoYWx0ZXJuYXRl
QWdlbnQpKTsKLX0KLQotLSAoaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4pZG9t
YWluSGFuZGxlcgotewotICAgIHJldHVybiBfZG9tYWluSGFuZGxlcjsKLX0KLQotLSAoVGVzdFBy
b3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyICopZG9tYWluRXZlbnREaXNwYXRjaGVy
Ci17Ci0gICAgaWYgKCFfZG9tYWluRXZlbnREaXNwYXRjaGVyKQotICAgICAgICBfZG9tYWluRXZl
bnREaXNwYXRjaGVyID0gW1tUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIg
YWxsb2NdIGluaXRXaXRoQ29udHJvbGxlcjpfY29udHJvbGxlcl07Ci0gICAgcmV0dXJuIF9kb21h
aW5FdmVudERpc3BhdGNoZXI7Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbENvbmZpZ3VyYXRpb24ubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50
RGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5k
LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29s
SW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0j
aW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwot
Ci1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVy
Ci17Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKLX0K
LQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0
b3JDb250cm9sbGVyKiljb250cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAg
ICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIp
OwotICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQot
LSAodm9pZClFdmVudAotewotICAgIGNvbnN0IEZyb250ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29u
dHJvbGxlci0+ZnJvbnRlbmRSb3V0ZXIoKTsKLQotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25N
ZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3Ry
aW5nKCJtZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOwotICAgIHJvdXRlci5zZW5kRXZlbnQo
anNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRh
cmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3Vu
ZGF0aW9uLmg+Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3Qu
aD4KLQotCi0KLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sUGxhdGZv
cm0pIHsKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbCwKLSAgICBUZXN0UHJvdG9jb2xQbGF0
Zm9ybUdlbmVyaWMsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1JT1MsCi0gICAgVGVzdFByb3Rv
Y29sUGxhdGZvcm1NYWNPUywKLX07Ci0KLQotCi0KLQotQHByb3RvY29sIFRlc3RQcm90b2NvbERv
bWFpbkRvbWFpbkhhbmRsZXIgPE5TT2JqZWN0PgotQG9wdGlvbmFsCi0tICh2b2lkKUNvbW1hbmRX
aXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sg
c3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKHZvaWQpKXN1Y2Nlc3NDYWxsYmFjazsKLUBlbmQKLQot
X19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQ
cm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciA6IE5TT2JqZWN0Ci0tICh2b2lkKUV2
ZW50OwotQGVuZAotCi0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29t
cGF0aWJpbGl0eU9iamVjdHMuaD4KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdn
YWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmpl
Y3RQcml2YXRlLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3Rv
ckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLUBpbnRlcmZhY2Ug
VGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyIChQcml2YXRlKQotLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooSW5zcGVjdG9yOjpBdWdtZW50YWJsZUluc3Bl
Y3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXI7Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xJbnRlcm5hbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmQtdGFy
Z2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIK
LSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KLQot
bmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4K
LU9wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYg
dmFsdWUpOwotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sUGxh
dGZvcm0gdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9j
b2xQbGF0Zm9ybUFsbDoKLSAgICAgICAgcmV0dXJuICJhbGwiX3M7Ci0gICAgY2FzZSBUZXN0UHJv
dG9jb2xQbGF0Zm9ybUdlbmVyaWM6Ci0gICAgICAgIHJldHVybiAiZ2VuZXJpYyJfczsKLSAgICBj
YXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOgotICAgICAgICByZXR1cm4gImlvcyJfczsKLSAg
ICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M6Ci0gICAgICAgIHJldHVybiAibWFjb3Mi
X3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29s
UGxhdGZvcm0+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAg
IGlmICh2YWx1ZSA9PSAiYWxsIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3Jt
QWxsOwotICAgIGlmICh2YWx1ZSA9PSAiZ2VuZXJpYyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJv
dG9jb2xQbGF0Zm9ybUdlbmVyaWM7Ci0gICAgaWYgKHZhbHVlID09ICJpb3MiKQotICAgICAgICBy
ZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1JT1M7Ci0gICAgaWYgKHZhbHVlID09ICJtYWNvcyIp
Ci0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOwotICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAi
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5o
IgotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgotI2ltcG9ydCA8V2ViSW5zcGVj
dG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLQotdXNpbmcgbmFtZXNwYWNlIElu
c3BlY3RvcjsKLQotCi0KLQotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1k
b21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0
ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9S
V0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5o
PgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3Rv
cjsKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBl
Y3RlZC9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2Nv
bW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24tcmVzdWx0CmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA1OWIzZTNjZmQ4YS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvY29tbWFu
ZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbi1yZXN1bHQKKysrIC9kZXYvbnVsbApAQCAtMSwx
ODA5ICswLDAgQEAKLSMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0
dHJpYnV0ZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LS8vIERhdGFiYXNlCi1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJEYXRhYmFzZSIs
IG51bGwpOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIkRhdGFiYXNlLlByaW1hcnlD
b2xvcnMiLCB7UmVkOiAicmVkIiwgR3JlZW46ICJncmVlbiIsIEJsdWU6ICJibHVlIn0pOwotSW5z
cGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIkRhdGFiYXNlLmV4ZWN1dGVTUUxTeW5jT3B0
aW9uYWxSZXR1cm5WYWx1ZXMiLCBudWxsLCBbeyJuYW1lIjogImRhdGFiYXNlSWQiLCAidHlwZSI6
ICJudW1iZXIifSwgeyJuYW1lIjogInF1ZXJ5IiwgInR5cGUiOiAic3RyaW5nIn1dLCBbImNvbHVt
bk5hbWVzIiwgIm5vdGVzIiwgInRpbWVzdGFtcCIsICJ2YWx1ZXMiLCAicGF5bG9hZCIsICJkYXRh
YmFzZUlkIiwgInNxbEVycm9yIiwgInNjcmVlbkNvbG9yIiwgImFsdGVybmF0ZUNvbG9ycyIsICJw
cmludENvbG9yIl0pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIkRhdGFiYXNl
LmV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzIiwgbnVsbCwgW3sibmFtZSI6ICJk
YXRhYmFzZUlkIiwgInR5cGUiOiAibnVtYmVyIn0sIHsibmFtZSI6ICJxdWVyeSIsICJ0eXBlIjog
InN0cmluZyJ9XSwgWyJjb2x1bW5OYW1lcyIsICJub3RlcyIsICJ0aW1lc3RhbXAiLCAidmFsdWVz
IiwgInBheWxvYWQiLCAiZGF0YWJhc2VJZCIsICJzcWxFcnJvciIsICJzY3JlZW5Db2xvciIsICJh
bHRlcm5hdGVDb2xvcnMiLCAicHJpbnRDb2xvciJdKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0
ZXJDb21tYW5kKCJEYXRhYmFzZS5leGVjdXRlU1FMU3luYyIsIG51bGwsIFt7Im5hbWUiOiAiZGF0
YWJhc2VJZCIsICJ0eXBlIjogIm51bWJlciJ9LCB7Im5hbWUiOiAicXVlcnkiLCAidHlwZSI6ICJz
dHJpbmcifV0sIFsiY29sdW1uTmFtZXMiLCAibm90ZXMiLCAidGltZXN0YW1wIiwgInZhbHVlcyIs
ICJwYXlsb2FkIiwgImRhdGFiYXNlSWQiLCAic3FsRXJyb3IiLCAiYWx0ZXJuYXRlQ29sb3JzIiwg
InNjcmVlbkNvbG9yIiwgInByaW50Q29sb3IiXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVy
Q29tbWFuZCgiRGF0YWJhc2UuZXhlY3V0ZVNRTEFzeW5jIiwgbnVsbCwgW3sibmFtZSI6ICJkYXRh
YmFzZUlkIiwgInR5cGUiOiAibnVtYmVyIn0sIHsibmFtZSI6ICJxdWVyeSIsICJ0eXBlIjogInN0
cmluZyJ9XSwgWyJjb2x1bW5OYW1lcyIsICJub3RlcyIsICJ0aW1lc3RhbXAiLCAidmFsdWVzIiwg
InBheWxvYWQiLCAiZGF0YWJhc2VJZCIsICJzcWxFcnJvciIsICJzY3JlZW5Db2xvciIsICJhbHRl
cm5hdGVDb2xvcnMiLCAicHJpbnRDb2xvciJdKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJE
YXRhYmFzZURpc3BhdGNoZXIgPSBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRGlzcGF0Y2hlci5i
aW5kKEluc3BlY3RvckJhY2tlbmQsICJEYXRhYmFzZSIpOwotSW5zcGVjdG9yQmFja2VuZC5hY3Rp
dmF0ZURvbWFpbigiRGF0YWJhc2UiLCBudWxsKTsKLSMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFj
a2VuZENvbW1hbmRzLmpzCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERp
c3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13
aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgotI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLQotbmFtZXNwYWNl
IEluc3BlY3RvciB7Ci0KLWNsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1Ymxp
YzoKLSAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hl
cj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNo
ZXIpOyB9Ci0gICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3Qg
eyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQotcHJpdmF0ZToKLSAgICBSZWZQ
dHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Ci19OwotCi0KLWNsYXNz
IEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZpcnR1YWwgfkFsdGVybmF0ZURhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXIoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTFN5bmNP
cHRpb25hbFJldHVyblZhbHVlcyhsb25nIGNhbGxJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0
IFN0cmluZyYgaW5fcXVlcnkpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTEFzeW5j
T3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyBjYWxsSWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25z
dCBTdHJpbmcmIGluX3F1ZXJ5KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxTeW5j
KGxvbmcgY2FsbElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMQXN5bmMobG9uZyBjYWxsSWQsIGludCBp
bl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KSA9IDA7Ci19OwotCi19IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKLQotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQotIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRl
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdt
YSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXR5cGVkZWYgU3Ry
aW5nIEVycm9yU3RyaW5nOwotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCi1jbGFzcyBBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOwotI2VuZGlm
IC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi1jbGFzcyBEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7Ci1wdWJsaWM6Ci0gICAgLy8gTmFtZWQgYWZ0
ZXIgcGFyYW1ldGVyICdwcmludENvbG9yJyB3aGlsZSBnZW5lcmF0aW5nIGNvbW1hbmQvZXZlbnQg
ZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcy4KLSAgICBlbnVtIGNsYXNzIFByaW50
Q29sb3IgewotICAgICAgICBDeWFuID0gMywKLSAgICAgICAgTWFnZW50YSA9IDQsCi0gICAgICAg
IFllbGxvdyA9IDUsCi0gICAgICAgIEJsYWNrID0gNiwKLSAgICB9OyAvLyBlbnVtIGNsYXNzIFBy
aW50Q29sb3IKLSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZh
bHVlcyhFcnJvclN0cmluZyYsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1
ZXJ5LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYgb3B0X291dF9jb2x1bW5OYW1lcywg
T3B0aW9uYWw8U3RyaW5nPiYgb3B0X291dF9ub3RlcywgT3B0aW9uYWw8ZG91YmxlPiYgb3B0X291
dF90aW1lc3RhbXAsIE9wdGlvbmFsPEpTT046Ok9iamVjdD4mIG9wdF9vdXRfdmFsdWVzLCBPcHRp
b25hbDxKU09OOjpWYWx1ZT4mIG9wdF9vdXRfcGF5bG9hZCwgT3B0aW9uYWw8aW50PiYgb3B0X291
dF9kYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9y
PiYgb3B0X291dF9zcWxFcnJvciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1h
cnlDb2xvcnMqIG9wdF9vdXRfc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYgb3B0X291dF9hbHRlcm5hdGVDb2xvcnMsIERhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yKiBvcHRfb3V0X3ByaW50Q29sb3Ip
ID0gMDsKLSAgICBjbGFzcyBFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxi
YWNrIDogcHVibGljIEJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UgewotICAgIHB1Ymxp
YzoKLSAgICAgICAgRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjayhS
ZWY8QmFja2VuZERpc3BhdGNoZXI+JiYsIGludCBpZCk7Ci0gICAgICAgIHZvaWQgc2VuZFN1Y2Nl
c3MoUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mJiBjb2x1bW5OYW1lcywgT3B0aW9uYWw8
U3RyaW5nPiYgbm90ZXMsIE9wdGlvbmFsPGRvdWJsZT4mIHRpbWVzdGFtcCwgT3B0aW9uYWw8SlNP
Tjo6T2JqZWN0PiYgdmFsdWVzLCBPcHRpb25hbDxKU09OOjpWYWx1ZT4mIHBheWxvYWQsIE9wdGlv
bmFsPGludD4mIGRhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFz
ZTo6RXJyb3I+JiYgc3FsRXJyb3IsIE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFi
YXNlOjpQcmltYXJ5Q29sb3JzPiBzY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiYgYWx0ZXJuYXRlQ29sb3JzLCBPcHRpb25hbDxEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvcj4gcHJpbnRDb2xvcik7Ci0g
ICAgfTsKLSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1
ZXMoaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnksIFJlZjxFeGVjdXRl
U1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrPiYmIGNhbGxiYWNrKSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxTeW5jKEVycm9yU3RyaW5nJiwgaW50IGluX2RhdGFi
YXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnksIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmlu
Zz4+JiBvdXRfY29sdW1uTmFtZXMsIFN0cmluZyogb3V0X25vdGVzLCBkb3VibGUqIG91dF90aW1l
c3RhbXAsIEpTT046Ok9iamVjdCogb3V0X3ZhbHVlcywgSlNPTjo6VmFsdWUqIG91dF9wYXlsb2Fk
LCBpbnQqIG91dF9kYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6OkVycm9yPiYgb3V0X3NxbEVycm9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0
YWJhc2U6OkNvbG9yTGlzdD4mIG91dF9hbHRlcm5hdGVDb2xvcnMsIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzKiBvdXRfc2NyZWVuQ29sb3IsIERhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yKiBvdXRfcHJpbnRDb2xvcikgPSAwOwot
ICAgIGNsYXNzIEV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrIDogcHVibGljIEJhY2tlbmREaXNwYXRj
aGVyOjpDYWxsYmFja0Jhc2UgewotICAgIHB1YmxpYzoKLSAgICAgICAgRXhlY3V0ZVNRTEFzeW5j
Q2FsbGJhY2soUmVmPEJhY2tlbmREaXNwYXRjaGVyPiYmLCBpbnQgaWQpOwotICAgICAgICB2b2lk
IHNlbmRTdWNjZXNzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiYgY29sdW1uTmFtZXMs
IGNvbnN0IFN0cmluZyYgbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIEpTT046Ok9iamVjdCB2YWx1
ZXMsIEpTT046OlZhbHVlIHBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYmIHNxbEVycm9yLCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyBzY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiYgYWx0ZXJuYXRlQ29sb3JzLCBEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciBwcmludENvbG9yKTsKLSAg
ICB9OwotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMQXN5bmMoaW50IGluX2RhdGFiYXNlSWQs
IGNvbnN0IFN0cmluZyYgaW5fcXVlcnksIFJlZjxFeGVjdXRlU1FMQXN5bmNDYWxsYmFjaz4mJiBj
YWxsYmFjaykgPSAwOwotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgfkRhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyKCk7Ci19OwotCi1jbGFzcyBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
IGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoK
LSAgICBzdGF0aWMgUmVmPERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5k
RGlzcGF0Y2hlciYsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdm9p
ZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09O
OjpPYmplY3Q+JiYgbWVzc2FnZSkgb3ZlcnJpZGU7Ci1wcml2YXRlOgotICAgIHZvaWQgZXhlY3V0
ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046
Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKLSAgICB2b2lkIGV4ZWN1dGVTUUxBc3luY09wdGlvbmFs
UmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFt
ZXRlcnMpOwotICAgIHZvaWQgZXhlY3V0ZVNRTFN5bmMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxK
U09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0gICAgdm9pZCBleGVjdXRlU1FMQXN5bmMobG9u
ZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0jaWYgRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi1wdWJsaWM6Ci0gICAgdm9pZCBz
ZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIq
IGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRl
RGlzcGF0Y2hlcjsgfQotcHJpdmF0ZToKLSAgICBBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVyKiBtX2FsdGVybmF0ZURpc3BhdGNoZXIgeyBudWxscHRyIH07Ci0jZW5kaWYKLXByaXZh
dGU6Ci0gICAgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYsIERh
dGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQgeyBudWxscHRyIH07Ci19OwotCi19IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMj
IyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pT
T05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKLSNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCi0j
ZW5kaWYKLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLURhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyOjp+RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KLQotUmVm
PERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmNy
ZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIERhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOwotfQot
Ci1EYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKEJh
Y2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXIqIGFnZW50KQotICAgIDogU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIo
YmFja2VuZERpc3BhdGNoZXIpCi0gICAgLCBtX2FnZW50KGFnZW50KQotewotICAgIG1fYmFja2Vu
ZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbigiRGF0YWJhc2UiX3MsIHRo
aXMpOwotfQotCi12b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcg
cmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNz
YWdlKQotewotICAgIFJlZjxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlz
KTsKLQotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+
Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRlcnMpOwotCi0gICAgaWYgKG1ldGhvZCA9PSAi
ZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyIpCi0gICAgICAgIGV4ZWN1dGVTUUxT
eW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsK
LSAgICBlbHNlIGlmIChtZXRob2QgPT0gImV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFs
dWVzIikKLSAgICAgICAgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMocmVxdWVz
dElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKLSAgICBlbHNlIGlmIChtZXRob2QgPT0gImV4ZWN1
dGVTUUxTeW5jIikKLSAgICAgICAgZXhlY3V0ZVNRTFN5bmMocmVxdWVzdElkLCBXVEZNb3ZlKHBh
cmFtZXRlcnMpKTsKLSAgICBlbHNlIGlmIChtZXRob2QgPT0gImV4ZWN1dGVTUUxBc3luYyIpCi0g
ICAgICAgIGV4ZWN1dGVTUUxBc3luYyhyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOwot
ICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJv
cihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRGF0YWJhc2UuIiArIG1ldGhv
ZCArICInIHdhcyBub3QgZm91bmQiKTsKLX0KLQotdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVyOjpleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVzdElkLCBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpCi17Ci0gICAgaW50IGluX2RhdGFiYXNl
SWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRJbnRlZ2VyKHBhcmFtZXRlcnMuZ2V0KCksICJk
YXRhYmFzZUlkIl9zLCBudWxscHRyKTsKLSAgICBTdHJpbmcgaW5fcXVlcnkgPSBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgInF1ZXJ5Il9zLCBudWxscHRy
KTsKLSAgICBpZiAobV9iYWNrZW5kRGlzcGF0Y2hlci0+aGFzUHJvdG9jb2xFcnJvcnMoKSkgewot
ICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmRE
aXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCAiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICdEYXRh
YmFzZS5leGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzJyBjYW4ndCBiZSBwcm9jZXNz
ZWQiX3MpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0gICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewot
ICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1
cm5WYWx1ZXMocmVxdWVzdElkLCBpbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxK
U09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgUmVmUHRy
PEpTT046OkFycmF5T2Y8U3RyaW5nPj4gb3V0X2NvbHVtbk5hbWVzOwotICAgIE9wdGlvbmFsPFN0
cmluZz4gb3V0X25vdGVzOwotICAgIE9wdGlvbmFsPGRvdWJsZT4gb3V0X3RpbWVzdGFtcDsKLSAg
ICBPcHRpb25hbDxKU09OOjpPYmplY3Q+IG91dF92YWx1ZXM7Ci0gICAgT3B0aW9uYWw8SlNPTjo6
VmFsdWU+IG91dF9wYXlsb2FkOwotICAgIE9wdGlvbmFsPGludD4gb3V0X2RhdGFiYXNlSWQ7Ci0g
ICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gb3V0X3NxbEVy
cm9yOwotICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzIG91
dF9zY3JlZW5Db2xvcjsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6
OkNvbG9yTGlzdD4gb3V0X2FsdGVybmF0ZUNvbG9yczsKLSAgICBEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciBvdXRfcHJpbnRDb2xvcjsKLSAgICBtX2FnZW50LT5l
eGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGVycm9yLCBpbl9kYXRhYmFzZUlkLCBp
bl9xdWVyeSwgb3V0X2NvbHVtbk5hbWVzLCBvdXRfbm90ZXMsIG91dF90aW1lc3RhbXAsIG91dF92
YWx1ZXMsIG91dF9wYXlsb2FkLCBvdXRfZGF0YWJhc2VJZCwgb3V0X3NxbEVycm9yLCBvdXRfc2Ny
ZWVuQ29sb3IsIG91dF9hbHRlcm5hdGVDb2xvcnMsIG91dF9wcmludENvbG9yKTsKLQotICAgIGlm
ICghZXJyb3IubGVuZ3RoKCkpIHsKLSAgICAgICAgaWYgKG91dF9jb2x1bW5OYW1lcykKLSAgICAg
ICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBvdXRfY29sdW1uTmFtZXMp
OwotICAgICAgICBpZiAob3V0X25vdGVzLmhhc1ZhbHVlKCkpCi0gICAgICAgICAgICByZXN1bHQt
PnNldFN0cmluZygibm90ZXMiX3MsICpvdXRfbm90ZXMpOwotICAgICAgICBpZiAob3V0X3RpbWVz
dGFtcC5oYXNWYWx1ZSgpKQotICAgICAgICAgICAgcmVzdWx0LT5zZXREb3VibGUoInRpbWVzdGFt
cCJfcywgKm91dF90aW1lc3RhbXApOwotICAgICAgICBpZiAob3V0X3ZhbHVlcy5oYXNWYWx1ZSgp
KQotICAgICAgICAgICAgcmVzdWx0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgKm91dF92YWx1ZXMp
OwotICAgICAgICBpZiAob3V0X3BheWxvYWQuaGFzVmFsdWUoKSkKLSAgICAgICAgICAgIHJlc3Vs
dC0+c2V0VmFsdWUoInBheWxvYWQiX3MsICpvdXRfcGF5bG9hZCk7Ci0gICAgICAgIGlmIChvdXRf
ZGF0YWJhc2VJZC5oYXNWYWx1ZSgpKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRJbnRlZ2VyKCJk
YXRhYmFzZUlkIl9zLCAqb3V0X2RhdGFiYXNlSWQpOwotICAgICAgICBpZiAob3V0X3NxbEVycm9y
KQotICAgICAgICAgICAgcmVzdWx0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBvdXRfc3FsRXJy
b3IpOwotICAgICAgICBpZiAob3V0X3NjcmVlbkNvbG9yLmhhc1ZhbHVlKCkpCi0gICAgICAgICAg
ICByZXN1bHQtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsICpvdXRfc2NyZWVuQ29sb3IpOwot
ICAgICAgICBpZiAob3V0X2FsdGVybmF0ZUNvbG9ycykKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0
QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgb3V0X2FsdGVybmF0ZUNvbG9ycyk7Ci0gICAgICAg
IGlmIChvdXRfcHJpbnRDb2xvci5oYXNWYWx1ZSgpKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRT
dHJpbmcoInByaW50Q29sb3IiX3MsICpvdXRfcHJpbnRDb2xvcik7Ci0gICAgfQotICAgIGlmICgh
ZXJyb3IubGVuZ3RoKCkpCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25z
ZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hl
cjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKLX0KLQotRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJh
Y2s6OkV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2soUmVmPEJhY2tl
bmREaXNwYXRjaGVyPiYmIGJhY2tlbmREaXNwYXRjaGVyLCBpbnQgaWQpIDogQmFja2VuZERpc3Bh
dGNoZXI6OkNhbGxiYWNrQmFzZShXVEZNb3ZlKGJhY2tlbmREaXNwYXRjaGVyKSwgaWQpIHsgfQot
Ci12b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNP
cHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrOjpzZW5kU3VjY2VzcyhSZWZQdHI8SlNPTjo6QXJy
YXlPZjxTdHJpbmc+PiYmIGNvbHVtbk5hbWVzLCBPcHRpb25hbDxTdHJpbmc+JiBub3RlcywgT3B0
aW9uYWw8ZG91YmxlPiYgdGltZXN0YW1wLCBPcHRpb25hbDxKU09OOjpPYmplY3Q+JiB2YWx1ZXMs
IE9wdGlvbmFsPEpTT046OlZhbHVlPiYgcGF5bG9hZCwgT3B0aW9uYWw8aW50PiYgZGF0YWJhc2VJ
ZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mJiBzcWxFcnJv
ciwgT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+
IHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9y
TGlzdD4mJiBhbHRlcm5hdGVDb2xvcnMsIE9wdGlvbmFsPERhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyOjpQcmludENvbG9yPiBwcmludENvbG9yKQotewotICAgIFJlZjxKU09OOjpPYmpl
Y3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBpZiAoY29sdW1u
TmFtZXMpCi0gICAgICAgIGpzb25NZXNzYWdlLT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIGNv
bHVtbk5hbWVzKTsKLSAgICBpZiAobm90ZXMuaGFzVmFsdWUoKSkKLSAgICAgICAganNvbk1lc3Nh
Z2UtPnNldFN0cmluZygibm90ZXMiX3MsICpub3Rlcyk7Ci0gICAgaWYgKHRpbWVzdGFtcC5oYXNW
YWx1ZSgpKQotICAgICAgICBqc29uTWVzc2FnZS0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICp0
aW1lc3RhbXApOwotICAgIGlmICh2YWx1ZXMuaGFzVmFsdWUoKSkKLSAgICAgICAganNvbk1lc3Nh
Z2UtPnNldE9iamVjdCgidmFsdWVzIl9zLCAqdmFsdWVzKTsKLSAgICBpZiAocGF5bG9hZC5oYXNW
YWx1ZSgpKQotICAgICAgICBqc29uTWVzc2FnZS0+c2V0VmFsdWUoInBheWxvYWQiX3MsICpwYXls
b2FkKTsKLSAgICBpZiAoZGF0YWJhc2VJZC5oYXNWYWx1ZSgpKQotICAgICAgICBqc29uTWVzc2Fn
ZS0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgKmRhdGFiYXNlSWQpOwotICAgIGlmIChzcWxF
cnJvcikKLSAgICAgICAganNvbk1lc3NhZ2UtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIHNxbEVy
cm9yKTsKLSAgICBpZiAoc2NyZWVuQ29sb3IuaGFzVmFsdWUoKSkKLSAgICAgICAganNvbk1lc3Nh
Z2UtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsICpzY3JlZW5Db2xvcik7Ci0gICAgaWYgKGFs
dGVybmF0ZUNvbG9ycykKLSAgICAgICAganNvbk1lc3NhZ2UtPnNldEFycmF5KCJhbHRlcm5hdGVD
b2xvcnMiX3MsIGFsdGVybmF0ZUNvbG9ycyk7Ci0gICAgaWYgKHByaW50Q29sb3IuaGFzVmFsdWUo
KSkKLSAgICAgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgKnByaW50
Q29sb3IpOwotICAgIENhbGxiYWNrQmFzZTo6c2VuZFN1Y2Nlc3MoV1RGTW92ZShqc29uTWVzc2Fn
ZSkpOwotfQotCi12b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxBc3lu
Y09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0
PiYmIHBhcmFtZXRlcnMpCi17Ci0gICAgaW50IGluX2RhdGFiYXNlSWQgPSBtX2JhY2tlbmREaXNw
YXRjaGVyLT5nZXRJbnRlZ2VyKHBhcmFtZXRlcnMuZ2V0KCksICJkYXRhYmFzZUlkIl9zLCBudWxs
cHRyKTsKLSAgICBTdHJpbmcgaW5fcXVlcnkgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJp
bmcocGFyYW1ldGVycy5nZXQoKSwgInF1ZXJ5Il9zLCBudWxscHRyKTsKLSAgICBpZiAobV9iYWNr
ZW5kRGlzcGF0Y2hlci0+aGFzUHJvdG9jb2xFcnJvcnMoKSkgewotICAgICAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlk
UGFyYW1zLCAiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICdEYXRhYmFzZS5leGVjdXRlU1FMQXN5
bmNPcHRpb25hbFJldHVyblZhbHVlcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIl9zKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENI
RVJTKQotICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5h
dGVEaXNwYXRjaGVyLT5leGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhyZXF1ZXN0
SWQsIGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNl
bmRpZgotCi0gICAgUmVmPERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRl
U1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrPiBjYWxsYmFjayA9IGFkb3B0UmVm
KCpuZXcgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY09w
dGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2sobV9iYWNrZW5kRGlzcGF0Y2hlci5jb3B5UmVmKCks
IHJlcXVlc3RJZCkpOwotICAgIG1fYWdlbnQtPmV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJu
VmFsdWVzKGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5LCBjYWxsYmFjay5jb3B5UmVmKCkpOwotCi19
Ci0KLXZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTFN5bmMobG9uZyBy
ZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycykKLXsKLSAgICBpbnQg
aW5fZGF0YWJhc2VJZCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEludGVnZXIocGFyYW1ldGVy
cy5nZXQoKSwgImRhdGFiYXNlSWQiX3MsIG51bGxwdHIpOwotICAgIFN0cmluZyBpbl9xdWVyeSA9
IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwYXJhbWV0ZXJzLmdldCgpLCAicXVlcnki
X3MsIG51bGxwdHIpOwotICAgIGlmIChtX2JhY2tlbmREaXNwYXRjaGVyLT5oYXNQcm90b2NvbEVy
cm9ycygpKSB7Ci0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJy
b3IoQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsICJTb21lIGFyZ3VtZW50cyBvZiBt
ZXRob2QgJ0RhdGFiYXNlLmV4ZWN1dGVTUUxTeW5jJyBjYW4ndCBiZSBwcm9jZXNzZWQiX3MpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCi0gICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBt
X2FsdGVybmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVTUUxTeW5jKHJlcXVlc3RJZCwgaW5fZGF0YWJh
c2VJZCwgaW5fcXVlcnkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBF
cnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpOwotICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IG91dF9j
b2x1bW5OYW1lczsKLSAgICBTdHJpbmcgb3V0X25vdGVzOwotICAgIGRvdWJsZSBvdXRfdGltZXN0
YW1wOwotICAgIEpTT046Ok9iamVjdCBvdXRfdmFsdWVzOwotICAgIEpTT046OlZhbHVlIG91dF9w
YXlsb2FkOwotICAgIGludCBvdXRfZGF0YWJhc2VJZDsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBvdXRfc3FsRXJyb3I7Ci0gICAgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IG91dF9hbHRlcm5hdGVDb2xvcnM7
Ci0gICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgb3V0X3Nj
cmVlbkNvbG9yOwotICAgIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENv
bG9yIG91dF9wcmludENvbG9yOwotICAgIG1fYWdlbnQtPmV4ZWN1dGVTUUxTeW5jKGVycm9yLCBp
bl9kYXRhYmFzZUlkLCBpbl9xdWVyeSwgb3V0X2NvbHVtbk5hbWVzLCAmb3V0X25vdGVzLCAmb3V0
X3RpbWVzdGFtcCwgb3V0X3ZhbHVlcywgJm91dF9wYXlsb2FkLCAmb3V0X2RhdGFiYXNlSWQsIG91
dF9zcWxFcnJvciwgb3V0X2FsdGVybmF0ZUNvbG9ycywgJm91dF9zY3JlZW5Db2xvciwgJm91dF9w
cmludENvbG9yKTsKLQotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIHsKLSAgICAgICAgcmVzdWx0
LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIG91dF9jb2x1bW5OYW1lcyk7Ci0gICAgICAgIHJl
c3VsdC0+c2V0U3RyaW5nKCJub3RlcyJfcywgb3V0X25vdGVzKTsKLSAgICAgICAgcmVzdWx0LT5z
ZXREb3VibGUoInRpbWVzdGFtcCJfcywgb3V0X3RpbWVzdGFtcCk7Ci0gICAgICAgIHJlc3VsdC0+
c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIG91dF92YWx1ZXMpOwotICAgICAgICByZXN1bHQtPnNldFZh
bHVlKCJwYXlsb2FkIl9zLCBvdXRfcGF5bG9hZCk7Ci0gICAgICAgIHJlc3VsdC0+c2V0SW50ZWdl
cigiZGF0YWJhc2VJZCJfcywgb3V0X2RhdGFiYXNlSWQpOwotICAgICAgICByZXN1bHQtPnNldE9i
amVjdCgic3FsRXJyb3IiX3MsIG91dF9zcWxFcnJvcik7Ci0gICAgICAgIHJlc3VsdC0+c2V0QXJy
YXkoImFsdGVybmF0ZUNvbG9ycyJfcywgb3V0X2FsdGVybmF0ZUNvbG9ycyk7Ci0gICAgICAgIHJl
c3VsdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVz
dEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKG91dF9zY3JlZW5Db2xvcikpOwotICAgICAg
ICByZXN1bHQtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6
VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKG91dF9wcmludENvbG9yKSk7Ci0gICAg
fQotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOwotICAgIGVs
c2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNr
ZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKLX0KLQotRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrOjpFeGVj
dXRlU1FMQXN5bmNDYWxsYmFjayhSZWY8QmFja2VuZERpc3BhdGNoZXI+JiYgYmFja2VuZERpc3Bh
dGNoZXIsIGludCBpZCkgOiBCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlKFdURk1vdmUo
YmFja2VuZERpc3BhdGNoZXIpLCBpZCkgeyB9Ci0KLXZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrOjpzZW5kU3VjY2VzcyhSZWZQdHI8
SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYmIGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG5vdGVz
LCBkb3VibGUgdGltZXN0YW1wLCBKU09OOjpPYmplY3QgdmFsdWVzLCBKU09OOjpWYWx1ZSBwYXls
b2FkLCBpbnQgZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNl
OjpFcnJvcj4mJiBzcWxFcnJvciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1h
cnlDb2xvcnMgc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFz
ZTo6Q29sb3JMaXN0PiYmIGFsdGVybmF0ZUNvbG9ycywgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXI6OlByaW50Q29sb3IgcHJpbnRDb2xvcikKLXsKLSAgICBSZWY8SlNPTjo6T2JqZWN0
PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2Ut
PnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgY29sdW1uTmFtZXMpOwotICAgIGpzb25NZXNzYWdl
LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBub3Rlcyk7Ci0gICAganNvbk1lc3NhZ2UtPnNldERvdWJs
ZSgidGltZXN0YW1wIl9zLCB0aW1lc3RhbXApOwotICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3Qo
InZhbHVlcyJfcywgdmFsdWVzKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0VmFsdWUoInBheWxvYWQi
X3MsIHBheWxvYWQpOwotICAgIGpzb25NZXNzYWdlLT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9z
LCBkYXRhYmFzZUlkKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywg
c3FsRXJyb3IpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoc2Ny
ZWVuQ29sb3IpKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJf
cywgYWx0ZXJuYXRlQ29sb3JzKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJwcmludENv
bG9yIl9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50
VmFsdWUocHJpbnRDb2xvcikpOwotICAgIENhbGxiYWNrQmFzZTo6c2VuZFN1Y2Nlc3MoV1RGTW92
ZShqc29uTWVzc2FnZSkpOwotfQotCi12b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4
ZWN1dGVTUUxBc3luYyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJh
bWV0ZXJzKQotewotICAgIGludCBpbl9kYXRhYmFzZUlkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+
Z2V0SW50ZWdlcihwYXJhbWV0ZXJzLmdldCgpLCAiZGF0YWJhc2VJZCJfcywgbnVsbHB0cik7Ci0g
ICAgU3RyaW5nIGluX3F1ZXJ5ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFt
ZXRlcnMuZ2V0KCksICJxdWVyeSJfcywgbnVsbHB0cik7Ci0gICAgaWYgKG1fYmFja2VuZERpc3Bh
dGNoZXItPmhhc1Byb3RvY29sRXJyb3JzKCkpIHsKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywg
IlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnRGF0YWJhc2UuZXhlY3V0ZVNRTEFzeW5jJyBjYW4n
dCBiZSBwcm9jZXNzZWQiX3MpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0jaWYgRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0gICAgaWYgKG1fYWx0ZXJuYXRlRGlz
cGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVTUUxBc3lu
YyhyZXF1ZXN0SWQsIGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5KTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSNlbmRpZgotCi0gICAgUmVmPERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
OjpFeGVjdXRlU1FMQXN5bmNDYWxsYmFjaz4gY2FsbGJhY2sgPSBhZG9wdFJlZigqbmV3IERhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNDYWxsYmFjayhtX2Jh
Y2tlbmREaXNwYXRjaGVyLmNvcHlSZWYoKSwgcmVxdWVzdElkKSk7Ci0gICAgbV9hZ2VudC0+ZXhl
Y3V0ZVNRTEFzeW5jKGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5LCBjYWxsYmFjay5jb3B5UmVmKCkp
OwotCi19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNw
YXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0
aC1hc3luYy1hdHRyaWJ1dGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMu
aCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgRnJvbnRlbmRSb3V0ZXI7
Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmRE
aXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5j
cHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5j
LWF0dHJpYnV0ZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVy
cy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMu
aAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMt
YXR0cmlidXRlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90
b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFtZXNwYWNlIElu
c3BlY3RvciB7Ci0KLQotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotLy8gRm9yd2FyZCBk
ZWNsYXJhdGlvbnMuCi1uYW1lc3BhY2UgRGF0YWJhc2UgewotY2xhc3MgRXJyb3I7Ci1lbnVtIGNs
YXNzIFByaW1hcnlDb2xvcnM7Ci19IC8vIERhdGFiYXNlCi0vLyBFbmQgb2YgZm9yd2FyZCBkZWNs
YXJhdGlvbnMuCi0KLQotLy8gVHlwZWRlZnMuCi1uYW1lc3BhY2UgRGF0YWJhc2UgewotLyogVW5p
cXVlIGlkZW50aWZpZXIgb2YgRGF0YWJhc2Ugb2JqZWN0LiAqLwotdHlwZWRlZiBpbnQgRGF0YWJh
c2VJZDsKLXR5cGVkZWYgSlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFz
ZTo6UHJpbWFyeUNvbG9ycz4gQ29sb3JMaXN0OwotfSAvLyBEYXRhYmFzZQotLy8gRW5kIG9mIHR5
cGVkZWZzLgotCi1uYW1lc3BhY2UgVGVzdEhlbHBlcnMgewotCi1TdHJpbmcgZ2V0RW51bUNvbnN0
YW50VmFsdWUoaW50IGNvZGUpOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgZ2V0RW51
bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFsdWUpCi17Ci0gICAgcmV0dXJuIGdldEVudW1Db25zdGFu
dFZhbHVlKHN0YXRpY19jYXN0PGludD4oZW51bVZhbHVlKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IFRlc3RIZWxwZXJzCi0KLW5hbWVzcGFjZSBEYXRhYmFzZSB7Ci0vKiAgKi8KLWVudW0gY2xhc3Mg
UHJpbWFyeUNvbG9ycyB7Ci0gICAgUmVkID0gMCwKLSAgICBHcmVlbiA9IDEsCi0gICAgQmx1ZSA9
IDIsCi19OyAvLyBlbnVtIGNsYXNzIFByaW1hcnlDb2xvcnMKLS8qIERhdGFiYXNlIGVycm9yLiAq
LwotY2xhc3MgRXJyb3IgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7Ci1wdWJsaWM6Ci0gICAg
ZW51bSB7Ci0gICAgICAgIE5vRmllbGRzU2V0ID0gMCwKLSAgICAgICAgTWVzc2FnZVNldCA9IDEg
PDwgMCwKLSAgICAgICAgQ29kZVNldCA9IDEgPDwgMSwKLSAgICAgICAgQWxsRmllbGRzU2V0ID0g
KE1lc3NhZ2VTZXQgfCBDb2RlU2V0KQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+
Ci0gICAgY2xhc3MgQnVpbGRlciB7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPEpTT046
Ok9iamVjdD4gbV9yZXN1bHQ7Ci0KLSAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8
U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
ICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgQnVpbGRlcihSZWY8LypFcnJvciovSlNPTjo6T2JqZWN0PiYmIG9iamVj
dCkKLSAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9j
cmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKLSAgICAgICAgfQotICAgICAgICBmcmllbmQgY2xh
c3MgRXJyb3I7Ci0gICAgcHVibGljOgotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNZXNzYWdl
U2V0PiYgc2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTWVzc2FnZVNldCksIHByb3BlcnR5X21lc3Nh
Z2VfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibWVzc2Fn
ZSJfcywgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNZXNzYWdlU2V0Pigp
OwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvZGVTZXQ+JiBzZXRDb2Rl
KGludCB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIENvZGVTZXQpLCBwcm9wZXJ0eV9jb2RlX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXRJbnRlZ2VyKCJjb2RlIl9zLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPENvZGVTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBSZWY8RXJyb3I+IHJl
bGVhc2UoKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBB
bGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwotICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoc2l6ZW9mKEVycm9yKSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0KSwgY2Fubm90X2Nhc3Qp
OwotCi0gICAgICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uUmVzdWx0ID0gbV9yZXN1bHQu
cmVsZWFzZU5vbk51bGwoKTsKLSAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gV1RGTW92ZSgqcmVp
bnRlcnByZXRfY2FzdDxSZWY8RXJyb3I+Kj4oJmpzb25SZXN1bHQpKTsKLSAgICAgICAgICAgIHJl
dHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgLyoKLSAgICAgKiBTeW50aGV0
aWMgY29uc3RydWN0b3I6Ci0gICAgICogUmVmPEVycm9yPiByZXN1bHQgPSBFcnJvcjo6Y3JlYXRl
KCkKLSAgICAgKiAgICAgLnNldE1lc3NhZ2UoLi4uKQotICAgICAqICAgICAuc2V0Q29kZSguLi4p
Ci0gICAgICogICAgIC5yZWxlYXNlKCk7Ci0gICAgICovCi0gICAgc3RhdGljIEJ1aWxkZXI8Tm9G
aWVsZHNTZXQ+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxk
c1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7Ci0gICAgfQotfTsKLQotfSAvLyBEYXRhYmFz
ZQotCi0KLQotbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgUHJv
dG9jb2xFbnVtVHlwZT4KLU9wdGlvbmFsPFByb3RvY29sRW51bVR5cGU+IHBhcnNlRW51bVZhbHVl
RnJvbVN0cmluZyhjb25zdCBTdHJpbmcmKTsKLQotLy8gRW51bXMgaW4gdGhlICdEYXRhYmFzZScg
RG9tYWluCi10ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFz
ZTo6UHJpbWFyeUNvbG9ycz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPihjb25zdCBTdHJpbmcmKTsKLQotfSAvLyBu
YW1lc3BhY2UgVGVzdEhlbHBlcnMKLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCi0KLW5hbWVzcGFjZSBXVEYgewotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Ci0KLS8vIEhhc2ggZGVjbGFyYXRpb25zIGluIHRoZSAn
RGF0YWJhc2UnIERvbWFpbgotdGVtcGxhdGU8Pgotc3RydWN0IERlZmF1bHRIYXNoPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiB7Ci0gICAgdHlwZWRlZiBJbnRI
YXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiBIYXNoOwot
fTsKLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVj
dHMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0KLSNpbmNsdWRl
IDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVz
cGFjZSBJbnNwZWN0b3IgewotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi1uYW1lc3BhY2UgVGVz
dEhlbHBlcnMgewotCi1zdGF0aWMgY29uc3QgY2hhciogY29uc3QgZW51bV9jb25zdGFudF92YWx1
ZXNbXSA9IHsKLSAgICAicmVkIiwKLSAgICAiZ3JlZW4iLAotICAgICJibHVlIiwKLSAgICAiY3lh
biIsCi0gICAgIm1hZ2VudGEiLAotICAgICJ5ZWxsb3ciLAotICAgICJibGFjayIsCi19OwotCi1T
dHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsKLSAgICByZXR1cm4gZW51bV9j
b25zdGFudF92YWx1ZXNbY29kZV07Ci19Ci0KLS8vIEVudW1zIGluIHRoZSAnRGF0YWJhc2UnIERv
bWFpbgotdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6
OlByaW1hcnlDb2xvcnM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmlu
ZykKLXsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7Ci0gICAg
ICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM6
OlJlZCwKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJp
bWFyeUNvbG9yczo6R3JlZW4sCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM6OkJsdWUsCi0gICAgfTsKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IDM7ICsraSkKLSAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1fY29u
c3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAgICAgICAgIHJldHVybiAoSW5z
cGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMpY29uc3RhbnRWYWx1ZXNb
aV07Ci0KLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi0KLX0gLy8gbmFtZXNwYWNlIFRl
c3RIZWxwZXJzCi0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4K
LSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLUBwcm90b2NvbCBUZXN0UHJvdG9jb2xEYXRh
YmFzZURvbWFpbkhhbmRsZXI7Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLWNsYXNzIE9i
akNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVy
bmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwotcHVibGljOgotICAgIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
KGlkPFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVn
YXRlID0gaGFuZGxlcjsgfQotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMU3luY09wdGlvbmFs
UmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVzdElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3Ry
aW5nJiBpbl9xdWVyeSkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxBc3lu
Y09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVzdElkLCBpbnQgaW5fZGF0YWJhc2VJZCwg
Y29uc3QgU3RyaW5nJiBpbl9xdWVyeSkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1
dGVTUUxTeW5jKGxvbmcgcmVxdWVzdElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5n
JiBpbl9xdWVyeSkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxBc3luYyhs
b25nIHJlcXVlc3RJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkp
IG92ZXJyaWRlOwotcHJpdmF0ZToKLSAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sRGF0YWJh
c2VEb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0
ZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBv
cnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgi
Ci0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2luY2x1ZGUgIlRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLW5h
bWVzcGFjZSBJbnNwZWN0b3IgewotCi12b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVyOjpleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVz
dElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkKLXsKLSAgICBp
ZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoZXhlY3V0ZVNRTFN5
bmNPcHRpb25hbFJldHVyblZhbHVlc1dpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazpk
YXRhYmFzZUlkOnF1ZXJ5OildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9y
dFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91
bmQsICInRGF0YWJhc2UuZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcycgd2FzIG5v
dCBmb3VuZCJfcyk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJy
b3JzKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZCBlcnJvckNhbGxiYWNrID0g
XihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0
UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwg
ZXJyb3IpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygp
OwotICAgIH07Ci0KLSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0cmlu
Zz4qLyAqKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqKm5vdGVzLCBkb3VibGUgKnRpbWVzdGFtcCwg
UldJUHJvdG9jb2xKU09OT2JqZWN0ICoqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipw
YXlsb2FkLCBpbnQgKmRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipzcWxF
cnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzICpzY3JlZW5Db2xvciwgTlNB
cnJheS8qPE5TU3RyaW5nPiovICoqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFz
ZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yICpwcmludENvbG9y
KSB7Ci0gICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdE9iamVjdCA9IEpTT046Ok9iamVj
dDo6Y3JlYXRlKCk7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BB
UkFNRVRFUihjb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOwotICAgICAgICBUSFJPV19FWENF
UFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIobm90ZXMsIEAibm90ZXMiKTsKLSAgICAg
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHZhbHVlcywgQCJ2
YWx1ZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1F
VEVSKHBheWxvYWQsIEAicGF5bG9hZCIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JB
RF9PUFRJT05BTF9QQVJBTUVURVIoc3FsRXJyb3IsIEAic3FsRXJyb3IiKTsKLSAgICAgICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKGFsdGVybmF0ZUNvbG9ycywg
QCJhbHRlcm5hdGVDb2xvcnMiKTsKLSAgICAgICAgaWYgKGNvbHVtbk5hbWVzKQotICAgICAgICAg
ICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0cmluZ0Fy
cmF5KCpjb2x1bW5OYW1lcykpOwotICAgICAgICBpZiAobm90ZXMpCi0gICAgICAgICAgICByZXN1
bHRPYmplY3QtPnNldFN0cmluZygibm90ZXMiX3MsICpub3Rlcyk7Ci0gICAgICAgIGlmICh0aW1l
c3RhbXApCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldERvdWJsZSgidGltZXN0YW1wIl9z
LCAqdGltZXN0YW1wKTsKLSAgICAgICAgaWYgKHZhbHVlcykKLSAgICAgICAgICAgIHJlc3VsdE9i
amVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFsqdmFsdWVzIHRvSlNPTk9iamVjdF0pOwotICAg
ICAgICBpZiAocGF5bG9hZCkKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0VmFsdWUoInBh
eWxvYWQiX3MsIFsqcGF5bG9hZCB0b0pTT05PYmplY3RdKTsKLSAgICAgICAgaWYgKGRhdGFiYXNl
SWQpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3Ms
ICpkYXRhYmFzZUlkKTsKLSAgICAgICAgaWYgKHNxbEVycm9yKQotICAgICAgICAgICAgcmVzdWx0
T2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBbKnNxbEVycm9yIHRvSlNPTk9iamVjdF0p
OwotICAgICAgICBpZiAoc2NyZWVuQ29sb3IpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNl
dFN0cmluZygic2NyZWVuQ29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcoKnNjcmVlbkNvbG9yKSk7
Ci0gICAgICAgIGlmIChhbHRlcm5hdGVDb2xvcnMpCi0gICAgICAgICAgICByZXN1bHRPYmplY3Qt
PnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KCphbHRlcm5h
dGVDb2xvcnMpKTsKLSAgICAgICAgaWYgKHByaW50Q29sb3IpCi0gICAgICAgICAgICByZXN1bHRP
YmplY3QtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgdG9Qcm90b2NvbFN0cmluZygqcHJpbnRD
b2xvcikpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVz
dElkLCBXVEZNb3ZlKHJlc3VsdE9iamVjdCksIGZhbHNlKTsKLSAgICB9OwotCi0gICAgaW50IG9f
aW5fZGF0YWJhc2VJZCA9IGluX2RhdGFiYXNlSWQ7Ci0gICAgTlNTdHJpbmcgKm9faW5fcXVlcnkg
PSBpbl9xdWVyeTsKLQotICAgIFttX2RlbGVnYXRlIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1
cm5WYWx1ZXNXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpz
dWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDpvX2luX2RhdGFiYXNlSWQgcXVlcnk6b19pbl9xdWVy
eV07Ci19Ci0KLXZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4
ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVzdElkLCBpbnQgaW5f
ZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkKLXsKLSAgICBpZiAoIVttX2RlbGVn
YXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxS
ZXR1cm5WYWx1ZXNXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6ZGF0YWJhc2VJZDpx
dWVyeTopXSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVy
cm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RhdGFi
YXNlLmV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzJyB3YXMgbm90IGZvdW5kIl9z
KTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5n
ICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVy
cm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7Ci0g
ICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgfTsK
LQotICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiovICoqY29s
dW1uTmFtZXMsIE5TU3RyaW5nICoqbm90ZXMsIGRvdWJsZSAqdGltZXN0YW1wLCBSV0lQcm90b2Nv
bEpTT05PYmplY3QgKip2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnBheWxvYWQsIGlu
dCAqZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKnNxbEVycm9yLCBUZXN0
UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgKnNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNT
dHJpbmc+Ki8gKiphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNR
TEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yICpwcmludENvbG9yKSB7Ci0gICAg
ICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdE9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRl
KCk7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihj
b2x1bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9S
X0JBRF9PUFRJT05BTF9QQVJBTUVURVIobm90ZXMsIEAibm90ZXMiKTsKLSAgICAgICAgVEhST1df
RVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHZhbHVlcywgQCJ2YWx1ZXMiKTsK
LSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHBheWxv
YWQsIEAicGF5bG9hZCIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05B
TF9QQVJBTUVURVIoc3FsRXJyb3IsIEAic3FsRXJyb3IiKTsKLSAgICAgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKGFsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5h
dGVDb2xvcnMiKTsKLSAgICAgICAgaWYgKGNvbHVtbk5hbWVzKQotICAgICAgICAgICAgcmVzdWx0
T2JqZWN0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KCpjb2x1
bW5OYW1lcykpOwotICAgICAgICBpZiAobm90ZXMpCi0gICAgICAgICAgICByZXN1bHRPYmplY3Qt
PnNldFN0cmluZygibm90ZXMiX3MsICpub3Rlcyk7Ci0gICAgICAgIGlmICh0aW1lc3RhbXApCi0g
ICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCAqdGltZXN0
YW1wKTsKLSAgICAgICAgaWYgKHZhbHVlcykKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0
T2JqZWN0KCJ2YWx1ZXMiX3MsIFsqdmFsdWVzIHRvSlNPTk9iamVjdF0pOwotICAgICAgICBpZiAo
cGF5bG9hZCkKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3Ms
IFsqcGF5bG9hZCB0b0pTT05PYmplY3RdKTsKLSAgICAgICAgaWYgKGRhdGFiYXNlSWQpCi0gICAg
ICAgICAgICByZXN1bHRPYmplY3QtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsICpkYXRhYmFz
ZUlkKTsKLSAgICAgICAgaWYgKHNxbEVycm9yKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5z
ZXRPYmplY3QoInNxbEVycm9yIl9zLCBbKnNxbEVycm9yIHRvSlNPTk9iamVjdF0pOwotICAgICAg
ICBpZiAoc2NyZWVuQ29sb3IpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygi
c2NyZWVuQ29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcoKnNjcmVlbkNvbG9yKSk7Ci0gICAgICAg
IGlmIChhbHRlcm5hdGVDb2xvcnMpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5
KCJhbHRlcm5hdGVDb2xvcnMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KCphbHRlcm5hdGVDb2xvcnMp
KTsKLSAgICAgICAgaWYgKHByaW50Q29sb3IpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNl
dFN0cmluZygicHJpbnRDb2xvciJfcywgdG9Qcm90b2NvbFN0cmluZygqcHJpbnRDb2xvcikpOwot
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZN
b3ZlKHJlc3VsdE9iamVjdCksIGZhbHNlKTsKLSAgICB9OwotCi0gICAgaW50IG9faW5fZGF0YWJh
c2VJZCA9IGluX2RhdGFiYXNlSWQ7Ci0gICAgTlNTdHJpbmcgKm9faW5fcXVlcnkgPSBpbl9xdWVy
eTsKLQotICAgIFttX2RlbGVnYXRlIGV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVz
V2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0Nh
bGxiYWNrIGRhdGFiYXNlSWQ6b19pbl9kYXRhYmFzZUlkIHF1ZXJ5Om9faW5fcXVlcnldOwotfQot
Ci12b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FM
U3luYyhsb25nIHJlcXVlc3RJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5f
cXVlcnkpCi17Ci0gICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVj
dG9yKGV4ZWN1dGVTUUxTeW5jV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOmRhdGFi
YXNlSWQ6cXVlcnk6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJv
dG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwg
IidEYXRhYmFzZS5leGVjdXRlU1FMU3luYycgd2FzIG5vdCBmb3VuZCJfcyk7Ci0gICAgICAgIGJh
Y2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQs
IEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwotICAgICAgICBiYWNrZW5k
RGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgIH07Ci0KLSAgICBpZCBzdWNj
ZXNzQ2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqY29sdW1uTmFtZXMsIE5TU3Ry
aW5nICpub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICp2YWx1
ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQsIFRlc3RQ
cm90b2NvbERhdGFiYXNlRXJyb3IgKnNxbEVycm9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmFs
dGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzIHNjcmVlbkNv
bG9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvciBwcmludENv
bG9yKSB7Ci0gICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdE9iamVjdCA9IEpTT046Ok9i
amVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFS
QU1FVEVSKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG5vdGVzLCBAIm5vdGVzIik7Ci0gICAgICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHZhbHVlcywgQCJ2YWx1ZXMiKTsK
LSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIocGF5bG9hZCwg
QCJwYXlsb2FkIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1F
VEVSKHNxbEVycm9yLCBAInNxbEVycm9yIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
UkVRVUlSRURfUEFSQU1FVEVSKGFsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsK
LSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0
cmluZ0FycmF5KGNvbHVtbk5hbWVzKSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5n
KCJub3RlcyJfcywgbm90ZXMpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldERvdWJsZSgidGlt
ZXN0YW1wIl9zLCB0aW1lc3RhbXApOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdCgi
dmFsdWVzIl9zLCBbdmFsdWVzIHRvSlNPTk9iamVjdF0pOwotICAgICAgICByZXN1bHRPYmplY3Qt
PnNldFZhbHVlKCJwYXlsb2FkIl9zLCBbcGF5bG9hZCB0b0pTT05PYmplY3RdKTsKLSAgICAgICAg
cmVzdWx0T2JqZWN0LT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCBkYXRhYmFzZUlkKTsKLSAg
ICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBbc3FsRXJyb3IgdG9K
U09OT2JqZWN0XSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNv
bG9ycyJfcywgdG9KU09OU3RyaW5nQXJyYXkoYWx0ZXJuYXRlQ29sb3JzKSk7Ci0gICAgICAgIHJl
c3VsdE9iamVjdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgdG9Qcm90b2NvbFN0cmluZyhz
Y3JlZW5Db2xvcikpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygicHJpbnRDb2xv
ciJfcywgdG9Qcm90b2NvbFN0cmluZyhwcmludENvbG9yKSk7Ci0gICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0T2JqZWN0KSwg
ZmFsc2UpOwotICAgIH07Ci0KLSAgICBpbnQgb19pbl9kYXRhYmFzZUlkID0gaW5fZGF0YWJhc2VJ
ZDsKLSAgICBOU1N0cmluZyAqb19pbl9xdWVyeSA9IGluX3F1ZXJ5OwotCi0gICAgW21fZGVsZWdh
dGUgZXhlY3V0ZVNRTFN5bmNXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3ND
YWxsYmFjazpzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDpvX2luX2RhdGFiYXNlSWQgcXVlcnk6
b19pbl9xdWVyeV07Ci19Ci0KLXZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3Bh
dGNoZXI6OmV4ZWN1dGVTUUxBc3luYyhsb25nIHJlcXVlc3RJZCwgaW50IGluX2RhdGFiYXNlSWQs
IGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpCi17Ci0gICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25k
c1RvU2VsZWN0b3I6QHNlbGVjdG9yKGV4ZWN1dGVTUUxBc3luY1dpdGhFcnJvckNhbGxiYWNrOnN1
Y2Nlc3NDYWxsYmFjazpkYXRhYmFzZUlkOnF1ZXJ5OildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hl
cjo6TWV0aG9kTm90Rm91bmQsICInRGF0YWJhc2UuZXhlY3V0ZVNRTEFzeW5jJyB3YXMgbm90IGZv
dW5kIl9zKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMo
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5T
U3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90
b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJv
cik7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0g
ICAgfTsKLQotICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiov
ICpjb2x1bW5OYW1lcywgTlNTdHJpbmcgKm5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSV0lQcm90
b2NvbEpTT05PYmplY3QgKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkLCBp
bnQgZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqc3FsRXJyb3IsIFRlc3RQ
cm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyBzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3Ry
aW5nPiovICphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFz
eW5jUHJpbnRDb2xvciBwcmludENvbG9yKSB7Ci0gICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IHJl
c3VsdE9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7
Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG5vdGVzLCBA
Im5vdGVzIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVS
KHZhbHVlcywgQCJ2YWx1ZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJF
RF9QQVJBTUVURVIocGF5bG9hZCwgQCJwYXlsb2FkIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHNxbEVycm9yLCBAInNxbEVycm9yIik7Ci0gICAgICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKGFsdGVybmF0ZUNvbG9ycywg
QCJhbHRlcm5hdGVDb2xvcnMiKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheSgiY29s
dW1uTmFtZXMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KGNvbHVtbk5hbWVzKSk7Ci0gICAgICAgIHJl
c3VsdE9iamVjdC0+c2V0U3RyaW5nKCJub3RlcyJfcywgbm90ZXMpOwotICAgICAgICByZXN1bHRP
YmplY3QtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCB0aW1lc3RhbXApOwotICAgICAgICByZXN1
bHRPYmplY3QtPnNldE9iamVjdCgidmFsdWVzIl9zLCBbdmFsdWVzIHRvSlNPTk9iamVjdF0pOwot
ICAgICAgICByZXN1bHRPYmplY3QtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBbcGF5bG9hZCB0b0pT
T05PYmplY3RdKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlk
Il9zLCBkYXRhYmFzZUlkKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInNxbEVy
cm9yIl9zLCBbc3FsRXJyb3IgdG9KU09OT2JqZWN0XSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+
c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgdG9Qcm90b2NvbFN0cmluZyhzY3JlZW5Db2xvcikp
OwotICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIHRv
SlNPTlN0cmluZ0FycmF5KGFsdGVybmF0ZUNvbG9ycykpOwotICAgICAgICByZXN1bHRPYmplY3Qt
PnNldFN0cmluZygicHJpbnRDb2xvciJfcywgdG9Qcm90b2NvbFN0cmluZyhwcmludENvbG9yKSk7
Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdU
Rk1vdmUocmVzdWx0T2JqZWN0KSwgZmFsc2UpOwotICAgIH07Ci0KLSAgICBpbnQgb19pbl9kYXRh
YmFzZUlkID0gaW5fZGF0YWJhc2VJZDsKLSAgICBOU1N0cmluZyAqb19pbl9xdWVyeSA9IGluX3F1
ZXJ5OwotCi0gICAgW21fZGVsZWdhdGUgZXhlY3V0ZVNRTEFzeW5jV2l0aEVycm9yQ2FsbGJhY2s6
ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNlSWQ6
b19pbl9kYXRhYmFzZUlkIHF1ZXJ5Om9faW5fcXVlcnldOwotfQotCi0KLX0gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVy
cy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1
dGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1w
b3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+Ci0KLV9fYXR0cmlidXRlX18oKHZpc2li
aWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9u
IDogTlNPYmplY3QKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4sIHNldHRlcj1zZXREYXRh
YmFzZUhhbmRsZXI6KSBpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+IGRhdGFi
YXNlSGFuZGxlcjsKLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3Vy
YXRpb24uaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0
cmlidXRlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgotCi0jaW1wb3J0ICJUZXN0UHJv
dG9jb2xJbnRlcm5hbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJz
LmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5o
PgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVy
Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlz
cGF0Y2hlcnMuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVycy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW1wbGVtZW50YXRp
b24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9y
Q29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci0gICAgaWQ8VGVzdFByb3RvY29sRGF0YWJhc2VEb21h
aW5IYW5kbGVyPiBfZGF0YWJhc2VIYW5kbGVyOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIK
LXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0
dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250
cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBb
X2RhdGFiYXNlSGFuZGxlciByZWxlYXNlXTsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLS0g
KHZvaWQpc2V0RGF0YWJhc2VIYW5kbGVyOihpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhh
bmRsZXI+KWhhbmRsZXIKLXsKLSAgICBpZiAoaGFuZGxlciA9PSBfZGF0YWJhc2VIYW5kbGVyKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBbX2RhdGFiYXNlSGFuZGxlciByZWxlYXNlXTsKLSAgICBf
ZGF0YWJhc2VIYW5kbGVyID0gW2hhbmRsZXIgcmV0YWluXTsKLQotICAgIGF1dG8gYWx0ZXJuYXRl
RGlzcGF0Y2hlciA9IG1ha2VVbmlxdWU8T2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3Bh
dGNoZXI+KGhhbmRsZXIpOwotICAgIGF1dG8gYWx0ZXJuYXRlQWdlbnQgPSBtYWtlVW5pcXVlPEFs
dGVybmF0ZURpc3BhdGNoYWJsZUFnZW50PERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIsIEFsdGVy
bmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+PigiRGF0YWJhc2UiX3MsICpfY29udHJvbGxl
ciwgV1RGTW92ZShhbHRlcm5hdGVEaXNwYXRjaGVyKSk7Ci0gICAgX2NvbnRyb2xsZXItPmFwcGVu
ZEV4dHJhQWdlbnQoV1RGTW92ZShhbHRlcm5hdGVBZ2VudCkpOwotfQotCi0tIChpZDxUZXN0UHJv
dG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+KWRhdGFiYXNlSGFuZGxlcgotewotICAgIHJldHVy
biBfZGF0YWJhc2VIYW5kbGVyOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xDb25maWd1cmF0aW9uLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVu
dERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFu
ZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1w
b3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPHd0Zi9KU09OVmFs
dWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2wuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgt
YXN5bmMtYXR0cmlidXRlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLSNpbXBvcnQgPFdl
Ykluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KLQotCi1AY2xhc3MgVGVzdFByb3Rv
Y29sRGF0YWJhc2VFcnJvcjsKLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3Rv
Y29sUGxhdGZvcm0pIHsKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbCwKLSAgICBUZXN0UHJv
dG9jb2xQbGF0Zm9ybUdlbmVyaWMsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1JT1MsCi0gICAg
VGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUywKLX07Ci0KLQotdHlwZWRlZiBOU19FTlVNKE5TSW50
ZWdlciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzKSB7Ci0gICAgVGVzdFByb3Rv
Y29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzUmVkLAotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlUHJp
bWFyeUNvbG9yc0dyZWVuLAotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc0Js
dWUsCi19OwotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xEYXRhYmFz
ZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yKSB7Ci0gICAgVGVz
dFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRD
b2xvckN5YW4sCi0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFs
UmV0dXJuVmFsdWVzUHJpbnRDb2xvck1hZ2VudGEsCi0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VF
eGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvclllbGxvdywKLSAgICBU
ZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmlu
dENvbG9yQmxhY2ssCi19OwotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9j
b2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvcikg
ewotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXNQcmludENvbG9yQ3lhbiwKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxB
c3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvck1hZ2VudGEsCi0gICAgVGVzdFByb3Rv
Y29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JZ
ZWxsb3csCi0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJl
dHVyblZhbHVlc1ByaW50Q29sb3JCbGFjaywKLX07Ci0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVn
ZXIsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yKSB7Ci0gICAg
VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3JDeWFuLAotICAgIFRl
c3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yTWFnZW50YSwKLSAgICBU
ZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvclllbGxvdywKLSAgICBU
ZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvckJsYWNrLAotfTsKLQot
dHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FM
QXN5bmNQcmludENvbG9yKSB7Ci0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5
bmNQcmludENvbG9yQ3lhbiwKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3lu
Y1ByaW50Q29sb3JNYWdlbnRhLAotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFz
eW5jUHJpbnRDb2xvclllbGxvdywKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxB
c3luY1ByaW50Q29sb3JCbGFjaywKLX07Ci0KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAo
ImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgOiBSV0lQ
cm90b2NvbEpTT05PYmplY3QKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGlj
dGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkOwotLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7Ci0t
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZToo
aW50KWNvZGU7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNT
dHJpbmcgKm1lc3NhZ2U7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNz
aWduKSBpbnQgY29kZTsKLUBlbmQKLQotQHByb3RvY29sIFRlc3RQcm90b2NvbERhdGFiYXNlRG9t
YWluSGFuZGxlciA8TlNPYmplY3Q+Ci1Ab3B0aW9uYWwKLS0gKHZvaWQpZXhlY3V0ZVNRTFN5bmNP
cHRpb25hbFJldHVyblZhbHVlc1dpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICpl
cnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoTlNBcnJheS8qPE5T
U3RyaW5nPiovICoqY29sdW1uTmFtZXMsIE5TU3RyaW5nICoqbm90ZXMsIGRvdWJsZSAqdGltZXN0
YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKip2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVj
dCAqKnBheWxvYWQsIGludCAqZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAq
KnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgKnNjcmVlbkNvbG9y
LCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERh
dGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3IgKnByaW50
Q29sb3IpKXN1Y2Nlc3NDYWxsYmFjayBkYXRhYmFzZUlkOihpbnQpZGF0YWJhc2VJZCBxdWVyeToo
TlNTdHJpbmcgKilxdWVyeTsKLS0gKHZvaWQpZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXNXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2Fs
bGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmNv
bHVtbk5hbWVzLCBOU1N0cmluZyAqKm5vdGVzLCBkb3VibGUgKnRpbWVzdGFtcCwgUldJUHJvdG9j
b2xKU09OT2JqZWN0ICoqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipwYXlsb2FkLCBp
bnQgKmRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipzcWxFcnJvciwgVGVz
dFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzICpzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5T
U3RyaW5nPiovICoqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVT
UUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvciAqcHJpbnRDb2xvcikpc3VjY2Vz
c0NhbGxiYWNrIGRhdGFiYXNlSWQ6KGludClkYXRhYmFzZUlkIHF1ZXJ5OihOU1N0cmluZyAqKXF1
ZXJ5OwotLSAodm9pZClleGVjdXRlU1FMU3luY1dpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5T
U3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoTlNB
cnJheS8qPE5TU3RyaW5nPiovICpjb2x1bW5OYW1lcywgTlNTdHJpbmcgKm5vdGVzLCBkb3VibGUg
dGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnZhbHVlcywgUldJUHJvdG9jb2xKU09O
T2JqZWN0ICpwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJv
ciAqc3FsRXJyb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0
UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIFRlc3RQcm90b2NvbERh
dGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yIHByaW50Q29sb3IpKXN1Y2Nlc3NDYWxsYmFj
ayBkYXRhYmFzZUlkOihpbnQpZGF0YWJhc2VJZCBxdWVyeTooTlNTdHJpbmcgKilxdWVyeTsKLS0g
KHZvaWQpZXhlY3V0ZVNRTEFzeW5jV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcg
KmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKShOU0FycmF5Lyo8
TlNTdHJpbmc+Ki8gKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqbm90ZXMsIGRvdWJsZSB0aW1lc3Rh
bXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3Qg
KnBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpzcWxF
cnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzIHNjcmVlbkNvbG9yLCBOU0Fy
cmF5Lyo8TlNTdHJpbmc+Ki8gKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VF
eGVjdXRlU1FMQXN5bmNQcmludENvbG9yIHByaW50Q29sb3IpKXN1Y2Nlc3NDYWxsYmFjayBkYXRh
YmFzZUlkOihpbnQpZGF0YWJhc2VJZCBxdWVyeTooTlNTdHJpbmcgKilxdWVyeTsKLUBlbmQKLQot
Ci0KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5
T2JqZWN0cy5oPgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNp
bXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCi0jaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPHd0Zi9K
U09OVmFsdWVzLmg+Ci0KLQotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwu
aAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0
ZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBv
cnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJy
YXlDb252ZXJzaW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdGVtcGxhdGU8dHlw
ZW5hbWUgT2JqQ0VudW1UeXBlPgotT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xT
dHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0
cmluZyhUZXN0UHJvdG9jb2xQbGF0Zm9ybSB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsK
LSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOgotICAgICAgICByZXR1cm4gImFsbCJf
czsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzoKLSAgICAgICAgcmV0dXJu
ICJnZW5lcmljIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1JT1M6Ci0gICAgICAg
IHJldHVybiAiaW9zIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzoKLSAg
ICAgICAgcmV0dXJuICJtYWNvcyJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBP
cHRpb25hbDxUZXN0UHJvdG9jb2xQbGF0Zm9ybT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0
cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJhbGwiKQotICAgICAgICByZXR1cm4g
VGVzdFByb3RvY29sUGxhdGZvcm1BbGw7Ci0gICAgaWYgKHZhbHVlID09ICJnZW5lcmljIikKLSAg
ICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzsKLSAgICBpZiAodmFsdWUg
PT0gImlvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzsKLSAgICBp
ZiAodmFsdWUgPT0gIm1hY29zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3Jt
TWFjT1M7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotCi1pbmxpbmUgU3RyaW5nIHRv
UHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzIHZhbHVlKQot
ewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VQcmlt
YXJ5Q29sb3JzUmVkOgotICAgICAgICByZXR1cm4gInJlZCJfczsKLSAgICBjYXNlIFRlc3RQcm90
b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc0dyZWVuOgotICAgICAgICByZXR1cm4gImdyZWVuIl9z
OwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzQmx1ZToKLSAgICAg
ICAgcmV0dXJuICJibHVlIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlv
bmFsPFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycz4gZnJvbVByb3RvY29sU3RyaW5n
KGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJyZWQiKQotICAgICAg
ICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzUmVkOwotICAgIGlmICh2
YWx1ZSA9PSAiZ3JlZW4iKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VQcmlt
YXJ5Q29sb3JzR3JlZW47Ci0gICAgaWYgKHZhbHVlID09ICJibHVlIikKLSAgICAgICAgcmV0dXJu
IFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc0JsdWU7Ci0gICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKLX0KLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2Nv
bERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3IgdmFs
dWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFz
ZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yQ3lhbjoKLSAgICAg
ICAgcmV0dXJuICJjeWFuIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRl
U1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvck1hZ2VudGE6Ci0gICAgICAgIHJl
dHVybiAibWFnZW50YSJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNR
TFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JZZWxsb3c6Ci0gICAgICAgIHJldHVy
biAieWVsbG93Il9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3lu
Y09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvckJsYWNrOgotICAgICAgICByZXR1cm4gImJs
YWNrIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90
b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3I+
IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1
ZSA9PSAiY3lhbiIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVT
UUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yQ3lhbjsKLSAgICBpZiAodmFsdWUg
PT0gIm1hZ2VudGEiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRl
U1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvck1hZ2VudGE7Ci0gICAgaWYgKHZh
bHVlID09ICJ5ZWxsb3ciKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVj
dXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvclllbGxvdzsKLSAgICBpZiAo
dmFsdWUgPT0gImJsYWNrIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhl
Y3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JCbGFjazsKLSAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwotfQotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVz
dFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50
Q29sb3IgdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9j
b2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvckN5
YW46Ci0gICAgICAgIHJldHVybiAiY3lhbiJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFi
YXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yTWFnZW50YToK
LSAgICAgICAgcmV0dXJuICJtYWdlbnRhIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJh
c2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JZZWxsb3c6Ci0g
ICAgICAgIHJldHVybiAieWVsbG93Il9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VF
eGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JCbGFjazoKLSAgICAg
ICAgcmV0dXJuICJibGFjayJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRp
b25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFs
dWVzUHJpbnRDb2xvcj4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17
Ci0gICAgaWYgKHZhbHVlID09ICJjeWFuIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERh
dGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yQ3lhbjsK
LSAgICBpZiAodmFsdWUgPT0gIm1hZ2VudGEiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29s
RGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JNYWdl
bnRhOwotICAgIGlmICh2YWx1ZSA9PSAieWVsbG93IikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90
b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9y
WWVsbG93OwotICAgIGlmICh2YWx1ZSA9PSAiYmxhY2siKQotICAgICAgICByZXR1cm4gVGVzdFBy
b3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29s
b3JCbGFjazsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi1pbmxpbmUgU3RyaW5nIHRv
UHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29s
b3IgdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xE
YXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvckN5YW46Ci0gICAgICAgIHJldHVybiAiY3lh
biJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENv
bG9yTWFnZW50YToKLSAgICAgICAgcmV0dXJuICJtYWdlbnRhIl9zOwotICAgIGNhc2UgVGVzdFBy
b3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3JZZWxsb3c6Ci0gICAgICAgIHJl
dHVybiAieWVsbG93Il9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FM
U3luY1ByaW50Q29sb3JCbGFjazoKLSAgICAgICAgcmV0dXJuICJibGFjayJfczsKLSAgICB9Ci19
Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVTUUxTeW5jUHJpbnRDb2xvcj4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFs
dWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJjeWFuIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90
b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yQ3lhbjsKLSAgICBpZiAodmFsdWUg
PT0gIm1hZ2VudGEiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRl
U1FMU3luY1ByaW50Q29sb3JNYWdlbnRhOwotICAgIGlmICh2YWx1ZSA9PSAieWVsbG93IikKLSAg
ICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9y
WWVsbG93OwotICAgIGlmICh2YWx1ZSA9PSAiYmxhY2siKQotICAgICAgICByZXR1cm4gVGVzdFBy
b3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3JCbGFjazsKLSAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwotfQotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFBy
b3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yIHZhbHVlKQotewotICAgIHN3
aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5
bmNQcmludENvbG9yQ3lhbjoKLSAgICAgICAgcmV0dXJuICJjeWFuIl9zOwotICAgIGNhc2UgVGVz
dFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yTWFnZW50YToKLSAgICAg
ICAgcmV0dXJuICJtYWdlbnRhIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVj
dXRlU1FMQXN5bmNQcmludENvbG9yWWVsbG93OgotICAgICAgICByZXR1cm4gInllbGxvdyJfczsK
LSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvckJs
YWNrOgotICAgICAgICByZXR1cm4gImJsYWNrIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8Pgot
aW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRD
b2xvcj4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYg
KHZhbHVlID09ICJjeWFuIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhl
Y3V0ZVNRTEFzeW5jUHJpbnRDb2xvckN5YW47Ci0gICAgaWYgKHZhbHVlID09ICJtYWdlbnRhIikK
LSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRD
b2xvck1hZ2VudGE7Ci0gICAgaWYgKHZhbHVlID09ICJ5ZWxsb3ciKQotICAgICAgICByZXR1cm4g
VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yWWVsbG93OwotICAg
IGlmICh2YWx1ZSA9PSAiYmxhY2siKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJh
c2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yQmxhY2s7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1h
bmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgi
Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBh
cnNlci5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZh
dGUuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGludGVyZmFjZSBUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMgKERhdGFiYXNlRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZURh
dGFiYXNlSWQ6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwot
KyAodm9pZClfcGFyc2VQcmltYXJ5Q29sb3JzOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5
bG9hZDooaWQpcGF5bG9hZDsKLSsgKHZvaWQpX3BhcnNlQ29sb3JMaXN0OihOU0FycmF5Lyo8TlNT
dHJpbmc+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9w
YXJzZUVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqKW91dFZhbHVlIGZyb21QYXls
b2FkOihpZClwYXlsb2FkOwotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMgKERhdGFiYXNlRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZURhdGFiYXNl
SWQ6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNOdW1iZXIgY2xhc3NdKTsK
LSAgICAqb3V0VmFsdWUgPSAoTlNOdW1iZXIgKilwYXlsb2FkOwotfQotCi0rICh2b2lkKV9wYXJz
ZVByaW1hcnlDb2xvcnM6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXls
b2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNTdHJp
bmcgY2xhc3NdKTsKLSAgICBPcHRpb25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xv
cnM+IHJlc3VsdCA9IEluc3BlY3Rvcjo6ZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERh
dGFiYXNlUHJpbWFyeUNvbG9ycz4ocGF5bG9hZCk7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9C
QURfRU5VTV9WQUxVRShyZXN1bHQsIEAiUHJpbWFyeUNvbG9ycyIpOwotICAgICpvdXRWYWx1ZSA9
IEAocmVzdWx0LnZhbHVlKCkpOwotfQotCi0rICh2b2lkKV9wYXJzZUNvbG9yTGlzdDooTlNBcnJh
eS8qPE5TU3RyaW5nPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0g
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNBcnJheS8qPE5TU3Ry
aW5nPiovIGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAq
KXBheWxvYWQ7Ci19Ci0KLSsgKHZvaWQpX3BhcnNlRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNl
RXJyb3IgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19F
WENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKLSAg
ICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgYWxsb2NdIGluaXRXaXRo
UGF5bG9hZDpwYXlsb2FkXTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBl
cy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5
bmMtYXR0cmlidXRlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9j
b2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbXBv
cnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQot
QGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IKLQotLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+
ICopcGF5bG9hZAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICBy
ZXR1cm4gbmlsOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShw
YXlsb2FkW0AibWVzc2FnZSJdLCBAIm1lc3NhZ2UiKTsKLSAgICBzZWxmLm1lc3NhZ2UgPSBwYXls
b2FkW0AibWVzc2FnZSJdOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9Q
RVJUWShwYXlsb2FkW0AiY29kZSJdLCBAImNvZGUiKTsKLSAgICBzZWxmLmNvZGUgPSBbcGF5bG9h
ZFtAImNvZGUiXSBpbnRlZ2VyVmFsdWVdOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0tIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICop
b2JqZWN0Ci17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEpTT05PYmplY3Q6W29i
amVjdCB0b0pTT05PYmplY3RdLmdldCgpXSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBy
ZXR1cm4gc2VsZjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTWVzc2FnZTooTlNTdHJp
bmcgKiltZXNzYWdlIGNvZGU6KGludCljb2RlCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBp
bml0XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JF
UVVJUkVEX1BST1BFUlRZKG1lc3NhZ2UsIEAibWVzc2FnZSIpOwotCi0gICAgc2VsZi5tZXNzYWdl
ID0gbWVzc2FnZTsKLSAgICBzZWxmLmNvZGUgPSBjb2RlOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19
Ci0KLS0gKHZvaWQpc2V0TWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlCi17Ci0gICAgW3N1cGVy
IHNldFN0cmluZzptZXNzYWdlIGZvcktleTpAIm1lc3NhZ2UiXTsKLX0KLQotLSAoTlNTdHJpbmcg
KiltZXNzYWdlCi17Ci0gICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJtZXNzYWdlIl07
Ci19Ci0KLS0gKHZvaWQpc2V0Q29kZTooaW50KWNvZGUKLXsKLSAgICBbc3VwZXIgc2V0SW50ZWdl
cjpjb2RlIGZvcktleTpAImNvZGUiXTsKLX0KLQotLSAoaW50KWNvZGUKLXsKLSAgICByZXR1cm4g
W3N1cGVyIGludGVnZXJGb3JLZXk6QCJjb2RlIl07Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9jb21tYW5kcy13aXRo
LW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9jb21t
YW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5ZjU1ODc3MThkLi4wMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9l
eHBlY3RlZC9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNv
bi1yZXN1bHQKKysrIC9kZXYvbnVsbApAQCAtMSwxNjc0ICswLDAgQEAKLSMjIyBCZWdpbiBGaWxl
OiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0vLyBEYXRhYmFz
ZQotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiRGF0YWJhc2UiLCBudWxsKTsKLUlu
c3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJEYXRhYmFzZS5QcmltYXJ5Q29sb3JzIiwge1Jl
ZDogInJlZCIsIEdyZWVuOiAiZ3JlZW4iLCBCbHVlOiAiYmx1ZSJ9KTsKLUluc3BlY3RvckJhY2tl
bmQucmVnaXN0ZXJDb21tYW5kKCJEYXRhYmFzZS5leGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJz
IiwgbnVsbCwgW3sibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRp
b25hbCI6IHRydWV9LCB7Im5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9u
YWwiOiB0cnVlfSwgeyJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIsICJvcHRp
b25hbCI6IHRydWV9LCB7Im5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlv
bmFsIjogdHJ1ZX0sIHsibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlv
bmFsIjogdHJ1ZX0sIHsibmFtZSI6ICJkYXRhYmFzZUlkIiwgInR5cGUiOiAibnVtYmVyIiwgIm9w
dGlvbmFsIjogdHJ1ZX0sIHsibmFtZSI6ICJzcWxFcnJvciIsICJ0eXBlIjogIm9iamVjdCIsICJv
cHRpb25hbCI6IHRydWV9LCB7Im5hbWUiOiAic2NyZWVuQ29sb3IiLCAidHlwZSI6ICJzdHJpbmci
LCAib3B0aW9uYWwiOiB0cnVlfSwgeyJuYW1lIjogImFsdGVybmF0ZUNvbG9ycyIsICJ0eXBlIjog
Im9iamVjdCIsICJvcHRpb25hbCI6IHRydWV9LCB7Im5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBl
IjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWV9XSwgWyJjb2x1bW5OYW1lcyIsICJub3RlcyIs
ICJ0aW1lc3RhbXAiLCAidmFsdWVzIiwgInBheWxvYWQiLCAiZGF0YWJhc2VJZCIsICJzcWxFcnJv
ciIsICJzY3JlZW5Db2xvciIsICJhbHRlcm5hdGVDb2xvcnMiLCAicHJpbnRDb2xvciJdKTsKLUlu
c3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJEYXRhYmFzZS5leGVjdXRlTm9PcHRpb25h
bFBhcmFtZXRlcnMiLCBudWxsLCBbeyJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAib2Jq
ZWN0In0sIHsibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyJ9LCB7Im5hbWUiOiAidGlt
ZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIn0sIHsibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJv
YmplY3QifSwgeyJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJvYmplY3QifSwgeyJuYW1lIjog
ImRhdGFiYXNlSWQiLCAidHlwZSI6ICJudW1iZXIifSwgeyJuYW1lIjogInNxbEVycm9yIiwgInR5
cGUiOiAib2JqZWN0In0sIHsibmFtZSI6ICJzY3JlZW5Db2xvciIsICJ0eXBlIjogInN0cmluZyJ9
LCB7Im5hbWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwgInR5cGUiOiAib2JqZWN0In0sIHsibmFtZSI6
ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIn1dLCBbImNvbHVtbk5hbWVzIiwgIm5vdGVz
IiwgInRpbWVzdGFtcCIsICJ2YWx1ZXMiLCAicGF5bG9hZCIsICJkYXRhYmFzZUlkIiwgInNxbEVy
cm9yIiwgInNjcmVlbkNvbG9yIiwgImFsdGVybmF0ZUNvbG9ycyIsICJwcmludENvbG9yIl0pOwot
SW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiRGF0YWJhc2UiLCBudWxsKTsKLSMjIyBF
bmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMu
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21h
IG9uY2UKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi0j
aW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFz
cyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNr
ZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBt
X2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQotICAgIEJhY2tlbmRE
aXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERp
c3BhdGNoZXIuZ2V0KCk7IH0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVy
PiBtX2JhY2tlbmREaXNwYXRjaGVyOwotfTsKLQotCi1jbGFzcyBBbHRlcm5hdGVEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1
YmxpYzoKLSAgICB2aXJ0dWFsIH5BbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKCkg
eyB9Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyBj
YWxsSWQsIGNvbnN0IEpTT046OkFycmF5KiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nKiBp
bl9ub3RlcywgY29uc3QgZG91YmxlKiBpbl90aW1lc3RhbXAsIGNvbnN0IEpTT046Ok9iamVjdCog
aW5fdmFsdWVzLCBjb25zdCBKU09OOjpWYWx1ZSogaW5fcGF5bG9hZCwgY29uc3QgaW50KiBpbl9k
YXRhYmFzZUlkLCBjb25zdCBKU09OOjpPYmplY3QqIGluX3NxbEVycm9yLCBjb25zdCBTdHJpbmcq
IGluX3NjcmVlbkNvbG9yLCBjb25zdCBKU09OOjpBcnJheSogaW5fYWx0ZXJuYXRlQ29sb3JzLCBj
b25zdCBTdHJpbmcqIGluX3ByaW50Q29sb3IpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0
ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgY2FsbElkLCBjb25zdCBKU09OOjpBcnJheSYgaW5f
Y29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgaW5fbm90ZXMsIGRvdWJsZSBpbl90aW1lc3RhbXAs
IGNvbnN0IEpTT046Ok9iamVjdCYgaW5fdmFsdWVzLCBKU09OOjpWYWx1ZSBpbl9wYXlsb2FkLCBp
bnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgSlNPTjo6T2JqZWN0JiBpbl9zcWxFcnJvciwgY29uc3Qg
U3RyaW5nJiBpbl9zY3JlZW5Db2xvciwgY29uc3QgSlNPTjo6QXJyYXkmIGluX2FsdGVybmF0ZUNv
bG9ycywgY29uc3QgU3RyaW5nJiBpbl9wcmludENvbG9yKSA9IDA7Ci19OwotCi19IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKLQotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQotIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJz
LmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1
cm4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgot
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Igewot
Ci10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQotY2xhc3MgQWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlcjsKLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
LQotY2xhc3MgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewotcHVibGljOgotICAg
IC8vIE5hbWVkIGFmdGVyIHBhcmFtZXRlciAncHJpbnRDb2xvcicgd2hpbGUgZ2VuZXJhdGluZyBj
b21tYW5kL2V2ZW50IGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMuCi0gICAgZW51bSBjbGFz
cyBQcmludENvbG9yIHsKLSAgICAgICAgQ3lhbiA9IDMsCi0gICAgICAgIE1hZ2VudGEgPSA0LAot
ICAgICAgICBZZWxsb3cgPSA1LAotICAgICAgICBCbGFjayA9IDYsCi0gICAgfTsgLy8gZW51bSBj
bGFzcyBQcmludENvbG9yCi0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFt
ZXRlcnMoRXJyb3JTdHJpbmcmLCBjb25zdCBKU09OOjpBcnJheSogb3B0X2luX2NvbHVtbk5hbWVz
LCBjb25zdCBTdHJpbmcqIG9wdF9pbl9ub3RlcywgY29uc3QgZG91YmxlKiBvcHRfaW5fdGltZXN0
YW1wLCBjb25zdCBKU09OOjpPYmplY3QqIG9wdF9pbl92YWx1ZXMsIGNvbnN0IEpTT046OlZhbHVl
KiBvcHRfaW5fcGF5bG9hZCwgY29uc3QgaW50KiBvcHRfaW5fZGF0YWJhc2VJZCwgY29uc3QgSlNP
Tjo6T2JqZWN0KiBvcHRfaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyogb3B0X2luX3NjcmVlbkNv
bG9yLCBjb25zdCBKU09OOjpBcnJheSogb3B0X2luX2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3Ry
aW5nKiBvcHRfaW5fcHJpbnRDb2xvciwgUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mIG9w
dF9vdXRfY29sdW1uTmFtZXMsIE9wdGlvbmFsPFN0cmluZz4mIG9wdF9vdXRfbm90ZXMsIE9wdGlv
bmFsPGRvdWJsZT4mIG9wdF9vdXRfdGltZXN0YW1wLCBPcHRpb25hbDxKU09OOjpPYmplY3Q+JiBv
cHRfb3V0X3ZhbHVlcywgT3B0aW9uYWw8SlNPTjo6VmFsdWU+JiBvcHRfb3V0X3BheWxvYWQsIE9w
dGlvbmFsPGludD4mIG9wdF9vdXRfZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRhdGFiYXNlOjpFcnJvcj4mIG9wdF9vdXRfc3FsRXJyb3IsIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzKiBvcHRfb3V0X3NjcmVlbkNvbG9yLCBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4mIG9wdF9vdXRfYWx0ZXJu
YXRlQ29sb3JzLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciog
b3B0X291dF9wcmludENvbG9yKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVOb09wdGlv
bmFsUGFyYW1ldGVycyhFcnJvclN0cmluZyYsIGNvbnN0IEpTT046OkFycmF5JiBpbl9jb2x1bW5O
YW1lcywgY29uc3QgU3RyaW5nJiBpbl9ub3RlcywgZG91YmxlIGluX3RpbWVzdGFtcCwgY29uc3Qg
SlNPTjo6T2JqZWN0JiBpbl92YWx1ZXMsIEpTT046OlZhbHVlIGluX3BheWxvYWQsIGludCBpbl9k
YXRhYmFzZUlkLCBjb25zdCBKU09OOjpPYmplY3QmIGluX3NxbEVycm9yLCBjb25zdCBTdHJpbmcm
IGluX3NjcmVlbkNvbG9yLCBjb25zdCBKU09OOjpBcnJheSYgaW5fYWx0ZXJuYXRlQ29sb3JzLCBj
b25zdCBTdHJpbmcmIGluX3ByaW50Q29sb3IsIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+
JiBvdXRfY29sdW1uTmFtZXMsIFN0cmluZyogb3V0X25vdGVzLCBkb3VibGUqIG91dF90aW1lc3Rh
bXAsIEpTT046Ok9iamVjdCogb3V0X3ZhbHVlcywgSlNPTjo6VmFsdWUqIG91dF9wYXlsb2FkLCBp
bnQqIG91dF9kYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6
OkVycm9yPiYgb3V0X3NxbEVycm9yLCBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJp
bWFyeUNvbG9ycyogb3V0X3NjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6OkNvbG9yTGlzdD4mIG91dF9hbHRlcm5hdGVDb2xvcnMsIERhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yKiBvdXRfcHJpbnRDb2xvcikgPSAwOwotcHJv
dGVjdGVkOgotICAgIHZpcnR1YWwgfkRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7
Ci19OwotCi1jbGFzcyBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1
cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPERh
dGFiYXNlQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIERhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdm9pZCBkaXNwYXRjaChsb25nIHJl
cXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2Fn
ZSkgb3ZlcnJpZGU7Ci1wcml2YXRlOgotICAgIHZvaWQgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1l
dGVycyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsK
LSAgICB2b2lkIGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhsb25nIHJlcXVlc3RJZCwgUmVm
UHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKLXB1YmxpYzoKLSAgICB2b2lkIHNldEFsdGVybmF0ZURpc3Bh
dGNoZXIoQWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0
Y2hlcikgeyBtX2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9Ci1w
cml2YXRlOgotICAgIEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIqIG1fYWx0ZXJu
YXRlRGlzcGF0Y2hlciB7IG51bGxwdHIgfTsKLSNlbmRpZgotcHJpdmF0ZToKLSAgICBEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiwgRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXIqKTsKLSAgICBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciog
bV9hZ2VudCB7IG51bGxwdHIgfTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMj
IEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRl
c3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pT
T05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKLSNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCi0j
ZW5kaWYKLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLURhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyOjp+RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KLQotUmVm
PERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmNy
ZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIERhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOwotfQot
Ci1EYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKEJh
Y2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXIqIGFnZW50KQotICAgIDogU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIo
YmFja2VuZERpc3BhdGNoZXIpCi0gICAgLCBtX2FnZW50KGFnZW50KQotewotICAgIG1fYmFja2Vu
ZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbigiRGF0YWJhc2UiX3MsIHRo
aXMpOwotfQotCi12b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcg
cmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNz
YWdlKQotewotICAgIFJlZjxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlz
KTsKLQotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+
Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRlcnMpOwotCi0gICAgaWYgKG1ldGhvZCA9PSAi
ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyIpCi0gICAgICAgIGV4ZWN1dGVBbGxPcHRpb25h
bFBhcmFtZXRlcnMocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKLSAgICBlbHNlIGlm
IChtZXRob2QgPT0gImV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyIpCi0gICAgICAgIGV4ZWN1
dGVOb09wdGlvbmFsUGFyYW1ldGVycyhyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOwot
ICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJv
cihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRGF0YWJhc2UuIiArIG1ldGhv
ZCArICInIHdhcyBub3QgZm91bmQiKTsKLX0KLQotdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVyOjpleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8
SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpCi17Ci0gICAgYm9vbCBvcHRfaW5fY29sdW1uTmFt
ZXNfdmFsdWVGb3VuZCA9IGZhbHNlOwotICAgIFJlZlB0cjxKU09OOjpBcnJheT4gb3B0X2luX2Nv
bHVtbk5hbWVzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0QXJyYXkocGFyYW1ldGVycy5nZXQo
KSwgImNvbHVtbk5hbWVzIl9zLCAmb3B0X2luX2NvbHVtbk5hbWVzX3ZhbHVlRm91bmQpOwotICAg
IGJvb2wgb3B0X2luX25vdGVzX3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAgICBTdHJpbmcgb3B0X2lu
X25vdGVzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCks
ICJub3RlcyJfcywgJm9wdF9pbl9ub3Rlc192YWx1ZUZvdW5kKTsKLSAgICBib29sIG9wdF9pbl90
aW1lc3RhbXBfdmFsdWVGb3VuZCA9IGZhbHNlOwotICAgIGRvdWJsZSBvcHRfaW5fdGltZXN0YW1w
ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0RG91YmxlKHBhcmFtZXRlcnMuZ2V0KCksICJ0aW1l
c3RhbXAiX3MsICZvcHRfaW5fdGltZXN0YW1wX3ZhbHVlRm91bmQpOwotICAgIGJvb2wgb3B0X2lu
X3ZhbHVlc192YWx1ZUZvdW5kID0gZmFsc2U7Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gb3B0
X2luX3ZhbHVlcyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldE9iamVjdChwYXJhbWV0ZXJzLmdl
dCgpLCAidmFsdWVzIl9zLCAmb3B0X2luX3ZhbHVlc192YWx1ZUZvdW5kKTsKLSAgICBib29sIG9w
dF9pbl9wYXlsb2FkX3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+
IG9wdF9pbl9wYXlsb2FkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0VmFsdWUocGFyYW1ldGVy
cy5nZXQoKSwgInBheWxvYWQiX3MsICZvcHRfaW5fcGF5bG9hZF92YWx1ZUZvdW5kKTsKLSAgICBi
b29sIG9wdF9pbl9kYXRhYmFzZUlkX3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAgICBpbnQgb3B0X2lu
X2RhdGFiYXNlSWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRJbnRlZ2VyKHBhcmFtZXRlcnMu
Z2V0KCksICJkYXRhYmFzZUlkIl9zLCAmb3B0X2luX2RhdGFiYXNlSWRfdmFsdWVGb3VuZCk7Ci0g
ICAgYm9vbCBvcHRfaW5fc3FsRXJyb3JfdmFsdWVGb3VuZCA9IGZhbHNlOwotICAgIFJlZlB0cjxK
U09OOjpPYmplY3Q+IG9wdF9pbl9zcWxFcnJvciA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldE9i
amVjdChwYXJhbWV0ZXJzLmdldCgpLCAic3FsRXJyb3IiX3MsICZvcHRfaW5fc3FsRXJyb3JfdmFs
dWVGb3VuZCk7Ci0gICAgYm9vbCBvcHRfaW5fc2NyZWVuQ29sb3JfdmFsdWVGb3VuZCA9IGZhbHNl
OwotICAgIFN0cmluZyBvcHRfaW5fc2NyZWVuQ29sb3IgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5n
ZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgInNjcmVlbkNvbG9yIl9zLCAmb3B0X2luX3NjcmVl
bkNvbG9yX3ZhbHVlRm91bmQpOwotICAgIGJvb2wgb3B0X2luX2FsdGVybmF0ZUNvbG9yc192YWx1
ZUZvdW5kID0gZmFsc2U7Ci0gICAgUmVmUHRyPEpTT046OkFycmF5PiBvcHRfaW5fYWx0ZXJuYXRl
Q29sb3JzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0QXJyYXkocGFyYW1ldGVycy5nZXQoKSwg
ImFsdGVybmF0ZUNvbG9ycyJfcywgJm9wdF9pbl9hbHRlcm5hdGVDb2xvcnNfdmFsdWVGb3VuZCk7
Ci0gICAgYm9vbCBvcHRfaW5fcHJpbnRDb2xvcl92YWx1ZUZvdW5kID0gZmFsc2U7Ci0gICAgU3Ry
aW5nIG9wdF9pbl9wcmludENvbG9yID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBh
cmFtZXRlcnMuZ2V0KCksICJwcmludENvbG9yIl9zLCAmb3B0X2luX3ByaW50Q29sb3JfdmFsdWVG
b3VuZCk7Ci0gICAgaWYgKG1fYmFja2VuZERpc3BhdGNoZXItPmhhc1Byb3RvY29sRXJyb3JzKCkp
IHsKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNr
ZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAn
RGF0YWJhc2UuZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycycgY2FuJ3QgYmUgcHJvY2Vzc2Vk
Il9zKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQotICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAg
ICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5leGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJz
KHJlcXVlc3RJZCwgb3B0X2luX2NvbHVtbk5hbWVzX3ZhbHVlRm91bmQgPyBvcHRfaW5fY29sdW1u
TmFtZXMuZ2V0KCkgOiBudWxscHRyLCBvcHRfaW5fbm90ZXNfdmFsdWVGb3VuZCA/ICZvcHRfaW5f
bm90ZXMgOiBudWxscHRyLCBvcHRfaW5fdGltZXN0YW1wX3ZhbHVlRm91bmQgPyAmb3B0X2luX3Rp
bWVzdGFtcCA6IG51bGxwdHIsIG9wdF9pbl92YWx1ZXNfdmFsdWVGb3VuZCA/IG9wdF9pbl92YWx1
ZXMuZ2V0KCkgOiBudWxscHRyLCBvcHRfaW5fcGF5bG9hZF92YWx1ZUZvdW5kID8gb3B0X2luX3Bh
eWxvYWQuZ2V0KCkgOiBudWxscHRyLCBvcHRfaW5fZGF0YWJhc2VJZF92YWx1ZUZvdW5kID8gJm9w
dF9pbl9kYXRhYmFzZUlkIDogbnVsbHB0ciwgb3B0X2luX3NxbEVycm9yX3ZhbHVlRm91bmQgPyBv
cHRfaW5fc3FsRXJyb3IuZ2V0KCkgOiBudWxscHRyLCBvcHRfaW5fc2NyZWVuQ29sb3JfdmFsdWVG
b3VuZCA/ICZvcHRfaW5fc2NyZWVuQ29sb3IgOiBudWxscHRyLCBvcHRfaW5fYWx0ZXJuYXRlQ29s
b3JzX3ZhbHVlRm91bmQgPyBvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzLmdldCgpIDogbnVsbHB0ciwg
b3B0X2luX3ByaW50Q29sb3JfdmFsdWVGb3VuZCA/ICZvcHRfaW5fcHJpbnRDb2xvciA6IG51bGxw
dHIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBFcnJvclN0cmluZyBl
cnJvcjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpOwotICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IG91dF9jb2x1bW5OYW1lczsK
LSAgICBPcHRpb25hbDxTdHJpbmc+IG91dF9ub3RlczsKLSAgICBPcHRpb25hbDxkb3VibGU+IG91
dF90aW1lc3RhbXA7Ci0gICAgT3B0aW9uYWw8SlNPTjo6T2JqZWN0PiBvdXRfdmFsdWVzOwotICAg
IE9wdGlvbmFsPEpTT046OlZhbHVlPiBvdXRfcGF5bG9hZDsKLSAgICBPcHRpb25hbDxpbnQ+IG91
dF9kYXRhYmFzZUlkOwotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6
RXJyb3I+IG91dF9zcWxFcnJvcjsKLSAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6
UHJpbWFyeUNvbG9ycyBvdXRfc2NyZWVuQ29sb3I7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IG91dF9hbHRlcm5hdGVDb2xvcnM7Ci0gICAgRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3Igb3V0X3ByaW50Q29sb3I7
Ci0gICAgbV9hZ2VudC0+ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhlcnJvciwgb3B0X2lu
X2NvbHVtbk5hbWVzX3ZhbHVlRm91bmQgPyBvcHRfaW5fY29sdW1uTmFtZXMuZ2V0KCkgOiBudWxs
cHRyLCBvcHRfaW5fbm90ZXNfdmFsdWVGb3VuZCA/ICZvcHRfaW5fbm90ZXMgOiBudWxscHRyLCBv
cHRfaW5fdGltZXN0YW1wX3ZhbHVlRm91bmQgPyAmb3B0X2luX3RpbWVzdGFtcCA6IG51bGxwdHIs
IG9wdF9pbl92YWx1ZXNfdmFsdWVGb3VuZCA/IG9wdF9pbl92YWx1ZXMuZ2V0KCkgOiBudWxscHRy
LCBvcHRfaW5fcGF5bG9hZF92YWx1ZUZvdW5kID8gb3B0X2luX3BheWxvYWQuZ2V0KCkgOiBudWxs
cHRyLCBvcHRfaW5fZGF0YWJhc2VJZF92YWx1ZUZvdW5kID8gJm9wdF9pbl9kYXRhYmFzZUlkIDog
bnVsbHB0ciwgb3B0X2luX3NxbEVycm9yX3ZhbHVlRm91bmQgPyBvcHRfaW5fc3FsRXJyb3IuZ2V0
KCkgOiBudWxscHRyLCBvcHRfaW5fc2NyZWVuQ29sb3JfdmFsdWVGb3VuZCA/ICZvcHRfaW5fc2Ny
ZWVuQ29sb3IgOiBudWxscHRyLCBvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzX3ZhbHVlRm91bmQgPyBv
cHRfaW5fYWx0ZXJuYXRlQ29sb3JzLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX3ByaW50Q29sb3Jf
dmFsdWVGb3VuZCA/ICZvcHRfaW5fcHJpbnRDb2xvciA6IG51bGxwdHIsIG91dF9jb2x1bW5OYW1l
cywgb3V0X25vdGVzLCBvdXRfdGltZXN0YW1wLCBvdXRfdmFsdWVzLCBvdXRfcGF5bG9hZCwgb3V0
X2RhdGFiYXNlSWQsIG91dF9zcWxFcnJvciwgb3V0X3NjcmVlbkNvbG9yLCBvdXRfYWx0ZXJuYXRl
Q29sb3JzLCBvdXRfcHJpbnRDb2xvcik7Ci0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7Ci0g
ICAgICAgIGlmIChvdXRfY29sdW1uTmFtZXMpCi0gICAgICAgICAgICByZXN1bHQtPnNldEFycmF5
KCJjb2x1bW5OYW1lcyJfcywgb3V0X2NvbHVtbk5hbWVzKTsKLSAgICAgICAgaWYgKG91dF9ub3Rl
cy5oYXNWYWx1ZSgpKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCAq
b3V0X25vdGVzKTsKLSAgICAgICAgaWYgKG91dF90aW1lc3RhbXAuaGFzVmFsdWUoKSkKLSAgICAg
ICAgICAgIHJlc3VsdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICpvdXRfdGltZXN0YW1wKTsK
LSAgICAgICAgaWYgKG91dF92YWx1ZXMuaGFzVmFsdWUoKSkKLSAgICAgICAgICAgIHJlc3VsdC0+
c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsICpvdXRfdmFsdWVzKTsKLSAgICAgICAgaWYgKG91dF9wYXls
b2FkLmhhc1ZhbHVlKCkpCi0gICAgICAgICAgICByZXN1bHQtPnNldFZhbHVlKCJwYXlsb2FkIl9z
LCAqb3V0X3BheWxvYWQpOwotICAgICAgICBpZiAob3V0X2RhdGFiYXNlSWQuaGFzVmFsdWUoKSkK
LSAgICAgICAgICAgIHJlc3VsdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgKm91dF9kYXRh
YmFzZUlkKTsKLSAgICAgICAgaWYgKG91dF9zcWxFcnJvcikKLSAgICAgICAgICAgIHJlc3VsdC0+
c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgb3V0X3NxbEVycm9yKTsKLSAgICAgICAgaWYgKG91dF9z
Y3JlZW5Db2xvci5oYXNWYWx1ZSgpKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInNj
cmVlbkNvbG9yIl9zLCAqb3V0X3NjcmVlbkNvbG9yKTsKLSAgICAgICAgaWYgKG91dF9hbHRlcm5h
dGVDb2xvcnMpCi0gICAgICAgICAgICByZXN1bHQtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMi
X3MsIG91dF9hbHRlcm5hdGVDb2xvcnMpOwotICAgICAgICBpZiAob3V0X3ByaW50Q29sb3IuaGFz
VmFsdWUoKSkKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCAq
b3V0X3ByaW50Q29sb3IpOwotICAgIH0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJl
c3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJl
cG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3Zl
KGVycm9yKSk7Ci19Ci0KLXZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZU5v
T3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYm
IHBhcmFtZXRlcnMpCi17Ci0gICAgUmVmUHRyPEpTT046OkFycmF5PiBpbl9jb2x1bW5OYW1lcyA9
IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEFycmF5KHBhcmFtZXRlcnMuZ2V0KCksICJjb2x1bW5O
YW1lcyJfcywgbnVsbHB0cik7Ci0gICAgU3RyaW5nIGluX25vdGVzID0gbV9iYWNrZW5kRGlzcGF0
Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksICJub3RlcyJfcywgbnVsbHB0cik7Ci0g
ICAgZG91YmxlIGluX3RpbWVzdGFtcCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldERvdWJsZShw
YXJhbWV0ZXJzLmdldCgpLCAidGltZXN0YW1wIl9zLCBudWxscHRyKTsKLSAgICBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiBpbl92YWx1ZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRPYmplY3QocGFy
YW1ldGVycy5nZXQoKSwgInZhbHVlcyJfcywgbnVsbHB0cik7Ci0gICAgUmVmUHRyPEpTT046OlZh
bHVlPiBpbl9wYXlsb2FkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0VmFsdWUocGFyYW1ldGVy
cy5nZXQoKSwgInBheWxvYWQiX3MsIG51bGxwdHIpOwotICAgIGludCBpbl9kYXRhYmFzZUlkID0g
bV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0SW50ZWdlcihwYXJhbWV0ZXJzLmdldCgpLCAiZGF0YWJh
c2VJZCJfcywgbnVsbHB0cik7Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gaW5fc3FsRXJyb3Ig
PSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRPYmplY3QocGFyYW1ldGVycy5nZXQoKSwgInNxbEVy
cm9yIl9zLCBudWxscHRyKTsKLSAgICBTdHJpbmcgaW5fc2NyZWVuQ29sb3IgPSBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgInNjcmVlbkNvbG9yIl9zLCBu
dWxscHRyKTsKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGluX2FsdGVybmF0ZUNvbG9ycyA9IG1f
YmFja2VuZERpc3BhdGNoZXItPmdldEFycmF5KHBhcmFtZXRlcnMuZ2V0KCksICJhbHRlcm5hdGVD
b2xvcnMiX3MsIG51bGxwdHIpOwotICAgIFN0cmluZyBpbl9wcmludENvbG9yID0gbV9iYWNrZW5k
RGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksICJwcmludENvbG9yIl9zLCBu
dWxscHRyKTsKLSAgICBpZiAobV9iYWNrZW5kRGlzcGF0Y2hlci0+aGFzUHJvdG9jb2xFcnJvcnMo
KSkgewotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJh
Y2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCAiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9k
ICdEYXRhYmFzZS5leGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMnIGNhbid0IGJlIHByb2Nlc3Nl
ZCJfcyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKLSAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0g
ICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJz
KHJlcXVlc3RJZCwgKmluX2NvbHVtbk5hbWVzLCBpbl9ub3RlcywgaW5fdGltZXN0YW1wLCAqaW5f
dmFsdWVzLCAqaW5fcGF5bG9hZCwgaW5fZGF0YWJhc2VJZCwgKmluX3NxbEVycm9yLCBpbl9zY3Jl
ZW5Db2xvciwgKmluX2FsdGVybmF0ZUNvbG9ycywgaW5fcHJpbnRDb2xvcik7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxK
U09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgUmVmUHRy
PEpTT046OkFycmF5T2Y8U3RyaW5nPj4gb3V0X2NvbHVtbk5hbWVzOwotICAgIFN0cmluZyBvdXRf
bm90ZXM7Ci0gICAgZG91YmxlIG91dF90aW1lc3RhbXA7Ci0gICAgSlNPTjo6T2JqZWN0IG91dF92
YWx1ZXM7Ci0gICAgSlNPTjo6VmFsdWUgb3V0X3BheWxvYWQ7Ci0gICAgaW50IG91dF9kYXRhYmFz
ZUlkOwotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IG91
dF9zcWxFcnJvcjsKLSAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNv
bG9ycyBvdXRfc2NyZWVuQ29sb3I7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpDb2xvckxpc3Q+IG91dF9hbHRlcm5hdGVDb2xvcnM7Ci0gICAgRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3Igb3V0X3ByaW50Q29sb3I7Ci0gICAgbV9h
Z2VudC0+ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGVycm9yLCAqaW5fY29sdW1uTmFtZXMs
IGluX25vdGVzLCBpbl90aW1lc3RhbXAsICppbl92YWx1ZXMsICppbl9wYXlsb2FkLCBpbl9kYXRh
YmFzZUlkLCAqaW5fc3FsRXJyb3IsIGluX3NjcmVlbkNvbG9yLCAqaW5fYWx0ZXJuYXRlQ29sb3Jz
LCBpbl9wcmludENvbG9yLCBvdXRfY29sdW1uTmFtZXMsICZvdXRfbm90ZXMsICZvdXRfdGltZXN0
YW1wLCBvdXRfdmFsdWVzLCAmb3V0X3BheWxvYWQsICZvdXRfZGF0YWJhc2VJZCwgb3V0X3NxbEVy
cm9yLCAmb3V0X3NjcmVlbkNvbG9yLCBvdXRfYWx0ZXJuYXRlQ29sb3JzLCAmb3V0X3ByaW50Q29s
b3IpOwotCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkgewotICAgICAgICByZXN1bHQtPnNldEFy
cmF5KCJjb2x1bW5OYW1lcyJfcywgb3V0X2NvbHVtbk5hbWVzKTsKLSAgICAgICAgcmVzdWx0LT5z
ZXRTdHJpbmcoIm5vdGVzIl9zLCBvdXRfbm90ZXMpOwotICAgICAgICByZXN1bHQtPnNldERvdWJs
ZSgidGltZXN0YW1wIl9zLCBvdXRfdGltZXN0YW1wKTsKLSAgICAgICAgcmVzdWx0LT5zZXRPYmpl
Y3QoInZhbHVlcyJfcywgb3V0X3ZhbHVlcyk7Ci0gICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoInBh
eWxvYWQiX3MsIG91dF9wYXlsb2FkKTsKLSAgICAgICAgcmVzdWx0LT5zZXRJbnRlZ2VyKCJkYXRh
YmFzZUlkIl9zLCBvdXRfZGF0YWJhc2VJZCk7Ci0gICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJz
cWxFcnJvciJfcywgb3V0X3NxbEVycm9yKTsKLSAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInNj
cmVlbkNvbG9yIl9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNv
bnN0YW50VmFsdWUob3V0X3NjcmVlbkNvbG9yKSk7Ci0gICAgICAgIHJlc3VsdC0+c2V0QXJyYXko
ImFsdGVybmF0ZUNvbG9ycyJfcywgb3V0X2FsdGVybmF0ZUNvbG9ycyk7Ci0gICAgICAgIHJlc3Vs
dC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVs
cGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUob3V0X3ByaW50Q29sb3IpKTsKLSAgICB9Ci0gICAg
aWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJl
c3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQotICAg
ICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNw
YXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAot
Ci0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4t
cGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2lu
Y2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBGcm9udGVuZFJvdXRlcjsKLQotfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNo
ZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2Fs
bC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0RnJvbnRlbmRE
aXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRl
bmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJ
bnNwZWN0b3IgewotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBU
ZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bE9iamVjdHMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdp
dGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotbmFtZXNwYWNlIFByb3Rv
Y29sIHsKLQotCi0KLS8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgotbmFtZXNwYWNlIERhdGFiYXNl
IHsKLWNsYXNzIEVycm9yOwotZW51bSBjbGFzcyBQcmltYXJ5Q29sb3JzOwotfSAvLyBEYXRhYmFz
ZQotLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgotCi0KLS8vIFR5cGVkZWZzLgotbmFt
ZXNwYWNlIERhdGFiYXNlIHsKLS8qIFVuaXF1ZSBpZGVudGlmaWVyIG9mIERhdGFiYXNlIG9iamVj
dC4gKi8KLXR5cGVkZWYgaW50IERhdGFiYXNlSWQ7Ci10eXBlZGVmIEpTT046OkFycmF5T2Y8SW5z
cGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IENvbG9yTGlzdDsKLX0g
Ly8gRGF0YWJhc2UKLS8vIEVuZCBvZiB0eXBlZGVmcy4KLQotbmFtZXNwYWNlIFRlc3RIZWxwZXJz
IHsKLQotU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKTsKLQotdGVtcGxhdGU8
dHlwZW5hbWUgVD4gU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKFQgZW51bVZhbHVlKQotewot
ICAgIHJldHVybiBnZXRFbnVtQ29uc3RhbnRWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KGVudW1WYWx1
ZSkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwotCi1uYW1lc3BhY2UgRGF0YWJh
c2UgewotLyogICovCi1lbnVtIGNsYXNzIFByaW1hcnlDb2xvcnMgewotICAgIFJlZCA9IDAsCi0g
ICAgR3JlZW4gPSAxLAotICAgIEJsdWUgPSAyLAotfTsgLy8gZW51bSBjbGFzcyBQcmltYXJ5Q29s
b3JzCi0vKiBEYXRhYmFzZSBlcnJvci4gKi8KLWNsYXNzIEVycm9yIDogcHVibGljIEpTT046Ok9i
amVjdEJhc2UgewotcHVibGljOgotICAgIGVudW0gewotICAgICAgICBOb0ZpZWxkc1NldCA9IDAs
Ci0gICAgICAgIE1lc3NhZ2VTZXQgPSAxIDw8IDAsCi0gICAgICAgIENvZGVTZXQgPSAxIDw8IDEs
Ci0gICAgICAgIEFsbEZpZWxkc1NldCA9IChNZXNzYWdlU2V0IHwgQ29kZVNldCkKLSAgICB9Owot
Ci0gICAgdGVtcGxhdGU8aW50IFNUQVRFPgotICAgIGNsYXNzIEJ1aWxkZXIgewotICAgIHByaXZh
dGU6Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVzdWx0OwotCi0gICAgICAgIHRl
bXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRF
IHwgU1RFUD4qPih0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXIoUmVmPC8qRXJy
b3IqL0pTT046Ok9iamVjdD4mJiBvYmplY3QpCi0gICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1v
dmUob2JqZWN0KSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUg
PT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgZnJpZW5kIGNsYXNzIEVycm9yOwotICAgIHB1YmxpYzoKLQotICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgTWVzc2FnZVNldD4mIHNldE1lc3NhZ2UoY29uc3QgU3RyaW5nJiB2
YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE1l
c3NhZ2VTZXQpLCBwcm9wZXJ0eV9tZXNzYWdlX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXRTdHJpbmcoIm1lc3NhZ2UiX3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVy
biBjYXN0U3RhdGU8TWVzc2FnZVNldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBDb2RlU2V0PiYgc2V0Q29kZShpbnQgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2RlU2V0KSwgcHJvcGVydHlfY29kZV9hbHJl
YWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcigiY29kZSJfcywgdmFs
dWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb2RlU2V0PigpOwotICAgICAgICB9
Ci0KLSAgICAgICAgUmVmPEVycm9yPiByZWxlYXNlKCkKLSAgICAgICAgewotICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5
KTsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihFcnJvcikgPT0gc2l6ZW9mKEpT
T046Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsKLQotICAgICAgICAgICAgUmVmPEpTT046Ok9iamVj
dD4ganNvblJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7Ci0gICAgICAgICAgICBh
dXRvIHJlc3VsdCA9IFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPEVycm9yPio+KCZqc29u
UmVzdWx0KSk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgfTsK
LQotICAgIC8qCi0gICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgotICAgICAqIFJlZjxFcnJv
cj4gcmVzdWx0ID0gRXJyb3I6OmNyZWF0ZSgpCi0gICAgICogICAgIC5zZXRNZXNzYWdlKC4uLikK
LSAgICAgKiAgICAgLnNldENvZGUoLi4uKQotICAgICAqICAgICAucmVsZWFzZSgpOwotICAgICAq
LwotICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOwot
ICAgIH0KLX07Ci0KLX0gLy8gRGF0YWJhc2UKLQotCi0KLW5hbWVzcGFjZSBUZXN0SGVscGVycyB7
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFByb3RvY29sRW51bVR5cGU+Ci1PcHRpb25hbDxQcm90b2Nv
bEVudW1UeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJik7Ci0KLS8v
IEVudW1zIGluIHRoZSAnRGF0YWJhc2UnIERvbWFpbgotdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5z
cGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IHBhcnNlRW51bVZhbHVl
RnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4o
Y29uc3QgU3RyaW5nJik7Ci0KLX0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCi0KLX0gLy8gbmFt
ZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi1uYW1lc3BhY2Ug
V1RGIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwotCi0vLyBI
YXNoIGRlY2xhcmF0aW9ucyBpbiB0aGUgJ0RhdGFiYXNlJyBEb21haW4KLXRlbXBsYXRlPD4KLXN0
cnVjdCBEZWZhdWx0SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNv
bG9ycz4gewotICAgIHR5cGVkZWYgSW50SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFz
ZTo6UHJpbWFyeUNvbG9ycz4gSGFzaDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbE9iamVjdHMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFu
ZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLQotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7
Ci0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLW5hbWVzcGFjZSBUZXN0SGVscGVycyB7Ci0KLXN0
YXRpYyBjb25zdCBjaGFyKiBjb25zdCBlbnVtX2NvbnN0YW50X3ZhbHVlc1tdID0gewotICAgICJy
ZWQiLAotICAgICJncmVlbiIsCi0gICAgImJsdWUiLAotICAgICJjeWFuIiwKLSAgICAibWFnZW50
YSIsCi0gICAgInllbGxvdyIsCi0gICAgImJsYWNrIiwKLX07Ci0KLVN0cmluZyBnZXRFbnVtQ29u
c3RhbnRWYWx1ZShpbnQgY29kZSkgewotICAgIHJldHVybiBlbnVtX2NvbnN0YW50X3ZhbHVlc1tj
b2RlXTsKLX0KLQotLy8gRW51bXMgaW4gdGhlICdEYXRhYmFzZScgRG9tYWluCi10ZW1wbGF0ZTw+
Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4g
cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQ
cmltYXJ5Q29sb3JzPihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQotewotICAgIHN0YXRp
YyBjb25zdCBzaXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsKLSAgICAgICAgKHNpemVfdClJbnNw
ZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9yczo6UmVkLAotICAgICAgICAo
c2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzOjpHcmVl
biwKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFy
eUNvbG9yczo6Qmx1ZSwKLSAgICB9OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMzsgKytp
KQotICAgICAgICBpZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29u
c3RhbnRWYWx1ZXNbaV1dKQotICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29s
OjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyljb25zdGFudFZhbHVlc1tpXTsKLQotICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7Ci19Ci0KLQotfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKLQotCi0K
LX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0j
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4K
LSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLUBwcm90b2NvbCBUZXN0UHJvdG9jb2xEYXRh
YmFzZURvbWFpbkhhbmRsZXI7Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLWNsYXNzIE9i
akNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVy
bmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwotcHVibGljOgotICAgIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
KGlkPFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVn
YXRlID0gaGFuZGxlcjsgfQotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlQWxsT3B0aW9uYWxQYXJh
bWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBjb25zdCBKU09OOjpBcnJheSogaW5fY29sdW1uTmFtZXMs
IGNvbnN0IFN0cmluZyogaW5fbm90ZXMsIGNvbnN0IGRvdWJsZSogaW5fdGltZXN0YW1wLCBjb25z
dCBKU09OOjpPYmplY3QqIGluX3ZhbHVlcywgY29uc3QgSlNPTjo6VmFsdWUqIGluX3BheWxvYWQs
IGNvbnN0IGludCogaW5fZGF0YWJhc2VJZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBpbl9zcWxFcnJv
ciwgY29uc3QgU3RyaW5nKiBpbl9zY3JlZW5Db2xvciwgY29uc3QgSlNPTjo6QXJyYXkqIGluX2Fs
dGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nKiBpbl9wcmludENvbG9yKSBvdmVycmlkZTsKLSAg
ICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElk
LCBjb25zdCBKU09OOjpBcnJheSYgaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgaW5fbm90
ZXMsIGRvdWJsZSBpbl90aW1lc3RhbXAsIGNvbnN0IEpTT046Ok9iamVjdCYgaW5fdmFsdWVzLCBK
U09OOjpWYWx1ZSBpbl9wYXlsb2FkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgSlNPTjo6T2Jq
ZWN0JiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nJiBpbl9zY3JlZW5Db2xvciwgY29uc3QgSlNP
Tjo6QXJyYXkmIGluX2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBpbl9wcmludENvbG9y
KSBvdmVycmlkZTsKLXByaXZhdGU6Ci0gICAgUmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbERhdGFi
YXNlRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAot
Ci0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxs
LXJldHVybi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNr
ZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0j
aW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW5jbHVkZSA8d3RmL0pT
T05WYWx1ZXMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXZvaWQgT2JqQ0luc3BlY3Rv
ckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMo
bG9uZyByZXF1ZXN0SWQsIGNvbnN0IEpTT046OkFycmF5KiBpbl9jb2x1bW5OYW1lcywgY29uc3Qg
U3RyaW5nKiBpbl9ub3RlcywgY29uc3QgZG91YmxlKiBpbl90aW1lc3RhbXAsIGNvbnN0IEpTT046
Ok9iamVjdCogaW5fdmFsdWVzLCBjb25zdCBKU09OOjpWYWx1ZSogaW5fcGF5bG9hZCwgY29uc3Qg
aW50KiBpbl9kYXRhYmFzZUlkLCBjb25zdCBKU09OOjpPYmplY3QqIGluX3NxbEVycm9yLCBjb25z
dCBTdHJpbmcqIGluX3NjcmVlbkNvbG9yLCBjb25zdCBKU09OOjpBcnJheSogaW5fYWx0ZXJuYXRl
Q29sb3JzLCBjb25zdCBTdHJpbmcqIGluX3ByaW50Q29sb3IpCi17Ci0gICAgaWYgKCFbbV9kZWxl
Z2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFt
ZXRlcnNXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6Y29sdW1uTmFtZXM6bm90ZXM6
dGltZXN0YW1wOnZhbHVlczpwYXlsb2FkOmRhdGFiYXNlSWQ6c3FsRXJyb3I6c2NyZWVuQ29sb3I6
YWx0ZXJuYXRlQ29sb3JzOnByaW50Q29sb3I6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpN
ZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS5leGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzJyB3
YXMgbm90IGZvdW5kIl9zKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRp
bmdFcnJvcnMoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlkIGVycm9yQ2FsbGJh
Y2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5y
ZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVy
cm9yLCBlcnJvcik7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJy
b3JzKCk7Ci0gICAgfTsKLQotICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oTlNBcnJheS8qPE5T
U3RyaW5nPiovICoqY29sdW1uTmFtZXMsIE5TU3RyaW5nICoqbm90ZXMsIGRvdWJsZSAqdGltZXN0
YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKip2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVj
dCAqKnBheWxvYWQsIGludCAqZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAq
KnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgKnNjcmVlbkNvbG9y
LCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERh
dGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IgKnByaW50Q29sb3Ip
IHsKLSAgICAgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFS
QU1FVEVSKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihub3RlcywgQCJub3RlcyIpOwotICAgICAg
ICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIodmFsdWVzLCBAInZh
bHVlcyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVU
RVIocGF5bG9hZCwgQCJwYXlsb2FkIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFE
X09QVElPTkFMX1BBUkFNRVRFUihzcWxFcnJvciwgQCJzcWxFcnJvciIpOwotICAgICAgICBUSFJP
V19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoYWx0ZXJuYXRlQ29sb3JzLCBA
ImFsdGVybmF0ZUNvbG9ycyIpOwotICAgICAgICBpZiAoY29sdW1uTmFtZXMpCi0gICAgICAgICAg
ICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgdG9KU09OU3RyaW5nQXJy
YXkoKmNvbHVtbk5hbWVzKSk7Ci0gICAgICAgIGlmIChub3RlcykKLSAgICAgICAgICAgIHJlc3Vs
dE9iamVjdC0+c2V0U3RyaW5nKCJub3RlcyJfcywgKm5vdGVzKTsKLSAgICAgICAgaWYgKHRpbWVz
dGFtcCkKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3Ms
ICp0aW1lc3RhbXApOwotICAgICAgICBpZiAodmFsdWVzKQotICAgICAgICAgICAgcmVzdWx0T2Jq
ZWN0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgWyp2YWx1ZXMgdG9KU09OT2JqZWN0XSk7Ci0gICAg
ICAgIGlmIChwYXlsb2FkKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRWYWx1ZSgicGF5
bG9hZCJfcywgWypwYXlsb2FkIHRvSlNPTk9iamVjdF0pOwotICAgICAgICBpZiAoZGF0YWJhc2VJ
ZCkKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywg
KmRhdGFiYXNlSWQpOwotICAgICAgICBpZiAoc3FsRXJyb3IpCi0gICAgICAgICAgICByZXN1bHRP
YmplY3QtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIFsqc3FsRXJyb3IgdG9KU09OT2JqZWN0XSk7
Ci0gICAgICAgIGlmIChzY3JlZW5Db2xvcikKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0
U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgdG9Qcm90b2NvbFN0cmluZygqc2NyZWVuQ29sb3IpKTsK
LSAgICAgICAgaWYgKGFsdGVybmF0ZUNvbG9ycykKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+
c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5nQXJyYXkoKmFsdGVybmF0
ZUNvbG9ycykpOwotICAgICAgICBpZiAocHJpbnRDb2xvcikKLSAgICAgICAgICAgIHJlc3VsdE9i
amVjdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKCpwcmludENv
bG9yKSk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0
SWQsIFdURk1vdmUocmVzdWx0T2JqZWN0KSwgZmFsc2UpOwotICAgIH07Ci0KLSAgICBOU0FycmF5
Lyo8TlNTdHJpbmc+Ki8gKm9faW5fY29sdW1uTmFtZXM7Ci0gICAgaWYgKGluX2NvbHVtbk5hbWVz
KQotICAgICAgICBvX2luX2NvbHVtbk5hbWVzID0gdG9PYmpDU3RyaW5nQXJyYXkoaW5fY29sdW1u
TmFtZXMpOwotICAgIE5TU3RyaW5nICpvX2luX25vdGVzOwotICAgIGlmIChpbl9ub3RlcykKLSAg
ICAgICAgb19pbl9ub3RlcyA9ICppbl9ub3RlczsKLSAgICBkb3VibGUgb19pbl90aW1lc3RhbXA7
Ci0gICAgaWYgKGluX3RpbWVzdGFtcCkKLSAgICAgICAgb19pbl90aW1lc3RhbXAgPSAqaW5fdGlt
ZXN0YW1wOwotICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb19pbl92YWx1ZXM7Ci0gICAgaWYg
KGluX3ZhbHVlcykKLSAgICAgICAgb19pbl92YWx1ZXMgPSBbW1tSV0lQcm90b2NvbEpTT05PYmpl
Y3QgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDppbl92YWx1ZXNdIGF1dG9yZWxlYXNlXTsKLSAg
ICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9faW5fcGF5bG9hZDsKLSAgICBpZiAoaW5fcGF5bG9h
ZCkKLSAgICAgICAgb19pbl9wYXlsb2FkID0gW1tbUldJUHJvdG9jb2xKU09OT2JqZWN0IGFsbG9j
XSBpbml0V2l0aEpTT05PYmplY3Q6aW5fcGF5bG9hZF0gYXV0b3JlbGVhc2VdOwotICAgIGludCBv
X2luX2RhdGFiYXNlSWQ7Ci0gICAgaWYgKGluX2RhdGFiYXNlSWQpCi0gICAgICAgIG9faW5fZGF0
YWJhc2VJZCA9ICppbl9kYXRhYmFzZUlkOwotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3Ig
Km9faW5fc3FsRXJyb3I7Ci0gICAgaWYgKGluX3NxbEVycm9yKQotICAgICAgICBvX2luX3NxbEVy
cm9yID0gW1tbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBhbGxvY10gaW5pdFdpdGhKU09OT2Jq
ZWN0OmluX3NxbEVycm9yXSBhdXRvcmVsZWFzZV07Ci0gICAgT3B0aW9uYWw8VGVzdFByb3RvY29s
RGF0YWJhc2VQcmltYXJ5Q29sb3JzPiBvX2luX3NjcmVlbkNvbG9yOwotICAgIGlmIChpbl9zY3Jl
ZW5Db2xvcikKLSAgICAgICAgb19pbl9zY3JlZW5Db2xvciA9IGZyb21Qcm90b2NvbFN0cmluZzxU
ZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnM+KCppbl9zY3JlZW5Db2xvcik7Ci0gICAg
TlNBcnJheS8qPE5TU3RyaW5nPiovICpvX2luX2FsdGVybmF0ZUNvbG9yczsKLSAgICBpZiAoaW5f
YWx0ZXJuYXRlQ29sb3JzKQotICAgICAgICBvX2luX2FsdGVybmF0ZUNvbG9ycyA9IHRvT2JqQ1N0
cmluZ0FycmF5KGluX2FsdGVybmF0ZUNvbG9ycyk7Ci0gICAgT3B0aW9uYWw8VGVzdFByb3RvY29s
RGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvcj4gb19pbl9wcmlu
dENvbG9yOwotICAgIGlmIChpbl9wcmludENvbG9yKQotICAgICAgICBvX2luX3ByaW50Q29sb3Ig
PSBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9u
YWxQYXJhbWV0ZXJzUHJpbnRDb2xvcj4oKmluX3ByaW50Q29sb3IpOwotCi0gICAgW21fZGVsZWdh
dGUgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1dpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2Fs
bGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjayBjb2x1bW5OYW1lczooaW5fY29s
dW1uTmFtZXMgPyAmb19pbl9jb2x1bW5OYW1lcyA6IG5pbCkgbm90ZXM6KGluX25vdGVzID8gJm9f
aW5fbm90ZXMgOiBuaWwpIHRpbWVzdGFtcDooaW5fdGltZXN0YW1wID8gJm9faW5fdGltZXN0YW1w
IDogbmlsKSB2YWx1ZXM6KGluX3ZhbHVlcyA/ICZvX2luX3ZhbHVlcyA6IG5pbCkgcGF5bG9hZDoo
aW5fcGF5bG9hZCA/ICZvX2luX3BheWxvYWQgOiBuaWwpIGRhdGFiYXNlSWQ6KGluX2RhdGFiYXNl
SWQgPyAmb19pbl9kYXRhYmFzZUlkIDogbmlsKSBzcWxFcnJvcjooaW5fc3FsRXJyb3IgPyAmb19p
bl9zcWxFcnJvciA6IG5pbCkgc2NyZWVuQ29sb3I6KGluX3NjcmVlbkNvbG9yID8gJm9faW5fc2Ny
ZWVuQ29sb3IudmFsdWUoKSA6IG5pbCkgYWx0ZXJuYXRlQ29sb3JzOihpbl9hbHRlcm5hdGVDb2xv
cnMgPyAmb19pbl9hbHRlcm5hdGVDb2xvcnMgOiBuaWwpIHByaW50Q29sb3I6KGluX3ByaW50Q29s
b3IgPyAmb19pbl9wcmludENvbG9yLnZhbHVlKCkgOiBuaWwpXTsKLX0KLQotdm9pZCBPYmpDSW5z
cGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0
ZXJzKGxvbmcgcmVxdWVzdElkLCBjb25zdCBKU09OOjpBcnJheSYgaW5fY29sdW1uTmFtZXMsIGNv
bnN0IFN0cmluZyYgaW5fbm90ZXMsIGRvdWJsZSBpbl90aW1lc3RhbXAsIGNvbnN0IEpTT046Ok9i
amVjdCYgaW5fdmFsdWVzLCBKU09OOjpWYWx1ZSBpbl9wYXlsb2FkLCBpbnQgaW5fZGF0YWJhc2VJ
ZCwgY29uc3QgSlNPTjo6T2JqZWN0JiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nJiBpbl9zY3Jl
ZW5Db2xvciwgY29uc3QgSlNPTjo6QXJyYXkmIGluX2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3Ry
aW5nJiBpbl9wcmludENvbG9yKQotewotICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1Nl
bGVjdG9yOkBzZWxlY3RvcihleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNXaXRoRXJyb3JDYWxs
YmFjazpzdWNjZXNzQ2FsbGJhY2s6Y29sdW1uTmFtZXM6bm90ZXM6dGltZXN0YW1wOnZhbHVlczpw
YXlsb2FkOmRhdGFiYXNlSWQ6c3FsRXJyb3I6c2NyZWVuQ29sb3I6YWx0ZXJuYXRlQ29sb3JzOnBy
aW50Q29sb3I6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9j
b2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidE
YXRhYmFzZS5leGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMnIHdhcyBub3QgZm91bmQiX3MpOwot
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVy
cm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3Io
cmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKLSAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICB9OwotCi0g
ICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmNvbHVtbk5h
bWVzLCBOU1N0cmluZyAqbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9i
amVjdCAqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnBheWxvYWQsIGludCBkYXRhYmFz
ZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0
YWJhc2VQcmltYXJ5Q29sb3JzIHNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmFs
dGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFt
ZXRlcnNQcmludENvbG9yIHByaW50Q29sb3IpIHsKLSAgICAgICAgUmVmPEpTT046Ok9iamVjdD4g
cmVzdWx0T2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICAgICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoY29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMi
KTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIobm90ZXMs
IEAibm90ZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVU
RVIodmFsdWVzLCBAInZhbHVlcyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJ
UkVEX1BBUkFNRVRFUihwYXlsb2FkLCBAInBheWxvYWQiKTsKLSAgICAgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoc3FsRXJyb3IsIEAic3FsRXJyb3IiKTsKLSAgICAg
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoYWx0ZXJuYXRlQ29sb3Jz
LCBAImFsdGVybmF0ZUNvbG9ycyIpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJj
b2x1bW5OYW1lcyJfcywgdG9KU09OU3RyaW5nQXJyYXkoY29sdW1uTmFtZXMpKTsKLSAgICAgICAg
cmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBub3Rlcyk7Ci0gICAgICAgIHJlc3Vs
dE9iamVjdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIHRpbWVzdGFtcCk7Ci0gICAgICAgIHJl
c3VsdE9iamVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFt2YWx1ZXMgdG9KU09OT2JqZWN0XSk7
Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFtwYXlsb2FkIHRv
SlNPTk9iamVjdF0pOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldEludGVnZXIoImRhdGFiYXNl
SWQiX3MsIGRhdGFiYXNlSWQpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdCgic3Fs
RXJyb3IiX3MsIFtzcWxFcnJvciB0b0pTT05PYmplY3RdKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0
LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKHNjcmVlbkNvbG9y
KSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywg
dG9KU09OU3RyaW5nQXJyYXkoYWx0ZXJuYXRlQ29sb3JzKSk7Ci0gICAgICAgIHJlc3VsdE9iamVj
dC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKHByaW50Q29sb3Ip
KTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwg
V1RGTW92ZShyZXN1bHRPYmplY3QpLCBmYWxzZSk7Ci0gICAgfTsKLQotICAgIE5TQXJyYXkvKjxO
U1N0cmluZz4qLyAqb19pbl9jb2x1bW5OYW1lcyA9IHRvT2JqQ1N0cmluZ0FycmF5KCZpbl9jb2x1
bW5OYW1lcyk7Ci0gICAgTlNTdHJpbmcgKm9faW5fbm90ZXMgPSBpbl9ub3RlczsKLSAgICBkb3Vi
bGUgb19pbl90aW1lc3RhbXAgPSBpbl90aW1lc3RhbXA7Ci0gICAgUldJUHJvdG9jb2xKU09OT2Jq
ZWN0ICpvX2luX3ZhbHVlcyA9IFtbW1JXSVByb3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5pdFdp
dGhKU09OT2JqZWN0OiZpbl92YWx1ZXNdIGF1dG9yZWxlYXNlXTsKLSAgICBSV0lQcm90b2NvbEpT
T05PYmplY3QgKm9faW5fcGF5bG9hZCA9IFtbW1JXSVByb3RvY29sSlNPTk9iamVjdCBhbGxvY10g
aW5pdFdpdGhKU09OT2JqZWN0OiZpbl9wYXlsb2FkXSBhdXRvcmVsZWFzZV07Ci0gICAgaW50IG9f
aW5fZGF0YWJhc2VJZCA9IGluX2RhdGFiYXNlSWQ7Ci0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VF
cnJvciAqb19pbl9zcWxFcnJvciA9IFtbW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgYWxsb2Nd
IGluaXRXaXRoSlNPTk9iamVjdDomaW5fc3FsRXJyb3JdIGF1dG9yZWxlYXNlXTsKLSAgICBPcHRp
b25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnM+IG9faW5fc2NyZWVuQ29sb3Ig
PSBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzPihp
bl9zY3JlZW5Db2xvcik7Ci0gICAgaWYgKCFvX2luX3NjcmVlbkNvbG9yKSB7Ci0gICAgICAgIGJh
Y2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6
OkludmFsaWRQYXJhbXMsICJQYXJhbWV0ZXIgJ3NjcmVlbkNvbG9yJyBvZiBtZXRob2QgJ0RhdGFi
YXNlLmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycycgY2Fubm90IGJlIHByb2Nlc3NlZCJfcyk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgTlNBcnJheS8qPE5TU3RyaW5nPiovICpvX2lu
X2FsdGVybmF0ZUNvbG9ycyA9IHRvT2JqQ1N0cmluZ0FycmF5KCZpbl9hbHRlcm5hdGVDb2xvcnMp
OwotICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJh
bWV0ZXJzUHJpbnRDb2xvcj4gb19pbl9wcmludENvbG9yID0gZnJvbVByb3RvY29sU3RyaW5nPFRl
c3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvcj4o
aW5fcHJpbnRDb2xvcik7Ci0gICAgaWYgKCFvX2luX3ByaW50Q29sb3IpIHsKLSAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6
SW52YWxpZFBhcmFtcywgIlBhcmFtZXRlciAncHJpbnRDb2xvcicgb2YgbWV0aG9kICdEYXRhYmFz
ZS5leGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMnIGNhbm5vdCBiZSBwcm9jZXNzZWQiX3MpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgW21fZGVsZWdhdGUgZXhlY3V0ZU5vT3B0aW9u
YWxQYXJhbWV0ZXJzV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJh
Y2s6c3VjY2Vzc0NhbGxiYWNrIGNvbHVtbk5hbWVzOm9faW5fY29sdW1uTmFtZXMgbm90ZXM6b19p
bl9ub3RlcyB0aW1lc3RhbXA6b19pbl90aW1lc3RhbXAgdmFsdWVzOm9faW5fdmFsdWVzIHBheWxv
YWQ6b19pbl9wYXlsb2FkIGRhdGFiYXNlSWQ6b19pbl9kYXRhYmFzZUlkIHNxbEVycm9yOm9faW5f
c3FsRXJyb3Igc2NyZWVuQ29sb3I6b19pbl9zY3JlZW5Db2xvci52YWx1ZSgpIGFsdGVybmF0ZUNv
bG9yczpvX2luX2FsdGVybmF0ZUNvbG9ycyBwcmludENvbG9yOm9faW5fcHJpbnRDb2xvci52YWx1
ZSgpXTsKLX0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24uaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPFdlYkluc3Bl
Y3Rvci9UZXN0UHJvdG9jb2wuaD4KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1
bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAot
QHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNldERhdGFiYXNlSGFuZGxlcjop
IGlkPFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4gZGF0YWJhc2VIYW5kbGVyOwot
QGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0KLSMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1w
YXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgotCi0jaW1wb3J0ICJUZXN0
UHJvdG9jb2xJbnRlcm5hbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNo
ZXJzLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2Vu
dC5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9s
bGVyLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5k
RGlzcGF0Y2hlcnMuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVycy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW1wbGVtZW50
YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVj
dG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci0gICAgaWQ8VGVzdFByb3RvY29sRGF0YWJhc2VE
b21haW5IYW5kbGVyPiBfZGF0YWJhc2VIYW5kbGVyOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xs
ZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAg
cmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRyb2xsZXIgPSBj
b250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAg
ICBbX2RhdGFiYXNlSGFuZGxlciByZWxlYXNlXTsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0K
LS0gKHZvaWQpc2V0RGF0YWJhc2VIYW5kbGVyOihpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFp
bkhhbmRsZXI+KWhhbmRsZXIKLXsKLSAgICBpZiAoaGFuZGxlciA9PSBfZGF0YWJhc2VIYW5kbGVy
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBbX2RhdGFiYXNlSGFuZGxlciByZWxlYXNlXTsKLSAg
ICBfZGF0YWJhc2VIYW5kbGVyID0gW2hhbmRsZXIgcmV0YWluXTsKLQotICAgIGF1dG8gYWx0ZXJu
YXRlRGlzcGF0Y2hlciA9IG1ha2VVbmlxdWU8T2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXI+KGhhbmRsZXIpOwotICAgIGF1dG8gYWx0ZXJuYXRlQWdlbnQgPSBtYWtlVW5pcXVl
PEFsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50PERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIsIEFs
dGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+PigiRGF0YWJhc2UiX3MsICpfY29udHJv
bGxlciwgV1RGTW92ZShhbHRlcm5hdGVEaXNwYXRjaGVyKSk7Ci0gICAgX2NvbnRyb2xsZXItPmFw
cGVuZEV4dHJhQWdlbnQoV1RGTW92ZShhbHRlcm5hdGVBZ2VudCkpOwotfQotCi0tIChpZDxUZXN0
UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+KWRhdGFiYXNlSGFuZGxlcgotewotICAgIHJl
dHVybiBfZGF0YWJhc2VIYW5kbGVyOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xF
dmVudERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29t
bWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29s
SW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0j
aW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwot
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxGb3Vu
ZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29s
SlNPTk9iamVjdC5oPgotCi0KLUBjbGFzcyBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yOwotCi10
eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xQbGF0Zm9ybSkgewotICAgIFRl
c3RQcm90b2NvbFBsYXRmb3JtQWxsLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYywK
LSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1h
Y09TLAotfTsKLQotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xEYXRh
YmFzZVByaW1hcnlDb2xvcnMpIHsKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xv
cnNSZWQsCi0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzR3JlZW4sCi0gICAg
VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzQmx1ZSwKLX07Ci0KLXR5cGVkZWYgTlNf
RU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFy
YW1ldGVyc1ByaW50Q29sb3IpIHsKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxP
cHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQ3lhbiwKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFz
ZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yTWFnZW50YSwKLSAgICBUZXN0
UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yWWVs
bG93LAotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVy
c1ByaW50Q29sb3JCbGFjaywKLX07Ci0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQ
cm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IpIHsK
LSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmlu
dENvbG9yQ3lhbiwKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBh
cmFtZXRlcnNQcmludENvbG9yTWFnZW50YSwKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yWWVsbG93LAotICAgIFRlc3RQcm90b2Nv
bERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JCbGFjaywKLX07
Ci0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0
ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvcikgewotICAgIFRlc3RQcm90b2NvbERhdGFi
YXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckN5YW4sCi0gICAgVGVzdFBy
b3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yTWFnZW50
YSwKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1By
aW50Q29sb3JZZWxsb3csCi0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25h
bFBhcmFtZXRlcnNQcmludENvbG9yQmxhY2ssCi19OwotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRl
Z2VyLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50
Q29sb3IpIHsKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1l
dGVyc1ByaW50Q29sb3JDeWFuLAotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0
aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvck1hZ2VudGEsCi0gICAgVGVzdFByb3RvY29sRGF0YWJh
c2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yWWVsbG93LAotICAgIFRlc3RQ
cm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckJsYWNr
LAotfTsKLQotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRl
cmZhY2UgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciA6IFJXSVByb3RvY29sSlNPTk9iamVjdAot
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICos
IGlkPiAqKXBheWxvYWQ7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDoo
UldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKLS0gKGluc3RhbmNldHlwZSlpbml0
V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBjb2RlOihpbnQpY29kZTsKLS8qIHJlcXVp
cmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqbWVzc2FnZTsKLS8q
IHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCBjb2RlOwotQGVu
ZAotCi1AcHJvdG9jb2wgVGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyIDxOU09iamVj
dD4KLUBvcHRpb25hbAotLSAodm9pZClleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzV2l0aEVy
cm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nl
c3NDYWxsYmFjazoodm9pZCheKShOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKipjb2x1bW5OYW1lcywg
TlNTdHJpbmcgKipub3RlcywgZG91YmxlICp0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVj
dCAqKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqcGF5bG9hZCwgaW50ICpkYXRhYmFz
ZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqc3FsRXJyb3IsIFRlc3RQcm90b2NvbERh
dGFiYXNlUHJpbWFyeUNvbG9ycyAqc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAq
KmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQ
YXJhbWV0ZXJzUHJpbnRDb2xvciAqcHJpbnRDb2xvcikpc3VjY2Vzc0NhbGxiYWNrIGNvbHVtbk5h
bWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopY29sdW1uTmFtZXMgbm90ZXM6KE5TU3RyaW5n
ICoqKW5vdGVzIHRpbWVzdGFtcDooZG91YmxlICopdGltZXN0YW1wIHZhbHVlczooUldJUHJvdG9j
b2xKU09OT2JqZWN0ICoqKXZhbHVlcyBwYXlsb2FkOihSV0lQcm90b2NvbEpTT05PYmplY3QgKiop
cGF5bG9hZCBkYXRhYmFzZUlkOihpbnQgKilkYXRhYmFzZUlkIHNxbEVycm9yOihUZXN0UHJvdG9j
b2xEYXRhYmFzZUVycm9yICoqKXNxbEVycm9yIHNjcmVlbkNvbG9yOihUZXN0UHJvdG9jb2xEYXRh
YmFzZVByaW1hcnlDb2xvcnMgKilzY3JlZW5Db2xvciBhbHRlcm5hdGVDb2xvcnM6KE5TQXJyYXkv
KjxOU1N0cmluZz4qLyAqKilhbHRlcm5hdGVDb2xvcnMgcHJpbnRDb2xvcjooVGVzdFByb3RvY29s
RGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvciAqKXByaW50Q29s
b3I7Ci0tICh2b2lkKWV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1dpdGhFcnJvckNhbGxiYWNr
Oih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6
KHZvaWQoXikoTlNBcnJheS8qPE5TU3RyaW5nPiovICpjb2x1bW5OYW1lcywgTlNTdHJpbmcgKm5v
dGVzLCBkb3VibGUgdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnZhbHVlcywgUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgVGVzdFByb3RvY29s
RGF0YWJhc2VFcnJvciAqc3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9y
cyBzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICphbHRlcm5hdGVDb2xvcnMsIFRl
c3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvciBw
cmludENvbG9yKSlzdWNjZXNzQ2FsbGJhY2sgY29sdW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmlu
Zz4qLyAqKWNvbHVtbk5hbWVzIG5vdGVzOihOU1N0cmluZyAqKW5vdGVzIHRpbWVzdGFtcDooZG91
YmxlKXRpbWVzdGFtcCB2YWx1ZXM6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcyBwYXls
b2FkOihSV0lQcm90b2NvbEpTT05PYmplY3QgKilwYXlsb2FkIGRhdGFiYXNlSWQ6KGludClkYXRh
YmFzZUlkIHNxbEVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICopc3FsRXJyb3Igc2Ny
ZWVuQ29sb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycylzY3JlZW5Db2xvciBh
bHRlcm5hdGVDb2xvcnM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWFsdGVybmF0ZUNvbG9ycyBw
cmludENvbG9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVy
c1ByaW50Q29sb3IpcHJpbnRDb2xvcjsKLUBlbmQKLQotCi0KLQotI2ltcG9ydCA8V2ViSW5zcGVj
dG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgotCi0jIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5h
bC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRp
b25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJU
ZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVl
cy5oPgotCi0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1w
YXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJv
dG9jb2xBcnJheUNvbnZlcnNpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+Ci1PcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Q
cm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKLQotaW5saW5lIFN0cmluZyB0b1By
b3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFBsYXRmb3JtIHZhbHVlKQotewotICAgIHN3aXRjaCh2
YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1BbGw6Ci0gICAgICAgIHJldHVy
biAiYWxsIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOgotICAgICAg
ICByZXR1cm4gImdlbmVyaWMiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzoK
LSAgICAgICAgcmV0dXJuICJpb3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1h
Y09TOgotICAgICAgICByZXR1cm4gIm1hY29zIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8Pgot
aW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFBsYXRmb3JtPiBmcm9tUHJvdG9jb2xTdHJpbmco
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gImFsbCIpCi0gICAgICAg
IHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDsKLSAgICBpZiAodmFsdWUgPT0gImdlbmVy
aWMiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOwotICAgIGlm
ICh2YWx1ZSA9PSAiaW9zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9T
OwotICAgIGlmICh2YWx1ZSA9PSAibWFjb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29s
UGxhdGZvcm1NYWNPUzsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi0KLWlubGluZSBT
dHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMg
dmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRh
YmFzZVByaW1hcnlDb2xvcnNSZWQ6Ci0gICAgICAgIHJldHVybiAicmVkIl9zOwotICAgIGNhc2Ug
VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzR3JlZW46Ci0gICAgICAgIHJldHVybiAi
Z3JlZW4iX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNCbHVl
OgotICAgICAgICByZXR1cm4gImJsdWUiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxp
bmUgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzPiBmcm9tUHJvdG9j
b2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gInJlZCIp
Ci0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNSZWQ7Ci0g
ICAgaWYgKHZhbHVlID09ICJncmVlbiIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRh
YmFzZVByaW1hcnlDb2xvcnNHcmVlbjsKLSAgICBpZiAodmFsdWUgPT0gImJsdWUiKQotICAgICAg
ICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzQmx1ZTsKLSAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwotfQotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVz
dFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvciB2
YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFi
YXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JDeWFuOgotICAgICAgICBy
ZXR1cm4gImN5YW4iX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxP
cHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yTWFnZW50YToKLSAgICAgICAgcmV0dXJuICJtYWdl
bnRhIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQ
YXJhbWV0ZXJzUHJpbnRDb2xvclllbGxvdzoKLSAgICAgICAgcmV0dXJuICJ5ZWxsb3ciX3M7Ci0g
ICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQ
cmludENvbG9yQmxhY2s6Ci0gICAgICAgIHJldHVybiAiYmxhY2siX3M7Ci0gICAgfQotfQotCi10
ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxs
T3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvcj4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0
cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJjeWFuIikKLSAgICAgICAgcmV0dXJu
IFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29s
b3JDeWFuOwotICAgIGlmICh2YWx1ZSA9PSAibWFnZW50YSIpCi0gICAgICAgIHJldHVybiBUZXN0
UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yTWFn
ZW50YTsKLSAgICBpZiAodmFsdWUgPT0gInllbGxvdyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJv
dG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yWWVsbG93
OwotICAgIGlmICh2YWx1ZSA9PSAiYmxhY2siKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29s
RGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckJsYWNrOwotICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmlu
ZyhUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENv
bG9yIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29s
RGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckN5YW46Ci0gICAg
ICAgIHJldHVybiAiY3lhbiJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0
ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JNYWdlbnRhOgotICAgICAgICByZXR1cm4g
Im1hZ2VudGEiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRp
b25hbFBhcmFtZXRlcnNQcmludENvbG9yWWVsbG93OgotICAgICAgICByZXR1cm4gInllbGxvdyJf
czsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1l
dGVyc1ByaW50Q29sb3JCbGFjazoKLSAgICAgICAgcmV0dXJuICJibGFjayJfczsKLSAgICB9Ci19
Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gImN5YW4iKQotICAgICAgICBy
ZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJp
bnRDb2xvckN5YW47Ci0gICAgaWYgKHZhbHVlID09ICJtYWdlbnRhIikKLSAgICAgICAgcmV0dXJu
IFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29s
b3JNYWdlbnRhOwotICAgIGlmICh2YWx1ZSA9PSAieWVsbG93IikKLSAgICAgICAgcmV0dXJuIFRl
c3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JZ
ZWxsb3c7Ci0gICAgaWYgKHZhbHVlID09ICJibGFjayIpCi0gICAgICAgIHJldHVybiBUZXN0UHJv
dG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQmxhY2s7
Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29s
U3RyaW5nKFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJp
bnRDb2xvciB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQcm90
b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckN5YW46Ci0g
ICAgICAgIHJldHVybiAiY3lhbiJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhl
Y3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvck1hZ2VudGE6Ci0gICAgICAgIHJldHVy
biAibWFnZW50YSJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0
aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvclllbGxvdzoKLSAgICAgICAgcmV0dXJuICJ5ZWxsb3ci
X3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1l
dGVyc1ByaW50Q29sb3JCbGFjazoKLSAgICAgICAgcmV0dXJuICJibGFjayJfczsKLSAgICB9Ci19
Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3I+IGZyb21Qcm90b2NvbFN0cmluZyhjb25z
dCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiY3lhbiIpCi0gICAgICAgIHJl
dHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50
Q29sb3JDeWFuOwotICAgIGlmICh2YWx1ZSA9PSAibWFnZW50YSIpCi0gICAgICAgIHJldHVybiBU
ZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JN
YWdlbnRhOwotICAgIGlmICh2YWx1ZSA9PSAieWVsbG93IikKLSAgICAgICAgcmV0dXJuIFRlc3RQ
cm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvclllbGxv
dzsKLSAgICBpZiAodmFsdWUgPT0gImJsYWNrIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2Nv
bERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckJsYWNrOwotICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmlu
ZyhUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29s
b3IgdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xE
YXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JDeWFuOgotICAgICAg
ICByZXR1cm4gImN5YW4iX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVO
b09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JNYWdlbnRhOgotICAgICAgICByZXR1cm4gIm1h
Z2VudGEiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFs
UGFyYW1ldGVyc1ByaW50Q29sb3JZZWxsb3c6Ci0gICAgICAgIHJldHVybiAieWVsbG93Il9zOwot
ICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQ
cmludENvbG9yQmxhY2s6Ci0gICAgICAgIHJldHVybiAiYmxhY2siX3M7Ci0gICAgfQotfQotCi10
ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9P
cHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gImN5YW4iKQotICAgICAgICByZXR1cm4g
VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9y
Q3lhbjsKLSAgICBpZiAodmFsdWUgPT0gIm1hZ2VudGEiKQotICAgICAgICByZXR1cm4gVGVzdFBy
b3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yTWFnZW50
YTsKLSAgICBpZiAodmFsdWUgPT0gInllbGxvdyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9j
b2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JZZWxsb3c7Ci0g
ICAgaWYgKHZhbHVlID09ICJibGFjayIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRh
YmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JCbGFjazsKLSAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAi
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5o
IgotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgotI2ltcG9ydCA8V2ViSW5zcGVj
dG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLQotdXNpbmcgbmFtZXNwYWNlIElu
c3BlY3RvcjsKLQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKERhdGFi
YXNlRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZURhdGFiYXNlSWQ6KE5TTnVtYmVyICoqKW91dFZh
bHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotKyAodm9pZClfcGFyc2VQcmltYXJ5Q29sb3Jz
OihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLSsgKHZvaWQp
X3BhcnNlQ29sb3JMaXN0OihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopb3V0VmFsdWUgZnJvbVBh
eWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZUVycm9yOihUZXN0UHJvdG9jb2xEYXRh
YmFzZUVycm9yICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotCi1AZW5kCi0K
LUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKERhdGFiYXNlRG9t
YWluKQotCi0rICh2b2lkKV9wYXJzZURhdGFiYXNlSWQ6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZy
b21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQ
RShwYXlsb2FkLCBbTlNOdW1iZXIgY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSAoTlNOdW1iZXIg
KilwYXlsb2FkOwotfQotCi0rICh2b2lkKV9wYXJzZVByaW1hcnlDb2xvcnM6KE5TTnVtYmVyICoq
KW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKLSAgICBPcHRpb25hbDxU
ZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnM+IHJlc3VsdCA9IEluc3BlY3Rvcjo6ZnJv
bVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycz4ocGF5bG9h
ZCk7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfRU5VTV9WQUxVRShyZXN1bHQsIEAiUHJp
bWFyeUNvbG9ycyIpOwotICAgICpvdXRWYWx1ZSA9IEAocmVzdWx0LnZhbHVlKCkpOwotfQotCi0r
ICh2b2lkKV9wYXJzZUNvbG9yTGlzdDooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKW91dFZhbHVl
IGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURf
VFlQRShwYXlsb2FkLCBbTlNBcnJheS8qPE5TU3RyaW5nPiovIGNsYXNzXSk7Ci0gICAgKm91dFZh
bHVlID0gKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKXBheWxvYWQ7Ci19Ci0KLSsgKHZvaWQpX3Bh
cnNlRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKiopb3V0VmFsdWUgZnJvbVBheWxv
YWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxv
YWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2Nv
bERhdGFiYXNlRXJyb3IgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKLX0KLQotQGVu
ZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0KLSMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVy
cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBv
cnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucy5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVj
dFByaXZhdGUuaD4KLSNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW1wb3J0IDx3dGYvSlNP
TlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLUBpbXBsZW1lbnRh
dGlvbiBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yCi0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0
aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQK
LXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsK
LQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAIm1l
c3NhZ2UiXSwgQCJtZXNzYWdlIik7Ci0gICAgc2VsZi5tZXNzYWdlID0gcGF5bG9hZFtAIm1lc3Nh
Z2UiXTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9h
ZFtAImNvZGUiXSwgQCJjb2RlIik7Ci0gICAgc2VsZi5jb2RlID0gW3BheWxvYWRbQCJjb2RlIl0g
aW50ZWdlclZhbHVlXTsKLQotICAgIHJldHVybiBzZWxmOwotfQotLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9iamVjdAotewot
ICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmplY3QgdG9KU09O
T2JqZWN0XS5nZXQoKV0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgcmV0dXJuIHNlbGY7
Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2Fn
ZSBjb2RlOihpbnQpY29kZQotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAg
ICAgICByZXR1cm4gbmlsOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9Q
RVJUWShtZXNzYWdlLCBAIm1lc3NhZ2UiKTsKLQotICAgIHNlbGYubWVzc2FnZSA9IG1lc3NhZ2U7
Ci0gICAgc2VsZi5jb2RlID0gY29kZTsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lk
KXNldE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZQotewotICAgIFtzdXBlciBzZXRTdHJpbmc6
bWVzc2FnZSBmb3JLZXk6QCJtZXNzYWdlIl07Ci19Ci0KLS0gKE5TU3RyaW5nICopbWVzc2FnZQot
ewotICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAibWVzc2FnZSJdOwotfQotCi0tICh2
b2lkKXNldENvZGU6KGludCljb2RlCi17Ci0gICAgW3N1cGVyIHNldEludGVnZXI6Y29kZSBmb3JL
ZXk6QCJjb2RlIl07Ci19Ci0KLS0gKGludCljb2RlCi17Ci0gICAgcmV0dXJuIFtzdXBlciBpbnRl
Z2VyRm9yS2V5OkAiY29kZSJdOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxh
dGZvcm0uanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5q
c29uLXJlc3VsdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDRjMGZlM2ZlM2MuLjAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24t
cmVzdWx0CisrKyAvZGV2L251bGwKQEAgLTEsODcwICswLDAgQEAKLSMjIyBCZWdpbiBGaWxlOiBJ
bnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0jIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRD
b21tYW5kcy5qcwotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0
aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKLSNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0KLW5hbWVzcGFjZSBJbnNw
ZWN0b3IgewotCi1jbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0g
ICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYg
ZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsg
fQotICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0
dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPEJh
Y2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwotfTsKLQotCi0KLQotfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKLSMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9y
bS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFn
bWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10eXBlZGVmIFN0
cmluZyBFcnJvclN0cmluZzsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVu
ZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
ZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVz
dEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1
ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
LQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotI2luY2x1ZGUg
IlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZp
bGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJv
bnRlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVm
aW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bE9iamVjdHMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgRnJvbnRl
bmRSb3V0ZXI7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0
RnJvbnRlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNw
YXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9u
cy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0RnJvbnRlbmRE
aXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRl
bmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJ
bnNwZWN0b3IgewotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBU
ZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bE9iamVjdHMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25z
LXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFt
ZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotCi0K
LQotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0KLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1u
YW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0
cy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5o
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMt
cGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXJzLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi0KLQotbmFtZXNwYWNlIElu
c3BlY3RvciB7Ci0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0
ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgIlRlc3RQcm90
b2NvbEludGVybmFsLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgi
Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0K
LX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJh
Y2tlbmREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbi5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMt
d2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+Ci0KLV9fYXR0
cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9j
b2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24uaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29u
ZmlndXJhdGlvbi5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRp
b25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgotCi0j
aW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFj
a2VuZERpc3BhdGNoZXJzLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNw
YXRjaGFibGVBZ2VudC5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNw
ZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwot
Ci1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgotewotICAgIEF1Z21l
bnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci19Ci0KLS0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciop
Y29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQot
ICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBfY29udHJv
bGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxv
YwotewotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sRXZlbnREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIK
LQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDx3dGYv
SlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLSMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0
aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotCi0jaW1w
b3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+Ci0KLQotCi0KLXR5cGVk
ZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbFBsYXRmb3JtKSB7Ci0gICAgVGVzdFBy
b3RvY29sUGxhdGZvcm1BbGwsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljLAotICAg
IFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1Ms
Ci19OwotCi0KLQotCi0KLQotCi0KLQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9j
b2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQg
IlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUu
aCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxl
ci5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotCi0KLQotIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRp
b25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0IDxXZWJJbnNw
ZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0
b3IgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+Ci1PcHRpb25hbDxPYmpDRW51
bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKLQotaW5saW5l
IFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFBsYXRmb3JtIHZhbHVlKQotewot
ICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1BbGw6Ci0g
ICAgICAgIHJldHVybiAiYWxsIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5l
cmljOgotICAgICAgICByZXR1cm4gImdlbmVyaWMiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQ
bGF0Zm9ybUlPUzoKLSAgICAgICAgcmV0dXJuICJpb3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9j
b2xQbGF0Zm9ybU1hY09TOgotICAgICAgICByZXR1cm4gIm1hY29zIl9zOwotICAgIH0KLX0KLQot
dGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFBsYXRmb3JtPiBmcm9tUHJv
dG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gImFs
bCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDsKLSAgICBpZiAodmFs
dWUgPT0gImdlbmVyaWMiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1HZW5l
cmljOwotICAgIGlmICh2YWx1ZSA9PSAiaW9zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2Nv
bFBsYXRmb3JtSU9TOwotICAgIGlmICh2YWx1ZSA9PSAibWFjb3MiKQotICAgICAgICByZXR1cm4g
VGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQot
Ci19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMt
d2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLQotI2lt
cG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgi
Ci0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgot
Ci11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLQotCi0KLQotIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbFR5cGVzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlv
bnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0
ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9S
V0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5o
PgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3Rv
cjsKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBl
Y3RlZC9kb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZG9tYWluLWRl
YnVnZ2FibGVUeXBlcy5qc29uLXJlc3VsdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
M2Q2NWIwNDQ3OGMuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2RvbWFpbi1kZWJ1Z2dhYmxlVHlw
ZXMuanNvbi1yZXN1bHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMDYzICswLDAgQEAKLSMjIyBCZWdp
biBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotLy8gRG9tYWluCi1JbnNwZWN0b3JCYWNrZW5k
LnJlZ2lzdGVyRG9tYWluKCJEb21haW4iLCBudWxsKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0
ZXJDb21tYW5kKCJEb21haW4uQ29tbWFuZCIsIG51bGwsIFtdLCBbXSk7Ci1JbnNwZWN0b3JCYWNr
ZW5kLnJlZ2lzdGVyRXZlbnQoIkRvbWFpbi5FdmVudCIsIG51bGwsIFtdKTsKLUluc3BlY3RvckJh
Y2tlbmQucmVnaXN0ZXJEb21haW5EaXNwYXRjaGVyID0gSW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rl
ckRpc3BhdGNoZXIuYmluZChJbnNwZWN0b3JCYWNrZW5kLCAiRG9tYWluIik7Ci1JbnNwZWN0b3JC
YWNrZW5kLmFjdGl2YXRlRG9tYWluKCJEb21haW4iLCBbIndlYi1wYWdlIl0pOwotIyMjIEVuZCBG
aWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMu
aCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5o
PgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0K
LW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hl
ciB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2Vu
ZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92
ZShkaXNwYXRjaGVyKTsgfQotICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hl
cigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KLXByaXZhdGU6
Ci0gICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwotfTsK
LQotCi1jbGFzcyBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+QWx0ZXJuYXRl
RG9tYWluQmFja2VuZERpc3BhdGNoZXIoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChs
b25nIGNhbGxJZCkgPSAwOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSNlbmRp
ZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSMjIyBFbmQgRmls
ZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBkb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xP
YmplY3RzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIElu
c3BlY3RvciB7Ci0KLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCi0jaWYgRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi1jbGFzcyBBbHRlcm5hdGVEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlcjsKLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKLQotY2xhc3MgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKLXB1Ymxp
YzoKLSAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChFcnJvclN0cmluZyYpID0gMDsKLXByb3RlY3Rl
ZDoKLSAgICB2aXJ0dWFsIH5Eb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKLX07Ci0K
LWNsYXNzIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRh
bEJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPERvbWFpbkJhY2tl
bmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBEb21haW5CYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXIqKTsKLSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25z
dCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBvdmVycmlkZTsK
LXByaXZhdGU6Ci0gICAgdm9pZCBDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6
T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQotcHVibGljOgotICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0Y2hlcihBbHRl
cm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2Fs
dGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9Ci1wcml2YXRlOgotICAg
IEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKiBtX2FsdGVybmF0ZURpc3BhdGNoZXIg
eyBudWxscHRyIH07Ci0jZW5kaWYKLXByaXZhdGU6Ci0gICAgRG9tYWluQmFja2VuZERpc3BhdGNo
ZXIoQmFja2VuZERpc3BhdGNoZXImLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsK
LSAgICBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQgeyBudWxscHRyIH07
Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tl
bmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJz
LmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxl
VHlwZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgot
Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNp
bmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2lmIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQotI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlz
cGF0Y2hlcnMuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotRG9tYWluQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+RG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCkg
eyB9Ci0KLVJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gRG9tYWluQmFja2VuZERpc3BhdGNo
ZXI6OmNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIERvbWFpbkJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgRG9tYWluQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIsIGFnZW50KSk7Ci19
Ci0KLURvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihCYWNr
ZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlciogYWdlbnQpCi0gICAgOiBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNr
ZW5kRGlzcGF0Y2hlcikKLSAgICAsIG1fYWdlbnQoYWdlbnQpCi17Ci0gICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKCJEb21haW4iX3MsIHRoaXMpOwot
fQotCi12b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJ
ZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKLXsK
LSAgICBSZWY8RG9tYWluQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwotCi0gICAg
UmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVyczsKLSAgICBtZXNzYWdlLT5nZXRPYmplY3Qo
InBhcmFtcyJfcywgcGFyYW1ldGVycyk7Ci0KLSAgICBpZiAobWV0aG9kID09ICJDb21tYW5kIikK
LSAgICAgICAgQ29tbWFuZChyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOwotICAgIGVs
c2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNr
ZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRG9tYWluLiIgKyBtZXRob2QgKyAiJyB3
YXMgbm90IGZvdW5kIik7Ci19Ci0KLXZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1h
bmQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCi17Ci0jaWYgRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0gICAgaWYgKG1fYWx0ZXJuYXRlRGlz
cGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPkNvbW1hbmQocmVxdWVz
dElkKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAgRXJyb3JTdHJpbmcg
ZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKLSAgICBtX2FnZW50LT5Db21tYW5kKGVycm9yKTsKLQotICAgIGlmICghZXJyb3IubGVu
Z3RoKCkpCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0
SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVy
RXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0K
LSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBkb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJv
dG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEZy
b250ZW5kUm91dGVyOwotCi1jbGFzcyBEb21haW5Gcm9udGVuZERpc3BhdGNoZXIgewotICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIERvbWFpbkZyb250ZW5kRGlzcGF0
Y2hlcihGcm9udGVuZFJvdXRlciYgZnJvbnRlbmRSb3V0ZXIpIDogbV9mcm9udGVuZFJvdXRlcihm
cm9udGVuZFJvdXRlcikgeyB9Ci0gICAgdm9pZCBFdmVudCgpOwotcHJpdmF0ZToKLSAgICBGcm9u
dGVuZFJvdXRlciYgbV9mcm9udGVuZFJvdXRlcjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXZvaWQgRG9tYWluRnJvbnRlbmREaXNwYXRj
aGVyOjpFdmVudCgpCi17Ci0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJf
cywgIkRvbWFpbi5FdmVudCJfcyk7Ci0KLSAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChq
c29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0
aW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLW5hbWVzcGFjZSBQcm90b2Nv
bCB7Ci0KLQotCi0KLQotCi0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbgotLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFs
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9y
IHsKLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29s
Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bE9iamVjdHMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0
Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dh
YmxlVHlwZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXJzLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi1AcHJvdG9jb2wgVGVzdFBy
b3RvY29sRG9tYWluRG9tYWluSGFuZGxlcjsKLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQot
Y2xhc3MgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGlj
IEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKLXB1YmxpYzoKLSAgICBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNo
ZXIoaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVn
YXRlID0gaGFuZGxlcjsgfQotICAgIHZpcnR1YWwgdm9pZCBDb21tYW5kKGxvbmcgcmVxdWVzdElk
KSBvdmVycmlkZTsKLXByaXZhdGU6Ci0gICAgUmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbERvbWFp
bkRvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLQot
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25m
aWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5j
bHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotCi1uYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKLQotdm9pZCBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXI6
OkNvbW1hbmQobG9uZyByZXF1ZXN0SWQpCi17Ci0gICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25k
c1RvU2VsZWN0b3I6QHNlbGVjdG9yKENvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2Fs
bGJhY2s6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xF
cnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21h
aW4uQ29tbWFuZCcgd2FzIG5vdCBmb3VuZCJfcyk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVy
KCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBp
ZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRj
aGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5z
ZW5kUGVuZGluZ0Vycm9ycygpOwotICAgIH07Ci0KLSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBe
ewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBK
U09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7Ci0gICAgfTsKLQotICAgIFttX2RlbGVnYXRl
IENvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpz
dWNjZXNzQ2FsbGJhY2tdOwotfQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJv
dG9jb2wuaD4KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50
ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAotQHByb3BlcnR5IChu
b25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNldERvbWFpbkhhbmRsZXI6KSBpZDxUZXN0UHJvdG9j
b2xEb21haW5Eb21haW5IYW5kbGVyPiBkb21haW5IYW5kbGVyOwotQHByb3BlcnR5IChub25hdG9t
aWMsIHJlYWRvbmx5KSBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKmRv
bWFpbkV2ZW50RGlzcGF0Y2hlcjsKLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24uaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJh
dGlvbi5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dh
YmxlVHlwZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCi0KLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbEludGVybmFsLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hl
cnMuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50
Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xs
ZXIuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmRE
aXNwYXRjaGVycy5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXJzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRh
dGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCi17Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0
b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKLSAgICBpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21h
aW5IYW5kbGVyPiBfZG9tYWluSGFuZGxlcjsKLSAgICBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5F
dmVudERpc3BhdGNoZXIgKl9kb21haW5FdmVudERpc3BhdGNoZXI7Ci19Ci0KLS0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciop
Y29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQot
ICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBfY29udHJv
bGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxv
YwotewotICAgIFtfZG9tYWluSGFuZGxlciByZWxlYXNlXTsKLSAgICBbX2RvbWFpbkV2ZW50RGlz
cGF0Y2hlciByZWxlYXNlXTsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLS0gKHZvaWQpc2V0
RG9tYWluSGFuZGxlcjooaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4paGFuZGxl
cgotewotICAgIGlmIChoYW5kbGVyID09IF9kb21haW5IYW5kbGVyKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBbX2RvbWFpbkhhbmRsZXIgcmVsZWFzZV07Ci0gICAgX2RvbWFpbkhhbmRsZXIgPSBb
aGFuZGxlciByZXRhaW5dOwotCi0gICAgYXV0byBhbHRlcm5hdGVEaXNwYXRjaGVyID0gbWFrZVVu
aXF1ZTxPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXI+KGhhbmRsZXIpOwotICAg
IGF1dG8gYWx0ZXJuYXRlQWdlbnQgPSBtYWtlVW5pcXVlPEFsdGVybmF0ZURpc3BhdGNoYWJsZUFn
ZW50PERvbWFpbkJhY2tlbmREaXNwYXRjaGVyLCBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0
Y2hlcj4+KCJEb21haW4iX3MsICpfY29udHJvbGxlciwgV1RGTW92ZShhbHRlcm5hdGVEaXNwYXRj
aGVyKSk7Ci0gICAgX2NvbnRyb2xsZXItPmFwcGVuZEV4dHJhQWdlbnQoV1RGTW92ZShhbHRlcm5h
dGVBZ2VudCkpOwotfQotCi0tIChpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPilk
b21haW5IYW5kbGVyCi17Ci0gICAgcmV0dXJuIF9kb21haW5IYW5kbGVyOwotfQotCi0tIChUZXN0
UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKilkb21haW5FdmVudERpc3BhdGNo
ZXIKLXsKLSAgICBpZiAoIV9kb21haW5FdmVudERpc3BhdGNoZXIpCi0gICAgICAgIF9kb21haW5F
dmVudERpc3BhdGNoZXIgPSBbW1Rlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hl
ciBhbGxvY10gaW5pdFdpdGhDb250cm9sbGVyOl9jb250cm9sbGVyXTsKLSAgICByZXR1cm4gX2Rv
bWFpbkV2ZW50RGlzcGF0Y2hlcjsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbi5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZl
bnREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFp
bi1kZWJ1Z2dhYmxlVHlwZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+
Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJv
dG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIKLXsKLSAgICBBdWdtZW50YWJsZUluc3Bl
Y3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIK
LXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0
dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250
cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKUV2ZW50Ci17Ci0gICAgY29u
c3QgRnJvbnRlbmRSb3V0ZXImIHJvdXRlciA9IF9jb250cm9sbGVyLT5mcm9udGVuZFJvdXRlcigp
OwotCi0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5F
dmVudCJfcyk7Ci0gICAgcm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5n
KCkpOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3Bh
dGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxGb3VuZGF0aW9u
L0ZvdW5kYXRpb24uaD4KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9i
amVjdC5oPgotCi0KLQotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xQ
bGF0Zm9ybSkgewotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsLAotICAgIFRlc3RQcm90b2Nv
bFBsYXRmb3JtR2VuZXJpYywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUywKLSAgICBUZXN0
UHJvdG9jb2xQbGF0Zm9ybU1hY09TLAotfTsKLQotCi0KLQotCi1AcHJvdG9jb2wgVGVzdFByb3Rv
Y29sRG9tYWluRG9tYWluSGFuZGxlciA8TlNPYmplY3Q+Ci1Ab3B0aW9uYWwKLS0gKHZvaWQpQ29t
bWFuZFdpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxs
YmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikodm9pZCkpc3VjY2Vzc0NhbGxiYWNrOwotQGVu
ZAotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2Ug
VGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyIDogTlNPYmplY3QKLS0gKHZv
aWQpRXZlbnQ7Ci1AZW5kCi0KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVp
bGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5o
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2Nv
bC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKLSNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9y
dCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xEb21haW5Eb21h
aW5FdmVudERpc3BhdGNoZXIgKFByaXZhdGUpCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250
cm9sbGVyOihJbnNwZWN0b3I6OkF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJv
bGxlcjsKLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLQot
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90
b2NvbC5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9u
cy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0Vu
dW1UeXBlPgotT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3Qg
U3RyaW5nJiB2YWx1ZSk7Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJv
dG9jb2xQbGF0Zm9ybSB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBjYXNlIFRl
c3RQcm90b2NvbFBsYXRmb3JtQWxsOgotICAgICAgICByZXR1cm4gImFsbCJfczsKLSAgICBjYXNl
IFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzoKLSAgICAgICAgcmV0dXJuICJnZW5lcmljIl9z
OwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1JT1M6Ci0gICAgICAgIHJldHVybiAiaW9z
Il9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzoKLSAgICAgICAgcmV0dXJu
ICJtYWNvcyJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0
UHJvdG9jb2xQbGF0Zm9ybT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUp
Ci17Ci0gICAgaWYgKHZhbHVlID09ICJhbGwiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29s
UGxhdGZvcm1BbGw7Ci0gICAgaWYgKHZhbHVlID09ICJnZW5lcmljIikKLSAgICAgICAgcmV0dXJu
IFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzsKLSAgICBpZiAodmFsdWUgPT0gImlvcyIpCi0g
ICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzsKLSAgICBpZiAodmFsdWUgPT0g
Im1hY29zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M7Ci0gICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJv
dG9jb2xUeXBlUGFyc2VyLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09O
T2JqZWN0UHJpdmF0ZS5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLQotCi0K
LQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgi
Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8V2Vi
SW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLSNpbXBvcnQgPHd0Zi9B
c3NlcnRpb25zLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yOwotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL2V4cGVjdGVkL2RvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dh
YmxlVHlwZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2RvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRv
bWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJlc3VsdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggY2MwOGFlOTljMmQuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2RvbWFpbi10YXJnZXRU
eXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJlc3VsdAorKysgL2Rldi9u
dWxsCkBAIC0xLDEwNjMgKzAsMCBAQAotIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRD
b21tYW5kcy5qcwotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJn
ZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLS8vIERvbWFpbgotSW5zcGVjdG9yQmFja2Vu
ZC5yZWdpc3RlckRvbWFpbigiRG9tYWluIiwgbnVsbCk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lz
dGVyQ29tbWFuZCgiRG9tYWluLkNvbW1hbmQiLCBbInBhZ2UiLCAid29ya2VyIl0sIFtdLCBbXSk7
Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnQoIkRvbWFpbi5FdmVudCIsIG51bGwsIFtd
KTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW5EaXNwYXRjaGVyID0gSW5zcGVjdG9y
QmFja2VuZC5yZWdpc3RlckRpc3BhdGNoZXIuYmluZChJbnNwZWN0b3JCYWNrZW5kLCAiRG9tYWlu
Iik7Ci1JbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJEb21haW4iLCBbInBhZ2UiXSk7
Ci0jIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVn
Z2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCi0jaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9y
IHsKLQotY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZv
aWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3Bh
dGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KLSAg
ICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBt
X2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Ci1wcml2YXRlOgotICAgIFJlZlB0cjxCYWNrZW5k
RGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKLX07Ci0KLQotY2xhc3MgQWx0ZXJuYXRl
RG9tYWluQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXIgewotcHVibGljOgotICAgIHZpcnR1YWwgfkFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRj
aGVyKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIENvbW1hbmQobG9uZyBjYWxsSWQpID0gMDsKLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVy
cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGUt
bWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJv
dG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNw
YWNlIEluc3BlY3RvciB7Ci0KLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCi0jaWYgRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi1jbGFzcyBBbHRlcm5hdGVEb21h
aW5CYWNrZW5kRGlzcGF0Y2hlcjsKLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKLQotY2xhc3MgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsK
LXB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChFcnJvclN0cmluZyYpID0gMDsKLXBy
b3RlY3RlZDoKLSAgICB2aXJ0dWFsIH5Eb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsK
LX07Ci0KLWNsYXNzIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBs
ZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPERvbWFp
bkJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElk
LCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBvdmVy
cmlkZTsKLXByaXZhdGU6Ci0gICAgdm9pZCBDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8
SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQotcHVibGljOgotICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0Y2hl
cihBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikg
eyBtX2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9Ci1wcml2YXRl
OgotICAgIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKiBtX2FsdGVybmF0ZURpc3Bh
dGNoZXIgeyBudWxscHRyIH07Ci0jZW5kaWYKLXByaXZhdGU6Ci0gICAgRG9tYWluQmFja2VuZERp
c3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIqKTsKLSAgICBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQgeyBudWxs
cHRyIH07Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVz
dEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3Bh
dGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJn
ZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+
Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0j
aW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgotI2VuZGlmCi0KLW5h
bWVzcGFjZSBJbnNwZWN0b3IgewotCi1Eb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5E
b21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KLQotUmVmPERvbWFpbkJhY2tlbmRE
aXNwYXRjaGVyPiBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEJhY2tlbmREaXNwYXRj
aGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBh
Z2VudCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEb21haW5CYWNrZW5kRGlzcGF0Y2hl
cihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKLX0KLQotRG9tYWluQmFja2VuZERpc3BhdGNo
ZXI6OkRvbWFpbkJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlz
cGF0Y2hlciwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKLSAgICA6IFN1
cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQotICAgICwgbV9h
Z2VudChhZ2VudCkKLXsKLSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNo
ZXJGb3JEb21haW4oIkRvbWFpbiJfcywgdGhpcyk7Ci19Ci0KLXZvaWQgRG9tYWluQmFja2VuZERp
c3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwg
UmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQotewotICAgIFJlZjxEb21haW5CYWNrZW5kRGlz
cGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7Ci0KLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJh
bWV0ZXJzOwotICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsK
LQotICAgIGlmIChtZXRob2QgPT0gIkNvbW1hbmQiKQotICAgICAgICBDb21tYW5kKHJlcXVlc3RJ
ZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNw
YXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RG
b3VuZCwgIidEb21haW4uIiArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKLX0KLQotdm9p
ZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVmUHRy
PEpTT046Ok9iamVjdD4mJikKLXsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKLSAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0
ZXJuYXRlRGlzcGF0Y2hlci0+Q29tbWFuZChyZXF1ZXN0SWQpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotI2VuZGlmCi0KLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2Jq
ZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIG1fYWdlbnQtPkNvbW1h
bmQoZXJyb3IpOwotCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxz
ZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2Nv
bEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOwot
fQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2Vu
ZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hl
cnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBl
LW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFBy
b3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBG
cm9udGVuZFJvdXRlcjsKLQotY2xhc3MgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVyIHsKLSAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBEb21haW5Gcm9udGVuZERpc3Bh
dGNoZXIoRnJvbnRlbmRSb3V0ZXImIGZyb250ZW5kUm91dGVyKSA6IG1fZnJvbnRlbmRSb3V0ZXIo
ZnJvbnRlbmRSb3V0ZXIpIHsgfQotICAgIHZvaWQgRXZlbnQoKTsKLXByaXZhdGU6Ci0gICAgRnJv
bnRlbmRSb3V0ZXImIG1fZnJvbnRlbmRSb3V0ZXI7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2Fi
bGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgi
Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0K
LXZvaWQgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVyOjpFdmVudCgpCi17Ci0gICAgUmVmPEpTT046
Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25N
ZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7Ci0KLSAgICBt
X2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwot
fQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMu
aAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlLW1h
dGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25z
Lmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotbmFtZXNwYWNlIFByb3RvY29sIHsK
LQotCi0KLQotCi0KLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2Fi
bGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLQot
I2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
LQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLQotCi19
IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUu
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+
Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi1AcHJvdG9jb2wgVGVzdFByb3RvY29sRG9t
YWluRG9tYWluSGFuZGxlcjsKLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotY2xhc3MgT2Jq
Q0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0
ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
LXB1YmxpYzoKLSAgICBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXIoaWQ8VGVz
dFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFu
ZGxlcjsgfQotICAgIHZpcnR1YWwgdm9pZCBDb21tYW5kKGxvbmcgcmVxdWVzdElkKSBvdmVycmlk
ZTsKLXByaXZhdGU6Ci0gICAgUmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhh
bmRsZXI+PiBtX2RlbGVnYXRlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1
Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3Bh
dGNoZXJzLmgiCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2luY2x1ZGUg
IlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVz
Lmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi12b2lkIE9iakNJbnNwZWN0b3JEb21haW5C
YWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVlc3RJZCkKLXsKLSAgICBpZiAoIVtt
X2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoQ29tbWFuZFdpdGhFcnJvckNh
bGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigp
LT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhv
ZE5vdEZvdW5kLCAiJ0RvbWFpbi5Db21tYW5kJyB3YXMgbm90IGZvdW5kIl9zKTsKLSAgICAgICAg
YmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewot
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJ
ZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7Ci0gICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgfTsKLQotICAgIGlkIHN1
Y2Nlc3NDYWxsYmFjayA9IF57Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNw
b25zZShyZXF1ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKLSAgICB9Owot
Ci0gICAgW21fZGVsZWdhdGUgQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sg
c3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107Ci19Ci0KLQotfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJz
Lm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1k
b21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+Ci0KLV9f
YXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJv
dG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRh
aW4sIHNldHRlcj1zZXREb21haW5IYW5kbGVyOikgaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWlu
SGFuZGxlcj4gZG9tYWluSGFuZGxlcjsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkg
VGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyICpkb21haW5FdmVudERpc3Bh
dGNoZXI7Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9u
LmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1k
b21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCi0KLSNp
bXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNr
ZW5kRGlzcGF0Y2hlcnMuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3Bh
dGNoYWJsZUFnZW50Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3Bl
Y3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVy
bmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0K
LUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCi17Ci0gICAgQXVnbWVu
dGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKLSAgICBpZDxUZXN0UHJvdG9j
b2xEb21haW5Eb21haW5IYW5kbGVyPiBfZG9tYWluSGFuZGxlcjsKLSAgICBUZXN0UHJvdG9jb2xE
b21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKl9kb21haW5FdmVudERpc3BhdGNoZXI7Ci19Ci0K
LS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9y
Q29udHJvbGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAg
aWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsK
LSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0g
KHZvaWQpZGVhbGxvYwotewotICAgIFtfZG9tYWluSGFuZGxlciByZWxlYXNlXTsKLSAgICBbX2Rv
bWFpbkV2ZW50RGlzcGF0Y2hlciByZWxlYXNlXTsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0K
LS0gKHZvaWQpc2V0RG9tYWluSGFuZGxlcjooaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFu
ZGxlcj4paGFuZGxlcgotewotICAgIGlmIChoYW5kbGVyID09IF9kb21haW5IYW5kbGVyKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBbX2RvbWFpbkhhbmRsZXIgcmVsZWFzZV07Ci0gICAgX2RvbWFp
bkhhbmRsZXIgPSBbaGFuZGxlciByZXRhaW5dOwotCi0gICAgYXV0byBhbHRlcm5hdGVEaXNwYXRj
aGVyID0gbWFrZVVuaXF1ZTxPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXI+KGhh
bmRsZXIpOwotICAgIGF1dG8gYWx0ZXJuYXRlQWdlbnQgPSBtYWtlVW5pcXVlPEFsdGVybmF0ZURp
c3BhdGNoYWJsZUFnZW50PERvbWFpbkJhY2tlbmREaXNwYXRjaGVyLCBBbHRlcm5hdGVEb21haW5C
YWNrZW5kRGlzcGF0Y2hlcj4+KCJEb21haW4iX3MsICpfY29udHJvbGxlciwgV1RGTW92ZShhbHRl
cm5hdGVEaXNwYXRjaGVyKSk7Ci0gICAgX2NvbnRyb2xsZXItPmFwcGVuZEV4dHJhQWdlbnQoV1RG
TW92ZShhbHRlcm5hdGVBZ2VudCkpOwotfQotCi0tIChpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21h
aW5IYW5kbGVyPilkb21haW5IYW5kbGVyCi17Ci0gICAgcmV0dXJuIF9kb21haW5IYW5kbGVyOwot
fQotCi0tIChUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKilkb21haW5F
dmVudERpc3BhdGNoZXIKLXsKLSAgICBpZiAoIV9kb21haW5FdmVudERpc3BhdGNoZXIpCi0gICAg
ICAgIF9kb21haW5FdmVudERpc3BhdGNoZXIgPSBbW1Rlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2
ZW50RGlzcGF0Y2hlciBhbGxvY10gaW5pdFdpdGhDb250cm9sbGVyOl9jb250cm9sbGVyXTsKLSAg
ICByZXR1cm4gX2RvbWFpbkV2ZW50RGlzcGF0Y2hlcjsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQg
IlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5oIgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNl
IEluc3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2
ZW50RGlzcGF0Y2hlcgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2Nv
bnRyb2xsZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21l
bnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3Vw
ZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VS
VChjb250cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJu
IHNlbGY7Ci19Ci0KLS0gKHZvaWQpRXZlbnQKLXsKLSAgICBjb25zdCBGcm9udGVuZFJvdXRlciYg
cm91dGVyID0gX2NvbnRyb2xsZXItPmZyb250ZW5kUm91dGVyKCk7Ci0KLSAgICBSZWY8SlNPTjo6
T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1l
c3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9zKTsKLSAgICByb3V0
ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Ci19Ci0KLUBlbmQKLQot
Ci0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8Rm91
bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2Nv
bEpTT05PYmplY3QuaD4KLQotCi0KLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFBy
b3RvY29sUGxhdGZvcm0pIHsKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbCwKLSAgICBUZXN0
UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWMsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1JT1MsCi0g
ICAgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUywKLX07Ci0KLQotCi0KLQotQHByb3RvY29sIFRl
c3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXIgPE5TT2JqZWN0PgotQG9wdGlvbmFsCi0tICh2
b2lkKUNvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVy
cm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKHZvaWQpKXN1Y2Nlc3NDYWxsYmFj
azsKLUBlbmQKLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50
ZXJmYWNlIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciA6IE5TT2JqZWN0
Ci0tICh2b2lkKUV2ZW50OwotQGVuZAotCi0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90
b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2wuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRv
bWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3Rv
Y29sSlNPTk9iamVjdFByaXZhdGUuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRh
YmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQot
QGludGVyZmFjZSBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKFByaXZh
dGUpCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihJbnNwZWN0b3I6OkF1Z21l
bnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcjsKLUBlbmQKLQotCi0jIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
ZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFBy
b3RvY29sLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNp
b25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPYmpD
RW51bVR5cGU+Ci1PcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25z
dCBTdHJpbmcmIHZhbHVlKTsKLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQ
cm90b2NvbFBsYXRmb3JtIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2Ug
VGVzdFByb3RvY29sUGxhdGZvcm1BbGw6Ci0gICAgICAgIHJldHVybiAiYWxsIl9zOwotICAgIGNh
c2UgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOgotICAgICAgICByZXR1cm4gImdlbmVyaWMi
X3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzoKLSAgICAgICAgcmV0dXJuICJp
b3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOgotICAgICAgICByZXR1
cm4gIm1hY29zIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRl
c3RQcm90b2NvbFBsYXRmb3JtPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1
ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gImFsbCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9j
b2xQbGF0Zm9ybUFsbDsKLSAgICBpZiAodmFsdWUgPT0gImdlbmVyaWMiKQotICAgICAgICByZXR1
cm4gVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOwotICAgIGlmICh2YWx1ZSA9PSAiaW9zIikK
LSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOwotICAgIGlmICh2YWx1ZSA9
PSAibWFjb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzsKLSAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQot
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2Fi
bGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0KLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgotI2ltcG9ydCA8
V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLQotdXNpbmcgbmFt
ZXNwYWNlIEluc3BlY3RvcjsKLQotCi0KLQotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5t
bQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlLW1h
dGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0K
LSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8V2ViSW5z
cGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLSNpbXBvcnQgPHd0Zi9Bc3Nl
cnRpb25zLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2Ug
SW5zcGVjdG9yOwotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmljL2V4cGVjdGVkL2RvbWFpbi10YXJnZXRUeXBlcy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2RvbWFp
bi10YXJnZXRUeXBlcy5qc29uLXJlc3VsdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
YWU4ZjA5M2U3NGEuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2RvbWFpbi10YXJnZXRUeXBlcy5q
c29uLXJlc3VsdAorKysgL2Rldi9udWxsCkBAIC0xLDEwNjMgKzAsMCBAQAotIyMjIEJlZ2luIEZp
bGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLS8vIERvbWFpbgotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rl
ckRvbWFpbigiRG9tYWluIiwgWyJwYWdlIl0pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNv
bW1hbmQoIkRvbWFpbi5Db21tYW5kIiwgWyJwYWdlIl0sIFtdLCBbXSk7Ci1JbnNwZWN0b3JCYWNr
ZW5kLnJlZ2lzdGVyRXZlbnQoIkRvbWFpbi5FdmVudCIsIFsicGFnZSJdLCBbXSk7Ci1JbnNwZWN0
b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluRGlzcGF0Y2hlciA9IEluc3BlY3RvckJhY2tlbmQucmVn
aXN0ZXJEaXNwYXRjaGVyLmJpbmQoSW5zcGVjdG9yQmFja2VuZCwgIkRvbWFpbiIpOwotSW5zcGVj
dG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiRG9tYWluIiwgbnVsbCk7Ci0jIyMgRW5kIEZpbGU6
IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVy
bmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZG9tYWluLXRhcmdldFR5cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVS
TkFURV9ESVNQQVRDSEVSUykKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCi0jaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotCi1uYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVi
bGljOgotICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRj
aGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0
Y2hlcik7IH0KLSAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25z
dCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Ci1wcml2YXRlOgotICAgIFJl
ZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKLX07Ci0KLQotY2xh
c3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZpcnR1YWwgfkFsdGVybmF0ZURvbWFpbkJh
Y2tlbmREaXNwYXRjaGVyKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIENvbW1hbmQobG9uZyBjYWxs
SWQpID0gMDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jZW5kaWYgLy8gRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jIyMgRW5kIEZpbGU6IFRlc3RB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tl
bmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlu
LXRhcmdldFR5cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0j
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0K
LXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCi1jbGFzcyBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hl
cjsKLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQot
Y2xhc3MgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKLXB1YmxpYzoKLSAgICB2aXJ0
dWFsIHZvaWQgQ29tbWFuZChFcnJvclN0cmluZyYpID0gMDsKLXByb3RlY3RlZDoKLSAgICB2aXJ0
dWFsIH5Eb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKLX07Ci0KLWNsYXNzIERvbWFp
bkJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNw
YXRjaGVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPERvbWFpbkJhY2tlbmREaXNwYXRjaGVy
PiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIqKTsKLSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1l
dGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBvdmVycmlkZTsKLXByaXZhdGU6Ci0g
ICAgdm9pZCBDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBh
cmFtZXRlcnMpOwotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQot
cHVibGljOgotICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0Y2hlcihBbHRlcm5hdGVEb21haW5C
YWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVybmF0ZURpc3Bh
dGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9Ci1wcml2YXRlOgotICAgIEFsdGVybmF0ZURv
bWFpbkJhY2tlbmREaXNwYXRjaGVyKiBtX2FsdGVybmF0ZURpc3BhdGNoZXIgeyBudWxscHRyIH07
Ci0jZW5kaWYKLXByaXZhdGU6Ci0gICAgRG9tYWluQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERp
c3BhdGNoZXImLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICBEb21haW5C
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQgeyBudWxscHRyIH07Ci19OwotCi19IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVy
cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlcy5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09O
VmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCi0jaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgotI2Vu
ZGlmCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1Eb21haW5CYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXI6On5Eb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KLQotUmVmPERvbWFp
bkJhY2tlbmREaXNwYXRjaGVyPiBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEJhY2tl
bmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyKiBhZ2VudCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEb21haW5CYWNrZW5k
RGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKLX0KLQotRG9tYWluQmFja2Vu
ZERpc3BhdGNoZXI6OkRvbWFpbkJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBi
YWNrZW5kRGlzcGF0Y2hlciwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkK
LSAgICA6IFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQot
ICAgICwgbV9hZ2VudChhZ2VudCkKLXsKLSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3Rl
ckRpc3BhdGNoZXJGb3JEb21haW4oIkRvbWFpbiJfcywgdGhpcyk7Ci19Ci0KLXZvaWQgRG9tYWlu
QmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcm
IG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQotewotICAgIFJlZjxEb21haW5C
YWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7Ci0KLSAgICBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiBwYXJhbWV0ZXJzOwotICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJh
bWV0ZXJzKTsKLQotICAgIGlmIChtZXRob2QgPT0gIkNvbW1hbmQiKQotICAgICAgICBDb21tYW5k
KHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7Ci0gICAgZWxzZQotICAgICAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpN
ZXRob2ROb3RGb3VuZCwgIidEb21haW4uIiArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsK
LX0KLQotdm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVlc3RJ
ZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKLXsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVS
TkFURV9ESVNQQVRDSEVSUykKLSAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAg
ICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+Q29tbWFuZChyZXF1ZXN0SWQpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8
SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIG1fYWdl
bnQtPkNvbW1hbmQoZXJyb3IpOwotCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1
bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBv
cnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShl
cnJvcikpOwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBU
ZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5k
RGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10
YXJnZXRUeXBlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2lu
Y2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBGcm9udGVuZFJvdXRlcjsKLQotY2xh
c3MgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKLXB1YmxpYzoKLSAgICBEb21haW5Gcm9udGVuZERpc3BhdGNoZXIoRnJvbnRlbmRSb3V0ZXIm
IGZyb250ZW5kUm91dGVyKSA6IG1fZnJvbnRlbmRSb3V0ZXIoZnJvbnRlbmRSb3V0ZXIpIHsgfQot
ICAgIHZvaWQgRXZlbnQoKTsKLXByaXZhdGU6Ci0gICAgRnJvbnRlbmRSb3V0ZXImIG1fZnJvbnRl
bmRSb3V0ZXI7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTog
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5k
RGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlu
LXRhcmdldFR5cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNo
ZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRl
ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3Rv
ciB7Ci0KLXZvaWQgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVyOjpFdmVudCgpCi17Ci0gICAgUmVm
PEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAg
IGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7Ci0K
LSAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5n
KCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0
RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9i
amVjdHMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRU
eXBlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNw
cmFnbWEgb25jZQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xU
eXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0
b3IgewotCi0KLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLQotCi0KLQotCi0KLX0gLy8g
bmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bE9iamVjdHMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRh
cmdldFR5cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIK
LQotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLQot
Ci19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQot
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5o
PgotCi1AcHJvdG9jb2wgVGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcjsKLQotbmFtZXNw
YWNlIEluc3BlY3RvciB7Ci0KLQotY2xhc3MgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNw
YXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyIHsK
LSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBPYmpDSW5zcGVjdG9y
RG9tYWluQmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxl
cj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQotICAgIHZpcnR1YWwgdm9pZCBD
b21tYW5kKGxvbmcgcmVxdWVzdElkKSBvdmVycmlkZTsKLXByaXZhdGU6Ci0gICAgUmV0YWluUHRy
PGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwotfTsKLQot
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFj
a2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmRE
aXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10
YXJnZXRUeXBlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3Bh
dGNoZXJzLmgiCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2luY2x1ZGUg
IlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVz
Lmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi12b2lkIE9iakNJbnNwZWN0b3JEb21haW5C
YWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVlc3RJZCkKLXsKLSAgICBpZiAoIVtt
X2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoQ29tbWFuZFdpdGhFcnJvckNh
bGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigp
LT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhv
ZE5vdEZvdW5kLCAiJ0RvbWFpbi5Db21tYW5kJyB3YXMgbm90IGZvdW5kIl9zKTsKLSAgICAgICAg
YmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewot
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJ
ZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7Ci0gICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgfTsKLQotICAgIGlkIHN1
Y2Nlc3NDYWxsYmFjayA9IF57Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNw
b25zZShyZXF1ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKLSAgICB9Owot
Ci0gICAgW21fZGVsZWdhdGUgQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sg
c3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107Ci19Ci0KLQotfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJz
Lm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZXMuanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxXZWJJbnNw
ZWN0b3IvVGVzdFByb3RvY29sLmg+Ci0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZh
dWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QK
LUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4sIHNldHRlcj1zZXREb21haW5IYW5kbGVyOikg
aWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4gZG9tYWluSGFuZGxlcjsKLUBwcm9w
ZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnRE
aXNwYXRjaGVyICpkb21haW5FdmVudERpc3BhdGNoZXI7Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbENvbmZpZ3VyYXRpb24ubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBk
b21haW4tdGFyZ2V0VHlwZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCi0KLSNpbXBv
cnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5k
RGlzcGF0Y2hlcnMuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNo
YWJsZUFnZW50Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3Rv
ckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXJzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBp
bXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCi17Ci0gICAgQXVnbWVudGFi
bGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKLSAgICBpZDxUZXN0UHJvdG9jb2xE
b21haW5Eb21haW5IYW5kbGVyPiBfZG9tYWluSGFuZGxlcjsKLSAgICBUZXN0UHJvdG9jb2xEb21h
aW5Eb21haW5FdmVudERpc3BhdGNoZXIgKl9kb21haW5FdmVudERpc3BhdGNoZXI7Ci19Ci0KLS0g
KGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29u
dHJvbGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYg
KCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAg
ICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZv
aWQpZGVhbGxvYwotewotICAgIFtfZG9tYWluSGFuZGxlciByZWxlYXNlXTsKLSAgICBbX2RvbWFp
bkV2ZW50RGlzcGF0Y2hlciByZWxlYXNlXTsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLS0g
KHZvaWQpc2V0RG9tYWluSGFuZGxlcjooaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxl
cj4paGFuZGxlcgotewotICAgIGlmIChoYW5kbGVyID09IF9kb21haW5IYW5kbGVyKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBbX2RvbWFpbkhhbmRsZXIgcmVsZWFzZV07Ci0gICAgX2RvbWFpbkhh
bmRsZXIgPSBbaGFuZGxlciByZXRhaW5dOwotCi0gICAgYXV0byBhbHRlcm5hdGVEaXNwYXRjaGVy
ID0gbWFrZVVuaXF1ZTxPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXI+KGhhbmRs
ZXIpOwotICAgIGF1dG8gYWx0ZXJuYXRlQWdlbnQgPSBtYWtlVW5pcXVlPEFsdGVybmF0ZURpc3Bh
dGNoYWJsZUFnZW50PERvbWFpbkJhY2tlbmREaXNwYXRjaGVyLCBBbHRlcm5hdGVEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlcj4+KCJEb21haW4iX3MsICpfY29udHJvbGxlciwgV1RGTW92ZShhbHRlcm5h
dGVEaXNwYXRjaGVyKSk7Ci0gICAgX2NvbnRyb2xsZXItPmFwcGVuZEV4dHJhQWdlbnQoV1RGTW92
ZShhbHRlcm5hdGVBZ2VudCkpOwotfQotCi0tIChpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5I
YW5kbGVyPilkb21haW5IYW5kbGVyCi17Ci0gICAgcmV0dXJuIF9kb21haW5IYW5kbGVyOwotfQot
Ci0tIChUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKilkb21haW5FdmVu
dERpc3BhdGNoZXIKLXsKLSAgICBpZiAoIV9kb21haW5FdmVudERpc3BhdGNoZXIpCi0gICAgICAg
IF9kb21haW5FdmVudERpc3BhdGNoZXIgPSBbW1Rlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50
RGlzcGF0Y2hlciBhbGxvY10gaW5pdFdpdGhDb250cm9sbGVyOl9jb250cm9sbGVyXTsKLSAgICBy
ZXR1cm4gX2RvbWFpbkV2ZW50RGlzcGF0Y2hlcjsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGRvbWFpbi10YXJnZXRUeXBlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBv
cnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8d3RmL0pTT05WYWx1
ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9uIFRl
c3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlcgotewotICAgIEF1Z21lbnRhYmxl
SW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlp
bml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJv
bGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAg
ICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9
IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpRXZlbnQKLXsKLSAg
ICBjb25zdCBGcm9udGVuZFJvdXRlciYgcm91dGVyID0gX2NvbnRyb2xsZXItPmZyb250ZW5kUm91
dGVyKCk7Ci0KLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVj
dDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9t
YWluLkV2ZW50Il9zKTsKLSAgICByb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05T
dHJpbmcoKSk7Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50
RGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVzLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8Rm91bmRhdGlv
bi9Gb3VuZGF0aW9uLmg+Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05P
YmplY3QuaD4KLQotCi0KLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29s
UGxhdGZvcm0pIHsKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbCwKLSAgICBUZXN0UHJvdG9j
b2xQbGF0Zm9ybUdlbmVyaWMsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1JT1MsCi0gICAgVGVz
dFByb3RvY29sUGxhdGZvcm1NYWNPUywKLX07Ci0KLQotCi0KLQotQHByb3RvY29sIFRlc3RQcm90
b2NvbERvbWFpbkRvbWFpbkhhbmRsZXIgPE5TT2JqZWN0PgotQG9wdGlvbmFsCi0tICh2b2lkKUNv
bW1hbmRXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2Fs
bGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKHZvaWQpKXN1Y2Nlc3NDYWxsYmFjazsKLUBl
bmQKLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNl
IFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciA6IE5TT2JqZWN0Ci0tICh2
b2lkKUV2ZW50OwotQGVuZAotCi0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1
aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wu
aAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlcy5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5o
IgotI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKLSNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8
d3RmL0pTT05WYWx1ZXMuaD4KLQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5F
dmVudERpc3BhdGNoZXIgKFByaXZhdGUpCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9s
bGVyOihJbnNwZWN0b3I6OkF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxl
cjsKLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVzLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgi
Ci0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+Ci0K
LW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+
Ci1PcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcm
IHZhbHVlKTsKLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFBs
YXRmb3JtIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3Rv
Y29sUGxhdGZvcm1BbGw6Ci0gICAgICAgIHJldHVybiAiYWxsIl9zOwotICAgIGNhc2UgVGVzdFBy
b3RvY29sUGxhdGZvcm1HZW5lcmljOgotICAgICAgICByZXR1cm4gImdlbmVyaWMiX3M7Ci0gICAg
Y2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzoKLSAgICAgICAgcmV0dXJuICJpb3MiX3M7Ci0g
ICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOgotICAgICAgICByZXR1cm4gIm1hY29z
Il9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2Nv
bFBsYXRmb3JtPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAg
ICBpZiAodmFsdWUgPT0gImFsbCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9y
bUFsbDsKLSAgICBpZiAodmFsdWUgPT0gImdlbmVyaWMiKQotICAgICAgICByZXR1cm4gVGVzdFBy
b3RvY29sUGxhdGZvcm1HZW5lcmljOwotICAgIGlmICh2YWx1ZSA9PSAiaW9zIikKLSAgICAgICAg
cmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOwotICAgIGlmICh2YWx1ZSA9PSAibWFjb3Mi
KQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzsKLSAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gZG9tYWluLXRhcmdldFR5cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgi
Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBh
cnNlci5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZh
dGUuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0KLQotCi0KLSMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xUeXBlcy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRv
bWFpbi10YXJnZXRUeXBlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVBy
b3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLSNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0j
aW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwot
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVk
L2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbi1yZXN1bHQgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9k
b21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24tcmVzdWx0CmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAzYjkwN2M3NDVmZS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQv
ZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uLXJlc3VsdAorKysgL2Rldi9u
dWxsCkBAIC0xLDE0NTUgKzAsMCBAQAotIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRD
b21tYW5kcy5qcwotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0
aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0vLyBOZXR3b3JrMQotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRv
bWFpbigiTmV0d29yazEiLCBudWxsKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5k
KCJOZXR3b3JrMS5sb2FkUmVzb3VyY2UxIiwgbnVsbCwgW10sIFtdKTsKLUluc3BlY3RvckJhY2tl
bmQuYWN0aXZhdGVEb21haW4oIk5ldHdvcmsxIiwgbnVsbCk7Ci0KLS8vIE5ldHdvcmszCi1JbnNw
ZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJOZXR3b3JrMyIsIG51bGwpOwotSW5zcGVjdG9y
QmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIk5ldHdvcmszLmxvYWRSZXNvdXJjZTEiLCBudWxsLCBb
XSwgW10pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIk5ldHdvcmszLmxvYWRS
ZXNvdXJjZTIiLCBudWxsLCBbXSwgW10pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1h
bmQoIk5ldHdvcmszLmxvYWRSZXNvdXJjZTMiLCBudWxsLCBbXSwgW10pOwotSW5zcGVjdG9yQmFj
a2VuZC5yZWdpc3RlckNvbW1hbmQoIk5ldHdvcmszLmxvYWRSZXNvdXJjZTQiLCBudWxsLCBbXSwg
W10pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIk5ldHdvcmszLmxvYWRSZXNv
dXJjZTUiLCBudWxsLCBbXSwgW10pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQo
Ik5ldHdvcmszLmxvYWRSZXNvdXJjZTYiLCBudWxsLCBbXSwgW10pOwotSW5zcGVjdG9yQmFja2Vu
ZC5yZWdpc3RlckNvbW1hbmQoIk5ldHdvcmszLmxvYWRSZXNvdXJjZTciLCBudWxsLCBbXSwgW10p
OwotSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiTmV0d29yazMiLCBudWxsKTsKLSMj
IyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0K
LSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQotI2luY2x1ZGUg
IlRlc3RQcm90b2NvbFR5cGVzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JG
cm9udGVuZFJvdXRlci5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgQWx0ZXJu
YXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZvaWQgc2V0QmFja2VuZERpc3Bh
dGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5k
RGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KLSAgICBCYWNrZW5kRGlzcGF0Y2hl
ciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVy
LmdldCgpOyB9Ci1wcml2YXRlOgotICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNr
ZW5kRGlzcGF0Y2hlcjsKLX07Ci0KLQotY2xhc3MgQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlz
cGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0g
ICAgdmlydHVhbCB+QWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQotICAg
IHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UxKGxvbmcgY2FsbElkKSA9IDA7Ci19OwotY2xhc3Mg
QWx0ZXJuYXRlTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+QWx0ZXJuYXRlTmV0d29yazNC
YWNrZW5kRGlzcGF0Y2hlcigpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UxKGxv
bmcgY2FsbElkKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTIobG9uZyBjYWxs
SWQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMyhsb25nIGNhbGxJZCkgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2U0KGxvbmcgY2FsbElkKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTUobG9uZyBjYWxsSWQpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgbG9hZFJlc291cmNlNihsb25nIGNhbGxJZCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBs
b2FkUmVzb3VyY2U3KGxvbmcgY2FsbElkKSA9IDA7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKLQotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQotIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UK
LQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdHlwZWRlZiBTdHJpbmcgRXJy
b3JTdHJpbmc7Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
LWNsYXNzIEFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI7Ci1jbGFzcyBBbHRlcm5h
dGVOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOwotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi1jbGFzcyBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlciB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTEoRXJyb3JT
dHJpbmcmKSA9IDA7Ci1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB+TmV0d29yazFCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXIoKTsKLX07Ci0KLWNsYXNzIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMShFcnJvclN0
cmluZyYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMihFcnJvclN0cmluZyYp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMyhFcnJvclN0cmluZyYpID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlNChFcnJvclN0cmluZyYpID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlNShFcnJvclN0cmluZyYpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgbG9hZFJlc291cmNlNihFcnJvclN0cmluZyYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
bG9hZFJlc291cmNlNyhFcnJvclN0cmluZyYpID0gMDsKLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFs
IH5OZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOwotfTsKLQotY2xhc3MgTmV0d29y
azFCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlz
cGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxOZXR3b3JrMUJhY2tlbmREaXNwYXRj
aGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlciopOwotICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmlu
ZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIG92ZXJyaWRlOwotcHJpdmF0
ZToKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTEobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpP
YmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCi1wdWJsaWM6Ci0gICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVy
bmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9h
bHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQotcHJpdmF0ZToKLSAg
ICBBbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKiBtX2FsdGVybmF0ZURpc3BhdGNo
ZXIgeyBudWxscHRyIH07Ci0jZW5kaWYKLXByaXZhdGU6Ci0gICAgTmV0d29yazFCYWNrZW5kRGlz
cGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYsIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyKik7Ci0gICAgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQgeyBu
dWxscHRyIH07Ci19OwotCi1jbGFzcyBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDog
cHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICBzdGF0
aWMgUmVmPE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hl
ciYsIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdm9pZCBkaXNwYXRj
aChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+
JiYgbWVzc2FnZSkgb3ZlcnJpZGU7Ci1wcml2YXRlOgotICAgIHZvaWQgbG9hZFJlc291cmNlMShs
b25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKLSAgICB2
b2lkIGxvYWRSZXNvdXJjZTIobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYg
cGFyYW1ldGVycyk7Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2UzKGxvbmcgcmVxdWVzdElkLCBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwotICAgIHZvaWQgbG9hZFJlc291cmNlNChs
b25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKLSAgICB2
b2lkIGxvYWRSZXNvdXJjZTUobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYg
cGFyYW1ldGVycyk7Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2U2KGxvbmcgcmVxdWVzdElkLCBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwotICAgIHZvaWQgbG9hZFJlc291cmNlNyhs
b25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKLSNpZiBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLXB1YmxpYzoKLSAgICB2b2lk
IHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hl
ciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5h
dGVEaXNwYXRjaGVyOyB9Ci1wcml2YXRlOgotICAgIEFsdGVybmF0ZU5ldHdvcmszQmFja2VuZERp
c3BhdGNoZXIqIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciB7IG51bGxwdHIgfTsKLSNlbmRpZgotcHJp
dmF0ZToKLSAgICBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiwg
TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICBOZXR3b3JrM0JhY2tlbmRE
aXNwYXRjaGVySGFuZGxlciogbV9hZ2VudCB7IG51bGxwdHIgfTsKLX07Ci0KLX0gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLQot
IyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUg
PHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCi0jaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVy
cy5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1OZXR3b3JrMUJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlcjo6fk5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9
Ci1OZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6fk5ldHdvcmszQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyKCkgeyB9Ci0KLVJlZjxOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPiBOZXR3
b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmRE
aXNwYXRjaGVyLCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCi17Ci0g
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5k
RGlzcGF0Y2hlciwgYWdlbnQpKTsKLX0KLQotTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6TmV0
d29yazFCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNo
ZXIsIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKLSAgICA6IFN1cHBs
ZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQotICAgICwgbV9hZ2Vu
dChhZ2VudCkKLXsKLSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJG
b3JEb21haW4oIk5ldHdvcmsxIl9zLCB0aGlzKTsKLX0KLQotdm9pZCBOZXR3b3JrMUJhY2tlbmRE
aXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2Qs
IFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKLXsKLSAgICBSZWY8TmV0d29yazFCYWNrZW5k
RGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7Ci0KLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBw
YXJhbWV0ZXJzOwotICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJz
KTsKLQotICAgIGlmIChtZXRob2QgPT0gImxvYWRSZXNvdXJjZTEiKQotICAgICAgICBsb2FkUmVz
b3VyY2UxKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7Ci0gICAgZWxzZQotICAgICAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRj
aGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMS4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBm
b3VuZCIpOwotfQotCi12b2lkIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJj
ZTEobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCi17Ci0jaWYgRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0gICAgaWYgKG1fYWx0ZXJuYXRlRGlz
cGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZTEo
cmVxdWVzdElkKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAgRXJyb3JT
dHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKTsKLSAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2UxKGVycm9yKTsKLQotICAgIGlm
ICghZXJyb3IubGVuZ3RoKCkpCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNw
b25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0
Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKLX0KLQotUmVmPE5ldHdvcmszQmFj
a2VuZERpc3BhdGNoZXI+IE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShCYWNrZW5k
RGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyKiBhZ2VudCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBOZXR3b3JrM0JhY2tl
bmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOwotfQotCi1OZXR3b3JrM0Jh
Y2tlbmREaXNwYXRjaGVyOjpOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRj
aGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIq
IGFnZW50KQotICAgIDogU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3Bh
dGNoZXIpCi0gICAgLCBtX2FnZW50KGFnZW50KQotewotICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbigiTmV0d29yazMiX3MsIHRoaXMpOwotfQotCi12
b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBj
b25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQotewotICAg
IFJlZjxOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKLQotICAgIFJl
ZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJw
YXJhbXMiX3MsIHBhcmFtZXRlcnMpOwotCi0gICAgdHlwZWRlZiB2b2lkIChOZXR3b3JrM0JhY2tl
bmREaXNwYXRjaGVyOjoqQ2FsbEhhbmRsZXIpKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6
T2JqZWN0PiYmIG1lc3NhZ2UpOwotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIENhbGxIYW5k
bGVyPiBEaXNwYXRjaE1hcDsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8RGlzcGF0Y2hNYXA+
IGRpc3BhdGNoTWFwOwotICAgIGlmIChkaXNwYXRjaE1hcC5nZXQoKS5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgc3RhdGljIGNvbnN0IHN0cnVjdCBNZXRob2RUYWJsZSB7Ci0gICAgICAgICAgICBjb25z
dCBjaGFyKiBuYW1lOwotICAgICAgICAgICAgQ2FsbEhhbmRsZXIgaGFuZGxlcjsKLSAgICAgICAg
fSBjb21tYW5kc1tdID0gewotICAgICAgICAgICAgeyAibG9hZFJlc291cmNlMSIsICZOZXR3b3Jr
M0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UxIH0sCi0gICAgICAgICAgICB7ICJsb2Fk
UmVzb3VyY2UyIiwgJk5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTIgfSwK
LSAgICAgICAgICAgIHsgImxvYWRSZXNvdXJjZTMiLCAmTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hl
cjo6bG9hZFJlc291cmNlMyB9LAotICAgICAgICAgICAgeyAibG9hZFJlc291cmNlNCIsICZOZXR3
b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U0IH0sCi0gICAgICAgICAgICB7ICJs
b2FkUmVzb3VyY2U1IiwgJk5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTUg
fSwKLSAgICAgICAgICAgIHsgImxvYWRSZXNvdXJjZTYiLCAmTmV0d29yazNCYWNrZW5kRGlzcGF0
Y2hlcjo6bG9hZFJlc291cmNlNiB9LAotICAgICAgICAgICAgeyAibG9hZFJlc291cmNlNyIsICZO
ZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U3IH0sCi0gICAgICAgIH07Ci0g
ICAgICAgIHNpemVfdCBsZW5ndGggPSBXVEZfQVJSQVlfTEVOR1RIKGNvbW1hbmRzKTsKLSAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKLSAgICAgICAgICAgIGRpc3Bh
dGNoTWFwLmdldCgpLmFkZChjb21tYW5kc1tpXS5uYW1lLCBjb21tYW5kc1tpXS5oYW5kbGVyKTsK
LSAgICB9Ci0KLSAgICBhdXRvIGZpbmRSZXN1bHQgPSBkaXNwYXRjaE1hcC5nZXQoKS5maW5kKG1l
dGhvZCk7Ci0gICAgaWYgKGZpbmRSZXN1bHQgPT0gZGlzcGF0Y2hNYXAuZ2V0KCkuZW5kKCkpIHsK
LSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5k
RGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMuIiArIG1ldGhvZCArICInIHdh
cyBub3QgZm91bmQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgICgoKnRoaXMpLipm
aW5kUmVzdWx0LT52YWx1ZSkocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKLX0KLQot
dm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UxKGxvbmcgcmVxdWVz
dElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQotewotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQotICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAg
ICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2UxKHJlcXVlc3RJZCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIEVycm9yU3RyaW5nIGVycm9yOwot
ICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0g
ICAgbV9hZ2VudC0+bG9hZFJlc291cmNlMShlcnJvcik7Ci0KLSAgICBpZiAoIWVycm9yLmxlbmd0
aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElk
LCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVy
cm9yLCBXVEZNb3ZlKGVycm9yKSk7Ci19Ci0KLXZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hl
cjo6bG9hZFJlc291cmNlMihsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikK
LXsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSAgICBpZiAo
bV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+
bG9hZFJlc291cmNlMihyZXF1ZXN0SWQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlm
Ci0KLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQg
PSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTIoZXJy
b3IpOwotCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0g
ICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9y
KEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOwotfQotCi12
b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTMobG9uZyByZXF1ZXN0
SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCi17Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCi0gICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAg
ICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZTMocmVxdWVzdElkKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0g
ICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAg
ICBtX2FnZW50LT5sb2FkUmVzb3VyY2UzKGVycm9yKTsKLQotICAgIGlmICghZXJyb3IubGVuZ3Ro
KCkpCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQs
IFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJy
b3IsIFdURk1vdmUoZXJyb3IpKTsKLX0KLQotdm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVy
Ojpsb2FkUmVzb3VyY2U0KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQot
ewotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotICAgIGlmICht
X2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5s
b2FkUmVzb3VyY2U0KHJlcXVlc3RJZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYK
LQotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9
IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgbV9hZ2VudC0+bG9hZFJlc291cmNlNChlcnJv
cik7Ci0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAg
ICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3Io
QmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Ci19Ci0KLXZv
aWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNShsb25nIHJlcXVlc3RJ
ZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKLXsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVS
TkFURV9ESVNQQVRDSEVSUykKLSAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAg
ICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlNShyZXF1ZXN0SWQpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAg
ICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAg
IG1fYWdlbnQtPmxvYWRSZXNvdXJjZTUoZXJyb3IpOwotCi0gICAgaWYgKCFlcnJvci5sZW5ndGgo
KSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwg
V1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNw
YXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJv
ciwgV1RGTW92ZShlcnJvcikpOwotfQotCi12b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6
OmxvYWRSZXNvdXJjZTYobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCi17
Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0gICAgaWYgKG1f
YWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxv
YWRSZXNvdXJjZTYocmVxdWVzdElkKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgot
Ci0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0g
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2U2KGVycm9y
KTsKLQotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOwotICAg
IGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihC
YWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKLX0KLQotdm9p
ZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U3KGxvbmcgcmVxdWVzdElk
LCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQotewotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQotICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAg
ICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2U3KHJlcXVlc3RJZCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAg
IFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAg
bV9hZ2VudC0+bG9hZFJlc291cmNlNyhlcnJvcik7Ci0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgp
KQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBX
VEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3Bh
dGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9y
LCBXVEZNb3ZlKGVycm9yKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMg
RW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAi
VGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1j
bGFzcyBGcm9udGVuZFJvdXRlcjsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5k
IEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RG
cm9udGVuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0K
LSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi1uYW1lc3BhY2Ug
UHJvdG9jb2wgewotCi0KLQotCi0KLS8vIFR5cGVkZWZzLgotbmFtZXNwYWNlIE5ldHdvcmsyIHsK
LS8qIFVuaXF1ZSBsb2FkZXIgaWRlbnRpZmllci4gKi8KLXR5cGVkZWYgU3RyaW5nIExvYWRlcklk
OwotfSAvLyBOZXR3b3JrMgotLy8gRW5kIG9mIHR5cGVkZWZzLgotCi0KLQotfSAvLyBuYW1lc3Bh
Y2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbE9iamVjdHMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0
cy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFy
eWluZy1jb21tYW5kLXNpemVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9i
amVjdHMuaCIKLQotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLW5hbWVzcGFjZSBQcm90b2Nv
bCB7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgot
I2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQotQHByb3RvY29sIFRlc3RQcm90b2NvbE5ldHdv
cmsxRG9tYWluSGFuZGxlcjsKLUBwcm90b2NvbCBUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkhh
bmRsZXI7Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLWNsYXNzIE9iakNJbnNwZWN0b3JO
ZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZU5ldHdvcmsx
QmFja2VuZERpc3BhdGNoZXIgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGlj
OgotICAgIE9iakNJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQcm90
b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxl
cjsgfQotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UxKGxvbmcgcmVxdWVzdElkKSBvdmVy
cmlkZTsKLXByaXZhdGU6Ci0gICAgUmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9t
YWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7Ci19OwotCi1jbGFzcyBPYmpDSW5zcGVjdG9yTmV0d29y
azNCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVOZXR3b3JrM0JhY2tl
bmREaXNwYXRjaGVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAg
ICBPYmpDSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xO
ZXR3b3JrM0RvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0K
LSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMShsb25nIHJlcXVlc3RJZCkgb3ZlcnJpZGU7
Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTIobG9uZyByZXF1ZXN0SWQpIG92ZXJyaWRl
OwotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UzKGxvbmcgcmVxdWVzdElkKSBvdmVycmlk
ZTsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlNChsb25nIHJlcXVlc3RJZCkgb3ZlcnJp
ZGU7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTUobG9uZyByZXF1ZXN0SWQpIG92ZXJy
aWRlOwotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2U2KGxvbmcgcmVxdWVzdElkKSBvdmVy
cmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlNyhsb25nIHJlcXVlc3RJZCkgb3Zl
cnJpZGU7Ci1wcml2YXRlOgotICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xOZXR3b3JrM0Rv
bWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6
ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1w
b3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5o
IgotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotCi1u
YW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdm9pZCBPYmpDSW5zcGVjdG9yTmV0d29yazFCYWNrZW5k
RGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMShsb25nIHJlcXVlc3RJZCkKLXsKLSAgICBpZiAoIVtt
X2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IobG9hZFJlc291cmNlMVdpdGhF
cnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6
Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmsxLmxvYWRSZXNvdXJjZTEnIHdhcyBub3QgZm91bmQi
X3MpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJp
bmcgKmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29s
RXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsK
LSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICB9
OwotCi0gICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFs
c2UpOwotICAgIH07Ci0KLSAgICBbbV9kZWxlZ2F0ZSBsb2FkUmVzb3VyY2UxV2l0aEVycm9yQ2Fs
bGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKLX0K
LQotCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVz
b3VyY2UxKGxvbmcgcmVxdWVzdElkKQotewotICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNU
b1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2UxV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vz
c0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3Rv
Y29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICIn
TmV0d29yazMubG9hZFJlc291cmNlMScgd2FzIG5vdCBmb3VuZCJfcyk7Ci0gICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJh
Y2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwotICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgIH07Ci0KLSAgICBpZCBzdWNjZXNz
Q2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2Uo
cmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7Ci0gICAgfTsKLQotICAg
IFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZTFXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNr
IHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOwotfQotCi12b2lkIE9iakNJbnNwZWN0
b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UyKGxvbmcgcmVxdWVzdElk
KQotewotICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihs
b2FkUmVzb3VyY2UyV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0gICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBC
YWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMubG9hZFJlc291cmNl
Micgd2FzIG5vdCBmb3VuZCJfcyk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQ
ZW5kaW5nRXJyb3JzKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZCBlcnJvckNh
bGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2
ZXJFcnJvciwgZXJyb3IpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGlu
Z0Vycm9ycygpOwotICAgIH07Ci0KLSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAg
ICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmpl
Y3Q6OmNyZWF0ZSgpLCBmYWxzZSk7Ci0gICAgfTsKLQotICAgIFttX2RlbGVnYXRlIGxvYWRSZXNv
dXJjZTJXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNj
ZXNzQ2FsbGJhY2tdOwotfQotCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNw
YXRjaGVyOjpsb2FkUmVzb3VyY2UzKGxvbmcgcmVxdWVzdElkKQotewotICAgIGlmICghW21fZGVs
ZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2UzV2l0aEVycm9y
Q2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVy
KCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0
aG9kTm90Rm91bmQsICInTmV0d29yazMubG9hZFJlc291cmNlMycgd2FzIG5vdCBmb3VuZCJfcyk7
Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAq
ZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJv
cihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwotICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgIH07Ci0K
LSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigp
LT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7
Ci0gICAgfTsKLQotICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZTNXaXRoRXJyb3JDYWxsYmFj
azplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOwotfQotCi12
b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U0
KGxvbmcgcmVxdWVzdElkKQotewotICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVj
dG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2U0V2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxi
YWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJy
b3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29y
azMubG9hZFJlc291cmNlNCcgd2FzIG5vdCBmb3VuZCJfcyk7Ci0gICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmRE
aXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgIH07Ci0KLSAgICBpZCBzdWNjZXNzQ2FsbGJh
Y2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVz
dElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7Ci0gICAgfTsKLQotICAgIFttX2Rl
bGVnYXRlIGxvYWRSZXNvdXJjZTRXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nl
c3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOwotfQotCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3
b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U1KGxvbmcgcmVxdWVzdElkKQotewot
ICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVz
b3VyY2U1V2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJh
Y2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5k
RGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMubG9hZFJlc291cmNlNScgd2Fz
IG5vdCBmb3VuZCJfcyk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5n
RXJyb3JzKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZCBlcnJvckNhbGxiYWNr
ID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVw
b3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJv
ciwgZXJyb3IpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9y
cygpOwotICAgIH07Ci0KLSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpLCBmYWxzZSk7Ci0gICAgfTsKLQotICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZTVX
aXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2Fs
bGJhY2tdOwotfQotCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVy
Ojpsb2FkUmVzb3VyY2U2KGxvbmcgcmVxdWVzdElkKQotewotICAgIGlmICghW21fZGVsZWdhdGUg
cmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2U2V2l0aEVycm9yQ2FsbGJh
Y2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJl
cG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90
Rm91bmQsICInTmV0d29yazMubG9hZFJlc291cmNlNicgd2FzIG5vdCBmb3VuZCJfcyk7Ci0gICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3Ip
IHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1
ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwotICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgIH07Ci0KLSAgICBp
ZCBzdWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5k
UmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7Ci0gICAg
fTsKLQotICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZTZXaXRoRXJyb3JDYWxsYmFjazplcnJv
ckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOwotfQotCi12b2lkIE9i
akNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U3KGxvbmcg
cmVxdWVzdElkKQotewotICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBz
ZWxlY3Rvcihsb2FkUmVzb3VyY2U3V2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOild
KSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVx
dWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMubG9h
ZFJlc291cmNlNycgd2FzIG5vdCBmb3VuZCJfcyk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVy
KCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBp
ZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRj
aGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5z
ZW5kUGVuZGluZ0Vycm9ycygpOwotICAgIH07Ci0KLSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBe
ewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBK
U09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7Ci0gICAgfTsKLQotICAgIFttX2RlbGVnYXRl
IGxvYWRSZXNvdXJjZTdXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxs
YmFjazpzdWNjZXNzQ2FsbGJhY2tdOwotfQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgot
Ci0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPFdl
Ykluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAo
ImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09i
amVjdAotQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNldE5ldHdvcmsxSGFu
ZGxlcjopIGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4gbmV0d29yazFIYW5k
bGVyOwotQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNldE5ldHdvcmszSGFu
ZGxlcjopIGlkPFRlc3RQcm90b2NvbE5ldHdvcmszRG9tYWluSGFuZGxlcj4gbmV0d29yazNIYW5k
bGVyOwotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5o
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1z
aXplcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNp
bXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKLQotI2ltcG9ydCAiVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5o
IgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4K
LSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5o
PgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXJzLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcnMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9u
IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KLXsKLSAgICBBdWdtZW50YWJsZUluc3BlY3RvckNv
bnRyb2xsZXIqIF9jb250cm9sbGVyOwotICAgIGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWlu
SGFuZGxlcj4gX25ldHdvcmsxSGFuZGxlcjsKLSAgICBpZDxUZXN0UHJvdG9jb2xOZXR3b3JrM0Rv
bWFpbkhhbmRsZXI+IF9uZXR3b3JrM0hhbmRsZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0
V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxl
cgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICBy
ZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9IGNv
bnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAg
IFtfbmV0d29yazFIYW5kbGVyIHJlbGVhc2VdOwotICAgIFtfbmV0d29yazNIYW5kbGVyIHJlbGVh
c2VdOwotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAodm9pZClzZXROZXR3b3JrMUhhbmRs
ZXI6KGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4paGFuZGxlcgotewotICAg
IGlmIChoYW5kbGVyID09IF9uZXR3b3JrMUhhbmRsZXIpCi0gICAgICAgIHJldHVybjsKLQotICAg
IFtfbmV0d29yazFIYW5kbGVyIHJlbGVhc2VdOwotICAgIF9uZXR3b3JrMUhhbmRsZXIgPSBbaGFu
ZGxlciByZXRhaW5dOwotCi0gICAgYXV0byBhbHRlcm5hdGVEaXNwYXRjaGVyID0gbWFrZVVuaXF1
ZTxPYmpDSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7Ci0gICAg
YXV0byBhbHRlcm5hdGVBZ2VudCA9IG1ha2VVbmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdl
bnQ8TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciwgQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlz
cGF0Y2hlcj4+KCJOZXR3b3JrMSJfcywgKl9jb250cm9sbGVyLCBXVEZNb3ZlKGFsdGVybmF0ZURp
c3BhdGNoZXIpKTsKLSAgICBfY29udHJvbGxlci0+YXBwZW5kRXh0cmFBZ2VudChXVEZNb3ZlKGFs
dGVybmF0ZUFnZW50KSk7Ci19Ci0KLS0gKGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFu
ZGxlcj4pbmV0d29yazFIYW5kbGVyCi17Ci0gICAgcmV0dXJuIF9uZXR3b3JrMUhhbmRsZXI7Ci19
Ci0KLS0gKHZvaWQpc2V0TmV0d29yazNIYW5kbGVyOihpZDxUZXN0UHJvdG9jb2xOZXR3b3JrM0Rv
bWFpbkhhbmRsZXI+KWhhbmRsZXIKLXsKLSAgICBpZiAoaGFuZGxlciA9PSBfbmV0d29yazNIYW5k
bGVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBbX25ldHdvcmszSGFuZGxlciByZWxlYXNlXTsK
LSAgICBfbmV0d29yazNIYW5kbGVyID0gW2hhbmRsZXIgcmV0YWluXTsKLQotICAgIGF1dG8gYWx0
ZXJuYXRlRGlzcGF0Y2hlciA9IG1ha2VVbmlxdWU8T2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2Vu
ZERpc3BhdGNoZXI+KGhhbmRsZXIpOwotICAgIGF1dG8gYWx0ZXJuYXRlQWdlbnQgPSBtYWtlVW5p
cXVlPEFsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50PE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIs
IEFsdGVybmF0ZU5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI+PigiTmV0d29yazMiX3MsICpfY29u
dHJvbGxlciwgV1RGTW92ZShhbHRlcm5hdGVEaXNwYXRjaGVyKSk7Ci0gICAgX2NvbnRyb2xsZXIt
PmFwcGVuZEV4dHJhQWdlbnQoV1RGTW92ZShhbHRlcm5hdGVBZ2VudCkpOwotfQotCi0tIChpZDxU
ZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkhhbmRsZXI+KW5ldHdvcmszSGFuZGxlcgotewotICAg
IHJldHVybiBfbmV0d29yazNIYW5kbGVyOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xFdmVudERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
ZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFs
LmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8
d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9t
YWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5o
PgotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+Ci0KLQot
Ci0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbFBsYXRmb3JtKSB7Ci0g
ICAgVGVzdFByb3RvY29sUGxhdGZvcm1BbGwsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5l
cmljLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TLAotICAgIFRlc3RQcm90b2NvbFBsYXRm
b3JtTWFjT1MsCi19OwotCi0KLQotCi0KLUBwcm90b2NvbCBUZXN0UHJvdG9jb2xOZXR3b3JrMURv
bWFpbkhhbmRsZXIgPE5TT2JqZWN0PgotQG9wdGlvbmFsCi0tICh2b2lkKWxvYWRSZXNvdXJjZTFX
aXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sg
c3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKHZvaWQpKXN1Y2Nlc3NDYWxsYmFjazsKLUBlbmQKLQot
QHByb3RvY29sIFRlc3RQcm90b2NvbE5ldHdvcmszRG9tYWluSGFuZGxlciA8TlNPYmplY3Q+Ci1A
b3B0aW9uYWwKLS0gKHZvaWQpbG9hZFJlc291cmNlMVdpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4p
KE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXiko
dm9pZCkpc3VjY2Vzc0NhbGxiYWNrOwotLSAodm9pZClsb2FkUmVzb3VyY2UyV2l0aEVycm9yQ2Fs
bGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxs
YmFjazoodm9pZCheKSh2b2lkKSlzdWNjZXNzQ2FsbGJhY2s7Ci0tICh2b2lkKWxvYWRSZXNvdXJj
ZTNXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJh
Y2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKHZvaWQpKXN1Y2Nlc3NDYWxsYmFjazsKLS0gKHZv
aWQpbG9hZFJlc291cmNlNFdpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJv
cikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikodm9pZCkpc3VjY2Vzc0Nh
bGxiYWNrOwotLSAodm9pZClsb2FkUmVzb3VyY2U1V2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXiko
TlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKSh2
b2lkKSlzdWNjZXNzQ2FsbGJhY2s7Ci0tICh2b2lkKWxvYWRSZXNvdXJjZTZXaXRoRXJyb3JDYWxs
YmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxi
YWNrOih2b2lkKF4pKHZvaWQpKXN1Y2Nlc3NDYWxsYmFjazsKLS0gKHZvaWQpbG9hZFJlc291cmNl
N1dpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFj
ayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikodm9pZCkpc3VjY2Vzc0NhbGxiYWNrOwotQGVuZAot
Ci0KLQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxp
dHlPYmplY3RzLmg+Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29s
LmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgotI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0
IDx3dGYvSlNPTlZhbHVlcy5oPgotCi0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbElu
dGVybmFsLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5o
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmct
Y29tbWFuZC1zaXplcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JX
SVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQot
dGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgotT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBm
cm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0KLWlubGluZSBTdHJpbmcg
dG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xQbGF0Zm9ybSB2YWx1ZSkKLXsKLSAgICBzd2l0
Y2godmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOgotICAgICAgICBy
ZXR1cm4gImFsbCJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzoKLSAg
ICAgICAgcmV0dXJuICJnZW5lcmljIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1J
T1M6Ci0gICAgICAgIHJldHVybiAiaW9zIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZv
cm1NYWNPUzoKLSAgICAgICAgcmV0dXJuICJtYWNvcyJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRl
PD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xQbGF0Zm9ybT4gZnJvbVByb3RvY29sU3Ry
aW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJhbGwiKQotICAg
ICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1BbGw7Ci0gICAgaWYgKHZhbHVlID09ICJn
ZW5lcmljIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzsKLSAg
ICBpZiAodmFsdWUgPT0gImlvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9y
bUlPUzsKLSAgICBpZiAodmFsdWUgPT0gIm1hY29zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90
b2NvbFBsYXRmb3JtTWFjT1M7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotCi0KLX0g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFy
eWluZy1jb21tYW5kLXNpemVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0KLSNp
bXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5o
IgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4K
LQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMgKE5ldHdvcmsyRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZUxvYWRlcklk
OihOU1N0cmluZyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLQotQGVuZAot
Ci1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChOZXR3b3JrMkRv
bWFpbikKLQotKyAodm9pZClfcGFyc2VMb2FkZXJJZDooTlNTdHJpbmcgKiopb3V0VmFsdWUgZnJv
bVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBF
KHBheWxvYWQsIFtOU1N0cmluZyBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IChOU1N0cmluZyAq
KXBheWxvYWQ7Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21t
YW5kLXNpemVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xK
U09OT2JqZWN0UHJpdmF0ZS5oPgotI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQg
PHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotCi0K
LSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2Vu
dW0tdmFsdWVzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZW51bS12YWx1ZXMuanNvbi1yZXN1bHQKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5NzU3YmI3MGIwLi4wMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9l
eHBlY3RlZC9lbnVtLXZhbHVlcy5qc29uLXJlc3VsdAorKysgL2Rldi9udWxsCkBAIC0xLDEyMzYg
KzAsMCBAQAotIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotLy8gVHlwZURvbWFpbgotSW5zcGVj
dG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiVHlwZURvbWFpbiIsIG51bGwpOwotSW5zcGVjdG9y
QmFja2VuZC5yZWdpc3RlckVudW0oIlR5cGVEb21haW4uVHlwZURvbWFpbkVudW0iLCB7U2hhcmVk
OiAic2hhcmVkIiwgUmVkOiAicmVkIiwgR3JlZW46ICJncmVlbiIsIEJsdWU6ICJibHVlIn0pOwot
SW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiVHlwZURvbWFpbiIsIG51bGwpOwotCi0v
LyBDb21tYW5kRG9tYWluCi1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJDb21tYW5k
RG9tYWluIiwgbnVsbCk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiQ29tbWFu
ZERvbWFpbi5jb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZSIsIG51bGwsIFtdLCBbInJldHVyblZh
bHVlIl0pOwotSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiQ29tbWFuZERvbWFpbiIs
IG51bGwpOwotCi0vLyBFdmVudERvbWFpbgotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFp
bigiRXZlbnREb21haW4iLCBudWxsKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJF
dmVudERvbWFpbi5FdmVudFdpdGhFbnVtUGFyYW1ldGVyUGFyYW1ldGVyIiwge1NoYXJlZDogInNo
YXJlZCIsIEJsYWNrOiAiYmxhY2siLCBXaGl0ZTogIndoaXRlIn0pOwotSW5zcGVjdG9yQmFja2Vu
ZC5yZWdpc3RlckV2ZW50KCJFdmVudERvbWFpbi5ldmVudFdpdGhFbnVtUGFyYW1ldGVyIiwgbnVs
bCwgWyJwYXJhbWV0ZXIiXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnREb21haW5E
aXNwYXRjaGVyID0gSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRpc3BhdGNoZXIuYmluZChJbnNw
ZWN0b3JCYWNrZW5kLCAiRXZlbnREb21haW4iKTsKLUluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVE
b21haW4oIkV2ZW50RG9tYWluIiwgbnVsbCk7Ci0jIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tl
bmRDb21tYW5kcy5qcwotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNw
YXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMu
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21h
IG9uY2UKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi0j
aW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFz
cyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNr
ZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBt
X2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQotICAgIEJhY2tlbmRE
aXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERp
c3BhdGNoZXIuZ2V0KCk7IH0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVy
PiBtX2JhY2tlbmREaXNwYXRjaGVyOwotfTsKLQotCi1jbGFzcyBBbHRlcm5hdGVDb21tYW5kRG9t
YWluQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIg
ewotcHVibGljOgotICAgIHZpcnR1YWwgfkFsdGVybmF0ZUNvbW1hbmREb21haW5CYWNrZW5kRGlz
cGF0Y2hlcigpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1
ZShsb25nIGNhbGxJZCkgPSAwOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSNl
bmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSMjIyBFbmQg
RmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBlbnVtLXZhbHVlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5o
IgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewotCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQotI2lmIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQotY2xhc3MgQWx0ZXJuYXRlQ29tbWFuZERvbWFpbkJhY2tl
bmREaXNwYXRjaGVyOwotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQotCi1jbGFzcyBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsK
LXB1YmxpYzoKLSAgICAvLyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIgJ3JldHVyblZhbHVlJyB3aGls
ZSBnZW5lcmF0aW5nIGNvbW1hbmQvZXZlbnQgY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUuCi0g
ICAgZW51bSBjbGFzcyBSZXR1cm5WYWx1ZSB7Ci0gICAgICAgIFNoYXJlZCA9IDAsCi0gICAgICAg
IEN5YW4gPSA2LAotICAgICAgICBNYWdlbnRhID0gNywKLSAgICAgICAgWWVsbG93ID0gOCwKLSAg
ICB9OyAvLyBlbnVtIGNsYXNzIFJldHVyblZhbHVlCi0gICAgdmlydHVhbCB2b2lkIGNvbW1hbmRX
aXRoRW51bVJldHVyblZhbHVlKEVycm9yU3RyaW5nJiwgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNw
YXRjaGVySGFuZGxlcjo6UmV0dXJuVmFsdWUqIG91dF9yZXR1cm5WYWx1ZSkgPSAwOwotcHJvdGVj
dGVkOgotICAgIHZpcnR1YWwgfkNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIo
KTsKLX07Ci0KLWNsYXNzIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1
YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGlj
IFJlZjxDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0
Y2hlciYsIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICB2b2lk
IGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046
Ok9iamVjdD4mJiBtZXNzYWdlKSBvdmVycmlkZTsKLXByaXZhdGU6Ci0gICAgdm9pZCBjb21tYW5k
V2l0aEVudW1SZXR1cm5WYWx1ZShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4m
JiBwYXJhbWV0ZXJzKTsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKLXB1YmxpYzoKLSAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlQ29t
bWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0
ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KLXByaXZhdGU6Ci0gICAg
QWx0ZXJuYXRlQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKiBtX2FsdGVybmF0ZURpc3Bh
dGNoZXIgeyBudWxscHRyIH07Ci0jZW5kaWYKLXByaXZhdGU6Ci0gICAgQ29tbWFuZERvbWFpbkJh
Y2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiwgQ29tbWFuZERvbWFpbkJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlciopOwotICAgIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXIqIG1fYWdlbnQgeyBudWxscHRyIH07Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RCYWNrZW5k
RGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250
ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYv
TmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNpZiBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSNpbmNsdWRlICJUZXN0QWx0
ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIEluc3BlY3Rv
ciB7Ci0KLUNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5Db21tYW5kRG9t
YWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9Ci0KLVJlZjxDb21tYW5kRG9tYWluQmFj
a2VuZERpc3BhdGNoZXI+IENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEJh
Y2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgQ29tbWFuZERvbWFpbkJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlciogYWdlbnQpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ29t
bWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOwot
fQotCi1Db21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmREb21haW5CYWNrZW5k
RGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIENvbW1hbmRE
b21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQotICAgIDogU3VwcGxlbWVudGFs
QmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCi0gICAgLCBtX2FnZW50KGFnZW50
KQotewotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFp
bigiQ29tbWFuZERvbWFpbiJfcywgdGhpcyk7Ci19Ci0KLXZvaWQgQ29tbWFuZERvbWFpbkJhY2tl
bmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRo
b2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKLXsKLSAgICBSZWY8Q29tbWFuZERvbWFp
bkJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKLQotICAgIFJlZlB0cjxKU09OOjpP
YmplY3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBh
cmFtZXRlcnMpOwotCi0gICAgaWYgKG1ldGhvZCA9PSAiY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFs
dWUiKQotICAgICAgICBjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShyZXF1ZXN0SWQsIFdURk1v
dmUocGFyYW1ldGVycykpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+
cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICIn
Q29tbWFuZERvbWFpbi4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOwotfQotCi12b2lk
IENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Y29tbWFuZFdpdGhFbnVtUmV0dXJuVmFs
dWUobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCi17Ci0jaWYgRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0gICAgaWYgKG1fYWx0ZXJuYXRlRGlz
cGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmNvbW1hbmRXaXRoRW51
bVJldHVyblZhbHVlKHJlcXVlc3RJZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYK
LQotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9
IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRj
aGVySGFuZGxlcjo6UmV0dXJuVmFsdWUgb3V0X3JldHVyblZhbHVlOwotICAgIG1fYWdlbnQtPmNv
bW1hbmRXaXRoRW51bVJldHVyblZhbHVlKGVycm9yLCAmb3V0X3JldHVyblZhbHVlKTsKLQotICAg
IGlmICghZXJyb3IubGVuZ3RoKCkpCi0gICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJyZXR1cm5W
YWx1ZSJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFu
dFZhbHVlKG91dF9yZXR1cm5WYWx1ZSkpOwotCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAg
ICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92
ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RG
TW92ZShlcnJvcikpOwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBG
aWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZy
b250ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVu
dW0tdmFsdWVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5j
bHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
LQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEZyb250ZW5kUm91dGVyOwotCi1jbGFz
cyBFdmVudERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7Ci1wdWJsaWM6Ci0gICAgRXZlbnREb21haW5Gcm9udGVuZERpc3BhdGNoZXIoRnJvbnRl
bmRSb3V0ZXImIGZyb250ZW5kUm91dGVyKSA6IG1fZnJvbnRlbmRSb3V0ZXIoZnJvbnRlbmRSb3V0
ZXIpIHsgfQotICAgICAgICAvLyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIgJ3BhcmFtZXRlcicgd2hp
bGUgZ2VuZXJhdGluZyBjb21tYW5kL2V2ZW50IGV2ZW50V2l0aEVudW1QYXJhbWV0ZXIuCi0gICAg
ICAgIGVudW0gY2xhc3MgUGFyYW1ldGVyIHsKLSAgICAgICAgICAgIFNoYXJlZCA9IDAsCi0gICAg
ICAgICAgICBCbGFjayA9IDQsCi0gICAgICAgICAgICBXaGl0ZSA9IDUsCi0gICAgICAgIH07IC8v
IGVudW0gY2xhc3MgUGFyYW1ldGVyCi0gICAgdm9pZCBldmVudFdpdGhFbnVtUGFyYW1ldGVyKFBh
cmFtZXRlciBwYXJhbWV0ZXIpOwotcHJpdmF0ZToKLSAgICBGcm9udGVuZFJvdXRlciYgbV9mcm9u
dGVuZFJvdXRlcjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxl
OiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVt
LXZhbHVlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5o
IgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Igewot
Ci12b2lkIEV2ZW50RG9tYWluRnJvbnRlbmREaXNwYXRjaGVyOjpldmVudFdpdGhFbnVtUGFyYW1l
dGVyKFBhcmFtZXRlciBwYXJhbWV0ZXIpCi17Ci0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1l
c3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJp
bmcoIm1ldGhvZCJfcywgIkV2ZW50RG9tYWluLmV2ZW50V2l0aEVudW1QYXJhbWV0ZXIiX3MpOwot
ICAgIFJlZjxKU09OOjpPYmplY3Q+IHBhcmFtc09iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRl
KCk7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInBhcmFtZXRlciJfcywgSW5zcGVjdG9y
OjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKHBhcmFtZXRlcikp
OwotICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyJfcywgV1RGTW92ZShwYXJhbXNP
YmplY3QpKTsKLQotICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50
b0pTT05TdHJpbmcoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5k
IEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sT2JqZWN0cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51
bS12YWx1ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3Rv
Y29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotCi1uYW1lc3BhY2UgSW5z
cGVjdG9yIHsKLQotCi0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLQotCi0vLyBGb3J3YXJkIGRl
Y2xhcmF0aW9ucy4KLW5hbWVzcGFjZSBUeXBlRG9tYWluIHsKLWVudW0gY2xhc3MgVHlwZURvbWFp
bkVudW07Ci19IC8vIFR5cGVEb21haW4KLS8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4K
LQotCi0KLQotbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKLQotU3RyaW5nIGdldEVudW1Db25zdGFu
dFZhbHVlKGludCBjb2RlKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdldEVudW1D
b25zdGFudFZhbHVlKFQgZW51bVZhbHVlKQotewotICAgIHJldHVybiBnZXRFbnVtQ29uc3RhbnRW
YWx1ZShzdGF0aWNfY2FzdDxpbnQ+KGVudW1WYWx1ZSkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBU
ZXN0SGVscGVycwotCi1uYW1lc3BhY2UgVHlwZURvbWFpbiB7Ci0vKiAgKi8KLWVudW0gY2xhc3Mg
VHlwZURvbWFpbkVudW0gewotICAgIFNoYXJlZCA9IDAsCi0gICAgUmVkID0gMSwKLSAgICBHcmVl
biA9IDIsCi0gICAgQmx1ZSA9IDMsCi19OyAvLyBlbnVtIGNsYXNzIFR5cGVEb21haW5FbnVtCi19
IC8vIFR5cGVEb21haW4KLQotCi0KLW5hbWVzcGFjZSBUZXN0SGVscGVycyB7Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIFByb3RvY29sRW51bVR5cGU+Ci1PcHRpb25hbDxQcm90b2NvbEVudW1UeXBlPiBw
YXJzZUVudW1WYWx1ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJik7Ci0KLS8vIEVudW1zIGluIHRo
ZSAnVHlwZURvbWFpbicgRG9tYWluCi10ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlBy
b3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51bT4gcGFyc2VFbnVtVmFsdWVGcm9tU3Ry
aW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46OlR5cGVEb21haW5FbnVtPihjb25z
dCBTdHJpbmcmKTsKLQotfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKLQotfSAvLyBuYW1lc3Bh
Y2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLW5hbWVzcGFjZSBXVEYg
ewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Ci0KLS8vIEhhc2gg
ZGVjbGFyYXRpb25zIGluIHRoZSAnVHlwZURvbWFpbicgRG9tYWluCi10ZW1wbGF0ZTw+Ci1zdHJ1
Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFp
bkVudW0+IHsKLSAgICB0eXBlZGVmIEludEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURv
bWFpbjo6VHlwZURvbWFpbkVudW0+IEhhc2g7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXVEYKLSMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xPYmplY3RzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVu
dW0tdmFsdWVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIK
LQotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLW5h
bWVzcGFjZSBUZXN0SGVscGVycyB7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBlbnVtX2Nv
bnN0YW50X3ZhbHVlc1tdID0gewotICAgICJzaGFyZWQiLAotICAgICJyZWQiLAotICAgICJncmVl
biIsCi0gICAgImJsdWUiLAotICAgICJibGFjayIsCi0gICAgIndoaXRlIiwKLSAgICAiY3lhbiIs
Ci0gICAgIm1hZ2VudGEiLAotICAgICJ5ZWxsb3ciLAotfTsKLQotU3RyaW5nIGdldEVudW1Db25z
dGFudFZhbHVlKGludCBjb2RlKSB7Ci0gICAgcmV0dXJuIGVudW1fY29uc3RhbnRfdmFsdWVzW2Nv
ZGVdOwotfQotCi0vLyBFbnVtcyBpbiB0aGUgJ1R5cGVEb21haW4nIERvbWFpbgotdGVtcGxhdGU8
PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVu
dW0+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9t
YWluOjpUeXBlRG9tYWluRW51bT4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKLXsKLSAg
ICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7Ci0gICAgICAgIChzaXpl
X3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW06OlNoYXJl
ZCwKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBl
RG9tYWluRW51bTo6UmVkLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5
cGVEb21haW46OlR5cGVEb21haW5FbnVtOjpHcmVlbiwKLSAgICAgICAgKHNpemVfdClJbnNwZWN0
b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51bTo6Qmx1ZSwKLSAgICB9Owot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgNDsgKytpKQotICAgICAgICBpZiAocHJvdG9jb2xT
dHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNbaV1dKQotICAgICAg
ICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWlu
RW51bSljb25zdGFudFZhbHVlc1tpXTsKLQotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0K
LQotfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3Rv
Y29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbE9iamVjdHMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlz
cGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVz
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5o
PgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQotQHByb3RvY29sIFRlc3RQcm90b2NvbENv
bW1hbmREb21haW5Eb21haW5IYW5kbGVyOwotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi1j
bGFzcyBPYmpDSW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDog
cHVibGljIEFsdGVybmF0ZUNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlciB7Ci0gICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgT2JqQ0luc3BlY3RvckNvbW1hbmRE
b21haW5CYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluRG9tYWlu
SGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQotICAgIHZpcnR1YWwg
dm9pZCBjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShsb25nIHJlcXVlc3RJZCkgb3ZlcnJpZGU7
Ci1wcml2YXRlOgotICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluRG9t
YWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
LQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQg
IlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSAiVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIK
LSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQot
dm9pZCBPYmpDSW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpjb21tYW5k
V2l0aEVudW1SZXR1cm5WYWx1ZShsb25nIHJlcXVlc3RJZCkKLXsKLSAgICBpZiAoIVttX2RlbGVn
YXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFs
dWVXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsKLSAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNw
YXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidDb21tYW5kRG9tYWluLmNvbW1hbmRXaXRoRW51bVJl
dHVyblZhbHVlJyB3YXMgbm90IGZvdW5kIl9zKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlk
IGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNo
ZXI6OlNlcnZlckVycm9yLCBlcnJvcik7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNl
bmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgfTsKLQotICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4o
VGVzdFByb3RvY29sQ29tbWFuZERvbWFpbkNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlUmV0dXJu
VmFsdWUgcmV0dXJuVmFsdWUpIHsKLSAgICAgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0T2Jq
ZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRT
dHJpbmcoInJldHVyblZhbHVlIl9zLCB0b1Byb3RvY29sU3RyaW5nKHJldHVyblZhbHVlKSk7Ci0g
ICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1v
dmUocmVzdWx0T2JqZWN0KSwgZmFsc2UpOwotICAgIH07Ci0KLSAgICBbbV9kZWxlZ2F0ZSBjb21t
YW5kV2l0aEVudW1SZXR1cm5WYWx1ZVdpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3Vj
Y2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107Ci19Ci0KLQotfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1t
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0
UHJvdG9jb2wuaD4KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1A
aW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAotQHByb3BlcnR5
IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNldENvbW1hbmREb21haW5IYW5kbGVyOikgaWQ8
VGVzdFByb3RvY29sQ29tbWFuZERvbWFpbkRvbWFpbkhhbmRsZXI+IGNvbW1hbmREb21haW5IYW5k
bGVyOwotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBUZXN0UHJvdG9jb2xFdmVudERv
bWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqZXZlbnREb21haW5FdmVudERpc3BhdGNoZXI7Ci1A
ZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRp
b24uaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0
ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21l
bnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIElu
c3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KLXsK
LSAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotICAgIGlk
PFRlc3RQcm90b2NvbENvbW1hbmREb21haW5Eb21haW5IYW5kbGVyPiBfY29tbWFuZERvbWFpbkhh
bmRsZXI7Ci0gICAgVGVzdFByb3RvY29sRXZlbnREb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIg
Kl9ldmVudERvbWFpbkV2ZW50RGlzcGF0Y2hlcjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVy
Ci17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJl
dHVybiBuaWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIpOwotICAgIF9jb250cm9sbGVyID0gY29u
dHJvbGxlcjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAg
W19jb21tYW5kRG9tYWluSGFuZGxlciByZWxlYXNlXTsKLSAgICBbX2V2ZW50RG9tYWluRXZlbnRE
aXNwYXRjaGVyIHJlbGVhc2VdOwotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAodm9pZClz
ZXRDb21tYW5kRG9tYWluSGFuZGxlcjooaWQ8VGVzdFByb3RvY29sQ29tbWFuZERvbWFpbkRvbWFp
bkhhbmRsZXI+KWhhbmRsZXIKLXsKLSAgICBpZiAoaGFuZGxlciA9PSBfY29tbWFuZERvbWFpbkhh
bmRsZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIFtfY29tbWFuZERvbWFpbkhhbmRsZXIgcmVs
ZWFzZV07Ci0gICAgX2NvbW1hbmREb21haW5IYW5kbGVyID0gW2hhbmRsZXIgcmV0YWluXTsKLQot
ICAgIGF1dG8gYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IG1ha2VVbmlxdWU8T2JqQ0luc3BlY3RvckNv
bW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7Ci0gICAgYXV0byBhbHRlcm5h
dGVBZ2VudCA9IG1ha2VVbmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8Q29tbWFuZERv
bWFpbkJhY2tlbmREaXNwYXRjaGVyLCBBbHRlcm5hdGVDb21tYW5kRG9tYWluQmFja2VuZERpc3Bh
dGNoZXI+PigiQ29tbWFuZERvbWFpbiJfcywgKl9jb250cm9sbGVyLCBXVEZNb3ZlKGFsdGVybmF0
ZURpc3BhdGNoZXIpKTsKLSAgICBfY29udHJvbGxlci0+YXBwZW5kRXh0cmFBZ2VudChXVEZNb3Zl
KGFsdGVybmF0ZUFnZW50KSk7Ci19Ci0KLS0gKGlkPFRlc3RQcm90b2NvbENvbW1hbmREb21haW5E
b21haW5IYW5kbGVyPiljb21tYW5kRG9tYWluSGFuZGxlcgotewotICAgIHJldHVybiBfY29tbWFu
ZERvbWFpbkhhbmRsZXI7Ci19Ci0KLS0gKFRlc3RQcm90b2NvbEV2ZW50RG9tYWluRG9tYWluRXZl
bnREaXNwYXRjaGVyICopZXZlbnREb21haW5FdmVudERpc3BhdGNoZXIKLXsKLSAgICBpZiAoIV9l
dmVudERvbWFpbkV2ZW50RGlzcGF0Y2hlcikKLSAgICAgICAgX2V2ZW50RG9tYWluRXZlbnREaXNw
YXRjaGVyID0gW1tUZXN0UHJvdG9jb2xFdmVudERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciBh
bGxvY10gaW5pdFdpdGhDb250cm9sbGVyOl9jb250cm9sbGVyXTsKLSAgICByZXR1cm4gX2V2ZW50
RG9tYWluRXZlbnREaXNwYXRjaGVyOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xF
dmVudERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51
bS12YWx1ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5n
IG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xFdmVu
dERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlcgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9y
Q29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENv
bnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgotewot
ICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4g
bmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xs
ZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZXZlbnRXaXRoRW51bVBhcmFtZXRl
cldpdGhQYXJhbWV0ZXI6KFRlc3RQcm90b2NvbEV2ZW50RG9tYWluRXZlbnRXaXRoRW51bVBhcmFt
ZXRlclBhcmFtZXRlcilwYXJhbWV0ZXIKLXsKLSAgICBjb25zdCBGcm9udGVuZFJvdXRlciYgcm91
dGVyID0gX2NvbnRyb2xsZXItPmZyb250ZW5kUm91dGVyKCk7Ci0KLSAgICBSZWY8SlNPTjo6T2Jq
ZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3Nh
Z2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRXZlbnREb21haW4uZXZlbnRXaXRoRW51bVBhcmFt
ZXRlciJfcyk7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygicGFyYW1ldGVyIl9z
LCB0b1Byb3RvY29sU3RyaW5nKHBhcmFtZXRlcikpOwotICAgIGpzb25NZXNzYWdlLT5zZXRPYmpl
Y3QoInBhcmFtcyJfcywgV1RGTW92ZShwYXJhbXNPYmplY3QpKTsKLSAgICByb3V0ZXIuc2VuZEV2
ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12
YWx1ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0j
aW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9y
L1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgotCi0KLQotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRl
Z2VyLCBUZXN0UHJvdG9jb2xQbGF0Zm9ybSkgewotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxs
LAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYywKLSAgICBUZXN0UHJvdG9jb2xQbGF0
Zm9ybUlPUywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TLAotfTsKLQotCi10eXBlZGVm
IE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bSkgewotICAgIFRl
c3RQcm90b2NvbFR5cGVEb21haW5FbnVtU2hhcmVkLAotICAgIFRlc3RQcm90b2NvbFR5cGVEb21h
aW5FbnVtUmVkLAotICAgIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtR3JlZW4sCi0gICAgVGVz
dFByb3RvY29sVHlwZURvbWFpbkVudW1CbHVlLAotfTsKLQotCi0KLUBwcm90b2NvbCBUZXN0UHJv
dG9jb2xDb21tYW5kRG9tYWluRG9tYWluSGFuZGxlciA8TlNPYmplY3Q+Ci1Ab3B0aW9uYWwKLS0g
KHZvaWQpY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWVXaXRoRXJyb3JDYWxsYmFjazoodm9pZChe
KShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4p
KFRlc3RQcm90b2NvbENvbW1hbmREb21haW5Db21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZVJldHVy
blZhbHVlIHJldHVyblZhbHVlKSlzdWNjZXNzQ2FsbGJhY2s7Ci1AZW5kCi0KLV9fYXR0cmlidXRl
X18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xFdmVu
dERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciA6IE5TT2JqZWN0Ci0tICh2b2lkKWV2ZW50V2l0
aEVudW1QYXJhbWV0ZXJXaXRoUGFyYW1ldGVyOihUZXN0UHJvdG9jb2xFdmVudERvbWFpbkV2ZW50
V2l0aEVudW1QYXJhbWV0ZXJQYXJhbWV0ZXIpcGFyYW1ldGVyOwotQGVuZAotCi0KLSNpbXBvcnQg
PFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4KLQot
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFs
dWVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2lt
cG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJp
dmF0ZS5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250
cm9sbGVyLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi1AaW50ZXJmYWNlIFRlc3RQ
cm90b2NvbEV2ZW50RG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyIChQcml2YXRlKQotLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooSW5zcGVjdG9yOjpBdWdtZW50YWJsZUluc3Bl
Y3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXI7Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xJbnRlcm5hbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVz
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9y
dCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJh
eUNvbnZlcnNpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBPYmpDRW51bVR5cGU+Ci1PcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0
cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3Ry
aW5nKFRlc3RQcm90b2NvbFBsYXRmb3JtIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewot
ICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1BbGw6Ci0gICAgICAgIHJldHVybiAiYWxsIl9z
OwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOgotICAgICAgICByZXR1cm4g
ImdlbmVyaWMiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzoKLSAgICAgICAg
cmV0dXJuICJpb3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOgotICAg
ICAgICByZXR1cm4gIm1hY29zIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9w
dGlvbmFsPFRlc3RQcm90b2NvbFBsYXRmb3JtPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gImFsbCIpCi0gICAgICAgIHJldHVybiBU
ZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDsKLSAgICBpZiAodmFsdWUgPT0gImdlbmVyaWMiKQotICAg
ICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOwotICAgIGlmICh2YWx1ZSA9
PSAiaW9zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOwotICAgIGlm
ICh2YWx1ZSA9PSAibWFjb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1N
YWNPUzsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi0KLWlubGluZSBTdHJpbmcgdG9Q
cm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bSB2YWx1ZSkKLXsKLSAgICBz
d2l0Y2godmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtU2hhcmVk
OgotICAgICAgICByZXR1cm4gInNoYXJlZCJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFR5cGVE
b21haW5FbnVtUmVkOgotICAgICAgICByZXR1cm4gInJlZCJfczsKLSAgICBjYXNlIFRlc3RQcm90
b2NvbFR5cGVEb21haW5FbnVtR3JlZW46Ci0gICAgICAgIHJldHVybiAiZ3JlZW4iX3M7Ci0gICAg
Y2FzZSBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bUJsdWU6Ci0gICAgICAgIHJldHVybiAiYmx1
ZSJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJvdG9j
b2xUeXBlRG9tYWluRW51bT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUp
Ci17Ci0gICAgaWYgKHZhbHVlID09ICJzaGFyZWQiKQotICAgICAgICByZXR1cm4gVGVzdFByb3Rv
Y29sVHlwZURvbWFpbkVudW1TaGFyZWQ7Ci0gICAgaWYgKHZhbHVlID09ICJyZWQiKQotICAgICAg
ICByZXR1cm4gVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1SZWQ7Ci0gICAgaWYgKHZhbHVlID09
ICJncmVlbiIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bUdyZWVu
OwotICAgIGlmICh2YWx1ZSA9PSAiYmx1ZSIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xU
eXBlRG9tYWluRW51bUJsdWU7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5t
bQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2lt
cG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JX
SVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3Rv
cjsKLQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFR5cGVEb21haW5E
b21haW4pCi0KLSsgKHZvaWQpX3BhcnNlVHlwZURvbWFpbkVudW06KE5TTnVtYmVyICoqKW91dFZh
bHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFR5cGVEb21haW5Eb21haW4pCi0KLSsgKHZvaWQp
X3BhcnNlVHlwZURvbWFpbkVudW06KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihp
ZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBb
TlNTdHJpbmcgY2xhc3NdKTsKLSAgICBPcHRpb25hbDxUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51
bT4gcmVzdWx0ID0gSW5zcGVjdG9yOjpmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sVHlw
ZURvbWFpbkVudW0+KHBheWxvYWQpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX0VOVU1f
VkFMVUUocmVzdWx0LCBAIlR5cGVEb21haW5FbnVtIik7Ci0gICAgKm91dFZhbHVlID0gQChyZXN1
bHQudmFsdWUoKSk7Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0K
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90
b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5o
IgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4K
LSNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgot
Ci11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9ldmVudC10YXJnZXRUeXBlLW1hdGNo
aW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2V2ZW50LXRhcmdl
dFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tcmVzdWx0CmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOTQ0ZjQ4ZmFiMy4uMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0
ZWQvZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1y
ZXN1bHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMDYzICswLDAgQEAKLSMjIyBCZWdpbiBGaWxlOiBJ
bnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLS8vIERvbWFpbgot
SW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiRG9tYWluIiwgbnVsbCk7Ci1JbnNwZWN0
b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiRG9tYWluLkNvbW1hbmQiLCBudWxsLCBbXSwgW10p
OwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckV2ZW50KCJEb21haW4uRXZlbnQiLCBbInBhZ2Ui
LCAid29ya2VyIl0sIFtdKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW5EaXNwYXRj
aGVyID0gSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRpc3BhdGNoZXIuYmluZChJbnNwZWN0b3JC
YWNrZW5kLCAiRG9tYWluIik7Ci1JbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJEb21h
aW4iLCBbInBhZ2UiXSk7Ci0jIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5q
cwotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGlu
Zy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKLSNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0KLW5hbWVz
cGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1w
dWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3Bh
dGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNw
YXRjaGVyKTsgfQotICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNv
bnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KLXByaXZhdGU6Ci0gICAg
UmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwotfTsKLQotCi1j
bGFzcyBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+QWx0ZXJuYXRlRG9tYWlu
QmFja2VuZERpc3BhdGNoZXIoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChsb25nIGNh
bGxJZCkgPSAwOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSNlbmRpZiAvLyBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSMjIyBFbmQgRmlsZTogVGVz
dEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFj
a2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVu
dC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5j
bHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmlu
ZzsKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotY2xhc3Mg
QWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXI7Ci0jZW5kaWYgLy8gRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0KLWNsYXNzIERvbWFpbkJhY2tlbmREaXNwYXRj
aGVySGFuZGxlciB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIENvbW1hbmQoRXJyb3JTdHJp
bmcmKSA9IDA7Ci1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB+RG9tYWluQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyKCk7Ci19OwotCi1jbGFzcyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6
IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgc3Rh
dGljIFJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVy
JiwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdm9pZCBkaXNwYXRjaChs
b25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYg
bWVzc2FnZSkgb3ZlcnJpZGU7Ci1wcml2YXRlOgotICAgIHZvaWQgQ29tbWFuZChsb25nIHJlcXVl
c3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKLSNpZiBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLXB1YmxpYzoKLSAgICB2b2lkIHNldEFsdGVy
bmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0
ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hl
cjsgfQotcHJpdmF0ZToKLSAgICBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciogbV9h
bHRlcm5hdGVEaXNwYXRjaGVyIHsgbnVsbHB0ciB9OwotI2VuZGlmCi1wcml2YXRlOgotICAgIERv
bWFpbkJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiwgRG9tYWluQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBt
X2FnZW50IHsgbnVsbHB0ciB9OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMg
RW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9K
U09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCi0jaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgot
I2VuZGlmCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1Eb21haW5CYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXI6On5Eb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KLQotUmVmPERv
bWFpbkJhY2tlbmREaXNwYXRjaGVyPiBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEJh
Y2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgRG9tYWluQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyKiBhZ2VudCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKLX0KLQotRG9tYWluQmFj
a2VuZERpc3BhdGNoZXI6OkRvbWFpbkJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVy
JiBiYWNrZW5kRGlzcGF0Y2hlciwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2Vu
dCkKLSAgICA6IFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVy
KQotICAgICwgbV9hZ2VudChhZ2VudCkKLXsKLSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdp
c3RlckRpc3BhdGNoZXJGb3JEb21haW4oIkRvbWFpbiJfcywgdGhpcyk7Ci19Ci0KLXZvaWQgRG9t
YWluQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJp
bmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQotewotICAgIFJlZjxEb21h
aW5CYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7Ci0KLSAgICBSZWZQdHI8SlNPTjo6
T2JqZWN0PiBwYXJhbWV0ZXJzOwotICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBw
YXJhbWV0ZXJzKTsKLQotICAgIGlmIChtZXRob2QgPT0gIkNvbW1hbmQiKQotICAgICAgICBDb21t
YW5kKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7Ci0gICAgZWxzZQotICAgICAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVy
OjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uIiArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQi
KTsKLX0KLQotdm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVl
c3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKLXsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKLSAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0g
ICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+Q29tbWFuZChyZXF1ZXN0SWQpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBS
ZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIG1f
YWdlbnQtPkNvbW1hbmQoZXJyb3IpOwotCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShy
ZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5y
ZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92
ZShlcnJvcikpOwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxl
OiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250
ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50
LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNs
dWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7
Ci0KLWNsYXNzIEZyb250ZW5kUm91dGVyOwotCi1jbGFzcyBEb21haW5Gcm9udGVuZERpc3BhdGNo
ZXIgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIERvbWFpbkZy
b250ZW5kRGlzcGF0Y2hlcihGcm9udGVuZFJvdXRlciYgZnJvbnRlbmRSb3V0ZXIpIDogbV9mcm9u
dGVuZFJvdXRlcihmcm9udGVuZFJvdXRlcikgeyB9Ci0gICAgdm9pZCBFdmVudCgpOwotcHJpdmF0
ZToKLSAgICBGcm9udGVuZFJvdXRlciYgbV9mcm9udGVuZFJvdXRlcjsKLX07Ci0KLX0gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5o
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFp
bi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNw
YXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRS
b3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNw
ZWN0b3IgewotCi12b2lkIERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcjo6RXZlbnQoKQotewotICAg
IFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
LSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3Mp
OwotCi0gICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0
cmluZygpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTog
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xPYmplY3RzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudC10YXJn
ZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9B
c3NlcnRpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotbmFtZXNwYWNlIFBy
b3RvY29sIHsKLQotCi0KLQotCi0KLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3Rz
LmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4t
ZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0
cy5oIgotCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotbmFtZXNwYWNlIFByb3RvY29sIHsK
LQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2Fi
bGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVycy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQotQHByb3RvY29sIFRlc3RQcm90
b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI7Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLWNs
YXNzIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBB
bHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7Ci1wdWJsaWM6Ci0gICAgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVy
KGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0
ZSA9IGhhbmRsZXI7IH0KLSAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChsb25nIHJlcXVlc3RJZCkg
b3ZlcnJpZGU7Ci1wcml2YXRlOgotICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xEb21haW5E
b21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFp
bi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2Vu
ZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2luY2x1ZGUgPHd0Zi9KU09O
VmFsdWVzLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi12b2lkIE9iakNJbnNwZWN0b3JE
b21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVlc3RJZCkKLXsKLSAgICBp
ZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoQ29tbWFuZFdpdGhF
cnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6
Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi5Db21tYW5kJyB3YXMgbm90IGZvdW5kIl9zKTsKLSAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJv
cikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJl
cXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7Ci0gICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgfTsKLQotICAg
IGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNl
bmRSZXNwb25zZShyZXF1ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKLSAg
ICB9OwotCi0gICAgW21fZGVsZWdhdGUgQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2Fs
bGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107Ci19Ci0KLQotfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3Bh
dGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudC10YXJnZXRUeXBlLW1hdGNo
aW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4K
LQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRl
c3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAotQHByb3BlcnR5IChub25hdG9taWMs
IHJldGFpbiwgc2V0dGVyPXNldERvbWFpbkhhbmRsZXI6KSBpZDxUZXN0UHJvdG9jb2xEb21haW5E
b21haW5IYW5kbGVyPiBkb21haW5IYW5kbGVyOwotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRv
bmx5KSBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKmRvbWFpbkV2ZW50
RGlzcGF0Y2hlcjsKLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3Vy
YXRpb24uaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRhcmdldFR5cGUtbWF0Y2hp
bmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgot
Ci0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29s
QmFja2VuZERpc3BhdGNoZXJzLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVE
aXNwYXRjaGFibGVBZ2VudC5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJ
bnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9y
OwotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgotewotICAgIEF1
Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci0gICAgaWQ8VGVzdFBy
b3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4gX2RvbWFpbkhhbmRsZXI7Ci0gICAgVGVzdFByb3Rv
Y29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyICpfZG9tYWluRXZlbnREaXNwYXRjaGVyOwot
fQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3Bl
Y3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwot
ICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxl
cik7Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQot
Ci0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBbX2RvbWFpbkhhbmRsZXIgcmVsZWFzZV07Ci0gICAg
W19kb21haW5FdmVudERpc3BhdGNoZXIgcmVsZWFzZV07Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwot
fQotCi0tICh2b2lkKXNldERvbWFpbkhhbmRsZXI6KGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFp
bkhhbmRsZXI+KWhhbmRsZXIKLXsKLSAgICBpZiAoaGFuZGxlciA9PSBfZG9tYWluSGFuZGxlcikK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgW19kb21haW5IYW5kbGVyIHJlbGVhc2VdOwotICAgIF9k
b21haW5IYW5kbGVyID0gW2hhbmRsZXIgcmV0YWluXTsKLQotICAgIGF1dG8gYWx0ZXJuYXRlRGlz
cGF0Y2hlciA9IG1ha2VVbmlxdWU8T2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVy
PihoYW5kbGVyKTsKLSAgICBhdXRvIGFsdGVybmF0ZUFnZW50ID0gbWFrZVVuaXF1ZTxBbHRlcm5h
dGVEaXNwYXRjaGFibGVBZ2VudDxEb21haW5CYWNrZW5kRGlzcGF0Y2hlciwgQWx0ZXJuYXRlRG9t
YWluQmFja2VuZERpc3BhdGNoZXI+PigiRG9tYWluIl9zLCAqX2NvbnRyb2xsZXIsIFdURk1vdmUo
YWx0ZXJuYXRlRGlzcGF0Y2hlcikpOwotICAgIF9jb250cm9sbGVyLT5hcHBlbmRFeHRyYUFnZW50
KFdURk1vdmUoYWx0ZXJuYXRlQWdlbnQpKTsKLX0KLQotLSAoaWQ8VGVzdFByb3RvY29sRG9tYWlu
RG9tYWluSGFuZGxlcj4pZG9tYWluSGFuZGxlcgotewotICAgIHJldHVybiBfZG9tYWluSGFuZGxl
cjsKLX0KLQotLSAoVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyICopZG9t
YWluRXZlbnREaXNwYXRjaGVyCi17Ci0gICAgaWYgKCFfZG9tYWluRXZlbnREaXNwYXRjaGVyKQot
ICAgICAgICBfZG9tYWluRXZlbnREaXNwYXRjaGVyID0gW1tUZXN0UHJvdG9jb2xEb21haW5Eb21h
aW5FdmVudERpc3BhdGNoZXIgYWxsb2NdIGluaXRXaXRoQ29udHJvbGxlcjpfY29udHJvbGxlcl07
Ci0gICAgcmV0dXJuIF9kb21haW5FdmVudERpc3BhdGNoZXI7Ci19Ci0KLUBlbmQKLQotCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlw
ZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBv
cnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucy5oIgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNw
YWNlIEluc3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbERvbWFpbkRvbWFp
bkV2ZW50RGlzcGF0Y2hlcgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciog
X2NvbnRyb2xsZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1
Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBb
c3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFT
U0VSVChjb250cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0
dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpRXZlbnQKLXsKLSAgICBjb25zdCBGcm9udGVuZFJvdXRl
ciYgcm91dGVyID0gX2NvbnRyb2xsZXItPmZyb250ZW5kUm91dGVyKCk7Ci0KLSAgICBSZWY8SlNP
Tjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNv
bk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9zKTsKLSAgICBy
b3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Ci19Ci0KLUBlbmQK
LQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxG
b3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3Rv
Y29sSlNPTk9iamVjdC5oPgotCi0KLQotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0
UHJvdG9jb2xQbGF0Zm9ybSkgewotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsLAotICAgIFRl
c3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUywK
LSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TLAotfTsKLQotCi0KLQotCi1AcHJvdG9jb2wg
VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlciA8TlNPYmplY3Q+Ci1Ab3B0aW9uYWwKLS0g
KHZvaWQpQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikp
ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikodm9pZCkpc3VjY2Vzc0NhbGxi
YWNrOwotQGVuZAotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBp
bnRlcmZhY2UgVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyIDogTlNPYmpl
Y3QKLS0gKHZvaWQpRXZlbnQ7Ci1AZW5kCi0KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVBy
b3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1k
b21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90
b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50
YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0K
LUBpbnRlcmZhY2UgVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyIChQcml2
YXRlKQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooSW5zcGVjdG9yOjpBdWdt
ZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXI7Ci1AZW5kCi0KLQotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFBy
b3RvY29sLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNp
b25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPYmpD
RW51bVR5cGU+Ci1PcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25z
dCBTdHJpbmcmIHZhbHVlKTsKLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQ
cm90b2NvbFBsYXRmb3JtIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2Ug
VGVzdFByb3RvY29sUGxhdGZvcm1BbGw6Ci0gICAgICAgIHJldHVybiAiYWxsIl9zOwotICAgIGNh
c2UgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOgotICAgICAgICByZXR1cm4gImdlbmVyaWMi
X3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzoKLSAgICAgICAgcmV0dXJuICJp
b3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOgotICAgICAgICByZXR1
cm4gIm1hY29zIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRl
c3RQcm90b2NvbFBsYXRmb3JtPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1
ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gImFsbCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9j
b2xQbGF0Zm9ybUFsbDsKLSAgICBpZiAodmFsdWUgPT0gImdlbmVyaWMiKQotICAgICAgICByZXR1
cm4gVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOwotICAgIGlmICh2YWx1ZSA9PSAiaW9zIikK
LSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOwotICAgIGlmICh2YWx1ZSA9
PSAibWFjb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzsKLSAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQot
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJs
ZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0j
aW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLQotI2ltcG9ydCAiVGVzdFBy
b3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCi0jaW1wb3J0IDxX
ZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotCi11c2luZyBuYW1l
c3BhY2UgSW5zcGVjdG9yOwotCi0KLQotCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1t
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRj
aGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0j
aW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPFdlYkluc3Bl
Y3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0
aW9ucy5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIElu
c3BlY3RvcjsKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJp
Yy9leHBlY3RlZC9ldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0IGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhw
ZWN0ZWQvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uLXJlc3VsdApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGE5NWJhNTU4Y2YuLjAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVj
dGVkL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQKKysrIC9kZXYv
bnVsbApAQCAtMSwxMjE3ICswLDAgQEAKLSMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5k
Q29tbWFuZHMuanMKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0
aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotLy8gRGF0YWJhc2UKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21h
aW4oIkRhdGFiYXNlIiwgbnVsbCk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnQoIkRh
dGFiYXNlLmRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMiLCBudWxsLCBbImNvbHVtbk5hbWVz
IiwgIm5vdGVzIiwgInRpbWVzdGFtcCIsICJ2YWx1ZXMiLCAicGF5bG9hZCIsICJzcWxFcnJvciIs
ICJzY3JlZW5Db2xvciIsICJhbHRlcm5hdGVDb2xvcnMiLCAicHJpbnRDb2xvciJdKTsKLUluc3Bl
Y3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudCgiRGF0YWJhc2UuZGlkRXhlY3V0ZU5vT3B0aW9uYWxQ
YXJhbWV0ZXJzIiwgbnVsbCwgWyJjb2x1bW5OYW1lcyIsICJub3RlcyIsICJ0aW1lc3RhbXAiLCAi
dmFsdWVzIiwgInBheWxvYWQiLCAic3FsRXJyb3IiLCAic2NyZWVuQ29sb3IiLCAiYWx0ZXJuYXRl
Q29sb3JzIiwgInByaW50Q29sb3IiXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRGF0YWJh
c2VEaXNwYXRjaGVyID0gSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRpc3BhdGNoZXIuYmluZChJ
bnNwZWN0b3JCYWNrZW5kLCAiRGF0YWJhc2UiKTsKLUluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVE
b21haW4oIkRhdGFiYXNlIiwgbnVsbCk7Ci0jIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRD
b21tYW5kcy5qcwotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0
aW9uYWwtcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgotI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLQotbmFtZXNwYWNlIElu
c3BlY3RvciB7Ci0KLWNsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoK
LSAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4m
JiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIp
OyB9Ci0gICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQotcHJpdmF0ZToKLSAgICBSZWZQdHI8
QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Ci19OwotCi0KLQotCi19IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQotIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFt
ZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0j
cHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdHlwZWRl
ZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMj
IyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgot
I2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotI2lu
Y2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNlbmRpZgotCi1uYW1l
c3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMg
RW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVz
dFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFz
cyBGcm9udGVuZFJvdXRlcjsKLQotY2xhc3MgRGF0YWJhc2VGcm9udGVuZERpc3BhdGNoZXIgewot
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIERhdGFiYXNlRnJvbnRl
bmREaXNwYXRjaGVyKEZyb250ZW5kUm91dGVyJiBmcm9udGVuZFJvdXRlcikgOiBtX2Zyb250ZW5k
Um91dGVyKGZyb250ZW5kUm91dGVyKSB7IH0KLSAgICB2b2lkIGRpZEV4ZWN1dGVPcHRpb25hbFBh
cmFtZXRlcnMoUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gY29sdW1uTmFtZXMsIGNvbnN0
IFN0cmluZyogbm90ZXMsIGNvbnN0IGRvdWJsZSogdGltZXN0YW1wLCBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiB2YWx1ZXMsIFJlZlB0cjxKU09OOjpWYWx1ZT4gcGF5bG9hZCwgUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gc3FsRXJyb3IsIGNvbnN0IFN0cmluZyogc2Ny
ZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0
PiBhbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyogcHJpbnRDb2xvcik7Ci0gICAgdm9pZCBk
aWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMoUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5n
Pj4gY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJl
ZlB0cjxKU09OOjpPYmplY3Q+IHZhbHVlcywgUmVmUHRyPEpTT046OlZhbHVlPiBwYXlsb2FkLCBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBzcWxFcnJvciwgY29u
c3QgU3RyaW5nJiBzY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFi
YXNlOjpDb2xvckxpc3Q+IGFsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBwcmludENvbG9y
KTsKLXByaXZhdGU6Ci0gICAgRnJvbnRlbmRSb3V0ZXImIG1fZnJvbnRlbmRSb3V0ZXI7Ci19Owot
Ci19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlz
cGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3Bw
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwt
cGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVy
cy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewotCi12b2lkIERhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyOjpkaWRFeGVjdXRlT3B0aW9uYWxQ
YXJhbWV0ZXJzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IGNvbHVtbk5hbWVzLCBjb25z
dCBTdHJpbmcqIG5vdGVzLCBjb25zdCBkb3VibGUqIHRpbWVzdGFtcCwgUmVmUHRyPEpTT046Ok9i
amVjdD4gdmFsdWVzLCBSZWZQdHI8SlNPTjo6VmFsdWU+IHBheWxvYWQsIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVycm9yLCBjb25zdCBTdHJpbmcqIHNj
cmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlz
dD4gYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcqIHByaW50Q29sb3IpCi17Ci0gICAgUmVm
PEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAg
IGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRhdGFiYXNlLmRpZEV4ZWN1dGVP
cHRpb25hbFBhcmFtZXRlcnMiX3MpOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHBhcmFtc09iamVj
dCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgaWYgKGNvbHVtbk5hbWVzKQotICAgICAg
ICBwYXJhbXNPYmplY3QtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgY29sdW1uTmFtZXMpOwot
ICAgIGlmIChub3RlcykKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoIm5vdGVzIl9z
LCAqbm90ZXMpOwotICAgIGlmICh0aW1lc3RhbXApCi0gICAgICAgIHBhcmFtc09iamVjdC0+c2V0
RG91YmxlKCJ0aW1lc3RhbXAiX3MsICp0aW1lc3RhbXApOwotICAgIGlmICh2YWx1ZXMpCi0gICAg
ICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIHZhbHVlcyk7Ci0gICAgaWYg
KHBheWxvYWQpCi0gICAgICAgIHBhcmFtc09iamVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsICpw
YXlsb2FkKTsKLSAgICBpZiAoc3FsRXJyb3IpCi0gICAgICAgIHBhcmFtc09iamVjdC0+c2V0T2Jq
ZWN0KCJzcWxFcnJvciJfcywgc3FsRXJyb3IpOwotICAgIGlmIChzY3JlZW5Db2xvcikKLSAgICAg
ICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCAqc2NyZWVuQ29sb3Ip
OwotICAgIGlmIChhbHRlcm5hdGVDb2xvcnMpCi0gICAgICAgIHBhcmFtc09iamVjdC0+c2V0QXJy
YXkoImFsdGVybmF0ZUNvbG9ycyJfcywgYWx0ZXJuYXRlQ29sb3JzKTsKLSAgICBpZiAocHJpbnRD
b2xvcikKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsICpw
cmludENvbG9yKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiX3MsIFdURk1v
dmUocGFyYW1zT2JqZWN0KSk7Ci0KLSAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChqc29u
TWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwotfQotCi12b2lkIERhdGFiYXNlRnJvbnRlbmREaXNw
YXRjaGVyOjpkaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMoUmVmUHRyPEpTT046OkFycmF5
T2Y8U3RyaW5nPj4gY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgbm90ZXMsIGRvdWJsZSB0aW1l
c3RhbXAsIFJlZlB0cjxKU09OOjpPYmplY3Q+IHZhbHVlcywgUmVmUHRyPEpTT046OlZhbHVlPiBw
YXlsb2FkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBzcWxF
cnJvciwgY29uc3QgU3RyaW5nJiBzY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IGFsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBw
cmludENvbG9yKQotewotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3Ms
ICJEYXRhYmFzZS5kaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMiX3MpOwotICAgIFJlZjxK
U09OOjpPYmplY3Q+IHBhcmFtc09iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAg
cGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIGNvbHVtbk5hbWVzKTsKLSAg
ICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygibm90ZXMiX3MsIG5vdGVzKTsKLSAgICBwYXJhbXNP
YmplY3QtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCB0aW1lc3RhbXApOwotICAgIHBhcmFtc09i
amVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIHZhbHVlcyk7Ci0gICAgcGFyYW1zT2JqZWN0LT5z
ZXRWYWx1ZSgicGF5bG9hZCJfcywgcGF5bG9hZCk7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRPYmpl
Y3QoInNxbEVycm9yIl9zLCBzcWxFcnJvcik7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmco
InNjcmVlbkNvbG9yIl9zLCBzY3JlZW5Db2xvcik7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJh
eSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCBhbHRlcm5hdGVDb2xvcnMpOwotICAgIHBhcmFtc09iamVj
dC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCBwcmludENvbG9yKTsKLSAgICBqc29uTWVzc2Fn
ZS0+c2V0T2JqZWN0KCJwYXJhbXMiX3MsIFdURk1vdmUocGFyYW1zT2JqZWN0KSk7Ci0KLSAgICBt
X2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwot
fQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMu
aAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFs
LXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclBy
b3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotCi1uYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKLQotCi0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLQotCi0vLyBGb3J3YXJk
IGRlY2xhcmF0aW9ucy4KLW5hbWVzcGFjZSBEYXRhYmFzZSB7Ci1jbGFzcyBFcnJvcjsKLX0gLy8g
RGF0YWJhc2UKLS8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KLQotCi0vLyBUeXBlZGVm
cy4KLW5hbWVzcGFjZSBEYXRhYmFzZSB7Ci0vKiBVbmlxdWUgaWRlbnRpZmllciBvZiBEYXRhYmFz
ZSBvYmplY3QuICovCi10eXBlZGVmIFN0cmluZyBEYXRhYmFzZUlkOwotdHlwZWRlZiBTdHJpbmcg
UHJpbWFyeUNvbG9yczsKLXR5cGVkZWYgSlNPTjo6QXJyYXlPZjxTdHJpbmc+IENvbG9yTGlzdDsK
LX0gLy8gRGF0YWJhc2UKLS8vIEVuZCBvZiB0eXBlZGVmcy4KLQotbmFtZXNwYWNlIERhdGFiYXNl
IHsKLS8qIERhdGFiYXNlIGVycm9yLiAqLwotY2xhc3MgRXJyb3IgOiBwdWJsaWMgSlNPTjo6T2Jq
ZWN0QmFzZSB7Ci1wdWJsaWM6Ci0gICAgZW51bSB7Ci0gICAgICAgIE5vRmllbGRzU2V0ID0gMCwK
LSAgICAgICAgTWVzc2FnZVNldCA9IDEgPDwgMCwKLSAgICAgICAgQ29kZVNldCA9IDEgPDwgMSwK
LSAgICAgICAgQWxsRmllbGRzU2V0ID0gKE1lc3NhZ2VTZXQgfCBDb2RlU2V0KQotICAgIH07Ci0K
LSAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+Ci0gICAgY2xhc3MgQnVpbGRlciB7Ci0gICAgcHJpdmF0
ZToKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7Ci0KLSAgICAgICAgdGVt
cGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUg
fCBTVEVQPio+KHRoaXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcihSZWY8LypFcnJv
ciovSlNPTjo6T2JqZWN0PiYmIG9iamVjdCkKLSAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92
ZShvYmplY3QpKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9
PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKLSAgICAg
ICAgfQotICAgICAgICBmcmllbmQgY2xhc3MgRXJyb3I7Ci0gICAgcHVibGljOgotCi0gICAgICAg
IEJ1aWxkZXI8U1RBVEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIHZh
bHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTWVz
c2FnZVNldCksIHByb3BlcnR5X21lc3NhZ2VfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldFN0cmluZygibWVzc2FnZSJfcywgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxNZXNzYWdlU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcjxT
VEFURSB8IENvZGVTZXQ+JiBzZXRDb2RlKGludCB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENvZGVTZXQpLCBwcm9wZXJ0eV9jb2RlX2FscmVh
ZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2VyKCJjb2RlIl9zLCB2YWx1
ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvZGVTZXQ+KCk7Ci0gICAgICAgIH0K
LQotICAgICAgICBSZWY8RXJyb3I+IHJlbGVhc2UoKQotICAgICAgICB7Ci0gICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkp
OwotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEVycm9yKSA9PSBzaXplb2YoSlNP
Tjo6T2JqZWN0KSwgY2Fubm90X2Nhc3QpOwotCi0gICAgICAgICAgICBSZWY8SlNPTjo6T2JqZWN0
PiBqc29uUmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKLSAgICAgICAgICAgIGF1
dG8gcmVzdWx0ID0gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8RXJyb3I+Kj4oJmpzb25S
ZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICB9Owot
Ci0gICAgLyoKLSAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6Ci0gICAgICogUmVmPEVycm9y
PiByZXN1bHQgPSBFcnJvcjo6Y3JlYXRlKCkKLSAgICAgKiAgICAgLnNldE1lc3NhZ2UoLi4uKQot
ICAgICAqICAgICAuc2V0Q29kZSguLi4pCi0gICAgICogICAgIC5yZWxlYXNlKCk7Ci0gICAgICov
Ci0gICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCi0gICAgewotICAgICAg
ICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7Ci0g
ICAgfQotfTsKLQotfSAvLyBEYXRhYmFzZQotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wK
LQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9i
amVjdHMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0
ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLQotI2lu
Y2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQot
bmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLQotCi19IC8v
IG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRh
aW5QdHIuaD4KLQotCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLX0gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVy
cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0K
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1w
YXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0
Y2hlcnMuaCIKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW5jbHVkZSAi
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMu
aD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgot
Ci0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPFdlYklu
c3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRl
ZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVj
dAotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBUZXN0UHJvdG9jb2xEYXRhYmFzZURv
bWFpbkV2ZW50RGlzcGF0Y2hlciAqZGF0YWJhc2VFdmVudERpc3BhdGNoZXI7Ci1AZW5kCi0KLQot
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbi5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2lt
cG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgotI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgotCi11c2luZyBu
YW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xs
ZXI7Ci0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5FdmVudERpc3BhdGNoZXIgKl9kYXRh
YmFzZUV2ZW50RGlzcGF0Y2hlcjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJv
bGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCi17Ci0gICAg
c2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7
Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIpOwotICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsK
LSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgW19kYXRhYmFz
ZUV2ZW50RGlzcGF0Y2hlciByZWxlYXNlXTsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLS0g
KFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluRXZlbnREaXNwYXRjaGVyICopZGF0YWJhc2VFdmVu
dERpc3BhdGNoZXIKLXsKLSAgICBpZiAoIV9kYXRhYmFzZUV2ZW50RGlzcGF0Y2hlcikKLSAgICAg
ICAgX2RhdGFiYXNlRXZlbnREaXNwYXRjaGVyID0gW1tUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFp
bkV2ZW50RGlzcGF0Y2hlciBhbGxvY10gaW5pdFdpdGhDb250cm9sbGVyOl9jb250cm9sbGVyXTsK
LSAgICByZXR1cm4gX2RhdGFiYXNlRXZlbnREaXNwYXRjaGVyOwotfQotCi1AZW5kCi0KLQotIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2Nv
bEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgot
I2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsK
LQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluRXZlbnREaXNwYXRj
aGVyCi17Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsK
LX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNw
ZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsK
LSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xs
ZXIpOwotICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1cm4gc2VsZjsKLX0K
LQotLSAodm9pZClkaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzV2l0aENvbHVtbk5hbWVzOihO
U0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopY29sdW1uTmFtZXMgbm90ZXM6KE5TU3RyaW5nICoqKW5v
dGVzIHRpbWVzdGFtcDooZG91YmxlICopdGltZXN0YW1wIHZhbHVlczooUldJUHJvdG9jb2xKU09O
T2JqZWN0ICoqKXZhbHVlcyBwYXlsb2FkOihSV0lQcm90b2NvbEpTT05PYmplY3QgKiopcGF5bG9h
ZCBzcWxFcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKilzcWxFcnJvciBzY3JlZW5D
b2xvcjooTlNTdHJpbmcgKiopc2NyZWVuQ29sb3IgYWx0ZXJuYXRlQ29sb3JzOihOU0FycmF5Lyo8
TlNTdHJpbmc+Ki8gKiopYWx0ZXJuYXRlQ29sb3JzIHByaW50Q29sb3I6KE5TU3RyaW5nICoqKXBy
aW50Q29sb3IKLXsKLSAgICBjb25zdCBGcm9udGVuZFJvdXRlciYgcm91dGVyID0gX2NvbnRyb2xs
ZXItPmZyb250ZW5kUm91dGVyKCk7Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJ
T05BTF9QQVJBTUVURVIoY29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsKLSAgICBUSFJPV19F
WENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIobm90ZXMsIEAibm90ZXMiKTsKLSAg
ICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIodmFsdWVzLCBAInZh
bHVlcyIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihw
YXlsb2FkLCBAInBheWxvYWQiKTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05B
TF9QQVJBTUVURVIoc3FsRXJyb3IsIEAic3FsRXJyb3IiKTsKLSAgICBUSFJPV19FWENFUFRJT05f
Rk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoc2NyZWVuQ29sb3IsIEAic2NyZWVuQ29sb3IiKTsK
LSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoYWx0ZXJuYXRl
Q29sb3JzLCBAImFsdGVybmF0ZUNvbG9ycyIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFE
X09QVElPTkFMX1BBUkFNRVRFUihwcmludENvbG9yLCBAInByaW50Q29sb3IiKTsKLQotICAgIFJl
ZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAg
ICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEYXRhYmFzZS5kaWRFeGVjdXRl
T3B0aW9uYWxQYXJhbWV0ZXJzIl9zKTsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBwYXJhbXNPYmpl
Y3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGlmIChjb2x1bW5OYW1lcykKLSAgICAg
ICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0cmluZ0Fy
cmF5KCgqY29sdW1uTmFtZXMpKSk7Ci0gICAgaWYgKG5vdGVzKQotICAgICAgICBwYXJhbXNPYmpl
Y3QtPnNldFN0cmluZygibm90ZXMiX3MsICgqbm90ZXMpKTsKLSAgICBpZiAodGltZXN0YW1wKQot
ICAgICAgICBwYXJhbXNPYmplY3QtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCAoKnRpbWVzdGFt
cCkpOwotICAgIGlmICh2YWx1ZXMpCi0gICAgICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJ2
YWx1ZXMiX3MsIFsoKnZhbHVlcykgdG9KU09OT2JqZWN0XSk7Ci0gICAgaWYgKHBheWxvYWQpCi0g
ICAgICAgIHBhcmFtc09iamVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFsoKnBheWxvYWQpIHRv
SlNPTk9iamVjdF0pOwotICAgIGlmIChzcWxFcnJvcikKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5z
ZXRPYmplY3QoInNxbEVycm9yIl9zLCBbKCpzcWxFcnJvcikgdG9KU09OT2JqZWN0XSk7Ci0gICAg
aWYgKHNjcmVlbkNvbG9yKQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygic2NyZWVu
Q29sb3IiX3MsICgqc2NyZWVuQ29sb3IpKTsKLSAgICBpZiAoYWx0ZXJuYXRlQ29sb3JzKQotICAg
ICAgICBwYXJhbXNPYmplY3QtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIHRvSlNPTlN0
cmluZ0FycmF5KCgqYWx0ZXJuYXRlQ29sb3JzKSkpOwotICAgIGlmIChwcmludENvbG9yKQotICAg
ICAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgKCpwcmludENvbG9y
KSk7Ci0gICAganNvbk1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIl9zLCBXVEZNb3ZlKHBhcmFt
c09iamVjdCkpOwotICAgIHJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmlu
ZygpKTsKLX0KLQotLSAodm9pZClkaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNXaXRoQ29s
dW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWNvbHVtbk5hbWVzIG5vdGVzOihOU1N0
cmluZyAqKW5vdGVzIHRpbWVzdGFtcDooZG91YmxlKXRpbWVzdGFtcCB2YWx1ZXM6KFJXSVByb3Rv
Y29sSlNPTk9iamVjdCAqKXZhbHVlcyBwYXlsb2FkOihSV0lQcm90b2NvbEpTT05PYmplY3QgKilw
YXlsb2FkIHNxbEVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICopc3FsRXJyb3Igc2Ny
ZWVuQ29sb3I6KE5TU3RyaW5nICopc2NyZWVuQ29sb3IgYWx0ZXJuYXRlQ29sb3JzOihOU0FycmF5
Lyo8TlNTdHJpbmc+Ki8gKilhbHRlcm5hdGVDb2xvcnMgcHJpbnRDb2xvcjooTlNTdHJpbmcgKilw
cmludENvbG9yCi17Ci0gICAgY29uc3QgRnJvbnRlbmRSb3V0ZXImIHJvdXRlciA9IF9jb250cm9s
bGVyLT5mcm9udGVuZFJvdXRlcigpOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJF
RF9QQVJBTUVURVIoY29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsKLSAgICBUSFJPV19FWENF
UFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihub3RlcywgQCJub3RlcyIpOwotICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHZhbHVlcywgQCJ2YWx1ZXMiKTsKLSAg
ICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihwYXlsb2FkLCBAInBheWxv
YWQiKTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihzcWxFcnJv
ciwgQCJzcWxFcnJvciIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1F
VEVSKHNjcmVlbkNvbG9yLCBAInNjcmVlbkNvbG9yIik7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9SRVFVSVJFRF9QQVJBTUVURVIoYWx0ZXJuYXRlQ29sb3JzLCBAImFsdGVybmF0ZUNvbG9ycyIp
OwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHByaW50Q29sb3Is
IEAicHJpbnRDb2xvciIpOwotCi0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBK
U09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhv
ZCJfcywgIkRhdGFiYXNlLmRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyJfcyk7Ci0gICAg
UmVmPEpTT046Ok9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
LSAgICBwYXJhbXNPYmplY3QtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgdG9KU09OU3RyaW5n
QXJyYXkoY29sdW1uTmFtZXMpKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygibm90ZXMi
X3MsIG5vdGVzKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCB0
aW1lc3RhbXApOwotICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFt2YWx1
ZXMgdG9KU09OT2JqZWN0XSk7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRWYWx1ZSgicGF5bG9hZCJf
cywgW3BheWxvYWQgdG9KU09OT2JqZWN0XSk7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3Qo
InNxbEVycm9yIl9zLCBbc3FsRXJyb3IgdG9KU09OT2JqZWN0XSk7Ci0gICAgcGFyYW1zT2JqZWN0
LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCBzY3JlZW5Db2xvcik7Ci0gICAgcGFyYW1zT2Jq
ZWN0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCB0b0pTT05TdHJpbmdBcnJheShhbHRl
cm5hdGVDb2xvcnMpKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygicHJpbnRDb2xvciJf
cywgcHJpbnRDb2xvcik7Ci0gICAganNvbk1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIl9zLCBX
VEZNb3ZlKHBhcmFtc09iamVjdCkpOwotICAgIHJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2Ut
PnRvSlNPTlN0cmluZygpKTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sRXZlbnREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1w
YXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLSNpbXBvcnQgPFdlYkluc3Bl
Y3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KLQotCi1AY2xhc3MgVGVzdFByb3RvY29sRGF0
YWJhc2VFcnJvcjsKLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sUGxh
dGZvcm0pIHsKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbCwKLSAgICBUZXN0UHJvdG9jb2xQ
bGF0Zm9ybUdlbmVyaWMsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1JT1MsCi0gICAgVGVzdFBy
b3RvY29sUGxhdGZvcm1NYWNPUywKLX07Ci0KLQotCi0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxp
dHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIDog
UldJUHJvdG9jb2xKU09OT2JqZWN0Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihO
U0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKLS0gKGluc3RhbmNldHlwZSlp
bml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0
OwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlIGNv
ZGU6KGludCljb2RlOwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkp
IE5TU3RyaW5nICptZXNzYWdlOwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMs
IGFzc2lnbikgaW50IGNvZGU7Ci1AZW5kCi0KLQotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5
ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5FdmVu
dERpc3BhdGNoZXIgOiBOU09iamVjdAotLSAodm9pZClkaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0
ZXJzV2l0aENvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopY29sdW1uTmFtZXMg
bm90ZXM6KE5TU3RyaW5nICoqKW5vdGVzIHRpbWVzdGFtcDooZG91YmxlICopdGltZXN0YW1wIHZh
bHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqKXZhbHVlcyBwYXlsb2FkOihSV0lQcm90b2Nv
bEpTT05PYmplY3QgKiopcGF5bG9hZCBzcWxFcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJv
ciAqKilzcWxFcnJvciBzY3JlZW5Db2xvcjooTlNTdHJpbmcgKiopc2NyZWVuQ29sb3IgYWx0ZXJu
YXRlQ29sb3JzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopYWx0ZXJuYXRlQ29sb3JzIHByaW50
Q29sb3I6KE5TU3RyaW5nICoqKXByaW50Q29sb3I7Ci0tICh2b2lkKWRpZEV4ZWN1dGVOb09wdGlv
bmFsUGFyYW1ldGVyc1dpdGhDb2x1bW5OYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopY29s
dW1uTmFtZXMgbm90ZXM6KE5TU3RyaW5nICopbm90ZXMgdGltZXN0YW1wOihkb3VibGUpdGltZXN0
YW1wIHZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopdmFsdWVzIHBheWxvYWQ6KFJXSVBy
b3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQgc3FsRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNl
RXJyb3IgKilzcWxFcnJvciBzY3JlZW5Db2xvcjooTlNTdHJpbmcgKilzY3JlZW5Db2xvciBhbHRl
cm5hdGVDb2xvcnM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWFsdGVybmF0ZUNvbG9ycyBwcmlu
dENvbG9yOihOU1N0cmluZyAqKXByaW50Q29sb3I7Ci1AZW5kCi0KLQotI2ltcG9ydCA8V2ViSW5z
cGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgotCi0jIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRl
cm5hbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0
aW9uYWwtcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29s
SlNPTk9iamVjdFByaXZhdGUuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxl
SW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotQGlu
dGVyZmFjZSBUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkV2ZW50RGlzcGF0Y2hlciAoUHJpdmF0
ZSkKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEluc3BlY3Rvcjo6QXVnbWVu
dGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyOwotQGVuZAotCi0KLSMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBl
dmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0
IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+Ci0KLW5hbWVzcGFj
ZSBJbnNwZWN0b3IgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+Ci1PcHRpb25h
bDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsK
LQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFBsYXRmb3JtIHZh
bHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZv
cm1BbGw6Ci0gICAgICAgIHJldHVybiAiYWxsIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxh
dGZvcm1HZW5lcmljOgotICAgICAgICByZXR1cm4gImdlbmVyaWMiX3M7Ci0gICAgY2FzZSBUZXN0
UHJvdG9jb2xQbGF0Zm9ybUlPUzoKLSAgICAgICAgcmV0dXJuICJpb3MiX3M7Ci0gICAgY2FzZSBU
ZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOgotICAgICAgICByZXR1cm4gIm1hY29zIl9zOwotICAg
IH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFBsYXRmb3Jt
PiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFs
dWUgPT0gImFsbCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDsKLSAg
ICBpZiAodmFsdWUgPT0gImdlbmVyaWMiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxh
dGZvcm1HZW5lcmljOwotICAgIGlmICh2YWx1ZSA9PSAiaW9zIikKLSAgICAgICAgcmV0dXJuIFRl
c3RQcm90b2NvbFBsYXRmb3JtSU9TOwotICAgIGlmICh2YWx1ZSA9PSAibWFjb3MiKQotICAgICAg
ICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzsKLSAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwotfQotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2xUeXBlUGFyc2VyLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2Jq
ZWN0UHJpdmF0ZS5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW50ZXJmYWNl
IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoRGF0YWJhc2VEb21haW4pCi0KLSsgKHZvaWQp
X3BhcnNlRGF0YWJhc2VJZDooTlNTdHJpbmcgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBh
eWxvYWQ7Ci0rICh2b2lkKV9wYXJzZVByaW1hcnlDb2xvcnM6KE5TU3RyaW5nICoqKW91dFZhbHVl
IGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotKyAodm9pZClfcGFyc2VDb2xvckxpc3Q6KE5TQXJy
YXkvKjxOU1N0cmluZz4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLSsg
KHZvaWQpX3BhcnNlRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKiopb3V0VmFsdWUg
ZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucyAoRGF0YWJhc2VEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNl
RGF0YWJhc2VJZDooTlNTdHJpbmcgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQK
LXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBj
bGFzc10pOwotICAgICpvdXRWYWx1ZSA9IChOU1N0cmluZyAqKXBheWxvYWQ7Ci19Ci0KLSsgKHZv
aWQpX3BhcnNlUHJpbWFyeUNvbG9yczooTlNTdHJpbmcgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6
KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQs
IFtOU1N0cmluZyBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IChOU1N0cmluZyAqKXBheWxvYWQ7
Ci19Ci0KLSsgKHZvaWQpX3BhcnNlQ29sb3JMaXN0OihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiop
b3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05f
Rk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gY2xhc3NdKTsKLSAg
ICAqb3V0VmFsdWUgPSAoTlNBcnJheS8qPE5TU3RyaW5nPiovICopcGF5bG9hZDsKLX0KLQotKyAo
dm9pZClfcGFyc2VFcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKilvdXRWYWx1ZSBm
cm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZ
UEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IFtbVGVz
dFByb3RvY29sRGF0YWJhc2VFcnJvciBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOwot
fQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMu
bW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRl
c3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucy5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZh
dGUuaD4KLSNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVl
cy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLUBpbXBsZW1lbnRhdGlvbiBU
ZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yCi0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxv
YWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQKLXsKLSAg
ICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAIm1lc3NhZ2Ui
XSwgQCJtZXNzYWdlIik7Ci0gICAgc2VsZi5tZXNzYWdlID0gcGF5bG9hZFtAIm1lc3NhZ2UiXTsK
LQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImNv
ZGUiXSwgQCJjb2RlIik7Ci0gICAgc2VsZi5jb2RlID0gW3BheWxvYWRbQCJjb2RlIl0gaW50ZWdl
clZhbHVlXTsKLQotICAgIHJldHVybiBzZWxmOwotfQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
UHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9iamVjdAotewotICAgIGlm
ICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmplY3QgdG9KU09OT2JqZWN0
XS5nZXQoKV0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0K
LS0gKGluc3RhbmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBjb2Rl
OihpbnQpY29kZQotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICBy
ZXR1cm4gbmlsOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWSht
ZXNzYWdlLCBAIm1lc3NhZ2UiKTsKLQotICAgIHNlbGYubWVzc2FnZSA9IG1lc3NhZ2U7Ci0gICAg
c2VsZi5jb2RlID0gY29kZTsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKXNldE1l
c3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZQotewotICAgIFtzdXBlciBzZXRTdHJpbmc6bWVzc2Fn
ZSBmb3JLZXk6QCJtZXNzYWdlIl07Ci19Ci0KLS0gKE5TU3RyaW5nICopbWVzc2FnZQotewotICAg
IHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAibWVzc2FnZSJdOwotfQotCi0tICh2b2lkKXNl
dENvZGU6KGludCljb2RlCi17Ci0gICAgW3N1cGVyIHNldEludGVnZXI6Y29kZSBmb3JLZXk6QCJj
b2RlIl07Ci19Ci0KLS0gKGludCljb2RlCi17Ci0gICAgcmV0dXJuIFtzdXBlciBpbnRlZ2VyRm9y
S2V5OkAiY29kZSJdOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xU
eXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1jb21tYW5kLXRhcmdldFR5cGUtbWF0
Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWNv
bW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1lcnJv
cgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTEzMGFkNzBjNDAuLjAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmljL2V4cGVjdGVkL2ZhaWwtb24tY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1k
ZWJ1Z2dhYmxlVHlwZS5qc29uLWVycm9yCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotRVJS
T1I6IE1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjogZG9tYWluIERvbWFpbiBoYXMgYW4g
aXRlbSBpbiB0YXJnZXRUeXBlcyAiW3Und29ya2VyJ10iIHRoYXQgaXMgbm90IHN1cHBvcnRlZCBi
eSBhbnkgdmFsdWUgaW4gZGVidWdnYWJsZVR5cGVzICJbdSdqYXZhc2NyaXB0J10iLgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVy
aWMvZXhwZWN0ZWQvZmFpbC1vbi1jb21tYW5kLXRhcmdldFR5cGVzLXR5cGUuanNvbi1lcnJvciBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4
cGVjdGVkL2ZhaWwtb24tY29tbWFuZC10YXJnZXRUeXBlcy10eXBlLmpzb24tZXJyb3IKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk5ZjVlMWE0YThlLi4wMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBl
Y3RlZC9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlwZXMtdHlwZS5qc29uLWVycm9yCisrKyAvZGV2
L251bGwKQEAgLTEgKzAsMCBAQAotRVJST1I6IE1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNhdGlv
bjogdGFyZ2V0VHlwZXMgbGlzdCBmb3IgY29tbWFuZCBQYWdlT25seSBpcyBub3QgYW4gYXJyYXkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tY29tbWFuZC10YXJnZXRUeXBlcy12YWx1ZS5qc29u
LWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1jb21tYW5kLXRhcmdldFR5cGVzLXZhbHVlLmpzb24tZXJy
b3IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxYTM2NTY5OTI2Li4wMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2Vu
ZXJpYy9leHBlY3RlZC9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlwZXMtdmFsdWUuanNvbi1lcnJv
cgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUVSUk9SOiBNYWxmb3JtZWQgZG9tYWluIHNw
ZWNpZmljYXRpb246IHRhcmdldFR5cGVzIGxpc3QgZm9yIGNvbW1hbmQgUGFnZU9ubHkgaXMgYW4g
dW5zdXBwb3J0ZWQgc3RyaW5nLiBXYXM6ICJbdSdwYWdlZSddIiwgQWxsb3dlZCB2YWx1ZXM6IHNl
cnZpY2Utd29ya2VyLCBqYXZhc2NyaXB0LCB3b3JrZXIsIHBhZ2UsIHdlYi1wYWdlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJp
Yy9leHBlY3RlZC9mYWlsLW9uLWNvbW1hbmQtd2l0aC1pbnZhbGlkLXBsYXRmb3JtLmpzb24tZXJy
b3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJp
Yy9leHBlY3RlZC9mYWlsLW9uLWNvbW1hbmQtd2l0aC1pbnZhbGlkLXBsYXRmb3JtLmpzb24tZXJy
b3IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjNjM2YzU0YjdjLi4wMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2Vu
ZXJpYy9leHBlY3RlZC9mYWlsLW9uLWNvbW1hbmQtd2l0aC1pbnZhbGlkLXBsYXRmb3JtLmpzb24t
ZXJyb3IKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1FUlJPUjogVW5rbm93biBwbGF0Zm9y
bTogaW52YWxpZApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4tZGVidWdnYWJsZVR5
cGVzLXR5cGUuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZG9tYWluLWRlYnVnZ2FibGVUeXBl
cy10eXBlLmpzb24tZXJyb3IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiODk4YmE3
YmU3Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWRvbWFpbi1kZWJ1Z2dhYmxlVHlw
ZXMtdHlwZS5qc29uLWVycm9yCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotRVJST1I6IE1h
bGZvcm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjogZGVidWdnYWJsZVR5cGVzIGZvciBkb21haW4g
V2ViT25seSBpcyBub3QgYW4gYXJyYXkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZG9tYWlu
LWRlYnVnZ2FibGVUeXBlcy12YWx1ZS5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4t
ZGVidWdnYWJsZVR5cGVzLXZhbHVlLmpzb24tZXJyb3IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGJmNzFkNDcwY2JkLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWRvbWFp
bi1kZWJ1Z2dhYmxlVHlwZXMtdmFsdWUuanNvbi1lcnJvcgorKysgL2Rldi9udWxsCkBAIC0xICsw
LDAgQEAKLUVSUk9SOiBNYWxmb3JtZWQgZG9tYWluIHNwZWNpZmljYXRpb246IGRlYnVnZ2FibGVU
eXBlcyBmb3IgZG9tYWluIFdlYk9ubHkgaXMgYW4gdW5zdXBwb3J0ZWQgc3RyaW5nLiBXYXM6ICJb
dSd3ZWJiJ10iLCBBbGxvd2VkIHZhbHVlczogc2VydmljZS13b3JrZXIsIGphdmFzY3JpcHQsIHBh
Z2UsIHdlYi1wYWdlCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWRvbWFpbi10YXJnZXRUeXBl
LW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLWVycm9yIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1v
bi1kb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1l
cnJvcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODY3ZTM1MDA4OTguLjAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWlu
LWRlYnVnZ2FibGVUeXBlLmpzb24tZXJyb3IKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1F
UlJPUjogTWFsZm9ybWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9uOiBjb21tYW5kIENvbW1hbmQgaGFz
IGFuIGl0ZW0gaW4gdGFyZ2V0VHlwZXMgIlt1J3dvcmtlciddIiB0aGF0IGlzIG5vdCBzdXBwb3J0
ZWQgYnkgYW55IHZhbHVlIGluIGRlYnVnZ2FibGVUeXBlcyAiW3UnamF2YXNjcmlwdCddIi4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZG9tYWluLXRhcmdldFR5cGVzLXR5cGUuanNvbi1lcnJv
ciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2V4cGVjdGVkL2ZhaWwtb24tZG9tYWluLXRhcmdldFR5cGVzLXR5cGUuanNvbi1lcnJvcgpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTlhMzU5MzNhMzUuLjAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4
cGVjdGVkL2ZhaWwtb24tZG9tYWluLXRhcmdldFR5cGVzLXR5cGUuanNvbi1lcnJvcgorKysgL2Rl
di9udWxsCkBAIC0xICswLDAgQEAKLUVSUk9SOiBNYWxmb3JtZWQgZG9tYWluIHNwZWNpZmljYXRp
b246IHRhcmdldFR5cGVzIGZvciBkb21haW4gUGFnZU9ubHkgaXMgbm90IGFuIGFycmF5CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2Vu
ZXJpYy9leHBlY3RlZC9mYWlsLW9uLWRvbWFpbi10YXJnZXRUeXBlcy12YWx1ZS5qc29uLWVycm9y
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMv
ZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZXMtdmFsdWUuanNvbi1lcnJvcgpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDY4MDdmNzJmYzQuLjAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4
cGVjdGVkL2ZhaWwtb24tZG9tYWluLXRhcmdldFR5cGVzLXZhbHVlLmpzb24tZXJyb3IKKysrIC9k
ZXYvbnVsbApAQCAtMSArMCwwIEBACi1FUlJPUjogTWFsZm9ybWVkIGRvbWFpbiBzcGVjaWZpY2F0
aW9uOiB0YXJnZXRUeXBlcyBmb3IgZG9tYWluIFBhZ2VPbmx5IGlzIGFuIHVuc3VwcG9ydGVkIHN0
cmluZy4gV2FzOiAiW3UncGFnZWUnXSIsIEFsbG93ZWQgdmFsdWVzOiBzZXJ2aWNlLXdvcmtlciwg
amF2YXNjcmlwdCwgd29ya2VyLCBwYWdlLCB3ZWItcGFnZQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFp
bC1vbi1kdXBsaWNhdGUtY29tbWFuZC1jYWxsLXBhcmFtZXRlci1uYW1lcy5qc29uLWVycm9yIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhw
ZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1jYWxsLXBhcmFtZXRlci1uYW1lcy5qc29u
LWVycm9yCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZjc1NmRlMzI1MC4uMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1jYWxsLXBhcmFtZXRl
ci1uYW1lcy5qc29uLWVycm9yCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotRVJST1I6IE1h
bGZvcm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjogY2FsbCBwYXJhbWV0ZXIgbGlzdCBmb3IgY29t
bWFuZCBwcm9jZXNzUG9pbnRzIGhhcyBkdXBsaWNhdGUgcGFyYW1ldGVyIG5hbWVzCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJp
Yy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS1jb21tYW5kLXJldHVybi1wYXJhbWV0ZXItbmFt
ZXMuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLWNvbW1hbmQtcmV0dXJuLXBh
cmFtZXRlci1uYW1lcy5qc29uLWVycm9yCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBl
YTE0OGZmNjdjOS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtY29t
bWFuZC1yZXR1cm4tcGFyYW1ldGVyLW5hbWVzLmpzb24tZXJyb3IKKysrIC9kZXYvbnVsbApAQCAt
MSArMCwwIEBACi1FUlJPUjogTWFsZm9ybWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9uOiByZXR1cm4g
cGFyYW1ldGVyIGxpc3QgZm9yIGNvbW1hbmQgcHJvY2Vzc1BvaW50cyBoYXMgZHVwbGljYXRlIHBh
cmFtZXRlciBuYW1lcwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtZXZlbnQt
cGFyYW1ldGVyLW5hbWVzLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS1ldmVu
dC1wYXJhbWV0ZXItbmFtZXMuanNvbi1lcnJvcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggYzcxYmJkMjFjMmMuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRl
LWV2ZW50LXBhcmFtZXRlci1uYW1lcy5qc29uLWVycm9yCisrKyAvZGV2L251bGwKQEAgLTEgKzAs
MCBAQAotRVJST1I6IE1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjogcGFyYW1ldGVyIGxp
c3QgZm9yIGV2ZW50IHByb2Nlc3NlZFBvaW50cyBoYXMgZHVwbGljYXRlIHBhcmFtZXRlciBuYW1l
cwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1kZWNsYXJhdGlvbnMu
anNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLXR5cGUtZGVjbGFyYXRpb25zLmpz
b24tZXJyb3IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0N2NkZjhlMjhlLi4wMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLWRlY2xhcmF0aW9ucy5q
c29uLWVycm9yCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotRVJST1I6IER1cGxpY2F0ZSB0
eXBlIGRlY2xhcmF0aW9uOiBSdW50aW1lLlJlbW90ZU9iamVjdElkCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3Rl
ZC9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLW1lbWJlci1uYW1lcy5qc29uLWVycm9yIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQv
ZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1tZW1iZXItbmFtZXMuanNvbi1lcnJvcgpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggZDUzNzZhNzdhNDUuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVk
L2ZhaWwtb24tZHVwbGljYXRlLXR5cGUtbWVtYmVyLW5hbWVzLmpzb24tZXJyb3IKKysrIC9kZXYv
bnVsbApAQCAtMSArMCwwIEBACi1FUlJPUjogTWFsZm9ybWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9u
OiB0eXBlIGRlY2xhcmF0aW9uIGZvciBQb2ludCBoYXMgZHVwbGljYXRlIG1lbWJlciBuYW1lcwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1lbnVtLXdpdGgtbm8tdmFsdWVzLmpzb24tZXJyb3Ig
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9l
eHBlY3RlZC9mYWlsLW9uLWVudW0td2l0aC1uby12YWx1ZXMuanNvbi1lcnJvcgpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMjY1NWMyYjkwN2UuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVk
L2ZhaWwtb24tZW51bS13aXRoLW5vLXZhbHVlcy5qc29uLWVycm9yCisrKyAvZGV2L251bGwKQEAg
LTEgKzAsMCBAQAotRVJST1I6IFR5cGUgcmVmZXJlbmNlIHdpdGggZW51bSB2YWx1ZXMgbXVzdCBo
YXZlIGF0IGxlYXN0IG9uZSBlbnVtIHZhbHVlLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1l
dmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLWVycm9y
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMv
ZXhwZWN0ZWQvZmFpbC1vbi1ldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dh
YmxlVHlwZS5qc29uLWVycm9yCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNjVkN2Ew
ZDE5Ni4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1ldmVudC10YXJnZXRUeXBlLW1h
dGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLWVycm9yCisrKyAvZGV2L251bGwKQEAg
LTEgKzAsMCBAQAotRVJST1I6IE1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjogZXZlbnQg
RXZlbnQgaGFzIGFuIGl0ZW0gaW4gdGFyZ2V0VHlwZXMgIlt1J3dvcmtlciddIiB0aGF0IGlzIG5v
dCBzdXBwb3J0ZWQgYnkgYW55IHZhbHVlIGluIGRlYnVnZ2FibGVUeXBlcyAiW3UnamF2YXNjcmlw
dCddIi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlwZXMtdHlwZS5q
c29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1ldmVudC10YXJnZXRUeXBlcy10eXBlLmpzb24tZXJy
b3IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0MDNlMTNhODA5Li4wMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2Vu
ZXJpYy9leHBlY3RlZC9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGVzLXR5cGUuanNvbi1lcnJvcgor
KysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUVSUk9SOiBNYWxmb3JtZWQgZG9tYWluIHNwZWNp
ZmljYXRpb246IHRhcmdldFR5cGVzIGZvciBldmVudCBQYWdlT25seSBpcyBub3QgYW4gYXJyYXkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlwZXMtdmFsdWUuanNvbi1l
cnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmljL2V4cGVjdGVkL2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlwZXMtdmFsdWUuanNvbi1lcnJvcgpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODMwMTJhOWZlNGUuLjAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2V4cGVjdGVkL2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlwZXMtdmFsdWUuanNvbi1lcnJvcgorKysg
L2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUVSUk9SOiBNYWxmb3JtZWQgZG9tYWluIHNwZWNpZmlj
YXRpb246IHRhcmdldFR5cGVzIGZvciBldmVudCBQYWdlT25seSBpcyBhbiB1bnN1cHBvcnRlZCBz
dHJpbmcuIFdhczogIlt1J3BhZ2VlJ10iLCBBbGxvd2VkIHZhbHVlczogc2VydmljZS13b3JrZXIs
IGphdmFzY3JpcHQsIHdvcmtlciwgcGFnZSwgd2ViLXBhZ2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2Zh
aWwtb24tbnVtYmVyLXR5cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24tZXJyb3IgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBl
Y3RlZC9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29uLWVy
cm9yCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5N2IyYWYwZTQ3ZS4uMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZs
YWcuanNvbi1lcnJvcgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUVSUk9SOiBUaGUgJ29w
dGlvbmFsJyBmbGFnIGZvciBhIHBhcmFtZXRlciBtdXN0IGJlIGEgYm9vbGVhbiBsaXRlcmFsLgpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1i
ZXIuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tbnVtYmVyLXR5cGVkLW9wdGlvbmFsLXR5cGUt
bWVtYmVyLmpzb24tZXJyb3IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2ZGYzNzUw
YzFhLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRpb25h
bC10eXBlLW1lbWJlci5qc29uLWVycm9yCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotRVJS
T1I6IFRoZSAnb3B0aW9uYWwnIGZsYWcgZm9yIGEgdHlwZSBtZW1iZXIgbXVzdCBiZSBhIGJvb2xl
YW4gbGl0ZXJhbC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlv
bmFsLXBhcmFtZXRlci1mbGFnLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXN0cmluZy10eXBl
ZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29uLWVycm9yCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA5N2IyYWYwZTQ3ZS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1z
dHJpbmctdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbi1lcnJvcgorKysgL2Rldi9u
dWxsCkBAIC0xICswLDAgQEAKLUVSUk9SOiBUaGUgJ29wdGlvbmFsJyBmbGFnIGZvciBhIHBhcmFt
ZXRlciBtdXN0IGJlIGEgYm9vbGVhbiBsaXRlcmFsLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1v
bi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNvbi1lcnJvciBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2Zh
aWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24tZXJyb3IKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2ZGYzNzUwYzFhLi4wMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBl
Y3RlZC9mYWlsLW9uLXN0cmluZy10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29uLWVycm9y
CisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotRVJST1I6IFRoZSAnb3B0aW9uYWwnIGZsYWcg
Zm9yIGEgdHlwZSBtZW1iZXIgbXVzdCBiZSBhIGJvb2xlYW4gbGl0ZXJhbC4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4
cGVjdGVkL2ZhaWwtb24tdHlwZS1kZWNsYXJhdGlvbi11c2luZy10eXBlLXJlZmVyZW5jZS5qc29u
LWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi10eXBlLWRlY2xhcmF0aW9uLXVzaW5nLXR5cGUtcmVmZXJl
bmNlLmpzb24tZXJyb3IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyZjU3NTNhNDM5
Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXR5cGUtZGVjbGFyYXRpb24tdXNpbmct
dHlwZS1yZWZlcmVuY2UuanNvbi1lcnJvcgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUVS
Uk9SOiBUeXBlIHJlZmVyZW5jZSBjYW5ub3QgaGF2ZSBib3RoICd0eXBlJyBhbmQgJyRyZWYnIGtl
eXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXR5cGUtcmVmZXJlbmNlLWFzLXByaW1pdGl2
ZS10eXBlLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXR5cGUtcmVmZXJlbmNlLWFzLXByaW1p
dGl2ZS10eXBlLmpzb24tZXJyb3IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3NmJj
MWM3NzczLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXR5cGUtcmVmZXJlbmNlLWFz
LXByaW1pdGl2ZS10eXBlLmpzb24tZXJyb3IKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1F
UlJPUjogVHlwZSByZWZlcmVuY2UgJ0RhdGFiYXNlSWQnIGlzIG5vdCBhIHByaW1pdGl2ZSB0eXBl
LiBBbGxvd2VkIHZhbHVlczogaW50ZWdlciwgbnVtYmVyLCBzdHJpbmcsIGJvb2xlYW4sIGVudW0s
IG9iamVjdCwgYXJyYXksIGFueQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi10eXBlLXdpdGgt
aW52YWxpZC1wbGF0Zm9ybS5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi10eXBlLXdpdGgtaW52
YWxpZC1wbGF0Zm9ybS5qc29uLWVycm9yCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBl
YzYzNmM1NGI3Yy4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi10eXBlLXdpdGgtaW52
YWxpZC1wbGF0Zm9ybS5qc29uLWVycm9yCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotRVJS
T1I6IFVua25vd24gcGxhdGZvcm06IGludmFsaWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24t
dHlwZS13aXRoLWxvd2VyY2FzZS1uYW1lLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXR5cGUt
d2l0aC1sb3dlcmNhc2UtbmFtZS5qc29uLWVycm9yCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA0ZTQ2MjI1MGMwYS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi10eXBlLXdp
dGgtbG93ZXJjYXNlLW5hbWUuanNvbi1lcnJvcgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAK
LUVSUk9SOiBUeXBlcyBtdXN0IGJlZ2luIHdpdGggYW4gdXBwZXJjYXNlIGNoYXJhY3Rlci4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLWRl
Y2xhcmF0aW9uLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVu
Y2UtaW4tdHlwZS1kZWNsYXJhdGlvbi5qc29uLWVycm9yCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAyZDM4ZTY0Njc1ZC4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi11bmtu
b3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtZGVjbGFyYXRpb24uanNvbi1lcnJvcgorKysgL2Rl
di9udWxsCkBAIC0xICswLDAgQEAKLUVSUk9SOiBUeXBlIHJlZmVyZW5jZSAnZHJhZ29uJyBpcyBu
b3QgYSBwcmltaXRpdmUgdHlwZS4gQWxsb3dlZCB2YWx1ZXM6IGludGVnZXIsIG51bWJlciwgc3Ry
aW5nLCBib29sZWFuLCBlbnVtLCBvYmplY3QsIGFycmF5LCBhbnkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVk
L2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLW1lbWJlci5qc29uLWVycm9y
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMv
ZXhwZWN0ZWQvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtbWVtYmVyLmpz
b24tZXJyb3IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhZjY2NzJjYmVmLi4wMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlw
ZS1tZW1iZXIuanNvbi1lcnJvcgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUVSUk9SOiBM
b29rdXAgZmFpbGVkIGZvciB0eXBlIHJlZmVyZW5jZTogQ29sb3IgKHJlZmVyZW5jZWQgZnJvbSBk
b21haW46IEZhbnRhc3kpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9nZW5lcmF0ZS1kb21haW5zLXdpdGgt
ZmVhdHVyZS1ndWFyZHMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9nZW5lcmF0ZS1kb21haW5zLXdpdGgt
ZmVhdHVyZS1ndWFyZHMuanNvbi1yZXN1bHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDFiZGE3MTI1Mjk1Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9nZW5lcmF0ZS1kb21haW5zLXdp
dGgtZmVhdHVyZS1ndWFyZHMuanNvbi1yZXN1bHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMjQ1ICsw
LDAgQEAKLSMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVy
ZS1ndWFyZHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0vLyBOZXR3b3JrMQotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiTmV0d29yazEi
LCBudWxsKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMS5sb2Fk
UmVzb3VyY2UiLCBudWxsLCBbXSwgW10pOwotSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFp
bigiTmV0d29yazEiLCBudWxsKTsKLQotLy8gTmV0d29yazMKLUluc3BlY3RvckJhY2tlbmQucmVn
aXN0ZXJEb21haW4oIk5ldHdvcmszIiwgbnVsbCk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVy
RXZlbnQoIk5ldHdvcmszLnJlc291cmNlTG9hZGVkIiwgbnVsbCwgW10pOwotSW5zcGVjdG9yQmFj
a2VuZC5yZWdpc3Rlck5ldHdvcmszRGlzcGF0Y2hlciA9IEluc3BlY3RvckJhY2tlbmQucmVnaXN0
ZXJEaXNwYXRjaGVyLmJpbmQoSW5zcGVjdG9yQmFja2VuZCwgIk5ldHdvcmszIik7Ci1JbnNwZWN0
b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJOZXR3b3JrMyIsIG51bGwpOwotIyMjIEVuZCBGaWxl
OiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0KLSNpbmNsdWRlICJUZXN0UHJv
dG9jb2xUeXBlcy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRS
b3V0ZXIuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEFsdGVybmF0ZUJhY2tl
bmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJl
ZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNo
ZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9Ci0gICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tl
bmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsg
fQotcHJpdmF0ZToKLSAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3Bh
dGNoZXI7Ci19OwotCi0KLSNpZiBQTEFURk9STShXRUJfQ09NTUFORFMpCi1jbGFzcyBBbHRlcm5h
dGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJhY2tlbmREaXNw
YXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5BbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmRE
aXNwYXRjaGVyKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZShsb25nIGNhbGxJ
ZCkgPSAwOwotfTsKLSNlbmRpZiAvLyBQTEFURk9STShXRUJfQ09NTUFORFMpCi0KLX0gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgotCi0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCi0jIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hl
cnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUt
Z3VhcmRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXR5cGVk
ZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCi0jaWYgUExBVEZPUk0oV0VCX0NPTU1BTkRTKQotY2xhc3MgQWx0ZXJuYXRl
TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjsKLSNlbmRpZiAvLyBQTEFURk9STShXRUJfQ09NTUFO
RFMpCi0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0K
LSNpZiBQTEFURk9STShXRUJfQ09NTUFORFMpCi1jbGFzcyBOZXR3b3JrMUJhY2tlbmREaXNwYXRj
aGVySGFuZGxlciB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZShFcnJv
clN0cmluZyYpID0gMDsKLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIH5OZXR3b3JrMUJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlcigpOwotfTsKLSNlbmRpZiAvLyBQTEFURk9STShXRUJfQ09NTUFORFMp
Ci0KLSNpZiBQTEFURk9STShXRUJfQ09NTUFORFMpCi1jbGFzcyBOZXR3b3JrMUJhY2tlbmREaXNw
YXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKLXB1
YmxpYzoKLSAgICBzdGF0aWMgUmVmPE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShC
YWNrZW5kRGlzcGF0Y2hlciYsIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0g
ICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJl
ZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkgb3ZlcnJpZGU7Ci1wcml2YXRlOgotICAgIHZvaWQg
bG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFt
ZXRlcnMpOwotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotcHVi
bGljOgotICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0Y2hlcihBbHRlcm5hdGVOZXR3b3JrMUJh
Y2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0
Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KLXByaXZhdGU6Ci0gICAgQWx0ZXJuYXRlTmV0
d29yazFCYWNrZW5kRGlzcGF0Y2hlciogbV9hbHRlcm5hdGVEaXNwYXRjaGVyIHsgbnVsbHB0ciB9
OwotI2VuZGlmCi1wcml2YXRlOgotICAgIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoQmFja2Vu
ZERpc3BhdGNoZXImLCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIE5l
dHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50IHsgbnVsbHB0ciB9OwotfTsK
LSNlbmRpZiAvLyBQTEFURk9STShXRUJfQ09NTUFORFMpCi0KLX0gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pT
T05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKLSNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCi0j
ZW5kaWYKLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLSNpZiBQTEFURk9STShXRUJfQ09NTUFO
RFMpCi1OZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6fk5ldHdvcmsxQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyKCkgeyB9Ci0jZW5kaWYgLy8gUExBVEZPUk0oV0VCX0NPTU1BTkRTKQot
Ci0jaWYgUExBVEZPUk0oV0VCX0NPTU1BTkRTKQotUmVmPE5ldHdvcmsxQmFja2VuZERpc3BhdGNo
ZXI+IE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYg
YmFja2VuZERpc3BhdGNoZXIsIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2Vu
dCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVy
KGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOwotfQotCi1OZXR3b3JrMUJhY2tlbmREaXNwYXRj
aGVyOjpOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5k
RGlzcGF0Y2hlciwgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQotICAg
IDogU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCi0gICAg
LCBtX2FnZW50KGFnZW50KQotewotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlz
cGF0Y2hlckZvckRvbWFpbigiTmV0d29yazEiX3MsIHRoaXMpOwotfQotCi12b2lkIE5ldHdvcmsx
QmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcm
IG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQotewotICAgIFJlZjxOZXR3b3Jr
MUJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKLQotICAgIFJlZlB0cjxKU09OOjpP
YmplY3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBh
cmFtZXRlcnMpOwotCi0gICAgaWYgKG1ldGhvZCA9PSAibG9hZFJlc291cmNlIikKLSAgICAgICAg
bG9hZFJlc291cmNlKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7Ci0gICAgZWxzZQot
ICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmRE
aXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMS4iICsgbWV0aG9kICsgIicgd2Fz
IG5vdCBmb3VuZCIpOwotfQotCi12b2lkIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmxvYWRS
ZXNvdXJjZShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKLXsKLSNpZiBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSAgICBpZiAobV9hbHRlcm5h
dGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291
cmNlKHJlcXVlc3RJZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIEVy
cm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9i
amVjdDo6Y3JlYXRlKCk7Ci0gICAgbV9hZ2VudC0+bG9hZFJlc291cmNlKGVycm9yKTsKLQotICAg
IGlmICghZXJyb3IubGVuZ3RoKCkpCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRS
ZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAg
ICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlz
cGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKLX0KLSNlbmRpZiAvLyBQTEFU
Rk9STShXRUJfQ09NTUFORFMpCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5k
IEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
RnJvbnRlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
Z2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNs
YXNzIEZyb250ZW5kUm91dGVyOwotCi0jaWYgUExBVEZPUk0oV0VCX0VWRU5UUykKLWNsYXNzIE5l
dHdvcmszRnJvbnRlbmREaXNwYXRjaGVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
LXB1YmxpYzoKLSAgICBOZXR3b3JrM0Zyb250ZW5kRGlzcGF0Y2hlcihGcm9udGVuZFJvdXRlciYg
ZnJvbnRlbmRSb3V0ZXIpIDogbV9mcm9udGVuZFJvdXRlcihmcm9udGVuZFJvdXRlcikgeyB9Ci0g
ICAgdm9pZCByZXNvdXJjZUxvYWRlZCgpOwotcHJpdmF0ZToKLSAgICBGcm9udGVuZFJvdXRlciYg
bV9mcm9udGVuZFJvdXRlcjsKLX07Ci0jZW5kaWYgLy8gUExBVEZPUk0oV0VCX0VWRU5UUykKLQot
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3Bh
dGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1m
ZWF0dXJlLWd1YXJkcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRj
aGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0
ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0
b3IgewotCi0jaWYgUExBVEZPUk0oV0VCX0VWRU5UUykKLXZvaWQgTmV0d29yazNGcm9udGVuZERp
c3BhdGNoZXI6OnJlc291cmNlTG9hZGVkKCkKLXsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29u
TWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0
cmluZygibWV0aG9kIl9zLCAiTmV0d29yazMucmVzb3VyY2VMb2FkZWQiX3MpOwotCi0gICAgbV9m
cm9udGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKLX0K
LSNlbmRpZiAvLyBQTEFURk9STShXRUJfRVZFTlRTKQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0j
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1
ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotbmFt
ZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLS8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgotI2lmIFBM
QVRGT1JNKFdFQl9UWVBFUykKLW5hbWVzcGFjZSBOZXR3b3JrMiB7Ci1jbGFzcyBOZXR3b3JrRXJy
b3I7Ci19IC8vIE5ldHdvcmsyCi0jZW5kaWYgLy8gUExBVEZPUk0oV0VCX1RZUEVTKQotLy8gRW5k
IG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgotCi0KLQotCi0jaWYgUExBVEZPUk0oV0VCX1RZUEVT
KQotbmFtZXNwYWNlIE5ldHdvcmsyIHsKLWNsYXNzIE5ldHdvcmtFcnJvciA6IHB1YmxpYyBKU09O
OjpPYmplY3RCYXNlIHsKLXB1YmxpYzoKLSAgICBlbnVtIHsKLSAgICAgICAgTm9GaWVsZHNTZXQg
PSAwLAotICAgICAgICBNZXNzYWdlU2V0ID0gMSA8PCAwLAotICAgICAgICBDb2RlU2V0ID0gMSA8
PCAxLAotICAgICAgICBBbGxGaWVsZHNTZXQgPSAoTWVzc2FnZVNldCB8IENvZGVTZXQpCi0gICAg
fTsKLQotICAgIHRlbXBsYXRlPGludCBTVEFURT4KLSAgICBjbGFzcyBCdWlsZGVyIHsKLSAgICBw
cml2YXRlOgotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBtX3Jlc3VsdDsKLQotICAgICAg
ICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxT
VEFURSB8IFNURVA+Kj4odGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyKFJlZjwv
Kk5ldHdvcmtFcnJvciovSlNPTjo6T2JqZWN0PiYmIG9iamVjdCkKLSAgICAgICAgICAgIDogbV9y
ZXN1bHQoV1RGTW92ZShvYmplY3QpKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FT
U0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0
YXRlKTsKLSAgICAgICAgfQotICAgICAgICBmcmllbmQgY2xhc3MgTmV0d29ya0Vycm9yOwotICAg
IHB1YmxpYzoKLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTWVzc2FnZVNldD4mIHNldE1lc3Nh
Z2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoIShTVEFURSAmIE1lc3NhZ2VTZXQpLCBwcm9wZXJ0eV9tZXNzYWdlX2FscmVhZHlfc2V0
KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1lc3NhZ2UiX3MsIHZhbHVlKTsK
LSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TWVzc2FnZVNldD4oKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2RlU2V0PiYgc2V0Q29kZShpbnQgdmFsdWUpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2RlU2V0KSwg
cHJvcGVydHlfY29kZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50
ZWdlcigiY29kZSJfcywgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb2Rl
U2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgUmVmPE5ldHdvcmtFcnJvcj4gcmVsZWFzZSgp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxk
c1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChz
aXplb2YoTmV0d29ya0Vycm9yKSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0KSwgY2Fubm90X2Nhc3Qp
OwotCi0gICAgICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uUmVzdWx0ID0gbV9yZXN1bHQu
cmVsZWFzZU5vbk51bGwoKTsKLSAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gV1RGTW92ZSgqcmVp
bnRlcnByZXRfY2FzdDxSZWY8TmV0d29ya0Vycm9yPio+KCZqc29uUmVzdWx0KSk7Ci0gICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIC8qCi0gICAgICog
U3ludGhldGljIGNvbnN0cnVjdG9yOgotICAgICAqIFJlZjxOZXR3b3JrRXJyb3I+IHJlc3VsdCA9
IE5ldHdvcmtFcnJvcjo6Y3JlYXRlKCkKLSAgICAgKiAgICAgLnNldE1lc3NhZ2UoLi4uKQotICAg
ICAqICAgICAuc2V0Q29kZSguLi4pCi0gICAgICogICAgIC5yZWxlYXNlKCk7Ci0gICAgICovCi0g
ICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICBy
ZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7Ci0gICAg
fQotfTsKLQotfSAvLyBOZXR3b3JrMgotI2VuZGlmIC8vIFBMQVRGT1JNKFdFQl9UWVBFUykKLQot
Ci0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgot
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbE9iamVjdHMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
Z2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLQotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0K
LW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmpl
Y3RzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJz
LmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdp
dGgtZmVhdHVyZS1ndWFyZHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXJzLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi1AcHJvdG9j
b2wgVGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyOwotCi1uYW1lc3BhY2UgSW5zcGVj
dG9yIHsKLQotCi0jaWYgUExBVEZPUk0oV0VCX0NPTU1BTkRTKQotY2xhc3MgT2JqQ0luc3BlY3Rv
ck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJuYXRlTmV0d29y
azFCYWNrZW5kRGlzcGF0Y2hlciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJs
aWM6Ci0gICAgT2JqQ0luc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFBy
b3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5k
bGVyOyB9Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZShsb25nIHJlcXVlc3RJZCkgb3Zl
cnJpZGU7Ci1wcml2YXRlOgotICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xOZXR3b3JrMURv
bWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwotfTsKLSNlbmRpZiAvLyBQTEFURk9STShXRUJfQ09N
TUFORFMpCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBv
cnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSAiVGVzdFBy
b3RvY29sSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMu
aCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsK
LQotI2lmIFBMQVRGT1JNKFdFQl9DT01NQU5EUykKLXZvaWQgT2JqQ0luc3BlY3Rvck5ldHdvcmsx
QmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZShsb25nIHJlcXVlc3RJZCkKLXsKLSAgICBp
ZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IobG9hZFJlc291cmNl
V2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0
Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazEubG9hZFJlc291cmNlJyB3YXMgbm90IGZv
dW5kIl9zKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMo
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5T
U3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90
b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJv
cik7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0g
ICAgfTsKLQotICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57Ci0gICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCks
IGZhbHNlKTsKLSAgICB9OwotCi0gICAgW21fZGVsZWdhdGUgbG9hZFJlc291cmNlV2l0aEVycm9y
Q2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsK
LX0KLQotI2VuZGlmIC8vIFBMQVRGT1JNKFdFQl9DT01NQU5EUykKLQotfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJz
Lm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVy
ZS1ndWFyZHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+Ci0KLV9fYXR0cmlidXRlX18o
KHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1
cmF0aW9uIDogTlNPYmplY3QKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4sIHNldHRlcj1z
ZXROZXR3b3JrMUhhbmRsZXI6KSBpZDxUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+
IG5ldHdvcmsxSGFuZGxlcjsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgVGVzdFBy
b3RvY29sTmV0d29yazNEb21haW5FdmVudERpc3BhdGNoZXIgKm5ldHdvcmszRXZlbnREaXNwYXRj
aGVyOwotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5o
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUt
Z3VhcmRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgotCi0jaW1wb3J0ICJUZXN0UHJv
dG9jb2xJbnRlcm5hbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJz
LmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5o
PgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVy
Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlz
cGF0Y2hlcnMuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVycy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW1wbGVtZW50YXRp
b24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9y
Q29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci0gICAgaWQ8VGVzdFByb3RvY29sTmV0d29yazFEb21h
aW5IYW5kbGVyPiBfbmV0d29yazFIYW5kbGVyOwotICAgIFRlc3RQcm90b2NvbE5ldHdvcmszRG9t
YWluRXZlbnREaXNwYXRjaGVyICpfbmV0d29yazNFdmVudERpc3BhdGNoZXI7Ci19Ci0KLS0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJv
bGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFz
ZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBf
Y29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQp
ZGVhbGxvYwotewotICAgIFtfbmV0d29yazFIYW5kbGVyIHJlbGVhc2VdOwotICAgIFtfbmV0d29y
azNFdmVudERpc3BhdGNoZXIgcmVsZWFzZV07Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi0t
ICh2b2lkKXNldE5ldHdvcmsxSGFuZGxlcjooaWQ8VGVzdFByb3RvY29sTmV0d29yazFEb21haW5I
YW5kbGVyPiloYW5kbGVyCi17Ci0gICAgaWYgKGhhbmRsZXIgPT0gX25ldHdvcmsxSGFuZGxlcikK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgW19uZXR3b3JrMUhhbmRsZXIgcmVsZWFzZV07Ci0gICAg
X25ldHdvcmsxSGFuZGxlciA9IFtoYW5kbGVyIHJldGFpbl07Ci0KLSAgICBhdXRvIGFsdGVybmF0
ZURpc3BhdGNoZXIgPSBtYWtlVW5pcXVlPE9iakNJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNw
YXRjaGVyPihoYW5kbGVyKTsKLSAgICBhdXRvIGFsdGVybmF0ZUFnZW50ID0gbWFrZVVuaXF1ZTxB
bHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudDxOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyLCBBbHRl
cm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPj4oIk5ldHdvcmsxIl9zLCAqX2NvbnRyb2xs
ZXIsIFdURk1vdmUoYWx0ZXJuYXRlRGlzcGF0Y2hlcikpOwotICAgIF9jb250cm9sbGVyLT5hcHBl
bmRFeHRyYUFnZW50KFdURk1vdmUoYWx0ZXJuYXRlQWdlbnQpKTsKLX0KLQotLSAoaWQ8VGVzdFBy
b3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyPiluZXR3b3JrMUhhbmRsZXIKLXsKLSAgICByZXR1
cm4gX25ldHdvcmsxSGFuZGxlcjsKLX0KLQotLSAoVGVzdFByb3RvY29sTmV0d29yazNEb21haW5F
dmVudERpc3BhdGNoZXIgKiluZXR3b3JrM0V2ZW50RGlzcGF0Y2hlcgotewotICAgIGlmICghX25l
dHdvcmszRXZlbnREaXNwYXRjaGVyKQotICAgICAgICBfbmV0d29yazNFdmVudERpc3BhdGNoZXIg
PSBbW1Rlc3RQcm90b2NvbE5ldHdvcmszRG9tYWluRXZlbnREaXNwYXRjaGVyIGFsbG9jXSBpbml0
V2l0aENvbnRyb2xsZXI6X2NvbnRyb2xsZXJdOwotICAgIHJldHVybiBfbmV0d29yazNFdmVudERp
c3BhdGNoZXI7Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZp
Z3VyYXRpb24ubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hl
cnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5z
LXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0
ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVz
Lmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0
UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkV2ZW50RGlzcGF0Y2hlcgotewotICAgIEF1Z21lbnRhYmxl
SW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlp
bml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJv
bGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAg
ICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9
IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpcmVzb3VyY2VMb2Fk
ZWQKLXsKLSAgICBjb25zdCBGcm9udGVuZFJvdXRlciYgcm91dGVyID0gX2NvbnRyb2xsZXItPmZy
b250ZW5kUm91dGVyKCk7Ci0KLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpT
T046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9k
Il9zLCAiTmV0d29yazMucmVzb3VyY2VMb2FkZWQiX3MpOwotICAgIHJvdXRlci5zZW5kRXZlbnQo
anNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1k
b21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQot
I2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgotCi0KLUBjbGFz
cyBUZXN0UHJvdG9jb2xOZXR3b3JrMk5ldHdvcmtFcnJvcjsKLQotdHlwZWRlZiBOU19FTlVNKE5T
SW50ZWdlciwgVGVzdFByb3RvY29sUGxhdGZvcm0pIHsKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9y
bUFsbCwKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWMsCi0gICAgVGVzdFByb3RvY29s
UGxhdGZvcm1JT1MsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUywKLX07Ci0KLQotCi0K
LV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0
UHJvdG9jb2xOZXR3b3JrMk5ldHdvcmtFcnJvciA6IFJXSVByb3RvY29sSlNPTk9iamVjdAotLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlk
PiAqKXBheWxvYWQ7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0
aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBjb2RlOihpbnQpY29kZTsKLS8qIHJlcXVpcmVk
ICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqbWVzc2FnZTsKLS8qIHJl
cXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCBjb2RlOwotQGVuZAot
Ci1AcHJvdG9jb2wgVGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyIDxOU09iamVjdD4K
LUBvcHRpb25hbAotLSAodm9pZClsb2FkUmVzb3VyY2VXaXRoRXJyb3JDYWxsYmFjazoodm9pZChe
KShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4p
KHZvaWQpKXN1Y2Nlc3NDYWxsYmFjazsKLUBlbmQKLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0
eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbE5ldHdvcmszRG9tYWluRXZl
bnREaXNwYXRjaGVyIDogTlNPYmplY3QKLS0gKHZvaWQpcmVzb3VyY2VMb2FkZWQ7Ci1AZW5kCi0K
LQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2Jq
ZWN0cy5oPgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgi
Ci0jaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgotI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDx3
dGYvSlNPTlZhbHVlcy5oPgotCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbE5ldHdvcmszRG9tYWlu
RXZlbnREaXNwYXRjaGVyIChQcml2YXRlKQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJv
bGxlcjooSW5zcGVjdG9yOjpBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xs
ZXI7Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0KLSMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJk
cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBv
cnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJy
YXlDb252ZXJzaW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdGVtcGxhdGU8dHlw
ZW5hbWUgT2JqQ0VudW1UeXBlPgotT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xT
dHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0
cmluZyhUZXN0UHJvdG9jb2xQbGF0Zm9ybSB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsK
LSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOgotICAgICAgICByZXR1cm4gImFsbCJf
czsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzoKLSAgICAgICAgcmV0dXJu
ICJnZW5lcmljIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1JT1M6Ci0gICAgICAg
IHJldHVybiAiaW9zIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzoKLSAg
ICAgICAgcmV0dXJuICJtYWNvcyJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBP
cHRpb25hbDxUZXN0UHJvdG9jb2xQbGF0Zm9ybT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0
cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJhbGwiKQotICAgICAgICByZXR1cm4g
VGVzdFByb3RvY29sUGxhdGZvcm1BbGw7Ci0gICAgaWYgKHZhbHVlID09ICJnZW5lcmljIikKLSAg
ICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzsKLSAgICBpZiAodmFsdWUg
PT0gImlvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzsKLSAgICBp
ZiAodmFsdWUgPT0gIm1hY29zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3Jt
TWFjT1M7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotCi0KLX0gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5o
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVy
ZS1ndWFyZHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLQotI2ltcG9ydCAiVGVz
dFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCi0jaW1wb3J0
IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotCi11c2luZyBu
YW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucyAoTmV0d29yazJEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlTmV0d29ya0Vycm9yOihUZXN0
UHJvdG9jb2xOZXR3b3JrMk5ldHdvcmtFcnJvciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQp
cGF5bG9hZDsKLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zIChOZXR3b3JrMkRvbWFpbikKLQotKyAodm9pZClfcGFyc2VOZXR3b3JrRXJyb3I6KFRl
c3RQcm90b2NvbE5ldHdvcmsyTmV0d29ya0Vycm9yICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihp
ZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBb
TlNEaWN0aW9uYXJ5IGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xOZXR3
b3JrMk5ldHdvcmtFcnJvciBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOwotfQotCi1A
ZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLQot
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVz
dFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0
ZS5oPgotI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVz
Lmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotQGltcGxlbWVudGF0aW9uIFRl
c3RQcm90b2NvbE5ldHdvcmsyTmV0d29ya0Vycm9yCi0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0
aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQK
LXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsK
LQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAIm1l
c3NhZ2UiXSwgQCJtZXNzYWdlIik7Ci0gICAgc2VsZi5tZXNzYWdlID0gcGF5bG9hZFtAIm1lc3Nh
Z2UiXTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9h
ZFtAImNvZGUiXSwgQCJjb2RlIik7Ci0gICAgc2VsZi5jb2RlID0gW3BheWxvYWRbQCJjb2RlIl0g
aW50ZWdlclZhbHVlXTsKLQotICAgIHJldHVybiBzZWxmOwotfQotLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9iamVjdAotewot
ICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmplY3QgdG9KU09O
T2JqZWN0XS5nZXQoKV0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgcmV0dXJuIHNlbGY7
Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2Fn
ZSBjb2RlOihpbnQpY29kZQotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAg
ICAgICByZXR1cm4gbmlsOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9Q
RVJUWShtZXNzYWdlLCBAIm1lc3NhZ2UiKTsKLQotICAgIHNlbGYubWVzc2FnZSA9IG1lc3NhZ2U7
Ci0gICAgc2VsZi5jb2RlID0gY29kZTsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lk
KXNldE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZQotewotICAgIFtzdXBlciBzZXRTdHJpbmc6
bWVzc2FnZSBmb3JLZXk6QCJtZXNzYWdlIl07Ci19Ci0KLS0gKE5TU3RyaW5nICopbWVzc2FnZQot
ewotICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAibWVzc2FnZSJdOwotfQotCi0tICh2
b2lkKXNldENvZGU6KGludCljb2RlCi17Ci0gICAgW3N1cGVyIHNldEludGVnZXI6Y29kZSBmb3JL
ZXk6QCJjb2RlIl07Ci19Ci0KLS0gKGludCljb2RlCi17Ci0gICAgcmV0dXJuIFtzdXBlciBpbnRl
Z2VyRm9yS2V5OkAiY29kZSJdOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvc2FtZS10eXBlLWlkLWRpZmZlcmVudC1k
b21haW4uanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5q
c29uLXJlc3VsdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTk0MDIxMTEzODIuLjAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3NhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24t
cmVzdWx0CisrKyAvZGV2L251bGwKQEAgLTEsOTE0ICswLDAgQEAKLSMjIyBCZWdpbiBGaWxlOiBJ
bnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0jIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRD
b21tYW5kcy5qcwotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRp
ZmZlcmVudC1kb21haW4uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKLSNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0KLW5hbWVzcGFjZSBJbnNw
ZWN0b3IgewotCi1jbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0g
ICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYg
ZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsg
fQotICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0
dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPEJh
Y2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwotfTsKLQotCi0KLQotfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKLSMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFp
bi5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFn
bWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10eXBlZGVmIFN0
cmluZyBFcnJvclN0cmluZzsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVu
ZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
c2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVz
dEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1
ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
LQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotI2luY2x1ZGUg
IlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZp
bGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJv
bnRlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2Ft
ZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bE9iamVjdHMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgRnJvbnRl
bmRSb3V0ZXI7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0
RnJvbnRlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNw
YXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUt
aWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0RnJvbnRlbmRE
aXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRl
bmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJ
bnNwZWN0b3IgewotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBU
ZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bE9iamVjdHMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1p
ZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFt
ZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotCi0K
LS8vIFR5cGVkZWZzLgotbmFtZXNwYWNlIFJ1bnRpbWUgewotLyogVW5pcXVlIG9iamVjdCBpZGVu
dGlmaWVyLiAqLwotdHlwZWRlZiBTdHJpbmcgUmVtb3RlT2JqZWN0SWQ7Ci19IC8vIFJ1bnRpbWUK
LQotbmFtZXNwYWNlIFJ1bnRpbWUyIHsKLS8qIFVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4gKi8K
LXR5cGVkZWYgU3RyaW5nIFJlbW90ZU9iamVjdElkOwotfSAvLyBSdW50aW1lMgotLy8gRW5kIG9m
IHR5cGVkZWZzLgotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0KLSNpbmNsdWRlIDx3dGYvT3B0aW9u
YWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0
b3IgewotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9j
b2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sT2JqZWN0cy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNw
YXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlk
LWRpZmZlcmVudC1kb21haW4uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXJzLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi0KLQotbmFt
ZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmlnLmgi
Ci0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUg
IlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLQotbmFtZXNwYWNlIEluc3Bl
Y3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sQ29uZmlndXJhdGlvbi5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2Ft
ZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+
Ci0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBU
ZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKLUBlbmQKLQotCi0jIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbi5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
bi5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2ltcG9ydCAiVGVzdFBy
b3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRl
cm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVu
dGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5z
cGVjdG9yOwotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgotewot
ICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci19Ci0KLS0g
KGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29u
dHJvbGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYg
KCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAg
ICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZv
aWQpZGVhbGxvYwotewotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotQGVuZAotCi0KLSMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50
ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1w
b3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0K
LSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5o
PgotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+Ci0KLQot
Ci0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbFBsYXRmb3JtKSB7Ci0g
ICAgVGVzdFByb3RvY29sUGxhdGZvcm1BbGwsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5l
cmljLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TLAotICAgIFRlc3RQcm90b2NvbFBsYXRm
b3JtTWFjT1MsCi19OwotCi0KLQotCi0KLQotCi0KLQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3Iv
UldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+Ci0KLSMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50
LWRvbWFpbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVj
dFByaXZhdGUuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9y
Q29udHJvbGxlci5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotCi0KLQotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0
IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+Ci0KLW5hbWVzcGFj
ZSBJbnNwZWN0b3IgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+Ci1PcHRpb25h
bDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsK
LQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFBsYXRmb3JtIHZh
bHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZv
cm1BbGw6Ci0gICAgICAgIHJldHVybiAiYWxsIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxh
dGZvcm1HZW5lcmljOgotICAgICAgICByZXR1cm4gImdlbmVyaWMiX3M7Ci0gICAgY2FzZSBUZXN0
UHJvdG9jb2xQbGF0Zm9ybUlPUzoKLSAgICAgICAgcmV0dXJuICJpb3MiX3M7Ci0gICAgY2FzZSBU
ZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOgotICAgICAgICByZXR1cm4gIm1hY29zIl9zOwotICAg
IH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFBsYXRmb3Jt
PiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFs
dWUgPT0gImFsbCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDsKLSAg
ICBpZiAodmFsdWUgPT0gImdlbmVyaWMiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxh
dGZvcm1HZW5lcmljOwotICAgIGlmICh2YWx1ZSA9PSAiaW9zIikKLSAgICAgICAgcmV0dXJuIFRl
c3RQcm90b2NvbFBsYXRmb3JtSU9TOwotICAgIGlmICh2YWx1ZSA9PSAibWFjb3MiKQotICAgICAg
ICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzsKLSAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwotfQotCi0KLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90
b2NvbFR5cGVQYXJzZXIuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05P
YmplY3RQcml2YXRlLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbnRlcmZh
Y2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChSdW50aW1lRG9tYWluKQotCi0rICh2b2lk
KV9wYXJzZVJlbW90ZU9iamVjdElkOihOU1N0cmluZyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDoo
aWQpcGF5bG9hZDsKLQotQGVuZAotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMgKFJ1bnRpbWUyRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZVJlbW90ZU9iamVjdElkOihOU1N0
cmluZyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLQotQGVuZAotCi1AaW1w
bGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChSdW50aW1lRG9tYWluKQot
Ci0rICh2b2lkKV9wYXJzZVJlbW90ZU9iamVjdElkOihOU1N0cmluZyAqKilvdXRWYWx1ZSBmcm9t
UGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUo
cGF5bG9hZCwgW05TU3RyaW5nIGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gKE5TU3RyaW5nICop
cGF5bG9hZDsKLX0KLQotQGVuZAotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucyAoUnVudGltZTJEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlUmVtb3RlT2JqZWN0SWQ6
KE5TU3RyaW5nICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKLSAg
ICAqb3V0VmFsdWUgPSAoTlNTdHJpbmcgKilwYXlsb2FkOwotfQotCi1AZW5kCi0KLQotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbFR5cGVzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
c2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgot
Ci0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPFdlYklu
c3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0jaW1wb3J0IDx3dGYvQXNz
ZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNl
IEluc3BlY3RvcjsKLQotCi0KLQotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMu
bW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29u
LXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL2V4cGVjdGVkL3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uLXJlc3Vs
dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGJkYjJkNDExOWYuLjAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmljL2V4cGVjdGVkL3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uLXJlc3VsdAor
KysgL2Rldi9udWxsCkBAIC0xLDExMjQgKzAsMCBAQAotIyMjIEJlZ2luIEZpbGU6IEluc3BlY3Rv
ckJhY2tlbmRDb21tYW5kcy5qcwotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNo
YWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0jIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5k
cy5qcwotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5o
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlw
ZS1zZXR0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCi0jaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9y
IHsKLQotY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZv
aWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3Bh
dGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KLSAg
ICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBt
X2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Ci1wcml2YXRlOgotICAgIFJlZlB0cjxCYWNrZW5k
RGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKLX07Ci0KLQotCi0KLX0gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgotCi0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCi0jIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMu
aAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBv
bmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXR5cGVkZWYgU3RyaW5n
IEVycm9yU3RyaW5nOwotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZp
bGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tl
bmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFk
b3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEJh
Y2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
RnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUg
PHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQot
I2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotI2luY2x1ZGUgIlRl
c3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgSW5z
cGVjdG9yIHsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6
IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93
ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xP
YmplY3RzLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEZyb250ZW5k
Um91dGVyOwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEZy
b250ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0
Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0
aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RGcm9udGVuZERp
c3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVu
ZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIElu
c3BlY3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRl
c3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
T2JqZWN0cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0
aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFt
ZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotLy8g
Rm9yd2FyZCBkZWNsYXJhdGlvbnMuCi1uYW1lc3BhY2UgUnVudGltZSB7Ci1jbGFzcyBLZXlQYXRo
OwotfSAvLyBSdW50aW1lCi0vLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCi0KLQotCi0K
LW5hbWVzcGFjZSBUZXN0SGVscGVycyB7Ci0KLVN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShp
bnQgY29kZSk7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRFbnVtQ29uc3RhbnRW
YWx1ZShUIGVudW1WYWx1ZSkKLXsKLSAgICByZXR1cm4gZ2V0RW51bUNvbnN0YW50VmFsdWUoc3Rh
dGljX2Nhc3Q8aW50PihlbnVtVmFsdWUpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBl
cnMKLQotbmFtZXNwYWNlIFJ1bnRpbWUgewotLyogS2V5IHBhdGguICovCi1jbGFzcyBLZXlQYXRo
IDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewotcHVibGljOgotICAgIC8vIE5hbWVkIGFmdGVy
IHByb3BlcnR5IG5hbWUgJ3R5cGUnIHdoaWxlIGdlbmVyYXRpbmcgS2V5UGF0aC4KLSAgICBlbnVt
IGNsYXNzIFR5cGUgewotICAgICAgICBOdWxsID0gMCwKLSAgICAgICAgU3RyaW5nID0gMSwKLSAg
ICAgICAgQXJyYXkgPSAyLAotICAgIH07IC8vIGVudW0gY2xhc3MgVHlwZQotICAgIGVudW0gewot
ICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCi0gICAgICAgIFR5cGVTZXQgPSAxIDw8IDAsCi0gICAg
ICAgIEFsbEZpZWxkc1NldCA9IChUeXBlU2V0KQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTxpbnQg
U1RBVEU+Ci0gICAgY2xhc3MgQnVpbGRlciB7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRy
PEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7Ci0KLSAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1
aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcihSZWY8LypLZXlQYXRoKi9KU09OOjpPYmplY3Q+
JiYgb2JqZWN0KQotICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBi
dWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwotICAgICAgICB9Ci0gICAgICAgIGZy
aWVuZCBjbGFzcyBLZXlQYXRoOwotICAgIHB1YmxpYzoKLQotICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgVHlwZVNldD4mIHNldFR5cGUoVHlwZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIFR5cGVTZXQpLCBwcm9wZXJ0eV90eXBlX2FscmVhZHlf
c2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInR5cGUiX3MsIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSh2YWx1ZSkpOwot
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUeXBlU2V0PigpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgUmVmPEtleVBhdGg+IHJlbGVhc2UoKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwot
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEtleVBhdGgpID09IHNpemVvZihKU09O
OjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7Ci0KLSAgICAgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+
IGpzb25SZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOwotICAgICAgICAgICAgYXV0
byByZXN1bHQgPSBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxLZXlQYXRoPio+KCZqc29u
UmVzdWx0KSk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgfTsK
LQotICAgIC8qCi0gICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgotICAgICAqIFJlZjxLZXlQ
YXRoPiByZXN1bHQgPSBLZXlQYXRoOjpjcmVhdGUoKQotICAgICAqICAgICAuc2V0VHlwZSguLi4p
Ci0gICAgICogICAgIC5yZWxlYXNlKCk7Ci0gICAgICovCi0gICAgc3RhdGljIEJ1aWxkZXI8Tm9G
aWVsZHNTZXQ+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxk
c1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRTdHJp
bmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEpTT046Ok9iamVjdEJhc2U6
OnNldFN0cmluZygic3RyaW5nIl9zLCB2YWx1ZSk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRBcnJh
eShSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEpT
T046Ok9iamVjdEJhc2U6OnNldEFycmF5KCJhcnJheSJfcywgV1RGTW92ZSh2YWx1ZSkpOwotICAg
IH0KLX07Ci0KLX0gLy8gUnVudGltZQotCi0KLQotbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKLQot
dGVtcGxhdGU8dHlwZW5hbWUgUHJvdG9jb2xFbnVtVHlwZT4KLU9wdGlvbmFsPFByb3RvY29sRW51
bVR5cGU+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZyhjb25zdCBTdHJpbmcmKTsKLQotLy8gRW51
bXMgaW4gdGhlICdSdW50aW1lJyBEb21haW4KLXRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6OlR5cGU+IHBhcnNlRW51bVZhbHVlRnJvbVN0
cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlPihjb25zdCBT
dHJpbmcmKTsKLQotfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKLQotfSAvLyBuYW1lc3BhY2Ug
UHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbE9iamVjdHMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5j
cHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25hbC10
eXBlLXNldHRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5o
IgotCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQot
bmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1f
Y29uc3RhbnRfdmFsdWVzW10gPSB7Ci0gICAgIm51bGwiLAotICAgICJzdHJpbmciLAotICAgICJh
cnJheSIsCi19OwotCi1TdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsKLSAg
ICByZXR1cm4gZW51bV9jb25zdGFudF92YWx1ZXNbY29kZV07Ci19Ci0KLS8vIEVudW1zIGluIHRo
ZSAnUnVudGltZScgRG9tYWluCi10ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5z
cGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZT4oY29uc3QgU3RyaW5nJiBw
cm90b2NvbFN0cmluZykKLXsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVz
W10gPSB7Ci0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6S2V5
UGF0aDo6VHlwZTo6TnVsbCwKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpS
dW50aW1lOjpLZXlQYXRoOjpUeXBlOjpTdHJpbmcsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9y
OjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZTo6QXJyYXksCi0gICAgfTsKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IDM7ICsraSkKLSAgICAgICAgaWYgKHByb3RvY29sU3RyaW5n
ID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAgICAgICAg
IHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZSljb25z
dGFudFZhbHVlc1tpXTsKLQotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLQotfSAvLyBu
YW1lc3BhY2UgVGVzdEhlbHBlcnMKLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVj
dHMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMu
aAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5
cGUtc2V0dGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlz
cGF0Y2hlcnMuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLQotCi1uYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1w
b3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbEludGVybmFsLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
LmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7
Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bEJhY2tlbmREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29u
ZmlndXJhdGlvbi5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQt
b3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgotCi1f
X2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24ubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFk
b3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgi
Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0
ZURpc3BhdGNoYWJsZUFnZW50Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJs
ZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0
b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCi17Ci0gICAg
QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKLX0KLQotLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9s
bGVyKiljb250cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNl
bGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIpOwotICAgIF9j
b250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClk
ZWFsbG9jCi17Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJu
YWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0
IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLSMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBz
aGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4K
LQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgotCi0KLUBj
bGFzcyBUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aDsKLQotdHlwZWRlZiBOU19FTlVNKE5TSW50
ZWdlciwgVGVzdFByb3RvY29sUGxhdGZvcm0pIHsKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFs
bCwKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWMsCi0gICAgVGVzdFByb3RvY29sUGxh
dGZvcm1JT1MsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUywKLX07Ci0KLQotdHlwZWRl
ZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlKSB7Ci0g
ICAgVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlTnVsbCwKLSAgICBUZXN0UHJvdG9jb2xS
dW50aW1lS2V5UGF0aFR5cGVTdHJpbmcsCi0gICAgVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhU
eXBlQXJyYXksCi19OwotCi0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0Iikp
KQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aCA6IFJXSVByb3RvY29sSlNP
Tk9iamVjdAotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5T
U3RyaW5nICosIGlkPiAqKXBheWxvYWQ7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2Nv
bE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKLS0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aFR5cGU6KFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZSl0eXBlOwot
LyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgVGVzdFByb3RvY29s
UnVudGltZUtleVBhdGhUeXBlIHR5cGU7Ci0vKiBvcHRpb25hbCAqLyBAcHJvcGVydHkgKG5vbmF0
b21pYywgY29weSkgTlNTdHJpbmcgKnN0cmluZzsKLS8qIG9wdGlvbmFsICovIEBwcm9wZXJ0eSAo
bm9uYXRvbWljLCBjb3B5KSBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmFycmF5OwotQGVuZAotCi0K
LQotCi0KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmls
aXR5T2JqZWN0cy5oPgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgi
Ci0jaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgotI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDx3
dGYvSlNPTlZhbHVlcy5oPgotCi0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVy
bmFsLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1z
ZXR0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9j
b2xBcnJheUNvbnZlcnNpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+Ci1PcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90
b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKLQotaW5saW5lIFN0cmluZyB0b1Byb3Rv
Y29sU3RyaW5nKFRlc3RQcm90b2NvbFBsYXRmb3JtIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1
ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1BbGw6Ci0gICAgICAgIHJldHVybiAi
YWxsIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOgotICAgICAgICBy
ZXR1cm4gImdlbmVyaWMiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzoKLSAg
ICAgICAgcmV0dXJuICJpb3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09T
OgotICAgICAgICByZXR1cm4gIm1hY29zIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5s
aW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFBsYXRmb3JtPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gImFsbCIpCi0gICAgICAgIHJl
dHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDsKLSAgICBpZiAodmFsdWUgPT0gImdlbmVyaWMi
KQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOwotICAgIGlmICh2
YWx1ZSA9PSAiaW9zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOwot
ICAgIGlmICh2YWx1ZSA9PSAibWFjb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxh
dGZvcm1NYWNPUzsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi0KLWlubGluZSBTdHJp
bmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGUgdmFsdWUp
Ci17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xSdW50aW1lS2V5
UGF0aFR5cGVOdWxsOgotICAgICAgICByZXR1cm4gIm51bGwiX3M7Ci0gICAgY2FzZSBUZXN0UHJv
dG9jb2xSdW50aW1lS2V5UGF0aFR5cGVTdHJpbmc6Ci0gICAgICAgIHJldHVybiAic3RyaW5nIl9z
OwotICAgIGNhc2UgVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlQXJyYXk6Ci0gICAgICAg
IHJldHVybiAiYXJyYXkiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9u
YWw8VGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gIm51bGwiKQotICAgICAgICBy
ZXR1cm4gVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlTnVsbDsKLSAgICBpZiAodmFsdWUg
PT0gInN0cmluZyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5
cGVTdHJpbmc7Ci0gICAgaWYgKHZhbHVlID09ICJhcnJheSIpCi0gICAgICAgIHJldHVybiBUZXN0
UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGVBcnJheTsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93
ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgi
Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBh
cnNlci5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZh
dGUuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGludGVyZmFjZSBUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMgKFJ1bnRpbWVEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlS2V5
UGF0aDooVGVzdFByb3RvY29sUnVudGltZUtleVBhdGggKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6
KGlkKXBheWxvYWQ7Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucyAoUnVudGltZURvbWFpbikKLQotKyAodm9pZClfcGFyc2VLZXlQYXRoOihUZXN0
UHJvdG9jb2xSdW50aW1lS2V5UGF0aCAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9h
ZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlv
bmFyeSBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sUnVudGltZUtleVBh
dGggYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKLX0KLQotQGVuZAotCi0KLSMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xUeXBlcy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgi
Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8V2Vi
SW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLSNpbXBvcnQgPHd0Zi9B
c3NlcnRpb25zLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yOwotCi0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xSdW50aW1lS2V5
UGF0aAotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlv
bmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBl
ciBpbml0XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9S
X1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJ0eXBlIl0sIEAidHlwZSIpOwotICAgIE9wdGlv
bmFsPFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZT4gdHlwZSA9IGZyb21Qcm90b2NvbFN0
cmluZzxUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGU+KHBheWxvYWRbQCJ0eXBlIl0pOwot
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX0VOVU1fVkFMVUUodHlwZSwgQCJ0eXBlIik7Ci0g
ICAgc2VsZi50eXBlID0gdHlwZS52YWx1ZSgpOwotCi0gICAgc2VsZi5zdHJpbmcgPSBwYXlsb2Fk
W0Aic3RyaW5nIl07Ci0KLSAgICBzZWxmLmFycmF5ID0gcGF5bG9hZFtAImFycmF5Il07Ci0KLSAg
ICByZXR1cm4gc2VsZjsKLX0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0
OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilvYmplY3QKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1
cGVyIGluaXRXaXRoSlNPTk9iamVjdDpbb2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0KCldKSkKLSAg
ICAgICAgcmV0dXJuIG5pbDsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhUeXBlOihUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGUpdHlwZQotewot
ICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0g
ICAgc2VsZi50eXBlID0gdHlwZTsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKXNl
dFR5cGU6KFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZSl0eXBlCi17Ci0gICAgW3N1cGVy
IHNldFN0cmluZzp0b1Byb3RvY29sU3RyaW5nKHR5cGUpIGZvcktleTpAInR5cGUiXTsKLX0KLQot
LSAoVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlKXR5cGUKLXsKLSAgICByZXR1cm4gZnJv
bVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZT4oW3N1cGVyIHN0
cmluZ0ZvcktleTpAInR5cGUiXSkudmFsdWUoKTsKLX0KLQotLSAodm9pZClzZXRTdHJpbmc6KE5T
U3RyaW5nICopc3RyaW5nCi17Ci0gICAgW3N1cGVyIHNldFN0cmluZzpzdHJpbmcgZm9yS2V5OkAi
c3RyaW5nIl07Ci19Ci0KLS0gKE5TU3RyaW5nICopc3RyaW5nCi17Ci0gICAgcmV0dXJuIFtzdXBl
ciBzdHJpbmdGb3JLZXk6QCJzdHJpbmciXTsKLX0KLQotLSAodm9pZClzZXRBcnJheTooTlNBcnJh
eS8qPE5TU3RyaW5nPiovICopYXJyYXkKLXsKLSAgICBbc3VwZXIgc2V0SlNPTkFycmF5OnRvSlNP
TlN0cmluZ0FycmF5KGFycmF5KSBmb3JLZXk6QCJhcnJheSJdOwotfQotCi0tIChOU0FycmF5Lyo8
TlNTdHJpbmc+Ki8gKilhcnJheQotewotICAgIHJldHVybiB0b09iakNTdHJpbmdBcnJheShbc3Vw
ZXIgSlNPTkFycmF5Rm9yS2V5OkAiYXJyYXkiXSk7Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9zaG91bGQtc3RyaXAt
Y29tbWVudHMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9zaG91bGQtc3RyaXAtY29tbWVudHMuanNvbi1y
ZXN1bHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhMWZiN2Q0ZjlkLi4wMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJpYy9leHBlY3RlZC9zaG91bGQtc3RyaXAtY29tbWVudHMuanNvbi1yZXN1bHQKKysrIC9k
ZXYvbnVsbApAQCAtMSw4NzAgKzAsMCBAQAotIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tl
bmRDb21tYW5kcy5qcwotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNob3VsZC1z
dHJpcC1jb21tZW50cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0jIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQotI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbFR5cGVzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVu
ZFJvdXRlci5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgQWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIo
UmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0
Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KLSAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFj
a2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgp
OyB9Ci1wcml2YXRlOgotICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlz
cGF0Y2hlcjsKLX07Ci0KLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jZW5kaWYg
Ly8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jIyMgRW5kIEZpbGU6
IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
c2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmpl
Y3RzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3Bl
Y3RvciB7Ci0KLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCi0KLQotfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBzaG91bGQtc3RyaXAtY29tbWVudHMuanNvbgotLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVl
cy5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQotI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNlbmRpZgot
Ci1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgot
Ci0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJv
dG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEZy
b250ZW5kUm91dGVyOwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTog
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5k
RGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxk
LXN0cmlwLWNvbW1lbnRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3Bh
dGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJv
dXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3Bl
Y3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RG
cm9udGVuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2Jq
ZWN0cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlwLWNv
bW1lbnRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2Nv
bFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFtZXNwYWNlIEluc3Bl
Y3RvciB7Ci0KLQotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotCi0KLQotCi0KLQotfSAv
LyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sT2JqZWN0cy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaG91bGQt
c3RyaXAtY29tbWVudHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0
cy5oIgotCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotbmFtZXNwYWNlIFByb3RvY29sIHsK
LQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHNob3VsZC1zdHJpcC1jb21tZW50cy5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbmNsdWRlIDx3dGYvUmV0
YWluUHRyLmg+Ci0KLQotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi19IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hl
cnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1t
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlwLWNvbW1lbnRz
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9y
dCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIK
LQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW5jbHVkZSAiVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLQotbmFt
ZXNwYWNlIEluc3BlY3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2Nv
bC5oPgotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZh
Y2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0Ci1AZW5kCi0KLQotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBzaG91bGQtc3RyaXAtY29tbWVudHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgi
Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0
ZURpc3BhdGNoYWJsZUFnZW50Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJs
ZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0
b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCi17Ci0gICAg
QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKLX0KLQotLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9s
bGVyKiljb250cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNl
bGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIpOwotICAgIF9j
b250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClk
ZWFsbG9jCi17Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQot
I2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDx3dGYvSlNP
TlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLSMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaG91bGQtc3Ry
aXAtY29tbWVudHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2ltcG9ydCA8V2ViSW5z
cGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgotCi0KLQotCi10eXBlZGVmIE5TX0VOVU0o
TlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xQbGF0Zm9ybSkgewotICAgIFRlc3RQcm90b2NvbFBsYXRm
b3JtQWxsLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYywKLSAgICBUZXN0UHJvdG9j
b2xQbGF0Zm9ybUlPUywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TLAotfTsKLQotCi0K
LQotCi0KLQotCi0KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21w
YXRpYmlsaXR5T2JqZWN0cy5oPgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0KLSMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0j
aW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgotI2ltcG9ydCA8SmF2YVNj
cmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDx3dGYv
SlNPTlZhbHVlcy5oPgotCi0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFs
LmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVz
dFByb3RvY29sLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZl
cnNpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBP
YmpDRW51bVR5cGU+Ci1PcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhj
b25zdCBTdHJpbmcmIHZhbHVlKTsKLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRl
c3RQcm90b2NvbFBsYXRmb3JtIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNh
c2UgVGVzdFByb3RvY29sUGxhdGZvcm1BbGw6Ci0gICAgICAgIHJldHVybiAiYWxsIl9zOwotICAg
IGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOgotICAgICAgICByZXR1cm4gImdlbmVy
aWMiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzoKLSAgICAgICAgcmV0dXJu
ICJpb3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOgotICAgICAgICBy
ZXR1cm4gIm1hY29zIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFs
PFRlc3RQcm90b2NvbFBsYXRmb3JtPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2
YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gImFsbCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJv
dG9jb2xQbGF0Zm9ybUFsbDsKLSAgICBpZiAodmFsdWUgPT0gImdlbmVyaWMiKQotICAgICAgICBy
ZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOwotICAgIGlmICh2YWx1ZSA9PSAiaW9z
IikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOwotICAgIGlmICh2YWx1
ZSA9PSAibWFjb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzsK
LSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
LQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVz
dFByb3RvY29sVHlwZVBhcnNlci5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29s
SlNPTk9iamVjdFByaXZhdGUuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0K
LQotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0KLSMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHNob3VsZC1zdHJpcC1jb21tZW50cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFs
LmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8
V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLSNpbXBvcnQgPHd0
Zi9Bc3NlcnRpb25zLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1l
c3BhY2UgSW5zcGVjdG9yOwotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlw
ZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUt
dHlwZS5qc29uLXJlc3VsdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjU2NjYzNzlj
YTcuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmlt
aXRpdmUtdHlwZS5qc29uLXJlc3VsdAorKysgL2Rldi9udWxsCkBAIC0xLDg5MSArMCwwIEBACi0j
IyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10
eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLSMjIyBF
bmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UK
LQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi0jaW5jbHVk
ZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckZyb250ZW5kUm91dGVyLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNrZW5kRGlz
cGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tl
bmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQotICAgIEJhY2tlbmREaXNwYXRj
aGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNo
ZXIuZ2V0KCk7IH0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2Jh
Y2tlbmREaXNwYXRjaGVyOwotfTsKLQotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0K
LSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSMjIyBF
bmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQot
I2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdHlwZWRlZiBTdHJpbmcgRXJyb3JT
dHJpbmc7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVz
dEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3Bh
dGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFy
YXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0
QmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVk
ZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgot
Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jaW5jbHVkZSAi
VGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBJ
bnNwZWN0b3IgewotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmls
ZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9u
dGVuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBl
LWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRl
c3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xh
c3MgRnJvbnRlbmRSb3V0ZXI7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBG
aWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJv
bnRlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0
eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQot
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNs
dWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLW5h
bWVzcGFjZSBQcm90b2NvbCB7Ci0KLQotCi0KLQotLy8gVHlwZWRlZnMuCi1uYW1lc3BhY2UgUnVu
dGltZSB7Ci0vKiBVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIuICovCi10eXBlZGVmIGludCBSZW1v
dGVPYmplY3RJZDsKLX0gLy8gUnVudGltZQotLy8gRW5kIG9mIHR5cGVkZWZzLgotCi0KLQotfSAv
LyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sT2JqZWN0cy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRl
Y2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
VGVzdFByb3RvY29sT2JqZWN0cy5oIgotCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotbmFt
ZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMu
Y3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNl
ZC1wcmltaXRpdmUtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLQotCi1uYW1l
c3BhY2UgSW5zcGVjdG9yIHsKLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAi
Y29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQot
I2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLQotbmFtZXNw
YWNlIEluc3BlY3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8V2ViSW5zcGVj
dG9yL1Rlc3RQcm90b2NvbC5oPgotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVs
dCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0Ci1A
ZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5
cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1w
b3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2Nv
bEludGVybmFsLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIK
LSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+Ci0j
aW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4K
LSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVycy5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXJzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBU
ZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCi17Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250
cm9sbGVyKiBfY29udHJvbGxlcjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJv
bGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCi17Ci0gICAg
c2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7
Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIpOwotICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsK
LSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgW3N1cGVyIGRl
YWxsb2NdOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1
cmF0aW9uLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJz
Lm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1h
bGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9y
dCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDx3dGYvSlNPTlZhbHVl
cy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLSMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9u
LWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2lt
cG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgotCi0KLQotCi10eXBl
ZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xQbGF0Zm9ybSkgewotICAgIFRlc3RQ
cm90b2NvbFBsYXRmb3JtQWxsLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYywKLSAg
ICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09T
LAotfTsKLQotCi0KLQotCi0KLQotCi0KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3Rv
Y29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1p
dGl2ZS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2Jq
ZWN0UHJpdmF0ZS5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0
b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi0KLQotCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29s
LmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+
Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5
cGU+Ci1PcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJp
bmcmIHZhbHVlKTsKLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2Nv
bFBsYXRmb3JtIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFBy
b3RvY29sUGxhdGZvcm1BbGw6Ci0gICAgICAgIHJldHVybiAiYWxsIl9zOwotICAgIGNhc2UgVGVz
dFByb3RvY29sUGxhdGZvcm1HZW5lcmljOgotICAgICAgICByZXR1cm4gImdlbmVyaWMiX3M7Ci0g
ICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzoKLSAgICAgICAgcmV0dXJuICJpb3MiX3M7
Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOgotICAgICAgICByZXR1cm4gIm1h
Y29zIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90
b2NvbFBsYXRmb3JtPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsK
LSAgICBpZiAodmFsdWUgPT0gImFsbCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0
Zm9ybUFsbDsKLSAgICBpZiAodmFsdWUgPT0gImdlbmVyaWMiKQotICAgICAgICByZXR1cm4gVGVz
dFByb3RvY29sUGxhdGZvcm1HZW5lcmljOwotICAgIGlmICh2YWx1ZSA9PSAiaW9zIikKLSAgICAg
ICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOwotICAgIGlmICh2YWx1ZSA9PSAibWFj
b3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzsKLSAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwotfQotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIK
LSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rv
ci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNw
ZWN0b3I7Ci0KLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChSdW50aW1l
RG9tYWluKQotCi0rICh2b2lkKV9wYXJzZVJlbW90ZU9iamVjdElkOihOU051bWJlciAqKilvdXRW
YWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24g
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChSdW50aW1lRG9tYWluKQotCi0rICh2b2lkKV9w
YXJzZVJlbW90ZU9iamVjdElkOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQp
cGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05T
TnVtYmVyIGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gKE5TTnVtYmVyICopcGF5bG9hZDsKLX0K
LQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1t
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlw
ZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBv
cnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucy5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVj
dFByaXZhdGUuaD4KLSNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW1wb3J0IDx3dGYvSlNP
TlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLQotCi0jIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC90eXBlLWRlY2xh
cmF0aW9uLWFycmF5LXR5cGUuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFy
cmF5LXR5cGUuanNvbi1yZXN1bHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0ZTVj
N2U0MDkxLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5
cGUuanNvbi1yZXN1bHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMDczICswLDAgQEAKLSMjIyBCZWdp
biBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgotLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0vLyBEZWJ1Z2dlcgotSW5zcGVjdG9y
QmFja2VuZC5yZWdpc3RlckRvbWFpbigiRGVidWdnZXIiLCBudWxsKTsKLUluc3BlY3RvckJhY2tl
bmQucmVnaXN0ZXJFbnVtKCJEZWJ1Z2dlci5SZWFzb24iLCB7RGllZDogIkRpZWQiLCBGYWludGVk
OiAiRmFpbnRlZCIsIEh1bmdyeTogIkh1bmdyeSJ9KTsKLUluc3BlY3RvckJhY2tlbmQuYWN0aXZh
dGVEb21haW4oIkRlYnVnZ2VyIiwgbnVsbCk7Ci0jIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tl
bmRDb21tYW5kcy5qcwotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNw
YXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJh
dGlvbi1hcnJheS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCi0jaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotCi1uYW1lc3BhY2UgSW5z
cGVjdG9yIHsKLQotY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgot
ICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYm
IGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7
IH0KLSAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJl
dHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Ci1wcml2YXRlOgotICAgIFJlZlB0cjxC
YWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKLX07Ci0KLQotCi0KLX0gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgotCi0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCi0jIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0
Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBl
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdt
YSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXR5cGVkZWYgU3Ry
aW5nIEVycm9yU3RyaW5nOwotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5k
IEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJh
Y2tlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0
eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEJh
Y2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
RnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUg
PHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQot
I2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotI2luY2x1ZGUgIlRl
c3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgSW5z
cGVjdG9yIHsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6
IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1k
ZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmpl
Y3RzLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEZyb250ZW5kUm91
dGVyOwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEZyb250
ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hl
cnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlv
bi1hcnJheS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNo
ZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRl
ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3Rv
ciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9u
dGVuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0
cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1h
cnJheS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90
b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFtZXNwYWNlIElu
c3BlY3RvciB7Ci0KLQotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotLy8gRm9yd2FyZCBk
ZWNsYXJhdGlvbnMuCi1uYW1lc3BhY2UgRGVidWdnZXIgewotZW51bSBjbGFzcyBSZWFzb247Ci19
IC8vIERlYnVnZ2VyCi0vLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCi0KLQotLy8gVHlw
ZWRlZnMuCi1uYW1lc3BhY2UgRGVidWdnZXIgewotdHlwZWRlZiBpbnQgQnJlYWtwb2ludElkOwot
fSAvLyBEZWJ1Z2dlcgotCi1uYW1lc3BhY2UgUnVudGltZSB7Ci10eXBlZGVmIGludCBPYmplY3RJ
ZDsKLXR5cGVkZWYgSlNPTjo6QXJyYXlPZjxpbnQ+IEx1Y2t5TnVtYmVyczsKLXR5cGVkZWYgSlNP
Tjo6QXJyYXlPZjxTdHJpbmc+IEJhYnlOYW1lczsKLXR5cGVkZWYgSlNPTjo6QXJyYXlPZjxpbnQ+
IE5ld09iamVjdHM7Ci10eXBlZGVmIEpTT046OkFycmF5T2Y8aW50PiBPbGRPYmplY3RzOwotdHlw
ZWRlZiBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb24+
IFN0b3BSZWFzb25zOwotfSAvLyBSdW50aW1lCi0vLyBFbmQgb2YgdHlwZWRlZnMuCi0KLW5hbWVz
cGFjZSBUZXN0SGVscGVycyB7Ci0KLVN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29k
ZSk7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShU
IGVudW1WYWx1ZSkKLXsKLSAgICByZXR1cm4gZ2V0RW51bUNvbnN0YW50VmFsdWUoc3RhdGljX2Nh
c3Q8aW50PihlbnVtVmFsdWUpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKLQot
bmFtZXNwYWNlIERlYnVnZ2VyIHsKLS8qICAqLwotZW51bSBjbGFzcyBSZWFzb24gewotICAgIERp
ZWQgPSAwLAotICAgIEZhaW50ZWQgPSAxLAotICAgIEh1bmdyeSA9IDIsCi19OyAvLyBlbnVtIGNs
YXNzIFJlYXNvbgotfSAvLyBEZWJ1Z2dlcgotCi0KLQotbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsK
LQotdGVtcGxhdGU8dHlwZW5hbWUgUHJvdG9jb2xFbnVtVHlwZT4KLU9wdGlvbmFsPFByb3RvY29s
RW51bVR5cGU+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZyhjb25zdCBTdHJpbmcmKTsKLQotLy8g
RW51bXMgaW4gdGhlICdEZWJ1Z2dlcicgRG9tYWluCi10ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNw
ZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJp
bmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbj4oY29uc3QgU3RyaW5nJik7
Ci0KLX0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29s
Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi1uYW1lc3BhY2UgV1RGIHsKLQotdGVtcGxh
dGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwotCi0vLyBIYXNoIGRlY2xhcmF0aW9u
cyBpbiB0aGUgJ0RlYnVnZ2VyJyBEb21haW4KLXRlbXBsYXRlPD4KLXN0cnVjdCBEZWZhdWx0SGFz
aDxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uPiB7Ci0gICAgdHlwZWRlZiBJ
bnRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb24+IEhhc2g7Ci19Owot
Ci19IC8vIG5hbWVzcGFjZSBXVEYKLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5o
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0KLSNpbmNsdWRlIDx3dGYv
T3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJ
bnNwZWN0b3IgewotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi1uYW1lc3BhY2UgVGVzdEhlbHBl
cnMgewotCi1zdGF0aWMgY29uc3QgY2hhciogY29uc3QgZW51bV9jb25zdGFudF92YWx1ZXNbXSA9
IHsKLSAgICAiRGllZCIsCi0gICAgIkZhaW50ZWQiLAotICAgICJIdW5ncnkiLAotfTsKLQotU3Ry
aW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7Ci0gICAgcmV0dXJuIGVudW1fY29u
c3RhbnRfdmFsdWVzW2NvZGVdOwotfQotCi0vLyBFbnVtcyBpbiB0aGUgJ0RlYnVnZ2VyJyBEb21h
aW4KLXRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpS
ZWFzb24+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1
Z2dlcjo6UmVhc29uPihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQotewotICAgIHN0YXRp
YyBjb25zdCBzaXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsKLSAgICAgICAgKHNpemVfdClJbnNw
ZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uOjpEaWVkLAotICAgICAgICAoc2l6ZV90
KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb246OkZhaW50ZWQsCi0gICAgICAg
IChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbjo6SHVuZ3J5LAot
ICAgIH07Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAzOyArK2kpCi0gICAgICAgIGlmIChw
cm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0p
Ci0gICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFz
b24pY29uc3RhbnRWYWx1ZXNbaV07Ci0KLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi0K
LX0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCi0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2Nv
bAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xPYmplY3RzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3Bh
dGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0
aW9uLWFycmF5LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2Vu
ZERpc3BhdGNoZXJzLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi0KLQotbmFtZXNw
YWNlIEluc3BlY3RvciB7Ci0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2lt
cG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlICJUZXN0
UHJvdG9jb2xJbnRlcm5hbC5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENv
bmZpZ3VyYXRpb24uaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVj
bGFyYXRpb24tYXJyYXktdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KLQotX19h
dHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90
b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xD
b25maWd1cmF0aW9uLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1k
ZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgotCi0j
aW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFj
a2VuZERpc3BhdGNoZXJzLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNw
YXRjaGFibGVBZ2VudC5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNw
ZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwot
Ci1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgotewotICAgIEF1Z21l
bnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci19Ci0KLS0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciop
Y29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQot
ICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBfY29udHJv
bGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxv
YwotewotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sRXZlbnREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0K
LSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8d3RmL0pT
T05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0jIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNs
YXJhdGlvbi1hcnJheS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLSNpbXBvcnQg
PFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KLQotCi0KLQotdHlwZWRlZiBO
U19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sUGxhdGZvcm0pIHsKLSAgICBUZXN0UHJvdG9j
b2xQbGF0Zm9ybUFsbCwKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWMsCi0gICAgVGVz
dFByb3RvY29sUGxhdGZvcm1JT1MsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUywKLX07
Ci0KLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGVidWdnZXJSZWFz
b24pIHsKLSAgICBUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbkRpZWQsCi0gICAgVGVzdFByb3Rv
Y29sRGVidWdnZXJSZWFzb25GYWludGVkLAotICAgIFRlc3RQcm90b2NvbERlYnVnZ2VyUmVhc29u
SHVuZ3J5LAotfTsKLQotCi0KLQotCi0KLQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJv
dG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUu
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0
ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRl
LmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xs
ZXIuaD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLQotCi0KLSMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sSW50ZXJuYWwuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRl
Y2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgPFdlYkluc3Bl
Y3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3Rv
ciB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KLU9wdGlvbmFsPE9iakNFbnVt
VHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOwotCi1pbmxpbmUg
U3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sUGxhdGZvcm0gdmFsdWUpCi17Ci0g
ICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDoKLSAg
ICAgICAgcmV0dXJuICJhbGwiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVy
aWM6Ci0gICAgICAgIHJldHVybiAiZ2VuZXJpYyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBs
YXRmb3JtSU9TOgotICAgICAgICByZXR1cm4gImlvcyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2Nv
bFBsYXRmb3JtTWFjT1M6Ci0gICAgICAgIHJldHVybiAibWFjb3MiX3M7Ci0gICAgfQotfQotCi10
ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sUGxhdGZvcm0+IGZyb21Qcm90
b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiYWxs
IikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOwotICAgIGlmICh2YWx1
ZSA9PSAiZ2VuZXJpYyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVy
aWM7Ci0gICAgaWYgKHZhbHVlID09ICJpb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29s
UGxhdGZvcm1JT1M7Ci0gICAgaWYgKHZhbHVlID09ICJtYWNvcyIpCi0gICAgICAgIHJldHVybiBU
ZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0K
LQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbERlYnVnZ2VyUmVh
c29uIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29s
RGVidWdnZXJSZWFzb25EaWVkOgotICAgICAgICByZXR1cm4gIkRpZWQiX3M7Ci0gICAgY2FzZSBU
ZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbkZhaW50ZWQ6Ci0gICAgICAgIHJldHVybiAiRmFpbnRl
ZCJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERlYnVnZ2VyUmVhc29uSHVuZ3J5OgotICAgICAg
ICByZXR1cm4gIkh1bmdyeSJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRp
b25hbDxUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbj4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0
IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJEaWVkIikKLSAgICAgICAgcmV0
dXJuIFRlc3RQcm90b2NvbERlYnVnZ2VyUmVhc29uRGllZDsKLSAgICBpZiAodmFsdWUgPT0gIkZh
aW50ZWQiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGVidWdnZXJSZWFzb25GYWludGVk
OwotICAgIGlmICh2YWx1ZSA9PSAiSHVuZ3J5IikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2Nv
bERlYnVnZ2VyUmVhc29uSHVuZ3J5OwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLQot
Ci19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJh
dGlvbi1hcnJheS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0KLSNpbXBv
cnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgot
I2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLQot
dXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMgKERlYnVnZ2VyRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZUJyZWFrcG9pbnRJ
ZDooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lk
KV9wYXJzZVJlYXNvbjooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxv
YWQ7Ci0KLUBlbmQKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChSdW50
aW1lRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZU9iamVjdElkOihOU051bWJlciAqKilvdXRWYWx1
ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLSsgKHZvaWQpX3BhcnNlTHVja3lOdW1iZXJzOihO
U0FycmF5Lyo8TlNOdW1iZXI+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7
Ci0rICh2b2lkKV9wYXJzZUJhYnlOYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKW91dFZh
bHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotKyAodm9pZClfcGFyc2VOZXdPYmplY3RzOihO
U0FycmF5Lyo8TlNOdW1iZXI+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7
Ci0rICh2b2lkKV9wYXJzZU9sZE9iamVjdHM6KE5TQXJyYXkvKjxOU051bWJlcj4qLyAqKilvdXRW
YWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLSsgKHZvaWQpX3BhcnNlU3RvcFJlYXNvbnM6
KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9h
ZDsKLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
IChEZWJ1Z2dlckRvbWFpbikKLQotKyAodm9pZClfcGFyc2VCcmVha3BvaW50SWQ6KE5TTnVtYmVy
ICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNOdW1iZXIgY2xhc3NdKTsKLSAgICAqb3V0VmFs
dWUgPSAoTlNOdW1iZXIgKilwYXlsb2FkOwotfQotCi0rICh2b2lkKV9wYXJzZVJlYXNvbjooTlNO
dW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19F
WENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBjbGFzc10pOwotICAgIE9w
dGlvbmFsPFRlc3RQcm90b2NvbERlYnVnZ2VyUmVhc29uPiByZXN1bHQgPSBJbnNwZWN0b3I6OmZy
b21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbj4ocGF5bG9hZCk7Ci0g
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfRU5VTV9WQUxVRShyZXN1bHQsIEAiUmVhc29uIik7
Ci0gICAgKm91dFZhbHVlID0gQChyZXN1bHQudmFsdWUoKSk7Ci19Ci0KLUBlbmQKLUBpbXBsZW1l
bnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFJ1bnRpbWVEb21haW4pCi0KLSsg
KHZvaWQpX3BhcnNlT2JqZWN0SWQ6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihp
ZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBb
TlNOdW1iZXIgY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSAoTlNOdW1iZXIgKilwYXlsb2FkOwot
fQotCi0rICh2b2lkKV9wYXJzZUx1Y2t5TnVtYmVyczooTlNBcnJheS8qPE5TTnVtYmVyPiovICoq
KW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNBcnJheS8qPE5TTnVtYmVyPiovIGNsYXNzXSk7Ci0g
ICAgKm91dFZhbHVlID0gKE5TQXJyYXkvKjxOU051bWJlcj4qLyAqKXBheWxvYWQ7Ci19Ci0KLSsg
KHZvaWQpX3BhcnNlQmFieU5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopb3V0VmFsdWUg
ZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9U
WVBFKHBheWxvYWQsIFtOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gY2xhc3NdKTsKLSAgICAqb3V0VmFs
dWUgPSAoTlNBcnJheS8qPE5TU3RyaW5nPiovICopcGF5bG9hZDsKLX0KLQotKyAodm9pZClfcGFy
c2VOZXdPYmplY3RzOihOU0FycmF5Lyo8TlNOdW1iZXI+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxv
YWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxv
YWQsIFtOU0FycmF5Lyo8TlNOdW1iZXI+Ki8gY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSAoTlNB
cnJheS8qPE5TTnVtYmVyPiovICopcGF5bG9hZDsKLX0KLQotKyAodm9pZClfcGFyc2VPbGRPYmpl
Y3RzOihOU0FycmF5Lyo8TlNOdW1iZXI+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBh
eWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0Fy
cmF5Lyo8TlNOdW1iZXI+Ki8gY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSAoTlNBcnJheS8qPE5T
TnVtYmVyPiovICopcGF5bG9hZDsKLX0KLQotKyAodm9pZClfcGFyc2VTdG9wUmVhc29uczooTlNB
cnJheS8qPE5TU3RyaW5nPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17
Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNBcnJheS8qPE5T
U3RyaW5nPiovIGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gKE5TQXJyYXkvKjxOU1N0cmluZz4q
LyAqKXBheWxvYWQ7Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0K
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5
LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0j
aW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05P
YmplY3RQcml2YXRlLmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3Rm
L0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0KLQotCi0K
LSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5
cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJh
dGlvbi1lbnVtLXR5cGUuanNvbi1yZXN1bHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDg5NzllOGRiZTJmLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWVu
dW0tdHlwZS5qc29uLXJlc3VsdAorKysgL2Rldi9udWxsCkBAIC0xLDEwODYgKzAsMCBAQAotIyMj
IEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotLy8gUnVudGltZQotSW5zcGVj
dG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiUnVudGltZSIsIG51bGwpOwotSW5zcGVjdG9yQmFj
a2VuZC5yZWdpc3RlckVudW0oIlJ1bnRpbWUuRmFybUFuaW1hbHMiLCB7UGlnczogIlBpZ3MiLCBD
b3dzOiAiQ293cyIsIENhdHM6ICJDYXRzIiwgSGVuczogIkhlbnMifSk7Ci1JbnNwZWN0b3JCYWNr
ZW5kLnJlZ2lzdGVyRW51bSgiUnVudGltZS5Ud29MZWdnZWRBbmltYWxzIiwge0R1Y2tzOiAiRHVj
a3MiLCBIZW5zOiAiSGVucyIsIENyb3dzOiAiQ3Jvd3MiLCBGbGFtaW5nb3M6ICJGbGFtaW5nb3Mi
fSk7Ci1JbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJSdW50aW1lIiwgbnVsbCk7Ci0j
IyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgotLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi0jaW5jbHVkZSAiVGVzdFBy
b3RvY29sVHlwZXMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5k
Um91dGVyLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihS
ZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRj
aGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQotICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNr
ZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7
IH0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNw
YXRjaGVyOwotfTsKLQotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSNlbmRpZiAv
LyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSMjIyBFbmQgRmlsZTog
VGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
QmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0
eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29s
T2JqZWN0cy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJ
bnNwZWN0b3IgewotCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQotCi0KLX0gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgK
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYv
SlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQotI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIK
LSNlbmRpZgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMj
IyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9y
IHsKLQotY2xhc3MgRnJvbnRlbmRSb3V0ZXI7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgot
IyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQot
IyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi1uYW1lc3BhY2UgUHJvdG9jb2wg
ewotCi0KLQotLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCi1uYW1lc3BhY2UgUnVudGltZSB7Ci1l
bnVtIGNsYXNzIEZhcm1BbmltYWxzOwotZW51bSBjbGFzcyBUd29MZWdnZWRBbmltYWxzOwotfSAv
LyBSdW50aW1lCi0vLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCi0KLQotCi0KLW5hbWVz
cGFjZSBUZXN0SGVscGVycyB7Ci0KLVN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29k
ZSk7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShU
IGVudW1WYWx1ZSkKLXsKLSAgICByZXR1cm4gZ2V0RW51bUNvbnN0YW50VmFsdWUoc3RhdGljX2Nh
c3Q8aW50PihlbnVtVmFsdWUpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKLQot
bmFtZXNwYWNlIFJ1bnRpbWUgewotLyogICovCi1lbnVtIGNsYXNzIEZhcm1BbmltYWxzIHsKLSAg
ICBQaWdzID0gMCwKLSAgICBDb3dzID0gMSwKLSAgICBDYXRzID0gMiwKLSAgICBIZW5zID0gMywK
LX07IC8vIGVudW0gY2xhc3MgRmFybUFuaW1hbHMKLS8qICAqLwotZW51bSBjbGFzcyBUd29MZWdn
ZWRBbmltYWxzIHsKLSAgICBEdWNrcyA9IDQsCi0gICAgSGVucyA9IDMsCi0gICAgQ3Jvd3MgPSA1
LAotICAgIEZsYW1pbmdvcyA9IDYsCi19OyAvLyBlbnVtIGNsYXNzIFR3b0xlZ2dlZEFuaW1hbHMK
LX0gLy8gUnVudGltZQotCi0KLQotbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKLQotdGVtcGxhdGU8
dHlwZW5hbWUgUHJvdG9jb2xFbnVtVHlwZT4KLU9wdGlvbmFsPFByb3RvY29sRW51bVR5cGU+IHBh
cnNlRW51bVZhbHVlRnJvbVN0cmluZyhjb25zdCBTdHJpbmcmKTsKLQotLy8gRW51bXMgaW4gdGhl
ICdSdW50aW1lJyBEb21haW4KLXRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVj
dG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM+KGNvbnN0IFN0cmluZyYpOwotdGVt
cGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2Vk
QW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1
bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM+KGNvbnN0IFN0cmluZyYpOwotCi19IC8vIG5hbWVzcGFj
ZSBUZXN0SGVscGVycwotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKLQotbmFtZXNwYWNlIFdURiB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBEZWZhdWx0SGFzaDsKLQotLy8gSGFzaCBkZWNsYXJhdGlvbnMgaW4gdGhlICdSdW50aW1l
JyBEb21haW4KLXRlbXBsYXRlPD4KLXN0cnVjdCBEZWZhdWx0SGFzaDxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpSdW50aW1lOjpGYXJtQW5pbWFscz4gewotICAgIHR5cGVkZWYgSW50SGFzaDxJbnNwZWN0
b3I6OlByb3RvY29sOjpSdW50aW1lOjpGYXJtQW5pbWFscz4gSGFzaDsKLX07Ci10ZW1wbGF0ZTw+
Ci1zdHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHdvTGVn
Z2VkQW5pbWFscz4gewotICAgIHR5cGVkZWYgSW50SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpS
dW50aW1lOjpUd29MZWdnZWRBbmltYWxzPiBIYXNoOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV1RG
Ci0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0
UHJvdG9jb2xPYmplY3RzLmgiCi0KLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1uYW1lc3Bh
Y2UgUHJvdG9jb2wgewotCi1uYW1lc3BhY2UgVGVzdEhlbHBlcnMgewotCi1zdGF0aWMgY29uc3Qg
Y2hhciogY29uc3QgZW51bV9jb25zdGFudF92YWx1ZXNbXSA9IHsKLSAgICAiUGlncyIsCi0gICAg
IkNvd3MiLAotICAgICJDYXRzIiwKLSAgICAiSGVucyIsCi0gICAgIkR1Y2tzIiwKLSAgICAiQ3Jv
d3MiLAotICAgICJGbGFtaW5nb3MiLAotfTsKLQotU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVl
KGludCBjb2RlKSB7Ci0gICAgcmV0dXJuIGVudW1fY29uc3RhbnRfdmFsdWVzW2NvZGVdOwotfQot
Ci0vLyBFbnVtcyBpbiB0aGUgJ1J1bnRpbWUnIERvbWFpbgotdGVtcGxhdGU8PgotT3B0aW9uYWw8
SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM+IHBhcnNlRW51bVZhbHVl
RnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpGYXJtQW5pbWFscz4oY29u
c3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKLXsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNv
bnN0YW50VmFsdWVzW10gPSB7Ci0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6
UnVudGltZTo6RmFybUFuaW1hbHM6OlBpZ3MsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQ
cm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM6OkNvd3MsCi0gICAgICAgIChzaXplX3QpSW5z
cGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM6OkNhdHMsCi0gICAgICAgIChz
aXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM6OkhlbnMsCi0g
ICAgfTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDQ7ICsraSkKLSAgICAgICAgaWYgKHBy
b3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkK
LSAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFu
aW1hbHMpY29uc3RhbnRWYWx1ZXNbaV07Ci0KLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQot
Ci10ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUd29M
ZWdnZWRBbmltYWxzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFscz4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmlu
ZykKLXsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7Ci0gICAg
ICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFs
czo6RHVja3MsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6
VHdvTGVnZ2VkQW5pbWFsczo6SGVucywKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3Rv
Y29sOjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxzOjpDcm93cywKLSAgICAgICAgKHNpemVfdClJ
bnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxzOjpGbGFtaW5nb3Ms
Ci0gICAgfTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDQ7ICsraSkKLSAgICAgICAgaWYg
KHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ld
XSkKLSAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHdv
TGVnZ2VkQW5pbWFscyljb25zdGFudFZhbHVlc1tpXTsKLQotICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7Ci19Ci0KLQotfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKLQotCi0KLX0gLy8gbmFtZXNw
YWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xC
YWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5
cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVy
bmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQot
Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgot
Ci0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZp
Zy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNs
dWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLW5hbWVzcGFjZSBJ
bnNwZWN0b3IgewotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24uaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5o
PgotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2Ug
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0Ci1AZW5kCi0KLQotIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24u
aCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbXBvcnQgIlRlc3RQcm90
b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJu
YXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRh
YmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3Bl
Y3RvcjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KLXsKLSAg
ICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotfQotCi0tIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRy
b2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICgh
c2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAg
X2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lk
KWRlYWxsb2MKLXsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFs
LmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8
d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlw
ZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2lt
cG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgotCi0KLQotCi10eXBl
ZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xQbGF0Zm9ybSkgewotICAgIFRlc3RQ
cm90b2NvbFBsYXRmb3JtQWxsLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYywKLSAg
ICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09T
LAotfTsKLQotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xSdW50aW1l
RmFybUFuaW1hbHMpIHsKLSAgICBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHNQaWdzLAot
ICAgIFRlc3RQcm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFsc0Nvd3MsCi0gICAgVGVzdFByb3RvY29s
UnVudGltZUZhcm1BbmltYWxzQ2F0cywKLSAgICBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1h
bHNIZW5zLAotfTsKLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sUnVu
dGltZVR3b0xlZ2dlZEFuaW1hbHMpIHsKLSAgICBUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2Vk
QW5pbWFsc0R1Y2tzLAotICAgIFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzSGVu
cywKLSAgICBUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFsc0Nyb3dzLAotICAgIFRl
c3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzRmxhbWluZ29zLAotfTsKLQotCi0KLQot
Ci0KLQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxp
dHlPYmplY3RzLmg+Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2lt
cG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKLSNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8d3RmL0pT
T05WYWx1ZXMuaD4KLQotCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5o
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAi
VGVzdFByb3RvY29sLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNv
bnZlcnNpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBPYmpDRW51bVR5cGU+Ci1PcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmlu
Zyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5n
KFRlc3RQcm90b2NvbFBsYXRmb3JtIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAg
IGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1BbGw6Ci0gICAgICAgIHJldHVybiAiYWxsIl9zOwot
ICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOgotICAgICAgICByZXR1cm4gImdl
bmVyaWMiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzoKLSAgICAgICAgcmV0
dXJuICJpb3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOgotICAgICAg
ICByZXR1cm4gIm1hY29zIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlv
bmFsPFRlc3RQcm90b2NvbFBsYXRmb3JtPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5n
JiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gImFsbCIpCi0gICAgICAgIHJldHVybiBUZXN0
UHJvdG9jb2xQbGF0Zm9ybUFsbDsKLSAgICBpZiAodmFsdWUgPT0gImdlbmVyaWMiKQotICAgICAg
ICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOwotICAgIGlmICh2YWx1ZSA9PSAi
aW9zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOwotICAgIGlmICh2
YWx1ZSA9PSAibWFjb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1NYWNP
UzsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi0KLWlubGluZSBTdHJpbmcgdG9Qcm90
b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHMgdmFsdWUpCi17Ci0gICAg
c3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHNQ
aWdzOgotICAgICAgICByZXR1cm4gIlBpZ3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xSdW50
aW1lRmFybUFuaW1hbHNDb3dzOgotICAgICAgICByZXR1cm4gIkNvd3MiX3M7Ci0gICAgY2FzZSBU
ZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHNDYXRzOgotICAgICAgICByZXR1cm4gIkNhdHMi
X3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHNIZW5zOgotICAgICAg
ICByZXR1cm4gIkhlbnMiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9u
YWw8VGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gIlBpZ3MiKQotICAgICAgICBy
ZXR1cm4gVGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzUGlnczsKLSAgICBpZiAodmFsdWUg
PT0gIkNvd3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxz
Q293czsKLSAgICBpZiAodmFsdWUgPT0gIkNhdHMiKQotICAgICAgICByZXR1cm4gVGVzdFByb3Rv
Y29sUnVudGltZUZhcm1BbmltYWxzQ2F0czsKLSAgICBpZiAodmFsdWUgPT0gIkhlbnMiKQotICAg
ICAgICByZXR1cm4gVGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzSGVuczsKLSAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwotfQotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVz
dFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHMgdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZh
bHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFsc0R1Y2tz
OgotICAgICAgICByZXR1cm4gIkR1Y2tzIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUnVudGlt
ZVR3b0xlZ2dlZEFuaW1hbHNIZW5zOgotICAgICAgICByZXR1cm4gIkhlbnMiX3M7Ci0gICAgY2Fz
ZSBUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFsc0Nyb3dzOgotICAgICAgICByZXR1
cm4gIkNyb3dzIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1h
bHNGbGFtaW5nb3M6Ci0gICAgICAgIHJldHVybiAiRmxhbWluZ29zIl9zOwotICAgIH0KLX0KLQot
dGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRB
bmltYWxzPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBp
ZiAodmFsdWUgPT0gIkR1Y2tzIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFJ1bnRpbWVU
d29MZWdnZWRBbmltYWxzRHVja3M7Ci0gICAgaWYgKHZhbHVlID09ICJIZW5zIikKLSAgICAgICAg
cmV0dXJuIFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzSGVuczsKLSAgICBpZiAo
dmFsdWUgPT0gIkNyb3dzIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFJ1bnRpbWVUd29M
ZWdnZWRBbmltYWxzQ3Jvd3M7Ci0gICAgaWYgKHZhbHVlID09ICJGbGFtaW5nb3MiKQotICAgICAg
ICByZXR1cm4gVGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHNGbGFtaW5nb3M7Ci0g
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0K
LSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAi
VGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3Rv
Y29sSlNPTk9iamVjdFByaXZhdGUuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQot
QGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFJ1bnRpbWVEb21haW4pCi0K
LSsgKHZvaWQpX3BhcnNlRmFybUFuaW1hbHM6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXls
b2FkOihpZClwYXlsb2FkOwotKyAodm9pZClfcGFyc2VUd29MZWdnZWRBbmltYWxzOihOU051bWJl
ciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLQotQGVuZAotCi1AaW1wbGVt
ZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChSdW50aW1lRG9tYWluKQotCi0r
ICh2b2lkKV9wYXJzZUZhcm1BbmltYWxzOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9h
ZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9h
ZCwgW05TU3RyaW5nIGNsYXNzXSk7Ci0gICAgT3B0aW9uYWw8VGVzdFByb3RvY29sUnVudGltZUZh
cm1BbmltYWxzPiByZXN1bHQgPSBJbnNwZWN0b3I6OmZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJv
dG9jb2xSdW50aW1lRmFybUFuaW1hbHM+KHBheWxvYWQpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfQkFEX0VOVU1fVkFMVUUocmVzdWx0LCBAIkZhcm1BbmltYWxzIik7Ci0gICAgKm91dFZhbHVl
ID0gQChyZXN1bHQudmFsdWUoKSk7Ci19Ci0KLSsgKHZvaWQpX3BhcnNlVHdvTGVnZ2VkQW5pbWFs
czooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBU
SFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBjbGFzc10pOwot
ICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzPiByZXN1bHQg
PSBJbnNwZWN0b3I6OmZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVn
Z2VkQW5pbWFscz4ocGF5bG9hZCk7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfRU5VTV9W
QUxVRShyZXN1bHQsIEAiVHdvTGVnZ2VkQW5pbWFscyIpOwotICAgICpvdXRWYWx1ZSA9IEAocmVz
dWx0LnZhbHVlKCkpOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1t
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVt
LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0j
aW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05P
YmplY3RQcml2YXRlLmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3Rm
L0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0KLQotIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvdHlwZS1k
ZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRp
b24tb2JqZWN0LXR5cGUuanNvbi1yZXN1bHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDQyZTZkYTJiYmM4Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLW9i
amVjdC10eXBlLmpzb24tcmVzdWx0CisrKyAvZGV2L251bGwKQEAgLTEsMjQ1NSArMCwwIEBACi0j
IyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLS8vIERhdGFiYXNlCi1J
bnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJEYXRhYmFzZSIsIG51bGwpOwotSW5zcGVj
dG9yQmFja2VuZC5yZWdpc3RlckVudW0oIkRhdGFiYXNlLk1vdXNlQnV0dG9uIiwge05vbmU6ICJO
b25lIiwgTGVmdDogIkxlZnQiLCBNaWRkbGU6ICJNaWRkbGUiLCBSaWdodDogIlJpZ2h0In0pOwot
SW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIkRhdGFiYXNlLk9wdGlvbmFsUGFyYW1ldGVy
QnVuZGxlRGlyZWN0aW9uYWxpdHkiLCB7TFRSOiAiTFRSIiwgUlRMOiAiUlRMIn0pOwotSW5zcGVj
dG9yQmFja2VuZC5yZWdpc3RlckVudW0oIkRhdGFiYXNlLlBhcmFtZXRlckJ1bmRsZURpcmVjdGlv
bmFsaXR5Iiwge0xUUjogIkxUUiIsIFJUTDogIlJUTCJ9KTsKLUluc3BlY3RvckJhY2tlbmQuYWN0
aXZhdGVEb21haW4oIkRhdGFiYXNlIiwgbnVsbCk7Ci0jIyMgRW5kIEZpbGU6IEluc3BlY3RvckJh
Y2tlbmRDb21tYW5kcy5qcwotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmRE
aXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNs
YXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgotI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLQotbmFtZXNwYWNl
IEluc3BlY3RvciB7Ci0KLWNsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1Ymxp
YzoKLSAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hl
cj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNo
ZXIpOyB9Ci0gICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3Qg
eyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQotcHJpdmF0ZToKLSAgICBSZWZQ
dHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Ci19OwotCi0KLQotCi19
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQotIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERp
c3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0
LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0j
cHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdHlwZWRl
ZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMj
IyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
VGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2lu
Y2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotI2luY2x1
ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNlbmRpZgotCi1uYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5k
IEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
RnJvbnRlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
dHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3Rv
Y29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBGcm9u
dGVuZFJvdXRlcjsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRl
c3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERp
c3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVj
bGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEZyb250ZW5k
RGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250
ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTog
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xPYmplY3RzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xh
cmF0aW9uLW9iamVjdC10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFt
ZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotLy8g
Rm9yd2FyZCBkZWNsYXJhdGlvbnMuCi1uYW1lc3BhY2UgRGF0YWJhc2UgewotY2xhc3MgRXJyb3I7
Ci1jbGFzcyBPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTsKLWNsYXNzIFBhcmFtZXRlckJ1bmRsZTsK
LWNsYXNzIE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHM7Ci1jbGFzcyBEdW1teU9iamVj
dDsKLWVudW0gY2xhc3MgTW91c2VCdXR0b247Ci19IC8vIERhdGFiYXNlCi0KLW5hbWVzcGFjZSBU
ZXN0IHsKLWNsYXNzIFBhcmFtZXRlckJ1bmRsZTsKLX0gLy8gVGVzdAotLy8gRW5kIG9mIGZvcndh
cmQgZGVjbGFyYXRpb25zLgotCi0KLS8vIFR5cGVkZWZzLgotbmFtZXNwYWNlIERhdGFiYXNlIHsK
LXR5cGVkZWYgSlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJy
b3I+IEVycm9yTGlzdDsKLX0gLy8gRGF0YWJhc2UKLS8vIEVuZCBvZiB0eXBlZGVmcy4KLQotbmFt
ZXNwYWNlIFRlc3RIZWxwZXJzIHsKLQotU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBj
b2RlKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVl
KFQgZW51bVZhbHVlKQotewotICAgIHJldHVybiBnZXRFbnVtQ29uc3RhbnRWYWx1ZShzdGF0aWNf
Y2FzdDxpbnQ+KGVudW1WYWx1ZSkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwot
Ci1uYW1lc3BhY2UgRGF0YWJhc2UgewotLyogRGF0YWJhc2UgZXJyb3IuICovCi1jbGFzcyBFcnJv
ciA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKLXB1YmxpYzoKLSAgICBlbnVtIHsKLSAgICAg
ICAgTm9GaWVsZHNTZXQgPSAwLAotICAgICAgICBNZXNzYWdlU2V0ID0gMSA8PCAwLAotICAgICAg
ICBDb2RlU2V0ID0gMSA8PCAxLAotICAgICAgICBBbGxGaWVsZHNTZXQgPSAoTWVzc2FnZVNldCB8
IENvZGVTZXQpCi0gICAgfTsKLQotICAgIHRlbXBsYXRlPGludCBTVEFURT4KLSAgICBjbGFzcyBC
dWlsZGVyIHsKLSAgICBwcml2YXRlOgotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBtX3Jl
c3VsdDsKLQotICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+
JiBjYXN0U3RhdGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0
X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBCdWlsZGVyKFJlZjwvKkVycm9yKi9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQotICAgICAgICAg
ICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9u
X2luaXRfc3RhdGUpOwotICAgICAgICB9Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBFcnJvcjsKLSAg
ICBwdWJsaWM6Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1lc3NhZ2VTZXQ+JiBzZXRNZXNz
YWdlKGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKCEoU1RBVEUgJiBNZXNzYWdlU2V0KSwgcHJvcGVydHlfbWVzc2FnZV9hbHJlYWR5X3Nl
dCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJtZXNzYWdlIl9zLCB2YWx1ZSk7
Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1lc3NhZ2VTZXQ+KCk7Ci0gICAgICAgIH0K
LQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29kZVNldD4mIHNldENvZGUoaW50IHZhbHVlKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29kZVNldCks
IHByb3BlcnR5X2NvZGVfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldElu
dGVnZXIoImNvZGUiX3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29k
ZVNldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIFJlZjxFcnJvcj4gcmVsZWFzZSgpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwg
cmVzdWx0X2lzX25vdF9yZWFkeSk7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2Yo
RXJyb3IpID09IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7Ci0KLSAgICAgICAg
ICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25SZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVs
bCgpOwotICAgICAgICAgICAgYXV0byByZXN1bHQgPSBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0
PFJlZjxFcnJvcj4qPigmanNvblJlc3VsdCkpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
LSAgICAgICAgfQotICAgIH07Ci0KLSAgICAvKgotICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3Rv
cjoKLSAgICAgKiBSZWY8RXJyb3I+IHJlc3VsdCA9IEVycm9yOjpjcmVhdGUoKQotICAgICAqICAg
ICAuc2V0TWVzc2FnZSguLi4pCi0gICAgICogICAgIC5zZXRDb2RlKC4uLikKLSAgICAgKiAgICAg
LnJlbGVhc2UoKTsKLSAgICAgKi8KLSAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3Jl
YXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpKTsKLSAgICB9Ci19OwotCi0vKiBFbnVtZXJhdGVzIGRpZmZlcmVudCBt
b3VzZSBidXR0b25zIHRoYXQgY2FuIGJlIHVzZWQuICovCi1lbnVtIGNsYXNzIE1vdXNlQnV0dG9u
IHsKLSAgICBOb25lID0gMCwKLSAgICBMZWZ0ID0gMSwKLSAgICBNaWRkbGUgPSAyLAotICAgIFJp
Z2h0ID0gMywKLX07IC8vIGVudW0gY2xhc3MgTW91c2VCdXR0b24KLWNsYXNzIE9wdGlvbmFsUGFy
YW1ldGVyQnVuZGxlIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewotcHVibGljOgotICAgIC8v
IE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ2RpcmVjdGlvbmFsaXR5JyB3aGlsZSBnZW5lcmF0
aW5nIE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlLgotICAgIGVudW0gY2xhc3MgRGlyZWN0aW9uYWxp
dHkgewotICAgICAgICBMVFIgPSA0LAotICAgICAgICBSVEwgPSA1LAotICAgIH07IC8vIGVudW0g
Y2xhc3MgRGlyZWN0aW9uYWxpdHkKLSAgICBlbnVtIHsKLSAgICAgICAgTm9GaWVsZHNTZXQgPSAw
LAotICAgICAgICBBbGxGaWVsZHNTZXQgPSAwCi0gICAgfTsKLQotICAgIHRlbXBsYXRlPGludCBT
VEFURT4KLSAgICBjbGFzcyBCdWlsZGVyIHsKLSAgICBwcml2YXRlOgotICAgICAgICBSZWZQdHI8
SlNPTjo6T2JqZWN0PiBtX3Jlc3VsdDsKLQotICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVp
bGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyKFJlZjwvKk9wdGlvbmFsUGFyYW1ldGVyQnVuZGxl
Ki9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQotICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3Zl
KG9iamVjdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09
IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwotICAgICAg
ICB9Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTsKLSAgICBw
dWJsaWM6Ci0KLSAgICAgICAgUmVmPE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlPiByZWxlYXNlKCkK
LSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRz
U2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNp
emVvZihPcHRpb25hbFBhcmFtZXRlckJ1bmRsZSkgPT0gc2l6ZW9mKEpTT046Ok9iamVjdCksIGNh
bm5vdF9jYXN0KTsKLQotICAgICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4ganNvblJlc3VsdCA9
IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7Ci0gICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFdU
Rk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlPio+KCZq
c29uUmVzdWx0KSk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAg
fTsKLQotICAgIC8qCi0gICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgotICAgICAqIFJlZjxP
cHRpb25hbFBhcmFtZXRlckJ1bmRsZT4gcmVzdWx0ID0gT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU6
OmNyZWF0ZSgpCi0gICAgICogICAgIC5yZWxlYXNlKCk7Ci0gICAgICovCi0gICAgc3RhdGljIEJ1
aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gQnVpbGRl
cjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7Ci0gICAgfQotCi0gICAgdm9p
ZCBzZXRDb2x1bW5OYW1lcyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiB2YWx1ZSkKLSAg
ICB7Ci0gICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywg
V1RGTW92ZSh2YWx1ZSkpOwotICAgIH0KLQotICAgIHZvaWQgc2V0QnV0dG9ucyhSZWZQdHI8SlNP
Tjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b24+PiB2
YWx1ZSkKLSAgICB7Ci0gICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldEFycmF5KCJidXR0b25z
Il9zLCBXVEZNb3ZlKHZhbHVlKSk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXREaXJlY3Rpb25hbGl0
eShEaXJlY3Rpb25hbGl0eSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEpTT046Ok9iamVjdEJhc2U6
OnNldFN0cmluZygiZGlyZWN0aW9uYWxpdHkiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RI
ZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSh2YWx1ZSkpOwotICAgIH0KLQotICAgIHZvaWQg
c2V0Tm90ZXMoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEpTT046Ok9iamVj
dEJhc2U6OnNldFN0cmluZygibm90ZXMiX3MsIHZhbHVlKTsKLSAgICB9Ci0KLSAgICB2b2lkIHNl
dFRpbWVzdGFtcChkb3VibGUgdmFsdWUpCi0gICAgewotICAgICAgICBKU09OOjpPYmplY3RCYXNl
OjpzZXREb3VibGUoInRpbWVzdGFtcCJfcywgdmFsdWUpOwotICAgIH0KLQotICAgIHZvaWQgc2V0
VmFsdWVzKFJlZlB0cjxKU09OOjpPYmplY3Q+IHZhbHVlKQotICAgIHsKLSAgICAgICAgSlNPTjo6
T2JqZWN0QmFzZTo6c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFdURk1vdmUodmFsdWUpKTsKLSAgICB9
Ci0KLSAgICB2b2lkIHNldFBheWxvYWQoUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZSkKLSAgICB7
Ci0gICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldFZhbHVlKCJwYXlsb2FkIl9zLCBXVEZNb3Zl
KHZhbHVlKSk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRFcnJvcihSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEpTT046Ok9i
amVjdEJhc2U6OnNldE9iamVjdCgiZXJyb3IiX3MsIFdURk1vdmUodmFsdWUpKTsKLSAgICB9Ci0K
LSAgICB2b2lkIHNldEVycm9yTGlzdChSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6OkVycm9yTGlzdD4gdmFsdWUpCi0gICAgewotICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpz
ZXRBcnJheSgiZXJyb3JMaXN0Il9zLCBXVEZNb3ZlKHZhbHVlKSk7Ci0gICAgfQotfTsKLQotY2xh
c3MgUGFyYW1ldGVyQnVuZGxlIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewotcHVibGljOgot
ICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ2RpcmVjdGlvbmFsaXR5JyB3aGlsZSBn
ZW5lcmF0aW5nIFBhcmFtZXRlckJ1bmRsZS4KLSAgICBlbnVtIGNsYXNzIERpcmVjdGlvbmFsaXR5
IHsKLSAgICAgICAgTFRSID0gNCwKLSAgICAgICAgUlRMID0gNSwKLSAgICB9OyAvLyBlbnVtIGNs
YXNzIERpcmVjdGlvbmFsaXR5Ci0gICAgZW51bSB7Ci0gICAgICAgIE5vRmllbGRzU2V0ID0gMCwK
LSAgICAgICAgQ29sdW1uTmFtZXNTZXQgPSAxIDw8IDAsCi0gICAgICAgIEJ1dHRvbnNTZXQgPSAx
IDw8IDEsCi0gICAgICAgIERpcmVjdGlvbmFsaXR5U2V0ID0gMSA8PCAyLAotICAgICAgICBOb3Rl
c1NldCA9IDEgPDwgMywKLSAgICAgICAgVGltZXN0YW1wU2V0ID0gMSA8PCA0LAotICAgICAgICBW
YWx1ZXNTZXQgPSAxIDw8IDUsCi0gICAgICAgIFBheWxvYWRTZXQgPSAxIDw8IDYsCi0gICAgICAg
IEVycm9yU2V0ID0gMSA8PCA3LAotICAgICAgICBFcnJvckxpc3RTZXQgPSAxIDw8IDgsCi0gICAg
ICAgIEFsbEZpZWxkc1NldCA9IChDb2x1bW5OYW1lc1NldCB8IEJ1dHRvbnNTZXQgfCBEaXJlY3Rp
b25hbGl0eVNldCB8IE5vdGVzU2V0IHwgVGltZXN0YW1wU2V0IHwgVmFsdWVzU2V0IHwgUGF5bG9h
ZFNldCB8IEVycm9yU2V0IHwgRXJyb3JMaXN0U2V0KQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTxp
bnQgU1RBVEU+Ci0gICAgY2xhc3MgQnVpbGRlciB7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVm
UHRyPEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7Ci0KLSAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+
IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMp
OwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcihSZWY8LypQYXJhbWV0ZXJCdW5kbGUqL0pT
T046Ok9iamVjdD4mJiBvYmplY3QpCi0gICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2Jq
ZWN0KSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9G
aWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7Ci0gICAgICAgIH0K
LSAgICAgICAgZnJpZW5kIGNsYXNzIFBhcmFtZXRlckJ1bmRsZTsKLSAgICBwdWJsaWM6Ci0KLSAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IENvbHVtbk5hbWVzU2V0PiYgc2V0Q29sdW1uTmFtZXMoUmVm
UHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2x1bW5OYW1lc1NldCksIHByb3BlcnR5X2NvbHVt
bk5hbWVzX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheSgiY29s
dW1uTmFtZXMiX3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29sdW1u
TmFtZXNTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQnV0dG9u
c1NldD4mIHNldEJ1dHRvbnMoUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPj4gdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBCdXR0b25zU2V0KSwgcHJvcGVydHlfYnV0dG9uc19h
bHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoImJ1dHRvbnMiX3Ms
IHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8QnV0dG9uc1NldD4oKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBEaXJlY3Rpb25hbGl0eVNldD4mIHNl
dERpcmVjdGlvbmFsaXR5KERpcmVjdGlvbmFsaXR5IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRGlyZWN0aW9uYWxpdHlTZXQpLCBwcm9wZXJ0
eV9kaXJlY3Rpb25hbGl0eV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
U3RyaW5nKCJkaXJlY3Rpb25hbGl0eSJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBl
cnM6OmdldEVudW1Db25zdGFudFZhbHVlKHZhbHVlKSk7Ci0gICAgICAgICAgICByZXR1cm4gY2Fz
dFN0YXRlPERpcmVjdGlvbmFsaXR5U2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRl
cjxTVEFURSB8IE5vdGVzU2V0PiYgc2V0Tm90ZXMoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICAg
ICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE5vdGVzU2V0KSwgcHJv
cGVydHlfbm90ZXNfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmlu
Zygibm90ZXMiX3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Tm90ZXNT
ZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVGltZXN0YW1wU2V0
PiYgc2V0VGltZXN0YW1wKGRvdWJsZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIFRpbWVzdGFtcFNldCksIHByb3BlcnR5X3RpbWVzdGFtcF9h
bHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAi
X3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VGltZXN0YW1wU2V0Pigp
OwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IFZhbHVlc1NldD4mIHNldFZh
bHVlcyhSZWZQdHI8SlNPTjo6T2JqZWN0PiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIFZhbHVlc1NldCksIHByb3BlcnR5X3ZhbHVlc19hbHJl
YWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIHZh
bHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VmFsdWVzU2V0PigpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IFBheWxvYWRTZXQ+JiBzZXRQYXlsb2FkKFJl
ZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKCEoU1RBVEUgJiBQYXlsb2FkU2V0KSwgcHJvcGVydHlfcGF5bG9hZF9hbHJlYWR5X3Nl
dCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIHZhbHVlKTsK
LSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8UGF5bG9hZFNldD4oKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBFcnJvclNldD4mIHNldEVycm9yKFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHZhbHVlKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRXJyb3JTZXQpLCBwcm9wZXJ0eV9lcnJv
cl9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJlcnJvciJf
cywgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxFcnJvclNldD4oKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBFcnJvckxpc3RTZXQ+JiBzZXRFcnJv
ckxpc3QoUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvckxpc3Q+IHZh
bHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRXJy
b3JMaXN0U2V0KSwgcHJvcGVydHlfZXJyb3JMaXN0X2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXRBcnJheSgiZXJyb3JMaXN0Il9zLCB2YWx1ZSk7Ci0gICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPEVycm9yTGlzdFNldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIFJl
ZjxQYXJhbWV0ZXJCdW5kbGU+IHJlbGVhc2UoKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwot
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFBhcmFtZXRlckJ1bmRsZSkgPT0gc2l6
ZW9mKEpTT046Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsKLQotICAgICAgICAgICAgUmVmPEpTT046
Ok9iamVjdD4ganNvblJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7Ci0gICAgICAg
ICAgICBhdXRvIHJlc3VsdCA9IFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPFBhcmFtZXRl
ckJ1bmRsZT4qPigmanNvblJlc3VsdCkpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAg
ICAgICAgfQotICAgIH07Ci0KLSAgICAvKgotICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoK
LSAgICAgKiBSZWY8UGFyYW1ldGVyQnVuZGxlPiByZXN1bHQgPSBQYXJhbWV0ZXJCdW5kbGU6OmNy
ZWF0ZSgpCi0gICAgICogICAgIC5zZXRDb2x1bW5OYW1lcyguLi4pCi0gICAgICogICAgIC5zZXRC
dXR0b25zKC4uLikKLSAgICAgKiAgICAgLnNldERpcmVjdGlvbmFsaXR5KC4uLikKLSAgICAgKiAg
ICAgLnNldE5vdGVzKC4uLikKLSAgICAgKiAgICAgLnNldFRpbWVzdGFtcCguLi4pCi0gICAgICog
ICAgIC5zZXRWYWx1ZXMoLi4uKQotICAgICAqICAgICAuc2V0UGF5bG9hZCguLi4pCi0gICAgICog
ICAgIC5zZXRFcnJvciguLi4pCi0gICAgICogICAgIC5zZXRFcnJvckxpc3QoLi4uKQotICAgICAq
ICAgICAucmVsZWFzZSgpOwotICAgICAqLwotICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0
PiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpT
T046Ok9iamVjdDo6Y3JlYXRlKCkpOwotICAgIH0KLX07Ci0KLS8qIENvbmZsaWN0ZWQgbmFtZXMg
bWF5IGNhdXNlIGdlbmVyYXRlZCBnZXR0ZXJzL3NldHRlcnMgdG8gY2xhc2ggd2l0aCBidWlsdC1p
biBJbnNwZWN0b3JPYmplY3QgbWV0aG9kcy4gKi8KLWNsYXNzIE9iamVjdFdpdGhQcm9wZXJ0eU5h
bWVDb25mbGljdHMgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7Ci1wdWJsaWM6Ci0gICAgZW51
bSB7Ci0gICAgICAgIE5vRmllbGRzU2V0ID0gMCwKLSAgICAgICAgSW50ZWdlclNldCA9IDEgPDwg
MCwKLSAgICAgICAgQXJyYXlTZXQgPSAxIDw8IDEsCi0gICAgICAgIFN0cmluZ1NldCA9IDEgPDwg
MiwKLSAgICAgICAgVmFsdWVTZXQgPSAxIDw8IDMsCi0gICAgICAgIE9iamVjdFNldCA9IDEgPDwg
NCwKLSAgICAgICAgQWxsRmllbGRzU2V0ID0gKEludGVnZXJTZXQgfCBBcnJheVNldCB8IFN0cmlu
Z1NldCB8IFZhbHVlU2V0IHwgT2JqZWN0U2V0KQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTxpbnQg
U1RBVEU+Ci0gICAgY2xhc3MgQnVpbGRlciB7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRy
PEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7Ci0KLSAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1
aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcihSZWY8LypPYmplY3RXaXRoUHJvcGVydHlOYW1l
Q29uZmxpY3RzKi9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQotICAgICAgICAgICAgOiBtX3Jlc3Vs
dChXVEZNb3ZlKG9iamVjdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUp
OwotICAgICAgICB9Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBPYmplY3RXaXRoUHJvcGVydHlOYW1l
Q29uZmxpY3RzOwotICAgIHB1YmxpYzoKLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgSW50ZWdl
clNldD4mIHNldEludGVnZXIoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICAgICAgewotICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEludGVnZXJTZXQpLCBwcm9wZXJ0eV9pbnRl
Z2VyX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImludGVn
ZXIiX3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8SW50ZWdlclNldD4o
KTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBBcnJheVNldD4mIHNldEFy
cmF5KGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKCEoU1RBVEUgJiBBcnJheVNldCksIHByb3BlcnR5X2FycmF5X2FscmVhZHlfc2V0KTsK
LSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImFycmF5Il9zLCB2YWx1ZSk7Ci0gICAg
ICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEFycmF5U2V0PigpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IFN0cmluZ1NldD4mIHNldFN0cmluZyhjb25zdCBTdHJpbmcmIHZh
bHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU3Ry
aW5nU2V0KSwgcHJvcGVydHlfc3RyaW5nX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXRTdHJpbmcoInN0cmluZyJfcywgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNh
c3RTdGF0ZTxTdHJpbmdTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgVmFsdWVTZXQ+JiBzZXRWYWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVmFsdWVTZXQpLCBwcm9wZXJ0eV92
YWx1ZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ2YWx1
ZSJfcywgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxWYWx1ZVNldD4oKTsK
LSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBPYmplY3RTZXQ+JiBzZXRPYmpl
Y3QoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoIShTVEFURSAmIE9iamVjdFNldCksIHByb3BlcnR5X29iamVjdF9hbHJlYWR5X3NldCk7
Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJvYmplY3QiX3MsIHZhbHVlKTsKLSAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8T2JqZWN0U2V0PigpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgUmVmPE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHM+IHJlbGVhc2UoKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQs
IHJlc3VsdF9pc19ub3RfcmVhZHkpOwotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9m
KE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHMpID09IHNpemVvZihKU09OOjpPYmplY3Qp
LCBjYW5ub3RfY2FzdCk7Ci0KLSAgICAgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25SZXN1
bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOwotICAgICAgICAgICAgYXV0byByZXN1bHQg
PSBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29u
ZmxpY3RzPio+KCZqc29uUmVzdWx0KSk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAg
ICAgICB9Ci0gICAgfTsKLQotICAgIC8qCi0gICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgot
ICAgICAqIFJlZjxPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzPiByZXN1bHQgPSBPYmpl
Y3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzOjpjcmVhdGUoKQotICAgICAqICAgICAuc2V0SW50
ZWdlciguLi4pCi0gICAgICogICAgIC5zZXRBcnJheSguLi4pCi0gICAgICogICAgIC5zZXRTdHJp
bmcoLi4uKQotICAgICAqICAgICAuc2V0VmFsdWUoLi4uKQotICAgICAqICAgICAuc2V0T2JqZWN0
KC4uLikKLSAgICAgKiAgICAgLnJlbGVhc2UoKTsKLSAgICAgKi8KLSAgICBzdGF0aWMgQnVpbGRl
cjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBCdWlsZGVyPE5v
RmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKLSAgICB9Ci19OwotCi19IC8vIERh
dGFiYXNlCi0KLW5hbWVzcGFjZSBUZXN0IHsKLWNsYXNzIFBhcmFtZXRlckJ1bmRsZSA6IHB1Ymxp
YyBKU09OOjpPYmplY3RCYXNlIHsKLXB1YmxpYzoKLSAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0
eSBuYW1lICdkaXJlY3Rpb25hbGl0eScgd2hpbGUgZ2VuZXJhdGluZyBQYXJhbWV0ZXJCdW5kbGUu
Ci0gICAgZW51bSBjbGFzcyBEaXJlY3Rpb25hbGl0eSB7Ci0gICAgICAgIExUUiA9IDQsCi0gICAg
ICAgIFJUTCA9IDUsCi0gICAgfTsgLy8gZW51bSBjbGFzcyBEaXJlY3Rpb25hbGl0eQotICAgIGVu
dW0gewotICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCi0gICAgICAgIERpcmVjdGlvbmFsaXR5U2V0
ID0gMSA8PCAwLAotICAgICAgICBCdXR0b25zU2V0ID0gMSA8PCAxLAotICAgICAgICBDb2x1bW5O
YW1lc1NldCA9IDEgPDwgMiwKLSAgICAgICAgTm90ZXNTZXQgPSAxIDw8IDMsCi0gICAgICAgIFRp
bWVzdGFtcFNldCA9IDEgPDwgNCwKLSAgICAgICAgVmFsdWVzU2V0ID0gMSA8PCA1LAotICAgICAg
ICBQYXlsb2FkU2V0ID0gMSA8PCA2LAotICAgICAgICBFcnJvclNldCA9IDEgPDwgNywKLSAgICAg
ICAgQWxsRmllbGRzU2V0ID0gKERpcmVjdGlvbmFsaXR5U2V0IHwgQnV0dG9uc1NldCB8IENvbHVt
bk5hbWVzU2V0IHwgTm90ZXNTZXQgfCBUaW1lc3RhbXBTZXQgfCBWYWx1ZXNTZXQgfCBQYXlsb2Fk
U2V0IHwgRXJyb3JTZXQpCi0gICAgfTsKLQotICAgIHRlbXBsYXRlPGludCBTVEFURT4KLSAgICBj
bGFzcyBCdWlsZGVyIHsKLSAgICBwcml2YXRlOgotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0
PiBtX3Jlc3VsdDsKLQotICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8
IFNURVA+JiBjYXN0U3RhdGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKnJlaW50
ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBCdWlsZGVyKFJlZjwvKlBhcmFtZXRlckJ1bmRsZSovSlNPTjo6T2JqZWN0PiYmIG9i
amVjdCkKLSAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQotICAgICAgICB7
Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRl
cl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKLSAgICAgICAgfQotICAgICAgICBmcmllbmQg
Y2xhc3MgUGFyYW1ldGVyQnVuZGxlOwotICAgIHB1YmxpYzoKLQotICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgRGlyZWN0aW9uYWxpdHlTZXQ+JiBzZXREaXJlY3Rpb25hbGl0eShEaXJlY3Rpb25hbGl0
eSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IERpcmVjdGlvbmFsaXR5U2V0KSwgcHJvcGVydHlfZGlyZWN0aW9uYWxpdHlfYWxyZWFkeV9zZXQp
OwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygiZGlyZWN0aW9uYWxpdHkiX3MsIElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSh2YWx1
ZSkpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxEaXJlY3Rpb25hbGl0eVNldD4oKTsK
LSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBCdXR0b25zU2V0PiYgc2V0QnV0
dG9ucyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6
TW91c2VCdXR0b24+PiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIEJ1dHRvbnNTZXQpLCBwcm9wZXJ0eV9idXR0b25zX2FscmVhZHlfc2V0KTsK
LSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheSgiYnV0dG9ucyJfcywgdmFsdWUpOwotICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxCdXR0b25zU2V0PigpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IENvbHVtbk5hbWVzU2V0PiYgc2V0Q29sdW1uTmFtZXMoUmVm
UHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2x1bW5OYW1lc1NldCksIHByb3BlcnR5X2NvbHVt
bk5hbWVzX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheSgiY29s
dW1uTmFtZXMiX3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29sdW1u
TmFtZXNTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTm90ZXNT
ZXQ+JiBzZXROb3Rlcyhjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTm90ZXNTZXQpLCBwcm9wZXJ0eV9ub3Rlc19hbHJl
YWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJub3RlcyJfcywgdmFs
dWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxOb3Rlc1NldD4oKTsKLSAgICAgICAg
fQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUaW1lc3RhbXBTZXQ+JiBzZXRUaW1lc3RhbXAo
ZG91YmxlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgVGltZXN0YW1wU2V0KSwgcHJvcGVydHlfdGltZXN0YW1wX2FscmVhZHlfc2V0KTsKLSAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgdmFsdWUpOwotICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUaW1lc3RhbXBTZXQ+KCk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVmFsdWVzU2V0PiYgc2V0VmFsdWVzKFJlZlB0cjxKU09O
OjpPYmplY3Q+IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgVmFsdWVzU2V0KSwgcHJvcGVydHlfdmFsdWVzX2FscmVhZHlfc2V0KTsKLSAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgdmFsdWUpOwotICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxWYWx1ZXNTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgUGF5bG9hZFNldD4mIHNldFBheWxvYWQoUmVmUHRyPEpTT046OlZhbHVl
PiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IFBheWxvYWRTZXQpLCBwcm9wZXJ0eV9wYXlsb2FkX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgdmFsdWUpOwotICAgICAgICAgICAgcmV0
dXJuIGNhc3RTdGF0ZTxQYXlsb2FkU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRl
cjxTVEFURSB8IEVycm9yU2V0PiYgc2V0RXJyb3IoUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpFcnJvcj4gdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKCEoU1RBVEUgJiBFcnJvclNldCksIHByb3BlcnR5X2Vycm9yX2FscmVhZHlfc2V0KTsK
LSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoImVycm9yIl9zLCB2YWx1ZSk7Ci0gICAg
ICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEVycm9yU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgUmVmPFBhcmFtZXRlckJ1bmRsZT4gcmVsZWFzZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFk
eSk7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoUGFyYW1ldGVyQnVuZGxlKSA9
PSBzaXplb2YoSlNPTjo6T2JqZWN0KSwgY2Fubm90X2Nhc3QpOwotCi0gICAgICAgICAgICBSZWY8
SlNPTjo6T2JqZWN0PiBqc29uUmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKLSAg
ICAgICAgICAgIGF1dG8gcmVzdWx0ID0gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8UGFy
YW1ldGVyQnVuZGxlPio+KCZqc29uUmVzdWx0KSk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0
OwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIC8qCi0gICAgICogU3ludGhldGljIGNvbnN0cnVj
dG9yOgotICAgICAqIFJlZjxQYXJhbWV0ZXJCdW5kbGU+IHJlc3VsdCA9IFBhcmFtZXRlckJ1bmRs
ZTo6Y3JlYXRlKCkKLSAgICAgKiAgICAgLnNldERpcmVjdGlvbmFsaXR5KC4uLikKLSAgICAgKiAg
ICAgLnNldEJ1dHRvbnMoLi4uKQotICAgICAqICAgICAuc2V0Q29sdW1uTmFtZXMoLi4uKQotICAg
ICAqICAgICAuc2V0Tm90ZXMoLi4uKQotICAgICAqICAgICAuc2V0VGltZXN0YW1wKC4uLikKLSAg
ICAgKiAgICAgLnNldFZhbHVlcyguLi4pCi0gICAgICogICAgIC5zZXRQYXlsb2FkKC4uLikKLSAg
ICAgKiAgICAgLnNldEVycm9yKC4uLikKLSAgICAgKiAgICAgLnJlbGVhc2UoKTsKLSAgICAgKi8K
LSAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKLSAg
ICB9Ci19OwotCi19IC8vIFRlc3QKLQotCi0KLW5hbWVzcGFjZSBUZXN0SGVscGVycyB7Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIFByb3RvY29sRW51bVR5cGU+Ci1PcHRpb25hbDxQcm90b2NvbEVudW1U
eXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJik7Ci0KLS8vIEVudW1z
IGluIHRoZSAnRGF0YWJhc2UnIERvbWFpbgotdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJp
bmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPihjb25zdCBTdHJp
bmcmKTsKLXRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNl
OjpPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+IHBhcnNlRW51bVZhbHVl
RnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6T3B0aW9uYWxQYXJhbWV0
ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5Pihjb25zdCBTdHJpbmcmKTsKLXRlbXBsYXRlPD4KLU9w
dGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQYXJhbWV0ZXJCdW5kbGU6OkRp
cmVjdGlvbmFsaXR5PiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGF0YWJhc2U6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+KGNvbnN0IFN0cmlu
ZyYpOwotCi0vLyBFbnVtcyBpbiB0aGUgJ1Rlc3QnIERvbWFpbgotdGVtcGxhdGU8PgotT3B0aW9u
YWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25h
bGl0eT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6
OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+KGNvbnN0IFN0cmluZyYpOwotCi19IC8v
IG5hbWVzcGFjZSBUZXN0SGVscGVycwotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotbmFtZXNwYWNlIFdURiB7Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKLQotLy8gSGFzaCBkZWNsYXJhdGlvbnMgaW4gdGhl
ICdEYXRhYmFzZScgRG9tYWluCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPiB7Ci0gICAgdHlwZWRlZiBJbnRI
YXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4gSGFzaDsKLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3Rz
LmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0KLSNpbmNsdWRlIDx3
dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFj
ZSBJbnNwZWN0b3IgewotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi1uYW1lc3BhY2UgVGVzdEhl
bHBlcnMgewotCi1zdGF0aWMgY29uc3QgY2hhciogY29uc3QgZW51bV9jb25zdGFudF92YWx1ZXNb
XSA9IHsKLSAgICAiTm9uZSIsCi0gICAgIkxlZnQiLAotICAgICJNaWRkbGUiLAotICAgICJSaWdo
dCIsCi0gICAgIkxUUiIsCi0gICAgIlJUTCIsCi19OwotCi1TdHJpbmcgZ2V0RW51bUNvbnN0YW50
VmFsdWUoaW50IGNvZGUpIHsKLSAgICByZXR1cm4gZW51bV9jb25zdGFudF92YWx1ZXNbY29kZV07
Ci19Ci0KLS8vIEVudW1zIGluIHRoZSAnRGF0YWJhc2UnIERvbWFpbgotdGVtcGxhdGU8PgotT3B0
aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPiBwYXJzZUVu
dW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0
dG9uPihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQotewotICAgIHN0YXRpYyBjb25zdCBz
aXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlBy
b3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b246Ok5vbmUsCi0gICAgICAgIChzaXplX3QpSW5z
cGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uOjpMZWZ0LAotICAgICAgICAo
c2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbjo6TWlkZGxl
LAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1
dHRvbjo6UmlnaHQsCi0gICAgfTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDQ7ICsraSkK
LSAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0
YW50VmFsdWVzW2ldXSkKLSAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6Ok1vdXNlQnV0dG9uKWNvbnN0YW50VmFsdWVzW2ldOwotCi0gICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKLX0KLQotdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGF0YWJhc2U6Ok9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4gcGFy
c2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpPcHRp
b25hbFBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+KGNvbnN0IFN0cmluZyYgcHJvdG9j
b2xTdHJpbmcpCi17Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0g
ewotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpPcHRpb25h
bFBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk6OkxUUiwKLSAgICAgICAgKHNpemVfdClJ
bnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU6OkRp
cmVjdGlvbmFsaXR5OjpSVEwsCi0gICAgfTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDI7
ICsraSkKLSAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVz
W2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90
b2NvbDo6RGF0YWJhc2U6Ok9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eSlj
b25zdGFudFZhbHVlc1tpXTsKLQotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLXRlbXBs
YXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQYXJhbWV0ZXJC
dW5kbGU6OkRpcmVjdGlvbmFsaXR5PiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RGF0YWJhc2U6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+KGNv
bnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCi17Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBj
b25zdGFudFZhbHVlc1tdID0gewotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5OjpMVFIsCi0gICAgICAg
IChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlBhcmFtZXRlckJ1bmRsZTo6
RGlyZWN0aW9uYWxpdHk6OlJUTCwKLSAgICB9OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
MjsgKytpKQotICAgICAgICBpZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1
ZXNbY29uc3RhbnRWYWx1ZXNbaV1dKQotICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlBy
b3RvY29sOjpEYXRhYmFzZTo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eSljb25zdGFu
dFZhbHVlc1tpXTsKLQotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLQotLy8gRW51bXMg
aW4gdGhlICdUZXN0JyBEb21haW4KLXRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlRlc3Q6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+IHBhcnNlRW51bVZh
bHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpQYXJhbWV0ZXJCdW5kbGU6
OkRpcmVjdGlvbmFsaXR5Pihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQotewotICAgIHN0
YXRpYyBjb25zdCBzaXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsKLSAgICAgICAgKHNpemVfdClJ
bnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5
OjpMVFIsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UGFyYW1l
dGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eTo6UlRMLAotICAgIH07Ci0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCAyOyArK2kpCi0gICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2Nv
bnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCi0gICAgICAgICAgICByZXR1cm4gKElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHkp
Y29uc3RhbnRWYWx1ZXNbaV07Ci0KLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi0KLX0g
Ly8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCi0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAot
Ci19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xP
YmplY3RzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNo
ZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9u
LW9iamVjdC10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmRE
aXNwYXRjaGVycy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQotCi0KLW5hbWVzcGFj
ZSBJbnNwZWN0b3IgewotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1w
b3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbEludGVybmFsLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
LmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7
Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bEJhY2tlbmREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29u
ZmlndXJhdGlvbi5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNs
YXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KLQotX19h
dHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90
b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xD
b25maWd1cmF0aW9uLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1k
ZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKLQot
I2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJh
Y2tlbmREaXNwYXRjaGVycy5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlz
cGF0Y2hhYmxlQWdlbnQuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5z
cGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0
ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsK
LQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KLXsKLSAgICBBdWdt
ZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotfQotCi0tIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIq
KWNvbnRyb2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikK
LSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRy
b2xsZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWRlYWxs
b2MKLXsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIK
LQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDx3dGYv
SlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLSMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRl
Y2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLSNpbXBv
cnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KLQotCi1AY2xhc3MgVGVz
dFByb3RvY29sRGF0YWJhc2VFcnJvcjsKLUBjbGFzcyBUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlv
bmFsUGFyYW1ldGVyQnVuZGxlOwotQGNsYXNzIFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVy
QnVuZGxlOwotQGNsYXNzIFRlc3RQcm90b2NvbERhdGFiYXNlT2JqZWN0V2l0aFByb3BlcnR5TmFt
ZUNvbmZsaWN0czsKLUBjbGFzcyBUZXN0UHJvdG9jb2xEYXRhYmFzZUR1bW15T2JqZWN0OwotQGNs
YXNzIFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGU7Ci0KLXR5cGVkZWYgTlNfRU5VTShO
U0ludGVnZXIsIFRlc3RQcm90b2NvbFBsYXRmb3JtKSB7Ci0gICAgVGVzdFByb3RvY29sUGxhdGZv
cm1BbGwsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljLAotICAgIFRlc3RQcm90b2Nv
bFBsYXRmb3JtSU9TLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1MsCi19OwotCi0KLXR5
cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VCdXR0b24p
IHsKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9uTm9uZSwKLSAgICBUZXN0UHJv
dG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9uTGVmdCwKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZU1v
dXNlQnV0dG9uTWlkZGxlLAotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VCdXR0b25SaWdo
dCwKLX07Ci0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbERhdGFiYXNl
T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSkgewotICAgIFRlc3RQcm90b2Nv
bERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eUxUUiwKLSAgICBU
ZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHlS
VEwsCi19OwotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xEYXRhYmFz
ZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5KSB7Ci0gICAgVGVzdFByb3RvY29sRGF0YWJh
c2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eUxUUiwKLSAgICBUZXN0UHJvdG9jb2xEYXRh
YmFzZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5UlRMLAotfTsKLQotdHlwZWRlZiBOU19F
TlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFs
aXR5KSB7Ci0gICAgVGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5
TFRSLAotICAgIFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eVJU
TCwKLX07Ci0KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50
ZXJmYWNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgOiBSV0lQcm90b2NvbEpTT05PYmplY3QK
LS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAq
LCBpZD4gKilwYXlsb2FkOwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6
KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7Ci0tIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZTooaW50KWNvZGU7Ci0vKiByZXF1
aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKm1lc3NhZ2U7Ci0v
KiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQgY29kZTsKLUBl
bmQKLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNl
IFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUgOiBSV0lQcm90b2Nv
bEpTT05PYmplY3QKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFy
eTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkOwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJv
dG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7Ci0vKiBvcHRp
b25hbCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNBcnJheS8qPE5TU3RyaW5nPiov
ICpjb2x1bW5OYW1lczsKLS8qIG9wdGlvbmFsICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5
KSBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmJ1dHRvbnM7Ci0vKiBvcHRpb25hbCAqLyBAcHJvcGVy
dHkgKG5vbmF0b21pYywgYXNzaWduKSBUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1l
dGVyQnVuZGxlRGlyZWN0aW9uYWxpdHkgZGlyZWN0aW9uYWxpdHk7Ci0vKiBvcHRpb25hbCAqLyBA
cHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKm5vdGVzOwotLyogb3B0aW9uYWwg
Ki8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgZG91YmxlIHRpbWVzdGFtcDsKLS8qIG9w
dGlvbmFsICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIFJXSVByb3RvY29sSlNPTk9i
amVjdCAqdmFsdWVzOwotLyogb3B0aW9uYWwgKi8gQHByb3BlcnR5IChub25hdG9taWMsIHJldGFp
bikgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkOwotLyogb3B0aW9uYWwgKi8gQHByb3Bl
cnR5IChub25hdG9taWMsIHJldGFpbikgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqZXJyb3I7
Ci0vKiBvcHRpb25hbCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNBcnJheS8qPFRl
c3RQcm90b2NvbERhdGFiYXNlRXJyb3I+Ki8gKmVycm9yTGlzdDsKLUBlbmQKLQotX19hdHRyaWJ1
dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbERh
dGFiYXNlUGFyYW1ldGVyQnVuZGxlIDogUldJUHJvdG9jb2xKU09OT2JqZWN0Ci0tIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5
bG9hZDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2Nv
bEpTT05PYmplY3QgKilqc29uT2JqZWN0OwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29sdW1u
TmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWNvbHVtbk5hbWVzIGJ1dHRvbnM6KE5TQXJy
YXkvKjxOU1N0cmluZz4qLyAqKWJ1dHRvbnMgZGlyZWN0aW9uYWxpdHk6KFRlc3RQcm90b2NvbERh
dGFiYXNlUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHkpZGlyZWN0aW9uYWxpdHkgbm90ZXM6
KE5TU3RyaW5nICopbm90ZXMgdGltZXN0YW1wOihkb3VibGUpdGltZXN0YW1wIHZhbHVlczooUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICopdmFsdWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVj
dCAqKXBheWxvYWQgZXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKillcnJvciBlcnJv
ckxpc3Q6KE5TQXJyYXkvKjxUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yPiovICopZXJyb3JMaXN0
OwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TQXJyYXkvKjxO
U1N0cmluZz4qLyAqY29sdW1uTmFtZXM7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0
b21pYywgY29weSkgTlNBcnJheS8qPE5TU3RyaW5nPiovICpidXR0b25zOwotLyogcmVxdWlyZWQg
Ki8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgVGVzdFByb3RvY29sRGF0YWJhc2VQYXJh
bWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSBkaXJlY3Rpb25hbGl0eTsKLS8qIHJlcXVpcmVkICov
IEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqbm90ZXM7Ci0vKiByZXF1aXJl
ZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBkb3VibGUgdGltZXN0YW1wOwotLyog
cmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgUldJUHJvdG9jb2xKU09O
T2JqZWN0ICp2YWx1ZXM7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0
YWluKSBSV0lQcm90b2NvbEpTT05PYmplY3QgKnBheWxvYWQ7Ci0vKiByZXF1aXJlZCAqLyBAcHJv
cGVydHkgKG5vbmF0b21pYywgcmV0YWluKSBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICplcnJv
cjsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU0FycmF5Lyo8
VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4qLyAqZXJyb3JMaXN0OwotQGVuZAotCi1fX2F0dHJp
YnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29s
RGF0YWJhc2VPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzIDogUldJUHJvdG9jb2xKU09O
T2JqZWN0Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNT
dHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29s
T2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OwotLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoSW50ZWdlcjooTlNTdHJpbmcgKilpbnRlZ2VyIGFycmF5OihOU1N0cmluZyAq
KWFycmF5IHN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcgdmFsdWU6KE5TU3RyaW5nICopdmFsdWUg
b2JqZWN0OihOU1N0cmluZyAqKW9iamVjdDsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9u
YXRvbWljLCBjb3B5KSBOU1N0cmluZyAqaW50ZWdlcjsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0
eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqYXJyYXk7Ci0vKiByZXF1aXJlZCAqLyBAcHJv
cGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKnN0cmluZzsKLS8qIHJlcXVpcmVkICov
IEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqdmFsdWU7Ci0vKiByZXF1aXJl
ZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKm9iamVjdDsKLUBlbmQK
LQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRl
c3RQcm90b2NvbERhdGFiYXNlRHVtbXlPYmplY3QgOiBSV0lQcm90b2NvbEpTT05PYmplY3QKLS0g
KGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBp
ZD4gKilwYXlsb2FkOwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJX
SVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7Ci1AZW5kCi0KLV9fYXR0cmlidXRlX18o
KHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUZXN0UGFy
YW1ldGVyQnVuZGxlIDogUldJUHJvdG9jb2xKU09OT2JqZWN0Ci0tIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKLS0g
KGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmpl
Y3QgKilqc29uT2JqZWN0OwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRGlyZWN0aW9uYWxpdHk6
KFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSlkaXJlY3Rpb25h
bGl0eSBidXR0b25zOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilidXR0b25zIGNvbHVtbk5hbWVz
OihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcyBub3RlczooTlNTdHJpbmcgKilu
b3RlcyB0aW1lc3RhbXA6KGRvdWJsZSl0aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90b2NvbEpTT05P
YmplY3QgKil2YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZCBl
cnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKWVycm9yOwotLyogcmVxdWlyZWQgKi8g
QHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgVGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1
bmRsZURpcmVjdGlvbmFsaXR5IGRpcmVjdGlvbmFsaXR5OwotLyogcmVxdWlyZWQgKi8gQHByb3Bl
cnR5IChub25hdG9taWMsIGNvcHkpIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqYnV0dG9uczsKLS8q
IHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU0FycmF5Lyo8TlNTdHJp
bmc+Ki8gKmNvbHVtbk5hbWVzOwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMs
IGNvcHkpIE5TU3RyaW5nICpub3RlczsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRv
bWljLCBhc3NpZ24pIGRvdWJsZSB0aW1lc3RhbXA7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkg
KG5vbmF0b21pYywgcmV0YWluKSBSV0lQcm90b2NvbEpTT05PYmplY3QgKnZhbHVlczsKLS8qIHJl
cXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIFJXSVByb3RvY29sSlNPTk9i
amVjdCAqcGF5bG9hZDsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRh
aW4pIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKmVycm9yOwotQGVuZAotCi0KLQotCi0KLQot
I2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0
cy5oPgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
dHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAi
VGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1
ZXMuaD4KLQotCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0KLSMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0
UHJvdG9jb2wuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVy
c2lvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9i
akNFbnVtVHlwZT4KLU9wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNv
bnN0IFN0cmluZyYgdmFsdWUpOwotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVz
dFByb3RvY29sUGxhdGZvcm0gdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2Fz
ZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDoKLSAgICAgICAgcmV0dXJuICJhbGwiX3M7Ci0gICAg
Y2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM6Ci0gICAgICAgIHJldHVybiAiZ2VuZXJp
YyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOgotICAgICAgICByZXR1cm4g
ImlvcyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M6Ci0gICAgICAgIHJl
dHVybiAibWFjb3MiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8
VGVzdFByb3RvY29sUGxhdGZvcm0+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZh
bHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiYWxsIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90
b2NvbFBsYXRmb3JtQWxsOwotICAgIGlmICh2YWx1ZSA9PSAiZ2VuZXJpYyIpCi0gICAgICAgIHJl
dHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM7Ci0gICAgaWYgKHZhbHVlID09ICJpb3Mi
KQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1JT1M7Ci0gICAgaWYgKHZhbHVl
ID09ICJtYWNvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOwot
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29s
U3RyaW5nKFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VCdXR0b24gdmFsdWUpCi17Ci0gICAgc3dp
dGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9uTm9u
ZToKLSAgICAgICAgcmV0dXJuICJOb25lIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJh
c2VNb3VzZUJ1dHRvbkxlZnQ6Ci0gICAgICAgIHJldHVybiAiTGVmdCJfczsKLSAgICBjYXNlIFRl
c3RQcm90b2NvbERhdGFiYXNlTW91c2VCdXR0b25NaWRkbGU6Ci0gICAgICAgIHJldHVybiAiTWlk
ZGxlIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VNb3VzZUJ1dHRvblJpZ2h0Ogot
ICAgICAgICByZXR1cm4gIlJpZ2h0Il9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5l
IE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VCdXR0b24+IGZyb21Qcm90b2NvbFN0
cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiTm9uZSIpCi0g
ICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9uTm9uZTsKLSAgICBp
ZiAodmFsdWUgPT0gIkxlZnQiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VN
b3VzZUJ1dHRvbkxlZnQ7Ci0gICAgaWYgKHZhbHVlID09ICJNaWRkbGUiKQotICAgICAgICByZXR1
cm4gVGVzdFByb3RvY29sRGF0YWJhc2VNb3VzZUJ1dHRvbk1pZGRsZTsKLSAgICBpZiAodmFsdWUg
PT0gIlJpZ2h0IikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VCdXR0
b25SaWdodDsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi1pbmxpbmUgU3RyaW5nIHRv
UHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRs
ZURpcmVjdGlvbmFsaXR5IHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2Ug
VGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5
TFRSOgotICAgICAgICByZXR1cm4gIkxUUiJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFi
YXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eVJUTDoKLSAgICAgICAgcmV0
dXJuICJSVEwiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVz
dFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5PiBm
cm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUg
PT0gIkxUUiIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFy
YW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHlMVFI7Ci0gICAgaWYgKHZhbHVlID09ICJSVEwiKQot
ICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRs
ZURpcmVjdGlvbmFsaXR5UlRMOwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLWlubGlu
ZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1
bmRsZURpcmVjdGlvbmFsaXR5IHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNh
c2UgVGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eUxUUjoK
LSAgICAgICAgcmV0dXJuICJMVFIiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZVBh
cmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5UlRMOgotICAgICAgICByZXR1cm4gIlJUTCJfczsK
LSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xEYXRh
YmFzZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5PiBmcm9tUHJvdG9jb2xTdHJpbmcoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gIkxUUiIpCi0gICAgICAgIHJl
dHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5TFRS
OwotICAgIGlmICh2YWx1ZSA9PSAiUlRMIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERh
dGFiYXNlUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHlSVEw7Ci0gICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKLX0KLQotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3Rv
Y29sVGVzdFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5IHZhbHVlKQotewotICAgIHN3aXRj
aCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZURpcmVj
dGlvbmFsaXR5TFRSOgotICAgICAgICByZXR1cm4gIkxUUiJfczsKLSAgICBjYXNlIFRlc3RQcm90
b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eVJUTDoKLSAgICAgICAgcmV0dXJu
ICJSVEwiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFBy
b3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5PiBmcm9tUHJvdG9jb2xTdHJp
bmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gIkxUUiIpCi0gICAg
ICAgIHJldHVybiBUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHlM
VFI7Ci0gICAgaWYgKHZhbHVlID09ICJSVEwiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29s
VGVzdFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5UlRMOwotICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0
eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
LmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlw
ZVBhcnNlci5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFBy
aXZhdGUuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGludGVyZmFjZSBUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKERhdGFiYXNlRG9tYWluKQotCi0rICh2b2lkKV9wYXJz
ZUVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqKW91dFZhbHVlIGZyb21QYXlsb2Fk
OihpZClwYXlsb2FkOwotKyAodm9pZClfcGFyc2VFcnJvckxpc3Q6KE5TQXJyYXkvKjxUZXN0UHJv
dG9jb2xEYXRhYmFzZUVycm9yPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2Fk
OwotKyAodm9pZClfcGFyc2VNb3VzZUJ1dHRvbjooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBh
eWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxl
OihUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlICoqKW91dFZhbHVl
IGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotKyAodm9pZClfcGFyc2VQYXJhbWV0ZXJCdW5kbGU6
KFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlICoqKW91dFZhbHVlIGZyb21QYXls
b2FkOihpZClwYXlsb2FkOwotKyAodm9pZClfcGFyc2VPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29u
ZmxpY3RzOihUZXN0UHJvdG9jb2xEYXRhYmFzZU9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGlj
dHMgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZUR1
bW15T2JqZWN0OihUZXN0UHJvdG9jb2xEYXRhYmFzZUR1bW15T2JqZWN0ICoqKW91dFZhbHVlIGZy
b21QYXlsb2FkOihpZClwYXlsb2FkOwotCi1AZW5kCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucyAoVGVzdERvbWFpbikKLQotKyAodm9pZClfcGFyc2VQYXJhbWV0ZXJCdW5k
bGU6KFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGUgKiopb3V0VmFsdWUgZnJvbVBheWxv
YWQ6KGlkKXBheWxvYWQ7Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucyAoRGF0YWJhc2VEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlRXJyb3I6KFRl
c3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxv
YWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rp
b25hcnkgY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJy
b3IgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKLX0KLQotKyAodm9pZClfcGFyc2VF
cnJvckxpc3Q6KE5TQXJyYXkvKjxUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yPiovICoqKW91dFZh
bHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9C
QURfVFlQRShwYXlsb2FkLCBbTlNBcnJheS8qPFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I+Ki8g
Y2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSAoTlNBcnJheS8qPFRlc3RQcm90b2NvbERhdGFiYXNl
RXJyb3I+Ki8gKilwYXlsb2FkOwotfQotCi0rICh2b2lkKV9wYXJzZU1vdXNlQnV0dG9uOihOU051
bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TU3RyaW5nIGNsYXNzXSk7Ci0gICAgT3B0
aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VNb3VzZUJ1dHRvbj4gcmVzdWx0ID0gSW5zcGVjdG9y
Ojpmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sRGF0YWJhc2VNb3VzZUJ1dHRvbj4ocGF5
bG9hZCk7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfRU5VTV9WQUxVRShyZXN1bHQsIEAi
TW91c2VCdXR0b24iKTsKLSAgICAqb3V0VmFsdWUgPSBAKHJlc3VsdC52YWx1ZSgpKTsKLX0KLQot
KyAodm9pZClfcGFyc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTooVGVzdFByb3RvY29sRGF0YWJh
c2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZSAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5
bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGlj
dGlvbmFyeSBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sRGF0YWJhc2VP
cHRpb25hbFBhcmFtZXRlckJ1bmRsZSBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOwot
fQotCi0rICh2b2lkKV9wYXJzZVBhcmFtZXRlckJ1bmRsZTooVGVzdFByb3RvY29sRGF0YWJhc2VQ
YXJhbWV0ZXJCdW5kbGUgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAg
ICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xh
c3NdKTsKLSAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVu
ZGxlIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07Ci19Ci0KLSsgKHZvaWQpX3BhcnNl
T2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0czooVGVzdFByb3RvY29sRGF0YWJhc2VPYmpl
Y3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClw
YXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNE
aWN0aW9uYXJ5IGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xEYXRhYmFz
ZU9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHMgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpw
YXlsb2FkXTsKLX0KLQotKyAodm9pZClfcGFyc2VEdW1teU9iamVjdDooVGVzdFByb3RvY29sRGF0
YWJhc2VEdW1teU9iamVjdCAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewot
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBj
bGFzc10pOwotICAgICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sRGF0YWJhc2VEdW1teU9iamVj
dCBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOwotfQotCi1AZW5kCi1AaW1wbGVtZW50
YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChUZXN0RG9tYWluKQotCi0rICh2b2lk
KV9wYXJzZVBhcmFtZXRlckJ1bmRsZTooVGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZSAq
KilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOwotICAgICpvdXRW
YWx1ZSA9IFtbVGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZSBhbGxvY10gaW5pdFdpdGhQ
YXlsb2FkOnBheWxvYWRdOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVz
Lm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1v
YmplY3QtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29s
SlNPTk9iamVjdFByaXZhdGUuaD4KLSNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW1wb3J0
IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLUBp
bXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yCi0KLS0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAq
KXBheWxvYWQKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0
dXJuIG5pbDsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5
bG9hZFtAIm1lc3NhZ2UiXSwgQCJtZXNzYWdlIik7Ci0gICAgc2VsZi5tZXNzYWdlID0gcGF5bG9h
ZFtAIm1lc3NhZ2UiXTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVS
VFkocGF5bG9hZFtAImNvZGUiXSwgQCJjb2RlIik7Ci0gICAgc2VsZi5jb2RlID0gW3BheWxvYWRb
QCJjb2RlIl0gaW50ZWdlclZhbHVlXTsKLQotICAgIHJldHVybiBzZWxmOwotfQotLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9i
amVjdAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmpl
Y3QgdG9KU09OT2JqZWN0XS5nZXQoKV0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgcmV0
dXJuIHNlbGY7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3RyaW5n
ICopbWVzc2FnZSBjb2RlOihpbnQpY29kZQotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5p
dF0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFV
SVJFRF9QUk9QRVJUWShtZXNzYWdlLCBAIm1lc3NhZ2UiKTsKLQotICAgIHNlbGYubWVzc2FnZSA9
IG1lc3NhZ2U7Ci0gICAgc2VsZi5jb2RlID0gY29kZTsKLQotICAgIHJldHVybiBzZWxmOwotfQot
Ci0tICh2b2lkKXNldE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZQotewotICAgIFtzdXBlciBz
ZXRTdHJpbmc6bWVzc2FnZSBmb3JLZXk6QCJtZXNzYWdlIl07Ci19Ci0KLS0gKE5TU3RyaW5nICop
bWVzc2FnZQotewotICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAibWVzc2FnZSJdOwot
fQotCi0tICh2b2lkKXNldENvZGU6KGludCljb2RlCi17Ci0gICAgW3N1cGVyIHNldEludGVnZXI6
Y29kZSBmb3JLZXk6QCJjb2RlIl07Ci19Ci0KLS0gKGludCljb2RlCi17Ci0gICAgcmV0dXJuIFtz
dXBlciBpbnRlZ2VyRm9yS2V5OkAiY29kZSJdOwotfQotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlv
biBUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlCi0KLS0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICos
IGlkPiAqKXBheWxvYWQKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAg
ICAgcmV0dXJuIG5pbDsKLQotICAgIHNlbGYuY29sdW1uTmFtZXMgPSBwYXlsb2FkW0AiY29sdW1u
TmFtZXMiXTsKLQotICAgIHNlbGYuYnV0dG9ucyA9IHBheWxvYWRbQCJidXR0b25zIl07Ci0KLSAg
ICBPcHRpb25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlRGly
ZWN0aW9uYWxpdHk+IGRpcmVjdGlvbmFsaXR5ID0gZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90
b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eT4ocGF5bG9h
ZFtAImRpcmVjdGlvbmFsaXR5Il0pOwotICAgIGlmIChkaXJlY3Rpb25hbGl0eSkKLSAgICAgICAg
c2VsZi5kaXJlY3Rpb25hbGl0eSA9IGRpcmVjdGlvbmFsaXR5LnZhbHVlKCk7Ci0KLSAgICBzZWxm
Lm5vdGVzID0gcGF5bG9hZFtAIm5vdGVzIl07Ci0KLSAgICBzZWxmLnRpbWVzdGFtcCA9IFtwYXls
b2FkW0AidGltZXN0YW1wIl0gZG91YmxlVmFsdWVdOwotCi0gICAgc2VsZi52YWx1ZXMgPSBwYXls
b2FkW0AidmFsdWVzIl07Ci0KLSAgICBzZWxmLnBheWxvYWQgPSBwYXlsb2FkW0AicGF5bG9hZCJd
OwotCi0gICAgc2VsZi5lcnJvciA9IFtbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBhbGxvY10g
aW5pdFdpdGhQYXlsb2FkOnBheWxvYWRbQCJlcnJvciJdXTsKLQotICAgIHNlbGYuZXJyb3JMaXN0
ID0gb2JqY0FycmF5RnJvbVBheWxvYWQ8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4ocGF5bG9h
ZFtAImVycm9yTGlzdCJdKTsKLQotICAgIHJldHVybiBzZWxmOwotfQotLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9iamVjdAot
ewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmplY3QgdG9K
U09OT2JqZWN0XS5nZXQoKV0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgcmV0dXJuIHNl
bGY7Ci19Ci0KLS0gKHZvaWQpc2V0Q29sdW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAq
KWNvbHVtbk5hbWVzCi17Ci0gICAgW3N1cGVyIHNldEpTT05BcnJheTp0b0pTT05TdHJpbmdBcnJh
eShjb2x1bW5OYW1lcykgZm9yS2V5OkAiY29sdW1uTmFtZXMiXTsKLX0KLQotLSAoTlNBcnJheS8q
PE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMKLXsKLSAgICByZXR1cm4gdG9PYmpDU3RyaW5nQXJy
YXkoW3N1cGVyIEpTT05BcnJheUZvcktleTpAImNvbHVtbk5hbWVzIl0pOwotfQotCi0tICh2b2lk
KXNldEJ1dHRvbnM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWJ1dHRvbnMKLXsKLSAgICBbc3Vw
ZXIgc2V0SlNPTkFycmF5OnRvSlNPTlN0cmluZ0FycmF5KGJ1dHRvbnMpIGZvcktleTpAImJ1dHRv
bnMiXTsKLX0KLQotLSAoTlNBcnJheS8qPE5TU3RyaW5nPiovICopYnV0dG9ucwotewotICAgIHJl
dHVybiB0b09iakNTdHJpbmdBcnJheShbc3VwZXIgSlNPTkFycmF5Rm9yS2V5OkAiYnV0dG9ucyJd
KTsKLX0KLQotLSAodm9pZClzZXREaXJlY3Rpb25hbGl0eTooVGVzdFByb3RvY29sRGF0YWJhc2VP
cHRpb25hbFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5KWRpcmVjdGlvbmFsaXR5Ci17Ci0g
ICAgW3N1cGVyIHNldFN0cmluZzp0b1Byb3RvY29sU3RyaW5nKGRpcmVjdGlvbmFsaXR5KSBmb3JL
ZXk6QCJkaXJlY3Rpb25hbGl0eSJdOwotfQotCi0tIChUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlv
bmFsUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHkpZGlyZWN0aW9uYWxpdHkKLXsKLSAgICBy
ZXR1cm4gZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJh
bWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eT4oW3N1cGVyIHN0cmluZ0ZvcktleTpAImRpcmVjdGlv
bmFsaXR5Il0pLnZhbHVlKCk7Ci19Ci0KLS0gKHZvaWQpc2V0Tm90ZXM6KE5TU3RyaW5nICopbm90
ZXMKLXsKLSAgICBbc3VwZXIgc2V0U3RyaW5nOm5vdGVzIGZvcktleTpAIm5vdGVzIl07Ci19Ci0K
LS0gKE5TU3RyaW5nICopbm90ZXMKLXsKLSAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpA
Im5vdGVzIl07Ci19Ci0KLS0gKHZvaWQpc2V0VGltZXN0YW1wOihkb3VibGUpdGltZXN0YW1wCi17
Ci0gICAgW3N1cGVyIHNldERvdWJsZTp0aW1lc3RhbXAgZm9yS2V5OkAidGltZXN0YW1wIl07Ci19
Ci0KLS0gKGRvdWJsZSl0aW1lc3RhbXAKLXsKLSAgICByZXR1cm4gW3N1cGVyIGRvdWJsZUZvcktl
eTpAInRpbWVzdGFtcCJdOwotfQotCi0tICh2b2lkKXNldFZhbHVlczooUldJUHJvdG9jb2xKU09O
T2JqZWN0ICopdmFsdWVzCi17Ci0gICAgW3N1cGVyIHNldE9iamVjdDp2YWx1ZXMgZm9yS2V5OkAi
dmFsdWVzIl07Ci19Ci0KLS0gKFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcwotewotICAg
IFJXSVByb3RvY29sSlNPTk9iamVjdCAqb2JqZWN0ID0gW3N1cGVyIG9iamVjdEZvcktleTpAInZh
bHVlcyJdOwotICAgIGlmICghb2JqZWN0KQotICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVy
biBbW1JXSVByb3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0Oltbc3Vw
ZXIgb2JqZWN0Rm9yS2V5OkAidmFsdWVzIl0gdG9KU09OT2JqZWN0XS5nZXQoKV07Ci19Ci0KLS0g
KHZvaWQpc2V0UGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZAotewotICAg
IFtzdXBlciBzZXRPYmplY3Q6cGF5bG9hZCBmb3JLZXk6QCJwYXlsb2FkIl07Ci19Ci0KLS0gKFJX
SVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQKLXsKLSAgICBSV0lQcm90b2NvbEpTT05PYmpl
Y3QgKm9iamVjdCA9IFtzdXBlciBvYmplY3RGb3JLZXk6QCJwYXlsb2FkIl07Ci0gICAgaWYgKCFv
YmplY3QpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgcmV0dXJuIFtbUldJUHJvdG9jb2xKU09O
T2JqZWN0IGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6W1tzdXBlciBvYmplY3RGb3JLZXk6QCJw
YXlsb2FkIl0gdG9KU09OT2JqZWN0XS5nZXQoKV07Ci19Ci0KLS0gKHZvaWQpc2V0RXJyb3I6KFRl
c3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKillcnJvcgotewotICAgIFtzdXBlciBzZXRPYmplY3Q6
ZXJyb3IgZm9yS2V5OkAiZXJyb3IiXTsKLX0KLQotLSAoVGVzdFByb3RvY29sRGF0YWJhc2VFcnJv
ciAqKWVycm9yCi17Ci0gICAgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvYmplY3QgPSBbc3VwZXIg
b2JqZWN0Rm9yS2V5OkAiZXJyb3IiXTsKLSAgICBpZiAoIW9iamVjdCkKLSAgICAgICAgcmV0dXJu
IG5pbDsKLSAgICByZXR1cm4gW1tUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGFsbG9jXSBpbml0
V2l0aEpTT05PYmplY3Q6W1tzdXBlciBvYmplY3RGb3JLZXk6QCJlcnJvciJdIHRvSlNPTk9iamVj
dF0uZ2V0KCldOwotfQotCi0tICh2b2lkKXNldEVycm9yTGlzdDooTlNBcnJheS8qPFRlc3RQcm90
b2NvbERhdGFiYXNlRXJyb3I+Ki8gKillcnJvckxpc3QKLXsKLSAgICBUSFJPV19FWENFUFRJT05f
Rk9SX0JBRF9UWVBFX0lOX0FSUkFZKGVycm9yTGlzdCwgW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJy
b3IgY2xhc3NdKTsKLSAgICBbc3VwZXIgc2V0SlNPTkFycmF5OnRvSlNPTk9iamVjdEFycmF5KGVy
cm9yTGlzdCkgZm9yS2V5OkAiZXJyb3JMaXN0Il07Ci19Ci0KLS0gKE5TQXJyYXkvKjxUZXN0UHJv
dG9jb2xEYXRhYmFzZUVycm9yPiovICopZXJyb3JMaXN0Ci17Ci0gICAgcmV0dXJuIHRvT2JqQ0Fy
cmF5PFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I+KFtzdXBlciBKU09OQXJyYXlGb3JLZXk6QCJl
cnJvckxpc3QiXSk7Ci19Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbERh
dGFiYXNlUGFyYW1ldGVyQnVuZGxlCi0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6
KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQKLXsKLSAgICBp
ZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImNvbHVtbk5hbWVz
Il0sIEAiY29sdW1uTmFtZXMiKTsKLSAgICBzZWxmLmNvbHVtbk5hbWVzID0gcGF5bG9hZFtAImNv
bHVtbk5hbWVzIl07Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZ
KHBheWxvYWRbQCJidXR0b25zIl0sIEAiYnV0dG9ucyIpOwotICAgIHNlbGYuYnV0dG9ucyA9IHBh
eWxvYWRbQCJidXR0b25zIl07Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BS
T1BFUlRZKHBheWxvYWRbQCJkaXJlY3Rpb25hbGl0eSJdLCBAImRpcmVjdGlvbmFsaXR5Iik7Ci0g
ICAgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25h
bGl0eT4gZGlyZWN0aW9uYWxpdHkgPSBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sRGF0
YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eT4ocGF5bG9hZFtAImRpcmVjdGlvbmFs
aXR5Il0pOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX0VOVU1fVkFMVUUoZGlyZWN0aW9u
YWxpdHksIEAiZGlyZWN0aW9uYWxpdHkiKTsKLSAgICBzZWxmLmRpcmVjdGlvbmFsaXR5ID0gZGly
ZWN0aW9uYWxpdHkudmFsdWUoKTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURf
UFJPUEVSVFkocGF5bG9hZFtAIm5vdGVzIl0sIEAibm90ZXMiKTsKLSAgICBzZWxmLm5vdGVzID0g
cGF5bG9hZFtAIm5vdGVzIl07Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BS
T1BFUlRZKHBheWxvYWRbQCJ0aW1lc3RhbXAiXSwgQCJ0aW1lc3RhbXAiKTsKLSAgICBzZWxmLnRp
bWVzdGFtcCA9IFtwYXlsb2FkW0AidGltZXN0YW1wIl0gZG91YmxlVmFsdWVdOwotCi0gICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AidmFsdWVzIl0sIEAi
dmFsdWVzIik7Ci0gICAgc2VsZi52YWx1ZXMgPSBwYXlsb2FkW0AidmFsdWVzIl07Ci0KLSAgICBU
SFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJwYXlsb2FkIl0s
IEAicGF5bG9hZCIpOwotICAgIHNlbGYucGF5bG9hZCA9IHBheWxvYWRbQCJwYXlsb2FkIl07Ci0K
LSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJlcnJv
ciJdLCBAImVycm9yIik7Ci0gICAgc2VsZi5lcnJvciA9IFtbVGVzdFByb3RvY29sRGF0YWJhc2VF
cnJvciBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRbQCJlcnJvciJdXTsKLQotICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImVycm9yTGlzdCJd
LCBAImVycm9yTGlzdCIpOwotICAgIHNlbGYuZXJyb3JMaXN0ID0gb2JqY0FycmF5RnJvbVBheWxv
YWQ8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4ocGF5bG9hZFtAImVycm9yTGlzdCJdKTsKLQot
ICAgIHJldHVybiBzZWxmOwotfQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmpl
Y3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9iamVjdAotewotICAgIGlmICghKHNlbGYgPSBb
c3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmplY3QgdG9KU09OT2JqZWN0XS5nZXQoKV0pKQot
ICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aENvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5O
YW1lcyBidXR0b25zOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilidXR0b25zIGRpcmVjdGlvbmFs
aXR5OihUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5KWRp
cmVjdGlvbmFsaXR5IG5vdGVzOihOU1N0cmluZyAqKW5vdGVzIHRpbWVzdGFtcDooZG91YmxlKXRp
bWVzdGFtcCB2YWx1ZXM6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcyBwYXlsb2FkOihS
V0lQcm90b2NvbEpTT05PYmplY3QgKilwYXlsb2FkIGVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFz
ZUVycm9yICopZXJyb3IgZXJyb3JMaXN0OihOU0FycmF5Lyo8VGVzdFByb3RvY29sRGF0YWJhc2VF
cnJvcj4qLyAqKWVycm9yTGlzdAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQot
ICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9Q
Uk9QRVJUWShjb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOwotICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfUkVRVUlSRURfUFJPUEVSVFkoYnV0dG9ucywgQCJidXR0b25zIik7Ci0gICAgVEhST1df
RVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShub3RlcywgQCJub3RlcyIpOwotICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkodmFsdWVzLCBAInZhbHVlcyIpOwot
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZCwgQCJwYXls
b2FkIik7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShlcnJvciwg
QCJlcnJvciIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkoZXJy
b3JMaXN0LCBAImVycm9yTGlzdCIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEVf
SU5fQVJSQVkoZXJyb3JMaXN0LCBbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBjbGFzc10pOwot
Ci0gICAgc2VsZi5jb2x1bW5OYW1lcyA9IGNvbHVtbk5hbWVzOwotICAgIHNlbGYuYnV0dG9ucyA9
IGJ1dHRvbnM7Ci0gICAgc2VsZi5kaXJlY3Rpb25hbGl0eSA9IGRpcmVjdGlvbmFsaXR5OwotICAg
IHNlbGYubm90ZXMgPSBub3RlczsKLSAgICBzZWxmLnRpbWVzdGFtcCA9IHRpbWVzdGFtcDsKLSAg
ICBzZWxmLnZhbHVlcyA9IHZhbHVlczsKLSAgICBzZWxmLnBheWxvYWQgPSBwYXlsb2FkOwotICAg
IHNlbGYuZXJyb3IgPSBlcnJvcjsKLSAgICBzZWxmLmVycm9yTGlzdCA9IGVycm9yTGlzdDsKLQot
ICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKXNldENvbHVtbk5hbWVzOihOU0FycmF5Lyo8
TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcwotewotICAgIFtzdXBlciBzZXRKU09OQXJyYXk6dG9K
U09OU3RyaW5nQXJyYXkoY29sdW1uTmFtZXMpIGZvcktleTpAImNvbHVtbk5hbWVzIl07Ci19Ci0K
LS0gKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWNvbHVtbk5hbWVzCi17Ci0gICAgcmV0dXJuIHRv
T2JqQ1N0cmluZ0FycmF5KFtzdXBlciBKU09OQXJyYXlGb3JLZXk6QCJjb2x1bW5OYW1lcyJdKTsK
LX0KLQotLSAodm9pZClzZXRCdXR0b25zOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilidXR0b25z
Ci17Ci0gICAgW3N1cGVyIHNldEpTT05BcnJheTp0b0pTT05TdHJpbmdBcnJheShidXR0b25zKSBm
b3JLZXk6QCJidXR0b25zIl07Ci19Ci0KLS0gKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWJ1dHRv
bnMKLXsKLSAgICByZXR1cm4gdG9PYmpDU3RyaW5nQXJyYXkoW3N1cGVyIEpTT05BcnJheUZvcktl
eTpAImJ1dHRvbnMiXSk7Ci19Ci0KLS0gKHZvaWQpc2V0RGlyZWN0aW9uYWxpdHk6KFRlc3RQcm90
b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHkpZGlyZWN0aW9uYWxpdHkK
LXsKLSAgICBbc3VwZXIgc2V0U3RyaW5nOnRvUHJvdG9jb2xTdHJpbmcoZGlyZWN0aW9uYWxpdHkp
IGZvcktleTpAImRpcmVjdGlvbmFsaXR5Il07Ci19Ci0KLS0gKFRlc3RQcm90b2NvbERhdGFiYXNl
UGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHkpZGlyZWN0aW9uYWxpdHkKLXsKLSAgICByZXR1
cm4gZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxl
RGlyZWN0aW9uYWxpdHk+KFtzdXBlciBzdHJpbmdGb3JLZXk6QCJkaXJlY3Rpb25hbGl0eSJdKS52
YWx1ZSgpOwotfQotCi0tICh2b2lkKXNldE5vdGVzOihOU1N0cmluZyAqKW5vdGVzCi17Ci0gICAg
W3N1cGVyIHNldFN0cmluZzpub3RlcyBmb3JLZXk6QCJub3RlcyJdOwotfQotCi0tIChOU1N0cmlu
ZyAqKW5vdGVzCi17Ci0gICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJub3RlcyJdOwot
fQotCi0tICh2b2lkKXNldFRpbWVzdGFtcDooZG91YmxlKXRpbWVzdGFtcAotewotICAgIFtzdXBl
ciBzZXREb3VibGU6dGltZXN0YW1wIGZvcktleTpAInRpbWVzdGFtcCJdOwotfQotCi0tIChkb3Vi
bGUpdGltZXN0YW1wCi17Ci0gICAgcmV0dXJuIFtzdXBlciBkb3VibGVGb3JLZXk6QCJ0aW1lc3Rh
bXAiXTsKLX0KLQotLSAodm9pZClzZXRWYWx1ZXM6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXZh
bHVlcwotewotICAgIFtzdXBlciBzZXRPYmplY3Q6dmFsdWVzIGZvcktleTpAInZhbHVlcyJdOwot
fQotCi0tIChSV0lQcm90b2NvbEpTT05PYmplY3QgKil2YWx1ZXMKLXsKLSAgICBSV0lQcm90b2Nv
bEpTT05PYmplY3QgKm9iamVjdCA9IFtzdXBlciBvYmplY3RGb3JLZXk6QCJ2YWx1ZXMiXTsKLSAg
ICBpZiAoIW9iamVjdCkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4gW1tSV0lQcm90
b2NvbEpTT05PYmplY3QgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDpbW3N1cGVyIG9iamVjdEZv
cktleTpAInZhbHVlcyJdIHRvSlNPTk9iamVjdF0uZ2V0KCldOwotfQotCi0tICh2b2lkKXNldFBh
eWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQKLXsKLSAgICBbc3VwZXIgc2V0
T2JqZWN0OnBheWxvYWQgZm9yS2V5OkAicGF5bG9hZCJdOwotfQotCi0tIChSV0lQcm90b2NvbEpT
T05PYmplY3QgKilwYXlsb2FkCi17Ci0gICAgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvYmplY3Qg
PSBbc3VwZXIgb2JqZWN0Rm9yS2V5OkAicGF5bG9hZCJdOwotICAgIGlmICghb2JqZWN0KQotICAg
ICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiBbW1JXSVByb3RvY29sSlNPTk9iamVjdCBhbGxv
Y10gaW5pdFdpdGhKU09OT2JqZWN0Oltbc3VwZXIgb2JqZWN0Rm9yS2V5OkAicGF5bG9hZCJdIHRv
SlNPTk9iamVjdF0uZ2V0KCldOwotfQotCi0tICh2b2lkKXNldEVycm9yOihUZXN0UHJvdG9jb2xE
YXRhYmFzZUVycm9yICopZXJyb3IKLXsKLSAgICBbc3VwZXIgc2V0T2JqZWN0OmVycm9yIGZvcktl
eTpAImVycm9yIl07Ci19Ci0KLS0gKFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKillcnJvcgot
ewotICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb2JqZWN0ID0gW3N1cGVyIG9iamVjdEZvcktl
eTpAImVycm9yIl07Ci0gICAgaWYgKCFvYmplY3QpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAg
cmV0dXJuIFtbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBhbGxvY10gaW5pdFdpdGhKU09OT2Jq
ZWN0Oltbc3VwZXIgb2JqZWN0Rm9yS2V5OkAiZXJyb3IiXSB0b0pTT05PYmplY3RdLmdldCgpXTsK
LX0KLQotLSAodm9pZClzZXRFcnJvckxpc3Q6KE5TQXJyYXkvKjxUZXN0UHJvdG9jb2xEYXRhYmFz
ZUVycm9yPiovICopZXJyb3JMaXN0Ci17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQ
RV9JTl9BUlJBWShlcnJvckxpc3QsIFtUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGNsYXNzXSk7
Ci0gICAgW3N1cGVyIHNldEpTT05BcnJheTp0b0pTT05PYmplY3RBcnJheShlcnJvckxpc3QpIGZv
cktleTpAImVycm9yTGlzdCJdOwotfQotCi0tIChOU0FycmF5Lyo8VGVzdFByb3RvY29sRGF0YWJh
c2VFcnJvcj4qLyAqKWVycm9yTGlzdAotewotICAgIHJldHVybiB0b09iakNBcnJheTxUZXN0UHJv
dG9jb2xEYXRhYmFzZUVycm9yPihbc3VwZXIgSlNPTkFycmF5Rm9yS2V5OkAiZXJyb3JMaXN0Il0p
OwotfQotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xEYXRhYmFzZU9iamVj
dFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHMKLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5
bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZAotewot
ICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0g
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiaW50ZWdl
ciJdLCBAImludGVnZXIiKTsKLSAgICBzZWxmLmludGVnZXIgPSBwYXlsb2FkW0AiaW50ZWdlciJd
OwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0Ai
YXJyYXkiXSwgQCJhcnJheSIpOwotICAgIHNlbGYuYXJyYXkgPSBwYXlsb2FkW0AiYXJyYXkiXTsK
LQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAInN0
cmluZyJdLCBAInN0cmluZyIpOwotICAgIHNlbGYuc3RyaW5nID0gcGF5bG9hZFtAInN0cmluZyJd
OwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0Ai
dmFsdWUiXSwgQCJ2YWx1ZSIpOwotICAgIHNlbGYudmFsdWUgPSBwYXlsb2FkW0AidmFsdWUiXTsK
LQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAIm9i
amVjdCJdLCBAIm9iamVjdCIpOwotICAgIHNlbGYub2JqZWN0ID0gcGF5bG9hZFtAIm9iamVjdCJd
OwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2Nv
bE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopb2JqZWN0Ci17Ci0gICAgaWYgKCEoc2Vs
ZiA9IFtzdXBlciBpbml0V2l0aEpTT05PYmplY3Q6W29iamVjdCB0b0pTT05PYmplY3RdLmdldCgp
XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoSW50ZWdlcjooTlNTdHJpbmcgKilpbnRlZ2VyIGFycmF5OihOU1N0
cmluZyAqKWFycmF5IHN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcgdmFsdWU6KE5TU3RyaW5nICop
dmFsdWUgb2JqZWN0OihOU1N0cmluZyAqKW9iamVjdAotewotICAgIGlmICghKHNlbGYgPSBbc3Vw
ZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9SRVFVSVJFRF9QUk9QRVJUWShpbnRlZ2VyLCBAImludGVnZXIiKTsKLSAgICBUSFJPV19FWENF
UFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKGFycmF5LCBAImFycmF5Iik7Ci0gICAgVEhST1df
RVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShzdHJpbmcsIEAic3RyaW5nIik7Ci0gICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWSh2YWx1ZSwgQCJ2YWx1ZSIpOwot
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkob2JqZWN0LCBAIm9iamVj
dCIpOwotCi0gICAgc2VsZi5pbnRlZ2VyID0gaW50ZWdlcjsKLSAgICBzZWxmLmFycmF5ID0gYXJy
YXk7Ci0gICAgc2VsZi5zdHJpbmcgPSBzdHJpbmc7Ci0gICAgc2VsZi52YWx1ZSA9IHZhbHVlOwot
ICAgIHNlbGYub2JqZWN0ID0gb2JqZWN0OwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZv
aWQpc2V0SW50ZWdlcjooTlNTdHJpbmcgKilpbnRlZ2VyCi17Ci0gICAgW3N1cGVyIHNldFN0cmlu
ZzppbnRlZ2VyIGZvcktleTpAImludGVnZXIiXTsKLX0KLQotLSAoTlNTdHJpbmcgKilpbnRlZ2Vy
Ci17Ci0gICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJpbnRlZ2VyIl07Ci19Ci0KLS0g
KHZvaWQpc2V0QXJyYXk6KE5TU3RyaW5nICopYXJyYXkKLXsKLSAgICBbc3VwZXIgc2V0U3RyaW5n
OmFycmF5IGZvcktleTpAImFycmF5Il07Ci19Ci0KLS0gKE5TU3RyaW5nICopYXJyYXkKLXsKLSAg
ICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAImFycmF5Il07Ci19Ci0KLS0gKHZvaWQpc2V0
U3RyaW5nOihOU1N0cmluZyAqKXN0cmluZwotewotICAgIFtzdXBlciBzZXRTdHJpbmc6c3RyaW5n
IGZvcktleTpAInN0cmluZyJdOwotfQotCi0tIChOU1N0cmluZyAqKXN0cmluZwotewotICAgIHJl
dHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAic3RyaW5nIl07Ci19Ci0KLS0gKHZvaWQpc2V0VmFs
dWU6KE5TU3RyaW5nICopdmFsdWUKLXsKLSAgICBbc3VwZXIgc2V0U3RyaW5nOnZhbHVlIGZvcktl
eTpAInZhbHVlIl07Ci19Ci0KLS0gKE5TU3RyaW5nICopdmFsdWUKLXsKLSAgICByZXR1cm4gW3N1
cGVyIHN0cmluZ0ZvcktleTpAInZhbHVlIl07Ci19Ci0KLS0gKHZvaWQpc2V0T2JqZWN0OihOU1N0
cmluZyAqKW9iamVjdAotewotICAgIFtzdXBlciBzZXRTdHJpbmc6b2JqZWN0IGZvcktleTpAIm9i
amVjdCJdOwotfQotCi0tIChOU1N0cmluZyAqKW9iamVjdAotewotICAgIHJldHVybiBbc3VwZXIg
c3RyaW5nRm9yS2V5OkAib2JqZWN0Il07Ci19Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFRl
c3RQcm90b2NvbERhdGFiYXNlRHVtbXlPYmplY3QKLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
UGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZAot
ewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwot
Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9i
amVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopb2JqZWN0Ci17Ci0gICAgaWYgKCEoc2VsZiA9
IFtzdXBlciBpbml0V2l0aEpTT05PYmplY3Q6W29iamVjdCB0b0pTT05PYmplY3RdLmdldCgpXSkp
Ci0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotQGVuZAotCi0K
LUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlCi0KLS0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5n
ICosIGlkPiAqKXBheWxvYWQKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAg
ICAgICAgcmV0dXJuIG5pbDsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJP
UEVSVFkocGF5bG9hZFtAImRpcmVjdGlvbmFsaXR5Il0sIEAiZGlyZWN0aW9uYWxpdHkiKTsKLSAg
ICBPcHRpb25hbDxUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHk+
IGRpcmVjdGlvbmFsaXR5ID0gZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbFRlc3RQYXJh
bWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eT4ocGF5bG9hZFtAImRpcmVjdGlvbmFsaXR5Il0pOwot
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX0VOVU1fVkFMVUUoZGlyZWN0aW9uYWxpdHksIEAi
ZGlyZWN0aW9uYWxpdHkiKTsKLSAgICBzZWxmLmRpcmVjdGlvbmFsaXR5ID0gZGlyZWN0aW9uYWxp
dHkudmFsdWUoKTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFko
cGF5bG9hZFtAImJ1dHRvbnMiXSwgQCJidXR0b25zIik7Ci0gICAgc2VsZi5idXR0b25zID0gcGF5
bG9hZFtAImJ1dHRvbnMiXTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJP
UEVSVFkocGF5bG9hZFtAImNvbHVtbk5hbWVzIl0sIEAiY29sdW1uTmFtZXMiKTsKLSAgICBzZWxm
LmNvbHVtbk5hbWVzID0gcGF5bG9hZFtAImNvbHVtbk5hbWVzIl07Ci0KLSAgICBUSFJPV19FWENF
UFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJub3RlcyJdLCBAIm5vdGVzIik7
Ci0gICAgc2VsZi5ub3RlcyA9IHBheWxvYWRbQCJub3RlcyJdOwotCi0gICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AidGltZXN0YW1wIl0sIEAidGltZXN0
YW1wIik7Ci0gICAgc2VsZi50aW1lc3RhbXAgPSBbcGF5bG9hZFtAInRpbWVzdGFtcCJdIGRvdWJs
ZVZhbHVlXTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5
bG9hZFtAInZhbHVlcyJdLCBAInZhbHVlcyIpOwotICAgIHNlbGYudmFsdWVzID0gcGF5bG9hZFtA
InZhbHVlcyJdOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShw
YXlsb2FkW0AicGF5bG9hZCJdLCBAInBheWxvYWQiKTsKLSAgICBzZWxmLnBheWxvYWQgPSBwYXls
b2FkW0AicGF5bG9hZCJdOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9Q
RVJUWShwYXlsb2FkW0AiZXJyb3IiXSwgQCJlcnJvciIpOwotICAgIHNlbGYuZXJyb3IgPSBbW1Rl
c3RQcm90b2NvbERhdGFiYXNlRXJyb3IgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkW0Ai
ZXJyb3IiXV07Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0
aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilvYmplY3QKLXsKLSAgICBp
ZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoSlNPTk9iamVjdDpbb2JqZWN0IHRvSlNPTk9iamVj
dF0uZ2V0KCldKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIHJldHVybiBzZWxmOwotfQot
Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhEaXJlY3Rpb25hbGl0eTooVGVzdFByb3RvY29sVGVz
dFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5KWRpcmVjdGlvbmFsaXR5IGJ1dHRvbnM6KE5T
QXJyYXkvKjxOU1N0cmluZz4qLyAqKWJ1dHRvbnMgY29sdW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0
cmluZz4qLyAqKWNvbHVtbk5hbWVzIG5vdGVzOihOU1N0cmluZyAqKW5vdGVzIHRpbWVzdGFtcDoo
ZG91YmxlKXRpbWVzdGFtcCB2YWx1ZXM6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcyBw
YXlsb2FkOihSV0lQcm90b2NvbEpTT05PYmplY3QgKilwYXlsb2FkIGVycm9yOihUZXN0UHJvdG9j
b2xEYXRhYmFzZUVycm9yICopZXJyb3IKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRd
KSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlS
RURfUFJPUEVSVFkoYnV0dG9ucywgQCJidXR0b25zIik7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9SRVFVSVJFRF9QUk9QRVJUWShjb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOwotICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkobm90ZXMsIEAibm90ZXMiKTsKLSAg
ICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHZhbHVlcywgQCJ2YWx1ZXMi
KTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWQsIEAi
cGF5bG9hZCIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkoZXJy
b3IsIEAiZXJyb3IiKTsKLQotICAgIHNlbGYuZGlyZWN0aW9uYWxpdHkgPSBkaXJlY3Rpb25hbGl0
eTsKLSAgICBzZWxmLmJ1dHRvbnMgPSBidXR0b25zOwotICAgIHNlbGYuY29sdW1uTmFtZXMgPSBj
b2x1bW5OYW1lczsKLSAgICBzZWxmLm5vdGVzID0gbm90ZXM7Ci0gICAgc2VsZi50aW1lc3RhbXAg
PSB0aW1lc3RhbXA7Ci0gICAgc2VsZi52YWx1ZXMgPSB2YWx1ZXM7Ci0gICAgc2VsZi5wYXlsb2Fk
ID0gcGF5bG9hZDsKLSAgICBzZWxmLmVycm9yID0gZXJyb3I7Ci0KLSAgICByZXR1cm4gc2VsZjsK
LX0KLQotLSAodm9pZClzZXREaXJlY3Rpb25hbGl0eTooVGVzdFByb3RvY29sVGVzdFBhcmFtZXRl
ckJ1bmRsZURpcmVjdGlvbmFsaXR5KWRpcmVjdGlvbmFsaXR5Ci17Ci0gICAgW3N1cGVyIHNldFN0
cmluZzp0b1Byb3RvY29sU3RyaW5nKGRpcmVjdGlvbmFsaXR5KSBmb3JLZXk6QCJkaXJlY3Rpb25h
bGl0eSJdOwotfQotCi0tIChUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9u
YWxpdHkpZGlyZWN0aW9uYWxpdHkKLXsKLSAgICByZXR1cm4gZnJvbVByb3RvY29sU3RyaW5nPFRl
c3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eT4oW3N1cGVyIHN0cmlu
Z0ZvcktleTpAImRpcmVjdGlvbmFsaXR5Il0pLnZhbHVlKCk7Ci19Ci0KLS0gKHZvaWQpc2V0QnV0
dG9uczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopYnV0dG9ucwotewotICAgIFtzdXBlciBzZXRK
U09OQXJyYXk6dG9KU09OU3RyaW5nQXJyYXkoYnV0dG9ucykgZm9yS2V5OkAiYnV0dG9ucyJdOwot
fQotCi0tIChOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilidXR0b25zCi17Ci0gICAgcmV0dXJuIHRv
T2JqQ1N0cmluZ0FycmF5KFtzdXBlciBKU09OQXJyYXlGb3JLZXk6QCJidXR0b25zIl0pOwotfQot
Ci0tICh2b2lkKXNldENvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5O
YW1lcwotewotICAgIFtzdXBlciBzZXRKU09OQXJyYXk6dG9KU09OU3RyaW5nQXJyYXkoY29sdW1u
TmFtZXMpIGZvcktleTpAImNvbHVtbk5hbWVzIl07Ci19Ci0KLS0gKE5TQXJyYXkvKjxOU1N0cmlu
Zz4qLyAqKWNvbHVtbk5hbWVzCi17Ci0gICAgcmV0dXJuIHRvT2JqQ1N0cmluZ0FycmF5KFtzdXBl
ciBKU09OQXJyYXlGb3JLZXk6QCJjb2x1bW5OYW1lcyJdKTsKLX0KLQotLSAodm9pZClzZXROb3Rl
czooTlNTdHJpbmcgKilub3RlcwotewotICAgIFtzdXBlciBzZXRTdHJpbmc6bm90ZXMgZm9yS2V5
OkAibm90ZXMiXTsKLX0KLQotLSAoTlNTdHJpbmcgKilub3RlcwotewotICAgIHJldHVybiBbc3Vw
ZXIgc3RyaW5nRm9yS2V5OkAibm90ZXMiXTsKLX0KLQotLSAodm9pZClzZXRUaW1lc3RhbXA6KGRv
dWJsZSl0aW1lc3RhbXAKLXsKLSAgICBbc3VwZXIgc2V0RG91YmxlOnRpbWVzdGFtcCBmb3JLZXk6
QCJ0aW1lc3RhbXAiXTsKLX0KLQotLSAoZG91YmxlKXRpbWVzdGFtcAotewotICAgIHJldHVybiBb
c3VwZXIgZG91YmxlRm9yS2V5OkAidGltZXN0YW1wIl07Ci19Ci0KLS0gKHZvaWQpc2V0VmFsdWVz
OihSV0lQcm90b2NvbEpTT05PYmplY3QgKil2YWx1ZXMKLXsKLSAgICBbc3VwZXIgc2V0T2JqZWN0
OnZhbHVlcyBmb3JLZXk6QCJ2YWx1ZXMiXTsKLX0KLQotLSAoUldJUHJvdG9jb2xKU09OT2JqZWN0
ICopdmFsdWVzCi17Ci0gICAgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvYmplY3QgPSBbc3VwZXIg
b2JqZWN0Rm9yS2V5OkAidmFsdWVzIl07Ci0gICAgaWYgKCFvYmplY3QpCi0gICAgICAgIHJldHVy
biBuaWw7Ci0gICAgcmV0dXJuIFtbUldJUHJvdG9jb2xKU09OT2JqZWN0IGFsbG9jXSBpbml0V2l0
aEpTT05PYmplY3Q6W1tzdXBlciBvYmplY3RGb3JLZXk6QCJ2YWx1ZXMiXSB0b0pTT05PYmplY3Rd
LmdldCgpXTsKLX0KLQotLSAodm9pZClzZXRQYXlsb2FkOihSV0lQcm90b2NvbEpTT05PYmplY3Qg
KilwYXlsb2FkCi17Ci0gICAgW3N1cGVyIHNldE9iamVjdDpwYXlsb2FkIGZvcktleTpAInBheWxv
YWQiXTsKLX0KLQotLSAoUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZAotewotICAgIFJX
SVByb3RvY29sSlNPTk9iamVjdCAqb2JqZWN0ID0gW3N1cGVyIG9iamVjdEZvcktleTpAInBheWxv
YWQiXTsKLSAgICBpZiAoIW9iamVjdCkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4g
W1tSV0lQcm90b2NvbEpTT05PYmplY3QgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDpbW3N1cGVy
IG9iamVjdEZvcktleTpAInBheWxvYWQiXSB0b0pTT05PYmplY3RdLmdldCgpXTsKLX0KLQotLSAo
dm9pZClzZXRFcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKWVycm9yCi17Ci0gICAg
W3N1cGVyIHNldE9iamVjdDplcnJvciBmb3JLZXk6QCJlcnJvciJdOwotfQotCi0tIChUZXN0UHJv
dG9jb2xEYXRhYmFzZUVycm9yICopZXJyb3IKLXsKLSAgICBSV0lQcm90b2NvbEpTT05PYmplY3Qg
Km9iamVjdCA9IFtzdXBlciBvYmplY3RGb3JLZXk6QCJlcnJvciJdOwotICAgIGlmICghb2JqZWN0
KQotICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiBbW1Rlc3RQcm90b2NvbERhdGFiYXNl
RXJyb3IgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDpbW3N1cGVyIG9iamVjdEZvcktleTpAImVy
cm9yIl0gdG9KU09OT2JqZWN0XS5nZXQoKV07Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC90eXBlLXJlcXVpcmluZy1y
dW50aW1lLWNhc3RzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvdHlwZS1yZXF1aXJpbmctcnVudGltZS1j
YXN0cy5qc29uLXJlc3VsdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTg0ZGFjZGNh
ZjcuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMu
anNvbi1yZXN1bHQKKysrIC9kZXYvbnVsbApAQCAtMSwxNjQ5ICswLDAgQEAKLSMjIyBCZWdpbiBG
aWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotLy8gVGVzdAotSW5zcGVjdG9yQmFja2Vu
ZC5yZWdpc3RlckRvbWFpbigiVGVzdCIsIG51bGwpOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rl
ckVudW0oIlRlc3QuVW5jYXN0ZWRBbmltYWxzIiwge1BpZ3M6ICJQaWdzIiwgQ293czogIkNvd3Mi
LCBDYXRzOiAiQ2F0cyIsIEhlbnM6ICJIZW5zIn0pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rl
ckVudW0oIlRlc3QuQ2FzdGVkQW5pbWFscyIsIHtEdWNrczogIkR1Y2tzIiwgSGVuczogIkhlbnMi
LCBDcm93czogIkNyb3dzIiwgRmxhbWluZ29zOiAiRmxhbWluZ29zIn0pOwotSW5zcGVjdG9yQmFj
a2VuZC5hY3RpdmF0ZURvbWFpbigiVGVzdCIsIG51bGwpOwotIyMjIEVuZCBGaWxlOiBJbnNwZWN0
b3JCYWNrZW5kQ29tbWFuZHMuanMKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUt
cmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKLSNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0KLW5hbWVz
cGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1w
dWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3Bh
dGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNw
YXRjaGVyKTsgfQotICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNv
bnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KLXByaXZhdGU6Ci0gICAg
UmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwotfTsKLQotCi0K
LQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tl
bmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJz
LmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50
aW1lLWNhc3RzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXR5
cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
Ci0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4K
LSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSNp
bmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jZW5kaWYKLQotbmFt
ZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMj
IEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3Mg
RnJvbnRlbmRSb3V0ZXI7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxl
OiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBl
LXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RGcm9u
dGVuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JG
cm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNw
YWNlIEluc3BlY3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZp
bGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sT2JqZWN0cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1y
ZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0K
LW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0K
LS8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgotbmFtZXNwYWNlIFRlc3QgewotY2xhc3MgVHlwZU5l
ZWRpbmdDYXN0OwotY2xhc3MgUmVjdXJzaXZlT2JqZWN0MTsKLWNsYXNzIFJlY3Vyc2l2ZU9iamVj
dDI7Ci1lbnVtIGNsYXNzIFVuY2FzdGVkQW5pbWFsczsKLWVudW0gY2xhc3MgQ2FzdGVkQW5pbWFs
czsKLX0gLy8gVGVzdAotLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgotCi0KLS8vIFR5
cGVkZWZzLgotbmFtZXNwYWNlIFRlc3QgewotdHlwZWRlZiBpbnQgQ2FzdGVkT2JqZWN0SWQ7Ci10
eXBlZGVmIGludCBVbmNhc3RlZE9iamVjdElkOwotfSAvLyBUZXN0Ci0vLyBFbmQgb2YgdHlwZWRl
ZnMuCi0KLW5hbWVzcGFjZSBUZXN0SGVscGVycyB7Ci0KLVN0cmluZyBnZXRFbnVtQ29uc3RhbnRW
YWx1ZShpbnQgY29kZSk7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRFbnVtQ29u
c3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkKLXsKLSAgICByZXR1cm4gZ2V0RW51bUNvbnN0YW50VmFs
dWUoc3RhdGljX2Nhc3Q8aW50PihlbnVtVmFsdWUpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgVGVz
dEhlbHBlcnMKLQotbmFtZXNwYWNlIFRlc3QgewotLyogQSBkdW1teSB0eXBlIHRoYXQgcmVxdWly
ZXMgcnVudGltZSBjYXN0cywgYW5kIGZvcmNlcyBub24tcHJpbWl0aXZlIHJlZmVyZW5jZWQgdHlw
ZXMgdG8gYWxzbyBlbWl0IHJ1bnRpbWUgY2FzdCBoZWxwZXJzLiAqLwotY2xhc3MgVHlwZU5lZWRp
bmdDYXN0IDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewotcHVibGljOgotICAgIGVudW0gewot
ICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCi0gICAgICAgIFN0cmluZ1NldCA9IDEgPDwgMCwKLSAg
ICAgICAgTnVtYmVyU2V0ID0gMSA8PCAxLAotICAgICAgICBBbmltYWxzU2V0ID0gMSA8PCAyLAot
ICAgICAgICBJZFNldCA9IDEgPDwgMywKLSAgICAgICAgVHJlZVNldCA9IDEgPDwgNCwKLSAgICAg
ICAgQWxsRmllbGRzU2V0ID0gKFN0cmluZ1NldCB8IE51bWJlclNldCB8IEFuaW1hbHNTZXQgfCBJ
ZFNldCB8IFRyZWVTZXQpCi0gICAgfTsKLQotICAgIHRlbXBsYXRlPGludCBTVEFURT4KLSAgICBj
bGFzcyBCdWlsZGVyIHsKLSAgICBwcml2YXRlOgotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0
PiBtX3Jlc3VsdDsKLQotICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8
IFNURVA+JiBjYXN0U3RhdGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKnJlaW50
ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBCdWlsZGVyKFJlZjwvKlR5cGVOZWVkaW5nQ2FzdCovSlNPTjo6T2JqZWN0PiYmIG9i
amVjdCkKLSAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQotICAgICAgICB7
Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRl
cl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKLSAgICAgICAgfQotICAgICAgICBmcmllbmQg
Y2xhc3MgVHlwZU5lZWRpbmdDYXN0OwotICAgIHB1YmxpYzoKLQotICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgU3RyaW5nU2V0PiYgc2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTdHJpbmdTZXQpLCBwcm9w
ZXJ0eV9zdHJpbmdfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmlu
Zygic3RyaW5nIl9zLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFN0cmlu
Z1NldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBOdW1iZXJTZXQ+
JiBzZXROdW1iZXIoaW50IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgTnVtYmVyU2V0KSwgcHJvcGVydHlfbnVtYmVyX2FscmVhZHlfc2V0KTsK
LSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2VyKCJudW1iZXIiX3MsIHZhbHVlKTsKLSAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TnVtYmVyU2V0PigpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IEFuaW1hbHNTZXQ+JiBzZXRBbmltYWxzKEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHMgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBBbmltYWxzU2V0KSwgcHJvcGVydHlfYW5pbWFs
c19hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJhbmltYWxz
Il9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFs
dWUodmFsdWUpKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8QW5pbWFsc1NldD4oKTsK
LSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBJZFNldD4mIHNldElkKGludCB2
YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIElk
U2V0KSwgcHJvcGVydHlfaWRfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dEludGVnZXIoImlkIl9zLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPElk
U2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IFRyZWVTZXQ+JiBz
ZXRUcmVlKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3Qx
PiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IFRyZWVTZXQpLCBwcm9wZXJ0eV90cmVlX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXRPYmplY3QoInRyZWUiX3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0
U3RhdGU8VHJlZVNldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIFJlZjxUeXBlTmVlZGluZ0Nh
c3Q+IHJlbGVhc2UoKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFU
RSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwotICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoc2l6ZW9mKFR5cGVOZWVkaW5nQ2FzdCkgPT0gc2l6ZW9mKEpTT046Ok9iamVj
dCksIGNhbm5vdF9jYXN0KTsKLQotICAgICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4ganNvblJl
c3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7Ci0gICAgICAgICAgICBhdXRvIHJlc3Vs
dCA9IFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPFR5cGVOZWVkaW5nQ2FzdD4qPigmanNv
blJlc3VsdCkpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgIH07
Ci0KLSAgICAvKgotICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKLSAgICAgKiBSZWY8VHlw
ZU5lZWRpbmdDYXN0PiByZXN1bHQgPSBUeXBlTmVlZGluZ0Nhc3Q6OmNyZWF0ZSgpCi0gICAgICog
ICAgIC5zZXRTdHJpbmcoLi4uKQotICAgICAqICAgICAuc2V0TnVtYmVyKC4uLikKLSAgICAgKiAg
ICAgLnNldEFuaW1hbHMoLi4uKQotICAgICAqICAgICAuc2V0SWQoLi4uKQotICAgICAqICAgICAu
c2V0VHJlZSguLi4pCi0gICAgICogICAgIC5yZWxlYXNlKCk7Ci0gICAgICovCi0gICAgc3RhdGlj
IEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gQnVp
bGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7Ci0gICAgfQotfTsKLQot
LyogICovCi1lbnVtIGNsYXNzIFVuY2FzdGVkQW5pbWFscyB7Ci0gICAgUGlncyA9IDQsCi0gICAg
Q293cyA9IDUsCi0gICAgQ2F0cyA9IDYsCi0gICAgSGVucyA9IDEsCi19OyAvLyBlbnVtIGNsYXNz
IFVuY2FzdGVkQW5pbWFscwotLyogICovCi1lbnVtIGNsYXNzIENhc3RlZEFuaW1hbHMgewotICAg
IER1Y2tzID0gMCwKLSAgICBIZW5zID0gMSwKLSAgICBDcm93cyA9IDIsCi0gICAgRmxhbWluZ29z
ID0gMywKLX07IC8vIGVudW0gY2xhc3MgQ2FzdGVkQW5pbWFscwotY2xhc3MgUmVjdXJzaXZlT2Jq
ZWN0MSA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKLXB1YmxpYzoKLSAgICBlbnVtIHsKLSAg
ICAgICAgTm9GaWVsZHNTZXQgPSAwLAotICAgICAgICBBbGxGaWVsZHNTZXQgPSAwCi0gICAgfTsK
LQotICAgIHRlbXBsYXRlPGludCBTVEFURT4KLSAgICBjbGFzcyBCdWlsZGVyIHsKLSAgICBwcml2
YXRlOgotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBtX3Jlc3VsdDsKLQotICAgICAgICB0
ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFU
RSB8IFNURVA+Kj4odGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyKFJlZjwvKlJl
Y3Vyc2l2ZU9iamVjdDEqL0pTT046Ok9iamVjdD4mJiBvYmplY3QpCi0gICAgICAgICAgICA6IG1f
cmVzdWx0KFdURk1vdmUob2JqZWN0KSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9z
dGF0ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZnJpZW5kIGNsYXNzIFJlY3Vyc2l2ZU9iamVjdDE7
Ci0gICAgcHVibGljOgotCi0gICAgICAgIFJlZjxSZWN1cnNpdmVPYmplY3QxPiByZWxlYXNlKCkK
LSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRz
U2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNp
emVvZihSZWN1cnNpdmVPYmplY3QxKSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0KSwgY2Fubm90X2Nh
c3QpOwotCi0gICAgICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uUmVzdWx0ID0gbV9yZXN1
bHQucmVsZWFzZU5vbk51bGwoKTsKLSAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gV1RGTW92ZSgq
cmVpbnRlcnByZXRfY2FzdDxSZWY8UmVjdXJzaXZlT2JqZWN0MT4qPigmanNvblJlc3VsdCkpOwot
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICAvKgot
ICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKLSAgICAgKiBSZWY8UmVjdXJzaXZlT2JqZWN0
MT4gcmVzdWx0ID0gUmVjdXJzaXZlT2JqZWN0MTo6Y3JlYXRlKCkKLSAgICAgKiAgICAgLnJlbGVh
c2UoKTsKLSAgICAgKi8KLSAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpKTsKLSAgICB9Ci0KLSAgICB2b2lkIHNldE9iaihSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0Mj4gdmFsdWUpCi0gICAgewotICAgICAgICBK
U09OOjpPYmplY3RCYXNlOjpzZXRPYmplY3QoIm9iaiJfcywgV1RGTW92ZSh2YWx1ZSkpOwotICAg
IH0KLX07Ci0KLWNsYXNzIFJlY3Vyc2l2ZU9iamVjdDIgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFz
ZSB7Ci1wdWJsaWM6Ci0gICAgZW51bSB7Ci0gICAgICAgIE5vRmllbGRzU2V0ID0gMCwKLSAgICAg
ICAgQWxsRmllbGRzU2V0ID0gMAotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+Ci0g
ICAgY2xhc3MgQnVpbGRlciB7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPEpTT046Ok9i
amVjdD4gbV9yZXN1bHQ7Ci0KLSAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RB
VEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICpy
ZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwotICAgICAgICB9
Ci0KLSAgICAgICAgQnVpbGRlcihSZWY8LypSZWN1cnNpdmVPYmplY3QyKi9KU09OOjpPYmplY3Q+
JiYgb2JqZWN0KQotICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBi
dWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwotICAgICAgICB9Ci0gICAgICAgIGZy
aWVuZCBjbGFzcyBSZWN1cnNpdmVPYmplY3QyOwotICAgIHB1YmxpYzoKLQotICAgICAgICBSZWY8
UmVjdXJzaXZlT2JqZWN0Mj4gcmVsZWFzZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7Ci0g
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoUmVjdXJzaXZlT2JqZWN0MikgPT0gc2l6
ZW9mKEpTT046Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsKLQotICAgICAgICAgICAgUmVmPEpTT046
Ok9iamVjdD4ganNvblJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7Ci0gICAgICAg
ICAgICBhdXRvIHJlc3VsdCA9IFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPFJlY3Vyc2l2
ZU9iamVjdDI+Kj4oJmpzb25SZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0g
ICAgICAgIH0KLSAgICB9OwotCi0gICAgLyoKLSAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6
Ci0gICAgICogUmVmPFJlY3Vyc2l2ZU9iamVjdDI+IHJlc3VsdCA9IFJlY3Vyc2l2ZU9iamVjdDI6
OmNyZWF0ZSgpCi0gICAgICogICAgIC5yZWxlYXNlKCk7Ci0gICAgICovCi0gICAgc3RhdGljIEJ1
aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gQnVpbGRl
cjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7Ci0gICAgfQotCi0gICAgdm9p
ZCBzZXRPYmooUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVj
dDE+IHZhbHVlKQotICAgIHsKLSAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0T2JqZWN0KCJv
YmoiX3MsIFdURk1vdmUodmFsdWUpKTsKLSAgICB9Ci19OwotCi19IC8vIFRlc3QKLQotdGVtcGxh
dGU8PiBzdHJ1Y3QgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0
ZWRBbmltYWxzPiB7Ci1zdGF0aWMgdm9pZCBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShKU09O
OjpWYWx1ZSopOwotfTsKLXRlbXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9y
OjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0PiB7Ci1zdGF0aWMgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD4gcnVudGltZUNhc3QoUmVmUHRy
PEpTT046OlZhbHVlPiYmIHZhbHVlKTsKLXN0YXRpYyB2b2lkIGFzc2VydFZhbHVlSGFzRXhwZWN0
ZWRUeXBlKEpTT046OlZhbHVlKik7Ci19OwotdGVtcGxhdGU8PiBzdHJ1Y3QgQmluZGluZ1RyYWl0
czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QxPiB7Ci1zdGF0aWMg
dm9pZCBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShKU09OOjpWYWx1ZSopOwotfTsKLXRlbXBs
YXRlPD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVj
dXJzaXZlT2JqZWN0Mj4gewotc3RhdGljIHZvaWQgYXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUo
SlNPTjo6VmFsdWUqKTsKLX07Ci0KLW5hbWVzcGFjZSBUZXN0SGVscGVycyB7Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIFByb3RvY29sRW51bVR5cGU+Ci1PcHRpb25hbDxQcm90b2NvbEVudW1UeXBlPiBw
YXJzZUVudW1WYWx1ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJik7Ci0KLS8vIEVudW1zIGluIHRo
ZSAnVGVzdCcgRG9tYWluCi10ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29s
OjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0
b3I6OlByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM+KGNvbnN0IFN0cmluZyYpOwotdGVt
cGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFs
cz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNh
c3RlZEFuaW1hbHM+KGNvbnN0IFN0cmluZyYpOwotCi19IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVy
cwotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
LQotbmFtZXNwYWNlIFdURiB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0
SGFzaDsKLQotLy8gSGFzaCBkZWNsYXJhdGlvbnMgaW4gdGhlICdUZXN0JyBEb21haW4KLXRlbXBs
YXRlPD4KLXN0cnVjdCBEZWZhdWx0SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNh
c3RlZEFuaW1hbHM+IHsKLSAgICB0eXBlZGVmIEludEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6
VGVzdDo6VW5jYXN0ZWRBbmltYWxzPiBIYXNoOwotfTsKLXRlbXBsYXRlPD4KLXN0cnVjdCBEZWZh
dWx0SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPiB7Ci0gICAg
dHlwZWRlZiBJbnRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+
IEhhc2g7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXVEYKLSMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sT2JqZWN0cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUt
Y2FzdHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotCi0j
aW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgot
Ci1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotbmFtZXNw
YWNlIFRlc3RIZWxwZXJzIHsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3Rh
bnRfdmFsdWVzW10gPSB7Ci0gICAgIkR1Y2tzIiwKLSAgICAiSGVucyIsCi0gICAgIkNyb3dzIiwK
LSAgICAiRmxhbWluZ29zIiwKLSAgICAiUGlncyIsCi0gICAgIkNvd3MiLAotICAgICJDYXRzIiwK
LX07Ci0KLVN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgewotICAgIHJldHVy
biBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb2RlXTsKLX0KLQotLy8gRW51bXMgaW4gdGhlICdUZXN0
JyBEb21haW4KLXRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6
OlVuY2FzdGVkQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFscz4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmlu
ZykKLXsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7Ci0gICAg
ICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzOjpQ
aWdzLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVk
QW5pbWFsczo6Q293cywKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0
OjpVbmNhc3RlZEFuaW1hbHM6OkNhdHMsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90
b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzOjpIZW5zLAotICAgIH07Ci0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCA0OyArK2kpCi0gICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVt
X2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCi0gICAgICAgICAgICByZXR1cm4g
KEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFscyljb25zdGFudFZhbHVl
c1tpXTsKLQotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLXRlbXBsYXRlPD4KLU9wdGlv
bmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+IHBhcnNlRW51bVZh
bHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPihj
b25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQotewotICAgIHN0YXRpYyBjb25zdCBzaXplX3Qg
Y29uc3RhbnRWYWx1ZXNbXSA9IHsKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29s
OjpUZXN0OjpDYXN0ZWRBbmltYWxzOjpEdWNrcywKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6
OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzOjpIZW5zLAotICAgICAgICAoc2l6ZV90KUlu
c3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM6OkNyb3dzLAotICAgICAgICAo
c2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM6OkZsYW1pbmdv
cywKLSAgICB9OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgNDsgKytpKQotICAgICAgICBp
ZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNb
aV1dKQotICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0
ZWRBbmltYWxzKWNvbnN0YW50VmFsdWVzW2ldOwotCi0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
LX0KLQotCi19IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwotCi0KLQotdm9pZCBCaW5kaW5nVHJh
aXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+Ojphc3NlcnRWYWx1
ZUhhc0V4cGVjdGVkVHlwZShKU09OOjpWYWx1ZSogdmFsdWUpCi17Ci0jaWYgQVNTRVJUX0VOQUJM
RUQKLSAgICBBU1NFUlRfQVJHKHZhbHVlLCB2YWx1ZSk7Ci0gICAgU3RyaW5nIHJlc3VsdDsKLSAg
ICBib29sIGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNTdHJpbmcocmVzdWx0KTsKLSAgICBBU1NF
UlQoY2FzdFN1Y2NlZWRlZCk7Ci0gICAgQVNTRVJUKHJlc3VsdCA9PSAiRHVja3MiIHx8IHJlc3Vs
dCA9PSAiSGVucyIgfHwgcmVzdWx0ID09ICJDcm93cyIgfHwgcmVzdWx0ID09ICJGbGFtaW5nb3Mi
KTsKLSNlbHNlIC8vIEFTU0VSVF9FTkFCTEVECi0gICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKLSNl
bmRpZiAvLyBBU1NFUlRfRU5BQkxFRAotfQotCi12b2lkIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9y
OjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3Rl
ZFR5cGUoSlNPTjo6VmFsdWUqIHZhbHVlKQotewotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgQVNT
RVJUX0FSRyh2YWx1ZSwgdmFsdWUpOwotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG9iamVjdDsK
LSAgICBib29sIGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNPYmplY3Qob2JqZWN0KTsKLSAgICBB
U1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQpOwotICAgIHsKLSAgICAg
ICAgYXV0byBzdHJpbmdQb3MgPSBvYmplY3QtPmZpbmQoInN0cmluZyJfcyk7Ci0gICAgICAgIEFT
U0VSVChzdHJpbmdQb3MgIT0gb2JqZWN0LT5lbmQoKSk7Ci0gICAgICAgIEJpbmRpbmdUcmFpdHM8
U3RyaW5nPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoc3RyaW5nUG9zLT52YWx1ZS5nZXQo
KSk7Ci0gICAgfQotICAgIHsKLSAgICAgICAgYXV0byBudW1iZXJQb3MgPSBvYmplY3QtPmZpbmQo
Im51bWJlciJfcyk7Ci0gICAgICAgIEFTU0VSVChudW1iZXJQb3MgIT0gb2JqZWN0LT5lbmQoKSk7
Ci0gICAgICAgIEJpbmRpbmdUcmFpdHM8aW50Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUo
bnVtYmVyUG9zLT52YWx1ZS5nZXQoKSk7Ci0gICAgfQotICAgIHsKLSAgICAgICAgYXV0byBhbmlt
YWxzUG9zID0gb2JqZWN0LT5maW5kKCJhbmltYWxzIl9zKTsKLSAgICAgICAgQVNTRVJUKGFuaW1h
bHNQb3MgIT0gb2JqZWN0LT5lbmQoKSk7Ci0gICAgICAgIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9y
OjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRU
eXBlKGFuaW1hbHNQb3MtPnZhbHVlLmdldCgpKTsKLSAgICB9Ci0gICAgewotICAgICAgICBhdXRv
IGlkUG9zID0gb2JqZWN0LT5maW5kKCJpZCJfcyk7Ci0gICAgICAgIEFTU0VSVChpZFBvcyAhPSBv
YmplY3QtPmVuZCgpKTsKLSAgICAgICAgQmluZGluZ1RyYWl0czxpbnQ+Ojphc3NlcnRWYWx1ZUhh
c0V4cGVjdGVkVHlwZShpZFBvcy0+dmFsdWUuZ2V0KCkpOwotICAgIH0KLSAgICB7Ci0gICAgICAg
IGF1dG8gdHJlZVBvcyA9IG9iamVjdC0+ZmluZCgidHJlZSJfcyk7Ci0gICAgICAgIEFTU0VSVCh0
cmVlUG9zICE9IG9iamVjdC0+ZW5kKCkpOwotICAgICAgICBCaW5kaW5nVHJhaXRzPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+Ojphc3NlcnRWYWx1ZUhhc0V4cGVj
dGVkVHlwZSh0cmVlUG9zLT52YWx1ZS5nZXQoKSk7Ci0gICAgfQotCi0gICAgaW50IGZvdW5kUHJv
cGVydGllc0NvdW50ID0gNTsKLSAgICBpZiAoZm91bmRQcm9wZXJ0aWVzQ291bnQgIT0gb2JqZWN0
LT5zaXplKCkpCi0gICAgICAgIEZBVEFMKCJVbmV4cGVjdGVkIHByb3BlcnRpZXMgaW4gb2JqZWN0
OiAlc1xuIiwgb2JqZWN0LT50b0pTT05TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7Ci0jZWxzZSAv
LyBBU1NFUlRfRU5BQkxFRAotICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7Ci0jZW5kaWYgLy8gQVNT
RVJUX0VOQUJMRUQKLX0KLQotUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVO
ZWVkaW5nQ2FzdD4gQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBl
TmVlZGluZ0Nhc3Q+OjpydW50aW1lQ2FzdChSZWZQdHI8SlNPTjo6VmFsdWU+JiYgdmFsdWUpCi17
Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcmVzdWx0OwotICAgIGJvb2wgY2FzdFN1Y2NlZWRl
ZCA9IHZhbHVlLT5hc09iamVjdChyZXN1bHQpOwotICAgIEFTU0VSVF9VTlVTRUQoY2FzdFN1Y2Nl
ZWRlZCwgY2FzdFN1Y2NlZWRlZCk7Ci0gICAgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShy
ZXN1bHQuZ2V0KCkpOwotICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihJbnNwZWN0b3I6OlByb3Rv
Y29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3QpID09IHNpemVvZihKU09OOjpPYmplY3RCYXNlKSwg
dHlwZV9jYXN0X3Byb2JsZW0pOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxJbnNwZWN0b3I6OlBy
b3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3QqPihzdGF0aWNfY2FzdDxKU09OOjpPYmplY3RC
YXNlKj4ocmVzdWx0LmdldCgpKSk7Ci19Ci0KLQotdm9pZCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+Ojphc3NlcnRWYWx1ZUhhc0V4cGVj
dGVkVHlwZShKU09OOjpWYWx1ZSogdmFsdWUpCi17Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBB
U1NFUlRfQVJHKHZhbHVlLCB2YWx1ZSk7Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gb2JqZWN0
OwotICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9IHZhbHVlLT5hc09iamVjdChvYmplY3QpOwotICAg
IEFTU0VSVF9VTlVTRUQoY2FzdFN1Y2NlZWRlZCwgY2FzdFN1Y2NlZWRlZCk7Ci0KLSAgICBpbnQg
Zm91bmRQcm9wZXJ0aWVzQ291bnQgPSAwOwotICAgIHsKLSAgICAgICAgYXV0byBvYmpQb3MgPSBv
YmplY3QtPmZpbmQoIm9iaiJfcyk7Ci0gICAgICAgIGlmIChvYmpQb3MgIT0gb2JqZWN0LT5lbmQo
KSkgewotICAgICAgICAgICAgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0
OjpSZWN1cnNpdmVPYmplY3QyPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUob2JqUG9zLT52
YWx1ZS5nZXQoKSk7Ci0gICAgICAgICAgICArK2ZvdW5kUHJvcGVydGllc0NvdW50OwotICAgICAg
ICB9Ci0gICAgfQotICAgIGlmIChmb3VuZFByb3BlcnRpZXNDb3VudCAhPSBvYmplY3QtPnNpemUo
KSkKLSAgICAgICAgRkFUQUwoIlVuZXhwZWN0ZWQgcHJvcGVydGllcyBpbiBvYmplY3Q6ICVzXG4i
LCBvYmplY3QtPnRvSlNPTlN0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKLSNlbHNlIC8vIEFTU0VS
VF9FTkFCTEVECi0gICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKLSNlbmRpZiAvLyBBU1NFUlRfRU5B
QkxFRAotfQotCi12b2lkIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6
UmVjdXJzaXZlT2JqZWN0Mj46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEpTT046OlZhbHVl
KiB2YWx1ZSkKLXsKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIEFTU0VSVF9BUkcodmFsdWUsIHZh
bHVlKTsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBvYmplY3Q7Ci0gICAgYm9vbCBjYXN0U3Vj
Y2VlZGVkID0gdmFsdWUtPmFzT2JqZWN0KG9iamVjdCk7Ci0gICAgQVNTRVJUX1VOVVNFRChjYXN0
U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsKLQotICAgIGludCBmb3VuZFByb3BlcnRpZXNDb3Vu
dCA9IDA7Ci0gICAgewotICAgICAgICBhdXRvIG9ialBvcyA9IG9iamVjdC0+ZmluZCgib2JqIl9z
KTsKLSAgICAgICAgaWYgKG9ialBvcyAhPSBvYmplY3QtPmVuZCgpKSB7Ci0gICAgICAgICAgICBC
aW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+
Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShvYmpQb3MtPnZhbHVlLmdldCgpKTsKLSAgICAg
ICAgICAgICsrZm91bmRQcm9wZXJ0aWVzQ291bnQ7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYg
KGZvdW5kUHJvcGVydGllc0NvdW50ICE9IG9iamVjdC0+c2l6ZSgpKQotICAgICAgICBGQVRBTCgi
VW5leHBlY3RlZCBwcm9wZXJ0aWVzIGluIG9iamVjdDogJXNcbiIsIG9iamVjdC0+dG9KU09OU3Ry
aW5nKCkuYXNjaWkoKS5kYXRhKCkpOwotI2Vsc2UgLy8gQVNTRVJUX0VOQUJMRUQKLSAgICBVTlVT
RURfUEFSQU0odmFsdWUpOwotI2VuZGlmIC8vIEFTU0VSVF9FTkFCTEVECi19Ci0KLX0gLy8gbmFt
ZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5o
PgotCi0KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLQot
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMu
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0
ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgot
Ci0jaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotCi1uYW1l
c3BhY2UgSW5zcGVjdG9yIHsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQ
cm90b2NvbC5oPgotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBp
bnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0Ci1AZW5kCi0KLQot
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sQ29u
ZmlndXJhdGlvbi5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2ltcG9y
dCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0
Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENv
cmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgotCi11c2luZyBuYW1l
c3BhY2UgSW5zcGVjdG9yOwotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJh
dGlvbgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7
Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5z
cGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07
Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9s
bGVyKTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19
Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotQGVuZAot
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJv
dG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMu
aCIKLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0
b3I7Ci0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5k
YXRpb24uaD4KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5o
PgotCi0KLUBjbGFzcyBUZXN0UHJvdG9jb2xUZXN0VHlwZU5lZWRpbmdDYXN0OwotQGNsYXNzIFRl
c3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxOwotQGNsYXNzIFRlc3RQcm90b2NvbFRlc3RS
ZWN1cnNpdmVPYmplY3QyOwotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9j
b2xQbGF0Zm9ybSkgewotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsLAotICAgIFRlc3RQcm90
b2NvbFBsYXRmb3JtR2VuZXJpYywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUywKLSAgICBU
ZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TLAotfTsKLQotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRl
Z2VyLCBUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzKSB7Ci0gICAgVGVzdFByb3RvY29s
VGVzdFVuY2FzdGVkQW5pbWFsc1BpZ3MsCi0gICAgVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5p
bWFsc0Nvd3MsCi0gICAgVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc0NhdHMsCi0gICAg
VGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc0hlbnMsCi19OwotCi10eXBlZGVmIE5TX0VO
VU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFscykgewotICAgIFRlc3RQ
cm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzRHVja3MsCi0gICAgVGVzdFByb3RvY29sVGVzdENhc3Rl
ZEFuaW1hbHNIZW5zLAotICAgIFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzQ3Jvd3MsCi0g
ICAgVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHNGbGFtaW5nb3MsCi19OwotCi0KLV9fYXR0
cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9j
b2xUZXN0VHlwZU5lZWRpbmdDYXN0IDogUldJUHJvdG9jb2xKU09OT2JqZWN0Ci0tIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5
bG9hZDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2Nv
bEpTT05PYmplY3QgKilqc29uT2JqZWN0OwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoU3RyaW5n
OihOU1N0cmluZyAqKXN0cmluZyBudW1iZXI6KGludCludW1iZXIgYW5pbWFsczooVGVzdFByb3Rv
Y29sVGVzdENhc3RlZEFuaW1hbHMpYW5pbWFscyBpZGVudGlmaWVyOihpbnQpaWRlbnRpZmllciB0
cmVlOihUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSAqKXRyZWU7Ci0vKiByZXF1aXJl
ZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKnN0cmluZzsKLS8qIHJl
cXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCBudW1iZXI7Ci0vKiBy
ZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBUZXN0UHJvdG9jb2xUZXN0
Q2FzdGVkQW5pbWFscyBhbmltYWxzOwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9t
aWMsIGFzc2lnbikgaW50IGlkZW50aWZpZXI7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5v
bmF0b21pYywgcmV0YWluKSBUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSAqdHJlZTsK
LUBlbmQKLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJm
YWNlIFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxIDogUldJUHJvdG9jb2xKU09OT2Jq
ZWN0Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJp
bmcgKiwgaWQ+ICopcGF5bG9hZDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2Jq
ZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OwotLyogb3B0aW9uYWwgKi8g
QHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9i
amVjdDIgKm9iajsKLUBlbmQKLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQi
KSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QyIDogUldJUHJv
dG9jb2xKU09OT2JqZWN0Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rp
b25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0
aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OwotLyog
b3B0aW9uYWwgKi8gQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgVGVzdFByb3RvY29sVGVz
dFJlY3Vyc2l2ZU9iamVjdDEgKm9iajsKLUBlbmQKLQotCi0KLQotCi0KLSNpbXBvcnQgPFdlYklu
c3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4KLQotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50
ZXJuYWwuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5n
LXJ1bnRpbWUtY2FzdHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEpT
T05PYmplY3RQcml2YXRlLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUlu
c3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLQotCi0K
LSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0j
aW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+Ci0KLW5h
bWVzcGFjZSBJbnNwZWN0b3IgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+Ci1P
cHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZh
bHVlKTsKLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFBsYXRm
b3JtIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29s
UGxhdGZvcm1BbGw6Ci0gICAgICAgIHJldHVybiAiYWxsIl9zOwotICAgIGNhc2UgVGVzdFByb3Rv
Y29sUGxhdGZvcm1HZW5lcmljOgotICAgICAgICByZXR1cm4gImdlbmVyaWMiX3M7Ci0gICAgY2Fz
ZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzoKLSAgICAgICAgcmV0dXJuICJpb3MiX3M7Ci0gICAg
Y2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOgotICAgICAgICByZXR1cm4gIm1hY29zIl9z
OwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFBs
YXRmb3JtPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBp
ZiAodmFsdWUgPT0gImFsbCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFs
bDsKLSAgICBpZiAodmFsdWUgPT0gImdlbmVyaWMiKQotICAgICAgICByZXR1cm4gVGVzdFByb3Rv
Y29sUGxhdGZvcm1HZW5lcmljOwotICAgIGlmICh2YWx1ZSA9PSAiaW9zIikKLSAgICAgICAgcmV0
dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOwotICAgIGlmICh2YWx1ZSA9PSAibWFjb3MiKQot
ICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzsKLSAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwotfQotCi0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJv
dG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewot
ICAgIGNhc2UgVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc1BpZ3M6Ci0gICAgICAgIHJl
dHVybiAiUGlncyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHND
b3dzOgotICAgICAgICByZXR1cm4gIkNvd3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xUZXN0
VW5jYXN0ZWRBbmltYWxzQ2F0czoKLSAgICAgICAgcmV0dXJuICJDYXRzIl9zOwotICAgIGNhc2Ug
VGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc0hlbnM6Ci0gICAgICAgIHJldHVybiAiSGVu
cyJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJvdG9j
b2xUZXN0VW5jYXN0ZWRBbmltYWxzPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2
YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gIlBpZ3MiKQotICAgICAgICByZXR1cm4gVGVzdFBy
b3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc1BpZ3M7Ci0gICAgaWYgKHZhbHVlID09ICJDb3dzIikK
LSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHNDb3dzOwotICAg
IGlmICh2YWx1ZSA9PSAiQ2F0cyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xUZXN0VW5j
YXN0ZWRBbmltYWxzQ2F0czsKLSAgICBpZiAodmFsdWUgPT0gIkhlbnMiKQotICAgICAgICByZXR1
cm4gVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc0hlbnM7Ci0gICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKLX0KLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2Nv
bFRlc3RDYXN0ZWRBbmltYWxzIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNh
c2UgVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHNEdWNrczoKLSAgICAgICAgcmV0dXJuICJE
dWNrcyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzSGVuczoKLSAg
ICAgICAgcmV0dXJuICJIZW5zIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sVGVzdENhc3RlZEFu
aW1hbHNDcm93czoKLSAgICAgICAgcmV0dXJuICJDcm93cyJfczsKLSAgICBjYXNlIFRlc3RQcm90
b2NvbFRlc3RDYXN0ZWRBbmltYWxzRmxhbWluZ29zOgotICAgICAgICByZXR1cm4gIkZsYW1pbmdv
cyJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJvdG9j
b2xUZXN0Q2FzdGVkQW5pbWFscz4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFs
dWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJEdWNrcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJv
dG9jb2xUZXN0Q2FzdGVkQW5pbWFsc0R1Y2tzOwotICAgIGlmICh2YWx1ZSA9PSAiSGVucyIpCi0g
ICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFsc0hlbnM7Ci0gICAgaWYg
KHZhbHVlID09ICJDcm93cyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVk
QW5pbWFsc0Nyb3dzOwotICAgIGlmICh2YWx1ZSA9PSAiRmxhbWluZ29zIikKLSAgICAgICAgcmV0
dXJuIFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzRmxhbWluZ29zOwotICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3Rv
Y29sVHlwZVBhcnNlci5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9i
amVjdFByaXZhdGUuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGludGVyZmFj
ZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFRlc3REb21haW4pCi0KLSsgKHZvaWQpX3Bh
cnNlVHlwZU5lZWRpbmdDYXN0OihUZXN0UHJvdG9jb2xUZXN0VHlwZU5lZWRpbmdDYXN0ICoqKW91
dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotKyAodm9pZClfcGFyc2VDYXN0ZWRPYmpl
Y3RJZDooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2
b2lkKV9wYXJzZVVuY2FzdGVkT2JqZWN0SWQ6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXls
b2FkOihpZClwYXlsb2FkOwotKyAodm9pZClfcGFyc2VVbmNhc3RlZEFuaW1hbHM6KE5TTnVtYmVy
ICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotKyAodm9pZClfcGFyc2VDYXN0
ZWRBbmltYWxzOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsK
LSsgKHZvaWQpX3BhcnNlUmVjdXJzaXZlT2JqZWN0MTooVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2
ZU9iamVjdDEgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9w
YXJzZVJlY3Vyc2l2ZU9iamVjdDI6KFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QyICoq
KW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotCi1AZW5kCi0KLUBpbXBsZW1lbnRh
dGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFRlc3REb21haW4pCi0KLSsgKHZvaWQp
X3BhcnNlVHlwZU5lZWRpbmdDYXN0OihUZXN0UHJvdG9jb2xUZXN0VHlwZU5lZWRpbmdDYXN0ICoq
KW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7Ci0gICAgKm91dFZh
bHVlID0gW1tUZXN0UHJvdG9jb2xUZXN0VHlwZU5lZWRpbmdDYXN0IGFsbG9jXSBpbml0V2l0aFBh
eWxvYWQ6cGF5bG9hZF07Ci19Ci0KLSsgKHZvaWQpX3BhcnNlQ2FzdGVkT2JqZWN0SWQ6KE5TTnVt
YmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNOdW1iZXIgY2xhc3NdKTsKLSAgICAqb3V0
VmFsdWUgPSAoTlNOdW1iZXIgKilwYXlsb2FkOwotfQotCi0rICh2b2lkKV9wYXJzZVVuY2FzdGVk
T2JqZWN0SWQ6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17
Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNOdW1iZXIgY2xh
c3NdKTsKLSAgICAqb3V0VmFsdWUgPSAoTlNOdW1iZXIgKilwYXlsb2FkOwotfQotCi0rICh2b2lk
KV9wYXJzZVVuY2FzdGVkQW5pbWFsczooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6
KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQs
IFtOU1N0cmluZyBjbGFzc10pOwotICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbFRlc3RVbmNhc3Rl
ZEFuaW1hbHM+IHJlc3VsdCA9IEluc3BlY3Rvcjo6ZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90
b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHM+KHBheWxvYWQpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfQkFEX0VOVU1fVkFMVUUocmVzdWx0LCBAIlVuY2FzdGVkQW5pbWFscyIpOwotICAgICpvdXRW
YWx1ZSA9IEAocmVzdWx0LnZhbHVlKCkpOwotfQotCi0rICh2b2lkKV9wYXJzZUNhc3RlZEFuaW1h
bHM6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsK
LSAgICBPcHRpb25hbDxUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFscz4gcmVzdWx0ID0gSW5z
cGVjdG9yOjpmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHM+
KHBheWxvYWQpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX0VOVU1fVkFMVUUocmVzdWx0
LCBAIkNhc3RlZEFuaW1hbHMiKTsKLSAgICAqb3V0VmFsdWUgPSBAKHJlc3VsdC52YWx1ZSgpKTsK
LX0KLQotKyAodm9pZClfcGFyc2VSZWN1cnNpdmVPYmplY3QxOihUZXN0UHJvdG9jb2xUZXN0UmVj
dXJzaXZlT2JqZWN0MSAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFz
c10pOwotICAgICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEg
YWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKLX0KLQotKyAodm9pZClfcGFyc2VSZWN1
cnNpdmVPYmplY3QyOihUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MiAqKilvdXRWYWx1
ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFE
X1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IFtb
VGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDIgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpw
YXlsb2FkXTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2Fz
dHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1w
b3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmpl
Y3RQcml2YXRlLmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3RmL0pT
T05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi1AaW1wbGVtZW50
YXRpb24gVGVzdFByb3RvY29sVGVzdFR5cGVOZWVkaW5nQ2FzdAotCi0tIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilw
YXlsb2FkCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJldHVy
biBuaWw7Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxv
YWRbQCJzdHJpbmciXSwgQCJzdHJpbmciKTsKLSAgICBzZWxmLnN0cmluZyA9IHBheWxvYWRbQCJz
dHJpbmciXTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5
bG9hZFtAIm51bWJlciJdLCBAIm51bWJlciIpOwotICAgIHNlbGYubnVtYmVyID0gW3BheWxvYWRb
QCJudW1iZXIiXSBpbnRlZ2VyVmFsdWVdOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFV
SVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiYW5pbWFscyJdLCBAImFuaW1hbHMiKTsKLSAgICBPcHRp
b25hbDxUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFscz4gYW5pbWFscyA9IGZyb21Qcm90b2Nv
bFN0cmluZzxUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFscz4ocGF5bG9hZFtAImFuaW1hbHMi
XSk7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfRU5VTV9WQUxVRShhbmltYWxzLCBAImFu
aW1hbHMiKTsKLSAgICBzZWxmLmFuaW1hbHMgPSBhbmltYWxzLnZhbHVlKCk7Ci0KLSAgICBUSFJP
V19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJpZCJdLCBAImlkIik7
Ci0gICAgc2VsZi5pZGVudGlmaWVyID0gW3BheWxvYWRbQCJpZCJdIGludGVnZXJWYWx1ZV07Ci0K
LSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJ0cmVl
Il0sIEAidHJlZSIpOwotICAgIHNlbGYudHJlZSA9IFtbVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2
ZU9iamVjdDEgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkW0AidHJlZSJdXTsKLQotICAg
IHJldHVybiBzZWxmOwotfQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6
KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9iamVjdAotewotICAgIGlmICghKHNlbGYgPSBbc3Vw
ZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmplY3QgdG9KU09OT2JqZWN0XS5nZXQoKV0pKQotICAg
ICAgICByZXR1cm4gbmlsOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aFN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcgbnVtYmVyOihpbnQpbnVtYmVyIGFu
aW1hbHM6KFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzKWFuaW1hbHMgaWRlbnRpZmllcjoo
aW50KWlkZW50aWZpZXIgdHJlZTooVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgKil0
cmVlCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJldHVybiBu
aWw7Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHN0cmluZywg
QCJzdHJpbmciKTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHRy
ZWUsIEAidHJlZSIpOwotCi0gICAgc2VsZi5zdHJpbmcgPSBzdHJpbmc7Ci0gICAgc2VsZi5udW1i
ZXIgPSBudW1iZXI7Ci0gICAgc2VsZi5hbmltYWxzID0gYW5pbWFsczsKLSAgICBzZWxmLmlkZW50
aWZpZXIgPSBpZGVudGlmaWVyOwotICAgIHNlbGYudHJlZSA9IHRyZWU7Ci0KLSAgICByZXR1cm4g
c2VsZjsKLX0KLQotLSAodm9pZClzZXRTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nCi17Ci0gICAg
W3N1cGVyIHNldFN0cmluZzpzdHJpbmcgZm9yS2V5OkAic3RyaW5nIl07Ci19Ci0KLS0gKE5TU3Ry
aW5nICopc3RyaW5nCi17Ci0gICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJzdHJpbmci
XTsKLX0KLQotLSAodm9pZClzZXROdW1iZXI6KGludCludW1iZXIKLXsKLSAgICBbc3VwZXIgc2V0
SW50ZWdlcjpudW1iZXIgZm9yS2V5OkAibnVtYmVyIl07Ci19Ci0KLS0gKGludCludW1iZXIKLXsK
LSAgICByZXR1cm4gW3N1cGVyIGludGVnZXJGb3JLZXk6QCJudW1iZXIiXTsKLX0KLQotLSAodm9p
ZClzZXRBbmltYWxzOihUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFscylhbmltYWxzCi17Ci0g
ICAgW3N1cGVyIHNldFN0cmluZzp0b1Byb3RvY29sU3RyaW5nKGFuaW1hbHMpIGZvcktleTpAImFu
aW1hbHMiXTsKLX0KLQotLSAoVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHMpYW5pbWFscwot
ewotICAgIHJldHVybiBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sVGVzdENhc3RlZEFu
aW1hbHM+KFtzdXBlciBzdHJpbmdGb3JLZXk6QCJhbmltYWxzIl0pLnZhbHVlKCk7Ci19Ci0KLS0g
KHZvaWQpc2V0SWRlbnRpZmllcjooaW50KWlkZW50aWZpZXIKLXsKLSAgICBbc3VwZXIgc2V0SW50
ZWdlcjppZGVudGlmaWVyIGZvcktleTpAImlkIl07Ci19Ci0KLS0gKGludClpZGVudGlmaWVyCi17
Ci0gICAgcmV0dXJuIFtzdXBlciBpbnRlZ2VyRm9yS2V5OkAiaWQiXTsKLX0KLQotLSAodm9pZClz
ZXRUcmVlOihUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSAqKXRyZWUKLXsKLSAgICBb
c3VwZXIgc2V0T2JqZWN0OnRyZWUgZm9yS2V5OkAidHJlZSJdOwotfQotCi0tIChUZXN0UHJvdG9j
b2xUZXN0UmVjdXJzaXZlT2JqZWN0MSAqKXRyZWUKLXsKLSAgICBSV0lQcm90b2NvbEpTT05PYmpl
Y3QgKm9iamVjdCA9IFtzdXBlciBvYmplY3RGb3JLZXk6QCJ0cmVlIl07Ci0gICAgaWYgKCFvYmpl
Y3QpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgcmV0dXJuIFtbVGVzdFByb3RvY29sVGVzdFJl
Y3Vyc2l2ZU9iamVjdDEgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDpbW3N1cGVyIG9iamVjdEZv
cktleTpAInRyZWUiXSB0b0pTT05PYmplY3RdLmdldCgpXTsKLX0KLQotQGVuZAotCi1AaW1wbGVt
ZW50YXRpb24gVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEKLQotLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+
ICopcGF5bG9hZAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICBy
ZXR1cm4gbmlsOwotCi0gICAgc2VsZi5vYmogPSBbW1Rlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVP
YmplY3QyIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZFtAIm9iaiJdXTsKLQotICAgIHJl
dHVybiBzZWxmOwotfQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJX
SVByb3RvY29sSlNPTk9iamVjdCAqKW9iamVjdAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIg
aW5pdFdpdGhKU09OT2JqZWN0OltvYmplY3QgdG9KU09OT2JqZWN0XS5nZXQoKV0pKQotICAgICAg
ICByZXR1cm4gbmlsOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpc2V0T2JqOihU
ZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MiAqKW9iagotewotICAgIFtzdXBlciBzZXRP
YmplY3Q6b2JqIGZvcktleTpAIm9iaiJdOwotfQotCi0tIChUZXN0UHJvdG9jb2xUZXN0UmVjdXJz
aXZlT2JqZWN0MiAqKW9iagotewotICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb2JqZWN0ID0g
W3N1cGVyIG9iamVjdEZvcktleTpAIm9iaiJdOwotICAgIGlmICghb2JqZWN0KQotICAgICAgICBy
ZXR1cm4gbmlsOwotICAgIHJldHVybiBbW1Rlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3Qy
IGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6W1tzdXBlciBvYmplY3RGb3JLZXk6QCJvYmoiXSB0
b0pTT05PYmplY3RdLmdldCgpXTsKLX0KLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gVGVzdFBy
b3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDIKLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5
bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZAotewot
ICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0g
ICAgc2VsZi5vYmogPSBbW1Rlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxIGFsbG9jXSBp
bml0V2l0aFBheWxvYWQ6cGF5bG9hZFtAIm9iaiJdXTsKLQotICAgIHJldHVybiBzZWxmOwotfQot
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9i
amVjdCAqKW9iamVjdAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09OT2Jq
ZWN0OltvYmplY3QgdG9KU09OT2JqZWN0XS5nZXQoKV0pKQotICAgICAgICByZXR1cm4gbmlsOwot
Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpc2V0T2JqOihUZXN0UHJvdG9jb2xUZXN0
UmVjdXJzaXZlT2JqZWN0MSAqKW9iagotewotICAgIFtzdXBlciBzZXRPYmplY3Q6b2JqIGZvcktl
eTpAIm9iaiJdOwotfQotCi0tIChUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSAqKW9i
agotewotICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb2JqZWN0ID0gW3N1cGVyIG9iamVjdEZv
cktleTpAIm9iaiJdOwotICAgIGlmICghb2JqZWN0KQotICAgICAgICByZXR1cm4gbmlsOwotICAg
IHJldHVybiBbW1Rlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxIGFsbG9jXSBpbml0V2l0
aEpTT05PYmplY3Q6W1tzdXBlciBvYmplY3RGb3JLZXk6QCJvYmoiXSB0b0pTT05PYmplY3RdLmdl
dCgpXTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9l
eHBlY3RlZC90eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0CmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBlNDMwZWRlNTA4Yi4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQv
dHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uLXJlc3VsdAorKysgL2Rldi9udWxsCkBAIC0x
LDExNjQgKzAsMCBAQAotIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5q
cwotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtd2l0aC1vcGVuLXBhcmFt
ZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotIyMj
IEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi0jaW5jbHVkZSAiVGVzdFByb3Rv
Y29sVHlwZXMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91
dGVyLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBBbHRlcm5hdGVCYWNrZW5k
RGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQ
dHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVy
ID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQotICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5k
RGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0K
LXByaXZhdGU6Ci0gICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRj
aGVyOwotfTsKLQotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSNlbmRpZiAvLyBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSMjIyBFbmQgRmlsZTogVGVz
dEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFj
a2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBl
LXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmpl
Y3RzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3Bl
Y3RvciB7Ci0KLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCi0KLQotfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05W
YWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKLSNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jZW5k
aWYKLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUg
IlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQot
Y2xhc3MgRnJvbnRlbmRSb3V0ZXI7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVu
ZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSB0eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RG
cm9udGVuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFt
ZXNwYWNlIEluc3BlY3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5k
IEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sT2JqZWN0cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlw
ZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0K
LW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0K
LS8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgotbmFtZXNwYWNlIFRlc3QgewotY2xhc3MgTm9PcGVu
UGFyYW1ldGVyczsKLWNsYXNzIE9wZW5QYXJhbWV0ZXJzOwotfSAvLyBUZXN0Ci0vLyBFbmQgb2Yg
Zm9yd2FyZCBkZWNsYXJhdGlvbnMuCi0KLQotCi0KLW5hbWVzcGFjZSBUZXN0IHsKLWNsYXNzIE5v
T3BlblBhcmFtZXRlcnMgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7Ci1wdWJsaWM6Ci0gICAg
ZW51bSB7Ci0gICAgICAgIE5vRmllbGRzU2V0ID0gMCwKLSAgICAgICAgT25lU2V0ID0gMSA8PCAw
LAotICAgICAgICBUd29TZXQgPSAxIDw8IDEsCi0gICAgICAgIEFsbEZpZWxkc1NldCA9IChPbmVT
ZXQgfCBUd29TZXQpCi0gICAgfTsKLQotICAgIHRlbXBsYXRlPGludCBTVEFURT4KLSAgICBjbGFz
cyBCdWlsZGVyIHsKLSAgICBwcml2YXRlOgotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBt
X3Jlc3VsdDsKLQotICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNU
RVA+JiBjYXN0U3RhdGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJw
cmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBCdWlsZGVyKFJlZjwvKk5vT3BlblBhcmFtZXRlcnMqL0pTT046Ok9iamVjdD4mJiBvYmpl
Y3QpCi0gICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKLSAgICAgICAgewot
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJf
Y3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZnJpZW5kIGNs
YXNzIE5vT3BlblBhcmFtZXRlcnM7Ci0gICAgcHVibGljOgotCi0gICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBPbmVTZXQ+JiBzZXRPbmUoZG91YmxlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgT25lU2V0KSwgcHJvcGVydHlfb25lX2FscmVhZHlf
c2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXREb3VibGUoIm9uZSJfcywgdmFsdWUpOwot
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxPbmVTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgVHdvU2V0PiYgc2V0VHdvKGRvdWJsZSB2YWx1ZSkKLSAgICAg
ICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFR3b1NldCksIHByb3Bl
cnR5X3R3b19hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0RG91YmxlKCJ0
d28iX3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VHdvU2V0PigpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgUmVmPE5vT3BlblBhcmFtZXRlcnM+IHJlbGVhc2UoKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQs
IHJlc3VsdF9pc19ub3RfcmVhZHkpOwotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9m
KE5vT3BlblBhcmFtZXRlcnMpID09IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7
Ci0KLSAgICAgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25SZXN1bHQgPSBtX3Jlc3VsdC5y
ZWxlYXNlTm9uTnVsbCgpOwotICAgICAgICAgICAgYXV0byByZXN1bHQgPSBXVEZNb3ZlKCpyZWlu
dGVycHJldF9jYXN0PFJlZjxOb09wZW5QYXJhbWV0ZXJzPio+KCZqc29uUmVzdWx0KSk7Ci0gICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIC8qCi0gICAg
ICogU3ludGhldGljIGNvbnN0cnVjdG9yOgotICAgICAqIFJlZjxOb09wZW5QYXJhbWV0ZXJzPiBy
ZXN1bHQgPSBOb09wZW5QYXJhbWV0ZXJzOjpjcmVhdGUoKQotICAgICAqICAgICAuc2V0T25lKC4u
LikKLSAgICAgKiAgICAgLnNldFR3byguLi4pCi0gICAgICogICAgIC5yZWxlYXNlKCk7Ci0gICAg
ICovCi0gICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCi0gICAgewotICAg
ICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7
Ci0gICAgfQotfTsKLQotY2xhc3MgT3BlblBhcmFtZXRlcnMgOiBwdWJsaWMgSlNPTjo6T2JqZWN0
IHsKLXB1YmxpYzoKLSAgICBlbnVtIHsKLSAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAotICAgICAg
ICBBbHBoYVNldCA9IDEgPDwgMCwKLSAgICAgICAgQmV0YVNldCA9IDEgPDwgMSwKLSAgICAgICAg
QWxsRmllbGRzU2V0ID0gKEFscGhhU2V0IHwgQmV0YVNldCkKLSAgICB9OwotCi0gICAgdGVtcGxh
dGU8aW50IFNUQVRFPgotICAgIGNsYXNzIEJ1aWxkZXIgewotICAgIHByaXZhdGU6Ci0gICAgICAg
IFJlZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVzdWx0OwotCi0gICAgICAgIHRlbXBsYXRlPGludCBT
VEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0
aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXIoUmVmPC8qT3BlblBhcmFtZXRlcnMq
L0pTT046Ok9iamVjdD4mJiBvYmplY3QpCi0gICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUo
b2JqZWN0KSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0g
Tm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7Ci0gICAgICAg
IH0KLSAgICAgICAgZnJpZW5kIGNsYXNzIE9wZW5QYXJhbWV0ZXJzOwotICAgIHB1YmxpYzoKLQot
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQWxwaGFTZXQ+JiBzZXRBbHBoYShkb3VibGUgdmFsdWUp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBBbHBoYVNl
dCksIHByb3BlcnR5X2FscGhhX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXREb3VibGUoImFscGhhIl9zLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PEFscGhhU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IEJldGFT
ZXQ+JiBzZXRCZXRhKGRvdWJsZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoIShTVEFURSAmIEJldGFTZXQpLCBwcm9wZXJ0eV9iZXRhX2FscmVhZHlfc2V0KTsK
LSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXREb3VibGUoImJldGEiX3MsIHZhbHVlKTsKLSAgICAg
ICAgICAgIHJldHVybiBjYXN0U3RhdGU8QmV0YVNldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAg
IFJlZjxPcGVuUGFyYW1ldGVycz4gcmVsZWFzZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7
Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoT3BlblBhcmFtZXRlcnMpID09IHNp
emVvZihKU09OOjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7Ci0KLSAgICAgICAgICAgIFJlZjxKU09O
OjpPYmplY3Q+IGpzb25SZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOwotICAgICAg
ICAgICAgYXV0byByZXN1bHQgPSBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxPcGVuUGFy
YW1ldGVycz4qPigmanNvblJlc3VsdCkpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAg
ICAgICAgfQotICAgIH07Ci0KLSAgICAvKgotICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoK
LSAgICAgKiBSZWY8T3BlblBhcmFtZXRlcnM+IHJlc3VsdCA9IE9wZW5QYXJhbWV0ZXJzOjpjcmVh
dGUoKQotICAgICAqICAgICAuc2V0QWxwaGEoLi4uKQotICAgICAqICAgICAuc2V0QmV0YSguLi4p
Ci0gICAgICogICAgIC5yZWxlYXNlKCk7Ci0gICAgICovCi0gICAgc3RhdGljIEJ1aWxkZXI8Tm9G
aWVsZHNTZXQ+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxk
c1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7Ci0gICAgfQotCi0gICAgLy8gUHJvcGVydHkg
bmFtZXMgZm9yIHR5cGUgZ2VuZXJhdGVkIGFzIG9wZW4uCi0gICAgTm9uZSBzdGF0aWMgY29uc3Qg
Y2hhciogQWxwaGE7Ci19OwotCi19IC8vIFRlc3QKLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3Rv
Y29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xPYmplY3RzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVy
cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0KLSNpbmNs
dWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5h
bWVzcGFjZSBJbnNwZWN0b3IgewotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi1jb25zdCBjaGFy
KiBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpPcGVuUGFyYW1ldGVyczo6QWxwaGEgPSAiYWxw
aGEiOwotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2luY2x1ZGUgPHd0
Zi9SZXRhaW5QdHIuaD4KLQotCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLX0gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNw
YXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hl
cnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXdpdGgtb3Blbi1w
YXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0
Y2hlcnMuaCIKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW5jbHVkZSAi
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMu
aD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgot
Ci0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rv
ci9UZXN0UHJvdG9jb2wuaD4KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQi
KSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAotQGVu
ZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24uaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNp
bXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotI2ltcG9ydCA8SmF2YVNj
cmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KLSNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLQotdXNpbmcg
bmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZp
Z3VyYXRpb24KLXsKLSAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9s
bGVyOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJs
ZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGlu
aXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29u
dHJvbGxlcik7Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxm
OwotfQotCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLUBl
bmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFBy
b3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
LmgiCi0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVj
dG9yOwotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQot
Ci0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSB0eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0
aW9uLmg+Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4K
LQotCi1AY2xhc3MgVGVzdFByb3RvY29sVGVzdE5vT3BlblBhcmFtZXRlcnM7Ci1AY2xhc3MgVGVz
dFByb3RvY29sVGVzdE9wZW5QYXJhbWV0ZXJzOwotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2Vy
LCBUZXN0UHJvdG9jb2xQbGF0Zm9ybSkgewotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsLAot
ICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9y
bUlPUywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TLAotfTsKLQotCi0KLQotX19hdHRy
aWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2Nv
bFRlc3ROb09wZW5QYXJhbWV0ZXJzIDogUldJUHJvdG9jb2xKU09OT2JqZWN0Ci0tIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5
bG9hZDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2Nv
bEpTT05PYmplY3QgKilqc29uT2JqZWN0OwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoT25lOihk
b3VibGUpb25lIHR3bzooZG91YmxlKXR3bzsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9u
YXRvbWljLCBhc3NpZ24pIGRvdWJsZSBvbmU7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5v
bmF0b21pYywgYXNzaWduKSBkb3VibGUgdHdvOwotQGVuZAotCi1fX2F0dHJpYnV0ZV9fKCh2aXNp
YmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sVGVzdE9wZW5QYXJh
bWV0ZXJzIDogUldJUHJvdG9jb2xKU09OT2JqZWN0Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQ
YXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKLS0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilq
c29uT2JqZWN0OwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQWxwaGE6KGRvdWJsZSlhbHBoYSBi
ZXRhOihkb3VibGUpYmV0YTsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBh
c3NpZ24pIGRvdWJsZSBhbHBoYTsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWlj
LCBhc3NpZ24pIGRvdWJsZSBiZXRhOwotQGVuZAotCi0KLQotCi0KLQotI2ltcG9ydCA8V2ViSW5z
cGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgotCi0jIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRl
cm5hbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRoLW9wZW4t
cGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9i
amVjdFByaXZhdGUuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVj
dG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotCi0KLQotIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQg
PFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KLQotbmFtZXNwYWNl
IEluc3BlY3RvciB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KLU9wdGlvbmFs
PE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOwot
Ci1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sUGxhdGZvcm0gdmFs
dWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9y
bUFsbDoKLSAgICAgICAgcmV0dXJuICJhbGwiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0
Zm9ybUdlbmVyaWM6Ci0gICAgICAgIHJldHVybiAiZ2VuZXJpYyJfczsKLSAgICBjYXNlIFRlc3RQ
cm90b2NvbFBsYXRmb3JtSU9TOgotICAgICAgICByZXR1cm4gImlvcyJfczsKLSAgICBjYXNlIFRl
c3RQcm90b2NvbFBsYXRmb3JtTWFjT1M6Ci0gICAgICAgIHJldHVybiAibWFjb3MiX3M7Ci0gICAg
fQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sUGxhdGZvcm0+
IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1
ZSA9PSAiYWxsIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOwotICAg
IGlmICh2YWx1ZSA9PSAiZ2VuZXJpYyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0
Zm9ybUdlbmVyaWM7Ci0gICAgaWYgKHZhbHVlID09ICJpb3MiKQotICAgICAgICByZXR1cm4gVGVz
dFByb3RvY29sUGxhdGZvcm1JT1M7Ci0gICAgaWYgKHZhbHVlID09ICJtYWNvcyIpCi0gICAgICAg
IHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOwotICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7Ci19Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
dHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5o
IgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQ
YXJzZXIuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2
YXRlLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbnRlcmZhY2UgVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zIChUZXN0RG9tYWluKQotCi0rICh2b2lkKV9wYXJzZU5vT3Bl
blBhcmFtZXRlcnM6KFRlc3RQcm90b2NvbFRlc3ROb09wZW5QYXJhbWV0ZXJzICoqKW91dFZhbHVl
IGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotKyAodm9pZClfcGFyc2VPcGVuUGFyYW1ldGVyczoo
VGVzdFByb3RvY29sVGVzdE9wZW5QYXJhbWV0ZXJzICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihp
ZClwYXlsb2FkOwotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMgKFRlc3REb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlTm9PcGVuUGFyYW1ldGVyczoo
VGVzdFByb3RvY29sVGVzdE5vT3BlblBhcmFtZXRlcnMgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6
KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQs
IFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbFRl
c3ROb09wZW5QYXJhbWV0ZXJzIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07Ci19Ci0K
LSsgKHZvaWQpX3BhcnNlT3BlblBhcmFtZXRlcnM6KFRlc3RQcm90b2NvbFRlc3RPcGVuUGFyYW1l
dGVycyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOwotICAg
ICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sVGVzdE9wZW5QYXJhbWV0ZXJzIGFsbG9jXSBpbml0
V2l0aFBheWxvYWQ6cGF5bG9hZF07Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
VHlwZXMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXdpdGgtb3Bl
bi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9j
b2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbXBv
cnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQot
QGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFRlc3ROb09wZW5QYXJhbWV0ZXJzCi0KLS0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5n
ICosIGlkPiAqKXBheWxvYWQKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAg
ICAgICAgcmV0dXJuIG5pbDsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJP
UEVSVFkocGF5bG9hZFtAIm9uZSJdLCBAIm9uZSIpOwotICAgIHNlbGYub25lID0gW3BheWxvYWRb
QCJvbmUiXSBkb3VibGVWYWx1ZV07Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVE
X1BST1BFUlRZKHBheWxvYWRbQCJ0d28iXSwgQCJ0d28iKTsKLSAgICBzZWxmLnR3byA9IFtwYXls
b2FkW0AidHdvIl0gZG91YmxlVmFsdWVdOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0tIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICop
b2JqZWN0Ci17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEpTT05PYmplY3Q6W29i
amVjdCB0b0pTT05PYmplY3RdLmdldCgpXSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBy
ZXR1cm4gc2VsZjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoT25lOihkb3VibGUpb25l
IHR3bzooZG91YmxlKXR3bwotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAg
ICAgICByZXR1cm4gbmlsOwotCi0gICAgc2VsZi5vbmUgPSBvbmU7Ci0gICAgc2VsZi50d28gPSB0
d287Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClzZXRPbmU6KGRvdWJsZSlvbmUK
LXsKLSAgICBbc3VwZXIgc2V0RG91YmxlOm9uZSBmb3JLZXk6QCJvbmUiXTsKLX0KLQotLSAoZG91
YmxlKW9uZQotewotICAgIHJldHVybiBbc3VwZXIgZG91YmxlRm9yS2V5OkAib25lIl07Ci19Ci0K
LS0gKHZvaWQpc2V0VHdvOihkb3VibGUpdHdvCi17Ci0gICAgW3N1cGVyIHNldERvdWJsZTp0d28g
Zm9yS2V5OkAidHdvIl07Ci19Ci0KLS0gKGRvdWJsZSl0d28KLXsKLSAgICByZXR1cm4gW3N1cGVy
IGRvdWJsZUZvcktleTpAInR3byJdOwotfQotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0
UHJvdG9jb2xUZXN0T3BlblBhcmFtZXRlcnMKLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5
bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZAotewot
ICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0g
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiYWxwaGEi
XSwgQCJhbHBoYSIpOwotICAgIHNlbGYuYWxwaGEgPSBbcGF5bG9hZFtAImFscGhhIl0gZG91Ymxl
VmFsdWVdOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXls
b2FkW0AiYmV0YSJdLCBAImJldGEiKTsKLSAgICBzZWxmLmJldGEgPSBbcGF5bG9hZFtAImJldGEi
XSBkb3VibGVWYWx1ZV07Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLS0gKGluc3RhbmNldHlwZSlp
bml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilvYmplY3QKLXsK
LSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoSlNPTk9iamVjdDpbb2JqZWN0IHRvSlNP
Tk9iamVjdF0uZ2V0KCldKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIHJldHVybiBzZWxm
OwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhBbHBoYTooZG91YmxlKWFscGhhIGJldGE6
KGRvdWJsZSliZXRhCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAg
IHJldHVybiBuaWw7Ci0KLSAgICBzZWxmLmFscGhhID0gYWxwaGE7Ci0gICAgc2VsZi5iZXRhID0g
YmV0YTsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKXNldEFscGhhOihkb3VibGUp
YWxwaGEKLXsKLSAgICBbc3VwZXIgc2V0RG91YmxlOmFscGhhIGZvcktleTpAImFscGhhIl07Ci19
Ci0KLS0gKGRvdWJsZSlhbHBoYQotewotICAgIHJldHVybiBbc3VwZXIgZG91YmxlRm9yS2V5OkAi
YWxwaGEiXTsKLX0KLQotLSAodm9pZClzZXRCZXRhOihkb3VibGUpYmV0YQotewotICAgIFtzdXBl
ciBzZXREb3VibGU6YmV0YSBmb3JLZXk6QCJiZXRhIl07Ci19Ci0KLS0gKGRvdWJsZSliZXRhCi17
Ci0gICAgcmV0dXJuIFtzdXBlciBkb3VibGVGb3JLZXk6QCJiZXRhIl07Ci19Ci0KLUBlbmQKLQot
Ci0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC92
ZXJzaW9uLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvdmVyc2lvbi5qc29uLXJlc3VsdApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggZDRlODdkYzQ3MzkuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVk
L3ZlcnNpb24uanNvbi1yZXN1bHQKKysrIC9kZXYvbnVsbApAQCAtMSw4ODAgKzAsMCBAQAotIyMj
IEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHZlcnNpb24uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0vLyBWZXJzaW9uRG9tYWluCi1JbnNwZWN0b3JCYWNrZW5kLnJl
Z2lzdGVyRG9tYWluKCJWZXJzaW9uRG9tYWluIiwgbnVsbCk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJl
Z2lzdGVyVmVyc2lvbigiVmVyc2lvbkRvbWFpbiIsIDQyKTsKLUluc3BlY3RvckJhY2tlbmQuYWN0
aXZhdGVEb21haW4oIlZlcnNpb25Eb21haW4iLCBudWxsKTsKLSMjIyBFbmQgRmlsZTogSW5zcGVj
dG9yQmFja2VuZENvbW1hbmRzLmpzCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJz
aW9uLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3By
YWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
LQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQot
Y2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZvaWQgc2V0
QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIp
IHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KLSAgICBCYWNr
ZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tl
bmREaXNwYXRjaGVyLmdldCgpOyB9Ci1wcml2YXRlOgotICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0
Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKLX07Ci0KLQotCi0KLX0gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgotCi0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCi0jIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lvbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29s
T2JqZWN0cy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJ
bnNwZWN0b3IgewotCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQotCi0KLX0gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgK
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lvbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJU
ZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5j
bHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jaW5jbHVk
ZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgotI2VuZGlmCi0KLW5hbWVzcGFj
ZSBJbnNwZWN0b3IgewotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQg
RmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RG
cm9udGVuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB2
ZXJzaW9uLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVk
ZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQot
bmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEZyb250ZW5kUm91dGVyOwotCi19IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMu
aAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lvbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQot
IyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHZlcnNpb24uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclBy
b3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotCi1uYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKLQotCi0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLS8vIFZlcnNpb25zLgot
bmFtZXNwYWNlIFZlcnNpb25Eb21haW4gewotc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBWRVJT
SU9OID0gNDI7Ci19IC8vIFZlcnNpb25Eb21haW4KLS8vIEVuZCBvZiB2ZXJzaW9ucy4KLQotCi0K
LQotCi0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIHZlcnNpb24uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0
cy5oIgotCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotbmFtZXNwYWNlIFByb3RvY29sIHsK
LQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHZlcnNpb24uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJu
YXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi0K
LQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0K
LSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHZlcnNpb24uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sSW50
ZXJuYWwuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbmNs
dWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERp
c3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9u
LmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8V2ViSW5zcGVj
dG9yL1Rlc3RQcm90b2NvbC5oPgotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVs
dCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0Ci1A
ZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5o
IgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2ltcG9ydCAiVGVzdFByb3Rv
Y29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5h
dGVEaXNwYXRjaGFibGVBZ2VudC5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFi
bGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVj
dG9yOwotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgotewotICAg
IEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci19Ci0KLS0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJv
bGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFz
ZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBf
Y29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQp
ZGVhbGxvYwotewotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIHZlcnNpb24uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0K
LXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xFdmVudERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHZlcnNpb24uanNvbgotLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0Zv
dW5kYXRpb24uaD4KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVj
dC5oPgotCi0KLQotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xQbGF0
Zm9ybSkgewotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsLAotICAgIFRlc3RQcm90b2NvbFBs
YXRmb3JtR2VuZXJpYywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUywKLSAgICBUZXN0UHJv
dG9jb2xQbGF0Zm9ybU1hY09TLAotfTsKLQotCi0KLQotCi0KLQotCi0KLQotI2ltcG9ydCA8V2Vi
SW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgotCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJ
bnRlcm5hbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lvbi5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRl
c3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIK
LSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5o
PgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xJbnRlcm5hbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHZlcnNpb24uanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJU
ZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29u
dmVyc2lvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IE9iakNFbnVtVHlwZT4KLU9wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5n
KGNvbnN0IFN0cmluZyYgdmFsdWUpOwotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmco
VGVzdFByb3RvY29sUGxhdGZvcm0gdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAg
Y2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDoKLSAgICAgICAgcmV0dXJuICJhbGwiX3M7Ci0g
ICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM6Ci0gICAgICAgIHJldHVybiAiZ2Vu
ZXJpYyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOgotICAgICAgICByZXR1
cm4gImlvcyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M6Ci0gICAgICAg
IHJldHVybiAibWFjb3MiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9u
YWw8VGVzdFByb3RvY29sUGxhdGZvcm0+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcm
IHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiYWxsIikKLSAgICAgICAgcmV0dXJuIFRlc3RQ
cm90b2NvbFBsYXRmb3JtQWxsOwotICAgIGlmICh2YWx1ZSA9PSAiZ2VuZXJpYyIpCi0gICAgICAg
IHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM7Ci0gICAgaWYgKHZhbHVlID09ICJp
b3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1JT1M7Ci0gICAgaWYgKHZh
bHVlID09ICJtYWNvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09T
OwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
LmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlw
ZVBhcnNlci5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFBy
aXZhdGUuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0KLQotCi0KLSMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xUeXBlcy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHZlcnNpb24uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpT
T05PYmplY3RQcml2YXRlLmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8
d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWNvbW1hbmQt
dGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbiBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tY29t
bWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNmRmOWU0YmQ5Yy4uMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFp
bC1vbi1jb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpz
b24KKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLVsKLXsKLSAgICAiZG9tYWluIjogIkRv
bWFpbiIsCi0gICAgImRlYnVnZ2FibGVUeXBlcyI6IFsiamF2YXNjcmlwdCJdLAotICAgICJ0YXJn
ZXRUeXBlcyI6IFsid29ya2VyIl0sCi0gICAgImNvbW1hbmRzIjogW3sibmFtZSI6ICJDb21tYW5k
In1dLAotICAgICJldmVudHMiOiBbeyJuYW1lIjogIkV2ZW50In1dCi19Ci1dCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9m
YWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlwZXMtdHlwZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1jb21tYW5kLXRhcmdl
dFR5cGVzLXR5cGUuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjQwNTlmODRi
Y2YuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tY29tbWFuZC10YXJnZXRUeXBlcy10eXBlLmpzb24K
KysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIkRvbWFpbiIs
Ci0gICAgImNvbW1hbmRzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJQYWdl
T25seSIsCi0gICAgICAgICAgICAidGFyZ2V0VHlwZXMiOiAicGFnZWUiCi0gICAgICAgIH0KLSAg
ICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlwZXMtdmFsdWUuanNvbiBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2Zh
aWwtb24tY29tbWFuZC10YXJnZXRUeXBlcy12YWx1ZS5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA1MDIwNDQ3MmVjOC4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1jb21tYW5kLXRh
cmdldFR5cGVzLXZhbHVlLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLXsKLSAg
ICAiZG9tYWluIjogIkRvbWFpbiIsCi0gICAgImNvbW1hbmRzIjogWwotICAgICAgICB7Ci0gICAg
ICAgICAgICAibmFtZSI6ICJQYWdlT25seSIsCi0gICAgICAgICAgICAidGFyZ2V0VHlwZXMiOiBb
InBhZ2VlIl0KLSAgICAgICAgfQotICAgIF0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tY29tbWFuZC13
aXRoLWludmFsaWQtcGxhdGZvcm0uanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tY29tbWFuZC13aXRoLWludmFsaWQtcGxh
dGZvcm0uanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTE4MGNhZTliZmYuLjAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9nZW5lcmljL2ZhaWwtb24tY29tbWFuZC13aXRoLWludmFsaWQtcGxhdGZvcm0uanNvbgor
KysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIk92ZXJsYXki
LAotICAgICJjb21tYW5kcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAicHJv
Y2Vzc1BvaW50cyIsCi0gICAgICAgICAgICAicGxhdGZvcm0iOiAiaW52YWxpZCIsCi0gICAgICAg
ICAgICAicGFyYW1ldGVycyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBvaW50MSIs
ICJ0eXBlIjogIm51bWJlciIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBvaW50MiIs
ICJ0eXBlIjogIm51bWJlciIgfQotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJyZXR1cm5z
IjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicmVzdWx0IiwgInR5cGUiOiAic3RyaW5n
IiB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9u
LWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMtdHlwZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kb21haW4tZGVidWdnYWJs
ZVR5cGVzLXR5cGUuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTc0OGY0MjM0
NzMuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZG9tYWluLWRlYnVnZ2FibGVUeXBlcy10eXBlLmpz
b24KKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIldlYk9u
bHkiLAotICAgICJkZWJ1Z2dhYmxlVHlwZXMiOiAid2ViYiIsCi0gICAgImNvbW1hbmRzIjogWwot
ICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJlbmFibGUiCi0gICAgICAgIH0KLSAgICBd
Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMtdmFsdWUuanNvbiBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2Zh
aWwtb24tZG9tYWluLWRlYnVnZ2FibGVUeXBlcy12YWx1ZS5qc29uCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBiMjUyZGRiZDgzZC4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kb21haW4t
ZGVidWdnYWJsZVR5cGVzLXZhbHVlLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAK
LXsKLSAgICAiZG9tYWluIjogIldlYk9ubHkiLAotICAgICJkZWJ1Z2dhYmxlVHlwZXMiOiBbIndl
YmIiXSwKLSAgICAiY29tbWFuZHMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjog
ImVuYWJsZSIKLSAgICAgICAgfQotICAgIF0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZG9tYWluLXRh
cmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24gYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWRvbWFp
bi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YWEwMjgwNDY1Ny4uMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1v
bi1kb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgor
KysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotWwotewotICAgICJkb21haW4iOiAiRG9tYWlu
IiwKLSAgICAiZGVidWdnYWJsZVR5cGVzIjogWyJqYXZhc2NyaXB0Il0sCi0gICAgImNvbW1hbmRz
IjogW3sibmFtZSI6ICJDb21tYW5kIiwgInRhcmdldFR5cGVzIjogWyJ3b3JrZXIiXX1dLAotICAg
ICJldmVudHMiOiBbeyJuYW1lIjogIkV2ZW50In1dCi19Ci1dCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWRv
bWFpbi10YXJnZXRUeXBlcy10eXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWRvbWFpbi10YXJnZXRUeXBlcy10eXBl
Lmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4MjIyNjc0MTQ2Li4wMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJpYy9mYWlsLW9uLWRvbWFpbi10YXJnZXRUeXBlcy10eXBlLmpzb24KKysrIC9kZXYvbnVs
bApAQCAtMSw5ICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIlBhZ2VPbmx5IiwKLSAgICAidGFy
Z2V0VHlwZXMiOiAicGFnZWUiLAotICAgICJjb21tYW5kcyI6IFsKLSAgICAgICAgewotICAgICAg
ICAgICAgIm5hbWUiOiAiZW5hYmxlIgotICAgICAgICB9Ci0gICAgXQotfQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFp
bC1vbi1kb21haW4tdGFyZ2V0VHlwZXMtdmFsdWUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZG9tYWluLXRhcmdldFR5
cGVzLXZhbHVlLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3YjEwZDdmMTU0
Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWRvbWFpbi10YXJnZXRUeXBlcy12YWx1ZS5qc29uCisr
KyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi17Ci0gICAgImRvbWFpbiI6ICJQYWdlT25seSIs
Ci0gICAgInRhcmdldFR5cGVzIjogWyJwYWdlZSJdLAotICAgICJjb21tYW5kcyI6IFsKLSAgICAg
ICAgewotICAgICAgICAgICAgIm5hbWUiOiAiZW5hYmxlIgotICAgICAgICB9Ci0gICAgXQotfQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1jYWxsLXBhcmFtZXRlci1uYW1lcy5q
c29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVy
aWMvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1jYWxsLXBhcmFtZXRlci1uYW1lcy5qc29uCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYWI3NmNhNjI3OS4uMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMv
ZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1jYWxsLXBhcmFtZXRlci1uYW1lcy5qc29uCisrKyAv
ZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotewotICAgICJkb21haW4iOiAiT3ZlcmxheSIsCi0g
ICAgImNvbW1hbmRzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJwcm9jZXNz
UG9pbnRzIiwKLSAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwotICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAicG9pbnQiLCAidHlwZSI6ICJudW1iZXIiIH0sCi0gICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJwb2ludCIsICJ0eXBlIjogIm51bWJlciIgfQotICAgICAgICAgICAgXSwKLSAgICAg
ICAgICAgICJyZXR1cm5zIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicmVzdWx0MSIs
ICJ0eXBlIjogInN0cmluZyIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInJlc3VsdDIi
LCAidHlwZSI6ICJzdHJpbmciIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfQotICAgIF0KLX0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9nZW5lcmljL2ZhaWwtb24tZHVwbGljYXRlLWNvbW1hbmQtcmV0dXJuLXBhcmFtZXRlci1uYW1l
cy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1yZXR1cm4tcGFyYW1ldGVyLW5hbWVzLmpz
b24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4YmIxNWMwNGI2Li4wMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2Vu
ZXJpYy9mYWlsLW9uLWR1cGxpY2F0ZS1jb21tYW5kLXJldHVybi1wYXJhbWV0ZXItbmFtZXMuanNv
bgorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIk92ZXJs
YXkiLAotICAgICJjb21tYW5kcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAi
cHJvY2Vzc1BvaW50cyIsCi0gICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKLSAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInBvaW50MSIsICJ0eXBlIjogIm51bWJlciIgfSwKLSAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInBvaW50MiIsICJ0eXBlIjogIm51bWJlciIgfQotICAgICAgICAgICAg
XSwKLSAgICAgICAgICAgICJyZXR1cm5zIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
cmVzdWx0IiwgInR5cGUiOiAic3RyaW5nIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
cmVzdWx0IiwgInR5cGUiOiAic3RyaW5nIiB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0KLSAg
ICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWR1cGxpY2F0ZS1ldmVudC1wYXJhbWV0ZXItbmFtZXMu
anNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmljL2ZhaWwtb24tZHVwbGljYXRlLWV2ZW50LXBhcmFtZXRlci1uYW1lcy5qc29uCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkM2QzYjNjYzY0Mi4uMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1v
bi1kdXBsaWNhdGUtZXZlbnQtcGFyYW1ldGVyLW5hbWVzLmpzb24KKysrIC9kZXYvbnVsbApAQCAt
MSwxMiArMCwwIEBACi17Ci0gICAgImRvbWFpbiI6ICJPdmVybGF5IiwKLSAgICAiZXZlbnRzIjog
WwotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJwcm9jZXNzZWRQb2ludHMiLAotICAg
ICAgICAgICAgInBhcmFtZXRlcnMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwb2lu
dCIsICJ0eXBlIjogIm51bWJlciIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBvaW50
IiwgInR5cGUiOiAibnVtYmVyIiB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0KLSAgICBdCi19
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZ2VuZXJpYy9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLWRlY2xhcmF0aW9ucy5qc29uIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1v
bi1kdXBsaWNhdGUtdHlwZS1kZWNsYXJhdGlvbnMuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNzAyZmM2YTMyNzAuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZHVwbGljYXRlLXR5
cGUtZGVjbGFyYXRpb25zLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi17Ci0g
ICAgImRvbWFpbiI6ICJSdW50aW1lIiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAg
ICAgICAgICJpZCI6ICJSZW1vdGVPYmplY3RJZCIsCi0gICAgICAgICAgICAidHlwZSI6ICJzdHJp
bmciLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBvYmplY3QgaWRlbnRpZmll
ci4iCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJSZW1vdGVPYmpl
Y3RJZCIsCi0gICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAotICAgICAgICAgICAgImRlc2Ny
aXB0aW9uIjogIlVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4iCi0gICAgICAgIH0KLSAgICBdCi19
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZ2VuZXJpYy9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLW1lbWJlci1uYW1lcy5qc29uIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1v
bi1kdXBsaWNhdGUtdHlwZS1tZW1iZXItbmFtZXMuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggYWViYWNlZThiMjMuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZHVwbGljYXRlLXR5
cGUtbWVtYmVyLW5hbWVzLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi1bCi17
Ci0gICAgImRvbWFpbiI6ICJPdmVybGF5VHlwZXMiLAotICAgICJ0eXBlcyI6IFsKLSAgICAgICAg
ewotICAgICAgICAgICAgImlkIjogIlBvaW50IiwKLSAgICAgICAgICAgICJ0eXBlIjogIm9iamVj
dCIsCi0gICAgICAgICAgICAicHJvcGVydGllcyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1l
IjogIngiLCAidHlwZSI6ICJpbnRlZ2VyIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
eCIsICJ0eXBlIjogImludGVnZXIiIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfQotICAgIF0K
LX0KLV0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZW51bS13aXRoLW5vLXZhbHVlcy5qc29uIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1l
bnVtLXdpdGgtbm8tdmFsdWVzLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIz
MmE3YzMyNDlhLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWVudW0td2l0aC1uby12YWx1ZXMuanNv
bgorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIkRhdGFi
YXNlIiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJQcmlt
YXJ5Q29sb3JzIiwKLSAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCi0gICAgICAgICAgICAi
ZW51bSI6IFtdCi0gICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWV2ZW50LXRh
cmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24gYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWV2ZW50
LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxMzJjZTA4ODI4Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9u
LWV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKysr
IC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLVsKLXsKLSAgICAiZG9tYWluIjogIkRvbWFpbiIs
Ci0gICAgImRlYnVnZ2FibGVUeXBlcyI6IFsiamF2YXNjcmlwdCJdLAotICAgICJjb21tYW5kcyI6
IFt7Im5hbWUiOiAiQ29tbWFuZCJ9XSwKLSAgICAiZXZlbnRzIjogW3sibmFtZSI6ICJFdmVudCIs
ICJ0YXJnZXRUeXBlcyI6IFsid29ya2VyIl19XQotfQotXQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1ldmVu
dC10YXJnZXRUeXBlcy10eXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGVzLXR5cGUuanNv
bgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTU0ZWQxZjVjNmIuLjAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmljL2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlwZXMtdHlwZS5qc29uCisrKyAvZGV2L251bGwKQEAg
LTEsOSArMCwwIEBACi17Ci0gICAgImRvbWFpbiI6ICJEb21haW4iLAotICAgICJldmVudHMiOiBb
Ci0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogIlBhZ2VPbmx5IiwKLSAgICAgICAgICAg
ICJ0YXJnZXRUeXBlcyI6ICJwYWdlZSIKLSAgICAgICAgfQotICAgIF0KLX0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2Zh
aWwtb24tZXZlbnQtdGFyZ2V0VHlwZXMtdmFsdWUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlw
ZXMtdmFsdWUuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTg4NGJmZDdhNmIu
LjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlwZXMtdmFsdWUuanNvbgorKysg
L2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotewotICAgICJkb21haW4iOiAiRG9tYWluIiwKLSAg
ICAiZXZlbnRzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJQYWdlT25seSIs
Ci0gICAgICAgICAgICAidGFyZ2V0VHlwZXMiOiBbInBhZ2VlIl0KLSAgICAgICAgfQotICAgIF0K
LX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9nZW5lcmljL2ZhaWwtb24tbnVtYmVyLXR5cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1mbGFn
Lmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2Vu
ZXJpYy9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29uCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MzA4ZGI5OTJkNi4uMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMv
ZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbgorKysgL2Rl
di9udWxsCkBAIC0xLDE4ICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKLSAg
ICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJEYXRhYmFzZUlkIiwK
LSAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24i
OiAiVW5pcXVlIGlkZW50aWZpZXIgb2YgRGF0YWJhc2Ugb2JqZWN0LiIKLSAgICAgICAgfQotICAg
IF0sCi0gICAgImV2ZW50cyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiZGlk
RXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyIsCi0gICAgICAgICAgICAicGFyYW1ldGVycyI6IFsK
LSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAic3RyaW5n
IiwgIm9wdGlvbmFsIjogMCB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0KLSAgICBdCi19CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJpYy9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29uIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFp
bC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNvbgpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggYWZlYTU1NWVjNGYuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tbnVt
YmVyLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwx
NiArMCwwIEBACi1bCi17Ci0gICAgImRvbWFpbiI6ICJEYXRhYmFzZSIsCi0gICAgInR5cGVzIjog
WwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiRXJyb3IiLAotICAgICAgICAgICAgInR5
cGUiOiAib2JqZWN0IiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJEYXRhYmFzZSBlcnJv
ci4iLAotICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJtZXNzYWdlIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIG1l
c3NhZ2UuIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29kZSIsICJ0eXBlIjogImlu
dGVnZXIiLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgY29kZS4iLCAib3B0aW9uYWwiOiAwIH0KLSAg
ICAgICAgICAgIF0KLSAgICAgICAgfQotICAgIF0KLX0KLV0KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tc3Ry
aW5nLXR5cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLXN0cmluZy10eXBl
ZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA0MDEyYzc5YjZiMy4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1zdHJpbmctdHlwZWQtb3B0
aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAK
LXsKLSAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAgIHsK
LSAgICAgICAgICAgICJpZCI6ICJEYXRhYmFzZUlkIiwKLSAgICAgICAgICAgICJ0eXBlIjogInN0
cmluZyIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIGlkZW50aWZpZXIgb2Yg
RGF0YWJhc2Ugb2JqZWN0LiIKLSAgICAgICAgfQotICAgIF0sCi0gICAgImV2ZW50cyI6IFsKLSAg
ICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVy
cyIsCi0gICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1l
IjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogInRydWUiIH0K
LSAgICAgICAgICAgIF0KLSAgICAgICAgfQotICAgIF0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tc3Ry
aW5nLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLXN0cmluZy10eXBlZC1v
cHRpb25hbC10eXBlLW1lbWJlci5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBj
YTNlZjI4YThmOC4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1zdHJpbmctdHlwZWQtb3B0aW9uYWwt
dHlwZS1tZW1iZXIuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLVsKLXsKLSAg
ICAiZG9tYWluIjogIkRhdGFiYXNlIiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAg
ICAgICAgICJpZCI6ICJFcnJvciIsCi0gICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAotICAg
ICAgICAgICAgImRlc2NyaXB0aW9uIjogIkRhdGFiYXNlIGVycm9yLiIsCi0gICAgICAgICAgICAi
cHJvcGVydGllcyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm1lc3NhZ2UiLCAidHlw
ZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgbWVzc2FnZS4iIH0sCi0gICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJjb2RlIiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlv
biI6ICJFcnJvciBjb2RlLiIsICJvcHRpb25hbCI6ICJmYWxzZSIgfQotICAgICAgICAgICAgXQot
ICAgICAgICB9Ci0gICAgXQotfQotXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi10eXBlLWRlY2xhcmF0aW9u
LXVzaW5nLXR5cGUtcmVmZXJlbmNlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLXR5cGUtZGVjbGFyYXRpb24tdXNpbmct
dHlwZS1yZWZlcmVuY2UuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTliNzU5
MGNjYzYuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tdHlwZS1kZWNsYXJhdGlvbi11c2luZy10eXBl
LXJlZmVyZW5jZS5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotWwotewotICAg
ICJkb21haW4iOiAiUnVudGltZSIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7Ci0gICAgICAg
ICAgICAiaWQiOiAiUmVtb3RlT2JqZWN0SWQiLAotICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0
IiwKLSAgICAgICAgICAgICIkcmVmIjogIlNvbWVUeXBlIiwKLSAgICAgICAgICAgICJkZXNjcmlw
dGlvbiI6ICJVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIuIgotICAgICAgICB9Ci0gICAgXQotfQot
XQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2dlbmVyaWMvZmFpbC1vbi10eXBlLXJlZmVyZW5jZS1hcy1wcmltaXRpdmUtdHlwZS5qc29u
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMv
ZmFpbC1vbi10eXBlLXJlZmVyZW5jZS1hcy1wcmltaXRpdmUtdHlwZS5qc29uCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA4YzgzYmJmY2U0MS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi10
eXBlLXJlZmVyZW5jZS1hcy1wcmltaXRpdmUtdHlwZS5qc29uCisrKyAvZGV2L251bGwKQEAgLTEs
MTggKzAsMCBAQAotewotICAgICJkb21haW4iOiAiRGF0YWJhc2UiLAotICAgICJ0eXBlcyI6IFsK
LSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIkRhdGFiYXNlSWQiLAotICAgICAgICAgICAg
InR5cGUiOiAic3RyaW5nIiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgaWRl
bnRpZmllciBvZiBEYXRhYmFzZSBvYmplY3QuIgotICAgICAgICB9Ci0gICAgXSwKLSAgICAiZXZl
bnRzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJkaWRFeGVjdXRlT3B0aW9u
YWxQYXJhbWV0ZXJzIiwKLSAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwotICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJEYXRhYmFzZUlkIiB9Ci0gICAg
ICAgICAgICBdCi0gICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLXR5cGUtd2l0
aC1pbnZhbGlkLXBsYXRmb3JtLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLXR5cGUtd2l0aC1pbnZhbGlkLXBsYXRmb3Jt
Lmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5ZmQyZTk5NTYxLi4wMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJpYy9mYWlsLW9uLXR5cGUtd2l0aC1pbnZhbGlkLXBsYXRmb3JtLmpzb24KKysrIC9kZXYv
bnVsbApAQCAtMSwxMSArMCwwIEBACi17Ci0gICAgImRvbWFpbiI6ICJSdW50aW1lIiwKLSAgICAi
dHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJSZW1vdGVPYmplY3RJZCIs
Ci0gICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAotICAgICAgICAgICAgInBsYXRmb3JtIjog
ImludmFsaWQiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBvYmplY3QgaWRl
bnRpZmllci4iCi0gICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLXR5cGUtd2l0
aC1sb3dlcmNhc2UtbmFtZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi10eXBlLXdpdGgtbG93ZXJjYXNlLW5hbWUuanNv
bgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTMxOTAxZTRhOWEuLjAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmljL2ZhaWwtb24tdHlwZS13aXRoLWxvd2VyY2FzZS1uYW1lLmpzb24KKysrIC9kZXYvbnVsbApA
QCAtMSwxMCArMCwwIEBACi17Ci0gICAgImRvbWFpbiI6ICJEYXRhYmFzZSIsCi0gICAgInR5cGVz
IjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiZGF0YWJhc2VJZCIsCi0gICAgICAg
ICAgICAidHlwZSI6ICJpbnRlZ2VyIiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlx
dWUgaWRlbnRpZmllciBvZiBEYXRhYmFzZSBvYmplY3QuIgotICAgICAgICB9Ci0gICAgXQotfQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtZGVjbGFyYXRp
b24uanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLWRlY2xhcmF0aW9u
Lmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2ODg3YTI3NDExLi4wMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJpYy9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1kZWNsYXJhdGlv
bi5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotWwotewotICAgICJkb21haW4i
OiAiUnVudGltZSIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQi
OiAiUmVtb3RlT2JqZWN0SWQiLAotICAgICAgICAgICAgInR5cGUiOiAiZHJhZ29uIiwKLSAgICAg
ICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIuIgotICAgICAg
ICB9Ci0gICAgXQotfQotXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNl
LWluLXR5cGUtbWVtYmVyLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlw
ZS1tZW1iZXIuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjgxN2RiNTA0NGQu
LjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLW1l
bWJlci5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotWwotewotICAgICJkb21h
aW4iOiAiRmFudGFzeSIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAi
aWQiOiAiRHJhZ29uRWdnIiwKLSAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCi0gICAgICAg
ICAgICAiZGVzY3JpcHRpb24iOiAiQSBkcmFnb24gZWdnLiIsCi0gICAgICAgICAgICAicHJvcGVy
dGllcyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbG9yIiwgIiRyZWYiOiAiQ29s
b3IiIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfQotICAgIF0KLX0KLV0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2dl
bmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZ2VuZXJhdGUtZG9tYWlucy13
aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3
Y2Y4ZTU4MmY2Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9nZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1n
dWFyZHMuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLVsKLXsKLSAgICAiZG9t
YWluIjogIk5ldHdvcmsxIiwKLSAgICAiZmVhdHVyZUd1YXJkIjogIlBMQVRGT1JNKFdFQl9DT01N
QU5EUykiLAotICAgICJjb21tYW5kcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUi
OiAibG9hZFJlc291cmNlIiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBhIHJl
c291cmNlIGluIHRoZSBjb250ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGluc3BlY3RlZCBwYWdlIHdp
dGhvdXQgY3Jvc3Mgb3JpZ2luIGNoZWNrcy4iCi0gICAgICAgIH0KLSAgICBdCi19LAotewotICAg
ICJkb21haW4iOiAiTmV0d29yazIiLAotICAgICJmZWF0dXJlR3VhcmQiOiAiUExBVEZPUk0oV0VC
X1RZUEVTKSIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAi
TmV0d29ya0Vycm9yIiwKLSAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCi0gICAgICAgICAg
ICAicHJvcGVydGllcyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm1lc3NhZ2UiLCAi
dHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgbWVzc2FnZS4iIH0sCi0gICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJjb2RlIiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlw
dGlvbiI6ICJFcnJvciBjb2RlLiIgfQotICAgICAgICAgICAgXQotICAgICAgICB9Ci0gICAgXQot
fSwKLXsKLSAgICAiZG9tYWluIjogIk5ldHdvcmszIiwKLSAgICAiZmVhdHVyZUd1YXJkIjogIlBM
QVRGT1JNKFdFQl9FVkVOVFMpIiwKLSAgICAiZXZlbnRzIjogWwotICAgICAgICB7Ci0gICAgICAg
ICAgICAibmFtZSI6ICJyZXNvdXJjZUxvYWRlZCIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24i
OiAiQSByZXNvdXJjZSB3YXMgbG9hZGVkLiIKLSAgICAgICAgfQotICAgIF0KLX0KLV0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmljL3NhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9zYW1lLXR5cGUtaWQtZGlmZmVy
ZW50LWRvbWFpbi5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYmY0ZGZmNWNj
Yy4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2dlbmVyaWMvc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgorKysg
L2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLVsKLXsKLSAgICAiZG9tYWluIjogIlJ1bnRpbWUi
LAotICAgICJ0eXBlcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIlJlbW90ZU9i
amVjdElkIiwKLSAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCi0gICAgICAgICAgICAiZGVz
Y3JpcHRpb24iOiAiVW5pcXVlIG9iamVjdCBpZGVudGlmaWVyLiIKLSAgICAgICAgfQotICAgIF0K
LX0sCi17Ci0gICAgImRvbWFpbiI6ICJSdW50aW1lMiIsCi0gICAgInR5cGVzIjogWwotICAgICAg
ICB7Ci0gICAgICAgICAgICAiaWQiOiAiUmVtb3RlT2JqZWN0SWQiLAotICAgICAgICAgICAgInR5
cGUiOiAic3RyaW5nIiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgb2JqZWN0
IGlkZW50aWZpZXIuIgotICAgICAgICB9Ci0gICAgXQotfQotXQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvc2hhZG93ZWQt
b3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9zaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMu
anNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjBhMGMxNTUyNzUuLjAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCisrKyAvZGV2L251bGwK
QEAgLTEsMzEgKzAsMCBAQAotewotICAgICJkb21haW4iOiAiUnVudGltZSIsCi0gICAgInR5cGVz
IjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiS2V5UGF0aCIsCi0gICAgICAgICAg
ICAidHlwZSI6ICJvYmplY3QiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIktleSBwYXRo
LiIsCi0gICAgICAgICAgICAicHJvcGVydGllcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgICJuYW1lIjogInR5cGUiLAotICAgICAgICAgICAgICAgICAgICAidHlw
ZSI6ICJzdHJpbmciLAotICAgICAgICAgICAgICAgICAgICAiZW51bSI6IFsibnVsbCIsICJzdHJp
bmciLCAiYXJyYXkiXSwKLSAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIktleSBw
YXRoIHR5cGUuIgotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICAibmFtZSI6ICJzdHJpbmciLAotICAgICAgICAgICAgICAgICAgICAidHlw
ZSI6ICJzdHJpbmciLAotICAgICAgICAgICAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAg
ICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiU3RyaW5nIHZhbHVlLiIKLSAgICAgICAg
ICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIm5hbWUi
OiAiYXJyYXkiLAotICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJhcnJheSIsCi0gICAgICAg
ICAgICAgICAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAgICAgICAgICAgICAgICJpdGVt
cyI6IHsgInR5cGUiOiAic3RyaW5nIiB9LAotICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRp
b24iOiAiQXJyYXkgdmFsdWUuIgotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIF0KLSAg
ICAgICAgfQotICAgIF0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL3Nob3VsZC1zdHJpcC1jb21tZW50cy5qc29uIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvc2hv
dWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVj
ZTFkY2ZjNjFjLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9zaG91bGQtc3RyaXAtY29tbWVudHMuanNvbgorKysg
L2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotewotICAgIC8qIGFib3ZlICovCi0gICAgLyogYmVm
b3JlICovICJkb21haW4iIC8qIGluICovIDogLyogaW4gKi8gIkNvbW1lbnQiIC8qIGFmdGVyICov
Ci0gICAgLyogYmVsb3cgKi8KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1w
cmltaXRpdmUtdHlwZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2dlbmVyaWMvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBl
Lmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiYzlkNTM5NDc4Li4wMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJpYy90eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgorKysg
L2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIlJ1bnRpbWUiLAot
ICAgICJ0eXBlcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIlJlbW90ZU9iamVj
dElkIiwKLSAgICAgICAgICAgICJ0eXBlIjogImludGVnZXIiLAotICAgICAgICAgICAgImRlc2Ny
aXB0aW9uIjogIlVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4iCi0gICAgICAgIH0KLSAgICBdCi19
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZ2VuZXJpYy90eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbiBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL3R5cGUtZGVjbGFyYXRp
b24tYXJyYXktdHlwZS5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZmIwOGJk
OTQwYi4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KKysr
IC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi1bCi17Ci0gICAgImRvbWFpbiI6ICJEZWJ1Z2dl
ciIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiQnJlYWtw
b2ludElkIiwKLSAgICAgICAgICAgICJ0eXBlIjogImludGVnZXIiCi0gICAgICAgIH0sCi0gICAg
ICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJSZWFzb24iLAotICAgICAgICAgICAgInR5cGUiOiAi
c3RyaW5nIiwKLSAgICAgICAgICAgICJlbnVtIjogWyJEaWVkIiwgIkZhaW50ZWQiLCAiSHVuZ3J5
Il0KLSAgICAgICAgfQotICAgIF0KLX0sCi17Ci0gICAgImRvbWFpbiI6ICJSdW50aW1lIiwKLSAg
ICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJPYmplY3RJZCIsCi0g
ICAgICAgICAgICAidHlwZSI6ICJpbnRlZ2VyIgotICAgICAgICB9LAotICAgICAgICB7Ci0gICAg
ICAgICAgICAiaWQiOiAiTHVja3lOdW1iZXJzIiwKLSAgICAgICAgICAgICJ0eXBlIjogImFycmF5
IiwKLSAgICAgICAgICAgICJpdGVtcyI6IHsgInR5cGUiOiAiaW50ZWdlciIgfQotICAgICAgICB9
LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiQmFieU5hbWVzIiwKLSAgICAgICAgICAg
ICJ0eXBlIjogImFycmF5IiwKLSAgICAgICAgICAgICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5n
IiB9Ci0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJOZXdPYmplY3Rz
IiwKLSAgICAgICAgICAgICJ0eXBlIjogImFycmF5IiwKLSAgICAgICAgICAgICJpdGVtcyI6IHsg
IiRyZWYiOiAiT2JqZWN0SWQiIH0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAg
ImlkIjogIk9sZE9iamVjdHMiLAotICAgICAgICAgICAgInR5cGUiOiAiYXJyYXkiLAotICAgICAg
ICAgICAgIml0ZW1zIjogeyAiJHJlZiI6ICJEZWJ1Z2dlci5CcmVha3BvaW50SWQiIH0KLSAgICAg
ICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIlN0b3BSZWFzb25zIiwKLSAgICAg
ICAgICAgICJ0eXBlIjogImFycmF5IiwKLSAgICAgICAgICAgICJpdGVtcyI6IHsgIiRyZWYiOiAi
RGVidWdnZXIuUmVhc29uIiB9Ci0gICAgICAgIH0KLSAgICBdCi19Ci1dCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy90eXBl
LWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNv
bgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWYwYWVlOWM5MWIuLjAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmljL3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwx
NSArMCwwIEBACi17Ci0gICAgImRvbWFpbiI6ICJSdW50aW1lIiwKLSAgICAidHlwZXMiOiBbCi0g
ICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJGYXJtQW5pbWFscyIsCi0gICAgICAgICAgICAi
dHlwZSI6ICJzdHJpbmciLAotICAgICAgICAgICAgImVudW0iOiBbIlBpZ3MiLCAiQ293cyIsICJD
YXRzIiwgIkhlbnMiXQotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAi
VHdvTGVnZ2VkQW5pbWFscyIsCi0gICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAotICAgICAg
ICAgICAgImVudW0iOiBbIkR1Y2tzIiwgIkhlbnMiLCAiQ3Jvd3MiLCAiRmxhbWluZ29zIl0KLSAg
ICAgICAgfQotICAgIF0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUu
anNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmljL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMmM0M2MzMzA5OTIuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL3R5cGUtZGVjbGFyYXRpb24t
b2JqZWN0LXR5cGUuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi1bCi17Ci0g
ICAgImRvbWFpbiI6ICJEYXRhYmFzZSIsCi0gICAgImRlc2NyaXB0aW9uIjogIlRlc3QgdHlwZSBi
dWlsZGVyIGdlbmVyYXRpb24gb2YgdmFyaW91cyBvYmplY3QgdHlwZXMuIiwKLSAgICAidHlwZXMi
OiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJFcnJvciIsCi0gICAgICAgICAgICAi
dHlwZSI6ICJvYmplY3QiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkRhdGFiYXNlIGVy
cm9yLiIsCi0gICAgICAgICAgICAicHJvcGVydGllcyI6IFsKLSAgICAgICAgICAgICAgICB7ICJu
YW1lIjogIm1lc3NhZ2UiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiRXJyb3Ig
bWVzc2FnZS4iIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2RlIiwgInR5cGUiOiAi
aW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBjb2RlLiIgfQotICAgICAgICAgICAgXQot
ICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiRXJyb3JMaXN0IiwKLSAg
ICAgICAgICAgICJ0eXBlIjogImFycmF5IiwKLSAgICAgICAgICAgICJpdGVtcyI6IHsgIiRyZWYi
OiAiRXJyb3IiIH0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIk1v
dXNlQnV0dG9uIiwKLSAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCi0gICAgICAgICAgICAi
ZGVzY3JpcHRpb24iOiAiRW51bWVyYXRlcyBkaWZmZXJlbnQgbW91c2UgYnV0dG9ucyB0aGF0IGNh
biBiZSB1c2VkLiIsCi0gICAgICAgICAgICAiZW51bSI6IFsKLSAgICAgICAgICAgICAgICAiTm9u
ZSIsCi0gICAgICAgICAgICAgICAgIkxlZnQiLAotICAgICAgICAgICAgICAgICJNaWRkbGUiLAot
ICAgICAgICAgICAgICAgICJSaWdodCIKLSAgICAgICAgICAgIF0KLSAgICAgICAgfSwKLSAgICAg
ICAgewotICAgICAgICAgICAgImlkIjogIk9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlIiwKLSAgICAg
ICAgICAgICJ0eXBlIjogIm9iamVjdCIsCi0gICAgICAgICAgICAicHJvcGVydGllcyI6IFsKLSAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAi
b3B0aW9uYWwiOiB0cnVlLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAotICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAiYnV0dG9ucyIsICJ0eXBlIjogImFycmF5IiwgIm9wdGlvbmFs
IjogdHJ1ZSwgIml0ZW1zIjogeyAiJHJlZiI6ICJNb3VzZUJ1dHRvbiIgfSB9LAotICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAiZGlyZWN0aW9uYWxpdHkiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51
bSI6IFsiTFRSIiwgIlJUTCJdLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWUgfSwK
LSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIs
ICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIs
ICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7
ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0g
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJlcnJvciIsICIkcmVmIjogIkVycm9yIiwgIm9wdGlv
bmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZXJyb3JMaXN0IiwgIiRy
ZWYiOiAiRXJyb3JMaXN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9Ci0gICAgICAgICAgICBdCi0gICAg
ICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJQYXJhbWV0ZXJCdW5kbGUiLAot
ICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKLSAgICAgICAgICAgICJwcm9wZXJ0aWVzIjog
WwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJh
eSIsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCi0gICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJidXR0b25zIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICIkcmVmIjogIk1v
dXNlQnV0dG9uIiB9IH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkaXJlY3Rpb25hbGl0
eSIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJMVFIiLCAiUlRMIl0gfSwKLSAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiB9LAotICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiB9LAotICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiB9LAotICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIgfSwKLSAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogImVycm9yIiwgIiRyZWYiOiAiRXJyb3IiIH0sCi0gICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJlcnJvckxpc3QiLCAiJHJlZiI6ICJFcnJvckxpc3QiIH0KLSAgICAg
ICAgICAgIF0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIk9iamVj
dFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHMiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjog
IkNvbmZsaWN0ZWQgbmFtZXMgbWF5IGNhdXNlIGdlbmVyYXRlZCBnZXR0ZXJzL3NldHRlcnMgdG8g
Y2xhc2ggd2l0aCBidWlsdC1pbiBJbnNwZWN0b3JPYmplY3QgbWV0aG9kcy4iLAotICAgICAgICAg
ICAgInR5cGUiOiAib2JqZWN0IiwKLSAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwotICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAiaW50ZWdlciIsICJ0eXBlIjogInN0cmluZyIgfSwKLSAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogImFycmF5IiwgInR5cGUiOiAic3RyaW5nIiB9LAotICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAic3RyaW5nIiwgInR5cGUiOiAic3RyaW5nIiB9LAotICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWUiLCAidHlwZSI6ICJzdHJpbmciIH0sCi0gICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJvYmplY3QiLCAidHlwZSI6ICJzdHJpbmciIH0KLSAgICAgICAg
ICAgIF0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIkR1bW15T2Jq
ZWN0IiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJBbiBvcGVuIG9iamVjdCB0aGF0IGRv
ZXNuJ3QgaGF2ZSBhbnkgcHJlZGVmaW5lZCBmaWVsZHMuIiwKLSAgICAgICAgICAgICJ0eXBlIjog
Im9iamVjdCIKLSAgICAgICAgfQotICAgIF0KLX0sCi17Ci0gICAgImRvbWFpbiI6ICJUZXN0IiwK
LSAgICAiZGVzY3JpcHRpb24iOiAiVGVzdCB0aGUgZ2VuZXJhdGlvbiBvZiBzcGVjaWFsIGJlaGF2
aW9ycyB0aGF0IG9ubHkgYXBwbHkgdG8gc3BlY2lmaWMgY2xhc3Nlcy4iLAotICAgICJ0eXBlcyI6
IFsKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIlBhcmFtZXRlckJ1bmRsZSIsCi0gICAg
ICAgICAgICAidHlwZSI6ICJvYmplY3QiLAotICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCi0g
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkaXJlY3Rpb25hbGl0eSIsICJ0eXBlIjogInN0cmlu
ZyIsICJlbnVtIjogWyJMVFIiLCAiUlRMIl0gfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjog
ImJ1dHRvbnMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgIiRyZWYiOiAiRGF0YWJhc2Uu
TW91c2VCdXR0b24iIH0gfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVz
IiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAotICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciIH0sCi0gICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiIH0sCi0g
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiIH0sCi0g
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiB9LAotICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAiZXJyb3IiLCAiJHJlZiI6ICJEYXRhYmFzZS5FcnJvciIg
fQotICAgICAgICAgICAgXQotICAgICAgICB9Ci0gICAgXQotfQotXQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvdHlwZS1y
ZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5q
c29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4M2Q5NGJlODk3ZC4uMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCisrKyAvZGV2L251bGwKQEAg
LTEsNTEgKzAsMCBAQAotWwotewotICAgICJkb21haW4iOiAiVGVzdCIsCi0gICAgInR5cGVzIjog
WwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiVHlwZU5lZWRpbmdDYXN0IiwKLSAgICAg
ICAgICAgICJ0eXBlIjogIm9iamVjdCIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQSBk
dW1teSB0eXBlIHRoYXQgcmVxdWlyZXMgcnVudGltZSBjYXN0cywgYW5kIGZvcmNlcyBub24tcHJp
bWl0aXZlIHJlZmVyZW5jZWQgdHlwZXMgdG8gYWxzbyBlbWl0IHJ1bnRpbWUgY2FzdCBoZWxwZXJz
LiIsCi0gICAgICAgICAgICAicHJvcGVydGllcyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1l
IjogInN0cmluZyIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJTdHJpbmcgbWVt
YmVyLiIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm51bWJlciIsICJ0eXBlIjogImlu
dGVnZXIiLCAiZGVzY3JpcHRpb24iOiAiTnVtYmVyIG1lbWJlci4iIH0sCi0gICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJhbmltYWxzIiwgIiRyZWYiOiAiQ2FzdGVkQW5pbWFscyIsICJkZXNjcmlw
dGlvbiI6ICJFbnVtIG1lbWJlci4iIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJpZCIs
ICIkcmVmIjogIkNhc3RlZE9iamVjdElkIiwgImRlc2NyaXB0aW9uIjogIkFsaWFzZWQgbWVtYmVy
LiIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRyZWUiLCAiJHJlZiI6ICJSZWN1cnNp
dmVPYmplY3QxIiwgImRlc2NyaXB0aW9uIjogIlJlY3Vyc2l2ZSBvYmplY3QgbWVtYmVyLiIgfQot
ICAgICAgICAgICAgXQotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAi
Q2FzdGVkT2JqZWN0SWQiLAotICAgICAgICAgICAgInR5cGUiOiAiaW50ZWdlciIKLSAgICAgICAg
fSwKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIlVuY2FzdGVkT2JqZWN0SWQiLAotICAg
ICAgICAgICAgInR5cGUiOiAiaW50ZWdlciIKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAg
ICAgICAgImlkIjogIlVuY2FzdGVkQW5pbWFscyIsCi0gICAgICAgICAgICAidHlwZSI6ICJzdHJp
bmciLAotICAgICAgICAgICAgImVudW0iOiBbIlBpZ3MiLCAiQ293cyIsICJDYXRzIiwgIkhlbnMi
XQotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiQ2FzdGVkQW5pbWFs
cyIsCi0gICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAotICAgICAgICAgICAgImVudW0iOiBb
IkR1Y2tzIiwgIkhlbnMiLCAiQ3Jvd3MiLCAiRmxhbWluZ29zIl0KLSAgICAgICAgfSwKLSAgICAg
ICAgewotICAgICAgICAgICAgImlkIjogIlJlY3Vyc2l2ZU9iamVjdDEiLAotICAgICAgICAgICAg
InR5cGUiOiAib2JqZWN0IiwKLSAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwotICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAib2JqIiwgIiRyZWYiOiAiUmVjdXJzaXZlT2JqZWN0MiIsICJvcHRp
b25hbCI6IHRydWUgfQotICAgICAgICAgICAgXQotICAgICAgICB9LAotICAgICAgICB7Ci0gICAg
ICAgICAgICAiaWQiOiAiUmVjdXJzaXZlT2JqZWN0MiIsCi0gICAgICAgICAgICAidHlwZSI6ICJv
YmplY3QiLAotICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCi0gICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJvYmoiLCAiJHJlZiI6ICJSZWN1cnNpdmVPYmplY3QxIiwgIm9wdGlvbmFsIjogdHJ1
ZSB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0KLSAgICBdCi19Ci1dCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy90eXBl
LXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy90eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24K
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk5YjAyMjBkMzEyLi4wMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJp
Yy90eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwyMSAr
MCwwIEBACi17Ci0gICAgImRvbWFpbiI6ICJUZXN0IiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAg
IHsKLSAgICAgICAgICAgICJpZCI6ICJOb09wZW5QYXJhbWV0ZXJzIiwKLSAgICAgICAgICAgICJ0
eXBlIjogIm9iamVjdCIsCi0gICAgICAgICAgICAicHJvcGVydGllcyI6IFsKLSAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogIm9uZSIsICJ0eXBlIjogIm51bWJlciIgfSwKLSAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInR3byIsICJ0eXBlIjogIm51bWJlciIgfQotICAgICAgICAgICAgXQotICAg
ICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiT3BlblBhcmFtZXRlcnMiLAot
ICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKLSAgICAgICAgICAgICJwcm9wZXJ0aWVzIjog
WwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYWxwaGEiLCAidHlwZSI6ICJudW1iZXIiIH0s
Ci0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJiZXRhIiwgInR5cGUiOiAibnVtYmVyIiB9Ci0g
ICAgICAgICAgICBdCi0gICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy92ZXJzaW9uLmpzb24g
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy92
ZXJzaW9uLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwN2E1ZDkwMTc2Li4w
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy92ZXJzaW9uLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAK
LXsiZG9tYWlucyI6WwotewotICAgICJkb21haW4iOiAiVmVyc2lvbkRvbWFpbiIsCi0gICAgInZl
cnNpb24iOiA0MgotfQotXX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9pb3MvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNv
biBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9pb3MvZGVm
aW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggODE3ZjEzNWVlNWEuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9pb3MvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZv
cm0uanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjog
Ik5ldHdvcmsiLAotICAgICJ0eXBlcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjog
Ik5ldHdvcmtFcnJvciIsCi0gICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAotICAgICAgICAg
ICAgInBsYXRmb3JtIjogIm1hY29zIiwKLSAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwotICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAibWVzc2FnZSIsICJ0eXBlIjogInN0cmluZyIsICJkZXNj
cmlwdGlvbiI6ICJFcnJvciBtZXNzYWdlLiIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjog
ImNvZGUiLCAidHlwZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIGNvZGUuIiB9
Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0KLSAgICBdLAotICAgICJjb21tYW5kcyI6IFsKLSAg
ICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAibG9hZFJlc291cmNlIiwKLSAgICAgICAgICAg
ICJwbGF0Zm9ybSI6ICJtYWNvcyIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9hZHMg
YSByZXNvdXJjZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFn
ZSB3aXRob3V0IGNyb3NzIG9yaWdpbiBjaGVja3MuIgotICAgICAgICB9Ci0gICAgXSwKLSAgICAi
ZXZlbnRzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJyZXNvdXJjZUxvYWRl
ZCIsCi0gICAgICAgICAgICAicGxhdGZvcm0iOiAibWFjb3MiLAotICAgICAgICAgICAgImRlc2Ny
aXB0aW9uIjogIkEgcmVzb3VyY2Ugd2FzIGxvYWRlZC4iCi0gICAgICAgIH0KLSAgICBdCi19CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
aW9zL2V4cGVjdGVkL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24tcmVzdWx0IGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2lvcy9leHBlY3Rl
ZC9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uLXJlc3VsdApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggZDRjMGZlM2ZlM2MuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9pb3MvZXhwZWN0ZWQvZGVmaW5p
dGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbi1yZXN1bHQKKysrIC9kZXYvbnVsbApAQCAtMSw4
NzAgKzAsMCBAQAotIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBs
YXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLSMj
IyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaWYg
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0KLSNpbmNsdWRlICJUZXN0
UHJvdG9jb2xUeXBlcy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRl
bmRSb3V0ZXIuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVy
KFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3Bh
dGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9Ci0gICAgQmFja2VuZERpc3BhdGNoZXIqIGJh
Y2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQo
KTsgfQotcHJpdmF0ZToKLSAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERp
c3BhdGNoZXI7Ci19OwotCi0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotI2VuZGlm
IC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotIyMjIEVuZCBGaWxl
OiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRl
c3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJv
dG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNw
YWNlIEluc3BlY3RvciB7Ci0KLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCi0KLQotfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hl
cnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9y
bS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1
ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCi0jaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVycy5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5j
cHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEg
b25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPHd0Zi9K
U09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFj
ZSBJbnNwZWN0b3IgewotCi1jbGFzcyBGcm9udGVuZFJvdXRlcjsKLQotfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAot
Ci0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQot
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNs
dWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLW5h
bWVzcGFjZSBQcm90b2NvbCB7Ci0KLQotCi0KLQotCi0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90
b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sT2JqZWN0cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBs
YXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLQot
I2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
LQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLQotCi19
IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbmNsdWRlIDx3dGYvUmV0
YWluUHRyLmg+Ci0KLQotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi19IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hl
cnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1t
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMt
cGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRj
aGVycy5oIgotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5o
PgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0K
LSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPFdlYkluc3Bl
Y3Rvci9UZXN0UHJvdG9jb2wuaD4KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1
bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAot
QGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0KLSMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0
UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFs
LmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+Ci0jaW1wb3J0IDxK
YXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgot
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0K
LXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9j
b2xDb25maWd1cmF0aW9uCi17Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBf
Y29udHJvbGxlcjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVn
bWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtz
dXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNT
RVJUKGNvbnRyb2xsZXIpOwotICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1
cm4gc2VsZjsKLX0KLQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwot
fQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1t
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZv
cm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1w
b3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVz
cGFjZSBJbnNwZWN0b3I7Ci0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3Bh
dGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8Rm91
bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2Nv
bEpTT05PYmplY3QuaD4KLQotCi0KLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFBy
b3RvY29sUGxhdGZvcm0pIHsKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbCwKLSAgICBUZXN0
UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWMsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1JT1MsCi0g
ICAgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUywKLX07Ci0KLQotCi0KLQotCi0KLQotCi0KLSNp
bXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMu
aD4KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sSW50ZXJuYWwuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRl
ZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJU
ZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVl
cy5oPgotCi0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0
UHJvdG9jb2wuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVy
c2lvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9i
akNFbnVtVHlwZT4KLU9wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNv
bnN0IFN0cmluZyYgdmFsdWUpOwotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVz
dFByb3RvY29sUGxhdGZvcm0gdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2Fz
ZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDoKLSAgICAgICAgcmV0dXJuICJhbGwiX3M7Ci0gICAg
Y2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM6Ci0gICAgICAgIHJldHVybiAiZ2VuZXJp
YyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOgotICAgICAgICByZXR1cm4g
ImlvcyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M6Ci0gICAgICAgIHJl
dHVybiAibWFjb3MiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8
VGVzdFByb3RvY29sUGxhdGZvcm0+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZh
bHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiYWxsIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90
b2NvbFBsYXRmb3JtQWxsOwotICAgIGlmICh2YWx1ZSA9PSAiZ2VuZXJpYyIpCi0gICAgICAgIHJl
dHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM7Ci0gICAgaWYgKHZhbHVlID09ICJpb3Mi
KQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1JT1M7Ci0gICAgaWYgKHZhbHVl
ID09ICJtYWNvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOwot
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgot
Ci0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBv
cnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQ
cm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7
Ci0KLQotCi0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5t
bQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUu
aD4KLSNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5o
PgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9tYWMvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbiBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9tYWMvZGVmaW5p
dGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggODE3ZjEzNWVlNWEuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9tYWMvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0u
anNvbgorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIk5l
dHdvcmsiLAotICAgICJ0eXBlcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIk5l
dHdvcmtFcnJvciIsCi0gICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAotICAgICAgICAgICAg
InBsYXRmb3JtIjogIm1hY29zIiwKLSAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwotICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAibWVzc2FnZSIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlw
dGlvbiI6ICJFcnJvciBtZXNzYWdlLiIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNv
ZGUiLCAidHlwZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIGNvZGUuIiB9Ci0g
ICAgICAgICAgICBdCi0gICAgICAgIH0KLSAgICBdLAotICAgICJjb21tYW5kcyI6IFsKLSAgICAg
ICAgewotICAgICAgICAgICAgIm5hbWUiOiAibG9hZFJlc291cmNlIiwKLSAgICAgICAgICAgICJw
bGF0Zm9ybSI6ICJtYWNvcyIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9hZHMgYSBy
ZXNvdXJjZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFnZSB3
aXRob3V0IGNyb3NzIG9yaWdpbiBjaGVja3MuIgotICAgICAgICB9Ci0gICAgXSwKLSAgICAiZXZl
bnRzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJyZXNvdXJjZUxvYWRlZCIs
Ci0gICAgICAgICAgICAicGxhdGZvcm0iOiAibWFjb3MiLAotICAgICAgICAgICAgImRlc2NyaXB0
aW9uIjogIkEgcmVzb3VyY2Ugd2FzIGxvYWRlZC4iCi0gICAgICAgIH0KLSAgICBdCi19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvbWFj
L2V4cGVjdGVkL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24tcmVzdWx0IGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL21hYy9leHBlY3RlZC9k
ZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uLXJlc3VsdApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggOWIzY2VlNmJlNjUuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9tYWMvZXhwZWN0ZWQvZGVmaW5pdGlv
bnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbi1yZXN1bHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMjE3
ICswLDAgQEAKLSMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0
Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLS8v
IE5ldHdvcmsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIk5ldHdvcmsiLCBudWxs
KTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrLmxvYWRSZXNvdXJj
ZSIsIG51bGwsIFtdLCBbXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnQoIk5ldHdv
cmsucmVzb3VyY2VMb2FkZWQiLCBudWxsLCBbXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVy
TmV0d29ya0Rpc3BhdGNoZXIgPSBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRGlzcGF0Y2hlci5i
aW5kKEluc3BlY3RvckJhY2tlbmQsICJOZXR3b3JrIik7Ci1JbnNwZWN0b3JCYWNrZW5kLmFjdGl2
YXRlRG9tYWluKCJOZXR3b3JrIiwgbnVsbCk7Ci0jIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tl
bmRDb21tYW5kcy5qcwotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNw
YXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMt
d2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKLSNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0KLW5hbWVzcGFjZSBJ
bnNwZWN0b3IgewotCi1jbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6
Ci0gICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+
JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVy
KTsgfQotICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsg
cmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KLXByaXZhdGU6Ci0gICAgUmVmUHRy
PEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwotfTsKLQotCi1jbGFzcyBB
bHRlcm5hdGVOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2Vu
ZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZpcnR1YWwgfkFsdGVybmF0ZU5ldHdvcmtCYWNr
ZW5kRGlzcGF0Y2hlcigpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UobG9uZyBj
YWxsSWQpID0gMDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jZW5kaWYgLy8g
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jIyMgRW5kIEZpbGU6IFRl
c3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJh
Y2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVm
aW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bE9iamVjdHMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKLQotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KLSNpZiBFTkFCTEUo
SU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLWNsYXNzIEFsdGVybmF0ZU5ldHdvcmtC
YWNrZW5kRGlzcGF0Y2hlcjsKLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKLQotY2xhc3MgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7Ci1w
dWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZShFcnJvclN0cmluZyYpID0gMDsK
LXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIH5OZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
KCk7Ci19OwotCi1jbGFzcyBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMg
U3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8
TmV0d29ya0JhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBOZXR3
b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdm9pZCBkaXNwYXRjaChsb25nIHJl
cXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2Fn
ZSkgb3ZlcnJpZGU7Ci1wcml2YXRlOgotICAgIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgcmVxdWVz
dElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwotI2lmIEVOQUJMRShJTlNQ
RUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotcHVibGljOgotICAgIHZvaWQgc2V0QWx0ZXJu
YXRlRGlzcGF0Y2hlcihBbHRlcm5hdGVOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0
ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hl
cjsgfQotcHJpdmF0ZToKLSAgICBBbHRlcm5hdGVOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIqIG1f
YWx0ZXJuYXRlRGlzcGF0Y2hlciB7IG51bGxwdHIgfTsKLSNlbmRpZgotcHJpdmF0ZToKLSAgICBO
ZXR3b3JrQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImLCBOZXR3b3JrQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxl
ciogbV9hZ2VudCB7IG51bGxwdHIgfTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgot
IyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgot
I2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotI2lu
Y2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNlbmRpZgotCi1uYW1l
c3BhY2UgSW5zcGVjdG9yIHsKLQotTmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6fk5l
dHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KLQotUmVmPE5ldHdvcmtCYWNrZW5k
RGlzcGF0Y2hlcj4gTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoQmFja2VuZERpc3Bh
dGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
KiBhZ2VudCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBOZXR3b3JrQmFja2VuZERpc3Bh
dGNoZXIoYmFja2VuZERpc3BhdGNoZXIsIGFnZW50KSk7Ci19Ci0KLU5ldHdvcmtCYWNrZW5kRGlz
cGF0Y2hlcjo6TmV0d29ya0JhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNr
ZW5kRGlzcGF0Y2hlciwgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCi0g
ICAgOiBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKLSAg
ICAsIG1fYWdlbnQoYWdlbnQpCi17Ci0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJE
aXNwYXRjaGVyRm9yRG9tYWluKCJOZXR3b3JrIl9zLCB0aGlzKTsKLX0KLQotdm9pZCBOZXR3b3Jr
QmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcm
IG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQotewotICAgIFJlZjxOZXR3b3Jr
QmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwotCi0gICAgUmVmUHRyPEpTT046Ok9i
amVjdD4gcGFyYW1ldGVyczsKLSAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFy
YW1ldGVycyk7Ci0KLSAgICBpZiAobWV0aG9kID09ICJsb2FkUmVzb3VyY2UiKQotICAgICAgICBs
b2FkUmVzb3VyY2UocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKLSAgICBlbHNlCi0g
ICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERp
c3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmsuIiArIG1ldGhvZCArICInIHdhcyBu
b3QgZm91bmQiKTsKLX0KLQotdm9pZCBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNv
dXJjZShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKLXsKLSNpZiBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSAgICBpZiAobV9hbHRlcm5hdGVE
aXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNl
KHJlcXVlc3RJZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIEVycm9y
U3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVj
dDo6Y3JlYXRlKCk7Ci0gICAgbV9hZ2VudC0+bG9hZFJlc291cmNlKGVycm9yKTsKLQotICAgIGlm
ICghZXJyb3IubGVuZ3RoKCkpCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNw
b25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0
Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLQot
IyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQot
Ci0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFs
dWVzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNw
ZWN0b3IgewotCi1jbGFzcyBGcm9udGVuZFJvdXRlcjsKLQotY2xhc3MgTmV0d29ya0Zyb250ZW5k
RGlzcGF0Y2hlciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAg
TmV0d29ya0Zyb250ZW5kRGlzcGF0Y2hlcihGcm9udGVuZFJvdXRlciYgZnJvbnRlbmRSb3V0ZXIp
IDogbV9mcm9udGVuZFJvdXRlcihmcm9udGVuZFJvdXRlcikgeyB9Ci0gICAgdm9pZCByZXNvdXJj
ZUxvYWRlZCgpOwotcHJpdmF0ZToKLSAgICBGcm9udGVuZFJvdXRlciYgbV9mcm9udGVuZFJvdXRl
cjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0RnJv
bnRlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRj
aGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13
aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNw
YXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRS
b3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNw
ZWN0b3IgewotCi12b2lkIE5ldHdvcmtGcm9udGVuZERpc3BhdGNoZXI6OnJlc291cmNlTG9hZGVk
KCkKLXsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6
Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiTmV0d29y
ay5yZXNvdXJjZUxvYWRlZCJfcyk7Ci0KLSAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChq
c29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi1uYW1lc3BhY2Ug
UHJvdG9jb2wgewotCi0KLQotLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCi1uYW1lc3BhY2UgTmV0
d29yayB7Ci1jbGFzcyBOZXR3b3JrRXJyb3I7Ci19IC8vIE5ldHdvcmsKLS8vIEVuZCBvZiBmb3J3
YXJkIGRlY2xhcmF0aW9ucy4KLQotCi0KLQotbmFtZXNwYWNlIE5ldHdvcmsgewotY2xhc3MgTmV0
d29ya0Vycm9yIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewotcHVibGljOgotICAgIGVudW0g
ewotICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCi0gICAgICAgIE1lc3NhZ2VTZXQgPSAxIDw8IDAs
Ci0gICAgICAgIENvZGVTZXQgPSAxIDw8IDEsCi0gICAgICAgIEFsbEZpZWxkc1NldCA9IChNZXNz
YWdlU2V0IHwgQ29kZVNldCkKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8aW50IFNUQVRFPgotICAg
IGNsYXNzIEJ1aWxkZXIgewotICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+IG1fcmVzdWx0OwotCi0gICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRF
IHwgU1RFUD4mIGNhc3RTdGF0ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAqcmVp
bnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIEJ1aWxkZXIoUmVmPC8qTmV0d29ya0Vycm9yKi9KU09OOjpPYmplY3Q+JiYgb2Jq
ZWN0KQotICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVy
X2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwotICAgICAgICB9Ci0gICAgICAgIGZyaWVuZCBj
bGFzcyBOZXR3b3JrRXJyb3I7Ci0gICAgcHVibGljOgotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBNZXNzYWdlU2V0PiYgc2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgICAgICB7
Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTWVzc2FnZVNldCksIHByb3Bl
cnR5X21lc3NhZ2VfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmlu
ZygibWVzc2FnZSJfcywgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNZXNz
YWdlU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvZGVTZXQ+
JiBzZXRDb2RlKGludCB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIENvZGVTZXQpLCBwcm9wZXJ0eV9jb2RlX2FscmVhZHlfc2V0KTsKLSAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2VyKCJjb2RlIl9zLCB2YWx1ZSk7Ci0gICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPENvZGVTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBSZWY8
TmV0d29ya0Vycm9yPiByZWxlYXNlKCkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKLSAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihOZXR3b3JrRXJyb3IpID09IHNpemVvZihKU09O
OjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7Ci0KLSAgICAgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+
IGpzb25SZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOwotICAgICAgICAgICAgYXV0
byByZXN1bHQgPSBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxOZXR3b3JrRXJyb3I+Kj4o
Jmpzb25SZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAg
ICB9OwotCi0gICAgLyoKLSAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6Ci0gICAgICogUmVm
PE5ldHdvcmtFcnJvcj4gcmVzdWx0ID0gTmV0d29ya0Vycm9yOjpjcmVhdGUoKQotICAgICAqICAg
ICAuc2V0TWVzc2FnZSguLi4pCi0gICAgICogICAgIC5zZXRDb2RlKC4uLikKLSAgICAgKiAgICAg
LnJlbGVhc2UoKTsKLSAgICAgKi8KLSAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3Jl
YXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpKTsKLSAgICB9Ci19OwotCi19IC8vIE5ldHdvcmsKLQotCi0KLX0gLy8g
bmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bE9iamVjdHMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlv
bnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29s
T2JqZWN0cy5oIgotCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotbmFtZXNwYWNlIFByb3Rv
Y29sIHsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2lu
Y2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQotQHByb3RvY29sIFRlc3RQcm90b2NvbE5ldHdvcmtE
b21haW5IYW5kbGVyOwotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi1jbGFzcyBPYmpDSW5z
cGVjdG9yTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZU5l
dHdvcmtCYWNrZW5kRGlzcGF0Y2hlciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1w
dWJsaWM6Ci0gICAgT2JqQ0luc3BlY3Rvck5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0
UHJvdG9jb2xOZXR3b3JrRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFu
ZGxlcjsgfQotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0SWQpIG92
ZXJyaWRlOwotcHJpdmF0ZToKLSAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sTmV0d29ya0Rv
bWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAi
Y29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQot
I2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLQotbmFtZXNw
YWNlIEluc3BlY3RvciB7Ci0KLXZvaWQgT2JqQ0luc3BlY3Rvck5ldHdvcmtCYWNrZW5kRGlzcGF0
Y2hlcjo6bG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkKQotewotICAgIGlmICghW21fZGVsZWdh
dGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2VXaXRoRXJyb3JDYWxs
YmFjazpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2RO
b3RGb3VuZCwgIidOZXR3b3JrLmxvYWRSZXNvdXJjZScgd2FzIG5vdCBmb3VuZCJfcyk7Ci0gICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3Ip
IHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1
ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwotICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgIH07Ci0KLSAgICBp
ZCBzdWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5k
UmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7Ci0gICAg
fTsKLQotICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZVdpdGhFcnJvckNhbGxiYWNrOmVycm9y
Q2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107Ci19Ci0KLQotfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERp
c3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9u
LmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1h
Yy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KLQotX19hdHRyaWJ1dGVf
XygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZp
Z3VyYXRpb24gOiBOU09iamVjdAotQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVy
PXNldE5ldHdvcmtIYW5kbGVyOikgaWQ8VGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkhhbmRsZXI+
IG5ldHdvcmtIYW5kbGVyOwotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBUZXN0UHJv
dG9jb2xOZXR3b3JrRG9tYWluRXZlbnREaXNwYXRjaGVyICpuZXR3b3JrRXZlbnREaXNwYXRjaGVy
OwotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJU
ZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVy
bmFsLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+Ci0jaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5o
PgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+
Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJv
dG9jb2xDb25maWd1cmF0aW9uCi17Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVy
KiBfY29udHJvbGxlcjsKLSAgICBpZDxUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluSGFuZGxlcj4g
X25ldHdvcmtIYW5kbGVyOwotICAgIFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5FdmVudERpc3Bh
dGNoZXIgKl9uZXR3b3JrRXZlbnREaXNwYXRjaGVyOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xs
ZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAg
cmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRyb2xsZXIgPSBj
b250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAg
ICBbX25ldHdvcmtIYW5kbGVyIHJlbGVhc2VdOwotICAgIFtfbmV0d29ya0V2ZW50RGlzcGF0Y2hl
ciByZWxlYXNlXTsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLS0gKHZvaWQpc2V0TmV0d29y
a0hhbmRsZXI6KGlkPFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5IYW5kbGVyPiloYW5kbGVyCi17
Ci0gICAgaWYgKGhhbmRsZXIgPT0gX25ldHdvcmtIYW5kbGVyKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBbX25ldHdvcmtIYW5kbGVyIHJlbGVhc2VdOwotICAgIF9uZXR3b3JrSGFuZGxlciA9IFto
YW5kbGVyIHJldGFpbl07Ci0KLSAgICBhdXRvIGFsdGVybmF0ZURpc3BhdGNoZXIgPSBtYWtlVW5p
cXVlPE9iakNJbnNwZWN0b3JOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI+KGhhbmRsZXIpOwotICAg
IGF1dG8gYWx0ZXJuYXRlQWdlbnQgPSBtYWtlVW5pcXVlPEFsdGVybmF0ZURpc3BhdGNoYWJsZUFn
ZW50PE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlciwgQWx0ZXJuYXRlTmV0d29ya0JhY2tlbmREaXNw
YXRjaGVyPj4oIk5ldHdvcmsiX3MsICpfY29udHJvbGxlciwgV1RGTW92ZShhbHRlcm5hdGVEaXNw
YXRjaGVyKSk7Ci0gICAgX2NvbnRyb2xsZXItPmFwcGVuZEV4dHJhQWdlbnQoV1RGTW92ZShhbHRl
cm5hdGVBZ2VudCkpOwotfQotCi0tIChpZDxUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluSGFuZGxl
cj4pbmV0d29ya0hhbmRsZXIKLXsKLSAgICByZXR1cm4gX25ldHdvcmtIYW5kbGVyOwotfQotCi0t
IChUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluRXZlbnREaXNwYXRjaGVyICopbmV0d29ya0V2ZW50
RGlzcGF0Y2hlcgotewotICAgIGlmICghX25ldHdvcmtFdmVudERpc3BhdGNoZXIpCi0gICAgICAg
IF9uZXR3b3JrRXZlbnREaXNwYXRjaGVyID0gW1tUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluRXZl
bnREaXNwYXRjaGVyIGFsbG9jXSBpbml0V2l0aENvbnRyb2xsZXI6X2NvbnRyb2xsZXJdOwotICAg
IHJldHVybiBfbmV0d29ya0V2ZW50RGlzcGF0Y2hlcjsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJu
YWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0
IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW1w
bGVtZW50YXRpb24gVGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkV2ZW50RGlzcGF0Y2hlcgotewot
ICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci19Ci0KLS0g
KGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29u
dHJvbGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYg
KCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAg
ICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZv
aWQpcmVzb3VyY2VMb2FkZWQKLXsKLSAgICBjb25zdCBGcm9udGVuZFJvdXRlciYgcm91dGVyID0g
X2NvbnRyb2xsZXItPmZyb250ZW5kUm91dGVyKCk7Ci0KLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBq
c29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNl
dFN0cmluZygibWV0aG9kIl9zLCAiTmV0d29yay5yZXNvdXJjZUxvYWRlZCJfcyk7Ci0gICAgcm91
dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwotfQotCi1AZW5kCi0K
LQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9u
Lmg+Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KLQot
Ci1AY2xhc3MgVGVzdFByb3RvY29sTmV0d29ya0Vycm9yOwotCi10eXBlZGVmIE5TX0VOVU0oTlNJ
bnRlZ2VyLCBUZXN0UHJvdG9jb2xQbGF0Zm9ybSkgewotICAgIFRlc3RQcm90b2NvbFBsYXRmb3Jt
QWxsLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYywKLSAgICBUZXN0UHJvdG9jb2xQ
bGF0Zm9ybUlPUywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TLAotfTsKLQotCi0KLQot
X19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQ
cm90b2NvbE5ldHdvcmtFcnJvciA6IFJXSVByb3RvY29sSlNPTk9iamVjdAotLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxv
YWQ7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xK
U09OT2JqZWN0ICopanNvbk9iamVjdDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6
KE5TU3RyaW5nICopbWVzc2FnZSBjb2RlOihpbnQpY29kZTsKLS8qIHJlcXVpcmVkICovIEBwcm9w
ZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqbWVzc2FnZTsKLS8qIHJlcXVpcmVkICov
IEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCBjb2RlOwotQGVuZAotCi1AcHJvdG9j
b2wgVGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkhhbmRsZXIgPE5TT2JqZWN0PgotQG9wdGlvbmFs
Ci0tICh2b2lkKWxvYWRSZXNvdXJjZVdpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5n
ICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikodm9pZCkpc3Vj
Y2Vzc0NhbGxiYWNrOwotQGVuZAotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVs
dCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkV2ZW50RGlzcGF0Y2hl
ciA6IE5TT2JqZWN0Ci0tICh2b2lkKXJlc291cmNlTG9hZGVkOwotQGVuZAotCi0KLSNpbXBvcnQg
PFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4KLQot
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRp
b25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJv
dG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVu
dGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgot
Ci1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5FdmVudERpc3BhdGNoZXIgKFBy
aXZhdGUpCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihJbnNwZWN0b3I6OkF1
Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcjsKLUBlbmQKLQotCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBv
cnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KLQotbmFtZXNw
YWNlIEluc3BlY3RvciB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KLU9wdGlv
bmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUp
OwotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sUGxhdGZvcm0g
dmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0
Zm9ybUFsbDoKLSAgICAgICAgcmV0dXJuICJhbGwiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQ
bGF0Zm9ybUdlbmVyaWM6Ci0gICAgICAgIHJldHVybiAiZ2VuZXJpYyJfczsKLSAgICBjYXNlIFRl
c3RQcm90b2NvbFBsYXRmb3JtSU9TOgotICAgICAgICByZXR1cm4gImlvcyJfczsKLSAgICBjYXNl
IFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M6Ci0gICAgICAgIHJldHVybiAibWFjb3MiX3M7Ci0g
ICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sUGxhdGZv
cm0+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2
YWx1ZSA9PSAiYWxsIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOwot
ICAgIGlmICh2YWx1ZSA9PSAiZ2VuZXJpYyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQ
bGF0Zm9ybUdlbmVyaWM7Ci0gICAgaWYgKHZhbHVlID09ICJpb3MiKQotICAgICAgICByZXR1cm4g
VGVzdFByb3RvY29sUGxhdGZvcm1JT1M7Ci0gICAgaWYgKHZhbHVlID09ICJtYWNvcyIpCi0gICAg
ICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOwotICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7Ci19Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2xUeXBlUGFyc2VyLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2Jq
ZWN0UHJpdmF0ZS5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW50ZXJmYWNl
IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoTmV0d29ya0RvbWFpbikKLQotKyAodm9pZClf
cGFyc2VOZXR3b3JrRXJyb3I6KFRlc3RQcm90b2NvbE5ldHdvcmtFcnJvciAqKilvdXRWYWx1ZSBm
cm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zIChOZXR3b3JrRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZU5l
dHdvcmtFcnJvcjooVGVzdFByb3RvY29sTmV0d29ya0Vycm9yICoqKW91dFZhbHVlIGZyb21QYXls
b2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXls
b2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9j
b2xOZXR3b3JrRXJyb3IgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKLX0KLQotQGVu
ZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0KLSMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29s
SW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0j
aW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotI2lt
cG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVz
aW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2Nv
bE5ldHdvcmtFcnJvcgotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxs
IE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCi17Ci0gICAgaWYgKCEoc2Vs
ZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBUSFJPV19FWENF
UFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJtZXNzYWdlIl0sIEAibWVzc2Fn
ZSIpOwotICAgIHNlbGYubWVzc2FnZSA9IHBheWxvYWRbQCJtZXNzYWdlIl07Ci0KLSAgICBUSFJP
V19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJjb2RlIl0sIEAiY29k
ZSIpOwotICAgIHNlbGYuY29kZSA9IFtwYXlsb2FkW0AiY29kZSJdIGludGVnZXJWYWx1ZV07Ci0K
LSAgICByZXR1cm4gc2VsZjsKLX0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2Jq
ZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilvYmplY3QKLXsKLSAgICBpZiAoIShzZWxmID0g
W3N1cGVyIGluaXRXaXRoSlNPTk9iamVjdDpbb2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0KCldKSkK
LSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZTooaW50KWNvZGUK
LXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsK
LQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkobWVzc2FnZSwgQCJt
ZXNzYWdlIik7Ci0KLSAgICBzZWxmLm1lc3NhZ2UgPSBtZXNzYWdlOwotICAgIHNlbGYuY29kZSA9
IGNvZGU7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClzZXRNZXNzYWdlOihOU1N0
cmluZyAqKW1lc3NhZ2UKLXsKLSAgICBbc3VwZXIgc2V0U3RyaW5nOm1lc3NhZ2UgZm9yS2V5OkAi
bWVzc2FnZSJdOwotfQotCi0tIChOU1N0cmluZyAqKW1lc3NhZ2UKLXsKLSAgICByZXR1cm4gW3N1
cGVyIHN0cmluZ0ZvcktleTpAIm1lc3NhZ2UiXTsKLX0KLQotLSAodm9pZClzZXRDb2RlOihpbnQp
Y29kZQotewotICAgIFtzdXBlciBzZXRJbnRlZ2VyOmNvZGUgZm9yS2V5OkAiY29kZSJdOwotfQot
Ci0tIChpbnQpY29kZQotewotICAgIHJldHVybiBbc3VwZXIgaW50ZWdlckZvcktleTpAImNvZGUi
XTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9z
YW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3NhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpz
b24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjNiZjRkZmY1Y2NjCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL3NhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KQEAgLTAsMCArMSwyMiBA
QAorWworeworICAgICJkb21haW4iOiAiUnVudGltZSIsCisgICAgInR5cGVzIjogWworICAgICAg
ICB7CisgICAgICAgICAgICAiaWQiOiAiUmVtb3RlT2JqZWN0SWQiLAorICAgICAgICAgICAgInR5
cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgb2JqZWN0
IGlkZW50aWZpZXIuIgorICAgICAgICB9CisgICAgXQorfSwKK3sKKyAgICAiZG9tYWluIjogIlJ1
bnRpbWUyIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJS
ZW1vdGVPYmplY3RJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAg
ICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4iCisgICAgICAgIH0K
KyAgICBdCit9CitdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24gYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvc2hhZG93ZWQtb3B0aW9u
YWwtdHlwZS1zZXR0ZXJzLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAuLjIwYTBjMTU1Mjc1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5q
c29uCkBAIC0wLDAgKzEsMzEgQEAKK3sKKyAgICAiZG9tYWluIjogIlJ1bnRpbWUiLAorICAgICJ0
eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIktleVBhdGgiLAorICAgICAg
ICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJLZXkg
cGF0aC4iLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJ0eXBlIiwKKyAgICAgICAgICAgICAgICAgICAg
InR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICAgICAgICAgImVudW0iOiBbIm51bGwiLCAi
c3RyaW5nIiwgImFycmF5Il0sCisgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJL
ZXkgcGF0aCB0eXBlLiIKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgIm5hbWUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICAgICAgICAg
InR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwK
KyAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlN0cmluZyB2YWx1ZS4iCisgICAg
ICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJu
YW1lIjogImFycmF5IiwKKyAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiYXJyYXkiLAorICAg
ICAgICAgICAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgICAgICAgICAgICAgICAi
aXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSwKKyAgICAgICAgICAgICAgICAgICAgImRlc2Ny
aXB0aW9uIjogIkFycmF5IHZhbHVlLiIKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBd
CisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24gYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvc2hvdWxkLXN0cmlwLWNv
bW1lbnRzLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmVjZTFk
Y2ZjNjFjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL3Nob3VsZC1zdHJpcC1jb21tZW50cy5qc29uCkBAIC0wLDAgKzEsNSBA
QAoreworICAgIC8qIGFib3ZlICovCisgICAgLyogYmVmb3JlICovICJkb21haW4iIC8qIGluICov
IDogLyogaW4gKi8gIkNvbW1lbnQiIC8qIGFmdGVyICovCisgICAgLyogYmVsb3cgKi8KK30KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90
eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbiBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9uLWFsaWFz
ZWQtcHJpbWl0aXZlLXR5cGUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMC4uY2JjOWQ1Mzk0NzgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1p
dGl2ZS10eXBlLmpzb24KQEAgLTAsMCArMSwxMCBAQAoreworICAgICJkb21haW4iOiAiUnVudGlt
ZSIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiUmVtb3Rl
T2JqZWN0SWQiLAorICAgICAgICAgICAgInR5cGUiOiAiaW50ZWdlciIsCisgICAgICAgICAgICAi
ZGVzY3JpcHRpb24iOiAiVW5pcXVlIG9iamVjdCBpZGVudGlmaWVyLiIKKyAgICAgICAgfQorICAg
IF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbiBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5
cGUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uY2ZiMDhiZDk0
MGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KQEAgLTAsMCArMSw1
MCBAQAorWworeworICAgICJkb21haW4iOiAiRGVidWdnZXIiLAorICAgICJ0eXBlcyI6IFsKKyAg
ICAgICAgeworICAgICAgICAgICAgImlkIjogIkJyZWFrcG9pbnRJZCIsCisgICAgICAgICAgICAi
dHlwZSI6ICJpbnRlZ2VyIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQi
OiAiUmVhc29uIiwKKyAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAi
ZW51bSI6IFsiRGllZCIsICJGYWludGVkIiwgIkh1bmdyeSJdCisgICAgICAgIH0KKyAgICBdCit9
LAoreworICAgICJkb21haW4iOiAiUnVudGltZSIsCisgICAgInR5cGVzIjogWworICAgICAgICB7
CisgICAgICAgICAgICAiaWQiOiAiT2JqZWN0SWQiLAorICAgICAgICAgICAgInR5cGUiOiAiaW50
ZWdlciIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkx1Y2t5TnVt
YmVycyIsCisgICAgICAgICAgICAidHlwZSI6ICJhcnJheSIsCisgICAgICAgICAgICAiaXRlbXMi
OiB7ICJ0eXBlIjogImludGVnZXIiIH0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAg
ICAgImlkIjogIkJhYnlOYW1lcyIsCisgICAgICAgICAgICAidHlwZSI6ICJhcnJheSIsCisgICAg
ICAgICAgICAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfQorICAgICAgICB9LAorICAgICAg
ICB7CisgICAgICAgICAgICAiaWQiOiAiTmV3T2JqZWN0cyIsCisgICAgICAgICAgICAidHlwZSI6
ICJhcnJheSIsCisgICAgICAgICAgICAiaXRlbXMiOiB7ICIkcmVmIjogIk9iamVjdElkIiB9Cisg
ICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJPbGRPYmplY3RzIiwKKyAg
ICAgICAgICAgICJ0eXBlIjogImFycmF5IiwKKyAgICAgICAgICAgICJpdGVtcyI6IHsgIiRyZWYi
OiAiRGVidWdnZXIuQnJlYWtwb2ludElkIiB9CisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAg
ICAgICAgICJpZCI6ICJTdG9wUmVhc29ucyIsCisgICAgICAgICAgICAidHlwZSI6ICJhcnJheSIs
CisgICAgICAgICAgICAiaXRlbXMiOiB7ICIkcmVmIjogIkRlYnVnZ2VyLlJlYXNvbiIgfQorICAg
ICAgICB9CisgICAgXQorfQorXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24gYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1kZWNsYXJh
dGlvbi1lbnVtLXR5cGUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MC4uOWYwYWVlOWM5MWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgpA
QCAtMCwwICsxLDE1IEBACit7CisgICAgImRvbWFpbiI6ICJSdW50aW1lIiwKKyAgICAidHlwZXMi
OiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJGYXJtQW5pbWFscyIsCisgICAgICAg
ICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgImVudW0iOiBbIlBpZ3MiLCAiQ293
cyIsICJDYXRzIiwgIkhlbnMiXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAi
aWQiOiAiVHdvTGVnZ2VkQW5pbWFscyIsCisgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAor
ICAgICAgICAgICAgImVudW0iOiBbIkR1Y2tzIiwgIkhlbnMiLCAiQ3Jvd3MiLCAiRmxhbWluZ29z
Il0KKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpz
b24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1k
ZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwLi4yYzQzYzMzMDk5MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10
eXBlLmpzb24KQEAgLTAsMCArMSwxMDAgQEAKK1sKK3sKKyAgICAiZG9tYWluIjogIkRhdGFiYXNl
IiwKKyAgICAiZGVzY3JpcHRpb24iOiAiVGVzdCB0eXBlIGJ1aWxkZXIgZ2VuZXJhdGlvbiBvZiB2
YXJpb3VzIG9iamVjdCB0eXBlcy4iLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAg
ICAgICAgImlkIjogIkVycm9yIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAg
ICAgICAgICAiZGVzY3JpcHRpb24iOiAiRGF0YWJhc2UgZXJyb3IuIiwKKyAgICAgICAgICAgICJw
cm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibWVzc2FnZSIsICJ0eXBl
IjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBtZXNzYWdlLiIgfSwKKyAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogImNvZGUiLCAidHlwZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9u
IjogIkVycm9yIGNvZGUuIiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsK
KyAgICAgICAgICAgICJpZCI6ICJFcnJvckxpc3QiLAorICAgICAgICAgICAgInR5cGUiOiAiYXJy
YXkiLAorICAgICAgICAgICAgIml0ZW1zIjogeyAiJHJlZiI6ICJFcnJvciIgfQorICAgICAgICB9
LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiTW91c2VCdXR0b24iLAorICAgICAgICAg
ICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJFbnVtZXJh
dGVzIGRpZmZlcmVudCBtb3VzZSBidXR0b25zIHRoYXQgY2FuIGJlIHVzZWQuIiwKKyAgICAgICAg
ICAgICJlbnVtIjogWworICAgICAgICAgICAgICAgICJOb25lIiwKKyAgICAgICAgICAgICAgICAi
TGVmdCIsCisgICAgICAgICAgICAgICAgIk1pZGRsZSIsCisgICAgICAgICAgICAgICAgIlJpZ2h0
IgorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQi
OiAiT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUiLAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0
IiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJvcHRpb25hbCI6IHRydWUsICJpdGVt
cyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJi
dXR0b25zIiwgInR5cGUiOiAiYXJyYXkiLCAib3B0aW9uYWwiOiB0cnVlLCAiaXRlbXMiOiB7ICIk
cmVmIjogIk1vdXNlQnV0dG9uIiB9IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkaXJl
Y3Rpb25hbGl0eSIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJMVFIiLCAiUlRMIl0sICJv
cHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vdGVzIiwgInR5
cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAor
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiwgIm9w
dGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0
eXBlIjogImFueSIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogImVycm9yIiwgIiRyZWYiOiAiRXJyb3IiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJlcnJvckxpc3QiLCAiJHJlZiI6ICJFcnJvckxpc3QiLCAib3B0
aW9uYWwiOiB0cnVlIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAg
ICAgICAgICAgImlkIjogIlBhcmFtZXRlckJ1bmRsZSIsCisgICAgICAgICAgICAidHlwZSI6ICJv
YmplY3QiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAidHlwZSI6
ICJzdHJpbmciIH0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImJ1dHRvbnMiLCAidHlw
ZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgIiRyZWYiOiAiTW91c2VCdXR0b24iIH0gfSwKKyAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogImRpcmVjdGlvbmFsaXR5IiwgInR5cGUiOiAic3RyaW5nIiwg
ImVudW0iOiBbIkxUUiIsICJSVEwiXSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90
ZXMiLCAidHlwZSI6ICJzdHJpbmciIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1l
c3RhbXAiLCAidHlwZSI6ICJudW1iZXIiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2
YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJw
YXlsb2FkIiwgInR5cGUiOiAiYW55IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZXJy
b3IiLCAiJHJlZiI6ICJFcnJvciIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImVycm9y
TGlzdCIsICIkcmVmIjogIkVycm9yTGlzdCIgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAor
ICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZs
aWN0cyIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQ29uZmxpY3RlZCBuYW1lcyBtYXkg
Y2F1c2UgZ2VuZXJhdGVkIGdldHRlcnMvc2V0dGVycyB0byBjbGFzaCB3aXRoIGJ1aWx0LWluIElu
c3BlY3Rvck9iamVjdCBtZXRob2RzLiIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAor
ICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJp
bnRlZ2VyIiwgInR5cGUiOiAic3RyaW5nIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
YXJyYXkiLCAidHlwZSI6ICJzdHJpbmciIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJz
dHJpbmciLCAidHlwZSI6ICJzdHJpbmciIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2
YWx1ZSIsICJ0eXBlIjogInN0cmluZyIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm9i
amVjdCIsICJ0eXBlIjogInN0cmluZyIgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAg
ICAgICB7CisgICAgICAgICAgICAiaWQiOiAiRHVtbXlPYmplY3QiLAorICAgICAgICAgICAgImRl
c2NyaXB0aW9uIjogIkFuIG9wZW4gb2JqZWN0IHRoYXQgZG9lc24ndCBoYXZlIGFueSBwcmVkZWZp
bmVkIGZpZWxkcy4iLAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IgorICAgICAgICB9Cisg
ICAgXQorfSwKK3sKKyAgICAiZG9tYWluIjogIlRlc3QiLAorICAgICJkZXNjcmlwdGlvbiI6ICJU
ZXN0IHRoZSBnZW5lcmF0aW9uIG9mIHNwZWNpYWwgYmVoYXZpb3JzIHRoYXQgb25seSBhcHBseSB0
byBzcGVjaWZpYyBjbGFzc2VzLiIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAg
ICAgICAiaWQiOiAiUGFyYW1ldGVyQnVuZGxlIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVj
dCIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogImRpcmVjdGlvbmFsaXR5IiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbIkxUUiIsICJS
VEwiXSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYnV0dG9ucyIsICJ0eXBlIjogImFy
cmF5IiwgIml0ZW1zIjogeyAiJHJlZiI6ICJEYXRhYmFzZS5Nb3VzZUJ1dHRvbiIgfSB9LAorICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJp
dGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjog
InRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJlcnJvciIsICIkcmVmIjogIkRhdGFiYXNlLkVycm9yIiB9CisgICAgICAgICAgICBdCisgICAg
ICAgIH0KKyAgICBdCit9CitdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtcmVxdWly
aW5nLXJ1bnRpbWUtY2FzdHMuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMC4uODNkOTRiZTg5N2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5q
c29uCkBAIC0wLDAgKzEsNTEgQEAKK1sKK3sKKyAgICAiZG9tYWluIjogIlRlc3QiLAorICAgICJ0
eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlR5cGVOZWVkaW5nQ2FzdCIs
CisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9u
IjogIkEgZHVtbXkgdHlwZSB0aGF0IHJlcXVpcmVzIHJ1bnRpbWUgY2FzdHMsIGFuZCBmb3JjZXMg
bm9uLXByaW1pdGl2ZSByZWZlcmVuY2VkIHR5cGVzIHRvIGFsc28gZW1pdCBydW50aW1lIGNhc3Qg
aGVscGVycy4iLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJzdHJpbmciLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiU3Ry
aW5nIG1lbWJlci4iIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJudW1iZXIiLCAidHlw
ZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9uIjogIk51bWJlciBtZW1iZXIuIiB9LAorICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAiYW5pbWFscyIsICIkcmVmIjogIkNhc3RlZEFuaW1hbHMiLCAi
ZGVzY3JpcHRpb24iOiAiRW51bSBtZW1iZXIuIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAiaWQiLCAiJHJlZiI6ICJDYXN0ZWRPYmplY3RJZCIsICJkZXNjcmlwdGlvbiI6ICJBbGlhc2Vk
IG1lbWJlci4iIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0cmVlIiwgIiRyZWYiOiAi
UmVjdXJzaXZlT2JqZWN0MSIsICJkZXNjcmlwdGlvbiI6ICJSZWN1cnNpdmUgb2JqZWN0IG1lbWJl
ci4iIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAg
ImlkIjogIkNhc3RlZE9iamVjdElkIiwKKyAgICAgICAgICAgICJ0eXBlIjogImludGVnZXIiCisg
ICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJVbmNhc3RlZE9iamVjdElk
IiwKKyAgICAgICAgICAgICJ0eXBlIjogImludGVnZXIiCisgICAgICAgIH0sCisgICAgICAgIHsK
KyAgICAgICAgICAgICJpZCI6ICJVbmNhc3RlZEFuaW1hbHMiLAorICAgICAgICAgICAgInR5cGUi
OiAic3RyaW5nIiwKKyAgICAgICAgICAgICJlbnVtIjogWyJQaWdzIiwgIkNvd3MiLCAiQ2F0cyIs
ICJIZW5zIl0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkNhc3Rl
ZEFuaW1hbHMiLAorICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICJl
bnVtIjogWyJEdWNrcyIsICJIZW5zIiwgIkNyb3dzIiwgIkZsYW1pbmdvcyJdCisgICAgICAgIH0s
CisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJSZWN1cnNpdmVPYmplY3QxIiwKKyAgICAg
ICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKKyAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogIm9iaiIsICIkcmVmIjogIlJlY3Vyc2l2ZU9iamVjdDIi
LCAib3B0aW9uYWwiOiB0cnVlIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAg
eworICAgICAgICAgICAgImlkIjogIlJlY3Vyc2l2ZU9iamVjdDIiLAorICAgICAgICAgICAgInR5
cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAib2JqIiwgIiRyZWYiOiAiUmVjdXJzaXZlT2JqZWN0MSIsICJvcHRpb25h
bCI6IHRydWUgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXQorfQorXQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUt
d2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy90eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24KbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjk5YjAyMjBkMzEyCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUt
d2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbgpAQCAtMCwwICsxLDIxIEBACit7CisgICAgImRvbWFp
biI6ICJUZXN0IiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6
ICJOb09wZW5QYXJhbWV0ZXJzIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAg
ICAgICAgICAicHJvcGVydGllcyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm9uZSIs
ICJ0eXBlIjogIm51bWJlciIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInR3byIsICJ0
eXBlIjogIm51bWJlciIgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7Cisg
ICAgICAgICAgICAiaWQiOiAiT3BlblBhcmFtZXRlcnMiLAorICAgICAgICAgICAgInR5cGUiOiAi
b2JqZWN0IiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAiYWxwaGEiLCAidHlwZSI6ICJudW1iZXIiIH0sCisgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJiZXRhIiwgInR5cGUiOiAibnVtYmVyIiB9CisgICAgICAgICAgICBdCisgICAgICAg
IH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvdmVyc2lvbi5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL3ZlcnNpb24uanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMC4uNTA3YTVkOTAxNzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdmVyc2lvbi5qc29uCkBAIC0wLDAg
KzEsNiBAQAoreyJkb21haW5zIjpbCit7CisgICAgImRvbWFpbiI6ICJWZXJzaW9uRG9tYWluIiwK
KyAgICAidmVyc2lvbiI6IDQyCit9CitdfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmlkbAppbmRleCBlNzhjMTg5MTk2Mi4uZDM2ZGJhOTlm
MDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVu
ZEhvc3QuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVu
ZEhvc3QuaWRsCkBAIC05Myw3ICs5Myw3IEBACiAgICAgYm9vbGVhbiBpc0JlaW5nSW5zcGVjdGVk
KCk7CiAKICAgICByZWFkb25seSBhdHRyaWJ1dGUgYm9vbGVhbiBzdXBwb3J0c0RpYWdub3N0aWNM
b2dnaW5nOwotI2lmIEVOQUJMRV9JTlNQRUNUT1JfVEVMRU1FVFJZCisjaWYgZGVmaW5lZChFTkFC
TEVfSU5TUEVDVE9SX1RFTEVNRVRSWSkgJiYgRU5BQkxFX0lOU1BFQ1RPUl9URUxFTUVUUlkKICAg
ICB2b2lkIGxvZ0RpYWdub3N0aWNFdmVudChET01TdHJpbmcgZXZlbnROYW1lLCBET01TdHJpbmcg
Y29udGVudCk7CiAjZW5kaWYKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yU2hhZGVyUHJvZ3JhbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yU2hhZGVyUHJvZ3JhbS5jcHAKaW5kZXggMjkxYmQyNGIwNmYuLmY4MTZiYjZmNDM2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU2hhZGVyUHJv
Z3JhbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclNoYWRlclBy
b2dyYW0uY3BwCkBAIC0yNiw2ICsyNiw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiSW5zcGVjdG9yU2hhZGVyUHJvZ3JhbS5oIgogCisjaWYgRU5BQkxFKFdFQkdMKSB8fCBFTkFC
TEUoV0VCR1BVKQorCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ2FudmFzLmgiCiAjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSWRlbnRpZmllcnNGYWN0b3J5Lmg+CiAjaW5jbHVkZSA8d3RmL09wdGlvbmFs
Lmg+CkBAIC0xNTIsMTAgKzE1NCw2IEBAIHN0YXRpYyBSZWZQdHI8V2ViR1BVU2hhZGVyTW9kdWxl
PiBzaGFkZXJGb3JUeXBlKFdlYkdQVVBpcGVsaW5lJiBwaXBlbGluZSwgSW5zcGVjCiAKIFN0cmlu
ZyBJbnNwZWN0b3JTaGFkZXJQcm9ncmFtOjpyZXF1ZXN0U2hhZGVyU291cmNlKEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNhbnZhczo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlKQogewotI2lmICFFTkFCTEUo
V0VCR0wpICYmICFFTkFCTEUoV0VCR1BVKQotICAgIFVOVVNFRF9QQVJBTShzaGFkZXJUeXBlKTsK
LSNlbmRpZgotCiAgICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9wcm9ncmFtLAogI2lmIEVOQUJM
RShXRUJHTCkKICAgICAgICAgWyZdIChzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFdlYkdMUHJvZ3Jh
bT4gcHJvZ3JhbVdyYXBwZXIpIHsKQEAgLTE4NCwxMSArMTgyLDYgQEAgU3RyaW5nIEluc3BlY3Rv
clNoYWRlclByb2dyYW06OnJlcXVlc3RTaGFkZXJTb3VyY2UoSW5zcGVjdG9yOjpQcm90b2NvbDo6
Q2FudmFzOjoKIAogYm9vbCBJbnNwZWN0b3JTaGFkZXJQcm9ncmFtOjp1cGRhdGVTaGFkZXIoSW5z
cGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpTaGFkZXJUeXBlIHNoYWRlclR5cGUsIGNvbnN0IFN0
cmluZyYgc291cmNlKQogewotI2lmICFFTkFCTEUoV0VCR0wpICYmICFFTkFCTEUoV0VCR1BVKQot
ICAgIFVOVVNFRF9QQVJBTShzaGFkZXJUeXBlKTsKLSAgICBVTlVTRURfUEFSQU0oc291cmNlKTsK
LSNlbmRpZgotCiAgICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9wcm9ncmFtLAogI2lmIEVOQUJM
RShXRUJHTCkKICAgICAgICAgWyZdIChzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFdlYkdMUHJvZ3Jh
bT4gcHJvZ3JhbVdyYXBwZXIpIHsKQEAgLTI4MSwzICsyNzQsNSBAQCBSZWY8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6Q2FudmFzOjpTaGFkZXJQcm9ncmFtPiBJbnNwZWN0b3JTaGFkZXJQcm9ncmFtOjpi
dWlsZE9iagogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUo
V0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yU2hhZGVyUHJvZ3JhbS5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvclNoYWRlclByb2dyYW0uaAppbmRleCA2ZGYxM2RmZmRlYi4uY2NjNzNjZWYzNzQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTaGFkZXJQcm9n
cmFtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclNoYWRlclByb2dy
YW0uaApAQCAtMjUsNiArMjUsOCBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2lmIEVOQUJMRShXRUJH
TCkgfHwgRU5BQkxFKFdFQkdQVSkKKwogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
clByb3RvY29sT2JqZWN0cy5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KQEAgLTk5LDMgKzEwMSw1IEBAIHByaXZhdGU6CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShX
RUJHUFUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3RvckNhbnZhc0FnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yQ2FudmFzQWdlbnQuY3BwCmluZGV4IDFkMzk4YzU0N2NjLi41ZmZmMjk4NjMzNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDYW52YXNB
Z2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JD
YW52YXNBZ2VudC5jcHAKQEAgLTg4LDcgKzg4LDkgQEAgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6Oklu
c3BlY3RvckNhbnZhc0FnZW50KFBhZ2VBZ2VudENvbnRleHQmIGNvbnRleHQpCiAgICAgLCBtX2lu
amVjdGVkU2NyaXB0TWFuYWdlcihjb250ZXh0LmluamVjdGVkU2NyaXB0TWFuYWdlcikKICAgICAs
IG1faW5zcGVjdGVkUGFnZShjb250ZXh0Lmluc3BlY3RlZFBhZ2UpCiAgICAgLCBtX2NhbnZhc0Rl
c3Ryb3llZFRpbWVyKCp0aGlzLCAmSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmNhbnZhc0Rlc3Ryb3ll
ZFRpbWVyRmlyZWQpCisjaWYgRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKQogICAgICwg
bV9wcm9ncmFtRGVzdHJveWVkVGltZXIoKnRoaXMsICZJbnNwZWN0b3JDYW52YXNBZ2VudDo6cHJv
Z3JhbURlc3Ryb3llZFRpbWVyRmlyZWQpCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKSB8fCBFTkFC
TEUoV0VCR1BVKQogewogfQogCkBAIC0xMzIsNyArMTM0LDcgQEAgdm9pZCBJbnNwZWN0b3JDYW52
YXNBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nJikKICAgICAgICAgICAgIC8vIFRoZSBhY3R1YWwg
ImNvbnRleHQiIGZvciBXZWJHUFUgaXMgdGhlIGBXZWJHUFVEZXZpY2VgLCBub3QgdGhlIDxjYW52
YXM+LgogICAgICAgICAgICAgaWYgKGlzPEdQVUNhbnZhc0NvbnRleHQ+KGNvbnRleHQpKQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdQVSkK
IAogICAgICAgICAgICAgaWYgKGV4aXN0c0luQ3VycmVudFBhZ2UoY29udGV4dC0+Y2FudmFzQmFz
ZSgpLnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkpCiAgICAgICAgICAgICAgICAgYmluZENhbnZh
cygqY29udGV4dCwgZmFsc2UpOwpAQCAtMTQ3LDcgKzE0OSw3IEBAIHZvaWQgSW5zcGVjdG9yQ2Fu
dmFzQWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYpCiAgICAgICAgICAgICAgICAgYmluZENhbnZh
cygqZGV2aWNlLCBmYWxzZSk7CiAgICAgICAgIH0KICAgICB9Ci0jZW5kaWYKKyNlbmRpZiAvLyBF
TkFCTEUoV0VCR1BVKQogCiAjaWYgRU5BQkxFKFdFQkdMKQogICAgIHsKQEAgLTE1Nyw3ICsxNTks
NyBAQCB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjplbmFibGUoRXJyb3JTdHJpbmcmKQogICAg
ICAgICAgICAgICAgIGRpZENyZWF0ZVdlYkdMUHJvZ3JhbSgqY29udGV4dFdlYkdMQmFzZSwgKnBy
b2dyYW0pOwogICAgICAgICB9CiAgICAgfQotI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdM
KQogCiAjaWYgRU5BQkxFKFdFQkdQVSkKICAgICB7CkBAIC0xNjcsNyArMTY5LDcgQEAgdm9pZCBJ
bnNwZWN0b3JDYW52YXNBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nJikKICAgICAgICAgICAgICAg
ICBkaWRDcmVhdGVXZWJHUFVQaXBlbGluZSgqZGV2aWNlLCAqcGlwZWxpbmUpOwogICAgICAgICB9
CiAgICAgfQotI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdQVSkKIH0KIAogdm9pZCBJbnNw
ZWN0b3JDYW52YXNBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYpCkBAIC0zMDMsNiArMzA1LDcg
QEAgdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6c3RvcFJlY29yZGluZyhFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYKICAgICBkaWRGaW5pc2hSZWNvcmRpbmdDYW52YXNG
cmFtZSgqY29udGV4dCwgdHJ1ZSk7CiB9CiAKKyNpZiBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShX
RUJHUFUpCiB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpyZXF1ZXN0U2hhZGVyU291cmNlKEVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBwcm9ncmFtSWQsIGNvbnN0IFN0
cmluZyYgc2hhZGVyVHlwZVN0cmluZywgU3RyaW5nKiBvdXRTb3VyY2UpCiB7CiAgICAgYXV0byBp
bnNwZWN0b3JQcm9ncmFtID0gYXNzZXJ0SW5zcGVjdG9yUHJvZ3JhbShlcnJvclN0cmluZywgcHJv
Z3JhbUlkKTsKQEAgLTM0MCw2ICszNDMsNyBAQCB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50Ojp1
cGRhdGVTaGFkZXIoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmCiAgICAg
ICAgIGVycm9yU3RyaW5nID0gIkZhaWxlZCB0byB1cGRhdGUgc2hhZGVyIG9mIGdpdmVuIHNoYWRl
clR5cGUgZm9yIGdpdmVuIHByb2dyYW1JZCJfczsKIH0KIAorI2lmIEVOQUJMRShXRUJHTCkKIHZv
aWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnNldFNoYWRlclByb2dyYW1EaXNhYmxlZChFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgcHJvZ3JhbUlkLCBib29sIGRpc2FibGVk
KQogewogICAgIGF1dG8gaW5zcGVjdG9yUHJvZ3JhbSA9IGFzc2VydEluc3BlY3RvclByb2dyYW0o
ZXJyb3JTdHJpbmcsIHByb2dyYW1JZCk7CkBAIC0zNTcsNiArMzYxLDggQEAgdm9pZCBJbnNwZWN0
b3JDYW52YXNBZ2VudDo6c2V0U2hhZGVyUHJvZ3JhbUhpZ2hsaWdodGVkKEVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywKIAogICAgIGluc3BlY3RvclByb2dyYW0tPnNldEhpZ2hsaWdodGVkKGhpZ2hs
aWdodGVkKTsKIH0KKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCisjZW5kaWYgLy8jaWYgRU5BQkxF
KFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKQogCiB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50Ojpm
cmFtZU5hdmlnYXRlZChGcmFtZSYgZnJhbWUpCiB7CkBAIC02MjUsNyArNjMxLDcgQEAgYm9vbCBJ
bnNwZWN0b3JDYW52YXNBZ2VudDo6aXNXZWJHTFByb2dyYW1IaWdobGlnaHRlZChXZWJHTFByb2dy
YW0mIHByb2dyYW0pCiAKICAgICByZXR1cm4gaW5zcGVjdG9yUHJvZ3JhbS0+aGlnaGxpZ2h0ZWQo
KTsKIH0KLSNlbmRpZgorI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKIAogI2lmIEVOQUJMRShXRUJH
UFUpCiB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpkaWRDcmVhdGVXZWJHUFVEZXZpY2UoV2Vi
R1BVRGV2aWNlJiBkZXZpY2UpCkBAIC02ODgsNyArNjk0LDcgQEAgdm9pZCBJbnNwZWN0b3JDYW52
YXNBZ2VudDo6d2lsbERlc3Ryb3lXZWJHUFVQaXBlbGluZShXZWJHUFVQaXBlbGluZSYgcGlwZWxp
bmUpCiAKICAgICB1bmJpbmRQcm9ncmFtKCppbnNwZWN0b3JQcm9ncmFtKTsKIH0KLSNlbmRpZgor
I2VuZGlmIC8vIEVOQUJMRShXRUJHUFUpCiAKIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnN0
YXJ0UmVjb3JkaW5nKEluc3BlY3RvckNhbnZhcyYgaW5zcGVjdG9yQ2FudmFzLCBJbnNwZWN0b3I6
OlByb3RvY29sOjpSZWNvcmRpbmc6OkluaXRpYXRvciBpbml0aWF0b3IsIFJlY29yZGluZ09wdGlv
bnMmJiByZWNvcmRpbmdPcHRpb25zKQogewpAQCAtNzAwLDEwICs3MDYsMTAgQEAgdm9pZCBJbnNw
ZWN0b3JDYW52YXNBZ2VudDo6c3RhcnRSZWNvcmRpbmcoSW5zcGVjdG9yQ2FudmFzJiBpbnNwZWN0
b3JDYW52YXMsIEluc3AKICAgICAgICAgJiYgIWlzPEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4
dD4oY29udGV4dCkKICNpZiBFTkFCTEUoV0VCR0wpCiAgICAgICAgICYmICFpczxXZWJHTFJlbmRl
cmluZ0NvbnRleHQ+KGNvbnRleHQpCi0jZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCiAj
aWYgRU5BQkxFKFdFQkdMMikKICAgICAgICAgJiYgIWlzPFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ+
KGNvbnRleHQpCi0jZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wyKQogICAgICkKICAgICAg
ICAgcmV0dXJuOwogCkBAIC03MzMsNiArNzM5LDcgQEAgdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2Vu
dDo6Y2FudmFzRGVzdHJveWVkVGltZXJGaXJlZCgpCiAgICAgbV9yZW1vdmVkQ2FudmFzSWRlbnRp
ZmllcnMuY2xlYXIoKTsKIH0KIAorI2lmIEVOQUJMRShXRUJHTCkgfHwgRU5BQkxFKFdFQkdQVSkK
IHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnByb2dyYW1EZXN0cm95ZWRUaW1lckZpcmVkKCkK
IHsKICAgICBpZiAoIW1fcmVtb3ZlZFByb2dyYW1JZGVudGlmaWVycy5zaXplKCkpCkBAIC03NDMs
NiArNzUwLDcgQEAgdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6cHJvZ3JhbURlc3Ryb3llZFRp
bWVyRmlyZWQoKQogCiAgICAgbV9yZW1vdmVkUHJvZ3JhbUlkZW50aWZpZXJzLmNsZWFyKCk7CiB9
CisjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKQogCiB2b2lkIEluc3Bl
Y3RvckNhbnZhc0FnZW50OjpyZXNldCgpCiB7CkBAIC03NTYsMTAgKzc2NCwxMiBAQCB2b2lkIElu
c3BlY3RvckNhbnZhc0FnZW50OjpyZXNldCgpCiAgICAgaWYgKG1fY2FudmFzRGVzdHJveWVkVGlt
ZXIuaXNBY3RpdmUoKSkKICAgICAgICAgbV9jYW52YXNEZXN0cm95ZWRUaW1lci5zdG9wKCk7CiAK
KyNpZiBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpCiAgICAgbV9pZGVudGlmaWVyVG9J
bnNwZWN0b3JQcm9ncmFtLmNsZWFyKCk7CiAgICAgbV9yZW1vdmVkUHJvZ3JhbUlkZW50aWZpZXJz
LmNsZWFyKCk7CiAgICAgaWYgKG1fcHJvZ3JhbURlc3Ryb3llZFRpbWVyLmlzQWN0aXZlKCkpCiAg
ICAgICAgIG1fcHJvZ3JhbURlc3Ryb3llZFRpbWVyLnN0b3AoKTsKKyNlbmRpZiAvLyBFTkFCTEUo
V0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpCiAKICAgICBtX3JlY29yZGluZ0NhbnZhc0lkZW50aWZp
ZXJzLmNsZWFyKCk7CiB9CkBAIC03OTgsNyArODA4LDcgQEAgSW5zcGVjdG9yQ2FudmFzJiBJbnNw
ZWN0b3JDYW52YXNBZ2VudDo6YmluZENhbnZhcyhXZWJHUFVEZXZpY2UmIGRldmljZSwgYm9vbCBj
YXAKIAogICAgIHJldHVybiBpbnNwZWN0b3JDYW52YXM7CiB9Ci0jZW5kaWYKKyNlbmRpZiAvLyBF
TkFCTEUoV0VCR1BVKQogCiB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50Ojp1bmJpbmRDYW52YXMo
SW5zcGVjdG9yQ2FudmFzJiBpbnNwZWN0b3JDYW52YXMpCiB7CkBAIC04MTEsNyArODIxLDcgQEAg
dm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6dW5iaW5kQ2FudmFzKEluc3BlY3RvckNhbnZhcyYg
aW5zcGVjdG9yQ2FudmFzKQogCiAgICAgZm9yIChhdXRvKiBpbnNwZWN0b3JQcm9ncmFtIDogcHJv
Z3JhbXNUb1JlbW92ZSkKICAgICAgICAgdW5iaW5kUHJvZ3JhbSgqaW5zcGVjdG9yUHJvZ3JhbSk7
Ci0jZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCiAKICAgICBpZiAoYXV0byogY29udGV4
dCA9IGluc3BlY3RvckNhbnZhcy5jYW52YXNDb250ZXh0KCkpCiAgICAgICAgIGNvbnRleHQtPmNh
bnZhc0Jhc2UoKS5yZW1vdmVPYnNlcnZlcigqdGhpcyk7CkBAIC04NTYsOCArODY2LDkgQEAgUmVm
UHRyPEluc3BlY3RvckNhbnZhcz4gSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmZpbmRJbnNwZWN0b3JD
YW52YXMoV2ViR1BVRGV2aWNlJgogICAgIH0KICAgICByZXR1cm4gbnVsbHB0cjsKIH0KLSNlbmRp
ZgorI2VuZGlmIC8vIEVOQUJMRShXRUJHUFUpCiAKKyNpZiBFTkFCTEUoV0VCR0wpIHx8IEVOQUJM
RShXRUJHUFUpCiB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50Ojp1bmJpbmRQcm9ncmFtKEluc3Bl
Y3RvclNoYWRlclByb2dyYW0mIGluc3BlY3RvclByb2dyYW0pCiB7CiAgICAgU3RyaW5nIGlkZW50
aWZpZXIgPSBpbnNwZWN0b3JQcm9ncmFtLmlkZW50aWZpZXIoKTsKQEAgLTg5MSw3ICs5MDIsNyBA
QCBSZWZQdHI8SW5zcGVjdG9yU2hhZGVyUHJvZ3JhbT4gSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmZp
bmRJbnNwZWN0b3JQcm9ncmFtKFdlYkdMUAogICAgIH0KICAgICByZXR1cm4gbnVsbHB0cjsKIH0K
LSNlbmRpZgorI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKIAogI2lmIEVOQUJMRShXRUJHUFUpCiBS
ZWZQdHI8SW5zcGVjdG9yU2hhZGVyUHJvZ3JhbT4gSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmZpbmRJ
bnNwZWN0b3JQcm9ncmFtKFdlYkdQVVBpcGVsaW5lJiBwaXBlbGluZSkKQEAgLTkwMiw2ICs5MTMs
NyBAQCBSZWZQdHI8SW5zcGVjdG9yU2hhZGVyUHJvZ3JhbT4gSW5zcGVjdG9yQ2FudmFzQWdlbnQ6
OmZpbmRJbnNwZWN0b3JQcm9ncmFtKFdlYkdQVQogICAgIH0KICAgICByZXR1cm4gbnVsbHB0cjsK
IH0KLSNlbmRpZgorI2VuZGlmIC8vIEVOQUJMRShXRUJHUFUpCisjZW5kaWYgLy8gRU5BQkxFKFdF
QkdMKSB8fCBFTkFCTEUoV0VCR1BVKQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNhbnZhc0FnZW50
LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNhbnZhc0FnZW50
LmgKaW5kZXggZmY5YTUzM2UwNDguLjBlZjFhZWZiNjQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNhbnZhc0FnZW50LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDYW52YXNBZ2VudC5oCkBAIC00Mywx
NyArNDMsMTkgQEAgY2xhc3MgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOwogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBDYW52YXNSZW5kZXJpbmdDb250ZXh0OworI2lmIEVOQUJMRShXRUJHTCkg
fHwgRU5BQkxFKFdFQkdQVSkKIGNsYXNzIEluc3BlY3RvclNoYWRlclByb2dyYW07CiAjaWYgRU5B
QkxFKFdFQkdMKQogY2xhc3MgV2ViR0xQcm9ncmFtOwogY2xhc3MgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTsKLSNlbmRpZgorI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKICNpZiBFTkFCTEUoV0VC
R1BVKQogY2xhc3MgR1BVQ2FudmFzQ29udGV4dDsKIGNsYXNzIFdlYkdQVURldmljZTsKIGNsYXNz
IFdlYkdQVVBpcGVsaW5lOwogY2xhc3MgV2ViR1BVU3dhcENoYWluOwotI2VuZGlmCisjZW5kaWYg
Ly8gRU5BQkxFKFdFQkdQVSkKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJH
UFUpCiAKIHR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogCkBAIC03OSwxMCArODEsMTQgQEAg
cHVibGljOgogICAgIHZvaWQgc2V0UmVjb3JkaW5nQXV0b0NhcHR1cmVGcmFtZUNvdW50KEVycm9y
U3RyaW5nJiwgaW50IGNvdW50KSBvdmVycmlkZTsKICAgICB2b2lkIHN0YXJ0UmVjb3JkaW5nKEVy
cm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBjYW52YXNJZCwgY29uc3QgaW50KiBmcmFtZUNvdW50
LCBjb25zdCBpbnQqIG1lbW9yeUxpbWl0KSBvdmVycmlkZTsKICAgICB2b2lkIHN0b3BSZWNvcmRp
bmcoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGNhbnZhc0lkKSBvdmVycmlkZTsKKyNpZiBF
TkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpCiAgICAgdm9pZCByZXF1ZXN0U2hhZGVyU291
cmNlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBwcm9ncmFtSWQsIGNvbnN0IFN0cmluZyYg
c2hhZGVyVHlwZSwgU3RyaW5nKiBzb3VyY2UpIG92ZXJyaWRlOwogICAgIHZvaWQgdXBkYXRlU2hh
ZGVyKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBwcm9ncmFtSWQsIGNvbnN0IFN0cmluZyYg
c2hhZGVyVHlwZSwgY29uc3QgU3RyaW5nJiBzb3VyY2UpIG92ZXJyaWRlOworI2lmIEVOQUJMRShX
RUJHTCkKICAgICB2b2lkIHNldFNoYWRlclByb2dyYW1EaXNhYmxlZChFcnJvclN0cmluZyYsIGNv
bnN0IFN0cmluZyYgcHJvZ3JhbUlkLCBib29sIGRpc2FibGVkKSBvdmVycmlkZTsKICAgICB2b2lk
IHNldFNoYWRlclByb2dyYW1IaWdobGlnaHRlZChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYg
cHJvZ3JhbUlkLCBib29sIGhpZ2hsaWdodGVkKSBvdmVycmlkZTsKKyNlbmRpZiAvLyBFTkFCTEUo
V0VCR0wpCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKQogCiAgICAg
Ly8gQ2FudmFzT2JzZXJ2ZXIKICAgICB2b2lkIGNhbnZhc0NoYW5nZWQoQ2FudmFzQmFzZSYsIGNv
bnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwpAQCAtMTA0LDE0ICsxMTAsMTQgQEAgcHVibGljOgog
ICAgIHZvaWQgd2lsbERlc3Ryb3lXZWJHTFByb2dyYW0oV2ViR0xQcm9ncmFtJik7CiAgICAgYm9v
bCBpc1dlYkdMUHJvZ3JhbURpc2FibGVkKFdlYkdMUHJvZ3JhbSYpOwogICAgIGJvb2wgaXNXZWJH
TFByb2dyYW1IaWdobGlnaHRlZChXZWJHTFByb2dyYW0mKTsKLSNlbmRpZgorI2VuZGlmIC8vIEVO
QUJMRShXRUJHTCkKICNpZiBFTkFCTEUoV0VCR1BVKQogICAgIHZvaWQgZGlkQ3JlYXRlV2ViR1BV
RGV2aWNlKFdlYkdQVURldmljZSYpOwogICAgIHZvaWQgd2lsbERlc3Ryb3lXZWJHUFVEZXZpY2Uo
V2ViR1BVRGV2aWNlJik7CiAgICAgdm9pZCB3aWxsQ29uZmlndXJlU3dhcENoYWluKEdQVUNhbnZh
c0NvbnRleHQmLCBXZWJHUFVTd2FwQ2hhaW4mKTsKICAgICB2b2lkIGRpZENyZWF0ZVdlYkdQVVBp
cGVsaW5lKFdlYkdQVURldmljZSYsIFdlYkdQVVBpcGVsaW5lJik7CiAgICAgdm9pZCB3aWxsRGVz
dHJveVdlYkdQVVBpcGVsaW5lKFdlYkdQVVBpcGVsaW5lJik7Ci0jZW5kaWYKKyNlbmRpZiAvLyBF
TkFCTEUoV0VCR1BVKQogCiBwcml2YXRlOgogICAgIHN0cnVjdCBSZWNvcmRpbmdPcHRpb25zIHsK
QEAgLTEyMiwyOCArMTI4LDMyIEBAIHByaXZhdGU6CiAgICAgdm9pZCBzdGFydFJlY29yZGluZyhJ
bnNwZWN0b3JDYW52YXMmLCBJbnNwZWN0b3I6OlByb3RvY29sOjpSZWNvcmRpbmc6OkluaXRpYXRv
ciwgUmVjb3JkaW5nT3B0aW9ucyYmID0geyB9KTsKIAogICAgIHZvaWQgY2FudmFzRGVzdHJveWVk
VGltZXJGaXJlZCgpOworI2lmIEVOQUJMRShXRUJHTCkgfHwgRU5BQkxFKFdFQkdQVSkKICAgICB2
b2lkIHByb2dyYW1EZXN0cm95ZWRUaW1lckZpcmVkKCk7CisjZW5kaWYgLy8gRU5BQkxFKFdFQkdM
KSB8fCBFTkFCTEUoV0VCR1BVKQogICAgIHZvaWQgcmVzZXQoKTsKIAogICAgIEluc3BlY3RvckNh
bnZhcyYgYmluZENhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0JiwgYm9vbCBjYXB0dXJlQmFj
a3RyYWNlKTsKICNpZiBFTkFCTEUoV0VCR1BVKQogICAgIEluc3BlY3RvckNhbnZhcyYgYmluZENh
bnZhcyhXZWJHUFVEZXZpY2UmLCBib29sIGNhcHR1cmVCYWNrdHJhY2UpOwotI2VuZGlmCisjZW5k
aWYgLy8gRU5BQkxFKFdFQkdQVSkKICAgICB2b2lkIHVuYmluZENhbnZhcyhJbnNwZWN0b3JDYW52
YXMmKTsKICAgICBSZWZQdHI8SW5zcGVjdG9yQ2FudmFzPiBhc3NlcnRJbnNwZWN0b3JDYW52YXMo
RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGNhbnZhc0lkKTsKICAgICBSZWZQdHI8SW5zcGVj
dG9yQ2FudmFzPiBmaW5kSW5zcGVjdG9yQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQmKTsK
ICNpZiBFTkFCTEUoV0VCR1BVKQogICAgIFJlZlB0cjxJbnNwZWN0b3JDYW52YXM+IGZpbmRJbnNw
ZWN0b3JDYW52YXMoV2ViR1BVRGV2aWNlJik7Ci0jZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUoV0VC
R1BVKQogCisjaWYgRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKQogICAgIHZvaWQgdW5i
aW5kUHJvZ3JhbShJbnNwZWN0b3JTaGFkZXJQcm9ncmFtJik7CiAgICAgUmVmUHRyPEluc3BlY3Rv
clNoYWRlclByb2dyYW0+IGFzc2VydEluc3BlY3RvclByb2dyYW0oRXJyb3JTdHJpbmcmLCBjb25z
dCBTdHJpbmcmIHByb2dyYW1JZCk7CiAjaWYgRU5BQkxFKFdFQkdMKQogICAgIFJlZlB0cjxJbnNw
ZWN0b3JTaGFkZXJQcm9ncmFtPiBmaW5kSW5zcGVjdG9yUHJvZ3JhbShXZWJHTFByb2dyYW0mKTsK
LSNlbmRpZgorI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKICNpZiBFTkFCTEUoV0VCR1BVKQogICAg
IFJlZlB0cjxJbnNwZWN0b3JTaGFkZXJQcm9ncmFtPiBmaW5kSW5zcGVjdG9yUHJvZ3JhbShXZWJH
UFVQaXBlbGluZSYpOwotI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdQVSkKKyNlbmRpZiAv
LyBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpCiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
SW5zcGVjdG9yOjpDYW52YXNGcm9udGVuZERpc3BhdGNoZXI+IG1fZnJvbnRlbmREaXNwYXRjaGVy
OwogICAgIFJlZlB0cjxJbnNwZWN0b3I6OkNhbnZhc0JhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tl
bmREaXNwYXRjaGVyOwpAQCAtMTU1LDkgKzE2NSwxMSBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxT
dHJpbmc+IG1fcmVtb3ZlZENhbnZhc0lkZW50aWZpZXJzOwogICAgIFRpbWVyIG1fY2FudmFzRGVz
dHJveWVkVGltZXI7CiAKKyNpZiBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpCiAgICAg
SGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxJbnNwZWN0b3JTaGFkZXJQcm9ncmFtPj4gbV9pZGVudGlm
aWVyVG9JbnNwZWN0b3JQcm9ncmFtOwogICAgIFZlY3RvcjxTdHJpbmc+IG1fcmVtb3ZlZFByb2dy
YW1JZGVudGlmaWVyczsKICAgICBUaW1lciBtX3Byb2dyYW1EZXN0cm95ZWRUaW1lcjsKKyNlbmRp
ZiAvLyBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpCiAKICAgICBIYXNoU2V0PFN0cmlu
Zz4gbV9yZWNvcmRpbmdDYW52YXNJZGVudGlmaWVyczsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcAppbmRleCA2ODRkNGJl
NWQwMC4uOGYwY2I2MGZjMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9h
Z2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCkBAIC0xMjA3LDEwICsxMjA3LDE3IEBAIHN0
ZDo6dW5pcXVlX3B0cjxIaWdobGlnaHRDb25maWc+IEluc3BlY3RvckRPTUFnZW50OjpoaWdobGln
aHRDb25maWdGcm9tSW5zcGVjdG9yCiAgICAgcmV0dXJuIGhpZ2hsaWdodENvbmZpZzsKIH0KIAor
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCit2b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRJbnNw
ZWN0TW9kZUVuYWJsZWQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBib29sIGVuYWJsZWQsIGNv
bnN0IEpTT046Ok9iamVjdCogaGlnaGxpZ2h0Q29uZmlnKQoreworICAgIHNldFNlYXJjaGluZ0Zv
ck5vZGUoZXJyb3JTdHJpbmcsIGVuYWJsZWQsIGhpZ2hsaWdodENvbmZpZyA/IGhpZ2hsaWdodENv
bmZpZyA6IG51bGxwdHIsIGZhbHNlKTsKK30KKyNlbHNlCiB2b2lkIEluc3BlY3RvckRPTUFnZW50
OjpzZXRJbnNwZWN0TW9kZUVuYWJsZWQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBib29sIGVu
YWJsZWQsIGNvbnN0IEpTT046Ok9iamVjdCogaGlnaGxpZ2h0Q29uZmlnLCBjb25zdCBib29sKiBz
aG93UnVsZXJzKQogewogICAgIHNldFNlYXJjaGluZ0Zvck5vZGUoZXJyb3JTdHJpbmcsIGVuYWJs
ZWQsIGhpZ2hsaWdodENvbmZpZyA/IGhpZ2hsaWdodENvbmZpZyA6IG51bGxwdHIsIHNob3dSdWxl
cnMgJiYgKnNob3dSdWxlcnMpOwogfQorI2VuZGlmCiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6
OmhpZ2hsaWdodFJlY3QoRXJyb3JTdHJpbmcmLCBpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50
IGhlaWdodCwgY29uc3QgSlNPTjo6T2JqZWN0KiBjb2xvciwgY29uc3QgSlNPTjo6T2JqZWN0KiBv
dXRsaW5lQ29sb3IsIGNvbnN0IGJvb2wqIHVzZVBhZ2VDb29yZGluYXRlcykKIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuaAppbmRl
eCA3ZGYwZTgzZWI1My4uZThhNzRmNmQwMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmgKQEAgLTEzMSw3ICsxMzEsMTEgQEAg
cHVibGljOgogICAgIHZvaWQgZGlzY2FyZFNlYXJjaFJlc3VsdHMoRXJyb3JTdHJpbmcmLCBjb25z
dCBTdHJpbmcmIHNlYXJjaElkKSBvdmVycmlkZTsKICAgICB2b2lkIHJlc29sdmVOb2RlKEVycm9y
U3RyaW5nJiwgaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nKiBvYmplY3RHcm91cCwgUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCkgb3ZlcnJp
ZGU7CiAgICAgdm9pZCBnZXRBdHRyaWJ1dGVzKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCwgUmVm
UHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mIHJlc3VsdCkgb3ZlcnJpZGU7CisjaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKKyAgICB2b2lkIHNldEluc3BlY3RNb2RlRW5hYmxlZChFcnJvclN0cmlu
ZyYsIGJvb2wgZW5hYmxlZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBoaWdobGlnaHRDb25maWcpIG92
ZXJyaWRlOworI2Vsc2UKICAgICB2b2lkIHNldEluc3BlY3RNb2RlRW5hYmxlZChFcnJvclN0cmlu
ZyYsIGJvb2wgZW5hYmxlZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBoaWdobGlnaHRDb25maWcsIGNv
bnN0IGJvb2wqIHNob3dSdWxlcnMpIG92ZXJyaWRlOworI2VuZGlmCiAgICAgdm9pZCByZXF1ZXN0
Tm9kZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGludCogbm9kZUlkKSBv
dmVycmlkZTsKICAgICB2b2lkIHB1c2hOb2RlQnlQYXRoVG9Gcm9udGVuZChFcnJvclN0cmluZyYs
IGNvbnN0IFN0cmluZyYgcGF0aCwgaW50KiBub2RlSWQpIG92ZXJyaWRlOwogICAgIHZvaWQgaGlk
ZUhpZ2hsaWdodChFcnJvclN0cmluZyYpIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCmluZGV4IDA5ZGQ1
OTE5NDhiLi44YWQ5MDc0MTliNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9yUGFnZUFnZW50LmNwcApAQCAtMzgxLDEwICszODEsMTQgQEAg
dm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcmKQogCiAgICAgRXJy
b3JTdHJpbmcgdW51c2VkOwogICAgIHNldFNob3dQYWludFJlY3RzKHVudXNlZCwgZmFsc2UpOwor
I2lmICFQTEFURk9STShJT1NfRkFNSUxZKQogICAgIHNldFNob3dSdWxlcnModW51c2VkLCBmYWxz
ZSk7CisjZW5kaWYKICAgICBvdmVycmlkZVVzZXJBZ2VudCh1bnVzZWQsIG51bGxwdHIpOwogICAg
IHNldEVtdWxhdGVkTWVkaWEodW51c2VkLCBlbXB0eVN0cmluZygpKTsKKyNpZiBIQVZFKE9TX0RB
UktfTU9ERV9TVVBQT1JUKQogICAgIHNldEZvcmNlZEFwcGVhcmFuY2UodW51c2VkLCBlbXB0eVN0
cmluZygpKTsKKyNlbmRpZgogCiAjZGVmaW5lIERJU0FCTEVfSU5TUEVDVE9SX09WRVJSSURFX1NF
VFRJTkcobmFtZSkgXAogICAgIG1faW5zcGVjdGVkUGFnZS5zZXR0aW5ncygpLnNldCMjbmFtZSMj
SW5zcGVjdG9yT3ZlcnJpZGUoV1RGOjpudWxsb3B0KTsKQEAgLTc1MCwxMCArNzU0LDEyIEBAIHZv
aWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzZWFyY2hJblJlc291cmNlcyhFcnJvclN0cmluZyYsIGNv
bnN0IFN0cmluZyYgdGV4dCwgY29uCiAgICAgICAgIG5ldHdvcmtBZ2VudC0+c2VhcmNoT3RoZXJS
ZXF1ZXN0cyhyZWdleCwgcmVzdWx0KTsKIH0KIAorI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQog
dm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNldFNob3dSdWxlcnMoRXJyb3JTdHJpbmcmLCBib29s
IHNob3dSdWxlcnMpCiB7CiAgICAgbV9vdmVybGF5LT5zZXRTaG93UnVsZXJzKHNob3dSdWxlcnMp
OwogfQorI2VuZGlmCiAKIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzZXRTaG93UGFpbnRSZWN0
cyhFcnJvclN0cmluZyYsIGJvb2wgc2hvdykKIHsKQEAgLTg0OSwxMCArODU1LDEyIEBAIHZvaWQg
SW5zcGVjdG9yUGFnZUFnZW50OjpmcmFtZUNsZWFyZWRTY2hlZHVsZWROYXZpZ2F0aW9uKEZyYW1l
JiBmcmFtZSkKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+ZnJhbWVDbGVhcmVkU2NoZWR1bGVk
TmF2aWdhdGlvbihmcmFtZUlkKCZmcmFtZSkpOwogfQogCisjaWYgSEFWRShPU19EQVJLX01PREVf
U1VQUE9SVCkKIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpkZWZhdWx0QXBwZWFyYW5jZURpZENo
YW5nZShib29sIHVzZURhcmtBcHBlYXJhbmNlKQogewogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVy
LT5kZWZhdWx0QXBwZWFyYW5jZURpZENoYW5nZSh1c2VEYXJrQXBwZWFyYW5jZSA/IEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlBhZ2U6OkFwcGVhcmFuY2U6OkRhcmsgOiBJbnNwZWN0b3I6OlByb3RvY29s
OjpQYWdlOjpBcHBlYXJhbmNlOjpMaWdodCk7CiB9CisjZW5kaWYKIAogdm9pZCBJbnNwZWN0b3JQ
YWdlQWdlbnQ6OmRpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZChGcmFtZSYgZnJhbWUsIERPTVdy
YXBwZXJXb3JsZCYgd29ybGQpCiB7CkBAIC05ODgsMTMgKzk5Niw5IEBAIHZvaWQgSW5zcGVjdG9y
UGFnZUFnZW50OjpzZXRFbXVsYXRlZE1lZGlhKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBt
ZWRpYSkKICAgICBkb2N1bWVudC0+ZXZhbHVhdGVNZWRpYVF1ZXJpZXNBbmRSZXBvcnRDaGFuZ2Vz
KCk7CiB9CiAKKyNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQogdm9pZCBJbnNwZWN0b3JQ
YWdlQWdlbnQ6OnNldEZvcmNlZEFwcGVhcmFuY2UoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcm
IGFwcGVhcmFuY2UpCiB7Ci0gICAgaWYgKGFwcGVhcmFuY2UgPT0gbV9mb3JjZWRBcHBlYXJhbmNl
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2ZvcmNlZEFwcGVhcmFuY2UgPSBhcHBlYXJhbmNl
OwotCiAgICAgaWYgKGFwcGVhcmFuY2UgPT0gIkxpZ2h0Il9zKQogICAgICAgICBtX2luc3BlY3Rl
ZFBhZ2Uuc2V0VXNlRGFya0FwcGVhcmFuY2VPdmVycmlkZShmYWxzZSk7CiAgICAgZWxzZSBpZiAo
YXBwZWFyYW5jZSA9PSAiRGFyayJfcykKQEAgLTEwMDIsNiArMTAwNiw3IEBAIHZvaWQgSW5zcGVj
dG9yUGFnZUFnZW50OjpzZXRGb3JjZWRBcHBlYXJhbmNlKEVycm9yU3RyaW5nJiwgY29uc3QgU3Ry
aW5nJiBhcHBlYXJhCiAgICAgZWxzZQogICAgICAgICBtX2luc3BlY3RlZFBhZ2Uuc2V0VXNlRGFy
a0FwcGVhcmFuY2VPdmVycmlkZShXVEY6Om51bGxvcHQpOwogfQorI2VuZGlmCiAKIHZvaWQgSW5z
cGVjdG9yUGFnZUFnZW50OjphcHBseVVzZXJBZ2VudE92ZXJyaWRlKFN0cmluZyYgdXNlckFnZW50
KQogewpAQCAtMTA0OSw5ICsxMDU0LDkgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNuYXBz
aG90UmVjdChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCB4LCBpbnQgeSwgaW4KICAgICAq
b3V0RGF0YVVSTCA9IHNuYXBzaG90LT50b0RhdGFVUkwoImltYWdlL3BuZyJfcywgV1RGOjpudWxs
b3B0LCBQcmVzZXJ2ZVJlc29sdXRpb246Olllcyk7CiB9CiAKKyNpZiBFTkFCTEUoV0VCX0FSQ0hJ
VkUpICYmIFVTRShDRikKIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjphcmNoaXZlKEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgU3RyaW5nKiBkYXRhKQogewotI2lmIEVOQUJMRShXRUJfQVJDSElW
RSkgJiYgVVNFKENGKQogICAgIGF1dG8gYXJjaGl2ZSA9IExlZ2FjeVdlYkFyY2hpdmU6OmNyZWF0
ZShtX2luc3BlY3RlZFBhZ2UubWFpbkZyYW1lKCkpOwogICAgIGlmICghYXJjaGl2ZSkgewogICAg
ICAgICBlcnJvclN0cmluZyA9ICJDb3VsZCBub3QgY3JlYXRlIHdlYiBhcmNoaXZlIGZvciBtYWlu
IGZyYW1lIl9zOwpAQCAtMTA2MCwxMCArMTA2NSw3IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50
OjphcmNoaXZlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgU3RyaW5nKiBkYXRhKQogCiAgICAg
UmV0YWluUHRyPENGRGF0YVJlZj4gYnVmZmVyID0gYXJjaGl2ZS0+cmF3RGF0YVJlcHJlc2VudGF0
aW9uKCk7CiAgICAgKmRhdGEgPSBiYXNlNjRFbmNvZGUoQ0ZEYXRhR2V0Qnl0ZVB0cihidWZmZXIu
Z2V0KCkpLCBDRkRhdGFHZXRMZW5ndGgoYnVmZmVyLmdldCgpKSk7Ci0jZWxzZQotICAgIFVOVVNF
RF9QQVJBTShkYXRhKTsKLSAgICBlcnJvclN0cmluZyA9ICJOb3Qgc3VwcG9ydGVkIl9zOwotI2Vu
ZGlmCiB9CisjZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JQYWdlQWdlbnQuaCBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUGFnZUFnZW50LmgKaW5kZXggNmM3
NTgyOTUwMjMuLjk3ZDAzMjVkNjRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvYWdlbnRzL0luc3BlY3RvclBhZ2VBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9yUGFnZUFnZW50LmgKQEAgLTEwOCwxMyArMTA4LDE5IEBAIHB1
YmxpYzoKICAgICB2b2lkIHNldEJvb3RzdHJhcFNjcmlwdChFcnJvclN0cmluZyYsIGNvbnN0IFN0
cmluZyogb3B0aW9uYWxTb3VyY2UpIGZpbmFsOwogICAgIHZvaWQgc2VhcmNoSW5SZXNvdXJjZShF
cnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29uc3QgU3RyaW5nJiB1cmwsIGNv
bnN0IFN0cmluZyYgcXVlcnksIGNvbnN0IGJvb2wqIG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSwgY29u
c3QgYm9vbCogb3B0aW9uYWxJc1JlZ2V4LCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsUmVxdWVzdElk
LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpHZW5lcmljVHlwZXM6
OlNlYXJjaE1hdGNoPj4mKSBvdmVycmlkZTsKICAgICB2b2lkIHNlYXJjaEluUmVzb3VyY2VzKEVy
cm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgYm9vbCogY2FzZVNlbnNpdGl2ZSwgY29u
c3QgYm9vbCogaXNSZWdleCwgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6UGFnZTo6U2VhcmNoUmVzdWx0Pj4mKSBvdmVycmlkZTsKKyNpZiAhUExBVEZPUk0oSU9TX0ZB
TUlMWSkKICAgICB2b2lkIHNldFNob3dSdWxlcnMoRXJyb3JTdHJpbmcmLCBib29sKSBvdmVycmlk
ZTsKKyNlbmRpZgogICAgIHZvaWQgc2V0U2hvd1BhaW50UmVjdHMoRXJyb3JTdHJpbmcmLCBib29s
IHNob3cpIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0RW11bGF0ZWRNZWRpYShFcnJvclN0cmluZyYs
IGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOworI2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQp
CiAgICAgdm9pZCBzZXRGb3JjZWRBcHBlYXJhbmNlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5n
Jikgb3ZlcnJpZGU7CisjZW5kaWYKICAgICB2b2lkIHNuYXBzaG90Tm9kZShFcnJvclN0cmluZyYs
IGludCBub2RlSWQsIFN0cmluZyogb3V0RGF0YVVSTCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBzbmFw
c2hvdFJlY3QoRXJyb3JTdHJpbmcmLCBpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdo
dCwgY29uc3QgU3RyaW5nJiBjb29yZGluYXRlU3lzdGVtLCBTdHJpbmcqIG91dERhdGFVUkwpIG92
ZXJyaWRlOworI2lmIEVOQUJMRShXRUJfQVJDSElWRSkgJiYgVVNFKENGKQogICAgIHZvaWQgYXJj
aGl2ZShFcnJvclN0cmluZyYsIFN0cmluZyogZGF0YSkgb3ZlcnJpZGU7CisjZW5kaWYKIAogICAg
IC8vIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbgogICAgIHZvaWQgZG9tQ29udGVudEV2ZW50Rmly
ZWQoKTsKQEAgLTEyNiw3ICsxMzIsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBmcmFtZVN0b3BwZWRM
b2FkaW5nKEZyYW1lJik7CiAgICAgdm9pZCBmcmFtZVNjaGVkdWxlZE5hdmlnYXRpb24oRnJhbWUm
LCBTZWNvbmRzIGRlbGF5KTsKICAgICB2b2lkIGZyYW1lQ2xlYXJlZFNjaGVkdWxlZE5hdmlnYXRp
b24oRnJhbWUmKTsKKyNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQogICAgIHZvaWQgZGVm
YXVsdEFwcGVhcmFuY2VEaWRDaGFuZ2UoYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSk7CisjZW5kaWYK
ICAgICB2b2lkIGFwcGx5VXNlckFnZW50T3ZlcnJpZGUoU3RyaW5nJik7CiAgICAgdm9pZCBhcHBs
eUVtdWxhdGVkTWVkaWEoU3RyaW5nJik7CiAgICAgdm9pZCBkaWRDbGVhcldpbmRvd09iamVjdElu
V29ybGQoRnJhbWUmLCBET01XcmFwcGVyV29ybGQmKTsKQEAgLTE2MSw3ICsxNjksNiBAQCBwcml2
YXRlOgogICAgIEhhc2hNYXA8RG9jdW1lbnRMb2FkZXIqLCBTdHJpbmc+IG1fbG9hZGVyVG9JZGVu
dGlmaWVyOwogICAgIFN0cmluZyBtX3VzZXJBZ2VudE92ZXJyaWRlOwogICAgIFN0cmluZyBtX2Vt
dWxhdGVkTWVkaWE7Ci0gICAgU3RyaW5nIG1fZm9yY2VkQXBwZWFyYW5jZTsKICAgICBTdHJpbmcg
bV9ib290c3RyYXBTY3JpcHQ7CiAgICAgYm9vbCBtX2lzRmlyc3RMYXlvdXRBZnRlck9uTG9hZCB7
IGZhbHNlIH07CiAgICAgYm9vbCBtX3Nob3dQYWludFJlY3RzIHsgZmFsc2UgfTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Jhc2UvTWFpbi5qcyBiL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Jhc2UvTWFpbi5qcwppbmRleCAzMDA4
NjljYzgzNy4uODBkODljOTJmNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL0Jhc2UvTWFpbi5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9CYXNlL01haW4uanMKQEAgLTIzNDcsNyArMjM0Nyw3IEBAIFdJLl91cGRhdGVE
b3dubG9hZFRhYkJhckJ1dHRvbiA9IGZ1bmN0aW9uKCkKICAgICBpZiAoIVdJLl9yZWxvYWRUYWJC
YXJCdXR0b24pCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghSW5zcGVjdG9yQmFja2VuZC5o
YXNEb21haW4oIlBhZ2UiKSkgeworICAgIGlmICghSW5zcGVjdG9yQmFja2VuZC5oYXNDb21tYW5k
KCJQYWdlLmFyY2hpdmUiKSkgewogICAgICAgICBXSS5fZG93bmxvYWRUYWJCYXJCdXR0b24uaGlk
ZGVuID0gdHJ1ZTsKICAgICAgICAgV0kuX3VwZGF0ZVRhYkJhckRpdmlkZXJzKCk7CiAgICAgICAg
IHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMubWFrZSBi
L1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMubWFrZQppbmRleCAyZDU5ZDg2YmMyYS4uNmQ5
M2RlYjJkYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMubWFrZQor
KysgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UKQEAgLTMxNiwxNyArMzE2LDkg
QEAgQVVUT01BVElPTl9QUk9UT0NPTF9PVVRQVVRfRklMRVMgPSBcCiAjCiBBVVRPTUFUSU9OX1BS
T1RPQ09MX09VVFBVVF9QQVRURVJOUyA9ICQoc3Vic3QgLiwlLCQoQVVUT01BVElPTl9QUk9UT0NP
TF9PVVRQVVRfRklMRVMpKQogCi1pZmVxICgkKE9TKSxNQUNPUykKLWlmZXEgKCQoc2hlbGwgJChD
QykgLXN0ZD1nbnUrKzF6IC14IGMrKyAtRSAtUCAtZE0gJChTREtfRkxBR1MpICQoVEFSR0VUX1RS
SVBMRV9GTEFHUykgJChGUkFNRVdPUktfRkxBR1MpICQoSEVBREVSX0ZMQUdTKSAtaW5jbHVkZSAi
d3RmL1BsYXRmb3JtLmgiIC9kZXYvbnVsbCB8IGdyZXAgJyBXVEZfUExBVEZPUk1fSU9TX0ZBTUlM
WSAnIHwgY3V0IC1kJyAnIC1mMyksIDEpCi0JQVVUT01BVElPTl9CQUNLRU5EX1BMQVRGT1JNX0FS
R1VNRU5UUyA9IC0tcGxhdGZvcm0gaU9TCi1lbHNlCi0JQVVUT01BVElPTl9CQUNLRU5EX1BMQVRG
T1JNX0FSR1VNRU5UUyA9IC0tcGxhdGZvcm0gbWFjT1MKLWVuZGlmCi1lbmRpZiAjIE1BQ09TCi0K
ICMgSlNPTi1SUEMgRnJvbnRlbmQgRGlzcGF0Y2hlcnMsIEJhY2tlbmQgRGlzcGF0Y2hlcnMsIFR5
cGUgQnVpbGRlcnMKICQoQVVUT01BVElPTl9QUk9UT0NPTF9PVVRQVVRfUEFUVEVSTlMpIDogJChB
VVRPTUFUSU9OX1BST1RPQ09MX0lOUFVUX0ZJTEVTKSAkKEFVVE9NQVRJT05fUFJPVE9DT0xfR0VO
RVJBVE9SX1NDUklQVFMpCi0JJChQWVRIT04pICQoSmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVIp
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weSAtLWZyYW1ld29yayBXZWJL
aXQgJChBVVRPTUFUSU9OX0JBQ0tFTkRfUExBVEZPUk1fQVJHVU1FTlRTKSAtLWJhY2tlbmQgLS1v
dXRwdXREaXIgLiAkKEFVVE9NQVRJT05fUFJPVE9DT0xfSU5QVVRfRklMRVMpCisJJChQWVRIT04p
ICQoSmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVIpL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weSAtLWZyYW1ld29yayBXZWJLaXQgLS1iYWNrZW5kIC0tb3V0cHV0RGlyIC4g
JChBVVRPTUFUSU9OX1BST1RPQ09MX0lOUFVUX0ZJTEVTKQogCiBhbGwgOiAkKEFVVE9NQVRJT05f
UFJPVE9DT0xfT1VUUFVUX0ZJTEVTKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRm
b3JtTWFjLmNtYWtlIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybU1hYy5jbWFrZQppbmRleCAxNTc3
NGJjOTM2Ny4uNGYzOTVhNDM5OTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1N
YWMuY21ha2UKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybU1hYy5jbWFrZQpAQCAtNDc5LDEw
ICs0NzksNiBAQCBmb3JlYWNoIChfZmlsZSAke09iakNGb3J3YXJkaW5nSGVhZGVyc30pCiAgICAg
ZmlsZShXUklURSAke0ZPUldBUkRJTkdfSEVBREVSU19ESVJ9L1dlYktpdC8ke19maWxlfSAiI2lt
cG9ydCA8V2ViS2l0TGVnYWN5LyR7X2ZpbGV9PiIpCiBlbmRmb3JlYWNoICgpCiAKLWxpc3QoQVBQ
RU5EIFdlYktpdF9BVVRPTUFUSU9OX1BST1RPQ09MX0dFTkVSQVRPUl9FWFRSQV9GTEFHUwotICAg
IC0tcGxhdGZvcm09bWFjT1MKLSkKLQogc2V0KFNlY0l0ZW1TaGltRGlyZWN0b3J5ICR7Q01BS0Vf
TElCUkFSWV9PVVRQVVRfRElSRUNUT1JZfS9XZWJLaXQuZnJhbWV3b3JrL1ZlcnNpb25zL0EvRnJh
bWV3b3JrcykKIGFkZF9saWJyYXJ5KFNlY0l0ZW1TaGltIFNIQVJFRCBXZWJQcm9jZXNzL21hYy9T
ZWNJdGVtU2hpbUxpYnJhcnkubW0pCiBXRUJLSVRfQ1JFQVRFX1NZTUxJTksoU2VjSXRlbVNoaW0g
JHtTZWNJdGVtU2hpbURpcmVjdG9yeX0gJHtDTUFLRV9MSUJSQVJZX09VVFBVVF9ESVJFQ1RPUll9
L1dlYktpdC5mcmFtZXdvcmsvRnJhbWV3b3JrcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0F1dG9tYXRpb24vQXV0b21hdGlvbi5qc29uIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQXV0b21hdGlvbi9BdXRvbWF0aW9uLmpzb24KaW5kZXggN2Y1NTI1NzA1ZWYuLjNkY2Iy
MTQxZWIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL0F1
dG9tYXRpb24uanNvbgorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL0F1
dG9tYXRpb24uanNvbgpAQCAtNDM3LDcgKzQzNyw3IEBACiAgICAgICAgIHsKICAgICAgICAgICAg
ICJuYW1lIjogImluc3BlY3RCcm93c2luZ0NvbnRleHQiLAogICAgICAgICAgICAgImRlc2NyaXB0
aW9uIjogIkluc3BlY3QgdGhlIHNwZWNpZmllZCBicm93c2luZyBjb250ZXh0IHVzaW5nIFdlYiBJ
bnNwZWN0b3IuIiwKLSAgICAgICAgICAgICJwbGF0Zm9ybSI6ICJtYWNvcyIsCisgICAgICAgICAg
ICAiY29uZGl0aW9uIjogImRlZmluZWQoV1RGX1BMQVRGT1JNX01BQykgJiYgV1RGX1BMQVRGT1JN
X01BQyIsCiAgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKICAgICAgICAgICAgICAgICB7ICJu
YW1lIjogImhhbmRsZSIsICIkcmVmIjogIkJyb3dzaW5nQ29udGV4dEhhbmRsZSIsICJkZXNjcmlw
dGlvbiI6ICJUaGUgaGFuZGxlIGZvciB0aGUgYnJvd3NpbmcgY29udGV4dCB0aGF0IHNob3VsZCBi
ZSBpbnNwZWN0ZWQuIiB9LAogICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZW5hYmxlQXV0b0Nh
cHR1cmluZyIsICJ0eXBlIjogImJvb2xlYW4iLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRp
b24iOiAiSWYgdGhpcyBvcHRpb24gaXMgcHJlc2VudCBhbmQgc2V0IHRvIHRydWUsIHRoZSBXZWIg
SW5zcGVjdG9yIHdpbGwgYXV0b21hdGljYWxseSBzdGFydCBhIHRpbWVsaW5lIHJlY29yZGluZyBv
ZiB0aGUgc3BlY2lmaWVkIGJyb3dzaW5nIGNvbnRleHQgb25jZSBpdCBpcyBhdHRhY2hlZC4gTm90
ZSB0aGF0IHRoaXMgZGlzYWJsZXMgdGhlIGRlYnVnZ2VyIGZvciB0aGUgZHVyYXRpb24gb2YgdGhl
IHJlY29yZGluZy4iIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvaW5zcGVj
dG9yL21haW4ucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2luc3BlY3Rvci9tYWluLnB5Cmlu
ZGV4IDE0NjJkODAxOWQ5Li45ZTA5MDRjMjBmZiAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9pbnNwZWN0b3IvbWFpbi5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2lu
c3BlY3Rvci9tYWluLnB5CkBAIC0zOCwxNCArMzgsMTMgQEAgY2xhc3MgSW5zcGVjdG9yR2VuZXJh
dG9yVGVzdHM6CiAgICAgICAgIHNlbGYucmVzZXRfcmVzdWx0cyA9IHJlc2V0X3Jlc3VsdHMKICAg
ICAgICAgc2VsZi5leGVjdXRpdmUgPSBleGVjdXRpdmUKIAotICAgIGRlZiBnZW5lcmF0ZV9mcm9t
X2pzb24oc2VsZiwganNvbl9maWxlLCBwbGF0Zm9ybSwgb3V0cHV0X2RpcmVjdG9yeSk6CisgICAg
ZGVmIGdlbmVyYXRlX2Zyb21fanNvbihzZWxmLCBqc29uX2ZpbGUsIG91dHB1dF9kaXJlY3Rvcnkp
OgogICAgICAgICBjbWQgPSBbJ3B5dGhvbicsCiAgICAgICAgICAgICAgICAnSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5JywKICAgICAgICAgICAgICAgICctLW91dHB1dERpcicsIG91dHB1dF9kaXJlY3RvcnksCiAg
ICAgICAgICAgICAgICAnLS1mb3JjZScsCiAgICAgICAgICAgICAgICAnLS1mcmFtZXdvcmsnLCAn
VGVzdCcsCiAgICAgICAgICAgICAgICAnLS10ZXN0JywKLSAgICAgICAgICAgICAgICctLXBsYXRm
b3JtJywgcGxhdGZvcm0sCiAgICAgICAgICAgICAgICBqc29uX2ZpbGVdCiAKICAgICAgICAgZXhp
dF9jb2RlID0gMApAQCAtODgsNyArODcsNyBAQCBjbGFzcyBJbnNwZWN0b3JHZW5lcmF0b3JUZXN0
czoKICAgICAgICAgICAgICAgICBwcmludCgnUEFTUzogJXMnICUgb3V0cHV0X2ZpbGUpCiAgICAg
ICAgIHJldHVybiBjaGFuZ2VzX2ZvdW5kCiAKLSAgICBkZWYgcnVuX3Rlc3RzKHNlbGYsIHBsYXRm
b3JtLCBpbnB1dF9kaXJlY3RvcnksIHJlZmVyZW5jZV9kaXJlY3RvcnkpOgorICAgIGRlZiBydW5f
dGVzdHMoc2VsZiwgaW5wdXRfZGlyZWN0b3J5LCByZWZlcmVuY2VfZGlyZWN0b3J5KToKICAgICAg
ICAgd29ya19kaXJlY3RvcnkgPSByZWZlcmVuY2VfZGlyZWN0b3J5CiAKICAgICAgICAgcGFzc2Vk
ID0gVHJ1ZQpAQCAtMTAxLDcgKzEwMCw3IEBAIGNsYXNzIEluc3BlY3RvckdlbmVyYXRvclRlc3Rz
OgogICAgICAgICAgICAgaWYgbm90IHNlbGYucmVzZXRfcmVzdWx0czoKICAgICAgICAgICAgICAg
ICB3b3JrX2RpcmVjdG9yeSA9IHRlbXBmaWxlLm1rZHRlbXAoKQogCi0gICAgICAgICAgICBpZiBz
ZWxmLmdlbmVyYXRlX2Zyb21fanNvbihvcy5wYXRoLmpvaW4oaW5wdXRfZGlyZWN0b3J5LCBpbnB1
dF9maWxlKSwgcGxhdGZvcm0sIHdvcmtfZGlyZWN0b3J5KToKKyAgICAgICAgICAgIGlmIHNlbGYu
Z2VuZXJhdGVfZnJvbV9qc29uKG9zLnBhdGguam9pbihpbnB1dF9kaXJlY3RvcnksIGlucHV0X2Zp
bGUpLCB3b3JrX2RpcmVjdG9yeSk6CiAgICAgICAgICAgICAgICAgcGFzc2VkID0gRmFsc2UKIAog
ICAgICAgICAgICAgaWYgc2VsZi5yZXNldF9yZXN1bHRzOgpAQCAtMTIyLDIxICsxMjEsMTAgQEAg
Y2xhc3MgSW5zcGVjdG9yR2VuZXJhdG9yVGVzdHM6CiAgICAgICAgIGFsbF90ZXN0c19wYXNzZWQg
PSBUcnVlCiAKICAgICAgICAgYmFzZV9kaXJlY3RvcnkgPSBvcy5wYXRoLmpvaW4oJ0phdmFTY3Jp
cHRDb3JlJywgJ2luc3BlY3RvcicsICdzY3JpcHRzJywgJ3Rlc3RzJykKLQotICAgICAgICBwbGF0
Zm9ybV9kaXJlY3RvcmllcyA9IHsKLSAgICAgICAgICAgICdtYWNvcyc6ICdtYWMnLAotICAgICAg
ICAgICAgJ2lvcyc6ICdpb3MnLAotICAgICAgICAgICAgJ2dlbmVyaWMnOiAnZ2VuZXJpYycsCi0g
ICAgICAgICAgICAnYWxsJzogJ2FsbCcsCi0gICAgICAgIH0KLQotICAgICAgICBmb3IgcGxhdGZv
cm1fbmFtZSwgcGxhdGZvcm1fZGlyZWN0b3J5IGluIHBsYXRmb3JtX2RpcmVjdG9yaWVzLml0ZXJp
dGVtcygpOgotICAgICAgICAgICAgaW5wdXRfZGlyZWN0b3J5ID0gb3MucGF0aC5qb2luKGJhc2Vf
ZGlyZWN0b3J5LCBwbGF0Zm9ybV9kaXJlY3RvcnkpCi0gICAgICAgICAgICByZWZlcmVuY2VfZGly
ZWN0b3J5ID0gb3MucGF0aC5qb2luKGlucHV0X2RpcmVjdG9yeSwgJ2V4cGVjdGVkJykKLSAgICAg
ICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKGlucHV0X2RpcmVjdG9yeSkgb3Igbm90IG9zLnBh
dGguaXNkaXIocmVmZXJlbmNlX2RpcmVjdG9yeSk6Ci0gICAgICAgICAgICAgICAgY29udGludWUK
LQotICAgICAgICAgICAgYWxsX3Rlc3RzX3Bhc3NlZCA9IGFsbF90ZXN0c19wYXNzZWQgYW5kIHNl
bGYucnVuX3Rlc3RzKHBsYXRmb3JtX25hbWUsIGlucHV0X2RpcmVjdG9yeSwgcmVmZXJlbmNlX2Rp
cmVjdG9yeSkKKyAgICAgICAgaW5wdXRfZGlyZWN0b3J5ID0gYmFzZV9kaXJlY3RvcnkKKyAgICAg
ICAgcmVmZXJlbmNlX2RpcmVjdG9yeSA9IG9zLnBhdGguam9pbihpbnB1dF9kaXJlY3RvcnksICdl
eHBlY3RlZCcpCisgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoaW5wdXRfZGlyZWN0b3J5KSBhbmQg
b3MucGF0aC5pc2RpcihyZWZlcmVuY2VfZGlyZWN0b3J5KToKKyAgICAgICAgICAgIGFsbF90ZXN0
c19wYXNzZWQgPSBzZWxmLnJ1bl90ZXN0cyhpbnB1dF9kaXJlY3RvcnksIHJlZmVyZW5jZV9kaXJl
Y3RvcnkpCiAKICAgICAgICAgcHJpbnQoJycpCiAgICAgICAgIGlmIGFsbF90ZXN0c19wYXNzZWQ6
Cg==
</data>
<flag name="commit-queue"
          id="410903"
          type_id="3"
          status="-"
          setter="hi"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>399502</attachid>
            <date>2020-05-15 12:33:22 -0700</date>
            <delta_ts>2020-05-15 13:12:43 -0700</delta_ts>
            <desc>[Patch] WIP</desc>
            <filename>210014.diff</filename>
            <type>text/plain</type>
            <size>2683462</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKaW5kZXggMDBkMmE1N2Iz
ZWQuLjQzYmZjNmQxZDJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZl
ZFNvdXJjZXMubWFrZQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMu
bWFrZQpAQCAtNDYsNiArNDYsMjAgQEAgZWxzZQogICAgIERFTEVURSA9IHJtIC1mCiBlbmRpZgog
CitGUkFNRVdPUktfRkxBR1MgPSAkKHNoZWxsIGVjaG8gJChCVUlMVF9QUk9EVUNUU19ESVIpICQo
RlJBTUVXT1JLX1NFQVJDSF9QQVRIUykgJChTWVNURU1fRlJBTUVXT1JLX1NFQVJDSF9QQVRIUykg
fCBwZXJsIC1lICdwcmludCAiLUYgIiAuIGpvaW4oIiAtRiAiLCBzcGxpdCgiICIsIDw+KSk7JykK
K0hFQURFUl9GTEFHUyA9ICQoc2hlbGwgZWNobyAkKEJVSUxUX1BST0RVQ1RTX0RJUikgJChIRUFE
RVJfU0VBUkNIX1BBVEhTKSAkKFNZU1RFTV9IRUFERVJfU0VBUkNIX1BBVEhTKSB8IHBlcmwgLWUg
J3ByaW50ICItSSAiIC4gam9pbigiIC1JICIsIHNwbGl0KCIgIiwgPD4pKTsnKQorCitURVhUX1BS
RVBST0NFU1NPUl9GTEFHUz0tRSAtUCAtdworCitpZm5lcSAoJChTREtST09UKSwpCisJU0RLX0ZM
QUdTPS1pc3lzcm9vdCAkKFNES1JPT1QpCitlbmRpZgorCitpZmVxICgkKFVTRV9MTFZNX1RBUkdF
VF9UUklQTEVTX0ZPUl9DTEFORyksWUVTKQorCVdLX0NVUlJFTlRfQVJDSD0kKHdvcmQgMSwgJChB
UkNIUykpCisJVEFSR0VUX1RSSVBMRV9GTEFHUz0tdGFyZ2V0ICQoV0tfQ1VSUkVOVF9BUkNIKS0k
KExMVk1fVEFSR0VUX1RSSVBMRV9WRU5ET1IpLSQoTExWTV9UQVJHRVRfVFJJUExFX09TX1ZFUlNJ
T04pJChMTFZNX1RBUkdFVF9UUklQTEVfU1VGRklYKQorZW5kaWYKKwogIyAtLS0tLS0tLQogCiAu
UEhPTlkgOiBhbGwKQEAgLTI0Myw2ICsyNTcsOCBAQCBJTlNQRUNUT1JfRE9NQUlOUyA6PSBcCiAg
ICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3RvY29sL0FuaW1hdGlvbi5qc29uIFwK
ICAgICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvQXBwbGljYXRpb25DYWNo
ZS5qc29uIFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvQXVkaXQu
anNvbiBcCisgICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3RvY29sL0Jyb3dzZXIu
anNvbiBcCisgICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3RvY29sL0NQVVByb2Zp
bGVyLmpzb24gXAogICAgICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9wcm90b2NvbC9DU1Mu
anNvbiBcCiAgICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3RvY29sL0NhbnZhcy5q
c29uIFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvQ29uc29sZS5q
c29uIFwKQEAgLTI1MSwzNSArMjY3LDI0IEBAIElOU1BFQ1RPUl9ET01BSU5TIDo9IFwKICAgICAk
KEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvRE9NU3RvcmFnZS5qc29uIFwKICAg
ICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvRGF0YWJhc2UuanNvbiBcCiAg
ICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3RvY29sL0RlYnVnZ2VyLmpzb24gXAot
ICAgICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9wcm90b2NvbC9Ccm93c2VyLmpzb24gXAog
ICAgICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9wcm90b2NvbC9HZW5lcmljVHlwZXMuanNv
biBcCiAgICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3RvY29sL0hlYXAuanNvbiBc
CisgICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3RvY29sL0luZGV4ZWREQi5qc29u
IFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvSW5zcGVjdG9yLmpz
b24gXAogICAgICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9wcm90b2NvbC9MYXllclRyZWUu
anNvbiBcCisgICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3RvY29sL01lbW9yeS5q
c29uIFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvTmV0d29yay5q
c29uIFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvUGFnZS5qc29u
IFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvUmVjb3JkaW5nLmpz
b24gXAogICAgICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9wcm90b2NvbC9SdW50aW1lLmpz
b24gXAogICAgICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9wcm90b2NvbC9TY3JpcHRQcm9m
aWxlci5qc29uIFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvU2Vj
dXJpdHkuanNvbiBcCisgICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3RvY29sL1Nl
cnZpY2VXb3JrZXIuanNvbiBcCiAgICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3Rv
Y29sL1RhcmdldC5qc29uIFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9j
b2wvVGltZWxpbmUuanNvbiBcCiAgICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3Rv
Y29sL1dvcmtlci5qc29uIFwKICMKIAotaWZlcSAoJChmaW5kc3RyaW5nIEVOQUJMRV9JTkRFWEVE
X0RBVEFCQVNFLCQoRkVBVFVSRV9ERUZJTkVTKSksIEVOQUJMRV9JTkRFWEVEX0RBVEFCQVNFKQot
ICAgIElOU1BFQ1RPUl9ET01BSU5TIDo9ICQoSU5TUEVDVE9SX0RPTUFJTlMpICQoSmF2YVNjcmlw
dENvcmUpL2luc3BlY3Rvci9wcm90b2NvbC9JbmRleGVkREIuanNvbgotZW5kaWYKLQotaWZlcSAo
JChmaW5kc3RyaW5nIEVOQUJMRV9SRVNPVVJDRV9VU0FHRSwkKEZFQVRVUkVfREVGSU5FUykpLCBF
TkFCTEVfUkVTT1VSQ0VfVVNBR0UpCi0gICAgSU5TUEVDVE9SX0RPTUFJTlMgOj0gJChJTlNQRUNU
T1JfRE9NQUlOUykgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3RvY29sL0NQVVByb2Zp
bGVyLmpzb24KLSAgICBJTlNQRUNUT1JfRE9NQUlOUyA6PSAkKElOU1BFQ1RPUl9ET01BSU5TKSAk
KEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvTWVtb3J5Lmpzb24KLWVuZGlmCi0K
LWlmZXEgKCQoZmluZHN0cmluZyBFTkFCTEVfU0VSVklDRV9XT1JLRVIsJChGRUFUVVJFX0RFRklO
RVMpKSwgRU5BQkxFX1NFUlZJQ0VfV09SS0VSKQotICAgIElOU1BFQ1RPUl9ET01BSU5TIDo9ICQo
SU5TUEVDVE9SX0RPTUFJTlMpICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9wcm90b2NvbC9T
ZXJ2aWNlV29ya2VyLmpzb24KLWVuZGlmCi0KIElOU1BFQ1RPUl9HRU5FUkFUT1JfU0NSSVBUUyA9
IFwKIAkkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL19faW5pdF9f
LnB5IFwKIAkkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2NwcF9n
ZW5lcmF0b3JfdGVtcGxhdGVzLnB5IFwKQEAgLTMyNyw2ICszMzIsOSBAQCBDb21iaW5lZERvbWFp
bnMuanNvbiA6ICQoSmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVIpL2dlbmVyYXRlLWNvbWJpbmVk
LWluc3BlY3RvcgogIyBJbnNwZWN0b3IgQmFja2VuZCBEaXNwYXRjaGVycywgRnJvbnRlbmQgRGlz
cGF0Y2hlcnMsIFR5cGUgQnVpbGRlcnMKICQoSU5TUEVDVE9SX0RJU1BBVENIRVJfRklMRVNfUEFU
VEVSTlMpIDogQ29tYmluZWREb21haW5zLmpzb24gJChJTlNQRUNUT1JfR0VORVJBVE9SX1NDUklQ
VFMpCiAJJChQWVRIT04pICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weSAtLWZyYW1ld29yayBKYXZhU2NyaXB0
Q29yZSAtLW91dHB1dERpciBpbnNwZWN0b3IgLi9Db21iaW5lZERvbWFpbnMuanNvbgorCW12IGlu
c3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMgaW5zcGVjdG9yL0luc3BlY3RvckJh
Y2tlbmRDb21tYW5kcy5qcy5pbgorCSQoQ0MpICQoU0RLX0ZMQUdTKSAkKFRBUkdFVF9UUklQTEVf
RkxBR1MpICQoVEVYVF9QUkVQUk9DRVNTT1JfRkxBR1MpICQoRlJBTUVXT1JLX0ZMQUdTKSAkKEhF
QURFUl9GTEFHUykgLWluY2x1ZGUgInd0Zi9QbGF0Zm9ybS5oIiAtIDwgaW5zcGVjdG9yL0luc3Bl
Y3RvckJhY2tlbmRDb21tYW5kcy5qcy5pbiA+IGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kQ29t
bWFuZHMuanMub3V0CisJdHIgLXMgIlxuIiA8IGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kQ29t
bWFuZHMuanMub3V0ID4gaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwogCiBJ
bmplY3RlZFNjcmlwdFNvdXJjZS5oIDogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0U291cmNlLmpz
ICQoSmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVIpL2pzbWluLnB5ICQoSmF2YVNjcmlwdENvcmVf
U0NSSVBUU19ESVIpL3h4ZC5wbAogCWVjaG8gIi8vIyBzb3VyY2VVUkw9X19JbmplY3RlZFNjcmlw
dF9JbmplY3RlZFNjcmlwdFNvdXJjZS5qcyIgPiAuL0luamVjdGVkU2NyaXB0U291cmNlLm1pbi5q
cwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9D
UFVQcm9maWxlci5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2Nv
bC9DUFVQcm9maWxlci5qc29uCmluZGV4IGNmYWNkMDFkYjczLi5lMTc5MjIyMDc5NSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9DUFVQcm9maWxl
ci5qc29uCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvQ1BV
UHJvZmlsZXIuanNvbgpAQCAtMSw3ICsxLDcgQEAKIHsKICAgICAiZG9tYWluIjogIkNQVVByb2Zp
bGVyIiwKICAgICAiZGVzY3JpcHRpb24iOiAiQ1BVUHJvZmlsZXIgZG9tYWluIGV4cG9zZXMgY3B1
IHVzYWdlIHRyYWNraW5nLiIsCi0gICAgImZlYXR1cmVHdWFyZCI6ICJFTkFCTEUoUkVTT1VSQ0Vf
VVNBR0UpIiwKKyAgICAiY29uZGl0aW9uIjogIkVOQUJMRShSRVNPVVJDRV9VU0FHRSkiLAogICAg
ICJkZWJ1Z2dhYmxlVHlwZXMiOiBbInBhZ2UiLCAid2ViLXBhZ2UiXSwKICAgICAidGFyZ2V0VHlw
ZXMiOiBbInBhZ2UiXSwKICAgICAidHlwZXMiOiBbCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL0NhbnZhcy5qc29uIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9DYW52YXMuanNvbgppbmRleCBhYjU0NDQwZjA0YS4u
NjA0NjAyZTUzNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
cHJvdG9jb2wvQ2FudmFzLmpzb24KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9wcm90b2NvbC9DYW52YXMuanNvbgpAQCAtMTEsNiArMTEsNyBAQAogICAgICAgICB9LAogICAg
ICAgICB7CiAgICAgICAgICAgICAiaWQiOiAiUHJvZ3JhbUlkIiwKKyAgICAgICAgICAgICJjb25k
aXRpb24iOiAiRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKSIsCiAgICAgICAgICAgICAi
dHlwZSI6ICJzdHJpbmciLAogICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBzaGFk
ZXIgcHJvZ3JhbSBpZGVudGlmaWVyLiIKICAgICAgICAgfSwKQEAgLTIyLDExICsyMywxMyBAQAog
ICAgICAgICB9LAogICAgICAgICB7CiAgICAgICAgICAgICAiaWQiOiAiUHJvZ3JhbVR5cGUiLAor
ICAgICAgICAgICAgImNvbmRpdGlvbiI6ICJFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUp
IiwKICAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCiAgICAgICAgICAgICAiZW51bSI6IFsi
Y29tcHV0ZSIsICJyZW5kZXIiXQogICAgICAgICB9LAogICAgICAgICB7CiAgICAgICAgICAgICAi
aWQiOiAiU2hhZGVyVHlwZSIsCisgICAgICAgICAgICAiY29uZGl0aW9uIjogIkVOQUJMRShXRUJH
TCkgfHwgRU5BQkxFKFdFQkdQVSkiLAogICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKICAg
ICAgICAgICAgICJlbnVtIjogWyJjb21wdXRlIiwgImZyYWdtZW50IiwgInZlcnRleCJdCiAgICAg
ICAgIH0sCkBAIC02MSw4ICs2NCw5IEBACiAgICAgICAgIH0sCiAgICAgICAgIHsKICAgICAgICAg
ICAgICJpZCI6ICJTaGFkZXJQcm9ncmFtIiwKLSAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIs
CiAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiSW5mb3JtYXRpb24gYWJvdXQgYSBXZWJHTC9X
ZWJHTDIgc2hhZGVyIHByb2dyYW0gb3IgV2ViR1BVIHNoYWRlciBwaXBlbGluZS4iLAorICAgICAg
ICAgICAgImNvbmRpdGlvbiI6ICJFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpIiwKKyAg
ICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCiAgICAgICAgICAgICAicHJvcGVydGllcyI6IFsK
ICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInByb2dyYW1JZCIsICIkcmVmIjogIlByb2dyYW1J
ZCIgfSwKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInByb2dyYW1UeXBlIiwgIiRyZWYiOiAi
UHJvZ3JhbVR5cGUiIH0sCkBAIC0xNDcsNiArMTUxLDcgQEAKICAgICAgICAgewogICAgICAgICAg
ICAgIm5hbWUiOiAicmVxdWVzdFNoYWRlclNvdXJjZSIsCiAgICAgICAgICAgICAiZGVzY3JpcHRp
b24iOiAiUmVxdWVzdHMgdGhlIHNvdXJjZSBvZiB0aGUgc2hhZGVyIG9mIHRoZSBnaXZlbiB0eXBl
IGZyb20gdGhlIHByb2dyYW0gd2l0aCB0aGUgZ2l2ZW4gaWQuIiwKKyAgICAgICAgICAgICJjb25k
aXRpb24iOiAiRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKSIsCiAgICAgICAgICAgICAi
cGFyYW1ldGVycyI6IFsKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInByb2dyYW1JZCIsICIk
cmVmIjogIlByb2dyYW1JZCIgfSwKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNoYWRlclR5
cGUiLCAiJHJlZiI6ICJTaGFkZXJUeXBlIiB9CkBAIC0xNTgsNiArMTYzLDcgQEAKICAgICAgICAg
ewogICAgICAgICAgICAgIm5hbWUiOiAidXBkYXRlU2hhZGVyIiwKICAgICAgICAgICAgICJkZXNj
cmlwdGlvbiI6ICJDb21waWxlcyBhbmQgbGlua3MgdGhlIHNoYWRlciB3aXRoIGlkZW50aWZpZXIg
YW5kIHR5cGUgd2l0aCB0aGUgZ2l2ZW4gc291cmNlIGNvZGUuIiwKKyAgICAgICAgICAgICJjb25k
aXRpb24iOiAiRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKSIsCiAgICAgICAgICAgICAi
cGFyYW1ldGVycyI6IFsKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInByb2dyYW1JZCIsICIk
cmVmIjogIlByb2dyYW1JZCIgfSwKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNoYWRlclR5
cGUiLCAiJHJlZiI6ICJTaGFkZXJUeXBlIiB9LApAQCAtMTY3LDYgKzE3Myw3IEBACiAgICAgICAg
IHsKICAgICAgICAgICAgICJuYW1lIjogInNldFNoYWRlclByb2dyYW1EaXNhYmxlZCIsCiAgICAg
ICAgICAgICAiZGVzY3JpcHRpb24iOiAiRW5hYmxlL2Rpc2FibGUgdGhlIHZpc2liaWxpdHkgb2Yg
dGhlIGdpdmVuIHNoYWRlciBwcm9ncmFtLiIsCisgICAgICAgICAgICAiY29uZGl0aW9uIjogIkVO
QUJMRShXRUJHTCkiLAogICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCiAgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJwcm9ncmFtSWQiLCAiJHJlZiI6ICJQcm9ncmFtSWQiIH0sCiAgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJkaXNhYmxlZCIsICJ0eXBlIjogImJvb2xlYW4iIH0KQEAgLTE3
NSw2ICsxODIsNyBAQAogICAgICAgICB7CiAgICAgICAgICAgICAibmFtZSI6ICJzZXRTaGFkZXJQ
cm9ncmFtSGlnaGxpZ2h0ZWQiLAogICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkVuYWJsZS9k
aXNhYmxlIGhpZ2hsaWdodGluZyBvZiB0aGUgZ2l2ZW4gc2hhZGVyIHByb2dyYW0uIiwKKyAgICAg
ICAgICAgICJjb25kaXRpb24iOiAiRU5BQkxFKFdFQkdMKSIsCiAgICAgICAgICAgICAicGFyYW1l
dGVycyI6IFsKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInByb2dyYW1JZCIsICIkcmVmIjog
IlByb2dyYW1JZCIgfSwKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImhpZ2hsaWdodGVkIiwg
InR5cGUiOiAiYm9vbGVhbiIgfQpAQCAtMjM4LDEyICsyNDYsMTQgQEAKICAgICAgICAgfSwKICAg
ICAgICAgewogICAgICAgICAgICAgIm5hbWUiOiAicHJvZ3JhbUNyZWF0ZWQiLAorICAgICAgICAg
ICAgImNvbmRpdGlvbiI6ICJFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpIiwKICAgICAg
ICAgICAgICJwYXJhbWV0ZXJzIjogWwogICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2hhZGVy
UHJvZ3JhbSIsICIkcmVmIjogIlNoYWRlclByb2dyYW0iIH0KICAgICAgICAgICAgIF0KICAgICAg
ICAgfSwKICAgICAgICAgewogICAgICAgICAgICAgIm5hbWUiOiAicHJvZ3JhbURlbGV0ZWQiLAor
ICAgICAgICAgICAgImNvbmRpdGlvbiI6ICJFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUp
IiwKICAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwogICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAicHJvZ3JhbUlkIiwgIiRyZWYiOiAiUHJvZ3JhbUlkIiB9CiAgICAgICAgICAgICBdCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL0RPTS5qc29u
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9ET00uanNvbgppbmRl
eCAzOGNiNDhiZWRmMi4uM2FhNGEyOGNjMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvRE9NLmpzb24KKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9wcm90b2NvbC9ET00uanNvbgpAQCAtMzk5LDYgKzM5OSwxNiBAQAogICAg
ICAgICB7CiAgICAgICAgICAgICAibmFtZSI6ICJzZXRJbnNwZWN0TW9kZUVuYWJsZWQiLAogICAg
ICAgICAgICAgImRlc2NyaXB0aW9uIjogIkVudGVycyB0aGUgJ2luc3BlY3QnIG1vZGUuIEluIHRo
aXMgbW9kZSwgZWxlbWVudHMgdGhhdCB1c2VyIGlzIGhvdmVyaW5nIG92ZXIgYXJlIGhpZ2hsaWdo
dGVkLiBCYWNrZW5kIHRoZW4gZ2VuZXJhdGVzICdpbnNwZWN0JyBjb21tYW5kIHVwb24gZWxlbWVu
dCBzZWxlY3Rpb24uIiwKKyAgICAgICAgICAgICJjb25kaXRpb24iOiAiUExBVEZPUk0oSU9TX0ZB
TUlMWSkiLAorICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJlbmFibGVkIiwgInR5cGUiOiAiYm9vbGVhbiIsICJkZXNjcmlwdGlvbiI6ICJUcnVl
IHRvIGVuYWJsZSBpbnNwZWN0aW9uIG1vZGUsIGZhbHNlIHRvIGRpc2FibGUgaXQuIiB9LAorICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAiaGlnaGxpZ2h0Q29uZmlnIiwgIiRyZWYiOiAiSGlnaGxp
Z2h0Q29uZmlnIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIkEgZGVzY3JpcHRv
ciBmb3IgdGhlIGhpZ2hsaWdodCBhcHBlYXJhbmNlIG9mIGhvdmVyZWQtb3ZlciBub2Rlcy4gTWF5
IGJlIG9taXR0ZWQgaWYgPGNvZGU+ZW5hYmxlZCA9PSBmYWxzZTwvY29kZT4uIiB9CisgICAgICAg
ICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogInNldElu
c3BlY3RNb2RlRW5hYmxlZCIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRW50ZXJzIHRo
ZSAnaW5zcGVjdCcgbW9kZS4gSW4gdGhpcyBtb2RlLCBlbGVtZW50cyB0aGF0IHVzZXIgaXMgaG92
ZXJpbmcgb3ZlciBhcmUgaGlnaGxpZ2h0ZWQuIEJhY2tlbmQgdGhlbiBnZW5lcmF0ZXMgJ2luc3Bl
Y3QnIGNvbW1hbmQgdXBvbiBlbGVtZW50IHNlbGVjdGlvbi4iLAorICAgICAgICAgICAgImNvbmRp
dGlvbiI6ICIhUExBVEZPUk0oSU9TX0ZBTUlMWSkiLAogICAgICAgICAgICAgInBhcmFtZXRlcnMi
OiBbCiAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJlbmFibGVkIiwgInR5cGUiOiAiYm9vbGVh
biIsICJkZXNjcmlwdGlvbiI6ICJUcnVlIHRvIGVuYWJsZSBpbnNwZWN0aW9uIG1vZGUsIGZhbHNl
IHRvIGRpc2FibGUgaXQuIiB9LAogICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiaGlnaGxpZ2h0
Q29uZmlnIiwgIiRyZWYiOiAiSGlnaGxpZ2h0Q29uZmlnIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRl
c2NyaXB0aW9uIjogIkEgZGVzY3JpcHRvciBmb3IgdGhlIGhpZ2hsaWdodCBhcHBlYXJhbmNlIG9m
IGhvdmVyZWQtb3ZlciBub2Rlcy4gTWF5IGJlIG9taXR0ZWQgaWYgPGNvZGU+ZW5hYmxlZCA9PSBm
YWxzZTwvY29kZT4uIiB9LApAQCAtNjg4LDYgKzY5OCw3IEBACiAgICAgICAgIHsKICAgICAgICAg
ICAgICJuYW1lIjogInBvd2VyRWZmaWNpZW50UGxheWJhY2tTdGF0ZUNoYW5nZWQiLAogICAgICAg
ICAgICAgImRlc2NyaXB0aW9uIjogIkNhbGxlZCB3aGVuIGFuIGVsZW1lbnQgZW50ZXJzL2V4aXRz
IGEgcG93ZXIgZWZmaWNpZW50IHBsYXliYWNrIHN0YXRlLiIsCisgICAgICAgICAgICAiY29uZGl0
aW9uIjogIkVOQUJMRShWSURFTykiLAogICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCiAgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJub2RlSWQiLCAiJHJlZiI6ICJOb2RlSWQiIH0sCiAgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAiJHJlZiI6ICJOZXR3b3JrLlRpbWVz
dGFtcCIgfSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJv
dG9jb2wvSW5kZXhlZERCLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3By
b3RvY29sL0luZGV4ZWREQi5qc29uCmluZGV4IDlkMjMwMDg5MzA3Li44NDNkMWE2ZGNiNCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9JbmRleGVk
REIuanNvbgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL0lu
ZGV4ZWREQi5qc29uCkBAIC0xLDYgKzEsNiBAQAogewogICAgICJkb21haW4iOiAiSW5kZXhlZERC
IiwKLSAgICAiZmVhdHVyZUd1YXJkIjogIkVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKSIsCisgICAg
ImNvbmRpdGlvbiI6ICJFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkiLAogICAgICJkZWJ1Z2dhYmxl
VHlwZXMiOiBbInBhZ2UiLCAid2ViLXBhZ2UiXSwKICAgICAidGFyZ2V0VHlwZXMiOiBbInBhZ2Ui
XSwKICAgICAidHlwZXMiOiBbCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3Byb3RvY29sL0luc3BlY3Rvci5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9wcm90b2NvbC9JbnNwZWN0b3IuanNvbgppbmRleCAyYmI4ZDYyODU1YS4uZmY5MmYz
ZTcwYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9j
b2wvSW5zcGVjdG9yLmpzb24KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9w
cm90b2NvbC9JbnNwZWN0b3IuanNvbgpAQCAtMzMsNiArMzMsNyBAQAogICAgICAgICB7CiAgICAg
ICAgICAgICAibmFtZSI6ICJhY3RpdmF0ZUV4dHJhRG9tYWlucyIsCiAgICAgICAgICAgICAiZGVz
Y3JpcHRpb24iOiAiRmlyZWQgd2hlbiB0aGUgYmFja2VuZCBoYXMgYWx0ZXJuYXRlIGRvbWFpbnMg
dGhhdCBuZWVkIHRvIGJlIGFjdGl2YXRlZC4iLAorICAgICAgICAgICAgImNvbmRpdGlvbiI6ICJF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykiLAogICAgICAgICAgICAgInBh
cmFtZXRlcnMiOiBbCiAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkb21haW5zIiwgInR5cGUi
OiAiYXJyYXkiLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSwgImRlc2NyaXB0aW9uIjog
IkRvbWFpbiBuYW1lcyB0aGF0IG5lZWQgYWN0aXZhdGlvbiIgfQogICAgICAgICAgICAgXQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9NZW1vcnku
anNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvTWVtb3J5Lmpz
b24KaW5kZXggMGMzZDkxNDM4NzEuLmY1YzlkYTFiMGYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL01lbW9yeS5qc29uCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvTWVtb3J5Lmpzb24KQEAgLTEsNyArMSw3
IEBACiB7CiAgICAgImRvbWFpbiI6ICJNZW1vcnkiLAogICAgICJkZXNjcmlwdGlvbiI6ICJNZW1v
cnkgZG9tYWluIGV4cG9zZXMgcGFnZSBtZW1vcnkgdHJhY2tpbmcuIiwKLSAgICAiZmVhdHVyZUd1
YXJkIjogIkVOQUJMRShSRVNPVVJDRV9VU0FHRSkiLAorICAgICJjb25kaXRpb24iOiAiRU5BQkxF
KFJFU09VUkNFX1VTQUdFKSIsCiAgICAgImRlYnVnZ2FibGVUeXBlcyI6IFsicGFnZSIsICJ3ZWIt
cGFnZSJdLAogICAgICJ0YXJnZXRUeXBlcyI6IFsicGFnZSJdLAogICAgICJ0eXBlcyI6IFsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvUGFnZS5q
c29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9QYWdlLmpzb24K
aW5kZXggZDI3NTEyYTRmMDAuLjVkZjM3NmUyZTMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL1BhZ2UuanNvbgorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL1BhZ2UuanNvbgpAQCAtNDUsNiArNDUsNyBAQAog
ICAgICAgICB7CiAgICAgICAgICAgICAiaWQiOiAiQXBwZWFyYW5jZSIsCiAgICAgICAgICAgICAi
dHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgImNvbmRpdGlvbiI6ICJIQVZFKE9TX0RBUktf
TU9ERV9TVVBQT1JUKSIsCiAgICAgICAgICAgICAiZW51bSI6IFsiTGlnaHQiLCAiRGFyayJdLAog
ICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlBhZ2UgYXBwZWFyYW5jZSBuYW1lLiIKICAgICAg
ICAgfSwKQEAgLTIyOSw2ICsyMzAsNyBAQAogICAgICAgICB7CiAgICAgICAgICAgICAibmFtZSI6
ICJzZXRTaG93UnVsZXJzIiwKICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJSZXF1ZXN0cyB0
aGF0IGJhY2tlbmQgZHJhdyBydWxlcnMgaW4gdGhlIGluc3BlY3RvciBvdmVybGF5IiwKKyAgICAg
ICAgICAgICJjb25kaXRpb24iOiAiIVBMQVRGT1JNKElPU19GQU1JTFkpIiwKICAgICAgICAgICAg
ICJwYXJhbWV0ZXJzIjogWwogICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicmVzdWx0IiwgInR5
cGUiOiAiYm9vbGVhbiIsICJkZXNjcmlwdGlvbiI6ICJUcnVlIGZvciBzaG93aW5nIHJ1bGVycyIg
fQogICAgICAgICAgICAgXQpAQCAtMjUwLDYgKzI1Miw3IEBACiAgICAgICAgIHsKICAgICAgICAg
ICAgICJuYW1lIjogInNldEZvcmNlZEFwcGVhcmFuY2UiLAogICAgICAgICAgICAgImRlc2NyaXB0
aW9uIjogIkZvcmNlcyB0aGUgZ2l2ZW4gYXBwZWFyYW5jZSBmb3IgdGhlIHBhZ2UuIiwKKyAgICAg
ICAgICAgICJjb25kaXRpb24iOiAiSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkiLAogICAgICAg
ICAgICAgInBhcmFtZXRlcnMiOiBbCiAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJhcHBlYXJh
bmNlIiwgIiRyZWYiOiAiQXBwZWFyYW5jZSIsICJkZXNjcmlwdGlvbiI6ICJBcHBlYXJhbmNlIG5h
bWUgdG8gZm9yY2UuIEVtcHR5IHN0cmluZyBkaXNhYmxlcyB0aGUgb3ZlcnJpZGUuIiB9CiAgICAg
ICAgICAgICBdCkBAIC0yODEsNiArMjg0LDcgQEAKICAgICAgICAgewogICAgICAgICAgICAgIm5h
bWUiOiAiYXJjaGl2ZSIsCiAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiR3JhYiBhbiBhcmNo
aXZlIG9mIHRoZSBwYWdlLiIsCisgICAgICAgICAgICAiY29uZGl0aW9uIjogIkVOQUJMRShXRUJf
QVJDSElWRSkgJiYgVVNFKENGKSIsCiAgICAgICAgICAgICAicmV0dXJucyI6IFsKICAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogImRhdGEiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24i
OiAiQmFzZTY0LWVuY29kZWQgd2ViIGFyY2hpdmUuIiB9CiAgICAgICAgICAgICBdCkBAIC0zNDUs
NiArMzQ5LDcgQEAKICAgICAgICAgewogICAgICAgICAgICAgIm5hbWUiOiAiZGVmYXVsdEFwcGVh
cmFuY2VEaWRDaGFuZ2UiLAogICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkZpcmVkIHdoZW4g
cGFnZSdzIGRlZmF1bHQgYXBwZWFyYW5jZSBjaGFuZ2VzLCBldmVuIGlmIHRoZXJlIGlzIGEgZm9y
Y2VkIGFwcGVhcmFuY2UuIiwKKyAgICAgICAgICAgICJjb25kaXRpb24iOiAiSEFWRShPU19EQVJL
X01PREVfU1VQUE9SVCkiLAogICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCiAgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJhcHBlYXJhbmNlIiwgIiRyZWYiOiAiQXBwZWFyYW5jZSIsICJkZXNj
cmlwdGlvbiI6ICJOYW1lIG9mIHRoZSBhcHBlYXJhbmNlIHRoYXQgaXMgYWN0aXZlIChub3QgY29u
c2lkZXJpbmcgYW55IGZvcmNlZCBhcHBlYXJhbmNlLikiIH0KICAgICAgICAgICAgIF0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvU2VydmljZVdv
cmtlci5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9TZXJ2
aWNlV29ya2VyLmpzb24KaW5kZXggOGFjM2Q0ZjdkNmIuLjBjNTAzMGZiNjg2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL1NlcnZpY2VXb3JrZXIu
anNvbgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL1NlcnZp
Y2VXb3JrZXIuanNvbgpAQCAtMSw2ICsxLDcgQEAKIHsKICAgICAiZG9tYWluIjogIlNlcnZpY2VX
b3JrZXIiLAogICAgICJkZXNjcmlwdGlvbiI6ICJBY3Rpb25zIGFuZCBldmVudHMgcmVsYXRlZCB0
byB0aGUgaW5zcGVjdGVkIHNlcnZpY2Ugd29ya2VyLiIsCisgICAgImNvbmRpdGlvbiI6ICJFTkFC
TEUoU0VSVklDRV9XT1JLRVIpIiwKICAgICAiZGVidWdnYWJsZVR5cGVzIjogWyJzZXJ2aWNlLXdv
cmtlciJdLAogICAgICJ0YXJnZXRUeXBlcyI6IFsic2VydmljZS13b3JrZXIiXSwKICAgICAidHlw
ZXMiOiBbCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5
CmluZGV4IDk2YjU1ZTQxNjJjLi5kMGM3YmU2ZDQ5MSAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vY3BwX2dlbmVyYXRvcl90ZW1wbGF0
ZXMucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVn
ZW4vY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkKQEAgLTEwOCw3ICsxMDgsNyBAQCBwdWJsaWM6
CiAgICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZSR7ZG9tYWluTmFtZX1C
YWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVybmF0ZURpc3Bh
dGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9CiBwcml2YXRlOgogICAgIEFsdGVybmF0ZSR7
ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlciogbV9hbHRlcm5hdGVEaXNwYXRjaGVyIHsgbnVs
bHB0ciB9OwotI2VuZGlmIiIiKQorI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKSIiIikKIAogICAgIEJhY2tlbmREaXNwYXRjaGVySGVhZGVyQXN5bmNDb21t
YW5kRGVjbGFyYXRpb24gPSAoCiAgICAgIiIiICAgICR7Y2xhc3NBbmRFeHBvcnRNYWNyb30gJHtj
YWxsYmFja05hbWV9IDogcHVibGljIEJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UgewpA
QCAtMTI3LDggKzEyNyw4IEBAIHByaXZhdGU6CiAgICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJh
bXMiX3MsIHBhcmFtZXRlcnMpOwogCiAke2Rpc3BhdGNoQ2FzZXN9Ci0gICAgZWxzZQotICAgICAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRj
aGVyOjpNZXRob2ROb3RGb3VuZCwgIicke2RvbWFpbk5hbWV9LiIgKyBtZXRob2QgKyAiJyB3YXMg
bm90IGZvdW5kIik7CisKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVy
cm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIicke2RvbWFpbk5hbWV9LiIg
KyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CiB9IiIiKQogCiAgICAgQmFja2VuZERpc3Bh
dGNoZXJJbXBsZW1lbnRhdGlvbkxhcmdlU3dpdGNoID0gKApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2FsdGVy
bmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2FsdGVybmF0ZV9iYWNrZW5k
X2Rpc3BhdGNoZXJfaGVhZGVyLnB5CmluZGV4IGU2Mjc4ODBlMTMzLi5kY2QwYmYzNDdhZiAxMDA3
NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGVfY3BwX2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X2NwcF9hbHRlcm5hdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQpAQCAtODcsNyArODcs
NyBAQCBjbGFzcyBDcHBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihD
cHBHZW5lcmF0b3IpOgogICAgICAgICAgICAgJ2NvbW1hbmREZWNsYXJhdGlvbnMnOiAnXG4nLmpv
aW4oY29tbWFuZF9kZWNsYXJhdGlvbnMpLAogICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuIHNl
bGYud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCBUZW1wbGF0ZShDcHBUZW1wbGF0
ZXMuQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJIZWFkZXJEb21haW5IYW5kbGVySW50ZXJmYWNl
RGVjbGFyYXRpb24pLnN1YnN0aXR1dGUoTm9uZSwgKipoYW5kbGVyX2FyZ3MpKQorICAgICAgICBy
ZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9u
LCBUZW1wbGF0ZShDcHBUZW1wbGF0ZXMuQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJIZWFkZXJE
b21haW5IYW5kbGVySW50ZXJmYWNlRGVjbGFyYXRpb24pLnN1YnN0aXR1dGUoTm9uZSwgKipoYW5k
bGVyX2FyZ3MpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9j
b21tYW5kKHNlbGYsIGNvbW1hbmQpOgogICAgICAgICBsaW5lcyA9IFtdCkBAIC0xMDAsNCArMTAw
LDQgQEAgY2xhc3MgQ3BwQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3Io
Q3BwR2VuZXJhdG9yKToKICAgICAgICAgICAgICdwYXJhbWV0ZXJzJzogJywgJy5qb2luKHBhcmFt
ZXRlcnMpLAogICAgICAgICB9CiAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHZpcnR1YWwgdm9p
ZCAlKGNvbW1hbmROYW1lKXMoJShwYXJhbWV0ZXJzKXMpID0gMDsnICUgY29tbWFuZF9hcmdzKQot
ICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorICAgICAgICByZXR1cm4gc2VsZi53cmFw
X3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihjb21tYW5kLmNvbmRpdGlvbiwgJ1xuJy5qb2luKGxp
bmVzKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3Bw
X2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKaW5kZXggZTNmZTRlMTAwNDIuLjEwZDhmMTRi
ZDVmIDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9j
cHBfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQpAQCAtOTEsNyArOTEsNyBAQCBjbGFzcyBD
cHBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAg
ICBsaW5lcyA9IFtdCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnI2lmIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKScpCiAgICAgICAgIGZvciBkb21haW4gaW4gZG9tYWluczoK
LSAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWlu
KGRvbWFpbiwgJ2NsYXNzIEFsdGVybmF0ZSVzQmFja2VuZERpc3BhdGNoZXI7JyAlIGRvbWFpbi5k
b21haW5fbmFtZSkpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi53cmFwX3dpdGhfZ3Vh
cmRfZm9yX2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9uLCAnY2xhc3MgQWx0ZXJuYXRlJXNCYWNr
ZW5kRGlzcGF0Y2hlcjsnICUgZG9tYWluLmRvbWFpbl9uYW1lKSkKICAgICAgICAgbGluZXMuYXBw
ZW5kKCcjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpJykK
ICAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKIApAQCAtMTEzLDcgKzExMyw3IEBAIGNs
YXNzIENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAg
ICAgICAgICAgICAnY29tbWFuZERlY2xhcmF0aW9ucyc6ICJcbiIuam9pbihjb21tYW5kX2RlY2xh
cmF0aW9ucykKICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFy
ZF9mb3JfZG9tYWluKGRvbWFpbiwgVGVtcGxhdGUoQ3BwVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRj
aGVySGVhZGVyRG9tYWluSGFuZGxlckRlY2xhcmF0aW9uKS5zdWJzdGl0dXRlKE5vbmUsICoqaGFu
ZGxlcl9hcmdzKSkKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25k
aXRpb24oZG9tYWluLmNvbmRpdGlvbiwgVGVtcGxhdGUoQ3BwVGVtcGxhdGVzLkJhY2tlbmREaXNw
YXRjaGVySGVhZGVyRG9tYWluSGFuZGxlckRlY2xhcmF0aW9uKS5zdWJzdGl0dXRlKE5vbmUsICoq
aGFuZGxlcl9hcmdzKSkKIAogICAgIGRlZiBfZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX3Bh
cmFtZXRlcihzZWxmLCBwYXJhbWV0ZXIsIGNvbW1hbmQpOgogICAgICAgICBlbnVtX2FyZ3MgPSB7
CkBAIC0xNjEsNyArMTYxLDcgQEAgY2xhc3MgQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5l
cmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgICAgICdwYXJhbWV0ZXJzJzogIiwgIi5qb2lu
KHBhcmFtZXRlcnMpCiAgICAgICAgIH0KICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgdmlydHVh
bCB2b2lkICUoY29tbWFuZE5hbWUpcyglKHBhcmFtZXRlcnMpcykgPSAwOycgJSBjb21tYW5kX2Fy
Z3MpCi0gICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisgICAgICAgIHJldHVybiBzZWxm
LndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGNvbW1hbmQuY29uZGl0aW9uLCAnXG4nLmpv
aW4obGluZXMpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9hc3luY19oYW5kbGVyX2RlY2xhcmF0aW9u
X2Zvcl9jb21tYW5kKHNlbGYsIGNvbW1hbmQpOgogICAgICAgICBjYWxsYmFja05hbWUgPSAiJXND
YWxsYmFjayIgJSB1Y2ZpcnN0KGNvbW1hbmQuY29tbWFuZF9uYW1lKQpAQCAtMTkyLDcgKzE5Miw3
IEBAIGNsYXNzIENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRv
cik6CiAgICAgICAgICAgICAnb3V0UGFyYW1ldGVycyc6ICIsICIuam9pbihvdXRfcGFyYW1ldGVy
cyksCiAgICAgICAgIH0KIAotICAgICAgICByZXR1cm4gVGVtcGxhdGUoQ3BwVGVtcGxhdGVzLkJh
Y2tlbmREaXNwYXRjaGVySGVhZGVyQXN5bmNDb21tYW5kRGVjbGFyYXRpb24pLnN1YnN0aXR1dGUo
Tm9uZSwgKipjb21tYW5kX2FyZ3MpCisgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFy
ZF9mb3JfY29uZGl0aW9uKGNvbW1hbmQuY29uZGl0aW9uLCBUZW1wbGF0ZShDcHBUZW1wbGF0ZXMu
QmFja2VuZERpc3BhdGNoZXJIZWFkZXJBc3luY0NvbW1hbmREZWNsYXJhdGlvbikuc3Vic3RpdHV0
ZShOb25lLCAqKmNvbW1hbmRfYXJncykpCiAKICAgICBkZWYgX2dlbmVyYXRlX2Rpc3BhdGNoZXJf
ZGVjbGFyYXRpb25zX2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToKICAgICAgICAgY2xhc3NDb21w
b25lbnRzID0gWydjbGFzcyddCkBAIC0yMjAsNyArMjIwLDcgQEAgY2xhc3MgQ3BwQmFja2VuZERp
c3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgICAgICdjb21t
YW5kRGVjbGFyYXRpb25zJzogIlxuIi5qb2luKGRlY2xhcmF0aW9ucykKICAgICAgICAgfQogCi0g
ICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgVGVt
cGxhdGUoQ3BwVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVySGVhZGVyRG9tYWluRGlzcGF0Y2hl
ckRlY2xhcmF0aW9uKS5zdWJzdGl0dXRlKE5vbmUsICoqaGFuZGxlcl9hcmdzKSkKKyAgICAgICAg
cmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZG9tYWluLmNvbmRpdGlv
biwgVGVtcGxhdGUoQ3BwVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVySGVhZGVyRG9tYWluRGlz
cGF0Y2hlckRlY2xhcmF0aW9uKS5zdWJzdGl0dXRlKE5vbmUsICoqaGFuZGxlcl9hcmdzKSkKIAog
ICAgIGRlZiBfZ2VuZXJhdGVfZGlzcGF0Y2hlcl9kZWNsYXJhdGlvbl9mb3JfY29tbWFuZChzZWxm
LCBjb21tYW5kKToKLSAgICAgICAgcmV0dXJuICIgICAgdm9pZCAlcyhsb25nIHJlcXVlc3RJZCwg
UmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsiICUgY29tbWFuZC5jb21tYW5kX25h
bWUKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oY29t
bWFuZC5jb25kaXRpb24sICIgICAgdm9pZCAlcyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046
Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsiICUgY29tbWFuZC5jb21tYW5kX25hbWUpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5IGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tl
bmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQppbmRleCBhMTU5NjFhNjQ3NC4uZGFmMTlj
OTUwZmIgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24u
cHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQpAQCAtNjAs
NyArNjAsNyBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJh
dG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgICAgICBzZWNvbmRhcnlfaW5jbHVkZXMuYXBwZW5k
KCcnKQogICAgICAgICAgICAgc2Vjb25kYXJ5X2luY2x1ZGVzLmFwcGVuZCgnI2lmIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKScpCiAgICAgICAgICAgICBzZWNvbmRhcnlf
aW5jbHVkZXMuYXBwZW5kKCcjaW5jbHVkZSAiJXNBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMu
aCInICUgc2VsZi5wcm90b2NvbF9uYW1lKCkpCi0gICAgICAgICAgICBzZWNvbmRhcnlfaW5jbHVk
ZXMuYXBwZW5kKCcjZW5kaWYnKQorICAgICAgICAgICAgc2Vjb25kYXJ5X2luY2x1ZGVzLmFwcGVu
ZCgnI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKScpCiAK
ICAgICAgICAgaGVhZGVyX2FyZ3MgPSB7CiAgICAgICAgICAgICAncHJpbWFyeUluY2x1ZGUnOiAn
IiVzQmFja2VuZERpc3BhdGNoZXJzLmgiJyAlIHNlbGYucHJvdG9jb2xfbmFtZSgpLApAQCAtOTMs
NyArOTMsNyBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJh
dG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgICAgICAnZG9tYWluTmFtZSc6IGRvbWFpbi5kb21h
aW5fbmFtZQogICAgICAgICB9CiAgICAgICAgIGRlc3RydWN0b3IgPSAnJShkb21haW5OYW1lKXNC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On4lKGRvbWFpbk5hbWUpc0JhY2tlbmREaXNwYXRjaGVy
SGFuZGxlcigpIHsgfScgJSBkZXN0cnVjdG9yX2FyZ3MKLSAgICAgICAgcmV0dXJuIHNlbGYud3Jh
cF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCBkZXN0cnVjdG9yKQorICAgICAgICByZXR1
cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9uLCBk
ZXN0cnVjdG9yKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9u
c19mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6CiAgICAgICAgIGltcGxlbWVudGF0aW9ucyA9IFtd
CkBAIC0xMTUsMTcgKzExNSwyOSBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVu
dGF0aW9uR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgICAgICAgICAgaW1wbGVtZW50
YXRpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hc3luY19kaXNwYXRjaGVyX2NsYXNzX2Zvcl9k
b21haW4oY29tbWFuZCwgZG9tYWluKSkKICAgICAgICAgICAgIGltcGxlbWVudGF0aW9ucy5hcHBl
bmQoc2VsZi5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbl9mb3JfY29tbWFuZChj
b21tYW5kLCBkb21haW4pKQogCi0gICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9m
b3JfZG9tYWluKGRvbWFpbiwgJ1xuXG4nLmpvaW4oaW1wbGVtZW50YXRpb25zKSkKKyAgICAgICAg
cmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZG9tYWluLmNvbmRpdGlv
biwgJ1xuXG4nLmpvaW4oaW1wbGVtZW50YXRpb25zKSkKIAogICAgIGRlZiBfZ2VuZXJhdGVfc21h
bGxfZGlzcGF0Y2hlcl9zd2l0Y2hfaW1wbGVtZW50YXRpb25fZm9yX2RvbWFpbihzZWxmLCBkb21h
aW4pOgogICAgICAgICBjb21tYW5kcyA9IHNlbGYuY29tbWFuZHNfZm9yX2RvbWFpbihkb21haW4p
CiAKICAgICAgICAgY2FzZXMgPSBbXQotICAgICAgICBjYXNlcy5hcHBlbmQoJyAgICBpZiAobWV0
aG9kID09ICIlcyIpJyAlIGNvbW1hbmRzWzBdLmNvbW1hbmRfbmFtZSkKLSAgICAgICAgY2FzZXMu
YXBwZW5kKCcgICAgICAgICVzKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7JyAlIGNv
bW1hbmRzWzBdLmNvbW1hbmRfbmFtZSkKKworICAgICAgICBmaXJzdF9jb21tYW5kX3N0cmluZyA9
ICJcbiIuam9pbihbCisgICAgICAgICAgICAnICAgIGlmIChtZXRob2QgPT0gIiVzIikgeycgJSBj
b21tYW5kc1swXS5jb21tYW5kX25hbWUsCisgICAgICAgICAgICAnICAgICAgICAlcyhyZXF1ZXN0
SWQsIFdURk1vdmUocGFyYW1ldGVycykpOycgJSBjb21tYW5kc1swXS5jb21tYW5kX25hbWUsCisg
ICAgICAgICAgICAnICAgICAgICByZXR1cm47JywKKyAgICAgICAgICAgICcgICAgfScsCisgICAg
ICAgIF0pCisgICAgICAgIGNhc2VzLmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29u
ZGl0aW9uKGNvbW1hbmRzWzBdLmNvbmRpdGlvbiwgZmlyc3RfY29tbWFuZF9zdHJpbmcpKQorCiAg
ICAgICAgIGZvciBjb21tYW5kIGluIGNvbW1hbmRzWzE6XToKLSAgICAgICAgICAgIGNhc2VzLmFw
cGVuZCgnICAgIGVsc2UgaWYgKG1ldGhvZCA9PSAiJXMiKScgJSBjb21tYW5kLmNvbW1hbmRfbmFt
ZSkKLSAgICAgICAgICAgIGNhc2VzLmFwcGVuZCgnICAgICAgICAlcyhyZXF1ZXN0SWQsIFdURk1v
dmUocGFyYW1ldGVycykpOycgJSBjb21tYW5kLmNvbW1hbmRfbmFtZSkKKyAgICAgICAgICAgIGFk
ZGl0aW9uYWxfY29tbWFuZF9zdHJpbmcgPSAiXG4iLmpvaW4oWworICAgICAgICAgICAgICAgICcg
ICAgaWYgKG1ldGhvZCA9PSAiJXMiKSB7JyAlIGNvbW1hbmQuY29tbWFuZF9uYW1lLAorICAgICAg
ICAgICAgICAgICcgICAgICAgICVzKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7JyAl
IGNvbW1hbmQuY29tbWFuZF9uYW1lLAorICAgICAgICAgICAgICAgICcgICAgICAgIHJldHVybjsn
LAorICAgICAgICAgICAgICAgICcgICAgfScsCisgICAgICAgICAgICBdKQorICAgICAgICAgICAg
Y2FzZXMuYXBwZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oY29tbWFuZC5j
b25kaXRpb24sIGFkZGl0aW9uYWxfY29tbWFuZF9zdHJpbmcpKQogCiAgICAgICAgIHN3aXRjaF9h
cmdzID0gewogICAgICAgICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUsCkBA
IC0xNDMsNyArMTU1LDcgQEAgY2xhc3MgQ3BwQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlv
bkdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICAgICAgICAgICdkb21haW5OYW1lJzog
ZG9tYWluLmRvbWFpbl9uYW1lLAogICAgICAgICAgICAgICAgICdjb21tYW5kTmFtZSc6IGNvbW1h
bmQuY29tbWFuZF9uYW1lCiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlcy5hcHBlbmQo
JyAgICAgICAgICAgIHsgIiUoY29tbWFuZE5hbWUpcyIsICYlKGRvbWFpbk5hbWUpc0JhY2tlbmRE
aXNwYXRjaGVyOjolKGNvbW1hbmROYW1lKXMgfSwnICUgYXJncykKKyAgICAgICAgICAgIGNhc2Vz
LmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGNvbW1hbmQuY29uZGl0
aW9uLCAnICAgICAgICAgICAgeyAiJShjb21tYW5kTmFtZSlzIiwgJiUoZG9tYWluTmFtZSlzQmFj
a2VuZERpc3BhdGNoZXI6OiUoY29tbWFuZE5hbWUpcyB9LCcgJSBhcmdzKSkKIAogICAgICAgICBz
d2l0Y2hfYXJncyA9IHsKICAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9u
YW1lLApAQCAtMTg1LDcgKzE5Nyw3IEBAIGNsYXNzIENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVt
ZW50YXRpb25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgICAgICdmb3JtYWxQYXJh
bWV0ZXJzJzogIiwgIi5qb2luKGZvcm1hbF9wYXJhbWV0ZXJzKSwKICAgICAgICAgICAgICdvdXRQ
YXJhbWV0ZXJBc3NpZ25tZW50cyc6ICJcbiIuam9pbihvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRz
KQogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBUZW1wbGF0ZShDcHBUZW1wbGF0ZXMuQmFja2Vu
ZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkFzeW5jQ29tbWFuZCkuc3Vic3RpdHV0ZShOb25lLCAq
KmFzeW5jX2FyZ3MpCisgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29u
ZGl0aW9uKGNvbW1hbmQuY29uZGl0aW9uLCBUZW1wbGF0ZShDcHBUZW1wbGF0ZXMuQmFja2VuZERp
c3BhdGNoZXJJbXBsZW1lbnRhdGlvbkFzeW5jQ29tbWFuZCkuc3Vic3RpdHV0ZShOb25lLCAqKmFz
eW5jX2FyZ3MpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9u
X2Zvcl9jb21tYW5kKHNlbGYsIGNvbW1hbmQsIGRvbWFpbik6CiAgICAgICAgIGluX3BhcmFtZXRl
cl9kZWNsYXJhdGlvbnMgPSBbXQpAQCAtMzA0LDcgKzMxNiw3IEBAIGNsYXNzIENwcEJhY2tlbmRE
aXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPiUoY29tbWFu
ZE5hbWUpcyglKGFsdGVybmF0ZUludm9jYXRpb25QYXJhbWV0ZXJzKXMpOycgJSBjb21tYW5kX2Fy
Z3MpCiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgcmV0dXJuOycpCiAgICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoJyAgICB9JykKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnI2Vu
ZGlmJykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKScpCiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycp
CiAKICAgICAgICAgaWYgY29tbWFuZC5pc19hc3luYzoKQEAgLTMzNCw0ICszNDYsNCBAQCBjbGFz
cyBDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKENwcEdlbmVyYXRv
cik6CiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdU
Rk1vdmUoZXJyb3IpKTsnKQogCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnfScpCi0gICAgICAgIHJl
dHVybiAiXG4iLmpvaW4obGluZXMpCisgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFy
ZF9mb3JfY29uZGl0aW9uKGNvbW1hbmQuY29uZGl0aW9uLCAiXG4iLmpvaW4obGluZXMpKQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5k
X2Rpc3BhdGNoZXJfaGVhZGVyLnB5CmluZGV4IDVjZjc0Nzg1NDMzLi4xMTlkMjNjMzhjZCAxMDA3
NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9u
dGVuZF9kaXNwYXRjaGVyX2hlYWRlci5weQpAQCAtMTExLDcgKzExMSw3IEBAIGNsYXNzIENwcEZy
b250ZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICAg
ICAgJ2V2ZW50RGVjbGFyYXRpb25zJzogIlxuIi5qb2luKGV2ZW50X2RlY2xhcmF0aW9ucykKICAg
ICAgICAgfQogCi0gICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWlu
KGRvbWFpbiwgVGVtcGxhdGUoQ3BwVGVtcGxhdGVzLkZyb250ZW5kRGlzcGF0Y2hlckRvbWFpbkRp
c3BhdGNoZXJEZWNsYXJhdGlvbikuc3Vic3RpdHV0ZShOb25lLCAqKmhhbmRsZXJfYXJncykpCisg
ICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRvbWFpbi5j
b25kaXRpb24sIFRlbXBsYXRlKENwcFRlbXBsYXRlcy5Gcm9udGVuZERpc3BhdGNoZXJEb21haW5E
aXNwYXRjaGVyRGVjbGFyYXRpb24pLnN1YnN0aXR1dGUoTm9uZSwgKipoYW5kbGVyX2FyZ3MpKQog
CiAgICAgZGVmIF9nZW5lcmF0ZV9kaXNwYXRjaGVyX2RlY2xhcmF0aW9uX2Zvcl9ldmVudChzZWxm
LCBldmVudCwgZG9tYWluLCB1c2VkX2VudW1fbmFtZXMpOgogICAgICAgICBmb3JtYWxfcGFyYW1l
dGVycyA9IFtdCkBAIC0xMjMsNCArMTIzLDQgQEAgY2xhc3MgQ3BwRnJvbnRlbmREaXNwYXRjaGVy
SGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgICAgICAgICAgdXNlZF9lbnVt
X25hbWVzLmFkZChwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpCiAKICAgICAgICAgbGluZXMuYXBw
ZW5kKCIgICAgdm9pZCAlcyglcyk7IiAlIChldmVudC5ldmVudF9uYW1lLCAiLCAiLmpvaW4oZm9y
bWFsX3BhcmFtZXRlcnMpKSkKLSAgICAgICAgcmV0dXJuICJcbiIuam9pbihsaW5lcykKKyAgICAg
ICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZXZlbnQuY29uZGl0
aW9uLCAiXG4iLmpvaW4obGluZXMpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNo
ZXJfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRh
dGlvbi5weQppbmRleCA5MDRkMjI3YTZlOS4uNjZkYzZlMTg1Y2YgMTAwNzU1Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9m
cm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9k
aXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CkBAIC04Miw3ICs4Miw3IEBAIGNsYXNzIENwcEZy
b250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAg
ICAgICAgIGZvciBldmVudCBpbiBldmVudHM6CiAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbnMu
YXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25fZm9yX2V2ZW50
KGV2ZW50LCBkb21haW4pKQogCi0gICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9m
b3JfZG9tYWluKGRvbWFpbiwgJ1xuXG4nLmpvaW4oaW1wbGVtZW50YXRpb25zKSkKKyAgICAgICAg
cmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZG9tYWluLmNvbmRpdGlv
biwgJ1xuXG4nLmpvaW4oaW1wbGVtZW50YXRpb25zKSkKIAogICAgIGRlZiBfZ2VuZXJhdGVfZGlz
cGF0Y2hlcl9pbXBsZW1lbnRhdGlvbl9mb3JfZXZlbnQoc2VsZiwgZXZlbnQsIGRvbWFpbik6CiAg
ICAgICAgIGxpbmVzID0gW10KQEAgLTEzMSw0ICsxMzEsNCBAQCBjbGFzcyBDcHBGcm9udGVuZERp
c3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICBs
aW5lcy5hcHBlbmQoJycpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIG1fZnJvbnRlbmRSb3V0
ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7JykKICAgICAgICAgbGlu
ZXMuYXBwZW5kKCd9JykKLSAgICAgICAgcmV0dXJuICJcbiIuam9pbihsaW5lcykKKyAgICAgICAg
cmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZXZlbnQuY29uZGl0aW9u
LCAiXG4iLmpvaW4obGluZXMpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2hlYWRl
ci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dl
bmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19oZWFkZXIucHkKaW5kZXggNDIzZDdhMjMwMDguLjVl
MGE2ZjU2OTFlIDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaGVhZGVyLnB5CisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X2NwcF9wcm90b2NvbF90eXBlc19oZWFkZXIucHkKQEAgLTEwNSw3ICsxMDUsNyBAQCBjbGFzcyBD
cHBQcm90b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgICAg
ICAgICAgZG9tYWluX2xpbmVzLmFwcGVuZCgnc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBWRVJT
SU9OID0gJXM7JyAlIHZlcnNpb24pCiAKICAgICAgICAgICAgIGRvbWFpbl9saW5lcy5hcHBlbmQo
J30gLy8gJXMnICUgZG9tYWluLmRvbWFpbl9uYW1lKQotICAgICAgICAgICAgc2VjdGlvbnMuYXBw
ZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCAnXG4nLmpvaW4oZG9t
YWluX2xpbmVzKSkpCisgICAgICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi53cmFwX3dpdGhf
Z3VhcmRfZm9yX2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9uLCAnXG4nLmpvaW4oZG9tYWluX2xp
bmVzKSkpCiAKICAgICAgICAgaWYgbGVuKHNlY3Rpb25zKSA9PSAwOgogICAgICAgICAgICAgcmV0
dXJuICcnCkBAIC0xMzIsMTAgKzEzMiwxMCBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVzSGVhZGVy
R2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgICAgICBkb21haW5fbGluZXMuYXBwZW5k
KCduYW1lc3BhY2UgJXMgeycgJSBkb21haW4uZG9tYWluX25hbWUpCiAKICAgICAgICAgICAgICMg
Rm9yd2FyZC1kZWNsYXJlIGFsbCBjbGFzc2VzIHNvIHRoZSB0eXBlIGJ1aWxkZXJzIHdvbid0IGJy
ZWFrIGlmIHJlYXJyYW5nZWQuCi0gICAgICAgICAgICBkb21haW5fbGluZXMuZXh0ZW5kKCdjbGFz
cyAlczsnICUgb2JqZWN0X3R5cGUucmF3X25hbWUoKSBmb3Igb2JqZWN0X3R5cGUgaW4gb2JqZWN0
X3R5cGVzKQotICAgICAgICAgICAgZG9tYWluX2xpbmVzLmV4dGVuZCgnZW51bSBjbGFzcyAlczsn
ICUgZW51bV90eXBlLnJhd19uYW1lKCkgZm9yIGVudW1fdHlwZSBpbiBlbnVtX3R5cGVzKQorICAg
ICAgICAgICAgZG9tYWluX2xpbmVzLmV4dGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29u
ZGl0aW9uKG9iamVjdF90eXBlLmRlY2xhcmF0aW9uKCkuY29uZGl0aW9uLCAnY2xhc3MgJXM7JyAl
IG9iamVjdF90eXBlLnJhd19uYW1lKCkpIGZvciBvYmplY3RfdHlwZSBpbiBvYmplY3RfdHlwZXMp
CisgICAgICAgICAgICBkb21haW5fbGluZXMuZXh0ZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zv
cl9jb25kaXRpb24oZW51bV90eXBlLmRlY2xhcmF0aW9uKCkuY29uZGl0aW9uLCAnZW51bSBjbGFz
cyAlczsnICUgZW51bV90eXBlLnJhd19uYW1lKCkpIGZvciBlbnVtX3R5cGUgaW4gZW51bV90eXBl
cykKICAgICAgICAgICAgIGRvbWFpbl9saW5lcy5hcHBlbmQoJ30gLy8gJXMnICUgZG9tYWluLmRv
bWFpbl9uYW1lKQotICAgICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYud3JhcF93aXRoX2d1
YXJkX2Zvcl9kb21haW4oZG9tYWluLCAnXG4nLmpvaW4oZG9tYWluX2xpbmVzKSkpCisgICAgICAg
ICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihk
b21haW4uY29uZGl0aW9uLCAnXG4nLmpvaW4oZG9tYWluX2xpbmVzKSkpCiAKICAgICAgICAgaWYg
bGVuKHNlY3Rpb25zKSA9PSAwOgogICAgICAgICAgICAgcmV0dXJuICcnCkBAIC0xNzAsNyArMTcw
LDcgQEAgY2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0hlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3Ip
OgogICAgICAgICAgICAgaWYgbGVuKGRlY2xhcmF0aW9uLmRlc2NyaXB0aW9uKSA+IDA6CiAgICAg
ICAgICAgICAgICAgdHlwZWRlZl9saW5lcy5hcHBlbmQoJy8qICVzICovJyAlIGRlY2xhcmF0aW9u
LmRlc2NyaXB0aW9uKQogICAgICAgICAgICAgdHlwZWRlZl9saW5lcy5hcHBlbmQoJ3R5cGVkZWYg
JXMgJXM7JyAlIChwcmltaXRpdmVfbmFtZSwgZGVjbGFyYXRpb24udHlwZV9uYW1lKSkKLSAgICAg
ICAgICAgIHNlY3Rpb25zLmFwcGVuZCgnXG4nLmpvaW4odHlwZWRlZl9saW5lcykpCisgICAgICAg
ICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihk
ZWNsYXJhdGlvbi5jb25kaXRpb24sICdcbicuam9pbih0eXBlZGVmX2xpbmVzKSkpCiAKICAgICAg
ICAgZm9yIGRlY2xhcmF0aW9uIGluIGFycmF5X2RlY2xhcmF0aW9uczoKICAgICAgICAgICAgIGVs
ZW1lbnRfdHlwZSA9IENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShkZWNs
YXJhdGlvbi50eXBlLmVsZW1lbnRfdHlwZSkKQEAgLTE3OCwxMyArMTc4LDEzIEBAIGNsYXNzIENw
cFByb3RvY29sVHlwZXNIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgICAg
IGlmIGxlbihkZWNsYXJhdGlvbi5kZXNjcmlwdGlvbikgPiAwOgogICAgICAgICAgICAgICAgIHR5
cGVkZWZfbGluZXMuYXBwZW5kKCcvKiAlcyAqLycgJSBkZWNsYXJhdGlvbi5kZXNjcmlwdGlvbikK
ICAgICAgICAgICAgIHR5cGVkZWZfbGluZXMuYXBwZW5kKCd0eXBlZGVmIEpTT046OkFycmF5T2Y8
JXM+ICVzOycgJSAoZWxlbWVudF90eXBlLCBkZWNsYXJhdGlvbi50eXBlX25hbWUpKQotICAgICAg
ICAgICAgc2VjdGlvbnMuYXBwZW5kKCdcbicuam9pbih0eXBlZGVmX2xpbmVzKSkKKyAgICAgICAg
ICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRl
Y2xhcmF0aW9uLmNvbmRpdGlvbiwgJ1xuJy5qb2luKHR5cGVkZWZfbGluZXMpKSkKIAogICAgICAg
ICBsaW5lcyA9IFtdCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnbmFtZXNwYWNlICVzIHsnICUgZG9t
YWluLmRvbWFpbl9uYW1lKQogICAgICAgICBsaW5lcy5hcHBlbmQoJ1xuJy5qb2luKHNlY3Rpb25z
KSkKICAgICAgICAgbGluZXMuYXBwZW5kKCd9IC8vICVzJyAlIGRvbWFpbi5kb21haW5fbmFtZSkK
LSAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCAn
XG4nLmpvaW4obGluZXMpKQorICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9y
X2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9uLCAnXG4nLmpvaW4obGluZXMpKQogCiAgICAgZGVm
IF9nZW5lcmF0ZV9lbnVtX2NvbnN0YW50X3ZhbHVlX2NvbnZlcnNpb25fbWV0aG9kcyhzZWxmKToK
ICAgICAgICAgaWYgbm90IHNlbGYuYXNzaWduZWRfZW51bV92YWx1ZXMoKToKQEAgLTIyNyw3ICsy
MjcsNyBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRv
cik6CiAgICAgICAgIGxpbmVzLmFwcGVuZCgnbmFtZXNwYWNlICVzIHsnICUgZG9tYWluLmRvbWFp
bl9uYW1lKQogICAgICAgICBsaW5lcy5hcHBlbmQoJ1xuJy5qb2luKHNlY3Rpb25zKSkKICAgICAg
ICAgbGluZXMuYXBwZW5kKCd9IC8vICVzJyAlIGRvbWFpbi5kb21haW5fbmFtZSkKLSAgICAgICAg
cmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCAnXG4nLmpvaW4o
bGluZXMpKQorICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlv
bihkb21haW4uY29uZGl0aW9uLCAnXG4nLmpvaW4obGluZXMpKQogCiAgICAgZGVmIF9nZW5lcmF0
ZV9jbGFzc19mb3Jfb2JqZWN0X2RlY2xhcmF0aW9uKHNlbGYsIHR5cGVfZGVjbGFyYXRpb24sIGRv
bWFpbik6CiAgICAgICAgIGlmIGxlbih0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVycykgPT0g
MDoKQEAgLTI3OSwxMyArMjc5LDEzIEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNIZWFkZXJHZW5l
cmF0b3IoQ3BwR2VuZXJhdG9yKToKIAogICAgICAgICBsaW5lcy5hcHBlbmQoJ307JykKICAgICAg
ICAgbGluZXMuYXBwZW5kKCcnKQotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorICAg
ICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbih0eXBlX2RlY2xh
cmF0aW9uLmNvbmRpdGlvbiwgJ1xuJy5qb2luKGxpbmVzKSkKIAogICAgIGRlZiBfZ2VuZXJhdGVf
c3RydWN0X2Zvcl9lbnVtX2RlY2xhcmF0aW9uKHNlbGYsIGVudW1fZGVjbGFyYXRpb24pOgogICAg
ICAgICBsaW5lcyA9IFtdCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnLyogJXMgKi8nICUgZW51bV9k
ZWNsYXJhdGlvbi5kZXNjcmlwdGlvbikKICAgICAgICAgbGluZXMuZXh0ZW5kKHNlbGYuX2dlbmVy
YXRlX3N0cnVjdF9mb3JfZW51bV90eXBlKGVudW1fZGVjbGFyYXRpb24udHlwZV9uYW1lLCBlbnVt
X2RlY2xhcmF0aW9uLnR5cGUpKQotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorICAg
ICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihlbnVtX2RlY2xh
cmF0aW9uLmNvbmRpdGlvbiwgJ1xuJy5qb2luKGxpbmVzKSkKIAogICAgIGRlZiBfZ2VuZXJhdGVf
c3RydWN0X2Zvcl9hbm9ueW1vdXNfZW51bV9tZW1iZXIoc2VsZiwgZW51bV9tZW1iZXIpOgogICAg
ICAgICBkZWYgYXBwbHlfaW5kZW50YXRpb24obGluZSk6CkBAIC0zODEsMTAgKzM4MSwxMCBAQCBj
bGFzcyBDcHBQcm90b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAg
ICAgICAgICBmb3IgdHlwZV9kZWNsYXJhdGlvbiBpbiBkZWNsYXJhdGlvbnNfdG9fZ2VuZXJhdGU6
CiAgICAgICAgICAgICAgICAgZm9yIHR5cGVfbWVtYmVyIGluIHR5cGVfZGVjbGFyYXRpb24udHlw
ZV9tZW1iZXJzOgogICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGVfbWVtYmVy
LnR5cGUsIEVudW1UeXBlKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVfYXJndW1lbnRz
LmFwcGVuZCgoQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlX21lbWJlcih0
eXBlX21lbWJlciwgdHlwZV9kZWNsYXJhdGlvbiksIEZhbHNlKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHR5cGVfYXJndW1lbnRzLmFwcGVuZCgoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2Nv
bmRpdGlvbih0eXBlX2RlY2xhcmF0aW9uLmNvbmRpdGlvbiwgQ3BwR2VuZXJhdG9yLmNwcF9wcm90
b2NvbF90eXBlX2Zvcl90eXBlX21lbWJlcih0eXBlX21lbWJlciwgdHlwZV9kZWNsYXJhdGlvbikp
LCBGYWxzZSkpCiAKICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGVfZGVjbGFyYXRp
b24udHlwZSwgT2JqZWN0VHlwZSk6Ci0gICAgICAgICAgICAgICAgICAgIHR5cGVfYXJndW1lbnRz
LmFwcGVuZCgoQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKHR5cGVfZGVj
bGFyYXRpb24udHlwZSksIEdlbmVyYXRvci50eXBlX25lZWRzX3J1bnRpbWVfY2FzdHModHlwZV9k
ZWNsYXJhdGlvbi50eXBlKSkpCisgICAgICAgICAgICAgICAgICAgIHR5cGVfYXJndW1lbnRzLmFw
cGVuZCgoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbih0eXBlX2RlY2xhcmF0aW9u
LmNvbmRpdGlvbiwgQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKHR5cGVf
ZGVjbGFyYXRpb24udHlwZSkpLCBHZW5lcmF0b3IudHlwZV9uZWVkc19ydW50aW1lX2Nhc3RzKHR5
cGVfZGVjbGFyYXRpb24udHlwZSkpKQogCiAgICAgICAgIHN0cnVjdF9rZXl3b3JkcyA9IFsnc3Ry
dWN0J10KICAgICAgICAgZnVuY3Rpb25fa2V5d29yZHMgPSBbJ3N0YXRpYyB2b2lkJ10KQEAgLTQz
NywxOSArNDM3LDIwIEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNIZWFkZXJHZW5lcmF0b3IoQ3Bw
R2VuZXJhdG9yKToKICAgICAgICAgICAgIGRvbWFpbl9saW5lcy5hcHBlbmQoIi8vIEVudW1zIGlu
IHRoZSAnJXMnIERvbWFpbiIgJSBkb21haW4uZG9tYWluX25hbWUpCiAgICAgICAgICAgICBmb3Ig
ZW51bV90eXBlIGluIGVudW1fdHlwZXM6CiAgICAgICAgICAgICAgICAgY3BwX3Byb3RvY29sX3R5
cGUgPSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGUoZW51bV90eXBlKQot
ICAgICAgICAgICAgICAgIGRvbWFpbl9saW5lcy5hcHBlbmQoJ3RlbXBsYXRlPD4nKQotICAgICAg
ICAgICAgICAgIGRvbWFpbl9saW5lcy5hcHBlbmQoJyVzIHBhcnNlRW51bVZhbHVlRnJvbVN0cmlu
Zzwlcz4oY29uc3QgU3RyaW5nJik7JyAlIChyZXR1cm5fdHlwZV93aXRoX2V4cG9ydF9tYWNybyhj
cHBfcHJvdG9jb2xfdHlwZSksIGNwcF9wcm90b2NvbF90eXBlKSkKKyAgICAgICAgICAgICAgICBk
b21haW5fbGluZXMuYXBwZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZW51
bV90eXBlLmRlY2xhcmF0aW9uKCkuY29uZGl0aW9uLCAndGVtcGxhdGU8PlxuJXMgcGFyc2VFbnVt
VmFsdWVGcm9tU3RyaW5nPCVzPihjb25zdCBTdHJpbmcmKTsnICUgKHJldHVybl90eXBlX3dpdGhf
ZXhwb3J0X21hY3JvKGNwcF9wcm90b2NvbF90eXBlKSwgY3BwX3Byb3RvY29sX3R5cGUpKSkKIAog
ICAgICAgICAgICAgZm9yIG9iamVjdF90eXBlIGluIG9iamVjdF90eXBlczoKKyAgICAgICAgICAg
ICAgICBvYmplY3RfbGluZXMgPSBbXQogICAgICAgICAgICAgICAgIGZvciBlbnVtX21lbWJlciBp
biBmaWx0ZXIodHlwZV9tZW1iZXJfaXNfYW5vbnltb3VzX2VudW1fdHlwZSwgb2JqZWN0X3R5cGUu
bWVtYmVycyk6CiAgICAgICAgICAgICAgICAgICAgIGNwcF9wcm90b2NvbF90eXBlID0gQ3BwR2Vu
ZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlX21lbWJlcihlbnVtX21lbWJlciwgb2Jq
ZWN0X3R5cGUuZGVjbGFyYXRpb24oKSkKLSAgICAgICAgICAgICAgICAgICAgZG9tYWluX2xpbmVz
LmFwcGVuZCgndGVtcGxhdGU8PicpCi0gICAgICAgICAgICAgICAgICAgIGRvbWFpbl9saW5lcy5h
cHBlbmQoJyVzIHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzwlcz4oY29uc3QgU3RyaW5nJik7JyAl
IChyZXR1cm5fdHlwZV93aXRoX2V4cG9ydF9tYWNybyhjcHBfcHJvdG9jb2xfdHlwZSksIGNwcF9w
cm90b2NvbF90eXBlKSkKKyAgICAgICAgICAgICAgICAgICAgb2JqZWN0X2xpbmVzLmFwcGVuZCgn
dGVtcGxhdGU8PlxuJXMgcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPCVzPihjb25zdCBTdHJpbmcm
KTsnICUgKHJldHVybl90eXBlX3dpdGhfZXhwb3J0X21hY3JvKGNwcF9wcm90b2NvbF90eXBlKSwg
Y3BwX3Byb3RvY29sX3R5cGUpKQorICAgICAgICAgICAgICAgIGlmIGxlbihvYmplY3RfbGluZXMp
OgorICAgICAgICAgICAgICAgICAgICBkb21haW5fbGluZXMuYXBwZW5kKHNlbGYud3JhcF93aXRo
X2d1YXJkX2Zvcl9jb25kaXRpb24ob2JqZWN0X3R5cGUuZGVjbGFyYXRpb24oKS5jb25kaXRpb24s
ICdcbicuam9pbihvYmplY3RfbGluZXMpKSkKIAogICAgICAgICAgICAgaWYgbGVuKGRvbWFpbl9s
aW5lcykgPT0gMToKICAgICAgICAgICAgICAgICBjb250aW51ZSAgIyBObyByZWFsIGRlY2xhcmF0
aW9ucyB0byBlbWl0LCBqdXN0IHRoZSBkb21haW4gY29tbWVudC4gU2tpcC4KIAotICAgICAgICAg
ICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWlu
LCAnXG4nLmpvaW4oZG9tYWluX2xpbmVzKSkpCisgICAgICAgICAgICBzZWN0aW9ucy5hcHBlbmQo
c2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9uLCAnXG4n
LmpvaW4oZG9tYWluX2xpbmVzKSkpCiAKICAgICAgICAgaWYgbGVuKHNlY3Rpb25zKSA9PSAxOgog
ICAgICAgICAgICAgcmV0dXJuIFtdICMgTm8gcmVhbCBzZWN0aW9ucyB0byBlbWl0LCBqdXN0IHRo
ZSBuYW1lc3BhY2UgYW5kIHRlbXBsYXRlIGRlY2xhcmF0aW9uLiBTa2lwLgpAQCAtNDc0LDE0ICs0
NzUsMjAgQEAgY2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0hlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0
b3IpOgogICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKICAgICAgICAgICAgICAgICBs
aW5lcy5hcHBlbmQoJ3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsnKQog
Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycpCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQo
Ii8vIEhhc2ggZGVjbGFyYXRpb25zIGluIHRoZSAnJXMnIERvbWFpbiIgJSBkb21haW4uZG9tYWlu
X25hbWUpCisgICAgICAgICAgICBkb21haW5fbGluZXMgPSBbXQorCisgICAgICAgICAgICBkb21h
aW5fbGluZXMuYXBwZW5kKCcnKQorICAgICAgICAgICAgZG9tYWluX2xpbmVzLmFwcGVuZCgiLy8g
SGFzaCBkZWNsYXJhdGlvbnMgaW4gdGhlICclcycgRG9tYWluIiAlIGRvbWFpbi5kb21haW5fbmFt
ZSkKIAogICAgICAgICAgICAgZm9yIGVudW1fdHlwZSBpbiBlbnVtX3R5cGVzOgotICAgICAgICAg
ICAgICAgIGxpbmVzLmFwcGVuZCgndGVtcGxhdGU8PicpCi0gICAgICAgICAgICAgICAgbGluZXMu
YXBwZW5kKCdzdHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6JXM6OiVzPiB7
JyAlIChkb21haW4uZG9tYWluX25hbWUsIGVudW1fdHlwZS5yYXdfbmFtZSgpKSkKLSAgICAgICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICB0eXBlZGVmIEludEhhc2g8SW5zcGVjdG9yOjpQcm90
b2NvbDo6JXM6OiVzPiBIYXNoOycgJSAoZG9tYWluLmRvbWFpbl9uYW1lLCBlbnVtX3R5cGUucmF3
X25hbWUoKSkpCi0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCd9OycpCisgICAgICAgICAg
ICAgICAgZW51bV9saW5lcyA9IFtdCisgICAgICAgICAgICAgICAgZW51bV9saW5lcy5hcHBlbmQo
J3RlbXBsYXRlPD4nKQorICAgICAgICAgICAgICAgIGVudW1fbGluZXMuYXBwZW5kKCdzdHJ1Y3Qg
RGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6JXM6OiVzPiB7JyAlIChkb21haW4uZG9t
YWluX25hbWUsIGVudW1fdHlwZS5yYXdfbmFtZSgpKSkKKyAgICAgICAgICAgICAgICBlbnVtX2xp
bmVzLmFwcGVuZCgnICAgIHR5cGVkZWYgSW50SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjolczo6
JXM+IEhhc2g7JyAlIChkb21haW4uZG9tYWluX25hbWUsIGVudW1fdHlwZS5yYXdfbmFtZSgpKSkK
KyAgICAgICAgICAgICAgICBlbnVtX2xpbmVzLmFwcGVuZCgnfTsnKQorICAgICAgICAgICAgICAg
IGRvbWFpbl9saW5lcy5hcHBlbmQoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihl
bnVtX3R5cGUuZGVjbGFyYXRpb24oKS5jb25kaXRpb24sICdcbicuam9pbihlbnVtX2xpbmVzKSkp
CisKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29u
ZGl0aW9uKGRvbWFpbi5jb25kaXRpb24sICdcbicuam9pbihkb21haW5fbGluZXMpKSkKIAogICAg
ICAgICBpZiBsZW4obGluZXMpID09IDA6CiAgICAgICAgICAgICByZXR1cm4gW10KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRlX2NwcF9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weSBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90
eXBlc19pbXBsZW1lbnRhdGlvbi5weQppbmRleCA2NWNlYmY1ODNlZS4uODUzMGU2NTQzMWYgMTAw
NzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L2dlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weQorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBf
cHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkKQEAgLTEzMCw3ICsxMzAsNyBAQCBjbGFz
cyBDcHBQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToK
ICAgICAgICAgICAgICAgICAnfScsCiAgICAgICAgICAgICAgICAgJycsCiAgICAgICAgICAgICBd
KQotICAgICAgICAgICAgcmV0dXJuIGJvZHlfbGluZXMKKyAgICAgICAgICAgIHJldHVybiAnXG4n
LmpvaW4oYm9keV9saW5lcykKIAogICAgICAgICB0eXBlX2RlY2xhcmF0aW9ucyA9IHNlbGYudHlw
ZV9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbihkb21haW4pCiAgICAgICAgIGRlY2xhcmF0aW9uX3R5
cGVzID0gW2RlY2wudHlwZSBmb3IgZGVjbCBpbiB0eXBlX2RlY2xhcmF0aW9uc10KQEAgLTE0Niwx
NyArMTQ2LDIwIEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRv
cihDcHBHZW5lcmF0b3IpOgogICAgICAgICBsaW5lcy5hcHBlbmQoIi8vIEVudW1zIGluIHRoZSAn
JXMnIERvbWFpbiIgJSBkb21haW4uZG9tYWluX25hbWUpCiAgICAgICAgIGZvciBlbnVtX3R5cGUg
aW4gZW51bV90eXBlczoKICAgICAgICAgICAgIGNwcF9wcm90b2NvbF90eXBlID0gQ3BwR2VuZXJh
dG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKGVudW1fdHlwZSkKLSAgICAgICAgICAgIGxp
bmVzLmV4dGVuZChnZW5lcmF0ZV9jb252ZXJzaW9uX21ldGhvZF9ib2R5KGVudW1fdHlwZSwgY3Bw
X3Byb3RvY29sX3R5cGUpKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYud3JhcF93aXRo
X2d1YXJkX2Zvcl9jb25kaXRpb24oZW51bV90eXBlLmRlY2xhcmF0aW9uKCkuY29uZGl0aW9uLCBn
ZW5lcmF0ZV9jb252ZXJzaW9uX21ldGhvZF9ib2R5KGVudW1fdHlwZSwgY3BwX3Byb3RvY29sX3R5
cGUpKSkKIAogICAgICAgICBmb3Igb2JqZWN0X3R5cGUgaW4gb2JqZWN0X3R5cGVzOgorICAgICAg
ICAgICAgb2JqZWN0X2xpbmVzID0gW10KICAgICAgICAgICAgIGZvciBlbnVtX21lbWJlciBpbiBm
aWx0ZXIodHlwZV9tZW1iZXJfaXNfYW5vbnltb3VzX2VudW1fdHlwZSwgb2JqZWN0X3R5cGUubWVt
YmVycyk6CiAgICAgICAgICAgICAgICAgY3BwX3Byb3RvY29sX3R5cGUgPSBDcHBHZW5lcmF0b3Iu
Y3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGVfbWVtYmVyKGVudW1fbWVtYmVyLCBvYmplY3RfdHlw
ZS5kZWNsYXJhdGlvbigpKQotICAgICAgICAgICAgICAgIGxpbmVzLmV4dGVuZChnZW5lcmF0ZV9j
b252ZXJzaW9uX21ldGhvZF9ib2R5KGVudW1fbWVtYmVyLnR5cGUsIGNwcF9wcm90b2NvbF90eXBl
KSkKKyAgICAgICAgICAgICAgICBvYmplY3RfbGluZXMuYXBwZW5kKGdlbmVyYXRlX2NvbnZlcnNp
b25fbWV0aG9kX2JvZHkoZW51bV9tZW1iZXIudHlwZSwgY3BwX3Byb3RvY29sX3R5cGUpKQorICAg
ICAgICAgICAgaWYgbGVuKG9iamVjdF9saW5lcyk6CisgICAgICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24ob2JqZWN0X3R5cGUuZGVjbGFy
YXRpb24oKS5jb25kaXRpb24sICdcbicuam9pbihvYmplY3RfbGluZXMpKSkKIAogICAgICAgICBp
ZiBsZW4obGluZXMpID09IDE6CiAgICAgICAgICAgICByZXR1cm4gJycgICMgTm8gcmVhbCBkZWNs
YXJhdGlvbnMgdG8gZW1pdCwganVzdCB0aGUgZG9tYWluIGNvbW1lbnQuCiAKLSAgICAgICAgcmV0
dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCAnXG4nLmpvaW4obGlu
ZXMpKQorICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihk
b21haW4uY29uZGl0aW9uLCAnXG4nLmpvaW4obGluZXMpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9l
bnVtX21hcHBpbmdfYW5kX2NvbnZlcnNpb25fbWV0aG9kcyhzZWxmLCBkb21haW5zKToKICAgICAg
ICAgc2VjdGlvbnMgPSBbXQpAQCAtMTczLDEyICsxNzYsMTUgQEAgY2xhc3MgQ3BwUHJvdG9jb2xU
eXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgZGVmIF9nZW5l
cmF0ZV9vcGVuX2ZpZWxkX25hbWVzKHNlbGYpOgogICAgICAgICBsaW5lcyA9IFtdCiAgICAgICAg
IGZvciBkb21haW4gaW4gc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCk6CisgICAgICAgICAgICBk
b21haW5fbGluZXMgPSBbXQogICAgICAgICAgICAgdHlwZV9kZWNsYXJhdGlvbnMgPSBzZWxmLnR5
cGVfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4oZG9tYWluKQogICAgICAgICAgICAgZm9yIHR5cGVf
ZGVjbGFyYXRpb24gaW4gW2RlY2wgZm9yIGRlY2wgaW4gdHlwZV9kZWNsYXJhdGlvbnMgaWYgR2Vu
ZXJhdG9yLnR5cGVfaGFzX29wZW5fZmllbGRzKGRlY2wudHlwZSldOgogICAgICAgICAgICAgICAg
IG9wZW5fbWVtYmVycyA9IEdlbmVyYXRvci5vcGVuX2ZpZWxkcyh0eXBlX2RlY2xhcmF0aW9uKQog
ICAgICAgICAgICAgICAgIGZvciB0eXBlX21lbWJlciBpbiBzb3J0ZWQob3Blbl9tZW1iZXJzLCBr
ZXk9bGFtYmRhIG1lbWJlcjogbWVtYmVyLm1lbWJlcl9uYW1lKToKICAgICAgICAgICAgICAgICAg
ICAgZmllbGRfbmFtZSA9ICc6Oicuam9pbihbJ0luc3BlY3RvcicsICdQcm90b2NvbCcsIGRvbWFp
bi5kb21haW5fbmFtZSwgdWNmaXJzdCh0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbmFtZSksIHVjZmly
c3QodHlwZV9tZW1iZXIubWVtYmVyX25hbWUpXSkKLSAgICAgICAgICAgICAgICAgICAgbGluZXMu
YXBwZW5kKCdjb25zdCBjaGFyKiAlcyA9ICIlcyI7JyAlIChmaWVsZF9uYW1lLCB0eXBlX21lbWJl
ci5tZW1iZXJfbmFtZSkpCisgICAgICAgICAgICAgICAgICAgIGRvbWFpbl9saW5lcy5hcHBlbmQo
J2NvbnN0IGNoYXIqICVzID0gIiVzIjsnICUgKGZpZWxkX25hbWUsIHR5cGVfbWVtYmVyLm1lbWJl
cl9uYW1lKSkKKyAgICAgICAgICAgIGlmIGxlbihkb21haW5fbGluZXMpOgorICAgICAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRvbWFp
bi5jb25kaXRpb24sICdcbicuam9pbihkb21haW5fbGluZXMpKSkKIAogICAgICAgICByZXR1cm4g
J1xuJy5qb2luKGxpbmVzKQogCkBAIC0xODgsMTYgKzE5NCwxOSBAQCBjbGFzcyBDcHBQcm90b2Nv
bFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgZGVj
bGFyYXRpb25zX3RvX2dlbmVyYXRlID0gW2RlY2wgZm9yIGRlY2wgaW4gdHlwZV9kZWNsYXJhdGlv
bnMgaWYgc2VsZi50eXBlX25lZWRzX3NoYXBlX2Fzc2VydGlvbnMoZGVjbC50eXBlKV0KIAogICAg
ICAgICBmb3IgdHlwZV9kZWNsYXJhdGlvbiBpbiBkZWNsYXJhdGlvbnNfdG9fZ2VuZXJhdGU6Cisg
ICAgICAgICAgICB0eXBlX2xpbmVzID0gW10KICAgICAgICAgICAgIGZvciB0eXBlX21lbWJlciBp
biB0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVyczoKICAgICAgICAgICAgICAgICBpZiBpc2lu
c3RhbmNlKHR5cGVfbWVtYmVyLnR5cGUsIEVudW1UeXBlKToKLSAgICAgICAgICAgICAgICAgICAg
c2VjdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fzc2VydGlvbl9mb3JfZW51bSh0eXBlX21l
bWJlciwgdHlwZV9kZWNsYXJhdGlvbikpCisgICAgICAgICAgICAgICAgICAgIHR5cGVfbGluZXMu
YXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fzc2VydGlvbl9mb3JfZW51bSh0eXBlX21lbWJlciwgdHlw
ZV9kZWNsYXJhdGlvbikpCiAKICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodHlwZV9kZWNsYXJh
dGlvbi50eXBlLCBPYmplY3RUeXBlKToKLSAgICAgICAgICAgICAgICBzZWN0aW9ucy5hcHBlbmQo
c2VsZi5fZ2VuZXJhdGVfYXNzZXJ0aW9uX2Zvcl9vYmplY3RfZGVjbGFyYXRpb24odHlwZV9kZWNs
YXJhdGlvbikpCisgICAgICAgICAgICAgICAgdHlwZV9saW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJh
dGVfYXNzZXJ0aW9uX2Zvcl9vYmplY3RfZGVjbGFyYXRpb24odHlwZV9kZWNsYXJhdGlvbikpCiAg
ICAgICAgICAgICAgICAgaWYgR2VuZXJhdG9yLnR5cGVfbmVlZHNfcnVudGltZV9jYXN0cyh0eXBl
X2RlY2xhcmF0aW9uLnR5cGUpOgotICAgICAgICAgICAgICAgICAgICBzZWN0aW9ucy5hcHBlbmQo
c2VsZi5fZ2VuZXJhdGVfcnVudGltZV9jYXN0X2Zvcl9vYmplY3RfZGVjbGFyYXRpb24odHlwZV9k
ZWNsYXJhdGlvbikpCisgICAgICAgICAgICAgICAgICAgIHR5cGVfbGluZXMuYXBwZW5kKHNlbGYu
X2dlbmVyYXRlX3J1bnRpbWVfY2FzdF9mb3Jfb2JqZWN0X2RlY2xhcmF0aW9uKHR5cGVfZGVjbGFy
YXRpb24pKQorICAgICAgICAgICAgaWYgbGVuKHR5cGVfbGluZXMpOgorICAgICAgICAgICAgICAg
IHNlY3Rpb25zLmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKHR5cGVf
ZGVjbGFyYXRpb24uY29uZGl0aW9uLCAnXG5cbicuam9pbih0eXBlX2xpbmVzKSkpCiAKLSAgICAg
ICAgcmV0dXJuICdcblxuJy5qb2luKHNlY3Rpb25zKQorICAgICAgICByZXR1cm4gc2VsZi53cmFw
X3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9uLCAnXG5cbicuam9pbihz
ZWN0aW9ucykpCiAKICAgICBkZWYgX2dlbmVyYXRlX3J1bnRpbWVfY2FzdF9mb3Jfb2JqZWN0X2Rl
Y2xhcmF0aW9uKHNlbGYsIG9iamVjdF9kZWNsYXJhdGlvbik6CiAgICAgICAgIGFyZ3MgPSB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0ZV9qc19iYWNrZW5kX2NvbW1hbmRzLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfanNfYmFja2VuZF9jb21tYW5kcy5w
eQppbmRleCBiYmY3NmY5MjkxMS4uNzMxMjY5N2NiNTYgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2pzX2JhY2tlbmRf
Y29tbWFuZHMucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vZ2VuZXJhdGVfanNfYmFja2VuZF9jb21tYW5kcy5weQpAQCAtOTYsNyArOTYsNyBA
QCBjbGFzcyBKU0JhY2tlbmRDb21tYW5kc0dlbmVyYXRvcihHZW5lcmF0b3IpOgogICAgICAgICAg
ICAgICAgICAgICAnZW51bU5hbWUnOiBkZWNsYXJhdGlvbi50eXBlX25hbWUsCiAgICAgICAgICAg
ICAgICAgICAgICdlbnVtTWFwJzogIiwgIi5qb2luKFsnJXM6ICIlcyInICUgKEdlbmVyYXRvci5z
dHlsaXplZF9uYW1lX2Zvcl9lbnVtX3ZhbHVlKGVudW1fdmFsdWUpLCBlbnVtX3ZhbHVlKSBmb3Ig
ZW51bV92YWx1ZSBpbiBkZWNsYXJhdGlvbi50eXBlLmVudW1fdmFsdWVzKCldKQogICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0luc3BlY3RvckJhY2tlbmQu
cmVnaXN0ZXJFbnVtKCIlKGRvbWFpbk5hbWUpcy4lKGVudW1OYW1lKXMiLCB7JShlbnVtTWFwKXN9
KTsnICUgZW51bV9hcmdzKQorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLndyYXBf
d2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRlY2xhcmF0aW9uLmNvbmRpdGlvbiwgJ0luc3BlY3Rv
ckJhY2tlbmQucmVnaXN0ZXJFbnVtKCIlKGRvbWFpbk5hbWUpcy4lKGVudW1OYW1lKXMiLCB7JShl
bnVtTWFwKXN9KTsnICUgZW51bV9hcmdzKSkKIAogICAgICAgICAgICAgZGVmIGlzX2Fub255bW91
c19lbnVtX21lbWJlcih0eXBlX21lbWJlcik6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGlzaW5z
dGFuY2UodHlwZV9tZW1iZXIudHlwZSwgRW51bVR5cGUpIGFuZCB0eXBlX21lbWJlci50eXBlLmlz
X2Fub255bW91cwpAQCAtMTI4LDE2ICsxMjgsMTggQEAgY2xhc3MgSlNCYWNrZW5kQ29tbWFuZHNH
ZW5lcmF0b3IoR2VuZXJhdG9yKToKICAgICAgICAgICAgICAgICAnY2FsbFBhcmFtcyc6ICIsICIu
am9pbihbZ2VuZXJhdGVfcGFyYW1ldGVyX29iamVjdChwYXJhbWV0ZXIpIGZvciBwYXJhbWV0ZXIg
aW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnNdKSwKICAgICAgICAgICAgICAgICAncmV0dXJuUGFy
YW1zJzogIiwgIi5qb2luKFsnIiVzIicgJSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUgZm9yIHBh
cmFtZXRlciBpbiBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzXSksCiAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5k
KCIlKGRvbWFpbk5hbWUpcy4lKGNvbW1hbmROYW1lKXMiLCAlKHRhcmdldFR5cGVzKXMsIFslKGNh
bGxQYXJhbXMpc10sIFslKHJldHVyblBhcmFtcylzXSk7JyAlIGNvbW1hbmRfYXJncykKKyAgICAg
ICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGNv
bW1hbmQuY29uZGl0aW9uLCAnSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIiUoZG9t
YWluTmFtZSlzLiUoY29tbWFuZE5hbWUpcyIsICUodGFyZ2V0VHlwZXMpcywgWyUoY2FsbFBhcmFt
cylzXSwgWyUocmV0dXJuUGFyYW1zKXNdKTsnICUgY29tbWFuZF9hcmdzKSkKIAogICAgICAgICBm
b3IgZXZlbnQgaW4gZXZlbnRzOgorICAgICAgICAgICAgZXZlbnRfbGluZXMgPSBbXQorCiAgICAg
ICAgICAgICBmb3IgcGFyYW0gaW4gZmlsdGVyKGlzX2Fub255bW91c19lbnVtX3BhcmFtLCBldmVu
dC5ldmVudF9wYXJhbWV0ZXJzKToKICAgICAgICAgICAgICAgICBlbnVtX2FyZ3MgPSB7CiAgICAg
ICAgICAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLAogICAgICAg
ICAgICAgICAgICAgICAnZW51bU5hbWUnOiAnJXMlcycgJSAodWNmaXJzdChldmVudC5ldmVudF9u
YW1lKSwgdWNmaXJzdChwYXJhbS5wYXJhbWV0ZXJfbmFtZSkpLAogICAgICAgICAgICAgICAgICAg
ICAnZW51bU1hcCc6ICIsICIuam9pbihbJyVzOiAiJXMiJyAlIChHZW5lcmF0b3Iuc3R5bGl6ZWRf
bmFtZV9mb3JfZW51bV92YWx1ZShlbnVtX3ZhbHVlKSwgZW51bV92YWx1ZSkgZm9yIGVudW1fdmFs
dWUgaW4gcGFyYW0udHlwZS5lbnVtX3ZhbHVlcygpXSksCiAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0o
IiUoZG9tYWluTmFtZSlzLiUoZW51bU5hbWUpcyIsIHslKGVudW1NYXApc30pOycgJSBlbnVtX2Fy
Z3MpCisgICAgICAgICAgICAgICAgZXZlbnRfbGluZXMuYXBwZW5kKCdJbnNwZWN0b3JCYWNrZW5k
LnJlZ2lzdGVyRW51bSgiJShkb21haW5OYW1lKXMuJShlbnVtTmFtZSlzIiwgeyUoZW51bU1hcClz
fSk7JyAlIGVudW1fYXJncykKIAogICAgICAgICAgICAgZXZlbnRfYXJncyA9IHsKICAgICAgICAg
ICAgICAgICAnZG9tYWluTmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZSwKQEAgLTE0NSw3ICsxNDcs
OSBAQCBjbGFzcyBKU0JhY2tlbmRDb21tYW5kc0dlbmVyYXRvcihHZW5lcmF0b3IpOgogICAgICAg
ICAgICAgICAgICd0YXJnZXRUeXBlcyc6IGpzb24uZHVtcHMoZXZlbnQudGFyZ2V0X3R5cGVzKSwK
ICAgICAgICAgICAgICAgICAncGFyYW1zJzogIiwgIi5qb2luKFsnIiVzIicgJSBwYXJhbWV0ZXIu
cGFyYW1ldGVyX25hbWUgZm9yIHBhcmFtZXRlciBpbiBldmVudC5ldmVudF9wYXJhbWV0ZXJzXSks
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0luc3BlY3RvckJhY2tl
bmQucmVnaXN0ZXJFdmVudCgiJShkb21haW5OYW1lKXMuJShldmVudE5hbWUpcyIsICUodGFyZ2V0
VHlwZXMpcywgWyUocGFyYW1zKXNdKTsnICUgZXZlbnRfYXJncykKKyAgICAgICAgICAgIGV2ZW50
X2xpbmVzLmFwcGVuZCgnSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckV2ZW50KCIlKGRvbWFpbk5h
bWUpcy4lKGV2ZW50TmFtZSlzIiwgJSh0YXJnZXRUeXBlcylzLCBbJShwYXJhbXMpc10pOycgJSBl
dmVudF9hcmdzKQorCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi53cmFwX3dpdGhfZ3Vh
cmRfZm9yX2NvbmRpdGlvbihldmVudC5jb25kaXRpb24sICdcbicuam9pbihldmVudF9saW5lcykp
KQogCiAgICAgICAgIGhhc19hc3luY19jb21tYW5kcyA9IGFueShbY29tbWFuZC5pc19hc3luYyBm
b3IgY29tbWFuZCBpbiBjb21tYW5kc10pCiAgICAgICAgIGlmIGxlbihldmVudHMpID4gMCBvciBo
YXNfYXN5bmNfY29tbWFuZHM6CkBAIC0xNjAsNCArMTY0LDQgQEAgY2xhc3MgSlNCYWNrZW5kQ29t
bWFuZHNHZW5lcmF0b3IoR2VuZXJhdG9yKToKICAgICAgICAgfQogICAgICAgICBsaW5lcy5hcHBl
bmQoJ0luc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIiUoZG9tYWluTmFtZSlzIiwgJShk
ZWJ1Z2dhYmxlVHlwZXMpcyk7JyAlIGFjdGl2YXRlX2FyZ3MpCiAKLSAgICAgICAgcmV0dXJuICJc
biIuam9pbihsaW5lcykKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9j
b25kaXRpb24oZG9tYWluLmNvbmRpdGlvbiwgIlxuIi5qb2luKGxpbmVzKSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRj
aGVyX2hlYWRlci5weQppbmRleCBlZDhjYzU5NmQzMS4uZWEyZmMxMTI3NGUgMTAwNzU1Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlz
cGF0Y2hlcl9oZWFkZXIucHkKQEAgLTk5LDcgKzk5LDcgQEAgY2xhc3MgT2JqQ0JhY2tlbmREaXNw
YXRjaGVySGVhZGVyR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogICAgICAgICAgICAgJ29iamNQ
cmVmaXgnOiBzZWxmLm9iamNfcHJlZml4KCksCiAgICAgICAgIH0KIAotICAgICAgICByZXR1cm4g
c2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4sIFRlbXBsYXRlKE9iakNUZW1w
bGF0ZXMuQmFja2VuZERpc3BhdGNoZXJIZWFkZXJEb21haW5IYW5kbGVyT2JqQ0RlY2xhcmF0aW9u
KS5zdWJzdGl0dXRlKE5vbmUsICoqaGFuZGxlcl9hcmdzKSkKKyAgICAgICAgcmV0dXJuIHNlbGYu
d3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZG9tYWluLmNvbmRpdGlvbiwgVGVtcGxhdGUo
T2JqQ1RlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hlckhlYWRlckRvbWFpbkhhbmRsZXJPYmpDRGVj
bGFyYXRpb24pLnN1YnN0aXR1dGUoTm9uZSwgKipoYW5kbGVyX2FyZ3MpKQogCiAgICAgZGVmIF9n
ZW5lcmF0ZV9vYmpjX2hhbmRsZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQoc2VsZiwgY29tbWFu
ZCk6CiAgICAgICAgIGxpbmVzID0gW10KQEAgLTExMiw0ICsxMTIsNCBAQCBjbGFzcyBPYmpDQmFj
a2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgICAgICAg
ICAncGFyYW1ldGVycyc6ICcsICcuam9pbihwYXJhbWV0ZXJzKSwKICAgICAgICAgfQogICAgICAg
ICBsaW5lcy5hcHBlbmQoJyAgICB2b2lkICUoY29tbWFuZE5hbWUpcyglKHBhcmFtZXRlcnMpcykg
ZmluYWw7JyAlIGNvbW1hbmRfYXJncykKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykK
KyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oY29tbWFu
ZC5jb25kaXRpb24sICdcbicuam9pbihsaW5lcykpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2JhY2tlbmRf
ZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2lt
cGxlbWVudGF0aW9uLnB5CmluZGV4IGExYjllMTc5NzA1Li4wMjMxYmY1ODkzZCAxMDA3NTUKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJh
dGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19i
YWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKQEAgLTEwNCwxMCArMTA0LDEwIEBA
IGNsYXNzIE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKE9iakNH
ZW5lcmF0b3IpOgogICAgICAgICAgICAgJ2ludm9jYXRpb24nOiBzZWxmLl9nZW5lcmF0ZV9pbnZv
Y2F0aW9uX2Zvcl9jb21tYW5kKGRvbWFpbiwgY29tbWFuZCksCiAgICAgICAgIH0KIAotICAgICAg
ICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4sIFRlbXBsYXRl
KE9iakNUZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNoZXJIZWFkZXJEb21haW5IYW5kbGVySW1wbGVt
ZW50YXRpb24pLnN1YnN0aXR1dGUoTm9uZSwgKipjb21tYW5kX2FyZ3MpKQorICAgICAgICByZXR1
cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9uLCBU
ZW1wbGF0ZShPYmpDVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVySGVhZGVyRG9tYWluSGFuZGxl
ckltcGxlbWVudGF0aW9uKS5zdWJzdGl0dXRlKE5vbmUsICoqY29tbWFuZF9hcmdzKSkKIAogICAg
IGRlZiBfZ2VuZXJhdGVfcmVzcG9uZHNfdG9fc2VsZWN0b3JfZm9yX2NvbW1hbmQoc2VsZiwgZG9t
YWluLCBjb21tYW5kKToKLSAgICAgICAgcmV0dXJuICdbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2Vs
ZWN0b3I6QHNlbGVjdG9yKCVzV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOiVzKV0n
ICUgKGNvbW1hbmQuY29tbWFuZF9uYW1lLCAnJy5qb2luKG1hcChsYW1iZGEgcGFyYW1ldGVyOiAn
JXM6JyAlIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwgY29tbWFuZC5jYWxsX3BhcmFtZXRlcnMp
KSkKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oY29t
bWFuZC5jb25kaXRpb24sICdbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9y
KCVzV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOiVzKV0nICUgKGNvbW1hbmQuY29t
bWFuZF9uYW1lLCAnJy5qb2luKG1hcChsYW1iZGEgcGFyYW1ldGVyOiAnJXM6JyAlIHBhcmFtZXRl
ci5wYXJhbWV0ZXJfbmFtZSwgY29tbWFuZC5jYWxsX3BhcmFtZXRlcnMpKSkpCiAKICAgICBkZWYg
X2dlbmVyYXRlX3N1Y2Nlc3NfYmxvY2tfZm9yX2NvbW1hbmQoc2VsZiwgZG9tYWluLCBjb21tYW5k
KToKICAgICAgICAgbGluZXMgPSBbXQpAQCAtMTU2LDcgKzE1Niw3IEBAIGNsYXNzIE9iakNCYWNr
ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogICAg
ICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRS
ZXNwb25zZShyZXF1ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsnKQogCiAg
ICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIH07JykKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihs
aW5lcykKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24o
Y29tbWFuZC5jb25kaXRpb24sICdcbicuam9pbihsaW5lcykpCiAKICAgICBkZWYgX2dlbmVyYXRl
X2NvbnZlcnNpb25zX2Zvcl9jb21tYW5kKHNlbGYsIGRvbWFpbiwgY29tbWFuZCk6CiAgICAgICAg
IGxpbmVzID0gW10KQEAgLTE5OSw3ICsxOTksNyBAQCBjbGFzcyBPYmpDQmFja2VuZERpc3BhdGNo
ZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKIAogICAgICAgICBpZiBs
aW5lczoKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKLSAgICAgICAgcmV0dXJuICdcbicu
am9pbihsaW5lcykKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25k
aXRpb24oY29tbWFuZC5jb25kaXRpb24sICdcbicuam9pbihsaW5lcykpCiAKICAgICBkZWYgX2dl
bmVyYXRlX2ludm9jYXRpb25fZm9yX2NvbW1hbmQoc2VsZiwgZG9tYWluLCBjb21tYW5kKToKICAg
ICAgICAgcGFpcnMgPSBbXQpAQCAtMjE5LDQgKzIxOSw0IEBAIGNsYXNzIE9iakNCYWNrZW5kRGlz
cGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogCiAgICAgICAg
ICAgICAgICAgb3B0aW9uYWxfZXhwcmVzc2lvbiA9ICcoJXMgPyAmJXMgOiBuaWwpJyAlIChpbl9w
YXJhbV9uYW1lLCBvYmpjX2luX3BhcmFtX2V4cHJlc3Npb24pCiAgICAgICAgICAgICAgICAgcGFp
cnMuYXBwZW5kKCclczolcycgJSAocGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lLCBvcHRpb25hbF9l
eHByZXNzaW9uKSkKLSAgICAgICAgcmV0dXJuICcgICAgW21fZGVsZWdhdGUgJXMlc107JyAlIChj
b21tYW5kLmNvbW1hbmRfbmFtZSwgJyAnLmpvaW4ocGFpcnMpKQorICAgICAgICByZXR1cm4gc2Vs
Zi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihjb21tYW5kLmNvbmRpdGlvbiwgJyAgICBb
bV9kZWxlZ2F0ZSAlcyVzXTsnICUgKGNvbW1hbmQuY29tbWFuZF9uYW1lLCAnICcuam9pbihwYWly
cykpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19oZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2hlYWRlci5weQppbmRleCAx
NWZiNzRiZThiZi4uMjVlOWZhZTEwMWQgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfaGVhZGVyLnB5CisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X29iamNfaGVhZGVyLnB5CkBAIC0zMSwxMiArMzEsMTIgQEAgZnJvbSBzdHJpbmcgaW1wb3J0IFRl
bXBsYXRlCiAKIHRyeToKICAgICBmcm9tIC5nZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNm
aXJzdAotICAgIGZyb20gLm1vZGVscyBpbXBvcnQgT2JqZWN0VHlwZSwgRW51bVR5cGUsIFBsYXRm
b3JtcworICAgIGZyb20gLm1vZGVscyBpbXBvcnQgT2JqZWN0VHlwZSwgRW51bVR5cGUKICAgICBm
cm9tIC5vYmpjX2dlbmVyYXRvciBpbXBvcnQgT2JqQ0dlbmVyYXRvciwgam9pbl90eXBlX2FuZF9u
YW1lCiAgICAgZnJvbSAub2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBPYmpDR2VuZXJh
dG9yVGVtcGxhdGVzIGFzIE9iakNUZW1wbGF0ZXMKIGV4Y2VwdCBWYWx1ZUVycm9yOgogICAgIGZy
b20gZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKLSAgICBmcm9tIG1vZGVscyBp
bXBvcnQgT2JqZWN0VHlwZSwgRW51bVR5cGUsIFBsYXRmb3JtcworICAgIGZyb20gbW9kZWxzIGlt
cG9ydCBPYmplY3RUeXBlLCBFbnVtVHlwZQogICAgIGZyb20gb2JqY19nZW5lcmF0b3IgaW1wb3J0
IE9iakNHZW5lcmF0b3IsIGpvaW5fdHlwZV9hbmRfbmFtZQogICAgIGZyb20gb2JqY19nZW5lcmF0
b3JfdGVtcGxhdGVzIGltcG9ydCBPYmpDR2VuZXJhdG9yVGVtcGxhdGVzIGFzIE9iakNUZW1wbGF0
ZXMKIApAQCAtODcsNyArODcsNiBAQCBjbGFzcyBPYmpDSGVhZGVyR2VuZXJhdG9yKE9iakNHZW5l
cmF0b3IpOgogICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9saWNlbnNlKCkp
CiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShPYmpDVGVtcGxhdGVzLkhlYWRlclBy
ZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJQcmVsdWRlX2FyZ3MpKQogICAgICAgICBz
ZWN0aW9ucy5hcHBlbmQoJ1xuJy5qb2luKFtfZiBmb3IgX2YgaW4gbWFwKHNlbGYuX2dlbmVyYXRl
X2ZvcndhcmRfZGVjbGFyYXRpb25zLCB0eXBlX2RvbWFpbnMpIGlmIF9mXSkpCi0gICAgICAgIHNl
Y3Rpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9lbnVtX2Zvcl9wbGF0Zm9ybXMoKSkKICAgICAg
ICAgc2VjdGlvbnMuYXBwZW5kKCdcbicuam9pbihbX2YgZm9yIF9mIGluIG1hcChzZWxmLl9nZW5l
cmF0ZV9lbnVtcywgdHlwZV9kb21haW5zKSBpZiBfZl0pKQogICAgICAgICBzZWN0aW9ucy5hcHBl
bmQoJ1xuJy5qb2luKFtfZiBmb3IgX2YgaW4gbWFwKHNlbGYuX2dlbmVyYXRlX3R5cGVzLCB0eXBl
X2RvbWFpbnMpIGlmIF9mXSkpCiAKQEAgLTEwMyw0MiArMTAyLDUxIEBAIGNsYXNzIE9iakNIZWFk
ZXJHZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgICAgIGZvciBkZWNsYXJhdGlvbiBpbiBz
ZWxmLnR5cGVfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4oZG9tYWluKToKICAgICAgICAgICAgIGlm
IChpc2luc3RhbmNlKGRlY2xhcmF0aW9uLnR5cGUsIE9iamVjdFR5cGUpKToKICAgICAgICAgICAg
ICAgICBvYmpjX25hbWUgPSBzZWxmLm9iamNfbmFtZV9mb3JfdHlwZShkZWNsYXJhdGlvbi50eXBl
KQotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnQGNsYXNzICVzOycgJSBvYmpjX25hbWUp
Ci0gICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisgICAgICAgICAgICAgICAgbGluZXMu
YXBwZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZGVjbGFyYXRpb24uY29u
ZGl0aW9uLCAnQGNsYXNzICVzOycgJSBvYmpjX25hbWUpKQorICAgICAgICByZXR1cm4gc2VsZi53
cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9uLCAnXG4nLmpvaW4o
bGluZXMpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9lbnVtcyhzZWxmLCBkb21haW4pOgogICAgICAg
ICBsaW5lcyA9IFtdCiAKICAgICAgICAgIyBUeXBlIGVudW1zIGFuZCBtZW1iZXIgZW51bXMuCiAg
ICAgICAgIGZvciBkZWNsYXJhdGlvbiBpbiBzZWxmLnR5cGVfZGVjbGFyYXRpb25zX2Zvcl9kb21h
aW4oZG9tYWluKToKKyAgICAgICAgICAgIGRlY2xhcmF0aW9uX2xpbmVzID0gW10KICAgICAgICAg
ICAgIGlmIGlzaW5zdGFuY2UoZGVjbGFyYXRpb24udHlwZSwgRW51bVR5cGUpOgotICAgICAgICAg
ICAgICAgIGFkZF9uZXdsaW5lKGxpbmVzKQotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChz
ZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfZGVjbGFyYXRpb24oZG9tYWluLCBkZWNs
YXJhdGlvbikpCisgICAgICAgICAgICAgICAgYWRkX25ld2xpbmUoZGVjbGFyYXRpb25fbGluZXMp
CisgICAgICAgICAgICAgICAgZGVjbGFyYXRpb25fbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRl
X2Fub255bW91c19lbnVtX2Zvcl9kZWNsYXJhdGlvbihkb21haW4sIGRlY2xhcmF0aW9uKSkKICAg
ICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgZm9yIG1lbWJlciBpbiBkZWNsYXJhdGlv
bi50eXBlX21lbWJlcnM6CiAgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UobWVtYmVy
LnR5cGUsIEVudW1UeXBlKSBhbmQgbWVtYmVyLnR5cGUuaXNfYW5vbnltb3VzOgotICAgICAgICAg
ICAgICAgICAgICAgICAgYWRkX25ld2xpbmUobGluZXMpCi0gICAgICAgICAgICAgICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX21lbWJlcihk
b21haW4sIGRlY2xhcmF0aW9uLCBtZW1iZXIpKQorICAgICAgICAgICAgICAgICAgICAgICAgYWRk
X25ld2xpbmUoZGVjbGFyYXRpb25fbGluZXMpCisgICAgICAgICAgICAgICAgICAgICAgICBkZWNs
YXJhdGlvbl9saW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX21l
bWJlcihkb21haW4sIGRlY2xhcmF0aW9uLCBtZW1iZXIpKQorICAgICAgICAgICAgaWYgbGVuKGRl
Y2xhcmF0aW9uX2xpbmVzKToKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi53cmFw
X3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihkZWNsYXJhdGlvbi5jb25kaXRpb24sICdcbicuam9p
bihkZWNsYXJhdGlvbl9saW5lcykpKQogCiAgICAgICAgICMgQW5vbnltb3VzIGNvbW1hbmQgZW51
bXMuCiAgICAgICAgIGZvciBjb21tYW5kIGluIHNlbGYuY29tbWFuZHNfZm9yX2RvbWFpbihkb21h
aW4pOgorICAgICAgICAgICAgY29tbWFuZF9saW5lcyA9IFtdCiAgICAgICAgICAgICBmb3IgcGFy
YW1ldGVyIGluIGNvbW1hbmQuY2FsbF9wYXJhbWV0ZXJzOgogICAgICAgICAgICAgICAgIGlmIGlz
aW5zdGFuY2UocGFyYW1ldGVyLnR5cGUsIEVudW1UeXBlKSBhbmQgcGFyYW1ldGVyLnR5cGUuaXNf
YW5vbnltb3VzOgotICAgICAgICAgICAgICAgICAgICBhZGRfbmV3bGluZShsaW5lcykKLSAgICAg
ICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVt
X2Zvcl9wYXJhbWV0ZXIoZG9tYWluLCBjb21tYW5kLmNvbW1hbmRfbmFtZSwgcGFyYW1ldGVyKSkK
KyAgICAgICAgICAgICAgICAgICAgYWRkX25ld2xpbmUoY29tbWFuZF9saW5lcykKKyAgICAgICAg
ICAgICAgICAgICAgY29tbWFuZF9saW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnltb3Vz
X2VudW1fZm9yX3BhcmFtZXRlcihkb21haW4sIGNvbW1hbmQuY29tbWFuZF9uYW1lLCBwYXJhbWV0
ZXIpKQogICAgICAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLnJldHVybl9wYXJhbWV0
ZXJzOgogICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocGFyYW1ldGVyLnR5cGUsIEVudW1U
eXBlKSBhbmQgcGFyYW1ldGVyLnR5cGUuaXNfYW5vbnltb3VzOgotICAgICAgICAgICAgICAgICAg
ICBhZGRfbmV3bGluZShsaW5lcykKLSAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNl
bGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2Zvcl9wYXJhbWV0ZXIoZG9tYWluLCBjb21tYW5k
LmNvbW1hbmRfbmFtZSwgcGFyYW1ldGVyKSkKKyAgICAgICAgICAgICAgICAgICAgYWRkX25ld2xp
bmUoY29tbWFuZF9saW5lcykKKyAgICAgICAgICAgICAgICAgICAgY29tbWFuZF9saW5lcy5hcHBl
bmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX3BhcmFtZXRlcihkb21haW4sIGNv
bW1hbmQuY29tbWFuZF9uYW1lLCBwYXJhbWV0ZXIpKQorICAgICAgICAgICAgaWYgbGVuKGNvbW1h
bmRfbGluZXMpOgorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLndyYXBfd2l0aF9n
dWFyZF9mb3JfY29uZGl0aW9uKGNvbW1hbmQuY29uZGl0aW9uLCAnXG4nLmpvaW4oY29tbWFuZF9s
aW5lcykpKQogCiAgICAgICAgICMgQW5vbnltb3VzIGV2ZW50IGVudW1zLgogICAgICAgICBmb3Ig
ZXZlbnQgaW4gc2VsZi5ldmVudHNfZm9yX2RvbWFpbihkb21haW4pOgorICAgICAgICAgICAgZXZl
bnRfbGluZXMgPSBbXQogICAgICAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBldmVudC5ldmVudF9w
YXJhbWV0ZXJzOgogICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocGFyYW1ldGVyLnR5cGUs
IEVudW1UeXBlKSBhbmQgcGFyYW1ldGVyLnR5cGUuaXNfYW5vbnltb3VzOgotICAgICAgICAgICAg
ICAgICAgICBhZGRfbmV3bGluZShsaW5lcykKLSAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2Zvcl9wYXJhbWV0ZXIoZG9tYWluLCBl
dmVudC5ldmVudF9uYW1lLCBwYXJhbWV0ZXIpKQorICAgICAgICAgICAgICAgICAgICBhZGRfbmV3
bGluZShldmVudF9saW5lcykKKyAgICAgICAgICAgICAgICAgICAgZXZlbnRfbGluZXMuYXBwZW5k
KHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2Zvcl9wYXJhbWV0ZXIoZG9tYWluLCBldmVu
dC5ldmVudF9uYW1lLCBwYXJhbWV0ZXIpKQorICAgICAgICAgICAgaWYgbGVuKGV2ZW50X2xpbmVz
KToKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9y
X2NvbmRpdGlvbihldmVudC5jb25kaXRpb24sICdcbicuam9pbihldmVudF9saW5lcykpKQogCi0g
ICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisgICAgICAgIHJldHVybiBzZWxmLndyYXBf
d2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRvbWFpbi5jb25kaXRpb24sICdcbicuam9pbihsaW5l
cykpCiAKICAgICBkZWYgX2dlbmVyYXRlX3R5cGVzKHNlbGYsIGRvbWFpbik6CiAgICAgICAgIGxp
bmVzID0gW10KQEAgLTE0NywxMiArMTU1LDcgQEAgY2xhc3MgT2JqQ0hlYWRlckdlbmVyYXRvcihP
YmpDR2VuZXJhdG9yKToKICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZGVjbGFyYXRpb24udHlw
ZSwgT2JqZWN0VHlwZSk6CiAgICAgICAgICAgICAgICAgYWRkX25ld2xpbmUobGluZXMpCiAgICAg
ICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX3R5cGVfaW50ZXJmYWNlKGRv
bWFpbiwgZGVjbGFyYXRpb24pKQotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQotCi0g
ICAgZGVmIF9nZW5lcmF0ZV9lbnVtX2Zvcl9wbGF0Zm9ybXMoc2VsZik6Ci0gICAgICAgIG9iamNf
ZW51bV9uYW1lID0gJyVzUGxhdGZvcm0nICUgc2VsZi5vYmpjX3ByZWZpeCgpCi0gICAgICAgIGVu
dW1fdmFsdWVzID0gW3BsYXRmb3JtLm5hbWUgZm9yIHBsYXRmb3JtIGluIFBsYXRmb3Jtc10KLSAg
ICAgICAgcmV0dXJuIHNlbGYuX2dlbmVyYXRlX2VudW0ob2JqY19lbnVtX25hbWUsIGVudW1fdmFs
dWVzKQorICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihk
b21haW4uY29uZGl0aW9uLCAnXG4nLmpvaW4obGluZXMpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9h
bm9ueW1vdXNfZW51bV9mb3JfZGVjbGFyYXRpb24oc2VsZiwgZG9tYWluLCBkZWNsYXJhdGlvbik6
CiAgICAgICAgIG9iamNfZW51bV9uYW1lID0gc2VsZi5vYmpjX2VudW1fbmFtZV9mb3JfYW5vbnlt
b3VzX2VudW1fZGVjbGFyYXRpb24oZGVjbGFyYXRpb24pCkBAIC0xOTQsNyArMTk3LDcgQEAgY2xh
c3MgT2JqQ0hlYWRlckdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKICAgICAgICAgZm9yIG1lbWJl
ciBpbiBvcHRpb25hbF9tZW1iZXJzOgogICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcvKiBvcHRp
b25hbCAqLyAnICsgc2VsZi5fZ2VuZXJhdGVfbWVtYmVyX3Byb3BlcnR5KGRlY2xhcmF0aW9uLCBt
ZW1iZXIpKQogICAgICAgICBsaW5lcy5hcHBlbmQoJ0BlbmQnKQotICAgICAgICByZXR1cm4gJ1xu
Jy5qb2luKGxpbmVzKQorICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2Nv
bmRpdGlvbihkZWNsYXJhdGlvbi5jb25kaXRpb24sICdcbicuam9pbihsaW5lcykpCiAKICAgICBk
ZWYgX2dlbmVyYXRlX2luaXRfbWV0aG9kX2Zvcl9yZXF1aXJlZF9tZW1iZXJzKHNlbGYsIGRvbWFp
biwgZGVjbGFyYXRpb24sIHJlcXVpcmVkX21lbWJlcnMpOgogICAgICAgICBwYWlycyA9IFtdCkBA
IC0yMTksNyArMjIyLDcgQEAgY2xhc3MgT2JqQ0hlYWRlckdlbmVyYXRvcihPYmpDR2VuZXJhdG9y
KToKICAgICAgICAgICAgIGZvciBjb21tYW5kIGluIHNlbGYuY29tbWFuZHNfZm9yX2RvbWFpbihk
b21haW4pOgogICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9zaW5n
bGVfY29tbWFuZF9wcm90b2NvbChkb21haW4sIGNvbW1hbmQpKQogICAgICAgICAgICAgbGluZXMu
YXBwZW5kKCdAZW5kJykKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKyAgICAgICAg
cmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZG9tYWluLmNvbmRpdGlv
biwgJ1xuJy5qb2luKGxpbmVzKSkKIAogICAgIGRlZiBfZ2VuZXJhdGVfc2luZ2xlX2NvbW1hbmRf
cHJvdG9jb2woc2VsZiwgZG9tYWluLCBjb21tYW5kKToKICAgICAgICAgcGFpcnMgPSBbXQpAQCAt
MjI4LDcgKzIzMSw3IEBAIGNsYXNzIE9iakNIZWFkZXJHZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6
CiAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6CiAgICAg
ICAgICAgICBwYXJhbV9uYW1lID0gcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCiAgICAgICAgICAg
ICBwYWlycy5hcHBlbmQoJyVzOiglcyklcycgJSAocGFyYW1fbmFtZSwgc2VsZi5vYmpjX3R5cGVf
Zm9yX3BhcmFtKGRvbWFpbiwgY29tbWFuZC5jb21tYW5kX25hbWUsIHBhcmFtZXRlciksIHBhcmFt
X25hbWUpKQotICAgICAgICByZXR1cm4gJy0gKHZvaWQpJXNXaXRoJXM7JyAlIChjb21tYW5kLmNv
bW1hbmRfbmFtZSwgJyAnLmpvaW4ocGFpcnMpKQorICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dp
dGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihjb21tYW5kLmNvbmRpdGlvbiwgJy0gKHZvaWQpJXNXaXRo
JXM7JyAlIChjb21tYW5kLmNvbW1hbmRfbmFtZSwgJyAnLmpvaW4ocGFpcnMpKSkKIAogICAgIGRl
ZiBfY2FsbGJhY2tfYmxvY2tfZm9yX2NvbW1hbmQoc2VsZiwgZG9tYWluLCBjb21tYW5kKToKICAg
ICAgICAgcGFpcnMgPSBbXQpAQCAtMjQ5LDcgKzI1Miw3IEBAIGNsYXNzIE9iakNIZWFkZXJHZW5l
cmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgICAgICAgICBmb3IgZXZlbnQgaW4gZXZlbnRzOgog
ICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9zaW5nbGVfZXZlbnRf
aW50ZXJmYWNlKGRvbWFpbiwgZXZlbnQpKQogICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdAZW5k
JykKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKyAgICAgICAgcmV0dXJuIHNlbGYu
d3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZG9tYWluLmNvbmRpdGlvbiwgJ1xuJy5qb2lu
KGxpbmVzKSkKIAogICAgIGRlZiBfZ2VuZXJhdGVfc2luZ2xlX2V2ZW50X2ludGVyZmFjZShzZWxm
LCBkb21haW4sIGV2ZW50KToKICAgICAgICAgaWYgbm90IGV2ZW50LmV2ZW50X3BhcmFtZXRlcnM6
CkBAIC0yNTksNCArMjYyLDQgQEAgY2xhc3MgT2JqQ0hlYWRlckdlbmVyYXRvcihPYmpDR2VuZXJh
dG9yKToKICAgICAgICAgICAgIHBhcmFtX25hbWUgPSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUK
ICAgICAgICAgICAgIHBhaXJzLmFwcGVuZCgnJXM6KCVzKSVzJyAlIChwYXJhbV9uYW1lLCBzZWxm
Lm9iamNfdHlwZV9mb3JfcGFyYW0oZG9tYWluLCBldmVudC5ldmVudF9uYW1lLCBwYXJhbWV0ZXIp
LCBwYXJhbV9uYW1lKSkKICAgICAgICAgcGFpcnNbMF0gPSB1Y2ZpcnN0KHBhaXJzWzBdKQotICAg
ICAgICByZXR1cm4gJy0gKHZvaWQpJXNXaXRoJXM7JyAlIChldmVudC5ldmVudF9uYW1lLCAnICcu
am9pbihwYWlycykpCisgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29u
ZGl0aW9uKGV2ZW50LmNvbmRpdGlvbiwgJy0gKHZvaWQpJXNXaXRoJXM7JyAlIChldmVudC5ldmVu
dF9uYW1lLCAnICcuam9pbihwYWlycykpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBl
X2NvbnZlcnNpb25zX2hlYWRlci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfcHJvdG9jb2xfdHlwZV9jb252ZXJzaW9uc19o
ZWFkZXIucHkKaW5kZXggMjU3MWY0YjIyYTguLjU0MDE1MWE1MWE5IDEwMDc1NQotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpj
X3Byb3RvY29sX3R5cGVfY29udmVyc2lvbnNfaGVhZGVyLnB5CisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfcHJvdG9jb2xf
dHlwZV9jb252ZXJzaW9uc19oZWFkZXIucHkKQEAgLTMxLDEyICszMSwxMiBAQCBmcm9tIHN0cmlu
ZyBpbXBvcnQgVGVtcGxhdGUKIAogdHJ5OgogICAgIGZyb20gLmdlbmVyYXRvciBpbXBvcnQgR2Vu
ZXJhdG9yCi0gICAgZnJvbSAubW9kZWxzIGltcG9ydCBFbnVtVHlwZSwgRnJhbWV3b3JrcywgUGxh
dGZvcm1zCisgICAgZnJvbSAubW9kZWxzIGltcG9ydCBFbnVtVHlwZSwgRnJhbWV3b3JrcwogICAg
IGZyb20gLm9iamNfZ2VuZXJhdG9yIGltcG9ydCBPYmpDR2VuZXJhdG9yCiAgICAgZnJvbSAub2Jq
Y19nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBPYmpDR2VuZXJhdG9yVGVtcGxhdGVzIGFzIE9i
akNUZW1wbGF0ZXMKIGV4Y2VwdCBWYWx1ZUVycm9yOgogICAgIGZyb20gZ2VuZXJhdG9yIGltcG9y
dCBHZW5lcmF0b3IKLSAgICBmcm9tIG1vZGVscyBpbXBvcnQgRW51bVR5cGUsIEZyYW1ld29ya3Ms
IFBsYXRmb3JtcworICAgIGZyb20gbW9kZWxzIGltcG9ydCBFbnVtVHlwZSwgRnJhbWV3b3Jrcwog
ICAgIGZyb20gb2JqY19nZW5lcmF0b3IgaW1wb3J0IE9iakNHZW5lcmF0b3IKICAgICBmcm9tIG9i
amNfZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgT2JqQ0dlbmVyYXRvclRlbXBsYXRlcyBhcyBP
YmpDVGVtcGxhdGVzCiAKQEAgLTc1LDcgKzc1LDYgQEAgY2xhc3MgT2JqQ1Byb3RvY29sVHlwZUNv
bnZlcnNpb25zSGVhZGVyR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogICAgICAgICBzZWN0aW9u
cy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9saWNlbnNlKCkpCiAgICAgICAgIHNlY3Rpb25zLmFwcGVu
ZChUZW1wbGF0ZShPYmpDVGVtcGxhdGVzLlR5cGVDb252ZXJzaW9uc0hlYWRlclByZWx1ZGUpLnN1
YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChU
ZW1wbGF0ZShPYmpDVGVtcGxhdGVzLlR5cGVDb252ZXJzaW9uc0hlYWRlclN0YW5kYXJkKS5zdWJz
dGl0dXRlKE5vbmUpKQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfZW51
bV9jb252ZXJzaW9uX2Zvcl9wbGF0Zm9ybXMoKSkKICAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKGxp
c3QobWFwKHNlbGYuX2dlbmVyYXRlX2VudW1fY29udmVyc2lvbl9mdW5jdGlvbnMsIGRvbWFpbnMp
KSkKICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKE9iakNUZW1wbGF0ZXMuVHlwZUNv
bnZlcnNpb25zSGVhZGVyUG9zdGx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykp
CiAgICAgICAgIHJldHVybiAnXG5cbicuam9pbihzZWN0aW9ucykKQEAgLTg1LDQyICs4NCw0MyBA
QCBjbGFzcyBPYmpDUHJvdG9jb2xUeXBlQ29udmVyc2lvbnNIZWFkZXJHZW5lcmF0b3IoT2JqQ0dl
bmVyYXRvcik6CiAKICAgICAgICAgIyBUeXBlIGVudW1zIGFuZCBtZW1iZXIgZW51bXMuCiAgICAg
ICAgIGZvciBkZWNsYXJhdGlvbiBpbiBzZWxmLnR5cGVfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4o
ZG9tYWluKToKKyAgICAgICAgICAgIGRlY2xhcmF0aW9uX2xpbmVzID0gW10KICAgICAgICAgICAg
IGlmIGlzaW5zdGFuY2UoZGVjbGFyYXRpb24udHlwZSwgRW51bVR5cGUpOgotICAgICAgICAgICAg
ICAgIGFkZF9uZXdsaW5lKGxpbmVzKQotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxm
Ll9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9jb252ZXJzaW9uX2Zvcl9kZWNsYXJhdGlvbihkb21h
aW4sIGRlY2xhcmF0aW9uKSkKKyAgICAgICAgICAgICAgICBhZGRfbmV3bGluZShkZWNsYXJhdGlv
bl9saW5lcykKKyAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbl9saW5lcy5hcHBlbmQoc2VsZi5f
Z2VuZXJhdGVfYW5vbnltb3VzX2VudW1fY29udmVyc2lvbl9mb3JfZGVjbGFyYXRpb24oZG9tYWlu
LCBkZWNsYXJhdGlvbikpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGZvciBt
ZW1iZXIgaW4gZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzOgogICAgICAgICAgICAgICAgICAgICBp
ZiAoaXNpbnN0YW5jZShtZW1iZXIudHlwZSwgRW51bVR5cGUpIGFuZCBtZW1iZXIudHlwZS5pc19h
bm9ueW1vdXMpOgotICAgICAgICAgICAgICAgICAgICAgICAgYWRkX25ld2xpbmUobGluZXMpCi0g
ICAgICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnlt
b3VzX2VudW1fY29udmVyc2lvbl9mb3JfbWVtYmVyKGRvbWFpbiwgZGVjbGFyYXRpb24sIG1lbWJl
cikpCisgICAgICAgICAgICAgICAgICAgICAgICBhZGRfbmV3bGluZShkZWNsYXJhdGlvbl9saW5l
cykKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uX2xpbmVzLmFwcGVuZChzZWxm
Ll9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9jb252ZXJzaW9uX2Zvcl9tZW1iZXIoZG9tYWluLCBk
ZWNsYXJhdGlvbiwgbWVtYmVyKSkKKyAgICAgICAgICAgIGlmIGxlbihkZWNsYXJhdGlvbl9saW5l
cyk6CisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zv
cl9jb25kaXRpb24oZGVjbGFyYXRpb24uY29uZGl0aW9uLCAnXG4nLmpvaW4oZGVjbGFyYXRpb25f
bGluZXMpKSkKIAogICAgICAgICAjIEFub255bW91cyBjb21tYW5kIGVudW1zLgogICAgICAgICBm
b3IgY29tbWFuZCBpbiBzZWxmLmNvbW1hbmRzX2Zvcl9kb21haW4oZG9tYWluKToKKyAgICAgICAg
ICAgIGNvbW1hbmRfbGluZXMgPSBbXQogICAgICAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBjb21t
YW5kLmNhbGxfcGFyYW1ldGVyczoKICAgICAgICAgICAgICAgICBpZiAoaXNpbnN0YW5jZShwYXJh
bWV0ZXIudHlwZSwgRW51bVR5cGUpIGFuZCBwYXJhbWV0ZXIudHlwZS5pc19hbm9ueW1vdXMpOgot
ICAgICAgICAgICAgICAgICAgICBhZGRfbmV3bGluZShsaW5lcykKLSAgICAgICAgICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2NvbnZlcnNpb25f
Zm9yX3BhcmFtZXRlcihkb21haW4sIGNvbW1hbmQuY29tbWFuZF9uYW1lLCBwYXJhbWV0ZXIpKQor
ICAgICAgICAgICAgICAgICAgICBhZGRfbmV3bGluZShjb21tYW5kX2xpbmVzKQorICAgICAgICAg
ICAgICAgICAgICBjb21tYW5kX2xpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNf
ZW51bV9jb252ZXJzaW9uX2Zvcl9wYXJhbWV0ZXIoZG9tYWluLCBjb21tYW5kLmNvbW1hbmRfbmFt
ZSwgcGFyYW1ldGVyKSkKICAgICAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5yZXR1
cm5fcGFyYW1ldGVyczoKICAgICAgICAgICAgICAgICBpZiAoaXNpbnN0YW5jZShwYXJhbWV0ZXIu
dHlwZSwgRW51bVR5cGUpIGFuZCBwYXJhbWV0ZXIudHlwZS5pc19hbm9ueW1vdXMpOgotICAgICAg
ICAgICAgICAgICAgICBhZGRfbmV3bGluZShsaW5lcykKLSAgICAgICAgICAgICAgICAgICAgbGlu
ZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2NvbnZlcnNpb25fZm9yX3Bh
cmFtZXRlcihkb21haW4sIGNvbW1hbmQuY29tbWFuZF9uYW1lLCBwYXJhbWV0ZXIpKQorICAgICAg
ICAgICAgICAgICAgICBhZGRfbmV3bGluZShjb21tYW5kX2xpbmVzKQorICAgICAgICAgICAgICAg
ICAgICBjb21tYW5kX2xpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9j
b252ZXJzaW9uX2Zvcl9wYXJhbWV0ZXIoZG9tYWluLCBjb21tYW5kLmNvbW1hbmRfbmFtZSwgcGFy
YW1ldGVyKSkKKyAgICAgICAgICAgIGlmIGxlbihjb21tYW5kX2xpbmVzKToKKyAgICAgICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihjb21t
YW5kLmNvbmRpdGlvbiwgJ1xuJy5qb2luKGNvbW1hbmRfbGluZXMpKSkKIAogICAgICAgICAjIEFu
b255bW91cyBldmVudCBlbnVtcy4KICAgICAgICAgZm9yIGV2ZW50IGluIHNlbGYuZXZlbnRzX2Zv
cl9kb21haW4oZG9tYWluKToKKyAgICAgICAgICAgIGV2ZW50X2xpbmVzID0gW10KICAgICAgICAg
ICAgIGZvciBwYXJhbWV0ZXIgaW4gZXZlbnQuZXZlbnRfcGFyYW1ldGVyczoKICAgICAgICAgICAg
ICAgICBpZiAoaXNpbnN0YW5jZShwYXJhbWV0ZXIudHlwZSwgRW51bVR5cGUpIGFuZCBwYXJhbWV0
ZXIudHlwZS5pc19hbm9ueW1vdXMpOgotICAgICAgICAgICAgICAgICAgICBhZGRfbmV3bGluZShs
aW5lcykKLSAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fu
b255bW91c19lbnVtX2NvbnZlcnNpb25fZm9yX3BhcmFtZXRlcihkb21haW4sIGV2ZW50LmV2ZW50
X25hbWUsIHBhcmFtZXRlcikpCisgICAgICAgICAgICAgICAgICAgIGFkZF9uZXdsaW5lKGV2ZW50
X2xpbmVzKQorICAgICAgICAgICAgICAgICAgICBldmVudF9saW5lcy5hcHBlbmQoc2VsZi5fZ2Vu
ZXJhdGVfYW5vbnltb3VzX2VudW1fY29udmVyc2lvbl9mb3JfcGFyYW1ldGVyKGRvbWFpbiwgZXZl
bnQuZXZlbnRfbmFtZSwgcGFyYW1ldGVyKSkKKyAgICAgICAgICAgIGlmIGxlbihldmVudF9saW5l
cyk6CisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zv
cl9jb25kaXRpb24oZXZlbnQuY29uZGl0aW9uLCAnXG4nLmpvaW4oZXZlbnRfbGluZXMpKSkKIAot
ICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQotCi0gICAgZGVmIF9nZW5lcmF0ZV9lbnVt
X2NvbnZlcnNpb25fZm9yX3BsYXRmb3JtcyhzZWxmKToKLSAgICAgICAgb2JqY19lbnVtX25hbWUg
PSAnJXNQbGF0Zm9ybScgJSBzZWxmLm9iamNfcHJlZml4KCkKLSAgICAgICAgZW51bV92YWx1ZXMg
PSBbcGxhdGZvcm0ubmFtZSBmb3IgcGxhdGZvcm0gaW4gUGxhdGZvcm1zXQotICAgICAgICBsaW5l
cyA9IFtdCi0gICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9lbnVtX29iamNfdG9f
cHJvdG9jb2xfc3RyaW5nKG9iamNfZW51bV9uYW1lLCBlbnVtX3ZhbHVlcykpCi0gICAgICAgIGxp
bmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9lbnVtX2Zyb21fcHJvdG9jb2xfc3RyaW5nKG9iamNf
ZW51bV9uYW1lLCBlbnVtX3ZhbHVlcykpCi0gICAgICAgIHJldHVybiAnXG5cbicuam9pbihsaW5l
cykKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZG9t
YWluLmNvbmRpdGlvbiwgJ1xuJy5qb2luKGxpbmVzKSkKIAogICAgIGRlZiBfZ2VuZXJhdGVfYW5v
bnltb3VzX2VudW1fY29udmVyc2lvbl9mb3JfZGVjbGFyYXRpb24oc2VsZiwgZG9tYWluLCBkZWNs
YXJhdGlvbik6CiAgICAgICAgIG9iamNfZW51bV9uYW1lID0gc2VsZi5vYmpjX2VudW1fbmFtZV9m
b3JfYW5vbnltb3VzX2VudW1fZGVjbGFyYXRpb24oZGVjbGFyYXRpb24pCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9v
YmpjX3Byb3RvY29sX3R5cGVfY29udmVyc2lvbnNfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX3By
b3RvY29sX3R5cGVfY29udmVyc2lvbnNfaW1wbGVtZW50YXRpb24ucHkKaW5kZXggYTM2ZDgxM2Vj
ZWUuLmZiZDEzMWE2NmUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVfY29udmVyc2lv
bnNfaW1wbGVtZW50YXRpb24ucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBlX2NvbnZlcnNpb25z
X2ltcGxlbWVudGF0aW9uLnB5CkBAIC04MywxNSArODMsMTYgQEAgY2xhc3MgT2JqQ1Byb3RvY29s
VHlwZUNvbnZlcnNpb25zSW1wbGVtZW50YXRpb25HZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAg
ICAgZGVmIF9nZW5lcmF0ZV90eXBlX2ZhY3RvcnlfY2F0ZWdvcnlfaW50ZXJmYWNlKHNlbGYsIGRv
bWFpbnMpOgogICAgICAgICBsaW5lcyA9IFtdCiAgICAgICAgIGZvciBkb21haW4gaW4gZG9tYWlu
czoKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnQGludGVyZmFjZSAlc1R5cGVDb252ZXJzaW9u
cyAoJXNEb21haW4pJyAlIChzZWxmLnByb3RvY29sX25hbWUoKSwgZG9tYWluLmRvbWFpbl9uYW1l
KSkKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKKyAgICAgICAgICAgIGRvbWFpbl9saW5l
cyA9IFtdCisgICAgICAgICAgICBkb21haW5fbGluZXMuYXBwZW5kKCdAaW50ZXJmYWNlICVzVHlw
ZUNvbnZlcnNpb25zICglc0RvbWFpbiknICUgKHNlbGYucHJvdG9jb2xfbmFtZSgpLCBkb21haW4u
ZG9tYWluX25hbWUpKQorICAgICAgICAgICAgYWRkX25ld2xpbmUoZG9tYWluX2xpbmVzKQogCiAg
ICAgICAgICAgICBmb3IgZGVjbGFyYXRpb24gaW4gc2VsZi50eXBlX2RlY2xhcmF0aW9uc19mb3Jf
ZG9tYWluKGRvbWFpbik6Ci0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVy
YXRlX3R5cGVfZmFjdG9yeV9tZXRob2RfZGVjbGFyYXRpb24oZG9tYWluLCBkZWNsYXJhdGlvbikp
Ci0KLSAgICAgICAgICAgIGFkZF9uZXdsaW5lKGxpbmVzKQotICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKCdAZW5kJykKKyAgICAgICAgICAgICAgICBkb21haW5fbGluZXMuYXBwZW5kKHNlbGYuX2dl
bmVyYXRlX3R5cGVfZmFjdG9yeV9tZXRob2RfZGVjbGFyYXRpb24oZG9tYWluLCBkZWNsYXJhdGlv
bikpCiAKKyAgICAgICAgICAgIGFkZF9uZXdsaW5lKGRvbWFpbl9saW5lcykKKyAgICAgICAgICAg
IGRvbWFpbl9saW5lcy5hcHBlbmQoJ0BlbmQnKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNl
bGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZG9tYWluLmNvbmRpdGlvbiwgJ1xuJy5q
b2luKGRvbWFpbl9saW5lcykpKQogICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQogCiAg
ICAgZGVmIF9nZW5lcmF0ZV90eXBlX2ZhY3RvcnlfbWV0aG9kX2RlY2xhcmF0aW9uKHNlbGYsIGRv
bWFpbiwgZGVjbGFyYXRpb24pOgpAQCAtMTAwLDIwICsxMDEsMjMgQEAgY2xhc3MgT2JqQ1Byb3Rv
Y29sVHlwZUNvbnZlcnNpb25zSW1wbGVtZW50YXRpb25HZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6
CiAgICAgICAgICAgICByZXNvbHZlZF90eXBlID0gcmVzb2x2ZWRfdHlwZS5hbGlhc2VkX3R5cGUK
ICAgICAgICAgaWYgaXNpbnN0YW5jZShyZXNvbHZlZF90eXBlLCAoT2JqZWN0VHlwZSwgQXJyYXlU
eXBlLCBQcmltaXRpdmVUeXBlKSk6CiAgICAgICAgICAgICBvYmpjX3R5cGUgPSBzZWxmLm9iamNf
Y2xhc3NfZm9yX3R5cGUocmVzb2x2ZWRfdHlwZSkKLSAgICAgICAgICAgIHJldHVybiAnKyAodm9p
ZClfcGFyc2UlczooJXMgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7JyAlIChk
ZWNsYXJhdGlvbi50eXBlLnJhd19uYW1lKCksIG9iamNfdHlwZSkKKyAgICAgICAgICAgIHJldHVy
biBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRlY2xhcmF0aW9uLmNvbmRpdGlv
biwgJysgKHZvaWQpX3BhcnNlJXM6KCVzICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXls
b2FkOycgJSAoZGVjbGFyYXRpb24udHlwZS5yYXdfbmFtZSgpLCBvYmpjX3R5cGUpKQogICAgICAg
ICBpZiBpc2luc3RhbmNlKHJlc29sdmVkX3R5cGUsIEVudW1UeXBlKToKLSAgICAgICAgICAgIHJl
dHVybiAnKyAodm9pZClfcGFyc2UlczooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6
KGlkKXBheWxvYWQ7JyAlIGRlY2xhcmF0aW9uLnR5cGUucmF3X25hbWUoKQorICAgICAgICAgICAg
cmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZGVjbGFyYXRpb24uY29u
ZGl0aW9uLCAnKyAodm9pZClfcGFyc2UlczooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxv
YWQ6KGlkKXBheWxvYWQ7JyAlIGRlY2xhcmF0aW9uLnR5cGUucmF3X25hbWUoKSkKIAogICAgIGRl
ZiBfZ2VuZXJhdGVfdHlwZV9mYWN0b3J5X2NhdGVnb3J5X2ltcGxlbWVudGF0aW9uKHNlbGYsIGRv
bWFpbnMpOgogICAgICAgICBsaW5lcyA9IFtdCiAgICAgICAgIGZvciBkb21haW4gaW4gZG9tYWlu
czoKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnQGltcGxlbWVudGF0aW9uICVzVHlwZUNvbnZl
cnNpb25zICglc0RvbWFpbiknICUgKHNlbGYucHJvdG9jb2xfbmFtZSgpLCBkb21haW4uZG9tYWlu
X25hbWUpKQotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQorICAgICAgICAgICAgZG9tYWlu
X2xpbmVzID0gW10KKyAgICAgICAgICAgIGRvbWFpbl9saW5lcy5hcHBlbmQoJ0BpbXBsZW1lbnRh
dGlvbiAlc1R5cGVDb252ZXJzaW9ucyAoJXNEb21haW4pJyAlIChzZWxmLnByb3RvY29sX25hbWUo
KSwgZG9tYWluLmRvbWFpbl9uYW1lKSkKKyAgICAgICAgICAgIGFkZF9uZXdsaW5lKGRvbWFpbl9s
aW5lcykKIAogICAgICAgICAgICAgZm9yIGRlY2xhcmF0aW9uIGluIHNlbGYudHlwZV9kZWNsYXJh
dGlvbnNfZm9yX2RvbWFpbihkb21haW4pOgotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChz
ZWxmLl9nZW5lcmF0ZV90eXBlX2ZhY3RvcnlfbWV0aG9kX2ltcGxlbWVudGF0aW9uKGRvbWFpbiwg
ZGVjbGFyYXRpb24pKQotICAgICAgICAgICAgICAgIGFkZF9uZXdsaW5lKGxpbmVzKQotICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKCdAZW5kJykKKyAgICAgICAgICAgICAgICBkb21haW5fbGluZXMu
YXBwZW5kKHNlbGYuX2dlbmVyYXRlX3R5cGVfZmFjdG9yeV9tZXRob2RfaW1wbGVtZW50YXRpb24o
ZG9tYWluLCBkZWNsYXJhdGlvbikpCisgICAgICAgICAgICAgICAgYWRkX25ld2xpbmUoZG9tYWlu
X2xpbmVzKQorCisgICAgICAgICAgICBkb21haW5fbGluZXMuYXBwZW5kKCdAZW5kJykKKyAgICAg
ICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRv
bWFpbi5jb25kaXRpb24sICdcbicuam9pbihkb21haW5fbGluZXMpKSkKICAgICAgICAgcmV0dXJu
ICdcbicuam9pbihsaW5lcykKIAogICAgIGRlZiBfZ2VuZXJhdGVfdHlwZV9mYWN0b3J5X21ldGhv
ZF9pbXBsZW1lbnRhdGlvbihzZWxmLCBkb21haW4sIGRlY2xhcmF0aW9uKToKQEAgLTE0MSw0ICsx
NDUsNCBAQCBjbGFzcyBPYmpDUHJvdG9jb2xUeXBlQ29udmVyc2lvbnNJbXBsZW1lbnRhdGlvbkdl
bmVyYXRvcihPYmpDR2VuZXJhdG9yKToKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10p
OycpCiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAqb3V0VmFsdWUgPSBbWyVzIGFsbG9j
XSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07JyAlIChvYmpjX2NsYXNzKSkKICAgICAgICAgbGlu
ZXMuYXBwZW5kKCd9JykKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKyAgICAgICAg
cmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZGVjbGFyYXRpb24uY29u
ZGl0aW9uLCAnXG4nLmpvaW4obGluZXMpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBl
c19pbXBsZW1lbnRhdGlvbi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24u
cHkKaW5kZXggYzg3MDg4MWFiZDguLjAwZDdhMGFmZTdkIDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX3Byb3Rv
Y29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfcHJvdG9jb2xfdHlwZXNfaW1w
bGVtZW50YXRpb24ucHkKQEAgLTkxLDcgKzkxLDcgQEAgY2xhc3MgT2JqQ1Byb3RvY29sVHlwZXNJ
bXBsZW1lbnRhdGlvbkdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKICAgICAgICAgICAgIGlmIChp
c2luc3RhbmNlKGRlY2xhcmF0aW9uLnR5cGUsIE9iamVjdFR5cGUpKToKICAgICAgICAgICAgICAg
ICBhZGRfbmV3bGluZShsaW5lcykKICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5n
ZW5lcmF0ZV90eXBlX2ltcGxlbWVudGF0aW9uKGRvbWFpbiwgZGVjbGFyYXRpb24pKQotICAgICAg
ICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhf
Z3VhcmRfZm9yX2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9uLCAnXG4nLmpvaW4obGluZXMpKQog
CiAgICAgZGVmIGdlbmVyYXRlX3R5cGVfaW1wbGVtZW50YXRpb24oc2VsZiwgZG9tYWluLCBkZWNs
YXJhdGlvbik6CiAgICAgICAgIGxpbmVzID0gW10KQEAgLTExMiw3ICsxMTIsNyBAQCBjbGFzcyBP
YmpDUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgog
ICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2dldHRlcl9mb3JfbWVtYmVy
KGRvbWFpbiwgZGVjbGFyYXRpb24sIG1lbWJlcikpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykK
ICAgICAgICAgbGluZXMuYXBwZW5kKCdAZW5kJykKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihs
aW5lcykKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24o
ZGVjbGFyYXRpb24uY29uZGl0aW9uLCAnXG4nLmpvaW4obGluZXMpKQogCiAgICAgZGVmIF9nZW5l
cmF0ZV9pbml0X21ldGhvZF9mb3JfcHJvdG9jb2xfb2JqZWN0KHNlbGYsIGRvbWFpbiwgZGVjbGFy
YXRpb24pOgogICAgICAgICBsaW5lcyA9IFtdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3IucHkgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3IucHkKaW5kZXgg
OGMyZmJiOGJjNTIuLjk0ZDE4ZDlkNjYxIDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3IucHkKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yLnB5CkBAIC0z
MSwxMCArMzEsMTAgQEAgZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCiAKIHRyeToKICAgICBm
cm9tIC5nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgVGVt
cGxhdGVzCi0gICAgZnJvbSAubW9kZWxzIGltcG9ydCBQcmltaXRpdmVUeXBlLCBPYmplY3RUeXBl
LCBBcnJheVR5cGUsIEVudW1UeXBlLCBBbGlhc2VkVHlwZSwgRnJhbWV3b3JrcywgUGxhdGZvcm1z
CisgICAgZnJvbSAubW9kZWxzIGltcG9ydCBQcmltaXRpdmVUeXBlLCBPYmplY3RUeXBlLCBBcnJh
eVR5cGUsIEVudW1UeXBlLCBBbGlhc2VkVHlwZSwgRnJhbWV3b3JrcwogZXhjZXB0IFZhbHVlRXJy
b3I6CiAgICAgZnJvbSBnZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBHZW5lcmF0b3JUZW1wbGF0
ZXMgYXMgVGVtcGxhdGVzCi0gICAgZnJvbSBtb2RlbHMgaW1wb3J0IFByaW1pdGl2ZVR5cGUsIE9i
amVjdFR5cGUsIEFycmF5VHlwZSwgRW51bVR5cGUsIEFsaWFzZWRUeXBlLCBGcmFtZXdvcmtzLCBQ
bGF0Zm9ybXMKKyAgICBmcm9tIG1vZGVscyBpbXBvcnQgUHJpbWl0aXZlVHlwZSwgT2JqZWN0VHlw
ZSwgQXJyYXlUeXBlLCBFbnVtVHlwZSwgQWxpYXNlZFR5cGUsIEZyYW1ld29ya3MKIAogbG9nID0g
bG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCiAKQEAgLTk0LDM1ICs5NCwyOCBAQCBfVFlQRVNf
V0lUSF9PUEVOX0ZJRUxEUyA9IHsKIH0KIAogY2xhc3MgR2VuZXJhdG9yOgotICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCBtb2RlbCwgcGxhdGZvcm0sIGlucHV0X2ZpbGVwYXRoKToKKyAgICBkZWYgX19p
bml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKToKICAgICAgICAgc2VsZi5fbW9kZWwg
PSBtb2RlbAotICAgICAgICBzZWxmLl9wbGF0Zm9ybSA9IHBsYXRmb3JtCiAgICAgICAgIHNlbGYu
X2lucHV0X2ZpbGVwYXRoID0gaW5wdXRfZmlsZXBhdGgKICAgICAgICAgc2VsZi5fc2V0dGluZ3Mg
PSB7fQogCiAgICAgZGVmIG1vZGVsKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5fbW9kZWwK
IAotICAgIGRlZiBwbGF0Zm9ybShzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX3BsYXRmb3Jt
Ci0KICAgICBkZWYgc2V0X2dlbmVyYXRvcl9zZXR0aW5nKHNlbGYsIGtleSwgdmFsdWUpOgogICAg
ICAgICBzZWxmLl9zZXR0aW5nc1trZXldID0gdmFsdWUKIAotICAgIGRlZiBjYW5fZ2VuZXJhdGVf
cGxhdGZvcm0oc2VsZiwgbW9kZWxfcGxhdGZvcm0pOgotICAgICAgICByZXR1cm4gbW9kZWxfcGxh
dGZvcm0gaXMgUGxhdGZvcm1zLkdlbmVyaWMgb3Igc2VsZi5fcGxhdGZvcm0gaXMgUGxhdGZvcm1z
LkFsbCBvciBtb2RlbF9wbGF0Zm9ybSBpcyBzZWxmLl9wbGF0Zm9ybQotCiAgICAgZGVmIHZlcnNp
b25fZm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgogICAgICAgICByZXR1cm4gZG9tYWluLnZlcnNp
b24oKQogCiAgICAgZGVmIHR5cGVfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4oc2VsZiwgZG9tYWlu
KToKLSAgICAgICAgcmV0dXJuIFt0eXBlX2RlY2xhcmF0aW9uIGZvciB0eXBlX2RlY2xhcmF0aW9u
IGluIGRvbWFpbi5hbGxfdHlwZV9kZWNsYXJhdGlvbnMoKSBpZiBzZWxmLmNhbl9nZW5lcmF0ZV9w
bGF0Zm9ybSh0eXBlX2RlY2xhcmF0aW9uLnBsYXRmb3JtKV0KKyAgICAgICAgcmV0dXJuIGRvbWFp
bi5hbGxfdHlwZV9kZWNsYXJhdGlvbnMoKQogCiAgICAgZGVmIGNvbW1hbmRzX2Zvcl9kb21haW4o
c2VsZiwgZG9tYWluKToKLSAgICAgICAgcmV0dXJuIFtjb21tYW5kIGZvciBjb21tYW5kIGluIGRv
bWFpbi5hbGxfY29tbWFuZHMoKSBpZiBzZWxmLmNhbl9nZW5lcmF0ZV9wbGF0Zm9ybShjb21tYW5k
LnBsYXRmb3JtKV0KKyAgICAgICAgcmV0dXJuIGRvbWFpbi5hbGxfY29tbWFuZHMoKQogCiAgICAg
ZGVmIGV2ZW50c19mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6Ci0gICAgICAgIHJldHVybiBbZXZl
bnQgZm9yIGV2ZW50IGluIGRvbWFpbi5hbGxfZXZlbnRzKCkgaWYgc2VsZi5jYW5fZ2VuZXJhdGVf
cGxhdGZvcm0oZXZlbnQucGxhdGZvcm0pXQorICAgICAgICByZXR1cm4gZG9tYWluLmFsbF9ldmVu
dHMoKQogCiAgICAgIyBUaGUgZ29vZnkgbmFtZSBpcyB0byBkaXNhbWJpZ3VhdGUgZ2VuZXJhdG9y
IHNldHRpbmdzIGZyb20gZnJhbWV3b3JrIHNldHRpbmdzLgogICAgIGRlZiBnZXRfZ2VuZXJhdG9y
X3NldHRpbmcoc2VsZiwga2V5LCBkZWZhdWx0PU5vbmUpOgpAQCAtMjY3LDIyICsyNjAsMTUgQEAg
Y2xhc3MgR2VuZXJhdG9yOgogICAgICAgICBzZWxmLl9hc3NpZ25lZF9lbnVtX3ZhbHVlcy5hcHBl
bmQoZW51bV92YWx1ZSkKIAogICAgICMgTWlzY2VsbGFuZW91cyB0ZXh0IG1hbmlwdWxhdGlvbiBy
b3V0aW5lcy4KLSAgICBkZWYgd3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oc2VsZiwgZG9tYWlu
LCB0ZXh0KToKLSAgICAgICAgaWYgc2VsZi5tb2RlbCgpLmZyYW1ld29yayBpcyBGcmFtZXdvcmtz
LldlYkluc3BlY3RvcjoKLSAgICAgICAgICAgIHJldHVybiB0ZXh0Ci0gICAgICAgIGd1YXJkID0g
ZG9tYWluLmZlYXR1cmVfZ3VhcmQKLSAgICAgICAgaWYgZ3VhcmQ6Ci0gICAgICAgICAgICByZXR1
cm4gR2VuZXJhdG9yLndyYXBfd2l0aF9ndWFyZChndWFyZCwgdGV4dCkKKyAgICBkZWYgd3JhcF93
aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oc2VsZiwgY29uZGl0aW9uLCB0ZXh0KToKKyAgICAgICAg
aWYgY29uZGl0aW9uOgorICAgICAgICAgICAgcmV0dXJuICdcbicuam9pbihbCisgICAgICAgICAg
ICAgICAgJyNpZiAlcycgJSBjb25kaXRpb24sCisgICAgICAgICAgICAgICAgdGV4dCwKKyAgICAg
ICAgICAgICAgICAnI2VuZGlmIC8vICVzJyAlIGNvbmRpdGlvbiwKKyAgICAgICAgICAgIF0pCiAg
ICAgICAgIHJldHVybiB0ZXh0CiAKLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIHdyYXBfd2l0
aF9ndWFyZChndWFyZCwgdGV4dCk6Ci0gICAgICAgIHJldHVybiAnXG4nLmpvaW4oWwotICAgICAg
ICAgICAgJyNpZiAlcycgJSBndWFyZCwKLSAgICAgICAgICAgIHRleHQsCi0gICAgICAgICAgICAn
I2VuZGlmIC8vICVzJyAlIGd1YXJkLAotICAgICAgICBdKQotCiAgICAgQHN0YXRpY21ldGhvZAog
ICAgIGRlZiBzdHlsaXplZF9uYW1lX2Zvcl9lbnVtX3ZhbHVlKGVudW1fdmFsdWUpOgogICAgICAg
ICByZWdleCA9ICcoJXMpJyAlICJ8Ii5qb2luKF9BTFdBWVNfU1BFQ0lBTENBU0VEX0VOVU1fVkFM
VUVfU1VCU1RSSU5HUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL21vZGVscy5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL21vZGVscy5weQppbmRleCA2ZDk3YTA5M2MzNC4uMWRmMmJk
ZjY2NWEgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL21vZGVscy5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9tb2RlbHMucHkKQEAgLTEzNiw0MSArMTM2LDYgQEAgY2xhc3MgRnJh
bWV3b3JrczoKICAgICBUZXN0ID0gRnJhbWV3b3JrKCJUZXN0IikKIAogCi1jbGFzcyBQbGF0Zm9y
bToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSk6Ci0gICAgICAgIHNlbGYubmFtZSA9IG5h
bWUKLQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgZnJvbVN0cmluZyhwbGF0Zm9ybVN0cmlu
Zyk6Ci0gICAgICAgIHBsYXRmb3JtU3RyaW5nID0gcGxhdGZvcm1TdHJpbmcubG93ZXIoKQotICAg
ICAgICBpZiBwbGF0Zm9ybVN0cmluZyA9PSAiaW9zIjoKLSAgICAgICAgICAgIHJldHVybiBQbGF0
Zm9ybXMuaU9TCi0KLSAgICAgICAgaWYgcGxhdGZvcm1TdHJpbmcgPT0gIm1hY29zIjoKLSAgICAg
ICAgICAgIHJldHVybiBQbGF0Zm9ybXMubWFjT1MKLQotICAgICAgICBpZiBwbGF0Zm9ybVN0cmlu
ZyA9PSAiYWxsIjoKLSAgICAgICAgICAgIHJldHVybiBQbGF0Zm9ybXMuQWxsCi0KLSAgICAgICAg
aWYgcGxhdGZvcm1TdHJpbmcgPT0gImdlbmVyaWMiIG9yIG5vdCBwbGF0Zm9ybVN0cmluZzoKLSAg
ICAgICAgICAgIHJldHVybiBQbGF0Zm9ybXMuR2VuZXJpYwotCi0gICAgICAgIHJhaXNlIFBhcnNl
RXhjZXB0aW9uKCJVbmtub3duIHBsYXRmb3JtOiAlcyIgJSBwbGF0Zm9ybVN0cmluZykKLQotCi1j
bGFzcyBQbGF0Zm9ybXM6Ci0gICAgQWxsID0gUGxhdGZvcm0oImFsbCIpCi0gICAgR2VuZXJpYyA9
IFBsYXRmb3JtKCJnZW5lcmljIikKLSAgICBpT1MgPSBQbGF0Zm9ybSgiaW9zIikKLSAgICBtYWNP
UyA9IFBsYXRmb3JtKCJtYWNvcyIpCi0KLSAgICAjIEFsbG93IGl0ZXJhdGlvbiBvdmVyIGFsbCBw
bGF0Zm9ybXMuIFNlZSA8aHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy81NDM0NDAw
Lz4uCi0gICAgY2xhc3MgX19tZXRhY2xhc3NfXyh0eXBlKToKLSAgICAgICAgZGVmIF9faXRlcl9f
KHNlbGYpOgotICAgICAgICAgICAgZm9yIGF0dHIgaW4gZGlyKFBsYXRmb3Jtcyk6Ci0gICAgICAg
ICAgICAgICAgaWYgbm90IGF0dHIuc3RhcnRzd2l0aCgiX18iKToKLSAgICAgICAgICAgICAgICAg
ICAgeWllbGQgZ2V0YXR0cihQbGF0Zm9ybXMsIGF0dHIpCi0KIGNsYXNzIFR5cGVSZWZlcmVuY2U6
CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHR5cGVfa2luZCwgcmVmZXJlbmNlZF90eXBlX25hbWUs
IGVudW1fdmFsdWVzLCBhcnJheV9pdGVtcyk6CiAgICAgICAgIHNlbGYudHlwZV9raW5kID0gdHlw
ZV9raW5kCkBAIC00MzksNyArNDA0LDcgQEAgY2xhc3MgUHJvdG9jb2w6CiAgICAgICAgICAgICAg
ICAgcmFpc2UgUGFyc2VFeGNlcHRpb24oIk1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjog
ZXZlbnRzIGlzIG5vdCBhbiBhcnJheSIpCiAgICAgICAgICAgICBldmVudHMuZXh0ZW5kKFtzZWxm
LnBhcnNlX2V2ZW50KGV2ZW50LCBkZWJ1Z2dhYmxlX3R5cGVzKSBmb3IgZXZlbnQgaW4ganNvblsn
ZXZlbnRzJ11dKQogCi0gICAgICAgIHNlbGYuZG9tYWlucy5hcHBlbmQoRG9tYWluKGpzb25bJ2Rv
bWFpbiddLCBqc29uLmdldCgnZGVzY3JpcHRpb24nLCAnJyksIGpzb24uZ2V0KCdmZWF0dXJlR3Vh
cmQnKSwgZGVidWdnYWJsZV90eXBlcywgdGFyZ2V0X3R5cGVzLCBpc1N1cHBsZW1lbnRhbCwgdmVy
c2lvbiwgdHlwZXMsIGNvbW1hbmRzLCBldmVudHMpKQorICAgICAgICBzZWxmLmRvbWFpbnMuYXBw
ZW5kKERvbWFpbihqc29uWydkb21haW4nXSwganNvbi5nZXQoJ2Rlc2NyaXB0aW9uJywgJycpLCBq
c29uLmdldCgnY29uZGl0aW9uJyksIGRlYnVnZ2FibGVfdHlwZXMsIHRhcmdldF90eXBlcywgaXNT
dXBwbGVtZW50YWwsIHZlcnNpb24sIHR5cGVzLCBjb21tYW5kcywgZXZlbnRzKSkKIAogICAgIGRl
ZiBwYXJzZV90eXBlX2RlY2xhcmF0aW9uKHNlbGYsIGpzb24pOgogICAgICAgICBjaGVja19mb3Jf
cmVxdWlyZWRfcHJvcGVydGllcyhbJ2lkJywgJ3R5cGUnXSwganNvbiwgInR5cGUiKQpAQCAtNDU3
LDggKzQyMiw3IEBAIGNsYXNzIFByb3RvY29sOgogICAgICAgICAgICAgcmFpc2UgUGFyc2VFeGNl
cHRpb24oIk1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjogdHlwZSBkZWNsYXJhdGlvbiBm
b3IgJXMgaGFzIGR1cGxpY2F0ZSBtZW1iZXIgbmFtZXMiICUganNvblsnaWQnXSkKIAogICAgICAg
ICB0eXBlX3JlZiA9IFR5cGVSZWZlcmVuY2UoanNvblsndHlwZSddLCBqc29uLmdldCgnJHJlZicp
LCBqc29uLmdldCgnZW51bScpLCBqc29uLmdldCgnaXRlbXMnKSkKLSAgICAgICAgcGxhdGZvcm0g
PSBQbGF0Zm9ybS5mcm9tU3RyaW5nKGpzb24uZ2V0KCdwbGF0Zm9ybScsICdnZW5lcmljJykpCi0g
ICAgICAgIHJldHVybiBUeXBlRGVjbGFyYXRpb24oanNvblsnaWQnXSwgdHlwZV9yZWYsIGpzb24u
Z2V0KCJkZXNjcmlwdGlvbiIsICIiKSwgcGxhdGZvcm0sIHR5cGVfbWVtYmVycykKKyAgICAgICAg
cmV0dXJuIFR5cGVEZWNsYXJhdGlvbihqc29uWydpZCddLCB0eXBlX3JlZiwganNvbi5nZXQoImRl
c2NyaXB0aW9uIiwgIiIpLCBqc29uLmdldCgnY29uZGl0aW9uJyksIHR5cGVfbWVtYmVycykKIAog
ICAgIGRlZiBwYXJzZV90eXBlX21lbWJlcihzZWxmLCBqc29uKToKICAgICAgICAgY2hlY2tfZm9y
X3JlcXVpcmVkX3Byb3BlcnRpZXMoWyduYW1lJ10sIGpzb24sICJ0eXBlIG1lbWJlciIpCkBAIC01
MDksOCArNDczLDcgQEAgY2xhc3MgUHJvdG9jb2w6CiAgICAgICAgICAgICBpZiBsZW4oZHVwbGlj
YXRlX25hbWVzKSA+IDA6CiAgICAgICAgICAgICAgICAgcmFpc2UgUGFyc2VFeGNlcHRpb24oIk1h
bGZvcm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjogcmV0dXJuIHBhcmFtZXRlciBsaXN0IGZvciBj
b21tYW5kICVzIGhhcyBkdXBsaWNhdGUgcGFyYW1ldGVyIG5hbWVzIiAlIGpzb25bJ25hbWUnXSkK
IAotICAgICAgICBwbGF0Zm9ybSA9IFBsYXRmb3JtLmZyb21TdHJpbmcoanNvbi5nZXQoJ3BsYXRm
b3JtJywgJ2dlbmVyaWMnKSkKLSAgICAgICAgcmV0dXJuIENvbW1hbmQoanNvblsnbmFtZSddLCB0
YXJnZXRfdHlwZXMsIGNhbGxfcGFyYW1ldGVycywgcmV0dXJuX3BhcmFtZXRlcnMsIGpzb24uZ2V0
KCdkZXNjcmlwdGlvbicsICIiKSwgcGxhdGZvcm0sIGpzb24uZ2V0KCdhc3luYycsIEZhbHNlKSkK
KyAgICAgICAgcmV0dXJuIENvbW1hbmQoanNvblsnbmFtZSddLCB0YXJnZXRfdHlwZXMsIGNhbGxf
cGFyYW1ldGVycywgcmV0dXJuX3BhcmFtZXRlcnMsIGpzb24uZ2V0KCdkZXNjcmlwdGlvbicsICIi
KSwganNvbi5nZXQoJ2NvbmRpdGlvbicpLCBqc29uLmdldCgnYXN5bmMnLCBGYWxzZSkpCiAKICAg
ICBkZWYgcGFyc2VfZXZlbnQoc2VsZiwganNvbiwgZGVidWdnYWJsZV90eXBlcyk6CiAgICAgICAg
IGNoZWNrX2Zvcl9yZXF1aXJlZF9wcm9wZXJ0aWVzKFsnbmFtZSddLCBqc29uLCAiZXZlbnQiKQpA
QCAtNTQ0LDggKzUwNyw3IEBAIGNsYXNzIFByb3RvY29sOgogICAgICAgICAgICAgaWYgbGVuKGR1
cGxpY2F0ZV9uYW1lcykgPiAwOgogICAgICAgICAgICAgICAgIHJhaXNlIFBhcnNlRXhjZXB0aW9u
KCJNYWxmb3JtZWQgZG9tYWluIHNwZWNpZmljYXRpb246IHBhcmFtZXRlciBsaXN0IGZvciBldmVu
dCAlcyBoYXMgZHVwbGljYXRlIHBhcmFtZXRlciBuYW1lcyIgJSBqc29uWyduYW1lJ10pCiAKLSAg
ICAgICAgcGxhdGZvcm0gPSBQbGF0Zm9ybS5mcm9tU3RyaW5nKGpzb24uZ2V0KCdwbGF0Zm9ybScs
ICdnZW5lcmljJykpCi0gICAgICAgIHJldHVybiBFdmVudChqc29uWyduYW1lJ10sIHRhcmdldF90
eXBlcywgZXZlbnRfcGFyYW1ldGVycywganNvbi5nZXQoJ2Rlc2NyaXB0aW9uJywgIiIpLCBwbGF0
Zm9ybSkKKyAgICAgICAgcmV0dXJuIEV2ZW50KGpzb25bJ25hbWUnXSwgdGFyZ2V0X3R5cGVzLCBl
dmVudF9wYXJhbWV0ZXJzLCBqc29uLmdldCgnZGVzY3JpcHRpb24nLCAiIiksIGpzb24uZ2V0KCdj
b25kaXRpb24nKSkKIAogICAgIGRlZiBwYXJzZV9jYWxsX29yX3JldHVybl9wYXJhbWV0ZXIoc2Vs
ZiwganNvbik6CiAgICAgICAgIGNoZWNrX2Zvcl9yZXF1aXJlZF9wcm9wZXJ0aWVzKFsnbmFtZSdd
LCBqc29uLCAicGFyYW1ldGVyIikKQEAgLTY0MywxMCArNjA1LDEwIEBAIGNsYXNzIFByb3RvY29s
OgogCiAKIGNsYXNzIERvbWFpbjoKLSAgICBkZWYgX19pbml0X18oc2VsZiwgZG9tYWluX25hbWUs
IGRlc2NyaXB0aW9uLCBmZWF0dXJlX2d1YXJkLCBkZWJ1Z2dhYmxlX3R5cGVzLCB0YXJnZXRfdHlw
ZXMsIGlzU3VwcGxlbWVudGFsLCB2ZXJzaW9uLCB0eXBlX2RlY2xhcmF0aW9ucywgY29tbWFuZHMs
IGV2ZW50cyk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRvbWFpbl9uYW1lLCBkZXNjcmlwdGlv
biwgY29uZGl0aW9uLCBkZWJ1Z2dhYmxlX3R5cGVzLCB0YXJnZXRfdHlwZXMsIGlzU3VwcGxlbWVu
dGFsLCB2ZXJzaW9uLCB0eXBlX2RlY2xhcmF0aW9ucywgY29tbWFuZHMsIGV2ZW50cyk6CiAgICAg
ICAgIHNlbGYuZG9tYWluX25hbWUgPSBkb21haW5fbmFtZQogICAgICAgICBzZWxmLmRlc2NyaXB0
aW9uID0gZGVzY3JpcHRpb24KLSAgICAgICAgc2VsZi5mZWF0dXJlX2d1YXJkID0gZmVhdHVyZV9n
dWFyZAorICAgICAgICBzZWxmLmNvbmRpdGlvbiA9IGNvbmRpdGlvbgogICAgICAgICBzZWxmLmRl
YnVnZ2FibGVfdHlwZXMgPSBkZWJ1Z2dhYmxlX3R5cGVzCiAgICAgICAgIHNlbGYudGFyZ2V0X3R5
cGVzID0gdGFyZ2V0X3R5cGVzCiAgICAgICAgIHNlbGYuaXNfc3VwcGxlbWVudGFsID0gaXNTdXBw
bGVtZW50YWwKQEAgLTY4NiwxMSArNjQ4LDExIEBAIGNsYXNzIERvbWFpbnM6CiAKIAogY2xhc3Mg
VHlwZURlY2xhcmF0aW9uOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0eXBlX25hbWUsIHR5cGVf
cmVmLCBkZXNjcmlwdGlvbiwgcGxhdGZvcm0sIHR5cGVfbWVtYmVycyk6CisgICAgZGVmIF9faW5p
dF9fKHNlbGYsIHR5cGVfbmFtZSwgdHlwZV9yZWYsIGRlc2NyaXB0aW9uLCBjb25kaXRpb24sIHR5
cGVfbWVtYmVycyk6CiAgICAgICAgIHNlbGYudHlwZV9uYW1lID0gdHlwZV9uYW1lCiAgICAgICAg
IHNlbGYudHlwZV9yZWYgPSB0eXBlX3JlZgogICAgICAgICBzZWxmLmRlc2NyaXB0aW9uID0gZGVz
Y3JpcHRpb24KLSAgICAgICAgc2VsZi5wbGF0Zm9ybSA9IHBsYXRmb3JtCisgICAgICAgIHNlbGYu
Y29uZGl0aW9uID0gY29uZGl0aW9uCiAgICAgICAgIHNlbGYudHlwZV9tZW1iZXJzID0gdHlwZV9t
ZW1iZXJzCiAKICAgICAgICAgaWYgc2VsZi50eXBlX25hbWUgIT0gdWNmaXJzdChzZWxmLnR5cGVf
bmFtZSk6CkBAIC03MzQsMTMgKzY5NiwxMyBAQCBjbGFzcyBQYXJhbWV0ZXI6CiAKIAogY2xhc3Mg
Q29tbWFuZDoKLSAgICBkZWYgX19pbml0X18oc2VsZiwgY29tbWFuZF9uYW1lLCB0YXJnZXRfdHlw
ZXMsIGNhbGxfcGFyYW1ldGVycywgcmV0dXJuX3BhcmFtZXRlcnMsIGRlc2NyaXB0aW9uLCBwbGF0
Zm9ybSwgaXNfYXN5bmMpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb21tYW5kX25hbWUsIHRh
cmdldF90eXBlcywgY2FsbF9wYXJhbWV0ZXJzLCByZXR1cm5fcGFyYW1ldGVycywgZGVzY3JpcHRp
b24sIGNvbmRpdGlvbiwgaXNfYXN5bmMpOgogICAgICAgICBzZWxmLmNvbW1hbmRfbmFtZSA9IGNv
bW1hbmRfbmFtZQogICAgICAgICBzZWxmLnRhcmdldF90eXBlcyA9IHRhcmdldF90eXBlcwogICAg
ICAgICBzZWxmLmNhbGxfcGFyYW1ldGVycyA9IGNhbGxfcGFyYW1ldGVycwogICAgICAgICBzZWxm
LnJldHVybl9wYXJhbWV0ZXJzID0gcmV0dXJuX3BhcmFtZXRlcnMKICAgICAgICAgc2VsZi5kZXNj
cmlwdGlvbiA9IGRlc2NyaXB0aW9uCi0gICAgICAgIHNlbGYucGxhdGZvcm0gPSBwbGF0Zm9ybQor
ICAgICAgICBzZWxmLmNvbmRpdGlvbiA9IGNvbmRpdGlvbgogICAgICAgICBzZWxmLmlzX2FzeW5j
ID0gaXNfYXN5bmMKIAogICAgIGRlZiByZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyhzZWxmLCBwcm90
b2NvbCwgZG9tYWluKToKQEAgLTc1NCwxMiArNzE2LDEyIEBAIGNsYXNzIENvbW1hbmQ6CiAKIAog
Y2xhc3MgRXZlbnQ6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGV2ZW50X25hbWUsIHRhcmdldF90
eXBlcywgZXZlbnRfcGFyYW1ldGVycywgZGVzY3JpcHRpb24sIHBsYXRmb3JtKToKKyAgICBkZWYg
X19pbml0X18oc2VsZiwgZXZlbnRfbmFtZSwgdGFyZ2V0X3R5cGVzLCBldmVudF9wYXJhbWV0ZXJz
LCBkZXNjcmlwdGlvbiwgY29uZGl0aW9uKToKICAgICAgICAgc2VsZi5ldmVudF9uYW1lID0gZXZl
bnRfbmFtZQogICAgICAgICBzZWxmLnRhcmdldF90eXBlcyA9IHRhcmdldF90eXBlcwogICAgICAg
ICBzZWxmLmV2ZW50X3BhcmFtZXRlcnMgPSBldmVudF9wYXJhbWV0ZXJzCiAgICAgICAgIHNlbGYu
ZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbgotICAgICAgICBzZWxmLnBsYXRmb3JtID0gcGxhdGZv
cm0KKyAgICAgICAgc2VsZi5jb25kaXRpb24gPSBjb25kaXRpb24KIAogICAgIGRlZiByZXNvbHZl
X3R5cGVfcmVmZXJlbmNlcyhzZWxmLCBwcm90b2NvbCwgZG9tYWluKToKICAgICAgICAgbG9nLmRl
YnVnKCI+PiBSZXNvbHZpbmcgdHlwZSByZWZlcmVuY2VzIGZvciBwYXJhbWV0ZXJzIGluIGV2ZW50
OiAlcyIgJSBzZWxmLmV2ZW50X25hbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQppbmRleCAyYjFkODc4MmNiMi4uYmQxOWMwMDI3
NTEgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQpAQCAtMTE3LDcgKzExNyw2IEBAIGRlZiBnZW5lcmF0ZV9mcm9tX3NwZWNpZmlj
YXRpb24ocHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoPU5vbmUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG91dHB1dF9kaXJwYXRoPU5vbmUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZvcmNlX291dHB1dD1GYWxzZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZnJhbWV3b3JrX25hbWU9IiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHBsYXRmb3JtX25hbWU9IiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdlbmVyYXRlX2Zyb250ZW5kPVRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdlbmVyYXRlX2JhY2tlbmQ9VHJ1ZSk6CiAKQEAgLTEzMCw3ICsxMjksNiBAQCBkZWYgZ2VuZXJh
dGVfZnJvbV9zcGVjaWZpY2F0aW9uKHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aD1Ob25l
LAogICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBlOgogICAgICAgICAgICAgcmFpc2UgRXhj
ZXB0aW9uKCJFcnJvciBwYXJzaW5nIHZhbGlkIEpTT04gaW4gZmlsZTogIiArIGZpbGVwYXRoICsg
IlxuUGFyc2UgZXJyb3I6ICIgKyBzdHIoZSkpCiAKLSAgICBwbGF0Zm9ybSA9IFBsYXRmb3JtLmZy
b21TdHJpbmcocGxhdGZvcm1fbmFtZSkKICAgICBwcm90b2NvbCA9IG1vZGVscy5Qcm90b2NvbChm
cmFtZXdvcmtfbmFtZSkKICAgICBmb3Igc3BlY2lmaWNhdGlvbiBpbiBzdXBwbGVtZW50YWxfc3Bl
Y2lmaWNhdGlvbl9maWxlcGF0aHM6CiAgICAgICAgIGxvYWRfc3BlY2lmaWNhdGlvbihwcm90b2Nv
bCwgc3BlY2lmaWNhdGlvbiwgaXNTdXBwbGVtZW50YWw9VHJ1ZSkKQEAgLTEzOCw3ICsxMzYsNyBA
QCBkZWYgZ2VuZXJhdGVfZnJvbV9zcGVjaWZpY2F0aW9uKHByaW1hcnlfc3BlY2lmaWNhdGlvbl9m
aWxlcGF0aD1Ob25lLAogCiAgICAgcHJvdG9jb2wucmVzb2x2ZV90eXBlcygpCiAKLSAgICBnZW5l
cmF0b3JfYXJndW1lbnRzID0gW3Byb3RvY29sLCBwbGF0Zm9ybSwgcHJpbWFyeV9zcGVjaWZpY2F0
aW9uX2ZpbGVwYXRoXQorICAgIGdlbmVyYXRvcl9hcmd1bWVudHMgPSBbcHJvdG9jb2wsIHByaW1h
cnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aF0KICAgICBnZW5lcmF0b3JzID0gW10KIAogICAgIGlm
IHByb3RvY29sLmZyYW1ld29yayBpcyBGcmFtZXdvcmtzLlRlc3Q6CkBAIC0yMjksNyArMjI3LDYg
QEAgZGVmIGdlbmVyYXRlX2Zyb21fc3BlY2lmaWNhdGlvbihwcmltYXJ5X3NwZWNpZmljYXRpb25f
ZmlsZXBhdGg9Tm9uZSwKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICBhbGxvd2Vk
X2ZyYW1ld29ya19uYW1lcyA9IFsnSmF2YVNjcmlwdENvcmUnLCAnV2ViSW5zcGVjdG9yJywgJ1dl
Ykluc3BlY3RvclVJJywgJ1dlYktpdCcsICdUZXN0J10KLSAgICBhbGxvd2VkX3BsYXRmb3JtX25h
bWVzID0gWydpT1MnLCAnbWFjT1MnLCAnYWxsJywgJ2dlbmVyaWMnXQogICAgIGNsaV9wYXJzZXIg
PSBvcHRwYXJzZS5PcHRpb25QYXJzZXIodXNhZ2U9InVzYWdlOiAlcHJvZyBbb3B0aW9uc10gUHJp
bWFyeVByb3RvY29sLmpzb24gW1N1cHBsZW1lbnRhbFByb3RvY29sLmpzb24gLi4uXSIpCiAgICAg
Y2xpX3BhcnNlci5hZGRfb3B0aW9uKCItbyIsICItLW91dHB1dERpciIsIGhlbHA9IkRpcmVjdG9y
eSB3aGVyZSBnZW5lcmF0ZWQgZmlsZXMgc2hvdWxkIGJlIHdyaXR0ZW4uIikKICAgICBjbGlfcGFy
c2VyLmFkZF9vcHRpb24oIi0tZnJhbWV3b3JrIiwgdHlwZT0iY2hvaWNlIiwgY2hvaWNlcz1hbGxv
d2VkX2ZyYW1ld29ya19uYW1lcywgaGVscD0iVGhlIGZyYW1ld29yayB0aGF0IHRoZSBwcmltYXJ5
IHNwZWNpZmljYXRpb24gYmVsb25ncyB0by4iKQpAQCAtMjM4LDcgKzIzNSw2IEBAIGlmIF9fbmFt
ZV9fID09ICdfX21haW5fXyc6CiAgICAgY2xpX3BhcnNlci5hZGRfb3B0aW9uKCItdCIsICItLXRl
c3QiLCBhY3Rpb249InN0b3JlX3RydWUiLCBoZWxwPSJFbmFibGUgdGVzdCBtb2RlLiBVc2UgdW5p
cXVlIG91dHB1dCBmaWxlbmFtZXMgY3JlYXRlZCBieSBwcmVwZW5kaW5nIHRoZSBpbnB1dCBmaWxl
bmFtZS4iKQogICAgIGNsaV9wYXJzZXIuYWRkX29wdGlvbigiLS1mcm9udGVuZCIsIGFjdGlvbj0i
c3RvcmVfdHJ1ZSIsIGhlbHA9IkdlbmVyYXRlIGNvZGUgZm9yIHRoZSBmcm9udGVuZC1zaWRlIG9m
IHRoZSBwcm90b2NvbCBvbmx5LiIpCiAgICAgY2xpX3BhcnNlci5hZGRfb3B0aW9uKCItLWJhY2tl
bmQiLCBhY3Rpb249InN0b3JlX3RydWUiLCBoZWxwPSJHZW5lcmF0ZSBjb2RlIGZvciB0aGUgYmFj
a2VuZC1zaWRlIG9mIHRoZSBwcm90b2NvbCBvbmx5LiIpCi0gICAgY2xpX3BhcnNlci5hZGRfb3B0
aW9uKCItLXBsYXRmb3JtIiwgZGVmYXVsdD0iZ2VuZXJpYyIsIGhlbHA9IlRoZSBwbGF0Zm9ybSBv
ZiB0aGUgYmFja2VuZCBiZWluZyBnZW5lcmF0ZWQuIEZvciBleGFtcGxlLCB3ZSBjb21waWxlIFdl
YktpdDIgZm9yIGVpdGhlciBtYWNPUyBvciBpT1MuIFRoaXMgdmFsdWUgaXMgY2FzZS1pbnNlbnNp
dGl2ZS4gQWxsb3dlZCB2YWx1ZXM6ICVzIiAlICIsICIuam9pbihhbGxvd2VkX3BsYXRmb3JtX25h
bWVzKSkKICAgICBvcHRpb25zID0gTm9uZQogCiAgICAgYXJnX29wdGlvbnMsIGFyZ192YWx1ZXMg
PSBjbGlfcGFyc2VyLnBhcnNlX2FyZ3MoKQpAQCAtMjY0LDcgKzI2MCw2IEBAIGlmIF9fbmFtZV9f
ID09ICdfX21haW5fXyc6CiAgICAgICAgICdvdXRwdXRfZGlycGF0aCc6IGFyZ19vcHRpb25zLm91
dHB1dERpciwKICAgICAgICAgJ2NvbmNhdGVuYXRlX291dHB1dCc6IGFyZ19vcHRpb25zLnRlc3Qs
CiAgICAgICAgICdmcmFtZXdvcmtfbmFtZSc6IGFyZ19vcHRpb25zLmZyYW1ld29yaywKLSAgICAg
ICAgJ3BsYXRmb3JtX25hbWUnOiBhcmdfb3B0aW9ucy5wbGF0Zm9ybSwKICAgICAgICAgJ2ZvcmNl
X291dHB1dCc6IGFyZ19vcHRpb25zLmZvcmNlLAogICAgICAgICAnZ2VuZXJhdGVfYmFja2VuZCc6
IGdlbmVyYXRlX2JhY2tlbmQsCiAgICAgICAgICdnZW5lcmF0ZV9mcm9udGVuZCc6IGdlbmVyYXRl
X2Zyb250ZW5kLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2FsbC9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2FsbC9kZWZpbml0aW9u
cy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4
MTdmMTM1ZWU1YS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2FsbC9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29u
CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotewotICAgICJkb21haW4iOiAiTmV0d29y
ayIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiTmV0d29y
a0Vycm9yIiwKLSAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCi0gICAgICAgICAgICAicGxh
dGZvcm0iOiAibWFjb3MiLAotICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCi0gICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJtZXNzYWdlIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9u
IjogIkVycm9yIG1lc3NhZ2UuIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29kZSIs
ICJ0eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgY29kZS4iIH0KLSAgICAg
ICAgICAgIF0KLSAgICAgICAgfQotICAgIF0sCi0gICAgImNvbW1hbmRzIjogWwotICAgICAgICB7
Ci0gICAgICAgICAgICAibmFtZSI6ICJsb2FkUmVzb3VyY2UiLAotICAgICAgICAgICAgInBsYXRm
b3JtIjogIm1hY29zIiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBhIHJlc291
cmNlIGluIHRoZSBjb250ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGluc3BlY3RlZCBwYWdlIHdpdGhv
dXQgY3Jvc3Mgb3JpZ2luIGNoZWNrcy4iCi0gICAgICAgIH0KLSAgICBdLAotICAgICJldmVudHMi
OiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogInJlc291cmNlTG9hZGVkIiwKLSAg
ICAgICAgICAgICJwbGF0Zm9ybSI6ICJtYWNvcyIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24i
OiAiQSByZXNvdXJjZSB3YXMgbG9hZGVkLiIKLSAgICAgICAgfQotICAgIF0KLX0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9hbGwvZXhw
ZWN0ZWQvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbi1yZXN1bHQgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvYWxsL2V4cGVjdGVkL2RlZmlu
aXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24tcmVzdWx0CmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBjNmU2OGY0YTlhZS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2FsbC9leHBlY3RlZC9kZWZpbml0aW9ucy13
aXRoLW1hYy1wbGF0Zm9ybS5qc29uLXJlc3VsdAorKysgL2Rldi9udWxsCkBAIC0xLDEyMTcgKzAs
MCBAQAotIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3Jt
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotLy8gTmV0
d29yawotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiTmV0d29yayIsIG51bGwpOwot
SW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIk5ldHdvcmsubG9hZFJlc291cmNlIiwg
bnVsbCwgW10sIFtdKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudCgiTmV0d29yay5y
ZXNvdXJjZUxvYWRlZCIsIG51bGwsIFtdKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJOZXR3
b3JrRGlzcGF0Y2hlciA9IEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEaXNwYXRjaGVyLmJpbmQo
SW5zcGVjdG9yQmFja2VuZCwgIk5ldHdvcmsiKTsKLUluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVE
b21haW4oIk5ldHdvcmsiLCBudWxsKTsKLSMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENv
bW1hbmRzLmpzCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRo
LW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgotI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLQotbmFtZXNwYWNlIEluc3Bl
Y3RvciB7Ci0KLWNsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAg
ICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBk
aXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9
Ci0gICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1
cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQotcHJpdmF0ZToKLSAgICBSZWZQdHI8QmFj
a2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Ci19OwotCi0KLWNsYXNzIEFsdGVy
bmF0ZU5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlz
cGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+QWx0ZXJuYXRlTmV0d29ya0JhY2tlbmRE
aXNwYXRjaGVyKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZShsb25nIGNhbGxJ
ZCkgPSAwOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSNlbmRpZiAvLyBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSMjIyBFbmQgRmlsZTogVGVzdEFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2Vu
ZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0
aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2Jq
ZWN0cy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNw
ZWN0b3IgewotCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQotI2lmIEVOQUJMRShJTlNQ
RUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotY2xhc3MgQWx0ZXJuYXRlTmV0d29ya0JhY2tl
bmREaXNwYXRjaGVyOwotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQotCi1jbGFzcyBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKLXB1Ymxp
YzoKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlKEVycm9yU3RyaW5nJikgPSAwOwotcHJv
dGVjdGVkOgotICAgIHZpcnR1YWwgfk5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsK
LX07Ci0KLWNsYXNzIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBw
bGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxOZXR3
b3JrQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIE5ldHdvcmtC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVz
dElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBm
aW5hbDsKLXByaXZhdGU6Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0SWQsIFJl
ZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCi1wdWJsaWM6Ci0gICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNw
YXRjaGVyKEFsdGVybmF0ZU5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0
Y2hlcikgeyBtX2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9Ci1w
cml2YXRlOgotICAgIEFsdGVybmF0ZU5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlciogbV9hbHRlcm5h
dGVEaXNwYXRjaGVyIHsgbnVsbHB0ciB9OwotI2VuZGlmCi1wcml2YXRlOgotICAgIE5ldHdvcmtC
YWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYsIE5ldHdvcmtCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXIqKTsKLSAgICBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2Fn
ZW50IHsgbnVsbHB0ciB9OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5k
IEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJh
Y2tlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBk
ZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0
QmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVk
ZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgot
Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jaW5jbHVkZSAi
VGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBJ
bnNwZWN0b3IgewotCi1OZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+TmV0d29ya0Jh
Y2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQotCi1SZWY8TmV0d29ya0JhY2tlbmREaXNwYXRj
aGVyPiBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYg
YmFja2VuZERpc3BhdGNoZXIsIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50
KQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcihi
YWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKLX0KLQotTmV0d29ya0JhY2tlbmREaXNwYXRjaGVy
OjpOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNw
YXRjaGVyLCBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKLSAgICA6IFN1
cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQotICAgICwgbV9h
Z2VudChhZ2VudCkKLXsKLSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNo
ZXJGb3JEb21haW4oIk5ldHdvcmsiX3MsIHRoaXMpOwotfQotCi12b2lkIE5ldHdvcmtCYWNrZW5k
RGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9k
LCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCi17Ci0gICAgUmVmPE5ldHdvcmtCYWNrZW5k
RGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7Ci0KLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBw
YXJhbWV0ZXJzOwotICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJz
KTsKLQotICAgIGlmIChtZXRob2QgPT0gImxvYWRSZXNvdXJjZSIpCi0gICAgICAgIGxvYWRSZXNv
dXJjZShyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOwotICAgIGVsc2UKLSAgICAgICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hl
cjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yay4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3Vu
ZCIpOwotfQotCi12b2lkIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlKGxv
bmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQotewotI2lmIEVOQUJMRShJTlNQ
RUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNo
ZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2UocmVxdWVz
dElkKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAgRXJyb3JTdHJpbmcg
ZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKLSAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2UoZXJyb3IpOwotCi0gICAgaWYgKCFlcnJv
ci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJl
cXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpT
ZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNs
dWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7
Ci0KLWNsYXNzIEZyb250ZW5kUm91dGVyOwotCi1jbGFzcyBOZXR3b3JrRnJvbnRlbmREaXNwYXRj
aGVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBOZXR3b3Jr
RnJvbnRlbmREaXNwYXRjaGVyKEZyb250ZW5kUm91dGVyJiBmcm9udGVuZFJvdXRlcikgOiBtX2Zy
b250ZW5kUm91dGVyKGZyb250ZW5kUm91dGVyKSB7IH0KLSAgICB2b2lkIHJlc291cmNlTG9hZGVk
KCk7Ci1wcml2YXRlOgotICAgIEZyb250ZW5kUm91dGVyJiBtX2Zyb250ZW5kUm91dGVyOwotfTsK
LQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERp
c3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNw
cAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFj
LXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJz
LmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7
Ci0KLXZvaWQgTmV0d29ya0Zyb250ZW5kRGlzcGF0Y2hlcjo6cmVzb3VyY2VMb2FkZWQoKQotewot
ICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJOZXR3b3JrLnJlc291
cmNlTG9hZGVkIl9zKTsKLQotICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNz
YWdlLT50b0pTT05TdHJpbmcoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0j
IyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0
aW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLW5hbWVzcGFjZSBQcm90b2Nv
bCB7Ci0KLQotCi0vLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KLW5hbWVzcGFjZSBOZXR3b3JrIHsK
LWNsYXNzIE5ldHdvcmtFcnJvcjsKLX0gLy8gTmV0d29yawotLy8gRW5kIG9mIGZvcndhcmQgZGVj
bGFyYXRpb25zLgotCi0KLQotCi1uYW1lc3BhY2UgTmV0d29yayB7Ci1jbGFzcyBOZXR3b3JrRXJy
b3IgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7Ci1wdWJsaWM6Ci0gICAgZW51bSB7Ci0gICAg
ICAgIE5vRmllbGRzU2V0ID0gMCwKLSAgICAgICAgTWVzc2FnZVNldCA9IDEgPDwgMCwKLSAgICAg
ICAgQ29kZVNldCA9IDEgPDwgMSwKLSAgICAgICAgQWxsRmllbGRzU2V0ID0gKE1lc3NhZ2VTZXQg
fCBDb2RlU2V0KQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+Ci0gICAgY2xhc3Mg
QnVpbGRlciB7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbV9y
ZXN1bHQ7Ci0KLSAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQ
PiYgY2FzdFN0YXRlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJl
dF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgQnVpbGRlcihSZWY8LypOZXR3b3JrRXJyb3IqL0pTT046Ok9iamVjdD4mJiBvYmplY3QpCi0g
ICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKLSAgICAgICAgewotICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRl
ZF9pbl9ub25faW5pdF9zdGF0ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZnJpZW5kIGNsYXNzIE5l
dHdvcmtFcnJvcjsKLSAgICBwdWJsaWM6Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1lc3Nh
Z2VTZXQ+JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNZXNzYWdlU2V0KSwgcHJvcGVydHlfbWVz
c2FnZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJtZXNz
YWdlIl9zLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1lc3NhZ2VTZXQ+
KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29kZVNldD4mIHNldENv
ZGUoaW50IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgQ29kZVNldCksIHByb3BlcnR5X2NvZGVfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAg
bV9yZXN1bHQtPnNldEludGVnZXIoImNvZGUiX3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVy
biBjYXN0U3RhdGU8Q29kZVNldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIFJlZjxOZXR3b3Jr
RXJyb3I+IHJlbGVhc2UoKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChT
VEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwotICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoc2l6ZW9mKE5ldHdvcmtFcnJvcikgPT0gc2l6ZW9mKEpTT046Ok9iamVj
dCksIGNhbm5vdF9jYXN0KTsKLQotICAgICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4ganNvblJl
c3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7Ci0gICAgICAgICAgICBhdXRvIHJlc3Vs
dCA9IFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPE5ldHdvcmtFcnJvcj4qPigmanNvblJl
c3VsdCkpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgIH07Ci0K
LSAgICAvKgotICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKLSAgICAgKiBSZWY8TmV0d29y
a0Vycm9yPiByZXN1bHQgPSBOZXR3b3JrRXJyb3I6OmNyZWF0ZSgpCi0gICAgICogICAgIC5zZXRN
ZXNzYWdlKC4uLikKLSAgICAgKiAgICAgLnNldENvZGUoLi4uKQotICAgICAqICAgICAucmVsZWFz
ZSgpOwotICAgICAqLwotICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6
Y3JlYXRlKCkpOwotICAgIH0KLX07Ci0KLX0gLy8gTmV0d29yawotCi0KLQotfSAvLyBuYW1lc3Bh
Y2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbE9iamVjdHMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0
cy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRo
LW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3Rz
LmgiCi0KLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewot
Ci0KLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW5jbHVkZSA8
d3RmL1JldGFpblB0ci5oPgotCi1AcHJvdG9jb2wgVGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkhh
bmRsZXI7Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLWNsYXNzIE9iakNJbnNwZWN0b3JO
ZXR3b3JrQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJuYXRlTmV0d29ya0Jh
Y2tlbmREaXNwYXRjaGVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoK
LSAgICBPYmpDSW5zcGVjdG9yTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2Nv
bE5ldHdvcmtEb21haW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9
Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0SWQpIGZpbmFsOwotcHJpdmF0ZToK
LSAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkhhbmRsZXI+PiBtX2Rl
bGVnYXRlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0
ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgIlRlc3RQcm90
b2NvbEludGVybmFsLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgi
Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0K
LXZvaWQgT2JqQ0luc3BlY3Rvck5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNl
KGxvbmcgcmVxdWVzdElkKQotewotICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVj
dG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2VXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJh
Y2s6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJv
cihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3Jr
LmxvYWRSZXNvdXJjZScgd2FzIG5vdCBmb3VuZCJfcyk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNw
YXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigp
LT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgIH07Ci0KLSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sg
PSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElk
LCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7Ci0gICAgfTsKLQotICAgIFttX2RlbGVn
YXRlIGxvYWRSZXNvdXJjZVdpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0Nh
bGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107Ci19Ci0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0KLSMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPFdlYklu
c3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRl
ZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVj
dAotQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNldE5ldHdvcmtIYW5kbGVy
OikgaWQ8VGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkhhbmRsZXI+IG5ldHdvcmtIYW5kbGVyOwot
QHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWlu
RXZlbnREaXNwYXRjaGVyICpuZXR3b3JrRXZlbnREaXNwYXRjaGVyOwotQGVuZAotCi0KLSMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1
cmF0aW9uLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW1wb3J0ICJU
ZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9B
dWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2ltcG9ydCA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0KLXVzaW5nIG5hbWVzcGFj
ZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9u
Ci17Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKLSAg
ICBpZDxUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluSGFuZGxlcj4gX25ldHdvcmtIYW5kbGVyOwot
ICAgIFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5FdmVudERpc3BhdGNoZXIgKl9uZXR3b3JrRXZl
bnREaXNwYXRjaGVyOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihB
dWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBzZWxmID0g
W3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBB
U1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAgIHJl
dHVybiBzZWxmOwotfQotCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBbX25ldHdvcmtIYW5kbGVy
IHJlbGVhc2VdOwotICAgIFtfbmV0d29ya0V2ZW50RGlzcGF0Y2hlciByZWxlYXNlXTsKLSAgICBb
c3VwZXIgZGVhbGxvY107Ci19Ci0KLS0gKHZvaWQpc2V0TmV0d29ya0hhbmRsZXI6KGlkPFRlc3RQ
cm90b2NvbE5ldHdvcmtEb21haW5IYW5kbGVyPiloYW5kbGVyCi17Ci0gICAgaWYgKGhhbmRsZXIg
PT0gX25ldHdvcmtIYW5kbGVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBbX25ldHdvcmtIYW5k
bGVyIHJlbGVhc2VdOwotICAgIF9uZXR3b3JrSGFuZGxlciA9IFtoYW5kbGVyIHJldGFpbl07Ci0K
LSAgICBhdXRvIGFsdGVybmF0ZURpc3BhdGNoZXIgPSBtYWtlVW5pcXVlPE9iakNJbnNwZWN0b3JO
ZXR3b3JrQmFja2VuZERpc3BhdGNoZXI+KGhhbmRsZXIpOwotICAgIGF1dG8gYWx0ZXJuYXRlQWdl
bnQgPSBtYWtlVW5pcXVlPEFsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50PE5ldHdvcmtCYWNrZW5k
RGlzcGF0Y2hlciwgQWx0ZXJuYXRlTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyPj4oIk5ldHdvcmsi
X3MsICpfY29udHJvbGxlciwgV1RGTW92ZShhbHRlcm5hdGVEaXNwYXRjaGVyKSk7Ci0gICAgX2Nv
bnRyb2xsZXItPmFwcGVuZEV4dHJhQWdlbnQoV1RGTW92ZShhbHRlcm5hdGVBZ2VudCkpOwotfQot
Ci0tIChpZDxUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluSGFuZGxlcj4pbmV0d29ya0hhbmRsZXIK
LXsKLSAgICByZXR1cm4gX25ldHdvcmtIYW5kbGVyOwotfQotCi0tIChUZXN0UHJvdG9jb2xOZXR3
b3JrRG9tYWluRXZlbnREaXNwYXRjaGVyICopbmV0d29ya0V2ZW50RGlzcGF0Y2hlcgotewotICAg
IGlmICghX25ldHdvcmtFdmVudERpc3BhdGNoZXIpCi0gICAgICAgIF9uZXR3b3JrRXZlbnREaXNw
YXRjaGVyID0gW1tUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluRXZlbnREaXNwYXRjaGVyIGFsbG9j
XSBpbml0V2l0aENvbnRyb2xsZXI6X2NvbnRyb2xsZXJdOwotICAgIHJldHVybiBfbmV0d29ya0V2
ZW50RGlzcGF0Y2hlcjsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbi5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNw
YXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25z
LXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAi
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5o
PgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW1wbGVtZW50YXRpb24gVGVzdFBy
b3RvY29sTmV0d29ya0RvbWFpbkV2ZW50RGlzcGF0Y2hlcgotewotICAgIEF1Z21lbnRhYmxlSW5z
cGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0
V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxl
cgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICBy
ZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9IGNv
bnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpcmVzb3VyY2VMb2FkZWQK
LXsKLSAgICBjb25zdCBGcm9udGVuZFJvdXRlciYgcm91dGVyID0gX2NvbnRyb2xsZXItPmZyb250
ZW5kUm91dGVyKCk7Ci0KLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9z
LCAiTmV0d29yay5yZXNvdXJjZUxvYWRlZCJfcyk7Ci0gICAgcm91dGVyLnNlbmRFdmVudChqc29u
TWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2wuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdp
dGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLSNpbXBvcnQgPFdl
Ykluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KLQotCi1AY2xhc3MgVGVzdFByb3Rv
Y29sTmV0d29ya0Vycm9yOwotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9j
b2xQbGF0Zm9ybSkgewotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsLAotICAgIFRlc3RQcm90
b2NvbFBsYXRmb3JtR2VuZXJpYywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUywKLSAgICBU
ZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TLAotfTsKLQotCi0KLQotX19hdHRyaWJ1dGVfXygodmlz
aWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbE5ldHdvcmtFcnJv
ciA6IFJXSVByb3RvY29sSlNPTk9iamVjdAotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9h
ZDooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQ7Ci0tIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9i
amVjdDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2Fn
ZSBjb2RlOihpbnQpY29kZTsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBj
b3B5KSBOU1N0cmluZyAqbWVzc2FnZTsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRv
bWljLCBhc3NpZ24pIGludCBjb2RlOwotQGVuZAotCi1AcHJvdG9jb2wgVGVzdFByb3RvY29sTmV0
d29ya0RvbWFpbkhhbmRsZXIgPE5TT2JqZWN0PgotQG9wdGlvbmFsCi0tICh2b2lkKWxvYWRSZXNv
dXJjZVdpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxs
YmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikodm9pZCkpc3VjY2Vzc0NhbGxiYWNrOwotQGVu
ZAotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2Ug
VGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkV2ZW50RGlzcGF0Y2hlciA6IE5TT2JqZWN0Ci0tICh2
b2lkKXJlc291cmNlTG9hZGVkOwotQGVuZAotCi0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQ
cm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4KLQotIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2wuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRm
b3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2lt
cG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJp
dmF0ZS5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250
cm9sbGVyLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi1AaW50ZXJmYWNlIFRlc3RQ
cm90b2NvbE5ldHdvcmtEb21haW5FdmVudERpc3BhdGNoZXIgKFByaXZhdGUpCi0tIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihJbnNwZWN0b3I6OkF1Z21lbnRhYmxlSW5zcGVjdG9y
Q29udHJvbGxlciopY29udHJvbGxlcjsKLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbEludGVybmFsLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0
aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9S
V0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KLU9wdGlvbmFsPE9iakNFbnVtVHlwZT4g
ZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOwotCi1pbmxpbmUgU3RyaW5n
IHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sUGxhdGZvcm0gdmFsdWUpCi17Ci0gICAgc3dp
dGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDoKLSAgICAgICAg
cmV0dXJuICJhbGwiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM6Ci0g
ICAgICAgIHJldHVybiAiZ2VuZXJpYyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3Jt
SU9TOgotICAgICAgICByZXR1cm4gImlvcyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRm
b3JtTWFjT1M6Ci0gICAgICAgIHJldHVybiAibWFjb3MiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0
ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sUGxhdGZvcm0+IGZyb21Qcm90b2NvbFN0
cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiYWxsIikKLSAg
ICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOwotICAgIGlmICh2YWx1ZSA9PSAi
Z2VuZXJpYyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM7Ci0g
ICAgaWYgKHZhbHVlID09ICJpb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZv
cm1JT1M7Ci0gICAgaWYgKHZhbHVlID09ICJtYWNvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJv
dG9jb2xQbGF0Zm9ybU1hY09TOwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLQotCi19
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0
aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLQotI2ltcG9y
dCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCi0j
aW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotCi11
c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucyAoTmV0d29ya0RvbWFpbikKLQotKyAodm9pZClfcGFyc2VOZXR3b3JrRXJyb3I6
KFRlc3RQcm90b2NvbE5ldHdvcmtFcnJvciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5
bG9hZDsKLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zIChOZXR3b3JrRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZU5ldHdvcmtFcnJvcjooVGVzdFBy
b3RvY29sTmV0d29ya0Vycm9yICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17
Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5
IGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xOZXR3b3JrRXJyb3IgYWxs
b2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xUeXBlcy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmlu
aXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2lt
cG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0
b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotI2ltcG9ydCA8d3RmL0Fzc2VydGlv
bnMuaD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNw
ZWN0b3I7Ci0KLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbE5ldHdvcmtFcnJvcgotCi0t
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0
cmluZyAqLCBpZD4gKilwYXlsb2FkCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkp
Ci0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVE
X1BST1BFUlRZKHBheWxvYWRbQCJtZXNzYWdlIl0sIEAibWVzc2FnZSIpOwotICAgIHNlbGYubWVz
c2FnZSA9IHBheWxvYWRbQCJtZXNzYWdlIl07Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JF
UVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJjb2RlIl0sIEAiY29kZSIpOwotICAgIHNlbGYuY29k
ZSA9IFtwYXlsb2FkW0AiY29kZSJdIGludGVnZXJWYWx1ZV07Ci0KLSAgICByZXR1cm4gc2VsZjsK
LX0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpT
T05PYmplY3QgKilvYmplY3QKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoSlNP
Tk9iamVjdDpbb2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0KCldKSkKLSAgICAgICAgcmV0dXJuIG5p
bDsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhNZXNz
YWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZTooaW50KWNvZGUKLXsKLSAgICBpZiAoIShzZWxm
ID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkobWVzc2FnZSwgQCJtZXNzYWdlIik7Ci0KLSAgICBz
ZWxmLm1lc3NhZ2UgPSBtZXNzYWdlOwotICAgIHNlbGYuY29kZSA9IGNvZGU7Ci0KLSAgICByZXR1
cm4gc2VsZjsKLX0KLQotLSAodm9pZClzZXRNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UKLXsK
LSAgICBbc3VwZXIgc2V0U3RyaW5nOm1lc3NhZ2UgZm9yS2V5OkAibWVzc2FnZSJdOwotfQotCi0t
IChOU1N0cmluZyAqKW1lc3NhZ2UKLXsKLSAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpA
Im1lc3NhZ2UiXTsKLX0KLQotLSAodm9pZClzZXRDb2RlOihpbnQpY29kZQotewotICAgIFtzdXBl
ciBzZXRJbnRlZ2VyOmNvZGUgZm9yS2V5OkAiY29kZSJdOwotfQotCi0tIChpbnQpY29kZQotewot
ICAgIHJldHVybiBbc3VwZXIgaW50ZWdlckZvcktleTpAImNvZGUiXTsKLX0KLQotQGVuZAotCi0K
LSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9jb21tYW5kLXRhcmdldFR5cGUt
bWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRv
bWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwLi5kMjdhYjY1YjkyYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9jb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmct
ZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KQEAgLTAsMCArMSw5IEBACitbCit7CisgICAgImRv
bWFpbiI6ICJEb21haW4iLAorICAgICJkZWJ1Z2dhYmxlVHlwZXMiOiBbInBhZ2UiXSwKKyAgICAi
dGFyZ2V0VHlwZXMiOiBbInBhZ2UiLCAid29ya2VyIl0sCisgICAgImNvbW1hbmRzIjogW3sibmFt
ZSI6ICJDb21tYW5kIn1dLAorICAgICJldmVudHMiOiBbeyJuYW1lIjogIkV2ZW50In1dCit9Citd
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0
ZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xMTI2MmU4ODlm
YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCkBAIC0wLDAgKzEs
MTA5IEBACit7CisgICAgImRvbWFpbiI6ICJEYXRhYmFzZSIsCisgICAgInR5cGVzIjogWworICAg
ICAgICB7CisgICAgICAgICAgICAiaWQiOiAiRGF0YWJhc2VJZCIsCisgICAgICAgICAgICAidHlw
ZSI6ICJpbnRlZ2VyIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgaWRlbnRp
ZmllciBvZiBEYXRhYmFzZSBvYmplY3QuIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAg
ICAgICAiaWQiOiAiUHJpbWFyeUNvbG9ycyIsCisgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmci
LAorICAgICAgICAgICAgImVudW0iOiBbInJlZCIsICJncmVlbiIsICJibHVlIl0KKyAgICAgICAg
fSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkNvbG9yTGlzdCIsCisgICAgICAgICAg
ICAidHlwZSI6ICJhcnJheSIsCisgICAgICAgICAgICAiaXRlbXMiOiB7ICIkcmVmIjogIlByaW1h
cnlDb2xvcnMiIH0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkVy
cm9yIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAiZGVzY3Jp
cHRpb24iOiAiRGF0YWJhc2UgZXJyb3IuIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwor
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibWVzc2FnZSIsICJ0eXBlIjogInN0cmluZyIsICJk
ZXNjcmlwdGlvbiI6ICJFcnJvciBtZXNzYWdlLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogImNvZGUiLCAidHlwZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIGNvZGUu
IiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJjb21tYW5kcyI6IFsK
KyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJl
dHVyblZhbHVlcyIsCisgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogImRhdGFiYXNlSWQiLCAiJHJlZiI6ICJEYXRhYmFzZUlkIiB9LAorICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAicXVlcnkiLCAidHlwZSI6ICJzdHJpbmciIH0KKyAgICAgICAg
ICAgIF0sCisgICAgICAgICAgICAicmV0dXJucyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAib3B0aW9uYWwiOiB0cnVlLCAiaXRl
bXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
bm90ZXMiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiLCAib3B0aW9uYWwi
OiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJv
YmplY3QiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJw
YXlsb2FkIiwgInR5cGUiOiAiYW55IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiLCAib3B0aW9u
YWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVm
IjogIkVycm9yIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6ICJQcmltYXJ5Q29sb3JzIiwgIm9wdGlvbmFsIjogdHJ1
ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwgIiRyZWYi
OiAiQ29sb3JMaXN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJjeWFuIiwgIm1h
Z2VudGEiLCAieWVsbG93IiwgImJsYWNrIl0sICJvcHRpb25hbCI6IHRydWUgfQorICAgICAgICAg
ICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJleGVjdXRl
U1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyIsCisgICAgICAgICAgICAiYXN5bmMiOiB0cnVl
LAorICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIgfSwKKyAgICAgICAgICAgICAgICB7
ICJuYW1lIjogInF1ZXJ5IiwgInR5cGUiOiAic3RyaW5nIiB9CisgICAgICAgICAgICBdLAorICAg
ICAgICAgICAgInJldHVybnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5O
YW1lcyIsICJ0eXBlIjogImFycmF5IiwgIm9wdGlvbmFsIjogdHJ1ZSwgIml0ZW1zIjogeyAidHlw
ZSI6ICJzdHJpbmciIH0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vdGVzIiwgInR5
cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAor
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiwgIm9w
dGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0
eXBlIjogImFueSIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogImRhdGFiYXNlSWQiLCAiJHJlZiI6ICJEYXRhYmFzZUlkIiwgIm9wdGlvbmFsIjogdHJ1ZSB9
LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic3FsRXJyb3IiLCAiJHJlZiI6ICJFcnJvciIs
ICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNjcmVlbkNv
bG9yIiwgIiRyZWYiOiAiUHJpbWFyeUNvbG9ycyIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogImFsdGVybmF0ZUNvbG9ycyIsICIkcmVmIjogIkNvbG9yTGlz
dCIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInByaW50
Q29sb3IiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsiY3lhbiIsICJtYWdlbnRhIiwgInll
bGxvdyIsICJibGFjayJdLCAib3B0aW9uYWwiOiB0cnVlIH0KKyAgICAgICAgICAgIF0KKyAgICAg
ICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiZXhlY3V0ZVNRTFN5bmMiLAor
ICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJk
YXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIgfSwKKyAgICAgICAgICAgICAgICB7ICJu
YW1lIjogInF1ZXJ5IiwgInR5cGUiOiAic3RyaW5nIiB9CisgICAgICAgICAgICBdLAorICAgICAg
ICAgICAgInJldHVybnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1l
cyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwKKyAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiB9LAorICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiB9LAor
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiB9LAor
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIgfSwKKyAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogImRhdGFiYXNlSWQiLCAiJHJlZiI6ICJEYXRhYmFzZUlk
IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic3FsRXJyb3IiLCAiJHJlZiI6ICJFcnJv
ciIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImFsdGVybmF0ZUNvbG9ycyIsICIkcmVm
IjogIkNvbG9yTGlzdCIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNjcmVlbkNvbG9y
IiwgIiRyZWYiOiAiUHJpbWFyeUNvbG9ycyIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjog
InByaW50Q29sb3IiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsiY3lhbiIsICJtYWdlbnRh
IiwgInllbGxvdyIsICJibGFjayJdIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAg
ICAgeworICAgICAgICAgICAgIm5hbWUiOiAiZXhlY3V0ZVNRTEFzeW5jIiwKKyAgICAgICAgICAg
ICJhc3luYyI6IHRydWUsCisgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogImRhdGFiYXNlSWQiLCAiJHJlZiI6ICJEYXRhYmFzZUlkIiB9LAorICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAicXVlcnkiLCAidHlwZSI6ICJzdHJpbmciIH0KKyAgICAg
ICAgICAgIF0sCisgICAgICAgICAgICAicmV0dXJucyI6IFsKKyAgICAgICAgICAgICAgICB7ICJu
YW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICJ0eXBlIjog
InN0cmluZyIgfSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6
ICJzdHJpbmciIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlw
ZSI6ICJudW1iZXIiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlw
ZSI6ICJvYmplY3QiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5
cGUiOiAiYW55IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIk
cmVmIjogIkRhdGFiYXNlSWQiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzcWxFcnJv
ciIsICIkcmVmIjogIkVycm9yIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2NyZWVu
Q29sb3IiLCAiJHJlZiI6ICJQcmltYXJ5Q29sb3JzIiB9LAorICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwgIiRyZWYiOiAiQ29sb3JMaXN0IiB9LAorICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjog
WyJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93IiwgImJsYWNrIl0gfQorICAgICAgICAgICAgXQor
ICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4t
cGFyYW1ldGVycy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29u
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4zNjFkNTdkODIwZAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgpA
QCAtMCwwICsxLDg1IEBACit7CisgICAgImRvbWFpbiI6ICJEYXRhYmFzZSIsCisgICAgInR5cGVz
IjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiRGF0YWJhc2VJZCIsCisgICAgICAg
ICAgICAidHlwZSI6ICJpbnRlZ2VyIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlx
dWUgaWRlbnRpZmllciBvZiBEYXRhYmFzZSBvYmplY3QuIgorICAgICAgICB9LAorICAgICAgICB7
CisgICAgICAgICAgICAiaWQiOiAiUHJpbWFyeUNvbG9ycyIsCisgICAgICAgICAgICAidHlwZSI6
ICJzdHJpbmciLAorICAgICAgICAgICAgImVudW0iOiBbInJlZCIsICJncmVlbiIsICJibHVlIl0K
KyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkNvbG9yTGlzdCIsCisg
ICAgICAgICAgICAidHlwZSI6ICJhcnJheSIsCisgICAgICAgICAgICAiaXRlbXMiOiB7ICIkcmVm
IjogIlByaW1hcnlDb2xvcnMiIH0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAg
ImlkIjogIkVycm9yIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAg
ICAiZGVzY3JpcHRpb24iOiAiRGF0YWJhc2UgZXJyb3IuIiwKKyAgICAgICAgICAgICJwcm9wZXJ0
aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibWVzc2FnZSIsICJ0eXBlIjogInN0
cmluZyIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBtZXNzYWdlLiIgfSwKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogImNvZGUiLCAidHlwZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9uIjogIkVy
cm9yIGNvZGUuIiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJjb21t
YW5kcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiZXhlY3V0ZUFsbE9wdGlv
bmFsUGFyYW1ldGVycyIsCisgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAib3B0aW9uYWwi
OiB0cnVlLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAorICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVlIH0s
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIi
LCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMi
LCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAor
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNl
SWQiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzcWxF
cnJvciIsICIkcmVmIjogIkVycm9yIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6ICJQcmltYXJ5Q29sb3JzIiwgIm9w
dGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYWx0ZXJuYXRlQ29s
b3JzIiwgIiRyZWYiOiAiQ29sb3JMaXN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjog
WyJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93IiwgImJsYWNrIl0sICJvcHRpb25hbCI6IHRydWUg
fQorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJyZXR1cm5zIjogWworICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJvcHRpb25hbCI6
IHRydWUsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWUgfSwK
KyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIs
ICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIs
ICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7
ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJ
ZCIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNxbEVy
cm9yIiwgIiRyZWYiOiAiRXJyb3IiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlDb2xvcnMiLCAib3B0
aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJhbHRlcm5hdGVDb2xv
cnMiLCAiJHJlZiI6ICJDb2xvckxpc3QiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBb
ImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSwgIm9wdGlvbmFsIjogdHJ1ZSB9
CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1l
IjogImV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyIsCisgICAgICAgICAgICAicGFyYW1ldGVy
cyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAi
YXJyYXkiLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAorICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciIH0sCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiIH0sCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiIH0sCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiB9LAorICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiIH0sCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVycm9yIiB9LAorICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6ICJQcmltYXJ5Q29sb3Jz
IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwgIiRyZWYi
OiAiQ29sb3JMaXN0IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJpbnRDb2xvciIs
ICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93Iiwg
ImJsYWNrIl0gfQorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJyZXR1cm5zIjogWworICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJp
dGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjog
InRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIgfSwKKyAgICAgICAgICAgICAgICB7
ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiIH0sCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlDb2xvcnMiIH0sCisgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJhbHRlcm5hdGVDb2xvcnMiLCAiJHJlZiI6ICJDb2xvckxp
c3QiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAi
c3RyaW5nIiwgImVudW0iOiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSB9
CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZGVmaW5pdGlvbnMtd2l0aC1t
YWMtcGxhdGZvcm0uanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45YmU0NmExN2FkMQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9kZWZpbml0aW9u
cy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCkBAIC0wLDAgKzEsMjggQEAKK3sKKyAgICAiZG9tYWlu
IjogIk5ldHdvcmsiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlk
IjogIk5ldHdvcmtFcnJvciIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAg
ICAgICAgImNvbmRpdGlvbiI6ICJQTEFURk9STShNQUMpIiwKKyAgICAgICAgICAgICJwcm9wZXJ0
aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibWVzc2FnZSIsICJ0eXBlIjogInN0
cmluZyIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBtZXNzYWdlLiIgfSwKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogImNvZGUiLCAidHlwZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9uIjogIkVy
cm9yIGNvZGUuIiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJjb21t
YW5kcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAibG9hZFJlc291cmNlIiwK
KyAgICAgICAgICAgICJjb25kaXRpb24iOiAiUExBVEZPUk0oTUFDKSIsCisgICAgICAgICAgICAi
ZGVzY3JpcHRpb24iOiAiTG9hZHMgYSByZXNvdXJjZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1l
IG9uIHRoZSBpbnNwZWN0ZWQgcGFnZSB3aXRob3V0IGNyb3NzIG9yaWdpbiBjaGVja3MuIgorICAg
ICAgICB9CisgICAgXSwKKyAgICAiZXZlbnRzIjogWworICAgICAgICB7CisgICAgICAgICAgICAi
bmFtZSI6ICJyZXNvdXJjZUxvYWRlZCIsCisgICAgICAgICAgICAiY29uZGl0aW9uIjogIlBMQVRG
T1JNKE1BQykiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkEgcmVzb3VyY2Ugd2FzIGxv
YWRlZC4iCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29u
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2RvbWFpbi1k
ZWJ1Z2dhYmxlVHlwZXMuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MC4uMWZlYjBjOWEyN2UKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uCkBAIC0w
LDAgKzEsOCBAQAorWworeworICAgICJkb21haW4iOiAiRG9tYWluIiwKKyAgICAiZGVidWdnYWJs
ZVR5cGVzIjogWyJ3ZWItcGFnZSJdLAorICAgICJjb21tYW5kcyI6IFt7Im5hbWUiOiAiQ29tbWFu
ZCJ9XSwKKyAgICAiZXZlbnRzIjogW3sibmFtZSI6ICJFdmVudCJ9XQorfQorXQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2RvbWFpbi10
YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2RvbWFpbi10YXJnZXRUeXBlLW1h
dGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwLi5mNjJmYjM4YmE3OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9kb21haW4tdGFyZ2V0VHlwZS1t
YXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgpAQCAtMCwwICsxLDggQEAKK1sKK3sK
KyAgICAiZG9tYWluIjogIkRvbWFpbiIsCisgICAgImRlYnVnZ2FibGVUeXBlcyI6IFsicGFnZSJd
LAorICAgICJjb21tYW5kcyI6IFt7Im5hbWUiOiAiQ29tbWFuZCIsICJ0YXJnZXRUeXBlcyI6IFsi
cGFnZSIsICJ3b3JrZXIiXX1dLAorICAgICJldmVudHMiOiBbeyJuYW1lIjogIkV2ZW50In1dCit9
CitdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZG9tYWluLXRhcmdldFR5cGVzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZG9tYWluLXRhcmdldFR5cGVzLmpzb24KbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjZhNmU0MGQ2MGFkCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2RvbWFpbi10
YXJnZXRUeXBlcy5qc29uCkBAIC0wLDAgKzEsOCBAQAorWworeworICAgICJkb21haW4iOiAiRG9t
YWluIiwKKyAgICAidGFyZ2V0VHlwZXMiOiBbInBhZ2UiXSwKKyAgICAiY29tbWFuZHMiOiBbeyJu
YW1lIjogIkNvbW1hbmQiLCAidGFyZ2V0VHlwZXMiOiBbInBhZ2UiXX1dLAorICAgICJldmVudHMi
OiBbeyJuYW1lIjogIkV2ZW50IiwgInRhcmdldFR5cGVzIjogWyJwYWdlIl19XQorfQorXQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2Rv
bWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5k
LXNpemVzLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjk0YThl
Y2IxNzZkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgpA
QCAtMCwwICsxLDU0IEBACitbCit7CisgICAgImRvbWFpbiI6ICJOZXR3b3JrMSIsCisgICAgImNv
bW1hbmRzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJsb2FkUmVzb3VyY2Ux
IiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBhIHJlc291cmNlIGluIHRoZSBj
b250ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGluc3BlY3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3Jp
Z2luIGNoZWNrcy4iCisgICAgICAgIH0KKyAgICBdCit9LAoreworICAgICJkb21haW4iOiAiTmV0
d29yazIiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkxv
YWRlcklkIiwKKyAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAiZGVz
Y3JpcHRpb24iOiAiVW5pcXVlIGxvYWRlciBpZGVudGlmaWVyLiIKKyAgICAgICAgfQorICAgIF0K
K30sCit7CisgICAgImRvbWFpbiI6ICJOZXR3b3JrMyIsCisgICAgImNvbW1hbmRzIjogWworICAg
ICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJsb2FkUmVzb3VyY2UxIiwKKyAgICAgICAgICAg
ICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBhIHJlc291cmNlIGluIHRoZSBjb250ZXh0IG9mIGEgZnJh
bWUgb24gdGhlIGluc3BlY3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNoZWNrcy4iCisg
ICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJjZTIi
LAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNv
bnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmln
aW4gY2hlY2tzLiIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAi
bG9hZFJlc291cmNlMyIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9hZHMgYSByZXNv
dXJjZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFnZSB3aXRo
b3V0IGNyb3NzIG9yaWdpbiBjaGVja3MuIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAg
ICAgICAibmFtZSI6ICJsb2FkUmVzb3VyY2U0IiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6
ICJMb2FkcyBhIHJlc291cmNlIGluIHRoZSBjb250ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGluc3Bl
Y3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNoZWNrcy4iCisgICAgICAgIH0sCisgICAg
ICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJjZTUiLAorICAgICAgICAgICAg
ImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFt
ZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKKyAg
ICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAibG9hZFJlc291cmNlNiIs
CisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9hZHMgYSByZXNvdXJjZSBpbiB0aGUgY29u
dGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFnZSB3aXRob3V0IGNyb3NzIG9yaWdp
biBjaGVja3MuIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJs
b2FkUmVzb3VyY2U3IiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBhIHJlc291
cmNlIGluIHRoZSBjb250ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGluc3BlY3RlZCBwYWdlIHdpdGhv
dXQgY3Jvc3Mgb3JpZ2luIGNoZWNrcy4iCisgICAgICAgIH0KKyAgICBdCit9CitdCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZW51bS12
YWx1ZXMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9lbnVtLXZhbHVlcy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
Li5jZGFkNjFkZjdjOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9lbnVtLXZhbHVlcy5qc29uCkBAIC0wLDAgKzEsMzUgQEAK
K3siZG9tYWlucyI6WworeworICAgICJkb21haW4iOiAiVHlwZURvbWFpbiIsCisgICAgInR5cGVz
IjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiVHlwZURvbWFpbkVudW0iLAorICAg
ICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICJlbnVtIjogWyJzaGFyZWQi
LCAicmVkIiwgImdyZWVuIiwgImJsdWUiXQorICAgICAgICB9CisgICAgXQorfSwKK3sKKyAgICAi
ZG9tYWluIjogIkNvbW1hbmREb21haW4iLAorICAgICJjb21tYW5kcyI6IFsKKyAgICAgICAgewor
ICAgICAgICAgICAgIm5hbWUiOiAiY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUiLAorICAgICAg
ICAgICAgInBhcmFtZXRlcnMiOiBbXSwKKyAgICAgICAgICAgICJyZXR1cm5zIjogWworICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAicmV0dXJuVmFsdWUiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51
bSI6IFsic2hhcmVkIiwgImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciXSB9CisgICAgICAgICAg
ICBdCisgICAgICAgIH0KKyAgICBdCit9LAoreworICAgICJkb21haW4iOiAiRXZlbnREb21haW4i
LAorICAgICJldmVudHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImV2ZW50
V2l0aEVudW1QYXJhbWV0ZXIiLAorICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJwYXJhbWV0ZXIiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6
IFsic2hhcmVkIiwgImJsYWNrIiwgIndoaXRlIl0gfQorICAgICAgICAgICAgXQorICAgICAgICB9
CisgICAgXQorfQorXX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9ldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dh
YmxlVHlwZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24K
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjRkZmVkNDFlZDIxCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24K
QEAgLTAsMCArMSw4IEBACitbCit7CisgICAgImRvbWFpbiI6ICJEb21haW4iLAorICAgICJkZWJ1
Z2dhYmxlVHlwZXMiOiBbInBhZ2UiXSwKKyAgICAiY29tbWFuZHMiOiBbeyJuYW1lIjogIkNvbW1h
bmQifV0sCisgICAgImV2ZW50cyI6IFt7Im5hbWUiOiAiRXZlbnQiLCAidGFyZ2V0VHlwZXMiOiBb
InBhZ2UiLCAid29ya2VyIl19XQorfQorXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRl
cnMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
dmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAuLmNhYmJmMTBiODM2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V2ZW50cy13aXRoLW9wdGlv
bmFsLXBhcmFtZXRlcnMuanNvbgpAQCAtMCwwICsxLDU5IEBACit7CisgICAgImRvbWFpbiI6ICJE
YXRhYmFzZSIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAi
RGF0YWJhc2VJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAg
ImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBpZGVudGlmaWVyIG9mIERhdGFiYXNlIG9iamVjdC4iCisg
ICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJQcmltYXJ5Q29sb3JzIiwK
KyAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAidmFsdWVzIjogWyJy
ZWQiLCAiZ3JlZW4iLCAiYmx1ZSJdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAg
ICJpZCI6ICJDb2xvckxpc3QiLAorICAgICAgICAgICAgInR5cGUiOiAiYXJyYXkiLAorICAgICAg
ICAgICAgIml0ZW1zIjogeyAiJHJlZiI6ICJQcmltYXJ5Q29sb3JzIiB9CisgICAgICAgIH0sCisg
ICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJFcnJvciIsCisgICAgICAgICAgICAidHlwZSI6
ICJvYmplY3QiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkRhdGFiYXNlIGVycm9yLiIs
CisgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjog
Im1lc3NhZ2UiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgbWVzc2Fn
ZS4iIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2RlIiwgInR5cGUiOiAiaW50ZWdl
ciIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBjb2RlLiIgfQorICAgICAgICAgICAgXQorICAgICAg
ICB9CisgICAgXSwKKyAgICAiZXZlbnRzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFt
ZSI6ICJkaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzIiwKKyAgICAgICAgICAgICJwYXJhbWV0
ZXJzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6
ICJhcnJheSIsICJvcHRpb25hbCI6IHRydWUsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9
IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIs
ICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFt
cCIsICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRydWUg
fSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiLCAi
b3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzcWxFcnJvciIs
ICIkcmVmIjogIkVycm9yIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6ICJQcmltYXJ5Q29sb3JzIiwgIm9wdGlvbmFs
IjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwg
IiRyZWYiOiAiQ29sb3JMaXN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmluZyIsICJ2YWx1ZXMiOiBbImN5
YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSwgIm9wdGlvbmFsIjogdHJ1ZSB9Cisg
ICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjog
ImRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyIsCisgICAgICAgICAgICAicGFyYW1ldGVy
cyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAi
YXJyYXkiLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAorICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciIH0sCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiIH0sCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiIH0sCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiB9LAorICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAic3FsRXJyb3IiLCAiJHJlZiI6ICJFcnJvciIgfSwKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInNjcmVlbkNvbG9yIiwgIiRyZWYiOiAiUHJpbWFyeUNvbG9ycyIgfSwKKyAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogImFsdGVybmF0ZUNvbG9ycyIsICIkcmVmIjogIkNvbG9y
TGlzdCIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInByaW50Q29sb3IiLCAidHlwZSI6
ICJzdHJpbmciLCAidmFsdWVzIjogWyJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93IiwgImJsYWNr
Il0gfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1h
bmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1yZXN1bHQg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
Y29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJl
c3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOTEzZWM4MTczY2IK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1
Z2dhYmxlVHlwZS5qc29uLXJlc3VsdApAQCAtMCwwICsxLDEwMzAgQEAKKyMjIyBCZWdpbiBGaWxl
OiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBl
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworLy8gRG9t
YWluCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJEb21haW4iLCBbInBhZ2UiLCAi
d29ya2VyIl0pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIkRvbWFpbi5Db21t
YW5kIiwgbnVsbCwgW10sIFtdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudCgiRG9t
YWluLkV2ZW50IiwgbnVsbCwgW10pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbkRp
c3BhdGNoZXIgPSBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRGlzcGF0Y2hlci5iaW5kKEluc3Bl
Y3RvckJhY2tlbmQsICJEb21haW4iKTsKK0luc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4o
IkRvbWFpbiIsIFsicGFnZSJdKTsKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1h
bmRzLmpzCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJz
LmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5cGUt
bWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVz
LmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIu
aD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgor
CituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXIgeworcHVibGljOgorICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tl
bmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1v
dmUoZGlzcGF0Y2hlcik7IH0KKyAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNo
ZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Citwcml2YXRl
OgorICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKK307
CisKKworY2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0
ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgfkFsdGVybmF0
ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIENvbW1hbmQo
bG9uZyBjYWxsSWQpID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5k
aWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjIyMgRW5kIEZp
bGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTog
VGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0eXBlZGVmIFN0cmluZyBF
cnJvclN0cmluZzsKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQorY2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXI7CisjZW5kaWYgLy8gRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKK2NsYXNzIERvbWFpbkJhY2tl
bmREaXNwYXRjaGVySGFuZGxlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIENvbW1hbmQo
RXJyb3JTdHJpbmcmKSA9IDA7Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+RG9tYWluQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyKCk7Cit9OworCitjbGFzcyBEb21haW5CYWNrZW5kRGlzcGF0Y2hl
ciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6
CisgICAgc3RhdGljIFJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmRE
aXNwYXRjaGVyJiwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgdm9pZCBk
aXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpP
YmplY3Q+JiYgbWVzc2FnZSkgZmluYWw7Citwcml2YXRlOgorICAgIHZvaWQgQ29tbWFuZChsb25n
IHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyNpZiBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK3B1YmxpYzoKKyAgICB2b2lkIHNl
dEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIqIGFs
dGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlz
cGF0Y2hlcjsgfQorcHJpdmF0ZToKKyAgICBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hl
ciogbV9hbHRlcm5hdGVEaXNwYXRjaGVyIHsgbnVsbHB0ciB9OworI2VuZGlmIC8vIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorcHJpdmF0ZToKKyAgICBEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlciopOworICAgIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2VudCB7
IG51bGxwdHIgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxl
OiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5k
RGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFu
ZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFs
dWVzLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCisjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgorI2VuZGlm
IC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCituYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKKworRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+RG9tYWluQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9CisKK1JlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hl
cj4gRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYgYmFj
a2VuZERpc3BhdGNoZXIsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCit7
CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRG9tYWluQmFja2VuZERpc3BhdGNoZXIoYmFja2Vu
ZERpc3BhdGNoZXIsIGFnZW50KSk7Cit9CisKK0RvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpEb21h
aW5CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIs
IERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCisgICAgOiBTdXBwbGVtZW50
YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKKyAgICAsIG1fYWdlbnQoYWdl
bnQpCit7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9t
YWluKCJEb21haW4iX3MsIHRoaXMpOworfQorCit2b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVy
OjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09O
OjpPYmplY3Q+JiYgbWVzc2FnZSkKK3sKKyAgICBSZWY8RG9tYWluQmFja2VuZERpc3BhdGNoZXI+
IHByb3RlY3QoKnRoaXMpOworCisgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVyczsK
KyAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFyYW1ldGVycyk7CisKKyAgICBp
ZiAobWV0aG9kID09ICJDb21tYW5kIikgeworICAgICAgICBDb21tYW5kKHJlcXVlc3RJZCwgV1RG
TW92ZShwYXJhbWV0ZXJzKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRo
b2ROb3RGb3VuZCwgIidEb21haW4uIiArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKK30K
Kwordm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVlc3RJZCwg
UmVmUHRyPEpTT046Ok9iamVjdD4mJikKK3sKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKKyAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7CisgICAgICAg
IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+Q29tbWFuZChyZXF1ZXN0SWQpOworICAgICAgICByZXR1
cm47CisgICAgfQorI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENI
RVJTKQorCisgICAgRXJyb3JTdHJpbmcgZXJyb3I7CisgICAgUmVmPEpTT046Ok9iamVjdD4gcmVz
dWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBtX2FnZW50LT5Db21tYW5kKGVycm9y
KTsKKworICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOworICAg
IGVsc2UKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihC
YWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hp
bmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xP
YmplY3RzLmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEZyb250ZW5k
Um91dGVyOworCitjbGFzcyBEb21haW5Gcm9udGVuZERpc3BhdGNoZXIgeworICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcihG
cm9udGVuZFJvdXRlciYgZnJvbnRlbmRSb3V0ZXIpIDogbV9mcm9udGVuZFJvdXRlcihmcm9udGVu
ZFJvdXRlcikgeyB9CisgICAgdm9pZCBFdmVudCgpOworcHJpdmF0ZToKKyAgICBGcm9udGVuZFJv
dXRlciYgbV9mcm9udGVuZFJvdXRlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgor
IyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxl
OiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBl
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCisKKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3ZvaWQg
RG9tYWluRnJvbnRlbmREaXNwYXRjaGVyOjpFdmVudCgpCit7CisgICAgUmVmPEpTT046Ok9iamVj
dD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGpzb25NZXNzYWdl
LT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7CisKKyAgICBtX2Zyb250
ZW5kUm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworfQorCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNw
YXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGlu
Zy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgor
CituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKwor
CisKKworCisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5
cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorCisjaW5j
bHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCitu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworCisKK30gLy8g
bmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Cisj
aW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCitAcHJvdG9jb2wgVGVzdFByb3RvY29sRG9tYWlu
RG9tYWluSGFuZGxlcjsKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworY2xhc3MgT2JqQ0lu
c3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZURv
bWFpbkJhY2tlbmREaXNwYXRjaGVyIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1
YmxpYzoKKyAgICBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFBy
b3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxl
cjsgfQorICAgIHZvaWQgQ29tbWFuZChsb25nIHJlcXVlc3RJZCkgZmluYWw7Citwcml2YXRlOgor
ICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPj4gbV9kZWxl
Z2F0ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAi
Y29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKwor
I2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zLmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKworbmFtZXNw
YWNlIEluc3BlY3RvciB7CisKK3ZvaWQgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRj
aGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElkKQoreworICAgIGlmICghW21fZGVsZWdhdGUgcmVz
cG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vz
c0NhbGxiYWNrOildKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3Rv
Y29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICIn
RG9tYWluLkNvbW1hbmQnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7CisgICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlz
cGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICB9OworCisgICAgaWQgc3VjY2Vzc0NhbGxiYWNr
ID0gXnsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJ
ZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2UpOworICAgIH07CisKKyAgICBbbV9kZWxl
Z2F0ZSBDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJh
Y2s6c3VjY2Vzc0NhbGxiYWNrXTsKK30KKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKwor
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdn
YWJsZVR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+CisKK19fYXR0cmlidXRlX18o
KHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1
cmF0aW9uIDogTlNPYmplY3QKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4sIHNldHRlcj1z
ZXREb21haW5IYW5kbGVyOikgaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4gZG9t
YWluSGFuZGxlcjsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgVGVzdFByb3RvY29s
RG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyICpkb21haW5FdmVudERpc3BhdGNoZXI7CitAZW5k
CisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVn
Z2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgorCisjaW1wb3J0ICJUZXN0
UHJvdG9jb2xJbnRlcm5hbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNo
ZXJzLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2Vu
dC5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9s
bGVyLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5k
RGlzcGF0Y2hlcnMuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVycy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50
YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVj
dG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7CisgICAgaWQ8VGVzdFByb3RvY29sRG9tYWluRG9t
YWluSGFuZGxlcj4gX2RvbWFpbkhhbmRsZXI7CisgICAgVGVzdFByb3RvY29sRG9tYWluRG9tYWlu
RXZlbnREaXNwYXRjaGVyICpfZG9tYWluRXZlbnREaXNwYXRjaGVyOworfQorCistIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIq
KWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikK
KyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRy
b2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxs
b2MKK3sKKyAgICBbX2RvbWFpbkhhbmRsZXIgcmVsZWFzZV07CisgICAgW19kb21haW5FdmVudERp
c3BhdGNoZXIgcmVsZWFzZV07CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistICh2b2lkKXNl
dERvbWFpbkhhbmRsZXI6KGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+KWhhbmRs
ZXIKK3sKKyAgICBpZiAoaGFuZGxlciA9PSBfZG9tYWluSGFuZGxlcikKKyAgICAgICAgcmV0dXJu
OworCisgICAgW19kb21haW5IYW5kbGVyIHJlbGVhc2VdOworICAgIF9kb21haW5IYW5kbGVyID0g
W2hhbmRsZXIgcmV0YWluXTsKKworICAgIGF1dG8gYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IG1ha2VV
bmlxdWU8T2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyPihoYW5kbGVyKTsKKyAg
ICBhdXRvIGFsdGVybmF0ZUFnZW50ID0gbWFrZVVuaXF1ZTxBbHRlcm5hdGVEaXNwYXRjaGFibGVB
Z2VudDxEb21haW5CYWNrZW5kRGlzcGF0Y2hlciwgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3Bh
dGNoZXI+PigiRG9tYWluIl9zLCAqX2NvbnRyb2xsZXIsIFdURk1vdmUoYWx0ZXJuYXRlRGlzcGF0
Y2hlcikpOworICAgIF9jb250cm9sbGVyLT5hcHBlbmRFeHRyYUFnZW50KFdURk1vdmUoYWx0ZXJu
YXRlQWdlbnQpKTsKK30KKworLSAoaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4p
ZG9tYWluSGFuZGxlcgoreworICAgIHJldHVybiBfZG9tYWluSGFuZGxlcjsKK30KKworLSAoVGVz
dFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyICopZG9tYWluRXZlbnREaXNwYXRj
aGVyCit7CisgICAgaWYgKCFfZG9tYWluRXZlbnREaXNwYXRjaGVyKQorICAgICAgICBfZG9tYWlu
RXZlbnREaXNwYXRjaGVyID0gW1tUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNo
ZXIgYWxsb2NdIGluaXRXaXRoQ29udHJvbGxlcjpfY29udHJvbGxlcl07CisgICAgcmV0dXJuIF9k
b21haW5FdmVudERpc3BhdGNoZXI7Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2
ZW50RGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21t
YW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgi
CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9y
OworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRj
aGVyCit7CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsK
K30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNw
ZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsK
KyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNvbnRyb2xs
ZXIpOworICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKKyAgICByZXR1cm4gc2VsZjsKK30K
KworLSAodm9pZClFdmVudAoreworICAgIGNvbnN0IEZyb250ZW5kUm91dGVyJiByb3V0ZXIgPSBf
Y29udHJvbGxlci0+ZnJvbnRlbmRSb3V0ZXIoKTsKKworICAgIFJlZjxKU09OOjpPYmplY3Q+IGpz
b25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0
U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOworICAgIHJvdXRlci5zZW5kRXZl
bnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKK30KKworQGVuZAorCisKKyMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5k
LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9G
b3VuZGF0aW9uLmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmpl
Y3QuaD4KKworCisKKworCisKKworCitAcHJvdG9jb2wgVGVzdFByb3RvY29sRG9tYWluRG9tYWlu
SGFuZGxlciA8TlNPYmplY3Q+CitAb3B0aW9uYWwKKy0gKHZvaWQpQ29tbWFuZFdpdGhFcnJvckNh
bGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2Fs
bGJhY2s6KHZvaWQoXikodm9pZCkpc3VjY2Vzc0NhbGxiYWNrOworQGVuZAorCitfX2F0dHJpYnV0
ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sRG9t
YWluRG9tYWluRXZlbnREaXNwYXRjaGVyIDogTlNPYmplY3QKKy0gKHZvaWQpRXZlbnQ7CitAZW5k
CisKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5
T2JqZWN0cy5oPgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5q
c29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUu
aCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxl
ci5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKworQGludGVyZmFjZSBUZXN0UHJvdG9j
b2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKFByaXZhdGUpCistIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhDb250cm9sbGVyOihJbnNwZWN0b3I6OkF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJv
bGxlciopY29udHJvbGxlcjsKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbElu
dGVybmFsLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5o
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZC10YXJnZXRUeXBlLW1h
dGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCA8
V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgorCituYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgorT3B0aW9uYWw8
T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7CisK
K30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdl
dFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFBy
b3RvY29sVHlwZVBhcnNlci5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNP
Tk9iamVjdFByaXZhdGUuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisKKwor
CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5
cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1w
b3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmpl
Y3RQcml2YXRlLmg+CisjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2ltcG9ydCA8d3RmL0pT
T05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisjIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1hc3luYy1h
dHRyaWJ1dGUuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbi1y
ZXN1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjk4ODE3NWNjMDRm
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24tcmVz
dWx0CkBAIC0wLDAgKzEsMTc4MiBAQAorIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRD
b21tYW5kcy5qcworLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdp
dGgtYXN5bmMtYXR0cmlidXRlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworLy8gRGF0YWJhc2UKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4o
IkRhdGFiYXNlIiwgbnVsbCk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiRGF0YWJh
c2UuUHJpbWFyeUNvbG9ycyIsIHtSZWQ6ICJyZWQiLCBHcmVlbjogImdyZWVuIiwgQmx1ZTogImJs
dWUifSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiRGF0YWJhc2UuZXhlY3V0
ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyIsIG51bGwsIFt7Im5hbWUiOiAiZGF0YWJhc2VJ
ZCIsICJ0eXBlIjogIm51bWJlciJ9LCB7Im5hbWUiOiAicXVlcnkiLCAidHlwZSI6ICJzdHJpbmci
fV0sIFsiY29sdW1uTmFtZXMiLCAibm90ZXMiLCAidGltZXN0YW1wIiwgInZhbHVlcyIsICJwYXls
b2FkIiwgImRhdGFiYXNlSWQiLCAic3FsRXJyb3IiLCAic2NyZWVuQ29sb3IiLCAiYWx0ZXJuYXRl
Q29sb3JzIiwgInByaW50Q29sb3IiXSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFu
ZCgiRGF0YWJhc2UuZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMiLCBudWxsLCBb
eyJuYW1lIjogImRhdGFiYXNlSWQiLCAidHlwZSI6ICJudW1iZXIifSwgeyJuYW1lIjogInF1ZXJ5
IiwgInR5cGUiOiAic3RyaW5nIn1dLCBbImNvbHVtbk5hbWVzIiwgIm5vdGVzIiwgInRpbWVzdGFt
cCIsICJ2YWx1ZXMiLCAicGF5bG9hZCIsICJkYXRhYmFzZUlkIiwgInNxbEVycm9yIiwgInNjcmVl
bkNvbG9yIiwgImFsdGVybmF0ZUNvbG9ycyIsICJwcmludENvbG9yIl0pOworSW5zcGVjdG9yQmFj
a2VuZC5yZWdpc3RlckNvbW1hbmQoIkRhdGFiYXNlLmV4ZWN1dGVTUUxTeW5jIiwgbnVsbCwgW3si
bmFtZSI6ICJkYXRhYmFzZUlkIiwgInR5cGUiOiAibnVtYmVyIn0sIHsibmFtZSI6ICJxdWVyeSIs
ICJ0eXBlIjogInN0cmluZyJ9XSwgWyJjb2x1bW5OYW1lcyIsICJub3RlcyIsICJ0aW1lc3RhbXAi
LCAidmFsdWVzIiwgInBheWxvYWQiLCAiZGF0YWJhc2VJZCIsICJzcWxFcnJvciIsICJhbHRlcm5h
dGVDb2xvcnMiLCAic2NyZWVuQ29sb3IiLCAicHJpbnRDb2xvciJdKTsKK0luc3BlY3RvckJhY2tl
bmQucmVnaXN0ZXJDb21tYW5kKCJEYXRhYmFzZS5leGVjdXRlU1FMQXN5bmMiLCBudWxsLCBbeyJu
YW1lIjogImRhdGFiYXNlSWQiLCAidHlwZSI6ICJudW1iZXIifSwgeyJuYW1lIjogInF1ZXJ5Iiwg
InR5cGUiOiAic3RyaW5nIn1dLCBbImNvbHVtbk5hbWVzIiwgIm5vdGVzIiwgInRpbWVzdGFtcCIs
ICJ2YWx1ZXMiLCAicGF5bG9hZCIsICJkYXRhYmFzZUlkIiwgInNxbEVycm9yIiwgInNjcmVlbkNv
bG9yIiwgImFsdGVybmF0ZUNvbG9ycyIsICJwcmludENvbG9yIl0pOworSW5zcGVjdG9yQmFja2Vu
ZC5yZWdpc3RlckRhdGFiYXNlRGlzcGF0Y2hlciA9IEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJE
aXNwYXRjaGVyLmJpbmQoSW5zcGVjdG9yQmFja2VuZCwgIkRhdGFiYXNlIik7CitJbnNwZWN0b3JC
YWNrZW5kLmFjdGl2YXRlRG9tYWluKCJEYXRhYmFzZSIsIG51bGwpOworIyMjIEVuZCBGaWxlOiBJ
bnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5h
dGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVz
LmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIu
aD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgor
CituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXIgeworcHVibGljOgorICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tl
bmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1v
dmUoZGlzcGF0Y2hlcik7IH0KKyAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNo
ZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Citwcml2YXRl
OgorICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKK307
CisKKworY2xhc3MgQWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+QWx0ZXJu
YXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBleGVj
dXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgY2FsbElkLCBpbnQgaW5fZGF0YWJh
c2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBleGVj
dXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIGNhbGxJZCwgaW50IGluX2RhdGFi
YXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZXhl
Y3V0ZVNRTFN5bmMobG9uZyBjYWxsSWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcm
IGluX3F1ZXJ5KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxBc3luYyhsb25nIGNh
bGxJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpID0gMDsKK307
CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVy
cy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3lu
Yy1hdHRyaWJ1dGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwor
dHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVS
TkFURV9ESVNQQVRDSEVSUykKK2NsYXNzIEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXI7CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisK
K2NsYXNzIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKK3B1YmxpYzoKKyAgICAv
LyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIgJ3ByaW50Q29sb3InIHdoaWxlIGdlbmVyYXRpbmcgY29t
bWFuZC9ldmVudCBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzLgorICAgIGVudW0g
Y2xhc3MgUHJpbnRDb2xvciB7CisgICAgICAgIEN5YW4gPSAzLAorICAgICAgICBNYWdlbnRhID0g
NCwKKyAgICAgICAgWWVsbG93ID0gNSwKKyAgICAgICAgQmxhY2sgPSA2LAorICAgIH07IC8vIGVu
dW0gY2xhc3MgUHJpbnRDb2xvcgorICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMU3luY09wdGlv
bmFsUmV0dXJuVmFsdWVzKEVycm9yU3RyaW5nJiwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0
cmluZyYgaW5fcXVlcnksIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiBvcHRfb3V0X2Nv
bHVtbk5hbWVzLCBPcHRpb25hbDxTdHJpbmc+JiBvcHRfb3V0X25vdGVzLCBPcHRpb25hbDxkb3Vi
bGU+JiBvcHRfb3V0X3RpbWVzdGFtcCwgT3B0aW9uYWw8SlNPTjo6T2JqZWN0PiYgb3B0X291dF92
YWx1ZXMsIE9wdGlvbmFsPEpTT046OlZhbHVlPiYgb3B0X291dF9wYXlsb2FkLCBPcHRpb25hbDxp
bnQ+JiBvcHRfb3V0X2RhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6RXJyb3I+JiBvcHRfb3V0X3NxbEVycm9yLCBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6UHJpbWFyeUNvbG9ycyogb3B0X291dF9zY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiBvcHRfb3V0X2FsdGVybmF0ZUNvbG9y
cywgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3IqIG9wdF9vdXRf
cHJpbnRDb2xvcikgPSAwOworICAgIGNsYXNzIEV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJu
VmFsdWVzQ2FsbGJhY2sgOiBwdWJsaWMgQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZSB7
CisgICAgcHVibGljOgorICAgICAgICBFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVl
c0NhbGxiYWNrKFJlZjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiwgaW50IGlkKTsKKyAgICAgICAgdm9p
ZCBzZW5kU3VjY2VzcyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYmIGNvbHVtbk5hbWVz
LCBPcHRpb25hbDxTdHJpbmc+JiBub3RlcywgT3B0aW9uYWw8ZG91YmxlPiYgdGltZXN0YW1wLCBP
cHRpb25hbDxKU09OOjpPYmplY3Q+JiB2YWx1ZXMsIE9wdGlvbmFsPEpTT046OlZhbHVlPiYgcGF5
bG9hZCwgT3B0aW9uYWw8aW50PiYgZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRhdGFiYXNlOjpFcnJvcj4mJiBzcWxFcnJvciwgT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90
b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4mJiBhbHRlcm5hdGVDb2xvcnMsIE9w
dGlvbmFsPERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yPiBwcmlu
dENvbG9yKTsKKyAgICB9OworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMQXN5bmNPcHRpb25h
bFJldHVyblZhbHVlcyhpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSwg
UmVmPEV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2s+JiYgY2FsbGJh
Y2spID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTFN5bmMoRXJyb3JTdHJpbmcmLCBp
bnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSwgUmVmUHRyPEpTT046OkFy
cmF5T2Y8U3RyaW5nPj4mIG91dF9jb2x1bW5OYW1lcywgU3RyaW5nKiBvdXRfbm90ZXMsIGRvdWJs
ZSogb3V0X3RpbWVzdGFtcCwgSlNPTjo6T2JqZWN0KiBvdXRfdmFsdWVzLCBKU09OOjpWYWx1ZSog
b3V0X3BheWxvYWQsIGludCogb3V0X2RhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEYXRhYmFzZTo6RXJyb3I+JiBvdXRfc3FsRXJyb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYgb3V0X2FsdGVybmF0ZUNvbG9ycywgSW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMqIG91dF9zY3JlZW5Db2xvciwg
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3IqIG91dF9wcmludENv
bG9yKSA9IDA7CisgICAgY2xhc3MgRXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2sgOiBwdWJsaWMgQmFj
a2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZSB7CisgICAgcHVibGljOgorICAgICAgICBFeGVj
dXRlU1FMQXN5bmNDYWxsYmFjayhSZWY8QmFja2VuZERpc3BhdGNoZXI+JiYsIGludCBpZCk7Cisg
ICAgICAgIHZvaWQgc2VuZFN1Y2Nlc3MoUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mJiBj
b2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgSlNPTjo6
T2JqZWN0IHZhbHVlcywgSlNPTjo6VmFsdWUgcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQsIFJlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiYgc3FsRXJyb3IsIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzIHNjcmVlbkNvbG9yLCBSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4mJiBhbHRlcm5hdGVD
b2xvcnMsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yIHByaW50
Q29sb3IpOworICAgIH07CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxBc3luYyhpbnQgaW5f
ZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSwgUmVmPEV4ZWN1dGVTUUxBc3luY0Nh
bGxiYWNrPiYmIGNhbGxiYWNrKSA9IDA7Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+RGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKK307CisKK2NsYXNzIERhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIg
eworcHVibGljOgorICAgIHN0YXRpYyBSZWY8RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4gY3Jl
YXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIq
KTsKKyAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhv
ZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5hbDsKK3ByaXZhdGU6CisgICAgdm9p
ZCBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVzdElkLCBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOworICAgIHZvaWQgZXhlY3V0ZVNRTEFzeW5j
T3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+
JiYgcGFyYW1ldGVycyk7CisgICAgdm9pZCBleGVjdXRlU1FMU3luYyhsb25nIHJlcXVlc3RJZCwg
UmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyAgICB2b2lkIGV4ZWN1dGVTUUxB
c3luYyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsK
KyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK3B1YmxpYzoKKyAg
ICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVybmF0ZURpc3BhdGNoZXIgPSBh
bHRlcm5hdGVEaXNwYXRjaGVyOyB9Citwcml2YXRlOgorICAgIEFsdGVybmF0ZURhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXIqIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciB7IG51bGxwdHIgfTsKKyNlbmRp
ZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK3ByaXZhdGU6Cisg
ICAgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYsIERhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIqIG1fYWdlbnQgeyBudWxscHRyIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1
ZXMuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKKyNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCisjZW5kaWYg
Ly8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKK25hbWVzcGFjZSBJ
bnNwZWN0b3IgeworCitEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6fkRhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9CisKK1JlZjxEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVyPiBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoQmFja2VuZERpc3BhdGNo
ZXImIGJhY2tlbmREaXNwYXRjaGVyLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciog
YWdlbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKK30KKworRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlcjo6RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFj
a2VuZERpc3BhdGNoZXIsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkK
KyAgICA6IFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQor
ICAgICwgbV9hZ2VudChhZ2VudCkKK3sKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3Rl
ckRpc3BhdGNoZXJGb3JEb21haW4oIkRhdGFiYXNlIl9zLCB0aGlzKTsKK30KKwordm9pZCBEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3Ry
aW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKK3sKKyAgICBSZWY8RGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CisKKyAgICBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiBwYXJhbWV0ZXJzOworICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9z
LCBwYXJhbWV0ZXJzKTsKKworICAgIGlmIChtZXRob2QgPT0gImV4ZWN1dGVTUUxTeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXMiKSB7CisgICAgICAgIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXMocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBpZiAobWV0aG9kID09ICJleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZh
bHVlcyIpIHsKKyAgICAgICAgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMocmVx
dWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBpZiAobWV0aG9kID09ICJleGVjdXRlU1FMU3luYyIpIHsKKyAgICAgICAgZXhlY3V0ZVNRTFN5
bmMocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBpZiAobWV0aG9kID09ICJleGVjdXRlU1FMQXN5bmMiKSB7CisgICAgICAgIGV4ZWN1
dGVTUUxBc3luYyhyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJv
cihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRGF0YWJhc2UuIiArIG1ldGhv
ZCArICInIHdhcyBub3QgZm91bmQiKTsKK30KKwordm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVyOjpleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVzdElkLCBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpCit7CisgICAgaW50IGluX2RhdGFiYXNl
SWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRJbnRlZ2VyKHBhcmFtZXRlcnMuZ2V0KCksICJk
YXRhYmFzZUlkIl9zLCBudWxscHRyKTsKKyAgICBTdHJpbmcgaW5fcXVlcnkgPSBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgInF1ZXJ5Il9zLCBudWxscHRy
KTsKKyAgICBpZiAobV9iYWNrZW5kRGlzcGF0Y2hlci0+aGFzUHJvdG9jb2xFcnJvcnMoKSkgewor
ICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmRE
aXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCAiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICdEYXRh
YmFzZS5leGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzJyBjYW4ndCBiZSBwcm9jZXNz
ZWQiX3MpOworICAgICAgICByZXR1cm47CisgICAgfQorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCisgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewor
ICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1
cm5WYWx1ZXMocmVxdWVzdElkLCBpbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCisKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiBy
ZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxKU09OOjpBcnJheU9m
PFN0cmluZz4+IG91dF9jb2x1bW5OYW1lczsKKyAgICBPcHRpb25hbDxTdHJpbmc+IG91dF9ub3Rl
czsKKyAgICBPcHRpb25hbDxkb3VibGU+IG91dF90aW1lc3RhbXA7CisgICAgT3B0aW9uYWw8SlNP
Tjo6T2JqZWN0PiBvdXRfdmFsdWVzOworICAgIE9wdGlvbmFsPEpTT046OlZhbHVlPiBvdXRfcGF5
bG9hZDsKKyAgICBPcHRpb25hbDxpbnQ+IG91dF9kYXRhYmFzZUlkOworICAgIFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IG91dF9zcWxFcnJvcjsKKyAgICBJbnNw
ZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyBvdXRfc2NyZWVuQ29sb3I7
CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IG91
dF9hbHRlcm5hdGVDb2xvcnM7CisgICAgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6
OlByaW50Q29sb3Igb3V0X3ByaW50Q29sb3I7CisgICAgbV9hZ2VudC0+ZXhlY3V0ZVNRTFN5bmNP
cHRpb25hbFJldHVyblZhbHVlcyhlcnJvciwgaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnksIG91dF9j
b2x1bW5OYW1lcywgb3V0X25vdGVzLCBvdXRfdGltZXN0YW1wLCBvdXRfdmFsdWVzLCBvdXRfcGF5
bG9hZCwgb3V0X2RhdGFiYXNlSWQsIG91dF9zcWxFcnJvciwgb3V0X3NjcmVlbkNvbG9yLCBvdXRf
YWx0ZXJuYXRlQ29sb3JzLCBvdXRfcHJpbnRDb2xvcik7CisKKyAgICBpZiAoIWVycm9yLmxlbmd0
aCgpKSB7CisgICAgICAgIGlmIChvdXRfY29sdW1uTmFtZXMpCisgICAgICAgICAgICByZXN1bHQt
PnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgb3V0X2NvbHVtbk5hbWVzKTsKKyAgICAgICAgaWYg
KG91dF9ub3Rlcy5oYXNWYWx1ZSgpKQorICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoIm5v
dGVzIl9zLCAqb3V0X25vdGVzKTsKKyAgICAgICAgaWYgKG91dF90aW1lc3RhbXAuaGFzVmFsdWUo
KSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICpvdXRfdGlt
ZXN0YW1wKTsKKyAgICAgICAgaWYgKG91dF92YWx1ZXMuaGFzVmFsdWUoKSkKKyAgICAgICAgICAg
IHJlc3VsdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsICpvdXRfdmFsdWVzKTsKKyAgICAgICAgaWYg
KG91dF9wYXlsb2FkLmhhc1ZhbHVlKCkpCisgICAgICAgICAgICByZXN1bHQtPnNldFZhbHVlKCJw
YXlsb2FkIl9zLCAqb3V0X3BheWxvYWQpOworICAgICAgICBpZiAob3V0X2RhdGFiYXNlSWQuaGFz
VmFsdWUoKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywg
Km91dF9kYXRhYmFzZUlkKTsKKyAgICAgICAgaWYgKG91dF9zcWxFcnJvcikKKyAgICAgICAgICAg
IHJlc3VsdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgb3V0X3NxbEVycm9yKTsKKyAgICAgICAg
aWYgKG91dF9zY3JlZW5Db2xvci5oYXNWYWx1ZSgpKQorICAgICAgICAgICAgcmVzdWx0LT5zZXRT
dHJpbmcoInNjcmVlbkNvbG9yIl9zLCAqb3V0X3NjcmVlbkNvbG9yKTsKKyAgICAgICAgaWYgKG91
dF9hbHRlcm5hdGVDb2xvcnMpCisgICAgICAgICAgICByZXN1bHQtPnNldEFycmF5KCJhbHRlcm5h
dGVDb2xvcnMiX3MsIG91dF9hbHRlcm5hdGVDb2xvcnMpOworICAgICAgICBpZiAob3V0X3ByaW50
Q29sb3IuaGFzVmFsdWUoKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJwcmludENv
bG9yIl9zLCAqb3V0X3ByaW50Q29sb3IpOworICAgIH0KKyAgICBpZiAoIWVycm9yLmxlbmd0aCgp
KQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBX
VEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2VuZERpc3Bh
dGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9y
LCBXVEZNb3ZlKGVycm9yKSk7Cit9CisKK0RhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
OjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrOjpFeGVjdXRlU1FM
QXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrKFJlZjxCYWNrZW5kRGlzcGF0Y2hlcj4m
JiBiYWNrZW5kRGlzcGF0Y2hlciwgaW50IGlkKSA6IEJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFj
a0Jhc2UoV1RGTW92ZShiYWNrZW5kRGlzcGF0Y2hlciksIGlkKSB7IH0KKwordm9pZCBEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXNDYWxsYmFjazo6c2VuZFN1Y2Nlc3MoUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4m
JiBjb2x1bW5OYW1lcywgT3B0aW9uYWw8U3RyaW5nPiYgbm90ZXMsIE9wdGlvbmFsPGRvdWJsZT4m
IHRpbWVzdGFtcCwgT3B0aW9uYWw8SlNPTjo6T2JqZWN0PiYgdmFsdWVzLCBPcHRpb25hbDxKU09O
OjpWYWx1ZT4mIHBheWxvYWQsIE9wdGlvbmFsPGludD4mIGRhdGFiYXNlSWQsIFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiYgc3FsRXJyb3IsIE9wdGlvbmFsPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiBzY3JlZW5Db2xvciwg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiYgYWx0ZXJu
YXRlQ29sb3JzLCBPcHRpb25hbDxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJp
bnRDb2xvcj4gcHJpbnRDb2xvcikKK3sKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2Fn
ZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgaWYgKGNvbHVtbk5hbWVzKQorICAgICAg
ICBqc29uTWVzc2FnZS0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBjb2x1bW5OYW1lcyk7Cisg
ICAgaWYgKG5vdGVzLmhhc1ZhbHVlKCkpCisgICAgICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmco
Im5vdGVzIl9zLCAqbm90ZXMpOworICAgIGlmICh0aW1lc3RhbXAuaGFzVmFsdWUoKSkKKyAgICAg
ICAganNvbk1lc3NhZ2UtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCAqdGltZXN0YW1wKTsKKyAg
ICBpZiAodmFsdWVzLmhhc1ZhbHVlKCkpCisgICAgICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3Qo
InZhbHVlcyJfcywgKnZhbHVlcyk7CisgICAgaWYgKHBheWxvYWQuaGFzVmFsdWUoKSkKKyAgICAg
ICAganNvbk1lc3NhZ2UtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCAqcGF5bG9hZCk7CisgICAgaWYg
KGRhdGFiYXNlSWQuaGFzVmFsdWUoKSkKKyAgICAgICAganNvbk1lc3NhZ2UtPnNldEludGVnZXIo
ImRhdGFiYXNlSWQiX3MsICpkYXRhYmFzZUlkKTsKKyAgICBpZiAoc3FsRXJyb3IpCisgICAgICAg
IGpzb25NZXNzYWdlLT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBzcWxFcnJvcik7CisgICAgaWYg
KHNjcmVlbkNvbG9yLmhhc1ZhbHVlKCkpCisgICAgICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmco
InNjcmVlbkNvbG9yIl9zLCAqc2NyZWVuQ29sb3IpOworICAgIGlmIChhbHRlcm5hdGVDb2xvcnMp
CisgICAgICAgIGpzb25NZXNzYWdlLT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCBhbHRl
cm5hdGVDb2xvcnMpOworICAgIGlmIChwcmludENvbG9yLmhhc1ZhbHVlKCkpCisgICAgICAgIGpz
b25NZXNzYWdlLT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsICpwcmludENvbG9yKTsKKyAgICBD
YWxsYmFja0Jhc2U6OnNlbmRTdWNjZXNzKFdURk1vdmUoanNvbk1lc3NhZ2UpKTsKK30KKwordm9p
ZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVy
blZhbHVlcyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJz
KQoreworICAgIGludCBpbl9kYXRhYmFzZUlkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0SW50
ZWdlcihwYXJhbWV0ZXJzLmdldCgpLCAiZGF0YWJhc2VJZCJfcywgbnVsbHB0cik7CisgICAgU3Ry
aW5nIGluX3F1ZXJ5ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMu
Z2V0KCksICJxdWVyeSJfcywgbnVsbHB0cik7CisgICAgaWYgKG1fYmFja2VuZERpc3BhdGNoZXIt
Pmhhc1Byb3RvY29sRXJyb3JzKCkpIHsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVw
b3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgIlNvbWUg
YXJndW1lbnRzIG9mIG1ldGhvZCAnRGF0YWJhc2UuZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1
cm5WYWx1ZXMnIGNhbid0IGJlIHByb2Nlc3NlZCJfcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyAgICBpZiAo
bV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+
ZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMocmVxdWVzdElkLCBpbl9kYXRhYmFz
ZUlkLCBpbl9xdWVyeSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYgLy8gRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyAgICBSZWY8RGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVz
Q2FsbGJhY2s+IGNhbGxiYWNrID0gYWRvcHRSZWYoKm5ldyBEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjayht
X2JhY2tlbmREaXNwYXRjaGVyLmNvcHlSZWYoKSwgcmVxdWVzdElkKSk7CisgICAgbV9hZ2VudC0+
ZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMoaW5fZGF0YWJhc2VJZCwgaW5fcXVl
cnksIGNhbGxiYWNrLmNvcHlSZWYoKSk7CisKK30KKwordm9pZCBEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVyOjpleGVjdXRlU1FMU3luYyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBwYXJhbWV0ZXJzKQoreworICAgIGludCBpbl9kYXRhYmFzZUlkID0gbV9iYWNrZW5kRGlz
cGF0Y2hlci0+Z2V0SW50ZWdlcihwYXJhbWV0ZXJzLmdldCgpLCAiZGF0YWJhc2VJZCJfcywgbnVs
bHB0cik7CisgICAgU3RyaW5nIGluX3F1ZXJ5ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3Ry
aW5nKHBhcmFtZXRlcnMuZ2V0KCksICJxdWVyeSJfcywgbnVsbHB0cik7CisgICAgaWYgKG1fYmFj
a2VuZERpc3BhdGNoZXItPmhhc1Byb3RvY29sRXJyb3JzKCkpIHsKKyAgICAgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxp
ZFBhcmFtcywgIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnRGF0YWJhc2UuZXhlY3V0ZVNRTFN5
bmMnIGNhbid0IGJlIHByb2Nlc3NlZCJfcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNp
ZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyAgICBpZiAobV9hbHRl
cm5hdGVEaXNwYXRjaGVyKSB7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0
ZVNRTFN5bmMocmVxdWVzdElkLCBpbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCisKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiBy
ZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxKU09OOjpBcnJheU9m
PFN0cmluZz4+IG91dF9jb2x1bW5OYW1lczsKKyAgICBTdHJpbmcgb3V0X25vdGVzOworICAgIGRv
dWJsZSBvdXRfdGltZXN0YW1wOworICAgIEpTT046Ok9iamVjdCBvdXRfdmFsdWVzOworICAgIEpT
T046OlZhbHVlIG91dF9wYXlsb2FkOworICAgIGludCBvdXRfZGF0YWJhc2VJZDsKKyAgICBSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBvdXRfc3FsRXJyb3I7Cisg
ICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IG91dF9h
bHRlcm5hdGVDb2xvcnM7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1h
cnlDb2xvcnMgb3V0X3NjcmVlbkNvbG9yOworICAgIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyOjpQcmludENvbG9yIG91dF9wcmludENvbG9yOworICAgIG1fYWdlbnQtPmV4ZWN1dGVT
UUxTeW5jKGVycm9yLCBpbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSwgb3V0X2NvbHVtbk5hbWVzLCAm
b3V0X25vdGVzLCAmb3V0X3RpbWVzdGFtcCwgb3V0X3ZhbHVlcywgJm91dF9wYXlsb2FkLCAmb3V0
X2RhdGFiYXNlSWQsIG91dF9zcWxFcnJvciwgb3V0X2FsdGVybmF0ZUNvbG9ycywgJm91dF9zY3Jl
ZW5Db2xvciwgJm91dF9wcmludENvbG9yKTsKKworICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIHsK
KyAgICAgICAgcmVzdWx0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIG91dF9jb2x1bW5OYW1l
cyk7CisgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJub3RlcyJfcywgb3V0X25vdGVzKTsKKyAg
ICAgICAgcmVzdWx0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgb3V0X3RpbWVzdGFtcCk7Cisg
ICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIG91dF92YWx1ZXMpOworICAgICAg
ICByZXN1bHQtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBvdXRfcGF5bG9hZCk7CisgICAgICAgIHJl
c3VsdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgb3V0X2RhdGFiYXNlSWQpOworICAgICAg
ICByZXN1bHQtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIG91dF9zcWxFcnJvcik7CisgICAgICAg
IHJlc3VsdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgb3V0X2FsdGVybmF0ZUNvbG9y
cyk7CisgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgSW5zcGVjdG9y
OjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKG91dF9zY3JlZW5D
b2xvcikpOworICAgICAgICByZXN1bHQtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgSW5zcGVj
dG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKG91dF9wcmlu
dENvbG9yKSk7CisgICAgfQorICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCisgICAgICAgIG1fYmFj
a2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwg
ZmFsc2UpOworICAgIGVsc2UKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJv
dG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3Ip
KTsKK30KKworRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3lu
Y0NhbGxiYWNrOjpFeGVjdXRlU1FMQXN5bmNDYWxsYmFjayhSZWY8QmFja2VuZERpc3BhdGNoZXI+
JiYgYmFja2VuZERpc3BhdGNoZXIsIGludCBpZCkgOiBCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJh
Y2tCYXNlKFdURk1vdmUoYmFja2VuZERpc3BhdGNoZXIpLCBpZCkgeyB9CisKK3ZvaWQgRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrOjpzZW5k
U3VjY2VzcyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYmIGNvbHVtbk5hbWVzLCBjb25z
dCBTdHJpbmcmIG5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBKU09OOjpPYmplY3QgdmFsdWVzLCBK
U09OOjpWYWx1ZSBwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mJiBzcWxFcnJvciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYmIGFsdGVybmF0ZUNvbG9ycywgRGF0YWJhc2VC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3IgcHJpbnRDb2xvcikKK3sKKyAgICBS
ZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Cisg
ICAganNvbk1lc3NhZ2UtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgY29sdW1uTmFtZXMpOwor
ICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBub3Rlcyk7CisgICAganNvbk1l
c3NhZ2UtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCB0aW1lc3RhbXApOworICAgIGpzb25NZXNz
YWdlLT5zZXRPYmplY3QoInZhbHVlcyJfcywgdmFsdWVzKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0
VmFsdWUoInBheWxvYWQiX3MsIHBheWxvYWQpOworICAgIGpzb25NZXNzYWdlLT5zZXRJbnRlZ2Vy
KCJkYXRhYmFzZUlkIl9zLCBkYXRhYmFzZUlkKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0
KCJzcWxFcnJvciJfcywgc3FsRXJyb3IpOworICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoInNj
cmVlbkNvbG9yIl9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNv
bnN0YW50VmFsdWUoc2NyZWVuQ29sb3IpKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0QXJyYXkoImFs
dGVybmF0ZUNvbG9ycyJfcywgYWx0ZXJuYXRlQ29sb3JzKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0
U3RyaW5nKCJwcmludENvbG9yIl9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6
Z2V0RW51bUNvbnN0YW50VmFsdWUocHJpbnRDb2xvcikpOworICAgIENhbGxiYWNrQmFzZTo6c2Vu
ZFN1Y2Nlc3MoV1RGTW92ZShqc29uTWVzc2FnZSkpOworfQorCit2b2lkIERhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxBc3luYyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046
Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKQoreworICAgIGludCBpbl9kYXRhYmFzZUlkID0gbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+Z2V0SW50ZWdlcihwYXJhbWV0ZXJzLmdldCgpLCAiZGF0YWJhc2VJZCJf
cywgbnVsbHB0cik7CisgICAgU3RyaW5nIGluX3F1ZXJ5ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+
Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksICJxdWVyeSJfcywgbnVsbHB0cik7CisgICAgaWYg
KG1fYmFja2VuZERpc3BhdGNoZXItPmhhc1Byb3RvY29sRXJyb3JzKCkpIHsKKyAgICAgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6
SW52YWxpZFBhcmFtcywgIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnRGF0YWJhc2UuZXhlY3V0
ZVNRTEFzeW5jJyBjYW4ndCBiZSBwcm9jZXNzZWQiX3MpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisgICAgaWYg
KG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXIt
PmV4ZWN1dGVTUUxBc3luYyhyZXF1ZXN0SWQsIGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5KTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKKworICAgIFJlZjxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxl
cjo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2s+IGNhbGxiYWNrID0gYWRvcHRSZWYoKm5ldyBEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2sobV9i
YWNrZW5kRGlzcGF0Y2hlci5jb3B5UmVmKCksIHJlcXVlc3RJZCkpOworICAgIG1fYWdlbnQtPmV4
ZWN1dGVTUUxBc3luYyhpbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSwgY2FsbGJhY2suY29weVJlZigp
KTsKKworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0
QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlz
cGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdp
dGgtYXN5bmMtYXR0cmlidXRlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3Rz
LmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEZyb250ZW5kUm91dGVy
OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5k
RGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMu
Y3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3lu
Yy1hdHRyaWJ1dGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hl
cnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVy
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9y
IHsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250
ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3Rz
LmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5j
LWF0dHJpYnV0ZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJv
dG9jb2xUeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBJ
bnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworCisKKy8vIEZvcndhcmQg
ZGVjbGFyYXRpb25zLgorbmFtZXNwYWNlIERhdGFiYXNlIHsKK2NsYXNzIEVycm9yOworZW51bSBj
bGFzcyBQcmltYXJ5Q29sb3JzOworfSAvLyBEYXRhYmFzZQorLy8gRW5kIG9mIGZvcndhcmQgZGVj
bGFyYXRpb25zLgorCisKKy8vIFR5cGVkZWZzLgorbmFtZXNwYWNlIERhdGFiYXNlIHsKKy8qIFVu
aXF1ZSBpZGVudGlmaWVyIG9mIERhdGFiYXNlIG9iamVjdC4gKi8KK3R5cGVkZWYgaW50IERhdGFi
YXNlSWQ7Cit0eXBlZGVmIEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6OlByaW1hcnlDb2xvcnM+IENvbG9yTGlzdDsKK30gLy8gRGF0YWJhc2UKKy8vIEVuZCBvZiB0
eXBlZGVmcy4KKworbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKKworU3RyaW5nIGdldEVudW1Db25z
dGFudFZhbHVlKGludCBjb2RlKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdldEVu
dW1Db25zdGFudFZhbHVlKFQgZW51bVZhbHVlKQoreworICAgIHJldHVybiBnZXRFbnVtQ29uc3Rh
bnRWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KGVudW1WYWx1ZSkpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBUZXN0SGVscGVycworCituYW1lc3BhY2UgRGF0YWJhc2UgeworLyogICovCitlbnVtIGNsYXNz
IFByaW1hcnlDb2xvcnMgeworICAgIFJlZCA9IDAsCisgICAgR3JlZW4gPSAxLAorICAgIEJsdWUg
PSAyLAorfTsgLy8gZW51bSBjbGFzcyBQcmltYXJ5Q29sb3JzCisvKiBEYXRhYmFzZSBlcnJvci4g
Ki8KK2NsYXNzIEVycm9yIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgeworcHVibGljOgorICAg
IGVudW0geworICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCisgICAgICAgIE1lc3NhZ2VTZXQgPSAx
IDw8IDAsCisgICAgICAgIENvZGVTZXQgPSAxIDw8IDEsCisgICAgICAgIEFsbEZpZWxkc1NldCA9
IChNZXNzYWdlU2V0IHwgQ29kZVNldCkKKyAgICB9OworCisgICAgdGVtcGxhdGU8aW50IFNUQVRF
PgorICAgIGNsYXNzIEJ1aWxkZXIgeworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxKU09O
OjpPYmplY3Q+IG1fcmVzdWx0OworCisgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVy
PFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKKyAgICAg
ICAgfQorCisgICAgICAgIEJ1aWxkZXIoUmVmPC8qRXJyb3IqL0pTT046Ok9iamVjdD4mJiBvYmpl
Y3QpCisgICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKKyAgICAgICAgewor
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJf
Y3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CisgICAgICAgIH0KKyAgICAgICAgZnJpZW5kIGNs
YXNzIEVycm9yOworICAgIHB1YmxpYzoKKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTWVzc2Fn
ZVNldD4mIHNldE1lc3NhZ2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgeworICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE1lc3NhZ2VTZXQpLCBwcm9wZXJ0eV9tZXNz
YWdlX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1lc3Nh
Z2UiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TWVzc2FnZVNldD4o
KTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2RlU2V0PiYgc2V0Q29k
ZShpbnQgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBDb2RlU2V0KSwgcHJvcGVydHlfY29kZV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0SW50ZWdlcigiY29kZSJfcywgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxDb2RlU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgUmVmPEVycm9yPiBy
ZWxlYXNlKCkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0g
QWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKHNpemVvZihFcnJvcikgPT0gc2l6ZW9mKEpTT046Ok9iamVjdCksIGNhbm5vdF9jYXN0
KTsKKworICAgICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4ganNvblJlc3VsdCA9IG1fcmVzdWx0
LnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFdURk1vdmUoKnJl
aW50ZXJwcmV0X2Nhc3Q8UmVmPEVycm9yPio+KCZqc29uUmVzdWx0KSk7CisgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgfTsKKworICAgIC8qCisgICAgICogU3ludGhl
dGljIGNvbnN0cnVjdG9yOgorICAgICAqIFJlZjxFcnJvcj4gcmVzdWx0ID0gRXJyb3I6OmNyZWF0
ZSgpCisgICAgICogICAgIC5zZXRNZXNzYWdlKC4uLikKKyAgICAgKiAgICAgLnNldENvZGUoLi4u
KQorICAgICAqICAgICAucmVsZWFzZSgpOworICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVyPE5v
RmllbGRzU2V0PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVs
ZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOworICAgIH0KK307CisKK30gLy8gRGF0YWJh
c2UKKworCisKK25hbWVzcGFjZSBUZXN0SGVscGVycyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFBy
b3RvY29sRW51bVR5cGU+CitPcHRpb25hbDxQcm90b2NvbEVudW1UeXBlPiBwYXJzZUVudW1WYWx1
ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJik7CisKKy8vIEVudW1zIGluIHRoZSAnRGF0YWJhc2Un
IERvbWFpbgordGVtcGxhdGU8PgorT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6OlByaW1hcnlDb2xvcnM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlBy
b3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4oY29uc3QgU3RyaW5nJik7CisKK30gLy8g
bmFtZXNwYWNlIFRlc3RIZWxwZXJzCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOworCisvLyBIYXNoIGRlY2xhcmF0aW9ucyBpbiB0aGUg
J0RhdGFiYXNlJyBEb21haW4KK3RlbXBsYXRlPD4KK3N0cnVjdCBEZWZhdWx0SGFzaDxJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4geworICAgIHR5cGVkZWYgSW50
SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gSGFzaDsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdURgorIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmpl
Y3RzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUu
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorCisjaW5jbHVk
ZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1l
c3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworbmFtZXNwYWNlIFRl
c3RIZWxwZXJzIHsKKworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFs
dWVzW10gPSB7CisgICAgInJlZCIsCisgICAgImdyZWVuIiwKKyAgICAiYmx1ZSIsCisgICAgImN5
YW4iLAorICAgICJtYWdlbnRhIiwKKyAgICAieWVsbG93IiwKKyAgICAiYmxhY2siLAorfTsKKwor
U3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CisgICAgcmV0dXJuIGVudW1f
Y29uc3RhbnRfdmFsdWVzW2NvZGVdOworfQorCisvLyBFbnVtcyBpbiB0aGUgJ0RhdGFiYXNlJyBE
b21haW4KK3RlbXBsYXRlPD4KK09wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNl
OjpQcmltYXJ5Q29sb3JzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90
b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJp
bmcpCit7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0geworICAg
ICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3Jz
OjpSZWQsCisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlBy
aW1hcnlDb2xvcnM6OkdyZWVuLAorICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzOjpCbHVlLAorICAgIH07CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCAzOyArK2kpCisgICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2Nv
bnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCisgICAgICAgICAgICByZXR1cm4gKElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzKWNvbnN0YW50VmFsdWVz
W2ldOworCisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKworCit9IC8vIG5hbWVzcGFjZSBU
ZXN0SGVscGVycworCisKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKwor
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUu
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+
CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCitAcHJvdG9jb2wgVGVzdFByb3RvY29sRGF0
YWJhc2VEb21haW5IYW5kbGVyOworCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCitjbGFzcyBP
YmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRl
cm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKK3B1YmxpYzoKKyAgICBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
cihpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxl
Z2F0ZSA9IGhhbmRsZXI7IH0KKyAgICB2b2lkIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXMobG9uZyByZXF1ZXN0SWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGlu
X3F1ZXJ5KSBmaW5hbDsKKyAgICB2b2lkIGV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFs
dWVzKGxvbmcgcmVxdWVzdElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9x
dWVyeSkgZmluYWw7CisgICAgdm9pZCBleGVjdXRlU1FMU3luYyhsb25nIHJlcXVlc3RJZCwgaW50
IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpIGZpbmFsOworICAgIHZvaWQg
ZXhlY3V0ZVNRTEFzeW5jKGxvbmcgcmVxdWVzdElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3Qg
U3RyaW5nJiBpbl9xdWVyeSkgZmluYWw7Citwcml2YXRlOgorICAgIFJldGFpblB0cjxpZDxUZXN0
UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOworfTsKKworfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERp
c3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRj
aGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgt
YXN5bmMtYXR0cmlidXRlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5k
RGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW5j
bHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW5jbHVkZSA8d3RmL0pTT05W
YWx1ZXMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3ZvaWQgT2JqQ0luc3BlY3RvckRh
dGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1
ZXMobG9uZyByZXF1ZXN0SWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1
ZXJ5KQoreworICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rv
cihleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzV2l0aEVycm9yQ2FsbGJhY2s6c3Vj
Y2Vzc0NhbGxiYWNrOmRhdGFiYXNlSWQ6cXVlcnk6KV0pIHsKKyAgICAgICAgYmFja2VuZERpc3Bh
dGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVy
OjpNZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS5leGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJu
VmFsdWVzJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlkIGVy
cm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgeworICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6
OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQ
ZW5kaW5nRXJyb3JzKCk7CisgICAgfTsKKworICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oTlNB
cnJheS8qPE5TU3RyaW5nPiovICoqY29sdW1uTmFtZXMsIE5TU3RyaW5nICoqbm90ZXMsIGRvdWJs
ZSAqdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKip2YWx1ZXMsIFJXSVByb3RvY29s
SlNPTk9iamVjdCAqKnBheWxvYWQsIGludCAqZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJh
c2VFcnJvciAqKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgKnNj
cmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiphbHRlcm5hdGVDb2xvcnMsIFRlc3RQ
cm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29s
b3IgKnByaW50Q29sb3IpIHsKKyAgICAgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0T2JqZWN0
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9C
QURfT1BUSU9OQUxfUEFSQU1FVEVSKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7CisgICAg
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihub3RlcywgQCJu
b3RlcyIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVU
RVIodmFsdWVzLCBAInZhbHVlcyIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9P
UFRJT05BTF9QQVJBTUVURVIocGF5bG9hZCwgQCJwYXlsb2FkIik7CisgICAgICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihzcWxFcnJvciwgQCJzcWxFcnJvciIp
OworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoYWx0
ZXJuYXRlQ29sb3JzLCBAImFsdGVybmF0ZUNvbG9ycyIpOworICAgICAgICBpZiAoY29sdW1uTmFt
ZXMpCisgICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywg
dG9KU09OU3RyaW5nQXJyYXkoKmNvbHVtbk5hbWVzKSk7CisgICAgICAgIGlmIChub3RlcykKKyAg
ICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJub3RlcyJfcywgKm5vdGVzKTsKKyAg
ICAgICAgaWYgKHRpbWVzdGFtcCkKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0RG91Ymxl
KCJ0aW1lc3RhbXAiX3MsICp0aW1lc3RhbXApOworICAgICAgICBpZiAodmFsdWVzKQorICAgICAg
ICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgWyp2YWx1ZXMgdG9KU09O
T2JqZWN0XSk7CisgICAgICAgIGlmIChwYXlsb2FkKQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0
LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgWypwYXlsb2FkIHRvSlNPTk9iamVjdF0pOworICAgICAg
ICBpZiAoZGF0YWJhc2VJZCkKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0SW50ZWdlcigi
ZGF0YWJhc2VJZCJfcywgKmRhdGFiYXNlSWQpOworICAgICAgICBpZiAoc3FsRXJyb3IpCisgICAg
ICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIFsqc3FsRXJyb3Ig
dG9KU09OT2JqZWN0XSk7CisgICAgICAgIGlmIChzY3JlZW5Db2xvcikKKyAgICAgICAgICAgIHJl
c3VsdE9iamVjdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgdG9Qcm90b2NvbFN0cmluZygq
c2NyZWVuQ29sb3IpKTsKKyAgICAgICAgaWYgKGFsdGVybmF0ZUNvbG9ycykKKyAgICAgICAgICAg
IHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5n
QXJyYXkoKmFsdGVybmF0ZUNvbG9ycykpOworICAgICAgICBpZiAocHJpbnRDb2xvcikKKyAgICAg
ICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCB0b1Byb3RvY29s
U3RyaW5nKCpwcmludENvbG9yKSk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRS
ZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0T2JqZWN0KSwgZmFsc2UpOworICAgIH07
CisKKyAgICBpbnQgb19pbl9kYXRhYmFzZUlkID0gaW5fZGF0YWJhc2VJZDsKKyAgICBOU1N0cmlu
ZyAqb19pbl9xdWVyeSA9IGluX3F1ZXJ5OworCisgICAgW21fZGVsZWdhdGUgZXhlY3V0ZVNRTFN5
bmNPcHRpb25hbFJldHVyblZhbHVlc1dpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3Vj
Y2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjayBkYXRhYmFzZUlkOm9faW5fZGF0YWJhc2VJZCBx
dWVyeTpvX2luX3F1ZXJ5XTsKK30KKwordm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyByZXF1
ZXN0SWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KQoreworICAg
IGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihleGVjdXRlU1FM
QXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1dpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFj
azpkYXRhYmFzZUlkOnF1ZXJ5OildKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJl
cG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90
Rm91bmQsICInRGF0YWJhc2UuZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMnIHdh
cyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGlu
Z0Vycm9ycygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWQgZXJyb3JDYWxsYmFj
ayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJl
cG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJy
b3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJv
cnMoKTsKKyAgICB9OworCisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihOU0FycmF5Lyo8TlNT
dHJpbmc+Ki8gKipjb2x1bW5OYW1lcywgTlNTdHJpbmcgKipub3RlcywgZG91YmxlICp0aW1lc3Rh
bXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0
ICoqcGF5bG9hZCwgaW50ICpkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoq
c3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqc2NyZWVuQ29sb3Is
IE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0
YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3IgKnByaW50
Q29sb3IpIHsKKyAgICAgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9O
QUxfUEFSQU1FVEVSKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7CisgICAgICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihub3RlcywgQCJub3RlcyIpOwor
ICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIodmFsdWVz
LCBAInZhbHVlcyIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9Q
QVJBTUVURVIocGF5bG9hZCwgQCJwYXlsb2FkIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihzcWxFcnJvciwgQCJzcWxFcnJvciIpOworICAgICAg
ICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoYWx0ZXJuYXRlQ29s
b3JzLCBAImFsdGVybmF0ZUNvbG9ycyIpOworICAgICAgICBpZiAoY29sdW1uTmFtZXMpCisgICAg
ICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgdG9KU09OU3Ry
aW5nQXJyYXkoKmNvbHVtbk5hbWVzKSk7CisgICAgICAgIGlmIChub3RlcykKKyAgICAgICAgICAg
IHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJub3RlcyJfcywgKm5vdGVzKTsKKyAgICAgICAgaWYg
KHRpbWVzdGFtcCkKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0RG91YmxlKCJ0aW1lc3Rh
bXAiX3MsICp0aW1lc3RhbXApOworICAgICAgICBpZiAodmFsdWVzKQorICAgICAgICAgICAgcmVz
dWx0T2JqZWN0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgWyp2YWx1ZXMgdG9KU09OT2JqZWN0XSk7
CisgICAgICAgIGlmIChwYXlsb2FkKQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRWYWx1
ZSgicGF5bG9hZCJfcywgWypwYXlsb2FkIHRvSlNPTk9iamVjdF0pOworICAgICAgICBpZiAoZGF0
YWJhc2VJZCkKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJ
ZCJfcywgKmRhdGFiYXNlSWQpOworICAgICAgICBpZiAoc3FsRXJyb3IpCisgICAgICAgICAgICBy
ZXN1bHRPYmplY3QtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIFsqc3FsRXJyb3IgdG9KU09OT2Jq
ZWN0XSk7CisgICAgICAgIGlmIChzY3JlZW5Db2xvcikKKyAgICAgICAgICAgIHJlc3VsdE9iamVj
dC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgdG9Qcm90b2NvbFN0cmluZygqc2NyZWVuQ29s
b3IpKTsKKyAgICAgICAgaWYgKGFsdGVybmF0ZUNvbG9ycykKKyAgICAgICAgICAgIHJlc3VsdE9i
amVjdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5nQXJyYXkoKmFs
dGVybmF0ZUNvbG9ycykpOworICAgICAgICBpZiAocHJpbnRDb2xvcikKKyAgICAgICAgICAgIHJl
c3VsdE9iamVjdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKCpw
cmludENvbG9yKSk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShy
ZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0T2JqZWN0KSwgZmFsc2UpOworICAgIH07CisKKyAgICBp
bnQgb19pbl9kYXRhYmFzZUlkID0gaW5fZGF0YWJhc2VJZDsKKyAgICBOU1N0cmluZyAqb19pbl9x
dWVyeSA9IGluX3F1ZXJ5OworCisgICAgW21fZGVsZWdhdGUgZXhlY3V0ZVNRTEFzeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXNXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxs
YmFjazpzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDpvX2luX2RhdGFiYXNlSWQgcXVlcnk6b19p
bl9xdWVyeV07Cit9CisKK3ZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXI6OmV4ZWN1dGVTUUxTeW5jKGxvbmcgcmVxdWVzdElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29u
c3QgU3RyaW5nJiBpbl9xdWVyeSkKK3sKKyAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9T
ZWxlY3RvcjpAc2VsZWN0b3IoZXhlY3V0ZVNRTFN5bmNXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNz
Q2FsbGJhY2s6ZGF0YWJhc2VJZDpxdWVyeTopXSkgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1l
dGhvZE5vdEZvdW5kLCAiJ0RhdGFiYXNlLmV4ZWN1dGVTUUxTeW5jJyB3YXMgbm90IGZvdW5kIl9z
KTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5n
ICplcnJvcikgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVy
cm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7Cisg
ICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgfTsK
KworICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiovICpjb2x1
bW5OYW1lcywgTlNTdHJpbmcgKm5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSV0lQcm90b2NvbEpT
T05PYmplY3QgKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkLCBpbnQgZGF0
YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqc3FsRXJyb3IsIE5TQXJyYXkvKjxO
U1N0cmluZz4qLyAqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlD
b2xvcnMgc2NyZWVuQ29sb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmlu
dENvbG9yIHByaW50Q29sb3IpIHsKKyAgICAgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0T2Jq
ZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9SRVFVSVJFRF9QQVJBTUVURVIoY29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsKKyAgICAg
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIobm90ZXMsIEAibm90ZXMi
KTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIodmFsdWVz
LCBAInZhbHVlcyIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFN
RVRFUihwYXlsb2FkLCBAInBheWxvYWQiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9S
RVFVSVJFRF9QQVJBTUVURVIoc3FsRXJyb3IsIEAic3FsRXJyb3IiKTsKKyAgICAgICAgVEhST1df
RVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoYWx0ZXJuYXRlQ29sb3JzLCBAImFsdGVy
bmF0ZUNvbG9ycyIpOworICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJjb2x1bW5OYW1l
cyJfcywgdG9KU09OU3RyaW5nQXJyYXkoY29sdW1uTmFtZXMpKTsKKyAgICAgICAgcmVzdWx0T2Jq
ZWN0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBub3Rlcyk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+
c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIHRpbWVzdGFtcCk7CisgICAgICAgIHJlc3VsdE9iamVj
dC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFt2YWx1ZXMgdG9KU09OT2JqZWN0XSk7CisgICAgICAg
IHJlc3VsdE9iamVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFtwYXlsb2FkIHRvSlNPTk9iamVj
dF0pOworICAgICAgICByZXN1bHRPYmplY3QtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsIGRh
dGFiYXNlSWQpOworICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdCgic3FsRXJyb3IiX3Ms
IFtzcWxFcnJvciB0b0pTT05PYmplY3RdKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJh
eSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCB0b0pTT05TdHJpbmdBcnJheShhbHRlcm5hdGVDb2xvcnMp
KTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCB0b1By
b3RvY29sU3RyaW5nKHNjcmVlbkNvbG9yKSk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3Ry
aW5nKCJwcmludENvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKHByaW50Q29sb3IpKTsKKyAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShy
ZXN1bHRPYmplY3QpLCBmYWxzZSk7CisgICAgfTsKKworICAgIGludCBvX2luX2RhdGFiYXNlSWQg
PSBpbl9kYXRhYmFzZUlkOworICAgIE5TU3RyaW5nICpvX2luX3F1ZXJ5ID0gaW5fcXVlcnk7CisK
KyAgICBbbV9kZWxlZ2F0ZSBleGVjdXRlU1FMU3luY1dpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2Fs
bGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjayBkYXRhYmFzZUlkOm9faW5fZGF0
YWJhc2VJZCBxdWVyeTpvX2luX3F1ZXJ5XTsKK30KKwordm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTEFzeW5jKGxvbmcgcmVxdWVzdElkLCBpbnQg
aW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkKK3sKKyAgICBpZiAoIVttX2Rl
bGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoZXhlY3V0ZVNRTEFzeW5jV2l0aEVy
cm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOmRhdGFiYXNlSWQ6cXVlcnk6KV0pIHsKKyAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJh
Y2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS5leGVjdXRlU1FMQXN5
bmMnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5k
UGVuZGluZ0Vycm9ycygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWQgZXJyb3JD
YWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVy
KCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2Vy
dmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRp
bmdFcnJvcnMoKTsKKyAgICB9OworCisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihOU0FycmF5
Lyo8TlNTdHJpbmc+Ki8gKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqbm90ZXMsIGRvdWJsZSB0aW1l
c3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmpl
Y3QgKnBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpz
cWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzIHNjcmVlbkNvbG9yLCBO
U0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJh
c2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yIHByaW50Q29sb3IpIHsKKyAgICAgICAgUmVmPEpT
T046Ok9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAg
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoY29sdW1uTmFtZXMsIEAi
Y29sdW1uTmFtZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJB
TUVURVIobm90ZXMsIEAibm90ZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFV
SVJFRF9QQVJBTUVURVIodmFsdWVzLCBAInZhbHVlcyIpOworICAgICAgICBUSFJPV19FWENFUFRJ
T05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihwYXlsb2FkLCBAInBheWxvYWQiKTsKKyAgICAgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoc3FsRXJyb3IsIEAic3FsRXJy
b3IiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoYWx0
ZXJuYXRlQ29sb3JzLCBAImFsdGVybmF0ZUNvbG9ycyIpOworICAgICAgICByZXN1bHRPYmplY3Qt
PnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgdG9KU09OU3RyaW5nQXJyYXkoY29sdW1uTmFtZXMp
KTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBub3Rlcyk7Cisg
ICAgICAgIHJlc3VsdE9iamVjdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIHRpbWVzdGFtcCk7
CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFt2YWx1ZXMgdG9K
U09OT2JqZWN0XSk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3Ms
IFtwYXlsb2FkIHRvSlNPTk9iamVjdF0pOworICAgICAgICByZXN1bHRPYmplY3QtPnNldEludGVn
ZXIoImRhdGFiYXNlSWQiX3MsIGRhdGFiYXNlSWQpOworICAgICAgICByZXN1bHRPYmplY3QtPnNl
dE9iamVjdCgic3FsRXJyb3IiX3MsIFtzcWxFcnJvciB0b0pTT05PYmplY3RdKTsKKyAgICAgICAg
cmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5n
KHNjcmVlbkNvbG9yKSk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoImFsdGVybmF0
ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5nQXJyYXkoYWx0ZXJuYXRlQ29sb3JzKSk7CisgICAgICAg
IHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5n
KHByaW50Q29sb3IpKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNl
KHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHRPYmplY3QpLCBmYWxzZSk7CisgICAgfTsKKworICAg
IGludCBvX2luX2RhdGFiYXNlSWQgPSBpbl9kYXRhYmFzZUlkOworICAgIE5TU3RyaW5nICpvX2lu
X3F1ZXJ5ID0gaW5fcXVlcnk7CisKKyAgICBbbV9kZWxlZ2F0ZSBleGVjdXRlU1FMQXN5bmNXaXRo
RXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJh
Y2sgZGF0YWJhc2VJZDpvX2luX2RhdGFiYXNlSWQgcXVlcnk6b19pbl9xdWVyeV07Cit9CisKKwor
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFj
a2VuZERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1
cmF0aW9uLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRo
LWFzeW5jLWF0dHJpYnV0ZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KKworX19hdHRy
aWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAorQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbiwg
c2V0dGVyPXNldERhdGFiYXNlSGFuZGxlcjopIGlkPFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWlu
SGFuZGxlcj4gZGF0YWJhc2VIYW5kbGVyOworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25m
aWd1cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMt
d2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCisKKyNp
bXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNr
ZW5kRGlzcGF0Y2hlcnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3Bh
dGNoYWJsZUFnZW50Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3Bl
Y3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVy
bmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXJzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisK
K0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCit7CisgICAgQXVnbWVu
dGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKKyAgICBpZDxUZXN0UHJvdG9j
b2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+IF9kYXRhYmFzZUhhbmRsZXI7Cit9CisKKy0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxl
ciopY29udHJvbGxlcgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxm
KQorICAgICAgICByZXR1cm4gbmlsOworICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBfY29u
dHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVh
bGxvYworeworICAgIFtfZGF0YWJhc2VIYW5kbGVyIHJlbGVhc2VdOworICAgIFtzdXBlciBkZWFs
bG9jXTsKK30KKworLSAodm9pZClzZXREYXRhYmFzZUhhbmRsZXI6KGlkPFRlc3RQcm90b2NvbERh
dGFiYXNlRG9tYWluSGFuZGxlcj4paGFuZGxlcgoreworICAgIGlmIChoYW5kbGVyID09IF9kYXRh
YmFzZUhhbmRsZXIpCisgICAgICAgIHJldHVybjsKKworICAgIFtfZGF0YWJhc2VIYW5kbGVyIHJl
bGVhc2VdOworICAgIF9kYXRhYmFzZUhhbmRsZXIgPSBbaGFuZGxlciByZXRhaW5dOworCisgICAg
YXV0byBhbHRlcm5hdGVEaXNwYXRjaGVyID0gbWFrZVVuaXF1ZTxPYmpDSW5zcGVjdG9yRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7CisgICAgYXV0byBhbHRlcm5hdGVBZ2VudCA9
IG1ha2VVbmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8RGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlciwgQWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4+KCJEYXRhYmFzZSJf
cywgKl9jb250cm9sbGVyLCBXVEZNb3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIpKTsKKyAgICBfY29u
dHJvbGxlci0+YXBwZW5kRXh0cmFBZ2VudChXVEZNb3ZlKGFsdGVybmF0ZUFnZW50KSk7Cit9CisK
Ky0gKGlkPFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4pZGF0YWJhc2VIYW5kbGVy
Cit7CisgICAgcmV0dXJuIF9kYXRhYmFzZUhhbmRsZXI7Cit9CisKK0BlbmQKKworCisjIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKworIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVy
bmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9y
dCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisj
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
Y29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4K
KworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgorCisKK0Bj
bGFzcyBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yOworCisKK3R5cGVkZWYgTlNfRU5VTShOU0lu
dGVnZXIsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycykgeworICAgIFRlc3RQcm90
b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc1JlZCwKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZVBy
aW1hcnlDb2xvcnNHcmVlbiwKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNC
bHVlLAorfTsKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGF0YWJh
c2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvcikgeworICAgIFRl
c3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50
Q29sb3JDeWFuLAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25h
bFJldHVyblZhbHVlc1ByaW50Q29sb3JNYWdlbnRhLAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNl
RXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JZZWxsb3csCisgICAg
VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJp
bnRDb2xvckJsYWNrLAorfTsKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3Rv
Y29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3Ip
IHsKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJu
VmFsdWVzUHJpbnRDb2xvckN5YW4sCisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FM
QXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JNYWdlbnRhLAorICAgIFRlc3RQcm90
b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9y
WWVsbG93LAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxS
ZXR1cm5WYWx1ZXNQcmludENvbG9yQmxhY2ssCit9OworCit0eXBlZGVmIE5TX0VOVU0oTlNJbnRl
Z2VyLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvcikgeworICAg
IFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yQ3lhbiwKKyAgICBU
ZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvck1hZ2VudGEsCisgICAg
VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3JZZWxsb3csCisgICAg
VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3JCbGFjaywKK307CisK
K3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNR
TEFzeW5jUHJpbnRDb2xvcikgeworICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFz
eW5jUHJpbnRDb2xvckN5YW4sCisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5
bmNQcmludENvbG9yTWFnZW50YSwKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxB
c3luY1ByaW50Q29sb3JZZWxsb3csCisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FM
QXN5bmNQcmludENvbG9yQmxhY2ssCit9OworCisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkg
KCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIDogUldJ
UHJvdG9jb2xKU09OT2JqZWN0CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0Rp
Y3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKKy0gKGluc3RhbmNldHlwZSlpbml0
V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0Owor
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlIGNvZGU6
KGludCljb2RlOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5T
U3RyaW5nICptZXNzYWdlOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFz
c2lnbikgaW50IGNvZGU7CitAZW5kCisKK0Bwcm90b2NvbCBUZXN0UHJvdG9jb2xEYXRhYmFzZURv
bWFpbkhhbmRsZXIgPE5TT2JqZWN0PgorQG9wdGlvbmFsCistICh2b2lkKWV4ZWN1dGVTUUxTeW5j
T3B0aW9uYWxSZXR1cm5WYWx1ZXNXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAq
ZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKE5TQXJyYXkvKjxO
U1N0cmluZz4qLyAqKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqKm5vdGVzLCBkb3VibGUgKnRpbWVz
dGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmpl
Y3QgKipwYXlsb2FkLCBpbnQgKmRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3Ig
KipzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzICpzY3JlZW5Db2xv
ciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICoqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xE
YXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yICpwcmlu
dENvbG9yKSlzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDooaW50KWRhdGFiYXNlSWQgcXVlcnk6
KE5TU3RyaW5nICopcXVlcnk7CistICh2b2lkKWV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJu
VmFsdWVzV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNh
bGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKShOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKipj
b2x1bW5OYW1lcywgTlNTdHJpbmcgKipub3RlcywgZG91YmxlICp0aW1lc3RhbXAsIFJXSVByb3Rv
Y29sSlNPTk9iamVjdCAqKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqcGF5bG9hZCwg
aW50ICpkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqc3FsRXJyb3IsIFRl
c3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxO
U1N0cmluZz4qLyAqKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRl
U1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3IgKnByaW50Q29sb3IpKXN1Y2Nl
c3NDYWxsYmFjayBkYXRhYmFzZUlkOihpbnQpZGF0YWJhc2VJZCBxdWVyeTooTlNTdHJpbmcgKilx
dWVyeTsKKy0gKHZvaWQpZXhlY3V0ZVNRTFN5bmNXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShO
U1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKE5T
QXJyYXkvKjxOU1N0cmluZz4qLyAqY29sdW1uTmFtZXMsIE5TU3RyaW5nICpub3RlcywgZG91Ymxl
IHRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICp2YWx1ZXMsIFJXSVByb3RvY29sSlNP
Tk9iamVjdCAqcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJy
b3IgKnNxbEVycm9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmFsdGVybmF0ZUNvbG9ycywgVGVz
dFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzIHNjcmVlbkNvbG9yLCBUZXN0UHJvdG9jb2xE
YXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvciBwcmludENvbG9yKSlzdWNjZXNzQ2FsbGJh
Y2sgZGF0YWJhc2VJZDooaW50KWRhdGFiYXNlSWQgcXVlcnk6KE5TU3RyaW5nICopcXVlcnk7Cist
ICh2b2lkKWV4ZWN1dGVTUUxBc3luY1dpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5n
ICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoTlNBcnJheS8q
PE5TU3RyaW5nPiovICpjb2x1bW5OYW1lcywgTlNTdHJpbmcgKm5vdGVzLCBkb3VibGUgdGltZXN0
YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0
ICpwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqc3Fs
RXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyBzY3JlZW5Db2xvciwgTlNB
cnJheS8qPE5TU3RyaW5nPiovICphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNl
RXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvciBwcmludENvbG9yKSlzdWNjZXNzQ2FsbGJhY2sgZGF0
YWJhc2VJZDooaW50KWRhdGFiYXNlSWQgcXVlcnk6KE5TU3RyaW5nICopcXVlcnk7CitAZW5kCisK
KworCisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0
eU9iamVjdHMuaD4KKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAorCisjIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KKy8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisj
aW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgorI2ltcG9ydCA8SmF2YVNj
cmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDx3dGYv
SlNPTlZhbHVlcy5oPgorCisKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFs
LmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1
dGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1w
b3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFy
cmF5Q29udmVyc2lvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3RlbXBsYXRlPHR5
cGVuYW1lIE9iakNFbnVtVHlwZT4KK09wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29s
U3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOworCisKK2lubGluZSBTdHJpbmcgdG9Qcm90b2Nv
bFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgdmFsdWUpCit7CisgICAg
c3dpdGNoKHZhbHVlKSB7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xv
cnNSZWQ6CisgICAgICAgIHJldHVybiAicmVkIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0
YWJhc2VQcmltYXJ5Q29sb3JzR3JlZW46CisgICAgICAgIHJldHVybiAiZ3JlZW4iX3M7CisgICAg
Y2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNCbHVlOgorICAgICAgICByZXR1
cm4gImJsdWUiX3M7CisgICAgfQorfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgT3B0aW9uYWw8VGVz
dFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gInJlZCIpCisgICAgICAgIHJldHVy
biBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNSZWQ7CisgICAgaWYgKHZhbHVlID09
ICJncmVlbiIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xv
cnNHcmVlbjsKKyAgICBpZiAodmFsdWUgPT0gImJsdWUiKQorICAgICAgICByZXR1cm4gVGVzdFBy
b3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzQmx1ZTsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0
OworfQorCitpbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sRGF0YWJh
c2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvciB2YWx1ZSkKK3sK
KyAgICBzd2l0Y2godmFsdWUpIHsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0
ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JDeWFuOgorICAgICAgICByZXR1
cm4gImN5YW4iX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5j
T3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yTWFnZW50YToKKyAgICAgICAgcmV0dXJuICJt
YWdlbnRhIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09w
dGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvclllbGxvdzoKKyAgICAgICAgcmV0dXJuICJ5ZWxs
b3ciX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXNQcmludENvbG9yQmxhY2s6CisgICAgICAgIHJldHVybiAiYmxhY2siX3M7
CisgICAgfQorfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0
YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvcj4gZnJvbVBy
b3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09ICJj
eWFuIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNP
cHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JDeWFuOworICAgIGlmICh2YWx1ZSA9PSAibWFn
ZW50YSIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5j
T3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yTWFnZW50YTsKKyAgICBpZiAodmFsdWUgPT0g
InllbGxvdyIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxT
eW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yWWVsbG93OworICAgIGlmICh2YWx1ZSA9
PSAiYmxhY2siKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FM
U3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvckJsYWNrOworICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7Cit9CisKK2lubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9j
b2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvciB2
YWx1ZSkKK3sKKyAgICBzd2l0Y2godmFsdWUpIHsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFi
YXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yQ3lhbjoKKyAg
ICAgICAgcmV0dXJuICJjeWFuIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVj
dXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JNYWdlbnRhOgorICAgICAg
ICByZXR1cm4gIm1hZ2VudGEiX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvclllbGxvdzoKKyAgICAgICAg
cmV0dXJuICJ5ZWxsb3ciX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVT
UUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvckJsYWNrOgorICAgICAgICByZXR1
cm4gImJsYWNrIl9zOworICAgIH0KK30KKwordGVtcGxhdGU8PgoraW5saW5lIE9wdGlvbmFsPFRl
c3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmlu
dENvbG9yPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBp
ZiAodmFsdWUgPT0gImN5YW4iKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VF
eGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JDeWFuOworICAgIGlm
ICh2YWx1ZSA9PSAibWFnZW50YSIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFz
ZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvck1hZ2VudGE7Cisg
ICAgaWYgKHZhbHVlID09ICJ5ZWxsb3ciKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0
YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JZZWxsb3c7
CisgICAgaWYgKHZhbHVlID09ICJibGFjayIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xE
YXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvckJsYWNr
OworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK2lubGluZSBTdHJpbmcgdG9Qcm90b2Nv
bFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvciB2YWx1
ZSkKK3sKKyAgICBzd2l0Y2godmFsdWUpIHsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNl
RXhlY3V0ZVNRTFN5bmNQcmludENvbG9yQ3lhbjoKKyAgICAgICAgcmV0dXJuICJjeWFuIl9zOwor
ICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3JNYWdl
bnRhOgorICAgICAgICByZXR1cm4gIm1hZ2VudGEiX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xE
YXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvclllbGxvdzoKKyAgICAgICAgcmV0dXJuICJ5
ZWxsb3ciX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJp
bnRDb2xvckJsYWNrOgorICAgICAgICByZXR1cm4gImJsYWNrIl9zOworICAgIH0KK30KKwordGVt
cGxhdGU8PgoraW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5
bmNQcmludENvbG9yPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sK
KyAgICBpZiAodmFsdWUgPT0gImN5YW4iKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0
YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3JDeWFuOworICAgIGlmICh2YWx1ZSA9PSAibWFn
ZW50YSIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5j
UHJpbnRDb2xvck1hZ2VudGE7CisgICAgaWYgKHZhbHVlID09ICJ5ZWxsb3ciKQorICAgICAgICBy
ZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3JZZWxsb3c7
CisgICAgaWYgKHZhbHVlID09ICJibGFjayIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xE
YXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvckJsYWNrOworICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7Cit9CisKK2lubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xE
YXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3IgdmFsdWUpCit7CisgICAgc3dpdGNoKHZh
bHVlKSB7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50
Q29sb3JDeWFuOgorICAgICAgICByZXR1cm4gImN5YW4iX3M7CisgICAgY2FzZSBUZXN0UHJvdG9j
b2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JNYWdlbnRhOgorICAgICAgICByZXR1
cm4gIm1hZ2VudGEiX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxB
c3luY1ByaW50Q29sb3JZZWxsb3c6CisgICAgICAgIHJldHVybiAieWVsbG93Il9zOworICAgIGNh
c2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yQmxhY2s6Cisg
ICAgICAgIHJldHVybiAiYmxhY2siX3M7CisgICAgfQorfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUg
T3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yPiBm
cm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUg
PT0gImN5YW4iKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FM
QXN5bmNQcmludENvbG9yQ3lhbjsKKyAgICBpZiAodmFsdWUgPT0gIm1hZ2VudGEiKQorICAgICAg
ICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yTWFn
ZW50YTsKKyAgICBpZiAodmFsdWUgPT0gInllbGxvdyIpCisgICAgICAgIHJldHVybiBUZXN0UHJv
dG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JZZWxsb3c7CisgICAgaWYgKHZh
bHVlID09ICJibGFjayIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVTUUxBc3luY1ByaW50Q29sb3JCbGFjazsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQor
Cit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0
aC1hc3luYy1hdHRyaWJ1dGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKworI2lt
cG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgi
CisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgor
Cit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucyAoRGF0YWJhc2VEb21haW4pCisKKysgKHZvaWQpX3BhcnNlRGF0YWJhc2VJ
ZDooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisrICh2b2lk
KV9wYXJzZVByaW1hcnlDb2xvcnM6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihp
ZClwYXlsb2FkOworKyAodm9pZClfcGFyc2VDb2xvckxpc3Q6KE5TQXJyYXkvKjxOU1N0cmluZz4q
LyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNlRXJy
b3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlk
KXBheWxvYWQ7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucyAoRGF0YWJhc2VEb21haW4pCisKKysgKHZvaWQpX3BhcnNlRGF0YWJhc2VJZDooTlNO
dW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19F
WENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU051bWJlciBjbGFzc10pOworICAgICpv
dXRWYWx1ZSA9IChOU051bWJlciAqKXBheWxvYWQ7Cit9CisKKysgKHZvaWQpX3BhcnNlUHJpbWFy
eUNvbG9yczooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sK
KyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBjbGFz
c10pOworICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycz4gcmVz
dWx0ID0gSW5zcGVjdG9yOjpmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sRGF0YWJhc2VQ
cmltYXJ5Q29sb3JzPihwYXlsb2FkKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9FTlVN
X1ZBTFVFKHJlc3VsdCwgQCJQcmltYXJ5Q29sb3JzIik7CisgICAgKm91dFZhbHVlID0gQChyZXN1
bHQudmFsdWUoKSk7Cit9CisKKysgKHZvaWQpX3BhcnNlQ29sb3JMaXN0OihOU0FycmF5Lyo8TlNT
dHJpbmc+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJP
V19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0FycmF5Lyo8TlNTdHJpbmc+Ki8g
Y2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSAoTlNBcnJheS8qPE5TU3RyaW5nPiovICopcGF5bG9h
ZDsKK30KKworKyAodm9pZClfcGFyc2VFcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAq
KilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOworICAgICpvdXRW
YWx1ZSA9IFtbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBhbGxvY10gaW5pdFdpdGhQYXlsb2Fk
OnBheWxvYWRdOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRy
aWJ1dGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisj
aW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05P
YmplY3RQcml2YXRlLmg+CisjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2ltcG9ydCA8d3Rm
L0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCitAaW1wbGVt
ZW50YXRpb24gVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcgorCistIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXls
b2FkCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBu
aWw7CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRb
QCJtZXNzYWdlIl0sIEAibWVzc2FnZSIpOworICAgIHNlbGYubWVzc2FnZSA9IHBheWxvYWRbQCJt
ZXNzYWdlIl07CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBh
eWxvYWRbQCJjb2RlIl0sIEAiY29kZSIpOworICAgIHNlbGYuY29kZSA9IFtwYXlsb2FkW0AiY29k
ZSJdIGludGVnZXJWYWx1ZV07CisKKyAgICByZXR1cm4gc2VsZjsKK30KKy0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilvYmplY3QK
K3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoSlNPTk9iamVjdDpbb2JqZWN0IHRv
SlNPTk9iamVjdF0uZ2V0KCldKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHJldHVybiBz
ZWxmOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1l
c3NhZ2UgY29kZTooaW50KWNvZGUKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkK
KyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURf
UFJPUEVSVFkobWVzc2FnZSwgQCJtZXNzYWdlIik7CisKKyAgICBzZWxmLm1lc3NhZ2UgPSBtZXNz
YWdlOworICAgIHNlbGYuY29kZSA9IGNvZGU7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAo
dm9pZClzZXRNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UKK3sKKyAgICBbc3VwZXIgc2V0U3Ry
aW5nOm1lc3NhZ2UgZm9yS2V5OkAibWVzc2FnZSJdOworfQorCistIChOU1N0cmluZyAqKW1lc3Nh
Z2UKK3sKKyAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAIm1lc3NhZ2UiXTsKK30KKwor
LSAodm9pZClzZXRDb2RlOihpbnQpY29kZQoreworICAgIFtzdXBlciBzZXRJbnRlZ2VyOmNvZGUg
Zm9yS2V5OkAiY29kZSJdOworfQorCistIChpbnQpY29kZQoreworICAgIHJldHVybiBbc3VwZXIg
aW50ZWdlckZvcktleTpAImNvZGUiXTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwt
cmV0dXJuLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxs
LXJldHVybi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwLi4xMzFlZjdmZGVmMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRo
LW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQKQEAgLTAsMCArMSwx
NjQzIEBACisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxs
LXJldHVybi1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworLy8gRGF0YWJhc2UKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4o
IkRhdGFiYXNlIiwgbnVsbCk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiRGF0YWJh
c2UuUHJpbWFyeUNvbG9ycyIsIHtSZWQ6ICJyZWQiLCBHcmVlbjogImdyZWVuIiwgQmx1ZTogImJs
dWUifSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiRGF0YWJhc2UuZXhlY3V0
ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyIsIG51bGwsIFt7Im5hbWUiOiAiY29sdW1uTmFtZXMiLCAi
dHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0cnVlfSwgeyJuYW1lIjogIm5vdGVzIiwgInR5
cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZX0sIHsibmFtZSI6ICJ0aW1lc3RhbXAiLCAi
dHlwZSI6ICJudW1iZXIiLCAib3B0aW9uYWwiOiB0cnVlfSwgeyJuYW1lIjogInZhbHVlcyIsICJ0
eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRydWV9LCB7Im5hbWUiOiAicGF5bG9hZCIsICJ0
eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRydWV9LCB7Im5hbWUiOiAiZGF0YWJhc2VJZCIs
ICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6IHRydWV9LCB7Im5hbWUiOiAic3FsRXJyb3Ii
LCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0cnVlfSwgeyJuYW1lIjogInNjcmVlbkNv
bG9yIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZX0sIHsibmFtZSI6ICJhbHRl
cm5hdGVDb2xvcnMiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0cnVlfSwgeyJuYW1l
IjogInByaW50Q29sb3IiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVlfV0sIFsi
Y29sdW1uTmFtZXMiLCAibm90ZXMiLCAidGltZXN0YW1wIiwgInZhbHVlcyIsICJwYXlsb2FkIiwg
ImRhdGFiYXNlSWQiLCAic3FsRXJyb3IiLCAic2NyZWVuQ29sb3IiLCAiYWx0ZXJuYXRlQ29sb3Jz
IiwgInByaW50Q29sb3IiXSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiRGF0
YWJhc2UuZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIiwgbnVsbCwgW3sibmFtZSI6ICJjb2x1
bW5OYW1lcyIsICJ0eXBlIjogIm9iamVjdCJ9LCB7Im5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJz
dHJpbmcifSwgeyJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciJ9LCB7Im5hbWUi
OiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0In0sIHsibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUi
OiAib2JqZWN0In0sIHsibmFtZSI6ICJkYXRhYmFzZUlkIiwgInR5cGUiOiAibnVtYmVyIn0sIHsi
bmFtZSI6ICJzcWxFcnJvciIsICJ0eXBlIjogIm9iamVjdCJ9LCB7Im5hbWUiOiAic2NyZWVuQ29s
b3IiLCAidHlwZSI6ICJzdHJpbmcifSwgeyJuYW1lIjogImFsdGVybmF0ZUNvbG9ycyIsICJ0eXBl
IjogIm9iamVjdCJ9LCB7Im5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmluZyJ9XSwg
WyJjb2x1bW5OYW1lcyIsICJub3RlcyIsICJ0aW1lc3RhbXAiLCAidmFsdWVzIiwgInBheWxvYWQi
LCAiZGF0YWJhc2VJZCIsICJzcWxFcnJvciIsICJzY3JlZW5Db2xvciIsICJhbHRlcm5hdGVDb2xv
cnMiLCAicHJpbnRDb2xvciJdKTsKK0luc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkRh
dGFiYXNlIiwgbnVsbCk7CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5q
cworCisjIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1j
YWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVS
TkFURV9ESVNQQVRDSEVSUykKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorCituYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKKworY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVi
bGljOgorICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRj
aGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0
Y2hlcik7IH0KKyAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25z
dCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Citwcml2YXRlOgorICAgIFJl
ZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKK307CisKKworY2xh
c3MgQWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+QWx0ZXJuYXRlRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlQWxsT3B0
aW9uYWxQYXJhbWV0ZXJzKGxvbmcgY2FsbElkLCBjb25zdCBKU09OOjpBcnJheSogaW5fY29sdW1u
TmFtZXMsIGNvbnN0IFN0cmluZyogaW5fbm90ZXMsIGNvbnN0IGRvdWJsZSogaW5fdGltZXN0YW1w
LCBjb25zdCBKU09OOjpPYmplY3QqIGluX3ZhbHVlcywgY29uc3QgSlNPTjo6VmFsdWUqIGluX3Bh
eWxvYWQsIGNvbnN0IGludCogaW5fZGF0YWJhc2VJZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBpbl9z
cWxFcnJvciwgY29uc3QgU3RyaW5nKiBpbl9zY3JlZW5Db2xvciwgY29uc3QgSlNPTjo6QXJyYXkq
IGluX2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nKiBpbl9wcmludENvbG9yKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhsb25nIGNhbGxJZCwg
Y29uc3QgSlNPTjo6QXJyYXkmIGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIGluX25vdGVz
LCBkb3VibGUgaW5fdGltZXN0YW1wLCBjb25zdCBKU09OOjpPYmplY3QmIGluX3ZhbHVlcywgSlNP
Tjo6VmFsdWUgaW5fcGF5bG9hZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IEpTT046Ok9iamVj
dCYgaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgaW5fc2NyZWVuQ29sb3IsIGNvbnN0IEpTT046
OkFycmF5JiBpbl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgaW5fcHJpbnRDb2xvcikg
PSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUo
SU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyMjIyBFbmQgRmlsZTogVGVzdEFsdGVy
bmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERp
c3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13
aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRl
c3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCitu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKKyNp
ZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK2NsYXNzIEFsdGVybmF0
ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI7CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKK2NsYXNzIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyIHsKK3B1YmxpYzoKKyAgICAvLyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIgJ3ByaW50Q29s
b3InIHdoaWxlIGdlbmVyYXRpbmcgY29tbWFuZC9ldmVudCBleGVjdXRlQWxsT3B0aW9uYWxQYXJh
bWV0ZXJzLgorICAgIGVudW0gY2xhc3MgUHJpbnRDb2xvciB7CisgICAgICAgIEN5YW4gPSAzLAor
ICAgICAgICBNYWdlbnRhID0gNCwKKyAgICAgICAgWWVsbG93ID0gNSwKKyAgICAgICAgQmxhY2sg
PSA2LAorICAgIH07IC8vIGVudW0gY2xhc3MgUHJpbnRDb2xvcgorICAgIHZpcnR1YWwgdm9pZCBl
eGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKEVycm9yU3RyaW5nJiwgY29uc3QgSlNPTjo6QXJy
YXkqIG9wdF9pbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nKiBvcHRfaW5fbm90ZXMsIGNvbnN0
IGRvdWJsZSogb3B0X2luX3RpbWVzdGFtcCwgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRfaW5fdmFs
dWVzLCBjb25zdCBKU09OOjpWYWx1ZSogb3B0X2luX3BheWxvYWQsIGNvbnN0IGludCogb3B0X2lu
X2RhdGFiYXNlSWQsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0X2luX3NxbEVycm9yLCBjb25zdCBT
dHJpbmcqIG9wdF9pbl9zY3JlZW5Db2xvciwgY29uc3QgSlNPTjo6QXJyYXkqIG9wdF9pbl9hbHRl
cm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyogb3B0X2luX3ByaW50Q29sb3IsIFJlZlB0cjxKU09O
OjpBcnJheU9mPFN0cmluZz4+JiBvcHRfb3V0X2NvbHVtbk5hbWVzLCBPcHRpb25hbDxTdHJpbmc+
JiBvcHRfb3V0X25vdGVzLCBPcHRpb25hbDxkb3VibGU+JiBvcHRfb3V0X3RpbWVzdGFtcCwgT3B0
aW9uYWw8SlNPTjo6T2JqZWN0PiYgb3B0X291dF92YWx1ZXMsIE9wdGlvbmFsPEpTT046OlZhbHVl
PiYgb3B0X291dF9wYXlsb2FkLCBPcHRpb25hbDxpbnQ+JiBvcHRfb3V0X2RhdGFiYXNlSWQsIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiBvcHRfb3V0X3NxbEVy
cm9yLCBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyogb3B0X291
dF9zY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xv
ckxpc3Q+JiBvcHRfb3V0X2FsdGVybmF0ZUNvbG9ycywgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXI6OlByaW50Q29sb3IqIG9wdF9vdXRfcHJpbnRDb2xvcikgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMoRXJyb3JTdHJpbmcmLCBjb25zdCBK
U09OOjpBcnJheSYgaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgaW5fbm90ZXMsIGRvdWJs
ZSBpbl90aW1lc3RhbXAsIGNvbnN0IEpTT046Ok9iamVjdCYgaW5fdmFsdWVzLCBKU09OOjpWYWx1
ZSBpbl9wYXlsb2FkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgSlNPTjo6T2JqZWN0JiBpbl9z
cWxFcnJvciwgY29uc3QgU3RyaW5nJiBpbl9zY3JlZW5Db2xvciwgY29uc3QgSlNPTjo6QXJyYXkm
IGluX2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBpbl9wcmludENvbG9yLCBSZWZQdHI8
SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYgb3V0X2NvbHVtbk5hbWVzLCBTdHJpbmcqIG91dF9ub3Rl
cywgZG91YmxlKiBvdXRfdGltZXN0YW1wLCBKU09OOjpPYmplY3QqIG91dF92YWx1ZXMsIEpTT046
OlZhbHVlKiBvdXRfcGF5bG9hZCwgaW50KiBvdXRfZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mIG91dF9zcWxFcnJvciwgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMqIG91dF9zY3JlZW5Db2xvciwgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiBvdXRfYWx0ZXJuYXRl
Q29sb3JzLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciogb3V0
X3ByaW50Q29sb3IpID0gMDsKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5EYXRhYmFzZUJhY2tl
bmREaXNwYXRjaGVySGFuZGxlcigpOworfTsKKworY2xhc3MgRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJs
aWM6CisgICAgc3RhdGljIFJlZjxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFj
a2VuZERpc3BhdGNoZXImLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAg
IHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8
SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOworcHJpdmF0ZToKKyAgICB2b2lkIGV4ZWN1
dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+JiYgcGFyYW1ldGVycyk7CisgICAgdm9pZCBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMo
bG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisjaWYg
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCitwdWJsaWM6CisgICAgdm9p
ZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJu
YXRlRGlzcGF0Y2hlcjsgfQorcHJpdmF0ZToKKyAgICBBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVyKiBtX2FsdGVybmF0ZURpc3BhdGNoZXIgeyBudWxscHRyIH07CisjZW5kaWYgLy8g
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCitwcml2YXRlOgorICAgIERh
dGFiYXNlQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImLCBEYXRhYmFzZUJhY2tl
bmREaXNwYXRjaGVySGFuZGxlciopOworICAgIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyKiBtX2FnZW50IHsgbnVsbHB0ciB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
CisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmls
ZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3
dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQorI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMu
aCIKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKwor
bmFtZXNwYWNlIEluc3BlY3RvciB7CisKK0RhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
Ojp+RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KKworUmVmPERhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXI+IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShCYWNr
ZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIERhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyKiBhZ2VudCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOworfQorCitEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVyOjpEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNw
YXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIqIGFnZW50KQorICAgIDogU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERp
c3BhdGNoZXIpCisgICAgLCBtX2FnZW50KGFnZW50KQoreworICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbigiRGF0YWJhc2UiX3MsIHRoaXMpOworfQor
Cit2b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElk
LCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQorewor
ICAgIFJlZjxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKKworICAg
IFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7CisgICAgbWVzc2FnZS0+Z2V0T2JqZWN0
KCJwYXJhbXMiX3MsIHBhcmFtZXRlcnMpOworCisgICAgaWYgKG1ldGhvZCA9PSAiZXhlY3V0ZUFs
bE9wdGlvbmFsUGFyYW1ldGVycyIpIHsKKyAgICAgICAgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1l
dGVycyhyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIGlmIChtZXRob2QgPT0gImV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyIpIHsK
KyAgICAgICAgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKHJlcXVlc3RJZCwgV1RGTW92ZShw
YXJhbWV0ZXJzKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2JhY2tlbmREaXNw
YXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RG
b3VuZCwgIidEYXRhYmFzZS4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOworfQorCit2
b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRl
cnMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycykKK3sK
KyAgICBib29sIG9wdF9pbl9jb2x1bW5OYW1lc192YWx1ZUZvdW5kID0gZmFsc2U7CisgICAgUmVm
UHRyPEpTT046OkFycmF5PiBvcHRfaW5fY29sdW1uTmFtZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVy
LT5nZXRBcnJheShwYXJhbWV0ZXJzLmdldCgpLCAiY29sdW1uTmFtZXMiX3MsICZvcHRfaW5fY29s
dW1uTmFtZXNfdmFsdWVGb3VuZCk7CisgICAgYm9vbCBvcHRfaW5fbm90ZXNfdmFsdWVGb3VuZCA9
IGZhbHNlOworICAgIFN0cmluZyBvcHRfaW5fbm90ZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5n
ZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgIm5vdGVzIl9zLCAmb3B0X2luX25vdGVzX3ZhbHVl
Rm91bmQpOworICAgIGJvb2wgb3B0X2luX3RpbWVzdGFtcF92YWx1ZUZvdW5kID0gZmFsc2U7Cisg
ICAgZG91YmxlIG9wdF9pbl90aW1lc3RhbXAgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXREb3Vi
bGUocGFyYW1ldGVycy5nZXQoKSwgInRpbWVzdGFtcCJfcywgJm9wdF9pbl90aW1lc3RhbXBfdmFs
dWVGb3VuZCk7CisgICAgYm9vbCBvcHRfaW5fdmFsdWVzX3ZhbHVlRm91bmQgPSBmYWxzZTsKKyAg
ICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBvcHRfaW5fdmFsdWVzID0gbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+Z2V0T2JqZWN0KHBhcmFtZXRlcnMuZ2V0KCksICJ2YWx1ZXMiX3MsICZvcHRfaW5fdmFsdWVz
X3ZhbHVlRm91bmQpOworICAgIGJvb2wgb3B0X2luX3BheWxvYWRfdmFsdWVGb3VuZCA9IGZhbHNl
OworICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gb3B0X2luX3BheWxvYWQgPSBtX2JhY2tlbmREaXNw
YXRjaGVyLT5nZXRWYWx1ZShwYXJhbWV0ZXJzLmdldCgpLCAicGF5bG9hZCJfcywgJm9wdF9pbl9w
YXlsb2FkX3ZhbHVlRm91bmQpOworICAgIGJvb2wgb3B0X2luX2RhdGFiYXNlSWRfdmFsdWVGb3Vu
ZCA9IGZhbHNlOworICAgIGludCBvcHRfaW5fZGF0YWJhc2VJZCA9IG1fYmFja2VuZERpc3BhdGNo
ZXItPmdldEludGVnZXIocGFyYW1ldGVycy5nZXQoKSwgImRhdGFiYXNlSWQiX3MsICZvcHRfaW5f
ZGF0YWJhc2VJZF92YWx1ZUZvdW5kKTsKKyAgICBib29sIG9wdF9pbl9zcWxFcnJvcl92YWx1ZUZv
dW5kID0gZmFsc2U7CisgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gb3B0X2luX3NxbEVycm9yID0g
bV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0T2JqZWN0KHBhcmFtZXRlcnMuZ2V0KCksICJzcWxFcnJv
ciJfcywgJm9wdF9pbl9zcWxFcnJvcl92YWx1ZUZvdW5kKTsKKyAgICBib29sIG9wdF9pbl9zY3Jl
ZW5Db2xvcl92YWx1ZUZvdW5kID0gZmFsc2U7CisgICAgU3RyaW5nIG9wdF9pbl9zY3JlZW5Db2xv
ciA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwYXJhbWV0ZXJzLmdldCgpLCAic2Ny
ZWVuQ29sb3IiX3MsICZvcHRfaW5fc2NyZWVuQ29sb3JfdmFsdWVGb3VuZCk7CisgICAgYm9vbCBv
cHRfaW5fYWx0ZXJuYXRlQ29sb3JzX3ZhbHVlRm91bmQgPSBmYWxzZTsKKyAgICBSZWZQdHI8SlNP
Tjo6QXJyYXk+IG9wdF9pbl9hbHRlcm5hdGVDb2xvcnMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5n
ZXRBcnJheShwYXJhbWV0ZXJzLmdldCgpLCAiYWx0ZXJuYXRlQ29sb3JzIl9zLCAmb3B0X2luX2Fs
dGVybmF0ZUNvbG9yc192YWx1ZUZvdW5kKTsKKyAgICBib29sIG9wdF9pbl9wcmludENvbG9yX3Zh
bHVlRm91bmQgPSBmYWxzZTsKKyAgICBTdHJpbmcgb3B0X2luX3ByaW50Q29sb3IgPSBtX2JhY2tl
bmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgInByaW50Q29sb3IiX3Ms
ICZvcHRfaW5fcHJpbnRDb2xvcl92YWx1ZUZvdW5kKTsKKyAgICBpZiAobV9iYWNrZW5kRGlzcGF0
Y2hlci0+aGFzUHJvdG9jb2xFcnJvcnMoKSkgeworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCAi
U29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICdEYXRhYmFzZS5leGVjdXRlQWxsT3B0aW9uYWxQYXJh
bWV0ZXJzJyBjYW4ndCBiZSBwcm9jZXNzZWQiX3MpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisgICAgaWYgKG1f
YWx0ZXJuYXRlRGlzcGF0Y2hlcikgeworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmV4
ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMocmVxdWVzdElkLCBvcHRfaW5fY29sdW1uTmFtZXNf
dmFsdWVGb3VuZCA/IG9wdF9pbl9jb2x1bW5OYW1lcy5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9u
b3Rlc192YWx1ZUZvdW5kID8gJm9wdF9pbl9ub3RlcyA6IG51bGxwdHIsIG9wdF9pbl90aW1lc3Rh
bXBfdmFsdWVGb3VuZCA/ICZvcHRfaW5fdGltZXN0YW1wIDogbnVsbHB0ciwgb3B0X2luX3ZhbHVl
c192YWx1ZUZvdW5kID8gb3B0X2luX3ZhbHVlcy5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9wYXls
b2FkX3ZhbHVlRm91bmQgPyBvcHRfaW5fcGF5bG9hZC5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9k
YXRhYmFzZUlkX3ZhbHVlRm91bmQgPyAmb3B0X2luX2RhdGFiYXNlSWQgOiBudWxscHRyLCBvcHRf
aW5fc3FsRXJyb3JfdmFsdWVGb3VuZCA/IG9wdF9pbl9zcWxFcnJvci5nZXQoKSA6IG51bGxwdHIs
IG9wdF9pbl9zY3JlZW5Db2xvcl92YWx1ZUZvdW5kID8gJm9wdF9pbl9zY3JlZW5Db2xvciA6IG51
bGxwdHIsIG9wdF9pbl9hbHRlcm5hdGVDb2xvcnNfdmFsdWVGb3VuZCA/IG9wdF9pbl9hbHRlcm5h
dGVDb2xvcnMuZ2V0KCkgOiBudWxscHRyLCBvcHRfaW5fcHJpbnRDb2xvcl92YWx1ZUZvdW5kID8g
Jm9wdF9pbl9wcmludENvbG9yIDogbnVsbHB0cik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisj
ZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyAgICBF
cnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IG91dF9j
b2x1bW5OYW1lczsKKyAgICBPcHRpb25hbDxTdHJpbmc+IG91dF9ub3RlczsKKyAgICBPcHRpb25h
bDxkb3VibGU+IG91dF90aW1lc3RhbXA7CisgICAgT3B0aW9uYWw8SlNPTjo6T2JqZWN0PiBvdXRf
dmFsdWVzOworICAgIE9wdGlvbmFsPEpTT046OlZhbHVlPiBvdXRfcGF5bG9hZDsKKyAgICBPcHRp
b25hbDxpbnQ+IG91dF9kYXRhYmFzZUlkOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpEYXRhYmFzZTo6RXJyb3I+IG91dF9zcWxFcnJvcjsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyBvdXRfc2NyZWVuQ29sb3I7CisgICAgUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IG91dF9hbHRlcm5hdGVDb2xv
cnM7CisgICAgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3Igb3V0
X3ByaW50Q29sb3I7CisgICAgbV9hZ2VudC0+ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhl
cnJvciwgb3B0X2luX2NvbHVtbk5hbWVzX3ZhbHVlRm91bmQgPyBvcHRfaW5fY29sdW1uTmFtZXMu
Z2V0KCkgOiBudWxscHRyLCBvcHRfaW5fbm90ZXNfdmFsdWVGb3VuZCA/ICZvcHRfaW5fbm90ZXMg
OiBudWxscHRyLCBvcHRfaW5fdGltZXN0YW1wX3ZhbHVlRm91bmQgPyAmb3B0X2luX3RpbWVzdGFt
cCA6IG51bGxwdHIsIG9wdF9pbl92YWx1ZXNfdmFsdWVGb3VuZCA/IG9wdF9pbl92YWx1ZXMuZ2V0
KCkgOiBudWxscHRyLCBvcHRfaW5fcGF5bG9hZF92YWx1ZUZvdW5kID8gb3B0X2luX3BheWxvYWQu
Z2V0KCkgOiBudWxscHRyLCBvcHRfaW5fZGF0YWJhc2VJZF92YWx1ZUZvdW5kID8gJm9wdF9pbl9k
YXRhYmFzZUlkIDogbnVsbHB0ciwgb3B0X2luX3NxbEVycm9yX3ZhbHVlRm91bmQgPyBvcHRfaW5f
c3FsRXJyb3IuZ2V0KCkgOiBudWxscHRyLCBvcHRfaW5fc2NyZWVuQ29sb3JfdmFsdWVGb3VuZCA/
ICZvcHRfaW5fc2NyZWVuQ29sb3IgOiBudWxscHRyLCBvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzX3Zh
bHVlRm91bmQgPyBvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzLmdldCgpIDogbnVsbHB0ciwgb3B0X2lu
X3ByaW50Q29sb3JfdmFsdWVGb3VuZCA/ICZvcHRfaW5fcHJpbnRDb2xvciA6IG51bGxwdHIsIG91
dF9jb2x1bW5OYW1lcywgb3V0X25vdGVzLCBvdXRfdGltZXN0YW1wLCBvdXRfdmFsdWVzLCBvdXRf
cGF5bG9hZCwgb3V0X2RhdGFiYXNlSWQsIG91dF9zcWxFcnJvciwgb3V0X3NjcmVlbkNvbG9yLCBv
dXRfYWx0ZXJuYXRlQ29sb3JzLCBvdXRfcHJpbnRDb2xvcik7CisKKyAgICBpZiAoIWVycm9yLmxl
bmd0aCgpKSB7CisgICAgICAgIGlmIChvdXRfY29sdW1uTmFtZXMpCisgICAgICAgICAgICByZXN1
bHQtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgb3V0X2NvbHVtbk5hbWVzKTsKKyAgICAgICAg
aWYgKG91dF9ub3Rlcy5oYXNWYWx1ZSgpKQorICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmco
Im5vdGVzIl9zLCAqb3V0X25vdGVzKTsKKyAgICAgICAgaWYgKG91dF90aW1lc3RhbXAuaGFzVmFs
dWUoKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICpvdXRf
dGltZXN0YW1wKTsKKyAgICAgICAgaWYgKG91dF92YWx1ZXMuaGFzVmFsdWUoKSkKKyAgICAgICAg
ICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsICpvdXRfdmFsdWVzKTsKKyAgICAgICAg
aWYgKG91dF9wYXlsb2FkLmhhc1ZhbHVlKCkpCisgICAgICAgICAgICByZXN1bHQtPnNldFZhbHVl
KCJwYXlsb2FkIl9zLCAqb3V0X3BheWxvYWQpOworICAgICAgICBpZiAob3V0X2RhdGFiYXNlSWQu
aGFzVmFsdWUoKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJf
cywgKm91dF9kYXRhYmFzZUlkKTsKKyAgICAgICAgaWYgKG91dF9zcWxFcnJvcikKKyAgICAgICAg
ICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgb3V0X3NxbEVycm9yKTsKKyAgICAg
ICAgaWYgKG91dF9zY3JlZW5Db2xvci5oYXNWYWx1ZSgpKQorICAgICAgICAgICAgcmVzdWx0LT5z
ZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCAqb3V0X3NjcmVlbkNvbG9yKTsKKyAgICAgICAgaWYg
KG91dF9hbHRlcm5hdGVDb2xvcnMpCisgICAgICAgICAgICByZXN1bHQtPnNldEFycmF5KCJhbHRl
cm5hdGVDb2xvcnMiX3MsIG91dF9hbHRlcm5hdGVDb2xvcnMpOworICAgICAgICBpZiAob3V0X3By
aW50Q29sb3IuaGFzVmFsdWUoKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJwcmlu
dENvbG9yIl9zLCAqb3V0X3ByaW50Q29sb3IpOworICAgIH0KKyAgICBpZiAoIWVycm9yLmxlbmd0
aCgpKQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElk
LCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVy
cm9yLCBXVEZNb3ZlKGVycm9yKSk7Cit9CisKK3ZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
cjo6ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpCit7CisgICAgUmVmUHRyPEpTT046OkFycmF5PiBpbl9j
b2x1bW5OYW1lcyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEFycmF5KHBhcmFtZXRlcnMuZ2V0
KCksICJjb2x1bW5OYW1lcyJfcywgbnVsbHB0cik7CisgICAgU3RyaW5nIGluX25vdGVzID0gbV9i
YWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksICJub3RlcyJfcywg
bnVsbHB0cik7CisgICAgZG91YmxlIGluX3RpbWVzdGFtcCA9IG1fYmFja2VuZERpc3BhdGNoZXIt
PmdldERvdWJsZShwYXJhbWV0ZXJzLmdldCgpLCAidGltZXN0YW1wIl9zLCBudWxscHRyKTsKKyAg
ICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBpbl92YWx1ZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5n
ZXRPYmplY3QocGFyYW1ldGVycy5nZXQoKSwgInZhbHVlcyJfcywgbnVsbHB0cik7CisgICAgUmVm
UHRyPEpTT046OlZhbHVlPiBpbl9wYXlsb2FkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0VmFs
dWUocGFyYW1ldGVycy5nZXQoKSwgInBheWxvYWQiX3MsIG51bGxwdHIpOworICAgIGludCBpbl9k
YXRhYmFzZUlkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0SW50ZWdlcihwYXJhbWV0ZXJzLmdl
dCgpLCAiZGF0YWJhc2VJZCJfcywgbnVsbHB0cik7CisgICAgUmVmUHRyPEpTT046Ok9iamVjdD4g
aW5fc3FsRXJyb3IgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRPYmplY3QocGFyYW1ldGVycy5n
ZXQoKSwgInNxbEVycm9yIl9zLCBudWxscHRyKTsKKyAgICBTdHJpbmcgaW5fc2NyZWVuQ29sb3Ig
PSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgInNjcmVl
bkNvbG9yIl9zLCBudWxscHRyKTsKKyAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGluX2FsdGVybmF0
ZUNvbG9ycyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEFycmF5KHBhcmFtZXRlcnMuZ2V0KCks
ICJhbHRlcm5hdGVDb2xvcnMiX3MsIG51bGxwdHIpOworICAgIFN0cmluZyBpbl9wcmludENvbG9y
ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksICJwcmlu
dENvbG9yIl9zLCBudWxscHRyKTsKKyAgICBpZiAobV9iYWNrZW5kRGlzcGF0Y2hlci0+aGFzUHJv
dG9jb2xFcnJvcnMoKSkgeworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90
b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCAiU29tZSBhcmd1bWVu
dHMgb2YgbWV0aG9kICdEYXRhYmFzZS5leGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMnIGNhbid0
IGJlIHByb2Nlc3NlZCJfcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNpZiBFTkFCTEUo
SU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyAgICBpZiAobV9hbHRlcm5hdGVEaXNw
YXRjaGVyKSB7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZU5vT3B0aW9u
YWxQYXJhbWV0ZXJzKHJlcXVlc3RJZCwgKmluX2NvbHVtbk5hbWVzLCBpbl9ub3RlcywgaW5fdGlt
ZXN0YW1wLCAqaW5fdmFsdWVzLCAqaW5fcGF5bG9hZCwgaW5fZGF0YWJhc2VJZCwgKmluX3NxbEVy
cm9yLCBpbl9zY3JlZW5Db2xvciwgKmluX2FsdGVybmF0ZUNvbG9ycywgaW5fcHJpbnRDb2xvcik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCisKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWY8SlNP
Tjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxK
U09OOjpBcnJheU9mPFN0cmluZz4+IG91dF9jb2x1bW5OYW1lczsKKyAgICBTdHJpbmcgb3V0X25v
dGVzOworICAgIGRvdWJsZSBvdXRfdGltZXN0YW1wOworICAgIEpTT046Ok9iamVjdCBvdXRfdmFs
dWVzOworICAgIEpTT046OlZhbHVlIG91dF9wYXlsb2FkOworICAgIGludCBvdXRfZGF0YWJhc2VJ
ZDsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBvdXRf
c3FsRXJyb3I7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xv
cnMgb3V0X3NjcmVlbkNvbG9yOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6Q29sb3JMaXN0PiBvdXRfYWx0ZXJuYXRlQ29sb3JzOworICAgIERhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yIG91dF9wcmludENvbG9yOworICAgIG1fYWdl
bnQtPmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhlcnJvciwgKmluX2NvbHVtbk5hbWVzLCBp
bl9ub3RlcywgaW5fdGltZXN0YW1wLCAqaW5fdmFsdWVzLCAqaW5fcGF5bG9hZCwgaW5fZGF0YWJh
c2VJZCwgKmluX3NxbEVycm9yLCBpbl9zY3JlZW5Db2xvciwgKmluX2FsdGVybmF0ZUNvbG9ycywg
aW5fcHJpbnRDb2xvciwgb3V0X2NvbHVtbk5hbWVzLCAmb3V0X25vdGVzLCAmb3V0X3RpbWVzdGFt
cCwgb3V0X3ZhbHVlcywgJm91dF9wYXlsb2FkLCAmb3V0X2RhdGFiYXNlSWQsIG91dF9zcWxFcnJv
ciwgJm91dF9zY3JlZW5Db2xvciwgb3V0X2FsdGVybmF0ZUNvbG9ycywgJm91dF9wcmludENvbG9y
KTsKKworICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIHsKKyAgICAgICAgcmVzdWx0LT5zZXRBcnJh
eSgiY29sdW1uTmFtZXMiX3MsIG91dF9jb2x1bW5OYW1lcyk7CisgICAgICAgIHJlc3VsdC0+c2V0
U3RyaW5nKCJub3RlcyJfcywgb3V0X25vdGVzKTsKKyAgICAgICAgcmVzdWx0LT5zZXREb3VibGUo
InRpbWVzdGFtcCJfcywgb3V0X3RpbWVzdGFtcCk7CisgICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0
KCJ2YWx1ZXMiX3MsIG91dF92YWx1ZXMpOworICAgICAgICByZXN1bHQtPnNldFZhbHVlKCJwYXls
b2FkIl9zLCBvdXRfcGF5bG9hZCk7CisgICAgICAgIHJlc3VsdC0+c2V0SW50ZWdlcigiZGF0YWJh
c2VJZCJfcywgb3V0X2RhdGFiYXNlSWQpOworICAgICAgICByZXN1bHQtPnNldE9iamVjdCgic3Fs
RXJyb3IiX3MsIG91dF9zcWxFcnJvcik7CisgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJzY3Jl
ZW5Db2xvciJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25z
dGFudFZhbHVlKG91dF9zY3JlZW5Db2xvcikpOworICAgICAgICByZXN1bHQtPnNldEFycmF5KCJh
bHRlcm5hdGVDb2xvcnMiX3MsIG91dF9hbHRlcm5hdGVDb2xvcnMpOworICAgICAgICByZXN1bHQt
PnNldFN0cmluZygicHJpbnRDb2xvciJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBl
cnM6OmdldEVudW1Db25zdGFudFZhbHVlKG91dF9wcmludENvbG9yKSk7CisgICAgfQorICAgIGlm
ICghZXJyb3IubGVuZ3RoKCkpCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNw
b25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOworICAgIGVsc2UKKyAgICAg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0
Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKwor
IyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBh
cmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNs
dWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgor
CituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgRnJvbnRlbmRSb3V0ZXI7CisKK30gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVy
cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwt
cmV0dXJuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlz
cGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5k
Um91dGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5z
cGVjdG9yIHsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVz
dEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xP
YmplY3RzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRo
LW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0
aW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK25hbWVzcGFjZSBQcm90b2Nv
bCB7CisKKworCisvLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KK25hbWVzcGFjZSBEYXRhYmFzZSB7
CitjbGFzcyBFcnJvcjsKK2VudW0gY2xhc3MgUHJpbWFyeUNvbG9yczsKK30gLy8gRGF0YWJhc2UK
Ky8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KKworCisvLyBUeXBlZGVmcy4KK25hbWVz
cGFjZSBEYXRhYmFzZSB7CisvKiBVbmlxdWUgaWRlbnRpZmllciBvZiBEYXRhYmFzZSBvYmplY3Qu
ICovCit0eXBlZGVmIGludCBEYXRhYmFzZUlkOwordHlwZWRlZiBKU09OOjpBcnJheU9mPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiBDb2xvckxpc3Q7Cit9IC8v
IERhdGFiYXNlCisvLyBFbmQgb2YgdHlwZWRlZnMuCisKK25hbWVzcGFjZSBUZXN0SGVscGVycyB7
CisKK1N0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSk7CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IFN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkKK3sKKyAg
ICByZXR1cm4gZ2V0RW51bUNvbnN0YW50VmFsdWUoc3RhdGljX2Nhc3Q8aW50PihlbnVtVmFsdWUp
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKKworbmFtZXNwYWNlIERhdGFiYXNl
IHsKKy8qICAqLworZW51bSBjbGFzcyBQcmltYXJ5Q29sb3JzIHsKKyAgICBSZWQgPSAwLAorICAg
IEdyZWVuID0gMSwKKyAgICBCbHVlID0gMiwKK307IC8vIGVudW0gY2xhc3MgUHJpbWFyeUNvbG9y
cworLyogRGF0YWJhc2UgZXJyb3IuICovCitjbGFzcyBFcnJvciA6IHB1YmxpYyBKU09OOjpPYmpl
Y3RCYXNlIHsKK3B1YmxpYzoKKyAgICBlbnVtIHsKKyAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAor
ICAgICAgICBNZXNzYWdlU2V0ID0gMSA8PCAwLAorICAgICAgICBDb2RlU2V0ID0gMSA8PCAxLAor
ICAgICAgICBBbGxGaWVsZHNTZXQgPSAoTWVzc2FnZVNldCB8IENvZGVTZXQpCisgICAgfTsKKwor
ICAgIHRlbXBsYXRlPGludCBTVEFURT4KKyAgICBjbGFzcyBCdWlsZGVyIHsKKyAgICBwcml2YXRl
OgorICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBtX3Jlc3VsdDsKKworICAgICAgICB0ZW1w
bGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8
IFNURVA+Kj4odGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyKFJlZjwvKkVycm9y
Ki9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQorICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3Zl
KG9iamVjdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09
IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAgICAg
ICB9CisgICAgICAgIGZyaWVuZCBjbGFzcyBFcnJvcjsKKyAgICBwdWJsaWM6CisKKyAgICAgICAg
QnVpbGRlcjxTVEFURSB8IE1lc3NhZ2VTZXQ+JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYgdmFs
dWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNZXNz
YWdlU2V0KSwgcHJvcGVydHlfbWVzc2FnZV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0U3RyaW5nKCJtZXNzYWdlIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPE1lc3NhZ2VTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgQ29kZVNldD4mIHNldENvZGUoaW50IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29kZVNldCksIHByb3BlcnR5X2NvZGVfYWxyZWFk
eV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldEludGVnZXIoImNvZGUiX3MsIHZhbHVl
KTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29kZVNldD4oKTsKKyAgICAgICAgfQor
CisgICAgICAgIFJlZjxFcnJvcj4gcmVsZWFzZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7
CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoRXJyb3IpID09IHNpemVvZihKU09O
OjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7CisKKyAgICAgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+
IGpzb25SZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOworICAgICAgICAgICAgYXV0
byByZXN1bHQgPSBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxFcnJvcj4qPigmanNvblJl
c3VsdCkpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgIH07CisK
KyAgICAvKgorICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKKyAgICAgKiBSZWY8RXJyb3I+
IHJlc3VsdCA9IEVycm9yOjpjcmVhdGUoKQorICAgICAqICAgICAuc2V0TWVzc2FnZSguLi4pCisg
ICAgICogICAgIC5zZXRDb2RlKC4uLikKKyAgICAgKiAgICAgLnJlbGVhc2UoKTsKKyAgICAgKi8K
KyAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAg
IHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKKyAg
ICB9Cit9OworCit9IC8vIERhdGFiYXNlCisKKworCituYW1lc3BhY2UgVGVzdEhlbHBlcnMgewor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBQcm90b2NvbEVudW1UeXBlPgorT3B0aW9uYWw8UHJvdG9jb2xF
bnVtVHlwZT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYpOworCisvLyBF
bnVtcyBpbiB0aGUgJ0RhdGFiYXNlJyBEb21haW4KK3RlbXBsYXRlPD4KK09wdGlvbmFsPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiBwYXJzZUVudW1WYWx1ZUZy
b21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+KGNv
bnN0IFN0cmluZyYpOworCit9IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycworCit9IC8vIG5hbWVz
cGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworbmFtZXNwYWNlIFdU
RiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKKworLy8gSGFz
aCBkZWNsYXJhdGlvbnMgaW4gdGhlICdEYXRhYmFzZScgRG9tYWluCit0ZW1wbGF0ZTw+CitzdHJ1
Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xv
cnM+IHsKKyAgICB0eXBlZGVmIEludEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6
OlByaW1hcnlDb2xvcnM+IEhhc2g7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKyMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xPYmplY3RzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRz
LXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Igewor
CituYW1lc3BhY2UgUHJvdG9jb2wgeworCituYW1lc3BhY2UgVGVzdEhlbHBlcnMgeworCitzdGF0
aWMgY29uc3QgY2hhciogY29uc3QgZW51bV9jb25zdGFudF92YWx1ZXNbXSA9IHsKKyAgICAicmVk
IiwKKyAgICAiZ3JlZW4iLAorICAgICJibHVlIiwKKyAgICAiY3lhbiIsCisgICAgIm1hZ2VudGEi
LAorICAgICJ5ZWxsb3ciLAorICAgICJibGFjayIsCit9OworCitTdHJpbmcgZ2V0RW51bUNvbnN0
YW50VmFsdWUoaW50IGNvZGUpIHsKKyAgICByZXR1cm4gZW51bV9jb25zdGFudF92YWx1ZXNbY29k
ZV07Cit9CisKKy8vIEVudW1zIGluIHRoZSAnRGF0YWJhc2UnIERvbWFpbgordGVtcGxhdGU8Pgor
T3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IHBh
cnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJp
bWFyeUNvbG9ycz4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKK3sKKyAgICBzdGF0aWMg
Y29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7CisgICAgICAgIChzaXplX3QpSW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM6OlJlZCwKKyAgICAgICAgKHNp
emVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9yczo6R3JlZW4s
CisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlD
b2xvcnM6OkJsdWUsCisgICAgfTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDM7ICsraSkK
KyAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0
YW50VmFsdWVzW2ldXSkKKyAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMpY29uc3RhbnRWYWx1ZXNbaV07CisKKyAgICByZXR1cm4g
V1RGOjpudWxsb3B0OworfQorCisKK30gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCisKKworCit9
IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Cisj
aW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCitAcHJvdG9jb2wgVGVzdFByb3RvY29sRGF0YWJh
c2VEb21haW5IYW5kbGVyOworCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCitjbGFzcyBPYmpD
SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5h
dGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKK3B1YmxpYzoKKyAgICBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihp
ZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0
ZSA9IGhhbmRsZXI7IH0KKyAgICB2b2lkIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9u
ZyByZXF1ZXN0SWQsIGNvbnN0IEpTT046OkFycmF5KiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3Ry
aW5nKiBpbl9ub3RlcywgY29uc3QgZG91YmxlKiBpbl90aW1lc3RhbXAsIGNvbnN0IEpTT046Ok9i
amVjdCogaW5fdmFsdWVzLCBjb25zdCBKU09OOjpWYWx1ZSogaW5fcGF5bG9hZCwgY29uc3QgaW50
KiBpbl9kYXRhYmFzZUlkLCBjb25zdCBKU09OOjpPYmplY3QqIGluX3NxbEVycm9yLCBjb25zdCBT
dHJpbmcqIGluX3NjcmVlbkNvbG9yLCBjb25zdCBKU09OOjpBcnJheSogaW5fYWx0ZXJuYXRlQ29s
b3JzLCBjb25zdCBTdHJpbmcqIGluX3ByaW50Q29sb3IpIGZpbmFsOworICAgIHZvaWQgZXhlY3V0
ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBjb25zdCBKU09OOjpBcnJheSYg
aW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgaW5fbm90ZXMsIGRvdWJsZSBpbl90aW1lc3Rh
bXAsIGNvbnN0IEpTT046Ok9iamVjdCYgaW5fdmFsdWVzLCBKU09OOjpWYWx1ZSBpbl9wYXlsb2Fk
LCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgSlNPTjo6T2JqZWN0JiBpbl9zcWxFcnJvciwgY29u
c3QgU3RyaW5nJiBpbl9zY3JlZW5Db2xvciwgY29uc3QgSlNPTjo6QXJyYXkmIGluX2FsdGVybmF0
ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBpbl9wcmludENvbG9yKSBmaW5hbDsKK3ByaXZhdGU6Cisg
ICAgUmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4+IG1fZGVs
ZWdhdGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29u
ZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zLmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKworbmFtZXNwYWNl
IEluc3BlY3RvciB7CisKK3ZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXI6OmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIGNvbnN0IEpT
T046OkFycmF5KiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nKiBpbl9ub3RlcywgY29uc3Qg
ZG91YmxlKiBpbl90aW1lc3RhbXAsIGNvbnN0IEpTT046Ok9iamVjdCogaW5fdmFsdWVzLCBjb25z
dCBKU09OOjpWYWx1ZSogaW5fcGF5bG9hZCwgY29uc3QgaW50KiBpbl9kYXRhYmFzZUlkLCBjb25z
dCBKU09OOjpPYmplY3QqIGluX3NxbEVycm9yLCBjb25zdCBTdHJpbmcqIGluX3NjcmVlbkNvbG9y
LCBjb25zdCBKU09OOjpBcnJheSogaW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcqIGlu
X3ByaW50Q29sb3IpCit7CisgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6
QHNlbGVjdG9yKGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNXaXRoRXJyb3JDYWxsYmFjazpz
dWNjZXNzQ2FsbGJhY2s6Y29sdW1uTmFtZXM6bm90ZXM6dGltZXN0YW1wOnZhbHVlczpwYXlsb2Fk
OmRhdGFiYXNlSWQ6c3FsRXJyb3I6c2NyZWVuQ29sb3I6YWx0ZXJuYXRlQ29sb3JzOnByaW50Q29s
b3I6KV0pIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJv
cihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEYXRhYmFz
ZS5leGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikg
eworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVl
c3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJh
Y2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgfTsKKworICAgIGlk
IHN1Y2Nlc3NDYWxsYmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiovICoqY29sdW1uTmFtZXMs
IE5TU3RyaW5nICoqbm90ZXMsIGRvdWJsZSAqdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmpl
Y3QgKip2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnBheWxvYWQsIGludCAqZGF0YWJh
c2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xE
YXRhYmFzZVByaW1hcnlDb2xvcnMgKnNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8g
KiphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFs
UGFyYW1ldGVyc1ByaW50Q29sb3IgKnByaW50Q29sb3IpIHsKKyAgICAgICAgUmVmPEpTT046Ok9i
amVjdD4gcmVzdWx0T2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKGNvbHVtbk5hbWVzLCBAImNv
bHVtbk5hbWVzIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BB
UkFNRVRFUihub3RlcywgQCJub3RlcyIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JB
RF9PUFRJT05BTF9QQVJBTUVURVIodmFsdWVzLCBAInZhbHVlcyIpOworICAgICAgICBUSFJPV19F
WENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIocGF5bG9hZCwgQCJwYXlsb2FkIik7
CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihzcWxF
cnJvciwgQCJzcWxFcnJvciIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJ
T05BTF9QQVJBTUVURVIoYWx0ZXJuYXRlQ29sb3JzLCBAImFsdGVybmF0ZUNvbG9ycyIpOworICAg
ICAgICBpZiAoY29sdW1uTmFtZXMpCisgICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5
KCJjb2x1bW5OYW1lcyJfcywgdG9KU09OU3RyaW5nQXJyYXkoKmNvbHVtbk5hbWVzKSk7CisgICAg
ICAgIGlmIChub3RlcykKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJub3Rl
cyJfcywgKm5vdGVzKTsKKyAgICAgICAgaWYgKHRpbWVzdGFtcCkKKyAgICAgICAgICAgIHJlc3Vs
dE9iamVjdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICp0aW1lc3RhbXApOworICAgICAgICBp
ZiAodmFsdWVzKQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInZhbHVlcyJf
cywgWyp2YWx1ZXMgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIGlmIChwYXlsb2FkKQorICAgICAg
ICAgICAgcmVzdWx0T2JqZWN0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgWypwYXlsb2FkIHRvSlNP
Tk9iamVjdF0pOworICAgICAgICBpZiAoZGF0YWJhc2VJZCkKKyAgICAgICAgICAgIHJlc3VsdE9i
amVjdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgKmRhdGFiYXNlSWQpOworICAgICAgICBp
ZiAoc3FsRXJyb3IpCisgICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdCgic3FsRXJy
b3IiX3MsIFsqc3FsRXJyb3IgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIGlmIChzY3JlZW5Db2xv
cikKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywg
dG9Qcm90b2NvbFN0cmluZygqc2NyZWVuQ29sb3IpKTsKKyAgICAgICAgaWYgKGFsdGVybmF0ZUNv
bG9ycykKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9y
cyJfcywgdG9KU09OU3RyaW5nQXJyYXkoKmFsdGVybmF0ZUNvbG9ycykpOworICAgICAgICBpZiAo
cHJpbnRDb2xvcikKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJwcmludENv
bG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKCpwcmludENvbG9yKSk7CisgICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0T2JqZWN0
KSwgZmFsc2UpOworICAgIH07CisKKyAgICBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKm9faW5fY29s
dW1uTmFtZXM7CisgICAgaWYgKGluX2NvbHVtbk5hbWVzKQorICAgICAgICBvX2luX2NvbHVtbk5h
bWVzID0gdG9PYmpDU3RyaW5nQXJyYXkoaW5fY29sdW1uTmFtZXMpOworICAgIE5TU3RyaW5nICpv
X2luX25vdGVzOworICAgIGlmIChpbl9ub3RlcykKKyAgICAgICAgb19pbl9ub3RlcyA9ICppbl9u
b3RlczsKKyAgICBkb3VibGUgb19pbl90aW1lc3RhbXA7CisgICAgaWYgKGluX3RpbWVzdGFtcCkK
KyAgICAgICAgb19pbl90aW1lc3RhbXAgPSAqaW5fdGltZXN0YW1wOworICAgIFJXSVByb3RvY29s
SlNPTk9iamVjdCAqb19pbl92YWx1ZXM7CisgICAgaWYgKGluX3ZhbHVlcykKKyAgICAgICAgb19p
bl92YWx1ZXMgPSBbW1tSV0lQcm90b2NvbEpTT05PYmplY3QgYWxsb2NdIGluaXRXaXRoSlNPTk9i
amVjdDppbl92YWx1ZXNdIGF1dG9yZWxlYXNlXTsKKyAgICBSV0lQcm90b2NvbEpTT05PYmplY3Qg
Km9faW5fcGF5bG9hZDsKKyAgICBpZiAoaW5fcGF5bG9hZCkKKyAgICAgICAgb19pbl9wYXlsb2Fk
ID0gW1tbUldJUHJvdG9jb2xKU09OT2JqZWN0IGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6aW5f
cGF5bG9hZF0gYXV0b3JlbGVhc2VdOworICAgIGludCBvX2luX2RhdGFiYXNlSWQ7CisgICAgaWYg
KGluX2RhdGFiYXNlSWQpCisgICAgICAgIG9faW5fZGF0YWJhc2VJZCA9ICppbl9kYXRhYmFzZUlk
OworICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKm9faW5fc3FsRXJyb3I7CisgICAgaWYg
KGluX3NxbEVycm9yKQorICAgICAgICBvX2luX3NxbEVycm9yID0gW1tbVGVzdFByb3RvY29sRGF0
YWJhc2VFcnJvciBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0OmluX3NxbEVycm9yXSBhdXRvcmVs
ZWFzZV07CisgICAgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzPiBv
X2luX3NjcmVlbkNvbG9yOworICAgIGlmIChpbl9zY3JlZW5Db2xvcikKKyAgICAgICAgb19pbl9z
Y3JlZW5Db2xvciA9IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1h
cnlDb2xvcnM+KCppbl9zY3JlZW5Db2xvcik7CisgICAgTlNBcnJheS8qPE5TU3RyaW5nPiovICpv
X2luX2FsdGVybmF0ZUNvbG9yczsKKyAgICBpZiAoaW5fYWx0ZXJuYXRlQ29sb3JzKQorICAgICAg
ICBvX2luX2FsdGVybmF0ZUNvbG9ycyA9IHRvT2JqQ1N0cmluZ0FycmF5KGluX2FsdGVybmF0ZUNv
bG9ycyk7CisgICAgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9u
YWxQYXJhbWV0ZXJzUHJpbnRDb2xvcj4gb19pbl9wcmludENvbG9yOworICAgIGlmIChpbl9wcmlu
dENvbG9yKQorICAgICAgICBvX2luX3ByaW50Q29sb3IgPSBmcm9tUHJvdG9jb2xTdHJpbmc8VGVz
dFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvcj4o
KmluX3ByaW50Q29sb3IpOworCisgICAgW21fZGVsZWdhdGUgZXhlY3V0ZUFsbE9wdGlvbmFsUGFy
YW1ldGVyc1dpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1
Y2Nlc3NDYWxsYmFjayBjb2x1bW5OYW1lczooaW5fY29sdW1uTmFtZXMgPyAmb19pbl9jb2x1bW5O
YW1lcyA6IG5pbCkgbm90ZXM6KGluX25vdGVzID8gJm9faW5fbm90ZXMgOiBuaWwpIHRpbWVzdGFt
cDooaW5fdGltZXN0YW1wID8gJm9faW5fdGltZXN0YW1wIDogbmlsKSB2YWx1ZXM6KGluX3ZhbHVl
cyA/ICZvX2luX3ZhbHVlcyA6IG5pbCkgcGF5bG9hZDooaW5fcGF5bG9hZCA/ICZvX2luX3BheWxv
YWQgOiBuaWwpIGRhdGFiYXNlSWQ6KGluX2RhdGFiYXNlSWQgPyAmb19pbl9kYXRhYmFzZUlkIDog
bmlsKSBzcWxFcnJvcjooaW5fc3FsRXJyb3IgPyAmb19pbl9zcWxFcnJvciA6IG5pbCkgc2NyZWVu
Q29sb3I6KGluX3NjcmVlbkNvbG9yID8gJm9faW5fc2NyZWVuQ29sb3IudmFsdWUoKSA6IG5pbCkg
YWx0ZXJuYXRlQ29sb3JzOihpbl9hbHRlcm5hdGVDb2xvcnMgPyAmb19pbl9hbHRlcm5hdGVDb2xv
cnMgOiBuaWwpIHByaW50Q29sb3I6KGluX3ByaW50Q29sb3IgPyAmb19pbl9wcmludENvbG9yLnZh
bHVlKCkgOiBuaWwpXTsKK30KKwordm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlcjo6ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBjb25z
dCBKU09OOjpBcnJheSYgaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgaW5fbm90ZXMsIGRv
dWJsZSBpbl90aW1lc3RhbXAsIGNvbnN0IEpTT046Ok9iamVjdCYgaW5fdmFsdWVzLCBKU09OOjpW
YWx1ZSBpbl9wYXlsb2FkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgSlNPTjo6T2JqZWN0JiBp
bl9zcWxFcnJvciwgY29uc3QgU3RyaW5nJiBpbl9zY3JlZW5Db2xvciwgY29uc3QgSlNPTjo6QXJy
YXkmIGluX2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBpbl9wcmludENvbG9yKQorewor
ICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihleGVjdXRl
Tm9PcHRpb25hbFBhcmFtZXRlcnNXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6Y29s
dW1uTmFtZXM6bm90ZXM6dGltZXN0YW1wOnZhbHVlczpwYXlsb2FkOmRhdGFiYXNlSWQ6c3FsRXJy
b3I6c2NyZWVuQ29sb3I6YWx0ZXJuYXRlQ29sb3JzOnByaW50Q29sb3I6KV0pIHsKKyAgICAgICAg
YmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tl
bmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS5leGVjdXRlTm9PcHRpb25h
bFBhcmFtZXRlcnMnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7CisgICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0
Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICB9OworCisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0g
XihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqbm90ZXMsIGRv
dWJsZSB0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqdmFsdWVzLCBSV0lQcm90b2Nv
bEpTT05PYmplY3QgKnBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFz
ZUVycm9yICpzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzIHNjcmVl
bkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3Rv
Y29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yIHByaW50Q29s
b3IpIHsKKyAgICAgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJB
TUVURVIoY29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIobm90ZXMsIEAibm90ZXMiKTsKKyAgICAgICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIodmFsdWVzLCBAInZhbHVlcyIpOwor
ICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihwYXlsb2FkLCBA
InBheWxvYWQiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVU
RVIoc3FsRXJyb3IsIEAic3FsRXJyb3IiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9S
RVFVSVJFRF9QQVJBTUVURVIoYWx0ZXJuYXRlQ29sb3JzLCBAImFsdGVybmF0ZUNvbG9ycyIpOwor
ICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgdG9KU09OU3Ry
aW5nQXJyYXkoY29sdW1uTmFtZXMpKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmco
Im5vdGVzIl9zLCBub3Rlcyk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0RG91YmxlKCJ0aW1l
c3RhbXAiX3MsIHRpbWVzdGFtcCk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KCJ2
YWx1ZXMiX3MsIFt2YWx1ZXMgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+
c2V0VmFsdWUoInBheWxvYWQiX3MsIFtwYXlsb2FkIHRvSlNPTk9iamVjdF0pOworICAgICAgICBy
ZXN1bHRPYmplY3QtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsIGRhdGFiYXNlSWQpOworICAg
ICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIFtzcWxFcnJvciB0b0pT
T05PYmplY3RdKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9y
Il9zLCB0b1Byb3RvY29sU3RyaW5nKHNjcmVlbkNvbG9yKSk7CisgICAgICAgIHJlc3VsdE9iamVj
dC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5nQXJyYXkoYWx0ZXJu
YXRlQ29sb3JzKSk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJwcmludENvbG9y
Il9zLCB0b1Byb3RvY29sU3RyaW5nKHByaW50Q29sb3IpKTsKKyAgICAgICAgYmFja2VuZERpc3Bh
dGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHRPYmplY3QpLCBm
YWxzZSk7CisgICAgfTsKKworICAgIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqb19pbl9jb2x1bW5O
YW1lcyA9IHRvT2JqQ1N0cmluZ0FycmF5KCZpbl9jb2x1bW5OYW1lcyk7CisgICAgTlNTdHJpbmcg
Km9faW5fbm90ZXMgPSBpbl9ub3RlczsKKyAgICBkb3VibGUgb19pbl90aW1lc3RhbXAgPSBpbl90
aW1lc3RhbXA7CisgICAgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvX2luX3ZhbHVlcyA9IFtbW1JX
SVByb3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0OiZpbl92YWx1ZXNd
IGF1dG9yZWxlYXNlXTsKKyAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9faW5fcGF5bG9hZCA9
IFtbW1JXSVByb3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0OiZpbl9w
YXlsb2FkXSBhdXRvcmVsZWFzZV07CisgICAgaW50IG9faW5fZGF0YWJhc2VJZCA9IGluX2RhdGFi
YXNlSWQ7CisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqb19pbl9zcWxFcnJvciA9IFtb
W1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDomaW5f
c3FsRXJyb3JdIGF1dG9yZWxlYXNlXTsKKyAgICBPcHRpb25hbDxUZXN0UHJvdG9jb2xEYXRhYmFz
ZVByaW1hcnlDb2xvcnM+IG9faW5fc2NyZWVuQ29sb3IgPSBmcm9tUHJvdG9jb2xTdHJpbmc8VGVz
dFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzPihpbl9zY3JlZW5Db2xvcik7CisgICAgaWYg
KCFvX2luX3NjcmVlbkNvbG9yKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9y
dFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsICJQYXJhbWV0
ZXIgJ3NjcmVlbkNvbG9yJyBvZiBtZXRob2QgJ0RhdGFiYXNlLmV4ZWN1dGVOb09wdGlvbmFsUGFy
YW1ldGVycycgY2Fubm90IGJlIHByb2Nlc3NlZCJfcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgTlNBcnJheS8qPE5TU3RyaW5nPiovICpvX2luX2FsdGVybmF0ZUNvbG9ycyA9IHRvT2Jq
Q1N0cmluZ0FycmF5KCZpbl9hbHRlcm5hdGVDb2xvcnMpOworICAgIE9wdGlvbmFsPFRlc3RQcm90
b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvcj4gb19pbl9w
cmludENvbG9yID0gZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0
ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvcj4oaW5fcHJpbnRDb2xvcik7CisgICAgaWYg
KCFvX2luX3ByaW50Q29sb3IpIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0
UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgIlBhcmFtZXRl
ciAncHJpbnRDb2xvcicgb2YgbWV0aG9kICdEYXRhYmFzZS5leGVjdXRlTm9PcHRpb25hbFBhcmFt
ZXRlcnMnIGNhbm5vdCBiZSBwcm9jZXNzZWQiX3MpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgW21fZGVsZWdhdGUgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzV2l0aEVycm9yQ2Fs
bGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrIGNvbHVt
bk5hbWVzOm9faW5fY29sdW1uTmFtZXMgbm90ZXM6b19pbl9ub3RlcyB0aW1lc3RhbXA6b19pbl90
aW1lc3RhbXAgdmFsdWVzOm9faW5fdmFsdWVzIHBheWxvYWQ6b19pbl9wYXlsb2FkIGRhdGFiYXNl
SWQ6b19pbl9kYXRhYmFzZUlkIHNxbEVycm9yOm9faW5fc3FsRXJyb3Igc2NyZWVuQ29sb3I6b19p
bl9zY3JlZW5Db2xvci52YWx1ZSgpIGFsdGVybmF0ZUNvbG9yczpvX2luX2FsdGVybmF0ZUNvbG9y
cyBwcmludENvbG9yOm9faW5fcHJpbnRDb2xvci52YWx1ZSgpXTsKK30KKworCit9IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0
Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwt
Y2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KKwor
X19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAorQHByb3BlcnR5IChub25hdG9taWMsIHJl
dGFpbiwgc2V0dGVyPXNldERhdGFiYXNlSGFuZGxlcjopIGlkPFRlc3RQcm90b2NvbERhdGFiYXNl
RG9tYWluSGFuZGxlcj4gZGF0YWJhc2VIYW5kbGVyOworQGVuZAorCisKKyMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xDb25maWd1cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29t
bWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbi5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2lt
cG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisjaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgorI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgorCit1c2luZyBu
YW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xs
ZXI7CisgICAgaWQ8VGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyPiBfZGF0YWJhc2VI
YW5kbGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50
YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVy
IGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQo
Y29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVybiBz
ZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbX2RhdGFiYXNlSGFuZGxlciByZWxl
YXNlXTsKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0gKHZvaWQpc2V0RGF0YWJhc2VIYW5k
bGVyOihpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+KWhhbmRsZXIKK3sKKyAg
ICBpZiAoaGFuZGxlciA9PSBfZGF0YWJhc2VIYW5kbGVyKQorICAgICAgICByZXR1cm47CisKKyAg
ICBbX2RhdGFiYXNlSGFuZGxlciByZWxlYXNlXTsKKyAgICBfZGF0YWJhc2VIYW5kbGVyID0gW2hh
bmRsZXIgcmV0YWluXTsKKworICAgIGF1dG8gYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IG1ha2VVbmlx
dWU8T2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+KGhhbmRsZXIpOworICAg
IGF1dG8gYWx0ZXJuYXRlQWdlbnQgPSBtYWtlVW5pcXVlPEFsdGVybmF0ZURpc3BhdGNoYWJsZUFn
ZW50PERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIsIEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXI+PigiRGF0YWJhc2UiX3MsICpfY29udHJvbGxlciwgV1RGTW92ZShhbHRlcm5hdGVE
aXNwYXRjaGVyKSk7CisgICAgX2NvbnRyb2xsZXItPmFwcGVuZEV4dHJhQWdlbnQoV1RGTW92ZShh
bHRlcm5hdGVBZ2VudCkpOworfQorCistIChpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhh
bmRsZXI+KWRhdGFiYXNlSGFuZGxlcgoreworICAgIHJldHVybiBfZGF0YWJhc2VIYW5kbGVyOwor
fQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1t
CisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxs
LXJldHVybi1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAi
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5o
PgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisKKyMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
LmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlv
bmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKwor
I2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgorCisKK0BjbGFz
cyBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yOworCisKK3R5cGVkZWYgTlNfRU5VTShOU0ludGVn
ZXIsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycykgeworICAgIFRlc3RQcm90b2Nv
bERhdGFiYXNlUHJpbWFyeUNvbG9yc1JlZCwKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1h
cnlDb2xvcnNHcmVlbiwKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNCbHVl
LAorfTsKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGF0YWJhc2VF
eGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvcikgeworICAgIFRlc3RQcm90b2Nv
bERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JDeWFuLAorICAg
IFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29s
b3JNYWdlbnRhLAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFy
YW1ldGVyc1ByaW50Q29sb3JZZWxsb3csCisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRl
QWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckJsYWNrLAorfTsKKwordHlwZWRlZiBOU19F
TlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJh
bWV0ZXJzUHJpbnRDb2xvcikgeworICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9w
dGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JDeWFuLAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNl
RXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JNYWdlbnRhLAorICAgIFRlc3RQ
cm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JZZWxs
b3csCisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJz
UHJpbnRDb2xvckJsYWNrLAorfTsKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFBy
b3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yKSB7Cisg
ICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENv
bG9yQ3lhbiwKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1l
dGVyc1ByaW50Q29sb3JNYWdlbnRhLAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5v
T3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvclllbGxvdywKKyAgICBUZXN0UHJvdG9jb2xEYXRh
YmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JCbGFjaywKK307CisKK3R5
cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0
aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvcikgeworICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhl
Y3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckN5YW4sCisgICAgVGVzdFByb3RvY29s
RGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yTWFnZW50YSwKKyAg
ICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29s
b3JZZWxsb3csCisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFt
ZXRlcnNQcmludENvbG9yQmxhY2ssCit9OworCisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkg
KCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIDogUldJ
UHJvdG9jb2xKU09OT2JqZWN0CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0Rp
Y3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKKy0gKGluc3RhbmNldHlwZSlpbml0
V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0Owor
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlIGNvZGU6
KGludCljb2RlOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5T
U3RyaW5nICptZXNzYWdlOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFz
c2lnbikgaW50IGNvZGU7CitAZW5kCisKK0Bwcm90b2NvbCBUZXN0UHJvdG9jb2xEYXRhYmFzZURv
bWFpbkhhbmRsZXIgPE5TT2JqZWN0PgorQG9wdGlvbmFsCistICh2b2lkKWV4ZWN1dGVBbGxPcHRp
b25hbFBhcmFtZXRlcnNXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3Ip
KWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0cmlu
Zz4qLyAqKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqKm5vdGVzLCBkb3VibGUgKnRpbWVzdGFtcCwg
UldJUHJvdG9jb2xKU09OT2JqZWN0ICoqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipw
YXlsb2FkLCBpbnQgKmRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipzcWxF
cnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzICpzY3JlZW5Db2xvciwgTlNB
cnJheS8qPE5TU3RyaW5nPiovICoqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFz
ZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yICpwcmludENvbG9yKSlzdWNj
ZXNzQ2FsbGJhY2sgY29sdW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKiljb2x1bW5O
YW1lcyBub3RlczooTlNTdHJpbmcgKiopbm90ZXMgdGltZXN0YW1wOihkb3VibGUgKil0aW1lc3Rh
bXAgdmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKiopdmFsdWVzIHBheWxvYWQ6KFJXSVBy
b3RvY29sSlNPTk9iamVjdCAqKilwYXlsb2FkIGRhdGFiYXNlSWQ6KGludCAqKWRhdGFiYXNlSWQg
c3FsRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKiopc3FsRXJyb3Igc2NyZWVuQ29s
b3I6KFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqKXNjcmVlbkNvbG9yIGFsdGVy
bmF0ZUNvbG9yczooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKWFsdGVybmF0ZUNvbG9ycyBwcmlu
dENvbG9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQ
cmludENvbG9yICopcHJpbnRDb2xvcjsKKy0gKHZvaWQpZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0
ZXJzV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxi
YWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKShOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmNvbHVt
bk5hbWVzLCBOU1N0cmluZyAqbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNP
Tk9iamVjdCAqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnBheWxvYWQsIGludCBkYXRh
YmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpzcWxFcnJvciwgVGVzdFByb3RvY29s
RGF0YWJhc2VQcmltYXJ5Q29sb3JzIHNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8g
KmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBh
cmFtZXRlcnNQcmludENvbG9yIHByaW50Q29sb3IpKXN1Y2Nlc3NDYWxsYmFjayBjb2x1bW5OYW1l
czooTlNBcnJheS8qPE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMgbm90ZXM6KE5TU3RyaW5nICop
bm90ZXMgdGltZXN0YW1wOihkb3VibGUpdGltZXN0YW1wIHZhbHVlczooUldJUHJvdG9jb2xKU09O
T2JqZWN0ICopdmFsdWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQg
ZGF0YWJhc2VJZDooaW50KWRhdGFiYXNlSWQgc3FsRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNl
RXJyb3IgKilzcWxFcnJvciBzY3JlZW5Db2xvcjooVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5
Q29sb3JzKXNjcmVlbkNvbG9yIGFsdGVybmF0ZUNvbG9yczooTlNBcnJheS8qPE5TU3RyaW5nPiov
ICopYWx0ZXJuYXRlQ29sb3JzIHByaW50Q29sb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0
ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvcilwcmludENvbG9yOworQGVuZAorCisKKwor
CisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmpl
Y3RzLmg+CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKKworIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbEludGVybmFsLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJv
dG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCisjaW1w
b3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNp
bXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKKworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9w
dGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQg
PFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KKworbmFtZXNwYWNl
IEluc3BlY3RvciB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KK09wdGlvbmFs
PE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOwor
CisKK2lubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFzZVBy
aW1hcnlDb2xvcnMgdmFsdWUpCit7CisgICAgc3dpdGNoKHZhbHVlKSB7CisgICAgY2FzZSBUZXN0
UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNSZWQ6CisgICAgICAgIHJldHVybiAicmVkIl9z
OworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzR3JlZW46CisgICAg
ICAgIHJldHVybiAiZ3JlZW4iX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1h
cnlDb2xvcnNCbHVlOgorICAgICAgICByZXR1cm4gImJsdWUiX3M7CisgICAgfQorfQorCit0ZW1w
bGF0ZTw+CitpbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3Jz
PiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAodmFs
dWUgPT0gInJlZCIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlD
b2xvcnNSZWQ7CisgICAgaWYgKHZhbHVlID09ICJncmVlbiIpCisgICAgICAgIHJldHVybiBUZXN0
UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNHcmVlbjsKKyAgICBpZiAodmFsdWUgPT0gImJs
dWUiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzQmx1
ZTsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCitpbmxpbmUgU3RyaW5nIHRvUHJvdG9j
b2xTdHJpbmcoVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJz
UHJpbnRDb2xvciB2YWx1ZSkKK3sKKyAgICBzd2l0Y2godmFsdWUpIHsKKyAgICBjYXNlIFRlc3RQ
cm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JDeWFu
OgorICAgICAgICByZXR1cm4gImN5YW4iX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFz
ZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yTWFnZW50YToKKyAgICAgICAg
cmV0dXJuICJtYWdlbnRhIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRl
QWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvclllbGxvdzoKKyAgICAgICAgcmV0dXJuICJ5
ZWxsb3ciX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25h
bFBhcmFtZXRlcnNQcmludENvbG9yQmxhY2s6CisgICAgICAgIHJldHVybiAiYmxhY2siX3M7Cisg
ICAgfQorfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJh
c2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvcj4gZnJvbVByb3RvY29sU3Ry
aW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09ICJjeWFuIikKKyAg
ICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1l
dGVyc1ByaW50Q29sb3JDeWFuOworICAgIGlmICh2YWx1ZSA9PSAibWFnZW50YSIpCisgICAgICAg
IHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQ
cmludENvbG9yTWFnZW50YTsKKyAgICBpZiAodmFsdWUgPT0gInllbGxvdyIpCisgICAgICAgIHJl
dHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmlu
dENvbG9yWWVsbG93OworICAgIGlmICh2YWx1ZSA9PSAiYmxhY2siKQorICAgICAgICByZXR1cm4g
VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xv
ckJsYWNrOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK2lubGluZSBTdHJpbmcgdG9Q
cm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFt
ZXRlcnNQcmludENvbG9yIHZhbHVlKQoreworICAgIHN3aXRjaCh2YWx1ZSkgeworICAgIGNhc2Ug
VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xv
ckN5YW46CisgICAgICAgIHJldHVybiAiY3lhbiJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERh
dGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JNYWdlbnRhOgorICAg
ICAgICByZXR1cm4gIm1hZ2VudGEiX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yWWVsbG93OgorICAgICAgICByZXR1
cm4gInllbGxvdyJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9w
dGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JCbGFjazoKKyAgICAgICAgcmV0dXJuICJibGFjayJf
czsKKyAgICB9Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xE
YXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yPiBmcm9tUHJvdG9j
b2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gImN5YW4i
KQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQ
YXJhbWV0ZXJzUHJpbnRDb2xvckN5YW47CisgICAgaWYgKHZhbHVlID09ICJtYWdlbnRhIikKKyAg
ICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1l
dGVyc1ByaW50Q29sb3JNYWdlbnRhOworICAgIGlmICh2YWx1ZSA9PSAieWVsbG93IikKKyAgICAg
ICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVy
c1ByaW50Q29sb3JZZWxsb3c7CisgICAgaWYgKHZhbHVlID09ICJibGFjayIpCisgICAgICAgIHJl
dHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmlu
dENvbG9yQmxhY2s7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKworaW5saW5lIFN0cmlu
ZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQ
YXJhbWV0ZXJzUHJpbnRDb2xvciB2YWx1ZSkKK3sKKyAgICBzd2l0Y2godmFsdWUpIHsKKyAgICBj
YXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRD
b2xvckN5YW46CisgICAgICAgIHJldHVybiAiY3lhbiJfczsKKyAgICBjYXNlIFRlc3RQcm90b2Nv
bERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvck1hZ2VudGE6Cisg
ICAgICAgIHJldHVybiAibWFnZW50YSJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNl
RXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvclllbGxvdzoKKyAgICAgICAgcmV0
dXJuICJ5ZWxsb3ciX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09w
dGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JCbGFjazoKKyAgICAgICAgcmV0dXJuICJibGFjayJf
czsKKyAgICB9Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xE
YXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3I+IGZyb21Qcm90b2Nv
bFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSAiY3lhbiIp
CisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFy
YW1ldGVyc1ByaW50Q29sb3JDeWFuOworICAgIGlmICh2YWx1ZSA9PSAibWFnZW50YSIpCisgICAg
ICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVy
c1ByaW50Q29sb3JNYWdlbnRhOworICAgIGlmICh2YWx1ZSA9PSAieWVsbG93IikKKyAgICAgICAg
cmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJp
bnRDb2xvclllbGxvdzsKKyAgICBpZiAodmFsdWUgPT0gImJsYWNrIikKKyAgICAgICAgcmV0dXJu
IFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xv
ckJsYWNrOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK2lubGluZSBTdHJpbmcgdG9Q
cm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1l
dGVyc1ByaW50Q29sb3IgdmFsdWUpCit7CisgICAgc3dpdGNoKHZhbHVlKSB7CisgICAgY2FzZSBU
ZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JD
eWFuOgorICAgICAgICByZXR1cm4gImN5YW4iX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRh
YmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JNYWdlbnRhOgorICAgICAg
ICByZXR1cm4gIm1hZ2VudGEiX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JZZWxsb3c6CisgICAgICAgIHJldHVybiAi
eWVsbG93Il9zOworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25h
bFBhcmFtZXRlcnNQcmludENvbG9yQmxhY2s6CisgICAgICAgIHJldHVybiAiYmxhY2siX3M7Cisg
ICAgfQorfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJh
c2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yPiBmcm9tUHJvdG9jb2xTdHJp
bmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gImN5YW4iKQorICAg
ICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRl
cnNQcmludENvbG9yQ3lhbjsKKyAgICBpZiAodmFsdWUgPT0gIm1hZ2VudGEiKQorICAgICAgICBy
ZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmlu
dENvbG9yTWFnZW50YTsKKyAgICBpZiAodmFsdWUgPT0gInllbGxvdyIpCisgICAgICAgIHJldHVy
biBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29s
b3JZZWxsb3c7CisgICAgaWYgKHZhbHVlID09ICJibGFjayIpCisgICAgICAgIHJldHVybiBUZXN0
UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JCbGFj
azsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorCisjIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1w
YXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisKKyNpbXBvcnQgIlRl
c3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgorI2ltcG9y
dCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKwordXNpbmcg
bmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMgKERhdGFiYXNlRG9tYWluKQorCisrICh2b2lkKV9wYXJzZURhdGFiYXNlSWQ6KE5TTnVt
YmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworKyAodm9pZClfcGFyc2VQ
cmltYXJ5Q29sb3JzOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9h
ZDsKKysgKHZvaWQpX3BhcnNlQ29sb3JMaXN0OihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopb3V0
VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisrICh2b2lkKV9wYXJzZUVycm9yOihUZXN0
UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2Fk
OworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMg
KERhdGFiYXNlRG9tYWluKQorCisrICh2b2lkKV9wYXJzZURhdGFiYXNlSWQ6KE5TTnVtYmVyICoq
KW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNOdW1iZXIgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUg
PSAoTlNOdW1iZXIgKilwYXlsb2FkOworfQorCisrICh2b2lkKV9wYXJzZVByaW1hcnlDb2xvcnM6
KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKKyAg
ICBPcHRpb25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnM+IHJlc3VsdCA9IElu
c3BlY3Rvcjo6ZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNv
bG9ycz4ocGF5bG9hZCk7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfRU5VTV9WQUxVRShy
ZXN1bHQsIEAiUHJpbWFyeUNvbG9ycyIpOworICAgICpvdXRWYWx1ZSA9IEAocmVzdWx0LnZhbHVl
KCkpOworfQorCisrICh2b2lkKV9wYXJzZUNvbG9yTGlzdDooTlNBcnJheS8qPE5TU3RyaW5nPiov
ICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNBcnJheS8qPE5TU3RyaW5nPiovIGNsYXNzXSk7
CisgICAgKm91dFZhbHVlID0gKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKXBheWxvYWQ7Cit9CisK
KysgKHZvaWQpX3BhcnNlRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKiopb3V0VmFs
dWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JB
RF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSBb
W1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2Fk
XTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1
cm4tcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3Rv
Y29sSlNPTk9iamVjdFByaXZhdGUuaD4KKyNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW1w
b3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisK
K0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yCisKKy0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlk
PiAqKXBheWxvYWQKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAg
cmV0dXJuIG5pbDsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFko
cGF5bG9hZFtAIm1lc3NhZ2UiXSwgQCJtZXNzYWdlIik7CisgICAgc2VsZi5tZXNzYWdlID0gcGF5
bG9hZFtAIm1lc3NhZ2UiXTsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJP
UEVSVFkocGF5bG9hZFtAImNvZGUiXSwgQCJjb2RlIik7CisgICAgc2VsZi5jb2RlID0gW3BheWxv
YWRbQCJjb2RlIl0gaW50ZWdlclZhbHVlXTsKKworICAgIHJldHVybiBzZWxmOworfQorLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAq
KW9iamVjdAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0Oltv
YmplY3QgdG9KU09OT2JqZWN0XS5nZXQoKV0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAg
cmV0dXJuIHNlbGY7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3Ry
aW5nICopbWVzc2FnZSBjb2RlOihpbnQpY29kZQoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIg
aW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9S
RVFVSVJFRF9QUk9QRVJUWShtZXNzYWdlLCBAIm1lc3NhZ2UiKTsKKworICAgIHNlbGYubWVzc2Fn
ZSA9IG1lc3NhZ2U7CisgICAgc2VsZi5jb2RlID0gY29kZTsKKworICAgIHJldHVybiBzZWxmOwor
fQorCistICh2b2lkKXNldE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZQoreworICAgIFtzdXBl
ciBzZXRTdHJpbmc6bWVzc2FnZSBmb3JLZXk6QCJtZXNzYWdlIl07Cit9CisKKy0gKE5TU3RyaW5n
ICopbWVzc2FnZQoreworICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAibWVzc2FnZSJd
OworfQorCistICh2b2lkKXNldENvZGU6KGludCljb2RlCit7CisgICAgW3N1cGVyIHNldEludGVn
ZXI6Y29kZSBmb3JLZXk6QCJjb2RlIl07Cit9CisKKy0gKGludCljb2RlCit7CisgICAgcmV0dXJu
IFtzdXBlciBpbnRlZ2VyRm9yS2V5OkAiY29kZSJdOworfQorCitAZW5kCisKKworIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RlZmluaXRpb25zLXdpdGgtbWFj
LXBsYXRmb3JtLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24t
cmVzdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yMTdkMDQ3Yjdh
OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uLXJl
c3VsdApAQCAtMCwwICsxLDEyMjggQEAKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5k
Q29tbWFuZHMuanMKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9u
cy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKy8vIE5ldHdvcmsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4o
Ik5ldHdvcmsiLCBudWxsKTsKKyNpZiBQTEFURk9STShNQUMpCitJbnNwZWN0b3JCYWNrZW5kLnJl
Z2lzdGVyQ29tbWFuZCgiTmV0d29yay5sb2FkUmVzb3VyY2UiLCBudWxsLCBbXSwgW10pOworI2Vu
ZGlmIC8vIFBMQVRGT1JNKE1BQykKKyNpZiBQTEFURk9STShNQUMpCitJbnNwZWN0b3JCYWNrZW5k
LnJlZ2lzdGVyRXZlbnQoIk5ldHdvcmsucmVzb3VyY2VMb2FkZWQiLCBudWxsLCBbXSk7CisjZW5k
aWYgLy8gUExBVEZPUk0oTUFDKQorSW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rlck5ldHdvcmtEaXNw
YXRjaGVyID0gSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRpc3BhdGNoZXIuYmluZChJbnNwZWN0
b3JCYWNrZW5kLCAiTmV0d29yayIpOworSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigi
TmV0d29yayIsIG51bGwpOworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMu
anMKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBs
YXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsK
KworY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHZvaWQg
c2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNo
ZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KKyAgICBC
YWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2Jh
Y2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Citwcml2YXRlOgorICAgIFJlZlB0cjxCYWNrZW5kRGlz
cGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKK307CisKKworY2xhc3MgQWx0ZXJuYXRlTmV0
d29ya0JhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVy
IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5BbHRlcm5hdGVOZXR3b3JrQmFja2VuZERpc3BhdGNo
ZXIoKSB7IH0KKyNpZiBQTEFURk9STShNQUMpCisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJj
ZShsb25nIGNhbGxJZCkgPSAwOworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKK307CisKK30gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCisjIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0
Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZv
cm0uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBT
dHJpbmcgRXJyb3JTdHJpbmc7CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKK2NsYXNzIEFsdGVybmF0ZU5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjsKKyNlbmRp
ZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworY2xhc3MgTmV0
d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CitwdWJsaWM6CisjaWYgUExBVEZPUk0oTUFD
KQorICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UoRXJyb3JTdHJpbmcmKSA9IDA7CisjZW5k
aWYgLy8gUExBVEZPUk0oTUFDKQorcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgfk5ldHdvcmtCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKK307CisKK2NsYXNzIE5ldHdvcmtCYWNrZW5kRGlzcGF0
Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJs
aWM6CisgICAgc3RhdGljIFJlZjxOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNr
ZW5kRGlzcGF0Y2hlciYsIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICB2
b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpT
T046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5hbDsKK3ByaXZhdGU6CisjaWYgUExBVEZPUk0oTUFD
KQorICAgIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmIHBhcmFtZXRlcnMpOworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKKyNpZiBFTkFCTEUo
SU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK3B1YmxpYzoKKyAgICB2b2lkIHNldEFs
dGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyKiBhbHRl
cm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3Bh
dGNoZXI7IH0KK3ByaXZhdGU6CisgICAgQWx0ZXJuYXRlTmV0d29ya0JhY2tlbmREaXNwYXRjaGVy
KiBtX2FsdGVybmF0ZURpc3BhdGNoZXIgeyBudWxscHRyIH07CisjZW5kaWYgLy8gRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCitwcml2YXRlOgorICAgIE5ldHdvcmtCYWNr
ZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYsIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIqKTsKKyAgICBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50
IHsgbnVsbHB0ciB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZp
bGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tl
bmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZp
bml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0QmFj
a2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JG
cm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8
d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCisj
aWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjaW5jbHVkZSAiVGVz
dEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgorI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworTmV0
d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6fk5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXIoKSB7IH0KKworUmVmPE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcj4gTmV0d29ya0JhY2tl
bmREaXNwYXRjaGVyOjpjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVy
LCBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKK3sKKyAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIs
IGFnZW50KSk7Cit9CisKK05ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjo6TmV0d29ya0JhY2tlbmRE
aXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgTmV0d29ya0Jh
Y2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCisgICAgOiBTdXBwbGVtZW50YWxCYWNrZW5k
RGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKKyAgICAsIG1fYWdlbnQoYWdlbnQpCit7Cisg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKCJOZXR3
b3JrIl9zLCB0aGlzKTsKK30KKwordm9pZCBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI6OmRpc3Bh
dGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVj
dD4mJiBtZXNzYWdlKQoreworICAgIFJlZjxOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI+IHByb3Rl
Y3QoKnRoaXMpOworCisgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVyczsKKyAgICBt
ZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFyYW1ldGVycyk7CisKKyNpZiBQTEFURk9S
TShNQUMpCisgICAgaWYgKG1ldGhvZCA9PSAibG9hZFJlc291cmNlIikgeworICAgICAgICBsb2Fk
UmVzb3VyY2UocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCisKKyAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3Vu
ZCwgIidOZXR3b3JrLiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7Cit9CisKKyNpZiBQ
TEFURk9STShNQUMpCit2b2lkIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNl
KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQoreworI2lmIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorICAgIGlmIChtX2FsdGVybmF0ZURpc3Bh
dGNoZXIpIHsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2UocmVx
dWVzdElkKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAg
IFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAg
bV9hZ2VudC0+bG9hZFJlc291cmNlKGVycm9yKTsKKworICAgIGlmICghZXJyb3IubGVuZ3RoKCkp
CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdU
Rk1vdmUocmVzdWx0KSwgZmFsc2UpOworICAgIGVsc2UKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3Is
IFdURk1vdmUoZXJyb3IpKTsKK30KKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCisKK30gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMu
Y3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0u
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDx3dGYv
SlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKKworY2xhc3MgRnJvbnRlbmRSb3V0ZXI7CisKK2NsYXNzIE5ldHdvcmtG
cm9udGVuZERpc3BhdGNoZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGlj
OgorICAgIE5ldHdvcmtGcm9udGVuZERpc3BhdGNoZXIoRnJvbnRlbmRSb3V0ZXImIGZyb250ZW5k
Um91dGVyKSA6IG1fZnJvbnRlbmRSb3V0ZXIoZnJvbnRlbmRSb3V0ZXIpIHsgfQorI2lmIFBMQVRG
T1JNKE1BQykKKyAgICB2b2lkIHJlc291cmNlTG9hZGVkKCk7CisjZW5kaWYgLy8gUExBVEZPUk0o
TUFDKQorcHJpdmF0ZToKKyAgICBGcm9udGVuZFJvdXRlciYgbV9mcm9udGVuZFJvdXRlcjsKK307
CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmRE
aXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5j
cHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1h
Yy1wbGF0Zm9ybS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVy
cy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Ig
eworCisjaWYgUExBVEZPUk0oTUFDKQordm9pZCBOZXR3b3JrRnJvbnRlbmREaXNwYXRjaGVyOjpy
ZXNvdXJjZUxvYWRlZCgpCit7CisgICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBK
U09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhv
ZCJfcywgIk5ldHdvcmsucmVzb3VyY2VMb2FkZWQiX3MpOworCisgICAgbV9mcm9udGVuZFJvdXRl
ci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKK30KKyNlbmRpZiAvLyBQ
TEFURk9STShNQUMpCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6
IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sT2JqZWN0cy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlv
bnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvclByb3RvY29sVHlwZXMuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCitu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKworCisv
LyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KK25hbWVzcGFjZSBOZXR3b3JrIHsKKyNpZiBQTEFURk9S
TShNQUMpCitjbGFzcyBOZXR3b3JrRXJyb3I7CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorfSAv
LyBOZXR3b3JrCisvLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCisKKworCisKK25hbWVz
cGFjZSBOZXR3b3JrIHsKKyNpZiBQTEFURk9STShNQUMpCitjbGFzcyBOZXR3b3JrRXJyb3IgOiBw
dWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CitwdWJsaWM6CisgICAgZW51bSB7CisgICAgICAgIE5v
RmllbGRzU2V0ID0gMCwKKyAgICAgICAgTWVzc2FnZVNldCA9IDEgPDwgMCwKKyAgICAgICAgQ29k
ZVNldCA9IDEgPDwgMSwKKyAgICAgICAgQWxsRmllbGRzU2V0ID0gKE1lc3NhZ2VTZXQgfCBDb2Rl
U2V0KQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CisgICAgY2xhc3MgQnVpbGRl
ciB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7
CisKKyAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2Fz
dFN0YXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0
PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgQnVp
bGRlcihSZWY8LypOZXR3b3JrRXJyb3IqL0pTT046Ok9iamVjdD4mJiBvYmplY3QpCisgICAgICAg
ICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKKyAgICAgICAgeworICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9u
b25faW5pdF9zdGF0ZSk7CisgICAgICAgIH0KKyAgICAgICAgZnJpZW5kIGNsYXNzIE5ldHdvcmtF
cnJvcjsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1lc3NhZ2VTZXQ+
JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNZXNzYWdlU2V0KSwgcHJvcGVydHlfbWVzc2FnZV9h
bHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJtZXNzYWdlIl9z
LCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1lc3NhZ2VTZXQ+KCk7Cisg
ICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29kZVNldD4mIHNldENvZGUoaW50
IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
Q29kZVNldCksIHByb3BlcnR5X2NvZGVfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1
bHQtPnNldEludGVnZXIoImNvZGUiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0
U3RhdGU8Q29kZVNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIFJlZjxOZXR3b3JrRXJyb3I+
IHJlbGVhc2UoKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9
PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOworICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoc2l6ZW9mKE5ldHdvcmtFcnJvcikgPT0gc2l6ZW9mKEpTT046Ok9iamVjdCksIGNh
bm5vdF9jYXN0KTsKKworICAgICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4ganNvblJlc3VsdCA9
IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFdU
Rk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPE5ldHdvcmtFcnJvcj4qPigmanNvblJlc3VsdCkp
OworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAv
KgorICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKKyAgICAgKiBSZWY8TmV0d29ya0Vycm9y
PiByZXN1bHQgPSBOZXR3b3JrRXJyb3I6OmNyZWF0ZSgpCisgICAgICogICAgIC5zZXRNZXNzYWdl
KC4uLikKKyAgICAgKiAgICAgLnNldENvZGUoLi4uKQorICAgICAqICAgICAucmVsZWFzZSgpOwor
ICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRl
KCkpOworICAgIH0KK307CisKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCit9IC8vIE5ldHdvcmsK
KworCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgorIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKworIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgorLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
VGVzdFByb3RvY29sT2JqZWN0cy5oIgorCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFt
ZXNwYWNlIFByb3RvY29sIHsKKworCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMu
Y3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBs
YXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVycy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworQHByb3RvY29sIFRlc3RQcm90
b2NvbE5ldHdvcmtEb21haW5IYW5kbGVyOworCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCitj
bGFzcyBPYmpDSW5zcGVjdG9yTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGlj
IEFsdGVybmF0ZU5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlciB7CisgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CitwdWJsaWM6CisgICAgT2JqQ0luc3BlY3Rvck5ldHdvcmtCYWNrZW5kRGlzcGF0
Y2hlcihpZDxUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2Rl
bGVnYXRlID0gaGFuZGxlcjsgfQorI2lmIFBMQVRGT1JNKE1BQykKKyAgICB2b2lkIGxvYWRSZXNv
dXJjZShsb25nIHJlcXVlc3RJZCkgZmluYWw7CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorcHJp
dmF0ZToKKyAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkhhbmRsZXI+
PiBtX2RlbGVnYXRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisj
aW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgIlRl
c3RQcm90b2NvbEludGVybmFsLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zLmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKworbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CisKK3ZvaWQgT2JqQ0luc3BlY3Rvck5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJl
c291cmNlKGxvbmcgcmVxdWVzdElkKQoreworICAgIGlmICghI2lmIFBMQVRGT1JNKE1BQykKK1tt
X2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IobG9hZFJlc291cmNlV2l0aEVy
cm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKSkg
eworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVl
c3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmsubG9hZFJl
c291cmNlJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlkIGVy
cm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgeworICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6
OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQ
ZW5kaW5nRXJyb3JzKCk7CisgICAgfTsKKworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBpZCBzdWNj
ZXNzQ2FsbGJhY2sgPSBeeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9u
c2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgfTsKKyNl
bmRpZiAvLyBQTEFURk9STShNQUMpCisjaWYgUExBVEZPUk0oTUFDKQorCisjZW5kaWYgLy8gUExB
VEZPUk0oTUFDKQorI2lmIFBMQVRGT1JNKE1BQykKKyAgICBbbV9kZWxlZ2F0ZSBsb2FkUmVzb3Vy
Y2VXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNz
Q2FsbGJhY2tdOworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKK30KKworCit9IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hl
cnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRm
b3JtLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lt
cG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgorCitfX2F0dHJpYnV0ZV9fKCh2aXNp
YmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
biA6IE5TT2JqZWN0CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluLCBzZXR0ZXI9c2V0TmV0
d29ya0hhbmRsZXI6KSBpZDxUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluSGFuZGxlcj4gbmV0d29y
a0hhbmRsZXI7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFRlc3RQcm90b2NvbE5l
dHdvcmtEb21haW5FdmVudERpc3BhdGNoZXIgKm5ldHdvcmtFdmVudERpc3BhdGNoZXI7CitAZW5k
CisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90
b2NvbENvbmZpZ3VyYXRpb24uaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIK
KyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW1w
b3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKwordXNp
bmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENv
bmZpZ3VyYXRpb24KK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250
cm9sbGVyOworICAgIGlkPFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5IYW5kbGVyPiBfbmV0d29y
a0hhbmRsZXI7CisgICAgVGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkV2ZW50RGlzcGF0Y2hlciAq
X25ldHdvcmtFdmVudERpc3BhdGNoZXI7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENv
bnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgorewor
ICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4g
bmlsOworICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xs
ZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIFtfbmV0
d29ya0hhbmRsZXIgcmVsZWFzZV07CisgICAgW19uZXR3b3JrRXZlbnREaXNwYXRjaGVyIHJlbGVh
c2VdOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAodm9pZClzZXROZXR3b3JrSGFuZGxl
cjooaWQ8VGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkhhbmRsZXI+KWhhbmRsZXIKK3sKKyAgICBp
ZiAoaGFuZGxlciA9PSBfbmV0d29ya0hhbmRsZXIpCisgICAgICAgIHJldHVybjsKKworICAgIFtf
bmV0d29ya0hhbmRsZXIgcmVsZWFzZV07CisgICAgX25ldHdvcmtIYW5kbGVyID0gW2hhbmRsZXIg
cmV0YWluXTsKKworICAgIGF1dG8gYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IG1ha2VVbmlxdWU8T2Jq
Q0luc3BlY3Rvck5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7CisgICAgYXV0byBh
bHRlcm5hdGVBZ2VudCA9IG1ha2VVbmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8TmV0
d29ya0JhY2tlbmREaXNwYXRjaGVyLCBBbHRlcm5hdGVOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI+
PigiTmV0d29yayJfcywgKl9jb250cm9sbGVyLCBXVEZNb3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIp
KTsKKyAgICBfY29udHJvbGxlci0+YXBwZW5kRXh0cmFBZ2VudChXVEZNb3ZlKGFsdGVybmF0ZUFn
ZW50KSk7Cit9CisKKy0gKGlkPFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5IYW5kbGVyPiluZXR3
b3JrSGFuZGxlcgoreworICAgIHJldHVybiBfbmV0d29ya0hhbmRsZXI7Cit9CisKKy0gKFRlc3RQ
cm90b2NvbE5ldHdvcmtEb21haW5FdmVudERpc3BhdGNoZXIgKiluZXR3b3JrRXZlbnREaXNwYXRj
aGVyCit7CisgICAgaWYgKCFfbmV0d29ya0V2ZW50RGlzcGF0Y2hlcikKKyAgICAgICAgX25ldHdv
cmtFdmVudERpc3BhdGNoZXIgPSBbW1Rlc3RQcm90b2NvbE5ldHdvcmtEb21haW5FdmVudERpc3Bh
dGNoZXIgYWxsb2NdIGluaXRXaXRoQ29udHJvbGxlcjpfY29udHJvbGxlcl07CisgICAgcmV0dXJu
IF9uZXR3b3JrRXZlbnREaXNwYXRjaGVyOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xFdmVudERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
ZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgor
CisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPHd0Zi9K
U09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRh
dGlvbiBUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluRXZlbnREaXNwYXRjaGVyCit7CisgICAgQXVn
bWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKK30KKworLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVy
Kiljb250cm9sbGVyCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYp
CisgICAgICAgIHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250
cm9sbGVyID0gY29udHJvbGxlcjsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClyZXNv
dXJjZUxvYWRlZAoreworICAgIGNvbnN0IEZyb250ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29udHJv
bGxlci0+ZnJvbnRlbmRSb3V0ZXIoKTsKKworICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNz
YWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5n
KCJtZXRob2QiX3MsICJOZXR3b3JrLnJlc291cmNlTG9hZGVkIl9zKTsKKyAgICByb3V0ZXIuc2Vu
ZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cit9CisKK0BlbmQKKworCisjIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVm
aW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKwor
I2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgorCisKKyNpZiBQ
TEFURk9STShNQUMpCitAY2xhc3MgVGVzdFByb3RvY29sTmV0d29ya0Vycm9yOworI2VuZGlmIC8v
IFBMQVRGT1JNKE1BQykKKworCisKKworI2lmIFBMQVRGT1JNKE1BQykKK19fYXR0cmlidXRlX18o
KHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xOZXR3b3Jr
RXJyb3IgOiBSV0lQcm90b2NvbEpTT05PYmplY3QKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBh
eWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkOworLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpz
b25PYmplY3Q7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1l
c3NhZ2UgY29kZTooaW50KWNvZGU7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21p
YywgY29weSkgTlNTdHJpbmcgKm1lc3NhZ2U7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5v
bmF0b21pYywgYXNzaWduKSBpbnQgY29kZTsKK0BlbmQKKyNlbmRpZiAvLyBQTEFURk9STShNQUMp
CisKK0Bwcm90b2NvbCBUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluSGFuZGxlciA8TlNPYmplY3Q+
CitAb3B0aW9uYWwKKyNpZiBQTEFURk9STShNQUMpCistICh2b2lkKWxvYWRSZXNvdXJjZVdpdGhF
cnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNj
ZXNzQ2FsbGJhY2s6KHZvaWQoXikodm9pZCkpc3VjY2Vzc0NhbGxiYWNrOworI2VuZGlmIC8vIFBM
QVRGT1JNKE1BQykKK0BlbmQKKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQi
KSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5FdmVudERpc3BhdGNoZXIg
OiBOU09iamVjdAorLSAodm9pZClyZXNvdXJjZUxvYWRlZDsKK0BlbmQKKworCisjaW1wb3J0IDxX
ZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+CisKKyMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bEludGVybmFsLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9u
cy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3Rv
Y29sSlNPTk9iamVjdFByaXZhdGUuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRh
YmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwor
QGludGVyZmFjZSBUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluRXZlbnREaXNwYXRjaGVyIChQcml2
YXRlKQorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooSW5zcGVjdG9yOjpBdWdt
ZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXI7CitAZW5kCisKKworIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0
IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+CisKK25hbWVzcGFj
ZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+CitPcHRpb25h
bDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsK
KworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0
aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgor
CisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJz
ZXIuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRl
Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbnRlcmZhY2UgVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zIChOZXR3b3JrRG9tYWluKQorCisjaWYgUExBVEZPUk0oTUFDKQor
KyAodm9pZClfcGFyc2VOZXR3b3JrRXJyb3I6KFRlc3RQcm90b2NvbE5ldHdvcmtFcnJvciAqKilv
dXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKyNlbmRpZiAvLyBQTEFURk9STShNQUMp
CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAo
TmV0d29ya0RvbWFpbikKKworI2lmIFBMQVRGT1JNKE1BQykKKysgKHZvaWQpX3BhcnNlTmV0d29y
a0Vycm9yOihUZXN0UHJvdG9jb2xOZXR3b3JrRXJyb3IgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6
KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQs
IFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbE5l
dHdvcmtFcnJvciBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOworfQorI2VuZGlmIC8v
IFBMQVRGT1JNKE1BQykKKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBs
YXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09O
T2JqZWN0UHJpdmF0ZS5oPgorI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbXBvcnQgPHd0
Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworI2lmIFBM
QVRGT1JNKE1BQykKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xOZXR3b3JrRXJyb3IKKwor
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNT
dHJpbmcgKiwgaWQ+ICopcGF5bG9hZAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0p
KQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJF
RF9QUk9QRVJUWShwYXlsb2FkW0AibWVzc2FnZSJdLCBAIm1lc3NhZ2UiKTsKKyAgICBzZWxmLm1l
c3NhZ2UgPSBwYXlsb2FkW0AibWVzc2FnZSJdOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9S
RVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiY29kZSJdLCBAImNvZGUiKTsKKyAgICBzZWxmLmNv
ZGUgPSBbcGF5bG9hZFtAImNvZGUiXSBpbnRlZ2VyVmFsdWVdOworCisgICAgcmV0dXJuIHNlbGY7
Cit9CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xK
U09OT2JqZWN0ICopb2JqZWN0Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEpT
T05PYmplY3Q6W29iamVjdCB0b0pTT05PYmplY3RdLmdldCgpXSkpCisgICAgICAgIHJldHVybiBu
aWw7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTWVz
c2FnZTooTlNTdHJpbmcgKiltZXNzYWdlIGNvZGU6KGludCljb2RlCit7CisgICAgaWYgKCEoc2Vs
ZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBUSFJPV19FWENF
UFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKG1lc3NhZ2UsIEAibWVzc2FnZSIpOworCisgICAg
c2VsZi5tZXNzYWdlID0gbWVzc2FnZTsKKyAgICBzZWxmLmNvZGUgPSBjb2RlOworCisgICAgcmV0
dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpc2V0TWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlCit7
CisgICAgW3N1cGVyIHNldFN0cmluZzptZXNzYWdlIGZvcktleTpAIm1lc3NhZ2UiXTsKK30KKwor
LSAoTlNTdHJpbmcgKiltZXNzYWdlCit7CisgICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6
QCJtZXNzYWdlIl07Cit9CisKKy0gKHZvaWQpc2V0Q29kZTooaW50KWNvZGUKK3sKKyAgICBbc3Vw
ZXIgc2V0SW50ZWdlcjpjb2RlIGZvcktleTpAImNvZGUiXTsKK30KKworLSAoaW50KWNvZGUKK3sK
KyAgICByZXR1cm4gW3N1cGVyIGludGVnZXJGb3JLZXk6QCJjb2RlIl07Cit9CisKK0BlbmQKKyNl
bmRpZiAvLyBQTEFURk9STShNQUMpCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBl
cy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL2RvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbi1yZXN1bHQgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWlu
LWRlYnVnZ2FibGVUeXBlcy5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMC4uNjRlYzViOTA4MTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWluLWRlYnVnZ2Fi
bGVUeXBlcy5qc29uLXJlc3VsdApAQCAtMCwwICsxLDEwMzAgQEAKKyMjIyBCZWdpbiBGaWxlOiBJ
bnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBkb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworLy8gRG9tYWluCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVy
RG9tYWluKCJEb21haW4iLCBudWxsKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5k
KCJEb21haW4uQ29tbWFuZCIsIG51bGwsIFtdLCBbXSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lz
dGVyRXZlbnQoIkRvbWFpbi5FdmVudCIsIG51bGwsIFtdKTsKK0luc3BlY3RvckJhY2tlbmQucmVn
aXN0ZXJEb21haW5EaXNwYXRjaGVyID0gSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRpc3BhdGNo
ZXIuYmluZChJbnNwZWN0b3JCYWNrZW5kLCAiRG9tYWluIik7CitJbnNwZWN0b3JCYWNrZW5kLmFj
dGl2YXRlRG9tYWluKCJEb21haW4iLCBbIndlYi1wYWdlIl0pOworIyMjIEVuZCBGaWxlOiBJbnNw
ZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRv
bWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisKK25hbWVzcGFj
ZSBJbnNwZWN0b3IgeworCitjbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJs
aWM6CisgICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNo
ZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRj
aGVyKTsgfQorICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0
IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KK3ByaXZhdGU6CisgICAgUmVm
UHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOworfTsKKworCitjbGFz
cyBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+QWx0ZXJuYXRlRG9tYWluQmFj
a2VuZERpc3BhdGNoZXIoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChsb25nIGNhbGxJ
ZCkgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyMjIyBFbmQgRmlsZTogVGVzdEFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2Vu
ZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4t
ZGVidWdnYWJsZVR5cGVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgi
CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7
CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCitjbGFzcyBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0
Y2hlcjsKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
KworY2xhc3MgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKK3B1YmxpYzoKKyAgICB2
aXJ0dWFsIHZvaWQgQ29tbWFuZChFcnJvclN0cmluZyYpID0gMDsKK3Byb3RlY3RlZDoKKyAgICB2
aXJ0dWFsIH5Eb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKK307CisKK2NsYXNzIERv
bWFpbkJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmRE
aXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPERvbWFpbkJhY2tlbmREaXNwYXRj
aGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXIqKTsKKyAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcm
IG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5hbDsKK3ByaXZhdGU6Cisg
ICAgdm9pZCBDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBh
cmFtZXRlcnMpOworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQor
cHVibGljOgorICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0Y2hlcihBbHRlcm5hdGVEb21haW5C
YWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVybmF0ZURpc3Bh
dGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9Citwcml2YXRlOgorICAgIEFsdGVybmF0ZURv
bWFpbkJhY2tlbmREaXNwYXRjaGVyKiBtX2FsdGVybmF0ZURpc3BhdGNoZXIgeyBudWxscHRyIH07
CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCitwcml2
YXRlOgorICAgIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiwgRG9t
YWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgRG9tYWluQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyKiBtX2FnZW50IHsgbnVsbHB0ciB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVn
aW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24KKy8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4K
KyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyNp
bmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCisjZW5kaWYgLy8gRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKK25hbWVzcGFjZSBJbnNwZWN0
b3IgeworCitEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5Eb21haW5CYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXIoKSB7IH0KKworUmVmPERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBEb21h
aW5CYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlz
cGF0Y2hlciwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKK3sKKyAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0
Y2hlciwgYWdlbnQpKTsKK30KKworRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkRvbWFpbkJhY2tl
bmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgRG9tYWlu
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKKyAgICA6IFN1cHBsZW1lbnRhbEJhY2tl
bmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQorICAgICwgbV9hZ2VudChhZ2VudCkKK3sK
KyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oIkRv
bWFpbiJfcywgdGhpcyk7Cit9CisKK3ZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmRpc3Bh
dGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVj
dD4mJiBtZXNzYWdlKQoreworICAgIFJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVj
dCgqdGhpcyk7CisKKyAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOworICAgIG1l
c3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsKKworICAgIGlmIChtZXRo
b2QgPT0gIkNvbW1hbmQiKSB7CisgICAgICAgIENvbW1hbmQocmVxdWVzdElkLCBXVEZNb3ZlKHBh
cmFtZXRlcnMpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fYmFja2VuZERpc3Bh
dGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZv
dW5kLCAiJ0RvbWFpbi4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOworfQorCit2b2lk
IERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8
SlNPTjo6T2JqZWN0PiYmKQoreworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQorICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKKyAgICAgICAgbV9hbHRl
cm5hdGVEaXNwYXRjaGVyLT5Db21tYW5kKHJlcXVlc3RJZCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisK
KyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBK
U09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYWdlbnQtPkNvbW1hbmQoZXJyb3IpOworCisg
ICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2Vu
ZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7CisgICAgZWxzZQor
ICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmRE
aXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOworfQorCit9IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNw
cAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVl
cy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVj
dG9yIHsKKworY2xhc3MgRnJvbnRlbmRSb3V0ZXI7CisKK2NsYXNzIERvbWFpbkZyb250ZW5kRGlz
cGF0Y2hlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgRG9t
YWluRnJvbnRlbmREaXNwYXRjaGVyKEZyb250ZW5kUm91dGVyJiBmcm9udGVuZFJvdXRlcikgOiBt
X2Zyb250ZW5kUm91dGVyKGZyb250ZW5kUm91dGVyKSB7IH0KKyAgICB2b2lkIEV2ZW50KCk7Citw
cml2YXRlOgorICAgIEZyb250ZW5kUm91dGVyJiBtX2Zyb250ZW5kUm91dGVyOworfTsKKworfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNo
ZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordm9pZCBEb21h
aW5Gcm9udGVuZERpc3BhdGNoZXI6OkV2ZW50KCkKK3sKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiBq
c29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAganNvbk1lc3NhZ2UtPnNl
dFN0cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9zKTsKKworICAgIG1fZnJvbnRlbmRS
b3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNo
ZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgorI2lu
Y2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKwor
bmFtZXNwYWNlIFByb3RvY29sIHsKKworCisKKworCisKKworCisKK30gLy8gbmFtZXNwYWNlIFBy
b3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xPYmplY3RzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3Bw
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLWRlYnVnZ2FibGVUeXBl
cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisKKyNpbmNs
dWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25h
bWVzcGFjZSBJbnNwZWN0b3IgeworCituYW1lc3BhY2UgUHJvdG9jb2wgeworCisKKworfSAvLyBu
YW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisK
K0Bwcm90b2NvbCBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyOworCituYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKKworCitjbGFzcyBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNo
ZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIgeworICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIE9iakNJbnNwZWN0b3JEb21h
aW5CYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiBo
YW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9CisgICAgdm9pZCBDb21tYW5kKGxvbmcg
cmVxdWVzdElkKSBmaW5hbDsKK3ByaXZhdGU6CisgICAgUmV0YWluUHRyPGlkPFRlc3RQcm90b2Nv
bERvbWFpbkRvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJz
LmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMu
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0
ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgor
CisjaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorCituYW1l
c3BhY2UgSW5zcGVjdG9yIHsKKwordm9pZCBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3Bh
dGNoZXI6OkNvbW1hbmQobG9uZyByZXF1ZXN0SWQpCit7CisgICAgaWYgKCFbbV9kZWxlZ2F0ZSBy
ZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKENvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazpzdWNj
ZXNzQ2FsbGJhY2s6KV0pIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJv
dG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwg
IidEb21haW4uQ29tbWFuZCcgd2FzIG5vdCBmb3VuZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKKyAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmRE
aXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgIH07CisKKyAgICBpZCBzdWNjZXNzQ2FsbGJh
Y2sgPSBeeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVz
dElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgfTsKKworICAgIFttX2Rl
bGVnYXRlIENvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxs
YmFjazpzdWNjZXNzQ2FsbGJhY2tdOworfQorCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgor
CisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorCisjIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uCisvLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9U
ZXN0UHJvdG9jb2wuaD4KKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkp
CitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAorQHByb3Bl
cnR5IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNldERvbWFpbkhhbmRsZXI6KSBpZDxUZXN0
UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiBkb21haW5IYW5kbGVyOworQHByb3BlcnR5IChu
b25hdG9taWMsIHJlYWRvbmx5KSBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNo
ZXIgKmRvbWFpbkV2ZW50RGlzcGF0Y2hlcjsKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24uaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29u
ZmlndXJhdGlvbi5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1k
ZWJ1Z2dhYmxlVHlwZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCisKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlz
cGF0Y2hlcnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJs
ZUFnZW50Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNv
bnRyb2xsZXIuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVycy5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXJzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBs
ZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCit7CisgICAgQXVnbWVudGFibGVJ
bnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKKyAgICBpZDxUZXN0UHJvdG9jb2xEb21h
aW5Eb21haW5IYW5kbGVyPiBfZG9tYWluSGFuZGxlcjsKKyAgICBUZXN0UHJvdG9jb2xEb21haW5E
b21haW5FdmVudERpc3BhdGNoZXIgKl9kb21haW5FdmVudERpc3BhdGNoZXI7Cit9CisKKy0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJv
bGxlciopY29udHJvbGxlcgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFz
ZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBf
Y29udHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQp
ZGVhbGxvYworeworICAgIFtfZG9tYWluSGFuZGxlciByZWxlYXNlXTsKKyAgICBbX2RvbWFpbkV2
ZW50RGlzcGF0Y2hlciByZWxlYXNlXTsKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0gKHZv
aWQpc2V0RG9tYWluSGFuZGxlcjooaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4p
aGFuZGxlcgoreworICAgIGlmIChoYW5kbGVyID09IF9kb21haW5IYW5kbGVyKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBbX2RvbWFpbkhhbmRsZXIgcmVsZWFzZV07CisgICAgX2RvbWFpbkhhbmRs
ZXIgPSBbaGFuZGxlciByZXRhaW5dOworCisgICAgYXV0byBhbHRlcm5hdGVEaXNwYXRjaGVyID0g
bWFrZVVuaXF1ZTxPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXI+KGhhbmRsZXIp
OworICAgIGF1dG8gYWx0ZXJuYXRlQWdlbnQgPSBtYWtlVW5pcXVlPEFsdGVybmF0ZURpc3BhdGNo
YWJsZUFnZW50PERvbWFpbkJhY2tlbmREaXNwYXRjaGVyLCBBbHRlcm5hdGVEb21haW5CYWNrZW5k
RGlzcGF0Y2hlcj4+KCJEb21haW4iX3MsICpfY29udHJvbGxlciwgV1RGTW92ZShhbHRlcm5hdGVE
aXNwYXRjaGVyKSk7CisgICAgX2NvbnRyb2xsZXItPmFwcGVuZEV4dHJhQWdlbnQoV1RGTW92ZShh
bHRlcm5hdGVBZ2VudCkpOworfQorCistIChpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5k
bGVyPilkb21haW5IYW5kbGVyCit7CisgICAgcmV0dXJuIF9kb21haW5IYW5kbGVyOworfQorCist
IChUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKilkb21haW5FdmVudERp
c3BhdGNoZXIKK3sKKyAgICBpZiAoIV9kb21haW5FdmVudERpc3BhdGNoZXIpCisgICAgICAgIF9k
b21haW5FdmVudERpc3BhdGNoZXIgPSBbW1Rlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlz
cGF0Y2hlciBhbGxvY10gaW5pdFdpdGhDb250cm9sbGVyOl9jb250cm9sbGVyXTsKKyAgICByZXR1
cm4gX2RvbWFpbkV2ZW50RGlzcGF0Y2hlcjsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sRXZlbnREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1w
b3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPHd0Zi9KU09OVmFs
dWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBU
ZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIKK3sKKyAgICBBdWdtZW50YWJs
ZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworfQorCistIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRy
b2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAg
ICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIg
PSBjb250cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKUV2ZW50Cit7Cisg
ICAgY29uc3QgRnJvbnRlbmRSb3V0ZXImIHJvdXRlciA9IF9jb250cm9sbGVyLT5mcm9udGVuZFJv
dXRlcigpOworCisgICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmpl
Y3Q6OmNyZWF0ZSgpOworICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRv
bWFpbi5FdmVudCJfcyk7CisgICAgcm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09O
U3RyaW5nKCkpOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVu
dERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxGb3Vu
ZGF0aW9uL0ZvdW5kYXRpb24uaD4KKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29s
SlNPTk9iamVjdC5oPgorCisKKworCisKKworCisKK0Bwcm90b2NvbCBUZXN0UHJvdG9jb2xEb21h
aW5Eb21haW5IYW5kbGVyIDxOU09iamVjdD4KK0BvcHRpb25hbAorLSAodm9pZClDb21tYW5kV2l0
aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1
Y2Nlc3NDYWxsYmFjazoodm9pZCheKSh2b2lkKSlzdWNjZXNzQ2FsbGJhY2s7CitAZW5kCisKK19f
YXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJv
dG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgOiBOU09iamVjdAorLSAodm9pZClFdmVu
dDsKK0BlbmQKKworCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBh
dGliaWxpdHlPYmplY3RzLmg+CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24KKy8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisj
aW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgorI2ltcG9ydCA8SmF2YVNj
cmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDx3dGYv
SlNPTlZhbHVlcy5oPgorCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50
RGlzcGF0Y2hlciAoUHJpdmF0ZSkKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6
KEluc3BlY3Rvcjo6QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyOwor
QGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorCisjIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24KKy8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgi
CisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+CisK
K25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+
CitPcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcm
IHZhbHVlKTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRv
bWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKwor
I2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2Vy
LmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5o
PgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisKKworCisKKworIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbFR5cGVzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlu
LWRlYnVnZ2FibGVUeXBlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVBy
b3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKyNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Cisj
aW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwor
CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW4t
dGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1yZXN1bHQgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9t
YWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tcmVzdWx0
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5lY2M3MjFjNTI4ZQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC9kb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJs
ZVR5cGUuanNvbi1yZXN1bHQKQEAgLTAsMCArMSwxMDMwIEBACisjIyMgQmVnaW4gRmlsZTogSW5z
cGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworLy8gRG9tYWluCitJ
bnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJEb21haW4iLCBudWxsKTsKK0luc3BlY3Rv
ckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJEb21haW4uQ29tbWFuZCIsIFsicGFnZSIsICJ3b3Jr
ZXIiXSwgW10sIFtdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudCgiRG9tYWluLkV2
ZW50IiwgbnVsbCwgW10pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbkRpc3BhdGNo
ZXIgPSBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRGlzcGF0Y2hlci5iaW5kKEluc3BlY3RvckJh
Y2tlbmQsICJEb21haW4iKTsKK0luc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkRvbWFp
biIsIFsicGFnZSJdKTsKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpz
CisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZS1tYXRjaGlu
Zy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisKK25hbWVz
cGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Citw
dWJsaWM6CisgICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3Bh
dGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNw
YXRjaGVyKTsgfQorICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNv
bnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KK3ByaXZhdGU6CisgICAg
UmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOworfTsKKworCitj
bGFzcyBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+QWx0ZXJuYXRlRG9tYWlu
QmFja2VuZERpc3BhdGNoZXIoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChsb25nIGNh
bGxJZCkgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyMjIyBFbmQgRmlsZTogVGVz
dEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFj
a2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21h
aW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJp
bmc7CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK2NsYXNz
IEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyOworI2VuZGlmIC8vIEVOQUJMRShJTlNQ
RUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCitjbGFzcyBEb21haW5CYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBDb21tYW5kKEVycm9yU3Ry
aW5nJikgPSAwOworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgfkRvbWFpbkJhY2tlbmREaXNwYXRj
aGVySGFuZGxlcigpOworfTsKKworY2xhc3MgRG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwg
OiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHN0
YXRpYyBSZWY8RG9tYWluQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hl
ciYsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIHZvaWQgZGlzcGF0Y2go
bG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYm
IG1lc3NhZ2UpIGZpbmFsOworcHJpdmF0ZToKKyAgICB2b2lkIENvbW1hbmQobG9uZyByZXF1ZXN0
SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisjaWYgRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCitwdWJsaWM6CisgICAgdm9pZCBzZXRBbHRlcm5h
dGVEaXNwYXRjaGVyKEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVE
aXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7
IH0KK3ByaXZhdGU6CisgICAgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIqIG1fYWx0
ZXJuYXRlRGlzcGF0Y2hlciB7IG51bGxwdHIgfTsKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK3ByaXZhdGU6CisgICAgRG9tYWluQmFja2VuZERpc3Bh
dGNoZXIoQmFja2VuZERpc3BhdGNoZXImLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIq
KTsKKyAgICBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQgeyBudWxscHRy
IH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEJh
Y2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNo
ZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRU
eXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Cisj
aW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjaW5j
bHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgorI2VuZGlmIC8vIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCituYW1lc3BhY2UgSW5zcGVjdG9y
IHsKKworRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+RG9tYWluQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyKCkgeyB9CisKK1JlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gRG9tYWlu
QmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3Bh
dGNoZXIsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCit7CisgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgRG9tYWluQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNo
ZXIsIGFnZW50KSk7Cit9CisKK0RvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpEb21haW5CYWNrZW5k
RGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIERvbWFpbkJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCisgICAgOiBTdXBwbGVtZW50YWxCYWNrZW5k
RGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKKyAgICAsIG1fYWdlbnQoYWdlbnQpCit7Cisg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKCJEb21h
aW4iX3MsIHRoaXMpOworfQorCit2b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRj
aChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+
JiYgbWVzc2FnZSkKK3sKKyAgICBSZWY8RG9tYWluQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3Qo
KnRoaXMpOworCisgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVyczsKKyAgICBtZXNz
YWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFyYW1ldGVycyk7CisKKyAgICBpZiAobWV0aG9k
ID09ICJDb21tYW5kIikgeworICAgICAgICBDb21tYW5kKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJh
bWV0ZXJzKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3Vu
ZCwgIidEb21haW4uIiArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKK30KKwordm9pZCBE
b21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpT
T046Ok9iamVjdD4mJikKK3sKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKKyAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7CisgICAgICAgIG1fYWx0ZXJu
YXRlRGlzcGF0Y2hlci0+Q29tbWFuZChyZXF1ZXN0SWQpOworICAgICAgICByZXR1cm47CisgICAg
fQorI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCisg
ICAgRXJyb3JTdHJpbmcgZXJyb3I7CisgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBtX2FnZW50LT5Db21tYW5kKGVycm9yKTsKKworICAg
IGlmICghZXJyb3IubGVuZ3RoKCkpCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRS
ZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOworICAgIGVsc2UKKyAg
ICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlz
cGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAK
KworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4t
ZGVidWdnYWJsZVR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIK
KyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgRnJvbnRlbmRSb3V0ZXI7CisK
K2NsYXNzIERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CitwdWJsaWM6CisgICAgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVyKEZyb250ZW5kUm91
dGVyJiBmcm9udGVuZFJvdXRlcikgOiBtX2Zyb250ZW5kUm91dGVyKGZyb250ZW5kUm91dGVyKSB7
IH0KKyAgICB2b2lkIEV2ZW50KCk7Citwcml2YXRlOgorICAgIEZyb250ZW5kUm91dGVyJiBtX2Zy
b250ZW5kUm91dGVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZp
bGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9u
dGVuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRv
bWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit2b2lkIERvbWFpbkZyb250
ZW5kRGlzcGF0Y2hlcjo6RXZlbnQoKQoreworICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNz
YWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5n
KCJtZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOworCisgICAgbV9mcm9udGVuZFJvdXRlci5z
ZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3Bw
CisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVi
dWdnYWJsZVR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclBy
b3RvY29sVHlwZXMuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKKworCisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKworCisKKworCisKKwor
Cit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xPYmplY3RzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRv
bWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisKKyNpbmNsdWRlIDx3dGYvT3B0
aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNw
ZWN0b3IgeworCituYW1lc3BhY2UgUHJvdG9jb2wgeworCisKKworfSAvLyBuYW1lc3BhY2UgUHJv
dG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sT2JqZWN0cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmRE
aXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRh
cmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2luY2x1ZGUgPHd0Zi9S
ZXRhaW5QdHIuaD4KKworQHByb3RvY29sIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI7
CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKK2NsYXNzIE9iakNJbnNwZWN0b3JEb21haW5C
YWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlz
cGF0Y2hlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgT2Jq
Q0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbERvbWFpbkRv
bWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KKyAgICB2b2lk
IENvbW1hbmQobG9uZyByZXF1ZXN0SWQpIGZpbmFsOworcHJpdmF0ZToKKyAgICBSZXRhaW5QdHI8
aWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNr
ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERp
c3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRh
cmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1w
b3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbEludGVybmFsLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
LmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7
CisKK3ZvaWQgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxv
bmcgcmVxdWVzdElkKQoreworICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9y
OkBzZWxlY3RvcihDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7
CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVz
dElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRG9tYWluLkNvbW1hbmQn
IHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVu
ZGluZ0Vycm9ycygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWQgZXJyb3JDYWxs
YmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCkt
PnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVy
RXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdF
cnJvcnMoKTsKKyAgICB9OworCisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKKyAgICAgICAg
YmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKSwgZmFsc2UpOworICAgIH07CisKKyAgICBbbV9kZWxlZ2F0ZSBDb21tYW5kV2l0
aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxi
YWNrXTsKK30KKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24uaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPFdlYklu
c3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRl
ZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVj
dAorQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNldERvbWFpbkhhbmRsZXI6
KSBpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiBkb21haW5IYW5kbGVyOworQHBy
b3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVu
dERpc3BhdGNoZXIgKmRvbWFpbkV2ZW50RGlzcGF0Y2hlcjsKK0BlbmQKKworCisjIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbi5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24uaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwu
aCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Cisj
aW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKwor
dXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24KK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9j
b250cm9sbGVyOworICAgIGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IF9kb21h
aW5IYW5kbGVyOworICAgIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAq
X2RvbWFpbkV2ZW50RGlzcGF0Y2hlcjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29u
dHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCit7Cisg
ICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBu
aWw7CisgICAgQVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250cm9sbGVyID0gY29udHJvbGxl
cjsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgW19kb21h
aW5IYW5kbGVyIHJlbGVhc2VdOworICAgIFtfZG9tYWluRXZlbnREaXNwYXRjaGVyIHJlbGVhc2Vd
OworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAodm9pZClzZXREb21haW5IYW5kbGVyOihp
ZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiloYW5kbGVyCit7CisgICAgaWYgKGhh
bmRsZXIgPT0gX2RvbWFpbkhhbmRsZXIpCisgICAgICAgIHJldHVybjsKKworICAgIFtfZG9tYWlu
SGFuZGxlciByZWxlYXNlXTsKKyAgICBfZG9tYWluSGFuZGxlciA9IFtoYW5kbGVyIHJldGFpbl07
CisKKyAgICBhdXRvIGFsdGVybmF0ZURpc3BhdGNoZXIgPSBtYWtlVW5pcXVlPE9iakNJbnNwZWN0
b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7CisgICAgYXV0byBhbHRlcm5hdGVB
Z2VudCA9IG1ha2VVbmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8RG9tYWluQmFja2Vu
ZERpc3BhdGNoZXIsIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyPj4oIkRvbWFpbiJf
cywgKl9jb250cm9sbGVyLCBXVEZNb3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIpKTsKKyAgICBfY29u
dHJvbGxlci0+YXBwZW5kRXh0cmFBZ2VudChXVEZNb3ZlKGFsdGVybmF0ZUFnZW50KSk7Cit9CisK
Ky0gKGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+KWRvbWFpbkhhbmRsZXIKK3sK
KyAgICByZXR1cm4gX2RvbWFpbkhhbmRsZXI7Cit9CisKKy0gKFRlc3RQcm90b2NvbERvbWFpbkRv
bWFpbkV2ZW50RGlzcGF0Y2hlciAqKWRvbWFpbkV2ZW50RGlzcGF0Y2hlcgoreworICAgIGlmICgh
X2RvbWFpbkV2ZW50RGlzcGF0Y2hlcikKKyAgICAgICAgX2RvbWFpbkV2ZW50RGlzcGF0Y2hlciA9
IFtbVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyIGFsbG9jXSBpbml0V2l0
aENvbnRyb2xsZXI6X2NvbnRyb2xsZXJdOworICAgIHJldHVybiBfZG9tYWluRXZlbnREaXNwYXRj
aGVyOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0
aW9uLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1t
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGUtbWF0
Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKwor
I2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDx3dGYvSlNP
TlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRp
b24gVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyCit7CisgICAgQXVnbWVu
dGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKK30KKworLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKilj
b250cm9sbGVyCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisg
ICAgICAgIHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250cm9s
bGVyID0gY29udHJvbGxlcjsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClFdmVudAor
eworICAgIGNvbnN0IEZyb250ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29udHJvbGxlci0+ZnJvbnRl
bmRSb3V0ZXIoKTsKKworICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3Ms
ICJEb21haW4uRXZlbnQiX3MpOworICAgIHJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRv
SlNPTlN0cmluZygpKTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
RXZlbnREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZS1tYXRjaGlu
Zy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKworI2lt
cG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgorCisKKworCisKKwor
CisKK0Bwcm90b2NvbCBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyIDxOU09iamVjdD4K
K0BvcHRpb25hbAorLSAodm9pZClDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNT
dHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKSh2b2lk
KSlzdWNjZXNzQ2FsbGJhY2s7CitAZW5kCisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJk
ZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3Bh
dGNoZXIgOiBOU09iamVjdAorLSAodm9pZClFdmVudDsKK0BlbmQKKworCisjaW1wb3J0IDxXZWJJ
bnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+CisKKyMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbElu
dGVybmFsLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0
VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNp
bXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCisjaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPHd0Zi9K
U09OVmFsdWVzLmg+CisKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnRE
aXNwYXRjaGVyIChQcml2YXRlKQorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjoo
SW5zcGVjdG9yOjpBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXI7CitA
ZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dh
YmxlVHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
KyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3Rv
Y29sQXJyYXlDb252ZXJzaW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordGVtcGxh
dGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgorT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJv
dG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7CisKK30gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisKKyMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4t
ZGVidWdnYWJsZVR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKworI2ltcG9y
dCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCisj
aW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorCit1
c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisKKworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdl
dFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJu
YWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0
IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorI2ltcG9ydCA8
d3RmL0Fzc2VydGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5h
bWVzcGFjZSBJbnNwZWN0b3I7CisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5t
bQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V4cGVjdGVkL2RvbWFpbi10YXJnZXRUeXBlcy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW4tdGFyZ2V0
VHlwZXMuanNvbi1yZXN1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu
LjgwNDFjMjdjMWJlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RvbWFpbi10YXJnZXRUeXBlcy5qc29uLXJl
c3VsdApAQCAtMCwwICsxLDEwMzAgQEAKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5k
Q29tbWFuZHMuanMKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFy
Z2V0VHlwZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisvLyBEb21haW4KK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIkRvbWFpbiIsIFsi
cGFnZSJdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJEb21haW4uQ29tbWFu
ZCIsIFsicGFnZSJdLCBbXSwgW10pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckV2ZW50KCJE
b21haW4uRXZlbnQiLCBbInBhZ2UiXSwgW10pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRv
bWFpbkRpc3BhdGNoZXIgPSBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRGlzcGF0Y2hlci5iaW5k
KEluc3BlY3RvckJhY2tlbmQsICJEb21haW4iKTsKK0luc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVE
b21haW4oIkRvbWFpbiIsIG51bGwpOworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29t
bWFuZHMuanMKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hl
cnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBl
cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFn
bWEgb25jZQorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisK
KyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2Ns
YXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldEJh
Y2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7
IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9CisgICAgQmFja2Vu
ZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5k
RGlzcGF0Y2hlci5nZXQoKTsgfQorcHJpdmF0ZToKKyAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNo
ZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Cit9OworCisKK2NsYXNzIEFsdGVybmF0ZURvbWFpbkJh
Y2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1
YmxpYzoKKyAgICB2aXJ0dWFsIH5BbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlcigpIHsg
fQorICAgIHZpcnR1YWwgdm9pZCBDb21tYW5kKGxvbmcgY2FsbElkKSA9IDA7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQorIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlcy5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0eXBlZGVmIFN0cmluZyBFcnJv
clN0cmluZzsKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQor
Y2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXI7CisjZW5kaWYgLy8gRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKK2NsYXNzIERvbWFpbkJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIENvbW1hbmQoRXJy
b3JTdHJpbmcmKSA9IDA7Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+RG9tYWluQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyKCk7Cit9OworCitjbGFzcyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlciBm
aW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNw
YXRjaGVyJiwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgdm9pZCBkaXNw
YXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmpl
Y3Q+JiYgbWVzc2FnZSkgZmluYWw7Citwcml2YXRlOgorICAgIHZvaWQgQ29tbWFuZChsb25nIHJl
cXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyNpZiBFTkFCTEUo
SU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK3B1YmxpYzoKKyAgICB2b2lkIHNldEFs
dGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIqIGFsdGVy
bmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0
Y2hlcjsgfQorcHJpdmF0ZToKKyAgICBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciog
bV9hbHRlcm5hdGVEaXNwYXRjaGVyIHsgbnVsbHB0ciB9OworI2VuZGlmIC8vIEVOQUJMRShJTlNQ
RUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorcHJpdmF0ZToKKyAgICBEb21haW5CYWNrZW5k
RGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlciopOworICAgIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2VudCB7IG51
bGxwdHIgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBU
ZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlz
cGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRh
cmdldFR5cGVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMu
aCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+
CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95
ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2Vu
ZERpc3BhdGNoZXJzLmgiCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitEb21haW5CYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXI6On5Eb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KKworUmVm
PERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRl
KEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgRG9tYWluQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyKiBhZ2VudCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEb21haW5C
YWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKK30KKworRG9tYWlu
QmFja2VuZERpc3BhdGNoZXI6OkRvbWFpbkJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRj
aGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBh
Z2VudCkKKyAgICA6IFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRj
aGVyKQorICAgICwgbV9hZ2VudChhZ2VudCkKK3sKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5y
ZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oIkRvbWFpbiJfcywgdGhpcyk7Cit9CisKK3ZvaWQg
RG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBT
dHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQoreworICAgIFJlZjxE
b21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CisKKyAgICBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiBwYXJhbWV0ZXJzOworICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9z
LCBwYXJhbWV0ZXJzKTsKKworICAgIGlmIChtZXRob2QgPT0gIkNvbW1hbmQiKSB7CisgICAgICAg
IENvbW1hbmQocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3Io
QmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi4iICsgbWV0aG9kICsg
Iicgd2FzIG5vdCBmb3VuZCIpOworfQorCit2b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpD
b21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQoreworI2lmIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorICAgIGlmIChtX2FsdGVybmF0
ZURpc3BhdGNoZXIpIHsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5Db21tYW5kKHJl
cXVlc3RJZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAg
ICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAg
IG1fYWdlbnQtPkNvbW1hbmQoZXJyb3IpOworCisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKKyAg
ICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92
ZShyZXN1bHQpLCBmYWxzZSk7CisgICAgZWxzZQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RG
TW92ZShlcnJvcikpOworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBG
aWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZy
b250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRv
bWFpbi10YXJnZXRUeXBlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5o
IgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBGcm9udGVuZFJvdXRlcjsK
KworY2xhc3MgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVyIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKK3B1YmxpYzoKKyAgICBEb21haW5Gcm9udGVuZERpc3BhdGNoZXIoRnJvbnRlbmRS
b3V0ZXImIGZyb250ZW5kUm91dGVyKSA6IG1fZnJvbnRlbmRSb3V0ZXIoZnJvbnRlbmRSb3V0ZXIp
IHsgfQorICAgIHZvaWQgRXZlbnQoKTsKK3ByaXZhdGU6CisgICAgRnJvbnRlbmRSb3V0ZXImIG1f
ZnJvbnRlbmRSb3V0ZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQg
RmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZy
b250ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
ZG9tYWluLXRhcmdldFR5cGVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RGcm9udGVuZERp
c3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVu
ZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIElu
c3BlY3RvciB7CisKK3ZvaWQgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVyOjpFdmVudCgpCit7Cisg
ICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OworICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJf
cyk7CisKKyAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09O
U3RyaW5nKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxl
OiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbE9iamVjdHMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10
YXJnZXRUeXBlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJv
dG9jb2xUeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBJ
bnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworCisKKworCisKKworCisK
K30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbE9iamVjdHMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9t
YWluLXRhcmdldFR5cGVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVj
dHMuaCIKKworI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK25hbWVzcGFjZSBQcm90b2NvbCB7
CisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorCisjIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZXMuanNvbgorLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8d3RmL1JldGFp
blB0ci5oPgorCitAcHJvdG9jb2wgVGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcjsKKwor
bmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworY2xhc3MgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tl
bmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRj
aGVyIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBPYmpDSW5z
cGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWlu
SGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQorICAgIHZvaWQgQ29t
bWFuZChsb25nIHJlcXVlc3RJZCkgZmluYWw7Citwcml2YXRlOgorICAgIFJldGFpblB0cjxpZDxU
ZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKK307CisKK30gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmRE
aXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0
Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0
VHlwZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisj
aW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVy
cy5oIgorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgor
CituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordm9pZCBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2Vu
ZERpc3BhdGNoZXI6OkNvbW1hbmQobG9uZyByZXF1ZXN0SWQpCit7CisgICAgaWYgKCFbbV9kZWxl
Z2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKENvbW1hbmRXaXRoRXJyb3JDYWxsYmFj
azpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVw
b3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RG
b3VuZCwgIidEb21haW4uQ29tbWFuZCcgd2FzIG5vdCBmb3VuZCJfcyk7CisgICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKKyAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJh
Y2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgIH07CisKKyAgICBpZCBzdWNjZXNz
Q2FsbGJhY2sgPSBeeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2Uo
cmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgfTsKKworICAg
IFttX2RlbGVnYXRlIENvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nl
c3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOworfQorCisKK30gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQor
CisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVzLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9y
L1Rlc3RQcm90b2NvbC5oPgorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIp
KSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0CitAcHJv
cGVydHkgKG5vbmF0b21pYywgcmV0YWluLCBzZXR0ZXI9c2V0RG9tYWluSGFuZGxlcjopIGlkPFRl
c3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IGRvbWFpbkhhbmRsZXI7CitAcHJvcGVydHkg
KG5vbmF0b21pYywgcmVhZG9ubHkpIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0
Y2hlciAqZG9tYWluRXZlbnREaXNwYXRjaGVyOworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xD
b25maWd1cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlu
LXRhcmdldFR5cGVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgorCisjaW1wb3J0ICJU
ZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3Bh
dGNoZXJzLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVB
Z2VudC5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250
cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVycy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVt
ZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgoreworICAgIEF1Z21lbnRhYmxlSW5z
cGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7CisgICAgaWQ8VGVzdFByb3RvY29sRG9tYWlu
RG9tYWluSGFuZGxlcj4gX2RvbWFpbkhhbmRsZXI7CisgICAgVGVzdFByb3RvY29sRG9tYWluRG9t
YWluRXZlbnREaXNwYXRjaGVyICpfZG9tYWluRXZlbnREaXNwYXRjaGVyOworfQorCistIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xs
ZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2Vs
ZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2Nv
bnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRl
YWxsb2MKK3sKKyAgICBbX2RvbWFpbkhhbmRsZXIgcmVsZWFzZV07CisgICAgW19kb21haW5FdmVu
dERpc3BhdGNoZXIgcmVsZWFzZV07CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistICh2b2lk
KXNldERvbWFpbkhhbmRsZXI6KGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+KWhh
bmRsZXIKK3sKKyAgICBpZiAoaGFuZGxlciA9PSBfZG9tYWluSGFuZGxlcikKKyAgICAgICAgcmV0
dXJuOworCisgICAgW19kb21haW5IYW5kbGVyIHJlbGVhc2VdOworICAgIF9kb21haW5IYW5kbGVy
ID0gW2hhbmRsZXIgcmV0YWluXTsKKworICAgIGF1dG8gYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IG1h
a2VVbmlxdWU8T2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyPihoYW5kbGVyKTsK
KyAgICBhdXRvIGFsdGVybmF0ZUFnZW50ID0gbWFrZVVuaXF1ZTxBbHRlcm5hdGVEaXNwYXRjaGFi
bGVBZ2VudDxEb21haW5CYWNrZW5kRGlzcGF0Y2hlciwgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERp
c3BhdGNoZXI+PigiRG9tYWluIl9zLCAqX2NvbnRyb2xsZXIsIFdURk1vdmUoYWx0ZXJuYXRlRGlz
cGF0Y2hlcikpOworICAgIF9jb250cm9sbGVyLT5hcHBlbmRFeHRyYUFnZW50KFdURk1vdmUoYWx0
ZXJuYXRlQWdlbnQpKTsKK30KKworLSAoaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxl
cj4pZG9tYWluSGFuZGxlcgoreworICAgIHJldHVybiBfZG9tYWluSGFuZGxlcjsKK30KKworLSAo
VGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyICopZG9tYWluRXZlbnREaXNw
YXRjaGVyCit7CisgICAgaWYgKCFfZG9tYWluRXZlbnREaXNwYXRjaGVyKQorICAgICAgICBfZG9t
YWluRXZlbnREaXNwYXRjaGVyID0gW1tUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3Bh
dGNoZXIgYWxsb2NdIGluaXRXaXRoQ29udHJvbGxlcjpfY29udHJvbGxlcl07CisgICAgcmV0dXJu
IF9kb21haW5FdmVudERpc3BhdGNoZXI7Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bEV2ZW50RGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBk
b21haW4tdGFyZ2V0VHlwZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+
CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJv
dG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIKK3sKKyAgICBBdWdtZW50YWJsZUluc3Bl
Y3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIK
K3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0
dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250
cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKUV2ZW50Cit7CisgICAgY29u
c3QgRnJvbnRlbmRSb3V0ZXImIHJvdXRlciA9IF9jb250cm9sbGVyLT5mcm9udGVuZFJvdXRlcigp
OworCisgICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOworICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5F
dmVudCJfcyk7CisgICAgcm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5n
KCkpOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3Bh
dGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlcy5qc29uCisvLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91
bmRhdGlvbi5oPgorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0
Lmg+CisKKworCisKKworCisKKworQHByb3RvY29sIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhh
bmRsZXIgPE5TT2JqZWN0PgorQG9wdGlvbmFsCistICh2b2lkKUNvbW1hbmRXaXRoRXJyb3JDYWxs
YmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxi
YWNrOih2b2lkKF4pKHZvaWQpKXN1Y2Nlc3NDYWxsYmFjazsKK0BlbmQKKworX19hdHRyaWJ1dGVf
XygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbERvbWFp
bkRvbWFpbkV2ZW50RGlzcGF0Y2hlciA6IE5TT2JqZWN0CistICh2b2lkKUV2ZW50OworQGVuZAor
CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9i
amVjdHMuaD4KKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAorCisjIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGRvbWFpbi10YXJnZXRUeXBlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFBy
b3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21l
bnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4K
KworQGludGVyZmFjZSBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKFBy
aXZhdGUpCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihJbnNwZWN0b3I6OkF1
Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcjsKK0BlbmQKKworCisjIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZG9tYWluLXRhcmdldFR5cGVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0IDxXZWJJbnNw
ZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0
b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+CitPcHRpb25hbDxPYmpDRW51
bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKKworfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5t
bQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlcy5q
c29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wu
aCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKKyNpbXBvcnQgPFdlYkluc3Bl
Y3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJ
bnNwZWN0b3I7CisKKworCisKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZXMuanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJv
dG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMu
aCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+
CisjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4K
KwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXpl
cy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC9kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24tcmVz
dWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jZWEyMGYzZmNmZgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9leHBlY3RlZC9kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24t
cmVzdWx0CkBAIC0wLDAgKzEsMTQyMiBAQAorIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tl
bmRDb21tYW5kcy5qcworLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMt
d2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisvLyBOZXR3b3JrMQorSW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rl
ckRvbWFpbigiTmV0d29yazEiLCBudWxsKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21t
YW5kKCJOZXR3b3JrMS5sb2FkUmVzb3VyY2UxIiwgbnVsbCwgW10sIFtdKTsKK0luc3BlY3RvckJh
Y2tlbmQuYWN0aXZhdGVEb21haW4oIk5ldHdvcmsxIiwgbnVsbCk7CisKKy8vIE5ldHdvcmszCitJ
bnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJOZXR3b3JrMyIsIG51bGwpOworSW5zcGVj
dG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIk5ldHdvcmszLmxvYWRSZXNvdXJjZTEiLCBudWxs
LCBbXSwgW10pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIk5ldHdvcmszLmxv
YWRSZXNvdXJjZTIiLCBudWxsLCBbXSwgW10pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNv
bW1hbmQoIk5ldHdvcmszLmxvYWRSZXNvdXJjZTMiLCBudWxsLCBbXSwgW10pOworSW5zcGVjdG9y
QmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIk5ldHdvcmszLmxvYWRSZXNvdXJjZTQiLCBudWxsLCBb
XSwgW10pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIk5ldHdvcmszLmxvYWRS
ZXNvdXJjZTUiLCBudWxsLCBbXSwgW10pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1h
bmQoIk5ldHdvcmszLmxvYWRSZXNvdXJjZTYiLCBudWxsLCBbXSwgW10pOworSW5zcGVjdG9yQmFj
a2VuZC5yZWdpc3RlckNvbW1hbmQoIk5ldHdvcmszLmxvYWRSZXNvdXJjZTciLCBudWxsLCBbXSwg
W10pOworSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiTmV0d29yazMiLCBudWxsKTsK
KyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNl
CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworI2luY2x1
ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JGcm9udGVuZFJvdXRlci5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgQWx0
ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHZvaWQgc2V0QmFja2VuZERp
c3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNr
ZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KKyAgICBCYWNrZW5kRGlzcGF0
Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRj
aGVyLmdldCgpOyB9Citwcml2YXRlOgorICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9i
YWNrZW5kRGlzcGF0Y2hlcjsKK307CisKKworY2xhc3MgQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5k
RGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6
CisgICAgdmlydHVhbCB+QWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQor
ICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UxKGxvbmcgY2FsbElkKSA9IDA7Cit9OworY2xh
c3MgQWx0ZXJuYXRlTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+QWx0ZXJuYXRlTmV0d29y
azNCYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2Ux
KGxvbmcgY2FsbElkKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTIobG9uZyBj
YWxsSWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMyhsb25nIGNhbGxJZCkg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2U0KGxvbmcgY2FsbElkKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTUobG9uZyBjYWxsSWQpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgbG9hZFJlc291cmNlNihsb25nIGNhbGxJZCkgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBsb2FkUmVzb3VyY2U3KGxvbmcgY2FsbElkKSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENI
RVJTKQorIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKwor
IyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcg
RXJyb3JTdHJpbmc7CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKK2NsYXNzIEFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI7CitjbGFzcyBBbHRl
cm5hdGVOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCitjbGFzcyBOZXR3b3JrMUJhY2tlbmREaXNwYXRj
aGVySGFuZGxlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTEoRXJy
b3JTdHJpbmcmKSA9IDA7Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+TmV0d29yazFCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIoKTsKK307CisKK2NsYXNzIE5ldHdvcmszQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMShFcnJv
clN0cmluZyYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMihFcnJvclN0cmlu
ZyYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMyhFcnJvclN0cmluZyYpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlNChFcnJvclN0cmluZyYpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlNShFcnJvclN0cmluZyYpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgbG9hZFJlc291cmNlNihFcnJvclN0cmluZyYpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgbG9hZFJlc291cmNlNyhFcnJvclN0cmluZyYpID0gMDsKK3Byb3RlY3RlZDoKKyAgICB2aXJ0
dWFsIH5OZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOworfTsKKworY2xhc3MgTmV0
d29yazFCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5k
RGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxOZXR3b3JrMUJhY2tlbmREaXNw
YXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBOZXR3b3JrMUJhY2tlbmREaXNwYXRj
aGVySGFuZGxlciopOworICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0
cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOworcHJpdmF0
ZToKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTEobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpP
YmplY3Q+JiYgcGFyYW1ldGVycyk7CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCitwdWJsaWM6CisgICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVy
bmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9h
bHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQorcHJpdmF0ZToKKyAg
ICBBbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKiBtX2FsdGVybmF0ZURpc3BhdGNo
ZXIgeyBudWxscHRyIH07CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCitwcml2YXRlOgorICAgIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoQmFja2Vu
ZERpc3BhdGNoZXImLCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIE5l
dHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50IHsgbnVsbHB0ciB9OworfTsK
KworY2xhc3MgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVt
ZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxOZXR3b3Jr
M0JhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBOZXR3b3JrM0Jh
Y2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0
SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZp
bmFsOworcHJpdmF0ZToKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTEobG9uZyByZXF1ZXN0SWQsIFJl
ZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisgICAgdm9pZCBsb2FkUmVzb3VyY2Uy
KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOworICAg
IHZvaWQgbG9hZFJlc291cmNlMyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4m
JiBwYXJhbWV0ZXJzKTsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTQobG9uZyByZXF1ZXN0SWQsIFJl
ZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisgICAgdm9pZCBsb2FkUmVzb3VyY2U1
KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOworICAg
IHZvaWQgbG9hZFJlc291cmNlNihsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4m
JiBwYXJhbWV0ZXJzKTsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTcobG9uZyByZXF1ZXN0SWQsIFJl
ZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCitwdWJsaWM6CisgICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNw
YXRjaGVyKEFsdGVybmF0ZU5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3Bh
dGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQor
cHJpdmF0ZToKKyAgICBBbHRlcm5hdGVOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyKiBtX2FsdGVy
bmF0ZURpc3BhdGNoZXIgeyBudWxscHRyIH07CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCitwcml2YXRlOgorICAgIE5ldHdvcmszQmFja2VuZERpc3Bh
dGNoZXIoQmFja2VuZERpc3BhdGNoZXImLCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxl
ciopOworICAgIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50IHsgbnVs
bHB0ciB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRl
c3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNw
YXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdp
dGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RCYWNr
ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZy
b250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3
dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNp
ZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyNpbmNsdWRlICJUZXN0
QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitOZXR3
b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6fk5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyKCkgeyB9CitOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6fk5ldHdvcmsz
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9CisKK1JlZjxOZXR3b3JrMUJhY2tlbmREaXNw
YXRjaGVyPiBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoQmFja2VuZERpc3BhdGNo
ZXImIGJhY2tlbmREaXNwYXRjaGVyLCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciog
YWdlbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTmV0d29yazFCYWNrZW5kRGlzcGF0
Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKK30KKworTmV0d29yazFCYWNrZW5kRGlz
cGF0Y2hlcjo6TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFj
a2VuZERpc3BhdGNoZXIsIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkK
KyAgICA6IFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQor
ICAgICwgbV9hZ2VudChhZ2VudCkKK3sKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3Rl
ckRpc3BhdGNoZXJGb3JEb21haW4oIk5ldHdvcmsxIl9zLCB0aGlzKTsKK30KKwordm9pZCBOZXR3
b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3Ry
aW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKK3sKKyAgICBSZWY8TmV0
d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CisKKyAgICBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiBwYXJhbWV0ZXJzOworICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9z
LCBwYXJhbWV0ZXJzKTsKKworICAgIGlmIChtZXRob2QgPT0gImxvYWRSZXNvdXJjZTEiKSB7Cisg
ICAgICAgIGxvYWRSZXNvdXJjZTEocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFBy
b3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmsx
LiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7Cit9CisKK3ZvaWQgTmV0d29yazFCYWNr
ZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046
Ok9iamVjdD4mJikKK3sKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKKyAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7CisgICAgICAgIG1fYWx0ZXJuYXRl
RGlzcGF0Y2hlci0+bG9hZFJlc291cmNlMShyZXF1ZXN0SWQpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQor
CisgICAgRXJyb3JTdHJpbmcgZXJyb3I7CisgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0g
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2UxKGVycm9y
KTsKKworICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOworICAg
IGVsc2UKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihC
YWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKK30KKworUmVm
PE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI+IE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmNy
ZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIE5ldHdvcmszQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBO
ZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOworfQor
CitOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyKEJh
Y2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgTmV0d29yazNCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXIqIGFnZW50KQorICAgIDogU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIo
YmFja2VuZERpc3BhdGNoZXIpCisgICAgLCBtX2FnZW50KGFnZW50KQoreworICAgIG1fYmFja2Vu
ZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbigiTmV0d29yazMiX3MsIHRo
aXMpOworfQorCit2b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcg
cmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNz
YWdlKQoreworICAgIFJlZjxOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlz
KTsKKworICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7CisgICAgbWVzc2FnZS0+
Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRlcnMpOworCisgICAgdHlwZWRlZiB2b2lkIChO
ZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjoqQ2FsbEhhbmRsZXIpKGxvbmcgcmVxdWVzdElkLCBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpOworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJp
bmcsIENhbGxIYW5kbGVyPiBEaXNwYXRjaE1hcDsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
RGlzcGF0Y2hNYXA+IGRpc3BhdGNoTWFwOworICAgIGlmIChkaXNwYXRjaE1hcC5nZXQoKS5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IHN0cnVjdCBNZXRob2RUYWJsZSB7CisgICAg
ICAgICAgICBjb25zdCBjaGFyKiBuYW1lOworICAgICAgICAgICAgQ2FsbEhhbmRsZXIgaGFuZGxl
cjsKKyAgICAgICAgfSBjb21tYW5kc1tdID0geworICAgICAgICAgICAgeyAibG9hZFJlc291cmNl
MSIsICZOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UxIH0sCisgICAgICAg
ICAgICB7ICJsb2FkUmVzb3VyY2UyIiwgJk5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRS
ZXNvdXJjZTIgfSwKKyAgICAgICAgICAgIHsgImxvYWRSZXNvdXJjZTMiLCAmTmV0d29yazNCYWNr
ZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMyB9LAorICAgICAgICAgICAgeyAibG9hZFJlc291
cmNlNCIsICZOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U0IH0sCisgICAg
ICAgICAgICB7ICJsb2FkUmVzb3VyY2U1IiwgJk5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6Omxv
YWRSZXNvdXJjZTUgfSwKKyAgICAgICAgICAgIHsgImxvYWRSZXNvdXJjZTYiLCAmTmV0d29yazNC
YWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNiB9LAorICAgICAgICAgICAgeyAibG9hZFJl
c291cmNlNyIsICZOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U3IH0sCisg
ICAgICAgIH07CisgICAgICAgIHNpemVfdCBsZW5ndGggPSBXVEZfQVJSQVlfTEVOR1RIKGNvbW1h
bmRzKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKKyAgICAg
ICAgICAgIGRpc3BhdGNoTWFwLmdldCgpLmFkZChjb21tYW5kc1tpXS5uYW1lLCBjb21tYW5kc1tp
XS5oYW5kbGVyKTsKKyAgICB9CisKKyAgICBhdXRvIGZpbmRSZXN1bHQgPSBkaXNwYXRjaE1hcC5n
ZXQoKS5maW5kKG1ldGhvZCk7CisgICAgaWYgKGZpbmRSZXN1bHQgPT0gZGlzcGF0Y2hNYXAuZ2V0
KCkuZW5kKCkpIHsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xF
cnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMuIiArIG1l
dGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
ICgoKnRoaXMpLipmaW5kUmVzdWx0LT52YWx1ZSkocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRl
cnMpKTsKK30KKwordm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2Ux
KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQoreworI2lmIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorICAgIGlmIChtX2FsdGVybmF0ZURpc3Bh
dGNoZXIpIHsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2UxKHJl
cXVlc3RJZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAg
ICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAg
IG1fYWdlbnQtPmxvYWRSZXNvdXJjZTEoZXJyb3IpOworCisgICAgaWYgKCFlcnJvci5sZW5ndGgo
KSkKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwg
V1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7CisgICAgZWxzZQorICAgICAgICBtX2JhY2tlbmREaXNw
YXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJv
ciwgV1RGTW92ZShlcnJvcikpOworfQorCit2b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6
OmxvYWRSZXNvdXJjZTIobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCit7
CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisgICAgaWYgKG1f
YWx0ZXJuYXRlRGlzcGF0Y2hlcikgeworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxv
YWRSZXNvdXJjZTIocmVxdWVzdElkKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZiAv
LyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworICAgIEVycm9yU3Ry
aW5nIGVycm9yOworICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6
Y3JlYXRlKCk7CisgICAgbV9hZ2VudC0+bG9hZFJlc291cmNlMihlcnJvcik7CisKKyAgICBpZiAo
IWVycm9yLmxlbmd0aCgpKQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9u
c2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKKyAgICBlbHNlCisgICAgICAg
IG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNo
ZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Cit9CisKK3ZvaWQgTmV0d29yazNCYWNr
ZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046
Ok9iamVjdD4mJikKK3sKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKKyAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7CisgICAgICAgIG1fYWx0ZXJuYXRl
RGlzcGF0Y2hlci0+bG9hZFJlc291cmNlMyhyZXF1ZXN0SWQpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQor
CisgICAgRXJyb3JTdHJpbmcgZXJyb3I7CisgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0g
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2UzKGVycm9y
KTsKKworICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOworICAg
IGVsc2UKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihC
YWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKK30KKwordm9p
ZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U0KGxvbmcgcmVxdWVzdElk
LCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQoreworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQorICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKKyAgICAg
ICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2U0KHJlcXVlc3RJZCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCisKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWY8SlNPTjo6T2Jq
ZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYWdlbnQtPmxvYWRS
ZXNvdXJjZTQoZXJyb3IpOworCisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKKyAgICAgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQp
LCBmYWxzZSk7CisgICAgZWxzZQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQ
cm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJv
cikpOworfQorCit2b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTUo
bG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCit7CisjaWYgRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0
Y2hlcikgeworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZTUocmVx
dWVzdElkKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAg
IFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAg
bV9hZ2VudC0+bG9hZFJlc291cmNlNShlcnJvcik7CisKKyAgICBpZiAoIWVycm9yLmxlbmd0aCgp
KQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBX
VEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2VuZERpc3Bh
dGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9y
LCBXVEZNb3ZlKGVycm9yKSk7Cit9CisKK3ZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6
bG9hZFJlc291cmNlNihsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKK3sK
KyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyAgICBpZiAobV9h
bHRlcm5hdGVEaXNwYXRjaGVyKSB7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9h
ZFJlc291cmNlNihyZXF1ZXN0SWQpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmIC8v
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCisgICAgRXJyb3JTdHJp
bmcgZXJyb3I7CisgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKTsKKyAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2U2KGVycm9yKTsKKworICAgIGlmICgh
ZXJyb3IubGVuZ3RoKCkpCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25z
ZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOworICAgIGVsc2UKKyAgICAgICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hl
cjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKK30KKwordm9pZCBOZXR3b3JrM0JhY2tl
bmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U3KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6
T2JqZWN0PiYmKQoreworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQorICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKKyAgICAgICAgbV9hbHRlcm5hdGVE
aXNwYXRjaGVyLT5sb2FkUmVzb3VyY2U3KHJlcXVlc3RJZCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisK
KyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBK
U09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTcoZXJyb3Ip
OworCisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7CisgICAg
ZWxzZQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJh
Y2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOworfQorCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNo
ZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1h
bmQtc2l6ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNs
dWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgor
CituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgRnJvbnRlbmRSb3V0ZXI7CisKK30gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVy
cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5k
LXNpemVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgi
CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisK
K30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERp
c3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29t
bWFuZC1zaXplcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJv
dG9jb2xUeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBJ
bnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworCisKKworCisvLyBUeXBl
ZGVmcy4KK25hbWVzcGFjZSBOZXR3b3JrMiB7CisvKiBVbmlxdWUgbG9hZGVyIGlkZW50aWZpZXIu
ICovCit0eXBlZGVmIFN0cmluZyBMb2FkZXJJZDsKK30gLy8gTmV0d29yazIKKy8vIEVuZCBvZiB0
eXBlZGVmcy4KKworCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisKKyNpbmNsdWRlIDx3dGYvT3B0
aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNw
ZWN0b3IgeworCituYW1lc3BhY2UgUHJvdG9jb2wgeworCisKKworfSAvLyBuYW1lc3BhY2UgUHJv
dG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sT2JqZWN0cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmRE
aXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13
aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisK
K0Bwcm90b2NvbCBUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI7CitAcHJvdG9jb2wg
VGVzdFByb3RvY29sTmV0d29yazNEb21haW5IYW5kbGVyOworCituYW1lc3BhY2UgSW5zcGVjdG9y
IHsKKworCitjbGFzcyBPYmpDSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciBmaW5h
bCA6IHB1YmxpYyBBbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyIHsKKyAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBPYmpDSW5zcGVjdG9yTmV0d29yazFC
YWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+IGhh
bmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KKyAgICB2b2lkIGxvYWRSZXNvdXJjZTEo
bG9uZyByZXF1ZXN0SWQpIGZpbmFsOworcHJpdmF0ZToKKyAgICBSZXRhaW5QdHI8aWQ8VGVzdFBy
b3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKK307CisKK2NsYXNzIE9i
akNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVy
bmF0ZU5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOworcHVibGljOgorICAgIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVy
KGlkPFRlc3RQcm90b2NvbE5ldHdvcmszRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVn
YXRlID0gaGFuZGxlcjsgfQorICAgIHZvaWQgbG9hZFJlc291cmNlMShsb25nIHJlcXVlc3RJZCkg
ZmluYWw7CisgICAgdm9pZCBsb2FkUmVzb3VyY2UyKGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKKyAg
ICB2b2lkIGxvYWRSZXNvdXJjZTMobG9uZyByZXF1ZXN0SWQpIGZpbmFsOworICAgIHZvaWQgbG9h
ZFJlc291cmNlNChsb25nIHJlcXVlc3RJZCkgZmluYWw7CisgICAgdm9pZCBsb2FkUmVzb3VyY2U1
KGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTYobG9uZyByZXF1
ZXN0SWQpIGZpbmFsOworICAgIHZvaWQgbG9hZFJlc291cmNlNyhsb25nIHJlcXVlc3RJZCkgZmlu
YWw7Citwcml2YXRlOgorICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFp
bkhhbmRsZXI+PiBtX2RlbGVnYXRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisK
KyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMu
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0
ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgor
CisjaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorCituYW1l
c3BhY2UgSW5zcGVjdG9yIHsKKwordm9pZCBPYmpDSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlz
cGF0Y2hlcjo6bG9hZFJlc291cmNlMShsb25nIHJlcXVlc3RJZCkKK3sKKyAgICBpZiAoIVttX2Rl
bGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IobG9hZFJlc291cmNlMVdpdGhFcnJv
ckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1l
dGhvZE5vdEZvdW5kLCAiJ05ldHdvcmsxLmxvYWRSZXNvdXJjZTEnIHdhcyBub3QgZm91bmQiX3Mp
OworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcg
KmVycm9yKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJy
b3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICB9Owor
CisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2Up
OworICAgIH07CisKKyAgICBbbV9kZWxlZ2F0ZSBsb2FkUmVzb3VyY2UxV2l0aEVycm9yQ2FsbGJh
Y2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKK30KKwor
Cit2b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3Vy
Y2UxKGxvbmcgcmVxdWVzdElkKQoreworICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1Nl
bGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2UxV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0Nh
bGxiYWNrOildKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29s
RXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0
d29yazMubG9hZFJlc291cmNlMScgd2FzIG5vdCBmb3VuZCJfcyk7CisgICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKKyAgICAgICAg
YmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tl
bmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgIH07CisKKyAgICBpZCBzdWNjZXNzQ2Fs
bGJhY2sgPSBeeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVx
dWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgfTsKKworICAgIFtt
X2RlbGVnYXRlIGxvYWRSZXNvdXJjZTFXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1
Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOworfQorCit2b2lkIE9iakNJbnNwZWN0b3JO
ZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UyKGxvbmcgcmVxdWVzdElkKQor
eworICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2Fk
UmVzb3VyY2UyV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7CisgICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNr
ZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMubG9hZFJlc291cmNlMicg
d2FzIG5vdCBmb3VuZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5k
aW5nRXJyb3JzKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZCBlcnJvckNhbGxi
YWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJF
cnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vy
cm9ycygpOworICAgIH07CisKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeeworICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgfTsKKworICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJj
ZTJXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNz
Q2FsbGJhY2tdOworfQorCit2b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRj
aGVyOjpsb2FkUmVzb3VyY2UzKGxvbmcgcmVxdWVzdElkKQoreworICAgIGlmICghW21fZGVsZWdh
dGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2UzV2l0aEVycm9yQ2Fs
bGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCkt
PnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9k
Tm90Rm91bmQsICInTmV0d29yazMubG9hZFJlc291cmNlMycgd2FzIG5vdCBmb3VuZCJfcyk7Cisg
ICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJy
b3IpIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihy
ZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAg
ICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgIH07CisKKyAg
ICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5z
ZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7Cisg
ICAgfTsKKworICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZTNXaXRoRXJyb3JDYWxsYmFjazpl
cnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOworfQorCit2b2lk
IE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U0KGxv
bmcgcmVxdWVzdElkKQoreworICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9y
OkBzZWxlY3Rvcihsb2FkUmVzb3VyY2U0V2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNr
OildKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3Io
cmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMu
bG9hZFJlc291cmNlNCcgd2FzIG5vdCBmb3VuZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKKyAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNw
YXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigp
LT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgIH07CisKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sg
PSBeeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElk
LCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgfTsKKworICAgIFttX2RlbGVn
YXRlIGxvYWRSZXNvdXJjZTRXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3ND
YWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOworfQorCit2b2lkIE9iakNJbnNwZWN0b3JOZXR3b3Jr
M0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U1KGxvbmcgcmVxdWVzdElkKQoreworICAg
IGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3Vy
Y2U1V2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7CisgICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlz
cGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMubG9hZFJlc291cmNlNScgd2FzIG5v
dCBmb3VuZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJy
b3JzKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZCBlcnJvckNhbGxiYWNrID0g
XihOU1N0cmluZyAqZXJyb3IpIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0
UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwg
ZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygp
OworICAgIH07CisKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeeworICAgICAgICBiYWNrZW5k
RGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpLCBmYWxzZSk7CisgICAgfTsKKworICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZTVXaXRo
RXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJh
Y2tdOworfQorCit2b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjps
b2FkUmVzb3VyY2U2KGxvbmcgcmVxdWVzdElkKQoreworICAgIGlmICghW21fZGVsZWdhdGUgcmVz
cG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2U2V2l0aEVycm9yQ2FsbGJhY2s6
c3VjY2Vzc0NhbGxiYWNrOildKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9y
dFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91
bmQsICInTmV0d29yazMubG9hZFJlc291cmNlNicgd2FzIG5vdCBmb3VuZCJfcyk7CisgICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsK
KyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0
SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgIH07CisKKyAgICBpZCBz
dWNjZXNzQ2FsbGJhY2sgPSBeeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVz
cG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgfTsK
KworICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZTZXaXRoRXJyb3JDYWxsYmFjazplcnJvckNh
bGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOworfQorCit2b2lkIE9iakNJ
bnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U3KGxvbmcgcmVx
dWVzdElkKQoreworICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxl
Y3Rvcihsb2FkUmVzb3VyY2U3V2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7
CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVz
dElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMubG9hZFJl
c291cmNlNycgd2FzIG5vdCBmb3VuZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCkt
PnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZCBl
cnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKKyAgICAgICAgYmFja2VuZERpc3Bh
dGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVy
OjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5k
UGVuZGluZ0Vycm9ycygpOworICAgIH07CisKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeewor
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgfTsKKworICAgIFttX2RlbGVnYXRlIGxv
YWRSZXNvdXJjZTdXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFj
azpzdWNjZXNzQ2FsbGJhY2tdOworfQorCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisj
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorCisjIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPFdlYklu
c3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRl
ZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVj
dAorQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNldE5ldHdvcmsxSGFuZGxl
cjopIGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4gbmV0d29yazFIYW5kbGVy
OworQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNldE5ldHdvcmszSGFuZGxl
cjopIGlkPFRlc3RQcm90b2NvbE5ldHdvcmszRG9tYWluSGFuZGxlcj4gbmV0d29yazNIYW5kbGVy
OworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisK
KyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXpl
cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBv
cnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29s
SW50ZXJuYWwuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgor
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgor
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXJzLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRl
c3RQcm90b2NvbENvbmZpZ3VyYXRpb24KK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRy
b2xsZXIqIF9jb250cm9sbGVyOworICAgIGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFu
ZGxlcj4gX25ldHdvcmsxSGFuZGxlcjsKKyAgICBpZDxUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFp
bkhhbmRsZXI+IF9uZXR3b3JrM0hhbmRsZXI7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0
aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgor
eworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1
cm4gbmlsOworICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRy
b2xsZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIFtf
bmV0d29yazFIYW5kbGVyIHJlbGVhc2VdOworICAgIFtfbmV0d29yazNIYW5kbGVyIHJlbGVhc2Vd
OworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAodm9pZClzZXROZXR3b3JrMUhhbmRsZXI6
KGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4paGFuZGxlcgoreworICAgIGlm
IChoYW5kbGVyID09IF9uZXR3b3JrMUhhbmRsZXIpCisgICAgICAgIHJldHVybjsKKworICAgIFtf
bmV0d29yazFIYW5kbGVyIHJlbGVhc2VdOworICAgIF9uZXR3b3JrMUhhbmRsZXIgPSBbaGFuZGxl
ciByZXRhaW5dOworCisgICAgYXV0byBhbHRlcm5hdGVEaXNwYXRjaGVyID0gbWFrZVVuaXF1ZTxP
YmpDSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7CisgICAgYXV0
byBhbHRlcm5hdGVBZ2VudCA9IG1ha2VVbmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8
TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciwgQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0
Y2hlcj4+KCJOZXR3b3JrMSJfcywgKl9jb250cm9sbGVyLCBXVEZNb3ZlKGFsdGVybmF0ZURpc3Bh
dGNoZXIpKTsKKyAgICBfY29udHJvbGxlci0+YXBwZW5kRXh0cmFBZ2VudChXVEZNb3ZlKGFsdGVy
bmF0ZUFnZW50KSk7Cit9CisKKy0gKGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxl
cj4pbmV0d29yazFIYW5kbGVyCit7CisgICAgcmV0dXJuIF9uZXR3b3JrMUhhbmRsZXI7Cit9CisK
Ky0gKHZvaWQpc2V0TmV0d29yazNIYW5kbGVyOihpZDxUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFp
bkhhbmRsZXI+KWhhbmRsZXIKK3sKKyAgICBpZiAoaGFuZGxlciA9PSBfbmV0d29yazNIYW5kbGVy
KQorICAgICAgICByZXR1cm47CisKKyAgICBbX25ldHdvcmszSGFuZGxlciByZWxlYXNlXTsKKyAg
ICBfbmV0d29yazNIYW5kbGVyID0gW2hhbmRsZXIgcmV0YWluXTsKKworICAgIGF1dG8gYWx0ZXJu
YXRlRGlzcGF0Y2hlciA9IG1ha2VVbmlxdWU8T2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERp
c3BhdGNoZXI+KGhhbmRsZXIpOworICAgIGF1dG8gYWx0ZXJuYXRlQWdlbnQgPSBtYWtlVW5pcXVl
PEFsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50PE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIsIEFs
dGVybmF0ZU5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI+PigiTmV0d29yazMiX3MsICpfY29udHJv
bGxlciwgV1RGTW92ZShhbHRlcm5hdGVEaXNwYXRjaGVyKSk7CisgICAgX2NvbnRyb2xsZXItPmFw
cGVuZEV4dHJhQWdlbnQoV1RGTW92ZShhbHRlcm5hdGVBZ2VudCkpOworfQorCistIChpZDxUZXN0
UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkhhbmRsZXI+KW5ldHdvcmszSGFuZGxlcgoreworICAgIHJl
dHVybiBfbmV0d29yazNIYW5kbGVyOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xF
dmVudERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9t
YWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgi
CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8d3Rm
L0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisjIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlu
cy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgor
CisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+CisKKworCisK
KworCisKKworQHByb3RvY29sIFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlciA8TlNP
YmplY3Q+CitAb3B0aW9uYWwKKy0gKHZvaWQpbG9hZFJlc291cmNlMVdpdGhFcnJvckNhbGxiYWNr
Oih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6
KHZvaWQoXikodm9pZCkpc3VjY2Vzc0NhbGxiYWNrOworQGVuZAorCitAcHJvdG9jb2wgVGVzdFBy
b3RvY29sTmV0d29yazNEb21haW5IYW5kbGVyIDxOU09iamVjdD4KK0BvcHRpb25hbAorLSAodm9p
ZClsb2FkUmVzb3VyY2UxV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9y
KSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKSh2b2lkKSlzdWNjZXNzQ2Fs
bGJhY2s7CistICh2b2lkKWxvYWRSZXNvdXJjZTJXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShO
U1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKHZv
aWQpKXN1Y2Nlc3NDYWxsYmFjazsKKy0gKHZvaWQpbG9hZFJlc291cmNlM1dpdGhFcnJvckNhbGxi
YWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJh
Y2s6KHZvaWQoXikodm9pZCkpc3VjY2Vzc0NhbGxiYWNrOworLSAodm9pZClsb2FkUmVzb3VyY2U0
V2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNr
IHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKSh2b2lkKSlzdWNjZXNzQ2FsbGJhY2s7CistICh2b2lk
KWxvYWRSZXNvdXJjZTVXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3Ip
KWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKHZvaWQpKXN1Y2Nlc3NDYWxs
YmFjazsKKy0gKHZvaWQpbG9hZFJlc291cmNlNldpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5T
U3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikodm9p
ZCkpc3VjY2Vzc0NhbGxiYWNrOworLSAodm9pZClsb2FkUmVzb3VyY2U3V2l0aEVycm9yQ2FsbGJh
Y2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFj
azoodm9pZCheKSh2b2lkKSlzdWNjZXNzQ2FsbGJhY2s7CitAZW5kCisKKworCisKKyNpbXBvcnQg
PFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4KKwor
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMt
d2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRl
c3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9B
dWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVz
Lmg+CisKKworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorCisjIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAi
VGVzdFByb3RvY29sLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNv
bnZlcnNpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBPYmpDRW51bVR5cGU+CitPcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmlu
Zyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgor
CisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgor
I2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9y
L1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3Bl
Y3RvcjsKKworQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKE5ldHdvcmsy
RG9tYWluKQorCisrICh2b2lkKV9wYXJzZUxvYWRlcklkOihOU1N0cmluZyAqKilvdXRWYWx1ZSBm
cm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zIChOZXR3b3JrMkRvbWFpbikKKworKyAodm9pZClfcGFyc2VM
b2FkZXJJZDooTlNTdHJpbmcgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sK
KyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBjbGFz
c10pOworICAgICpvdXRWYWx1ZSA9IChOU1N0cmluZyAqKXBheWxvYWQ7Cit9CisKK0BlbmQKKwor
CisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorCisjIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29s
SW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisj
aW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorI2lt
cG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3Vz
aW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC9lbnVtLXZhbHVlcy5qc29uLXJlc3VsdCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9lbnVtLXZhbHVl
cy5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uY2Q5
MDEyMDg2ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZW51bS12YWx1ZXMuanNvbi1yZXN1bHQKQEAgLTAs
MCArMSwxMjAzIEBACisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpz
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisvLyBUeXBlRG9tYWluCitJ
bnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJUeXBlRG9tYWluIiwgbnVsbCk7CitJbnNw
ZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiVHlwZURvbWFpbi5UeXBlRG9tYWluRW51bSIsIHtT
aGFyZWQ6ICJzaGFyZWQiLCBSZWQ6ICJyZWQiLCBHcmVlbjogImdyZWVuIiwgQmx1ZTogImJsdWUi
fSk7CitJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJUeXBlRG9tYWluIiwgbnVsbCk7
CisKKy8vIENvbW1hbmREb21haW4KK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIkNv
bW1hbmREb21haW4iLCBudWxsKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJD
b21tYW5kRG9tYWluLmNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlIiwgbnVsbCwgW10sIFsicmV0
dXJuVmFsdWUiXSk7CitJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJDb21tYW5kRG9t
YWluIiwgbnVsbCk7CisKKy8vIEV2ZW50RG9tYWluCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVy
RG9tYWluKCJFdmVudERvbWFpbiIsIG51bGwpOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVu
dW0oIkV2ZW50RG9tYWluLkV2ZW50V2l0aEVudW1QYXJhbWV0ZXJQYXJhbWV0ZXIiLCB7U2hhcmVk
OiAic2hhcmVkIiwgQmxhY2s6ICJibGFjayIsIFdoaXRlOiAid2hpdGUifSk7CitJbnNwZWN0b3JC
YWNrZW5kLnJlZ2lzdGVyRXZlbnQoIkV2ZW50RG9tYWluLmV2ZW50V2l0aEVudW1QYXJhbWV0ZXIi
LCBudWxsLCBbInBhcmFtZXRlciJdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudERv
bWFpbkRpc3BhdGNoZXIgPSBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRGlzcGF0Y2hlci5iaW5k
KEluc3BlY3RvckJhY2tlbmQsICJFdmVudERvbWFpbiIpOworSW5zcGVjdG9yQmFja2VuZC5hY3Rp
dmF0ZURvbWFpbigiRXZlbnREb21haW4iLCBudWxsKTsKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9y
QmFja2VuZENvbW1hbmRzLmpzCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2Vu
ZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZh
bHVlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNw
cmFnbWEgb25jZQorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
CisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisK
K2NsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIHNl
dEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVy
KSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9CisgICAgQmFj
a2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNr
ZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQorcHJpdmF0ZToKKyAgICBSZWZQdHI8QmFja2VuZERpc3Bh
dGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Cit9OworCisKK2NsYXNzIEFsdGVybmF0ZUNvbW1h
bmREb21haW5CYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0
Y2hlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+QWx0ZXJuYXRlQ29tbWFuZERvbWFpbkJhY2tl
bmREaXNwYXRjaGVyKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGNvbW1hbmRXaXRoRW51bVJldHVy
blZhbHVlKGxvbmcgY2FsbElkKSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
KworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorIyMj
IEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmpl
Y3RzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCisjaWYgRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCitjbGFzcyBBbHRlcm5hdGVDb21tYW5kRG9tYWlu
QmFja2VuZERpc3BhdGNoZXI7CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCisKK2NsYXNzIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIgeworcHVibGljOgorICAgIC8vIE5hbWVkIGFmdGVyIHBhcmFtZXRlciAncmV0dXJuVmFsdWUn
IHdoaWxlIGdlbmVyYXRpbmcgY29tbWFuZC9ldmVudCBjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1
ZS4KKyAgICBlbnVtIGNsYXNzIFJldHVyblZhbHVlIHsKKyAgICAgICAgU2hhcmVkID0gMCwKKyAg
ICAgICAgQ3lhbiA9IDYsCisgICAgICAgIE1hZ2VudGEgPSA3LAorICAgICAgICBZZWxsb3cgPSA4
LAorICAgIH07IC8vIGVudW0gY2xhc3MgUmV0dXJuVmFsdWUKKyAgICB2aXJ0dWFsIHZvaWQgY29t
bWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUoRXJyb3JTdHJpbmcmLCBDb21tYW5kRG9tYWluQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyOjpSZXR1cm5WYWx1ZSogb3V0X3JldHVyblZhbHVlKSA9IDA7Citw
cm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+Q29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlcigpOworfTsKKworY2xhc3MgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyIGZpbmFs
IDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgUmVmPENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmRE
aXNwYXRjaGVyJiwgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAg
IHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8
SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOworcHJpdmF0ZToKKyAgICB2b2lkIGNvbW1h
bmRXaXRoRW51bVJldHVyblZhbHVlKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0
PiYmIHBhcmFtZXRlcnMpOworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENI
RVJTKQorcHVibGljOgorICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0Y2hlcihBbHRlcm5hdGVD
b21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9h
bHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQorcHJpdmF0ZToKKyAg
ICBBbHRlcm5hdGVDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIqIG1fYWx0ZXJuYXRlRGlz
cGF0Y2hlciB7IG51bGxwdHIgfTsKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKK3ByaXZhdGU6CisgICAgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRj
aGVyKEJhY2tlbmREaXNwYXRjaGVyJiwgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlciopOworICAgIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdl
bnQgeyBudWxscHRyIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQg
RmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFj
a2VuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVu
dW0tdmFsdWVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMu
aCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+
CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95
ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2Vu
ZERpc3BhdGNoZXJzLmgiCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitDb21tYW5kRG9tYWluQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyOjp+Q29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxl
cigpIHsgfQorCitSZWY8Q29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBDb21tYW5kRG9t
YWluQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERp
c3BhdGNoZXIsIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQor
eworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hl
cihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKK30KKworQ29tbWFuZERvbWFpbkJhY2tlbmRE
aXNwYXRjaGVyOjpDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNo
ZXImIGJhY2tlbmREaXNwYXRjaGVyLCBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyKiBhZ2VudCkKKyAgICA6IFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmRE
aXNwYXRjaGVyKQorICAgICwgbV9hZ2VudChhZ2VudCkKK3sKKyAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oIkNvbW1hbmREb21haW4iX3MsIHRoaXMp
OworfQorCit2b2lkIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9u
ZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1l
c3NhZ2UpCit7CisgICAgUmVmPENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVj
dCgqdGhpcyk7CisKKyAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOworICAgIG1l
c3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsKKworICAgIGlmIChtZXRo
b2QgPT0gImNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlIikgeworICAgICAgICBjb21tYW5kV2l0
aEVudW1SZXR1cm5WYWx1ZShyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9j
b2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInQ29tbWFuZERvbWFp
bi4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOworfQorCit2b2lkIENvbW1hbmREb21h
aW5CYWNrZW5kRGlzcGF0Y2hlcjo6Y29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUobG9uZyByZXF1
ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCit7CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCisgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewor
ICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVl
KHJlcXVlc3RJZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyAgICBFcnJvclN0cmluZyBlcnJvcjsK
KyAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwor
ICAgIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlJldHVyblZhbHVlIG91
dF9yZXR1cm5WYWx1ZTsKKyAgICBtX2FnZW50LT5jb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShl
cnJvciwgJm91dF9yZXR1cm5WYWx1ZSk7CisKKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQorICAg
ICAgICByZXN1bHQtPnNldFN0cmluZygicmV0dXJuVmFsdWUiX3MsIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShvdXRfcmV0dXJuVmFsdWUpKTsK
KworICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOworICAgIGVs
c2UKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNr
ZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVy
cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCisvLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Igewor
CitjbGFzcyBGcm9udGVuZFJvdXRlcjsKKworY2xhc3MgRXZlbnREb21haW5Gcm9udGVuZERpc3Bh
dGNoZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIEV2ZW50
RG9tYWluRnJvbnRlbmREaXNwYXRjaGVyKEZyb250ZW5kUm91dGVyJiBmcm9udGVuZFJvdXRlcikg
OiBtX2Zyb250ZW5kUm91dGVyKGZyb250ZW5kUm91dGVyKSB7IH0KKyAgICAgICAgLy8gTmFtZWQg
YWZ0ZXIgcGFyYW1ldGVyICdwYXJhbWV0ZXInIHdoaWxlIGdlbmVyYXRpbmcgY29tbWFuZC9ldmVu
dCBldmVudFdpdGhFbnVtUGFyYW1ldGVyLgorICAgICAgICBlbnVtIGNsYXNzIFBhcmFtZXRlciB7
CisgICAgICAgICAgICBTaGFyZWQgPSAwLAorICAgICAgICAgICAgQmxhY2sgPSA0LAorICAgICAg
ICAgICAgV2hpdGUgPSA1LAorICAgICAgICB9OyAvLyBlbnVtIGNsYXNzIFBhcmFtZXRlcgorICAg
IHZvaWQgZXZlbnRXaXRoRW51bVBhcmFtZXRlcihQYXJhbWV0ZXIgcGFyYW1ldGVyKTsKK3ByaXZh
dGU6CisgICAgRnJvbnRlbmRSb3V0ZXImIG1fZnJvbnRlbmRSb3V0ZXI7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMu
aAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbgorLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordm9pZCBFdmVudERvbWFpbkZyb250ZW5k
RGlzcGF0Y2hlcjo6ZXZlbnRXaXRoRW51bVBhcmFtZXRlcihQYXJhbWV0ZXIgcGFyYW1ldGVyKQor
eworICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJFdmVudERvbWFp
bi5ldmVudFdpdGhFbnVtUGFyYW1ldGVyIl9zKTsKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiBwYXJh
bXNPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIHBhcmFtc09iamVjdC0+c2V0
U3RyaW5nKCJwYXJhbWV0ZXIiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpn
ZXRFbnVtQ29uc3RhbnRWYWx1ZShwYXJhbWV0ZXIpKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0T2Jq
ZWN0KCJwYXJhbXMiX3MsIFdURk1vdmUocGFyYW1zT2JqZWN0KSk7CisKKyAgICBtX2Zyb250ZW5k
Um91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworfQorCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRj
aGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KKy8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+CisjaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCituYW1lc3BhY2Ug
UHJvdG9jb2wgeworCisKKworLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCituYW1lc3BhY2UgVHlw
ZURvbWFpbiB7CitlbnVtIGNsYXNzIFR5cGVEb21haW5FbnVtOworfSAvLyBUeXBlRG9tYWluCisv
LyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCisKKworCisKK25hbWVzcGFjZSBUZXN0SGVs
cGVycyB7CisKK1N0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSk7CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkK
K3sKKyAgICByZXR1cm4gZ2V0RW51bUNvbnN0YW50VmFsdWUoc3RhdGljX2Nhc3Q8aW50PihlbnVt
VmFsdWUpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKKworbmFtZXNwYWNlIFR5
cGVEb21haW4geworLyogICovCitlbnVtIGNsYXNzIFR5cGVEb21haW5FbnVtIHsKKyAgICBTaGFy
ZWQgPSAwLAorICAgIFJlZCA9IDEsCisgICAgR3JlZW4gPSAyLAorICAgIEJsdWUgPSAzLAorfTsg
Ly8gZW51bSBjbGFzcyBUeXBlRG9tYWluRW51bQorfSAvLyBUeXBlRG9tYWluCisKKworCituYW1l
c3BhY2UgVGVzdEhlbHBlcnMgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBQcm90b2NvbEVudW1UeXBl
PgorT3B0aW9uYWw8UHJvdG9jb2xFbnVtVHlwZT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nKGNv
bnN0IFN0cmluZyYpOworCisvLyBFbnVtcyBpbiB0aGUgJ1R5cGVEb21haW4nIERvbWFpbgordGVt
cGxhdGU8PgorT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURv
bWFpbkVudW0+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpU
eXBlRG9tYWluOjpUeXBlRG9tYWluRW51bT4oY29uc3QgU3RyaW5nJik7CisKK30gLy8gbmFtZXNw
YWNlIFRlc3RIZWxwZXJzCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RydWN0IERlZmF1bHRIYXNoOworCisvLyBIYXNoIGRlY2xhcmF0aW9ucyBpbiB0aGUgJ1R5cGVE
b21haW4nIERvbWFpbgordGVtcGxhdGU8Pgorc3RydWN0IERlZmF1bHRIYXNoPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlR5cGVEb21haW46OlR5cGVEb21haW5FbnVtPiB7CisgICAgdHlwZWRlZiBJbnRI
YXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46OlR5cGVEb21haW5FbnVtPiBIYXNo
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9i
amVjdHMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCisvLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Ig
eworCituYW1lc3BhY2UgUHJvdG9jb2wgeworCituYW1lc3BhY2UgVGVzdEhlbHBlcnMgeworCitz
dGF0aWMgY29uc3QgY2hhciogY29uc3QgZW51bV9jb25zdGFudF92YWx1ZXNbXSA9IHsKKyAgICAi
c2hhcmVkIiwKKyAgICAicmVkIiwKKyAgICAiZ3JlZW4iLAorICAgICJibHVlIiwKKyAgICAiYmxh
Y2siLAorICAgICJ3aGl0ZSIsCisgICAgImN5YW4iLAorICAgICJtYWdlbnRhIiwKKyAgICAieWVs
bG93IiwKK307CisKK1N0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgeworICAg
IHJldHVybiBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb2RlXTsKK30KKworLy8gRW51bXMgaW4gdGhl
ICdUeXBlRG9tYWluJyBEb21haW4KK3RlbXBsYXRlPD4KK09wdGlvbmFsPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlR5cGVEb21haW46OlR5cGVEb21haW5FbnVtPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJp
bmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW0+KGNvbnN0
IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCit7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25z
dGFudFZhbHVlc1tdID0geworICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5
cGVEb21haW46OlR5cGVEb21haW5FbnVtOjpTaGFyZWQsCisgICAgICAgIChzaXplX3QpSW5zcGVj
dG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW06OlJlZCwKKyAgICAgICAg
KHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51bTo6
R3JlZW4sCisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6
VHlwZURvbWFpbkVudW06OkJsdWUsCisgICAgfTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IDQ7ICsraSkKKyAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFs
dWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKKyAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQ
cm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW0pY29uc3RhbnRWYWx1ZXNbaV07CisK
KyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCisKK30gLy8gbmFtZXNwYWNlIFRlc3RIZWxw
ZXJzCisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorCisjIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRy
Lmg+CisKK0Bwcm90b2NvbCBUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluRG9tYWluSGFuZGxlcjsK
KworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworY2xhc3MgT2JqQ0luc3BlY3RvckNvbW1hbmRE
b21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVDb21tYW5kRG9t
YWluQmFja2VuZERpc3BhdGNoZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVi
bGljOgorICAgIE9iakNJbnNwZWN0b3JDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIoaWQ8
VGVzdFByb3RvY29sQ29tbWFuZERvbWFpbkRvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxl
Z2F0ZSA9IGhhbmRsZXI7IH0KKyAgICB2b2lkIGNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlKGxv
bmcgcmVxdWVzdElkKSBmaW5hbDsKK3ByaXZhdGU6CisgICAgUmV0YWluUHRyPGlkPFRlc3RQcm90
b2NvbENvbW1hbmREb21haW5Eb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKK307CisKK30gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmRE
aXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0
Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5q
c29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQg
ImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisK
KyNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisKK25hbWVz
cGFjZSBJbnNwZWN0b3IgeworCit2b2lkIE9iakNJbnNwZWN0b3JDb21tYW5kRG9tYWluQmFja2Vu
ZERpc3BhdGNoZXI6OmNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlKGxvbmcgcmVxdWVzdElkKQor
eworICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihjb21t
YW5kV2l0aEVudW1SZXR1cm5WYWx1ZVdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazop
XSkgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJl
cXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0NvbW1hbmREb21h
aW4uY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAg
ICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7
CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVz
dElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICB9OworCisgICAgaWQg
c3VjY2Vzc0NhbGxiYWNrID0gXihUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluQ29tbWFuZFdpdGhF
bnVtUmV0dXJuVmFsdWVSZXR1cm5WYWx1ZSByZXR1cm5WYWx1ZSkgeworICAgICAgICBSZWY8SlNP
Tjo6T2JqZWN0PiByZXN1bHRPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAg
ICByZXN1bHRPYmplY3QtPnNldFN0cmluZygicmV0dXJuVmFsdWUiX3MsIHRvUHJvdG9jb2xTdHJp
bmcocmV0dXJuVmFsdWUpKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3Bv
bnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHRPYmplY3QpLCBmYWxzZSk7CisgICAgfTsKKwor
ICAgIFttX2RlbGVnYXRlIGNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlV2l0aEVycm9yQ2FsbGJh
Y2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKK30KKwor
Cit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xC
YWNrZW5kRGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZp
Z3VyYXRpb24uaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVz
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9y
dCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmls
aXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6
IE5TT2JqZWN0CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluLCBzZXR0ZXI9c2V0Q29tbWFu
ZERvbWFpbkhhbmRsZXI6KSBpZDxUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluRG9tYWluSGFuZGxl
cj4gY29tbWFuZERvbWFpbkhhbmRsZXI7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkp
IFRlc3RQcm90b2NvbEV2ZW50RG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyICpldmVudERvbWFp
bkV2ZW50RGlzcGF0Y2hlcjsKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENv
bmZpZ3VyYXRpb24uaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
bi5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVz
dFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5h
bC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisjaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgorI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4K
KyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgor
Cit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3Rv
Y29sQ29uZmlndXJhdGlvbgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciog
X2NvbnRyb2xsZXI7CisgICAgaWQ8VGVzdFByb3RvY29sQ29tbWFuZERvbWFpbkRvbWFpbkhhbmRs
ZXI+IF9jb21tYW5kRG9tYWluSGFuZGxlcjsKKyAgICBUZXN0UHJvdG9jb2xFdmVudERvbWFpbkRv
bWFpbkV2ZW50RGlzcGF0Y2hlciAqX2V2ZW50RG9tYWluRXZlbnREaXNwYXRjaGVyOworfQorCist
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNv
bnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlm
ICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7Cisg
ICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQorCistICh2
b2lkKWRlYWxsb2MKK3sKKyAgICBbX2NvbW1hbmREb21haW5IYW5kbGVyIHJlbGVhc2VdOworICAg
IFtfZXZlbnREb21haW5FdmVudERpc3BhdGNoZXIgcmVsZWFzZV07CisgICAgW3N1cGVyIGRlYWxs
b2NdOworfQorCistICh2b2lkKXNldENvbW1hbmREb21haW5IYW5kbGVyOihpZDxUZXN0UHJvdG9j
b2xDb21tYW5kRG9tYWluRG9tYWluSGFuZGxlcj4paGFuZGxlcgoreworICAgIGlmIChoYW5kbGVy
ID09IF9jb21tYW5kRG9tYWluSGFuZGxlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgW19jb21t
YW5kRG9tYWluSGFuZGxlciByZWxlYXNlXTsKKyAgICBfY29tbWFuZERvbWFpbkhhbmRsZXIgPSBb
aGFuZGxlciByZXRhaW5dOworCisgICAgYXV0byBhbHRlcm5hdGVEaXNwYXRjaGVyID0gbWFrZVVu
aXF1ZTxPYmpDSW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPihoYW5kbGVy
KTsKKyAgICBhdXRvIGFsdGVybmF0ZUFnZW50ID0gbWFrZVVuaXF1ZTxBbHRlcm5hdGVEaXNwYXRj
aGFibGVBZ2VudDxDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIsIEFsdGVybmF0ZUNvbW1h
bmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4+KCJDb21tYW5kRG9tYWluIl9zLCAqX2NvbnRyb2xs
ZXIsIFdURk1vdmUoYWx0ZXJuYXRlRGlzcGF0Y2hlcikpOworICAgIF9jb250cm9sbGVyLT5hcHBl
bmRFeHRyYUFnZW50KFdURk1vdmUoYWx0ZXJuYXRlQWdlbnQpKTsKK30KKworLSAoaWQ8VGVzdFBy
b3RvY29sQ29tbWFuZERvbWFpbkRvbWFpbkhhbmRsZXI+KWNvbW1hbmREb21haW5IYW5kbGVyCit7
CisgICAgcmV0dXJuIF9jb21tYW5kRG9tYWluSGFuZGxlcjsKK30KKworLSAoVGVzdFByb3RvY29s
RXZlbnREb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKilldmVudERvbWFpbkV2ZW50RGlzcGF0
Y2hlcgoreworICAgIGlmICghX2V2ZW50RG9tYWluRXZlbnREaXNwYXRjaGVyKQorICAgICAgICBf
ZXZlbnREb21haW5FdmVudERpc3BhdGNoZXIgPSBbW1Rlc3RQcm90b2NvbEV2ZW50RG9tYWluRG9t
YWluRXZlbnREaXNwYXRjaGVyIGFsbG9jXSBpbml0V2l0aENvbnRyb2xsZXI6X2NvbnRyb2xsZXJd
OworICAgIHJldHVybiBfZXZlbnREb21haW5FdmVudERpc3BhdGNoZXI7Cit9CisKK0BlbmQKKwor
CisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisK
KyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8d3RmL0pT
T05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0
aW9uIFRlc3RQcm90b2NvbEV2ZW50RG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyCit7CisgICAg
QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKK30KKworLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9s
bGVyKiljb250cm9sbGVyCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNl
bGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9j
b250cm9sbGVyID0gY29udHJvbGxlcjsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZCll
dmVudFdpdGhFbnVtUGFyYW1ldGVyV2l0aFBhcmFtZXRlcjooVGVzdFByb3RvY29sRXZlbnREb21h
aW5FdmVudFdpdGhFbnVtUGFyYW1ldGVyUGFyYW1ldGVyKXBhcmFtZXRlcgoreworICAgIGNvbnN0
IEZyb250ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29udHJvbGxlci0+ZnJvbnRlbmRSb3V0ZXIoKTsK
KworICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJFdmVudERvbWFp
bi5ldmVudFdpdGhFbnVtUGFyYW1ldGVyIl9zKTsKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiBwYXJh
bXNPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIHBhcmFtc09iamVjdC0+c2V0
U3RyaW5nKCJwYXJhbWV0ZXIiX3MsIHRvUHJvdG9jb2xTdHJpbmcocGFyYW1ldGVyKSk7CisgICAg
anNvbk1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIl9zLCBXVEZNb3ZlKHBhcmFtc09iamVjdCkp
OworICAgIHJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKK30K
KworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5t
bQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCisj
aW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+CisKKworCisKKwor
dHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0pIHsK
KyAgICBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bVNoYXJlZCwKKyAgICBUZXN0UHJvdG9jb2xU
eXBlRG9tYWluRW51bVJlZCwKKyAgICBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bUdyZWVuLAor
ICAgIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtQmx1ZSwKK307CisKKworCitAcHJvdG9jb2wg
VGVzdFByb3RvY29sQ29tbWFuZERvbWFpbkRvbWFpbkhhbmRsZXIgPE5TT2JqZWN0PgorQG9wdGlv
bmFsCistICh2b2lkKWNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlV2l0aEVycm9yQ2FsbGJhY2s6
KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoo
dm9pZCheKShUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluQ29tbWFuZFdpdGhFbnVtUmV0dXJuVmFs
dWVSZXR1cm5WYWx1ZSByZXR1cm5WYWx1ZSkpc3VjY2Vzc0NhbGxiYWNrOworQGVuZAorCitfX2F0
dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3Rv
Y29sRXZlbnREb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgOiBOU09iamVjdAorLSAodm9pZCll
dmVudFdpdGhFbnVtUGFyYW1ldGVyV2l0aFBhcmFtZXRlcjooVGVzdFByb3RvY29sRXZlbnREb21h
aW5FdmVudFdpdGhFbnVtUGFyYW1ldGVyUGFyYW1ldGVyKXBhcmFtZXRlcjsKK0BlbmQKKworCisj
aW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3Rz
Lmg+CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKKworIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbEludGVybmFsLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBl
bnVtLXZhbHVlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9i
amVjdFByaXZhdGUuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVj
dG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKworQGludGVyZmFj
ZSBUZXN0UHJvdG9jb2xFdmVudERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAoUHJpdmF0ZSkK
Ky0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEluc3BlY3Rvcjo6QXVnbWVudGFi
bGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyOworQGVuZAorCisKKyMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVt
LXZhbHVlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
KyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3Rv
Y29sQXJyYXlDb252ZXJzaW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordGVtcGxh
dGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgorT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJv
dG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7CisKKworaW5saW5lIFN0cmluZyB0b1By
b3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtIHZhbHVlKQoreworICAgIHN3
aXRjaCh2YWx1ZSkgeworICAgIGNhc2UgVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1TaGFyZWQ6
CisgICAgICAgIHJldHVybiAic2hhcmVkIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sVHlwZURv
bWFpbkVudW1SZWQ6CisgICAgICAgIHJldHVybiAicmVkIl9zOworICAgIGNhc2UgVGVzdFByb3Rv
Y29sVHlwZURvbWFpbkVudW1HcmVlbjoKKyAgICAgICAgcmV0dXJuICJncmVlbiJfczsKKyAgICBj
YXNlIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtQmx1ZToKKyAgICAgICAgcmV0dXJuICJibHVl
Il9zOworICAgIH0KK30KKwordGVtcGxhdGU8PgoraW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2Nv
bFR5cGVEb21haW5FbnVtPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkK
K3sKKyAgICBpZiAodmFsdWUgPT0gInNoYXJlZCIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9j
b2xUeXBlRG9tYWluRW51bVNoYXJlZDsKKyAgICBpZiAodmFsdWUgPT0gInJlZCIpCisgICAgICAg
IHJldHVybiBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bVJlZDsKKyAgICBpZiAodmFsdWUgPT0g
ImdyZWVuIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtR3JlZW47
CisgICAgaWYgKHZhbHVlID09ICJibHVlIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFR5
cGVEb21haW5FbnVtQmx1ZTsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCit9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1t
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1w
b3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJ
UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9y
OworCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoVHlwZURvbWFpbkRv
bWFpbikKKworKyAodm9pZClfcGFyc2VUeXBlRG9tYWluRW51bTooTlNOdW1iZXIgKiopb3V0VmFs
dWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoVHlwZURvbWFpbkRvbWFpbikKKworKyAodm9pZClf
cGFyc2VUeXBlRG9tYWluRW51bTooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlk
KXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtO
U1N0cmluZyBjbGFzc10pOworICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVt
PiByZXN1bHQgPSBJbnNwZWN0b3I6OmZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xUeXBl
RG9tYWluRW51bT4ocGF5bG9hZCk7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfRU5VTV9W
QUxVRShyZXN1bHQsIEAiVHlwZURvbWFpbkVudW0iKTsKKyAgICAqb3V0VmFsdWUgPSBAKHJlc3Vs
dC52YWx1ZSgpKTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgi
CisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgor
I2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisK
K3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworCisKKyMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9ldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFp
bi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9ldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRv
bWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMC4uODE3ZTNhNTZjYTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnQtdGFyZ2V0
VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1yZXN1bHQKQEAgLTAsMCAr
MSwxMDMwIEBACisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGlu
Zy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisvLyBEb21haW4KK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21h
aW4oIkRvbWFpbiIsIG51bGwpOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIkRv
bWFpbi5Db21tYW5kIiwgbnVsbCwgW10sIFtdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJF
dmVudCgiRG9tYWluLkV2ZW50IiwgWyJwYWdlIiwgIndvcmtlciJdLCBbXSk7CitJbnNwZWN0b3JC
YWNrZW5kLnJlZ2lzdGVyRG9tYWluRGlzcGF0Y2hlciA9IEluc3BlY3RvckJhY2tlbmQucmVnaXN0
ZXJEaXNwYXRjaGVyLmJpbmQoSW5zcGVjdG9yQmFja2VuZCwgIkRvbWFpbiIpOworSW5zcGVjdG9y
QmFja2VuZC5hY3RpdmF0ZURvbWFpbigiRG9tYWluIiwgWyJwYWdlIl0pOworIyMjIEVuZCBGaWxl
OiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNl
CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworI2luY2x1
ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JGcm9udGVuZFJvdXRlci5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgQWx0
ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHZvaWQgc2V0QmFja2VuZERp
c3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNr
ZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KKyAgICBCYWNrZW5kRGlzcGF0
Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRj
aGVyLmdldCgpOyB9Citwcml2YXRlOgorICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9i
YWNrZW5kRGlzcGF0Y2hlcjsKK307CisKKworY2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERp
c3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgor
ICAgIHZpcnR1YWwgfkFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKCkgeyB9CisgICAg
dmlydHVhbCB2b2lkIENvbW1hbmQobG9uZyBjYWxsSWQpID0gMDsKK307CisKK30gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCisjIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMu
aAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4t
ZGVidWdnYWJsZVR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIK
KyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsK
KwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKK2NsYXNzIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRj
aGVyOworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQor
CitjbGFzcyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgeworcHVibGljOgorICAgIHZp
cnR1YWwgdm9pZCBDb21tYW5kKEVycm9yU3RyaW5nJikgPSAwOworcHJvdGVjdGVkOgorICAgIHZp
cnR1YWwgfkRvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOworfTsKKworY2xhc3MgRG9t
YWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERp
c3BhdGNoZXIgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8RG9tYWluQmFja2VuZERpc3BhdGNo
ZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlciopOworICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYg
bWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOworcHJpdmF0ZToKKyAg
ICB2b2lkIENvbW1hbmQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFy
YW1ldGVycyk7CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCitw
dWJsaWM6CisgICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZURvbWFpbkJh
Y2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0
Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KK3ByaXZhdGU6CisgICAgQWx0ZXJuYXRlRG9t
YWluQmFja2VuZERpc3BhdGNoZXIqIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciB7IG51bGxwdHIgfTsK
KyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK3ByaXZh
dGU6CisgICAgRG9tYWluQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImLCBEb21h
aW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICBEb21haW5CYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIqIG1fYWdlbnQgeyBudWxscHRyIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVU
eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKwor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5j
bHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKKyNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXJzLmgiCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXI6On5Eb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KKworUmVmPERvbWFp
bkJhY2tlbmREaXNwYXRjaGVyPiBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEJhY2tl
bmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyKiBhZ2VudCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEb21haW5CYWNrZW5k
RGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKK30KKworRG9tYWluQmFja2Vu
ZERpc3BhdGNoZXI6OkRvbWFpbkJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBi
YWNrZW5kRGlzcGF0Y2hlciwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkK
KyAgICA6IFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQor
ICAgICwgbV9hZ2VudChhZ2VudCkKK3sKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3Rl
ckRpc3BhdGNoZXJGb3JEb21haW4oIkRvbWFpbiJfcywgdGhpcyk7Cit9CisKK3ZvaWQgRG9tYWlu
QmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcm
IG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQoreworICAgIFJlZjxEb21haW5C
YWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CisKKyAgICBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiBwYXJhbWV0ZXJzOworICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJh
bWV0ZXJzKTsKKworICAgIGlmIChtZXRob2QgPT0gIkNvbW1hbmQiKSB7CisgICAgICAgIENvbW1h
bmQocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2Vu
ZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi4iICsgbWV0aG9kICsgIicgd2Fz
IG5vdCBmb3VuZCIpOworfQorCit2b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5k
KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQoreworI2lmIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorICAgIGlmIChtX2FsdGVybmF0ZURpc3Bh
dGNoZXIpIHsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5Db21tYW5kKHJlcXVlc3RJ
ZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWY8
SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYWdl
bnQtPkNvbW1hbmQoZXJyb3IpOworCisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKKyAgICAgICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1
bHQpLCBmYWxzZSk7CisgICAgZWxzZQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBv
cnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShl
cnJvcikpOworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBU
ZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5k
RGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRh
cmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisK
K2NsYXNzIEZyb250ZW5kUm91dGVyOworCitjbGFzcyBEb21haW5Gcm9udGVuZERpc3BhdGNoZXIg
eworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIERvbWFpbkZyb250
ZW5kRGlzcGF0Y2hlcihGcm9udGVuZFJvdXRlciYgZnJvbnRlbmRSb3V0ZXIpIDogbV9mcm9udGVu
ZFJvdXRlcihmcm9udGVuZFJvdXRlcikgeyB9CisgICAgdm9pZCBFdmVudCgpOworcHJpdmF0ZToK
KyAgICBGcm9udGVuZFJvdXRlciYgbV9mcm9udGVuZFJvdXRlcjsKK307CisKK30gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisK
KyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1k
ZWJ1Z2dhYmxlVHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRj
aGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0
ZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0
b3IgeworCit2b2lkIERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcjo6RXZlbnQoKQoreworICAgIFJl
ZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAg
ICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOwor
CisgICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmlu
ZygpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVz
dEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xP
YmplY3RzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudC10YXJnZXRU
eXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFByb3Rv
Y29sIHsKKworCisKKworCisKKworCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgK
KworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVi
dWdnYWJsZVR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5o
IgorCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKwor
CisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgor
CisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisKKyMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVU
eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVy
cy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworQHByb3RvY29sIFRlc3RQcm90b2Nv
bERvbWFpbkRvbWFpbkhhbmRsZXI7CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKK2NsYXNz
IE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRl
cm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CitwdWJsaWM6CisgICAgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyKGlk
PFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9
IGhhbmRsZXI7IH0KKyAgICB2b2lkIENvbW1hbmQobG9uZyByZXF1ZXN0SWQpIGZpbmFsOworcHJp
dmF0ZToKKyAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4+
IG1fZGVsZWdhdGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5
cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1w
b3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5o
IgorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorCitu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordm9pZCBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERp
c3BhdGNoZXI6OkNvbW1hbmQobG9uZyByZXF1ZXN0SWQpCit7CisgICAgaWYgKCFbbV9kZWxlZ2F0
ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKENvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazpz
dWNjZXNzQ2FsbGJhY2s6KV0pIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0
UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3Vu
ZCwgIidEb21haW4uQ29tbWFuZCcgd2FzIG5vdCBmb3VuZCJfcyk7CisgICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKKyAgICAgICAg
YmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tl
bmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgIH07CisKKyAgICBpZCBzdWNjZXNzQ2Fs
bGJhY2sgPSBeeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVx
dWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgfTsKKworICAgIFtt
X2RlbGVnYXRlIENvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3ND
YWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOworfQorCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorCisj
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVi
dWdnYWJsZVR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+CisKK19fYXR0cmlidXRl
X18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25m
aWd1cmF0aW9uIDogTlNPYmplY3QKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4sIHNldHRl
cj1zZXREb21haW5IYW5kbGVyOikgaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4g
ZG9tYWluSGFuZGxlcjsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgVGVzdFByb3Rv
Y29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyICpkb21haW5FdmVudERpc3BhdGNoZXI7CitA
ZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1
Z2dhYmxlVHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKKworI2ltcG9ydCAiVGVz
dFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRj
aGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdl
bnQuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJv
bGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2Vu
ZERpc3BhdGNoZXJzLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVu
dGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KK3sKKyAgICBBdWdtZW50YWJsZUluc3Bl
Y3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworICAgIGlkPFRlc3RQcm90b2NvbERvbWFpbkRv
bWFpbkhhbmRsZXI+IF9kb21haW5IYW5kbGVyOworICAgIFRlc3RQcm90b2NvbERvbWFpbkRvbWFp
bkV2ZW50RGlzcGF0Y2hlciAqX2RvbWFpbkV2ZW50RGlzcGF0Y2hlcjsKK30KKworLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVy
Kiljb250cm9sbGVyCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYp
CisgICAgICAgIHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250
cm9sbGVyID0gY29udHJvbGxlcjsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFs
bG9jCit7CisgICAgW19kb21haW5IYW5kbGVyIHJlbGVhc2VdOworICAgIFtfZG9tYWluRXZlbnRE
aXNwYXRjaGVyIHJlbGVhc2VdOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAodm9pZClz
ZXREb21haW5IYW5kbGVyOihpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiloYW5k
bGVyCit7CisgICAgaWYgKGhhbmRsZXIgPT0gX2RvbWFpbkhhbmRsZXIpCisgICAgICAgIHJldHVy
bjsKKworICAgIFtfZG9tYWluSGFuZGxlciByZWxlYXNlXTsKKyAgICBfZG9tYWluSGFuZGxlciA9
IFtoYW5kbGVyIHJldGFpbl07CisKKyAgICBhdXRvIGFsdGVybmF0ZURpc3BhdGNoZXIgPSBtYWtl
VW5pcXVlPE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7Cisg
ICAgYXV0byBhbHRlcm5hdGVBZ2VudCA9IG1ha2VVbmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxl
QWdlbnQ8RG9tYWluQmFja2VuZERpc3BhdGNoZXIsIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNw
YXRjaGVyPj4oIkRvbWFpbiJfcywgKl9jb250cm9sbGVyLCBXVEZNb3ZlKGFsdGVybmF0ZURpc3Bh
dGNoZXIpKTsKKyAgICBfY29udHJvbGxlci0+YXBwZW5kRXh0cmFBZ2VudChXVEZNb3ZlKGFsdGVy
bmF0ZUFnZW50KSk7Cit9CisKKy0gKGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+
KWRvbWFpbkhhbmRsZXIKK3sKKyAgICByZXR1cm4gX2RvbWFpbkhhbmRsZXI7Cit9CisKKy0gKFRl
c3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqKWRvbWFpbkV2ZW50RGlzcGF0
Y2hlcgoreworICAgIGlmICghX2RvbWFpbkV2ZW50RGlzcGF0Y2hlcikKKyAgICAgICAgX2RvbWFp
bkV2ZW50RGlzcGF0Y2hlciA9IFtbVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRj
aGVyIGFsbG9jXSBpbml0V2l0aENvbnRyb2xsZXI6X2NvbnRyb2xsZXJdOworICAgIHJldHVybiBf
ZG9tYWluRXZlbnREaXNwYXRjaGVyOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xF
dmVudERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZl
bnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9j
b2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIK
KyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7
CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNo
ZXIKK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwor
fQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3Bl
Y3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOwor
ICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxl
cik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQor
CistICh2b2lkKUV2ZW50Cit7CisgICAgY29uc3QgRnJvbnRlbmRSb3V0ZXImIHJvdXRlciA9IF9j
b250cm9sbGVyLT5mcm9udGVuZFJvdXRlcigpOworCisgICAgUmVmPEpTT046Ok9iamVjdD4ganNv
bk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGpzb25NZXNzYWdlLT5zZXRT
dHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7CisgICAgcm91dGVyLnNlbmRFdmVu
dChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworfQorCitAZW5kCisKKworIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2wuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRh
cmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3Vu
ZGF0aW9uLmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3Qu
aD4KKworCisKKworCisKKworCitAcHJvdG9jb2wgVGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFu
ZGxlciA8TlNPYmplY3Q+CitAb3B0aW9uYWwKKy0gKHZvaWQpQ29tbWFuZFdpdGhFcnJvckNhbGxi
YWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJh
Y2s6KHZvaWQoXikodm9pZCkpc3VjY2Vzc0NhbGxiYWNrOworQGVuZAorCitfX2F0dHJpYnV0ZV9f
KCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sRG9tYWlu
RG9tYWluRXZlbnREaXNwYXRjaGVyIDogTlNPYmplY3QKKy0gKHZvaWQpRXZlbnQ7CitAZW5kCisK
KworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2Jq
ZWN0cy5oPgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCisKKyMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0
UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCisj
aW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4K
KyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sRG9t
YWluRG9tYWluRXZlbnREaXNwYXRjaGVyIChQcml2YXRlKQorLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoQ29udHJvbGxlcjooSW5zcGVjdG9yOjpBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIq
KWNvbnRyb2xsZXI7CitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5h
bC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmct
ZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0IDxXZWJJbnNw
ZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0
b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+CitPcHRpb25hbDxPYmpDRW51
bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKKworfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5t
bQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRhcmdldFR5cGUtbWF0
Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
LmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sVHlw
ZVBhcnNlci5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFBy
aXZhdGUuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisKKworCisKKyMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisKKyMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xUeXBlcy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFBy
b3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
LmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5o
PgorI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+
CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMu
anNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZXhwZWN0ZWQvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uLXJlc3VsdApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uODNhYmRjNzdiMjUKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZXhwZWN0ZWQvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uLXJlc3VsdApA
QCAtMCwwICsxLDExODIgQEAKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFu
ZHMuanMKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRp
b25hbC1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworLy8gRGF0YWJhc2UKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIkRh
dGFiYXNlIiwgbnVsbCk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnQoIkRhdGFiYXNl
LmRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMiLCBudWxsLCBbImNvbHVtbk5hbWVzIiwgIm5v
dGVzIiwgInRpbWVzdGFtcCIsICJ2YWx1ZXMiLCAicGF5bG9hZCIsICJzcWxFcnJvciIsICJzY3Jl
ZW5Db2xvciIsICJhbHRlcm5hdGVDb2xvcnMiLCAicHJpbnRDb2xvciJdKTsKK0luc3BlY3RvckJh
Y2tlbmQucmVnaXN0ZXJFdmVudCgiRGF0YWJhc2UuZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0
ZXJzIiwgbnVsbCwgWyJjb2x1bW5OYW1lcyIsICJub3RlcyIsICJ0aW1lc3RhbXAiLCAidmFsdWVz
IiwgInBheWxvYWQiLCAic3FsRXJyb3IiLCAic2NyZWVuQ29sb3IiLCAiYWx0ZXJuYXRlQ29sb3Jz
IiwgInByaW50Q29sb3IiXSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRGF0YWJhc2VEaXNw
YXRjaGVyID0gSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRpc3BhdGNoZXIuYmluZChJbnNwZWN0
b3JCYWNrZW5kLCAiRGF0YWJhc2UiKTsKK0luc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4o
IkRhdGFiYXNlIiwgbnVsbCk7CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5k
cy5qcworCisjIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5o
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwt
cGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKworbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CisKK2NsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2
b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNw
YXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9Cisg
ICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4g
bV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQorcHJpdmF0ZToKKyAgICBSZWZQdHI8QmFja2Vu
ZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Cit9OworCisKKworCit9IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQorIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJz
LmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMu
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJp
bmcgRXJyb3JTdHJpbmc7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQg
RmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFj
a2VuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2
ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVz
dEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1
ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
KworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorI2luY2x1ZGUg
IlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNlbmRpZiAvLyBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisK
KworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0QmFja2Vu
ZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hl
cnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlv
bmFsLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIK
KyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgRnJvbnRlbmRSb3V0ZXI7CisK
K2NsYXNzIERhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKK3B1YmxpYzoKKyAgICBEYXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hlcihGcm9udGVu
ZFJvdXRlciYgZnJvbnRlbmRSb3V0ZXIpIDogbV9mcm9udGVuZFJvdXRlcihmcm9udGVuZFJvdXRl
cikgeyB9CisgICAgdm9pZCBkaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzKFJlZlB0cjxKU09O
OjpBcnJheU9mPFN0cmluZz4+IGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIG5vdGVzLCBjb25z
dCBkb3VibGUqIHRpbWVzdGFtcCwgUmVmUHRyPEpTT046Ok9iamVjdD4gdmFsdWVzLCBSZWZQdHI8
SlNPTjo6VmFsdWU+IHBheWxvYWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFz
ZTo6RXJyb3I+IHNxbEVycm9yLCBjb25zdCBTdHJpbmcqIHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4gYWx0ZXJuYXRlQ29sb3JzLCBj
b25zdCBTdHJpbmcqIHByaW50Q29sb3IpOworICAgIHZvaWQgZGlkRXhlY3V0ZU5vT3B0aW9uYWxQ
YXJhbWV0ZXJzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IGNvbHVtbk5hbWVzLCBjb25z
dCBTdHJpbmcmIG5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiB2
YWx1ZXMsIFJlZlB0cjxKU09OOjpWYWx1ZT4gcGF5bG9hZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgc2NyZWVuQ29s
b3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiBhbHRl
cm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgcHJpbnRDb2xvcik7Citwcml2YXRlOgorICAgIEZy
b250ZW5kUm91dGVyJiBtX2Zyb250ZW5kUm91dGVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordm9pZCBEYXRhYmFzZUZy
b250ZW5kRGlzcGF0Y2hlcjo6ZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyhSZWZQdHI8SlNP
Tjo6QXJyYXlPZjxTdHJpbmc+PiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nKiBub3RlcywgY29u
c3QgZG91YmxlKiB0aW1lc3RhbXAsIFJlZlB0cjxKU09OOjpPYmplY3Q+IHZhbHVlcywgUmVmUHRy
PEpTT046OlZhbHVlPiBwYXlsb2FkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6OkVycm9yPiBzcWxFcnJvciwgY29uc3QgU3RyaW5nKiBzY3JlZW5Db2xvciwgUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IGFsdGVybmF0ZUNvbG9ycywg
Y29uc3QgU3RyaW5nKiBwcmludENvbG9yKQoreworICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25N
ZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0U3Ry
aW5nKCJtZXRob2QiX3MsICJEYXRhYmFzZS5kaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzIl9z
KTsKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiBwYXJhbXNPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOworICAgIGlmIChjb2x1bW5OYW1lcykKKyAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRB
cnJheSgiY29sdW1uTmFtZXMiX3MsIGNvbHVtbk5hbWVzKTsKKyAgICBpZiAobm90ZXMpCisgICAg
ICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJub3RlcyJfcywgKm5vdGVzKTsKKyAgICBpZiAo
dGltZXN0YW1wKQorICAgICAgICBwYXJhbXNPYmplY3QtPnNldERvdWJsZSgidGltZXN0YW1wIl9z
LCAqdGltZXN0YW1wKTsKKyAgICBpZiAodmFsdWVzKQorICAgICAgICBwYXJhbXNPYmplY3QtPnNl
dE9iamVjdCgidmFsdWVzIl9zLCB2YWx1ZXMpOworICAgIGlmIChwYXlsb2FkKQorICAgICAgICBw
YXJhbXNPYmplY3QtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCAqcGF5bG9hZCk7CisgICAgaWYgKHNx
bEVycm9yKQorICAgICAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIHNx
bEVycm9yKTsKKyAgICBpZiAoc2NyZWVuQ29sb3IpCisgICAgICAgIHBhcmFtc09iamVjdC0+c2V0
U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgKnNjcmVlbkNvbG9yKTsKKyAgICBpZiAoYWx0ZXJuYXRl
Q29sb3JzKQorICAgICAgICBwYXJhbXNPYmplY3QtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMi
X3MsIGFsdGVybmF0ZUNvbG9ycyk7CisgICAgaWYgKHByaW50Q29sb3IpCisgICAgICAgIHBhcmFt
c09iamVjdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCAqcHJpbnRDb2xvcik7CisgICAganNv
bk1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIl9zLCBXVEZNb3ZlKHBhcmFtc09iamVjdCkpOwor
CisgICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmlu
ZygpKTsKK30KKwordm9pZCBEYXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hlcjo6ZGlkRXhlY3V0ZU5v
T3B0aW9uYWxQYXJhbWV0ZXJzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IGNvbHVtbk5h
bWVzLCBjb25zdCBTdHJpbmcmIG5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSZWZQdHI8SlNPTjo6
T2JqZWN0PiB2YWx1ZXMsIFJlZlB0cjxKU09OOjpWYWx1ZT4gcGF5bG9hZCwgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYg
c2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JM
aXN0PiBhbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgcHJpbnRDb2xvcikKK3sKKyAgICBS
ZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Cisg
ICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRGF0YWJhc2UuZGlkRXhlY3V0
ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIl9zKTsKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiBwYXJhbXNP
YmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIHBhcmFtc09iamVjdC0+c2V0QXJy
YXkoImNvbHVtbk5hbWVzIl9zLCBjb2x1bW5OYW1lcyk7CisgICAgcGFyYW1zT2JqZWN0LT5zZXRT
dHJpbmcoIm5vdGVzIl9zLCBub3Rlcyk7CisgICAgcGFyYW1zT2JqZWN0LT5zZXREb3VibGUoInRp
bWVzdGFtcCJfcywgdGltZXN0YW1wKTsKKyAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgidmFs
dWVzIl9zLCB2YWx1ZXMpOworICAgIHBhcmFtc09iamVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3Ms
IHBheWxvYWQpOworICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgc3Fs
RXJyb3IpOworICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgc2Ny
ZWVuQ29sb3IpOworICAgIHBhcmFtc09iamVjdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJf
cywgYWx0ZXJuYXRlQ29sb3JzKTsKKyAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygicHJpbnRD
b2xvciJfcywgcHJpbnRDb2xvcik7CisgICAganNvbk1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1z
Il9zLCBXVEZNb3ZlKHBhcmFtc09iamVjdCkpOworCisgICAgbV9mcm9udGVuZFJvdXRlci5zZW5k
RXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisK
KyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+CisjaW5j
bHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCitu
YW1lc3BhY2UgUHJvdG9jb2wgeworCisKKworLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCituYW1l
c3BhY2UgRGF0YWJhc2UgeworY2xhc3MgRXJyb3I7Cit9IC8vIERhdGFiYXNlCisvLyBFbmQgb2Yg
Zm9yd2FyZCBkZWNsYXJhdGlvbnMuCisKKworLy8gVHlwZWRlZnMuCituYW1lc3BhY2UgRGF0YWJh
c2UgeworLyogVW5pcXVlIGlkZW50aWZpZXIgb2YgRGF0YWJhc2Ugb2JqZWN0LiAqLwordHlwZWRl
ZiBTdHJpbmcgRGF0YWJhc2VJZDsKK3R5cGVkZWYgU3RyaW5nIFByaW1hcnlDb2xvcnM7Cit0eXBl
ZGVmIEpTT046OkFycmF5T2Y8U3RyaW5nPiBDb2xvckxpc3Q7Cit9IC8vIERhdGFiYXNlCisvLyBF
bmQgb2YgdHlwZWRlZnMuCisKK25hbWVzcGFjZSBEYXRhYmFzZSB7CisvKiBEYXRhYmFzZSBlcnJv
ci4gKi8KK2NsYXNzIEVycm9yIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgeworcHVibGljOgor
ICAgIGVudW0geworICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCisgICAgICAgIE1lc3NhZ2VTZXQg
PSAxIDw8IDAsCisgICAgICAgIENvZGVTZXQgPSAxIDw8IDEsCisgICAgICAgIEFsbEZpZWxkc1Nl
dCA9IChNZXNzYWdlU2V0IHwgQ29kZVNldCkKKyAgICB9OworCisgICAgdGVtcGxhdGU8aW50IFNU
QVRFPgorICAgIGNsYXNzIEJ1aWxkZXIgeworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxK
U09OOjpPYmplY3Q+IG1fcmVzdWx0OworCisgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWls
ZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKKyAg
ICAgICAgfQorCisgICAgICAgIEJ1aWxkZXIoUmVmPC8qRXJyb3IqL0pTT046Ok9iamVjdD4mJiBv
YmplY3QpCisgICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKKyAgICAgICAg
eworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxk
ZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CisgICAgICAgIH0KKyAgICAgICAgZnJpZW5k
IGNsYXNzIEVycm9yOworICAgIHB1YmxpYzoKKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTWVz
c2FnZVNldD4mIHNldE1lc3NhZ2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE1lc3NhZ2VTZXQpLCBwcm9wZXJ0eV9t
ZXNzYWdlX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1l
c3NhZ2UiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TWVzc2FnZVNl
dD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2RlU2V0PiYgc2V0
Q29kZShpbnQgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBDb2RlU2V0KSwgcHJvcGVydHlfY29kZV9hbHJlYWR5X3NldCk7CisgICAgICAgICAg
ICBtX3Jlc3VsdC0+c2V0SW50ZWdlcigiY29kZSJfcywgdmFsdWUpOworICAgICAgICAgICAgcmV0
dXJuIGNhc3RTdGF0ZTxDb2RlU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgUmVmPEVycm9y
PiByZWxlYXNlKCkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUg
PT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKHNpemVvZihFcnJvcikgPT0gc2l6ZW9mKEpTT046Ok9iamVjdCksIGNhbm5vdF9j
YXN0KTsKKworICAgICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4ganNvblJlc3VsdCA9IG1fcmVz
dWx0LnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFdURk1vdmUo
KnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPEVycm9yPio+KCZqc29uUmVzdWx0KSk7CisgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgfTsKKworICAgIC8qCisgICAgICogU3lu
dGhldGljIGNvbnN0cnVjdG9yOgorICAgICAqIFJlZjxFcnJvcj4gcmVzdWx0ID0gRXJyb3I6OmNy
ZWF0ZSgpCisgICAgICogICAgIC5zZXRNZXNzYWdlKC4uLikKKyAgICAgKiAgICAgLnNldENvZGUo
Li4uKQorICAgICAqICAgICAucmVsZWFzZSgpOworICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVy
PE5vRmllbGRzU2V0PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9G
aWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOworICAgIH0KK307CisKK30gLy8gRGF0
YWJhc2UKKworCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Ig
eworCituYW1lc3BhY2UgUHJvdG9jb2wgeworCisKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wK
KworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
T2JqZWN0cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRj
aGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0
aW9uYWwtcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKKworCituYW1l
c3BhY2UgSW5zcGVjdG9yIHsKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5o
IgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRl
ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisKK25hbWVzcGFjZSBJbnNw
ZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbENvbmZpZ3VyYXRpb24uaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2
ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29s
Lmg+CisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFj
ZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKK0Bwcm9wZXJ0eSAobm9uYXRv
bWljLCByZWFkb25seSkgVGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5FdmVudERpc3BhdGNoZXIg
KmRhdGFiYXNlRXZlbnREaXNwYXRjaGVyOworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25m
aWd1cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdp
dGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKKwor
I2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJh
Y2tlbmREaXNwYXRjaGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlz
cGF0Y2hhYmxlQWdlbnQuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5z
cGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0
ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsK
KworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KK3sKKyAgICBBdWdt
ZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworICAgIFRlc3RQcm90b2Nv
bERhdGFiYXNlRG9tYWluRXZlbnREaXNwYXRjaGVyICpfZGF0YWJhc2VFdmVudERpc3BhdGNoZXI7
Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5z
cGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07
CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIEFTU0VSVChjb250cm9s
bGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9
CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIFtfZGF0YWJhc2VFdmVudERpc3BhdGNoZXIgcmVs
ZWFzZV07CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistIChUZXN0UHJvdG9jb2xEYXRhYmFz
ZURvbWFpbkV2ZW50RGlzcGF0Y2hlciAqKWRhdGFiYXNlRXZlbnREaXNwYXRjaGVyCit7CisgICAg
aWYgKCFfZGF0YWJhc2VFdmVudERpc3BhdGNoZXIpCisgICAgICAgIF9kYXRhYmFzZUV2ZW50RGlz
cGF0Y2hlciA9IFtbVGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5FdmVudERpc3BhdGNoZXIgYWxs
b2NdIGluaXRXaXRoQ29udHJvbGxlcjpfY29udHJvbGxlcl07CisgICAgcmV0dXJuIF9kYXRhYmFz
ZUV2ZW50RGlzcGF0Y2hlcjsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sQ29uZmlndXJhdGlvbi5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnRE
aXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13
aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1w
b3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPHd0Zi9KU09OVmFs
dWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBU
ZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkV2ZW50RGlzcGF0Y2hlcgoreworICAgIEF1Z21lbnRh
YmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Cit9CisKKy0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29u
dHJvbGxlcgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAg
ICAgICByZXR1cm4gbmlsOworICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBfY29udHJvbGxl
ciA9IGNvbnRyb2xsZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGlkRXhlY3V0
ZU9wdGlvbmFsUGFyYW1ldGVyc1dpdGhDb2x1bW5OYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiov
ICoqKWNvbHVtbk5hbWVzIG5vdGVzOihOU1N0cmluZyAqKilub3RlcyB0aW1lc3RhbXA6KGRvdWJs
ZSAqKXRpbWVzdGFtcCB2YWx1ZXM6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKil2YWx1ZXMgcGF5
bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqKXBheWxvYWQgc3FsRXJyb3I6KFRlc3RQcm90
b2NvbERhdGFiYXNlRXJyb3IgKiopc3FsRXJyb3Igc2NyZWVuQ29sb3I6KE5TU3RyaW5nICoqKXNj
cmVlbkNvbG9yIGFsdGVybmF0ZUNvbG9yczooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKWFsdGVy
bmF0ZUNvbG9ycyBwcmludENvbG9yOihOU1N0cmluZyAqKilwcmludENvbG9yCit7CisgICAgY29u
c3QgRnJvbnRlbmRSb3V0ZXImIHJvdXRlciA9IF9jb250cm9sbGVyLT5mcm9udGVuZFJvdXRlcigp
OworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKGNvbHVt
bk5hbWVzLCBAImNvbHVtbk5hbWVzIik7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BU
SU9OQUxfUEFSQU1FVEVSKG5vdGVzLCBAIm5vdGVzIik7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHZhbHVlcywgQCJ2YWx1ZXMiKTsKKyAgICBUSFJPV19F
WENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIocGF5bG9hZCwgQCJwYXlsb2FkIik7
CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHNxbEVycm9y
LCBAInNxbEVycm9yIik7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFS
QU1FVEVSKHNjcmVlbkNvbG9yLCBAInNjcmVlbkNvbG9yIik7CisgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKGFsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVD
b2xvcnMiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIo
cHJpbnRDb2xvciwgQCJwcmludENvbG9yIik7CisKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29u
TWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAganNvbk1lc3NhZ2UtPnNldFN0
cmluZygibWV0aG9kIl9zLCAiRGF0YWJhc2UuZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyJf
cyk7CisgICAgUmVmPEpTT046Ok9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKTsKKyAgICBpZiAoY29sdW1uTmFtZXMpCisgICAgICAgIHBhcmFtc09iamVjdC0+c2V0
QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB0b0pTT05TdHJpbmdBcnJheSgoKmNvbHVtbk5hbWVzKSkp
OworICAgIGlmIChub3RlcykKKyAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoIm5vdGVz
Il9zLCAoKm5vdGVzKSk7CisgICAgaWYgKHRpbWVzdGFtcCkKKyAgICAgICAgcGFyYW1zT2JqZWN0
LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgKCp0aW1lc3RhbXApKTsKKyAgICBpZiAodmFsdWVz
KQorICAgICAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgidmFsdWVzIl9zLCBbKCp2YWx1ZXMp
IHRvSlNPTk9iamVjdF0pOworICAgIGlmIChwYXlsb2FkKQorICAgICAgICBwYXJhbXNPYmplY3Qt
PnNldFZhbHVlKCJwYXlsb2FkIl9zLCBbKCpwYXlsb2FkKSB0b0pTT05PYmplY3RdKTsKKyAgICBp
ZiAoc3FsRXJyb3IpCisgICAgICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJf
cywgWygqc3FsRXJyb3IpIHRvSlNPTk9iamVjdF0pOworICAgIGlmIChzY3JlZW5Db2xvcikKKyAg
ICAgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCAoKnNjcmVlbkNv
bG9yKSk7CisgICAgaWYgKGFsdGVybmF0ZUNvbG9ycykKKyAgICAgICAgcGFyYW1zT2JqZWN0LT5z
ZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCB0b0pTT05TdHJpbmdBcnJheSgoKmFsdGVybmF0
ZUNvbG9ycykpKTsKKyAgICBpZiAocHJpbnRDb2xvcikKKyAgICAgICAgcGFyYW1zT2JqZWN0LT5z
ZXRTdHJpbmcoInByaW50Q29sb3IiX3MsICgqcHJpbnRDb2xvcikpOworICAgIGpzb25NZXNzYWdl
LT5zZXRPYmplY3QoInBhcmFtcyJfcywgV1RGTW92ZShwYXJhbXNPYmplY3QpKTsKKyAgICByb3V0
ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cit9CisKKy0gKHZvaWQp
ZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzV2l0aENvbHVtbk5hbWVzOihOU0FycmF5Lyo8
TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcyBub3RlczooTlNTdHJpbmcgKilub3RlcyB0aW1lc3Rh
bXA6KGRvdWJsZSl0aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKil2YWx1
ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZCBzcWxFcnJvcjooVGVz
dFByb3RvY29sRGF0YWJhc2VFcnJvciAqKXNxbEVycm9yIHNjcmVlbkNvbG9yOihOU1N0cmluZyAq
KXNjcmVlbkNvbG9yIGFsdGVybmF0ZUNvbG9yczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopYWx0
ZXJuYXRlQ29sb3JzIHByaW50Q29sb3I6KE5TU3RyaW5nICopcHJpbnRDb2xvcgoreworICAgIGNv
bnN0IEZyb250ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29udHJvbGxlci0+ZnJvbnRlbmRSb3V0ZXIo
KTsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKGNvbHVtbk5h
bWVzLCBAImNvbHVtbk5hbWVzIik7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9Q
QVJBTUVURVIobm90ZXMsIEAibm90ZXMiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJ
UkVEX1BBUkFNRVRFUih2YWx1ZXMsIEAidmFsdWVzIik7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9SRVFVSVJFRF9QQVJBTUVURVIocGF5bG9hZCwgQCJwYXlsb2FkIik7CisgICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoc3FsRXJyb3IsIEAic3FsRXJyb3IiKTsKKyAg
ICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihzY3JlZW5Db2xvciwgQCJz
Y3JlZW5Db2xvciIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVS
KGFsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsKKyAgICBUSFJPV19FWENFUFRJ
T05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihwcmludENvbG9yLCBAInByaW50Q29sb3IiKTsKKwor
ICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KTsKKyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEYXRhYmFzZS5kaWRF
eGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMiX3MpOworICAgIFJlZjxKU09OOjpPYmplY3Q+IHBh
cmFtc09iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgcGFyYW1zT2JqZWN0LT5z
ZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KGNvbHVtbk5hbWVzKSk7
CisgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBub3Rlcyk7CisgICAgcGFy
YW1zT2JqZWN0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgdGltZXN0YW1wKTsKKyAgICBwYXJh
bXNPYmplY3QtPnNldE9iamVjdCgidmFsdWVzIl9zLCBbdmFsdWVzIHRvSlNPTk9iamVjdF0pOwor
ICAgIHBhcmFtc09iamVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFtwYXlsb2FkIHRvSlNPTk9i
amVjdF0pOworICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgW3NxbEVy
cm9yIHRvSlNPTk9iamVjdF0pOworICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJzY3JlZW5D
b2xvciJfcywgc2NyZWVuQ29sb3IpOworICAgIHBhcmFtc09iamVjdC0+c2V0QXJyYXkoImFsdGVy
bmF0ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5nQXJyYXkoYWx0ZXJuYXRlQ29sb3JzKSk7CisgICAg
cGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsIHByaW50Q29sb3IpOworICAg
IGpzb25NZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyJfcywgV1RGTW92ZShwYXJhbXNPYmplY3Qp
KTsKKyAgICByb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cit9
CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMu
bW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPEZvdW5kYXRp
b24vRm91bmRhdGlvbi5oPgorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09O
T2JqZWN0Lmg+CisKKworQGNsYXNzIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I7CisKKworCisK
K19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0
UHJvdG9jb2xEYXRhYmFzZUVycm9yIDogUldJUHJvdG9jb2xKU09OT2JqZWN0CistIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5
bG9hZDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2Nv
bEpTT05PYmplY3QgKilqc29uT2JqZWN0OworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTWVzc2Fn
ZTooTlNTdHJpbmcgKiltZXNzYWdlIGNvZGU6KGludCljb2RlOworLyogcmVxdWlyZWQgKi8gQHBy
b3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICptZXNzYWdlOworLyogcmVxdWlyZWQg
Ki8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgaW50IGNvZGU7CitAZW5kCisKKworCitf
X2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFBy
b3RvY29sRGF0YWJhc2VEb21haW5FdmVudERpc3BhdGNoZXIgOiBOU09iamVjdAorLSAodm9pZClk
aWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzV2l0aENvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNT
dHJpbmc+Ki8gKiopY29sdW1uTmFtZXMgbm90ZXM6KE5TU3RyaW5nICoqKW5vdGVzIHRpbWVzdGFt
cDooZG91YmxlICopdGltZXN0YW1wIHZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqKXZh
bHVlcyBwYXlsb2FkOihSV0lQcm90b2NvbEpTT05PYmplY3QgKiopcGF5bG9hZCBzcWxFcnJvcjoo
VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKilzcWxFcnJvciBzY3JlZW5Db2xvcjooTlNTdHJp
bmcgKiopc2NyZWVuQ29sb3IgYWx0ZXJuYXRlQ29sb3JzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8g
KiopYWx0ZXJuYXRlQ29sb3JzIHByaW50Q29sb3I6KE5TU3RyaW5nICoqKXByaW50Q29sb3I7Cist
ICh2b2lkKWRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1dpdGhDb2x1bW5OYW1lczooTlNB
cnJheS8qPE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMgbm90ZXM6KE5TU3RyaW5nICopbm90ZXMg
dGltZXN0YW1wOihkb3VibGUpdGltZXN0YW1wIHZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0
ICopdmFsdWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQgc3FsRXJy
b3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKilzcWxFcnJvciBzY3JlZW5Db2xvcjooTlNT
dHJpbmcgKilzY3JlZW5Db2xvciBhbHRlcm5hdGVDb2xvcnM6KE5TQXJyYXkvKjxOU1N0cmluZz4q
LyAqKWFsdGVybmF0ZUNvbG9ycyBwcmludENvbG9yOihOU1N0cmluZyAqKXByaW50Q29sb3I7CitA
ZW5kCisKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmls
aXR5T2JqZWN0cy5oPgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5o
IgorI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKKyNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8
d3RmL0pTT05WYWx1ZXMuaD4KKworQGludGVyZmFjZSBUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFp
bkV2ZW50RGlzcGF0Y2hlciAoUHJpdmF0ZSkKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRy
b2xsZXI6KEluc3BlY3Rvcjo6QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9s
bGVyOworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorCisj
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAi
VGVzdFByb3RvY29sLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNv
bnZlcnNpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBPYmpDRW51bVR5cGU+CitPcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmlu
Zyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgor
CisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2lt
cG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JX
SVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3Rv
cjsKKworQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKERhdGFiYXNlRG9t
YWluKQorCisrICh2b2lkKV9wYXJzZURhdGFiYXNlSWQ6KE5TU3RyaW5nICoqKW91dFZhbHVlIGZy
b21QYXlsb2FkOihpZClwYXlsb2FkOworKyAodm9pZClfcGFyc2VQcmltYXJ5Q29sb3JzOihOU1N0
cmluZyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNl
Q29sb3JMaXN0OihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6
KGlkKXBheWxvYWQ7CisrICh2b2lkKV9wYXJzZUVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVy
cm9yICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworCitAZW5kCisKK0BpbXBs
ZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKERhdGFiYXNlRG9tYWluKQor
CisrICh2b2lkKV9wYXJzZURhdGFiYXNlSWQ6KE5TU3RyaW5nICoqKW91dFZhbHVlIGZyb21QYXls
b2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXls
b2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSAoTlNTdHJpbmcgKilwYXls
b2FkOworfQorCisrICh2b2lkKV9wYXJzZVByaW1hcnlDb2xvcnM6KE5TU3RyaW5nICoqKW91dFZh
bHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9C
QURfVFlQRShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSAoTlNT
dHJpbmcgKilwYXlsb2FkOworfQorCisrICh2b2lkKV9wYXJzZUNvbG9yTGlzdDooTlNBcnJheS8q
PE5TU3RyaW5nPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNBcnJheS8qPE5TU3RyaW5n
PiovIGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKXBh
eWxvYWQ7Cit9CisKKysgKHZvaWQpX3BhcnNlRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJy
b3IgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENF
UFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKKyAgICAq
b3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgYWxsb2NdIGluaXRXaXRoUGF5
bG9hZDpwYXlsb2FkXTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5t
bQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFs
LXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2Nv
bEpTT05PYmplY3RQcml2YXRlLmg+CisjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2ltcG9y
dCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCitA
aW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcgorCistIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4g
KilwYXlsb2FkCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJl
dHVybiBuaWw7CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBh
eWxvYWRbQCJtZXNzYWdlIl0sIEAibWVzc2FnZSIpOworICAgIHNlbGYubWVzc2FnZSA9IHBheWxv
YWRbQCJtZXNzYWdlIl07CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BF
UlRZKHBheWxvYWRbQCJjb2RlIl0sIEAiY29kZSIpOworICAgIHNlbGYuY29kZSA9IFtwYXlsb2Fk
W0AiY29kZSJdIGludGVnZXJWYWx1ZV07CisKKyAgICByZXR1cm4gc2VsZjsKK30KKy0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilv
YmplY3QKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoSlNPTk9iamVjdDpbb2Jq
ZWN0IHRvSlNPTk9iamVjdF0uZ2V0KCldKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHJl
dHVybiBzZWxmOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0cmlu
ZyAqKW1lc3NhZ2UgY29kZTooaW50KWNvZGUKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGlu
aXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVR
VUlSRURfUFJPUEVSVFkobWVzc2FnZSwgQCJtZXNzYWdlIik7CisKKyAgICBzZWxmLm1lc3NhZ2Ug
PSBtZXNzYWdlOworICAgIHNlbGYuY29kZSA9IGNvZGU7CisKKyAgICByZXR1cm4gc2VsZjsKK30K
KworLSAodm9pZClzZXRNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UKK3sKKyAgICBbc3VwZXIg
c2V0U3RyaW5nOm1lc3NhZ2UgZm9yS2V5OkAibWVzc2FnZSJdOworfQorCistIChOU1N0cmluZyAq
KW1lc3NhZ2UKK3sKKyAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAIm1lc3NhZ2UiXTsK
K30KKworLSAodm9pZClzZXRDb2RlOihpbnQpY29kZQoreworICAgIFtzdXBlciBzZXRJbnRlZ2Vy
OmNvZGUgZm9yS2V5OkAiY29kZSJdOworfQorCistIChpbnQpY29kZQoreworICAgIHJldHVybiBb
c3VwZXIgaW50ZWdlckZvcktleTpAImNvZGUiXTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0
VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1lcnJvciBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWNv
bW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1lcnJv
cgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYTEzMGFkNzBjNDAKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1jb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWlu
LWRlYnVnZ2FibGVUeXBlLmpzb24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6IE1hbGZvcm1l
ZCBkb21haW4gc3BlY2lmaWNhdGlvbjogZG9tYWluIERvbWFpbiBoYXMgYW4gaXRlbSBpbiB0YXJn
ZXRUeXBlcyAiW3Und29ya2VyJ10iIHRoYXQgaXMgbm90IHN1cHBvcnRlZCBieSBhbnkgdmFsdWUg
aW4gZGVidWdnYWJsZVR5cGVzICJbdSdqYXZhc2NyaXB0J10iLgpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24t
Y29tbWFuZC10YXJnZXRUeXBlcy10eXBlLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1jb21tYW5kLXRhcmdl
dFR5cGVzLXR5cGUuanNvbi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMC4uOTlmNWUxYTRhOGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1jb21tYW5kLXRhcmdl
dFR5cGVzLXR5cGUuanNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjogTWFsZm9ybWVkIGRv
bWFpbiBzcGVjaWZpY2F0aW9uOiB0YXJnZXRUeXBlcyBsaXN0IGZvciBjb21tYW5kIFBhZ2VPbmx5
IGlzIG5vdCBhbiBhcnJheQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tY29tbWFuZC10YXJnZXRUeXBlcy12
YWx1ZS5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tY29tbWFuZC10YXJnZXRUeXBlcy12YWx1ZS5qc29uLWVy
cm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yMWEzNjU2OTkyNgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlwZXMtdmFsdWUuanNvbi1l
cnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjogTWFsZm9ybWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9u
OiB0YXJnZXRUeXBlcyBsaXN0IGZvciBjb21tYW5kIFBhZ2VPbmx5IGlzIGFuIHVuc3VwcG9ydGVk
IHN0cmluZy4gV2FzOiAiW3UncGFnZWUnXSIsIEFsbG93ZWQgdmFsdWVzOiBzZXJ2aWNlLXdvcmtl
ciwgamF2YXNjcmlwdCwgd29ya2VyLCBwYWdlLCB3ZWItcGFnZQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24t
ZG9tYWluLWRlYnVnZ2FibGVUeXBlcy10eXBlLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4tZGVi
dWdnYWJsZVR5cGVzLXR5cGUuanNvbi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMC4uMmI4OThiYTdiZTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4t
ZGVidWdnYWJsZVR5cGVzLXR5cGUuanNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjogTWFs
Zm9ybWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9uOiBkZWJ1Z2dhYmxlVHlwZXMgZm9yIGRvbWFpbiBX
ZWJPbmx5IGlzIG5vdCBhbiBhcnJheQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZG9tYWluLWRlYnVnZ2Fi
bGVUeXBlcy12YWx1ZS5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZG9tYWluLWRlYnVnZ2FibGVUeXBlcy12
YWx1ZS5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5i
ZjcxZDQ3MGNiZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWRvbWFpbi1kZWJ1Z2dhYmxlVHlw
ZXMtdmFsdWUuanNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjogTWFsZm9ybWVkIGRvbWFp
biBzcGVjaWZpY2F0aW9uOiBkZWJ1Z2dhYmxlVHlwZXMgZm9yIGRvbWFpbiBXZWJPbmx5IGlzIGFu
IHVuc3VwcG9ydGVkIHN0cmluZy4gV2FzOiAiW3Und2ViYiddIiwgQWxsb3dlZCB2YWx1ZXM6IHNl
cnZpY2Utd29ya2VyLCBqYXZhc2NyaXB0LCBwYWdlLCB3ZWItcGFnZQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwt
b24tZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24t
ZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJs
ZVR5cGUuanNvbi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u
ODY3ZTM1MDA4OTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZS1t
YXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitF
UlJPUjogTWFsZm9ybWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9uOiBjb21tYW5kIENvbW1hbmQgaGFz
IGFuIGl0ZW0gaW4gdGFyZ2V0VHlwZXMgIlt1J3dvcmtlciddIiB0aGF0IGlzIG5vdCBzdXBwb3J0
ZWQgYnkgYW55IHZhbHVlIGluIGRlYnVnZ2FibGVUeXBlcyAiW3UnamF2YXNjcmlwdCddIi4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC9mYWlsLW9uLWRvbWFpbi10YXJnZXRUeXBlcy10eXBlLmpzb24tZXJyb3IgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1v
bi1kb21haW4tdGFyZ2V0VHlwZXMtdHlwZS5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwLi5lOWEzNTkzM2EzNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9u
LWRvbWFpbi10YXJnZXRUeXBlcy10eXBlLmpzb24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6
IE1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjogdGFyZ2V0VHlwZXMgZm9yIGRvbWFpbiBQ
YWdlT25seSBpcyBub3QgYW4gYXJyYXkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWRvbWFpbi10YXJnZXRU
eXBlcy12YWx1ZS5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZG9tYWluLXRhcmdldFR5cGVzLXZhbHVlLmpz
b24tZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjQ2ODA3Zjcy
ZmM0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZG9tYWluLXRhcmdldFR5cGVzLXZhbHVlLmpz
b24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6IE1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNh
dGlvbjogdGFyZ2V0VHlwZXMgZm9yIGRvbWFpbiBQYWdlT25seSBpcyBhbiB1bnN1cHBvcnRlZCBz
dHJpbmcuIFdhczogIlt1J3BhZ2VlJ10iLCBBbGxvd2VkIHZhbHVlczogc2VydmljZS13b3JrZXIs
IGphdmFzY3JpcHQsIHdvcmtlciwgcGFnZSwgd2ViLXBhZ2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWR1
cGxpY2F0ZS1jb21tYW5kLWNhbGwtcGFyYW1ldGVyLW5hbWVzLmpzb24tZXJyb3IgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1k
dXBsaWNhdGUtY29tbWFuZC1jYWxsLXBhcmFtZXRlci1uYW1lcy5qc29uLWVycm9yCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4zZjc1NmRlMzI1MAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS1jb21tYW5kLWNhbGwtcGFyYW1ldGVyLW5hbWVzLmpzb24t
ZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6IE1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNhdGlv
bjogY2FsbCBwYXJhbWV0ZXIgbGlzdCBmb3IgY29tbWFuZCBwcm9jZXNzUG9pbnRzIGhhcyBkdXBs
aWNhdGUgcGFyYW1ldGVyIG5hbWVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFu
ZC1yZXR1cm4tcGFyYW1ldGVyLW5hbWVzLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtY29t
bWFuZC1yZXR1cm4tcGFyYW1ldGVyLW5hbWVzLmpzb24tZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAuLmVhMTQ4ZmY2N2M5Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwt
b24tZHVwbGljYXRlLWNvbW1hbmQtcmV0dXJuLXBhcmFtZXRlci1uYW1lcy5qc29uLWVycm9yCkBA
IC0wLDAgKzEgQEAKK0VSUk9SOiBNYWxmb3JtZWQgZG9tYWluIHNwZWNpZmljYXRpb246IHJldHVy
biBwYXJhbWV0ZXIgbGlzdCBmb3IgY29tbWFuZCBwcm9jZXNzUG9pbnRzIGhhcyBkdXBsaWNhdGUg
cGFyYW1ldGVyIG5hbWVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtZXZlbnQtcGFyYW1l
dGVyLW5hbWVzLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtZXZlbnQtcGFyYW1ldGVyLW5h
bWVzLmpzb24tZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmM3
MWJiZDIxYzJjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLWV2ZW50LXBhcmFt
ZXRlci1uYW1lcy5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBNYWxmb3JtZWQgZG9t
YWluIHNwZWNpZmljYXRpb246IHBhcmFtZXRlciBsaXN0IGZvciBldmVudCBwcm9jZXNzZWRQb2lu
dHMgaGFzIGR1cGxpY2F0ZSBwYXJhbWV0ZXIgbmFtZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWR1cGxp
Y2F0ZS10eXBlLWRlY2xhcmF0aW9ucy5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLXR5cGUt
ZGVjbGFyYXRpb25zLmpzb24tZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAuLjQ0N2NkZjhlMjhlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLXR5
cGUtZGVjbGFyYXRpb25zLmpzb24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6IER1cGxpY2F0
ZSB0eXBlIGRlY2xhcmF0aW9uOiBSdW50aW1lLlJlbW90ZU9iamVjdElkCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFp
bC1vbi1kdXBsaWNhdGUtdHlwZS1tZW1iZXItbmFtZXMuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWR1cGxp
Y2F0ZS10eXBlLW1lbWJlci1uYW1lcy5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwLi5kNTM3NmE3N2E0NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWR1
cGxpY2F0ZS10eXBlLW1lbWJlci1uYW1lcy5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9S
OiBNYWxmb3JtZWQgZG9tYWluIHNwZWNpZmljYXRpb246IHR5cGUgZGVjbGFyYXRpb24gZm9yIFBv
aW50IGhhcyBkdXBsaWNhdGUgbWVtYmVyIG5hbWVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1lbnVtLXdp
dGgtbm8tdmFsdWVzLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1lbnVtLXdpdGgtbm8tdmFsdWVzLmpzb24t
ZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjI2NTVjMmI5MDdl
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZW51bS13aXRoLW5vLXZhbHVlcy5qc29uLWVycm9y
CkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBUeXBlIHJlZmVyZW5jZSB3aXRoIGVudW0gdmFsdWVzIG11
c3QgaGF2ZSBhdCBsZWFzdCBvbmUgZW51bSB2YWx1ZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWV2ZW50
LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tZXJyb3IgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFp
bC1vbi1ldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29u
LWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5iNjVkN2EwZDE5
NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9t
YWluLWRlYnVnZ2FibGVUeXBlLmpzb24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6IE1hbGZv
cm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjogZXZlbnQgRXZlbnQgaGFzIGFuIGl0ZW0gaW4gdGFy
Z2V0VHlwZXMgIlt1J3dvcmtlciddIiB0aGF0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgYW55IHZhbHVl
IGluIGRlYnVnZ2FibGVUeXBlcyAiW3UnamF2YXNjcmlwdCddIi4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9u
LWV2ZW50LXRhcmdldFR5cGVzLXR5cGUuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWV2ZW50LXRhcmdldFR5
cGVzLXR5cGUuanNvbi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MC4uNzQwM2UxM2E4MDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1ldmVudC10YXJnZXRUeXBl
cy10eXBlLmpzb24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6IE1hbGZvcm1lZCBkb21haW4g
c3BlY2lmaWNhdGlvbjogdGFyZ2V0VHlwZXMgZm9yIGV2ZW50IFBhZ2VPbmx5IGlzIG5vdCBhbiBh
cnJheQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlwZXMtdmFsdWUuanNvbi1lcnJv
ciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGVzLXZhbHVlLmpzb24tZXJyb3IKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjgzMDEyYTlmZTRlCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVk
L2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlwZXMtdmFsdWUuanNvbi1lcnJvcgpAQCAtMCwwICsxIEBA
CitFUlJPUjogTWFsZm9ybWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9uOiB0YXJnZXRUeXBlcyBmb3Ig
ZXZlbnQgUGFnZU9ubHkgaXMgYW4gdW5zdXBwb3J0ZWQgc3RyaW5nLiBXYXM6ICJbdSdwYWdlZSdd
IiwgQWxsb3dlZCB2YWx1ZXM6IHNlcnZpY2Utd29ya2VyLCBqYXZhc2NyaXB0LCB3b3JrZXIsIHBh
Z2UsIHdlYi1wYWdlCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtcGFy
YW1ldGVyLWZsYWcuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRpb25hbC1wYXJh
bWV0ZXItZmxhZy5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwLi45N2IyYWYwZTQ3ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLW51bWJlci10eXBlZC1v
cHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBU
aGUgJ29wdGlvbmFsJyBmbGFnIGZvciBhIHBhcmFtZXRlciBtdXN0IGJlIGEgYm9vbGVhbiBsaXRl
cmFsLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tbnVtYmVyLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVy
Lmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZXhwZWN0ZWQvZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNv
bi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uODZkZjM3NTBj
MWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtdHlwZS1t
ZW1iZXIuanNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjogVGhlICdvcHRpb25hbCcgZmxh
ZyBmb3IgYSB0eXBlIG1lbWJlciBtdXN0IGJlIGEgYm9vbGVhbiBsaXRlcmFsLgpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVk
L2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24tZXJyb3Ig
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
ZmFpbC1vbi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbi1lcnJvcgpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOTdiMmFmMGU0N2UKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZXhwZWN0ZWQvZmFpbC1vbi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcu
anNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjogVGhlICdvcHRpb25hbCcgZmxhZyBmb3Ig
YSBwYXJhbWV0ZXIgbXVzdCBiZSBhIGJvb2xlYW4gbGl0ZXJhbC4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9u
LXN0cmluZy10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29uLWVycm9yIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tc3Ry
aW5nLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24tZXJyb3IKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjg2ZGYzNzUwYzFhCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2Zh
aWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24tZXJyb3IKQEAgLTAs
MCArMSBAQAorRVJST1I6IFRoZSAnb3B0aW9uYWwnIGZsYWcgZm9yIGEgdHlwZSBtZW1iZXIgbXVz
dCBiZSBhIGJvb2xlYW4gbGl0ZXJhbC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXR5cGUtZGVjbGFyYXRp
b24tdXNpbmctdHlwZS1yZWZlcmVuY2UuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXR5cGUtZGVjbGFyYXRp
b24tdXNpbmctdHlwZS1yZWZlcmVuY2UuanNvbi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMC4uNDJmNTc1M2E0MzkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi10
eXBlLWRlY2xhcmF0aW9uLXVzaW5nLXR5cGUtcmVmZXJlbmNlLmpzb24tZXJyb3IKQEAgLTAsMCAr
MSBAQAorRVJST1I6IFR5cGUgcmVmZXJlbmNlIGNhbm5vdCBoYXZlIGJvdGggJ3R5cGUnIGFuZCAn
JHJlZicga2V5cy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXR5cGUtcmVmZXJlbmNlLWFzLXByaW1pdGl2
ZS10eXBlLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi10eXBlLXJlZmVyZW5jZS1hcy1wcmltaXRpdmUtdHlw
ZS5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kNzZi
YzFjNzc3MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXR5cGUtcmVmZXJlbmNlLWFzLXByaW1p
dGl2ZS10eXBlLmpzb24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6IFR5cGUgcmVmZXJlbmNl
ICdEYXRhYmFzZUlkJyBpcyBub3QgYSBwcmltaXRpdmUgdHlwZS4gQWxsb3dlZCB2YWx1ZXM6IGlu
dGVnZXIsIG51bWJlciwgc3RyaW5nLCBib29sZWFuLCBlbnVtLCBvYmplY3QsIGFycmF5LCBhbnkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9leHBlY3RlZC9mYWlsLW9uLXR5cGUtd2l0aC1sb3dlcmNhc2UtbmFtZS5qc29uLWVycm9yIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2Zh
aWwtb24tdHlwZS13aXRoLWxvd2VyY2FzZS1uYW1lLmpzb24tZXJyb3IKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjRlNDYyMjUwYzBhCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2Zh
aWwtb24tdHlwZS13aXRoLWxvd2VyY2FzZS1uYW1lLmpzb24tZXJyb3IKQEAgLTAsMCArMSBAQAor
RVJST1I6IFR5cGVzIG11c3QgYmVnaW4gd2l0aCBhbiB1cHBlcmNhc2UgY2hhcmFjdGVyLgpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4
cGVjdGVkL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLWRlY2xhcmF0aW9u
Lmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZXhwZWN0ZWQvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtZGVjbGFy
YXRpb24uanNvbi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u
MmQzOGU2NDY3NWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJl
bmNlLWluLXR5cGUtZGVjbGFyYXRpb24uanNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjog
VHlwZSByZWZlcmVuY2UgJ2RyYWdvbicgaXMgbm90IGEgcHJpbWl0aXZlIHR5cGUuIEFsbG93ZWQg
dmFsdWVzOiBpbnRlZ2VyLCBudW1iZXIsIHN0cmluZywgYm9vbGVhbiwgZW51bSwgb2JqZWN0LCBh
cnJheSwgYW55CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5
cGUtbWVtYmVyLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5
cGUtbWVtYmVyLmpzb24tZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAuLmZhZjY2NzJjYmVmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tdW5rbm93bi10eXBlLXJl
ZmVyZW5jZS1pbi10eXBlLW1lbWJlci5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBM
b29rdXAgZmFpbGVkIGZvciB0eXBlIHJlZmVyZW5jZTogQ29sb3IgKHJlZmVyZW5jZWQgZnJvbSBk
b21haW46IEZhbnRhc3kpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUt
Z3VhcmRzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL2dlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5q
c29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZWIxM2Q4
NWI1ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3Vh
cmRzLmpzb24tcmVzdWx0CkBAIC0wLDAgKzEsMTE4OCBAQAorIyMjIEJlZ2luIEZpbGU6IEluc3Bl
Y3RvckJhY2tlbmRDb21tYW5kcy5qcworLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKy8vIE5ldHdvcmsxCitJbnNwZWN0b3JCYWNr
ZW5kLnJlZ2lzdGVyRG9tYWluKCJOZXR3b3JrMSIsIG51bGwpOworSW5zcGVjdG9yQmFja2VuZC5y
ZWdpc3RlckNvbW1hbmQoIk5ldHdvcmsxLmxvYWRSZXNvdXJjZSIsIG51bGwsIFtdLCBbXSk7CitJ
bnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJOZXR3b3JrMSIsIG51bGwpOworCisvLyBO
ZXR3b3JrMworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiTmV0d29yazMiLCBudWxs
KTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudCgiTmV0d29yazMucmVzb3VyY2VMb2Fk
ZWQiLCBudWxsLCBbXSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyTmV0d29yazNEaXNwYXRj
aGVyID0gSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRpc3BhdGNoZXIuYmluZChJbnNwZWN0b3JC
YWNrZW5kLCAiTmV0d29yazMiKTsKK0luc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIk5l
dHdvcmszIiwgbnVsbCk7CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5q
cworCisjIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZl
YXR1cmUtZ3VhcmRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorCituYW1lc3BhY2UgSW5zcGVj
dG9yIHsKKworY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAg
IHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRp
c3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0K
KyAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVy
biBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Citwcml2YXRlOgorICAgIFJlZlB0cjxCYWNr
ZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKK307CisKKworY2xhc3MgQWx0ZXJu
YXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlz
cGF0Y2hlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+QWx0ZXJuYXRlTmV0d29yazFCYWNrZW5k
RGlzcGF0Y2hlcigpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UobG9uZyBjYWxs
SWQpID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjIyMgRW5kIEZpbGU6IFRlc3RB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tl
bmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJh
dGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJv
dG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNw
YWNlIEluc3BlY3RvciB7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCisjaWYgRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCitjbGFzcyBBbHRlcm5hdGVOZXR3
b3JrMUJhY2tlbmREaXNwYXRjaGVyOworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQorCitjbGFzcyBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxl
ciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZShFcnJvclN0cmluZyYp
ID0gMDsKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5OZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlcigpOworfTsKKworY2xhc3MgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6
IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFJlZjxOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNo
ZXImLCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIHZvaWQgZGlzcGF0
Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0
PiYmIG1lc3NhZ2UpIGZpbmFsOworcHJpdmF0ZToKKyAgICB2b2lkIGxvYWRSZXNvdXJjZShsb25n
IHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyNpZiBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK3B1YmxpYzoKKyAgICB2b2lkIHNl
dEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciog
YWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVE
aXNwYXRjaGVyOyB9Citwcml2YXRlOgorICAgIEFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3Bh
dGNoZXIqIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciB7IG51bGxwdHIgfTsKKyNlbmRpZiAvLyBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK3ByaXZhdGU6CisgICAgTmV0d29y
azFCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYsIE5ldHdvcmsxQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyKik7CisgICAgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIq
IG1fYWdlbnQgeyBudWxscHRyIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMj
IyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBU
ZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCisvLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVz
Lmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
CisjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgorI2VuZGlmIC8v
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCituYW1lc3BhY2UgSW5z
cGVjdG9yIHsKKworTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5OZXR3b3JrMUJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQorCitSZWY8TmV0d29yazFCYWNrZW5kRGlzcGF0
Y2hlcj4gTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEJhY2tlbmREaXNwYXRjaGVy
JiBiYWNrZW5kRGlzcGF0Y2hlciwgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFn
ZW50KQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE5ldHdvcmsxQmFja2VuZERpc3BhdGNo
ZXIoYmFja2VuZERpc3BhdGNoZXIsIGFnZW50KSk7Cit9CisKK05ldHdvcmsxQmFja2VuZERpc3Bh
dGNoZXI6Ok5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tl
bmREaXNwYXRjaGVyLCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCisg
ICAgOiBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKKyAg
ICAsIG1fYWdlbnQoYWdlbnQpCit7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJE
aXNwYXRjaGVyRm9yRG9tYWluKCJOZXR3b3JrMSJfcywgdGhpcyk7Cit9CisKK3ZvaWQgTmV0d29y
azFCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmlu
ZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCit7CisgICAgUmVmPE5ldHdv
cmsxQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOworCisgICAgUmVmUHRyPEpTT046
Ok9iamVjdD4gcGFyYW1ldGVyczsKKyAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywg
cGFyYW1ldGVycyk7CisKKyAgICBpZiAobWV0aG9kID09ICJsb2FkUmVzb3VyY2UiKSB7CisgICAg
ICAgIGxvYWRSZXNvdXJjZShyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9j
b2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazEuIiAr
IG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKK30KKwordm9pZCBOZXR3b3JrMUJhY2tlbmRE
aXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+JiYpCit7CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisg
ICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeworICAgICAgICBtX2FsdGVybmF0ZURpc3Bh
dGNoZXItPmxvYWRSZXNvdXJjZShyZXF1ZXN0SWQpOworICAgICAgICByZXR1cm47CisgICAgfQor
I2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCisgICAg
RXJyb3JTdHJpbmcgZXJyb3I7CisgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2UoZXJyb3IpOworCisg
ICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2Vu
ZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7CisgICAgZWxzZQor
ICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmRE
aXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOworfQorCit9IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNw
cAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1
YXJkcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUg
PHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25h
bWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBGcm9udGVuZFJvdXRlcjsKKworY2xhc3MgTmV0
d29yazNGcm9udGVuZERpc3BhdGNoZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwor
cHVibGljOgorICAgIE5ldHdvcmszRnJvbnRlbmREaXNwYXRjaGVyKEZyb250ZW5kUm91dGVyJiBm
cm9udGVuZFJvdXRlcikgOiBtX2Zyb250ZW5kUm91dGVyKGZyb250ZW5kUm91dGVyKSB7IH0KKyAg
ICB2b2lkIHJlc291cmNlTG9hZGVkKCk7Citwcml2YXRlOgorICAgIEZyb250ZW5kUm91dGVyJiBt
X2Zyb250ZW5kUm91dGVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5k
IEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RG
cm9udGVuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit2b2lkIE5ldHdvcmszRnJvbnRlbmREaXNw
YXRjaGVyOjpyZXNvdXJjZUxvYWRlZCgpCit7CisgICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1l
c3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGpzb25NZXNzYWdlLT5zZXRTdHJp
bmcoIm1ldGhvZCJfcywgIk5ldHdvcmszLnJlc291cmNlTG9hZGVkIl9zKTsKKworICAgIG1fZnJv
bnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERp
c3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZl
YXR1cmUtZ3VhcmRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQ
cm90b2NvbFR5cGVzLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNl
IEluc3BlY3RvciB7CisKKworCituYW1lc3BhY2UgUHJvdG9jb2wgeworCisKKworLy8gRm9yd2Fy
ZCBkZWNsYXJhdGlvbnMuCituYW1lc3BhY2UgTmV0d29yazIgeworY2xhc3MgTmV0d29ya0Vycm9y
OworfSAvLyBOZXR3b3JrMgorLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgorCisKKwor
CituYW1lc3BhY2UgTmV0d29yazIgeworY2xhc3MgTmV0d29ya0Vycm9yIDogcHVibGljIEpTT046
Ok9iamVjdEJhc2UgeworcHVibGljOgorICAgIGVudW0geworICAgICAgICBOb0ZpZWxkc1NldCA9
IDAsCisgICAgICAgIE1lc3NhZ2VTZXQgPSAxIDw8IDAsCisgICAgICAgIENvZGVTZXQgPSAxIDw8
IDEsCisgICAgICAgIEFsbEZpZWxkc1NldCA9IChNZXNzYWdlU2V0IHwgQ29kZVNldCkKKyAgICB9
OworCisgICAgdGVtcGxhdGU8aW50IFNUQVRFPgorICAgIGNsYXNzIEJ1aWxkZXIgeworICAgIHBy
aXZhdGU6CisgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVzdWx0OworCisgICAgICAg
IHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNU
QVRFIHwgU1RFUD4qPih0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXIoUmVmPC8q
TmV0d29ya0Vycm9yKi9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQorICAgICAgICAgICAgOiBtX3Jl
c3VsdChXVEZNb3ZlKG9iamVjdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3Rh
dGUpOworICAgICAgICB9CisgICAgICAgIGZyaWVuZCBjbGFzcyBOZXR3b3JrRXJyb3I7CisgICAg
cHVibGljOgorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2Fn
ZShjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgTWVzc2FnZVNldCksIHByb3BlcnR5X21lc3NhZ2VfYWxyZWFkeV9zZXQp
OworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibWVzc2FnZSJfcywgdmFsdWUpOwor
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNZXNzYWdlU2V0PigpOworICAgICAgICB9CisK
KyAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvZGVTZXQ+JiBzZXRDb2RlKGludCB2YWx1ZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENvZGVTZXQpLCBw
cm9wZXJ0eV9jb2RlX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJbnRl
Z2VyKCJjb2RlIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvZGVT
ZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBSZWY8TmV0d29ya0Vycm9yPiByZWxlYXNlKCkK
KyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRz
U2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNp
emVvZihOZXR3b3JrRXJyb3IpID09IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7
CisKKyAgICAgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25SZXN1bHQgPSBtX3Jlc3VsdC5y
ZWxlYXNlTm9uTnVsbCgpOworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBXVEZNb3ZlKCpyZWlu
dGVycHJldF9jYXN0PFJlZjxOZXR3b3JrRXJyb3I+Kj4oJmpzb25SZXN1bHQpKTsKKyAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyoKKyAgICAgKiBT
eW50aGV0aWMgY29uc3RydWN0b3I6CisgICAgICogUmVmPE5ldHdvcmtFcnJvcj4gcmVzdWx0ID0g
TmV0d29ya0Vycm9yOjpjcmVhdGUoKQorICAgICAqICAgICAuc2V0TWVzc2FnZSguLi4pCisgICAg
ICogICAgIC5zZXRDb2RlKC4uLikKKyAgICAgKiAgICAgLnJlbGVhc2UoKTsKKyAgICAgKi8KKyAg
ICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICB9
Cit9OworCit9IC8vIE5ldHdvcmsyCisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0
cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1
YXJkcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisKKyNp
bmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisK
K25hbWVzcGFjZSBJbnNwZWN0b3IgeworCituYW1lc3BhY2UgUHJvdG9jb2wgeworCisKKworfSAv
LyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2luY2x1ZGUgPHd0
Zi9SZXRhaW5QdHIuaD4KKworQHByb3RvY29sIFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFu
ZGxlcjsKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworY2xhc3MgT2JqQ0luc3BlY3Rvck5l
dHdvcmsxQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJuYXRlTmV0d29yazFC
YWNrZW5kRGlzcGF0Y2hlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6
CisgICAgT2JqQ0luc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3Rv
Y29sTmV0d29yazFEb21haW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVy
OyB9CisgICAgdm9pZCBsb2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0SWQpIGZpbmFsOworcHJpdmF0
ZToKKyAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyPj4g
bV9kZWxlZ2F0ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcu
aCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVk
ZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorCituYW1lc3BhY2UgSW5z
cGVjdG9yIHsKKwordm9pZCBPYmpDSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6
bG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkKQoreworICAgIGlmICghW21fZGVsZWdhdGUgcmVz
cG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2VXaXRoRXJyb3JDYWxsYmFjazpz
dWNjZXNzQ2FsbGJhY2s6KV0pIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0
UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3Vu
ZCwgIidOZXR3b3JrMS5sb2FkUmVzb3VyY2UnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Cisg
ICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElk
LCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICB9OworCisgICAgaWQgc3Vj
Y2Vzc0NhbGxiYWNrID0gXnsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3Bv
bnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2UpOworICAgIH07CisK
KyAgICBbbV9kZWxlZ2F0ZSBsb2FkUmVzb3VyY2VXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxi
YWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOworfQorCisKK30gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRj
aGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZl
YXR1cmUtZ3VhcmRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgorCitfX2F0dHJpYnV0
ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29u
ZmlndXJhdGlvbiA6IE5TT2JqZWN0CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluLCBzZXR0
ZXI9c2V0TmV0d29yazFIYW5kbGVyOikgaWQ8VGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5k
bGVyPiBuZXR3b3JrMUhhbmRsZXI7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFRl
c3RQcm90b2NvbE5ldHdvcmszRG9tYWluRXZlbnREaXNwYXRjaGVyICpuZXR3b3JrM0V2ZW50RGlz
cGF0Y2hlcjsKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRp
b24uaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0
dXJlLWd1YXJkcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKKworI2ltcG9ydCAiVGVz
dFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRj
aGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdl
bnQuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJv
bGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2Vu
ZERpc3BhdGNoZXJzLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVu
dGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KK3sKKyAgICBBdWdtZW50YWJsZUluc3Bl
Y3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworICAgIGlkPFRlc3RQcm90b2NvbE5ldHdvcmsx
RG9tYWluSGFuZGxlcj4gX25ldHdvcmsxSGFuZGxlcjsKKyAgICBUZXN0UHJvdG9jb2xOZXR3b3Jr
M0RvbWFpbkV2ZW50RGlzcGF0Y2hlciAqX25ldHdvcmszRXZlbnREaXNwYXRjaGVyOworfQorCist
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNv
bnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlm
ICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7Cisg
ICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQorCistICh2
b2lkKWRlYWxsb2MKK3sKKyAgICBbX25ldHdvcmsxSGFuZGxlciByZWxlYXNlXTsKKyAgICBbX25l
dHdvcmszRXZlbnREaXNwYXRjaGVyIHJlbGVhc2VdOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30K
KworLSAodm9pZClzZXROZXR3b3JrMUhhbmRsZXI6KGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9t
YWluSGFuZGxlcj4paGFuZGxlcgoreworICAgIGlmIChoYW5kbGVyID09IF9uZXR3b3JrMUhhbmRs
ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIFtfbmV0d29yazFIYW5kbGVyIHJlbGVhc2VdOwor
ICAgIF9uZXR3b3JrMUhhbmRsZXIgPSBbaGFuZGxlciByZXRhaW5dOworCisgICAgYXV0byBhbHRl
cm5hdGVEaXNwYXRjaGVyID0gbWFrZVVuaXF1ZTxPYmpDSW5zcGVjdG9yTmV0d29yazFCYWNrZW5k
RGlzcGF0Y2hlcj4oaGFuZGxlcik7CisgICAgYXV0byBhbHRlcm5hdGVBZ2VudCA9IG1ha2VVbmlx
dWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciwg
QWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4+KCJOZXR3b3JrMSJfcywgKl9jb250
cm9sbGVyLCBXVEZNb3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIpKTsKKyAgICBfY29udHJvbGxlci0+
YXBwZW5kRXh0cmFBZ2VudChXVEZNb3ZlKGFsdGVybmF0ZUFnZW50KSk7Cit9CisKKy0gKGlkPFRl
c3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4pbmV0d29yazFIYW5kbGVyCit7CisgICAg
cmV0dXJuIF9uZXR3b3JrMUhhbmRsZXI7Cit9CisKKy0gKFRlc3RQcm90b2NvbE5ldHdvcmszRG9t
YWluRXZlbnREaXNwYXRjaGVyICopbmV0d29yazNFdmVudERpc3BhdGNoZXIKK3sKKyAgICBpZiAo
IV9uZXR3b3JrM0V2ZW50RGlzcGF0Y2hlcikKKyAgICAgICAgX25ldHdvcmszRXZlbnREaXNwYXRj
aGVyID0gW1tUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkV2ZW50RGlzcGF0Y2hlciBhbGxvY10g
aW5pdFdpdGhDb250cm9sbGVyOl9jb250cm9sbGVyXTsKKyAgICByZXR1cm4gX25ldHdvcmszRXZl
bnREaXNwYXRjaGVyOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xD
b25maWd1cmF0aW9uLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3Bh
dGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9t
YWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2lt
cG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDx3dGYvSlNPTlZh
bHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24g
VGVzdFByb3RvY29sTmV0d29yazNEb21haW5FdmVudERpc3BhdGNoZXIKK3sKKyAgICBBdWdtZW50
YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworfQorCistIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNv
bnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAg
ICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xs
ZXIgPSBjb250cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXJlc291cmNl
TG9hZGVkCit7CisgICAgY29uc3QgRnJvbnRlbmRSb3V0ZXImIHJvdXRlciA9IF9jb250cm9sbGVy
LT5mcm9udGVuZFJvdXRlcigpOworCisgICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2Ug
PSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1l
dGhvZCJfcywgIk5ldHdvcmszLnJlc291cmNlTG9hZGVkIl9zKTsKKyAgICByb3V0ZXIuc2VuZEV2
ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cit9CisKK0BlbmQKKworCisjIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJh
dGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+
CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KKworCitA
Y2xhc3MgVGVzdFByb3RvY29sTmV0d29yazJOZXR3b3JrRXJyb3I7CisKKworCisKK19fYXR0cmli
dXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xO
ZXR3b3JrMk5ldHdvcmtFcnJvciA6IFJXSVByb3RvY29sSlNPTk9iamVjdAorLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxv
YWQ7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xK
U09OT2JqZWN0ICopanNvbk9iamVjdDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6
KE5TU3RyaW5nICopbWVzc2FnZSBjb2RlOihpbnQpY29kZTsKKy8qIHJlcXVpcmVkICovIEBwcm9w
ZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqbWVzc2FnZTsKKy8qIHJlcXVpcmVkICov
IEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCBjb2RlOworQGVuZAorCitAcHJvdG9j
b2wgVGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyIDxOU09iamVjdD4KK0BvcHRpb25h
bAorLSAodm9pZClsb2FkUmVzb3VyY2VXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmlu
ZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKHZvaWQpKXN1
Y2Nlc3NDYWxsYmFjazsKK0BlbmQKKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1
bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbE5ldHdvcmszRG9tYWluRXZlbnREaXNwYXRj
aGVyIDogTlNPYmplY3QKKy0gKHZvaWQpcmVzb3VyY2VMb2FkZWQ7CitAZW5kCisKKworI2ltcG9y
dCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgor
CisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xJbnRlcm5hbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJh
dGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0
ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENv
cmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDx3dGYvSlNPTlZh
bHVlcy5oPgorCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbE5ldHdvcmszRG9tYWluRXZlbnREaXNw
YXRjaGVyIChQcml2YXRlKQorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooSW5z
cGVjdG9yOjpBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXI7CitAZW5k
CisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQ
cm90b2NvbC5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJz
aW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgT2Jq
Q0VudW1UeXBlPgorT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29u
c3QgU3RyaW5nJiB2YWx1ZSk7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorCisjIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2lt
cG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JX
SVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3Rv
cjsKKworQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKE5ldHdvcmsyRG9t
YWluKQorCisrICh2b2lkKV9wYXJzZU5ldHdvcmtFcnJvcjooVGVzdFByb3RvY29sTmV0d29yazJO
ZXR3b3JrRXJyb3IgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisKK0BlbmQK
KworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoTmV0d29yazJE
b21haW4pCisKKysgKHZvaWQpX3BhcnNlTmV0d29ya0Vycm9yOihUZXN0UHJvdG9jb2xOZXR3b3Jr
Mk5ldHdvcmtFcnJvciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFz
c10pOworICAgICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sTmV0d29yazJOZXR3b3JrRXJyb3Ig
YWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKK30KKworQGVuZAorCisKKyMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xUeXBlcy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdl
bmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFs
LmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8
V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKyNpbXBvcnQgPHd0
Zi9Bc3NlcnRpb25zLmg+CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1l
c3BhY2UgSW5zcGVjdG9yOworCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xOZXR3b3Jr
Mk5ldHdvcmtFcnJvcgorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxs
IE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCit7CisgICAgaWYgKCEoc2Vs
ZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBUSFJPV19FWENF
UFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJtZXNzYWdlIl0sIEAibWVzc2Fn
ZSIpOworICAgIHNlbGYubWVzc2FnZSA9IHBheWxvYWRbQCJtZXNzYWdlIl07CisKKyAgICBUSFJP
V19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJjb2RlIl0sIEAiY29k
ZSIpOworICAgIHNlbGYuY29kZSA9IFtwYXlsb2FkW0AiY29kZSJdIGludGVnZXJWYWx1ZV07CisK
KyAgICByZXR1cm4gc2VsZjsKK30KKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2Jq
ZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilvYmplY3QKK3sKKyAgICBpZiAoIShzZWxmID0g
W3N1cGVyIGluaXRXaXRoSlNPTk9iamVjdDpbb2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0KCldKSkK
KyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHJldHVybiBzZWxmOworfQorCistIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZTooaW50KWNvZGUK
K3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsK
KworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkobWVzc2FnZSwgQCJt
ZXNzYWdlIik7CisKKyAgICBzZWxmLm1lc3NhZ2UgPSBtZXNzYWdlOworICAgIHNlbGYuY29kZSA9
IGNvZGU7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClzZXRNZXNzYWdlOihOU1N0
cmluZyAqKW1lc3NhZ2UKK3sKKyAgICBbc3VwZXIgc2V0U3RyaW5nOm1lc3NhZ2UgZm9yS2V5OkAi
bWVzc2FnZSJdOworfQorCistIChOU1N0cmluZyAqKW1lc3NhZ2UKK3sKKyAgICByZXR1cm4gW3N1
cGVyIHN0cmluZ0ZvcktleTpAIm1lc3NhZ2UiXTsKK30KKworLSAodm9pZClzZXRDb2RlOihpbnQp
Y29kZQoreworICAgIFtzdXBlciBzZXRJbnRlZ2VyOmNvZGUgZm9yS2V5OkAiY29kZSJdOworfQor
CistIChpbnQpY29kZQoreworICAgIHJldHVybiBbc3VwZXIgaW50ZWdlckZvcktleTpAImNvZGUi
XTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uLXJlc3VsdCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zYW1lLXR5
cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMC4uY2Y1YTU5MzFiYzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2FtZS10eXBl
LWlkLWRpZmZlcmVudC1kb21haW4uanNvbi1yZXN1bHQKQEAgLTAsMCArMSw4NzkgQEAKKyMjIyBC
ZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisjIyMgRW5kIEZpbGU6IEluc3Bl
Y3RvckJhY2tlbmRDb21tYW5kcy5qcworCisjIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2Ft
ZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIK
KyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisKK25h
bWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7
CitwdWJsaWM6CisgICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERp
c3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShk
aXNwYXRjaGVyKTsgfQorICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigp
IGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KK3ByaXZhdGU6Cisg
ICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOworfTsKKwor
CisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNo
ZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlm
ZmVyZW50LWRvbWFpbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Igewor
Cit0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVl
cy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQorI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNlbmRpZiAv
LyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworbmFtZXNwYWNlIElu
c3BlY3RvciB7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxl
OiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250
ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUt
dHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xP
YmplY3RzLmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEZyb250ZW5k
Um91dGVyOworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEZy
b250ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0
Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlk
LWRpZmZlcmVudC1kb21haW4uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlz
cGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5k
Um91dGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5z
cGVjdG9yIHsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVz
dEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xP
YmplY3RzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQt
ZGlmZmVyZW50LWRvbWFpbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yUHJvdG9jb2xUeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVz
cGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworCisKKworCisv
LyBUeXBlZGVmcy4KK25hbWVzcGFjZSBSdW50aW1lIHsKKy8qIFVuaXF1ZSBvYmplY3QgaWRlbnRp
Zmllci4gKi8KK3R5cGVkZWYgU3RyaW5nIFJlbW90ZU9iamVjdElkOworfSAvLyBSdW50aW1lCisK
K25hbWVzcGFjZSBSdW50aW1lMiB7CisvKiBVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIuICovCit0
eXBlZGVmIFN0cmluZyBSZW1vdGVPYmplY3RJZDsKK30gLy8gUnVudGltZTIKKy8vIEVuZCBvZiB0
eXBlZGVmcy4KKworCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorCisjaW5jbHVkZSA8d3RmL09wdGlvbmFs
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9y
IHsKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29s
CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bE9iamVjdHMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0
Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1k
aWZmZXJlbnQtZG9tYWluLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tl
bmREaXNwYXRjaGVycy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworCisKK25hbWVz
cGFjZSBJbnNwZWN0b3IgeworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgor
I2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0
b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24uaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUt
dHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgor
CitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVz
dFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0CitAZW5kCisKKworIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbENvbmZpZ3VyYXRpb24ubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBz
YW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24u
aCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbXBvcnQgIlRlc3RQcm90
b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJu
YXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRh
YmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3Bl
Y3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KK3sKKyAg
ICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworfQorCistIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRy
b2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICgh
c2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAg
X2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lk
KWRlYWxsb2MKK3sKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKK0BlbmQKKworCisjIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKworIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVy
bmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9y
dCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisj
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
c2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4K
KworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgorCisKKwor
CisKKworCisKKworCisKKworCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWls
ZENvbXBhdGliaWxpdHlPYmplY3RzLmg+CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgK
KworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQ
cm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKKyNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgor
I2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xJbnRlcm5hbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1k
aWZmZXJlbnQtZG9tYWluLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3Iv
UldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Igewor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+CitPcHRpb25hbDxPYmpDRW51bVR5cGU+
IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKKworCisKKworCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
Lm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZl
cmVudC1kb21haW4uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKworI2ltcG9ydCAi
VGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCisjaW1w
b3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorCit1c2lu
ZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucyAoUnVudGltZURvbWFpbikKKworKyAodm9pZClfcGFyc2VSZW1vdGVPYmplY3RJZDoo
TlNTdHJpbmcgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisKK0BlbmQKK0Bp
bnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChSdW50aW1lMkRvbWFpbikKKwor
KyAodm9pZClfcGFyc2VSZW1vdGVPYmplY3RJZDooTlNTdHJpbmcgKiopb3V0VmFsdWUgZnJvbVBh
eWxvYWQ6KGlkKXBheWxvYWQ7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucyAoUnVudGltZURvbWFpbikKKworKyAodm9pZClfcGFyc2VSZW1vdGVP
YmplY3RJZDooTlNTdHJpbmcgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sK
KyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBjbGFz
c10pOworICAgICpvdXRWYWx1ZSA9IChOU1N0cmluZyAqKXBheWxvYWQ7Cit9CisKK0BlbmQKK0Bp
bXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFJ1bnRpbWUyRG9tYWlu
KQorCisrICh2b2lkKV9wYXJzZVJlbW90ZU9iamVjdElkOihOU1N0cmluZyAqKilvdXRWYWx1ZSBm
cm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZ
UEUocGF5bG9hZCwgW05TU3RyaW5nIGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gKE5TU3RyaW5n
ICopcGF5bG9hZDsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQt
ZG9tYWluLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09O
T2JqZWN0UHJpdmF0ZS5oPgorI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbXBvcnQgPHd0
Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworCisKKwor
CisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2hhZG93ZWQt
b3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUt
c2V0dGVycy5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MC4uMTA3MjEyYjliNDgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1z
ZXR0ZXJzLmpzb24tcmVzdWx0CkBAIC0wLDAgKzEsMTA4OSBAQAorIyMjIEJlZ2luIEZpbGU6IElu
c3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcworLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRD
b21tYW5kcy5qcworCisjIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9u
YWwtdHlwZS1zZXR0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorCituYW1lc3BhY2UgSW5z
cGVjdG9yIHsKKworY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgor
ICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYm
IGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7
IH0KKyAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJl
dHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Citwcml2YXRlOgorICAgIFJlZlB0cjxC
YWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKK307CisKKworCisKK30gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCisjIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0
Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0
ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3R5cGVkZWYg
U3RyaW5nIEVycm9yU3RyaW5nOworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMg
RW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVz
dEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBzaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
VGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2lu
Y2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorI2luY2x1
ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNlbmRpZiAvLyBFTkFCTEUo
SU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworbmFtZXNwYWNlIEluc3BlY3RvciB7
CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0QmFj
a2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0
Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlv
bmFsLXR5cGUtc2V0dGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5o
IgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBGcm9udGVuZFJvdXRlcjsK
KworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERp
c3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNw
cAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5
cGUtc2V0dGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVy
cy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Ig
eworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMu
aAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5
cGUtc2V0dGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJv
dG9jb2xUeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBJ
bnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworCisKKy8vIEZvcndhcmQg
ZGVjbGFyYXRpb25zLgorbmFtZXNwYWNlIFJ1bnRpbWUgeworY2xhc3MgS2V5UGF0aDsKK30gLy8g
UnVudGltZQorLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgorCisKKworCituYW1lc3Bh
Y2UgVGVzdEhlbHBlcnMgeworCitTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUp
OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoVCBl
bnVtVmFsdWUpCit7CisgICAgcmV0dXJuIGdldEVudW1Db25zdGFudFZhbHVlKHN0YXRpY19jYXN0
PGludD4oZW51bVZhbHVlKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCisKK25h
bWVzcGFjZSBSdW50aW1lIHsKKy8qIEtleSBwYXRoLiAqLworY2xhc3MgS2V5UGF0aCA6IHB1Ymxp
YyBKU09OOjpPYmplY3RCYXNlIHsKK3B1YmxpYzoKKyAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0
eSBuYW1lICd0eXBlJyB3aGlsZSBnZW5lcmF0aW5nIEtleVBhdGguCisgICAgZW51bSBjbGFzcyBU
eXBlIHsKKyAgICAgICAgTnVsbCA9IDAsCisgICAgICAgIFN0cmluZyA9IDEsCisgICAgICAgIEFy
cmF5ID0gMiwKKyAgICB9OyAvLyBlbnVtIGNsYXNzIFR5cGUKKyAgICBlbnVtIHsKKyAgICAgICAg
Tm9GaWVsZHNTZXQgPSAwLAorICAgICAgICBUeXBlU2V0ID0gMSA8PCAwLAorICAgICAgICBBbGxG
aWVsZHNTZXQgPSAoVHlwZVNldCkKKyAgICB9OworCisgICAgdGVtcGxhdGU8aW50IFNUQVRFPgor
ICAgIGNsYXNzIEJ1aWxkZXIgeworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxKU09OOjpP
YmplY3Q+IG1fcmVzdWx0OworCisgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNU
QVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAq
cmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKKyAgICAgICAg
fQorCisgICAgICAgIEJ1aWxkZXIoUmVmPC8qS2V5UGF0aCovSlNPTjo6T2JqZWN0PiYmIG9iamVj
dCkKKyAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQorICAgICAgICB7Cisg
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9j
cmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKKyAgICAgICAgfQorICAgICAgICBmcmllbmQgY2xh
c3MgS2V5UGF0aDsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFR5cGVT
ZXQ+JiBzZXRUeXBlKFR5cGUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKCEoU1RBVEUgJiBUeXBlU2V0KSwgcHJvcGVydHlfdHlwZV9hbHJlYWR5X3NldCk7Cisg
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ0eXBlIl9zLCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUodmFsdWUpKTsKKyAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8VHlwZVNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIFJl
ZjxLZXlQYXRoPiByZWxlYXNlKCkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihLZXlQYXRoKSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0
KSwgY2Fubm90X2Nhc3QpOworCisgICAgICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uUmVz
dWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0
ID0gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8S2V5UGF0aD4qPigmanNvblJlc3VsdCkp
OworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAv
KgorICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKKyAgICAgKiBSZWY8S2V5UGF0aD4gcmVz
dWx0ID0gS2V5UGF0aDo6Y3JlYXRlKCkKKyAgICAgKiAgICAgLnNldFR5cGUoLi4uKQorICAgICAq
ICAgICAucmVsZWFzZSgpOworICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0
PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpT
T046Ok9iamVjdDo6Y3JlYXRlKCkpOworICAgIH0KKworICAgIHZvaWQgc2V0U3RyaW5nKGNvbnN0
IFN0cmluZyYgdmFsdWUpCisgICAgeworICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRTdHJp
bmcoInN0cmluZyJfcywgdmFsdWUpOworICAgIH0KKworICAgIHZvaWQgc2V0QXJyYXkoUmVmUHRy
PEpTT046OkFycmF5T2Y8U3RyaW5nPj4gdmFsdWUpCisgICAgeworICAgICAgICBKU09OOjpPYmpl
Y3RCYXNlOjpzZXRBcnJheSgiYXJyYXkiX3MsIFdURk1vdmUodmFsdWUpKTsKKyAgICB9Cit9Owor
Cit9IC8vIFJ1bnRpbWUKKworCisKK25hbWVzcGFjZSBUZXN0SGVscGVycyB7CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFByb3RvY29sRW51bVR5cGU+CitPcHRpb25hbDxQcm90b2NvbEVudW1UeXBlPiBw
YXJzZUVudW1WYWx1ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJik7CisKKy8vIEVudW1zIGluIHRo
ZSAnUnVudGltZScgRG9tYWluCit0ZW1wbGF0ZTw+CitPcHRpb25hbDxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5z
cGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZT4oY29uc3QgU3RyaW5nJik7
CisKK30gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29s
CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xP
YmplY3RzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0
ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKworI2lu
Y2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwor
bmFtZXNwYWNlIEluc3BlY3RvciB7CisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKK25hbWVzcGFj
ZSBUZXN0SGVscGVycyB7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBlbnVtX2NvbnN0YW50
X3ZhbHVlc1tdID0geworICAgICJudWxsIiwKKyAgICAic3RyaW5nIiwKKyAgICAiYXJyYXkiLAor
fTsKKworU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CisgICAgcmV0dXJu
IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvZGVdOworfQorCisvLyBFbnVtcyBpbiB0aGUgJ1J1bnRp
bWUnIERvbWFpbgordGVtcGxhdGU8PgorT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVu
dGltZTo6S2V5UGF0aDo6VHlwZT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6OlR5cGU+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xT
dHJpbmcpCit7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0gewor
ICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6OlR5
cGU6Ok51bGwsCisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6
S2V5UGF0aDo6VHlwZTo6U3RyaW5nLAorICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9j
b2w6OlJ1bnRpbWU6OktleVBhdGg6OlR5cGU6OkFycmF5LAorICAgIH07CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCAzOyArK2kpCisgICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVt
X2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCisgICAgICAgICAgICByZXR1cm4g
KEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6OlR5cGUpY29uc3RhbnRWYWx1
ZXNbaV07CisKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCisKK30gLy8gbmFtZXNwYWNl
IFRlc3RIZWxwZXJzCisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAor
CisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRl
cnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJz
Lmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCisKKworbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bEJhY2tlbmREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVz
dFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xJ
bnRlcm5hbC5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2lu
Y2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5k
RGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRp
b24uaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFs
LXR5cGUtc2V0dGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KKworX19hdHRyaWJ1
dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbENv
bmZpZ3VyYXRpb24gOiBOU09iamVjdAorQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1
cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0
aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgorCisjaW1w
b3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2Vu
ZERpc3BhdGNoZXJzLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRj
aGFibGVBZ2VudC5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0
b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5h
dGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVycy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitA
aW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgoreworICAgIEF1Z21lbnRh
YmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Cit9CisKKy0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29u
dHJvbGxlcgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAg
ICAgICByZXR1cm4gbmlsOworICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBfY29udHJvbGxl
ciA9IGNvbnRyb2xsZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYwor
eworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
RXZlbnREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNo
YWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisK
KyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8d3RmL0pT
T05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisjIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQt
b3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKKyNpbXBv
cnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KKworCitAY2xhc3MgVGVz
dFByb3RvY29sUnVudGltZUtleVBhdGg7CisKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwg
VGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlKSB7CisgICAgVGVzdFByb3RvY29sUnVudGlt
ZUtleVBhdGhUeXBlTnVsbCwKKyAgICBUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGVTdHJp
bmcsCisgICAgVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlQXJyYXksCit9OworCisKK19f
YXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJv
dG9jb2xSdW50aW1lS2V5UGF0aCA6IFJXSVByb3RvY29sSlNPTk9iamVjdAorLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxv
YWQ7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xK
U09OT2JqZWN0ICopanNvbk9iamVjdDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFR5cGU6KFRl
c3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZSl0eXBlOworLyogcmVxdWlyZWQgKi8gQHByb3Bl
cnR5IChub25hdG9taWMsIGFzc2lnbikgVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlIHR5
cGU7CisvKiBvcHRpb25hbCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcg
KnN0cmluZzsKKy8qIG9wdGlvbmFsICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU0Fy
cmF5Lyo8TlNTdHJpbmc+Ki8gKmFycmF5OworQGVuZAorCisKKworCisKKworI2ltcG9ydCA8V2Vi
SW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgorCisjIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJ
bnRlcm5hbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0
aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9j
b2xKU09OT2JqZWN0UHJpdmF0ZS5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFi
bGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCisK
KworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKworIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29s
LmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+
CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5
cGU+CitPcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJp
bmcmIHZhbHVlKTsKKworCitpbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3Rv
Y29sUnVudGltZUtleVBhdGhUeXBlIHZhbHVlKQoreworICAgIHN3aXRjaCh2YWx1ZSkgeworICAg
IGNhc2UgVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlTnVsbDoKKyAgICAgICAgcmV0dXJu
ICJudWxsIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlU3RyaW5n
OgorICAgICAgICByZXR1cm4gInN0cmluZyJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbFJ1bnRp
bWVLZXlQYXRoVHlwZUFycmF5OgorICAgICAgICByZXR1cm4gImFycmF5Il9zOworICAgIH0KK30K
KwordGVtcGxhdGU8PgoraW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRo
VHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgaWYg
KHZhbHVlID09ICJudWxsIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQ
YXRoVHlwZU51bGw7CisgICAgaWYgKHZhbHVlID09ICJzdHJpbmciKQorICAgICAgICByZXR1cm4g
VGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlU3RyaW5nOworICAgIGlmICh2YWx1ZSA9PSAi
YXJyYXkiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlQXJy
YXk7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKworfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIK
KyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rv
ci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNw
ZWN0b3I7CisKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChSdW50aW1l
RG9tYWluKQorCisrICh2b2lkKV9wYXJzZUtleVBhdGg6KFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQ
YXRoICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworCitAZW5kCisKK0BpbXBs
ZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFJ1bnRpbWVEb21haW4pCisK
KysgKHZvaWQpX3BhcnNlS2V5UGF0aDooVGVzdFByb3RvY29sUnVudGltZUtleVBhdGggKiopb3V0
VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9S
X0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUg
PSBbW1Rlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5
bG9hZF07Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRl
cnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1w
b3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmpl
Y3RQcml2YXRlLmg+CisjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2ltcG9ydCA8d3RmL0pT
T05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCitAaW1wbGVtZW50
YXRpb24gVGVzdFByb3RvY29sUnVudGltZUtleVBhdGgKKworLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoUGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9h
ZAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmls
OworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0Ai
dHlwZSJdLCBAInR5cGUiKTsKKyAgICBPcHRpb25hbDxUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0
aFR5cGU+IHR5cGUgPSBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sUnVudGltZUtleVBh
dGhUeXBlPihwYXlsb2FkW0AidHlwZSJdKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9F
TlVNX1ZBTFVFKHR5cGUsIEAidHlwZSIpOworICAgIHNlbGYudHlwZSA9IHR5cGUudmFsdWUoKTsK
KworICAgIHNlbGYuc3RyaW5nID0gcGF5bG9hZFtAInN0cmluZyJdOworCisgICAgc2VsZi5hcnJh
eSA9IHBheWxvYWRbQCJhcnJheSJdOworCisgICAgcmV0dXJuIHNlbGY7Cit9CistIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopb2Jq
ZWN0Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEpTT05PYmplY3Q6W29iamVj
dCB0b0pTT05PYmplY3RdLmdldCgpXSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICByZXR1
cm4gc2VsZjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVHlwZTooVGVzdFByb3RvY29s
UnVudGltZUtleVBhdGhUeXBlKXR5cGUKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRd
KSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHNlbGYudHlwZSA9IHR5cGU7CisKKyAgICBy
ZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClzZXRUeXBlOihUZXN0UHJvdG9jb2xSdW50aW1lS2V5
UGF0aFR5cGUpdHlwZQoreworICAgIFtzdXBlciBzZXRTdHJpbmc6dG9Qcm90b2NvbFN0cmluZyh0
eXBlKSBmb3JLZXk6QCJ0eXBlIl07Cit9CisKKy0gKFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRo
VHlwZSl0eXBlCit7CisgICAgcmV0dXJuIGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xS
dW50aW1lS2V5UGF0aFR5cGU+KFtzdXBlciBzdHJpbmdGb3JLZXk6QCJ0eXBlIl0pLnZhbHVlKCk7
Cit9CisKKy0gKHZvaWQpc2V0U3RyaW5nOihOU1N0cmluZyAqKXN0cmluZworeworICAgIFtzdXBl
ciBzZXRTdHJpbmc6c3RyaW5nIGZvcktleTpAInN0cmluZyJdOworfQorCistIChOU1N0cmluZyAq
KXN0cmluZworeworICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAic3RyaW5nIl07Cit9
CisKKy0gKHZvaWQpc2V0QXJyYXk6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWFycmF5Cit7Cisg
ICAgW3N1cGVyIHNldEpTT05BcnJheTp0b0pTT05TdHJpbmdBcnJheShhcnJheSkgZm9yS2V5OkAi
YXJyYXkiXTsKK30KKworLSAoTlNBcnJheS8qPE5TU3RyaW5nPiovICopYXJyYXkKK3sKKyAgICBy
ZXR1cm4gdG9PYmpDU3RyaW5nQXJyYXkoW3N1cGVyIEpTT05BcnJheUZvcktleTpAImFycmF5Il0p
OworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4
cGVjdGVkL3Nob3VsZC1zdHJpcC1jb21tZW50cy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zaG91bGQtc3RyaXAtY29t
bWVudHMuanNvbi1yZXN1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu
LmViYTg4ZDExM2NhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3Nob3VsZC1zdHJpcC1jb21tZW50cy5qc29u
LXJlc3VsdApAQCAtMCwwICsxLDgzNSBAQAorIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tl
bmRDb21tYW5kcy5qcworLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNob3VsZC1z
dHJpcC1jb21tZW50cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcworCisjIyMgQmVn
aW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpZiBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVu
ZFJvdXRlci5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgQWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIo
UmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0
Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KKyAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFj
a2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgp
OyB9Citwcml2YXRlOgorICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlz
cGF0Y2hlcjsKK307CisKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYg
Ly8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjIyMgRW5kIEZpbGU6
IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVz
dEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
c2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmpl
Y3RzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCisKKworfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisj
IyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBzaG91bGQtc3RyaXAtY29tbWVudHMuanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVl
cy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQorI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNlbmRpZiAv
LyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworbmFtZXNwYWNlIElu
c3BlY3RvciB7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxl
OiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250
ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNob3Vs
ZC1zdHJpcC1jb21tZW50cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5o
IgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBGcm9udGVuZFJvdXRlcjsK
KworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERp
c3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNw
cAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNob3VsZC1zdHJpcC1jb21tZW50
cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRj
aGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNob3VsZC1zdHJpcC1jb21tZW50cy5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgorI2lu
Y2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKwor
bmFtZXNwYWNlIFByb3RvY29sIHsKKworCisKKworCisKKworCisKK30gLy8gbmFtZXNwYWNlIFBy
b3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xPYmplY3RzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3Bw
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlwLWNvbW1lbnRz
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKworI2luY2x1
ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKworCit9IC8vIG5h
bWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBzaG91bGQtc3RyaXAtY29tbWVudHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJu
YXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCisK
KworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisK
KyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNob3VsZC1zdHJpcC1jb21tZW50cy5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgor
I2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0
b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24uaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNob3Vs
ZC1zdHJpcC1jb21tZW50cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KKworX19hdHRy
aWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAorQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25m
aWd1cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0
cmlwLWNvbW1lbnRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgorCisjaW1wb3J0ICJU
ZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3Bh
dGNoZXJzLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVB
Z2VudC5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250
cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVycy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVt
ZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgoreworICAgIEF1Z21lbnRhYmxlSW5z
cGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0
V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxl
cgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICBy
ZXR1cm4gbmlsOworICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNv
bnRyb2xsZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAg
IFtzdXBlciBkZWFsbG9jXTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sQ29uZmlndXJhdGlvbi5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnRE
aXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNob3VsZC1z
dHJpcC1jb21tZW50cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwor
dXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bEV2ZW50RGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8
Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90
b2NvbEpTT05PYmplY3QuaD4KKworCisKKworCisKKworCisKKworCisKKworI2ltcG9ydCA8V2Vi
SW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgorCisjIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJ
bnRlcm5hbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlw
LWNvbW1lbnRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2Jq
ZWN0UHJpdmF0ZS5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0
b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCisKKworCisjIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0IDxXZWJJ
bnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+CisKK25hbWVzcGFjZSBJbnNw
ZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+CitPcHRpb25hbDxPYmpD
RW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKKworfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNob3VsZC1zdHJpcC1jb21t
ZW50cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNp
bXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorCisjaW1wb3J0ICJUZXN0UHJv
dG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKKyNpbXBvcnQgPFdl
Ykluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisKK3VzaW5nIG5hbWVz
cGFjZSBJbnNwZWN0b3I7CisKKworCisKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0K
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaG91bGQtc3RyaXAtY29tbWVudHMu
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0
ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQ
cml2YXRlLmg+CisjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2ltcG9ydCA8d3RmL0pTT05W
YWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisjIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2Vk
LXByaW1pdGl2ZS10eXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmlt
aXRpdmUtdHlwZS5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMC4uOGZmZjlhNGUwZTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hbGlh
c2VkLXByaW1pdGl2ZS10eXBlLmpzb24tcmVzdWx0CkBAIC0wLDAgKzEsODU2IEBACisjIyMgQmVn
aW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKyMjIyBFbmQgRmls
ZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0
ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2lm
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCisjaW5jbHVkZSAiVGVz
dFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250
ZW5kUm91dGVyLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hl
cihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNw
YXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQorICAgIEJhY2tlbmREaXNwYXRjaGVyKiBi
YWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0
KCk7IH0KK3ByaXZhdGU6CisgICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmRE
aXNwYXRjaGVyOworfTsKKworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRp
ZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyMjIyBFbmQgRmls
ZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBU
ZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1
ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7
CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tl
bmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJz
LmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24t
YWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0QmFja2Vu
ZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9u
dGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3Rm
L05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCisjaWYg
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjaW5jbHVkZSAiVGVzdEFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgorI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK30g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0
Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2Vk
LXByaW1pdGl2ZS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgi
CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEZyb250ZW5kUm91dGVyOwor
Cit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlz
cGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3Bw
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlh
c2VkLXByaW1pdGl2ZS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RGcm9udGVuZERp
c3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVu
ZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIElu
c3BlY3RvciB7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRl
c3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
T2JqZWN0cy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJh
dGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMu
aD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCituYW1lc3BhY2UgUHJvdG9jb2wgewor
CisKKworCisKKy8vIFR5cGVkZWZzLgorbmFtZXNwYWNlIFJ1bnRpbWUgeworLyogVW5pcXVlIG9i
amVjdCBpZGVudGlmaWVyLiAqLwordHlwZWRlZiBpbnQgUmVtb3RlT2JqZWN0SWQ7Cit9IC8vIFJ1
bnRpbWUKKy8vIEVuZCBvZiB0eXBlZGVmcy4KKworCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29s
CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xP
YmplY3RzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXBy
aW1pdGl2ZS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMu
aCIKKworI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisK
KworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
KworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorCisjIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Cisj
aW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCisKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisK
KworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tl
bmREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUt
ZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAi
VGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlICJUZXN0UHJvdG9j
b2xJbnRlcm5hbC5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgor
I2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNr
ZW5kRGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3Vy
YXRpb24uaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRp
b24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4K
KworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRl
c3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAorQGVuZAorCisKKyMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
dHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KKy8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sQ29u
ZmlndXJhdGlvbi5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2ltcG9y
dCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0
Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENv
cmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgorCit1c2luZyBuYW1l
c3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJh
dGlvbgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7
Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5z
cGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07
CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIEFTU0VSVChjb250cm9s
bGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9
CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworQGVuZAor
CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorCisjIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlw
ZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBv
cnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucy5oIgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNw
YWNlIEluc3BlY3RvcjsKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0
Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10
eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lt
cG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9S
V0lQcm90b2NvbEpTT05PYmplY3QuaD4KKworCisKKworCisKKworCisKKworCisKKworI2ltcG9y
dCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgor
CisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xJbnRlcm5hbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1k
ZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1w
b3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgorI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDx3dGYvSlNP
TlZhbHVlcy5oPgorCisKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgK
KworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1p
dGl2ZS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJv
dG9jb2xBcnJheUNvbnZlcnNpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+CitPcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Q
cm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKKworCisKK30gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5o
CisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJp
bWl0aXZlLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKworI2ltcG9ydCAi
VGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCisjaW1w
b3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorCit1c2lu
ZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucyAoUnVudGltZURvbWFpbikKKworKyAodm9pZClfcGFyc2VSZW1vdGVPYmplY3RJZDoo
TlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisKK0BlbmQKKwor
QGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoUnVudGltZURvbWFp
bikKKworKyAodm9pZClfcGFyc2VSZW1vdGVPYmplY3RJZDooTlNOdW1iZXIgKiopb3V0VmFsdWUg
ZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9U
WVBFKHBheWxvYWQsIFtOU051bWJlciBjbGFzc10pOworICAgICpvdXRWYWx1ZSA9IChOU051bWJl
ciAqKXBheWxvYWQ7Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0K
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFz
ZWQtcHJpbWl0aXZlLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQ
cm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgor
I2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsK
KworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5
cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFy
cmF5LXR5cGUuanNvbi1yZXN1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAuLmJiODRhYjhmOGIxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYXJyYXkt
dHlwZS5qc29uLXJlc3VsdApAQCAtMCwwICsxLDEwMzggQEAKKyMjIyBCZWdpbiBGaWxlOiBJbnNw
ZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQorCisvLyBEZWJ1Z2dlcgorSW5zcGVjdG9yQmFja2VuZC5yZWdp
c3RlckRvbWFpbigiRGVidWdnZXIiLCBudWxsKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJF
bnVtKCJEZWJ1Z2dlci5SZWFzb24iLCB7RGllZDogIkRpZWQiLCBGYWludGVkOiAiRmFpbnRlZCIs
IEh1bmdyeTogIkh1bmdyeSJ9KTsKK0luc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkRl
YnVnZ2VyIiwgbnVsbCk7CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5q
cworCisjIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10
eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3By
YWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
KworI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwor
Y2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHZvaWQgc2V0
QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIp
IHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KKyAgICBCYWNr
ZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tl
bmREaXNwYXRjaGVyLmdldCgpOyB9Citwcml2YXRlOgorICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0
Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKK307CisKKworCisKK30gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCisjIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisj
IyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3Ry
aW5nOworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0
aW9uLWFycmF5LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0
ZXIuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRl
c3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCit9IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNw
cAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPHd0Zi9KU09O
VmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJ
bnNwZWN0b3IgeworCitjbGFzcyBGcm9udGVuZFJvdXRlcjsKKworfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCisvLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgorI2luY2x1ZGUgPHd0
Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNl
IFByb3RvY29sIHsKKworCisKKy8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgorbmFtZXNwYWNlIERl
YnVnZ2VyIHsKK2VudW0gY2xhc3MgUmVhc29uOworfSAvLyBEZWJ1Z2dlcgorLy8gRW5kIG9mIGZv
cndhcmQgZGVjbGFyYXRpb25zLgorCisKKy8vIFR5cGVkZWZzLgorbmFtZXNwYWNlIERlYnVnZ2Vy
IHsKK3R5cGVkZWYgaW50IEJyZWFrcG9pbnRJZDsKK30gLy8gRGVidWdnZXIKKworbmFtZXNwYWNl
IFJ1bnRpbWUgewordHlwZWRlZiBpbnQgT2JqZWN0SWQ7Cit0eXBlZGVmIEpTT046OkFycmF5T2Y8
aW50PiBMdWNreU51bWJlcnM7Cit0eXBlZGVmIEpTT046OkFycmF5T2Y8U3RyaW5nPiBCYWJ5TmFt
ZXM7Cit0eXBlZGVmIEpTT046OkFycmF5T2Y8aW50PiBOZXdPYmplY3RzOwordHlwZWRlZiBKU09O
OjpBcnJheU9mPGludD4gT2xkT2JqZWN0czsKK3R5cGVkZWYgSlNPTjo6QXJyYXlPZjxJbnNwZWN0
b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uPiBTdG9wUmVhc29uczsKK30gLy8gUnVudGlt
ZQorLy8gRW5kIG9mIHR5cGVkZWZzLgorCituYW1lc3BhY2UgVGVzdEhlbHBlcnMgeworCitTdHJp
bmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFsdWUpCit7CisgICAgcmV0dXJu
IGdldEVudW1Db25zdGFudFZhbHVlKHN0YXRpY19jYXN0PGludD4oZW51bVZhbHVlKSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCisKK25hbWVzcGFjZSBEZWJ1Z2dlciB7CisvKiAg
Ki8KK2VudW0gY2xhc3MgUmVhc29uIHsKKyAgICBEaWVkID0gMCwKKyAgICBGYWludGVkID0gMSwK
KyAgICBIdW5ncnkgPSAyLAorfTsgLy8gZW51bSBjbGFzcyBSZWFzb24KK30gLy8gRGVidWdnZXIK
KworCisKK25hbWVzcGFjZSBUZXN0SGVscGVycyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFByb3Rv
Y29sRW51bVR5cGU+CitPcHRpb25hbDxQcm90b2NvbEVudW1UeXBlPiBwYXJzZUVudW1WYWx1ZUZy
b21TdHJpbmcoY29uc3QgU3RyaW5nJik7CisKKy8vIEVudW1zIGluIHRoZSAnRGVidWdnZXInIERv
bWFpbgordGVtcGxhdGU8PgorT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6
OlJlYXNvbj4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRl
YnVnZ2VyOjpSZWFzb24+KGNvbnN0IFN0cmluZyYpOworCit9IC8vIG5hbWVzcGFjZSBUZXN0SGVs
cGVycworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZh
dWx0SGFzaDsKKworLy8gSGFzaCBkZWNsYXJhdGlvbnMgaW4gdGhlICdEZWJ1Z2dlcicgRG9tYWlu
Cit0ZW1wbGF0ZTw+CitzdHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVi
dWdnZXI6OlJlYXNvbj4geworICAgIHR5cGVkZWYgSW50SGFzaDxJbnNwZWN0b3I6OlByb3RvY29s
OjpEZWJ1Z2dlcjo6UmVhc29uPiBIYXNoOworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisjIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sT2JqZWN0cy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBl
LWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdFByb3Rv
Y29sT2JqZWN0cy5oIgorCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFBy
b3RvY29sIHsKKworbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKKworc3RhdGljIGNvbnN0IGNoYXIq
IGNvbnN0IGVudW1fY29uc3RhbnRfdmFsdWVzW10gPSB7CisgICAgIkRpZWQiLAorICAgICJGYWlu
dGVkIiwKKyAgICAiSHVuZ3J5IiwKK307CisKK1N0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShp
bnQgY29kZSkgeworICAgIHJldHVybiBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb2RlXTsKK30KKwor
Ly8gRW51bXMgaW4gdGhlICdEZWJ1Z2dlcicgRG9tYWluCit0ZW1wbGF0ZTw+CitPcHRpb25hbDxJ
bnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uPiBwYXJzZUVudW1WYWx1ZUZyb21T
dHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbj4oY29uc3QgU3RyaW5n
JiBwcm90b2NvbFN0cmluZykKK3sKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFs
dWVzW10gPSB7CisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6
OlJlYXNvbjo6RGllZCwKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1
Z2dlcjo6UmVhc29uOjpGYWludGVkLAorICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRlYnVnZ2VyOjpSZWFzb246Okh1bmdyeSwKKyAgICB9OworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgMzsgKytpKQorICAgICAgICBpZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25z
dGFudF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNbaV1dKQorICAgICAgICAgICAgcmV0dXJuIChJbnNw
ZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uKWNvbnN0YW50VmFsdWVzW2ldOworCisg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKworCit9IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVy
cworCisKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2luY2x1ZGUg
PHd0Zi9SZXRhaW5QdHIuaD4KKworCisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKK30gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmRE
aXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0
Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0
aW9uLWFycmF5LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmRE
aXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbmNs
dWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZh
bHVlcy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisK
KyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxXZWJJ
bnNwZWN0b3IvVGVzdFByb3RvY29sLmg+CisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJk
ZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmpl
Y3QKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAor
CisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRl
c3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJu
YWwuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorI2ltcG9y
dCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9y
dCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+
CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4K
KwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90
b2NvbENvbmZpZ3VyYXRpb24KK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIq
IF9jb250cm9sbGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihB
dWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0g
W3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBB
U1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJl
dHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbc3VwZXIgZGVhbGxvY107
Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24u
bW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5
cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1w
b3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVz
cGFjZSBJbnNwZWN0b3I7CisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3Bh
dGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPEZvdW5k
YXRpb24vRm91bmRhdGlvbi5oPgorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xK
U09OT2JqZWN0Lmg+CisKKworCisKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFBy
b3RvY29sRGVidWdnZXJSZWFzb24pIHsKKyAgICBUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbkRp
ZWQsCisgICAgVGVzdFByb3RvY29sRGVidWdnZXJSZWFzb25GYWludGVkLAorICAgIFRlc3RQcm90
b2NvbERlYnVnZ2VyUmVhc29uSHVuZ3J5LAorfTsKKworCisKKworCisKKworCisjaW1wb3J0IDxX
ZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+CisKKyMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bEludGVybmFsLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xh
cmF0aW9uLWFycmF5LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2Nv
bEpTT05PYmplY3RQcml2YXRlLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJs
ZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKKwor
CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorCisjIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgorLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIK
KyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KKwor
bmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4K
K09wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYg
dmFsdWUpOworCisKK2lubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xE
ZWJ1Z2dlclJlYXNvbiB2YWx1ZSkKK3sKKyAgICBzd2l0Y2godmFsdWUpIHsKKyAgICBjYXNlIFRl
c3RQcm90b2NvbERlYnVnZ2VyUmVhc29uRGllZDoKKyAgICAgICAgcmV0dXJuICJEaWVkIl9zOwor
ICAgIGNhc2UgVGVzdFByb3RvY29sRGVidWdnZXJSZWFzb25GYWludGVkOgorICAgICAgICByZXR1
cm4gIkZhaW50ZWQiX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbkh1bmdy
eToKKyAgICAgICAgcmV0dXJuICJIdW5ncnkiX3M7CisgICAgfQorfQorCit0ZW1wbGF0ZTw+Citp
bmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sRGVidWdnZXJSZWFzb24+IGZyb21Qcm90b2NvbFN0
cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSAiRGllZCIpCisg
ICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbkRpZWQ7CisgICAgaWYgKHZh
bHVlID09ICJGYWludGVkIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERlYnVnZ2VyUmVh
c29uRmFpbnRlZDsKKyAgICBpZiAodmFsdWUgPT0gIkh1bmdyeSIpCisgICAgICAgIHJldHVybiBU
ZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbkh1bmdyeTsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0
OworfQorCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5
cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5o
IgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQ
YXJzZXIuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2
YXRlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbnRlcmZhY2UgVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zIChEZWJ1Z2dlckRvbWFpbikKKworKyAodm9pZClfcGFyc2VC
cmVha3BvaW50SWQ6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2Fk
OworKyAodm9pZClfcGFyc2VSZWFzb246KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2Fk
OihpZClwYXlsb2FkOworCitAZW5kCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucyAoUnVudGltZURvbWFpbikKKworKyAodm9pZClfcGFyc2VPYmplY3RJZDooTlNOdW1iZXIg
Kiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisrICh2b2lkKV9wYXJzZUx1Y2t5
TnVtYmVyczooTlNBcnJheS8qPE5TTnVtYmVyPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihp
ZClwYXlsb2FkOworKyAodm9pZClfcGFyc2VCYWJ5TmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4q
LyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNlTmV3
T2JqZWN0czooTlNBcnJheS8qPE5TTnVtYmVyPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihp
ZClwYXlsb2FkOworKyAodm9pZClfcGFyc2VPbGRPYmplY3RzOihOU0FycmF5Lyo8TlNOdW1iZXI+
Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisrICh2b2lkKV9wYXJzZVN0
b3BSZWFzb25zOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6
KGlkKXBheWxvYWQ7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucyAoRGVidWdnZXJEb21haW4pCisKKysgKHZvaWQpX3BhcnNlQnJlYWtwb2ludElk
OihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TTnVtYmVyIGNsYXNzXSk7Cisg
ICAgKm91dFZhbHVlID0gKE5TTnVtYmVyICopcGF5bG9hZDsKK30KKworKyAodm9pZClfcGFyc2VS
ZWFzb246KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7Cisg
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3Nd
KTsKKyAgICBPcHRpb25hbDxUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbj4gcmVzdWx0ID0gSW5z
cGVjdG9yOjpmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sRGVidWdnZXJSZWFzb24+KHBh
eWxvYWQpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX0VOVU1fVkFMVUUocmVzdWx0LCBA
IlJlYXNvbiIpOworICAgICpvdXRWYWx1ZSA9IEAocmVzdWx0LnZhbHVlKCkpOworfQorCitAZW5k
CitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChSdW50aW1lRG9t
YWluKQorCisrICh2b2lkKV9wYXJzZU9iamVjdElkOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9t
UGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUo
cGF5bG9hZCwgW05TTnVtYmVyIGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gKE5TTnVtYmVyICop
cGF5bG9hZDsKK30KKworKyAodm9pZClfcGFyc2VMdWNreU51bWJlcnM6KE5TQXJyYXkvKjxOU051
bWJlcj4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TQXJyYXkvKjxOU051bWJlcj4qLyBj
bGFzc10pOworICAgICpvdXRWYWx1ZSA9IChOU0FycmF5Lyo8TlNOdW1iZXI+Ki8gKilwYXlsb2Fk
OworfQorCisrICh2b2lkKV9wYXJzZUJhYnlOYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICoq
KW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNBcnJheS8qPE5TU3RyaW5nPiovIGNsYXNzXSk7Cisg
ICAgKm91dFZhbHVlID0gKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKXBheWxvYWQ7Cit9CisKKysg
KHZvaWQpX3BhcnNlTmV3T2JqZWN0czooTlNBcnJheS8qPE5TTnVtYmVyPiovICoqKW91dFZhbHVl
IGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURf
VFlQRShwYXlsb2FkLCBbTlNBcnJheS8qPE5TTnVtYmVyPiovIGNsYXNzXSk7CisgICAgKm91dFZh
bHVlID0gKE5TQXJyYXkvKjxOU051bWJlcj4qLyAqKXBheWxvYWQ7Cit9CisKKysgKHZvaWQpX3Bh
cnNlT2xkT2JqZWN0czooTlNBcnJheS8qPE5TTnVtYmVyPiovICoqKW91dFZhbHVlIGZyb21QYXls
b2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXls
b2FkLCBbTlNBcnJheS8qPE5TTnVtYmVyPiovIGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gKE5T
QXJyYXkvKjxOU051bWJlcj4qLyAqKXBheWxvYWQ7Cit9CisKKysgKHZvaWQpX3BhcnNlU3RvcFJl
YXNvbnM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQp
cGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05T
QXJyYXkvKjxOU1N0cmluZz4qLyBjbGFzc10pOworICAgICpvdXRWYWx1ZSA9IChOU0FycmF5Lyo8
TlNTdHJpbmc+Ki8gKilwYXlsb2FkOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJh
dGlvbi1hcnJheS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJv
dG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKyNp
bXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisK
KworCisKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
dHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1l
bnVtLXR5cGUuanNvbi1yZXN1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAuLjA5NzAwMGQxODZiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tZW51bS10
eXBlLmpzb24tcmVzdWx0CkBAIC0wLDAgKzEsMTA1MSBAQAorIyMjIEJlZ2luIEZpbGU6IEluc3Bl
Y3RvckJhY2tlbmRDb21tYW5kcy5qcworLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworLy8gUnVudGltZQorSW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rl
ckRvbWFpbigiUnVudGltZSIsIG51bGwpOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0o
IlJ1bnRpbWUuRmFybUFuaW1hbHMiLCB7UGlnczogIlBpZ3MiLCBDb3dzOiAiQ293cyIsIENhdHM6
ICJDYXRzIiwgSGVuczogIkhlbnMifSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgi
UnVudGltZS5Ud29MZWdnZWRBbmltYWxzIiwge0R1Y2tzOiAiRHVja3MiLCBIZW5zOiAiSGVucyIs
IENyb3dzOiAiQ3Jvd3MiLCBGbGFtaW5nb3M6ICJGbGFtaW5nb3MifSk7CitJbnNwZWN0b3JCYWNr
ZW5kLmFjdGl2YXRlRG9tYWluKCJSdW50aW1lIiwgbnVsbCk7CisjIyMgRW5kIEZpbGU6IEluc3Bl
Y3RvckJhY2tlbmRDb21tYW5kcy5qcworCisjIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlw
ZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisKK25hbWVz
cGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Citw
dWJsaWM6CisgICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3Bh
dGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNw
YXRjaGVyKTsgfQorICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNv
bnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KK3ByaXZhdGU6CisgICAg
UmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOworfTsKKworCisK
KworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tl
bmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJz
LmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVu
dW0tdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0eXBl
ZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgor
IyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6
IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
VGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2lu
Y2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorI2luY2x1
ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNlbmRpZiAvLyBFTkFCTEUo
SU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworbmFtZXNwYWNlIEluc3BlY3RvciB7
CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0QmFj
a2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0
Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRp
b24tZW51bS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisj
aW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEZyb250ZW5kUm91dGVyOworCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0
Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5
cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKKwor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0
Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5q
c29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5o
PgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Igewor
CisKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworCisKKy8vIEZvcndhcmQgZGVjbGFyYXRpb25z
LgorbmFtZXNwYWNlIFJ1bnRpbWUgeworZW51bSBjbGFzcyBGYXJtQW5pbWFsczsKK2VudW0gY2xh
c3MgVHdvTGVnZ2VkQW5pbWFsczsKK30gLy8gUnVudGltZQorLy8gRW5kIG9mIGZvcndhcmQgZGVj
bGFyYXRpb25zLgorCisKKworCituYW1lc3BhY2UgVGVzdEhlbHBlcnMgeworCitTdHJpbmcgZ2V0
RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJp
bmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFsdWUpCit7CisgICAgcmV0dXJuIGdldEVu
dW1Db25zdGFudFZhbHVlKHN0YXRpY19jYXN0PGludD4oZW51bVZhbHVlKSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFRlc3RIZWxwZXJzCisKK25hbWVzcGFjZSBSdW50aW1lIHsKKy8qICAqLworZW51
bSBjbGFzcyBGYXJtQW5pbWFscyB7CisgICAgUGlncyA9IDAsCisgICAgQ293cyA9IDEsCisgICAg
Q2F0cyA9IDIsCisgICAgSGVucyA9IDMsCit9OyAvLyBlbnVtIGNsYXNzIEZhcm1BbmltYWxzCisv
KiAgKi8KK2VudW0gY2xhc3MgVHdvTGVnZ2VkQW5pbWFscyB7CisgICAgRHVja3MgPSA0LAorICAg
IEhlbnMgPSAzLAorICAgIENyb3dzID0gNSwKKyAgICBGbGFtaW5nb3MgPSA2LAorfTsgLy8gZW51
bSBjbGFzcyBUd29MZWdnZWRBbmltYWxzCit9IC8vIFJ1bnRpbWUKKworCisKK25hbWVzcGFjZSBU
ZXN0SGVscGVycyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFByb3RvY29sRW51bVR5cGU+CitPcHRp
b25hbDxQcm90b2NvbEVudW1UeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmcoY29uc3QgU3Ry
aW5nJik7CisKKy8vIEVudW1zIGluIHRoZSAnUnVudGltZScgRG9tYWluCit0ZW1wbGF0ZTw+CitP
cHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpGYXJtQW5pbWFscz4gcGFyc2VF
bnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1Bbmlt
YWxzPihjb25zdCBTdHJpbmcmKTsKK3RlbXBsYXRlPD4KK09wdGlvbmFsPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmlu
ZzxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxzPihjb25zdCBT
dHJpbmcmKTsKKworfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKKworfSAvLyBuYW1lc3BhY2Ug
UHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKK25hbWVzcGFjZSBXVEYgewor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7CisKKy8vIEhhc2ggZGVj
bGFyYXRpb25zIGluIHRoZSAnUnVudGltZScgRG9tYWluCit0ZW1wbGF0ZTw+CitzdHJ1Y3QgRGVm
YXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM+IHsKKyAg
ICB0eXBlZGVmIEludEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1h
bHM+IEhhc2g7Cit9OwordGVtcGxhdGU8Pgorc3RydWN0IERlZmF1bHRIYXNoPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM+IHsKKyAgICB0eXBlZGVmIEludEhh
c2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFscz4gSGFzaDsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdURgorIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmpl
Y3RzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorCisjaW5jbHVkZSA8
d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworbmFtZXNwYWNlIFRlc3RI
ZWxwZXJzIHsKKworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFsdWVz
W10gPSB7CisgICAgIlBpZ3MiLAorICAgICJDb3dzIiwKKyAgICAiQ2F0cyIsCisgICAgIkhlbnMi
LAorICAgICJEdWNrcyIsCisgICAgIkNyb3dzIiwKKyAgICAiRmxhbWluZ29zIiwKK307CisKK1N0
cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgeworICAgIHJldHVybiBlbnVtX2Nv
bnN0YW50X3ZhbHVlc1tjb2RlXTsKK30KKworLy8gRW51bXMgaW4gdGhlICdSdW50aW1lJyBEb21h
aW4KK3RlbXBsYXRlPD4KK09wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZh
cm1BbmltYWxzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6
UnVudGltZTo6RmFybUFuaW1hbHM+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCit7Cisg
ICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0geworICAgICAgICAoc2l6
ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzOjpQaWdzLAorICAg
ICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzOjpD
b3dzLAorICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1B
bmltYWxzOjpDYXRzLAorICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRp
bWU6OkZhcm1BbmltYWxzOjpIZW5zLAorICAgIH07CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCA0OyArK2kpCisgICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3Zh
bHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCisgICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzKWNvbnN0YW50VmFsdWVzW2ldOworCisgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKwordGVtcGxhdGU8PgorT3B0aW9uYWw8SW5zcGVjdG9y
OjpQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9t
U3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM+KGNv
bnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCit7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBj
b25zdGFudFZhbHVlc1tdID0geworICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6
OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM6OkR1Y2tzLAorICAgICAgICAoc2l6ZV90KUluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM6OkhlbnMsCisgICAgICAg
IChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFsczo6
Q3Jvd3MsCisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHdv
TGVnZ2VkQW5pbWFsczo6RmxhbWluZ29zLAorICAgIH07CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCA0OyArK2kpCisgICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50
X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCisgICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHMpY29uc3RhbnRWYWx1ZXNbaV07
CisKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCisKK30gLy8gbmFtZXNwYWNlIFRlc3RI
ZWxwZXJzCisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorCisjIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbmNs
dWRlIDx3dGYvUmV0YWluUHRyLmg+CisKKworCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNr
ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERp
c3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNs
YXJhdGlvbi1lbnVtLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tl
bmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNp
bmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbmNsdWRlIDx3dGYvSlNP
TlZhbHVlcy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1t
CisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPFdl
Ykluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAo
ImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09i
amVjdAorQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5o
CisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJU
ZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVy
bmFsLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+CisjaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5o
PgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+
CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJv
dG9jb2xDb25maWd1cmF0aW9uCit7CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVy
KiBfY29udHJvbGxlcjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjoo
QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCit7CisgICAgc2VsZiA9
IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAg
QVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKKyAgICBy
ZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgW3N1cGVyIGRlYWxsb2Nd
OworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9u
Lm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5
cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1w
b3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVz
cGFjZSBJbnNwZWN0b3I7CisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3Bh
dGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8Rm91bmRh
dGlvbi9Gb3VuZGF0aW9uLmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpT
T05PYmplY3QuaD4KKworCisKKworCit0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJv
dG9jb2xSdW50aW1lRmFybUFuaW1hbHMpIHsKKyAgICBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFu
aW1hbHNQaWdzLAorICAgIFRlc3RQcm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFsc0Nvd3MsCisgICAg
VGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzQ2F0cywKKyAgICBUZXN0UHJvdG9jb2xSdW50
aW1lRmFybUFuaW1hbHNIZW5zLAorfTsKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVz
dFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHMpIHsKKyAgICBUZXN0UHJvdG9jb2xSdW50
aW1lVHdvTGVnZ2VkQW5pbWFsc0R1Y2tzLAorICAgIFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdn
ZWRBbmltYWxzSGVucywKKyAgICBUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFsc0Ny
b3dzLAorICAgIFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzRmxhbWluZ29zLAor
fTsKKworCisKKworCisKKworCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWls
ZENvbXBhdGliaWxpdHlPYmplY3RzLmg+CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgK
KworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90
b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKKyNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2lt
cG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xJbnRlcm5hbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24t
ZW51bS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJv
dG9jb2xBcnJheUNvbnZlcnNpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+CitPcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Q
cm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKKworCitpbmxpbmUgU3RyaW5nIHRv
UHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzIHZhbHVlKQorewor
ICAgIHN3aXRjaCh2YWx1ZSkgeworICAgIGNhc2UgVGVzdFByb3RvY29sUnVudGltZUZhcm1Bbmlt
YWxzUGlnczoKKyAgICAgICAgcmV0dXJuICJQaWdzIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29s
UnVudGltZUZhcm1BbmltYWxzQ293czoKKyAgICAgICAgcmV0dXJuICJDb3dzIl9zOworICAgIGNh
c2UgVGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzQ2F0czoKKyAgICAgICAgcmV0dXJuICJD
YXRzIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzSGVuczoKKyAg
ICAgICAgcmV0dXJuICJIZW5zIl9zOworICAgIH0KK30KKwordGVtcGxhdGU8PgoraW5saW5lIE9w
dGlvbmFsPFRlc3RQcm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFscz4gZnJvbVByb3RvY29sU3RyaW5n
KGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09ICJQaWdzIikKKyAgICAg
ICAgcmV0dXJuIFRlc3RQcm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFsc1BpZ3M7CisgICAgaWYgKHZh
bHVlID09ICJDb3dzIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFJ1bnRpbWVGYXJtQW5p
bWFsc0Nvd3M7CisgICAgaWYgKHZhbHVlID09ICJDYXRzIikKKyAgICAgICAgcmV0dXJuIFRlc3RQ
cm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFsc0NhdHM7CisgICAgaWYgKHZhbHVlID09ICJIZW5zIikK
KyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFsc0hlbnM7CisgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKworaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5n
KFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzIHZhbHVlKQoreworICAgIHN3aXRj
aCh2YWx1ZSkgeworICAgIGNhc2UgVGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHNE
dWNrczoKKyAgICAgICAgcmV0dXJuICJEdWNrcyJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbFJ1
bnRpbWVUd29MZWdnZWRBbmltYWxzSGVuczoKKyAgICAgICAgcmV0dXJuICJIZW5zIl9zOworICAg
IGNhc2UgVGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHNDcm93czoKKyAgICAgICAg
cmV0dXJuICJDcm93cyJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRB
bmltYWxzRmxhbWluZ29zOgorICAgICAgICByZXR1cm4gIkZsYW1pbmdvcyJfczsKKyAgICB9Cit9
CisKK3RlbXBsYXRlPD4KK2lubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVn
Z2VkQW5pbWFscz4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7Cisg
ICAgaWYgKHZhbHVlID09ICJEdWNrcyIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xSdW50
aW1lVHdvTGVnZ2VkQW5pbWFsc0R1Y2tzOworICAgIGlmICh2YWx1ZSA9PSAiSGVucyIpCisgICAg
ICAgIHJldHVybiBUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFsc0hlbnM7CisgICAg
aWYgKHZhbHVlID09ICJDcm93cyIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xSdW50aW1l
VHdvTGVnZ2VkQW5pbWFsc0Nyb3dzOworICAgIGlmICh2YWx1ZSA9PSAiRmxhbWluZ29zIikKKyAg
ICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzRmxhbWluZ29z
OworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBv
cnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQ
cm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7
CisKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChSdW50aW1lRG9tYWlu
KQorCisrICh2b2lkKV9wYXJzZUZhcm1BbmltYWxzOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9t
UGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNlVHdvTGVnZ2VkQW5pbWFsczooTlNO
dW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisKK0BlbmQKKworQGlt
cGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoUnVudGltZURvbWFpbikK
KworKyAodm9pZClfcGFyc2VGYXJtQW5pbWFsczooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBh
eWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBh
eWxvYWQsIFtOU1N0cmluZyBjbGFzc10pOworICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbFJ1bnRp
bWVGYXJtQW5pbWFscz4gcmVzdWx0ID0gSW5zcGVjdG9yOjpmcm9tUHJvdG9jb2xTdHJpbmc8VGVz
dFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzPihwYXlsb2FkKTsKKyAgICBUSFJPV19FWENFUFRJ
T05fRk9SX0JBRF9FTlVNX1ZBTFVFKHJlc3VsdCwgQCJGYXJtQW5pbWFscyIpOworICAgICpvdXRW
YWx1ZSA9IEAocmVzdWx0LnZhbHVlKCkpOworfQorCisrICh2b2lkKV9wYXJzZVR3b0xlZ2dlZEFu
aW1hbHM6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7Cisg
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3Nd
KTsKKyAgICBPcHRpb25hbDxUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFscz4gcmVz
dWx0ID0gSW5zcGVjdG9yOjpmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sUnVudGltZVR3
b0xlZ2dlZEFuaW1hbHM+KHBheWxvYWQpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX0VO
VU1fVkFMVUUocmVzdWx0LCBAIlR3b0xlZ2dlZEFuaW1hbHMiKTsKKyAgICAqb3V0VmFsdWUgPSBA
KHJlc3VsdC52YWx1ZSgpKTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBl
cy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24t
ZW51bS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xK
U09OT2JqZWN0UHJpdmF0ZS5oPgorI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbXBvcnQg
PHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworCisK
KyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xh
cmF0aW9uLW9iamVjdC10eXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5
cGUuanNvbi1yZXN1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmM5
NWI5ZDhjMWY1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUu
anNvbi1yZXN1bHQKQEAgLTAsMCArMSwyNDIwIEBACisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9y
QmFja2VuZENvbW1hbmRzLmpzCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlw
ZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKy8vIERhdGFiYXNlCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVy
RG9tYWluKCJEYXRhYmFzZSIsIG51bGwpOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0o
IkRhdGFiYXNlLk1vdXNlQnV0dG9uIiwge05vbmU6ICJOb25lIiwgTGVmdDogIkxlZnQiLCBNaWRk
bGU6ICJNaWRkbGUiLCBSaWdodDogIlJpZ2h0In0pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rl
ckVudW0oIkRhdGFiYXNlLk9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHkiLCB7
TFRSOiAiTFRSIiwgUlRMOiAiUlRMIn0pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0o
IkRhdGFiYXNlLlBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5Iiwge0xUUjogIkxUUiIsIFJU
TDogIlJUTCJ9KTsKK0luc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkRhdGFiYXNlIiwg
bnVsbCk7CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcworCisjIyMg
QmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25j
ZQorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyNpbmNs
dWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yRnJvbnRlbmRSb3V0ZXIuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldEJhY2tlbmRE
aXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFj
a2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9CisgICAgQmFja2VuZERpc3Bh
dGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0
Y2hlci5nZXQoKTsgfQorcHJpdmF0ZToKKyAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1f
YmFja2VuZERpc3BhdGNoZXI7Cit9OworCisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
KworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorIyMj
IEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgorLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
IlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgor
CituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisK
KworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmRE
aXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNw
cAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2Jq
ZWN0LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5o
IgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4K
KyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3ll
ZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5k
RGlzcGF0Y2hlcnMuaCIKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCit9IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisj
IyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVl
cy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVj
dG9yIHsKKworY2xhc3MgRnJvbnRlbmRSb3V0ZXI7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgorIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KKy8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgorCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9B
c3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFBy
b3RvY29sIHsKKworCisKKy8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgorbmFtZXNwYWNlIERhdGFi
YXNlIHsKK2NsYXNzIEVycm9yOworY2xhc3MgT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU7CitjbGFz
cyBQYXJhbWV0ZXJCdW5kbGU7CitjbGFzcyBPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3Rz
OworY2xhc3MgRHVtbXlPYmplY3Q7CitlbnVtIGNsYXNzIE1vdXNlQnV0dG9uOworfSAvLyBEYXRh
YmFzZQorCituYW1lc3BhY2UgVGVzdCB7CitjbGFzcyBQYXJhbWV0ZXJCdW5kbGU7Cit9IC8vIFRl
c3QKKy8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KKworCisvLyBUeXBlZGVmcy4KK25h
bWVzcGFjZSBEYXRhYmFzZSB7Cit0eXBlZGVmIEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90
b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBFcnJvckxpc3Q7Cit9IC8vIERhdGFiYXNlCisvLyBFbmQg
b2YgdHlwZWRlZnMuCisKK25hbWVzcGFjZSBUZXN0SGVscGVycyB7CisKK1N0cmluZyBnZXRFbnVt
Q29uc3RhbnRWYWx1ZShpbnQgY29kZSk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBn
ZXRFbnVtQ29uc3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkKK3sKKyAgICByZXR1cm4gZ2V0RW51bUNv
bnN0YW50VmFsdWUoc3RhdGljX2Nhc3Q8aW50PihlbnVtVmFsdWUpKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgVGVzdEhlbHBlcnMKKworbmFtZXNwYWNlIERhdGFiYXNlIHsKKy8qIERhdGFiYXNlIGVy
cm9yLiAqLworY2xhc3MgRXJyb3IgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CitwdWJsaWM6
CisgICAgZW51bSB7CisgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKKyAgICAgICAgTWVzc2FnZVNl
dCA9IDEgPDwgMCwKKyAgICAgICAgQ29kZVNldCA9IDEgPDwgMSwKKyAgICAgICAgQWxsRmllbGRz
U2V0ID0gKE1lc3NhZ2VTZXQgfCBDb2RlU2V0KQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTxpbnQg
U1RBVEU+CisgICAgY2xhc3MgQnVpbGRlciB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRy
PEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7CisKKyAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1
aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwor
ICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcihSZWY8LypFcnJvciovSlNPTjo6T2JqZWN0PiYm
IG9iamVjdCkKKyAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQorICAgICAg
ICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVp
bGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKKyAgICAgICAgfQorICAgICAgICBmcmll
bmQgY2xhc3MgRXJyb3I7CisgICAgcHVibGljOgorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBN
ZXNzYWdlU2V0PiYgc2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAgICB7Cisg
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTWVzc2FnZVNldCksIHByb3BlcnR5
X21lc3NhZ2VfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygi
bWVzc2FnZSJfcywgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNZXNzYWdl
U2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvZGVTZXQ+JiBz
ZXRDb2RlKGludCB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
IShTVEFURSAmIENvZGVTZXQpLCBwcm9wZXJ0eV9jb2RlX2FscmVhZHlfc2V0KTsKKyAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2VyKCJjb2RlIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPENvZGVTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBSZWY8RXJy
b3I+IHJlbGVhc2UoKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFU
RSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOworICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoc2l6ZW9mKEVycm9yKSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0KSwgY2Fubm90
X2Nhc3QpOworCisgICAgICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uUmVzdWx0ID0gbV9y
ZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gV1RGTW92
ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8RXJyb3I+Kj4oJmpzb25SZXN1bHQpKTsKKyAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyoKKyAgICAgKiBT
eW50aGV0aWMgY29uc3RydWN0b3I6CisgICAgICogUmVmPEVycm9yPiByZXN1bHQgPSBFcnJvcjo6
Y3JlYXRlKCkKKyAgICAgKiAgICAgLnNldE1lc3NhZ2UoLi4uKQorICAgICAqICAgICAuc2V0Q29k
ZSguLi4pCisgICAgICogICAgIC5yZWxlYXNlKCk7CisgICAgICovCisgICAgc3RhdGljIEJ1aWxk
ZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gQnVpbGRlcjxO
b0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7CisgICAgfQorfTsKKworLyogRW51
bWVyYXRlcyBkaWZmZXJlbnQgbW91c2UgYnV0dG9ucyB0aGF0IGNhbiBiZSB1c2VkLiAqLworZW51
bSBjbGFzcyBNb3VzZUJ1dHRvbiB7CisgICAgTm9uZSA9IDAsCisgICAgTGVmdCA9IDEsCisgICAg
TWlkZGxlID0gMiwKKyAgICBSaWdodCA9IDMsCit9OyAvLyBlbnVtIGNsYXNzIE1vdXNlQnV0dG9u
CitjbGFzcyBPcHRpb25hbFBhcmFtZXRlckJ1bmRsZSA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNl
IHsKK3B1YmxpYzoKKyAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdkaXJlY3Rpb25h
bGl0eScgd2hpbGUgZ2VuZXJhdGluZyBPcHRpb25hbFBhcmFtZXRlckJ1bmRsZS4KKyAgICBlbnVt
IGNsYXNzIERpcmVjdGlvbmFsaXR5IHsKKyAgICAgICAgTFRSID0gNCwKKyAgICAgICAgUlRMID0g
NSwKKyAgICB9OyAvLyBlbnVtIGNsYXNzIERpcmVjdGlvbmFsaXR5CisgICAgZW51bSB7CisgICAg
ICAgIE5vRmllbGRzU2V0ID0gMCwKKyAgICAgICAgQWxsRmllbGRzU2V0ID0gMAorICAgIH07CisK
KyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CisgICAgY2xhc3MgQnVpbGRlciB7CisgICAgcHJpdmF0
ZToKKyAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7CisKKyAgICAgICAgdGVt
cGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUg
fCBTVEVQPio+KHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcihSZWY8LypPcHRp
b25hbFBhcmFtZXRlckJ1bmRsZSovSlNPTjo6T2JqZWN0PiYmIG9iamVjdCkKKyAgICAgICAgICAg
IDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQorICAgICAgICB7CisgICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9p
bml0X3N0YXRlKTsKKyAgICAgICAgfQorICAgICAgICBmcmllbmQgY2xhc3MgT3B0aW9uYWxQYXJh
bWV0ZXJCdW5kbGU7CisgICAgcHVibGljOgorCisgICAgICAgIFJlZjxPcHRpb25hbFBhcmFtZXRl
ckJ1bmRsZT4gcmVsZWFzZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CisgICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVChzaXplb2YoT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUpID09IHNpemVv
ZihKU09OOjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7CisKKyAgICAgICAgICAgIFJlZjxKU09OOjpP
YmplY3Q+IGpzb25SZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOworICAgICAgICAg
ICAgYXV0byByZXN1bHQgPSBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxPcHRpb25hbFBh
cmFtZXRlckJ1bmRsZT4qPigmanNvblJlc3VsdCkpOworICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvKgorICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1
Y3RvcjoKKyAgICAgKiBSZWY8T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU+IHJlc3VsdCA9IE9wdGlv
bmFsUGFyYW1ldGVyQnVuZGxlOjpjcmVhdGUoKQorICAgICAqICAgICAucmVsZWFzZSgpOworICAg
ICAqLworICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkp
OworICAgIH0KKworICAgIHZvaWQgc2V0Q29sdW1uTmFtZXMoUmVmUHRyPEpTT046OkFycmF5T2Y8
U3RyaW5nPj4gdmFsdWUpCisgICAgeworICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRBcnJh
eSgiY29sdW1uTmFtZXMiX3MsIFdURk1vdmUodmFsdWUpKTsKKyAgICB9CisKKyAgICB2b2lkIHNl
dEJ1dHRvbnMoUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6Ok1vdXNlQnV0dG9uPj4gdmFsdWUpCisgICAgeworICAgICAgICBKU09OOjpPYmplY3RCYXNl
OjpzZXRBcnJheSgiYnV0dG9ucyJfcywgV1RGTW92ZSh2YWx1ZSkpOworICAgIH0KKworICAgIHZv
aWQgc2V0RGlyZWN0aW9uYWxpdHkoRGlyZWN0aW9uYWxpdHkgdmFsdWUpCisgICAgeworICAgICAg
ICBKU09OOjpPYmplY3RCYXNlOjpzZXRTdHJpbmcoImRpcmVjdGlvbmFsaXR5Il9zLCBJbnNwZWN0
b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUodmFsdWUpKTsK
KyAgICB9CisKKyAgICB2b2lkIHNldE5vdGVzKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgewor
ICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRTdHJpbmcoIm5vdGVzIl9zLCB2YWx1ZSk7Cisg
ICAgfQorCisgICAgdm9pZCBzZXRUaW1lc3RhbXAoZG91YmxlIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIHZhbHVlKTsKKyAg
ICB9CisKKyAgICB2b2lkIHNldFZhbHVlcyhSZWZQdHI8SlNPTjo6T2JqZWN0PiB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldE9iamVjdCgidmFsdWVzIl9zLCBXVEZN
b3ZlKHZhbHVlKSk7CisgICAgfQorCisgICAgdm9pZCBzZXRQYXlsb2FkKFJlZlB0cjxKU09OOjpW
YWx1ZT4gdmFsdWUpCisgICAgeworICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRWYWx1ZSgi
cGF5bG9hZCJfcywgV1RGTW92ZSh2YWx1ZSkpOworICAgIH0KKworICAgIHZvaWQgc2V0RXJyb3Io
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gdmFsdWUpCisgICAg
eworICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRPYmplY3QoImVycm9yIl9zLCBXVEZNb3Zl
KHZhbHVlKSk7CisgICAgfQorCisgICAgdm9pZCBzZXRFcnJvckxpc3QoUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvckxpc3Q+IHZhbHVlKQorICAgIHsKKyAgICAgICAg
SlNPTjo6T2JqZWN0QmFzZTo6c2V0QXJyYXkoImVycm9yTGlzdCJfcywgV1RGTW92ZSh2YWx1ZSkp
OworICAgIH0KK307CisKK2NsYXNzIFBhcmFtZXRlckJ1bmRsZSA6IHB1YmxpYyBKU09OOjpPYmpl
Y3RCYXNlIHsKK3B1YmxpYzoKKyAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdkaXJl
Y3Rpb25hbGl0eScgd2hpbGUgZ2VuZXJhdGluZyBQYXJhbWV0ZXJCdW5kbGUuCisgICAgZW51bSBj
bGFzcyBEaXJlY3Rpb25hbGl0eSB7CisgICAgICAgIExUUiA9IDQsCisgICAgICAgIFJUTCA9IDUs
CisgICAgfTsgLy8gZW51bSBjbGFzcyBEaXJlY3Rpb25hbGl0eQorICAgIGVudW0geworICAgICAg
ICBOb0ZpZWxkc1NldCA9IDAsCisgICAgICAgIENvbHVtbk5hbWVzU2V0ID0gMSA8PCAwLAorICAg
ICAgICBCdXR0b25zU2V0ID0gMSA8PCAxLAorICAgICAgICBEaXJlY3Rpb25hbGl0eVNldCA9IDEg
PDwgMiwKKyAgICAgICAgTm90ZXNTZXQgPSAxIDw8IDMsCisgICAgICAgIFRpbWVzdGFtcFNldCA9
IDEgPDwgNCwKKyAgICAgICAgVmFsdWVzU2V0ID0gMSA8PCA1LAorICAgICAgICBQYXlsb2FkU2V0
ID0gMSA8PCA2LAorICAgICAgICBFcnJvclNldCA9IDEgPDwgNywKKyAgICAgICAgRXJyb3JMaXN0
U2V0ID0gMSA8PCA4LAorICAgICAgICBBbGxGaWVsZHNTZXQgPSAoQ29sdW1uTmFtZXNTZXQgfCBC
dXR0b25zU2V0IHwgRGlyZWN0aW9uYWxpdHlTZXQgfCBOb3Rlc1NldCB8IFRpbWVzdGFtcFNldCB8
IFZhbHVlc1NldCB8IFBheWxvYWRTZXQgfCBFcnJvclNldCB8IEVycm9yTGlzdFNldCkKKyAgICB9
OworCisgICAgdGVtcGxhdGU8aW50IFNUQVRFPgorICAgIGNsYXNzIEJ1aWxkZXIgeworICAgIHBy
aXZhdGU6CisgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVzdWx0OworCisgICAgICAg
IHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNU
QVRFIHwgU1RFUD4qPih0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXIoUmVmPC8q
UGFyYW1ldGVyQnVuZGxlKi9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQorICAgICAgICAgICAgOiBt
X3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRf
c3RhdGUpOworICAgICAgICB9CisgICAgICAgIGZyaWVuZCBjbGFzcyBQYXJhbWV0ZXJCdW5kbGU7
CisgICAgcHVibGljOgorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2x1bW5OYW1lc1NldD4m
IHNldENvbHVtbk5hbWVzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IHZhbHVlKQorICAg
ICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29sdW1uTmFtZXNT
ZXQpLCBwcm9wZXJ0eV9jb2x1bW5OYW1lc19hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPENvbHVtbk5hbWVzU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVp
bGRlcjxTVEFURSB8IEJ1dHRvbnNTZXQ+JiBzZXRCdXR0b25zKFJlZlB0cjxKU09OOjpBcnJheU9m
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4+IHZhbHVlKQorICAg
ICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQnV0dG9uc1NldCks
IHByb3BlcnR5X2J1dHRvbnNfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dEFycmF5KCJidXR0b25zIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PEJ1dHRvbnNTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRGly
ZWN0aW9uYWxpdHlTZXQ+JiBzZXREaXJlY3Rpb25hbGl0eShEaXJlY3Rpb25hbGl0eSB2YWx1ZSkK
KyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIERpcmVjdGlv
bmFsaXR5U2V0KSwgcHJvcGVydHlfZGlyZWN0aW9uYWxpdHlfYWxyZWFkeV9zZXQpOworICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygiZGlyZWN0aW9uYWxpdHkiX3MsIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSh2YWx1ZSkpOworICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxEaXJlY3Rpb25hbGl0eVNldD4oKTsKKyAgICAgICAg
fQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBOb3Rlc1NldD4mIHNldE5vdGVzKGNvbnN0IFN0
cmluZyYgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBOb3Rlc1NldCksIHByb3BlcnR5X25vdGVzX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPE5vdGVzU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxT
VEFURSB8IFRpbWVzdGFtcFNldD4mIHNldFRpbWVzdGFtcChkb3VibGUgdmFsdWUpCisgICAgICAg
IHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUaW1lc3RhbXBTZXQpLCBw
cm9wZXJ0eV90aW1lc3RhbXBfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dERvdWJsZSgidGltZXN0YW1wIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0
YXRlPFRpbWVzdGFtcFNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBWYWx1ZXNTZXQ+JiBzZXRWYWx1ZXMoUmVmUHRyPEpTT046Ok9iamVjdD4gdmFsdWUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBWYWx1ZXNTZXQpLCBw
cm9wZXJ0eV92YWx1ZXNfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9i
amVjdCgidmFsdWVzIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFZh
bHVlc1NldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBQYXlsb2Fk
U2V0PiYgc2V0UGF5bG9hZChSZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVlKQorICAgICAgICB7Cisg
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgUGF5bG9hZFNldCksIHByb3BlcnR5
X3BheWxvYWRfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFZhbHVlKCJw
YXlsb2FkIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFBheWxvYWRT
ZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRXJyb3JTZXQ+JiBz
ZXRFcnJvcihSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiB2YWx1
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEVycm9y
U2V0KSwgcHJvcGVydHlfZXJyb3JfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQt
PnNldE9iamVjdCgiZXJyb3IiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3Rh
dGU8RXJyb3JTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRXJy
b3JMaXN0U2V0PiYgc2V0RXJyb3JMaXN0KFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6RXJyb3JMaXN0PiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoIShTVEFURSAmIEVycm9yTGlzdFNldCksIHByb3BlcnR5X2Vycm9yTGlzdF9hbHJlYWR5
X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoImVycm9yTGlzdCJfcywgdmFs
dWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxFcnJvckxpc3RTZXQ+KCk7CisgICAg
ICAgIH0KKworICAgICAgICBSZWY8UGFyYW1ldGVyQnVuZGxlPiByZWxlYXNlKCkKKyAgICAgICAg
eworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1
bHRfaXNfbm90X3JlYWR5KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihQYXJh
bWV0ZXJCdW5kbGUpID09IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7CisKKyAg
ICAgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25SZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNl
Tm9uTnVsbCgpOworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBXVEZNb3ZlKCpyZWludGVycHJl
dF9jYXN0PFJlZjxQYXJhbWV0ZXJCdW5kbGU+Kj4oJmpzb25SZXN1bHQpKTsKKyAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyoKKyAgICAgKiBTeW50
aGV0aWMgY29uc3RydWN0b3I6CisgICAgICogUmVmPFBhcmFtZXRlckJ1bmRsZT4gcmVzdWx0ID0g
UGFyYW1ldGVyQnVuZGxlOjpjcmVhdGUoKQorICAgICAqICAgICAuc2V0Q29sdW1uTmFtZXMoLi4u
KQorICAgICAqICAgICAuc2V0QnV0dG9ucyguLi4pCisgICAgICogICAgIC5zZXREaXJlY3Rpb25h
bGl0eSguLi4pCisgICAgICogICAgIC5zZXROb3RlcyguLi4pCisgICAgICogICAgIC5zZXRUaW1l
c3RhbXAoLi4uKQorICAgICAqICAgICAuc2V0VmFsdWVzKC4uLikKKyAgICAgKiAgICAgLnNldFBh
eWxvYWQoLi4uKQorICAgICAqICAgICAuc2V0RXJyb3IoLi4uKQorICAgICAqICAgICAuc2V0RXJy
b3JMaXN0KC4uLikKKyAgICAgKiAgICAgLnJlbGVhc2UoKTsKKyAgICAgKi8KKyAgICBzdGF0aWMg
QnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBCdWls
ZGVyPE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICB9Cit9OworCisv
KiBDb25mbGljdGVkIG5hbWVzIG1heSBjYXVzZSBnZW5lcmF0ZWQgZ2V0dGVycy9zZXR0ZXJzIHRv
IGNsYXNoIHdpdGggYnVpbHQtaW4gSW5zcGVjdG9yT2JqZWN0IG1ldGhvZHMuICovCitjbGFzcyBP
YmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzIDogcHVibGljIEpTT046Ok9iamVjdEJhc2Ug
eworcHVibGljOgorICAgIGVudW0geworICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCisgICAgICAg
IEludGVnZXJTZXQgPSAxIDw8IDAsCisgICAgICAgIEFycmF5U2V0ID0gMSA8PCAxLAorICAgICAg
ICBTdHJpbmdTZXQgPSAxIDw8IDIsCisgICAgICAgIFZhbHVlU2V0ID0gMSA8PCAzLAorICAgICAg
ICBPYmplY3RTZXQgPSAxIDw8IDQsCisgICAgICAgIEFsbEZpZWxkc1NldCA9IChJbnRlZ2VyU2V0
IHwgQXJyYXlTZXQgfCBTdHJpbmdTZXQgfCBWYWx1ZVNldCB8IE9iamVjdFNldCkKKyAgICB9Owor
CisgICAgdGVtcGxhdGU8aW50IFNUQVRFPgorICAgIGNsYXNzIEJ1aWxkZXIgeworICAgIHByaXZh
dGU6CisgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVzdWx0OworCisgICAgICAgIHRl
bXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRF
IHwgU1RFUD4qPih0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXIoUmVmPC8qT2Jq
ZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cyovSlNPTjo6T2JqZWN0PiYmIG9iamVjdCkKKyAg
ICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQorICAgICAgICB7CisgICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVk
X2luX25vbl9pbml0X3N0YXRlKTsKKyAgICAgICAgfQorICAgICAgICBmcmllbmQgY2xhc3MgT2Jq
ZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0czsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgQnVp
bGRlcjxTVEFURSB8IEludGVnZXJTZXQ+JiBzZXRJbnRlZ2VyKGNvbnN0IFN0cmluZyYgdmFsdWUp
CisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBJbnRlZ2Vy
U2V0KSwgcHJvcGVydHlfaW50ZWdlcl9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0U3RyaW5nKCJpbnRlZ2VyIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2Fz
dFN0YXRlPEludGVnZXJTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgQXJyYXlTZXQ+JiBzZXRBcnJheShjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAgICB7Cisg
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQXJyYXlTZXQpLCBwcm9wZXJ0eV9h
cnJheV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJhcnJh
eSJfcywgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxBcnJheVNldD4oKTsK
KyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTdHJpbmdTZXQ+JiBzZXRTdHJp
bmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoIShTVEFURSAmIFN0cmluZ1NldCksIHByb3BlcnR5X3N0cmluZ19hbHJlYWR5X3NldCk7
CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJzdHJpbmciX3MsIHZhbHVlKTsKKyAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U3RyaW5nU2V0PigpOworICAgICAgICB9CisKKyAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IFZhbHVlU2V0PiYgc2V0VmFsdWUoY29uc3QgU3RyaW5nJiB2
YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFZh
bHVlU2V0KSwgcHJvcGVydHlfdmFsdWVfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1
bHQtPnNldFN0cmluZygidmFsdWUiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0
U3RhdGU8VmFsdWVTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
T2JqZWN0U2V0PiYgc2V0T2JqZWN0KGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBPYmplY3RTZXQpLCBwcm9wZXJ0eV9v
YmplY3RfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygib2Jq
ZWN0Il9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE9iamVjdFNldD4o
KTsKKyAgICAgICAgfQorCisgICAgICAgIFJlZjxPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxp
Y3RzPiByZWxlYXNlKCkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RB
VEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKHNpemVvZihPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzKSA9PSBz
aXplb2YoSlNPTjo6T2JqZWN0KSwgY2Fubm90X2Nhc3QpOworCisgICAgICAgICAgICBSZWY8SlNP
Tjo6T2JqZWN0PiBqc29uUmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKKyAgICAg
ICAgICAgIGF1dG8gcmVzdWx0ID0gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8T2JqZWN0
V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cz4qPigmanNvblJlc3VsdCkpOworICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvKgorICAgICAqIFN5bnRo
ZXRpYyBjb25zdHJ1Y3RvcjoKKyAgICAgKiBSZWY8T2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZs
aWN0cz4gcmVzdWx0ID0gT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0czo6Y3JlYXRlKCkK
KyAgICAgKiAgICAgLnNldEludGVnZXIoLi4uKQorICAgICAqICAgICAuc2V0QXJyYXkoLi4uKQor
ICAgICAqICAgICAuc2V0U3RyaW5nKC4uLikKKyAgICAgKiAgICAgLnNldFZhbHVlKC4uLikKKyAg
ICAgKiAgICAgLnNldE9iamVjdCguLi4pCisgICAgICogICAgIC5yZWxlYXNlKCk7CisgICAgICov
CisgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCisgICAgeworICAgICAg
ICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7Cisg
ICAgfQorfTsKKworfSAvLyBEYXRhYmFzZQorCituYW1lc3BhY2UgVGVzdCB7CitjbGFzcyBQYXJh
bWV0ZXJCdW5kbGUgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CitwdWJsaWM6CisgICAgLy8g
TmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAnZGlyZWN0aW9uYWxpdHknIHdoaWxlIGdlbmVyYXRp
bmcgUGFyYW1ldGVyQnVuZGxlLgorICAgIGVudW0gY2xhc3MgRGlyZWN0aW9uYWxpdHkgeworICAg
ICAgICBMVFIgPSA0LAorICAgICAgICBSVEwgPSA1LAorICAgIH07IC8vIGVudW0gY2xhc3MgRGly
ZWN0aW9uYWxpdHkKKyAgICBlbnVtIHsKKyAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAorICAgICAg
ICBEaXJlY3Rpb25hbGl0eVNldCA9IDEgPDwgMCwKKyAgICAgICAgQnV0dG9uc1NldCA9IDEgPDwg
MSwKKyAgICAgICAgQ29sdW1uTmFtZXNTZXQgPSAxIDw8IDIsCisgICAgICAgIE5vdGVzU2V0ID0g
MSA8PCAzLAorICAgICAgICBUaW1lc3RhbXBTZXQgPSAxIDw8IDQsCisgICAgICAgIFZhbHVlc1Nl
dCA9IDEgPDwgNSwKKyAgICAgICAgUGF5bG9hZFNldCA9IDEgPDwgNiwKKyAgICAgICAgRXJyb3JT
ZXQgPSAxIDw8IDcsCisgICAgICAgIEFsbEZpZWxkc1NldCA9IChEaXJlY3Rpb25hbGl0eVNldCB8
IEJ1dHRvbnNTZXQgfCBDb2x1bW5OYW1lc1NldCB8IE5vdGVzU2V0IHwgVGltZXN0YW1wU2V0IHwg
VmFsdWVzU2V0IHwgUGF5bG9hZFNldCB8IEVycm9yU2V0KQorICAgIH07CisKKyAgICB0ZW1wbGF0
ZTxpbnQgU1RBVEU+CisgICAgY2xhc3MgQnVpbGRlciB7CisgICAgcHJpdmF0ZToKKyAgICAgICAg
UmVmUHRyPEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7CisKKyAgICAgICAgdGVtcGxhdGU8aW50IFNU
RVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRo
aXMpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcihSZWY8LypQYXJhbWV0ZXJCdW5kbGUq
L0pTT046Ok9iamVjdD4mJiBvYmplY3QpCisgICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUo
b2JqZWN0KSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0g
Tm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CisgICAgICAg
IH0KKyAgICAgICAgZnJpZW5kIGNsYXNzIFBhcmFtZXRlckJ1bmRsZTsKKyAgICBwdWJsaWM6CisK
KyAgICAgICAgQnVpbGRlcjxTVEFURSB8IERpcmVjdGlvbmFsaXR5U2V0PiYgc2V0RGlyZWN0aW9u
YWxpdHkoRGlyZWN0aW9uYWxpdHkgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBEaXJlY3Rpb25hbGl0eVNldCksIHByb3BlcnR5X2RpcmVjdGlv
bmFsaXR5X2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImRp
cmVjdGlvbmFsaXR5Il9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51
bUNvbnN0YW50VmFsdWUodmFsdWUpKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8RGly
ZWN0aW9uYWxpdHlTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
QnV0dG9uc1NldD4mIHNldEJ1dHRvbnMoUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPj4gdmFsdWUpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBCdXR0b25zU2V0KSwgcHJvcGVydHlfYnV0
dG9uc19hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoImJ1dHRv
bnMiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8QnV0dG9uc1NldD4o
KTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2x1bW5OYW1lc1NldD4m
IHNldENvbHVtbk5hbWVzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IHZhbHVlKQorICAg
ICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29sdW1uTmFtZXNT
ZXQpLCBwcm9wZXJ0eV9jb2x1bW5OYW1lc19hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPENvbHVtbk5hbWVzU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVp
bGRlcjxTVEFURSB8IE5vdGVzU2V0PiYgc2V0Tm90ZXMoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE5vdGVzU2V0KSwg
cHJvcGVydHlfbm90ZXNfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0
cmluZygibm90ZXMiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Tm90
ZXNTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVGltZXN0YW1w
U2V0PiYgc2V0VGltZXN0YW1wKGRvdWJsZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIFRpbWVzdGFtcFNldCksIHByb3BlcnR5X3RpbWVzdGFt
cF9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0RG91YmxlKCJ0aW1lc3Rh
bXAiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VGltZXN0YW1wU2V0
PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFZhbHVlc1NldD4mIHNl
dFZhbHVlcyhSZWZQdHI8SlNPTjo6T2JqZWN0PiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFZhbHVlc1NldCksIHByb3BlcnR5X3ZhbHVlc19h
bHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3Ms
IHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VmFsdWVzU2V0PigpOworICAg
ICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFBheWxvYWRTZXQ+JiBzZXRQYXlsb2Fk
KFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBQYXlsb2FkU2V0KSwgcHJvcGVydHlfcGF5bG9hZF9hbHJlYWR5
X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIHZhbHVl
KTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8UGF5bG9hZFNldD4oKTsKKyAgICAgICAg
fQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBFcnJvclNldD4mIHNldEVycm9yKFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHZhbHVlKQorICAgICAgICB7Cisg
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRXJyb3JTZXQpLCBwcm9wZXJ0eV9l
cnJvcl9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJlcnJv
ciJfcywgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxFcnJvclNldD4oKTsK
KyAgICAgICAgfQorCisgICAgICAgIFJlZjxQYXJhbWV0ZXJCdW5kbGU+IHJlbGVhc2UoKQorICAg
ICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQs
IHJlc3VsdF9pc19ub3RfcmVhZHkpOworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9m
KFBhcmFtZXRlckJ1bmRsZSkgPT0gc2l6ZW9mKEpTT046Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsK
KworICAgICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4ganNvblJlc3VsdCA9IG1fcmVzdWx0LnJl
bGVhc2VOb25OdWxsKCk7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFdURk1vdmUoKnJlaW50
ZXJwcmV0X2Nhc3Q8UmVmPFBhcmFtZXRlckJ1bmRsZT4qPigmanNvblJlc3VsdCkpOworICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvKgorICAgICAq
IFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKKyAgICAgKiBSZWY8UGFyYW1ldGVyQnVuZGxlPiByZXN1
bHQgPSBQYXJhbWV0ZXJCdW5kbGU6OmNyZWF0ZSgpCisgICAgICogICAgIC5zZXREaXJlY3Rpb25h
bGl0eSguLi4pCisgICAgICogICAgIC5zZXRCdXR0b25zKC4uLikKKyAgICAgKiAgICAgLnNldENv
bHVtbk5hbWVzKC4uLikKKyAgICAgKiAgICAgLnNldE5vdGVzKC4uLikKKyAgICAgKiAgICAgLnNl
dFRpbWVzdGFtcCguLi4pCisgICAgICogICAgIC5zZXRWYWx1ZXMoLi4uKQorICAgICAqICAgICAu
c2V0UGF5bG9hZCguLi4pCisgICAgICogICAgIC5zZXRFcnJvciguLi4pCisgICAgICogICAgIC5y
ZWxlYXNlKCk7CisgICAgICovCisgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0
ZSgpCisgICAgeworICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKSk7CisgICAgfQorfTsKKworfSAvLyBUZXN0CisKKworCituYW1lc3BhY2Ug
VGVzdEhlbHBlcnMgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBQcm90b2NvbEVudW1UeXBlPgorT3B0
aW9uYWw8UHJvdG9jb2xFbnVtVHlwZT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nKGNvbnN0IFN0
cmluZyYpOworCisvLyBFbnVtcyBpbiB0aGUgJ0RhdGFiYXNlJyBEb21haW4KK3RlbXBsYXRlPD4K
K09wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4gcGFy
c2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3Vz
ZUJ1dHRvbj4oY29uc3QgU3RyaW5nJik7Cit0ZW1wbGF0ZTw+CitPcHRpb25hbDxJbnNwZWN0b3I6
OlByb3RvY29sOjpEYXRhYmFzZTo6T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFs
aXR5PiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6Ok9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4oY29uc3QgU3RyaW5n
Jik7Cit0ZW1wbGF0ZTw+CitPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6
UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5n
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlv
bmFsaXR5Pihjb25zdCBTdHJpbmcmKTsKKworLy8gRW51bXMgaW4gdGhlICdUZXN0JyBEb21haW4K
K3RlbXBsYXRlPD4KK09wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlBhcmFtZXRl
ckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0
b3I6OlByb3RvY29sOjpUZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5Pihjb25z
dCBTdHJpbmcmKTsKKworfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKKworfSAvLyBuYW1lc3Bh
Y2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKK25hbWVzcGFjZSBXVEYg
eworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7CisKKy8vIEhhc2gg
ZGVjbGFyYXRpb25zIGluIHRoZSAnRGF0YWJhc2UnIERvbWFpbgordGVtcGxhdGU8Pgorc3RydWN0
IERlZmF1bHRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4g
eworICAgIHR5cGVkZWYgSW50SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6TW91
c2VCdXR0b24+IEhhc2g7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKyMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sT2JqZWN0cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmpl
Y3RzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRp
b24tb2JqZWN0LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0
cy5oIgorCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFByb3RvY29sIHsK
KworbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKKworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVu
dW1fY29uc3RhbnRfdmFsdWVzW10gPSB7CisgICAgIk5vbmUiLAorICAgICJMZWZ0IiwKKyAgICAi
TWlkZGxlIiwKKyAgICAiUmlnaHQiLAorICAgICJMVFIiLAorICAgICJSVEwiLAorfTsKKworU3Ry
aW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CisgICAgcmV0dXJuIGVudW1fY29u
c3RhbnRfdmFsdWVzW2NvZGVdOworfQorCisvLyBFbnVtcyBpbiB0aGUgJ0RhdGFiYXNlJyBEb21h
aW4KK3RlbXBsYXRlPD4KK09wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpN
b3VzZUJ1dHRvbj4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKK3sK
KyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7CisgICAgICAgIChz
aXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uOjpOb25lLAor
ICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRv
bjo6TGVmdCwKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6
TW91c2VCdXR0b246Ok1pZGRsZSwKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29s
OjpEYXRhYmFzZTo6TW91c2VCdXR0b246OlJpZ2h0LAorICAgIH07CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCA0OyArK2kpCisgICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2Nv
bnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCisgICAgICAgICAgICByZXR1cm4gKElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbiljb25zdGFudFZhbHVlc1tp
XTsKKworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK3RlbXBsYXRlPD4KK09wdGlvbmFs
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTo6
RGlyZWN0aW9uYWxpdHk+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEYXRhYmFzZTo6T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5Pihj
b25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQoreworICAgIHN0YXRpYyBjb25zdCBzaXplX3Qg
Y29uc3RhbnRWYWx1ZXNbXSA9IHsKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29s
OjpEYXRhYmFzZTo6T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5OjpMVFIs
CisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok9wdGlvbmFs
UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eTo6UlRMLAorICAgIH07CisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCAyOyArK2kpCisgICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBl
bnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCisgICAgICAgICAgICByZXR1
cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpPcHRpb25hbFBhcmFtZXRlckJ1bmRs
ZTo6RGlyZWN0aW9uYWxpdHkpY29uc3RhbnRWYWx1ZXNbaV07CisKKyAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworfQorCit0ZW1wbGF0ZTw+CitPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpE
YXRhYmFzZTo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4gcGFyc2VFbnVtVmFsdWVG
cm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQYXJhbWV0ZXJCdW5kbGU6
OkRpcmVjdGlvbmFsaXR5Pihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQoreworICAgIHN0
YXRpYyBjb25zdCBzaXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsKKyAgICAgICAgKHNpemVfdClJ
bnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25h
bGl0eTo6TFRSLAorICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNl
OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5OjpSVEwsCisgICAgfTsKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IDI7ICsraSkKKyAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09
IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKKyAgICAgICAgICAgIHJl
dHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlBhcmFtZXRlckJ1bmRsZTo6RGly
ZWN0aW9uYWxpdHkpY29uc3RhbnRWYWx1ZXNbaV07CisKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0
OworfQorCisKKy8vIEVudW1zIGluIHRoZSAnVGVzdCcgRG9tYWluCit0ZW1wbGF0ZTw+CitPcHRp
b25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlv
bmFsaXR5PiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVz
dDo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4oY29uc3QgU3RyaW5nJiBwcm90b2Nv
bFN0cmluZykKK3sKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7
CisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UGFyYW1ldGVyQnVu
ZGxlOjpEaXJlY3Rpb25hbGl0eTo6TFRSLAorICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJv
dG9jb2w6OlRlc3Q6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk6OlJUTCwKKyAgICB9
OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMjsgKytpKQorICAgICAgICBpZiAocHJvdG9j
b2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNbaV1dKQorICAg
ICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpQYXJhbWV0ZXJCdW5k
bGU6OkRpcmVjdGlvbmFsaXR5KWNvbnN0YW50VmFsdWVzW2ldOworCisgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKK30KKworCit9IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycworCisKKworfSAvLyBu
YW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRy
Lmg+CisKKworCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCit9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAor
CisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlw
ZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBv
cnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgi
CisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2luY2x1ZGUgIlRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisKK25h
bWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgorLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVz
dFByb3RvY29sLmg+CisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQor
QGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKK0BlbmQKKwor
CisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorCisjIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xD
b25maWd1cmF0aW9uLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW1w
b3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0
Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+CisKK3VzaW5nIG5h
bWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1
cmF0aW9uCit7CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxl
cjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJ
bnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0
XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNvbnRy
b2xsZXIpOworICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKKyAgICByZXR1cm4gc2VsZjsK
K30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCitAZW5k
CisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQ
cm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5oIgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3Bl
Y3RvcjsKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0K
KworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCisvLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91
bmRhdGlvbi5oPgorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0
Lmg+CisKKworQGNsYXNzIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I7CitAY2xhc3MgVGVzdFBy
b3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTsKK0BjbGFzcyBUZXN0UHJvdG9j
b2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZTsKK0BjbGFzcyBUZXN0UHJvdG9jb2xEYXRhYmFzZU9i
amVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHM7CitAY2xhc3MgVGVzdFByb3RvY29sRGF0YWJh
c2VEdW1teU9iamVjdDsKK0BjbGFzcyBUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlOwor
CisKK3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VC
dXR0b24pIHsKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9uTm9uZSwKKyAgICBU
ZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9uTGVmdCwKKyAgICBUZXN0UHJvdG9jb2xEYXRh
YmFzZU1vdXNlQnV0dG9uTWlkZGxlLAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VCdXR0
b25SaWdodCwKK307CisKK3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbERh
dGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSkgeworICAgIFRlc3RQ
cm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eUxUUiwK
KyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9u
YWxpdHlSVEwsCit9OworCit0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xE
YXRhYmFzZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5KSB7CisgICAgVGVzdFByb3RvY29s
RGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eUxUUiwKKyAgICBUZXN0UHJvdG9j
b2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5UlRMLAorfTsKKwordHlwZWRl
ZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZURpcmVj
dGlvbmFsaXR5KSB7CisgICAgVGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZURpcmVjdGlv
bmFsaXR5TFRSLAorICAgIFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25h
bGl0eVJUTCwKK307CisKKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkp
CitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgOiBSV0lQcm90b2NvbEpTT05P
YmplY3QKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0
cmluZyAqLCBpZD4gKilwYXlsb2FkOworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xP
YmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7CistIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZTooaW50KWNvZGU7Cisv
KiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKm1lc3Nh
Z2U7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQgY29k
ZTsKK0BlbmQKKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50
ZXJmYWNlIFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUgOiBSV0lQ
cm90b2NvbEpTT05PYmplY3QKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGlj
dGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkOworLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7Cisv
KiBvcHRpb25hbCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNBcnJheS8qPE5TU3Ry
aW5nPiovICpjb2x1bW5OYW1lczsKKy8qIG9wdGlvbmFsICovIEBwcm9wZXJ0eSAobm9uYXRvbWlj
LCBjb3B5KSBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmJ1dHRvbnM7CisvKiBvcHRpb25hbCAqLyBA
cHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFs
UGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHkgZGlyZWN0aW9uYWxpdHk7CisvKiBvcHRpb25h
bCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKm5vdGVzOworLyogb3B0
aW9uYWwgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgZG91YmxlIHRpbWVzdGFtcDsK
Ky8qIG9wdGlvbmFsICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIFJXSVByb3RvY29s
SlNPTk9iamVjdCAqdmFsdWVzOworLyogb3B0aW9uYWwgKi8gQHByb3BlcnR5IChub25hdG9taWMs
IHJldGFpbikgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkOworLyogb3B0aW9uYWwgKi8g
QHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAq
ZXJyb3I7CisvKiBvcHRpb25hbCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNBcnJh
eS8qPFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I+Ki8gKmVycm9yTGlzdDsKK0BlbmQKKworX19h
dHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90
b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlIDogUldJUHJvdG9jb2xKU09OT2JqZWN0CistIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+
ICopcGF5bG9hZDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQ
cm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
Q29sdW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWNvbHVtbk5hbWVzIGJ1dHRvbnM6
KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWJ1dHRvbnMgZGlyZWN0aW9uYWxpdHk6KFRlc3RQcm90
b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHkpZGlyZWN0aW9uYWxpdHkg
bm90ZXM6KE5TU3RyaW5nICopbm90ZXMgdGltZXN0YW1wOihkb3VibGUpdGltZXN0YW1wIHZhbHVl
czooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopdmFsdWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNP
Tk9iamVjdCAqKXBheWxvYWQgZXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKillcnJv
ciBlcnJvckxpc3Q6KE5TQXJyYXkvKjxUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yPiovICopZXJy
b3JMaXN0OworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TQXJy
YXkvKjxOU1N0cmluZz4qLyAqY29sdW1uTmFtZXM7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkg
KG5vbmF0b21pYywgY29weSkgTlNBcnJheS8qPE5TU3RyaW5nPiovICpidXR0b25zOworLyogcmVx
dWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgVGVzdFByb3RvY29sRGF0YWJh
c2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSBkaXJlY3Rpb25hbGl0eTsKKy8qIHJlcXVp
cmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqbm90ZXM7CisvKiBy
ZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBkb3VibGUgdGltZXN0YW1w
OworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgUldJUHJvdG9j
b2xKU09OT2JqZWN0ICp2YWx1ZXM7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21p
YywgcmV0YWluKSBSV0lQcm90b2NvbEpTT05PYmplY3QgKnBheWxvYWQ7CisvKiByZXF1aXJlZCAq
LyBAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluKSBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9y
ICplcnJvcjsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU0Fy
cmF5Lyo8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4qLyAqZXJyb3JMaXN0OworQGVuZAorCitf
X2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFBy
b3RvY29sRGF0YWJhc2VPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzIDogUldJUHJvdG9j
b2xKU09OT2JqZWN0CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25h
cnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBy
b3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OworLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoSW50ZWdlcjooTlNTdHJpbmcgKilpbnRlZ2VyIGFycmF5OihOU1N0
cmluZyAqKWFycmF5IHN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcgdmFsdWU6KE5TU3RyaW5nICop
dmFsdWUgb2JqZWN0OihOU1N0cmluZyAqKW9iamVjdDsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0
eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqaW50ZWdlcjsKKy8qIHJlcXVpcmVkICovIEBw
cm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqYXJyYXk7CisvKiByZXF1aXJlZCAq
LyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKnN0cmluZzsKKy8qIHJlcXVp
cmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqdmFsdWU7CisvKiBy
ZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKm9iamVjdDsK
K0BlbmQKKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJm
YWNlIFRlc3RQcm90b2NvbERhdGFiYXNlRHVtbXlPYmplY3QgOiBSV0lQcm90b2NvbEpTT05PYmpl
Y3QKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmlu
ZyAqLCBpZD4gKilwYXlsb2FkOworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmpl
Y3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7CitAZW5kCisKK19fYXR0cmli
dXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xU
ZXN0UGFyYW1ldGVyQnVuZGxlIDogUldJUHJvdG9jb2xKU09OT2JqZWN0CistIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9h
ZDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpT
T05PYmplY3QgKilqc29uT2JqZWN0OworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRGlyZWN0aW9u
YWxpdHk6KFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSlkaXJl
Y3Rpb25hbGl0eSBidXR0b25zOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilidXR0b25zIGNvbHVt
bk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcyBub3RlczooTlNTdHJp
bmcgKilub3RlcyB0aW1lc3RhbXA6KGRvdWJsZSl0aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90b2Nv
bEpTT05PYmplY3QgKil2YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5
bG9hZCBlcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKWVycm9yOworLyogcmVxdWly
ZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgVGVzdFByb3RvY29sVGVzdFBhcmFt
ZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5IGRpcmVjdGlvbmFsaXR5OworLyogcmVxdWlyZWQgKi8g
QHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqYnV0dG9u
czsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU0FycmF5Lyo8
TlNTdHJpbmc+Ki8gKmNvbHVtbk5hbWVzOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25h
dG9taWMsIGNvcHkpIE5TU3RyaW5nICpub3RlczsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAo
bm9uYXRvbWljLCBhc3NpZ24pIGRvdWJsZSB0aW1lc3RhbXA7CisvKiByZXF1aXJlZCAqLyBAcHJv
cGVydHkgKG5vbmF0b21pYywgcmV0YWluKSBSV0lQcm90b2NvbEpTT05PYmplY3QgKnZhbHVlczsK
Ky8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIFJXSVByb3RvY29s
SlNPTk9iamVjdCAqcGF5bG9hZDsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWlj
LCByZXRhaW4pIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKmVycm9yOworQGVuZAorCisKKwor
CisKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5
T2JqZWN0cy5oPgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2lt
cG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKKyNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8d3RmL0pT
T05WYWx1ZXMuaD4KKworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5o
CisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUu
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0
ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5
Q29udmVyc2lvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3RlbXBsYXRlPHR5cGVu
YW1lIE9iakNFbnVtVHlwZT4KK09wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3Ry
aW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOworCisKK2lubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0
cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9uIHZhbHVlKQoreworICAgIHN3aXRj
aCh2YWx1ZSkgeworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VNb3VzZUJ1dHRvbk5vbmU6
CisgICAgICAgIHJldHVybiAiTm9uZSJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNl
TW91c2VCdXR0b25MZWZ0OgorICAgICAgICByZXR1cm4gIkxlZnQiX3M7CisgICAgY2FzZSBUZXN0
UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9uTWlkZGxlOgorICAgICAgICByZXR1cm4gIk1pZGRs
ZSJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VCdXR0b25SaWdodDoKKyAg
ICAgICAgcmV0dXJuICJSaWdodCJfczsKKyAgICB9Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBP
cHRpb25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9uPiBmcm9tUHJvdG9jb2xTdHJp
bmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gIk5vbmUiKQorICAg
ICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VNb3VzZUJ1dHRvbk5vbmU7CisgICAgaWYg
KHZhbHVlID09ICJMZWZ0IikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlTW91
c2VCdXR0b25MZWZ0OworICAgIGlmICh2YWx1ZSA9PSAiTWlkZGxlIikKKyAgICAgICAgcmV0dXJu
IFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VCdXR0b25NaWRkbGU7CisgICAgaWYgKHZhbHVlID09
ICJSaWdodCIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9u
UmlnaHQ7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKworaW5saW5lIFN0cmluZyB0b1By
b3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGVE
aXJlY3Rpb25hbGl0eSB2YWx1ZSkKK3sKKyAgICBzd2l0Y2godmFsdWUpIHsKKyAgICBjYXNlIFRl
c3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eUxU
UjoKKyAgICAgICAgcmV0dXJuICJMVFIiX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFz
ZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHlSVEw6CisgICAgICAgIHJldHVy
biAiUlRMIl9zOworICAgIH0KK30KKwordGVtcGxhdGU8PgoraW5saW5lIE9wdGlvbmFsPFRlc3RQ
cm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eT4gZnJv
bVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09
ICJMVFIiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFt
ZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5TFRSOworICAgIGlmICh2YWx1ZSA9PSAiUlRMIikKKyAg
ICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGVE
aXJlY3Rpb25hbGl0eVJUTDsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCitpbmxpbmUg
U3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5k
bGVEaXJlY3Rpb25hbGl0eSB2YWx1ZSkKK3sKKyAgICBzd2l0Y2godmFsdWUpIHsKKyAgICBjYXNl
IFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHlMVFI6Cisg
ICAgICAgIHJldHVybiAiTFRSIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VQYXJh
bWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eVJUTDoKKyAgICAgICAgcmV0dXJuICJSVEwiX3M7Cisg
ICAgfQorfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJh
c2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0
IFN0cmluZyYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09ICJMVFIiKQorICAgICAgICByZXR1
cm4gVGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eUxUUjsK
KyAgICBpZiAodmFsdWUgPT0gIlJUTCIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRh
YmFzZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5UlRMOworICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7Cit9CisKKworaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2Nv
bFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSB2YWx1ZSkKK3sKKyAgICBzd2l0Y2go
dmFsdWUpIHsKKyAgICBjYXNlIFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rp
b25hbGl0eUxUUjoKKyAgICAgICAgcmV0dXJuICJMVFIiX3M7CisgICAgY2FzZSBUZXN0UHJvdG9j
b2xUZXN0UGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHlSVEw6CisgICAgICAgIHJldHVybiAi
UlRMIl9zOworICAgIH0KK30KKwordGVtcGxhdGU8PgoraW5saW5lIE9wdGlvbmFsPFRlc3RQcm90
b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eT4gZnJvbVByb3RvY29sU3RyaW5n
KGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09ICJMVFIiKQorICAgICAg
ICByZXR1cm4gVGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5TFRS
OworICAgIGlmICh2YWx1ZSA9PSAiUlRMIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFRl
c3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eVJUTDsKKyAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlw
ZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5o
IgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQ
YXJzZXIuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2
YXRlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbnRlcmZhY2UgVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zIChEYXRhYmFzZURvbWFpbikKKworKyAodm9pZClfcGFyc2VF
cnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDoo
aWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNlRXJyb3JMaXN0OihOU0FycmF5Lyo8VGVzdFByb3Rv
Y29sRGF0YWJhc2VFcnJvcj4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsK
KysgKHZvaWQpX3BhcnNlTW91c2VCdXR0b246KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXls
b2FkOihpZClwYXlsb2FkOworKyAodm9pZClfcGFyc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZToo
VGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZSAqKilvdXRWYWx1ZSBm
cm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNlUGFyYW1ldGVyQnVuZGxlOihU
ZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZSAqKilvdXRWYWx1ZSBmcm9tUGF5bG9h
ZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNlT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZs
aWN0czooVGVzdFByb3RvY29sRGF0YWJhc2VPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3Rz
ICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworKyAodm9pZClfcGFyc2VEdW1t
eU9iamVjdDooVGVzdFByb3RvY29sRGF0YWJhc2VEdW1teU9iamVjdCAqKilvdXRWYWx1ZSBmcm9t
UGF5bG9hZDooaWQpcGF5bG9hZDsKKworQGVuZAorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMgKFRlc3REb21haW4pCisKKysgKHZvaWQpX3BhcnNlUGFyYW1ldGVyQnVuZGxl
OihUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlICoqKW91dFZhbHVlIGZyb21QYXlsb2Fk
OihpZClwYXlsb2FkOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMgKERhdGFiYXNlRG9tYWluKQorCisrICh2b2lkKV9wYXJzZUVycm9yOihUZXN0
UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2Fk
Cit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNEaWN0aW9u
YXJ5IGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9y
IGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07Cit9CisKKysgKHZvaWQpX3BhcnNlRXJy
b3JMaXN0OihOU0FycmF5Lyo8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4qLyAqKilvdXRWYWx1
ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFE
X1RZUEUocGF5bG9hZCwgW05TQXJyYXkvKjxUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yPiovIGNs
YXNzXSk7CisgICAgKm91dFZhbHVlID0gKE5TQXJyYXkvKjxUZXN0UHJvdG9jb2xEYXRhYmFzZUVy
cm9yPiovICopcGF5bG9hZDsKK30KKworKyAodm9pZClfcGFyc2VNb3VzZUJ1dHRvbjooTlNOdW1i
ZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENF
UFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBjbGFzc10pOworICAgIE9wdGlv
bmFsPFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VCdXR0b24+IHJlc3VsdCA9IEluc3BlY3Rvcjo6
ZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VCdXR0b24+KHBheWxv
YWQpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX0VOVU1fVkFMVUUocmVzdWx0LCBAIk1v
dXNlQnV0dG9uIik7CisgICAgKm91dFZhbHVlID0gQChyZXN1bHQudmFsdWUoKSk7Cit9CisKKysg
KHZvaWQpX3BhcnNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU6KFRlc3RQcm90b2NvbERhdGFiYXNl
T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxv
YWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rp
b25hcnkgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbERhdGFiYXNlT3B0
aW9uYWxQYXJhbWV0ZXJCdW5kbGUgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKK30K
KworKyAodm9pZClfcGFyc2VQYXJhbWV0ZXJCdW5kbGU6KFRlc3RQcm90b2NvbERhdGFiYXNlUGFy
YW1ldGVyQnVuZGxlICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNz
XSk7CisgICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRs
ZSBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOworfQorCisrICh2b2lkKV9wYXJzZU9i
amVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHM6KFRlc3RQcm90b2NvbERhdGFiYXNlT2JqZWN0
V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5
bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGlj
dGlvbmFyeSBjbGFzc10pOworICAgICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sRGF0YWJhc2VP
YmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5
bG9hZF07Cit9CisKKysgKHZvaWQpX3BhcnNlRHVtbXlPYmplY3Q6KFRlc3RQcm90b2NvbERhdGFi
YXNlRHVtbXlPYmplY3QgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAg
ICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xh
c3NdKTsKKyAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbERhdGFiYXNlRHVtbXlPYmplY3Qg
YWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKK30KKworQGVuZAorQGltcGxlbWVudGF0
aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoVGVzdERvbWFpbikKKworKyAodm9pZClf
cGFyc2VQYXJhbWV0ZXJCdW5kbGU6KFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGUgKiop
b3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05f
Rk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKKyAgICAqb3V0VmFs
dWUgPSBbW1Rlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGUgYWxsb2NdIGluaXRXaXRoUGF5
bG9hZDpwYXlsb2FkXTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5t
bQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2Jq
ZWN0LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpT
T05PYmplY3RQcml2YXRlLmg+CisjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2ltcG9ydCA8
d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCitAaW1w
bGVtZW50YXRpb24gVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcgorCistIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilw
YXlsb2FkCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVy
biBuaWw7CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxv
YWRbQCJtZXNzYWdlIl0sIEAibWVzc2FnZSIpOworICAgIHNlbGYubWVzc2FnZSA9IHBheWxvYWRb
QCJtZXNzYWdlIl07CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZ
KHBheWxvYWRbQCJjb2RlIl0sIEAiY29kZSIpOworICAgIHNlbGYuY29kZSA9IFtwYXlsb2FkW0Ai
Y29kZSJdIGludGVnZXJWYWx1ZV07CisKKyAgICByZXR1cm4gc2VsZjsKK30KKy0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilvYmpl
Y3QKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoSlNPTk9iamVjdDpbb2JqZWN0
IHRvSlNPTk9iamVjdF0uZ2V0KCldKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHJldHVy
biBzZWxmOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAq
KW1lc3NhZ2UgY29kZTooaW50KWNvZGUKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRd
KSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlS
RURfUFJPUEVSVFkobWVzc2FnZSwgQCJtZXNzYWdlIik7CisKKyAgICBzZWxmLm1lc3NhZ2UgPSBt
ZXNzYWdlOworICAgIHNlbGYuY29kZSA9IGNvZGU7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKwor
LSAodm9pZClzZXRNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UKK3sKKyAgICBbc3VwZXIgc2V0
U3RyaW5nOm1lc3NhZ2UgZm9yS2V5OkAibWVzc2FnZSJdOworfQorCistIChOU1N0cmluZyAqKW1l
c3NhZ2UKK3sKKyAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAIm1lc3NhZ2UiXTsKK30K
KworLSAodm9pZClzZXRDb2RlOihpbnQpY29kZQoreworICAgIFtzdXBlciBzZXRJbnRlZ2VyOmNv
ZGUgZm9yS2V5OkAiY29kZSJdOworfQorCistIChpbnQpY29kZQoreworICAgIHJldHVybiBbc3Vw
ZXIgaW50ZWdlckZvcktleTpAImNvZGUiXTsKK30KKworQGVuZAorCitAaW1wbGVtZW50YXRpb24g
VGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZQorCistIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBp
ZD4gKilwYXlsb2FkCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAg
IHJldHVybiBuaWw7CisKKyAgICBzZWxmLmNvbHVtbk5hbWVzID0gcGF5bG9hZFtAImNvbHVtbk5h
bWVzIl07CisKKyAgICBzZWxmLmJ1dHRvbnMgPSBwYXlsb2FkW0AiYnV0dG9ucyJdOworCisgICAg
T3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZURpcmVj
dGlvbmFsaXR5PiBkaXJlY3Rpb25hbGl0eSA9IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9j
b2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHk+KHBheWxvYWRb
QCJkaXJlY3Rpb25hbGl0eSJdKTsKKyAgICBpZiAoZGlyZWN0aW9uYWxpdHkpCisgICAgICAgIHNl
bGYuZGlyZWN0aW9uYWxpdHkgPSBkaXJlY3Rpb25hbGl0eS52YWx1ZSgpOworCisgICAgc2VsZi5u
b3RlcyA9IHBheWxvYWRbQCJub3RlcyJdOworCisgICAgc2VsZi50aW1lc3RhbXAgPSBbcGF5bG9h
ZFtAInRpbWVzdGFtcCJdIGRvdWJsZVZhbHVlXTsKKworICAgIHNlbGYudmFsdWVzID0gcGF5bG9h
ZFtAInZhbHVlcyJdOworCisgICAgc2VsZi5wYXlsb2FkID0gcGF5bG9hZFtAInBheWxvYWQiXTsK
KworICAgIHNlbGYuZXJyb3IgPSBbW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgYWxsb2NdIGlu
aXRXaXRoUGF5bG9hZDpwYXlsb2FkW0AiZXJyb3IiXV07CisKKyAgICBzZWxmLmVycm9yTGlzdCA9
IG9iamNBcnJheUZyb21QYXlsb2FkPFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I+KHBheWxvYWRb
QCJlcnJvckxpc3QiXSk7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKy0gKGluc3RhbmNldHlwZSlp
bml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilvYmplY3QKK3sK
KyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoSlNPTk9iamVjdDpbb2JqZWN0IHRvSlNP
Tk9iamVjdF0uZ2V0KCldKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHJldHVybiBzZWxm
OworfQorCistICh2b2lkKXNldENvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilj
b2x1bW5OYW1lcworeworICAgIFtzdXBlciBzZXRKU09OQXJyYXk6dG9KU09OU3RyaW5nQXJyYXko
Y29sdW1uTmFtZXMpIGZvcktleTpAImNvbHVtbk5hbWVzIl07Cit9CisKKy0gKE5TQXJyYXkvKjxO
U1N0cmluZz4qLyAqKWNvbHVtbk5hbWVzCit7CisgICAgcmV0dXJuIHRvT2JqQ1N0cmluZ0FycmF5
KFtzdXBlciBKU09OQXJyYXlGb3JLZXk6QCJjb2x1bW5OYW1lcyJdKTsKK30KKworLSAodm9pZClz
ZXRCdXR0b25zOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilidXR0b25zCit7CisgICAgW3N1cGVy
IHNldEpTT05BcnJheTp0b0pTT05TdHJpbmdBcnJheShidXR0b25zKSBmb3JLZXk6QCJidXR0b25z
Il07Cit9CisKKy0gKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWJ1dHRvbnMKK3sKKyAgICByZXR1
cm4gdG9PYmpDU3RyaW5nQXJyYXkoW3N1cGVyIEpTT05BcnJheUZvcktleTpAImJ1dHRvbnMiXSk7
Cit9CisKKy0gKHZvaWQpc2V0RGlyZWN0aW9uYWxpdHk6KFRlc3RQcm90b2NvbERhdGFiYXNlT3B0
aW9uYWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSlkaXJlY3Rpb25hbGl0eQoreworICAg
IFtzdXBlciBzZXRTdHJpbmc6dG9Qcm90b2NvbFN0cmluZyhkaXJlY3Rpb25hbGl0eSkgZm9yS2V5
OkAiZGlyZWN0aW9uYWxpdHkiXTsKK30KKworLSAoVGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25h
bFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5KWRpcmVjdGlvbmFsaXR5Cit7CisgICAgcmV0
dXJuIGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1l
dGVyQnVuZGxlRGlyZWN0aW9uYWxpdHk+KFtzdXBlciBzdHJpbmdGb3JLZXk6QCJkaXJlY3Rpb25h
bGl0eSJdKS52YWx1ZSgpOworfQorCistICh2b2lkKXNldE5vdGVzOihOU1N0cmluZyAqKW5vdGVz
Cit7CisgICAgW3N1cGVyIHNldFN0cmluZzpub3RlcyBmb3JLZXk6QCJub3RlcyJdOworfQorCist
IChOU1N0cmluZyAqKW5vdGVzCit7CisgICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJu
b3RlcyJdOworfQorCistICh2b2lkKXNldFRpbWVzdGFtcDooZG91YmxlKXRpbWVzdGFtcAorewor
ICAgIFtzdXBlciBzZXREb3VibGU6dGltZXN0YW1wIGZvcktleTpAInRpbWVzdGFtcCJdOworfQor
CistIChkb3VibGUpdGltZXN0YW1wCit7CisgICAgcmV0dXJuIFtzdXBlciBkb3VibGVGb3JLZXk6
QCJ0aW1lc3RhbXAiXTsKK30KKworLSAodm9pZClzZXRWYWx1ZXM6KFJXSVByb3RvY29sSlNPTk9i
amVjdCAqKXZhbHVlcworeworICAgIFtzdXBlciBzZXRPYmplY3Q6dmFsdWVzIGZvcktleTpAInZh
bHVlcyJdOworfQorCistIChSV0lQcm90b2NvbEpTT05PYmplY3QgKil2YWx1ZXMKK3sKKyAgICBS
V0lQcm90b2NvbEpTT05PYmplY3QgKm9iamVjdCA9IFtzdXBlciBvYmplY3RGb3JLZXk6QCJ2YWx1
ZXMiXTsKKyAgICBpZiAoIW9iamVjdCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICByZXR1cm4g
W1tSV0lQcm90b2NvbEpTT05PYmplY3QgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDpbW3N1cGVy
IG9iamVjdEZvcktleTpAInZhbHVlcyJdIHRvSlNPTk9iamVjdF0uZ2V0KCldOworfQorCistICh2
b2lkKXNldFBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQKK3sKKyAgICBb
c3VwZXIgc2V0T2JqZWN0OnBheWxvYWQgZm9yS2V5OkAicGF5bG9hZCJdOworfQorCistIChSV0lQ
cm90b2NvbEpTT05PYmplY3QgKilwYXlsb2FkCit7CisgICAgUldJUHJvdG9jb2xKU09OT2JqZWN0
ICpvYmplY3QgPSBbc3VwZXIgb2JqZWN0Rm9yS2V5OkAicGF5bG9hZCJdOworICAgIGlmICghb2Jq
ZWN0KQorICAgICAgICByZXR1cm4gbmlsOworICAgIHJldHVybiBbW1JXSVByb3RvY29sSlNPTk9i
amVjdCBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0Oltbc3VwZXIgb2JqZWN0Rm9yS2V5OkAicGF5
bG9hZCJdIHRvSlNPTk9iamVjdF0uZ2V0KCldOworfQorCistICh2b2lkKXNldEVycm9yOihUZXN0
UHJvdG9jb2xEYXRhYmFzZUVycm9yICopZXJyb3IKK3sKKyAgICBbc3VwZXIgc2V0T2JqZWN0OmVy
cm9yIGZvcktleTpAImVycm9yIl07Cit9CisKKy0gKFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3Ig
KillcnJvcgoreworICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb2JqZWN0ID0gW3N1cGVyIG9i
amVjdEZvcktleTpAImVycm9yIl07CisgICAgaWYgKCFvYmplY3QpCisgICAgICAgIHJldHVybiBu
aWw7CisgICAgcmV0dXJuIFtbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBhbGxvY10gaW5pdFdp
dGhKU09OT2JqZWN0Oltbc3VwZXIgb2JqZWN0Rm9yS2V5OkAiZXJyb3IiXSB0b0pTT05PYmplY3Rd
LmdldCgpXTsKK30KKworLSAodm9pZClzZXRFcnJvckxpc3Q6KE5TQXJyYXkvKjxUZXN0UHJvdG9j
b2xEYXRhYmFzZUVycm9yPiovICopZXJyb3JMaXN0Cit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9CQURfVFlQRV9JTl9BUlJBWShlcnJvckxpc3QsIFtUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9y
IGNsYXNzXSk7CisgICAgW3N1cGVyIHNldEpTT05BcnJheTp0b0pTT05PYmplY3RBcnJheShlcnJv
ckxpc3QpIGZvcktleTpAImVycm9yTGlzdCJdOworfQorCistIChOU0FycmF5Lyo8VGVzdFByb3Rv
Y29sRGF0YWJhc2VFcnJvcj4qLyAqKWVycm9yTGlzdAoreworICAgIHJldHVybiB0b09iakNBcnJh
eTxUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yPihbc3VwZXIgSlNPTkFycmF5Rm9yS2V5OkAiZXJy
b3JMaXN0Il0pOworfQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xEYXRh
YmFzZVBhcmFtZXRlckJ1bmRsZQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihu
b25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCit7CisgICAgaWYg
KCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBUSFJP
V19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJjb2x1bW5OYW1lcyJd
LCBAImNvbHVtbk5hbWVzIik7CisgICAgc2VsZi5jb2x1bW5OYW1lcyA9IHBheWxvYWRbQCJjb2x1
bW5OYW1lcyJdOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShw
YXlsb2FkW0AiYnV0dG9ucyJdLCBAImJ1dHRvbnMiKTsKKyAgICBzZWxmLmJ1dHRvbnMgPSBwYXls
b2FkW0AiYnV0dG9ucyJdOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9Q
RVJUWShwYXlsb2FkW0AiZGlyZWN0aW9uYWxpdHkiXSwgQCJkaXJlY3Rpb25hbGl0eSIpOworICAg
IE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxp
dHk+IGRpcmVjdGlvbmFsaXR5ID0gZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERhdGFi
YXNlUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHk+KHBheWxvYWRbQCJkaXJlY3Rpb25hbGl0
eSJdKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9FTlVNX1ZBTFVFKGRpcmVjdGlvbmFs
aXR5LCBAImRpcmVjdGlvbmFsaXR5Iik7CisgICAgc2VsZi5kaXJlY3Rpb25hbGl0eSA9IGRpcmVj
dGlvbmFsaXR5LnZhbHVlKCk7CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BS
T1BFUlRZKHBheWxvYWRbQCJub3RlcyJdLCBAIm5vdGVzIik7CisgICAgc2VsZi5ub3RlcyA9IHBh
eWxvYWRbQCJub3RlcyJdOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9Q
RVJUWShwYXlsb2FkW0AidGltZXN0YW1wIl0sIEAidGltZXN0YW1wIik7CisgICAgc2VsZi50aW1l
c3RhbXAgPSBbcGF5bG9hZFtAInRpbWVzdGFtcCJdIGRvdWJsZVZhbHVlXTsKKworICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAInZhbHVlcyJdLCBAInZh
bHVlcyIpOworICAgIHNlbGYudmFsdWVzID0gcGF5bG9hZFtAInZhbHVlcyJdOworCisgICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AicGF5bG9hZCJdLCBA
InBheWxvYWQiKTsKKyAgICBzZWxmLnBheWxvYWQgPSBwYXlsb2FkW0AicGF5bG9hZCJdOworCisg
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiZXJyb3Ii
XSwgQCJlcnJvciIpOworICAgIHNlbGYuZXJyb3IgPSBbW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJy
b3IgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkW0AiZXJyb3IiXV07CisKKyAgICBUSFJP
V19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJlcnJvckxpc3QiXSwg
QCJlcnJvckxpc3QiKTsKKyAgICBzZWxmLmVycm9yTGlzdCA9IG9iamNBcnJheUZyb21QYXlsb2Fk
PFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I+KHBheWxvYWRbQCJlcnJvckxpc3QiXSk7CisKKyAg
ICByZXR1cm4gc2VsZjsKK30KKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0
OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilvYmplY3QKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1
cGVyIGluaXRXaXRoSlNPTk9iamVjdDpbb2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0KCldKSkKKyAg
ICAgICAgcmV0dXJuIG5pbDsKKworICAgIHJldHVybiBzZWxmOworfQorCistIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhDb2x1bW5OYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopY29sdW1uTmFt
ZXMgYnV0dG9uczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopYnV0dG9ucyBkaXJlY3Rpb25hbGl0
eTooVGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSlkaXJl
Y3Rpb25hbGl0eSBub3RlczooTlNTdHJpbmcgKilub3RlcyB0aW1lc3RhbXA6KGRvdWJsZSl0aW1l
c3RhbXAgdmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKil2YWx1ZXMgcGF5bG9hZDooUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZCBlcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VF
cnJvciAqKWVycm9yIGVycm9yTGlzdDooTlNBcnJheS8qPFRlc3RQcm90b2NvbERhdGFiYXNlRXJy
b3I+Ki8gKillcnJvckxpc3QKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAg
ICAgICAgcmV0dXJuIG5pbDsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJP
UEVSVFkoY29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsKKyAgICBUSFJPV19FWENFUFRJT05f
Rk9SX1JFUVVJUkVEX1BST1BFUlRZKGJ1dHRvbnMsIEAiYnV0dG9ucyIpOworICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkobm90ZXMsIEAibm90ZXMiKTsKKyAgICBUSFJP
V19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHZhbHVlcywgQCJ2YWx1ZXMiKTsKKyAg
ICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWQsIEAicGF5bG9h
ZCIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkoZXJyb3IsIEAi
ZXJyb3IiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKGVycm9y
TGlzdCwgQCJlcnJvckxpc3QiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFX0lO
X0FSUkFZKGVycm9yTGlzdCwgW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgY2xhc3NdKTsKKwor
ICAgIHNlbGYuY29sdW1uTmFtZXMgPSBjb2x1bW5OYW1lczsKKyAgICBzZWxmLmJ1dHRvbnMgPSBi
dXR0b25zOworICAgIHNlbGYuZGlyZWN0aW9uYWxpdHkgPSBkaXJlY3Rpb25hbGl0eTsKKyAgICBz
ZWxmLm5vdGVzID0gbm90ZXM7CisgICAgc2VsZi50aW1lc3RhbXAgPSB0aW1lc3RhbXA7CisgICAg
c2VsZi52YWx1ZXMgPSB2YWx1ZXM7CisgICAgc2VsZi5wYXlsb2FkID0gcGF5bG9hZDsKKyAgICBz
ZWxmLmVycm9yID0gZXJyb3I7CisgICAgc2VsZi5lcnJvckxpc3QgPSBlcnJvckxpc3Q7CisKKyAg
ICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClzZXRDb2x1bW5OYW1lczooTlNBcnJheS8qPE5T
U3RyaW5nPiovICopY29sdW1uTmFtZXMKK3sKKyAgICBbc3VwZXIgc2V0SlNPTkFycmF5OnRvSlNP
TlN0cmluZ0FycmF5KGNvbHVtbk5hbWVzKSBmb3JLZXk6QCJjb2x1bW5OYW1lcyJdOworfQorCist
IChOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcworeworICAgIHJldHVybiB0b09i
akNTdHJpbmdBcnJheShbc3VwZXIgSlNPTkFycmF5Rm9yS2V5OkAiY29sdW1uTmFtZXMiXSk7Cit9
CisKKy0gKHZvaWQpc2V0QnV0dG9uczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopYnV0dG9ucwor
eworICAgIFtzdXBlciBzZXRKU09OQXJyYXk6dG9KU09OU3RyaW5nQXJyYXkoYnV0dG9ucykgZm9y
S2V5OkAiYnV0dG9ucyJdOworfQorCistIChOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilidXR0b25z
Cit7CisgICAgcmV0dXJuIHRvT2JqQ1N0cmluZ0FycmF5KFtzdXBlciBKU09OQXJyYXlGb3JLZXk6
QCJidXR0b25zIl0pOworfQorCistICh2b2lkKXNldERpcmVjdGlvbmFsaXR5OihUZXN0UHJvdG9j
b2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5KWRpcmVjdGlvbmFsaXR5Cit7
CisgICAgW3N1cGVyIHNldFN0cmluZzp0b1Byb3RvY29sU3RyaW5nKGRpcmVjdGlvbmFsaXR5KSBm
b3JLZXk6QCJkaXJlY3Rpb25hbGl0eSJdOworfQorCistIChUZXN0UHJvdG9jb2xEYXRhYmFzZVBh
cmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5KWRpcmVjdGlvbmFsaXR5Cit7CisgICAgcmV0dXJu
IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZURp
cmVjdGlvbmFsaXR5Pihbc3VwZXIgc3RyaW5nRm9yS2V5OkAiZGlyZWN0aW9uYWxpdHkiXSkudmFs
dWUoKTsKK30KKworLSAodm9pZClzZXROb3RlczooTlNTdHJpbmcgKilub3RlcworeworICAgIFtz
dXBlciBzZXRTdHJpbmc6bm90ZXMgZm9yS2V5OkAibm90ZXMiXTsKK30KKworLSAoTlNTdHJpbmcg
Kilub3RlcworeworICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAibm90ZXMiXTsKK30K
KworLSAodm9pZClzZXRUaW1lc3RhbXA6KGRvdWJsZSl0aW1lc3RhbXAKK3sKKyAgICBbc3VwZXIg
c2V0RG91YmxlOnRpbWVzdGFtcCBmb3JLZXk6QCJ0aW1lc3RhbXAiXTsKK30KKworLSAoZG91Ymxl
KXRpbWVzdGFtcAoreworICAgIHJldHVybiBbc3VwZXIgZG91YmxlRm9yS2V5OkAidGltZXN0YW1w
Il07Cit9CisKKy0gKHZvaWQpc2V0VmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKil2YWx1
ZXMKK3sKKyAgICBbc3VwZXIgc2V0T2JqZWN0OnZhbHVlcyBmb3JLZXk6QCJ2YWx1ZXMiXTsKK30K
KworLSAoUldJUHJvdG9jb2xKU09OT2JqZWN0ICopdmFsdWVzCit7CisgICAgUldJUHJvdG9jb2xK
U09OT2JqZWN0ICpvYmplY3QgPSBbc3VwZXIgb2JqZWN0Rm9yS2V5OkAidmFsdWVzIl07CisgICAg
aWYgKCFvYmplY3QpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgcmV0dXJuIFtbUldJUHJvdG9j
b2xKU09OT2JqZWN0IGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6W1tzdXBlciBvYmplY3RGb3JL
ZXk6QCJ2YWx1ZXMiXSB0b0pTT05PYmplY3RdLmdldCgpXTsKK30KKworLSAodm9pZClzZXRQYXls
b2FkOihSV0lQcm90b2NvbEpTT05PYmplY3QgKilwYXlsb2FkCit7CisgICAgW3N1cGVyIHNldE9i
amVjdDpwYXlsb2FkIGZvcktleTpAInBheWxvYWQiXTsKK30KKworLSAoUldJUHJvdG9jb2xKU09O
T2JqZWN0ICopcGF5bG9hZAoreworICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb2JqZWN0ID0g
W3N1cGVyIG9iamVjdEZvcktleTpAInBheWxvYWQiXTsKKyAgICBpZiAoIW9iamVjdCkKKyAgICAg
ICAgcmV0dXJuIG5pbDsKKyAgICByZXR1cm4gW1tSV0lQcm90b2NvbEpTT05PYmplY3QgYWxsb2Nd
IGluaXRXaXRoSlNPTk9iamVjdDpbW3N1cGVyIG9iamVjdEZvcktleTpAInBheWxvYWQiXSB0b0pT
T05PYmplY3RdLmdldCgpXTsKK30KKworLSAodm9pZClzZXRFcnJvcjooVGVzdFByb3RvY29sRGF0
YWJhc2VFcnJvciAqKWVycm9yCit7CisgICAgW3N1cGVyIHNldE9iamVjdDplcnJvciBmb3JLZXk6
QCJlcnJvciJdOworfQorCistIChUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICopZXJyb3IKK3sK
KyAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9iamVjdCA9IFtzdXBlciBvYmplY3RGb3JLZXk6
QCJlcnJvciJdOworICAgIGlmICghb2JqZWN0KQorICAgICAgICByZXR1cm4gbmlsOworICAgIHJl
dHVybiBbW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVj
dDpbW3N1cGVyIG9iamVjdEZvcktleTpAImVycm9yIl0gdG9KU09OT2JqZWN0XS5nZXQoKV07Cit9
CisKKy0gKHZvaWQpc2V0RXJyb3JMaXN0OihOU0FycmF5Lyo8VGVzdFByb3RvY29sRGF0YWJhc2VF
cnJvcj4qLyAqKWVycm9yTGlzdAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEVf
SU5fQVJSQVkoZXJyb3JMaXN0LCBbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBjbGFzc10pOwor
ICAgIFtzdXBlciBzZXRKU09OQXJyYXk6dG9KU09OT2JqZWN0QXJyYXkoZXJyb3JMaXN0KSBmb3JL
ZXk6QCJlcnJvckxpc3QiXTsKK30KKworLSAoTlNBcnJheS8qPFRlc3RQcm90b2NvbERhdGFiYXNl
RXJyb3I+Ki8gKillcnJvckxpc3QKK3sKKyAgICByZXR1cm4gdG9PYmpDQXJyYXk8VGVzdFByb3Rv
Y29sRGF0YWJhc2VFcnJvcj4oW3N1cGVyIEpTT05BcnJheUZvcktleTpAImVycm9yTGlzdCJdKTsK
K30KKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sRGF0YWJhc2VPYmplY3RX
aXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzCisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxv
YWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQKK3sKKyAg
ICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImludGVnZXIi
XSwgQCJpbnRlZ2VyIik7CisgICAgc2VsZi5pbnRlZ2VyID0gcGF5bG9hZFtAImludGVnZXIiXTsK
KworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImFy
cmF5Il0sIEAiYXJyYXkiKTsKKyAgICBzZWxmLmFycmF5ID0gcGF5bG9hZFtAImFycmF5Il07CisK
KyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJzdHJp
bmciXSwgQCJzdHJpbmciKTsKKyAgICBzZWxmLnN0cmluZyA9IHBheWxvYWRbQCJzdHJpbmciXTsK
KworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAInZh
bHVlIl0sIEAidmFsdWUiKTsKKyAgICBzZWxmLnZhbHVlID0gcGF5bG9hZFtAInZhbHVlIl07CisK
KyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJvYmpl
Y3QiXSwgQCJvYmplY3QiKTsKKyAgICBzZWxmLm9iamVjdCA9IHBheWxvYWRbQCJvYmplY3QiXTsK
KworICAgIHJldHVybiBzZWxmOworfQorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xP
YmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9iamVjdAoreworICAgIGlmICghKHNlbGYg
PSBbc3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmplY3QgdG9KU09OT2JqZWN0XS5nZXQoKV0p
KQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aEludGVnZXI6KE5TU3RyaW5nICopaW50ZWdlciBhcnJheTooTlNTdHJp
bmcgKilhcnJheSBzdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nIHZhbHVlOihOU1N0cmluZyAqKXZh
bHVlIG9iamVjdDooTlNTdHJpbmcgKilvYmplY3QKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVy
IGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
UkVRVUlSRURfUFJPUEVSVFkoaW50ZWdlciwgQCJpbnRlZ2VyIik7CisgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShhcnJheSwgQCJhcnJheSIpOworICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkoc3RyaW5nLCBAInN0cmluZyIpOworICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkodmFsdWUsIEAidmFsdWUiKTsKKyAg
ICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKG9iamVjdCwgQCJvYmplY3Qi
KTsKKworICAgIHNlbGYuaW50ZWdlciA9IGludGVnZXI7CisgICAgc2VsZi5hcnJheSA9IGFycmF5
OworICAgIHNlbGYuc3RyaW5nID0gc3RyaW5nOworICAgIHNlbGYudmFsdWUgPSB2YWx1ZTsKKyAg
ICBzZWxmLm9iamVjdCA9IG9iamVjdDsKKworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lk
KXNldEludGVnZXI6KE5TU3RyaW5nICopaW50ZWdlcgoreworICAgIFtzdXBlciBzZXRTdHJpbmc6
aW50ZWdlciBmb3JLZXk6QCJpbnRlZ2VyIl07Cit9CisKKy0gKE5TU3RyaW5nICopaW50ZWdlcgor
eworICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAiaW50ZWdlciJdOworfQorCistICh2
b2lkKXNldEFycmF5OihOU1N0cmluZyAqKWFycmF5Cit7CisgICAgW3N1cGVyIHNldFN0cmluZzph
cnJheSBmb3JLZXk6QCJhcnJheSJdOworfQorCistIChOU1N0cmluZyAqKWFycmF5Cit7CisgICAg
cmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJhcnJheSJdOworfQorCistICh2b2lkKXNldFN0
cmluZzooTlNTdHJpbmcgKilzdHJpbmcKK3sKKyAgICBbc3VwZXIgc2V0U3RyaW5nOnN0cmluZyBm
b3JLZXk6QCJzdHJpbmciXTsKK30KKworLSAoTlNTdHJpbmcgKilzdHJpbmcKK3sKKyAgICByZXR1
cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAInN0cmluZyJdOworfQorCistICh2b2lkKXNldFZhbHVl
OihOU1N0cmluZyAqKXZhbHVlCit7CisgICAgW3N1cGVyIHNldFN0cmluZzp2YWx1ZSBmb3JLZXk6
QCJ2YWx1ZSJdOworfQorCistIChOU1N0cmluZyAqKXZhbHVlCit7CisgICAgcmV0dXJuIFtzdXBl
ciBzdHJpbmdGb3JLZXk6QCJ2YWx1ZSJdOworfQorCistICh2b2lkKXNldE9iamVjdDooTlNTdHJp
bmcgKilvYmplY3QKK3sKKyAgICBbc3VwZXIgc2V0U3RyaW5nOm9iamVjdCBmb3JLZXk6QCJvYmpl
Y3QiXTsKK30KKworLSAoTlNTdHJpbmcgKilvYmplY3QKK3sKKyAgICByZXR1cm4gW3N1cGVyIHN0
cmluZ0ZvcktleTpAIm9iamVjdCJdOworfQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0
UHJvdG9jb2xEYXRhYmFzZUR1bW15T2JqZWN0CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBh
eWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQKK3sK
KyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKwor
ICAgIHJldHVybiBzZWxmOworfQorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmpl
Y3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9iamVjdAoreworICAgIGlmICghKHNlbGYgPSBb
c3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmplY3QgdG9KU09OT2JqZWN0XS5nZXQoKV0pKQor
ICAgICAgICByZXR1cm4gbmlsOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKK0BlbmQKKworCitA
aW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZQorCistIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAq
LCBpZD4gKilwYXlsb2FkCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAg
ICAgIHJldHVybiBuaWw7CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BF
UlRZKHBheWxvYWRbQCJkaXJlY3Rpb25hbGl0eSJdLCBAImRpcmVjdGlvbmFsaXR5Iik7CisgICAg
T3B0aW9uYWw8VGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5PiBk
aXJlY3Rpb25hbGl0eSA9IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xUZXN0UGFyYW1l
dGVyQnVuZGxlRGlyZWN0aW9uYWxpdHk+KHBheWxvYWRbQCJkaXJlY3Rpb25hbGl0eSJdKTsKKyAg
ICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9FTlVNX1ZBTFVFKGRpcmVjdGlvbmFsaXR5LCBAImRp
cmVjdGlvbmFsaXR5Iik7CisgICAgc2VsZi5kaXJlY3Rpb25hbGl0eSA9IGRpcmVjdGlvbmFsaXR5
LnZhbHVlKCk7CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBh
eWxvYWRbQCJidXR0b25zIl0sIEAiYnV0dG9ucyIpOworICAgIHNlbGYuYnV0dG9ucyA9IHBheWxv
YWRbQCJidXR0b25zIl07CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BF
UlRZKHBheWxvYWRbQCJjb2x1bW5OYW1lcyJdLCBAImNvbHVtbk5hbWVzIik7CisgICAgc2VsZi5j
b2x1bW5OYW1lcyA9IHBheWxvYWRbQCJjb2x1bW5OYW1lcyJdOworCisgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0Aibm90ZXMiXSwgQCJub3RlcyIpOwor
ICAgIHNlbGYubm90ZXMgPSBwYXlsb2FkW0Aibm90ZXMiXTsKKworICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAInRpbWVzdGFtcCJdLCBAInRpbWVzdGFt
cCIpOworICAgIHNlbGYudGltZXN0YW1wID0gW3BheWxvYWRbQCJ0aW1lc3RhbXAiXSBkb3VibGVW
YWx1ZV07CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxv
YWRbQCJ2YWx1ZXMiXSwgQCJ2YWx1ZXMiKTsKKyAgICBzZWxmLnZhbHVlcyA9IHBheWxvYWRbQCJ2
YWx1ZXMiXTsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5
bG9hZFtAInBheWxvYWQiXSwgQCJwYXlsb2FkIik7CisgICAgc2VsZi5wYXlsb2FkID0gcGF5bG9h
ZFtAInBheWxvYWQiXTsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVS
VFkocGF5bG9hZFtAImVycm9yIl0sIEAiZXJyb3IiKTsKKyAgICBzZWxmLmVycm9yID0gW1tUZXN0
UHJvdG9jb2xEYXRhYmFzZUVycm9yIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZFtAImVy
cm9yIl1dOworCisgICAgcmV0dXJuIHNlbGY7Cit9CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQ
cm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopb2JqZWN0Cit7CisgICAgaWYg
KCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEpTT05PYmplY3Q6W29iamVjdCB0b0pTT05PYmplY3Rd
LmdldCgpXSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKwor
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRGlyZWN0aW9uYWxpdHk6KFRlc3RQcm90b2NvbFRlc3RQ
YXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSlkaXJlY3Rpb25hbGl0eSBidXR0b25zOihOU0Fy
cmF5Lyo8TlNTdHJpbmc+Ki8gKilidXR0b25zIGNvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNTdHJp
bmc+Ki8gKiljb2x1bW5OYW1lcyBub3RlczooTlNTdHJpbmcgKilub3RlcyB0aW1lc3RhbXA6KGRv
dWJsZSl0aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKil2YWx1ZXMgcGF5
bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZCBlcnJvcjooVGVzdFByb3RvY29s
RGF0YWJhc2VFcnJvciAqKWVycm9yCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkp
CisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVE
X1BST1BFUlRZKGJ1dHRvbnMsIEAiYnV0dG9ucyIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
UkVRVUlSRURfUFJPUEVSVFkoY29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsKKyAgICBUSFJP
V19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKG5vdGVzLCBAIm5vdGVzIik7CisgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWSh2YWx1ZXMsIEAidmFsdWVzIik7
CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkLCBAInBh
eWxvYWQiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKGVycm9y
LCBAImVycm9yIik7CisKKyAgICBzZWxmLmRpcmVjdGlvbmFsaXR5ID0gZGlyZWN0aW9uYWxpdHk7
CisgICAgc2VsZi5idXR0b25zID0gYnV0dG9uczsKKyAgICBzZWxmLmNvbHVtbk5hbWVzID0gY29s
dW1uTmFtZXM7CisgICAgc2VsZi5ub3RlcyA9IG5vdGVzOworICAgIHNlbGYudGltZXN0YW1wID0g
dGltZXN0YW1wOworICAgIHNlbGYudmFsdWVzID0gdmFsdWVzOworICAgIHNlbGYucGF5bG9hZCA9
IHBheWxvYWQ7CisgICAgc2VsZi5lcnJvciA9IGVycm9yOworCisgICAgcmV0dXJuIHNlbGY7Cit9
CisKKy0gKHZvaWQpc2V0RGlyZWN0aW9uYWxpdHk6KFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJC
dW5kbGVEaXJlY3Rpb25hbGl0eSlkaXJlY3Rpb25hbGl0eQoreworICAgIFtzdXBlciBzZXRTdHJp
bmc6dG9Qcm90b2NvbFN0cmluZyhkaXJlY3Rpb25hbGl0eSkgZm9yS2V5OkAiZGlyZWN0aW9uYWxp
dHkiXTsKK30KKworLSAoVGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFs
aXR5KWRpcmVjdGlvbmFsaXR5Cit7CisgICAgcmV0dXJuIGZyb21Qcm90b2NvbFN0cmluZzxUZXN0
UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHk+KFtzdXBlciBzdHJpbmdG
b3JLZXk6QCJkaXJlY3Rpb25hbGl0eSJdKS52YWx1ZSgpOworfQorCistICh2b2lkKXNldEJ1dHRv
bnM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWJ1dHRvbnMKK3sKKyAgICBbc3VwZXIgc2V0SlNP
TkFycmF5OnRvSlNPTlN0cmluZ0FycmF5KGJ1dHRvbnMpIGZvcktleTpAImJ1dHRvbnMiXTsKK30K
KworLSAoTlNBcnJheS8qPE5TU3RyaW5nPiovICopYnV0dG9ucworeworICAgIHJldHVybiB0b09i
akNTdHJpbmdBcnJheShbc3VwZXIgSlNPTkFycmF5Rm9yS2V5OkAiYnV0dG9ucyJdKTsKK30KKwor
LSAodm9pZClzZXRDb2x1bW5OYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopY29sdW1uTmFt
ZXMKK3sKKyAgICBbc3VwZXIgc2V0SlNPTkFycmF5OnRvSlNPTlN0cmluZ0FycmF5KGNvbHVtbk5h
bWVzKSBmb3JLZXk6QCJjb2x1bW5OYW1lcyJdOworfQorCistIChOU0FycmF5Lyo8TlNTdHJpbmc+
Ki8gKiljb2x1bW5OYW1lcworeworICAgIHJldHVybiB0b09iakNTdHJpbmdBcnJheShbc3VwZXIg
SlNPTkFycmF5Rm9yS2V5OkAiY29sdW1uTmFtZXMiXSk7Cit9CisKKy0gKHZvaWQpc2V0Tm90ZXM6
KE5TU3RyaW5nICopbm90ZXMKK3sKKyAgICBbc3VwZXIgc2V0U3RyaW5nOm5vdGVzIGZvcktleTpA
Im5vdGVzIl07Cit9CisKKy0gKE5TU3RyaW5nICopbm90ZXMKK3sKKyAgICByZXR1cm4gW3N1cGVy
IHN0cmluZ0ZvcktleTpAIm5vdGVzIl07Cit9CisKKy0gKHZvaWQpc2V0VGltZXN0YW1wOihkb3Vi
bGUpdGltZXN0YW1wCit7CisgICAgW3N1cGVyIHNldERvdWJsZTp0aW1lc3RhbXAgZm9yS2V5OkAi
dGltZXN0YW1wIl07Cit9CisKKy0gKGRvdWJsZSl0aW1lc3RhbXAKK3sKKyAgICByZXR1cm4gW3N1
cGVyIGRvdWJsZUZvcktleTpAInRpbWVzdGFtcCJdOworfQorCistICh2b2lkKXNldFZhbHVlczoo
UldJUHJvdG9jb2xKU09OT2JqZWN0ICopdmFsdWVzCit7CisgICAgW3N1cGVyIHNldE9iamVjdDp2
YWx1ZXMgZm9yS2V5OkAidmFsdWVzIl07Cit9CisKKy0gKFJXSVByb3RvY29sSlNPTk9iamVjdCAq
KXZhbHVlcworeworICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb2JqZWN0ID0gW3N1cGVyIG9i
amVjdEZvcktleTpAInZhbHVlcyJdOworICAgIGlmICghb2JqZWN0KQorICAgICAgICByZXR1cm4g
bmlsOworICAgIHJldHVybiBbW1JXSVByb3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5pdFdpdGhK
U09OT2JqZWN0Oltbc3VwZXIgb2JqZWN0Rm9yS2V5OkAidmFsdWVzIl0gdG9KU09OT2JqZWN0XS5n
ZXQoKV07Cit9CisKKy0gKHZvaWQpc2V0UGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICop
cGF5bG9hZAoreworICAgIFtzdXBlciBzZXRPYmplY3Q6cGF5bG9hZCBmb3JLZXk6QCJwYXlsb2Fk
Il07Cit9CisKKy0gKFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQKK3sKKyAgICBSV0lQ
cm90b2NvbEpTT05PYmplY3QgKm9iamVjdCA9IFtzdXBlciBvYmplY3RGb3JLZXk6QCJwYXlsb2Fk
Il07CisgICAgaWYgKCFvYmplY3QpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgcmV0dXJuIFtb
UldJUHJvdG9jb2xKU09OT2JqZWN0IGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6W1tzdXBlciBv
YmplY3RGb3JLZXk6QCJwYXlsb2FkIl0gdG9KU09OT2JqZWN0XS5nZXQoKV07Cit9CisKKy0gKHZv
aWQpc2V0RXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKillcnJvcgoreworICAgIFtz
dXBlciBzZXRPYmplY3Q6ZXJyb3IgZm9yS2V5OkAiZXJyb3IiXTsKK30KKworLSAoVGVzdFByb3Rv
Y29sRGF0YWJhc2VFcnJvciAqKWVycm9yCit7CisgICAgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpv
YmplY3QgPSBbc3VwZXIgb2JqZWN0Rm9yS2V5OkAiZXJyb3IiXTsKKyAgICBpZiAoIW9iamVjdCkK
KyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICByZXR1cm4gW1tUZXN0UHJvdG9jb2xEYXRhYmFzZUVy
cm9yIGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6W1tzdXBlciBvYmplY3RGb3JLZXk6QCJlcnJv
ciJdIHRvSlNPTk9iamVjdF0uZ2V0KCldOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2Fz
dHMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uLXJlc3VsdApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZDljOTc2ZWZlMzYKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZXhwZWN0ZWQvdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uLXJlc3VsdApAQCAt
MCwwICsxLDE2MTQgQEAKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMu
anMKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50
aW1lLWNhc3RzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworLy8gVGVzdAorSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiVGVzdCIsIG51bGwp
OworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIlRlc3QuVW5jYXN0ZWRBbmltYWxzIiwg
e1BpZ3M6ICJQaWdzIiwgQ293czogIkNvd3MiLCBDYXRzOiAiQ2F0cyIsIEhlbnM6ICJIZW5zIn0p
OworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIlRlc3QuQ2FzdGVkQW5pbWFscyIsIHtE
dWNrczogIkR1Y2tzIiwgSGVuczogIkhlbnMiLCBDcm93czogIkNyb3dzIiwgRmxhbWluZ29zOiAi
RmxhbWluZ29zIn0pOworSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiVGVzdCIsIG51
bGwpOworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UK
KworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCisjaW5jbHVk
ZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckZyb250ZW5kUm91dGVyLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdm9pZCBzZXRCYWNrZW5kRGlz
cGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tl
bmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQorICAgIEJhY2tlbmREaXNwYXRj
aGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNo
ZXIuZ2V0KCk7IH0KK3ByaXZhdGU6CisgICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2Jh
Y2tlbmREaXNwYXRjaGVyOworfTsKKworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisK
KyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyMjIyBF
bmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KKy8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwor
bmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCisK
KworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlz
cGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1l
LWNhc3RzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIK
KworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Cisj
aW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERp
c3BhdGNoZXJzLmgiCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CisKK2NsYXNzIEZyb250ZW5kUm91dGVyOworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
KyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmls
ZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
KworIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgorLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KKyNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK25hbWVzcGFjZSBQcm90
b2NvbCB7CisKKworCisvLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KK25hbWVzcGFjZSBUZXN0IHsK
K2NsYXNzIFR5cGVOZWVkaW5nQ2FzdDsKK2NsYXNzIFJlY3Vyc2l2ZU9iamVjdDE7CitjbGFzcyBS
ZWN1cnNpdmVPYmplY3QyOworZW51bSBjbGFzcyBVbmNhc3RlZEFuaW1hbHM7CitlbnVtIGNsYXNz
IENhc3RlZEFuaW1hbHM7Cit9IC8vIFRlc3QKKy8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9u
cy4KKworCisvLyBUeXBlZGVmcy4KK25hbWVzcGFjZSBUZXN0IHsKK3R5cGVkZWYgaW50IENhc3Rl
ZE9iamVjdElkOwordHlwZWRlZiBpbnQgVW5jYXN0ZWRPYmplY3RJZDsKK30gLy8gVGVzdAorLy8g
RW5kIG9mIHR5cGVkZWZzLgorCituYW1lc3BhY2UgVGVzdEhlbHBlcnMgeworCitTdHJpbmcgZ2V0
RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJp
bmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFsdWUpCit7CisgICAgcmV0dXJuIGdldEVu
dW1Db25zdGFudFZhbHVlKHN0YXRpY19jYXN0PGludD4oZW51bVZhbHVlKSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFRlc3RIZWxwZXJzCisKK25hbWVzcGFjZSBUZXN0IHsKKy8qIEEgZHVtbXkgdHlw
ZSB0aGF0IHJlcXVpcmVzIHJ1bnRpbWUgY2FzdHMsIGFuZCBmb3JjZXMgbm9uLXByaW1pdGl2ZSBy
ZWZlcmVuY2VkIHR5cGVzIHRvIGFsc28gZW1pdCBydW50aW1lIGNhc3QgaGVscGVycy4gKi8KK2Ns
YXNzIFR5cGVOZWVkaW5nQ2FzdCA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKK3B1YmxpYzoK
KyAgICBlbnVtIHsKKyAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAorICAgICAgICBTdHJpbmdTZXQg
PSAxIDw8IDAsCisgICAgICAgIE51bWJlclNldCA9IDEgPDwgMSwKKyAgICAgICAgQW5pbWFsc1Nl
dCA9IDEgPDwgMiwKKyAgICAgICAgSWRTZXQgPSAxIDw8IDMsCisgICAgICAgIFRyZWVTZXQgPSAx
IDw8IDQsCisgICAgICAgIEFsbEZpZWxkc1NldCA9IChTdHJpbmdTZXQgfCBOdW1iZXJTZXQgfCBB
bmltYWxzU2V0IHwgSWRTZXQgfCBUcmVlU2V0KQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTxpbnQg
U1RBVEU+CisgICAgY2xhc3MgQnVpbGRlciB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRy
PEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7CisKKyAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1
aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwor
ICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcihSZWY8LypUeXBlTmVlZGluZ0Nhc3QqL0pTT046
Ok9iamVjdD4mJiBvYmplY3QpCisgICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0
KSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVs
ZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CisgICAgICAgIH0KKyAg
ICAgICAgZnJpZW5kIGNsYXNzIFR5cGVOZWVkaW5nQ2FzdDsKKyAgICBwdWJsaWM6CisKKyAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IFN0cmluZ1NldD4mIHNldFN0cmluZyhjb25zdCBTdHJpbmcmIHZh
bHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU3Ry
aW5nU2V0KSwgcHJvcGVydHlfc3RyaW5nX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXRTdHJpbmcoInN0cmluZyJfcywgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNh
c3RTdGF0ZTxTdHJpbmdTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgTnVtYmVyU2V0PiYgc2V0TnVtYmVyKGludCB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE51bWJlclNldCksIHByb3BlcnR5X251bWJlcl9h
bHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcigibnVtYmVyIl9z
LCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE51bWJlclNldD4oKTsKKyAg
ICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBBbmltYWxzU2V0PiYgc2V0QW5pbWFs
cyhJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzIHZhbHVlKQorICAgICAg
ICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQW5pbWFsc1NldCksIHBy
b3BlcnR5X2FuaW1hbHNfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0
cmluZygiYW5pbWFscyJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVu
dW1Db25zdGFudFZhbHVlKHZhbHVlKSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEFu
aW1hbHNTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgSWRTZXQ+
JiBzZXRJZChpbnQgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBJZFNldCksIHByb3BlcnR5X2lkX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXRJbnRlZ2VyKCJpZCJfcywgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxJZFNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBUcmVlU2V0PiYgc2V0VHJlZShSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVj
dXJzaXZlT2JqZWN0MT4gdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBUcmVlU2V0KSwgcHJvcGVydHlfdHJlZV9hbHJlYWR5X3NldCk7CisgICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJ0cmVlIl9zLCB2YWx1ZSk7CisgICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPFRyZWVTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBSZWY8
VHlwZU5lZWRpbmdDYXN0PiByZWxlYXNlKCkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihUeXBlTmVlZGluZ0Nhc3QpID09IHNpemVv
ZihKU09OOjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7CisKKyAgICAgICAgICAgIFJlZjxKU09OOjpP
YmplY3Q+IGpzb25SZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOworICAgICAgICAg
ICAgYXV0byByZXN1bHQgPSBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxUeXBlTmVlZGlu
Z0Nhc3Q+Kj4oJmpzb25SZXN1bHQpKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
ICAgIH0KKyAgICB9OworCisgICAgLyoKKyAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6Cisg
ICAgICogUmVmPFR5cGVOZWVkaW5nQ2FzdD4gcmVzdWx0ID0gVHlwZU5lZWRpbmdDYXN0OjpjcmVh
dGUoKQorICAgICAqICAgICAuc2V0U3RyaW5nKC4uLikKKyAgICAgKiAgICAgLnNldE51bWJlcigu
Li4pCisgICAgICogICAgIC5zZXRBbmltYWxzKC4uLikKKyAgICAgKiAgICAgLnNldElkKC4uLikK
KyAgICAgKiAgICAgLnNldFRyZWUoLi4uKQorICAgICAqICAgICAucmVsZWFzZSgpOworICAgICAq
LworICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOwor
ICAgIH0KK307CisKKy8qICAqLworZW51bSBjbGFzcyBVbmNhc3RlZEFuaW1hbHMgeworICAgIFBp
Z3MgPSA0LAorICAgIENvd3MgPSA1LAorICAgIENhdHMgPSA2LAorICAgIEhlbnMgPSAxLAorfTsg
Ly8gZW51bSBjbGFzcyBVbmNhc3RlZEFuaW1hbHMKKy8qICAqLworZW51bSBjbGFzcyBDYXN0ZWRB
bmltYWxzIHsKKyAgICBEdWNrcyA9IDAsCisgICAgSGVucyA9IDEsCisgICAgQ3Jvd3MgPSAyLAor
ICAgIEZsYW1pbmdvcyA9IDMsCit9OyAvLyBlbnVtIGNsYXNzIENhc3RlZEFuaW1hbHMKK2NsYXNz
IFJlY3Vyc2l2ZU9iamVjdDEgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CitwdWJsaWM6Cisg
ICAgZW51bSB7CisgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKKyAgICAgICAgQWxsRmllbGRzU2V0
ID0gMAorICAgIH07CisKKyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CisgICAgY2xhc3MgQnVpbGRl
ciB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7
CisKKyAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2Fz
dFN0YXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0
PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgQnVp
bGRlcihSZWY8LypSZWN1cnNpdmVPYmplY3QxKi9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQorICAg
ICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRf
aW5fbm9uX2luaXRfc3RhdGUpOworICAgICAgICB9CisgICAgICAgIGZyaWVuZCBjbGFzcyBSZWN1
cnNpdmVPYmplY3QxOworICAgIHB1YmxpYzoKKworICAgICAgICBSZWY8UmVjdXJzaXZlT2JqZWN0
MT4gcmVsZWFzZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRF
ID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CisgICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVChzaXplb2YoUmVjdXJzaXZlT2JqZWN0MSkgPT0gc2l6ZW9mKEpTT046Ok9iamVj
dCksIGNhbm5vdF9jYXN0KTsKKworICAgICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4ganNvblJl
c3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgICAgICBhdXRvIHJlc3Vs
dCA9IFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPFJlY3Vyc2l2ZU9iamVjdDE+Kj4oJmpz
b25SZXN1bHQpKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICB9
OworCisgICAgLyoKKyAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CisgICAgICogUmVmPFJl
Y3Vyc2l2ZU9iamVjdDE+IHJlc3VsdCA9IFJlY3Vyc2l2ZU9iamVjdDE6OmNyZWF0ZSgpCisgICAg
ICogICAgIC5yZWxlYXNlKCk7CisgICAgICovCisgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNT
ZXQ+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4o
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7CisgICAgfQorCisgICAgdm9pZCBzZXRPYmooUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDI+IHZhbHVlKQorICAg
IHsKKyAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0T2JqZWN0KCJvYmoiX3MsIFdURk1vdmUo
dmFsdWUpKTsKKyAgICB9Cit9OworCitjbGFzcyBSZWN1cnNpdmVPYmplY3QyIDogcHVibGljIEpT
T046Ok9iamVjdEJhc2UgeworcHVibGljOgorICAgIGVudW0geworICAgICAgICBOb0ZpZWxkc1Nl
dCA9IDAsCisgICAgICAgIEFsbEZpZWxkc1NldCA9IDAKKyAgICB9OworCisgICAgdGVtcGxhdGU8
aW50IFNUQVRFPgorICAgIGNsYXNzIEJ1aWxkZXIgeworICAgIHByaXZhdGU6CisgICAgICAgIFJl
ZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVzdWx0OworCisgICAgICAgIHRlbXBsYXRlPGludCBTVEVQ
PiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlz
KTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXIoUmVmPC8qUmVjdXJzaXZlT2JqZWN0Miov
SlNPTjo6T2JqZWN0PiYmIG9iamVjdCkKKyAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShv
YmplY3QpKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBO
b0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKKyAgICAgICAg
fQorICAgICAgICBmcmllbmQgY2xhc3MgUmVjdXJzaXZlT2JqZWN0MjsKKyAgICBwdWJsaWM6CisK
KyAgICAgICAgUmVmPFJlY3Vyc2l2ZU9iamVjdDI+IHJlbGVhc2UoKQorICAgICAgICB7CisgICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19u
b3RfcmVhZHkpOworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFJlY3Vyc2l2ZU9i
amVjdDIpID09IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7CisKKyAgICAgICAg
ICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25SZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVs
bCgpOworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0
PFJlZjxSZWN1cnNpdmVPYmplY3QyPio+KCZqc29uUmVzdWx0KSk7CisgICAgICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgICAgICB9CisgICAgfTsKKworICAgIC8qCisgICAgICogU3ludGhldGlj
IGNvbnN0cnVjdG9yOgorICAgICAqIFJlZjxSZWN1cnNpdmVPYmplY3QyPiByZXN1bHQgPSBSZWN1
cnNpdmVPYmplY3QyOjpjcmVhdGUoKQorICAgICAqICAgICAucmVsZWFzZSgpOworICAgICAqLwor
ICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOworICAg
IH0KKworICAgIHZvaWQgc2V0T2JqKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpS
ZWN1cnNpdmVPYmplY3QxPiB2YWx1ZSkKKyAgICB7CisgICAgICAgIEpTT046Ok9iamVjdEJhc2U6
OnNldE9iamVjdCgib2JqIl9zLCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgfQorfTsKKworfSAvLyBU
ZXN0CisKK3RlbXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6VGVzdDo6Q2FzdGVkQW5pbWFscz4geworc3RhdGljIHZvaWQgYXNzZXJ0VmFsdWVIYXNFeHBl
Y3RlZFR5cGUoSlNPTjo6VmFsdWUqKTsKK307Cit0ZW1wbGF0ZTw+IHN0cnVjdCBCaW5kaW5nVHJh
aXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD4geworc3RhdGlj
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+IHJ1bnRp
bWVDYXN0KFJlZlB0cjxKU09OOjpWYWx1ZT4mJiB2YWx1ZSk7CitzdGF0aWMgdm9pZCBhc3NlcnRW
YWx1ZUhhc0V4cGVjdGVkVHlwZShKU09OOjpWYWx1ZSopOworfTsKK3RlbXBsYXRlPD4gc3RydWN0
IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0
MT4geworc3RhdGljIHZvaWQgYXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSlNPTjo6VmFsdWUq
KTsKK307Cit0ZW1wbGF0ZTw+IHN0cnVjdCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDI+IHsKK3N0YXRpYyB2b2lkIGFzc2VydFZhbHVlSGFz
RXhwZWN0ZWRUeXBlKEpTT046OlZhbHVlKik7Cit9OworCituYW1lc3BhY2UgVGVzdEhlbHBlcnMg
eworCit0ZW1wbGF0ZTx0eXBlbmFtZSBQcm90b2NvbEVudW1UeXBlPgorT3B0aW9uYWw8UHJvdG9j
b2xFbnVtVHlwZT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYpOworCisv
LyBFbnVtcyBpbiB0aGUgJ1Rlc3QnIERvbWFpbgordGVtcGxhdGU8PgorT3B0aW9uYWw8SW5zcGVj
dG9yOjpQcm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzPiBwYXJzZUVudW1WYWx1ZUZyb21T
dHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzPihjb25zdCBT
dHJpbmcmKTsKK3RlbXBsYXRlPD4KK09wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6
OkNhc3RlZEFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPihjb25zdCBTdHJpbmcmKTsKKworfSAvLyBuYW1lc3Bh
Y2UgVGVzdEhlbHBlcnMKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgRGVmYXVsdEhhc2g7CisKKy8vIEhhc2ggZGVjbGFyYXRpb25zIGluIHRoZSAnVGVzdCcg
RG9tYWluCit0ZW1wbGF0ZTw+CitzdHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzPiB7CisgICAgdHlwZWRlZiBJbnRIYXNoPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFscz4gSGFzaDsKK307Cit0ZW1wbGF0ZTw+
CitzdHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5p
bWFscz4geworICAgIHR5cGVkZWYgSW50SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpD
YXN0ZWRBbmltYWxzPiBIYXNoOworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisjIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
T2JqZWN0cy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVp
cmluZy1ydW50aW1lLWNhc3RzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9i
amVjdHMuaCIKKworI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK25hbWVzcGFjZSBQcm90b2Nv
bCB7CisKK25hbWVzcGFjZSBUZXN0SGVscGVycyB7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBjb25z
dCBlbnVtX2NvbnN0YW50X3ZhbHVlc1tdID0geworICAgICJEdWNrcyIsCisgICAgIkhlbnMiLAor
ICAgICJDcm93cyIsCisgICAgIkZsYW1pbmdvcyIsCisgICAgIlBpZ3MiLAorICAgICJDb3dzIiwK
KyAgICAiQ2F0cyIsCit9OworCitTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUp
IHsKKyAgICByZXR1cm4gZW51bV9jb25zdGFudF92YWx1ZXNbY29kZV07Cit9CisKKy8vIEVudW1z
IGluIHRoZSAnVGVzdCcgRG9tYWluCit0ZW1wbGF0ZTw+CitPcHRpb25hbDxJbnNwZWN0b3I6OlBy
b3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJ
bnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM+KGNvbnN0IFN0cmluZyYg
cHJvdG9jb2xTdHJpbmcpCit7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVl
c1tdID0geworICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlVuY2Fz
dGVkQW5pbWFsczo6UGlncywKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpU
ZXN0OjpVbmNhc3RlZEFuaW1hbHM6OkNvd3MsCisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQ
cm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzOjpDYXRzLAorICAgICAgICAoc2l6ZV90KUlu
c3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFsczo6SGVucywKKyAgICB9Owor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgNDsgKytpKQorICAgICAgICBpZiAocHJvdG9jb2xT
dHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNbaV1dKQorICAgICAg
ICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHMp
Y29uc3RhbnRWYWx1ZXNbaV07CisKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCit0ZW1w
bGF0ZTw+CitPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxz
PiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2Fz
dGVkQW5pbWFscz4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKK3sKKyAgICBzdGF0aWMg
Y29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7CisgICAgICAgIChzaXplX3QpSW5zcGVj
dG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFsczo6RHVja3MsCisgICAgICAgIChzaXpl
X3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFsczo6SGVucywKKyAgICAg
ICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzOjpDcm93
cywKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmlt
YWxzOjpGbGFtaW5nb3MsCisgICAgfTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDQ7ICsr
aSkKKyAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2Nv
bnN0YW50VmFsdWVzW2ldXSkKKyAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2Nv
bDo6VGVzdDo6Q2FzdGVkQW5pbWFscyljb25zdGFudFZhbHVlc1tpXTsKKworICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7Cit9CisKKworfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKKworCisKK3Zv
aWQgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxz
Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSlNPTjo6VmFsdWUqIHZhbHVlKQoreworI2lm
IEFTU0VSVF9FTkFCTEVECisgICAgQVNTRVJUX0FSRyh2YWx1ZSwgdmFsdWUpOworICAgIFN0cmlu
ZyByZXN1bHQ7CisgICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdmFsdWUtPmFzU3RyaW5nKHJlc3Vs
dCk7CisgICAgQVNTRVJUKGNhc3RTdWNjZWVkZWQpOworICAgIEFTU0VSVChyZXN1bHQgPT0gIkR1
Y2tzIiB8fCByZXN1bHQgPT0gIkhlbnMiIHx8IHJlc3VsdCA9PSAiQ3Jvd3MiIHx8IHJlc3VsdCA9
PSAiRmxhbWluZ29zIik7CisjZWxzZSAvLyBBU1NFUlRfRU5BQkxFRAorICAgIFVOVVNFRF9QQVJB
TSh2YWx1ZSk7CisjZW5kaWYgLy8gQVNTRVJUX0VOQUJMRUQKK30KKwordm9pZCBCaW5kaW5nVHJh
aXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD46OmFzc2VydFZh
bHVlSGFzRXhwZWN0ZWRUeXBlKEpTT046OlZhbHVlKiB2YWx1ZSkKK3sKKyNpZiBBU1NFUlRfRU5B
QkxFRAorICAgIEFTU0VSVF9BUkcodmFsdWUsIHZhbHVlKTsKKyAgICBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiBvYmplY3Q7CisgICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdmFsdWUtPmFzT2JqZWN0KG9i
amVjdCk7CisgICAgQVNTRVJUX1VOVVNFRChjYXN0U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsK
KyAgICB7CisgICAgICAgIGF1dG8gc3RyaW5nUG9zID0gb2JqZWN0LT5maW5kKCJzdHJpbmciX3Mp
OworICAgICAgICBBU1NFUlQoc3RyaW5nUG9zICE9IG9iamVjdC0+ZW5kKCkpOworICAgICAgICBC
aW5kaW5nVHJhaXRzPFN0cmluZz46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKHN0cmluZ1Bv
cy0+dmFsdWUuZ2V0KCkpOworICAgIH0KKyAgICB7CisgICAgICAgIGF1dG8gbnVtYmVyUG9zID0g
b2JqZWN0LT5maW5kKCJudW1iZXIiX3MpOworICAgICAgICBBU1NFUlQobnVtYmVyUG9zICE9IG9i
amVjdC0+ZW5kKCkpOworICAgICAgICBCaW5kaW5nVHJhaXRzPGludD46OmFzc2VydFZhbHVlSGFz
RXhwZWN0ZWRUeXBlKG51bWJlclBvcy0+dmFsdWUuZ2V0KCkpOworICAgIH0KKyAgICB7CisgICAg
ICAgIGF1dG8gYW5pbWFsc1BvcyA9IG9iamVjdC0+ZmluZCgiYW5pbWFscyJfcyk7CisgICAgICAg
IEFTU0VSVChhbmltYWxzUG9zICE9IG9iamVjdC0+ZW5kKCkpOworICAgICAgICBCaW5kaW5nVHJh
aXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+Ojphc3NlcnRWYWx1
ZUhhc0V4cGVjdGVkVHlwZShhbmltYWxzUG9zLT52YWx1ZS5nZXQoKSk7CisgICAgfQorICAgIHsK
KyAgICAgICAgYXV0byBpZFBvcyA9IG9iamVjdC0+ZmluZCgiaWQiX3MpOworICAgICAgICBBU1NF
UlQoaWRQb3MgIT0gb2JqZWN0LT5lbmQoKSk7CisgICAgICAgIEJpbmRpbmdUcmFpdHM8aW50Pjo6
YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoaWRQb3MtPnZhbHVlLmdldCgpKTsKKyAgICB9Cisg
ICAgeworICAgICAgICBhdXRvIHRyZWVQb3MgPSBvYmplY3QtPmZpbmQoInRyZWUiX3MpOworICAg
ICAgICBBU1NFUlQodHJlZVBvcyAhPSBvYmplY3QtPmVuZCgpKTsKKyAgICAgICAgQmluZGluZ1Ry
YWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QxPjo6YXNzZXJ0
VmFsdWVIYXNFeHBlY3RlZFR5cGUodHJlZVBvcy0+dmFsdWUuZ2V0KCkpOworICAgIH0KKworICAg
IGludCBmb3VuZFByb3BlcnRpZXNDb3VudCA9IDU7CisgICAgaWYgKGZvdW5kUHJvcGVydGllc0Nv
dW50ICE9IG9iamVjdC0+c2l6ZSgpKQorICAgICAgICBGQVRBTCgiVW5leHBlY3RlZCBwcm9wZXJ0
aWVzIGluIG9iamVjdDogJXNcbiIsIG9iamVjdC0+dG9KU09OU3RyaW5nKCkuYXNjaWkoKS5kYXRh
KCkpOworI2Vsc2UgLy8gQVNTRVJUX0VOQUJMRUQKKyAgICBVTlVTRURfUEFSQU0odmFsdWUpOwor
I2VuZGlmIC8vIEFTU0VSVF9FTkFCTEVECit9CisKK1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0Pjo6cnVudGltZUNhc3QoUmVmUHRyPEpTT046OlZhbHVl
PiYmIHZhbHVlKQoreworICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHJlc3VsdDsKKyAgICBib29s
IGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNPYmplY3QocmVzdWx0KTsKKyAgICBBU1NFUlRfVU5V
U0VEKGNhc3RTdWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQpOworICAgIEJpbmRpbmdUcmFpdHM8SW5z
cGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0Pjo6YXNzZXJ0VmFsdWVIYXNF
eHBlY3RlZFR5cGUocmVzdWx0LmdldCgpKTsKKyAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoSW5z
cGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0KSA9PSBzaXplb2YoSlNPTjo6
T2JqZWN0QmFzZSksIHR5cGVfY2FzdF9wcm9ibGVtKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0Kj4oc3RhdGljX2Nhc3Q8
SlNPTjo6T2JqZWN0QmFzZSo+KHJlc3VsdC5nZXQoKSkpOworfQorCisKK3ZvaWQgQmluZGluZ1Ry
YWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QxPjo6YXNzZXJ0
VmFsdWVIYXNFeHBlY3RlZFR5cGUoSlNPTjo6VmFsdWUqIHZhbHVlKQoreworI2lmIEFTU0VSVF9F
TkFCTEVECisgICAgQVNTRVJUX0FSRyh2YWx1ZSwgdmFsdWUpOworICAgIFJlZlB0cjxKU09OOjpP
YmplY3Q+IG9iamVjdDsKKyAgICBib29sIGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNPYmplY3Qo
b2JqZWN0KTsKKyAgICBBU1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQp
OworCisgICAgaW50IGZvdW5kUHJvcGVydGllc0NvdW50ID0gMDsKKyAgICB7CisgICAgICAgIGF1
dG8gb2JqUG9zID0gb2JqZWN0LT5maW5kKCJvYmoiX3MpOworICAgICAgICBpZiAob2JqUG9zICE9
IG9iamVjdC0+ZW5kKCkpIHsKKyAgICAgICAgICAgIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0Mj46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRU
eXBlKG9ialBvcy0+dmFsdWUuZ2V0KCkpOworICAgICAgICAgICAgKytmb3VuZFByb3BlcnRpZXND
b3VudDsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoZm91bmRQcm9wZXJ0aWVzQ291bnQgIT0g
b2JqZWN0LT5zaXplKCkpCisgICAgICAgIEZBVEFMKCJVbmV4cGVjdGVkIHByb3BlcnRpZXMgaW4g
b2JqZWN0OiAlc1xuIiwgb2JqZWN0LT50b0pTT05TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7Cisj
ZWxzZSAvLyBBU1NFUlRfRU5BQkxFRAorICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7CisjZW5kaWYg
Ly8gQVNTRVJUX0VOQUJMRUQKK30KKwordm9pZCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDI+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlw
ZShKU09OOjpWYWx1ZSogdmFsdWUpCit7CisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICBBU1NFUlRf
QVJHKHZhbHVlLCB2YWx1ZSk7CisgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gb2JqZWN0OworICAg
IGJvb2wgY2FzdFN1Y2NlZWRlZCA9IHZhbHVlLT5hc09iamVjdChvYmplY3QpOworICAgIEFTU0VS
VF9VTlVTRUQoY2FzdFN1Y2NlZWRlZCwgY2FzdFN1Y2NlZWRlZCk7CisKKyAgICBpbnQgZm91bmRQ
cm9wZXJ0aWVzQ291bnQgPSAwOworICAgIHsKKyAgICAgICAgYXV0byBvYmpQb3MgPSBvYmplY3Qt
PmZpbmQoIm9iaiJfcyk7CisgICAgICAgIGlmIChvYmpQb3MgIT0gb2JqZWN0LT5lbmQoKSkgewor
ICAgICAgICAgICAgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1
cnNpdmVPYmplY3QxPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUob2JqUG9zLT52YWx1ZS5n
ZXQoKSk7CisgICAgICAgICAgICArK2ZvdW5kUHJvcGVydGllc0NvdW50OworICAgICAgICB9Cisg
ICAgfQorICAgIGlmIChmb3VuZFByb3BlcnRpZXNDb3VudCAhPSBvYmplY3QtPnNpemUoKSkKKyAg
ICAgICAgRkFUQUwoIlVuZXhwZWN0ZWQgcHJvcGVydGllcyBpbiBvYmplY3Q6ICVzXG4iLCBvYmpl
Y3QtPnRvSlNPTlN0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKKyNlbHNlIC8vIEFTU0VSVF9FTkFC
TEVECisgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKKyNlbmRpZiAvLyBBU1NFUlRfRU5BQkxFRAor
fQorCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
KworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorCisjIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2luY2x1ZGUgPHd0
Zi9SZXRhaW5QdHIuaD4KKworCisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKK30gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNw
YXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hl
cnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1y
dW50aW1lLWNhc3RzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlz
cGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW5jbHVk
ZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1
ZXMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorCisj
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPFdlYklu
c3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRl
ZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVj
dAorQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisK
KyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRl
c3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJu
YWwuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorI2ltcG9y
dCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9y
dCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+
CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4K
KwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90
b2NvbENvbmZpZ3VyYXRpb24KK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIq
IF9jb250cm9sbGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihB
dWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0g
W3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBB
U1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJl
dHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbc3VwZXIgZGVhbGxvY107
Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24u
bW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNh
c3RzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lt
cG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1l
c3BhY2UgSW5zcGVjdG9yOworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNw
YXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8Rm91
bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2Nv
bEpTT05PYmplY3QuaD4KKworCitAY2xhc3MgVGVzdFByb3RvY29sVGVzdFR5cGVOZWVkaW5nQ2Fz
dDsKK0BjbGFzcyBUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MTsKK0BjbGFzcyBUZXN0
UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MjsKKworCit0eXBlZGVmIE5TX0VOVU0oTlNJbnRl
Z2VyLCBUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzKSB7CisgICAgVGVzdFByb3RvY29s
VGVzdFVuY2FzdGVkQW5pbWFsc1BpZ3MsCisgICAgVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5p
bWFsc0Nvd3MsCisgICAgVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc0NhdHMsCisgICAg
VGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc0hlbnMsCit9OworCit0eXBlZGVmIE5TX0VO
VU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFscykgeworICAgIFRlc3RQ
cm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzRHVja3MsCisgICAgVGVzdFByb3RvY29sVGVzdENhc3Rl
ZEFuaW1hbHNIZW5zLAorICAgIFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzQ3Jvd3MsCisg
ICAgVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHNGbGFtaW5nb3MsCit9OworCisKK19fYXR0
cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9j
b2xUZXN0VHlwZU5lZWRpbmdDYXN0IDogUldJUHJvdG9jb2xKU09OT2JqZWN0CistIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5
bG9hZDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2Nv
bEpTT05PYmplY3QgKilqc29uT2JqZWN0OworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoU3RyaW5n
OihOU1N0cmluZyAqKXN0cmluZyBudW1iZXI6KGludCludW1iZXIgYW5pbWFsczooVGVzdFByb3Rv
Y29sVGVzdENhc3RlZEFuaW1hbHMpYW5pbWFscyBpZGVudGlmaWVyOihpbnQpaWRlbnRpZmllciB0
cmVlOihUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSAqKXRyZWU7CisvKiByZXF1aXJl
ZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKnN0cmluZzsKKy8qIHJl
cXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCBudW1iZXI7CisvKiBy
ZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBUZXN0UHJvdG9jb2xUZXN0
Q2FzdGVkQW5pbWFscyBhbmltYWxzOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9t
aWMsIGFzc2lnbikgaW50IGlkZW50aWZpZXI7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5v
bmF0b21pYywgcmV0YWluKSBUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSAqdHJlZTsK
K0BlbmQKKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJm
YWNlIFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxIDogUldJUHJvdG9jb2xKU09OT2Jq
ZWN0CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJp
bmcgKiwgaWQ+ICopcGF5bG9hZDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2Jq
ZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OworLyogb3B0aW9uYWwgKi8g
QHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9i
amVjdDIgKm9iajsKK0BlbmQKKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQi
KSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QyIDogUldJUHJv
dG9jb2xKU09OT2JqZWN0CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rp
b25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0
aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OworLyog
b3B0aW9uYWwgKi8gQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgVGVzdFByb3RvY29sVGVz
dFJlY3Vyc2l2ZU9iamVjdDEgKm9iajsKK0BlbmQKKworCisKKworCisKKyNpbXBvcnQgPFdlYklu
c3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4KKworIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50
ZXJuYWwuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5n
LXJ1bnRpbWUtY2FzdHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEpT
T05PYmplY3RQcml2YXRlLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUlu
c3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKKworCisK
KyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorCisjIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KKy8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisj
aW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+CisKK25h
bWVzcGFjZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+CitP
cHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZh
bHVlKTsKKworCitpbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sVGVz
dFVuY2FzdGVkQW5pbWFscyB2YWx1ZSkKK3sKKyAgICBzd2l0Y2godmFsdWUpIHsKKyAgICBjYXNl
IFRlc3RQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHNQaWdzOgorICAgICAgICByZXR1cm4gIlBp
Z3MiX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzQ293czoKKyAg
ICAgICAgcmV0dXJuICJDb3dzIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sVGVzdFVuY2FzdGVk
QW5pbWFsc0NhdHM6CisgICAgICAgIHJldHVybiAiQ2F0cyJfczsKKyAgICBjYXNlIFRlc3RQcm90
b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHNIZW5zOgorICAgICAgICByZXR1cm4gIkhlbnMiX3M7Cisg
ICAgfQorfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sVGVzdFVu
Y2FzdGVkQW5pbWFscz4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7
CisgICAgaWYgKHZhbHVlID09ICJQaWdzIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFRl
c3RVbmNhc3RlZEFuaW1hbHNQaWdzOworICAgIGlmICh2YWx1ZSA9PSAiQ293cyIpCisgICAgICAg
IHJldHVybiBUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzQ293czsKKyAgICBpZiAodmFs
dWUgPT0gIkNhdHMiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5p
bWFsc0NhdHM7CisgICAgaWYgKHZhbHVlID09ICJIZW5zIikKKyAgICAgICAgcmV0dXJuIFRlc3RQ
cm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHNIZW5zOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
Cit9CisKK2lubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xUZXN0Q2Fz
dGVkQW5pbWFscyB2YWx1ZSkKK3sKKyAgICBzd2l0Y2godmFsdWUpIHsKKyAgICBjYXNlIFRlc3RQ
cm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzRHVja3M6CisgICAgICAgIHJldHVybiAiRHVja3MiX3M7
CisgICAgY2FzZSBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFsc0hlbnM6CisgICAgICAgIHJl
dHVybiAiSGVucyJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzQ3Jv
d3M6CisgICAgICAgIHJldHVybiAiQ3Jvd3MiX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xUZXN0
Q2FzdGVkQW5pbWFsc0ZsYW1pbmdvczoKKyAgICAgICAgcmV0dXJuICJGbGFtaW5nb3MiX3M7Cisg
ICAgfQorfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sVGVzdENh
c3RlZEFuaW1hbHM+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQorewor
ICAgIGlmICh2YWx1ZSA9PSAiRHVja3MiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sVGVz
dENhc3RlZEFuaW1hbHNEdWNrczsKKyAgICBpZiAodmFsdWUgPT0gIkhlbnMiKQorICAgICAgICBy
ZXR1cm4gVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHNIZW5zOworICAgIGlmICh2YWx1ZSA9
PSAiQ3Jvd3MiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHND
cm93czsKKyAgICBpZiAodmFsdWUgPT0gIkZsYW1pbmdvcyIpCisgICAgICAgIHJldHVybiBUZXN0
UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFsc0ZsYW1pbmdvczsKKyAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlw
ZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5o
IgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQ
YXJzZXIuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2
YXRlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbnRlcmZhY2UgVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zIChUZXN0RG9tYWluKQorCisrICh2b2lkKV9wYXJzZVR5cGVO
ZWVkaW5nQ2FzdDooVGVzdFByb3RvY29sVGVzdFR5cGVOZWVkaW5nQ2FzdCAqKilvdXRWYWx1ZSBm
cm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNlQ2FzdGVkT2JqZWN0SWQ6KE5T
TnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworKyAodm9pZClfcGFy
c2VVbmNhc3RlZE9iamVjdElkOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQp
cGF5bG9hZDsKKysgKHZvaWQpX3BhcnNlVW5jYXN0ZWRBbmltYWxzOihOU051bWJlciAqKilvdXRW
YWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNlQ2FzdGVkQW5pbWFs
czooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisrICh2b2lk
KV9wYXJzZVJlY3Vyc2l2ZU9iamVjdDE6KFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3Qx
ICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworKyAodm9pZClfcGFyc2VSZWN1
cnNpdmVPYmplY3QyOihUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MiAqKilvdXRWYWx1
ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChUZXN0RG9tYWluKQorCisrICh2b2lkKV9wYXJzZVR5
cGVOZWVkaW5nQ2FzdDooVGVzdFByb3RvY29sVGVzdFR5cGVOZWVkaW5nQ2FzdCAqKilvdXRWYWx1
ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFE
X1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOworICAgICpvdXRWYWx1ZSA9IFtb
VGVzdFByb3RvY29sVGVzdFR5cGVOZWVkaW5nQ2FzdCBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBh
eWxvYWRdOworfQorCisrICh2b2lkKV9wYXJzZUNhc3RlZE9iamVjdElkOihOU051bWJlciAqKilv
dXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfQkFEX1RZUEUocGF5bG9hZCwgW05TTnVtYmVyIGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0g
KE5TTnVtYmVyICopcGF5bG9hZDsKK30KKworKyAodm9pZClfcGFyc2VVbmNhc3RlZE9iamVjdElk
OihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TTnVtYmVyIGNsYXNzXSk7Cisg
ICAgKm91dFZhbHVlID0gKE5TTnVtYmVyICopcGF5bG9hZDsKK30KKworKyAodm9pZClfcGFyc2VV
bmNhc3RlZEFuaW1hbHM6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXls
b2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNTdHJp
bmcgY2xhc3NdKTsKKyAgICBPcHRpb25hbDxUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxz
PiByZXN1bHQgPSBJbnNwZWN0b3I6OmZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xUZXN0
VW5jYXN0ZWRBbmltYWxzPihwYXlsb2FkKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9F
TlVNX1ZBTFVFKHJlc3VsdCwgQCJVbmNhc3RlZEFuaW1hbHMiKTsKKyAgICAqb3V0VmFsdWUgPSBA
KHJlc3VsdC52YWx1ZSgpKTsKK30KKworKyAodm9pZClfcGFyc2VDYXN0ZWRBbmltYWxzOihOU051
bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TU3RyaW5nIGNsYXNzXSk7CisgICAgT3B0
aW9uYWw8VGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHM+IHJlc3VsdCA9IEluc3BlY3Rvcjo6
ZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzPihwYXlsb2Fk
KTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9FTlVNX1ZBTFVFKHJlc3VsdCwgQCJDYXN0
ZWRBbmltYWxzIik7CisgICAgKm91dFZhbHVlID0gQChyZXN1bHQudmFsdWUoKSk7Cit9CisKKysg
KHZvaWQpX3BhcnNlUmVjdXJzaXZlT2JqZWN0MTooVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9i
amVjdDEgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19F
WENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKKyAg
ICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxIGFsbG9jXSBp
bml0V2l0aFBheWxvYWQ6cGF5bG9hZF07Cit9CisKKysgKHZvaWQpX3BhcnNlUmVjdXJzaXZlT2Jq
ZWN0MjooVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDIgKiopb3V0VmFsdWUgZnJvbVBh
eWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBh
eWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90
b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QyIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07
Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVz
dFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0
ZS5oPgorI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVz
Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworQGltcGxlbWVudGF0aW9uIFRl
c3RQcm90b2NvbFRlc3RUeXBlTmVlZGluZ0Nhc3QKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
UGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZAor
eworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOwor
CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0Aic3Ry
aW5nIl0sIEAic3RyaW5nIik7CisgICAgc2VsZi5zdHJpbmcgPSBwYXlsb2FkW0Aic3RyaW5nIl07
CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJu
dW1iZXIiXSwgQCJudW1iZXIiKTsKKyAgICBzZWxmLm51bWJlciA9IFtwYXlsb2FkW0AibnVtYmVy
Il0gaW50ZWdlclZhbHVlXTsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJP
UEVSVFkocGF5bG9hZFtAImFuaW1hbHMiXSwgQCJhbmltYWxzIik7CisgICAgT3B0aW9uYWw8VGVz
dFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHM+IGFuaW1hbHMgPSBmcm9tUHJvdG9jb2xTdHJpbmc8
VGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHM+KHBheWxvYWRbQCJhbmltYWxzIl0pOworICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX0VOVU1fVkFMVUUoYW5pbWFscywgQCJhbmltYWxzIik7
CisgICAgc2VsZi5hbmltYWxzID0gYW5pbWFscy52YWx1ZSgpOworCisgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiaWQiXSwgQCJpZCIpOworICAgIHNl
bGYuaWRlbnRpZmllciA9IFtwYXlsb2FkW0AiaWQiXSBpbnRlZ2VyVmFsdWVdOworCisgICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AidHJlZSJdLCBAInRy
ZWUiKTsKKyAgICBzZWxmLnRyZWUgPSBbW1Rlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3Qx
IGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZFtAInRyZWUiXV07CisKKyAgICByZXR1cm4g
c2VsZjsKK30KKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90
b2NvbEpTT05PYmplY3QgKilvYmplY3QKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRX
aXRoSlNPTk9iamVjdDpbb2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0KCldKSkKKyAgICAgICAgcmV0
dXJuIG5pbDsKKworICAgIHJldHVybiBzZWxmOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nIG51bWJlcjooaW50KW51bWJlciBhbmltYWxzOihU
ZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFscylhbmltYWxzIGlkZW50aWZpZXI6KGludClpZGVu
dGlmaWVyIHRyZWU6KFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxICopdHJlZQorewor
ICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisg
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShzdHJpbmcsIEAic3RyaW5n
Iik7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWSh0cmVlLCBAInRy
ZWUiKTsKKworICAgIHNlbGYuc3RyaW5nID0gc3RyaW5nOworICAgIHNlbGYubnVtYmVyID0gbnVt
YmVyOworICAgIHNlbGYuYW5pbWFscyA9IGFuaW1hbHM7CisgICAgc2VsZi5pZGVudGlmaWVyID0g
aWRlbnRpZmllcjsKKyAgICBzZWxmLnRyZWUgPSB0cmVlOworCisgICAgcmV0dXJuIHNlbGY7Cit9
CisKKy0gKHZvaWQpc2V0U3RyaW5nOihOU1N0cmluZyAqKXN0cmluZworeworICAgIFtzdXBlciBz
ZXRTdHJpbmc6c3RyaW5nIGZvcktleTpAInN0cmluZyJdOworfQorCistIChOU1N0cmluZyAqKXN0
cmluZworeworICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAic3RyaW5nIl07Cit9CisK
Ky0gKHZvaWQpc2V0TnVtYmVyOihpbnQpbnVtYmVyCit7CisgICAgW3N1cGVyIHNldEludGVnZXI6
bnVtYmVyIGZvcktleTpAIm51bWJlciJdOworfQorCistIChpbnQpbnVtYmVyCit7CisgICAgcmV0
dXJuIFtzdXBlciBpbnRlZ2VyRm9yS2V5OkAibnVtYmVyIl07Cit9CisKKy0gKHZvaWQpc2V0QW5p
bWFsczooVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHMpYW5pbWFscworeworICAgIFtzdXBl
ciBzZXRTdHJpbmc6dG9Qcm90b2NvbFN0cmluZyhhbmltYWxzKSBmb3JLZXk6QCJhbmltYWxzIl07
Cit9CisKKy0gKFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzKWFuaW1hbHMKK3sKKyAgICBy
ZXR1cm4gZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzPihb
c3VwZXIgc3RyaW5nRm9yS2V5OkAiYW5pbWFscyJdKS52YWx1ZSgpOworfQorCistICh2b2lkKXNl
dElkZW50aWZpZXI6KGludClpZGVudGlmaWVyCit7CisgICAgW3N1cGVyIHNldEludGVnZXI6aWRl
bnRpZmllciBmb3JLZXk6QCJpZCJdOworfQorCistIChpbnQpaWRlbnRpZmllcgoreworICAgIHJl
dHVybiBbc3VwZXIgaW50ZWdlckZvcktleTpAImlkIl07Cit9CisKKy0gKHZvaWQpc2V0VHJlZToo
VGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgKil0cmVlCit7CisgICAgW3N1cGVyIHNl
dE9iamVjdDp0cmVlIGZvcktleTpAInRyZWUiXTsKK30KKworLSAoVGVzdFByb3RvY29sVGVzdFJl
Y3Vyc2l2ZU9iamVjdDEgKil0cmVlCit7CisgICAgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvYmpl
Y3QgPSBbc3VwZXIgb2JqZWN0Rm9yS2V5OkAidHJlZSJdOworICAgIGlmICghb2JqZWN0KQorICAg
ICAgICByZXR1cm4gbmlsOworICAgIHJldHVybiBbW1Rlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVP
YmplY3QxIGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6W1tzdXBlciBvYmplY3RGb3JLZXk6QCJ0
cmVlIl0gdG9KU09OT2JqZWN0XS5nZXQoKV07Cit9CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9u
IFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxCisKKy0gKGluc3RhbmNldHlwZSlpbml0
V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxv
YWQKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5p
bDsKKworICAgIHNlbGYub2JqID0gW1tUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MiBh
bGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRbQCJvYmoiXV07CisKKyAgICByZXR1cm4gc2Vs
ZjsKK30KKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2Nv
bEpTT05PYmplY3QgKilvYmplY3QKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRo
SlNPTk9iamVjdDpbb2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0KCldKSkKKyAgICAgICAgcmV0dXJu
IG5pbDsKKworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXNldE9iajooVGVzdFByb3Rv
Y29sVGVzdFJlY3Vyc2l2ZU9iamVjdDIgKilvYmoKK3sKKyAgICBbc3VwZXIgc2V0T2JqZWN0Om9i
aiBmb3JLZXk6QCJvYmoiXTsKK30KKworLSAoVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVj
dDIgKilvYmoKK3sKKyAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9iamVjdCA9IFtzdXBlciBv
YmplY3RGb3JLZXk6QCJvYmoiXTsKKyAgICBpZiAoIW9iamVjdCkKKyAgICAgICAgcmV0dXJuIG5p
bDsKKyAgICByZXR1cm4gW1tUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MiBhbGxvY10g
aW5pdFdpdGhKU09OT2JqZWN0Oltbc3VwZXIgb2JqZWN0Rm9yS2V5OkAib2JqIl0gdG9KU09OT2Jq
ZWN0XS5nZXQoKV07Cit9CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFRl
c3RSZWN1cnNpdmVPYmplY3QyCisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5v
bm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQKK3sKKyAgICBpZiAo
IShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHNlbGYu
b2JqID0gW1tUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSBhbGxvY10gaW5pdFdpdGhQ
YXlsb2FkOnBheWxvYWRbQCJvYmoiXV07CisKKyAgICByZXR1cm4gc2VsZjsKK30KKy0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilv
YmplY3QKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoSlNPTk9iamVjdDpbb2Jq
ZWN0IHRvSlNPTk9iamVjdF0uZ2V0KCldKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHJl
dHVybiBzZWxmOworfQorCistICh2b2lkKXNldE9iajooVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2
ZU9iamVjdDEgKilvYmoKK3sKKyAgICBbc3VwZXIgc2V0T2JqZWN0Om9iaiBmb3JLZXk6QCJvYmoi
XTsKK30KKworLSAoVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgKilvYmoKK3sKKyAg
ICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9iamVjdCA9IFtzdXBlciBvYmplY3RGb3JLZXk6QCJv
YmoiXTsKKyAgICBpZiAoIW9iamVjdCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICByZXR1cm4g
W1tUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSBhbGxvY10gaW5pdFdpdGhKU09OT2Jq
ZWN0Oltbc3VwZXIgb2JqZWN0Rm9yS2V5OkAib2JqIl0gdG9KU09OT2JqZWN0XS5nZXQoKV07Cit9
CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLXdpdGgtb3Blbi1w
YXJhbWV0ZXJzLmpzb24tcmVzdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwLi5iYWNiNjU2NWE4MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLXdpdGgtb3Blbi1wYXJhbWV0
ZXJzLmpzb24tcmVzdWx0CkBAIC0wLDAgKzEsMTEyOSBAQAorIyMjIEJlZ2luIEZpbGU6IEluc3Bl
Y3RvckJhY2tlbmRDb21tYW5kcy5qcworLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMu
anMKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRl
cnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJh
Z21hIG9uY2UKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQor
CisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitj
bGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdm9pZCBzZXRC
YWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikg
eyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQorICAgIEJhY2tl
bmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2Vu
ZERpc3BhdGNoZXIuZ2V0KCk7IH0KK3ByaXZhdGU6CisgICAgUmVmUHRyPEJhY2tlbmREaXNwYXRj
aGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOworfTsKKworCisKKworfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKKyMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMj
IyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5n
OworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNr
ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVy
cy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXdpdGgtb3Blbi1w
YXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMu
aCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+
CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95
ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2Vu
ZERpc3BhdGNoZXJzLmgiCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKwor
IyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CisKK2NsYXNzIEZyb250ZW5kUm91dGVyOworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
KyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmls
ZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKwor
IyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9u
cy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK25hbWVzcGFjZSBQcm90b2NvbCB7
CisKKworCisvLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KK25hbWVzcGFjZSBUZXN0IHsKK2NsYXNz
IE5vT3BlblBhcmFtZXRlcnM7CitjbGFzcyBPcGVuUGFyYW1ldGVyczsKK30gLy8gVGVzdAorLy8g
RW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgorCisKKworCituYW1lc3BhY2UgVGVzdCB7Citj
bGFzcyBOb09wZW5QYXJhbWV0ZXJzIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgeworcHVibGlj
OgorICAgIGVudW0geworICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCisgICAgICAgIE9uZVNldCA9
IDEgPDwgMCwKKyAgICAgICAgVHdvU2V0ID0gMSA8PCAxLAorICAgICAgICBBbGxGaWVsZHNTZXQg
PSAoT25lU2V0IHwgVHdvU2V0KQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+Cisg
ICAgY2xhc3MgQnVpbGRlciB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPEpTT046Ok9i
amVjdD4gbV9yZXN1bHQ7CisKKyAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RB
VEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICpy
ZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOworICAgICAgICB9
CisKKyAgICAgICAgQnVpbGRlcihSZWY8LypOb09wZW5QYXJhbWV0ZXJzKi9KU09OOjpPYmplY3Q+
JiYgb2JqZWN0KQorICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBi
dWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAgICAgICB9CisgICAgICAgIGZy
aWVuZCBjbGFzcyBOb09wZW5QYXJhbWV0ZXJzOworICAgIHB1YmxpYzoKKworICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgT25lU2V0PiYgc2V0T25lKGRvdWJsZSB2YWx1ZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE9uZVNldCksIHByb3BlcnR5X29uZV9h
bHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0RG91YmxlKCJvbmUiX3MsIHZh
bHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8T25lU2V0PigpOworICAgICAgICB9
CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFR3b1NldD4mIHNldFR3byhkb3VibGUgdmFsdWUp
CisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUd29TZXQp
LCBwcm9wZXJ0eV90d29fYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldERv
dWJsZSgidHdvIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFR3b1Nl
dD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIFJlZjxOb09wZW5QYXJhbWV0ZXJzPiByZWxlYXNl
KCkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmll
bGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KHNpemVvZihOb09wZW5QYXJhbWV0ZXJzKSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0KSwgY2Fubm90
X2Nhc3QpOworCisgICAgICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uUmVzdWx0ID0gbV9y
ZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gV1RGTW92
ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8Tm9PcGVuUGFyYW1ldGVycz4qPigmanNvblJlc3VsdCkp
OworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAv
KgorICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKKyAgICAgKiBSZWY8Tm9PcGVuUGFyYW1l
dGVycz4gcmVzdWx0ID0gTm9PcGVuUGFyYW1ldGVyczo6Y3JlYXRlKCkKKyAgICAgKiAgICAgLnNl
dE9uZSguLi4pCisgICAgICogICAgIC5zZXRUd28oLi4uKQorICAgICAqICAgICAucmVsZWFzZSgp
OworICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCkpOworICAgIH0KK307CisKK2NsYXNzIE9wZW5QYXJhbWV0ZXJzIDogcHVibGljIEpTT046
Ok9iamVjdCB7CitwdWJsaWM6CisgICAgZW51bSB7CisgICAgICAgIE5vRmllbGRzU2V0ID0gMCwK
KyAgICAgICAgQWxwaGFTZXQgPSAxIDw8IDAsCisgICAgICAgIEJldGFTZXQgPSAxIDw8IDEsCisg
ICAgICAgIEFsbEZpZWxkc1NldCA9IChBbHBoYVNldCB8IEJldGFTZXQpCisgICAgfTsKKworICAg
IHRlbXBsYXRlPGludCBTVEFURT4KKyAgICBjbGFzcyBCdWlsZGVyIHsKKyAgICBwcml2YXRlOgor
ICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBtX3Jlc3VsdDsKKworICAgICAgICB0ZW1wbGF0
ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNU
RVA+Kj4odGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyKFJlZjwvKk9wZW5QYXJh
bWV0ZXJzKi9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQorICAgICAgICAgICAgOiBtX3Jlc3VsdChX
VEZNb3ZlKG9iamVjdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNU
QVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwor
ICAgICAgICB9CisgICAgICAgIGZyaWVuZCBjbGFzcyBPcGVuUGFyYW1ldGVyczsKKyAgICBwdWJs
aWM6CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IEFscGhhU2V0PiYgc2V0QWxwaGEoZG91Ymxl
IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
QWxwaGFTZXQpLCBwcm9wZXJ0eV9hbHBoYV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0RG91YmxlKCJhbHBoYSJfcywgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNh
c3RTdGF0ZTxBbHBoYVNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBCZXRhU2V0PiYgc2V0QmV0YShkb3VibGUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBCZXRhU2V0KSwgcHJvcGVydHlfYmV0YV9hbHJlYWR5
X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0RG91YmxlKCJiZXRhIl9zLCB2YWx1ZSk7
CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEJldGFTZXQ+KCk7CisgICAgICAgIH0KKwor
ICAgICAgICBSZWY8T3BlblBhcmFtZXRlcnM+IHJlbGVhc2UoKQorICAgICAgICB7CisgICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3Rf
cmVhZHkpOworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKE9wZW5QYXJhbWV0ZXJz
KSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0KSwgY2Fubm90X2Nhc3QpOworCisgICAgICAgICAgICBS
ZWY8SlNPTjo6T2JqZWN0PiBqc29uUmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsK
KyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8
T3BlblBhcmFtZXRlcnM+Kj4oJmpzb25SZXN1bHQpKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyoKKyAgICAgKiBTeW50aGV0aWMgY29uc3Ry
dWN0b3I6CisgICAgICogUmVmPE9wZW5QYXJhbWV0ZXJzPiByZXN1bHQgPSBPcGVuUGFyYW1ldGVy
czo6Y3JlYXRlKCkKKyAgICAgKiAgICAgLnNldEFscGhhKC4uLikKKyAgICAgKiAgICAgLnNldEJl
dGEoLi4uKQorICAgICAqICAgICAucmVsZWFzZSgpOworICAgICAqLworICAgIHN0YXRpYyBCdWls
ZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8
Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOworICAgIH0KKworICAgIC8vIFBy
b3BlcnR5IG5hbWVzIGZvciB0eXBlIGdlbmVyYXRlZCBhcyBvcGVuLgorICAgIE5vbmUgc3RhdGlj
IGNvbnN0IGNoYXIqIEFscGhhOworfTsKKworfSAvLyBUZXN0CisKKworCit9IC8vIG5hbWVzcGFj
ZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sT2JqZWN0cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3Rz
LmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtd2l0aC1vcGVuLXBh
cmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgor
CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworY29u
c3QgY2hhciogSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6T3BlblBhcmFtZXRlcnM6OkFscGhh
ID0gImFscGhhIjsKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbmNs
dWRlIDx3dGYvUmV0YWluUHRyLmg+CisKKworCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNr
ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERp
c3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRo
LW9wZW4tcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2Vu
ZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9KU09O
VmFsdWVzLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0K
KworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxXZWJJ
bnNwZWN0b3IvVGVzdFByb3RvY29sLmg+CisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJk
ZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmpl
Y3QKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAor
CisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0
UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFs
LmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+CisjaW1wb3J0IDxK
YXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgor
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+CisK
K3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9j
b2xDb25maWd1cmF0aW9uCit7CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBf
Y29udHJvbGxlcjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVn
bWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCit7CisgICAgc2VsZiA9IFtz
dXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgQVNT
RVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKKyAgICByZXR1
cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgW3N1cGVyIGRlYWxsb2NdOwor
fQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1t
CisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5q
c29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5oIgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNl
IEluc3BlY3RvcjsKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hl
cnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPEZvdW5kYXRpb24v
Rm91bmRhdGlvbi5oPgorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2Jq
ZWN0Lmg+CisKKworQGNsYXNzIFRlc3RQcm90b2NvbFRlc3ROb09wZW5QYXJhbWV0ZXJzOworQGNs
YXNzIFRlc3RQcm90b2NvbFRlc3RPcGVuUGFyYW1ldGVyczsKKworCisKKworX19hdHRyaWJ1dGVf
XygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbFRlc3RO
b09wZW5QYXJhbWV0ZXJzIDogUldJUHJvdG9jb2xKU09OT2JqZWN0CistIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsK
Ky0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05P
YmplY3QgKilqc29uT2JqZWN0OworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoT25lOihkb3VibGUp
b25lIHR3bzooZG91YmxlKXR3bzsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWlj
LCBhc3NpZ24pIGRvdWJsZSBvbmU7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21p
YywgYXNzaWduKSBkb3VibGUgdHdvOworQGVuZAorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5
ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sVGVzdE9wZW5QYXJhbWV0ZXJz
IDogUldJUHJvdG9jb2xKU09OT2JqZWN0CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2Fk
OihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKKy0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2Jq
ZWN0OworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQWxwaGE6KGRvdWJsZSlhbHBoYSBiZXRhOihk
b3VibGUpYmV0YTsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24p
IGRvdWJsZSBhbHBoYTsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3Np
Z24pIGRvdWJsZSBiZXRhOworQGVuZAorCisKKworCisKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9y
L1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgorCisjIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5o
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRoLW9wZW4tcGFyYW1l
dGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNp
bXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFBy
aXZhdGUuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29u
dHJvbGxlci5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKworCisKKworIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5
cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgPFdlYklu
c3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KKworbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KK09wdGlvbmFsPE9iakNF
bnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOworCisKKwor
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtd2l0aC1vcGVu
LXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKworI2ltcG9ydCAi
VGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCisjaW1w
b3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorCit1c2lu
ZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucyAoVGVzdERvbWFpbikKKworKyAodm9pZClfcGFyc2VOb09wZW5QYXJhbWV0ZXJzOihU
ZXN0UHJvdG9jb2xUZXN0Tm9PcGVuUGFyYW1ldGVycyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDoo
aWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNlT3BlblBhcmFtZXRlcnM6KFRlc3RQcm90b2NvbFRl
c3RPcGVuUGFyYW1ldGVycyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKwor
QGVuZAorCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChUZXN0
RG9tYWluKQorCisrICh2b2lkKV9wYXJzZU5vT3BlblBhcmFtZXRlcnM6KFRlc3RQcm90b2NvbFRl
c3ROb09wZW5QYXJhbWV0ZXJzICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7
CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5
IGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xUZXN0Tm9PcGVuUGFyYW1l
dGVycyBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOworfQorCisrICh2b2lkKV9wYXJz
ZU9wZW5QYXJhbWV0ZXJzOihUZXN0UHJvdG9jb2xUZXN0T3BlblBhcmFtZXRlcnMgKiopb3V0VmFs
dWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JB
RF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSBb
W1Rlc3RQcm90b2NvbFRlc3RPcGVuUGFyYW1ldGVycyBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBh
eWxvYWRdOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5q
c29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFBy
aXZhdGUuaD4KKyNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW1wb3J0IDx3dGYvSlNPTlZh
bHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisKK0BpbXBsZW1lbnRhdGlv
biBUZXN0UHJvdG9jb2xUZXN0Tm9PcGVuUGFyYW1ldGVycworCistIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXls
b2FkCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBu
aWw7CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRb
QCJvbmUiXSwgQCJvbmUiKTsKKyAgICBzZWxmLm9uZSA9IFtwYXlsb2FkW0Aib25lIl0gZG91Ymxl
VmFsdWVdOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXls
b2FkW0AidHdvIl0sIEAidHdvIik7CisgICAgc2VsZi50d28gPSBbcGF5bG9hZFtAInR3byJdIGRv
dWJsZVZhbHVlXTsKKworICAgIHJldHVybiBzZWxmOworfQorLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9iamVjdAoreworICAg
IGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmplY3QgdG9KU09OT2Jq
ZWN0XS5nZXQoKV0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgcmV0dXJuIHNlbGY7Cit9
CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aE9uZTooZG91YmxlKW9uZSB0d286KGRvdWJsZSl0
d28KK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5p
bDsKKworICAgIHNlbGYub25lID0gb25lOworICAgIHNlbGYudHdvID0gdHdvOworCisgICAgcmV0
dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpc2V0T25lOihkb3VibGUpb25lCit7CisgICAgW3N1cGVy
IHNldERvdWJsZTpvbmUgZm9yS2V5OkAib25lIl07Cit9CisKKy0gKGRvdWJsZSlvbmUKK3sKKyAg
ICByZXR1cm4gW3N1cGVyIGRvdWJsZUZvcktleTpAIm9uZSJdOworfQorCistICh2b2lkKXNldFR3
bzooZG91YmxlKXR3bworeworICAgIFtzdXBlciBzZXREb3VibGU6dHdvIGZvcktleTpAInR3byJd
OworfQorCistIChkb3VibGUpdHdvCit7CisgICAgcmV0dXJuIFtzdXBlciBkb3VibGVGb3JLZXk6
QCJ0d28iXTsKK30KKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVGVzdE9w
ZW5QYXJhbWV0ZXJzCisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwg
TlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQKK3sKKyAgICBpZiAoIShzZWxm
ID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImFscGhhIl0sIEAiYWxwaGEiKTsK
KyAgICBzZWxmLmFscGhhID0gW3BheWxvYWRbQCJhbHBoYSJdIGRvdWJsZVZhbHVlXTsKKworICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImJldGEiXSwg
QCJiZXRhIik7CisgICAgc2VsZi5iZXRhID0gW3BheWxvYWRbQCJiZXRhIl0gZG91YmxlVmFsdWVd
OworCisgICAgcmV0dXJuIHNlbGY7Cit9CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2Nv
bE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopb2JqZWN0Cit7CisgICAgaWYgKCEoc2Vs
ZiA9IFtzdXBlciBpbml0V2l0aEpTT05PYmplY3Q6W29iamVjdCB0b0pTT05PYmplY3RdLmdldCgp
XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoQWxwaGE6KGRvdWJsZSlhbHBoYSBiZXRhOihkb3VibGUpYmV0YQor
eworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOwor
CisgICAgc2VsZi5hbHBoYSA9IGFscGhhOworICAgIHNlbGYuYmV0YSA9IGJldGE7CisKKyAgICBy
ZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClzZXRBbHBoYTooZG91YmxlKWFscGhhCit7CisgICAg
W3N1cGVyIHNldERvdWJsZTphbHBoYSBmb3JLZXk6QCJhbHBoYSJdOworfQorCistIChkb3VibGUp
YWxwaGEKK3sKKyAgICByZXR1cm4gW3N1cGVyIGRvdWJsZUZvcktleTpAImFscGhhIl07Cit9CisK
Ky0gKHZvaWQpc2V0QmV0YTooZG91YmxlKWJldGEKK3sKKyAgICBbc3VwZXIgc2V0RG91YmxlOmJl
dGEgZm9yS2V5OkAiYmV0YSJdOworfQorCistIChkb3VibGUpYmV0YQoreworICAgIHJldHVybiBb
c3VwZXIgZG91YmxlRm9yS2V5OkAiYmV0YSJdOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3ZlcnNpb24uanNvbi1yZXN1bHQgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdmVy
c2lvbi5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u
NjVmNGUyZTY2NTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdmVyc2lvbi5qc29uLXJlc3VsdApAQCAtMCww
ICsxLDg0NSBAQAorIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHZlcnNpb24uanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisvLyBWZXJzaW9uRG9tYWluCitJbnNw
ZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJWZXJzaW9uRG9tYWluIiwgbnVsbCk7CitJbnNw
ZWN0b3JCYWNrZW5kLnJlZ2lzdGVyVmVyc2lvbigiVmVyc2lvbkRvbWFpbiIsIDQyKTsKK0luc3Bl
Y3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIlZlcnNpb25Eb21haW4iLCBudWxsKTsKKyMjIyBF
bmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCisKKyMjIyBCZWdpbiBGaWxlOiBU
ZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorCituYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKKworY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVibGlj
OgorICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVy
PiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hl
cik7IH0KKyAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7
IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Citwcml2YXRlOgorICAgIFJlZlB0
cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKK307CisKKworCisKK30g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCisjIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlz
cGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lvbi5qc29uCisvLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsK
KworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0QmFja2Vu
ZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMu
Y3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lvbi5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0Zi9KU09O
VmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCisjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgorI2Vu
ZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCituYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5k
IEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0
RnJvbnRlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
dmVyc2lvbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1
ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisK
K25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBGcm9udGVuZFJvdXRlcjsKKworfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJz
LmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHZlcnNpb24uanNvbgorLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisK
KyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSB2ZXJzaW9uLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQ
cm90b2NvbFR5cGVzLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNl
IEluc3BlY3RvciB7CisKKworCituYW1lc3BhY2UgUHJvdG9jb2wgeworCisvLyBWZXJzaW9ucy4K
K25hbWVzcGFjZSBWZXJzaW9uRG9tYWluIHsKK3N0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgVkVS
U0lPTiA9IDQyOworfSAvLyBWZXJzaW9uRG9tYWluCisvLyBFbmQgb2YgdmVyc2lvbnMuCisKKwor
CisKKworCisKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorCisjIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSB2ZXJzaW9uLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVj
dHMuaCIKKworI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK25hbWVzcGFjZSBQcm90b2NvbCB7
CisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorCisjIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVy
bmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKwor
CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgor
CisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0
UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbElu
dGVybmFsLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW5j
bHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK30gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmRE
aXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
bi5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lvbi5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPFdlYkluc3Bl
Y3Rvci9UZXN0UHJvdG9jb2wuaD4KKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1
bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAor
QGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisKKyMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lvbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24u
aCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbXBvcnQgIlRlc3RQcm90
b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJu
YXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRh
YmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3Bl
Y3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KK3sKKyAg
ICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworfQorCistIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRy
b2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICgh
c2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAg
X2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lk
KWRlYWxsb2MKK3sKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKK0BlbmQKKworCisjIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKworIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSB2ZXJzaW9uLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgor
Cit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sRXZlbnREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9G
b3VuZGF0aW9uLmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmpl
Y3QuaD4KKworCisKKworCisKKworCisKKworCisKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JX
SVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgorCisjIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lvbi5qc29uCisvLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5o
IgorI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKKyNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8
d3RmL0pTT05WYWx1ZXMuaD4KKworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRl
cm5hbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHZlcnNpb24uanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wu
aCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4K
KworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlw
ZT4KK09wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpOworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
dmVyc2lvbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
KyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorCisjaW1wb3J0ICJUZXN0
UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKKyNpbXBvcnQg
PFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisKK3VzaW5nIG5h
bWVzcGFjZSBJbnNwZWN0b3I7CisKKworCisKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMu
bW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgi
CisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgor
I2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisK
K3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2ZhaWwtb24tY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1k
ZWJ1Z2dhYmxlVHlwZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2ZhaWwtb24tY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1
Z2dhYmxlVHlwZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5k
NmRmOWU0YmQ5YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1k
b21haW4tZGVidWdnYWJsZVR5cGUuanNvbgpAQCAtMCwwICsxLDkgQEAKK1sKK3sKKyAgICAiZG9t
YWluIjogIkRvbWFpbiIsCisgICAgImRlYnVnZ2FibGVUeXBlcyI6IFsiamF2YXNjcmlwdCJdLAor
ICAgICJ0YXJnZXRUeXBlcyI6IFsid29ya2VyIl0sCisgICAgImNvbW1hbmRzIjogW3sibmFtZSI6
ICJDb21tYW5kIn1dLAorICAgICJldmVudHMiOiBbeyJuYW1lIjogIkV2ZW50In1dCit9CitdCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZmFpbC1vbi1jb21tYW5kLXRhcmdldFR5cGVzLXR5cGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlwZXMt
dHlwZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42NDA1OWY4
NGJjZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlwZXMtdHlwZS5qc29uCkBAIC0w
LDAgKzEsOSBAQAoreworICAgICJkb21haW4iOiAiRG9tYWluIiwKKyAgICAiY29tbWFuZHMiOiBb
CisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIlBhZ2VPbmx5IiwKKyAgICAgICAgICAg
ICJ0YXJnZXRUeXBlcyI6ICJwYWdlZSIKKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWNv
bW1hbmQtdGFyZ2V0VHlwZXMtdmFsdWUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlwZXMtdmFsdWUuanNv
bgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNTAyMDQ0NzJlYzgKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZmFpbC1vbi1jb21tYW5kLXRhcmdldFR5cGVzLXZhbHVlLmpzb24KQEAgLTAsMCArMSw5
IEBACit7CisgICAgImRvbWFpbiI6ICJEb21haW4iLAorICAgICJjb21tYW5kcyI6IFsKKyAgICAg
ICAgeworICAgICAgICAgICAgIm5hbWUiOiAiUGFnZU9ubHkiLAorICAgICAgICAgICAgInRhcmdl
dFR5cGVzIjogWyJwYWdlZSJdCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kb21haW4t
ZGVidWdnYWJsZVR5cGVzLXR5cGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMtdHlwZS5qc29u
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45NzQ4ZjQyMzQ3MwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9mYWlsLW9uLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMtdHlwZS5qc29uCkBAIC0wLDAgKzEs
OSBAQAoreworICAgICJkb21haW4iOiAiV2ViT25seSIsCisgICAgImRlYnVnZ2FibGVUeXBlcyI6
ICJ3ZWJiIiwKKyAgICAiY29tbWFuZHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1l
IjogImVuYWJsZSIKKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWRvbWFpbi1kZWJ1Z2dh
YmxlVHlwZXMtdmFsdWUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9mYWlsLW9uLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMtdmFsdWUuanNvbgpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYjI1MmRkYmQ4M2QKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZmFpbC1vbi1kb21haW4tZGVidWdnYWJsZVR5cGVzLXZhbHVlLmpzb24KQEAgLTAsMCArMSw5IEBA
Cit7CisgICAgImRvbWFpbiI6ICJXZWJPbmx5IiwKKyAgICAiZGVidWdnYWJsZVR5cGVzIjogWyJ3
ZWJiIl0sCisgICAgImNvbW1hbmRzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6
ICJlbmFibGUiCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlw
ZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWRvbWFpbi10YXJnZXRUeXBlLW1h
dGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwLi43YWEwMjgwNDY1NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWRvbWFpbi10YXJn
ZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCkBAIC0wLDAgKzEsOCBA
QAorWworeworICAgICJkb21haW4iOiAiRG9tYWluIiwKKyAgICAiZGVidWdnYWJsZVR5cGVzIjog
WyJqYXZhc2NyaXB0Il0sCisgICAgImNvbW1hbmRzIjogW3sibmFtZSI6ICJDb21tYW5kIiwgInRh
cmdldFR5cGVzIjogWyJ3b3JrZXIiXX1dLAorICAgICJldmVudHMiOiBbeyJuYW1lIjogIkV2ZW50
In1dCit9CitdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZXMtdHlwZS5qc29uIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZG9tYWluLXRh
cmdldFR5cGVzLXR5cGUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MC4uZDgyMjI2NzQxNDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZXMtdHlwZS5q
c29uCkBAIC0wLDAgKzEsOSBAQAoreworICAgICJkb21haW4iOiAiUGFnZU9ubHkiLAorICAgICJ0
YXJnZXRUeXBlcyI6ICJwYWdlZSIsCisgICAgImNvbW1hbmRzIjogWworICAgICAgICB7CisgICAg
ICAgICAgICAibmFtZSI6ICJlbmFibGUiCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1k
b21haW4tdGFyZ2V0VHlwZXMtdmFsdWUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWRvbWFpbi10YXJnZXRUeXBlcy12YWx1ZS5qc29u
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5lN2IxMGQ3ZjE1NAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9mYWlsLW9uLWRvbWFpbi10YXJnZXRUeXBlcy12YWx1ZS5qc29uCkBAIC0wLDAgKzEsOSBA
QAoreworICAgICJkb21haW4iOiAiUGFnZU9ubHkiLAorICAgICJ0YXJnZXRUeXBlcyI6IFsicGFn
ZWUiXSwKKyAgICAiY29tbWFuZHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjog
ImVuYWJsZSIKKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWR1cGxpY2F0ZS1jb21tYW5k
LWNhbGwtcGFyYW1ldGVyLW5hbWVzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1jYWxsLXBhcmFtZXRl
ci1uYW1lcy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5iYWI3
NmNhNjI3OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWR1cGxpY2F0ZS1jb21tYW5kLWNhbGwtcGFyYW1ldGVy
LW5hbWVzLmpzb24KQEAgLTAsMCArMSwxNiBAQAoreworICAgICJkb21haW4iOiAiT3ZlcmxheSIs
CisgICAgImNvbW1hbmRzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJwcm9j
ZXNzUG9pbnRzIiwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAicG9pbnQiLCAidHlwZSI6ICJudW1iZXIiIH0sCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJwb2ludCIsICJ0eXBlIjogIm51bWJlciIgfQorICAgICAgICAgICAgXSwKKyAg
ICAgICAgICAgICJyZXR1cm5zIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicmVzdWx0
MSIsICJ0eXBlIjogInN0cmluZyIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInJlc3Vs
dDIiLCAidHlwZSI6ICJzdHJpbmciIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0K
K30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9mYWlsLW9uLWR1cGxpY2F0ZS1jb21tYW5kLXJldHVybi1wYXJhbWV0ZXItbmFtZXMuanNv
biBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9u
LWR1cGxpY2F0ZS1jb21tYW5kLXJldHVybi1wYXJhbWV0ZXItbmFtZXMuanNvbgpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYzhiYjE1YzA0YjYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1v
bi1kdXBsaWNhdGUtY29tbWFuZC1yZXR1cm4tcGFyYW1ldGVyLW5hbWVzLmpzb24KQEAgLTAsMCAr
MSwxNiBAQAoreworICAgICJkb21haW4iOiAiT3ZlcmxheSIsCisgICAgImNvbW1hbmRzIjogWwor
ICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJwcm9jZXNzUG9pbnRzIiwKKyAgICAgICAg
ICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicG9pbnQxIiwg
InR5cGUiOiAibnVtYmVyIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicG9pbnQyIiwg
InR5cGUiOiAibnVtYmVyIiB9CisgICAgICAgICAgICBdLAorICAgICAgICAgICAgInJldHVybnMi
OiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJyZXN1bHQiLCAidHlwZSI6ICJzdHJpbmci
IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJyZXN1bHQiLCAidHlwZSI6ICJzdHJpbmci
IH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWR1cGxpY2F0
ZS1ldmVudC1wYXJhbWV0ZXItbmFtZXMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWR1cGxpY2F0ZS1ldmVudC1wYXJhbWV0ZXItbmFt
ZXMuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZDNkM2IzY2M2
NDIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZmFpbC1vbi1kdXBsaWNhdGUtZXZlbnQtcGFyYW1ldGVyLW5hbWVzLmpzb24K
QEAgLTAsMCArMSwxMiBAQAoreworICAgICJkb21haW4iOiAiT3ZlcmxheSIsCisgICAgImV2ZW50
cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAicHJvY2Vzc2VkUG9pbnRzIiwK
KyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
cG9pbnQiLCAidHlwZSI6ICJudW1iZXIiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJw
b2ludCIsICJ0eXBlIjogIm51bWJlciIgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAg
XQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2ZhaWwtb24tZHVwbGljYXRlLXR5cGUtZGVjbGFyYXRpb25zLmpzb24gYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kdXBsaWNhdGUt
dHlwZS1kZWNsYXJhdGlvbnMuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMC4uNzAyZmM2YTMyNzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1kZWNsYXJh
dGlvbnMuanNvbgpAQCAtMCwwICsxLDE1IEBACit7CisgICAgImRvbWFpbiI6ICJSdW50aW1lIiwK
KyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJSZW1vdGVPYmpl
Y3RJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgImRlc2Ny
aXB0aW9uIjogIlVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4iCisgICAgICAgIH0sCisgICAgICAg
IHsKKyAgICAgICAgICAgICJpZCI6ICJSZW1vdGVPYmplY3RJZCIsCisgICAgICAgICAgICAidHlw
ZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBvYmplY3Qg
aWRlbnRpZmllci4iCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kdXBsaWNhdGUtdHlw
ZS1tZW1iZXItbmFtZXMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLW1lbWJlci1uYW1lcy5qc29uCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hZWJhY2VlOGIyMwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9m
YWlsLW9uLWR1cGxpY2F0ZS10eXBlLW1lbWJlci1uYW1lcy5qc29uCkBAIC0wLDAgKzEsMTUgQEAK
K1sKK3sKKyAgICAiZG9tYWluIjogIk92ZXJsYXlUeXBlcyIsCisgICAgInR5cGVzIjogWworICAg
ICAgICB7CisgICAgICAgICAgICAiaWQiOiAiUG9pbnQiLAorICAgICAgICAgICAgInR5cGUiOiAi
b2JqZWN0IiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAieCIsICJ0eXBlIjogImludGVnZXIiIH0sCisgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJ4IiwgInR5cGUiOiAiaW50ZWdlciIgfQorICAgICAgICAgICAgXQorICAgICAgICB9Cisg
ICAgXQorfQorXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2ZhaWwtb24tZW51bS13aXRoLW5vLXZhbHVlcy5qc29uIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZW51bS13aXRoLW5v
LXZhbHVlcy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yMzJh
N2MzMjQ5YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWVudW0td2l0aC1uby12YWx1ZXMuanNvbgpAQCAtMCww
ICsxLDEwIEBACit7CisgICAgImRvbWFpbiI6ICJEYXRhYmFzZSIsCisgICAgInR5cGVzIjogWwor
ICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiUHJpbWFyeUNvbG9ycyIsCisgICAgICAgICAg
ICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgImVudW0iOiBbXQorICAgICAgICB9Cisg
ICAgXQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdn
YWJsZVR5cGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVU
eXBlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjkxMzJjZTA4
ODI4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVi
dWdnYWJsZVR5cGUuanNvbgpAQCAtMCwwICsxLDggQEAKK1sKK3sKKyAgICAiZG9tYWluIjogIkRv
bWFpbiIsCisgICAgImRlYnVnZ2FibGVUeXBlcyI6IFsiamF2YXNjcmlwdCJdLAorICAgICJjb21t
YW5kcyI6IFt7Im5hbWUiOiAiQ29tbWFuZCJ9XSwKKyAgICAiZXZlbnRzIjogW3sibmFtZSI6ICJF
dmVudCIsICJ0YXJnZXRUeXBlcyI6IFsid29ya2VyIl19XQorfQorXQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZXZlbnQt
dGFyZ2V0VHlwZXMtdHlwZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlwZXMtdHlwZS5qc29uCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5lNTRlZDFmNWM2YgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWls
LW9uLWV2ZW50LXRhcmdldFR5cGVzLXR5cGUuanNvbgpAQCAtMCwwICsxLDkgQEAKK3sKKyAgICAi
ZG9tYWluIjogIkRvbWFpbiIsCisgICAgImV2ZW50cyI6IFsKKyAgICAgICAgeworICAgICAgICAg
ICAgIm5hbWUiOiAiUGFnZU9ubHkiLAorICAgICAgICAgICAgInRhcmdldFR5cGVzIjogInBhZ2Vl
IgorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlwZXMtdmFsdWUu
anNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWls
LW9uLWV2ZW50LXRhcmdldFR5cGVzLXZhbHVlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAuLjU4ODRiZmQ3YTZiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZXZlbnQtdGFyZ2V0
VHlwZXMtdmFsdWUuanNvbgpAQCAtMCwwICsxLDkgQEAKK3sKKyAgICAiZG9tYWluIjogIkRvbWFp
biIsCisgICAgImV2ZW50cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiUGFn
ZU9ubHkiLAorICAgICAgICAgICAgInRhcmdldFR5cGVzIjogWyJwYWdlZSJdCisgICAgICAgIH0K
KyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcu
anNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWls
LW9uLW51bWJlci10eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29uCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi43MzA4ZGI5OTJkNgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9u
LW51bWJlci10eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29uCkBAIC0wLDAgKzEsMTgg
QEAKK3sKKyAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAg
IHsKKyAgICAgICAgICAgICJpZCI6ICJEYXRhYmFzZUlkIiwKKyAgICAgICAgICAgICJ0eXBlIjog
InN0cmluZyIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIGlkZW50aWZpZXIg
b2YgRGF0YWJhc2Ugb2JqZWN0LiIKKyAgICAgICAgfQorICAgIF0sCisgICAgImV2ZW50cyI6IFsK
KyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1l
dGVycyIsCisgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAgICB7ICJu
YW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogMCB9Cisg
ICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1udW1iZXItdHlwZWQt
b3B0aW9uYWwtdHlwZS1tZW1iZXIuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJl
ci5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hZmVhNTU1ZWM0
ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29u
CkBAIC0wLDAgKzEsMTYgQEAKK1sKK3sKKyAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKKyAgICAi
dHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJFcnJvciIsCisgICAgICAg
ICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkRhdGFi
YXNlIGVycm9yLiIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogIm1lc3NhZ2UiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAi
RXJyb3IgbWVzc2FnZS4iIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2RlIiwgInR5
cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBjb2RlLiIsICJvcHRpb25hbCI6
IDAgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXQorfQorXQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tc3Ry
aW5nLXR5cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1zdHJpbmctdHlwZWQtb3B0aW9u
YWwtcGFyYW1ldGVyLWZsYWcuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMC4uNDAxMmM3OWI2YjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1zdHJpbmctdHlwZWQtb3B0aW9uYWwt
cGFyYW1ldGVyLWZsYWcuanNvbgpAQCAtMCwwICsxLDE4IEBACit7CisgICAgImRvbWFpbiI6ICJE
YXRhYmFzZSIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAi
RGF0YWJhc2VJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAg
ImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBpZGVudGlmaWVyIG9mIERhdGFiYXNlIG9iamVjdC4iCisg
ICAgICAgIH0KKyAgICBdLAorICAgICJldmVudHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAg
ICJuYW1lIjogImRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMiLAorICAgICAgICAgICAgInBh
cmFtZXRlcnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0
eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6ICJ0cnVlIiB9CisgICAgICAgICAgICBdCisgICAg
ICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1i
ZXIuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9m
YWlsLW9uLXN0cmluZy10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29uCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jYTNlZjI4YThmOAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9u
LXN0cmluZy10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29uCkBAIC0wLDAgKzEsMTYgQEAK
K1sKK3sKKyAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAg
IHsKKyAgICAgICAgICAgICJpZCI6ICJFcnJvciIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmpl
Y3QiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkRhdGFiYXNlIGVycm9yLiIsCisgICAg
ICAgICAgICAicHJvcGVydGllcyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm1lc3Nh
Z2UiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgbWVzc2FnZS4iIH0s
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2RlIiwgInR5cGUiOiAiaW50ZWdlciIsICJk
ZXNjcmlwdGlvbiI6ICJFcnJvciBjb2RlLiIsICJvcHRpb25hbCI6ICJmYWxzZSIgfQorICAgICAg
ICAgICAgXQorICAgICAgICB9CisgICAgXQorfQorXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdHlwZS1kZWNsYXJhdGlv
bi11c2luZy10eXBlLXJlZmVyZW5jZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdHlwZS1kZWNsYXJhdGlvbi11c2luZy10eXBlLXJl
ZmVyZW5jZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xOWI3
NTkwY2NjNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXR5cGUtZGVjbGFyYXRpb24tdXNpbmctdHlwZS1yZWZl
cmVuY2UuanNvbgpAQCAtMCwwICsxLDEzIEBACitbCit7CisgICAgImRvbWFpbiI6ICJSdW50aW1l
IiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJSZW1vdGVP
YmplY3RJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgIiRy
ZWYiOiAiU29tZVR5cGUiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBvYmpl
Y3QgaWRlbnRpZmllci4iCisgICAgICAgIH0KKyAgICBdCit9CitdCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi10eXBlLXJl
ZmVyZW5jZS1hcy1wcmltaXRpdmUtdHlwZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdHlwZS1yZWZlcmVuY2UtYXMtcHJpbWl0aXZl
LXR5cGUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOGM4M2Ji
ZmNlNDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZmFpbC1vbi10eXBlLXJlZmVyZW5jZS1hcy1wcmltaXRpdmUtdHlwZS5q
c29uCkBAIC0wLDAgKzEsMTggQEAKK3sKKyAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKKyAgICAi
dHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJEYXRhYmFzZUlkIiwKKyAg
ICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAi
VW5pcXVlIGlkZW50aWZpZXIgb2YgRGF0YWJhc2Ugb2JqZWN0LiIKKyAgICAgICAgfQorICAgIF0s
CisgICAgImV2ZW50cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiZGlkRXhl
Y3V0ZU9wdGlvbmFsUGFyYW1ldGVycyIsCisgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiRGF0YWJhc2VJ
ZCIgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdHlwZS13
aXRoLWxvd2VyY2FzZS1uYW1lLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZmFpbC1vbi10eXBlLXdpdGgtbG93ZXJjYXNlLW5hbWUuanNvbgpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNTMxOTAxZTRhOWEKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZmFpbC1vbi10eXBlLXdpdGgtbG93ZXJjYXNlLW5hbWUuanNvbgpAQCAtMCwwICsxLDEwIEBACit7
CisgICAgImRvbWFpbiI6ICJEYXRhYmFzZSIsCisgICAgInR5cGVzIjogWworICAgICAgICB7Cisg
ICAgICAgICAgICAiaWQiOiAiZGF0YWJhc2VJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJpbnRl
Z2VyIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgaWRlbnRpZmllciBvZiBE
YXRhYmFzZSBvYmplY3QuIgorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdW5rbm93bi10
eXBlLXJlZmVyZW5jZS1pbi10eXBlLWRlY2xhcmF0aW9uLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJl
bmNlLWluLXR5cGUtZGVjbGFyYXRpb24uanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMC4uZDY4ODdhMjc0MTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi11bmtub3duLXR5cGUtcmVm
ZXJlbmNlLWluLXR5cGUtZGVjbGFyYXRpb24uanNvbgpAQCAtMCwwICsxLDEyIEBACitbCit7Cisg
ICAgImRvbWFpbiI6ICJSdW50aW1lIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAg
ICAgICAgICJpZCI6ICJSZW1vdGVPYmplY3RJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJkcmFn
b24iLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBvYmplY3QgaWRlbnRpZmll
ci4iCisgICAgICAgIH0KKyAgICBdCit9CitdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJl
bmNlLWluLXR5cGUtbWVtYmVyLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtbWVt
YmVyLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmI4MTdkYjUw
NDRkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLW1lbWJl
ci5qc29uCkBAIC0wLDAgKzEsMTUgQEAKK1sKK3sKKyAgICAiZG9tYWluIjogIkZhbnRhc3kiLAor
ICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkRyYWdvbkVnZyIs
CisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9u
IjogIkEgZHJhZ29uIGVnZy4iLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJjb2xvciIsICIkcmVmIjogIkNvbG9yIiB9CisgICAgICAgICAg
ICBdCisgICAgICAgIH0KKyAgICBdCit9CitdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1
cmUtZ3VhcmRzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjY3Y2Y4ZTU4MmY2Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVy
YXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCkBAIC0wLDAgKzEsMzYgQEAKK1sK
K3sKKyAgICAiZG9tYWluIjogIk5ldHdvcmsxIiwKKyAgICAiZmVhdHVyZUd1YXJkIjogIlBMQVRG
T1JNKFdFQl9DT01NQU5EUykiLAorICAgICJjb21tYW5kcyI6IFsKKyAgICAgICAgeworICAgICAg
ICAgICAgIm5hbWUiOiAibG9hZFJlc291cmNlIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6
ICJMb2FkcyBhIHJlc291cmNlIGluIHRoZSBjb250ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGluc3Bl
Y3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNoZWNrcy4iCisgICAgICAgIH0KKyAgICBd
Cit9LAoreworICAgICJkb21haW4iOiAiTmV0d29yazIiLAorICAgICJmZWF0dXJlR3VhcmQiOiAi
UExBVEZPUk0oV0VCX1RZUEVTKSIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAg
ICAgICAiaWQiOiAiTmV0d29ya0Vycm9yIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIs
CisgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjog
Im1lc3NhZ2UiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgbWVzc2Fn
ZS4iIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2RlIiwgInR5cGUiOiAiaW50ZWdl
ciIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBjb2RlLiIgfQorICAgICAgICAgICAgXQorICAgICAg
ICB9CisgICAgXQorfSwKK3sKKyAgICAiZG9tYWluIjogIk5ldHdvcmszIiwKKyAgICAiZmVhdHVy
ZUd1YXJkIjogIlBMQVRGT1JNKFdFQl9FVkVOVFMpIiwKKyAgICAiZXZlbnRzIjogWworICAgICAg
ICB7CisgICAgICAgICAgICAibmFtZSI6ICJyZXNvdXJjZUxvYWRlZCIsCisgICAgICAgICAgICAi
ZGVzY3JpcHRpb24iOiAiQSByZXNvdXJjZSB3YXMgbG9hZGVkLiIKKyAgICAgICAgfQorICAgIF0K
K30KK10KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL2NvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdn
YWJsZVR5cGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9nZW5lcmljL2NvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJs
ZVR5cGUuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDI3YWI2NWI5MmEuLjAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9nZW5lcmljL2NvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJs
ZVR5cGUuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotWwotewotICAgICJkb21h
aW4iOiAiRG9tYWluIiwKLSAgICAiZGVidWdnYWJsZVR5cGVzIjogWyJwYWdlIl0sCi0gICAgInRh
cmdldFR5cGVzIjogWyJwYWdlIiwgIndvcmtlciJdLAotICAgICJjb21tYW5kcyI6IFt7Im5hbWUi
OiAiQ29tbWFuZCJ9XSwKLSAgICAiZXZlbnRzIjogW3sibmFtZSI6ICJFdmVudCJ9XQotfQotXQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbiBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2NvbW1hbmRzLXdpdGgt
YXN5bmMtYXR0cmlidXRlLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExMjYy
ZTg4OWZhLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29u
CisrKyAvZGV2L251bGwKQEAgLTEsMTA5ICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIkRhdGFi
YXNlIiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJEYXRh
YmFzZUlkIiwKLSAgICAgICAgICAgICJ0eXBlIjogImludGVnZXIiLAotICAgICAgICAgICAgImRl
c2NyaXB0aW9uIjogIlVuaXF1ZSBpZGVudGlmaWVyIG9mIERhdGFiYXNlIG9iamVjdC4iCi0gICAg
ICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJQcmltYXJ5Q29sb3JzIiwKLSAg
ICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCi0gICAgICAgICAgICAiZW51bSI6IFsicmVkIiwg
ImdyZWVuIiwgImJsdWUiXQotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQi
OiAiQ29sb3JMaXN0IiwKLSAgICAgICAgICAgICJ0eXBlIjogImFycmF5IiwKLSAgICAgICAgICAg
ICJpdGVtcyI6IHsgIiRyZWYiOiAiUHJpbWFyeUNvbG9ycyIgfQotICAgICAgICB9LAotICAgICAg
ICB7Ci0gICAgICAgICAgICAiaWQiOiAiRXJyb3IiLAotICAgICAgICAgICAgInR5cGUiOiAib2Jq
ZWN0IiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJEYXRhYmFzZSBlcnJvci4iLAotICAg
ICAgICAgICAgInByb3BlcnRpZXMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJtZXNz
YWdlIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIG1lc3NhZ2UuIiB9
LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29kZSIsICJ0eXBlIjogImludGVnZXIiLCAi
ZGVzY3JpcHRpb24iOiAiRXJyb3IgY29kZS4iIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfQot
ICAgIF0sCi0gICAgImNvbW1hbmRzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6
ICJleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzIiwKLSAgICAgICAgICAgICJwYXJh
bWV0ZXJzIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVm
IjogIkRhdGFiYXNlSWQiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJxdWVyeSIsICJ0
eXBlIjogInN0cmluZyIgfQotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJyZXR1cm5zIjog
WwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJh
eSIsICJvcHRpb25hbCI6IHRydWUsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCi0g
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRp
b25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0
eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJu
YW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiLCAib3B0aW9u
YWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRy
ZWYiOiAiRGF0YWJhc2VJZCIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7
ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiLCAib3B0aW9uYWwiOiB0cnVlIH0s
Ci0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVmIjogIlByaW1h
cnlDb2xvcnMiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJhbHRlcm5hdGVDb2xvcnMiLCAiJHJlZiI6ICJDb2xvckxpc3QiLCAib3B0aW9uYWwiOiB0cnVl
IH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3Ry
aW5nIiwgImVudW0iOiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSwgIm9w
dGlvbmFsIjogdHJ1ZSB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAg
ICAgICAgICAgICJuYW1lIjogImV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzIiwK
LSAgICAgICAgICAgICJhc3luYyI6IHRydWUsCi0gICAgICAgICAgICAicGFyYW1ldGVycyI6IFsK
LSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRhdGFiYXNlSWQiLCAiJHJlZiI6ICJEYXRhYmFz
ZUlkIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicXVlcnkiLCAidHlwZSI6ICJzdHJp
bmciIH0KLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAicmV0dXJucyI6IFsKLSAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAib3B0aW9u
YWwiOiB0cnVlLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAotICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVl
IH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1i
ZXIiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1
ZXMiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiwgIm9wdGlvbmFsIjogdHJ1ZSB9
LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFi
YXNlSWQiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJz
cWxFcnJvciIsICIkcmVmIjogIkVycm9yIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6ICJQcmltYXJ5Q29sb3JzIiwg
Im9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYWx0ZXJuYXRl
Q29sb3JzIiwgIiRyZWYiOiAiQ29sb3JMaXN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmluZyIsICJlbnVt
IjogWyJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93IiwgImJsYWNrIl0sICJvcHRpb25hbCI6IHRy
dWUgfQotICAgICAgICAgICAgXQotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAi
bmFtZSI6ICJleGVjdXRlU1FMU3luYyIsCi0gICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKLSAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogImRhdGFiYXNlSWQiLCAiJHJlZiI6ICJEYXRhYmFzZUlk
IiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicXVlcnkiLCAidHlwZSI6ICJzdHJpbmci
IH0KLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAicmV0dXJucyI6IFsKLSAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7
ICJ0eXBlIjogInN0cmluZyIgfSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMi
LCAidHlwZSI6ICJzdHJpbmciIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3Rh
bXAiLCAidHlwZSI6ICJudW1iZXIiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1
ZXMiLCAidHlwZSI6ICJvYmplY3QiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXls
b2FkIiwgInR5cGUiOiAiYW55IiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJh
c2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJzcWxFcnJvciIsICIkcmVmIjogIkVycm9yIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAiYWx0ZXJuYXRlQ29sb3JzIiwgIiRyZWYiOiAiQ29sb3JMaXN0IiB9LAotICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6ICJQcmltYXJ5Q29sb3JzIiB9LAot
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmluZyIs
ICJlbnVtIjogWyJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93IiwgImJsYWNrIl0gfQotICAgICAg
ICAgICAgXQotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJleGVj
dXRlU1FMQXN5bmMiLAotICAgICAgICAgICAgImFzeW5jIjogdHJ1ZSwKLSAgICAgICAgICAgICJw
YXJhbWV0ZXJzIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIk
cmVmIjogIkRhdGFiYXNlSWQiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJxdWVyeSIs
ICJ0eXBlIjogInN0cmluZyIgfQotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJyZXR1cm5z
IjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJh
cnJheSIsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCi0gICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIgfSwKLSAgICAgICAgICAgICAgICB7
ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIgfSwKLSAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIgfSwKLSAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiIH0sCi0gICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIgfSwKLSAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiIH0sCi0gICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlDb2xvcnMi
IH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJhbHRlcm5hdGVDb2xvcnMiLCAiJHJlZiI6
ICJDb2xvckxpc3QiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcmludENvbG9yIiwg
InR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciLCAi
YmxhY2siXSB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9j
b21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbiBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2NvbW1hbmRz
LXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAzNjFkNTdkODIwZC4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvY29tbWFuZHMtd2l0
aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KKysrIC9kZXYvbnVsbApAQCAt
MSw4NSArMCwwIEBACi17Ci0gICAgImRvbWFpbiI6ICJEYXRhYmFzZSIsCi0gICAgInR5cGVzIjog
WwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiRGF0YWJhc2VJZCIsCi0gICAgICAgICAg
ICAidHlwZSI6ICJpbnRlZ2VyIiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUg
aWRlbnRpZmllciBvZiBEYXRhYmFzZSBvYmplY3QuIgotICAgICAgICB9LAotICAgICAgICB7Ci0g
ICAgICAgICAgICAiaWQiOiAiUHJpbWFyeUNvbG9ycyIsCi0gICAgICAgICAgICAidHlwZSI6ICJz
dHJpbmciLAotICAgICAgICAgICAgImVudW0iOiBbInJlZCIsICJncmVlbiIsICJibHVlIl0KLSAg
ICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIkNvbG9yTGlzdCIsCi0gICAg
ICAgICAgICAidHlwZSI6ICJhcnJheSIsCi0gICAgICAgICAgICAiaXRlbXMiOiB7ICIkcmVmIjog
IlByaW1hcnlDb2xvcnMiIH0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgImlk
IjogIkVycm9yIiwKLSAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCi0gICAgICAgICAgICAi
ZGVzY3JpcHRpb24iOiAiRGF0YWJhc2UgZXJyb3IuIiwKLSAgICAgICAgICAgICJwcm9wZXJ0aWVz
IjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibWVzc2FnZSIsICJ0eXBlIjogInN0cmlu
ZyIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBtZXNzYWdlLiIgfSwKLSAgICAgICAgICAgICAgICB7
ICJuYW1lIjogImNvZGUiLCAidHlwZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9uIjogIkVycm9y
IGNvZGUuIiB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0KLSAgICBdLAotICAgICJjb21tYW5k
cyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiZXhlY3V0ZUFsbE9wdGlvbmFs
UGFyYW1ldGVycyIsCi0gICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKLSAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAib3B0aW9uYWwiOiB0
cnVlLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAotICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0g
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiLCAi
b3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAi
dHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQi
LCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzcWxFcnJv
ciIsICIkcmVmIjogIkVycm9yIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6ICJQcmltYXJ5Q29sb3JzIiwgIm9wdGlv
bmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYWx0ZXJuYXRlQ29sb3Jz
IiwgIiRyZWYiOiAiQ29sb3JMaXN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJj
eWFuIiwgIm1hZ2VudGEiLCAieWVsbG93IiwgImJsYWNrIl0sICJvcHRpb25hbCI6IHRydWUgfQot
ICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJyZXR1cm5zIjogWwotICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJvcHRpb25hbCI6IHRy
dWUsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCi0gICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIsICJv
cHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0
eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJu
YW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIs
ICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNxbEVycm9y
IiwgIiRyZWYiOiAiRXJyb3IiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlDb2xvcnMiLCAib3B0aW9u
YWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJhbHRlcm5hdGVDb2xvcnMi
LCAiJHJlZiI6ICJDb2xvckxpc3QiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbImN5
YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSwgIm9wdGlvbmFsIjogdHJ1ZSB9Ci0g
ICAgICAgICAgICBdCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjog
ImV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyIsCi0gICAgICAgICAgICAicGFyYW1ldGVycyI6
IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJy
YXkiLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAotICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciIH0sCi0gICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiIH0sCi0gICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiIH0sCi0gICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiB9LAotICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiIH0sCi0gICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVycm9yIiB9LAotICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6ICJQcmltYXJ5Q29sb3JzIiB9
LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwgIiRyZWYiOiAi
Q29sb3JMaXN0IiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJpbnRDb2xvciIsICJ0
eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93IiwgImJs
YWNrIl0gfQotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJyZXR1cm5zIjogWwotICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVt
cyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJu
b3RlcyIsICJ0eXBlIjogInN0cmluZyIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRp
bWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjog
InZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjog
InBheWxvYWQiLCAidHlwZSI6ICJhbnkiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJk
YXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIgfSwKLSAgICAgICAgICAgICAgICB7ICJu
YW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiIH0sCi0gICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlDb2xvcnMiIH0sCi0gICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJhbHRlcm5hdGVDb2xvcnMiLCAiJHJlZiI6ICJDb2xvckxpc3Qi
IH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3Ry
aW5nIiwgImVudW0iOiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSB9Ci0g
ICAgICAgICAgICBdCi0gICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9kZWZpbml0aW9ucy13
aXRoLW1hYy1wbGF0Zm9ybS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODE3ZjEzNWVlNWEuLjAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwy
OCArMCwwIEBACi17Ci0gICAgImRvbWFpbiI6ICJOZXR3b3JrIiwKLSAgICAidHlwZXMiOiBbCi0g
ICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJOZXR3b3JrRXJyb3IiLAotICAgICAgICAgICAg
InR5cGUiOiAib2JqZWN0IiwKLSAgICAgICAgICAgICJwbGF0Zm9ybSI6ICJtYWNvcyIsCi0gICAg
ICAgICAgICAicHJvcGVydGllcyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm1lc3Nh
Z2UiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgbWVzc2FnZS4iIH0s
Ci0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2RlIiwgInR5cGUiOiAiaW50ZWdlciIsICJk
ZXNjcmlwdGlvbiI6ICJFcnJvciBjb2RlLiIgfQotICAgICAgICAgICAgXQotICAgICAgICB9Ci0g
ICAgXSwKLSAgICAiY29tbWFuZHMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjog
ImxvYWRSZXNvdXJjZSIsCi0gICAgICAgICAgICAicGxhdGZvcm0iOiAibWFjb3MiLAotICAgICAg
ICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2Yg
YSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tz
LiIKLSAgICAgICAgfQotICAgIF0sCi0gICAgImV2ZW50cyI6IFsKLSAgICAgICAgewotICAgICAg
ICAgICAgIm5hbWUiOiAicmVzb3VyY2VMb2FkZWQiLAotICAgICAgICAgICAgInBsYXRmb3JtIjog
Im1hY29zIiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJBIHJlc291cmNlIHdhcyBsb2Fk
ZWQuIgotICAgICAgICB9Ci0gICAgXQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZG9tYWluLWRlYnVnZ2FibGVUeXBl
cy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAxZmViMGM5YTI3ZS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZG9tYWluLWRlYnVnZ2FibGVUeXBl
cy5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1bCi17Ci0gICAgImRvbWFpbiI6
ICJEb21haW4iLAotICAgICJkZWJ1Z2dhYmxlVHlwZXMiOiBbIndlYi1wYWdlIl0sCi0gICAgImNv
bW1hbmRzIjogW3sibmFtZSI6ICJDb21tYW5kIn1dLAotICAgICJldmVudHMiOiBbeyJuYW1lIjog
IkV2ZW50In1dCi19Ci1dCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9kb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21h
aW4tZGVidWdnYWJsZVR5cGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9nZW5lcmljL2RvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1k
ZWJ1Z2dhYmxlVHlwZS5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNjJmYjM4
YmE3OC4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRl
YnVnZ2FibGVUeXBlLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLVsKLXsKLSAg
ICAiZG9tYWluIjogIkRvbWFpbiIsCi0gICAgImRlYnVnZ2FibGVUeXBlcyI6IFsicGFnZSJdLAot
ICAgICJjb21tYW5kcyI6IFt7Im5hbWUiOiAiQ29tbWFuZCIsICJ0YXJnZXRUeXBlcyI6IFsicGFn
ZSIsICJ3b3JrZXIiXX1dLAotICAgICJldmVudHMiOiBbeyJuYW1lIjogIkV2ZW50In1dCi19Ci1d
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZ2VuZXJpYy9kb21haW4tdGFyZ2V0VHlwZXMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2RvbWFpbi10YXJnZXRUeXBlcy5qc29u
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YTZlNDBkNjBhZC4uMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVy
aWMvZG9tYWluLXRhcmdldFR5cGVzLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAK
LVsKLXsKLSAgICAiZG9tYWluIjogIkRvbWFpbiIsCi0gICAgInRhcmdldFR5cGVzIjogWyJwYWdl
Il0sCi0gICAgImNvbW1hbmRzIjogW3sibmFtZSI6ICJDb21tYW5kIiwgInRhcmdldFR5cGVzIjog
WyJwYWdlIl19XSwKLSAgICAiZXZlbnRzIjogW3sibmFtZSI6ICJFdmVudCIsICJ0YXJnZXRUeXBl
cyI6IFsicGFnZSJdfV0KLX0KLV0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1h
bmQtc2l6ZXMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9nZW5lcmljL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTRhOGVjYjE3NmQuLjAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2Rv
bWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgorKysgL2Rldi9udWxsCkBAIC0x
LDU0ICswLDAgQEAKLVsKLXsKLSAgICAiZG9tYWluIjogIk5ldHdvcmsxIiwKLSAgICAiY29tbWFu
ZHMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJjZTEiLAot
ICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRl
eHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4g
Y2hlY2tzLiIKLSAgICAgICAgfQotICAgIF0KLX0sCi17Ci0gICAgImRvbWFpbiI6ICJOZXR3b3Jr
MiIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiTG9hZGVy
SWQiLAotICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKLSAgICAgICAgICAgICJkZXNjcmlw
dGlvbiI6ICJVbmlxdWUgbG9hZGVyIGlkZW50aWZpZXIuIgotICAgICAgICB9Ci0gICAgXQotfSwK
LXsKLSAgICAiZG9tYWluIjogIk5ldHdvcmszIiwKLSAgICAiY29tbWFuZHMiOiBbCi0gICAgICAg
IHsKLSAgICAgICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJjZTEiLAotICAgICAgICAgICAgImRl
c2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBv
biB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKLSAgICAg
ICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAibG9hZFJlc291cmNlMiIsCi0g
ICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9hZHMgYSByZXNvdXJjZSBpbiB0aGUgY29udGV4
dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFnZSB3aXRob3V0IGNyb3NzIG9yaWdpbiBj
aGVja3MuIgotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJsb2Fk
UmVzb3VyY2UzIiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBhIHJlc291cmNl
IGluIHRoZSBjb250ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGluc3BlY3RlZCBwYWdlIHdpdGhvdXQg
Y3Jvc3Mgb3JpZ2luIGNoZWNrcy4iCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAg
ICJuYW1lIjogImxvYWRSZXNvdXJjZTQiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxv
YWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVk
IHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKLSAgICAgICAgfSwKLSAgICAgICAg
ewotICAgICAgICAgICAgIm5hbWUiOiAibG9hZFJlc291cmNlNSIsCi0gICAgICAgICAgICAiZGVz
Y3JpcHRpb24iOiAiTG9hZHMgYSByZXNvdXJjZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1lIG9u
IHRoZSBpbnNwZWN0ZWQgcGFnZSB3aXRob3V0IGNyb3NzIG9yaWdpbiBjaGVja3MuIgotICAgICAg
ICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJsb2FkUmVzb3VyY2U2IiwKLSAg
ICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBhIHJlc291cmNlIGluIHRoZSBjb250ZXh0
IG9mIGEgZnJhbWUgb24gdGhlIGluc3BlY3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNo
ZWNrcy4iCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImxvYWRS
ZXNvdXJjZTciLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2Ug
aW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBj
cm9zcyBvcmlnaW4gY2hlY2tzLiIKLSAgICAgICAgfQotICAgIF0KLX0KLV0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2Vu
dW0tdmFsdWVzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy9lbnVtLXZhbHVlcy5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBjZGFkNjFkZjdjOS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZW51bS12YWx1ZXMuanNvbgorKysgL2Rl
di9udWxsCkBAIC0xLDM1ICswLDAgQEAKLXsiZG9tYWlucyI6WwotewotICAgICJkb21haW4iOiAi
VHlwZURvbWFpbiIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQi
OiAiVHlwZURvbWFpbkVudW0iLAotICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKLSAgICAg
ICAgICAgICJlbnVtIjogWyJzaGFyZWQiLCAicmVkIiwgImdyZWVuIiwgImJsdWUiXQotICAgICAg
ICB9Ci0gICAgXQotfSwKLXsKLSAgICAiZG9tYWluIjogIkNvbW1hbmREb21haW4iLAotICAgICJj
b21tYW5kcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiY29tbWFuZFdpdGhF
bnVtUmV0dXJuVmFsdWUiLAotICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbXSwKLSAgICAgICAg
ICAgICJyZXR1cm5zIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicmV0dXJuVmFsdWUi
LCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsic2hhcmVkIiwgImN5YW4iLCAibWFnZW50YSIs
ICJ5ZWxsb3ciXSB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0KLSAgICBdCi19LAotewotICAg
ICJkb21haW4iOiAiRXZlbnREb21haW4iLAotICAgICJldmVudHMiOiBbCi0gICAgICAgIHsKLSAg
ICAgICAgICAgICJuYW1lIjogImV2ZW50V2l0aEVudW1QYXJhbWV0ZXIiLAotICAgICAgICAgICAg
InBhcmFtZXRlcnMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXJhbWV0ZXIiLCAi
dHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsic2hhcmVkIiwgImJsYWNrIiwgIndoaXRlIl0gfQot
ICAgICAgICAgICAgXQotICAgICAgICB9Ci0gICAgXQotfQotXX0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V2ZW50LXRh
cmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24gYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9ldmVudC10YXJnZXRU
eXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA0ZGZlZDQxZWQyMS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXZlbnQtdGFyZ2V0VHlw
ZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgorKysgL2Rldi9udWxsCkBAIC0x
LDggKzAsMCBAQAotWwotewotICAgICJkb21haW4iOiAiRG9tYWluIiwKLSAgICAiZGVidWdnYWJs
ZVR5cGVzIjogWyJwYWdlIl0sCi0gICAgImNvbW1hbmRzIjogW3sibmFtZSI6ICJDb21tYW5kIn1d
LAotICAgICJldmVudHMiOiBbeyJuYW1lIjogIkV2ZW50IiwgInRhcmdldFR5cGVzIjogWyJwYWdl
IiwgIndvcmtlciJdfV0KLX0KLV0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFt
ZXRlcnMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9nZW5lcmljL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggY2FiYmYxMGI4MzYuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V2ZW50cy13
aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAg
QEAKLXsKLSAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAg
IHsKLSAgICAgICAgICAgICJpZCI6ICJEYXRhYmFzZUlkIiwKLSAgICAgICAgICAgICJ0eXBlIjog
InN0cmluZyIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIGlkZW50aWZpZXIg
b2YgRGF0YWJhc2Ugb2JqZWN0LiIKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAg
ImlkIjogIlByaW1hcnlDb2xvcnMiLAotICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKLSAg
ICAgICAgICAgICJ2YWx1ZXMiOiBbInJlZCIsICJncmVlbiIsICJibHVlIl0KLSAgICAgICAgfSwK
LSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIkNvbG9yTGlzdCIsCi0gICAgICAgICAgICAi
dHlwZSI6ICJhcnJheSIsCi0gICAgICAgICAgICAiaXRlbXMiOiB7ICIkcmVmIjogIlByaW1hcnlD
b2xvcnMiIH0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIkVycm9y
IiwKLSAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCi0gICAgICAgICAgICAiZGVzY3JpcHRp
b24iOiAiRGF0YWJhc2UgZXJyb3IuIiwKLSAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwotICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAibWVzc2FnZSIsICJ0eXBlIjogInN0cmluZyIsICJkZXNj
cmlwdGlvbiI6ICJFcnJvciBtZXNzYWdlLiIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjog
ImNvZGUiLCAidHlwZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIGNvZGUuIiB9
Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0KLSAgICBdLAotICAgICJldmVudHMiOiBbCi0gICAg
ICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMi
LAotICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIm9wdGlvbmFsIjogdHJ1ZSwgIml0ZW1z
IjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5v
dGVzIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFsIjog
dHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2Jq
ZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5
bG9hZCIsICJ0eXBlIjogImFueSIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiLCAib3B0aW9uYWwiOiB0cnVl
IH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVmIjogIlBy
aW1hcnlDb2xvcnMiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJhbHRlcm5hdGVDb2xvcnMiLCAiJHJlZiI6ICJDb2xvckxpc3QiLCAib3B0aW9uYWwiOiB0
cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAi
c3RyaW5nIiwgInZhbHVlcyI6IFsiY3lhbiIsICJtYWdlbnRhIiwgInllbGxvdyIsICJibGFjayJd
LCAib3B0aW9uYWwiOiB0cnVlIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfSwKLSAgICAgICAg
ewotICAgICAgICAgICAgIm5hbWUiOiAiZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIiwK
LSAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
Y29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5n
IiB9IH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmlu
ZyIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51
bWJlciIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9i
amVjdCIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJh
bnkiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVy
cm9yIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6
ICJQcmltYXJ5Q29sb3JzIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYWx0ZXJuYXRl
Q29sb3JzIiwgIiRyZWYiOiAiQ29sb3JMaXN0IiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmluZyIsICJ2YWx1ZXMiOiBbImN5YW4iLCAibWFn
ZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0KLSAg
ICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9jb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9t
YWluLWRlYnVnZ2FibGVUeXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvY29tbWFuZC10YXJnZXRUeXBl
LW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJlc3VsdApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggNDMxM2ZhOTE1MWUuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2Nv
bW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1yZXN1
bHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMDYzICswLDAgQEAKLSMjIyBCZWdpbiBGaWxlOiBJbnNw
ZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotLy8gRG9tYWluCi1J
bnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJEb21haW4iLCBbInBhZ2UiLCAid29ya2Vy
Il0pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIkRvbWFpbi5Db21tYW5kIiwg
bnVsbCwgW10sIFtdKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudCgiRG9tYWluLkV2
ZW50IiwgbnVsbCwgW10pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbkRpc3BhdGNo
ZXIgPSBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRGlzcGF0Y2hlci5iaW5kKEluc3BlY3RvckJh
Y2tlbmQsICJEb21haW4iKTsKLUluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkRvbWFp
biIsIFsicGFnZSJdKTsKLSMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpz
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hp
bmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCi0j
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotCi1uYW1l
c3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewot
cHVibGljOgotICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNw
YXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlz
cGF0Y2hlcik7IH0KLSAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBj
b25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Ci1wcml2YXRlOgotICAg
IFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKLX07Ci0KLQot
Y2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRl
QmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZpcnR1YWwgfkFsdGVybmF0ZURvbWFp
bkJhY2tlbmREaXNwYXRjaGVyKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIENvbW1hbmQobG9uZyBj
YWxsSWQpID0gMDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jZW5kaWYgLy8g
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jIyMgRW5kIEZpbGU6IFRl
c3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJh
Y2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29t
bWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0j
aW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10eXBlZGVmIFN0cmluZyBFcnJvclN0
cmluZzsKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotY2xh
c3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXI7Ci0jZW5kaWYgLy8gRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0KLWNsYXNzIERvbWFpbkJhY2tlbmREaXNw
YXRjaGVySGFuZGxlciB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIENvbW1hbmQoRXJyb3JT
dHJpbmcmKSA9IDA7Ci1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB+RG9tYWluQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyKCk7Ci19OwotCi1jbGFzcyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5h
bCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAg
c3RhdGljIFJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRj
aGVyJiwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdm9pZCBkaXNwYXRj
aChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+
JiYgbWVzc2FnZSkgZmluYWw7Ci1wcml2YXRlOgotICAgIHZvaWQgQ29tbWFuZChsb25nIHJlcXVl
c3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKLSNpZiBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLXB1YmxpYzoKLSAgICB2b2lkIHNldEFsdGVy
bmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0
ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hl
cjsgfQotcHJpdmF0ZToKLSAgICBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciogbV9h
bHRlcm5hdGVEaXNwYXRjaGVyIHsgbnVsbHB0ciB9OwotI2VuZGlmCi1wcml2YXRlOgotICAgIERv
bWFpbkJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiwgRG9tYWluQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBt
X2FnZW50IHsgbnVsbHB0ciB9OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMg
RW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3Rm
L0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKLSNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgi
Ci0jZW5kaWYKLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLURvbWFpbkJhY2tlbmREaXNwYXRj
aGVySGFuZGxlcjo6fkRvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQotCi1SZWY8
RG9tYWluQmFja2VuZERpc3BhdGNoZXI+IERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUo
QmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBEb21haW5CYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXIqIGFnZW50KQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERvbWFpbkJh
Y2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOwotfQotCi1Eb21haW5C
YWNrZW5kRGlzcGF0Y2hlcjo6RG9tYWluQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNo
ZXImIGJhY2tlbmREaXNwYXRjaGVyLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFn
ZW50KQotICAgIDogU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNo
ZXIpCi0gICAgLCBtX2FnZW50KGFnZW50KQotewotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJl
Z2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbigiRG9tYWluIl9zLCB0aGlzKTsKLX0KLQotdm9pZCBE
b21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0
cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCi17Ci0gICAgUmVmPERv
bWFpbkJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKLQotICAgIFJlZlB0cjxKU09O
OjpPYmplY3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3Ms
IHBhcmFtZXRlcnMpOwotCi0gICAgaWYgKG1ldGhvZCA9PSAiQ29tbWFuZCIpCi0gICAgICAgIENv
bW1hbmQocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKLSAgICBlbHNlCi0gICAgICAg
IG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNo
ZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3Vu
ZCIpOwotfQotCi12b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVx
dWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQotewotI2lmIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQotICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsK
LSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5Db21tYW5kKHJlcXVlc3RJZCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAg
IFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAg
bV9hZ2VudC0+Q29tbWFuZChlcnJvcik7Ci0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAg
ICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3Zl
KHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZN
b3ZlKGVycm9yKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZp
bGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJv
bnRlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29t
bWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0j
aW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVz
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0
b3IgewotCi1jbGFzcyBGcm9udGVuZFJvdXRlcjsKLQotY2xhc3MgRG9tYWluRnJvbnRlbmREaXNw
YXRjaGVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBEb21h
aW5Gcm9udGVuZERpc3BhdGNoZXIoRnJvbnRlbmRSb3V0ZXImIGZyb250ZW5kUm91dGVyKSA6IG1f
ZnJvbnRlbmRSb3V0ZXIoZnJvbnRlbmRSb3V0ZXIpIHsgfQotICAgIHZvaWQgRXZlbnQoKTsKLXBy
aXZhdGU6Ci0gICAgRnJvbnRlbmRSb3V0ZXImIG1fZnJvbnRlbmRSb3V0ZXI7Ci19OwotCi19IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hl
cnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5n
LWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJv
bnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFj
ZSBJbnNwZWN0b3IgewotCi12b2lkIERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcjo6RXZlbnQoKQot
ewotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4uRXZl
bnQiX3MpOwotCi0gICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRv
SlNPTlN0cmluZygpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQg
RmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xPYmplY3RzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21t
YW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi1uYW1l
c3BhY2UgUHJvdG9jb2wgewotCi0KLQotCi0KLQotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9j
b2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bE9iamVjdHMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hp
bmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RQcm90
b2NvbE9iamVjdHMuaCIKLQotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLW5hbWVzcGFjZSBQ
cm90b2NvbCB7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9t
YWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVycy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQotQHByb3Rv
Y29sIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI7Ci0KLW5hbWVzcGFjZSBJbnNwZWN0
b3IgewotCi0KLWNsYXNzIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5h
bCA6IHB1YmxpYyBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciB7Ci0gICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tl
bmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IGhhbmRsZXIp
IHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KLSAgICB2b2lkIENvbW1hbmQobG9uZyByZXF1ZXN0
SWQpIGZpbmFsOwotcHJpdmF0ZToKLSAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sRG9tYWlu
RG9tYWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRv
bWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFj
a2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgot
I2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2luY2x1ZGUgPHd0Zi9K
U09OVmFsdWVzLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi12b2lkIE9iakNJbnNwZWN0
b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVlc3RJZCkKLXsKLSAg
ICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoQ29tbWFuZFdp
dGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgewotICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNo
ZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi5Db21tYW5kJyB3YXMgbm90IGZvdW5kIl9zKTsK
LSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICpl
cnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9y
KHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7Ci0gICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgfTsKLQot
ICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCkt
PnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsK
LSAgICB9OwotCi0gICAgW21fZGVsZWdhdGUgQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOmVycm9y
Q2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107Ci19Ci0KLQotfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERp
c3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9u
LmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5cGUt
bWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2Nv
bC5oPgotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZh
Y2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0Ci1AcHJvcGVydHkgKG5vbmF0
b21pYywgcmV0YWluLCBzZXR0ZXI9c2V0RG9tYWluSGFuZGxlcjopIGlkPFRlc3RQcm90b2NvbERv
bWFpbkRvbWFpbkhhbmRsZXI+IGRvbWFpbkhhbmRsZXI7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywg
cmVhZG9ubHkpIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqZG9tYWlu
RXZlbnREaXNwYXRjaGVyOwotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29u
ZmlndXJhdGlvbi5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9u
Lm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZC10YXJnZXRUeXBl
LW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRp
b24uaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0
ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21l
bnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIElu
c3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KLXsK
LSAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotICAgIGlk
PFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IF9kb21haW5IYW5kbGVyOwotICAgIFRl
c3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqX2RvbWFpbkV2ZW50RGlzcGF0
Y2hlcjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFi
bGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtzdXBlciBp
bml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJUKGNv
bnRyb2xsZXIpOwotICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1cm4gc2Vs
ZjsKLX0KLQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgW19kb21haW5IYW5kbGVyIHJlbGVhc2Vd
OwotICAgIFtfZG9tYWluRXZlbnREaXNwYXRjaGVyIHJlbGVhc2VdOwotICAgIFtzdXBlciBkZWFs
bG9jXTsKLX0KLQotLSAodm9pZClzZXREb21haW5IYW5kbGVyOihpZDxUZXN0UHJvdG9jb2xEb21h
aW5Eb21haW5IYW5kbGVyPiloYW5kbGVyCi17Ci0gICAgaWYgKGhhbmRsZXIgPT0gX2RvbWFpbkhh
bmRsZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIFtfZG9tYWluSGFuZGxlciByZWxlYXNlXTsK
LSAgICBfZG9tYWluSGFuZGxlciA9IFtoYW5kbGVyIHJldGFpbl07Ci0KLSAgICBhdXRvIGFsdGVy
bmF0ZURpc3BhdGNoZXIgPSBtYWtlVW5pcXVlPE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlz
cGF0Y2hlcj4oaGFuZGxlcik7Ci0gICAgYXV0byBhbHRlcm5hdGVBZ2VudCA9IG1ha2VVbmlxdWU8
QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8RG9tYWluQmFja2VuZERpc3BhdGNoZXIsIEFsdGVy
bmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyPj4oIkRvbWFpbiJfcywgKl9jb250cm9sbGVyLCBX
VEZNb3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIpKTsKLSAgICBfY29udHJvbGxlci0+YXBwZW5kRXh0
cmFBZ2VudChXVEZNb3ZlKGFsdGVybmF0ZUFnZW50KSk7Ci19Ci0KLS0gKGlkPFRlc3RQcm90b2Nv
bERvbWFpbkRvbWFpbkhhbmRsZXI+KWRvbWFpbkhhbmRsZXIKLXsKLSAgICByZXR1cm4gX2RvbWFp
bkhhbmRsZXI7Ci19Ci0KLS0gKFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hl
ciAqKWRvbWFpbkV2ZW50RGlzcGF0Y2hlcgotewotICAgIGlmICghX2RvbWFpbkV2ZW50RGlzcGF0
Y2hlcikKLSAgICAgICAgX2RvbWFpbkV2ZW50RGlzcGF0Y2hlciA9IFtbVGVzdFByb3RvY29sRG9t
YWluRG9tYWluRXZlbnREaXNwYXRjaGVyIGFsbG9jXSBpbml0V2l0aENvbnRyb2xsZXI6X2NvbnRy
b2xsZXJdOwotICAgIHJldHVybiBfZG9tYWluRXZlbnREaXNwYXRjaGVyOwotfQotCi1AZW5kCi0K
LQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1
Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNp
bmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbERv
bWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlcgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29u
dHJvbGxlciogX2NvbnRyb2xsZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRy
b2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgotewotICAg
IHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmls
OwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7
Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpRXZlbnQKLXsKLSAgICBjb25zdCBGcm9u
dGVuZFJvdXRlciYgcm91dGVyID0gX2NvbnRyb2xsZXItPmZyb250ZW5kUm91dGVyKCk7Ci0KLSAg
ICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9z
KTsKLSAgICByb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Ci19
Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMu
bW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dh
YmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotCi0jaW1wb3J0IDxXZWJJbnNwZWN0
b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+Ci0KLQotCi0KLXR5cGVkZWYgTlNfRU5VTShOU0lu
dGVnZXIsIFRlc3RQcm90b2NvbFBsYXRmb3JtKSB7Ci0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1B
bGwsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljLAotICAgIFRlc3RQcm90b2NvbFBs
YXRmb3JtSU9TLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1MsCi19OwotCi0KLQotCi0K
LUBwcm90b2NvbCBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyIDxOU09iamVjdD4KLUBv
cHRpb25hbAotLSAodm9pZClDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJp
bmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKSh2b2lkKSlz
dWNjZXNzQ2FsbGJhY2s7Ci1AZW5kCi0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZh
dWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNo
ZXIgOiBOU09iamVjdAotLSAodm9pZClFdmVudDsKLUBlbmQKLQotCi0jaW1wb3J0IDxXZWJJbnNw
ZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+Ci0KLSMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVy
bmFsLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5
cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1w
b3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgotI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDx3dGYvSlNP
TlZhbHVlcy5oPgotCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlz
cGF0Y2hlciAoUHJpdmF0ZSkKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KElu
c3BlY3Rvcjo6QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyOwotQGVu
ZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2Fi
bGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9j
b2xBcnJheUNvbnZlcnNpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+Ci1PcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90
b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKLQotaW5saW5lIFN0cmluZyB0b1Byb3Rv
Y29sU3RyaW5nKFRlc3RQcm90b2NvbFBsYXRmb3JtIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1
ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1BbGw6Ci0gICAgICAgIHJldHVybiAi
YWxsIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOgotICAgICAgICBy
ZXR1cm4gImdlbmVyaWMiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzoKLSAg
ICAgICAgcmV0dXJuICJpb3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09T
OgotICAgICAgICByZXR1cm4gIm1hY29zIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5s
aW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFBsYXRmb3JtPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gImFsbCIpCi0gICAgICAgIHJl
dHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDsKLSAgICBpZiAodmFsdWUgPT0gImdlbmVyaWMi
KQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOwotICAgIGlmICh2
YWx1ZSA9PSAiaW9zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOwot
ICAgIGlmICh2YWx1ZSA9PSAibWFjb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxh
dGZvcm1NYWNPUzsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi19IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMu
aAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5n
LWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgot
Ci0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJz
ZXIuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRl
Lmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotCi0KLQotCi0jIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sVHlwZXMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21t
YW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgi
Ci0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgot
I2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0K
LXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1
dGUuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29u
LXJlc3VsdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmM1YzQxZGI1M2EuLjAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9nZW5lcmljL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24tcmVz
dWx0CisrKyAvZGV2L251bGwKQEAgLTEsMTgwOSArMCwwIEBACi0jIyMgQmVnaW4gRmlsZTogSW5z
cGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0vLyBEYXRhYmFzZQotSW5zcGVjdG9yQmFja2VuZC5y
ZWdpc3RlckRvbWFpbigiRGF0YWJhc2UiLCBudWxsKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0
ZXJFbnVtKCJEYXRhYmFzZS5QcmltYXJ5Q29sb3JzIiwge1JlZDogInJlZCIsIEdyZWVuOiAiZ3Jl
ZW4iLCBCbHVlOiAiYmx1ZSJ9KTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJE
YXRhYmFzZS5leGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzIiwgbnVsbCwgW3sibmFt
ZSI6ICJkYXRhYmFzZUlkIiwgInR5cGUiOiAibnVtYmVyIn0sIHsibmFtZSI6ICJxdWVyeSIsICJ0
eXBlIjogInN0cmluZyJ9XSwgWyJjb2x1bW5OYW1lcyIsICJub3RlcyIsICJ0aW1lc3RhbXAiLCAi
dmFsdWVzIiwgInBheWxvYWQiLCAiZGF0YWJhc2VJZCIsICJzcWxFcnJvciIsICJzY3JlZW5Db2xv
ciIsICJhbHRlcm5hdGVDb2xvcnMiLCAicHJpbnRDb2xvciJdKTsKLUluc3BlY3RvckJhY2tlbmQu
cmVnaXN0ZXJDb21tYW5kKCJEYXRhYmFzZS5leGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZh
bHVlcyIsIG51bGwsIFt7Im5hbWUiOiAiZGF0YWJhc2VJZCIsICJ0eXBlIjogIm51bWJlciJ9LCB7
Im5hbWUiOiAicXVlcnkiLCAidHlwZSI6ICJzdHJpbmcifV0sIFsiY29sdW1uTmFtZXMiLCAibm90
ZXMiLCAidGltZXN0YW1wIiwgInZhbHVlcyIsICJwYXlsb2FkIiwgImRhdGFiYXNlSWQiLCAic3Fs
RXJyb3IiLCAic2NyZWVuQ29sb3IiLCAiYWx0ZXJuYXRlQ29sb3JzIiwgInByaW50Q29sb3IiXSk7
Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiRGF0YWJhc2UuZXhlY3V0ZVNRTFN5
bmMiLCBudWxsLCBbeyJuYW1lIjogImRhdGFiYXNlSWQiLCAidHlwZSI6ICJudW1iZXIifSwgeyJu
YW1lIjogInF1ZXJ5IiwgInR5cGUiOiAic3RyaW5nIn1dLCBbImNvbHVtbk5hbWVzIiwgIm5vdGVz
IiwgInRpbWVzdGFtcCIsICJ2YWx1ZXMiLCAicGF5bG9hZCIsICJkYXRhYmFzZUlkIiwgInNxbEVy
cm9yIiwgImFsdGVybmF0ZUNvbG9ycyIsICJzY3JlZW5Db2xvciIsICJwcmludENvbG9yIl0pOwot
SW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIkRhdGFiYXNlLmV4ZWN1dGVTUUxBc3lu
YyIsIG51bGwsIFt7Im5hbWUiOiAiZGF0YWJhc2VJZCIsICJ0eXBlIjogIm51bWJlciJ9LCB7Im5h
bWUiOiAicXVlcnkiLCAidHlwZSI6ICJzdHJpbmcifV0sIFsiY29sdW1uTmFtZXMiLCAibm90ZXMi
LCAidGltZXN0YW1wIiwgInZhbHVlcyIsICJwYXlsb2FkIiwgImRhdGFiYXNlSWQiLCAic3FsRXJy
b3IiLCAic2NyZWVuQ29sb3IiLCAiYWx0ZXJuYXRlQ29sb3JzIiwgInByaW50Q29sb3IiXSk7Ci1J
bnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRGF0YWJhc2VEaXNwYXRjaGVyID0gSW5zcGVjdG9yQmFj
a2VuZC5yZWdpc3RlckRpc3BhdGNoZXIuYmluZChJbnNwZWN0b3JCYWNrZW5kLCAiRGF0YWJhc2Ui
KTsKLUluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkRhdGFiYXNlIiwgbnVsbCk7Ci0j
IyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2lm
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi0jaW5jbHVkZSAiVGVz
dFByb3RvY29sVHlwZXMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250
ZW5kUm91dGVyLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hl
cihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNw
YXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQotICAgIEJhY2tlbmREaXNwYXRjaGVyKiBi
YWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0
KCk7IH0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmRE
aXNwYXRjaGVyOwotfTsKLQotCi1jbGFzcyBBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVyIDogcHVibGljIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2
aXJ0dWFsIH5BbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKCkgeyB9Ci0gICAgdmly
dHVhbCB2b2lkIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyBjYWxsSWQs
IGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIGV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgY2FsbElk
LCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCBleGVjdXRlU1FMU3luYyhsb25nIGNhbGxJZCwgaW50IGluX2RhdGFiYXNlSWQs
IGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNR
TEFzeW5jKGxvbmcgY2FsbElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9x
dWVyeSkgPSAwOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSNlbmRpZiAvLyBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSMjIyBFbmQgRmlsZTogVGVz
dEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFj
a2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21t
YW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29s
T2JqZWN0cy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJ
bnNwZWN0b3IgewotCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQotI2lmIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotY2xhc3MgQWx0ZXJuYXRlRGF0YWJhc2VC
YWNrZW5kRGlzcGF0Y2hlcjsKLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKLQotY2xhc3MgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewot
cHVibGljOgotICAgIC8vIE5hbWVkIGFmdGVyIHBhcmFtZXRlciAncHJpbnRDb2xvcicgd2hpbGUg
Z2VuZXJhdGluZyBjb21tYW5kL2V2ZW50IGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1
ZXMuCi0gICAgZW51bSBjbGFzcyBQcmludENvbG9yIHsKLSAgICAgICAgQ3lhbiA9IDMsCi0gICAg
ICAgIE1hZ2VudGEgPSA0LAotICAgICAgICBZZWxsb3cgPSA1LAotICAgICAgICBCbGFjayA9IDYs
Ci0gICAgfTsgLy8gZW51bSBjbGFzcyBQcmludENvbG9yCi0gICAgdmlydHVhbCB2b2lkIGV4ZWN1
dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMoRXJyb3JTdHJpbmcmLCBpbnQgaW5fZGF0YWJh
c2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSwgUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5n
Pj4mIG9wdF9vdXRfY29sdW1uTmFtZXMsIE9wdGlvbmFsPFN0cmluZz4mIG9wdF9vdXRfbm90ZXMs
IE9wdGlvbmFsPGRvdWJsZT4mIG9wdF9vdXRfdGltZXN0YW1wLCBPcHRpb25hbDxKU09OOjpPYmpl
Y3Q+JiBvcHRfb3V0X3ZhbHVlcywgT3B0aW9uYWw8SlNPTjo6VmFsdWU+JiBvcHRfb3V0X3BheWxv
YWQsIE9wdGlvbmFsPGludD4mIG9wdF9vdXRfZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mIG9wdF9vdXRfc3FsRXJyb3IsIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzKiBvcHRfb3V0X3NjcmVlbkNvbG9yLCBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4mIG9wdF9vdXRf
YWx0ZXJuYXRlQ29sb3JzLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRD
b2xvciogb3B0X291dF9wcmludENvbG9yKSA9IDA7Ci0gICAgY2xhc3MgRXhlY3V0ZVNRTEFzeW5j
T3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjayA6IHB1YmxpYyBCYWNrZW5kRGlzcGF0Y2hlcjo6
Q2FsbGJhY2tCYXNlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEV4ZWN1dGVTUUxBc3luY09wdGlv
bmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2soUmVmPEJhY2tlbmREaXNwYXRjaGVyPiYmLCBpbnQgaWQp
OwotICAgICAgICB2b2lkIHNlbmRTdWNjZXNzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+
JiYgY29sdW1uTmFtZXMsIE9wdGlvbmFsPFN0cmluZz4mIG5vdGVzLCBPcHRpb25hbDxkb3VibGU+
JiB0aW1lc3RhbXAsIE9wdGlvbmFsPEpTT046Ok9iamVjdD4mIHZhbHVlcywgT3B0aW9uYWw8SlNP
Tjo6VmFsdWU+JiBwYXlsb2FkLCBPcHRpb25hbDxpbnQ+JiBkYXRhYmFzZUlkLCBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYmIHNxbEVycm9yLCBPcHRpb25hbDxJ
bnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gc2NyZWVuQ29sb3Is
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYmIGFsdGVy
bmF0ZUNvbG9ycywgT3B0aW9uYWw8RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlBy
aW50Q29sb3I+IHByaW50Q29sb3IpOwotICAgIH07Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVT
UUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJp
bmcmIGluX3F1ZXJ5LCBSZWY8RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxs
YmFjaz4mJiBjYWxsYmFjaykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMU3luYyhF
cnJvclN0cmluZyYsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5LCBS
ZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYgb3V0X2NvbHVtbk5hbWVzLCBTdHJpbmcqIG91
dF9ub3RlcywgZG91YmxlKiBvdXRfdGltZXN0YW1wLCBKU09OOjpPYmplY3QqIG91dF92YWx1ZXMs
IEpTT046OlZhbHVlKiBvdXRfcGF5bG9hZCwgaW50KiBvdXRfZGF0YWJhc2VJZCwgUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mIG91dF9zcWxFcnJvciwgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiBvdXRfYWx0ZXJuYXRl
Q29sb3JzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyogb3V0
X3NjcmVlbkNvbG9yLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xv
ciogb3V0X3ByaW50Q29sb3IpID0gMDsKLSAgICBjbGFzcyBFeGVjdXRlU1FMQXN5bmNDYWxsYmFj
ayA6IHB1YmxpYyBCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlIHsKLSAgICBwdWJsaWM6
Ci0gICAgICAgIEV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrKFJlZjxCYWNrZW5kRGlzcGF0Y2hlcj4m
JiwgaW50IGlkKTsKLSAgICAgICAgdm9pZCBzZW5kU3VjY2VzcyhSZWZQdHI8SlNPTjo6QXJyYXlP
ZjxTdHJpbmc+PiYmIGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG5vdGVzLCBkb3VibGUgdGlt
ZXN0YW1wLCBKU09OOjpPYmplY3QgdmFsdWVzLCBKU09OOjpWYWx1ZSBwYXlsb2FkLCBpbnQgZGF0
YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mJiBz
cWxFcnJvciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgc2Ny
ZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0
PiYmIGFsdGVybmF0ZUNvbG9ycywgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlBy
aW50Q29sb3IgcHJpbnRDb2xvcik7Ci0gICAgfTsKLSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNR
TEFzeW5jKGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5LCBSZWY8RXhl
Y3V0ZVNRTEFzeW5jQ2FsbGJhY2s+JiYgY2FsbGJhY2spID0gMDsKLXByb3RlY3RlZDoKLSAgICB2
aXJ0dWFsIH5EYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOwotfTsKLQotY2xhc3Mg
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNr
ZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVySGFuZGxlciopOwotICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0
IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOwotcHJp
dmF0ZToKLSAgICB2b2lkIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyBy
ZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0gICAgdm9pZCBl
eGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHJlcXVlc3RJZCwgUmVmUHRy
PEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKLSAgICB2b2lkIGV4ZWN1dGVTUUxTeW5jKGxv
bmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwotICAgIHZv
aWQgZXhlY3V0ZVNRTEFzeW5jKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYm
IHBhcmFtZXRlcnMpOwotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQotcHVibGljOgotICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0Y2hlcihBbHRlcm5hdGVEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRl
RGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KLXByaXZhdGU6Ci0gICAgQWx0ZXJu
YXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciogbV9hbHRlcm5hdGVEaXNwYXRjaGVyIHsgbnVs
bHB0ciB9OwotI2VuZGlmCi1wcml2YXRlOgotICAgIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIo
QmFja2VuZERpc3BhdGNoZXImLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwot
ICAgIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50IHsgbnVsbHB0ciB9
OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNr
ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVy
cy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFz
eW5jLWF0dHJpYnV0ZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNo
ZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRl
ci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVz
dHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jaWYgRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVycy5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1E
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6fkRhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyKCkgeyB9Ci0KLVJlZjxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNw
YXRjaGVyLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCi17Ci0gICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlz
cGF0Y2hlciwgYWdlbnQpKTsKLX0KLQotRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6RGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIs
IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKLSAgICA6IFN1cHBsZW1l
bnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQotICAgICwgbV9hZ2VudChh
Z2VudCkKLXsKLSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JE
b21haW4oIkRhdGFiYXNlIl9zLCB0aGlzKTsKLX0KLQotdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJl
ZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKLXsKLSAgICBSZWY8RGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7Ci0KLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJh
bWV0ZXJzOwotICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsK
LQotICAgIGlmIChtZXRob2QgPT0gImV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMi
KQotICAgICAgICBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKHJlcXVlc3RJZCwg
V1RGTW92ZShwYXJhbWV0ZXJzKSk7Ci0gICAgZWxzZSBpZiAobWV0aG9kID09ICJleGVjdXRlU1FM
QXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyIpCi0gICAgICAgIGV4ZWN1dGVTUUxBc3luY09wdGlv
bmFsUmV0dXJuVmFsdWVzKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7Ci0gICAgZWxz
ZSBpZiAobWV0aG9kID09ICJleGVjdXRlU1FMU3luYyIpCi0gICAgICAgIGV4ZWN1dGVTUUxTeW5j
KHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7Ci0gICAgZWxzZSBpZiAobWV0aG9kID09
ICJleGVjdXRlU1FMQXN5bmMiKQotICAgICAgICBleGVjdXRlU1FMQXN5bmMocmVxdWVzdElkLCBX
VEZNb3ZlKHBhcmFtZXRlcnMpKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5k
LCAiJ0RhdGFiYXNlLiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7Ci19Ci0KLXZvaWQg
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZh
bHVlcyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKQot
ewotICAgIGludCBpbl9kYXRhYmFzZUlkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0SW50ZWdl
cihwYXJhbWV0ZXJzLmdldCgpLCAiZGF0YWJhc2VJZCJfcywgbnVsbHB0cik7Ci0gICAgU3RyaW5n
IGluX3F1ZXJ5ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0
KCksICJxdWVyeSJfcywgbnVsbHB0cik7Ci0gICAgaWYgKG1fYmFja2VuZERpc3BhdGNoZXItPmhh
c1Byb3RvY29sRXJyb3JzKCkpIHsKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0
UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgIlNvbWUgYXJn
dW1lbnRzIG9mIG1ldGhvZCAnRGF0YWJhc2UuZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZh
bHVlcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIl9zKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
I2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotICAgIGlmIChtX2Fs
dGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5leGVj
dXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKHJlcXVlc3RJZCwgaW5fZGF0YWJhc2VJZCwg
aW5fcXVlcnkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBFcnJvclN0
cmluZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOwotICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IG91dF9jb2x1bW5O
YW1lczsKLSAgICBPcHRpb25hbDxTdHJpbmc+IG91dF9ub3RlczsKLSAgICBPcHRpb25hbDxkb3Vi
bGU+IG91dF90aW1lc3RhbXA7Ci0gICAgT3B0aW9uYWw8SlNPTjo6T2JqZWN0PiBvdXRfdmFsdWVz
OwotICAgIE9wdGlvbmFsPEpTT046OlZhbHVlPiBvdXRfcGF5bG9hZDsKLSAgICBPcHRpb25hbDxp
bnQ+IG91dF9kYXRhYmFzZUlkOwotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6RXJyb3I+IG91dF9zcWxFcnJvcjsKLSAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6UHJpbWFyeUNvbG9ycyBvdXRfc2NyZWVuQ29sb3I7Ci0gICAgUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IG91dF9hbHRlcm5hdGVDb2xvcnM7Ci0g
ICAgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3Igb3V0X3ByaW50
Q29sb3I7Ci0gICAgbV9hZ2VudC0+ZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhl
cnJvciwgaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnksIG91dF9jb2x1bW5OYW1lcywgb3V0X25vdGVz
LCBvdXRfdGltZXN0YW1wLCBvdXRfdmFsdWVzLCBvdXRfcGF5bG9hZCwgb3V0X2RhdGFiYXNlSWQs
IG91dF9zcWxFcnJvciwgb3V0X3NjcmVlbkNvbG9yLCBvdXRfYWx0ZXJuYXRlQ29sb3JzLCBvdXRf
cHJpbnRDb2xvcik7Ci0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7Ci0gICAgICAgIGlmIChv
dXRfY29sdW1uTmFtZXMpCi0gICAgICAgICAgICByZXN1bHQtPnNldEFycmF5KCJjb2x1bW5OYW1l
cyJfcywgb3V0X2NvbHVtbk5hbWVzKTsKLSAgICAgICAgaWYgKG91dF9ub3Rlcy5oYXNWYWx1ZSgp
KQotICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCAqb3V0X25vdGVzKTsK
LSAgICAgICAgaWYgKG91dF90aW1lc3RhbXAuaGFzVmFsdWUoKSkKLSAgICAgICAgICAgIHJlc3Vs
dC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICpvdXRfdGltZXN0YW1wKTsKLSAgICAgICAgaWYg
KG91dF92YWx1ZXMuaGFzVmFsdWUoKSkKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJ2
YWx1ZXMiX3MsICpvdXRfdmFsdWVzKTsKLSAgICAgICAgaWYgKG91dF9wYXlsb2FkLmhhc1ZhbHVl
KCkpCi0gICAgICAgICAgICByZXN1bHQtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCAqb3V0X3BheWxv
YWQpOwotICAgICAgICBpZiAob3V0X2RhdGFiYXNlSWQuaGFzVmFsdWUoKSkKLSAgICAgICAgICAg
IHJlc3VsdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgKm91dF9kYXRhYmFzZUlkKTsKLSAg
ICAgICAgaWYgKG91dF9zcWxFcnJvcikKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJz
cWxFcnJvciJfcywgb3V0X3NxbEVycm9yKTsKLSAgICAgICAgaWYgKG91dF9zY3JlZW5Db2xvci5o
YXNWYWx1ZSgpKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9z
LCAqb3V0X3NjcmVlbkNvbG9yKTsKLSAgICAgICAgaWYgKG91dF9hbHRlcm5hdGVDb2xvcnMpCi0g
ICAgICAgICAgICByZXN1bHQtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIG91dF9hbHRl
cm5hdGVDb2xvcnMpOwotICAgICAgICBpZiAob3V0X3ByaW50Q29sb3IuaGFzVmFsdWUoKSkKLSAg
ICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCAqb3V0X3ByaW50Q29s
b3IpOwotICAgIH0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNl
KTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29s
RXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Ci19
Ci0KLURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNPcHRp
b25hbFJldHVyblZhbHVlc0NhbGxiYWNrOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZh
bHVlc0NhbGxiYWNrKFJlZjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBiYWNrZW5kRGlzcGF0Y2hlciwg
aW50IGlkKSA6IEJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UoV1RGTW92ZShiYWNrZW5k
RGlzcGF0Y2hlciksIGlkKSB7IH0KLQotdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlcjo6RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjazo6c2VuZFN1
Y2Nlc3MoUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mJiBjb2x1bW5OYW1lcywgT3B0aW9u
YWw8U3RyaW5nPiYgbm90ZXMsIE9wdGlvbmFsPGRvdWJsZT4mIHRpbWVzdGFtcCwgT3B0aW9uYWw8
SlNPTjo6T2JqZWN0PiYgdmFsdWVzLCBPcHRpb25hbDxKU09OOjpWYWx1ZT4mIHBheWxvYWQsIE9w
dGlvbmFsPGludD4mIGRhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6RXJyb3I+JiYgc3FsRXJyb3IsIE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpQcmltYXJ5Q29sb3JzPiBzY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiYgYWx0ZXJuYXRlQ29sb3JzLCBPcHRpb25hbDxE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvcj4gcHJpbnRDb2xvcikK
LXsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7Ci0gICAgaWYgKGNvbHVtbk5hbWVzKQotICAgICAgICBqc29uTWVzc2FnZS0+c2V0QXJy
YXkoImNvbHVtbk5hbWVzIl9zLCBjb2x1bW5OYW1lcyk7Ci0gICAgaWYgKG5vdGVzLmhhc1ZhbHVl
KCkpCi0gICAgICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm5vdGVzIl9zLCAqbm90ZXMpOwot
ICAgIGlmICh0aW1lc3RhbXAuaGFzVmFsdWUoKSkKLSAgICAgICAganNvbk1lc3NhZ2UtPnNldERv
dWJsZSgidGltZXN0YW1wIl9zLCAqdGltZXN0YW1wKTsKLSAgICBpZiAodmFsdWVzLmhhc1ZhbHVl
KCkpCi0gICAgICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoInZhbHVlcyJfcywgKnZhbHVlcyk7
Ci0gICAgaWYgKHBheWxvYWQuaGFzVmFsdWUoKSkKLSAgICAgICAganNvbk1lc3NhZ2UtPnNldFZh
bHVlKCJwYXlsb2FkIl9zLCAqcGF5bG9hZCk7Ci0gICAgaWYgKGRhdGFiYXNlSWQuaGFzVmFsdWUo
KSkKLSAgICAgICAganNvbk1lc3NhZ2UtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsICpkYXRh
YmFzZUlkKTsKLSAgICBpZiAoc3FsRXJyb3IpCi0gICAgICAgIGpzb25NZXNzYWdlLT5zZXRPYmpl
Y3QoInNxbEVycm9yIl9zLCBzcWxFcnJvcik7Ci0gICAgaWYgKHNjcmVlbkNvbG9yLmhhc1ZhbHVl
KCkpCi0gICAgICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCAqc2Ny
ZWVuQ29sb3IpOwotICAgIGlmIChhbHRlcm5hdGVDb2xvcnMpCi0gICAgICAgIGpzb25NZXNzYWdl
LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCBhbHRlcm5hdGVDb2xvcnMpOwotICAgIGlm
IChwcmludENvbG9yLmhhc1ZhbHVlKCkpCi0gICAgICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmco
InByaW50Q29sb3IiX3MsICpwcmludENvbG9yKTsKLSAgICBDYWxsYmFja0Jhc2U6OnNlbmRTdWNj
ZXNzKFdURk1vdmUoanNvbk1lc3NhZ2UpKTsKLX0KLQotdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVyOjpleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHJlcXVlc3RJ
ZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKQotewotICAgIGludCBpbl9kYXRh
YmFzZUlkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0SW50ZWdlcihwYXJhbWV0ZXJzLmdldCgp
LCAiZGF0YWJhc2VJZCJfcywgbnVsbHB0cik7Ci0gICAgU3RyaW5nIGluX3F1ZXJ5ID0gbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksICJxdWVyeSJfcywgbnVs
bHB0cik7Ci0gICAgaWYgKG1fYmFja2VuZERpc3BhdGNoZXItPmhhc1Byb3RvY29sRXJyb3JzKCkp
IHsKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNr
ZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAn
RGF0YWJhc2UuZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMnIGNhbid0IGJlIHBy
b2Nlc3NlZCJfcyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSNpZiBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVy
KSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZVNRTEFzeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXMocmVxdWVzdElkLCBpbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIFJlZjxEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFj
az4gY2FsbGJhY2sgPSBhZG9wdFJlZigqbmV3IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrKG1fYmFja2Vu
ZERpc3BhdGNoZXIuY29weVJlZigpLCByZXF1ZXN0SWQpKTsKLSAgICBtX2FnZW50LT5leGVjdXRl
U1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhpbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSwgY2Fs
bGJhY2suY29weVJlZigpKTsKLQotfQotCi12b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6
OmV4ZWN1dGVTUUxTeW5jKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBh
cmFtZXRlcnMpCi17Ci0gICAgaW50IGluX2RhdGFiYXNlSWQgPSBtX2JhY2tlbmREaXNwYXRjaGVy
LT5nZXRJbnRlZ2VyKHBhcmFtZXRlcnMuZ2V0KCksICJkYXRhYmFzZUlkIl9zLCBudWxscHRyKTsK
LSAgICBTdHJpbmcgaW5fcXVlcnkgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFy
YW1ldGVycy5nZXQoKSwgInF1ZXJ5Il9zLCBudWxscHRyKTsKLSAgICBpZiAobV9iYWNrZW5kRGlz
cGF0Y2hlci0+aGFzUHJvdG9jb2xFcnJvcnMoKSkgewotICAgICAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1z
LCAiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICdEYXRhYmFzZS5leGVjdXRlU1FMU3luYycgY2Fu
J3QgYmUgcHJvY2Vzc2VkIl9zKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotI2lmIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotICAgIGlmIChtX2FsdGVybmF0ZURp
c3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5leGVjdXRlU1FMU3lu
YyhyZXF1ZXN0SWQsIGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5KTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSNlbmRpZgotCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9i
amVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8SlNPTjo6
QXJyYXlPZjxTdHJpbmc+PiBvdXRfY29sdW1uTmFtZXM7Ci0gICAgU3RyaW5nIG91dF9ub3RlczsK
LSAgICBkb3VibGUgb3V0X3RpbWVzdGFtcDsKLSAgICBKU09OOjpPYmplY3Qgb3V0X3ZhbHVlczsK
LSAgICBKU09OOjpWYWx1ZSBvdXRfcGF5bG9hZDsKLSAgICBpbnQgb3V0X2RhdGFiYXNlSWQ7Ci0g
ICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gb3V0X3NxbEVy
cm9yOwotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0
PiBvdXRfYWx0ZXJuYXRlQ29sb3JzOwotICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNl
OjpQcmltYXJ5Q29sb3JzIG91dF9zY3JlZW5Db2xvcjsKLSAgICBEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciBvdXRfcHJpbnRDb2xvcjsKLSAgICBtX2FnZW50LT5l
eGVjdXRlU1FMU3luYyhlcnJvciwgaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnksIG91dF9jb2x1bW5O
YW1lcywgJm91dF9ub3RlcywgJm91dF90aW1lc3RhbXAsIG91dF92YWx1ZXMsICZvdXRfcGF5bG9h
ZCwgJm91dF9kYXRhYmFzZUlkLCBvdXRfc3FsRXJyb3IsIG91dF9hbHRlcm5hdGVDb2xvcnMsICZv
dXRfc2NyZWVuQ29sb3IsICZvdXRfcHJpbnRDb2xvcik7Ci0KLSAgICBpZiAoIWVycm9yLmxlbmd0
aCgpKSB7Ci0gICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBvdXRfY29s
dW1uTmFtZXMpOwotICAgICAgICByZXN1bHQtPnNldFN0cmluZygibm90ZXMiX3MsIG91dF9ub3Rl
cyk7Ci0gICAgICAgIHJlc3VsdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIG91dF90aW1lc3Rh
bXApOwotICAgICAgICByZXN1bHQtPnNldE9iamVjdCgidmFsdWVzIl9zLCBvdXRfdmFsdWVzKTsK
LSAgICAgICAgcmVzdWx0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgb3V0X3BheWxvYWQpOwotICAg
ICAgICByZXN1bHQtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsIG91dF9kYXRhYmFzZUlkKTsK
LSAgICAgICAgcmVzdWx0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBvdXRfc3FsRXJyb3IpOwot
ICAgICAgICByZXN1bHQtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIG91dF9hbHRlcm5h
dGVDb2xvcnMpOwotICAgICAgICByZXN1bHQtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsIElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShvdXRf
c2NyZWVuQ29sb3IpKTsKLSAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3Ms
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShv
dXRfcHJpbnRDb2xvcikpOwotICAgIH0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJl
c3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJl
cG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3Zl
KGVycm9yKSk7Ci19Ci0KLURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRl
U1FMQXN5bmNDYWxsYmFjazo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2soUmVmPEJhY2tlbmREaXNw
YXRjaGVyPiYmIGJhY2tlbmREaXNwYXRjaGVyLCBpbnQgaWQpIDogQmFja2VuZERpc3BhdGNoZXI6
OkNhbGxiYWNrQmFzZShXVEZNb3ZlKGJhY2tlbmREaXNwYXRjaGVyKSwgaWQpIHsgfQotCi12b2lk
IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNDYWxsYmFj
azo6c2VuZFN1Y2Nlc3MoUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mJiBjb2x1bW5OYW1l
cywgY29uc3QgU3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgSlNPTjo6T2JqZWN0IHZh
bHVlcywgSlNPTjo6VmFsdWUgcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiYgc3FsRXJyb3IsIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzIHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4mJiBhbHRlcm5hdGVDb2xvcnMsIERh
dGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yIHByaW50Q29sb3IpCi17
Ci0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIGNvbHVtbk5h
bWVzKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJub3RlcyJfcywgbm90ZXMpOwotICAg
IGpzb25NZXNzYWdlLT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgdGltZXN0YW1wKTsKLSAgICBq
c29uTWVzc2FnZS0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIHZhbHVlcyk7Ci0gICAganNvbk1lc3Nh
Z2UtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBwYXlsb2FkKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0
SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgZGF0YWJhc2VJZCk7Ci0gICAganNvbk1lc3NhZ2UtPnNl
dE9iamVjdCgic3FsRXJyb3IiX3MsIHNxbEVycm9yKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3Ry
aW5nKCJzY3JlZW5Db2xvciJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6Omdl
dEVudW1Db25zdGFudFZhbHVlKHNjcmVlbkNvbG9yKSk7Ci0gICAganNvbk1lc3NhZ2UtPnNldEFy
cmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIGFsdGVybmF0ZUNvbG9ycyk7Ci0gICAganNvbk1lc3Nh
Z2UtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhl
bHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKHByaW50Q29sb3IpKTsKLSAgICBDYWxsYmFja0Jh
c2U6OnNlbmRTdWNjZXNzKFdURk1vdmUoanNvbk1lc3NhZ2UpKTsKLX0KLQotdm9pZCBEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMQXN5bmMobG9uZyByZXF1ZXN0SWQsIFJlZlB0
cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycykKLXsKLSAgICBpbnQgaW5fZGF0YWJhc2VJZCA9
IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEludGVnZXIocGFyYW1ldGVycy5nZXQoKSwgImRhdGFi
YXNlSWQiX3MsIG51bGxwdHIpOwotICAgIFN0cmluZyBpbl9xdWVyeSA9IG1fYmFja2VuZERpc3Bh
dGNoZXItPmdldFN0cmluZyhwYXJhbWV0ZXJzLmdldCgpLCAicXVlcnkiX3MsIG51bGxwdHIpOwot
ICAgIGlmIChtX2JhY2tlbmREaXNwYXRjaGVyLT5oYXNQcm90b2NvbEVycm9ycygpKSB7Ci0gICAg
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3Bh
dGNoZXI6OkludmFsaWRQYXJhbXMsICJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJ0RhdGFiYXNl
LmV4ZWN1dGVTUUxBc3luYycgY2FuJ3QgYmUgcHJvY2Vzc2VkIl9zKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQot
ICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNw
YXRjaGVyLT5leGVjdXRlU1FMQXN5bmMocmVxdWVzdElkLCBpbl9kYXRhYmFzZUlkLCBpbl9xdWVy
eSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIFJlZjxEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2s+IGNhbGxiYWNr
ID0gYWRvcHRSZWYoKm5ldyBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0
ZVNRTEFzeW5jQ2FsbGJhY2sobV9iYWNrZW5kRGlzcGF0Y2hlci5jb3B5UmVmKCksIHJlcXVlc3RJ
ZCkpOwotICAgIG1fYWdlbnQtPmV4ZWN1dGVTUUxBc3luYyhpbl9kYXRhYmFzZUlkLCBpbl9xdWVy
eSwgY2FsbGJhY2suY29weVJlZigpKTsKLQotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
LQotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRl
ICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0K
LWNsYXNzIEZyb250ZW5kUm91dGVyOwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBF
bmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgot
Ci1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMj
IyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRp
b25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotbmFtZXNwYWNlIFByb3RvY29s
IHsKLQotCi0KLS8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgotbmFtZXNwYWNlIERhdGFiYXNlIHsK
LWNsYXNzIEVycm9yOwotZW51bSBjbGFzcyBQcmltYXJ5Q29sb3JzOwotfSAvLyBEYXRhYmFzZQot
Ly8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgotCi0KLS8vIFR5cGVkZWZzLgotbmFtZXNw
YWNlIERhdGFiYXNlIHsKLS8qIFVuaXF1ZSBpZGVudGlmaWVyIG9mIERhdGFiYXNlIG9iamVjdC4g
Ki8KLXR5cGVkZWYgaW50IERhdGFiYXNlSWQ7Ci10eXBlZGVmIEpTT046OkFycmF5T2Y8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IENvbG9yTGlzdDsKLX0gLy8g
RGF0YWJhc2UKLS8vIEVuZCBvZiB0eXBlZGVmcy4KLQotbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsK
LQotU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKTsKLQotdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKFQgZW51bVZhbHVlKQotewotICAg
IHJldHVybiBnZXRFbnVtQ29uc3RhbnRWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KGVudW1WYWx1ZSkp
OwotfQotCi19IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwotCi1uYW1lc3BhY2UgRGF0YWJhc2Ug
ewotLyogICovCi1lbnVtIGNsYXNzIFByaW1hcnlDb2xvcnMgewotICAgIFJlZCA9IDAsCi0gICAg
R3JlZW4gPSAxLAotICAgIEJsdWUgPSAyLAotfTsgLy8gZW51bSBjbGFzcyBQcmltYXJ5Q29sb3Jz
Ci0vKiBEYXRhYmFzZSBlcnJvci4gKi8KLWNsYXNzIEVycm9yIDogcHVibGljIEpTT046Ok9iamVj
dEJhc2UgewotcHVibGljOgotICAgIGVudW0gewotICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCi0g
ICAgICAgIE1lc3NhZ2VTZXQgPSAxIDw8IDAsCi0gICAgICAgIENvZGVTZXQgPSAxIDw8IDEsCi0g
ICAgICAgIEFsbEZpZWxkc1NldCA9IChNZXNzYWdlU2V0IHwgQ29kZVNldCkKLSAgICB9OwotCi0g
ICAgdGVtcGxhdGU8aW50IFNUQVRFPgotICAgIGNsYXNzIEJ1aWxkZXIgewotICAgIHByaXZhdGU6
Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVzdWx0OwotCi0gICAgICAgIHRlbXBs
YXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwg
U1RFUD4qPih0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXIoUmVmPC8qRXJyb3Iq
L0pTT046Ok9iamVjdD4mJiBvYmplY3QpCi0gICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUo
b2JqZWN0KSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0g
Tm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7Ci0gICAgICAg
IH0KLSAgICAgICAgZnJpZW5kIGNsYXNzIEVycm9yOwotICAgIHB1YmxpYzoKLQotICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgTWVzc2FnZVNldD4mIHNldE1lc3NhZ2UoY29uc3QgU3RyaW5nJiB2YWx1
ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE1lc3Nh
Z2VTZXQpLCBwcm9wZXJ0eV9tZXNzYWdlX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXRTdHJpbmcoIm1lc3NhZ2UiX3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8TWVzc2FnZVNldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBDb2RlU2V0PiYgc2V0Q29kZShpbnQgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2RlU2V0KSwgcHJvcGVydHlfY29kZV9hbHJlYWR5
X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcigiY29kZSJfcywgdmFsdWUp
OwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb2RlU2V0PigpOwotICAgICAgICB9Ci0K
LSAgICAgICAgUmVmPEVycm9yPiByZWxlYXNlKCkKLSAgICAgICAgewotICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsK
LSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihFcnJvcikgPT0gc2l6ZW9mKEpTT046
Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsKLQotICAgICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4g
anNvblJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7Ci0gICAgICAgICAgICBhdXRv
IHJlc3VsdCA9IFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPEVycm9yPio+KCZqc29uUmVz
dWx0KSk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgfTsKLQot
ICAgIC8qCi0gICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgotICAgICAqIFJlZjxFcnJvcj4g
cmVzdWx0ID0gRXJyb3I6OmNyZWF0ZSgpCi0gICAgICogICAgIC5zZXRNZXNzYWdlKC4uLikKLSAg
ICAgKiAgICAgLnNldENvZGUoLi4uKQotICAgICAqICAgICAucmVsZWFzZSgpOwotICAgICAqLwot
ICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOwotICAg
IH0KLX07Ci0KLX0gLy8gRGF0YWJhc2UKLQotCi0KLW5hbWVzcGFjZSBUZXN0SGVscGVycyB7Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIFByb3RvY29sRW51bVR5cGU+Ci1PcHRpb25hbDxQcm90b2NvbEVu
dW1UeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJik7Ci0KLS8vIEVu
dW1zIGluIHRoZSAnRGF0YWJhc2UnIERvbWFpbgotdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IHBhcnNlRW51bVZhbHVlRnJv
bVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4oY29u
c3QgU3RyaW5nJik7Ci0KLX0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCi0KLX0gLy8gbmFtZXNw
YWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi1uYW1lc3BhY2UgV1RG
IHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwotCi0vLyBIYXNo
IGRlY2xhcmF0aW9ucyBpbiB0aGUgJ0RhdGFiYXNlJyBEb21haW4KLXRlbXBsYXRlPD4KLXN0cnVj
dCBEZWZhdWx0SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9y
cz4gewotICAgIHR5cGVkZWYgSW50SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6
UHJpbWFyeUNvbG9ycz4gSGFzaDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgotIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bE9iamVjdHMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMt
d2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29s
T2JqZWN0cy5oIgotCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotbmFtZXNwYWNlIFByb3Rv
Y29sIHsKLQotbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGNv
bnN0IGVudW1fY29uc3RhbnRfdmFsdWVzW10gPSB7Ci0gICAgInJlZCIsCi0gICAgImdyZWVuIiwK
LSAgICAiYmx1ZSIsCi0gICAgImN5YW4iLAotICAgICJtYWdlbnRhIiwKLSAgICAieWVsbG93IiwK
LSAgICAiYmxhY2siLAotfTsKLQotU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2Rl
KSB7Ci0gICAgcmV0dXJuIGVudW1fY29uc3RhbnRfdmFsdWVzW2NvZGVdOwotfQotCi0vLyBFbnVt
cyBpbiB0aGUgJ0RhdGFiYXNlJyBEb21haW4KLXRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiBwYXJzZUVudW1WYWx1ZUZyb21T
dHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+KGNvbnN0
IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCi17Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25z
dGFudFZhbHVlc1tdID0gewotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpQcmltYXJ5Q29sb3JzOjpSZWQsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM6OkdyZWVuLAotICAgICAgICAoc2l6ZV90
KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzOjpCbHVlLAotICAg
IH07Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAzOyArK2kpCi0gICAgICAgIGlmIChwcm90
b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCi0g
ICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5
Q29sb3JzKWNvbnN0YW50VmFsdWVzW2ldOwotCi0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0K
LQotCi19IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJv
dG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sT2JqZWN0cy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmRE
aXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMt
d2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRl
QmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi1AcHJv
dG9jb2wgVGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyOwotCi1uYW1lc3BhY2UgSW5z
cGVjdG9yIHsKLQotCi1jbGFzcyBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
ciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyIHsKLSAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBPYmpDSW5zcGVjdG9yRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRs
ZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KLSAgICB2b2lkIGV4ZWN1dGVT
UUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0SWQsIGludCBpbl9kYXRhYmFz
ZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KSBmaW5hbDsKLSAgICB2b2lkIGV4ZWN1dGVTUUxB
c3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVzdElkLCBpbnQgaW5fZGF0YWJhc2VJ
ZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkgZmluYWw7Ci0gICAgdm9pZCBleGVjdXRlU1FMU3lu
Yyhsb25nIHJlcXVlc3RJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVl
cnkpIGZpbmFsOwotICAgIHZvaWQgZXhlY3V0ZVNRTEFzeW5jKGxvbmcgcmVxdWVzdElkLCBpbnQg
aW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkgZmluYWw7Ci1wcml2YXRlOgot
ICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+PiBtX2Rl
bGVnYXRlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0
ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgIlRlc3RQcm90
b2NvbEludGVybmFsLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgi
Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0K
LXZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxT
eW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0SWQsIGludCBpbl9kYXRhYmFzZUlk
LCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KQotewotICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9u
ZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVz
V2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOmRhdGFiYXNlSWQ6cXVlcnk6KV0pIHsK
LSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0
SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS5leGVjdXRl
U1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzJyB3YXMgbm90IGZvdW5kIl9zKTsKLSAgICAgICAg
YmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewot
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJ
ZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7Ci0gICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgfTsKLQotICAgIGlkIHN1
Y2Nlc3NDYWxsYmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiovICoqY29sdW1uTmFtZXMsIE5T
U3RyaW5nICoqbm90ZXMsIGRvdWJsZSAqdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3Qg
Kip2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnBheWxvYWQsIGludCAqZGF0YWJhc2VJ
ZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRh
YmFzZVByaW1hcnlDb2xvcnMgKnNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiph
bHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25h
bFJldHVyblZhbHVlc1ByaW50Q29sb3IgKnByaW50Q29sb3IpIHsKLSAgICAgICAgUmVmPEpTT046
Ok9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICAgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKGNvbHVtbk5hbWVzLCBA
ImNvbHVtbk5hbWVzIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFM
X1BBUkFNRVRFUihub3RlcywgQCJub3RlcyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9S
X0JBRF9PUFRJT05BTF9QQVJBTUVURVIodmFsdWVzLCBAInZhbHVlcyIpOwotICAgICAgICBUSFJP
V19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIocGF5bG9hZCwgQCJwYXlsb2Fk
Iik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihz
cWxFcnJvciwgQCJzcWxFcnJvciIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9P
UFRJT05BTF9QQVJBTUVURVIoYWx0ZXJuYXRlQ29sb3JzLCBAImFsdGVybmF0ZUNvbG9ycyIpOwot
ICAgICAgICBpZiAoY29sdW1uTmFtZXMpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldEFy
cmF5KCJjb2x1bW5OYW1lcyJfcywgdG9KU09OU3RyaW5nQXJyYXkoKmNvbHVtbk5hbWVzKSk7Ci0g
ICAgICAgIGlmIChub3RlcykKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJu
b3RlcyJfcywgKm5vdGVzKTsKLSAgICAgICAgaWYgKHRpbWVzdGFtcCkKLSAgICAgICAgICAgIHJl
c3VsdE9iamVjdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICp0aW1lc3RhbXApOwotICAgICAg
ICBpZiAodmFsdWVzKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInZhbHVl
cyJfcywgWyp2YWx1ZXMgdG9KU09OT2JqZWN0XSk7Ci0gICAgICAgIGlmIChwYXlsb2FkKQotICAg
ICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgWypwYXlsb2FkIHRv
SlNPTk9iamVjdF0pOwotICAgICAgICBpZiAoZGF0YWJhc2VJZCkKLSAgICAgICAgICAgIHJlc3Vs
dE9iamVjdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgKmRhdGFiYXNlSWQpOwotICAgICAg
ICBpZiAoc3FsRXJyb3IpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdCgic3Fs
RXJyb3IiX3MsIFsqc3FsRXJyb3IgdG9KU09OT2JqZWN0XSk7Ci0gICAgICAgIGlmIChzY3JlZW5D
b2xvcikKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJf
cywgdG9Qcm90b2NvbFN0cmluZygqc2NyZWVuQ29sb3IpKTsKLSAgICAgICAgaWYgKGFsdGVybmF0
ZUNvbG9ycykKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNv
bG9ycyJfcywgdG9KU09OU3RyaW5nQXJyYXkoKmFsdGVybmF0ZUNvbG9ycykpOwotICAgICAgICBp
ZiAocHJpbnRDb2xvcikKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJwcmlu
dENvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKCpwcmludENvbG9yKSk7Ci0gICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0T2Jq
ZWN0KSwgZmFsc2UpOwotICAgIH07Ci0KLSAgICBpbnQgb19pbl9kYXRhYmFzZUlkID0gaW5fZGF0
YWJhc2VJZDsKLSAgICBOU1N0cmluZyAqb19pbl9xdWVyeSA9IGluX3F1ZXJ5OwotCi0gICAgW21f
ZGVsZWdhdGUgZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1dpdGhFcnJvckNhbGxi
YWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjayBkYXRhYmFz
ZUlkOm9faW5fZGF0YWJhc2VJZCBxdWVyeTpvX2luX3F1ZXJ5XTsKLX0KLQotdm9pZCBPYmpDSW5z
cGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxS
ZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0SWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJp
bmcmIGluX3F1ZXJ5KQotewotICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9y
OkBzZWxlY3RvcihleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1dpdGhFcnJvckNh
bGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazpkYXRhYmFzZUlkOnF1ZXJ5OildKSB7Ci0gICAgICAgIGJh
Y2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5k
RGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRGF0YWJhc2UuZXhlY3V0ZVNRTEFzeW5jT3B0
aW9uYWxSZXR1cm5WYWx1ZXMnIHdhcyBub3QgZm91bmQiX3MpOwotICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAgICAgIGJh
Y2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5k
RGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICB9OwotCi0gICAgaWQgc3VjY2Vzc0NhbGxi
YWNrID0gXihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKipjb2x1bW5OYW1lcywgTlNTdHJpbmcgKipu
b3RlcywgZG91YmxlICp0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnZhbHVlcywg
UldJUHJvdG9jb2xKU09OT2JqZWN0ICoqcGF5bG9hZCwgaW50ICpkYXRhYmFzZUlkLCBUZXN0UHJv
dG9jb2xEYXRhYmFzZUVycm9yICoqc3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFy
eUNvbG9ycyAqc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmFsdGVybmF0ZUNv
bG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZh
bHVlc1ByaW50Q29sb3IgKnByaW50Q29sb3IpIHsKLSAgICAgICAgUmVmPEpTT046Ok9iamVjdD4g
cmVzdWx0T2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICAgICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5h
bWVzIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRF
Uihub3RlcywgQCJub3RlcyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJ
T05BTF9QQVJBTUVURVIodmFsdWVzLCBAInZhbHVlcyIpOwotICAgICAgICBUSFJPV19FWENFUFRJ
T05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIocGF5bG9hZCwgQCJwYXlsb2FkIik7Ci0gICAg
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihzcWxFcnJvciwg
QCJzcWxFcnJvciIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9Q
QVJBTUVURVIoYWx0ZXJuYXRlQ29sb3JzLCBAImFsdGVybmF0ZUNvbG9ycyIpOwotICAgICAgICBp
ZiAoY29sdW1uTmFtZXMpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJjb2x1
bW5OYW1lcyJfcywgdG9KU09OU3RyaW5nQXJyYXkoKmNvbHVtbk5hbWVzKSk7Ci0gICAgICAgIGlm
IChub3RlcykKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJub3RlcyJfcywg
Km5vdGVzKTsKLSAgICAgICAgaWYgKHRpbWVzdGFtcCkKLSAgICAgICAgICAgIHJlc3VsdE9iamVj
dC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICp0aW1lc3RhbXApOwotICAgICAgICBpZiAodmFs
dWVzKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgWyp2
YWx1ZXMgdG9KU09OT2JqZWN0XSk7Ci0gICAgICAgIGlmIChwYXlsb2FkKQotICAgICAgICAgICAg
cmVzdWx0T2JqZWN0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgWypwYXlsb2FkIHRvSlNPTk9iamVj
dF0pOwotICAgICAgICBpZiAoZGF0YWJhc2VJZCkKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+
c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgKmRhdGFiYXNlSWQpOwotICAgICAgICBpZiAoc3Fs
RXJyb3IpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdCgic3FsRXJyb3IiX3Ms
IFsqc3FsRXJyb3IgdG9KU09OT2JqZWN0XSk7Ci0gICAgICAgIGlmIChzY3JlZW5Db2xvcikKLSAg
ICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgdG9Qcm90
b2NvbFN0cmluZygqc2NyZWVuQ29sb3IpKTsKLSAgICAgICAgaWYgKGFsdGVybmF0ZUNvbG9ycykK
LSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywg
dG9KU09OU3RyaW5nQXJyYXkoKmFsdGVybmF0ZUNvbG9ycykpOwotICAgICAgICBpZiAocHJpbnRD
b2xvcikKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9z
LCB0b1Byb3RvY29sU3RyaW5nKCpwcmludENvbG9yKSk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0T2JqZWN0KSwgZmFs
c2UpOwotICAgIH07Ci0KLSAgICBpbnQgb19pbl9kYXRhYmFzZUlkID0gaW5fZGF0YWJhc2VJZDsK
LSAgICBOU1N0cmluZyAqb19pbl9xdWVyeSA9IGluX3F1ZXJ5OwotCi0gICAgW21fZGVsZWdhdGUg
ZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNXaXRoRXJyb3JDYWxsYmFjazplcnJv
ckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDpvX2lu
X2RhdGFiYXNlSWQgcXVlcnk6b19pbl9xdWVyeV07Ci19Ci0KLXZvaWQgT2JqQ0luc3BlY3RvckRh
dGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5jKGxvbmcgcmVxdWVzdElkLCBp
bnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkKLXsKLSAgICBpZiAoIVtt
X2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoZXhlY3V0ZVNRTFN5bmNXaXRo
RXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6ZGF0YWJhc2VJZDpxdWVyeTopXSkgewotICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwg
QmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RhdGFiYXNlLmV4ZWN1dGVTUUxT
eW5jJyB3YXMgbm90IGZvdW5kIl9zKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2Vu
ZFBlbmRpbmdFcnJvcnMoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlkIGVycm9y
Q2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNl
cnZlckVycm9yLCBlcnJvcik7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5k
aW5nRXJyb3JzKCk7Ci0gICAgfTsKLQotICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oTlNBcnJh
eS8qPE5TU3RyaW5nPiovICpjb2x1bW5OYW1lcywgTlNTdHJpbmcgKm5vdGVzLCBkb3VibGUgdGlt
ZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2Jq
ZWN0ICpwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAq
c3FsRXJyb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJv
dG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIFRlc3RQcm90b2NvbERhdGFi
YXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yIHByaW50Q29sb3IpIHsKLSAgICAgICAgUmVmPEpT
T046Ok9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICAg
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoY29sdW1uTmFtZXMsIEAi
Y29sdW1uTmFtZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJB
TUVURVIobm90ZXMsIEAibm90ZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFV
SVJFRF9QQVJBTUVURVIodmFsdWVzLCBAInZhbHVlcyIpOwotICAgICAgICBUSFJPV19FWENFUFRJ
T05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihwYXlsb2FkLCBAInBheWxvYWQiKTsKLSAgICAgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoc3FsRXJyb3IsIEAic3FsRXJy
b3IiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoYWx0
ZXJuYXRlQ29sb3JzLCBAImFsdGVybmF0ZUNvbG9ycyIpOwotICAgICAgICByZXN1bHRPYmplY3Qt
PnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgdG9KU09OU3RyaW5nQXJyYXkoY29sdW1uTmFtZXMp
KTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBub3Rlcyk7Ci0g
ICAgICAgIHJlc3VsdE9iamVjdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIHRpbWVzdGFtcCk7
Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFt2YWx1ZXMgdG9K
U09OT2JqZWN0XSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3Ms
IFtwYXlsb2FkIHRvSlNPTk9iamVjdF0pOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldEludGVn
ZXIoImRhdGFiYXNlSWQiX3MsIGRhdGFiYXNlSWQpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNl
dE9iamVjdCgic3FsRXJyb3IiX3MsIFtzcWxFcnJvciB0b0pTT05PYmplY3RdKTsKLSAgICAgICAg
cmVzdWx0T2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCB0b0pTT05TdHJpbmdB
cnJheShhbHRlcm5hdGVDb2xvcnMpKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmco
InNjcmVlbkNvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKHNjcmVlbkNvbG9yKSk7Ci0gICAgICAg
IHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5n
KHByaW50Q29sb3IpKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNl
KHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHRPYmplY3QpLCBmYWxzZSk7Ci0gICAgfTsKLQotICAg
IGludCBvX2luX2RhdGFiYXNlSWQgPSBpbl9kYXRhYmFzZUlkOwotICAgIE5TU3RyaW5nICpvX2lu
X3F1ZXJ5ID0gaW5fcXVlcnk7Ci0KLSAgICBbbV9kZWxlZ2F0ZSBleGVjdXRlU1FMU3luY1dpdGhF
cnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFj
ayBkYXRhYmFzZUlkOm9faW5fZGF0YWJhc2VJZCBxdWVyeTpvX2luX3F1ZXJ5XTsKLX0KLQotdm9p
ZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTEFzeW5j
KGxvbmcgcmVxdWVzdElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVy
eSkKLXsKLSAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Io
ZXhlY3V0ZVNRTEFzeW5jV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOmRhdGFiYXNl
SWQ6cXVlcnk6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9j
b2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidE
YXRhYmFzZS5leGVjdXRlU1FMQXN5bmMnIHdhcyBub3QgZm91bmQiX3MpOwotICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBC
YWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKLSAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICB9OwotCi0gICAgaWQgc3VjY2Vz
c0NhbGxiYWNrID0gXihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmNvbHVtbk5hbWVzLCBOU1N0cmlu
ZyAqbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqdmFsdWVz
LCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBUZXN0UHJv
dG9jb2xEYXRhYmFzZUVycm9yICpzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5
Q29sb3JzIHNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmFsdGVybmF0ZUNvbG9y
cywgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yIHByaW50Q29s
b3IpIHsKLSAgICAgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJB
TUVURVIoY29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIobm90ZXMsIEAibm90ZXMiKTsKLSAgICAgICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIodmFsdWVzLCBAInZhbHVlcyIpOwot
ICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihwYXlsb2FkLCBA
InBheWxvYWQiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVU
RVIoc3FsRXJyb3IsIEAic3FsRXJyb3IiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9S
RVFVSVJFRF9QQVJBTUVURVIoYWx0ZXJuYXRlQ29sb3JzLCBAImFsdGVybmF0ZUNvbG9ycyIpOwot
ICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgdG9KU09OU3Ry
aW5nQXJyYXkoY29sdW1uTmFtZXMpKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmco
Im5vdGVzIl9zLCBub3Rlcyk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0RG91YmxlKCJ0aW1l
c3RhbXAiX3MsIHRpbWVzdGFtcCk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KCJ2
YWx1ZXMiX3MsIFt2YWx1ZXMgdG9KU09OT2JqZWN0XSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+
c2V0VmFsdWUoInBheWxvYWQiX3MsIFtwYXlsb2FkIHRvSlNPTk9iamVjdF0pOwotICAgICAgICBy
ZXN1bHRPYmplY3QtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsIGRhdGFiYXNlSWQpOwotICAg
ICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIFtzcWxFcnJvciB0b0pT
T05PYmplY3RdKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9y
Il9zLCB0b1Byb3RvY29sU3RyaW5nKHNjcmVlbkNvbG9yKSk7Ci0gICAgICAgIHJlc3VsdE9iamVj
dC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5nQXJyYXkoYWx0ZXJu
YXRlQ29sb3JzKSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJwcmludENvbG9y
Il9zLCB0b1Byb3RvY29sU3RyaW5nKHByaW50Q29sb3IpKTsKLSAgICAgICAgYmFja2VuZERpc3Bh
dGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHRPYmplY3QpLCBm
YWxzZSk7Ci0gICAgfTsKLQotICAgIGludCBvX2luX2RhdGFiYXNlSWQgPSBpbl9kYXRhYmFzZUlk
OwotICAgIE5TU3RyaW5nICpvX2luX3F1ZXJ5ID0gaW5fcXVlcnk7Ci0KLSAgICBbbV9kZWxlZ2F0
ZSBleGVjdXRlU1FMQXN5bmNXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3ND
YWxsYmFjazpzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDpvX2luX2RhdGFiYXNlSWQgcXVlcnk6
b19pbl9xdWVyeV07Ci19Ci0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0
UHJvdG9jb2wuaD4KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1A
aW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAotQHByb3BlcnR5
IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNldERhdGFiYXNlSGFuZGxlcjopIGlkPFRlc3RQ
cm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4gZGF0YWJhc2VIYW5kbGVyOwotQGVuZAotCi0K
LSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgotLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xD
b25maWd1cmF0aW9uLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW1w
b3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0
Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0KLXVzaW5nIG5h
bWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1
cmF0aW9uCi17Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxl
cjsKLSAgICBpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+IF9kYXRhYmFzZUhh
bmRsZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRh
YmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIg
aW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChj
b250cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNl
bGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAgIFtfZGF0YWJhc2VIYW5kbGVyIHJlbGVh
c2VdOwotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAodm9pZClzZXREYXRhYmFzZUhhbmRs
ZXI6KGlkPFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4paGFuZGxlcgotewotICAg
IGlmIChoYW5kbGVyID09IF9kYXRhYmFzZUhhbmRsZXIpCi0gICAgICAgIHJldHVybjsKLQotICAg
IFtfZGF0YWJhc2VIYW5kbGVyIHJlbGVhc2VdOwotICAgIF9kYXRhYmFzZUhhbmRsZXIgPSBbaGFu
ZGxlciByZXRhaW5dOwotCi0gICAgYXV0byBhbHRlcm5hdGVEaXNwYXRjaGVyID0gbWFrZVVuaXF1
ZTxPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7Ci0gICAg
YXV0byBhbHRlcm5hdGVBZ2VudCA9IG1ha2VVbmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdl
bnQ8RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciwgQWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlcj4+KCJEYXRhYmFzZSJfcywgKl9jb250cm9sbGVyLCBXVEZNb3ZlKGFsdGVybmF0ZURp
c3BhdGNoZXIpKTsKLSAgICBfY29udHJvbGxlci0+YXBwZW5kRXh0cmFBZ2VudChXVEZNb3ZlKGFs
dGVybmF0ZUFnZW50KSk7Ci19Ci0KLS0gKGlkPFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFu
ZGxlcj4pZGF0YWJhc2VIYW5kbGVyCi17Ci0gICAgcmV0dXJuIF9kYXRhYmFzZUhhbmRsZXI7Ci19
Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0K
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0
ZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBv
cnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucy5oIgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNw
YWNlIEluc3BlY3RvcjsKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0
Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxGb3Vu
ZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29s
SlNPTk9iamVjdC5oPgotCi0KLUBjbGFzcyBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yOwotCi10
eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xQbGF0Zm9ybSkgewotICAgIFRl
c3RQcm90b2NvbFBsYXRmb3JtQWxsLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYywK
LSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1h
Y09TLAotfTsKLQotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xEYXRh
YmFzZVByaW1hcnlDb2xvcnMpIHsKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xv
cnNSZWQsCi0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzR3JlZW4sCi0gICAg
VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzQmx1ZSwKLX07Ci0KLXR5cGVkZWYgTlNf
RU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25h
bFJldHVyblZhbHVlc1ByaW50Q29sb3IpIHsKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yQ3lhbiwKLSAgICBUZXN0UHJv
dG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9y
TWFnZW50YSwKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxS
ZXR1cm5WYWx1ZXNQcmludENvbG9yWWVsbG93LAotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhl
Y3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JCbGFjaywKLX07Ci0KLXR5
cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFz
eW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yKSB7Ci0gICAgVGVzdFByb3RvY29sRGF0
YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JDeWFuLAot
ICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1
ZXNQcmludENvbG9yTWFnZW50YSwKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxB
c3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvclllbGxvdywKLSAgICBUZXN0UHJvdG9j
b2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvckJs
YWNrLAotfTsKLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGF0YWJh
c2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3IpIHsKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVTUUxTeW5jUHJpbnRDb2xvckN5YW4sCi0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVj
dXRlU1FMU3luY1ByaW50Q29sb3JNYWdlbnRhLAotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhl
Y3V0ZVNRTFN5bmNQcmludENvbG9yWWVsbG93LAotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhl
Y3V0ZVNRTFN5bmNQcmludENvbG9yQmxhY2ssCi19OwotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRl
Z2VyLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3IpIHsKLSAg
ICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JDeWFuLAotICAg
IFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvck1hZ2VudGEsCi0g
ICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yWWVsbG93LAot
ICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvckJsYWNrLAot
fTsKLQotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZh
Y2UgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciA6IFJXSVByb3RvY29sSlNPTk9iamVjdAotLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlk
PiAqKXBheWxvYWQ7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0
aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBjb2RlOihpbnQpY29kZTsKLS8qIHJlcXVpcmVk
ICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqbWVzc2FnZTsKLS8qIHJl
cXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCBjb2RlOwotQGVuZAot
Ci1AcHJvdG9jb2wgVGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyIDxOU09iamVjdD4K
LUBvcHRpb25hbAotLSAodm9pZClleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzV2l0
aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1
Y2Nlc3NDYWxsYmFjazoodm9pZCheKShOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKipjb2x1bW5OYW1l
cywgTlNTdHJpbmcgKipub3RlcywgZG91YmxlICp0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9i
amVjdCAqKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqcGF5bG9hZCwgaW50ICpkYXRh
YmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqc3FsRXJyb3IsIFRlc3RQcm90b2Nv
bERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4q
LyAqKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09w
dGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvciAqcHJpbnRDb2xvcikpc3VjY2Vzc0NhbGxiYWNr
IGRhdGFiYXNlSWQ6KGludClkYXRhYmFzZUlkIHF1ZXJ5OihOU1N0cmluZyAqKXF1ZXJ5OwotLSAo
dm9pZClleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1dpdGhFcnJvckNhbGxiYWNr
Oih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6
KHZvaWQoXikoTlNBcnJheS8qPE5TU3RyaW5nPiovICoqY29sdW1uTmFtZXMsIE5TU3RyaW5nICoq
bm90ZXMsIGRvdWJsZSAqdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKip2YWx1ZXMs
IFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnBheWxvYWQsIGludCAqZGF0YWJhc2VJZCwgVGVzdFBy
b3RvY29sRGF0YWJhc2VFcnJvciAqKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1h
cnlDb2xvcnMgKnNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiphbHRlcm5hdGVD
b2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXNQcmludENvbG9yICpwcmludENvbG9yKSlzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDoo
aW50KWRhdGFiYXNlSWQgcXVlcnk6KE5TU3RyaW5nICopcXVlcnk7Ci0tICh2b2lkKWV4ZWN1dGVT
UUxTeW5jV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNh
bGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKShOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmNv
bHVtbk5hbWVzLCBOU1N0cmluZyAqbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJXSVByb3RvY29s
SlNPTk9iamVjdCAqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnBheWxvYWQsIGludCBk
YXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpzcWxFcnJvciwgTlNBcnJheS8q
PE5TU3RyaW5nPiovICphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFy
eUNvbG9ycyBzY3JlZW5Db2xvciwgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1By
aW50Q29sb3IgcHJpbnRDb2xvcikpc3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNlSWQ6KGludClkYXRh
YmFzZUlkIHF1ZXJ5OihOU1N0cmluZyAqKXF1ZXJ5OwotLSAodm9pZClleGVjdXRlU1FMQXN5bmNX
aXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sg
c3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqY29sdW1uTmFt
ZXMsIE5TU3RyaW5nICpub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2Jq
ZWN0ICp2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5bG9hZCwgaW50IGRhdGFiYXNl
SWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRh
YmFzZVByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqYWx0
ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29s
b3IgcHJpbnRDb2xvcikpc3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNlSWQ6KGludClkYXRhYmFzZUlk
IHF1ZXJ5OihOU1N0cmluZyAqKXF1ZXJ5OwotQGVuZAotCi0KLQotCi0jaW1wb3J0IDxXZWJJbnNw
ZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+Ci0KLSMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVy
bmFsLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFz
eW5jLWF0dHJpYnV0ZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sSlNP
Tk9iamVjdFByaXZhdGUuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5z
cGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotCi0KLQot
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0j
aW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+Ci0KLW5h
bWVzcGFjZSBJbnNwZWN0b3IgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+Ci1P
cHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZh
bHVlKTsKLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFBsYXRm
b3JtIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29s
UGxhdGZvcm1BbGw6Ci0gICAgICAgIHJldHVybiAiYWxsIl9zOwotICAgIGNhc2UgVGVzdFByb3Rv
Y29sUGxhdGZvcm1HZW5lcmljOgotICAgICAgICByZXR1cm4gImdlbmVyaWMiX3M7Ci0gICAgY2Fz
ZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzoKLSAgICAgICAgcmV0dXJuICJpb3MiX3M7Ci0gICAg
Y2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOgotICAgICAgICByZXR1cm4gIm1hY29zIl9z
OwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFBs
YXRmb3JtPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBp
ZiAodmFsdWUgPT0gImFsbCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFs
bDsKLSAgICBpZiAodmFsdWUgPT0gImdlbmVyaWMiKQotICAgICAgICByZXR1cm4gVGVzdFByb3Rv
Y29sUGxhdGZvcm1HZW5lcmljOwotICAgIGlmICh2YWx1ZSA9PSAiaW9zIikKLSAgICAgICAgcmV0
dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOwotICAgIGlmICh2YWx1ZSA9PSAibWFjb3MiKQot
ICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzsKLSAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwotfQotCi0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJv
dG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7
Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNSZWQ6Ci0gICAgICAg
IHJldHVybiAicmVkIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29s
b3JzR3JlZW46Ci0gICAgICAgIHJldHVybiAiZ3JlZW4iX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9j
b2xEYXRhYmFzZVByaW1hcnlDb2xvcnNCbHVlOgotICAgICAgICByZXR1cm4gImJsdWUiX3M7Ci0g
ICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJh
c2VQcmltYXJ5Q29sb3JzPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkK
LXsKLSAgICBpZiAodmFsdWUgPT0gInJlZCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xE
YXRhYmFzZVByaW1hcnlDb2xvcnNSZWQ7Ci0gICAgaWYgKHZhbHVlID09ICJncmVlbiIpCi0gICAg
ICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNHcmVlbjsKLSAgICBp
ZiAodmFsdWUgPT0gImJsdWUiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VQ
cmltYXJ5Q29sb3JzQmx1ZTsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi1pbmxpbmUg
U3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3lu
Y09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvciB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFs
dWUpIHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25h
bFJldHVyblZhbHVlc1ByaW50Q29sb3JDeWFuOgotICAgICAgICByZXR1cm4gImN5YW4iX3M7Ci0g
ICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXNQcmludENvbG9yTWFnZW50YToKLSAgICAgICAgcmV0dXJuICJtYWdlbnRhIl9zOwotICAg
IGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFs
dWVzUHJpbnRDb2xvclllbGxvdzoKLSAgICAgICAgcmV0dXJuICJ5ZWxsb3ciX3M7Ci0gICAgY2Fz
ZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQ
cmludENvbG9yQmxhY2s6Ci0gICAgICAgIHJldHVybiAiYmxhY2siX3M7Ci0gICAgfQotfQotCi10
ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FM
U3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvcj4gZnJvbVByb3RvY29sU3RyaW5nKGNv
bnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJjeWFuIikKLSAgICAgICAg
cmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZh
bHVlc1ByaW50Q29sb3JDeWFuOwotICAgIGlmICh2YWx1ZSA9PSAibWFnZW50YSIpCi0gICAgICAg
IHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXNQcmludENvbG9yTWFnZW50YTsKLSAgICBpZiAodmFsdWUgPT0gInllbGxvdyIpCi0gICAg
ICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1
cm5WYWx1ZXNQcmludENvbG9yWWVsbG93OwotICAgIGlmICh2YWx1ZSA9PSAiYmxhY2siKQotICAg
ICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0
dXJuVmFsdWVzUHJpbnRDb2xvckJsYWNrOwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0K
LWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvciB2YWx1ZSkKLXsKLSAgICBz
d2l0Y2godmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFz
eW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yQ3lhbjoKLSAgICAgICAgcmV0dXJuICJj
eWFuIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRp
b25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JNYWdlbnRhOgotICAgICAgICByZXR1cm4gIm1hZ2Vu
dGEiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlv
bmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvclllbGxvdzoKLSAgICAgICAgcmV0dXJuICJ5ZWxsb3ci
X3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFs
UmV0dXJuVmFsdWVzUHJpbnRDb2xvckJsYWNrOgotICAgICAgICByZXR1cm4gImJsYWNrIl9zOwot
ICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFi
YXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yPiBmcm9tUHJv
dG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gImN5
YW4iKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNP
cHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JDeWFuOwotICAgIGlmICh2YWx1ZSA9PSAibWFn
ZW50YSIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3lu
Y09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvck1hZ2VudGE7Ci0gICAgaWYgKHZhbHVlID09
ICJ5ZWxsb3ciKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FM
QXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JZZWxsb3c7Ci0gICAgaWYgKHZhbHVl
ID09ICJibGFjayIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVT
UUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvckJsYWNrOwotICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7Ci19Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJv
dG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvciB2YWx1ZSkKLXsKLSAgICBzd2l0
Y2godmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQ
cmludENvbG9yQ3lhbjoKLSAgICAgICAgcmV0dXJuICJjeWFuIl9zOwotICAgIGNhc2UgVGVzdFBy
b3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3JNYWdlbnRhOgotICAgICAgICBy
ZXR1cm4gIm1hZ2VudGEiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVT
UUxTeW5jUHJpbnRDb2xvclllbGxvdzoKLSAgICAgICAgcmV0dXJuICJ5ZWxsb3ciX3M7Ci0gICAg
Y2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvckJsYWNrOgot
ICAgICAgICByZXR1cm4gImJsYWNrIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5l
IE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yPiBm
cm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUg
PT0gImN5YW4iKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FM
U3luY1ByaW50Q29sb3JDeWFuOwotICAgIGlmICh2YWx1ZSA9PSAibWFnZW50YSIpCi0gICAgICAg
IHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvck1hZ2Vu
dGE7Ci0gICAgaWYgKHZhbHVlID09ICJ5ZWxsb3ciKQotICAgICAgICByZXR1cm4gVGVzdFByb3Rv
Y29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3JZZWxsb3c7Ci0gICAgaWYgKHZhbHVl
ID09ICJibGFjayIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVT
UUxTeW5jUHJpbnRDb2xvckJsYWNrOwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLWlu
bGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVT
UUxBc3luY1ByaW50Q29sb3IgdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2Fz
ZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JDeWFuOgotICAg
ICAgICByZXR1cm4gImN5YW4iX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVTUUxBc3luY1ByaW50Q29sb3JNYWdlbnRhOgotICAgICAgICByZXR1cm4gIm1hZ2VudGEiX3M7
Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JZ
ZWxsb3c6Ci0gICAgICAgIHJldHVybiAieWVsbG93Il9zOwotICAgIGNhc2UgVGVzdFByb3RvY29s
RGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yQmxhY2s6Ci0gICAgICAgIHJldHVybiAi
YmxhY2siX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFBy
b3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yPiBmcm9tUHJvdG9jb2xTdHJp
bmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gImN5YW4iKQotICAg
ICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9y
Q3lhbjsKLSAgICBpZiAodmFsdWUgPT0gIm1hZ2VudGEiKQotICAgICAgICByZXR1cm4gVGVzdFBy
b3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yTWFnZW50YTsKLSAgICBpZiAo
dmFsdWUgPT0gInllbGxvdyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JZZWxsb3c7Ci0gICAgaWYgKHZhbHVlID09ICJibGFjayIp
Ci0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50
Q29sb3JCbGFjazsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi19IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMu
aAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1
dGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1w
b3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLQotI2ltcG9ydCAiVGVzdFByb3Rv
Y29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCi0jaW1wb3J0IDxXZWJJ
bnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotCi11c2luZyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yOwotCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAo
RGF0YWJhc2VEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlRGF0YWJhc2VJZDooTlNOdW1iZXIgKiop
b3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZVByaW1hcnlD
b2xvcnM6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotKyAo
dm9pZClfcGFyc2VDb2xvckxpc3Q6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKilvdXRWYWx1ZSBm
cm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLSsgKHZvaWQpX3BhcnNlRXJyb3I6KFRlc3RQcm90b2Nv
bERhdGFiYXNlRXJyb3IgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0KLUBl
bmQKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoRGF0YWJh
c2VEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlRGF0YWJhc2VJZDooTlNOdW1iZXIgKiopb3V0VmFs
dWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JB
RF9UWVBFKHBheWxvYWQsIFtOU051bWJlciBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IChOU051
bWJlciAqKXBheWxvYWQ7Ci19Ci0KLSsgKHZvaWQpX3BhcnNlUHJpbWFyeUNvbG9yczooTlNOdW1i
ZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENF
UFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBjbGFzc10pOwotICAgIE9wdGlv
bmFsPFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycz4gcmVzdWx0ID0gSW5zcGVjdG9y
Ojpmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzPihw
YXlsb2FkKTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9FTlVNX1ZBTFVFKHJlc3VsdCwg
QCJQcmltYXJ5Q29sb3JzIik7Ci0gICAgKm91dFZhbHVlID0gQChyZXN1bHQudmFsdWUoKSk7Ci19
Ci0KLSsgKHZvaWQpX3BhcnNlQ29sb3JMaXN0OihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopb3V0
VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9S
X0JBRF9UWVBFKHBheWxvYWQsIFtOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gY2xhc3NdKTsKLSAgICAq
b3V0VmFsdWUgPSAoTlNBcnJheS8qPE5TU3RyaW5nPiovICopcGF5bG9hZDsKLX0KLQotKyAodm9p
ZClfcGFyc2VFcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKilvdXRWYWx1ZSBmcm9t
UGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUo
cGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IFtbVGVzdFBy
b3RvY29sRGF0YWJhc2VFcnJvciBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOwotfQot
Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0K
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJv
dG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMu
aCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+
Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4K
LQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi1AaW1wbGVtZW50YXRpb24gVGVzdFBy
b3RvY29sRGF0YWJhc2VFcnJvcgotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihu
b25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCi17Ci0gICAgaWYg
KCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBUSFJP
V19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJtZXNzYWdlIl0sIEAi
bWVzc2FnZSIpOwotICAgIHNlbGYubWVzc2FnZSA9IHBheWxvYWRbQCJtZXNzYWdlIl07Ci0KLSAg
ICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJjb2RlIl0s
IEAiY29kZSIpOwotICAgIHNlbGYuY29kZSA9IFtwYXlsb2FkW0AiY29kZSJdIGludGVnZXJWYWx1
ZV07Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3Rv
Y29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilvYmplY3QKLXsKLSAgICBpZiAoIShz
ZWxmID0gW3N1cGVyIGluaXRXaXRoSlNPTk9iamVjdDpbb2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0
KCldKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZTooaW50
KWNvZGUKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJu
IG5pbDsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkobWVzc2Fn
ZSwgQCJtZXNzYWdlIik7Ci0KLSAgICBzZWxmLm1lc3NhZ2UgPSBtZXNzYWdlOwotICAgIHNlbGYu
Y29kZSA9IGNvZGU7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClzZXRNZXNzYWdl
OihOU1N0cmluZyAqKW1lc3NhZ2UKLXsKLSAgICBbc3VwZXIgc2V0U3RyaW5nOm1lc3NhZ2UgZm9y
S2V5OkAibWVzc2FnZSJdOwotfQotCi0tIChOU1N0cmluZyAqKW1lc3NhZ2UKLXsKLSAgICByZXR1
cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAIm1lc3NhZ2UiXTsKLX0KLQotLSAodm9pZClzZXRDb2Rl
OihpbnQpY29kZQotewotICAgIFtzdXBlciBzZXRJbnRlZ2VyOmNvZGUgZm9yS2V5OkAiY29kZSJd
OwotfQotCi0tIChpbnQpY29kZQotewotICAgIHJldHVybiBbc3VwZXIgaW50ZWdlckZvcktleTpA
ImNvZGUiXTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMu
bW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4t
cGFyYW1ldGVycy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2Fs
bC1yZXR1cm4tcGFyYW1ldGVycy5qc29uLXJlc3VsdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggODU5NDFlZDUxZjEuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgt
b3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uLXJlc3VsdAorKysgL2Rldi9udWxs
CkBAIC0xLDE2NzQgKzAsMCBAQAotIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21t
YW5kcy5qcwotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgt
b3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLS8vIERhdGFiYXNlCi1JbnNwZWN0b3JCYWNrZW5kLnJl
Z2lzdGVyRG9tYWluKCJEYXRhYmFzZSIsIG51bGwpOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rl
ckVudW0oIkRhdGFiYXNlLlByaW1hcnlDb2xvcnMiLCB7UmVkOiAicmVkIiwgR3JlZW46ICJncmVl
biIsIEJsdWU6ICJibHVlIn0pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIkRh
dGFiYXNlLmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMiLCBudWxsLCBbeyJuYW1lIjogImNv
bHVtbk5hbWVzIiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZX0sIHsibmFtZSI6
ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWV9LCB7Im5hbWUiOiAi
dGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFsIjogdHJ1ZX0sIHsibmFtZSI6
ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0cnVlfSwgeyJuYW1lIjog
InBheWxvYWQiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0cnVlfSwgeyJuYW1lIjog
ImRhdGFiYXNlSWQiLCAidHlwZSI6ICJudW1iZXIiLCAib3B0aW9uYWwiOiB0cnVlfSwgeyJuYW1l
IjogInNxbEVycm9yIiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZX0sIHsibmFt
ZSI6ICJzY3JlZW5Db2xvciIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWV9LCB7
Im5hbWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjog
dHJ1ZX0sIHsibmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFs
IjogdHJ1ZX1dLCBbImNvbHVtbk5hbWVzIiwgIm5vdGVzIiwgInRpbWVzdGFtcCIsICJ2YWx1ZXMi
LCAicGF5bG9hZCIsICJkYXRhYmFzZUlkIiwgInNxbEVycm9yIiwgInNjcmVlbkNvbG9yIiwgImFs
dGVybmF0ZUNvbG9ycyIsICJwcmludENvbG9yIl0pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rl
ckNvbW1hbmQoIkRhdGFiYXNlLmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyIsIG51bGwsIFt7
Im5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJvYmplY3QifSwgeyJuYW1lIjogIm5vdGVz
IiwgInR5cGUiOiAic3RyaW5nIn0sIHsibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1i
ZXIifSwgeyJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCJ9LCB7Im5hbWUiOiAicGF5
bG9hZCIsICJ0eXBlIjogIm9iamVjdCJ9LCB7Im5hbWUiOiAiZGF0YWJhc2VJZCIsICJ0eXBlIjog
Im51bWJlciJ9LCB7Im5hbWUiOiAic3FsRXJyb3IiLCAidHlwZSI6ICJvYmplY3QifSwgeyJuYW1l
IjogInNjcmVlbkNvbG9yIiwgInR5cGUiOiAic3RyaW5nIn0sIHsibmFtZSI6ICJhbHRlcm5hdGVD
b2xvcnMiLCAidHlwZSI6ICJvYmplY3QifSwgeyJuYW1lIjogInByaW50Q29sb3IiLCAidHlwZSI6
ICJzdHJpbmcifV0sIFsiY29sdW1uTmFtZXMiLCAibm90ZXMiLCAidGltZXN0YW1wIiwgInZhbHVl
cyIsICJwYXlsb2FkIiwgImRhdGFiYXNlSWQiLCAic3FsRXJyb3IiLCAic2NyZWVuQ29sb3IiLCAi
YWx0ZXJuYXRlQ29sb3JzIiwgInByaW50Q29sb3IiXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLmFjdGl2
YXRlRG9tYWluKCJEYXRhYmFzZSIsIG51bGwpOwotIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNr
ZW5kQ29tbWFuZHMuanMKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlz
cGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdp
dGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xU
eXBlcy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIu
aD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNw
YXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxC
YWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBX
VEZNb3ZlKGRpc3BhdGNoZXIpOyB9Ci0gICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNw
YXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQotcHJp
dmF0ZToKLSAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7
Ci19OwotCi0KLWNsYXNzIEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIgOiBwdWJs
aWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZpcnR1YWwgfkFs
dGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQg
ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhsb25nIGNhbGxJZCwgY29uc3QgSlNPTjo6QXJy
YXkqIGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIGluX25vdGVzLCBjb25zdCBkb3VibGUq
IGluX3RpbWVzdGFtcCwgY29uc3QgSlNPTjo6T2JqZWN0KiBpbl92YWx1ZXMsIGNvbnN0IEpTT046
OlZhbHVlKiBpbl9wYXlsb2FkLCBjb25zdCBpbnQqIGluX2RhdGFiYXNlSWQsIGNvbnN0IEpTT046
Ok9iamVjdCogaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyogaW5fc2NyZWVuQ29sb3IsIGNvbnN0
IEpTT046OkFycmF5KiBpbl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyogaW5fcHJpbnRD
b2xvcikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMo
bG9uZyBjYWxsSWQsIGNvbnN0IEpTT046OkFycmF5JiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3Ry
aW5nJiBpbl9ub3RlcywgZG91YmxlIGluX3RpbWVzdGFtcCwgY29uc3QgSlNPTjo6T2JqZWN0JiBp
bl92YWx1ZXMsIEpTT046OlZhbHVlIGluX3BheWxvYWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25z
dCBKU09OOjpPYmplY3QmIGluX3NxbEVycm9yLCBjb25zdCBTdHJpbmcmIGluX3NjcmVlbkNvbG9y
LCBjb25zdCBKU09OOjpBcnJheSYgaW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcmIGlu
X3ByaW50Q29sb3IpID0gMDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jZW5k
aWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jIyMgRW5kIEZp
bGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0K
LSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXR5cGVkZWYgU3RyaW5nIEVycm9y
U3RyaW5nOwotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi1j
bGFzcyBBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOwotI2VuZGlmIC8vIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi1jbGFzcyBEYXRhYmFzZUJhY2tl
bmREaXNwYXRjaGVySGFuZGxlciB7Ci1wdWJsaWM6Ci0gICAgLy8gTmFtZWQgYWZ0ZXIgcGFyYW1l
dGVyICdwcmludENvbG9yJyB3aGlsZSBnZW5lcmF0aW5nIGNvbW1hbmQvZXZlbnQgZXhlY3V0ZUFs
bE9wdGlvbmFsUGFyYW1ldGVycy4KLSAgICBlbnVtIGNsYXNzIFByaW50Q29sb3IgewotICAgICAg
ICBDeWFuID0gMywKLSAgICAgICAgTWFnZW50YSA9IDQsCi0gICAgICAgIFllbGxvdyA9IDUsCi0g
ICAgICAgIEJsYWNrID0gNiwKLSAgICB9OyAvLyBlbnVtIGNsYXNzIFByaW50Q29sb3IKLSAgICB2
aXJ0dWFsIHZvaWQgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhFcnJvclN0cmluZyYsIGNv
bnN0IEpTT046OkFycmF5KiBvcHRfaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyogb3B0X2lu
X25vdGVzLCBjb25zdCBkb3VibGUqIG9wdF9pbl90aW1lc3RhbXAsIGNvbnN0IEpTT046Ok9iamVj
dCogb3B0X2luX3ZhbHVlcywgY29uc3QgSlNPTjo6VmFsdWUqIG9wdF9pbl9wYXlsb2FkLCBjb25z
dCBpbnQqIG9wdF9pbl9kYXRhYmFzZUlkLCBjb25zdCBKU09OOjpPYmplY3QqIG9wdF9pbl9zcWxF
cnJvciwgY29uc3QgU3RyaW5nKiBvcHRfaW5fc2NyZWVuQ29sb3IsIGNvbnN0IEpTT046OkFycmF5
KiBvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcqIG9wdF9pbl9wcmludENvbG9y
LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYgb3B0X291dF9jb2x1bW5OYW1lcywgT3B0
aW9uYWw8U3RyaW5nPiYgb3B0X291dF9ub3RlcywgT3B0aW9uYWw8ZG91YmxlPiYgb3B0X291dF90
aW1lc3RhbXAsIE9wdGlvbmFsPEpTT046Ok9iamVjdD4mIG9wdF9vdXRfdmFsdWVzLCBPcHRpb25h
bDxKU09OOjpWYWx1ZT4mIG9wdF9vdXRfcGF5bG9hZCwgT3B0aW9uYWw8aW50PiYgb3B0X291dF9k
YXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYg
b3B0X291dF9zcWxFcnJvciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlD
b2xvcnMqIG9wdF9vdXRfc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpE
YXRhYmFzZTo6Q29sb3JMaXN0PiYgb3B0X291dF9hbHRlcm5hdGVDb2xvcnMsIERhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yKiBvcHRfb3V0X3ByaW50Q29sb3IpID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKEVycm9yU3Ry
aW5nJiwgY29uc3QgSlNPTjo6QXJyYXkmIGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIGlu
X25vdGVzLCBkb3VibGUgaW5fdGltZXN0YW1wLCBjb25zdCBKU09OOjpPYmplY3QmIGluX3ZhbHVl
cywgSlNPTjo6VmFsdWUgaW5fcGF5bG9hZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IEpTT046
Ok9iamVjdCYgaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgaW5fc2NyZWVuQ29sb3IsIGNvbnN0
IEpTT046OkFycmF5JiBpbl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgaW5fcHJpbnRD
b2xvciwgUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mIG91dF9jb2x1bW5OYW1lcywgU3Ry
aW5nKiBvdXRfbm90ZXMsIGRvdWJsZSogb3V0X3RpbWVzdGFtcCwgSlNPTjo6T2JqZWN0KiBvdXRf
dmFsdWVzLCBKU09OOjpWYWx1ZSogb3V0X3BheWxvYWQsIGludCogb3V0X2RhdGFiYXNlSWQsIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiBvdXRfc3FsRXJyb3Is
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzKiBvdXRfc2NyZWVu
Q29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYg
b3V0X2FsdGVybmF0ZUNvbG9ycywgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlBy
aW50Q29sb3IqIG91dF9wcmludENvbG9yKSA9IDA7Ci1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB+
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKLX07Ci0KLWNsYXNzIERhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3Bh
dGNoZXIgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
cj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXIqKTsKLSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcm
IG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5hbDsKLXByaXZhdGU6Ci0g
ICAgdm9pZCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwotICAgIHZvaWQgZXhlY3V0ZU5vT3B0aW9u
YWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFt
ZXRlcnMpOwotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotcHVi
bGljOgotICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0Y2hlcihBbHRlcm5hdGVEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0
Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KLXByaXZhdGU6Ci0gICAgQWx0ZXJuYXRlRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciogbV9hbHRlcm5hdGVEaXNwYXRjaGVyIHsgbnVsbHB0ciB9
OwotI2VuZGlmCi1wcml2YXRlOgotICAgIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoQmFja2Vu
ZERpc3BhdGNoZXImLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIERh
dGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50IHsgbnVsbHB0ciB9OwotfTsK
LQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlz
cGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFs
LWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEJhY2tl
bmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJv
bnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0
Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2lm
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotI2luY2x1ZGUgIlRlc3RB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgSW5zcGVj
dG9yIHsKLQotRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5EYXRhYmFzZUJhY2tl
bmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQotCi1SZWY8RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
cj4gRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiBi
YWNrZW5kRGlzcGF0Y2hlciwgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50
KQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIo
YmFja2VuZERpc3BhdGNoZXIsIGFnZW50KSk7Ci19Ci0KLURhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXI6OkRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmRE
aXNwYXRjaGVyLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCi0gICAg
OiBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKLSAgICAs
IG1fYWdlbnQoYWdlbnQpCi17Ci0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNw
YXRjaGVyRm9yRG9tYWluKCJEYXRhYmFzZSJfcywgdGhpcyk7Ci19Ci0KLXZvaWQgRGF0YWJhc2VC
YWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYg
bWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCi17Ci0gICAgUmVmPERhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwotCi0gICAgUmVmUHRyPEpTT046Ok9i
amVjdD4gcGFyYW1ldGVyczsKLSAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFy
YW1ldGVycyk7Ci0KLSAgICBpZiAobWV0aG9kID09ICJleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0
ZXJzIikKLSAgICAgICAgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhyZXF1ZXN0SWQsIFdU
Rk1vdmUocGFyYW1ldGVycykpOwotICAgIGVsc2UgaWYgKG1ldGhvZCA9PSAiZXhlY3V0ZU5vT3B0
aW9uYWxQYXJhbWV0ZXJzIikKLSAgICAgICAgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKHJl
cXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRo
b2ROb3RGb3VuZCwgIidEYXRhYmFzZS4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOwot
fQotCi12b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVBbGxPcHRpb25hbFBh
cmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVy
cykKLXsKLSAgICBib29sIG9wdF9pbl9jb2x1bW5OYW1lc192YWx1ZUZvdW5kID0gZmFsc2U7Ci0g
ICAgUmVmUHRyPEpTT046OkFycmF5PiBvcHRfaW5fY29sdW1uTmFtZXMgPSBtX2JhY2tlbmREaXNw
YXRjaGVyLT5nZXRBcnJheShwYXJhbWV0ZXJzLmdldCgpLCAiY29sdW1uTmFtZXMiX3MsICZvcHRf
aW5fY29sdW1uTmFtZXNfdmFsdWVGb3VuZCk7Ci0gICAgYm9vbCBvcHRfaW5fbm90ZXNfdmFsdWVG
b3VuZCA9IGZhbHNlOwotICAgIFN0cmluZyBvcHRfaW5fbm90ZXMgPSBtX2JhY2tlbmREaXNwYXRj
aGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgIm5vdGVzIl9zLCAmb3B0X2luX25vdGVz
X3ZhbHVlRm91bmQpOwotICAgIGJvb2wgb3B0X2luX3RpbWVzdGFtcF92YWx1ZUZvdW5kID0gZmFs
c2U7Ci0gICAgZG91YmxlIG9wdF9pbl90aW1lc3RhbXAgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5n
ZXREb3VibGUocGFyYW1ldGVycy5nZXQoKSwgInRpbWVzdGFtcCJfcywgJm9wdF9pbl90aW1lc3Rh
bXBfdmFsdWVGb3VuZCk7Ci0gICAgYm9vbCBvcHRfaW5fdmFsdWVzX3ZhbHVlRm91bmQgPSBmYWxz
ZTsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBvcHRfaW5fdmFsdWVzID0gbV9iYWNrZW5kRGlz
cGF0Y2hlci0+Z2V0T2JqZWN0KHBhcmFtZXRlcnMuZ2V0KCksICJ2YWx1ZXMiX3MsICZvcHRfaW5f
dmFsdWVzX3ZhbHVlRm91bmQpOwotICAgIGJvb2wgb3B0X2luX3BheWxvYWRfdmFsdWVGb3VuZCA9
IGZhbHNlOwotICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gb3B0X2luX3BheWxvYWQgPSBtX2JhY2tl
bmREaXNwYXRjaGVyLT5nZXRWYWx1ZShwYXJhbWV0ZXJzLmdldCgpLCAicGF5bG9hZCJfcywgJm9w
dF9pbl9wYXlsb2FkX3ZhbHVlRm91bmQpOwotICAgIGJvb2wgb3B0X2luX2RhdGFiYXNlSWRfdmFs
dWVGb3VuZCA9IGZhbHNlOwotICAgIGludCBvcHRfaW5fZGF0YWJhc2VJZCA9IG1fYmFja2VuZERp
c3BhdGNoZXItPmdldEludGVnZXIocGFyYW1ldGVycy5nZXQoKSwgImRhdGFiYXNlSWQiX3MsICZv
cHRfaW5fZGF0YWJhc2VJZF92YWx1ZUZvdW5kKTsKLSAgICBib29sIG9wdF9pbl9zcWxFcnJvcl92
YWx1ZUZvdW5kID0gZmFsc2U7Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gb3B0X2luX3NxbEVy
cm9yID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0T2JqZWN0KHBhcmFtZXRlcnMuZ2V0KCksICJz
cWxFcnJvciJfcywgJm9wdF9pbl9zcWxFcnJvcl92YWx1ZUZvdW5kKTsKLSAgICBib29sIG9wdF9p
bl9zY3JlZW5Db2xvcl92YWx1ZUZvdW5kID0gZmFsc2U7Ci0gICAgU3RyaW5nIG9wdF9pbl9zY3Jl
ZW5Db2xvciA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwYXJhbWV0ZXJzLmdldCgp
LCAic2NyZWVuQ29sb3IiX3MsICZvcHRfaW5fc2NyZWVuQ29sb3JfdmFsdWVGb3VuZCk7Ci0gICAg
Ym9vbCBvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzX3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAgICBSZWZQ
dHI8SlNPTjo6QXJyYXk+IG9wdF9pbl9hbHRlcm5hdGVDb2xvcnMgPSBtX2JhY2tlbmREaXNwYXRj
aGVyLT5nZXRBcnJheShwYXJhbWV0ZXJzLmdldCgpLCAiYWx0ZXJuYXRlQ29sb3JzIl9zLCAmb3B0
X2luX2FsdGVybmF0ZUNvbG9yc192YWx1ZUZvdW5kKTsKLSAgICBib29sIG9wdF9pbl9wcmludENv
bG9yX3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAgICBTdHJpbmcgb3B0X2luX3ByaW50Q29sb3IgPSBt
X2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgInByaW50Q29s
b3IiX3MsICZvcHRfaW5fcHJpbnRDb2xvcl92YWx1ZUZvdW5kKTsKLSAgICBpZiAobV9iYWNrZW5k
RGlzcGF0Y2hlci0+aGFzUHJvdG9jb2xFcnJvcnMoKSkgewotICAgICAgICBtX2JhY2tlbmREaXNw
YXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFy
YW1zLCAiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICdEYXRhYmFzZS5leGVjdXRlQWxsT3B0aW9u
YWxQYXJhbWV0ZXJzJyBjYW4ndCBiZSBwcm9jZXNzZWQiX3MpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0gICAg
aWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNo
ZXItPmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMocmVxdWVzdElkLCBvcHRfaW5fY29sdW1u
TmFtZXNfdmFsdWVGb3VuZCA/IG9wdF9pbl9jb2x1bW5OYW1lcy5nZXQoKSA6IG51bGxwdHIsIG9w
dF9pbl9ub3Rlc192YWx1ZUZvdW5kID8gJm9wdF9pbl9ub3RlcyA6IG51bGxwdHIsIG9wdF9pbl90
aW1lc3RhbXBfdmFsdWVGb3VuZCA/ICZvcHRfaW5fdGltZXN0YW1wIDogbnVsbHB0ciwgb3B0X2lu
X3ZhbHVlc192YWx1ZUZvdW5kID8gb3B0X2luX3ZhbHVlcy5nZXQoKSA6IG51bGxwdHIsIG9wdF9p
bl9wYXlsb2FkX3ZhbHVlRm91bmQgPyBvcHRfaW5fcGF5bG9hZC5nZXQoKSA6IG51bGxwdHIsIG9w
dF9pbl9kYXRhYmFzZUlkX3ZhbHVlRm91bmQgPyAmb3B0X2luX2RhdGFiYXNlSWQgOiBudWxscHRy
LCBvcHRfaW5fc3FsRXJyb3JfdmFsdWVGb3VuZCA/IG9wdF9pbl9zcWxFcnJvci5nZXQoKSA6IG51
bGxwdHIsIG9wdF9pbl9zY3JlZW5Db2xvcl92YWx1ZUZvdW5kID8gJm9wdF9pbl9zY3JlZW5Db2xv
ciA6IG51bGxwdHIsIG9wdF9pbl9hbHRlcm5hdGVDb2xvcnNfdmFsdWVGb3VuZCA/IG9wdF9pbl9h
bHRlcm5hdGVDb2xvcnMuZ2V0KCkgOiBudWxscHRyLCBvcHRfaW5fcHJpbnRDb2xvcl92YWx1ZUZv
dW5kID8gJm9wdF9pbl9wcmludENvbG9yIDogbnVsbHB0cik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0jZW5kaWYKLQotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmpl
Y3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgUmVmUHRyPEpTT046OkFy
cmF5T2Y8U3RyaW5nPj4gb3V0X2NvbHVtbk5hbWVzOwotICAgIE9wdGlvbmFsPFN0cmluZz4gb3V0
X25vdGVzOwotICAgIE9wdGlvbmFsPGRvdWJsZT4gb3V0X3RpbWVzdGFtcDsKLSAgICBPcHRpb25h
bDxKU09OOjpPYmplY3Q+IG91dF92YWx1ZXM7Ci0gICAgT3B0aW9uYWw8SlNPTjo6VmFsdWU+IG91
dF9wYXlsb2FkOwotICAgIE9wdGlvbmFsPGludD4gb3V0X2RhdGFiYXNlSWQ7Ci0gICAgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gb3V0X3NxbEVycm9yOwotICAg
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzIG91dF9zY3JlZW5D
b2xvcjsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlz
dD4gb3V0X2FsdGVybmF0ZUNvbG9yczsKLSAgICBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlcjo6UHJpbnRDb2xvciBvdXRfcHJpbnRDb2xvcjsKLSAgICBtX2FnZW50LT5leGVjdXRlQWxs
T3B0aW9uYWxQYXJhbWV0ZXJzKGVycm9yLCBvcHRfaW5fY29sdW1uTmFtZXNfdmFsdWVGb3VuZCA/
IG9wdF9pbl9jb2x1bW5OYW1lcy5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9ub3Rlc192YWx1ZUZv
dW5kID8gJm9wdF9pbl9ub3RlcyA6IG51bGxwdHIsIG9wdF9pbl90aW1lc3RhbXBfdmFsdWVGb3Vu
ZCA/ICZvcHRfaW5fdGltZXN0YW1wIDogbnVsbHB0ciwgb3B0X2luX3ZhbHVlc192YWx1ZUZvdW5k
ID8gb3B0X2luX3ZhbHVlcy5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9wYXlsb2FkX3ZhbHVlRm91
bmQgPyBvcHRfaW5fcGF5bG9hZC5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9kYXRhYmFzZUlkX3Zh
bHVlRm91bmQgPyAmb3B0X2luX2RhdGFiYXNlSWQgOiBudWxscHRyLCBvcHRfaW5fc3FsRXJyb3Jf
dmFsdWVGb3VuZCA/IG9wdF9pbl9zcWxFcnJvci5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9zY3Jl
ZW5Db2xvcl92YWx1ZUZvdW5kID8gJm9wdF9pbl9zY3JlZW5Db2xvciA6IG51bGxwdHIsIG9wdF9p
bl9hbHRlcm5hdGVDb2xvcnNfdmFsdWVGb3VuZCA/IG9wdF9pbl9hbHRlcm5hdGVDb2xvcnMuZ2V0
KCkgOiBudWxscHRyLCBvcHRfaW5fcHJpbnRDb2xvcl92YWx1ZUZvdW5kID8gJm9wdF9pbl9wcmlu
dENvbG9yIDogbnVsbHB0ciwgb3V0X2NvbHVtbk5hbWVzLCBvdXRfbm90ZXMsIG91dF90aW1lc3Rh
bXAsIG91dF92YWx1ZXMsIG91dF9wYXlsb2FkLCBvdXRfZGF0YWJhc2VJZCwgb3V0X3NxbEVycm9y
LCBvdXRfc2NyZWVuQ29sb3IsIG91dF9hbHRlcm5hdGVDb2xvcnMsIG91dF9wcmludENvbG9yKTsK
LQotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIHsKLSAgICAgICAgaWYgKG91dF9jb2x1bW5OYW1l
cykKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBvdXRfY29s
dW1uTmFtZXMpOwotICAgICAgICBpZiAob3V0X25vdGVzLmhhc1ZhbHVlKCkpCi0gICAgICAgICAg
ICByZXN1bHQtPnNldFN0cmluZygibm90ZXMiX3MsICpvdXRfbm90ZXMpOwotICAgICAgICBpZiAo
b3V0X3RpbWVzdGFtcC5oYXNWYWx1ZSgpKQotICAgICAgICAgICAgcmVzdWx0LT5zZXREb3VibGUo
InRpbWVzdGFtcCJfcywgKm91dF90aW1lc3RhbXApOwotICAgICAgICBpZiAob3V0X3ZhbHVlcy5o
YXNWYWx1ZSgpKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgKm91
dF92YWx1ZXMpOwotICAgICAgICBpZiAob3V0X3BheWxvYWQuaGFzVmFsdWUoKSkKLSAgICAgICAg
ICAgIHJlc3VsdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsICpvdXRfcGF5bG9hZCk7Ci0gICAgICAg
IGlmIChvdXRfZGF0YWJhc2VJZC5oYXNWYWx1ZSgpKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRJ
bnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCAqb3V0X2RhdGFiYXNlSWQpOwotICAgICAgICBpZiAob3V0
X3NxbEVycm9yKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBv
dXRfc3FsRXJyb3IpOwotICAgICAgICBpZiAob3V0X3NjcmVlbkNvbG9yLmhhc1ZhbHVlKCkpCi0g
ICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsICpvdXRfc2NyZWVu
Q29sb3IpOwotICAgICAgICBpZiAob3V0X2FsdGVybmF0ZUNvbG9ycykKLSAgICAgICAgICAgIHJl
c3VsdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgb3V0X2FsdGVybmF0ZUNvbG9ycyk7
Ci0gICAgICAgIGlmIChvdXRfcHJpbnRDb2xvci5oYXNWYWx1ZSgpKQotICAgICAgICAgICAgcmVz
dWx0LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsICpvdXRfcHJpbnRDb2xvcik7Ci0gICAgfQot
ICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNl
bmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UK
LSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5k
RGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKLX0KLQotdm9pZCBEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMobG9uZyBy
ZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycykKLXsKLSAgICBSZWZQ
dHI8SlNPTjo6QXJyYXk+IGluX2NvbHVtbk5hbWVzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0
QXJyYXkocGFyYW1ldGVycy5nZXQoKSwgImNvbHVtbk5hbWVzIl9zLCBudWxscHRyKTsKLSAgICBT
dHJpbmcgaW5fbm90ZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVy
cy5nZXQoKSwgIm5vdGVzIl9zLCBudWxscHRyKTsKLSAgICBkb3VibGUgaW5fdGltZXN0YW1wID0g
bV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0RG91YmxlKHBhcmFtZXRlcnMuZ2V0KCksICJ0aW1lc3Rh
bXAiX3MsIG51bGxwdHIpOwotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGluX3ZhbHVlcyA9IG1f
YmFja2VuZERpc3BhdGNoZXItPmdldE9iamVjdChwYXJhbWV0ZXJzLmdldCgpLCAidmFsdWVzIl9z
LCBudWxscHRyKTsKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IGluX3BheWxvYWQgPSBtX2JhY2tl
bmREaXNwYXRjaGVyLT5nZXRWYWx1ZShwYXJhbWV0ZXJzLmdldCgpLCAicGF5bG9hZCJfcywgbnVs
bHB0cik7Ci0gICAgaW50IGluX2RhdGFiYXNlSWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRJ
bnRlZ2VyKHBhcmFtZXRlcnMuZ2V0KCksICJkYXRhYmFzZUlkIl9zLCBudWxscHRyKTsKLSAgICBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiBpbl9zcWxFcnJvciA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdl
dE9iamVjdChwYXJhbWV0ZXJzLmdldCgpLCAic3FsRXJyb3IiX3MsIG51bGxwdHIpOwotICAgIFN0
cmluZyBpbl9zY3JlZW5Db2xvciA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwYXJh
bWV0ZXJzLmdldCgpLCAic2NyZWVuQ29sb3IiX3MsIG51bGxwdHIpOwotICAgIFJlZlB0cjxKU09O
OjpBcnJheT4gaW5fYWx0ZXJuYXRlQ29sb3JzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0QXJy
YXkocGFyYW1ldGVycy5nZXQoKSwgImFsdGVybmF0ZUNvbG9ycyJfcywgbnVsbHB0cik7Ci0gICAg
U3RyaW5nIGluX3ByaW50Q29sb3IgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFy
YW1ldGVycy5nZXQoKSwgInByaW50Q29sb3IiX3MsIG51bGxwdHIpOwotICAgIGlmIChtX2JhY2tl
bmREaXNwYXRjaGVyLT5oYXNQcm90b2NvbEVycm9ycygpKSB7Ci0gICAgICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQ
YXJhbXMsICJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJ0RhdGFiYXNlLmV4ZWN1dGVOb09wdGlv
bmFsUGFyYW1ldGVycycgY2FuJ3QgYmUgcHJvY2Vzc2VkIl9zKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotICAg
IGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRj
aGVyLT5leGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMocmVxdWVzdElkLCAqaW5fY29sdW1uTmFt
ZXMsIGluX25vdGVzLCBpbl90aW1lc3RhbXAsICppbl92YWx1ZXMsICppbl9wYXlsb2FkLCBpbl9k
YXRhYmFzZUlkLCAqaW5fc3FsRXJyb3IsIGluX3NjcmVlbkNvbG9yLCAqaW5fYWx0ZXJuYXRlQ29s
b3JzLCBpbl9wcmludENvbG9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0g
ICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiBv
dXRfY29sdW1uTmFtZXM7Ci0gICAgU3RyaW5nIG91dF9ub3RlczsKLSAgICBkb3VibGUgb3V0X3Rp
bWVzdGFtcDsKLSAgICBKU09OOjpPYmplY3Qgb3V0X3ZhbHVlczsKLSAgICBKU09OOjpWYWx1ZSBv
dXRfcGF5bG9hZDsKLSAgICBpbnQgb3V0X2RhdGFiYXNlSWQ7Ci0gICAgUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gb3V0X3NxbEVycm9yOwotICAgIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzIG91dF9zY3JlZW5Db2xvcjsKLSAg
ICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4gb3V0X2Fs
dGVybmF0ZUNvbG9yczsKLSAgICBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJp
bnRDb2xvciBvdXRfcHJpbnRDb2xvcjsKLSAgICBtX2FnZW50LT5leGVjdXRlTm9PcHRpb25hbFBh
cmFtZXRlcnMoZXJyb3IsICppbl9jb2x1bW5OYW1lcywgaW5fbm90ZXMsIGluX3RpbWVzdGFtcCwg
KmluX3ZhbHVlcywgKmluX3BheWxvYWQsIGluX2RhdGFiYXNlSWQsICppbl9zcWxFcnJvciwgaW5f
c2NyZWVuQ29sb3IsICppbl9hbHRlcm5hdGVDb2xvcnMsIGluX3ByaW50Q29sb3IsIG91dF9jb2x1
bW5OYW1lcywgJm91dF9ub3RlcywgJm91dF90aW1lc3RhbXAsIG91dF92YWx1ZXMsICZvdXRfcGF5
bG9hZCwgJm91dF9kYXRhYmFzZUlkLCBvdXRfc3FsRXJyb3IsICZvdXRfc2NyZWVuQ29sb3IsIG91
dF9hbHRlcm5hdGVDb2xvcnMsICZvdXRfcHJpbnRDb2xvcik7Ci0KLSAgICBpZiAoIWVycm9yLmxl
bmd0aCgpKSB7Ci0gICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBvdXRf
Y29sdW1uTmFtZXMpOwotICAgICAgICByZXN1bHQtPnNldFN0cmluZygibm90ZXMiX3MsIG91dF9u
b3Rlcyk7Ci0gICAgICAgIHJlc3VsdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIG91dF90aW1l
c3RhbXApOwotICAgICAgICByZXN1bHQtPnNldE9iamVjdCgidmFsdWVzIl9zLCBvdXRfdmFsdWVz
KTsKLSAgICAgICAgcmVzdWx0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgb3V0X3BheWxvYWQpOwot
ICAgICAgICByZXN1bHQtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsIG91dF9kYXRhYmFzZUlk
KTsKLSAgICAgICAgcmVzdWx0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBvdXRfc3FsRXJyb3Ip
OwotICAgICAgICByZXN1bHQtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShvdXRfc2NyZWVuQ29s
b3IpKTsKLSAgICAgICAgcmVzdWx0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCBvdXRf
YWx0ZXJuYXRlQ29sb3JzKTsKLSAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInByaW50Q29sb3Ii
X3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1
ZShvdXRfcHJpbnRDb2xvcikpOwotICAgIH0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAg
ICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3Zl
KHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZN
b3ZlKGVycm9yKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZp
bGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJv
bnRlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29t
bWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNs
dWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7
Ci0KLWNsYXNzIEZyb250ZW5kUm91dGVyOwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMj
IyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLX0gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNw
cAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1w
YXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90
b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFtZXNwYWNlIElu
c3BlY3RvciB7Ci0KLQotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotLy8gRm9yd2FyZCBk
ZWNsYXJhdGlvbnMuCi1uYW1lc3BhY2UgRGF0YWJhc2UgewotY2xhc3MgRXJyb3I7Ci1lbnVtIGNs
YXNzIFByaW1hcnlDb2xvcnM7Ci19IC8vIERhdGFiYXNlCi0vLyBFbmQgb2YgZm9yd2FyZCBkZWNs
YXJhdGlvbnMuCi0KLQotLy8gVHlwZWRlZnMuCi1uYW1lc3BhY2UgRGF0YWJhc2UgewotLyogVW5p
cXVlIGlkZW50aWZpZXIgb2YgRGF0YWJhc2Ugb2JqZWN0LiAqLwotdHlwZWRlZiBpbnQgRGF0YWJh
c2VJZDsKLXR5cGVkZWYgSlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFz
ZTo6UHJpbWFyeUNvbG9ycz4gQ29sb3JMaXN0OwotfSAvLyBEYXRhYmFzZQotLy8gRW5kIG9mIHR5
cGVkZWZzLgotCi1uYW1lc3BhY2UgVGVzdEhlbHBlcnMgewotCi1TdHJpbmcgZ2V0RW51bUNvbnN0
YW50VmFsdWUoaW50IGNvZGUpOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgZ2V0RW51
bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFsdWUpCi17Ci0gICAgcmV0dXJuIGdldEVudW1Db25zdGFu
dFZhbHVlKHN0YXRpY19jYXN0PGludD4oZW51bVZhbHVlKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IFRlc3RIZWxwZXJzCi0KLW5hbWVzcGFjZSBEYXRhYmFzZSB7Ci0vKiAgKi8KLWVudW0gY2xhc3Mg
UHJpbWFyeUNvbG9ycyB7Ci0gICAgUmVkID0gMCwKLSAgICBHcmVlbiA9IDEsCi0gICAgQmx1ZSA9
IDIsCi19OyAvLyBlbnVtIGNsYXNzIFByaW1hcnlDb2xvcnMKLS8qIERhdGFiYXNlIGVycm9yLiAq
LwotY2xhc3MgRXJyb3IgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7Ci1wdWJsaWM6Ci0gICAg
ZW51bSB7Ci0gICAgICAgIE5vRmllbGRzU2V0ID0gMCwKLSAgICAgICAgTWVzc2FnZVNldCA9IDEg
PDwgMCwKLSAgICAgICAgQ29kZVNldCA9IDEgPDwgMSwKLSAgICAgICAgQWxsRmllbGRzU2V0ID0g
KE1lc3NhZ2VTZXQgfCBDb2RlU2V0KQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+
Ci0gICAgY2xhc3MgQnVpbGRlciB7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPEpTT046
Ok9iamVjdD4gbV9yZXN1bHQ7Ci0KLSAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8
U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
ICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgQnVpbGRlcihSZWY8LypFcnJvciovSlNPTjo6T2JqZWN0PiYmIG9iamVj
dCkKLSAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9j
cmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKLSAgICAgICAgfQotICAgICAgICBmcmllbmQgY2xh
c3MgRXJyb3I7Ci0gICAgcHVibGljOgotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNZXNzYWdl
U2V0PiYgc2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTWVzc2FnZVNldCksIHByb3BlcnR5X21lc3Nh
Z2VfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibWVzc2Fn
ZSJfcywgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNZXNzYWdlU2V0Pigp
OwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvZGVTZXQ+JiBzZXRDb2Rl
KGludCB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIENvZGVTZXQpLCBwcm9wZXJ0eV9jb2RlX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXRJbnRlZ2VyKCJjb2RlIl9zLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPENvZGVTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBSZWY8RXJyb3I+IHJl
bGVhc2UoKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBB
bGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwotICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoc2l6ZW9mKEVycm9yKSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0KSwgY2Fubm90X2Nhc3Qp
OwotCi0gICAgICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uUmVzdWx0ID0gbV9yZXN1bHQu
cmVsZWFzZU5vbk51bGwoKTsKLSAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gV1RGTW92ZSgqcmVp
bnRlcnByZXRfY2FzdDxSZWY8RXJyb3I+Kj4oJmpzb25SZXN1bHQpKTsKLSAgICAgICAgICAgIHJl
dHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgLyoKLSAgICAgKiBTeW50aGV0
aWMgY29uc3RydWN0b3I6Ci0gICAgICogUmVmPEVycm9yPiByZXN1bHQgPSBFcnJvcjo6Y3JlYXRl
KCkKLSAgICAgKiAgICAgLnNldE1lc3NhZ2UoLi4uKQotICAgICAqICAgICAuc2V0Q29kZSguLi4p
Ci0gICAgICogICAgIC5yZWxlYXNlKCk7Ci0gICAgICovCi0gICAgc3RhdGljIEJ1aWxkZXI8Tm9G
aWVsZHNTZXQ+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxk
c1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7Ci0gICAgfQotfTsKLQotfSAvLyBEYXRhYmFz
ZQotCi0KLQotbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgUHJv
dG9jb2xFbnVtVHlwZT4KLU9wdGlvbmFsPFByb3RvY29sRW51bVR5cGU+IHBhcnNlRW51bVZhbHVl
RnJvbVN0cmluZyhjb25zdCBTdHJpbmcmKTsKLQotLy8gRW51bXMgaW4gdGhlICdEYXRhYmFzZScg
RG9tYWluCi10ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFz
ZTo6UHJpbWFyeUNvbG9ycz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPihjb25zdCBTdHJpbmcmKTsKLQotfSAvLyBu
YW1lc3BhY2UgVGVzdEhlbHBlcnMKLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCi0KLW5hbWVzcGFjZSBXVEYgewotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Ci0KLS8vIEhhc2ggZGVjbGFyYXRpb25zIGluIHRoZSAn
RGF0YWJhc2UnIERvbWFpbgotdGVtcGxhdGU8Pgotc3RydWN0IERlZmF1bHRIYXNoPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiB7Ci0gICAgdHlwZWRlZiBJbnRI
YXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiBIYXNoOwot
fTsKLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVj
dHMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0
dXJuLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0
cy5oIgotCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotbmFtZXNwYWNlIFByb3RvY29sIHsK
LQotbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVu
dW1fY29uc3RhbnRfdmFsdWVzW10gPSB7Ci0gICAgInJlZCIsCi0gICAgImdyZWVuIiwKLSAgICAi
Ymx1ZSIsCi0gICAgImN5YW4iLAotICAgICJtYWdlbnRhIiwKLSAgICAieWVsbG93IiwKLSAgICAi
YmxhY2siLAotfTsKLQotU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7Ci0g
ICAgcmV0dXJuIGVudW1fY29uc3RhbnRfdmFsdWVzW2NvZGVdOwotfQotCi0vLyBFbnVtcyBpbiB0
aGUgJ0RhdGFiYXNlJyBEb21haW4KLXRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+KGNvbnN0IFN0cmlu
ZyYgcHJvdG9jb2xTdHJpbmcpCi17Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZh
bHVlc1tdID0gewotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNl
OjpQcmltYXJ5Q29sb3JzOjpSZWQsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM6OkdyZWVuLAotICAgICAgICAoc2l6ZV90KUluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzOjpCbHVlLAotICAgIH07Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAzOyArK2kpCi0gICAgICAgIGlmIChwcm90b2NvbFN0
cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCi0gICAgICAg
ICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3Jz
KWNvbnN0YW50VmFsdWVzW2ldOwotCi0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotCi19
IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wK
LQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
T2JqZWN0cy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRj
aGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1v
cHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIu
aD4KLQotQHByb3RvY29sIFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcjsKLQotbmFt
ZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotY2xhc3MgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgT2JqQ0lu
c3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sRGF0YWJhc2VE
b21haW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9Ci0gICAgdm9p
ZCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBjb25zdCBKU09O
OjpBcnJheSogaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyogaW5fbm90ZXMsIGNvbnN0IGRv
dWJsZSogaW5fdGltZXN0YW1wLCBjb25zdCBKU09OOjpPYmplY3QqIGluX3ZhbHVlcywgY29uc3Qg
SlNPTjo6VmFsdWUqIGluX3BheWxvYWQsIGNvbnN0IGludCogaW5fZGF0YWJhc2VJZCwgY29uc3Qg
SlNPTjo6T2JqZWN0KiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nKiBpbl9zY3JlZW5Db2xvciwg
Y29uc3QgSlNPTjo6QXJyYXkqIGluX2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nKiBpbl9w
cmludENvbG9yKSBmaW5hbDsKLSAgICB2b2lkIGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhs
b25nIHJlcXVlc3RJZCwgY29uc3QgSlNPTjo6QXJyYXkmIGluX2NvbHVtbk5hbWVzLCBjb25zdCBT
dHJpbmcmIGluX25vdGVzLCBkb3VibGUgaW5fdGltZXN0YW1wLCBjb25zdCBKU09OOjpPYmplY3Qm
IGluX3ZhbHVlcywgSlNPTjo6VmFsdWUgaW5fcGF5bG9hZCwgaW50IGluX2RhdGFiYXNlSWQsIGNv
bnN0IEpTT046Ok9iamVjdCYgaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgaW5fc2NyZWVuQ29s
b3IsIGNvbnN0IEpTT046OkFycmF5JiBpbl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYg
aW5fcHJpbnRDb2xvcikgZmluYWw7Ci1wcml2YXRlOgotICAgIFJldGFpblB0cjxpZDxUZXN0UHJv
dG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwotfTsKLQotfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3Bh
dGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVy
cy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0
aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFBy
b3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRl
cm5hbC5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2luY2x1
ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi12b2lkIE9i
akNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlQWxsT3B0aW9uYWxQ
YXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBjb25zdCBKU09OOjpBcnJheSogaW5fY29sdW1uTmFt
ZXMsIGNvbnN0IFN0cmluZyogaW5fbm90ZXMsIGNvbnN0IGRvdWJsZSogaW5fdGltZXN0YW1wLCBj
b25zdCBKU09OOjpPYmplY3QqIGluX3ZhbHVlcywgY29uc3QgSlNPTjo6VmFsdWUqIGluX3BheWxv
YWQsIGNvbnN0IGludCogaW5fZGF0YWJhc2VJZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBpbl9zcWxF
cnJvciwgY29uc3QgU3RyaW5nKiBpbl9zY3JlZW5Db2xvciwgY29uc3QgSlNPTjo6QXJyYXkqIGlu
X2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nKiBpbl9wcmludENvbG9yKQotewotICAgIGlm
ICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihleGVjdXRlQWxsT3B0
aW9uYWxQYXJhbWV0ZXJzV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOmNvbHVtbk5h
bWVzOm5vdGVzOnRpbWVzdGFtcDp2YWx1ZXM6cGF5bG9hZDpkYXRhYmFzZUlkOnNxbEVycm9yOnNj
cmVlbkNvbG9yOmFsdGVybmF0ZUNvbG9yczpwcmludENvbG9yOildKSB7Ci0gICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlz
cGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRGF0YWJhc2UuZXhlY3V0ZUFsbE9wdGlvbmFsUGFy
YW1ldGVycycgd2FzIG5vdCBmb3VuZCJfcyk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCkt
PnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZCBl
cnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3Bh
dGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVy
OjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5k
UGVuZGluZ0Vycm9ycygpOwotICAgIH07Ci0KLSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKE5T
QXJyYXkvKjxOU1N0cmluZz4qLyAqKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqKm5vdGVzLCBkb3Vi
bGUgKnRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqdmFsdWVzLCBSV0lQcm90b2Nv
bEpTT05PYmplY3QgKipwYXlsb2FkLCBpbnQgKmRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFi
YXNlRXJyb3IgKipzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzICpz
Y3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICoqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0
UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yICpw
cmludENvbG9yKSB7Ci0gICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdE9iamVjdCA9IEpT
T046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09Q
VElPTkFMX1BBUkFNRVRFUihjb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOwotICAgICAgICBU
SFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIobm90ZXMsIEAibm90ZXMi
KTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHZh
bHVlcywgQCJ2YWx1ZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9O
QUxfUEFSQU1FVEVSKHBheWxvYWQsIEAicGF5bG9hZCIpOwotICAgICAgICBUSFJPV19FWENFUFRJ
T05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoc3FsRXJyb3IsIEAic3FsRXJyb3IiKTsKLSAg
ICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKGFsdGVybmF0
ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsKLSAgICAgICAgaWYgKGNvbHVtbk5hbWVzKQot
ICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIHRvSlNP
TlN0cmluZ0FycmF5KCpjb2x1bW5OYW1lcykpOwotICAgICAgICBpZiAobm90ZXMpCi0gICAgICAg
ICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygibm90ZXMiX3MsICpub3Rlcyk7Ci0gICAgICAg
IGlmICh0aW1lc3RhbXApCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldERvdWJsZSgidGlt
ZXN0YW1wIl9zLCAqdGltZXN0YW1wKTsKLSAgICAgICAgaWYgKHZhbHVlcykKLSAgICAgICAgICAg
IHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFsqdmFsdWVzIHRvSlNPTk9iamVj
dF0pOwotICAgICAgICBpZiAocGF5bG9hZCkKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0
VmFsdWUoInBheWxvYWQiX3MsIFsqcGF5bG9hZCB0b0pTT05PYmplY3RdKTsKLSAgICAgICAgaWYg
KGRhdGFiYXNlSWQpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldEludGVnZXIoImRhdGFi
YXNlSWQiX3MsICpkYXRhYmFzZUlkKTsKLSAgICAgICAgaWYgKHNxbEVycm9yKQotICAgICAgICAg
ICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBbKnNxbEVycm9yIHRvSlNP
Tk9iamVjdF0pOwotICAgICAgICBpZiAoc2NyZWVuQ29sb3IpCi0gICAgICAgICAgICByZXN1bHRP
YmplY3QtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcoKnNjcmVl
bkNvbG9yKSk7Ci0gICAgICAgIGlmIChhbHRlcm5hdGVDb2xvcnMpCi0gICAgICAgICAgICByZXN1
bHRPYmplY3QtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIHRvSlNPTlN0cmluZ0FycmF5
KCphbHRlcm5hdGVDb2xvcnMpKTsKLSAgICAgICAgaWYgKHByaW50Q29sb3IpCi0gICAgICAgICAg
ICByZXN1bHRPYmplY3QtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgdG9Qcm90b2NvbFN0cmlu
ZygqcHJpbnRDb2xvcikpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9u
c2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdE9iamVjdCksIGZhbHNlKTsKLSAgICB9OwotCi0g
ICAgTlNBcnJheS8qPE5TU3RyaW5nPiovICpvX2luX2NvbHVtbk5hbWVzOwotICAgIGlmIChpbl9j
b2x1bW5OYW1lcykKLSAgICAgICAgb19pbl9jb2x1bW5OYW1lcyA9IHRvT2JqQ1N0cmluZ0FycmF5
KGluX2NvbHVtbk5hbWVzKTsKLSAgICBOU1N0cmluZyAqb19pbl9ub3RlczsKLSAgICBpZiAoaW5f
bm90ZXMpCi0gICAgICAgIG9faW5fbm90ZXMgPSAqaW5fbm90ZXM7Ci0gICAgZG91YmxlIG9faW5f
dGltZXN0YW1wOwotICAgIGlmIChpbl90aW1lc3RhbXApCi0gICAgICAgIG9faW5fdGltZXN0YW1w
ID0gKmluX3RpbWVzdGFtcDsKLSAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9faW5fdmFsdWVz
OwotICAgIGlmIChpbl92YWx1ZXMpCi0gICAgICAgIG9faW5fdmFsdWVzID0gW1tbUldJUHJvdG9j
b2xKU09OT2JqZWN0IGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6aW5fdmFsdWVzXSBhdXRvcmVs
ZWFzZV07Ci0gICAgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvX2luX3BheWxvYWQ7Ci0gICAgaWYg
KGluX3BheWxvYWQpCi0gICAgICAgIG9faW5fcGF5bG9hZCA9IFtbW1JXSVByb3RvY29sSlNPTk9i
amVjdCBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0OmluX3BheWxvYWRdIGF1dG9yZWxlYXNlXTsK
LSAgICBpbnQgb19pbl9kYXRhYmFzZUlkOwotICAgIGlmIChpbl9kYXRhYmFzZUlkKQotICAgICAg
ICBvX2luX2RhdGFiYXNlSWQgPSAqaW5fZGF0YWJhc2VJZDsKLSAgICBUZXN0UHJvdG9jb2xEYXRh
YmFzZUVycm9yICpvX2luX3NxbEVycm9yOwotICAgIGlmIChpbl9zcWxFcnJvcikKLSAgICAgICAg
b19pbl9zcWxFcnJvciA9IFtbW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgYWxsb2NdIGluaXRX
aXRoSlNPTk9iamVjdDppbl9zcWxFcnJvcl0gYXV0b3JlbGVhc2VdOwotICAgIE9wdGlvbmFsPFRl
c3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycz4gb19pbl9zY3JlZW5Db2xvcjsKLSAgICBp
ZiAoaW5fc2NyZWVuQ29sb3IpCi0gICAgICAgIG9faW5fc2NyZWVuQ29sb3IgPSBmcm9tUHJvdG9j
b2xTdHJpbmc8VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzPigqaW5fc2NyZWVuQ29s
b3IpOwotICAgIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqb19pbl9hbHRlcm5hdGVDb2xvcnM7Ci0g
ICAgaWYgKGluX2FsdGVybmF0ZUNvbG9ycykKLSAgICAgICAgb19pbl9hbHRlcm5hdGVDb2xvcnMg
PSB0b09iakNTdHJpbmdBcnJheShpbl9hbHRlcm5hdGVDb2xvcnMpOwotICAgIE9wdGlvbmFsPFRl
c3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3I+
IG9faW5fcHJpbnRDb2xvcjsKLSAgICBpZiAoaW5fcHJpbnRDb2xvcikKLSAgICAgICAgb19pbl9w
cmludENvbG9yID0gZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0
ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3I+KCppbl9wcmludENvbG9yKTsKLQotICAg
IFttX2RlbGVnYXRlIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNXaXRoRXJyb3JDYWxsYmFj
azplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2sgY29sdW1uTmFt
ZXM6KGluX2NvbHVtbk5hbWVzID8gJm9faW5fY29sdW1uTmFtZXMgOiBuaWwpIG5vdGVzOihpbl9u
b3RlcyA/ICZvX2luX25vdGVzIDogbmlsKSB0aW1lc3RhbXA6KGluX3RpbWVzdGFtcCA/ICZvX2lu
X3RpbWVzdGFtcCA6IG5pbCkgdmFsdWVzOihpbl92YWx1ZXMgPyAmb19pbl92YWx1ZXMgOiBuaWwp
IHBheWxvYWQ6KGluX3BheWxvYWQgPyAmb19pbl9wYXlsb2FkIDogbmlsKSBkYXRhYmFzZUlkOihp
bl9kYXRhYmFzZUlkID8gJm9faW5fZGF0YWJhc2VJZCA6IG5pbCkgc3FsRXJyb3I6KGluX3NxbEVy
cm9yID8gJm9faW5fc3FsRXJyb3IgOiBuaWwpIHNjcmVlbkNvbG9yOihpbl9zY3JlZW5Db2xvciA/
ICZvX2luX3NjcmVlbkNvbG9yLnZhbHVlKCkgOiBuaWwpIGFsdGVybmF0ZUNvbG9yczooaW5fYWx0
ZXJuYXRlQ29sb3JzID8gJm9faW5fYWx0ZXJuYXRlQ29sb3JzIDogbmlsKSBwcmludENvbG9yOihp
bl9wcmludENvbG9yID8gJm9faW5fcHJpbnRDb2xvci52YWx1ZSgpIDogbmlsKV07Ci19Ci0KLXZv
aWQgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVOb09wdGlv
bmFsUGFyYW1ldGVycyhsb25nIHJlcXVlc3RJZCwgY29uc3QgSlNPTjo6QXJyYXkmIGluX2NvbHVt
bk5hbWVzLCBjb25zdCBTdHJpbmcmIGluX25vdGVzLCBkb3VibGUgaW5fdGltZXN0YW1wLCBjb25z
dCBKU09OOjpPYmplY3QmIGluX3ZhbHVlcywgSlNPTjo6VmFsdWUgaW5fcGF5bG9hZCwgaW50IGlu
X2RhdGFiYXNlSWQsIGNvbnN0IEpTT046Ok9iamVjdCYgaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmlu
ZyYgaW5fc2NyZWVuQ29sb3IsIGNvbnN0IEpTT046OkFycmF5JiBpbl9hbHRlcm5hdGVDb2xvcnMs
IGNvbnN0IFN0cmluZyYgaW5fcHJpbnRDb2xvcikKLXsKLSAgICBpZiAoIVttX2RlbGVnYXRlIHJl
c3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzV2l0
aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOmNvbHVtbk5hbWVzOm5vdGVzOnRpbWVzdGFt
cDp2YWx1ZXM6cGF5bG9hZDpkYXRhYmFzZUlkOnNxbEVycm9yOnNjcmVlbkNvbG9yOmFsdGVybmF0
ZUNvbG9yczpwcmludENvbG9yOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJl
cG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90
Rm91bmQsICInRGF0YWJhc2UuZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzJyB3YXMgbm90IGZv
dW5kIl9zKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMo
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5T
U3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90
b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJv
cik7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0g
ICAgfTsKLQotICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiov
ICpjb2x1bW5OYW1lcywgTlNTdHJpbmcgKm5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSV0lQcm90
b2NvbEpTT05PYmplY3QgKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkLCBp
bnQgZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqc3FsRXJyb3IsIFRlc3RQ
cm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyBzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3Ry
aW5nPiovICphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0
aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvciBwcmludENvbG9yKSB7Ci0gICAgICAgIFJlZjxKU09O
OjpPYmplY3Q+IHJlc3VsdE9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKGNvbHVtbk5hbWVzLCBAImNv
bHVtbk5hbWVzIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1F
VEVSKG5vdGVzLCBAIm5vdGVzIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlS
RURfUEFSQU1FVEVSKHZhbHVlcywgQCJ2YWx1ZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIocGF5bG9hZCwgQCJwYXlsb2FkIik7Ci0gICAgICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHNxbEVycm9yLCBAInNxbEVycm9y
Iik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKGFsdGVy
bmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5z
ZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KGNvbHVtbk5hbWVzKSk7
Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJub3RlcyJfcywgbm90ZXMpOwotICAg
ICAgICByZXN1bHRPYmplY3QtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCB0aW1lc3RhbXApOwot
ICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdCgidmFsdWVzIl9zLCBbdmFsdWVzIHRvSlNP
Tk9iamVjdF0pOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBb
cGF5bG9hZCB0b0pTT05PYmplY3RdKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRJbnRlZ2Vy
KCJkYXRhYmFzZUlkIl9zLCBkYXRhYmFzZUlkKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRP
YmplY3QoInNxbEVycm9yIl9zLCBbc3FsRXJyb3IgdG9KU09OT2JqZWN0XSk7Ci0gICAgICAgIHJl
c3VsdE9iamVjdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgdG9Qcm90b2NvbFN0cmluZyhz
Y3JlZW5Db2xvcikpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJhbHRlcm5hdGVD
b2xvcnMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KGFsdGVybmF0ZUNvbG9ycykpOwotICAgICAgICBy
ZXN1bHRPYmplY3QtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgdG9Qcm90b2NvbFN0cmluZyhw
cmludENvbG9yKSk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShy
ZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0T2JqZWN0KSwgZmFsc2UpOwotICAgIH07Ci0KLSAgICBO
U0FycmF5Lyo8TlNTdHJpbmc+Ki8gKm9faW5fY29sdW1uTmFtZXMgPSB0b09iakNTdHJpbmdBcnJh
eSgmaW5fY29sdW1uTmFtZXMpOwotICAgIE5TU3RyaW5nICpvX2luX25vdGVzID0gaW5fbm90ZXM7
Ci0gICAgZG91YmxlIG9faW5fdGltZXN0YW1wID0gaW5fdGltZXN0YW1wOwotICAgIFJXSVByb3Rv
Y29sSlNPTk9iamVjdCAqb19pbl92YWx1ZXMgPSBbW1tSV0lQcm90b2NvbEpTT05PYmplY3QgYWxs
b2NdIGluaXRXaXRoSlNPTk9iamVjdDomaW5fdmFsdWVzXSBhdXRvcmVsZWFzZV07Ci0gICAgUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICpvX2luX3BheWxvYWQgPSBbW1tSV0lQcm90b2NvbEpTT05PYmpl
Y3QgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDomaW5fcGF5bG9hZF0gYXV0b3JlbGVhc2VdOwot
ICAgIGludCBvX2luX2RhdGFiYXNlSWQgPSBpbl9kYXRhYmFzZUlkOwotICAgIFRlc3RQcm90b2Nv
bERhdGFiYXNlRXJyb3IgKm9faW5fc3FsRXJyb3IgPSBbW1tUZXN0UHJvdG9jb2xEYXRhYmFzZUVy
cm9yIGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6JmluX3NxbEVycm9yXSBhdXRvcmVsZWFzZV07
Ci0gICAgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzPiBvX2luX3Nj
cmVlbkNvbG9yID0gZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFy
eUNvbG9ycz4oaW5fc2NyZWVuQ29sb3IpOwotICAgIGlmICghb19pbl9zY3JlZW5Db2xvcikgewot
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmRE
aXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCAiUGFyYW1ldGVyICdzY3JlZW5Db2xvcicgb2YgbWV0
aG9kICdEYXRhYmFzZS5leGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMnIGNhbm5vdCBiZSBwcm9j
ZXNzZWQiX3MpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIE5TQXJyYXkvKjxOU1N0cmlu
Zz4qLyAqb19pbl9hbHRlcm5hdGVDb2xvcnMgPSB0b09iakNTdHJpbmdBcnJheSgmaW5fYWx0ZXJu
YXRlQ29sb3JzKTsKLSAgICBPcHRpb25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09w
dGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3I+IG9faW5fcHJpbnRDb2xvciA9IGZyb21Qcm90b2Nv
bFN0cmluZzxUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1By
aW50Q29sb3I+KGluX3ByaW50Q29sb3IpOwotICAgIGlmICghb19pbl9wcmludENvbG9yKSB7Ci0g
ICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERp
c3BhdGNoZXI6OkludmFsaWRQYXJhbXMsICJQYXJhbWV0ZXIgJ3ByaW50Q29sb3InIG9mIG1ldGhv
ZCAnRGF0YWJhc2UuZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzJyBjYW5ub3QgYmUgcHJvY2Vz
c2VkIl9zKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFttX2RlbGVnYXRlIGV4ZWN1
dGVOb09wdGlvbmFsUGFyYW1ldGVyc1dpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3Vj
Y2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjayBjb2x1bW5OYW1lczpvX2luX2NvbHVtbk5hbWVz
IG5vdGVzOm9faW5fbm90ZXMgdGltZXN0YW1wOm9faW5fdGltZXN0YW1wIHZhbHVlczpvX2luX3Zh
bHVlcyBwYXlsb2FkOm9faW5fcGF5bG9hZCBkYXRhYmFzZUlkOm9faW5fZGF0YWJhc2VJZCBzcWxF
cnJvcjpvX2luX3NxbEVycm9yIHNjcmVlbkNvbG9yOm9faW5fc2NyZWVuQ29sb3IudmFsdWUoKSBh
bHRlcm5hdGVDb2xvcnM6b19pbl9hbHRlcm5hdGVDb2xvcnMgcHJpbnRDb2xvcjpvX2luX3ByaW50
Q29sb3IudmFsdWUoKV07Ci19Ci0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMu
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0
IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+Ci0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxp
dHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDog
TlNPYmplY3QKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4sIHNldHRlcj1zZXREYXRhYmFz
ZUhhbmRsZXI6KSBpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+IGRhdGFiYXNl
SGFuZGxlcjsKLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRp
b24uaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2Fs
bC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKLQotI2lt
cG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tl
bmREaXNwYXRjaGVycy5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0
Y2hhYmxlQWdlbnQuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVj
dG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJu
YXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQot
QGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KLXsKLSAgICBBdWdtZW50
YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotICAgIGlkPFRlc3RQcm90b2Nv
bERhdGFiYXNlRG9tYWluSGFuZGxlcj4gX2RhdGFiYXNlSGFuZGxlcjsKLX0KLQotLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVy
Kiljb250cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYp
Ci0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIpOwotICAgIF9jb250
cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClkZWFs
bG9jCi17Ci0gICAgW19kYXRhYmFzZUhhbmRsZXIgcmVsZWFzZV07Ci0gICAgW3N1cGVyIGRlYWxs
b2NdOwotfQotCi0tICh2b2lkKXNldERhdGFiYXNlSGFuZGxlcjooaWQ8VGVzdFByb3RvY29sRGF0
YWJhc2VEb21haW5IYW5kbGVyPiloYW5kbGVyCi17Ci0gICAgaWYgKGhhbmRsZXIgPT0gX2RhdGFi
YXNlSGFuZGxlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgW19kYXRhYmFzZUhhbmRsZXIgcmVs
ZWFzZV07Ci0gICAgX2RhdGFiYXNlSGFuZGxlciA9IFtoYW5kbGVyIHJldGFpbl07Ci0KLSAgICBh
dXRvIGFsdGVybmF0ZURpc3BhdGNoZXIgPSBtYWtlVW5pcXVlPE9iakNJbnNwZWN0b3JEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVyPihoYW5kbGVyKTsKLSAgICBhdXRvIGFsdGVybmF0ZUFnZW50ID0g
bWFrZVVuaXF1ZTxBbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudDxEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVyLCBBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPj4oIkRhdGFiYXNlIl9z
LCAqX2NvbnRyb2xsZXIsIFdURk1vdmUoYWx0ZXJuYXRlRGlzcGF0Y2hlcikpOwotICAgIF9jb250
cm9sbGVyLT5hcHBlbmRFeHRyYUFnZW50KFdURk1vdmUoYWx0ZXJuYXRlQWdlbnQpKTsKLX0KLQot
LSAoaWQ8VGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyPilkYXRhYmFzZUhhbmRsZXIK
LXsKLSAgICByZXR1cm4gX2RhdGFiYXNlSGFuZGxlcjsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRl
c3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucy5oIgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIElu
c3BlY3RvcjsKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMu
bW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0
ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2lt
cG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9S
V0lQcm90b2NvbEpTT05PYmplY3QuaD4KLQotCi1AY2xhc3MgVGVzdFByb3RvY29sRGF0YWJhc2VF
cnJvcjsKLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sUGxhdGZvcm0p
IHsKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbCwKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9y
bUdlbmVyaWMsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1JT1MsCi0gICAgVGVzdFByb3RvY29s
UGxhdGZvcm1NYWNPUywKLX07Ci0KLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFBy
b3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzKSB7Ci0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VQ
cmltYXJ5Q29sb3JzUmVkLAotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc0dy
ZWVuLAotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc0JsdWUsCi19OwotCi10
eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxP
cHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yKSB7Ci0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VF
eGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckN5YW4sCi0gICAgVGVzdFByb3Rv
Y29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvck1hZ2VudGEs
Ci0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJp
bnRDb2xvclllbGxvdywKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25h
bFBhcmFtZXRlcnNQcmludENvbG9yQmxhY2ssCi19OwotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRl
Z2VyLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmlu
dENvbG9yKSB7Ci0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJh
bWV0ZXJzUHJpbnRDb2xvckN5YW4sCi0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxs
T3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvck1hZ2VudGEsCi0gICAgVGVzdFByb3RvY29sRGF0
YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvclllbGxvdywKLSAgICBU
ZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9y
QmxhY2ssCi19OwotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xEYXRh
YmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IpIHsKLSAgICBUZXN0UHJv
dG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JDeWFuLAot
ICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRD
b2xvck1hZ2VudGEsCi0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBh
cmFtZXRlcnNQcmludENvbG9yWWVsbG93LAotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0
ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckJsYWNrLAotfTsKLQotdHlwZWRlZiBOU19F
TlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFt
ZXRlcnNQcmludENvbG9yKSB7Ci0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRp
b25hbFBhcmFtZXRlcnNQcmludENvbG9yQ3lhbiwKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JNYWdlbnRhLAotICAgIFRlc3RQcm90
b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvclllbGxvdywK
LSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50
Q29sb3JCbGFjaywKLX07Ci0KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQi
KSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgOiBSV0lQcm90b2NvbEpT
T05PYmplY3QKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxO
U1N0cmluZyAqLCBpZD4gKilwYXlsb2FkOwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9j
b2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7Ci0tIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZTooaW50KWNvZGU7
Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKm1l
c3NhZ2U7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQg
Y29kZTsKLUBlbmQKLQotQHByb3RvY29sIFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxl
ciA8TlNPYmplY3Q+Ci1Ab3B0aW9uYWwKLS0gKHZvaWQpZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1l
dGVyc1dpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxs
YmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoTlNBcnJheS8qPE5TU3RyaW5nPiovICoqY29s
dW1uTmFtZXMsIE5TU3RyaW5nICoqbm90ZXMsIGRvdWJsZSAqdGltZXN0YW1wLCBSV0lQcm90b2Nv
bEpTT05PYmplY3QgKip2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnBheWxvYWQsIGlu
dCAqZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKnNxbEVycm9yLCBUZXN0
UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgKnNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNT
dHJpbmc+Ki8gKiphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFs
bE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IgKnByaW50Q29sb3IpKXN1Y2Nlc3NDYWxsYmFj
ayBjb2x1bW5OYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKWNvbHVtbk5hbWVzIG5vdGVz
OihOU1N0cmluZyAqKilub3RlcyB0aW1lc3RhbXA6KGRvdWJsZSAqKXRpbWVzdGFtcCB2YWx1ZXM6
KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKil2YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xKU09O
T2JqZWN0ICoqKXBheWxvYWQgZGF0YWJhc2VJZDooaW50ICopZGF0YWJhc2VJZCBzcWxFcnJvcjoo
VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKilzcWxFcnJvciBzY3JlZW5Db2xvcjooVGVzdFBy
b3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzICopc2NyZWVuQ29sb3IgYWx0ZXJuYXRlQ29sb3Jz
OihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopYWx0ZXJuYXRlQ29sb3JzIHByaW50Q29sb3I6KFRl
c3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3Ig
KilwcmludENvbG9yOwotLSAodm9pZClleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNXaXRoRXJy
b3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vz
c0NhbGxiYWNrOih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqY29sdW1uTmFtZXMsIE5T
U3RyaW5nICpub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICp2
YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQsIFRl
c3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVBy
aW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqYWx0ZXJuYXRl
Q29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1By
aW50Q29sb3IgcHJpbnRDb2xvcikpc3VjY2Vzc0NhbGxiYWNrIGNvbHVtbk5hbWVzOihOU0FycmF5
Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcyBub3RlczooTlNTdHJpbmcgKilub3RlcyB0aW1l
c3RhbXA6KGRvdWJsZSl0aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKil2
YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZCBkYXRhYmFzZUlk
OihpbnQpZGF0YWJhc2VJZCBzcWxFcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKXNx
bEVycm9yIHNjcmVlbkNvbG9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMpc2Ny
ZWVuQ29sb3IgYWx0ZXJuYXRlQ29sb3JzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilhbHRlcm5h
dGVDb2xvcnMgcHJpbnRDb2xvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25h
bFBhcmFtZXRlcnNQcmludENvbG9yKXByaW50Q29sb3I7Ci1AZW5kCi0KLQotCi0KLSNpbXBvcnQg
PFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4KLQot
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRz
LXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgot
I2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKLSNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8d3Rm
L0pTT05WYWx1ZXMuaD4KLQotCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5h
bC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2Fs
bC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCA8V2ViSW5zcGVj
dG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9y
IHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgotT3B0aW9uYWw8T2JqQ0VudW1U
eXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0KLWlubGluZSBT
dHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xQbGF0Zm9ybSB2YWx1ZSkKLXsKLSAg
ICBzd2l0Y2godmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOgotICAg
ICAgICByZXR1cm4gImFsbCJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJp
YzoKLSAgICAgICAgcmV0dXJuICJnZW5lcmljIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxh
dGZvcm1JT1M6Ci0gICAgICAgIHJldHVybiAiaW9zIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29s
UGxhdGZvcm1NYWNPUzoKLSAgICAgICAgcmV0dXJuICJtYWNvcyJfczsKLSAgICB9Ci19Ci0KLXRl
bXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xQbGF0Zm9ybT4gZnJvbVByb3Rv
Y29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJhbGwi
KQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1BbGw7Ci0gICAgaWYgKHZhbHVl
ID09ICJnZW5lcmljIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJp
YzsKLSAgICBpZiAodmFsdWUgPT0gImlvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQ
bGF0Zm9ybUlPUzsKLSAgICBpZiAodmFsdWUgPT0gIm1hY29zIikKLSAgICAgICAgcmV0dXJuIFRl
c3RQcm90b2NvbFBsYXRmb3JtTWFjT1M7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQot
Ci1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sRGF0YWJhc2VQcmlt
YXJ5Q29sb3JzIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFBy
b3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzUmVkOgotICAgICAgICByZXR1cm4gInJlZCJfczsK
LSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc0dyZWVuOgotICAgICAg
ICByZXR1cm4gImdyZWVuIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5
Q29sb3JzQmx1ZToKLSAgICAgICAgcmV0dXJuICJibHVlIl9zOwotICAgIH0KLX0KLQotdGVtcGxh
dGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycz4g
ZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVl
ID09ICJyZWQiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29s
b3JzUmVkOwotICAgIGlmICh2YWx1ZSA9PSAiZ3JlZW4iKQotICAgICAgICByZXR1cm4gVGVzdFBy
b3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzR3JlZW47Ci0gICAgaWYgKHZhbHVlID09ICJibHVl
IikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc0JsdWU7
Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29s
U3RyaW5nKFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1By
aW50Q29sb3IgdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJv
dG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQ3lhbjoK
LSAgICAgICAgcmV0dXJuICJjeWFuIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VF
eGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvck1hZ2VudGE6Ci0gICAgICAgIHJl
dHVybiAibWFnZW50YSJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFs
bE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JZZWxsb3c6Ci0gICAgICAgIHJldHVybiAieWVs
bG93Il9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQ
YXJhbWV0ZXJzUHJpbnRDb2xvckJsYWNrOgotICAgICAgICByZXR1cm4gImJsYWNrIl9zOwotICAg
IH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNl
RXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3I+IGZyb21Qcm90b2NvbFN0cmlu
Zyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiY3lhbiIpCi0gICAg
ICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRl
cnNQcmludENvbG9yQ3lhbjsKLSAgICBpZiAodmFsdWUgPT0gIm1hZ2VudGEiKQotICAgICAgICBy
ZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJp
bnRDb2xvck1hZ2VudGE7Ci0gICAgaWYgKHZhbHVlID09ICJ5ZWxsb3ciKQotICAgICAgICByZXR1
cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRD
b2xvclllbGxvdzsKLSAgICBpZiAodmFsdWUgPT0gImJsYWNrIikKLSAgICAgICAgcmV0dXJuIFRl
c3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JC
bGFjazsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi1pbmxpbmUgU3RyaW5nIHRvUHJv
dG9jb2xTdHJpbmcoVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0
ZXJzUHJpbnRDb2xvciB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBjYXNlIFRl
c3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JD
eWFuOgotICAgICAgICByZXR1cm4gImN5YW4iX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRh
YmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yTWFnZW50YToKLSAgICAg
ICAgcmV0dXJuICJtYWdlbnRhIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVj
dXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvclllbGxvdzoKLSAgICAgICAgcmV0dXJu
ICJ5ZWxsb3ciX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRp
b25hbFBhcmFtZXRlcnNQcmludENvbG9yQmxhY2s6Ci0gICAgICAgIHJldHVybiAiYmxhY2siX3M7
Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0
YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvcj4gZnJvbVByb3RvY29s
U3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJjeWFuIikK
LSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFy
YW1ldGVyc1ByaW50Q29sb3JDeWFuOwotICAgIGlmICh2YWx1ZSA9PSAibWFnZW50YSIpCi0gICAg
ICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRl
cnNQcmludENvbG9yTWFnZW50YTsKLSAgICBpZiAodmFsdWUgPT0gInllbGxvdyIpCi0gICAgICAg
IHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQ
cmludENvbG9yWWVsbG93OwotICAgIGlmICh2YWx1ZSA9PSAiYmxhY2siKQotICAgICAgICByZXR1
cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRD
b2xvckJsYWNrOwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLWlubGluZSBTdHJpbmcg
dG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFy
YW1ldGVyc1ByaW50Q29sb3IgdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2Fz
ZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29s
b3JDeWFuOgotICAgICAgICByZXR1cm4gImN5YW4iX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xE
YXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JNYWdlbnRhOgotICAg
ICAgICByZXR1cm4gIm1hZ2VudGEiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JZZWxsb3c6Ci0gICAgICAgIHJldHVy
biAieWVsbG93Il9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRp
b25hbFBhcmFtZXRlcnNQcmludENvbG9yQmxhY2s6Ci0gICAgICAgIHJldHVybiAiYmxhY2siX3M7
Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0
YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yPiBmcm9tUHJvdG9jb2xT
dHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gImN5YW4iKQot
ICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFt
ZXRlcnNQcmludENvbG9yQ3lhbjsKLSAgICBpZiAodmFsdWUgPT0gIm1hZ2VudGEiKQotICAgICAg
ICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQ
cmludENvbG9yTWFnZW50YTsKLSAgICBpZiAodmFsdWUgPT0gInllbGxvdyIpCi0gICAgICAgIHJl
dHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50
Q29sb3JZZWxsb3c7Ci0gICAgaWYgKHZhbHVlID09ICJibGFjayIpCi0gICAgICAgIHJldHVybiBU
ZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JC
bGFjazsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi1pbmxpbmUgU3RyaW5nIHRvUHJv
dG9jb2xTdHJpbmcoVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRl
cnNQcmludENvbG9yIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVz
dFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQ3lh
bjoKLSAgICAgICAgcmV0dXJuICJjeWFuIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJh
c2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yTWFnZW50YToKLSAgICAgICAg
cmV0dXJuICJtYWdlbnRhIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRl
Tm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yWWVsbG93OgotICAgICAgICByZXR1cm4gInll
bGxvdyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQ
YXJhbWV0ZXJzUHJpbnRDb2xvckJsYWNrOgotICAgICAgICByZXR1cm4gImJsYWNrIl9zOwotICAg
IH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNl
RXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvcj4gZnJvbVByb3RvY29sU3RyaW5n
KGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJjeWFuIikKLSAgICAg
ICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJz
UHJpbnRDb2xvckN5YW47Ci0gICAgaWYgKHZhbHVlID09ICJtYWdlbnRhIikKLSAgICAgICAgcmV0
dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRD
b2xvck1hZ2VudGE7Ci0gICAgaWYgKHZhbHVlID09ICJ5ZWxsb3ciKQotICAgICAgICByZXR1cm4g
VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9y
WWVsbG93OwotICAgIGlmICh2YWx1ZSA9PSAiYmxhY2siKQotICAgICAgICByZXR1cm4gVGVzdFBy
b3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQmxhY2s7
Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFy
YW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotCi0jaW1wb3J0ICJUZXN0
UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKLSNpbXBvcnQg
PFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0KLXVzaW5nIG5h
bWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zIChEYXRhYmFzZURvbWFpbikKLQotKyAodm9pZClfcGFyc2VEYXRhYmFzZUlkOihOU051bWJl
ciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLSsgKHZvaWQpX3BhcnNlUHJp
bWFyeUNvbG9yczooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7
Ci0rICh2b2lkKV9wYXJzZUNvbG9yTGlzdDooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKW91dFZh
bHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotKyAodm9pZClfcGFyc2VFcnJvcjooVGVzdFBy
b3RvY29sRGF0YWJhc2VFcnJvciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsK
LQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChE
YXRhYmFzZURvbWFpbikKLQotKyAodm9pZClfcGFyc2VEYXRhYmFzZUlkOihOU051bWJlciAqKilv
dXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfQkFEX1RZUEUocGF5bG9hZCwgW05TTnVtYmVyIGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0g
KE5TTnVtYmVyICopcGF5bG9hZDsKLX0KLQotKyAodm9pZClfcGFyc2VQcmltYXJ5Q29sb3JzOihO
U051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TU3RyaW5nIGNsYXNzXSk7Ci0gICAg
T3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzPiByZXN1bHQgPSBJbnNw
ZWN0b3I6OmZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xv
cnM+KHBheWxvYWQpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX0VOVU1fVkFMVUUocmVz
dWx0LCBAIlByaW1hcnlDb2xvcnMiKTsKLSAgICAqb3V0VmFsdWUgPSBAKHJlc3VsdC52YWx1ZSgp
KTsKLX0KLQotKyAodm9pZClfcGFyc2VDb2xvckxpc3Q6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAq
KilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TQXJyYXkvKjxOU1N0cmluZz4qLyBjbGFzc10pOwot
ICAgICpvdXRWYWx1ZSA9IChOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilwYXlsb2FkOwotfQotCi0r
ICh2b2lkKV9wYXJzZUVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqKW91dFZhbHVl
IGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURf
VFlQRShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gW1tU
ZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07
Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJu
LXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2Nv
bEpTT05PYmplY3RQcml2YXRlLmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9y
dCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi1A
aW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcgotCi0tIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4g
KilwYXlsb2FkCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJl
dHVybiBuaWw7Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBh
eWxvYWRbQCJtZXNzYWdlIl0sIEAibWVzc2FnZSIpOwotICAgIHNlbGYubWVzc2FnZSA9IHBheWxv
YWRbQCJtZXNzYWdlIl07Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BF
UlRZKHBheWxvYWRbQCJjb2RlIl0sIEAiY29kZSIpOwotICAgIHNlbGYuY29kZSA9IFtwYXlsb2Fk
W0AiY29kZSJdIGludGVnZXJWYWx1ZV07Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLS0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilv
YmplY3QKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoSlNPTk9iamVjdDpbb2Jq
ZWN0IHRvSlNPTk9iamVjdF0uZ2V0KCldKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIHJl
dHVybiBzZWxmOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0cmlu
ZyAqKW1lc3NhZ2UgY29kZTooaW50KWNvZGUKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGlu
aXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVR
VUlSRURfUFJPUEVSVFkobWVzc2FnZSwgQCJtZXNzYWdlIik7Ci0KLSAgICBzZWxmLm1lc3NhZ2Ug
PSBtZXNzYWdlOwotICAgIHNlbGYuY29kZSA9IGNvZGU7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0K
LQotLSAodm9pZClzZXRNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UKLXsKLSAgICBbc3VwZXIg
c2V0U3RyaW5nOm1lc3NhZ2UgZm9yS2V5OkAibWVzc2FnZSJdOwotfQotCi0tIChOU1N0cmluZyAq
KW1lc3NhZ2UKLXsKLSAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAIm1lc3NhZ2UiXTsK
LX0KLQotLSAodm9pZClzZXRDb2RlOihpbnQpY29kZQotewotICAgIFtzdXBlciBzZXRJbnRlZ2Vy
OmNvZGUgZm9yS2V5OkAiY29kZSJdOwotfQotCi0tIChpbnQpY29kZQotewotICAgIHJldHVybiBb
c3VwZXIgaW50ZWdlckZvcktleTpAImNvZGUiXTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2RlZmluaXRpb25zLXdp
dGgtbWFjLXBsYXRmb3JtLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZGVmaW5pdGlvbnMtd2l0aC1tYWMt
cGxhdGZvcm0uanNvbi1yZXN1bHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0YzBm
ZTNmZTNjLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0
Zm9ybS5qc29uLXJlc3VsdAorKysgL2Rldi9udWxsCkBAIC0xLDg3MCArMCwwIEBACi0jIyMgQmVn
aW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotIyMjIEVuZCBGaWxlOiBJbnNwZWN0
b3JCYWNrZW5kQ29tbWFuZHMuanMKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmlu
aXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCi0j
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotCi1uYW1l
c3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewot
cHVibGljOgotICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNw
YXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlz
cGF0Y2hlcik7IH0KLSAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBj
b25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Ci1wcml2YXRlOgotICAg
IFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKLX07Ci0KLQot
Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVy
cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1t
YWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQot
dHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMu
aD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
LSNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jZW5kaWYKLQot
bmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQot
IyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNs
YXNzIEZyb250ZW5kUm91dGVyOwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQg
RmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZy
b250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
ZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVz
dEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1u
YW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBF
bmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xPYmplY3RzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBk
ZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25z
Lmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotbmFtZXNwYWNlIFByb3RvY29sIHsK
LQotCi0KLQotCi0KLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotCi0jaW5jbHVkZSA8d3RmL09wdGlv
bmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVj
dG9yIHsKLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3Rv
Y29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbE9iamVjdHMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlz
cGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25z
LXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVycy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQotCi0KLW5h
bWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5o
IgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRl
ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLW5hbWVzcGFjZSBJbnNw
ZWN0b3IgewotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbENvbmZpZ3VyYXRpb24uaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRl
ZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5o
PgotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2Ug
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0Ci1AZW5kCi0KLQotIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRp
b24uaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0
ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21l
bnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIElu
c3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KLXsK
LSAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotfQotCi0t
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNv
bnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlm
ICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0g
ICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2
b2lkKWRlYWxsb2MKLXsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLUBlbmQKLQotCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbElu
dGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2lt
cG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQot
Ci0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24u
aD4KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgotCi0K
LQotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xQbGF0Zm9ybSkgewot
ICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtR2Vu
ZXJpYywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUywKLSAgICBUZXN0UHJvdG9jb2xQbGF0
Zm9ybU1hY09TLAotfTsKLQotCi0KLQotCi0KLQotCi0KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9y
L1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgotCi0jIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5o
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMt
cGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmpl
Y3RQcml2YXRlLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3Rv
ckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLQotCi0KLSMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9y
dCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgotCi1uYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgotT3B0aW9u
YWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7
Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xQbGF0Zm9ybSB2
YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRm
b3JtQWxsOgotICAgICAgICByZXR1cm4gImFsbCJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBs
YXRmb3JtR2VuZXJpYzoKLSAgICAgICAgcmV0dXJuICJnZW5lcmljIl9zOwotICAgIGNhc2UgVGVz
dFByb3RvY29sUGxhdGZvcm1JT1M6Ci0gICAgICAgIHJldHVybiAiaW9zIl9zOwotICAgIGNhc2Ug
VGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzoKLSAgICAgICAgcmV0dXJuICJtYWNvcyJfczsKLSAg
ICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xQbGF0Zm9y
bT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZh
bHVlID09ICJhbGwiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1BbGw7Ci0g
ICAgaWYgKHZhbHVlID09ICJnZW5lcmljIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBs
YXRmb3JtR2VuZXJpYzsKLSAgICBpZiAodmFsdWUgPT0gImlvcyIpCi0gICAgICAgIHJldHVybiBU
ZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzsKLSAgICBpZiAodmFsdWUgPT0gIm1hY29zIikKLSAgICAg
ICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M7Ci0gICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRl
ZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
LmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlw
ZVBhcnNlci5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFBy
aXZhdGUuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0KLQotCi0KLSMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xUeXBlcy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIK
LQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDxXZWJJ
bnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotI2ltcG9ydCA8d3RmL0Fz
c2VydGlvbnMuaD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFj
ZSBJbnNwZWN0b3I7Ci0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvZXhwZWN0ZWQvZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uLXJlc3VsdCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVk
L2RvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbi1yZXN1bHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGY1YjU5MTdhYTBiLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9kb21haW4tZGVi
dWdnYWJsZVR5cGVzLmpzb24tcmVzdWx0CisrKyAvZGV2L251bGwKQEAgLTEsMTA2MyArMCwwIEBA
Ci0jIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLS8vIERvbWFpbgotSW5zcGVj
dG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiRG9tYWluIiwgbnVsbCk7Ci1JbnNwZWN0b3JCYWNr
ZW5kLnJlZ2lzdGVyQ29tbWFuZCgiRG9tYWluLkNvbW1hbmQiLCBudWxsLCBbXSwgW10pOwotSW5z
cGVjdG9yQmFja2VuZC5yZWdpc3RlckV2ZW50KCJEb21haW4uRXZlbnQiLCBudWxsLCBbXSk7Ci1J
bnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluRGlzcGF0Y2hlciA9IEluc3BlY3RvckJhY2tl
bmQucmVnaXN0ZXJEaXNwYXRjaGVyLmJpbmQoSW5zcGVjdG9yQmFja2VuZCwgIkRvbWFpbiIpOwot
SW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiRG9tYWluIiwgWyJ3ZWItcGFnZSJdKTsK
LSMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQotI2luY2x1ZGUgIlRlc3RQcm90
b2NvbFR5cGVzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJv
dXRlci5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgQWx0ZXJuYXRlQmFja2Vu
ZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVm
UHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hl
ciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KLSAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2Vu
ZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9
Ci1wcml2YXRlOgotICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0
Y2hlcjsKLX07Ci0KLQotY2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIgOiBw
dWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZpcnR1YWwg
fkFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lk
IENvbW1hbmQobG9uZyBjYWxsSWQpID0gMDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgotCi0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0j
IyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVz
dFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5h
bWVzcGFjZSBJbnNwZWN0b3IgewotCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQotI2lm
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotY2xhc3MgQWx0ZXJuYXRl
RG9tYWluQmFja2VuZERpc3BhdGNoZXI7Ci0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCi0KLWNsYXNzIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxl
ciB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIENvbW1hbmQoRXJyb3JTdHJpbmcmKSA9IDA7
Ci1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB+RG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
KCk7Ci19OwotCi1jbGFzcyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBT
dXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxE
b21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgRG9tYWlu
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVl
c3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkg
ZmluYWw7Ci1wcml2YXRlOgotICAgIHZvaWQgQ29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVmUHRy
PEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVS
TkFURV9ESVNQQVRDSEVSUykKLXB1YmxpYzoKLSAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNo
ZXIoQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIp
IHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQotcHJpdmF0
ZToKLSAgICBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciogbV9hbHRlcm5hdGVEaXNw
YXRjaGVyIHsgbnVsbHB0ciB9OwotI2VuZGlmCi1wcml2YXRlOgotICAgIERvbWFpbkJhY2tlbmRE
aXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyKik7Ci0gICAgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50IHsgbnVs
bHB0ciB9OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRl
c3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNw
YXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVi
dWdnYWJsZVR5cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hl
cnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVy
Lmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0
cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNpZiBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXJzLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLURv
bWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6fkRvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlcigpIHsgfQotCi1SZWY8RG9tYWluQmFja2VuZERpc3BhdGNoZXI+IERvbWFpbkJhY2tlbmRE
aXNwYXRjaGVyOjpjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBE
b21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQotewotICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2Vu
dCkpOwotfQotCi1Eb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6RG9tYWluQmFja2VuZERpc3BhdGNo
ZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBEb21haW5CYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXIqIGFnZW50KQotICAgIDogU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNo
ZXIoYmFja2VuZERpc3BhdGNoZXIpCi0gICAgLCBtX2FnZW50KGFnZW50KQotewotICAgIG1fYmFj
a2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbigiRG9tYWluIl9zLCB0
aGlzKTsKLX0KLQotdm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBy
ZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3Nh
Z2UpCi17Ci0gICAgUmVmPERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsK
LQotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0
T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRlcnMpOwotCi0gICAgaWYgKG1ldGhvZCA9PSAiQ29t
bWFuZCIpCi0gICAgICAgIENvbW1hbmQocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsK
LSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJy
b3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi4iICsgbWV0aG9k
ICsgIicgd2FzIG5vdCBmb3VuZCIpOwotfQotCi12b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVy
OjpDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQotewotI2lm
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotICAgIGlmIChtX2FsdGVy
bmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5Db21tYW5k
KHJlcXVlc3RJZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIEVycm9y
U3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVj
dDo6Y3JlYXRlKCk7Ci0gICAgbV9hZ2VudC0+Q29tbWFuZChlcnJvcik7Ci0KLSAgICBpZiAoIWVy
cm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2Uo
cmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1f
YmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6
OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAi
VGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1j
bGFzcyBGcm9udGVuZFJvdXRlcjsKLQotY2xhc3MgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVyIHsK
LSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBEb21haW5Gcm9udGVu
ZERpc3BhdGNoZXIoRnJvbnRlbmRSb3V0ZXImIGZyb250ZW5kUm91dGVyKSA6IG1fZnJvbnRlbmRS
b3V0ZXIoZnJvbnRlbmRSb3V0ZXIpIHsgfQotICAgIHZvaWQgRXZlbnQoKTsKLXByaXZhdGU6Ci0g
ICAgRnJvbnRlbmRSb3V0ZXImIG1fZnJvbnRlbmRSb3V0ZXI7Ci19OwotCi19IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi12b2lkIERvbWFpbkZyb250ZW5k
RGlzcGF0Y2hlcjo6RXZlbnQoKQotewotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdl
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJt
ZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOwotCi0gICAgbV9mcm9udGVuZFJvdXRlci5zZW5k
RXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi1uYW1lc3BhY2Ug
UHJvdG9jb2wgewotCi0KLQotCi0KLQotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQot
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVj
dHMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLQotI2luY2x1ZGUgPHd0Zi9P
cHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIElu
c3BlY3RvciB7Ci0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBQ
cm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xPYmplY3RzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2Vu
ZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4t
ZGVidWdnYWJsZVR5cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tl
bmREaXNwYXRjaGVycy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQotQHByb3RvY29s
IFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI7Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewotCi0KLWNsYXNzIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6
IHB1YmxpYyBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciB7Ci0gICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmRE
aXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsg
bV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KLSAgICB2b2lkIENvbW1hbmQobG9uZyByZXF1ZXN0SWQp
IGZpbmFsOwotcHJpdmF0ZToKLSAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sRG9tYWluRG9t
YWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
LQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5o
IgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRl
ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLW5hbWVzcGFjZSBJbnNw
ZWN0b3IgewotCi12b2lkIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29t
bWFuZChsb25nIHJlcXVlc3RJZCkKLXsKLSAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9T
ZWxlY3RvcjpAc2VsZWN0b3IoQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFj
azopXSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9y
KHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi5D
b21tYW5kJyB3YXMgbm90IGZvdW5kIl9zKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlkIGVy
cm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6
OlNlcnZlckVycm9yLCBlcnJvcik7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQ
ZW5kaW5nRXJyb3JzKCk7Ci0gICAgfTsKLQotICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57Ci0g
ICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpTT046
Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKLSAgICB9OwotCi0gICAgW21fZGVsZWdhdGUgQ29t
bWFuZFdpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nl
c3NDYWxsYmFja107Ci19Ci0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBkb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2Nv
bC5oPgotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZh
Y2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0Ci1AcHJvcGVydHkgKG5vbmF0
b21pYywgcmV0YWluLCBzZXR0ZXI9c2V0RG9tYWluSGFuZGxlcjopIGlkPFRlc3RQcm90b2NvbERv
bWFpbkRvbWFpbkhhbmRsZXI+IGRvbWFpbkhhbmRsZXI7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywg
cmVhZG9ubHkpIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqZG9tYWlu
RXZlbnREaXNwYXRjaGVyOwotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29u
ZmlndXJhdGlvbi5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9u
Lm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLWRlYnVnZ2FibGVU
eXBlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNp
bXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKLQotI2ltcG9ydCAiVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5o
IgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4K
LSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5o
PgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXJzLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcnMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9u
IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KLXsKLSAgICBBdWdtZW50YWJsZUluc3BlY3RvckNv
bnRyb2xsZXIqIF9jb250cm9sbGVyOwotICAgIGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhh
bmRsZXI+IF9kb21haW5IYW5kbGVyOwotICAgIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50
RGlzcGF0Y2hlciAqX2RvbWFpbkV2ZW50RGlzcGF0Y2hlcjsKLX0KLQotLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250
cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAg
ICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIpOwotICAgIF9jb250cm9sbGVy
ID0gY29udHJvbGxlcjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClkZWFsbG9jCi17
Ci0gICAgW19kb21haW5IYW5kbGVyIHJlbGVhc2VdOwotICAgIFtfZG9tYWluRXZlbnREaXNwYXRj
aGVyIHJlbGVhc2VdOwotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAodm9pZClzZXREb21h
aW5IYW5kbGVyOihpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiloYW5kbGVyCi17
Ci0gICAgaWYgKGhhbmRsZXIgPT0gX2RvbWFpbkhhbmRsZXIpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIFtfZG9tYWluSGFuZGxlciByZWxlYXNlXTsKLSAgICBfZG9tYWluSGFuZGxlciA9IFtoYW5k
bGVyIHJldGFpbl07Ci0KLSAgICBhdXRvIGFsdGVybmF0ZURpc3BhdGNoZXIgPSBtYWtlVW5pcXVl
PE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7Ci0gICAgYXV0
byBhbHRlcm5hdGVBZ2VudCA9IG1ha2VVbmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8
RG9tYWluQmFja2VuZERpc3BhdGNoZXIsIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVy
Pj4oIkRvbWFpbiJfcywgKl9jb250cm9sbGVyLCBXVEZNb3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIp
KTsKLSAgICBfY29udHJvbGxlci0+YXBwZW5kRXh0cmFBZ2VudChXVEZNb3ZlKGFsdGVybmF0ZUFn
ZW50KSk7Ci19Ci0KLS0gKGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+KWRvbWFp
bkhhbmRsZXIKLXsKLSAgICByZXR1cm4gX2RvbWFpbkhhbmRsZXI7Ci19Ci0KLS0gKFRlc3RQcm90
b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqKWRvbWFpbkV2ZW50RGlzcGF0Y2hlcgot
ewotICAgIGlmICghX2RvbWFpbkV2ZW50RGlzcGF0Y2hlcikKLSAgICAgICAgX2RvbWFpbkV2ZW50
RGlzcGF0Y2hlciA9IFtbVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyIGFs
bG9jXSBpbml0V2l0aENvbnRyb2xsZXI6X2NvbnRyb2xsZXJdOwotICAgIHJldHVybiBfZG9tYWlu
RXZlbnREaXNwYXRjaGVyOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xDb25maWd1cmF0aW9uLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERp
c3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLWRl
YnVnZ2FibGVUeXBlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQot
dXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2Nv
bERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlcgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9y
Q29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENv
bnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgotewot
ICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4g
bmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xs
ZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpRXZlbnQKLXsKLSAgICBjb25zdCBG
cm9udGVuZFJvdXRlciYgcm91dGVyID0gX2NvbnRyb2xsZXItPmZyb250ZW5kUm91dGVyKCk7Ci0K
LSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRl
KCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50
Il9zKTsKLSAgICByb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7
Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hl
cnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91
bmRhdGlvbi5oPgotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0
Lmg+Ci0KLQotCi0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbFBsYXRm
b3JtKSB7Ci0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1BbGwsCi0gICAgVGVzdFByb3RvY29sUGxh
dGZvcm1HZW5lcmljLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TLAotICAgIFRlc3RQcm90
b2NvbFBsYXRmb3JtTWFjT1MsCi19OwotCi0KLQotCi0KLUBwcm90b2NvbCBUZXN0UHJvdG9jb2xE
b21haW5Eb21haW5IYW5kbGVyIDxOU09iamVjdD4KLUBvcHRpb25hbAotLSAodm9pZClDb21tYW5k
V2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNr
IHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKSh2b2lkKSlzdWNjZXNzQ2FsbGJhY2s7Ci1AZW5kCi0K
LV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0
UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgOiBOU09iamVjdAotLSAodm9pZClF
dmVudDsKLUBlbmQKLQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENv
bXBhdGliaWxpdHlPYmplY3RzLmg+Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKLQot
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgi
Ci0jaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgotI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDx3
dGYvSlNPTlZhbHVlcy5oPgotCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2
ZW50RGlzcGF0Y2hlciAoUHJpdmF0ZSkKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xs
ZXI6KEluc3BlY3Rvcjo6QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVy
OwotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29s
LmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+
Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5
cGU+Ci1PcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJp
bmcmIHZhbHVlKTsKLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2Nv
bFBsYXRmb3JtIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFBy
b3RvY29sUGxhdGZvcm1BbGw6Ci0gICAgICAgIHJldHVybiAiYWxsIl9zOwotICAgIGNhc2UgVGVz
dFByb3RvY29sUGxhdGZvcm1HZW5lcmljOgotICAgICAgICByZXR1cm4gImdlbmVyaWMiX3M7Ci0g
ICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzoKLSAgICAgICAgcmV0dXJuICJpb3MiX3M7
Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOgotICAgICAgICByZXR1cm4gIm1h
Y29zIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90
b2NvbFBsYXRmb3JtPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsK
LSAgICBpZiAodmFsdWUgPT0gImFsbCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0
Zm9ybUFsbDsKLSAgICBpZiAodmFsdWUgPT0gImdlbmVyaWMiKQotICAgICAgICByZXR1cm4gVGVz
dFByb3RvY29sUGxhdGZvcm1HZW5lcmljOwotICAgIGlmICh2YWx1ZSA9PSAiaW9zIikKLSAgICAg
ICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOwotICAgIGlmICh2YWx1ZSA9PSAibWFj
b3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzsKLSAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucy5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2Nv
bFR5cGVQYXJzZXIuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmpl
Y3RQcml2YXRlLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotCi0KLQotCi0j
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBkb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQot
I2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDxXZWJJbnNw
ZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotI2ltcG9ydCA8d3RmL0Fzc2Vy
dGlvbnMuaD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJ
bnNwZWN0b3I7Ci0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVy
aWMvZXhwZWN0ZWQvZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVU
eXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWlu
LWRlYnVnZ2FibGVUeXBlLmpzb24tcmVzdWx0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBkMzBmMjRiNWMzNS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZG9tYWluLXRhcmdldFR5cGUt
bWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tcmVzdWx0CisrKyAvZGV2L251bGwK
QEAgLTEsMTA2MyArMCwwIEBACi0jIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1h
bmRzLmpzCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5
cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotLy8gRG9tYWluCi1JbnNwZWN0b3JCYWNrZW5kLnJl
Z2lzdGVyRG9tYWluKCJEb21haW4iLCBudWxsKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJD
b21tYW5kKCJEb21haW4uQ29tbWFuZCIsIFsicGFnZSIsICJ3b3JrZXIiXSwgW10sIFtdKTsKLUlu
c3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudCgiRG9tYWluLkV2ZW50IiwgbnVsbCwgW10pOwot
SW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbkRpc3BhdGNoZXIgPSBJbnNwZWN0b3JCYWNr
ZW5kLnJlZ2lzdGVyRGlzcGF0Y2hlci5iaW5kKEluc3BlY3RvckJhY2tlbmQsICJEb21haW4iKTsK
LUluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkRvbWFpbiIsIFsicGFnZSJdKTsKLSMj
IyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJs
ZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0j
cHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Igewot
Ci1jbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBz
ZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hl
cikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQotICAgIEJh
Y2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFj
a2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPEJhY2tlbmREaXNw
YXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwotfTsKLQotCi1jbGFzcyBBbHRlcm5hdGVEb21h
aW5CYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7
Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+QWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIo
KSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChsb25nIGNhbGxJZCkgPSAwOwotfTsKLQot
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKLSMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmRE
aXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZS1tYXRj
aGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bE9iamVjdHMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKLQotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KLSNpZiBFTkFCTEUo
SU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLWNsYXNzIEFsdGVybmF0ZURvbWFpbkJh
Y2tlbmREaXNwYXRjaGVyOwotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQotCi1jbGFzcyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewotcHVi
bGljOgotICAgIHZpcnR1YWwgdm9pZCBDb21tYW5kKEVycm9yU3RyaW5nJikgPSAwOwotcHJvdGVj
dGVkOgotICAgIHZpcnR1YWwgfkRvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOwotfTsK
LQotY2xhc3MgRG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVu
dGFsQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8RG9tYWluQmFj
a2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIERvbWFpbkJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlciopOwotICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNv
bnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOwot
cHJpdmF0ZToKLSAgICB2b2lkIENvbW1hbmQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpP
YmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCi1wdWJsaWM6Ci0gICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVy
bmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0
ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KLXByaXZhdGU6Ci0gICAg
QWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIqIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciB7
IG51bGxwdHIgfTsKLSNlbmRpZgotcHJpdmF0ZToKLSAgICBEb21haW5CYWNrZW5kRGlzcGF0Y2hl
cihCYWNrZW5kRGlzcGF0Y2hlciYsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwot
ICAgIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2VudCB7IG51bGxwdHIgfTsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2Vu
ZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMu
Y3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGUt
bWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRl
c3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNs
dWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSNpbmNsdWRl
ICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNl
IEluc3BlY3RvciB7Ci0KLURvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6fkRvbWFpbkJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQotCi1SZWY8RG9tYWluQmFja2VuZERpc3BhdGNo
ZXI+IERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImIGJh
Y2tlbmREaXNwYXRjaGVyLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQot
ewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKGJhY2tl
bmREaXNwYXRjaGVyLCBhZ2VudCkpOwotfQotCi1Eb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6RG9t
YWluQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVy
LCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQotICAgIDogU3VwcGxlbWVu
dGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCi0gICAgLCBtX2FnZW50KGFn
ZW50KQotewotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRv
bWFpbigiRG9tYWluIl9zLCB0aGlzKTsKLX0KLQotdm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hl
cjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNP
Tjo6T2JqZWN0PiYmIG1lc3NhZ2UpCi17Ci0gICAgUmVmPERvbWFpbkJhY2tlbmREaXNwYXRjaGVy
PiBwcm90ZWN0KCp0aGlzKTsKLQotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7
Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRlcnMpOwotCi0gICAg
aWYgKG1ldGhvZCA9PSAiQ29tbWFuZCIpCi0gICAgICAgIENvbW1hbmQocmVxdWVzdElkLCBXVEZN
b3ZlKHBhcmFtZXRlcnMpKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAi
J0RvbWFpbi4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOwotfQotCi12b2lkIERvbWFp
bkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6
T2JqZWN0PiYmKQotewotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQotICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVE
aXNwYXRjaGVyLT5Db21tYW5kKHJlcXVlc3RJZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0j
ZW5kaWYKLQotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJl
c3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgbV9hZ2VudC0+Q29tbWFuZChlcnJv
cik7Ci0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAg
ICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3Io
QmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0
Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hp
bmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xP
YmplY3RzLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEZyb250ZW5k
Um91dGVyOwotCi1jbGFzcyBEb21haW5Gcm9udGVuZERpc3BhdGNoZXIgewotICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcihG
cm9udGVuZFJvdXRlciYgZnJvbnRlbmRSb3V0ZXIpIDogbV9mcm9udGVuZFJvdXRlcihmcm9udGVu
ZFJvdXRlcikgeyB9Ci0gICAgdm9pZCBFdmVudCgpOwotcHJpdmF0ZToKLSAgICBGcm9udGVuZFJv
dXRlciYgbV9mcm9udGVuZFJvdXRlcjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgot
IyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUu
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdm9pZCBE
b21haW5Gcm9udGVuZERpc3BhdGNoZXI6OkV2ZW50KCkKLXsKLSAgICBSZWY8SlNPTjo6T2JqZWN0
PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2Ut
PnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9zKTsKLQotICAgIG1fZnJvbnRl
bmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3Bh
dGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmct
ZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQot
bmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQot
Ci0KLQotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUu
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotCi0jaW5jbHVk
ZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1l
c3BhY2UgSW5zcGVjdG9yIHsKLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLX0gLy8gbmFt
ZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbmNs
dWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLUBwcm90b2NvbCBUZXN0UHJvdG9jb2xEb21haW5Eb21h
aW5IYW5kbGVyOwotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi1jbGFzcyBPYmpDSW5zcGVj
dG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJuYXRlRG9tYWlu
QmFja2VuZERpc3BhdGNoZXIgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGlj
OgotICAgIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9j
b2xEb21haW5Eb21haW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9
Ci0gICAgdm9pZCBDb21tYW5kKGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKLXByaXZhdGU6Ci0gICAg
UmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRl
OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bEJhY2tlbmREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZp
Zy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNs
dWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLW5hbWVzcGFjZSBJ
bnNwZWN0b3IgewotCi12b2lkIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6
Q29tbWFuZChsb25nIHJlcXVlc3RJZCkKLXsKLSAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRz
VG9TZWxlY3RvcjpAc2VsZWN0b3IoQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxs
YmFjazopXSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVy
cm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFp
bi5Db21tYW5kJyB3YXMgbm90IGZvdW5kIl9zKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlk
IGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNo
ZXI6OlNlcnZlckVycm9yLCBlcnJvcik7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNl
bmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgfTsKLQotICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57
Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpT
T046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKLSAgICB9OwotCi0gICAgW21fZGVsZWdhdGUg
Q29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1
Y2Nlc3NDYWxsYmFja107Ci19Ci0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5
cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1w
b3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+Ci0KLV9fYXR0cmlidXRlX18oKHZpc2li
aWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9u
IDogTlNPYmplY3QKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4sIHNldHRlcj1zZXREb21h
aW5IYW5kbGVyOikgaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4gZG9tYWluSGFu
ZGxlcjsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgVGVzdFByb3RvY29sRG9tYWlu
RG9tYWluRXZlbnREaXNwYXRjaGVyICpkb21haW5FdmVudERpc3BhdGNoZXI7Ci1AZW5kCi0KLQot
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5
cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1w
b3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2Nv
bEludGVybmFsLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIK
LSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+Ci0j
aW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4K
LSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVycy5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXJzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBU
ZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCi17Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250
cm9sbGVyKiBfY29udHJvbGxlcjsKLSAgICBpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5k
bGVyPiBfZG9tYWluSGFuZGxlcjsKLSAgICBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERp
c3BhdGNoZXIgKl9kb21haW5FdmVudERpc3BhdGNoZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlp
bml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJv
bGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAg
ICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9
IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwotewot
ICAgIFtfZG9tYWluSGFuZGxlciByZWxlYXNlXTsKLSAgICBbX2RvbWFpbkV2ZW50RGlzcGF0Y2hl
ciByZWxlYXNlXTsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLS0gKHZvaWQpc2V0RG9tYWlu
SGFuZGxlcjooaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4paGFuZGxlcgotewot
ICAgIGlmIChoYW5kbGVyID09IF9kb21haW5IYW5kbGVyKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBbX2RvbWFpbkhhbmRsZXIgcmVsZWFzZV07Ci0gICAgX2RvbWFpbkhhbmRsZXIgPSBbaGFuZGxl
ciByZXRhaW5dOwotCi0gICAgYXV0byBhbHRlcm5hdGVEaXNwYXRjaGVyID0gbWFrZVVuaXF1ZTxP
YmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXI+KGhhbmRsZXIpOwotICAgIGF1dG8g
YWx0ZXJuYXRlQWdlbnQgPSBtYWtlVW5pcXVlPEFsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50PERv
bWFpbkJhY2tlbmREaXNwYXRjaGVyLCBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4+
KCJEb21haW4iX3MsICpfY29udHJvbGxlciwgV1RGTW92ZShhbHRlcm5hdGVEaXNwYXRjaGVyKSk7
Ci0gICAgX2NvbnRyb2xsZXItPmFwcGVuZEV4dHJhQWdlbnQoV1RGTW92ZShhbHRlcm5hdGVBZ2Vu
dCkpOwotfQotCi0tIChpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPilkb21haW5I
YW5kbGVyCi17Ci0gICAgcmV0dXJuIF9kb21haW5IYW5kbGVyOwotfQotCi0tIChUZXN0UHJvdG9j
b2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKilkb21haW5FdmVudERpc3BhdGNoZXIKLXsK
LSAgICBpZiAoIV9kb21haW5FdmVudERpc3BhdGNoZXIpCi0gICAgICAgIF9kb21haW5FdmVudERp
c3BhdGNoZXIgPSBbW1Rlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciBhbGxv
Y10gaW5pdFdpdGhDb250cm9sbGVyOl9jb250cm9sbGVyXTsKLSAgICByZXR1cm4gX2RvbWFpbkV2
ZW50RGlzcGF0Y2hlcjsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbi5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNw
YXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJn
ZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVy
bmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9y
dCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGlt
cGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlcgotewot
ICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci19Ci0KLS0g
KGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29u
dHJvbGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYg
KCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAg
ICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZv
aWQpRXZlbnQKLXsKLSAgICBjb25zdCBGcm9udGVuZFJvdXRlciYgcm91dGVyID0gX2NvbnRyb2xs
ZXItPmZyb250ZW5kUm91dGVyKCk7Ci0KLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2Fn
ZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygi
bWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9zKTsKLSAgICByb3V0ZXIuc2VuZEV2ZW50KGpzb25N
ZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5
cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9u
Lmg+Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KLQot
Ci0KLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sUGxhdGZvcm0pIHsK
LSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbCwKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdl
bmVyaWMsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1JT1MsCi0gICAgVGVzdFByb3RvY29sUGxh
dGZvcm1NYWNPUywKLX07Ci0KLQotCi0KLQotQHByb3RvY29sIFRlc3RQcm90b2NvbERvbWFpbkRv
bWFpbkhhbmRsZXIgPE5TT2JqZWN0PgotQG9wdGlvbmFsCi0tICh2b2lkKUNvbW1hbmRXaXRoRXJy
b3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vz
c0NhbGxiYWNrOih2b2lkKF4pKHZvaWQpKXN1Y2Nlc3NDYWxsYmFjazsKLUBlbmQKLQotX19hdHRy
aWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2Nv
bERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciA6IE5TT2JqZWN0Ci0tICh2b2lkKUV2ZW50Owot
QGVuZAotCi0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJp
bGl0eU9iamVjdHMuaD4KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlw
ZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBv
cnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZh
dGUuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJv
bGxlci5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotQGludGVyZmFjZSBUZXN0UHJv
dG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKFByaXZhdGUpCi0tIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhDb250cm9sbGVyOihJbnNwZWN0b3I6OkF1Z21lbnRhYmxlSW5zcGVjdG9yQ29u
dHJvbGxlciopY29udHJvbGxlcjsKLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bEludGVybmFsLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGUt
bWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0
IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+Ci0KLW5hbWVzcGFj
ZSBJbnNwZWN0b3IgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+Ci1PcHRpb25h
bDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsK
LQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFBsYXRmb3JtIHZh
bHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZv
cm1BbGw6Ci0gICAgICAgIHJldHVybiAiYWxsIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxh
dGZvcm1HZW5lcmljOgotICAgICAgICByZXR1cm4gImdlbmVyaWMiX3M7Ci0gICAgY2FzZSBUZXN0
UHJvdG9jb2xQbGF0Zm9ybUlPUzoKLSAgICAgICAgcmV0dXJuICJpb3MiX3M7Ci0gICAgY2FzZSBU
ZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOgotICAgICAgICByZXR1cm4gIm1hY29zIl9zOwotICAg
IH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFBsYXRmb3Jt
PiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFs
dWUgPT0gImFsbCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDsKLSAg
ICBpZiAodmFsdWUgPT0gImdlbmVyaWMiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxh
dGZvcm1HZW5lcmljOwotICAgIGlmICh2YWx1ZSA9PSAiaW9zIikKLSAgICAgICAgcmV0dXJuIFRl
c3RQcm90b2NvbFBsYXRmb3JtSU9TOwotICAgIGlmICh2YWx1ZSA9PSAibWFjb3MiKQotICAgICAg
ICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzsKLSAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9t
YWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9y
dCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVBy
b3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsK
LQotCi0KLQotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1t
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1
Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29s
SlNPTk9iamVjdFByaXZhdGUuaD4KLSNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW1wb3J0
IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLSMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2RvbWFp
bi10YXJnZXRUeXBlcy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2RvbWFpbi10YXJnZXRUeXBlcy5qc29u
LXJlc3VsdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjg5NDhhMmY3NDcuLjAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9nZW5lcmljL2V4cGVjdGVkL2RvbWFpbi10YXJnZXRUeXBlcy5qc29uLXJlc3VsdAorKysgL2Rl
di9udWxsCkBAIC0xLDEwNjMgKzAsMCBAQAotIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tl
bmRDb21tYW5kcy5qcwotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10
YXJnZXRUeXBlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLS8vIERvbWFpbgotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiRG9tYWluIiwg
WyJwYWdlIl0pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIkRvbWFpbi5Db21t
YW5kIiwgWyJwYWdlIl0sIFtdLCBbXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnQo
IkRvbWFpbi5FdmVudCIsIFsicGFnZSJdLCBbXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVy
RG9tYWluRGlzcGF0Y2hlciA9IEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEaXNwYXRjaGVyLmJp
bmQoSW5zcGVjdG9yQmFja2VuZCwgIkRvbWFpbiIpOwotSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0
ZURvbWFpbigiRG9tYWluIiwgbnVsbCk7Ci0jIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRD
b21tYW5kcy5qcwotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5
cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3By
YWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
LQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQot
Y2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZvaWQgc2V0
QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIp
IHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KLSAgICBCYWNr
ZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tl
bmREaXNwYXRjaGVyLmdldCgpOyB9Ci1wcml2YXRlOgotICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0
Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKLX07Ci0KLQotY2xhc3MgQWx0ZXJuYXRlRG9tYWlu
QmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewot
cHVibGljOgotICAgIHZpcnR1YWwgfkFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKCkg
eyB9Ci0gICAgdmlydHVhbCB2b2lkIENvbW1hbmQobG9uZyBjYWxsSWQpID0gMDsKLX07Ci0KLX0g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCi0jIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlz
cGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVzLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNl
Ci0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXR5cGVkZWYgU3RyaW5nIEVy
cm9yU3RyaW5nOwotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
Ci1jbGFzcyBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjsKLSNlbmRpZiAvLyBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQotY2xhc3MgRG9tYWluQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChF
cnJvclN0cmluZyYpID0gMDsKLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIH5Eb21haW5CYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIoKTsKLX07Ci0KLWNsYXNzIERvbWFpbkJhY2tlbmREaXNwYXRjaGVy
IGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoK
LSAgICBzdGF0aWMgUmVmPERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERp
c3BhdGNoZXImLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICB2b2lkIGRp
c3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9i
amVjdD4mJiBtZXNzYWdlKSBmaW5hbDsKLXByaXZhdGU6Ci0gICAgdm9pZCBDb21tYW5kKGxvbmcg
cmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwotI2lmIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotcHVibGljOgotICAgIHZvaWQgc2V0
QWx0ZXJuYXRlRGlzcGF0Y2hlcihBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciogYWx0
ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNw
YXRjaGVyOyB9Ci1wcml2YXRlOgotICAgIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVy
KiBtX2FsdGVybmF0ZURpc3BhdGNoZXIgeyBudWxscHRyIH07Ci0jZW5kaWYKLXByaXZhdGU6Ci0g
ICAgRG9tYWluQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImLCBEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIqIG1fYWdlbnQgeyBudWxscHRyIH07Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
LSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0QmFj
a2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JG
cm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8
d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi0j
aWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jaW5jbHVkZSAiVGVz
dEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBJbnNw
ZWN0b3IgewotCi1Eb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5Eb21haW5CYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KLQotUmVmPERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBE
b21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5k
RGlzcGF0Y2hlciwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKLXsKLSAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlz
cGF0Y2hlciwgYWdlbnQpKTsKLX0KLQotRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkRvbWFpbkJh
Y2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgRG9t
YWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKLSAgICA6IFN1cHBsZW1lbnRhbEJh
Y2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQotICAgICwgbV9hZ2VudChhZ2VudCkK
LXsKLSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4o
IkRvbWFpbiJfcywgdGhpcyk7Ci19Ci0KLXZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmRp
c3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9i
amVjdD4mJiBtZXNzYWdlKQotewotICAgIFJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gcHJv
dGVjdCgqdGhpcyk7Ci0KLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOwotICAg
IG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsKLQotICAgIGlmICht
ZXRob2QgPT0gIkNvbW1hbmQiKQotICAgICAgICBDb21tYW5kKHJlcXVlc3RJZCwgV1RGTW92ZShw
YXJhbWV0ZXJzKSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBv
cnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21h
aW4uIiArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKLX0KLQotdm9pZCBEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJikKLXsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSAg
ICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0
Y2hlci0+Q29tbWFuZChyZXF1ZXN0SWQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlm
Ci0KLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQg
PSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIG1fYWdlbnQtPkNvbW1hbmQoZXJyb3IpOwot
Ci0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+
c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxz
ZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tl
bmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOwotfQotCi19IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJz
LmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlcy5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0j
aW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVz
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0
b3IgewotCi1jbGFzcyBGcm9udGVuZFJvdXRlcjsKLQotY2xhc3MgRG9tYWluRnJvbnRlbmREaXNw
YXRjaGVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBEb21h
aW5Gcm9udGVuZERpc3BhdGNoZXIoRnJvbnRlbmRSb3V0ZXImIGZyb250ZW5kUm91dGVyKSA6IG1f
ZnJvbnRlbmRSb3V0ZXIoZnJvbnRlbmRSb3V0ZXIpIHsgfQotICAgIHZvaWQgRXZlbnQoKTsKLXBy
aXZhdGU6Ci0gICAgRnJvbnRlbmRSb3V0ZXImIG1fZnJvbnRlbmRSb3V0ZXI7Ci19OwotCi19IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hl
cnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVzLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXZvaWQgRG9tYWluRnJv
bnRlbmREaXNwYXRjaGVyOjpFdmVudCgpCi17Ci0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1l
c3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJp
bmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7Ci0KLSAgICBtX2Zyb250ZW5kUm91dGVy
LnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwotfQotCi19IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5j
cHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlcy5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0
Zi9Bc3NlcnRpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotbmFtZXNwYWNl
IFByb3RvY29sIHsKLQotCi0KLQotCi0KLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0K
LX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmpl
Y3RzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVzLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLQotI2luY2x1ZGUgPHd0Zi9PcHRp
b25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3Bl
Y3RvciB7Ci0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90
b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xPYmplY3RzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERp
c3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFy
Z2V0VHlwZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXJzLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi1AcHJvdG9jb2wgVGVzdFBy
b3RvY29sRG9tYWluRG9tYWluSGFuZGxlcjsKLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQot
Y2xhc3MgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGlj
IEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKLXB1YmxpYzoKLSAgICBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNo
ZXIoaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVn
YXRlID0gaGFuZGxlcjsgfQotICAgIHZvaWQgQ29tbWFuZChsb25nIHJlcXVlc3RJZCkgZmluYWw7
Ci1wcml2YXRlOgotICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5k
bGVyPj4gbV9kZWxlZ2F0ZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZXMuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQg
IlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSAiVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIK
LSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQot
dm9pZCBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9uZyBy
ZXF1ZXN0SWQpCi17Ci0gICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNl
bGVjdG9yKENvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsKLSAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQs
IEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uQ29tbWFuZCcgd2Fz
IG5vdCBmb3VuZCJfcyk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5n
RXJyb3JzKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZCBlcnJvckNhbGxiYWNr
ID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVw
b3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJv
ciwgZXJyb3IpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9y
cygpOwotICAgIH07Ci0KLSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpLCBmYWxzZSk7Ci0gICAgfTsKLQotICAgIFttX2RlbGVnYXRlIENvbW1hbmRXaXRoRXJy
b3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2td
OwotfQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sQ29uZmlndXJhdGlvbi5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9t
YWluLXRhcmdldFR5cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgotCi1fX2F0dHJp
YnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbiA6IE5TT2JqZWN0Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluLCBz
ZXR0ZXI9c2V0RG9tYWluSGFuZGxlcjopIGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRs
ZXI+IGRvbWFpbkhhbmRsZXI7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFRlc3RQ
cm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqZG9tYWluRXZlbnREaXNwYXRjaGVy
OwotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVzLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbi5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2lt
cG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgotI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgotCi11c2luZyBu
YW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xs
ZXI7Ci0gICAgaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4gX2RvbWFpbkhhbmRs
ZXI7Ci0gICAgVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyICpfZG9tYWlu
RXZlbnREaXNwYXRjaGVyOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVy
OihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBzZWxm
ID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAg
ICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAg
IHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBbX2RvbWFpbkhhbmRs
ZXIgcmVsZWFzZV07Ci0gICAgW19kb21haW5FdmVudERpc3BhdGNoZXIgcmVsZWFzZV07Ci0gICAg
W3N1cGVyIGRlYWxsb2NdOwotfQotCi0tICh2b2lkKXNldERvbWFpbkhhbmRsZXI6KGlkPFRlc3RQ
cm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+KWhhbmRsZXIKLXsKLSAgICBpZiAoaGFuZGxlciA9
PSBfZG9tYWluSGFuZGxlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgW19kb21haW5IYW5kbGVy
IHJlbGVhc2VdOwotICAgIF9kb21haW5IYW5kbGVyID0gW2hhbmRsZXIgcmV0YWluXTsKLQotICAg
IGF1dG8gYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IG1ha2VVbmlxdWU8T2JqQ0luc3BlY3RvckRvbWFp
bkJhY2tlbmREaXNwYXRjaGVyPihoYW5kbGVyKTsKLSAgICBhdXRvIGFsdGVybmF0ZUFnZW50ID0g
bWFrZVVuaXF1ZTxBbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudDxEb21haW5CYWNrZW5kRGlzcGF0
Y2hlciwgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXI+PigiRG9tYWluIl9zLCAqX2Nv
bnRyb2xsZXIsIFdURk1vdmUoYWx0ZXJuYXRlRGlzcGF0Y2hlcikpOwotICAgIF9jb250cm9sbGVy
LT5hcHBlbmRFeHRyYUFnZW50KFdURk1vdmUoYWx0ZXJuYXRlQWdlbnQpKTsKLX0KLQotLSAoaWQ8
VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4pZG9tYWluSGFuZGxlcgotewotICAgIHJl
dHVybiBfZG9tYWluSGFuZGxlcjsKLX0KLQotLSAoVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZl
bnREaXNwYXRjaGVyICopZG9tYWluRXZlbnREaXNwYXRjaGVyCi17Ci0gICAgaWYgKCFfZG9tYWlu
RXZlbnREaXNwYXRjaGVyKQotICAgICAgICBfZG9tYWluRXZlbnREaXNwYXRjaGVyID0gW1tUZXN0
UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgYWxsb2NdIGluaXRXaXRoQ29udHJv
bGxlcjpfY29udHJvbGxlcl07Ci0gICAgcmV0dXJuIF9kb21haW5FdmVudERpc3BhdGNoZXI7Ci19
Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0K
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZXMuanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJv
dG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMu
aCIKLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0
b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3Bh
dGNoZXIKLXsKLSAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVy
OwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUlu
c3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRd
OwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJv
bGxlcik7Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwot
fQotCi0tICh2b2lkKUV2ZW50Ci17Ci0gICAgY29uc3QgRnJvbnRlbmRSb3V0ZXImIHJvdXRlciA9
IF9jb250cm9sbGVyLT5mcm9udGVuZFJvdXRlcigpOwotCi0gICAgUmVmPEpTT046Ok9iamVjdD4g
anNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5z
ZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7Ci0gICAgcm91dGVyLnNlbmRF
dmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwotfQotCi1AZW5kCi0KLQotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2wuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFp
bi10YXJnZXRUeXBlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotCi0jaW1wb3J0IDxXZWJJ
bnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+Ci0KLQotCi0KLXR5cGVkZWYgTlNfRU5V
TShOU0ludGVnZXIsIFRlc3RQcm90b2NvbFBsYXRmb3JtKSB7Ci0gICAgVGVzdFByb3RvY29sUGxh
dGZvcm1BbGwsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljLAotICAgIFRlc3RQcm90
b2NvbFBsYXRmb3JtSU9TLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1MsCi19OwotCi0K
LQotCi0KLUBwcm90b2NvbCBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyIDxOU09iamVj
dD4KLUBvcHRpb25hbAotLSAodm9pZClDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXiko
TlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKSh2
b2lkKSlzdWNjZXNzQ2FsbGJhY2s7Ci1AZW5kCi0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkg
KCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERp
c3BhdGNoZXIgOiBOU09iamVjdAotLSAodm9pZClFdmVudDsKLUBlbmQKLQotCi0jaW1wb3J0IDxX
ZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+Ci0KLSMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bEludGVybmFsLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFy
Z2V0VHlwZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmpl
Y3RQcml2YXRlLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3Rv
ckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLUBpbnRlcmZhY2Ug
VGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyIChQcml2YXRlKQotLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooSW5zcGVjdG9yOjpBdWdtZW50YWJsZUluc3Bl
Y3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXI7Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xJbnRlcm5hbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJn
ZXRUeXBlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3Rv
Y29sQXJyYXlDb252ZXJzaW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdGVtcGxh
dGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgotT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJv
dG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90
b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xQbGF0Zm9ybSB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFs
dWUpIHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOgotICAgICAgICByZXR1cm4g
ImFsbCJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzoKLSAgICAgICAg
cmV0dXJuICJnZW5lcmljIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1JT1M6Ci0g
ICAgICAgIHJldHVybiAiaW9zIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNP
UzoKLSAgICAgICAgcmV0dXJuICJtYWNvcyJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlu
bGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xQbGF0Zm9ybT4gZnJvbVByb3RvY29sU3RyaW5nKGNv
bnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJhbGwiKQotICAgICAgICBy
ZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1BbGw7Ci0gICAgaWYgKHZhbHVlID09ICJnZW5lcmlj
IikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzsKLSAgICBpZiAo
dmFsdWUgPT0gImlvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzsK
LSAgICBpZiAodmFsdWUgPT0gIm1hY29zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBs
YXRmb3JtTWFjT1M7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
LmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlcy5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNp
bXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9S
V0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0
b3I7Ci0KLQotCi0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZXMuanNvbgotLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJ
bnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNp
bXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0jaW1w
b3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNp
bmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5
cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNp
emVzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXpl
cy5qc29uLXJlc3VsdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmMwN2NiMTM0N2Yu
LjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6
ZXMuanNvbi1yZXN1bHQKKysrIC9kZXYvbnVsbApAQCAtMSwxNDU1ICswLDAgQEAKLSMjIyBCZWdp
biBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotLy8gTmV0d29yazEKLUlu
c3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIk5ldHdvcmsxIiwgbnVsbCk7Ci1JbnNwZWN0
b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiTmV0d29yazEubG9hZFJlc291cmNlMSIsIG51bGws
IFtdLCBbXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJOZXR3b3JrMSIsIG51
bGwpOwotCi0vLyBOZXR3b3JrMwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiTmV0
d29yazMiLCBudWxsKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3Jr
My5sb2FkUmVzb3VyY2UxIiwgbnVsbCwgW10sIFtdKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0
ZXJDb21tYW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2UyIiwgbnVsbCwgW10sIFtdKTsKLUluc3Bl
Y3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2UzIiwgbnVs
bCwgW10sIFtdKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMy5s
b2FkUmVzb3VyY2U0IiwgbnVsbCwgW10sIFtdKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJD
b21tYW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2U1IiwgbnVsbCwgW10sIFtdKTsKLUluc3BlY3Rv
ckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2U2IiwgbnVsbCwg
W10sIFtdKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMy5sb2Fk
UmVzb3VyY2U3IiwgbnVsbCwgW10sIFtdKTsKLUluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21h
aW4oIk5ldHdvcmszIiwgbnVsbCk7Ci0jIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21t
YW5kcy5qcwotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVy
cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlp
bmctY29tbWFuZC1zaXplcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgotI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLQotbmFtZXNwYWNlIElu
c3BlY3RvciB7Ci0KLWNsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoK
LSAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4m
JiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIp
OyB9Ci0gICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQotcHJpdmF0ZToKLSAgICBSZWZQdHI8
QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Ci19OwotCi0KLWNsYXNzIEFs
dGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2Vu
ZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZpcnR1YWwgfkFsdGVybmF0ZU5ldHdvcmsxQmFj
a2VuZERpc3BhdGNoZXIoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMShsb25n
IGNhbGxJZCkgPSAwOwotfTsKLWNsYXNzIEFsdGVybmF0ZU5ldHdvcmszQmFja2VuZERpc3BhdGNo
ZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZp
cnR1YWwgfkFsdGVybmF0ZU5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIoKSB7IH0KLSAgICB2aXJ0
dWFsIHZvaWQgbG9hZFJlc291cmNlMShsb25nIGNhbGxJZCkgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBsb2FkUmVzb3VyY2UyKGxvbmcgY2FsbElkKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRS
ZXNvdXJjZTMobG9uZyBjYWxsSWQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNl
NChsb25nIGNhbGxJZCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2U1KGxvbmcg
Y2FsbElkKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTYobG9uZyBjYWxsSWQp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlNyhsb25nIGNhbGxJZCkgPSAwOwot
fTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNo
ZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFy
eWluZy1jb21tYW5kLXNpemVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3Rz
LmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3Rv
ciB7Ci0KLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCi0jaWYgRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi1jbGFzcyBBbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmRE
aXNwYXRjaGVyOwotY2xhc3MgQWx0ZXJuYXRlTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjsKLSNl
bmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQotY2xhc3Mg
TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewotcHVibGljOgotICAgIHZpcnR1YWwg
dm9pZCBsb2FkUmVzb3VyY2UxKEVycm9yU3RyaW5nJikgPSAwOwotcHJvdGVjdGVkOgotICAgIHZp
cnR1YWwgfk5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7Ci19OwotCi1jbGFzcyBO
ZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB2
b2lkIGxvYWRSZXNvdXJjZTEoRXJyb3JTdHJpbmcmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxv
YWRSZXNvdXJjZTIoRXJyb3JTdHJpbmcmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNv
dXJjZTMoRXJyb3JTdHJpbmcmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTQo
RXJyb3JTdHJpbmcmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTUoRXJyb3JT
dHJpbmcmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTYoRXJyb3JTdHJpbmcm
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTcoRXJyb3JTdHJpbmcmKSA9IDA7
Ci1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB+TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIoKTsKLX07Ci0KLWNsYXNzIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJs
aWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHN0YXRpYyBS
ZWY8TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwg
TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICB2b2lkIGRpc3BhdGNoKGxv
bmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBt
ZXNzYWdlKSBmaW5hbDsKLXByaXZhdGU6Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2UxKGxvbmcgcmVx
dWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwotI2lmIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotcHVibGljOgotICAgIHZvaWQgc2V0QWx0
ZXJuYXRlRGlzcGF0Y2hlcihBbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKiBhbHRl
cm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3Bh
dGNoZXI7IH0KLXByaXZhdGU6Ci0gICAgQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hl
ciogbV9hbHRlcm5hdGVEaXNwYXRjaGVyIHsgbnVsbHB0ciB9OwotI2VuZGlmCi1wcml2YXRlOgot
ICAgIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImLCBOZXR3b3Jr
MUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIE5ldHdvcmsxQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyKiBtX2FnZW50IHsgbnVsbHB0ciB9OwotfTsKLQotY2xhc3MgTmV0d29yazNCYWNr
ZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hl
ciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyPiBj
cmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxl
ciopOwotICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0
aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOwotcHJpdmF0ZToKLSAgICB2
b2lkIGxvYWRSZXNvdXJjZTEobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYg
cGFyYW1ldGVycyk7Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2UyKGxvbmcgcmVxdWVzdElkLCBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwotICAgIHZvaWQgbG9hZFJlc291cmNlMyhs
b25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKLSAgICB2
b2lkIGxvYWRSZXNvdXJjZTQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYg
cGFyYW1ldGVycyk7Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2U1KGxvbmcgcmVxdWVzdElkLCBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwotICAgIHZvaWQgbG9hZFJlc291cmNlNihs
b25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKLSAgICB2
b2lkIGxvYWRSZXNvdXJjZTcobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYg
cGFyYW1ldGVycyk7Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
Ci1wdWJsaWM6Ci0gICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZU5ldHdv
cmszQmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVE
aXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQotcHJpdmF0ZToKLSAgICBBbHRlcm5h
dGVOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyKiBtX2FsdGVybmF0ZURpc3BhdGNoZXIgeyBudWxs
cHRyIH07Ci0jZW5kaWYKLXByaXZhdGU6Ci0gICAgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcihC
YWNrZW5kRGlzcGF0Y2hlciYsIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0g
ICAgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQgeyBudWxscHRyIH07
Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tl
bmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJz
LmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5
aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNw
YXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRS
b3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi9OZXZl
ckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2lmIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotI2luY2x1ZGUgIlRlc3RBbHRlcm5h
dGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsK
LQotTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5OZXR3b3JrMUJhY2tlbmREaXNw
YXRjaGVySGFuZGxlcigpIHsgfQotTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5O
ZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQotCi1SZWY8TmV0d29yazFCYWNr
ZW5kRGlzcGF0Y2hlcj4gTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEJhY2tlbmRE
aXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXIqIGFnZW50KQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE5ldHdvcmsxQmFja2Vu
ZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIsIGFnZW50KSk7Ci19Ci0KLU5ldHdvcmsxQmFj
a2VuZERpc3BhdGNoZXI6Ok5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNo
ZXImIGJhY2tlbmREaXNwYXRjaGVyLCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciog
YWdlbnQpCi0gICAgOiBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0
Y2hlcikKLSAgICAsIG1fYWdlbnQoYWdlbnQpCi17Ci0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+
cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKCJOZXR3b3JrMSJfcywgdGhpcyk7Ci19Ci0KLXZv
aWQgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNv
bnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCi17Ci0gICAg
UmVmPE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwotCi0gICAgUmVm
UHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVyczsKLSAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBh
cmFtcyJfcywgcGFyYW1ldGVycyk7Ci0KLSAgICBpZiAobWV0aG9kID09ICJsb2FkUmVzb3VyY2Ux
IikKLSAgICAgICAgbG9hZFJlc291cmNlMShyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykp
OwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xF
cnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazEuIiArIG1l
dGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKLX0KLQotdm9pZCBOZXR3b3JrMUJhY2tlbmREaXNw
YXRjaGVyOjpsb2FkUmVzb3VyY2UxKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0
PiYmKQotewotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotICAg
IGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRj
aGVyLT5sb2FkUmVzb3VyY2UxKHJlcXVlc3RJZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0j
ZW5kaWYKLQotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJl
c3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgbV9hZ2VudC0+bG9hZFJlc291cmNl
MShlcnJvcik7Ci0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNl
KTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29s
RXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Ci19
Ci0KLVJlZjxOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyPiBOZXR3b3JrM0JhY2tlbmREaXNwYXRj
aGVyOjpjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBOZXR3b3Jr
M0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQp
KTsKLX0KLQotTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6TmV0d29yazNCYWNrZW5kRGlzcGF0
Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIE5ldHdvcmszQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKLSAgICA6IFN1cHBsZW1lbnRhbEJhY2tlbmREaXNw
YXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQotICAgICwgbV9hZ2VudChhZ2VudCkKLXsKLSAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oIk5ldHdvcmsz
Il9zLCB0aGlzKTsKLX0KLQotdm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRj
aChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+
JiYgbWVzc2FnZSkKLXsKLSAgICBSZWY8TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVj
dCgqdGhpcyk7Ci0KLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOwotICAgIG1l
c3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsKLQotICAgIHR5cGVkZWYg
dm9pZCAoTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6KkNhbGxIYW5kbGVyKShsb25nIHJlcXVl
c3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKTsKLSAgICB0eXBlZGVmIEhhc2hN
YXA8U3RyaW5nLCBDYWxsSGFuZGxlcj4gRGlzcGF0Y2hNYXA7Ci0gICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPERpc3BhdGNoTWFwPiBkaXNwYXRjaE1hcDsKLSAgICBpZiAoZGlzcGF0Y2hNYXAuZ2V0
KCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgTWV0aG9kVGFibGUg
ewotICAgICAgICAgICAgY29uc3QgY2hhciogbmFtZTsKLSAgICAgICAgICAgIENhbGxIYW5kbGVy
IGhhbmRsZXI7Ci0gICAgICAgIH0gY29tbWFuZHNbXSA9IHsKLSAgICAgICAgICAgIHsgImxvYWRS
ZXNvdXJjZTEiLCAmTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMSB9LAot
ICAgICAgICAgICAgeyAibG9hZFJlc291cmNlMiIsICZOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVy
Ojpsb2FkUmVzb3VyY2UyIH0sCi0gICAgICAgICAgICB7ICJsb2FkUmVzb3VyY2UzIiwgJk5ldHdv
cmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTMgfSwKLSAgICAgICAgICAgIHsgImxv
YWRSZXNvdXJjZTQiLCAmTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNCB9
LAotICAgICAgICAgICAgeyAibG9hZFJlc291cmNlNSIsICZOZXR3b3JrM0JhY2tlbmREaXNwYXRj
aGVyOjpsb2FkUmVzb3VyY2U1IH0sCi0gICAgICAgICAgICB7ICJsb2FkUmVzb3VyY2U2IiwgJk5l
dHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTYgfSwKLSAgICAgICAgICAgIHsg
ImxvYWRSZXNvdXJjZTciLCAmTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNl
NyB9LAotICAgICAgICB9OwotICAgICAgICBzaXplX3QgbGVuZ3RoID0gV1RGX0FSUkFZX0xFTkdU
SChjb21tYW5kcyk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kp
Ci0gICAgICAgICAgICBkaXNwYXRjaE1hcC5nZXQoKS5hZGQoY29tbWFuZHNbaV0ubmFtZSwgY29t
bWFuZHNbaV0uaGFuZGxlcik7Ci0gICAgfQotCi0gICAgYXV0byBmaW5kUmVzdWx0ID0gZGlzcGF0
Y2hNYXAuZ2V0KCkuZmluZChtZXRob2QpOwotICAgIGlmIChmaW5kUmVzdWx0ID09IGRpc3BhdGNo
TWFwLmdldCgpLmVuZCgpKSB7Ci0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFBy
b3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmsz
LiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICAoKCp0aGlzKS4qZmluZFJlc3VsdC0+dmFsdWUpKHJlcXVlc3RJZCwgV1RGTW92ZShw
YXJhbWV0ZXJzKSk7Ci19Ci0KLXZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJl
c291cmNlMShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKLXsKLSNpZiBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSAgICBpZiAobV9hbHRlcm5h
dGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291
cmNlMShyZXF1ZXN0SWQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBF
cnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpOwotICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTEoZXJyb3IpOwotCi0g
ICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2Vu
ZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQot
ICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmRE
aXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOwotfQotCi12b2lkIE5ldHdv
cmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTIobG9uZyByZXF1ZXN0SWQsIFJlZlB0
cjxKU09OOjpPYmplY3Q+JiYpCi17Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCi0gICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2Fs
dGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZTIocmVxdWVzdElkKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpT
T046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtX2FnZW50
LT5sb2FkUmVzb3VyY2UyKGVycm9yKTsKLQotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0gICAg
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUo
cmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+
cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1v
dmUoZXJyb3IpKTsKLX0KLQotdm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVz
b3VyY2UzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQotewotI2lmIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotICAgIGlmIChtX2FsdGVybmF0
ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3Vy
Y2UzKHJlcXVlc3RJZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIEVy
cm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9i
amVjdDo6Y3JlYXRlKCk7Ci0gICAgbV9hZ2VudC0+bG9hZFJlc291cmNlMyhlcnJvcik7Ci0KLSAg
ICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5k
UmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0g
ICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERp
c3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Ci19Ci0KLXZvaWQgTmV0d29y
azNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNChsb25nIHJlcXVlc3RJZCwgUmVmUHRy
PEpTT046Ok9iamVjdD4mJikKLXsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKLSAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0
ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlNChyZXF1ZXN0SWQpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNP
Tjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIG1fYWdlbnQt
PmxvYWRSZXNvdXJjZTQoZXJyb3IpOwotCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShy
ZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5y
ZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92
ZShlcnJvcikpOwotfQotCi12b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNv
dXJjZTUobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCi17Ci0jaWYgRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0gICAgaWYgKG1fYWx0ZXJuYXRl
RGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJj
ZTUocmVxdWVzdElkKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAgRXJy
b3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKLSAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2U1KGVycm9yKTsKLQotICAg
IGlmICghZXJyb3IubGVuZ3RoKCkpCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRS
ZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAg
ICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlz
cGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKLX0KLQotdm9pZCBOZXR3b3Jr
M0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U2KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8
SlNPTjo6T2JqZWN0PiYmKQotewotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQotICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRl
cm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2U2KHJlcXVlc3RJZCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09O
OjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgbV9hZ2VudC0+
bG9hZFJlc291cmNlNihlcnJvcik7Ci0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJl
c3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJl
cG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3Zl
KGVycm9yKSk7Ci19Ci0KLXZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291
cmNlNyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKLXsKLSNpZiBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSAgICBpZiAobV9hbHRlcm5hdGVE
aXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNl
NyhyZXF1ZXN0SWQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBFcnJv
clN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmpl
Y3Q6OmNyZWF0ZSgpOwotICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTcoZXJyb3IpOwotCi0gICAg
aWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJl
c3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQotICAg
ICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNw
YXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAot
Ci0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMu
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21h
IG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDx3dGYv
SlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgRnJvbnRlbmRSb3V0ZXI7Ci0KLX0gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0KLSMj
IyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLX0gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJz
LmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXpl
cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFn
bWEgb25jZQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBl
cy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewotCi0KLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLQotCi0vLyBUeXBlZGVmcy4KLW5h
bWVzcGFjZSBOZXR3b3JrMiB7Ci0vKiBVbmlxdWUgbG9hZGVyIGlkZW50aWZpZXIuICovCi10eXBl
ZGVmIFN0cmluZyBMb2FkZXJJZDsKLX0gLy8gTmV0d29yazIKLS8vIEVuZCBvZiB0eXBlZGVmcy4K
LQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0KLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Igewot
Ci1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQot
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2Jq
ZWN0cy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVy
cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlp
bmctY29tbWFuZC1zaXplcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLUBwcm90b2Nv
bCBUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI7Ci1AcHJvdG9jb2wgVGVzdFByb3Rv
Y29sTmV0d29yazNEb21haW5IYW5kbGVyOwotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi1j
bGFzcyBPYmpDSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1Ymxp
YyBBbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyIHsKLSAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBPYmpDSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlz
cGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsg
bV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KLSAgICB2b2lkIGxvYWRSZXNvdXJjZTEobG9uZyByZXF1
ZXN0SWQpIGZpbmFsOwotcHJpdmF0ZToKLSAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sTmV0
d29yazFEb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKLX07Ci0KLWNsYXNzIE9iakNJbnNwZWN0
b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZU5ldHdv
cmszQmFja2VuZERpc3BhdGNoZXIgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVi
bGljOgotICAgIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQ
cm90b2NvbE5ldHdvcmszRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFu
ZGxlcjsgfQotICAgIHZvaWQgbG9hZFJlc291cmNlMShsb25nIHJlcXVlc3RJZCkgZmluYWw7Ci0g
ICAgdm9pZCBsb2FkUmVzb3VyY2UyKGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKLSAgICB2b2lkIGxv
YWRSZXNvdXJjZTMobG9uZyByZXF1ZXN0SWQpIGZpbmFsOwotICAgIHZvaWQgbG9hZFJlc291cmNl
NChsb25nIHJlcXVlc3RJZCkgZmluYWw7Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2U1KGxvbmcgcmVx
dWVzdElkKSBmaW5hbDsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTYobG9uZyByZXF1ZXN0SWQpIGZp
bmFsOwotICAgIHZvaWQgbG9hZFJlc291cmNlNyhsb25nIHJlcXVlc3RJZCkgZmluYWw7Ci1wcml2
YXRlOgotICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkhhbmRsZXI+
PiBtX2RlbGVnYXRlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcu
aCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVk
ZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotCi1uYW1lc3BhY2UgSW5z
cGVjdG9yIHsKLQotdm9pZCBPYmpDSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6
bG9hZFJlc291cmNlMShsb25nIHJlcXVlc3RJZCkKLXsKLSAgICBpZiAoIVttX2RlbGVnYXRlIHJl
c3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IobG9hZFJlc291cmNlMVdpdGhFcnJvckNhbGxiYWNr
OnN1Y2Nlc3NDYWxsYmFjazopXSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBv
cnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZv
dW5kLCAiJ05ldHdvcmsxLmxvYWRSZXNvdXJjZTEnIHdhcyBub3QgZm91bmQiX3MpOwotICAgICAg
ICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7
Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVz
dElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKLSAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICB9OwotCi0gICAgaWQg
c3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJl
c3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2UpOwotICAgIH07
Ci0KLSAgICBbbV9kZWxlZ2F0ZSBsb2FkUmVzb3VyY2UxV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JD
YWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKLX0KLQotCi12b2lkIE9i
akNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UxKGxvbmcg
cmVxdWVzdElkKQotewotICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBz
ZWxlY3Rvcihsb2FkUmVzb3VyY2UxV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOild
KSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVx
dWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMubG9h
ZFJlc291cmNlMScgd2FzIG5vdCBmb3VuZCJfcyk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVy
KCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBp
ZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRj
aGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5z
ZW5kUGVuZGluZ0Vycm9ycygpOwotICAgIH07Ci0KLSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBe
ewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBK
U09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7Ci0gICAgfTsKLQotICAgIFttX2RlbGVnYXRl
IGxvYWRSZXNvdXJjZTFXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxs
YmFjazpzdWNjZXNzQ2FsbGJhY2tdOwotfQotCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0Jh
Y2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UyKGxvbmcgcmVxdWVzdElkKQotewotICAgIGlm
ICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2Uy
V2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0
Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMubG9hZFJlc291cmNlMicgd2FzIG5vdCBm
b3VuZCJfcyk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3Jz
KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZCBlcnJvckNhbGxiYWNrID0gXihO
U1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJv
dG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJy
b3IpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwot
ICAgIH07Ci0KLSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
LCBmYWxzZSk7Ci0gICAgfTsKLQotICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZTJXaXRoRXJy
b3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2td
OwotfQotCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2Fk
UmVzb3VyY2UzKGxvbmcgcmVxdWVzdElkKQotewotICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9u
ZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2UzV2l0aEVycm9yQ2FsbGJhY2s6c3Vj
Y2Vzc0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFBy
b3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQs
ICInTmV0d29yazMubG9hZFJlc291cmNlMycgd2FzIG5vdCBmb3VuZCJfcyk7Ci0gICAgICAgIGJh
Y2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQs
IEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwotICAgICAgICBiYWNrZW5k
RGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgIH07Ci0KLSAgICBpZCBzdWNj
ZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9u
c2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7Ci0gICAgfTsKLQot
ICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZTNXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxi
YWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOwotfQotCi12b2lkIE9iakNJbnNw
ZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U0KGxvbmcgcmVxdWVz
dElkKQotewotICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rv
cihsb2FkUmVzb3VyY2U0V2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0g
ICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElk
LCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMubG9hZFJlc291
cmNlNCcgd2FzIG5vdCBmb3VuZCJfcyk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNl
bmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZCBlcnJv
ckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpT
ZXJ2ZXJFcnJvciwgZXJyb3IpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVu
ZGluZ0Vycm9ycygpOwotICAgIH07Ci0KLSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeewotICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7Ci0gICAgfTsKLQotICAgIFttX2RlbGVnYXRlIGxvYWRS
ZXNvdXJjZTRXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpz
dWNjZXNzQ2FsbGJhY2tdOwotfQotCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmRE
aXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U1KGxvbmcgcmVxdWVzdElkKQotewotICAgIGlmICghW21f
ZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2U1V2l0aEVy
cm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6
TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMubG9hZFJlc291cmNlNScgd2FzIG5vdCBmb3VuZCJf
cyk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmlu
ZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xF
cnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwot
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgIH07
Ci0KLSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxz
ZSk7Ci0gICAgfTsKLQotICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZTVXaXRoRXJyb3JDYWxs
YmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOwotfQot
Ci12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3Vy
Y2U2KGxvbmcgcmVxdWVzdElkKQotewotICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1Nl
bGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2U2V2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0Nh
bGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29s
RXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0
d29yazMubG9hZFJlc291cmNlNicgd2FzIG5vdCBmb3VuZCJfcyk7Ci0gICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAg
YmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tl
bmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwotICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgIH07Ci0KLSAgICBpZCBzdWNjZXNzQ2Fs
bGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVx
dWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7Ci0gICAgfTsKLQotICAgIFtt
X2RlbGVnYXRlIGxvYWRSZXNvdXJjZTZXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1
Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOwotfQotCi12b2lkIE9iakNJbnNwZWN0b3JO
ZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U3KGxvbmcgcmVxdWVzdElkKQot
ewotICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2Fk
UmVzb3VyY2U3V2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0gICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNr
ZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMubG9hZFJlc291cmNlNycg
d2FzIG5vdCBmb3VuZCJfcyk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5k
aW5nRXJyb3JzKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZCBlcnJvckNhbGxi
YWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJF
cnJvciwgZXJyb3IpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vy
cm9ycygpOwotICAgIH07Ci0KLSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpLCBmYWxzZSk7Ci0gICAgfTsKLQotICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJj
ZTdXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNz
Q2FsbGJhY2tdOwotfQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9U
ZXN0UHJvdG9jb2wuaD4KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkp
Ci1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAotQHByb3Bl
cnR5IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNldE5ldHdvcmsxSGFuZGxlcjopIGlkPFRl
c3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4gbmV0d29yazFIYW5kbGVyOwotQHByb3Bl
cnR5IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNldE5ldHdvcmszSGFuZGxlcjopIGlkPFRl
c3RQcm90b2NvbE5ldHdvcmszRG9tYWluSGFuZGxlcj4gbmV0d29yazNIYW5kbGVyOwotQGVuZAot
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24uaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwu
aCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KLSNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0j
aW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLQot
dXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24KLXsKLSAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9j
b250cm9sbGVyOwotICAgIGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4gX25l
dHdvcmsxSGFuZGxlcjsKLSAgICBpZDxUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkhhbmRsZXI+
IF9uZXR3b3JrM0hhbmRsZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xs
ZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgotewotICAgIHNl
bGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwot
ICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0g
ICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAgIFtfbmV0d29yazFI
YW5kbGVyIHJlbGVhc2VdOwotICAgIFtfbmV0d29yazNIYW5kbGVyIHJlbGVhc2VdOwotICAgIFtz
dXBlciBkZWFsbG9jXTsKLX0KLQotLSAodm9pZClzZXROZXR3b3JrMUhhbmRsZXI6KGlkPFRlc3RQ
cm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4paGFuZGxlcgotewotICAgIGlmIChoYW5kbGVy
ID09IF9uZXR3b3JrMUhhbmRsZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIFtfbmV0d29yazFI
YW5kbGVyIHJlbGVhc2VdOwotICAgIF9uZXR3b3JrMUhhbmRsZXIgPSBbaGFuZGxlciByZXRhaW5d
OwotCi0gICAgYXV0byBhbHRlcm5hdGVEaXNwYXRjaGVyID0gbWFrZVVuaXF1ZTxPYmpDSW5zcGVj
dG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7Ci0gICAgYXV0byBhbHRlcm5h
dGVBZ2VudCA9IG1ha2VVbmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8TmV0d29yazFC
YWNrZW5kRGlzcGF0Y2hlciwgQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4+KCJO
ZXR3b3JrMSJfcywgKl9jb250cm9sbGVyLCBXVEZNb3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIpKTsK
LSAgICBfY29udHJvbGxlci0+YXBwZW5kRXh0cmFBZ2VudChXVEZNb3ZlKGFsdGVybmF0ZUFnZW50
KSk7Ci19Ci0KLS0gKGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4pbmV0d29y
azFIYW5kbGVyCi17Ci0gICAgcmV0dXJuIF9uZXR3b3JrMUhhbmRsZXI7Ci19Ci0KLS0gKHZvaWQp
c2V0TmV0d29yazNIYW5kbGVyOihpZDxUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkhhbmRsZXI+
KWhhbmRsZXIKLXsKLSAgICBpZiAoaGFuZGxlciA9PSBfbmV0d29yazNIYW5kbGVyKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBbX25ldHdvcmszSGFuZGxlciByZWxlYXNlXTsKLSAgICBfbmV0d29y
azNIYW5kbGVyID0gW2hhbmRsZXIgcmV0YWluXTsKLQotICAgIGF1dG8gYWx0ZXJuYXRlRGlzcGF0
Y2hlciA9IG1ha2VVbmlxdWU8T2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI+
KGhhbmRsZXIpOwotICAgIGF1dG8gYWx0ZXJuYXRlQWdlbnQgPSBtYWtlVW5pcXVlPEFsdGVybmF0
ZURpc3BhdGNoYWJsZUFnZW50PE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIsIEFsdGVybmF0ZU5l
dHdvcmszQmFja2VuZERpc3BhdGNoZXI+PigiTmV0d29yazMiX3MsICpfY29udHJvbGxlciwgV1RG
TW92ZShhbHRlcm5hdGVEaXNwYXRjaGVyKSk7Ci0gICAgX2NvbnRyb2xsZXItPmFwcGVuZEV4dHJh
QWdlbnQoV1RGTW92ZShhbHRlcm5hdGVBZ2VudCkpOwotfQotCi0tIChpZDxUZXN0UHJvdG9jb2xO
ZXR3b3JrM0RvbWFpbkhhbmRsZXI+KW5ldHdvcmszSGFuZGxlcgotewotICAgIHJldHVybiBfbmV0
d29yazNIYW5kbGVyOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xD
b25maWd1cmF0aW9uLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3Bh
dGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRo
LXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBv
cnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8d3RmL0pTT05WYWx1
ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0jIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZh
cnlpbmctY29tbWFuZC1zaXplcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotCi0jaW1wb3J0
IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+Ci0KLQotCi0KLXR5cGVkZWYg
TlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbFBsYXRmb3JtKSB7Ci0gICAgVGVzdFByb3Rv
Y29sUGxhdGZvcm1BbGwsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljLAotICAgIFRl
c3RQcm90b2NvbFBsYXRmb3JtSU9TLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1MsCi19
OwotCi0KLQotCi0KLUBwcm90b2NvbCBUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXIg
PE5TT2JqZWN0PgotQG9wdGlvbmFsCi0tICh2b2lkKWxvYWRSZXNvdXJjZTFXaXRoRXJyb3JDYWxs
YmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxi
YWNrOih2b2lkKF4pKHZvaWQpKXN1Y2Nlc3NDYWxsYmFjazsKLUBlbmQKLQotQHByb3RvY29sIFRl
c3RQcm90b2NvbE5ldHdvcmszRG9tYWluSGFuZGxlciA8TlNPYmplY3Q+Ci1Ab3B0aW9uYWwKLS0g
KHZvaWQpbG9hZFJlc291cmNlMVdpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICpl
cnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikodm9pZCkpc3VjY2Vz
c0NhbGxiYWNrOwotLSAodm9pZClsb2FkUmVzb3VyY2UyV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQo
XikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZChe
KSh2b2lkKSlzdWNjZXNzQ2FsbGJhY2s7Ci0tICh2b2lkKWxvYWRSZXNvdXJjZTNXaXRoRXJyb3JD
YWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0Nh
bGxiYWNrOih2b2lkKF4pKHZvaWQpKXN1Y2Nlc3NDYWxsYmFjazsKLS0gKHZvaWQpbG9hZFJlc291
cmNlNFdpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxs
YmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikodm9pZCkpc3VjY2Vzc0NhbGxiYWNrOwotLSAo
dm9pZClsb2FkUmVzb3VyY2U1V2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVy
cm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKSh2b2lkKSlzdWNjZXNz
Q2FsbGJhY2s7Ci0tICh2b2lkKWxvYWRSZXNvdXJjZTZXaXRoRXJyb3JDYWxsYmFjazoodm9pZChe
KShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4p
KHZvaWQpKXN1Y2Nlc3NDYWxsYmFjazsKLS0gKHZvaWQpbG9hZFJlc291cmNlN1dpdGhFcnJvckNh
bGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2Fs
bGJhY2s6KHZvaWQoXikodm9pZCkpc3VjY2Vzc0NhbGxiYWNrOwotQGVuZAotCi0KLQotCi0jaW1w
b3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbEludGVybmFsLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21h
aW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0
ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENv
cmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZh
bHVlcy5oPgotCi0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLQot
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXpl
cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBv
cnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJy
YXlDb252ZXJzaW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdGVtcGxhdGU8dHlw
ZW5hbWUgT2JqQ0VudW1UeXBlPgotT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xT
dHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0
cmluZyhUZXN0UHJvdG9jb2xQbGF0Zm9ybSB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsK
LSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOgotICAgICAgICByZXR1cm4gImFsbCJf
czsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzoKLSAgICAgICAgcmV0dXJu
ICJnZW5lcmljIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1JT1M6Ci0gICAgICAg
IHJldHVybiAiaW9zIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzoKLSAg
ICAgICAgcmV0dXJuICJtYWNvcyJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBP
cHRpb25hbDxUZXN0UHJvdG9jb2xQbGF0Zm9ybT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0
cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJhbGwiKQotICAgICAgICByZXR1cm4g
VGVzdFByb3RvY29sUGxhdGZvcm1BbGw7Ci0gICAgaWYgKHZhbHVlID09ICJnZW5lcmljIikKLSAg
ICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzsKLSAgICBpZiAodmFsdWUg
PT0gImlvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzsKLSAgICBp
ZiAodmFsdWUgPT0gIm1hY29zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3Jt
TWFjT1M7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotCi0KLX0gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5o
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5k
LXNpemVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0KLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgotI2ltcG9ydCA8
V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLQotdXNpbmcgbmFt
ZXNwYWNlIEluc3BlY3RvcjsKLQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMgKE5ldHdvcmsyRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZUxvYWRlcklkOihOU1N0cmluZyAq
KilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLQotQGVuZAotCi1AaW1wbGVtZW50
YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChOZXR3b3JrMkRvbWFpbikKLQotKyAo
dm9pZClfcGFyc2VMb2FkZXJJZDooTlNTdHJpbmcgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlk
KXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtO
U1N0cmluZyBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IChOU1N0cmluZyAqKXBheWxvYWQ7Ci19
Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5t
bQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAi
VGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJp
dmF0ZS5oPgotI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFs
dWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotCi0KLSMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2VudW0tdmFsdWVzLmpz
b24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvZXhwZWN0ZWQvZW51bS12YWx1ZXMuanNvbi1yZXN1bHQKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGYwNmZlYmI3OGQ3Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9lbnVt
LXZhbHVlcy5qc29uLXJlc3VsdAorKysgL2Rldi9udWxsCkBAIC0xLDEyMzYgKzAsMCBAQAotIyMj
IEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotLy8gVHlwZURvbWFpbgotSW5zcGVjdG9yQmFja2VuZC5y
ZWdpc3RlckRvbWFpbigiVHlwZURvbWFpbiIsIG51bGwpOwotSW5zcGVjdG9yQmFja2VuZC5yZWdp
c3RlckVudW0oIlR5cGVEb21haW4uVHlwZURvbWFpbkVudW0iLCB7U2hhcmVkOiAic2hhcmVkIiwg
UmVkOiAicmVkIiwgR3JlZW46ICJncmVlbiIsIEJsdWU6ICJibHVlIn0pOwotSW5zcGVjdG9yQmFj
a2VuZC5hY3RpdmF0ZURvbWFpbigiVHlwZURvbWFpbiIsIG51bGwpOwotCi0vLyBDb21tYW5kRG9t
YWluCi1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJDb21tYW5kRG9tYWluIiwgbnVs
bCk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiQ29tbWFuZERvbWFpbi5jb21t
YW5kV2l0aEVudW1SZXR1cm5WYWx1ZSIsIG51bGwsIFtdLCBbInJldHVyblZhbHVlIl0pOwotSW5z
cGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiQ29tbWFuZERvbWFpbiIsIG51bGwpOwotCi0v
LyBFdmVudERvbWFpbgotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiRXZlbnREb21h
aW4iLCBudWxsKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJFdmVudERvbWFpbi5F
dmVudFdpdGhFbnVtUGFyYW1ldGVyUGFyYW1ldGVyIiwge1NoYXJlZDogInNoYXJlZCIsIEJsYWNr
OiAiYmxhY2siLCBXaGl0ZTogIndoaXRlIn0pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckV2
ZW50KCJFdmVudERvbWFpbi5ldmVudFdpdGhFbnVtUGFyYW1ldGVyIiwgbnVsbCwgWyJwYXJhbWV0
ZXIiXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnREb21haW5EaXNwYXRjaGVyID0g
SW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRpc3BhdGNoZXIuYmluZChJbnNwZWN0b3JCYWNrZW5k
LCAiRXZlbnREb21haW4iKTsKLUluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkV2ZW50
RG9tYWluIiwgbnVsbCk7Ci0jIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5q
cwotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2lm
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi0jaW5jbHVkZSAiVGVz
dFByb3RvY29sVHlwZXMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250
ZW5kUm91dGVyLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hl
cihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNw
YXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQotICAgIEJhY2tlbmREaXNwYXRjaGVyKiBi
YWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0
KCk7IH0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmRE
aXNwYXRjaGVyOwotfTsKLQotCi1jbGFzcyBBbHRlcm5hdGVDb21tYW5kRG9tYWluQmFja2VuZERp
c3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgot
ICAgIHZpcnR1YWwgfkFsdGVybmF0ZUNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcigpIHsg
fQotICAgIHZpcnR1YWwgdm9pZCBjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShsb25nIGNhbGxJ
ZCkgPSAwOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSNlbmRpZiAvLyBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSMjIyBFbmQgRmlsZTogVGVzdEFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2Vu
ZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZh
bHVlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNw
cmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10eXBlZGVm
IFN0cmluZyBFcnJvclN0cmluZzsKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQotY2xhc3MgQWx0ZXJuYXRlQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVy
OwotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi1j
bGFzcyBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKLXB1YmxpYzoKLSAg
ICAvLyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIgJ3JldHVyblZhbHVlJyB3aGlsZSBnZW5lcmF0aW5n
IGNvbW1hbmQvZXZlbnQgY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUuCi0gICAgZW51bSBjbGFz
cyBSZXR1cm5WYWx1ZSB7Ci0gICAgICAgIFNoYXJlZCA9IDAsCi0gICAgICAgIEN5YW4gPSA2LAot
ICAgICAgICBNYWdlbnRhID0gNywKLSAgICAgICAgWWVsbG93ID0gOCwKLSAgICB9OyAvLyBlbnVt
IGNsYXNzIFJldHVyblZhbHVlCi0gICAgdmlydHVhbCB2b2lkIGNvbW1hbmRXaXRoRW51bVJldHVy
blZhbHVlKEVycm9yU3RyaW5nJiwgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxl
cjo6UmV0dXJuVmFsdWUqIG91dF9yZXR1cm5WYWx1ZSkgPSAwOwotcHJvdGVjdGVkOgotICAgIHZp
cnR1YWwgfkNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKLX07Ci0KLWNs
YXNzIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVt
ZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxDb21tYW5k
RG9tYWluQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIENvbW1h
bmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICB2b2lkIGRpc3BhdGNoKGxv
bmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBt
ZXNzYWdlKSBmaW5hbDsKLXByaXZhdGU6Ci0gICAgdm9pZCBjb21tYW5kV2l0aEVudW1SZXR1cm5W
YWx1ZShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsK
LSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLXB1YmxpYzoKLSAg
ICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlQ29tbWFuZERvbWFpbkJhY2tl
bmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hl
ciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KLXByaXZhdGU6Ci0gICAgQWx0ZXJuYXRlQ29tbWFu
ZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKiBtX2FsdGVybmF0ZURpc3BhdGNoZXIgeyBudWxscHRy
IH07Ci0jZW5kaWYKLXByaXZhdGU6Ci0gICAgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVy
KEJhY2tlbmREaXNwYXRjaGVyJiwgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxl
ciopOwotICAgIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQg
eyBudWxscHRyIH07Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmls
ZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2Vu
ZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0t
dmFsdWVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIK
LQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0j
aW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERp
c3BhdGNoZXJzLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLUNvbW1hbmRE
b21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5Db21tYW5kRG9tYWluQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyKCkgeyB9Ci0KLVJlZjxDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI+
IENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEJhY2tlbmREaXNwYXRjaGVy
JiBiYWNrZW5kRGlzcGF0Y2hlciwgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxl
ciogYWdlbnQpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ29tbWFuZERvbWFpbkJhY2tl
bmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOwotfQotCi1Db21tYW5kRG9t
YWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcihCYWNr
ZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIENvbW1hbmREb21haW5CYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXIqIGFnZW50KQotICAgIDogU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNo
ZXIoYmFja2VuZERpc3BhdGNoZXIpCi0gICAgLCBtX2FnZW50KGFnZW50KQotewotICAgIG1fYmFj
a2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbigiQ29tbWFuZERvbWFp
biJfcywgdGhpcyk7Ci19Ci0KLXZvaWQgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpk
aXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpP
YmplY3Q+JiYgbWVzc2FnZSkKLXsKLSAgICBSZWY8Q29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRj
aGVyPiBwcm90ZWN0KCp0aGlzKTsKLQotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRl
cnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRlcnMpOwotCi0g
ICAgaWYgKG1ldGhvZCA9PSAiY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUiKQotICAgICAgICBj
b21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykp
OwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xF
cnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInQ29tbWFuZERvbWFpbi4i
ICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOwotfQotCi12b2lkIENvbW1hbmREb21haW5C
YWNrZW5kRGlzcGF0Y2hlcjo6Y29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUobG9uZyByZXF1ZXN0
SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCi17Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCi0gICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAg
ICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlKHJl
cXVlc3RJZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIEVycm9yU3Ry
aW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6
Y3JlYXRlKCk7Ci0gICAgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UmV0
dXJuVmFsdWUgb3V0X3JldHVyblZhbHVlOwotICAgIG1fYWdlbnQtPmNvbW1hbmRXaXRoRW51bVJl
dHVyblZhbHVlKGVycm9yLCAmb3V0X3JldHVyblZhbHVlKTsKLQotICAgIGlmICghZXJyb3IubGVu
Z3RoKCkpCi0gICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJyZXR1cm5WYWx1ZSJfcywgSW5zcGVj
dG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKG91dF9yZXR1
cm5WYWx1ZSkpOwotCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxz
ZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2Nv
bEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOwot
fQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2Vu
ZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hl
cnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNl
Ci0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05W
YWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIElu
c3BlY3RvciB7Ci0KLWNsYXNzIEZyb250ZW5kUm91dGVyOwotCi1jbGFzcyBFdmVudERvbWFpbkZy
b250ZW5kRGlzcGF0Y2hlciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6
Ci0gICAgRXZlbnREb21haW5Gcm9udGVuZERpc3BhdGNoZXIoRnJvbnRlbmRSb3V0ZXImIGZyb250
ZW5kUm91dGVyKSA6IG1fZnJvbnRlbmRSb3V0ZXIoZnJvbnRlbmRSb3V0ZXIpIHsgfQotICAgICAg
ICAvLyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIgJ3BhcmFtZXRlcicgd2hpbGUgZ2VuZXJhdGluZyBj
b21tYW5kL2V2ZW50IGV2ZW50V2l0aEVudW1QYXJhbWV0ZXIuCi0gICAgICAgIGVudW0gY2xhc3Mg
UGFyYW1ldGVyIHsKLSAgICAgICAgICAgIFNoYXJlZCA9IDAsCi0gICAgICAgICAgICBCbGFjayA9
IDQsCi0gICAgICAgICAgICBXaGl0ZSA9IDUsCi0gICAgICAgIH07IC8vIGVudW0gY2xhc3MgUGFy
YW1ldGVyCi0gICAgdm9pZCBldmVudFdpdGhFbnVtUGFyYW1ldGVyKFBhcmFtZXRlciBwYXJhbWV0
ZXIpOwotcHJpdmF0ZToKLSAgICBGcm9udGVuZFJvdXRlciYgbV9mcm9udGVuZFJvdXRlcjsKLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmRE
aXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5j
cHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi12b2lkIEV2ZW50RG9t
YWluRnJvbnRlbmREaXNwYXRjaGVyOjpldmVudFdpdGhFbnVtUGFyYW1ldGVyKFBhcmFtZXRlciBw
YXJhbWV0ZXIpCi17Ci0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywg
IkV2ZW50RG9tYWluLmV2ZW50V2l0aEVudW1QYXJhbWV0ZXIiX3MpOwotICAgIFJlZjxKU09OOjpP
YmplY3Q+IHBhcmFtc09iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgcGFyYW1z
T2JqZWN0LT5zZXRTdHJpbmcoInBhcmFtZXRlciJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVz
dEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKHBhcmFtZXRlcikpOwotICAgIGpzb25NZXNz
YWdlLT5zZXRPYmplY3QoInBhcmFtcyJfcywgV1RGTW92ZShwYXJhbXNPYmplY3QpKTsKLQotICAg
IG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9u
dGVuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0
cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UK
LQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNp
bmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0K
LW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLQotCi0vLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KLW5h
bWVzcGFjZSBUeXBlRG9tYWluIHsKLWVudW0gY2xhc3MgVHlwZURvbWFpbkVudW07Ci19IC8vIFR5
cGVEb21haW4KLS8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KLQotCi0KLQotbmFtZXNw
YWNlIFRlc3RIZWxwZXJzIHsKLQotU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2Rl
KTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKFQg
ZW51bVZhbHVlKQotewotICAgIHJldHVybiBnZXRFbnVtQ29uc3RhbnRWYWx1ZShzdGF0aWNfY2Fz
dDxpbnQ+KGVudW1WYWx1ZSkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwotCi1u
YW1lc3BhY2UgVHlwZURvbWFpbiB7Ci0vKiAgKi8KLWVudW0gY2xhc3MgVHlwZURvbWFpbkVudW0g
ewotICAgIFNoYXJlZCA9IDAsCi0gICAgUmVkID0gMSwKLSAgICBHcmVlbiA9IDIsCi0gICAgQmx1
ZSA9IDMsCi19OyAvLyBlbnVtIGNsYXNzIFR5cGVEb21haW5FbnVtCi19IC8vIFR5cGVEb21haW4K
LQotCi0KLW5hbWVzcGFjZSBUZXN0SGVscGVycyB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFByb3Rv
Y29sRW51bVR5cGU+Ci1PcHRpb25hbDxQcm90b2NvbEVudW1UeXBlPiBwYXJzZUVudW1WYWx1ZUZy
b21TdHJpbmcoY29uc3QgU3RyaW5nJik7Ci0KLS8vIEVudW1zIGluIHRoZSAnVHlwZURvbWFpbicg
RG9tYWluCi10ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9t
YWluOjpUeXBlRG9tYWluRW51bT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlR5cGVEb21haW46OlR5cGVEb21haW5FbnVtPihjb25zdCBTdHJpbmcmKTsKLQot
fSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQot
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLW5hbWVzcGFjZSBXVEYgewotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Ci0KLS8vIEhhc2ggZGVjbGFyYXRpb25zIGlu
IHRoZSAnVHlwZURvbWFpbicgRG9tYWluCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgRGVmYXVsdEhhc2g8
SW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW0+IHsKLSAgICB0
eXBlZGVmIEludEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFp
bkVudW0+IEhhc2g7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXVEYKLSMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sT2JqZWN0cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3Rz
LmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLQotI2luY2x1ZGUgPHd0
Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNl
IEluc3BlY3RvciB7Ci0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLW5hbWVzcGFjZSBUZXN0SGVs
cGVycyB7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBlbnVtX2NvbnN0YW50X3ZhbHVlc1td
ID0gewotICAgICJzaGFyZWQiLAotICAgICJyZWQiLAotICAgICJncmVlbiIsCi0gICAgImJsdWUi
LAotICAgICJibGFjayIsCi0gICAgIndoaXRlIiwKLSAgICAiY3lhbiIsCi0gICAgIm1hZ2VudGEi
LAotICAgICJ5ZWxsb3ciLAotfTsKLQotU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBj
b2RlKSB7Ci0gICAgcmV0dXJuIGVudW1fY29uc3RhbnRfdmFsdWVzW2NvZGVdOwotfQotCi0vLyBF
bnVtcyBpbiB0aGUgJ1R5cGVEb21haW4nIERvbWFpbgotdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5z
cGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW0+IHBhcnNlRW51bVZh
bHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWlu
RW51bT4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKLXsKLSAgICBzdGF0aWMgY29uc3Qg
c2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7Ci0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQ
cm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW06OlNoYXJlZCwKLSAgICAgICAgKHNp
emVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51bTo6UmVk
LAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46OlR5cGVE
b21haW5FbnVtOjpHcmVlbiwKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpU
eXBlRG9tYWluOjpUeXBlRG9tYWluRW51bTo6Qmx1ZSwKLSAgICB9OwotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgNDsgKytpKQotICAgICAgICBpZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9j
b25zdGFudF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNbaV1dKQotICAgICAgICAgICAgcmV0dXJuIChJ
bnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51bSljb25zdGFudFZh
bHVlc1tpXTsKLQotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLQotfSAvLyBuYW1lc3Bh
Y2UgVGVzdEhlbHBlcnMKLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3Bw
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2luY2x1ZGUgPHd0
Zi9SZXRhaW5QdHIuaD4KLQotQHByb3RvY29sIFRlc3RQcm90b2NvbENvbW1hbmREb21haW5Eb21h
aW5IYW5kbGVyOwotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi1jbGFzcyBPYmpDSW5zcGVj
dG9yQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0
ZUNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7Ci1wdWJsaWM6Ci0gICAgT2JqQ0luc3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5kRGlz
cGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluRG9tYWluSGFuZGxlcj4gaGFuZGxl
cikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQotICAgIHZvaWQgY29tbWFuZFdpdGhFbnVtUmV0
dXJuVmFsdWUobG9uZyByZXF1ZXN0SWQpIGZpbmFsOwotcHJpdmF0ZToKLSAgICBSZXRhaW5QdHI8
aWQ8VGVzdFByb3RvY29sQ29tbWFuZERvbWFpbkRvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwot
fTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJh
Y2tlbmREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVu
dW0tdmFsdWVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0
Y2hlcnMuaCIKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW5jbHVkZSAi
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMu
aD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXZvaWQgT2JqQ0luc3BlY3RvckNvbW1hbmRE
b21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Y29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUobG9uZyBy
ZXF1ZXN0SWQpCi17Ci0gICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNl
bGVjdG9yKGNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vz
c0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3Rv
Y29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICIn
Q29tbWFuZERvbWFpbi5jb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZScgd2FzIG5vdCBmb3VuZCJf
cyk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmlu
ZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xF
cnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwot
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgIH07
Ci0KLSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKFRlc3RQcm90b2NvbENvbW1hbmREb21haW5D
b21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZVJldHVyblZhbHVlIHJldHVyblZhbHVlKSB7Ci0gICAg
ICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdE9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRl
KCk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJyZXR1cm5WYWx1ZSJfcywgdG9Q
cm90b2NvbFN0cmluZyhyZXR1cm5WYWx1ZSkpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigp
LT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdE9iamVjdCksIGZhbHNlKTsK
LSAgICB9OwotCi0gICAgW21fZGVsZWdhdGUgY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWVXaXRo
RXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJh
Y2tdOwotfQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbi5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
ZW51bS12YWx1ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+Ci0KLV9fYXR0cmlidXRl
X18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25m
aWd1cmF0aW9uIDogTlNPYmplY3QKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4sIHNldHRl
cj1zZXRDb21tYW5kRG9tYWluSGFuZGxlcjopIGlkPFRlc3RQcm90b2NvbENvbW1hbmREb21haW5E
b21haW5IYW5kbGVyPiBjb21tYW5kRG9tYWluSGFuZGxlcjsKLUBwcm9wZXJ0eSAobm9uYXRvbWlj
LCByZWFkb25seSkgVGVzdFByb3RvY29sRXZlbnREb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIg
KmV2ZW50RG9tYWluRXZlbnREaXNwYXRjaGVyOwotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xD
b25maWd1cmF0aW9uLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12
YWx1ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0j
aW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90
b2NvbEludGVybmFsLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMu
aCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+
Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIu
aD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNw
YXRjaGVycy5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXJzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlv
biBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCi17Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JD
b250cm9sbGVyKiBfY29udHJvbGxlcjsKLSAgICBpZDxUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWlu
RG9tYWluSGFuZGxlcj4gX2NvbW1hbmREb21haW5IYW5kbGVyOwotICAgIFRlc3RQcm90b2NvbEV2
ZW50RG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyICpfZXZlbnREb21haW5FdmVudERpc3BhdGNo
ZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxl
SW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5p
dF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250
cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7
Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAgIFtfY29tbWFuZERvbWFpbkhhbmRsZXIgcmVs
ZWFzZV07Ci0gICAgW19ldmVudERvbWFpbkV2ZW50RGlzcGF0Y2hlciByZWxlYXNlXTsKLSAgICBb
c3VwZXIgZGVhbGxvY107Ci19Ci0KLS0gKHZvaWQpc2V0Q29tbWFuZERvbWFpbkhhbmRsZXI6KGlk
PFRlc3RQcm90b2NvbENvbW1hbmREb21haW5Eb21haW5IYW5kbGVyPiloYW5kbGVyCi17Ci0gICAg
aWYgKGhhbmRsZXIgPT0gX2NvbW1hbmREb21haW5IYW5kbGVyKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBbX2NvbW1hbmREb21haW5IYW5kbGVyIHJlbGVhc2VdOwotICAgIF9jb21tYW5kRG9tYWlu
SGFuZGxlciA9IFtoYW5kbGVyIHJldGFpbl07Ci0KLSAgICBhdXRvIGFsdGVybmF0ZURpc3BhdGNo
ZXIgPSBtYWtlVW5pcXVlPE9iakNJbnNwZWN0b3JDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNo
ZXI+KGhhbmRsZXIpOwotICAgIGF1dG8gYWx0ZXJuYXRlQWdlbnQgPSBtYWtlVW5pcXVlPEFsdGVy
bmF0ZURpc3BhdGNoYWJsZUFnZW50PENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlciwgQWx0
ZXJuYXRlQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPj4oIkNvbW1hbmREb21haW4iX3Ms
ICpfY29udHJvbGxlciwgV1RGTW92ZShhbHRlcm5hdGVEaXNwYXRjaGVyKSk7Ci0gICAgX2NvbnRy
b2xsZXItPmFwcGVuZEV4dHJhQWdlbnQoV1RGTW92ZShhbHRlcm5hdGVBZ2VudCkpOwotfQotCi0t
IChpZDxUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluRG9tYWluSGFuZGxlcj4pY29tbWFuZERvbWFp
bkhhbmRsZXIKLXsKLSAgICByZXR1cm4gX2NvbW1hbmREb21haW5IYW5kbGVyOwotfQotCi0tIChU
ZXN0UHJvdG9jb2xFdmVudERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqKWV2ZW50RG9tYWlu
RXZlbnREaXNwYXRjaGVyCi17Ci0gICAgaWYgKCFfZXZlbnREb21haW5FdmVudERpc3BhdGNoZXIp
Ci0gICAgICAgIF9ldmVudERvbWFpbkV2ZW50RGlzcGF0Y2hlciA9IFtbVGVzdFByb3RvY29sRXZl
bnREb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgYWxsb2NdIGluaXRXaXRoQ29udHJvbGxlcjpf
Y29udHJvbGxlcl07Ci0gICAgcmV0dXJuIF9ldmVudERvbWFpbkV2ZW50RGlzcGF0Y2hlcjsKLX0K
LQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQot
Ci0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50
ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1w
b3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1A
aW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sRXZlbnREb21haW5Eb21haW5FdmVudERpc3BhdGNo
ZXIKLXsKLSAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwot
fQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3Bl
Y3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwot
ICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxl
cik7Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQot
Ci0tICh2b2lkKWV2ZW50V2l0aEVudW1QYXJhbWV0ZXJXaXRoUGFyYW1ldGVyOihUZXN0UHJvdG9j
b2xFdmVudERvbWFpbkV2ZW50V2l0aEVudW1QYXJhbWV0ZXJQYXJhbWV0ZXIpcGFyYW1ldGVyCi17
Ci0gICAgY29uc3QgRnJvbnRlbmRSb3V0ZXImIHJvdXRlciA9IF9jb250cm9sbGVyLT5mcm9udGVu
ZFJvdXRlcigpOwotCi0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywg
IkV2ZW50RG9tYWluLmV2ZW50V2l0aEVudW1QYXJhbWV0ZXIiX3MpOwotICAgIFJlZjxKU09OOjpP
YmplY3Q+IHBhcmFtc09iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgcGFyYW1z
T2JqZWN0LT5zZXRTdHJpbmcoInBhcmFtZXRlciJfcywgdG9Qcm90b2NvbFN0cmluZyhwYXJhbWV0
ZXIpKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiX3MsIFdURk1vdmUocGFy
YW1zT2JqZWN0KSk7Ci0gICAgcm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3Ry
aW5nKCkpOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERp
c3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0
aW9uLmg+Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4K
LQotCi0KLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sUGxhdGZvcm0p
IHsKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbCwKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9y
bUdlbmVyaWMsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1JT1MsCi0gICAgVGVzdFByb3RvY29s
UGxhdGZvcm1NYWNPUywKLX07Ci0KLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFBy
b3RvY29sVHlwZURvbWFpbkVudW0pIHsKLSAgICBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bVNo
YXJlZCwKLSAgICBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bVJlZCwKLSAgICBUZXN0UHJvdG9j
b2xUeXBlRG9tYWluRW51bUdyZWVuLAotICAgIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtQmx1
ZSwKLX07Ci0KLQotCi1AcHJvdG9jb2wgVGVzdFByb3RvY29sQ29tbWFuZERvbWFpbkRvbWFpbkhh
bmRsZXIgPE5TT2JqZWN0PgotQG9wdGlvbmFsCi0tICh2b2lkKWNvbW1hbmRXaXRoRW51bVJldHVy
blZhbHVlV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNh
bGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKShUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWlu
Q29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWVSZXR1cm5WYWx1ZSByZXR1cm5WYWx1ZSkpc3VjY2Vz
c0NhbGxiYWNrOwotQGVuZAotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIp
KSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sRXZlbnREb21haW5Eb21haW5FdmVudERpc3BhdGNo
ZXIgOiBOU09iamVjdAotLSAodm9pZClldmVudFdpdGhFbnVtUGFyYW1ldGVyV2l0aFBhcmFtZXRl
cjooVGVzdFByb3RvY29sRXZlbnREb21haW5FdmVudFdpdGhFbnVtUGFyYW1ldGVyUGFyYW1ldGVy
KXBhcmFtZXRlcjsKLUBlbmQKLQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xC
dWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
LmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2lt
cG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKLSNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8d3RmL0pT
T05WYWx1ZXMuaD4KLQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xFdmVudERvbWFpbkRvbWFpbkV2
ZW50RGlzcGF0Y2hlciAoUHJpdmF0ZSkKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xs
ZXI6KEluc3BlY3Rvcjo6QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVy
OwotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9y
dCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgotCi1uYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgotT3B0aW9u
YWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7
Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xQbGF0Zm9ybSB2
YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRm
b3JtQWxsOgotICAgICAgICByZXR1cm4gImFsbCJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBs
YXRmb3JtR2VuZXJpYzoKLSAgICAgICAgcmV0dXJuICJnZW5lcmljIl9zOwotICAgIGNhc2UgVGVz
dFByb3RvY29sUGxhdGZvcm1JT1M6Ci0gICAgICAgIHJldHVybiAiaW9zIl9zOwotICAgIGNhc2Ug
VGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzoKLSAgICAgICAgcmV0dXJuICJtYWNvcyJfczsKLSAg
ICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xQbGF0Zm9y
bT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZh
bHVlID09ICJhbGwiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1BbGw7Ci0g
ICAgaWYgKHZhbHVlID09ICJnZW5lcmljIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBs
YXRmb3JtR2VuZXJpYzsKLSAgICBpZiAodmFsdWUgPT0gImlvcyIpCi0gICAgICAgIHJldHVybiBU
ZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzsKLSAgICBpZiAodmFsdWUgPT0gIm1hY29zIikKLSAgICAg
ICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M7Ci0gICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKLX0KLQotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29s
VHlwZURvbWFpbkVudW0gdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBU
ZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bVNoYXJlZDoKLSAgICAgICAgcmV0dXJuICJzaGFyZWQi
X3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bVJlZDoKLSAgICAgICAgcmV0
dXJuICJyZWQiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bUdyZWVuOgot
ICAgICAgICByZXR1cm4gImdyZWVuIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sVHlwZURvbWFp
bkVudW1CbHVlOgotICAgICAgICByZXR1cm4gImJsdWUiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0
ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0+IGZyb21Qcm90
b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAic2hh
cmVkIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtU2hhcmVkOwot
ICAgIGlmICh2YWx1ZSA9PSAicmVkIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFR5cGVE
b21haW5FbnVtUmVkOwotICAgIGlmICh2YWx1ZSA9PSAiZ3JlZW4iKQotICAgICAgICByZXR1cm4g
VGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1HcmVlbjsKLSAgICBpZiAodmFsdWUgPT0gImJsdWUi
KQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1CbHVlOwotICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgot
Ci0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJz
ZXIuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRl
Lmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbnRlcmZhY2UgVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zIChUeXBlRG9tYWluRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZVR5
cGVEb21haW5FbnVtOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9h
ZDsKLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
IChUeXBlRG9tYWluRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZVR5cGVEb21haW5FbnVtOihOU051
bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TU3RyaW5nIGNsYXNzXSk7Ci0gICAgT3B0
aW9uYWw8VGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0+IHJlc3VsdCA9IEluc3BlY3Rvcjo6ZnJv
bVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtPihwYXlsb2FkKTsKLSAg
ICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9FTlVNX1ZBTFVFKHJlc3VsdCwgQCJUeXBlRG9tYWlu
RW51bSIpOwotICAgICpvdXRWYWx1ZSA9IEAocmVzdWx0LnZhbHVlKCkpOwotfQotCi1AZW5kCi0K
LQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZW51bS12YWx1ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0
ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9S
V0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5o
PgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3Rv
cjsKLQotCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMv
ZXhwZWN0ZWQvZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUu
anNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZ2VuZXJpYy9leHBlY3RlZC9ldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1
Z2dhYmxlVHlwZS5qc29uLXJlc3VsdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDg5
YTk3ZmY1NWQuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2V2ZW50LXRhcmdldFR5cGUtbWF0Y2hp
bmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tcmVzdWx0CisrKyAvZGV2L251bGwKQEAgLTEs
MTA2MyArMCwwIEBACi0jIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpz
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRj
aGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0vLyBEb21haW4KLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJE
b21haW4oIkRvbWFpbiIsIG51bGwpOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQo
IkRvbWFpbi5Db21tYW5kIiwgbnVsbCwgW10sIFtdKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0
ZXJFdmVudCgiRG9tYWluLkV2ZW50IiwgWyJwYWdlIiwgIndvcmtlciJdLCBbXSk7Ci1JbnNwZWN0
b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluRGlzcGF0Y2hlciA9IEluc3BlY3RvckJhY2tlbmQucmVn
aXN0ZXJEaXNwYXRjaGVyLmJpbmQoSW5zcGVjdG9yQmFja2VuZCwgIkRvbWFpbiIpOwotSW5zcGVj
dG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiRG9tYWluIiwgWyJwYWdlIl0pOwotIyMjIEVuZCBG
aWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBv
bmNlCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQotI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JGcm9udGVuZFJvdXRlci5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3Mg
QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZvaWQgc2V0QmFja2Vu
ZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9i
YWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KLSAgICBCYWNrZW5kRGlz
cGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNw
YXRjaGVyLmdldCgpOyB9Ci1wcml2YXRlOgotICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4g
bV9iYWNrZW5kRGlzcGF0Y2hlcjsKLX07Ci0KLQotY2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFja2Vu
ZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGlj
OgotICAgIHZpcnR1YWwgfkFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKCkgeyB9Ci0g
ICAgdmlydHVhbCB2b2lkIENvbW1hbmQobG9uZyBjYWxsSWQpID0gMDsKLX07Ci0KLX0gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgotCi0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCi0jIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hl
cnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21h
aW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMu
aCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9y
IHsKLQotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLWNsYXNzIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNw
YXRjaGVyOwotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQotCi1jbGFzcyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewotcHVibGljOgotICAg
IHZpcnR1YWwgdm9pZCBDb21tYW5kKEVycm9yU3RyaW5nJikgPSAwOwotcHJvdGVjdGVkOgotICAg
IHZpcnR1YWwgfkRvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOwotfTsKLQotY2xhc3Mg
RG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2Vu
ZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8RG9tYWluQmFja2VuZERpc3Bh
dGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlciopOwotICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmlu
ZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOwotcHJpdmF0ZToK
LSAgICB2b2lkIENvbW1hbmQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYg
cGFyYW1ldGVycyk7Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
Ci1wdWJsaWM6Ci0gICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZURvbWFp
bkJhY2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlz
cGF0Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KLXByaXZhdGU6Ci0gICAgQWx0ZXJuYXRl
RG9tYWluQmFja2VuZERpc3BhdGNoZXIqIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciB7IG51bGxwdHIg
fTsKLSNlbmRpZgotcHJpdmF0ZToKLSAgICBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5k
RGlzcGF0Y2hlciYsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIERvbWFp
bkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2VudCB7IG51bGxwdHIgfTsKLX07Ci0KLX0g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNo
ZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1k
b21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEJhY2tlbmRE
aXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRl
bmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi9O
ZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2lmIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotI2luY2x1ZGUgIlRlc3RBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgSW5zcGVjdG9y
IHsKLQotRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+RG9tYWluQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyKCkgeyB9Ci0KLVJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gRG9tYWlu
QmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3Bh
dGNoZXIsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCi17Ci0gICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgRG9tYWluQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNo
ZXIsIGFnZW50KSk7Ci19Ci0KLURvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpEb21haW5CYWNrZW5k
RGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIERvbWFpbkJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCi0gICAgOiBTdXBwbGVtZW50YWxCYWNrZW5k
RGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKLSAgICAsIG1fYWdlbnQoYWdlbnQpCi17Ci0g
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKCJEb21h
aW4iX3MsIHRoaXMpOwotfQotCi12b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRj
aChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+
JiYgbWVzc2FnZSkKLXsKLSAgICBSZWY8RG9tYWluQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3Qo
KnRoaXMpOwotCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVyczsKLSAgICBtZXNz
YWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFyYW1ldGVycyk7Ci0KLSAgICBpZiAobWV0aG9k
ID09ICJDb21tYW5kIikKLSAgICAgICAgQ29tbWFuZChyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1l
dGVycykpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJv
dG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRG9tYWluLiIg
KyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7Ci19Ci0KLXZvaWQgRG9tYWluQmFja2VuZERp
c3BhdGNoZXI6OkNvbW1hbmQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYp
Ci17Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0gICAgaWYg
KG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXIt
PkNvbW1hbmQocmVxdWVzdElkKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0g
ICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtX2FnZW50LT5Db21tYW5kKGVycm9yKTsKLQotICAg
IGlmICghZXJyb3IubGVuZ3RoKCkpCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRS
ZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAg
ICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlz
cGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAK
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1k
ZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgot
I2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBGcm9udGVuZFJvdXRlcjsKLQot
Y2xhc3MgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKLXB1YmxpYzoKLSAgICBEb21haW5Gcm9udGVuZERpc3BhdGNoZXIoRnJvbnRlbmRSb3V0
ZXImIGZyb250ZW5kUm91dGVyKSA6IG1fZnJvbnRlbmRSb3V0ZXIoZnJvbnRlbmRSb3V0ZXIpIHsg
fQotICAgIHZvaWQgRXZlbnQoKTsKLXByaXZhdGU6Ci0gICAgRnJvbnRlbmRSb3V0ZXImIG1fZnJv
bnRlbmRSb3V0ZXI7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmls
ZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250
ZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZl
bnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdm9pZCBEb21haW5Gcm9udGVu
ZERpc3BhdGNoZXI6OkV2ZW50KCkKLXsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2Fn
ZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygi
bWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9zKTsKLQotICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2Vu
ZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAot
Ci0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdn
YWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3Rv
Y29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotCi1uYW1lc3BhY2UgSW5z
cGVjdG9yIHsKLQotCi0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLQotCi0KLQotCi0KLQotCi19
IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xPYmplY3RzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50
LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLQotI2luY2x1ZGUgPHd0Zi9PcHRpb25h
bC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3Rv
ciB7Ci0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2Nv
bAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xPYmplY3RzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3Bh
dGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudC10YXJnZXRU
eXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWlu
UHRyLmg+Ci0KLUBwcm90b2NvbCBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyOwotCi1u
YW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi1jbGFzcyBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2Vu
ZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNo
ZXIgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIE9iakNJbnNw
ZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5I
YW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9Ci0gICAgdm9pZCBDb21t
YW5kKGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKLXByaXZhdGU6Ci0gICAgUmV0YWluUHRyPGlkPFRl
c3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwotfTsKLQotfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERp
c3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRj
aGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRhcmdldFR5
cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJU
ZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bEludGVybmFsLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0j
aW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXZv
aWQgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVx
dWVzdElkKQotewotICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxl
Y3RvcihDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0gICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBC
YWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRG9tYWluLkNvbW1hbmQnIHdhcyBu
b3QgZm91bmQiX3MpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vy
cm9ycygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWQgZXJyb3JDYWxsYmFjayA9
IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9y
dFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3Is
IGVycm9yKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMo
KTsKLSAgICB9OwotCi0gICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKSwgZmFsc2UpOwotICAgIH07Ci0KLSAgICBbbV9kZWxlZ2F0ZSBDb21tYW5kV2l0aEVycm9y
Q2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsK
LX0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24uaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50
LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9y
L1Rlc3RQcm90b2NvbC5oPgotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIp
KSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0Ci1AcHJv
cGVydHkgKG5vbmF0b21pYywgcmV0YWluLCBzZXR0ZXI9c2V0RG9tYWluSGFuZGxlcjopIGlkPFRl
c3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IGRvbWFpbkhhbmRsZXI7Ci1AcHJvcGVydHkg
KG5vbmF0b21pYywgcmVhZG9ubHkpIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0
Y2hlciAqZG9tYWluRXZlbnREaXNwYXRjaGVyOwotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xD
b25maWd1cmF0aW9uLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnQt
dGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xD
b25maWd1cmF0aW9uLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW1w
b3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0
Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0KLXVzaW5nIG5h
bWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1
cmF0aW9uCi17Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxl
cjsKLSAgICBpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiBfZG9tYWluSGFuZGxl
cjsKLSAgICBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKl9kb21haW5F
dmVudERpc3BhdGNoZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6
KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYg
PSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAg
IEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAg
cmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAgIFtfZG9tYWluSGFuZGxl
ciByZWxlYXNlXTsKLSAgICBbX2RvbWFpbkV2ZW50RGlzcGF0Y2hlciByZWxlYXNlXTsKLSAgICBb
c3VwZXIgZGVhbGxvY107Ci19Ci0KLS0gKHZvaWQpc2V0RG9tYWluSGFuZGxlcjooaWQ8VGVzdFBy
b3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4paGFuZGxlcgotewotICAgIGlmIChoYW5kbGVyID09
IF9kb21haW5IYW5kbGVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBbX2RvbWFpbkhhbmRsZXIg
cmVsZWFzZV07Ci0gICAgX2RvbWFpbkhhbmRsZXIgPSBbaGFuZGxlciByZXRhaW5dOwotCi0gICAg
YXV0byBhbHRlcm5hdGVEaXNwYXRjaGVyID0gbWFrZVVuaXF1ZTxPYmpDSW5zcGVjdG9yRG9tYWlu
QmFja2VuZERpc3BhdGNoZXI+KGhhbmRsZXIpOwotICAgIGF1dG8gYWx0ZXJuYXRlQWdlbnQgPSBt
YWtlVW5pcXVlPEFsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50PERvbWFpbkJhY2tlbmREaXNwYXRj
aGVyLCBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4+KCJEb21haW4iX3MsICpfY29u
dHJvbGxlciwgV1RGTW92ZShhbHRlcm5hdGVEaXNwYXRjaGVyKSk7Ci0gICAgX2NvbnRyb2xsZXIt
PmFwcGVuZEV4dHJhQWdlbnQoV1RGTW92ZShhbHRlcm5hdGVBZ2VudCkpOwotfQotCi0tIChpZDxU
ZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPilkb21haW5IYW5kbGVyCi17Ci0gICAgcmV0
dXJuIF9kb21haW5IYW5kbGVyOwotfQotCi0tIChUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVu
dERpc3BhdGNoZXIgKilkb21haW5FdmVudERpc3BhdGNoZXIKLXsKLSAgICBpZiAoIV9kb21haW5F
dmVudERpc3BhdGNoZXIpCi0gICAgICAgIF9kb21haW5FdmVudERpc3BhdGNoZXIgPSBbW1Rlc3RQ
cm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciBhbGxvY10gaW5pdFdpdGhDb250cm9s
bGVyOl9jb250cm9sbGVyXTsKLSAgICByZXR1cm4gX2RvbWFpbkV2ZW50RGlzcGF0Y2hlcjsKLX0K
LQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQot
Ci0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9t
YWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAi
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5o
PgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW1wbGVtZW50YXRpb24gVGVzdFBy
b3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyCi17Ci0gICAgQXVnbWVudGFibGVJbnNw
ZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVy
Ci17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJl
dHVybiBuaWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIpOwotICAgIF9jb250cm9sbGVyID0gY29u
dHJvbGxlcjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClFdmVudAotewotICAgIGNv
bnN0IEZyb250ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29udHJvbGxlci0+ZnJvbnRlbmRSb3V0ZXIo
KTsKLQotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4u
RXZlbnQiX3MpOwotICAgIHJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmlu
ZygpKTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNw
YXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1k
ZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotCi0jaW1wb3J0IDxXZWJJ
bnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+Ci0KLQotCi0KLXR5cGVkZWYgTlNfRU5V
TShOU0ludGVnZXIsIFRlc3RQcm90b2NvbFBsYXRmb3JtKSB7Ci0gICAgVGVzdFByb3RvY29sUGxh
dGZvcm1BbGwsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljLAotICAgIFRlc3RQcm90
b2NvbFBsYXRmb3JtSU9TLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1MsCi19OwotCi0K
LQotCi0KLUBwcm90b2NvbCBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyIDxOU09iamVj
dD4KLUBvcHRpb25hbAotLSAodm9pZClDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXiko
TlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKSh2
b2lkKSlzdWNjZXNzQ2FsbGJhY2s7Ci1AZW5kCi0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkg
KCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERp
c3BhdGNoZXIgOiBOU09iamVjdAotLSAodm9pZClFdmVudDsKLUBlbmQKLQotCi0jaW1wb3J0IDxX
ZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+Ci0KLSMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bEludGVybmFsLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudC10YXJn
ZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgot
I2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKLSNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8d3Rm
L0pTT05WYWx1ZXMuaD4KLQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVu
dERpc3BhdGNoZXIgKFByaXZhdGUpCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVy
OihJbnNwZWN0b3I6OkF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcjsK
LUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdn
YWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90
b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KLU9wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVBy
b3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOwotCi1pbmxpbmUgU3RyaW5nIHRvUHJv
dG9jb2xTdHJpbmcoVGVzdFByb3RvY29sUGxhdGZvcm0gdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZh
bHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDoKLSAgICAgICAgcmV0dXJu
ICJhbGwiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM6Ci0gICAgICAg
IHJldHVybiAiZ2VuZXJpYyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOgot
ICAgICAgICByZXR1cm4gImlvcyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFj
T1M6Ci0gICAgICAgIHJldHVybiAibWFjb3MiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1p
bmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sUGxhdGZvcm0+IGZyb21Qcm90b2NvbFN0cmluZyhj
b25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiYWxsIikKLSAgICAgICAg
cmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOwotICAgIGlmICh2YWx1ZSA9PSAiZ2VuZXJp
YyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM7Ci0gICAgaWYg
KHZhbHVlID09ICJpb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1JT1M7
Ci0gICAgaWYgKHZhbHVlID09ICJtYWNvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQ
bGF0Zm9ybU1hY09TOwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudC10YXJnZXRUeXBlLW1hdGNoaW5n
LWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgot
Ci0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJz
ZXIuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRl
Lmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotCi0KLQotCi0jIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sVHlwZXMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVu
dC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2Nv
bEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgot
I2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLSNp
bXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11
c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
VHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRl
cnMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9ldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpz
b24tcmVzdWx0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YTk1YmE1NThjZi4uMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2dlbmVyaWMvZXhwZWN0ZWQvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29u
LXJlc3VsdAorKysgL2Rldi9udWxsCkBAIC0xLDEyMTcgKzAsMCBAQAotIyMjIEJlZ2luIEZpbGU6
IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0vLyBEYXRhYmFzZQotSW5zcGVjdG9yQmFj
a2VuZC5yZWdpc3RlckRvbWFpbigiRGF0YWJhc2UiLCBudWxsKTsKLUluc3BlY3RvckJhY2tlbmQu
cmVnaXN0ZXJFdmVudCgiRGF0YWJhc2UuZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyIsIG51
bGwsIFsiY29sdW1uTmFtZXMiLCAibm90ZXMiLCAidGltZXN0YW1wIiwgInZhbHVlcyIsICJwYXls
b2FkIiwgInNxbEVycm9yIiwgInNjcmVlbkNvbG9yIiwgImFsdGVybmF0ZUNvbG9ycyIsICJwcmlu
dENvbG9yIl0pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckV2ZW50KCJEYXRhYmFzZS5kaWRF
eGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMiLCBudWxsLCBbImNvbHVtbk5hbWVzIiwgIm5vdGVz
IiwgInRpbWVzdGFtcCIsICJ2YWx1ZXMiLCAicGF5bG9hZCIsICJzcWxFcnJvciIsICJzY3JlZW5D
b2xvciIsICJhbHRlcm5hdGVDb2xvcnMiLCAicHJpbnRDb2xvciJdKTsKLUluc3BlY3RvckJhY2tl
bmQucmVnaXN0ZXJEYXRhYmFzZURpc3BhdGNoZXIgPSBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVy
RGlzcGF0Y2hlci5iaW5kKEluc3BlY3RvckJhY2tlbmQsICJEYXRhYmFzZSIpOwotSW5zcGVjdG9y
QmFja2VuZC5hY3RpdmF0ZURvbWFpbigiRGF0YWJhc2UiLCBudWxsKTsKLSMjIyBFbmQgRmlsZTog
SW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJu
YXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5
cGVzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5o
PgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXIgewotcHVibGljOgotICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJh
Y2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdU
Rk1vdmUoZGlzcGF0Y2hlcik7IH0KLSAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3Bh
dGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Ci1wcml2
YXRlOgotICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsK
LX07Ci0KLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jZW5kaWYgLy8gRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jIyMgRW5kIEZpbGU6IFRlc3RBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmRE
aXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdp
dGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2Jq
ZWN0cy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNw
ZWN0b3IgewotCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQotCi0KLX0gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLQot
IyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0
Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCi0jaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5o
IgotI2VuZGlmCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLQot
IyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNl
Ci0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05W
YWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIElu
c3BlY3RvciB7Ci0KLWNsYXNzIEZyb250ZW5kUm91dGVyOwotCi1jbGFzcyBEYXRhYmFzZUZyb250
ZW5kRGlzcGF0Y2hlciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0g
ICAgRGF0YWJhc2VGcm9udGVuZERpc3BhdGNoZXIoRnJvbnRlbmRSb3V0ZXImIGZyb250ZW5kUm91
dGVyKSA6IG1fZnJvbnRlbmRSb3V0ZXIoZnJvbnRlbmRSb3V0ZXIpIHsgfQotICAgIHZvaWQgZGlk
RXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiBj
b2x1bW5OYW1lcywgY29uc3QgU3RyaW5nKiBub3RlcywgY29uc3QgZG91YmxlKiB0aW1lc3RhbXAs
IFJlZlB0cjxKU09OOjpPYmplY3Q+IHZhbHVlcywgUmVmUHRyPEpTT046OlZhbHVlPiBwYXlsb2Fk
LCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBzcWxFcnJvciwg
Y29uc3QgU3RyaW5nKiBzY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpDb2xvckxpc3Q+IGFsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nKiBwcmludENv
bG9yKTsKLSAgICB2b2lkIGRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhSZWZQdHI8SlNP
Tjo6QXJyYXlPZjxTdHJpbmc+PiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBub3RlcywgZG91
YmxlIHRpbWVzdGFtcCwgUmVmUHRyPEpTT046Ok9iamVjdD4gdmFsdWVzLCBSZWZQdHI8SlNPTjo6
VmFsdWU+IHBheWxvYWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJy
b3I+IHNxbEVycm9yLCBjb25zdCBTdHJpbmcmIHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4gYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBT
dHJpbmcmIHByaW50Q29sb3IpOwotcHJpdmF0ZToKLSAgICBGcm9udGVuZFJvdXRlciYgbV9mcm9u
dGVuZFJvdXRlcjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxl
OiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVu
dHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RG
cm9udGVuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFt
ZXNwYWNlIEluc3BlY3RvciB7Ci0KLXZvaWQgRGF0YWJhc2VGcm9udGVuZERpc3BhdGNoZXI6OmRp
ZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMoUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4g
Y29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyogbm90ZXMsIGNvbnN0IGRvdWJsZSogdGltZXN0YW1w
LCBSZWZQdHI8SlNPTjo6T2JqZWN0PiB2YWx1ZXMsIFJlZlB0cjxKU09OOjpWYWx1ZT4gcGF5bG9h
ZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gc3FsRXJyb3Is
IGNvbnN0IFN0cmluZyogc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpE
YXRhYmFzZTo6Q29sb3JMaXN0PiBhbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyogcHJpbnRD
b2xvcikKLXsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVj
dDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRGF0
YWJhc2UuZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyJfcyk7Ci0gICAgUmVmPEpTT046Ok9i
amVjdD4gcGFyYW1zT2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBpZiAoY29s
dW1uTmFtZXMpCi0gICAgICAgIHBhcmFtc09iamVjdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9z
LCBjb2x1bW5OYW1lcyk7Ci0gICAgaWYgKG5vdGVzKQotICAgICAgICBwYXJhbXNPYmplY3QtPnNl
dFN0cmluZygibm90ZXMiX3MsICpub3Rlcyk7Ci0gICAgaWYgKHRpbWVzdGFtcCkKLSAgICAgICAg
cGFyYW1zT2JqZWN0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgKnRpbWVzdGFtcCk7Ci0gICAg
aWYgKHZhbHVlcykKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoInZhbHVlcyJfcywg
dmFsdWVzKTsKLSAgICBpZiAocGF5bG9hZCkKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRWYWx1
ZSgicGF5bG9hZCJfcywgKnBheWxvYWQpOwotICAgIGlmIChzcWxFcnJvcikKLSAgICAgICAgcGFy
YW1zT2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBzcWxFcnJvcik7Ci0gICAgaWYgKHNj
cmVlbkNvbG9yKQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygic2NyZWVuQ29sb3Ii
X3MsICpzY3JlZW5Db2xvcik7Ci0gICAgaWYgKGFsdGVybmF0ZUNvbG9ycykKLSAgICAgICAgcGFy
YW1zT2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCBhbHRlcm5hdGVDb2xvcnMp
OwotICAgIGlmIChwcmludENvbG9yKQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygi
cHJpbnRDb2xvciJfcywgKnByaW50Q29sb3IpOwotICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3Qo
InBhcmFtcyJfcywgV1RGTW92ZShwYXJhbXNPYmplY3QpKTsKLQotICAgIG1fZnJvbnRlbmRSb3V0
ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Ci19Ci0KLXZvaWQgRGF0
YWJhc2VGcm9udGVuZERpc3BhdGNoZXI6OmRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhS
ZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBu
b3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUmVmUHRyPEpTT046Ok9iamVjdD4gdmFsdWVzLCBSZWZQ
dHI8SlNPTjo6VmFsdWU+IHBheWxvYWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6RXJyb3I+IHNxbEVycm9yLCBjb25zdCBTdHJpbmcmIHNjcmVlbkNvbG9yLCBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4gYWx0ZXJuYXRlQ29sb3Jz
LCBjb25zdCBTdHJpbmcmIHByaW50Q29sb3IpCi17Ci0gICAgUmVmPEpTT046Ok9iamVjdD4ganNv
bk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRT
dHJpbmcoIm1ldGhvZCJfcywgIkRhdGFiYXNlLmRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVy
cyJfcyk7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywg
Y29sdW1uTmFtZXMpOwotICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJub3RlcyJfcywgbm90
ZXMpOwotICAgIHBhcmFtc09iamVjdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIHRpbWVzdGFt
cCk7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgdmFsdWVzKTsKLSAg
ICBwYXJhbXNPYmplY3QtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBwYXlsb2FkKTsKLSAgICBwYXJh
bXNPYmplY3QtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIHNxbEVycm9yKTsKLSAgICBwYXJhbXNP
YmplY3QtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsIHNjcmVlbkNvbG9yKTsKLSAgICBwYXJh
bXNPYmplY3QtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIGFsdGVybmF0ZUNvbG9ycyk7
Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsIHByaW50Q29sb3Ip
OwotICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyJfcywgV1RGTW92ZShwYXJhbXNP
YmplY3QpKTsKLQotICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50
b0pTT05TdHJpbmcoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5k
IEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sT2JqZWN0cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZl
bnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25z
Lmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotbmFtZXNwYWNlIFByb3RvY29sIHsK
LQotCi0KLS8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgotbmFtZXNwYWNlIERhdGFiYXNlIHsKLWNs
YXNzIEVycm9yOwotfSAvLyBEYXRhYmFzZQotLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25z
LgotCi0KLS8vIFR5cGVkZWZzLgotbmFtZXNwYWNlIERhdGFiYXNlIHsKLS8qIFVuaXF1ZSBpZGVu
dGlmaWVyIG9mIERhdGFiYXNlIG9iamVjdC4gKi8KLXR5cGVkZWYgU3RyaW5nIERhdGFiYXNlSWQ7
Ci10eXBlZGVmIFN0cmluZyBQcmltYXJ5Q29sb3JzOwotdHlwZWRlZiBKU09OOjpBcnJheU9mPFN0
cmluZz4gQ29sb3JMaXN0OwotfSAvLyBEYXRhYmFzZQotLy8gRW5kIG9mIHR5cGVkZWZzLgotCi1u
YW1lc3BhY2UgRGF0YWJhc2UgewotLyogRGF0YWJhc2UgZXJyb3IuICovCi1jbGFzcyBFcnJvciA6
IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKLXB1YmxpYzoKLSAgICBlbnVtIHsKLSAgICAgICAg
Tm9GaWVsZHNTZXQgPSAwLAotICAgICAgICBNZXNzYWdlU2V0ID0gMSA8PCAwLAotICAgICAgICBD
b2RlU2V0ID0gMSA8PCAxLAotICAgICAgICBBbGxGaWVsZHNTZXQgPSAoTWVzc2FnZVNldCB8IENv
ZGVTZXQpCi0gICAgfTsKLQotICAgIHRlbXBsYXRlPGludCBTVEFURT4KLSAgICBjbGFzcyBCdWls
ZGVyIHsKLSAgICBwcml2YXRlOgotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBtX3Jlc3Vs
dDsKLQotICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBj
YXN0U3RhdGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nh
c3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBC
dWlsZGVyKFJlZjwvKkVycm9yKi9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQotICAgICAgICAgICAg
OiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2lu
aXRfc3RhdGUpOwotICAgICAgICB9Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBFcnJvcjsKLSAgICBw
dWJsaWM6Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1lc3NhZ2VTZXQ+JiBzZXRNZXNzYWdl
KGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBNZXNzYWdlU2V0KSwgcHJvcGVydHlfbWVzc2FnZV9hbHJlYWR5X3NldCk7
Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJtZXNzYWdlIl9zLCB2YWx1ZSk7Ci0g
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1lc3NhZ2VTZXQ+KCk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29kZVNldD4mIHNldENvZGUoaW50IHZhbHVlKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29kZVNldCksIHBy
b3BlcnR5X2NvZGVfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldEludGVn
ZXIoImNvZGUiX3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29kZVNl
dD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIFJlZjxFcnJvcj4gcmVsZWFzZSgpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVz
dWx0X2lzX25vdF9yZWFkeSk7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoRXJy
b3IpID09IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7Ci0KLSAgICAgICAgICAg
IFJlZjxKU09OOjpPYmplY3Q+IGpzb25SZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgp
OwotICAgICAgICAgICAgYXV0byByZXN1bHQgPSBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJl
ZjxFcnJvcj4qPigmanNvblJlc3VsdCkpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAg
ICAgICAgfQotICAgIH07Ci0KLSAgICAvKgotICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoK
LSAgICAgKiBSZWY8RXJyb3I+IHJlc3VsdCA9IEVycm9yOjpjcmVhdGUoKQotICAgICAqICAgICAu
c2V0TWVzc2FnZSguLi4pCi0gICAgICogICAgIC5zZXRDb2RlKC4uLikKLSAgICAgKiAgICAgLnJl
bGVhc2UoKTsKLSAgICAgKi8KLSAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRl
KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09OOjpPYmpl
Y3Q6OmNyZWF0ZSgpKTsKLSAgICB9Ci19OwotCi19IC8vIERhdGFiYXNlCi0KLQotCi19IC8vIG5h
bWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xP
YmplY3RzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRo
LW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29s
T2JqZWN0cy5oIgotCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotbmFtZXNwYWNlIFByb3Rv
Y29sIHsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0j
aW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi0KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0K
LQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
QmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tl
bmREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50
cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90
b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJu
YWwuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbmNsdWRl
IDx3dGYvSlNPTlZhbHVlcy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3Bh
dGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1w
YXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgotCi1fX2F0dHJpYnV0ZV9f
KCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbiA6IE5TT2JqZWN0Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFRlc3RQ
cm90b2NvbERhdGFiYXNlRG9tYWluRXZlbnREaXNwYXRjaGVyICpkYXRhYmFzZUV2ZW50RGlzcGF0
Y2hlcjsKLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24u
aAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRl
cnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1w
b3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2Nv
bEludGVybmFsLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIK
LSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+Ci0j
aW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4K
LSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVycy5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXJzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBU
ZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCi17Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250
cm9sbGVyKiBfY29udHJvbGxlcjsKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkV2ZW50
RGlzcGF0Y2hlciAqX2RhdGFiYXNlRXZlbnREaXNwYXRjaGVyOwotfQotCi0tIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNv
bnRyb2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAg
ICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRyb2xs
ZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWRlYWxsb2MK
LXsKLSAgICBbX2RhdGFiYXNlRXZlbnREaXNwYXRjaGVyIHJlbGVhc2VdOwotICAgIFtzdXBlciBk
ZWFsbG9jXTsKLX0KLQotLSAoVGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5FdmVudERpc3BhdGNo
ZXIgKilkYXRhYmFzZUV2ZW50RGlzcGF0Y2hlcgotewotICAgIGlmICghX2RhdGFiYXNlRXZlbnRE
aXNwYXRjaGVyKQotICAgICAgICBfZGF0YWJhc2VFdmVudERpc3BhdGNoZXIgPSBbW1Rlc3RQcm90
b2NvbERhdGFiYXNlRG9tYWluRXZlbnREaXNwYXRjaGVyIGFsbG9jXSBpbml0V2l0aENvbnRyb2xs
ZXI6X2NvbnRyb2xsZXJdOwotICAgIHJldHVybiBfZGF0YWJhc2VFdmVudERpc3BhdGNoZXI7Ci19
Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0K
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0
ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2lt
cG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1l
c3BhY2UgSW5zcGVjdG9yOwotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sRGF0YWJhc2VE
b21haW5FdmVudERpc3BhdGNoZXIKLXsKLSAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xs
ZXIqIF9jb250cm9sbGVyOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVy
OihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBzZWxm
ID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAg
ICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAg
IHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnNX
aXRoQ29sdW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKiljb2x1bW5OYW1lcyBub3Rl
czooTlNTdHJpbmcgKiopbm90ZXMgdGltZXN0YW1wOihkb3VibGUgKil0aW1lc3RhbXAgdmFsdWVz
OihSV0lQcm90b2NvbEpTT05PYmplY3QgKiopdmFsdWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNP
Tk9iamVjdCAqKilwYXlsb2FkIHNxbEVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoq
KXNxbEVycm9yIHNjcmVlbkNvbG9yOihOU1N0cmluZyAqKilzY3JlZW5Db2xvciBhbHRlcm5hdGVD
b2xvcnM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKilhbHRlcm5hdGVDb2xvcnMgcHJpbnRDb2xv
cjooTlNTdHJpbmcgKiopcHJpbnRDb2xvcgotewotICAgIGNvbnN0IEZyb250ZW5kUm91dGVyJiBy
b3V0ZXIgPSBfY29udHJvbGxlci0+ZnJvbnRlbmRSb3V0ZXIoKTsKLQotICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihjb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1l
cyIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihub3Rl
cywgQCJub3RlcyIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFN
RVRFUih2YWx1ZXMsIEAidmFsdWVzIik7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BU
SU9OQUxfUEFSQU1FVEVSKHBheWxvYWQsIEAicGF5bG9hZCIpOwotICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihzcWxFcnJvciwgQCJzcWxFcnJvciIpOwotICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihzY3JlZW5Db2xvciwg
QCJzY3JlZW5Db2xvciIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BB
UkFNRVRFUihhbHRlcm5hdGVDb2xvcnMsIEAiYWx0ZXJuYXRlQ29sb3JzIik7Ci0gICAgVEhST1df
RVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHByaW50Q29sb3IsIEAicHJpbnRD
b2xvciIpOwotCi0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmpl
Y3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRh
dGFiYXNlLmRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMiX3MpOwotICAgIFJlZjxKU09OOjpP
YmplY3Q+IHBhcmFtc09iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgaWYgKGNv
bHVtbk5hbWVzKQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJf
cywgdG9KU09OU3RyaW5nQXJyYXkoKCpjb2x1bW5OYW1lcykpKTsKLSAgICBpZiAobm90ZXMpCi0g
ICAgICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJub3RlcyJfcywgKCpub3RlcykpOwotICAg
IGlmICh0aW1lc3RhbXApCi0gICAgICAgIHBhcmFtc09iamVjdC0+c2V0RG91YmxlKCJ0aW1lc3Rh
bXAiX3MsICgqdGltZXN0YW1wKSk7Ci0gICAgaWYgKHZhbHVlcykKLSAgICAgICAgcGFyYW1zT2Jq
ZWN0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgWygqdmFsdWVzKSB0b0pTT05PYmplY3RdKTsKLSAg
ICBpZiAocGF5bG9hZCkKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRWYWx1ZSgicGF5bG9hZCJf
cywgWygqcGF5bG9hZCkgdG9KU09OT2JqZWN0XSk7Ci0gICAgaWYgKHNxbEVycm9yKQotICAgICAg
ICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIFsoKnNxbEVycm9yKSB0b0pT
T05PYmplY3RdKTsKLSAgICBpZiAoc2NyZWVuQ29sb3IpCi0gICAgICAgIHBhcmFtc09iamVjdC0+
c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgKCpzY3JlZW5Db2xvcikpOwotICAgIGlmIChhbHRl
cm5hdGVDb2xvcnMpCi0gICAgICAgIHBhcmFtc09iamVjdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNv
bG9ycyJfcywgdG9KU09OU3RyaW5nQXJyYXkoKCphbHRlcm5hdGVDb2xvcnMpKSk7Ci0gICAgaWYg
KHByaW50Q29sb3IpCi0gICAgICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJwcmludENvbG9y
Il9zLCAoKnByaW50Q29sb3IpKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMi
X3MsIFdURk1vdmUocGFyYW1zT2JqZWN0KSk7Ci0gICAgcm91dGVyLnNlbmRFdmVudChqc29uTWVz
c2FnZS0+dG9KU09OU3RyaW5nKCkpOwotfQotCi0tICh2b2lkKWRpZEV4ZWN1dGVOb09wdGlvbmFs
UGFyYW1ldGVyc1dpdGhDb2x1bW5OYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopY29sdW1u
TmFtZXMgbm90ZXM6KE5TU3RyaW5nICopbm90ZXMgdGltZXN0YW1wOihkb3VibGUpdGltZXN0YW1w
IHZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopdmFsdWVzIHBheWxvYWQ6KFJXSVByb3Rv
Y29sSlNPTk9iamVjdCAqKXBheWxvYWQgc3FsRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJy
b3IgKilzcWxFcnJvciBzY3JlZW5Db2xvcjooTlNTdHJpbmcgKilzY3JlZW5Db2xvciBhbHRlcm5h
dGVDb2xvcnM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWFsdGVybmF0ZUNvbG9ycyBwcmludENv
bG9yOihOU1N0cmluZyAqKXByaW50Q29sb3IKLXsKLSAgICBjb25zdCBGcm9udGVuZFJvdXRlciYg
cm91dGVyID0gX2NvbnRyb2xsZXItPmZyb250ZW5kUm91dGVyKCk7Ci0KLSAgICBUSFJPV19FWENF
UFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihjb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIp
OwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG5vdGVzLCBAIm5v
dGVzIik7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIodmFsdWVz
LCBAInZhbHVlcyIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVS
KHBheWxvYWQsIEAicGF5bG9hZCIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURf
UEFSQU1FVEVSKHNxbEVycm9yLCBAInNxbEVycm9yIik7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9SRVFVSVJFRF9QQVJBTUVURVIoc2NyZWVuQ29sb3IsIEAic2NyZWVuQ29sb3IiKTsKLSAgICBU
SFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihhbHRlcm5hdGVDb2xvcnMsIEAi
YWx0ZXJuYXRlQ29sb3JzIik7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJB
TUVURVIocHJpbnRDb2xvciwgQCJwcmludENvbG9yIik7Ci0KLSAgICBSZWY8SlNPTjo6T2JqZWN0
PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2Ut
PnNldFN0cmluZygibWV0aG9kIl9zLCAiRGF0YWJhc2UuZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJh
bWV0ZXJzIl9zKTsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBwYXJhbXNPYmplY3QgPSBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpOwotICAgIHBhcmFtc09iamVjdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVz
Il9zLCB0b0pTT05TdHJpbmdBcnJheShjb2x1bW5OYW1lcykpOwotICAgIHBhcmFtc09iamVjdC0+
c2V0U3RyaW5nKCJub3RlcyJfcywgbm90ZXMpOwotICAgIHBhcmFtc09iamVjdC0+c2V0RG91Ymxl
KCJ0aW1lc3RhbXAiX3MsIHRpbWVzdGFtcCk7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3Qo
InZhbHVlcyJfcywgW3ZhbHVlcyB0b0pTT05PYmplY3RdKTsKLSAgICBwYXJhbXNPYmplY3QtPnNl
dFZhbHVlKCJwYXlsb2FkIl9zLCBbcGF5bG9hZCB0b0pTT05PYmplY3RdKTsKLSAgICBwYXJhbXNP
YmplY3QtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIFtzcWxFcnJvciB0b0pTT05PYmplY3RdKTsK
LSAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsIHNjcmVlbkNvbG9y
KTsKLSAgICBwYXJhbXNPYmplY3QtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIHRvSlNP
TlN0cmluZ0FycmF5KGFsdGVybmF0ZUNvbG9ycykpOwotICAgIHBhcmFtc09iamVjdC0+c2V0U3Ry
aW5nKCJwcmludENvbG9yIl9zLCBwcmludENvbG9yKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0T2Jq
ZWN0KCJwYXJhbXMiX3MsIFdURk1vdmUocGFyYW1zT2JqZWN0KSk7Ci0gICAgcm91dGVyLnNlbmRF
dmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwotfQotCi1AZW5kCi0KLQotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2wuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50
cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQot
I2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgotCi0KLUBjbGFz
cyBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yOwotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2Vy
LCBUZXN0UHJvdG9jb2xQbGF0Zm9ybSkgewotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsLAot
ICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9y
bUlPUywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TLAotfTsKLQotCi0KLQotX19hdHRy
aWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2Nv
bERhdGFiYXNlRXJyb3IgOiBSV0lQcm90b2NvbEpTT05PYmplY3QKLS0gKGluc3RhbmNldHlwZSlp
bml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkOwot
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9i
amVjdCAqKWpzb25PYmplY3Q7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0
cmluZyAqKW1lc3NhZ2UgY29kZTooaW50KWNvZGU7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkg
KG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKm1lc3NhZ2U7Ci0vKiByZXF1aXJlZCAqLyBAcHJv
cGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQgY29kZTsKLUBlbmQKLQotCi0KLV9fYXR0cmli
dXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xE
YXRhYmFzZURvbWFpbkV2ZW50RGlzcGF0Y2hlciA6IE5TT2JqZWN0Ci0tICh2b2lkKWRpZEV4ZWN1
dGVPcHRpb25hbFBhcmFtZXRlcnNXaXRoQ29sdW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4q
LyAqKiljb2x1bW5OYW1lcyBub3RlczooTlNTdHJpbmcgKiopbm90ZXMgdGltZXN0YW1wOihkb3Vi
bGUgKil0aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKiopdmFsdWVzIHBh
eWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKilwYXlsb2FkIHNxbEVycm9yOihUZXN0UHJv
dG9jb2xEYXRhYmFzZUVycm9yICoqKXNxbEVycm9yIHNjcmVlbkNvbG9yOihOU1N0cmluZyAqKilz
Y3JlZW5Db2xvciBhbHRlcm5hdGVDb2xvcnM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKilhbHRl
cm5hdGVDb2xvcnMgcHJpbnRDb2xvcjooTlNTdHJpbmcgKiopcHJpbnRDb2xvcjsKLS0gKHZvaWQp
ZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzV2l0aENvbHVtbk5hbWVzOihOU0FycmF5Lyo8
TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcyBub3RlczooTlNTdHJpbmcgKilub3RlcyB0aW1lc3Rh
bXA6KGRvdWJsZSl0aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKil2YWx1
ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZCBzcWxFcnJvcjooVGVz
dFByb3RvY29sRGF0YWJhc2VFcnJvciAqKXNxbEVycm9yIHNjcmVlbkNvbG9yOihOU1N0cmluZyAq
KXNjcmVlbkNvbG9yIGFsdGVybmF0ZUNvbG9yczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopYWx0
ZXJuYXRlQ29sb3JzIHByaW50Q29sb3I6KE5TU3RyaW5nICopcHJpbnRDb2xvcjsKLUBlbmQKLQot
Ci0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmpl
Y3RzLmg+Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbEludGVybmFsLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1w
b3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgotI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDx3dGYvSlNP
TlZhbHVlcy5oPgotCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluRXZlbnRE
aXNwYXRjaGVyIChQcml2YXRlKQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjoo
SW5zcGVjdG9yOjpBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXI7Ci1A
ZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJv
dG9jb2wuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lv
bnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9iakNF
bnVtVHlwZT4KLU9wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0
IFN0cmluZyYgdmFsdWUpOwotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFBy
b3RvY29sUGxhdGZvcm0gdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBU
ZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDoKLSAgICAgICAgcmV0dXJuICJhbGwiX3M7Ci0gICAgY2Fz
ZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM6Ci0gICAgICAgIHJldHVybiAiZ2VuZXJpYyJf
czsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOgotICAgICAgICByZXR1cm4gImlv
cyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M6Ci0gICAgICAgIHJldHVy
biAibWFjb3MiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVz
dFByb3RvY29sUGxhdGZvcm0+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVl
KQotewotICAgIGlmICh2YWx1ZSA9PSAiYWxsIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2Nv
bFBsYXRmb3JtQWxsOwotICAgIGlmICh2YWx1ZSA9PSAiZ2VuZXJpYyIpCi0gICAgICAgIHJldHVy
biBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM7Ci0gICAgaWYgKHZhbHVlID09ICJpb3MiKQot
ICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1JT1M7Ci0gICAgaWYgKHZhbHVlID09
ICJtYWNvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOwotICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
LQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNp
bXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9S
V0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0
b3I7Ci0KLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChEYXRhYmFzZURv
bWFpbikKLQotKyAodm9pZClfcGFyc2VEYXRhYmFzZUlkOihOU1N0cmluZyAqKilvdXRWYWx1ZSBm
cm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLSsgKHZvaWQpX3BhcnNlUHJpbWFyeUNvbG9yczooTlNT
dHJpbmcgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJz
ZUNvbG9yTGlzdDooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2Fk
OihpZClwYXlsb2FkOwotKyAodm9pZClfcGFyc2VFcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VF
cnJvciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLQotQGVuZAotCi1AaW1w
bGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChEYXRhYmFzZURvbWFpbikK
LQotKyAodm9pZClfcGFyc2VEYXRhYmFzZUlkOihOU1N0cmluZyAqKilvdXRWYWx1ZSBmcm9tUGF5
bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5
bG9hZCwgW05TU3RyaW5nIGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gKE5TU3RyaW5nICopcGF5
bG9hZDsKLX0KLQotKyAodm9pZClfcGFyc2VQcmltYXJ5Q29sb3JzOihOU1N0cmluZyAqKilvdXRW
YWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
QkFEX1RZUEUocGF5bG9hZCwgW05TU3RyaW5nIGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gKE5T
U3RyaW5nICopcGF5bG9hZDsKLX0KLQotKyAodm9pZClfcGFyc2VDb2xvckxpc3Q6KE5TQXJyYXkv
KjxOU1N0cmluZz4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TQXJyYXkvKjxOU1N0cmlu
Zz4qLyBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IChOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilw
YXlsb2FkOwotfQotCi0rICh2b2lkKV9wYXJzZUVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVy
cm9yICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7Ci0gICAg
Km91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGFsbG9jXSBpbml0V2l0aFBh
eWxvYWQ6cGF5bG9hZF07Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMu
bW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25h
bC1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9j
b2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbXBv
cnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQot
QGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IKLQotLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+
ICopcGF5bG9hZAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICBy
ZXR1cm4gbmlsOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShw
YXlsb2FkW0AibWVzc2FnZSJdLCBAIm1lc3NhZ2UiKTsKLSAgICBzZWxmLm1lc3NhZ2UgPSBwYXls
b2FkW0AibWVzc2FnZSJdOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9Q
RVJUWShwYXlsb2FkW0AiY29kZSJdLCBAImNvZGUiKTsKLSAgICBzZWxmLmNvZGUgPSBbcGF5bG9h
ZFtAImNvZGUiXSBpbnRlZ2VyVmFsdWVdOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0tIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICop
b2JqZWN0Ci17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEpTT05PYmplY3Q6W29i
amVjdCB0b0pTT05PYmplY3RdLmdldCgpXSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBy
ZXR1cm4gc2VsZjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTWVzc2FnZTooTlNTdHJp
bmcgKiltZXNzYWdlIGNvZGU6KGludCljb2RlCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBp
bml0XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JF
UVVJUkVEX1BST1BFUlRZKG1lc3NhZ2UsIEAibWVzc2FnZSIpOwotCi0gICAgc2VsZi5tZXNzYWdl
ID0gbWVzc2FnZTsKLSAgICBzZWxmLmNvZGUgPSBjb2RlOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19
Ci0KLS0gKHZvaWQpc2V0TWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlCi17Ci0gICAgW3N1cGVy
IHNldFN0cmluZzptZXNzYWdlIGZvcktleTpAIm1lc3NhZ2UiXTsKLX0KLQotLSAoTlNTdHJpbmcg
KiltZXNzYWdlCi17Ci0gICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJtZXNzYWdlIl07
Ci19Ci0KLS0gKHZvaWQpc2V0Q29kZTooaW50KWNvZGUKLXsKLSAgICBbc3VwZXIgc2V0SW50ZWdl
cjpjb2RlIGZvcktleTpAImNvZGUiXTsKLX0KLQotLSAoaW50KWNvZGUKLXsKLSAgICByZXR1cm4g
W3N1cGVyIGludGVnZXJGb3JLZXk6QCJjb2RlIl07Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWNvbW1h
bmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1lcnJvciBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4
cGVjdGVkL2ZhaWwtb24tY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dh
YmxlVHlwZS5qc29uLWVycm9yCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMTMwYWQ3
MGM0MC4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1jb21tYW5kLXRhcmdldFR5cGUt
bWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tZXJyb3IKKysrIC9kZXYvbnVsbApA
QCAtMSArMCwwIEBACi1FUlJPUjogTWFsZm9ybWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9uOiBkb21h
aW4gRG9tYWluIGhhcyBhbiBpdGVtIGluIHRhcmdldFR5cGVzICJbdSd3b3JrZXInXSIgdGhhdCBp
cyBub3Qgc3VwcG9ydGVkIGJ5IGFueSB2YWx1ZSBpbiBkZWJ1Z2dhYmxlVHlwZXMgIlt1J2phdmFz
Y3JpcHQnXSIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlwZXMt
dHlwZS5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1jb21tYW5kLXRhcmdldFR5cGVzLXR5cGUu
anNvbi1lcnJvcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTlmNWUxYTRhOGUuLjAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tY29tbWFuZC10YXJnZXRUeXBlcy10eXBlLmpz
b24tZXJyb3IKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1FUlJPUjogTWFsZm9ybWVkIGRv
bWFpbiBzcGVjaWZpY2F0aW9uOiB0YXJnZXRUeXBlcyBsaXN0IGZvciBjb21tYW5kIFBhZ2VPbmx5
IGlzIG5vdCBhbiBhcnJheQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1jb21tYW5kLXRhcmdl
dFR5cGVzLXZhbHVlLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlw
ZXMtdmFsdWUuanNvbi1lcnJvcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjFhMzY1
Njk5MjYuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tY29tbWFuZC10YXJnZXRUeXBl
cy12YWx1ZS5qc29uLWVycm9yCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotRVJST1I6IE1h
bGZvcm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjogdGFyZ2V0VHlwZXMgbGlzdCBmb3IgY29tbWFu
ZCBQYWdlT25seSBpcyBhbiB1bnN1cHBvcnRlZCBzdHJpbmcuIFdhczogIlt1J3BhZ2VlJ10iLCBB
bGxvd2VkIHZhbHVlczogc2VydmljZS13b3JrZXIsIGphdmFzY3JpcHQsIHdvcmtlciwgcGFnZSwg
d2ViLXBhZ2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tY29tbWFuZC13aXRoLWludmFsaWQt
cGxhdGZvcm0uanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tY29tbWFuZC13aXRoLWludmFsaWQt
cGxhdGZvcm0uanNvbi1lcnJvcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWM2MzZj
NTRiN2MuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tY29tbWFuZC13aXRoLWludmFs
aWQtcGxhdGZvcm0uanNvbi1lcnJvcgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUVSUk9S
OiBVbmtub3duIHBsYXRmb3JtOiBpbnZhbGlkCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWRv
bWFpbi1kZWJ1Z2dhYmxlVHlwZXMtdHlwZS5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1kb21h
aW4tZGVidWdnYWJsZVR5cGVzLXR5cGUuanNvbi1lcnJvcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMmI4OThiYTdiZTcuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZG9t
YWluLWRlYnVnZ2FibGVUeXBlcy10eXBlLmpzb24tZXJyb3IKKysrIC9kZXYvbnVsbApAQCAtMSAr
MCwwIEBACi1FUlJPUjogTWFsZm9ybWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9uOiBkZWJ1Z2dhYmxl
VHlwZXMgZm9yIGRvbWFpbiBXZWJPbmx5IGlzIG5vdCBhbiBhcnJheQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0
ZWQvZmFpbC1vbi1kb21haW4tZGVidWdnYWJsZVR5cGVzLXZhbHVlLmpzb24tZXJyb3IgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3Rl
ZC9mYWlsLW9uLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMtdmFsdWUuanNvbi1lcnJvcgpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmY3MWQ0NzBjYmQuLjAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVj
dGVkL2ZhaWwtb24tZG9tYWluLWRlYnVnZ2FibGVUeXBlcy12YWx1ZS5qc29uLWVycm9yCisrKyAv
ZGV2L251bGwKQEAgLTEgKzAsMCBAQAotRVJST1I6IE1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNh
dGlvbjogZGVidWdnYWJsZVR5cGVzIGZvciBkb21haW4gV2ViT25seSBpcyBhbiB1bnN1cHBvcnRl
ZCBzdHJpbmcuIFdhczogIlt1J3dlYmInXSIsIEFsbG93ZWQgdmFsdWVzOiBzZXJ2aWNlLXdvcmtl
ciwgamF2YXNjcmlwdCwgcGFnZSwgd2ViLXBhZ2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24t
ZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tZXJy
b3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJp
Yy9leHBlY3RlZC9mYWlsLW9uLWRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1
Z2dhYmxlVHlwZS5qc29uLWVycm9yCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Njdl
MzUwMDg5OC4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlw
ZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1lcnJvcgorKysgL2Rldi9udWxs
CkBAIC0xICswLDAgQEAKLUVSUk9SOiBNYWxmb3JtZWQgZG9tYWluIHNwZWNpZmljYXRpb246IGNv
bW1hbmQgQ29tbWFuZCBoYXMgYW4gaXRlbSBpbiB0YXJnZXRUeXBlcyAiW3Und29ya2VyJ10iIHRo
YXQgaXMgbm90IHN1cHBvcnRlZCBieSBhbnkgdmFsdWUgaW4gZGVidWdnYWJsZVR5cGVzICJbdSdq
YXZhc2NyaXB0J10iLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlw
ZXMtdHlwZS5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZXMtdHlw
ZS5qc29uLWVycm9yCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOWEzNTkzM2EzNS4u
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZXMtdHlwZS5q
c29uLWVycm9yCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotRVJST1I6IE1hbGZvcm1lZCBk
b21haW4gc3BlY2lmaWNhdGlvbjogdGFyZ2V0VHlwZXMgZm9yIGRvbWFpbiBQYWdlT25seSBpcyBu
b3QgYW4gYXJyYXkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZG9tYWluLXRhcmdldFR5cGVz
LXZhbHVlLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWRvbWFpbi10YXJnZXRUeXBlcy12YWx1
ZS5qc29uLWVycm9yCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NjgwN2Y3MmZjNC4u
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZXMtdmFsdWUu
anNvbi1lcnJvcgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUVSUk9SOiBNYWxmb3JtZWQg
ZG9tYWluIHNwZWNpZmljYXRpb246IHRhcmdldFR5cGVzIGZvciBkb21haW4gUGFnZU9ubHkgaXMg
YW4gdW5zdXBwb3J0ZWQgc3RyaW5nLiBXYXM6ICJbdSdwYWdlZSddIiwgQWxsb3dlZCB2YWx1ZXM6
IHNlcnZpY2Utd29ya2VyLCBqYXZhc2NyaXB0LCB3b3JrZXIsIHBhZ2UsIHdlYi1wYWdlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2Vu
ZXJpYy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS1jb21tYW5kLWNhbGwtcGFyYW1ldGVyLW5h
bWVzLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS1jb21tYW5kLWNhbGwtcGFy
YW1ldGVyLW5hbWVzLmpzb24tZXJyb3IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNm
NzU2ZGUzMjUwLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS1jb21t
YW5kLWNhbGwtcGFyYW1ldGVyLW5hbWVzLmpzb24tZXJyb3IKKysrIC9kZXYvbnVsbApAQCAtMSAr
MCwwIEBACi1FUlJPUjogTWFsZm9ybWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9uOiBjYWxsIHBhcmFt
ZXRlciBsaXN0IGZvciBjb21tYW5kIHByb2Nlc3NQb2ludHMgaGFzIGR1cGxpY2F0ZSBwYXJhbWV0
ZXIgbmFtZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLWNvbW1hbmQtcmV0
dXJuLXBhcmFtZXRlci1uYW1lcy5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUt
Y29tbWFuZC1yZXR1cm4tcGFyYW1ldGVyLW5hbWVzLmpzb24tZXJyb3IKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGVhMTQ4ZmY2N2M5Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWls
LW9uLWR1cGxpY2F0ZS1jb21tYW5kLXJldHVybi1wYXJhbWV0ZXItbmFtZXMuanNvbi1lcnJvcgor
KysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUVSUk9SOiBNYWxmb3JtZWQgZG9tYWluIHNwZWNp
ZmljYXRpb246IHJldHVybiBwYXJhbWV0ZXIgbGlzdCBmb3IgY29tbWFuZCBwcm9jZXNzUG9pbnRz
IGhhcyBkdXBsaWNhdGUgcGFyYW1ldGVyIG5hbWVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9u
LWR1cGxpY2F0ZS1ldmVudC1wYXJhbWV0ZXItbmFtZXMuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwt
b24tZHVwbGljYXRlLWV2ZW50LXBhcmFtZXRlci1uYW1lcy5qc29uLWVycm9yCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBjNzFiYmQyMWMyYy4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQv
ZmFpbC1vbi1kdXBsaWNhdGUtZXZlbnQtcGFyYW1ldGVyLW5hbWVzLmpzb24tZXJyb3IKKysrIC9k
ZXYvbnVsbApAQCAtMSArMCwwIEBACi1FUlJPUjogTWFsZm9ybWVkIGRvbWFpbiBzcGVjaWZpY2F0
aW9uOiBwYXJhbWV0ZXIgbGlzdCBmb3IgZXZlbnQgcHJvY2Vzc2VkUG9pbnRzIGhhcyBkdXBsaWNh
dGUgcGFyYW1ldGVyIG5hbWVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS10
eXBlLWRlY2xhcmF0aW9ucy5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtdHlw
ZS1kZWNsYXJhdGlvbnMuanNvbi1lcnJvcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NDQ3Y2RmOGUyOGUuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLXR5
cGUtZGVjbGFyYXRpb25zLmpzb24tZXJyb3IKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1F
UlJPUjogRHVwbGljYXRlIHR5cGUgZGVjbGFyYXRpb246IFJ1bnRpbWUuUmVtb3RlT2JqZWN0SWQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLXR5cGUtbWVtYmVyLW5hbWVzLmpz
b24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLW1lbWJlci1uYW1lcy5qc29u
LWVycm9yCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNTM3NmE3N2E0NS4uMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1tZW1iZXItbmFtZXMuanNv
bi1lcnJvcgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUVSUk9SOiBNYWxmb3JtZWQgZG9t
YWluIHNwZWNpZmljYXRpb246IHR5cGUgZGVjbGFyYXRpb24gZm9yIFBvaW50IGhhcyBkdXBsaWNh
dGUgbWVtYmVyIG5hbWVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWVudW0td2l0aC1uby12
YWx1ZXMuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZW51bS13aXRoLW5vLXZhbHVlcy5qc29u
LWVycm9yCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNjU1YzJiOTA3ZS4uMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1lbnVtLXdpdGgtbm8tdmFsdWVzLmpzb24tZXJyb3IK
KysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1FUlJPUjogVHlwZSByZWZlcmVuY2Ugd2l0aCBl
bnVtIHZhbHVlcyBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIGVudW0gdmFsdWUuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9l
eHBlY3RlZC9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2Fi
bGVUeXBlLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGUtbWF0Y2hp
bmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tZXJyb3IKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGI2NWQ3YTBkMTk2Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWV2
ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tZXJyb3IK
KysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1FUlJPUjogTWFsZm9ybWVkIGRvbWFpbiBzcGVj
aWZpY2F0aW9uOiBldmVudCBFdmVudCBoYXMgYW4gaXRlbSBpbiB0YXJnZXRUeXBlcyAiW3Und29y
a2VyJ10iIHRoYXQgaXMgbm90IHN1cHBvcnRlZCBieSBhbnkgdmFsdWUgaW4gZGVidWdnYWJsZVR5
cGVzICJbdSdqYXZhc2NyaXB0J10iLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1ldmVudC10
YXJnZXRUeXBlcy10eXBlLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWV2ZW50LXRhcmdldFR5
cGVzLXR5cGUuanNvbi1lcnJvcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzQwM2Ux
M2E4MDkuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlwZXMt
dHlwZS5qc29uLWVycm9yCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotRVJST1I6IE1hbGZv
cm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjogdGFyZ2V0VHlwZXMgZm9yIGV2ZW50IFBhZ2VPbmx5
IGlzIG5vdCBhbiBhcnJheQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1ldmVudC10YXJnZXRU
eXBlcy12YWx1ZS5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1ldmVudC10YXJnZXRUeXBlcy12
YWx1ZS5qc29uLWVycm9yCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MzAxMmE5ZmU0
ZS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1ldmVudC10YXJnZXRUeXBlcy12YWx1
ZS5qc29uLWVycm9yCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotRVJST1I6IE1hbGZvcm1l
ZCBkb21haW4gc3BlY2lmaWNhdGlvbjogdGFyZ2V0VHlwZXMgZm9yIGV2ZW50IFBhZ2VPbmx5IGlz
IGFuIHVuc3VwcG9ydGVkIHN0cmluZy4gV2FzOiAiW3UncGFnZWUnXSIsIEFsbG93ZWQgdmFsdWVz
OiBzZXJ2aWNlLXdvcmtlciwgamF2YXNjcmlwdCwgd29ya2VyLCBwYWdlLCB3ZWItcGFnZQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZs
YWcuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tbnVtYmVyLXR5cGVkLW9wdGlvbmFsLXBhcmFt
ZXRlci1mbGFnLmpzb24tZXJyb3IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3YjJh
ZjBlNDdlLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRp
b25hbC1wYXJhbWV0ZXItZmxhZy5qc29uLWVycm9yCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBA
QAotRVJST1I6IFRoZSAnb3B0aW9uYWwnIGZsYWcgZm9yIGEgcGFyYW1ldGVyIG11c3QgYmUgYSBi
b29sZWFuIGxpdGVyYWwuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLW51bWJlci10eXBlZC1v
cHRpb25hbC10eXBlLW1lbWJlci5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1udW1iZXItdHlw
ZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNvbi1lcnJvcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggODZkZjM3NTBjMWEuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tbnVt
YmVyLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24tZXJyb3IKKysrIC9kZXYvbnVsbApA
QCAtMSArMCwwIEBACi1FUlJPUjogVGhlICdvcHRpb25hbCcgZmxhZyBmb3IgYSB0eXBlIG1lbWJl
ciBtdXN0IGJlIGEgYm9vbGVhbiBsaXRlcmFsLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1z
dHJpbmctdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbi1lcnJvciBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2Zh
aWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24tZXJyb3IKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3YjJhZjBlNDdlLi4wMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9l
eHBlY3RlZC9mYWlsLW9uLXN0cmluZy10eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29u
LWVycm9yCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotRVJST1I6IFRoZSAnb3B0aW9uYWwn
IGZsYWcgZm9yIGEgcGFyYW1ldGVyIG11c3QgYmUgYSBib29sZWFuIGxpdGVyYWwuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJp
Yy9leHBlY3RlZC9mYWlsLW9uLXN0cmluZy10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29u
LWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIu
anNvbi1lcnJvcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODZkZjM3NTBjMWEuLjAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXR5cGUt
bWVtYmVyLmpzb24tZXJyb3IKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1FUlJPUjogVGhl
ICdvcHRpb25hbCcgZmxhZyBmb3IgYSB0eXBlIG1lbWJlciBtdXN0IGJlIGEgYm9vbGVhbiBsaXRl
cmFsLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi10eXBlLWRlY2xhcmF0aW9uLXVzaW5nLXR5
cGUtcmVmZXJlbmNlLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXR5cGUtZGVjbGFyYXRpb24t
dXNpbmctdHlwZS1yZWZlcmVuY2UuanNvbi1lcnJvcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggNDJmNTc1M2E0MzkuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS1k
ZWNsYXJhdGlvbi11c2luZy10eXBlLXJlZmVyZW5jZS5qc29uLWVycm9yCisrKyAvZGV2L251bGwK
QEAgLTEgKzAsMCBAQAotRVJST1I6IFR5cGUgcmVmZXJlbmNlIGNhbm5vdCBoYXZlIGJvdGggJ3R5
cGUnIGFuZCAnJHJlZicga2V5cy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS1yZWZl
cmVuY2UtYXMtcHJpbWl0aXZlLXR5cGUuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS1y
ZWZlcmVuY2UtYXMtcHJpbWl0aXZlLXR5cGUuanNvbi1lcnJvcgpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggZDc2YmMxYzc3NzMuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24t
dHlwZS1yZWZlcmVuY2UtYXMtcHJpbWl0aXZlLXR5cGUuanNvbi1lcnJvcgorKysgL2Rldi9udWxs
CkBAIC0xICswLDAgQEAKLUVSUk9SOiBUeXBlIHJlZmVyZW5jZSAnRGF0YWJhc2VJZCcgaXMgbm90
IGEgcHJpbWl0aXZlIHR5cGUuIEFsbG93ZWQgdmFsdWVzOiBpbnRlZ2VyLCBudW1iZXIsIHN0cmlu
ZywgYm9vbGVhbiwgZW51bSwgb2JqZWN0LCBhcnJheSwgYW55CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9m
YWlsLW9uLXR5cGUtd2l0aC1pbnZhbGlkLXBsYXRmb3JtLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWls
LW9uLXR5cGUtd2l0aC1pbnZhbGlkLXBsYXRmb3JtLmpzb24tZXJyb3IKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGVjNjM2YzU0YjdjLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWls
LW9uLXR5cGUtd2l0aC1pbnZhbGlkLXBsYXRmb3JtLmpzb24tZXJyb3IKKysrIC9kZXYvbnVsbApA
QCAtMSArMCwwIEBACi1FUlJPUjogVW5rbm93biBwbGF0Zm9ybTogaW52YWxpZApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMv
ZXhwZWN0ZWQvZmFpbC1vbi10eXBlLXdpdGgtbG93ZXJjYXNlLW5hbWUuanNvbi1lcnJvciBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVj
dGVkL2ZhaWwtb24tdHlwZS13aXRoLWxvd2VyY2FzZS1uYW1lLmpzb24tZXJyb3IKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlNDYyMjUwYzBhLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3Rl
ZC9mYWlsLW9uLXR5cGUtd2l0aC1sb3dlcmNhc2UtbmFtZS5qc29uLWVycm9yCisrKyAvZGV2L251
bGwKQEAgLTEgKzAsMCBAQAotRVJST1I6IFR5cGVzIG11c3QgYmVnaW4gd2l0aCBhbiB1cHBlcmNh
c2UgY2hhcmFjdGVyLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi11bmtub3duLXR5cGUtcmVm
ZXJlbmNlLWluLXR5cGUtZGVjbGFyYXRpb24uanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tdW5r
bm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLWRlY2xhcmF0aW9uLmpzb24tZXJyb3IKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkMzhlNjQ2NzVkLi4wMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBl
Y3RlZC9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1kZWNsYXJhdGlvbi5q
c29uLWVycm9yCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotRVJST1I6IFR5cGUgcmVmZXJl
bmNlICdkcmFnb24nIGlzIG5vdCBhIHByaW1pdGl2ZSB0eXBlLiBBbGxvd2VkIHZhbHVlczogaW50
ZWdlciwgbnVtYmVyLCBzdHJpbmcsIGJvb2xlYW4sIGVudW0sIG9iamVjdCwgYXJyYXksIGFueQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUt
bWVtYmVyLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2Ut
aW4tdHlwZS1tZW1iZXIuanNvbi1lcnJvcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ZmFmNjY3MmNiZWYuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tdW5rbm93bi10eXBl
LXJlZmVyZW5jZS1pbi10eXBlLW1lbWJlci5qc29uLWVycm9yCisrKyAvZGV2L251bGwKQEAgLTEg
KzAsMCBAQAotRVJST1I6IExvb2t1cCBmYWlsZWQgZm9yIHR5cGUgcmVmZXJlbmNlOiBDb2xvciAo
cmVmZXJlbmNlZCBmcm9tIGRvbWFpbjogRmFudGFzeSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2dlbmVy
YXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2dlbmVy
YXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uLXJlc3VsdApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDk0NmI1M2UzZjguLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2dl
bmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uLXJlc3VsdAorKysgL2Rldi9u
dWxsCkBAIC0xLDEyNDUgKzAsMCBAQAotIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRD
b21tYW5kcy5qcwotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRv
bWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLS8vIE5ldHdvcmsxCi1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVy
RG9tYWluKCJOZXR3b3JrMSIsIG51bGwpOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1h
bmQoIk5ldHdvcmsxLmxvYWRSZXNvdXJjZSIsIG51bGwsIFtdLCBbXSk7Ci1JbnNwZWN0b3JCYWNr
ZW5kLmFjdGl2YXRlRG9tYWluKCJOZXR3b3JrMSIsIG51bGwpOwotCi0vLyBOZXR3b3JrMwotSW5z
cGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiTmV0d29yazMiLCBudWxsKTsKLUluc3BlY3Rv
ckJhY2tlbmQucmVnaXN0ZXJFdmVudCgiTmV0d29yazMucmVzb3VyY2VMb2FkZWQiLCBudWxsLCBb
XSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyTmV0d29yazNEaXNwYXRjaGVyID0gSW5zcGVj
dG9yQmFja2VuZC5yZWdpc3RlckRpc3BhdGNoZXIuYmluZChJbnNwZWN0b3JCYWNrZW5kLCAiTmV0
d29yazMiKTsKLUluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIk5ldHdvcmszIiwgbnVs
bCk7Ci0jIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRz
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdt
YSBvbmNlCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQot
I2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xh
c3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZvaWQgc2V0QmFj
a2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsg
bV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KLSAgICBCYWNrZW5k
RGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmRE
aXNwYXRjaGVyLmdldCgpOyB9Ci1wcml2YXRlOgotICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hl
cj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKLX07Ci0KLQotI2lmIFBMQVRGT1JNKFdFQl9DT01NQU5E
UykKLWNsYXNzIEFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0
ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZpcnR1YWwgfkFsdGVybmF0
ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJl
c291cmNlKGxvbmcgY2FsbElkKSA9IDA7Ci19OwotI2VuZGlmIC8vIFBMQVRGT1JNKFdFQl9DT01N
QU5EUykKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3Bh
dGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21h
aW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9i
amVjdHMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5z
cGVjdG9yIHsKLQotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KLSNpZiBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSNpZiBQTEFURk9STShXRUJfQ09NTUFORFMp
Ci1jbGFzcyBBbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOwotI2VuZGlmIC8vIFBM
QVRGT1JNKFdFQl9DT01NQU5EUykKLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKLQotI2lmIFBMQVRGT1JNKFdFQl9DT01NQU5EUykKLWNsYXNzIE5ldHdv
cmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQg
bG9hZFJlc291cmNlKEVycm9yU3RyaW5nJikgPSAwOwotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwg
fk5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7Ci19OwotI2VuZGlmIC8vIFBMQVRG
T1JNKFdFQl9DT01NQU5EUykKLQotI2lmIFBMQVRGT1JNKFdFQl9DT01NQU5EUykKLWNsYXNzIE5l
dHdvcmsxQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2Vu
ZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8TmV0d29yazFCYWNrZW5kRGlz
cGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgTmV0d29yazFCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXIqKTsKLSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBT
dHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5hbDsKLXByaXZh
dGU6Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpP
YmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCi1wdWJsaWM6Ci0gICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVy
bmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9h
bHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQotcHJpdmF0ZToKLSAg
ICBBbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKiBtX2FsdGVybmF0ZURpc3BhdGNo
ZXIgeyBudWxscHRyIH07Ci0jZW5kaWYKLXByaXZhdGU6Ci0gICAgTmV0d29yazFCYWNrZW5kRGlz
cGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYsIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyKik7Ci0gICAgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQgeyBu
dWxscHRyIH07Ci19OwotI2VuZGlmIC8vIFBMQVRGT1JNKFdFQl9DT01NQU5EUykKLQotfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMu
aAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1n
dWFyZHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgot
Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNp
bmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2lmIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQotI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlz
cGF0Y2hlcnMuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotI2lmIFBMQVRG
T1JNKFdFQl9DT01NQU5EUykKLU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+TmV0
d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KLSNlbmRpZiAvLyBQTEFURk9STShX
RUJfQ09NTUFORFMpCi0KLSNpZiBQTEFURk9STShXRUJfQ09NTUFORFMpCi1SZWY8TmV0d29yazFC
YWNrZW5kRGlzcGF0Y2hlcj4gTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEJhY2tl
bmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIqIGFnZW50KQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE5ldHdvcmsxQmFj
a2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIsIGFnZW50KSk7Ci19Ci0KLU5ldHdvcmsx
QmFja2VuZERpc3BhdGNoZXI6Ok5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3Bh
dGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxl
ciogYWdlbnQpCi0gICAgOiBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlz
cGF0Y2hlcikKLSAgICAsIG1fYWdlbnQoYWdlbnQpCi17Ci0gICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKCJOZXR3b3JrMSJfcywgdGhpcyk7Ci19Ci0K
LXZvaWQgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQs
IGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCi17Ci0g
ICAgUmVmPE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwotCi0gICAg
UmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVyczsKLSAgICBtZXNzYWdlLT5nZXRPYmplY3Qo
InBhcmFtcyJfcywgcGFyYW1ldGVycyk7Ci0KLSAgICBpZiAobWV0aG9kID09ICJsb2FkUmVzb3Vy
Y2UiKQotICAgICAgICBsb2FkUmVzb3VyY2UocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMp
KTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29s
RXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmsxLiIgKyBt
ZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7Ci19Ci0KLXZvaWQgTmV0d29yazFCYWNrZW5kRGlz
cGF0Y2hlcjo6bG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0
PiYmKQotewotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotICAg
IGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRj
aGVyLT5sb2FkUmVzb3VyY2UocmVxdWVzdElkKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNl
bmRpZgotCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVz
dWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2Uo
ZXJyb3IpOwotCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7
Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVy
cm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOwotfQot
I2VuZGlmIC8vIFBMQVRGT1JNKFdFQl9DT01NQU5EUykKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UK
LQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZh
bHVlcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5z
cGVjdG9yIHsKLQotY2xhc3MgRnJvbnRlbmRSb3V0ZXI7Ci0KLSNpZiBQTEFURk9STShXRUJfRVZF
TlRTKQotY2xhc3MgTmV0d29yazNGcm9udGVuZERpc3BhdGNoZXIgewotICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIE5ldHdvcmszRnJvbnRlbmREaXNwYXRjaGVyKEZy
b250ZW5kUm91dGVyJiBmcm9udGVuZFJvdXRlcikgOiBtX2Zyb250ZW5kUm91dGVyKGZyb250ZW5k
Um91dGVyKSB7IH0KLSAgICB2b2lkIHJlc291cmNlTG9hZGVkKCk7Ci1wcml2YXRlOgotICAgIEZy
b250ZW5kUm91dGVyJiBtX2Zyb250ZW5kUm91dGVyOwotfTsKLSNlbmRpZiAvLyBQTEFURk9STShX
RUJfRVZFTlRTKQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVz
dEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlz
cGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUt
ZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RG
cm9udGVuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFt
ZXNwYWNlIEluc3BlY3RvciB7Ci0KLSNpZiBQTEFURk9STShXRUJfRVZFTlRTKQotdm9pZCBOZXR3
b3JrM0Zyb250ZW5kRGlzcGF0Y2hlcjo6cmVzb3VyY2VMb2FkZWQoKQotewotICAgIFJlZjxKU09O
OjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29u
TWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJOZXR3b3JrMy5yZXNvdXJjZUxvYWRlZCJf
cyk7Ci0KLSAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09O
U3RyaW5nKCkpOwotfQotI2VuZGlmIC8vIFBMQVRGT1JNKFdFQl9FVkVOVFMpCi0KLX0gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJz
LmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3Vh
cmRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3By
YWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5
cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3Rv
ciB7Ci0KLQotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotLy8gRm9yd2FyZCBkZWNsYXJh
dGlvbnMuCi0jaWYgUExBVEZPUk0oV0VCX1RZUEVTKQotbmFtZXNwYWNlIE5ldHdvcmsyIHsKLWNs
YXNzIE5ldHdvcmtFcnJvcjsKLX0gLy8gTmV0d29yazIKLSNlbmRpZiAvLyBQTEFURk9STShXRUJf
VFlQRVMpCi0vLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCi0KLQotCi0KLSNpZiBQTEFU
Rk9STShXRUJfVFlQRVMpCi1uYW1lc3BhY2UgTmV0d29yazIgewotY2xhc3MgTmV0d29ya0Vycm9y
IDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewotcHVibGljOgotICAgIGVudW0gewotICAgICAg
ICBOb0ZpZWxkc1NldCA9IDAsCi0gICAgICAgIE1lc3NhZ2VTZXQgPSAxIDw8IDAsCi0gICAgICAg
IENvZGVTZXQgPSAxIDw8IDEsCi0gICAgICAgIEFsbEZpZWxkc1NldCA9IChNZXNzYWdlU2V0IHwg
Q29kZVNldCkKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8aW50IFNUQVRFPgotICAgIGNsYXNzIEJ1
aWxkZXIgewotICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVz
dWx0OwotCi0gICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4m
IGNhc3RTdGF0ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRf
Y2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAg
IEJ1aWxkZXIoUmVmPC8qTmV0d29ya0Vycm9yKi9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQotICAg
ICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRf
aW5fbm9uX2luaXRfc3RhdGUpOwotICAgICAgICB9Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBOZXR3
b3JrRXJyb3I7Ci0gICAgcHVibGljOgotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNZXNzYWdl
U2V0PiYgc2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTWVzc2FnZVNldCksIHByb3BlcnR5X21lc3Nh
Z2VfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibWVzc2Fn
ZSJfcywgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNZXNzYWdlU2V0Pigp
OwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvZGVTZXQ+JiBzZXRDb2Rl
KGludCB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIENvZGVTZXQpLCBwcm9wZXJ0eV9jb2RlX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXRJbnRlZ2VyKCJjb2RlIl9zLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPENvZGVTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBSZWY8TmV0d29ya0Vy
cm9yPiByZWxlYXNlKCkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RB
VEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKLSAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKHNpemVvZihOZXR3b3JrRXJyb3IpID09IHNpemVvZihKU09OOjpPYmplY3Qp
LCBjYW5ub3RfY2FzdCk7Ci0KLSAgICAgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25SZXN1
bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOwotICAgICAgICAgICAgYXV0byByZXN1bHQg
PSBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxOZXR3b3JrRXJyb3I+Kj4oJmpzb25SZXN1
bHQpKTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICB9OwotCi0g
ICAgLyoKLSAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6Ci0gICAgICogUmVmPE5ldHdvcmtF
cnJvcj4gcmVzdWx0ID0gTmV0d29ya0Vycm9yOjpjcmVhdGUoKQotICAgICAqICAgICAuc2V0TWVz
c2FnZSguLi4pCi0gICAgICogICAgIC5zZXRDb2RlKC4uLikKLSAgICAgKiAgICAgLnJlbGVhc2Uo
KTsKLSAgICAgKi8KLSAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpKTsKLSAgICB9Ci19OwotCi19IC8vIE5ldHdvcmsyCi0jZW5kaWYgLy8gUExBVEZPUk0o
V0VCX1RZUEVTKQotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotCi0jaW5jbHVkZSA8d3Rm
L09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLX0gLy8gbmFtZXNwYWNl
IFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbE9iamVjdHMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNr
ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVy
YXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRy
Lmg+Ci0KLUBwcm90b2NvbCBUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI7Ci0KLW5h
bWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLSNpZiBQTEFURk9STShXRUJfQ09NTUFORFMpCi1jbGFz
cyBPYmpDSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBB
bHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKLXB1YmxpYzoKLSAgICBPYmpDSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0
Y2hlcihpZDxUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9k
ZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KLSAgICB2b2lkIGxvYWRSZXNvdXJjZShsb25nIHJlcXVlc3RJ
ZCkgZmluYWw7Ci1wcml2YXRlOgotICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xOZXR3b3Jr
MURvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwotfTsKLSNlbmRpZiAvLyBQTEFURk9STShXRUJf
Q09NTUFORFMpCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgotLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNp
bXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSAiVGVz
dFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9y
IHsKLQotI2lmIFBMQVRGT1JNKFdFQl9DT01NQU5EUykKLXZvaWQgT2JqQ0luc3BlY3Rvck5ldHdv
cmsxQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZShsb25nIHJlcXVlc3RJZCkKLXsKLSAg
ICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IobG9hZFJlc291
cmNlV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlz
cGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazEubG9hZFJlc291cmNlJyB3YXMgbm90
IGZvdW5kIl9zKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJv
cnMoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBe
KE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQ
cm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBl
cnJvcik7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7
Ci0gICAgfTsKLQotICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57Ci0gICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRl
KCksIGZhbHNlKTsKLSAgICB9OwotCi0gICAgW21fZGVsZWdhdGUgbG9hZFJlc291cmNlV2l0aEVy
cm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNr
XTsKLX0KLQotI2VuZGlmIC8vIFBMQVRGT1JNKFdFQl9DT01NQU5EUykKLQotfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNo
ZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVh
dHVyZS1ndWFyZHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+Ci0KLV9fYXR0cmlidXRl
X18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25m
aWd1cmF0aW9uIDogTlNPYmplY3QKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4sIHNldHRl
cj1zZXROZXR3b3JrMUhhbmRsZXI6KSBpZDxUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRs
ZXI+IG5ldHdvcmsxSGFuZGxlcjsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgVGVz
dFByb3RvY29sTmV0d29yazNEb21haW5FdmVudERpc3BhdGNoZXIgKm5ldHdvcmszRXZlbnREaXNw
YXRjaGVyOwotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
bi5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1
cmUtZ3VhcmRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgotCi0jaW1wb3J0ICJUZXN0
UHJvdG9jb2xJbnRlcm5hbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNo
ZXJzLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2Vu
dC5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9s
bGVyLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5k
RGlzcGF0Y2hlcnMuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVycy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW1wbGVtZW50
YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVj
dG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci0gICAgaWQ8VGVzdFByb3RvY29sTmV0d29yazFE
b21haW5IYW5kbGVyPiBfbmV0d29yazFIYW5kbGVyOwotICAgIFRlc3RQcm90b2NvbE5ldHdvcmsz
RG9tYWluRXZlbnREaXNwYXRjaGVyICpfbmV0d29yazNFdmVudERpc3BhdGNoZXI7Ci19Ci0KLS0g
KGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29u
dHJvbGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYg
KCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAg
ICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZv
aWQpZGVhbGxvYwotewotICAgIFtfbmV0d29yazFIYW5kbGVyIHJlbGVhc2VdOwotICAgIFtfbmV0
d29yazNFdmVudERpc3BhdGNoZXIgcmVsZWFzZV07Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQot
Ci0tICh2b2lkKXNldE5ldHdvcmsxSGFuZGxlcjooaWQ8VGVzdFByb3RvY29sTmV0d29yazFEb21h
aW5IYW5kbGVyPiloYW5kbGVyCi17Ci0gICAgaWYgKGhhbmRsZXIgPT0gX25ldHdvcmsxSGFuZGxl
cikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgW19uZXR3b3JrMUhhbmRsZXIgcmVsZWFzZV07Ci0g
ICAgX25ldHdvcmsxSGFuZGxlciA9IFtoYW5kbGVyIHJldGFpbl07Ci0KLSAgICBhdXRvIGFsdGVy
bmF0ZURpc3BhdGNoZXIgPSBtYWtlVW5pcXVlPE9iakNJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmRE
aXNwYXRjaGVyPihoYW5kbGVyKTsKLSAgICBhdXRvIGFsdGVybmF0ZUFnZW50ID0gbWFrZVVuaXF1
ZTxBbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudDxOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyLCBB
bHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPj4oIk5ldHdvcmsxIl9zLCAqX2NvbnRy
b2xsZXIsIFdURk1vdmUoYWx0ZXJuYXRlRGlzcGF0Y2hlcikpOwotICAgIF9jb250cm9sbGVyLT5h
cHBlbmRFeHRyYUFnZW50KFdURk1vdmUoYWx0ZXJuYXRlQWdlbnQpKTsKLX0KLQotLSAoaWQ8VGVz
dFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyPiluZXR3b3JrMUhhbmRsZXIKLXsKLSAgICBy
ZXR1cm4gX25ldHdvcmsxSGFuZGxlcjsKLX0KLQotLSAoVGVzdFByb3RvY29sTmV0d29yazNEb21h
aW5FdmVudERpc3BhdGNoZXIgKiluZXR3b3JrM0V2ZW50RGlzcGF0Y2hlcgotewotICAgIGlmICgh
X25ldHdvcmszRXZlbnREaXNwYXRjaGVyKQotICAgICAgICBfbmV0d29yazNFdmVudERpc3BhdGNo
ZXIgPSBbW1Rlc3RQcm90b2NvbE5ldHdvcmszRG9tYWluRXZlbnREaXNwYXRjaGVyIGFsbG9jXSBp
bml0V2l0aENvbnRyb2xsZXI6X2NvbnRyb2xsZXJdOwotICAgIHJldHVybiBfbmV0d29yazNFdmVu
dERpc3BhdGNoZXI7Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENv
bmZpZ3VyYXRpb24ubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0
Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21h
aW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1w
b3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPHd0Zi9KU09OVmFs
dWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBU
ZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkV2ZW50RGlzcGF0Y2hlcgotewotICAgIEF1Z21lbnRh
YmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29u
dHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAg
ICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBfY29udHJvbGxl
ciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpcmVzb3VyY2VM
b2FkZWQKLXsKLSAgICBjb25zdCBGcm9udGVuZFJvdXRlciYgcm91dGVyID0gX2NvbnRyb2xsZXIt
PmZyb250ZW5kUm91dGVyKCk7Ci0KLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9
IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0
aG9kIl9zLCAiTmV0d29yazMucmVzb3VyY2VMb2FkZWQiX3MpOwotICAgIHJvdXRlci5zZW5kRXZl
bnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0
ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4K
LQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgotCi0KLUBj
bGFzcyBUZXN0UHJvdG9jb2xOZXR3b3JrMk5ldHdvcmtFcnJvcjsKLQotdHlwZWRlZiBOU19FTlVN
KE5TSW50ZWdlciwgVGVzdFByb3RvY29sUGxhdGZvcm0pIHsKLSAgICBUZXN0UHJvdG9jb2xQbGF0
Zm9ybUFsbCwKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWMsCi0gICAgVGVzdFByb3Rv
Y29sUGxhdGZvcm1JT1MsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUywKLX07Ci0KLQot
Ci0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBU
ZXN0UHJvdG9jb2xOZXR3b3JrMk5ldHdvcmtFcnJvciA6IFJXSVByb3RvY29sSlNPTk9iamVjdAot
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICos
IGlkPiAqKXBheWxvYWQ7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDoo
UldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKLS0gKGluc3RhbmNldHlwZSlpbml0
V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBjb2RlOihpbnQpY29kZTsKLS8qIHJlcXVp
cmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqbWVzc2FnZTsKLS8q
IHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCBjb2RlOwotQGVu
ZAotCi1AcHJvdG9jb2wgVGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyIDxOU09iamVj
dD4KLUBvcHRpb25hbAotLSAodm9pZClsb2FkUmVzb3VyY2VXaXRoRXJyb3JDYWxsYmFjazoodm9p
ZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lk
KF4pKHZvaWQpKXN1Y2Nlc3NDYWxsYmFjazsKLUBlbmQKLQotX19hdHRyaWJ1dGVfXygodmlzaWJp
bGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbE5ldHdvcmszRG9tYWlu
RXZlbnREaXNwYXRjaGVyIDogTlNPYmplY3QKLS0gKHZvaWQpcmVzb3VyY2VMb2FkZWQ7Ci1AZW5k
Ci0KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5
T2JqZWN0cy5oPgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29s
LmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgotI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0
IDx3dGYvSlNPTlZhbHVlcy5oPgotCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbE5ldHdvcmszRG9t
YWluRXZlbnREaXNwYXRjaGVyIChQcml2YXRlKQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29u
dHJvbGxlcjooSW5zcGVjdG9yOjpBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRy
b2xsZXI7Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1
YXJkcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNp
bXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29s
QXJyYXlDb252ZXJzaW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdGVtcGxhdGU8
dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgotT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9j
b2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2Nv
bFN0cmluZyhUZXN0UHJvdG9jb2xQbGF0Zm9ybSB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUp
IHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOgotICAgICAgICByZXR1cm4gImFs
bCJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzoKLSAgICAgICAgcmV0
dXJuICJnZW5lcmljIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1JT1M6Ci0gICAg
ICAgIHJldHVybiAiaW9zIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzoK
LSAgICAgICAgcmV0dXJuICJtYWNvcyJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGlu
ZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xQbGF0Zm9ybT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0
IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJhbGwiKQotICAgICAgICByZXR1
cm4gVGVzdFByb3RvY29sUGxhdGZvcm1BbGw7Ci0gICAgaWYgKHZhbHVlID09ICJnZW5lcmljIikK
LSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzsKLSAgICBpZiAodmFs
dWUgPT0gImlvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzsKLSAg
ICBpZiAodmFsdWUgPT0gIm1hY29zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRm
b3JtTWFjT1M7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotCi0KLX0gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVh
dHVyZS1ndWFyZHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLQotI2ltcG9ydCAi
VGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCi0jaW1w
b3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotCi11c2lu
ZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucyAoTmV0d29yazJEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlTmV0d29ya0Vycm9yOihU
ZXN0UHJvdG9jb2xOZXR3b3JrMk5ldHdvcmtFcnJvciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDoo
aWQpcGF5bG9hZDsKLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zIChOZXR3b3JrMkRvbWFpbikKLQotKyAodm9pZClfcGFyc2VOZXR3b3JrRXJyb3I6
KFRlc3RQcm90b2NvbE5ldHdvcmsyTmV0d29ya0Vycm9yICoqKW91dFZhbHVlIGZyb21QYXlsb2Fk
OihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2Fk
LCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xO
ZXR3b3JrMk5ldHdvcmtFcnJvciBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOwotfQot
Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0K
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAi
VGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJp
dmF0ZS5oPgotI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFs
dWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotQGltcGxlbWVudGF0aW9u
IFRlc3RQcm90b2NvbE5ldHdvcmsyTmV0d29ya0Vycm9yCi0KLS0gKGluc3RhbmNldHlwZSlpbml0
V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxv
YWQKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5p
bDsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtA
Im1lc3NhZ2UiXSwgQCJtZXNzYWdlIik7Ci0gICAgc2VsZi5tZXNzYWdlID0gcGF5bG9hZFtAIm1l
c3NhZ2UiXTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5
bG9hZFtAImNvZGUiXSwgQCJjb2RlIik7Ci0gICAgc2VsZi5jb2RlID0gW3BheWxvYWRbQCJjb2Rl
Il0gaW50ZWdlclZhbHVlXTsKLQotICAgIHJldHVybiBzZWxmOwotfQotLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9iamVjdAot
ewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmplY3QgdG9K
U09OT2JqZWN0XS5nZXQoKV0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgcmV0dXJuIHNl
bGY7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVz
c2FnZSBjb2RlOihpbnQpY29kZQotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQot
ICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9Q
Uk9QRVJUWShtZXNzYWdlLCBAIm1lc3NhZ2UiKTsKLQotICAgIHNlbGYubWVzc2FnZSA9IG1lc3Nh
Z2U7Ci0gICAgc2VsZi5jb2RlID0gY29kZTsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2
b2lkKXNldE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZQotewotICAgIFtzdXBlciBzZXRTdHJp
bmc6bWVzc2FnZSBmb3JLZXk6QCJtZXNzYWdlIl07Ci19Ci0KLS0gKE5TU3RyaW5nICopbWVzc2Fn
ZQotewotICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAibWVzc2FnZSJdOwotfQotCi0t
ICh2b2lkKXNldENvZGU6KGludCljb2RlCi17Ci0gICAgW3N1cGVyIHNldEludGVnZXI6Y29kZSBm
b3JLZXk6QCJjb2RlIl07Ci19Ci0KLS0gKGludCljb2RlCi17Ci0gICAgcmV0dXJuIFtzdXBlciBp
bnRlZ2VyRm9yS2V5OkAiY29kZSJdOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvc2FtZS10eXBlLWlkLWRpZmZlcmVu
dC1kb21haW4uanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFp
bi5qc29uLXJlc3VsdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTk0MDIxMTEzODIu
LjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3NhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpz
b24tcmVzdWx0CisrKyAvZGV2L251bGwKQEAgLTEsOTE0ICswLDAgQEAKLSMjIyBCZWdpbiBGaWxl
OiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0jIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tl
bmRDb21tYW5kcy5qcwotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNw
YXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlk
LWRpZmZlcmVudC1kb21haW4uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKLSNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0KLW5hbWVzcGFjZSBJ
bnNwZWN0b3IgewotCi1jbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6
Ci0gICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+
JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVy
KTsgfQotICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsg
cmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KLXByaXZhdGU6Ci0gICAgUmVmUHRy
PEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwotfTsKLQotCi0KLQotfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVS
TkFURV9ESVNQQVRDSEVSUykKLSMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNw
YXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRv
bWFpbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNw
cmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10eXBlZGVm
IFN0cmluZyBFcnJvclN0cmluZzsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMj
IEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRl
c3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
VGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2lu
Y2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotI2luY2x1
ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNlbmRpZgotCi1uYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5k
IEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
RnJvbnRlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
c2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90
b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgRnJv
bnRlbmRSb3V0ZXI7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBU
ZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmRE
aXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5
cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJv
bnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFj
ZSBJbnNwZWN0b3IgewotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxl
OiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbE9iamVjdHMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlw
ZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQot
bmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQot
Ci0KLS8vIFR5cGVkZWZzLgotbmFtZXNwYWNlIFJ1bnRpbWUgewotLyogVW5pcXVlIG9iamVjdCBp
ZGVudGlmaWVyLiAqLwotdHlwZWRlZiBTdHJpbmcgUmVtb3RlT2JqZWN0SWQ7Ci19IC8vIFJ1bnRp
bWUKLQotbmFtZXNwYWNlIFJ1bnRpbWUyIHsKLS8qIFVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4g
Ki8KLXR5cGVkZWYgU3RyaW5nIFJlbW90ZU9iamVjdElkOwotfSAvLyBSdW50aW1lMgotLy8gRW5k
IG9mIHR5cGVkZWZzLgotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0KLSNpbmNsdWRlIDx3dGYvT3B0
aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNw
ZWN0b3IgewotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJv
dG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sT2JqZWN0cy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmRE
aXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBl
LWlkLWRpZmZlcmVudC1kb21haW4uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRl
QmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi0KLQot
bmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmln
LmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1
ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLQotbmFtZXNwYWNlIElu
c3BlY3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbi5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
c2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29s
Lmg+Ci0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFj
ZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKLUBlbmQKLQotCi0jIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJh
dGlvbi5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2ltcG9ydCAiVGVz
dFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9B
bHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVn
bWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgotCi11c2luZyBuYW1lc3BhY2Ug
SW5zcGVjdG9yOwotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgot
ewotICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci19Ci0K
LS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9y
Q29udHJvbGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAg
aWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsK
LSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0g
KHZvaWQpZGVhbGxvYwotewotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotQGVuZAotCi0KLSMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29s
SW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0j
aW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwot
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlv
bi5oPgotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+Ci0K
LQotCi0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbFBsYXRmb3JtKSB7
Ci0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1BbGwsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1H
ZW5lcmljLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TLAotICAgIFRlc3RQcm90b2NvbFBs
YXRmb3JtTWFjT1MsCi19OwotCi0KLQotCi0KLQotCi0KLQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0
b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+Ci0KLSMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFs
LmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVy
ZW50LWRvbWFpbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9i
amVjdFByaXZhdGUuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVj
dG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotCi0KLQotIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1w
b3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+Ci0KLW5hbWVz
cGFjZSBJbnNwZWN0b3IgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+Ci1PcHRp
b25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVl
KTsKLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFBsYXRmb3Jt
IHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sUGxh
dGZvcm1BbGw6Ci0gICAgICAgIHJldHVybiAiYWxsIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29s
UGxhdGZvcm1HZW5lcmljOgotICAgICAgICByZXR1cm4gImdlbmVyaWMiX3M7Ci0gICAgY2FzZSBU
ZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzoKLSAgICAgICAgcmV0dXJuICJpb3MiX3M7Ci0gICAgY2Fz
ZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOgotICAgICAgICByZXR1cm4gIm1hY29zIl9zOwot
ICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFBsYXRm
b3JtPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAo
dmFsdWUgPT0gImFsbCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDsK
LSAgICBpZiAodmFsdWUgPT0gImdlbmVyaWMiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29s
UGxhdGZvcm1HZW5lcmljOwotICAgIGlmICh2YWx1ZSA9PSAiaW9zIikKLSAgICAgICAgcmV0dXJu
IFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOwotICAgIGlmICh2YWx1ZSA9PSAibWFjb3MiKQotICAg
ICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzsKLSAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwotfQotCi0KLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucy5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbFR5cGVQYXJzZXIuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpT
T05PYmplY3RQcml2YXRlLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbnRl
cmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChSdW50aW1lRG9tYWluKQotCi0rICh2
b2lkKV9wYXJzZVJlbW90ZU9iamVjdElkOihOU1N0cmluZyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9h
ZDooaWQpcGF5bG9hZDsKLQotQGVuZAotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMgKFJ1bnRpbWUyRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZVJlbW90ZU9iamVjdElkOihO
U1N0cmluZyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLQotQGVuZAotCi1A
aW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChSdW50aW1lRG9tYWlu
KQotCi0rICh2b2lkKV9wYXJzZVJlbW90ZU9iamVjdElkOihOU1N0cmluZyAqKilvdXRWYWx1ZSBm
cm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZ
UEUocGF5bG9hZCwgW05TU3RyaW5nIGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gKE5TU3RyaW5n
ICopcGF5bG9hZDsKLX0KLQotQGVuZAotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucyAoUnVudGltZTJEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlUmVtb3RlT2JqZWN0
SWQ6KE5TU3RyaW5nICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsK
LSAgICAqb3V0VmFsdWUgPSAoTlNTdHJpbmcgKilwYXlsb2FkOwotfQotCi1AZW5kCi0KLQotIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5o
IgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPFdl
Ykluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0jaW1wb3J0IDx3dGYv
QXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNw
YWNlIEluc3BlY3RvcjsKLQotCi0KLQotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlw
ZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5q
c29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9nZW5lcmljL2V4cGVjdGVkL3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uLXJl
c3VsdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGJkYjJkNDExOWYuLjAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL2V4cGVjdGVkL3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uLXJlc3Vs
dAorKysgL2Rldi9udWxsCkBAIC0xLDExMjQgKzAsMCBAQAotIyMjIEJlZ2luIEZpbGU6IEluc3Bl
Y3RvckJhY2tlbmRDb21tYW5kcy5qcwotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0jIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21t
YW5kcy5qcwotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVy
cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwt
dHlwZS1zZXR0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCi0jaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotCi1uYW1lc3BhY2UgSW5zcGVj
dG9yIHsKLQotY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAg
IHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRp
c3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0K
LSAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVy
biBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Ci1wcml2YXRlOgotICAgIFJlZlB0cjxCYWNr
ZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKLX07Ci0KLQotCi0KLX0gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgotCi0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCi0jIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hl
cnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJz
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdt
YSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXR5cGVkZWYgU3Ry
aW5nIEVycm9yU3RyaW5nOwotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5k
IEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJh
Y2tlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBz
aGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVz
dEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1
ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
LQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotI2luY2x1ZGUg
IlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZp
bGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJv
bnRlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hh
ZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9j
b2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEZyb250
ZW5kUm91dGVyOwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVz
dEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlz
cGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQt
b3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RGcm9udGVu
ZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9u
dGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNl
IEluc3BlY3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6
IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sT2JqZWN0cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQt
b3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQot
bmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQot
Ly8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCi1uYW1lc3BhY2UgUnVudGltZSB7Ci1jbGFzcyBLZXlQ
YXRoOwotfSAvLyBSdW50aW1lCi0vLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCi0KLQot
Ci0KLW5hbWVzcGFjZSBUZXN0SGVscGVycyB7Ci0KLVN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1
ZShpbnQgY29kZSk7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRFbnVtQ29uc3Rh
bnRWYWx1ZShUIGVudW1WYWx1ZSkKLXsKLSAgICByZXR1cm4gZ2V0RW51bUNvbnN0YW50VmFsdWUo
c3RhdGljX2Nhc3Q8aW50PihlbnVtVmFsdWUpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgVGVzdEhl
bHBlcnMKLQotbmFtZXNwYWNlIFJ1bnRpbWUgewotLyogS2V5IHBhdGguICovCi1jbGFzcyBLZXlQ
YXRoIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewotcHVibGljOgotICAgIC8vIE5hbWVkIGFm
dGVyIHByb3BlcnR5IG5hbWUgJ3R5cGUnIHdoaWxlIGdlbmVyYXRpbmcgS2V5UGF0aC4KLSAgICBl
bnVtIGNsYXNzIFR5cGUgewotICAgICAgICBOdWxsID0gMCwKLSAgICAgICAgU3RyaW5nID0gMSwK
LSAgICAgICAgQXJyYXkgPSAyLAotICAgIH07IC8vIGVudW0gY2xhc3MgVHlwZQotICAgIGVudW0g
ewotICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCi0gICAgICAgIFR5cGVTZXQgPSAxIDw8IDAsCi0g
ICAgICAgIEFsbEZpZWxkc1NldCA9IChUeXBlU2V0KQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTxp
bnQgU1RBVEU+Ci0gICAgY2xhc3MgQnVpbGRlciB7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVm
UHRyPEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7Ci0KLSAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+
IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMp
OwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcihSZWY8LypLZXlQYXRoKi9KU09OOjpPYmpl
Y3Q+JiYgb2JqZWN0KQotICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0
LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwotICAgICAgICB9Ci0gICAgICAg
IGZyaWVuZCBjbGFzcyBLZXlQYXRoOwotICAgIHB1YmxpYzoKLQotICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgVHlwZVNldD4mIHNldFR5cGUoVHlwZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFR5cGVTZXQpLCBwcm9wZXJ0eV90eXBlX2FscmVh
ZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInR5cGUiX3MsIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSh2YWx1ZSkp
OwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUeXBlU2V0PigpOwotICAgICAgICB9Ci0K
LSAgICAgICAgUmVmPEtleVBhdGg+IHJlbGVhc2UoKQotICAgICAgICB7Ci0gICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkp
OwotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEtleVBhdGgpID09IHNpemVvZihK
U09OOjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7Ci0KLSAgICAgICAgICAgIFJlZjxKU09OOjpPYmpl
Y3Q+IGpzb25SZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOwotICAgICAgICAgICAg
YXV0byByZXN1bHQgPSBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxLZXlQYXRoPio+KCZq
c29uUmVzdWx0KSk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAg
fTsKLQotICAgIC8qCi0gICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgotICAgICAqIFJlZjxL
ZXlQYXRoPiByZXN1bHQgPSBLZXlQYXRoOjpjcmVhdGUoKQotICAgICAqICAgICAuc2V0VHlwZSgu
Li4pCi0gICAgICogICAgIC5yZWxlYXNlKCk7Ci0gICAgICovCi0gICAgc3RhdGljIEJ1aWxkZXI8
Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0Zp
ZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRT
dHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEpTT046Ok9iamVjdEJh
c2U6OnNldFN0cmluZygic3RyaW5nIl9zLCB2YWx1ZSk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRB
cnJheShSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiB2YWx1ZSkKLSAgICB7Ci0gICAgICAg
IEpTT046Ok9iamVjdEJhc2U6OnNldEFycmF5KCJhcnJheSJfcywgV1RGTW92ZSh2YWx1ZSkpOwot
ICAgIH0KLX07Ci0KLX0gLy8gUnVudGltZQotCi0KLQotbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsK
LQotdGVtcGxhdGU8dHlwZW5hbWUgUHJvdG9jb2xFbnVtVHlwZT4KLU9wdGlvbmFsPFByb3RvY29s
RW51bVR5cGU+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZyhjb25zdCBTdHJpbmcmKTsKLQotLy8g
RW51bXMgaW4gdGhlICdSdW50aW1lJyBEb21haW4KLXRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6OlR5cGU+IHBhcnNlRW51bVZhbHVlRnJv
bVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlPihjb25z
dCBTdHJpbmcmKTsKLQotfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKLQotfSAvLyBuYW1lc3Bh
Y2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbE9iamVjdHMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0
cy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25h
bC10eXBlLXNldHRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0
cy5oIgotCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotbmFtZXNwYWNlIFByb3RvY29sIHsK
LQotbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVu
dW1fY29uc3RhbnRfdmFsdWVzW10gPSB7Ci0gICAgIm51bGwiLAotICAgICJzdHJpbmciLAotICAg
ICJhcnJheSIsCi19OwotCi1TdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsK
LSAgICByZXR1cm4gZW51bV9jb25zdGFudF92YWx1ZXNbY29kZV07Ci19Ci0KLS8vIEVudW1zIGlu
IHRoZSAnUnVudGltZScgRG9tYWluCi10ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlBy
b3RvY29sOjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8
SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZT4oY29uc3QgU3RyaW5n
JiBwcm90b2NvbFN0cmluZykKLXsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFs
dWVzW10gPSB7Ci0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6
S2V5UGF0aDo6VHlwZTo6TnVsbCwKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29s
OjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlOjpTdHJpbmcsCi0gICAgICAgIChzaXplX3QpSW5zcGVj
dG9yOjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZTo6QXJyYXksCi0gICAgfTsKLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDM7ICsraSkKLSAgICAgICAgaWYgKHByb3RvY29sU3Ry
aW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAgICAg
ICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZSlj
b25zdGFudFZhbHVlc1tpXTsKLQotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLQotfSAv
LyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0K
LX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9i
amVjdHMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hl
cnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFs
LXR5cGUtc2V0dGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5k
RGlzcGF0Y2hlcnMuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLQotCi1uYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmlnLmgiCi0j
aW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgIlRl
c3RQcm90b2NvbEludGVybmFsLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3Rv
ciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbi5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93
ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgot
Ci1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVz
dFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbENvbmZpZ3VyYXRpb24ubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBz
aGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9u
LmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW1wb3J0ICJUZXN0UHJv
dG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVy
bmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50
YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNw
ZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCi17Ci0g
ICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKLX0KLQotLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250
cm9sbGVyKiljb250cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAo
IXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIpOwotICAg
IF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9p
ZClkZWFsbG9jCi17Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi1AZW5kCi0KLQotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50
ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1w
b3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0K
LSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBzaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24u
aD4KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgotCi0K
LUBjbGFzcyBUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aDsKLQotdHlwZWRlZiBOU19FTlVNKE5T
SW50ZWdlciwgVGVzdFByb3RvY29sUGxhdGZvcm0pIHsKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9y
bUFsbCwKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWMsCi0gICAgVGVzdFByb3RvY29s
UGxhdGZvcm1JT1MsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUywKLX07Ci0KLQotdHlw
ZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlKSB7
Ci0gICAgVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlTnVsbCwKLSAgICBUZXN0UHJvdG9j
b2xSdW50aW1lS2V5UGF0aFR5cGVTdHJpbmcsCi0gICAgVGVzdFByb3RvY29sUnVudGltZUtleVBh
dGhUeXBlQXJyYXksCi19OwotCi0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0
IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aCA6IFJXSVByb3RvY29s
SlNPTk9iamVjdAotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5
PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQ7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90
b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKLS0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aFR5cGU6KFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZSl0eXBl
OwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgVGVzdFByb3Rv
Y29sUnVudGltZUtleVBhdGhUeXBlIHR5cGU7Ci0vKiBvcHRpb25hbCAqLyBAcHJvcGVydHkgKG5v
bmF0b21pYywgY29weSkgTlNTdHJpbmcgKnN0cmluZzsKLS8qIG9wdGlvbmFsICovIEBwcm9wZXJ0
eSAobm9uYXRvbWljLCBjb3B5KSBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmFycmF5OwotQGVuZAot
Ci0KLQotCi0KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRp
YmlsaXR5T2JqZWN0cy5oPgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29s
LmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgotI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0
IDx3dGYvSlNPTlZhbHVlcy5oPgotCi0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbElu
dGVybmFsLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5o
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlw
ZS1zZXR0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJv
dG9jb2xBcnJheUNvbnZlcnNpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+Ci1PcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Q
cm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKLQotaW5saW5lIFN0cmluZyB0b1By
b3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFBsYXRmb3JtIHZhbHVlKQotewotICAgIHN3aXRjaCh2
YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1BbGw6Ci0gICAgICAgIHJldHVy
biAiYWxsIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOgotICAgICAg
ICByZXR1cm4gImdlbmVyaWMiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzoK
LSAgICAgICAgcmV0dXJuICJpb3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1h
Y09TOgotICAgICAgICByZXR1cm4gIm1hY29zIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8Pgot
aW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFBsYXRmb3JtPiBmcm9tUHJvdG9jb2xTdHJpbmco
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gImFsbCIpCi0gICAgICAg
IHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDsKLSAgICBpZiAodmFsdWUgPT0gImdlbmVy
aWMiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOwotICAgIGlm
ICh2YWx1ZSA9PSAiaW9zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9T
OwotICAgIGlmICh2YWx1ZSA9PSAibWFjb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29s
UGxhdGZvcm1NYWNPUzsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi0KLWlubGluZSBT
dHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGUgdmFs
dWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xSdW50aW1l
S2V5UGF0aFR5cGVOdWxsOgotICAgICAgICByZXR1cm4gIm51bGwiX3M7Ci0gICAgY2FzZSBUZXN0
UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGVTdHJpbmc6Ci0gICAgICAgIHJldHVybiAic3RyaW5n
Il9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlQXJyYXk6Ci0gICAg
ICAgIHJldHVybiAiYXJyYXkiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0
aW9uYWw8VGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmco
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gIm51bGwiKQotICAgICAg
ICByZXR1cm4gVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlTnVsbDsKLSAgICBpZiAodmFs
dWUgPT0gInN0cmluZyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0
aFR5cGVTdHJpbmc7Ci0gICAgaWYgKHZhbHVlID09ICJhcnJheSIpCi0gICAgICAgIHJldHVybiBU
ZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGVBcnJheTsKLSAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hh
ZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
LmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlw
ZVBhcnNlci5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFBy
aXZhdGUuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGludGVyZmFjZSBUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFJ1bnRpbWVEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNl
S2V5UGF0aDooVGVzdFByb3RvY29sUnVudGltZUtleVBhdGggKiopb3V0VmFsdWUgZnJvbVBheWxv
YWQ6KGlkKXBheWxvYWQ7Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucyAoUnVudGltZURvbWFpbikKLQotKyAodm9pZClfcGFyc2VLZXlQYXRoOihU
ZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aCAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5
bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGlj
dGlvbmFyeSBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sUnVudGltZUtl
eVBhdGggYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKLX0KLQotQGVuZAotCi0KLSMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFs
LmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8
V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLSNpbXBvcnQgPHd0
Zi9Bc3NlcnRpb25zLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1l
c3BhY2UgSW5zcGVjdG9yOwotCi0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xSdW50aW1l
S2V5UGF0aAotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGlj
dGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtz
dXBlciBpbml0XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBUSFJPV19FWENFUFRJT05f
Rk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJ0eXBlIl0sIEAidHlwZSIpOwotICAgIE9w
dGlvbmFsPFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZT4gdHlwZSA9IGZyb21Qcm90b2Nv
bFN0cmluZzxUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGU+KHBheWxvYWRbQCJ0eXBlIl0p
OwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX0VOVU1fVkFMVUUodHlwZSwgQCJ0eXBlIik7
Ci0gICAgc2VsZi50eXBlID0gdHlwZS52YWx1ZSgpOwotCi0gICAgc2VsZi5zdHJpbmcgPSBwYXls
b2FkW0Aic3RyaW5nIl07Ci0KLSAgICBzZWxmLmFycmF5ID0gcGF5bG9hZFtAImFycmF5Il07Ci0K
LSAgICByZXR1cm4gc2VsZjsKLX0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2Jq
ZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilvYmplY3QKLXsKLSAgICBpZiAoIShzZWxmID0g
W3N1cGVyIGluaXRXaXRoSlNPTk9iamVjdDpbb2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0KCldKSkK
LSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhUeXBlOihUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGUpdHlwZQot
ewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwot
Ci0gICAgc2VsZi50eXBlID0gdHlwZTsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lk
KXNldFR5cGU6KFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZSl0eXBlCi17Ci0gICAgW3N1
cGVyIHNldFN0cmluZzp0b1Byb3RvY29sU3RyaW5nKHR5cGUpIGZvcktleTpAInR5cGUiXTsKLX0K
LQotLSAoVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlKXR5cGUKLXsKLSAgICByZXR1cm4g
ZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZT4oW3N1cGVy
IHN0cmluZ0ZvcktleTpAInR5cGUiXSkudmFsdWUoKTsKLX0KLQotLSAodm9pZClzZXRTdHJpbmc6
KE5TU3RyaW5nICopc3RyaW5nCi17Ci0gICAgW3N1cGVyIHNldFN0cmluZzpzdHJpbmcgZm9yS2V5
OkAic3RyaW5nIl07Ci19Ci0KLS0gKE5TU3RyaW5nICopc3RyaW5nCi17Ci0gICAgcmV0dXJuIFtz
dXBlciBzdHJpbmdGb3JLZXk6QCJzdHJpbmciXTsKLX0KLQotLSAodm9pZClzZXRBcnJheTooTlNB
cnJheS8qPE5TU3RyaW5nPiovICopYXJyYXkKLXsKLSAgICBbc3VwZXIgc2V0SlNPTkFycmF5OnRv
SlNPTlN0cmluZ0FycmF5KGFycmF5KSBmb3JLZXk6QCJhcnJheSJdOwotfQotCi0tIChOU0FycmF5
Lyo8TlNTdHJpbmc+Ki8gKilhcnJheQotewotICAgIHJldHVybiB0b09iakNTdHJpbmdBcnJheShb
c3VwZXIgSlNPTkFycmF5Rm9yS2V5OkAiYXJyYXkiXSk7Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9zaG91bGQtc3Ry
aXAtY29tbWVudHMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9zaG91bGQtc3RyaXAtY29tbWVudHMuanNv
bi1yZXN1bHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhMWZiN2Q0ZjlkLi4wMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZ2VuZXJpYy9leHBlY3RlZC9zaG91bGQtc3RyaXAtY29tbWVudHMuanNvbi1yZXN1bHQKKysr
IC9kZXYvbnVsbApAQCAtMSw4NzAgKzAsMCBAQAotIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJh
Y2tlbmRDb21tYW5kcy5qcwotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNob3Vs
ZC1zdHJpcC1jb21tZW50cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0jIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNp
ZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQotI2luY2x1ZGUgIlRl
c3RQcm90b2NvbFR5cGVzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9u
dGVuZFJvdXRlci5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgQWx0ZXJuYXRl
QmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNo
ZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlz
cGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KLSAgICBCYWNrZW5kRGlzcGF0Y2hlciog
YmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdl
dCgpOyB9Ci1wcml2YXRlOgotICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5k
RGlzcGF0Y2hlcjsKLX07Ci0KLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jZW5k
aWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jIyMgRW5kIEZp
bGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xP
YmplY3RzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIElu
c3BlY3RvciB7Ci0KLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCi0KLQotfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAot
Ci0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaG91bGQtc3RyaXAtY29tbWVudHMuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZh
bHVlcy5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENI
RVJTKQotI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNlbmRp
ZgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgotCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0
UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNz
IEZyb250ZW5kUm91dGVyOwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmls
ZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250
ZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hv
dWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RGcm9udGVuZERp
c3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVu
ZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIElu
c3BlY3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRl
c3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
T2JqZWN0cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlw
LWNvbW1lbnRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90
b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFtZXNwYWNlIElu
c3BlY3RvciB7Ci0KLQotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotCi0KLQotCi0KLQot
fSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sT2JqZWN0cy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaG91
bGQtc3RyaXAtY29tbWVudHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2Jq
ZWN0cy5oIgotCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotbmFtZXNwYWNlIFByb3RvY29s
IHsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHNob3VsZC1zdHJpcC1jb21tZW50cy5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbmNsdWRlIDx3dGYv
UmV0YWluUHRyLmg+Ci0KLQotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi19IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0
Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJz
Lm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlwLWNvbW1l
bnRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2lt
cG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMu
aCIKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW5jbHVkZSAiVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLQot
bmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90
b2NvbC5oPgotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRl
cmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0Ci1AZW5kCi0KLQotIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBzaG91bGQtc3RyaXAtY29tbWVudHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9u
LmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW1wb3J0ICJUZXN0UHJv
dG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVy
bmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50
YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNw
ZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCi17Ci0g
ICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKLX0KLQotLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250
cm9sbGVyKiljb250cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAo
IXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIpOwotICAg
IF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9p
ZClkZWFsbG9jCi17Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi1AZW5kCi0KLQotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIK
LQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDx3dGYv
SlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLSMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaG91bGQt
c3RyaXAtY29tbWVudHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2ltcG9ydCA8V2Vi
SW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgotCi0KLQotCi10eXBlZGVmIE5TX0VO
VU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xQbGF0Zm9ybSkgewotICAgIFRlc3RQcm90b2NvbFBs
YXRmb3JtQWxsLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYywKLSAgICBUZXN0UHJv
dG9jb2xQbGF0Zm9ybUlPUywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TLAotfTsKLQot
Ci0KLQotCi0KLQotCi0KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRD
b21wYXRpYmlsaXR5T2JqZWN0cy5oPgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgi
Ci0jaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgotI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDx3
dGYvSlNPTlZhbHVlcy5oPgotCi0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVy
bmFsLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAi
VGVzdFByb3RvY29sLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNv
bnZlcnNpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBPYmpDRW51bVR5cGU+Ci1PcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmlu
Zyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5n
KFRlc3RQcm90b2NvbFBsYXRmb3JtIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAg
IGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1BbGw6Ci0gICAgICAgIHJldHVybiAiYWxsIl9zOwot
ICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOgotICAgICAgICByZXR1cm4gImdl
bmVyaWMiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzoKLSAgICAgICAgcmV0
dXJuICJpb3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOgotICAgICAg
ICByZXR1cm4gIm1hY29zIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlv
bmFsPFRlc3RQcm90b2NvbFBsYXRmb3JtPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5n
JiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gImFsbCIpCi0gICAgICAgIHJldHVybiBUZXN0
UHJvdG9jb2xQbGF0Zm9ybUFsbDsKLSAgICBpZiAodmFsdWUgPT0gImdlbmVyaWMiKQotICAgICAg
ICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOwotICAgIGlmICh2YWx1ZSA9PSAi
aW9zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOwotICAgIGlmICh2
YWx1ZSA9PSAibWFjb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1NYWNP
UzsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAi
VGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3Rv
Y29sSlNPTk9iamVjdFByaXZhdGUuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQot
Ci0KLQotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHNob3VsZC1zdHJpcC1jb21tZW50cy5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVy
bmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9y
dCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLSNpbXBvcnQg
PHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBu
YW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMu
bW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUt
dHlwZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRp
dmUtdHlwZS5qc29uLXJlc3VsdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjU2NjYz
NzljYTcuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1w
cmltaXRpdmUtdHlwZS5qc29uLXJlc3VsdAorKysgL2Rldi9udWxsCkBAIC0xLDg5MSArMCwwIEBA
Ci0jIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2
ZS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLSMj
IyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9u
Y2UKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi0jaW5j
bHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckZyb250ZW5kUm91dGVyLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNrZW5k
RGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2Jh
Y2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQotICAgIEJhY2tlbmREaXNw
YXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3Bh
dGNoZXIuZ2V0KCk7IH0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBt
X2JhY2tlbmREaXNwYXRjaGVyOwotfTsKLQotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
Ci0KLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSMj
IyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UK
LQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdHlwZWRlZiBTdHJpbmcgRXJy
b3JTdHJpbmc7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTog
VGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERp
c3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVj
bGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJU
ZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5j
bHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jaW5jbHVk
ZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgotI2VuZGlmCi0KLW5hbWVzcGFj
ZSBJbnNwZWN0b3IgewotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQg
RmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RG
cm9udGVuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0
eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUg
IlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQot
Y2xhc3MgRnJvbnRlbmRSb3V0ZXI7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVu
ZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgotLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UK
LQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNp
bmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0K
LW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLQotCi0KLQotLy8gVHlwZWRlZnMuCi1uYW1lc3BhY2Ug
UnVudGltZSB7Ci0vKiBVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIuICovCi10eXBlZGVmIGludCBS
ZW1vdGVPYmplY3RJZDsKLX0gLy8gUnVudGltZQotLy8gRW5kIG9mIHR5cGVkZWZzLgotCi0KLQot
fSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sT2JqZWN0cy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBl
LWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQot
bmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVj
dHMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMu
aAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxp
YXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLQotCi1u
YW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBl
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9y
dCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIK
LQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW5jbHVkZSAiVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLQotbmFt
ZXNwYWNlIEluc3BlY3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8V2ViSW5z
cGVjdG9yL1Rlc3RQcm90b2NvbC5oPgotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVm
YXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0
Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLQot
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZl
LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0j
aW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90
b2NvbEludGVybmFsLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMu
aCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+
Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIu
aD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNw
YXRjaGVycy5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXJzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlv
biBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCi17Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JD
b250cm9sbGVyKiBfY29udHJvbGxlcjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29u
dHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCi17Ci0g
ICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBu
aWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIpOwotICAgIF9jb250cm9sbGVyID0gY29udHJvbGxl
cjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgW3N1cGVy
IGRlYWxsb2NdOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25m
aWd1cmF0aW9uLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNo
ZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlv
bi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2lt
cG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDx3dGYvSlNPTlZh
bHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLSMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0
aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQot
I2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgotCi0KLQotCi10
eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xQbGF0Zm9ybSkgewotICAgIFRl
c3RQcm90b2NvbFBsYXRmb3JtQWxsLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYywK
LSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1h
Y09TLAotfTsKLQotCi0KLQotCi0KLQotCi0KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVBy
b3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXBy
aW1pdGl2ZS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09O
T2JqZWN0UHJpdmF0ZS5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNw
ZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi0KLQotCi0j
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3Rv
Y29sLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25z
Lmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51
bVR5cGU+Ci1PcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBT
dHJpbmcmIHZhbHVlKTsKLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90
b2NvbFBsYXRmb3JtIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVz
dFByb3RvY29sUGxhdGZvcm1BbGw6Ci0gICAgICAgIHJldHVybiAiYWxsIl9zOwotICAgIGNhc2Ug
VGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOgotICAgICAgICByZXR1cm4gImdlbmVyaWMiX3M7
Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzoKLSAgICAgICAgcmV0dXJuICJpb3Mi
X3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOgotICAgICAgICByZXR1cm4g
Im1hY29zIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQ
cm90b2NvbFBsYXRmb3JtPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkK
LXsKLSAgICBpZiAodmFsdWUgPT0gImFsbCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQ
bGF0Zm9ybUFsbDsKLSAgICBpZiAodmFsdWUgPT0gImdlbmVyaWMiKQotICAgICAgICByZXR1cm4g
VGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOwotICAgIGlmICh2YWx1ZSA9PSAiaW9zIikKLSAg
ICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOwotICAgIGlmICh2YWx1ZSA9PSAi
bWFjb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzsKLSAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0K
LSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQg
IlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wu
aCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKLSNpbXBvcnQgPFdlYkluc3Bl
Y3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJ
bnNwZWN0b3I7Ci0KLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChSdW50
aW1lRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZVJlbW90ZU9iamVjdElkOihOU051bWJlciAqKilv
dXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLQotQGVuZAotCi1AaW1wbGVtZW50YXRp
b24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChSdW50aW1lRG9tYWluKQotCi0rICh2b2lk
KV9wYXJzZVJlbW90ZU9iamVjdElkOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDoo
aWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwg
W05TTnVtYmVyIGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gKE5TTnVtYmVyICopcGF5bG9hZDsK
LX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
Lm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUt
dHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNp
bXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9i
amVjdFByaXZhdGUuaD4KLSNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW1wb3J0IDx3dGYv
SlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLQotCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC90eXBlLWRl
Y2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9u
LWFycmF5LXR5cGUuanNvbi1yZXN1bHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0
ZTVjN2U0MDkxLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFycmF5
LXR5cGUuanNvbi1yZXN1bHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMDczICswLDAgQEAKLSMjIyBC
ZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0vLyBEZWJ1Z2dlcgotSW5zcGVj
dG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiRGVidWdnZXIiLCBudWxsKTsKLUluc3BlY3RvckJh
Y2tlbmQucmVnaXN0ZXJFbnVtKCJEZWJ1Z2dlci5SZWFzb24iLCB7RGllZDogIkRpZWQiLCBGYWlu
dGVkOiAiRmFpbnRlZCIsIEh1bmdyeTogIkh1bmdyeSJ9KTsKLUluc3BlY3RvckJhY2tlbmQuYWN0
aXZhdGVEb21haW4oIkRlYnVnZ2VyIiwgbnVsbCk7Ci0jIyMgRW5kIEZpbGU6IEluc3BlY3RvckJh
Y2tlbmRDb21tYW5kcy5qcwotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmRE
aXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNs
YXJhdGlvbi1hcnJheS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCi0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotCi1uYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKLQotY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGlj
OgotICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVy
PiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hl
cik7IH0KLSAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7
IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Ci1wcml2YXRlOgotICAgIFJlZlB0
cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKLX07Ci0KLQotCi0KLX0g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCi0jIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlz
cGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10
eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3By
YWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXR5cGVkZWYg
U3RyaW5nIEVycm9yU3RyaW5nOwotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMg
RW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVz
dEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1
ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
LQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotI2luY2x1ZGUg
IlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZp
bGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJv
bnRlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlw
ZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xP
YmplY3RzLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEZyb250ZW5k
Um91dGVyOwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEZy
b250ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0
Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJh
dGlvbi1hcnJheS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3Bh
dGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJv
dXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3Bl
Y3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RG
cm9udGVuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2Jq
ZWN0cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlv
bi1hcnJheS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQ
cm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFtZXNwYWNl
IEluc3BlY3RvciB7Ci0KLQotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotLy8gRm9yd2Fy
ZCBkZWNsYXJhdGlvbnMuCi1uYW1lc3BhY2UgRGVidWdnZXIgewotZW51bSBjbGFzcyBSZWFzb247
Ci19IC8vIERlYnVnZ2VyCi0vLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCi0KLQotLy8g
VHlwZWRlZnMuCi1uYW1lc3BhY2UgRGVidWdnZXIgewotdHlwZWRlZiBpbnQgQnJlYWtwb2ludElk
OwotfSAvLyBEZWJ1Z2dlcgotCi1uYW1lc3BhY2UgUnVudGltZSB7Ci10eXBlZGVmIGludCBPYmpl
Y3RJZDsKLXR5cGVkZWYgSlNPTjo6QXJyYXlPZjxpbnQ+IEx1Y2t5TnVtYmVyczsKLXR5cGVkZWYg
SlNPTjo6QXJyYXlPZjxTdHJpbmc+IEJhYnlOYW1lczsKLXR5cGVkZWYgSlNPTjo6QXJyYXlPZjxp
bnQ+IE5ld09iamVjdHM7Ci10eXBlZGVmIEpTT046OkFycmF5T2Y8aW50PiBPbGRPYmplY3RzOwot
dHlwZWRlZiBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFz
b24+IFN0b3BSZWFzb25zOwotfSAvLyBSdW50aW1lCi0vLyBFbmQgb2YgdHlwZWRlZnMuCi0KLW5h
bWVzcGFjZSBUZXN0SGVscGVycyB7Ci0KLVN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQg
Y29kZSk7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1
ZShUIGVudW1WYWx1ZSkKLXsKLSAgICByZXR1cm4gZ2V0RW51bUNvbnN0YW50VmFsdWUoc3RhdGlj
X2Nhc3Q8aW50PihlbnVtVmFsdWUpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMK
LQotbmFtZXNwYWNlIERlYnVnZ2VyIHsKLS8qICAqLwotZW51bSBjbGFzcyBSZWFzb24gewotICAg
IERpZWQgPSAwLAotICAgIEZhaW50ZWQgPSAxLAotICAgIEh1bmdyeSA9IDIsCi19OyAvLyBlbnVt
IGNsYXNzIFJlYXNvbgotfSAvLyBEZWJ1Z2dlcgotCi0KLQotbmFtZXNwYWNlIFRlc3RIZWxwZXJz
IHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgUHJvdG9jb2xFbnVtVHlwZT4KLU9wdGlvbmFsPFByb3Rv
Y29sRW51bVR5cGU+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZyhjb25zdCBTdHJpbmcmKTsKLQot
Ly8gRW51bXMgaW4gdGhlICdEZWJ1Z2dlcicgRG9tYWluCi10ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJ
bnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uPiBwYXJzZUVudW1WYWx1ZUZyb21T
dHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbj4oY29uc3QgU3RyaW5n
Jik7Ci0KLX0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCi0KLX0gLy8gbmFtZXNwYWNlIFByb3Rv
Y29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi1uYW1lc3BhY2UgV1RGIHsKLQotdGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwotCi0vLyBIYXNoIGRlY2xhcmF0
aW9ucyBpbiB0aGUgJ0RlYnVnZ2VyJyBEb21haW4KLXRlbXBsYXRlPD4KLXN0cnVjdCBEZWZhdWx0
SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uPiB7Ci0gICAgdHlwZWRl
ZiBJbnRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb24+IEhhc2g7Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBXVEYKLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0
cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0KLSNpbmNsdWRlIDx3
dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFj
ZSBJbnNwZWN0b3IgewotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi1uYW1lc3BhY2UgVGVzdEhl
bHBlcnMgewotCi1zdGF0aWMgY29uc3QgY2hhciogY29uc3QgZW51bV9jb25zdGFudF92YWx1ZXNb
XSA9IHsKLSAgICAiRGllZCIsCi0gICAgIkZhaW50ZWQiLAotICAgICJIdW5ncnkiLAotfTsKLQot
U3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7Ci0gICAgcmV0dXJuIGVudW1f
Y29uc3RhbnRfdmFsdWVzW2NvZGVdOwotfQotCi0vLyBFbnVtcyBpbiB0aGUgJ0RlYnVnZ2VyJyBE
b21haW4KLXRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2Vy
OjpSZWFzb24+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpE
ZWJ1Z2dlcjo6UmVhc29uPihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQotewotICAgIHN0
YXRpYyBjb25zdCBzaXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsKLSAgICAgICAgKHNpemVfdClJ
bnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uOjpEaWVkLAotICAgICAgICAoc2l6
ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb246OkZhaW50ZWQsCi0gICAg
ICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbjo6SHVuZ3J5
LAotICAgIH07Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAzOyArK2kpCi0gICAgICAgIGlm
IChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tp
XV0pCi0gICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpS
ZWFzb24pY29uc3RhbnRWYWx1ZXNbaV07Ci0KLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQot
Ci0KLX0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCi0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90
b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xPYmplY3RzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERp
c3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xh
cmF0aW9uLWFycmF5LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXJzLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi0KLQotbmFt
ZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgot
I2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0
b3IgewotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24uaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUt
ZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KLQot
X19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xDb25maWd1cmF0aW9uLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlw
ZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgot
Ci0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29s
QmFja2VuZERpc3BhdGNoZXJzLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVE
aXNwYXRjaGFibGVBZ2VudC5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJ
bnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9y
OwotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgotewotICAgIEF1
Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci19Ci0KLS0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxl
ciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxm
KQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBfY29u
dHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVh
bGxvYwotewotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgi
Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8d3Rm
L0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0jIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1k
ZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLSNpbXBv
cnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KLQotCi0KLQotdHlwZWRl
ZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sUGxhdGZvcm0pIHsKLSAgICBUZXN0UHJv
dG9jb2xQbGF0Zm9ybUFsbCwKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWMsCi0gICAg
VGVzdFByb3RvY29sUGxhdGZvcm1JT1MsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUywK
LX07Ci0KLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGVidWdnZXJS
ZWFzb24pIHsKLSAgICBUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbkRpZWQsCi0gICAgVGVzdFBy
b3RvY29sRGVidWdnZXJSZWFzb25GYWludGVkLAotICAgIFRlc3RQcm90b2NvbERlYnVnZ2VyUmVh
c29uSHVuZ3J5LAotfTsKLQotCi0KLQotCi0KLQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJ
UHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+Ci0KLSMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5
cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1w
b3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2
YXRlLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRy
b2xsZXIuaD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLQotCi0KLSMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBl
LWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgPFdlYklu
c3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KLQotbmFtZXNwYWNlIEluc3Bl
Y3RvciB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KLU9wdGlvbmFsPE9iakNF
bnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOwotCi1pbmxp
bmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sUGxhdGZvcm0gdmFsdWUpCi17
Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDoK
LSAgICAgICAgcmV0dXJuICJhbGwiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdl
bmVyaWM6Ci0gICAgICAgIHJldHVybiAiZ2VuZXJpYyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2Nv
bFBsYXRmb3JtSU9TOgotICAgICAgICByZXR1cm4gImlvcyJfczsKLSAgICBjYXNlIFRlc3RQcm90
b2NvbFBsYXRmb3JtTWFjT1M6Ci0gICAgICAgIHJldHVybiAibWFjb3MiX3M7Ci0gICAgfQotfQot
Ci10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sUGxhdGZvcm0+IGZyb21Q
cm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAi
YWxsIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOwotICAgIGlmICh2
YWx1ZSA9PSAiZ2VuZXJpYyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdl
bmVyaWM7Ci0gICAgaWYgKHZhbHVlID09ICJpb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3Rv
Y29sUGxhdGZvcm1JT1M7Ci0gICAgaWYgKHZhbHVlID09ICJtYWNvcyIpCi0gICAgICAgIHJldHVy
biBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19
Ci0KLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbERlYnVnZ2Vy
UmVhc29uIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3Rv
Y29sRGVidWdnZXJSZWFzb25EaWVkOgotICAgICAgICByZXR1cm4gIkRpZWQiX3M7Ci0gICAgY2Fz
ZSBUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbkZhaW50ZWQ6Ci0gICAgICAgIHJldHVybiAiRmFp
bnRlZCJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERlYnVnZ2VyUmVhc29uSHVuZ3J5OgotICAg
ICAgICByZXR1cm4gIkh1bmdyeSJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBP
cHRpb25hbDxUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbj4gZnJvbVByb3RvY29sU3RyaW5nKGNv
bnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJEaWVkIikKLSAgICAgICAg
cmV0dXJuIFRlc3RQcm90b2NvbERlYnVnZ2VyUmVhc29uRGllZDsKLSAgICBpZiAodmFsdWUgPT0g
IkZhaW50ZWQiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGVidWdnZXJSZWFzb25GYWlu
dGVkOwotICAgIGlmICh2YWx1ZSA9PSAiSHVuZ3J5IikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90
b2NvbERlYnVnZ2VyUmVhc29uSHVuZ3J5OwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0K
LQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNs
YXJhdGlvbi1hcnJheS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0KLSNp
bXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5o
IgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4K
LQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMgKERlYnVnZ2VyRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZUJyZWFrcG9p
bnRJZDooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2
b2lkKV9wYXJzZVJlYXNvbjooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBh
eWxvYWQ7Ci0KLUBlbmQKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChS
dW50aW1lRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZU9iamVjdElkOihOU051bWJlciAqKilvdXRW
YWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLSsgKHZvaWQpX3BhcnNlTHVja3lOdW1iZXJz
OihOU0FycmF5Lyo8TlNOdW1iZXI+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxv
YWQ7Ci0rICh2b2lkKV9wYXJzZUJhYnlOYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKW91
dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotKyAodm9pZClfcGFyc2VOZXdPYmplY3Rz
OihOU0FycmF5Lyo8TlNOdW1iZXI+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxv
YWQ7Ci0rICh2b2lkKV9wYXJzZU9sZE9iamVjdHM6KE5TQXJyYXkvKjxOU051bWJlcj4qLyAqKilv
dXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLSsgKHZvaWQpX3BhcnNlU3RvcFJlYXNv
bnM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5
bG9hZDsKLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zIChEZWJ1Z2dlckRvbWFpbikKLQotKyAodm9pZClfcGFyc2VCcmVha3BvaW50SWQ6KE5TTnVt
YmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNOdW1iZXIgY2xhc3NdKTsKLSAgICAqb3V0
VmFsdWUgPSAoTlNOdW1iZXIgKilwYXlsb2FkOwotfQotCi0rICh2b2lkKV9wYXJzZVJlYXNvbjoo
TlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJP
V19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBjbGFzc10pOwotICAg
IE9wdGlvbmFsPFRlc3RQcm90b2NvbERlYnVnZ2VyUmVhc29uPiByZXN1bHQgPSBJbnNwZWN0b3I6
OmZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbj4ocGF5bG9hZCk7
Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfRU5VTV9WQUxVRShyZXN1bHQsIEAiUmVhc29u
Iik7Ci0gICAgKm91dFZhbHVlID0gQChyZXN1bHQudmFsdWUoKSk7Ci19Ci0KLUBlbmQKLUBpbXBs
ZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFJ1bnRpbWVEb21haW4pCi0K
LSsgKHZvaWQpX3BhcnNlT2JqZWN0SWQ6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2Fk
OihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2Fk
LCBbTlNOdW1iZXIgY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSAoTlNOdW1iZXIgKilwYXlsb2Fk
OwotfQotCi0rICh2b2lkKV9wYXJzZUx1Y2t5TnVtYmVyczooTlNBcnJheS8qPE5TTnVtYmVyPiov
ICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNBcnJheS8qPE5TTnVtYmVyPiovIGNsYXNzXSk7
Ci0gICAgKm91dFZhbHVlID0gKE5TQXJyYXkvKjxOU051bWJlcj4qLyAqKXBheWxvYWQ7Ci19Ci0K
LSsgKHZvaWQpX3BhcnNlQmFieU5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopb3V0VmFs
dWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JB
RF9UWVBFKHBheWxvYWQsIFtOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gY2xhc3NdKTsKLSAgICAqb3V0
VmFsdWUgPSAoTlNBcnJheS8qPE5TU3RyaW5nPiovICopcGF5bG9hZDsKLX0KLQotKyAodm9pZClf
cGFyc2VOZXdPYmplY3RzOihOU0FycmF5Lyo8TlNOdW1iZXI+Ki8gKiopb3V0VmFsdWUgZnJvbVBh
eWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBh
eWxvYWQsIFtOU0FycmF5Lyo8TlNOdW1iZXI+Ki8gY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSAo
TlNBcnJheS8qPE5TTnVtYmVyPiovICopcGF5bG9hZDsKLX0KLQotKyAodm9pZClfcGFyc2VPbGRP
YmplY3RzOihOU0FycmF5Lyo8TlNOdW1iZXI+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlk
KXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtO
U0FycmF5Lyo8TlNOdW1iZXI+Ki8gY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSAoTlNBcnJheS8q
PE5TTnVtYmVyPiovICopcGF5bG9hZDsKLX0KLQotKyAodm9pZClfcGFyc2VTdG9wUmVhc29uczoo
TlNBcnJheS8qPE5TU3RyaW5nPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2Fk
Ci17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNBcnJheS8q
PE5TU3RyaW5nPiovIGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gKE5TQXJyYXkvKjxOU1N0cmlu
Zz4qLyAqKXBheWxvYWQ7Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMu
bW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFy
cmF5LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpT
T05PYmplY3RQcml2YXRlLmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8
d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0KLQot
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVk
L3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvdHlwZS1kZWNs
YXJhdGlvbi1lbnVtLXR5cGUuanNvbi1yZXN1bHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDg5NzllOGRiZTJmLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9u
LWVudW0tdHlwZS5qc29uLXJlc3VsdAorKysgL2Rldi9udWxsCkBAIC0xLDEwODYgKzAsMCBAQAot
IyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotLy8gUnVudGltZQotSW5z
cGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiUnVudGltZSIsIG51bGwpOwotSW5zcGVjdG9y
QmFja2VuZC5yZWdpc3RlckVudW0oIlJ1bnRpbWUuRmFybUFuaW1hbHMiLCB7UGlnczogIlBpZ3Mi
LCBDb3dzOiAiQ293cyIsIENhdHM6ICJDYXRzIiwgSGVuczogIkhlbnMifSk7Ci1JbnNwZWN0b3JC
YWNrZW5kLnJlZ2lzdGVyRW51bSgiUnVudGltZS5Ud29MZWdnZWRBbmltYWxzIiwge0R1Y2tzOiAi
RHVja3MiLCBIZW5zOiAiSGVucyIsIENyb3dzOiAiQ3Jvd3MiLCBGbGFtaW5nb3M6ICJGbGFtaW5n
b3MifSk7Ci1JbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJSdW50aW1lIiwgbnVsbCk7
Ci0jIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2lm
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi0jaW5jbHVkZSAiVGVz
dFByb3RvY29sVHlwZXMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250
ZW5kUm91dGVyLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hl
cihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNw
YXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQotICAgIEJhY2tlbmREaXNwYXRjaGVyKiBi
YWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0
KCk7IH0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmRE
aXNwYXRjaGVyOwotfTsKLQotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSNlbmRp
ZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSMjIyBFbmQgRmls
ZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3Rv
Y29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFj
ZSBJbnNwZWN0b3IgewotCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQotCi0KLX0gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJz
LmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3
dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQotI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMu
aCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLX0gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQot
I2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVl
cy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVj
dG9yIHsKLQotY2xhc3MgRnJvbnRlbmRSb3V0ZXI7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
LQotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2Vy
dGlvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi1uYW1lc3BhY2UgUHJvdG9j
b2wgewotCi0KLQotLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCi1uYW1lc3BhY2UgUnVudGltZSB7
Ci1lbnVtIGNsYXNzIEZhcm1BbmltYWxzOwotZW51bSBjbGFzcyBUd29MZWdnZWRBbmltYWxzOwot
fSAvLyBSdW50aW1lCi0vLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCi0KLQotCi0KLW5h
bWVzcGFjZSBUZXN0SGVscGVycyB7Ci0KLVN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQg
Y29kZSk7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1
ZShUIGVudW1WYWx1ZSkKLXsKLSAgICByZXR1cm4gZ2V0RW51bUNvbnN0YW50VmFsdWUoc3RhdGlj
X2Nhc3Q8aW50PihlbnVtVmFsdWUpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMK
LQotbmFtZXNwYWNlIFJ1bnRpbWUgewotLyogICovCi1lbnVtIGNsYXNzIEZhcm1BbmltYWxzIHsK
LSAgICBQaWdzID0gMCwKLSAgICBDb3dzID0gMSwKLSAgICBDYXRzID0gMiwKLSAgICBIZW5zID0g
MywKLX07IC8vIGVudW0gY2xhc3MgRmFybUFuaW1hbHMKLS8qICAqLwotZW51bSBjbGFzcyBUd29M
ZWdnZWRBbmltYWxzIHsKLSAgICBEdWNrcyA9IDQsCi0gICAgSGVucyA9IDMsCi0gICAgQ3Jvd3Mg
PSA1LAotICAgIEZsYW1pbmdvcyA9IDYsCi19OyAvLyBlbnVtIGNsYXNzIFR3b0xlZ2dlZEFuaW1h
bHMKLX0gLy8gUnVudGltZQotCi0KLQotbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKLQotdGVtcGxh
dGU8dHlwZW5hbWUgUHJvdG9jb2xFbnVtVHlwZT4KLU9wdGlvbmFsPFByb3RvY29sRW51bVR5cGU+
IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZyhjb25zdCBTdHJpbmcmKTsKLQotLy8gRW51bXMgaW4g
dGhlICdSdW50aW1lJyBEb21haW4KLXRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5z
cGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM+KGNvbnN0IFN0cmluZyYpOwot
dGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHdvTGVn
Z2VkQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM+KGNvbnN0IFN0cmluZyYpOwotCi19IC8vIG5hbWVz
cGFjZSBUZXN0SGVscGVycwotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKLQotbmFtZXNwYWNlIFdURiB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBEZWZhdWx0SGFzaDsKLQotLy8gSGFzaCBkZWNsYXJhdGlvbnMgaW4gdGhlICdSdW50
aW1lJyBEb21haW4KLXRlbXBsYXRlPD4KLXN0cnVjdCBEZWZhdWx0SGFzaDxJbnNwZWN0b3I6OlBy
b3RvY29sOjpSdW50aW1lOjpGYXJtQW5pbWFscz4gewotICAgIHR5cGVkZWYgSW50SGFzaDxJbnNw
ZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpGYXJtQW5pbWFscz4gSGFzaDsKLX07Ci10ZW1wbGF0
ZTw+Ci1zdHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHdv
TGVnZ2VkQW5pbWFscz4gewotICAgIHR5cGVkZWYgSW50SGFzaDxJbnNwZWN0b3I6OlByb3RvY29s
OjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxzPiBIYXNoOwotfTsKLQotfSAvLyBuYW1lc3BhY2Ug
V1RGCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0KLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1uYW1l
c3BhY2UgUHJvdG9jb2wgewotCi1uYW1lc3BhY2UgVGVzdEhlbHBlcnMgewotCi1zdGF0aWMgY29u
c3QgY2hhciogY29uc3QgZW51bV9jb25zdGFudF92YWx1ZXNbXSA9IHsKLSAgICAiUGlncyIsCi0g
ICAgIkNvd3MiLAotICAgICJDYXRzIiwKLSAgICAiSGVucyIsCi0gICAgIkR1Y2tzIiwKLSAgICAi
Q3Jvd3MiLAotICAgICJGbGFtaW5nb3MiLAotfTsKLQotU3RyaW5nIGdldEVudW1Db25zdGFudFZh
bHVlKGludCBjb2RlKSB7Ci0gICAgcmV0dXJuIGVudW1fY29uc3RhbnRfdmFsdWVzW2NvZGVdOwot
fQotCi0vLyBFbnVtcyBpbiB0aGUgJ1J1bnRpbWUnIERvbWFpbgotdGVtcGxhdGU8PgotT3B0aW9u
YWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM+IHBhcnNlRW51bVZh
bHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpGYXJtQW5pbWFscz4o
Y29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKLXsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90
IGNvbnN0YW50VmFsdWVzW10gPSB7Ci0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2Nv
bDo6UnVudGltZTo6RmFybUFuaW1hbHM6OlBpZ3MsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9y
OjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM6OkNvd3MsCi0gICAgICAgIChzaXplX3Qp
SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM6OkNhdHMsCi0gICAgICAg
IChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM6OkhlbnMs
Ci0gICAgfTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDQ7ICsraSkKLSAgICAgICAgaWYg
KHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ld
XSkKLSAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFy
bUFuaW1hbHMpY29uc3RhbnRWYWx1ZXNbaV07Ci0KLSAgICByZXR1cm4gV1RGOjpudWxsb3B0Owot
fQotCi10ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpU
d29MZWdnZWRBbmltYWxzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90
b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFscz4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0
cmluZykKLXsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7Ci0g
ICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5p
bWFsczo6RHVja3MsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGlt
ZTo6VHdvTGVnZ2VkQW5pbWFsczo6SGVucywKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlBy
b3RvY29sOjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxzOjpDcm93cywKLSAgICAgICAgKHNpemVf
dClJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxzOjpGbGFtaW5n
b3MsCi0gICAgfTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDQ7ICsraSkKLSAgICAgICAg
aWYgKHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVz
W2ldXSkKLSAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6
VHdvTGVnZ2VkQW5pbWFscyljb25zdGFudFZhbHVlc1tpXTsKLQotICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7Ci19Ci0KLQotfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKLQotCi0KLX0gLy8gbmFt
ZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4K
LQotCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNv
bmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNp
bmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLW5hbWVzcGFj
ZSBJbnNwZWN0b3IgewotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2Nv
bC5oPgotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZh
Y2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0Ci1AZW5kCi0KLQotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRp
b24uaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0
ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21l
bnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIElu
c3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KLXsK
LSAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotfQotCi0t
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNv
bnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlm
ICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0g
ICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2
b2lkKWRlYWxsb2MKLXsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLUBlbmQKLQotCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVy
bmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9y
dCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0j
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
dHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQot
I2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgotCi0KLQotCi10
eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xQbGF0Zm9ybSkgewotICAgIFRl
c3RQcm90b2NvbFBsYXRmb3JtQWxsLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYywK
LSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1h
Y09TLAotfTsKLQotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xSdW50
aW1lRmFybUFuaW1hbHMpIHsKLSAgICBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHNQaWdz
LAotICAgIFRlc3RQcm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFsc0Nvd3MsCi0gICAgVGVzdFByb3Rv
Y29sUnVudGltZUZhcm1BbmltYWxzQ2F0cywKLSAgICBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFu
aW1hbHNIZW5zLAotfTsKLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29s
UnVudGltZVR3b0xlZ2dlZEFuaW1hbHMpIHsKLSAgICBUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVn
Z2VkQW5pbWFsc0R1Y2tzLAotICAgIFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxz
SGVucywKLSAgICBUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFsc0Nyb3dzLAotICAg
IFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzRmxhbWluZ29zLAotfTsKLQotCi0K
LQotCi0KLQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGli
aWxpdHlPYmplY3RzLmg+Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgot
I2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKLSNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8d3Rm
L0pTT05WYWx1ZXMuaD4KLQotCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5h
bC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBl
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9y
dCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJh
eUNvbnZlcnNpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBPYmpDRW51bVR5cGU+Ci1PcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0
cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3Ry
aW5nKFRlc3RQcm90b2NvbFBsYXRmb3JtIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewot
ICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1BbGw6Ci0gICAgICAgIHJldHVybiAiYWxsIl9z
OwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOgotICAgICAgICByZXR1cm4g
ImdlbmVyaWMiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzoKLSAgICAgICAg
cmV0dXJuICJpb3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOgotICAg
ICAgICByZXR1cm4gIm1hY29zIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9w
dGlvbmFsPFRlc3RQcm90b2NvbFBsYXRmb3JtPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gImFsbCIpCi0gICAgICAgIHJldHVybiBU
ZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDsKLSAgICBpZiAodmFsdWUgPT0gImdlbmVyaWMiKQotICAg
ICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOwotICAgIGlmICh2YWx1ZSA9
PSAiaW9zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOwotICAgIGlm
ICh2YWx1ZSA9PSAibWFjb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1N
YWNPUzsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi0KLWlubGluZSBTdHJpbmcgdG9Q
cm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHMgdmFsdWUpCi17Ci0g
ICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1h
bHNQaWdzOgotICAgICAgICByZXR1cm4gIlBpZ3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xS
dW50aW1lRmFybUFuaW1hbHNDb3dzOgotICAgICAgICByZXR1cm4gIkNvd3MiX3M7Ci0gICAgY2Fz
ZSBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHNDYXRzOgotICAgICAgICByZXR1cm4gIkNh
dHMiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHNIZW5zOgotICAg
ICAgICByZXR1cm4gIkhlbnMiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0
aW9uYWw8VGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzPiBmcm9tUHJvdG9jb2xTdHJpbmco
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gIlBpZ3MiKQotICAgICAg
ICByZXR1cm4gVGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzUGlnczsKLSAgICBpZiAodmFs
dWUgPT0gIkNvd3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUnVudGltZUZhcm1Bbmlt
YWxzQ293czsKLSAgICBpZiAodmFsdWUgPT0gIkNhdHMiKQotICAgICAgICByZXR1cm4gVGVzdFBy
b3RvY29sUnVudGltZUZhcm1BbmltYWxzQ2F0czsKLSAgICBpZiAodmFsdWUgPT0gIkhlbnMiKQot
ICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzSGVuczsKLSAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmco
VGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHMgdmFsdWUpCi17Ci0gICAgc3dpdGNo
KHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFsc0R1
Y2tzOgotICAgICAgICByZXR1cm4gIkR1Y2tzIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUnVu
dGltZVR3b0xlZ2dlZEFuaW1hbHNIZW5zOgotICAgICAgICByZXR1cm4gIkhlbnMiX3M7Ci0gICAg
Y2FzZSBUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFsc0Nyb3dzOgotICAgICAgICBy
ZXR1cm4gIkNyb3dzIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFu
aW1hbHNGbGFtaW5nb3M6Ci0gICAgICAgIHJldHVybiAiRmxhbWluZ29zIl9zOwotICAgIH0KLX0K
LQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdn
ZWRBbmltYWxzPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAg
ICBpZiAodmFsdWUgPT0gIkR1Y2tzIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFJ1bnRp
bWVUd29MZWdnZWRBbmltYWxzRHVja3M7Ci0gICAgaWYgKHZhbHVlID09ICJIZW5zIikKLSAgICAg
ICAgcmV0dXJuIFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzSGVuczsKLSAgICBp
ZiAodmFsdWUgPT0gIkNyb3dzIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFJ1bnRpbWVU
d29MZWdnZWRBbmltYWxzQ3Jvd3M7Ci0gICAgaWYgKHZhbHVlID09ICJGbGFtaW5nb3MiKQotICAg
ICAgICByZXR1cm4gVGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHNGbGFtaW5nb3M7
Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9y
dCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVBy
b3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsK
LQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFJ1bnRpbWVEb21haW4p
Ci0KLSsgKHZvaWQpX3BhcnNlRmFybUFuaW1hbHM6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21Q
YXlsb2FkOihpZClwYXlsb2FkOwotKyAodm9pZClfcGFyc2VUd29MZWdnZWRBbmltYWxzOihOU051
bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLQotQGVuZAotCi1AaW1w
bGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChSdW50aW1lRG9tYWluKQot
Ci0rICh2b2lkKV9wYXJzZUZhcm1BbmltYWxzOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5
bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5
bG9hZCwgW05TU3RyaW5nIGNsYXNzXSk7Ci0gICAgT3B0aW9uYWw8VGVzdFByb3RvY29sUnVudGlt
ZUZhcm1BbmltYWxzPiByZXN1bHQgPSBJbnNwZWN0b3I6OmZyb21Qcm90b2NvbFN0cmluZzxUZXN0
UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHM+KHBheWxvYWQpOwotICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfQkFEX0VOVU1fVkFMVUUocmVzdWx0LCBAIkZhcm1BbmltYWxzIik7Ci0gICAgKm91dFZh
bHVlID0gQChyZXN1bHQudmFsdWUoKSk7Ci19Ci0KLSsgKHZvaWQpX3BhcnNlVHdvTGVnZ2VkQW5p
bWFsczooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAg
ICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBjbGFzc10p
OwotICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzPiByZXN1
bHQgPSBJbnNwZWN0b3I6OmZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xSdW50aW1lVHdv
TGVnZ2VkQW5pbWFscz4ocGF5bG9hZCk7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfRU5V
TV9WQUxVRShyZXN1bHQsIEAiVHdvTGVnZ2VkQW5pbWFscyIpOwotICAgICpvdXRWYWx1ZSA9IEAo
cmVzdWx0LnZhbHVlKCkpOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVz
Lm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1l
bnVtLXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpT
T05PYmplY3RQcml2YXRlLmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8
d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0KLQot
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvdHlw
ZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtZGVjbGFy
YXRpb24tb2JqZWN0LXR5cGUuanNvbi1yZXN1bHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDQyZTZkYTJiYmM4Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9u
LW9iamVjdC10eXBlLmpzb24tcmVzdWx0CisrKyAvZGV2L251bGwKQEAgLTEsMjQ1NSArMCwwIEBA
Ci0jIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLS8vIERhdGFiYXNl
Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJEYXRhYmFzZSIsIG51bGwpOwotSW5z
cGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIkRhdGFiYXNlLk1vdXNlQnV0dG9uIiwge05vbmU6
ICJOb25lIiwgTGVmdDogIkxlZnQiLCBNaWRkbGU6ICJNaWRkbGUiLCBSaWdodDogIlJpZ2h0In0p
OwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIkRhdGFiYXNlLk9wdGlvbmFsUGFyYW1l
dGVyQnVuZGxlRGlyZWN0aW9uYWxpdHkiLCB7TFRSOiAiTFRSIiwgUlRMOiAiUlRMIn0pOwotSW5z
cGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIkRhdGFiYXNlLlBhcmFtZXRlckJ1bmRsZURpcmVj
dGlvbmFsaXR5Iiwge0xUUjogIkxUUiIsIFJUTDogIlJUTCJ9KTsKLUluc3BlY3RvckJhY2tlbmQu
YWN0aXZhdGVEb21haW4oIkRhdGFiYXNlIiwgbnVsbCk7Ci0jIyMgRW5kIEZpbGU6IEluc3BlY3Rv
ckJhY2tlbmRDb21tYW5kcy5qcwotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tl
bmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1k
ZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgotI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLQotbmFtZXNw
YWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1
YmxpYzoKLSAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0
Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3Bh
dGNoZXIpOyB9Ci0gICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29u
c3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQotcHJpdmF0ZToKLSAgICBS
ZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Ci19OwotCi0KLQot
Ci19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQotIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2Vu
ZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMu
aAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2Jq
ZWN0LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdHlw
ZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
LSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgot
I2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotI2lu
Y2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNlbmRpZgotCi1uYW1l
c3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMg
RW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFBy
b3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBG
cm9udGVuZFJvdXRlcjsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6
IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVu
ZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUt
ZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEZyb250
ZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZy
b250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmls
ZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xPYmplY3RzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRl
Y2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQot
bmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQot
Ly8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCi1uYW1lc3BhY2UgRGF0YWJhc2UgewotY2xhc3MgRXJy
b3I7Ci1jbGFzcyBPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTsKLWNsYXNzIFBhcmFtZXRlckJ1bmRs
ZTsKLWNsYXNzIE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHM7Ci1jbGFzcyBEdW1teU9i
amVjdDsKLWVudW0gY2xhc3MgTW91c2VCdXR0b247Ci19IC8vIERhdGFiYXNlCi0KLW5hbWVzcGFj
ZSBUZXN0IHsKLWNsYXNzIFBhcmFtZXRlckJ1bmRsZTsKLX0gLy8gVGVzdAotLy8gRW5kIG9mIGZv
cndhcmQgZGVjbGFyYXRpb25zLgotCi0KLS8vIFR5cGVkZWZzLgotbmFtZXNwYWNlIERhdGFiYXNl
IHsKLXR5cGVkZWYgSlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6
RXJyb3I+IEVycm9yTGlzdDsKLX0gLy8gRGF0YWJhc2UKLS8vIEVuZCBvZiB0eXBlZGVmcy4KLQot
bmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKLQotU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGlu
dCBjb2RlKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdldEVudW1Db25zdGFudFZh
bHVlKFQgZW51bVZhbHVlKQotewotICAgIHJldHVybiBnZXRFbnVtQ29uc3RhbnRWYWx1ZShzdGF0
aWNfY2FzdDxpbnQ+KGVudW1WYWx1ZSkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVy
cwotCi1uYW1lc3BhY2UgRGF0YWJhc2UgewotLyogRGF0YWJhc2UgZXJyb3IuICovCi1jbGFzcyBF
cnJvciA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKLXB1YmxpYzoKLSAgICBlbnVtIHsKLSAg
ICAgICAgTm9GaWVsZHNTZXQgPSAwLAotICAgICAgICBNZXNzYWdlU2V0ID0gMSA8PCAwLAotICAg
ICAgICBDb2RlU2V0ID0gMSA8PCAxLAotICAgICAgICBBbGxGaWVsZHNTZXQgPSAoTWVzc2FnZVNl
dCB8IENvZGVTZXQpCi0gICAgfTsKLQotICAgIHRlbXBsYXRlPGludCBTVEFURT4KLSAgICBjbGFz
cyBCdWlsZGVyIHsKLSAgICBwcml2YXRlOgotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBt
X3Jlc3VsdDsKLQotICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNU
RVA+JiBjYXN0U3RhdGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJw
cmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBCdWlsZGVyKFJlZjwvKkVycm9yKi9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQotICAgICAg
ICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5f
bm9uX2luaXRfc3RhdGUpOwotICAgICAgICB9Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBFcnJvcjsK
LSAgICBwdWJsaWM6Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1lc3NhZ2VTZXQ+JiBzZXRN
ZXNzYWdlKGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBNZXNzYWdlU2V0KSwgcHJvcGVydHlfbWVzc2FnZV9hbHJlYWR5
X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJtZXNzYWdlIl9zLCB2YWx1
ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1lc3NhZ2VTZXQ+KCk7Ci0gICAgICAg
IH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29kZVNldD4mIHNldENvZGUoaW50IHZhbHVl
KQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29kZVNl
dCksIHByb3BlcnR5X2NvZGVfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dEludGVnZXIoImNvZGUiX3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8
Q29kZVNldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIFJlZjxFcnJvcj4gcmVsZWFzZSgpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1Nl
dCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXpl
b2YoRXJyb3IpID09IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7Ci0KLSAgICAg
ICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25SZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9u
TnVsbCgpOwotICAgICAgICAgICAgYXV0byByZXN1bHQgPSBXVEZNb3ZlKCpyZWludGVycHJldF9j
YXN0PFJlZjxFcnJvcj4qPigmanNvblJlc3VsdCkpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICAvKgotICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1
Y3RvcjoKLSAgICAgKiBSZWY8RXJyb3I+IHJlc3VsdCA9IEVycm9yOjpjcmVhdGUoKQotICAgICAq
ICAgICAuc2V0TWVzc2FnZSguLi4pCi0gICAgICogICAgIC5zZXRDb2RlKC4uLikKLSAgICAgKiAg
ICAgLnJlbGVhc2UoKTsKLSAgICAgKi8KLSAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4g
Y3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpKTsKLSAgICB9Ci19OwotCi0vKiBFbnVtZXJhdGVzIGRpZmZlcmVu
dCBtb3VzZSBidXR0b25zIHRoYXQgY2FuIGJlIHVzZWQuICovCi1lbnVtIGNsYXNzIE1vdXNlQnV0
dG9uIHsKLSAgICBOb25lID0gMCwKLSAgICBMZWZ0ID0gMSwKLSAgICBNaWRkbGUgPSAyLAotICAg
IFJpZ2h0ID0gMywKLX07IC8vIGVudW0gY2xhc3MgTW91c2VCdXR0b24KLWNsYXNzIE9wdGlvbmFs
UGFyYW1ldGVyQnVuZGxlIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewotcHVibGljOgotICAg
IC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ2RpcmVjdGlvbmFsaXR5JyB3aGlsZSBnZW5l
cmF0aW5nIE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlLgotICAgIGVudW0gY2xhc3MgRGlyZWN0aW9u
YWxpdHkgewotICAgICAgICBMVFIgPSA0LAotICAgICAgICBSVEwgPSA1LAotICAgIH07IC8vIGVu
dW0gY2xhc3MgRGlyZWN0aW9uYWxpdHkKLSAgICBlbnVtIHsKLSAgICAgICAgTm9GaWVsZHNTZXQg
PSAwLAotICAgICAgICBBbGxGaWVsZHNTZXQgPSAwCi0gICAgfTsKLQotICAgIHRlbXBsYXRlPGlu
dCBTVEFURT4KLSAgICBjbGFzcyBCdWlsZGVyIHsKLSAgICBwcml2YXRlOgotICAgICAgICBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiBtX3Jlc3VsdDsKLQotICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4g
QnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7
Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyKFJlZjwvKk9wdGlvbmFsUGFyYW1ldGVyQnVu
ZGxlKi9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQotICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZN
b3ZlKG9iamVjdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRF
ID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwotICAg
ICAgICB9Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTsKLSAg
ICBwdWJsaWM6Ci0KLSAgICAgICAgUmVmPE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlPiByZWxlYXNl
KCkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmll
bGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KHNpemVvZihPcHRpb25hbFBhcmFtZXRlckJ1bmRsZSkgPT0gc2l6ZW9mKEpTT046Ok9iamVjdCks
IGNhbm5vdF9jYXN0KTsKLQotICAgICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4ganNvblJlc3Vs
dCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7Ci0gICAgICAgICAgICBhdXRvIHJlc3VsdCA9
IFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlPio+
KCZqc29uUmVzdWx0KSk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0g
ICAgfTsKLQotICAgIC8qCi0gICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgotICAgICAqIFJl
ZjxPcHRpb25hbFBhcmFtZXRlckJ1bmRsZT4gcmVzdWx0ID0gT3B0aW9uYWxQYXJhbWV0ZXJCdW5k
bGU6OmNyZWF0ZSgpCi0gICAgICogICAgIC5yZWxlYXNlKCk7Ci0gICAgICovCi0gICAgc3RhdGlj
IEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gQnVp
bGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7Ci0gICAgfQotCi0gICAg
dm9pZCBzZXRDb2x1bW5OYW1lcyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiB2YWx1ZSkK
LSAgICB7Ci0gICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldEFycmF5KCJjb2x1bW5OYW1lcyJf
cywgV1RGTW92ZSh2YWx1ZSkpOwotICAgIH0KLQotICAgIHZvaWQgc2V0QnV0dG9ucyhSZWZQdHI8
SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b24+
PiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldEFycmF5KCJidXR0
b25zIl9zLCBXVEZNb3ZlKHZhbHVlKSk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXREaXJlY3Rpb25h
bGl0eShEaXJlY3Rpb25hbGl0eSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEpTT046Ok9iamVjdEJh
c2U6OnNldFN0cmluZygiZGlyZWN0aW9uYWxpdHkiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRl
c3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSh2YWx1ZSkpOwotICAgIH0KLQotICAgIHZv
aWQgc2V0Tm90ZXMoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEpTT046Ok9i
amVjdEJhc2U6OnNldFN0cmluZygibm90ZXMiX3MsIHZhbHVlKTsKLSAgICB9Ci0KLSAgICB2b2lk
IHNldFRpbWVzdGFtcChkb3VibGUgdmFsdWUpCi0gICAgewotICAgICAgICBKU09OOjpPYmplY3RC
YXNlOjpzZXREb3VibGUoInRpbWVzdGFtcCJfcywgdmFsdWUpOwotICAgIH0KLQotICAgIHZvaWQg
c2V0VmFsdWVzKFJlZlB0cjxKU09OOjpPYmplY3Q+IHZhbHVlKQotICAgIHsKLSAgICAgICAgSlNP
Tjo6T2JqZWN0QmFzZTo6c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFdURk1vdmUodmFsdWUpKTsKLSAg
ICB9Ci0KLSAgICB2b2lkIHNldFBheWxvYWQoUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZSkKLSAg
ICB7Ci0gICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldFZhbHVlKCJwYXlsb2FkIl9zLCBXVEZN
b3ZlKHZhbHVlKSk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRFcnJvcihSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEpTT046
Ok9iamVjdEJhc2U6OnNldE9iamVjdCgiZXJyb3IiX3MsIFdURk1vdmUodmFsdWUpKTsKLSAgICB9
Ci0KLSAgICB2b2lkIHNldEVycm9yTGlzdChSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0
YWJhc2U6OkVycm9yTGlzdD4gdmFsdWUpCi0gICAgewotICAgICAgICBKU09OOjpPYmplY3RCYXNl
OjpzZXRBcnJheSgiZXJyb3JMaXN0Il9zLCBXVEZNb3ZlKHZhbHVlKSk7Ci0gICAgfQotfTsKLQot
Y2xhc3MgUGFyYW1ldGVyQnVuZGxlIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewotcHVibGlj
OgotICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ2RpcmVjdGlvbmFsaXR5JyB3aGls
ZSBnZW5lcmF0aW5nIFBhcmFtZXRlckJ1bmRsZS4KLSAgICBlbnVtIGNsYXNzIERpcmVjdGlvbmFs
aXR5IHsKLSAgICAgICAgTFRSID0gNCwKLSAgICAgICAgUlRMID0gNSwKLSAgICB9OyAvLyBlbnVt
IGNsYXNzIERpcmVjdGlvbmFsaXR5Ci0gICAgZW51bSB7Ci0gICAgICAgIE5vRmllbGRzU2V0ID0g
MCwKLSAgICAgICAgQ29sdW1uTmFtZXNTZXQgPSAxIDw8IDAsCi0gICAgICAgIEJ1dHRvbnNTZXQg
PSAxIDw8IDEsCi0gICAgICAgIERpcmVjdGlvbmFsaXR5U2V0ID0gMSA8PCAyLAotICAgICAgICBO
b3Rlc1NldCA9IDEgPDwgMywKLSAgICAgICAgVGltZXN0YW1wU2V0ID0gMSA8PCA0LAotICAgICAg
ICBWYWx1ZXNTZXQgPSAxIDw8IDUsCi0gICAgICAgIFBheWxvYWRTZXQgPSAxIDw8IDYsCi0gICAg
ICAgIEVycm9yU2V0ID0gMSA8PCA3LAotICAgICAgICBFcnJvckxpc3RTZXQgPSAxIDw8IDgsCi0g
ICAgICAgIEFsbEZpZWxkc1NldCA9IChDb2x1bW5OYW1lc1NldCB8IEJ1dHRvbnNTZXQgfCBEaXJl
Y3Rpb25hbGl0eVNldCB8IE5vdGVzU2V0IHwgVGltZXN0YW1wU2V0IHwgVmFsdWVzU2V0IHwgUGF5
bG9hZFNldCB8IEVycm9yU2V0IHwgRXJyb3JMaXN0U2V0KQotICAgIH07Ci0KLSAgICB0ZW1wbGF0
ZTxpbnQgU1RBVEU+Ci0gICAgY2xhc3MgQnVpbGRlciB7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAg
UmVmUHRyPEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7Ci0KLSAgICAgICAgdGVtcGxhdGU8aW50IFNU
RVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRo
aXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcihSZWY8LypQYXJhbWV0ZXJCdW5kbGUq
L0pTT046Ok9iamVjdD4mJiBvYmplY3QpCi0gICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUo
b2JqZWN0KSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0g
Tm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7Ci0gICAgICAg
IH0KLSAgICAgICAgZnJpZW5kIGNsYXNzIFBhcmFtZXRlckJ1bmRsZTsKLSAgICBwdWJsaWM6Ci0K
LSAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvbHVtbk5hbWVzU2V0PiYgc2V0Q29sdW1uTmFtZXMo
UmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2x1bW5OYW1lc1NldCksIHByb3BlcnR5X2Nv
bHVtbk5hbWVzX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheSgi
Y29sdW1uTmFtZXMiX3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29s
dW1uTmFtZXNTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQnV0
dG9uc1NldD4mIHNldEJ1dHRvbnMoUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90
b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPj4gdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBCdXR0b25zU2V0KSwgcHJvcGVydHlfYnV0dG9u
c19hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoImJ1dHRvbnMi
X3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8QnV0dG9uc1NldD4oKTsK
LSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBEaXJlY3Rpb25hbGl0eVNldD4m
IHNldERpcmVjdGlvbmFsaXR5KERpcmVjdGlvbmFsaXR5IHZhbHVlKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRGlyZWN0aW9uYWxpdHlTZXQpLCBwcm9w
ZXJ0eV9kaXJlY3Rpb25hbGl0eV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0U3RyaW5nKCJkaXJlY3Rpb25hbGl0eSJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhl
bHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKHZhbHVlKSk7Ci0gICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPERpcmVjdGlvbmFsaXR5U2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVp
bGRlcjxTVEFURSB8IE5vdGVzU2V0PiYgc2V0Tm90ZXMoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAg
ICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE5vdGVzU2V0KSwg
cHJvcGVydHlfbm90ZXNfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0
cmluZygibm90ZXMiX3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Tm90
ZXNTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVGltZXN0YW1w
U2V0PiYgc2V0VGltZXN0YW1wKGRvdWJsZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIFRpbWVzdGFtcFNldCksIHByb3BlcnR5X3RpbWVzdGFt
cF9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0RG91YmxlKCJ0aW1lc3Rh
bXAiX3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VGltZXN0YW1wU2V0
PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IFZhbHVlc1NldD4mIHNl
dFZhbHVlcyhSZWZQdHI8SlNPTjo6T2JqZWN0PiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFZhbHVlc1NldCksIHByb3BlcnR5X3ZhbHVlc19h
bHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3Ms
IHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VmFsdWVzU2V0PigpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IFBheWxvYWRTZXQ+JiBzZXRQYXlsb2Fk
KFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBQYXlsb2FkU2V0KSwgcHJvcGVydHlfcGF5bG9hZF9hbHJlYWR5
X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIHZhbHVl
KTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8UGF5bG9hZFNldD4oKTsKLSAgICAgICAg
fQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBFcnJvclNldD4mIHNldEVycm9yKFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHZhbHVlKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRXJyb3JTZXQpLCBwcm9wZXJ0eV9l
cnJvcl9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJlcnJv
ciJfcywgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxFcnJvclNldD4oKTsK
LSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBFcnJvckxpc3RTZXQ+JiBzZXRF
cnJvckxpc3QoUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvckxpc3Q+
IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
RXJyb3JMaXN0U2V0KSwgcHJvcGVydHlfZXJyb3JMaXN0X2FscmVhZHlfc2V0KTsKLSAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXRBcnJheSgiZXJyb3JMaXN0Il9zLCB2YWx1ZSk7Ci0gICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPEVycm9yTGlzdFNldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAg
IFJlZjxQYXJhbWV0ZXJCdW5kbGU+IHJlbGVhc2UoKQotICAgICAgICB7Ci0gICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkp
OwotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFBhcmFtZXRlckJ1bmRsZSkgPT0g
c2l6ZW9mKEpTT046Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsKLQotICAgICAgICAgICAgUmVmPEpT
T046Ok9iamVjdD4ganNvblJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7Ci0gICAg
ICAgICAgICBhdXRvIHJlc3VsdCA9IFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPFBhcmFt
ZXRlckJ1bmRsZT4qPigmanNvblJlc3VsdCkpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
LSAgICAgICAgfQotICAgIH07Ci0KLSAgICAvKgotICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3Rv
cjoKLSAgICAgKiBSZWY8UGFyYW1ldGVyQnVuZGxlPiByZXN1bHQgPSBQYXJhbWV0ZXJCdW5kbGU6
OmNyZWF0ZSgpCi0gICAgICogICAgIC5zZXRDb2x1bW5OYW1lcyguLi4pCi0gICAgICogICAgIC5z
ZXRCdXR0b25zKC4uLikKLSAgICAgKiAgICAgLnNldERpcmVjdGlvbmFsaXR5KC4uLikKLSAgICAg
KiAgICAgLnNldE5vdGVzKC4uLikKLSAgICAgKiAgICAgLnNldFRpbWVzdGFtcCguLi4pCi0gICAg
ICogICAgIC5zZXRWYWx1ZXMoLi4uKQotICAgICAqICAgICAuc2V0UGF5bG9hZCguLi4pCi0gICAg
ICogICAgIC5zZXRFcnJvciguLi4pCi0gICAgICogICAgIC5zZXRFcnJvckxpc3QoLi4uKQotICAg
ICAqICAgICAucmVsZWFzZSgpOwotICAgICAqLwotICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRz
U2V0PiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+
KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOwotICAgIH0KLX07Ci0KLS8qIENvbmZsaWN0ZWQgbmFt
ZXMgbWF5IGNhdXNlIGdlbmVyYXRlZCBnZXR0ZXJzL3NldHRlcnMgdG8gY2xhc2ggd2l0aCBidWls
dC1pbiBJbnNwZWN0b3JPYmplY3QgbWV0aG9kcy4gKi8KLWNsYXNzIE9iamVjdFdpdGhQcm9wZXJ0
eU5hbWVDb25mbGljdHMgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7Ci1wdWJsaWM6Ci0gICAg
ZW51bSB7Ci0gICAgICAgIE5vRmllbGRzU2V0ID0gMCwKLSAgICAgICAgSW50ZWdlclNldCA9IDEg
PDwgMCwKLSAgICAgICAgQXJyYXlTZXQgPSAxIDw8IDEsCi0gICAgICAgIFN0cmluZ1NldCA9IDEg
PDwgMiwKLSAgICAgICAgVmFsdWVTZXQgPSAxIDw8IDMsCi0gICAgICAgIE9iamVjdFNldCA9IDEg
PDwgNCwKLSAgICAgICAgQWxsRmllbGRzU2V0ID0gKEludGVnZXJTZXQgfCBBcnJheVNldCB8IFN0
cmluZ1NldCB8IFZhbHVlU2V0IHwgT2JqZWN0U2V0KQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTxp
bnQgU1RBVEU+Ci0gICAgY2xhc3MgQnVpbGRlciB7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVm
UHRyPEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7Ci0KLSAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+
IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMp
OwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcihSZWY8LypPYmplY3RXaXRoUHJvcGVydHlO
YW1lQ29uZmxpY3RzKi9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQotICAgICAgICAgICAgOiBtX3Jl
c3VsdChXVEZNb3ZlKG9iamVjdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3Rh
dGUpOwotICAgICAgICB9Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBPYmplY3RXaXRoUHJvcGVydHlO
YW1lQ29uZmxpY3RzOwotICAgIHB1YmxpYzoKLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgSW50
ZWdlclNldD4mIHNldEludGVnZXIoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICAgICAgewotICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEludGVnZXJTZXQpLCBwcm9wZXJ0eV9p
bnRlZ2VyX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImlu
dGVnZXIiX3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8SW50ZWdlclNl
dD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBBcnJheVNldD4mIHNl
dEFycmF5KGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBBcnJheVNldCksIHByb3BlcnR5X2FycmF5X2FscmVhZHlfc2V0
KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImFycmF5Il9zLCB2YWx1ZSk7Ci0g
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEFycmF5U2V0PigpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IFN0cmluZ1NldD4mIHNldFN0cmluZyhjb25zdCBTdHJpbmcm
IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
U3RyaW5nU2V0KSwgcHJvcGVydHlfc3RyaW5nX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXRTdHJpbmcoInN0cmluZyJfcywgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxTdHJpbmdTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgVmFsdWVTZXQ+JiBzZXRWYWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgICAgICB7
Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVmFsdWVTZXQpLCBwcm9wZXJ0
eV92YWx1ZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ2
YWx1ZSJfcywgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxWYWx1ZVNldD4o
KTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBPYmplY3RTZXQ+JiBzZXRP
YmplY3QoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoIShTVEFURSAmIE9iamVjdFNldCksIHByb3BlcnR5X29iamVjdF9hbHJlYWR5X3Nl
dCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJvYmplY3QiX3MsIHZhbHVlKTsK
LSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8T2JqZWN0U2V0PigpOwotICAgICAgICB9Ci0K
LSAgICAgICAgUmVmPE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHM+IHJlbGVhc2UoKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNT
ZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6
ZW9mKE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHMpID09IHNpemVvZihKU09OOjpPYmpl
Y3QpLCBjYW5ub3RfY2FzdCk7Ci0KLSAgICAgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25S
ZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOwotICAgICAgICAgICAgYXV0byByZXN1
bHQgPSBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxPYmplY3RXaXRoUHJvcGVydHlOYW1l
Q29uZmxpY3RzPio+KCZqc29uUmVzdWx0KSk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0Owot
ICAgICAgICB9Ci0gICAgfTsKLQotICAgIC8qCi0gICAgICogU3ludGhldGljIGNvbnN0cnVjdG9y
OgotICAgICAqIFJlZjxPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzPiByZXN1bHQgPSBP
YmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzOjpjcmVhdGUoKQotICAgICAqICAgICAuc2V0
SW50ZWdlciguLi4pCi0gICAgICogICAgIC5zZXRBcnJheSguLi4pCi0gICAgICogICAgIC5zZXRT
dHJpbmcoLi4uKQotICAgICAqICAgICAuc2V0VmFsdWUoLi4uKQotICAgICAqICAgICAuc2V0T2Jq
ZWN0KC4uLikKLSAgICAgKiAgICAgLnJlbGVhc2UoKTsKLSAgICAgKi8KLSAgICBzdGF0aWMgQnVp
bGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBCdWlsZGVy
PE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKLSAgICB9Ci19OwotCi19IC8v
IERhdGFiYXNlCi0KLW5hbWVzcGFjZSBUZXN0IHsKLWNsYXNzIFBhcmFtZXRlckJ1bmRsZSA6IHB1
YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKLXB1YmxpYzoKLSAgICAvLyBOYW1lZCBhZnRlciBwcm9w
ZXJ0eSBuYW1lICdkaXJlY3Rpb25hbGl0eScgd2hpbGUgZ2VuZXJhdGluZyBQYXJhbWV0ZXJCdW5k
bGUuCi0gICAgZW51bSBjbGFzcyBEaXJlY3Rpb25hbGl0eSB7Ci0gICAgICAgIExUUiA9IDQsCi0g
ICAgICAgIFJUTCA9IDUsCi0gICAgfTsgLy8gZW51bSBjbGFzcyBEaXJlY3Rpb25hbGl0eQotICAg
IGVudW0gewotICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCi0gICAgICAgIERpcmVjdGlvbmFsaXR5
U2V0ID0gMSA8PCAwLAotICAgICAgICBCdXR0b25zU2V0ID0gMSA8PCAxLAotICAgICAgICBDb2x1
bW5OYW1lc1NldCA9IDEgPDwgMiwKLSAgICAgICAgTm90ZXNTZXQgPSAxIDw8IDMsCi0gICAgICAg
IFRpbWVzdGFtcFNldCA9IDEgPDwgNCwKLSAgICAgICAgVmFsdWVzU2V0ID0gMSA8PCA1LAotICAg
ICAgICBQYXlsb2FkU2V0ID0gMSA8PCA2LAotICAgICAgICBFcnJvclNldCA9IDEgPDwgNywKLSAg
ICAgICAgQWxsRmllbGRzU2V0ID0gKERpcmVjdGlvbmFsaXR5U2V0IHwgQnV0dG9uc1NldCB8IENv
bHVtbk5hbWVzU2V0IHwgTm90ZXNTZXQgfCBUaW1lc3RhbXBTZXQgfCBWYWx1ZXNTZXQgfCBQYXls
b2FkU2V0IHwgRXJyb3JTZXQpCi0gICAgfTsKLQotICAgIHRlbXBsYXRlPGludCBTVEFURT4KLSAg
ICBjbGFzcyBCdWlsZGVyIHsKLSAgICBwcml2YXRlOgotICAgICAgICBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiBtX3Jlc3VsdDsKLQotICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFU
RSB8IFNURVA+JiBjYXN0U3RhdGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKnJl
aW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7Ci0gICAgICAgIH0K
LQotICAgICAgICBCdWlsZGVyKFJlZjwvKlBhcmFtZXRlckJ1bmRsZSovSlNPTjo6T2JqZWN0PiYm
IG9iamVjdCkKLSAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVp
bGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKLSAgICAgICAgfQotICAgICAgICBmcmll
bmQgY2xhc3MgUGFyYW1ldGVyQnVuZGxlOwotICAgIHB1YmxpYzoKLQotICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgRGlyZWN0aW9uYWxpdHlTZXQ+JiBzZXREaXJlY3Rpb25hbGl0eShEaXJlY3Rpb25h
bGl0eSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIERpcmVjdGlvbmFsaXR5U2V0KSwgcHJvcGVydHlfZGlyZWN0aW9uYWxpdHlfYWxyZWFkeV9z
ZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygiZGlyZWN0aW9uYWxpdHkiX3Ms
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSh2
YWx1ZSkpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxEaXJlY3Rpb25hbGl0eVNldD4o
KTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBCdXR0b25zU2V0PiYgc2V0
QnV0dG9ucyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFz
ZTo6TW91c2VCdXR0b24+PiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoIShTVEFURSAmIEJ1dHRvbnNTZXQpLCBwcm9wZXJ0eV9idXR0b25zX2FscmVhZHlfc2V0
KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheSgiYnV0dG9ucyJfcywgdmFsdWUpOwot
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxCdXR0b25zU2V0PigpOwotICAgICAgICB9Ci0K
LSAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvbHVtbk5hbWVzU2V0PiYgc2V0Q29sdW1uTmFtZXMo
UmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2x1bW5OYW1lc1NldCksIHByb3BlcnR5X2Nv
bHVtbk5hbWVzX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheSgi
Y29sdW1uTmFtZXMiX3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29s
dW1uTmFtZXNTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTm90
ZXNTZXQ+JiBzZXROb3Rlcyhjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTm90ZXNTZXQpLCBwcm9wZXJ0eV9ub3Rlc19h
bHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJub3RlcyJfcywg
dmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxOb3Rlc1NldD4oKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUaW1lc3RhbXBTZXQ+JiBzZXRUaW1lc3Rh
bXAoZG91YmxlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgVGltZXN0YW1wU2V0KSwgcHJvcGVydHlfdGltZXN0YW1wX2FscmVhZHlfc2V0KTsK
LSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgdmFsdWUpOwot
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUaW1lc3RhbXBTZXQ+KCk7Ci0gICAgICAgIH0K
LQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVmFsdWVzU2V0PiYgc2V0VmFsdWVzKFJlZlB0cjxK
U09OOjpPYmplY3Q+IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgVmFsdWVzU2V0KSwgcHJvcGVydHlfdmFsdWVzX2FscmVhZHlfc2V0KTsKLSAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgdmFsdWUpOwotICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxWYWx1ZXNTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgUGF5bG9hZFNldD4mIHNldFBheWxvYWQoUmVmUHRyPEpTT046OlZh
bHVlPiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIFBheWxvYWRTZXQpLCBwcm9wZXJ0eV9wYXlsb2FkX2FscmVhZHlfc2V0KTsKLSAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgdmFsdWUpOwotICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxQYXlsb2FkU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVp
bGRlcjxTVEFURSB8IEVycm9yU2V0PiYgc2V0RXJyb3IoUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRhdGFiYXNlOjpFcnJvcj4gdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBFcnJvclNldCksIHByb3BlcnR5X2Vycm9yX2FscmVhZHlfc2V0
KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoImVycm9yIl9zLCB2YWx1ZSk7Ci0g
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEVycm9yU2V0PigpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgUmVmPFBhcmFtZXRlckJ1bmRsZT4gcmVsZWFzZSgpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9y
ZWFkeSk7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoUGFyYW1ldGVyQnVuZGxl
KSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0KSwgY2Fubm90X2Nhc3QpOwotCi0gICAgICAgICAgICBS
ZWY8SlNPTjo6T2JqZWN0PiBqc29uUmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsK
LSAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8
UGFyYW1ldGVyQnVuZGxlPio+KCZqc29uUmVzdWx0KSk7Ci0gICAgICAgICAgICByZXR1cm4gcmVz
dWx0OwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIC8qCi0gICAgICogU3ludGhldGljIGNvbnN0
cnVjdG9yOgotICAgICAqIFJlZjxQYXJhbWV0ZXJCdW5kbGU+IHJlc3VsdCA9IFBhcmFtZXRlckJ1
bmRsZTo6Y3JlYXRlKCkKLSAgICAgKiAgICAgLnNldERpcmVjdGlvbmFsaXR5KC4uLikKLSAgICAg
KiAgICAgLnNldEJ1dHRvbnMoLi4uKQotICAgICAqICAgICAuc2V0Q29sdW1uTmFtZXMoLi4uKQot
ICAgICAqICAgICAuc2V0Tm90ZXMoLi4uKQotICAgICAqICAgICAuc2V0VGltZXN0YW1wKC4uLikK
LSAgICAgKiAgICAgLnNldFZhbHVlcyguLi4pCi0gICAgICogICAgIC5zZXRQYXlsb2FkKC4uLikK
LSAgICAgKiAgICAgLnNldEVycm9yKC4uLikKLSAgICAgKiAgICAgLnJlbGVhc2UoKTsKLSAgICAg
Ki8KLSAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsK
LSAgICB9Ci19OwotCi19IC8vIFRlc3QKLQotCi0KLW5hbWVzcGFjZSBUZXN0SGVscGVycyB7Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIFByb3RvY29sRW51bVR5cGU+Ci1PcHRpb25hbDxQcm90b2NvbEVu
dW1UeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJik7Ci0KLS8vIEVu
dW1zIGluIHRoZSAnRGF0YWJhc2UnIERvbWFpbgotdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPiBwYXJzZUVudW1WYWx1ZUZyb21T
dHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPihjb25zdCBT
dHJpbmcmKTsKLXRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFi
YXNlOjpPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+IHBhcnNlRW51bVZh
bHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6T3B0aW9uYWxQYXJh
bWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5Pihjb25zdCBTdHJpbmcmKTsKLXRlbXBsYXRlPD4K
LU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQYXJhbWV0ZXJCdW5kbGU6
OkRpcmVjdGlvbmFsaXR5PiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90
b2NvbDo6RGF0YWJhc2U6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+KGNvbnN0IFN0
cmluZyYpOwotCi0vLyBFbnVtcyBpbiB0aGUgJ1Rlc3QnIERvbWFpbgotdGVtcGxhdGU8PgotT3B0
aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rp
b25hbGl0eT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRl
c3Q6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+KGNvbnN0IFN0cmluZyYpOwotCi19
IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotbmFtZXNwYWNlIFdURiB7Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKLQotLy8gSGFzaCBkZWNsYXJhdGlvbnMgaW4g
dGhlICdEYXRhYmFzZScgRG9tYWluCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgRGVmYXVsdEhhc2g8SW5z
cGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPiB7Ci0gICAgdHlwZWRlZiBJ
bnRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4gSGFzaDsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmpl
Y3RzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0KLSNpbmNsdWRl
IDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVz
cGFjZSBJbnNwZWN0b3IgewotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi1uYW1lc3BhY2UgVGVz
dEhlbHBlcnMgewotCi1zdGF0aWMgY29uc3QgY2hhciogY29uc3QgZW51bV9jb25zdGFudF92YWx1
ZXNbXSA9IHsKLSAgICAiTm9uZSIsCi0gICAgIkxlZnQiLAotICAgICJNaWRkbGUiLAotICAgICJS
aWdodCIsCi0gICAgIkxUUiIsCi0gICAgIlJUTCIsCi19OwotCi1TdHJpbmcgZ2V0RW51bUNvbnN0
YW50VmFsdWUoaW50IGNvZGUpIHsKLSAgICByZXR1cm4gZW51bV9jb25zdGFudF92YWx1ZXNbY29k
ZV07Ci19Ci0KLS8vIEVudW1zIGluIHRoZSAnRGF0YWJhc2UnIERvbWFpbgotdGVtcGxhdGU8Pgot
T3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPiBwYXJz
ZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNl
QnV0dG9uPihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQotewotICAgIHN0YXRpYyBjb25z
dCBzaXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6
OlByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b246Ok5vbmUsCi0gICAgICAgIChzaXplX3Qp
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uOjpMZWZ0LAotICAgICAg
ICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbjo6TWlk
ZGxlLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3Vz
ZUJ1dHRvbjo6UmlnaHQsCi0gICAgfTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDQ7ICsr
aSkKLSAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2Nv
bnN0YW50VmFsdWVzW2ldXSkKLSAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uKWNvbnN0YW50VmFsdWVzW2ldOwotCi0gICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKLX0KLQotdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90
b2NvbDo6RGF0YWJhc2U6Ok9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4g
cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpP
cHRpb25hbFBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+KGNvbnN0IFN0cmluZyYgcHJv
dG9jb2xTdHJpbmcpCi17Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1td
ID0gewotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpPcHRp
b25hbFBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk6OkxUUiwKLSAgICAgICAgKHNpemVf
dClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU6
OkRpcmVjdGlvbmFsaXR5OjpSVEwsCi0gICAgfTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IDI7ICsraSkKLSAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFs
dWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGF0YWJhc2U6Ok9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0
eSljb25zdGFudFZhbHVlc1tpXTsKLQotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLXRl
bXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQYXJhbWV0
ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5PiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+
KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCi17Ci0gICAgc3RhdGljIGNvbnN0IHNpemVf
dCBjb25zdGFudFZhbHVlc1tdID0gewotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRhdGFiYXNlOjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5OjpMVFIsCi0gICAg
ICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlBhcmFtZXRlckJ1bmRs
ZTo6RGlyZWN0aW9uYWxpdHk6OlJUTCwKLSAgICB9OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgMjsgKytpKQotICAgICAgICBpZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92
YWx1ZXNbY29uc3RhbnRWYWx1ZXNbaV1dKQotICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6
OlByb3RvY29sOjpEYXRhYmFzZTo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eSljb25z
dGFudFZhbHVlc1tpXTsKLQotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLQotLy8gRW51
bXMgaW4gdGhlICdUZXN0JyBEb21haW4KLXRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlRlc3Q6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+IHBhcnNlRW51
bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpQYXJhbWV0ZXJCdW5k
bGU6OkRpcmVjdGlvbmFsaXR5Pihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQotewotICAg
IHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsKLSAgICAgICAgKHNpemVf
dClJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFs
aXR5OjpMVFIsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UGFy
YW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eTo6UlRMLAotICAgIH07Ci0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCAyOyArK2kpCi0gICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVt
X2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCi0gICAgICAgICAgICByZXR1cm4g
KEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxp
dHkpY29uc3RhbnRWYWx1ZXNbaV07Ci0KLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi0K
LX0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCi0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2Nv
bAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xPYmplY3RzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3Bh
dGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0
aW9uLW9iamVjdC10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tl
bmREaXNwYXRjaGVycy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQotCi0KLW5hbWVz
cGFjZSBJbnNwZWN0b3IgewotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmlnLmgiCi0j
aW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgIlRl
c3RQcm90b2NvbEludGVybmFsLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3Rv
ciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbi5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1k
ZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KLQot
X19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xDb25maWd1cmF0aW9uLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlw
ZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIK
LQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2Nv
bEJhY2tlbmREaXNwYXRjaGVycy5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRl
RGlzcGF0Y2hhYmxlQWdlbnQuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxl
SW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3Rv
cjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KLXsKLSAgICBB
dWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotfQotCi0tIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xs
ZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2Vs
ZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2Nv
bnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWRl
YWxsb2MKLXsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwu
aCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDx3
dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLSMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBl
LWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLSNp
bXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KLQotCi1AY2xhc3Mg
VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcjsKLUBjbGFzcyBUZXN0UHJvdG9jb2xEYXRhYmFzZU9w
dGlvbmFsUGFyYW1ldGVyQnVuZGxlOwotQGNsYXNzIFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1l
dGVyQnVuZGxlOwotQGNsYXNzIFRlc3RQcm90b2NvbERhdGFiYXNlT2JqZWN0V2l0aFByb3BlcnR5
TmFtZUNvbmZsaWN0czsKLUBjbGFzcyBUZXN0UHJvdG9jb2xEYXRhYmFzZUR1bW15T2JqZWN0Owot
QGNsYXNzIFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGU7Ci0KLXR5cGVkZWYgTlNfRU5V
TShOU0ludGVnZXIsIFRlc3RQcm90b2NvbFBsYXRmb3JtKSB7Ci0gICAgVGVzdFByb3RvY29sUGxh
dGZvcm1BbGwsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljLAotICAgIFRlc3RQcm90
b2NvbFBsYXRmb3JtSU9TLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1MsCi19OwotCi0K
LXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VCdXR0
b24pIHsKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9uTm9uZSwKLSAgICBUZXN0
UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9uTGVmdCwKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFz
ZU1vdXNlQnV0dG9uTWlkZGxlLAotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VCdXR0b25S
aWdodCwKLX07Ci0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbERhdGFi
YXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSkgewotICAgIFRlc3RQcm90
b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eUxUUiwKLSAg
ICBUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxp
dHlSVEwsCi19OwotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xEYXRh
YmFzZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5KSB7Ci0gICAgVGVzdFByb3RvY29sRGF0
YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eUxUUiwKLSAgICBUZXN0UHJvdG9jb2xE
YXRhYmFzZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5UlRMLAotfTsKLQotdHlwZWRlZiBO
U19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZURpcmVjdGlv
bmFsaXR5KSB7Ci0gICAgVGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFs
aXR5TFRSLAotICAgIFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0
eVJUTCwKLX07Ci0KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1A
aW50ZXJmYWNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgOiBSV0lQcm90b2NvbEpTT05PYmpl
Y3QKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmlu
ZyAqLCBpZD4gKilwYXlsb2FkOwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmpl
Y3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7Ci0tIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZTooaW50KWNvZGU7Ci0vKiBy
ZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKm1lc3NhZ2U7
Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQgY29kZTsK
LUBlbmQKLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJm
YWNlIFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUgOiBSV0lQcm90
b2NvbEpTT05PYmplY3QKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlv
bmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkOwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
UHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7Ci0vKiBv
cHRpb25hbCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNBcnJheS8qPE5TU3RyaW5n
PiovICpjb2x1bW5OYW1lczsKLS8qIG9wdGlvbmFsICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBj
b3B5KSBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmJ1dHRvbnM7Ci0vKiBvcHRpb25hbCAqLyBAcHJv
cGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFy
YW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHkgZGlyZWN0aW9uYWxpdHk7Ci0vKiBvcHRpb25hbCAq
LyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKm5vdGVzOwotLyogb3B0aW9u
YWwgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgZG91YmxlIHRpbWVzdGFtcDsKLS8q
IG9wdGlvbmFsICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIFJXSVByb3RvY29sSlNP
Tk9iamVjdCAqdmFsdWVzOwotLyogb3B0aW9uYWwgKi8gQHByb3BlcnR5IChub25hdG9taWMsIHJl
dGFpbikgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkOwotLyogb3B0aW9uYWwgKi8gQHBy
b3BlcnR5IChub25hdG9taWMsIHJldGFpbikgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqZXJy
b3I7Ci0vKiBvcHRpb25hbCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNBcnJheS8q
PFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I+Ki8gKmVycm9yTGlzdDsKLUBlbmQKLQotX19hdHRy
aWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2Nv
bERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlIDogUldJUHJvdG9jb2xKU09OT2JqZWN0Ci0tIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICop
cGF5bG9hZDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90
b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29s
dW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWNvbHVtbk5hbWVzIGJ1dHRvbnM6KE5T
QXJyYXkvKjxOU1N0cmluZz4qLyAqKWJ1dHRvbnMgZGlyZWN0aW9uYWxpdHk6KFRlc3RQcm90b2Nv
bERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHkpZGlyZWN0aW9uYWxpdHkgbm90
ZXM6KE5TU3RyaW5nICopbm90ZXMgdGltZXN0YW1wOihkb3VibGUpdGltZXN0YW1wIHZhbHVlczoo
UldJUHJvdG9jb2xKU09OT2JqZWN0ICopdmFsdWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9i
amVjdCAqKXBheWxvYWQgZXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKillcnJvciBl
cnJvckxpc3Q6KE5TQXJyYXkvKjxUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yPiovICopZXJyb3JM
aXN0OwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TQXJyYXkv
KjxOU1N0cmluZz4qLyAqY29sdW1uTmFtZXM7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5v
bmF0b21pYywgY29weSkgTlNBcnJheS8qPE5TU3RyaW5nPiovICpidXR0b25zOwotLyogcmVxdWly
ZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgVGVzdFByb3RvY29sRGF0YWJhc2VQ
YXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSBkaXJlY3Rpb25hbGl0eTsKLS8qIHJlcXVpcmVk
ICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqbm90ZXM7Ci0vKiByZXF1
aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBkb3VibGUgdGltZXN0YW1wOwot
LyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgUldJUHJvdG9jb2xK
U09OT2JqZWN0ICp2YWx1ZXM7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywg
cmV0YWluKSBSV0lQcm90b2NvbEpTT05PYmplY3QgKnBheWxvYWQ7Ci0vKiByZXF1aXJlZCAqLyBA
cHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluKSBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpl
cnJvcjsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU0FycmF5
Lyo8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4qLyAqZXJyb3JMaXN0OwotQGVuZAotCi1fX2F0
dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3Rv
Y29sRGF0YWJhc2VPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzIDogUldJUHJvdG9jb2xK
U09OT2JqZWN0Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8
TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3Rv
Y29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OwotLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoSW50ZWdlcjooTlNTdHJpbmcgKilpbnRlZ2VyIGFycmF5OihOU1N0cmlu
ZyAqKWFycmF5IHN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcgdmFsdWU6KE5TU3RyaW5nICopdmFs
dWUgb2JqZWN0OihOU1N0cmluZyAqKW9iamVjdDsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAo
bm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqaW50ZWdlcjsKLS8qIHJlcXVpcmVkICovIEBwcm9w
ZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqYXJyYXk7Ci0vKiByZXF1aXJlZCAqLyBA
cHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKnN0cmluZzsKLS8qIHJlcXVpcmVk
ICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqdmFsdWU7Ci0vKiByZXF1
aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKm9iamVjdDsKLUBl
bmQKLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNl
IFRlc3RQcm90b2NvbERhdGFiYXNlRHVtbXlPYmplY3QgOiBSV0lQcm90b2NvbEpTT05PYmplY3QK
LS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAq
LCBpZD4gKilwYXlsb2FkOwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6
KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7Ci1AZW5kCi0KLV9fYXR0cmlidXRl
X18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUZXN0
UGFyYW1ldGVyQnVuZGxlIDogUldJUHJvdG9jb2xKU09OT2JqZWN0Ci0tIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsK
LS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05P
YmplY3QgKilqc29uT2JqZWN0OwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRGlyZWN0aW9uYWxp
dHk6KFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSlkaXJlY3Rp
b25hbGl0eSBidXR0b25zOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilidXR0b25zIGNvbHVtbk5h
bWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcyBub3RlczooTlNTdHJpbmcg
Kilub3RlcyB0aW1lc3RhbXA6KGRvdWJsZSl0aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90b2NvbEpT
T05PYmplY3QgKil2YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9h
ZCBlcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKWVycm9yOwotLyogcmVxdWlyZWQg
Ki8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgVGVzdFByb3RvY29sVGVzdFBhcmFtZXRl
ckJ1bmRsZURpcmVjdGlvbmFsaXR5IGRpcmVjdGlvbmFsaXR5OwotLyogcmVxdWlyZWQgKi8gQHBy
b3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqYnV0dG9uczsK
LS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU0FycmF5Lyo8TlNT
dHJpbmc+Ki8gKmNvbHVtbk5hbWVzOwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9t
aWMsIGNvcHkpIE5TU3RyaW5nICpub3RlczsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9u
YXRvbWljLCBhc3NpZ24pIGRvdWJsZSB0aW1lc3RhbXA7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVy
dHkgKG5vbmF0b21pYywgcmV0YWluKSBSV0lQcm90b2NvbEpTT05PYmplY3QgKnZhbHVlczsKLS8q
IHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIFJXSVByb3RvY29sSlNP
Tk9iamVjdCAqcGF5bG9hZDsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBy
ZXRhaW4pIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKmVycm9yOwotQGVuZAotCi0KLQotCi0K
LQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2Jq
ZWN0cy5oPgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9y
dCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRD
b3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8d3RmL0pTT05W
YWx1ZXMuaD4KLQotCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJU
ZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29u
dmVyc2lvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IE9iakNFbnVtVHlwZT4KLU9wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5n
KGNvbnN0IFN0cmluZyYgdmFsdWUpOwotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmco
VGVzdFByb3RvY29sUGxhdGZvcm0gdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAg
Y2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDoKLSAgICAgICAgcmV0dXJuICJhbGwiX3M7Ci0g
ICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM6Ci0gICAgICAgIHJldHVybiAiZ2Vu
ZXJpYyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOgotICAgICAgICByZXR1
cm4gImlvcyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M6Ci0gICAgICAg
IHJldHVybiAibWFjb3MiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9u
YWw8VGVzdFByb3RvY29sUGxhdGZvcm0+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcm
IHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiYWxsIikKLSAgICAgICAgcmV0dXJuIFRlc3RQ
cm90b2NvbFBsYXRmb3JtQWxsOwotICAgIGlmICh2YWx1ZSA9PSAiZ2VuZXJpYyIpCi0gICAgICAg
IHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM7Ci0gICAgaWYgKHZhbHVlID09ICJp
b3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1JT1M7Ci0gICAgaWYgKHZh
bHVlID09ICJtYWNvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09T
OwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLQotaW5saW5lIFN0cmluZyB0b1Byb3Rv
Y29sU3RyaW5nKFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VCdXR0b24gdmFsdWUpCi17Ci0gICAg
c3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9u
Tm9uZToKLSAgICAgICAgcmV0dXJuICJOb25lIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0
YWJhc2VNb3VzZUJ1dHRvbkxlZnQ6Ci0gICAgICAgIHJldHVybiAiTGVmdCJfczsKLSAgICBjYXNl
IFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VCdXR0b25NaWRkbGU6Ci0gICAgICAgIHJldHVybiAi
TWlkZGxlIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VNb3VzZUJ1dHRvblJpZ2h0
OgotICAgICAgICByZXR1cm4gIlJpZ2h0Il9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5s
aW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VCdXR0b24+IGZyb21Qcm90b2Nv
bFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiTm9uZSIp
Ci0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9uTm9uZTsKLSAg
ICBpZiAodmFsdWUgPT0gIkxlZnQiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJh
c2VNb3VzZUJ1dHRvbkxlZnQ7Ci0gICAgaWYgKHZhbHVlID09ICJNaWRkbGUiKQotICAgICAgICBy
ZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VNb3VzZUJ1dHRvbk1pZGRsZTsKLSAgICBpZiAodmFs
dWUgPT0gIlJpZ2h0IikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VC
dXR0b25SaWdodDsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi1pbmxpbmUgU3RyaW5n
IHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1
bmRsZURpcmVjdGlvbmFsaXR5IHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNh
c2UgVGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFs
aXR5TFRSOgotICAgICAgICByZXR1cm4gIkxUUiJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERh
dGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eVJUTDoKLSAgICAgICAg
cmV0dXJuICJSVEwiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8
VGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5
PiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFs
dWUgPT0gIkxUUiIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFs
UGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHlMVFI7Ci0gICAgaWYgKHZhbHVlID09ICJSVEwi
KQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1
bmRsZURpcmVjdGlvbmFsaXR5UlRMOwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLWlu
bGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRl
ckJ1bmRsZURpcmVjdGlvbmFsaXR5IHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAg
IGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eUxU
UjoKLSAgICAgICAgcmV0dXJuICJMVFIiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFz
ZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5UlRMOgotICAgICAgICByZXR1cm4gIlJUTCJf
czsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xE
YXRhYmFzZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5PiBmcm9tUHJvdG9jb2xTdHJpbmco
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gIkxUUiIpCi0gICAgICAg
IHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5
TFRSOwotICAgIGlmICh2YWx1ZSA9PSAiUlRMIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2Nv
bERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHlSVEw7Ci0gICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKLX0KLQotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFBy
b3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5IHZhbHVlKQotewotICAgIHN3
aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZURp
cmVjdGlvbmFsaXR5TFRSOgotICAgICAgICByZXR1cm4gIkxUUiJfczsKLSAgICBjYXNlIFRlc3RQ
cm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eVJUTDoKLSAgICAgICAgcmV0
dXJuICJSVEwiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVz
dFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5PiBmcm9tUHJvdG9jb2xT
dHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gIkxUUiIpCi0g
ICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxp
dHlMVFI7Ci0gICAgaWYgKHZhbHVlID09ICJSVEwiKQotICAgICAgICByZXR1cm4gVGVzdFByb3Rv
Y29sVGVzdFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5UlRMOwotICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29s
VHlwZVBhcnNlci5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVj
dFByaXZhdGUuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGludGVyZmFjZSBU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKERhdGFiYXNlRG9tYWluKQotCi0rICh2b2lkKV9w
YXJzZUVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqKW91dFZhbHVlIGZyb21QYXls
b2FkOihpZClwYXlsb2FkOwotKyAodm9pZClfcGFyc2VFcnJvckxpc3Q6KE5TQXJyYXkvKjxUZXN0
UHJvdG9jb2xEYXRhYmFzZUVycm9yPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXls
b2FkOwotKyAodm9pZClfcGFyc2VNb3VzZUJ1dHRvbjooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJv
bVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZU9wdGlvbmFsUGFyYW1ldGVyQnVu
ZGxlOihUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlICoqKW91dFZh
bHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotKyAodm9pZClfcGFyc2VQYXJhbWV0ZXJCdW5k
bGU6KFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlICoqKW91dFZhbHVlIGZyb21Q
YXlsb2FkOihpZClwYXlsb2FkOwotKyAodm9pZClfcGFyc2VPYmplY3RXaXRoUHJvcGVydHlOYW1l
Q29uZmxpY3RzOihUZXN0UHJvdG9jb2xEYXRhYmFzZU9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25m
bGljdHMgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJz
ZUR1bW15T2JqZWN0OihUZXN0UHJvdG9jb2xEYXRhYmFzZUR1bW15T2JqZWN0ICoqKW91dFZhbHVl
IGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotCi1AZW5kCi1AaW50ZXJmYWNlIFRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucyAoVGVzdERvbWFpbikKLQotKyAodm9pZClfcGFyc2VQYXJhbWV0ZXJC
dW5kbGU6KFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGUgKiopb3V0VmFsdWUgZnJvbVBh
eWxvYWQ6KGlkKXBheWxvYWQ7Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucyAoRGF0YWJhc2VEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlRXJyb3I6
KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBh
eWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0Rp
Y3Rpb25hcnkgY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbERhdGFiYXNl
RXJyb3IgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKLX0KLQotKyAodm9pZClfcGFy
c2VFcnJvckxpc3Q6KE5TQXJyYXkvKjxUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yPiovICoqKW91
dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9CQURfVFlQRShwYXlsb2FkLCBbTlNBcnJheS8qPFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I+
Ki8gY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSAoTlNBcnJheS8qPFRlc3RQcm90b2NvbERhdGFi
YXNlRXJyb3I+Ki8gKilwYXlsb2FkOwotfQotCi0rICh2b2lkKV9wYXJzZU1vdXNlQnV0dG9uOihO
U051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TU3RyaW5nIGNsYXNzXSk7Ci0gICAg
T3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VNb3VzZUJ1dHRvbj4gcmVzdWx0ID0gSW5zcGVj
dG9yOjpmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sRGF0YWJhc2VNb3VzZUJ1dHRvbj4o
cGF5bG9hZCk7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfRU5VTV9WQUxVRShyZXN1bHQs
IEAiTW91c2VCdXR0b24iKTsKLSAgICAqb3V0VmFsdWUgPSBAKHJlc3VsdC52YWx1ZSgpKTsKLX0K
LQotKyAodm9pZClfcGFyc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTooVGVzdFByb3RvY29sRGF0
YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZSAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQp
cGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05T
RGljdGlvbmFyeSBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sRGF0YWJh
c2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZSBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRd
OwotfQotCi0rICh2b2lkKV9wYXJzZVBhcmFtZXRlckJ1bmRsZTooVGVzdFByb3RvY29sRGF0YWJh
c2VQYXJhbWV0ZXJCdW5kbGUgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsK
LSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkg
Y2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVy
QnVuZGxlIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07Ci19Ci0KLSsgKHZvaWQpX3Bh
cnNlT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0czooVGVzdFByb3RvY29sRGF0YWJhc2VP
YmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihp
ZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBb
TlNEaWN0aW9uYXJ5IGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xEYXRh
YmFzZU9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHMgYWxsb2NdIGluaXRXaXRoUGF5bG9h
ZDpwYXlsb2FkXTsKLX0KLQotKyAodm9pZClfcGFyc2VEdW1teU9iamVjdDooVGVzdFByb3RvY29s
RGF0YWJhc2VEdW1teU9iamVjdCAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAot
ewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFy
eSBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sRGF0YWJhc2VEdW1teU9i
amVjdCBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOwotfQotCi1AZW5kCi1AaW1wbGVt
ZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChUZXN0RG9tYWluKQotCi0rICh2
b2lkKV9wYXJzZVBhcmFtZXRlckJ1bmRsZTooVGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRs
ZSAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOwotICAgICpv
dXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZSBhbGxvY10gaW5pdFdp
dGhQYXlsb2FkOnBheWxvYWRdOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5
cGVzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlv
bi1vYmplY3QtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3Rv
Y29sSlNPTk9iamVjdFByaXZhdGUuaD4KLSNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW1w
b3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0K
LUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yCi0KLS0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlk
PiAqKXBheWxvYWQKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAg
cmV0dXJuIG5pbDsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFko
cGF5bG9hZFtAIm1lc3NhZ2UiXSwgQCJtZXNzYWdlIik7Ci0gICAgc2VsZi5tZXNzYWdlID0gcGF5
bG9hZFtAIm1lc3NhZ2UiXTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJP
UEVSVFkocGF5bG9hZFtAImNvZGUiXSwgQCJjb2RlIik7Ci0gICAgc2VsZi5jb2RlID0gW3BheWxv
YWRbQCJjb2RlIl0gaW50ZWdlclZhbHVlXTsKLQotICAgIHJldHVybiBzZWxmOwotfQotLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAq
KW9iamVjdAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0Oltv
YmplY3QgdG9KU09OT2JqZWN0XS5nZXQoKV0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAg
cmV0dXJuIHNlbGY7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3Ry
aW5nICopbWVzc2FnZSBjb2RlOihpbnQpY29kZQotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIg
aW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9S
RVFVSVJFRF9QUk9QRVJUWShtZXNzYWdlLCBAIm1lc3NhZ2UiKTsKLQotICAgIHNlbGYubWVzc2Fn
ZSA9IG1lc3NhZ2U7Ci0gICAgc2VsZi5jb2RlID0gY29kZTsKLQotICAgIHJldHVybiBzZWxmOwot
fQotCi0tICh2b2lkKXNldE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZQotewotICAgIFtzdXBl
ciBzZXRTdHJpbmc6bWVzc2FnZSBmb3JLZXk6QCJtZXNzYWdlIl07Ci19Ci0KLS0gKE5TU3RyaW5n
ICopbWVzc2FnZQotewotICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAibWVzc2FnZSJd
OwotfQotCi0tICh2b2lkKXNldENvZGU6KGludCljb2RlCi17Ci0gICAgW3N1cGVyIHNldEludGVn
ZXI6Y29kZSBmb3JLZXk6QCJjb2RlIl07Ci19Ci0KLS0gKGludCljb2RlCi17Ci0gICAgcmV0dXJu
IFtzdXBlciBpbnRlZ2VyRm9yS2V5OkAiY29kZSJdOwotfQotCi1AZW5kCi0KLUBpbXBsZW1lbnRh
dGlvbiBUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlCi0KLS0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5n
ICosIGlkPiAqKXBheWxvYWQKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAg
ICAgICAgcmV0dXJuIG5pbDsKLQotICAgIHNlbGYuY29sdW1uTmFtZXMgPSBwYXlsb2FkW0AiY29s
dW1uTmFtZXMiXTsKLQotICAgIHNlbGYuYnV0dG9ucyA9IHBheWxvYWRbQCJidXR0b25zIl07Ci0K
LSAgICBPcHRpb25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxl
RGlyZWN0aW9uYWxpdHk+IGRpcmVjdGlvbmFsaXR5ID0gZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQ
cm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eT4ocGF5
bG9hZFtAImRpcmVjdGlvbmFsaXR5Il0pOwotICAgIGlmIChkaXJlY3Rpb25hbGl0eSkKLSAgICAg
ICAgc2VsZi5kaXJlY3Rpb25hbGl0eSA9IGRpcmVjdGlvbmFsaXR5LnZhbHVlKCk7Ci0KLSAgICBz
ZWxmLm5vdGVzID0gcGF5bG9hZFtAIm5vdGVzIl07Ci0KLSAgICBzZWxmLnRpbWVzdGFtcCA9IFtw
YXlsb2FkW0AidGltZXN0YW1wIl0gZG91YmxlVmFsdWVdOwotCi0gICAgc2VsZi52YWx1ZXMgPSBw
YXlsb2FkW0AidmFsdWVzIl07Ci0KLSAgICBzZWxmLnBheWxvYWQgPSBwYXlsb2FkW0AicGF5bG9h
ZCJdOwotCi0gICAgc2VsZi5lcnJvciA9IFtbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBhbGxv
Y10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRbQCJlcnJvciJdXTsKLQotICAgIHNlbGYuZXJyb3JM
aXN0ID0gb2JqY0FycmF5RnJvbVBheWxvYWQ8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4ocGF5
bG9hZFtAImVycm9yTGlzdCJdKTsKLQotICAgIHJldHVybiBzZWxmOwotfQotLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9iamVj
dAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmplY3Qg
dG9KU09OT2JqZWN0XS5nZXQoKV0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgcmV0dXJu
IHNlbGY7Ci19Ci0KLS0gKHZvaWQpc2V0Q29sdW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4q
LyAqKWNvbHVtbk5hbWVzCi17Ci0gICAgW3N1cGVyIHNldEpTT05BcnJheTp0b0pTT05TdHJpbmdB
cnJheShjb2x1bW5OYW1lcykgZm9yS2V5OkAiY29sdW1uTmFtZXMiXTsKLX0KLQotLSAoTlNBcnJh
eS8qPE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMKLXsKLSAgICByZXR1cm4gdG9PYmpDU3RyaW5n
QXJyYXkoW3N1cGVyIEpTT05BcnJheUZvcktleTpAImNvbHVtbk5hbWVzIl0pOwotfQotCi0tICh2
b2lkKXNldEJ1dHRvbnM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWJ1dHRvbnMKLXsKLSAgICBb
c3VwZXIgc2V0SlNPTkFycmF5OnRvSlNPTlN0cmluZ0FycmF5KGJ1dHRvbnMpIGZvcktleTpAImJ1
dHRvbnMiXTsKLX0KLQotLSAoTlNBcnJheS8qPE5TU3RyaW5nPiovICopYnV0dG9ucwotewotICAg
IHJldHVybiB0b09iakNTdHJpbmdBcnJheShbc3VwZXIgSlNPTkFycmF5Rm9yS2V5OkAiYnV0dG9u
cyJdKTsKLX0KLQotLSAodm9pZClzZXREaXJlY3Rpb25hbGl0eTooVGVzdFByb3RvY29sRGF0YWJh
c2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5KWRpcmVjdGlvbmFsaXR5Ci17
Ci0gICAgW3N1cGVyIHNldFN0cmluZzp0b1Byb3RvY29sU3RyaW5nKGRpcmVjdGlvbmFsaXR5KSBm
b3JLZXk6QCJkaXJlY3Rpb25hbGl0eSJdOwotfQotCi0tIChUZXN0UHJvdG9jb2xEYXRhYmFzZU9w
dGlvbmFsUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHkpZGlyZWN0aW9uYWxpdHkKLXsKLSAg
ICByZXR1cm4gZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQ
YXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eT4oW3N1cGVyIHN0cmluZ0ZvcktleTpAImRpcmVj
dGlvbmFsaXR5Il0pLnZhbHVlKCk7Ci19Ci0KLS0gKHZvaWQpc2V0Tm90ZXM6KE5TU3RyaW5nICop
bm90ZXMKLXsKLSAgICBbc3VwZXIgc2V0U3RyaW5nOm5vdGVzIGZvcktleTpAIm5vdGVzIl07Ci19
Ci0KLS0gKE5TU3RyaW5nICopbm90ZXMKLXsKLSAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0Zvcktl
eTpAIm5vdGVzIl07Ci19Ci0KLS0gKHZvaWQpc2V0VGltZXN0YW1wOihkb3VibGUpdGltZXN0YW1w
Ci17Ci0gICAgW3N1cGVyIHNldERvdWJsZTp0aW1lc3RhbXAgZm9yS2V5OkAidGltZXN0YW1wIl07
Ci19Ci0KLS0gKGRvdWJsZSl0aW1lc3RhbXAKLXsKLSAgICByZXR1cm4gW3N1cGVyIGRvdWJsZUZv
cktleTpAInRpbWVzdGFtcCJdOwotfQotCi0tICh2b2lkKXNldFZhbHVlczooUldJUHJvdG9jb2xK
U09OT2JqZWN0ICopdmFsdWVzCi17Ci0gICAgW3N1cGVyIHNldE9iamVjdDp2YWx1ZXMgZm9yS2V5
OkAidmFsdWVzIl07Ci19Ci0KLS0gKFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcwotewot
ICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb2JqZWN0ID0gW3N1cGVyIG9iamVjdEZvcktleTpA
InZhbHVlcyJdOwotICAgIGlmICghb2JqZWN0KQotICAgICAgICByZXR1cm4gbmlsOwotICAgIHJl
dHVybiBbW1JXSVByb3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0Oltb
c3VwZXIgb2JqZWN0Rm9yS2V5OkAidmFsdWVzIl0gdG9KU09OT2JqZWN0XS5nZXQoKV07Ci19Ci0K
LS0gKHZvaWQpc2V0UGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZAotewot
ICAgIFtzdXBlciBzZXRPYmplY3Q6cGF5bG9hZCBmb3JLZXk6QCJwYXlsb2FkIl07Ci19Ci0KLS0g
KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQKLXsKLSAgICBSV0lQcm90b2NvbEpTT05P
YmplY3QgKm9iamVjdCA9IFtzdXBlciBvYmplY3RGb3JLZXk6QCJwYXlsb2FkIl07Ci0gICAgaWYg
KCFvYmplY3QpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgcmV0dXJuIFtbUldJUHJvdG9jb2xK
U09OT2JqZWN0IGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6W1tzdXBlciBvYmplY3RGb3JLZXk6
QCJwYXlsb2FkIl0gdG9KU09OT2JqZWN0XS5nZXQoKV07Ci19Ci0KLS0gKHZvaWQpc2V0RXJyb3I6
KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKillcnJvcgotewotICAgIFtzdXBlciBzZXRPYmpl
Y3Q6ZXJyb3IgZm9yS2V5OkAiZXJyb3IiXTsKLX0KLQotLSAoVGVzdFByb3RvY29sRGF0YWJhc2VF
cnJvciAqKWVycm9yCi17Ci0gICAgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvYmplY3QgPSBbc3Vw
ZXIgb2JqZWN0Rm9yS2V5OkAiZXJyb3IiXTsKLSAgICBpZiAoIW9iamVjdCkKLSAgICAgICAgcmV0
dXJuIG5pbDsKLSAgICByZXR1cm4gW1tUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGFsbG9jXSBp
bml0V2l0aEpTT05PYmplY3Q6W1tzdXBlciBvYmplY3RGb3JLZXk6QCJlcnJvciJdIHRvSlNPTk9i
amVjdF0uZ2V0KCldOwotfQotCi0tICh2b2lkKXNldEVycm9yTGlzdDooTlNBcnJheS8qPFRlc3RQ
cm90b2NvbERhdGFiYXNlRXJyb3I+Ki8gKillcnJvckxpc3QKLXsKLSAgICBUSFJPV19FWENFUFRJ
T05fRk9SX0JBRF9UWVBFX0lOX0FSUkFZKGVycm9yTGlzdCwgW1Rlc3RQcm90b2NvbERhdGFiYXNl
RXJyb3IgY2xhc3NdKTsKLSAgICBbc3VwZXIgc2V0SlNPTkFycmF5OnRvSlNPTk9iamVjdEFycmF5
KGVycm9yTGlzdCkgZm9yS2V5OkAiZXJyb3JMaXN0Il07Ci19Ci0KLS0gKE5TQXJyYXkvKjxUZXN0
UHJvdG9jb2xEYXRhYmFzZUVycm9yPiovICopZXJyb3JMaXN0Ci17Ci0gICAgcmV0dXJuIHRvT2Jq
Q0FycmF5PFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I+KFtzdXBlciBKU09OQXJyYXlGb3JLZXk6
QCJlcnJvckxpc3QiXSk7Ci19Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2Nv
bERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlCi0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxv
YWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQKLXsKLSAg
ICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImNvbHVtbk5h
bWVzIl0sIEAiY29sdW1uTmFtZXMiKTsKLSAgICBzZWxmLmNvbHVtbk5hbWVzID0gcGF5bG9hZFtA
ImNvbHVtbk5hbWVzIl07Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BF
UlRZKHBheWxvYWRbQCJidXR0b25zIl0sIEAiYnV0dG9ucyIpOwotICAgIHNlbGYuYnV0dG9ucyA9
IHBheWxvYWRbQCJidXR0b25zIl07Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVE
X1BST1BFUlRZKHBheWxvYWRbQCJkaXJlY3Rpb25hbGl0eSJdLCBAImRpcmVjdGlvbmFsaXR5Iik7
Ci0gICAgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rp
b25hbGl0eT4gZGlyZWN0aW9uYWxpdHkgPSBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29s
RGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eT4ocGF5bG9hZFtAImRpcmVjdGlv
bmFsaXR5Il0pOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX0VOVU1fVkFMVUUoZGlyZWN0
aW9uYWxpdHksIEAiZGlyZWN0aW9uYWxpdHkiKTsKLSAgICBzZWxmLmRpcmVjdGlvbmFsaXR5ID0g
ZGlyZWN0aW9uYWxpdHkudmFsdWUoKTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlS
RURfUFJPUEVSVFkocGF5bG9hZFtAIm5vdGVzIl0sIEAibm90ZXMiKTsKLSAgICBzZWxmLm5vdGVz
ID0gcGF5bG9hZFtAIm5vdGVzIl07Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVE
X1BST1BFUlRZKHBheWxvYWRbQCJ0aW1lc3RhbXAiXSwgQCJ0aW1lc3RhbXAiKTsKLSAgICBzZWxm
LnRpbWVzdGFtcCA9IFtwYXlsb2FkW0AidGltZXN0YW1wIl0gZG91YmxlVmFsdWVdOwotCi0gICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AidmFsdWVzIl0s
IEAidmFsdWVzIik7Ci0gICAgc2VsZi52YWx1ZXMgPSBwYXlsb2FkW0AidmFsdWVzIl07Ci0KLSAg
ICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJwYXlsb2Fk
Il0sIEAicGF5bG9hZCIpOwotICAgIHNlbGYucGF5bG9hZCA9IHBheWxvYWRbQCJwYXlsb2FkIl07
Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJl
cnJvciJdLCBAImVycm9yIik7Ci0gICAgc2VsZi5lcnJvciA9IFtbVGVzdFByb3RvY29sRGF0YWJh
c2VFcnJvciBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRbQCJlcnJvciJdXTsKLQotICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImVycm9yTGlz
dCJdLCBAImVycm9yTGlzdCIpOwotICAgIHNlbGYuZXJyb3JMaXN0ID0gb2JqY0FycmF5RnJvbVBh
eWxvYWQ8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4ocGF5bG9hZFtAImVycm9yTGlzdCJdKTsK
LQotICAgIHJldHVybiBzZWxmOwotfQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xP
YmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9iamVjdAotewotICAgIGlmICghKHNlbGYg
PSBbc3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmplY3QgdG9KU09OT2JqZWN0XS5nZXQoKV0p
KQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aENvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1
bW5OYW1lcyBidXR0b25zOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilidXR0b25zIGRpcmVjdGlv
bmFsaXR5OihUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5
KWRpcmVjdGlvbmFsaXR5IG5vdGVzOihOU1N0cmluZyAqKW5vdGVzIHRpbWVzdGFtcDooZG91Ymxl
KXRpbWVzdGFtcCB2YWx1ZXM6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcyBwYXlsb2Fk
OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilwYXlsb2FkIGVycm9yOihUZXN0UHJvdG9jb2xEYXRh
YmFzZUVycm9yICopZXJyb3IgZXJyb3JMaXN0OihOU0FycmF5Lyo8VGVzdFByb3RvY29sRGF0YWJh
c2VFcnJvcj4qLyAqKWVycm9yTGlzdAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0p
KQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJF
RF9QUk9QRVJUWShjb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOwotICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkoYnV0dG9ucywgQCJidXR0b25zIik7Ci0gICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShub3RlcywgQCJub3RlcyIpOwotICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkodmFsdWVzLCBAInZhbHVlcyIp
OwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZCwgQCJw
YXlsb2FkIik7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShlcnJv
ciwgQCJlcnJvciIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFko
ZXJyb3JMaXN0LCBAImVycm9yTGlzdCIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZ
UEVfSU5fQVJSQVkoZXJyb3JMaXN0LCBbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBjbGFzc10p
OwotCi0gICAgc2VsZi5jb2x1bW5OYW1lcyA9IGNvbHVtbk5hbWVzOwotICAgIHNlbGYuYnV0dG9u
cyA9IGJ1dHRvbnM7Ci0gICAgc2VsZi5kaXJlY3Rpb25hbGl0eSA9IGRpcmVjdGlvbmFsaXR5Owot
ICAgIHNlbGYubm90ZXMgPSBub3RlczsKLSAgICBzZWxmLnRpbWVzdGFtcCA9IHRpbWVzdGFtcDsK
LSAgICBzZWxmLnZhbHVlcyA9IHZhbHVlczsKLSAgICBzZWxmLnBheWxvYWQgPSBwYXlsb2FkOwot
ICAgIHNlbGYuZXJyb3IgPSBlcnJvcjsKLSAgICBzZWxmLmVycm9yTGlzdCA9IGVycm9yTGlzdDsK
LQotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKXNldENvbHVtbk5hbWVzOihOU0FycmF5
Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcwotewotICAgIFtzdXBlciBzZXRKU09OQXJyYXk6
dG9KU09OU3RyaW5nQXJyYXkoY29sdW1uTmFtZXMpIGZvcktleTpAImNvbHVtbk5hbWVzIl07Ci19
Ci0KLS0gKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWNvbHVtbk5hbWVzCi17Ci0gICAgcmV0dXJu
IHRvT2JqQ1N0cmluZ0FycmF5KFtzdXBlciBKU09OQXJyYXlGb3JLZXk6QCJjb2x1bW5OYW1lcyJd
KTsKLX0KLQotLSAodm9pZClzZXRCdXR0b25zOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilidXR0
b25zCi17Ci0gICAgW3N1cGVyIHNldEpTT05BcnJheTp0b0pTT05TdHJpbmdBcnJheShidXR0b25z
KSBmb3JLZXk6QCJidXR0b25zIl07Ci19Ci0KLS0gKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWJ1
dHRvbnMKLXsKLSAgICByZXR1cm4gdG9PYmpDU3RyaW5nQXJyYXkoW3N1cGVyIEpTT05BcnJheUZv
cktleTpAImJ1dHRvbnMiXSk7Ci19Ci0KLS0gKHZvaWQpc2V0RGlyZWN0aW9uYWxpdHk6KFRlc3RQ
cm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHkpZGlyZWN0aW9uYWxp
dHkKLXsKLSAgICBbc3VwZXIgc2V0U3RyaW5nOnRvUHJvdG9jb2xTdHJpbmcoZGlyZWN0aW9uYWxp
dHkpIGZvcktleTpAImRpcmVjdGlvbmFsaXR5Il07Ci19Ci0KLS0gKFRlc3RQcm90b2NvbERhdGFi
YXNlUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHkpZGlyZWN0aW9uYWxpdHkKLXsKLSAgICBy
ZXR1cm4gZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVu
ZGxlRGlyZWN0aW9uYWxpdHk+KFtzdXBlciBzdHJpbmdGb3JLZXk6QCJkaXJlY3Rpb25hbGl0eSJd
KS52YWx1ZSgpOwotfQotCi0tICh2b2lkKXNldE5vdGVzOihOU1N0cmluZyAqKW5vdGVzCi17Ci0g
ICAgW3N1cGVyIHNldFN0cmluZzpub3RlcyBmb3JLZXk6QCJub3RlcyJdOwotfQotCi0tIChOU1N0
cmluZyAqKW5vdGVzCi17Ci0gICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJub3RlcyJd
OwotfQotCi0tICh2b2lkKXNldFRpbWVzdGFtcDooZG91YmxlKXRpbWVzdGFtcAotewotICAgIFtz
dXBlciBzZXREb3VibGU6dGltZXN0YW1wIGZvcktleTpAInRpbWVzdGFtcCJdOwotfQotCi0tIChk
b3VibGUpdGltZXN0YW1wCi17Ci0gICAgcmV0dXJuIFtzdXBlciBkb3VibGVGb3JLZXk6QCJ0aW1l
c3RhbXAiXTsKLX0KLQotLSAodm9pZClzZXRWYWx1ZXM6KFJXSVByb3RvY29sSlNPTk9iamVjdCAq
KXZhbHVlcwotewotICAgIFtzdXBlciBzZXRPYmplY3Q6dmFsdWVzIGZvcktleTpAInZhbHVlcyJd
OwotfQotCi0tIChSV0lQcm90b2NvbEpTT05PYmplY3QgKil2YWx1ZXMKLXsKLSAgICBSV0lQcm90
b2NvbEpTT05PYmplY3QgKm9iamVjdCA9IFtzdXBlciBvYmplY3RGb3JLZXk6QCJ2YWx1ZXMiXTsK
LSAgICBpZiAoIW9iamVjdCkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4gW1tSV0lQ
cm90b2NvbEpTT05PYmplY3QgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDpbW3N1cGVyIG9iamVj
dEZvcktleTpAInZhbHVlcyJdIHRvSlNPTk9iamVjdF0uZ2V0KCldOwotfQotCi0tICh2b2lkKXNl
dFBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQKLXsKLSAgICBbc3VwZXIg
c2V0T2JqZWN0OnBheWxvYWQgZm9yS2V5OkAicGF5bG9hZCJdOwotfQotCi0tIChSV0lQcm90b2Nv
bEpTT05PYmplY3QgKilwYXlsb2FkCi17Ci0gICAgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvYmpl
Y3QgPSBbc3VwZXIgb2JqZWN0Rm9yS2V5OkAicGF5bG9hZCJdOwotICAgIGlmICghb2JqZWN0KQot
ICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiBbW1JXSVByb3RvY29sSlNPTk9iamVjdCBh
bGxvY10gaW5pdFdpdGhKU09OT2JqZWN0Oltbc3VwZXIgb2JqZWN0Rm9yS2V5OkAicGF5bG9hZCJd
IHRvSlNPTk9iamVjdF0uZ2V0KCldOwotfQotCi0tICh2b2lkKXNldEVycm9yOihUZXN0UHJvdG9j
b2xEYXRhYmFzZUVycm9yICopZXJyb3IKLXsKLSAgICBbc3VwZXIgc2V0T2JqZWN0OmVycm9yIGZv
cktleTpAImVycm9yIl07Ci19Ci0KLS0gKFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKillcnJv
cgotewotICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb2JqZWN0ID0gW3N1cGVyIG9iamVjdEZv
cktleTpAImVycm9yIl07Ci0gICAgaWYgKCFvYmplY3QpCi0gICAgICAgIHJldHVybiBuaWw7Ci0g
ICAgcmV0dXJuIFtbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBhbGxvY10gaW5pdFdpdGhKU09O
T2JqZWN0Oltbc3VwZXIgb2JqZWN0Rm9yS2V5OkAiZXJyb3IiXSB0b0pTT05PYmplY3RdLmdldCgp
XTsKLX0KLQotLSAodm9pZClzZXRFcnJvckxpc3Q6KE5TQXJyYXkvKjxUZXN0UHJvdG9jb2xEYXRh
YmFzZUVycm9yPiovICopZXJyb3JMaXN0Ci17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURf
VFlQRV9JTl9BUlJBWShlcnJvckxpc3QsIFtUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGNsYXNz
XSk7Ci0gICAgW3N1cGVyIHNldEpTT05BcnJheTp0b0pTT05PYmplY3RBcnJheShlcnJvckxpc3Qp
IGZvcktleTpAImVycm9yTGlzdCJdOwotfQotCi0tIChOU0FycmF5Lyo8VGVzdFByb3RvY29sRGF0
YWJhc2VFcnJvcj4qLyAqKWVycm9yTGlzdAotewotICAgIHJldHVybiB0b09iakNBcnJheTxUZXN0
UHJvdG9jb2xEYXRhYmFzZUVycm9yPihbc3VwZXIgSlNPTkFycmF5Rm9yS2V5OkAiZXJyb3JMaXN0
Il0pOwotfQotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xEYXRhYmFzZU9i
amVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHMKLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
UGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZAot
ewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwot
Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiaW50
ZWdlciJdLCBAImludGVnZXIiKTsKLSAgICBzZWxmLmludGVnZXIgPSBwYXlsb2FkW0AiaW50ZWdl
ciJdOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2Fk
W0AiYXJyYXkiXSwgQCJhcnJheSIpOwotICAgIHNlbGYuYXJyYXkgPSBwYXlsb2FkW0AiYXJyYXki
XTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtA
InN0cmluZyJdLCBAInN0cmluZyIpOwotICAgIHNlbGYuc3RyaW5nID0gcGF5bG9hZFtAInN0cmlu
ZyJdOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2Fk
W0AidmFsdWUiXSwgQCJ2YWx1ZSIpOwotICAgIHNlbGYudmFsdWUgPSBwYXlsb2FkW0AidmFsdWUi
XTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtA
Im9iamVjdCJdLCBAIm9iamVjdCIpOwotICAgIHNlbGYub2JqZWN0ID0gcGF5bG9hZFtAIm9iamVj
dCJdOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90
b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopb2JqZWN0Ci17Ci0gICAgaWYgKCEo
c2VsZiA9IFtzdXBlciBpbml0V2l0aEpTT05PYmplY3Q6W29iamVjdCB0b0pTT05PYmplY3RdLmdl
dCgpXSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoSW50ZWdlcjooTlNTdHJpbmcgKilpbnRlZ2VyIGFycmF5OihO
U1N0cmluZyAqKWFycmF5IHN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcgdmFsdWU6KE5TU3RyaW5n
ICopdmFsdWUgb2JqZWN0OihOU1N0cmluZyAqKW9iamVjdAotewotICAgIGlmICghKHNlbGYgPSBb
c3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShpbnRlZ2VyLCBAImludGVnZXIiKTsKLSAgICBUSFJPV19F
WENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKGFycmF5LCBAImFycmF5Iik7Ci0gICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShzdHJpbmcsIEAic3RyaW5nIik7Ci0g
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWSh2YWx1ZSwgQCJ2YWx1ZSIp
OwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkob2JqZWN0LCBAIm9i
amVjdCIpOwotCi0gICAgc2VsZi5pbnRlZ2VyID0gaW50ZWdlcjsKLSAgICBzZWxmLmFycmF5ID0g
YXJyYXk7Ci0gICAgc2VsZi5zdHJpbmcgPSBzdHJpbmc7Ci0gICAgc2VsZi52YWx1ZSA9IHZhbHVl
OwotICAgIHNlbGYub2JqZWN0ID0gb2JqZWN0OwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0g
KHZvaWQpc2V0SW50ZWdlcjooTlNTdHJpbmcgKilpbnRlZ2VyCi17Ci0gICAgW3N1cGVyIHNldFN0
cmluZzppbnRlZ2VyIGZvcktleTpAImludGVnZXIiXTsKLX0KLQotLSAoTlNTdHJpbmcgKilpbnRl
Z2VyCi17Ci0gICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJpbnRlZ2VyIl07Ci19Ci0K
LS0gKHZvaWQpc2V0QXJyYXk6KE5TU3RyaW5nICopYXJyYXkKLXsKLSAgICBbc3VwZXIgc2V0U3Ry
aW5nOmFycmF5IGZvcktleTpAImFycmF5Il07Ci19Ci0KLS0gKE5TU3RyaW5nICopYXJyYXkKLXsK
LSAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAImFycmF5Il07Ci19Ci0KLS0gKHZvaWQp
c2V0U3RyaW5nOihOU1N0cmluZyAqKXN0cmluZwotewotICAgIFtzdXBlciBzZXRTdHJpbmc6c3Ry
aW5nIGZvcktleTpAInN0cmluZyJdOwotfQotCi0tIChOU1N0cmluZyAqKXN0cmluZwotewotICAg
IHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAic3RyaW5nIl07Ci19Ci0KLS0gKHZvaWQpc2V0
VmFsdWU6KE5TU3RyaW5nICopdmFsdWUKLXsKLSAgICBbc3VwZXIgc2V0U3RyaW5nOnZhbHVlIGZv
cktleTpAInZhbHVlIl07Ci19Ci0KLS0gKE5TU3RyaW5nICopdmFsdWUKLXsKLSAgICByZXR1cm4g
W3N1cGVyIHN0cmluZ0ZvcktleTpAInZhbHVlIl07Ci19Ci0KLS0gKHZvaWQpc2V0T2JqZWN0OihO
U1N0cmluZyAqKW9iamVjdAotewotICAgIFtzdXBlciBzZXRTdHJpbmc6b2JqZWN0IGZvcktleTpA
Im9iamVjdCJdOwotfQotCi0tIChOU1N0cmluZyAqKW9iamVjdAotewotICAgIHJldHVybiBbc3Vw
ZXIgc3RyaW5nRm9yS2V5OkAib2JqZWN0Il07Ci19Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9u
IFRlc3RQcm90b2NvbERhdGFiYXNlRHVtbXlPYmplY3QKLQotLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoUGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9h
ZAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmls
OwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2Nv
bE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopb2JqZWN0Ci17Ci0gICAgaWYgKCEoc2Vs
ZiA9IFtzdXBlciBpbml0V2l0aEpTT05PYmplY3Q6W29iamVjdCB0b0pTT05PYmplY3RdLmdldCgp
XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotQGVuZAot
Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlCi0KLS0g
KGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3Ry
aW5nICosIGlkPiAqKXBheWxvYWQKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkK
LSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURf
UFJPUEVSVFkocGF5bG9hZFtAImRpcmVjdGlvbmFsaXR5Il0sIEAiZGlyZWN0aW9uYWxpdHkiKTsK
LSAgICBPcHRpb25hbDxUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxp
dHk+IGRpcmVjdGlvbmFsaXR5ID0gZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbFRlc3RQ
YXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eT4ocGF5bG9hZFtAImRpcmVjdGlvbmFsaXR5Il0p
OwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX0VOVU1fVkFMVUUoZGlyZWN0aW9uYWxpdHks
IEAiZGlyZWN0aW9uYWxpdHkiKTsKLSAgICBzZWxmLmRpcmVjdGlvbmFsaXR5ID0gZGlyZWN0aW9u
YWxpdHkudmFsdWUoKTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVS
VFkocGF5bG9hZFtAImJ1dHRvbnMiXSwgQCJidXR0b25zIik7Ci0gICAgc2VsZi5idXR0b25zID0g
cGF5bG9hZFtAImJ1dHRvbnMiXTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURf
UFJPUEVSVFkocGF5bG9hZFtAImNvbHVtbk5hbWVzIl0sIEAiY29sdW1uTmFtZXMiKTsKLSAgICBz
ZWxmLmNvbHVtbk5hbWVzID0gcGF5bG9hZFtAImNvbHVtbk5hbWVzIl07Ci0KLSAgICBUSFJPV19F
WENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJub3RlcyJdLCBAIm5vdGVz
Iik7Ci0gICAgc2VsZi5ub3RlcyA9IHBheWxvYWRbQCJub3RlcyJdOwotCi0gICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AidGltZXN0YW1wIl0sIEAidGlt
ZXN0YW1wIik7Ci0gICAgc2VsZi50aW1lc3RhbXAgPSBbcGF5bG9hZFtAInRpbWVzdGFtcCJdIGRv
dWJsZVZhbHVlXTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFko
cGF5bG9hZFtAInZhbHVlcyJdLCBAInZhbHVlcyIpOwotICAgIHNlbGYudmFsdWVzID0gcGF5bG9h
ZFtAInZhbHVlcyJdOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJU
WShwYXlsb2FkW0AicGF5bG9hZCJdLCBAInBheWxvYWQiKTsKLSAgICBzZWxmLnBheWxvYWQgPSBw
YXlsb2FkW0AicGF5bG9hZCJdOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9Q
Uk9QRVJUWShwYXlsb2FkW0AiZXJyb3IiXSwgQCJlcnJvciIpOwotICAgIHNlbGYuZXJyb3IgPSBb
W1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2Fk
W0AiZXJyb3IiXV07Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLS0gKGluc3RhbmNldHlwZSlpbml0
V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilvYmplY3QKLXsKLSAg
ICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoSlNPTk9iamVjdDpbb2JqZWN0IHRvSlNPTk9i
amVjdF0uZ2V0KCldKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIHJldHVybiBzZWxmOwot
fQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhEaXJlY3Rpb25hbGl0eTooVGVzdFByb3RvY29s
VGVzdFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5KWRpcmVjdGlvbmFsaXR5IGJ1dHRvbnM6
KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWJ1dHRvbnMgY29sdW1uTmFtZXM6KE5TQXJyYXkvKjxO
U1N0cmluZz4qLyAqKWNvbHVtbk5hbWVzIG5vdGVzOihOU1N0cmluZyAqKW5vdGVzIHRpbWVzdGFt
cDooZG91YmxlKXRpbWVzdGFtcCB2YWx1ZXM6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXZhbHVl
cyBwYXlsb2FkOihSV0lQcm90b2NvbEpTT05PYmplY3QgKilwYXlsb2FkIGVycm9yOihUZXN0UHJv
dG9jb2xEYXRhYmFzZUVycm9yICopZXJyb3IKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGlu
aXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVR
VUlSRURfUFJPUEVSVFkoYnV0dG9ucywgQCJidXR0b25zIik7Ci0gICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShjb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOwotICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkobm90ZXMsIEAibm90ZXMiKTsK
LSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHZhbHVlcywgQCJ2YWx1
ZXMiKTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWQs
IEAicGF5bG9hZCIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFko
ZXJyb3IsIEAiZXJyb3IiKTsKLQotICAgIHNlbGYuZGlyZWN0aW9uYWxpdHkgPSBkaXJlY3Rpb25h
bGl0eTsKLSAgICBzZWxmLmJ1dHRvbnMgPSBidXR0b25zOwotICAgIHNlbGYuY29sdW1uTmFtZXMg
PSBjb2x1bW5OYW1lczsKLSAgICBzZWxmLm5vdGVzID0gbm90ZXM7Ci0gICAgc2VsZi50aW1lc3Rh
bXAgPSB0aW1lc3RhbXA7Ci0gICAgc2VsZi52YWx1ZXMgPSB2YWx1ZXM7Ci0gICAgc2VsZi5wYXls
b2FkID0gcGF5bG9hZDsKLSAgICBzZWxmLmVycm9yID0gZXJyb3I7Ci0KLSAgICByZXR1cm4gc2Vs
ZjsKLX0KLQotLSAodm9pZClzZXREaXJlY3Rpb25hbGl0eTooVGVzdFByb3RvY29sVGVzdFBhcmFt
ZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5KWRpcmVjdGlvbmFsaXR5Ci17Ci0gICAgW3N1cGVyIHNl
dFN0cmluZzp0b1Byb3RvY29sU3RyaW5nKGRpcmVjdGlvbmFsaXR5KSBmb3JLZXk6QCJkaXJlY3Rp
b25hbGl0eSJdOwotfQotCi0tIChUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlRGlyZWN0
aW9uYWxpdHkpZGlyZWN0aW9uYWxpdHkKLXsKLSAgICByZXR1cm4gZnJvbVByb3RvY29sU3RyaW5n
PFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eT4oW3N1cGVyIHN0
cmluZ0ZvcktleTpAImRpcmVjdGlvbmFsaXR5Il0pLnZhbHVlKCk7Ci19Ci0KLS0gKHZvaWQpc2V0
QnV0dG9uczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopYnV0dG9ucwotewotICAgIFtzdXBlciBz
ZXRKU09OQXJyYXk6dG9KU09OU3RyaW5nQXJyYXkoYnV0dG9ucykgZm9yS2V5OkAiYnV0dG9ucyJd
OwotfQotCi0tIChOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilidXR0b25zCi17Ci0gICAgcmV0dXJu
IHRvT2JqQ1N0cmluZ0FycmF5KFtzdXBlciBKU09OQXJyYXlGb3JLZXk6QCJidXR0b25zIl0pOwot
fQotCi0tICh2b2lkKXNldENvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1
bW5OYW1lcwotewotICAgIFtzdXBlciBzZXRKU09OQXJyYXk6dG9KU09OU3RyaW5nQXJyYXkoY29s
dW1uTmFtZXMpIGZvcktleTpAImNvbHVtbk5hbWVzIl07Ci19Ci0KLS0gKE5TQXJyYXkvKjxOU1N0
cmluZz4qLyAqKWNvbHVtbk5hbWVzCi17Ci0gICAgcmV0dXJuIHRvT2JqQ1N0cmluZ0FycmF5KFtz
dXBlciBKU09OQXJyYXlGb3JLZXk6QCJjb2x1bW5OYW1lcyJdKTsKLX0KLQotLSAodm9pZClzZXRO
b3RlczooTlNTdHJpbmcgKilub3RlcwotewotICAgIFtzdXBlciBzZXRTdHJpbmc6bm90ZXMgZm9y
S2V5OkAibm90ZXMiXTsKLX0KLQotLSAoTlNTdHJpbmcgKilub3RlcwotewotICAgIHJldHVybiBb
c3VwZXIgc3RyaW5nRm9yS2V5OkAibm90ZXMiXTsKLX0KLQotLSAodm9pZClzZXRUaW1lc3RhbXA6
KGRvdWJsZSl0aW1lc3RhbXAKLXsKLSAgICBbc3VwZXIgc2V0RG91YmxlOnRpbWVzdGFtcCBmb3JL
ZXk6QCJ0aW1lc3RhbXAiXTsKLX0KLQotLSAoZG91YmxlKXRpbWVzdGFtcAotewotICAgIHJldHVy
biBbc3VwZXIgZG91YmxlRm9yS2V5OkAidGltZXN0YW1wIl07Ci19Ci0KLS0gKHZvaWQpc2V0VmFs
dWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKil2YWx1ZXMKLXsKLSAgICBbc3VwZXIgc2V0T2Jq
ZWN0OnZhbHVlcyBmb3JLZXk6QCJ2YWx1ZXMiXTsKLX0KLQotLSAoUldJUHJvdG9jb2xKU09OT2Jq
ZWN0ICopdmFsdWVzCi17Ci0gICAgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvYmplY3QgPSBbc3Vw
ZXIgb2JqZWN0Rm9yS2V5OkAidmFsdWVzIl07Ci0gICAgaWYgKCFvYmplY3QpCi0gICAgICAgIHJl
dHVybiBuaWw7Ci0gICAgcmV0dXJuIFtbUldJUHJvdG9jb2xKU09OT2JqZWN0IGFsbG9jXSBpbml0
V2l0aEpTT05PYmplY3Q6W1tzdXBlciBvYmplY3RGb3JLZXk6QCJ2YWx1ZXMiXSB0b0pTT05PYmpl
Y3RdLmdldCgpXTsKLX0KLQotLSAodm9pZClzZXRQYXlsb2FkOihSV0lQcm90b2NvbEpTT05PYmpl
Y3QgKilwYXlsb2FkCi17Ci0gICAgW3N1cGVyIHNldE9iamVjdDpwYXlsb2FkIGZvcktleTpAInBh
eWxvYWQiXTsKLX0KLQotLSAoUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZAotewotICAg
IFJXSVByb3RvY29sSlNPTk9iamVjdCAqb2JqZWN0ID0gW3N1cGVyIG9iamVjdEZvcktleTpAInBh
eWxvYWQiXTsKLSAgICBpZiAoIW9iamVjdCkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1
cm4gW1tSV0lQcm90b2NvbEpTT05PYmplY3QgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDpbW3N1
cGVyIG9iamVjdEZvcktleTpAInBheWxvYWQiXSB0b0pTT05PYmplY3RdLmdldCgpXTsKLX0KLQot
LSAodm9pZClzZXRFcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKWVycm9yCi17Ci0g
ICAgW3N1cGVyIHNldE9iamVjdDplcnJvciBmb3JLZXk6QCJlcnJvciJdOwotfQotCi0tIChUZXN0
UHJvdG9jb2xEYXRhYmFzZUVycm9yICopZXJyb3IKLXsKLSAgICBSV0lQcm90b2NvbEpTT05PYmpl
Y3QgKm9iamVjdCA9IFtzdXBlciBvYmplY3RGb3JLZXk6QCJlcnJvciJdOwotICAgIGlmICghb2Jq
ZWN0KQotICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiBbW1Rlc3RQcm90b2NvbERhdGFi
YXNlRXJyb3IgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDpbW3N1cGVyIG9iamVjdEZvcktleTpA
ImVycm9yIl0gdG9KU09OT2JqZWN0XS5nZXQoKV07Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC90eXBlLXJlcXVpcmlu
Zy1ydW50aW1lLWNhc3RzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvdHlwZS1yZXF1aXJpbmctcnVudGlt
ZS1jYXN0cy5qc29uLXJlc3VsdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTg0ZGFj
ZGNhZjcuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2Fz
dHMuanNvbi1yZXN1bHQKKysrIC9kZXYvbnVsbApAQCAtMSwxNjQ5ICswLDAgQEAKLSMjIyBCZWdp
biBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotLy8gVGVzdAotSW5zcGVjdG9yQmFj
a2VuZC5yZWdpc3RlckRvbWFpbigiVGVzdCIsIG51bGwpOwotSW5zcGVjdG9yQmFja2VuZC5yZWdp
c3RlckVudW0oIlRlc3QuVW5jYXN0ZWRBbmltYWxzIiwge1BpZ3M6ICJQaWdzIiwgQ293czogIkNv
d3MiLCBDYXRzOiAiQ2F0cyIsIEhlbnM6ICJIZW5zIn0pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdp
c3RlckVudW0oIlRlc3QuQ2FzdGVkQW5pbWFscyIsIHtEdWNrczogIkR1Y2tzIiwgSGVuczogIkhl
bnMiLCBDcm93czogIkNyb3dzIiwgRmxhbWluZ29zOiAiRmxhbWluZ29zIn0pOwotSW5zcGVjdG9y
QmFja2VuZC5hY3RpdmF0ZURvbWFpbigiVGVzdCIsIG51bGwpOwotIyMjIEVuZCBGaWxlOiBJbnNw
ZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5
cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIK
LSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgot
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0KLW5h
bWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7
Ci1wdWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERp
c3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShk
aXNwYXRjaGVyKTsgfQotICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigp
IGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KLXByaXZhdGU6Ci0g
ICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwotfTsKLQot
Ci0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNo
ZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1y
dW50aW1lLWNhc3RzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0j
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0K
LXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMu
aD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
LSNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jZW5kaWYKLQot
bmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQot
IyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRl
c3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xh
c3MgRnJvbnRlbmRSb3V0ZXI7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBG
aWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJv
bnRlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0
eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RG
cm9udGVuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFt
ZXNwYWNlIEluc3BlY3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5k
IEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sT2JqZWN0cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlw
ZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+
Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQot
Ci0KLS8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgotbmFtZXNwYWNlIFRlc3QgewotY2xhc3MgVHlw
ZU5lZWRpbmdDYXN0OwotY2xhc3MgUmVjdXJzaXZlT2JqZWN0MTsKLWNsYXNzIFJlY3Vyc2l2ZU9i
amVjdDI7Ci1lbnVtIGNsYXNzIFVuY2FzdGVkQW5pbWFsczsKLWVudW0gY2xhc3MgQ2FzdGVkQW5p
bWFsczsKLX0gLy8gVGVzdAotLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgotCi0KLS8v
IFR5cGVkZWZzLgotbmFtZXNwYWNlIFRlc3QgewotdHlwZWRlZiBpbnQgQ2FzdGVkT2JqZWN0SWQ7
Ci10eXBlZGVmIGludCBVbmNhc3RlZE9iamVjdElkOwotfSAvLyBUZXN0Ci0vLyBFbmQgb2YgdHlw
ZWRlZnMuCi0KLW5hbWVzcGFjZSBUZXN0SGVscGVycyB7Ci0KLVN0cmluZyBnZXRFbnVtQ29uc3Rh
bnRWYWx1ZShpbnQgY29kZSk7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRFbnVt
Q29uc3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkKLXsKLSAgICByZXR1cm4gZ2V0RW51bUNvbnN0YW50
VmFsdWUoc3RhdGljX2Nhc3Q8aW50PihlbnVtVmFsdWUpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
VGVzdEhlbHBlcnMKLQotbmFtZXNwYWNlIFRlc3QgewotLyogQSBkdW1teSB0eXBlIHRoYXQgcmVx
dWlyZXMgcnVudGltZSBjYXN0cywgYW5kIGZvcmNlcyBub24tcHJpbWl0aXZlIHJlZmVyZW5jZWQg
dHlwZXMgdG8gYWxzbyBlbWl0IHJ1bnRpbWUgY2FzdCBoZWxwZXJzLiAqLwotY2xhc3MgVHlwZU5l
ZWRpbmdDYXN0IDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewotcHVibGljOgotICAgIGVudW0g
ewotICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCi0gICAgICAgIFN0cmluZ1NldCA9IDEgPDwgMCwK
LSAgICAgICAgTnVtYmVyU2V0ID0gMSA8PCAxLAotICAgICAgICBBbmltYWxzU2V0ID0gMSA8PCAy
LAotICAgICAgICBJZFNldCA9IDEgPDwgMywKLSAgICAgICAgVHJlZVNldCA9IDEgPDwgNCwKLSAg
ICAgICAgQWxsRmllbGRzU2V0ID0gKFN0cmluZ1NldCB8IE51bWJlclNldCB8IEFuaW1hbHNTZXQg
fCBJZFNldCB8IFRyZWVTZXQpCi0gICAgfTsKLQotICAgIHRlbXBsYXRlPGludCBTVEFURT4KLSAg
ICBjbGFzcyBCdWlsZGVyIHsKLSAgICBwcml2YXRlOgotICAgICAgICBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiBtX3Jlc3VsdDsKLQotICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFU
RSB8IFNURVA+JiBjYXN0U3RhdGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKnJl
aW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7Ci0gICAgICAgIH0K
LQotICAgICAgICBCdWlsZGVyKFJlZjwvKlR5cGVOZWVkaW5nQ2FzdCovSlNPTjo6T2JqZWN0PiYm
IG9iamVjdCkKLSAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVp
bGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKLSAgICAgICAgfQotICAgICAgICBmcmll
bmQgY2xhc3MgVHlwZU5lZWRpbmdDYXN0OwotICAgIHB1YmxpYzoKLQotICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgU3RyaW5nU2V0PiYgc2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTdHJpbmdTZXQpLCBw
cm9wZXJ0eV9zdHJpbmdfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0
cmluZygic3RyaW5nIl9zLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFN0
cmluZ1NldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBOdW1iZXJT
ZXQ+JiBzZXROdW1iZXIoaW50IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxF
X0FTU0VSVCghKFNUQVRFICYgTnVtYmVyU2V0KSwgcHJvcGVydHlfbnVtYmVyX2FscmVhZHlfc2V0
KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2VyKCJudW1iZXIiX3MsIHZhbHVlKTsK
LSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TnVtYmVyU2V0PigpOwotICAgICAgICB9Ci0K
LSAgICAgICAgQnVpbGRlcjxTVEFURSB8IEFuaW1hbHNTZXQ+JiBzZXRBbmltYWxzKEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHMgdmFsdWUpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBBbmltYWxzU2V0KSwgcHJvcGVydHlfYW5p
bWFsc19hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJhbmlt
YWxzIl9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50
VmFsdWUodmFsdWUpKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8QW5pbWFsc1NldD4o
KTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBJZFNldD4mIHNldElkKGlu
dCB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IElkU2V0KSwgcHJvcGVydHlfaWRfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQt
PnNldEludGVnZXIoImlkIl9zLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PElkU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IFRyZWVTZXQ+
JiBzZXRUcmVlKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmpl
Y3QxPiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIFRyZWVTZXQpLCBwcm9wZXJ0eV90cmVlX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXRPYmplY3QoInRyZWUiX3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8VHJlZVNldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIFJlZjxUeXBlTmVlZGlu
Z0Nhc3Q+IHJlbGVhc2UoKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChT
VEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwotICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoc2l6ZW9mKFR5cGVOZWVkaW5nQ2FzdCkgPT0gc2l6ZW9mKEpTT046Ok9i
amVjdCksIGNhbm5vdF9jYXN0KTsKLQotICAgICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4ganNv
blJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7Ci0gICAgICAgICAgICBhdXRvIHJl
c3VsdCA9IFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPFR5cGVOZWVkaW5nQ2FzdD4qPigm
anNvblJlc3VsdCkpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAg
IH07Ci0KLSAgICAvKgotICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKLSAgICAgKiBSZWY8
VHlwZU5lZWRpbmdDYXN0PiByZXN1bHQgPSBUeXBlTmVlZGluZ0Nhc3Q6OmNyZWF0ZSgpCi0gICAg
ICogICAgIC5zZXRTdHJpbmcoLi4uKQotICAgICAqICAgICAuc2V0TnVtYmVyKC4uLikKLSAgICAg
KiAgICAgLnNldEFuaW1hbHMoLi4uKQotICAgICAqICAgICAuc2V0SWQoLi4uKQotICAgICAqICAg
ICAuc2V0VHJlZSguLi4pCi0gICAgICogICAgIC5yZWxlYXNlKCk7Ci0gICAgICovCi0gICAgc3Rh
dGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4g
QnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7Ci0gICAgfQotfTsK
LQotLyogICovCi1lbnVtIGNsYXNzIFVuY2FzdGVkQW5pbWFscyB7Ci0gICAgUGlncyA9IDQsCi0g
ICAgQ293cyA9IDUsCi0gICAgQ2F0cyA9IDYsCi0gICAgSGVucyA9IDEsCi19OyAvLyBlbnVtIGNs
YXNzIFVuY2FzdGVkQW5pbWFscwotLyogICovCi1lbnVtIGNsYXNzIENhc3RlZEFuaW1hbHMgewot
ICAgIER1Y2tzID0gMCwKLSAgICBIZW5zID0gMSwKLSAgICBDcm93cyA9IDIsCi0gICAgRmxhbWlu
Z29zID0gMywKLX07IC8vIGVudW0gY2xhc3MgQ2FzdGVkQW5pbWFscwotY2xhc3MgUmVjdXJzaXZl
T2JqZWN0MSA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKLXB1YmxpYzoKLSAgICBlbnVtIHsK
LSAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAotICAgICAgICBBbGxGaWVsZHNTZXQgPSAwCi0gICAg
fTsKLQotICAgIHRlbXBsYXRlPGludCBTVEFURT4KLSAgICBjbGFzcyBCdWlsZGVyIHsKLSAgICBw
cml2YXRlOgotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBtX3Jlc3VsdDsKLQotICAgICAg
ICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxT
VEFURSB8IFNURVA+Kj4odGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyKFJlZjwv
KlJlY3Vyc2l2ZU9iamVjdDEqL0pTT046Ok9iamVjdD4mJiBvYmplY3QpCi0gICAgICAgICAgICA6
IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5p
dF9zdGF0ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZnJpZW5kIGNsYXNzIFJlY3Vyc2l2ZU9iamVj
dDE7Ci0gICAgcHVibGljOgotCi0gICAgICAgIFJlZjxSZWN1cnNpdmVPYmplY3QxPiByZWxlYXNl
KCkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmll
bGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KHNpemVvZihSZWN1cnNpdmVPYmplY3QxKSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0KSwgY2Fubm90
X2Nhc3QpOwotCi0gICAgICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uUmVzdWx0ID0gbV9y
ZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKLSAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gV1RGTW92
ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8UmVjdXJzaXZlT2JqZWN0MT4qPigmanNvblJlc3VsdCkp
OwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICAv
KgotICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKLSAgICAgKiBSZWY8UmVjdXJzaXZlT2Jq
ZWN0MT4gcmVzdWx0ID0gUmVjdXJzaXZlT2JqZWN0MTo6Y3JlYXRlKCkKLSAgICAgKiAgICAgLnJl
bGVhc2UoKTsKLSAgICAgKi8KLSAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRl
KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09OOjpPYmpl
Y3Q6OmNyZWF0ZSgpKTsKLSAgICB9Ci0KLSAgICB2b2lkIHNldE9iaihSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0Mj4gdmFsdWUpCi0gICAgewotICAgICAg
ICBKU09OOjpPYmplY3RCYXNlOjpzZXRPYmplY3QoIm9iaiJfcywgV1RGTW92ZSh2YWx1ZSkpOwot
ICAgIH0KLX07Ci0KLWNsYXNzIFJlY3Vyc2l2ZU9iamVjdDIgOiBwdWJsaWMgSlNPTjo6T2JqZWN0
QmFzZSB7Ci1wdWJsaWM6Ci0gICAgZW51bSB7Ci0gICAgICAgIE5vRmllbGRzU2V0ID0gMCwKLSAg
ICAgICAgQWxsRmllbGRzU2V0ID0gMAotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+
Ci0gICAgY2xhc3MgQnVpbGRlciB7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPEpTT046
Ok9iamVjdD4gbV9yZXN1bHQ7Ci0KLSAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8
U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
ICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgQnVpbGRlcihSZWY8LypSZWN1cnNpdmVPYmplY3QyKi9KU09OOjpPYmpl
Y3Q+JiYgb2JqZWN0KQotICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0
LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwotICAgICAgICB9Ci0gICAgICAg
IGZyaWVuZCBjbGFzcyBSZWN1cnNpdmVPYmplY3QyOwotICAgIHB1YmxpYzoKLQotICAgICAgICBS
ZWY8UmVjdXJzaXZlT2JqZWN0Mj4gcmVsZWFzZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7
Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoUmVjdXJzaXZlT2JqZWN0MikgPT0g
c2l6ZW9mKEpTT046Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsKLQotICAgICAgICAgICAgUmVmPEpT
T046Ok9iamVjdD4ganNvblJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7Ci0gICAg
ICAgICAgICBhdXRvIHJlc3VsdCA9IFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPFJlY3Vy
c2l2ZU9iamVjdDI+Kj4oJmpzb25SZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgLyoKLSAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0
b3I6Ci0gICAgICogUmVmPFJlY3Vyc2l2ZU9iamVjdDI+IHJlc3VsdCA9IFJlY3Vyc2l2ZU9iamVj
dDI6OmNyZWF0ZSgpCi0gICAgICogICAgIC5yZWxlYXNlKCk7Ci0gICAgICovCi0gICAgc3RhdGlj
IEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gQnVp
bGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7Ci0gICAgfQotCi0gICAg
dm9pZCBzZXRPYmooUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9i
amVjdDE+IHZhbHVlKQotICAgIHsKLSAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0T2JqZWN0
KCJvYmoiX3MsIFdURk1vdmUodmFsdWUpKTsKLSAgICB9Ci19OwotCi19IC8vIFRlc3QKLQotdGVt
cGxhdGU8PiBzdHJ1Y3QgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpD
YXN0ZWRBbmltYWxzPiB7Ci1zdGF0aWMgdm9pZCBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShK
U09OOjpWYWx1ZSopOwotfTsKLXRlbXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8SW5zcGVj
dG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0PiB7Ci1zdGF0aWMgUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD4gcnVudGltZUNhc3QoUmVm
UHRyPEpTT046OlZhbHVlPiYmIHZhbHVlKTsKLXN0YXRpYyB2b2lkIGFzc2VydFZhbHVlSGFzRXhw
ZWN0ZWRUeXBlKEpTT046OlZhbHVlKik7Ci19OwotdGVtcGxhdGU8PiBzdHJ1Y3QgQmluZGluZ1Ry
YWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QxPiB7Ci1zdGF0
aWMgdm9pZCBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShKU09OOjpWYWx1ZSopOwotfTsKLXRl
bXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6
UmVjdXJzaXZlT2JqZWN0Mj4gewotc3RhdGljIHZvaWQgYXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5
cGUoSlNPTjo6VmFsdWUqKTsKLX07Ci0KLW5hbWVzcGFjZSBUZXN0SGVscGVycyB7Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIFByb3RvY29sRW51bVR5cGU+Ci1PcHRpb25hbDxQcm90b2NvbEVudW1UeXBl
PiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJik7Ci0KLS8vIEVudW1zIGlu
IHRoZSAnVGVzdCcgRG9tYWluCi10ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNw
ZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM+KGNvbnN0IFN0cmluZyYpOwot
dGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5p
bWFscz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6
OkNhc3RlZEFuaW1hbHM+KGNvbnN0IFN0cmluZyYpOwotCi19IC8vIG5hbWVzcGFjZSBUZXN0SGVs
cGVycwotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKLQotbmFtZXNwYWNlIFdURiB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZh
dWx0SGFzaDsKLQotLy8gSGFzaCBkZWNsYXJhdGlvbnMgaW4gdGhlICdUZXN0JyBEb21haW4KLXRl
bXBsYXRlPD4KLXN0cnVjdCBEZWZhdWx0SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpV
bmNhc3RlZEFuaW1hbHM+IHsKLSAgICB0eXBlZGVmIEludEhhc2g8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzPiBIYXNoOwotfTsKLXRlbXBsYXRlPD4KLXN0cnVjdCBE
ZWZhdWx0SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPiB7Ci0g
ICAgdHlwZWRlZiBJbnRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1h
bHM+IEhhc2g7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXVEYKLSMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sT2JqZWN0cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNw
cAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRp
bWUtY2FzdHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgot
Ci0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotbmFt
ZXNwYWNlIFRlc3RIZWxwZXJzIHsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29u
c3RhbnRfdmFsdWVzW10gPSB7Ci0gICAgIkR1Y2tzIiwKLSAgICAiSGVucyIsCi0gICAgIkNyb3dz
IiwKLSAgICAiRmxhbWluZ29zIiwKLSAgICAiUGlncyIsCi0gICAgIkNvd3MiLAotICAgICJDYXRz
IiwKLX07Ci0KLVN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgewotICAgIHJl
dHVybiBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb2RlXTsKLX0KLQotLy8gRW51bXMgaW4gdGhlICdU
ZXN0JyBEb21haW4KLXRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRl
c3Q6OlVuY2FzdGVkQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFscz4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0
cmluZykKLXsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7Ci0g
ICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxz
OjpQaWdzLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlVuY2Fz
dGVkQW5pbWFsczo6Q293cywKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpU
ZXN0OjpVbmNhc3RlZEFuaW1hbHM6OkNhdHMsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQ
cm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzOjpIZW5zLAotICAgIH07Ci0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCA0OyArK2kpCi0gICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBl
bnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCi0gICAgICAgICAgICByZXR1
cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFscyljb25zdGFudFZh
bHVlc1tpXTsKLQotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLXRlbXBsYXRlPD4KLU9w
dGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+IHBhcnNlRW51
bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxz
Pihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQotewotICAgIHN0YXRpYyBjb25zdCBzaXpl
X3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3Rv
Y29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzOjpEdWNrcywKLSAgICAgICAgKHNpemVfdClJbnNwZWN0
b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzOjpIZW5zLAotICAgICAgICAoc2l6ZV90
KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM6OkNyb3dzLAotICAgICAg
ICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM6OkZsYW1p
bmdvcywKLSAgICB9OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgNDsgKytpKQotICAgICAg
ICBpZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRWYWx1
ZXNbaV1dKQotICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpD
YXN0ZWRBbmltYWxzKWNvbnN0YW50VmFsdWVzW2ldOwotCi0gICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKLX0KLQotCi19IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwotCi0KLQotdm9pZCBCaW5kaW5n
VHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+Ojphc3NlcnRW
YWx1ZUhhc0V4cGVjdGVkVHlwZShKU09OOjpWYWx1ZSogdmFsdWUpCi17Ci0jaWYgQVNTRVJUX0VO
QUJMRUQKLSAgICBBU1NFUlRfQVJHKHZhbHVlLCB2YWx1ZSk7Ci0gICAgU3RyaW5nIHJlc3VsdDsK
LSAgICBib29sIGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNTdHJpbmcocmVzdWx0KTsKLSAgICBB
U1NFUlQoY2FzdFN1Y2NlZWRlZCk7Ci0gICAgQVNTRVJUKHJlc3VsdCA9PSAiRHVja3MiIHx8IHJl
c3VsdCA9PSAiSGVucyIgfHwgcmVzdWx0ID09ICJDcm93cyIgfHwgcmVzdWx0ID09ICJGbGFtaW5n
b3MiKTsKLSNlbHNlIC8vIEFTU0VSVF9FTkFCTEVECi0gICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsK
LSNlbmRpZiAvLyBBU1NFUlRfRU5BQkxFRAotfQotCi12b2lkIEJpbmRpbmdUcmFpdHM8SW5zcGVj
dG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0Pjo6YXNzZXJ0VmFsdWVIYXNFeHBl
Y3RlZFR5cGUoSlNPTjo6VmFsdWUqIHZhbHVlKQotewotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAg
QVNTRVJUX0FSRyh2YWx1ZSwgdmFsdWUpOwotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG9iamVj
dDsKLSAgICBib29sIGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNPYmplY3Qob2JqZWN0KTsKLSAg
ICBBU1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQpOwotICAgIHsKLSAg
ICAgICAgYXV0byBzdHJpbmdQb3MgPSBvYmplY3QtPmZpbmQoInN0cmluZyJfcyk7Ci0gICAgICAg
IEFTU0VSVChzdHJpbmdQb3MgIT0gb2JqZWN0LT5lbmQoKSk7Ci0gICAgICAgIEJpbmRpbmdUcmFp
dHM8U3RyaW5nPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoc3RyaW5nUG9zLT52YWx1ZS5n
ZXQoKSk7Ci0gICAgfQotICAgIHsKLSAgICAgICAgYXV0byBudW1iZXJQb3MgPSBvYmplY3QtPmZp
bmQoIm51bWJlciJfcyk7Ci0gICAgICAgIEFTU0VSVChudW1iZXJQb3MgIT0gb2JqZWN0LT5lbmQo
KSk7Ci0gICAgICAgIEJpbmRpbmdUcmFpdHM8aW50Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5
cGUobnVtYmVyUG9zLT52YWx1ZS5nZXQoKSk7Ci0gICAgfQotICAgIHsKLSAgICAgICAgYXV0byBh
bmltYWxzUG9zID0gb2JqZWN0LT5maW5kKCJhbmltYWxzIl9zKTsKLSAgICAgICAgQVNTRVJUKGFu
aW1hbHNQb3MgIT0gb2JqZWN0LT5lbmQoKSk7Ci0gICAgICAgIEJpbmRpbmdUcmFpdHM8SW5zcGVj
dG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz46OmFzc2VydFZhbHVlSGFzRXhwZWN0
ZWRUeXBlKGFuaW1hbHNQb3MtPnZhbHVlLmdldCgpKTsKLSAgICB9Ci0gICAgewotICAgICAgICBh
dXRvIGlkUG9zID0gb2JqZWN0LT5maW5kKCJpZCJfcyk7Ci0gICAgICAgIEFTU0VSVChpZFBvcyAh
PSBvYmplY3QtPmVuZCgpKTsKLSAgICAgICAgQmluZGluZ1RyYWl0czxpbnQ+Ojphc3NlcnRWYWx1
ZUhhc0V4cGVjdGVkVHlwZShpZFBvcy0+dmFsdWUuZ2V0KCkpOwotICAgIH0KLSAgICB7Ci0gICAg
ICAgIGF1dG8gdHJlZVBvcyA9IG9iamVjdC0+ZmluZCgidHJlZSJfcyk7Ci0gICAgICAgIEFTU0VS
VCh0cmVlUG9zICE9IG9iamVjdC0+ZW5kKCkpOwotICAgICAgICBCaW5kaW5nVHJhaXRzPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+Ojphc3NlcnRWYWx1ZUhhc0V4
cGVjdGVkVHlwZSh0cmVlUG9zLT52YWx1ZS5nZXQoKSk7Ci0gICAgfQotCi0gICAgaW50IGZvdW5k
UHJvcGVydGllc0NvdW50ID0gNTsKLSAgICBpZiAoZm91bmRQcm9wZXJ0aWVzQ291bnQgIT0gb2Jq
ZWN0LT5zaXplKCkpCi0gICAgICAgIEZBVEFMKCJVbmV4cGVjdGVkIHByb3BlcnRpZXMgaW4gb2Jq
ZWN0OiAlc1xuIiwgb2JqZWN0LT50b0pTT05TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7Ci0jZWxz
ZSAvLyBBU1NFUlRfRU5BQkxFRAotICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7Ci0jZW5kaWYgLy8g
QVNTRVJUX0VOQUJMRUQKLX0KLQotUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5
cGVOZWVkaW5nQ2FzdD4gQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpU
eXBlTmVlZGluZ0Nhc3Q+OjpydW50aW1lQ2FzdChSZWZQdHI8SlNPTjo6VmFsdWU+JiYgdmFsdWUp
Ci17Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcmVzdWx0OwotICAgIGJvb2wgY2FzdFN1Y2Nl
ZWRlZCA9IHZhbHVlLT5hc09iamVjdChyZXN1bHQpOwotICAgIEFTU0VSVF9VTlVTRUQoY2FzdFN1
Y2NlZWRlZCwgY2FzdFN1Y2NlZWRlZCk7Ci0gICAgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlBy
b3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlw
ZShyZXN1bHQuZ2V0KCkpOwotICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihJbnNwZWN0b3I6OlBy
b3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3QpID09IHNpemVvZihKU09OOjpPYmplY3RCYXNl
KSwgdHlwZV9jYXN0X3Byb2JsZW0pOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxJbnNwZWN0b3I6
OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3QqPihzdGF0aWNfY2FzdDxKU09OOjpPYmpl
Y3RCYXNlKj4ocmVzdWx0LmdldCgpKSk7Ci19Ci0KLQotdm9pZCBCaW5kaW5nVHJhaXRzPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+Ojphc3NlcnRWYWx1ZUhhc0V4
cGVjdGVkVHlwZShKU09OOjpWYWx1ZSogdmFsdWUpCi17Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAg
ICBBU1NFUlRfQVJHKHZhbHVlLCB2YWx1ZSk7Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gb2Jq
ZWN0OwotICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9IHZhbHVlLT5hc09iamVjdChvYmplY3QpOwot
ICAgIEFTU0VSVF9VTlVTRUQoY2FzdFN1Y2NlZWRlZCwgY2FzdFN1Y2NlZWRlZCk7Ci0KLSAgICBp
bnQgZm91bmRQcm9wZXJ0aWVzQ291bnQgPSAwOwotICAgIHsKLSAgICAgICAgYXV0byBvYmpQb3Mg
PSBvYmplY3QtPmZpbmQoIm9iaiJfcyk7Ci0gICAgICAgIGlmIChvYmpQb3MgIT0gb2JqZWN0LT5l
bmQoKSkgewotICAgICAgICAgICAgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpU
ZXN0OjpSZWN1cnNpdmVPYmplY3QyPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUob2JqUG9z
LT52YWx1ZS5nZXQoKSk7Ci0gICAgICAgICAgICArK2ZvdW5kUHJvcGVydGllc0NvdW50OwotICAg
ICAgICB9Ci0gICAgfQotICAgIGlmIChmb3VuZFByb3BlcnRpZXNDb3VudCAhPSBvYmplY3QtPnNp
emUoKSkKLSAgICAgICAgRkFUQUwoIlVuZXhwZWN0ZWQgcHJvcGVydGllcyBpbiBvYmplY3Q6ICVz
XG4iLCBvYmplY3QtPnRvSlNPTlN0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKLSNlbHNlIC8vIEFT
U0VSVF9FTkFCTEVECi0gICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKLSNlbmRpZiAvLyBBU1NFUlRf
RU5BQkxFRAotfQotCi12b2lkIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVz
dDo6UmVjdXJzaXZlT2JqZWN0Mj46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEpTT046OlZh
bHVlKiB2YWx1ZSkKLXsKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIEFTU0VSVF9BUkcodmFsdWUs
IHZhbHVlKTsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBvYmplY3Q7Ci0gICAgYm9vbCBjYXN0
U3VjY2VlZGVkID0gdmFsdWUtPmFzT2JqZWN0KG9iamVjdCk7Ci0gICAgQVNTRVJUX1VOVVNFRChj
YXN0U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsKLQotICAgIGludCBmb3VuZFByb3BlcnRpZXND
b3VudCA9IDA7Ci0gICAgewotICAgICAgICBhdXRvIG9ialBvcyA9IG9iamVjdC0+ZmluZCgib2Jq
Il9zKTsKLSAgICAgICAgaWYgKG9ialBvcyAhPSBvYmplY3QtPmVuZCgpKSB7Ci0gICAgICAgICAg
ICBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVj
dDE+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShvYmpQb3MtPnZhbHVlLmdldCgpKTsKLSAg
ICAgICAgICAgICsrZm91bmRQcm9wZXJ0aWVzQ291bnQ7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
aWYgKGZvdW5kUHJvcGVydGllc0NvdW50ICE9IG9iamVjdC0+c2l6ZSgpKQotICAgICAgICBGQVRB
TCgiVW5leHBlY3RlZCBwcm9wZXJ0aWVzIGluIG9iamVjdDogJXNcbiIsIG9iamVjdC0+dG9KU09O
U3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOwotI2Vsc2UgLy8gQVNTRVJUX0VOQUJMRUQKLSAgICBV
TlVTRURfUEFSQU0odmFsdWUpOwotI2VuZGlmIC8vIEFTU0VSVF9FTkFCTEVECi19Ci0KLX0gLy8g
bmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0
ci5oPgotCi0KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgK
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2Fz
dHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1w
b3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5o
IgotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotCi1u
YW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rl
c3RQcm90b2NvbC5oPgotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkK
LUBpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0Ci1AZW5kCi0K
LQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbi5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2lt
cG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgotI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgotCi11c2luZyBu
YW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xs
ZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxl
SW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5p
dF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250
cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7
Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotQGVu
ZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0
UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMuaCIKLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNw
ZWN0b3I7Ci0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1t
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgotLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0Zv
dW5kYXRpb24uaD4KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVj
dC5oPgotCi0KLUBjbGFzcyBUZXN0UHJvdG9jb2xUZXN0VHlwZU5lZWRpbmdDYXN0OwotQGNsYXNz
IFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxOwotQGNsYXNzIFRlc3RQcm90b2NvbFRl
c3RSZWN1cnNpdmVPYmplY3QyOwotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJv
dG9jb2xQbGF0Zm9ybSkgewotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsLAotICAgIFRlc3RQ
cm90b2NvbFBsYXRmb3JtR2VuZXJpYywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUywKLSAg
ICBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TLAotfTsKLQotCi10eXBlZGVmIE5TX0VOVU0oTlNJ
bnRlZ2VyLCBUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzKSB7Ci0gICAgVGVzdFByb3Rv
Y29sVGVzdFVuY2FzdGVkQW5pbWFsc1BpZ3MsCi0gICAgVGVzdFByb3RvY29sVGVzdFVuY2FzdGVk
QW5pbWFsc0Nvd3MsCi0gICAgVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc0NhdHMsCi0g
ICAgVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc0hlbnMsCi19OwotCi10eXBlZGVmIE5T
X0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFscykgewotICAgIFRl
c3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzRHVja3MsCi0gICAgVGVzdFByb3RvY29sVGVzdENh
c3RlZEFuaW1hbHNIZW5zLAotICAgIFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzQ3Jvd3Ms
Ci0gICAgVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHNGbGFtaW5nb3MsCi19OwotCi0KLV9f
YXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJv
dG9jb2xUZXN0VHlwZU5lZWRpbmdDYXN0IDogUldJUHJvdG9jb2xKU09OT2JqZWN0Ci0tIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICop
cGF5bG9hZDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90
b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoU3Ry
aW5nOihOU1N0cmluZyAqKXN0cmluZyBudW1iZXI6KGludCludW1iZXIgYW5pbWFsczooVGVzdFBy
b3RvY29sVGVzdENhc3RlZEFuaW1hbHMpYW5pbWFscyBpZGVudGlmaWVyOihpbnQpaWRlbnRpZmll
ciB0cmVlOihUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSAqKXRyZWU7Ci0vKiByZXF1
aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKnN0cmluZzsKLS8q
IHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCBudW1iZXI7Ci0v
KiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBUZXN0UHJvdG9jb2xU
ZXN0Q2FzdGVkQW5pbWFscyBhbmltYWxzOwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25h
dG9taWMsIGFzc2lnbikgaW50IGlkZW50aWZpZXI7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkg
KG5vbmF0b21pYywgcmV0YWluKSBUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSAqdHJl
ZTsKLUBlbmQKLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50
ZXJmYWNlIFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxIDogUldJUHJvdG9jb2xKU09O
T2JqZWN0Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNT
dHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29s
T2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OwotLyogb3B0aW9uYWwg
Ki8gQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2
ZU9iamVjdDIgKm9iajsKLUBlbmQKLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1
bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QyIDogUldJ
UHJvdG9jb2xKU09OT2JqZWN0Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0Rp
Y3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKLS0gKGluc3RhbmNldHlwZSlpbml0
V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0Owot
Lyogb3B0aW9uYWwgKi8gQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgVGVzdFByb3RvY29s
VGVzdFJlY3Vyc2l2ZU9iamVjdDEgKm9iajsKLUBlbmQKLQotCi0KLQotCi0KLSNpbXBvcnQgPFdl
Ykluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4KLQotIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
SW50ZXJuYWwuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWly
aW5nLXJ1bnRpbWUtY2FzdHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2Nv
bEpTT05PYmplY3RQcml2YXRlLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJs
ZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLQot
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgi
Ci0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+Ci0K
LW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+
Ci1PcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcm
IHZhbHVlKTsKLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFBs
YXRmb3JtIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3Rv
Y29sUGxhdGZvcm1BbGw6Ci0gICAgICAgIHJldHVybiAiYWxsIl9zOwotICAgIGNhc2UgVGVzdFBy
b3RvY29sUGxhdGZvcm1HZW5lcmljOgotICAgICAgICByZXR1cm4gImdlbmVyaWMiX3M7Ci0gICAg
Y2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzoKLSAgICAgICAgcmV0dXJuICJpb3MiX3M7Ci0g
ICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOgotICAgICAgICByZXR1cm4gIm1hY29z
Il9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2Nv
bFBsYXRmb3JtPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAg
ICBpZiAodmFsdWUgPT0gImFsbCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9y
bUFsbDsKLSAgICBpZiAodmFsdWUgPT0gImdlbmVyaWMiKQotICAgICAgICByZXR1cm4gVGVzdFBy
b3RvY29sUGxhdGZvcm1HZW5lcmljOwotICAgIGlmICh2YWx1ZSA9PSAiaW9zIikKLSAgICAgICAg
cmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOwotICAgIGlmICh2YWx1ZSA9PSAibWFjb3Mi
KQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzsKLSAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwotfQotCi0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0
UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkg
ewotICAgIGNhc2UgVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc1BpZ3M6Ci0gICAgICAg
IHJldHVybiAiUGlncyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1h
bHNDb3dzOgotICAgICAgICByZXR1cm4gIkNvd3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xU
ZXN0VW5jYXN0ZWRBbmltYWxzQ2F0czoKLSAgICAgICAgcmV0dXJuICJDYXRzIl9zOwotICAgIGNh
c2UgVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc0hlbnM6Ci0gICAgICAgIHJldHVybiAi
SGVucyJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJv
dG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5n
JiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gIlBpZ3MiKQotICAgICAgICByZXR1cm4gVGVz
dFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc1BpZ3M7Ci0gICAgaWYgKHZhbHVlID09ICJDb3dz
IikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHNDb3dzOwot
ICAgIGlmICh2YWx1ZSA9PSAiQ2F0cyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xUZXN0
VW5jYXN0ZWRBbmltYWxzQ2F0czsKLSAgICBpZiAodmFsdWUgPT0gIkhlbnMiKQotICAgICAgICBy
ZXR1cm4gVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc0hlbnM7Ci0gICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKLX0KLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90
b2NvbFRlc3RDYXN0ZWRBbmltYWxzIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAg
IGNhc2UgVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHNEdWNrczoKLSAgICAgICAgcmV0dXJu
ICJEdWNrcyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzSGVuczoK
LSAgICAgICAgcmV0dXJuICJIZW5zIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sVGVzdENhc3Rl
ZEFuaW1hbHNDcm93czoKLSAgICAgICAgcmV0dXJuICJDcm93cyJfczsKLSAgICBjYXNlIFRlc3RQ
cm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzRmxhbWluZ29zOgotICAgICAgICByZXR1cm4gIkZsYW1p
bmdvcyJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJv
dG9jb2xUZXN0Q2FzdGVkQW5pbWFscz4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYg
dmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJEdWNrcyIpCi0gICAgICAgIHJldHVybiBUZXN0
UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFsc0R1Y2tzOwotICAgIGlmICh2YWx1ZSA9PSAiSGVucyIp
Ci0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFsc0hlbnM7Ci0gICAg
aWYgKHZhbHVlID09ICJDcm93cyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xUZXN0Q2Fz
dGVkQW5pbWFsc0Nyb3dzOwotICAgIGlmICh2YWx1ZSA9PSAiRmxhbWluZ29zIikKLSAgICAgICAg
cmV0dXJuIFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzRmxhbWluZ29zOwotICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFBy
b3RvY29sVHlwZVBhcnNlci5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNP
Tk9iamVjdFByaXZhdGUuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGludGVy
ZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFRlc3REb21haW4pCi0KLSsgKHZvaWQp
X3BhcnNlVHlwZU5lZWRpbmdDYXN0OihUZXN0UHJvdG9jb2xUZXN0VHlwZU5lZWRpbmdDYXN0ICoq
KW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotKyAodm9pZClfcGFyc2VDYXN0ZWRP
YmplY3RJZDooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0r
ICh2b2lkKV9wYXJzZVVuY2FzdGVkT2JqZWN0SWQ6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21Q
YXlsb2FkOihpZClwYXlsb2FkOwotKyAodm9pZClfcGFyc2VVbmNhc3RlZEFuaW1hbHM6KE5TTnVt
YmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotKyAodm9pZClfcGFyc2VD
YXN0ZWRBbmltYWxzOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9h
ZDsKLSsgKHZvaWQpX3BhcnNlUmVjdXJzaXZlT2JqZWN0MTooVGVzdFByb3RvY29sVGVzdFJlY3Vy
c2l2ZU9iamVjdDEgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lk
KV9wYXJzZVJlY3Vyc2l2ZU9iamVjdDI6KFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3Qy
ICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotCi1AZW5kCi0KLUBpbXBsZW1l
bnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFRlc3REb21haW4pCi0KLSsgKHZv
aWQpX3BhcnNlVHlwZU5lZWRpbmdDYXN0OihUZXN0UHJvdG9jb2xUZXN0VHlwZU5lZWRpbmdDYXN0
ICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7Ci0gICAgKm91
dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xUZXN0VHlwZU5lZWRpbmdDYXN0IGFsbG9jXSBpbml0V2l0
aFBheWxvYWQ6cGF5bG9hZF07Ci19Ci0KLSsgKHZvaWQpX3BhcnNlQ2FzdGVkT2JqZWN0SWQ6KE5T
TnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1df
RVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNOdW1iZXIgY2xhc3NdKTsKLSAgICAq
b3V0VmFsdWUgPSAoTlNOdW1iZXIgKilwYXlsb2FkOwotfQotCi0rICh2b2lkKV9wYXJzZVVuY2Fz
dGVkT2JqZWN0SWQ6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2Fk
Ci17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNOdW1iZXIg
Y2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSAoTlNOdW1iZXIgKilwYXlsb2FkOwotfQotCi0rICh2
b2lkKV9wYXJzZVVuY2FzdGVkQW5pbWFsczooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxv
YWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxv
YWQsIFtOU1N0cmluZyBjbGFzc10pOwotICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbFRlc3RVbmNh
c3RlZEFuaW1hbHM+IHJlc3VsdCA9IEluc3BlY3Rvcjo6ZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQ
cm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHM+KHBheWxvYWQpOwotICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfQkFEX0VOVU1fVkFMVUUocmVzdWx0LCBAIlVuY2FzdGVkQW5pbWFscyIpOwotICAgICpv
dXRWYWx1ZSA9IEAocmVzdWx0LnZhbHVlKCkpOwotfQotCi0rICh2b2lkKV9wYXJzZUNhc3RlZEFu
aW1hbHM6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0g
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3Nd
KTsKLSAgICBPcHRpb25hbDxUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFscz4gcmVzdWx0ID0g
SW5zcGVjdG9yOjpmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1h
bHM+KHBheWxvYWQpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX0VOVU1fVkFMVUUocmVz
dWx0LCBAIkNhc3RlZEFuaW1hbHMiKTsKLSAgICAqb3V0VmFsdWUgPSBAKHJlc3VsdC52YWx1ZSgp
KTsKLX0KLQotKyAodm9pZClfcGFyc2VSZWN1cnNpdmVPYmplY3QxOihUZXN0UHJvdG9jb2xUZXN0
UmVjdXJzaXZlT2JqZWN0MSAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewot
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBj
bGFzc10pOwotICAgICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVj
dDEgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKLX0KLQotKyAodm9pZClfcGFyc2VS
ZWN1cnNpdmVPYmplY3QyOihUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MiAqKilvdXRW
YWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
QkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9
IFtbVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDIgYWxsb2NdIGluaXRXaXRoUGF5bG9h
ZDpwYXlsb2FkXTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUt
Y2FzdHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0j
aW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05P
YmplY3RQcml2YXRlLmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3Rm
L0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi1AaW1wbGVt
ZW50YXRpb24gVGVzdFByb3RvY29sVGVzdFR5cGVOZWVkaW5nQ2FzdAotCi0tIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4g
KilwYXlsb2FkCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJl
dHVybiBuaWw7Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBh
eWxvYWRbQCJzdHJpbmciXSwgQCJzdHJpbmciKTsKLSAgICBzZWxmLnN0cmluZyA9IHBheWxvYWRb
QCJzdHJpbmciXTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFko
cGF5bG9hZFtAIm51bWJlciJdLCBAIm51bWJlciIpOwotICAgIHNlbGYubnVtYmVyID0gW3BheWxv
YWRbQCJudW1iZXIiXSBpbnRlZ2VyVmFsdWVdOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9S
RVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiYW5pbWFscyJdLCBAImFuaW1hbHMiKTsKLSAgICBP
cHRpb25hbDxUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFscz4gYW5pbWFscyA9IGZyb21Qcm90
b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFscz4ocGF5bG9hZFtAImFuaW1h
bHMiXSk7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfRU5VTV9WQUxVRShhbmltYWxzLCBA
ImFuaW1hbHMiKTsKLSAgICBzZWxmLmFuaW1hbHMgPSBhbmltYWxzLnZhbHVlKCk7Ci0KLSAgICBU
SFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJpZCJdLCBAImlk
Iik7Ci0gICAgc2VsZi5pZGVudGlmaWVyID0gW3BheWxvYWRbQCJpZCJdIGludGVnZXJWYWx1ZV07
Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJ0
cmVlIl0sIEAidHJlZSIpOwotICAgIHNlbGYudHJlZSA9IFtbVGVzdFByb3RvY29sVGVzdFJlY3Vy
c2l2ZU9iamVjdDEgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkW0AidHJlZSJdXTsKLQot
ICAgIHJldHVybiBzZWxmOwotfQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmpl
Y3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9iamVjdAotewotICAgIGlmICghKHNlbGYgPSBb
c3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmplY3QgdG9KU09OT2JqZWN0XS5nZXQoKV0pKQot
ICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aFN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcgbnVtYmVyOihpbnQpbnVtYmVy
IGFuaW1hbHM6KFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzKWFuaW1hbHMgaWRlbnRpZmll
cjooaW50KWlkZW50aWZpZXIgdHJlZTooVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEg
Kil0cmVlCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJldHVy
biBuaWw7Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHN0cmlu
ZywgQCJzdHJpbmciKTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZ
KHRyZWUsIEAidHJlZSIpOwotCi0gICAgc2VsZi5zdHJpbmcgPSBzdHJpbmc7Ci0gICAgc2VsZi5u
dW1iZXIgPSBudW1iZXI7Ci0gICAgc2VsZi5hbmltYWxzID0gYW5pbWFsczsKLSAgICBzZWxmLmlk
ZW50aWZpZXIgPSBpZGVudGlmaWVyOwotICAgIHNlbGYudHJlZSA9IHRyZWU7Ci0KLSAgICByZXR1
cm4gc2VsZjsKLX0KLQotLSAodm9pZClzZXRTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nCi17Ci0g
ICAgW3N1cGVyIHNldFN0cmluZzpzdHJpbmcgZm9yS2V5OkAic3RyaW5nIl07Ci19Ci0KLS0gKE5T
U3RyaW5nICopc3RyaW5nCi17Ci0gICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJzdHJp
bmciXTsKLX0KLQotLSAodm9pZClzZXROdW1iZXI6KGludCludW1iZXIKLXsKLSAgICBbc3VwZXIg
c2V0SW50ZWdlcjpudW1iZXIgZm9yS2V5OkAibnVtYmVyIl07Ci19Ci0KLS0gKGludCludW1iZXIK
LXsKLSAgICByZXR1cm4gW3N1cGVyIGludGVnZXJGb3JLZXk6QCJudW1iZXIiXTsKLX0KLQotLSAo
dm9pZClzZXRBbmltYWxzOihUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFscylhbmltYWxzCi17
Ci0gICAgW3N1cGVyIHNldFN0cmluZzp0b1Byb3RvY29sU3RyaW5nKGFuaW1hbHMpIGZvcktleTpA
ImFuaW1hbHMiXTsKLX0KLQotLSAoVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHMpYW5pbWFs
cwotewotICAgIHJldHVybiBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sVGVzdENhc3Rl
ZEFuaW1hbHM+KFtzdXBlciBzdHJpbmdGb3JLZXk6QCJhbmltYWxzIl0pLnZhbHVlKCk7Ci19Ci0K
LS0gKHZvaWQpc2V0SWRlbnRpZmllcjooaW50KWlkZW50aWZpZXIKLXsKLSAgICBbc3VwZXIgc2V0
SW50ZWdlcjppZGVudGlmaWVyIGZvcktleTpAImlkIl07Ci19Ci0KLS0gKGludClpZGVudGlmaWVy
Ci17Ci0gICAgcmV0dXJuIFtzdXBlciBpbnRlZ2VyRm9yS2V5OkAiaWQiXTsKLX0KLQotLSAodm9p
ZClzZXRUcmVlOihUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSAqKXRyZWUKLXsKLSAg
ICBbc3VwZXIgc2V0T2JqZWN0OnRyZWUgZm9yS2V5OkAidHJlZSJdOwotfQotCi0tIChUZXN0UHJv
dG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSAqKXRyZWUKLXsKLSAgICBSV0lQcm90b2NvbEpTT05P
YmplY3QgKm9iamVjdCA9IFtzdXBlciBvYmplY3RGb3JLZXk6QCJ0cmVlIl07Ci0gICAgaWYgKCFv
YmplY3QpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgcmV0dXJuIFtbVGVzdFByb3RvY29sVGVz
dFJlY3Vyc2l2ZU9iamVjdDEgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDpbW3N1cGVyIG9iamVj
dEZvcktleTpAInRyZWUiXSB0b0pTT05PYmplY3RdLmdldCgpXTsKLX0KLQotQGVuZAotCi1AaW1w
bGVtZW50YXRpb24gVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEKLQotLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwg
aWQ+ICopcGF5bG9hZAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAg
ICByZXR1cm4gbmlsOwotCi0gICAgc2VsZi5vYmogPSBbW1Rlc3RQcm90b2NvbFRlc3RSZWN1cnNp
dmVPYmplY3QyIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZFtAIm9iaiJdXTsKLQotICAg
IHJldHVybiBzZWxmOwotfQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6
KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9iamVjdAotewotICAgIGlmICghKHNlbGYgPSBbc3Vw
ZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmplY3QgdG9KU09OT2JqZWN0XS5nZXQoKV0pKQotICAg
ICAgICByZXR1cm4gbmlsOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpc2V0T2Jq
OihUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MiAqKW9iagotewotICAgIFtzdXBlciBz
ZXRPYmplY3Q6b2JqIGZvcktleTpAIm9iaiJdOwotfQotCi0tIChUZXN0UHJvdG9jb2xUZXN0UmVj
dXJzaXZlT2JqZWN0MiAqKW9iagotewotICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb2JqZWN0
ID0gW3N1cGVyIG9iamVjdEZvcktleTpAIm9iaiJdOwotICAgIGlmICghb2JqZWN0KQotICAgICAg
ICByZXR1cm4gbmlsOwotICAgIHJldHVybiBbW1Rlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmpl
Y3QyIGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6W1tzdXBlciBvYmplY3RGb3JLZXk6QCJvYmoi
XSB0b0pTT05PYmplY3RdLmdldCgpXTsKLX0KLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gVGVz
dFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDIKLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
UGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZAot
ewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwot
Ci0gICAgc2VsZi5vYmogPSBbW1Rlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxIGFsbG9j
XSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZFtAIm9iaiJdXTsKLQotICAgIHJldHVybiBzZWxmOwot
fQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNP
Tk9iamVjdCAqKW9iamVjdAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09O
T2JqZWN0OltvYmplY3QgdG9KU09OT2JqZWN0XS5nZXQoKV0pKQotICAgICAgICByZXR1cm4gbmls
OwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpc2V0T2JqOihUZXN0UHJvdG9jb2xU
ZXN0UmVjdXJzaXZlT2JqZWN0MSAqKW9iagotewotICAgIFtzdXBlciBzZXRPYmplY3Q6b2JqIGZv
cktleTpAIm9iaiJdOwotfQotCi0tIChUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSAq
KW9iagotewotICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb2JqZWN0ID0gW3N1cGVyIG9iamVj
dEZvcktleTpAIm9iaiJdOwotICAgIGlmICghb2JqZWN0KQotICAgICAgICByZXR1cm4gbmlsOwot
ICAgIHJldHVybiBbW1Rlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxIGFsbG9jXSBpbml0
V2l0aEpTT05PYmplY3Q6W1tzdXBlciBvYmplY3RGb3JLZXk6QCJvYmoiXSB0b0pTT05PYmplY3Rd
LmdldCgpXTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMu
bW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbi1yZXN1
bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJp
Yy9leHBlY3RlZC90eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0CmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNDMwZWRlNTA4Yi4uMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0
ZWQvdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uLXJlc3VsdAorKysgL2Rldi9udWxsCkBA
IC0xLDExNjQgKzAsMCBAQAotIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5k
cy5qcwotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtd2l0aC1vcGVuLXBh
cmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
IyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi0jaW5jbHVkZSAiVGVzdFBy
b3RvY29sVHlwZXMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5k
Um91dGVyLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihS
ZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRj
aGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQotICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNr
ZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7
IH0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNw
YXRjaGVyOwotfTsKLQotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSNlbmRpZiAv
LyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSMjIyBFbmQgRmlsZTog
VGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
QmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0
eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xP
YmplY3RzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIElu
c3BlY3RvciB7Ci0KLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCi0KLQotfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAot
Ci0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pT
T05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKLSNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCi0j
ZW5kaWYKLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1
ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsK
LQotY2xhc3MgRnJvbnRlbmRSb3V0ZXI7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMj
IEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSB0eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRl
c3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQot
bmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMg
RW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sT2JqZWN0cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
dHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+
Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQot
Ci0KLS8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgotbmFtZXNwYWNlIFRlc3QgewotY2xhc3MgTm9P
cGVuUGFyYW1ldGVyczsKLWNsYXNzIE9wZW5QYXJhbWV0ZXJzOwotfSAvLyBUZXN0Ci0vLyBFbmQg
b2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCi0KLQotCi0KLW5hbWVzcGFjZSBUZXN0IHsKLWNsYXNz
IE5vT3BlblBhcmFtZXRlcnMgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7Ci1wdWJsaWM6Ci0g
ICAgZW51bSB7Ci0gICAgICAgIE5vRmllbGRzU2V0ID0gMCwKLSAgICAgICAgT25lU2V0ID0gMSA8
PCAwLAotICAgICAgICBUd29TZXQgPSAxIDw8IDEsCi0gICAgICAgIEFsbEZpZWxkc1NldCA9IChP
bmVTZXQgfCBUd29TZXQpCi0gICAgfTsKLQotICAgIHRlbXBsYXRlPGludCBTVEFURT4KLSAgICBj
bGFzcyBCdWlsZGVyIHsKLSAgICBwcml2YXRlOgotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0
PiBtX3Jlc3VsdDsKLQotICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8
IFNURVA+JiBjYXN0U3RhdGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKnJlaW50
ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBCdWlsZGVyKFJlZjwvKk5vT3BlblBhcmFtZXRlcnMqL0pTT046Ok9iamVjdD4mJiBv
YmplY3QpCi0gICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKLSAgICAgICAg
ewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxk
ZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZnJpZW5k
IGNsYXNzIE5vT3BlblBhcmFtZXRlcnM7Ci0gICAgcHVibGljOgotCi0gICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBPbmVTZXQ+JiBzZXRPbmUoZG91YmxlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgT25lU2V0KSwgcHJvcGVydHlfb25lX2FscmVh
ZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXREb3VibGUoIm9uZSJfcywgdmFsdWUp
OwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxPbmVTZXQ+KCk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVHdvU2V0PiYgc2V0VHdvKGRvdWJsZSB2YWx1ZSkKLSAg
ICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFR3b1NldCksIHBy
b3BlcnR5X3R3b19hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0RG91Ymxl
KCJ0d28iX3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VHdvU2V0Pigp
OwotICAgICAgICB9Ci0KLSAgICAgICAgUmVmPE5vT3BlblBhcmFtZXRlcnM+IHJlbGVhc2UoKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNT
ZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6
ZW9mKE5vT3BlblBhcmFtZXRlcnMpID09IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5ub3RfY2Fz
dCk7Ci0KLSAgICAgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25SZXN1bHQgPSBtX3Jlc3Vs
dC5yZWxlYXNlTm9uTnVsbCgpOwotICAgICAgICAgICAgYXV0byByZXN1bHQgPSBXVEZNb3ZlKCpy
ZWludGVycHJldF9jYXN0PFJlZjxOb09wZW5QYXJhbWV0ZXJzPio+KCZqc29uUmVzdWx0KSk7Ci0g
ICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIC8qCi0g
ICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgotICAgICAqIFJlZjxOb09wZW5QYXJhbWV0ZXJz
PiByZXN1bHQgPSBOb09wZW5QYXJhbWV0ZXJzOjpjcmVhdGUoKQotICAgICAqICAgICAuc2V0T25l
KC4uLikKLSAgICAgKiAgICAgLnNldFR3byguLi4pCi0gICAgICogICAgIC5yZWxlYXNlKCk7Ci0g
ICAgICovCi0gICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCi0gICAgewot
ICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KSk7Ci0gICAgfQotfTsKLQotY2xhc3MgT3BlblBhcmFtZXRlcnMgOiBwdWJsaWMgSlNPTjo6T2Jq
ZWN0IHsKLXB1YmxpYzoKLSAgICBlbnVtIHsKLSAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAotICAg
ICAgICBBbHBoYVNldCA9IDEgPDwgMCwKLSAgICAgICAgQmV0YVNldCA9IDEgPDwgMSwKLSAgICAg
ICAgQWxsRmllbGRzU2V0ID0gKEFscGhhU2V0IHwgQmV0YVNldCkKLSAgICB9OwotCi0gICAgdGVt
cGxhdGU8aW50IFNUQVRFPgotICAgIGNsYXNzIEJ1aWxkZXIgewotICAgIHByaXZhdGU6Ci0gICAg
ICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVzdWx0OwotCi0gICAgICAgIHRlbXBsYXRlPGlu
dCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4q
Pih0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXIoUmVmPC8qT3BlblBhcmFtZXRl
cnMqL0pTT046Ok9iamVjdD4mJiBvYmplY3QpCi0gICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1v
dmUob2JqZWN0KSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUg
PT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgZnJpZW5kIGNsYXNzIE9wZW5QYXJhbWV0ZXJzOwotICAgIHB1YmxpYzoK
LQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQWxwaGFTZXQ+JiBzZXRBbHBoYShkb3VibGUgdmFs
dWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBBbHBo
YVNldCksIHByb3BlcnR5X2FscGhhX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXREb3VibGUoImFscGhhIl9zLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0
YXRlPEFscGhhU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IEJl
dGFTZXQ+JiBzZXRCZXRhKGRvdWJsZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIEJldGFTZXQpLCBwcm9wZXJ0eV9iZXRhX2FscmVhZHlfc2V0
KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXREb3VibGUoImJldGEiX3MsIHZhbHVlKTsKLSAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8QmV0YVNldD4oKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIFJlZjxPcGVuUGFyYW1ldGVycz4gcmVsZWFzZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFk
eSk7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoT3BlblBhcmFtZXRlcnMpID09
IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7Ci0KLSAgICAgICAgICAgIFJlZjxK
U09OOjpPYmplY3Q+IGpzb25SZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOwotICAg
ICAgICAgICAgYXV0byByZXN1bHQgPSBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxPcGVu
UGFyYW1ldGVycz4qPigmanNvblJlc3VsdCkpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
LSAgICAgICAgfQotICAgIH07Ci0KLSAgICAvKgotICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3Rv
cjoKLSAgICAgKiBSZWY8T3BlblBhcmFtZXRlcnM+IHJlc3VsdCA9IE9wZW5QYXJhbWV0ZXJzOjpj
cmVhdGUoKQotICAgICAqICAgICAuc2V0QWxwaGEoLi4uKQotICAgICAqICAgICAuc2V0QmV0YSgu
Li4pCi0gICAgICogICAgIC5yZWxlYXNlKCk7Ci0gICAgICovCi0gICAgc3RhdGljIEJ1aWxkZXI8
Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0Zp
ZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7Ci0gICAgfQotCi0gICAgLy8gUHJvcGVy
dHkgbmFtZXMgZm9yIHR5cGUgZ2VuZXJhdGVkIGFzIG9wZW4uCi0gICAgTm9uZSBzdGF0aWMgY29u
c3QgY2hhciogQWxwaGE7Ci19OwotCi19IC8vIFRlc3QKLQotCi0KLX0gLy8gbmFtZXNwYWNlIFBy
b3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xPYmplY3RzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3Bw
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRoLW9wZW4tcGFyYW1l
dGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0KLSNp
bmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0K
LW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi1jb25zdCBj
aGFyKiBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpPcGVuUGFyYW1ldGVyczo6QWxwaGEgPSAi
YWxwaGEiOwotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2luY2x1ZGUg
PHd0Zi9SZXRhaW5QdHIuaD4KLQotCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLX0gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmRE
aXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0
Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXdpdGgtb3Bl
bi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlz
cGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW5jbHVk
ZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1
ZXMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPFdlYkluc3Bl
Y3Rvci9UZXN0UHJvdG9jb2wuaD4KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1
bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAot
QGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0KLSMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90
b2NvbENvbmZpZ3VyYXRpb24uaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIK
LSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KLSNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW1w
b3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLQotdXNp
bmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENv
bmZpZ3VyYXRpb24KLXsKLSAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250
cm9sbGVyOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50
YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVy
IGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQo
Y29udHJvbGxlcik7Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVybiBz
ZWxmOwotfQotCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0K
LUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLQot
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVz
dFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zLmgiCi0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5z
cGVjdG9yOwotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5t
bQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSB0eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3Vu
ZGF0aW9uLmg+Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3Qu
aD4KLQotCi1AY2xhc3MgVGVzdFByb3RvY29sVGVzdE5vT3BlblBhcmFtZXRlcnM7Ci1AY2xhc3Mg
VGVzdFByb3RvY29sVGVzdE9wZW5QYXJhbWV0ZXJzOwotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRl
Z2VyLCBUZXN0UHJvdG9jb2xQbGF0Zm9ybSkgewotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxs
LAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYywKLSAgICBUZXN0UHJvdG9jb2xQbGF0
Zm9ybUlPUywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TLAotfTsKLQotCi0KLQotX19h
dHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90
b2NvbFRlc3ROb09wZW5QYXJhbWV0ZXJzIDogUldJUHJvdG9jb2xKU09OT2JqZWN0Ci0tIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICop
cGF5bG9hZDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90
b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoT25l
Oihkb3VibGUpb25lIHR3bzooZG91YmxlKXR3bzsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAo
bm9uYXRvbWljLCBhc3NpZ24pIGRvdWJsZSBvbmU7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkg
KG5vbmF0b21pYywgYXNzaWduKSBkb3VibGUgdHdvOwotQGVuZAotCi1fX2F0dHJpYnV0ZV9fKCh2
aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sVGVzdE9wZW5Q
YXJhbWV0ZXJzIDogUldJUHJvdG9jb2xKU09OT2JqZWN0Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKLS0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3Qg
Kilqc29uT2JqZWN0OwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQWxwaGE6KGRvdWJsZSlhbHBo
YSBiZXRhOihkb3VibGUpYmV0YTsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWlj
LCBhc3NpZ24pIGRvdWJsZSBhbHBoYTsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRv
bWljLCBhc3NpZ24pIGRvdWJsZSBiZXRhOwotQGVuZAotCi0KLQotCi0KLQotI2ltcG9ydCA8V2Vi
SW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgotCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJ
bnRlcm5hbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRoLW9w
ZW4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sSlNP
Tk9iamVjdFByaXZhdGUuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5z
cGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotCi0KLQot
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBv
cnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KLQotbmFtZXNw
YWNlIEluc3BlY3RvciB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KLU9wdGlv
bmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUp
OwotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sUGxhdGZvcm0g
dmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0
Zm9ybUFsbDoKLSAgICAgICAgcmV0dXJuICJhbGwiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQ
bGF0Zm9ybUdlbmVyaWM6Ci0gICAgICAgIHJldHVybiAiZ2VuZXJpYyJfczsKLSAgICBjYXNlIFRl
c3RQcm90b2NvbFBsYXRmb3JtSU9TOgotICAgICAgICByZXR1cm4gImlvcyJfczsKLSAgICBjYXNl
IFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M6Ci0gICAgICAgIHJldHVybiAibWFjb3MiX3M7Ci0g
ICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sUGxhdGZv
cm0+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2
YWx1ZSA9PSAiYWxsIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOwot
ICAgIGlmICh2YWx1ZSA9PSAiZ2VuZXJpYyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQ
bGF0Zm9ybUdlbmVyaWM7Ci0gICAgaWYgKHZhbHVlID09ICJpb3MiKQotICAgICAgICByZXR1cm4g
VGVzdFByb3RvY29sUGxhdGZvcm1JT1M7Ci0gICAgaWYgKHZhbHVlID09ICJtYWNvcyIpCi0gICAg
ICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOwotICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7Ci19Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5
cGVQYXJzZXIuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQ
cml2YXRlLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbnRlcmZhY2UgVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChUZXN0RG9tYWluKQotCi0rICh2b2lkKV9wYXJzZU5v
T3BlblBhcmFtZXRlcnM6KFRlc3RQcm90b2NvbFRlc3ROb09wZW5QYXJhbWV0ZXJzICoqKW91dFZh
bHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotKyAodm9pZClfcGFyc2VPcGVuUGFyYW1ldGVy
czooVGVzdFByb3RvY29sVGVzdE9wZW5QYXJhbWV0ZXJzICoqKW91dFZhbHVlIGZyb21QYXlsb2Fk
OihpZClwYXlsb2FkOwotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMgKFRlc3REb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlTm9PcGVuUGFyYW1ldGVy
czooVGVzdFByb3RvY29sVGVzdE5vT3BlblBhcmFtZXRlcnMgKiopb3V0VmFsdWUgZnJvbVBheWxv
YWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxv
YWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2Nv
bFRlc3ROb09wZW5QYXJhbWV0ZXJzIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07Ci19
Ci0KLSsgKHZvaWQpX3BhcnNlT3BlblBhcmFtZXRlcnM6KFRlc3RQcm90b2NvbFRlc3RPcGVuUGFy
YW1ldGVycyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOwot
ICAgICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sVGVzdE9wZW5QYXJhbWV0ZXJzIGFsbG9jXSBp
bml0V2l0aFBheWxvYWQ6cGF5bG9hZF07Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sVHlwZXMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXdpdGgt
b3Blbi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJv
dG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNp
bXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0K
LQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFRlc3ROb09wZW5QYXJhbWV0ZXJzCi0KLS0g
KGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3Ry
aW5nICosIGlkPiAqKXBheWxvYWQKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkK
LSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURf
UFJPUEVSVFkocGF5bG9hZFtAIm9uZSJdLCBAIm9uZSIpOwotICAgIHNlbGYub25lID0gW3BheWxv
YWRbQCJvbmUiXSBkb3VibGVWYWx1ZV07Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJ
UkVEX1BST1BFUlRZKHBheWxvYWRbQCJ0d28iXSwgQCJ0d28iKTsKLSAgICBzZWxmLnR3byA9IFtw
YXlsb2FkW0AidHdvIl0gZG91YmxlVmFsdWVdOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0tIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0
ICopb2JqZWN0Ci17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEpTT05PYmplY3Q6
W29iamVjdCB0b0pTT05PYmplY3RdLmdldCgpXSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAg
ICByZXR1cm4gc2VsZjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoT25lOihkb3VibGUp
b25lIHR3bzooZG91YmxlKXR3bwotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQot
ICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgc2VsZi5vbmUgPSBvbmU7Ci0gICAgc2VsZi50d28g
PSB0d287Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClzZXRPbmU6KGRvdWJsZSlv
bmUKLXsKLSAgICBbc3VwZXIgc2V0RG91YmxlOm9uZSBmb3JLZXk6QCJvbmUiXTsKLX0KLQotLSAo
ZG91YmxlKW9uZQotewotICAgIHJldHVybiBbc3VwZXIgZG91YmxlRm9yS2V5OkAib25lIl07Ci19
Ci0KLS0gKHZvaWQpc2V0VHdvOihkb3VibGUpdHdvCi17Ci0gICAgW3N1cGVyIHNldERvdWJsZTp0
d28gZm9yS2V5OkAidHdvIl07Ci19Ci0KLS0gKGRvdWJsZSl0d28KLXsKLSAgICByZXR1cm4gW3N1
cGVyIGRvdWJsZUZvcktleTpAInR3byJdOwotfQotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBU
ZXN0UHJvdG9jb2xUZXN0T3BlblBhcmFtZXRlcnMKLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
UGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZAot
ewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwot
Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiYWxw
aGEiXSwgQCJhbHBoYSIpOwotICAgIHNlbGYuYWxwaGEgPSBbcGF5bG9hZFtAImFscGhhIl0gZG91
YmxlVmFsdWVdOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShw
YXlsb2FkW0AiYmV0YSJdLCBAImJldGEiKTsKLSAgICBzZWxmLmJldGEgPSBbcGF5bG9hZFtAImJl
dGEiXSBkb3VibGVWYWx1ZV07Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLS0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilvYmplY3QK
LXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoSlNPTk9iamVjdDpbb2JqZWN0IHRv
SlNPTk9iamVjdF0uZ2V0KCldKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIHJldHVybiBz
ZWxmOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhBbHBoYTooZG91YmxlKWFscGhhIGJl
dGE6KGRvdWJsZSliZXRhCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAg
ICAgIHJldHVybiBuaWw7Ci0KLSAgICBzZWxmLmFscGhhID0gYWxwaGE7Ci0gICAgc2VsZi5iZXRh
ID0gYmV0YTsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKXNldEFscGhhOihkb3Vi
bGUpYWxwaGEKLXsKLSAgICBbc3VwZXIgc2V0RG91YmxlOmFscGhhIGZvcktleTpAImFscGhhIl07
Ci19Ci0KLS0gKGRvdWJsZSlhbHBoYQotewotICAgIHJldHVybiBbc3VwZXIgZG91YmxlRm9yS2V5
OkAiYWxwaGEiXTsKLX0KLQotLSAodm9pZClzZXRCZXRhOihkb3VibGUpYmV0YQotewotICAgIFtz
dXBlciBzZXREb3VibGU6YmV0YSBmb3JLZXk6QCJiZXRhIl07Ci19Ci0KLS0gKGRvdWJsZSliZXRh
Ci17Ci0gICAgcmV0dXJuIFtzdXBlciBkb3VibGVGb3JLZXk6QCJiZXRhIl07Ci19Ci0KLUBlbmQK
LQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3Rl
ZC92ZXJzaW9uLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvdmVyc2lvbi5qc29uLXJlc3VsdApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDRlODdkYzQ3MzkuLjAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVj
dGVkL3ZlcnNpb24uanNvbi1yZXN1bHQKKysrIC9kZXYvbnVsbApAQCAtMSw4ODAgKzAsMCBAQAot
IyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHZlcnNpb24uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0vLyBWZXJzaW9uRG9tYWluCi1JbnNwZWN0b3JCYWNrZW5k
LnJlZ2lzdGVyRG9tYWluKCJWZXJzaW9uRG9tYWluIiwgbnVsbCk7Ci1JbnNwZWN0b3JCYWNrZW5k
LnJlZ2lzdGVyVmVyc2lvbigiVmVyc2lvbkRvbWFpbiIsIDQyKTsKLUluc3BlY3RvckJhY2tlbmQu
YWN0aXZhdGVEb21haW4oIlZlcnNpb25Eb21haW4iLCBudWxsKTsKLSMjIyBFbmQgRmlsZTogSW5z
cGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRl
QmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB2
ZXJzaW9uLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsK
LQotY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZvaWQg
c2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNo
ZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KLSAgICBC
YWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2Jh
Y2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Ci1wcml2YXRlOgotICAgIFJlZlB0cjxCYWNrZW5kRGlz
cGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKLX07Ci0KLQotCi0KLX0gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgotCi0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCi0jIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAot
Ci0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lvbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3Rv
Y29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFj
ZSBJbnNwZWN0b3IgewotCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQotCi0KLX0gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJz
LmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lvbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0j
aW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jaW5j
bHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgotI2VuZGlmCi0KLW5hbWVz
cGFjZSBJbnNwZWN0b3IgewotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBF
bmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRl
c3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSB2ZXJzaW9uLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5j
bHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
LQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEZyb250ZW5kUm91dGVyOwotCi19IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hl
cnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lvbi5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
LQotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIHZlcnNpb24uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
clByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotCi1uYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKLQotCi0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLS8vIFZlcnNpb25z
LgotbmFtZXNwYWNlIFZlcnNpb25Eb21haW4gewotc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBW
RVJTSU9OID0gNDI7Ci19IC8vIFZlcnNpb25Eb21haW4KLS8vIEVuZCBvZiB2ZXJzaW9ucy4KLQot
Ci0KLQotCi0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHZlcnNpb24uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2Jq
ZWN0cy5oIgotCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotbmFtZXNwYWNlIFByb3RvY29s
IHsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHZlcnNpb24uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0
ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgot
Ci0KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHZlcnNpb24uanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRl
c3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29s
SW50ZXJuYWwuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNp
bmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2Vu
ZERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0
aW9uLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8V2ViSW5z
cGVjdG9yL1Rlc3RQcm90b2NvbC5oPgotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVm
YXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0
Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLQot
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
bi5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2ltcG9ydCAiVGVzdFBy
b3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRl
cm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVu
dGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5z
cGVjdG9yOwotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgotewot
ICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci19Ci0KLS0g
KGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29u
dHJvbGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYg
KCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAg
ICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZv
aWQpZGVhbGxvYwotewotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotQGVuZAotCi0KLSMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHZlcnNpb24uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+
Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wu
aAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHZlcnNpb24uanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxGb3VuZGF0aW9u
L0ZvdW5kYXRpb24uaD4KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9i
amVjdC5oPgotCi0KLQotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xQ
bGF0Zm9ybSkgewotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsLAotICAgIFRlc3RQcm90b2Nv
bFBsYXRmb3JtR2VuZXJpYywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUywKLSAgICBUZXN0
UHJvdG9jb2xQbGF0Zm9ybU1hY09TLAotfTsKLQotCi0KLQotCi0KLQotCi0KLQotI2ltcG9ydCA8
V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgotCi0j
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xJbnRlcm5hbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lvbi5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQg
IlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUu
aCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxl
ci5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotCi0KLQotIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHZlcnNpb24u
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0
ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5
Q29udmVyc2lvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIE9iakNFbnVtVHlwZT4KLU9wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3Ry
aW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOwotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJp
bmcoVGVzdFByb3RvY29sUGxhdGZvcm0gdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0g
ICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDoKLSAgICAgICAgcmV0dXJuICJhbGwiX3M7
Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM6Ci0gICAgICAgIHJldHVybiAi
Z2VuZXJpYyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOgotICAgICAgICBy
ZXR1cm4gImlvcyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M6Ci0gICAg
ICAgIHJldHVybiAibWFjb3MiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0
aW9uYWw8VGVzdFByb3RvY29sUGxhdGZvcm0+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJp
bmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiYWxsIikKLSAgICAgICAgcmV0dXJuIFRl
c3RQcm90b2NvbFBsYXRmb3JtQWxsOwotICAgIGlmICh2YWx1ZSA9PSAiZ2VuZXJpYyIpCi0gICAg
ICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM7Ci0gICAgaWYgKHZhbHVlID09
ICJpb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1JT1M7Ci0gICAgaWYg
KHZhbHVlID09ICJtYWNvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1h
Y09TOwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0KLSMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29s
VHlwZVBhcnNlci5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVj
dFByaXZhdGUuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0KLQotCi0KLSMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHZlcnNpb24uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2Nv
bEpTT05PYmplY3RQcml2YXRlLmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9y
dCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0j
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWNvbW1h
bmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbiBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24t
Y29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNmRmOWU0YmQ5Yy4uMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMv
ZmFpbC1vbi1jb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBl
Lmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLVsKLXsKLSAgICAiZG9tYWluIjog
IkRvbWFpbiIsCi0gICAgImRlYnVnZ2FibGVUeXBlcyI6IFsiamF2YXNjcmlwdCJdLAotICAgICJ0
YXJnZXRUeXBlcyI6IFsid29ya2VyIl0sCi0gICAgImNvbW1hbmRzIjogW3sibmFtZSI6ICJDb21t
YW5kIn1dLAotICAgICJldmVudHMiOiBbeyJuYW1lIjogIkV2ZW50In1dCi19Ci1dCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJp
Yy9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlwZXMtdHlwZS5qc29uIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1jb21tYW5kLXRh
cmdldFR5cGVzLXR5cGUuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjQwNTlm
ODRiY2YuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tY29tbWFuZC10YXJnZXRUeXBlcy10eXBlLmpz
b24KKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIkRvbWFp
biIsCi0gICAgImNvbW1hbmRzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJQ
YWdlT25seSIsCi0gICAgICAgICAgICAidGFyZ2V0VHlwZXMiOiAicGFnZWUiCi0gICAgICAgIH0K
LSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlwZXMtdmFsdWUuanNv
biBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2ZhaWwtb24tY29tbWFuZC10YXJnZXRUeXBlcy12YWx1ZS5qc29uCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA1MDIwNDQ3MmVjOC4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1jb21tYW5k
LXRhcmdldFR5cGVzLXZhbHVlLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLXsK
LSAgICAiZG9tYWluIjogIkRvbWFpbiIsCi0gICAgImNvbW1hbmRzIjogWwotICAgICAgICB7Ci0g
ICAgICAgICAgICAibmFtZSI6ICJQYWdlT25seSIsCi0gICAgICAgICAgICAidGFyZ2V0VHlwZXMi
OiBbInBhZ2VlIl0KLSAgICAgICAgfQotICAgIF0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tY29tbWFu
ZC13aXRoLWludmFsaWQtcGxhdGZvcm0uanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tY29tbWFuZC13aXRoLWludmFsaWQt
cGxhdGZvcm0uanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTE4MGNhZTliZmYu
LjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tY29tbWFuZC13aXRoLWludmFsaWQtcGxhdGZvcm0uanNv
bgorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIk92ZXJs
YXkiLAotICAgICJjb21tYW5kcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAi
cHJvY2Vzc1BvaW50cyIsCi0gICAgICAgICAgICAicGxhdGZvcm0iOiAiaW52YWxpZCIsCi0gICAg
ICAgICAgICAicGFyYW1ldGVycyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBvaW50
MSIsICJ0eXBlIjogIm51bWJlciIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBvaW50
MiIsICJ0eXBlIjogIm51bWJlciIgfQotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJyZXR1
cm5zIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicmVzdWx0IiwgInR5cGUiOiAic3Ry
aW5nIiB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWls
LW9uLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMtdHlwZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kb21haW4tZGVidWdn
YWJsZVR5cGVzLXR5cGUuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTc0OGY0
MjM0NzMuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZG9tYWluLWRlYnVnZ2FibGVUeXBlcy10eXBl
Lmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIldl
Yk9ubHkiLAotICAgICJkZWJ1Z2dhYmxlVHlwZXMiOiAid2ViYiIsCi0gICAgImNvbW1hbmRzIjog
WwotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJlbmFibGUiCi0gICAgICAgIH0KLSAg
ICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMtdmFsdWUuanNv
biBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2ZhaWwtb24tZG9tYWluLWRlYnVnZ2FibGVUeXBlcy12YWx1ZS5qc29uCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBiMjUyZGRiZDgzZC4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kb21h
aW4tZGVidWdnYWJsZVR5cGVzLXZhbHVlLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAg
QEAKLXsKLSAgICAiZG9tYWluIjogIldlYk9ubHkiLAotICAgICJkZWJ1Z2dhYmxlVHlwZXMiOiBb
IndlYmIiXSwKLSAgICAiY29tbWFuZHMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1l
IjogImVuYWJsZSIKLSAgICAgICAgfQotICAgIF0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZG9tYWlu
LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24gYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWRv
bWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YWEwMjgwNDY1Ny4uMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFp
bC1vbi1kb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNv
bgorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotWwotewotICAgICJkb21haW4iOiAiRG9t
YWluIiwKLSAgICAiZGVidWdnYWJsZVR5cGVzIjogWyJqYXZhc2NyaXB0Il0sCi0gICAgImNvbW1h
bmRzIjogW3sibmFtZSI6ICJDb21tYW5kIiwgInRhcmdldFR5cGVzIjogWyJ3b3JrZXIiXX1dLAot
ICAgICJldmVudHMiOiBbeyJuYW1lIjogIkV2ZW50In1dCi19Ci1dCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9u
LWRvbWFpbi10YXJnZXRUeXBlcy10eXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWRvbWFpbi10YXJnZXRUeXBlcy10
eXBlLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4MjIyNjc0MTQ2Li4wMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZ2VuZXJpYy9mYWlsLW9uLWRvbWFpbi10YXJnZXRUeXBlcy10eXBlLmpzb24KKysrIC9kZXYv
bnVsbApAQCAtMSw5ICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIlBhZ2VPbmx5IiwKLSAgICAi
dGFyZ2V0VHlwZXMiOiAicGFnZWUiLAotICAgICJjb21tYW5kcyI6IFsKLSAgICAgICAgewotICAg
ICAgICAgICAgIm5hbWUiOiAiZW5hYmxlIgotICAgICAgICB9Ci0gICAgXQotfQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMv
ZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZXMtdmFsdWUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZG9tYWluLXRhcmdl
dFR5cGVzLXZhbHVlLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3YjEwZDdm
MTU0Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWRvbWFpbi10YXJnZXRUeXBlcy12YWx1ZS5qc29u
CisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi17Ci0gICAgImRvbWFpbiI6ICJQYWdlT25s
eSIsCi0gICAgInRhcmdldFR5cGVzIjogWyJwYWdlZSJdLAotICAgICJjb21tYW5kcyI6IFsKLSAg
ICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiZW5hYmxlIgotICAgICAgICB9Ci0gICAgXQot
fQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2dlbmVyaWMvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1jYWxsLXBhcmFtZXRlci1uYW1l
cy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1jYWxsLXBhcmFtZXRlci1uYW1lcy5qc29u
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYWI3NmNhNjI3OS4uMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVy
aWMvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1jYWxsLXBhcmFtZXRlci1uYW1lcy5qc29uCisr
KyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotewotICAgICJkb21haW4iOiAiT3ZlcmxheSIs
Ci0gICAgImNvbW1hbmRzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJwcm9j
ZXNzUG9pbnRzIiwKLSAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwotICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAicG9pbnQiLCAidHlwZSI6ICJudW1iZXIiIH0sCi0gICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJwb2ludCIsICJ0eXBlIjogIm51bWJlciIgfQotICAgICAgICAgICAgXSwKLSAg
ICAgICAgICAgICJyZXR1cm5zIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicmVzdWx0
MSIsICJ0eXBlIjogInN0cmluZyIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInJlc3Vs
dDIiLCAidHlwZSI6ICJzdHJpbmciIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfQotICAgIF0K
LX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9nZW5lcmljL2ZhaWwtb24tZHVwbGljYXRlLWNvbW1hbmQtcmV0dXJuLXBhcmFtZXRlci1u
YW1lcy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1yZXR1cm4tcGFyYW1ldGVyLW5hbWVz
Lmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4YmIxNWMwNGI2Li4wMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJpYy9mYWlsLW9uLWR1cGxpY2F0ZS1jb21tYW5kLXJldHVybi1wYXJhbWV0ZXItbmFtZXMu
anNvbgorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIk92
ZXJsYXkiLAotICAgICJjb21tYW5kcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUi
OiAicHJvY2Vzc1BvaW50cyIsCi0gICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKLSAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInBvaW50MSIsICJ0eXBlIjogIm51bWJlciIgfSwKLSAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInBvaW50MiIsICJ0eXBlIjogIm51bWJlciIgfQotICAgICAgICAg
ICAgXSwKLSAgICAgICAgICAgICJyZXR1cm5zIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAicmVzdWx0IiwgInR5cGUiOiAic3RyaW5nIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAicmVzdWx0IiwgInR5cGUiOiAic3RyaW5nIiB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0K
LSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWR1cGxpY2F0ZS1ldmVudC1wYXJhbWV0ZXItbmFt
ZXMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL2ZhaWwtb24tZHVwbGljYXRlLWV2ZW50LXBhcmFtZXRlci1uYW1lcy5qc29uCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkM2QzYjNjYzY0Mi4uMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFp
bC1vbi1kdXBsaWNhdGUtZXZlbnQtcGFyYW1ldGVyLW5hbWVzLmpzb24KKysrIC9kZXYvbnVsbApA
QCAtMSwxMiArMCwwIEBACi17Ci0gICAgImRvbWFpbiI6ICJPdmVybGF5IiwKLSAgICAiZXZlbnRz
IjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJwcm9jZXNzZWRQb2ludHMiLAot
ICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJw
b2ludCIsICJ0eXBlIjogIm51bWJlciIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBv
aW50IiwgInR5cGUiOiAibnVtYmVyIiB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0KLSAgICBd
Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLWRlY2xhcmF0aW9ucy5qc29uIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFp
bC1vbi1kdXBsaWNhdGUtdHlwZS1kZWNsYXJhdGlvbnMuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNzAyZmM2YTMyNzAuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZHVwbGljYXRl
LXR5cGUtZGVjbGFyYXRpb25zLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi17
Ci0gICAgImRvbWFpbiI6ICJSdW50aW1lIiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAg
ICAgICAgICAgICJpZCI6ICJSZW1vdGVPYmplY3RJZCIsCi0gICAgICAgICAgICAidHlwZSI6ICJz
dHJpbmciLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBvYmplY3QgaWRlbnRp
Zmllci4iCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJSZW1vdGVP
YmplY3RJZCIsCi0gICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAotICAgICAgICAgICAgImRl
c2NyaXB0aW9uIjogIlVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4iCi0gICAgICAgIH0KLSAgICBd
Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLW1lbWJlci1uYW1lcy5qc29uIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFp
bC1vbi1kdXBsaWNhdGUtdHlwZS1tZW1iZXItbmFtZXMuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggYWViYWNlZThiMjMuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZHVwbGljYXRl
LXR5cGUtbWVtYmVyLW5hbWVzLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi1b
Ci17Ci0gICAgImRvbWFpbiI6ICJPdmVybGF5VHlwZXMiLAotICAgICJ0eXBlcyI6IFsKLSAgICAg
ICAgewotICAgICAgICAgICAgImlkIjogIlBvaW50IiwKLSAgICAgICAgICAgICJ0eXBlIjogIm9i
amVjdCIsCi0gICAgICAgICAgICAicHJvcGVydGllcyI6IFsKLSAgICAgICAgICAgICAgICB7ICJu
YW1lIjogIngiLCAidHlwZSI6ICJpbnRlZ2VyIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAieCIsICJ0eXBlIjogImludGVnZXIiIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfQotICAg
IF0KLX0KLV0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZW51bS13aXRoLW5vLXZhbHVlcy5qc29uIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1v
bi1lbnVtLXdpdGgtbm8tdmFsdWVzLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDIzMmE3YzMyNDlhLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWVudW0td2l0aC1uby12YWx1ZXMu
anNvbgorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIkRh
dGFiYXNlIiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJQ
cmltYXJ5Q29sb3JzIiwKLSAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCi0gICAgICAgICAg
ICAiZW51bSI6IFtdCi0gICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWV2ZW50
LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24gYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWV2
ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxMzJjZTA4ODI4Li4wMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWls
LW9uLWV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24K
KysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLVsKLXsKLSAgICAiZG9tYWluIjogIkRvbWFp
biIsCi0gICAgImRlYnVnZ2FibGVUeXBlcyI6IFsiamF2YXNjcmlwdCJdLAotICAgICJjb21tYW5k
cyI6IFt7Im5hbWUiOiAiQ29tbWFuZCJ9XSwKLSAgICAiZXZlbnRzIjogW3sibmFtZSI6ICJFdmVu
dCIsICJ0YXJnZXRUeXBlcyI6IFsid29ya2VyIl19XQotfQotXQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1l
dmVudC10YXJnZXRUeXBlcy10eXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGVzLXR5cGUu
anNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTU0ZWQxZjVjNmIuLjAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlwZXMtdHlwZS5qc29uCisrKyAvZGV2L251bGwK
QEAgLTEsOSArMCwwIEBACi17Ci0gICAgImRvbWFpbiI6ICJEb21haW4iLAotICAgICJldmVudHMi
OiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogIlBhZ2VPbmx5IiwKLSAgICAgICAg
ICAgICJ0YXJnZXRUeXBlcyI6ICJwYWdlZSIKLSAgICAgICAgfQotICAgIF0KLX0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlwZXMtdmFsdWUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZXZlbnQtdGFyZ2V0
VHlwZXMtdmFsdWUuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTg4NGJmZDdh
NmIuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlwZXMtdmFsdWUuanNvbgor
KysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotewotICAgICJkb21haW4iOiAiRG9tYWluIiwK
LSAgICAiZXZlbnRzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJQYWdlT25s
eSIsCi0gICAgICAgICAgICAidGFyZ2V0VHlwZXMiOiBbInBhZ2VlIl0KLSAgICAgICAgfQotICAg
IF0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tbnVtYmVyLXR5cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1m
bGFnLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJpYy9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29u
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MzA4ZGI5OTJkNi4uMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVy
aWMvZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbgorKysg
L2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwK
LSAgICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJEYXRhYmFzZUlk
IiwKLSAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCi0gICAgICAgICAgICAiZGVzY3JpcHRp
b24iOiAiVW5pcXVlIGlkZW50aWZpZXIgb2YgRGF0YWJhc2Ugb2JqZWN0LiIKLSAgICAgICAgfQot
ICAgIF0sCi0gICAgImV2ZW50cyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAi
ZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyIsCi0gICAgICAgICAgICAicGFyYW1ldGVycyI6
IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAic3Ry
aW5nIiwgIm9wdGlvbmFsIjogMCB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0KLSAgICBdCi19
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZ2VuZXJpYy9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29u
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMv
ZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNvbgpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggYWZlYTU1NWVjNGYuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24t
bnVtYmVyLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24KKysrIC9kZXYvbnVsbApAQCAt
MSwxNiArMCwwIEBACi1bCi17Ci0gICAgImRvbWFpbiI6ICJEYXRhYmFzZSIsCi0gICAgInR5cGVz
IjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiRXJyb3IiLAotICAgICAgICAgICAg
InR5cGUiOiAib2JqZWN0IiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJEYXRhYmFzZSBl
cnJvci4iLAotICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCi0gICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJtZXNzYWdlIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIkVycm9y
IG1lc3NhZ2UuIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29kZSIsICJ0eXBlIjog
ImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgY29kZS4iLCAib3B0aW9uYWwiOiAwIH0K
LSAgICAgICAgICAgIF0KLSAgICAgICAgfQotICAgIF0KLX0KLV0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24t
c3RyaW5nLXR5cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24gYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLXN0cmluZy10
eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA0MDEyYzc5YjZiMy4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1zdHJpbmctdHlwZWQt
b3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAg
QEAKLXsKLSAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAg
IHsKLSAgICAgICAgICAgICJpZCI6ICJEYXRhYmFzZUlkIiwKLSAgICAgICAgICAgICJ0eXBlIjog
InN0cmluZyIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIGlkZW50aWZpZXIg
b2YgRGF0YWJhc2Ugb2JqZWN0LiIKLSAgICAgICAgfQotICAgIF0sCi0gICAgImV2ZW50cyI6IFsK
LSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1l
dGVycyIsCi0gICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKLSAgICAgICAgICAgICAgICB7ICJu
YW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogInRydWUi
IH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfQotICAgIF0KLX0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24t
c3RyaW5nLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLXN0cmluZy10eXBl
ZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBjYTNlZjI4YThmOC4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1zdHJpbmctdHlwZWQtb3B0aW9u
YWwtdHlwZS1tZW1iZXIuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLVsKLXsK
LSAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAg
ICAgICAgICAgICJpZCI6ICJFcnJvciIsCi0gICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAot
ICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkRhdGFiYXNlIGVycm9yLiIsCi0gICAgICAgICAg
ICAicHJvcGVydGllcyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm1lc3NhZ2UiLCAi
dHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgbWVzc2FnZS4iIH0sCi0gICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJjb2RlIiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlw
dGlvbiI6ICJFcnJvciBjb2RlLiIsICJvcHRpb25hbCI6ICJmYWxzZSIgfQotICAgICAgICAgICAg
XQotICAgICAgICB9Ci0gICAgXQotfQotXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi10eXBlLWRlY2xhcmF0
aW9uLXVzaW5nLXR5cGUtcmVmZXJlbmNlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLXR5cGUtZGVjbGFyYXRpb24tdXNp
bmctdHlwZS1yZWZlcmVuY2UuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTli
NzU5MGNjYzYuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tdHlwZS1kZWNsYXJhdGlvbi11c2luZy10
eXBlLXJlZmVyZW5jZS5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotWwotewot
ICAgICJkb21haW4iOiAiUnVudGltZSIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7Ci0gICAg
ICAgICAgICAiaWQiOiAiUmVtb3RlT2JqZWN0SWQiLAotICAgICAgICAgICAgInR5cGUiOiAib2Jq
ZWN0IiwKLSAgICAgICAgICAgICIkcmVmIjogIlNvbWVUeXBlIiwKLSAgICAgICAgICAgICJkZXNj
cmlwdGlvbiI6ICJVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIuIgotICAgICAgICB9Ci0gICAgXQot
fQotXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi10eXBlLXJlZmVyZW5jZS1hcy1wcmltaXRpdmUtdHlwZS5q
c29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVy
aWMvZmFpbC1vbi10eXBlLXJlZmVyZW5jZS1hcy1wcmltaXRpdmUtdHlwZS5qc29uCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YzgzYmJmY2U0MS4uMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1v
bi10eXBlLXJlZmVyZW5jZS1hcy1wcmltaXRpdmUtdHlwZS5qc29uCisrKyAvZGV2L251bGwKQEAg
LTEsMTggKzAsMCBAQAotewotICAgICJkb21haW4iOiAiRGF0YWJhc2UiLAotICAgICJ0eXBlcyI6
IFsKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIkRhdGFiYXNlSWQiLAotICAgICAgICAg
ICAgInR5cGUiOiAic3RyaW5nIiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUg
aWRlbnRpZmllciBvZiBEYXRhYmFzZSBvYmplY3QuIgotICAgICAgICB9Ci0gICAgXSwKLSAgICAi
ZXZlbnRzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJkaWRFeGVjdXRlT3B0
aW9uYWxQYXJhbWV0ZXJzIiwKLSAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwotICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJEYXRhYmFzZUlkIiB9Ci0g
ICAgICAgICAgICBdCi0gICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLXR5cGUt
d2l0aC1pbnZhbGlkLXBsYXRmb3JtLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLXR5cGUtd2l0aC1pbnZhbGlkLXBsYXRm
b3JtLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5ZmQyZTk5NTYxLi4wMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZ2VuZXJpYy9mYWlsLW9uLXR5cGUtd2l0aC1pbnZhbGlkLXBsYXRmb3JtLmpzb24KKysrIC9k
ZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi17Ci0gICAgImRvbWFpbiI6ICJSdW50aW1lIiwKLSAg
ICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJSZW1vdGVPYmplY3RJ
ZCIsCi0gICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAotICAgICAgICAgICAgInBsYXRmb3Jt
IjogImludmFsaWQiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBvYmplY3Qg
aWRlbnRpZmllci4iCi0gICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLXR5cGUt
d2l0aC1sb3dlcmNhc2UtbmFtZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi10eXBlLXdpdGgtbG93ZXJjYXNlLW5hbWUu
anNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTMxOTAxZTRhOWEuLjAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL2ZhaWwtb24tdHlwZS13aXRoLWxvd2VyY2FzZS1uYW1lLmpzb24KKysrIC9kZXYvbnVs
bApAQCAtMSwxMCArMCwwIEBACi17Ci0gICAgImRvbWFpbiI6ICJEYXRhYmFzZSIsCi0gICAgInR5
cGVzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiZGF0YWJhc2VJZCIsCi0gICAg
ICAgICAgICAidHlwZSI6ICJpbnRlZ2VyIiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJV
bmlxdWUgaWRlbnRpZmllciBvZiBEYXRhYmFzZSBvYmplY3QuIgotICAgICAgICB9Ci0gICAgXQot
fQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2dlbmVyaWMvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtZGVjbGFy
YXRpb24uanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9nZW5lcmljL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLWRlY2xhcmF0
aW9uLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2ODg3YTI3NDExLi4wMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZ2VuZXJpYy9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1kZWNsYXJh
dGlvbi5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotWwotewotICAgICJkb21h
aW4iOiAiUnVudGltZSIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAi
aWQiOiAiUmVtb3RlT2JqZWN0SWQiLAotICAgICAgICAgICAgInR5cGUiOiAiZHJhZ29uIiwKLSAg
ICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIuIgotICAg
ICAgICB9Ci0gICAgXQotfQotXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJl
bmNlLWluLXR5cGUtbWVtYmVyLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4t
dHlwZS1tZW1iZXIuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjgxN2RiNTA0
NGQuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBl
LW1lbWJlci5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotWwotewotICAgICJk
b21haW4iOiAiRmFudGFzeSIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7Ci0gICAgICAgICAg
ICAiaWQiOiAiRHJhZ29uRWdnIiwKLSAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCi0gICAg
ICAgICAgICAiZGVzY3JpcHRpb24iOiAiQSBkcmFnb24gZWdnLiIsCi0gICAgICAgICAgICAicHJv
cGVydGllcyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbG9yIiwgIiRyZWYiOiAi
Q29sb3IiIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfQotICAgIF0KLX0KLV0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2dlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZ2VuZXJhdGUtZG9tYWlu
cy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDY3Y2Y4ZTU4MmY2Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9nZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVy
ZS1ndWFyZHMuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLVsKLXsKLSAgICAi
ZG9tYWluIjogIk5ldHdvcmsxIiwKLSAgICAiZmVhdHVyZUd1YXJkIjogIlBMQVRGT1JNKFdFQl9D
T01NQU5EUykiLAotICAgICJjb21tYW5kcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgIm5h
bWUiOiAibG9hZFJlc291cmNlIiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBh
IHJlc291cmNlIGluIHRoZSBjb250ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGluc3BlY3RlZCBwYWdl
IHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNoZWNrcy4iCi0gICAgICAgIH0KLSAgICBdCi19LAotewot
ICAgICJkb21haW4iOiAiTmV0d29yazIiLAotICAgICJmZWF0dXJlR3VhcmQiOiAiUExBVEZPUk0o
V0VCX1RZUEVTKSIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQi
OiAiTmV0d29ya0Vycm9yIiwKLSAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCi0gICAgICAg
ICAgICAicHJvcGVydGllcyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm1lc3NhZ2Ui
LCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgbWVzc2FnZS4iIH0sCi0g
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2RlIiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNj
cmlwdGlvbiI6ICJFcnJvciBjb2RlLiIgfQotICAgICAgICAgICAgXQotICAgICAgICB9Ci0gICAg
XQotfSwKLXsKLSAgICAiZG9tYWluIjogIk5ldHdvcmszIiwKLSAgICAiZmVhdHVyZUd1YXJkIjog
IlBMQVRGT1JNKFdFQl9FVkVOVFMpIiwKLSAgICAiZXZlbnRzIjogWwotICAgICAgICB7Ci0gICAg
ICAgICAgICAibmFtZSI6ICJyZXNvdXJjZUxvYWRlZCIsCi0gICAgICAgICAgICAiZGVzY3JpcHRp
b24iOiAiQSByZXNvdXJjZSB3YXMgbG9hZGVkLiIKLSAgICAgICAgfQotICAgIF0KLX0KLV0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL3NhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24gYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9zYW1lLXR5cGUtaWQtZGlm
ZmVyZW50LWRvbWFpbi5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYmY0ZGZm
NWNjYy4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgor
KysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLVsKLXsKLSAgICAiZG9tYWluIjogIlJ1bnRp
bWUiLAotICAgICJ0eXBlcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIlJlbW90
ZU9iamVjdElkIiwKLSAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCi0gICAgICAgICAgICAi
ZGVzY3JpcHRpb24iOiAiVW5pcXVlIG9iamVjdCBpZGVudGlmaWVyLiIKLSAgICAgICAgfQotICAg
IF0KLX0sCi17Ci0gICAgImRvbWFpbiI6ICJSdW50aW1lMiIsCi0gICAgInR5cGVzIjogWwotICAg
ICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiUmVtb3RlT2JqZWN0SWQiLAotICAgICAgICAgICAg
InR5cGUiOiAic3RyaW5nIiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgb2Jq
ZWN0IGlkZW50aWZpZXIuIgotICAgICAgICB9Ci0gICAgXQotfQotXQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvc2hhZG93
ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9zaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRl
cnMuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjBhMGMxNTUyNzUuLjAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9nZW5lcmljL3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCisrKyAvZGV2L251
bGwKQEAgLTEsMzEgKzAsMCBAQAotewotICAgICJkb21haW4iOiAiUnVudGltZSIsCi0gICAgInR5
cGVzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiS2V5UGF0aCIsCi0gICAgICAg
ICAgICAidHlwZSI6ICJvYmplY3QiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIktleSBw
YXRoLiIsCi0gICAgICAgICAgICAicHJvcGVydGllcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgICJuYW1lIjogInR5cGUiLAotICAgICAgICAgICAgICAgICAgICAi
dHlwZSI6ICJzdHJpbmciLAotICAgICAgICAgICAgICAgICAgICAiZW51bSI6IFsibnVsbCIsICJz
dHJpbmciLCAiYXJyYXkiXSwKLSAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIktl
eSBwYXRoIHR5cGUuIgotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICAibmFtZSI6ICJzdHJpbmciLAotICAgICAgICAgICAgICAgICAgICAi
dHlwZSI6ICJzdHJpbmciLAotICAgICAgICAgICAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlLAot
ICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiU3RyaW5nIHZhbHVlLiIKLSAgICAg
ICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIm5h
bWUiOiAiYXJyYXkiLAotICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJhcnJheSIsCi0gICAg
ICAgICAgICAgICAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAgICAgICAgICAgICAgICJp
dGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9LAotICAgICAgICAgICAgICAgICAgICAiZGVzY3Jp
cHRpb24iOiAiQXJyYXkgdmFsdWUuIgotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIF0K
LSAgICAgICAgfQotICAgIF0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL3Nob3VsZC1zdHJpcC1jb21tZW50cy5qc29u
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMv
c2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGVjZTFkY2ZjNjFjLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9zaG91bGQtc3RyaXAtY29tbWVudHMuanNvbgor
KysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotewotICAgIC8qIGFib3ZlICovCi0gICAgLyog
YmVmb3JlICovICJkb21haW4iIC8qIGluICovIDogLyogaW4gKi8gIkNvbW1lbnQiIC8qIGFmdGVy
ICovCi0gICAgLyogYmVsb3cgKi8KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNl
ZC1wcmltaXRpdmUtdHlwZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10
eXBlLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiYzlkNTM5NDc4Li4wMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZ2VuZXJpYy90eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgor
KysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIlJ1bnRpbWUi
LAotICAgICJ0eXBlcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIlJlbW90ZU9i
amVjdElkIiwKLSAgICAgICAgICAgICJ0eXBlIjogImludGVnZXIiLAotICAgICAgICAgICAgImRl
c2NyaXB0aW9uIjogIlVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4iCi0gICAgICAgIH0KLSAgICBd
Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy90eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbiBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL3R5cGUtZGVjbGFy
YXRpb24tYXJyYXktdHlwZS5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZmIw
OGJkOTQwYi4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24K
KysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi1bCi17Ci0gICAgImRvbWFpbiI6ICJEZWJ1
Z2dlciIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiQnJl
YWtwb2ludElkIiwKLSAgICAgICAgICAgICJ0eXBlIjogImludGVnZXIiCi0gICAgICAgIH0sCi0g
ICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJSZWFzb24iLAotICAgICAgICAgICAgInR5cGUi
OiAic3RyaW5nIiwKLSAgICAgICAgICAgICJlbnVtIjogWyJEaWVkIiwgIkZhaW50ZWQiLCAiSHVu
Z3J5Il0KLSAgICAgICAgfQotICAgIF0KLX0sCi17Ci0gICAgImRvbWFpbiI6ICJSdW50aW1lIiwK
LSAgICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJPYmplY3RJZCIs
Ci0gICAgICAgICAgICAidHlwZSI6ICJpbnRlZ2VyIgotICAgICAgICB9LAotICAgICAgICB7Ci0g
ICAgICAgICAgICAiaWQiOiAiTHVja3lOdW1iZXJzIiwKLSAgICAgICAgICAgICJ0eXBlIjogImFy
cmF5IiwKLSAgICAgICAgICAgICJpdGVtcyI6IHsgInR5cGUiOiAiaW50ZWdlciIgfQotICAgICAg
ICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiQmFieU5hbWVzIiwKLSAgICAgICAg
ICAgICJ0eXBlIjogImFycmF5IiwKLSAgICAgICAgICAgICJpdGVtcyI6IHsgInR5cGUiOiAic3Ry
aW5nIiB9Ci0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJOZXdPYmpl
Y3RzIiwKLSAgICAgICAgICAgICJ0eXBlIjogImFycmF5IiwKLSAgICAgICAgICAgICJpdGVtcyI6
IHsgIiRyZWYiOiAiT2JqZWN0SWQiIH0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAg
ICAgImlkIjogIk9sZE9iamVjdHMiLAotICAgICAgICAgICAgInR5cGUiOiAiYXJyYXkiLAotICAg
ICAgICAgICAgIml0ZW1zIjogeyAiJHJlZiI6ICJEZWJ1Z2dlci5CcmVha3BvaW50SWQiIH0KLSAg
ICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIlN0b3BSZWFzb25zIiwKLSAg
ICAgICAgICAgICJ0eXBlIjogImFycmF5IiwKLSAgICAgICAgICAgICJpdGVtcyI6IHsgIiRyZWYi
OiAiRGVidWdnZXIuUmVhc29uIiB9Ci0gICAgICAgIH0KLSAgICBdCi19Ci1dCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy90
eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUu
anNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWYwYWVlOWM5MWIuLjAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KKysrIC9kZXYvbnVsbApAQCAt
MSwxNSArMCwwIEBACi17Ci0gICAgImRvbWFpbiI6ICJSdW50aW1lIiwKLSAgICAidHlwZXMiOiBb
Ci0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJGYXJtQW5pbWFscyIsCi0gICAgICAgICAg
ICAidHlwZSI6ICJzdHJpbmciLAotICAgICAgICAgICAgImVudW0iOiBbIlBpZ3MiLCAiQ293cyIs
ICJDYXRzIiwgIkhlbnMiXQotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQi
OiAiVHdvTGVnZ2VkQW5pbWFscyIsCi0gICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAotICAg
ICAgICAgICAgImVudW0iOiBbIkR1Y2tzIiwgIkhlbnMiLCAiQ3Jvd3MiLCAiRmxhbWluZ29zIl0K
LSAgICAgICAgfQotICAgIF0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5
cGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMmM0M2MzMzA5OTIuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL3R5cGUtZGVjbGFyYXRp
b24tb2JqZWN0LXR5cGUuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi1bCi17
Ci0gICAgImRvbWFpbiI6ICJEYXRhYmFzZSIsCi0gICAgImRlc2NyaXB0aW9uIjogIlRlc3QgdHlw
ZSBidWlsZGVyIGdlbmVyYXRpb24gb2YgdmFyaW91cyBvYmplY3QgdHlwZXMuIiwKLSAgICAidHlw
ZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJFcnJvciIsCi0gICAgICAgICAg
ICAidHlwZSI6ICJvYmplY3QiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkRhdGFiYXNl
IGVycm9yLiIsCi0gICAgICAgICAgICAicHJvcGVydGllcyI6IFsKLSAgICAgICAgICAgICAgICB7
ICJuYW1lIjogIm1lc3NhZ2UiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiRXJy
b3IgbWVzc2FnZS4iIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2RlIiwgInR5cGUi
OiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBjb2RlLiIgfQotICAgICAgICAgICAg
XQotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiRXJyb3JMaXN0IiwK
LSAgICAgICAgICAgICJ0eXBlIjogImFycmF5IiwKLSAgICAgICAgICAgICJpdGVtcyI6IHsgIiRy
ZWYiOiAiRXJyb3IiIH0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjog
Ik1vdXNlQnV0dG9uIiwKLSAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCi0gICAgICAgICAg
ICAiZGVzY3JpcHRpb24iOiAiRW51bWVyYXRlcyBkaWZmZXJlbnQgbW91c2UgYnV0dG9ucyB0aGF0
IGNhbiBiZSB1c2VkLiIsCi0gICAgICAgICAgICAiZW51bSI6IFsKLSAgICAgICAgICAgICAgICAi
Tm9uZSIsCi0gICAgICAgICAgICAgICAgIkxlZnQiLAotICAgICAgICAgICAgICAgICJNaWRkbGUi
LAotICAgICAgICAgICAgICAgICJSaWdodCIKLSAgICAgICAgICAgIF0KLSAgICAgICAgfSwKLSAg
ICAgICAgewotICAgICAgICAgICAgImlkIjogIk9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlIiwKLSAg
ICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCi0gICAgICAgICAgICAicHJvcGVydGllcyI6IFsK
LSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXki
LCAib3B0aW9uYWwiOiB0cnVlLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAotICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAiYnV0dG9ucyIsICJ0eXBlIjogImFycmF5IiwgIm9wdGlv
bmFsIjogdHJ1ZSwgIml0ZW1zIjogeyAiJHJlZiI6ICJNb3VzZUJ1dHRvbiIgfSB9LAotICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAiZGlyZWN0aW9uYWxpdHkiLCAidHlwZSI6ICJzdHJpbmciLCAi
ZW51bSI6IFsiTFRSIiwgIlJUTCJdLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWUg
fSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJl
ciIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVl
cyIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiLCAib3B0aW9uYWwiOiB0cnVlIH0s
Ci0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJlcnJvciIsICIkcmVmIjogIkVycm9yIiwgIm9w
dGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZXJyb3JMaXN0Iiwg
IiRyZWYiOiAiRXJyb3JMaXN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9Ci0gICAgICAgICAgICBdCi0g
ICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJQYXJhbWV0ZXJCdW5kbGUi
LAotICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKLSAgICAgICAgICAgICJwcm9wZXJ0aWVz
IjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJh
cnJheSIsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCi0gICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJidXR0b25zIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICIkcmVmIjog
Ik1vdXNlQnV0dG9uIiB9IH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkaXJlY3Rpb25h
bGl0eSIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJMVFIiLCAiUlRMIl0gfSwKLSAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiB9LAotICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiB9LAotICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiB9LAotICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIgfSwKLSAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogImVycm9yIiwgIiRyZWYiOiAiRXJyb3IiIH0sCi0gICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJlcnJvckxpc3QiLCAiJHJlZiI6ICJFcnJvckxpc3QiIH0KLSAg
ICAgICAgICAgIF0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIk9i
amVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHMiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9u
IjogIkNvbmZsaWN0ZWQgbmFtZXMgbWF5IGNhdXNlIGdlbmVyYXRlZCBnZXR0ZXJzL3NldHRlcnMg
dG8gY2xhc2ggd2l0aCBidWlsdC1pbiBJbnNwZWN0b3JPYmplY3QgbWV0aG9kcy4iLAotICAgICAg
ICAgICAgInR5cGUiOiAib2JqZWN0IiwKLSAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwotICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAiaW50ZWdlciIsICJ0eXBlIjogInN0cmluZyIgfSwKLSAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogImFycmF5IiwgInR5cGUiOiAic3RyaW5nIiB9LAotICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAic3RyaW5nIiwgInR5cGUiOiAic3RyaW5nIiB9LAotICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWUiLCAidHlwZSI6ICJzdHJpbmciIH0sCi0gICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJvYmplY3QiLCAidHlwZSI6ICJzdHJpbmciIH0KLSAgICAg
ICAgICAgIF0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIkR1bW15
T2JqZWN0IiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJBbiBvcGVuIG9iamVjdCB0aGF0
IGRvZXNuJ3QgaGF2ZSBhbnkgcHJlZGVmaW5lZCBmaWVsZHMuIiwKLSAgICAgICAgICAgICJ0eXBl
IjogIm9iamVjdCIKLSAgICAgICAgfQotICAgIF0KLX0sCi17Ci0gICAgImRvbWFpbiI6ICJUZXN0
IiwKLSAgICAiZGVzY3JpcHRpb24iOiAiVGVzdCB0aGUgZ2VuZXJhdGlvbiBvZiBzcGVjaWFsIGJl
aGF2aW9ycyB0aGF0IG9ubHkgYXBwbHkgdG8gc3BlY2lmaWMgY2xhc3Nlcy4iLAotICAgICJ0eXBl
cyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIlBhcmFtZXRlckJ1bmRsZSIsCi0g
ICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAotICAgICAgICAgICAgInByb3BlcnRpZXMiOiBb
Ci0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkaXJlY3Rpb25hbGl0eSIsICJ0eXBlIjogInN0
cmluZyIsICJlbnVtIjogWyJMVFIiLCAiUlRMIl0gfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1l
IjogImJ1dHRvbnMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgIiRyZWYiOiAiRGF0YWJh
c2UuTW91c2VCdXR0b24iIH0gfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5h
bWVzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAot
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciIH0sCi0g
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiIH0s
Ci0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiIH0s
Ci0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiB9LAot
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZXJyb3IiLCAiJHJlZiI6ICJEYXRhYmFzZS5FcnJv
ciIgfQotICAgICAgICAgICAgXQotICAgICAgICB9Ci0gICAgXQotfQotXQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvdHlw
ZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0
cy5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4M2Q5NGJlODk3ZC4uMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCisrKyAvZGV2L251bGwK
QEAgLTEsNTEgKzAsMCBAQAotWwotewotICAgICJkb21haW4iOiAiVGVzdCIsCi0gICAgInR5cGVz
IjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiVHlwZU5lZWRpbmdDYXN0IiwKLSAg
ICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAi
QSBkdW1teSB0eXBlIHRoYXQgcmVxdWlyZXMgcnVudGltZSBjYXN0cywgYW5kIGZvcmNlcyBub24t
cHJpbWl0aXZlIHJlZmVyZW5jZWQgdHlwZXMgdG8gYWxzbyBlbWl0IHJ1bnRpbWUgY2FzdCBoZWxw
ZXJzLiIsCi0gICAgICAgICAgICAicHJvcGVydGllcyI6IFsKLSAgICAgICAgICAgICAgICB7ICJu
YW1lIjogInN0cmluZyIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJTdHJpbmcg
bWVtYmVyLiIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm51bWJlciIsICJ0eXBlIjog
ImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAiTnVtYmVyIG1lbWJlci4iIH0sCi0gICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJhbmltYWxzIiwgIiRyZWYiOiAiQ2FzdGVkQW5pbWFscyIsICJkZXNj
cmlwdGlvbiI6ICJFbnVtIG1lbWJlci4iIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJp
ZCIsICIkcmVmIjogIkNhc3RlZE9iamVjdElkIiwgImRlc2NyaXB0aW9uIjogIkFsaWFzZWQgbWVt
YmVyLiIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRyZWUiLCAiJHJlZiI6ICJSZWN1
cnNpdmVPYmplY3QxIiwgImRlc2NyaXB0aW9uIjogIlJlY3Vyc2l2ZSBvYmplY3QgbWVtYmVyLiIg
fQotICAgICAgICAgICAgXQotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQi
OiAiQ2FzdGVkT2JqZWN0SWQiLAotICAgICAgICAgICAgInR5cGUiOiAiaW50ZWdlciIKLSAgICAg
ICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIlVuY2FzdGVkT2JqZWN0SWQiLAot
ICAgICAgICAgICAgInR5cGUiOiAiaW50ZWdlciIKLSAgICAgICAgfSwKLSAgICAgICAgewotICAg
ICAgICAgICAgImlkIjogIlVuY2FzdGVkQW5pbWFscyIsCi0gICAgICAgICAgICAidHlwZSI6ICJz
dHJpbmciLAotICAgICAgICAgICAgImVudW0iOiBbIlBpZ3MiLCAiQ293cyIsICJDYXRzIiwgIkhl
bnMiXQotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiQ2FzdGVkQW5p
bWFscyIsCi0gICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAotICAgICAgICAgICAgImVudW0i
OiBbIkR1Y2tzIiwgIkhlbnMiLCAiQ3Jvd3MiLCAiRmxhbWluZ29zIl0KLSAgICAgICAgfSwKLSAg
ICAgICAgewotICAgICAgICAgICAgImlkIjogIlJlY3Vyc2l2ZU9iamVjdDEiLAotICAgICAgICAg
ICAgInR5cGUiOiAib2JqZWN0IiwKLSAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwotICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAib2JqIiwgIiRyZWYiOiAiUmVjdXJzaXZlT2JqZWN0MiIsICJv
cHRpb25hbCI6IHRydWUgfQotICAgICAgICAgICAgXQotICAgICAgICB9LAotICAgICAgICB7Ci0g
ICAgICAgICAgICAiaWQiOiAiUmVjdXJzaXZlT2JqZWN0MiIsCi0gICAgICAgICAgICAidHlwZSI6
ICJvYmplY3QiLAotICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCi0gICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJvYmoiLCAiJHJlZiI6ICJSZWN1cnNpdmVPYmplY3QxIiwgIm9wdGlvbmFsIjog
dHJ1ZSB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0KLSAgICBdCi19Ci1dCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy90
eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy90eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpz
b24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk5YjAyMjBkMzEyLi4wMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2Vu
ZXJpYy90eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwy
MSArMCwwIEBACi17Ci0gICAgImRvbWFpbiI6ICJUZXN0IiwKLSAgICAidHlwZXMiOiBbCi0gICAg
ICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJOb09wZW5QYXJhbWV0ZXJzIiwKLSAgICAgICAgICAg
ICJ0eXBlIjogIm9iamVjdCIsCi0gICAgICAgICAgICAicHJvcGVydGllcyI6IFsKLSAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogIm9uZSIsICJ0eXBlIjogIm51bWJlciIgfSwKLSAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInR3byIsICJ0eXBlIjogIm51bWJlciIgfQotICAgICAgICAgICAgXQot
ICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiT3BlblBhcmFtZXRlcnMi
LAotICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKLSAgICAgICAgICAgICJwcm9wZXJ0aWVz
IjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYWxwaGEiLCAidHlwZSI6ICJudW1iZXIi
IH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJiZXRhIiwgInR5cGUiOiAibnVtYmVyIiB9
Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy92ZXJzaW9uLmpz
b24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJp
Yy92ZXJzaW9uLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwN2E1ZDkwMTc2
Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy92ZXJzaW9uLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAg
QEAKLXsiZG9tYWlucyI6WwotewotICAgICJkb21haW4iOiAiVmVyc2lvbkRvbWFpbiIsCi0gICAg
InZlcnNpb24iOiA0MgotfQotXX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9pb3MvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0u
anNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9pb3Mv
ZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggODE3ZjEzNWVlNWEuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9pb3MvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxh
dGZvcm0uanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLXsKLSAgICAiZG9tYWlu
IjogIk5ldHdvcmsiLAotICAgICJ0eXBlcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgImlk
IjogIk5ldHdvcmtFcnJvciIsCi0gICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAotICAgICAg
ICAgICAgInBsYXRmb3JtIjogIm1hY29zIiwKLSAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwot
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibWVzc2FnZSIsICJ0eXBlIjogInN0cmluZyIsICJk
ZXNjcmlwdGlvbiI6ICJFcnJvciBtZXNzYWdlLiIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1l
IjogImNvZGUiLCAidHlwZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIGNvZGUu
IiB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0KLSAgICBdLAotICAgICJjb21tYW5kcyI6IFsK
LSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAibG9hZFJlc291cmNlIiwKLSAgICAgICAg
ICAgICJwbGF0Zm9ybSI6ICJtYWNvcyIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9h
ZHMgYSByZXNvdXJjZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQg
cGFnZSB3aXRob3V0IGNyb3NzIG9yaWdpbiBjaGVja3MuIgotICAgICAgICB9Ci0gICAgXSwKLSAg
ICAiZXZlbnRzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJyZXNvdXJjZUxv
YWRlZCIsCi0gICAgICAgICAgICAicGxhdGZvcm0iOiAibWFjb3MiLAotICAgICAgICAgICAgImRl
c2NyaXB0aW9uIjogIkEgcmVzb3VyY2Ugd2FzIGxvYWRlZC4iCi0gICAgICAgIH0KLSAgICBdCi19
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvaW9zL2V4cGVjdGVkL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24tcmVzdWx0
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2lvcy9leHBl
Y3RlZC9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uLXJlc3VsdApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggZDRjMGZlM2ZlM2MuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9pb3MvZXhwZWN0ZWQvZGVm
aW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbi1yZXN1bHQKKysrIC9kZXYvbnVsbApAQCAt
MSw4NzAgKzAsMCBAQAotIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5q
cwotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFj
LXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LSMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0j
aWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0KLSNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xUeXBlcy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJv
bnRlbmRSb3V0ZXIuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRj
aGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERp
c3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9Ci0gICAgQmFja2VuZERpc3BhdGNoZXIq
IGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5n
ZXQoKTsgfQotcHJpdmF0ZToKLSAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2Vu
ZERpc3BhdGNoZXI7Ci19OwotCi0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotI2Vu
ZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotIyMjIEVuZCBG
aWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0
UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFt
ZXNwYWNlIEluc3BlY3RvciB7Ci0KLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCi0KLQot
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0
Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0
Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCi0K
LSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2lu
Y2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNw
YXRjaGVycy5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVy
cy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9y
bS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFn
bWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPHd0
Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVz
cGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBGcm9udGVuZFJvdXRlcjsKLQotfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLQot
IyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLX0gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNw
cAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UK
LQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNp
bmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0K
LW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLQotCi0KLQotCi0KLQotCi19IC8vIG5hbWVzcGFjZSBQ
cm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sT2JqZWN0cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNw
cAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFj
LXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIK
LQotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLQot
Ci19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQot
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbmNsdWRlIDx3dGYv
UmV0YWluUHRyLmg+Ci0KLQotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi19IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0
Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJz
Lm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1t
YWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNw
YXRjaGVycy5oIgotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbmNsdWRl
ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVl
cy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0KLSMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPFdlYklu
c3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRl
ZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVj
dAotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJU
ZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVy
bmFsLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+Ci0jaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5o
PgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+
Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJv
dG9jb2xDb25maWd1cmF0aW9uCi17Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVy
KiBfY29udHJvbGxlcjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjoo
QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCi17Ci0gICAgc2VsZiA9
IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAg
QVNTRVJUKGNvbnRyb2xsZXIpOwotICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICBy
ZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgW3N1cGVyIGRlYWxsb2Nd
OwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9u
Lm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxh
dGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0j
aW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5h
bWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERp
c3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8
Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90
b2NvbEpTT05PYmplY3QuaD4KLQotCi0KLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVz
dFByb3RvY29sUGxhdGZvcm0pIHsKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbCwKLSAgICBU
ZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWMsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1JT1Ms
Ci0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUywKLX07Ci0KLQotCi0KLQotCi0KLQotCi0K
LSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVj
dHMuaD4KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sSW50ZXJuYWwuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0
ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENv
cmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZh
bHVlcy5oPgotCi0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLQot
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJU
ZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29u
dmVyc2lvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IE9iakNFbnVtVHlwZT4KLU9wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5n
KGNvbnN0IFN0cmluZyYgdmFsdWUpOwotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmco
VGVzdFByb3RvY29sUGxhdGZvcm0gdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAg
Y2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDoKLSAgICAgICAgcmV0dXJuICJhbGwiX3M7Ci0g
ICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM6Ci0gICAgICAgIHJldHVybiAiZ2Vu
ZXJpYyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOgotICAgICAgICByZXR1
cm4gImlvcyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M6Ci0gICAgICAg
IHJldHVybiAibWFjb3MiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9u
YWw8VGVzdFByb3RvY29sUGxhdGZvcm0+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcm
IHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiYWxsIikKLSAgICAgICAgcmV0dXJuIFRlc3RQ
cm90b2NvbFBsYXRmb3JtQWxsOwotICAgIGlmICh2YWx1ZSA9PSAiZ2VuZXJpYyIpCi0gICAgICAg
IHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM7Ci0gICAgaWYgKHZhbHVlID09ICJp
b3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1JT1M7Ci0gICAgaWYgKHZh
bHVlID09ICJtYWNvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09T
OwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNp
bXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9S
V0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0
b3I7Ci0KLQotCi0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRl
c3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucy5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZh
dGUuaD4KLSNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVl
cy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLSMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9tYWMvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNv
biBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9tYWMvZGVm
aW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggODE3ZjEzNWVlNWEuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9tYWMvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZv
cm0uanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjog
Ik5ldHdvcmsiLAotICAgICJ0eXBlcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjog
Ik5ldHdvcmtFcnJvciIsCi0gICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAotICAgICAgICAg
ICAgInBsYXRmb3JtIjogIm1hY29zIiwKLSAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwotICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAibWVzc2FnZSIsICJ0eXBlIjogInN0cmluZyIsICJkZXNj
cmlwdGlvbiI6ICJFcnJvciBtZXNzYWdlLiIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjog
ImNvZGUiLCAidHlwZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIGNvZGUuIiB9
Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0KLSAgICBdLAotICAgICJjb21tYW5kcyI6IFsKLSAg
ICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAibG9hZFJlc291cmNlIiwKLSAgICAgICAgICAg
ICJwbGF0Zm9ybSI6ICJtYWNvcyIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9hZHMg
YSByZXNvdXJjZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFn
ZSB3aXRob3V0IGNyb3NzIG9yaWdpbiBjaGVja3MuIgotICAgICAgICB9Ci0gICAgXSwKLSAgICAi
ZXZlbnRzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJyZXNvdXJjZUxvYWRl
ZCIsCi0gICAgICAgICAgICAicGxhdGZvcm0iOiAibWFjb3MiLAotICAgICAgICAgICAgImRlc2Ny
aXB0aW9uIjogIkEgcmVzb3VyY2Ugd2FzIGxvYWRlZC4iCi0gICAgICAgIH0KLSAgICBdCi19CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
bWFjL2V4cGVjdGVkL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24tcmVzdWx0IGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL21hYy9leHBlY3Rl
ZC9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uLXJlc3VsdApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggYzZlNjhmNGE5YWUuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9tYWMvZXhwZWN0ZWQvZGVmaW5p
dGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbi1yZXN1bHQKKysrIC9kZXYvbnVsbApAQCAtMSwx
MjE3ICswLDAgQEAKLSMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1w
bGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LS8vIE5ldHdvcmsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIk5ldHdvcmsiLCBu
dWxsKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrLmxvYWRSZXNv
dXJjZSIsIG51bGwsIFtdLCBbXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnQoIk5l
dHdvcmsucmVzb3VyY2VMb2FkZWQiLCBudWxsLCBbXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lz
dGVyTmV0d29ya0Rpc3BhdGNoZXIgPSBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRGlzcGF0Y2hl
ci5iaW5kKEluc3BlY3RvckJhY2tlbmQsICJOZXR3b3JrIik7Ci1JbnNwZWN0b3JCYWNrZW5kLmFj
dGl2YXRlRG9tYWluKCJOZXR3b3JrIiwgbnVsbCk7Ci0jIyMgRW5kIEZpbGU6IEluc3BlY3RvckJh
Y2tlbmRDb21tYW5kcy5qcwotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmRE
aXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlv
bnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKLSNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0KLW5hbWVzcGFj
ZSBJbnNwZWN0b3IgewotCi1jbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJs
aWM6Ci0gICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNo
ZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRj
aGVyKTsgfQotICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0
IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KLXByaXZhdGU6Ci0gICAgUmVm
UHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwotfTsKLQotCi1jbGFz
cyBBbHRlcm5hdGVOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZpcnR1YWwgfkFsdGVybmF0ZU5ldHdvcmtC
YWNrZW5kRGlzcGF0Y2hlcigpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UobG9u
ZyBjYWxsSWQpID0gMDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jZW5kaWYg
Ly8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jIyMgRW5kIEZpbGU6
IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
ZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90
b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKLQotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KLSNpZiBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLWNsYXNzIEFsdGVybmF0ZU5ldHdv
cmtCYWNrZW5kRGlzcGF0Y2hlcjsKLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKLQotY2xhc3MgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7
Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZShFcnJvclN0cmluZyYpID0g
MDsKLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIH5OZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyKCk7Ci19OwotCi1jbGFzcyBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJs
aWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHN0YXRpYyBS
ZWY8TmV0d29ya0JhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBO
ZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdm9pZCBkaXNwYXRjaChsb25n
IHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVz
c2FnZSkgZmluYWw7Ci1wcml2YXRlOgotICAgIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgcmVxdWVz
dElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwotI2lmIEVOQUJMRShJTlNQ
RUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotcHVibGljOgotICAgIHZvaWQgc2V0QWx0ZXJu
YXRlRGlzcGF0Y2hlcihBbHRlcm5hdGVOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0
ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hl
cjsgfQotcHJpdmF0ZToKLSAgICBBbHRlcm5hdGVOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIqIG1f
YWx0ZXJuYXRlRGlzcGF0Y2hlciB7IG51bGxwdHIgfTsKLSNlbmRpZgotcHJpdmF0ZToKLSAgICBO
ZXR3b3JrQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImLCBOZXR3b3JrQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxl
ciogbV9hZ2VudCB7IG51bGxwdHIgfTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgot
IyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgot
I2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotI2lu
Y2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNlbmRpZgotCi1uYW1l
c3BhY2UgSW5zcGVjdG9yIHsKLQotTmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6fk5l
dHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KLQotUmVmPE5ldHdvcmtCYWNrZW5k
RGlzcGF0Y2hlcj4gTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoQmFja2VuZERpc3Bh
dGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
KiBhZ2VudCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBOZXR3b3JrQmFja2VuZERpc3Bh
dGNoZXIoYmFja2VuZERpc3BhdGNoZXIsIGFnZW50KSk7Ci19Ci0KLU5ldHdvcmtCYWNrZW5kRGlz
cGF0Y2hlcjo6TmV0d29ya0JhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNr
ZW5kRGlzcGF0Y2hlciwgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCi0g
ICAgOiBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKLSAg
ICAsIG1fYWdlbnQoYWdlbnQpCi17Ci0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJE
aXNwYXRjaGVyRm9yRG9tYWluKCJOZXR3b3JrIl9zLCB0aGlzKTsKLX0KLQotdm9pZCBOZXR3b3Jr
QmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcm
IG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQotewotICAgIFJlZjxOZXR3b3Jr
QmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwotCi0gICAgUmVmUHRyPEpTT046Ok9i
amVjdD4gcGFyYW1ldGVyczsKLSAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFy
YW1ldGVycyk7Ci0KLSAgICBpZiAobWV0aG9kID09ICJsb2FkUmVzb3VyY2UiKQotICAgICAgICBs
b2FkUmVzb3VyY2UocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKLSAgICBlbHNlCi0g
ICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERp
c3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmsuIiArIG1ldGhvZCArICInIHdhcyBu
b3QgZm91bmQiKTsKLX0KLQotdm9pZCBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNv
dXJjZShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKLXsKLSNpZiBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSAgICBpZiAobV9hbHRlcm5hdGVE
aXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNl
KHJlcXVlc3RJZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIEVycm9y
U3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVj
dDo6Y3JlYXRlKCk7Ci0gICAgbV9hZ2VudC0+bG9hZFJlc291cmNlKGVycm9yKTsKLQotICAgIGlm
ICghZXJyb3IubGVuZ3RoKCkpCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNw
b25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0
Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLQot
IyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQot
Ci0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFs
dWVzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNw
ZWN0b3IgewotCi1jbGFzcyBGcm9udGVuZFJvdXRlcjsKLQotY2xhc3MgTmV0d29ya0Zyb250ZW5k
RGlzcGF0Y2hlciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAg
TmV0d29ya0Zyb250ZW5kRGlzcGF0Y2hlcihGcm9udGVuZFJvdXRlciYgZnJvbnRlbmRSb3V0ZXIp
IDogbV9mcm9udGVuZFJvdXRlcihmcm9udGVuZFJvdXRlcikgeyB9Ci0gICAgdm9pZCByZXNvdXJj
ZUxvYWRlZCgpOwotcHJpdmF0ZToKLSAgICBGcm9udGVuZFJvdXRlciYgbV9mcm9udGVuZFJvdXRl
cjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0RnJv
bnRlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRj
aGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13
aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNw
YXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRS
b3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNw
ZWN0b3IgewotCi12b2lkIE5ldHdvcmtGcm9udGVuZERpc3BhdGNoZXI6OnJlc291cmNlTG9hZGVk
KCkKLXsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6
Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiTmV0d29y
ay5yZXNvdXJjZUxvYWRlZCJfcyk7Ci0KLSAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChq
c29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi1uYW1lc3BhY2Ug
UHJvdG9jb2wgewotCi0KLQotLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCi1uYW1lc3BhY2UgTmV0
d29yayB7Ci1jbGFzcyBOZXR3b3JrRXJyb3I7Ci19IC8vIE5ldHdvcmsKLS8vIEVuZCBvZiBmb3J3
YXJkIGRlY2xhcmF0aW9ucy4KLQotCi0KLQotbmFtZXNwYWNlIE5ldHdvcmsgewotY2xhc3MgTmV0
d29ya0Vycm9yIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewotcHVibGljOgotICAgIGVudW0g
ewotICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCi0gICAgICAgIE1lc3NhZ2VTZXQgPSAxIDw8IDAs
Ci0gICAgICAgIENvZGVTZXQgPSAxIDw8IDEsCi0gICAgICAgIEFsbEZpZWxkc1NldCA9IChNZXNz
YWdlU2V0IHwgQ29kZVNldCkKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8aW50IFNUQVRFPgotICAg
IGNsYXNzIEJ1aWxkZXIgewotICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+IG1fcmVzdWx0OwotCi0gICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRF
IHwgU1RFUD4mIGNhc3RTdGF0ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAqcmVp
bnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIEJ1aWxkZXIoUmVmPC8qTmV0d29ya0Vycm9yKi9KU09OOjpPYmplY3Q+JiYgb2Jq
ZWN0KQotICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVy
X2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwotICAgICAgICB9Ci0gICAgICAgIGZyaWVuZCBj
bGFzcyBOZXR3b3JrRXJyb3I7Ci0gICAgcHVibGljOgotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBNZXNzYWdlU2V0PiYgc2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgICAgICB7
Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTWVzc2FnZVNldCksIHByb3Bl
cnR5X21lc3NhZ2VfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmlu
ZygibWVzc2FnZSJfcywgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNZXNz
YWdlU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvZGVTZXQ+
JiBzZXRDb2RlKGludCB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIENvZGVTZXQpLCBwcm9wZXJ0eV9jb2RlX2FscmVhZHlfc2V0KTsKLSAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2VyKCJjb2RlIl9zLCB2YWx1ZSk7Ci0gICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPENvZGVTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBSZWY8
TmV0d29ya0Vycm9yPiByZWxlYXNlKCkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKLSAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihOZXR3b3JrRXJyb3IpID09IHNpemVvZihKU09O
OjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7Ci0KLSAgICAgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+
IGpzb25SZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOwotICAgICAgICAgICAgYXV0
byByZXN1bHQgPSBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxOZXR3b3JrRXJyb3I+Kj4o
Jmpzb25SZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAg
ICB9OwotCi0gICAgLyoKLSAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6Ci0gICAgICogUmVm
PE5ldHdvcmtFcnJvcj4gcmVzdWx0ID0gTmV0d29ya0Vycm9yOjpjcmVhdGUoKQotICAgICAqICAg
ICAuc2V0TWVzc2FnZSguLi4pCi0gICAgICogICAgIC5zZXRDb2RlKC4uLikKLSAgICAgKiAgICAg
LnJlbGVhc2UoKTsKLSAgICAgKi8KLSAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3Jl
YXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpKTsKLSAgICB9Ci19OwotCi19IC8vIE5ldHdvcmsKLQotCi0KLX0gLy8g
bmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bE9iamVjdHMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlv
bnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29s
T2JqZWN0cy5oIgotCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotbmFtZXNwYWNlIFByb3Rv
Y29sIHsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2lu
Y2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQotQHByb3RvY29sIFRlc3RQcm90b2NvbE5ldHdvcmtE
b21haW5IYW5kbGVyOwotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi1jbGFzcyBPYmpDSW5z
cGVjdG9yTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZU5l
dHdvcmtCYWNrZW5kRGlzcGF0Y2hlciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1w
dWJsaWM6Ci0gICAgT2JqQ0luc3BlY3Rvck5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0
UHJvdG9jb2xOZXR3b3JrRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFu
ZGxlcjsgfQotICAgIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKLXBy
aXZhdGU6Ci0gICAgUmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5IYW5kbGVy
Pj4gbV9kZWxlZ2F0ZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgot
I2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0
b3IgewotCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI6OmxvYWRS
ZXNvdXJjZShsb25nIHJlcXVlc3RJZCkKLXsKLSAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRz
VG9TZWxlY3RvcjpAc2VsZWN0b3IobG9hZFJlc291cmNlV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vz
c0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3Rv
Y29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICIn
TmV0d29yay5sb2FkUmVzb3VyY2UnIHdhcyBub3QgZm91bmQiX3MpOwotICAgICAgICBiYWNrZW5k
RGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNr
ZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKLSAgICAgICAgYmFja2VuZERpc3Bh
dGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICB9OwotCi0gICAgaWQgc3VjY2Vzc0Nh
bGxiYWNrID0gXnsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJl
cXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2UpOwotICAgIH07Ci0KLSAgICBb
bV9kZWxlZ2F0ZSBsb2FkUmVzb3VyY2VXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1
Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOwotfQotCi0KLX0gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5t
bQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0u
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0
IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+Ci0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxp
dHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDog
TlNPYmplY3QKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4sIHNldHRlcj1zZXROZXR3b3Jr
SGFuZGxlcjopIGlkPFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5IYW5kbGVyPiBuZXR3b3JrSGFu
ZGxlcjsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgVGVzdFByb3RvY29sTmV0d29y
a0RvbWFpbkV2ZW50RGlzcGF0Y2hlciAqbmV0d29ya0V2ZW50RGlzcGF0Y2hlcjsKLUBlbmQKLQot
Ci0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbi5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2lt
cG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgotI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgotCi11c2luZyBu
YW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xs
ZXI7Ci0gICAgaWQ8VGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkhhbmRsZXI+IF9uZXR3b3JrSGFu
ZGxlcjsKLSAgICBUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluRXZlbnREaXNwYXRjaGVyICpfbmV0
d29ya0V2ZW50RGlzcGF0Y2hlcjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJv
bGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCi17Ci0gICAg
c2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7
Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIpOwotICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsK
LSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgW19uZXR3b3Jr
SGFuZGxlciByZWxlYXNlXTsKLSAgICBbX25ldHdvcmtFdmVudERpc3BhdGNoZXIgcmVsZWFzZV07
Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi0tICh2b2lkKXNldE5ldHdvcmtIYW5kbGVyOihp
ZDxUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluSGFuZGxlcj4paGFuZGxlcgotewotICAgIGlmICho
YW5kbGVyID09IF9uZXR3b3JrSGFuZGxlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgW19uZXR3
b3JrSGFuZGxlciByZWxlYXNlXTsKLSAgICBfbmV0d29ya0hhbmRsZXIgPSBbaGFuZGxlciByZXRh
aW5dOwotCi0gICAgYXV0byBhbHRlcm5hdGVEaXNwYXRjaGVyID0gbWFrZVVuaXF1ZTxPYmpDSW5z
cGVjdG9yTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyPihoYW5kbGVyKTsKLSAgICBhdXRvIGFsdGVy
bmF0ZUFnZW50ID0gbWFrZVVuaXF1ZTxBbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudDxOZXR3b3Jr
QmFja2VuZERpc3BhdGNoZXIsIEFsdGVybmF0ZU5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcj4+KCJO
ZXR3b3JrIl9zLCAqX2NvbnRyb2xsZXIsIFdURk1vdmUoYWx0ZXJuYXRlRGlzcGF0Y2hlcikpOwot
ICAgIF9jb250cm9sbGVyLT5hcHBlbmRFeHRyYUFnZW50KFdURk1vdmUoYWx0ZXJuYXRlQWdlbnQp
KTsKLX0KLQotLSAoaWQ8VGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkhhbmRsZXI+KW5ldHdvcmtI
YW5kbGVyCi17Ci0gICAgcmV0dXJuIF9uZXR3b3JrSGFuZGxlcjsKLX0KLQotLSAoVGVzdFByb3Rv
Y29sTmV0d29ya0RvbWFpbkV2ZW50RGlzcGF0Y2hlciAqKW5ldHdvcmtFdmVudERpc3BhdGNoZXIK
LXsKLSAgICBpZiAoIV9uZXR3b3JrRXZlbnREaXNwYXRjaGVyKQotICAgICAgICBfbmV0d29ya0V2
ZW50RGlzcGF0Y2hlciA9IFtbVGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkV2ZW50RGlzcGF0Y2hl
ciBhbGxvY10gaW5pdFdpdGhDb250cm9sbGVyOl9jb250cm9sbGVyXTsKLSAgICByZXR1cm4gX25l
dHdvcmtFdmVudERpc3BhdGNoZXI7Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2
ZW50RGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZp
bml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNp
bXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8d3RmL0pTT05W
YWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9u
IFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5FdmVudERpc3BhdGNoZXIKLXsKLSAgICBBdWdtZW50
YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotfQotCi0tIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNv
bnRyb2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAg
ICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRyb2xs
ZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKXJlc291cmNl
TG9hZGVkCi17Ci0gICAgY29uc3QgRnJvbnRlbmRSb3V0ZXImIHJvdXRlciA9IF9jb250cm9sbGVy
LT5mcm9udGVuZFJvdXRlcigpOwotCi0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2Ug
PSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1l
dGhvZCJfcywgIk5ldHdvcmsucmVzb3VyY2VMb2FkZWQiX3MpOwotICAgIHJvdXRlci5zZW5kRXZl
bnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0
aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotCi0jaW1w
b3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+Ci0KLQotQGNsYXNzIFRl
c3RQcm90b2NvbE5ldHdvcmtFcnJvcjsKLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVz
dFByb3RvY29sUGxhdGZvcm0pIHsKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbCwKLSAgICBU
ZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWMsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1JT1Ms
Ci0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUywKLX07Ci0KLQotCi0KLV9fYXR0cmlidXRl
X18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xOZXR3
b3JrRXJyb3IgOiBSV0lQcm90b2NvbEpTT05PYmplY3QKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0
aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkOwotLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAq
KWpzb25PYmplY3Q7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAq
KW1lc3NhZ2UgY29kZTooaW50KWNvZGU7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0
b21pYywgY29weSkgTlNTdHJpbmcgKm1lc3NhZ2U7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkg
KG5vbmF0b21pYywgYXNzaWduKSBpbnQgY29kZTsKLUBlbmQKLQotQHByb3RvY29sIFRlc3RQcm90
b2NvbE5ldHdvcmtEb21haW5IYW5kbGVyIDxOU09iamVjdD4KLUBvcHRpb25hbAotLSAodm9pZCls
b2FkUmVzb3VyY2VXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVy
cm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKHZvaWQpKXN1Y2Nlc3NDYWxsYmFj
azsKLUBlbmQKLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50
ZXJmYWNlIFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5FdmVudERpc3BhdGNoZXIgOiBOU09iamVj
dAotLSAodm9pZClyZXNvdXJjZUxvYWRlZDsKLUBlbmQKLQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0
b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+Ci0KLSMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFs
LmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1h
Yy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9i
amVjdFByaXZhdGUuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVj
dG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotQGludGVyZmFj
ZSBUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluRXZlbnREaXNwYXRjaGVyIChQcml2YXRlKQotLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooSW5zcGVjdG9yOjpBdWdtZW50YWJsZUlu
c3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXI7Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRp
b25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0IDxXZWJJbnNw
ZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0
b3IgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+Ci1PcHRpb25hbDxPYmpDRW51
bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKLQotaW5saW5l
IFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFBsYXRmb3JtIHZhbHVlKQotewot
ICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1BbGw6Ci0g
ICAgICAgIHJldHVybiAiYWxsIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5l
cmljOgotICAgICAgICByZXR1cm4gImdlbmVyaWMiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQ
bGF0Zm9ybUlPUzoKLSAgICAgICAgcmV0dXJuICJpb3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9j
b2xQbGF0Zm9ybU1hY09TOgotICAgICAgICByZXR1cm4gIm1hY29zIl9zOwotICAgIH0KLX0KLQot
dGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFBsYXRmb3JtPiBmcm9tUHJv
dG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gImFs
bCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDsKLSAgICBpZiAodmFs
dWUgPT0gImdlbmVyaWMiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1HZW5l
cmljOwotICAgIGlmICh2YWx1ZSA9PSAiaW9zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2Nv
bFBsYXRmb3JtSU9TOwotICAgIGlmICh2YWx1ZSA9PSAibWFjb3MiKQotICAgICAgICByZXR1cm4g
VGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQot
Ci0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRp
b25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0K
LSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNl
ci5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUu
aD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGludGVyZmFjZSBUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMgKE5ldHdvcmtEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlTmV0d29y
a0Vycm9yOihUZXN0UHJvdG9jb2xOZXR3b3JrRXJyb3IgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6
KGlkKXBheWxvYWQ7Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucyAoTmV0d29ya0RvbWFpbikKLQotKyAodm9pZClfcGFyc2VOZXR3b3JrRXJyb3I6
KFRlc3RQcm90b2NvbE5ldHdvcmtFcnJvciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5
bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGlj
dGlvbmFyeSBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sTmV0d29ya0Vy
cm9yIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07Ci19Ci0KLUBlbmQKLQotCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sVHlwZXMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgi
Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8V2Vi
SW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLSNpbXBvcnQgPHd0Zi9B
c3NlcnRpb25zLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yOwotCi0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xOZXR3b3JrRXJy
b3IKLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25h
cnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIg
aW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9S
RVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AibWVzc2FnZSJdLCBAIm1lc3NhZ2UiKTsKLSAgICBz
ZWxmLm1lc3NhZ2UgPSBwYXlsb2FkW0AibWVzc2FnZSJdOwotCi0gICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiY29kZSJdLCBAImNvZGUiKTsKLSAgICBz
ZWxmLmNvZGUgPSBbcGF5bG9hZFtAImNvZGUiXSBpbnRlZ2VyVmFsdWVdOwotCi0gICAgcmV0dXJu
IHNlbGY7Ci19Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJv
dG9jb2xKU09OT2JqZWN0ICopb2JqZWN0Ci17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0
V2l0aEpTT05PYmplY3Q6W29iamVjdCB0b0pTT05PYmplY3RdLmdldCgpXSkpCi0gICAgICAgIHJl
dHVybiBuaWw7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlIGNvZGU6KGludCljb2RlCi17Ci0gICAgaWYg
KCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBUSFJP
V19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKG1lc3NhZ2UsIEAibWVzc2FnZSIpOwot
Ci0gICAgc2VsZi5tZXNzYWdlID0gbWVzc2FnZTsKLSAgICBzZWxmLmNvZGUgPSBjb2RlOwotCi0g
ICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpc2V0TWVzc2FnZTooTlNTdHJpbmcgKiltZXNz
YWdlCi17Ci0gICAgW3N1cGVyIHNldFN0cmluZzptZXNzYWdlIGZvcktleTpAIm1lc3NhZ2UiXTsK
LX0KLQotLSAoTlNTdHJpbmcgKiltZXNzYWdlCi17Ci0gICAgcmV0dXJuIFtzdXBlciBzdHJpbmdG
b3JLZXk6QCJtZXNzYWdlIl07Ci19Ci0KLS0gKHZvaWQpc2V0Q29kZTooaW50KWNvZGUKLXsKLSAg
ICBbc3VwZXIgc2V0SW50ZWdlcjpjb2RlIGZvcktleTpAImNvZGUiXTsKLX0KLQotLSAoaW50KWNv
ZGUKLXsKLSAgICByZXR1cm4gW3N1cGVyIGludGVnZXJGb3JLZXk6QCJjb2RlIl07Ci19Ci0KLUBl
bmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvc2FtZS10eXBlLWlk
LWRpZmZlcmVudC1kb21haW4uanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4zYmY0ZGZmNWNjYwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9zYW1l
LXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCkBAIC0wLDAgKzEsMjIgQEAKK1sKK3sKKyAg
ICAiZG9tYWluIjogIlJ1bnRpbWUiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAg
ICAgICAgImlkIjogIlJlbW90ZU9iamVjdElkIiwKKyAgICAgICAgICAgICJ0eXBlIjogInN0cmlu
ZyIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIG9iamVjdCBpZGVudGlmaWVy
LiIKKyAgICAgICAgfQorICAgIF0KK30sCit7CisgICAgImRvbWFpbiI6ICJSdW50aW1lMiIsCisg
ICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiUmVtb3RlT2JqZWN0
SWQiLAorICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICJkZXNjcmlw
dGlvbiI6ICJVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIuIgorICAgICAgICB9CisgICAgXQorfQor
XQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0
dGVycy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yMGEwYzE1
NTI3NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9zaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgpAQCAtMCww
ICsxLDMxIEBACit7CisgICAgImRvbWFpbiI6ICJSdW50aW1lIiwKKyAgICAidHlwZXMiOiBbCisg
ICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJLZXlQYXRoIiwKKyAgICAgICAgICAgICJ0eXBl
IjogIm9iamVjdCIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiS2V5IHBhdGguIiwKKyAg
ICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgIm5hbWUiOiAidHlwZSIsCisgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogInN0
cmluZyIsCisgICAgICAgICAgICAgICAgICAgICJlbnVtIjogWyJudWxsIiwgInN0cmluZyIsICJh
cnJheSJdLAorICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiS2V5IHBhdGggdHlw
ZS4iCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICJuYW1lIjogInN0cmluZyIsCisgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogInN0
cmluZyIsCisgICAgICAgICAgICAgICAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAgICAg
ICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJTdHJpbmcgdmFsdWUuIgorICAgICAgICAgICAgICAg
IH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJhcnJh
eSIsCisgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImFycmF5IiwKKyAgICAgICAgICAgICAg
ICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgIml0ZW1zIjogeyAi
dHlwZSI6ICJzdHJpbmciIH0sCisgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJB
cnJheSB2YWx1ZS4iCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9
CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL3Nob3VsZC1zdHJpcC1jb21tZW50cy5qc29uIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3Nob3VsZC1zdHJpcC1jb21tZW50cy5qc29u
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5lY2UxZGNmYzYxYwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9zaG91bGQtc3RyaXAtY29tbWVudHMuanNvbgpAQCAtMCwwICsxLDUgQEAKK3sKKyAgICAv
KiBhYm92ZSAqLworICAgIC8qIGJlZm9yZSAqLyAiZG9tYWluIiAvKiBpbiAqLyA6IC8qIGluICov
ICJDb21tZW50IiAvKiBhZnRlciAqLworICAgIC8qIGJlbG93ICovCit9CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1kZWNsYXJh
dGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2
ZS10eXBlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmNiYzlk
NTM5NDc4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5q
c29uCkBAIC0wLDAgKzEsMTAgQEAKK3sKKyAgICAiZG9tYWluIjogIlJ1bnRpbWUiLAorICAgICJ0
eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlJlbW90ZU9iamVjdElkIiwK
KyAgICAgICAgICAgICJ0eXBlIjogImludGVnZXIiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9u
IjogIlVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4iCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlw
ZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmNmYjA4YmQ5NDBiCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L3R5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCkBAIC0wLDAgKzEsNTAgQEAKK1sKK3sK
KyAgICAiZG9tYWluIjogIkRlYnVnZ2VyIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAg
ICAgICAgICAgICJpZCI6ICJCcmVha3BvaW50SWQiLAorICAgICAgICAgICAgInR5cGUiOiAiaW50
ZWdlciIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlJlYXNvbiIs
CisgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgImVudW0iOiBbIkRp
ZWQiLCAiRmFpbnRlZCIsICJIdW5ncnkiXQorICAgICAgICB9CisgICAgXQorfSwKK3sKKyAgICAi
ZG9tYWluIjogIlJ1bnRpbWUiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAg
ICAgImlkIjogIk9iamVjdElkIiwKKyAgICAgICAgICAgICJ0eXBlIjogImludGVnZXIiCisgICAg
ICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJMdWNreU51bWJlcnMiLAorICAg
ICAgICAgICAgInR5cGUiOiAiYXJyYXkiLAorICAgICAgICAgICAgIml0ZW1zIjogeyAidHlwZSI6
ICJpbnRlZ2VyIiB9CisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJC
YWJ5TmFtZXMiLAorICAgICAgICAgICAgInR5cGUiOiAiYXJyYXkiLAorICAgICAgICAgICAgIml0
ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAg
ICAgICAgImlkIjogIk5ld09iamVjdHMiLAorICAgICAgICAgICAgInR5cGUiOiAiYXJyYXkiLAor
ICAgICAgICAgICAgIml0ZW1zIjogeyAiJHJlZiI6ICJPYmplY3RJZCIgfQorICAgICAgICB9LAor
ICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiT2xkT2JqZWN0cyIsCisgICAgICAgICAgICAi
dHlwZSI6ICJhcnJheSIsCisgICAgICAgICAgICAiaXRlbXMiOiB7ICIkcmVmIjogIkRlYnVnZ2Vy
LkJyZWFrcG9pbnRJZCIgfQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQi
OiAiU3RvcFJlYXNvbnMiLAorICAgICAgICAgICAgInR5cGUiOiAiYXJyYXkiLAorICAgICAgICAg
ICAgIml0ZW1zIjogeyAiJHJlZiI6ICJEZWJ1Z2dlci5SZWFzb24iIH0KKyAgICAgICAgfQorICAg
IF0KK30KK10KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRpb24tZW51bS10
eXBlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjlmMGFlZTlj
OTFiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KQEAgLTAsMCArMSwx
NSBAQAoreworICAgICJkb21haW4iOiAiUnVudGltZSIsCisgICAgInR5cGVzIjogWworICAgICAg
ICB7CisgICAgICAgICAgICAiaWQiOiAiRmFybUFuaW1hbHMiLAorICAgICAgICAgICAgInR5cGUi
OiAic3RyaW5nIiwKKyAgICAgICAgICAgICJlbnVtIjogWyJQaWdzIiwgIkNvd3MiLCAiQ2F0cyIs
ICJIZW5zIl0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlR3b0xl
Z2dlZEFuaW1hbHMiLAorICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAg
ICJlbnVtIjogWyJEdWNrcyIsICJIZW5zIiwgIkNyb3dzIiwgIkZsYW1pbmdvcyJdCisgICAgICAg
IH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRpb24t
b2JqZWN0LXR5cGUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u
MmM0M2MzMzA5OTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCkBA
IC0wLDAgKzEsMTAwIEBACitbCit7CisgICAgImRvbWFpbiI6ICJEYXRhYmFzZSIsCisgICAgImRl
c2NyaXB0aW9uIjogIlRlc3QgdHlwZSBidWlsZGVyIGdlbmVyYXRpb24gb2YgdmFyaW91cyBvYmpl
Y3QgdHlwZXMuIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6
ICJFcnJvciIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgImRl
c2NyaXB0aW9uIjogIkRhdGFiYXNlIGVycm9yLiIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6
IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm1lc3NhZ2UiLCAidHlwZSI6ICJzdHJpbmci
LCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgbWVzc2FnZS4iIH0sCisgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJjb2RlIiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBj
b2RlLiIgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAg
ICAiaWQiOiAiRXJyb3JMaXN0IiwKKyAgICAgICAgICAgICJ0eXBlIjogImFycmF5IiwKKyAgICAg
ICAgICAgICJpdGVtcyI6IHsgIiRyZWYiOiAiRXJyb3IiIH0KKyAgICAgICAgfSwKKyAgICAgICAg
eworICAgICAgICAgICAgImlkIjogIk1vdXNlQnV0dG9uIiwKKyAgICAgICAgICAgICJ0eXBlIjog
InN0cmluZyIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRW51bWVyYXRlcyBkaWZmZXJl
bnQgbW91c2UgYnV0dG9ucyB0aGF0IGNhbiBiZSB1c2VkLiIsCisgICAgICAgICAgICAiZW51bSI6
IFsKKyAgICAgICAgICAgICAgICAiTm9uZSIsCisgICAgICAgICAgICAgICAgIkxlZnQiLAorICAg
ICAgICAgICAgICAgICJNaWRkbGUiLAorICAgICAgICAgICAgICAgICJSaWdodCIKKyAgICAgICAg
ICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIk9wdGlvbmFs
UGFyYW1ldGVyQnVuZGxlIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAg
ICAgICAicHJvcGVydGllcyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5h
bWVzIiwgInR5cGUiOiAiYXJyYXkiLCAib3B0aW9uYWwiOiB0cnVlLCAiaXRlbXMiOiB7ICJ0eXBl
IjogInN0cmluZyIgfSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYnV0dG9ucyIsICJ0
eXBlIjogImFycmF5IiwgIm9wdGlvbmFsIjogdHJ1ZSwgIml0ZW1zIjogeyAiJHJlZiI6ICJNb3Vz
ZUJ1dHRvbiIgfSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGlyZWN0aW9uYWxpdHki
LCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsiTFRSIiwgIlJUTCJdLCAib3B0aW9uYWwiOiB0
cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmlu
ZyIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVz
dGFtcCIsICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRy
dWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnki
LCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJlcnJvciIs
ICIkcmVmIjogIkVycm9yIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAiZXJyb3JMaXN0IiwgIiRyZWYiOiAiRXJyb3JMaXN0IiwgIm9wdGlvbmFsIjogdHJ1
ZSB9CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJp
ZCI6ICJQYXJhbWV0ZXJCdW5kbGUiLAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAg
ICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29s
dW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9
IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJidXR0b25zIiwgInR5cGUiOiAiYXJyYXki
LCAiaXRlbXMiOiB7ICIkcmVmIjogIk1vdXNlQnV0dG9uIiB9IH0sCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJkaXJlY3Rpb25hbGl0eSIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJM
VFIiLCAiUlRMIl0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vdGVzIiwgInR5cGUi
OiAic3RyaW5nIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5
cGUiOiAibnVtYmVyIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVzIiwgInR5
cGUiOiAib2JqZWN0IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0
eXBlIjogImFueSIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImVycm9yIiwgIiRyZWYi
OiAiRXJyb3IiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJlcnJvckxpc3QiLCAiJHJl
ZiI6ICJFcnJvckxpc3QiIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgewor
ICAgICAgICAgICAgImlkIjogIk9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHMiLAorICAg
ICAgICAgICAgImRlc2NyaXB0aW9uIjogIkNvbmZsaWN0ZWQgbmFtZXMgbWF5IGNhdXNlIGdlbmVy
YXRlZCBnZXR0ZXJzL3NldHRlcnMgdG8gY2xhc2ggd2l0aCBidWlsdC1pbiBJbnNwZWN0b3JPYmpl
Y3QgbWV0aG9kcy4iLAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAg
ICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiaW50ZWdlciIsICJ0
eXBlIjogInN0cmluZyIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImFycmF5IiwgInR5
cGUiOiAic3RyaW5nIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic3RyaW5nIiwgInR5
cGUiOiAic3RyaW5nIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWUiLCAidHlw
ZSI6ICJzdHJpbmciIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJvYmplY3QiLCAidHlw
ZSI6ICJzdHJpbmciIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAg
ICAgICAgICAgImlkIjogIkR1bW15T2JqZWN0IiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6
ICJBbiBvcGVuIG9iamVjdCB0aGF0IGRvZXNuJ3QgaGF2ZSBhbnkgcHJlZGVmaW5lZCBmaWVsZHMu
IiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIKKyAgICAgICAgfQorICAgIF0KK30sCit7
CisgICAgImRvbWFpbiI6ICJUZXN0IiwKKyAgICAiZGVzY3JpcHRpb24iOiAiVGVzdCB0aGUgZ2Vu
ZXJhdGlvbiBvZiBzcGVjaWFsIGJlaGF2aW9ycyB0aGF0IG9ubHkgYXBwbHkgdG8gc3BlY2lmaWMg
Y2xhc3Nlcy4iLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjog
IlBhcmFtZXRlckJ1bmRsZSIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAg
ICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkaXJlY3Rp
b25hbGl0eSIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJMVFIiLCAiUlRMIl0gfSwKKyAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogImJ1dHRvbnMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVt
cyI6IHsgIiRyZWYiOiAiRGF0YWJhc2UuTW91c2VCdXR0b24iIH0gfSwKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICJ0
eXBlIjogInN0cmluZyIgfSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAi
dHlwZSI6ICJzdHJpbmciIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAi
LCAidHlwZSI6ICJudW1iZXIiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMi
LCAidHlwZSI6ICJvYmplY3QiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2Fk
IiwgInR5cGUiOiAiYW55IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZXJyb3IiLCAi
JHJlZiI6ICJEYXRhYmFzZS5FcnJvciIgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAg
XQorfQorXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbiBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLXJlcXVpcmluZy1ydW50aW1l
LWNhc3RzLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjgzZDk0
YmU4OTdkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgpAQCAtMCww
ICsxLDUxIEBACitbCit7CisgICAgImRvbWFpbiI6ICJUZXN0IiwKKyAgICAidHlwZXMiOiBbCisg
ICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJUeXBlTmVlZGluZ0Nhc3QiLAorICAgICAgICAg
ICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJBIGR1bW15
IHR5cGUgdGhhdCByZXF1aXJlcyBydW50aW1lIGNhc3RzLCBhbmQgZm9yY2VzIG5vbi1wcmltaXRp
dmUgcmVmZXJlbmNlZCB0eXBlcyB0byBhbHNvIGVtaXQgcnVudGltZSBjYXN0IGhlbHBlcnMuIiwK
KyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
c3RyaW5nIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIlN0cmluZyBtZW1iZXIu
IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibnVtYmVyIiwgInR5cGUiOiAiaW50ZWdl
ciIsICJkZXNjcmlwdGlvbiI6ICJOdW1iZXIgbWVtYmVyLiIgfSwKKyAgICAgICAgICAgICAgICB7
ICJuYW1lIjogImFuaW1hbHMiLCAiJHJlZiI6ICJDYXN0ZWRBbmltYWxzIiwgImRlc2NyaXB0aW9u
IjogIkVudW0gbWVtYmVyLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImlkIiwgIiRy
ZWYiOiAiQ2FzdGVkT2JqZWN0SWQiLCAiZGVzY3JpcHRpb24iOiAiQWxpYXNlZCBtZW1iZXIuIiB9
LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidHJlZSIsICIkcmVmIjogIlJlY3Vyc2l2ZU9i
amVjdDEiLCAiZGVzY3JpcHRpb24iOiAiUmVjdXJzaXZlIG9iamVjdCBtZW1iZXIuIiB9CisgICAg
ICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJDYXN0
ZWRPYmplY3RJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJpbnRlZ2VyIgorICAgICAgICB9LAor
ICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiVW5jYXN0ZWRPYmplY3RJZCIsCisgICAgICAg
ICAgICAidHlwZSI6ICJpbnRlZ2VyIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAg
ICAiaWQiOiAiVW5jYXN0ZWRBbmltYWxzIiwKKyAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIs
CisgICAgICAgICAgICAiZW51bSI6IFsiUGlncyIsICJDb3dzIiwgIkNhdHMiLCAiSGVucyJdCisg
ICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJDYXN0ZWRBbmltYWxzIiwK
KyAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAiZW51bSI6IFsiRHVj
a3MiLCAiSGVucyIsICJDcm93cyIsICJGbGFtaW5nb3MiXQorICAgICAgICB9LAorICAgICAgICB7
CisgICAgICAgICAgICAiaWQiOiAiUmVjdXJzaXZlT2JqZWN0MSIsCisgICAgICAgICAgICAidHlw
ZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJvYmoiLCAiJHJlZiI6ICJSZWN1cnNpdmVPYmplY3QyIiwgIm9wdGlvbmFs
IjogdHJ1ZSB9CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAg
ICAgICJpZCI6ICJSZWN1cnNpdmVPYmplY3QyIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVj
dCIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogIm9iaiIsICIkcmVmIjogIlJlY3Vyc2l2ZU9iamVjdDEiLCAib3B0aW9uYWwiOiB0cnVlIH0K
KyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0KK30KK10KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLXdpdGgtb3Blbi1w
YXJhbWV0ZXJzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwLi45OWIwMjIwZDMxMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLXdpdGgtb3Blbi1w
YXJhbWV0ZXJzLmpzb24KQEAgLTAsMCArMSwyMSBAQAoreworICAgICJkb21haW4iOiAiVGVzdCIs
CisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiTm9PcGVuUGFy
YW1ldGVycyIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgInBy
b3BlcnRpZXMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJvbmUiLCAidHlwZSI6ICJu
dW1iZXIiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0d28iLCAidHlwZSI6ICJudW1i
ZXIiIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAg
ImlkIjogIk9wZW5QYXJhbWV0ZXJzIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisg
ICAgICAgICAgICAicHJvcGVydGllcyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImFs
cGhhIiwgInR5cGUiOiAibnVtYmVyIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYmV0
YSIsICJ0eXBlIjogIm51bWJlciIgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXQor
fQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL3ZlcnNpb24uanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy92ZXJzaW9uLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAuLjUwN2E1ZDkwMTc2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3ZlcnNpb24uanNvbgpAQCAtMCwwICsxLDYgQEAKK3si
ZG9tYWlucyI6WworeworICAgICJkb21haW4iOiAiVmVyc2lvbkRvbWFpbiIsCisgICAgInZlcnNp
b24iOiA0MgorfQorXX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JGcm9udGVuZEhvc3QuaWRsIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckZyb250ZW5kSG9zdC5pZGwKaW5kZXggZTc4YzE4OTE5NjIuLmQzNmRiYTk5ZjAzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmlkbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmlkbApA
QCAtOTMsNyArOTMsNyBAQAogICAgIGJvb2xlYW4gaXNCZWluZ0luc3BlY3RlZCgpOwogCiAgICAg
cmVhZG9ubHkgYXR0cmlidXRlIGJvb2xlYW4gc3VwcG9ydHNEaWFnbm9zdGljTG9nZ2luZzsKLSNp
ZiBFTkFCTEVfSU5TUEVDVE9SX1RFTEVNRVRSWQorI2lmIGRlZmluZWQoRU5BQkxFX0lOU1BFQ1RP
Ul9URUxFTUVUUlkpICYmIEVOQUJMRV9JTlNQRUNUT1JfVEVMRU1FVFJZCiAgICAgdm9pZCBsb2dE
aWFnbm9zdGljRXZlbnQoRE9NU3RyaW5nIGV2ZW50TmFtZSwgRE9NU3RyaW5nIGNvbnRlbnQpOwog
I2VuZGlmCiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
clNoYWRlclByb2dyYW0uY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclNo
YWRlclByb2dyYW0uY3BwCmluZGV4IDI5MWJkMjRiMDZmLi5mODE2YmI2ZjQzNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclNoYWRlclByb2dyYW0uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTaGFkZXJQcm9ncmFtLmNwcApA
QCAtMjYsNiArMjYsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkluc3BlY3Rv
clNoYWRlclByb2dyYW0uaCIKIAorI2lmIEVOQUJMRShXRUJHTCkgfHwgRU5BQkxFKFdFQkdQVSkK
KwogI2luY2x1ZGUgIkluc3BlY3RvckNhbnZhcy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0lkZW50aWZpZXJzRmFjdG9yeS5oPgogI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgpAQCAtMTUy
LDEwICsxNTQsNiBAQCBzdGF0aWMgUmVmUHRyPFdlYkdQVVNoYWRlck1vZHVsZT4gc2hhZGVyRm9y
VHlwZShXZWJHUFVQaXBlbGluZSYgcGlwZWxpbmUsIEluc3BlYwogCiBTdHJpbmcgSW5zcGVjdG9y
U2hhZGVyUHJvZ3JhbTo6cmVxdWVzdFNoYWRlclNvdXJjZShJbnNwZWN0b3I6OlByb3RvY29sOjpD
YW52YXM6OlNoYWRlclR5cGUgc2hhZGVyVHlwZSkKIHsKLSNpZiAhRU5BQkxFKFdFQkdMKSAmJiAh
RU5BQkxFKFdFQkdQVSkKLSAgICBVTlVTRURfUEFSQU0oc2hhZGVyVHlwZSk7Ci0jZW5kaWYKLQog
ICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcHJvZ3JhbSwKICNpZiBFTkFCTEUoV0VCR0wpCiAg
ICAgICAgIFsmXSAoc3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxXZWJHTFByb2dyYW0+IHByb2dyYW1X
cmFwcGVyKSB7CkBAIC0xODQsMTEgKzE4Miw2IEBAIFN0cmluZyBJbnNwZWN0b3JTaGFkZXJQcm9n
cmFtOjpyZXF1ZXN0U2hhZGVyU291cmNlKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6CiAK
IGJvb2wgSW5zcGVjdG9yU2hhZGVyUHJvZ3JhbTo6dXBkYXRlU2hhZGVyKEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkNhbnZhczo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlLCBjb25zdCBTdHJpbmcmIHNvdXJj
ZSkKIHsKLSNpZiAhRU5BQkxFKFdFQkdMKSAmJiAhRU5BQkxFKFdFQkdQVSkKLSAgICBVTlVTRURf
UEFSQU0oc2hhZGVyVHlwZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHNvdXJjZSk7Ci0jZW5kaWYKLQog
ICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcHJvZ3JhbSwKICNpZiBFTkFCTEUoV0VCR0wpCiAg
ICAgICAgIFsmXSAoc3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxXZWJHTFByb2dyYW0+IHByb2dyYW1X
cmFwcGVyKSB7CkBAIC0yODEsMyArMjc0LDUgQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNh
bnZhczo6U2hhZGVyUHJvZ3JhbT4gSW5zcGVjdG9yU2hhZGVyUHJvZ3JhbTo6YnVpbGRPYmoKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKSB8fCBF
TkFCTEUoV0VCR1BVKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclNoYWRlclByb2dyYW0uaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JT
aGFkZXJQcm9ncmFtLmgKaW5kZXggNmRmMTNkZmZkZWIuLmNjYzczY2VmMzc0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU2hhZGVyUHJvZ3JhbS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTaGFkZXJQcm9ncmFtLmgKQEAgLTI1
LDYgKzI1LDggQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpZiBFTkFCTEUoV0VCR0wpIHx8IEVOQUJM
RShXRUJHUFUpCisKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbE9i
amVjdHMuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+CkBAIC05OSwzICsxMDEsNSBAQCBwcml2YXRlOgogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDYW52YXNB
Z2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNhbnZh
c0FnZW50LmNwcAppbmRleCAxZDM5OGM1NDdjYy4uNWZmZjI5ODYzMzUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ2FudmFzQWdlbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ2FudmFzQWdlbnQu
Y3BwCkBAIC04OCw3ICs4OCw5IEBAIEluc3BlY3RvckNhbnZhc0FnZW50OjpJbnNwZWN0b3JDYW52
YXNBZ2VudChQYWdlQWdlbnRDb250ZXh0JiBjb250ZXh0KQogICAgICwgbV9pbmplY3RlZFNjcmlw
dE1hbmFnZXIoY29udGV4dC5pbmplY3RlZFNjcmlwdE1hbmFnZXIpCiAgICAgLCBtX2luc3BlY3Rl
ZFBhZ2UoY29udGV4dC5pbnNwZWN0ZWRQYWdlKQogICAgICwgbV9jYW52YXNEZXN0cm95ZWRUaW1l
cigqdGhpcywgJkluc3BlY3RvckNhbnZhc0FnZW50OjpjYW52YXNEZXN0cm95ZWRUaW1lckZpcmVk
KQorI2lmIEVOQUJMRShXRUJHTCkgfHwgRU5BQkxFKFdFQkdQVSkKICAgICAsIG1fcHJvZ3JhbURl
c3Ryb3llZFRpbWVyKCp0aGlzLCAmSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnByb2dyYW1EZXN0cm95
ZWRUaW1lckZpcmVkKQorI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkgfHwgRU5BQkxFKFdFQkdQVSkK
IHsKIH0KIApAQCAtMTMyLDcgKzEzNCw3IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmVu
YWJsZShFcnJvclN0cmluZyYpCiAgICAgICAgICAgICAvLyBUaGUgYWN0dWFsICJjb250ZXh0IiBm
b3IgV2ViR1BVIGlzIHRoZSBgV2ViR1BVRGV2aWNlYCwgbm90IHRoZSA8Y2FudmFzPi4KICAgICAg
ICAgICAgIGlmIChpczxHUFVDYW52YXNDb250ZXh0Pihjb250ZXh0KSkKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSNlbmRpZgorI2VuZGlmIC8vIEVOQUJMRShXRUJHUFUpCiAKICAgICAgICAg
ICAgIGlmIChleGlzdHNJbkN1cnJlbnRQYWdlKGNvbnRleHQtPmNhbnZhc0Jhc2UoKS5zY3JpcHRF
eGVjdXRpb25Db250ZXh0KCkpKQogICAgICAgICAgICAgICAgIGJpbmRDYW52YXMoKmNvbnRleHQs
IGZhbHNlKTsKQEAgLTE0Nyw3ICsxNDksNyBAQCB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50Ojpl
bmFibGUoRXJyb3JTdHJpbmcmKQogICAgICAgICAgICAgICAgIGJpbmRDYW52YXMoKmRldmljZSwg
ZmFsc2UpOwogICAgICAgICB9CiAgICAgfQotI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdQ
VSkKIAogI2lmIEVOQUJMRShXRUJHTCkKICAgICB7CkBAIC0xNTcsNyArMTU5LDcgQEAgdm9pZCBJ
bnNwZWN0b3JDYW52YXNBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nJikKICAgICAgICAgICAgICAg
ICBkaWRDcmVhdGVXZWJHTFByb2dyYW0oKmNvbnRleHRXZWJHTEJhc2UsICpwcm9ncmFtKTsKICAg
ICAgICAgfQogICAgIH0KLSNlbmRpZgorI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKIAogI2lmIEVO
QUJMRShXRUJHUFUpCiAgICAgewpAQCAtMTY3LDcgKzE2OSw3IEBAIHZvaWQgSW5zcGVjdG9yQ2Fu
dmFzQWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYpCiAgICAgICAgICAgICAgICAgZGlkQ3JlYXRl
V2ViR1BVUGlwZWxpbmUoKmRldmljZSwgKnBpcGVsaW5lKTsKICAgICAgICAgfQogICAgIH0KLSNl
bmRpZgorI2VuZGlmIC8vIEVOQUJMRShXRUJHUFUpCiB9CiAKIHZvaWQgSW5zcGVjdG9yQ2FudmFz
QWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcmKQpAQCAtMzAzLDYgKzMwNSw3IEBAIHZvaWQgSW5z
cGVjdG9yQ2FudmFzQWdlbnQ6OnN0b3BSZWNvcmRpbmcoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
LCBjb25zdCBTdHJpbmcmCiAgICAgZGlkRmluaXNoUmVjb3JkaW5nQ2FudmFzRnJhbWUoKmNvbnRl
eHQsIHRydWUpOwogfQogCisjaWYgRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKQogdm9p
ZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6cmVxdWVzdFNoYWRlclNvdXJjZShFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgcHJvZ3JhbUlkLCBjb25zdCBTdHJpbmcmIHNoYWRl
clR5cGVTdHJpbmcsIFN0cmluZyogb3V0U291cmNlKQogewogICAgIGF1dG8gaW5zcGVjdG9yUHJv
Z3JhbSA9IGFzc2VydEluc3BlY3RvclByb2dyYW0oZXJyb3JTdHJpbmcsIHByb2dyYW1JZCk7CkBA
IC0zNDAsNiArMzQzLDcgQEAgdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6dXBkYXRlU2hhZGVy
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJgogICAgICAgICBlcnJvclN0
cmluZyA9ICJGYWlsZWQgdG8gdXBkYXRlIHNoYWRlciBvZiBnaXZlbiBzaGFkZXJUeXBlIGZvciBn
aXZlbiBwcm9ncmFtSWQiX3M7CiB9CiAKKyNpZiBFTkFCTEUoV0VCR0wpCiB2b2lkIEluc3BlY3Rv
ckNhbnZhc0FnZW50OjpzZXRTaGFkZXJQcm9ncmFtRGlzYWJsZWQoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBjb25zdCBTdHJpbmcmIHByb2dyYW1JZCwgYm9vbCBkaXNhYmxlZCkKIHsKICAgICBh
dXRvIGluc3BlY3RvclByb2dyYW0gPSBhc3NlcnRJbnNwZWN0b3JQcm9ncmFtKGVycm9yU3RyaW5n
LCBwcm9ncmFtSWQpOwpAQCAtMzU3LDYgKzM2MSw4IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdl
bnQ6OnNldFNoYWRlclByb2dyYW1IaWdobGlnaHRlZChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
CiAKICAgICBpbnNwZWN0b3JQcm9ncmFtLT5zZXRIaWdobGlnaHRlZChoaWdobGlnaHRlZCk7CiB9
CisjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQorI2VuZGlmIC8vI2lmIEVOQUJMRShXRUJHTCkgfHwg
RU5BQkxFKFdFQkdQVSkKIAogdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZnJhbWVOYXZpZ2F0
ZWQoRnJhbWUmIGZyYW1lKQogewpAQCAtNjI1LDcgKzYzMSw3IEBAIGJvb2wgSW5zcGVjdG9yQ2Fu
dmFzQWdlbnQ6OmlzV2ViR0xQcm9ncmFtSGlnaGxpZ2h0ZWQoV2ViR0xQcm9ncmFtJiBwcm9ncmFt
KQogCiAgICAgcmV0dXJuIGluc3BlY3RvclByb2dyYW0tPmhpZ2hsaWdodGVkKCk7CiB9Ci0jZW5k
aWYKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCiAKICNpZiBFTkFCTEUoV0VCR1BVKQogdm9pZCBJ
bnNwZWN0b3JDYW52YXNBZ2VudDo6ZGlkQ3JlYXRlV2ViR1BVRGV2aWNlKFdlYkdQVURldmljZSYg
ZGV2aWNlKQpAQCAtNjg4LDcgKzY5NCw3IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6Ondp
bGxEZXN0cm95V2ViR1BVUGlwZWxpbmUoV2ViR1BVUGlwZWxpbmUmIHBpcGVsaW5lKQogCiAgICAg
dW5iaW5kUHJvZ3JhbSgqaW5zcGVjdG9yUHJvZ3JhbSk7CiB9Ci0jZW5kaWYKKyNlbmRpZiAvLyBF
TkFCTEUoV0VCR1BVKQogCiB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpzdGFydFJlY29yZGlu
ZyhJbnNwZWN0b3JDYW52YXMmIGluc3BlY3RvckNhbnZhcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6
UmVjb3JkaW5nOjpJbml0aWF0b3IgaW5pdGlhdG9yLCBSZWNvcmRpbmdPcHRpb25zJiYgcmVjb3Jk
aW5nT3B0aW9ucykKIHsKQEAgLTcwMCwxMCArNzA2LDEwIEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFz
QWdlbnQ6OnN0YXJ0UmVjb3JkaW5nKEluc3BlY3RvckNhbnZhcyYgaW5zcGVjdG9yQ2FudmFzLCBJ
bnNwCiAgICAgICAgICYmICFpczxJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ+KGNvbnRleHQp
CiAjaWYgRU5BQkxFKFdFQkdMKQogICAgICAgICAmJiAhaXM8V2ViR0xSZW5kZXJpbmdDb250ZXh0
Pihjb250ZXh0KQotI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQogI2lmIEVOQUJMRShX
RUJHTDIpCiAgICAgICAgICYmICFpczxXZWJHTDJSZW5kZXJpbmdDb250ZXh0Pihjb250ZXh0KQot
I2VuZGlmCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdMMikKICAgICApCiAgICAgICAgIHJldHVybjsK
IApAQCAtNzMzLDYgKzczOSw3IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmNhbnZhc0Rl
c3Ryb3llZFRpbWVyRmlyZWQoKQogICAgIG1fcmVtb3ZlZENhbnZhc0lkZW50aWZpZXJzLmNsZWFy
KCk7CiB9CiAKKyNpZiBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpCiB2b2lkIEluc3Bl
Y3RvckNhbnZhc0FnZW50Ojpwcm9ncmFtRGVzdHJveWVkVGltZXJGaXJlZCgpCiB7CiAgICAgaWYg
KCFtX3JlbW92ZWRQcm9ncmFtSWRlbnRpZmllcnMuc2l6ZSgpKQpAQCAtNzQzLDYgKzc1MCw3IEBA
IHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnByb2dyYW1EZXN0cm95ZWRUaW1lckZpcmVkKCkK
IAogICAgIG1fcmVtb3ZlZFByb2dyYW1JZGVudGlmaWVycy5jbGVhcigpOwogfQorI2VuZGlmIC8v
IEVOQUJMRShXRUJHTCkgfHwgRU5BQkxFKFdFQkdQVSkKIAogdm9pZCBJbnNwZWN0b3JDYW52YXNB
Z2VudDo6cmVzZXQoKQogewpAQCAtNzU2LDEwICs3NjQsMTIgQEAgdm9pZCBJbnNwZWN0b3JDYW52
YXNBZ2VudDo6cmVzZXQoKQogICAgIGlmIChtX2NhbnZhc0Rlc3Ryb3llZFRpbWVyLmlzQWN0aXZl
KCkpCiAgICAgICAgIG1fY2FudmFzRGVzdHJveWVkVGltZXIuc3RvcCgpOwogCisjaWYgRU5BQkxF
KFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKQogICAgIG1faWRlbnRpZmllclRvSW5zcGVjdG9yUHJv
Z3JhbS5jbGVhcigpOwogICAgIG1fcmVtb3ZlZFByb2dyYW1JZGVudGlmaWVycy5jbGVhcigpOwog
ICAgIGlmIChtX3Byb2dyYW1EZXN0cm95ZWRUaW1lci5pc0FjdGl2ZSgpKQogICAgICAgICBtX3By
b2dyYW1EZXN0cm95ZWRUaW1lci5zdG9wKCk7CisjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKSB8fCBF
TkFCTEUoV0VCR1BVKQogCiAgICAgbV9yZWNvcmRpbmdDYW52YXNJZGVudGlmaWVycy5jbGVhcigp
OwogfQpAQCAtNzk4LDcgKzgwOCw3IEBAIEluc3BlY3RvckNhbnZhcyYgSW5zcGVjdG9yQ2FudmFz
QWdlbnQ6OmJpbmRDYW52YXMoV2ViR1BVRGV2aWNlJiBkZXZpY2UsIGJvb2wgY2FwCiAKICAgICBy
ZXR1cm4gaW5zcGVjdG9yQ2FudmFzOwogfQotI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdQ
VSkKIAogdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6dW5iaW5kQ2FudmFzKEluc3BlY3RvckNh
bnZhcyYgaW5zcGVjdG9yQ2FudmFzKQogewpAQCAtODExLDcgKzgyMSw3IEBAIHZvaWQgSW5zcGVj
dG9yQ2FudmFzQWdlbnQ6OnVuYmluZENhbnZhcyhJbnNwZWN0b3JDYW52YXMmIGluc3BlY3RvckNh
bnZhcykKIAogICAgIGZvciAoYXV0byogaW5zcGVjdG9yUHJvZ3JhbSA6IHByb2dyYW1zVG9SZW1v
dmUpCiAgICAgICAgIHVuYmluZFByb2dyYW0oKmluc3BlY3RvclByb2dyYW0pOwotI2VuZGlmCisj
ZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQogCiAgICAgaWYgKGF1dG8qIGNvbnRleHQgPSBpbnNwZWN0
b3JDYW52YXMuY2FudmFzQ29udGV4dCgpKQogICAgICAgICBjb250ZXh0LT5jYW52YXNCYXNlKCku
cmVtb3ZlT2JzZXJ2ZXIoKnRoaXMpOwpAQCAtODU2LDggKzg2Niw5IEBAIFJlZlB0cjxJbnNwZWN0
b3JDYW52YXM+IEluc3BlY3RvckNhbnZhc0FnZW50OjpmaW5kSW5zcGVjdG9yQ2FudmFzKFdlYkdQ
VURldmljZSYKICAgICB9CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9Ci0jZW5kaWYKKyNlbmRpZiAv
LyBFTkFCTEUoV0VCR1BVKQogCisjaWYgRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKQog
dm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6dW5iaW5kUHJvZ3JhbShJbnNwZWN0b3JTaGFkZXJQ
cm9ncmFtJiBpbnNwZWN0b3JQcm9ncmFtKQogewogICAgIFN0cmluZyBpZGVudGlmaWVyID0gaW5z
cGVjdG9yUHJvZ3JhbS5pZGVudGlmaWVyKCk7CkBAIC04OTEsNyArOTAyLDcgQEAgUmVmUHRyPElu
c3BlY3RvclNoYWRlclByb2dyYW0+IEluc3BlY3RvckNhbnZhc0FnZW50OjpmaW5kSW5zcGVjdG9y
UHJvZ3JhbShXZWJHTFAKICAgICB9CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9Ci0jZW5kaWYKKyNl
bmRpZiAvLyBFTkFCTEUoV0VCR0wpCiAKICNpZiBFTkFCTEUoV0VCR1BVKQogUmVmUHRyPEluc3Bl
Y3RvclNoYWRlclByb2dyYW0+IEluc3BlY3RvckNhbnZhc0FnZW50OjpmaW5kSW5zcGVjdG9yUHJv
Z3JhbShXZWJHUFVQaXBlbGluZSYgcGlwZWxpbmUpCkBAIC05MDIsNiArOTEzLDcgQEAgUmVmUHRy
PEluc3BlY3RvclNoYWRlclByb2dyYW0+IEluc3BlY3RvckNhbnZhc0FnZW50OjpmaW5kSW5zcGVj
dG9yUHJvZ3JhbShXZWJHUFUKICAgICB9CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9Ci0jZW5kaWYK
KyNlbmRpZiAvLyBFTkFCTEUoV0VCR1BVKQorI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkgfHwgRU5B
QkxFKFdFQkdQVSkKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDYW52YXNBZ2VudC5oIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDYW52YXNBZ2VudC5oCmluZGV4IGZm
OWE1MzNlMDQ4Li4wZWYxYWVmYjY0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JDYW52YXNBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ2FudmFzQWdlbnQuaApAQCAtNDMsMTcgKzQzLDE5IEBA
IGNsYXNzIEluamVjdGVkU2NyaXB0TWFuYWdlcjsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xh
c3MgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDsKKyNpZiBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShX
RUJHUFUpCiBjbGFzcyBJbnNwZWN0b3JTaGFkZXJQcm9ncmFtOwogI2lmIEVOQUJMRShXRUJHTCkK
IGNsYXNzIFdlYkdMUHJvZ3JhbTsKIGNsYXNzIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U7Ci0j
ZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCiAjaWYgRU5BQkxFKFdFQkdQVSkKIGNsYXNz
IEdQVUNhbnZhc0NvbnRleHQ7CiBjbGFzcyBXZWJHUFVEZXZpY2U7CiBjbGFzcyBXZWJHUFVQaXBl
bGluZTsKIGNsYXNzIFdlYkdQVVN3YXBDaGFpbjsKLSNlbmRpZgorI2VuZGlmIC8vIEVOQUJMRShX
RUJHUFUpCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKQogCiB0eXBl
ZGVmIFN0cmluZyBFcnJvclN0cmluZzsKIApAQCAtNzksMTAgKzgxLDE0IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHNldFJlY29yZGluZ0F1dG9DYXB0dXJlRnJhbWVDb3VudChFcnJvclN0cmluZyYsIGlu
dCBjb3VudCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBzdGFydFJlY29yZGluZyhFcnJvclN0cmluZyYs
IGNvbnN0IFN0cmluZyYgY2FudmFzSWQsIGNvbnN0IGludCogZnJhbWVDb3VudCwgY29uc3QgaW50
KiBtZW1vcnlMaW1pdCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBzdG9wUmVjb3JkaW5nKEVycm9yU3Ry
aW5nJiwgY29uc3QgU3RyaW5nJiBjYW52YXNJZCkgb3ZlcnJpZGU7CisjaWYgRU5BQkxFKFdFQkdM
KSB8fCBFTkFCTEUoV0VCR1BVKQogICAgIHZvaWQgcmVxdWVzdFNoYWRlclNvdXJjZShFcnJvclN0
cmluZyYsIGNvbnN0IFN0cmluZyYgcHJvZ3JhbUlkLCBjb25zdCBTdHJpbmcmIHNoYWRlclR5cGUs
IFN0cmluZyogc291cmNlKSBvdmVycmlkZTsKICAgICB2b2lkIHVwZGF0ZVNoYWRlcihFcnJvclN0
cmluZyYsIGNvbnN0IFN0cmluZyYgcHJvZ3JhbUlkLCBjb25zdCBTdHJpbmcmIHNoYWRlclR5cGUs
IGNvbnN0IFN0cmluZyYgc291cmNlKSBvdmVycmlkZTsKKyNpZiBFTkFCTEUoV0VCR0wpCiAgICAg
dm9pZCBzZXRTaGFkZXJQcm9ncmFtRGlzYWJsZWQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcm
IHByb2dyYW1JZCwgYm9vbCBkaXNhYmxlZCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRTaGFkZXJQ
cm9ncmFtSGlnaGxpZ2h0ZWQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHByb2dyYW1JZCwg
Ym9vbCBoaWdobGlnaHRlZCkgb3ZlcnJpZGU7CisjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQorI2Vu
ZGlmIC8vIEVOQUJMRShXRUJHTCkgfHwgRU5BQkxFKFdFQkdQVSkKIAogICAgIC8vIENhbnZhc09i
c2VydmVyCiAgICAgdm9pZCBjYW52YXNDaGFuZ2VkKENhbnZhc0Jhc2UmLCBjb25zdCBGbG9hdFJl
Y3QmKSBvdmVycmlkZTsKQEAgLTEwNCwxNCArMTEwLDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIHdp
bGxEZXN0cm95V2ViR0xQcm9ncmFtKFdlYkdMUHJvZ3JhbSYpOwogICAgIGJvb2wgaXNXZWJHTFBy
b2dyYW1EaXNhYmxlZChXZWJHTFByb2dyYW0mKTsKICAgICBib29sIGlzV2ViR0xQcm9ncmFtSGln
aGxpZ2h0ZWQoV2ViR0xQcm9ncmFtJik7Ci0jZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wp
CiAjaWYgRU5BQkxFKFdFQkdQVSkKICAgICB2b2lkIGRpZENyZWF0ZVdlYkdQVURldmljZShXZWJH
UFVEZXZpY2UmKTsKICAgICB2b2lkIHdpbGxEZXN0cm95V2ViR1BVRGV2aWNlKFdlYkdQVURldmlj
ZSYpOwogICAgIHZvaWQgd2lsbENvbmZpZ3VyZVN3YXBDaGFpbihHUFVDYW52YXNDb250ZXh0Jiwg
V2ViR1BVU3dhcENoYWluJik7CiAgICAgdm9pZCBkaWRDcmVhdGVXZWJHUFVQaXBlbGluZShXZWJH
UFVEZXZpY2UmLCBXZWJHUFVQaXBlbGluZSYpOwogICAgIHZvaWQgd2lsbERlc3Ryb3lXZWJHUFVQ
aXBlbGluZShXZWJHUFVQaXBlbGluZSYpOwotI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdQ
VSkKIAogcHJpdmF0ZToKICAgICBzdHJ1Y3QgUmVjb3JkaW5nT3B0aW9ucyB7CkBAIC0xMjIsMjgg
KzEyOCwzMiBAQCBwcml2YXRlOgogICAgIHZvaWQgc3RhcnRSZWNvcmRpbmcoSW5zcGVjdG9yQ2Fu
dmFzJiwgSW5zcGVjdG9yOjpQcm90b2NvbDo6UmVjb3JkaW5nOjpJbml0aWF0b3IsIFJlY29yZGlu
Z09wdGlvbnMmJiA9IHsgfSk7CiAKICAgICB2b2lkIGNhbnZhc0Rlc3Ryb3llZFRpbWVyRmlyZWQo
KTsKKyNpZiBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpCiAgICAgdm9pZCBwcm9ncmFt
RGVzdHJveWVkVGltZXJGaXJlZCgpOworI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkgfHwgRU5BQkxF
KFdFQkdQVSkKICAgICB2b2lkIHJlc2V0KCk7CiAKICAgICBJbnNwZWN0b3JDYW52YXMmIGJpbmRD
YW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYsIGJvb2wgY2FwdHVyZUJhY2t0cmFjZSk7CiAj
aWYgRU5BQkxFKFdFQkdQVSkKICAgICBJbnNwZWN0b3JDYW52YXMmIGJpbmRDYW52YXMoV2ViR1BV
RGV2aWNlJiwgYm9vbCBjYXB0dXJlQmFja3RyYWNlKTsKLSNlbmRpZgorI2VuZGlmIC8vIEVOQUJM
RShXRUJHUFUpCiAgICAgdm9pZCB1bmJpbmRDYW52YXMoSW5zcGVjdG9yQ2FudmFzJik7CiAgICAg
UmVmUHRyPEluc3BlY3RvckNhbnZhcz4gYXNzZXJ0SW5zcGVjdG9yQ2FudmFzKEVycm9yU3RyaW5n
JiwgY29uc3QgU3RyaW5nJiBjYW52YXNJZCk7CiAgICAgUmVmUHRyPEluc3BlY3RvckNhbnZhcz4g
ZmluZEluc3BlY3RvckNhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0Jik7CiAjaWYgRU5BQkxF
KFdFQkdQVSkKICAgICBSZWZQdHI8SW5zcGVjdG9yQ2FudmFzPiBmaW5kSW5zcGVjdG9yQ2FudmFz
KFdlYkdQVURldmljZSYpOwotI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdQVSkKIAorI2lm
IEVOQUJMRShXRUJHTCkgfHwgRU5BQkxFKFdFQkdQVSkKICAgICB2b2lkIHVuYmluZFByb2dyYW0o
SW5zcGVjdG9yU2hhZGVyUHJvZ3JhbSYpOwogICAgIFJlZlB0cjxJbnNwZWN0b3JTaGFkZXJQcm9n
cmFtPiBhc3NlcnRJbnNwZWN0b3JQcm9ncmFtKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBw
cm9ncmFtSWQpOwogI2lmIEVOQUJMRShXRUJHTCkKICAgICBSZWZQdHI8SW5zcGVjdG9yU2hhZGVy
UHJvZ3JhbT4gZmluZEluc3BlY3RvclByb2dyYW0oV2ViR0xQcm9ncmFtJik7Ci0jZW5kaWYKKyNl
bmRpZiAvLyBFTkFCTEUoV0VCR0wpCiAjaWYgRU5BQkxFKFdFQkdQVSkKICAgICBSZWZQdHI8SW5z
cGVjdG9yU2hhZGVyUHJvZ3JhbT4gZmluZEluc3BlY3RvclByb2dyYW0oV2ViR1BVUGlwZWxpbmUm
KTsKLSNlbmRpZgorI2VuZGlmIC8vIEVOQUJMRShXRUJHUFUpCisjZW5kaWYgLy8gRU5BQkxFKFdF
QkdMKSB8fCBFTkFCTEUoV0VCR1BVKQogCiAgICAgc3RkOjp1bmlxdWVfcHRyPEluc3BlY3Rvcjo6
Q2FudmFzRnJvbnRlbmREaXNwYXRjaGVyPiBtX2Zyb250ZW5kRGlzcGF0Y2hlcjsKICAgICBSZWZQ
dHI8SW5zcGVjdG9yOjpDYW52YXNCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hl
cjsKQEAgLTE1NSw5ICsxNjUsMTEgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8U3RyaW5nPiBtX3Jl
bW92ZWRDYW52YXNJZGVudGlmaWVyczsKICAgICBUaW1lciBtX2NhbnZhc0Rlc3Ryb3llZFRpbWVy
OwogCisjaWYgRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKQogICAgIEhhc2hNYXA8U3Ry
aW5nLCBSZWZQdHI8SW5zcGVjdG9yU2hhZGVyUHJvZ3JhbT4+IG1faWRlbnRpZmllclRvSW5zcGVj
dG9yUHJvZ3JhbTsKICAgICBWZWN0b3I8U3RyaW5nPiBtX3JlbW92ZWRQcm9ncmFtSWRlbnRpZmll
cnM7CiAgICAgVGltZXIgbV9wcm9ncmFtRGVzdHJveWVkVGltZXI7CisjZW5kaWYgLy8gRU5BQkxF
KFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKQogCiAgICAgSGFzaFNldDxTdHJpbmc+IG1fcmVjb3Jk
aW5nQ2FudmFzSWRlbnRpZmllcnM7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5jcHAKaW5kZXggYTJmOGRmYTE2MjQuLmMzNWEw
NThiOTRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3RvckRPTUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3RvckRPTUFnZW50LmNwcApAQCAtMTIwNywxMCArMTIwNywxNyBAQCBzdGQ6OnVuaXF1ZV9w
dHI8SGlnaGxpZ2h0Q29uZmlnPiBJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0Q29uZmlnRnJv
bUluc3BlY3RvcgogICAgIHJldHVybiBoaWdobGlnaHRDb25maWc7CiB9CiAKKyNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQordm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0SW5zcGVjdE1vZGVFbmFi
bGVkKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgYm9vbCBlbmFibGVkLCBjb25zdCBKU09OOjpP
YmplY3QqIGhpZ2hsaWdodENvbmZpZykKK3sKKyAgICBzZXRTZWFyY2hpbmdGb3JOb2RlKGVycm9y
U3RyaW5nLCBlbmFibGVkLCBoaWdobGlnaHRDb25maWcgPyBoaWdobGlnaHRDb25maWcgOiBudWxs
cHRyLCBmYWxzZSk7Cit9CisjZWxzZQogdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0SW5zcGVj
dE1vZGVFbmFibGVkKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgYm9vbCBlbmFibGVkLCBjb25z
dCBKU09OOjpPYmplY3QqIGhpZ2hsaWdodENvbmZpZywgY29uc3QgYm9vbCogc2hvd1J1bGVycykK
IHsKICAgICBzZXRTZWFyY2hpbmdGb3JOb2RlKGVycm9yU3RyaW5nLCBlbmFibGVkLCBoaWdobGln
aHRDb25maWcgPyBoaWdobGlnaHRDb25maWcgOiBudWxscHRyLCBzaG93UnVsZXJzICYmICpzaG93
UnVsZXJzKTsKIH0KKyNlbmRpZgogCiB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHRS
ZWN0KEVycm9yU3RyaW5nJiwgaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGNv
bnN0IEpTT046Ok9iamVjdCogY29sb3IsIGNvbnN0IEpTT046Ok9iamVjdCogb3V0bGluZUNvbG9y
LCBjb25zdCBib29sKiB1c2VQYWdlQ29vcmRpbmF0ZXMpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmgKaW5kZXggN2RmMGU4M2Vi
NTMuLmU4YTc0ZjZkMDA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdl
bnRzL0luc3BlY3RvckRPTUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JET01BZ2VudC5oCkBAIC0xMzEsNyArMTMxLDExIEBAIHB1YmxpYzoKICAg
ICB2b2lkIGRpc2NhcmRTZWFyY2hSZXN1bHRzKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBz
ZWFyY2hJZCkgb3ZlcnJpZGU7CiAgICAgdm9pZCByZXNvbHZlTm9kZShFcnJvclN0cmluZyYsIGlu
dCBub2RlSWQsIGNvbnN0IFN0cmluZyogb2JqZWN0R3JvdXAsIFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQpIG92ZXJyaWRlOwogICAgIHZv
aWQgZ2V0QXR0cmlidXRlcyhFcnJvclN0cmluZyYsIGludCBub2RlSWQsIFJlZlB0cjxKU09OOjpB
cnJheU9mPFN0cmluZz4+JiByZXN1bHQpIG92ZXJyaWRlOworI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCisgICAgdm9pZCBzZXRJbnNwZWN0TW9kZUVuYWJsZWQoRXJyb3JTdHJpbmcmLCBib29sIGVu
YWJsZWQsIGNvbnN0IEpTT046Ok9iamVjdCogaGlnaGxpZ2h0Q29uZmlnKSBvdmVycmlkZTsKKyNl
bHNlCiAgICAgdm9pZCBzZXRJbnNwZWN0TW9kZUVuYWJsZWQoRXJyb3JTdHJpbmcmLCBib29sIGVu
YWJsZWQsIGNvbnN0IEpTT046Ok9iamVjdCogaGlnaGxpZ2h0Q29uZmlnLCBjb25zdCBib29sKiBz
aG93UnVsZXJzKSBvdmVycmlkZTsKKyNlbmRpZgogICAgIHZvaWQgcmVxdWVzdE5vZGUoRXJyb3JT
dHJpbmcmLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBpbnQqIG5vZGVJZCkgb3ZlcnJpZGU7CiAg
ICAgdm9pZCBwdXNoTm9kZUJ5UGF0aFRvRnJvbnRlbmQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJp
bmcmIHBhdGgsIGludCogbm9kZUlkKSBvdmVycmlkZTsKICAgICB2b2lkIGhpZGVIaWdobGlnaHQo
RXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9yUGFnZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9yUGFnZUFnZW50LmNwcAppbmRleCAwMmVkZDQzODU5Ni4uOGQy
YjlmZDE3NjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yUGFnZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKQEAgLTM2NywxMCArMzY3LDE0IEBAIHZvaWQgSW5zcGVj
dG9yUGFnZUFnZW50OjpkaXNhYmxlKEVycm9yU3RyaW5nJikKIAogICAgIEVycm9yU3RyaW5nIHVu
dXNlZDsKICAgICBzZXRTaG93UGFpbnRSZWN0cyh1bnVzZWQsIGZhbHNlKTsKKyNpZiAhUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKICAgICBzZXRTaG93UnVsZXJzKHVudXNlZCwgZmFsc2UpOworI2VuZGlm
CiAgICAgb3ZlcnJpZGVVc2VyQWdlbnQodW51c2VkLCBudWxscHRyKTsKICAgICBzZXRFbXVsYXRl
ZE1lZGlhKHVudXNlZCwgZW1wdHlTdHJpbmcoKSk7CisjaWYgSEFWRShPU19EQVJLX01PREVfU1VQ
UE9SVCkKICAgICBzZXRGb3JjZWRBcHBlYXJhbmNlKHVudXNlZCwgZW1wdHlTdHJpbmcoKSk7Cisj
ZW5kaWYKIAogICAgIGF1dG8mIGluc3BlY3RlZFBhZ2VTZXR0aW5ncyA9IG1faW5zcGVjdGVkUGFn
ZS5zZXR0aW5ncygpOwogICAgIGluc3BlY3RlZFBhZ2VTZXR0aW5ncy5zZXRBdXRob3JBbmRVc2Vy
U3R5bGVzRW5hYmxlZEluc3BlY3Rvck92ZXJyaWRlKFdURjo6bnVsbG9wdCk7CkBAIC03NzAsMTAg
Kzc3NCwxMiBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6c2VhcmNoSW5SZXNvdXJjZXMoRXJy
b3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbgogICAgICAgICBuZXR3b3JrQWdlbnQt
PnNlYXJjaE90aGVyUmVxdWVzdHMocmVnZXgsIHJlc3VsdCk7CiB9CiAKKyNpZiAhUExBVEZPUk0o
SU9TX0ZBTUlMWSkKIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzZXRTaG93UnVsZXJzKEVycm9y
U3RyaW5nJiwgYm9vbCBzaG93UnVsZXJzKQogewogICAgIG1fb3ZlcmxheS0+c2V0U2hvd1J1bGVy
cyhzaG93UnVsZXJzKTsKIH0KKyNlbmRpZgogCiB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6c2V0
U2hvd1BhaW50UmVjdHMoRXJyb3JTdHJpbmcmLCBib29sIHNob3cpCiB7CkBAIC04NjksMTAgKzg3
NSwxMiBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6ZnJhbWVDbGVhcmVkU2NoZWR1bGVkTmF2
aWdhdGlvbihGcmFtZSYgZnJhbWUpCiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmZyYW1lQ2xl
YXJlZFNjaGVkdWxlZE5hdmlnYXRpb24oZnJhbWVJZCgmZnJhbWUpKTsKIH0KIAorI2lmIEhBVkUo
T1NfREFSS19NT0RFX1NVUFBPUlQpCiB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6ZGVmYXVsdEFw
cGVhcmFuY2VEaWRDaGFuZ2UoYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSkKIHsKICAgICBtX2Zyb250
ZW5kRGlzcGF0Y2hlci0+ZGVmYXVsdEFwcGVhcmFuY2VEaWRDaGFuZ2UodXNlRGFya0FwcGVhcmFu
Y2UgPyBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpBcHBlYXJhbmNlOjpEYXJrIDogSW5zcGVj
dG9yOjpQcm90b2NvbDo6UGFnZTo6QXBwZWFyYW5jZTo6TGlnaHQpOwogfQorI2VuZGlmCiAKIHZv
aWQgSW5zcGVjdG9yUGFnZUFnZW50OjpkaWRDbGVhcldpbmRvd09iamVjdEluV29ybGQoRnJhbWUm
IGZyYW1lLCBET01XcmFwcGVyV29ybGQmIHdvcmxkKQogewpAQCAtMTAwOCwxMyArMTAxNiw5IEBA
IHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzZXRFbXVsYXRlZE1lZGlhKEVycm9yU3RyaW5nJiwg
Y29uc3QgU3RyaW5nJiBtZWRpYSkKICAgICBkb2N1bWVudC0+ZXZhbHVhdGVNZWRpYVF1ZXJpZXNB
bmRSZXBvcnRDaGFuZ2VzKCk7CiB9CiAKKyNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQog
dm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNldEZvcmNlZEFwcGVhcmFuY2UoRXJyb3JTdHJpbmcm
LCBjb25zdCBTdHJpbmcmIGFwcGVhcmFuY2UpCiB7Ci0gICAgaWYgKGFwcGVhcmFuY2UgPT0gbV9m
b3JjZWRBcHBlYXJhbmNlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2ZvcmNlZEFwcGVhcmFu
Y2UgPSBhcHBlYXJhbmNlOwotCiAgICAgaWYgKGFwcGVhcmFuY2UgPT0gIkxpZ2h0Il9zKQogICAg
ICAgICBtX2luc3BlY3RlZFBhZ2Uuc2V0VXNlRGFya0FwcGVhcmFuY2VPdmVycmlkZShmYWxzZSk7
CiAgICAgZWxzZSBpZiAoYXBwZWFyYW5jZSA9PSAiRGFyayJfcykKQEAgLTEwMjIsNiArMTAyNiw3
IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzZXRGb3JjZWRBcHBlYXJhbmNlKEVycm9yU3Ry
aW5nJiwgY29uc3QgU3RyaW5nJiBhcHBlYXJhCiAgICAgZWxzZQogICAgICAgICBtX2luc3BlY3Rl
ZFBhZ2Uuc2V0VXNlRGFya0FwcGVhcmFuY2VPdmVycmlkZShXVEY6Om51bGxvcHQpOwogfQorI2Vu
ZGlmCiAKIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjphcHBseVVzZXJBZ2VudE92ZXJyaWRlKFN0
cmluZyYgdXNlckFnZW50KQogewpAQCAtMTA2OSw5ICsxMDc0LDkgQEAgdm9pZCBJbnNwZWN0b3JQ
YWdlQWdlbnQ6OnNuYXBzaG90UmVjdChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCB4LCBp
bnQgeSwgaW4KICAgICAqb3V0RGF0YVVSTCA9IHNuYXBzaG90LT50b0RhdGFVUkwoImltYWdlL3Bu
ZyJfcywgV1RGOjpudWxsb3B0LCBQcmVzZXJ2ZVJlc29sdXRpb246Olllcyk7CiB9CiAKKyNpZiBF
TkFCTEUoV0VCX0FSQ0hJVkUpICYmIFVTRShDRikKIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50Ojph
cmNoaXZlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgU3RyaW5nKiBkYXRhKQogewotI2lmIEVO
QUJMRShXRUJfQVJDSElWRSkgJiYgVVNFKENGKQogICAgIGF1dG8gYXJjaGl2ZSA9IExlZ2FjeVdl
YkFyY2hpdmU6OmNyZWF0ZShtX2luc3BlY3RlZFBhZ2UubWFpbkZyYW1lKCkpOwogICAgIGlmICgh
YXJjaGl2ZSkgewogICAgICAgICBlcnJvclN0cmluZyA9ICJDb3VsZCBub3QgY3JlYXRlIHdlYiBh
cmNoaXZlIGZvciBtYWluIGZyYW1lIl9zOwpAQCAtMTA4MCwxMCArMTA4NSw3IEBAIHZvaWQgSW5z
cGVjdG9yUGFnZUFnZW50OjphcmNoaXZlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgU3RyaW5n
KiBkYXRhKQogCiAgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gYnVmZmVyID0gYXJjaGl2ZS0+cmF3
RGF0YVJlcHJlc2VudGF0aW9uKCk7CiAgICAgKmRhdGEgPSBiYXNlNjRFbmNvZGUoQ0ZEYXRhR2V0
Qnl0ZVB0cihidWZmZXIuZ2V0KCkpLCBDRkRhdGFHZXRMZW5ndGgoYnVmZmVyLmdldCgpKSk7Ci0j
ZWxzZQotICAgIFVOVVNFRF9QQVJBTShkYXRhKTsKLSAgICBlcnJvclN0cmluZyA9ICJOb3Qgc3Vw
cG9ydGVkIl9zOwotI2VuZGlmCiB9CisjZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JQYWdl
QWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUGFnZUFn
ZW50LmgKaW5kZXggNmM3NTgyOTUwMjMuLjk3ZDAzMjVkNjRhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclBhZ2VBZ2VudC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUGFnZUFnZW50LmgKQEAgLTEwOCwx
MyArMTA4LDE5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEJvb3RzdHJhcFNjcmlwdChFcnJvclN0
cmluZyYsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxTb3VyY2UpIGZpbmFsOwogICAgIHZvaWQgc2Vh
cmNoSW5SZXNvdXJjZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29uc3Qg
U3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgcXVlcnksIGNvbnN0IGJvb2wqIG9wdGlvbmFsQ2Fz
ZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogb3B0aW9uYWxJc1JlZ2V4LCBjb25zdCBTdHJpbmcqIG9w
dGlvbmFsUmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29s
OjpHZW5lcmljVHlwZXM6OlNlYXJjaE1hdGNoPj4mKSBvdmVycmlkZTsKICAgICB2b2lkIHNlYXJj
aEluUmVzb3VyY2VzKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgYm9vbCogY2Fz
ZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogaXNSZWdleCwgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5z
cGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6U2VhcmNoUmVzdWx0Pj4mKSBvdmVycmlkZTsKKyNpZiAh
UExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICB2b2lkIHNldFNob3dSdWxlcnMoRXJyb3JTdHJpbmcm
LCBib29sKSBvdmVycmlkZTsKKyNlbmRpZgogICAgIHZvaWQgc2V0U2hvd1BhaW50UmVjdHMoRXJy
b3JTdHJpbmcmLCBib29sIHNob3cpIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0RW11bGF0ZWRNZWRp
YShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOworI2lmIEhBVkUoT1NfREFS
S19NT0RFX1NVUFBPUlQpCiAgICAgdm9pZCBzZXRGb3JjZWRBcHBlYXJhbmNlKEVycm9yU3RyaW5n
JiwgY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7CisjZW5kaWYKICAgICB2b2lkIHNuYXBzaG90Tm9k
ZShFcnJvclN0cmluZyYsIGludCBub2RlSWQsIFN0cmluZyogb3V0RGF0YVVSTCkgb3ZlcnJpZGU7
CiAgICAgdm9pZCBzbmFwc2hvdFJlY3QoRXJyb3JTdHJpbmcmLCBpbnQgeCwgaW50IHksIGludCB3
aWR0aCwgaW50IGhlaWdodCwgY29uc3QgU3RyaW5nJiBjb29yZGluYXRlU3lzdGVtLCBTdHJpbmcq
IG91dERhdGFVUkwpIG92ZXJyaWRlOworI2lmIEVOQUJMRShXRUJfQVJDSElWRSkgJiYgVVNFKENG
KQogICAgIHZvaWQgYXJjaGl2ZShFcnJvclN0cmluZyYsIFN0cmluZyogZGF0YSkgb3ZlcnJpZGU7
CisjZW5kaWYKIAogICAgIC8vIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbgogICAgIHZvaWQgZG9t
Q29udGVudEV2ZW50RmlyZWQoKTsKQEAgLTEyNiw3ICsxMzIsOSBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBmcmFtZVN0b3BwZWRMb2FkaW5nKEZyYW1lJik7CiAgICAgdm9pZCBmcmFtZVNjaGVkdWxlZE5h
dmlnYXRpb24oRnJhbWUmLCBTZWNvbmRzIGRlbGF5KTsKICAgICB2b2lkIGZyYW1lQ2xlYXJlZFNj
aGVkdWxlZE5hdmlnYXRpb24oRnJhbWUmKTsKKyNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JU
KQogICAgIHZvaWQgZGVmYXVsdEFwcGVhcmFuY2VEaWRDaGFuZ2UoYm9vbCB1c2VEYXJrQXBwZWFy
YW5jZSk7CisjZW5kaWYKICAgICB2b2lkIGFwcGx5VXNlckFnZW50T3ZlcnJpZGUoU3RyaW5nJik7
CiAgICAgdm9pZCBhcHBseUVtdWxhdGVkTWVkaWEoU3RyaW5nJik7CiAgICAgdm9pZCBkaWRDbGVh
cldpbmRvd09iamVjdEluV29ybGQoRnJhbWUmLCBET01XcmFwcGVyV29ybGQmKTsKQEAgLTE2MSw3
ICsxNjksNiBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8RG9jdW1lbnRMb2FkZXIqLCBTdHJpbmc+
IG1fbG9hZGVyVG9JZGVudGlmaWVyOwogICAgIFN0cmluZyBtX3VzZXJBZ2VudE92ZXJyaWRlOwog
ICAgIFN0cmluZyBtX2VtdWxhdGVkTWVkaWE7Ci0gICAgU3RyaW5nIG1fZm9yY2VkQXBwZWFyYW5j
ZTsKICAgICBTdHJpbmcgbV9ib290c3RyYXBTY3JpcHQ7CiAgICAgYm9vbCBtX2lzRmlyc3RMYXlv
dXRBZnRlck9uTG9hZCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX3Nob3dQYWludFJlY3RzIHsgZmFs
c2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Jh
c2UvTWFpbi5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Jhc2UvTWFp
bi5qcwppbmRleCBlNWI0MzJjMmNiOC4uMzU0MzkxOGMxNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Jhc2UvTWFpbi5qcworKysgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9CYXNlL01haW4uanMKQEAgLTIzOTMsNyArMjM5Myw3
IEBAIFdJLl91cGRhdGVEb3dubG9hZFRhYkJhckJ1dHRvbiA9IGZ1bmN0aW9uKCkKICAgICBpZiAo
IVdJLl9yZWxvYWRUYWJCYXJCdXR0b24pCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghSW5z
cGVjdG9yQmFja2VuZC5oYXNEb21haW4oIlBhZ2UiKSkgeworICAgIGlmICghSW5zcGVjdG9yQmFj
a2VuZC5oYXNDb21tYW5kKCJQYWdlLmFyY2hpdmUiKSkgewogICAgICAgICBXSS5fZG93bmxvYWRU
YWJCYXJCdXR0b24uaGlkZGVuID0gdHJ1ZTsKICAgICAgICAgV0kuX3VwZGF0ZVRhYkJhckRpdmlk
ZXJzKCk7CiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvRGVyaXZl
ZFNvdXJjZXMubWFrZSBiL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMubWFrZQppbmRleCBh
MTJiNzg2M2M5Mi4uOGM1OGE1NzcxNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvRGVyaXZl
ZFNvdXJjZXMubWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UKQEAg
LTMxNywxNyArMzE3LDkgQEAgQVVUT01BVElPTl9QUk9UT0NPTF9PVVRQVVRfRklMRVMgPSBcCiAj
CiBBVVRPTUFUSU9OX1BST1RPQ09MX09VVFBVVF9QQVRURVJOUyA9ICQoc3Vic3QgLiwlLCQoQVVU
T01BVElPTl9QUk9UT0NPTF9PVVRQVVRfRklMRVMpKQogCi1pZmVxICgkKE9TKSxNQUNPUykKLWlm
ZXEgKCQoc2hlbGwgJChDQykgLXN0ZD1nbnUrKzF6IC14IGMrKyAtRSAtUCAtZE0gJChTREtfRkxB
R1MpICQoVEFSR0VUX1RSSVBMRV9GTEFHUykgJChGUkFNRVdPUktfRkxBR1MpICQoSEVBREVSX0ZM
QUdTKSAtaW5jbHVkZSAid3RmL1BsYXRmb3JtLmgiIC9kZXYvbnVsbCB8IGdyZXAgJyBXVEZfUExB
VEZPUk1fSU9TX0ZBTUlMWSAnIHwgY3V0IC1kJyAnIC1mMyksIDEpCi0JQVVUT01BVElPTl9CQUNL
RU5EX1BMQVRGT1JNX0FSR1VNRU5UUyA9IC0tcGxhdGZvcm0gaU9TCi1lbHNlCi0JQVVUT01BVElP
Tl9CQUNLRU5EX1BMQVRGT1JNX0FSR1VNRU5UUyA9IC0tcGxhdGZvcm0gbWFjT1MKLWVuZGlmCi1l
bmRpZiAjIE1BQ09TCi0KICMgSlNPTi1SUEMgRnJvbnRlbmQgRGlzcGF0Y2hlcnMsIEJhY2tlbmQg
RGlzcGF0Y2hlcnMsIFR5cGUgQnVpbGRlcnMKICQoQVVUT01BVElPTl9QUk9UT0NPTF9PVVRQVVRf
UEFUVEVSTlMpIDogJChBVVRPTUFUSU9OX1BST1RPQ09MX0lOUFVUX0ZJTEVTKSAkKEFVVE9NQVRJ
T05fUFJPVE9DT0xfR0VORVJBVE9SX1NDUklQVFMpCi0JJChQWVRIT04pICQoSmF2YVNjcmlwdENv
cmVfU0NSSVBUU19ESVIpL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weSAt
LWZyYW1ld29yayBXZWJLaXQgJChBVVRPTUFUSU9OX0JBQ0tFTkRfUExBVEZPUk1fQVJHVU1FTlRT
KSAtLWJhY2tlbmQgLS1vdXRwdXREaXIgLiAkKEFVVE9NQVRJT05fUFJPVE9DT0xfSU5QVVRfRklM
RVMpCisJJChQWVRIT04pICQoSmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVIpL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weSAtLWZyYW1ld29yayBXZWJLaXQgLS1iYWNrZW5k
IC0tb3V0cHV0RGlyIC4gJChBVVRPTUFUSU9OX1BST1RPQ09MX0lOUFVUX0ZJTEVTKQogCiBhbGwg
OiAkKEFVVE9NQVRJT05fUFJPVE9DT0xfT1VUUFVUX0ZJTEVTKQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1BsYXRmb3JtTWFjLmNtYWtlIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybU1hYy5j
bWFrZQppbmRleCA0OGUxNjAxM2RjYi4uNGMyZDMwYmViZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvUGxhdGZvcm1NYWMuY21ha2UKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybU1hYy5j
bWFrZQpAQCAtNDgwLDEwICs0ODAsNiBAQCBmb3JlYWNoIChfZmlsZSAke09iakNGb3J3YXJkaW5n
SGVhZGVyc30pCiAgICAgZmlsZShXUklURSAke0ZPUldBUkRJTkdfSEVBREVSU19ESVJ9L1dlYktp
dC8ke19maWxlfSAiI2ltcG9ydCA8V2ViS2l0TGVnYWN5LyR7X2ZpbGV9PiIpCiBlbmRmb3JlYWNo
ICgpCiAKLWxpc3QoQVBQRU5EIFdlYktpdF9BVVRPTUFUSU9OX1BST1RPQ09MX0dFTkVSQVRPUl9F
WFRSQV9GTEFHUwotICAgIC0tcGxhdGZvcm09bWFjT1MKLSkKLQogc2V0KFNlY0l0ZW1TaGltRGly
ZWN0b3J5ICR7Q01BS0VfTElCUkFSWV9PVVRQVVRfRElSRUNUT1JZfS9XZWJLaXQuZnJhbWV3b3Jr
L1ZlcnNpb25zL0EvRnJhbWV3b3JrcykKIGFkZF9saWJyYXJ5KFNlY0l0ZW1TaGltIFNIQVJFRCBX
ZWJQcm9jZXNzL21hYy9TZWNJdGVtU2hpbUxpYnJhcnkubW0pCiBXRUJLSVRfQ1JFQVRFX1NZTUxJ
TksoU2VjSXRlbVNoaW0gJHtTZWNJdGVtU2hpbURpcmVjdG9yeX0gJHtDTUFLRV9MSUJSQVJZX09V
VFBVVF9ESVJFQ1RPUll9L1dlYktpdC5mcmFtZXdvcmsvRnJhbWV3b3JrcykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vQXV0b21hdGlvbi5qc29uIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9BdXRvbWF0aW9uLmpzb24KaW5kZXggN2Y1
NTI1NzA1ZWYuLjNkY2IyMTQxZWIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BdXRvbWF0aW9uL0F1dG9tYXRpb24uanNvbgorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BdXRvbWF0aW9uL0F1dG9tYXRpb24uanNvbgpAQCAtNDM3LDcgKzQzNyw3IEBACiAgICAgICAg
IHsKICAgICAgICAgICAgICJuYW1lIjogImluc3BlY3RCcm93c2luZ0NvbnRleHQiLAogICAgICAg
ICAgICAgImRlc2NyaXB0aW9uIjogIkluc3BlY3QgdGhlIHNwZWNpZmllZCBicm93c2luZyBjb250
ZXh0IHVzaW5nIFdlYiBJbnNwZWN0b3IuIiwKLSAgICAgICAgICAgICJwbGF0Zm9ybSI6ICJtYWNv
cyIsCisgICAgICAgICAgICAiY29uZGl0aW9uIjogImRlZmluZWQoV1RGX1BMQVRGT1JNX01BQykg
JiYgV1RGX1BMQVRGT1JNX01BQyIsCiAgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKICAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogImhhbmRsZSIsICIkcmVmIjogIkJyb3dzaW5nQ29udGV4dEhh
bmRsZSIsICJkZXNjcmlwdGlvbiI6ICJUaGUgaGFuZGxlIGZvciB0aGUgYnJvd3NpbmcgY29udGV4
dCB0aGF0IHNob3VsZCBiZSBpbnNwZWN0ZWQuIiB9LAogICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAiZW5hYmxlQXV0b0NhcHR1cmluZyIsICJ0eXBlIjogImJvb2xlYW4iLCAib3B0aW9uYWwiOiB0
cnVlLCAiZGVzY3JpcHRpb24iOiAiSWYgdGhpcyBvcHRpb24gaXMgcHJlc2VudCBhbmQgc2V0IHRv
IHRydWUsIHRoZSBXZWIgSW5zcGVjdG9yIHdpbGwgYXV0b21hdGljYWxseSBzdGFydCBhIHRpbWVs
aW5lIHJlY29yZGluZyBvZiB0aGUgc3BlY2lmaWVkIGJyb3dzaW5nIGNvbnRleHQgb25jZSBpdCBp
cyBhdHRhY2hlZC4gTm90ZSB0aGF0IHRoaXMgZGlzYWJsZXMgdGhlIGRlYnVnZ2VyIGZvciB0aGUg
ZHVyYXRpb24gb2YgdGhlIHJlY29yZGluZy4iIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvaW5zcGVjdG9yL21haW4ucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2luc3Bl
Y3Rvci9tYWluLnB5CmluZGV4IDE0NjJkODAxOWQ5Li45ZTA5MDRjMjBmZiAxMDA2NDQKLS0tIGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9pbnNwZWN0b3IvbWFpbi5weQorKysgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2luc3BlY3Rvci9tYWluLnB5CkBAIC0zOCwxNCArMzgsMTMgQEAgY2xhc3Mg
SW5zcGVjdG9yR2VuZXJhdG9yVGVzdHM6CiAgICAgICAgIHNlbGYucmVzZXRfcmVzdWx0cyA9IHJl
c2V0X3Jlc3VsdHMKICAgICAgICAgc2VsZi5leGVjdXRpdmUgPSBleGVjdXRpdmUKIAotICAgIGRl
ZiBnZW5lcmF0ZV9mcm9tX2pzb24oc2VsZiwganNvbl9maWxlLCBwbGF0Zm9ybSwgb3V0cHV0X2Rp
cmVjdG9yeSk6CisgICAgZGVmIGdlbmVyYXRlX2Zyb21fanNvbihzZWxmLCBqc29uX2ZpbGUsIG91
dHB1dF9kaXJlY3RvcnkpOgogICAgICAgICBjbWQgPSBbJ3B5dGhvbicsCiAgICAgICAgICAgICAg
ICAnSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5JywKICAgICAgICAgICAgICAgICctLW91dHB1dERpcicsIG91dHB1
dF9kaXJlY3RvcnksCiAgICAgICAgICAgICAgICAnLS1mb3JjZScsCiAgICAgICAgICAgICAgICAn
LS1mcmFtZXdvcmsnLCAnVGVzdCcsCiAgICAgICAgICAgICAgICAnLS10ZXN0JywKLSAgICAgICAg
ICAgICAgICctLXBsYXRmb3JtJywgcGxhdGZvcm0sCiAgICAgICAgICAgICAgICBqc29uX2ZpbGVd
CiAKICAgICAgICAgZXhpdF9jb2RlID0gMApAQCAtODgsNyArODcsNyBAQCBjbGFzcyBJbnNwZWN0
b3JHZW5lcmF0b3JUZXN0czoKICAgICAgICAgICAgICAgICBwcmludCgnUEFTUzogJXMnICUgb3V0
cHV0X2ZpbGUpCiAgICAgICAgIHJldHVybiBjaGFuZ2VzX2ZvdW5kCiAKLSAgICBkZWYgcnVuX3Rl
c3RzKHNlbGYsIHBsYXRmb3JtLCBpbnB1dF9kaXJlY3RvcnksIHJlZmVyZW5jZV9kaXJlY3Rvcnkp
OgorICAgIGRlZiBydW5fdGVzdHMoc2VsZiwgaW5wdXRfZGlyZWN0b3J5LCByZWZlcmVuY2VfZGly
ZWN0b3J5KToKICAgICAgICAgd29ya19kaXJlY3RvcnkgPSByZWZlcmVuY2VfZGlyZWN0b3J5CiAK
ICAgICAgICAgcGFzc2VkID0gVHJ1ZQpAQCAtMTAxLDcgKzEwMCw3IEBAIGNsYXNzIEluc3BlY3Rv
ckdlbmVyYXRvclRlc3RzOgogICAgICAgICAgICAgaWYgbm90IHNlbGYucmVzZXRfcmVzdWx0czoK
ICAgICAgICAgICAgICAgICB3b3JrX2RpcmVjdG9yeSA9IHRlbXBmaWxlLm1rZHRlbXAoKQogCi0g
ICAgICAgICAgICBpZiBzZWxmLmdlbmVyYXRlX2Zyb21fanNvbihvcy5wYXRoLmpvaW4oaW5wdXRf
ZGlyZWN0b3J5LCBpbnB1dF9maWxlKSwgcGxhdGZvcm0sIHdvcmtfZGlyZWN0b3J5KToKKyAgICAg
ICAgICAgIGlmIHNlbGYuZ2VuZXJhdGVfZnJvbV9qc29uKG9zLnBhdGguam9pbihpbnB1dF9kaXJl
Y3RvcnksIGlucHV0X2ZpbGUpLCB3b3JrX2RpcmVjdG9yeSk6CiAgICAgICAgICAgICAgICAgcGFz
c2VkID0gRmFsc2UKIAogICAgICAgICAgICAgaWYgc2VsZi5yZXNldF9yZXN1bHRzOgpAQCAtMTIy
LDIxICsxMjEsMTAgQEAgY2xhc3MgSW5zcGVjdG9yR2VuZXJhdG9yVGVzdHM6CiAgICAgICAgIGFs
bF90ZXN0c19wYXNzZWQgPSBUcnVlCiAKICAgICAgICAgYmFzZV9kaXJlY3RvcnkgPSBvcy5wYXRo
LmpvaW4oJ0phdmFTY3JpcHRDb3JlJywgJ2luc3BlY3RvcicsICdzY3JpcHRzJywgJ3Rlc3RzJykK
LQotICAgICAgICBwbGF0Zm9ybV9kaXJlY3RvcmllcyA9IHsKLSAgICAgICAgICAgICdtYWNvcyc6
ICdtYWMnLAotICAgICAgICAgICAgJ2lvcyc6ICdpb3MnLAotICAgICAgICAgICAgJ2dlbmVyaWMn
OiAnZ2VuZXJpYycsCi0gICAgICAgICAgICAnYWxsJzogJ2FsbCcsCi0gICAgICAgIH0KLQotICAg
ICAgICBmb3IgcGxhdGZvcm1fbmFtZSwgcGxhdGZvcm1fZGlyZWN0b3J5IGluIHBsYXRmb3JtX2Rp
cmVjdG9yaWVzLml0ZXJpdGVtcygpOgotICAgICAgICAgICAgaW5wdXRfZGlyZWN0b3J5ID0gb3Mu
cGF0aC5qb2luKGJhc2VfZGlyZWN0b3J5LCBwbGF0Zm9ybV9kaXJlY3RvcnkpCi0gICAgICAgICAg
ICByZWZlcmVuY2VfZGlyZWN0b3J5ID0gb3MucGF0aC5qb2luKGlucHV0X2RpcmVjdG9yeSwgJ2V4
cGVjdGVkJykKLSAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKGlucHV0X2RpcmVjdG9y
eSkgb3Igbm90IG9zLnBhdGguaXNkaXIocmVmZXJlbmNlX2RpcmVjdG9yeSk6Ci0gICAgICAgICAg
ICAgICAgY29udGludWUKLQotICAgICAgICAgICAgYWxsX3Rlc3RzX3Bhc3NlZCA9IGFsbF90ZXN0
c19wYXNzZWQgYW5kIHNlbGYucnVuX3Rlc3RzKHBsYXRmb3JtX25hbWUsIGlucHV0X2RpcmVjdG9y
eSwgcmVmZXJlbmNlX2RpcmVjdG9yeSkKKyAgICAgICAgaW5wdXRfZGlyZWN0b3J5ID0gYmFzZV9k
aXJlY3RvcnkKKyAgICAgICAgcmVmZXJlbmNlX2RpcmVjdG9yeSA9IG9zLnBhdGguam9pbihpbnB1
dF9kaXJlY3RvcnksICdleHBlY3RlZCcpCisgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoaW5wdXRf
ZGlyZWN0b3J5KSBhbmQgb3MucGF0aC5pc2RpcihyZWZlcmVuY2VfZGlyZWN0b3J5KToKKyAgICAg
ICAgICAgIGFsbF90ZXN0c19wYXNzZWQgPSBzZWxmLnJ1bl90ZXN0cyhpbnB1dF9kaXJlY3Rvcnks
IHJlZmVyZW5jZV9kaXJlY3RvcnkpCiAKICAgICAgICAgcHJpbnQoJycpCiAgICAgICAgIGlmIGFs
bF90ZXN0c19wYXNzZWQ6Cg==
</data>
<flag name="commit-queue"
          id="414926"
          type_id="3"
          status="-"
          setter="hi"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>399504</attachid>
            <date>2020-05-15 13:12:43 -0700</date>
            <delta_ts>2020-05-15 13:45:21 -0700</delta_ts>
            <desc>[Patch] WIP</desc>
            <filename>210014.diff</filename>
            <type>text/plain</type>
            <size>2686446</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKaW5kZXggMDBkMmE1N2Iz
ZWQuLjQzYmZjNmQxZDJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZl
ZFNvdXJjZXMubWFrZQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMu
bWFrZQpAQCAtNDYsNiArNDYsMjAgQEAgZWxzZQogICAgIERFTEVURSA9IHJtIC1mCiBlbmRpZgog
CitGUkFNRVdPUktfRkxBR1MgPSAkKHNoZWxsIGVjaG8gJChCVUlMVF9QUk9EVUNUU19ESVIpICQo
RlJBTUVXT1JLX1NFQVJDSF9QQVRIUykgJChTWVNURU1fRlJBTUVXT1JLX1NFQVJDSF9QQVRIUykg
fCBwZXJsIC1lICdwcmludCAiLUYgIiAuIGpvaW4oIiAtRiAiLCBzcGxpdCgiICIsIDw+KSk7JykK
K0hFQURFUl9GTEFHUyA9ICQoc2hlbGwgZWNobyAkKEJVSUxUX1BST0RVQ1RTX0RJUikgJChIRUFE
RVJfU0VBUkNIX1BBVEhTKSAkKFNZU1RFTV9IRUFERVJfU0VBUkNIX1BBVEhTKSB8IHBlcmwgLWUg
J3ByaW50ICItSSAiIC4gam9pbigiIC1JICIsIHNwbGl0KCIgIiwgPD4pKTsnKQorCitURVhUX1BS
RVBST0NFU1NPUl9GTEFHUz0tRSAtUCAtdworCitpZm5lcSAoJChTREtST09UKSwpCisJU0RLX0ZM
QUdTPS1pc3lzcm9vdCAkKFNES1JPT1QpCitlbmRpZgorCitpZmVxICgkKFVTRV9MTFZNX1RBUkdF
VF9UUklQTEVTX0ZPUl9DTEFORyksWUVTKQorCVdLX0NVUlJFTlRfQVJDSD0kKHdvcmQgMSwgJChB
UkNIUykpCisJVEFSR0VUX1RSSVBMRV9GTEFHUz0tdGFyZ2V0ICQoV0tfQ1VSUkVOVF9BUkNIKS0k
KExMVk1fVEFSR0VUX1RSSVBMRV9WRU5ET1IpLSQoTExWTV9UQVJHRVRfVFJJUExFX09TX1ZFUlNJ
T04pJChMTFZNX1RBUkdFVF9UUklQTEVfU1VGRklYKQorZW5kaWYKKwogIyAtLS0tLS0tLQogCiAu
UEhPTlkgOiBhbGwKQEAgLTI0Myw2ICsyNTcsOCBAQCBJTlNQRUNUT1JfRE9NQUlOUyA6PSBcCiAg
ICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3RvY29sL0FuaW1hdGlvbi5qc29uIFwK
ICAgICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvQXBwbGljYXRpb25DYWNo
ZS5qc29uIFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvQXVkaXQu
anNvbiBcCisgICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3RvY29sL0Jyb3dzZXIu
anNvbiBcCisgICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3RvY29sL0NQVVByb2Zp
bGVyLmpzb24gXAogICAgICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9wcm90b2NvbC9DU1Mu
anNvbiBcCiAgICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3RvY29sL0NhbnZhcy5q
c29uIFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvQ29uc29sZS5q
c29uIFwKQEAgLTI1MSwzNSArMjY3LDI0IEBAIElOU1BFQ1RPUl9ET01BSU5TIDo9IFwKICAgICAk
KEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvRE9NU3RvcmFnZS5qc29uIFwKICAg
ICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvRGF0YWJhc2UuanNvbiBcCiAg
ICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3RvY29sL0RlYnVnZ2VyLmpzb24gXAot
ICAgICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9wcm90b2NvbC9Ccm93c2VyLmpzb24gXAog
ICAgICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9wcm90b2NvbC9HZW5lcmljVHlwZXMuanNv
biBcCiAgICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3RvY29sL0hlYXAuanNvbiBc
CisgICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3RvY29sL0luZGV4ZWREQi5qc29u
IFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvSW5zcGVjdG9yLmpz
b24gXAogICAgICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9wcm90b2NvbC9MYXllclRyZWUu
anNvbiBcCisgICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3RvY29sL01lbW9yeS5q
c29uIFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvTmV0d29yay5q
c29uIFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvUGFnZS5qc29u
IFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvUmVjb3JkaW5nLmpz
b24gXAogICAgICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9wcm90b2NvbC9SdW50aW1lLmpz
b24gXAogICAgICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9wcm90b2NvbC9TY3JpcHRQcm9m
aWxlci5qc29uIFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvU2Vj
dXJpdHkuanNvbiBcCisgICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3RvY29sL1Nl
cnZpY2VXb3JrZXIuanNvbiBcCiAgICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3Rv
Y29sL1RhcmdldC5qc29uIFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9j
b2wvVGltZWxpbmUuanNvbiBcCiAgICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3Rv
Y29sL1dvcmtlci5qc29uIFwKICMKIAotaWZlcSAoJChmaW5kc3RyaW5nIEVOQUJMRV9JTkRFWEVE
X0RBVEFCQVNFLCQoRkVBVFVSRV9ERUZJTkVTKSksIEVOQUJMRV9JTkRFWEVEX0RBVEFCQVNFKQot
ICAgIElOU1BFQ1RPUl9ET01BSU5TIDo9ICQoSU5TUEVDVE9SX0RPTUFJTlMpICQoSmF2YVNjcmlw
dENvcmUpL2luc3BlY3Rvci9wcm90b2NvbC9JbmRleGVkREIuanNvbgotZW5kaWYKLQotaWZlcSAo
JChmaW5kc3RyaW5nIEVOQUJMRV9SRVNPVVJDRV9VU0FHRSwkKEZFQVRVUkVfREVGSU5FUykpLCBF
TkFCTEVfUkVTT1VSQ0VfVVNBR0UpCi0gICAgSU5TUEVDVE9SX0RPTUFJTlMgOj0gJChJTlNQRUNU
T1JfRE9NQUlOUykgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3RvY29sL0NQVVByb2Zp
bGVyLmpzb24KLSAgICBJTlNQRUNUT1JfRE9NQUlOUyA6PSAkKElOU1BFQ1RPUl9ET01BSU5TKSAk
KEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvTWVtb3J5Lmpzb24KLWVuZGlmCi0K
LWlmZXEgKCQoZmluZHN0cmluZyBFTkFCTEVfU0VSVklDRV9XT1JLRVIsJChGRUFUVVJFX0RFRklO
RVMpKSwgRU5BQkxFX1NFUlZJQ0VfV09SS0VSKQotICAgIElOU1BFQ1RPUl9ET01BSU5TIDo9ICQo
SU5TUEVDVE9SX0RPTUFJTlMpICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9wcm90b2NvbC9T
ZXJ2aWNlV29ya2VyLmpzb24KLWVuZGlmCi0KIElOU1BFQ1RPUl9HRU5FUkFUT1JfU0NSSVBUUyA9
IFwKIAkkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL19faW5pdF9f
LnB5IFwKIAkkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2NwcF9n
ZW5lcmF0b3JfdGVtcGxhdGVzLnB5IFwKQEAgLTMyNyw2ICszMzIsOSBAQCBDb21iaW5lZERvbWFp
bnMuanNvbiA6ICQoSmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVIpL2dlbmVyYXRlLWNvbWJpbmVk
LWluc3BlY3RvcgogIyBJbnNwZWN0b3IgQmFja2VuZCBEaXNwYXRjaGVycywgRnJvbnRlbmQgRGlz
cGF0Y2hlcnMsIFR5cGUgQnVpbGRlcnMKICQoSU5TUEVDVE9SX0RJU1BBVENIRVJfRklMRVNfUEFU
VEVSTlMpIDogQ29tYmluZWREb21haW5zLmpzb24gJChJTlNQRUNUT1JfR0VORVJBVE9SX1NDUklQ
VFMpCiAJJChQWVRIT04pICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weSAtLWZyYW1ld29yayBKYXZhU2NyaXB0
Q29yZSAtLW91dHB1dERpciBpbnNwZWN0b3IgLi9Db21iaW5lZERvbWFpbnMuanNvbgorCW12IGlu
c3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMgaW5zcGVjdG9yL0luc3BlY3RvckJh
Y2tlbmRDb21tYW5kcy5qcy5pbgorCSQoQ0MpICQoU0RLX0ZMQUdTKSAkKFRBUkdFVF9UUklQTEVf
RkxBR1MpICQoVEVYVF9QUkVQUk9DRVNTT1JfRkxBR1MpICQoRlJBTUVXT1JLX0ZMQUdTKSAkKEhF
QURFUl9GTEFHUykgLWluY2x1ZGUgInd0Zi9QbGF0Zm9ybS5oIiAtIDwgaW5zcGVjdG9yL0luc3Bl
Y3RvckJhY2tlbmRDb21tYW5kcy5qcy5pbiA+IGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kQ29t
bWFuZHMuanMub3V0CisJdHIgLXMgIlxuIiA8IGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kQ29t
bWFuZHMuanMub3V0ID4gaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwogCiBJ
bmplY3RlZFNjcmlwdFNvdXJjZS5oIDogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0U291cmNlLmpz
ICQoSmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVIpL2pzbWluLnB5ICQoSmF2YVNjcmlwdENvcmVf
U0NSSVBUU19ESVIpL3h4ZC5wbAogCWVjaG8gIi8vIyBzb3VyY2VVUkw9X19JbmplY3RlZFNjcmlw
dF9JbmplY3RlZFNjcmlwdFNvdXJjZS5qcyIgPiAuL0luamVjdGVkU2NyaXB0U291cmNlLm1pbi5q
cwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9D
UFVQcm9maWxlci5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2Nv
bC9DUFVQcm9maWxlci5qc29uCmluZGV4IGNmYWNkMDFkYjczLi5lMTc5MjIyMDc5NSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9DUFVQcm9maWxl
ci5qc29uCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvQ1BV
UHJvZmlsZXIuanNvbgpAQCAtMSw3ICsxLDcgQEAKIHsKICAgICAiZG9tYWluIjogIkNQVVByb2Zp
bGVyIiwKICAgICAiZGVzY3JpcHRpb24iOiAiQ1BVUHJvZmlsZXIgZG9tYWluIGV4cG9zZXMgY3B1
IHVzYWdlIHRyYWNraW5nLiIsCi0gICAgImZlYXR1cmVHdWFyZCI6ICJFTkFCTEUoUkVTT1VSQ0Vf
VVNBR0UpIiwKKyAgICAiY29uZGl0aW9uIjogIkVOQUJMRShSRVNPVVJDRV9VU0FHRSkiLAogICAg
ICJkZWJ1Z2dhYmxlVHlwZXMiOiBbInBhZ2UiLCAid2ViLXBhZ2UiXSwKICAgICAidGFyZ2V0VHlw
ZXMiOiBbInBhZ2UiXSwKICAgICAidHlwZXMiOiBbCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL0NhbnZhcy5qc29uIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9DYW52YXMuanNvbgppbmRleCBhYjU0NDQwZjA0YS4u
NjA0NjAyZTUzNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
cHJvdG9jb2wvQ2FudmFzLmpzb24KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9wcm90b2NvbC9DYW52YXMuanNvbgpAQCAtMTEsNiArMTEsNyBAQAogICAgICAgICB9LAogICAg
ICAgICB7CiAgICAgICAgICAgICAiaWQiOiAiUHJvZ3JhbUlkIiwKKyAgICAgICAgICAgICJjb25k
aXRpb24iOiAiRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKSIsCiAgICAgICAgICAgICAi
dHlwZSI6ICJzdHJpbmciLAogICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBzaGFk
ZXIgcHJvZ3JhbSBpZGVudGlmaWVyLiIKICAgICAgICAgfSwKQEAgLTIyLDExICsyMywxMyBAQAog
ICAgICAgICB9LAogICAgICAgICB7CiAgICAgICAgICAgICAiaWQiOiAiUHJvZ3JhbVR5cGUiLAor
ICAgICAgICAgICAgImNvbmRpdGlvbiI6ICJFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUp
IiwKICAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCiAgICAgICAgICAgICAiZW51bSI6IFsi
Y29tcHV0ZSIsICJyZW5kZXIiXQogICAgICAgICB9LAogICAgICAgICB7CiAgICAgICAgICAgICAi
aWQiOiAiU2hhZGVyVHlwZSIsCisgICAgICAgICAgICAiY29uZGl0aW9uIjogIkVOQUJMRShXRUJH
TCkgfHwgRU5BQkxFKFdFQkdQVSkiLAogICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKICAg
ICAgICAgICAgICJlbnVtIjogWyJjb21wdXRlIiwgImZyYWdtZW50IiwgInZlcnRleCJdCiAgICAg
ICAgIH0sCkBAIC02MSw4ICs2NCw5IEBACiAgICAgICAgIH0sCiAgICAgICAgIHsKICAgICAgICAg
ICAgICJpZCI6ICJTaGFkZXJQcm9ncmFtIiwKLSAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIs
CiAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiSW5mb3JtYXRpb24gYWJvdXQgYSBXZWJHTC9X
ZWJHTDIgc2hhZGVyIHByb2dyYW0gb3IgV2ViR1BVIHNoYWRlciBwaXBlbGluZS4iLAorICAgICAg
ICAgICAgImNvbmRpdGlvbiI6ICJFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpIiwKKyAg
ICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCiAgICAgICAgICAgICAicHJvcGVydGllcyI6IFsK
ICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInByb2dyYW1JZCIsICIkcmVmIjogIlByb2dyYW1J
ZCIgfSwKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInByb2dyYW1UeXBlIiwgIiRyZWYiOiAi
UHJvZ3JhbVR5cGUiIH0sCkBAIC0xNDcsNiArMTUxLDcgQEAKICAgICAgICAgewogICAgICAgICAg
ICAgIm5hbWUiOiAicmVxdWVzdFNoYWRlclNvdXJjZSIsCiAgICAgICAgICAgICAiZGVzY3JpcHRp
b24iOiAiUmVxdWVzdHMgdGhlIHNvdXJjZSBvZiB0aGUgc2hhZGVyIG9mIHRoZSBnaXZlbiB0eXBl
IGZyb20gdGhlIHByb2dyYW0gd2l0aCB0aGUgZ2l2ZW4gaWQuIiwKKyAgICAgICAgICAgICJjb25k
aXRpb24iOiAiRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKSIsCiAgICAgICAgICAgICAi
cGFyYW1ldGVycyI6IFsKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInByb2dyYW1JZCIsICIk
cmVmIjogIlByb2dyYW1JZCIgfSwKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNoYWRlclR5
cGUiLCAiJHJlZiI6ICJTaGFkZXJUeXBlIiB9CkBAIC0xNTgsNiArMTYzLDcgQEAKICAgICAgICAg
ewogICAgICAgICAgICAgIm5hbWUiOiAidXBkYXRlU2hhZGVyIiwKICAgICAgICAgICAgICJkZXNj
cmlwdGlvbiI6ICJDb21waWxlcyBhbmQgbGlua3MgdGhlIHNoYWRlciB3aXRoIGlkZW50aWZpZXIg
YW5kIHR5cGUgd2l0aCB0aGUgZ2l2ZW4gc291cmNlIGNvZGUuIiwKKyAgICAgICAgICAgICJjb25k
aXRpb24iOiAiRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKSIsCiAgICAgICAgICAgICAi
cGFyYW1ldGVycyI6IFsKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInByb2dyYW1JZCIsICIk
cmVmIjogIlByb2dyYW1JZCIgfSwKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNoYWRlclR5
cGUiLCAiJHJlZiI6ICJTaGFkZXJUeXBlIiB9LApAQCAtMTY3LDYgKzE3Myw3IEBACiAgICAgICAg
IHsKICAgICAgICAgICAgICJuYW1lIjogInNldFNoYWRlclByb2dyYW1EaXNhYmxlZCIsCiAgICAg
ICAgICAgICAiZGVzY3JpcHRpb24iOiAiRW5hYmxlL2Rpc2FibGUgdGhlIHZpc2liaWxpdHkgb2Yg
dGhlIGdpdmVuIHNoYWRlciBwcm9ncmFtLiIsCisgICAgICAgICAgICAiY29uZGl0aW9uIjogIkVO
QUJMRShXRUJHTCkiLAogICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCiAgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJwcm9ncmFtSWQiLCAiJHJlZiI6ICJQcm9ncmFtSWQiIH0sCiAgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJkaXNhYmxlZCIsICJ0eXBlIjogImJvb2xlYW4iIH0KQEAgLTE3
NSw2ICsxODIsNyBAQAogICAgICAgICB7CiAgICAgICAgICAgICAibmFtZSI6ICJzZXRTaGFkZXJQ
cm9ncmFtSGlnaGxpZ2h0ZWQiLAogICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkVuYWJsZS9k
aXNhYmxlIGhpZ2hsaWdodGluZyBvZiB0aGUgZ2l2ZW4gc2hhZGVyIHByb2dyYW0uIiwKKyAgICAg
ICAgICAgICJjb25kaXRpb24iOiAiRU5BQkxFKFdFQkdMKSIsCiAgICAgICAgICAgICAicGFyYW1l
dGVycyI6IFsKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInByb2dyYW1JZCIsICIkcmVmIjog
IlByb2dyYW1JZCIgfSwKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImhpZ2hsaWdodGVkIiwg
InR5cGUiOiAiYm9vbGVhbiIgfQpAQCAtMjM4LDEyICsyNDYsMTQgQEAKICAgICAgICAgfSwKICAg
ICAgICAgewogICAgICAgICAgICAgIm5hbWUiOiAicHJvZ3JhbUNyZWF0ZWQiLAorICAgICAgICAg
ICAgImNvbmRpdGlvbiI6ICJFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpIiwKICAgICAg
ICAgICAgICJwYXJhbWV0ZXJzIjogWwogICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2hhZGVy
UHJvZ3JhbSIsICIkcmVmIjogIlNoYWRlclByb2dyYW0iIH0KICAgICAgICAgICAgIF0KICAgICAg
ICAgfSwKICAgICAgICAgewogICAgICAgICAgICAgIm5hbWUiOiAicHJvZ3JhbURlbGV0ZWQiLAor
ICAgICAgICAgICAgImNvbmRpdGlvbiI6ICJFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUp
IiwKICAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwogICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAicHJvZ3JhbUlkIiwgIiRyZWYiOiAiUHJvZ3JhbUlkIiB9CiAgICAgICAgICAgICBdCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL0RPTS5qc29u
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9ET00uanNvbgppbmRl
eCAzOGNiNDhiZWRmMi4uM2FhNGEyOGNjMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvRE9NLmpzb24KKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9wcm90b2NvbC9ET00uanNvbgpAQCAtMzk5LDYgKzM5OSwxNiBAQAogICAg
ICAgICB7CiAgICAgICAgICAgICAibmFtZSI6ICJzZXRJbnNwZWN0TW9kZUVuYWJsZWQiLAogICAg
ICAgICAgICAgImRlc2NyaXB0aW9uIjogIkVudGVycyB0aGUgJ2luc3BlY3QnIG1vZGUuIEluIHRo
aXMgbW9kZSwgZWxlbWVudHMgdGhhdCB1c2VyIGlzIGhvdmVyaW5nIG92ZXIgYXJlIGhpZ2hsaWdo
dGVkLiBCYWNrZW5kIHRoZW4gZ2VuZXJhdGVzICdpbnNwZWN0JyBjb21tYW5kIHVwb24gZWxlbWVu
dCBzZWxlY3Rpb24uIiwKKyAgICAgICAgICAgICJjb25kaXRpb24iOiAiUExBVEZPUk0oSU9TX0ZB
TUlMWSkiLAorICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJlbmFibGVkIiwgInR5cGUiOiAiYm9vbGVhbiIsICJkZXNjcmlwdGlvbiI6ICJUcnVl
IHRvIGVuYWJsZSBpbnNwZWN0aW9uIG1vZGUsIGZhbHNlIHRvIGRpc2FibGUgaXQuIiB9LAorICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAiaGlnaGxpZ2h0Q29uZmlnIiwgIiRyZWYiOiAiSGlnaGxp
Z2h0Q29uZmlnIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIkEgZGVzY3JpcHRv
ciBmb3IgdGhlIGhpZ2hsaWdodCBhcHBlYXJhbmNlIG9mIGhvdmVyZWQtb3ZlciBub2Rlcy4gTWF5
IGJlIG9taXR0ZWQgaWYgPGNvZGU+ZW5hYmxlZCA9PSBmYWxzZTwvY29kZT4uIiB9CisgICAgICAg
ICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogInNldElu
c3BlY3RNb2RlRW5hYmxlZCIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRW50ZXJzIHRo
ZSAnaW5zcGVjdCcgbW9kZS4gSW4gdGhpcyBtb2RlLCBlbGVtZW50cyB0aGF0IHVzZXIgaXMgaG92
ZXJpbmcgb3ZlciBhcmUgaGlnaGxpZ2h0ZWQuIEJhY2tlbmQgdGhlbiBnZW5lcmF0ZXMgJ2luc3Bl
Y3QnIGNvbW1hbmQgdXBvbiBlbGVtZW50IHNlbGVjdGlvbi4iLAorICAgICAgICAgICAgImNvbmRp
dGlvbiI6ICIhUExBVEZPUk0oSU9TX0ZBTUlMWSkiLAogICAgICAgICAgICAgInBhcmFtZXRlcnMi
OiBbCiAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJlbmFibGVkIiwgInR5cGUiOiAiYm9vbGVh
biIsICJkZXNjcmlwdGlvbiI6ICJUcnVlIHRvIGVuYWJsZSBpbnNwZWN0aW9uIG1vZGUsIGZhbHNl
IHRvIGRpc2FibGUgaXQuIiB9LAogICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiaGlnaGxpZ2h0
Q29uZmlnIiwgIiRyZWYiOiAiSGlnaGxpZ2h0Q29uZmlnIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRl
c2NyaXB0aW9uIjogIkEgZGVzY3JpcHRvciBmb3IgdGhlIGhpZ2hsaWdodCBhcHBlYXJhbmNlIG9m
IGhvdmVyZWQtb3ZlciBub2Rlcy4gTWF5IGJlIG9taXR0ZWQgaWYgPGNvZGU+ZW5hYmxlZCA9PSBm
YWxzZTwvY29kZT4uIiB9LApAQCAtNjg4LDYgKzY5OCw3IEBACiAgICAgICAgIHsKICAgICAgICAg
ICAgICJuYW1lIjogInBvd2VyRWZmaWNpZW50UGxheWJhY2tTdGF0ZUNoYW5nZWQiLAogICAgICAg
ICAgICAgImRlc2NyaXB0aW9uIjogIkNhbGxlZCB3aGVuIGFuIGVsZW1lbnQgZW50ZXJzL2V4aXRz
IGEgcG93ZXIgZWZmaWNpZW50IHBsYXliYWNrIHN0YXRlLiIsCisgICAgICAgICAgICAiY29uZGl0
aW9uIjogIkVOQUJMRShWSURFTykiLAogICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCiAgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJub2RlSWQiLCAiJHJlZiI6ICJOb2RlSWQiIH0sCiAgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAiJHJlZiI6ICJOZXR3b3JrLlRpbWVz
dGFtcCIgfSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJv
dG9jb2wvSW5kZXhlZERCLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3By
b3RvY29sL0luZGV4ZWREQi5qc29uCmluZGV4IDlkMjMwMDg5MzA3Li44NDNkMWE2ZGNiNCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9JbmRleGVk
REIuanNvbgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL0lu
ZGV4ZWREQi5qc29uCkBAIC0xLDYgKzEsNiBAQAogewogICAgICJkb21haW4iOiAiSW5kZXhlZERC
IiwKLSAgICAiZmVhdHVyZUd1YXJkIjogIkVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKSIsCisgICAg
ImNvbmRpdGlvbiI6ICJFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkiLAogICAgICJkZWJ1Z2dhYmxl
VHlwZXMiOiBbInBhZ2UiLCAid2ViLXBhZ2UiXSwKICAgICAidGFyZ2V0VHlwZXMiOiBbInBhZ2Ui
XSwKICAgICAidHlwZXMiOiBbCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3Byb3RvY29sL0luc3BlY3Rvci5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9wcm90b2NvbC9JbnNwZWN0b3IuanNvbgppbmRleCAyYmI4ZDYyODU1YS4uZmY5MmYz
ZTcwYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9j
b2wvSW5zcGVjdG9yLmpzb24KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9w
cm90b2NvbC9JbnNwZWN0b3IuanNvbgpAQCAtMzMsNiArMzMsNyBAQAogICAgICAgICB7CiAgICAg
ICAgICAgICAibmFtZSI6ICJhY3RpdmF0ZUV4dHJhRG9tYWlucyIsCiAgICAgICAgICAgICAiZGVz
Y3JpcHRpb24iOiAiRmlyZWQgd2hlbiB0aGUgYmFja2VuZCBoYXMgYWx0ZXJuYXRlIGRvbWFpbnMg
dGhhdCBuZWVkIHRvIGJlIGFjdGl2YXRlZC4iLAorICAgICAgICAgICAgImNvbmRpdGlvbiI6ICJF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykiLAogICAgICAgICAgICAgInBh
cmFtZXRlcnMiOiBbCiAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkb21haW5zIiwgInR5cGUi
OiAiYXJyYXkiLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSwgImRlc2NyaXB0aW9uIjog
IkRvbWFpbiBuYW1lcyB0aGF0IG5lZWQgYWN0aXZhdGlvbiIgfQogICAgICAgICAgICAgXQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9NZW1vcnku
anNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvTWVtb3J5Lmpz
b24KaW5kZXggMGMzZDkxNDM4NzEuLmY1YzlkYTFiMGYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL01lbW9yeS5qc29uCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvTWVtb3J5Lmpzb24KQEAgLTEsNyArMSw3
IEBACiB7CiAgICAgImRvbWFpbiI6ICJNZW1vcnkiLAogICAgICJkZXNjcmlwdGlvbiI6ICJNZW1v
cnkgZG9tYWluIGV4cG9zZXMgcGFnZSBtZW1vcnkgdHJhY2tpbmcuIiwKLSAgICAiZmVhdHVyZUd1
YXJkIjogIkVOQUJMRShSRVNPVVJDRV9VU0FHRSkiLAorICAgICJjb25kaXRpb24iOiAiRU5BQkxF
KFJFU09VUkNFX1VTQUdFKSIsCiAgICAgImRlYnVnZ2FibGVUeXBlcyI6IFsicGFnZSIsICJ3ZWIt
cGFnZSJdLAogICAgICJ0YXJnZXRUeXBlcyI6IFsicGFnZSJdLAogICAgICJ0eXBlcyI6IFsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvUGFnZS5q
c29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9QYWdlLmpzb24K
aW5kZXggZDI3NTEyYTRmMDAuLmIyNTVlMDJjMzkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL1BhZ2UuanNvbgorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL1BhZ2UuanNvbgpAQCAtNDUsNiArNDUsNyBAQAog
ICAgICAgICB7CiAgICAgICAgICAgICAiaWQiOiAiQXBwZWFyYW5jZSIsCiAgICAgICAgICAgICAi
dHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgImNvbmRpdGlvbiI6ICJIQVZFKERBUktfTU9E
RV9DU1MpIiwKICAgICAgICAgICAgICJlbnVtIjogWyJMaWdodCIsICJEYXJrIl0sCiAgICAgICAg
ICAgICAiZGVzY3JpcHRpb24iOiAiUGFnZSBhcHBlYXJhbmNlIG5hbWUuIgogICAgICAgICB9LApA
QCAtMjI5LDYgKzIzMCw3IEBACiAgICAgICAgIHsKICAgICAgICAgICAgICJuYW1lIjogInNldFNo
b3dSdWxlcnMiLAogICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlJlcXVlc3RzIHRoYXQgYmFj
a2VuZCBkcmF3IHJ1bGVycyBpbiB0aGUgaW5zcGVjdG9yIG92ZXJsYXkiLAorICAgICAgICAgICAg
ImNvbmRpdGlvbiI6ICIhUExBVEZPUk0oSU9TX0ZBTUlMWSkiLAogICAgICAgICAgICAgInBhcmFt
ZXRlcnMiOiBbCiAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJyZXN1bHQiLCAidHlwZSI6ICJi
b29sZWFuIiwgImRlc2NyaXB0aW9uIjogIlRydWUgZm9yIHNob3dpbmcgcnVsZXJzIiB9CiAgICAg
ICAgICAgICBdCkBAIC0yNTAsNiArMjUyLDcgQEAKICAgICAgICAgewogICAgICAgICAgICAgIm5h
bWUiOiAic2V0Rm9yY2VkQXBwZWFyYW5jZSIsCiAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAi
Rm9yY2VzIHRoZSBnaXZlbiBhcHBlYXJhbmNlIGZvciB0aGUgcGFnZS4iLAorICAgICAgICAgICAg
ImNvbmRpdGlvbiI6ICJIQVZFKERBUktfTU9ERV9DU1MpIiwKICAgICAgICAgICAgICJwYXJhbWV0
ZXJzIjogWwogICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYXBwZWFyYW5jZSIsICIkcmVmIjog
IkFwcGVhcmFuY2UiLCAiZGVzY3JpcHRpb24iOiAiQXBwZWFyYW5jZSBuYW1lIHRvIGZvcmNlLiBF
bXB0eSBzdHJpbmcgZGlzYWJsZXMgdGhlIG92ZXJyaWRlLiIgfQogICAgICAgICAgICAgXQpAQCAt
MjgxLDYgKzI4NCw3IEBACiAgICAgICAgIHsKICAgICAgICAgICAgICJuYW1lIjogImFyY2hpdmUi
LAogICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkdyYWIgYW4gYXJjaGl2ZSBvZiB0aGUgcGFn
ZS4iLAorICAgICAgICAgICAgImNvbmRpdGlvbiI6ICJFTkFCTEUoV0VCX0FSQ0hJVkUpICYmIFVT
RShDRikiLAogICAgICAgICAgICAgInJldHVybnMiOiBbCiAgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJkYXRhIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIkJhc2U2NC1lbmNv
ZGVkIHdlYiBhcmNoaXZlLiIgfQogICAgICAgICAgICAgXQpAQCAtMzQ1LDYgKzM0OSw3IEBACiAg
ICAgICAgIHsKICAgICAgICAgICAgICJuYW1lIjogImRlZmF1bHRBcHBlYXJhbmNlRGlkQ2hhbmdl
IiwKICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJGaXJlZCB3aGVuIHBhZ2UncyBkZWZhdWx0
IGFwcGVhcmFuY2UgY2hhbmdlcywgZXZlbiBpZiB0aGVyZSBpcyBhIGZvcmNlZCBhcHBlYXJhbmNl
LiIsCisgICAgICAgICAgICAiY29uZGl0aW9uIjogIkhBVkUoREFSS19NT0RFX0NTUykiLAogICAg
ICAgICAgICAgInBhcmFtZXRlcnMiOiBbCiAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJhcHBl
YXJhbmNlIiwgIiRyZWYiOiAiQXBwZWFyYW5jZSIsICJkZXNjcmlwdGlvbiI6ICJOYW1lIG9mIHRo
ZSBhcHBlYXJhbmNlIHRoYXQgaXMgYWN0aXZlIChub3QgY29uc2lkZXJpbmcgYW55IGZvcmNlZCBh
cHBlYXJhbmNlLikiIH0KICAgICAgICAgICAgIF0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvU2VydmljZVdvcmtlci5qc29uIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9TZXJ2aWNlV29ya2VyLmpzb24KaW5kZXgg
OGFjM2Q0ZjdkNmIuLjBjNTAzMGZiNjg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3Byb3RvY29sL1NlcnZpY2VXb3JrZXIuanNvbgorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL1NlcnZpY2VXb3JrZXIuanNvbgpAQCAtMSw2
ICsxLDcgQEAKIHsKICAgICAiZG9tYWluIjogIlNlcnZpY2VXb3JrZXIiLAogICAgICJkZXNjcmlw
dGlvbiI6ICJBY3Rpb25zIGFuZCBldmVudHMgcmVsYXRlZCB0byB0aGUgaW5zcGVjdGVkIHNlcnZp
Y2Ugd29ya2VyLiIsCisgICAgImNvbmRpdGlvbiI6ICJFTkFCTEUoU0VSVklDRV9XT1JLRVIpIiwK
ICAgICAiZGVidWdnYWJsZVR5cGVzIjogWyJzZXJ2aWNlLXdvcmtlciJdLAogICAgICJ0YXJnZXRU
eXBlcyI6IFsic2VydmljZS13b3JrZXIiXSwKICAgICAidHlwZXMiOiBbCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJh
dG9yX3RlbXBsYXRlcy5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5CmluZGV4IDk2YjU1ZTQxNjJjLi5k
MGM3YmU2ZDQ5MSAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vY3BwX2dlbmVyYXRvcl90ZW1w
bGF0ZXMucHkKQEAgLTEwOCw3ICsxMDgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRBbHRlcm5h
dGVEaXNwYXRjaGVyKEFsdGVybmF0ZSR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlciogYWx0
ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNw
YXRjaGVyOyB9CiBwcml2YXRlOgogICAgIEFsdGVybmF0ZSR7ZG9tYWluTmFtZX1CYWNrZW5kRGlz
cGF0Y2hlciogbV9hbHRlcm5hdGVEaXNwYXRjaGVyIHsgbnVsbHB0ciB9OwotI2VuZGlmIiIiKQor
I2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKSIiIikKIAog
ICAgIEJhY2tlbmREaXNwYXRjaGVySGVhZGVyQXN5bmNDb21tYW5kRGVjbGFyYXRpb24gPSAoCiAg
ICAgIiIiICAgICR7Y2xhc3NBbmRFeHBvcnRNYWNyb30gJHtjYWxsYmFja05hbWV9IDogcHVibGlj
IEJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UgewpAQCAtMTI3LDggKzEyNyw4IEBAIHBy
aXZhdGU6CiAgICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRlcnMpOwog
CiAke2Rpc3BhdGNoQ2FzZXN9Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwg
Iicke2RvbWFpbk5hbWV9LiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CisKKyAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVy
OjpNZXRob2ROb3RGb3VuZCwgIicke2RvbWFpbk5hbWV9LiIgKyBtZXRob2QgKyAiJyB3YXMgbm90
IGZvdW5kIik7CiB9IiIiKQogCiAgICAgQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkxh
cmdlU3dpdGNoID0gKApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNo
ZXJfaGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vZ2VuZXJhdGVfY3BwX2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5
CmluZGV4IGU2Mjc4ODBlMTMzLi5kY2QwYmYzNDdhZiAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2FsdGVybmF0
ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9hbHRlcm5hdGVfYmFja2Vu
ZF9kaXNwYXRjaGVyX2hlYWRlci5weQpAQCAtODcsNyArODcsNyBAQCBjbGFzcyBDcHBBbHRlcm5h
dGVCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAg
ICAgICAgJ2NvbW1hbmREZWNsYXJhdGlvbnMnOiAnXG4nLmpvaW4oY29tbWFuZF9kZWNsYXJhdGlv
bnMpLAogICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zv
cl9kb21haW4oZG9tYWluLCBUZW1wbGF0ZShDcHBUZW1wbGF0ZXMuQWx0ZXJuYXRlQmFja2VuZERp
c3BhdGNoZXJIZWFkZXJEb21haW5IYW5kbGVySW50ZXJmYWNlRGVjbGFyYXRpb24pLnN1YnN0aXR1
dGUoTm9uZSwgKipoYW5kbGVyX2FyZ3MpKQorICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhf
Z3VhcmRfZm9yX2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9uLCBUZW1wbGF0ZShDcHBUZW1wbGF0
ZXMuQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJIZWFkZXJEb21haW5IYW5kbGVySW50ZXJmYWNl
RGVjbGFyYXRpb24pLnN1YnN0aXR1dGUoTm9uZSwgKipoYW5kbGVyX2FyZ3MpKQogCiAgICAgZGVm
IF9nZW5lcmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKHNlbGYsIGNvbW1hbmQp
OgogICAgICAgICBsaW5lcyA9IFtdCkBAIC0xMDAsNCArMTAwLDQgQEAgY2xhc3MgQ3BwQWx0ZXJu
YXRlQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAg
ICAgICAgICdwYXJhbWV0ZXJzJzogJywgJy5qb2luKHBhcmFtZXRlcnMpLAogICAgICAgICB9CiAg
ICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHZpcnR1YWwgdm9pZCAlKGNvbW1hbmROYW1lKXMoJShw
YXJhbWV0ZXJzKXMpID0gMDsnICUgY29tbWFuZF9hcmdzKQotICAgICAgICByZXR1cm4gJ1xuJy5q
b2luKGxpbmVzKQorICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRp
dGlvbihjb21tYW5kLmNvbmRpdGlvbiwgJ1xuJy5qb2luKGxpbmVzKSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2Nw
cF9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9o
ZWFkZXIucHkKaW5kZXggZTNmZTRlMTAwNDIuLjEwZDhmMTRiZDVmIDEwMDc1NQotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBf
YmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVy
X2hlYWRlci5weQpAQCAtOTEsNyArOTEsNyBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hlckhl
YWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICBsaW5lcyA9IFtdCiAgICAgICAg
IGxpbmVzLmFwcGVuZCgnI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KScpCiAgICAgICAgIGZvciBkb21haW4gaW4gZG9tYWluczoKLSAgICAgICAgICAgIGxpbmVzLmFw
cGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgJ2NsYXNzIEFsdGVy
bmF0ZSVzQmFja2VuZERpc3BhdGNoZXI7JyAlIGRvbWFpbi5kb21haW5fbmFtZSkpCisgICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihkb21h
aW4uY29uZGl0aW9uLCAnY2xhc3MgQWx0ZXJuYXRlJXNCYWNrZW5kRGlzcGF0Y2hlcjsnICUgZG9t
YWluLmRvbWFpbl9uYW1lKSkKICAgICAgICAgbGluZXMuYXBwZW5kKCcjZW5kaWYgLy8gRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpJykKICAgICAgICAgcmV0dXJuICdcbicu
am9pbihsaW5lcykKIApAQCAtMTEzLDcgKzExMyw3IEBAIGNsYXNzIENwcEJhY2tlbmREaXNwYXRj
aGVySGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgICAgICAnY29tbWFuZERl
Y2xhcmF0aW9ucyc6ICJcbiIuam9pbihjb21tYW5kX2RlY2xhcmF0aW9ucykKICAgICAgICAgfQog
Ci0gICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwg
VGVtcGxhdGUoQ3BwVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVySGVhZGVyRG9tYWluSGFuZGxl
ckRlY2xhcmF0aW9uKS5zdWJzdGl0dXRlKE5vbmUsICoqaGFuZGxlcl9hcmdzKSkKKyAgICAgICAg
cmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZG9tYWluLmNvbmRpdGlv
biwgVGVtcGxhdGUoQ3BwVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVySGVhZGVyRG9tYWluSGFu
ZGxlckRlY2xhcmF0aW9uKS5zdWJzdGl0dXRlKE5vbmUsICoqaGFuZGxlcl9hcmdzKSkKIAogICAg
IGRlZiBfZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX3BhcmFtZXRlcihzZWxmLCBwYXJhbWV0
ZXIsIGNvbW1hbmQpOgogICAgICAgICBlbnVtX2FyZ3MgPSB7CkBAIC0xNjEsNyArMTYxLDcgQEAg
Y2xhc3MgQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToK
ICAgICAgICAgICAgICdwYXJhbWV0ZXJzJzogIiwgIi5qb2luKHBhcmFtZXRlcnMpCiAgICAgICAg
IH0KICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgdmlydHVhbCB2b2lkICUoY29tbWFuZE5hbWUp
cyglKHBhcmFtZXRlcnMpcykgPSAwOycgJSBjb21tYW5kX2FyZ3MpCi0gICAgICAgIHJldHVybiAn
XG4nLmpvaW4obGluZXMpCisgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3Jf
Y29uZGl0aW9uKGNvbW1hbmQuY29uZGl0aW9uLCAnXG4nLmpvaW4obGluZXMpKQogCiAgICAgZGVm
IF9nZW5lcmF0ZV9hc3luY19oYW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKHNlbGYsIGNv
bW1hbmQpOgogICAgICAgICBjYWxsYmFja05hbWUgPSAiJXNDYWxsYmFjayIgJSB1Y2ZpcnN0KGNv
bW1hbmQuY29tbWFuZF9uYW1lKQpAQCAtMTkyLDcgKzE5Miw3IEBAIGNsYXNzIENwcEJhY2tlbmRE
aXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgICAgICAnb3V0
UGFyYW1ldGVycyc6ICIsICIuam9pbihvdXRfcGFyYW1ldGVycyksCiAgICAgICAgIH0KIAotICAg
ICAgICByZXR1cm4gVGVtcGxhdGUoQ3BwVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVySGVhZGVy
QXN5bmNDb21tYW5kRGVjbGFyYXRpb24pLnN1YnN0aXR1dGUoTm9uZSwgKipjb21tYW5kX2FyZ3Mp
CisgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGNvbW1h
bmQuY29uZGl0aW9uLCBUZW1wbGF0ZShDcHBUZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNoZXJIZWFk
ZXJBc3luY0NvbW1hbmREZWNsYXJhdGlvbikuc3Vic3RpdHV0ZShOb25lLCAqKmNvbW1hbmRfYXJn
cykpCiAKICAgICBkZWYgX2dlbmVyYXRlX2Rpc3BhdGNoZXJfZGVjbGFyYXRpb25zX2Zvcl9kb21h
aW4oc2VsZiwgZG9tYWluKToKICAgICAgICAgY2xhc3NDb21wb25lbnRzID0gWydjbGFzcyddCkBA
IC0yMjAsNyArMjIwLDcgQEAgY2xhc3MgQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0
b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgICAgICdjb21tYW5kRGVjbGFyYXRpb25zJzogIlxu
Ii5qb2luKGRlY2xhcmF0aW9ucykKICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiBzZWxmLndy
YXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgVGVtcGxhdGUoQ3BwVGVtcGxhdGVzLkJh
Y2tlbmREaXNwYXRjaGVySGVhZGVyRG9tYWluRGlzcGF0Y2hlckRlY2xhcmF0aW9uKS5zdWJzdGl0
dXRlKE5vbmUsICoqaGFuZGxlcl9hcmdzKSkKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRo
X2d1YXJkX2Zvcl9jb25kaXRpb24oZG9tYWluLmNvbmRpdGlvbiwgVGVtcGxhdGUoQ3BwVGVtcGxh
dGVzLkJhY2tlbmREaXNwYXRjaGVySGVhZGVyRG9tYWluRGlzcGF0Y2hlckRlY2xhcmF0aW9uKS5z
dWJzdGl0dXRlKE5vbmUsICoqaGFuZGxlcl9hcmdzKSkKIAogICAgIGRlZiBfZ2VuZXJhdGVfZGlz
cGF0Y2hlcl9kZWNsYXJhdGlvbl9mb3JfY29tbWFuZChzZWxmLCBjb21tYW5kKToKLSAgICAgICAg
cmV0dXJuICIgICAgdm9pZCAlcyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4m
JiBwYXJhbWV0ZXJzKTsiICUgY29tbWFuZC5jb21tYW5kX25hbWUKKyAgICAgICAgcmV0dXJuIHNl
bGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oY29tbWFuZC5jb25kaXRpb24sICIgICAg
dm9pZCAlcyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJz
KTsiICUgY29tbWFuZC5jb21tYW5kX25hbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNw
YXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1l
bnRhdGlvbi5weQppbmRleCBhMTU5NjFhNjQ3NC4uZGFmMTljOTUwZmIgMTAwNzU1Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2Nw
cF9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRf
ZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQpAQCAtNjAsNyArNjAsNyBAQCBjbGFzcyBDcHBC
YWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAg
ICAgICAgICAgICBzZWNvbmRhcnlfaW5jbHVkZXMuYXBwZW5kKCcnKQogICAgICAgICAgICAgc2Vj
b25kYXJ5X2luY2x1ZGVzLmFwcGVuZCgnI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKScpCiAgICAgICAgICAgICBzZWNvbmRhcnlfaW5jbHVkZXMuYXBwZW5kKCcjaW5j
bHVkZSAiJXNBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCInICUgc2VsZi5wcm90b2NvbF9u
YW1lKCkpCi0gICAgICAgICAgICBzZWNvbmRhcnlfaW5jbHVkZXMuYXBwZW5kKCcjZW5kaWYnKQor
ICAgICAgICAgICAgc2Vjb25kYXJ5X2luY2x1ZGVzLmFwcGVuZCgnI2VuZGlmIC8vIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKScpCiAKICAgICAgICAgaGVhZGVyX2FyZ3Mg
PSB7CiAgICAgICAgICAgICAncHJpbWFyeUluY2x1ZGUnOiAnIiVzQmFja2VuZERpc3BhdGNoZXJz
LmgiJyAlIHNlbGYucHJvdG9jb2xfbmFtZSgpLApAQCAtOTMsNyArOTMsNyBAQCBjbGFzcyBDcHBC
YWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAg
ICAgICAgICAgICAnZG9tYWluTmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZQogICAgICAgICB9CiAg
ICAgICAgIGRlc3RydWN0b3IgPSAnJShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXI6On4lKGRvbWFpbk5hbWUpc0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfScgJSBkZXN0
cnVjdG9yX2FyZ3MKLSAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21h
aW4oZG9tYWluLCBkZXN0cnVjdG9yKQorICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3Vh
cmRfZm9yX2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9uLCBkZXN0cnVjdG9yKQogCiAgICAgZGVm
IF9nZW5lcmF0ZV9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uc19mb3JfZG9tYWluKHNlbGYsIGRv
bWFpbik6CiAgICAgICAgIGltcGxlbWVudGF0aW9ucyA9IFtdCkBAIC0xMTUsMTcgKzExNSwyOSBA
QCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKENwcEdl
bmVyYXRvcik6CiAgICAgICAgICAgICAgICAgaW1wbGVtZW50YXRpb25zLmFwcGVuZChzZWxmLl9n
ZW5lcmF0ZV9hc3luY19kaXNwYXRjaGVyX2NsYXNzX2Zvcl9kb21haW4oY29tbWFuZCwgZG9tYWlu
KSkKICAgICAgICAgICAgIGltcGxlbWVudGF0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfZGlz
cGF0Y2hlcl9pbXBsZW1lbnRhdGlvbl9mb3JfY29tbWFuZChjb21tYW5kLCBkb21haW4pKQogCi0g
ICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgJ1xu
XG4nLmpvaW4oaW1wbGVtZW50YXRpb25zKSkKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRo
X2d1YXJkX2Zvcl9jb25kaXRpb24oZG9tYWluLmNvbmRpdGlvbiwgJ1xuXG4nLmpvaW4oaW1wbGVt
ZW50YXRpb25zKSkKIAogICAgIGRlZiBfZ2VuZXJhdGVfc21hbGxfZGlzcGF0Y2hlcl9zd2l0Y2hf
aW1wbGVtZW50YXRpb25fZm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgogICAgICAgICBjb21tYW5k
cyA9IHNlbGYuY29tbWFuZHNfZm9yX2RvbWFpbihkb21haW4pCiAKICAgICAgICAgY2FzZXMgPSBb
XQotICAgICAgICBjYXNlcy5hcHBlbmQoJyAgICBpZiAobWV0aG9kID09ICIlcyIpJyAlIGNvbW1h
bmRzWzBdLmNvbW1hbmRfbmFtZSkKLSAgICAgICAgY2FzZXMuYXBwZW5kKCcgICAgICAgICVzKHJl
cXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7JyAlIGNvbW1hbmRzWzBdLmNvbW1hbmRfbmFt
ZSkKKworICAgICAgICBmaXJzdF9jb21tYW5kX3N0cmluZyA9ICJcbiIuam9pbihbCisgICAgICAg
ICAgICAnICAgIGlmIChtZXRob2QgPT0gIiVzIikgeycgJSBjb21tYW5kc1swXS5jb21tYW5kX25h
bWUsCisgICAgICAgICAgICAnICAgICAgICAlcyhyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVy
cykpOycgJSBjb21tYW5kc1swXS5jb21tYW5kX25hbWUsCisgICAgICAgICAgICAnICAgICAgICBy
ZXR1cm47JywKKyAgICAgICAgICAgICcgICAgfScsCisgICAgICAgIF0pCisgICAgICAgIGNhc2Vz
LmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGNvbW1hbmRzWzBdLmNv
bmRpdGlvbiwgZmlyc3RfY29tbWFuZF9zdHJpbmcpKQorCiAgICAgICAgIGZvciBjb21tYW5kIGlu
IGNvbW1hbmRzWzE6XToKLSAgICAgICAgICAgIGNhc2VzLmFwcGVuZCgnICAgIGVsc2UgaWYgKG1l
dGhvZCA9PSAiJXMiKScgJSBjb21tYW5kLmNvbW1hbmRfbmFtZSkKLSAgICAgICAgICAgIGNhc2Vz
LmFwcGVuZCgnICAgICAgICAlcyhyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOycgJSBj
b21tYW5kLmNvbW1hbmRfbmFtZSkKKyAgICAgICAgICAgIGFkZGl0aW9uYWxfY29tbWFuZF9zdHJp
bmcgPSAiXG4iLmpvaW4oWworICAgICAgICAgICAgICAgICcgICAgaWYgKG1ldGhvZCA9PSAiJXMi
KSB7JyAlIGNvbW1hbmQuY29tbWFuZF9uYW1lLAorICAgICAgICAgICAgICAgICcgICAgICAgICVz
KHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7JyAlIGNvbW1hbmQuY29tbWFuZF9uYW1l
LAorICAgICAgICAgICAgICAgICcgICAgICAgIHJldHVybjsnLAorICAgICAgICAgICAgICAgICcg
ICAgfScsCisgICAgICAgICAgICBdKQorICAgICAgICAgICAgY2FzZXMuYXBwZW5kKHNlbGYud3Jh
cF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oY29tbWFuZC5jb25kaXRpb24sIGFkZGl0aW9uYWxf
Y29tbWFuZF9zdHJpbmcpKQogCiAgICAgICAgIHN3aXRjaF9hcmdzID0gewogICAgICAgICAgICAg
J2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUsCkBAIC0xNDMsNyArMTU1LDcgQEAgY2xh
c3MgQ3BwQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihDcHBHZW5lcmF0
b3IpOgogICAgICAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLAog
ICAgICAgICAgICAgICAgICdjb21tYW5kTmFtZSc6IGNvbW1hbmQuY29tbWFuZF9uYW1lCiAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlcy5hcHBlbmQoJyAgICAgICAgICAgIHsgIiUoY29t
bWFuZE5hbWUpcyIsICYlKGRvbWFpbk5hbWUpc0JhY2tlbmREaXNwYXRjaGVyOjolKGNvbW1hbmRO
YW1lKXMgfSwnICUgYXJncykKKyAgICAgICAgICAgIGNhc2VzLmFwcGVuZChzZWxmLndyYXBfd2l0
aF9ndWFyZF9mb3JfY29uZGl0aW9uKGNvbW1hbmQuY29uZGl0aW9uLCAnICAgICAgICAgICAgeyAi
JShjb21tYW5kTmFtZSlzIiwgJiUoZG9tYWluTmFtZSlzQmFja2VuZERpc3BhdGNoZXI6OiUoY29t
bWFuZE5hbWUpcyB9LCcgJSBhcmdzKSkKIAogICAgICAgICBzd2l0Y2hfYXJncyA9IHsKICAgICAg
ICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLApAQCAtMTg1LDcgKzE5Nyw3
IEBAIGNsYXNzIENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoQ3Bw
R2VuZXJhdG9yKToKICAgICAgICAgICAgICdmb3JtYWxQYXJhbWV0ZXJzJzogIiwgIi5qb2luKGZv
cm1hbF9wYXJhbWV0ZXJzKSwKICAgICAgICAgICAgICdvdXRQYXJhbWV0ZXJBc3NpZ25tZW50cyc6
ICJcbiIuam9pbihvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzKQogICAgICAgICB9Ci0gICAgICAg
IHJldHVybiBUZW1wbGF0ZShDcHBUZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRh
dGlvbkFzeW5jQ29tbWFuZCkuc3Vic3RpdHV0ZShOb25lLCAqKmFzeW5jX2FyZ3MpCisgICAgICAg
IHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGNvbW1hbmQuY29uZGl0
aW9uLCBUZW1wbGF0ZShDcHBUZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlv
bkFzeW5jQ29tbWFuZCkuc3Vic3RpdHV0ZShOb25lLCAqKmFzeW5jX2FyZ3MpKQogCiAgICAgZGVm
IF9nZW5lcmF0ZV9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uX2Zvcl9jb21tYW5kKHNlbGYsIGNv
bW1hbmQsIGRvbWFpbik6CiAgICAgICAgIGluX3BhcmFtZXRlcl9kZWNsYXJhdGlvbnMgPSBbXQpA
QCAtMzA0LDcgKzMxNiw3IEBAIGNsYXNzIENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRp
b25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAg
ICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPiUoY29tbWFuZE5hbWUpcyglKGFsdGVybmF0ZUlu
dm9jYXRpb25QYXJhbWV0ZXJzKXMpOycgJSBjb21tYW5kX2FyZ3MpCiAgICAgICAgICAgICBsaW5l
cy5hcHBlbmQoJyAgICAgICAgcmV0dXJuOycpCiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAg
ICB9JykKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnI2VuZGlmJykKKyAgICAgICAgICAgIGxp
bmVzLmFwcGVuZCgnI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENI
RVJTKScpCiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycpCiAKICAgICAgICAgaWYgY29tbWFu
ZC5pc19hc3luYzoKQEAgLTMzNCw0ICszNDYsNCBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hl
ckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgICAgICBsaW5l
cy5hcHBlbmQoJyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJv
cihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsnKQogCiAg
ICAgICAgIGxpbmVzLmFwcGVuZCgnfScpCi0gICAgICAgIHJldHVybiAiXG4iLmpvaW4obGluZXMp
CisgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGNvbW1h
bmQuY29uZGl0aW9uLCAiXG4iLmpvaW4obGluZXMpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5k
X2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5
CmluZGV4IDVjZjc0Nzg1NDMzLi4xMTlkMjNjMzhjZCAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5k
X2Rpc3BhdGNoZXJfaGVhZGVyLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRl
ci5weQpAQCAtMTExLDcgKzExMSw3IEBAIGNsYXNzIENwcEZyb250ZW5kRGlzcGF0Y2hlckhlYWRl
ckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICAgICAgJ2V2ZW50RGVjbGFyYXRpb25z
JzogIlxuIi5qb2luKGV2ZW50X2RlY2xhcmF0aW9ucykKICAgICAgICAgfQogCi0gICAgICAgIHJl
dHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgVGVtcGxhdGUoQ3Bw
VGVtcGxhdGVzLkZyb250ZW5kRGlzcGF0Y2hlckRvbWFpbkRpc3BhdGNoZXJEZWNsYXJhdGlvbiku
c3Vic3RpdHV0ZShOb25lLCAqKmhhbmRsZXJfYXJncykpCisgICAgICAgIHJldHVybiBzZWxmLndy
YXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRvbWFpbi5jb25kaXRpb24sIFRlbXBsYXRlKENw
cFRlbXBsYXRlcy5Gcm9udGVuZERpc3BhdGNoZXJEb21haW5EaXNwYXRjaGVyRGVjbGFyYXRpb24p
LnN1YnN0aXR1dGUoTm9uZSwgKipoYW5kbGVyX2FyZ3MpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9k
aXNwYXRjaGVyX2RlY2xhcmF0aW9uX2Zvcl9ldmVudChzZWxmLCBldmVudCwgZG9tYWluLCB1c2Vk
X2VudW1fbmFtZXMpOgogICAgICAgICBmb3JtYWxfcGFyYW1ldGVycyA9IFtdCkBAIC0xMjMsNCAr
MTIzLDQgQEAgY2xhc3MgQ3BwRnJvbnRlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKENwcEdl
bmVyYXRvcik6CiAgICAgICAgICAgICAgICAgdXNlZF9lbnVtX25hbWVzLmFkZChwYXJhbWV0ZXIu
cGFyYW1ldGVyX25hbWUpCiAKICAgICAgICAgbGluZXMuYXBwZW5kKCIgICAgdm9pZCAlcyglcyk7
IiAlIChldmVudC5ldmVudF9uYW1lLCAiLCAiLmpvaW4oZm9ybWFsX3BhcmFtZXRlcnMpKSkKLSAg
ICAgICAgcmV0dXJuICJcbiIuam9pbihsaW5lcykKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93
aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZXZlbnQuY29uZGl0aW9uLCAiXG4iLmpvaW4obGluZXMp
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQppbmRleCA5MDRkMjI3
YTZlOS4uNjZkYzZlMTg1Y2YgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2lt
cGxlbWVudGF0aW9uLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0
aW9uLnB5CkBAIC04Miw3ICs4Miw3IEBAIGNsYXNzIENwcEZyb250ZW5kRGlzcGF0Y2hlckltcGxl
bWVudGF0aW9uR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgIGZvciBldmVudCBpbiBl
dmVudHM6CiAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRl
X2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25fZm9yX2V2ZW50KGV2ZW50LCBkb21haW4pKQogCi0g
ICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgJ1xu
XG4nLmpvaW4oaW1wbGVtZW50YXRpb25zKSkKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRo
X2d1YXJkX2Zvcl9jb25kaXRpb24oZG9tYWluLmNvbmRpdGlvbiwgJ1xuXG4nLmpvaW4oaW1wbGVt
ZW50YXRpb25zKSkKIAogICAgIGRlZiBfZ2VuZXJhdGVfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlv
bl9mb3JfZXZlbnQoc2VsZiwgZXZlbnQsIGRvbWFpbik6CiAgICAgICAgIGxpbmVzID0gW10KQEAg
LTEzMSw0ICsxMzEsNCBAQCBjbGFzcyBDcHBGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlv
bkdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICBsaW5lcy5hcHBlbmQoJycpCiAgICAg
ICAgIGxpbmVzLmFwcGVuZCgnICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNz
YWdlLT50b0pTT05TdHJpbmcoKSk7JykKICAgICAgICAgbGluZXMuYXBwZW5kKCd9JykKLSAgICAg
ICAgcmV0dXJuICJcbiIuam9pbihsaW5lcykKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRo
X2d1YXJkX2Zvcl9jb25kaXRpb24oZXZlbnQuY29uZGl0aW9uLCAiXG4iLmpvaW4obGluZXMpKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVn
ZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2hlYWRlci5weSBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90
eXBlc19oZWFkZXIucHkKaW5kZXggNDIzZDdhMjMwMDguLjVlMGE2ZjU2OTFlIDEwMDc1NQotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaGVhZGVyLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19o
ZWFkZXIucHkKQEAgLTEwNSw3ICsxMDUsNyBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVzSGVhZGVy
R2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgICAgICAgICAgZG9tYWluX2xpbmVzLmFw
cGVuZCgnc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBWRVJTSU9OID0gJXM7JyAlIHZlcnNpb24p
CiAKICAgICAgICAgICAgIGRvbWFpbl9saW5lcy5hcHBlbmQoJ30gLy8gJXMnICUgZG9tYWluLmRv
bWFpbl9uYW1lKQotICAgICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYud3JhcF93aXRoX2d1
YXJkX2Zvcl9kb21haW4oZG9tYWluLCAnXG4nLmpvaW4oZG9tYWluX2xpbmVzKSkpCisgICAgICAg
ICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihk
b21haW4uY29uZGl0aW9uLCAnXG4nLmpvaW4oZG9tYWluX2xpbmVzKSkpCiAKICAgICAgICAgaWYg
bGVuKHNlY3Rpb25zKSA9PSAwOgogICAgICAgICAgICAgcmV0dXJuICcnCkBAIC0xMzIsMTAgKzEz
MiwxMCBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRv
cik6CiAgICAgICAgICAgICBkb21haW5fbGluZXMuYXBwZW5kKCduYW1lc3BhY2UgJXMgeycgJSBk
b21haW4uZG9tYWluX25hbWUpCiAKICAgICAgICAgICAgICMgRm9yd2FyZC1kZWNsYXJlIGFsbCBj
bGFzc2VzIHNvIHRoZSB0eXBlIGJ1aWxkZXJzIHdvbid0IGJyZWFrIGlmIHJlYXJyYW5nZWQuCi0g
ICAgICAgICAgICBkb21haW5fbGluZXMuZXh0ZW5kKCdjbGFzcyAlczsnICUgb2JqZWN0X3R5cGUu
cmF3X25hbWUoKSBmb3Igb2JqZWN0X3R5cGUgaW4gb2JqZWN0X3R5cGVzKQotICAgICAgICAgICAg
ZG9tYWluX2xpbmVzLmV4dGVuZCgnZW51bSBjbGFzcyAlczsnICUgZW51bV90eXBlLnJhd19uYW1l
KCkgZm9yIGVudW1fdHlwZSBpbiBlbnVtX3R5cGVzKQorICAgICAgICAgICAgZG9tYWluX2xpbmVz
LmV4dGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKG9iamVjdF90eXBlLmRl
Y2xhcmF0aW9uKCkuY29uZGl0aW9uLCAnY2xhc3MgJXM7JyAlIG9iamVjdF90eXBlLnJhd19uYW1l
KCkpIGZvciBvYmplY3RfdHlwZSBpbiBvYmplY3RfdHlwZXMpCisgICAgICAgICAgICBkb21haW5f
bGluZXMuZXh0ZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZW51bV90eXBl
LmRlY2xhcmF0aW9uKCkuY29uZGl0aW9uLCAnZW51bSBjbGFzcyAlczsnICUgZW51bV90eXBlLnJh
d19uYW1lKCkpIGZvciBlbnVtX3R5cGUgaW4gZW51bV90eXBlcykKICAgICAgICAgICAgIGRvbWFp
bl9saW5lcy5hcHBlbmQoJ30gLy8gJXMnICUgZG9tYWluLmRvbWFpbl9uYW1lKQotICAgICAgICAg
ICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWlu
LCAnXG4nLmpvaW4oZG9tYWluX2xpbmVzKSkpCisgICAgICAgICAgICBzZWN0aW9ucy5hcHBlbmQo
c2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9uLCAnXG4n
LmpvaW4oZG9tYWluX2xpbmVzKSkpCiAKICAgICAgICAgaWYgbGVuKHNlY3Rpb25zKSA9PSAwOgog
ICAgICAgICAgICAgcmV0dXJuICcnCkBAIC0xNzAsNyArMTcwLDcgQEAgY2xhc3MgQ3BwUHJvdG9j
b2xUeXBlc0hlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICAgICAgaWYgbGVu
KGRlY2xhcmF0aW9uLmRlc2NyaXB0aW9uKSA+IDA6CiAgICAgICAgICAgICAgICAgdHlwZWRlZl9s
aW5lcy5hcHBlbmQoJy8qICVzICovJyAlIGRlY2xhcmF0aW9uLmRlc2NyaXB0aW9uKQogICAgICAg
ICAgICAgdHlwZWRlZl9saW5lcy5hcHBlbmQoJ3R5cGVkZWYgJXMgJXM7JyAlIChwcmltaXRpdmVf
bmFtZSwgZGVjbGFyYXRpb24udHlwZV9uYW1lKSkKLSAgICAgICAgICAgIHNlY3Rpb25zLmFwcGVu
ZCgnXG4nLmpvaW4odHlwZWRlZl9saW5lcykpCisgICAgICAgICAgICBzZWN0aW9ucy5hcHBlbmQo
c2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihkZWNsYXJhdGlvbi5jb25kaXRpb24s
ICdcbicuam9pbih0eXBlZGVmX2xpbmVzKSkpCiAKICAgICAgICAgZm9yIGRlY2xhcmF0aW9uIGlu
IGFycmF5X2RlY2xhcmF0aW9uczoKICAgICAgICAgICAgIGVsZW1lbnRfdHlwZSA9IENwcEdlbmVy
YXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShkZWNsYXJhdGlvbi50eXBlLmVsZW1lbnRf
dHlwZSkKQEAgLTE3OCwxMyArMTc4LDEzIEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNIZWFkZXJH
ZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgICAgIGlmIGxlbihkZWNsYXJhdGlvbi5k
ZXNjcmlwdGlvbikgPiAwOgogICAgICAgICAgICAgICAgIHR5cGVkZWZfbGluZXMuYXBwZW5kKCcv
KiAlcyAqLycgJSBkZWNsYXJhdGlvbi5kZXNjcmlwdGlvbikKICAgICAgICAgICAgIHR5cGVkZWZf
bGluZXMuYXBwZW5kKCd0eXBlZGVmIEpTT046OkFycmF5T2Y8JXM+ICVzOycgJSAoZWxlbWVudF90
eXBlLCBkZWNsYXJhdGlvbi50eXBlX25hbWUpKQotICAgICAgICAgICAgc2VjdGlvbnMuYXBwZW5k
KCdcbicuam9pbih0eXBlZGVmX2xpbmVzKSkKKyAgICAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChz
ZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRlY2xhcmF0aW9uLmNvbmRpdGlvbiwg
J1xuJy5qb2luKHR5cGVkZWZfbGluZXMpKSkKIAogICAgICAgICBsaW5lcyA9IFtdCiAgICAgICAg
IGxpbmVzLmFwcGVuZCgnbmFtZXNwYWNlICVzIHsnICUgZG9tYWluLmRvbWFpbl9uYW1lKQogICAg
ICAgICBsaW5lcy5hcHBlbmQoJ1xuJy5qb2luKHNlY3Rpb25zKSkKICAgICAgICAgbGluZXMuYXBw
ZW5kKCd9IC8vICVzJyAlIGRvbWFpbi5kb21haW5fbmFtZSkKLSAgICAgICAgcmV0dXJuIHNlbGYu
d3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCAnXG4nLmpvaW4obGluZXMpKQorICAg
ICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihkb21haW4uY29u
ZGl0aW9uLCAnXG4nLmpvaW4obGluZXMpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9lbnVtX2NvbnN0
YW50X3ZhbHVlX2NvbnZlcnNpb25fbWV0aG9kcyhzZWxmKToKICAgICAgICAgaWYgbm90IHNlbGYu
YXNzaWduZWRfZW51bV92YWx1ZXMoKToKQEAgLTIyNyw3ICsyMjcsNyBAQCBjbGFzcyBDcHBQcm90
b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgIGxpbmVzLmFw
cGVuZCgnbmFtZXNwYWNlICVzIHsnICUgZG9tYWluLmRvbWFpbl9uYW1lKQogICAgICAgICBsaW5l
cy5hcHBlbmQoJ1xuJy5qb2luKHNlY3Rpb25zKSkKICAgICAgICAgbGluZXMuYXBwZW5kKCd9IC8v
ICVzJyAlIGRvbWFpbi5kb21haW5fbmFtZSkKLSAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRo
X2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCAnXG4nLmpvaW4obGluZXMpKQorICAgICAgICByZXR1
cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9uLCAn
XG4nLmpvaW4obGluZXMpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9jbGFzc19mb3Jfb2JqZWN0X2Rl
Y2xhcmF0aW9uKHNlbGYsIHR5cGVfZGVjbGFyYXRpb24sIGRvbWFpbik6CiAgICAgICAgIGlmIGxl
bih0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVycykgPT0gMDoKQEAgLTI3OSwxMyArMjc5LDEz
IEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToK
IAogICAgICAgICBsaW5lcy5hcHBlbmQoJ307JykKICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQot
ICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorICAgICAgICByZXR1cm4gc2VsZi53cmFw
X3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbih0eXBlX2RlY2xhcmF0aW9uLmNvbmRpdGlvbiwgJ1xu
Jy5qb2luKGxpbmVzKSkKIAogICAgIGRlZiBfZ2VuZXJhdGVfc3RydWN0X2Zvcl9lbnVtX2RlY2xh
cmF0aW9uKHNlbGYsIGVudW1fZGVjbGFyYXRpb24pOgogICAgICAgICBsaW5lcyA9IFtdCiAgICAg
ICAgIGxpbmVzLmFwcGVuZCgnLyogJXMgKi8nICUgZW51bV9kZWNsYXJhdGlvbi5kZXNjcmlwdGlv
bikKICAgICAgICAgbGluZXMuZXh0ZW5kKHNlbGYuX2dlbmVyYXRlX3N0cnVjdF9mb3JfZW51bV90
eXBlKGVudW1fZGVjbGFyYXRpb24udHlwZV9uYW1lLCBlbnVtX2RlY2xhcmF0aW9uLnR5cGUpKQot
ICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorICAgICAgICByZXR1cm4gc2VsZi53cmFw
X3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihlbnVtX2RlY2xhcmF0aW9uLmNvbmRpdGlvbiwgJ1xu
Jy5qb2luKGxpbmVzKSkKIAogICAgIGRlZiBfZ2VuZXJhdGVfc3RydWN0X2Zvcl9hbm9ueW1vdXNf
ZW51bV9tZW1iZXIoc2VsZiwgZW51bV9tZW1iZXIpOgogICAgICAgICBkZWYgYXBwbHlfaW5kZW50
YXRpb24obGluZSk6CkBAIC0zODEsMTAgKzM4MSwxMCBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVz
SGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgICAgICBmb3IgdHlwZV9kZWNs
YXJhdGlvbiBpbiBkZWNsYXJhdGlvbnNfdG9fZ2VuZXJhdGU6CiAgICAgICAgICAgICAgICAgZm9y
IHR5cGVfbWVtYmVyIGluIHR5cGVfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzOgogICAgICAgICAg
ICAgICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGVfbWVtYmVyLnR5cGUsIEVudW1UeXBlKToKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHR5cGVfYXJndW1lbnRzLmFwcGVuZCgoQ3BwR2VuZXJhdG9y
LmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlX21lbWJlcih0eXBlX21lbWJlciwgdHlwZV9kZWNs
YXJhdGlvbiksIEZhbHNlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVfYXJndW1lbnRz
LmFwcGVuZCgoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbih0eXBlX2RlY2xhcmF0
aW9uLmNvbmRpdGlvbiwgQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlX21l
bWJlcih0eXBlX21lbWJlciwgdHlwZV9kZWNsYXJhdGlvbikpLCBGYWxzZSkpCiAKICAgICAgICAg
ICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGVfZGVjbGFyYXRpb24udHlwZSwgT2JqZWN0VHlwZSk6
Ci0gICAgICAgICAgICAgICAgICAgIHR5cGVfYXJndW1lbnRzLmFwcGVuZCgoQ3BwR2VuZXJhdG9y
LmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKHR5cGVfZGVjbGFyYXRpb24udHlwZSksIEdlbmVy
YXRvci50eXBlX25lZWRzX3J1bnRpbWVfY2FzdHModHlwZV9kZWNsYXJhdGlvbi50eXBlKSkpCisg
ICAgICAgICAgICAgICAgICAgIHR5cGVfYXJndW1lbnRzLmFwcGVuZCgoc2VsZi53cmFwX3dpdGhf
Z3VhcmRfZm9yX2NvbmRpdGlvbih0eXBlX2RlY2xhcmF0aW9uLmNvbmRpdGlvbiwgQ3BwR2VuZXJh
dG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKHR5cGVfZGVjbGFyYXRpb24udHlwZSkpLCBH
ZW5lcmF0b3IudHlwZV9uZWVkc19ydW50aW1lX2Nhc3RzKHR5cGVfZGVjbGFyYXRpb24udHlwZSkp
KQogCiAgICAgICAgIHN0cnVjdF9rZXl3b3JkcyA9IFsnc3RydWN0J10KICAgICAgICAgZnVuY3Rp
b25fa2V5d29yZHMgPSBbJ3N0YXRpYyB2b2lkJ10KQEAgLTQzNywxOSArNDM3LDIwIEBAIGNsYXNz
IENwcFByb3RvY29sVHlwZXNIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAg
ICAgIGRvbWFpbl9saW5lcy5hcHBlbmQoIi8vIEVudW1zIGluIHRoZSAnJXMnIERvbWFpbiIgJSBk
b21haW4uZG9tYWluX25hbWUpCiAgICAgICAgICAgICBmb3IgZW51bV90eXBlIGluIGVudW1fdHlw
ZXM6CiAgICAgICAgICAgICAgICAgY3BwX3Byb3RvY29sX3R5cGUgPSBDcHBHZW5lcmF0b3IuY3Bw
X3Byb3RvY29sX3R5cGVfZm9yX3R5cGUoZW51bV90eXBlKQotICAgICAgICAgICAgICAgIGRvbWFp
bl9saW5lcy5hcHBlbmQoJ3RlbXBsYXRlPD4nKQotICAgICAgICAgICAgICAgIGRvbWFpbl9saW5l
cy5hcHBlbmQoJyVzIHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzwlcz4oY29uc3QgU3RyaW5nJik7
JyAlIChyZXR1cm5fdHlwZV93aXRoX2V4cG9ydF9tYWNybyhjcHBfcHJvdG9jb2xfdHlwZSksIGNw
cF9wcm90b2NvbF90eXBlKSkKKyAgICAgICAgICAgICAgICBkb21haW5fbGluZXMuYXBwZW5kKHNl
bGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZW51bV90eXBlLmRlY2xhcmF0aW9uKCku
Y29uZGl0aW9uLCAndGVtcGxhdGU8PlxuJXMgcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPCVzPihj
b25zdCBTdHJpbmcmKTsnICUgKHJldHVybl90eXBlX3dpdGhfZXhwb3J0X21hY3JvKGNwcF9wcm90
b2NvbF90eXBlKSwgY3BwX3Byb3RvY29sX3R5cGUpKSkKIAogICAgICAgICAgICAgZm9yIG9iamVj
dF90eXBlIGluIG9iamVjdF90eXBlczoKKyAgICAgICAgICAgICAgICBvYmplY3RfbGluZXMgPSBb
XQogICAgICAgICAgICAgICAgIGZvciBlbnVtX21lbWJlciBpbiBmaWx0ZXIodHlwZV9tZW1iZXJf
aXNfYW5vbnltb3VzX2VudW1fdHlwZSwgb2JqZWN0X3R5cGUubWVtYmVycyk6CiAgICAgICAgICAg
ICAgICAgICAgIGNwcF9wcm90b2NvbF90eXBlID0gQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90
eXBlX2Zvcl90eXBlX21lbWJlcihlbnVtX21lbWJlciwgb2JqZWN0X3R5cGUuZGVjbGFyYXRpb24o
KSkKLSAgICAgICAgICAgICAgICAgICAgZG9tYWluX2xpbmVzLmFwcGVuZCgndGVtcGxhdGU8Picp
Ci0gICAgICAgICAgICAgICAgICAgIGRvbWFpbl9saW5lcy5hcHBlbmQoJyVzIHBhcnNlRW51bVZh
bHVlRnJvbVN0cmluZzwlcz4oY29uc3QgU3RyaW5nJik7JyAlIChyZXR1cm5fdHlwZV93aXRoX2V4
cG9ydF9tYWNybyhjcHBfcHJvdG9jb2xfdHlwZSksIGNwcF9wcm90b2NvbF90eXBlKSkKKyAgICAg
ICAgICAgICAgICAgICAgb2JqZWN0X2xpbmVzLmFwcGVuZCgndGVtcGxhdGU8PlxuJXMgcGFyc2VF
bnVtVmFsdWVGcm9tU3RyaW5nPCVzPihjb25zdCBTdHJpbmcmKTsnICUgKHJldHVybl90eXBlX3dp
dGhfZXhwb3J0X21hY3JvKGNwcF9wcm90b2NvbF90eXBlKSwgY3BwX3Byb3RvY29sX3R5cGUpKQor
ICAgICAgICAgICAgICAgIGlmIGxlbihvYmplY3RfbGluZXMpOgorICAgICAgICAgICAgICAgICAg
ICBkb21haW5fbGluZXMuYXBwZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24o
b2JqZWN0X3R5cGUuZGVjbGFyYXRpb24oKS5jb25kaXRpb24sICdcbicuam9pbihvYmplY3RfbGlu
ZXMpKSkKIAogICAgICAgICAgICAgaWYgbGVuKGRvbWFpbl9saW5lcykgPT0gMToKICAgICAgICAg
ICAgICAgICBjb250aW51ZSAgIyBObyByZWFsIGRlY2xhcmF0aW9ucyB0byBlbWl0LCBqdXN0IHRo
ZSBkb21haW4gY29tbWVudC4gU2tpcC4KIAotICAgICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNl
bGYud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCAnXG4nLmpvaW4oZG9tYWluX2xp
bmVzKSkpCisgICAgICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi53cmFwX3dpdGhfZ3VhcmRf
Zm9yX2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9uLCAnXG4nLmpvaW4oZG9tYWluX2xpbmVzKSkp
CiAKICAgICAgICAgaWYgbGVuKHNlY3Rpb25zKSA9PSAxOgogICAgICAgICAgICAgcmV0dXJuIFtd
ICMgTm8gcmVhbCBzZWN0aW9ucyB0byBlbWl0LCBqdXN0IHRoZSBuYW1lc3BhY2UgYW5kIHRlbXBs
YXRlIGRlY2xhcmF0aW9uLiBTa2lwLgpAQCAtNDc0LDE0ICs0NzUsMjAgQEAgY2xhc3MgQ3BwUHJv
dG9jb2xUeXBlc0hlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICAgICAgICAg
IGxpbmVzLmFwcGVuZCgnJykKICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsnKQogCi0gICAgICAgICAgICBsaW5lcy5h
cHBlbmQoJycpCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoIi8vIEhhc2ggZGVjbGFyYXRpb25z
IGluIHRoZSAnJXMnIERvbWFpbiIgJSBkb21haW4uZG9tYWluX25hbWUpCisgICAgICAgICAgICBk
b21haW5fbGluZXMgPSBbXQorCisgICAgICAgICAgICBkb21haW5fbGluZXMuYXBwZW5kKCcnKQor
ICAgICAgICAgICAgZG9tYWluX2xpbmVzLmFwcGVuZCgiLy8gSGFzaCBkZWNsYXJhdGlvbnMgaW4g
dGhlICclcycgRG9tYWluIiAlIGRvbWFpbi5kb21haW5fbmFtZSkKIAogICAgICAgICAgICAgZm9y
IGVudW1fdHlwZSBpbiBlbnVtX3R5cGVzOgotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgn
dGVtcGxhdGU8PicpCi0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdzdHJ1Y3QgRGVmYXVs
dEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6JXM6OiVzPiB7JyAlIChkb21haW4uZG9tYWluX25h
bWUsIGVudW1fdHlwZS5yYXdfbmFtZSgpKSkKLSAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQo
JyAgICB0eXBlZGVmIEludEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6JXM6OiVzPiBIYXNoOycg
JSAoZG9tYWluLmRvbWFpbl9uYW1lLCBlbnVtX3R5cGUucmF3X25hbWUoKSkpCi0gICAgICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKCd9OycpCisgICAgICAgICAgICAgICAgZW51bV9saW5lcyA9IFtd
CisgICAgICAgICAgICAgICAgZW51bV9saW5lcy5hcHBlbmQoJ3RlbXBsYXRlPD4nKQorICAgICAg
ICAgICAgICAgIGVudW1fbGluZXMuYXBwZW5kKCdzdHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9y
OjpQcm90b2NvbDo6JXM6OiVzPiB7JyAlIChkb21haW4uZG9tYWluX25hbWUsIGVudW1fdHlwZS5y
YXdfbmFtZSgpKSkKKyAgICAgICAgICAgICAgICBlbnVtX2xpbmVzLmFwcGVuZCgnICAgIHR5cGVk
ZWYgSW50SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjolczo6JXM+IEhhc2g7JyAlIChkb21haW4u
ZG9tYWluX25hbWUsIGVudW1fdHlwZS5yYXdfbmFtZSgpKSkKKyAgICAgICAgICAgICAgICBlbnVt
X2xpbmVzLmFwcGVuZCgnfTsnKQorICAgICAgICAgICAgICAgIGRvbWFpbl9saW5lcy5hcHBlbmQo
c2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihlbnVtX3R5cGUuZGVjbGFyYXRpb24o
KS5jb25kaXRpb24sICdcbicuam9pbihlbnVtX2xpbmVzKSkpCisKKyAgICAgICAgICAgIGxpbmVz
LmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRvbWFpbi5jb25kaXRp
b24sICdcbicuam9pbihkb21haW5fbGluZXMpKSkKIAogICAgICAgICBpZiBsZW4obGluZXMpID09
IDA6CiAgICAgICAgICAgICByZXR1cm4gW10KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBl
c19pbXBsZW1lbnRhdGlvbi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5w
eQppbmRleCA2NWNlYmY1ODNlZS4uODUzMGU2NTQzMWYgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2Nv
bF90eXBlc19pbXBsZW1lbnRhdGlvbi5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaW1wbGVt
ZW50YXRpb24ucHkKQEAgLTEzMCw3ICsxMzAsNyBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVzSW1w
bGVtZW50YXRpb25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgICAgICAgICAnfScs
CiAgICAgICAgICAgICAgICAgJycsCiAgICAgICAgICAgICBdKQotICAgICAgICAgICAgcmV0dXJu
IGJvZHlfbGluZXMKKyAgICAgICAgICAgIHJldHVybiAnXG4nLmpvaW4oYm9keV9saW5lcykKIAog
ICAgICAgICB0eXBlX2RlY2xhcmF0aW9ucyA9IHNlbGYudHlwZV9kZWNsYXJhdGlvbnNfZm9yX2Rv
bWFpbihkb21haW4pCiAgICAgICAgIGRlY2xhcmF0aW9uX3R5cGVzID0gW2RlY2wudHlwZSBmb3Ig
ZGVjbCBpbiB0eXBlX2RlY2xhcmF0aW9uc10KQEAgLTE0NiwxNyArMTQ2LDIwIEBAIGNsYXNzIENw
cFByb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAg
ICAgICBsaW5lcy5hcHBlbmQoIi8vIEVudW1zIGluIHRoZSAnJXMnIERvbWFpbiIgJSBkb21haW4u
ZG9tYWluX25hbWUpCiAgICAgICAgIGZvciBlbnVtX3R5cGUgaW4gZW51bV90eXBlczoKICAgICAg
ICAgICAgIGNwcF9wcm90b2NvbF90eXBlID0gQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBl
X2Zvcl90eXBlKGVudW1fdHlwZSkKLSAgICAgICAgICAgIGxpbmVzLmV4dGVuZChnZW5lcmF0ZV9j
b252ZXJzaW9uX21ldGhvZF9ib2R5KGVudW1fdHlwZSwgY3BwX3Byb3RvY29sX3R5cGUpKQorICAg
ICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24o
ZW51bV90eXBlLmRlY2xhcmF0aW9uKCkuY29uZGl0aW9uLCBnZW5lcmF0ZV9jb252ZXJzaW9uX21l
dGhvZF9ib2R5KGVudW1fdHlwZSwgY3BwX3Byb3RvY29sX3R5cGUpKSkKIAogICAgICAgICBmb3Ig
b2JqZWN0X3R5cGUgaW4gb2JqZWN0X3R5cGVzOgorICAgICAgICAgICAgb2JqZWN0X2xpbmVzID0g
W10KICAgICAgICAgICAgIGZvciBlbnVtX21lbWJlciBpbiBmaWx0ZXIodHlwZV9tZW1iZXJfaXNf
YW5vbnltb3VzX2VudW1fdHlwZSwgb2JqZWN0X3R5cGUubWVtYmVycyk6CiAgICAgICAgICAgICAg
ICAgY3BwX3Byb3RvY29sX3R5cGUgPSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9y
X3R5cGVfbWVtYmVyKGVudW1fbWVtYmVyLCBvYmplY3RfdHlwZS5kZWNsYXJhdGlvbigpKQotICAg
ICAgICAgICAgICAgIGxpbmVzLmV4dGVuZChnZW5lcmF0ZV9jb252ZXJzaW9uX21ldGhvZF9ib2R5
KGVudW1fbWVtYmVyLnR5cGUsIGNwcF9wcm90b2NvbF90eXBlKSkKKyAgICAgICAgICAgICAgICBv
YmplY3RfbGluZXMuYXBwZW5kKGdlbmVyYXRlX2NvbnZlcnNpb25fbWV0aG9kX2JvZHkoZW51bV9t
ZW1iZXIudHlwZSwgY3BwX3Byb3RvY29sX3R5cGUpKQorICAgICAgICAgICAgaWYgbGVuKG9iamVj
dF9saW5lcyk6CisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYud3JhcF93aXRoX2d1
YXJkX2Zvcl9jb25kaXRpb24ob2JqZWN0X3R5cGUuZGVjbGFyYXRpb24oKS5jb25kaXRpb24sICdc
bicuam9pbihvYmplY3RfbGluZXMpKSkKIAogICAgICAgICBpZiBsZW4obGluZXMpID09IDE6CiAg
ICAgICAgICAgICByZXR1cm4gJycgICMgTm8gcmVhbCBkZWNsYXJhdGlvbnMgdG8gZW1pdCwganVz
dCB0aGUgZG9tYWluIGNvbW1lbnQuCiAKLSAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1
YXJkX2Zvcl9kb21haW4oZG9tYWluLCAnXG4nLmpvaW4obGluZXMpKQorICAgICAgICByZXR1cm4g
c2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9uLCAnXG4n
LmpvaW4obGluZXMpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9lbnVtX21hcHBpbmdfYW5kX2NvbnZl
cnNpb25fbWV0aG9kcyhzZWxmLCBkb21haW5zKToKICAgICAgICAgc2VjdGlvbnMgPSBbXQpAQCAt
MTczLDEyICsxNzYsMTUgQEAgY2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2Vu
ZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgZGVmIF9nZW5lcmF0ZV9vcGVuX2ZpZWxkX25hbWVz
KHNlbGYpOgogICAgICAgICBsaW5lcyA9IFtdCiAgICAgICAgIGZvciBkb21haW4gaW4gc2VsZi5k
b21haW5zX3RvX2dlbmVyYXRlKCk6CisgICAgICAgICAgICBkb21haW5fbGluZXMgPSBbXQogICAg
ICAgICAgICAgdHlwZV9kZWNsYXJhdGlvbnMgPSBzZWxmLnR5cGVfZGVjbGFyYXRpb25zX2Zvcl9k
b21haW4oZG9tYWluKQogICAgICAgICAgICAgZm9yIHR5cGVfZGVjbGFyYXRpb24gaW4gW2RlY2wg
Zm9yIGRlY2wgaW4gdHlwZV9kZWNsYXJhdGlvbnMgaWYgR2VuZXJhdG9yLnR5cGVfaGFzX29wZW5f
ZmllbGRzKGRlY2wudHlwZSldOgogICAgICAgICAgICAgICAgIG9wZW5fbWVtYmVycyA9IEdlbmVy
YXRvci5vcGVuX2ZpZWxkcyh0eXBlX2RlY2xhcmF0aW9uKQogICAgICAgICAgICAgICAgIGZvciB0
eXBlX21lbWJlciBpbiBzb3J0ZWQob3Blbl9tZW1iZXJzLCBrZXk9bGFtYmRhIG1lbWJlcjogbWVt
YmVyLm1lbWJlcl9uYW1lKToKICAgICAgICAgICAgICAgICAgICAgZmllbGRfbmFtZSA9ICc6Oicu
am9pbihbJ0luc3BlY3RvcicsICdQcm90b2NvbCcsIGRvbWFpbi5kb21haW5fbmFtZSwgdWNmaXJz
dCh0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbmFtZSksIHVjZmlyc3QodHlwZV9tZW1iZXIubWVtYmVy
X25hbWUpXSkKLSAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdjb25zdCBjaGFyKiAl
cyA9ICIlcyI7JyAlIChmaWVsZF9uYW1lLCB0eXBlX21lbWJlci5tZW1iZXJfbmFtZSkpCisgICAg
ICAgICAgICAgICAgICAgIGRvbWFpbl9saW5lcy5hcHBlbmQoJ2NvbnN0IGNoYXIqICVzID0gIiVz
IjsnICUgKGZpZWxkX25hbWUsIHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lKSkKKyAgICAgICAgICAg
IGlmIGxlbihkb21haW5fbGluZXMpOgorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxm
LndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRvbWFpbi5jb25kaXRpb24sICdcbicuam9p
bihkb21haW5fbGluZXMpKSkKIAogICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQogCkBA
IC0xODgsMTYgKzE5NCwxOSBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25H
ZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgZGVjbGFyYXRpb25zX3RvX2dlbmVyYXRl
ID0gW2RlY2wgZm9yIGRlY2wgaW4gdHlwZV9kZWNsYXJhdGlvbnMgaWYgc2VsZi50eXBlX25lZWRz
X3NoYXBlX2Fzc2VydGlvbnMoZGVjbC50eXBlKV0KIAogICAgICAgICBmb3IgdHlwZV9kZWNsYXJh
dGlvbiBpbiBkZWNsYXJhdGlvbnNfdG9fZ2VuZXJhdGU6CisgICAgICAgICAgICB0eXBlX2xpbmVz
ID0gW10KICAgICAgICAgICAgIGZvciB0eXBlX21lbWJlciBpbiB0eXBlX2RlY2xhcmF0aW9uLnR5
cGVfbWVtYmVyczoKICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGVfbWVtYmVyLnR5
cGUsIEVudW1UeXBlKToKLSAgICAgICAgICAgICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYu
X2dlbmVyYXRlX2Fzc2VydGlvbl9mb3JfZW51bSh0eXBlX21lbWJlciwgdHlwZV9kZWNsYXJhdGlv
bikpCisgICAgICAgICAgICAgICAgICAgIHR5cGVfbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRl
X2Fzc2VydGlvbl9mb3JfZW51bSh0eXBlX21lbWJlciwgdHlwZV9kZWNsYXJhdGlvbikpCiAKICAg
ICAgICAgICAgIGlmIGlzaW5zdGFuY2UodHlwZV9kZWNsYXJhdGlvbi50eXBlLCBPYmplY3RUeXBl
KToKLSAgICAgICAgICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYXNzZXJ0
aW9uX2Zvcl9vYmplY3RfZGVjbGFyYXRpb24odHlwZV9kZWNsYXJhdGlvbikpCisgICAgICAgICAg
ICAgICAgdHlwZV9saW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYXNzZXJ0aW9uX2Zvcl9vYmpl
Y3RfZGVjbGFyYXRpb24odHlwZV9kZWNsYXJhdGlvbikpCiAgICAgICAgICAgICAgICAgaWYgR2Vu
ZXJhdG9yLnR5cGVfbmVlZHNfcnVudGltZV9jYXN0cyh0eXBlX2RlY2xhcmF0aW9uLnR5cGUpOgot
ICAgICAgICAgICAgICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfcnVudGlt
ZV9jYXN0X2Zvcl9vYmplY3RfZGVjbGFyYXRpb24odHlwZV9kZWNsYXJhdGlvbikpCisgICAgICAg
ICAgICAgICAgICAgIHR5cGVfbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX3J1bnRpbWVfY2Fz
dF9mb3Jfb2JqZWN0X2RlY2xhcmF0aW9uKHR5cGVfZGVjbGFyYXRpb24pKQorICAgICAgICAgICAg
aWYgbGVuKHR5cGVfbGluZXMpOgorICAgICAgICAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxm
LndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKHR5cGVfZGVjbGFyYXRpb24uY29uZGl0aW9u
LCAnXG5cbicuam9pbih0eXBlX2xpbmVzKSkpCiAKLSAgICAgICAgcmV0dXJuICdcblxuJy5qb2lu
KHNlY3Rpb25zKQorICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRp
dGlvbihkb21haW4uY29uZGl0aW9uLCAnXG5cbicuam9pbihzZWN0aW9ucykpCiAKICAgICBkZWYg
X2dlbmVyYXRlX3J1bnRpbWVfY2FzdF9mb3Jfb2JqZWN0X2RlY2xhcmF0aW9uKHNlbGYsIG9iamVj
dF9kZWNsYXJhdGlvbik6CiAgICAgICAgIGFyZ3MgPSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9qc19iYWNrZW5k
X2NvbW1hbmRzLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vZ2VuZXJhdGVfanNfYmFja2VuZF9jb21tYW5kcy5weQppbmRleCBiYmY3NmY5MjkxMS4u
NzMxMjY5N2NiNTYgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2pzX2JhY2tlbmRfY29tbWFuZHMucHkKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfanNf
YmFja2VuZF9jb21tYW5kcy5weQpAQCAtOTYsNyArOTYsNyBAQCBjbGFzcyBKU0JhY2tlbmRDb21t
YW5kc0dlbmVyYXRvcihHZW5lcmF0b3IpOgogICAgICAgICAgICAgICAgICAgICAnZW51bU5hbWUn
OiBkZWNsYXJhdGlvbi50eXBlX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICdlbnVtTWFwJzog
IiwgIi5qb2luKFsnJXM6ICIlcyInICUgKEdlbmVyYXRvci5zdHlsaXplZF9uYW1lX2Zvcl9lbnVt
X3ZhbHVlKGVudW1fdmFsdWUpLCBlbnVtX3ZhbHVlKSBmb3IgZW51bV92YWx1ZSBpbiBkZWNsYXJh
dGlvbi50eXBlLmVudW1fdmFsdWVzKCldKQogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoJ0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCIlKGRvbWFp
bk5hbWUpcy4lKGVudW1OYW1lKXMiLCB7JShlbnVtTWFwKXN9KTsnICUgZW51bV9hcmdzKQorICAg
ICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0
aW9uKGRlY2xhcmF0aW9uLmNvbmRpdGlvbiwgJ0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVt
KCIlKGRvbWFpbk5hbWUpcy4lKGVudW1OYW1lKXMiLCB7JShlbnVtTWFwKXN9KTsnICUgZW51bV9h
cmdzKSkKIAogICAgICAgICAgICAgZGVmIGlzX2Fub255bW91c19lbnVtX21lbWJlcih0eXBlX21l
bWJlcik6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGlzaW5zdGFuY2UodHlwZV9tZW1iZXIudHlw
ZSwgRW51bVR5cGUpIGFuZCB0eXBlX21lbWJlci50eXBlLmlzX2Fub255bW91cwpAQCAtMTI4LDE2
ICsxMjgsMTggQEAgY2xhc3MgSlNCYWNrZW5kQ29tbWFuZHNHZW5lcmF0b3IoR2VuZXJhdG9yKToK
ICAgICAgICAgICAgICAgICAnY2FsbFBhcmFtcyc6ICIsICIuam9pbihbZ2VuZXJhdGVfcGFyYW1l
dGVyX29iamVjdChwYXJhbWV0ZXIpIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFt
ZXRlcnNdKSwKICAgICAgICAgICAgICAgICAncmV0dXJuUGFyYW1zJzogIiwgIi5qb2luKFsnIiVz
IicgJSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLnJl
dHVybl9wYXJhbWV0ZXJzXSksCiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBsaW5lcy5hcHBl
bmQoJ0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCIlKGRvbWFpbk5hbWUpcy4lKGNv
bW1hbmROYW1lKXMiLCAlKHRhcmdldFR5cGVzKXMsIFslKGNhbGxQYXJhbXMpc10sIFslKHJldHVy
blBhcmFtcylzXSk7JyAlIGNvbW1hbmRfYXJncykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZChz
ZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGNvbW1hbmQuY29uZGl0aW9uLCAnSW5z
cGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIiUoZG9tYWluTmFtZSlzLiUoY29tbWFuZE5h
bWUpcyIsICUodGFyZ2V0VHlwZXMpcywgWyUoY2FsbFBhcmFtcylzXSwgWyUocmV0dXJuUGFyYW1z
KXNdKTsnICUgY29tbWFuZF9hcmdzKSkKIAogICAgICAgICBmb3IgZXZlbnQgaW4gZXZlbnRzOgor
ICAgICAgICAgICAgZXZlbnRfbGluZXMgPSBbXQorCiAgICAgICAgICAgICBmb3IgcGFyYW0gaW4g
ZmlsdGVyKGlzX2Fub255bW91c19lbnVtX3BhcmFtLCBldmVudC5ldmVudF9wYXJhbWV0ZXJzKToK
ICAgICAgICAgICAgICAgICBlbnVtX2FyZ3MgPSB7CiAgICAgICAgICAgICAgICAgICAgICdkb21h
aW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLAogICAgICAgICAgICAgICAgICAgICAnZW51bU5h
bWUnOiAnJXMlcycgJSAodWNmaXJzdChldmVudC5ldmVudF9uYW1lKSwgdWNmaXJzdChwYXJhbS5w
YXJhbWV0ZXJfbmFtZSkpLAogICAgICAgICAgICAgICAgICAgICAnZW51bU1hcCc6ICIsICIuam9p
bihbJyVzOiAiJXMiJyAlIChHZW5lcmF0b3Iuc3R5bGl6ZWRfbmFtZV9mb3JfZW51bV92YWx1ZShl
bnVtX3ZhbHVlKSwgZW51bV92YWx1ZSkgZm9yIGVudW1fdmFsdWUgaW4gcGFyYW0udHlwZS5lbnVt
X3ZhbHVlcygpXSksCiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGxpbmVzLmFw
cGVuZCgnSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIiUoZG9tYWluTmFtZSlzLiUoZW51
bU5hbWUpcyIsIHslKGVudW1NYXApc30pOycgJSBlbnVtX2FyZ3MpCisgICAgICAgICAgICAgICAg
ZXZlbnRfbGluZXMuYXBwZW5kKCdJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiJShkb21h
aW5OYW1lKXMuJShlbnVtTmFtZSlzIiwgeyUoZW51bU1hcClzfSk7JyAlIGVudW1fYXJncykKIAog
ICAgICAgICAgICAgZXZlbnRfYXJncyA9IHsKICAgICAgICAgICAgICAgICAnZG9tYWluTmFtZSc6
IGRvbWFpbi5kb21haW5fbmFtZSwKQEAgLTE0NSw3ICsxNDcsOSBAQCBjbGFzcyBKU0JhY2tlbmRD
b21tYW5kc0dlbmVyYXRvcihHZW5lcmF0b3IpOgogICAgICAgICAgICAgICAgICd0YXJnZXRUeXBl
cyc6IGpzb24uZHVtcHMoZXZlbnQudGFyZ2V0X3R5cGVzKSwKICAgICAgICAgICAgICAgICAncGFy
YW1zJzogIiwgIi5qb2luKFsnIiVzIicgJSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUgZm9yIHBh
cmFtZXRlciBpbiBldmVudC5ldmVudF9wYXJhbWV0ZXJzXSksCiAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoJ0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudCgiJShk
b21haW5OYW1lKXMuJShldmVudE5hbWUpcyIsICUodGFyZ2V0VHlwZXMpcywgWyUocGFyYW1zKXNd
KTsnICUgZXZlbnRfYXJncykKKyAgICAgICAgICAgIGV2ZW50X2xpbmVzLmFwcGVuZCgnSW5zcGVj
dG9yQmFja2VuZC5yZWdpc3RlckV2ZW50KCIlKGRvbWFpbk5hbWUpcy4lKGV2ZW50TmFtZSlzIiwg
JSh0YXJnZXRUeXBlcylzLCBbJShwYXJhbXMpc10pOycgJSBldmVudF9hcmdzKQorCisgICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihldmVu
dC5jb25kaXRpb24sICdcbicuam9pbihldmVudF9saW5lcykpKQogCiAgICAgICAgIGhhc19hc3lu
Y19jb21tYW5kcyA9IGFueShbY29tbWFuZC5pc19hc3luYyBmb3IgY29tbWFuZCBpbiBjb21tYW5k
c10pCiAgICAgICAgIGlmIGxlbihldmVudHMpID4gMCBvciBoYXNfYXN5bmNfY29tbWFuZHM6CkBA
IC0xNjAsNCArMTY0LDQgQEAgY2xhc3MgSlNCYWNrZW5kQ29tbWFuZHNHZW5lcmF0b3IoR2VuZXJh
dG9yKToKICAgICAgICAgfQogICAgICAgICBsaW5lcy5hcHBlbmQoJ0luc3BlY3RvckJhY2tlbmQu
YWN0aXZhdGVEb21haW4oIiUoZG9tYWluTmFtZSlzIiwgJShkZWJ1Z2dhYmxlVHlwZXMpcyk7JyAl
IGFjdGl2YXRlX2FyZ3MpCiAKLSAgICAgICAgcmV0dXJuICJcbiIuam9pbihsaW5lcykKKyAgICAg
ICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZG9tYWluLmNvbmRp
dGlvbiwgIlxuIi5qb2luKGxpbmVzKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRj
aGVyX2hlYWRlci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9j
b2RlZ2VuL2dlbmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQppbmRleCBl
ZDhjYzU5NmQzMS4uZWEyZmMxMTI3NGUgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRj
aGVyX2hlYWRlci5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKQEAg
LTk5LDcgKzk5LDcgQEAgY2xhc3MgT2JqQ0JhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9y
KE9iakNHZW5lcmF0b3IpOgogICAgICAgICAgICAgJ29iamNQcmVmaXgnOiBzZWxmLm9iamNfcHJl
Zml4KCksCiAgICAgICAgIH0KIAotICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRf
Zm9yX2RvbWFpbihkb21haW4sIFRlbXBsYXRlKE9iakNUZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNo
ZXJIZWFkZXJEb21haW5IYW5kbGVyT2JqQ0RlY2xhcmF0aW9uKS5zdWJzdGl0dXRlKE5vbmUsICoq
aGFuZGxlcl9hcmdzKSkKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9j
b25kaXRpb24oZG9tYWluLmNvbmRpdGlvbiwgVGVtcGxhdGUoT2JqQ1RlbXBsYXRlcy5CYWNrZW5k
RGlzcGF0Y2hlckhlYWRlckRvbWFpbkhhbmRsZXJPYmpDRGVjbGFyYXRpb24pLnN1YnN0aXR1dGUo
Tm9uZSwgKipoYW5kbGVyX2FyZ3MpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9vYmpjX2hhbmRsZXJf
ZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQoc2VsZiwgY29tbWFuZCk6CiAgICAgICAgIGxpbmVzID0g
W10KQEAgLTExMiw0ICsxMTIsNCBAQCBjbGFzcyBPYmpDQmFja2VuZERpc3BhdGNoZXJIZWFkZXJH
ZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgICAgICAgICAncGFyYW1ldGVycyc6ICcsICcu
am9pbihwYXJhbWV0ZXJzKSwKICAgICAgICAgfQogICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICB2
b2lkICUoY29tbWFuZE5hbWUpcyglKHBhcmFtZXRlcnMpcykgZmluYWw7JyAlIGNvbW1hbmRfYXJn
cykKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKyAgICAgICAgcmV0dXJuIHNlbGYu
d3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oY29tbWFuZC5jb25kaXRpb24sICdcbicuam9p
bihsaW5lcykpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRh
dGlvbi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L2dlbmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CmluZGV4
IGExYjllMTc5NzA1Li4wMjMxYmY1ODkzZCAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3Bh
dGNoZXJfaW1wbGVtZW50YXRpb24ucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaW1w
bGVtZW50YXRpb24ucHkKQEAgLTEwNCwxMCArMTA0LDEwIEBAIGNsYXNzIE9iakNCYWNrZW5kRGlz
cGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogICAgICAgICAg
ICAgJ2ludm9jYXRpb24nOiBzZWxmLl9nZW5lcmF0ZV9pbnZvY2F0aW9uX2Zvcl9jb21tYW5kKGRv
bWFpbiwgY29tbWFuZCksCiAgICAgICAgIH0KIAotICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dp
dGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4sIFRlbXBsYXRlKE9iakNUZW1wbGF0ZXMuQmFja2Vu
ZERpc3BhdGNoZXJIZWFkZXJEb21haW5IYW5kbGVySW1wbGVtZW50YXRpb24pLnN1YnN0aXR1dGUo
Tm9uZSwgKipjb21tYW5kX2FyZ3MpKQorICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3Vh
cmRfZm9yX2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9uLCBUZW1wbGF0ZShPYmpDVGVtcGxhdGVz
LkJhY2tlbmREaXNwYXRjaGVySGVhZGVyRG9tYWluSGFuZGxlckltcGxlbWVudGF0aW9uKS5zdWJz
dGl0dXRlKE5vbmUsICoqY29tbWFuZF9hcmdzKSkKIAogICAgIGRlZiBfZ2VuZXJhdGVfcmVzcG9u
ZHNfdG9fc2VsZWN0b3JfZm9yX2NvbW1hbmQoc2VsZiwgZG9tYWluLCBjb21tYW5kKToKLSAgICAg
ICAgcmV0dXJuICdbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKCVzV2l0
aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOiVzKV0nICUgKGNvbW1hbmQuY29tbWFuZF9u
YW1lLCAnJy5qb2luKG1hcChsYW1iZGEgcGFyYW1ldGVyOiAnJXM6JyAlIHBhcmFtZXRlci5wYXJh
bWV0ZXJfbmFtZSwgY29tbWFuZC5jYWxsX3BhcmFtZXRlcnMpKSkKKyAgICAgICAgcmV0dXJuIHNl
bGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oY29tbWFuZC5jb25kaXRpb24sICdbbV9k
ZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKCVzV2l0aEVycm9yQ2FsbGJhY2s6
c3VjY2Vzc0NhbGxiYWNrOiVzKV0nICUgKGNvbW1hbmQuY29tbWFuZF9uYW1lLCAnJy5qb2luKG1h
cChsYW1iZGEgcGFyYW1ldGVyOiAnJXM6JyAlIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwgY29t
bWFuZC5jYWxsX3BhcmFtZXRlcnMpKSkpCiAKICAgICBkZWYgX2dlbmVyYXRlX3N1Y2Nlc3NfYmxv
Y2tfZm9yX2NvbW1hbmQoc2VsZiwgZG9tYWluLCBjb21tYW5kKToKICAgICAgICAgbGluZXMgPSBb
XQpAQCAtMTU2LDcgKzE1Niw3IEBAIGNsYXNzIE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVu
dGF0aW9uR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCcgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpT
T046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsnKQogCiAgICAgICAgIGxpbmVzLmFwcGVuZCgn
ICAgIH07JykKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKyAgICAgICAgcmV0dXJu
IHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oY29tbWFuZC5jb25kaXRpb24sICdc
bicuam9pbihsaW5lcykpCiAKICAgICBkZWYgX2dlbmVyYXRlX2NvbnZlcnNpb25zX2Zvcl9jb21t
YW5kKHNlbGYsIGRvbWFpbiwgY29tbWFuZCk6CiAgICAgICAgIGxpbmVzID0gW10KQEAgLTE5OSw3
ICsxOTksNyBAQCBjbGFzcyBPYmpDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVy
YXRvcihPYmpDR2VuZXJhdG9yKToKIAogICAgICAgICBpZiBsaW5lczoKICAgICAgICAgICAgIGxp
bmVzLmFwcGVuZCgnJykKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKyAgICAgICAg
cmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oY29tbWFuZC5jb25kaXRp
b24sICdcbicuam9pbihsaW5lcykpCiAKICAgICBkZWYgX2dlbmVyYXRlX2ludm9jYXRpb25fZm9y
X2NvbW1hbmQoc2VsZiwgZG9tYWluLCBjb21tYW5kKToKICAgICAgICAgcGFpcnMgPSBbXQpAQCAt
MjE5LDQgKzIxOSw0IEBAIGNsYXNzIE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9u
R2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogCiAgICAgICAgICAgICAgICAgb3B0aW9uYWxfZXhw
cmVzc2lvbiA9ICcoJXMgPyAmJXMgOiBuaWwpJyAlIChpbl9wYXJhbV9uYW1lLCBvYmpjX2luX3Bh
cmFtX2V4cHJlc3Npb24pCiAgICAgICAgICAgICAgICAgcGFpcnMuYXBwZW5kKCclczolcycgJSAo
cGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lLCBvcHRpb25hbF9leHByZXNzaW9uKSkKLSAgICAgICAg
cmV0dXJuICcgICAgW21fZGVsZWdhdGUgJXMlc107JyAlIChjb21tYW5kLmNvbW1hbmRfbmFtZSwg
JyAnLmpvaW4ocGFpcnMpKQorICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9y
X2NvbmRpdGlvbihjb21tYW5kLmNvbmRpdGlvbiwgJyAgICBbbV9kZWxlZ2F0ZSAlcyVzXTsnICUg
KGNvbW1hbmQuY29tbWFuZF9uYW1lLCAnICcuam9pbihwYWlycykpKQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2Jq
Y19oZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV9vYmpjX2hlYWRlci5weQppbmRleCAxNWZiNzRiZThiZi4uMjVlOWZhZTEw
MWQgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9j
b2RlZ2VuL2dlbmVyYXRlX29iamNfaGVhZGVyLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfaGVhZGVyLnB5CkBAIC0z
MSwxMiArMzEsMTIgQEAgZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCiAKIHRyeToKICAgICBm
cm9tIC5nZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJzdAotICAgIGZyb20gLm1vZGVs
cyBpbXBvcnQgT2JqZWN0VHlwZSwgRW51bVR5cGUsIFBsYXRmb3JtcworICAgIGZyb20gLm1vZGVs
cyBpbXBvcnQgT2JqZWN0VHlwZSwgRW51bVR5cGUKICAgICBmcm9tIC5vYmpjX2dlbmVyYXRvciBp
bXBvcnQgT2JqQ0dlbmVyYXRvciwgam9pbl90eXBlX2FuZF9uYW1lCiAgICAgZnJvbSAub2JqY19n
ZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBPYmpDR2VuZXJhdG9yVGVtcGxhdGVzIGFzIE9iakNU
ZW1wbGF0ZXMKIGV4Y2VwdCBWYWx1ZUVycm9yOgogICAgIGZyb20gZ2VuZXJhdG9yIGltcG9ydCBH
ZW5lcmF0b3IsIHVjZmlyc3QKLSAgICBmcm9tIG1vZGVscyBpbXBvcnQgT2JqZWN0VHlwZSwgRW51
bVR5cGUsIFBsYXRmb3JtcworICAgIGZyb20gbW9kZWxzIGltcG9ydCBPYmplY3RUeXBlLCBFbnVt
VHlwZQogICAgIGZyb20gb2JqY19nZW5lcmF0b3IgaW1wb3J0IE9iakNHZW5lcmF0b3IsIGpvaW5f
dHlwZV9hbmRfbmFtZQogICAgIGZyb20gb2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBP
YmpDR2VuZXJhdG9yVGVtcGxhdGVzIGFzIE9iakNUZW1wbGF0ZXMKIApAQCAtODcsNyArODcsNiBA
QCBjbGFzcyBPYmpDSGVhZGVyR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogICAgICAgICBzZWN0
aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9saWNlbnNlKCkpCiAgICAgICAgIHNlY3Rpb25zLmFw
cGVuZChUZW1wbGF0ZShPYmpDVGVtcGxhdGVzLkhlYWRlclByZWx1ZGUpLnN1YnN0aXR1dGUoTm9u
ZSwgKipoZWFkZXJQcmVsdWRlX2FyZ3MpKQogICAgICAgICBzZWN0aW9ucy5hcHBlbmQoJ1xuJy5q
b2luKFtfZiBmb3IgX2YgaW4gbWFwKHNlbGYuX2dlbmVyYXRlX2ZvcndhcmRfZGVjbGFyYXRpb25z
LCB0eXBlX2RvbWFpbnMpIGlmIF9mXSkpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLl9n
ZW5lcmF0ZV9lbnVtX2Zvcl9wbGF0Zm9ybXMoKSkKICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCdc
bicuam9pbihbX2YgZm9yIF9mIGluIG1hcChzZWxmLl9nZW5lcmF0ZV9lbnVtcywgdHlwZV9kb21h
aW5zKSBpZiBfZl0pKQogICAgICAgICBzZWN0aW9ucy5hcHBlbmQoJ1xuJy5qb2luKFtfZiBmb3Ig
X2YgaW4gbWFwKHNlbGYuX2dlbmVyYXRlX3R5cGVzLCB0eXBlX2RvbWFpbnMpIGlmIF9mXSkpCiAK
QEAgLTEwMyw0MiArMTAyLDUxIEBAIGNsYXNzIE9iakNIZWFkZXJHZW5lcmF0b3IoT2JqQ0dlbmVy
YXRvcik6CiAgICAgICAgIGZvciBkZWNsYXJhdGlvbiBpbiBzZWxmLnR5cGVfZGVjbGFyYXRpb25z
X2Zvcl9kb21haW4oZG9tYWluKToKICAgICAgICAgICAgIGlmIChpc2luc3RhbmNlKGRlY2xhcmF0
aW9uLnR5cGUsIE9iamVjdFR5cGUpKToKICAgICAgICAgICAgICAgICBvYmpjX25hbWUgPSBzZWxm
Lm9iamNfbmFtZV9mb3JfdHlwZShkZWNsYXJhdGlvbi50eXBlKQotICAgICAgICAgICAgICAgIGxp
bmVzLmFwcGVuZCgnQGNsYXNzICVzOycgJSBvYmpjX25hbWUpCi0gICAgICAgIHJldHVybiAnXG4n
LmpvaW4obGluZXMpCisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYud3JhcF93aXRo
X2d1YXJkX2Zvcl9jb25kaXRpb24oZGVjbGFyYXRpb24uY29uZGl0aW9uLCAnQGNsYXNzICVzOycg
JSBvYmpjX25hbWUpKQorICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2Nv
bmRpdGlvbihkb21haW4uY29uZGl0aW9uLCAnXG4nLmpvaW4obGluZXMpKQogCiAgICAgZGVmIF9n
ZW5lcmF0ZV9lbnVtcyhzZWxmLCBkb21haW4pOgogICAgICAgICBsaW5lcyA9IFtdCiAKICAgICAg
ICAgIyBUeXBlIGVudW1zIGFuZCBtZW1iZXIgZW51bXMuCiAgICAgICAgIGZvciBkZWNsYXJhdGlv
biBpbiBzZWxmLnR5cGVfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4oZG9tYWluKToKKyAgICAgICAg
ICAgIGRlY2xhcmF0aW9uX2xpbmVzID0gW10KICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZGVj
bGFyYXRpb24udHlwZSwgRW51bVR5cGUpOgotICAgICAgICAgICAgICAgIGFkZF9uZXdsaW5lKGxp
bmVzKQotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1v
dXNfZW51bV9mb3JfZGVjbGFyYXRpb24oZG9tYWluLCBkZWNsYXJhdGlvbikpCisgICAgICAgICAg
ICAgICAgYWRkX25ld2xpbmUoZGVjbGFyYXRpb25fbGluZXMpCisgICAgICAgICAgICAgICAgZGVj
bGFyYXRpb25fbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2Zvcl9k
ZWNsYXJhdGlvbihkb21haW4sIGRlY2xhcmF0aW9uKSkKICAgICAgICAgICAgIGVsc2U6CiAgICAg
ICAgICAgICAgICAgZm9yIG1lbWJlciBpbiBkZWNsYXJhdGlvbi50eXBlX21lbWJlcnM6CiAgICAg
ICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UobWVtYmVyLnR5cGUsIEVudW1UeXBlKSBhbmQg
bWVtYmVyLnR5cGUuaXNfYW5vbnltb3VzOgotICAgICAgICAgICAgICAgICAgICAgICAgYWRkX25l
d2xpbmUobGluZXMpCi0gICAgICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5f
Z2VuZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX21lbWJlcihkb21haW4sIGRlY2xhcmF0aW9uLCBt
ZW1iZXIpKQorICAgICAgICAgICAgICAgICAgICAgICAgYWRkX25ld2xpbmUoZGVjbGFyYXRpb25f
bGluZXMpCisgICAgICAgICAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbl9saW5lcy5hcHBlbmQo
c2VsZi5fZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX21lbWJlcihkb21haW4sIGRlY2xhcmF0
aW9uLCBtZW1iZXIpKQorICAgICAgICAgICAgaWYgbGVuKGRlY2xhcmF0aW9uX2xpbmVzKToKKyAg
ICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRp
dGlvbihkZWNsYXJhdGlvbi5jb25kaXRpb24sICdcbicuam9pbihkZWNsYXJhdGlvbl9saW5lcykp
KQogCiAgICAgICAgICMgQW5vbnltb3VzIGNvbW1hbmQgZW51bXMuCiAgICAgICAgIGZvciBjb21t
YW5kIGluIHNlbGYuY29tbWFuZHNfZm9yX2RvbWFpbihkb21haW4pOgorICAgICAgICAgICAgY29t
bWFuZF9saW5lcyA9IFtdCiAgICAgICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQuY2Fs
bF9wYXJhbWV0ZXJzOgogICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocGFyYW1ldGVyLnR5
cGUsIEVudW1UeXBlKSBhbmQgcGFyYW1ldGVyLnR5cGUuaXNfYW5vbnltb3VzOgotICAgICAgICAg
ICAgICAgICAgICBhZGRfbmV3bGluZShsaW5lcykKLSAgICAgICAgICAgICAgICAgICAgbGluZXMu
YXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2Zvcl9wYXJhbWV0ZXIoZG9tYWlu
LCBjb21tYW5kLmNvbW1hbmRfbmFtZSwgcGFyYW1ldGVyKSkKKyAgICAgICAgICAgICAgICAgICAg
YWRkX25ld2xpbmUoY29tbWFuZF9saW5lcykKKyAgICAgICAgICAgICAgICAgICAgY29tbWFuZF9s
aW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX3BhcmFtZXRlcihk
b21haW4sIGNvbW1hbmQuY29tbWFuZF9uYW1lLCBwYXJhbWV0ZXIpKQogICAgICAgICAgICAgZm9y
IHBhcmFtZXRlciBpbiBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzOgogICAgICAgICAgICAgICAg
IGlmIGlzaW5zdGFuY2UocGFyYW1ldGVyLnR5cGUsIEVudW1UeXBlKSBhbmQgcGFyYW1ldGVyLnR5
cGUuaXNfYW5vbnltb3VzOgotICAgICAgICAgICAgICAgICAgICBhZGRfbmV3bGluZShsaW5lcykK
LSAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255bW91
c19lbnVtX2Zvcl9wYXJhbWV0ZXIoZG9tYWluLCBjb21tYW5kLmNvbW1hbmRfbmFtZSwgcGFyYW1l
dGVyKSkKKyAgICAgICAgICAgICAgICAgICAgYWRkX25ld2xpbmUoY29tbWFuZF9saW5lcykKKyAg
ICAgICAgICAgICAgICAgICAgY29tbWFuZF9saW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5v
bnltb3VzX2VudW1fZm9yX3BhcmFtZXRlcihkb21haW4sIGNvbW1hbmQuY29tbWFuZF9uYW1lLCBw
YXJhbWV0ZXIpKQorICAgICAgICAgICAgaWYgbGVuKGNvbW1hbmRfbGluZXMpOgorICAgICAgICAg
ICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGNv
bW1hbmQuY29uZGl0aW9uLCAnXG4nLmpvaW4oY29tbWFuZF9saW5lcykpKQogCiAgICAgICAgICMg
QW5vbnltb3VzIGV2ZW50IGVudW1zLgogICAgICAgICBmb3IgZXZlbnQgaW4gc2VsZi5ldmVudHNf
Zm9yX2RvbWFpbihkb21haW4pOgorICAgICAgICAgICAgZXZlbnRfbGluZXMgPSBbXQogICAgICAg
ICAgICAgZm9yIHBhcmFtZXRlciBpbiBldmVudC5ldmVudF9wYXJhbWV0ZXJzOgogICAgICAgICAg
ICAgICAgIGlmIGlzaW5zdGFuY2UocGFyYW1ldGVyLnR5cGUsIEVudW1UeXBlKSBhbmQgcGFyYW1l
dGVyLnR5cGUuaXNfYW5vbnltb3VzOgotICAgICAgICAgICAgICAgICAgICBhZGRfbmV3bGluZShs
aW5lcykKLSAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fu
b255bW91c19lbnVtX2Zvcl9wYXJhbWV0ZXIoZG9tYWluLCBldmVudC5ldmVudF9uYW1lLCBwYXJh
bWV0ZXIpKQorICAgICAgICAgICAgICAgICAgICBhZGRfbmV3bGluZShldmVudF9saW5lcykKKyAg
ICAgICAgICAgICAgICAgICAgZXZlbnRfbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255
bW91c19lbnVtX2Zvcl9wYXJhbWV0ZXIoZG9tYWluLCBldmVudC5ldmVudF9uYW1lLCBwYXJhbWV0
ZXIpKQorICAgICAgICAgICAgaWYgbGVuKGV2ZW50X2xpbmVzKToKKyAgICAgICAgICAgICAgICBs
aW5lcy5hcHBlbmQoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihldmVudC5jb25k
aXRpb24sICdcbicuam9pbihldmVudF9saW5lcykpKQogCi0gICAgICAgIHJldHVybiAnXG4nLmpv
aW4obGluZXMpCisgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0
aW9uKGRvbWFpbi5jb25kaXRpb24sICdcbicuam9pbihsaW5lcykpCiAKICAgICBkZWYgX2dlbmVy
YXRlX3R5cGVzKHNlbGYsIGRvbWFpbik6CiAgICAgICAgIGxpbmVzID0gW10KQEAgLTE0NywxMiAr
MTU1LDcgQEAgY2xhc3MgT2JqQ0hlYWRlckdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKICAgICAg
ICAgICAgIGlmIGlzaW5zdGFuY2UoZGVjbGFyYXRpb24udHlwZSwgT2JqZWN0VHlwZSk6CiAgICAg
ICAgICAgICAgICAgYWRkX25ld2xpbmUobGluZXMpCiAgICAgICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKHNlbGYuX2dlbmVyYXRlX3R5cGVfaW50ZXJmYWNlKGRvbWFpbiwgZGVjbGFyYXRpb24pKQot
ICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQotCi0gICAgZGVmIF9nZW5lcmF0ZV9lbnVt
X2Zvcl9wbGF0Zm9ybXMoc2VsZik6Ci0gICAgICAgIG9iamNfZW51bV9uYW1lID0gJyVzUGxhdGZv
cm0nICUgc2VsZi5vYmpjX3ByZWZpeCgpCi0gICAgICAgIGVudW1fdmFsdWVzID0gW3BsYXRmb3Jt
Lm5hbWUgZm9yIHBsYXRmb3JtIGluIFBsYXRmb3Jtc10KLSAgICAgICAgcmV0dXJuIHNlbGYuX2dl
bmVyYXRlX2VudW0ob2JqY19lbnVtX25hbWUsIGVudW1fdmFsdWVzKQorICAgICAgICByZXR1cm4g
c2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9uLCAnXG4n
LmpvaW4obGluZXMpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfZGVj
bGFyYXRpb24oc2VsZiwgZG9tYWluLCBkZWNsYXJhdGlvbik6CiAgICAgICAgIG9iamNfZW51bV9u
YW1lID0gc2VsZi5vYmpjX2VudW1fbmFtZV9mb3JfYW5vbnltb3VzX2VudW1fZGVjbGFyYXRpb24o
ZGVjbGFyYXRpb24pCkBAIC0xOTQsNyArMTk3LDcgQEAgY2xhc3MgT2JqQ0hlYWRlckdlbmVyYXRv
cihPYmpDR2VuZXJhdG9yKToKICAgICAgICAgZm9yIG1lbWJlciBpbiBvcHRpb25hbF9tZW1iZXJz
OgogICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcvKiBvcHRpb25hbCAqLyAnICsgc2VsZi5fZ2Vu
ZXJhdGVfbWVtYmVyX3Byb3BlcnR5KGRlY2xhcmF0aW9uLCBtZW1iZXIpKQogICAgICAgICBsaW5l
cy5hcHBlbmQoJ0BlbmQnKQotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorICAgICAg
ICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihkZWNsYXJhdGlvbi5j
b25kaXRpb24sICdcbicuam9pbihsaW5lcykpCiAKICAgICBkZWYgX2dlbmVyYXRlX2luaXRfbWV0
aG9kX2Zvcl9yZXF1aXJlZF9tZW1iZXJzKHNlbGYsIGRvbWFpbiwgZGVjbGFyYXRpb24sIHJlcXVp
cmVkX21lbWJlcnMpOgogICAgICAgICBwYWlycyA9IFtdCkBAIC0yMTksNyArMjIyLDcgQEAgY2xh
c3MgT2JqQ0hlYWRlckdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKICAgICAgICAgICAgIGZvciBj
b21tYW5kIGluIHNlbGYuY29tbWFuZHNfZm9yX2RvbWFpbihkb21haW4pOgogICAgICAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9zaW5nbGVfY29tbWFuZF9wcm90b2NvbChk
b21haW4sIGNvbW1hbmQpKQogICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdAZW5kJykKLSAgICAg
ICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRo
X2d1YXJkX2Zvcl9jb25kaXRpb24oZG9tYWluLmNvbmRpdGlvbiwgJ1xuJy5qb2luKGxpbmVzKSkK
IAogICAgIGRlZiBfZ2VuZXJhdGVfc2luZ2xlX2NvbW1hbmRfcHJvdG9jb2woc2VsZiwgZG9tYWlu
LCBjb21tYW5kKToKICAgICAgICAgcGFpcnMgPSBbXQpAQCAtMjI4LDcgKzIzMSw3IEBAIGNsYXNz
IE9iakNIZWFkZXJHZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgICAgIGZvciBwYXJhbWV0
ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6CiAgICAgICAgICAgICBwYXJhbV9uYW1lID0g
cGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCiAgICAgICAgICAgICBwYWlycy5hcHBlbmQoJyVzOigl
cyklcycgJSAocGFyYW1fbmFtZSwgc2VsZi5vYmpjX3R5cGVfZm9yX3BhcmFtKGRvbWFpbiwgY29t
bWFuZC5jb21tYW5kX25hbWUsIHBhcmFtZXRlciksIHBhcmFtX25hbWUpKQotICAgICAgICByZXR1
cm4gJy0gKHZvaWQpJXNXaXRoJXM7JyAlIChjb21tYW5kLmNvbW1hbmRfbmFtZSwgJyAnLmpvaW4o
cGFpcnMpKQorICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlv
bihjb21tYW5kLmNvbmRpdGlvbiwgJy0gKHZvaWQpJXNXaXRoJXM7JyAlIChjb21tYW5kLmNvbW1h
bmRfbmFtZSwgJyAnLmpvaW4ocGFpcnMpKSkKIAogICAgIGRlZiBfY2FsbGJhY2tfYmxvY2tfZm9y
X2NvbW1hbmQoc2VsZiwgZG9tYWluLCBjb21tYW5kKToKICAgICAgICAgcGFpcnMgPSBbXQpAQCAt
MjQ5LDcgKzI1Miw3IEBAIGNsYXNzIE9iakNIZWFkZXJHZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6
CiAgICAgICAgICAgICBmb3IgZXZlbnQgaW4gZXZlbnRzOgogICAgICAgICAgICAgICAgIGxpbmVz
LmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9zaW5nbGVfZXZlbnRfaW50ZXJmYWNlKGRvbWFpbiwgZXZl
bnQpKQogICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdAZW5kJykKLSAgICAgICAgcmV0dXJuICdc
bicuam9pbihsaW5lcykKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9j
b25kaXRpb24oZG9tYWluLmNvbmRpdGlvbiwgJ1xuJy5qb2luKGxpbmVzKSkKIAogICAgIGRlZiBf
Z2VuZXJhdGVfc2luZ2xlX2V2ZW50X2ludGVyZmFjZShzZWxmLCBkb21haW4sIGV2ZW50KToKICAg
ICAgICAgaWYgbm90IGV2ZW50LmV2ZW50X3BhcmFtZXRlcnM6CkBAIC0yNTksNCArMjYyLDQgQEAg
Y2xhc3MgT2JqQ0hlYWRlckdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKICAgICAgICAgICAgIHBh
cmFtX25hbWUgPSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKICAgICAgICAgICAgIHBhaXJzLmFw
cGVuZCgnJXM6KCVzKSVzJyAlIChwYXJhbV9uYW1lLCBzZWxmLm9iamNfdHlwZV9mb3JfcGFyYW0o
ZG9tYWluLCBldmVudC5ldmVudF9uYW1lLCBwYXJhbWV0ZXIpLCBwYXJhbV9uYW1lKSkKICAgICAg
ICAgcGFpcnNbMF0gPSB1Y2ZpcnN0KHBhaXJzWzBdKQotICAgICAgICByZXR1cm4gJy0gKHZvaWQp
JXNXaXRoJXM7JyAlIChldmVudC5ldmVudF9uYW1lLCAnICcuam9pbihwYWlycykpCisgICAgICAg
IHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGV2ZW50LmNvbmRpdGlv
biwgJy0gKHZvaWQpJXNXaXRoJXM7JyAlIChldmVudC5ldmVudF9uYW1lLCAnICcuam9pbihwYWly
cykpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBlX2NvbnZlcnNpb25zX2hlYWRlci5w
eSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRlX29iamNfcHJvdG9jb2xfdHlwZV9jb252ZXJzaW9uc19oZWFkZXIucHkKaW5kZXggMjU3MWY0
YjIyYTguLjU0MDE1MWE1MWE5IDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVfY29udmVy
c2lvbnNfaGVhZGVyLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfcHJvdG9jb2xfdHlwZV9jb252ZXJzaW9uc19oZWFk
ZXIucHkKQEAgLTMxLDEyICszMSwxMiBAQCBmcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKIAog
dHJ5OgogICAgIGZyb20gLmdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yCi0gICAgZnJvbSAubW9k
ZWxzIGltcG9ydCBFbnVtVHlwZSwgRnJhbWV3b3JrcywgUGxhdGZvcm1zCisgICAgZnJvbSAubW9k
ZWxzIGltcG9ydCBFbnVtVHlwZSwgRnJhbWV3b3JrcwogICAgIGZyb20gLm9iamNfZ2VuZXJhdG9y
IGltcG9ydCBPYmpDR2VuZXJhdG9yCiAgICAgZnJvbSAub2JqY19nZW5lcmF0b3JfdGVtcGxhdGVz
IGltcG9ydCBPYmpDR2VuZXJhdG9yVGVtcGxhdGVzIGFzIE9iakNUZW1wbGF0ZXMKIGV4Y2VwdCBW
YWx1ZUVycm9yOgogICAgIGZyb20gZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IKLSAgICBmcm9t
IG1vZGVscyBpbXBvcnQgRW51bVR5cGUsIEZyYW1ld29ya3MsIFBsYXRmb3JtcworICAgIGZyb20g
bW9kZWxzIGltcG9ydCBFbnVtVHlwZSwgRnJhbWV3b3JrcwogICAgIGZyb20gb2JqY19nZW5lcmF0
b3IgaW1wb3J0IE9iakNHZW5lcmF0b3IKICAgICBmcm9tIG9iamNfZ2VuZXJhdG9yX3RlbXBsYXRl
cyBpbXBvcnQgT2JqQ0dlbmVyYXRvclRlbXBsYXRlcyBhcyBPYmpDVGVtcGxhdGVzCiAKQEAgLTc1
LDcgKzc1LDYgQEAgY2xhc3MgT2JqQ1Byb3RvY29sVHlwZUNvbnZlcnNpb25zSGVhZGVyR2VuZXJh
dG9yKE9iakNHZW5lcmF0b3IpOgogICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0
ZV9saWNlbnNlKCkpCiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShPYmpDVGVtcGxh
dGVzLlR5cGVDb252ZXJzaW9uc0hlYWRlclByZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFk
ZXJfYXJncykpCiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShPYmpDVGVtcGxhdGVz
LlR5cGVDb252ZXJzaW9uc0hlYWRlclN0YW5kYXJkKS5zdWJzdGl0dXRlKE5vbmUpKQotICAgICAg
ICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfZW51bV9jb252ZXJzaW9uX2Zvcl9wbGF0
Zm9ybXMoKSkKICAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKGxpc3QobWFwKHNlbGYuX2dlbmVyYXRl
X2VudW1fY29udmVyc2lvbl9mdW5jdGlvbnMsIGRvbWFpbnMpKSkKICAgICAgICAgc2VjdGlvbnMu
YXBwZW5kKFRlbXBsYXRlKE9iakNUZW1wbGF0ZXMuVHlwZUNvbnZlcnNpb25zSGVhZGVyUG9zdGx1
ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCiAgICAgICAgIHJldHVybiAnXG5c
bicuam9pbihzZWN0aW9ucykKQEAgLTg1LDQyICs4NCw0MyBAQCBjbGFzcyBPYmpDUHJvdG9jb2xU
eXBlQ29udmVyc2lvbnNIZWFkZXJHZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAKICAgICAgICAg
IyBUeXBlIGVudW1zIGFuZCBtZW1iZXIgZW51bXMuCiAgICAgICAgIGZvciBkZWNsYXJhdGlvbiBp
biBzZWxmLnR5cGVfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4oZG9tYWluKToKKyAgICAgICAgICAg
IGRlY2xhcmF0aW9uX2xpbmVzID0gW10KICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZGVjbGFy
YXRpb24udHlwZSwgRW51bVR5cGUpOgotICAgICAgICAgICAgICAgIGFkZF9uZXdsaW5lKGxpbmVz
KQotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNf
ZW51bV9jb252ZXJzaW9uX2Zvcl9kZWNsYXJhdGlvbihkb21haW4sIGRlY2xhcmF0aW9uKSkKKyAg
ICAgICAgICAgICAgICBhZGRfbmV3bGluZShkZWNsYXJhdGlvbl9saW5lcykKKyAgICAgICAgICAg
ICAgICBkZWNsYXJhdGlvbl9saW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnltb3VzX2Vu
dW1fY29udmVyc2lvbl9mb3JfZGVjbGFyYXRpb24oZG9tYWluLCBkZWNsYXJhdGlvbikpCiAgICAg
ICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGZvciBtZW1iZXIgaW4gZGVjbGFyYXRpb24u
dHlwZV9tZW1iZXJzOgogICAgICAgICAgICAgICAgICAgICBpZiAoaXNpbnN0YW5jZShtZW1iZXIu
dHlwZSwgRW51bVR5cGUpIGFuZCBtZW1iZXIudHlwZS5pc19hbm9ueW1vdXMpOgotICAgICAgICAg
ICAgICAgICAgICAgICAgYWRkX25ld2xpbmUobGluZXMpCi0gICAgICAgICAgICAgICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fY29udmVyc2lvbl9m
b3JfbWVtYmVyKGRvbWFpbiwgZGVjbGFyYXRpb24sIG1lbWJlcikpCisgICAgICAgICAgICAgICAg
ICAgICAgICBhZGRfbmV3bGluZShkZWNsYXJhdGlvbl9saW5lcykKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGRlY2xhcmF0aW9uX2xpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNf
ZW51bV9jb252ZXJzaW9uX2Zvcl9tZW1iZXIoZG9tYWluLCBkZWNsYXJhdGlvbiwgbWVtYmVyKSkK
KyAgICAgICAgICAgIGlmIGxlbihkZWNsYXJhdGlvbl9saW5lcyk6CisgICAgICAgICAgICAgICAg
bGluZXMuYXBwZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZGVjbGFyYXRp
b24uY29uZGl0aW9uLCAnXG4nLmpvaW4oZGVjbGFyYXRpb25fbGluZXMpKSkKIAogICAgICAgICAj
IEFub255bW91cyBjb21tYW5kIGVudW1zLgogICAgICAgICBmb3IgY29tbWFuZCBpbiBzZWxmLmNv
bW1hbmRzX2Zvcl9kb21haW4oZG9tYWluKToKKyAgICAgICAgICAgIGNvbW1hbmRfbGluZXMgPSBb
XQogICAgICAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLmNhbGxfcGFyYW1ldGVyczoK
ICAgICAgICAgICAgICAgICBpZiAoaXNpbnN0YW5jZShwYXJhbWV0ZXIudHlwZSwgRW51bVR5cGUp
IGFuZCBwYXJhbWV0ZXIudHlwZS5pc19hbm9ueW1vdXMpOgotICAgICAgICAgICAgICAgICAgICBh
ZGRfbmV3bGluZShsaW5lcykKLSAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYu
X2dlbmVyYXRlX2Fub255bW91c19lbnVtX2NvbnZlcnNpb25fZm9yX3BhcmFtZXRlcihkb21haW4s
IGNvbW1hbmQuY29tbWFuZF9uYW1lLCBwYXJhbWV0ZXIpKQorICAgICAgICAgICAgICAgICAgICBh
ZGRfbmV3bGluZShjb21tYW5kX2xpbmVzKQorICAgICAgICAgICAgICAgICAgICBjb21tYW5kX2xp
bmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9jb252ZXJzaW9uX2Zvcl9w
YXJhbWV0ZXIoZG9tYWluLCBjb21tYW5kLmNvbW1hbmRfbmFtZSwgcGFyYW1ldGVyKSkKICAgICAg
ICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVyczoKICAgICAg
ICAgICAgICAgICBpZiAoaXNpbnN0YW5jZShwYXJhbWV0ZXIudHlwZSwgRW51bVR5cGUpIGFuZCBw
YXJhbWV0ZXIudHlwZS5pc19hbm9ueW1vdXMpOgotICAgICAgICAgICAgICAgICAgICBhZGRfbmV3
bGluZShsaW5lcykKLSAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVy
YXRlX2Fub255bW91c19lbnVtX2NvbnZlcnNpb25fZm9yX3BhcmFtZXRlcihkb21haW4sIGNvbW1h
bmQuY29tbWFuZF9uYW1lLCBwYXJhbWV0ZXIpKQorICAgICAgICAgICAgICAgICAgICBhZGRfbmV3
bGluZShjb21tYW5kX2xpbmVzKQorICAgICAgICAgICAgICAgICAgICBjb21tYW5kX2xpbmVzLmFw
cGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9jb252ZXJzaW9uX2Zvcl9wYXJhbWV0
ZXIoZG9tYWluLCBjb21tYW5kLmNvbW1hbmRfbmFtZSwgcGFyYW1ldGVyKSkKKyAgICAgICAgICAg
IGlmIGxlbihjb21tYW5kX2xpbmVzKToKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2Vs
Zi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihjb21tYW5kLmNvbmRpdGlvbiwgJ1xuJy5q
b2luKGNvbW1hbmRfbGluZXMpKSkKIAogICAgICAgICAjIEFub255bW91cyBldmVudCBlbnVtcy4K
ICAgICAgICAgZm9yIGV2ZW50IGluIHNlbGYuZXZlbnRzX2Zvcl9kb21haW4oZG9tYWluKToKKyAg
ICAgICAgICAgIGV2ZW50X2xpbmVzID0gW10KICAgICAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4g
ZXZlbnQuZXZlbnRfcGFyYW1ldGVyczoKICAgICAgICAgICAgICAgICBpZiAoaXNpbnN0YW5jZShw
YXJhbWV0ZXIudHlwZSwgRW51bVR5cGUpIGFuZCBwYXJhbWV0ZXIudHlwZS5pc19hbm9ueW1vdXMp
OgotICAgICAgICAgICAgICAgICAgICBhZGRfbmV3bGluZShsaW5lcykKLSAgICAgICAgICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2NvbnZlcnNp
b25fZm9yX3BhcmFtZXRlcihkb21haW4sIGV2ZW50LmV2ZW50X25hbWUsIHBhcmFtZXRlcikpCisg
ICAgICAgICAgICAgICAgICAgIGFkZF9uZXdsaW5lKGV2ZW50X2xpbmVzKQorICAgICAgICAgICAg
ICAgICAgICBldmVudF9saW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1f
Y29udmVyc2lvbl9mb3JfcGFyYW1ldGVyKGRvbWFpbiwgZXZlbnQuZXZlbnRfbmFtZSwgcGFyYW1l
dGVyKSkKKyAgICAgICAgICAgIGlmIGxlbihldmVudF9saW5lcyk6CisgICAgICAgICAgICAgICAg
bGluZXMuYXBwZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZXZlbnQuY29u
ZGl0aW9uLCAnXG4nLmpvaW4oZXZlbnRfbGluZXMpKSkKIAotICAgICAgICByZXR1cm4gJ1xuJy5q
b2luKGxpbmVzKQotCi0gICAgZGVmIF9nZW5lcmF0ZV9lbnVtX2NvbnZlcnNpb25fZm9yX3BsYXRm
b3JtcyhzZWxmKToKLSAgICAgICAgb2JqY19lbnVtX25hbWUgPSAnJXNQbGF0Zm9ybScgJSBzZWxm
Lm9iamNfcHJlZml4KCkKLSAgICAgICAgZW51bV92YWx1ZXMgPSBbcGxhdGZvcm0ubmFtZSBmb3Ig
cGxhdGZvcm0gaW4gUGxhdGZvcm1zXQotICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIGxpbmVz
LmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9lbnVtX29iamNfdG9fcHJvdG9jb2xfc3RyaW5nKG9iamNf
ZW51bV9uYW1lLCBlbnVtX3ZhbHVlcykpCi0gICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5l
cmF0ZV9lbnVtX2Zyb21fcHJvdG9jb2xfc3RyaW5nKG9iamNfZW51bV9uYW1lLCBlbnVtX3ZhbHVl
cykpCi0gICAgICAgIHJldHVybiAnXG5cbicuam9pbihsaW5lcykKKyAgICAgICAgcmV0dXJuIHNl
bGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZG9tYWluLmNvbmRpdGlvbiwgJ1xuJy5q
b2luKGxpbmVzKSkKIAogICAgIGRlZiBfZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fY29udmVyc2lv
bl9mb3JfZGVjbGFyYXRpb24oc2VsZiwgZG9tYWluLCBkZWNsYXJhdGlvbik6CiAgICAgICAgIG9i
amNfZW51bV9uYW1lID0gc2VsZi5vYmpjX2VudW1fbmFtZV9mb3JfYW5vbnltb3VzX2VudW1fZGVj
bGFyYXRpb24oZGVjbGFyYXRpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVfY29u
dmVyc2lvbnNfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVfY29udmVyc2lv
bnNfaW1wbGVtZW50YXRpb24ucHkKaW5kZXggYTM2ZDgxM2VjZWUuLmZiZDEzMWE2NmUyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9n
ZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVfY29udmVyc2lvbnNfaW1wbGVtZW50YXRpb24ucHkK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2Vu
ZXJhdGVfb2JqY19wcm90b2NvbF90eXBlX2NvbnZlcnNpb25zX2ltcGxlbWVudGF0aW9uLnB5CkBA
IC04MywxNSArODMsMTYgQEAgY2xhc3MgT2JqQ1Byb3RvY29sVHlwZUNvbnZlcnNpb25zSW1wbGVt
ZW50YXRpb25HZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgZGVmIF9nZW5lcmF0ZV90eXBl
X2ZhY3RvcnlfY2F0ZWdvcnlfaW50ZXJmYWNlKHNlbGYsIGRvbWFpbnMpOgogICAgICAgICBsaW5l
cyA9IFtdCiAgICAgICAgIGZvciBkb21haW4gaW4gZG9tYWluczoKLSAgICAgICAgICAgIGxpbmVz
LmFwcGVuZCgnQGludGVyZmFjZSAlc1R5cGVDb252ZXJzaW9ucyAoJXNEb21haW4pJyAlIChzZWxm
LnByb3RvY29sX25hbWUoKSwgZG9tYWluLmRvbWFpbl9uYW1lKSkKLSAgICAgICAgICAgIGxpbmVz
LmFwcGVuZCgnJykKKyAgICAgICAgICAgIGRvbWFpbl9saW5lcyA9IFtdCisgICAgICAgICAgICBk
b21haW5fbGluZXMuYXBwZW5kKCdAaW50ZXJmYWNlICVzVHlwZUNvbnZlcnNpb25zICglc0RvbWFp
biknICUgKHNlbGYucHJvdG9jb2xfbmFtZSgpLCBkb21haW4uZG9tYWluX25hbWUpKQorICAgICAg
ICAgICAgYWRkX25ld2xpbmUoZG9tYWluX2xpbmVzKQogCiAgICAgICAgICAgICBmb3IgZGVjbGFy
YXRpb24gaW4gc2VsZi50eXBlX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluKGRvbWFpbik6Ci0gICAg
ICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX3R5cGVfZmFjdG9yeV9tZXRo
b2RfZGVjbGFyYXRpb24oZG9tYWluLCBkZWNsYXJhdGlvbikpCi0KLSAgICAgICAgICAgIGFkZF9u
ZXdsaW5lKGxpbmVzKQotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdAZW5kJykKKyAgICAgICAg
ICAgICAgICBkb21haW5fbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX3R5cGVfZmFjdG9yeV9t
ZXRob2RfZGVjbGFyYXRpb24oZG9tYWluLCBkZWNsYXJhdGlvbikpCiAKKyAgICAgICAgICAgIGFk
ZF9uZXdsaW5lKGRvbWFpbl9saW5lcykKKyAgICAgICAgICAgIGRvbWFpbl9saW5lcy5hcHBlbmQo
J0BlbmQnKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zv
cl9jb25kaXRpb24oZG9tYWluLmNvbmRpdGlvbiwgJ1xuJy5qb2luKGRvbWFpbl9saW5lcykpKQog
ICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQogCiAgICAgZGVmIF9nZW5lcmF0ZV90eXBl
X2ZhY3RvcnlfbWV0aG9kX2RlY2xhcmF0aW9uKHNlbGYsIGRvbWFpbiwgZGVjbGFyYXRpb24pOgpA
QCAtMTAwLDIwICsxMDEsMjMgQEAgY2xhc3MgT2JqQ1Byb3RvY29sVHlwZUNvbnZlcnNpb25zSW1w
bGVtZW50YXRpb25HZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgICAgICAgICByZXNvbHZl
ZF90eXBlID0gcmVzb2x2ZWRfdHlwZS5hbGlhc2VkX3R5cGUKICAgICAgICAgaWYgaXNpbnN0YW5j
ZShyZXNvbHZlZF90eXBlLCAoT2JqZWN0VHlwZSwgQXJyYXlUeXBlLCBQcmltaXRpdmVUeXBlKSk6
CiAgICAgICAgICAgICBvYmpjX3R5cGUgPSBzZWxmLm9iamNfY2xhc3NfZm9yX3R5cGUocmVzb2x2
ZWRfdHlwZSkKLSAgICAgICAgICAgIHJldHVybiAnKyAodm9pZClfcGFyc2UlczooJXMgKiopb3V0
VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7JyAlIChkZWNsYXJhdGlvbi50eXBlLnJhd19u
YW1lKCksIG9iamNfdHlwZSkKKyAgICAgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFy
ZF9mb3JfY29uZGl0aW9uKGRlY2xhcmF0aW9uLmNvbmRpdGlvbiwgJysgKHZvaWQpX3BhcnNlJXM6
KCVzICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOycgJSAoZGVjbGFyYXRpb24u
dHlwZS5yYXdfbmFtZSgpLCBvYmpjX3R5cGUpKQogICAgICAgICBpZiBpc2luc3RhbmNlKHJlc29s
dmVkX3R5cGUsIEVudW1UeXBlKToKLSAgICAgICAgICAgIHJldHVybiAnKyAodm9pZClfcGFyc2Ul
czooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7JyAlIGRlY2xh
cmF0aW9uLnR5cGUucmF3X25hbWUoKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRo
X2d1YXJkX2Zvcl9jb25kaXRpb24oZGVjbGFyYXRpb24uY29uZGl0aW9uLCAnKyAodm9pZClfcGFy
c2UlczooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7JyAlIGRl
Y2xhcmF0aW9uLnR5cGUucmF3X25hbWUoKSkKIAogICAgIGRlZiBfZ2VuZXJhdGVfdHlwZV9mYWN0
b3J5X2NhdGVnb3J5X2ltcGxlbWVudGF0aW9uKHNlbGYsIGRvbWFpbnMpOgogICAgICAgICBsaW5l
cyA9IFtdCiAgICAgICAgIGZvciBkb21haW4gaW4gZG9tYWluczoKLSAgICAgICAgICAgIGxpbmVz
LmFwcGVuZCgnQGltcGxlbWVudGF0aW9uICVzVHlwZUNvbnZlcnNpb25zICglc0RvbWFpbiknICUg
KHNlbGYucHJvdG9jb2xfbmFtZSgpLCBkb21haW4uZG9tYWluX25hbWUpKQotICAgICAgICAgICAg
bGluZXMuYXBwZW5kKCcnKQorICAgICAgICAgICAgZG9tYWluX2xpbmVzID0gW10KKyAgICAgICAg
ICAgIGRvbWFpbl9saW5lcy5hcHBlbmQoJ0BpbXBsZW1lbnRhdGlvbiAlc1R5cGVDb252ZXJzaW9u
cyAoJXNEb21haW4pJyAlIChzZWxmLnByb3RvY29sX25hbWUoKSwgZG9tYWluLmRvbWFpbl9uYW1l
KSkKKyAgICAgICAgICAgIGFkZF9uZXdsaW5lKGRvbWFpbl9saW5lcykKIAogICAgICAgICAgICAg
Zm9yIGRlY2xhcmF0aW9uIGluIHNlbGYudHlwZV9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbihkb21h
aW4pOgotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV90eXBlX2Zh
Y3RvcnlfbWV0aG9kX2ltcGxlbWVudGF0aW9uKGRvbWFpbiwgZGVjbGFyYXRpb24pKQotICAgICAg
ICAgICAgICAgIGFkZF9uZXdsaW5lKGxpbmVzKQotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdA
ZW5kJykKKyAgICAgICAgICAgICAgICBkb21haW5fbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRl
X3R5cGVfZmFjdG9yeV9tZXRob2RfaW1wbGVtZW50YXRpb24oZG9tYWluLCBkZWNsYXJhdGlvbikp
CisgICAgICAgICAgICAgICAgYWRkX25ld2xpbmUoZG9tYWluX2xpbmVzKQorCisgICAgICAgICAg
ICBkb21haW5fbGluZXMuYXBwZW5kKCdAZW5kJykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZChz
ZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRvbWFpbi5jb25kaXRpb24sICdcbicu
am9pbihkb21haW5fbGluZXMpKSkKICAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKIAog
ICAgIGRlZiBfZ2VuZXJhdGVfdHlwZV9mYWN0b3J5X21ldGhvZF9pbXBsZW1lbnRhdGlvbihzZWxm
LCBkb21haW4sIGRlY2xhcmF0aW9uKToKQEAgLTE0MSw0ICsxNDUsNCBAQCBjbGFzcyBPYmpDUHJv
dG9jb2xUeXBlQ29udmVyc2lvbnNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihPYmpDR2VuZXJhdG9y
KToKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFE
X1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOycpCiAgICAgICAgICAgICBsaW5l
cy5hcHBlbmQoJyAgICAqb3V0VmFsdWUgPSBbWyVzIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5
bG9hZF07JyAlIChvYmpjX2NsYXNzKSkKICAgICAgICAgbGluZXMuYXBwZW5kKCd9JykKLSAgICAg
ICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRo
X2d1YXJkX2Zvcl9jb25kaXRpb24oZGVjbGFyYXRpb24uY29uZGl0aW9uLCAnXG4nLmpvaW4obGlu
ZXMpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weSBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X29iamNfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkKaW5kZXggYzg3MDg4MWFiZDgu
LjAwZDdhMGFmZTdkIDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0
aW9uLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2dlbmVyYXRlX29iamNfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkKQEAgLTkx
LDcgKzkxLDcgQEAgY2xhc3MgT2JqQ1Byb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRv
cihPYmpDR2VuZXJhdG9yKToKICAgICAgICAgICAgIGlmIChpc2luc3RhbmNlKGRlY2xhcmF0aW9u
LnR5cGUsIE9iamVjdFR5cGUpKToKICAgICAgICAgICAgICAgICBhZGRfbmV3bGluZShsaW5lcykK
ICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV90eXBlX2ltcGxlbWVu
dGF0aW9uKGRvbWFpbiwgZGVjbGFyYXRpb24pKQotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxp
bmVzKQorICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihk
b21haW4uY29uZGl0aW9uLCAnXG4nLmpvaW4obGluZXMpKQogCiAgICAgZGVmIGdlbmVyYXRlX3R5
cGVfaW1wbGVtZW50YXRpb24oc2VsZiwgZG9tYWluLCBkZWNsYXJhdGlvbik6CiAgICAgICAgIGxp
bmVzID0gW10KQEAgLTExMiw3ICsxMTIsNyBAQCBjbGFzcyBPYmpDUHJvdG9jb2xUeXBlc0ltcGxl
bWVudGF0aW9uR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKHNlbGYuX2dlbmVyYXRlX2dldHRlcl9mb3JfbWVtYmVyKGRvbWFpbiwgZGVjbGFyYXRpb24s
IG1lbWJlcikpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKICAgICAgICAgbGluZXMuYXBwZW5k
KCdAZW5kJykKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKyAgICAgICAgcmV0dXJu
IHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZGVjbGFyYXRpb24uY29uZGl0aW9u
LCAnXG4nLmpvaW4obGluZXMpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9pbml0X21ldGhvZF9mb3Jf
cHJvdG9jb2xfb2JqZWN0KHNlbGYsIGRvbWFpbiwgZGVjbGFyYXRpb24pOgogICAgICAgICBsaW5l
cyA9IFtdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9nZW5lcmF0b3IucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3IucHkKaW5kZXggOGMyZmJiOGJjNTIuLjk0ZDE4ZDlk
NjYxIDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9nZW5lcmF0b3IucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yLnB5CkBAIC0zMSwxMCArMzEsMTAgQEAgZnJvbSBz
dHJpbmcgaW1wb3J0IFRlbXBsYXRlCiAKIHRyeToKICAgICBmcm9tIC5nZW5lcmF0b3JfdGVtcGxh
dGVzIGltcG9ydCBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgVGVtcGxhdGVzCi0gICAgZnJvbSAubW9k
ZWxzIGltcG9ydCBQcmltaXRpdmVUeXBlLCBPYmplY3RUeXBlLCBBcnJheVR5cGUsIEVudW1UeXBl
LCBBbGlhc2VkVHlwZSwgRnJhbWV3b3JrcywgUGxhdGZvcm1zCisgICAgZnJvbSAubW9kZWxzIGlt
cG9ydCBQcmltaXRpdmVUeXBlLCBPYmplY3RUeXBlLCBBcnJheVR5cGUsIEVudW1UeXBlLCBBbGlh
c2VkVHlwZSwgRnJhbWV3b3JrcwogZXhjZXB0IFZhbHVlRXJyb3I6CiAgICAgZnJvbSBnZW5lcmF0
b3JfdGVtcGxhdGVzIGltcG9ydCBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgVGVtcGxhdGVzCi0gICAg
ZnJvbSBtb2RlbHMgaW1wb3J0IFByaW1pdGl2ZVR5cGUsIE9iamVjdFR5cGUsIEFycmF5VHlwZSwg
RW51bVR5cGUsIEFsaWFzZWRUeXBlLCBGcmFtZXdvcmtzLCBQbGF0Zm9ybXMKKyAgICBmcm9tIG1v
ZGVscyBpbXBvcnQgUHJpbWl0aXZlVHlwZSwgT2JqZWN0VHlwZSwgQXJyYXlUeXBlLCBFbnVtVHlw
ZSwgQWxpYXNlZFR5cGUsIEZyYW1ld29ya3MKIAogbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2ds
b2JhbCcpCiAKQEAgLTk0LDM1ICs5NCwyOCBAQCBfVFlQRVNfV0lUSF9PUEVOX0ZJRUxEUyA9IHsK
IH0KIAogY2xhc3MgR2VuZXJhdG9yOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlbCwgcGxh
dGZvcm0sIGlucHV0X2ZpbGVwYXRoKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWwsIGlu
cHV0X2ZpbGVwYXRoKToKICAgICAgICAgc2VsZi5fbW9kZWwgPSBtb2RlbAotICAgICAgICBzZWxm
Ll9wbGF0Zm9ybSA9IHBsYXRmb3JtCiAgICAgICAgIHNlbGYuX2lucHV0X2ZpbGVwYXRoID0gaW5w
dXRfZmlsZXBhdGgKICAgICAgICAgc2VsZi5fc2V0dGluZ3MgPSB7fQogCiAgICAgZGVmIG1vZGVs
KHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5fbW9kZWwKIAotICAgIGRlZiBwbGF0Zm9ybShz
ZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX3BsYXRmb3JtCi0KICAgICBkZWYgc2V0X2dlbmVy
YXRvcl9zZXR0aW5nKHNlbGYsIGtleSwgdmFsdWUpOgogICAgICAgICBzZWxmLl9zZXR0aW5nc1tr
ZXldID0gdmFsdWUKIAotICAgIGRlZiBjYW5fZ2VuZXJhdGVfcGxhdGZvcm0oc2VsZiwgbW9kZWxf
cGxhdGZvcm0pOgotICAgICAgICByZXR1cm4gbW9kZWxfcGxhdGZvcm0gaXMgUGxhdGZvcm1zLkdl
bmVyaWMgb3Igc2VsZi5fcGxhdGZvcm0gaXMgUGxhdGZvcm1zLkFsbCBvciBtb2RlbF9wbGF0Zm9y
bSBpcyBzZWxmLl9wbGF0Zm9ybQotCiAgICAgZGVmIHZlcnNpb25fZm9yX2RvbWFpbihzZWxmLCBk
b21haW4pOgogICAgICAgICByZXR1cm4gZG9tYWluLnZlcnNpb24oKQogCiAgICAgZGVmIHR5cGVf
ZGVjbGFyYXRpb25zX2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToKLSAgICAgICAgcmV0dXJuIFt0
eXBlX2RlY2xhcmF0aW9uIGZvciB0eXBlX2RlY2xhcmF0aW9uIGluIGRvbWFpbi5hbGxfdHlwZV9k
ZWNsYXJhdGlvbnMoKSBpZiBzZWxmLmNhbl9nZW5lcmF0ZV9wbGF0Zm9ybSh0eXBlX2RlY2xhcmF0
aW9uLnBsYXRmb3JtKV0KKyAgICAgICAgcmV0dXJuIGRvbWFpbi5hbGxfdHlwZV9kZWNsYXJhdGlv
bnMoKQogCiAgICAgZGVmIGNvbW1hbmRzX2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToKLSAgICAg
ICAgcmV0dXJuIFtjb21tYW5kIGZvciBjb21tYW5kIGluIGRvbWFpbi5hbGxfY29tbWFuZHMoKSBp
ZiBzZWxmLmNhbl9nZW5lcmF0ZV9wbGF0Zm9ybShjb21tYW5kLnBsYXRmb3JtKV0KKyAgICAgICAg
cmV0dXJuIGRvbWFpbi5hbGxfY29tbWFuZHMoKQogCiAgICAgZGVmIGV2ZW50c19mb3JfZG9tYWlu
KHNlbGYsIGRvbWFpbik6Ci0gICAgICAgIHJldHVybiBbZXZlbnQgZm9yIGV2ZW50IGluIGRvbWFp
bi5hbGxfZXZlbnRzKCkgaWYgc2VsZi5jYW5fZ2VuZXJhdGVfcGxhdGZvcm0oZXZlbnQucGxhdGZv
cm0pXQorICAgICAgICByZXR1cm4gZG9tYWluLmFsbF9ldmVudHMoKQogCiAgICAgIyBUaGUgZ29v
ZnkgbmFtZSBpcyB0byBkaXNhbWJpZ3VhdGUgZ2VuZXJhdG9yIHNldHRpbmdzIGZyb20gZnJhbWV3
b3JrIHNldHRpbmdzLgogICAgIGRlZiBnZXRfZ2VuZXJhdG9yX3NldHRpbmcoc2VsZiwga2V5LCBk
ZWZhdWx0PU5vbmUpOgpAQCAtMjY3LDIyICsyNjAsMTUgQEAgY2xhc3MgR2VuZXJhdG9yOgogICAg
ICAgICBzZWxmLl9hc3NpZ25lZF9lbnVtX3ZhbHVlcy5hcHBlbmQoZW51bV92YWx1ZSkKIAogICAg
ICMgTWlzY2VsbGFuZW91cyB0ZXh0IG1hbmlwdWxhdGlvbiByb3V0aW5lcy4KLSAgICBkZWYgd3Jh
cF93aXRoX2d1YXJkX2Zvcl9kb21haW4oc2VsZiwgZG9tYWluLCB0ZXh0KToKLSAgICAgICAgaWYg
c2VsZi5tb2RlbCgpLmZyYW1ld29yayBpcyBGcmFtZXdvcmtzLldlYkluc3BlY3RvcjoKLSAgICAg
ICAgICAgIHJldHVybiB0ZXh0Ci0gICAgICAgIGd1YXJkID0gZG9tYWluLmZlYXR1cmVfZ3VhcmQK
LSAgICAgICAgaWYgZ3VhcmQ6Ci0gICAgICAgICAgICByZXR1cm4gR2VuZXJhdG9yLndyYXBfd2l0
aF9ndWFyZChndWFyZCwgdGV4dCkKKyAgICBkZWYgd3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRp
b24oc2VsZiwgY29uZGl0aW9uLCB0ZXh0KToKKyAgICAgICAgaWYgY29uZGl0aW9uOgorICAgICAg
ICAgICAgcmV0dXJuICdcbicuam9pbihbCisgICAgICAgICAgICAgICAgJyNpZiAlcycgJSBjb25k
aXRpb24sCisgICAgICAgICAgICAgICAgdGV4dCwKKyAgICAgICAgICAgICAgICAnI2VuZGlmIC8v
ICVzJyAlIGNvbmRpdGlvbiwKKyAgICAgICAgICAgIF0pCiAgICAgICAgIHJldHVybiB0ZXh0CiAK
LSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIHdyYXBfd2l0aF9ndWFyZChndWFyZCwgdGV4dCk6
Ci0gICAgICAgIHJldHVybiAnXG4nLmpvaW4oWwotICAgICAgICAgICAgJyNpZiAlcycgJSBndWFy
ZCwKLSAgICAgICAgICAgIHRleHQsCi0gICAgICAgICAgICAnI2VuZGlmIC8vICVzJyAlIGd1YXJk
LAotICAgICAgICBdKQotCiAgICAgQHN0YXRpY21ldGhvZAogICAgIGRlZiBzdHlsaXplZF9uYW1l
X2Zvcl9lbnVtX3ZhbHVlKGVudW1fdmFsdWUpOgogICAgICAgICByZWdleCA9ICcoJXMpJyAlICJ8
Ii5qb2luKF9BTFdBWVNfU1BFQ0lBTENBU0VEX0VOVU1fVkFMVUVfU1VCU1RSSU5HUykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL21v
ZGVscy5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L21vZGVscy5weQppbmRleCA2ZDk3YTA5M2MzNC4uMWRmMmJkZjY2NWEgMTAwNzU1Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL21vZGVscy5weQor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9tb2Rl
bHMucHkKQEAgLTEzNiw0MSArMTM2LDYgQEAgY2xhc3MgRnJhbWV3b3JrczoKICAgICBUZXN0ID0g
RnJhbWV3b3JrKCJUZXN0IikKIAogCi1jbGFzcyBQbGF0Zm9ybToKLSAgICBkZWYgX19pbml0X18o
c2VsZiwgbmFtZSk6Ci0gICAgICAgIHNlbGYubmFtZSA9IG5hbWUKLQotICAgIEBzdGF0aWNtZXRo
b2QKLSAgICBkZWYgZnJvbVN0cmluZyhwbGF0Zm9ybVN0cmluZyk6Ci0gICAgICAgIHBsYXRmb3Jt
U3RyaW5nID0gcGxhdGZvcm1TdHJpbmcubG93ZXIoKQotICAgICAgICBpZiBwbGF0Zm9ybVN0cmlu
ZyA9PSAiaW9zIjoKLSAgICAgICAgICAgIHJldHVybiBQbGF0Zm9ybXMuaU9TCi0KLSAgICAgICAg
aWYgcGxhdGZvcm1TdHJpbmcgPT0gIm1hY29zIjoKLSAgICAgICAgICAgIHJldHVybiBQbGF0Zm9y
bXMubWFjT1MKLQotICAgICAgICBpZiBwbGF0Zm9ybVN0cmluZyA9PSAiYWxsIjoKLSAgICAgICAg
ICAgIHJldHVybiBQbGF0Zm9ybXMuQWxsCi0KLSAgICAgICAgaWYgcGxhdGZvcm1TdHJpbmcgPT0g
ImdlbmVyaWMiIG9yIG5vdCBwbGF0Zm9ybVN0cmluZzoKLSAgICAgICAgICAgIHJldHVybiBQbGF0
Zm9ybXMuR2VuZXJpYwotCi0gICAgICAgIHJhaXNlIFBhcnNlRXhjZXB0aW9uKCJVbmtub3duIHBs
YXRmb3JtOiAlcyIgJSBwbGF0Zm9ybVN0cmluZykKLQotCi1jbGFzcyBQbGF0Zm9ybXM6Ci0gICAg
QWxsID0gUGxhdGZvcm0oImFsbCIpCi0gICAgR2VuZXJpYyA9IFBsYXRmb3JtKCJnZW5lcmljIikK
LSAgICBpT1MgPSBQbGF0Zm9ybSgiaW9zIikKLSAgICBtYWNPUyA9IFBsYXRmb3JtKCJtYWNvcyIp
Ci0KLSAgICAjIEFsbG93IGl0ZXJhdGlvbiBvdmVyIGFsbCBwbGF0Zm9ybXMuIFNlZSA8aHR0cDov
L3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy81NDM0NDAwLz4uCi0gICAgY2xhc3MgX19tZXRh
Y2xhc3NfXyh0eXBlKToKLSAgICAgICAgZGVmIF9faXRlcl9fKHNlbGYpOgotICAgICAgICAgICAg
Zm9yIGF0dHIgaW4gZGlyKFBsYXRmb3Jtcyk6Ci0gICAgICAgICAgICAgICAgaWYgbm90IGF0dHIu
c3RhcnRzd2l0aCgiX18iKToKLSAgICAgICAgICAgICAgICAgICAgeWllbGQgZ2V0YXR0cihQbGF0
Zm9ybXMsIGF0dHIpCi0KIGNsYXNzIFR5cGVSZWZlcmVuY2U6CiAgICAgZGVmIF9faW5pdF9fKHNl
bGYsIHR5cGVfa2luZCwgcmVmZXJlbmNlZF90eXBlX25hbWUsIGVudW1fdmFsdWVzLCBhcnJheV9p
dGVtcyk6CiAgICAgICAgIHNlbGYudHlwZV9raW5kID0gdHlwZV9raW5kCkBAIC00MzksNyArNDA0
LDcgQEAgY2xhc3MgUHJvdG9jb2w6CiAgICAgICAgICAgICAgICAgcmFpc2UgUGFyc2VFeGNlcHRp
b24oIk1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjogZXZlbnRzIGlzIG5vdCBhbiBhcnJh
eSIpCiAgICAgICAgICAgICBldmVudHMuZXh0ZW5kKFtzZWxmLnBhcnNlX2V2ZW50KGV2ZW50LCBk
ZWJ1Z2dhYmxlX3R5cGVzKSBmb3IgZXZlbnQgaW4ganNvblsnZXZlbnRzJ11dKQogCi0gICAgICAg
IHNlbGYuZG9tYWlucy5hcHBlbmQoRG9tYWluKGpzb25bJ2RvbWFpbiddLCBqc29uLmdldCgnZGVz
Y3JpcHRpb24nLCAnJyksIGpzb24uZ2V0KCdmZWF0dXJlR3VhcmQnKSwgZGVidWdnYWJsZV90eXBl
cywgdGFyZ2V0X3R5cGVzLCBpc1N1cHBsZW1lbnRhbCwgdmVyc2lvbiwgdHlwZXMsIGNvbW1hbmRz
LCBldmVudHMpKQorICAgICAgICBzZWxmLmRvbWFpbnMuYXBwZW5kKERvbWFpbihqc29uWydkb21h
aW4nXSwganNvbi5nZXQoJ2Rlc2NyaXB0aW9uJywgJycpLCBqc29uLmdldCgnY29uZGl0aW9uJyks
IGRlYnVnZ2FibGVfdHlwZXMsIHRhcmdldF90eXBlcywgaXNTdXBwbGVtZW50YWwsIHZlcnNpb24s
IHR5cGVzLCBjb21tYW5kcywgZXZlbnRzKSkKIAogICAgIGRlZiBwYXJzZV90eXBlX2RlY2xhcmF0
aW9uKHNlbGYsIGpzb24pOgogICAgICAgICBjaGVja19mb3JfcmVxdWlyZWRfcHJvcGVydGllcyhb
J2lkJywgJ3R5cGUnXSwganNvbiwgInR5cGUiKQpAQCAtNDU3LDggKzQyMiw3IEBAIGNsYXNzIFBy
b3RvY29sOgogICAgICAgICAgICAgcmFpc2UgUGFyc2VFeGNlcHRpb24oIk1hbGZvcm1lZCBkb21h
aW4gc3BlY2lmaWNhdGlvbjogdHlwZSBkZWNsYXJhdGlvbiBmb3IgJXMgaGFzIGR1cGxpY2F0ZSBt
ZW1iZXIgbmFtZXMiICUganNvblsnaWQnXSkKIAogICAgICAgICB0eXBlX3JlZiA9IFR5cGVSZWZl
cmVuY2UoanNvblsndHlwZSddLCBqc29uLmdldCgnJHJlZicpLCBqc29uLmdldCgnZW51bScpLCBq
c29uLmdldCgnaXRlbXMnKSkKLSAgICAgICAgcGxhdGZvcm0gPSBQbGF0Zm9ybS5mcm9tU3RyaW5n
KGpzb24uZ2V0KCdwbGF0Zm9ybScsICdnZW5lcmljJykpCi0gICAgICAgIHJldHVybiBUeXBlRGVj
bGFyYXRpb24oanNvblsnaWQnXSwgdHlwZV9yZWYsIGpzb24uZ2V0KCJkZXNjcmlwdGlvbiIsICIi
KSwgcGxhdGZvcm0sIHR5cGVfbWVtYmVycykKKyAgICAgICAgcmV0dXJuIFR5cGVEZWNsYXJhdGlv
bihqc29uWydpZCddLCB0eXBlX3JlZiwganNvbi5nZXQoImRlc2NyaXB0aW9uIiwgIiIpLCBqc29u
LmdldCgnY29uZGl0aW9uJyksIHR5cGVfbWVtYmVycykKIAogICAgIGRlZiBwYXJzZV90eXBlX21l
bWJlcihzZWxmLCBqc29uKToKICAgICAgICAgY2hlY2tfZm9yX3JlcXVpcmVkX3Byb3BlcnRpZXMo
WyduYW1lJ10sIGpzb24sICJ0eXBlIG1lbWJlciIpCkBAIC01MDksOCArNDczLDcgQEAgY2xhc3Mg
UHJvdG9jb2w6CiAgICAgICAgICAgICBpZiBsZW4oZHVwbGljYXRlX25hbWVzKSA+IDA6CiAgICAg
ICAgICAgICAgICAgcmFpc2UgUGFyc2VFeGNlcHRpb24oIk1hbGZvcm1lZCBkb21haW4gc3BlY2lm
aWNhdGlvbjogcmV0dXJuIHBhcmFtZXRlciBsaXN0IGZvciBjb21tYW5kICVzIGhhcyBkdXBsaWNh
dGUgcGFyYW1ldGVyIG5hbWVzIiAlIGpzb25bJ25hbWUnXSkKIAotICAgICAgICBwbGF0Zm9ybSA9
IFBsYXRmb3JtLmZyb21TdHJpbmcoanNvbi5nZXQoJ3BsYXRmb3JtJywgJ2dlbmVyaWMnKSkKLSAg
ICAgICAgcmV0dXJuIENvbW1hbmQoanNvblsnbmFtZSddLCB0YXJnZXRfdHlwZXMsIGNhbGxfcGFy
YW1ldGVycywgcmV0dXJuX3BhcmFtZXRlcnMsIGpzb24uZ2V0KCdkZXNjcmlwdGlvbicsICIiKSwg
cGxhdGZvcm0sIGpzb24uZ2V0KCdhc3luYycsIEZhbHNlKSkKKyAgICAgICAgcmV0dXJuIENvbW1h
bmQoanNvblsnbmFtZSddLCB0YXJnZXRfdHlwZXMsIGNhbGxfcGFyYW1ldGVycywgcmV0dXJuX3Bh
cmFtZXRlcnMsIGpzb24uZ2V0KCdkZXNjcmlwdGlvbicsICIiKSwganNvbi5nZXQoJ2NvbmRpdGlv
bicpLCBqc29uLmdldCgnYXN5bmMnLCBGYWxzZSkpCiAKICAgICBkZWYgcGFyc2VfZXZlbnQoc2Vs
ZiwganNvbiwgZGVidWdnYWJsZV90eXBlcyk6CiAgICAgICAgIGNoZWNrX2Zvcl9yZXF1aXJlZF9w
cm9wZXJ0aWVzKFsnbmFtZSddLCBqc29uLCAiZXZlbnQiKQpAQCAtNTQ0LDggKzUwNyw3IEBAIGNs
YXNzIFByb3RvY29sOgogICAgICAgICAgICAgaWYgbGVuKGR1cGxpY2F0ZV9uYW1lcykgPiAwOgog
ICAgICAgICAgICAgICAgIHJhaXNlIFBhcnNlRXhjZXB0aW9uKCJNYWxmb3JtZWQgZG9tYWluIHNw
ZWNpZmljYXRpb246IHBhcmFtZXRlciBsaXN0IGZvciBldmVudCAlcyBoYXMgZHVwbGljYXRlIHBh
cmFtZXRlciBuYW1lcyIgJSBqc29uWyduYW1lJ10pCiAKLSAgICAgICAgcGxhdGZvcm0gPSBQbGF0
Zm9ybS5mcm9tU3RyaW5nKGpzb24uZ2V0KCdwbGF0Zm9ybScsICdnZW5lcmljJykpCi0gICAgICAg
IHJldHVybiBFdmVudChqc29uWyduYW1lJ10sIHRhcmdldF90eXBlcywgZXZlbnRfcGFyYW1ldGVy
cywganNvbi5nZXQoJ2Rlc2NyaXB0aW9uJywgIiIpLCBwbGF0Zm9ybSkKKyAgICAgICAgcmV0dXJu
IEV2ZW50KGpzb25bJ25hbWUnXSwgdGFyZ2V0X3R5cGVzLCBldmVudF9wYXJhbWV0ZXJzLCBqc29u
LmdldCgnZGVzY3JpcHRpb24nLCAiIiksIGpzb24uZ2V0KCdjb25kaXRpb24nKSkKIAogICAgIGRl
ZiBwYXJzZV9jYWxsX29yX3JldHVybl9wYXJhbWV0ZXIoc2VsZiwganNvbik6CiAgICAgICAgIGNo
ZWNrX2Zvcl9yZXF1aXJlZF9wcm9wZXJ0aWVzKFsnbmFtZSddLCBqc29uLCAicGFyYW1ldGVyIikK
QEAgLTY0MywxMCArNjA1LDEwIEBAIGNsYXNzIFByb3RvY29sOgogCiAKIGNsYXNzIERvbWFpbjoK
LSAgICBkZWYgX19pbml0X18oc2VsZiwgZG9tYWluX25hbWUsIGRlc2NyaXB0aW9uLCBmZWF0dXJl
X2d1YXJkLCBkZWJ1Z2dhYmxlX3R5cGVzLCB0YXJnZXRfdHlwZXMsIGlzU3VwcGxlbWVudGFsLCB2
ZXJzaW9uLCB0eXBlX2RlY2xhcmF0aW9ucywgY29tbWFuZHMsIGV2ZW50cyk6CisgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIGRvbWFpbl9uYW1lLCBkZXNjcmlwdGlvbiwgY29uZGl0aW9uLCBkZWJ1Z2dh
YmxlX3R5cGVzLCB0YXJnZXRfdHlwZXMsIGlzU3VwcGxlbWVudGFsLCB2ZXJzaW9uLCB0eXBlX2Rl
Y2xhcmF0aW9ucywgY29tbWFuZHMsIGV2ZW50cyk6CiAgICAgICAgIHNlbGYuZG9tYWluX25hbWUg
PSBkb21haW5fbmFtZQogICAgICAgICBzZWxmLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24KLSAg
ICAgICAgc2VsZi5mZWF0dXJlX2d1YXJkID0gZmVhdHVyZV9ndWFyZAorICAgICAgICBzZWxmLmNv
bmRpdGlvbiA9IGNvbmRpdGlvbgogICAgICAgICBzZWxmLmRlYnVnZ2FibGVfdHlwZXMgPSBkZWJ1
Z2dhYmxlX3R5cGVzCiAgICAgICAgIHNlbGYudGFyZ2V0X3R5cGVzID0gdGFyZ2V0X3R5cGVzCiAg
ICAgICAgIHNlbGYuaXNfc3VwcGxlbWVudGFsID0gaXNTdXBwbGVtZW50YWwKQEAgLTY4NiwxMSAr
NjQ4LDExIEBAIGNsYXNzIERvbWFpbnM6CiAKIAogY2xhc3MgVHlwZURlY2xhcmF0aW9uOgotICAg
IGRlZiBfX2luaXRfXyhzZWxmLCB0eXBlX25hbWUsIHR5cGVfcmVmLCBkZXNjcmlwdGlvbiwgcGxh
dGZvcm0sIHR5cGVfbWVtYmVycyk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHR5cGVfbmFtZSwg
dHlwZV9yZWYsIGRlc2NyaXB0aW9uLCBjb25kaXRpb24sIHR5cGVfbWVtYmVycyk6CiAgICAgICAg
IHNlbGYudHlwZV9uYW1lID0gdHlwZV9uYW1lCiAgICAgICAgIHNlbGYudHlwZV9yZWYgPSB0eXBl
X3JlZgogICAgICAgICBzZWxmLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24KLSAgICAgICAgc2Vs
Zi5wbGF0Zm9ybSA9IHBsYXRmb3JtCisgICAgICAgIHNlbGYuY29uZGl0aW9uID0gY29uZGl0aW9u
CiAgICAgICAgIHNlbGYudHlwZV9tZW1iZXJzID0gdHlwZV9tZW1iZXJzCiAKICAgICAgICAgaWYg
c2VsZi50eXBlX25hbWUgIT0gdWNmaXJzdChzZWxmLnR5cGVfbmFtZSk6CkBAIC03MzQsMTMgKzY5
NiwxMyBAQCBjbGFzcyBQYXJhbWV0ZXI6CiAKIAogY2xhc3MgQ29tbWFuZDoKLSAgICBkZWYgX19p
bml0X18oc2VsZiwgY29tbWFuZF9uYW1lLCB0YXJnZXRfdHlwZXMsIGNhbGxfcGFyYW1ldGVycywg
cmV0dXJuX3BhcmFtZXRlcnMsIGRlc2NyaXB0aW9uLCBwbGF0Zm9ybSwgaXNfYXN5bmMpOgorICAg
IGRlZiBfX2luaXRfXyhzZWxmLCBjb21tYW5kX25hbWUsIHRhcmdldF90eXBlcywgY2FsbF9wYXJh
bWV0ZXJzLCByZXR1cm5fcGFyYW1ldGVycywgZGVzY3JpcHRpb24sIGNvbmRpdGlvbiwgaXNfYXN5
bmMpOgogICAgICAgICBzZWxmLmNvbW1hbmRfbmFtZSA9IGNvbW1hbmRfbmFtZQogICAgICAgICBz
ZWxmLnRhcmdldF90eXBlcyA9IHRhcmdldF90eXBlcwogICAgICAgICBzZWxmLmNhbGxfcGFyYW1l
dGVycyA9IGNhbGxfcGFyYW1ldGVycwogICAgICAgICBzZWxmLnJldHVybl9wYXJhbWV0ZXJzID0g
cmV0dXJuX3BhcmFtZXRlcnMKICAgICAgICAgc2VsZi5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9u
Ci0gICAgICAgIHNlbGYucGxhdGZvcm0gPSBwbGF0Zm9ybQorICAgICAgICBzZWxmLmNvbmRpdGlv
biA9IGNvbmRpdGlvbgogICAgICAgICBzZWxmLmlzX2FzeW5jID0gaXNfYXN5bmMKIAogICAgIGRl
ZiByZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyhzZWxmLCBwcm90b2NvbCwgZG9tYWluKToKQEAgLTc1
NCwxMiArNzE2LDEyIEBAIGNsYXNzIENvbW1hbmQ6CiAKIAogY2xhc3MgRXZlbnQ6Ci0gICAgZGVm
IF9faW5pdF9fKHNlbGYsIGV2ZW50X25hbWUsIHRhcmdldF90eXBlcywgZXZlbnRfcGFyYW1ldGVy
cywgZGVzY3JpcHRpb24sIHBsYXRmb3JtKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZXZlbnRf
bmFtZSwgdGFyZ2V0X3R5cGVzLCBldmVudF9wYXJhbWV0ZXJzLCBkZXNjcmlwdGlvbiwgY29uZGl0
aW9uKToKICAgICAgICAgc2VsZi5ldmVudF9uYW1lID0gZXZlbnRfbmFtZQogICAgICAgICBzZWxm
LnRhcmdldF90eXBlcyA9IHRhcmdldF90eXBlcwogICAgICAgICBzZWxmLmV2ZW50X3BhcmFtZXRl
cnMgPSBldmVudF9wYXJhbWV0ZXJzCiAgICAgICAgIHNlbGYuZGVzY3JpcHRpb24gPSBkZXNjcmlw
dGlvbgotICAgICAgICBzZWxmLnBsYXRmb3JtID0gcGxhdGZvcm0KKyAgICAgICAgc2VsZi5jb25k
aXRpb24gPSBjb25kaXRpb24KIAogICAgIGRlZiByZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyhzZWxm
LCBwcm90b2NvbCwgZG9tYWluKToKICAgICAgICAgbG9nLmRlYnVnKCI+PiBSZXNvbHZpbmcgdHlw
ZSByZWZlcmVuY2VzIGZvciBwYXJhbWV0ZXJzIGluIGV2ZW50OiAlcyIgJSBzZWxmLmV2ZW50X25h
bWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5IGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQppbmRleCAyYjFkODc4MmNiMi4uYmQxOWMwMDI3NTEgMTAwNzU1Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQpAQCAtMTE3LDcg
KzExNyw2IEBAIGRlZiBnZW5lcmF0ZV9mcm9tX3NwZWNpZmljYXRpb24ocHJpbWFyeV9zcGVjaWZp
Y2F0aW9uX2ZpbGVwYXRoPU5vbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91
dHB1dF9kaXJwYXRoPU5vbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmNl
X291dHB1dD1GYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWV3b3Jr
X25hbWU9IiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtX25hbWU9
IiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlX2Zyb250ZW5kPVRy
dWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlX2JhY2tlbmQ9VHJ1
ZSk6CiAKQEAgLTEzMCw3ICsxMjksNiBAQCBkZWYgZ2VuZXJhdGVfZnJvbV9zcGVjaWZpY2F0aW9u
KHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aD1Ob25lLAogICAgICAgICBleGNlcHQgVmFs
dWVFcnJvciBhcyBlOgogICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJFcnJvciBwYXJzaW5n
IHZhbGlkIEpTT04gaW4gZmlsZTogIiArIGZpbGVwYXRoICsgIlxuUGFyc2UgZXJyb3I6ICIgKyBz
dHIoZSkpCiAKLSAgICBwbGF0Zm9ybSA9IFBsYXRmb3JtLmZyb21TdHJpbmcocGxhdGZvcm1fbmFt
ZSkKICAgICBwcm90b2NvbCA9IG1vZGVscy5Qcm90b2NvbChmcmFtZXdvcmtfbmFtZSkKICAgICBm
b3Igc3BlY2lmaWNhdGlvbiBpbiBzdXBwbGVtZW50YWxfc3BlY2lmaWNhdGlvbl9maWxlcGF0aHM6
CiAgICAgICAgIGxvYWRfc3BlY2lmaWNhdGlvbihwcm90b2NvbCwgc3BlY2lmaWNhdGlvbiwgaXNT
dXBwbGVtZW50YWw9VHJ1ZSkKQEAgLTEzOCw3ICsxMzYsNyBAQCBkZWYgZ2VuZXJhdGVfZnJvbV9z
cGVjaWZpY2F0aW9uKHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aD1Ob25lLAogCiAgICAg
cHJvdG9jb2wucmVzb2x2ZV90eXBlcygpCiAKLSAgICBnZW5lcmF0b3JfYXJndW1lbnRzID0gW3By
b3RvY29sLCBwbGF0Zm9ybSwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoXQorICAgIGdl
bmVyYXRvcl9hcmd1bWVudHMgPSBbcHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxl
cGF0aF0KICAgICBnZW5lcmF0b3JzID0gW10KIAogICAgIGlmIHByb3RvY29sLmZyYW1ld29yayBp
cyBGcmFtZXdvcmtzLlRlc3Q6CkBAIC0yMjksNyArMjI3LDYgQEAgZGVmIGdlbmVyYXRlX2Zyb21f
c3BlY2lmaWNhdGlvbihwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGg9Tm9uZSwKIAogaWYg
X19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICBhbGxvd2VkX2ZyYW1ld29ya19uYW1lcyA9IFsn
SmF2YVNjcmlwdENvcmUnLCAnV2ViSW5zcGVjdG9yJywgJ1dlYkluc3BlY3RvclVJJywgJ1dlYktp
dCcsICdUZXN0J10KLSAgICBhbGxvd2VkX3BsYXRmb3JtX25hbWVzID0gWydpT1MnLCAnbWFjT1Mn
LCAnYWxsJywgJ2dlbmVyaWMnXQogICAgIGNsaV9wYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJz
ZXIodXNhZ2U9InVzYWdlOiAlcHJvZyBbb3B0aW9uc10gUHJpbWFyeVByb3RvY29sLmpzb24gW1N1
cHBsZW1lbnRhbFByb3RvY29sLmpzb24gLi4uXSIpCiAgICAgY2xpX3BhcnNlci5hZGRfb3B0aW9u
KCItbyIsICItLW91dHB1dERpciIsIGhlbHA9IkRpcmVjdG9yeSB3aGVyZSBnZW5lcmF0ZWQgZmls
ZXMgc2hvdWxkIGJlIHdyaXR0ZW4uIikKICAgICBjbGlfcGFyc2VyLmFkZF9vcHRpb24oIi0tZnJh
bWV3b3JrIiwgdHlwZT0iY2hvaWNlIiwgY2hvaWNlcz1hbGxvd2VkX2ZyYW1ld29ya19uYW1lcywg
aGVscD0iVGhlIGZyYW1ld29yayB0aGF0IHRoZSBwcmltYXJ5IHNwZWNpZmljYXRpb24gYmVsb25n
cyB0by4iKQpAQCAtMjM4LDcgKzIzNSw2IEBAIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAg
ICAgY2xpX3BhcnNlci5hZGRfb3B0aW9uKCItdCIsICItLXRlc3QiLCBhY3Rpb249InN0b3JlX3Ry
dWUiLCBoZWxwPSJFbmFibGUgdGVzdCBtb2RlLiBVc2UgdW5pcXVlIG91dHB1dCBmaWxlbmFtZXMg
Y3JlYXRlZCBieSBwcmVwZW5kaW5nIHRoZSBpbnB1dCBmaWxlbmFtZS4iKQogICAgIGNsaV9wYXJz
ZXIuYWRkX29wdGlvbigiLS1mcm9udGVuZCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGhlbHA9Ikdl
bmVyYXRlIGNvZGUgZm9yIHRoZSBmcm9udGVuZC1zaWRlIG9mIHRoZSBwcm90b2NvbCBvbmx5LiIp
CiAgICAgY2xpX3BhcnNlci5hZGRfb3B0aW9uKCItLWJhY2tlbmQiLCBhY3Rpb249InN0b3JlX3Ry
dWUiLCBoZWxwPSJHZW5lcmF0ZSBjb2RlIGZvciB0aGUgYmFja2VuZC1zaWRlIG9mIHRoZSBwcm90
b2NvbCBvbmx5LiIpCi0gICAgY2xpX3BhcnNlci5hZGRfb3B0aW9uKCItLXBsYXRmb3JtIiwgZGVm
YXVsdD0iZ2VuZXJpYyIsIGhlbHA9IlRoZSBwbGF0Zm9ybSBvZiB0aGUgYmFja2VuZCBiZWluZyBn
ZW5lcmF0ZWQuIEZvciBleGFtcGxlLCB3ZSBjb21waWxlIFdlYktpdDIgZm9yIGVpdGhlciBtYWNP
UyBvciBpT1MuIFRoaXMgdmFsdWUgaXMgY2FzZS1pbnNlbnNpdGl2ZS4gQWxsb3dlZCB2YWx1ZXM6
ICVzIiAlICIsICIuam9pbihhbGxvd2VkX3BsYXRmb3JtX25hbWVzKSkKICAgICBvcHRpb25zID0g
Tm9uZQogCiAgICAgYXJnX29wdGlvbnMsIGFyZ192YWx1ZXMgPSBjbGlfcGFyc2VyLnBhcnNlX2Fy
Z3MoKQpAQCAtMjY0LDcgKzI2MCw2IEBAIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAg
ICAgICdvdXRwdXRfZGlycGF0aCc6IGFyZ19vcHRpb25zLm91dHB1dERpciwKICAgICAgICAgJ2Nv
bmNhdGVuYXRlX291dHB1dCc6IGFyZ19vcHRpb25zLnRlc3QsCiAgICAgICAgICdmcmFtZXdvcmtf
bmFtZSc6IGFyZ19vcHRpb25zLmZyYW1ld29yaywKLSAgICAgICAgJ3BsYXRmb3JtX25hbWUnOiBh
cmdfb3B0aW9ucy5wbGF0Zm9ybSwKICAgICAgICAgJ2ZvcmNlX291dHB1dCc6IGFyZ19vcHRpb25z
LmZvcmNlLAogICAgICAgICAnZ2VuZXJhdGVfYmFja2VuZCc6IGdlbmVyYXRlX2JhY2tlbmQsCiAg
ICAgICAgICdnZW5lcmF0ZV9mcm9udGVuZCc6IGdlbmVyYXRlX2Zyb250ZW5kLApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2FsbC9kZWZp
bml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2FsbC9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5q
c29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MTdmMTM1ZWU1YS4uMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2Fs
bC9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCisrKyAvZGV2L251bGwKQEAgLTEs
MjggKzAsMCBAQAotewotICAgICJkb21haW4iOiAiTmV0d29yayIsCi0gICAgInR5cGVzIjogWwot
ICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiTmV0d29ya0Vycm9yIiwKLSAgICAgICAgICAg
ICJ0eXBlIjogIm9iamVjdCIsCi0gICAgICAgICAgICAicGxhdGZvcm0iOiAibWFjb3MiLAotICAg
ICAgICAgICAgInByb3BlcnRpZXMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJtZXNz
YWdlIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIG1lc3NhZ2UuIiB9
LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29kZSIsICJ0eXBlIjogImludGVnZXIiLCAi
ZGVzY3JpcHRpb24iOiAiRXJyb3IgY29kZS4iIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfQot
ICAgIF0sCi0gICAgImNvbW1hbmRzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6
ICJsb2FkUmVzb3VyY2UiLAotICAgICAgICAgICAgInBsYXRmb3JtIjogIm1hY29zIiwKLSAgICAg
ICAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBhIHJlc291cmNlIGluIHRoZSBjb250ZXh0IG9m
IGEgZnJhbWUgb24gdGhlIGluc3BlY3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNoZWNr
cy4iCi0gICAgICAgIH0KLSAgICBdLAotICAgICJldmVudHMiOiBbCi0gICAgICAgIHsKLSAgICAg
ICAgICAgICJuYW1lIjogInJlc291cmNlTG9hZGVkIiwKLSAgICAgICAgICAgICJwbGF0Zm9ybSI6
ICJtYWNvcyIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQSByZXNvdXJjZSB3YXMgbG9h
ZGVkLiIKLSAgICAgICAgfQotICAgIF0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9hbGwvZXhwZWN0ZWQvZGVmaW5pdGlvbnMtd2l0
aC1tYWMtcGxhdGZvcm0uanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvYWxsL2V4cGVjdGVkL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRm
b3JtLmpzb24tcmVzdWx0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNmU2OGY0YTlh
ZS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2FsbC9leHBlY3RlZC9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29u
LXJlc3VsdAorKysgL2Rldi9udWxsCkBAIC0xLDEyMTcgKzAsMCBAQAotIyMjIEJlZ2luIEZpbGU6
IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotLy8gTmV0d29yawotSW5zcGVjdG9yQmFja2Vu
ZC5yZWdpc3RlckRvbWFpbigiTmV0d29yayIsIG51bGwpOwotSW5zcGVjdG9yQmFja2VuZC5yZWdp
c3RlckNvbW1hbmQoIk5ldHdvcmsubG9hZFJlc291cmNlIiwgbnVsbCwgW10sIFtdKTsKLUluc3Bl
Y3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudCgiTmV0d29yay5yZXNvdXJjZUxvYWRlZCIsIG51bGws
IFtdKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJOZXR3b3JrRGlzcGF0Y2hlciA9IEluc3Bl
Y3RvckJhY2tlbmQucmVnaXN0ZXJEaXNwYXRjaGVyLmJpbmQoSW5zcGVjdG9yQmFja2VuZCwgIk5l
dHdvcmsiKTsKLUluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIk5ldHdvcmsiLCBudWxs
KTsKLSMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQot
Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0KLSNpbmNsdWRl
ICJUZXN0UHJvdG9jb2xUeXBlcy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
RnJvbnRlbmRSb3V0ZXIuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEFsdGVy
bmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2b2lkIHNldEJhY2tlbmREaXNw
YXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2Vu
ZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9Ci0gICAgQmFja2VuZERpc3BhdGNo
ZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hl
ci5nZXQoKTsgfQotcHJpdmF0ZToKLSAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFj
a2VuZERpc3BhdGNoZXI7Ci19OwotCi0KLWNsYXNzIEFsdGVybmF0ZU5ldHdvcmtCYWNrZW5kRGlz
cGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0g
ICAgdmlydHVhbCB+QWx0ZXJuYXRlTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyKCkgeyB9Ci0gICAg
dmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZShsb25nIGNhbGxJZCkgPSAwOwotfTsKLQotfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKLSMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9y
bS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFn
bWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10eXBlZGVmIFN0
cmluZyBFcnJvclN0cmluZzsKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQotY2xhc3MgQWx0ZXJuYXRlTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyOwotI2VuZGlm
IC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi1jbGFzcyBOZXR3
b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQg
bG9hZFJlc291cmNlKEVycm9yU3RyaW5nJikgPSAwOwotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwg
fk5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKLX07Ci0KLWNsYXNzIE5ldHdvcmtC
YWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0
Y2hlciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI+
IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIqKTsKLSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1l
dGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5hbDsKLXByaXZhdGU6Ci0gICAg
dm9pZCBsb2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYg
cGFyYW1ldGVycyk7Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
Ci1wdWJsaWM6Ci0gICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZU5ldHdv
cmtCYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVybmF0ZURp
c3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9Ci1wcml2YXRlOgotICAgIEFsdGVybmF0
ZU5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlciogbV9hbHRlcm5hdGVEaXNwYXRjaGVyIHsgbnVsbHB0
ciB9OwotI2VuZGlmCi1wcml2YXRlOgotICAgIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcihCYWNr
ZW5kRGlzcGF0Y2hlciYsIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICBO
ZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50IHsgbnVsbHB0ciB9OwotfTsK
LQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlz
cGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1w
bGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgi
Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgot
I2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVk
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jaWYgRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmRE
aXNwYXRjaGVycy5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1OZXR3b3Jr
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+TmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxl
cigpIHsgfQotCi1SZWY8TmV0d29ya0JhY2tlbmREaXNwYXRjaGVyPiBOZXR3b3JrQmFja2VuZERp
c3BhdGNoZXI6OmNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIE5l
dHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQotewotICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdl
bnQpKTsKLX0KLQotTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyOjpOZXR3b3JrQmFja2VuZERpc3Bh
dGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBOZXR3b3JrQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKLSAgICA6IFN1cHBsZW1lbnRhbEJhY2tlbmREaXNw
YXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQotICAgICwgbV9hZ2VudChhZ2VudCkKLXsKLSAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oIk5ldHdvcmsi
X3MsIHRoaXMpOwotfQotCi12b2lkIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2go
bG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYm
IG1lc3NhZ2UpCi17Ci0gICAgUmVmPE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgq
dGhpcyk7Ci0KLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOwotICAgIG1lc3Nh
Z2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsKLQotICAgIGlmIChtZXRob2Qg
PT0gImxvYWRSZXNvdXJjZSIpCi0gICAgICAgIGxvYWRSZXNvdXJjZShyZXF1ZXN0SWQsIFdURk1v
dmUocGFyYW1ldGVycykpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+
cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICIn
TmV0d29yay4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOwotfQotCi12b2lkIE5ldHdv
cmtCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8
SlNPTjo6T2JqZWN0PiYmKQotewotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQotICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRl
cm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2UocmVxdWVzdElkKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSNlbmRpZgotCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046
Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtX2FnZW50LT5s
b2FkUmVzb3VyY2UoZXJyb3IpOwotCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1
bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBv
cnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShl
cnJvcikpOwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBU
ZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5k
RGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRp
b25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmpl
Y3RzLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEZyb250ZW5kUm91
dGVyOwotCi1jbGFzcyBOZXR3b3JrRnJvbnRlbmREaXNwYXRjaGVyIHsKLSAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBOZXR3b3JrRnJvbnRlbmREaXNwYXRjaGVyKEZy
b250ZW5kUm91dGVyJiBmcm9udGVuZFJvdXRlcikgOiBtX2Zyb250ZW5kUm91dGVyKGZyb250ZW5k
Um91dGVyKSB7IH0KLSAgICB2b2lkIHJlc291cmNlTG9hZGVkKCk7Ci1wcml2YXRlOgotICAgIEZy
b250ZW5kUm91dGVyJiBtX2Zyb250ZW5kUm91dGVyOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXZvaWQgTmV0d29ya0Zyb250
ZW5kRGlzcGF0Y2hlcjo6cmVzb3VyY2VMb2FkZWQoKQotewotICAgIFJlZjxKU09OOjpPYmplY3Q+
IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+
c2V0U3RyaW5nKCJtZXRob2QiX3MsICJOZXR3b3JrLnJlc291cmNlTG9hZGVkIl9zKTsKLQotICAg
IG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9u
dGVuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0
cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1t
YWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclBy
b3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotCi1uYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKLQotCi0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLQotCi0vLyBGb3J3YXJk
IGRlY2xhcmF0aW9ucy4KLW5hbWVzcGFjZSBOZXR3b3JrIHsKLWNsYXNzIE5ldHdvcmtFcnJvcjsK
LX0gLy8gTmV0d29yawotLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgotCi0KLQotCi1u
YW1lc3BhY2UgTmV0d29yayB7Ci1jbGFzcyBOZXR3b3JrRXJyb3IgOiBwdWJsaWMgSlNPTjo6T2Jq
ZWN0QmFzZSB7Ci1wdWJsaWM6Ci0gICAgZW51bSB7Ci0gICAgICAgIE5vRmllbGRzU2V0ID0gMCwK
LSAgICAgICAgTWVzc2FnZVNldCA9IDEgPDwgMCwKLSAgICAgICAgQ29kZVNldCA9IDEgPDwgMSwK
LSAgICAgICAgQWxsRmllbGRzU2V0ID0gKE1lc3NhZ2VTZXQgfCBDb2RlU2V0KQotICAgIH07Ci0K
LSAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+Ci0gICAgY2xhc3MgQnVpbGRlciB7Ci0gICAgcHJpdmF0
ZToKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7Ci0KLSAgICAgICAgdGVt
cGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUg
fCBTVEVQPio+KHRoaXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcihSZWY8LypOZXR3
b3JrRXJyb3IqL0pTT046Ok9iamVjdD4mJiBvYmplY3QpCi0gICAgICAgICAgICA6IG1fcmVzdWx0
KFdURk1vdmUob2JqZWN0KSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
U1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7
Ci0gICAgICAgIH0KLSAgICAgICAgZnJpZW5kIGNsYXNzIE5ldHdvcmtFcnJvcjsKLSAgICBwdWJs
aWM6Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1lc3NhZ2VTZXQ+JiBzZXRNZXNzYWdlKGNv
bnN0IFN0cmluZyYgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBNZXNzYWdlU2V0KSwgcHJvcGVydHlfbWVzc2FnZV9hbHJlYWR5X3NldCk7Ci0g
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJtZXNzYWdlIl9zLCB2YWx1ZSk7Ci0gICAg
ICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1lc3NhZ2VTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgQ29kZVNldD4mIHNldENvZGUoaW50IHZhbHVlKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29kZVNldCksIHByb3Bl
cnR5X2NvZGVfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldEludGVnZXIo
ImNvZGUiX3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29kZVNldD4o
KTsKLSAgICAgICAgfQotCi0gICAgICAgIFJlZjxOZXR3b3JrRXJyb3I+IHJlbGVhc2UoKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQs
IHJlc3VsdF9pc19ub3RfcmVhZHkpOwotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9m
KE5ldHdvcmtFcnJvcikgPT0gc2l6ZW9mKEpTT046Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsKLQot
ICAgICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4ganNvblJlc3VsdCA9IG1fcmVzdWx0LnJlbGVh
c2VOb25OdWxsKCk7Ci0gICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFdURk1vdmUoKnJlaW50ZXJw
cmV0X2Nhc3Q8UmVmPE5ldHdvcmtFcnJvcj4qPigmanNvblJlc3VsdCkpOwotICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICAvKgotICAgICAqIFN5bnRo
ZXRpYyBjb25zdHJ1Y3RvcjoKLSAgICAgKiBSZWY8TmV0d29ya0Vycm9yPiByZXN1bHQgPSBOZXR3
b3JrRXJyb3I6OmNyZWF0ZSgpCi0gICAgICogICAgIC5zZXRNZXNzYWdlKC4uLikKLSAgICAgKiAg
ICAgLnNldENvZGUoLi4uKQotICAgICAqICAgICAucmVsZWFzZSgpOwotICAgICAqLwotICAgIHN0
YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOwotICAgIH0KLX07
Ci0KLX0gLy8gTmV0d29yawotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAot
Ci0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0KLSNpbmNsdWRlIDx3dGYv
T3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJ
bnNwZWN0b3IgewotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotfSAvLyBuYW1lc3BhY2Ug
UHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sT2JqZWN0cy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tl
bmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5p
dGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJu
YXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi1A
cHJvdG9jb2wgVGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkhhbmRsZXI7Ci0KLW5hbWVzcGFjZSBJ
bnNwZWN0b3IgewotCi0KLWNsYXNzIE9iakNJbnNwZWN0b3JOZXR3b3JrQmFja2VuZERpc3BhdGNo
ZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJuYXRlTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyIHsKLSAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBPYmpDSW5zcGVjdG9yTmV0
d29ya0JhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5IYW5kbGVy
PiBoYW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9Ci0gICAgdm9pZCBsb2FkUmVzb3Vy
Y2UobG9uZyByZXF1ZXN0SWQpIGZpbmFsOwotcHJpdmF0ZToKLSAgICBSZXRhaW5QdHI8aWQ8VGVz
dFByb3RvY29sTmV0d29ya0RvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwotfTsKLQotfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERp
c3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRj
aGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdp
dGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5k
RGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW5j
bHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05W
YWx1ZXMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXZvaWQgT2JqQ0luc3BlY3Rvck5l
dHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkKQotewot
ICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVz
b3VyY2VXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsKLSAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmRE
aXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrLmxvYWRSZXNvdXJjZScgd2FzIG5v
dCBmb3VuZCJfcyk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJy
b3JzKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZCBlcnJvckNhbGxiYWNrID0g
XihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0
UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwg
ZXJyb3IpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygp
OwotICAgIH07Ci0KLSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5k
RGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpLCBmYWxzZSk7Ci0gICAgfTsKLQotICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZVdpdGhF
cnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFj
a107Ci19Ci0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xDb25maWd1cmF0aW9uLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBk
ZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wu
aD4KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNl
IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAotQHByb3BlcnR5IChub25hdG9t
aWMsIHJldGFpbiwgc2V0dGVyPXNldE5ldHdvcmtIYW5kbGVyOikgaWQ8VGVzdFByb3RvY29sTmV0
d29ya0RvbWFpbkhhbmRsZXI+IG5ldHdvcmtIYW5kbGVyOwotQHByb3BlcnR5IChub25hdG9taWMs
IHJlYWRvbmx5KSBUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluRXZlbnREaXNwYXRjaGVyICpuZXR3
b3JrRXZlbnREaXNwYXRjaGVyOwotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbi5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0
aW9uLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0
aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCi0KLSNpbXBvcnQg
IlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlz
cGF0Y2hlcnMuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJs
ZUFnZW50Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNv
bnRyb2xsZXIuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVycy5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXJzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBs
ZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCi17Ci0gICAgQXVnbWVudGFibGVJ
bnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKLSAgICBpZDxUZXN0UHJvdG9jb2xOZXR3
b3JrRG9tYWluSGFuZGxlcj4gX25ldHdvcmtIYW5kbGVyOwotICAgIFRlc3RQcm90b2NvbE5ldHdv
cmtEb21haW5FdmVudERpc3BhdGNoZXIgKl9uZXR3b3JrRXZlbnREaXNwYXRjaGVyOwotfQotCi0t
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNv
bnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlm
ICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0g
ICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2
b2lkKWRlYWxsb2MKLXsKLSAgICBbX25ldHdvcmtIYW5kbGVyIHJlbGVhc2VdOwotICAgIFtfbmV0
d29ya0V2ZW50RGlzcGF0Y2hlciByZWxlYXNlXTsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0K
LS0gKHZvaWQpc2V0TmV0d29ya0hhbmRsZXI6KGlkPFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5I
YW5kbGVyPiloYW5kbGVyCi17Ci0gICAgaWYgKGhhbmRsZXIgPT0gX25ldHdvcmtIYW5kbGVyKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBbX25ldHdvcmtIYW5kbGVyIHJlbGVhc2VdOwotICAgIF9u
ZXR3b3JrSGFuZGxlciA9IFtoYW5kbGVyIHJldGFpbl07Ci0KLSAgICBhdXRvIGFsdGVybmF0ZURp
c3BhdGNoZXIgPSBtYWtlVW5pcXVlPE9iakNJbnNwZWN0b3JOZXR3b3JrQmFja2VuZERpc3BhdGNo
ZXI+KGhhbmRsZXIpOwotICAgIGF1dG8gYWx0ZXJuYXRlQWdlbnQgPSBtYWtlVW5pcXVlPEFsdGVy
bmF0ZURpc3BhdGNoYWJsZUFnZW50PE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlciwgQWx0ZXJuYXRl
TmV0d29ya0JhY2tlbmREaXNwYXRjaGVyPj4oIk5ldHdvcmsiX3MsICpfY29udHJvbGxlciwgV1RG
TW92ZShhbHRlcm5hdGVEaXNwYXRjaGVyKSk7Ci0gICAgX2NvbnRyb2xsZXItPmFwcGVuZEV4dHJh
QWdlbnQoV1RGTW92ZShhbHRlcm5hdGVBZ2VudCkpOwotfQotCi0tIChpZDxUZXN0UHJvdG9jb2xO
ZXR3b3JrRG9tYWluSGFuZGxlcj4pbmV0d29ya0hhbmRsZXIKLXsKLSAgICByZXR1cm4gX25ldHdv
cmtIYW5kbGVyOwotfQotCi0tIChUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluRXZlbnREaXNwYXRj
aGVyICopbmV0d29ya0V2ZW50RGlzcGF0Y2hlcgotewotICAgIGlmICghX25ldHdvcmtFdmVudERp
c3BhdGNoZXIpCi0gICAgICAgIF9uZXR3b3JrRXZlbnREaXNwYXRjaGVyID0gW1tUZXN0UHJvdG9j
b2xOZXR3b3JrRG9tYWluRXZlbnREaXNwYXRjaGVyIGFsbG9jXSBpbml0V2l0aENvbnRyb2xsZXI6
X2NvbnRyb2xsZXJdOwotICAgIHJldHVybiBfbmV0d29ya0V2ZW50RGlzcGF0Y2hlcjsKLX0KLQot
QGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAi
VGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLmgiCi0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2Ug
SW5zcGVjdG9yOwotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkV2
ZW50RGlzcGF0Y2hlcgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2Nv
bnRyb2xsZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21l
bnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3Vw
ZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VS
VChjb250cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJu
IHNlbGY7Ci19Ci0KLS0gKHZvaWQpcmVzb3VyY2VMb2FkZWQKLXsKLSAgICBjb25zdCBGcm9udGVu
ZFJvdXRlciYgcm91dGVyID0gX2NvbnRyb2xsZXItPmZyb250ZW5kUm91dGVyKCk7Ci0KLSAgICBS
ZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0g
ICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiTmV0d29yay5yZXNvdXJjZUxv
YWRlZCJfcyk7Ci0gICAgcm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5n
KCkpOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3Bh
dGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8Rm91
bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2Nv
bEpTT05PYmplY3QuaD4KLQotCi1AY2xhc3MgVGVzdFByb3RvY29sTmV0d29ya0Vycm9yOwotCi10
eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xQbGF0Zm9ybSkgewotICAgIFRl
c3RQcm90b2NvbFBsYXRmb3JtQWxsLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYywK
LSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1h
Y09TLAotfTsKLQotCi0KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkp
Ci1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbE5ldHdvcmtFcnJvciA6IFJXSVByb3RvY29sSlNPTk9i
amVjdAotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3Ry
aW5nICosIGlkPiAqKXBheWxvYWQ7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9i
amVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKLS0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBjb2RlOihpbnQpY29kZTsKLS8q
IHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqbWVzc2Fn
ZTsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCBjb2Rl
OwotQGVuZAotCi1AcHJvdG9jb2wgVGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkhhbmRsZXIgPE5T
T2JqZWN0PgotQG9wdGlvbmFsCi0tICh2b2lkKWxvYWRSZXNvdXJjZVdpdGhFcnJvckNhbGxiYWNr
Oih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6
KHZvaWQoXikodm9pZCkpc3VjY2Vzc0NhbGxiYWNrOwotQGVuZAotCi1fX2F0dHJpYnV0ZV9fKCh2
aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sTmV0d29ya0Rv
bWFpbkV2ZW50RGlzcGF0Y2hlciA6IE5TT2JqZWN0Ci0tICh2b2lkKXJlc291cmNlTG9hZGVkOwot
QGVuZAotCi0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJp
bGl0eU9iamVjdHMuaD4KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgi
Ci0jaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgotI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDx3
dGYvSlNPTlZhbHVlcy5oPgotCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5F
dmVudERpc3BhdGNoZXIgKFByaXZhdGUpCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9s
bGVyOihJbnNwZWN0b3I6OkF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxl
cjsKLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0
UHJvdG9jb2wuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVy
c2lvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9i
akNFbnVtVHlwZT4KLU9wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNv
bnN0IFN0cmluZyYgdmFsdWUpOwotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVz
dFByb3RvY29sUGxhdGZvcm0gdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2Fz
ZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDoKLSAgICAgICAgcmV0dXJuICJhbGwiX3M7Ci0gICAg
Y2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM6Ci0gICAgICAgIHJldHVybiAiZ2VuZXJp
YyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOgotICAgICAgICByZXR1cm4g
ImlvcyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M6Ci0gICAgICAgIHJl
dHVybiAibWFjb3MiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8
VGVzdFByb3RvY29sUGxhdGZvcm0+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZh
bHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiYWxsIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90
b2NvbFBsYXRmb3JtQWxsOwotICAgIGlmICh2YWx1ZSA9PSAiZ2VuZXJpYyIpCi0gICAgICAgIHJl
dHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM7Ci0gICAgaWYgKHZhbHVlID09ICJpb3Mi
KQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1JT1M7Ci0gICAgaWYgKHZhbHVl
ID09ICJtYWNvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOwot
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0j
aW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3Iv
UldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVj
dG9yOwotCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoTmV0d29ya0Rv
bWFpbikKLQotKyAodm9pZClfcGFyc2VOZXR3b3JrRXJyb3I6KFRlc3RQcm90b2NvbE5ldHdvcmtF
cnJvciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLQotQGVuZAotCi1AaW1w
bGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChOZXR3b3JrRG9tYWluKQot
Ci0rICh2b2lkKV9wYXJzZU5ldHdvcmtFcnJvcjooVGVzdFByb3RvY29sTmV0d29ya0Vycm9yICoq
KW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7Ci0gICAgKm91dFZh
bHVlID0gW1tUZXN0UHJvdG9jb2xOZXR3b3JrRXJyb3IgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpw
YXlsb2FkXTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRm
b3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2lt
cG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2Jq
ZWN0UHJpdmF0ZS5oPgotI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQgPHd0Zi9K
U09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotQGltcGxlbWVu
dGF0aW9uIFRlc3RQcm90b2NvbE5ldHdvcmtFcnJvcgotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2Fk
Ci17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJldHVybiBuaWw7
Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJt
ZXNzYWdlIl0sIEAibWVzc2FnZSIpOwotICAgIHNlbGYubWVzc2FnZSA9IHBheWxvYWRbQCJtZXNz
YWdlIl07Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxv
YWRbQCJjb2RlIl0sIEAiY29kZSIpOwotICAgIHNlbGYuY29kZSA9IFtwYXlsb2FkW0AiY29kZSJd
IGludGVnZXJWYWx1ZV07Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLS0gKGluc3RhbmNldHlwZSlp
bml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilvYmplY3QKLXsK
LSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoSlNPTk9iamVjdDpbb2JqZWN0IHRvSlNP
Tk9iamVjdF0uZ2V0KCldKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIHJldHVybiBzZWxm
OwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3Nh
Z2UgY29kZTooaW50KWNvZGUKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAg
ICAgICAgcmV0dXJuIG5pbDsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJP
UEVSVFkobWVzc2FnZSwgQCJtZXNzYWdlIik7Ci0KLSAgICBzZWxmLm1lc3NhZ2UgPSBtZXNzYWdl
OwotICAgIHNlbGYuY29kZSA9IGNvZGU7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9p
ZClzZXRNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UKLXsKLSAgICBbc3VwZXIgc2V0U3RyaW5n
Om1lc3NhZ2UgZm9yS2V5OkAibWVzc2FnZSJdOwotfQotCi0tIChOU1N0cmluZyAqKW1lc3NhZ2UK
LXsKLSAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAIm1lc3NhZ2UiXTsKLX0KLQotLSAo
dm9pZClzZXRDb2RlOihpbnQpY29kZQotewotICAgIFtzdXBlciBzZXRJbnRlZ2VyOmNvZGUgZm9y
S2V5OkAiY29kZSJdOwotfQotCi0tIChpbnQpY29kZQotewotICAgIHJldHVybiBbc3VwZXIgaW50
ZWdlckZvcktleTpAImNvZGUiXTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9jb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVn
Z2FibGVUeXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5q
c29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kMjdhYjY1YjkyYQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9jb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBl
Lmpzb24KQEAgLTAsMCArMSw5IEBACitbCit7CisgICAgImRvbWFpbiI6ICJEb21haW4iLAorICAg
ICJkZWJ1Z2dhYmxlVHlwZXMiOiBbInBhZ2UiXSwKKyAgICAidGFyZ2V0VHlwZXMiOiBbInBhZ2Ui
LCAid29ya2VyIl0sCisgICAgImNvbW1hbmRzIjogW3sibmFtZSI6ICJDb21tYW5kIn1dLAorICAg
ICJldmVudHMiOiBbeyJuYW1lIjogIkV2ZW50In1dCit9CitdCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvY29tbWFuZHMtd2l0aC1hc3lu
Yy1hdHRyaWJ1dGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xMTI2MmU4ODlmYQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9jb21tYW5kcy13
aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCkBAIC0wLDAgKzEsMTA5IEBACit7CisgICAgImRvbWFp
biI6ICJEYXRhYmFzZSIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAi
aWQiOiAiRGF0YWJhc2VJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJpbnRlZ2VyIiwKKyAgICAg
ICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgaWRlbnRpZmllciBvZiBEYXRhYmFzZSBvYmpl
Y3QuIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiUHJpbWFyeUNv
bG9ycyIsCisgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgImVudW0i
OiBbInJlZCIsICJncmVlbiIsICJibHVlIl0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAg
ICAgICAgImlkIjogIkNvbG9yTGlzdCIsCisgICAgICAgICAgICAidHlwZSI6ICJhcnJheSIsCisg
ICAgICAgICAgICAiaXRlbXMiOiB7ICIkcmVmIjogIlByaW1hcnlDb2xvcnMiIH0KKyAgICAgICAg
fSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkVycm9yIiwKKyAgICAgICAgICAgICJ0
eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRGF0YWJhc2UgZXJy
b3IuIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAibWVzc2FnZSIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBt
ZXNzYWdlLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvZGUiLCAidHlwZSI6ICJp
bnRlZ2VyIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIGNvZGUuIiB9CisgICAgICAgICAgICBdCisg
ICAgICAgIH0KKyAgICBdLAorICAgICJjb21tYW5kcyI6IFsKKyAgICAgICAgeworICAgICAgICAg
ICAgIm5hbWUiOiAiZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyIsCisgICAgICAg
ICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRhdGFiYXNl
SWQiLCAiJHJlZiI6ICJEYXRhYmFzZUlkIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
cXVlcnkiLCAidHlwZSI6ICJzdHJpbmciIH0KKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAi
cmV0dXJucyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5
cGUiOiAiYXJyYXkiLCAib3B0aW9uYWwiOiB0cnVlLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmlu
ZyIgfSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJp
bmciLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1l
c3RhbXAiLCAidHlwZSI6ICJudW1iZXIiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0
cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55
IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJh
c2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVycm9yIiwgIm9wdGlvbmFs
IjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2NyZWVuQ29sb3IiLCAiJHJl
ZiI6ICJQcmltYXJ5Q29sb3JzIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwgIiRyZWYiOiAiQ29sb3JMaXN0IiwgIm9wdGlv
bmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJpbnRDb2xvciIsICJ0
eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93IiwgImJs
YWNrIl0sICJvcHRpb25hbCI6IHRydWUgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAg
ICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVy
blZhbHVlcyIsCisgICAgICAgICAgICAiYXN5bmMiOiB0cnVlLAorICAgICAgICAgICAgInBhcmFt
ZXRlcnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYi
OiAiRGF0YWJhc2VJZCIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInF1ZXJ5IiwgInR5
cGUiOiAic3RyaW5nIiB9CisgICAgICAgICAgICBdLAorICAgICAgICAgICAgInJldHVybnMiOiBb
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5
IiwgIm9wdGlvbmFsIjogdHJ1ZSwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwKKyAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlv
bmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5
cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIsICJvcHRpb25h
bCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRhdGFiYXNlSWQiLCAiJHJl
ZiI6ICJEYXRhYmFzZUlkIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAic3FsRXJyb3IiLCAiJHJlZiI6ICJFcnJvciIsICJvcHRpb25hbCI6IHRydWUgfSwK
KyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNjcmVlbkNvbG9yIiwgIiRyZWYiOiAiUHJpbWFy
eUNvbG9ycyIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjog
ImFsdGVybmF0ZUNvbG9ycyIsICIkcmVmIjogIkNvbG9yTGlzdCIsICJvcHRpb25hbCI6IHRydWUg
fSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInByaW50Q29sb3IiLCAidHlwZSI6ICJzdHJp
bmciLCAiZW51bSI6IFsiY3lhbiIsICJtYWdlbnRhIiwgInllbGxvdyIsICJibGFjayJdLCAib3B0
aW9uYWwiOiB0cnVlIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAg
ICAgICAgICAgIm5hbWUiOiAiZXhlY3V0ZVNRTFN5bmMiLAorICAgICAgICAgICAgInBhcmFtZXRl
cnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAi
RGF0YWJhc2VJZCIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInF1ZXJ5IiwgInR5cGUi
OiAic3RyaW5nIiB9CisgICAgICAgICAgICBdLAorICAgICAgICAgICAgInJldHVybnMiOiBbCisg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5Iiwg
Iml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiB9LAorICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiB9LAorICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogImRhdGFiYXNlSWQiLCAiJHJlZiI6ICJEYXRhYmFzZUlkIiB9LAorICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAic3FsRXJyb3IiLCAiJHJlZiI6ICJFcnJvciIgfSwKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogImFsdGVybmF0ZUNvbG9ycyIsICIkcmVmIjogIkNvbG9yTGlzdCIgfSwKKyAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogInNjcmVlbkNvbG9yIiwgIiRyZWYiOiAiUHJpbWFyeUNv
bG9ycyIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInByaW50Q29sb3IiLCAidHlwZSI6
ICJzdHJpbmciLCAiZW51bSI6IFsiY3lhbiIsICJtYWdlbnRhIiwgInllbGxvdyIsICJibGFjayJd
IH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5h
bWUiOiAiZXhlY3V0ZVNRTEFzeW5jIiwKKyAgICAgICAgICAgICJhc3luYyI6IHRydWUsCisgICAg
ICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRhdGFi
YXNlSWQiLCAiJHJlZiI6ICJEYXRhYmFzZUlkIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAicXVlcnkiLCAidHlwZSI6ICJzdHJpbmciIH0KKyAgICAgICAgICAgIF0sCisgICAgICAgICAg
ICAicmV0dXJucyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwg
InR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAorICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciIH0sCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiIH0sCisgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiIH0sCisgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiB9LAorICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiIH0s
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVycm9yIiB9
LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6ICJQcmlt
YXJ5Q29sb3JzIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYWx0ZXJuYXRlQ29sb3Jz
IiwgIiRyZWYiOiAiQ29sb3JMaXN0IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJp
bnRDb2xvciIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJjeWFuIiwgIm1hZ2VudGEiLCAi
eWVsbG93IiwgImJsYWNrIl0gfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXQorfQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2NvbW1hbmRzLXdpdGgt
b3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwLi4zNjFkNTdkODIwZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9jb21tYW5kcy13aXRoLW9w
dGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgpAQCAtMCwwICsxLDg1IEBACit7Cisg
ICAgImRvbWFpbiI6ICJEYXRhYmFzZSIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAg
ICAgICAgICAiaWQiOiAiRGF0YWJhc2VJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJpbnRlZ2Vy
IiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgaWRlbnRpZmllciBvZiBEYXRh
YmFzZSBvYmplY3QuIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAi
UHJpbWFyeUNvbG9ycyIsCisgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAg
ICAgImVudW0iOiBbInJlZCIsICJncmVlbiIsICJibHVlIl0KKyAgICAgICAgfSwKKyAgICAgICAg
eworICAgICAgICAgICAgImlkIjogIkNvbG9yTGlzdCIsCisgICAgICAgICAgICAidHlwZSI6ICJh
cnJheSIsCisgICAgICAgICAgICAiaXRlbXMiOiB7ICIkcmVmIjogIlByaW1hcnlDb2xvcnMiIH0K
KyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkVycm9yIiwKKyAgICAg
ICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRGF0
YWJhc2UgZXJyb3IuIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAibWVzc2FnZSIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6
ICJFcnJvciBtZXNzYWdlLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvZGUiLCAi
dHlwZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIGNvZGUuIiB9CisgICAgICAg
ICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJjb21tYW5kcyI6IFsKKyAgICAgICAgewor
ICAgICAgICAgICAgIm5hbWUiOiAiZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyIsCisgICAg
ICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVt
bk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAib3B0aW9uYWwiOiB0cnVlLCAiaXRlbXMiOiB7ICJ0
eXBlIjogInN0cmluZyIgfSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAi
dHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiLCAib3B0aW9uYWwiOiB0cnVlIH0s
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiLCAi
b3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2FkIiwg
InR5cGUiOiAiYW55IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiLCAib3B0aW9uYWwiOiB0cnVl
IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVycm9y
IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2NyZWVu
Q29sb3IiLCAiJHJlZiI6ICJQcmltYXJ5Q29sb3JzIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwgIiRyZWYiOiAiQ29sb3JM
aXN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJp
bnRDb2xvciIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJjeWFuIiwgIm1hZ2VudGEiLCAi
eWVsbG93IiwgImJsYWNrIl0sICJvcHRpb25hbCI6IHRydWUgfQorICAgICAgICAgICAgXSwKKyAg
ICAgICAgICAgICJyZXR1cm5zIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1u
TmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJvcHRpb25hbCI6IHRydWUsICJpdGVtcyI6IHsgInR5
cGUiOiAic3RyaW5nIiB9IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0
eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJu
YW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6IHRydWUgfSwK
KyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIsICJv
cHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAi
dHlwZSI6ICJhbnkiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIsICJvcHRpb25hbCI6IHRydWUg
fSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAiRXJyb3Ii
LCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5D
b2xvciIsICIkcmVmIjogIlByaW1hcnlDb2xvcnMiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJhbHRlcm5hdGVDb2xvcnMiLCAiJHJlZiI6ICJDb2xvckxp
c3QiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcmlu
dENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbImN5YW4iLCAibWFnZW50YSIsICJ5
ZWxsb3ciLCAiYmxhY2siXSwgIm9wdGlvbmFsIjogdHJ1ZSB9CisgICAgICAgICAgICBdCisgICAg
ICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImV4ZWN1dGVOb09wdGlvbmFs
UGFyYW1ldGVycyIsCisgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICJ0
eXBlIjogInN0cmluZyIgfSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAi
dHlwZSI6ICJzdHJpbmciIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAi
LCAidHlwZSI6ICJudW1iZXIiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMi
LCAidHlwZSI6ICJvYmplY3QiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2Fk
IiwgInR5cGUiOiAiYW55IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJ
ZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJz
cWxFcnJvciIsICIkcmVmIjogIkVycm9yIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
c2NyZWVuQ29sb3IiLCAiJHJlZiI6ICJQcmltYXJ5Q29sb3JzIiB9LAorICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwgIiRyZWYiOiAiQ29sb3JMaXN0IiB9LAorICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmluZyIsICJl
bnVtIjogWyJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93IiwgImJsYWNrIl0gfQorICAgICAgICAg
ICAgXSwKKyAgICAgICAgICAgICJyZXR1cm5zIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgInR5cGUiOiAic3Ry
aW5nIiB9IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0
cmluZyIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjog
Im51bWJlciIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjog
Im9iamVjdCIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6
ICJhbnkiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYi
OiAiRGF0YWJhc2VJZCIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNxbEVycm9yIiwg
IiRyZWYiOiAiRXJyb3IiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5Db2xv
ciIsICIkcmVmIjogIlByaW1hcnlDb2xvcnMiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJhbHRlcm5hdGVDb2xvcnMiLCAiJHJlZiI6ICJDb2xvckxpc3QiIH0sCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbImN5
YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSB9CisgICAgICAgICAgICBdCisgICAg
ICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbiBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9kZWZpbml0aW9ucy13
aXRoLW1hYy1wbGF0Zm9ybS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwLi45YmU0NmExN2FkMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5q
c29uCkBAIC0wLDAgKzEsMjggQEAKK3sKKyAgICAiZG9tYWluIjogIk5ldHdvcmsiLAorICAgICJ0
eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIk5ldHdvcmtFcnJvciIsCisg
ICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgImNvbmRpdGlvbiI6ICJQ
TEFURk9STShNQUMpIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAibWVzc2FnZSIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6
ICJFcnJvciBtZXNzYWdlLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvZGUiLCAi
dHlwZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIGNvZGUuIiB9CisgICAgICAg
ICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJjb21tYW5kcyI6IFsKKyAgICAgICAgewor
ICAgICAgICAgICAgIm5hbWUiOiAibG9hZFJlc291cmNlIiwKKyAgICAgICAgICAgICJjb25kaXRp
b24iOiAiUExBVEZPUk0oTUFDKSIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9hZHMg
YSByZXNvdXJjZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFn
ZSB3aXRob3V0IGNyb3NzIG9yaWdpbiBjaGVja3MuIgorICAgICAgICB9CisgICAgXSwKKyAgICAi
ZXZlbnRzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJyZXNvdXJjZUxvYWRl
ZCIsCisgICAgICAgICAgICAiY29uZGl0aW9uIjogIlBMQVRGT1JNKE1BQykiLAorICAgICAgICAg
ICAgImRlc2NyaXB0aW9uIjogIkEgcmVzb3VyY2Ugd2FzIGxvYWRlZC4iCisgICAgICAgIH0KKyAg
ICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2RvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbgpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMWZlYjBjOWEyN2UKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uCkBAIC0wLDAgKzEsOCBAQAorWworeworICAg
ICJkb21haW4iOiAiRG9tYWluIiwKKyAgICAiZGVidWdnYWJsZVR5cGVzIjogWyJ3ZWItcGFnZSJd
LAorICAgICJjb21tYW5kcyI6IFt7Im5hbWUiOiAiQ29tbWFuZCJ9XSwKKyAgICAiZXZlbnRzIjog
W3sibmFtZSI6ICJFdmVudCJ9XQorfQorXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2RvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRv
bWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2RvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dh
YmxlVHlwZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5mNjJm
YjM4YmE3OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9kb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdn
YWJsZVR5cGUuanNvbgpAQCAtMCwwICsxLDggQEAKK1sKK3sKKyAgICAiZG9tYWluIjogIkRvbWFp
biIsCisgICAgImRlYnVnZ2FibGVUeXBlcyI6IFsicGFnZSJdLAorICAgICJjb21tYW5kcyI6IFt7
Im5hbWUiOiAiQ29tbWFuZCIsICJ0YXJnZXRUeXBlcyI6IFsicGFnZSIsICJ3b3JrZXIiXX1dLAor
ICAgICJldmVudHMiOiBbeyJuYW1lIjogIkV2ZW50In1dCit9CitdCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZG9tYWluLXRhcmdldFR5
cGVzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZG9tYWluLXRhcmdldFR5cGVzLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAuLjZhNmU0MGQ2MGFkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2RvbWFpbi10YXJnZXRUeXBlcy5qc29uCkBAIC0w
LDAgKzEsOCBAQAorWworeworICAgICJkb21haW4iOiAiRG9tYWluIiwKKyAgICAidGFyZ2V0VHlw
ZXMiOiBbInBhZ2UiXSwKKyAgICAiY29tbWFuZHMiOiBbeyJuYW1lIjogIkNvbW1hbmQiLCAidGFy
Z2V0VHlwZXMiOiBbInBhZ2UiXX1dLAorICAgICJldmVudHMiOiBbeyJuYW1lIjogIkV2ZW50Iiwg
InRhcmdldFR5cGVzIjogWyJwYWdlIl19XQorfQorXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNv
bW1hbmQtc2l6ZXMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjk0YThlY2IxNzZkCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2RvbWFp
bnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgpAQCAtMCwwICsxLDU0IEBACitbCit7
CisgICAgImRvbWFpbiI6ICJOZXR3b3JrMSIsCisgICAgImNvbW1hbmRzIjogWworICAgICAgICB7
CisgICAgICAgICAgICAibmFtZSI6ICJsb2FkUmVzb3VyY2UxIiwKKyAgICAgICAgICAgICJkZXNj
cmlwdGlvbiI6ICJMb2FkcyBhIHJlc291cmNlIGluIHRoZSBjb250ZXh0IG9mIGEgZnJhbWUgb24g
dGhlIGluc3BlY3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNoZWNrcy4iCisgICAgICAg
IH0KKyAgICBdCit9LAoreworICAgICJkb21haW4iOiAiTmV0d29yazIiLAorICAgICJ0eXBlcyI6
IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkxvYWRlcklkIiwKKyAgICAgICAgICAg
ICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIGxv
YWRlciBpZGVudGlmaWVyLiIKKyAgICAgICAgfQorICAgIF0KK30sCit7CisgICAgImRvbWFpbiI6
ICJOZXR3b3JrMyIsCisgICAgImNvbW1hbmRzIjogWworICAgICAgICB7CisgICAgICAgICAgICAi
bmFtZSI6ICJsb2FkUmVzb3VyY2UxIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2Fk
cyBhIHJlc291cmNlIGluIHRoZSBjb250ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGluc3BlY3RlZCBw
YWdlIHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNoZWNrcy4iCisgICAgICAgIH0sCisgICAgICAgIHsK
KyAgICAgICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJjZTIiLAorICAgICAgICAgICAgImRlc2Ny
aXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0
aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKKyAgICAgICAg
fSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAibG9hZFJlc291cmNlMyIsCisgICAg
ICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9hZHMgYSByZXNvdXJjZSBpbiB0aGUgY29udGV4dCBv
ZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFnZSB3aXRob3V0IGNyb3NzIG9yaWdpbiBjaGVj
a3MuIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJsb2FkUmVz
b3VyY2U0IiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBhIHJlc291cmNlIGlu
IHRoZSBjb250ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGluc3BlY3RlZCBwYWdlIHdpdGhvdXQgY3Jv
c3Mgb3JpZ2luIGNoZWNrcy4iCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJu
YW1lIjogImxvYWRSZXNvdXJjZTUiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRz
IGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBh
Z2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKKyAgICAgICAgfSwKKyAgICAgICAgewor
ICAgICAgICAgICAgIm5hbWUiOiAibG9hZFJlc291cmNlNiIsCisgICAgICAgICAgICAiZGVzY3Jp
cHRpb24iOiAiTG9hZHMgYSByZXNvdXJjZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1lIG9uIHRo
ZSBpbnNwZWN0ZWQgcGFnZSB3aXRob3V0IGNyb3NzIG9yaWdpbiBjaGVja3MuIgorICAgICAgICB9
LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJsb2FkUmVzb3VyY2U3IiwKKyAgICAg
ICAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBhIHJlc291cmNlIGluIHRoZSBjb250ZXh0IG9m
IGEgZnJhbWUgb24gdGhlIGluc3BlY3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNoZWNr
cy4iCisgICAgICAgIH0KKyAgICBdCit9CitdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZW51bS12YWx1ZXMuanNvbiBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9lbnVtLXZhbHVlcy5qc29uCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jZGFkNjFkZjdjOQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9lbnVtLXZhbHVlcy5qc29uCkBAIC0wLDAgKzEsMzUgQEAKK3siZG9tYWlucyI6WworeworICAg
ICJkb21haW4iOiAiVHlwZURvbWFpbiIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAg
ICAgICAgICAiaWQiOiAiVHlwZURvbWFpbkVudW0iLAorICAgICAgICAgICAgInR5cGUiOiAic3Ry
aW5nIiwKKyAgICAgICAgICAgICJlbnVtIjogWyJzaGFyZWQiLCAicmVkIiwgImdyZWVuIiwgImJs
dWUiXQorICAgICAgICB9CisgICAgXQorfSwKK3sKKyAgICAiZG9tYWluIjogIkNvbW1hbmREb21h
aW4iLAorICAgICJjb21tYW5kcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAi
Y29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUiLAorICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBb
XSwKKyAgICAgICAgICAgICJyZXR1cm5zIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
cmV0dXJuVmFsdWUiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsic2hhcmVkIiwgImN5YW4i
LCAibWFnZW50YSIsICJ5ZWxsb3ciXSB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBd
Cit9LAoreworICAgICJkb21haW4iOiAiRXZlbnREb21haW4iLAorICAgICJldmVudHMiOiBbCisg
ICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImV2ZW50V2l0aEVudW1QYXJhbWV0ZXIiLAor
ICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJw
YXJhbWV0ZXIiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsic2hhcmVkIiwgImJsYWNrIiwg
IndoaXRlIl0gfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXQorfQorXX0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9ldmVu
dC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V2ZW50LXRhcmdldFR5cGUt
bWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAuLjRkZmVkNDFlZDIxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V2ZW50LXRhcmdldFR5cGUt
bWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KQEAgLTAsMCArMSw4IEBACitbCit7
CisgICAgImRvbWFpbiI6ICJEb21haW4iLAorICAgICJkZWJ1Z2dhYmxlVHlwZXMiOiBbInBhZ2Ui
XSwKKyAgICAiY29tbWFuZHMiOiBbeyJuYW1lIjogIkNvbW1hbmQifV0sCisgICAgImV2ZW50cyI6
IFt7Im5hbWUiOiAiRXZlbnQiLCAidGFyZ2V0VHlwZXMiOiBbInBhZ2UiLCAid29ya2VyIl19XQor
fQorXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbiBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9ldmVudHMtd2l0aC1vcHRpb25hbC1w
YXJhbWV0ZXJzLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmNh
YmJmMTBiODM2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgpA
QCAtMCwwICsxLDU5IEBACit7CisgICAgImRvbWFpbiI6ICJEYXRhYmFzZSIsCisgICAgInR5cGVz
IjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiRGF0YWJhc2VJZCIsCisgICAgICAg
ICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1
ZSBpZGVudGlmaWVyIG9mIERhdGFiYXNlIG9iamVjdC4iCisgICAgICAgIH0sCisgICAgICAgIHsK
KyAgICAgICAgICAgICJpZCI6ICJQcmltYXJ5Q29sb3JzIiwKKyAgICAgICAgICAgICJ0eXBlIjog
InN0cmluZyIsCisgICAgICAgICAgICAidmFsdWVzIjogWyJyZWQiLCAiZ3JlZW4iLCAiYmx1ZSJd
CisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJDb2xvckxpc3QiLAor
ICAgICAgICAgICAgInR5cGUiOiAiYXJyYXkiLAorICAgICAgICAgICAgIml0ZW1zIjogeyAiJHJl
ZiI6ICJQcmltYXJ5Q29sb3JzIiB9CisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAg
ICJpZCI6ICJFcnJvciIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAg
ICAgImRlc2NyaXB0aW9uIjogIkRhdGFiYXNlIGVycm9yLiIsCisgICAgICAgICAgICAicHJvcGVy
dGllcyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm1lc3NhZ2UiLCAidHlwZSI6ICJz
dHJpbmciLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgbWVzc2FnZS4iIH0sCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJjb2RlIiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJF
cnJvciBjb2RlLiIgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAiZXZl
bnRzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJkaWRFeGVjdXRlT3B0aW9u
YWxQYXJhbWV0ZXJzIiwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJvcHRpb25hbCI6
IHRydWUsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWUgfSwK
KyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIs
ICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIs
ICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7
ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVycm9yIiwgIm9w
dGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2NyZWVuQ29sb3Ii
LCAiJHJlZiI6ICJQcmltYXJ5Q29sb3JzIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwgIiRyZWYiOiAiQ29sb3JMaXN0Iiwg
Im9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJpbnRDb2xv
ciIsICJ0eXBlIjogInN0cmluZyIsICJ2YWx1ZXMiOiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxs
b3ciLCAiYmxhY2siXSwgIm9wdGlvbmFsIjogdHJ1ZSB9CisgICAgICAgICAgICBdCisgICAgICAg
IH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImRpZEV4ZWN1dGVOb09wdGlvbmFs
UGFyYW1ldGVycyIsCisgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICJ0
eXBlIjogInN0cmluZyIgfSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAi
dHlwZSI6ICJzdHJpbmciIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAi
LCAidHlwZSI6ICJudW1iZXIiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMi
LCAidHlwZSI6ICJvYmplY3QiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2Fk
IiwgInR5cGUiOiAiYW55IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic3FsRXJyb3Ii
LCAiJHJlZiI6ICJFcnJvciIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNjcmVlbkNv
bG9yIiwgIiRyZWYiOiAiUHJpbWFyeUNvbG9ycyIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogImFsdGVybmF0ZUNvbG9ycyIsICIkcmVmIjogIkNvbG9yTGlzdCIgfSwKKyAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInByaW50Q29sb3IiLCAidHlwZSI6ICJzdHJpbmciLCAidmFsdWVzIjog
WyJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93IiwgImJsYWNrIl0gfQorICAgICAgICAgICAgXQor
ICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGlu
Zy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZC10YXJnZXRUeXBlLW1h
dGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOTEzZWM4MTczY2IKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29t
bWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJlc3Vs
dApAQCAtMCwwICsxLDEwMzAgQEAKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29t
bWFuZHMuanMKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdl
dFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworLy8gRG9tYWluCitJbnNwZWN0b3JCYWNrZW5k
LnJlZ2lzdGVyRG9tYWluKCJEb21haW4iLCBbInBhZ2UiLCAid29ya2VyIl0pOworSW5zcGVjdG9y
QmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIkRvbWFpbi5Db21tYW5kIiwgbnVsbCwgW10sIFtdKTsK
K0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudCgiRG9tYWluLkV2ZW50IiwgbnVsbCwgW10p
OworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbkRpc3BhdGNoZXIgPSBJbnNwZWN0b3JC
YWNrZW5kLnJlZ2lzdGVyRGlzcGF0Y2hlci5iaW5kKEluc3BlY3RvckJhY2tlbmQsICJEb21haW4i
KTsKK0luc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkRvbWFpbiIsIFsicGFnZSJdKTsK
KyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVn
Z2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9y
IHsKKworY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHZv
aWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3Bh
dGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KKyAg
ICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBt
X2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Citwcml2YXRlOgorICAgIFJlZlB0cjxCYWNrZW5k
RGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKK307CisKKworY2xhc3MgQWx0ZXJuYXRl
RG9tYWluQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgfkFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRj
aGVyKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIENvbW1hbmQobG9uZyBjYWxsSWQpID0gMDsKK307
CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVy
cy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZC10YXJnZXRUeXBl
LW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFBy
b3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVz
cGFjZSBJbnNwZWN0b3IgeworCit0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKworI2lmIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorY2xhc3MgQWx0ZXJuYXRlRG9t
YWluQmFja2VuZERpc3BhdGNoZXI7CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCisKK2NsYXNzIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7
CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIENvbW1hbmQoRXJyb3JTdHJpbmcmKSA9IDA7Citw
cm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+RG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7
Cit9OworCitjbGFzcyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBw
bGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxEb21h
aW5CYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgRG9tYWluQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJ
ZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkgZmlu
YWw7Citwcml2YXRlOgorICAgIHZvaWQgQ29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpT
T046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKK3B1YmxpYzoKKyAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIo
QWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsg
bV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQorcHJpdmF0ZToK
KyAgICBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciogbV9hbHRlcm5hdGVEaXNwYXRj
aGVyIHsgbnVsbHB0ciB9OworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQorcHJpdmF0ZToKKyAgICBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5k
RGlzcGF0Y2hlciYsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIERvbWFp
bkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2VudCB7IG51bGxwdHIgfTsKK307CisKK30g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNo
ZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5n
LWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0QmFja2Vu
ZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9u
dGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3Rm
L05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCisjaWYg
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjaW5jbHVkZSAiVGVzdEFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgorI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworRG9tYWlu
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+RG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
KCkgeyB9CisKK1JlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gRG9tYWluQmFja2VuZERpc3Bh
dGNoZXI6OmNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIERvbWFp
bkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgRG9tYWluQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIsIGFnZW50KSk7
Cit9CisKK0RvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihC
YWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIERvbWFpbkJhY2tlbmREaXNwYXRj
aGVySGFuZGxlciogYWdlbnQpCisgICAgOiBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihi
YWNrZW5kRGlzcGF0Y2hlcikKKyAgICAsIG1fYWdlbnQoYWdlbnQpCit7CisgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKCJEb21haW4iX3MsIHRoaXMp
OworfQorCit2b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVl
c3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkK
K3sKKyAgICBSZWY8RG9tYWluQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOworCisg
ICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVyczsKKyAgICBtZXNzYWdlLT5nZXRPYmpl
Y3QoInBhcmFtcyJfcywgcGFyYW1ldGVycyk7CisKKyAgICBpZiAobWV0aG9kID09ICJDb21tYW5k
IikgeworICAgICAgICBDb21tYW5kKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQ
cm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4u
IiArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKK30KKwordm9pZCBEb21haW5CYWNrZW5k
RGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4m
JikKK3sKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyAgICBp
ZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hl
ci0+Q29tbWFuZChyZXF1ZXN0SWQpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmIC8v
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCisgICAgRXJyb3JTdHJp
bmcgZXJyb3I7CisgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKTsKKyAgICBtX2FnZW50LT5Db21tYW5kKGVycm9yKTsKKworICAgIGlmICghZXJyb3Iu
bGVuZ3RoKCkpCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1
ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOworICAgIGVsc2UKKyAgICAgICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2Vy
dmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
CisKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVU
eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8
d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEZyb250ZW5kUm91dGVyOworCitjbGFzcyBEb21h
aW5Gcm9udGVuZERpc3BhdGNoZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVi
bGljOgorICAgIERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcihGcm9udGVuZFJvdXRlciYgZnJvbnRl
bmRSb3V0ZXIpIDogbV9mcm9udGVuZFJvdXRlcihmcm9udGVuZFJvdXRlcikgeyB9CisgICAgdm9p
ZCBFdmVudCgpOworcHJpdmF0ZToKKyAgICBGcm9udGVuZFJvdXRlciYgbV9mcm9udGVuZFJvdXRl
cjsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0RnJv
bnRlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRj
aGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdl
dFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3ZvaWQgRG9tYWluRnJvbnRlbmREaXNwYXRj
aGVyOjpFdmVudCgpCit7CisgICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJf
cywgIkRvbWFpbi5FdmVudCJfcyk7CisKKyAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChq
c29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5
cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlw
ZXMuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9y
IHsKKworCisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKworCisKKworCisKKworCit9IC8vIG5h
bWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xP
YmplY3RzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmQtdGFy
Z2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgorLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsK
KworbmFtZXNwYWNlIFByb3RvY29sIHsKKworCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisK
K30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9i
amVjdHMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hl
cnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmQtdGFyZ2V0VHlw
ZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0
ci5oPgorCitAcHJvdG9jb2wgVGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcjsKKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKKworY2xhc3MgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmRE
aXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVy
IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBPYmpDSW5zcGVj
dG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFu
ZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQorICAgIHZvaWQgQ29tbWFu
ZChsb25nIHJlcXVlc3RJZCkgZmluYWw7Citwcml2YXRlOgorICAgIFJldGFpblB0cjxpZDxUZXN0
UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNw
YXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hl
cnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5
cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJU
ZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bEludGVybmFsLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisj
aW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3Zv
aWQgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVx
dWVzdElkKQoreworICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxl
Y3RvcihDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7CisgICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBC
YWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRG9tYWluLkNvbW1hbmQnIHdhcyBu
b3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vy
cm9ycygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWQgZXJyb3JDYWxsYmFjayA9
IF4oTlNTdHJpbmcgKmVycm9yKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9y
dFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3Is
IGVycm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMo
KTsKKyAgICB9OworCisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKKyAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKSwgZmFsc2UpOworICAgIH07CisKKyAgICBbbV9kZWxlZ2F0ZSBDb21tYW5kV2l0aEVycm9y
Q2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsK
K30KKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24uaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1h
bmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxXZWJJbnNwZWN0
b3IvVGVzdFByb3RvY29sLmg+CisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0
IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKK0Bw
cm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4sIHNldHRlcj1zZXREb21haW5IYW5kbGVyOikgaWQ8
VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4gZG9tYWluSGFuZGxlcjsKK0Bwcm9wZXJ0
eSAobm9uYXRvbWljLCByZWFkb25seSkgVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNw
YXRjaGVyICpkb21haW5FdmVudERpc3BhdGNoZXI7CitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24ubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21t
YW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3Rv
Y29sQ29uZmlndXJhdGlvbi5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgor
I2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisjaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgorI2ltcG9ydCA8SmF2YVNj
cmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgorCit1c2lu
ZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29u
ZmlndXJhdGlvbgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRy
b2xsZXI7CisgICAgaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4gX2RvbWFpbkhh
bmRsZXI7CisgICAgVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyICpfZG9t
YWluRXZlbnREaXNwYXRjaGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9s
bGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBz
ZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsK
KyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwor
ICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbX2RvbWFpbkhh
bmRsZXIgcmVsZWFzZV07CisgICAgW19kb21haW5FdmVudERpc3BhdGNoZXIgcmVsZWFzZV07Cisg
ICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistICh2b2lkKXNldERvbWFpbkhhbmRsZXI6KGlkPFRl
c3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+KWhhbmRsZXIKK3sKKyAgICBpZiAoaGFuZGxl
ciA9PSBfZG9tYWluSGFuZGxlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgW19kb21haW5IYW5k
bGVyIHJlbGVhc2VdOworICAgIF9kb21haW5IYW5kbGVyID0gW2hhbmRsZXIgcmV0YWluXTsKKwor
ICAgIGF1dG8gYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IG1ha2VVbmlxdWU8T2JqQ0luc3BlY3RvckRv
bWFpbkJhY2tlbmREaXNwYXRjaGVyPihoYW5kbGVyKTsKKyAgICBhdXRvIGFsdGVybmF0ZUFnZW50
ID0gbWFrZVVuaXF1ZTxBbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudDxEb21haW5CYWNrZW5kRGlz
cGF0Y2hlciwgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXI+PigiRG9tYWluIl9zLCAq
X2NvbnRyb2xsZXIsIFdURk1vdmUoYWx0ZXJuYXRlRGlzcGF0Y2hlcikpOworICAgIF9jb250cm9s
bGVyLT5hcHBlbmRFeHRyYUFnZW50KFdURk1vdmUoYWx0ZXJuYXRlQWdlbnQpKTsKK30KKworLSAo
aWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4pZG9tYWluSGFuZGxlcgoreworICAg
IHJldHVybiBfZG9tYWluSGFuZGxlcjsKK30KKworLSAoVGVzdFByb3RvY29sRG9tYWluRG9tYWlu
RXZlbnREaXNwYXRjaGVyICopZG9tYWluRXZlbnREaXNwYXRjaGVyCit7CisgICAgaWYgKCFfZG9t
YWluRXZlbnREaXNwYXRjaGVyKQorICAgICAgICBfZG9tYWluRXZlbnREaXNwYXRjaGVyID0gW1tU
ZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgYWxsb2NdIGluaXRXaXRoQ29u
dHJvbGxlcjpfY29udHJvbGxlcl07CisgICAgcmV0dXJuIF9kb21haW5FdmVudERpc3BhdGNoZXI7
Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24u
bW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hp
bmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2lt
cG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDx3dGYvSlNPTlZh
bHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24g
VGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyCit7CisgICAgQXVnbWVudGFi
bGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKK30KKworLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250
cm9sbGVyCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAg
ICAgIHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250cm9sbGVy
ID0gY29udHJvbGxlcjsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClFdmVudAorewor
ICAgIGNvbnN0IEZyb250ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29udHJvbGxlci0+ZnJvbnRlbmRS
b3V0ZXIoKTsKKworICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJE
b21haW4uRXZlbnQiX3MpOworICAgIHJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNP
TlN0cmluZygpKTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZl
bnREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmct
ZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKKyNpbXBv
cnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KKworCisKKworCisKKwor
CitAcHJvdG9jb2wgVGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlciA8TlNPYmplY3Q+CitA
b3B0aW9uYWwKKy0gKHZvaWQpQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3Ry
aW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikodm9pZCkp
c3VjY2Vzc0NhbGxiYWNrOworQGVuZAorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVm
YXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRj
aGVyIDogTlNPYmplY3QKKy0gKHZvaWQpRXZlbnQ7CitAZW5kCisKKworI2ltcG9ydCA8V2ViSW5z
cGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgorCisjIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRl
cm5hbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZC10YXJnZXRU
eXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2lt
cG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKKyNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8d3RmL0pT
T05WYWx1ZXMuaD4KKworQGludGVyZmFjZSBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERp
c3BhdGNoZXIgKFByaXZhdGUpCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihJ
bnNwZWN0b3I6OkF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcjsKK0Bl
bmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dh
YmxlVHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
KyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3Rv
Y29sQXJyYXlDb252ZXJzaW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordGVtcGxh
dGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgorT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJv
dG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7CisKK30gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisKKyMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWlu
LWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisKKyNpbXBv
cnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgor
I2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKwor
dXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisKKworCisKKyMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xUeXBlcy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmQtdGFy
Z2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgorLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRl
cm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBv
cnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisjaW1wb3J0
IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcg
bmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVz
Lm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbi1yZXN1bHQg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
Y29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbi1yZXN1bHQKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjk4ODE3NWNjMDRmCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2Nv
bW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24tcmVzdWx0CkBAIC0wLDAgKzEsMTc4MiBA
QAorIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcworLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworLy8gRGF0YWJh
c2UKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIkRhdGFiYXNlIiwgbnVsbCk7CitJ
bnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiRGF0YWJhc2UuUHJpbWFyeUNvbG9ycyIsIHtS
ZWQ6ICJyZWQiLCBHcmVlbjogImdyZWVuIiwgQmx1ZTogImJsdWUifSk7CitJbnNwZWN0b3JCYWNr
ZW5kLnJlZ2lzdGVyQ29tbWFuZCgiRGF0YWJhc2UuZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVy
blZhbHVlcyIsIG51bGwsIFt7Im5hbWUiOiAiZGF0YWJhc2VJZCIsICJ0eXBlIjogIm51bWJlciJ9
LCB7Im5hbWUiOiAicXVlcnkiLCAidHlwZSI6ICJzdHJpbmcifV0sIFsiY29sdW1uTmFtZXMiLCAi
bm90ZXMiLCAidGltZXN0YW1wIiwgInZhbHVlcyIsICJwYXlsb2FkIiwgImRhdGFiYXNlSWQiLCAi
c3FsRXJyb3IiLCAic2NyZWVuQ29sb3IiLCAiYWx0ZXJuYXRlQ29sb3JzIiwgInByaW50Q29sb3Ii
XSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiRGF0YWJhc2UuZXhlY3V0ZVNR
TEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMiLCBudWxsLCBbeyJuYW1lIjogImRhdGFiYXNlSWQi
LCAidHlwZSI6ICJudW1iZXIifSwgeyJuYW1lIjogInF1ZXJ5IiwgInR5cGUiOiAic3RyaW5nIn1d
LCBbImNvbHVtbk5hbWVzIiwgIm5vdGVzIiwgInRpbWVzdGFtcCIsICJ2YWx1ZXMiLCAicGF5bG9h
ZCIsICJkYXRhYmFzZUlkIiwgInNxbEVycm9yIiwgInNjcmVlbkNvbG9yIiwgImFsdGVybmF0ZUNv
bG9ycyIsICJwcmludENvbG9yIl0pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQo
IkRhdGFiYXNlLmV4ZWN1dGVTUUxTeW5jIiwgbnVsbCwgW3sibmFtZSI6ICJkYXRhYmFzZUlkIiwg
InR5cGUiOiAibnVtYmVyIn0sIHsibmFtZSI6ICJxdWVyeSIsICJ0eXBlIjogInN0cmluZyJ9XSwg
WyJjb2x1bW5OYW1lcyIsICJub3RlcyIsICJ0aW1lc3RhbXAiLCAidmFsdWVzIiwgInBheWxvYWQi
LCAiZGF0YWJhc2VJZCIsICJzcWxFcnJvciIsICJhbHRlcm5hdGVDb2xvcnMiLCAic2NyZWVuQ29s
b3IiLCAicHJpbnRDb2xvciJdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJE
YXRhYmFzZS5leGVjdXRlU1FMQXN5bmMiLCBudWxsLCBbeyJuYW1lIjogImRhdGFiYXNlSWQiLCAi
dHlwZSI6ICJudW1iZXIifSwgeyJuYW1lIjogInF1ZXJ5IiwgInR5cGUiOiAic3RyaW5nIn1dLCBb
ImNvbHVtbk5hbWVzIiwgIm5vdGVzIiwgInRpbWVzdGFtcCIsICJ2YWx1ZXMiLCAicGF5bG9hZCIs
ICJkYXRhYmFzZUlkIiwgInNxbEVycm9yIiwgInNjcmVlbkNvbG9yIiwgImFsdGVybmF0ZUNvbG9y
cyIsICJwcmludENvbG9yIl0pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRhdGFiYXNlRGlz
cGF0Y2hlciA9IEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEaXNwYXRjaGVyLmJpbmQoSW5zcGVj
dG9yQmFja2VuZCwgIkRhdGFiYXNlIik7CitJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWlu
KCJEYXRhYmFzZSIsIG51bGwpOworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFu
ZHMuanMKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMu
aAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMt
YXR0cmlidXRlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9y
IHsKKworY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHZv
aWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3Bh
dGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KKyAg
ICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBt
X2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Citwcml2YXRlOgorICAgIFJlZlB0cjxCYWNrZW5k
RGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKK307CisKKworY2xhc3MgQWx0ZXJuYXRl
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0
Y2hlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+QWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlcigpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0
dXJuVmFsdWVzKGxvbmcgY2FsbElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBp
bl9xdWVyeSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJl
dHVyblZhbHVlcyhsb25nIGNhbGxJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYg
aW5fcXVlcnkpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTFN5bmMobG9uZyBjYWxs
SWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxBc3luYyhsb25nIGNhbGxJZCwgaW50IGluX2RhdGFiYXNl
SWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCisjIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisj
IyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JT
dHJpbmc7CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK2Ns
YXNzIEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI7CisjZW5kaWYgLy8gRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKK2NsYXNzIERhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyIHsKK3B1YmxpYzoKKyAgICAvLyBOYW1lZCBhZnRlciBwYXJhbWV0
ZXIgJ3ByaW50Q29sb3InIHdoaWxlIGdlbmVyYXRpbmcgY29tbWFuZC9ldmVudCBleGVjdXRlU1FM
U3luY09wdGlvbmFsUmV0dXJuVmFsdWVzLgorICAgIGVudW0gY2xhc3MgUHJpbnRDb2xvciB7Cisg
ICAgICAgIEN5YW4gPSAzLAorICAgICAgICBNYWdlbnRhID0gNCwKKyAgICAgICAgWWVsbG93ID0g
NSwKKyAgICAgICAgQmxhY2sgPSA2LAorICAgIH07IC8vIGVudW0gY2xhc3MgUHJpbnRDb2xvcgor
ICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKEVycm9y
U3RyaW5nJiwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnksIFJlZlB0
cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiBvcHRfb3V0X2NvbHVtbk5hbWVzLCBPcHRpb25hbDxT
dHJpbmc+JiBvcHRfb3V0X25vdGVzLCBPcHRpb25hbDxkb3VibGU+JiBvcHRfb3V0X3RpbWVzdGFt
cCwgT3B0aW9uYWw8SlNPTjo6T2JqZWN0PiYgb3B0X291dF92YWx1ZXMsIE9wdGlvbmFsPEpTT046
OlZhbHVlPiYgb3B0X291dF9wYXlsb2FkLCBPcHRpb25hbDxpbnQ+JiBvcHRfb3V0X2RhdGFiYXNl
SWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiBvcHRfb3V0
X3NxbEVycm9yLCBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyog
b3B0X291dF9zY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNl
OjpDb2xvckxpc3Q+JiBvcHRfb3V0X2FsdGVybmF0ZUNvbG9ycywgRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3IqIG9wdF9vdXRfcHJpbnRDb2xvcikgPSAwOworICAg
IGNsYXNzIEV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2sgOiBwdWJs
aWMgQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZSB7CisgICAgcHVibGljOgorICAgICAg
ICBFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrKFJlZjxCYWNrZW5k
RGlzcGF0Y2hlcj4mJiwgaW50IGlkKTsKKyAgICAgICAgdm9pZCBzZW5kU3VjY2VzcyhSZWZQdHI8
SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYmIGNvbHVtbk5hbWVzLCBPcHRpb25hbDxTdHJpbmc+JiBu
b3RlcywgT3B0aW9uYWw8ZG91YmxlPiYgdGltZXN0YW1wLCBPcHRpb25hbDxKU09OOjpPYmplY3Q+
JiB2YWx1ZXMsIE9wdGlvbmFsPEpTT046OlZhbHVlPiYgcGF5bG9hZCwgT3B0aW9uYWw8aW50PiYg
ZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4m
JiBzcWxFcnJvciwgT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1h
cnlDb2xvcnM+IHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6OkNvbG9yTGlzdD4mJiBhbHRlcm5hdGVDb2xvcnMsIE9wdGlvbmFsPERhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yPiBwcmludENvbG9yKTsKKyAgICB9OworICAg
IHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhpbnQgaW5f
ZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSwgUmVmPEV4ZWN1dGVTUUxBc3luY09w
dGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2s+JiYgY2FsbGJhY2spID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgZXhlY3V0ZVNRTFN5bmMoRXJyb3JTdHJpbmcmLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29u
c3QgU3RyaW5nJiBpbl9xdWVyeSwgUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mIG91dF9j
b2x1bW5OYW1lcywgU3RyaW5nKiBvdXRfbm90ZXMsIGRvdWJsZSogb3V0X3RpbWVzdGFtcCwgSlNP
Tjo6T2JqZWN0KiBvdXRfdmFsdWVzLCBKU09OOjpWYWx1ZSogb3V0X3BheWxvYWQsIGludCogb3V0
X2RhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+
JiBvdXRfc3FsRXJyb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29s
b3JMaXN0PiYgb3V0X2FsdGVybmF0ZUNvbG9ycywgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6OlByaW1hcnlDb2xvcnMqIG91dF9zY3JlZW5Db2xvciwgRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXI6OlByaW50Q29sb3IqIG91dF9wcmludENvbG9yKSA9IDA7CisgICAgY2xhc3Mg
RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2sgOiBwdWJsaWMgQmFja2VuZERpc3BhdGNoZXI6OkNhbGxi
YWNrQmFzZSB7CisgICAgcHVibGljOgorICAgICAgICBFeGVjdXRlU1FMQXN5bmNDYWxsYmFjayhS
ZWY8QmFja2VuZERpc3BhdGNoZXI+JiYsIGludCBpZCk7CisgICAgICAgIHZvaWQgc2VuZFN1Y2Nl
c3MoUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mJiBjb2x1bW5OYW1lcywgY29uc3QgU3Ry
aW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgSlNPTjo6T2JqZWN0IHZhbHVlcywgSlNPTjo6
VmFsdWUgcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpEYXRhYmFzZTo6RXJyb3I+JiYgc3FsRXJyb3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFi
YXNlOjpQcmltYXJ5Q29sb3JzIHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4mJiBhbHRlcm5hdGVDb2xvcnMsIERhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yIHByaW50Q29sb3IpOworICAgIH07CisgICAg
dmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxBc3luYyhpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3Ry
aW5nJiBpbl9xdWVyeSwgUmVmPEV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrPiYmIGNhbGxiYWNrKSA9
IDA7Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXIoKTsKK307CisKK2NsYXNzIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBw
dWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHN0YXRp
YyBSZWY8RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVy
JiwgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICB2b2lkIGRpc3BhdGNo
KGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4m
JiBtZXNzYWdlKSBmaW5hbDsKK3ByaXZhdGU6CisgICAgdm9pZCBleGVjdXRlU1FMU3luY09wdGlv
bmFsUmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBh
cmFtZXRlcnMpOworICAgIHZvaWQgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMo
bG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisgICAg
dm9pZCBleGVjdXRlU1FMU3luYyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4m
JiBwYXJhbWV0ZXJzKTsKKyAgICB2b2lkIGV4ZWN1dGVTUUxBc3luYyhsb25nIHJlcXVlc3RJZCwg
UmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyNpZiBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK3B1YmxpYzoKKyAgICB2b2lkIHNldEFsdGVybmF0ZURp
c3BhdGNoZXIoQWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlz
cGF0Y2hlcikgeyBtX2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9
Citwcml2YXRlOgorICAgIEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIqIG1fYWx0
ZXJuYXRlRGlzcGF0Y2hlciB7IG51bGxwdHIgfTsKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK3ByaXZhdGU6CisgICAgRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyKik7CisgICAgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQgeyBu
dWxscHRyIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTog
VGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERp
c3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRz
LXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RCYWNrZW5k
RGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250
ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYv
TmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpZiBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyNpbmNsdWRlICJUZXN0QWx0
ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6fkRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyKCkgeyB9CisKK1JlZjxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBEYXRhYmFzZUJhY2tl
bmREaXNwYXRjaGVyOjpjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVy
LCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCit7CisgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hl
ciwgYWdlbnQpKTsKK30KKworRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6RGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIERhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKKyAgICA6IFN1cHBsZW1lbnRhbEJh
Y2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQorICAgICwgbV9hZ2VudChhZ2VudCkK
K3sKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4o
IkRhdGFiYXNlIl9zLCB0aGlzKTsKK30KKwordm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
OjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09O
OjpPYmplY3Q+JiYgbWVzc2FnZSkKK3sKKyAgICBSZWY8RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
cj4gcHJvdGVjdCgqdGhpcyk7CisKKyAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJz
OworICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsKKworICAg
IGlmIChtZXRob2QgPT0gImV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMiKSB7Cisg
ICAgICAgIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMocmVxdWVzdElkLCBXVEZN
b3ZlKHBhcmFtZXRlcnMpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAobWV0aG9k
ID09ICJleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyIpIHsKKyAgICAgICAgZXhl
Y3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFt
ZXRlcnMpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAobWV0aG9kID09ICJleGVj
dXRlU1FMU3luYyIpIHsKKyAgICAgICAgZXhlY3V0ZVNRTFN5bmMocmVxdWVzdElkLCBXVEZNb3Zl
KHBhcmFtZXRlcnMpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAobWV0aG9kID09
ICJleGVjdXRlU1FMQXN5bmMiKSB7CisgICAgICAgIGV4ZWN1dGVTUUxBc3luYyhyZXF1ZXN0SWQs
IFdURk1vdmUocGFyYW1ldGVycykpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6
TWV0aG9kTm90Rm91bmQsICInRGF0YWJhc2UuIiArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQi
KTsKK30KKwordm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMU3luY09w
dGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYm
IHBhcmFtZXRlcnMpCit7CisgICAgaW50IGluX2RhdGFiYXNlSWQgPSBtX2JhY2tlbmREaXNwYXRj
aGVyLT5nZXRJbnRlZ2VyKHBhcmFtZXRlcnMuZ2V0KCksICJkYXRhYmFzZUlkIl9zLCBudWxscHRy
KTsKKyAgICBTdHJpbmcgaW5fcXVlcnkgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmco
cGFyYW1ldGVycy5nZXQoKSwgInF1ZXJ5Il9zLCBudWxscHRyKTsKKyAgICBpZiAobV9iYWNrZW5k
RGlzcGF0Y2hlci0+aGFzUHJvdG9jb2xFcnJvcnMoKSkgeworICAgICAgICBtX2JhY2tlbmREaXNw
YXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFy
YW1zLCAiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICdEYXRhYmFzZS5leGVjdXRlU1FMU3luY09w
dGlvbmFsUmV0dXJuVmFsdWVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiX3MpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
CisgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeworICAgICAgICBtX2FsdGVybmF0ZURp
c3BhdGNoZXItPmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMocmVxdWVzdElkLCBp
bl9kYXRhYmFzZUlkLCBpbl9xdWVyeSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYg
Ly8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyAgICBFcnJvclN0
cmluZyBlcnJvcjsKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOworICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IG91dF9jb2x1bW5O
YW1lczsKKyAgICBPcHRpb25hbDxTdHJpbmc+IG91dF9ub3RlczsKKyAgICBPcHRpb25hbDxkb3Vi
bGU+IG91dF90aW1lc3RhbXA7CisgICAgT3B0aW9uYWw8SlNPTjo6T2JqZWN0PiBvdXRfdmFsdWVz
OworICAgIE9wdGlvbmFsPEpTT046OlZhbHVlPiBvdXRfcGF5bG9hZDsKKyAgICBPcHRpb25hbDxp
bnQ+IG91dF9kYXRhYmFzZUlkOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6RXJyb3I+IG91dF9zcWxFcnJvcjsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6UHJpbWFyeUNvbG9ycyBvdXRfc2NyZWVuQ29sb3I7CisgICAgUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IG91dF9hbHRlcm5hdGVDb2xvcnM7Cisg
ICAgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3Igb3V0X3ByaW50
Q29sb3I7CisgICAgbV9hZ2VudC0+ZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhl
cnJvciwgaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnksIG91dF9jb2x1bW5OYW1lcywgb3V0X25vdGVz
LCBvdXRfdGltZXN0YW1wLCBvdXRfdmFsdWVzLCBvdXRfcGF5bG9hZCwgb3V0X2RhdGFiYXNlSWQs
IG91dF9zcWxFcnJvciwgb3V0X3NjcmVlbkNvbG9yLCBvdXRfYWx0ZXJuYXRlQ29sb3JzLCBvdXRf
cHJpbnRDb2xvcik7CisKKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7CisgICAgICAgIGlmIChv
dXRfY29sdW1uTmFtZXMpCisgICAgICAgICAgICByZXN1bHQtPnNldEFycmF5KCJjb2x1bW5OYW1l
cyJfcywgb3V0X2NvbHVtbk5hbWVzKTsKKyAgICAgICAgaWYgKG91dF9ub3Rlcy5oYXNWYWx1ZSgp
KQorICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCAqb3V0X25vdGVzKTsK
KyAgICAgICAgaWYgKG91dF90aW1lc3RhbXAuaGFzVmFsdWUoKSkKKyAgICAgICAgICAgIHJlc3Vs
dC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICpvdXRfdGltZXN0YW1wKTsKKyAgICAgICAgaWYg
KG91dF92YWx1ZXMuaGFzVmFsdWUoKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJ2
YWx1ZXMiX3MsICpvdXRfdmFsdWVzKTsKKyAgICAgICAgaWYgKG91dF9wYXlsb2FkLmhhc1ZhbHVl
KCkpCisgICAgICAgICAgICByZXN1bHQtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCAqb3V0X3BheWxv
YWQpOworICAgICAgICBpZiAob3V0X2RhdGFiYXNlSWQuaGFzVmFsdWUoKSkKKyAgICAgICAgICAg
IHJlc3VsdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgKm91dF9kYXRhYmFzZUlkKTsKKyAg
ICAgICAgaWYgKG91dF9zcWxFcnJvcikKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJz
cWxFcnJvciJfcywgb3V0X3NxbEVycm9yKTsKKyAgICAgICAgaWYgKG91dF9zY3JlZW5Db2xvci5o
YXNWYWx1ZSgpKQorICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9z
LCAqb3V0X3NjcmVlbkNvbG9yKTsKKyAgICAgICAgaWYgKG91dF9hbHRlcm5hdGVDb2xvcnMpCisg
ICAgICAgICAgICByZXN1bHQtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIG91dF9hbHRl
cm5hdGVDb2xvcnMpOworICAgICAgICBpZiAob3V0X3ByaW50Q29sb3IuaGFzVmFsdWUoKSkKKyAg
ICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCAqb3V0X3ByaW50Q29s
b3IpOworICAgIH0KKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQorICAgICAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNl
KTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29s
RXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Cit9
CisKK0RhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNPcHRp
b25hbFJldHVyblZhbHVlc0NhbGxiYWNrOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZh
bHVlc0NhbGxiYWNrKFJlZjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBiYWNrZW5kRGlzcGF0Y2hlciwg
aW50IGlkKSA6IEJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UoV1RGTW92ZShiYWNrZW5k
RGlzcGF0Y2hlciksIGlkKSB7IH0KKwordm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlcjo6RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjazo6c2VuZFN1
Y2Nlc3MoUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mJiBjb2x1bW5OYW1lcywgT3B0aW9u
YWw8U3RyaW5nPiYgbm90ZXMsIE9wdGlvbmFsPGRvdWJsZT4mIHRpbWVzdGFtcCwgT3B0aW9uYWw8
SlNPTjo6T2JqZWN0PiYgdmFsdWVzLCBPcHRpb25hbDxKU09OOjpWYWx1ZT4mIHBheWxvYWQsIE9w
dGlvbmFsPGludD4mIGRhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6RXJyb3I+JiYgc3FsRXJyb3IsIE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpQcmltYXJ5Q29sb3JzPiBzY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiYgYWx0ZXJuYXRlQ29sb3JzLCBPcHRpb25hbDxE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvcj4gcHJpbnRDb2xvcikK
K3sKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7CisgICAgaWYgKGNvbHVtbk5hbWVzKQorICAgICAgICBqc29uTWVzc2FnZS0+c2V0QXJy
YXkoImNvbHVtbk5hbWVzIl9zLCBjb2x1bW5OYW1lcyk7CisgICAgaWYgKG5vdGVzLmhhc1ZhbHVl
KCkpCisgICAgICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm5vdGVzIl9zLCAqbm90ZXMpOwor
ICAgIGlmICh0aW1lc3RhbXAuaGFzVmFsdWUoKSkKKyAgICAgICAganNvbk1lc3NhZ2UtPnNldERv
dWJsZSgidGltZXN0YW1wIl9zLCAqdGltZXN0YW1wKTsKKyAgICBpZiAodmFsdWVzLmhhc1ZhbHVl
KCkpCisgICAgICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoInZhbHVlcyJfcywgKnZhbHVlcyk7
CisgICAgaWYgKHBheWxvYWQuaGFzVmFsdWUoKSkKKyAgICAgICAganNvbk1lc3NhZ2UtPnNldFZh
bHVlKCJwYXlsb2FkIl9zLCAqcGF5bG9hZCk7CisgICAgaWYgKGRhdGFiYXNlSWQuaGFzVmFsdWUo
KSkKKyAgICAgICAganNvbk1lc3NhZ2UtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsICpkYXRh
YmFzZUlkKTsKKyAgICBpZiAoc3FsRXJyb3IpCisgICAgICAgIGpzb25NZXNzYWdlLT5zZXRPYmpl
Y3QoInNxbEVycm9yIl9zLCBzcWxFcnJvcik7CisgICAgaWYgKHNjcmVlbkNvbG9yLmhhc1ZhbHVl
KCkpCisgICAgICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCAqc2Ny
ZWVuQ29sb3IpOworICAgIGlmIChhbHRlcm5hdGVDb2xvcnMpCisgICAgICAgIGpzb25NZXNzYWdl
LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCBhbHRlcm5hdGVDb2xvcnMpOworICAgIGlm
IChwcmludENvbG9yLmhhc1ZhbHVlKCkpCisgICAgICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmco
InByaW50Q29sb3IiX3MsICpwcmludENvbG9yKTsKKyAgICBDYWxsYmFja0Jhc2U6OnNlbmRTdWNj
ZXNzKFdURk1vdmUoanNvbk1lc3NhZ2UpKTsKK30KKwordm9pZCBEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVyOjpleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHJlcXVlc3RJ
ZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKQoreworICAgIGludCBpbl9kYXRh
YmFzZUlkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0SW50ZWdlcihwYXJhbWV0ZXJzLmdldCgp
LCAiZGF0YWJhc2VJZCJfcywgbnVsbHB0cik7CisgICAgU3RyaW5nIGluX3F1ZXJ5ID0gbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksICJxdWVyeSJfcywgbnVs
bHB0cik7CisgICAgaWYgKG1fYmFja2VuZERpc3BhdGNoZXItPmhhc1Byb3RvY29sRXJyb3JzKCkp
IHsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNr
ZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAn
RGF0YWJhc2UuZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMnIGNhbid0IGJlIHBy
b2Nlc3NlZCJfcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNpZiBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVy
KSB7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZVNRTEFzeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXMocmVxdWVzdElkLCBpbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCisKKyAgICBSZWY8RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6
OkV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2s+IGNhbGxiYWNrID0g
YWRvcHRSZWYoKm5ldyBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNR
TEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjayhtX2JhY2tlbmREaXNwYXRjaGVyLmNv
cHlSZWYoKSwgcmVxdWVzdElkKSk7CisgICAgbV9hZ2VudC0+ZXhlY3V0ZVNRTEFzeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXMoaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnksIGNhbGxiYWNrLmNvcHlSZWYo
KSk7CisKK30KKwordm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMU3lu
Yyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKQorewor
ICAgIGludCBpbl9kYXRhYmFzZUlkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0SW50ZWdlcihw
YXJhbWV0ZXJzLmdldCgpLCAiZGF0YWJhc2VJZCJfcywgbnVsbHB0cik7CisgICAgU3RyaW5nIGlu
X3F1ZXJ5ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCks
ICJxdWVyeSJfcywgbnVsbHB0cik7CisgICAgaWYgKG1fYmFja2VuZERpc3BhdGNoZXItPmhhc1By
b3RvY29sRXJyb3JzKCkpIHsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJv
dG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgIlNvbWUgYXJndW1l
bnRzIG9mIG1ldGhvZCAnRGF0YWJhc2UuZXhlY3V0ZVNRTFN5bmMnIGNhbid0IGJlIHByb2Nlc3Nl
ZCJfcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKKyAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Cisg
ICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZVNRTFN5bmMocmVxdWVzdElkLCBp
bl9kYXRhYmFzZUlkLCBpbl9xdWVyeSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYg
Ly8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyAgICBFcnJvclN0
cmluZyBlcnJvcjsKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOworICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IG91dF9jb2x1bW5O
YW1lczsKKyAgICBTdHJpbmcgb3V0X25vdGVzOworICAgIGRvdWJsZSBvdXRfdGltZXN0YW1wOwor
ICAgIEpTT046Ok9iamVjdCBvdXRfdmFsdWVzOworICAgIEpTT046OlZhbHVlIG91dF9wYXlsb2Fk
OworICAgIGludCBvdXRfZGF0YWJhc2VJZDsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGF0YWJhc2U6OkVycm9yPiBvdXRfc3FsRXJyb3I7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IG91dF9hbHRlcm5hdGVDb2xvcnM7CisgICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgb3V0X3NjcmVlbkNv
bG9yOworICAgIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yIG91
dF9wcmludENvbG9yOworICAgIG1fYWdlbnQtPmV4ZWN1dGVTUUxTeW5jKGVycm9yLCBpbl9kYXRh
YmFzZUlkLCBpbl9xdWVyeSwgb3V0X2NvbHVtbk5hbWVzLCAmb3V0X25vdGVzLCAmb3V0X3RpbWVz
dGFtcCwgb3V0X3ZhbHVlcywgJm91dF9wYXlsb2FkLCAmb3V0X2RhdGFiYXNlSWQsIG91dF9zcWxF
cnJvciwgb3V0X2FsdGVybmF0ZUNvbG9ycywgJm91dF9zY3JlZW5Db2xvciwgJm91dF9wcmludENv
bG9yKTsKKworICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIHsKKyAgICAgICAgcmVzdWx0LT5zZXRB
cnJheSgiY29sdW1uTmFtZXMiX3MsIG91dF9jb2x1bW5OYW1lcyk7CisgICAgICAgIHJlc3VsdC0+
c2V0U3RyaW5nKCJub3RlcyJfcywgb3V0X25vdGVzKTsKKyAgICAgICAgcmVzdWx0LT5zZXREb3Vi
bGUoInRpbWVzdGFtcCJfcywgb3V0X3RpbWVzdGFtcCk7CisgICAgICAgIHJlc3VsdC0+c2V0T2Jq
ZWN0KCJ2YWx1ZXMiX3MsIG91dF92YWx1ZXMpOworICAgICAgICByZXN1bHQtPnNldFZhbHVlKCJw
YXlsb2FkIl9zLCBvdXRfcGF5bG9hZCk7CisgICAgICAgIHJlc3VsdC0+c2V0SW50ZWdlcigiZGF0
YWJhc2VJZCJfcywgb3V0X2RhdGFiYXNlSWQpOworICAgICAgICByZXN1bHQtPnNldE9iamVjdCgi
c3FsRXJyb3IiX3MsIG91dF9zcWxFcnJvcik7CisgICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoImFs
dGVybmF0ZUNvbG9ycyJfcywgb3V0X2FsdGVybmF0ZUNvbG9ycyk7CisgICAgICAgIHJlc3VsdC0+
c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBl
cnM6OmdldEVudW1Db25zdGFudFZhbHVlKG91dF9zY3JlZW5Db2xvcikpOworICAgICAgICByZXN1
bHQtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhl
bHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKG91dF9wcmludENvbG9yKSk7CisgICAgfQorICAg
IGlmICghZXJyb3IubGVuZ3RoKCkpCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRS
ZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOworICAgIGVsc2UKKyAg
ICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlz
cGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKK30KKworRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrOjpFeGVjdXRlU1FM
QXN5bmNDYWxsYmFjayhSZWY8QmFja2VuZERpc3BhdGNoZXI+JiYgYmFja2VuZERpc3BhdGNoZXIs
IGludCBpZCkgOiBCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlKFdURk1vdmUoYmFja2Vu
ZERpc3BhdGNoZXIpLCBpZCkgeyB9CisKK3ZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXI6OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrOjpzZW5kU3VjY2VzcyhSZWZQdHI8SlNPTjo6
QXJyYXlPZjxTdHJpbmc+PiYmIGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG5vdGVzLCBkb3Vi
bGUgdGltZXN0YW1wLCBKU09OOjpPYmplY3QgdmFsdWVzLCBKU09OOjpWYWx1ZSBwYXlsb2FkLCBp
bnQgZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJv
cj4mJiBzcWxFcnJvciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xv
cnMgc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29s
b3JMaXN0PiYmIGFsdGVybmF0ZUNvbG9ycywgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXI6OlByaW50Q29sb3IgcHJpbnRDb2xvcikKK3sKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29u
TWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAganNvbk1lc3NhZ2UtPnNldEFy
cmF5KCJjb2x1bW5OYW1lcyJfcywgY29sdW1uTmFtZXMpOworICAgIGpzb25NZXNzYWdlLT5zZXRT
dHJpbmcoIm5vdGVzIl9zLCBub3Rlcyk7CisgICAganNvbk1lc3NhZ2UtPnNldERvdWJsZSgidGlt
ZXN0YW1wIl9zLCB0aW1lc3RhbXApOworICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoInZhbHVl
cyJfcywgdmFsdWVzKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0VmFsdWUoInBheWxvYWQiX3MsIHBh
eWxvYWQpOworICAgIGpzb25NZXNzYWdlLT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCBkYXRh
YmFzZUlkKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgc3FsRXJy
b3IpOworICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCBJbnNwZWN0
b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoc2NyZWVuQ29s
b3IpKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgYWx0
ZXJuYXRlQ29sb3JzKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9z
LCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUo
cHJpbnRDb2xvcikpOworICAgIENhbGxiYWNrQmFzZTo6c2VuZFN1Y2Nlc3MoV1RGTW92ZShqc29u
TWVzc2FnZSkpOworfQorCit2b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVT
UUxBc3luYyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJz
KQoreworICAgIGludCBpbl9kYXRhYmFzZUlkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0SW50
ZWdlcihwYXJhbWV0ZXJzLmdldCgpLCAiZGF0YWJhc2VJZCJfcywgbnVsbHB0cik7CisgICAgU3Ry
aW5nIGluX3F1ZXJ5ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMu
Z2V0KCksICJxdWVyeSJfcywgbnVsbHB0cik7CisgICAgaWYgKG1fYmFja2VuZERpc3BhdGNoZXIt
Pmhhc1Byb3RvY29sRXJyb3JzKCkpIHsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVw
b3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgIlNvbWUg
YXJndW1lbnRzIG9mIG1ldGhvZCAnRGF0YWJhc2UuZXhlY3V0ZVNRTEFzeW5jJyBjYW4ndCBiZSBw
cm9jZXNzZWQiX3MpOworICAgICAgICByZXR1cm47CisgICAgfQorCisjaWYgRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hl
cikgeworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVTUUxBc3luYyhyZXF1
ZXN0SWQsIGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworICAg
IFJlZjxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jQ2Fs
bGJhY2s+IGNhbGxiYWNrID0gYWRvcHRSZWYoKm5ldyBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2sobV9iYWNrZW5kRGlzcGF0Y2hlci5jb3B5
UmVmKCksIHJlcXVlc3RJZCkpOworICAgIG1fYWdlbnQtPmV4ZWN1dGVTUUxBc3luYyhpbl9kYXRh
YmFzZUlkLCBpbl9xdWVyeSwgY2FsbGJhY2suY29weVJlZigpKTsKKworfQorCit9IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNw
cAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8d3RmL0pT
T05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNl
IEluc3BlY3RvciB7CisKK2NsYXNzIEZyb250ZW5kUm91dGVyOworCit9IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMg
QmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisK
KyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgorI2luY2x1
ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFt
ZXNwYWNlIFByb3RvY29sIHsKKworCisKKy8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgorbmFtZXNw
YWNlIERhdGFiYXNlIHsKK2NsYXNzIEVycm9yOworZW51bSBjbGFzcyBQcmltYXJ5Q29sb3JzOwor
fSAvLyBEYXRhYmFzZQorLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgorCisKKy8vIFR5
cGVkZWZzLgorbmFtZXNwYWNlIERhdGFiYXNlIHsKKy8qIFVuaXF1ZSBpZGVudGlmaWVyIG9mIERh
dGFiYXNlIG9iamVjdC4gKi8KK3R5cGVkZWYgaW50IERhdGFiYXNlSWQ7Cit0eXBlZGVmIEpTT046
OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IENv
bG9yTGlzdDsKK30gLy8gRGF0YWJhc2UKKy8vIEVuZCBvZiB0eXBlZGVmcy4KKworbmFtZXNwYWNl
IFRlc3RIZWxwZXJzIHsKKworU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKTsK
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKFQgZW51
bVZhbHVlKQoreworICAgIHJldHVybiBnZXRFbnVtQ29uc3RhbnRWYWx1ZShzdGF0aWNfY2FzdDxp
bnQ+KGVudW1WYWx1ZSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycworCituYW1l
c3BhY2UgRGF0YWJhc2UgeworLyogICovCitlbnVtIGNsYXNzIFByaW1hcnlDb2xvcnMgeworICAg
IFJlZCA9IDAsCisgICAgR3JlZW4gPSAxLAorICAgIEJsdWUgPSAyLAorfTsgLy8gZW51bSBjbGFz
cyBQcmltYXJ5Q29sb3JzCisvKiBEYXRhYmFzZSBlcnJvci4gKi8KK2NsYXNzIEVycm9yIDogcHVi
bGljIEpTT046Ok9iamVjdEJhc2UgeworcHVibGljOgorICAgIGVudW0geworICAgICAgICBOb0Zp
ZWxkc1NldCA9IDAsCisgICAgICAgIE1lc3NhZ2VTZXQgPSAxIDw8IDAsCisgICAgICAgIENvZGVT
ZXQgPSAxIDw8IDEsCisgICAgICAgIEFsbEZpZWxkc1NldCA9IChNZXNzYWdlU2V0IHwgQ29kZVNl
dCkKKyAgICB9OworCisgICAgdGVtcGxhdGU8aW50IFNUQVRFPgorICAgIGNsYXNzIEJ1aWxkZXIg
eworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVzdWx0Owor
CisgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RT
dGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxC
dWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxk
ZXIoUmVmPC8qRXJyb3IqL0pTT046Ok9iamVjdD4mJiBvYmplY3QpCisgICAgICAgICAgICA6IG1f
cmVzdWx0KFdURk1vdmUob2JqZWN0KSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9z
dGF0ZSk7CisgICAgICAgIH0KKyAgICAgICAgZnJpZW5kIGNsYXNzIEVycm9yOworICAgIHB1Ymxp
YzoKKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTWVzc2FnZVNldD4mIHNldE1lc3NhZ2UoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
IShTVEFURSAmIE1lc3NhZ2VTZXQpLCBwcm9wZXJ0eV9tZXNzYWdlX2FscmVhZHlfc2V0KTsKKyAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1lc3NhZ2UiX3MsIHZhbHVlKTsKKyAgICAg
ICAgICAgIHJldHVybiBjYXN0U3RhdGU8TWVzc2FnZVNldD4oKTsKKyAgICAgICAgfQorCisgICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2RlU2V0PiYgc2V0Q29kZShpbnQgdmFsdWUpCisgICAgICAg
IHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2RlU2V0KSwgcHJvcGVy
dHlfY29kZV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcigi
Y29kZSJfcywgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb2RlU2V0Pigp
OworICAgICAgICB9CisKKyAgICAgICAgUmVmPEVycm9yPiByZWxlYXNlKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRf
aXNfbm90X3JlYWR5KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihFcnJvcikg
PT0gc2l6ZW9mKEpTT046Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsKKworICAgICAgICAgICAgUmVm
PEpTT046Ok9iamVjdD4ganNvblJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7Cisg
ICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPEVy
cm9yPio+KCZqc29uUmVzdWx0KSk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAg
ICB9CisgICAgfTsKKworICAgIC8qCisgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgorICAg
ICAqIFJlZjxFcnJvcj4gcmVzdWx0ID0gRXJyb3I6OmNyZWF0ZSgpCisgICAgICogICAgIC5zZXRN
ZXNzYWdlKC4uLikKKyAgICAgKiAgICAgLnNldENvZGUoLi4uKQorICAgICAqICAgICAucmVsZWFz
ZSgpOworICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6
Y3JlYXRlKCkpOworICAgIH0KK307CisKK30gLy8gRGF0YWJhc2UKKworCisKK25hbWVzcGFjZSBU
ZXN0SGVscGVycyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFByb3RvY29sRW51bVR5cGU+CitPcHRp
b25hbDxQcm90b2NvbEVudW1UeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmcoY29uc3QgU3Ry
aW5nJik7CisKKy8vIEVudW1zIGluIHRoZSAnRGF0YWJhc2UnIERvbWFpbgordGVtcGxhdGU8Pgor
T3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IHBh
cnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJp
bWFyeUNvbG9ycz4oY29uc3QgU3RyaW5nJik7CisKK30gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJz
CisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgor
CituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRI
YXNoOworCisvLyBIYXNoIGRlY2xhcmF0aW9ucyBpbiB0aGUgJ0RhdGFiYXNlJyBEb21haW4KK3Rl
bXBsYXRlPD4KK3N0cnVjdCBEZWZhdWx0SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFz
ZTo6UHJpbWFyeUNvbG9ycz4geworICAgIHR5cGVkZWYgSW50SGFzaDxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gSGFzaDsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdURgorIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKworIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgorLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwor
bmFtZXNwYWNlIFByb3RvY29sIHsKKworbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKKworc3RhdGlj
IGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFsdWVzW10gPSB7CisgICAgInJlZCIs
CisgICAgImdyZWVuIiwKKyAgICAiYmx1ZSIsCisgICAgImN5YW4iLAorICAgICJtYWdlbnRhIiwK
KyAgICAieWVsbG93IiwKKyAgICAiYmxhY2siLAorfTsKKworU3RyaW5nIGdldEVudW1Db25zdGFu
dFZhbHVlKGludCBjb2RlKSB7CisgICAgcmV0dXJuIGVudW1fY29uc3RhbnRfdmFsdWVzW2NvZGVd
OworfQorCisvLyBFbnVtcyBpbiB0aGUgJ0RhdGFiYXNlJyBEb21haW4KK3RlbXBsYXRlPD4KK09w
dGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiBwYXJz
ZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1h
cnlDb2xvcnM+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCit7CisgICAgc3RhdGljIGNv
bnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0geworICAgICAgICAoc2l6ZV90KUluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzOjpSZWQsCisgICAgICAgIChzaXpl
X3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM6OkdyZWVuLAor
ICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29s
b3JzOjpCbHVlLAorICAgIH07CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAzOyArK2kpCisg
ICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFu
dFZhbHVlc1tpXV0pCisgICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpQcmltYXJ5Q29sb3JzKWNvbnN0YW50VmFsdWVzW2ldOworCisgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKK30KKworCit9IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycworCisKKworfSAv
LyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgorLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8d3RmL1JldGFp
blB0ci5oPgorCitAcHJvdG9jb2wgVGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyOwor
CituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCitjbGFzcyBPYmpDSW5zcGVjdG9yRGF0YWJhc2VC
YWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVyIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBP
YmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xEYXRh
YmFzZURvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KKyAg
ICB2b2lkIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0SWQs
IGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KSBmaW5hbDsKKyAgICB2
b2lkIGV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVzdElkLCBp
bnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkgZmluYWw7CisgICAgdm9p
ZCBleGVjdXRlU1FMU3luYyhsb25nIHJlcXVlc3RJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0
IFN0cmluZyYgaW5fcXVlcnkpIGZpbmFsOworICAgIHZvaWQgZXhlY3V0ZVNRTEFzeW5jKGxvbmcg
cmVxdWVzdElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkgZmlu
YWw7Citwcml2YXRlOgorICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFp
bkhhbmRsZXI+PiBtX2RlbGVnYXRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisK
KyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29u
ZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zLmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKworbmFtZXNwYWNl
IEluc3BlY3RvciB7CisKK3ZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXI6OmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0SWQsIGlu
dCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KQoreworICAgIGlmICghW21f
ZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihleGVjdXRlU1FMU3luY09wdGlv
bmFsUmV0dXJuVmFsdWVzV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOmRhdGFiYXNl
SWQ6cXVlcnk6KV0pIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9j
b2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidE
YXRhYmFzZS5leGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzJyB3YXMgbm90IGZvdW5k
Il9zKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3Ry
aW5nICplcnJvcikgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2Nv
bEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7
CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAg
fTsKKworICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiovICoq
Y29sdW1uTmFtZXMsIE5TU3RyaW5nICoqbm90ZXMsIGRvdWJsZSAqdGltZXN0YW1wLCBSV0lQcm90
b2NvbEpTT05PYmplY3QgKip2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnBheWxvYWQs
IGludCAqZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKnNxbEVycm9yLCBU
ZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgKnNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8
TlNTdHJpbmc+Ki8gKiphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0
ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3IgKnByaW50Q29sb3IpIHsKKyAg
ICAgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVS
KGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihub3RlcywgQCJub3RlcyIpOworICAgICAgICBUSFJP
V19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIodmFsdWVzLCBAInZhbHVlcyIp
OworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIocGF5
bG9hZCwgQCJwYXlsb2FkIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElP
TkFMX1BBUkFNRVRFUihzcWxFcnJvciwgQCJzcWxFcnJvciIpOworICAgICAgICBUSFJPV19FWENF
UFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoYWx0ZXJuYXRlQ29sb3JzLCBAImFsdGVy
bmF0ZUNvbG9ycyIpOworICAgICAgICBpZiAoY29sdW1uTmFtZXMpCisgICAgICAgICAgICByZXN1
bHRPYmplY3QtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgdG9KU09OU3RyaW5nQXJyYXkoKmNv
bHVtbk5hbWVzKSk7CisgICAgICAgIGlmIChub3RlcykKKyAgICAgICAgICAgIHJlc3VsdE9iamVj
dC0+c2V0U3RyaW5nKCJub3RlcyJfcywgKm5vdGVzKTsKKyAgICAgICAgaWYgKHRpbWVzdGFtcCkK
KyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICp0aW1l
c3RhbXApOworICAgICAgICBpZiAodmFsdWVzKQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5z
ZXRPYmplY3QoInZhbHVlcyJfcywgWyp2YWx1ZXMgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIGlm
IChwYXlsb2FkKQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRWYWx1ZSgicGF5bG9hZCJf
cywgWypwYXlsb2FkIHRvSlNPTk9iamVjdF0pOworICAgICAgICBpZiAoZGF0YWJhc2VJZCkKKyAg
ICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgKmRhdGFi
YXNlSWQpOworICAgICAgICBpZiAoc3FsRXJyb3IpCisgICAgICAgICAgICByZXN1bHRPYmplY3Qt
PnNldE9iamVjdCgic3FsRXJyb3IiX3MsIFsqc3FsRXJyb3IgdG9KU09OT2JqZWN0XSk7CisgICAg
ICAgIGlmIChzY3JlZW5Db2xvcikKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5n
KCJzY3JlZW5Db2xvciJfcywgdG9Qcm90b2NvbFN0cmluZygqc2NyZWVuQ29sb3IpKTsKKyAgICAg
ICAgaWYgKGFsdGVybmF0ZUNvbG9ycykKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJy
YXkoImFsdGVybmF0ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5nQXJyYXkoKmFsdGVybmF0ZUNvbG9y
cykpOworICAgICAgICBpZiAocHJpbnRDb2xvcikKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+
c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKCpwcmludENvbG9yKSk7
CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdU
Rk1vdmUocmVzdWx0T2JqZWN0KSwgZmFsc2UpOworICAgIH07CisKKyAgICBpbnQgb19pbl9kYXRh
YmFzZUlkID0gaW5fZGF0YWJhc2VJZDsKKyAgICBOU1N0cmluZyAqb19pbl9xdWVyeSA9IGluX3F1
ZXJ5OworCisgICAgW21fZGVsZWdhdGUgZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVl
c1dpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3ND
YWxsYmFjayBkYXRhYmFzZUlkOm9faW5fZGF0YWJhc2VJZCBxdWVyeTpvX2luX3F1ZXJ5XTsKK30K
Kwordm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNR
TEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0SWQsIGludCBpbl9kYXRhYmFz
ZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KQoreworICAgIGlmICghW21fZGVsZWdhdGUgcmVz
cG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZh
bHVlc1dpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazpkYXRhYmFzZUlkOnF1ZXJ5Oild
KSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVx
dWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRGF0YWJhc2UuZXhl
Y3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMnIHdhcyBub3QgZm91bmQiX3MpOworICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9y
KSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVx
dWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAg
YmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICB9OworCisgICAg
aWQgc3VjY2Vzc0NhbGxiYWNrID0gXihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKipjb2x1bW5OYW1l
cywgTlNTdHJpbmcgKipub3RlcywgZG91YmxlICp0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9i
amVjdCAqKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqcGF5bG9hZCwgaW50ICpkYXRh
YmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqc3FsRXJyb3IsIFRlc3RQcm90b2Nv
bERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4q
LyAqKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNP
cHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3IgKnByaW50Q29sb3IpIHsKKyAgICAgICAgUmVm
PEpTT046Ok9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAg
ICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKGNvbHVtbk5h
bWVzLCBAImNvbHVtbk5hbWVzIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09Q
VElPTkFMX1BBUkFNRVRFUihub3RlcywgQCJub3RlcyIpOworICAgICAgICBUSFJPV19FWENFUFRJ
T05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIodmFsdWVzLCBAInZhbHVlcyIpOworICAgICAg
ICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIocGF5bG9hZCwgQCJw
YXlsb2FkIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFN
RVRFUihzcWxFcnJvciwgQCJzcWxFcnJvciIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9S
X0JBRF9PUFRJT05BTF9QQVJBTUVURVIoYWx0ZXJuYXRlQ29sb3JzLCBAImFsdGVybmF0ZUNvbG9y
cyIpOworICAgICAgICBpZiAoY29sdW1uTmFtZXMpCisgICAgICAgICAgICByZXN1bHRPYmplY3Qt
PnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgdG9KU09OU3RyaW5nQXJyYXkoKmNvbHVtbk5hbWVz
KSk7CisgICAgICAgIGlmIChub3RlcykKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3Ry
aW5nKCJub3RlcyJfcywgKm5vdGVzKTsKKyAgICAgICAgaWYgKHRpbWVzdGFtcCkKKyAgICAgICAg
ICAgIHJlc3VsdE9iamVjdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICp0aW1lc3RhbXApOwor
ICAgICAgICBpZiAodmFsdWVzKQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3Qo
InZhbHVlcyJfcywgWyp2YWx1ZXMgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIGlmIChwYXlsb2Fk
KQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgWypwYXls
b2FkIHRvSlNPTk9iamVjdF0pOworICAgICAgICBpZiAoZGF0YWJhc2VJZCkKKyAgICAgICAgICAg
IHJlc3VsdE9iamVjdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgKmRhdGFiYXNlSWQpOwor
ICAgICAgICBpZiAoc3FsRXJyb3IpCisgICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVj
dCgic3FsRXJyb3IiX3MsIFsqc3FsRXJyb3IgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIGlmIChz
Y3JlZW5Db2xvcikKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJzY3JlZW5D
b2xvciJfcywgdG9Qcm90b2NvbFN0cmluZygqc2NyZWVuQ29sb3IpKTsKKyAgICAgICAgaWYgKGFs
dGVybmF0ZUNvbG9ycykKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoImFsdGVy
bmF0ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5nQXJyYXkoKmFsdGVybmF0ZUNvbG9ycykpOworICAg
ICAgICBpZiAocHJpbnRDb2xvcikKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5n
KCJwcmludENvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKCpwcmludENvbG9yKSk7CisgICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVz
dWx0T2JqZWN0KSwgZmFsc2UpOworICAgIH07CisKKyAgICBpbnQgb19pbl9kYXRhYmFzZUlkID0g
aW5fZGF0YWJhc2VJZDsKKyAgICBOU1N0cmluZyAqb19pbl9xdWVyeSA9IGluX3F1ZXJ5OworCisg
ICAgW21fZGVsZWdhdGUgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNXaXRoRXJy
b3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2sg
ZGF0YWJhc2VJZDpvX2luX2RhdGFiYXNlSWQgcXVlcnk6b19pbl9xdWVyeV07Cit9CisKK3ZvaWQg
T2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5jKGxv
bmcgcmVxdWVzdElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkK
K3sKKyAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoZXhl
Y3V0ZVNRTFN5bmNXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6ZGF0YWJhc2VJZDpx
dWVyeTopXSkgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVy
cm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RhdGFi
YXNlLmV4ZWN1dGVTUUxTeW5jJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgeworICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2Vu
ZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgfTsKKworICAgIGlkIHN1Y2Nlc3NDYWxs
YmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiovICpjb2x1bW5OYW1lcywgTlNTdHJpbmcgKm5v
dGVzLCBkb3VibGUgdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnZhbHVlcywgUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgVGVzdFByb3RvY29s
RGF0YWJhc2VFcnJvciAqc3FsRXJyb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqYWx0ZXJuYXRl
Q29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIFRl
c3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yIHByaW50Q29sb3IpIHsK
KyAgICAgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIo
Y29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9SRVFVSVJFRF9QQVJBTUVURVIobm90ZXMsIEAibm90ZXMiKTsKKyAgICAgICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIodmFsdWVzLCBAInZhbHVlcyIpOworICAgICAg
ICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihwYXlsb2FkLCBAInBheWxv
YWQiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoc3Fs
RXJyb3IsIEAic3FsRXJyb3IiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJF
RF9QQVJBTUVURVIoYWx0ZXJuYXRlQ29sb3JzLCBAImFsdGVybmF0ZUNvbG9ycyIpOworICAgICAg
ICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgdG9KU09OU3RyaW5nQXJy
YXkoY29sdW1uTmFtZXMpKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoIm5vdGVz
Il9zLCBub3Rlcyk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAi
X3MsIHRpbWVzdGFtcCk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMi
X3MsIFt2YWx1ZXMgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0VmFs
dWUoInBheWxvYWQiX3MsIFtwYXlsb2FkIHRvSlNPTk9iamVjdF0pOworICAgICAgICByZXN1bHRP
YmplY3QtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsIGRhdGFiYXNlSWQpOworICAgICAgICBy
ZXN1bHRPYmplY3QtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIFtzcWxFcnJvciB0b0pTT05PYmpl
Y3RdKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9z
LCB0b0pTT05TdHJpbmdBcnJheShhbHRlcm5hdGVDb2xvcnMpKTsKKyAgICAgICAgcmVzdWx0T2Jq
ZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKHNjcmVlbkNv
bG9yKSk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCB0
b1Byb3RvY29sU3RyaW5nKHByaW50Q29sb3IpKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHRPYmplY3QpLCBmYWxzZSk7
CisgICAgfTsKKworICAgIGludCBvX2luX2RhdGFiYXNlSWQgPSBpbl9kYXRhYmFzZUlkOworICAg
IE5TU3RyaW5nICpvX2luX3F1ZXJ5ID0gaW5fcXVlcnk7CisKKyAgICBbbV9kZWxlZ2F0ZSBleGVj
dXRlU1FMU3luY1dpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNr
OnN1Y2Nlc3NDYWxsYmFjayBkYXRhYmFzZUlkOm9faW5fZGF0YWJhc2VJZCBxdWVyeTpvX2luX3F1
ZXJ5XTsKK30KKwordm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6
ZXhlY3V0ZVNRTEFzeW5jKGxvbmcgcmVxdWVzdElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3Qg
U3RyaW5nJiBpbl9xdWVyeSkKK3sKKyAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxl
Y3RvcjpAc2VsZWN0b3IoZXhlY3V0ZVNRTEFzeW5jV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0Nh
bGxiYWNrOmRhdGFiYXNlSWQ6cXVlcnk6KV0pIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRo
b2ROb3RGb3VuZCwgIidEYXRhYmFzZS5leGVjdXRlU1FMQXN5bmMnIHdhcyBub3QgZm91bmQiX3Mp
OworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcg
KmVycm9yKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJy
b3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICB9Owor
CisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmNvbHVt
bk5hbWVzLCBOU1N0cmluZyAqbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNP
Tk9iamVjdCAqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnBheWxvYWQsIGludCBkYXRh
YmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpzcWxFcnJvciwgVGVzdFByb3RvY29s
RGF0YWJhc2VQcmltYXJ5Q29sb3JzIHNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8g
KmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmlu
dENvbG9yIHByaW50Q29sb3IpIHsKKyAgICAgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0T2Jq
ZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9SRVFVSVJFRF9QQVJBTUVURVIoY29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsKKyAgICAg
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIobm90ZXMsIEAibm90ZXMi
KTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIodmFsdWVz
LCBAInZhbHVlcyIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFN
RVRFUihwYXlsb2FkLCBAInBheWxvYWQiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9S
RVFVSVJFRF9QQVJBTUVURVIoc3FsRXJyb3IsIEAic3FsRXJyb3IiKTsKKyAgICAgICAgVEhST1df
RVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoYWx0ZXJuYXRlQ29sb3JzLCBAImFsdGVy
bmF0ZUNvbG9ycyIpOworICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJjb2x1bW5OYW1l
cyJfcywgdG9KU09OU3RyaW5nQXJyYXkoY29sdW1uTmFtZXMpKTsKKyAgICAgICAgcmVzdWx0T2Jq
ZWN0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBub3Rlcyk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+
c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIHRpbWVzdGFtcCk7CisgICAgICAgIHJlc3VsdE9iamVj
dC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFt2YWx1ZXMgdG9KU09OT2JqZWN0XSk7CisgICAgICAg
IHJlc3VsdE9iamVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFtwYXlsb2FkIHRvSlNPTk9iamVj
dF0pOworICAgICAgICByZXN1bHRPYmplY3QtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsIGRh
dGFiYXNlSWQpOworICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdCgic3FsRXJyb3IiX3Ms
IFtzcWxFcnJvciB0b0pTT05PYmplY3RdKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJp
bmcoInNjcmVlbkNvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKHNjcmVlbkNvbG9yKSk7CisgICAg
ICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgdG9KU09OU3Ry
aW5nQXJyYXkoYWx0ZXJuYXRlQ29sb3JzKSk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3Ry
aW5nKCJwcmludENvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKHByaW50Q29sb3IpKTsKKyAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShy
ZXN1bHRPYmplY3QpLCBmYWxzZSk7CisgICAgfTsKKworICAgIGludCBvX2luX2RhdGFiYXNlSWQg
PSBpbl9kYXRhYmFzZUlkOworICAgIE5TU3RyaW5nICpvX2luX3F1ZXJ5ID0gaW5fcXVlcnk7CisK
KyAgICBbbV9kZWxlZ2F0ZSBleGVjdXRlU1FMQXN5bmNXaXRoRXJyb3JDYWxsYmFjazplcnJvckNh
bGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDpvX2luX2Rh
dGFiYXNlSWQgcXVlcnk6b19pbl9xdWVyeV07Cit9CisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisK
KyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPFdl
Ykluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAo
ImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09i
amVjdAorQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNldERhdGFiYXNlSGFu
ZGxlcjopIGlkPFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4gZGF0YWJhc2VIYW5k
bGVyOworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5o
CisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUu
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0
ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbElu
dGVybmFsLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+CisjaW1w
b3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVy
cy5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJz
Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0
UHJvdG9jb2xDb25maWd1cmF0aW9uCit7CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9s
bGVyKiBfY29udHJvbGxlcjsKKyAgICBpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRs
ZXI+IF9kYXRhYmFzZUhhbmRsZXI7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRy
b2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgoreworICAg
IHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmls
OworICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7
CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIFtfZGF0YWJh
c2VIYW5kbGVyIHJlbGVhc2VdOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAodm9pZClz
ZXREYXRhYmFzZUhhbmRsZXI6KGlkPFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4p
aGFuZGxlcgoreworICAgIGlmIChoYW5kbGVyID09IF9kYXRhYmFzZUhhbmRsZXIpCisgICAgICAg
IHJldHVybjsKKworICAgIFtfZGF0YWJhc2VIYW5kbGVyIHJlbGVhc2VdOworICAgIF9kYXRhYmFz
ZUhhbmRsZXIgPSBbaGFuZGxlciByZXRhaW5dOworCisgICAgYXV0byBhbHRlcm5hdGVEaXNwYXRj
aGVyID0gbWFrZVVuaXF1ZTxPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4o
aGFuZGxlcik7CisgICAgYXV0byBhbHRlcm5hdGVBZ2VudCA9IG1ha2VVbmlxdWU8QWx0ZXJuYXRl
RGlzcGF0Y2hhYmxlQWdlbnQ8RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciwgQWx0ZXJuYXRlRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4+KCJEYXRhYmFzZSJfcywgKl9jb250cm9sbGVyLCBXVEZN
b3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIpKTsKKyAgICBfY29udHJvbGxlci0+YXBwZW5kRXh0cmFB
Z2VudChXVEZNb3ZlKGFsdGVybmF0ZUFnZW50KSk7Cit9CisKKy0gKGlkPFRlc3RQcm90b2NvbERh
dGFiYXNlRG9tYWluSGFuZGxlcj4pZGF0YWJhc2VIYW5kbGVyCit7CisgICAgcmV0dXJuIF9kYXRh
YmFzZUhhbmRsZXI7Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENv
bmZpZ3VyYXRpb24ubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0
Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRo
LWFzeW5jLWF0dHJpYnV0ZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4K
KwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5o
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1h
dHRyaWJ1dGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKworI2ltcG9ydCA8V2ViSW5zcGVj
dG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgorCisKK0BjbGFzcyBUZXN0UHJvdG9jb2xEYXRh
YmFzZUVycm9yOworCisKK3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbERh
dGFiYXNlUHJpbWFyeUNvbG9ycykgeworICAgIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNv
bG9yc1JlZCwKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNHcmVlbiwKKyAg
ICBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNCbHVlLAorfTsKKwordHlwZWRlZiBO
U19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlv
bmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvcikgeworICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhl
Y3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JDeWFuLAorICAgIFRlc3RQ
cm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29s
b3JNYWdlbnRhLAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25h
bFJldHVyblZhbHVlc1ByaW50Q29sb3JZZWxsb3csCisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VF
eGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvckJsYWNrLAorfTsKKwor
dHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FM
QXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3IpIHsKKyAgICBUZXN0UHJvdG9jb2xE
YXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvckN5YW4s
CisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZh
bHVlc1ByaW50Q29sb3JNYWdlbnRhLAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNR
TEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yWWVsbG93LAorICAgIFRlc3RQcm90
b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9y
QmxhY2ssCit9OworCit0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xEYXRh
YmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvcikgeworICAgIFRlc3RQcm90b2NvbERhdGFiYXNl
RXhlY3V0ZVNRTFN5bmNQcmludENvbG9yQ3lhbiwKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVTUUxTeW5jUHJpbnRDb2xvck1hZ2VudGEsCisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VF
eGVjdXRlU1FMU3luY1ByaW50Q29sb3JZZWxsb3csCisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VF
eGVjdXRlU1FMU3luY1ByaW50Q29sb3JCbGFjaywKK307CisKK3R5cGVkZWYgTlNfRU5VTShOU0lu
dGVnZXIsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvcikgewor
ICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvckN5YW4sCisg
ICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yTWFnZW50YSwK
KyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JZZWxsb3cs
CisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yQmxhY2ss
Cit9OworCisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVy
ZmFjZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIDogUldJUHJvdG9jb2xKU09OT2JqZWN0Cist
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwg
aWQ+ICopcGF5bG9hZDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihS
V0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OworLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlIGNvZGU6KGludCljb2RlOworLyogcmVxdWly
ZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICptZXNzYWdlOworLyog
cmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgaW50IGNvZGU7CitAZW5k
CisKK0Bwcm90b2NvbCBUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXIgPE5TT2JqZWN0
PgorQG9wdGlvbmFsCistICh2b2lkKWV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNX
aXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sg
c3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmNvbHVtbk5h
bWVzLCBOU1N0cmluZyAqKm5vdGVzLCBkb3VibGUgKnRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09O
T2JqZWN0ICoqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipwYXlsb2FkLCBpbnQgKmRh
dGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipzcWxFcnJvciwgVGVzdFByb3Rv
Y29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzICpzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5n
PiovICoqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5j
T3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yICpwcmludENvbG9yKSlzdWNjZXNzQ2FsbGJh
Y2sgZGF0YWJhc2VJZDooaW50KWRhdGFiYXNlSWQgcXVlcnk6KE5TU3RyaW5nICopcXVlcnk7Cist
ICh2b2lkKWV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzV2l0aEVycm9yQ2FsbGJh
Y2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFj
azoodm9pZCheKShOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKipjb2x1bW5OYW1lcywgTlNTdHJpbmcg
Kipub3RlcywgZG91YmxlICp0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnZhbHVl
cywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqcGF5bG9hZCwgaW50ICpkYXRhYmFzZUlkLCBUZXN0
UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqc3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJp
bWFyeUNvbG9ycyAqc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmFsdGVybmF0
ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVy
blZhbHVlc1ByaW50Q29sb3IgKnByaW50Q29sb3IpKXN1Y2Nlc3NDYWxsYmFjayBkYXRhYmFzZUlk
OihpbnQpZGF0YWJhc2VJZCBxdWVyeTooTlNTdHJpbmcgKilxdWVyeTsKKy0gKHZvaWQpZXhlY3V0
ZVNRTFN5bmNXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9y
Q2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAq
Y29sdW1uTmFtZXMsIE5TU3RyaW5nICpub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUldJUHJvdG9j
b2xKU09OT2JqZWN0ICp2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5bG9hZCwgaW50
IGRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKnNxbEVycm9yLCBOU0FycmF5
Lyo8TlNTdHJpbmc+Ki8gKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VQcmlt
YXJ5Q29sb3JzIHNjcmVlbkNvbG9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5j
UHJpbnRDb2xvciBwcmludENvbG9yKSlzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDooaW50KWRh
dGFiYXNlSWQgcXVlcnk6KE5TU3RyaW5nICopcXVlcnk7CistICh2b2lkKWV4ZWN1dGVTUUxBc3lu
Y1dpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFj
ayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoTlNBcnJheS8qPE5TU3RyaW5nPiovICpjb2x1bW5O
YW1lcywgTlNTdHJpbmcgKm5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05P
YmplY3QgKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkLCBpbnQgZGF0YWJh
c2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqc3FsRXJyb3IsIFRlc3RQcm90b2NvbERh
dGFiYXNlUHJpbWFyeUNvbG9ycyBzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICph
bHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRD
b2xvciBwcmludENvbG9yKSlzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDooaW50KWRhdGFiYXNl
SWQgcXVlcnk6KE5TU3RyaW5nICopcXVlcnk7CitAZW5kCisKKworCisKKyNpbXBvcnQgPFdlYklu
c3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4KKworIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50
ZXJuYWwuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgt
YXN5bmMtYXR0cmlidXRlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xK
U09OT2JqZWN0UHJpdmF0ZS5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJ
bnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCisKKwor
CisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKworIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgorLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIK
KyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KKwor
bmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4K
K09wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYg
dmFsdWUpOworCisKK2lubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xE
YXRhYmFzZVByaW1hcnlDb2xvcnMgdmFsdWUpCit7CisgICAgc3dpdGNoKHZhbHVlKSB7CisgICAg
Y2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNSZWQ6CisgICAgICAgIHJldHVy
biAicmVkIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzR3Jl
ZW46CisgICAgICAgIHJldHVybiAiZ3JlZW4iX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRh
YmFzZVByaW1hcnlDb2xvcnNCbHVlOgorICAgICAgICByZXR1cm4gImJsdWUiX3M7CisgICAgfQor
fQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VQcmlt
YXJ5Q29sb3JzPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAg
ICBpZiAodmFsdWUgPT0gInJlZCIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFz
ZVByaW1hcnlDb2xvcnNSZWQ7CisgICAgaWYgKHZhbHVlID09ICJncmVlbiIpCisgICAgICAgIHJl
dHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNHcmVlbjsKKyAgICBpZiAodmFs
dWUgPT0gImJsdWUiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5
Q29sb3JzQmx1ZTsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCitpbmxpbmUgU3RyaW5n
IHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlv
bmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvciB2YWx1ZSkKK3sKKyAgICBzd2l0Y2godmFsdWUpIHsK
KyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVy
blZhbHVlc1ByaW50Q29sb3JDeWFuOgorICAgICAgICByZXR1cm4gImN5YW4iX3M7CisgICAgY2Fz
ZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQ
cmludENvbG9yTWFnZW50YToKKyAgICAgICAgcmV0dXJuICJtYWdlbnRhIl9zOworICAgIGNhc2Ug
VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJp
bnRDb2xvclllbGxvdzoKKyAgICAgICAgcmV0dXJuICJ5ZWxsb3ciX3M7CisgICAgY2FzZSBUZXN0
UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENv
bG9yQmxhY2s6CisgICAgICAgIHJldHVybiAiYmxhY2siX3M7CisgICAgfQorfQorCit0ZW1wbGF0
ZTw+CitpbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09w
dGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvcj4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0
cmluZyYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09ICJjeWFuIikKKyAgICAgICAgcmV0dXJu
IFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1By
aW50Q29sb3JDeWFuOworICAgIGlmICh2YWx1ZSA9PSAibWFnZW50YSIpCisgICAgICAgIHJldHVy
biBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQ
cmludENvbG9yTWFnZW50YTsKKyAgICBpZiAodmFsdWUgPT0gInllbGxvdyIpCisgICAgICAgIHJl
dHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1
ZXNQcmludENvbG9yWWVsbG93OworICAgIGlmICh2YWx1ZSA9PSAiYmxhY2siKQorICAgICAgICBy
ZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFs
dWVzUHJpbnRDb2xvckJsYWNrOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK2lubGlu
ZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxB
c3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvciB2YWx1ZSkKK3sKKyAgICBzd2l0Y2go
dmFsdWUpIHsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0
aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yQ3lhbjoKKyAgICAgICAgcmV0dXJuICJjeWFuIl9z
OworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJl
dHVyblZhbHVlc1ByaW50Q29sb3JNYWdlbnRhOgorICAgICAgICByZXR1cm4gIm1hZ2VudGEiX3M7
CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0
dXJuVmFsdWVzUHJpbnRDb2xvclllbGxvdzoKKyAgICAgICAgcmV0dXJuICJ5ZWxsb3ciX3M7Cisg
ICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJu
VmFsdWVzUHJpbnRDb2xvckJsYWNrOgorICAgICAgICByZXR1cm4gImJsYWNrIl9zOworICAgIH0K
K30KKwordGVtcGxhdGU8PgoraW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlRXhl
Y3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yPiBmcm9tUHJvdG9jb2xT
dHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gImN5YW4iKQor
ICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25h
bFJldHVyblZhbHVlc1ByaW50Q29sb3JDeWFuOworICAgIGlmICh2YWx1ZSA9PSAibWFnZW50YSIp
CisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlv
bmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvck1hZ2VudGE7CisgICAgaWYgKHZhbHVlID09ICJ5ZWxs
b3ciKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNP
cHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JZZWxsb3c7CisgICAgaWYgKHZhbHVlID09ICJi
bGFjayIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3lu
Y09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvckJsYWNrOworICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7Cit9CisKK2lubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xE
YXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvciB2YWx1ZSkKK3sKKyAgICBzd2l0Y2godmFs
dWUpIHsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENv
bG9yQ3lhbjoKKyAgICAgICAgcmV0dXJuICJjeWFuIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29s
RGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3JNYWdlbnRhOgorICAgICAgICByZXR1cm4g
Im1hZ2VudGEiX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5j
UHJpbnRDb2xvclllbGxvdzoKKyAgICAgICAgcmV0dXJuICJ5ZWxsb3ciX3M7CisgICAgY2FzZSBU
ZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvckJsYWNrOgorICAgICAg
ICByZXR1cm4gImJsYWNrIl9zOworICAgIH0KK30KKwordGVtcGxhdGU8PgoraW5saW5lIE9wdGlv
bmFsPFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yPiBmcm9tUHJv
dG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gImN5
YW4iKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1By
aW50Q29sb3JDeWFuOworICAgIGlmICh2YWx1ZSA9PSAibWFnZW50YSIpCisgICAgICAgIHJldHVy
biBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvck1hZ2VudGE7Cisg
ICAgaWYgKHZhbHVlID09ICJ5ZWxsb3ciKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0
YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3JZZWxsb3c7CisgICAgaWYgKHZhbHVlID09ICJi
bGFjayIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5j
UHJpbnRDb2xvckJsYWNrOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK2lubGluZSBT
dHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3lu
Y1ByaW50Q29sb3IgdmFsdWUpCit7CisgICAgc3dpdGNoKHZhbHVlKSB7CisgICAgY2FzZSBUZXN0
UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JDeWFuOgorICAgICAgICBy
ZXR1cm4gImN5YW4iX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxB
c3luY1ByaW50Q29sb3JNYWdlbnRhOgorICAgICAgICByZXR1cm4gIm1hZ2VudGEiX3M7CisgICAg
Y2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JZZWxsb3c6
CisgICAgICAgIHJldHVybiAieWVsbG93Il9zOworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJh
c2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yQmxhY2s6CisgICAgICAgIHJldHVybiAiYmxhY2si
X3M7CisgICAgfQorfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29s
RGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gImN5YW4iKQorICAgICAgICBy
ZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yQ3lhbjsK
KyAgICBpZiAodmFsdWUgPT0gIm1hZ2VudGEiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29s
RGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yTWFnZW50YTsKKyAgICBpZiAodmFsdWUg
PT0gInllbGxvdyIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVT
UUxBc3luY1ByaW50Q29sb3JZZWxsb3c7CisgICAgaWYgKHZhbHVlID09ICJibGFjayIpCisgICAg
ICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JC
bGFjazsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorCisj
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgi
CisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0
b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5z
cGVjdG9yOworCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoRGF0YWJh
c2VEb21haW4pCisKKysgKHZvaWQpX3BhcnNlRGF0YWJhc2VJZDooTlNOdW1iZXIgKiopb3V0VmFs
dWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisrICh2b2lkKV9wYXJzZVByaW1hcnlDb2xvcnM6
KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworKyAodm9pZClf
cGFyc2VDb2xvckxpc3Q6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5
bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNlRXJyb3I6KFRlc3RQcm90b2NvbERhdGFi
YXNlRXJyb3IgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisKK0BlbmQKKwor
QGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoRGF0YWJhc2VEb21h
aW4pCisKKysgKHZvaWQpX3BhcnNlRGF0YWJhc2VJZDooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJv
bVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBF
KHBheWxvYWQsIFtOU051bWJlciBjbGFzc10pOworICAgICpvdXRWYWx1ZSA9IChOU051bWJlciAq
KXBheWxvYWQ7Cit9CisKKysgKHZvaWQpX3BhcnNlUHJpbWFyeUNvbG9yczooTlNOdW1iZXIgKiop
b3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05f
Rk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBjbGFzc10pOworICAgIE9wdGlvbmFsPFRl
c3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycz4gcmVzdWx0ID0gSW5zcGVjdG9yOjpmcm9t
UHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzPihwYXlsb2Fk
KTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9FTlVNX1ZBTFVFKHJlc3VsdCwgQCJQcmlt
YXJ5Q29sb3JzIik7CisgICAgKm91dFZhbHVlID0gQChyZXN1bHQudmFsdWUoKSk7Cit9CisKKysg
KHZvaWQpX3BhcnNlQ29sb3JMaXN0OihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopb3V0VmFsdWUg
ZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9U
WVBFKHBheWxvYWQsIFtOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gY2xhc3NdKTsKKyAgICAqb3V0VmFs
dWUgPSAoTlNBcnJheS8qPE5TU3RyaW5nPiovICopcGF5bG9hZDsKK30KKworKyAodm9pZClfcGFy
c2VFcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9h
ZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9h
ZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOworICAgICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29s
RGF0YWJhc2VFcnJvciBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOworfQorCitAZW5k
CisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJ
bnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNp
bXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisjaW1w
b3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNp
bmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29s
RGF0YWJhc2VFcnJvcgorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxs
IE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCit7CisgICAgaWYgKCEoc2Vs
ZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBUSFJPV19FWENF
UFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJtZXNzYWdlIl0sIEAibWVzc2Fn
ZSIpOworICAgIHNlbGYubWVzc2FnZSA9IHBheWxvYWRbQCJtZXNzYWdlIl07CisKKyAgICBUSFJP
V19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJjb2RlIl0sIEAiY29k
ZSIpOworICAgIHNlbGYuY29kZSA9IFtwYXlsb2FkW0AiY29kZSJdIGludGVnZXJWYWx1ZV07CisK
KyAgICByZXR1cm4gc2VsZjsKK30KKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2Jq
ZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilvYmplY3QKK3sKKyAgICBpZiAoIShzZWxmID0g
W3N1cGVyIGluaXRXaXRoSlNPTk9iamVjdDpbb2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0KCldKSkK
KyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHJldHVybiBzZWxmOworfQorCistIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZTooaW50KWNvZGUK
K3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsK
KworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkobWVzc2FnZSwgQCJt
ZXNzYWdlIik7CisKKyAgICBzZWxmLm1lc3NhZ2UgPSBtZXNzYWdlOworICAgIHNlbGYuY29kZSA9
IGNvZGU7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClzZXRNZXNzYWdlOihOU1N0
cmluZyAqKW1lc3NhZ2UKK3sKKyAgICBbc3VwZXIgc2V0U3RyaW5nOm1lc3NhZ2UgZm9yS2V5OkAi
bWVzc2FnZSJdOworfQorCistIChOU1N0cmluZyAqKW1lc3NhZ2UKK3sKKyAgICByZXR1cm4gW3N1
cGVyIHN0cmluZ0ZvcktleTpAIm1lc3NhZ2UiXTsKK30KKworLSAodm9pZClzZXRDb2RlOihpbnQp
Y29kZQoreworICAgIFtzdXBlciBzZXRJbnRlZ2VyOmNvZGUgZm9yS2V5OkAiY29kZSJdOworfQor
CistIChpbnQpY29kZQoreworICAgIHJldHVybiBbc3VwZXIgaW50ZWdlckZvcktleTpAImNvZGUi
XTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNv
bi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpz
b24tcmVzdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xMzFlZjdm
ZGVmMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJu
LXBhcmFtZXRlcnMuanNvbi1yZXN1bHQKQEAgLTAsMCArMSwxNjQzIEBACisjIyMgQmVnaW4gRmls
ZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworLy8gRGF0YWJh
c2UKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIkRhdGFiYXNlIiwgbnVsbCk7CitJ
bnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiRGF0YWJhc2UuUHJpbWFyeUNvbG9ycyIsIHtS
ZWQ6ICJyZWQiLCBHcmVlbjogImdyZWVuIiwgQmx1ZTogImJsdWUifSk7CitJbnNwZWN0b3JCYWNr
ZW5kLnJlZ2lzdGVyQ29tbWFuZCgiRGF0YWJhc2UuZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVy
cyIsIG51bGwsIFt7Im5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0
aW9uYWwiOiB0cnVlfSwgeyJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlv
bmFsIjogdHJ1ZX0sIHsibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiLCAib3B0
aW9uYWwiOiB0cnVlfSwgeyJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRp
b25hbCI6IHRydWV9LCB7Im5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRp
b25hbCI6IHRydWV9LCB7Im5hbWUiOiAiZGF0YWJhc2VJZCIsICJ0eXBlIjogIm51bWJlciIsICJv
cHRpb25hbCI6IHRydWV9LCB7Im5hbWUiOiAic3FsRXJyb3IiLCAidHlwZSI6ICJvYmplY3QiLCAi
b3B0aW9uYWwiOiB0cnVlfSwgeyJuYW1lIjogInNjcmVlbkNvbG9yIiwgInR5cGUiOiAic3RyaW5n
IiwgIm9wdGlvbmFsIjogdHJ1ZX0sIHsibmFtZSI6ICJhbHRlcm5hdGVDb2xvcnMiLCAidHlwZSI6
ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0cnVlfSwgeyJuYW1lIjogInByaW50Q29sb3IiLCAidHlw
ZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVlfV0sIFsiY29sdW1uTmFtZXMiLCAibm90ZXMi
LCAidGltZXN0YW1wIiwgInZhbHVlcyIsICJwYXlsb2FkIiwgImRhdGFiYXNlSWQiLCAic3FsRXJy
b3IiLCAic2NyZWVuQ29sb3IiLCAiYWx0ZXJuYXRlQ29sb3JzIiwgInByaW50Q29sb3IiXSk7CitJ
bnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiRGF0YWJhc2UuZXhlY3V0ZU5vT3B0aW9u
YWxQYXJhbWV0ZXJzIiwgbnVsbCwgW3sibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogIm9i
amVjdCJ9LCB7Im5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmcifSwgeyJuYW1lIjogInRp
bWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciJ9LCB7Im5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAi
b2JqZWN0In0sIHsibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAib2JqZWN0In0sIHsibmFtZSI6
ICJkYXRhYmFzZUlkIiwgInR5cGUiOiAibnVtYmVyIn0sIHsibmFtZSI6ICJzcWxFcnJvciIsICJ0
eXBlIjogIm9iamVjdCJ9LCB7Im5hbWUiOiAic2NyZWVuQ29sb3IiLCAidHlwZSI6ICJzdHJpbmci
fSwgeyJuYW1lIjogImFsdGVybmF0ZUNvbG9ycyIsICJ0eXBlIjogIm9iamVjdCJ9LCB7Im5hbWUi
OiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmluZyJ9XSwgWyJjb2x1bW5OYW1lcyIsICJub3Rl
cyIsICJ0aW1lc3RhbXAiLCAidmFsdWVzIiwgInBheWxvYWQiLCAiZGF0YWJhc2VJZCIsICJzcWxF
cnJvciIsICJzY3JlZW5Db2xvciIsICJhbHRlcm5hdGVDb2xvcnMiLCAicHJpbnRDb2xvciJdKTsK
K0luc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkRhdGFiYXNlIiwgbnVsbCk7CisjIyMg
RW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcworCisjIyMgQmVnaW4gRmlsZTog
VGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJz
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdt
YSBvbmNlCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKwor
I2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xh
c3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHZvaWQgc2V0QmFj
a2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsg
bV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KKyAgICBCYWNrZW5k
RGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmRE
aXNwYXRjaGVyLmdldCgpOyB9Citwcml2YXRlOgorICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hl
cj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKK307CisKKworY2xhc3MgQWx0ZXJuYXRlRGF0YWJhc2VC
YWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Citw
dWJsaWM6CisgICAgdmlydHVhbCB+QWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcigp
IHsgfQorICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcg
Y2FsbElkLCBjb25zdCBKU09OOjpBcnJheSogaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyog
aW5fbm90ZXMsIGNvbnN0IGRvdWJsZSogaW5fdGltZXN0YW1wLCBjb25zdCBKU09OOjpPYmplY3Qq
IGluX3ZhbHVlcywgY29uc3QgSlNPTjo6VmFsdWUqIGluX3BheWxvYWQsIGNvbnN0IGludCogaW5f
ZGF0YWJhc2VJZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5n
KiBpbl9zY3JlZW5Db2xvciwgY29uc3QgSlNPTjo6QXJyYXkqIGluX2FsdGVybmF0ZUNvbG9ycywg
Y29uc3QgU3RyaW5nKiBpbl9wcmludENvbG9yKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1
dGVOb09wdGlvbmFsUGFyYW1ldGVycyhsb25nIGNhbGxJZCwgY29uc3QgSlNPTjo6QXJyYXkmIGlu
X2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIGluX25vdGVzLCBkb3VibGUgaW5fdGltZXN0YW1w
LCBjb25zdCBKU09OOjpPYmplY3QmIGluX3ZhbHVlcywgSlNPTjo6VmFsdWUgaW5fcGF5bG9hZCwg
aW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IEpTT046Ok9iamVjdCYgaW5fc3FsRXJyb3IsIGNvbnN0
IFN0cmluZyYgaW5fc2NyZWVuQ29sb3IsIGNvbnN0IEpTT046OkFycmF5JiBpbl9hbHRlcm5hdGVD
b2xvcnMsIGNvbnN0IFN0cmluZyYgaW5fcHJpbnRDb2xvcikgPSAwOworfTsKKworfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKKyMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVy
cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0
dXJuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIK
KyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsK
KwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKK2NsYXNzIEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3Bh
dGNoZXI7CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
CisKK2NsYXNzIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKK3B1YmxpYzoKKyAg
ICAvLyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIgJ3ByaW50Q29sb3InIHdoaWxlIGdlbmVyYXRpbmcg
Y29tbWFuZC9ldmVudCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzLgorICAgIGVudW0gY2xh
c3MgUHJpbnRDb2xvciB7CisgICAgICAgIEN5YW4gPSAzLAorICAgICAgICBNYWdlbnRhID0gNCwK
KyAgICAgICAgWWVsbG93ID0gNSwKKyAgICAgICAgQmxhY2sgPSA2LAorICAgIH07IC8vIGVudW0g
Y2xhc3MgUHJpbnRDb2xvcgorICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlQWxsT3B0aW9uYWxQYXJh
bWV0ZXJzKEVycm9yU3RyaW5nJiwgY29uc3QgSlNPTjo6QXJyYXkqIG9wdF9pbl9jb2x1bW5OYW1l
cywgY29uc3QgU3RyaW5nKiBvcHRfaW5fbm90ZXMsIGNvbnN0IGRvdWJsZSogb3B0X2luX3RpbWVz
dGFtcCwgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRfaW5fdmFsdWVzLCBjb25zdCBKU09OOjpWYWx1
ZSogb3B0X2luX3BheWxvYWQsIGNvbnN0IGludCogb3B0X2luX2RhdGFiYXNlSWQsIGNvbnN0IEpT
T046Ok9iamVjdCogb3B0X2luX3NxbEVycm9yLCBjb25zdCBTdHJpbmcqIG9wdF9pbl9zY3JlZW5D
b2xvciwgY29uc3QgSlNPTjo6QXJyYXkqIG9wdF9pbl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0
cmluZyogb3B0X2luX3ByaW50Q29sb3IsIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiBv
cHRfb3V0X2NvbHVtbk5hbWVzLCBPcHRpb25hbDxTdHJpbmc+JiBvcHRfb3V0X25vdGVzLCBPcHRp
b25hbDxkb3VibGU+JiBvcHRfb3V0X3RpbWVzdGFtcCwgT3B0aW9uYWw8SlNPTjo6T2JqZWN0PiYg
b3B0X291dF92YWx1ZXMsIE9wdGlvbmFsPEpTT046OlZhbHVlPiYgb3B0X291dF9wYXlsb2FkLCBP
cHRpb25hbDxpbnQ+JiBvcHRfb3V0X2RhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEYXRhYmFzZTo6RXJyb3I+JiBvcHRfb3V0X3NxbEVycm9yLCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyogb3B0X291dF9zY3JlZW5Db2xvciwgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiBvcHRfb3V0X2FsdGVy
bmF0ZUNvbG9ycywgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3Iq
IG9wdF9vdXRfcHJpbnRDb2xvcikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlTm9PcHRp
b25hbFBhcmFtZXRlcnMoRXJyb3JTdHJpbmcmLCBjb25zdCBKU09OOjpBcnJheSYgaW5fY29sdW1u
TmFtZXMsIGNvbnN0IFN0cmluZyYgaW5fbm90ZXMsIGRvdWJsZSBpbl90aW1lc3RhbXAsIGNvbnN0
IEpTT046Ok9iamVjdCYgaW5fdmFsdWVzLCBKU09OOjpWYWx1ZSBpbl9wYXlsb2FkLCBpbnQgaW5f
ZGF0YWJhc2VJZCwgY29uc3QgSlNPTjo6T2JqZWN0JiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5n
JiBpbl9zY3JlZW5Db2xvciwgY29uc3QgSlNPTjo6QXJyYXkmIGluX2FsdGVybmF0ZUNvbG9ycywg
Y29uc3QgU3RyaW5nJiBpbl9wcmludENvbG9yLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+
PiYgb3V0X2NvbHVtbk5hbWVzLCBTdHJpbmcqIG91dF9ub3RlcywgZG91YmxlKiBvdXRfdGltZXN0
YW1wLCBKU09OOjpPYmplY3QqIG91dF92YWx1ZXMsIEpTT046OlZhbHVlKiBvdXRfcGF5bG9hZCwg
aW50KiBvdXRfZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNl
OjpFcnJvcj4mIG91dF9zcWxFcnJvciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlBy
aW1hcnlDb2xvcnMqIG91dF9zY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiBvdXRfYWx0ZXJuYXRlQ29sb3JzLCBEYXRhYmFzZUJhY2tl
bmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciogb3V0X3ByaW50Q29sb3IpID0gMDsKK3By
b3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5EYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigp
OworfTsKKworY2xhc3MgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBT
dXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIHZvaWQgZGlzcGF0Y2gobG9uZyBy
ZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3Nh
Z2UpIGZpbmFsOworcHJpdmF0ZToKKyAgICB2b2lkIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRl
cnMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Cisg
ICAgdm9pZCBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIFJlZlB0
cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCitwdWJsaWM6CisgICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRj
aGVyKEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNo
ZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQorcHJp
dmF0ZToKKyAgICBBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKiBtX2FsdGVybmF0
ZURpc3BhdGNoZXIgeyBudWxscHRyIH07CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCitwcml2YXRlOgorICAgIERhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXIoQmFja2VuZERpc3BhdGNoZXImLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciop
OworICAgIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50IHsgbnVsbHB0
ciB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRo
LW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
VGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2lu
Y2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorI2luY2x1
ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNlbmRpZiAvLyBFTkFCTEUo
SU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworbmFtZXNwYWNlIEluc3BlY3RvciB7
CisKK0RhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+RGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXIoKSB7IH0KKworUmVmPERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+IERh
dGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2Vu
ZERpc3BhdGNoZXIsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKK3sK
KyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKGJhY2tl
bmREaXNwYXRjaGVyLCBhZ2VudCkpOworfQorCitEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0
Y2hlciwgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQorICAgIDogU3Vw
cGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCisgICAgLCBtX2Fn
ZW50KGFnZW50KQoreworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hl
ckZvckRvbWFpbigiRGF0YWJhc2UiX3MsIHRoaXMpOworfQorCit2b2lkIERhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhv
ZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQoreworICAgIFJlZjxEYXRhYmFzZUJhY2tl
bmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKKworICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+
IHBhcmFtZXRlcnM7CisgICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRl
cnMpOworCisgICAgaWYgKG1ldGhvZCA9PSAiZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyIp
IHsKKyAgICAgICAgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhyZXF1ZXN0SWQsIFdURk1v
dmUocGFyYW1ldGVycykpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChtZXRob2Qg
PT0gImV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyIpIHsKKyAgICAgICAgZXhlY3V0ZU5vT3B0
aW9uYWxQYXJhbWV0ZXJzKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2Nv
bEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS4iICsg
bWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOworfQorCit2b2lkIERhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXI6OmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIFJl
ZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycykKK3sKKyAgICBib29sIG9wdF9pbl9jb2x1
bW5OYW1lc192YWx1ZUZvdW5kID0gZmFsc2U7CisgICAgUmVmUHRyPEpTT046OkFycmF5PiBvcHRf
aW5fY29sdW1uTmFtZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRBcnJheShwYXJhbWV0ZXJz
LmdldCgpLCAiY29sdW1uTmFtZXMiX3MsICZvcHRfaW5fY29sdW1uTmFtZXNfdmFsdWVGb3VuZCk7
CisgICAgYm9vbCBvcHRfaW5fbm90ZXNfdmFsdWVGb3VuZCA9IGZhbHNlOworICAgIFN0cmluZyBv
cHRfaW5fbm90ZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5n
ZXQoKSwgIm5vdGVzIl9zLCAmb3B0X2luX25vdGVzX3ZhbHVlRm91bmQpOworICAgIGJvb2wgb3B0
X2luX3RpbWVzdGFtcF92YWx1ZUZvdW5kID0gZmFsc2U7CisgICAgZG91YmxlIG9wdF9pbl90aW1l
c3RhbXAgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXREb3VibGUocGFyYW1ldGVycy5nZXQoKSwg
InRpbWVzdGFtcCJfcywgJm9wdF9pbl90aW1lc3RhbXBfdmFsdWVGb3VuZCk7CisgICAgYm9vbCBv
cHRfaW5fdmFsdWVzX3ZhbHVlRm91bmQgPSBmYWxzZTsKKyAgICBSZWZQdHI8SlNPTjo6T2JqZWN0
PiBvcHRfaW5fdmFsdWVzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0T2JqZWN0KHBhcmFtZXRl
cnMuZ2V0KCksICJ2YWx1ZXMiX3MsICZvcHRfaW5fdmFsdWVzX3ZhbHVlRm91bmQpOworICAgIGJv
b2wgb3B0X2luX3BheWxvYWRfdmFsdWVGb3VuZCA9IGZhbHNlOworICAgIFJlZlB0cjxKU09OOjpW
YWx1ZT4gb3B0X2luX3BheWxvYWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRWYWx1ZShwYXJh
bWV0ZXJzLmdldCgpLCAicGF5bG9hZCJfcywgJm9wdF9pbl9wYXlsb2FkX3ZhbHVlRm91bmQpOwor
ICAgIGJvb2wgb3B0X2luX2RhdGFiYXNlSWRfdmFsdWVGb3VuZCA9IGZhbHNlOworICAgIGludCBv
cHRfaW5fZGF0YWJhc2VJZCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEludGVnZXIocGFyYW1l
dGVycy5nZXQoKSwgImRhdGFiYXNlSWQiX3MsICZvcHRfaW5fZGF0YWJhc2VJZF92YWx1ZUZvdW5k
KTsKKyAgICBib29sIG9wdF9pbl9zcWxFcnJvcl92YWx1ZUZvdW5kID0gZmFsc2U7CisgICAgUmVm
UHRyPEpTT046Ok9iamVjdD4gb3B0X2luX3NxbEVycm9yID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+
Z2V0T2JqZWN0KHBhcmFtZXRlcnMuZ2V0KCksICJzcWxFcnJvciJfcywgJm9wdF9pbl9zcWxFcnJv
cl92YWx1ZUZvdW5kKTsKKyAgICBib29sIG9wdF9pbl9zY3JlZW5Db2xvcl92YWx1ZUZvdW5kID0g
ZmFsc2U7CisgICAgU3RyaW5nIG9wdF9pbl9zY3JlZW5Db2xvciA9IG1fYmFja2VuZERpc3BhdGNo
ZXItPmdldFN0cmluZyhwYXJhbWV0ZXJzLmdldCgpLCAic2NyZWVuQ29sb3IiX3MsICZvcHRfaW5f
c2NyZWVuQ29sb3JfdmFsdWVGb3VuZCk7CisgICAgYm9vbCBvcHRfaW5fYWx0ZXJuYXRlQ29sb3Jz
X3ZhbHVlRm91bmQgPSBmYWxzZTsKKyAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IG9wdF9pbl9hbHRl
cm5hdGVDb2xvcnMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRBcnJheShwYXJhbWV0ZXJzLmdl
dCgpLCAiYWx0ZXJuYXRlQ29sb3JzIl9zLCAmb3B0X2luX2FsdGVybmF0ZUNvbG9yc192YWx1ZUZv
dW5kKTsKKyAgICBib29sIG9wdF9pbl9wcmludENvbG9yX3ZhbHVlRm91bmQgPSBmYWxzZTsKKyAg
ICBTdHJpbmcgb3B0X2luX3ByaW50Q29sb3IgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJp
bmcocGFyYW1ldGVycy5nZXQoKSwgInByaW50Q29sb3IiX3MsICZvcHRfaW5fcHJpbnRDb2xvcl92
YWx1ZUZvdW5kKTsKKyAgICBpZiAobV9iYWNrZW5kRGlzcGF0Y2hlci0+aGFzUHJvdG9jb2xFcnJv
cnMoKSkgeworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9y
KEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCAiU29tZSBhcmd1bWVudHMgb2YgbWV0
aG9kICdEYXRhYmFzZS5leGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzJyBjYW4ndCBiZSBwcm9j
ZXNzZWQiX3MpOworICAgICAgICByZXR1cm47CisgICAgfQorCisjaWYgRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikg
eworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFt
ZXRlcnMocmVxdWVzdElkLCBvcHRfaW5fY29sdW1uTmFtZXNfdmFsdWVGb3VuZCA/IG9wdF9pbl9j
b2x1bW5OYW1lcy5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9ub3Rlc192YWx1ZUZvdW5kID8gJm9w
dF9pbl9ub3RlcyA6IG51bGxwdHIsIG9wdF9pbl90aW1lc3RhbXBfdmFsdWVGb3VuZCA/ICZvcHRf
aW5fdGltZXN0YW1wIDogbnVsbHB0ciwgb3B0X2luX3ZhbHVlc192YWx1ZUZvdW5kID8gb3B0X2lu
X3ZhbHVlcy5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9wYXlsb2FkX3ZhbHVlRm91bmQgPyBvcHRf
aW5fcGF5bG9hZC5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9kYXRhYmFzZUlkX3ZhbHVlRm91bmQg
PyAmb3B0X2luX2RhdGFiYXNlSWQgOiBudWxscHRyLCBvcHRfaW5fc3FsRXJyb3JfdmFsdWVGb3Vu
ZCA/IG9wdF9pbl9zcWxFcnJvci5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9zY3JlZW5Db2xvcl92
YWx1ZUZvdW5kID8gJm9wdF9pbl9zY3JlZW5Db2xvciA6IG51bGxwdHIsIG9wdF9pbl9hbHRlcm5h
dGVDb2xvcnNfdmFsdWVGb3VuZCA/IG9wdF9pbl9hbHRlcm5hdGVDb2xvcnMuZ2V0KCkgOiBudWxs
cHRyLCBvcHRfaW5fcHJpbnRDb2xvcl92YWx1ZUZvdW5kID8gJm9wdF9pbl9wcmludENvbG9yIDog
bnVsbHB0cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAg
ICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAg
IFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IG91dF9jb2x1bW5OYW1lczsKKyAgICBPcHRp
b25hbDxTdHJpbmc+IG91dF9ub3RlczsKKyAgICBPcHRpb25hbDxkb3VibGU+IG91dF90aW1lc3Rh
bXA7CisgICAgT3B0aW9uYWw8SlNPTjo6T2JqZWN0PiBvdXRfdmFsdWVzOworICAgIE9wdGlvbmFs
PEpTT046OlZhbHVlPiBvdXRfcGF5bG9hZDsKKyAgICBPcHRpb25hbDxpbnQ+IG91dF9kYXRhYmFz
ZUlkOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IG91
dF9zcWxFcnJvcjsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNv
bG9ycyBvdXRfc2NyZWVuQ29sb3I7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpDb2xvckxpc3Q+IG91dF9hbHRlcm5hdGVDb2xvcnM7CisgICAgRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3Igb3V0X3ByaW50Q29sb3I7CisgICAgbV9h
Z2VudC0+ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhlcnJvciwgb3B0X2luX2NvbHVtbk5h
bWVzX3ZhbHVlRm91bmQgPyBvcHRfaW5fY29sdW1uTmFtZXMuZ2V0KCkgOiBudWxscHRyLCBvcHRf
aW5fbm90ZXNfdmFsdWVGb3VuZCA/ICZvcHRfaW5fbm90ZXMgOiBudWxscHRyLCBvcHRfaW5fdGlt
ZXN0YW1wX3ZhbHVlRm91bmQgPyAmb3B0X2luX3RpbWVzdGFtcCA6IG51bGxwdHIsIG9wdF9pbl92
YWx1ZXNfdmFsdWVGb3VuZCA/IG9wdF9pbl92YWx1ZXMuZ2V0KCkgOiBudWxscHRyLCBvcHRfaW5f
cGF5bG9hZF92YWx1ZUZvdW5kID8gb3B0X2luX3BheWxvYWQuZ2V0KCkgOiBudWxscHRyLCBvcHRf
aW5fZGF0YWJhc2VJZF92YWx1ZUZvdW5kID8gJm9wdF9pbl9kYXRhYmFzZUlkIDogbnVsbHB0ciwg
b3B0X2luX3NxbEVycm9yX3ZhbHVlRm91bmQgPyBvcHRfaW5fc3FsRXJyb3IuZ2V0KCkgOiBudWxs
cHRyLCBvcHRfaW5fc2NyZWVuQ29sb3JfdmFsdWVGb3VuZCA/ICZvcHRfaW5fc2NyZWVuQ29sb3Ig
OiBudWxscHRyLCBvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzX3ZhbHVlRm91bmQgPyBvcHRfaW5fYWx0
ZXJuYXRlQ29sb3JzLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX3ByaW50Q29sb3JfdmFsdWVGb3Vu
ZCA/ICZvcHRfaW5fcHJpbnRDb2xvciA6IG51bGxwdHIsIG91dF9jb2x1bW5OYW1lcywgb3V0X25v
dGVzLCBvdXRfdGltZXN0YW1wLCBvdXRfdmFsdWVzLCBvdXRfcGF5bG9hZCwgb3V0X2RhdGFiYXNl
SWQsIG91dF9zcWxFcnJvciwgb3V0X3NjcmVlbkNvbG9yLCBvdXRfYWx0ZXJuYXRlQ29sb3JzLCBv
dXRfcHJpbnRDb2xvcik7CisKKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7CisgICAgICAgIGlm
IChvdXRfY29sdW1uTmFtZXMpCisgICAgICAgICAgICByZXN1bHQtPnNldEFycmF5KCJjb2x1bW5O
YW1lcyJfcywgb3V0X2NvbHVtbk5hbWVzKTsKKyAgICAgICAgaWYgKG91dF9ub3Rlcy5oYXNWYWx1
ZSgpKQorICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCAqb3V0X25vdGVz
KTsKKyAgICAgICAgaWYgKG91dF90aW1lc3RhbXAuaGFzVmFsdWUoKSkKKyAgICAgICAgICAgIHJl
c3VsdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICpvdXRfdGltZXN0YW1wKTsKKyAgICAgICAg
aWYgKG91dF92YWx1ZXMuaGFzVmFsdWUoKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0
KCJ2YWx1ZXMiX3MsICpvdXRfdmFsdWVzKTsKKyAgICAgICAgaWYgKG91dF9wYXlsb2FkLmhhc1Zh
bHVlKCkpCisgICAgICAgICAgICByZXN1bHQtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCAqb3V0X3Bh
eWxvYWQpOworICAgICAgICBpZiAob3V0X2RhdGFiYXNlSWQuaGFzVmFsdWUoKSkKKyAgICAgICAg
ICAgIHJlc3VsdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgKm91dF9kYXRhYmFzZUlkKTsK
KyAgICAgICAgaWYgKG91dF9zcWxFcnJvcikKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0
KCJzcWxFcnJvciJfcywgb3V0X3NxbEVycm9yKTsKKyAgICAgICAgaWYgKG91dF9zY3JlZW5Db2xv
ci5oYXNWYWx1ZSgpKQorICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9y
Il9zLCAqb3V0X3NjcmVlbkNvbG9yKTsKKyAgICAgICAgaWYgKG91dF9hbHRlcm5hdGVDb2xvcnMp
CisgICAgICAgICAgICByZXN1bHQtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIG91dF9h
bHRlcm5hdGVDb2xvcnMpOworICAgICAgICBpZiAob3V0X3ByaW50Q29sb3IuaGFzVmFsdWUoKSkK
KyAgICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCAqb3V0X3ByaW50
Q29sb3IpOworICAgIH0KKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQorICAgICAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZh
bHNlKTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3Rv
Y29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7
Cit9CisKK3ZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZU5vT3B0aW9uYWxQ
YXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRl
cnMpCit7CisgICAgUmVmUHRyPEpTT046OkFycmF5PiBpbl9jb2x1bW5OYW1lcyA9IG1fYmFja2Vu
ZERpc3BhdGNoZXItPmdldEFycmF5KHBhcmFtZXRlcnMuZ2V0KCksICJjb2x1bW5OYW1lcyJfcywg
bnVsbHB0cik7CisgICAgU3RyaW5nIGluX25vdGVzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0
U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksICJub3RlcyJfcywgbnVsbHB0cik7CisgICAgZG91Ymxl
IGluX3RpbWVzdGFtcCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldERvdWJsZShwYXJhbWV0ZXJz
LmdldCgpLCAidGltZXN0YW1wIl9zLCBudWxscHRyKTsKKyAgICBSZWZQdHI8SlNPTjo6T2JqZWN0
PiBpbl92YWx1ZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRPYmplY3QocGFyYW1ldGVycy5n
ZXQoKSwgInZhbHVlcyJfcywgbnVsbHB0cik7CisgICAgUmVmUHRyPEpTT046OlZhbHVlPiBpbl9w
YXlsb2FkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0VmFsdWUocGFyYW1ldGVycy5nZXQoKSwg
InBheWxvYWQiX3MsIG51bGxwdHIpOworICAgIGludCBpbl9kYXRhYmFzZUlkID0gbV9iYWNrZW5k
RGlzcGF0Y2hlci0+Z2V0SW50ZWdlcihwYXJhbWV0ZXJzLmdldCgpLCAiZGF0YWJhc2VJZCJfcywg
bnVsbHB0cik7CisgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gaW5fc3FsRXJyb3IgPSBtX2JhY2tl
bmREaXNwYXRjaGVyLT5nZXRPYmplY3QocGFyYW1ldGVycy5nZXQoKSwgInNxbEVycm9yIl9zLCBu
dWxscHRyKTsKKyAgICBTdHJpbmcgaW5fc2NyZWVuQ29sb3IgPSBtX2JhY2tlbmREaXNwYXRjaGVy
LT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgInNjcmVlbkNvbG9yIl9zLCBudWxscHRyKTsK
KyAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGluX2FsdGVybmF0ZUNvbG9ycyA9IG1fYmFja2VuZERp
c3BhdGNoZXItPmdldEFycmF5KHBhcmFtZXRlcnMuZ2V0KCksICJhbHRlcm5hdGVDb2xvcnMiX3Ms
IG51bGxwdHIpOworICAgIFN0cmluZyBpbl9wcmludENvbG9yID0gbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksICJwcmludENvbG9yIl9zLCBudWxscHRyKTsK
KyAgICBpZiAobV9iYWNrZW5kRGlzcGF0Y2hlci0+aGFzUHJvdG9jb2xFcnJvcnMoKSkgeworICAg
ICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNw
YXRjaGVyOjpJbnZhbGlkUGFyYW1zLCAiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICdEYXRhYmFz
ZS5leGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMnIGNhbid0IGJlIHByb2Nlc3NlZCJfcyk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKKyAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7CisgICAgICAgIG1f
YWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKHJlcXVlc3RJ
ZCwgKmluX2NvbHVtbk5hbWVzLCBpbl9ub3RlcywgaW5fdGltZXN0YW1wLCAqaW5fdmFsdWVzLCAq
aW5fcGF5bG9hZCwgaW5fZGF0YWJhc2VJZCwgKmluX3NxbEVycm9yLCBpbl9zY3JlZW5Db2xvciwg
KmluX2FsdGVybmF0ZUNvbG9ycywgaW5fcHJpbnRDb2xvcik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisK
KyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBK
U09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+
IG91dF9jb2x1bW5OYW1lczsKKyAgICBTdHJpbmcgb3V0X25vdGVzOworICAgIGRvdWJsZSBvdXRf
dGltZXN0YW1wOworICAgIEpTT046Ok9iamVjdCBvdXRfdmFsdWVzOworICAgIEpTT046OlZhbHVl
IG91dF9wYXlsb2FkOworICAgIGludCBvdXRfZGF0YWJhc2VJZDsKKyAgICBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBvdXRfc3FsRXJyb3I7CisgICAgSW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgb3V0X3NjcmVlbkNvbG9yOwor
ICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiBvdXRf
YWx0ZXJuYXRlQ29sb3JzOworICAgIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQ
cmludENvbG9yIG91dF9wcmludENvbG9yOworICAgIG1fYWdlbnQtPmV4ZWN1dGVOb09wdGlvbmFs
UGFyYW1ldGVycyhlcnJvciwgKmluX2NvbHVtbk5hbWVzLCBpbl9ub3RlcywgaW5fdGltZXN0YW1w
LCAqaW5fdmFsdWVzLCAqaW5fcGF5bG9hZCwgaW5fZGF0YWJhc2VJZCwgKmluX3NxbEVycm9yLCBp
bl9zY3JlZW5Db2xvciwgKmluX2FsdGVybmF0ZUNvbG9ycywgaW5fcHJpbnRDb2xvciwgb3V0X2Nv
bHVtbk5hbWVzLCAmb3V0X25vdGVzLCAmb3V0X3RpbWVzdGFtcCwgb3V0X3ZhbHVlcywgJm91dF9w
YXlsb2FkLCAmb3V0X2RhdGFiYXNlSWQsIG91dF9zcWxFcnJvciwgJm91dF9zY3JlZW5Db2xvciwg
b3V0X2FsdGVybmF0ZUNvbG9ycywgJm91dF9wcmludENvbG9yKTsKKworICAgIGlmICghZXJyb3Iu
bGVuZ3RoKCkpIHsKKyAgICAgICAgcmVzdWx0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIG91
dF9jb2x1bW5OYW1lcyk7CisgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJub3RlcyJfcywgb3V0
X25vdGVzKTsKKyAgICAgICAgcmVzdWx0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgb3V0X3Rp
bWVzdGFtcCk7CisgICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIG91dF92YWx1
ZXMpOworICAgICAgICByZXN1bHQtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBvdXRfcGF5bG9hZCk7
CisgICAgICAgIHJlc3VsdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgb3V0X2RhdGFiYXNl
SWQpOworICAgICAgICByZXN1bHQtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIG91dF9zcWxFcnJv
cik7CisgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgSW5zcGVjdG9y
OjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKG91dF9zY3JlZW5D
b2xvcikpOworICAgICAgICByZXN1bHQtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIG91
dF9hbHRlcm5hdGVDb2xvcnMpOworICAgICAgICByZXN1bHQtPnNldFN0cmluZygicHJpbnRDb2xv
ciJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZh
bHVlKG91dF9wcmludENvbG9yKSk7CisgICAgfQorICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCisg
ICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1v
dmUocmVzdWx0KSwgZmFsc2UpOworICAgIGVsc2UKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdU
Rk1vdmUoZXJyb3IpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQg
RmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RG
cm9udGVuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBj
b21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9y
IHsKKworY2xhc3MgRnJvbnRlbmRSb3V0ZXI7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgor
IyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxl
OiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMu
Y3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJu
LXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclBy
b3RvY29sVHlwZXMuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKKworCisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKworCisvLyBGb3J3YXJk
IGRlY2xhcmF0aW9ucy4KK25hbWVzcGFjZSBEYXRhYmFzZSB7CitjbGFzcyBFcnJvcjsKK2VudW0g
Y2xhc3MgUHJpbWFyeUNvbG9yczsKK30gLy8gRGF0YWJhc2UKKy8vIEVuZCBvZiBmb3J3YXJkIGRl
Y2xhcmF0aW9ucy4KKworCisvLyBUeXBlZGVmcy4KK25hbWVzcGFjZSBEYXRhYmFzZSB7CisvKiBV
bmlxdWUgaWRlbnRpZmllciBvZiBEYXRhYmFzZSBvYmplY3QuICovCit0eXBlZGVmIGludCBEYXRh
YmFzZUlkOwordHlwZWRlZiBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFi
YXNlOjpQcmltYXJ5Q29sb3JzPiBDb2xvckxpc3Q7Cit9IC8vIERhdGFiYXNlCisvLyBFbmQgb2Yg
dHlwZWRlZnMuCisKK25hbWVzcGFjZSBUZXN0SGVscGVycyB7CisKK1N0cmluZyBnZXRFbnVtQ29u
c3RhbnRWYWx1ZShpbnQgY29kZSk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRF
bnVtQ29uc3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkKK3sKKyAgICByZXR1cm4gZ2V0RW51bUNvbnN0
YW50VmFsdWUoc3RhdGljX2Nhc3Q8aW50PihlbnVtVmFsdWUpKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgVGVzdEhlbHBlcnMKKworbmFtZXNwYWNlIERhdGFiYXNlIHsKKy8qICAqLworZW51bSBjbGFz
cyBQcmltYXJ5Q29sb3JzIHsKKyAgICBSZWQgPSAwLAorICAgIEdyZWVuID0gMSwKKyAgICBCbHVl
ID0gMiwKK307IC8vIGVudW0gY2xhc3MgUHJpbWFyeUNvbG9ycworLyogRGF0YWJhc2UgZXJyb3Iu
ICovCitjbGFzcyBFcnJvciA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKK3B1YmxpYzoKKyAg
ICBlbnVtIHsKKyAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAorICAgICAgICBNZXNzYWdlU2V0ID0g
MSA8PCAwLAorICAgICAgICBDb2RlU2V0ID0gMSA8PCAxLAorICAgICAgICBBbGxGaWVsZHNTZXQg
PSAoTWVzc2FnZVNldCB8IENvZGVTZXQpCisgICAgfTsKKworICAgIHRlbXBsYXRlPGludCBTVEFU
RT4KKyAgICBjbGFzcyBCdWlsZGVyIHsKKyAgICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiBtX3Jlc3VsdDsKKworICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRl
cjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CisgICAg
ICAgIH0KKworICAgICAgICBCdWlsZGVyKFJlZjwvKkVycm9yKi9KU09OOjpPYmplY3Q+JiYgb2Jq
ZWN0KQorICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCisgICAgICAgIHsK
KyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVy
X2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAgICAgICB9CisgICAgICAgIGZyaWVuZCBj
bGFzcyBFcnJvcjsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1lc3Nh
Z2VTZXQ+JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNZXNzYWdlU2V0KSwgcHJvcGVydHlfbWVz
c2FnZV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJtZXNz
YWdlIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1lc3NhZ2VTZXQ+
KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29kZVNldD4mIHNldENv
ZGUoaW50IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgQ29kZVNldCksIHByb3BlcnR5X2NvZGVfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAg
bV9yZXN1bHQtPnNldEludGVnZXIoImNvZGUiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVy
biBjYXN0U3RhdGU8Q29kZVNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIFJlZjxFcnJvcj4g
cmVsZWFzZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09
IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CisgICAgICAgICAgICBDT01QSUxF
X0FTU0VSVChzaXplb2YoRXJyb3IpID09IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5ub3RfY2Fz
dCk7CisKKyAgICAgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25SZXN1bHQgPSBtX3Jlc3Vs
dC5yZWxlYXNlTm9uTnVsbCgpOworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBXVEZNb3ZlKCpy
ZWludGVycHJldF9jYXN0PFJlZjxFcnJvcj4qPigmanNvblJlc3VsdCkpOworICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvKgorICAgICAqIFN5bnRo
ZXRpYyBjb25zdHJ1Y3RvcjoKKyAgICAgKiBSZWY8RXJyb3I+IHJlc3VsdCA9IEVycm9yOjpjcmVh
dGUoKQorICAgICAqICAgICAuc2V0TWVzc2FnZSguLi4pCisgICAgICogICAgIC5zZXRDb2RlKC4u
LikKKyAgICAgKiAgICAgLnJlbGVhc2UoKTsKKyAgICAgKi8KKyAgICBzdGF0aWMgQnVpbGRlcjxO
b0ZpZWxkc1NldD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmll
bGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICB9Cit9OworCit9IC8vIERhdGFi
YXNlCisKKworCituYW1lc3BhY2UgVGVzdEhlbHBlcnMgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBQ
cm90b2NvbEVudW1UeXBlPgorT3B0aW9uYWw8UHJvdG9jb2xFbnVtVHlwZT4gcGFyc2VFbnVtVmFs
dWVGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYpOworCisvLyBFbnVtcyBpbiB0aGUgJ0RhdGFiYXNl
JyBEb21haW4KK3RlbXBsYXRlPD4KK09wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFi
YXNlOjpQcmltYXJ5Q29sb3JzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+KGNvbnN0IFN0cmluZyYpOworCit9IC8v
IG5hbWVzcGFjZSBUZXN0SGVscGVycworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKKworLy8gSGFzaCBkZWNsYXJhdGlvbnMgaW4gdGhl
ICdEYXRhYmFzZScgRG9tYWluCit0ZW1wbGF0ZTw+CitzdHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IHsKKyAgICB0eXBlZGVmIElu
dEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IEhhc2g7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2Jq
ZWN0cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1y
ZXR1cm4tcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmpl
Y3RzLmgiCisKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCituYW1lc3BhY2UgUHJvdG9jb2wg
eworCituYW1lc3BhY2UgVGVzdEhlbHBlcnMgeworCitzdGF0aWMgY29uc3QgY2hhciogY29uc3Qg
ZW51bV9jb25zdGFudF92YWx1ZXNbXSA9IHsKKyAgICAicmVkIiwKKyAgICAiZ3JlZW4iLAorICAg
ICJibHVlIiwKKyAgICAiY3lhbiIsCisgICAgIm1hZ2VudGEiLAorICAgICJ5ZWxsb3ciLAorICAg
ICJibGFjayIsCit9OworCitTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsK
KyAgICByZXR1cm4gZW51bV9jb25zdGFudF92YWx1ZXNbY29kZV07Cit9CisKKy8vIEVudW1zIGlu
IHRoZSAnRGF0YWJhc2UnIERvbWFpbgordGVtcGxhdGU8PgorT3B0aW9uYWw8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmlu
ZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4oY29uc3QgU3Ry
aW5nJiBwcm90b2NvbFN0cmluZykKK3sKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50
VmFsdWVzW10gPSB7CisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6OlByaW1hcnlDb2xvcnM6OlJlZCwKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9yczo6R3JlZW4sCisgICAgICAgIChzaXplX3QpSW5z
cGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM6OkJsdWUsCisgICAgfTsK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDM7ICsraSkKKyAgICAgICAgaWYgKHByb3RvY29s
U3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKKyAgICAg
ICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xv
cnMpY29uc3RhbnRWYWx1ZXNbaV07CisKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCisK
K30gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90b2Nv
bAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xPYmplY3RzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3Bh
dGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRo
LW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0
ci5oPgorCitAcHJvdG9jb2wgVGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyOworCitu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCitjbGFzcyBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVyIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBPYmpD
SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xEYXRhYmFz
ZURvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KKyAgICB2
b2lkIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIGNvbnN0IEpT
T046OkFycmF5KiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nKiBpbl9ub3RlcywgY29uc3Qg
ZG91YmxlKiBpbl90aW1lc3RhbXAsIGNvbnN0IEpTT046Ok9iamVjdCogaW5fdmFsdWVzLCBjb25z
dCBKU09OOjpWYWx1ZSogaW5fcGF5bG9hZCwgY29uc3QgaW50KiBpbl9kYXRhYmFzZUlkLCBjb25z
dCBKU09OOjpPYmplY3QqIGluX3NxbEVycm9yLCBjb25zdCBTdHJpbmcqIGluX3NjcmVlbkNvbG9y
LCBjb25zdCBKU09OOjpBcnJheSogaW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcqIGlu
X3ByaW50Q29sb3IpIGZpbmFsOworICAgIHZvaWQgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJz
KGxvbmcgcmVxdWVzdElkLCBjb25zdCBKU09OOjpBcnJheSYgaW5fY29sdW1uTmFtZXMsIGNvbnN0
IFN0cmluZyYgaW5fbm90ZXMsIGRvdWJsZSBpbl90aW1lc3RhbXAsIGNvbnN0IEpTT046Ok9iamVj
dCYgaW5fdmFsdWVzLCBKU09OOjpWYWx1ZSBpbl9wYXlsb2FkLCBpbnQgaW5fZGF0YWJhc2VJZCwg
Y29uc3QgSlNPTjo6T2JqZWN0JiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nJiBpbl9zY3JlZW5D
b2xvciwgY29uc3QgSlNPTjo6QXJyYXkmIGluX2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5n
JiBpbl9wcmludENvbG9yKSBmaW5hbDsKK3ByaXZhdGU6CisgICAgUmV0YWluUHRyPGlkPFRlc3RQ
cm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlz
cGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNo
ZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1v
cHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0
UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbElu
dGVybmFsLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW5j
bHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3ZvaWQg
T2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVBbGxPcHRpb25h
bFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIGNvbnN0IEpTT046OkFycmF5KiBpbl9jb2x1bW5O
YW1lcywgY29uc3QgU3RyaW5nKiBpbl9ub3RlcywgY29uc3QgZG91YmxlKiBpbl90aW1lc3RhbXAs
IGNvbnN0IEpTT046Ok9iamVjdCogaW5fdmFsdWVzLCBjb25zdCBKU09OOjpWYWx1ZSogaW5fcGF5
bG9hZCwgY29uc3QgaW50KiBpbl9kYXRhYmFzZUlkLCBjb25zdCBKU09OOjpPYmplY3QqIGluX3Nx
bEVycm9yLCBjb25zdCBTdHJpbmcqIGluX3NjcmVlbkNvbG9yLCBjb25zdCBKU09OOjpBcnJheSog
aW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcqIGluX3ByaW50Q29sb3IpCit7CisgICAg
aWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGV4ZWN1dGVBbGxP
cHRpb25hbFBhcmFtZXRlcnNXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6Y29sdW1u
TmFtZXM6bm90ZXM6dGltZXN0YW1wOnZhbHVlczpwYXlsb2FkOmRhdGFiYXNlSWQ6c3FsRXJyb3I6
c2NyZWVuQ29sb3I6YWx0ZXJuYXRlQ29sb3JzOnByaW50Q29sb3I6KV0pIHsKKyAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmRE
aXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS5leGVjdXRlQWxsT3B0aW9uYWxQ
YXJhbWV0ZXJzJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlk
IGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgeworICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNo
ZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNl
bmRQZW5kaW5nRXJyb3JzKCk7CisgICAgfTsKKworICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4o
TlNBcnJheS8qPE5TU3RyaW5nPiovICoqY29sdW1uTmFtZXMsIE5TU3RyaW5nICoqbm90ZXMsIGRv
dWJsZSAqdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKip2YWx1ZXMsIFJXSVByb3Rv
Y29sSlNPTk9iamVjdCAqKnBheWxvYWQsIGludCAqZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0
YWJhc2VFcnJvciAqKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMg
KnNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiphbHRlcm5hdGVDb2xvcnMsIFRl
c3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3Ig
KnByaW50Q29sb3IpIHsKKyAgICAgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0T2JqZWN0ID0g
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURf
T1BUSU9OQUxfUEFSQU1FVEVSKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7CisgICAgICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihub3RlcywgQCJub3Rl
cyIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIo
dmFsdWVzLCBAInZhbHVlcyIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJ
T05BTF9QQVJBTUVURVIocGF5bG9hZCwgQCJwYXlsb2FkIik7CisgICAgICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihzcWxFcnJvciwgQCJzcWxFcnJvciIpOwor
ICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoYWx0ZXJu
YXRlQ29sb3JzLCBAImFsdGVybmF0ZUNvbG9ycyIpOworICAgICAgICBpZiAoY29sdW1uTmFtZXMp
CisgICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgdG9K
U09OU3RyaW5nQXJyYXkoKmNvbHVtbk5hbWVzKSk7CisgICAgICAgIGlmIChub3RlcykKKyAgICAg
ICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJub3RlcyJfcywgKm5vdGVzKTsKKyAgICAg
ICAgaWYgKHRpbWVzdGFtcCkKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0RG91YmxlKCJ0
aW1lc3RhbXAiX3MsICp0aW1lc3RhbXApOworICAgICAgICBpZiAodmFsdWVzKQorICAgICAgICAg
ICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgWyp2YWx1ZXMgdG9KU09OT2Jq
ZWN0XSk7CisgICAgICAgIGlmIChwYXlsb2FkKQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5z
ZXRWYWx1ZSgicGF5bG9hZCJfcywgWypwYXlsb2FkIHRvSlNPTk9iamVjdF0pOworICAgICAgICBp
ZiAoZGF0YWJhc2VJZCkKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0SW50ZWdlcigiZGF0
YWJhc2VJZCJfcywgKmRhdGFiYXNlSWQpOworICAgICAgICBpZiAoc3FsRXJyb3IpCisgICAgICAg
ICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIFsqc3FsRXJyb3IgdG9K
U09OT2JqZWN0XSk7CisgICAgICAgIGlmIChzY3JlZW5Db2xvcikKKyAgICAgICAgICAgIHJlc3Vs
dE9iamVjdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgdG9Qcm90b2NvbFN0cmluZygqc2Ny
ZWVuQ29sb3IpKTsKKyAgICAgICAgaWYgKGFsdGVybmF0ZUNvbG9ycykKKyAgICAgICAgICAgIHJl
c3VsdE9iamVjdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5nQXJy
YXkoKmFsdGVybmF0ZUNvbG9ycykpOworICAgICAgICBpZiAocHJpbnRDb2xvcikKKyAgICAgICAg
ICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCB0b1Byb3RvY29sU3Ry
aW5nKCpwcmludENvbG9yKSk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNw
b25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0T2JqZWN0KSwgZmFsc2UpOworICAgIH07CisK
KyAgICBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKm9faW5fY29sdW1uTmFtZXM7CisgICAgaWYgKGlu
X2NvbHVtbk5hbWVzKQorICAgICAgICBvX2luX2NvbHVtbk5hbWVzID0gdG9PYmpDU3RyaW5nQXJy
YXkoaW5fY29sdW1uTmFtZXMpOworICAgIE5TU3RyaW5nICpvX2luX25vdGVzOworICAgIGlmIChp
bl9ub3RlcykKKyAgICAgICAgb19pbl9ub3RlcyA9ICppbl9ub3RlczsKKyAgICBkb3VibGUgb19p
bl90aW1lc3RhbXA7CisgICAgaWYgKGluX3RpbWVzdGFtcCkKKyAgICAgICAgb19pbl90aW1lc3Rh
bXAgPSAqaW5fdGltZXN0YW1wOworICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb19pbl92YWx1
ZXM7CisgICAgaWYgKGluX3ZhbHVlcykKKyAgICAgICAgb19pbl92YWx1ZXMgPSBbW1tSV0lQcm90
b2NvbEpTT05PYmplY3QgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDppbl92YWx1ZXNdIGF1dG9y
ZWxlYXNlXTsKKyAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9faW5fcGF5bG9hZDsKKyAgICBp
ZiAoaW5fcGF5bG9hZCkKKyAgICAgICAgb19pbl9wYXlsb2FkID0gW1tbUldJUHJvdG9jb2xKU09O
T2JqZWN0IGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6aW5fcGF5bG9hZF0gYXV0b3JlbGVhc2Vd
OworICAgIGludCBvX2luX2RhdGFiYXNlSWQ7CisgICAgaWYgKGluX2RhdGFiYXNlSWQpCisgICAg
ICAgIG9faW5fZGF0YWJhc2VJZCA9ICppbl9kYXRhYmFzZUlkOworICAgIFRlc3RQcm90b2NvbERh
dGFiYXNlRXJyb3IgKm9faW5fc3FsRXJyb3I7CisgICAgaWYgKGluX3NxbEVycm9yKQorICAgICAg
ICBvX2luX3NxbEVycm9yID0gW1tbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBhbGxvY10gaW5p
dFdpdGhKU09OT2JqZWN0OmluX3NxbEVycm9yXSBhdXRvcmVsZWFzZV07CisgICAgT3B0aW9uYWw8
VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzPiBvX2luX3NjcmVlbkNvbG9yOworICAg
IGlmIChpbl9zY3JlZW5Db2xvcikKKyAgICAgICAgb19pbl9zY3JlZW5Db2xvciA9IGZyb21Qcm90
b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnM+KCppbl9zY3JlZW5D
b2xvcik7CisgICAgTlNBcnJheS8qPE5TU3RyaW5nPiovICpvX2luX2FsdGVybmF0ZUNvbG9yczsK
KyAgICBpZiAoaW5fYWx0ZXJuYXRlQ29sb3JzKQorICAgICAgICBvX2luX2FsdGVybmF0ZUNvbG9y
cyA9IHRvT2JqQ1N0cmluZ0FycmF5KGluX2FsdGVybmF0ZUNvbG9ycyk7CisgICAgT3B0aW9uYWw8
VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xv
cj4gb19pbl9wcmludENvbG9yOworICAgIGlmIChpbl9wcmludENvbG9yKQorICAgICAgICBvX2lu
X3ByaW50Q29sb3IgPSBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sRGF0YWJhc2VFeGVj
dXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvcj4oKmluX3ByaW50Q29sb3IpOworCisg
ICAgW21fZGVsZWdhdGUgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1dpdGhFcnJvckNhbGxi
YWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjayBjb2x1bW5O
YW1lczooaW5fY29sdW1uTmFtZXMgPyAmb19pbl9jb2x1bW5OYW1lcyA6IG5pbCkgbm90ZXM6KGlu
X25vdGVzID8gJm9faW5fbm90ZXMgOiBuaWwpIHRpbWVzdGFtcDooaW5fdGltZXN0YW1wID8gJm9f
aW5fdGltZXN0YW1wIDogbmlsKSB2YWx1ZXM6KGluX3ZhbHVlcyA/ICZvX2luX3ZhbHVlcyA6IG5p
bCkgcGF5bG9hZDooaW5fcGF5bG9hZCA/ICZvX2luX3BheWxvYWQgOiBuaWwpIGRhdGFiYXNlSWQ6
KGluX2RhdGFiYXNlSWQgPyAmb19pbl9kYXRhYmFzZUlkIDogbmlsKSBzcWxFcnJvcjooaW5fc3Fs
RXJyb3IgPyAmb19pbl9zcWxFcnJvciA6IG5pbCkgc2NyZWVuQ29sb3I6KGluX3NjcmVlbkNvbG9y
ID8gJm9faW5fc2NyZWVuQ29sb3IudmFsdWUoKSA6IG5pbCkgYWx0ZXJuYXRlQ29sb3JzOihpbl9h
bHRlcm5hdGVDb2xvcnMgPyAmb19pbl9hbHRlcm5hdGVDb2xvcnMgOiBuaWwpIHByaW50Q29sb3I6
KGluX3ByaW50Q29sb3IgPyAmb19pbl9wcmludENvbG9yLnZhbHVlKCkgOiBuaWwpXTsKK30KKwor
dm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZU5vT3B0
aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBjb25zdCBKU09OOjpBcnJheSYgaW5fY29s
dW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgaW5fbm90ZXMsIGRvdWJsZSBpbl90aW1lc3RhbXAsIGNv
bnN0IEpTT046Ok9iamVjdCYgaW5fdmFsdWVzLCBKU09OOjpWYWx1ZSBpbl9wYXlsb2FkLCBpbnQg
aW5fZGF0YWJhc2VJZCwgY29uc3QgSlNPTjo6T2JqZWN0JiBpbl9zcWxFcnJvciwgY29uc3QgU3Ry
aW5nJiBpbl9zY3JlZW5Db2xvciwgY29uc3QgSlNPTjo6QXJyYXkmIGluX2FsdGVybmF0ZUNvbG9y
cywgY29uc3QgU3RyaW5nJiBpbl9wcmludENvbG9yKQoreworICAgIGlmICghW21fZGVsZWdhdGUg
cmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNX
aXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6Y29sdW1uTmFtZXM6bm90ZXM6dGltZXN0
YW1wOnZhbHVlczpwYXlsb2FkOmRhdGFiYXNlSWQ6c3FsRXJyb3I6c2NyZWVuQ29sb3I6YWx0ZXJu
YXRlQ29sb3JzOnByaW50Q29sb3I6KV0pIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2RO
b3RGb3VuZCwgIidEYXRhYmFzZS5leGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMnIHdhcyBub3Qg
Zm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9y
cygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4o
TlNTdHJpbmcgKmVycm9yKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFBy
b3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVy
cm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsK
KyAgICB9OworCisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihOU0FycmF5Lyo8TlNTdHJpbmc+
Ki8gKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJXSVBy
b3RvY29sSlNPTk9iamVjdCAqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnBheWxvYWQs
IGludCBkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpzcWxFcnJvciwgVGVz
dFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzIHNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNT
dHJpbmc+Ki8gKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9P
cHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yIHByaW50Q29sb3IpIHsKKyAgICAgICAgUmVmPEpT
T046Ok9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAg
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoY29sdW1uTmFtZXMsIEAi
Y29sdW1uTmFtZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJB
TUVURVIobm90ZXMsIEAibm90ZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFV
SVJFRF9QQVJBTUVURVIodmFsdWVzLCBAInZhbHVlcyIpOworICAgICAgICBUSFJPV19FWENFUFRJ
T05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihwYXlsb2FkLCBAInBheWxvYWQiKTsKKyAgICAgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoc3FsRXJyb3IsIEAic3FsRXJy
b3IiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoYWx0
ZXJuYXRlQ29sb3JzLCBAImFsdGVybmF0ZUNvbG9ycyIpOworICAgICAgICByZXN1bHRPYmplY3Qt
PnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgdG9KU09OU3RyaW5nQXJyYXkoY29sdW1uTmFtZXMp
KTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBub3Rlcyk7Cisg
ICAgICAgIHJlc3VsdE9iamVjdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIHRpbWVzdGFtcCk7
CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFt2YWx1ZXMgdG9K
U09OT2JqZWN0XSk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3Ms
IFtwYXlsb2FkIHRvSlNPTk9iamVjdF0pOworICAgICAgICByZXN1bHRPYmplY3QtPnNldEludGVn
ZXIoImRhdGFiYXNlSWQiX3MsIGRhdGFiYXNlSWQpOworICAgICAgICByZXN1bHRPYmplY3QtPnNl
dE9iamVjdCgic3FsRXJyb3IiX3MsIFtzcWxFcnJvciB0b0pTT05PYmplY3RdKTsKKyAgICAgICAg
cmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5n
KHNjcmVlbkNvbG9yKSk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoImFsdGVybmF0
ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5nQXJyYXkoYWx0ZXJuYXRlQ29sb3JzKSk7CisgICAgICAg
IHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5n
KHByaW50Q29sb3IpKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNl
KHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHRPYmplY3QpLCBmYWxzZSk7CisgICAgfTsKKworICAg
IE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqb19pbl9jb2x1bW5OYW1lcyA9IHRvT2JqQ1N0cmluZ0Fy
cmF5KCZpbl9jb2x1bW5OYW1lcyk7CisgICAgTlNTdHJpbmcgKm9faW5fbm90ZXMgPSBpbl9ub3Rl
czsKKyAgICBkb3VibGUgb19pbl90aW1lc3RhbXAgPSBpbl90aW1lc3RhbXA7CisgICAgUldJUHJv
dG9jb2xKU09OT2JqZWN0ICpvX2luX3ZhbHVlcyA9IFtbW1JXSVByb3RvY29sSlNPTk9iamVjdCBh
bGxvY10gaW5pdFdpdGhKU09OT2JqZWN0OiZpbl92YWx1ZXNdIGF1dG9yZWxlYXNlXTsKKyAgICBS
V0lQcm90b2NvbEpTT05PYmplY3QgKm9faW5fcGF5bG9hZCA9IFtbW1JXSVByb3RvY29sSlNPTk9i
amVjdCBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0OiZpbl9wYXlsb2FkXSBhdXRvcmVsZWFzZV07
CisgICAgaW50IG9faW5fZGF0YWJhc2VJZCA9IGluX2RhdGFiYXNlSWQ7CisgICAgVGVzdFByb3Rv
Y29sRGF0YWJhc2VFcnJvciAqb19pbl9zcWxFcnJvciA9IFtbW1Rlc3RQcm90b2NvbERhdGFiYXNl
RXJyb3IgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDomaW5fc3FsRXJyb3JdIGF1dG9yZWxlYXNl
XTsKKyAgICBPcHRpb25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnM+IG9faW5f
c2NyZWVuQ29sb3IgPSBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sRGF0YWJhc2VQcmlt
YXJ5Q29sb3JzPihpbl9zY3JlZW5Db2xvcik7CisgICAgaWYgKCFvX2luX3NjcmVlbkNvbG9yKSB7
CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2Vu
ZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsICJQYXJhbWV0ZXIgJ3NjcmVlbkNvbG9yJyBvZiBt
ZXRob2QgJ0RhdGFiYXNlLmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycycgY2Fubm90IGJlIHBy
b2Nlc3NlZCJfcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgTlNBcnJheS8qPE5TU3Ry
aW5nPiovICpvX2luX2FsdGVybmF0ZUNvbG9ycyA9IHRvT2JqQ1N0cmluZ0FycmF5KCZpbl9hbHRl
cm5hdGVDb2xvcnMpOworICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5v
T3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvcj4gb19pbl9wcmludENvbG9yID0gZnJvbVByb3Rv
Y29sU3RyaW5nPFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJz
UHJpbnRDb2xvcj4oaW5fcHJpbnRDb2xvcik7CisgICAgaWYgKCFvX2luX3ByaW50Q29sb3IpIHsK
KyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5k
RGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgIlBhcmFtZXRlciAncHJpbnRDb2xvcicgb2YgbWV0
aG9kICdEYXRhYmFzZS5leGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMnIGNhbm5vdCBiZSBwcm9j
ZXNzZWQiX3MpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgW21fZGVsZWdhdGUgZXhl
Y3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBz
dWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrIGNvbHVtbk5hbWVzOm9faW5fY29sdW1uTmFt
ZXMgbm90ZXM6b19pbl9ub3RlcyB0aW1lc3RhbXA6b19pbl90aW1lc3RhbXAgdmFsdWVzOm9faW5f
dmFsdWVzIHBheWxvYWQ6b19pbl9wYXlsb2FkIGRhdGFiYXNlSWQ6b19pbl9kYXRhYmFzZUlkIHNx
bEVycm9yOm9faW5fc3FsRXJyb3Igc2NyZWVuQ29sb3I6b19pbl9zY3JlZW5Db2xvci52YWx1ZSgp
IGFsdGVybmF0ZUNvbG9yczpvX2luX2FsdGVybmF0ZUNvbG9ycyBwcmludENvbG9yOm9faW5fcHJp
bnRDb2xvci52YWx1ZSgpXTsKK30KKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVy
cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBv
cnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KKworX19hdHRyaWJ1dGVfXygodmlzaWJp
bGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24g
OiBOU09iamVjdAorQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNldERhdGFi
YXNlSGFuZGxlcjopIGlkPFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4gZGF0YWJh
c2VIYW5kbGVyOworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJh
dGlvbi5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1j
YWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgorCisj
aW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFj
a2VuZERpc3BhdGNoZXJzLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNw
YXRjaGFibGVBZ2VudC5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNw
ZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwor
CitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgoreworICAgIEF1Z21l
bnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7CisgICAgaWQ8VGVzdFByb3Rv
Y29sRGF0YWJhc2VEb21haW5IYW5kbGVyPiBfZGF0YWJhc2VIYW5kbGVyOworfQorCistIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xs
ZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2Vs
ZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2Nv
bnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRl
YWxsb2MKK3sKKyAgICBbX2RhdGFiYXNlSGFuZGxlciByZWxlYXNlXTsKKyAgICBbc3VwZXIgZGVh
bGxvY107Cit9CisKKy0gKHZvaWQpc2V0RGF0YWJhc2VIYW5kbGVyOihpZDxUZXN0UHJvdG9jb2xE
YXRhYmFzZURvbWFpbkhhbmRsZXI+KWhhbmRsZXIKK3sKKyAgICBpZiAoaGFuZGxlciA9PSBfZGF0
YWJhc2VIYW5kbGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBbX2RhdGFiYXNlSGFuZGxlciBy
ZWxlYXNlXTsKKyAgICBfZGF0YWJhc2VIYW5kbGVyID0gW2hhbmRsZXIgcmV0YWluXTsKKworICAg
IGF1dG8gYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IG1ha2VVbmlxdWU8T2JqQ0luc3BlY3RvckRhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXI+KGhhbmRsZXIpOworICAgIGF1dG8gYWx0ZXJuYXRlQWdlbnQg
PSBtYWtlVW5pcXVlPEFsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50PERhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXIsIEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+PigiRGF0YWJhc2Ui
X3MsICpfY29udHJvbGxlciwgV1RGTW92ZShhbHRlcm5hdGVEaXNwYXRjaGVyKSk7CisgICAgX2Nv
bnRyb2xsZXItPmFwcGVuZEV4dHJhQWdlbnQoV1RGTW92ZShhbHRlcm5hdGVBZ2VudCkpOworfQor
CistIChpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+KWRhdGFiYXNlSGFuZGxl
cgoreworICAgIHJldHVybiBfZGF0YWJhc2VIYW5kbGVyOworfQorCitAZW5kCisKKworIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAi
VGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLmgiCisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2Ug
SW5zcGVjdG9yOworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVy
cy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFt
ZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisj
aW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKworI2ltcG9ydCA8V2ViSW5zcGVjdG9y
L1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgorCisKK0BjbGFzcyBUZXN0UHJvdG9jb2xEYXRhYmFz
ZUVycm9yOworCisKK3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbERhdGFi
YXNlUHJpbWFyeUNvbG9ycykgeworICAgIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9y
c1JlZCwKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNHcmVlbiwKKyAgICBU
ZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNCbHVlLAorfTsKKwordHlwZWRlZiBOU19F
TlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJh
bWV0ZXJzUHJpbnRDb2xvcikgeworICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9w
dGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JDeWFuLAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNl
RXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JNYWdlbnRhLAorICAgIFRlc3RQ
cm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JZZWxs
b3csCisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJz
UHJpbnRDb2xvckJsYWNrLAorfTsKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFBy
b3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvcikgewor
ICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50
Q29sb3JDeWFuLAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFy
YW1ldGVyc1ByaW50Q29sb3JNYWdlbnRhLAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0
ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JZZWxsb3csCisgICAgVGVzdFByb3RvY29s
RGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckJsYWNrLAorfTsK
KwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRl
Tm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yKSB7CisgICAgVGVzdFByb3RvY29sRGF0YWJh
c2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQ3lhbiwKKyAgICBUZXN0UHJv
dG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JNYWdlbnRh
LAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJp
bnRDb2xvclllbGxvdywKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFs
UGFyYW1ldGVyc1ByaW50Q29sb3JCbGFjaywKK307CisKK3R5cGVkZWYgTlNfRU5VTShOU0ludGVn
ZXIsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRD
b2xvcikgeworICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0
ZXJzUHJpbnRDb2xvckN5YW4sCisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRp
b25hbFBhcmFtZXRlcnNQcmludENvbG9yTWFnZW50YSwKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFz
ZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JZZWxsb3csCisgICAgVGVzdFBy
b3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQmxhY2ss
Cit9OworCisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVy
ZmFjZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIDogUldJUHJvdG9jb2xKU09OT2JqZWN0Cist
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwg
aWQ+ICopcGF5bG9hZDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihS
V0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OworLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlIGNvZGU6KGludCljb2RlOworLyogcmVxdWly
ZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICptZXNzYWdlOworLyog
cmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgaW50IGNvZGU7CitAZW5k
CisKK0Bwcm90b2NvbCBUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXIgPE5TT2JqZWN0
PgorQG9wdGlvbmFsCistICh2b2lkKWV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNXaXRoRXJy
b3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vz
c0NhbGxiYWNrOih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmNvbHVtbk5hbWVzLCBO
U1N0cmluZyAqKm5vdGVzLCBkb3VibGUgKnRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0
ICoqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipwYXlsb2FkLCBpbnQgKmRhdGFiYXNl
SWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0
YWJhc2VQcmltYXJ5Q29sb3JzICpzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICoq
YWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBh
cmFtZXRlcnNQcmludENvbG9yICpwcmludENvbG9yKSlzdWNjZXNzQ2FsbGJhY2sgY29sdW1uTmFt
ZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKiljb2x1bW5OYW1lcyBub3RlczooTlNTdHJpbmcg
Kiopbm90ZXMgdGltZXN0YW1wOihkb3VibGUgKil0aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90b2Nv
bEpTT05PYmplY3QgKiopdmFsdWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKilw
YXlsb2FkIGRhdGFiYXNlSWQ6KGludCAqKWRhdGFiYXNlSWQgc3FsRXJyb3I6KFRlc3RQcm90b2Nv
bERhdGFiYXNlRXJyb3IgKiopc3FsRXJyb3Igc2NyZWVuQ29sb3I6KFRlc3RQcm90b2NvbERhdGFi
YXNlUHJpbWFyeUNvbG9ycyAqKXNjcmVlbkNvbG9yIGFsdGVybmF0ZUNvbG9yczooTlNBcnJheS8q
PE5TU3RyaW5nPiovICoqKWFsdGVybmF0ZUNvbG9ycyBwcmludENvbG9yOihUZXN0UHJvdG9jb2xE
YXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yICopcHJpbnRDb2xv
cjsKKy0gKHZvaWQpZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzV2l0aEVycm9yQ2FsbGJhY2s6
KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoo
dm9pZCheKShOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqbm90
ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqdmFsdWVzLCBSV0lQ
cm90b2NvbEpTT05PYmplY3QgKnBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xE
YXRhYmFzZUVycm9yICpzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3Jz
IHNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmFsdGVybmF0ZUNvbG9ycywgVGVz
dFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yIHBy
aW50Q29sb3IpKXN1Y2Nlc3NDYWxsYmFjayBjb2x1bW5OYW1lczooTlNBcnJheS8qPE5TU3RyaW5n
PiovICopY29sdW1uTmFtZXMgbm90ZXM6KE5TU3RyaW5nICopbm90ZXMgdGltZXN0YW1wOihkb3Vi
bGUpdGltZXN0YW1wIHZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopdmFsdWVzIHBheWxv
YWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQgZGF0YWJhc2VJZDooaW50KWRhdGFi
YXNlSWQgc3FsRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKilzcWxFcnJvciBzY3Jl
ZW5Db2xvcjooVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzKXNjcmVlbkNvbG9yIGFs
dGVybmF0ZUNvbG9yczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopYWx0ZXJuYXRlQ29sb3JzIHBy
aW50Q29sb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJz
UHJpbnRDb2xvcilwcmludENvbG9yOworQGVuZAorCisKKworCisjaW1wb3J0IDxXZWJJbnNwZWN0
b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+CisKKyMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFs
LmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlv
bmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRl
c3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9B
dWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVz
Lmg+CisKKworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorCisjIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBh
cmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90
b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3RlbXBs
YXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KK09wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVBy
b3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOworCisKK2lubGluZSBTdHJpbmcgdG9Q
cm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgdmFsdWUpCit7
CisgICAgc3dpdGNoKHZhbHVlKSB7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1h
cnlDb2xvcnNSZWQ6CisgICAgICAgIHJldHVybiAicmVkIl9zOworICAgIGNhc2UgVGVzdFByb3Rv
Y29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzR3JlZW46CisgICAgICAgIHJldHVybiAiZ3JlZW4iX3M7
CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNCbHVlOgorICAgICAg
ICByZXR1cm4gImJsdWUiX3M7CisgICAgfQorfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgT3B0aW9u
YWw8VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzPiBmcm9tUHJvdG9jb2xTdHJpbmco
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gInJlZCIpCisgICAgICAg
IHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNSZWQ7CisgICAgaWYgKHZh
bHVlID09ICJncmVlbiIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1h
cnlDb2xvcnNHcmVlbjsKKyAgICBpZiAodmFsdWUgPT0gImJsdWUiKQorICAgICAgICByZXR1cm4g
VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzQmx1ZTsKKyAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworfQorCitpbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29s
RGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvciB2YWx1ZSkKK3sK
KyAgICBzd2l0Y2godmFsdWUpIHsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0
ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JDeWFuOgorICAgICAgICByZXR1cm4gImN5
YW4iX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBh
cmFtZXRlcnNQcmludENvbG9yTWFnZW50YToKKyAgICAgICAgcmV0dXJuICJtYWdlbnRhIl9zOwor
ICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJz
UHJpbnRDb2xvclllbGxvdzoKKyAgICAgICAgcmV0dXJuICJ5ZWxsb3ciX3M7CisgICAgY2FzZSBU
ZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9y
QmxhY2s6CisgICAgICAgIHJldHVybiAiYmxhY2siX3M7CisgICAgfQorfQorCit0ZW1wbGF0ZTw+
CitpbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQ
YXJhbWV0ZXJzUHJpbnRDb2xvcj4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFs
dWUpCit7CisgICAgaWYgKHZhbHVlID09ICJjeWFuIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90
b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JDeWFuOwor
ICAgIGlmICh2YWx1ZSA9PSAibWFnZW50YSIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xE
YXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yTWFnZW50YTsKKyAg
ICBpZiAodmFsdWUgPT0gInllbGxvdyIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRh
YmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yWWVsbG93OworICAgIGlm
ICh2YWx1ZSA9PSAiYmxhY2siKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VF
eGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckJsYWNrOworICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7Cit9CisKK2lubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJv
dG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yIHZhbHVl
KQoreworICAgIHN3aXRjaCh2YWx1ZSkgeworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VF
eGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckN5YW46CisgICAgICAgIHJldHVy
biAiY3lhbiJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlv
bmFsUGFyYW1ldGVyc1ByaW50Q29sb3JNYWdlbnRhOgorICAgICAgICByZXR1cm4gIm1hZ2VudGEi
X3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFt
ZXRlcnNQcmludENvbG9yWWVsbG93OgorICAgICAgICByZXR1cm4gInllbGxvdyJfczsKKyAgICBj
YXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50
Q29sb3JCbGFjazoKKyAgICAgICAgcmV0dXJuICJibGFjayJfczsKKyAgICB9Cit9CisKK3RlbXBs
YXRlPD4KK2lubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRp
b25hbFBhcmFtZXRlcnNQcmludENvbG9yPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5n
JiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gImN5YW4iKQorICAgICAgICByZXR1cm4gVGVz
dFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckN5
YW47CisgICAgaWYgKHZhbHVlID09ICJtYWdlbnRhIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90
b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JNYWdlbnRh
OworICAgIGlmICh2YWx1ZSA9PSAieWVsbG93IikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2Nv
bERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JZZWxsb3c7Cisg
ICAgaWYgKHZhbHVlID09ICJibGFjayIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRh
YmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQmxhY2s7CisgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKK30KKworaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRl
c3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvciB2
YWx1ZSkKK3sKKyAgICBzd2l0Y2godmFsdWUpIHsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFi
YXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckN5YW46CisgICAgICAgIHJl
dHVybiAiY3lhbiJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0
aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvck1hZ2VudGE6CisgICAgICAgIHJldHVybiAibWFnZW50
YSJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJh
bWV0ZXJzUHJpbnRDb2xvclllbGxvdzoKKyAgICAgICAgcmV0dXJuICJ5ZWxsb3ciX3M7CisgICAg
Y2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50
Q29sb3JCbGFjazoKKyAgICAgICAgcmV0dXJuICJibGFjayJfczsKKyAgICB9Cit9CisKK3RlbXBs
YXRlPD4KK2lubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlv
bmFsUGFyYW1ldGVyc1ByaW50Q29sb3I+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcm
IHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSAiY3lhbiIpCisgICAgICAgIHJldHVybiBUZXN0
UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JDeWFu
OworICAgIGlmICh2YWx1ZSA9PSAibWFnZW50YSIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9j
b2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JNYWdlbnRhOwor
ICAgIGlmICh2YWx1ZSA9PSAieWVsbG93IikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERh
dGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvclllbGxvdzsKKyAgICBp
ZiAodmFsdWUgPT0gImJsYWNrIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNl
RXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckJsYWNrOworICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7Cit9CisKK2lubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJv
dG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IgdmFsdWUp
Cit7CisgICAgc3dpdGNoKHZhbHVlKSB7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JDeWFuOgorICAgICAgICByZXR1cm4g
ImN5YW4iX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFs
UGFyYW1ldGVyc1ByaW50Q29sb3JNYWdlbnRhOgorICAgICAgICByZXR1cm4gIm1hZ2VudGEiX3M7
CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVy
c1ByaW50Q29sb3JZZWxsb3c6CisgICAgICAgIHJldHVybiAieWVsbG93Il9zOworICAgIGNhc2Ug
VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9y
QmxhY2s6CisgICAgICAgIHJldHVybiAiYmxhY2siX3M7CisgICAgfQorfQorCit0ZW1wbGF0ZTw+
CitpbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBh
cmFtZXRlcnNQcmludENvbG9yPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1
ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gImN5YW4iKQorICAgICAgICByZXR1cm4gVGVzdFByb3Rv
Y29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQ3lhbjsKKyAg
ICBpZiAodmFsdWUgPT0gIm1hZ2VudGEiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0
YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yTWFnZW50YTsKKyAgICBp
ZiAodmFsdWUgPT0gInllbGxvdyIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFz
ZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JZZWxsb3c7CisgICAgaWYgKHZh
bHVlID09ICJibGFjayIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JCbGFjazsKKyAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
Y29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9y
dCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVBy
b3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsK
KworQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKERhdGFiYXNlRG9tYWlu
KQorCisrICh2b2lkKV9wYXJzZURhdGFiYXNlSWQ6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21Q
YXlsb2FkOihpZClwYXlsb2FkOworKyAodm9pZClfcGFyc2VQcmltYXJ5Q29sb3JzOihOU051bWJl
ciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNlQ29s
b3JMaXN0OihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlk
KXBheWxvYWQ7CisrICh2b2lkKV9wYXJzZUVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9y
ICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworCitAZW5kCisKK0BpbXBsZW1l
bnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKERhdGFiYXNlRG9tYWluKQorCisr
ICh2b2lkKV9wYXJzZURhdGFiYXNlSWQ6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2Fk
OihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2Fk
LCBbTlNOdW1iZXIgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSAoTlNOdW1iZXIgKilwYXlsb2Fk
OworfQorCisrICh2b2lkKV9wYXJzZVByaW1hcnlDb2xvcnM6KE5TTnVtYmVyICoqKW91dFZhbHVl
IGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURf
VFlQRShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKKyAgICBPcHRpb25hbDxUZXN0UHJvdG9j
b2xEYXRhYmFzZVByaW1hcnlDb2xvcnM+IHJlc3VsdCA9IEluc3BlY3Rvcjo6ZnJvbVByb3RvY29s
U3RyaW5nPFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycz4ocGF5bG9hZCk7CisgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfRU5VTV9WQUxVRShyZXN1bHQsIEAiUHJpbWFyeUNvbG9y
cyIpOworICAgICpvdXRWYWx1ZSA9IEAocmVzdWx0LnZhbHVlKCkpOworfQorCisrICh2b2lkKV9w
YXJzZUNvbG9yTGlzdDooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKW91dFZhbHVlIGZyb21QYXls
b2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXls
b2FkLCBbTlNBcnJheS8qPE5TU3RyaW5nPiovIGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gKE5T
QXJyYXkvKjxOU1N0cmluZz4qLyAqKXBheWxvYWQ7Cit9CisKKysgKHZvaWQpX3BhcnNlRXJyb3I6
KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBh
eWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0Rp
Y3Rpb25hcnkgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbERhdGFiYXNl
RXJyb3IgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKK30KKworQGVuZAorCisKKyMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQ
cm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUu
aD4KKyNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5o
PgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0
UHJvdG9jb2xEYXRhYmFzZUVycm9yCisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6
KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQKK3sKKyAgICBp
ZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAIm1lc3NhZ2UiXSwg
QCJtZXNzYWdlIik7CisgICAgc2VsZi5tZXNzYWdlID0gcGF5bG9hZFtAIm1lc3NhZ2UiXTsKKwor
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImNvZGUi
XSwgQCJjb2RlIik7CisgICAgc2VsZi5jb2RlID0gW3BheWxvYWRbQCJjb2RlIl0gaW50ZWdlclZh
bHVlXTsKKworICAgIHJldHVybiBzZWxmOworfQorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJv
dG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9iamVjdAoreworICAgIGlmICgh
KHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmplY3QgdG9KU09OT2JqZWN0XS5n
ZXQoKV0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0g
KGluc3RhbmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBjb2RlOihp
bnQpY29kZQoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1
cm4gbmlsOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShtZXNz
YWdlLCBAIm1lc3NhZ2UiKTsKKworICAgIHNlbGYubWVzc2FnZSA9IG1lc3NhZ2U7CisgICAgc2Vs
Zi5jb2RlID0gY29kZTsKKworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXNldE1lc3Nh
Z2U6KE5TU3RyaW5nICopbWVzc2FnZQoreworICAgIFtzdXBlciBzZXRTdHJpbmc6bWVzc2FnZSBm
b3JLZXk6QCJtZXNzYWdlIl07Cit9CisKKy0gKE5TU3RyaW5nICopbWVzc2FnZQoreworICAgIHJl
dHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAibWVzc2FnZSJdOworfQorCistICh2b2lkKXNldENv
ZGU6KGludCljb2RlCit7CisgICAgW3N1cGVyIHNldEludGVnZXI6Y29kZSBmb3JLZXk6QCJjb2Rl
Il07Cit9CisKKy0gKGludCljb2RlCit7CisgICAgcmV0dXJuIFtzdXBlciBpbnRlZ2VyRm9yS2V5
OkAiY29kZSJdOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBl
cy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24tcmVzdWx0
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVk
L2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24tcmVzdWx0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yMTdkMDQ3YjdhOQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9k
ZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uLXJlc3VsdApAQCAtMCwwICsxLDEyMjgg
QEAKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5q
c29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKy8vIE5ldHdv
cmsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIk5ldHdvcmsiLCBudWxsKTsKKyNp
ZiBQTEFURk9STShNQUMpCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiTmV0d29y
ay5sb2FkUmVzb3VyY2UiLCBudWxsLCBbXSwgW10pOworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykK
KyNpZiBQTEFURk9STShNQUMpCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnQoIk5ldHdv
cmsucmVzb3VyY2VMb2FkZWQiLCBudWxsLCBbXSk7CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQor
SW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rlck5ldHdvcmtEaXNwYXRjaGVyID0gSW5zcGVjdG9yQmFj
a2VuZC5yZWdpc3RlckRpc3BhdGNoZXIuYmluZChJbnNwZWN0b3JCYWNrZW5kLCAiTmV0d29yayIp
OworSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiTmV0d29yayIsIG51bGwpOworIyMj
IEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKKworIyMjIEJlZ2luIEZpbGU6
IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpZiBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVu
ZFJvdXRlci5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgQWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIo
UmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0
Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KKyAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFj
a2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgp
OyB9Citwcml2YXRlOgorICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlz
cGF0Y2hlcjsKK307CisKKworY2xhc3MgQWx0ZXJuYXRlTmV0d29ya0JhY2tlbmREaXNwYXRjaGVy
IDogcHVibGljIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0
dWFsIH5BbHRlcm5hdGVOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIoKSB7IH0KKyNpZiBQTEFURk9S
TShNQUMpCisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZShsb25nIGNhbGxJZCkgPSAwOwor
I2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgor
CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjIyMg
RW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4g
RmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgorLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
IlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgor
CituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisK
KyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK2NsYXNzIEFsdGVy
bmF0ZU5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjsKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworY2xhc3MgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVy
SGFuZGxlciB7CitwdWJsaWM6CisjaWYgUExBVEZPUk0oTUFDKQorICAgIHZpcnR1YWwgdm9pZCBs
b2FkUmVzb3VyY2UoRXJyb3JTdHJpbmcmKSA9IDA7CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQor
cHJvdGVjdGVkOgorICAgIHZpcnR1YWwgfk5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIo
KTsKK307CisKK2NsYXNzIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBT
dXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxO
ZXR3b3JrQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIE5ldHdv
cmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVx
dWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdl
KSBmaW5hbDsKK3ByaXZhdGU6CisjaWYgUExBVEZPUk0oTUFDKQorICAgIHZvaWQgbG9hZFJlc291
cmNlKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwor
I2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKK3B1YmxpYzoKKyAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0
ZXJuYXRlTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1f
YWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KK3ByaXZhdGU6Cisg
ICAgQWx0ZXJuYXRlTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyKiBtX2FsdGVybmF0ZURpc3BhdGNo
ZXIgeyBudWxscHRyIH07CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCitwcml2YXRlOgorICAgIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5k
RGlzcGF0Y2hlciYsIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICBOZXR3
b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50IHsgbnVsbHB0ciB9OworfTsKKwor
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0
Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0
Zm9ybS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCisK
KyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2lu
Y2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNw
YXRjaGVycy5oIgorI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENI
RVJTKQorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworTmV0d29ya0JhY2tlbmREaXNwYXRjaGVy
SGFuZGxlcjo6fk5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KKworUmVmPE5l
dHdvcmtCYWNrZW5kRGlzcGF0Y2hlcj4gTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUo
QmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBOZXR3b3JrQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyKiBhZ2VudCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBOZXR3b3Jr
QmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIsIGFnZW50KSk7Cit9CisKK05ldHdv
cmtCYWNrZW5kRGlzcGF0Y2hlcjo6TmV0d29ya0JhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNw
YXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxl
ciogYWdlbnQpCisgICAgOiBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlz
cGF0Y2hlcikKKyAgICAsIG1fYWdlbnQoYWdlbnQpCit7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKCJOZXR3b3JrIl9zLCB0aGlzKTsKK30KKwor
dm9pZCBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBj
b25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQoreworICAg
IFJlZjxOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOworCisgICAgUmVm
UHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVyczsKKyAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBh
cmFtcyJfcywgcGFyYW1ldGVycyk7CisKKyNpZiBQTEFURk9STShNQUMpCisgICAgaWYgKG1ldGhv
ZCA9PSAibG9hZFJlc291cmNlIikgeworICAgICAgICBsb2FkUmVzb3VyY2UocmVxdWVzdElkLCBX
VEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZiAvLyBQ
TEFURk9STShNQUMpCisKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVy
cm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrLiIgKyBtZXRo
b2QgKyAiJyB3YXMgbm90IGZvdW5kIik7Cit9CisKKyNpZiBQTEFURk9STShNQUMpCit2b2lkIE5l
dHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkLCBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiYmKQoreworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQorICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKKyAgICAgICAgbV9h
bHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2UocmVxdWVzdElkKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKKworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgIFJlZjxKU09OOjpPYmplY3Q+IHJl
c3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9hZ2VudC0+bG9hZFJlc291cmNl
KGVycm9yKTsKKworICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCisgICAgICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2Up
OworICAgIGVsc2UKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xF
cnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKK30K
KyNlbmRpZiAvLyBQTEFURk9STShNQUMpCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisj
IyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxl
OiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgorLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRl
c3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xh
c3MgRnJvbnRlbmRSb3V0ZXI7CisKK2NsYXNzIE5ldHdvcmtGcm9udGVuZERpc3BhdGNoZXIgewor
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIE5ldHdvcmtGcm9udGVu
ZERpc3BhdGNoZXIoRnJvbnRlbmRSb3V0ZXImIGZyb250ZW5kUm91dGVyKSA6IG1fZnJvbnRlbmRS
b3V0ZXIoZnJvbnRlbmRSb3V0ZXIpIHsgfQorI2lmIFBMQVRGT1JNKE1BQykKKyAgICB2b2lkIHJl
c291cmNlTG9hZGVkKCk7CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorcHJpdmF0ZToKKyAgICBG
cm9udGVuZFJvdXRlciYgbV9mcm9udGVuZFJvdXRlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisjaWYgUExBVEZPUk0oTUFD
KQordm9pZCBOZXR3b3JrRnJvbnRlbmREaXNwYXRjaGVyOjpyZXNvdXJjZUxvYWRlZCgpCit7Cisg
ICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OworICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIk5ldHdvcmsucmVzb3Vy
Y2VMb2FkZWQiX3MpOworCisgICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3Nh
Z2UtPnRvSlNPTlN0cmluZygpKTsKK30KKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCisKK30gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNo
ZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0u
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMu
aD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsK
KworCisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKworCisvLyBGb3J3YXJkIGRlY2xhcmF0aW9u
cy4KK25hbWVzcGFjZSBOZXR3b3JrIHsKKyNpZiBQTEFURk9STShNQUMpCitjbGFzcyBOZXR3b3Jr
RXJyb3I7CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorfSAvLyBOZXR3b3JrCisvLyBFbmQgb2Yg
Zm9yd2FyZCBkZWNsYXJhdGlvbnMuCisKKworCisKK25hbWVzcGFjZSBOZXR3b3JrIHsKKyNpZiBQ
TEFURk9STShNQUMpCitjbGFzcyBOZXR3b3JrRXJyb3IgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFz
ZSB7CitwdWJsaWM6CisgICAgZW51bSB7CisgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKKyAgICAg
ICAgTWVzc2FnZVNldCA9IDEgPDwgMCwKKyAgICAgICAgQ29kZVNldCA9IDEgPDwgMSwKKyAgICAg
ICAgQWxsRmllbGRzU2V0ID0gKE1lc3NhZ2VTZXQgfCBDb2RlU2V0KQorICAgIH07CisKKyAgICB0
ZW1wbGF0ZTxpbnQgU1RBVEU+CisgICAgY2xhc3MgQnVpbGRlciB7CisgICAgcHJpdmF0ZToKKyAg
ICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7CisKKyAgICAgICAgdGVtcGxhdGU8
aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQ
Pio+KHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcihSZWY8LypOZXR3b3JrRXJy
b3IqL0pTT046Ok9iamVjdD4mJiBvYmplY3QpCisgICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1v
dmUob2JqZWN0KSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUg
PT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CisgICAg
ICAgIH0KKyAgICAgICAgZnJpZW5kIGNsYXNzIE5ldHdvcmtFcnJvcjsKKyAgICBwdWJsaWM6CisK
KyAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1lc3NhZ2VTZXQ+JiBzZXRNZXNzYWdlKGNvbnN0IFN0
cmluZyYgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBNZXNzYWdlU2V0KSwgcHJvcGVydHlfbWVzc2FnZV9hbHJlYWR5X3NldCk7CisgICAgICAg
ICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJtZXNzYWdlIl9zLCB2YWx1ZSk7CisgICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPE1lc3NhZ2VTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgQ29kZVNldD4mIHNldENvZGUoaW50IHZhbHVlKQorICAgICAgICB7Cisg
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29kZVNldCksIHByb3BlcnR5X2Nv
ZGVfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldEludGVnZXIoImNvZGUi
X3MsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29kZVNldD4oKTsKKyAg
ICAgICAgfQorCisgICAgICAgIFJlZjxOZXR3b3JrRXJyb3I+IHJlbGVhc2UoKQorICAgICAgICB7
CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3Vs
dF9pc19ub3RfcmVhZHkpOworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKE5ldHdv
cmtFcnJvcikgPT0gc2l6ZW9mKEpTT046Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsKKworICAgICAg
ICAgICAgUmVmPEpTT046Ok9iamVjdD4ganNvblJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25O
dWxsKCk7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nh
c3Q8UmVmPE5ldHdvcmtFcnJvcj4qPigmanNvblJlc3VsdCkpOworICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvKgorICAgICAqIFN5bnRoZXRpYyBj
b25zdHJ1Y3RvcjoKKyAgICAgKiBSZWY8TmV0d29ya0Vycm9yPiByZXN1bHQgPSBOZXR3b3JrRXJy
b3I6OmNyZWF0ZSgpCisgICAgICogICAgIC5zZXRNZXNzYWdlKC4uLikKKyAgICAgKiAgICAgLnNl
dENvZGUoLi4uKQorICAgICAqICAgICAucmVsZWFzZSgpOworICAgICAqLworICAgIHN0YXRpYyBC
dWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxk
ZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOworICAgIH0KK307CisKKyNl
bmRpZiAvLyBQTEFURk9STShNQUMpCit9IC8vIE5ldHdvcmsKKworCisKK30gLy8gbmFtZXNwYWNl
IFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xPYmplY3RzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMu
Y3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1t
YWMtcGxhdGZvcm0uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5o
IgorCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKwor
CisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgor
CisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisKKyMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2luY2x1ZGUgPHd0
Zi9SZXRhaW5QdHIuaD4KKworQHByb3RvY29sIFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5IYW5k
bGVyOworCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCitjbGFzcyBPYmpDSW5zcGVjdG9yTmV0
d29ya0JhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZU5ldHdvcmtCYWNr
ZW5kRGlzcGF0Y2hlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6Cisg
ICAgT2JqQ0luc3BlY3Rvck5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xO
ZXR3b3JrRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQor
I2lmIFBMQVRGT1JNKE1BQykKKyAgICB2b2lkIGxvYWRSZXNvdXJjZShsb25nIHJlcXVlc3RJZCkg
ZmluYWw7CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorcHJpdmF0ZToKKyAgICBSZXRhaW5QdHI8
aWQ8VGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFj
a2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmRE
aXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRp
b25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xC
YWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgi
CisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW5jbHVkZSA8d3Rm
L0pTT05WYWx1ZXMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3ZvaWQgT2JqQ0luc3Bl
Y3Rvck5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElk
KQoreworICAgIGlmICghI2lmIFBMQVRGT1JNKE1BQykKK1ttX2RlbGVnYXRlIHJlc3BvbmRzVG9T
ZWxlY3RvcjpAc2VsZWN0b3IobG9hZFJlc291cmNlV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0Nh
bGxiYWNrOildCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKSkgeworICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNo
ZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmsubG9hZFJlc291cmNlJyB3YXMgbm90IGZvdW5k
Il9zKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3Ry
aW5nICplcnJvcikgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2Nv
bEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7
CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAg
fTsKKworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeeworICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgfTsKKyNlbmRpZiAvLyBQTEFURk9STShNQUMp
CisjaWYgUExBVEZPUk0oTUFDKQorCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorI2lmIFBMQVRG
T1JNKE1BQykKKyAgICBbbV9kZWxlZ2F0ZSBsb2FkUmVzb3VyY2VXaXRoRXJyb3JDYWxsYmFjazpl
cnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOworI2VuZGlmIC8v
IFBMQVRGT1JNKE1BQykKK30KKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rl
c3RQcm90b2NvbC5oPgorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkK
K0BpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0CitAcHJvcGVy
dHkgKG5vbmF0b21pYywgcmV0YWluLCBzZXR0ZXI9c2V0TmV0d29ya0hhbmRsZXI6KSBpZDxUZXN0
UHJvdG9jb2xOZXR3b3JrRG9tYWluSGFuZGxlcj4gbmV0d29ya0hhbmRsZXI7CitAcHJvcGVydHkg
KG5vbmF0b21pYywgcmVhZG9ubHkpIFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5FdmVudERpc3Bh
dGNoZXIgKm5ldHdvcmtFdmVudERpc3BhdGNoZXI7CitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24ubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZp
bml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIK
KworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2Nv
bEJhY2tlbmREaXNwYXRjaGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRl
RGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxl
SW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3Rv
cjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KK3sKKyAgICBB
dWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworICAgIGlkPFRlc3RQ
cm90b2NvbE5ldHdvcmtEb21haW5IYW5kbGVyPiBfbmV0d29ya0hhbmRsZXI7CisgICAgVGVzdFBy
b3RvY29sTmV0d29ya0RvbWFpbkV2ZW50RGlzcGF0Y2hlciAqX25ldHdvcmtFdmVudERpc3BhdGNo
ZXI7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxl
SW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5p
dF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIEFTU0VSVChjb250
cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAgcmV0dXJuIHNlbGY7
Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIFtfbmV0d29ya0hhbmRsZXIgcmVsZWFzZV07
CisgICAgW19uZXR3b3JrRXZlbnREaXNwYXRjaGVyIHJlbGVhc2VdOworICAgIFtzdXBlciBkZWFs
bG9jXTsKK30KKworLSAodm9pZClzZXROZXR3b3JrSGFuZGxlcjooaWQ8VGVzdFByb3RvY29sTmV0
d29ya0RvbWFpbkhhbmRsZXI+KWhhbmRsZXIKK3sKKyAgICBpZiAoaGFuZGxlciA9PSBfbmV0d29y
a0hhbmRsZXIpCisgICAgICAgIHJldHVybjsKKworICAgIFtfbmV0d29ya0hhbmRsZXIgcmVsZWFz
ZV07CisgICAgX25ldHdvcmtIYW5kbGVyID0gW2hhbmRsZXIgcmV0YWluXTsKKworICAgIGF1dG8g
YWx0ZXJuYXRlRGlzcGF0Y2hlciA9IG1ha2VVbmlxdWU8T2JqQ0luc3BlY3Rvck5ldHdvcmtCYWNr
ZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7CisgICAgYXV0byBhbHRlcm5hdGVBZ2VudCA9IG1ha2VV
bmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8TmV0d29ya0JhY2tlbmREaXNwYXRjaGVy
LCBBbHRlcm5hdGVOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI+PigiTmV0d29yayJfcywgKl9jb250
cm9sbGVyLCBXVEZNb3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIpKTsKKyAgICBfY29udHJvbGxlci0+
YXBwZW5kRXh0cmFBZ2VudChXVEZNb3ZlKGFsdGVybmF0ZUFnZW50KSk7Cit9CisKKy0gKGlkPFRl
c3RQcm90b2NvbE5ldHdvcmtEb21haW5IYW5kbGVyPiluZXR3b3JrSGFuZGxlcgoreworICAgIHJl
dHVybiBfbmV0d29ya0hhbmRsZXI7Cit9CisKKy0gKFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5F
dmVudERpc3BhdGNoZXIgKiluZXR3b3JrRXZlbnREaXNwYXRjaGVyCit7CisgICAgaWYgKCFfbmV0
d29ya0V2ZW50RGlzcGF0Y2hlcikKKyAgICAgICAgX25ldHdvcmtFdmVudERpc3BhdGNoZXIgPSBb
W1Rlc3RQcm90b2NvbE5ldHdvcmtEb21haW5FdmVudERpc3BhdGNoZXIgYWxsb2NdIGluaXRXaXRo
Q29udHJvbGxlcjpfY29udHJvbGxlcl07CisgICAgcmV0dXJuIF9uZXR3b3JrRXZlbnREaXNwYXRj
aGVyOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0
aW9uLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1t
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMt
cGxhdGZvcm0uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5n
IG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xOZXR3
b3JrRG9tYWluRXZlbnREaXNwYXRjaGVyCit7CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250
cm9sbGVyKiBfY29udHJvbGxlcjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJv
bGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCit7CisgICAg
c2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7
CisgICAgQVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsK
KyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClyZXNvdXJjZUxvYWRlZAoreworICAgIGNv
bnN0IEZyb250ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29udHJvbGxlci0+ZnJvbnRlbmRSb3V0ZXIo
KTsKKworICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJOZXR3b3Jr
LnJlc291cmNlTG9hZGVkIl9zKTsKKyAgICByb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50
b0pTT05TdHJpbmcoKSk7Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bEV2ZW50RGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxh
dGZvcm0uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisj
aW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKworI2ltcG9ydCA8V2ViSW5zcGVjdG9y
L1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgorCisKKyNpZiBQTEFURk9STShNQUMpCitAY2xhc3Mg
VGVzdFByb3RvY29sTmV0d29ya0Vycm9yOworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKKworCisK
KworI2lmIFBMQVRGT1JNKE1BQykKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0
IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xOZXR3b3JrRXJyb3IgOiBSV0lQcm90b2NvbEpT
T05PYmplY3QKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxO
U1N0cmluZyAqLCBpZD4gKilwYXlsb2FkOworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9j
b2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7CistIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZTooaW50KWNvZGU7
CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKm1l
c3NhZ2U7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQg
Y29kZTsKK0BlbmQKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCisKK0Bwcm90b2NvbCBUZXN0UHJv
dG9jb2xOZXR3b3JrRG9tYWluSGFuZGxlciA8TlNPYmplY3Q+CitAb3B0aW9uYWwKKyNpZiBQTEFU
Rk9STShNQUMpCistICh2b2lkKWxvYWRSZXNvdXJjZVdpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4p
KE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXiko
dm9pZCkpc3VjY2Vzc0NhbGxiYWNrOworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKK0BlbmQKKwor
X19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQ
cm90b2NvbE5ldHdvcmtEb21haW5FdmVudERpc3BhdGNoZXIgOiBOU09iamVjdAorLSAodm9pZCly
ZXNvdXJjZUxvYWRlZDsKK0BlbmQKKworCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9j
b2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5q
c29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUu
aCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxl
ci5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKworQGludGVyZmFjZSBUZXN0UHJvdG9j
b2xOZXR3b3JrRG9tYWluRXZlbnREaXNwYXRjaGVyIChQcml2YXRlKQorLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoQ29udHJvbGxlcjooSW5zcGVjdG9yOjpBdWdtZW50YWJsZUluc3BlY3RvckNvbnRy
b2xsZXIqKWNvbnRyb2xsZXI7CitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJ
bnRlcm5hbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMu
aAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFj
LXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJv
dG9jb2xBcnJheUNvbnZlcnNpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+CitPcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Q
cm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKKworCisKK30gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5o
CisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9y
bS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBv
cnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9j
b2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKKyNpbXBvcnQgPFdlYklu
c3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisKK3VzaW5nIG5hbWVzcGFj
ZSBJbnNwZWN0b3I7CisKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChO
ZXR3b3JrRG9tYWluKQorCisjaWYgUExBVEZPUk0oTUFDKQorKyAodm9pZClfcGFyc2VOZXR3b3Jr
RXJyb3I6KFRlc3RQcm90b2NvbE5ldHdvcmtFcnJvciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDoo
aWQpcGF5bG9hZDsKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCisKK0BlbmQKKworQGltcGxlbWVu
dGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoTmV0d29ya0RvbWFpbikKKworI2lm
IFBMQVRGT1JNKE1BQykKKysgKHZvaWQpX3BhcnNlTmV0d29ya0Vycm9yOihUZXN0UHJvdG9jb2xO
ZXR3b3JrRXJyb3IgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBU
SFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3Nd
KTsKKyAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbE5ldHdvcmtFcnJvciBhbGxvY10gaW5p
dFdpdGhQYXlsb2FkOnBheWxvYWRdOworfQorI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKKworQGVu
ZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisKKyMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29s
SW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisj
aW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorI2lt
cG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3Vz
aW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworI2lmIFBMQVRGT1JNKE1BQykKK0BpbXBsZW1l
bnRhdGlvbiBUZXN0UHJvdG9jb2xOZXR3b3JrRXJyb3IKKworLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoUGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9h
ZAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmls
OworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0Ai
bWVzc2FnZSJdLCBAIm1lc3NhZ2UiKTsKKyAgICBzZWxmLm1lc3NhZ2UgPSBwYXlsb2FkW0AibWVz
c2FnZSJdOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXls
b2FkW0AiY29kZSJdLCBAImNvZGUiKTsKKyAgICBzZWxmLmNvZGUgPSBbcGF5bG9hZFtAImNvZGUi
XSBpbnRlZ2VyVmFsdWVdOworCisgICAgcmV0dXJuIHNlbGY7Cit9CistIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopb2JqZWN0Cit7
CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEpTT05PYmplY3Q6W29iamVjdCB0b0pT
T05PYmplY3RdLmdldCgpXSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICByZXR1cm4gc2Vs
ZjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNz
YWdlIGNvZGU6KGludCljb2RlCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisg
ICAgICAgIHJldHVybiBuaWw7CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BS
T1BFUlRZKG1lc3NhZ2UsIEAibWVzc2FnZSIpOworCisgICAgc2VsZi5tZXNzYWdlID0gbWVzc2Fn
ZTsKKyAgICBzZWxmLmNvZGUgPSBjb2RlOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZv
aWQpc2V0TWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlCit7CisgICAgW3N1cGVyIHNldFN0cmlu
ZzptZXNzYWdlIGZvcktleTpAIm1lc3NhZ2UiXTsKK30KKworLSAoTlNTdHJpbmcgKiltZXNzYWdl
Cit7CisgICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJtZXNzYWdlIl07Cit9CisKKy0g
KHZvaWQpc2V0Q29kZTooaW50KWNvZGUKK3sKKyAgICBbc3VwZXIgc2V0SW50ZWdlcjpjb2RlIGZv
cktleTpAImNvZGUiXTsKK30KKworLSAoaW50KWNvZGUKK3sKKyAgICByZXR1cm4gW3N1cGVyIGlu
dGVnZXJGb3JLZXk6QCJjb2RlIl07Cit9CisKK0BlbmQKKyNlbmRpZiAvLyBQTEFURk9STShNQUMp
CisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RvbWFp
bi1kZWJ1Z2dhYmxlVHlwZXMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29u
LXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNjRlYzViOTA4
MTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uLXJlc3VsdApA
QCAtMCwwICsxLDEwMzAgQEAKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFu
ZHMuanMKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJs
ZVR5cGVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
Ly8gRG9tYWluCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJEb21haW4iLCBudWxs
KTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJEb21haW4uQ29tbWFuZCIsIG51
bGwsIFtdLCBbXSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnQoIkRvbWFpbi5FdmVu
dCIsIG51bGwsIFtdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW5EaXNwYXRjaGVy
ID0gSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRpc3BhdGNoZXIuYmluZChJbnNwZWN0b3JCYWNr
ZW5kLCAiRG9tYWluIik7CitJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJEb21haW4i
LCBbIndlYi1wYWdlIl0pOworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMu
anMKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMu
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21h
IG9uY2UKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCisj
aW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFz
cyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdm9pZCBzZXRCYWNr
ZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBt
X2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQorICAgIEJhY2tlbmRE
aXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERp
c3BhdGNoZXIuZ2V0KCk7IH0KK3ByaXZhdGU6CisgICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVy
PiBtX2JhY2tlbmREaXNwYXRjaGVyOworfTsKKworCitjbGFzcyBBbHRlcm5hdGVEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJs
aWM6CisgICAgdmlydHVhbCB+QWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIoKSB7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChsb25nIGNhbGxJZCkgPSAwOworfTsKKworfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKKyMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3R5cGVkZWYgU3RyaW5nIEVy
cm9yU3RyaW5nOworCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
CitjbGFzcyBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjsKKyNlbmRpZiAvLyBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworY2xhc3MgRG9tYWluQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChF
cnJvclN0cmluZyYpID0gMDsKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5Eb21haW5CYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIoKTsKK307CisKK2NsYXNzIERvbWFpbkJhY2tlbmREaXNwYXRjaGVy
IGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUmVmPERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERp
c3BhdGNoZXImLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICB2b2lkIGRp
c3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9i
amVjdD4mJiBtZXNzYWdlKSBmaW5hbDsKK3ByaXZhdGU6CisgICAgdm9pZCBDb21tYW5kKGxvbmcg
cmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOworI2lmIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorcHVibGljOgorICAgIHZvaWQgc2V0
QWx0ZXJuYXRlRGlzcGF0Y2hlcihBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciogYWx0
ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNw
YXRjaGVyOyB9Citwcml2YXRlOgorICAgIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVy
KiBtX2FsdGVybmF0ZURpc3BhdGNoZXIgeyBudWxscHRyIH07CisjZW5kaWYgLy8gRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCitwcml2YXRlOgorICAgIERvbWFpbkJhY2tl
bmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyKik7CisgICAgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50IHsg
bnVsbHB0ciB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6
IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmRE
aXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4t
ZGVidWdnYWJsZVR5cGVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0
Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91
dGVyLmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJE
ZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUo
SU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyNpbmNsdWRlICJUZXN0QWx0ZXJuYXRl
QmFja2VuZERpc3BhdGNoZXJzLmgiCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitEb21haW5CYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXI6On5Eb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0K
KworUmVmPERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6
Y3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgRG9tYWluQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBE
b21haW5CYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKK30KKwor
RG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkRvbWFpbkJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmRE
aXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyKiBhZ2VudCkKKyAgICA6IFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmRE
aXNwYXRjaGVyKQorICAgICwgbV9hZ2VudChhZ2VudCkKK3sKKyAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oIkRvbWFpbiJfcywgdGhpcyk7Cit9CisK
K3ZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBj
b25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQoreworICAg
IFJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CisKKyAgICBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOworICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFy
YW1zIl9zLCBwYXJhbWV0ZXJzKTsKKworICAgIGlmIChtZXRob2QgPT0gIkNvbW1hbmQiKSB7Cisg
ICAgICAgIENvbW1hbmQocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29s
RXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi4iICsgbWV0
aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOworfQorCit2b2lkIERvbWFpbkJhY2tlbmREaXNwYXRj
aGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQorewor
I2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorICAgIGlmIChtX2Fs
dGVybmF0ZURpc3BhdGNoZXIpIHsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5Db21t
YW5kKHJlcXVlc3RJZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYgLy8gRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyAgICBFcnJvclN0cmluZyBlcnJv
cjsKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OworICAgIG1fYWdlbnQtPkNvbW1hbmQoZXJyb3IpOworCisgICAgaWYgKCFlcnJvci5sZW5ndGgo
KSkKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwg
V1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7CisgICAgZWxzZQorICAgICAgICBtX2JhY2tlbmREaXNw
YXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJv
ciwgV1RGTW92ZShlcnJvcikpOworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMj
IEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTog
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bE9iamVjdHMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgRnJvbnRl
bmRSb3V0ZXI7CisKK2NsYXNzIERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlciB7CisgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVy
KEZyb250ZW5kUm91dGVyJiBmcm9udGVuZFJvdXRlcikgOiBtX2Zyb250ZW5kUm91dGVyKGZyb250
ZW5kUm91dGVyKSB7IH0KKyAgICB2b2lkIEV2ZW50KCk7Citwcml2YXRlOgorICAgIEZyb250ZW5k
Um91dGVyJiBtX2Zyb250ZW5kUm91dGVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
CisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZp
bGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgor
CituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordm9pZCBEb21haW5Gcm9udGVuZERpc3BhdGNoZXI6
OkV2ZW50KCkKK3sKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9i
amVjdDo6Y3JlYXRlKCk7CisgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAi
RG9tYWluLkV2ZW50Il9zKTsKKworICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25N
ZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgor
CisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25z
Lmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFByb3RvY29sIHsK
KworCisKKworCisKKworCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Igewor
CituYW1lc3BhY2UgUHJvdG9jb2wgeworCisKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKwor
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2Jq
ZWN0cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVy
cy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLWRlYnVnZ2FibGVU
eXBlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hl
cnMuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKK0Bwcm90b2NvbCBUZXN0UHJvdG9j
b2xEb21haW5Eb21haW5IYW5kbGVyOworCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCitjbGFz
cyBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgQWx0
ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOworcHVibGljOgorICAgIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihp
ZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdhdGUg
PSBoYW5kbGVyOyB9CisgICAgdm9pZCBDb21tYW5kKGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKK3By
aXZhdGU6CisgICAgUmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+
PiBtX2RlbGVnYXRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbgorLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSAiVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIK
KyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwor
dm9pZCBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9uZyBy
ZXF1ZXN0SWQpCit7CisgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNl
bGVjdG9yKENvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsKKyAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQs
IEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uQ29tbWFuZCcgd2Fz
IG5vdCBmb3VuZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5n
RXJyb3JzKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZCBlcnJvckNhbGxiYWNr
ID0gXihOU1N0cmluZyAqZXJyb3IpIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVw
b3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJv
ciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9y
cygpOworICAgIH07CisKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeeworICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpLCBmYWxzZSk7CisgICAgfTsKKworICAgIFttX2RlbGVnYXRlIENvbW1hbmRXaXRoRXJy
b3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2td
OworfQorCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sQ29uZmlndXJhdGlvbi5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9t
YWluLWRlYnVnZ2FibGVUeXBlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KKworX19h
dHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90
b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAorQHByb3BlcnR5IChub25hdG9taWMsIHJldGFp
biwgc2V0dGVyPXNldERvbWFpbkhhbmRsZXI6KSBpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5I
YW5kbGVyPiBkb21haW5IYW5kbGVyOworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBU
ZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKmRvbWFpbkV2ZW50RGlzcGF0
Y2hlcjsKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24u
aAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0
UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFs
LmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+CisjaW1wb3J0IDxK
YXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgor
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+CisK
K3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9j
b2xDb25maWd1cmF0aW9uCit7CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBf
Y29udHJvbGxlcjsKKyAgICBpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiBfZG9t
YWluSGFuZGxlcjsKKyAgICBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIg
Kl9kb21haW5FdmVudERpc3BhdGNoZXI7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENv
bnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgorewor
ICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4g
bmlsOworICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xs
ZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIFtfZG9t
YWluSGFuZGxlciByZWxlYXNlXTsKKyAgICBbX2RvbWFpbkV2ZW50RGlzcGF0Y2hlciByZWxlYXNl
XTsKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0gKHZvaWQpc2V0RG9tYWluSGFuZGxlcjoo
aWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4paGFuZGxlcgoreworICAgIGlmICho
YW5kbGVyID09IF9kb21haW5IYW5kbGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBbX2RvbWFp
bkhhbmRsZXIgcmVsZWFzZV07CisgICAgX2RvbWFpbkhhbmRsZXIgPSBbaGFuZGxlciByZXRhaW5d
OworCisgICAgYXV0byBhbHRlcm5hdGVEaXNwYXRjaGVyID0gbWFrZVVuaXF1ZTxPYmpDSW5zcGVj
dG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXI+KGhhbmRsZXIpOworICAgIGF1dG8gYWx0ZXJuYXRl
QWdlbnQgPSBtYWtlVW5pcXVlPEFsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50PERvbWFpbkJhY2tl
bmREaXNwYXRjaGVyLCBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4+KCJEb21haW4i
X3MsICpfY29udHJvbGxlciwgV1RGTW92ZShhbHRlcm5hdGVEaXNwYXRjaGVyKSk7CisgICAgX2Nv
bnRyb2xsZXItPmFwcGVuZEV4dHJhQWdlbnQoV1RGTW92ZShhbHRlcm5hdGVBZ2VudCkpOworfQor
CistIChpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPilkb21haW5IYW5kbGVyCit7
CisgICAgcmV0dXJuIF9kb21haW5IYW5kbGVyOworfQorCistIChUZXN0UHJvdG9jb2xEb21haW5E
b21haW5FdmVudERpc3BhdGNoZXIgKilkb21haW5FdmVudERpc3BhdGNoZXIKK3sKKyAgICBpZiAo
IV9kb21haW5FdmVudERpc3BhdGNoZXIpCisgICAgICAgIF9kb21haW5FdmVudERpc3BhdGNoZXIg
PSBbW1Rlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciBhbGxvY10gaW5pdFdp
dGhDb250cm9sbGVyOl9jb250cm9sbGVyXTsKKyAgICByZXR1cm4gX2RvbWFpbkV2ZW50RGlzcGF0
Y2hlcjsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJh
dGlvbi5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5t
bQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlw
ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1w
b3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVz
cGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xEb21haW5Eb21h
aW5FdmVudERpc3BhdGNoZXIKK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIq
IF9jb250cm9sbGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihB
dWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0g
W3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBB
U1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJl
dHVybiBzZWxmOworfQorCistICh2b2lkKUV2ZW50Cit7CisgICAgY29uc3QgRnJvbnRlbmRSb3V0
ZXImIHJvdXRlciA9IF9jb250cm9sbGVyLT5mcm9udGVuZFJvdXRlcigpOworCisgICAgUmVmPEpT
T046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGpz
b25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7CisgICAg
cm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworfQorCitAZW5k
CisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisKKyMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4K
KworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgorCisKKwor
CisKKworCisKK0Bwcm90b2NvbCBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyIDxOU09i
amVjdD4KK0BvcHRpb25hbAorLSAodm9pZClDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQo
XikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZChe
KSh2b2lkKSlzdWNjZXNzQ2FsbGJhY2s7CitAZW5kCisKK19fYXR0cmlidXRlX18oKHZpc2liaWxp
dHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVu
dERpc3BhdGNoZXIgOiBOU09iamVjdAorLSAodm9pZClFdmVudDsKK0BlbmQKKworCisjaW1wb3J0
IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+CisK
KyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbEludGVybmFsLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4t
ZGVidWdnYWJsZVR5cGVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xK
U09OT2JqZWN0UHJpdmF0ZS5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJ
bnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCitAaW50
ZXJmYWNlIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAoUHJpdmF0ZSkK
Ky0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEluc3BlY3Rvcjo6QXVnbWVudGFi
bGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyOworQGVuZAorCisKKyMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21h
aW4tZGVidWdnYWJsZVR5cGVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0
b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Ig
eworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+CitPcHRpb25hbDxPYmpDRW51bVR5
cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKKworfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMu
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0
ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29s
LmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCisjaW1wb3J0IDxXZWJJbnNw
ZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorCit1c2luZyBuYW1lc3BhY2Ug
SW5zcGVjdG9yOworCisKKworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRl
c3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucy5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZh
dGUuaD4KKyNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVl
cy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisKKyMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1k
b21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hp
bmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tcmVzdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwLi5lY2M3MjFjNTI4ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW4t
dGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1yZXN1bHQKQEAg
LTAsMCArMSwxMDMwIEBACisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRz
LmpzCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGUt
bWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworLy8gRG9tYWluCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lz
dGVyRG9tYWluKCJEb21haW4iLCBudWxsKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21t
YW5kKCJEb21haW4uQ29tbWFuZCIsIFsicGFnZSIsICJ3b3JrZXIiXSwgW10sIFtdKTsKK0luc3Bl
Y3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudCgiRG9tYWluLkV2ZW50IiwgbnVsbCwgW10pOworSW5z
cGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbkRpc3BhdGNoZXIgPSBJbnNwZWN0b3JCYWNrZW5k
LnJlZ2lzdGVyRGlzcGF0Y2hlci5iaW5kKEluc3BlY3RvckJhY2tlbmQsICJEb21haW4iKTsKK0lu
c3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkRvbWFpbiIsIFsicGFnZSJdKTsKKyMjIyBF
bmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCisKKyMjIyBCZWdpbiBGaWxlOiBU
ZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5
cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJh
Z21hIG9uY2UKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQor
CisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitj
bGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdm9pZCBzZXRC
YWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikg
eyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQorICAgIEJhY2tl
bmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2Vu
ZERpc3BhdGNoZXIuZ2V0KCk7IH0KK3ByaXZhdGU6CisgICAgUmVmUHRyPEJhY2tlbmREaXNwYXRj
aGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOworfTsKKworCitjbGFzcyBBbHRlcm5hdGVEb21haW5C
YWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Citw
dWJsaWM6CisgICAgdmlydHVhbCB+QWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIoKSB7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChsb25nIGNhbGxJZCkgPSAwOworfTsKKworfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVS
TkFURV9ESVNQQVRDSEVSUykKKyMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNw
YXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZS1tYXRjaGlu
Zy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9i
amVjdHMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5z
cGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKKyNpZiBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK2NsYXNzIEFsdGVybmF0ZURvbWFpbkJhY2tl
bmREaXNwYXRjaGVyOworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQorCitjbGFzcyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgeworcHVibGlj
OgorICAgIHZpcnR1YWwgdm9pZCBDb21tYW5kKEVycm9yU3RyaW5nJikgPSAwOworcHJvdGVjdGVk
OgorICAgIHZpcnR1YWwgfkRvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOworfTsKKwor
Y2xhc3MgRG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFs
QmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8RG9tYWluQmFja2Vu
ZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIERvbWFpbkJhY2tlbmREaXNw
YXRjaGVySGFuZGxlciopOworICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0
IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOworcHJp
dmF0ZToKKyAgICB2b2lkIENvbW1hbmQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+JiYgcGFyYW1ldGVycyk7CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCitwdWJsaWM6CisgICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0
ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJu
YXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KK3ByaXZhdGU6CisgICAgQWx0
ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIqIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciB7IG51
bGxwdHIgfTsKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKK3ByaXZhdGU6CisgICAgRG9tYWluQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNo
ZXImLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICBEb21haW5CYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQgeyBudWxscHRyIH07Cit9OworCit9IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisK
KyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1k
ZWJ1Z2dhYmxlVHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNo
ZXJzLmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRl
ci5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVz
dHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCisjaWYgRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVycy5oIgorI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworRG9tYWluQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyOjp+RG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9CisK
K1JlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmNy
ZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIERvbWFpbkJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlciogYWdlbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRG9t
YWluQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIsIGFnZW50KSk7Cit9CisKK0Rv
bWFpbkJhY2tlbmREaXNwYXRjaGVyOjpEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlz
cGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxl
ciogYWdlbnQpCisgICAgOiBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlz
cGF0Y2hlcikKKyAgICAsIG1fYWdlbnQoYWdlbnQpCit7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKCJEb21haW4iX3MsIHRoaXMpOworfQorCit2
b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29u
c3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKK3sKKyAgICBS
ZWY8RG9tYWluQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOworCisgICAgUmVmUHRy
PEpTT046Ok9iamVjdD4gcGFyYW1ldGVyczsKKyAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFt
cyJfcywgcGFyYW1ldGVycyk7CisKKyAgICBpZiAobWV0aG9kID09ICJDb21tYW5kIikgeworICAg
ICAgICBDb21tYW5kKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVy
cm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uIiArIG1ldGhv
ZCArICInIHdhcyBub3QgZm91bmQiKTsKK30KKwordm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hl
cjo6Q29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKK3sKKyNp
ZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyAgICBpZiAobV9hbHRl
cm5hdGVEaXNwYXRjaGVyKSB7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+Q29tbWFu
ZChyZXF1ZXN0SWQpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmIC8vIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCisgICAgRXJyb3JTdHJpbmcgZXJyb3I7
CisgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
KyAgICBtX2FnZW50LT5Db21tYW5kKGVycm9yKTsKKworICAgIGlmICghZXJyb3IubGVuZ3RoKCkp
CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdU
Rk1vdmUocmVzdWx0KSwgZmFsc2UpOworICAgIGVsc2UKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3Is
IFdURk1vdmUoZXJyb3IpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBF
bmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRl
c3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBkb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZh
bHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5z
cGVjdG9yIHsKKworY2xhc3MgRnJvbnRlbmRSb3V0ZXI7CisKK2NsYXNzIERvbWFpbkZyb250ZW5k
RGlzcGF0Y2hlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAg
RG9tYWluRnJvbnRlbmREaXNwYXRjaGVyKEZyb250ZW5kUm91dGVyJiBmcm9udGVuZFJvdXRlcikg
OiBtX2Zyb250ZW5kUm91dGVyKGZyb250ZW5kUm91dGVyKSB7IH0KKyAgICB2b2lkIEV2ZW50KCk7
Citwcml2YXRlOgorICAgIEZyb250ZW5kUm91dGVyJiBtX2Zyb250ZW5kUm91dGVyOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3Bh
dGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlLW1hdGNo
aW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0RnJv
bnRlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
RnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVz
cGFjZSBJbnNwZWN0b3IgeworCit2b2lkIERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcjo6RXZlbnQo
KQoreworICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4u
RXZlbnQiX3MpOworCisgICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2Ut
PnRvSlNPTlN0cmluZygpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBF
bmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xPYmplY3RzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBk
b21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KKyNpbmNs
dWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK25h
bWVzcGFjZSBQcm90b2NvbCB7CisKKworCisKKworCisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90
b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sT2JqZWN0cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlLW1hdGNo
aW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0UHJv
dG9jb2xPYmplY3RzLmgiCisKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCituYW1lc3BhY2Ug
UHJvdG9jb2wgeworCisKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKwor
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9t
YWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVycy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworQHByb3Rv
Y29sIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI7CisKK25hbWVzcGFjZSBJbnNwZWN0
b3IgeworCisKK2NsYXNzIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5h
bCA6IHB1YmxpYyBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciB7CisgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tl
bmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IGhhbmRsZXIp
IHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KKyAgICB2b2lkIENvbW1hbmQobG9uZyByZXF1ZXN0
SWQpIGZpbmFsOworcHJpdmF0ZToKKyAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sRG9tYWlu
RG9tYWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisj
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9t
YWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNr
ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisj
aW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW5jbHVkZSA8d3RmL0pT
T05WYWx1ZXMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3ZvaWQgT2JqQ0luc3BlY3Rv
ckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElkKQoreworICAg
IGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihDb21tYW5kV2l0
aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7CisgICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hl
cjo6TWV0aG9kTm90Rm91bmQsICInRG9tYWluLkNvbW1hbmQnIHdhcyBub3QgZm91bmQiX3MpOwor
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVy
cm9yKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3Io
cmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICB9OworCisg
ICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2UpOwor
ICAgIH07CisKKyAgICBbbV9kZWxlZ2F0ZSBDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JD
YWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKK30KKworCit9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlz
cGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24u
aAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlLW1h
dGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wu
aD4KKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNl
IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAorQHByb3BlcnR5IChub25hdG9t
aWMsIHJldGFpbiwgc2V0dGVyPXNldERvbWFpbkhhbmRsZXI6KSBpZDxUZXN0UHJvdG9jb2xEb21h
aW5Eb21haW5IYW5kbGVyPiBkb21haW5IYW5kbGVyOworQHByb3BlcnR5IChub25hdG9taWMsIHJl
YWRvbmx5KSBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKmRvbWFpbkV2
ZW50RGlzcGF0Y2hlcjsKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZp
Z3VyYXRpb24uaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5t
bQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlLW1h
dGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24u
aCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbXBvcnQgIlRlc3RQcm90
b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJu
YXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRh
YmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3Bl
Y3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KK3sKKyAg
ICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworICAgIGlkPFRl
c3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IF9kb21haW5IYW5kbGVyOworICAgIFRlc3RQ
cm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqX2RvbWFpbkV2ZW50RGlzcGF0Y2hl
cjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJ
bnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0
XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNvbnRy
b2xsZXIpOworICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKKyAgICByZXR1cm4gc2VsZjsK
K30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgW19kb21haW5IYW5kbGVyIHJlbGVhc2VdOwor
ICAgIFtfZG9tYWluRXZlbnREaXNwYXRjaGVyIHJlbGVhc2VdOworICAgIFtzdXBlciBkZWFsbG9j
XTsKK30KKworLSAodm9pZClzZXREb21haW5IYW5kbGVyOihpZDxUZXN0UHJvdG9jb2xEb21haW5E
b21haW5IYW5kbGVyPiloYW5kbGVyCit7CisgICAgaWYgKGhhbmRsZXIgPT0gX2RvbWFpbkhhbmRs
ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIFtfZG9tYWluSGFuZGxlciByZWxlYXNlXTsKKyAg
ICBfZG9tYWluSGFuZGxlciA9IFtoYW5kbGVyIHJldGFpbl07CisKKyAgICBhdXRvIGFsdGVybmF0
ZURpc3BhdGNoZXIgPSBtYWtlVW5pcXVlPE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0
Y2hlcj4oaGFuZGxlcik7CisgICAgYXV0byBhbHRlcm5hdGVBZ2VudCA9IG1ha2VVbmlxdWU8QWx0
ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8RG9tYWluQmFja2VuZERpc3BhdGNoZXIsIEFsdGVybmF0
ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyPj4oIkRvbWFpbiJfcywgKl9jb250cm9sbGVyLCBXVEZN
b3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIpKTsKKyAgICBfY29udHJvbGxlci0+YXBwZW5kRXh0cmFB
Z2VudChXVEZNb3ZlKGFsdGVybmF0ZUFnZW50KSk7Cit9CisKKy0gKGlkPFRlc3RQcm90b2NvbERv
bWFpbkRvbWFpbkhhbmRsZXI+KWRvbWFpbkhhbmRsZXIKK3sKKyAgICByZXR1cm4gX2RvbWFpbkhh
bmRsZXI7Cit9CisKKy0gKFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAq
KWRvbWFpbkV2ZW50RGlzcGF0Y2hlcgoreworICAgIGlmICghX2RvbWFpbkV2ZW50RGlzcGF0Y2hl
cikKKyAgICAgICAgX2RvbWFpbkV2ZW50RGlzcGF0Y2hlciA9IFtbVGVzdFByb3RvY29sRG9tYWlu
RG9tYWluRXZlbnREaXNwYXRjaGVyIGFsbG9jXSBpbml0V2l0aENvbnRyb2xsZXI6X2NvbnRyb2xs
ZXJdOworICAgIHJldHVybiBfZG9tYWluRXZlbnREaXNwYXRjaGVyOworfQorCitAZW5kCisKKwor
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2Fi
bGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBu
YW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sRG9tYWlu
RG9tYWluRXZlbnREaXNwYXRjaGVyCit7CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9s
bGVyKiBfY29udHJvbGxlcjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxl
cjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCit7CisgICAgc2Vs
ZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7Cisg
ICAgQVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKKyAg
ICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClFdmVudAoreworICAgIGNvbnN0IEZyb250ZW5k
Um91dGVyJiByb3V0ZXIgPSBfY29udHJvbGxlci0+ZnJvbnRlbmRSb3V0ZXIoKTsKKworICAgIFJl
ZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAg
ICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOwor
ICAgIHJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKK30KKwor
QGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQor
CisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5
cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1w
b3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JX
SVByb3RvY29sSlNPTk9iamVjdC5oPgorCisKKworCisKKworCisKK0Bwcm90b2NvbCBUZXN0UHJv
dG9jb2xEb21haW5Eb21haW5IYW5kbGVyIDxOU09iamVjdD4KK0BvcHRpb25hbAorLSAodm9pZClD
b21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNh
bGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKSh2b2lkKSlzdWNjZXNzQ2FsbGJhY2s7CitA
ZW5kCisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFj
ZSBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgOiBOU09iamVjdAorLSAo
dm9pZClFdmVudDsKK0BlbmQKKworCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xC
dWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
LmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4t
ZGVidWdnYWJsZVR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEpT
T05PYmplY3RQcml2YXRlLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUlu
c3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK0BpbnRl
cmZhY2UgVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyIChQcml2YXRlKQor
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooSW5zcGVjdG9yOjpBdWdtZW50YWJs
ZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXI7CitAZW5kCisKKworIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFp
bi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2Nv
bC5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5o
PgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1U
eXBlPgorT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3Ry
aW5nJiB2YWx1ZSk7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBkb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisj
aW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3Iv
UldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVj
dG9yOworCisKKworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWlu
LWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJv
dG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKyNp
bXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisK
KworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RvbWFpbi10
YXJnZXRUeXBlcy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW4tdGFyZ2V0VHlwZXMuanNvbi1yZXN1bHQKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjgwNDFjMjdjMWJlCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL2RvbWFpbi10YXJnZXRUeXBlcy5qc29uLXJlc3VsdApAQCAtMCwwICsxLDEwMzAg
QEAKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZXMuanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisvLyBEb21haW4KK0luc3BlY3Rv
ckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIkRvbWFpbiIsIFsicGFnZSJdKTsKK0luc3BlY3RvckJh
Y2tlbmQucmVnaXN0ZXJDb21tYW5kKCJEb21haW4uQ29tbWFuZCIsIFsicGFnZSJdLCBbXSwgW10p
OworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckV2ZW50KCJEb21haW4uRXZlbnQiLCBbInBhZ2Ui
XSwgW10pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbkRpc3BhdGNoZXIgPSBJbnNw
ZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRGlzcGF0Y2hlci5iaW5kKEluc3BlY3RvckJhY2tlbmQsICJE
b21haW4iKTsKK0luc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkRvbWFpbiIsIG51bGwp
OworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlcy5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyNpbmNsdWRlICJUZXN0UHJvdG9j
b2xUeXBlcy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0
ZXIuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEFsdGVybmF0ZUJhY2tlbmRE
aXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0
cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIg
PSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9CisgICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmRE
aXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQor
cHJpdmF0ZToKKyAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNo
ZXI7Cit9OworCisKK2NsYXNzIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyIDogcHVi
bGljIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5B
bHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBD
b21tYW5kKGxvbmcgY2FsbElkKSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
KworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorIyMj
IEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFByb3Rv
Y29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFj
ZSBJbnNwZWN0b3IgeworCit0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKworI2lmIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorY2xhc3MgQWx0ZXJuYXRlRG9tYWlu
QmFja2VuZERpc3BhdGNoZXI7CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCisKK2NsYXNzIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7Citw
dWJsaWM6CisgICAgdmlydHVhbCB2b2lkIENvbW1hbmQoRXJyb3JTdHJpbmcmKSA9IDA7Citwcm90
ZWN0ZWQ6CisgICAgdmlydHVhbCB+RG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7Cit9
OworCitjbGFzcyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVt
ZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxEb21haW5C
YWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgRG9tYWluQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwg
Y29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkgZmluYWw7
Citwcml2YXRlOgorICAgIHZvaWQgQ29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046
Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKK3B1YmxpYzoKKyAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0
ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9h
bHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQorcHJpdmF0ZToKKyAg
ICBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciogbV9hbHRlcm5hdGVEaXNwYXRjaGVy
IHsgbnVsbHB0ciB9OworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQorcHJpdmF0ZToKKyAgICBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlz
cGF0Y2hlciYsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIERvbWFpbkJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2VudCB7IG51bGxwdHIgfTsKK307CisKK30gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJz
LmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVzLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL0pTT05W
YWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKKyNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCisjZW5k
aWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKK25hbWVzcGFj
ZSBJbnNwZWN0b3IgeworCitEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5Eb21haW5C
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KKworUmVmPERvbWFpbkJhY2tlbmREaXNwYXRj
aGVyPiBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiBi
YWNrZW5kRGlzcGF0Y2hlciwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkK
K3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihiYWNr
ZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKK30KKworRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkRv
bWFpbkJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hl
ciwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKKyAgICA6IFN1cHBsZW1l
bnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQorICAgICwgbV9hZ2VudChh
Z2VudCkKK3sKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JE
b21haW4oIkRvbWFpbiJfcywgdGhpcyk7Cit9CisKK3ZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNo
ZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpT
T046Ok9iamVjdD4mJiBtZXNzYWdlKQoreworICAgIFJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hl
cj4gcHJvdGVjdCgqdGhpcyk7CisKKyAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJz
OworICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsKKworICAg
IGlmIChtZXRob2QgPT0gIkNvbW1hbmQiKSB7CisgICAgICAgIENvbW1hbmQocmVxdWVzdElkLCBX
VEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fYmFj
a2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1l
dGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOwor
fQorCit2b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElk
LCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQoreworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQorICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKKyAgICAg
ICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5Db21tYW5kKHJlcXVlc3RJZCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCisKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiBy
ZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYWdlbnQtPkNvbW1hbmQoZXJy
b3IpOworCisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Cisg
ICAgZWxzZQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9y
KEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOworfQorCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3Bh
dGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlcy5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPHd0Zi9KU09O
VmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJ
bnNwZWN0b3IgeworCitjbGFzcyBGcm9udGVuZFJvdXRlcjsKKworY2xhc3MgRG9tYWluRnJvbnRl
bmREaXNwYXRjaGVyIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAg
ICBEb21haW5Gcm9udGVuZERpc3BhdGNoZXIoRnJvbnRlbmRSb3V0ZXImIGZyb250ZW5kUm91dGVy
KSA6IG1fZnJvbnRlbmRSb3V0ZXIoZnJvbnRlbmRSb3V0ZXIpIHsgfQorICAgIHZvaWQgRXZlbnQo
KTsKK3ByaXZhdGU6CisgICAgRnJvbnRlbmRSb3V0ZXImIG1fZnJvbnRlbmRSb3V0ZXI7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlz
cGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3Bw
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVzLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3ZvaWQgRG9t
YWluRnJvbnRlbmREaXNwYXRjaGVyOjpFdmVudCgpCit7CisgICAgUmVmPEpTT046Ok9iamVjdD4g
anNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGpzb25NZXNzYWdlLT5z
ZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7CisKKyAgICBtX2Zyb250ZW5k
Um91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworfQorCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRj
aGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlcy5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgorI2luY2x1
ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFt
ZXNwYWNlIFByb3RvY29sIHsKKworCisKKworCisKKworCisKK30gLy8gbmFtZXNwYWNlIFByb3Rv
Y29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xPYmplY3RzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVzLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKworI2luY2x1ZGUgPHd0
Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNl
IEluc3BlY3RvciB7CisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKworCit9IC8vIG5hbWVzcGFj
ZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFj
a2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21h
aW4tdGFyZ2V0VHlwZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2Vu
ZERpc3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCitAcHJvdG9jb2wg
VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcjsKKworbmFtZXNwYWNlIEluc3BlY3RvciB7
CisKKworY2xhc3MgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDog
cHVibGljIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyIHsKKyAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERp
c3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBt
X2RlbGVnYXRlID0gaGFuZGxlcjsgfQorICAgIHZvaWQgQ29tbWFuZChsb25nIHJlcXVlc3RJZCkg
ZmluYWw7Citwcml2YXRlOgorICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21h
aW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgor
CisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZXMuanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNp
bXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSAiVGVz
dFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9y
IHsKKwordm9pZCBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQo
bG9uZyByZXF1ZXN0SWQpCit7CisgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0
b3I6QHNlbGVjdG9yKENvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6KV0p
IHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1
ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uQ29tbWFu
ZCcgd2FzIG5vdCBmb3VuZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQ
ZW5kaW5nRXJyb3JzKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZCBlcnJvckNh
bGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2
ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGlu
Z0Vycm9ycygpOworICAgIH07CisKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeeworICAgICAg
ICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmpl
Y3Q6OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgfTsKKworICAgIFttX2RlbGVnYXRlIENvbW1hbmRX
aXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2Fs
bGJhY2tdOworfQorCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZG9tYWluLXRhcmdldFR5cGVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgorCitf
X2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0
YWluLCBzZXR0ZXI9c2V0RG9tYWluSGFuZGxlcjopIGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFp
bkhhbmRsZXI+IGRvbWFpbkhhbmRsZXI7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkp
IFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqZG9tYWluRXZlbnREaXNw
YXRjaGVyOworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
bi5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVzLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbi5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5o
IgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisjaW1wb3J0IDxK
YXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgorI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgorCit1
c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2Nv
bnRyb2xsZXI7CisgICAgaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4gX2RvbWFp
bkhhbmRsZXI7CisgICAgVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyICpf
ZG9tYWluRXZlbnREaXNwYXRjaGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250
cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAg
ICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5p
bDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVy
OworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbX2RvbWFp
bkhhbmRsZXIgcmVsZWFzZV07CisgICAgW19kb21haW5FdmVudERpc3BhdGNoZXIgcmVsZWFzZV07
CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistICh2b2lkKXNldERvbWFpbkhhbmRsZXI6KGlk
PFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+KWhhbmRsZXIKK3sKKyAgICBpZiAoaGFu
ZGxlciA9PSBfZG9tYWluSGFuZGxlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgW19kb21haW5I
YW5kbGVyIHJlbGVhc2VdOworICAgIF9kb21haW5IYW5kbGVyID0gW2hhbmRsZXIgcmV0YWluXTsK
KworICAgIGF1dG8gYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IG1ha2VVbmlxdWU8T2JqQ0luc3BlY3Rv
ckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyPihoYW5kbGVyKTsKKyAgICBhdXRvIGFsdGVybmF0ZUFn
ZW50ID0gbWFrZVVuaXF1ZTxBbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudDxEb21haW5CYWNrZW5k
RGlzcGF0Y2hlciwgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXI+PigiRG9tYWluIl9z
LCAqX2NvbnRyb2xsZXIsIFdURk1vdmUoYWx0ZXJuYXRlRGlzcGF0Y2hlcikpOworICAgIF9jb250
cm9sbGVyLT5hcHBlbmRFeHRyYUFnZW50KFdURk1vdmUoYWx0ZXJuYXRlQWdlbnQpKTsKK30KKwor
LSAoaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4pZG9tYWluSGFuZGxlcgorewor
ICAgIHJldHVybiBfZG9tYWluSGFuZGxlcjsKK30KKworLSAoVGVzdFByb3RvY29sRG9tYWluRG9t
YWluRXZlbnREaXNwYXRjaGVyICopZG9tYWluRXZlbnREaXNwYXRjaGVyCit7CisgICAgaWYgKCFf
ZG9tYWluRXZlbnREaXNwYXRjaGVyKQorICAgICAgICBfZG9tYWluRXZlbnREaXNwYXRjaGVyID0g
W1tUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgYWxsb2NdIGluaXRXaXRo
Q29udHJvbGxlcjpfY29udHJvbGxlcl07CisgICAgcmV0dXJuIF9kb21haW5FdmVudERpc3BhdGNo
ZXI7Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRp
b24ubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0K
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZXMuanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJU
ZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMuaCIKKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJ
bnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVu
dERpc3BhdGNoZXIKK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250
cm9sbGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50
YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVy
IGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQo
Y29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVybiBz
ZWxmOworfQorCistICh2b2lkKUV2ZW50Cit7CisgICAgY29uc3QgRnJvbnRlbmRSb3V0ZXImIHJv
dXRlciA9IF9jb250cm9sbGVyLT5mcm9udGVuZFJvdXRlcigpOworCisgICAgUmVmPEpTT046Ok9i
amVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGpzb25NZXNz
YWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7CisgICAgcm91dGVy
LnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworfQorCitAZW5kCisKKwor
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2wuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGRvbWFpbi10YXJnZXRUeXBlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCisjaW1wb3J0
IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+CisKKworCisKKworCisKKwor
QHByb3RvY29sIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXIgPE5TT2JqZWN0PgorQG9w
dGlvbmFsCistICh2b2lkKUNvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmlu
ZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKHZvaWQpKXN1
Y2Nlc3NDYWxsYmFjazsKK0BlbmQKKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1
bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hl
ciA6IE5TT2JqZWN0CistICh2b2lkKUV2ZW50OworQGVuZAorCisKKyNpbXBvcnQgPFdlYkluc3Bl
Y3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4KKworIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2wuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJu
YWwuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBl
cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBv
cnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZh
dGUuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJv
bGxlci5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKworQGludGVyZmFjZSBUZXN0UHJv
dG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKFByaXZhdGUpCistIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhDb250cm9sbGVyOihJbnNwZWN0b3I6OkF1Z21lbnRhYmxlSW5zcGVjdG9yQ29u
dHJvbGxlciopY29udHJvbGxlcjsKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bEludGVybmFsLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVz
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9y
dCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJh
eUNvbnZlcnNpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBPYmpDRW51bVR5cGU+CitPcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0
cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisK
KyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90
b2NvbFR5cGVQYXJzZXIuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05P
YmplY3RQcml2YXRlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworCisKKwor
CisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorCisjIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisj
aW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPFdlYkluc3Bl
Y3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisjaW1wb3J0IDx3dGYvQXNzZXJ0
aW9ucy5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIElu
c3BlY3RvcjsKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uLXJlc3VsdCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW5z
LXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24tcmVzdWx0Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jZWEyMGYzZmNmZgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21h
aW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24tcmVzdWx0CkBAIC0wLDAgKzEsMTQy
MiBAQAorIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcworLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQt
c2l6ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisv
LyBOZXR3b3JrMQorSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiTmV0d29yazEiLCBu
dWxsKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMS5sb2FkUmVz
b3VyY2UxIiwgbnVsbCwgW10sIFtdKTsKK0luc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4o
Ik5ldHdvcmsxIiwgbnVsbCk7CisKKy8vIE5ldHdvcmszCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lz
dGVyRG9tYWluKCJOZXR3b3JrMyIsIG51bGwpOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNv
bW1hbmQoIk5ldHdvcmszLmxvYWRSZXNvdXJjZTEiLCBudWxsLCBbXSwgW10pOworSW5zcGVjdG9y
QmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIk5ldHdvcmszLmxvYWRSZXNvdXJjZTIiLCBudWxsLCBb
XSwgW10pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIk5ldHdvcmszLmxvYWRS
ZXNvdXJjZTMiLCBudWxsLCBbXSwgW10pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1h
bmQoIk5ldHdvcmszLmxvYWRSZXNvdXJjZTQiLCBudWxsLCBbXSwgW10pOworSW5zcGVjdG9yQmFj
a2VuZC5yZWdpc3RlckNvbW1hbmQoIk5ldHdvcmszLmxvYWRSZXNvdXJjZTUiLCBudWxsLCBbXSwg
W10pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIk5ldHdvcmszLmxvYWRSZXNv
dXJjZTYiLCBudWxsLCBbXSwgW10pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQo
Ik5ldHdvcmszLmxvYWRSZXNvdXJjZTciLCBudWxsLCBbXSwgW10pOworSW5zcGVjdG9yQmFja2Vu
ZC5hY3RpdmF0ZURvbWFpbigiTmV0d29yazMiLCBudWxsKTsKKyMjIyBFbmQgRmlsZTogSW5zcGVj
dG9yQmFja2VuZENvbW1hbmRzLmpzCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21h
aW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVz
LmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIu
aD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgor
CituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXIgeworcHVibGljOgorICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tl
bmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1v
dmUoZGlzcGF0Y2hlcik7IH0KKyAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNo
ZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Citwcml2YXRl
OgorICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKK307
CisKKworY2xhc3MgQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+QWx0ZXJu
YXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBsb2Fk
UmVzb3VyY2UxKGxvbmcgY2FsbElkKSA9IDA7Cit9OworY2xhc3MgQWx0ZXJuYXRlTmV0d29yazNC
YWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Citw
dWJsaWM6CisgICAgdmlydHVhbCB+QWx0ZXJuYXRlTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcigp
IHsgfQorICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UxKGxvbmcgY2FsbElkKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTIobG9uZyBjYWxsSWQpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgbG9hZFJlc291cmNlMyhsb25nIGNhbGxJZCkgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBsb2FkUmVzb3VyY2U0KGxvbmcgY2FsbElkKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGxvYWRS
ZXNvdXJjZTUobG9uZyBjYWxsSWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNl
Nihsb25nIGNhbGxJZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2U3KGxvbmcg
Y2FsbElkKSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8v
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorIyMjIEVuZCBGaWxlOiBU
ZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRv
bWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1l
c3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKKyNpZiBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK2NsYXNzIEFsdGVybmF0ZU5l
dHdvcmsxQmFja2VuZERpc3BhdGNoZXI7CitjbGFzcyBBbHRlcm5hdGVOZXR3b3JrM0JhY2tlbmRE
aXNwYXRjaGVyOworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENI
RVJTKQorCitjbGFzcyBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CitwdWJsaWM6
CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTEoRXJyb3JTdHJpbmcmKSA9IDA7Citwcm90
ZWN0ZWQ6CisgICAgdmlydHVhbCB+TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsK
K307CisKK2NsYXNzIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKK3B1YmxpYzoK
KyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMShFcnJvclN0cmluZyYpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMihFcnJvclN0cmluZyYpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgbG9hZFJlc291cmNlMyhFcnJvclN0cmluZyYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
bG9hZFJlc291cmNlNChFcnJvclN0cmluZyYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJl
c291cmNlNShFcnJvclN0cmluZyYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNl
NihFcnJvclN0cmluZyYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlNyhFcnJv
clN0cmluZyYpID0gMDsKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5OZXR3b3JrM0JhY2tlbmRE
aXNwYXRjaGVySGFuZGxlcigpOworfTsKKworY2xhc3MgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hl
ciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6
CisgICAgc3RhdGljIFJlZjxOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2Vu
ZERpc3BhdGNoZXImLCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIHZv
aWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNP
Tjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOworcHJpdmF0ZToKKyAgICB2b2lkIGxvYWRSZXNv
dXJjZTEobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7
CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCitwdWJsaWM6Cisg
ICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERp
c3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0g
YWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQorcHJpdmF0ZToKKyAgICBBbHRlcm5hdGVOZXR3b3JrMUJh
Y2tlbmREaXNwYXRjaGVyKiBtX2FsdGVybmF0ZURpc3BhdGNoZXIgeyBudWxscHRyIH07CisjZW5k
aWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCitwcml2YXRlOgor
ICAgIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImLCBOZXR3b3Jr
MUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIE5ldHdvcmsxQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyKiBtX2FnZW50IHsgbnVsbHB0ciB9OworfTsKKworY2xhc3MgTmV0d29yazNCYWNr
ZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hl
ciB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyPiBj
cmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxl
ciopOworICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0
aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOworcHJpdmF0ZToKKyAgICB2
b2lkIGxvYWRSZXNvdXJjZTEobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYg
cGFyYW1ldGVycyk7CisgICAgdm9pZCBsb2FkUmVzb3VyY2UyKGxvbmcgcmVxdWVzdElkLCBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOworICAgIHZvaWQgbG9hZFJlc291cmNlMyhs
b25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyAgICB2
b2lkIGxvYWRSZXNvdXJjZTQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYg
cGFyYW1ldGVycyk7CisgICAgdm9pZCBsb2FkUmVzb3VyY2U1KGxvbmcgcmVxdWVzdElkLCBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOworICAgIHZvaWQgbG9hZFJlc291cmNlNihs
b25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyAgICB2
b2lkIGxvYWRSZXNvdXJjZTcobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYg
cGFyYW1ldGVycyk7CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
CitwdWJsaWM6CisgICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZU5ldHdv
cmszQmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVE
aXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQorcHJpdmF0ZToKKyAgICBBbHRlcm5h
dGVOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyKiBtX2FsdGVybmF0ZURpc3BhdGNoZXIgeyBudWxs
cHRyIH07CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
Citwcml2YXRlOgorICAgIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNo
ZXImLCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIE5ldHdvcmszQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50IHsgbnVsbHB0ciB9OworfTsKKworfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMu
aAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNp
emVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKwor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5j
bHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKKyNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXJzLmgiCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlcjo6fk5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9CitOZXR3b3Jr
M0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6fk5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyKCkgeyB9CisKK1JlZjxOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPiBOZXR3b3JrMUJhY2tl
bmREaXNwYXRjaGVyOjpjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVy
LCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCit7CisgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hl
ciwgYWdlbnQpKTsKK30KKworTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6TmV0d29yazFCYWNr
ZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIE5ldHdv
cmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKKyAgICA6IFN1cHBsZW1lbnRhbEJh
Y2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQorICAgICwgbV9hZ2VudChhZ2VudCkK
K3sKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4o
Ik5ldHdvcmsxIl9zLCB0aGlzKTsKK30KKwordm9pZCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVy
OjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09O
OjpPYmplY3Q+JiYgbWVzc2FnZSkKK3sKKyAgICBSZWY8TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hl
cj4gcHJvdGVjdCgqdGhpcyk7CisKKyAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJz
OworICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsKKworICAg
IGlmIChtZXRob2QgPT0gImxvYWRSZXNvdXJjZTEiKSB7CisgICAgICAgIGxvYWRSZXNvdXJjZTEo
cmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERp
c3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmsxLiIgKyBtZXRob2QgKyAiJyB3YXMg
bm90IGZvdW5kIik7Cit9CisKK3ZvaWQgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJl
c291cmNlMShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKK3sKKyNpZiBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyAgICBpZiAobV9hbHRlcm5h
dGVEaXNwYXRjaGVyKSB7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291
cmNlMShyZXF1ZXN0SWQpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmIC8vIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCisgICAgRXJyb3JTdHJpbmcgZXJy
b3I7CisgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KTsKKyAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2UxKGVycm9yKTsKKworICAgIGlmICghZXJyb3Iu
bGVuZ3RoKCkpCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1
ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOworICAgIGVsc2UKKyAgICAgICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2Vy
dmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKK30KKworUmVmPE5ldHdvcmszQmFja2VuZERpc3Bh
dGNoZXI+IE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hl
ciYgYmFja2VuZERpc3BhdGNoZXIsIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBh
Z2VudCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBOZXR3b3JrM0JhY2tlbmREaXNwYXRj
aGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOworfQorCitOZXR3b3JrM0JhY2tlbmREaXNw
YXRjaGVyOjpOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNr
ZW5kRGlzcGF0Y2hlciwgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQor
ICAgIDogU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCisg
ICAgLCBtX2FnZW50KGFnZW50KQoreworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVy
RGlzcGF0Y2hlckZvckRvbWFpbigiTmV0d29yazMiX3MsIHRoaXMpOworfQorCit2b2lkIE5ldHdv
cmszQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJp
bmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQoreworICAgIFJlZjxOZXR3
b3JrM0JhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKKworICAgIFJlZlB0cjxKU09O
OjpPYmplY3Q+IHBhcmFtZXRlcnM7CisgICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3Ms
IHBhcmFtZXRlcnMpOworCisgICAgdHlwZWRlZiB2b2lkIChOZXR3b3JrM0JhY2tlbmREaXNwYXRj
aGVyOjoqQ2FsbEhhbmRsZXIpKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYm
IG1lc3NhZ2UpOworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVyPiBEaXNw
YXRjaE1hcDsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8RGlzcGF0Y2hNYXA+IGRpc3BhdGNo
TWFwOworICAgIGlmIChkaXNwYXRjaE1hcC5nZXQoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgc3Rh
dGljIGNvbnN0IHN0cnVjdCBNZXRob2RUYWJsZSB7CisgICAgICAgICAgICBjb25zdCBjaGFyKiBu
YW1lOworICAgICAgICAgICAgQ2FsbEhhbmRsZXIgaGFuZGxlcjsKKyAgICAgICAgfSBjb21tYW5k
c1tdID0geworICAgICAgICAgICAgeyAibG9hZFJlc291cmNlMSIsICZOZXR3b3JrM0JhY2tlbmRE
aXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UxIH0sCisgICAgICAgICAgICB7ICJsb2FkUmVzb3VyY2Uy
IiwgJk5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTIgfSwKKyAgICAgICAg
ICAgIHsgImxvYWRSZXNvdXJjZTMiLCAmTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJl
c291cmNlMyB9LAorICAgICAgICAgICAgeyAibG9hZFJlc291cmNlNCIsICZOZXR3b3JrM0JhY2tl
bmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U0IH0sCisgICAgICAgICAgICB7ICJsb2FkUmVzb3Vy
Y2U1IiwgJk5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTUgfSwKKyAgICAg
ICAgICAgIHsgImxvYWRSZXNvdXJjZTYiLCAmTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9h
ZFJlc291cmNlNiB9LAorICAgICAgICAgICAgeyAibG9hZFJlc291cmNlNyIsICZOZXR3b3JrM0Jh
Y2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U3IH0sCisgICAgICAgIH07CisgICAgICAgIHNp
emVfdCBsZW5ndGggPSBXVEZfQVJSQVlfTEVOR1RIKGNvbW1hbmRzKTsKKyAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKKyAgICAgICAgICAgIGRpc3BhdGNoTWFwLmdl
dCgpLmFkZChjb21tYW5kc1tpXS5uYW1lLCBjb21tYW5kc1tpXS5oYW5kbGVyKTsKKyAgICB9CisK
KyAgICBhdXRvIGZpbmRSZXN1bHQgPSBkaXNwYXRjaE1hcC5nZXQoKS5maW5kKG1ldGhvZCk7Cisg
ICAgaWYgKGZpbmRSZXN1bHQgPT0gZGlzcGF0Y2hNYXAuZ2V0KCkuZW5kKCkpIHsKKyAgICAgICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hl
cjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMuIiArIG1ldGhvZCArICInIHdhcyBub3QgZm91
bmQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgICgoKnRoaXMpLipmaW5kUmVzdWx0
LT52YWx1ZSkocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKK30KKwordm9pZCBOZXR3
b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UxKGxvbmcgcmVxdWVzdElkLCBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiYmKQoreworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQorICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKKyAgICAgICAgbV9h
bHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2UxKHJlcXVlc3RJZCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCisKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiBy
ZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJj
ZTEoZXJyb3IpOworCisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKKyAgICAgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxz
ZSk7CisgICAgZWxzZQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2Nv
bEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOwor
fQorCit2b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTIobG9uZyBy
ZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCit7CisjaWYgRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikg
eworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZTIocmVxdWVzdElk
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKKworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgIFJlZjxK
U09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9hZ2Vu
dC0+bG9hZFJlc291cmNlMihlcnJvcik7CisKKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQorICAg
ICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3Zl
KHJlc3VsdCksIGZhbHNlKTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZN
b3ZlKGVycm9yKSk7Cit9CisKK3ZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJl
c291cmNlMyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKK3sKKyNpZiBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyAgICBpZiAobV9hbHRlcm5h
dGVEaXNwYXRjaGVyKSB7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291
cmNlMyhyZXF1ZXN0SWQpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmIC8vIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCisgICAgRXJyb3JTdHJpbmcgZXJy
b3I7CisgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KTsKKyAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2UzKGVycm9yKTsKKworICAgIGlmICghZXJyb3Iu
bGVuZ3RoKCkpCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1
ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOworICAgIGVsc2UKKyAgICAgICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2Vy
dmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKK30KKwordm9pZCBOZXR3b3JrM0JhY2tlbmREaXNw
YXRjaGVyOjpsb2FkUmVzb3VyY2U0KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0
PiYmKQoreworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorICAg
IGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRj
aGVyLT5sb2FkUmVzb3VyY2U0KHJlcXVlc3RJZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisj
ZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyAgICBF
cnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTQoZXJyb3IpOworCisg
ICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2Vu
ZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7CisgICAgZWxzZQor
ICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmRE
aXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOworfQorCit2b2lkIE5ldHdv
cmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTUobG9uZyByZXF1ZXN0SWQsIFJlZlB0
cjxKU09OOjpPYmplY3Q+JiYpCit7CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCisgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeworICAgICAgICBtX2Fs
dGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZTUocmVxdWVzdElkKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKKworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgIFJlZjxKU09OOjpPYmplY3Q+IHJl
c3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9hZ2VudC0+bG9hZFJlc291cmNl
NShlcnJvcik7CisKKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQorICAgICAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNl
KTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29s
RXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Cit9
CisKK3ZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNihsb25nIHJl
cXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKK3sKKyNpZiBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7
CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlNihyZXF1ZXN0SWQp
OworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQorCisgICAgRXJyb3JTdHJpbmcgZXJyb3I7CisgICAgUmVmPEpT
T046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBtX2FnZW50
LT5sb2FkUmVzb3VyY2U2KGVycm9yKTsKKworICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCisgICAg
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUo
cmVzdWx0KSwgZmFsc2UpOworICAgIGVsc2UKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+
cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1v
dmUoZXJyb3IpKTsKK30KKwordm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVz
b3VyY2U3KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQoreworI2lmIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorICAgIGlmIChtX2FsdGVybmF0
ZURpc3BhdGNoZXIpIHsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3Vy
Y2U3KHJlcXVlc3RJZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYgLy8gRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyAgICBFcnJvclN0cmluZyBlcnJv
cjsKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OworICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTcoZXJyb3IpOworCisgICAgaWYgKCFlcnJvci5s
ZW5ndGgoKSkKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVl
c3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7CisgICAgZWxzZQorICAgICAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2
ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
KworIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4g
RmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9y
IHsKKworY2xhc3MgRnJvbnRlbmRSb3V0ZXI7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgor
IyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxl
OiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK30gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorCisjIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgorI2luY2x1
ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFt
ZXNwYWNlIFByb3RvY29sIHsKKworCisKKworCisvLyBUeXBlZGVmcy4KK25hbWVzcGFjZSBOZXR3
b3JrMiB7CisvKiBVbmlxdWUgbG9hZGVyIGlkZW50aWZpZXIuICovCit0eXBlZGVmIFN0cmluZyBM
b2FkZXJJZDsKK30gLy8gTmV0d29yazIKKy8vIEVuZCBvZiB0eXBlZGVmcy4KKworCisKK30gLy8g
bmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bE9iamVjdHMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13
aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0UHJv
dG9jb2xPYmplY3RzLmgiCisKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCituYW1lc3BhY2Ug
UHJvdG9jb2wgeworCisKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKwor
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1z
aXplcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hl
cnMuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKK0Bwcm90b2NvbCBUZXN0UHJvdG9j
b2xOZXR3b3JrMURvbWFpbkhhbmRsZXI7CitAcHJvdG9jb2wgVGVzdFByb3RvY29sTmV0d29yazNE
b21haW5IYW5kbGVyOworCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCitjbGFzcyBPYmpDSW5z
cGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVO
ZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
K3B1YmxpYzoKKyAgICBPYmpDSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihpZDxU
ZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9
IGhhbmRsZXI7IH0KKyAgICB2b2lkIGxvYWRSZXNvdXJjZTEobG9uZyByZXF1ZXN0SWQpIGZpbmFs
OworcHJpdmF0ZToKKyAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sTmV0d29yazFEb21haW5I
YW5kbGVyPj4gbV9kZWxlZ2F0ZTsKK307CisKK2NsYXNzIE9iakNJbnNwZWN0b3JOZXR3b3JrM0Jh
Y2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZU5ldHdvcmszQmFja2VuZERp
c3BhdGNoZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIE9i
akNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbE5ldHdv
cmszRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQorICAg
IHZvaWQgbG9hZFJlc291cmNlMShsb25nIHJlcXVlc3RJZCkgZmluYWw7CisgICAgdm9pZCBsb2Fk
UmVzb3VyY2UyKGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTMo
bG9uZyByZXF1ZXN0SWQpIGZpbmFsOworICAgIHZvaWQgbG9hZFJlc291cmNlNChsb25nIHJlcXVl
c3RJZCkgZmluYWw7CisgICAgdm9pZCBsb2FkUmVzb3VyY2U1KGxvbmcgcmVxdWVzdElkKSBmaW5h
bDsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTYobG9uZyByZXF1ZXN0SWQpIGZpbmFsOworICAgIHZv
aWQgbG9hZFJlc291cmNlNyhsb25nIHJlcXVlc3RJZCkgZmluYWw7Citwcml2YXRlOgorICAgIFJl
dGFpblB0cjxpZDxUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRl
OworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bEJhY2tlbmREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSAiVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIK
KyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwor
dm9pZCBPYmpDSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNl
MShsb25nIHJlcXVlc3RJZCkKK3sKKyAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxl
Y3RvcjpAc2VsZWN0b3IobG9hZFJlc291cmNlMVdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxs
YmFjazopXSkgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVy
cm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdv
cmsxLmxvYWRSZXNvdXJjZTEnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7CisgICAgICAgIGJh
Y2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5k
RGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICB9OworCisgICAgaWQgc3VjY2Vzc0NhbGxi
YWNrID0gXnsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVl
c3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2UpOworICAgIH07CisKKyAgICBbbV9k
ZWxlZ2F0ZSBsb2FkUmVzb3VyY2UxV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNj
ZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKK30KKworCit2b2lkIE9iakNJbnNwZWN0b3JO
ZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UxKGxvbmcgcmVxdWVzdElkKQor
eworICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2Fk
UmVzb3VyY2UxV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7CisgICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNr
ZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMubG9hZFJlc291cmNlMScg
d2FzIG5vdCBmb3VuZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5k
aW5nRXJyb3JzKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZCBlcnJvckNhbGxi
YWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJF
cnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vy
cm9ycygpOworICAgIH07CisKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeeworICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgfTsKKworICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJj
ZTFXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNz
Q2FsbGJhY2tdOworfQorCit2b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRj
aGVyOjpsb2FkUmVzb3VyY2UyKGxvbmcgcmVxdWVzdElkKQoreworICAgIGlmICghW21fZGVsZWdh
dGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2UyV2l0aEVycm9yQ2Fs
bGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCkt
PnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9k
Tm90Rm91bmQsICInTmV0d29yazMubG9hZFJlc291cmNlMicgd2FzIG5vdCBmb3VuZCJfcyk7Cisg
ICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJy
b3IpIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihy
ZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAg
ICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgIH07CisKKyAg
ICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5z
ZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7Cisg
ICAgfTsKKworICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZTJXaXRoRXJyb3JDYWxsYmFjazpl
cnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOworfQorCit2b2lk
IE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UzKGxv
bmcgcmVxdWVzdElkKQoreworICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9y
OkBzZWxlY3Rvcihsb2FkUmVzb3VyY2UzV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNr
OildKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3Io
cmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMu
bG9hZFJlc291cmNlMycgd2FzIG5vdCBmb3VuZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKKyAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNw
YXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigp
LT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgIH07CisKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sg
PSBeeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElk
LCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgfTsKKworICAgIFttX2RlbGVn
YXRlIGxvYWRSZXNvdXJjZTNXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3ND
YWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOworfQorCit2b2lkIE9iakNJbnNwZWN0b3JOZXR3b3Jr
M0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U0KGxvbmcgcmVxdWVzdElkKQoreworICAg
IGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3Vy
Y2U0V2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7CisgICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlz
cGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMubG9hZFJlc291cmNlNCcgd2FzIG5v
dCBmb3VuZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJy
b3JzKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZCBlcnJvckNhbGxiYWNrID0g
XihOU1N0cmluZyAqZXJyb3IpIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0
UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwg
ZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygp
OworICAgIH07CisKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeeworICAgICAgICBiYWNrZW5k
RGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpLCBmYWxzZSk7CisgICAgfTsKKworICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZTRXaXRo
RXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJh
Y2tdOworfQorCit2b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjps
b2FkUmVzb3VyY2U1KGxvbmcgcmVxdWVzdElkKQoreworICAgIGlmICghW21fZGVsZWdhdGUgcmVz
cG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2U1V2l0aEVycm9yQ2FsbGJhY2s6
c3VjY2Vzc0NhbGxiYWNrOildKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9y
dFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91
bmQsICInTmV0d29yazMubG9hZFJlc291cmNlNScgd2FzIG5vdCBmb3VuZCJfcyk7CisgICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsK
KyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0
SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgIH07CisKKyAgICBpZCBz
dWNjZXNzQ2FsbGJhY2sgPSBeeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVz
cG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgfTsK
KworICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZTVXaXRoRXJyb3JDYWxsYmFjazplcnJvckNh
bGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOworfQorCit2b2lkIE9iakNJ
bnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U2KGxvbmcgcmVx
dWVzdElkKQoreworICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxl
Y3Rvcihsb2FkUmVzb3VyY2U2V2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7
CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVz
dElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMubG9hZFJl
c291cmNlNicgd2FzIG5vdCBmb3VuZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCkt
PnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZCBl
cnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKKyAgICAgICAgYmFja2VuZERpc3Bh
dGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVy
OjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5k
UGVuZGluZ0Vycm9ycygpOworICAgIH07CisKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeewor
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgfTsKKworICAgIFttX2RlbGVnYXRlIGxv
YWRSZXNvdXJjZTZXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFj
azpzdWNjZXNzQ2FsbGJhY2tdOworfQorCit2b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tl
bmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U3KGxvbmcgcmVxdWVzdElkKQoreworICAgIGlmICgh
W21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2U3V2l0
aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7CisgICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hl
cjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMubG9hZFJlc291cmNlNycgd2FzIG5vdCBmb3Vu
ZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0
cmluZyAqZXJyb3IpIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9j
b2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3Ip
OworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAg
IH07CisKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeeworICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBm
YWxzZSk7CisgICAgfTsKKworICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZTdXaXRoRXJyb3JD
YWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOwor
fQorCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbi5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlu
cy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wu
aD4KKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNl
IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAorQHByb3BlcnR5IChub25hdG9t
aWMsIHJldGFpbiwgc2V0dGVyPXNldE5ldHdvcmsxSGFuZGxlcjopIGlkPFRlc3RQcm90b2NvbE5l
dHdvcmsxRG9tYWluSGFuZGxlcj4gbmV0d29yazFIYW5kbGVyOworQHByb3BlcnR5IChub25hdG9t
aWMsIHJldGFpbiwgc2V0dGVyPXNldE5ldHdvcmszSGFuZGxlcjopIGlkPFRlc3RQcm90b2NvbE5l
dHdvcmszRG9tYWluSGFuZGxlcj4gbmV0d29yazNIYW5kbGVyOworQGVuZAorCisKKyMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZp
Z3VyYXRpb24uaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENv
cmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKwordXNpbmcgbmFtZXNw
YWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRp
b24KK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwor
ICAgIGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4gX25ldHdvcmsxSGFuZGxl
cjsKKyAgICBpZDxUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkhhbmRsZXI+IF9uZXR3b3JrM0hh
bmRsZXI7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRh
YmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgoreworICAgIHNlbGYgPSBbc3VwZXIg
aW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIEFTU0VSVChj
b250cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAgcmV0dXJuIHNl
bGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIFtfbmV0d29yazFIYW5kbGVyIHJlbGVh
c2VdOworICAgIFtfbmV0d29yazNIYW5kbGVyIHJlbGVhc2VdOworICAgIFtzdXBlciBkZWFsbG9j
XTsKK30KKworLSAodm9pZClzZXROZXR3b3JrMUhhbmRsZXI6KGlkPFRlc3RQcm90b2NvbE5ldHdv
cmsxRG9tYWluSGFuZGxlcj4paGFuZGxlcgoreworICAgIGlmIChoYW5kbGVyID09IF9uZXR3b3Jr
MUhhbmRsZXIpCisgICAgICAgIHJldHVybjsKKworICAgIFtfbmV0d29yazFIYW5kbGVyIHJlbGVh
c2VdOworICAgIF9uZXR3b3JrMUhhbmRsZXIgPSBbaGFuZGxlciByZXRhaW5dOworCisgICAgYXV0
byBhbHRlcm5hdGVEaXNwYXRjaGVyID0gbWFrZVVuaXF1ZTxPYmpDSW5zcGVjdG9yTmV0d29yazFC
YWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7CisgICAgYXV0byBhbHRlcm5hdGVBZ2VudCA9IG1h
a2VVbmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8TmV0d29yazFCYWNrZW5kRGlzcGF0
Y2hlciwgQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4+KCJOZXR3b3JrMSJfcywg
Kl9jb250cm9sbGVyLCBXVEZNb3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIpKTsKKyAgICBfY29udHJv
bGxlci0+YXBwZW5kRXh0cmFBZ2VudChXVEZNb3ZlKGFsdGVybmF0ZUFnZW50KSk7Cit9CisKKy0g
KGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4pbmV0d29yazFIYW5kbGVyCit7
CisgICAgcmV0dXJuIF9uZXR3b3JrMUhhbmRsZXI7Cit9CisKKy0gKHZvaWQpc2V0TmV0d29yazNI
YW5kbGVyOihpZDxUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkhhbmRsZXI+KWhhbmRsZXIKK3sK
KyAgICBpZiAoaGFuZGxlciA9PSBfbmV0d29yazNIYW5kbGVyKQorICAgICAgICByZXR1cm47CisK
KyAgICBbX25ldHdvcmszSGFuZGxlciByZWxlYXNlXTsKKyAgICBfbmV0d29yazNIYW5kbGVyID0g
W2hhbmRsZXIgcmV0YWluXTsKKworICAgIGF1dG8gYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IG1ha2VV
bmlxdWU8T2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI+KGhhbmRsZXIpOwor
ICAgIGF1dG8gYWx0ZXJuYXRlQWdlbnQgPSBtYWtlVW5pcXVlPEFsdGVybmF0ZURpc3BhdGNoYWJs
ZUFnZW50PE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIsIEFsdGVybmF0ZU5ldHdvcmszQmFja2Vu
ZERpc3BhdGNoZXI+PigiTmV0d29yazMiX3MsICpfY29udHJvbGxlciwgV1RGTW92ZShhbHRlcm5h
dGVEaXNwYXRjaGVyKSk7CisgICAgX2NvbnRyb2xsZXItPmFwcGVuZEV4dHJhQWdlbnQoV1RGTW92
ZShhbHRlcm5hdGVBZ2VudCkpOworfQorCistIChpZDxUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFp
bkhhbmRsZXI+KW5ldHdvcmszSGFuZGxlcgoreworICAgIHJldHVybiBfbmV0d29yazNIYW5kbGVy
OworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9u
Lm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29t
bWFuZC1zaXplcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNp
bmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2
ZW50RGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFu
ZC1zaXplcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
KyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCisjaW1wb3J0IDxXZWJJbnNwZWN0
b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+CisKKworCisKKworCisKKworQHByb3RvY29sIFRl
c3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlciA8TlNPYmplY3Q+CitAb3B0aW9uYWwKKy0g
KHZvaWQpbG9hZFJlc291cmNlMVdpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICpl
cnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikodm9pZCkpc3VjY2Vz
c0NhbGxiYWNrOworQGVuZAorCitAcHJvdG9jb2wgVGVzdFByb3RvY29sTmV0d29yazNEb21haW5I
YW5kbGVyIDxOU09iamVjdD4KK0BvcHRpb25hbAorLSAodm9pZClsb2FkUmVzb3VyY2UxV2l0aEVy
cm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nl
c3NDYWxsYmFjazoodm9pZCheKSh2b2lkKSlzdWNjZXNzQ2FsbGJhY2s7CistICh2b2lkKWxvYWRS
ZXNvdXJjZTJXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9y
Q2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKHZvaWQpKXN1Y2Nlc3NDYWxsYmFjazsK
Ky0gKHZvaWQpbG9hZFJlc291cmNlM1dpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5n
ICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikodm9pZCkpc3Vj
Y2Vzc0NhbGxiYWNrOworLSAodm9pZClsb2FkUmVzb3VyY2U0V2l0aEVycm9yQ2FsbGJhY2s6KHZv
aWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9p
ZCheKSh2b2lkKSlzdWNjZXNzQ2FsbGJhY2s7CistICh2b2lkKWxvYWRSZXNvdXJjZTVXaXRoRXJy
b3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vz
c0NhbGxiYWNrOih2b2lkKF4pKHZvaWQpKXN1Y2Nlc3NDYWxsYmFjazsKKy0gKHZvaWQpbG9hZFJl
c291cmNlNldpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JD
YWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikodm9pZCkpc3VjY2Vzc0NhbGxiYWNrOwor
LSAodm9pZClsb2FkUmVzb3VyY2U3V2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcg
KmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKSh2b2lkKSlzdWNj
ZXNzQ2FsbGJhY2s7CitAZW5kCisKKworCisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90
b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4KKworIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2wuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQt
c2l6ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisj
aW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQ
cml2YXRlLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNv
bnRyb2xsZXIuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKKworCisKKyMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBk
b21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1w
b3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+CisKK25hbWVz
cGFjZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+CitPcHRp
b25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVl
KTsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21h
aW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29s
VHlwZVBhcnNlci5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVj
dFByaXZhdGUuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGludGVyZmFjZSBU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKE5ldHdvcmsyRG9tYWluKQorCisrICh2b2lkKV9w
YXJzZUxvYWRlcklkOihOU1N0cmluZyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9h
ZDsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
IChOZXR3b3JrMkRvbWFpbikKKworKyAodm9pZClfcGFyc2VMb2FkZXJJZDooTlNTdHJpbmcgKiop
b3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05f
Rk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBjbGFzc10pOworICAgICpvdXRWYWx1ZSA9
IChOU1N0cmluZyAqKXBheWxvYWQ7Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
VHlwZXMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgt
dmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9y
dCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3Iv
UldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMu
aD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0
b3I7CisKKworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC9lbnVtLXZhbHVlcy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9lbnVtLXZhbHVlcy5qc29uLXJlc3VsdApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uY2Q5MDEyMDg2ZDYKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvZW51bS12YWx1ZXMuanNvbi1yZXN1bHQKQEAgLTAsMCArMSwxMjAzIEBACisjIyMgQmVn
aW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisvLyBUeXBlRG9tYWluCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lz
dGVyRG9tYWluKCJUeXBlRG9tYWluIiwgbnVsbCk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVy
RW51bSgiVHlwZURvbWFpbi5UeXBlRG9tYWluRW51bSIsIHtTaGFyZWQ6ICJzaGFyZWQiLCBSZWQ6
ICJyZWQiLCBHcmVlbjogImdyZWVuIiwgQmx1ZTogImJsdWUifSk7CitJbnNwZWN0b3JCYWNrZW5k
LmFjdGl2YXRlRG9tYWluKCJUeXBlRG9tYWluIiwgbnVsbCk7CisKKy8vIENvbW1hbmREb21haW4K
K0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIkNvbW1hbmREb21haW4iLCBudWxsKTsK
K0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJDb21tYW5kRG9tYWluLmNvbW1hbmRX
aXRoRW51bVJldHVyblZhbHVlIiwgbnVsbCwgW10sIFsicmV0dXJuVmFsdWUiXSk7CitJbnNwZWN0
b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJDb21tYW5kRG9tYWluIiwgbnVsbCk7CisKKy8vIEV2
ZW50RG9tYWluCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJFdmVudERvbWFpbiIs
IG51bGwpOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIkV2ZW50RG9tYWluLkV2ZW50
V2l0aEVudW1QYXJhbWV0ZXJQYXJhbWV0ZXIiLCB7U2hhcmVkOiAic2hhcmVkIiwgQmxhY2s6ICJi
bGFjayIsIFdoaXRlOiAid2hpdGUifSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnQo
IkV2ZW50RG9tYWluLmV2ZW50V2l0aEVudW1QYXJhbWV0ZXIiLCBudWxsLCBbInBhcmFtZXRlciJd
KTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudERvbWFpbkRpc3BhdGNoZXIgPSBJbnNw
ZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRGlzcGF0Y2hlci5iaW5kKEluc3BlY3RvckJhY2tlbmQsICJF
dmVudERvbWFpbiIpOworSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiRXZlbnREb21h
aW4iLCBudWxsKTsKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCisK
KyMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCisvLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyNpbmNsdWRlICJUZXN0UHJv
dG9jb2xUeXBlcy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRS
b3V0ZXIuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEFsdGVybmF0ZUJhY2tl
bmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJl
ZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNo
ZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9CisgICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tl
bmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsg
fQorcHJpdmF0ZToKKyAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3Bh
dGNoZXI7Cit9OworCisKK2NsYXNzIEFsdGVybmF0ZUNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0
Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAg
dmlydHVhbCB+QWx0ZXJuYXRlQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKCkgeyB9Cisg
ICAgdmlydHVhbCB2b2lkIGNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlKGxvbmcgY2FsbElkKSA9
IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJu
YXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlz
cGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVz
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3R5cGVkZWYgU3Ry
aW5nIEVycm9yU3RyaW5nOworCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCitjbGFzcyBBbHRlcm5hdGVDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI7Cisj
ZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKK2NsYXNz
IENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgeworcHVibGljOgorICAgIC8v
IE5hbWVkIGFmdGVyIHBhcmFtZXRlciAncmV0dXJuVmFsdWUnIHdoaWxlIGdlbmVyYXRpbmcgY29t
bWFuZC9ldmVudCBjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZS4KKyAgICBlbnVtIGNsYXNzIFJl
dHVyblZhbHVlIHsKKyAgICAgICAgU2hhcmVkID0gMCwKKyAgICAgICAgQ3lhbiA9IDYsCisgICAg
ICAgIE1hZ2VudGEgPSA3LAorICAgICAgICBZZWxsb3cgPSA4LAorICAgIH07IC8vIGVudW0gY2xh
c3MgUmV0dXJuVmFsdWUKKyAgICB2aXJ0dWFsIHZvaWQgY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFs
dWUoRXJyb3JTdHJpbmcmLCBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpS
ZXR1cm5WYWx1ZSogb3V0X3JldHVyblZhbHVlKSA9IDA7Citwcm90ZWN0ZWQ6CisgICAgdmlydHVh
bCB+Q29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOworfTsKKworY2xhc3Mg
Q29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRh
bEJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPENvbW1hbmREb21h
aW5CYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgQ29tbWFuZERv
bWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIHZvaWQgZGlzcGF0Y2gobG9uZyBy
ZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3Nh
Z2UpIGZpbmFsOworcHJpdmF0ZToKKyAgICB2b2lkIGNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVl
KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOworI2lm
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorcHVibGljOgorICAgIHZv
aWQgc2V0QWx0ZXJuYXRlRGlzcGF0Y2hlcihBbHRlcm5hdGVDb21tYW5kRG9tYWluQmFja2VuZERp
c3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0g
YWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQorcHJpdmF0ZToKKyAgICBBbHRlcm5hdGVDb21tYW5kRG9t
YWluQmFja2VuZERpc3BhdGNoZXIqIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciB7IG51bGxwdHIgfTsK
KyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK3ByaXZh
dGU6CisgICAgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVy
JiwgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIENvbW1hbmRE
b21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQgeyBudWxscHRyIH07Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNw
YXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL0pTT05W
YWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKKyNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCisjZW5k
aWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKK25hbWVzcGFj
ZSBJbnNwZWN0b3IgeworCitDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+
Q29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQorCitSZWY8Q29tbWFu
ZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI6
OmNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIENvbW1hbmREb21h
aW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQoreworICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwg
YWdlbnQpKTsKK30KKworQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kRG9t
YWluQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVy
LCBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKKyAgICA6IFN1
cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQorICAgICwgbV9h
Z2VudChhZ2VudCkKK3sKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNo
ZXJGb3JEb21haW4oIkNvbW1hbmREb21haW4iX3MsIHRoaXMpOworfQorCit2b2lkIENvbW1hbmRE
b21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0
cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCit7CisgICAgUmVmPENv
bW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CisKKyAgICBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOworICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFy
YW1zIl9zLCBwYXJhbWV0ZXJzKTsKKworICAgIGlmIChtZXRob2QgPT0gImNvbW1hbmRXaXRoRW51
bVJldHVyblZhbHVlIikgeworICAgICAgICBjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShyZXF1
ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0
Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInQ29tbWFuZERvbWFpbi4iICsgbWV0aG9kICsgIicgd2Fz
IG5vdCBmb3VuZCIpOworfQorCit2b2lkIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6
Y29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpP
YmplY3Q+JiYpCit7CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
CisgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeworICAgICAgICBtX2FsdGVybmF0ZURp
c3BhdGNoZXItPmNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlKHJlcXVlc3RJZCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCisKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWY8SlNPTjo6T2JqZWN0
PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIENvbW1hbmREb21haW5CYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlJldHVyblZhbHVlIG91dF9yZXR1cm5WYWx1ZTsKKyAgICBt
X2FnZW50LT5jb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShlcnJvciwgJm91dF9yZXR1cm5WYWx1
ZSk7CisKKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQorICAgICAgICByZXN1bHQtPnNldFN0cmlu
ZygicmV0dXJuVmFsdWUiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRF
bnVtQ29uc3RhbnRWYWx1ZShvdXRfcmV0dXJuVmFsdWUpKTsKKworICAgIGlmICghZXJyb3IubGVu
Z3RoKCkpCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0
SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOworICAgIGVsc2UKKyAgICAgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVy
RXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisK
KyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZp
bGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0
cy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBGcm9udGVuZFJvdXRl
cjsKKworY2xhc3MgRXZlbnREb21haW5Gcm9udGVuZERpc3BhdGNoZXIgeworICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIEV2ZW50RG9tYWluRnJvbnRlbmREaXNwYXRj
aGVyKEZyb250ZW5kUm91dGVyJiBmcm9udGVuZFJvdXRlcikgOiBtX2Zyb250ZW5kUm91dGVyKGZy
b250ZW5kUm91dGVyKSB7IH0KKyAgICAgICAgLy8gTmFtZWQgYWZ0ZXIgcGFyYW1ldGVyICdwYXJh
bWV0ZXInIHdoaWxlIGdlbmVyYXRpbmcgY29tbWFuZC9ldmVudCBldmVudFdpdGhFbnVtUGFyYW1l
dGVyLgorICAgICAgICBlbnVtIGNsYXNzIFBhcmFtZXRlciB7CisgICAgICAgICAgICBTaGFyZWQg
PSAwLAorICAgICAgICAgICAgQmxhY2sgPSA0LAorICAgICAgICAgICAgV2hpdGUgPSA1LAorICAg
ICAgICB9OyAvLyBlbnVtIGNsYXNzIFBhcmFtZXRlcgorICAgIHZvaWQgZXZlbnRXaXRoRW51bVBh
cmFtZXRlcihQYXJhbWV0ZXIgcGFyYW1ldGVyKTsKK3ByaXZhdGU6CisgICAgRnJvbnRlbmRSb3V0
ZXImIG1fZnJvbnRlbmRSb3V0ZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMj
IyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTog
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gZW51bS12YWx1ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlz
cGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5k
Um91dGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5z
cGVjdG9yIHsKKwordm9pZCBFdmVudERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcjo6ZXZlbnRXaXRo
RW51bVBhcmFtZXRlcihQYXJhbWV0ZXIgcGFyYW1ldGVyKQoreworICAgIFJlZjxKU09OOjpPYmpl
Y3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBqc29uTWVzc2Fn
ZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJFdmVudERvbWFpbi5ldmVudFdpdGhFbnVtUGFyYW1l
dGVyIl9zKTsKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiBwYXJhbXNPYmplY3QgPSBKU09OOjpPYmpl
Y3Q6OmNyZWF0ZSgpOworICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJwYXJhbWV0ZXIiX3Ms
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShw
YXJhbWV0ZXIpKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiX3MsIFdURk1v
dmUocGFyYW1zT2JqZWN0KSk7CisKKyAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChqc29u
TWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
KworIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JQcm90b2NvbFR5cGVzLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKKworCituYW1lc3BhY2UgUHJvdG9jb2wgeworCisKKworLy8g
Rm9yd2FyZCBkZWNsYXJhdGlvbnMuCituYW1lc3BhY2UgVHlwZURvbWFpbiB7CitlbnVtIGNsYXNz
IFR5cGVEb21haW5FbnVtOworfSAvLyBUeXBlRG9tYWluCisvLyBFbmQgb2YgZm9yd2FyZCBkZWNs
YXJhdGlvbnMuCisKKworCisKK25hbWVzcGFjZSBUZXN0SGVscGVycyB7CisKK1N0cmluZyBnZXRF
bnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmlu
ZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkKK3sKKyAgICByZXR1cm4gZ2V0RW51
bUNvbnN0YW50VmFsdWUoc3RhdGljX2Nhc3Q8aW50PihlbnVtVmFsdWUpKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgVGVzdEhlbHBlcnMKKworbmFtZXNwYWNlIFR5cGVEb21haW4geworLyogICovCitl
bnVtIGNsYXNzIFR5cGVEb21haW5FbnVtIHsKKyAgICBTaGFyZWQgPSAwLAorICAgIFJlZCA9IDEs
CisgICAgR3JlZW4gPSAyLAorICAgIEJsdWUgPSAzLAorfTsgLy8gZW51bSBjbGFzcyBUeXBlRG9t
YWluRW51bQorfSAvLyBUeXBlRG9tYWluCisKKworCituYW1lc3BhY2UgVGVzdEhlbHBlcnMgewor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBQcm90b2NvbEVudW1UeXBlPgorT3B0aW9uYWw8UHJvdG9jb2xF
bnVtVHlwZT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYpOworCisvLyBF
bnVtcyBpbiB0aGUgJ1R5cGVEb21haW4nIERvbWFpbgordGVtcGxhdGU8PgorT3B0aW9uYWw8SW5z
cGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW0+IHBhcnNlRW51bVZh
bHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWlu
RW51bT4oY29uc3QgU3RyaW5nJik7CisKK30gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCisKK30g
Ly8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCituYW1l
c3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwor
CisvLyBIYXNoIGRlY2xhcmF0aW9ucyBpbiB0aGUgJ1R5cGVEb21haW4nIERvbWFpbgordGVtcGxh
dGU8Pgorc3RydWN0IERlZmF1bHRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46
OlR5cGVEb21haW5FbnVtPiB7CisgICAgdHlwZWRlZiBJbnRIYXNoPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlR5cGVEb21haW46OlR5cGVEb21haW5FbnVtPiBIYXNoOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV1RGCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorCisjIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xP
YmplY3RzLmgiCisKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCituYW1lc3BhY2UgUHJvdG9j
b2wgeworCituYW1lc3BhY2UgVGVzdEhlbHBlcnMgeworCitzdGF0aWMgY29uc3QgY2hhciogY29u
c3QgZW51bV9jb25zdGFudF92YWx1ZXNbXSA9IHsKKyAgICAic2hhcmVkIiwKKyAgICAicmVkIiwK
KyAgICAiZ3JlZW4iLAorICAgICJibHVlIiwKKyAgICAiYmxhY2siLAorICAgICJ3aGl0ZSIsCisg
ICAgImN5YW4iLAorICAgICJtYWdlbnRhIiwKKyAgICAieWVsbG93IiwKK307CisKK1N0cmluZyBn
ZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgeworICAgIHJldHVybiBlbnVtX2NvbnN0YW50
X3ZhbHVlc1tjb2RlXTsKK30KKworLy8gRW51bXMgaW4gdGhlICdUeXBlRG9tYWluJyBEb21haW4K
K3RlbXBsYXRlPD4KK09wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46OlR5
cGVEb21haW5FbnVtPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW0+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJp
bmcpCit7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0geworICAg
ICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46OlR5cGVEb21haW5F
bnVtOjpTaGFyZWQsCisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURv
bWFpbjo6VHlwZURvbWFpbkVudW06OlJlZCwKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlBy
b3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51bTo6R3JlZW4sCisgICAgICAgIChzaXpl
X3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW06OkJsdWUs
CisgICAgfTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDQ7ICsraSkKKyAgICAgICAgaWYg
KHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ld
XSkKKyAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6
VHlwZURvbWFpbkVudW0pY29uc3RhbnRWYWx1ZXNbaV07CisKKyAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworfQorCisKK30gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCisKKworCit9IC8vIG5hbWVz
cGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBl
bnVtLXZhbHVlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlz
cGF0Y2hlcnMuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKK0Bwcm90b2NvbCBUZXN0
UHJvdG9jb2xDb21tYW5kRG9tYWluRG9tYWluSGFuZGxlcjsKKworbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CisKKworY2xhc3MgT2JqQ0luc3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hl
ciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIg
eworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIE9iakNJbnNwZWN0
b3JDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sQ29tbWFuZERv
bWFpbkRvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KKyAg
ICB2b2lkIGNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlKGxvbmcgcmVxdWVzdElkKSBmaW5hbDsK
K3ByaXZhdGU6CisgICAgUmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbENvbW1hbmREb21haW5Eb21h
aW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgor
CisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAi
VGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlICJUZXN0UHJvdG9j
b2xJbnRlcm5hbC5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgor
I2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit2
b2lkIE9iakNJbnNwZWN0b3JDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmNvbW1hbmRX
aXRoRW51bVJldHVyblZhbHVlKGxvbmcgcmVxdWVzdElkKQoreworICAgIGlmICghW21fZGVsZWdh
dGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1
ZVdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgeworICAgICAgICBiYWNrZW5k
RGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3Bh
dGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0NvbW1hbmREb21haW4uY29tbWFuZFdpdGhFbnVtUmV0
dXJuVmFsdWUnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigp
LT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWQg
ZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7CisgICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hl
cjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2Vu
ZFBlbmRpbmdFcnJvcnMoKTsKKyAgICB9OworCisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihU
ZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluQ29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWVSZXR1cm5W
YWx1ZSByZXR1cm5WYWx1ZSkgeworICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHRPYmpl
Y3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0
cmluZygicmV0dXJuVmFsdWUiX3MsIHRvUHJvdG9jb2xTdHJpbmcocmV0dXJuVmFsdWUpKTsKKyAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92
ZShyZXN1bHRPYmplY3QpLCBmYWxzZSk7CisgICAgfTsKKworICAgIFttX2RlbGVnYXRlIGNvbW1h
bmRXaXRoRW51bVJldHVyblZhbHVlV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNj
ZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKK30KKworCit9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0K
KworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KKy8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQ
cm90b2NvbC5oPgorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0Bp
bnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0CitAcHJvcGVydHkg
KG5vbmF0b21pYywgcmV0YWluLCBzZXR0ZXI9c2V0Q29tbWFuZERvbWFpbkhhbmRsZXI6KSBpZDxU
ZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluRG9tYWluSGFuZGxlcj4gY29tbWFuZERvbWFpbkhhbmRs
ZXI7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFRlc3RQcm90b2NvbEV2ZW50RG9t
YWluRG9tYWluRXZlbnREaXNwYXRjaGVyICpldmVudERvbWFpbkV2ZW50RGlzcGF0Y2hlcjsKK0Bl
bmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorCisjIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
bi5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2ltcG9ydCAiVGVzdFBy
b3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRl
cm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVu
dGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5z
cGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgorewor
ICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7CisgICAgaWQ8
VGVzdFByb3RvY29sQ29tbWFuZERvbWFpbkRvbWFpbkhhbmRsZXI+IF9jb21tYW5kRG9tYWluSGFu
ZGxlcjsKKyAgICBUZXN0UHJvdG9jb2xFdmVudERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAq
X2V2ZW50RG9tYWluRXZlbnREaXNwYXRjaGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIK
K3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0
dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250
cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBb
X2NvbW1hbmREb21haW5IYW5kbGVyIHJlbGVhc2VdOworICAgIFtfZXZlbnREb21haW5FdmVudERp
c3BhdGNoZXIgcmVsZWFzZV07CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistICh2b2lkKXNl
dENvbW1hbmREb21haW5IYW5kbGVyOihpZDxUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluRG9tYWlu
SGFuZGxlcj4paGFuZGxlcgoreworICAgIGlmIChoYW5kbGVyID09IF9jb21tYW5kRG9tYWluSGFu
ZGxlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgW19jb21tYW5kRG9tYWluSGFuZGxlciByZWxl
YXNlXTsKKyAgICBfY29tbWFuZERvbWFpbkhhbmRsZXIgPSBbaGFuZGxlciByZXRhaW5dOworCisg
ICAgYXV0byBhbHRlcm5hdGVEaXNwYXRjaGVyID0gbWFrZVVuaXF1ZTxPYmpDSW5zcGVjdG9yQ29t
bWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPihoYW5kbGVyKTsKKyAgICBhdXRvIGFsdGVybmF0
ZUFnZW50ID0gbWFrZVVuaXF1ZTxBbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudDxDb21tYW5kRG9t
YWluQmFja2VuZERpc3BhdGNoZXIsIEFsdGVybmF0ZUNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0
Y2hlcj4+KCJDb21tYW5kRG9tYWluIl9zLCAqX2NvbnRyb2xsZXIsIFdURk1vdmUoYWx0ZXJuYXRl
RGlzcGF0Y2hlcikpOworICAgIF9jb250cm9sbGVyLT5hcHBlbmRFeHRyYUFnZW50KFdURk1vdmUo
YWx0ZXJuYXRlQWdlbnQpKTsKK30KKworLSAoaWQ8VGVzdFByb3RvY29sQ29tbWFuZERvbWFpbkRv
bWFpbkhhbmRsZXI+KWNvbW1hbmREb21haW5IYW5kbGVyCit7CisgICAgcmV0dXJuIF9jb21tYW5k
RG9tYWluSGFuZGxlcjsKK30KKworLSAoVGVzdFByb3RvY29sRXZlbnREb21haW5Eb21haW5FdmVu
dERpc3BhdGNoZXIgKilldmVudERvbWFpbkV2ZW50RGlzcGF0Y2hlcgoreworICAgIGlmICghX2V2
ZW50RG9tYWluRXZlbnREaXNwYXRjaGVyKQorICAgICAgICBfZXZlbnREb21haW5FdmVudERpc3Bh
dGNoZXIgPSBbW1Rlc3RQcm90b2NvbEV2ZW50RG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyIGFs
bG9jXSBpbml0V2l0aENvbnRyb2xsZXI6X2NvbnRyb2xsZXJdOworICAgIHJldHVybiBfZXZlbnRE
b21haW5FdmVudERpc3BhdGNoZXI7Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2
ZW50RGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVt
LXZhbHVlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
KyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcg
bmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbEV2ZW50
RG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyCit7CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JD
b250cm9sbGVyKiBfY29udHJvbGxlcjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29u
dHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCit7Cisg
ICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBu
aWw7CisgICAgQVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250cm9sbGVyID0gY29udHJvbGxl
cjsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClldmVudFdpdGhFbnVtUGFyYW1ldGVy
V2l0aFBhcmFtZXRlcjooVGVzdFByb3RvY29sRXZlbnREb21haW5FdmVudFdpdGhFbnVtUGFyYW1l
dGVyUGFyYW1ldGVyKXBhcmFtZXRlcgoreworICAgIGNvbnN0IEZyb250ZW5kUm91dGVyJiByb3V0
ZXIgPSBfY29udHJvbGxlci0+ZnJvbnRlbmRSb3V0ZXIoKTsKKworICAgIFJlZjxKU09OOjpPYmpl
Y3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBqc29uTWVzc2Fn
ZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJFdmVudERvbWFpbi5ldmVudFdpdGhFbnVtUGFyYW1l
dGVyIl9zKTsKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiBwYXJhbXNPYmplY3QgPSBKU09OOjpPYmpl
Y3Q6OmNyZWF0ZSgpOworICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJwYXJhbWV0ZXIiX3Ms
IHRvUHJvdG9jb2xTdHJpbmcocGFyYW1ldGVyKSk7CisgICAganNvbk1lc3NhZ2UtPnNldE9iamVj
dCgicGFyYW1zIl9zLCBXVEZNb3ZlKHBhcmFtc09iamVjdCkpOworICAgIHJvdXRlci5zZW5kRXZl
bnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKK30KKworQGVuZAorCisKKyMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZh
bHVlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNp
bXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3Iv
UldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+CisKKworCisKKwordHlwZWRlZiBOU19FTlVNKE5TSW50
ZWdlciwgVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0pIHsKKyAgICBUZXN0UHJvdG9jb2xUeXBl
RG9tYWluRW51bVNoYXJlZCwKKyAgICBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bVJlZCwKKyAg
ICBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bUdyZWVuLAorICAgIFRlc3RQcm90b2NvbFR5cGVE
b21haW5FbnVtQmx1ZSwKK307CisKKworCitAcHJvdG9jb2wgVGVzdFByb3RvY29sQ29tbWFuZERv
bWFpbkRvbWFpbkhhbmRsZXIgPE5TT2JqZWN0PgorQG9wdGlvbmFsCistICh2b2lkKWNvbW1hbmRX
aXRoRW51bVJldHVyblZhbHVlV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVy
cm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKShUZXN0UHJvdG9jb2xD
b21tYW5kRG9tYWluQ29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWVSZXR1cm5WYWx1ZSByZXR1cm5W
YWx1ZSkpc3VjY2Vzc0NhbGxiYWNrOworQGVuZAorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5
ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sRXZlbnREb21haW5Eb21haW5F
dmVudERpc3BhdGNoZXIgOiBOU09iamVjdAorLSAodm9pZClldmVudFdpdGhFbnVtUGFyYW1ldGVy
V2l0aFBhcmFtZXRlcjooVGVzdFByb3RvY29sRXZlbnREb21haW5FdmVudFdpdGhFbnVtUGFyYW1l
dGVyUGFyYW1ldGVyKXBhcmFtZXRlcjsKK0BlbmQKKworCisjaW1wb3J0IDxXZWJJbnNwZWN0b3Iv
UldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+CisKKyMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90
b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKKyNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2lt
cG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKworQGludGVyZmFjZSBUZXN0UHJvdG9jb2xFdmVudERv
bWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAoUHJpdmF0ZSkKKy0gKGluc3RhbmNldHlwZSlpbml0
V2l0aENvbnRyb2xsZXI6KEluc3BlY3Rvcjo6QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVy
Kiljb250cm9sbGVyOworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJu
YWwuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2Nv
bC5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5o
PgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1U
eXBlPgorT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3Ry
aW5nJiB2YWx1ZSk7CisKKworaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90
b2NvbFR5cGVEb21haW5FbnVtIHZhbHVlKQoreworICAgIHN3aXRjaCh2YWx1ZSkgeworICAgIGNh
c2UgVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1TaGFyZWQ6CisgICAgICAgIHJldHVybiAic2hh
cmVkIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1SZWQ6CisgICAgICAg
IHJldHVybiAicmVkIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1HcmVl
bjoKKyAgICAgICAgcmV0dXJuICJncmVlbiJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbFR5cGVE
b21haW5FbnVtQmx1ZToKKyAgICAgICAgcmV0dXJuICJibHVlIl9zOworICAgIH0KK30KKwordGVt
cGxhdGU8PgoraW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtPiBmcm9t
UHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0g
InNoYXJlZCIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bVNoYXJl
ZDsKKyAgICBpZiAodmFsdWUgPT0gInJlZCIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xU
eXBlRG9tYWluRW51bVJlZDsKKyAgICBpZiAodmFsdWUgPT0gImdyZWVuIikKKyAgICAgICAgcmV0
dXJuIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtR3JlZW47CisgICAgaWYgKHZhbHVlID09ICJi
bHVlIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtQmx1ZTsKKyAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKwor
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorCisjIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMu
aCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBl
UGFyc2VyLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJp
dmF0ZS5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW50ZXJmYWNlIFRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucyAoVHlwZURvbWFpbkRvbWFpbikKKworKyAodm9pZClfcGFy
c2VUeXBlRG9tYWluRW51bTooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBh
eWxvYWQ7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucyAoVHlwZURvbWFpbkRvbWFpbikKKworKyAodm9pZClfcGFyc2VUeXBlRG9tYWluRW51bToo
TlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJP
V19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBjbGFzc10pOworICAg
IE9wdGlvbmFsPFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtPiByZXN1bHQgPSBJbnNwZWN0b3I6
OmZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bT4ocGF5bG9hZCk7
CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfRU5VTV9WQUxVRShyZXN1bHQsIEAiVHlwZURv
bWFpbkVudW0iKTsKKyAgICAqb3V0VmFsdWUgPSBAKHJlc3VsdC52YWx1ZSgpKTsKK30KKworQGVu
ZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisKKyMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2lt
cG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0
b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorI2ltcG9ydCA8d3RmL0Fzc2VydGlv
bnMuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNw
ZWN0b3I7CisKKworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC9ldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29u
LXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC9ldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5q
c29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uODE3ZTNh
NTZjYTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4t
ZGVidWdnYWJsZVR5cGUuanNvbi1yZXN1bHQKQEAgLTAsMCArMSwxMDMwIEBACisjIyMgQmVnaW4g
RmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5
cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisvLyBE
b21haW4KK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIkRvbWFpbiIsIG51bGwpOwor
SW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIkRvbWFpbi5Db21tYW5kIiwgbnVsbCwg
W10sIFtdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudCgiRG9tYWluLkV2ZW50Iiwg
WyJwYWdlIiwgIndvcmtlciJdLCBbXSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWlu
RGlzcGF0Y2hlciA9IEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEaXNwYXRjaGVyLmJpbmQoSW5z
cGVjdG9yQmFja2VuZCwgIkRvbWFpbiIpOworSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFp
bigiRG9tYWluIiwgWyJwYWdlIl0pOworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29t
bWFuZHMuanMKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hl
cnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRhcmdldFR5cGUt
bWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVz
LmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIu
aD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgor
CituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXIgeworcHVibGljOgorICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tl
bmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1v
dmUoZGlzcGF0Y2hlcik7IH0KKyAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNo
ZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Citwcml2YXRl
OgorICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKK307
CisKKworY2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0
ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgfkFsdGVybmF0
ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIENvbW1hbmQo
bG9uZyBjYWxsSWQpID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5k
aWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjIyMgRW5kIEZp
bGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTog
VGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJy
b3JTdHJpbmc7CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
K2NsYXNzIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyOworI2VuZGlmIC8vIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCitjbGFzcyBEb21haW5CYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBDb21tYW5kKEVy
cm9yU3RyaW5nJikgPSAwOworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgfkRvbWFpbkJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlcigpOworfTsKKworY2xhc3MgRG9tYWluQmFja2VuZERpc3BhdGNoZXIg
ZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgor
ICAgIHN0YXRpYyBSZWY8RG9tYWluQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlz
cGF0Y2hlciYsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIHZvaWQgZGlz
cGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2Jq
ZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOworcHJpdmF0ZToKKyAgICB2b2lkIENvbW1hbmQobG9uZyBy
ZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisjaWYgRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCitwdWJsaWM6CisgICAgdm9pZCBzZXRB
bHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKiBhbHRl
cm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3Bh
dGNoZXI7IH0KK3ByaXZhdGU6CisgICAgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIq
IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciB7IG51bGxwdHIgfTsKKyNlbmRpZiAvLyBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK3ByaXZhdGU6CisgICAgRG9tYWluQmFja2Vu
ZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXIqKTsKKyAgICBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQgeyBu
dWxscHRyIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTog
VGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERp
c3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRh
cmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMu
aD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
KyNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCisjZW5kaWYgLy8g
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKK25hbWVzcGFjZSBJbnNw
ZWN0b3IgeworCitEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5Eb21haW5CYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KKworUmVmPERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBE
b21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5k
RGlzcGF0Y2hlciwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKK3sKKyAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlz
cGF0Y2hlciwgYWdlbnQpKTsKK30KKworRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkRvbWFpbkJh
Y2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgRG9t
YWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKKyAgICA6IFN1cHBsZW1lbnRhbEJh
Y2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQorICAgICwgbV9hZ2VudChhZ2VudCkK
K3sKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4o
IkRvbWFpbiJfcywgdGhpcyk7Cit9CisKK3ZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmRp
c3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9i
amVjdD4mJiBtZXNzYWdlKQoreworICAgIFJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gcHJv
dGVjdCgqdGhpcyk7CisKKyAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOworICAg
IG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsKKworICAgIGlmICht
ZXRob2QgPT0gIkNvbW1hbmQiKSB7CisgICAgICAgIENvbW1hbmQocmVxdWVzdElkLCBXVEZNb3Zl
KHBhcmFtZXRlcnMpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5v
dEZvdW5kLCAiJ0RvbWFpbi4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOworfQorCit2
b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiYmKQoreworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQorICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKKyAgICAgICAgbV9h
bHRlcm5hdGVEaXNwYXRjaGVyLT5Db21tYW5kKHJlcXVlc3RJZCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
CisKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQg
PSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYWdlbnQtPkNvbW1hbmQoZXJyb3IpOwor
CisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+
c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7CisgICAgZWxz
ZQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tl
bmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOworfQorCit9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJz
LmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9t
YWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3Rz
LmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEZyb250ZW5kUm91dGVy
OworCitjbGFzcyBEb21haW5Gcm9udGVuZERpc3BhdGNoZXIgeworICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOworcHVibGljOgorICAgIERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcihGcm9udGVu
ZFJvdXRlciYgZnJvbnRlbmRSb3V0ZXIpIDogbV9mcm9udGVuZFJvdXRlcihmcm9udGVuZFJvdXRl
cikgeyB9CisgICAgdm9pZCBFdmVudCgpOworcHJpdmF0ZToKKyAgICBGcm9udGVuZFJvdXRlciYg
bV9mcm9udGVuZFJvdXRlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVu
ZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0
RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit2b2lkIERvbWFpbkZy
b250ZW5kRGlzcGF0Y2hlcjo6RXZlbnQoKQoreworICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25N
ZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0U3Ry
aW5nKCJtZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOworCisgICAgbV9mcm9udGVuZFJvdXRl
ci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMu
Y3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1k
ZWJ1Z2dhYmxlVHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
UHJvdG9jb2xUeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFj
ZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworCisKKworCisKKwor
CisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgor
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbE9iamVjdHMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
ZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorCisjaW5jbHVkZSA8d3RmL09w
dGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5z
cGVjdG9yIHsKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworCisKK30gLy8gbmFtZXNwYWNlIFBy
b3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbE9iamVjdHMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5k
RGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRh
cmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2luY2x1ZGUgPHd0Zi9S
ZXRhaW5QdHIuaD4KKworQHByb3RvY29sIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI7
CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKK2NsYXNzIE9iakNJbnNwZWN0b3JEb21haW5C
YWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlz
cGF0Y2hlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgT2Jq
Q0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbERvbWFpbkRv
bWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KKyAgICB2b2lk
IENvbW1hbmQobG9uZyByZXF1ZXN0SWQpIGZpbmFsOworcHJpdmF0ZToKKyAgICBSZXRhaW5QdHI8
aWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNr
ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERp
c3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnQtdGFy
Z2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgorLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBv
cnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSAiVGVzdFBy
b3RvY29sSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMu
aCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsK
Kwordm9pZCBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9u
ZyByZXF1ZXN0SWQpCit7CisgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6
QHNlbGVjdG9yKENvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsK
KyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0
SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uQ29tbWFuZCcg
d2FzIG5vdCBmb3VuZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5k
aW5nRXJyb3JzKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZCBlcnJvckNhbGxi
YWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJF
cnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vy
cm9ycygpOworICAgIH07CisKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeeworICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgfTsKKworICAgIFttX2RlbGVnYXRlIENvbW1hbmRXaXRo
RXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJh
Y2tdOworfQorCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbi5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
ZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxXZWJJbnNw
ZWN0b3IvVGVzdFByb3RvY29sLmg+CisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZh
dWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QK
K0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4sIHNldHRlcj1zZXREb21haW5IYW5kbGVyOikg
aWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4gZG9tYWluSGFuZGxlcjsKK0Bwcm9w
ZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnRE
aXNwYXRjaGVyICpkb21haW5FdmVudERpc3BhdGNoZXI7CitAZW5kCisKKworIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbENvbmZpZ3VyYXRpb24ubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBl
dmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90
b2NvbENvbmZpZ3VyYXRpb24uaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIK
KyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW1w
b3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKwordXNp
bmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENv
bmZpZ3VyYXRpb24KK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250
cm9sbGVyOworICAgIGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IF9kb21haW5I
YW5kbGVyOworICAgIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqX2Rv
bWFpbkV2ZW50RGlzcGF0Y2hlcjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJv
bGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCit7CisgICAg
c2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7
CisgICAgQVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsK
KyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgW19kb21haW5I
YW5kbGVyIHJlbGVhc2VdOworICAgIFtfZG9tYWluRXZlbnREaXNwYXRjaGVyIHJlbGVhc2VdOwor
ICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAodm9pZClzZXREb21haW5IYW5kbGVyOihpZDxU
ZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiloYW5kbGVyCit7CisgICAgaWYgKGhhbmRs
ZXIgPT0gX2RvbWFpbkhhbmRsZXIpCisgICAgICAgIHJldHVybjsKKworICAgIFtfZG9tYWluSGFu
ZGxlciByZWxlYXNlXTsKKyAgICBfZG9tYWluSGFuZGxlciA9IFtoYW5kbGVyIHJldGFpbl07CisK
KyAgICBhdXRvIGFsdGVybmF0ZURpc3BhdGNoZXIgPSBtYWtlVW5pcXVlPE9iakNJbnNwZWN0b3JE
b21haW5CYWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7CisgICAgYXV0byBhbHRlcm5hdGVBZ2Vu
dCA9IG1ha2VVbmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8RG9tYWluQmFja2VuZERp
c3BhdGNoZXIsIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyPj4oIkRvbWFpbiJfcywg
Kl9jb250cm9sbGVyLCBXVEZNb3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIpKTsKKyAgICBfY29udHJv
bGxlci0+YXBwZW5kRXh0cmFBZ2VudChXVEZNb3ZlKGFsdGVybmF0ZUFnZW50KSk7Cit9CisKKy0g
KGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+KWRvbWFpbkhhbmRsZXIKK3sKKyAg
ICByZXR1cm4gX2RvbWFpbkhhbmRsZXI7Cit9CisKKy0gKFRlc3RQcm90b2NvbERvbWFpbkRvbWFp
bkV2ZW50RGlzcGF0Y2hlciAqKWRvbWFpbkV2ZW50RGlzcGF0Y2hlcgoreworICAgIGlmICghX2Rv
bWFpbkV2ZW50RGlzcGF0Y2hlcikKKyAgICAgICAgX2RvbWFpbkV2ZW50RGlzcGF0Y2hlciA9IFtb
VGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyIGFsbG9jXSBpbml0V2l0aENv
bnRyb2xsZXI6X2NvbnRyb2xsZXJdOworICAgIHJldHVybiBfZG9tYWluRXZlbnREaXNwYXRjaGVy
OworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9u
Lm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGlu
Zy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1w
b3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPHd0Zi9KU09OVmFs
dWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBU
ZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIKK3sKKyAgICBBdWdtZW50YWJs
ZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworfQorCistIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRy
b2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAg
ICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIg
PSBjb250cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKUV2ZW50Cit7Cisg
ICAgY29uc3QgRnJvbnRlbmRSb3V0ZXImIHJvdXRlciA9IF9jb250cm9sbGVyLT5mcm9udGVuZFJv
dXRlcigpOworCisgICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmpl
Y3Q6OmNyZWF0ZSgpOworICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRv
bWFpbi5FdmVudCJfcyk7CisgICAgcm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09O
U3RyaW5nKCkpOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVu
dERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9t
YWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKKyNpbXBvcnQg
PFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KKworCisKKworCisKKworCitA
cHJvdG9jb2wgVGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlciA8TlNPYmplY3Q+CitAb3B0
aW9uYWwKKy0gKHZvaWQpQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5n
ICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikodm9pZCkpc3Vj
Y2Vzc0NhbGxiYWNrOworQGVuZAorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVs
dCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVy
IDogTlNPYmplY3QKKy0gKHZvaWQpRXZlbnQ7CitAZW5kCisKKworI2ltcG9ydCA8V2ViSW5zcGVj
dG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgorCisjIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5h
bC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1t
YXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFs
dWVzLmg+CisKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRj
aGVyIChQcml2YXRlKQorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooSW5zcGVj
dG9yOjpBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXI7CitAZW5kCisK
KworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisKKyMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBl
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9y
dCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJh
eUNvbnZlcnNpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBPYmpDRW51bVR5cGU+CitPcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0
cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisK
KyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2Fi
bGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisKKyNpbXBvcnQgIlRlc3RQ
cm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgorI2ltcG9ydCA8
V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKwordXNpbmcgbmFt
ZXNwYWNlIEluc3BlY3RvcjsKKworCisKKworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5t
bQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRhcmdldFR5cGUtbWF0
Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKwor
I2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDxXZWJJbnNw
ZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorI2ltcG9ydCA8d3RmL0Fzc2Vy
dGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJ
bnNwZWN0b3I7CisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVj
dGVkL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnRzLXdp
dGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMC4uODNhYmRjNzdiMjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnRzLXdp
dGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uLXJlc3VsdApAQCAtMCwwICsxLDExODIgQEAKKyMj
IyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworLy8gRGF0YWJhc2UK
K0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIkRhdGFiYXNlIiwgbnVsbCk7CitJbnNw
ZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnQoIkRhdGFiYXNlLmRpZEV4ZWN1dGVPcHRpb25hbFBh
cmFtZXRlcnMiLCBudWxsLCBbImNvbHVtbk5hbWVzIiwgIm5vdGVzIiwgInRpbWVzdGFtcCIsICJ2
YWx1ZXMiLCAicGF5bG9hZCIsICJzcWxFcnJvciIsICJzY3JlZW5Db2xvciIsICJhbHRlcm5hdGVD
b2xvcnMiLCAicHJpbnRDb2xvciJdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudCgi
RGF0YWJhc2UuZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIiwgbnVsbCwgWyJjb2x1bW5O
YW1lcyIsICJub3RlcyIsICJ0aW1lc3RhbXAiLCAidmFsdWVzIiwgInBheWxvYWQiLCAic3FsRXJy
b3IiLCAic2NyZWVuQ29sb3IiLCAiYWx0ZXJuYXRlQ29sb3JzIiwgInByaW50Q29sb3IiXSk7CitJ
bnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRGF0YWJhc2VEaXNwYXRjaGVyID0gSW5zcGVjdG9yQmFj
a2VuZC5yZWdpc3RlckRpc3BhdGNoZXIuYmluZChJbnNwZWN0b3JCYWNrZW5kLCAiRGF0YWJhc2Ui
KTsKK0luc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkRhdGFiYXNlIiwgbnVsbCk7Cisj
IyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcworCisjIyMgQmVnaW4gRmls
ZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisj
aWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJv
bnRlbmRSb3V0ZXIuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRj
aGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERp
c3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9CisgICAgQmFja2VuZERpc3BhdGNoZXIq
IGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5n
ZXQoKTsgfQorcHJpdmF0ZToKKyAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2Vu
ZERpc3BhdGNoZXI7Cit9OworCisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2Vu
ZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorIyMjIEVuZCBG
aWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6
IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRl
c3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCitu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKKwor
Cit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNw
YXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBh
cmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5o
IgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4K
KyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3ll
ZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5k
RGlzcGF0Y2hlcnMuaCIKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCit9IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisj
IyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZh
bHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5z
cGVjdG9yIHsKKworY2xhc3MgRnJvbnRlbmRSb3V0ZXI7CisKK2NsYXNzIERhdGFiYXNlRnJvbnRl
bmREaXNwYXRjaGVyIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAg
ICBEYXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hlcihGcm9udGVuZFJvdXRlciYgZnJvbnRlbmRSb3V0
ZXIpIDogbV9mcm9udGVuZFJvdXRlcihmcm9udGVuZFJvdXRlcikgeyB9CisgICAgdm9pZCBkaWRF
eGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IGNv
bHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIG5vdGVzLCBjb25zdCBkb3VibGUqIHRpbWVzdGFtcCwg
UmVmUHRyPEpTT046Ok9iamVjdD4gdmFsdWVzLCBSZWZQdHI8SlNPTjo6VmFsdWU+IHBheWxvYWQs
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVycm9yLCBj
b25zdCBTdHJpbmcqIHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0
YWJhc2U6OkNvbG9yTGlzdD4gYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcqIHByaW50Q29s
b3IpOworICAgIHZvaWQgZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKFJlZlB0cjxKU09O
OjpBcnJheU9mPFN0cmluZz4+IGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG5vdGVzLCBkb3Vi
bGUgdGltZXN0YW1wLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiB2YWx1ZXMsIFJlZlB0cjxKU09OOjpW
YWx1ZT4gcGF5bG9hZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJv
cj4gc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiBhbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0
cmluZyYgcHJpbnRDb2xvcik7Citwcml2YXRlOgorICAgIEZyb250ZW5kUm91dGVyJiBtX2Zyb250
ZW5kUm91dGVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6
IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVu
ZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50
cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEZy
b250ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1l
c3BhY2UgSW5zcGVjdG9yIHsKKwordm9pZCBEYXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hlcjo6ZGlk
RXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiBj
b2x1bW5OYW1lcywgY29uc3QgU3RyaW5nKiBub3RlcywgY29uc3QgZG91YmxlKiB0aW1lc3RhbXAs
IFJlZlB0cjxKU09OOjpPYmplY3Q+IHZhbHVlcywgUmVmUHRyPEpTT046OlZhbHVlPiBwYXlsb2Fk
LCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBzcWxFcnJvciwg
Y29uc3QgU3RyaW5nKiBzY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpDb2xvckxpc3Q+IGFsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nKiBwcmludENv
bG9yKQoreworICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEYXRh
YmFzZS5kaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzIl9zKTsKKyAgICBSZWY8SlNPTjo6T2Jq
ZWN0PiBwYXJhbXNPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGlmIChjb2x1
bW5OYW1lcykKKyAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3Ms
IGNvbHVtbk5hbWVzKTsKKyAgICBpZiAobm90ZXMpCisgICAgICAgIHBhcmFtc09iamVjdC0+c2V0
U3RyaW5nKCJub3RlcyJfcywgKm5vdGVzKTsKKyAgICBpZiAodGltZXN0YW1wKQorICAgICAgICBw
YXJhbXNPYmplY3QtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCAqdGltZXN0YW1wKTsKKyAgICBp
ZiAodmFsdWVzKQorICAgICAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgidmFsdWVzIl9zLCB2
YWx1ZXMpOworICAgIGlmIChwYXlsb2FkKQorICAgICAgICBwYXJhbXNPYmplY3QtPnNldFZhbHVl
KCJwYXlsb2FkIl9zLCAqcGF5bG9hZCk7CisgICAgaWYgKHNxbEVycm9yKQorICAgICAgICBwYXJh
bXNPYmplY3QtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIHNxbEVycm9yKTsKKyAgICBpZiAoc2Ny
ZWVuQ29sb3IpCisgICAgICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJf
cywgKnNjcmVlbkNvbG9yKTsKKyAgICBpZiAoYWx0ZXJuYXRlQ29sb3JzKQorICAgICAgICBwYXJh
bXNPYmplY3QtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIGFsdGVybmF0ZUNvbG9ycyk7
CisgICAgaWYgKHByaW50Q29sb3IpCisgICAgICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJw
cmludENvbG9yIl9zLCAqcHJpbnRDb2xvcik7CisgICAganNvbk1lc3NhZ2UtPnNldE9iamVjdCgi
cGFyYW1zIl9zLCBXVEZNb3ZlKHBhcmFtc09iamVjdCkpOworCisgICAgbV9mcm9udGVuZFJvdXRl
ci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKK30KKwordm9pZCBEYXRh
YmFzZUZyb250ZW5kRGlzcGF0Y2hlcjo6ZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKFJl
ZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG5v
dGVzLCBkb3VibGUgdGltZXN0YW1wLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiB2YWx1ZXMsIFJlZlB0
cjxKU09OOjpWYWx1ZT4gcGF5bG9hZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFi
YXNlOjpFcnJvcj4gc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgc2NyZWVuQ29sb3IsIFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiBhbHRlcm5hdGVDb2xvcnMs
IGNvbnN0IFN0cmluZyYgcHJpbnRDb2xvcikKK3sKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29u
TWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAganNvbk1lc3NhZ2UtPnNldFN0
cmluZygibWV0aG9kIl9zLCAiRGF0YWJhc2UuZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJz
Il9zKTsKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiBwYXJhbXNPYmplY3QgPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOworICAgIHBhcmFtc09iamVjdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBj
b2x1bW5OYW1lcyk7CisgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBub3Rl
cyk7CisgICAgcGFyYW1zT2JqZWN0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgdGltZXN0YW1w
KTsKKyAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgidmFsdWVzIl9zLCB2YWx1ZXMpOworICAg
IHBhcmFtc09iamVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIHBheWxvYWQpOworICAgIHBhcmFt
c09iamVjdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgc3FsRXJyb3IpOworICAgIHBhcmFtc09i
amVjdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgc2NyZWVuQ29sb3IpOworICAgIHBhcmFt
c09iamVjdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgYWx0ZXJuYXRlQ29sb3JzKTsK
KyAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgcHJpbnRDb2xvcik7
CisgICAganNvbk1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIl9zLCBXVEZNb3ZlKHBhcmFtc09i
amVjdCkpOworCisgICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRv
SlNPTlN0cmluZygpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQg
RmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xPYmplY3RzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVu
dHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMu
aD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCituYW1lc3BhY2UgUHJvdG9jb2wgewor
CisKKworLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCituYW1lc3BhY2UgRGF0YWJhc2UgeworY2xh
c3MgRXJyb3I7Cit9IC8vIERhdGFiYXNlCisvLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMu
CisKKworLy8gVHlwZWRlZnMuCituYW1lc3BhY2UgRGF0YWJhc2UgeworLyogVW5pcXVlIGlkZW50
aWZpZXIgb2YgRGF0YWJhc2Ugb2JqZWN0LiAqLwordHlwZWRlZiBTdHJpbmcgRGF0YWJhc2VJZDsK
K3R5cGVkZWYgU3RyaW5nIFByaW1hcnlDb2xvcnM7Cit0eXBlZGVmIEpTT046OkFycmF5T2Y8U3Ry
aW5nPiBDb2xvckxpc3Q7Cit9IC8vIERhdGFiYXNlCisvLyBFbmQgb2YgdHlwZWRlZnMuCisKK25h
bWVzcGFjZSBEYXRhYmFzZSB7CisvKiBEYXRhYmFzZSBlcnJvci4gKi8KK2NsYXNzIEVycm9yIDog
cHVibGljIEpTT046Ok9iamVjdEJhc2UgeworcHVibGljOgorICAgIGVudW0geworICAgICAgICBO
b0ZpZWxkc1NldCA9IDAsCisgICAgICAgIE1lc3NhZ2VTZXQgPSAxIDw8IDAsCisgICAgICAgIENv
ZGVTZXQgPSAxIDw8IDEsCisgICAgICAgIEFsbEZpZWxkc1NldCA9IChNZXNzYWdlU2V0IHwgQ29k
ZVNldCkKKyAgICB9OworCisgICAgdGVtcGxhdGU8aW50IFNUQVRFPgorICAgIGNsYXNzIEJ1aWxk
ZXIgeworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVzdWx0
OworCisgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNh
c3RTdGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2Fz
dDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1
aWxkZXIoUmVmPC8qRXJyb3IqL0pTT046Ok9iamVjdD4mJiBvYmplY3QpCisgICAgICAgICAgICA6
IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5p
dF9zdGF0ZSk7CisgICAgICAgIH0KKyAgICAgICAgZnJpZW5kIGNsYXNzIEVycm9yOworICAgIHB1
YmxpYzoKKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTWVzc2FnZVNldD4mIHNldE1lc3NhZ2Uo
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIE1lc3NhZ2VTZXQpLCBwcm9wZXJ0eV9tZXNzYWdlX2FscmVhZHlfc2V0KTsK
KyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1lc3NhZ2UiX3MsIHZhbHVlKTsKKyAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TWVzc2FnZVNldD4oKTsKKyAgICAgICAgfQorCisg
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2RlU2V0PiYgc2V0Q29kZShpbnQgdmFsdWUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2RlU2V0KSwgcHJv
cGVydHlfY29kZV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdl
cigiY29kZSJfcywgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb2RlU2V0
PigpOworICAgICAgICB9CisKKyAgICAgICAgUmVmPEVycm9yPiByZWxlYXNlKCkKKyAgICAgICAg
eworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1
bHRfaXNfbm90X3JlYWR5KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihFcnJv
cikgPT0gc2l6ZW9mKEpTT046Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsKKworICAgICAgICAgICAg
UmVmPEpTT046Ok9iamVjdD4ganNvblJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7
CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVm
PEVycm9yPio+KCZqc29uUmVzdWx0KSk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
ICAgICB9CisgICAgfTsKKworICAgIC8qCisgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgor
ICAgICAqIFJlZjxFcnJvcj4gcmVzdWx0ID0gRXJyb3I6OmNyZWF0ZSgpCisgICAgICogICAgIC5z
ZXRNZXNzYWdlKC4uLikKKyAgICAgKiAgICAgLnNldENvZGUoLi4uKQorICAgICAqICAgICAucmVs
ZWFzZSgpOworICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVj
dDo6Y3JlYXRlKCkpOworICAgIH0KK307CisKK30gLy8gRGF0YWJhc2UKKworCisKK30gLy8gbmFt
ZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9i
amVjdHMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgt
b3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xP
YmplY3RzLmgiCisKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCituYW1lc3BhY2UgUHJvdG9j
b2wgeworCisKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNp
bmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKKworCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwor
Cit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xC
YWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2Vu
ZERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRz
LXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3Rv
Y29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5h
bC5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2luY2x1ZGUg
PHd0Zi9KU09OVmFsdWVzLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0
Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBh
cmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+CisKK19fYXR0cmlidXRlX18o
KHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1
cmF0aW9uIDogTlNPYmplY3QKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgVGVzdFBy
b3RvY29sRGF0YWJhc2VEb21haW5FdmVudERpc3BhdGNoZXIgKmRhdGFiYXNlRXZlbnREaXNwYXRj
aGVyOworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5o
CisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVy
cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBv
cnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29s
SW50ZXJuYWwuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgor
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgor
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXJzLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRl
c3RQcm90b2NvbENvbmZpZ3VyYXRpb24KK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRy
b2xsZXIqIF9jb250cm9sbGVyOworICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluRXZlbnRE
aXNwYXRjaGVyICpfZGF0YWJhc2VFdmVudERpc3BhdGNoZXI7Cit9CisKKy0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29u
dHJvbGxlcgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAg
ICAgICByZXR1cm4gbmlsOworICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBfY29udHJvbGxl
ciA9IGNvbnRyb2xsZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYwor
eworICAgIFtfZGF0YWJhc2VFdmVudERpc3BhdGNoZXIgcmVsZWFzZV07CisgICAgW3N1cGVyIGRl
YWxsb2NdOworfQorCistIChUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkV2ZW50RGlzcGF0Y2hl
ciAqKWRhdGFiYXNlRXZlbnREaXNwYXRjaGVyCit7CisgICAgaWYgKCFfZGF0YWJhc2VFdmVudERp
c3BhdGNoZXIpCisgICAgICAgIF9kYXRhYmFzZUV2ZW50RGlzcGF0Y2hlciA9IFtbVGVzdFByb3Rv
Y29sRGF0YWJhc2VEb21haW5FdmVudERpc3BhdGNoZXIgYWxsb2NdIGluaXRXaXRoQ29udHJvbGxl
cjpfY29udHJvbGxlcl07CisgICAgcmV0dXJuIF9kYXRhYmFzZUV2ZW50RGlzcGF0Y2hlcjsKK30K
KworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQor
CisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRl
cnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1w
b3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVz
cGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xEYXRhYmFzZURv
bWFpbkV2ZW50RGlzcGF0Y2hlcgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxl
ciogX2NvbnRyb2xsZXI7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6
KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgoreworICAgIHNlbGYg
PSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAg
IEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAg
cmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVyc1dp
dGhDb2x1bW5OYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKWNvbHVtbk5hbWVzIG5vdGVz
OihOU1N0cmluZyAqKilub3RlcyB0aW1lc3RhbXA6KGRvdWJsZSAqKXRpbWVzdGFtcCB2YWx1ZXM6
KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKil2YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xKU09O
T2JqZWN0ICoqKXBheWxvYWQgc3FsRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKiop
c3FsRXJyb3Igc2NyZWVuQ29sb3I6KE5TU3RyaW5nICoqKXNjcmVlbkNvbG9yIGFsdGVybmF0ZUNv
bG9yczooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKWFsdGVybmF0ZUNvbG9ycyBwcmludENvbG9y
OihOU1N0cmluZyAqKilwcmludENvbG9yCit7CisgICAgY29uc3QgRnJvbnRlbmRSb3V0ZXImIHJv
dXRlciA9IF9jb250cm9sbGVyLT5mcm9udGVuZFJvdXRlcigpOworCisgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVz
Iik7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKG5vdGVz
LCBAIm5vdGVzIik7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1F
VEVSKHZhbHVlcywgQCJ2YWx1ZXMiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJ
T05BTF9QQVJBTUVURVIocGF5bG9hZCwgQCJwYXlsb2FkIik7CisgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHNxbEVycm9yLCBAInNxbEVycm9yIik7CisgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHNjcmVlbkNvbG9yLCBA
InNjcmVlbkNvbG9yIik7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFS
QU1FVEVSKGFsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsKKyAgICBUSFJPV19F
WENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIocHJpbnRDb2xvciwgQCJwcmludENv
bG9yIik7CisKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVj
dDo6Y3JlYXRlKCk7CisgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRGF0
YWJhc2UuZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyJfcyk7CisgICAgUmVmPEpTT046Ok9i
amVjdD4gcGFyYW1zT2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBpZiAoY29s
dW1uTmFtZXMpCisgICAgICAgIHBhcmFtc09iamVjdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9z
LCB0b0pTT05TdHJpbmdBcnJheSgoKmNvbHVtbk5hbWVzKSkpOworICAgIGlmIChub3RlcykKKyAg
ICAgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCAoKm5vdGVzKSk7CisgICAg
aWYgKHRpbWVzdGFtcCkKKyAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXREb3VibGUoInRpbWVzdGFt
cCJfcywgKCp0aW1lc3RhbXApKTsKKyAgICBpZiAodmFsdWVzKQorICAgICAgICBwYXJhbXNPYmpl
Y3QtPnNldE9iamVjdCgidmFsdWVzIl9zLCBbKCp2YWx1ZXMpIHRvSlNPTk9iamVjdF0pOworICAg
IGlmIChwYXlsb2FkKQorICAgICAgICBwYXJhbXNPYmplY3QtPnNldFZhbHVlKCJwYXlsb2FkIl9z
LCBbKCpwYXlsb2FkKSB0b0pTT05PYmplY3RdKTsKKyAgICBpZiAoc3FsRXJyb3IpCisgICAgICAg
IHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgWygqc3FsRXJyb3IpIHRvSlNP
Tk9iamVjdF0pOworICAgIGlmIChzY3JlZW5Db2xvcikKKyAgICAgICAgcGFyYW1zT2JqZWN0LT5z
ZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCAoKnNjcmVlbkNvbG9yKSk7CisgICAgaWYgKGFsdGVy
bmF0ZUNvbG9ycykKKyAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29s
b3JzIl9zLCB0b0pTT05TdHJpbmdBcnJheSgoKmFsdGVybmF0ZUNvbG9ycykpKTsKKyAgICBpZiAo
cHJpbnRDb2xvcikKKyAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInByaW50Q29sb3Ii
X3MsICgqcHJpbnRDb2xvcikpOworICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyJf
cywgV1RGTW92ZShwYXJhbXNPYmplY3QpKTsKKyAgICByb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNz
YWdlLT50b0pTT05TdHJpbmcoKSk7Cit9CisKKy0gKHZvaWQpZGlkRXhlY3V0ZU5vT3B0aW9uYWxQ
YXJhbWV0ZXJzV2l0aENvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5O
YW1lcyBub3RlczooTlNTdHJpbmcgKilub3RlcyB0aW1lc3RhbXA6KGRvdWJsZSl0aW1lc3RhbXAg
dmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKil2YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9j
b2xKU09OT2JqZWN0ICopcGF5bG9hZCBzcWxFcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJv
ciAqKXNxbEVycm9yIHNjcmVlbkNvbG9yOihOU1N0cmluZyAqKXNjcmVlbkNvbG9yIGFsdGVybmF0
ZUNvbG9yczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopYWx0ZXJuYXRlQ29sb3JzIHByaW50Q29s
b3I6KE5TU3RyaW5nICopcHJpbnRDb2xvcgoreworICAgIGNvbnN0IEZyb250ZW5kUm91dGVyJiBy
b3V0ZXIgPSBfY29udHJvbGxlci0+ZnJvbnRlbmRSb3V0ZXIoKTsKKworICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7
CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIobm90ZXMsIEAibm90
ZXMiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUih2YWx1ZXMs
IEAidmFsdWVzIik7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIo
cGF5bG9hZCwgQCJwYXlsb2FkIik7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9Q
QVJBTUVURVIoc3FsRXJyb3IsIEAic3FsRXJyb3IiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9S
X1JFUVVJUkVEX1BBUkFNRVRFUihzY3JlZW5Db2xvciwgQCJzY3JlZW5Db2xvciIpOworICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKGFsdGVybmF0ZUNvbG9ycywgQCJh
bHRlcm5hdGVDb2xvcnMiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFN
RVRFUihwcmludENvbG9yLCBAInByaW50Q29sb3IiKTsKKworICAgIFJlZjxKU09OOjpPYmplY3Q+
IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBqc29uTWVzc2FnZS0+
c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEYXRhYmFzZS5kaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFt
ZXRlcnMiX3MpOworICAgIFJlZjxKU09OOjpPYmplY3Q+IHBhcmFtc09iamVjdCA9IEpTT046Ok9i
amVjdDo6Y3JlYXRlKCk7CisgICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMi
X3MsIHRvSlNPTlN0cmluZ0FycmF5KGNvbHVtbk5hbWVzKSk7CisgICAgcGFyYW1zT2JqZWN0LT5z
ZXRTdHJpbmcoIm5vdGVzIl9zLCBub3Rlcyk7CisgICAgcGFyYW1zT2JqZWN0LT5zZXREb3VibGUo
InRpbWVzdGFtcCJfcywgdGltZXN0YW1wKTsKKyAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgi
dmFsdWVzIl9zLCBbdmFsdWVzIHRvSlNPTk9iamVjdF0pOworICAgIHBhcmFtc09iamVjdC0+c2V0
VmFsdWUoInBheWxvYWQiX3MsIFtwYXlsb2FkIHRvSlNPTk9iamVjdF0pOworICAgIHBhcmFtc09i
amVjdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgW3NxbEVycm9yIHRvSlNPTk9iamVjdF0pOwor
ICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgc2NyZWVuQ29sb3Ip
OworICAgIHBhcmFtc09iamVjdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgdG9KU09O
U3RyaW5nQXJyYXkoYWx0ZXJuYXRlQ29sb3JzKSk7CisgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJp
bmcoInByaW50Q29sb3IiX3MsIHByaW50Q29sb3IpOworICAgIGpzb25NZXNzYWdlLT5zZXRPYmpl
Y3QoInBhcmFtcyJfcywgV1RGTW92ZShwYXJhbXNPYmplY3QpKTsKKyAgICByb3V0ZXIuc2VuZEV2
ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cit9CisKK0BlbmQKKworCisjIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRz
LXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCisj
aW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+CisKKworQGNsYXNz
IFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I7CisKKworCisKK19fYXR0cmlidXRlX18oKHZpc2li
aWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9y
IDogUldJUHJvdG9jb2xKU09OT2JqZWN0CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2Fk
OihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKKy0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2Jq
ZWN0OworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdl
IGNvZGU6KGludCljb2RlOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNv
cHkpIE5TU3RyaW5nICptZXNzYWdlOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9t
aWMsIGFzc2lnbikgaW50IGNvZGU7CitAZW5kCisKKworCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmls
aXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5F
dmVudERpc3BhdGNoZXIgOiBOU09iamVjdAorLSAodm9pZClkaWRFeGVjdXRlT3B0aW9uYWxQYXJh
bWV0ZXJzV2l0aENvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopY29sdW1uTmFt
ZXMgbm90ZXM6KE5TU3RyaW5nICoqKW5vdGVzIHRpbWVzdGFtcDooZG91YmxlICopdGltZXN0YW1w
IHZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqKXZhbHVlcyBwYXlsb2FkOihSV0lQcm90
b2NvbEpTT05PYmplY3QgKiopcGF5bG9hZCBzcWxFcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VF
cnJvciAqKilzcWxFcnJvciBzY3JlZW5Db2xvcjooTlNTdHJpbmcgKiopc2NyZWVuQ29sb3IgYWx0
ZXJuYXRlQ29sb3JzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopYWx0ZXJuYXRlQ29sb3JzIHBy
aW50Q29sb3I6KE5TU3RyaW5nICoqKXByaW50Q29sb3I7CistICh2b2lkKWRpZEV4ZWN1dGVOb09w
dGlvbmFsUGFyYW1ldGVyc1dpdGhDb2x1bW5OYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICop
Y29sdW1uTmFtZXMgbm90ZXM6KE5TU3RyaW5nICopbm90ZXMgdGltZXN0YW1wOihkb3VibGUpdGlt
ZXN0YW1wIHZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopdmFsdWVzIHBheWxvYWQ6KFJX
SVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQgc3FsRXJyb3I6KFRlc3RQcm90b2NvbERhdGFi
YXNlRXJyb3IgKilzcWxFcnJvciBzY3JlZW5Db2xvcjooTlNTdHJpbmcgKilzY3JlZW5Db2xvciBh
bHRlcm5hdGVDb2xvcnM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWFsdGVybmF0ZUNvbG9ycyBw
cmludENvbG9yOihOU1N0cmluZyAqKXByaW50Q29sb3I7CitAZW5kCisKKworI2ltcG9ydCA8V2Vi
SW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgorCisjIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJ
bnRlcm5hbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgt
b3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3Rv
Y29sSlNPTk9iamVjdFByaXZhdGUuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRh
YmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwor
QGludGVyZmFjZSBUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkV2ZW50RGlzcGF0Y2hlciAoUHJp
dmF0ZSkKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEluc3BlY3Rvcjo6QXVn
bWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyOworQGVuZAorCisKKyMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1w
b3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+CisKK25hbWVz
cGFjZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+CitPcHRp
b25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVl
KTsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVu
dHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
LmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sVHlw
ZVBhcnNlci5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFBy
aXZhdGUuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGludGVyZmFjZSBUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKERhdGFiYXNlRG9tYWluKQorCisrICh2b2lkKV9wYXJz
ZURhdGFiYXNlSWQ6KE5TU3RyaW5nICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2Fk
OworKyAodm9pZClfcGFyc2VQcmltYXJ5Q29sb3JzOihOU1N0cmluZyAqKilvdXRWYWx1ZSBmcm9t
UGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNlQ29sb3JMaXN0OihOU0FycmF5Lyo8
TlNTdHJpbmc+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisrICh2b2lk
KV9wYXJzZUVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqKW91dFZhbHVlIGZyb21Q
YXlsb2FkOihpZClwYXlsb2FkOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMgKERhdGFiYXNlRG9tYWluKQorCisrICh2b2lkKV9wYXJzZURhdGFi
YXNlSWQ6KE5TU3RyaW5nICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7Cisg
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3Nd
KTsKKyAgICAqb3V0VmFsdWUgPSAoTlNTdHJpbmcgKilwYXlsb2FkOworfQorCisrICh2b2lkKV9w
YXJzZVByaW1hcnlDb2xvcnM6KE5TU3RyaW5nICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClw
YXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNT
dHJpbmcgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSAoTlNTdHJpbmcgKilwYXlsb2FkOworfQor
CisrICh2b2lkKV9wYXJzZUNvbG9yTGlzdDooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKW91dFZh
bHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9C
QURfVFlQRShwYXlsb2FkLCBbTlNBcnJheS8qPE5TU3RyaW5nPiovIGNsYXNzXSk7CisgICAgKm91
dFZhbHVlID0gKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKXBheWxvYWQ7Cit9CisKKysgKHZvaWQp
X3BhcnNlRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKiopb3V0VmFsdWUgZnJvbVBh
eWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBh
eWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90
b2NvbERhdGFiYXNlRXJyb3IgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKK30KKwor
QGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisK
KyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJv
dG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMu
aCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+
CisjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4K
KwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCitAaW1wbGVtZW50YXRpb24gVGVzdFBy
b3RvY29sRGF0YWJhc2VFcnJvcgorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihu
b25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCit7CisgICAgaWYg
KCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBUSFJP
V19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJtZXNzYWdlIl0sIEAi
bWVzc2FnZSIpOworICAgIHNlbGYubWVzc2FnZSA9IHBheWxvYWRbQCJtZXNzYWdlIl07CisKKyAg
ICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJjb2RlIl0s
IEAiY29kZSIpOworICAgIHNlbGYuY29kZSA9IFtwYXlsb2FkW0AiY29kZSJdIGludGVnZXJWYWx1
ZV07CisKKyAgICByZXR1cm4gc2VsZjsKK30KKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3Rv
Y29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilvYmplY3QKK3sKKyAgICBpZiAoIShz
ZWxmID0gW3N1cGVyIGluaXRXaXRoSlNPTk9iamVjdDpbb2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0
KCldKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHJldHVybiBzZWxmOworfQorCistIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZTooaW50
KWNvZGUKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJu
IG5pbDsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkobWVzc2Fn
ZSwgQCJtZXNzYWdlIik7CisKKyAgICBzZWxmLm1lc3NhZ2UgPSBtZXNzYWdlOworICAgIHNlbGYu
Y29kZSA9IGNvZGU7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClzZXRNZXNzYWdl
OihOU1N0cmluZyAqKW1lc3NhZ2UKK3sKKyAgICBbc3VwZXIgc2V0U3RyaW5nOm1lc3NhZ2UgZm9y
S2V5OkAibWVzc2FnZSJdOworfQorCistIChOU1N0cmluZyAqKW1lc3NhZ2UKK3sKKyAgICByZXR1
cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAIm1lc3NhZ2UiXTsKK30KKworLSAodm9pZClzZXRDb2Rl
OihpbnQpY29kZQoreworICAgIFtzdXBlciBzZXRJbnRlZ2VyOmNvZGUgZm9yS2V5OkAiY29kZSJd
OworfQorCistIChpbnQpY29kZQoreworICAgIHJldHVybiBbc3VwZXIgaW50ZWdlckZvcktleTpA
ImNvZGUiXTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMu
bW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4t
ZGVidWdnYWJsZVR5cGUuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRj
aGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMC4uYTEzMGFkNzBjNDAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1v
bi1jb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24t
ZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6IE1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNhdGlv
bjogZG9tYWluIERvbWFpbiBoYXMgYW4gaXRlbSBpbiB0YXJnZXRUeXBlcyAiW3Und29ya2VyJ10i
IHRoYXQgaXMgbm90IHN1cHBvcnRlZCBieSBhbnkgdmFsdWUgaW4gZGVidWdnYWJsZVR5cGVzICJb
dSdqYXZhc2NyaXB0J10iLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tY29tbWFuZC10YXJnZXRUeXBlcy10
eXBlLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1jb21tYW5kLXRhcmdldFR5cGVzLXR5cGUuanNvbi1lcnJv
cgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOTlmNWUxYTRhOGUKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1jb21tYW5kLXRhcmdldFR5cGVzLXR5cGUuanNvbi1lcnJv
cgpAQCAtMCwwICsxIEBACitFUlJPUjogTWFsZm9ybWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9uOiB0
YXJnZXRUeXBlcyBsaXN0IGZvciBjb21tYW5kIFBhZ2VPbmx5IGlzIG5vdCBhbiBhcnJheQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4
cGVjdGVkL2ZhaWwtb24tY29tbWFuZC10YXJnZXRUeXBlcy12YWx1ZS5qc29uLWVycm9yIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwt
b24tY29tbWFuZC10YXJnZXRUeXBlcy12YWx1ZS5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yMWEzNjU2OTkyNgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWls
LW9uLWNvbW1hbmQtdGFyZ2V0VHlwZXMtdmFsdWUuanNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitF
UlJPUjogTWFsZm9ybWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9uOiB0YXJnZXRUeXBlcyBsaXN0IGZv
ciBjb21tYW5kIFBhZ2VPbmx5IGlzIGFuIHVuc3VwcG9ydGVkIHN0cmluZy4gV2FzOiAiW3UncGFn
ZWUnXSIsIEFsbG93ZWQgdmFsdWVzOiBzZXJ2aWNlLXdvcmtlciwgamF2YXNjcmlwdCwgd29ya2Vy
LCBwYWdlLCB3ZWItcGFnZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZG9tYWluLWRlYnVnZ2FibGVUeXBl
cy10eXBlLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4tZGVidWdnYWJsZVR5cGVzLXR5cGUuanNv
bi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMmI4OThiYTdi
ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4tZGVidWdnYWJsZVR5cGVzLXR5cGUu
anNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjogTWFsZm9ybWVkIGRvbWFpbiBzcGVjaWZp
Y2F0aW9uOiBkZWJ1Z2dhYmxlVHlwZXMgZm9yIGRvbWFpbiBXZWJPbmx5IGlzIG5vdCBhbiBhcnJh
eQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V4cGVjdGVkL2ZhaWwtb24tZG9tYWluLWRlYnVnZ2FibGVUeXBlcy12YWx1ZS5qc29uLWVy
cm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVj
dGVkL2ZhaWwtb24tZG9tYWluLWRlYnVnZ2FibGVUeXBlcy12YWx1ZS5qc29uLWVycm9yCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5iZjcxZDQ3MGNiZAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC9mYWlsLW9uLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMtdmFsdWUuanNvbi1lcnJvcgpA
QCAtMCwwICsxIEBACitFUlJPUjogTWFsZm9ybWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9uOiBkZWJ1
Z2dhYmxlVHlwZXMgZm9yIGRvbWFpbiBXZWJPbmx5IGlzIGFuIHVuc3VwcG9ydGVkIHN0cmluZy4g
V2FzOiAiW3Und2ViYiddIiwgQWxsb3dlZCB2YWx1ZXM6IHNlcnZpY2Utd29ya2VyLCBqYXZhc2Ny
aXB0LCBwYWdlLCB3ZWItcGFnZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZG9tYWluLXRhcmdldFR5cGUt
bWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4t
dGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1lcnJvcgpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uODY3ZTM1MDA4OTgKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdn
YWJsZVR5cGUuanNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjogTWFsZm9ybWVkIGRvbWFp
biBzcGVjaWZpY2F0aW9uOiBjb21tYW5kIENvbW1hbmQgaGFzIGFuIGl0ZW0gaW4gdGFyZ2V0VHlw
ZXMgIlt1J3dvcmtlciddIiB0aGF0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgYW55IHZhbHVlIGluIGRl
YnVnZ2FibGVUeXBlcyAiW3UnamF2YXNjcmlwdCddIi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWRvbWFp
bi10YXJnZXRUeXBlcy10eXBlLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZXMt
dHlwZS5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5l
OWEzNTkzM2EzNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWRvbWFpbi10YXJnZXRUeXBlcy10
eXBlLmpzb24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6IE1hbGZvcm1lZCBkb21haW4gc3Bl
Y2lmaWNhdGlvbjogdGFyZ2V0VHlwZXMgZm9yIGRvbWFpbiBQYWdlT25seSBpcyBub3QgYW4gYXJy
YXkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWRvbWFpbi10YXJnZXRUeXBlcy12YWx1ZS5qc29uLWVycm9y
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVk
L2ZhaWwtb24tZG9tYWluLXRhcmdldFR5cGVzLXZhbHVlLmpzb24tZXJyb3IKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjQ2ODA3ZjcyZmM0Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVk
L2ZhaWwtb24tZG9tYWluLXRhcmdldFR5cGVzLXZhbHVlLmpzb24tZXJyb3IKQEAgLTAsMCArMSBA
QAorRVJST1I6IE1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjogdGFyZ2V0VHlwZXMgZm9y
IGRvbWFpbiBQYWdlT25seSBpcyBhbiB1bnN1cHBvcnRlZCBzdHJpbmcuIFdhczogIlt1J3BhZ2Vl
J10iLCBBbGxvd2VkIHZhbHVlczogc2VydmljZS13b3JrZXIsIGphdmFzY3JpcHQsIHdvcmtlciwg
cGFnZSwgd2ViLXBhZ2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS1jb21tYW5kLWNhbGwt
cGFyYW1ldGVyLW5hbWVzLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1jYWxs
LXBhcmFtZXRlci1uYW1lcy5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwLi4zZjc1NmRlMzI1MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0
ZS1jb21tYW5kLWNhbGwtcGFyYW1ldGVyLW5hbWVzLmpzb24tZXJyb3IKQEAgLTAsMCArMSBAQAor
RVJST1I6IE1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjogY2FsbCBwYXJhbWV0ZXIgbGlz
dCBmb3IgY29tbWFuZCBwcm9jZXNzUG9pbnRzIGhhcyBkdXBsaWNhdGUgcGFyYW1ldGVyIG5hbWVz
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1yZXR1cm4tcGFyYW1ldGVyLW5h
bWVzLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1yZXR1cm4tcGFyYW1ldGVy
LW5hbWVzLmpzb24tZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu
LmVhMTQ4ZmY2N2M5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLWNvbW1hbmQt
cmV0dXJuLXBhcmFtZXRlci1uYW1lcy5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBN
YWxmb3JtZWQgZG9tYWluIHNwZWNpZmljYXRpb246IHJldHVybiBwYXJhbWV0ZXIgbGlzdCBmb3Ig
Y29tbWFuZCBwcm9jZXNzUG9pbnRzIGhhcyBkdXBsaWNhdGUgcGFyYW1ldGVyIG5hbWVzCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtZXZlbnQtcGFyYW1ldGVyLW5hbWVzLmpzb24tZXJyb3Ig
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
ZmFpbC1vbi1kdXBsaWNhdGUtZXZlbnQtcGFyYW1ldGVyLW5hbWVzLmpzb24tZXJyb3IKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmM3MWJiZDIxYzJjCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4
cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLWV2ZW50LXBhcmFtZXRlci1uYW1lcy5qc29uLWVycm9y
CkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBNYWxmb3JtZWQgZG9tYWluIHNwZWNpZmljYXRpb246IHBh
cmFtZXRlciBsaXN0IGZvciBldmVudCBwcm9jZXNzZWRQb2ludHMgaGFzIGR1cGxpY2F0ZSBwYXJh
bWV0ZXIgbmFtZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLWRlY2xhcmF0aW9u
cy5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLXR5cGUtZGVjbGFyYXRpb25zLmpzb24tZXJy
b3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjQ0N2NkZjhlMjhlCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLXR5cGUtZGVjbGFyYXRpb25zLmpzb24t
ZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6IER1cGxpY2F0ZSB0eXBlIGRlY2xhcmF0aW9uOiBS
dW50aW1lLlJlbW90ZU9iamVjdElkCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1t
ZW1iZXItbmFtZXMuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLW1lbWJlci1uYW1l
cy5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kNTM3
NmE3N2E0NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLW1lbWJlci1u
YW1lcy5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBNYWxmb3JtZWQgZG9tYWluIHNw
ZWNpZmljYXRpb246IHR5cGUgZGVjbGFyYXRpb24gZm9yIFBvaW50IGhhcyBkdXBsaWNhdGUgbWVt
YmVyIG5hbWVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1lbnVtLXdpdGgtbm8tdmFsdWVzLmpzb24tZXJy
b3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvZmFpbC1vbi1lbnVtLXdpdGgtbm8tdmFsdWVzLmpzb24tZXJyb3IKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjI2NTVjMmI5MDdlCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2Zh
aWwtb24tZW51bS13aXRoLW5vLXZhbHVlcy5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9S
OiBUeXBlIHJlZmVyZW5jZSB3aXRoIGVudW0gdmFsdWVzIG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUg
ZW51bSB2YWx1ZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmct
ZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1ldmVudC10YXJnZXRUeXBl
LW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5iNjVkN2EwZDE5NgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9m
YWlsLW9uLWV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpz
b24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6IE1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNh
dGlvbjogZXZlbnQgRXZlbnQgaGFzIGFuIGl0ZW0gaW4gdGFyZ2V0VHlwZXMgIlt1J3dvcmtlcidd
IiB0aGF0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgYW55IHZhbHVlIGluIGRlYnVnZ2FibGVUeXBlcyAi
W3UnamF2YXNjcmlwdCddIi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGVzLXR5
cGUuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGVzLXR5cGUuanNvbi1lcnJvcgpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNzQwM2UxM2E4MDkKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZXhwZWN0ZWQvZmFpbC1vbi1ldmVudC10YXJnZXRUeXBlcy10eXBlLmpzb24tZXJyb3IKQEAg
LTAsMCArMSBAQAorRVJST1I6IE1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjogdGFyZ2V0
VHlwZXMgZm9yIGV2ZW50IFBhZ2VPbmx5IGlzIG5vdCBhbiBhcnJheQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwt
b24tZXZlbnQtdGFyZ2V0VHlwZXMtdmFsdWUuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWV2ZW50LXRhcmdl
dFR5cGVzLXZhbHVlLmpzb24tZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAuLjgzMDEyYTlmZTRlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZXZlbnQtdGFyZ2V0
VHlwZXMtdmFsdWUuanNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjogTWFsZm9ybWVkIGRv
bWFpbiBzcGVjaWZpY2F0aW9uOiB0YXJnZXRUeXBlcyBmb3IgZXZlbnQgUGFnZU9ubHkgaXMgYW4g
dW5zdXBwb3J0ZWQgc3RyaW5nLiBXYXM6ICJbdSdwYWdlZSddIiwgQWxsb3dlZCB2YWx1ZXM6IHNl
cnZpY2Utd29ya2VyLCBqYXZhc2NyaXB0LCB3b3JrZXIsIHBhZ2UsIHdlYi1wYWdlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbi1lcnJv
ciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29uLWVycm9y
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45N2IyYWYwZTQ3ZQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxh
Zy5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBUaGUgJ29wdGlvbmFsJyBmbGFnIGZv
ciBhIHBhcmFtZXRlciBtdXN0IGJlIGEgYm9vbGVhbiBsaXRlcmFsLgpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwt
b24tbnVtYmVyLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24tZXJyb3IgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1u
dW1iZXItdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNvbi1lcnJvcgpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uODZkZjM3NTBjMWEKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
ZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNvbi1lcnJvcgpAQCAt
MCwwICsxIEBACitFUlJPUjogVGhlICdvcHRpb25hbCcgZmxhZyBmb3IgYSB0eXBlIG1lbWJlciBt
dXN0IGJlIGEgYm9vbGVhbiBsaXRlcmFsLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tc3RyaW5nLXR5cGVk
LW9wdGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1zdHJpbmctdHlwZWQt
b3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMC4uOTdiMmFmMGU0N2UKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1z
dHJpbmctdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbi1lcnJvcgpAQCAtMCwwICsx
IEBACitFUlJPUjogVGhlICdvcHRpb25hbCcgZmxhZyBmb3IgYSBwYXJhbWV0ZXIgbXVzdCBiZSBh
IGJvb2xlYW4gbGl0ZXJhbC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXN0cmluZy10eXBlZC1vcHRpb25h
bC10eXBlLW1lbWJlci5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXR5
cGUtbWVtYmVyLmpzb24tZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAuLjg2ZGYzNzUwYzFhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9w
dGlvbmFsLXR5cGUtbWVtYmVyLmpzb24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6IFRoZSAn
b3B0aW9uYWwnIGZsYWcgZm9yIGEgdHlwZSBtZW1iZXIgbXVzdCBiZSBhIGJvb2xlYW4gbGl0ZXJh
bC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXR5cGUtZGVjbGFyYXRpb24tdXNpbmctdHlwZS1yZWZlcmVu
Y2UuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXR5cGUtZGVjbGFyYXRpb24tdXNpbmctdHlwZS1yZWZlcmVu
Y2UuanNvbi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNDJm
NTc1M2E0MzkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi10eXBlLWRlY2xhcmF0aW9uLXVzaW5n
LXR5cGUtcmVmZXJlbmNlLmpzb24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6IFR5cGUgcmVm
ZXJlbmNlIGNhbm5vdCBoYXZlIGJvdGggJ3R5cGUnIGFuZCAnJHJlZicga2V5cy4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC9mYWlsLW9uLXR5cGUtcmVmZXJlbmNlLWFzLXByaW1pdGl2ZS10eXBlLmpzb24tZXJyb3IgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFp
bC1vbi10eXBlLXJlZmVyZW5jZS1hcy1wcmltaXRpdmUtdHlwZS5qc29uLWVycm9yCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kNzZiYzFjNzc3MwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC9mYWlsLW9uLXR5cGUtcmVmZXJlbmNlLWFzLXByaW1pdGl2ZS10eXBlLmpzb24tZXJyb3IK
QEAgLTAsMCArMSBAQAorRVJST1I6IFR5cGUgcmVmZXJlbmNlICdEYXRhYmFzZUlkJyBpcyBub3Qg
YSBwcmltaXRpdmUgdHlwZS4gQWxsb3dlZCB2YWx1ZXM6IGludGVnZXIsIG51bWJlciwgc3RyaW5n
LCBib29sZWFuLCBlbnVtLCBvYmplY3QsIGFycmF5LCBhbnkKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXR5
cGUtd2l0aC1sb3dlcmNhc2UtbmFtZS5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS13aXRoLWxvd2Vy
Y2FzZS1uYW1lLmpzb24tZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAuLjRlNDYyMjUwYzBhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS13aXRoLWxvd2Vy
Y2FzZS1uYW1lLmpzb24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6IFR5cGVzIG11c3QgYmVn
aW4gd2l0aCBhbiB1cHBlcmNhc2UgY2hhcmFjdGVyLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tdW5rbm93
bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLWRlY2xhcmF0aW9uLmpzb24tZXJyb3IgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi11
bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtZGVjbGFyYXRpb24uanNvbi1lcnJvcgpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMmQzOGU2NDY3NWQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtZGVjbGFyYXRp
b24uanNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjogVHlwZSByZWZlcmVuY2UgJ2RyYWdv
bicgaXMgbm90IGEgcHJpbWl0aXZlIHR5cGUuIEFsbG93ZWQgdmFsdWVzOiBpbnRlZ2VyLCBudW1i
ZXIsIHN0cmluZywgYm9vbGVhbiwgZW51bSwgb2JqZWN0LCBhcnJheSwgYW55CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
ZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtbWVtYmVyLmpzb24tZXJyb3Ig
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
ZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtbWVtYmVyLmpzb24tZXJyb3IK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmZhZjY2NzJjYmVmCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V4cGVjdGVkL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLW1lbWJl
ci5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBMb29rdXAgZmFpbGVkIGZvciB0eXBl
IHJlZmVyZW5jZTogQ29sb3IgKHJlZmVyZW5jZWQgZnJvbSBkb21haW46IEZhbnRhc3kpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24tcmVzdWx0IGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2dl
bmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uLXJlc3VsdApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZWIxM2Q4NWI1ZjYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24tcmVzdWx0CkBAIC0w
LDAgKzEsMTE4OCBAQAorIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5q
cworLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0
aC1mZWF0dXJlLWd1YXJkcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKy8vIE5ldHdvcmsxCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJO
ZXR3b3JrMSIsIG51bGwpOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIk5ldHdv
cmsxLmxvYWRSZXNvdXJjZSIsIG51bGwsIFtdLCBbXSk7CitJbnNwZWN0b3JCYWNrZW5kLmFjdGl2
YXRlRG9tYWluKCJOZXR3b3JrMSIsIG51bGwpOworCisvLyBOZXR3b3JrMworSW5zcGVjdG9yQmFj
a2VuZC5yZWdpc3RlckRvbWFpbigiTmV0d29yazMiLCBudWxsKTsKK0luc3BlY3RvckJhY2tlbmQu
cmVnaXN0ZXJFdmVudCgiTmV0d29yazMucmVzb3VyY2VMb2FkZWQiLCBudWxsLCBbXSk7CitJbnNw
ZWN0b3JCYWNrZW5kLnJlZ2lzdGVyTmV0d29yazNEaXNwYXRjaGVyID0gSW5zcGVjdG9yQmFja2Vu
ZC5yZWdpc3RlckRpc3BhdGNoZXIuYmluZChJbnNwZWN0b3JCYWNrZW5kLCAiTmV0d29yazMiKTsK
K0luc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIk5ldHdvcmszIiwgbnVsbCk7CisjIyMg
RW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcworCisjIyMgQmVnaW4gRmlsZTog
VGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisK
KyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworI2luY2x1ZGUg
IlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JG
cm9udGVuZFJvdXRlci5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgQWx0ZXJu
YXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHZvaWQgc2V0QmFja2VuZERpc3Bh
dGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5k
RGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KKyAgICBCYWNrZW5kRGlzcGF0Y2hl
ciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVy
LmdldCgpOyB9Citwcml2YXRlOgorICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNr
ZW5kRGlzcGF0Y2hlcjsKK307CisKKworY2xhc3MgQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlz
cGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6Cisg
ICAgdmlydHVhbCB+QWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQorICAg
IHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UobG9uZyBjYWxsSWQpID0gMDsKK307CisKK30gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCisjIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0
Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1
cmUtZ3VhcmRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3R5
cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCitjbGFzcyBBbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVy
OworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCitj
bGFzcyBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CitwdWJsaWM6CisgICAgdmly
dHVhbCB2b2lkIGxvYWRSZXNvdXJjZShFcnJvclN0cmluZyYpID0gMDsKK3Byb3RlY3RlZDoKKyAg
ICB2aXJ0dWFsIH5OZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOworfTsKKworY2xh
c3MgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxC
YWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxOZXR3b3JrMUJhY2tl
bmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBOZXR3b3JrMUJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlciopOworICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNv
bnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOwor
cHJpdmF0ZToKKyAgICB2b2lkIGxvYWRSZXNvdXJjZShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpT
T046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKK3B1YmxpYzoKKyAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIo
QWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikg
eyBtX2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9Citwcml2YXRl
OgorICAgIEFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIqIG1fYWx0ZXJuYXRlRGlz
cGF0Y2hlciB7IG51bGxwdHIgfTsKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKK3ByaXZhdGU6CisgICAgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihC
YWNrZW5kRGlzcGF0Y2hlciYsIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Cisg
ICAgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQgeyBudWxscHRyIH07
Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tl
bmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJz
LmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMt
d2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0QmFja2VuZERp
c3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVu
ZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL05l
dmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCisjaWYgRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjaW5jbHVkZSAiVGVzdEFsdGVy
bmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgorI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworTmV0d29yazFC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5OZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxl
cigpIHsgfQorCitSZWY8TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4gTmV0d29yazFCYWNrZW5k
RGlzcGF0Y2hlcjo6Y3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwg
TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQoreworICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIs
IGFnZW50KSk7Cit9CisKK05ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6Ok5ldHdvcmsxQmFja2Vu
ZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBOZXR3b3Jr
MUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCisgICAgOiBTdXBwbGVtZW50YWxCYWNr
ZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKKyAgICAsIG1fYWdlbnQoYWdlbnQpCit7
CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKCJO
ZXR3b3JrMSJfcywgdGhpcyk7Cit9CisKK3ZvaWQgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6
ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6
T2JqZWN0PiYmIG1lc3NhZ2UpCit7CisgICAgUmVmPE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI+
IHByb3RlY3QoKnRoaXMpOworCisgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVyczsK
KyAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFyYW1ldGVycyk7CisKKyAgICBp
ZiAobWV0aG9kID09ICJsb2FkUmVzb3VyY2UiKSB7CisgICAgICAgIGxvYWRSZXNvdXJjZShyZXF1
ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0
Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazEuIiArIG1ldGhvZCArICInIHdhcyBub3Qg
Zm91bmQiKTsKK30KKwordm9pZCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3Vy
Y2UobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCit7CisjaWYgRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisgICAgaWYgKG1fYWx0ZXJuYXRlRGlz
cGF0Y2hlcikgeworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZShy
ZXF1ZXN0SWQpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmIC8vIEVOQUJMRShJTlNQ
RUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCisgICAgRXJyb3JTdHJpbmcgZXJyb3I7Cisg
ICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAg
ICBtX2FnZW50LT5sb2FkUmVzb3VyY2UoZXJyb3IpOworCisgICAgaWYgKCFlcnJvci5sZW5ndGgo
KSkKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwg
V1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7CisgICAgZWxzZQorICAgICAgICBtX2JhY2tlbmREaXNw
YXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJv
ciwgV1RGTW92ZShlcnJvcikpOworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMj
IEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTog
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCisvLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Igewor
CitjbGFzcyBGcm9udGVuZFJvdXRlcjsKKworY2xhc3MgTmV0d29yazNGcm9udGVuZERpc3BhdGNo
ZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIE5ldHdvcmsz
RnJvbnRlbmREaXNwYXRjaGVyKEZyb250ZW5kUm91dGVyJiBmcm9udGVuZFJvdXRlcikgOiBtX2Zy
b250ZW5kUm91dGVyKGZyb250ZW5kUm91dGVyKSB7IH0KKyAgICB2b2lkIHJlc291cmNlTG9hZGVk
KCk7Citwcml2YXRlOgorICAgIEZyb250ZW5kUm91dGVyJiBtX2Zyb250ZW5kUm91dGVyOworfTsK
KworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERp
c3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNw
cAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0
aC1mZWF0dXJlLWd1YXJkcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNw
YXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRS
b3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNw
ZWN0b3IgeworCit2b2lkIE5ldHdvcmszRnJvbnRlbmREaXNwYXRjaGVyOjpyZXNvdXJjZUxvYWRl
ZCgpCit7CisgICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOworICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIk5ldHdv
cmszLnJlc291cmNlTG9hZGVkIl9zKTsKKworICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50
KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorCisjIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+CisjaW5j
bHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCitu
YW1lc3BhY2UgUHJvdG9jb2wgeworCisKKworLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCituYW1l
c3BhY2UgTmV0d29yazIgeworY2xhc3MgTmV0d29ya0Vycm9yOworfSAvLyBOZXR3b3JrMgorLy8g
RW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgorCisKKworCituYW1lc3BhY2UgTmV0d29yazIg
eworY2xhc3MgTmV0d29ya0Vycm9yIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgeworcHVibGlj
OgorICAgIGVudW0geworICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCisgICAgICAgIE1lc3NhZ2VT
ZXQgPSAxIDw8IDAsCisgICAgICAgIENvZGVTZXQgPSAxIDw8IDEsCisgICAgICAgIEFsbEZpZWxk
c1NldCA9IChNZXNzYWdlU2V0IHwgQ29kZVNldCkKKyAgICB9OworCisgICAgdGVtcGxhdGU8aW50
IFNUQVRFPgorICAgIGNsYXNzIEJ1aWxkZXIgeworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0
cjxKU09OOjpPYmplY3Q+IG1fcmVzdWx0OworCisgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBC
dWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsK
KyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXIoUmVmPC8qTmV0d29ya0Vycm9yKi9KU09OOjpP
YmplY3Q+JiYgb2JqZWN0KQorICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkp
CisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRz
U2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAgICAgICB9CisgICAg
ICAgIGZyaWVuZCBjbGFzcyBOZXR3b3JrRXJyb3I7CisgICAgcHVibGljOgorCisgICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIHZhbHVl
KQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTWVzc2Fn
ZVNldCksIHByb3BlcnR5X21lc3NhZ2VfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1
bHQtPnNldFN0cmluZygibWVzc2FnZSJfcywgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNh
c3RTdGF0ZTxNZXNzYWdlU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IENvZGVTZXQ+JiBzZXRDb2RlKGludCB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIENvZGVTZXQpLCBwcm9wZXJ0eV9jb2RlX2FscmVhZHlf
c2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2VyKCJjb2RlIl9zLCB2YWx1ZSk7
CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvZGVTZXQ+KCk7CisgICAgICAgIH0KKwor
ICAgICAgICBSZWY8TmV0d29ya0Vycm9yPiByZWxlYXNlKCkKKyAgICAgICAgeworICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3Jl
YWR5KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihOZXR3b3JrRXJyb3IpID09
IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7CisKKyAgICAgICAgICAgIFJlZjxK
U09OOjpPYmplY3Q+IGpzb25SZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOworICAg
ICAgICAgICAgYXV0byByZXN1bHQgPSBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxOZXR3
b3JrRXJyb3I+Kj4oJmpzb25SZXN1bHQpKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgICAgIH0KKyAgICB9OworCisgICAgLyoKKyAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6
CisgICAgICogUmVmPE5ldHdvcmtFcnJvcj4gcmVzdWx0ID0gTmV0d29ya0Vycm9yOjpjcmVhdGUo
KQorICAgICAqICAgICAuc2V0TWVzc2FnZSguLi4pCisgICAgICogICAgIC5zZXRDb2RlKC4uLikK
KyAgICAgKiAgICAgLnJlbGVhc2UoKTsKKyAgICAgKi8KKyAgICBzdGF0aWMgQnVpbGRlcjxOb0Zp
ZWxkc1NldD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRz
U2V0PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICB9Cit9OworCit9IC8vIE5ldHdvcmsy
CisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisKKyMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCisvLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Ig
eworCituYW1lc3BhY2UgUHJvdG9jb2wgeworCisKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wK
KworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
T2JqZWN0cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRj
aGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlu
cy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworQHBy
b3RvY29sIFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcjsKKworbmFtZXNwYWNlIElu
c3BlY3RvciB7CisKKworY2xhc3MgT2JqQ0luc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNo
ZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciB7Cisg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgT2JqQ0luc3BlY3Rvck5l
dHdvcmsxQmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5k
bGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9CisgICAgdm9pZCBsb2FkUmVz
b3VyY2UobG9uZyByZXF1ZXN0SWQpIGZpbmFsOworcHJpdmF0ZToKKyAgICBSZXRhaW5QdHI8aWQ8
VGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKK307CisKK30g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tl
bmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlz
cGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1k
b21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90
b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJu
YWwuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbmNsdWRl
IDx3dGYvSlNPTlZhbHVlcy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordm9pZCBPYmpD
SW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlKGxvbmcgcmVx
dWVzdElkKQoreworICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxl
Y3Rvcihsb2FkUmVzb3VyY2VXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsK
KyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0
SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMS5sb2FkUmVz
b3VyY2UnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5z
ZW5kUGVuZGluZ0Vycm9ycygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWQgZXJy
b3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6
U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBl
bmRpbmdFcnJvcnMoKTsKKyAgICB9OworCisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKKyAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2UpOworICAgIH07CisKKyAgICBbbV9kZWxlZ2F0ZSBsb2Fk
UmVzb3VyY2VXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpz
dWNjZXNzQ2FsbGJhY2tdOworfQorCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8V2ViSW5z
cGVjdG9yL1Rlc3RQcm90b2NvbC5oPgorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVm
YXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0
CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluLCBzZXR0ZXI9c2V0TmV0d29yazFIYW5kbGVy
OikgaWQ8VGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyPiBuZXR3b3JrMUhhbmRsZXI7
CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFRlc3RQcm90b2NvbE5ldHdvcmszRG9t
YWluRXZlbnREaXNwYXRjaGVyICpuZXR3b3JrM0V2ZW50RGlzcGF0Y2hlcjsKK0BlbmQKKworCisj
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorCisjIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90
b2NvbENvbmZpZ3VyYXRpb24uaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIK
KyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW1w
b3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKwordXNp
bmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENv
bmZpZ3VyYXRpb24KK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250
cm9sbGVyOworICAgIGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4gX25ldHdv
cmsxSGFuZGxlcjsKKyAgICBUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkV2ZW50RGlzcGF0Y2hl
ciAqX25ldHdvcmszRXZlbnREaXNwYXRjaGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIK
K3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0
dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250
cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBb
X25ldHdvcmsxSGFuZGxlciByZWxlYXNlXTsKKyAgICBbX25ldHdvcmszRXZlbnREaXNwYXRjaGVy
IHJlbGVhc2VdOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAodm9pZClzZXROZXR3b3Jr
MUhhbmRsZXI6KGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4paGFuZGxlcgor
eworICAgIGlmIChoYW5kbGVyID09IF9uZXR3b3JrMUhhbmRsZXIpCisgICAgICAgIHJldHVybjsK
KworICAgIFtfbmV0d29yazFIYW5kbGVyIHJlbGVhc2VdOworICAgIF9uZXR3b3JrMUhhbmRsZXIg
PSBbaGFuZGxlciByZXRhaW5dOworCisgICAgYXV0byBhbHRlcm5hdGVEaXNwYXRjaGVyID0gbWFr
ZVVuaXF1ZTxPYmpDSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7
CisgICAgYXV0byBhbHRlcm5hdGVBZ2VudCA9IG1ha2VVbmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hh
YmxlQWdlbnQ8TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciwgQWx0ZXJuYXRlTmV0d29yazFCYWNr
ZW5kRGlzcGF0Y2hlcj4+KCJOZXR3b3JrMSJfcywgKl9jb250cm9sbGVyLCBXVEZNb3ZlKGFsdGVy
bmF0ZURpc3BhdGNoZXIpKTsKKyAgICBfY29udHJvbGxlci0+YXBwZW5kRXh0cmFBZ2VudChXVEZN
b3ZlKGFsdGVybmF0ZUFnZW50KSk7Cit9CisKKy0gKGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9t
YWluSGFuZGxlcj4pbmV0d29yazFIYW5kbGVyCit7CisgICAgcmV0dXJuIF9uZXR3b3JrMUhhbmRs
ZXI7Cit9CisKKy0gKFRlc3RQcm90b2NvbE5ldHdvcmszRG9tYWluRXZlbnREaXNwYXRjaGVyICop
bmV0d29yazNFdmVudERpc3BhdGNoZXIKK3sKKyAgICBpZiAoIV9uZXR3b3JrM0V2ZW50RGlzcGF0
Y2hlcikKKyAgICAgICAgX25ldHdvcmszRXZlbnREaXNwYXRjaGVyID0gW1tUZXN0UHJvdG9jb2xO
ZXR3b3JrM0RvbWFpbkV2ZW50RGlzcGF0Y2hlciBhbGxvY10gaW5pdFdpdGhDb250cm9sbGVyOl9j
b250cm9sbGVyXTsKKyAgICByZXR1cm4gX25ldHdvcmszRXZlbnREaXNwYXRjaGVyOworfQorCitA
ZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisKKyMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3Vh
cmRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lt
cG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1l
c3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sTmV0d29yazNE
b21haW5FdmVudERpc3BhdGNoZXIKK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xs
ZXIqIF9jb250cm9sbGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVy
OihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxm
ID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAg
ICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAg
IHJldHVybiBzZWxmOworfQorCistICh2b2lkKXJlc291cmNlTG9hZGVkCit7CisgICAgY29uc3Qg
RnJvbnRlbmRSb3V0ZXImIHJvdXRlciA9IF9jb250cm9sbGVyLT5mcm9udGVuZFJvdXRlcigpOwor
CisgICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpOworICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIk5ldHdvcmszLnJl
c291cmNlTG9hZGVkIl9zKTsKKyAgICByb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pT
T05TdHJpbmcoKSk7Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2
ZW50RGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1
cmUtZ3VhcmRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKKyNpbXBvcnQgPFdlYkluc3Bl
Y3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KKworCitAY2xhc3MgVGVzdFByb3RvY29sTmV0
d29yazJOZXR3b3JrRXJyb3I7CisKKworCisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJk
ZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xOZXR3b3JrMk5ldHdvcmtFcnJvciA6
IFJXSVByb3RvY29sSlNPTk9iamVjdAorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoo
TlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQ7CistIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVj
dDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBj
b2RlOihpbnQpY29kZTsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5
KSBOU1N0cmluZyAqbWVzc2FnZTsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWlj
LCBhc3NpZ24pIGludCBjb2RlOworQGVuZAorCitAcHJvdG9jb2wgVGVzdFByb3RvY29sTmV0d29y
azFEb21haW5IYW5kbGVyIDxOU09iamVjdD4KK0BvcHRpb25hbAorLSAodm9pZClsb2FkUmVzb3Vy
Y2VXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJh
Y2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKHZvaWQpKXN1Y2Nlc3NDYWxsYmFjazsKK0BlbmQK
KworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRl
c3RQcm90b2NvbE5ldHdvcmszRG9tYWluRXZlbnREaXNwYXRjaGVyIDogTlNPYmplY3QKKy0gKHZv
aWQpcmVzb3VyY2VMb2FkZWQ7CitAZW5kCisKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVBy
b3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgorCisjIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1
cmUtZ3VhcmRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2Jq
ZWN0UHJpdmF0ZS5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0
b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCitAaW50ZXJmYWNl
IFRlc3RQcm90b2NvbE5ldHdvcmszRG9tYWluRXZlbnREaXNwYXRjaGVyIChQcml2YXRlKQorLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooSW5zcGVjdG9yOjpBdWdtZW50YWJsZUlu
c3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXI7CitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRl
LWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCA8
V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgorCituYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgorT3B0aW9uYWw8
T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7CisK
KworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUt
ZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
LmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sVHlw
ZVBhcnNlci5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFBy
aXZhdGUuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGludGVyZmFjZSBUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKE5ldHdvcmsyRG9tYWluKQorCisrICh2b2lkKV9wYXJz
ZU5ldHdvcmtFcnJvcjooVGVzdFByb3RvY29sTmV0d29yazJOZXR3b3JrRXJyb3IgKiopb3V0VmFs
dWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoTmV0d29yazJEb21haW4pCisKKysgKHZvaWQpX3Bh
cnNlTmV0d29ya0Vycm9yOihUZXN0UHJvdG9jb2xOZXR3b3JrMk5ldHdvcmtFcnJvciAqKilvdXRW
YWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
QkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOworICAgICpvdXRWYWx1ZSA9
IFtbVGVzdFByb3RvY29sTmV0d29yazJOZXR3b3JrRXJyb3IgYWxsb2NdIGluaXRXaXRoUGF5bG9h
ZDpwYXlsb2FkXTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1m
ZWF0dXJlLWd1YXJkcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3Rv
Y29sSlNPTk9iamVjdFByaXZhdGUuaD4KKyNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW1w
b3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisK
K0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xOZXR3b3JrMk5ldHdvcmtFcnJvcgorCistIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmlu
ZyAqLCBpZD4gKilwYXlsb2FkCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisg
ICAgICAgIHJldHVybiBuaWw7CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BS
T1BFUlRZKHBheWxvYWRbQCJtZXNzYWdlIl0sIEAibWVzc2FnZSIpOworICAgIHNlbGYubWVzc2Fn
ZSA9IHBheWxvYWRbQCJtZXNzYWdlIl07CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJ
UkVEX1BST1BFUlRZKHBheWxvYWRbQCJjb2RlIl0sIEAiY29kZSIpOworICAgIHNlbGYuY29kZSA9
IFtwYXlsb2FkW0AiY29kZSJdIGludGVnZXJWYWx1ZV07CisKKyAgICByZXR1cm4gc2VsZjsKK30K
Ky0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05P
YmplY3QgKilvYmplY3QKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoSlNPTk9i
amVjdDpbb2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0KCldKSkKKyAgICAgICAgcmV0dXJuIG5pbDsK
KworICAgIHJldHVybiBzZWxmOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhNZXNzYWdl
OihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZTooaW50KWNvZGUKK3sKKyAgICBpZiAoIShzZWxmID0g
W3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfUkVRVUlSRURfUFJPUEVSVFkobWVzc2FnZSwgQCJtZXNzYWdlIik7CisKKyAgICBzZWxm
Lm1lc3NhZ2UgPSBtZXNzYWdlOworICAgIHNlbGYuY29kZSA9IGNvZGU7CisKKyAgICByZXR1cm4g
c2VsZjsKK30KKworLSAodm9pZClzZXRNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UKK3sKKyAg
ICBbc3VwZXIgc2V0U3RyaW5nOm1lc3NhZ2UgZm9yS2V5OkAibWVzc2FnZSJdOworfQorCistIChO
U1N0cmluZyAqKW1lc3NhZ2UKK3sKKyAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAIm1l
c3NhZ2UiXTsKK30KKworLSAodm9pZClzZXRDb2RlOihpbnQpY29kZQoreworICAgIFtzdXBlciBz
ZXRJbnRlZ2VyOmNvZGUgZm9yS2V5OkAiY29kZSJdOworfQorCistIChpbnQpY29kZQoreworICAg
IHJldHVybiBbc3VwZXIgaW50ZWdlckZvcktleTpAImNvZGUiXTsKK30KKworQGVuZAorCisKKyMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zYW1lLXR5cGUtaWQt
ZGlmZmVyZW50LWRvbWFpbi5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFp
bi5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uY2Y1
YTU5MzFiYzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4u
anNvbi1yZXN1bHQKQEAgLTAsMCArMSw4NzkgQEAKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JC
YWNrZW5kQ29tbWFuZHMuanMKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1l
LXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5q
cworCisjIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1k
b21haW4uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisj
cHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Igewor
CitjbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdm9pZCBz
ZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hl
cikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQorICAgIEJh
Y2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFj
a2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KK3ByaXZhdGU6CisgICAgUmVmUHRyPEJhY2tlbmREaXNw
YXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOworfTsKKworCisKKworfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKKyMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisK
KyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0eXBlZGVmIFN0cmluZyBFcnJv
clN0cmluZzsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBU
ZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlz
cGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBl
LWlkLWRpZmZlcmVudC1kb21haW4uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEJhY2tlbmRE
aXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRl
bmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9O
ZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorI2luY2x1ZGUgIlRlc3RBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNo
ZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9t
YWluLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8
d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEZyb250ZW5kUm91dGVyOworCit9IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAor
CisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMu
Y3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgor
I2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisK
KworbmFtZXNwYWNlIFByb3RvY29sIHsKKworCisKKworCisvLyBUeXBlZGVmcy4KK25hbWVzcGFj
ZSBSdW50aW1lIHsKKy8qIFVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4gKi8KK3R5cGVkZWYgU3Ry
aW5nIFJlbW90ZU9iamVjdElkOworfSAvLyBSdW50aW1lCisKK25hbWVzcGFjZSBSdW50aW1lMiB7
CisvKiBVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIuICovCit0eXBlZGVmIFN0cmluZyBSZW1vdGVP
YmplY3RJZDsKK30gLy8gUnVudGltZTIKKy8vIEVuZCBvZiB0eXBlZGVmcy4KKworCisKK30gLy8g
bmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bE9iamVjdHMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBl
LWlkLWRpZmZlcmVudC1kb21haW4uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29s
T2JqZWN0cy5oIgorCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFByb3Rv
Y29sIHsKKworCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworCisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisK
K30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJh
Y2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5k
RGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5
cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29s
QmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5o
IgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2luY2x1ZGUgPHd0
Zi9KU09OVmFsdWVzLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hl
cnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9t
YWluLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lt
cG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgorCitfX2F0dHJpYnV0ZV9fKCh2aXNp
YmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
biA6IE5TT2JqZWN0CitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1
cmF0aW9uLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0K
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50
LWRvbWFpbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
KyNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKKworI2ltcG9ydCAiVGVzdFBy
b3RvY29sSW50ZXJuYWwuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVy
cy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQu
aD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxl
ci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERp
c3BhdGNoZXJzLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0
aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3Rv
ckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhD
b250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sK
KyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJu
IG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9s
bGVyOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbc3Vw
ZXIgZGVhbGxvY107Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENv
bmZpZ3VyYXRpb24ubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0
Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQt
ZGlmZmVyZW50LWRvbWFpbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4K
KwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5o
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVu
dC1kb21haW4uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKworI2ltcG9ydCA8V2ViSW5zcGVj
dG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgorCisKKworCisKKworCisKKworCisKKworCisj
aW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3Rz
Lmg+CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKKworIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbEludGVybmFsLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBz
YW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAi
VGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1
ZXMuaD4KKworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisKKyMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVz
dFByb3RvY29sLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZl
cnNpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBP
YmpDRW51bVR5cGU+CitPcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhj
b25zdCBTdHJpbmcmIHZhbHVlKTsKKworCisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
KworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorCisjIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1w
b3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJ
UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9y
OworCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoUnVudGltZURvbWFp
bikKKworKyAodm9pZClfcGFyc2VSZW1vdGVPYmplY3RJZDooTlNTdHJpbmcgKiopb3V0VmFsdWUg
ZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisKK0BlbmQKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zIChSdW50aW1lMkRvbWFpbikKKworKyAodm9pZClfcGFyc2VSZW1vdGVP
YmplY3RJZDooTlNTdHJpbmcgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisK
K0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoUnVu
dGltZURvbWFpbikKKworKyAodm9pZClfcGFyc2VSZW1vdGVPYmplY3RJZDooTlNTdHJpbmcgKiop
b3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05f
Rk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBjbGFzc10pOworICAgICpvdXRWYWx1ZSA9
IChOU1N0cmluZyAqKXBheWxvYWQ7Cit9CisKK0BlbmQKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMgKFJ1bnRpbWUyRG9tYWluKQorCisrICh2b2lkKV9wYXJzZVJl
bW90ZU9iamVjdElkOihOU1N0cmluZyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9h
ZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TU3RyaW5n
IGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gKE5TU3RyaW5nICopcGF5bG9hZDsKK30KKworQGVu
ZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisKKyMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29s
SW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisj
aW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorI2lt
cG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3Vz
aW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworCisKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJz
Lmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V4cGVjdGVkL3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uLXJlc3VsdApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMTA3MjEyYjliNDgKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZXhwZWN0ZWQvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24tcmVzdWx0CkBA
IC0wLDAgKzEsMTA4OSBAQAorIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5k
cy5qcworLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFs
LXR5cGUtc2V0dGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcworCisjIyMgQmVn
aW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNl
CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworI2luY2x1
ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JGcm9udGVuZFJvdXRlci5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgQWx0
ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHZvaWQgc2V0QmFja2VuZERp
c3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNr
ZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KKyAgICBCYWNrZW5kRGlzcGF0
Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRj
aGVyLmdldCgpOyB9Citwcml2YXRlOgorICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9i
YWNrZW5kRGlzcGF0Y2hlcjsKK307CisKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgor
CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjIyMg
RW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4g
RmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KKy8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
KworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwor
CisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5k
RGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5j
cHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25hbC10
eXBlLXNldHRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVy
cy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIu
aD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ry
b3llZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShJTlNQ
RUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlcnMuaCIKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCit9IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAor
CisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPHd0Zi9KU09O
VmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJ
bnNwZWN0b3IgeworCitjbGFzcyBGcm9udGVuZFJvdXRlcjsKKworfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKwor
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgorI2luY2x1
ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFt
ZXNwYWNlIFByb3RvY29sIHsKKworCisKKy8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgorbmFtZXNw
YWNlIFJ1bnRpbWUgeworY2xhc3MgS2V5UGF0aDsKK30gLy8gUnVudGltZQorLy8gRW5kIG9mIGZv
cndhcmQgZGVjbGFyYXRpb25zLgorCisKKworCituYW1lc3BhY2UgVGVzdEhlbHBlcnMgeworCitT
dHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpOworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFsdWUpCit7CisgICAgcmV0
dXJuIGdldEVudW1Db25zdGFudFZhbHVlKHN0YXRpY19jYXN0PGludD4oZW51bVZhbHVlKSk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCisKK25hbWVzcGFjZSBSdW50aW1lIHsKKy8q
IEtleSBwYXRoLiAqLworY2xhc3MgS2V5UGF0aCA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsK
K3B1YmxpYzoKKyAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICd0eXBlJyB3aGlsZSBn
ZW5lcmF0aW5nIEtleVBhdGguCisgICAgZW51bSBjbGFzcyBUeXBlIHsKKyAgICAgICAgTnVsbCA9
IDAsCisgICAgICAgIFN0cmluZyA9IDEsCisgICAgICAgIEFycmF5ID0gMiwKKyAgICB9OyAvLyBl
bnVtIGNsYXNzIFR5cGUKKyAgICBlbnVtIHsKKyAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAorICAg
ICAgICBUeXBlU2V0ID0gMSA8PCAwLAorICAgICAgICBBbGxGaWVsZHNTZXQgPSAoVHlwZVNldCkK
KyAgICB9OworCisgICAgdGVtcGxhdGU8aW50IFNUQVRFPgorICAgIGNsYXNzIEJ1aWxkZXIgewor
ICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVzdWx0OworCisg
ICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0
ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWls
ZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXIo
UmVmPC8qS2V5UGF0aCovSlNPTjo6T2JqZWN0PiYmIG9iamVjdCkKKyAgICAgICAgICAgIDogbV9y
ZXN1bHQoV1RGTW92ZShvYmplY3QpKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FT
U0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0
YXRlKTsKKyAgICAgICAgfQorICAgICAgICBmcmllbmQgY2xhc3MgS2V5UGF0aDsKKyAgICBwdWJs
aWM6CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFR5cGVTZXQ+JiBzZXRUeXBlKFR5cGUgdmFs
dWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUeXBl
U2V0KSwgcHJvcGVydHlfdHlwZV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0U3RyaW5nKCJ0eXBlIl9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0
RW51bUNvbnN0YW50VmFsdWUodmFsdWUpKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8
VHlwZVNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIFJlZjxLZXlQYXRoPiByZWxlYXNlKCkK
KyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRz
U2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNp
emVvZihLZXlQYXRoKSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0KSwgY2Fubm90X2Nhc3QpOworCisg
ICAgICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uUmVzdWx0ID0gbV9yZXN1bHQucmVsZWFz
ZU5vbk51bGwoKTsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gV1RGTW92ZSgqcmVpbnRlcnBy
ZXRfY2FzdDxSZWY8S2V5UGF0aD4qPigmanNvblJlc3VsdCkpOworICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvKgorICAgICAqIFN5bnRoZXRpYyBj
b25zdHJ1Y3RvcjoKKyAgICAgKiBSZWY8S2V5UGF0aD4gcmVzdWx0ID0gS2V5UGF0aDo6Y3JlYXRl
KCkKKyAgICAgKiAgICAgLnNldFR5cGUoLi4uKQorICAgICAqICAgICAucmVsZWFzZSgpOworICAg
ICAqLworICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkp
OworICAgIH0KKworICAgIHZvaWQgc2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAg
eworICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRTdHJpbmcoInN0cmluZyJfcywgdmFsdWUp
OworICAgIH0KKworICAgIHZvaWQgc2V0QXJyYXkoUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5n
Pj4gdmFsdWUpCisgICAgeworICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRBcnJheSgiYXJy
YXkiX3MsIFdURk1vdmUodmFsdWUpKTsKKyAgICB9Cit9OworCit9IC8vIFJ1bnRpbWUKKworCisK
K25hbWVzcGFjZSBUZXN0SGVscGVycyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFByb3RvY29sRW51
bVR5cGU+CitPcHRpb25hbDxQcm90b2NvbEVudW1UeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJp
bmcoY29uc3QgU3RyaW5nJik7CisKKy8vIEVudW1zIGluIHRoZSAnUnVudGltZScgRG9tYWluCit0
ZW1wbGF0ZTw+CitPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpLZXlQYXRo
OjpUeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVu
dGltZTo6S2V5UGF0aDo6VHlwZT4oY29uc3QgU3RyaW5nJik7CisKK30gLy8gbmFtZXNwYWNlIFRl
c3RIZWxwZXJzCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KKy8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKworI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7
CisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKK25hbWVzcGFjZSBUZXN0SGVscGVycyB7CisKK3N0
YXRpYyBjb25zdCBjaGFyKiBjb25zdCBlbnVtX2NvbnN0YW50X3ZhbHVlc1tdID0geworICAgICJu
dWxsIiwKKyAgICAic3RyaW5nIiwKKyAgICAiYXJyYXkiLAorfTsKKworU3RyaW5nIGdldEVudW1D
b25zdGFudFZhbHVlKGludCBjb2RlKSB7CisgICAgcmV0dXJuIGVudW1fY29uc3RhbnRfdmFsdWVz
W2NvZGVdOworfQorCisvLyBFbnVtcyBpbiB0aGUgJ1J1bnRpbWUnIERvbWFpbgordGVtcGxhdGU8
PgorT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZT4g
cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6Oktl
eVBhdGg6OlR5cGU+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCit7CisgICAgc3RhdGlj
IGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0geworICAgICAgICAoc2l6ZV90KUluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6OlR5cGU6Ok51bGwsCisgICAgICAgIChz
aXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZTo6U3RyaW5n
LAorICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6
OlR5cGU6OkFycmF5LAorICAgIH07CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAzOyArK2kp
CisgICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25z
dGFudFZhbHVlc1tpXV0pCisgICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlJ1bnRpbWU6OktleVBhdGg6OlR5cGUpY29uc3RhbnRWYWx1ZXNbaV07CisKKyAgICByZXR1cm4g
V1RGOjpudWxsb3B0OworfQorCisKK30gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCisKKworCit9
IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgorLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8d3RmL1Jl
dGFpblB0ci5oPgorCisKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNo
ZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5t
bQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5
cGUtc2V0dGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3Bh
dGNoZXJzLmgiCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2luY2x1ZGUg
IlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVz
Lmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
KworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPFdlYklu
c3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRl
ZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVj
dAorQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisK
KyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAi
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRl
cm5hbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisjaW1w
b3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgorI2ltcG9y
dCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1w
b3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMu
aD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5o
PgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxl
ciogX2NvbnRyb2xsZXI7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6
KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgoreworICAgIHNlbGYg
PSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAg
IEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAg
cmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIFtzdXBlciBkZWFsbG9j
XTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
bi5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUt
c2V0dGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
KyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcg
bmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50
RGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJz
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9y
dCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQ
cm90b2NvbEpTT05PYmplY3QuaD4KKworCitAY2xhc3MgVGVzdFByb3RvY29sUnVudGltZUtleVBh
dGg7CisKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sUnVudGltZUtl
eVBhdGhUeXBlKSB7CisgICAgVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlTnVsbCwKKyAg
ICBUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGVTdHJpbmcsCisgICAgVGVzdFByb3RvY29s
UnVudGltZUtleVBhdGhUeXBlQXJyYXksCit9OworCisKK19fYXR0cmlidXRlX18oKHZpc2liaWxp
dHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aCA6
IFJXSVByb3RvY29sSlNPTk9iamVjdAorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoo
TlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQ7CistIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVj
dDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFR5cGU6KFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQ
YXRoVHlwZSl0eXBlOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2ln
bikgVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlIHR5cGU7CisvKiBvcHRpb25hbCAqLyBA
cHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKnN0cmluZzsKKy8qIG9wdGlvbmFs
ICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmFy
cmF5OworQGVuZAorCisKKworCisKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29s
QnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAi
VGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5o
IgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVy
Lmg+CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCisKKworCisjIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbEludGVybmFsLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQt
b3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0IDxXZWJJbnNw
ZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0
b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+CitPcHRpb25hbDxPYmpDRW51
bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKKworCitpbmxp
bmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBl
IHZhbHVlKQoreworICAgIHN3aXRjaCh2YWx1ZSkgeworICAgIGNhc2UgVGVzdFByb3RvY29sUnVu
dGltZUtleVBhdGhUeXBlTnVsbDoKKyAgICAgICAgcmV0dXJuICJudWxsIl9zOworICAgIGNhc2Ug
VGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlU3RyaW5nOgorICAgICAgICByZXR1cm4gInN0
cmluZyJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZUFycmF5Ogor
ICAgICAgICByZXR1cm4gImFycmF5Il9zOworICAgIH0KK30KKwordGVtcGxhdGU8PgoraW5saW5l
IE9wdGlvbmFsPFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZT4gZnJvbVByb3RvY29sU3Ry
aW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09ICJudWxsIikKKyAg
ICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZU51bGw7CisgICAgaWYg
KHZhbHVlID09ICJzdHJpbmciKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUnVudGltZUtl
eVBhdGhUeXBlU3RyaW5nOworICAgIGlmICh2YWx1ZSA9PSAiYXJyYXkiKQorICAgICAgICByZXR1
cm4gVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlQXJyYXk7CisgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKK30KKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucy5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2Nv
bFR5cGVQYXJzZXIuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmpl
Y3RQcml2YXRlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbnRlcmZhY2Ug
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChSdW50aW1lRG9tYWluKQorCisrICh2b2lkKV9w
YXJzZUtleVBhdGg6KFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoICoqKW91dFZhbHVlIGZyb21Q
YXlsb2FkOihpZClwYXlsb2FkOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMgKFJ1bnRpbWVEb21haW4pCisKKysgKHZvaWQpX3BhcnNlS2V5UGF0
aDooVGVzdFByb3RvY29sUnVudGltZUtleVBhdGggKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlk
KXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtO
U0RpY3Rpb25hcnkgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbFJ1bnRp
bWVLZXlQYXRoIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07Cit9CisKK0BlbmQKKwor
CisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorCisjIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgorLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRl
cm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBv
cnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisjaW1wb3J0
IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcg
bmFtZXNwYWNlIEluc3BlY3RvcjsKKworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sUnVu
dGltZUtleVBhdGgKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBO
U0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZAoreworICAgIGlmICghKHNlbGYg
PSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AidHlwZSJdLCBAInR5cGUiKTsKKyAg
ICBPcHRpb25hbDxUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGU+IHR5cGUgPSBmcm9tUHJv
dG9jb2xTdHJpbmc8VGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlPihwYXlsb2FkW0AidHlw
ZSJdKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9FTlVNX1ZBTFVFKHR5cGUsIEAidHlw
ZSIpOworICAgIHNlbGYudHlwZSA9IHR5cGUudmFsdWUoKTsKKworICAgIHNlbGYuc3RyaW5nID0g
cGF5bG9hZFtAInN0cmluZyJdOworCisgICAgc2VsZi5hcnJheSA9IHBheWxvYWRbQCJhcnJheSJd
OworCisgICAgcmV0dXJuIHNlbGY7Cit9CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2Nv
bE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopb2JqZWN0Cit7CisgICAgaWYgKCEoc2Vs
ZiA9IFtzdXBlciBpbml0V2l0aEpTT05PYmplY3Q6W29iamVjdCB0b0pTT05PYmplY3RdLmdldCgp
XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoVHlwZTooVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlKXR5
cGUKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5p
bDsKKworICAgIHNlbGYudHlwZSA9IHR5cGU7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAo
dm9pZClzZXRUeXBlOihUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGUpdHlwZQoreworICAg
IFtzdXBlciBzZXRTdHJpbmc6dG9Qcm90b2NvbFN0cmluZyh0eXBlKSBmb3JLZXk6QCJ0eXBlIl07
Cit9CisKKy0gKFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZSl0eXBlCit7CisgICAgcmV0
dXJuIGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGU+KFtz
dXBlciBzdHJpbmdGb3JLZXk6QCJ0eXBlIl0pLnZhbHVlKCk7Cit9CisKKy0gKHZvaWQpc2V0U3Ry
aW5nOihOU1N0cmluZyAqKXN0cmluZworeworICAgIFtzdXBlciBzZXRTdHJpbmc6c3RyaW5nIGZv
cktleTpAInN0cmluZyJdOworfQorCistIChOU1N0cmluZyAqKXN0cmluZworeworICAgIHJldHVy
biBbc3VwZXIgc3RyaW5nRm9yS2V5OkAic3RyaW5nIl07Cit9CisKKy0gKHZvaWQpc2V0QXJyYXk6
KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWFycmF5Cit7CisgICAgW3N1cGVyIHNldEpTT05BcnJh
eTp0b0pTT05TdHJpbmdBcnJheShhcnJheSkgZm9yS2V5OkAiYXJyYXkiXTsKK30KKworLSAoTlNB
cnJheS8qPE5TU3RyaW5nPiovICopYXJyYXkKK3sKKyAgICByZXR1cm4gdG9PYmpDU3RyaW5nQXJy
YXkoW3N1cGVyIEpTT05BcnJheUZvcktleTpAImFycmF5Il0pOworfQorCitAZW5kCisKKworIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3Nob3VsZC1zdHJpcC1j
b21tZW50cy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC9zaG91bGQtc3RyaXAtY29tbWVudHMuanNvbi1yZXN1bHQKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmViYTg4ZDExM2NhCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL3Nob3VsZC1zdHJpcC1jb21tZW50cy5qc29uLXJlc3VsdApAQCAtMCwwICsxLDgz
NSBAQAorIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcworLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNob3VsZC1zdHJpcC1jb21tZW50cy5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisjIyMgRW5kIEZpbGU6IElu
c3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcworCisjIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
c2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVS
TkFURV9ESVNQQVRDSEVSUykKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorCituYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKKworY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVi
bGljOgorICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRj
aGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0
Y2hlcik7IH0KKyAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25z
dCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Citwcml2YXRlOgorICAgIFJl
ZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKK307CisKKworCisK
K30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5k
RGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5o
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlwLWNvbW1lbnRz
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3R5cGVkZWYgU3Ry
aW5nIEVycm9yU3RyaW5nOworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5k
IEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJh
Y2tlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBz
aG91bGQtc3RyaXAtY29tbWVudHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEJhY2tlbmRE
aXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRl
bmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9O
ZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorI2luY2x1ZGUgIlRlc3RBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNo
ZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNob3VsZC1zdHJpcC1jb21tZW50cy5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPHd0Zi9KU09O
VmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJ
bnNwZWN0b3IgeworCitjbGFzcyBGcm9udGVuZFJvdXRlcjsKKworfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHNob3VsZC1zdHJpcC1jb21tZW50cy5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
KworIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIHNob3VsZC1zdHJpcC1jb21tZW50cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25z
Lmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFByb3RvY29sIHsK
KworCisKKworCisKKworCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KKy8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKworI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisK
K25hbWVzcGFjZSBQcm90b2NvbCB7CisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmpl
Y3RzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJz
LmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaG91bGQtc3RyaXAtY29tbWVu
dHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJz
Lmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCisKKworbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bEJhY2tlbmREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHNob3VsZC1zdHJpcC1jb21tZW50cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29s
QmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5o
IgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2luY2x1ZGUgPHd0
Zi9KU09OVmFsdWVzLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hl
cnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNob3VsZC1zdHJpcC1jb21tZW50cy5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPFdl
Ykluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAo
ImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09i
amVjdAorQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5o
CisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbi5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5o
IgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisjaW1wb3J0IDxK
YXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgorI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgorCit1
c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2Nv
bnRyb2xsZXI7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21l
bnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgoreworICAgIHNlbGYgPSBbc3Vw
ZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIEFTU0VS
VChjb250cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAgcmV0dXJu
IHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIFtzdXBlciBkZWFsbG9jXTsKK30K
KworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQor
CisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNob3VsZC1zdHJpcC1jb21tZW50cy5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQ
cm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5oIgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3Bl
Y3RvcjsKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0K
KworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9u
Lmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KKwor
CisKKworCisKKworCisKKworCisKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29s
QnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3Rv
Y29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgorI2ltcG9y
dCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1w
b3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCisKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bEludGVybmFsLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlwLWNvbW1l
bnRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lt
cG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xB
cnJheUNvbnZlcnNpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBPYmpDRW51bVR5cGU+CitPcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2Nv
bFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHNob3VsZC1zdHJpcC1jb21tZW50cy5qc29uCisvLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucy5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRl
c3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2Nv
bEpTT05PYmplY3RQcml2YXRlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKwor
CisKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorCisj
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBzaG91bGQtc3RyaXAtY29tbWVudHMuanNvbgorLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5h
bC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQg
PFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisjaW1wb3J0IDx3
dGYvQXNzZXJ0aW9ucy5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFt
ZXNwYWNlIEluc3BlY3RvcjsKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1t
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24t
cmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4
cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uLXJlc3Vs
dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOGZmZjlhNGUwZTMKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpz
b24tcmVzdWx0CkBAIC0wLDAgKzEsODU2IEBACisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFj
a2VuZENvbW1hbmRzLmpzCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1k
ZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENv
bW1hbmRzLmpzCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9u
LWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisKK25hbWVz
cGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Citw
dWJsaWM6CisgICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3Bh
dGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNw
YXRjaGVyKTsgfQorICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNv
bnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KK3ByaXZhdGU6CisgICAg
UmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOworfTsKKworCisK
KworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tl
bmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJz
LmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFs
aWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVj
dHMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVj
dG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKKworCit9IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMj
IyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlw
ZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1
ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCisjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVycy5oIgorI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgorCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8d3RmL0pTT05W
YWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIElu
c3BlY3RvciB7CisKK2NsYXNzIEZyb250ZW5kUm91dGVyOworCit9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVn
aW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK30gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJz
LmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2
ZS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2Nv
bFR5cGVzLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CisKKworCituYW1lc3BhY2UgUHJvdG9jb2wgeworCisKKworCisKKy8vIFR5cGVkZWZz
LgorbmFtZXNwYWNlIFJ1bnRpbWUgeworLyogVW5pcXVlIG9iamVjdCBpZGVudGlmaWVyLiAqLwor
dHlwZWRlZiBpbnQgUmVtb3RlT2JqZWN0SWQ7Cit9IC8vIFJ1bnRpbWUKKy8vIEVuZCBvZiB0eXBl
ZGVmcy4KKworCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKworI2luY2x1ZGUgPHd0Zi9P
cHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIElu
c3BlY3RvciB7CisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKworCit9IC8vIG5hbWVzcGFjZSBQ
cm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xPYmplY3RzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2Vu
ZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRl
Y2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0
ci5oPgorCisKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgK
KworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1w
cmltaXRpdmUtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERp
c3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2luY2x1
ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFs
dWVzLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKwor
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUt
dHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNp
bXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KKworX19hdHRyaWJ1dGVfXygodmlz
aWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRp
b24gOiBOU09iamVjdAorQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbi5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1t
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlh
c2VkLXByaW1pdGl2ZS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgorCisjaW1w
b3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2Vu
ZERpc3BhdGNoZXJzLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRj
aGFibGVBZ2VudC5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0
b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5h
dGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVycy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitA
aW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgoreworICAgIEF1Z21lbnRh
YmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Cit9CisKKy0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29u
dHJvbGxlcgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAg
ICAgICByZXR1cm4gbmlsOworICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBfY29udHJvbGxl
ciA9IGNvbnRyb2xsZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYwor
eworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
RXZlbnREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5
cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVy
bmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9y
dCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisj
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
dHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KKy8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3Vu
ZGF0aW9uLmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3Qu
aD4KKworCisKKworCisKKworCisKKworCisKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVBy
b3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgorCisjIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXBy
aW1pdGl2ZS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09O
T2JqZWN0UHJpdmF0ZS5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNw
ZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCisKKworCisj
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKworIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3Rv
Y29sLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25z
Lmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51
bVR5cGU+CitPcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBT
dHJpbmcmIHZhbHVlKTsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisKKyMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1w
b3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJ
UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9y
OworCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoUnVudGltZURvbWFp
bikKKworKyAodm9pZClfcGFyc2VSZW1vdGVPYmplY3RJZDooTlNOdW1iZXIgKiopb3V0VmFsdWUg
ZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucyAoUnVudGltZURvbWFpbikKKworKyAodm9pZClfcGFyc2VS
ZW1vdGVPYmplY3RJZDooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxv
YWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU051bWJl
ciBjbGFzc10pOworICAgICpvdXRWYWx1ZSA9IChOU051bWJlciAqKXBheWxvYWQ7Cit9CisKK0Bl
bmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorCisj
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJU
ZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2
YXRlLmg+CisjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1
ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisKKworIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYXJyYXkt
dHlwZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbi1yZXN1bHQK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmJiODRhYjhmOGIxCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uLXJlc3VsdApAQCAt
MCwwICsxLDEwMzggQEAKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMu
anMKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFy
cmF5LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisvLyBEZWJ1Z2dlcgorSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiRGVidWdnZXIi
LCBudWxsKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJEZWJ1Z2dlci5SZWFzb24i
LCB7RGllZDogIkRpZWQiLCBGYWludGVkOiAiRmFpbnRlZCIsIEh1bmdyeTogIkh1bmdyeSJ9KTsK
K0luc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkRlYnVnZ2VyIiwgbnVsbCk7CisjIyMg
RW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcworCisjIyMgQmVnaW4gRmlsZTog
VGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KKy8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworI2luY2x1ZGUgIlRlc3RQcm90
b2NvbFR5cGVzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJv
dXRlci5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgQWx0ZXJuYXRlQmFja2Vu
ZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVm
UHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hl
ciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KKyAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2Vu
ZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9
Citwcml2YXRlOgorICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0
Y2hlcjsKK307CisKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8g
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjIyMgRW5kIEZpbGU6IFRl
c3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJh
Y2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlw
ZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xP
YmplY3RzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIElu
c3BlY3RvciB7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCisKKworfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAor
CisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYv
SlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQorI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIK
KyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMj
IEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTog
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFBy
b3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBG
cm9udGVuZFJvdXRlcjsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6
IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVu
ZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUt
ZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJv
bnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFj
ZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxl
OiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbE9iamVjdHMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVj
bGFyYXRpb24tYXJyYXktdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yUHJvdG9jb2xUeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25h
bWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworCisKKy8v
IEZvcndhcmQgZGVjbGFyYXRpb25zLgorbmFtZXNwYWNlIERlYnVnZ2VyIHsKK2VudW0gY2xhc3Mg
UmVhc29uOworfSAvLyBEZWJ1Z2dlcgorLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgor
CisKKy8vIFR5cGVkZWZzLgorbmFtZXNwYWNlIERlYnVnZ2VyIHsKK3R5cGVkZWYgaW50IEJyZWFr
cG9pbnRJZDsKK30gLy8gRGVidWdnZXIKKworbmFtZXNwYWNlIFJ1bnRpbWUgewordHlwZWRlZiBp
bnQgT2JqZWN0SWQ7Cit0eXBlZGVmIEpTT046OkFycmF5T2Y8aW50PiBMdWNreU51bWJlcnM7Cit0
eXBlZGVmIEpTT046OkFycmF5T2Y8U3RyaW5nPiBCYWJ5TmFtZXM7Cit0eXBlZGVmIEpTT046OkFy
cmF5T2Y8aW50PiBOZXdPYmplY3RzOwordHlwZWRlZiBKU09OOjpBcnJheU9mPGludD4gT2xkT2Jq
ZWN0czsKK3R5cGVkZWYgSlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dl
cjo6UmVhc29uPiBTdG9wUmVhc29uczsKK30gLy8gUnVudGltZQorLy8gRW5kIG9mIHR5cGVkZWZz
LgorCituYW1lc3BhY2UgVGVzdEhlbHBlcnMgeworCitTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFs
dWUoaW50IGNvZGUpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgZ2V0RW51bUNvbnN0
YW50VmFsdWUoVCBlbnVtVmFsdWUpCit7CisgICAgcmV0dXJuIGdldEVudW1Db25zdGFudFZhbHVl
KHN0YXRpY19jYXN0PGludD4oZW51bVZhbHVlKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RI
ZWxwZXJzCisKK25hbWVzcGFjZSBEZWJ1Z2dlciB7CisvKiAgKi8KK2VudW0gY2xhc3MgUmVhc29u
IHsKKyAgICBEaWVkID0gMCwKKyAgICBGYWludGVkID0gMSwKKyAgICBIdW5ncnkgPSAyLAorfTsg
Ly8gZW51bSBjbGFzcyBSZWFzb24KK30gLy8gRGVidWdnZXIKKworCisKK25hbWVzcGFjZSBUZXN0
SGVscGVycyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFByb3RvY29sRW51bVR5cGU+CitPcHRpb25h
bDxQcm90b2NvbEVudW1UeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5n
Jik7CisKKy8vIEVudW1zIGluIHRoZSAnRGVidWdnZXInIERvbWFpbgordGVtcGxhdGU8PgorT3B0
aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbj4gcGFyc2VFbnVtVmFs
dWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb24+KGNvbnN0
IFN0cmluZyYpOworCit9IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycworCit9IC8vIG5hbWVzcGFj
ZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworbmFtZXNwYWNlIFdURiB7
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKKworLy8gSGFzaCBk
ZWNsYXJhdGlvbnMgaW4gdGhlICdEZWJ1Z2dlcicgRG9tYWluCit0ZW1wbGF0ZTw+CitzdHJ1Y3Qg
RGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbj4geworICAg
IHR5cGVkZWYgSW50SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uPiBI
YXNoOworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bE9iamVjdHMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5
cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorCisjaW5j
bHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCitu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworbmFtZXNwYWNl
IFRlc3RIZWxwZXJzIHsKKworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRf
dmFsdWVzW10gPSB7CisgICAgIkRpZWQiLAorICAgICJGYWludGVkIiwKKyAgICAiSHVuZ3J5IiwK
K307CisKK1N0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgeworICAgIHJldHVy
biBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb2RlXTsKK30KKworLy8gRW51bXMgaW4gdGhlICdEZWJ1
Z2dlcicgRG9tYWluCit0ZW1wbGF0ZTw+CitPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpE
ZWJ1Z2dlcjo6UmVhc29uPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90
b2NvbDo6RGVidWdnZXI6OlJlYXNvbj4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKK3sK
KyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7CisgICAgICAgIChz
aXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbjo6RGllZCwKKyAgICAg
ICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uOjpGYWludGVk
LAorICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb246
Okh1bmdyeSwKKyAgICB9OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMzsgKytpKQorICAg
ICAgICBpZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRW
YWx1ZXNbaV1dKQorICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1
Z2dlcjo6UmVhc29uKWNvbnN0YW50VmFsdWVzW2ldOworCisgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKK30KKworCit9IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycworCisKKworfSAvLyBuYW1lc3Bh
Y2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJh
Y2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlw
ZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVy
bmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKwor
CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgor
CisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25m
aWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5j
bHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorCituYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29s
Lmg+CisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFj
ZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKK0BlbmQKKworCisjIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorCisjIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRp
b24uaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbXBvcnQgIlRlc3RQ
cm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0
ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21l
bnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIElu
c3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KK3sK
KyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworfQorCist
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNv
bnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlm
ICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7Cisg
ICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQorCistICh2
b2lkKWRlYWxsb2MKK3sKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKK0BlbmQKKworCisjIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKworIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgorLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRl
cm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBv
cnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKwor
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2wuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgor
CisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+CisKKworCisK
KwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGVidWdnZXJSZWFzb24p
IHsKKyAgICBUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbkRpZWQsCisgICAgVGVzdFByb3RvY29s
RGVidWdnZXJSZWFzb25GYWludGVkLAorICAgIFRlc3RQcm90b2NvbERlYnVnZ2VyUmVhc29uSHVu
Z3J5LAorfTsKKworCisKKworCisKKworCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9j
b2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJU
ZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgi
CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIu
aD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKKworCisKKyMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sSW50ZXJuYWwuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xh
cmF0aW9uLWFycmF5LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rv
ci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7
CisKK3RlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KK09wdGlvbmFsPE9iakNFbnVtVHlw
ZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOworCisKK2lubGluZSBT
dHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbiB2YWx1ZSkK
K3sKKyAgICBzd2l0Y2godmFsdWUpIHsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERlYnVnZ2VyUmVh
c29uRGllZDoKKyAgICAgICAgcmV0dXJuICJEaWVkIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29s
RGVidWdnZXJSZWFzb25GYWludGVkOgorICAgICAgICByZXR1cm4gIkZhaW50ZWQiX3M7CisgICAg
Y2FzZSBUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbkh1bmdyeToKKyAgICAgICAgcmV0dXJuICJI
dW5ncnkiX3M7CisgICAgfQorfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgT3B0aW9uYWw8VGVzdFBy
b3RvY29sRGVidWdnZXJSZWFzb24+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZh
bHVlKQoreworICAgIGlmICh2YWx1ZSA9PSAiRGllZCIpCisgICAgICAgIHJldHVybiBUZXN0UHJv
dG9jb2xEZWJ1Z2dlclJlYXNvbkRpZWQ7CisgICAgaWYgKHZhbHVlID09ICJGYWludGVkIikKKyAg
ICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERlYnVnZ2VyUmVhc29uRmFpbnRlZDsKKyAgICBpZiAo
dmFsdWUgPT0gIkh1bmdyeSIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEZWJ1Z2dlclJl
YXNvbkh1bmdyeTsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCisKKworfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXkt
dHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNp
bXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorCisjaW1wb3J0ICJUZXN0UHJv
dG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKKyNpbXBvcnQgPFdl
Ykluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisKK3VzaW5nIG5hbWVz
cGFjZSBJbnNwZWN0b3I7CisKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
IChEZWJ1Z2dlckRvbWFpbikKKworKyAodm9pZClfcGFyc2VCcmVha3BvaW50SWQ6KE5TTnVtYmVy
ICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworKyAodm9pZClfcGFyc2VSZWFz
b246KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworCitAZW5k
CitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoUnVudGltZURvbWFpbikK
KworKyAodm9pZClfcGFyc2VPYmplY3RJZDooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxv
YWQ6KGlkKXBheWxvYWQ7CisrICh2b2lkKV9wYXJzZUx1Y2t5TnVtYmVyczooTlNBcnJheS8qPE5T
TnVtYmVyPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworKyAodm9pZClf
cGFyc2VCYWJ5TmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5
bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNlTmV3T2JqZWN0czooTlNBcnJheS8qPE5T
TnVtYmVyPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworKyAodm9pZClf
cGFyc2VPbGRPYmplY3RzOihOU0FycmF5Lyo8TlNOdW1iZXI+Ki8gKiopb3V0VmFsdWUgZnJvbVBh
eWxvYWQ6KGlkKXBheWxvYWQ7CisrICh2b2lkKV9wYXJzZVN0b3BSZWFzb25zOihOU0FycmF5Lyo8
TlNTdHJpbmc+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisKK0BlbmQK
KworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoRGVidWdnZXJE
b21haW4pCisKKysgKHZvaWQpX3BhcnNlQnJlYWtwb2ludElkOihOU051bWJlciAqKilvdXRWYWx1
ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFE
X1RZUEUocGF5bG9hZCwgW05TTnVtYmVyIGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gKE5TTnVt
YmVyICopcGF5bG9hZDsKK30KKworKyAodm9pZClfcGFyc2VSZWFzb246KE5TTnVtYmVyICoqKW91
dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9CQURfVFlQRShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKKyAgICBPcHRpb25hbDxUZXN0
UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbj4gcmVzdWx0ID0gSW5zcGVjdG9yOjpmcm9tUHJvdG9jb2xT
dHJpbmc8VGVzdFByb3RvY29sRGVidWdnZXJSZWFzb24+KHBheWxvYWQpOworICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfQkFEX0VOVU1fVkFMVUUocmVzdWx0LCBAIlJlYXNvbiIpOworICAgICpvdXRW
YWx1ZSA9IEAocmVzdWx0LnZhbHVlKCkpOworfQorCitAZW5kCitAaW1wbGVtZW50YXRpb24gVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChSdW50aW1lRG9tYWluKQorCisrICh2b2lkKV9wYXJz
ZU9iamVjdElkOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAor
eworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TTnVtYmVyIGNs
YXNzXSk7CisgICAgKm91dFZhbHVlID0gKE5TTnVtYmVyICopcGF5bG9hZDsKK30KKworKyAodm9p
ZClfcGFyc2VMdWNreU51bWJlcnM6KE5TQXJyYXkvKjxOU051bWJlcj4qLyAqKilvdXRWYWx1ZSBm
cm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZ
UEUocGF5bG9hZCwgW05TQXJyYXkvKjxOU051bWJlcj4qLyBjbGFzc10pOworICAgICpvdXRWYWx1
ZSA9IChOU0FycmF5Lyo8TlNOdW1iZXI+Ki8gKilwYXlsb2FkOworfQorCisrICh2b2lkKV9wYXJz
ZUJhYnlOYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2Fk
OihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2Fk
LCBbTlNBcnJheS8qPE5TU3RyaW5nPiovIGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gKE5TQXJy
YXkvKjxOU1N0cmluZz4qLyAqKXBheWxvYWQ7Cit9CisKKysgKHZvaWQpX3BhcnNlTmV3T2JqZWN0
czooTlNBcnJheS8qPE5TTnVtYmVyPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXls
b2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNBcnJh
eS8qPE5TTnVtYmVyPiovIGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gKE5TQXJyYXkvKjxOU051
bWJlcj4qLyAqKXBheWxvYWQ7Cit9CisKKysgKHZvaWQpX3BhcnNlT2xkT2JqZWN0czooTlNBcnJh
eS8qPE5TTnVtYmVyPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7Cisg
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNBcnJheS8qPE5TTnVt
YmVyPiovIGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gKE5TQXJyYXkvKjxOU051bWJlcj4qLyAq
KXBheWxvYWQ7Cit9CisKKysgKHZvaWQpX3BhcnNlU3RvcFJlYXNvbnM6KE5TQXJyYXkvKjxOU1N0
cmluZz4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TQXJyYXkvKjxOU1N0cmluZz4qLyBj
bGFzc10pOworICAgICpvdXRWYWx1ZSA9IChOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilwYXlsb2Fk
OworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVz
dFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0
ZS5oPgorI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVz
Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworCisKKworCisjIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1lbnVt
LXR5cGUuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbi1yZXN1bHQK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjA5NzAwMGQxODZiCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24tcmVzdWx0CkBAIC0w
LDAgKzEsMTA1MSBAQAorIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5q
cworLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51
bS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
Ly8gUnVudGltZQorSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiUnVudGltZSIsIG51
bGwpOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIlJ1bnRpbWUuRmFybUFuaW1hbHMi
LCB7UGlnczogIlBpZ3MiLCBDb3dzOiAiQ293cyIsIENhdHM6ICJDYXRzIiwgSGVuczogIkhlbnMi
fSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiUnVudGltZS5Ud29MZWdnZWRBbmlt
YWxzIiwge0R1Y2tzOiAiRHVja3MiLCBIZW5zOiAiSGVucyIsIENyb3dzOiAiQ3Jvd3MiLCBGbGFt
aW5nb3M6ICJGbGFtaW5nb3MifSk7CitJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJS
dW50aW1lIiwgbnVsbCk7CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5q
cworCisjIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5
cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJh
Z21hIG9uY2UKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQor
CisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitj
bGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdm9pZCBzZXRC
YWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikg
eyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQorICAgIEJhY2tl
bmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2Vu
ZERpc3BhdGNoZXIuZ2V0KCk7IH0KK3ByaXZhdGU6CisgICAgUmVmUHRyPEJhY2tlbmREaXNwYXRj
aGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOworfTsKKworCisKKworfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKKyMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMj
IyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0eXBlZGVmIFN0cmluZyBFcnJvclN0cmlu
ZzsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0QmFj
a2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hl
cnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlv
bi1lbnVtLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVy
cy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIu
aD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ry
b3llZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShJTlNQ
RUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlcnMuaCIKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCit9IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAor
CisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1
ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CisKK2NsYXNzIEZyb250ZW5kUm91dGVyOworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4g
RmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgorLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
CisKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFByb3Rv
Y29sIHsKKworCisKKy8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgorbmFtZXNwYWNlIFJ1bnRpbWUg
eworZW51bSBjbGFzcyBGYXJtQW5pbWFsczsKK2VudW0gY2xhc3MgVHdvTGVnZ2VkQW5pbWFsczsK
K30gLy8gUnVudGltZQorLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgorCisKKworCitu
YW1lc3BhY2UgVGVzdEhlbHBlcnMgeworCitTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50
IGNvZGUpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFs
dWUoVCBlbnVtVmFsdWUpCit7CisgICAgcmV0dXJuIGdldEVudW1Db25zdGFudFZhbHVlKHN0YXRp
Y19jYXN0PGludD4oZW51bVZhbHVlKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJz
CisKK25hbWVzcGFjZSBSdW50aW1lIHsKKy8qICAqLworZW51bSBjbGFzcyBGYXJtQW5pbWFscyB7
CisgICAgUGlncyA9IDAsCisgICAgQ293cyA9IDEsCisgICAgQ2F0cyA9IDIsCisgICAgSGVucyA9
IDMsCit9OyAvLyBlbnVtIGNsYXNzIEZhcm1BbmltYWxzCisvKiAgKi8KK2VudW0gY2xhc3MgVHdv
TGVnZ2VkQW5pbWFscyB7CisgICAgRHVja3MgPSA0LAorICAgIEhlbnMgPSAzLAorICAgIENyb3dz
ID0gNSwKKyAgICBGbGFtaW5nb3MgPSA2LAorfTsgLy8gZW51bSBjbGFzcyBUd29MZWdnZWRBbmlt
YWxzCit9IC8vIFJ1bnRpbWUKKworCisKK25hbWVzcGFjZSBUZXN0SGVscGVycyB7CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFByb3RvY29sRW51bVR5cGU+CitPcHRpb25hbDxQcm90b2NvbEVudW1UeXBl
PiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJik7CisKKy8vIEVudW1zIGlu
IHRoZSAnUnVudGltZScgRG9tYWluCit0ZW1wbGF0ZTw+CitPcHRpb25hbDxJbnNwZWN0b3I6OlBy
b3RvY29sOjpSdW50aW1lOjpGYXJtQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzPihjb25zdCBTdHJpbmcmKTsK
K3RlbXBsYXRlPD4KK09wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xl
Z2dlZEFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29s
OjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxzPihjb25zdCBTdHJpbmcmKTsKKworfSAvLyBuYW1l
c3BhY2UgVGVzdEhlbHBlcnMKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgRGVmYXVsdEhhc2g7CisKKy8vIEhhc2ggZGVjbGFyYXRpb25zIGluIHRoZSAnUnVu
dGltZScgRG9tYWluCit0ZW1wbGF0ZTw+CitzdHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM+IHsKKyAgICB0eXBlZGVmIEludEhhc2g8SW5z
cGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM+IEhhc2g7Cit9OwordGVtcGxh
dGU8Pgorc3RydWN0IERlZmF1bHRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3
b0xlZ2dlZEFuaW1hbHM+IHsKKyAgICB0eXBlZGVmIEludEhhc2g8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFscz4gSGFzaDsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdURgorIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKworIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
VGVzdFByb3RvY29sT2JqZWN0cy5oIgorCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFt
ZXNwYWNlIFByb3RvY29sIHsKKworbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKKworc3RhdGljIGNv
bnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFsdWVzW10gPSB7CisgICAgIlBpZ3MiLAor
ICAgICJDb3dzIiwKKyAgICAiQ2F0cyIsCisgICAgIkhlbnMiLAorICAgICJEdWNrcyIsCisgICAg
IkNyb3dzIiwKKyAgICAiRmxhbWluZ29zIiwKK307CisKK1N0cmluZyBnZXRFbnVtQ29uc3RhbnRW
YWx1ZShpbnQgY29kZSkgeworICAgIHJldHVybiBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb2RlXTsK
K30KKworLy8gRW51bXMgaW4gdGhlICdSdW50aW1lJyBEb21haW4KK3RlbXBsYXRlPD4KK09wdGlv
bmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzPiBwYXJzZUVudW1W
YWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM+
KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCit7CisgICAgc3RhdGljIGNvbnN0IHNpemVf
dCBjb25zdGFudFZhbHVlc1tdID0geworICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9j
b2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzOjpQaWdzLAorICAgICAgICAoc2l6ZV90KUluc3BlY3Rv
cjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzOjpDb3dzLAorICAgICAgICAoc2l6ZV90
KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzOjpDYXRzLAorICAgICAg
ICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzOjpIZW5z
LAorICAgIH07CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCA0OyArK2kpCisgICAgICAgIGlm
IChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tp
XV0pCisgICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZh
cm1BbmltYWxzKWNvbnN0YW50VmFsdWVzW2ldOworCisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
K30KKwordGVtcGxhdGU8PgorT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6
VHdvTGVnZ2VkQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xT
dHJpbmcpCit7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0gewor
ICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFu
aW1hbHM6OkR1Y2tzLAorICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRp
bWU6OlR3b0xlZ2dlZEFuaW1hbHM6OkhlbnMsCisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQ
cm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFsczo6Q3Jvd3MsCisgICAgICAgIChzaXpl
X3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFsczo6RmxhbWlu
Z29zLAorICAgIH07CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCA0OyArK2kpCisgICAgICAg
IGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVl
c1tpXV0pCisgICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6
OlR3b0xlZ2dlZEFuaW1hbHMpY29uc3RhbnRWYWx1ZXNbaV07CisKKyAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworfQorCisKK30gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCisKKworCit9IC8vIG5h
bWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+
CisKKworCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisj
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJj
b25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisj
aW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorCituYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9j
b2wuaD4KKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJm
YWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAorQGVuZAorCisKKyMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0
aW9uLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW1wb3J0ICJUZXN0
UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0Fs
dGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdt
ZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJ
bnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCit7
CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKK30KKwor
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JD
b250cm9sbGVyKiljb250cm9sbGVyCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBp
ZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNvbnRyb2xsZXIpOwor
ICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAo
dm9pZClkZWFsbG9jCit7CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCitAZW5kCisKKworIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisKKyMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgorLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRl
cm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBv
cnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKwor
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2wuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisK
KyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KKworCisKKwor
Cit0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1h
bHMpIHsKKyAgICBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHNQaWdzLAorICAgIFRlc3RQ
cm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFsc0Nvd3MsCisgICAgVGVzdFByb3RvY29sUnVudGltZUZh
cm1BbmltYWxzQ2F0cywKKyAgICBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHNIZW5zLAor
fTsKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sUnVudGltZVR3b0xl
Z2dlZEFuaW1hbHMpIHsKKyAgICBUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFsc0R1
Y2tzLAorICAgIFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzSGVucywKKyAgICBU
ZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFsc0Nyb3dzLAorICAgIFRlc3RQcm90b2Nv
bFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzRmxhbWluZ29zLAorfTsKKworCisKKworCisKKworCisj
aW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3Rz
Lmg+CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKKworIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbEludGVybmFsLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0
eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVz
dFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1
Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMu
aD4KKworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3Rv
Y29sLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25z
Lmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51
bVR5cGU+CitPcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBT
dHJpbmcmIHZhbHVlKTsKKworCitpbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFBy
b3RvY29sUnVudGltZUZhcm1BbmltYWxzIHZhbHVlKQoreworICAgIHN3aXRjaCh2YWx1ZSkgewor
ICAgIGNhc2UgVGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzUGlnczoKKyAgICAgICAgcmV0
dXJuICJQaWdzIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzQ293
czoKKyAgICAgICAgcmV0dXJuICJDb3dzIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sUnVudGlt
ZUZhcm1BbmltYWxzQ2F0czoKKyAgICAgICAgcmV0dXJuICJDYXRzIl9zOworICAgIGNhc2UgVGVz
dFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzSGVuczoKKyAgICAgICAgcmV0dXJuICJIZW5zIl9z
OworICAgIH0KK30KKwordGVtcGxhdGU8PgoraW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFJ1
bnRpbWVGYXJtQW5pbWFscz4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUp
Cit7CisgICAgaWYgKHZhbHVlID09ICJQaWdzIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2Nv
bFJ1bnRpbWVGYXJtQW5pbWFsc1BpZ3M7CisgICAgaWYgKHZhbHVlID09ICJDb3dzIikKKyAgICAg
ICAgcmV0dXJuIFRlc3RQcm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFsc0Nvd3M7CisgICAgaWYgKHZh
bHVlID09ICJDYXRzIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFJ1bnRpbWVGYXJtQW5p
bWFsc0NhdHM7CisgICAgaWYgKHZhbHVlID09ICJIZW5zIikKKyAgICAgICAgcmV0dXJuIFRlc3RQ
cm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFsc0hlbnM7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
K30KKworaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFJ1bnRpbWVU
d29MZWdnZWRBbmltYWxzIHZhbHVlKQoreworICAgIHN3aXRjaCh2YWx1ZSkgeworICAgIGNhc2Ug
VGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHNEdWNrczoKKyAgICAgICAgcmV0dXJu
ICJEdWNrcyJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxz
SGVuczoKKyAgICAgICAgcmV0dXJuICJIZW5zIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sUnVu
dGltZVR3b0xlZ2dlZEFuaW1hbHNDcm93czoKKyAgICAgICAgcmV0dXJuICJDcm93cyJfczsKKyAg
ICBjYXNlIFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzRmxhbWluZ29zOgorICAg
ICAgICByZXR1cm4gIkZsYW1pbmdvcyJfczsKKyAgICB9Cit9CisKK3RlbXBsYXRlPD4KK2lubGlu
ZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFscz4gZnJvbVByb3Rv
Y29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09ICJEdWNr
cyIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFsc0R1
Y2tzOworICAgIGlmICh2YWx1ZSA9PSAiSGVucyIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9j
b2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFsc0hlbnM7CisgICAgaWYgKHZhbHVlID09ICJDcm93cyIp
CisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFsc0Nyb3dz
OworICAgIGlmICh2YWx1ZSA9PSAiRmxhbWluZ29zIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90
b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzRmxhbWluZ29zOworICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0
eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5o
IgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQ
YXJzZXIuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2
YXRlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbnRlcmZhY2UgVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zIChSdW50aW1lRG9tYWluKQorCisrICh2b2lkKV9wYXJzZUZh
cm1BbmltYWxzOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsK
KysgKHZvaWQpX3BhcnNlVHdvTGVnZ2VkQW5pbWFsczooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJv
bVBheWxvYWQ6KGlkKXBheWxvYWQ7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucyAoUnVudGltZURvbWFpbikKKworKyAodm9pZClfcGFyc2VGYXJt
QW5pbWFsczooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sK
KyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBjbGFz
c10pOworICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFscz4gcmVzdWx0
ID0gSW5zcGVjdG9yOjpmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sUnVudGltZUZhcm1B
bmltYWxzPihwYXlsb2FkKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9FTlVNX1ZBTFVF
KHJlc3VsdCwgQCJGYXJtQW5pbWFscyIpOworICAgICpvdXRWYWx1ZSA9IEAocmVzdWx0LnZhbHVl
KCkpOworfQorCisrICh2b2lkKV9wYXJzZVR3b0xlZ2dlZEFuaW1hbHM6KE5TTnVtYmVyICoqKW91
dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9CQURfVFlQRShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKKyAgICBPcHRpb25hbDxUZXN0
UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFscz4gcmVzdWx0ID0gSW5zcGVjdG9yOjpmcm9t
UHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHM+KHBheWxv
YWQpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX0VOVU1fVkFMVUUocmVzdWx0LCBAIlR3
b0xlZ2dlZEFuaW1hbHMiKTsKKyAgICAqb3V0VmFsdWUgPSBAKHJlc3VsdC52YWx1ZSgpKTsKK30K
KworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1t
CisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgi
CisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgor
I2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisK
K3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworCisKKyMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpz
b24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbi1yZXN1bHQKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmM5NWI5ZDhjMWY1Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4
cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbi1yZXN1bHQKQEAgLTAsMCAr
MSwyNDIwIEBACisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3Qt
dHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKy8v
IERhdGFiYXNlCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJEYXRhYmFzZSIsIG51
bGwpOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIkRhdGFiYXNlLk1vdXNlQnV0dG9u
Iiwge05vbmU6ICJOb25lIiwgTGVmdDogIkxlZnQiLCBNaWRkbGU6ICJNaWRkbGUiLCBSaWdodDog
IlJpZ2h0In0pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIkRhdGFiYXNlLk9wdGlv
bmFsUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHkiLCB7TFRSOiAiTFRSIiwgUlRMOiAiUlRM
In0pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIkRhdGFiYXNlLlBhcmFtZXRlckJ1
bmRsZURpcmVjdGlvbmFsaXR5Iiwge0xUUjogIkxUUiIsIFJUTDogIlJUTCJ9KTsKK0luc3BlY3Rv
ckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkRhdGFiYXNlIiwgbnVsbCk7CisjIyMgRW5kIEZpbGU6
IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcworCisjIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVy
bmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBl
cy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
Lmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4K
KworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNr
ZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZN
b3ZlKGRpc3BhdGNoZXIpOyB9CisgICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRj
aGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQorcHJpdmF0
ZToKKyAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Cit9
OworCisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJu
YXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlz
cGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFy
YXRpb24tb2JqZWN0LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMu
aCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9y
IHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKKworCit9IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZh
bHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENI
RVJTKQorI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNlbmRp
ZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworbmFtZXNwYWNl
IEluc3BlY3RvciB7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBG
aWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZy
b250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5
cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bE9iamVjdHMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgRnJvbnRl
bmRSb3V0ZXI7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0
RnJvbnRlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNw
YXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xh
cmF0aW9uLW9iamVjdC10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RGcm9udGVuZERp
c3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVu
ZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIElu
c3BlY3RvciB7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRl
c3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
T2JqZWN0cy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJh
dGlvbi1vYmplY3QtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yUHJvdG9jb2xUeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVz
cGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworCisKKy8vIEZv
cndhcmQgZGVjbGFyYXRpb25zLgorbmFtZXNwYWNlIERhdGFiYXNlIHsKK2NsYXNzIEVycm9yOwor
Y2xhc3MgT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU7CitjbGFzcyBQYXJhbWV0ZXJCdW5kbGU7Citj
bGFzcyBPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzOworY2xhc3MgRHVtbXlPYmplY3Q7
CitlbnVtIGNsYXNzIE1vdXNlQnV0dG9uOworfSAvLyBEYXRhYmFzZQorCituYW1lc3BhY2UgVGVz
dCB7CitjbGFzcyBQYXJhbWV0ZXJCdW5kbGU7Cit9IC8vIFRlc3QKKy8vIEVuZCBvZiBmb3J3YXJk
IGRlY2xhcmF0aW9ucy4KKworCisvLyBUeXBlZGVmcy4KK25hbWVzcGFjZSBEYXRhYmFzZSB7Cit0
eXBlZGVmIEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9y
PiBFcnJvckxpc3Q7Cit9IC8vIERhdGFiYXNlCisvLyBFbmQgb2YgdHlwZWRlZnMuCisKK25hbWVz
cGFjZSBUZXN0SGVscGVycyB7CisKK1N0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29k
ZSk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShU
IGVudW1WYWx1ZSkKK3sKKyAgICByZXR1cm4gZ2V0RW51bUNvbnN0YW50VmFsdWUoc3RhdGljX2Nh
c3Q8aW50PihlbnVtVmFsdWUpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKKwor
bmFtZXNwYWNlIERhdGFiYXNlIHsKKy8qIERhdGFiYXNlIGVycm9yLiAqLworY2xhc3MgRXJyb3Ig
OiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CitwdWJsaWM6CisgICAgZW51bSB7CisgICAgICAg
IE5vRmllbGRzU2V0ID0gMCwKKyAgICAgICAgTWVzc2FnZVNldCA9IDEgPDwgMCwKKyAgICAgICAg
Q29kZVNldCA9IDEgPDwgMSwKKyAgICAgICAgQWxsRmllbGRzU2V0ID0gKE1lc3NhZ2VTZXQgfCBD
b2RlU2V0KQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CisgICAgY2xhc3MgQnVp
bGRlciB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbV9yZXN1
bHQ7CisKKyAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYg
Y2FzdFN0YXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9j
YXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAg
QnVpbGRlcihSZWY8LypFcnJvciovSlNPTjo6T2JqZWN0PiYmIG9iamVjdCkKKyAgICAgICAgICAg
IDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQorICAgICAgICB7CisgICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9p
bml0X3N0YXRlKTsKKyAgICAgICAgfQorICAgICAgICBmcmllbmQgY2xhc3MgRXJyb3I7CisgICAg
cHVibGljOgorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2Fn
ZShjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgTWVzc2FnZVNldCksIHByb3BlcnR5X21lc3NhZ2VfYWxyZWFkeV9zZXQp
OworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibWVzc2FnZSJfcywgdmFsdWUpOwor
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNZXNzYWdlU2V0PigpOworICAgICAgICB9CisK
KyAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvZGVTZXQ+JiBzZXRDb2RlKGludCB2YWx1ZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENvZGVTZXQpLCBw
cm9wZXJ0eV9jb2RlX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJbnRl
Z2VyKCJjb2RlIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvZGVT
ZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBSZWY8RXJyb3I+IHJlbGVhc2UoKQorICAgICAg
ICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJl
c3VsdF9pc19ub3RfcmVhZHkpOworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEVy
cm9yKSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0KSwgY2Fubm90X2Nhc3QpOworCisgICAgICAgICAg
ICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uUmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwo
KTsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxS
ZWY8RXJyb3I+Kj4oJmpzb25SZXN1bHQpKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgICAgIH0KKyAgICB9OworCisgICAgLyoKKyAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6
CisgICAgICogUmVmPEVycm9yPiByZXN1bHQgPSBFcnJvcjo6Y3JlYXRlKCkKKyAgICAgKiAgICAg
LnNldE1lc3NhZ2UoLi4uKQorICAgICAqICAgICAuc2V0Q29kZSguLi4pCisgICAgICogICAgIC5y
ZWxlYXNlKCk7CisgICAgICovCisgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0
ZSgpCisgICAgeworICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKSk7CisgICAgfQorfTsKKworLyogRW51bWVyYXRlcyBkaWZmZXJlbnQgbW91
c2UgYnV0dG9ucyB0aGF0IGNhbiBiZSB1c2VkLiAqLworZW51bSBjbGFzcyBNb3VzZUJ1dHRvbiB7
CisgICAgTm9uZSA9IDAsCisgICAgTGVmdCA9IDEsCisgICAgTWlkZGxlID0gMiwKKyAgICBSaWdo
dCA9IDMsCit9OyAvLyBlbnVtIGNsYXNzIE1vdXNlQnV0dG9uCitjbGFzcyBPcHRpb25hbFBhcmFt
ZXRlckJ1bmRsZSA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKK3B1YmxpYzoKKyAgICAvLyBO
YW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdkaXJlY3Rpb25hbGl0eScgd2hpbGUgZ2VuZXJhdGlu
ZyBPcHRpb25hbFBhcmFtZXRlckJ1bmRsZS4KKyAgICBlbnVtIGNsYXNzIERpcmVjdGlvbmFsaXR5
IHsKKyAgICAgICAgTFRSID0gNCwKKyAgICAgICAgUlRMID0gNSwKKyAgICB9OyAvLyBlbnVtIGNs
YXNzIERpcmVjdGlvbmFsaXR5CisgICAgZW51bSB7CisgICAgICAgIE5vRmllbGRzU2V0ID0gMCwK
KyAgICAgICAgQWxsRmllbGRzU2V0ID0gMAorICAgIH07CisKKyAgICB0ZW1wbGF0ZTxpbnQgU1RB
VEU+CisgICAgY2xhc3MgQnVpbGRlciB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPEpT
T046Ok9iamVjdD4gbV9yZXN1bHQ7CisKKyAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxk
ZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOworICAg
ICAgICB9CisKKyAgICAgICAgQnVpbGRlcihSZWY8LypPcHRpb25hbFBhcmFtZXRlckJ1bmRsZSov
SlNPTjo6T2JqZWN0PiYmIG9iamVjdCkKKyAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShv
YmplY3QpKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBO
b0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKKyAgICAgICAg
fQorICAgICAgICBmcmllbmQgY2xhc3MgT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU7CisgICAgcHVi
bGljOgorCisgICAgICAgIFJlZjxPcHRpb25hbFBhcmFtZXRlckJ1bmRsZT4gcmVsZWFzZSgpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1Nl
dCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXpl
b2YoT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUpID09IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5u
b3RfY2FzdCk7CisKKyAgICAgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25SZXN1bHQgPSBt
X3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBXVEZN
b3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxPcHRpb25hbFBhcmFtZXRlckJ1bmRsZT4qPigmanNv
blJlc3VsdCkpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgIH07
CisKKyAgICAvKgorICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKKyAgICAgKiBSZWY8T3B0
aW9uYWxQYXJhbWV0ZXJCdW5kbGU+IHJlc3VsdCA9IE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpj
cmVhdGUoKQorICAgICAqICAgICAucmVsZWFzZSgpOworICAgICAqLworICAgIHN0YXRpYyBCdWls
ZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8
Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOworICAgIH0KKworICAgIHZvaWQg
c2V0Q29sdW1uTmFtZXMoUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gdmFsdWUpCisgICAg
eworICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIFdU
Rk1vdmUodmFsdWUpKTsKKyAgICB9CisKKyAgICB2b2lkIHNldEJ1dHRvbnMoUmVmUHRyPEpTT046
OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPj4gdmFs
dWUpCisgICAgeworICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRBcnJheSgiYnV0dG9ucyJf
cywgV1RGTW92ZSh2YWx1ZSkpOworICAgIH0KKworICAgIHZvaWQgc2V0RGlyZWN0aW9uYWxpdHko
RGlyZWN0aW9uYWxpdHkgdmFsdWUpCisgICAgeworICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpz
ZXRTdHJpbmcoImRpcmVjdGlvbmFsaXR5Il9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVs
cGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUodmFsdWUpKTsKKyAgICB9CisKKyAgICB2b2lkIHNl
dE5vdGVzKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgeworICAgICAgICBKU09OOjpPYmplY3RC
YXNlOjpzZXRTdHJpbmcoIm5vdGVzIl9zLCB2YWx1ZSk7CisgICAgfQorCisgICAgdm9pZCBzZXRU
aW1lc3RhbXAoZG91YmxlIHZhbHVlKQorICAgIHsKKyAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6
c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIHZhbHVlKTsKKyAgICB9CisKKyAgICB2b2lkIHNldFZh
bHVlcyhSZWZQdHI8SlNPTjo6T2JqZWN0PiB2YWx1ZSkKKyAgICB7CisgICAgICAgIEpTT046Ok9i
amVjdEJhc2U6OnNldE9iamVjdCgidmFsdWVzIl9zLCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgfQor
CisgICAgdm9pZCBzZXRQYXlsb2FkKFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWUpCisgICAgewor
ICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRWYWx1ZSgicGF5bG9hZCJfcywgV1RGTW92ZSh2
YWx1ZSkpOworICAgIH0KKworICAgIHZvaWQgc2V0RXJyb3IoUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gdmFsdWUpCisgICAgeworICAgICAgICBKU09OOjpPYmpl
Y3RCYXNlOjpzZXRPYmplY3QoImVycm9yIl9zLCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgfQorCisg
ICAgdm9pZCBzZXRFcnJvckxpc3QoUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNl
OjpFcnJvckxpc3Q+IHZhbHVlKQorICAgIHsKKyAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0
QXJyYXkoImVycm9yTGlzdCJfcywgV1RGTW92ZSh2YWx1ZSkpOworICAgIH0KK307CisKK2NsYXNz
IFBhcmFtZXRlckJ1bmRsZSA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKK3B1YmxpYzoKKyAg
ICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdkaXJlY3Rpb25hbGl0eScgd2hpbGUgZ2Vu
ZXJhdGluZyBQYXJhbWV0ZXJCdW5kbGUuCisgICAgZW51bSBjbGFzcyBEaXJlY3Rpb25hbGl0eSB7
CisgICAgICAgIExUUiA9IDQsCisgICAgICAgIFJUTCA9IDUsCisgICAgfTsgLy8gZW51bSBjbGFz
cyBEaXJlY3Rpb25hbGl0eQorICAgIGVudW0geworICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCisg
ICAgICAgIENvbHVtbk5hbWVzU2V0ID0gMSA8PCAwLAorICAgICAgICBCdXR0b25zU2V0ID0gMSA8
PCAxLAorICAgICAgICBEaXJlY3Rpb25hbGl0eVNldCA9IDEgPDwgMiwKKyAgICAgICAgTm90ZXNT
ZXQgPSAxIDw8IDMsCisgICAgICAgIFRpbWVzdGFtcFNldCA9IDEgPDwgNCwKKyAgICAgICAgVmFs
dWVzU2V0ID0gMSA8PCA1LAorICAgICAgICBQYXlsb2FkU2V0ID0gMSA8PCA2LAorICAgICAgICBF
cnJvclNldCA9IDEgPDwgNywKKyAgICAgICAgRXJyb3JMaXN0U2V0ID0gMSA8PCA4LAorICAgICAg
ICBBbGxGaWVsZHNTZXQgPSAoQ29sdW1uTmFtZXNTZXQgfCBCdXR0b25zU2V0IHwgRGlyZWN0aW9u
YWxpdHlTZXQgfCBOb3Rlc1NldCB8IFRpbWVzdGFtcFNldCB8IFZhbHVlc1NldCB8IFBheWxvYWRT
ZXQgfCBFcnJvclNldCB8IEVycm9yTGlzdFNldCkKKyAgICB9OworCisgICAgdGVtcGxhdGU8aW50
IFNUQVRFPgorICAgIGNsYXNzIEJ1aWxkZXIgeworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0
cjxKU09OOjpPYmplY3Q+IG1fcmVzdWx0OworCisgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBC
dWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsK
KyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXIoUmVmPC8qUGFyYW1ldGVyQnVuZGxlKi9KU09O
OjpPYmplY3Q+JiYgb2JqZWN0KQorICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVj
dCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmll
bGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAgICAgICB9Cisg
ICAgICAgIGZyaWVuZCBjbGFzcyBQYXJhbWV0ZXJCdW5kbGU7CisgICAgcHVibGljOgorCisgICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2x1bW5OYW1lc1NldD4mIHNldENvbHVtbk5hbWVzKFJlZlB0
cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBD
T01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29sdW1uTmFtZXNTZXQpLCBwcm9wZXJ0eV9jb2x1bW5O
YW1lc19hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoImNvbHVt
bk5hbWVzIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvbHVtbk5h
bWVzU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IEJ1dHRvbnNT
ZXQ+JiBzZXRCdXR0b25zKFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4+IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBD
T01QSUxFX0FTU0VSVCghKFNUQVRFICYgQnV0dG9uc1NldCksIHByb3BlcnR5X2J1dHRvbnNfYWxy
ZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJidXR0b25zIl9zLCB2
YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEJ1dHRvbnNTZXQ+KCk7CisgICAg
ICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRGlyZWN0aW9uYWxpdHlTZXQ+JiBzZXRE
aXJlY3Rpb25hbGl0eShEaXJlY3Rpb25hbGl0eSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIERpcmVjdGlvbmFsaXR5U2V0KSwgcHJvcGVydHlf
ZGlyZWN0aW9uYWxpdHlfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0
cmluZygiZGlyZWN0aW9uYWxpdHkiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJz
OjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSh2YWx1ZSkpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxEaXJlY3Rpb25hbGl0eVNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBOb3Rlc1NldD4mIHNldE5vdGVzKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAg
IHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBOb3Rlc1NldCksIHByb3Bl
cnR5X25vdGVzX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmco
Im5vdGVzIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE5vdGVzU2V0
PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFRpbWVzdGFtcFNldD4m
IHNldFRpbWVzdGFtcChkb3VibGUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBUaW1lc3RhbXBTZXQpLCBwcm9wZXJ0eV90aW1lc3RhbXBfYWxy
ZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldERvdWJsZSgidGltZXN0YW1wIl9z
LCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFRpbWVzdGFtcFNldD4oKTsK
KyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBWYWx1ZXNTZXQ+JiBzZXRWYWx1
ZXMoUmVmUHRyPEpTT046Ok9iamVjdD4gdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBWYWx1ZXNTZXQpLCBwcm9wZXJ0eV92YWx1ZXNfYWxyZWFk
eV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdCgidmFsdWVzIl9zLCB2YWx1
ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFZhbHVlc1NldD4oKTsKKyAgICAgICAg
fQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBQYXlsb2FkU2V0PiYgc2V0UGF5bG9hZChSZWZQ
dHI8SlNPTjo6VmFsdWU+IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgUGF5bG9hZFNldCksIHByb3BlcnR5X3BheWxvYWRfYWxyZWFkeV9zZXQp
OworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCB2YWx1ZSk7Cisg
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFBheWxvYWRTZXQ+KCk7CisgICAgICAgIH0KKwor
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRXJyb3JTZXQ+JiBzZXRFcnJvcihSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiB2YWx1ZSkKKyAgICAgICAgeworICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEVycm9yU2V0KSwgcHJvcGVydHlfZXJyb3Jf
YWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdCgiZXJyb3IiX3Ms
IHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8RXJyb3JTZXQ+KCk7CisgICAg
ICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRXJyb3JMaXN0U2V0PiYgc2V0RXJyb3JM
aXN0KFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3JMaXN0PiB2YWx1
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEVycm9y
TGlzdFNldCksIHByb3BlcnR5X2Vycm9yTGlzdF9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0QXJyYXkoImVycm9yTGlzdCJfcywgdmFsdWUpOworICAgICAgICAgICAgcmV0
dXJuIGNhc3RTdGF0ZTxFcnJvckxpc3RTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBSZWY8
UGFyYW1ldGVyQnVuZGxlPiByZWxlYXNlKCkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihQYXJhbWV0ZXJCdW5kbGUpID09IHNpemVv
ZihKU09OOjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7CisKKyAgICAgICAgICAgIFJlZjxKU09OOjpP
YmplY3Q+IGpzb25SZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOworICAgICAgICAg
ICAgYXV0byByZXN1bHQgPSBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxQYXJhbWV0ZXJC
dW5kbGU+Kj4oJmpzb25SZXN1bHQpKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
ICAgIH0KKyAgICB9OworCisgICAgLyoKKyAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6Cisg
ICAgICogUmVmPFBhcmFtZXRlckJ1bmRsZT4gcmVzdWx0ID0gUGFyYW1ldGVyQnVuZGxlOjpjcmVh
dGUoKQorICAgICAqICAgICAuc2V0Q29sdW1uTmFtZXMoLi4uKQorICAgICAqICAgICAuc2V0QnV0
dG9ucyguLi4pCisgICAgICogICAgIC5zZXREaXJlY3Rpb25hbGl0eSguLi4pCisgICAgICogICAg
IC5zZXROb3RlcyguLi4pCisgICAgICogICAgIC5zZXRUaW1lc3RhbXAoLi4uKQorICAgICAqICAg
ICAuc2V0VmFsdWVzKC4uLikKKyAgICAgKiAgICAgLnNldFBheWxvYWQoLi4uKQorICAgICAqICAg
ICAuc2V0RXJyb3IoLi4uKQorICAgICAqICAgICAuc2V0RXJyb3JMaXN0KC4uLikKKyAgICAgKiAg
ICAgLnJlbGVhc2UoKTsKKyAgICAgKi8KKyAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4g
Y3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICB9Cit9OworCisvKiBDb25mbGljdGVkIG5hbWVzIG1h
eSBjYXVzZSBnZW5lcmF0ZWQgZ2V0dGVycy9zZXR0ZXJzIHRvIGNsYXNoIHdpdGggYnVpbHQtaW4g
SW5zcGVjdG9yT2JqZWN0IG1ldGhvZHMuICovCitjbGFzcyBPYmplY3RXaXRoUHJvcGVydHlOYW1l
Q29uZmxpY3RzIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgeworcHVibGljOgorICAgIGVudW0g
eworICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCisgICAgICAgIEludGVnZXJTZXQgPSAxIDw8IDAs
CisgICAgICAgIEFycmF5U2V0ID0gMSA8PCAxLAorICAgICAgICBTdHJpbmdTZXQgPSAxIDw8IDIs
CisgICAgICAgIFZhbHVlU2V0ID0gMSA8PCAzLAorICAgICAgICBPYmplY3RTZXQgPSAxIDw8IDQs
CisgICAgICAgIEFsbEZpZWxkc1NldCA9IChJbnRlZ2VyU2V0IHwgQXJyYXlTZXQgfCBTdHJpbmdT
ZXQgfCBWYWx1ZVNldCB8IE9iamVjdFNldCkKKyAgICB9OworCisgICAgdGVtcGxhdGU8aW50IFNU
QVRFPgorICAgIGNsYXNzIEJ1aWxkZXIgeworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxK
U09OOjpPYmplY3Q+IG1fcmVzdWx0OworCisgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWls
ZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKKyAg
ICAgICAgfQorCisgICAgICAgIEJ1aWxkZXIoUmVmPC8qT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNv
bmZsaWN0cyovSlNPTjo6T2JqZWN0PiYmIG9iamVjdCkKKyAgICAgICAgICAgIDogbV9yZXN1bHQo
V1RGTW92ZShvYmplY3QpKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChT
VEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsK
KyAgICAgICAgfQorICAgICAgICBmcmllbmQgY2xhc3MgT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNv
bmZsaWN0czsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IEludGVnZXJT
ZXQ+JiBzZXRJbnRlZ2VyKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBJbnRlZ2VyU2V0KSwgcHJvcGVydHlfaW50ZWdl
cl9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJpbnRlZ2Vy
Il9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEludGVnZXJTZXQ+KCk7
CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQXJyYXlTZXQ+JiBzZXRBcnJh
eShjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgQXJyYXlTZXQpLCBwcm9wZXJ0eV9hcnJheV9hbHJlYWR5X3NldCk7Cisg
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJhcnJheSJfcywgdmFsdWUpOworICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxBcnJheVNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAg
IEJ1aWxkZXI8U1RBVEUgfCBTdHJpbmdTZXQ+JiBzZXRTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFN0cmlu
Z1NldCksIHByb3BlcnR5X3N0cmluZ19hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0U3RyaW5nKCJzdHJpbmciX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0
U3RhdGU8U3RyaW5nU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8
IFZhbHVlU2V0PiYgc2V0VmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFZhbHVlU2V0KSwgcHJvcGVydHlfdmFs
dWVfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidmFsdWUi
X3MsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VmFsdWVTZXQ+KCk7Cisg
ICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgT2JqZWN0U2V0PiYgc2V0T2JqZWN0
KGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBPYmplY3RTZXQpLCBwcm9wZXJ0eV9vYmplY3RfYWxyZWFkeV9zZXQpOwor
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygib2JqZWN0Il9zLCB2YWx1ZSk7CisgICAg
ICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE9iamVjdFNldD4oKTsKKyAgICAgICAgfQorCisgICAg
ICAgIFJlZjxPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzPiByZWxlYXNlKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCBy
ZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihP
YmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzKSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0KSwg
Y2Fubm90X2Nhc3QpOworCisgICAgICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uUmVzdWx0
ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0g
V1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8T2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZs
aWN0cz4qPigmanNvblJlc3VsdCkpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAg
ICAgfQorICAgIH07CisKKyAgICAvKgorICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKKyAg
ICAgKiBSZWY8T2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cz4gcmVzdWx0ID0gT2JqZWN0
V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0czo6Y3JlYXRlKCkKKyAgICAgKiAgICAgLnNldEludGVn
ZXIoLi4uKQorICAgICAqICAgICAuc2V0QXJyYXkoLi4uKQorICAgICAqICAgICAuc2V0U3RyaW5n
KC4uLikKKyAgICAgKiAgICAgLnNldFZhbHVlKC4uLikKKyAgICAgKiAgICAgLnNldE9iamVjdCgu
Li4pCisgICAgICogICAgIC5yZWxlYXNlKCk7CisgICAgICovCisgICAgc3RhdGljIEJ1aWxkZXI8
Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0Zp
ZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7CisgICAgfQorfTsKKworfSAvLyBEYXRh
YmFzZQorCituYW1lc3BhY2UgVGVzdCB7CitjbGFzcyBQYXJhbWV0ZXJCdW5kbGUgOiBwdWJsaWMg
SlNPTjo6T2JqZWN0QmFzZSB7CitwdWJsaWM6CisgICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkg
bmFtZSAnZGlyZWN0aW9uYWxpdHknIHdoaWxlIGdlbmVyYXRpbmcgUGFyYW1ldGVyQnVuZGxlLgor
ICAgIGVudW0gY2xhc3MgRGlyZWN0aW9uYWxpdHkgeworICAgICAgICBMVFIgPSA0LAorICAgICAg
ICBSVEwgPSA1LAorICAgIH07IC8vIGVudW0gY2xhc3MgRGlyZWN0aW9uYWxpdHkKKyAgICBlbnVt
IHsKKyAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAorICAgICAgICBEaXJlY3Rpb25hbGl0eVNldCA9
IDEgPDwgMCwKKyAgICAgICAgQnV0dG9uc1NldCA9IDEgPDwgMSwKKyAgICAgICAgQ29sdW1uTmFt
ZXNTZXQgPSAxIDw8IDIsCisgICAgICAgIE5vdGVzU2V0ID0gMSA8PCAzLAorICAgICAgICBUaW1l
c3RhbXBTZXQgPSAxIDw8IDQsCisgICAgICAgIFZhbHVlc1NldCA9IDEgPDwgNSwKKyAgICAgICAg
UGF5bG9hZFNldCA9IDEgPDwgNiwKKyAgICAgICAgRXJyb3JTZXQgPSAxIDw8IDcsCisgICAgICAg
IEFsbEZpZWxkc1NldCA9IChEaXJlY3Rpb25hbGl0eVNldCB8IEJ1dHRvbnNTZXQgfCBDb2x1bW5O
YW1lc1NldCB8IE5vdGVzU2V0IHwgVGltZXN0YW1wU2V0IHwgVmFsdWVzU2V0IHwgUGF5bG9hZFNl
dCB8IEVycm9yU2V0KQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CisgICAgY2xh
c3MgQnVpbGRlciB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4g
bV9yZXN1bHQ7CisKKyAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBT
VEVQPiYgY2FzdFN0YXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICpyZWludGVy
cHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOworICAgICAgICB9CisKKyAg
ICAgICAgQnVpbGRlcihSZWY8LypQYXJhbWV0ZXJCdW5kbGUqL0pTT046Ok9iamVjdD4mJiBvYmpl
Y3QpCisgICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKKyAgICAgICAgewor
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJf
Y3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CisgICAgICAgIH0KKyAgICAgICAgZnJpZW5kIGNs
YXNzIFBhcmFtZXRlckJ1bmRsZTsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IERpcmVjdGlvbmFsaXR5U2V0PiYgc2V0RGlyZWN0aW9uYWxpdHkoRGlyZWN0aW9uYWxpdHkg
dmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBE
aXJlY3Rpb25hbGl0eVNldCksIHByb3BlcnR5X2RpcmVjdGlvbmFsaXR5X2FscmVhZHlfc2V0KTsK
KyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImRpcmVjdGlvbmFsaXR5Il9zLCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUodmFsdWUp
KTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8RGlyZWN0aW9uYWxpdHlTZXQ+KCk7Cisg
ICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQnV0dG9uc1NldD4mIHNldEJ1dHRv
bnMoUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1v
dXNlQnV0dG9uPj4gdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBCdXR0b25zU2V0KSwgcHJvcGVydHlfYnV0dG9uc19hbHJlYWR5X3NldCk7Cisg
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoImJ1dHRvbnMiX3MsIHZhbHVlKTsKKyAgICAg
ICAgICAgIHJldHVybiBjYXN0U3RhdGU8QnV0dG9uc1NldD4oKTsKKyAgICAgICAgfQorCisgICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2x1bW5OYW1lc1NldD4mIHNldENvbHVtbk5hbWVzKFJlZlB0
cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBD
T01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29sdW1uTmFtZXNTZXQpLCBwcm9wZXJ0eV9jb2x1bW5O
YW1lc19hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoImNvbHVt
bk5hbWVzIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvbHVtbk5h
bWVzU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IE5vdGVzU2V0
PiYgc2V0Tm90ZXMoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIE5vdGVzU2V0KSwgcHJvcGVydHlfbm90ZXNfYWxyZWFk
eV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibm90ZXMiX3MsIHZhbHVl
KTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Tm90ZXNTZXQ+KCk7CisgICAgICAgIH0K
KworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVGltZXN0YW1wU2V0PiYgc2V0VGltZXN0YW1wKGRv
dWJsZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIFRpbWVzdGFtcFNldCksIHByb3BlcnR5X3RpbWVzdGFtcF9hbHJlYWR5X3NldCk7CisgICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIHZhbHVlKTsKKyAgICAg
ICAgICAgIHJldHVybiBjYXN0U3RhdGU8VGltZXN0YW1wU2V0PigpOworICAgICAgICB9CisKKyAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IFZhbHVlc1NldD4mIHNldFZhbHVlcyhSZWZQdHI8SlNPTjo6
T2JqZWN0PiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIFZhbHVlc1NldCksIHByb3BlcnR5X3ZhbHVlc19hbHJlYWR5X3NldCk7CisgICAgICAg
ICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIHZhbHVlKTsKKyAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8VmFsdWVzU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVp
bGRlcjxTVEFURSB8IFBheWxvYWRTZXQ+JiBzZXRQYXlsb2FkKFJlZlB0cjxKU09OOjpWYWx1ZT4g
dmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBQ
YXlsb2FkU2V0KSwgcHJvcGVydHlfcGF5bG9hZF9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVy
biBjYXN0U3RhdGU8UGF5bG9hZFNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBFcnJvclNldD4mIHNldEVycm9yKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpE
YXRhYmFzZTo6RXJyb3I+IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgRXJyb3JTZXQpLCBwcm9wZXJ0eV9lcnJvcl9hbHJlYWR5X3NldCk7Cisg
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJlcnJvciJfcywgdmFsdWUpOworICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxFcnJvclNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAg
IFJlZjxQYXJhbWV0ZXJCdW5kbGU+IHJlbGVhc2UoKQorICAgICAgICB7CisgICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkp
OworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFBhcmFtZXRlckJ1bmRsZSkgPT0g
c2l6ZW9mKEpTT046Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsKKworICAgICAgICAgICAgUmVmPEpT
T046Ok9iamVjdD4ganNvblJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7CisgICAg
ICAgICAgICBhdXRvIHJlc3VsdCA9IFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPFBhcmFt
ZXRlckJ1bmRsZT4qPigmanNvblJlc3VsdCkpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICAgICAgfQorICAgIH07CisKKyAgICAvKgorICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3Rv
cjoKKyAgICAgKiBSZWY8UGFyYW1ldGVyQnVuZGxlPiByZXN1bHQgPSBQYXJhbWV0ZXJCdW5kbGU6
OmNyZWF0ZSgpCisgICAgICogICAgIC5zZXREaXJlY3Rpb25hbGl0eSguLi4pCisgICAgICogICAg
IC5zZXRCdXR0b25zKC4uLikKKyAgICAgKiAgICAgLnNldENvbHVtbk5hbWVzKC4uLikKKyAgICAg
KiAgICAgLnNldE5vdGVzKC4uLikKKyAgICAgKiAgICAgLnNldFRpbWVzdGFtcCguLi4pCisgICAg
ICogICAgIC5zZXRWYWx1ZXMoLi4uKQorICAgICAqICAgICAuc2V0UGF5bG9hZCguLi4pCisgICAg
ICogICAgIC5zZXRFcnJvciguLi4pCisgICAgICogICAgIC5yZWxlYXNlKCk7CisgICAgICovCisg
ICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCisgICAgeworICAgICAgICBy
ZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7CisgICAg
fQorfTsKKworfSAvLyBUZXN0CisKKworCituYW1lc3BhY2UgVGVzdEhlbHBlcnMgeworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBQcm90b2NvbEVudW1UeXBlPgorT3B0aW9uYWw8UHJvdG9jb2xFbnVtVHlw
ZT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYpOworCisvLyBFbnVtcyBp
biB0aGUgJ0RhdGFiYXNlJyBEb21haW4KK3RlbXBsYXRlPD4KK09wdGlvbmFsPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5n
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4oY29uc3QgU3RyaW5n
Jik7Cit0ZW1wbGF0ZTw+CitPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6
T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5PiBwYXJzZUVudW1WYWx1ZUZy
b21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok9wdGlvbmFsUGFyYW1ldGVy
QnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4oY29uc3QgU3RyaW5nJik7Cit0ZW1wbGF0ZTw+CitPcHRp
b25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UGFyYW1ldGVyQnVuZGxlOjpEaXJl
Y3Rpb25hbGl0eT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5Pihjb25zdCBTdHJpbmcm
KTsKKworLy8gRW51bXMgaW4gdGhlICdUZXN0JyBEb21haW4KK3RlbXBsYXRlPD4KK09wdGlvbmFs
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxp
dHk+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpQ
YXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5Pihjb25zdCBTdHJpbmcmKTsKKworfSAvLyBu
YW1lc3BhY2UgVGVzdEhlbHBlcnMKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7CisKKy8vIEhhc2ggZGVjbGFyYXRpb25zIGluIHRoZSAn
RGF0YWJhc2UnIERvbWFpbgordGVtcGxhdGU8Pgorc3RydWN0IERlZmF1bHRIYXNoPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4geworICAgIHR5cGVkZWYgSW50SGFz
aDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b24+IEhhc2g7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXVEYKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5o
CisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorCisjaW5jbHVkZSA8d3Rm
L09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworbmFtZXNwYWNlIFRlc3RIZWxw
ZXJzIHsKKworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFsdWVzW10g
PSB7CisgICAgIk5vbmUiLAorICAgICJMZWZ0IiwKKyAgICAiTWlkZGxlIiwKKyAgICAiUmlnaHQi
LAorICAgICJMVFIiLAorICAgICJSVEwiLAorfTsKKworU3RyaW5nIGdldEVudW1Db25zdGFudFZh
bHVlKGludCBjb2RlKSB7CisgICAgcmV0dXJuIGVudW1fY29uc3RhbnRfdmFsdWVzW2NvZGVdOwor
fQorCisvLyBFbnVtcyBpbiB0aGUgJ0RhdGFiYXNlJyBEb21haW4KK3RlbXBsYXRlPD4KK09wdGlv
bmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4gcGFyc2VFbnVt
VmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRv
bj4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKK3sKKyAgICBzdGF0aWMgY29uc3Qgc2l6
ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7CisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90
b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uOjpOb25lLAorICAgICAgICAoc2l6ZV90KUluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbjo6TGVmdCwKKyAgICAgICAgKHNp
emVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b246Ok1pZGRsZSwK
KyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0
b246OlJpZ2h0LAorICAgIH07CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCA0OyArK2kpCisg
ICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFu
dFZhbHVlc1tpXV0pCisgICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpNb3VzZUJ1dHRvbiljb25zdGFudFZhbHVlc1tpXTsKKworICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7Cit9CisKK3RlbXBsYXRlPD4KK09wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+IHBhcnNl
RW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6T3B0aW9u
YWxQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5Pihjb25zdCBTdHJpbmcmIHByb3RvY29s
U3RyaW5nKQoreworICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsK
KyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6T3B0aW9uYWxQ
YXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5OjpMVFIsCisgICAgICAgIChzaXplX3QpSW5z
cGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpEaXJl
Y3Rpb25hbGl0eTo6UlRMLAorICAgIH07CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAyOyAr
K2kpCisgICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tj
b25zdGFudFZhbHVlc1tpXV0pCisgICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRhdGFiYXNlOjpPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHkpY29u
c3RhbnRWYWx1ZXNbaV07CisKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCit0ZW1wbGF0
ZTw+CitPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UGFyYW1ldGVyQnVu
ZGxlOjpEaXJlY3Rpb25hbGl0eT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRhdGFiYXNlOjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5Pihjb25z
dCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQoreworICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29u
c3RhbnRWYWx1ZXNbXSA9IHsKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpE
YXRhYmFzZTo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eTo6TFRSLAorICAgICAgICAo
c2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQYXJhbWV0ZXJCdW5kbGU6OkRp
cmVjdGlvbmFsaXR5OjpSVEwsCisgICAgfTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDI7
ICsraSkKKyAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVz
W2NvbnN0YW50VmFsdWVzW2ldXSkKKyAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90
b2NvbDo6RGF0YWJhc2U6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHkpY29uc3RhbnRW
YWx1ZXNbaV07CisKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCisKKy8vIEVudW1zIGlu
IHRoZSAnVGVzdCcgRG9tYWluCit0ZW1wbGF0ZTw+CitPcHRpb25hbDxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpUZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5PiBwYXJzZUVudW1WYWx1
ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UGFyYW1ldGVyQnVuZGxlOjpE
aXJlY3Rpb25hbGl0eT4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKK3sKKyAgICBzdGF0
aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7CisgICAgICAgIChzaXplX3QpSW5z
cGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eTo6
TFRSLAorICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlBhcmFtZXRl
ckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk6OlJUTCwKKyAgICB9OworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgMjsgKytpKQorICAgICAgICBpZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25z
dGFudF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNbaV1dKQorICAgICAgICAgICAgcmV0dXJuIChJbnNw
ZWN0b3I6OlByb3RvY29sOjpUZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5KWNv
bnN0YW50VmFsdWVzW2ldOworCisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKworCit9IC8v
IG5hbWVzcGFjZSBUZXN0SGVscGVycworCisKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKwor
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2Jq
ZWN0cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVy
cy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1v
YmplY3QtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlz
cGF0Y2hlcnMuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKKworCituYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9y
dCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlICJUZXN0UHJv
dG9jb2xJbnRlcm5hbC5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5o
IgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Igewor
Cit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xC
YWNrZW5kRGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZp
Z3VyYXRpb24uaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFy
YXRpb24tb2JqZWN0LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+CisKK19fYXR0
cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9j
b2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24uaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29u
ZmlndXJhdGlvbi5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVj
bGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCisKKyNp
bXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNr
ZW5kRGlzcGF0Y2hlcnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3Bh
dGNoYWJsZUFnZW50Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3Bl
Y3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVy
bmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXJzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisK
K0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCit7CisgICAgQXVnbWVu
dGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKK30KKworLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKilj
b250cm9sbGVyCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisg
ICAgICAgIHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250cm9s
bGVyID0gY29udHJvbGxlcjsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9j
Cit7CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xFdmVudERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
dHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisK
KyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8d3RmL0pT
T05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisjIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNs
YXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCisjaW1wb3J0
IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+CisKKworQGNsYXNzIFRlc3RQ
cm90b2NvbERhdGFiYXNlRXJyb3I7CitAY2xhc3MgVGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25h
bFBhcmFtZXRlckJ1bmRsZTsKK0BjbGFzcyBUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1
bmRsZTsKK0BjbGFzcyBUZXN0UHJvdG9jb2xEYXRhYmFzZU9iamVjdFdpdGhQcm9wZXJ0eU5hbWVD
b25mbGljdHM7CitAY2xhc3MgVGVzdFByb3RvY29sRGF0YWJhc2VEdW1teU9iamVjdDsKK0BjbGFz
cyBUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlOworCisKK3R5cGVkZWYgTlNfRU5VTShO
U0ludGVnZXIsIFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VCdXR0b24pIHsKKyAgICBUZXN0UHJv
dG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9uTm9uZSwKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZU1v
dXNlQnV0dG9uTGVmdCwKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9uTWlkZGxl
LAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VCdXR0b25SaWdodCwKK307CisKK3R5cGVk
ZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0
ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSkgeworICAgIFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9u
YWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eUxUUiwKKyAgICBUZXN0UHJvdG9jb2xEYXRh
YmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHlSVEwsCit9OworCit0eXBl
ZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRs
ZURpcmVjdGlvbmFsaXR5KSB7CisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5k
bGVEaXJlY3Rpb25hbGl0eUxUUiwKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1
bmRsZURpcmVjdGlvbmFsaXR5UlRMLAorfTsKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwg
VGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5KSB7CisgICAgVGVz
dFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5TFRSLAorICAgIFRlc3RQ
cm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eVJUTCwKK307CisKKworX19h
dHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90
b2NvbERhdGFiYXNlRXJyb3IgOiBSV0lQcm90b2NvbEpTT05PYmplY3QKKy0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2Fk
OworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNP
Tk9iamVjdCAqKWpzb25PYmplY3Q7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhNZXNzYWdlOihO
U1N0cmluZyAqKW1lc3NhZ2UgY29kZTooaW50KWNvZGU7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVy
dHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKm1lc3NhZ2U7CisvKiByZXF1aXJlZCAqLyBA
cHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQgY29kZTsKK0BlbmQKKworX19hdHRyaWJ1
dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbERh
dGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUgOiBSV0lQcm90b2NvbEpTT05PYmplY3QKKy0g
KGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBp
ZD4gKilwYXlsb2FkOworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJX
SVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7CisvKiBvcHRpb25hbCAqLyBAcHJvcGVy
dHkgKG5vbmF0b21pYywgY29weSkgTlNBcnJheS8qPE5TU3RyaW5nPiovICpjb2x1bW5OYW1lczsK
Ky8qIG9wdGlvbmFsICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU0FycmF5Lyo8TlNT
dHJpbmc+Ki8gKmJ1dHRvbnM7CisvKiBvcHRpb25hbCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywg
YXNzaWduKSBUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlRGlyZWN0
aW9uYWxpdHkgZGlyZWN0aW9uYWxpdHk7CisvKiBvcHRpb25hbCAqLyBAcHJvcGVydHkgKG5vbmF0
b21pYywgY29weSkgTlNTdHJpbmcgKm5vdGVzOworLyogb3B0aW9uYWwgKi8gQHByb3BlcnR5IChu
b25hdG9taWMsIGFzc2lnbikgZG91YmxlIHRpbWVzdGFtcDsKKy8qIG9wdGlvbmFsICovIEBwcm9w
ZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIFJXSVByb3RvY29sSlNPTk9iamVjdCAqdmFsdWVzOwor
Lyogb3B0aW9uYWwgKi8gQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgUldJUHJvdG9jb2xK
U09OT2JqZWN0ICpwYXlsb2FkOworLyogb3B0aW9uYWwgKi8gQHByb3BlcnR5IChub25hdG9taWMs
IHJldGFpbikgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqZXJyb3I7CisvKiBvcHRpb25hbCAq
LyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNBcnJheS8qPFRlc3RQcm90b2NvbERhdGFi
YXNlRXJyb3I+Ki8gKmVycm9yTGlzdDsKK0BlbmQKKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0
eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVy
QnVuZGxlIDogUldJUHJvdG9jb2xKU09OT2JqZWN0CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQ
YXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKKy0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilq
c29uT2JqZWN0OworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29sdW1uTmFtZXM6KE5TQXJyYXkv
KjxOU1N0cmluZz4qLyAqKWNvbHVtbk5hbWVzIGJ1dHRvbnM6KE5TQXJyYXkvKjxOU1N0cmluZz4q
LyAqKWJ1dHRvbnMgZGlyZWN0aW9uYWxpdHk6KFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVy
QnVuZGxlRGlyZWN0aW9uYWxpdHkpZGlyZWN0aW9uYWxpdHkgbm90ZXM6KE5TU3RyaW5nICopbm90
ZXMgdGltZXN0YW1wOihkb3VibGUpdGltZXN0YW1wIHZhbHVlczooUldJUHJvdG9jb2xKU09OT2Jq
ZWN0ICopdmFsdWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQgZXJy
b3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKillcnJvciBlcnJvckxpc3Q6KE5TQXJyYXkv
KjxUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yPiovICopZXJyb3JMaXN0OworLyogcmVxdWlyZWQg
Ki8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqY29s
dW1uTmFtZXM7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNB
cnJheS8qPE5TU3RyaW5nPiovICpidXR0b25zOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChu
b25hdG9taWMsIGFzc2lnbikgVGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJl
Y3Rpb25hbGl0eSBkaXJlY3Rpb25hbGl0eTsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9u
YXRvbWljLCBjb3B5KSBOU1N0cmluZyAqbm90ZXM7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkg
KG5vbmF0b21pYywgYXNzaWduKSBkb3VibGUgdGltZXN0YW1wOworLyogcmVxdWlyZWQgKi8gQHBy
b3BlcnR5IChub25hdG9taWMsIHJldGFpbikgUldJUHJvdG9jb2xKU09OT2JqZWN0ICp2YWx1ZXM7
CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluKSBSV0lQcm90b2Nv
bEpTT05PYmplY3QgKnBheWxvYWQ7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21p
YywgcmV0YWluKSBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICplcnJvcjsKKy8qIHJlcXVpcmVk
ICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU0FycmF5Lyo8VGVzdFByb3RvY29sRGF0
YWJhc2VFcnJvcj4qLyAqZXJyb3JMaXN0OworQGVuZAorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmls
aXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sRGF0YWJhc2VPYmplY3RX
aXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzIDogUldJUHJvdG9jb2xKU09OT2JqZWN0CistIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICop
cGF5bG9hZDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90
b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSW50
ZWdlcjooTlNTdHJpbmcgKilpbnRlZ2VyIGFycmF5OihOU1N0cmluZyAqKWFycmF5IHN0cmluZzoo
TlNTdHJpbmcgKilzdHJpbmcgdmFsdWU6KE5TU3RyaW5nICopdmFsdWUgb2JqZWN0OihOU1N0cmlu
ZyAqKW9iamVjdDsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBO
U1N0cmluZyAqaW50ZWdlcjsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBj
b3B5KSBOU1N0cmluZyAqYXJyYXk7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21p
YywgY29weSkgTlNTdHJpbmcgKnN0cmluZzsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9u
YXRvbWljLCBjb3B5KSBOU1N0cmluZyAqdmFsdWU7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkg
KG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKm9iamVjdDsKK0BlbmQKKworX19hdHRyaWJ1dGVf
XygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbERhdGFi
YXNlRHVtbXlPYmplY3QgOiBSV0lQcm90b2NvbEpTT05PYmplY3QKKy0gKGluc3RhbmNldHlwZSlp
bml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkOwor
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9i
amVjdCAqKWpzb25PYmplY3Q7CitAZW5kCisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJk
ZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlIDog
UldJUHJvdG9jb2xKU09OT2JqZWN0CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihO
U0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKKy0gKGluc3RhbmNldHlwZSlp
bml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0
OworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRGlyZWN0aW9uYWxpdHk6KFRlc3RQcm90b2NvbFRl
c3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSlkaXJlY3Rpb25hbGl0eSBidXR0b25zOihO
U0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilidXR0b25zIGNvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNT
dHJpbmc+Ki8gKiljb2x1bW5OYW1lcyBub3RlczooTlNTdHJpbmcgKilub3RlcyB0aW1lc3RhbXA6
KGRvdWJsZSl0aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKil2YWx1ZXMg
cGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZCBlcnJvcjooVGVzdFByb3Rv
Y29sRGF0YWJhc2VFcnJvciAqKWVycm9yOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25h
dG9taWMsIGFzc2lnbikgVGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFs
aXR5IGRpcmVjdGlvbmFsaXR5OworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMs
IGNvcHkpIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqYnV0dG9uczsKKy8qIHJlcXVpcmVkICovIEBw
cm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmNvbHVtbk5h
bWVzOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5n
ICpub3RlczsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGRv
dWJsZSB0aW1lc3RhbXA7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0
YWluKSBSV0lQcm90b2NvbEpTT05PYmplY3QgKnZhbHVlczsKKy8qIHJlcXVpcmVkICovIEBwcm9w
ZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5bG9hZDsK
Ky8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIFRlc3RQcm90b2Nv
bERhdGFiYXNlRXJyb3IgKmVycm9yOworQGVuZAorCisKKworCisKKworI2ltcG9ydCA8V2ViSW5z
cGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgorCisjIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRl
cm5hbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlv
bi1vYmplY3QtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sSlNP
Tk9iamVjdFByaXZhdGUuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5z
cGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKworCisKKwor
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNp
bXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KK09w
dGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFs
dWUpOworCisKK2lubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEYXRh
YmFzZU1vdXNlQnV0dG9uIHZhbHVlKQoreworICAgIHN3aXRjaCh2YWx1ZSkgeworICAgIGNhc2Ug
VGVzdFByb3RvY29sRGF0YWJhc2VNb3VzZUJ1dHRvbk5vbmU6CisgICAgICAgIHJldHVybiAiTm9u
ZSJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VCdXR0b25MZWZ0OgorICAg
ICAgICByZXR1cm4gIkxlZnQiX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNl
QnV0dG9uTWlkZGxlOgorICAgICAgICByZXR1cm4gIk1pZGRsZSJfczsKKyAgICBjYXNlIFRlc3RQ
cm90b2NvbERhdGFiYXNlTW91c2VCdXR0b25SaWdodDoKKyAgICAgICAgcmV0dXJuICJSaWdodCJf
czsKKyAgICB9Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xE
YXRhYmFzZU1vdXNlQnV0dG9uPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1
ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gIk5vbmUiKQorICAgICAgICByZXR1cm4gVGVzdFByb3Rv
Y29sRGF0YWJhc2VNb3VzZUJ1dHRvbk5vbmU7CisgICAgaWYgKHZhbHVlID09ICJMZWZ0IikKKyAg
ICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VCdXR0b25MZWZ0OworICAgIGlm
ICh2YWx1ZSA9PSAiTWlkZGxlIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNl
TW91c2VCdXR0b25NaWRkbGU7CisgICAgaWYgKHZhbHVlID09ICJSaWdodCIpCisgICAgICAgIHJl
dHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9uUmlnaHQ7CisgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKK30KKworaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90
b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSB2YWx1ZSkK
K3sKKyAgICBzd2l0Y2godmFsdWUpIHsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlT3B0
aW9uYWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eUxUUjoKKyAgICAgICAgcmV0dXJuICJM
VFIiX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVu
ZGxlRGlyZWN0aW9uYWxpdHlSVEw6CisgICAgICAgIHJldHVybiAiUlRMIl9zOworICAgIH0KK30K
KwordGVtcGxhdGU8PgoraW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9u
YWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0
IFN0cmluZyYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09ICJMVFIiKQorICAgICAgICByZXR1
cm4gVGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFs
aXR5TFRSOworICAgIGlmICh2YWx1ZSA9PSAiUlRMIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90
b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eVJUTDsKKyAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCitpbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJp
bmcoVGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSB2YWx1
ZSkKK3sKKyAgICBzd2l0Y2godmFsdWUpIHsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNl
UGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHlMVFI6CisgICAgICAgIHJldHVybiAiTFRSIl9z
OworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25h
bGl0eVJUTDoKKyAgICAgICAgcmV0dXJuICJSVEwiX3M7CisgICAgfQorfQorCit0ZW1wbGF0ZTw+
CitpbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJl
Y3Rpb25hbGl0eT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7Cisg
ICAgaWYgKHZhbHVlID09ICJMVFIiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJh
c2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eUxUUjsKKyAgICBpZiAodmFsdWUgPT0gIlJU
TCIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZURp
cmVjdGlvbmFsaXR5UlRMOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKKworaW5saW5l
IFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVE
aXJlY3Rpb25hbGl0eSB2YWx1ZSkKK3sKKyAgICBzd2l0Y2godmFsdWUpIHsKKyAgICBjYXNlIFRl
c3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eUxUUjoKKyAgICAgICAg
cmV0dXJuICJMVFIiX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxl
RGlyZWN0aW9uYWxpdHlSVEw6CisgICAgICAgIHJldHVybiAiUlRMIl9zOworICAgIH0KK30KKwor
dGVtcGxhdGU8PgoraW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5k
bGVEaXJlY3Rpb25hbGl0eT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUp
Cit7CisgICAgaWYgKHZhbHVlID09ICJMVFIiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29s
VGVzdFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5TFRSOworICAgIGlmICh2YWx1ZSA9PSAi
UlRMIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJl
Y3Rpb25hbGl0eVJUTDsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCit9IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3Qt
dHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNp
bXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorCisjaW1wb3J0ICJUZXN0UHJv
dG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKKyNpbXBvcnQgPFdl
Ykluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisKK3VzaW5nIG5hbWVz
cGFjZSBJbnNwZWN0b3I7CisKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
IChEYXRhYmFzZURvbWFpbikKKworKyAodm9pZClfcGFyc2VFcnJvcjooVGVzdFByb3RvY29sRGF0
YWJhc2VFcnJvciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQp
X3BhcnNlRXJyb3JMaXN0OihOU0FycmF5Lyo8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4qLyAq
KilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNlTW91c2VC
dXR0b246KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworKyAo
dm9pZClfcGFyc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTooVGVzdFByb3RvY29sRGF0YWJhc2VP
cHRpb25hbFBhcmFtZXRlckJ1bmRsZSAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9h
ZDsKKysgKHZvaWQpX3BhcnNlUGFyYW1ldGVyQnVuZGxlOihUZXN0UHJvdG9jb2xEYXRhYmFzZVBh
cmFtZXRlckJ1bmRsZSAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZv
aWQpX3BhcnNlT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0czooVGVzdFByb3RvY29sRGF0
YWJhc2VPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzICoqKW91dFZhbHVlIGZyb21QYXls
b2FkOihpZClwYXlsb2FkOworKyAodm9pZClfcGFyc2VEdW1teU9iamVjdDooVGVzdFByb3RvY29s
RGF0YWJhc2VEdW1teU9iamVjdCAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsK
KworQGVuZAorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFRlc3REb21h
aW4pCisKKysgKHZvaWQpX3BhcnNlUGFyYW1ldGVyQnVuZGxlOihUZXN0UHJvdG9jb2xUZXN0UGFy
YW1ldGVyQnVuZGxlICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworCitAZW5k
CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKERhdGFiYXNl
RG9tYWluKQorCisrICh2b2lkKV9wYXJzZUVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9y
ICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7CisgICAgKm91
dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGFsbG9jXSBpbml0V2l0aFBheWxv
YWQ6cGF5bG9hZF07Cit9CisKKysgKHZvaWQpX3BhcnNlRXJyb3JMaXN0OihOU0FycmF5Lyo8VGVz
dFByb3RvY29sRGF0YWJhc2VFcnJvcj4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5
bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TQXJy
YXkvKjxUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yPiovIGNsYXNzXSk7CisgICAgKm91dFZhbHVl
ID0gKE5TQXJyYXkvKjxUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yPiovICopcGF5bG9hZDsKK30K
KworKyAodm9pZClfcGFyc2VNb3VzZUJ1dHRvbjooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBh
eWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBh
eWxvYWQsIFtOU1N0cmluZyBjbGFzc10pOworICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFi
YXNlTW91c2VCdXR0b24+IHJlc3VsdCA9IEluc3BlY3Rvcjo6ZnJvbVByb3RvY29sU3RyaW5nPFRl
c3RQcm90b2NvbERhdGFiYXNlTW91c2VCdXR0b24+KHBheWxvYWQpOworICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfQkFEX0VOVU1fVkFMVUUocmVzdWx0LCBAIk1vdXNlQnV0dG9uIik7CisgICAgKm91
dFZhbHVlID0gQChyZXN1bHQudmFsdWUoKSk7Cit9CisKKysgKHZvaWQpX3BhcnNlT3B0aW9uYWxQ
YXJhbWV0ZXJCdW5kbGU6KFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5k
bGUgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENF
UFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKKyAgICAq
b3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUg
YWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKK30KKworKyAodm9pZClfcGFyc2VQYXJh
bWV0ZXJCdW5kbGU6KFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlICoqKW91dFZh
bHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9C
QURfVFlQRShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0g
W1tUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZSBhbGxvY10gaW5pdFdpdGhQYXls
b2FkOnBheWxvYWRdOworfQorCisrICh2b2lkKV9wYXJzZU9iamVjdFdpdGhQcm9wZXJ0eU5hbWVD
b25mbGljdHM6KFRlc3RQcm90b2NvbERhdGFiYXNlT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZs
aWN0cyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOworICAg
ICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sRGF0YWJhc2VPYmplY3RXaXRoUHJvcGVydHlOYW1l
Q29uZmxpY3RzIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07Cit9CisKKysgKHZvaWQp
X3BhcnNlRHVtbXlPYmplY3Q6KFRlc3RQcm90b2NvbERhdGFiYXNlRHVtbXlPYmplY3QgKiopb3V0
VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9S
X0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUg
PSBbW1Rlc3RQcm90b2NvbERhdGFiYXNlRHVtbXlPYmplY3QgYWxsb2NdIGluaXRXaXRoUGF5bG9h
ZDpwYXlsb2FkXTsKK30KKworQGVuZAorQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucyAoVGVzdERvbWFpbikKKworKyAodm9pZClfcGFyc2VQYXJhbWV0ZXJCdW5kbGU6
KFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGUgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6
KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQs
IFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbFRl
c3RQYXJhbWV0ZXJCdW5kbGUgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKK30KKwor
QGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisK
KyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9j
b2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIK
KyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Cisj
aW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwor
dXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3Rv
Y29sRGF0YWJhc2VFcnJvcgorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25u
dWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCit7CisgICAgaWYgKCEo
c2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBUSFJPV19F
WENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJtZXNzYWdlIl0sIEAibWVz
c2FnZSIpOworICAgIHNlbGYubWVzc2FnZSA9IHBheWxvYWRbQCJtZXNzYWdlIl07CisKKyAgICBU
SFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJjb2RlIl0sIEAi
Y29kZSIpOworICAgIHNlbGYuY29kZSA9IFtwYXlsb2FkW0AiY29kZSJdIGludGVnZXJWYWx1ZV07
CisKKyAgICByZXR1cm4gc2VsZjsKK30KKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29s
T2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilvYmplY3QKK3sKKyAgICBpZiAoIShzZWxm
ID0gW3N1cGVyIGluaXRXaXRoSlNPTk9iamVjdDpbb2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0KCld
KSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHJldHVybiBzZWxmOworfQorCistIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZTooaW50KWNv
ZGUKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5p
bDsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkobWVzc2FnZSwg
QCJtZXNzYWdlIik7CisKKyAgICBzZWxmLm1lc3NhZ2UgPSBtZXNzYWdlOworICAgIHNlbGYuY29k
ZSA9IGNvZGU7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClzZXRNZXNzYWdlOihO
U1N0cmluZyAqKW1lc3NhZ2UKK3sKKyAgICBbc3VwZXIgc2V0U3RyaW5nOm1lc3NhZ2UgZm9yS2V5
OkAibWVzc2FnZSJdOworfQorCistIChOU1N0cmluZyAqKW1lc3NhZ2UKK3sKKyAgICByZXR1cm4g
W3N1cGVyIHN0cmluZ0ZvcktleTpAIm1lc3NhZ2UiXTsKK30KKworLSAodm9pZClzZXRDb2RlOihp
bnQpY29kZQoreworICAgIFtzdXBlciBzZXRJbnRlZ2VyOmNvZGUgZm9yS2V5OkAiY29kZSJdOwor
fQorCistIChpbnQpY29kZQoreworICAgIHJldHVybiBbc3VwZXIgaW50ZWdlckZvcktleTpAImNv
ZGUiXTsKK30KKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sRGF0YWJhc2VP
cHRpb25hbFBhcmFtZXRlckJ1bmRsZQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2Fk
Oihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCit7CisgICAg
aWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBz
ZWxmLmNvbHVtbk5hbWVzID0gcGF5bG9hZFtAImNvbHVtbk5hbWVzIl07CisKKyAgICBzZWxmLmJ1
dHRvbnMgPSBwYXlsb2FkW0AiYnV0dG9ucyJdOworCisgICAgT3B0aW9uYWw8VGVzdFByb3RvY29s
RGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5PiBkaXJlY3Rpb25h
bGl0eSA9IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFy
YW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHk+KHBheWxvYWRbQCJkaXJlY3Rpb25hbGl0eSJdKTsK
KyAgICBpZiAoZGlyZWN0aW9uYWxpdHkpCisgICAgICAgIHNlbGYuZGlyZWN0aW9uYWxpdHkgPSBk
aXJlY3Rpb25hbGl0eS52YWx1ZSgpOworCisgICAgc2VsZi5ub3RlcyA9IHBheWxvYWRbQCJub3Rl
cyJdOworCisgICAgc2VsZi50aW1lc3RhbXAgPSBbcGF5bG9hZFtAInRpbWVzdGFtcCJdIGRvdWJs
ZVZhbHVlXTsKKworICAgIHNlbGYudmFsdWVzID0gcGF5bG9hZFtAInZhbHVlcyJdOworCisgICAg
c2VsZi5wYXlsb2FkID0gcGF5bG9hZFtAInBheWxvYWQiXTsKKworICAgIHNlbGYuZXJyb3IgPSBb
W1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2Fk
W0AiZXJyb3IiXV07CisKKyAgICBzZWxmLmVycm9yTGlzdCA9IG9iamNBcnJheUZyb21QYXlsb2Fk
PFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I+KHBheWxvYWRbQCJlcnJvckxpc3QiXSk7CisKKyAg
ICByZXR1cm4gc2VsZjsKK30KKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0
OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilvYmplY3QKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1
cGVyIGluaXRXaXRoSlNPTk9iamVjdDpbb2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0KCldKSkKKyAg
ICAgICAgcmV0dXJuIG5pbDsKKworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXNldENv
bHVtbk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcworeworICAgIFtz
dXBlciBzZXRKU09OQXJyYXk6dG9KU09OU3RyaW5nQXJyYXkoY29sdW1uTmFtZXMpIGZvcktleTpA
ImNvbHVtbk5hbWVzIl07Cit9CisKKy0gKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWNvbHVtbk5h
bWVzCit7CisgICAgcmV0dXJuIHRvT2JqQ1N0cmluZ0FycmF5KFtzdXBlciBKU09OQXJyYXlGb3JL
ZXk6QCJjb2x1bW5OYW1lcyJdKTsKK30KKworLSAodm9pZClzZXRCdXR0b25zOihOU0FycmF5Lyo8
TlNTdHJpbmc+Ki8gKilidXR0b25zCit7CisgICAgW3N1cGVyIHNldEpTT05BcnJheTp0b0pTT05T
dHJpbmdBcnJheShidXR0b25zKSBmb3JLZXk6QCJidXR0b25zIl07Cit9CisKKy0gKE5TQXJyYXkv
KjxOU1N0cmluZz4qLyAqKWJ1dHRvbnMKK3sKKyAgICByZXR1cm4gdG9PYmpDU3RyaW5nQXJyYXko
W3N1cGVyIEpTT05BcnJheUZvcktleTpAImJ1dHRvbnMiXSk7Cit9CisKKy0gKHZvaWQpc2V0RGly
ZWN0aW9uYWxpdHk6KFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGVE
aXJlY3Rpb25hbGl0eSlkaXJlY3Rpb25hbGl0eQoreworICAgIFtzdXBlciBzZXRTdHJpbmc6dG9Q
cm90b2NvbFN0cmluZyhkaXJlY3Rpb25hbGl0eSkgZm9yS2V5OkAiZGlyZWN0aW9uYWxpdHkiXTsK
K30KKworLSAoVGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZURpcmVj
dGlvbmFsaXR5KWRpcmVjdGlvbmFsaXR5Cit7CisgICAgcmV0dXJuIGZyb21Qcm90b2NvbFN0cmlu
ZzxUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxp
dHk+KFtzdXBlciBzdHJpbmdGb3JLZXk6QCJkaXJlY3Rpb25hbGl0eSJdKS52YWx1ZSgpOworfQor
CistICh2b2lkKXNldE5vdGVzOihOU1N0cmluZyAqKW5vdGVzCit7CisgICAgW3N1cGVyIHNldFN0
cmluZzpub3RlcyBmb3JLZXk6QCJub3RlcyJdOworfQorCistIChOU1N0cmluZyAqKW5vdGVzCit7
CisgICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJub3RlcyJdOworfQorCistICh2b2lk
KXNldFRpbWVzdGFtcDooZG91YmxlKXRpbWVzdGFtcAoreworICAgIFtzdXBlciBzZXREb3VibGU6
dGltZXN0YW1wIGZvcktleTpAInRpbWVzdGFtcCJdOworfQorCistIChkb3VibGUpdGltZXN0YW1w
Cit7CisgICAgcmV0dXJuIFtzdXBlciBkb3VibGVGb3JLZXk6QCJ0aW1lc3RhbXAiXTsKK30KKwor
LSAodm9pZClzZXRWYWx1ZXM6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcworeworICAg
IFtzdXBlciBzZXRPYmplY3Q6dmFsdWVzIGZvcktleTpAInZhbHVlcyJdOworfQorCistIChSV0lQ
cm90b2NvbEpTT05PYmplY3QgKil2YWx1ZXMKK3sKKyAgICBSV0lQcm90b2NvbEpTT05PYmplY3Qg
Km9iamVjdCA9IFtzdXBlciBvYmplY3RGb3JLZXk6QCJ2YWx1ZXMiXTsKKyAgICBpZiAoIW9iamVj
dCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICByZXR1cm4gW1tSV0lQcm90b2NvbEpTT05PYmpl
Y3QgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDpbW3N1cGVyIG9iamVjdEZvcktleTpAInZhbHVl
cyJdIHRvSlNPTk9iamVjdF0uZ2V0KCldOworfQorCistICh2b2lkKXNldFBheWxvYWQ6KFJXSVBy
b3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQKK3sKKyAgICBbc3VwZXIgc2V0T2JqZWN0OnBheWxv
YWQgZm9yS2V5OkAicGF5bG9hZCJdOworfQorCistIChSV0lQcm90b2NvbEpTT05PYmplY3QgKilw
YXlsb2FkCit7CisgICAgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvYmplY3QgPSBbc3VwZXIgb2Jq
ZWN0Rm9yS2V5OkAicGF5bG9hZCJdOworICAgIGlmICghb2JqZWN0KQorICAgICAgICByZXR1cm4g
bmlsOworICAgIHJldHVybiBbW1JXSVByb3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5pdFdpdGhK
U09OT2JqZWN0Oltbc3VwZXIgb2JqZWN0Rm9yS2V5OkAicGF5bG9hZCJdIHRvSlNPTk9iamVjdF0u
Z2V0KCldOworfQorCistICh2b2lkKXNldEVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9y
ICopZXJyb3IKK3sKKyAgICBbc3VwZXIgc2V0T2JqZWN0OmVycm9yIGZvcktleTpAImVycm9yIl07
Cit9CisKKy0gKFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKillcnJvcgoreworICAgIFJXSVBy
b3RvY29sSlNPTk9iamVjdCAqb2JqZWN0ID0gW3N1cGVyIG9iamVjdEZvcktleTpAImVycm9yIl07
CisgICAgaWYgKCFvYmplY3QpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgcmV0dXJuIFtbVGVz
dFByb3RvY29sRGF0YWJhc2VFcnJvciBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0Oltbc3VwZXIg
b2JqZWN0Rm9yS2V5OkAiZXJyb3IiXSB0b0pTT05PYmplY3RdLmdldCgpXTsKK30KKworLSAodm9p
ZClzZXRFcnJvckxpc3Q6KE5TQXJyYXkvKjxUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yPiovICop
ZXJyb3JMaXN0Cit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRV9JTl9BUlJBWShl
cnJvckxpc3QsIFtUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGNsYXNzXSk7CisgICAgW3N1cGVy
IHNldEpTT05BcnJheTp0b0pTT05PYmplY3RBcnJheShlcnJvckxpc3QpIGZvcktleTpAImVycm9y
TGlzdCJdOworfQorCistIChOU0FycmF5Lyo8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4qLyAq
KWVycm9yTGlzdAoreworICAgIHJldHVybiB0b09iakNBcnJheTxUZXN0UHJvdG9jb2xEYXRhYmFz
ZUVycm9yPihbc3VwZXIgSlNPTkFycmF5Rm9yS2V5OkAiZXJyb3JMaXN0Il0pOworfQorCitAZW5k
CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZQor
CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxO
U1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0
XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJ
UkVEX1BST1BFUlRZKHBheWxvYWRbQCJjb2x1bW5OYW1lcyJdLCBAImNvbHVtbk5hbWVzIik7Cisg
ICAgc2VsZi5jb2x1bW5OYW1lcyA9IHBheWxvYWRbQCJjb2x1bW5OYW1lcyJdOworCisgICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiYnV0dG9ucyJdLCBA
ImJ1dHRvbnMiKTsKKyAgICBzZWxmLmJ1dHRvbnMgPSBwYXlsb2FkW0AiYnV0dG9ucyJdOworCisg
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiZGlyZWN0
aW9uYWxpdHkiXSwgQCJkaXJlY3Rpb25hbGl0eSIpOworICAgIE9wdGlvbmFsPFRlc3RQcm90b2Nv
bERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHk+IGRpcmVjdGlvbmFsaXR5ID0g
ZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlRGly
ZWN0aW9uYWxpdHk+KHBheWxvYWRbQCJkaXJlY3Rpb25hbGl0eSJdKTsKKyAgICBUSFJPV19FWENF
UFRJT05fRk9SX0JBRF9FTlVNX1ZBTFVFKGRpcmVjdGlvbmFsaXR5LCBAImRpcmVjdGlvbmFsaXR5
Iik7CisgICAgc2VsZi5kaXJlY3Rpb25hbGl0eSA9IGRpcmVjdGlvbmFsaXR5LnZhbHVlKCk7CisK
KyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJub3Rl
cyJdLCBAIm5vdGVzIik7CisgICAgc2VsZi5ub3RlcyA9IHBheWxvYWRbQCJub3RlcyJdOworCisg
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AidGltZXN0
YW1wIl0sIEAidGltZXN0YW1wIik7CisgICAgc2VsZi50aW1lc3RhbXAgPSBbcGF5bG9hZFtAInRp
bWVzdGFtcCJdIGRvdWJsZVZhbHVlXTsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlS
RURfUFJPUEVSVFkocGF5bG9hZFtAInZhbHVlcyJdLCBAInZhbHVlcyIpOworICAgIHNlbGYudmFs
dWVzID0gcGF5bG9hZFtAInZhbHVlcyJdOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFV
SVJFRF9QUk9QRVJUWShwYXlsb2FkW0AicGF5bG9hZCJdLCBAInBheWxvYWQiKTsKKyAgICBzZWxm
LnBheWxvYWQgPSBwYXlsb2FkW0AicGF5bG9hZCJdOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiZXJyb3IiXSwgQCJlcnJvciIpOworICAgIHNl
bGYuZXJyb3IgPSBbW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgYWxsb2NdIGluaXRXaXRoUGF5
bG9hZDpwYXlsb2FkW0AiZXJyb3IiXV07CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJ
UkVEX1BST1BFUlRZKHBheWxvYWRbQCJlcnJvckxpc3QiXSwgQCJlcnJvckxpc3QiKTsKKyAgICBz
ZWxmLmVycm9yTGlzdCA9IG9iamNBcnJheUZyb21QYXlsb2FkPFRlc3RQcm90b2NvbERhdGFiYXNl
RXJyb3I+KHBheWxvYWRbQCJlcnJvckxpc3QiXSk7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKy0g
KGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmpl
Y3QgKilvYmplY3QKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoSlNPTk9iamVj
dDpbb2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0KCldKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKwor
ICAgIHJldHVybiBzZWxmOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb2x1bW5OYW1l
czooTlNBcnJheS8qPE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMgYnV0dG9uczooTlNBcnJheS8q
PE5TU3RyaW5nPiovICopYnV0dG9ucyBkaXJlY3Rpb25hbGl0eTooVGVzdFByb3RvY29sRGF0YWJh
c2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSlkaXJlY3Rpb25hbGl0eSBub3RlczooTlNT
dHJpbmcgKilub3RlcyB0aW1lc3RhbXA6KGRvdWJsZSl0aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90
b2NvbEpTT05PYmplY3QgKil2YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICop
cGF5bG9hZCBlcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKWVycm9yIGVycm9yTGlz
dDooTlNBcnJheS8qPFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I+Ki8gKillcnJvckxpc3QKK3sK
KyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKwor
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkoY29sdW1uTmFtZXMsIEAi
Y29sdW1uTmFtZXMiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZ
KGJ1dHRvbnMsIEAiYnV0dG9ucyIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURf
UFJPUEVSVFkobm90ZXMsIEAibm90ZXMiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJ
UkVEX1BST1BFUlRZKHZhbHVlcywgQCJ2YWx1ZXMiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9S
X1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWQsIEAicGF5bG9hZCIpOworICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkoZXJyb3IsIEAiZXJyb3IiKTsKKyAgICBUSFJPV19F
WENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKGVycm9yTGlzdCwgQCJlcnJvckxpc3QiKTsK
KyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFX0lOX0FSUkFZKGVycm9yTGlzdCwgW1Rl
c3RQcm90b2NvbERhdGFiYXNlRXJyb3IgY2xhc3NdKTsKKworICAgIHNlbGYuY29sdW1uTmFtZXMg
PSBjb2x1bW5OYW1lczsKKyAgICBzZWxmLmJ1dHRvbnMgPSBidXR0b25zOworICAgIHNlbGYuZGly
ZWN0aW9uYWxpdHkgPSBkaXJlY3Rpb25hbGl0eTsKKyAgICBzZWxmLm5vdGVzID0gbm90ZXM7Cisg
ICAgc2VsZi50aW1lc3RhbXAgPSB0aW1lc3RhbXA7CisgICAgc2VsZi52YWx1ZXMgPSB2YWx1ZXM7
CisgICAgc2VsZi5wYXlsb2FkID0gcGF5bG9hZDsKKyAgICBzZWxmLmVycm9yID0gZXJyb3I7Cisg
ICAgc2VsZi5lcnJvckxpc3QgPSBlcnJvckxpc3Q7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKwor
LSAodm9pZClzZXRDb2x1bW5OYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopY29sdW1uTmFt
ZXMKK3sKKyAgICBbc3VwZXIgc2V0SlNPTkFycmF5OnRvSlNPTlN0cmluZ0FycmF5KGNvbHVtbk5h
bWVzKSBmb3JLZXk6QCJjb2x1bW5OYW1lcyJdOworfQorCistIChOU0FycmF5Lyo8TlNTdHJpbmc+
Ki8gKiljb2x1bW5OYW1lcworeworICAgIHJldHVybiB0b09iakNTdHJpbmdBcnJheShbc3VwZXIg
SlNPTkFycmF5Rm9yS2V5OkAiY29sdW1uTmFtZXMiXSk7Cit9CisKKy0gKHZvaWQpc2V0QnV0dG9u
czooTlNBcnJheS8qPE5TU3RyaW5nPiovICopYnV0dG9ucworeworICAgIFtzdXBlciBzZXRKU09O
QXJyYXk6dG9KU09OU3RyaW5nQXJyYXkoYnV0dG9ucykgZm9yS2V5OkAiYnV0dG9ucyJdOworfQor
CistIChOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilidXR0b25zCit7CisgICAgcmV0dXJuIHRvT2Jq
Q1N0cmluZ0FycmF5KFtzdXBlciBKU09OQXJyYXlGb3JLZXk6QCJidXR0b25zIl0pOworfQorCist
ICh2b2lkKXNldERpcmVjdGlvbmFsaXR5OihUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1
bmRsZURpcmVjdGlvbmFsaXR5KWRpcmVjdGlvbmFsaXR5Cit7CisgICAgW3N1cGVyIHNldFN0cmlu
Zzp0b1Byb3RvY29sU3RyaW5nKGRpcmVjdGlvbmFsaXR5KSBmb3JLZXk6QCJkaXJlY3Rpb25hbGl0
eSJdOworfQorCistIChUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlv
bmFsaXR5KWRpcmVjdGlvbmFsaXR5Cit7CisgICAgcmV0dXJuIGZyb21Qcm90b2NvbFN0cmluZzxU
ZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5Pihbc3VwZXIg
c3RyaW5nRm9yS2V5OkAiZGlyZWN0aW9uYWxpdHkiXSkudmFsdWUoKTsKK30KKworLSAodm9pZClz
ZXROb3RlczooTlNTdHJpbmcgKilub3RlcworeworICAgIFtzdXBlciBzZXRTdHJpbmc6bm90ZXMg
Zm9yS2V5OkAibm90ZXMiXTsKK30KKworLSAoTlNTdHJpbmcgKilub3RlcworeworICAgIHJldHVy
biBbc3VwZXIgc3RyaW5nRm9yS2V5OkAibm90ZXMiXTsKK30KKworLSAodm9pZClzZXRUaW1lc3Rh
bXA6KGRvdWJsZSl0aW1lc3RhbXAKK3sKKyAgICBbc3VwZXIgc2V0RG91YmxlOnRpbWVzdGFtcCBm
b3JLZXk6QCJ0aW1lc3RhbXAiXTsKK30KKworLSAoZG91YmxlKXRpbWVzdGFtcAoreworICAgIHJl
dHVybiBbc3VwZXIgZG91YmxlRm9yS2V5OkAidGltZXN0YW1wIl07Cit9CisKKy0gKHZvaWQpc2V0
VmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKil2YWx1ZXMKK3sKKyAgICBbc3VwZXIgc2V0
T2JqZWN0OnZhbHVlcyBmb3JLZXk6QCJ2YWx1ZXMiXTsKK30KKworLSAoUldJUHJvdG9jb2xKU09O
T2JqZWN0ICopdmFsdWVzCit7CisgICAgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvYmplY3QgPSBb
c3VwZXIgb2JqZWN0Rm9yS2V5OkAidmFsdWVzIl07CisgICAgaWYgKCFvYmplY3QpCisgICAgICAg
IHJldHVybiBuaWw7CisgICAgcmV0dXJuIFtbUldJUHJvdG9jb2xKU09OT2JqZWN0IGFsbG9jXSBp
bml0V2l0aEpTT05PYmplY3Q6W1tzdXBlciBvYmplY3RGb3JLZXk6QCJ2YWx1ZXMiXSB0b0pTT05P
YmplY3RdLmdldCgpXTsKK30KKworLSAodm9pZClzZXRQYXlsb2FkOihSV0lQcm90b2NvbEpTT05P
YmplY3QgKilwYXlsb2FkCit7CisgICAgW3N1cGVyIHNldE9iamVjdDpwYXlsb2FkIGZvcktleTpA
InBheWxvYWQiXTsKK30KKworLSAoUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZAorewor
ICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb2JqZWN0ID0gW3N1cGVyIG9iamVjdEZvcktleTpA
InBheWxvYWQiXTsKKyAgICBpZiAoIW9iamVjdCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBy
ZXR1cm4gW1tSV0lQcm90b2NvbEpTT05PYmplY3QgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDpb
W3N1cGVyIG9iamVjdEZvcktleTpAInBheWxvYWQiXSB0b0pTT05PYmplY3RdLmdldCgpXTsKK30K
KworLSAodm9pZClzZXRFcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKWVycm9yCit7
CisgICAgW3N1cGVyIHNldE9iamVjdDplcnJvciBmb3JLZXk6QCJlcnJvciJdOworfQorCistIChU
ZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICopZXJyb3IKK3sKKyAgICBSV0lQcm90b2NvbEpTT05P
YmplY3QgKm9iamVjdCA9IFtzdXBlciBvYmplY3RGb3JLZXk6QCJlcnJvciJdOworICAgIGlmICgh
b2JqZWN0KQorICAgICAgICByZXR1cm4gbmlsOworICAgIHJldHVybiBbW1Rlc3RQcm90b2NvbERh
dGFiYXNlRXJyb3IgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDpbW3N1cGVyIG9iamVjdEZvcktl
eTpAImVycm9yIl0gdG9KU09OT2JqZWN0XS5nZXQoKV07Cit9CisKKy0gKHZvaWQpc2V0RXJyb3JM
aXN0OihOU0FycmF5Lyo8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4qLyAqKWVycm9yTGlzdAor
eworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEVfSU5fQVJSQVkoZXJyb3JMaXN0LCBb
VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBjbGFzc10pOworICAgIFtzdXBlciBzZXRKU09OQXJy
YXk6dG9KU09OT2JqZWN0QXJyYXkoZXJyb3JMaXN0KSBmb3JLZXk6QCJlcnJvckxpc3QiXTsKK30K
KworLSAoTlNBcnJheS8qPFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I+Ki8gKillcnJvckxpc3QK
K3sKKyAgICByZXR1cm4gdG9PYmpDQXJyYXk8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4oW3N1
cGVyIEpTT05BcnJheUZvcktleTpAImVycm9yTGlzdCJdKTsKK30KKworQGVuZAorCitAaW1wbGVt
ZW50YXRpb24gVGVzdFByb3RvY29sRGF0YWJhc2VPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxp
Y3RzCisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9u
YXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVy
IGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
UkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImludGVnZXIiXSwgQCJpbnRlZ2VyIik7CisgICAg
c2VsZi5pbnRlZ2VyID0gcGF5bG9hZFtAImludGVnZXIiXTsKKworICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImFycmF5Il0sIEAiYXJyYXkiKTsKKyAg
ICBzZWxmLmFycmF5ID0gcGF5bG9hZFtAImFycmF5Il07CisKKyAgICBUSFJPV19FWENFUFRJT05f
Rk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJzdHJpbmciXSwgQCJzdHJpbmciKTsKKyAg
ICBzZWxmLnN0cmluZyA9IHBheWxvYWRbQCJzdHJpbmciXTsKKworICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAInZhbHVlIl0sIEAidmFsdWUiKTsKKyAg
ICBzZWxmLnZhbHVlID0gcGF5bG9hZFtAInZhbHVlIl07CisKKyAgICBUSFJPV19FWENFUFRJT05f
Rk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJvYmplY3QiXSwgQCJvYmplY3QiKTsKKyAg
ICBzZWxmLm9iamVjdCA9IHBheWxvYWRbQCJvYmplY3QiXTsKKworICAgIHJldHVybiBzZWxmOwor
fQorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNP
Tk9iamVjdCAqKW9iamVjdAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09O
T2JqZWN0OltvYmplY3QgdG9KU09OT2JqZWN0XS5nZXQoKV0pKQorICAgICAgICByZXR1cm4gbmls
OworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aEludGVn
ZXI6KE5TU3RyaW5nICopaW50ZWdlciBhcnJheTooTlNTdHJpbmcgKilhcnJheSBzdHJpbmc6KE5T
U3RyaW5nICopc3RyaW5nIHZhbHVlOihOU1N0cmluZyAqKXZhbHVlIG9iamVjdDooTlNTdHJpbmcg
KilvYmplY3QKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0
dXJuIG5pbDsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkoaW50
ZWdlciwgQCJpbnRlZ2VyIik7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9Q
RVJUWShhcnJheSwgQCJhcnJheSIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURf
UFJPUEVSVFkoc3RyaW5nLCBAInN0cmluZyIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVR
VUlSRURfUFJPUEVSVFkodmFsdWUsIEAidmFsdWUiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9S
X1JFUVVJUkVEX1BST1BFUlRZKG9iamVjdCwgQCJvYmplY3QiKTsKKworICAgIHNlbGYuaW50ZWdl
ciA9IGludGVnZXI7CisgICAgc2VsZi5hcnJheSA9IGFycmF5OworICAgIHNlbGYuc3RyaW5nID0g
c3RyaW5nOworICAgIHNlbGYudmFsdWUgPSB2YWx1ZTsKKyAgICBzZWxmLm9iamVjdCA9IG9iamVj
dDsKKworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXNldEludGVnZXI6KE5TU3RyaW5n
ICopaW50ZWdlcgoreworICAgIFtzdXBlciBzZXRTdHJpbmc6aW50ZWdlciBmb3JLZXk6QCJpbnRl
Z2VyIl07Cit9CisKKy0gKE5TU3RyaW5nICopaW50ZWdlcgoreworICAgIHJldHVybiBbc3VwZXIg
c3RyaW5nRm9yS2V5OkAiaW50ZWdlciJdOworfQorCistICh2b2lkKXNldEFycmF5OihOU1N0cmlu
ZyAqKWFycmF5Cit7CisgICAgW3N1cGVyIHNldFN0cmluZzphcnJheSBmb3JLZXk6QCJhcnJheSJd
OworfQorCistIChOU1N0cmluZyAqKWFycmF5Cit7CisgICAgcmV0dXJuIFtzdXBlciBzdHJpbmdG
b3JLZXk6QCJhcnJheSJdOworfQorCistICh2b2lkKXNldFN0cmluZzooTlNTdHJpbmcgKilzdHJp
bmcKK3sKKyAgICBbc3VwZXIgc2V0U3RyaW5nOnN0cmluZyBmb3JLZXk6QCJzdHJpbmciXTsKK30K
KworLSAoTlNTdHJpbmcgKilzdHJpbmcKK3sKKyAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0Zvcktl
eTpAInN0cmluZyJdOworfQorCistICh2b2lkKXNldFZhbHVlOihOU1N0cmluZyAqKXZhbHVlCit7
CisgICAgW3N1cGVyIHNldFN0cmluZzp2YWx1ZSBmb3JLZXk6QCJ2YWx1ZSJdOworfQorCistIChO
U1N0cmluZyAqKXZhbHVlCit7CisgICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJ2YWx1
ZSJdOworfQorCistICh2b2lkKXNldE9iamVjdDooTlNTdHJpbmcgKilvYmplY3QKK3sKKyAgICBb
c3VwZXIgc2V0U3RyaW5nOm9iamVjdCBmb3JLZXk6QCJvYmplY3QiXTsKK30KKworLSAoTlNTdHJp
bmcgKilvYmplY3QKK3sKKyAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAIm9iamVjdCJd
OworfQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xEYXRhYmFzZUR1bW15
T2JqZWN0CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0
aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1
cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHJldHVybiBzZWxmOworfQor
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9i
amVjdCAqKW9iamVjdAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09OT2Jq
ZWN0OltvYmplY3QgdG9KU09OT2JqZWN0XS5nZXQoKV0pKQorICAgICAgICByZXR1cm4gbmlsOwor
CisgICAgcmV0dXJuIHNlbGY7Cit9CisKK0BlbmQKKworCitAaW1wbGVtZW50YXRpb24gVGVzdFBy
b3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXls
b2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCit7Cisg
ICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAg
ICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJkaXJlY3Rp
b25hbGl0eSJdLCBAImRpcmVjdGlvbmFsaXR5Iik7CisgICAgT3B0aW9uYWw8VGVzdFByb3RvY29s
VGVzdFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5PiBkaXJlY3Rpb25hbGl0eSA9IGZyb21Q
cm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxp
dHk+KHBheWxvYWRbQCJkaXJlY3Rpb25hbGl0eSJdKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9S
X0JBRF9FTlVNX1ZBTFVFKGRpcmVjdGlvbmFsaXR5LCBAImRpcmVjdGlvbmFsaXR5Iik7CisgICAg
c2VsZi5kaXJlY3Rpb25hbGl0eSA9IGRpcmVjdGlvbmFsaXR5LnZhbHVlKCk7CisKKyAgICBUSFJP
V19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJidXR0b25zIl0sIEAi
YnV0dG9ucyIpOworICAgIHNlbGYuYnV0dG9ucyA9IHBheWxvYWRbQCJidXR0b25zIl07CisKKyAg
ICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJjb2x1bW5O
YW1lcyJdLCBAImNvbHVtbk5hbWVzIik7CisgICAgc2VsZi5jb2x1bW5OYW1lcyA9IHBheWxvYWRb
QCJjb2x1bW5OYW1lcyJdOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9Q
RVJUWShwYXlsb2FkW0Aibm90ZXMiXSwgQCJub3RlcyIpOworICAgIHNlbGYubm90ZXMgPSBwYXls
b2FkW0Aibm90ZXMiXTsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVS
VFkocGF5bG9hZFtAInRpbWVzdGFtcCJdLCBAInRpbWVzdGFtcCIpOworICAgIHNlbGYudGltZXN0
YW1wID0gW3BheWxvYWRbQCJ0aW1lc3RhbXAiXSBkb3VibGVWYWx1ZV07CisKKyAgICBUSFJPV19F
WENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJ2YWx1ZXMiXSwgQCJ2YWx1
ZXMiKTsKKyAgICBzZWxmLnZhbHVlcyA9IHBheWxvYWRbQCJ2YWx1ZXMiXTsKKworICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAInBheWxvYWQiXSwgQCJw
YXlsb2FkIik7CisgICAgc2VsZi5wYXlsb2FkID0gcGF5bG9hZFtAInBheWxvYWQiXTsKKworICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImVycm9yIl0s
IEAiZXJyb3IiKTsKKyAgICBzZWxmLmVycm9yID0gW1tUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9y
IGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZFtAImVycm9yIl1dOworCisgICAgcmV0dXJu
IHNlbGY7Cit9CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJv
dG9jb2xKU09OT2JqZWN0ICopb2JqZWN0Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0
V2l0aEpTT05PYmplY3Q6W29iamVjdCB0b0pTT05PYmplY3RdLmdldCgpXSkpCisgICAgICAgIHJl
dHVybiBuaWw7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoRGlyZWN0aW9uYWxpdHk6KFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rp
b25hbGl0eSlkaXJlY3Rpb25hbGl0eSBidXR0b25zOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKili
dXR0b25zIGNvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcyBu
b3RlczooTlNTdHJpbmcgKilub3RlcyB0aW1lc3RhbXA6KGRvdWJsZSl0aW1lc3RhbXAgdmFsdWVz
OihSV0lQcm90b2NvbEpTT05PYmplY3QgKil2YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xKU09O
T2JqZWN0ICopcGF5bG9hZCBlcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKWVycm9y
Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7
CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKGJ1dHRvbnMsIEAi
YnV0dG9ucyIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkoY29s
dW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJ
UkVEX1BST1BFUlRZKG5vdGVzLCBAIm5vdGVzIik7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9S
RVFVSVJFRF9QUk9QRVJUWSh2YWx1ZXMsIEAidmFsdWVzIik7CisgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkLCBAInBheWxvYWQiKTsKKyAgICBUSFJPV19F
WENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKGVycm9yLCBAImVycm9yIik7CisKKyAgICBz
ZWxmLmRpcmVjdGlvbmFsaXR5ID0gZGlyZWN0aW9uYWxpdHk7CisgICAgc2VsZi5idXR0b25zID0g
YnV0dG9uczsKKyAgICBzZWxmLmNvbHVtbk5hbWVzID0gY29sdW1uTmFtZXM7CisgICAgc2VsZi5u
b3RlcyA9IG5vdGVzOworICAgIHNlbGYudGltZXN0YW1wID0gdGltZXN0YW1wOworICAgIHNlbGYu
dmFsdWVzID0gdmFsdWVzOworICAgIHNlbGYucGF5bG9hZCA9IHBheWxvYWQ7CisgICAgc2VsZi5l
cnJvciA9IGVycm9yOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpc2V0RGlyZWN0
aW9uYWxpdHk6KFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSlk
aXJlY3Rpb25hbGl0eQoreworICAgIFtzdXBlciBzZXRTdHJpbmc6dG9Qcm90b2NvbFN0cmluZyhk
aXJlY3Rpb25hbGl0eSkgZm9yS2V5OkAiZGlyZWN0aW9uYWxpdHkiXTsKK30KKworLSAoVGVzdFBy
b3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5KWRpcmVjdGlvbmFsaXR5Cit7
CisgICAgcmV0dXJuIGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVy
QnVuZGxlRGlyZWN0aW9uYWxpdHk+KFtzdXBlciBzdHJpbmdGb3JLZXk6QCJkaXJlY3Rpb25hbGl0
eSJdKS52YWx1ZSgpOworfQorCistICh2b2lkKXNldEJ1dHRvbnM6KE5TQXJyYXkvKjxOU1N0cmlu
Zz4qLyAqKWJ1dHRvbnMKK3sKKyAgICBbc3VwZXIgc2V0SlNPTkFycmF5OnRvSlNPTlN0cmluZ0Fy
cmF5KGJ1dHRvbnMpIGZvcktleTpAImJ1dHRvbnMiXTsKK30KKworLSAoTlNBcnJheS8qPE5TU3Ry
aW5nPiovICopYnV0dG9ucworeworICAgIHJldHVybiB0b09iakNTdHJpbmdBcnJheShbc3VwZXIg
SlNPTkFycmF5Rm9yS2V5OkAiYnV0dG9ucyJdKTsKK30KKworLSAodm9pZClzZXRDb2x1bW5OYW1l
czooTlNBcnJheS8qPE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMKK3sKKyAgICBbc3VwZXIgc2V0
SlNPTkFycmF5OnRvSlNPTlN0cmluZ0FycmF5KGNvbHVtbk5hbWVzKSBmb3JLZXk6QCJjb2x1bW5O
YW1lcyJdOworfQorCistIChOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcworewor
ICAgIHJldHVybiB0b09iakNTdHJpbmdBcnJheShbc3VwZXIgSlNPTkFycmF5Rm9yS2V5OkAiY29s
dW1uTmFtZXMiXSk7Cit9CisKKy0gKHZvaWQpc2V0Tm90ZXM6KE5TU3RyaW5nICopbm90ZXMKK3sK
KyAgICBbc3VwZXIgc2V0U3RyaW5nOm5vdGVzIGZvcktleTpAIm5vdGVzIl07Cit9CisKKy0gKE5T
U3RyaW5nICopbm90ZXMKK3sKKyAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAIm5vdGVz
Il07Cit9CisKKy0gKHZvaWQpc2V0VGltZXN0YW1wOihkb3VibGUpdGltZXN0YW1wCit7CisgICAg
W3N1cGVyIHNldERvdWJsZTp0aW1lc3RhbXAgZm9yS2V5OkAidGltZXN0YW1wIl07Cit9CisKKy0g
KGRvdWJsZSl0aW1lc3RhbXAKK3sKKyAgICByZXR1cm4gW3N1cGVyIGRvdWJsZUZvcktleTpAInRp
bWVzdGFtcCJdOworfQorCistICh2b2lkKXNldFZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0
ICopdmFsdWVzCit7CisgICAgW3N1cGVyIHNldE9iamVjdDp2YWx1ZXMgZm9yS2V5OkAidmFsdWVz
Il07Cit9CisKKy0gKFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcworeworICAgIFJXSVBy
b3RvY29sSlNPTk9iamVjdCAqb2JqZWN0ID0gW3N1cGVyIG9iamVjdEZvcktleTpAInZhbHVlcyJd
OworICAgIGlmICghb2JqZWN0KQorICAgICAgICByZXR1cm4gbmlsOworICAgIHJldHVybiBbW1JX
SVByb3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0Oltbc3VwZXIgb2Jq
ZWN0Rm9yS2V5OkAidmFsdWVzIl0gdG9KU09OT2JqZWN0XS5nZXQoKV07Cit9CisKKy0gKHZvaWQp
c2V0UGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZAoreworICAgIFtzdXBl
ciBzZXRPYmplY3Q6cGF5bG9hZCBmb3JLZXk6QCJwYXlsb2FkIl07Cit9CisKKy0gKFJXSVByb3Rv
Y29sSlNPTk9iamVjdCAqKXBheWxvYWQKK3sKKyAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9i
amVjdCA9IFtzdXBlciBvYmplY3RGb3JLZXk6QCJwYXlsb2FkIl07CisgICAgaWYgKCFvYmplY3Qp
CisgICAgICAgIHJldHVybiBuaWw7CisgICAgcmV0dXJuIFtbUldJUHJvdG9jb2xKU09OT2JqZWN0
IGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6W1tzdXBlciBvYmplY3RGb3JLZXk6QCJwYXlsb2Fk
Il0gdG9KU09OT2JqZWN0XS5nZXQoKV07Cit9CisKKy0gKHZvaWQpc2V0RXJyb3I6KFRlc3RQcm90
b2NvbERhdGFiYXNlRXJyb3IgKillcnJvcgoreworICAgIFtzdXBlciBzZXRPYmplY3Q6ZXJyb3Ig
Zm9yS2V5OkAiZXJyb3IiXTsKK30KKworLSAoVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKWVy
cm9yCit7CisgICAgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvYmplY3QgPSBbc3VwZXIgb2JqZWN0
Rm9yS2V5OkAiZXJyb3IiXTsKKyAgICBpZiAoIW9iamVjdCkKKyAgICAgICAgcmV0dXJuIG5pbDsK
KyAgICByZXR1cm4gW1tUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGFsbG9jXSBpbml0V2l0aEpT
T05PYmplY3Q6W1tzdXBlciBvYmplY3RGb3JLZXk6QCJlcnJvciJdIHRvSlNPTk9iamVjdF0uZ2V0
KCldOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbi1yZXN1bHQgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1y
ZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMC4uZDljOTc2ZWZlMzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1yZXF1
aXJpbmctcnVudGltZS1jYXN0cy5qc29uLXJlc3VsdApAQCAtMCwwICsxLDE2MTQgQEAKKyMjIyBC
ZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworLy8gVGVzdAorSW5zcGVjdG9y
QmFja2VuZC5yZWdpc3RlckRvbWFpbigiVGVzdCIsIG51bGwpOworSW5zcGVjdG9yQmFja2VuZC5y
ZWdpc3RlckVudW0oIlRlc3QuVW5jYXN0ZWRBbmltYWxzIiwge1BpZ3M6ICJQaWdzIiwgQ293czog
IkNvd3MiLCBDYXRzOiAiQ2F0cyIsIEhlbnM6ICJIZW5zIn0pOworSW5zcGVjdG9yQmFja2VuZC5y
ZWdpc3RlckVudW0oIlRlc3QuQ2FzdGVkQW5pbWFscyIsIHtEdWNrczogIkR1Y2tzIiwgSGVuczog
IkhlbnMiLCBDcm93czogIkNyb3dzIiwgRmxhbWluZ29zOiAiRmxhbWluZ29zIn0pOworSW5zcGVj
dG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiVGVzdCIsIG51bGwpOworIyMjIEVuZCBGaWxlOiBJ
bnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5h
dGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMu
aCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5o
PgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisK
K25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hl
ciB7CitwdWJsaWM6CisgICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2Vu
ZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92
ZShkaXNwYXRjaGVyKTsgfQorICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hl
cigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KK3ByaXZhdGU6
CisgICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOworfTsK
KworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3Bh
dGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmlu
Zy1ydW50aW1lLWNhc3RzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgi
CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7
CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCisKKworfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVn
aW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1
ZXMuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKKyNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCisjZW5kaWYg
Ly8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKK25hbWVzcGFjZSBJ
bnNwZWN0b3IgeworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmls
ZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9u
dGVuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBl
LXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xP
YmplY3RzLmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEZyb250ZW5k
Um91dGVyOworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEZy
b250ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0
Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJp
bmctcnVudGltZS1jYXN0cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNw
YXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRS
b3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNw
ZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0
RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9i
amVjdHMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5n
LXJ1bnRpbWUtY2FzdHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
clByb3RvY29sVHlwZXMuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKKworCisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKworCisvLyBGb3J3
YXJkIGRlY2xhcmF0aW9ucy4KK25hbWVzcGFjZSBUZXN0IHsKK2NsYXNzIFR5cGVOZWVkaW5nQ2Fz
dDsKK2NsYXNzIFJlY3Vyc2l2ZU9iamVjdDE7CitjbGFzcyBSZWN1cnNpdmVPYmplY3QyOworZW51
bSBjbGFzcyBVbmNhc3RlZEFuaW1hbHM7CitlbnVtIGNsYXNzIENhc3RlZEFuaW1hbHM7Cit9IC8v
IFRlc3QKKy8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KKworCisvLyBUeXBlZGVmcy4K
K25hbWVzcGFjZSBUZXN0IHsKK3R5cGVkZWYgaW50IENhc3RlZE9iamVjdElkOwordHlwZWRlZiBp
bnQgVW5jYXN0ZWRPYmplY3RJZDsKK30gLy8gVGVzdAorLy8gRW5kIG9mIHR5cGVkZWZzLgorCitu
YW1lc3BhY2UgVGVzdEhlbHBlcnMgeworCitTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50
IGNvZGUpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFs
dWUoVCBlbnVtVmFsdWUpCit7CisgICAgcmV0dXJuIGdldEVudW1Db25zdGFudFZhbHVlKHN0YXRp
Y19jYXN0PGludD4oZW51bVZhbHVlKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJz
CisKK25hbWVzcGFjZSBUZXN0IHsKKy8qIEEgZHVtbXkgdHlwZSB0aGF0IHJlcXVpcmVzIHJ1bnRp
bWUgY2FzdHMsIGFuZCBmb3JjZXMgbm9uLXByaW1pdGl2ZSByZWZlcmVuY2VkIHR5cGVzIHRvIGFs
c28gZW1pdCBydW50aW1lIGNhc3QgaGVscGVycy4gKi8KK2NsYXNzIFR5cGVOZWVkaW5nQ2FzdCA6
IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKK3B1YmxpYzoKKyAgICBlbnVtIHsKKyAgICAgICAg
Tm9GaWVsZHNTZXQgPSAwLAorICAgICAgICBTdHJpbmdTZXQgPSAxIDw8IDAsCisgICAgICAgIE51
bWJlclNldCA9IDEgPDwgMSwKKyAgICAgICAgQW5pbWFsc1NldCA9IDEgPDwgMiwKKyAgICAgICAg
SWRTZXQgPSAxIDw8IDMsCisgICAgICAgIFRyZWVTZXQgPSAxIDw8IDQsCisgICAgICAgIEFsbEZp
ZWxkc1NldCA9IChTdHJpbmdTZXQgfCBOdW1iZXJTZXQgfCBBbmltYWxzU2V0IHwgSWRTZXQgfCBU
cmVlU2V0KQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CisgICAgY2xhc3MgQnVp
bGRlciB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbV9yZXN1
bHQ7CisKKyAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYg
Y2FzdFN0YXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9j
YXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAg
QnVpbGRlcihSZWY8LypUeXBlTmVlZGluZ0Nhc3QqL0pTT046Ok9iamVjdD4mJiBvYmplY3QpCisg
ICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKKyAgICAgICAgeworICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRl
ZF9pbl9ub25faW5pdF9zdGF0ZSk7CisgICAgICAgIH0KKyAgICAgICAgZnJpZW5kIGNsYXNzIFR5
cGVOZWVkaW5nQ2FzdDsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFN0
cmluZ1NldD4mIHNldFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAgICB7CisgICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU3RyaW5nU2V0KSwgcHJvcGVydHlfc3Ry
aW5nX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInN0cmlu
ZyJfcywgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTdHJpbmdTZXQ+KCk7
CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTnVtYmVyU2V0PiYgc2V0TnVt
YmVyKGludCB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIE51bWJlclNldCksIHByb3BlcnR5X251bWJlcl9hbHJlYWR5X3NldCk7CisgICAgICAg
ICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcigibnVtYmVyIl9zLCB2YWx1ZSk7CisgICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPE51bWJlclNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBBbmltYWxzU2V0PiYgc2V0QW5pbWFscyhJbnNwZWN0b3I6OlByb3RvY29s
OjpUZXN0OjpDYXN0ZWRBbmltYWxzIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVCghKFNUQVRFICYgQW5pbWFsc1NldCksIHByb3BlcnR5X2FuaW1hbHNfYWxyZWFk
eV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygiYW5pbWFscyJfcywgSW5z
cGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKHZhbHVl
KSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEFuaW1hbHNTZXQ+KCk7CisgICAgICAg
IH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgSWRTZXQ+JiBzZXRJZChpbnQgdmFsdWUpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBJZFNldCksIHBy
b3BlcnR5X2lkX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2Vy
KCJpZCJfcywgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxJZFNldD4oKTsK
KyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUcmVlU2V0PiYgc2V0VHJlZShS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT4gdmFsdWUp
CisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUcmVlU2V0
KSwgcHJvcGVydHlfdHJlZV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
T2JqZWN0KCJ0cmVlIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFRy
ZWVTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBSZWY8VHlwZU5lZWRpbmdDYXN0PiByZWxl
YXNlKCkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxs
RmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKHNpemVvZihUeXBlTmVlZGluZ0Nhc3QpID09IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5u
b3RfY2FzdCk7CisKKyAgICAgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25SZXN1bHQgPSBt
X3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBXVEZN
b3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxUeXBlTmVlZGluZ0Nhc3Q+Kj4oJmpzb25SZXN1bHQp
KTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICB9OworCisgICAg
LyoKKyAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CisgICAgICogUmVmPFR5cGVOZWVkaW5n
Q2FzdD4gcmVzdWx0ID0gVHlwZU5lZWRpbmdDYXN0OjpjcmVhdGUoKQorICAgICAqICAgICAuc2V0
U3RyaW5nKC4uLikKKyAgICAgKiAgICAgLnNldE51bWJlciguLi4pCisgICAgICogICAgIC5zZXRB
bmltYWxzKC4uLikKKyAgICAgKiAgICAgLnNldElkKC4uLikKKyAgICAgKiAgICAgLnNldFRyZWUo
Li4uKQorICAgICAqICAgICAucmVsZWFzZSgpOworICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVy
PE5vRmllbGRzU2V0PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9G
aWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOworICAgIH0KK307CisKKy8qICAqLwor
ZW51bSBjbGFzcyBVbmNhc3RlZEFuaW1hbHMgeworICAgIFBpZ3MgPSA0LAorICAgIENvd3MgPSA1
LAorICAgIENhdHMgPSA2LAorICAgIEhlbnMgPSAxLAorfTsgLy8gZW51bSBjbGFzcyBVbmNhc3Rl
ZEFuaW1hbHMKKy8qICAqLworZW51bSBjbGFzcyBDYXN0ZWRBbmltYWxzIHsKKyAgICBEdWNrcyA9
IDAsCisgICAgSGVucyA9IDEsCisgICAgQ3Jvd3MgPSAyLAorICAgIEZsYW1pbmdvcyA9IDMsCit9
OyAvLyBlbnVtIGNsYXNzIENhc3RlZEFuaW1hbHMKK2NsYXNzIFJlY3Vyc2l2ZU9iamVjdDEgOiBw
dWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CitwdWJsaWM6CisgICAgZW51bSB7CisgICAgICAgIE5v
RmllbGRzU2V0ID0gMCwKKyAgICAgICAgQWxsRmllbGRzU2V0ID0gMAorICAgIH07CisKKyAgICB0
ZW1wbGF0ZTxpbnQgU1RBVEU+CisgICAgY2xhc3MgQnVpbGRlciB7CisgICAgcHJpdmF0ZToKKyAg
ICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7CisKKyAgICAgICAgdGVtcGxhdGU8
aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQ
Pio+KHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcihSZWY8LypSZWN1cnNpdmVP
YmplY3QxKi9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQorICAgICAgICAgICAgOiBtX3Jlc3VsdChX
VEZNb3ZlKG9iamVjdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNU
QVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwor
ICAgICAgICB9CisgICAgICAgIGZyaWVuZCBjbGFzcyBSZWN1cnNpdmVPYmplY3QxOworICAgIHB1
YmxpYzoKKworICAgICAgICBSZWY8UmVjdXJzaXZlT2JqZWN0MT4gcmVsZWFzZSgpCisgICAgICAg
IHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVz
dWx0X2lzX25vdF9yZWFkeSk7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoUmVj
dXJzaXZlT2JqZWN0MSkgPT0gc2l6ZW9mKEpTT046Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsKKwor
ICAgICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4ganNvblJlc3VsdCA9IG1fcmVzdWx0LnJlbGVh
c2VOb25OdWxsKCk7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFdURk1vdmUoKnJlaW50ZXJw
cmV0X2Nhc3Q8UmVmPFJlY3Vyc2l2ZU9iamVjdDE+Kj4oJmpzb25SZXN1bHQpKTsKKyAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyoKKyAgICAgKiBT
eW50aGV0aWMgY29uc3RydWN0b3I6CisgICAgICogUmVmPFJlY3Vyc2l2ZU9iamVjdDE+IHJlc3Vs
dCA9IFJlY3Vyc2l2ZU9iamVjdDE6OmNyZWF0ZSgpCisgICAgICogICAgIC5yZWxlYXNlKCk7Cisg
ICAgICovCisgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCisgICAgewor
ICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KSk7CisgICAgfQorCisgICAgdm9pZCBzZXRPYmooUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDI+IHZhbHVlKQorICAgIHsKKyAgICAgICAgSlNPTjo6T2Jq
ZWN0QmFzZTo6c2V0T2JqZWN0KCJvYmoiX3MsIFdURk1vdmUodmFsdWUpKTsKKyAgICB9Cit9Owor
CitjbGFzcyBSZWN1cnNpdmVPYmplY3QyIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgeworcHVi
bGljOgorICAgIGVudW0geworICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCisgICAgICAgIEFsbEZp
ZWxkc1NldCA9IDAKKyAgICB9OworCisgICAgdGVtcGxhdGU8aW50IFNUQVRFPgorICAgIGNsYXNz
IEJ1aWxkZXIgeworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1f
cmVzdWx0OworCisgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RF
UD4mIGNhc3RTdGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnBy
ZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKKyAgICAgICAgfQorCisgICAg
ICAgIEJ1aWxkZXIoUmVmPC8qUmVjdXJzaXZlT2JqZWN0MiovSlNPTjo6T2JqZWN0PiYmIG9iamVj
dCkKKyAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQorICAgICAgICB7Cisg
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9j
cmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKKyAgICAgICAgfQorICAgICAgICBmcmllbmQgY2xh
c3MgUmVjdXJzaXZlT2JqZWN0MjsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgUmVmPFJlY3Vyc2l2
ZU9iamVjdDI+IHJlbGVhc2UoKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VS
VChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOworICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFJlY3Vyc2l2ZU9iamVjdDIpID09IHNpemVvZihKU09O
OjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7CisKKyAgICAgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+
IGpzb25SZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOworICAgICAgICAgICAgYXV0
byByZXN1bHQgPSBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxSZWN1cnNpdmVPYmplY3Qy
Pio+KCZqc29uUmVzdWx0KSk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9
CisgICAgfTsKKworICAgIC8qCisgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgorICAgICAq
IFJlZjxSZWN1cnNpdmVPYmplY3QyPiByZXN1bHQgPSBSZWN1cnNpdmVPYmplY3QyOjpjcmVhdGUo
KQorICAgICAqICAgICAucmVsZWFzZSgpOworICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVyPE5v
RmllbGRzU2V0PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVs
ZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOworICAgIH0KKworICAgIHZvaWQgc2V0T2Jq
KFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QxPiB2YWx1
ZSkKKyAgICB7CisgICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldE9iamVjdCgib2JqIl9zLCBX
VEZNb3ZlKHZhbHVlKSk7CisgICAgfQorfTsKKworfSAvLyBUZXN0CisKK3RlbXBsYXRlPD4gc3Ry
dWN0IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFs
cz4geworc3RhdGljIHZvaWQgYXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSlNPTjo6VmFsdWUq
KTsKK307Cit0ZW1wbGF0ZTw+IHN0cnVjdCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD4geworc3RhdGljIFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+IHJ1bnRpbWVDYXN0KFJlZlB0cjxKU09OOjpW
YWx1ZT4mJiB2YWx1ZSk7CitzdGF0aWMgdm9pZCBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShK
U09OOjpWYWx1ZSopOworfTsKK3RlbXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8SW5zcGVj
dG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT4geworc3RhdGljIHZvaWQgYXNz
ZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSlNPTjo6VmFsdWUqKTsKK307Cit0ZW1wbGF0ZTw+IHN0
cnVjdCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9i
amVjdDI+IHsKK3N0YXRpYyB2b2lkIGFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEpTT046OlZh
bHVlKik7Cit9OworCituYW1lc3BhY2UgVGVzdEhlbHBlcnMgeworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBQcm90b2NvbEVudW1UeXBlPgorT3B0aW9uYWw8UHJvdG9jb2xFbnVtVHlwZT4gcGFyc2VFbnVt
VmFsdWVGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYpOworCisvLyBFbnVtcyBpbiB0aGUgJ1Rlc3Qn
IERvbWFpbgordGVtcGxhdGU8PgorT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6
VW5jYXN0ZWRBbmltYWxzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90
b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzPihjb25zdCBTdHJpbmcmKTsKK3RlbXBsYXRlPD4K
K09wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+IHBhcnNl
RW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmlt
YWxzPihjb25zdCBTdHJpbmcmKTsKKworfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKKworfSAv
LyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKK25hbWVz
cGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7CisK
Ky8vIEhhc2ggZGVjbGFyYXRpb25zIGluIHRoZSAnVGVzdCcgRG9tYWluCit0ZW1wbGF0ZTw+Citz
dHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmlt
YWxzPiB7CisgICAgdHlwZWRlZiBJbnRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlVu
Y2FzdGVkQW5pbWFscz4gSGFzaDsKK307Cit0ZW1wbGF0ZTw+CitzdHJ1Y3QgRGVmYXVsdEhhc2g8
SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz4geworICAgIHR5cGVkZWYg
SW50SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPiBIYXNoOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVj
dHMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKworI2luY2x1ZGUg
PHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNw
YWNlIEluc3BlY3RvciB7CisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKK25hbWVzcGFjZSBUZXN0
SGVscGVycyB7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBlbnVtX2NvbnN0YW50X3ZhbHVl
c1tdID0geworICAgICJEdWNrcyIsCisgICAgIkhlbnMiLAorICAgICJDcm93cyIsCisgICAgIkZs
YW1pbmdvcyIsCisgICAgIlBpZ3MiLAorICAgICJDb3dzIiwKKyAgICAiQ2F0cyIsCit9OworCitT
dHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsKKyAgICByZXR1cm4gZW51bV9j
b25zdGFudF92YWx1ZXNbY29kZV07Cit9CisKKy8vIEVudW1zIGluIHRoZSAnVGVzdCcgRG9tYWlu
Cit0ZW1wbGF0ZTw+CitPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNhc3Rl
ZEFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpU
ZXN0OjpVbmNhc3RlZEFuaW1hbHM+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCit7Cisg
ICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0geworICAgICAgICAoc2l6
ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFsczo6UGlncywKKyAg
ICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM6
OkNvd3MsCisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VW5jYXN0
ZWRBbmltYWxzOjpDYXRzLAorICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlRl
c3Q6OlVuY2FzdGVkQW5pbWFsczo6SGVucywKKyAgICB9OworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgNDsgKytpKQorICAgICAgICBpZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFu
dF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNbaV1dKQorICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0
b3I6OlByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHMpY29uc3RhbnRWYWx1ZXNbaV07CisK
KyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCit0ZW1wbGF0ZTw+CitPcHRpb25hbDxJbnNw
ZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPiBwYXJzZUVudW1WYWx1ZUZyb21T
dHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz4oY29uc3QgU3Ry
aW5nJiBwcm90b2NvbFN0cmluZykKK3sKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50
VmFsdWVzW10gPSB7CisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6
Q2FzdGVkQW5pbWFsczo6RHVja3MsCisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2Nv
bDo6VGVzdDo6Q2FzdGVkQW5pbWFsczo6SGVucywKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6
OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzOjpDcm93cywKKyAgICAgICAgKHNpemVfdClJ
bnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzOjpGbGFtaW5nb3MsCisgICAg
fTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDQ7ICsraSkKKyAgICAgICAgaWYgKHByb3Rv
Y29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKKyAg
ICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFs
cyljb25zdGFudFZhbHVlc1tpXTsKKworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKKwor
fSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKKworCisKK3ZvaWQgQmluZGluZ1RyYWl0czxJbnNw
ZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPjo6YXNzZXJ0VmFsdWVIYXNFeHBl
Y3RlZFR5cGUoSlNPTjo6VmFsdWUqIHZhbHVlKQoreworI2lmIEFTU0VSVF9FTkFCTEVECisgICAg
QVNTRVJUX0FSRyh2YWx1ZSwgdmFsdWUpOworICAgIFN0cmluZyByZXN1bHQ7CisgICAgYm9vbCBj
YXN0U3VjY2VlZGVkID0gdmFsdWUtPmFzU3RyaW5nKHJlc3VsdCk7CisgICAgQVNTRVJUKGNhc3RT
dWNjZWVkZWQpOworICAgIEFTU0VSVChyZXN1bHQgPT0gIkR1Y2tzIiB8fCByZXN1bHQgPT0gIkhl
bnMiIHx8IHJlc3VsdCA9PSAiQ3Jvd3MiIHx8IHJlc3VsdCA9PSAiRmxhbWluZ29zIik7CisjZWxz
ZSAvLyBBU1NFUlRfRU5BQkxFRAorICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7CisjZW5kaWYgLy8g
QVNTRVJUX0VOQUJMRUQKK30KKwordm9pZCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEpT
T046OlZhbHVlKiB2YWx1ZSkKK3sKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgIEFTU0VSVF9BUkco
dmFsdWUsIHZhbHVlKTsKKyAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBvYmplY3Q7CisgICAgYm9v
bCBjYXN0U3VjY2VlZGVkID0gdmFsdWUtPmFzT2JqZWN0KG9iamVjdCk7CisgICAgQVNTRVJUX1VO
VVNFRChjYXN0U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsKKyAgICB7CisgICAgICAgIGF1dG8g
c3RyaW5nUG9zID0gb2JqZWN0LT5maW5kKCJzdHJpbmciX3MpOworICAgICAgICBBU1NFUlQoc3Ry
aW5nUG9zICE9IG9iamVjdC0+ZW5kKCkpOworICAgICAgICBCaW5kaW5nVHJhaXRzPFN0cmluZz46
OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKHN0cmluZ1Bvcy0+dmFsdWUuZ2V0KCkpOworICAg
IH0KKyAgICB7CisgICAgICAgIGF1dG8gbnVtYmVyUG9zID0gb2JqZWN0LT5maW5kKCJudW1iZXIi
X3MpOworICAgICAgICBBU1NFUlQobnVtYmVyUG9zICE9IG9iamVjdC0+ZW5kKCkpOworICAgICAg
ICBCaW5kaW5nVHJhaXRzPGludD46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKG51bWJlclBv
cy0+dmFsdWUuZ2V0KCkpOworICAgIH0KKyAgICB7CisgICAgICAgIGF1dG8gYW5pbWFsc1BvcyA9
IG9iamVjdC0+ZmluZCgiYW5pbWFscyJfcyk7CisgICAgICAgIEFTU0VSVChhbmltYWxzUG9zICE9
IG9iamVjdC0+ZW5kKCkpOworICAgICAgICBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShhbmlt
YWxzUG9zLT52YWx1ZS5nZXQoKSk7CisgICAgfQorICAgIHsKKyAgICAgICAgYXV0byBpZFBvcyA9
IG9iamVjdC0+ZmluZCgiaWQiX3MpOworICAgICAgICBBU1NFUlQoaWRQb3MgIT0gb2JqZWN0LT5l
bmQoKSk7CisgICAgICAgIEJpbmRpbmdUcmFpdHM8aW50Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3Rl
ZFR5cGUoaWRQb3MtPnZhbHVlLmdldCgpKTsKKyAgICB9CisgICAgeworICAgICAgICBhdXRvIHRy
ZWVQb3MgPSBvYmplY3QtPmZpbmQoInRyZWUiX3MpOworICAgICAgICBBU1NFUlQodHJlZVBvcyAh
PSBvYmplY3QtPmVuZCgpKTsKKyAgICAgICAgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QxPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUo
dHJlZVBvcy0+dmFsdWUuZ2V0KCkpOworICAgIH0KKworICAgIGludCBmb3VuZFByb3BlcnRpZXND
b3VudCA9IDU7CisgICAgaWYgKGZvdW5kUHJvcGVydGllc0NvdW50ICE9IG9iamVjdC0+c2l6ZSgp
KQorICAgICAgICBGQVRBTCgiVW5leHBlY3RlZCBwcm9wZXJ0aWVzIGluIG9iamVjdDogJXNcbiIs
IG9iamVjdC0+dG9KU09OU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOworI2Vsc2UgLy8gQVNTRVJU
X0VOQUJMRUQKKyAgICBVTlVTRURfUEFSQU0odmFsdWUpOworI2VuZGlmIC8vIEFTU0VSVF9FTkFC
TEVECit9CisKK1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nh
c3Q+IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdD
YXN0Pjo6cnVudGltZUNhc3QoUmVmUHRyPEpTT046OlZhbHVlPiYmIHZhbHVlKQoreworICAgIFJl
ZlB0cjxKU09OOjpPYmplY3Q+IHJlc3VsdDsKKyAgICBib29sIGNhc3RTdWNjZWVkZWQgPSB2YWx1
ZS0+YXNPYmplY3QocmVzdWx0KTsKKyAgICBBU1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVkZWQsIGNh
c3RTdWNjZWVkZWQpOworICAgIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVz
dDo6VHlwZU5lZWRpbmdDYXN0Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUocmVzdWx0Lmdl
dCgpKTsKKyAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVz
dDo6VHlwZU5lZWRpbmdDYXN0KSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0QmFzZSksIHR5cGVfY2Fz
dF9wcm9ibGVtKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SW5zcGVjdG9yOjpQcm90b2NvbDo6
VGVzdDo6VHlwZU5lZWRpbmdDYXN0Kj4oc3RhdGljX2Nhc3Q8SlNPTjo6T2JqZWN0QmFzZSo+KHJl
c3VsdC5nZXQoKSkpOworfQorCisKK3ZvaWQgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QxPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUo
SlNPTjo6VmFsdWUqIHZhbHVlKQoreworI2lmIEFTU0VSVF9FTkFCTEVECisgICAgQVNTRVJUX0FS
Ryh2YWx1ZSwgdmFsdWUpOworICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG9iamVjdDsKKyAgICBi
b29sIGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNPYmplY3Qob2JqZWN0KTsKKyAgICBBU1NFUlRf
VU5VU0VEKGNhc3RTdWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQpOworCisgICAgaW50IGZvdW5kUHJv
cGVydGllc0NvdW50ID0gMDsKKyAgICB7CisgICAgICAgIGF1dG8gb2JqUG9zID0gb2JqZWN0LT5m
aW5kKCJvYmoiX3MpOworICAgICAgICBpZiAob2JqUG9zICE9IG9iamVjdC0+ZW5kKCkpIHsKKyAg
ICAgICAgICAgIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJz
aXZlT2JqZWN0Mj46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKG9ialBvcy0+dmFsdWUuZ2V0
KCkpOworICAgICAgICAgICAgKytmb3VuZFByb3BlcnRpZXNDb3VudDsKKyAgICAgICAgfQorICAg
IH0KKyAgICBpZiAoZm91bmRQcm9wZXJ0aWVzQ291bnQgIT0gb2JqZWN0LT5zaXplKCkpCisgICAg
ICAgIEZBVEFMKCJVbmV4cGVjdGVkIHByb3BlcnRpZXMgaW4gb2JqZWN0OiAlc1xuIiwgb2JqZWN0
LT50b0pTT05TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7CisjZWxzZSAvLyBBU1NFUlRfRU5BQkxF
RAorICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7CisjZW5kaWYgLy8gQVNTRVJUX0VOQUJMRUQKK30K
Kwordm9pZCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2
ZU9iamVjdDI+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShKU09OOjpWYWx1ZSogdmFsdWUp
Cit7CisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICBBU1NFUlRfQVJHKHZhbHVlLCB2YWx1ZSk7Cisg
ICAgUmVmUHRyPEpTT046Ok9iamVjdD4gb2JqZWN0OworICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9
IHZhbHVlLT5hc09iamVjdChvYmplY3QpOworICAgIEFTU0VSVF9VTlVTRUQoY2FzdFN1Y2NlZWRl
ZCwgY2FzdFN1Y2NlZWRlZCk7CisKKyAgICBpbnQgZm91bmRQcm9wZXJ0aWVzQ291bnQgPSAwOwor
ICAgIHsKKyAgICAgICAgYXV0byBvYmpQb3MgPSBvYmplY3QtPmZpbmQoIm9iaiJfcyk7CisgICAg
ICAgIGlmIChvYmpQb3MgIT0gb2JqZWN0LT5lbmQoKSkgeworICAgICAgICAgICAgQmluZGluZ1Ry
YWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QxPjo6YXNzZXJ0
VmFsdWVIYXNFeHBlY3RlZFR5cGUob2JqUG9zLT52YWx1ZS5nZXQoKSk7CisgICAgICAgICAgICAr
K2ZvdW5kUHJvcGVydGllc0NvdW50OworICAgICAgICB9CisgICAgfQorICAgIGlmIChmb3VuZFBy
b3BlcnRpZXNDb3VudCAhPSBvYmplY3QtPnNpemUoKSkKKyAgICAgICAgRkFUQUwoIlVuZXhwZWN0
ZWQgcHJvcGVydGllcyBpbiBvYmplY3Q6ICVzXG4iLCBvYmplY3QtPnRvSlNPTlN0cmluZygpLmFz
Y2lpKCkuZGF0YSgpKTsKKyNlbHNlIC8vIEFTU0VSVF9FTkFCTEVECisgICAgVU5VU0VEX1BBUkFN
KHZhbHVlKTsKKyNlbmRpZiAvLyBBU1NFUlRfRU5BQkxFRAorfQorCit9IC8vIG5hbWVzcGFjZSBQ
cm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xPYmplY3RzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2Vu
ZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJl
cXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworCisK
K25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisj
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmln
LmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1
ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKworbmFtZXNwYWNlIElu
c3BlY3RvciB7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbi5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
dHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wu
aD4KKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNl
IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAorQGVuZAorCisKKyMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRp
b24uaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbXBvcnQgIlRlc3RQ
cm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0
ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21l
bnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIElu
c3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KK3sK
KyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworfQorCist
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNv
bnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlm
ICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7Cisg
ICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQorCistICh2
b2lkKWRlYWxsb2MKK3sKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKK0BlbmQKKworCisjIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKworIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KKy8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50
ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1w
b3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisK
KyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorCisjIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+
CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KKworCitA
Y2xhc3MgVGVzdFByb3RvY29sVGVzdFR5cGVOZWVkaW5nQ2FzdDsKK0BjbGFzcyBUZXN0UHJvdG9j
b2xUZXN0UmVjdXJzaXZlT2JqZWN0MTsKK0BjbGFzcyBUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZl
T2JqZWN0MjsKKworCit0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xUZXN0
VW5jYXN0ZWRBbmltYWxzKSB7CisgICAgVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc1Bp
Z3MsCisgICAgVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc0Nvd3MsCisgICAgVGVzdFBy
b3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc0NhdHMsCisgICAgVGVzdFByb3RvY29sVGVzdFVuY2Fz
dGVkQW5pbWFsc0hlbnMsCit9OworCit0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJv
dG9jb2xUZXN0Q2FzdGVkQW5pbWFscykgeworICAgIFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmlt
YWxzRHVja3MsCisgICAgVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHNIZW5zLAorICAgIFRl
c3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzQ3Jvd3MsCisgICAgVGVzdFByb3RvY29sVGVzdENh
c3RlZEFuaW1hbHNGbGFtaW5nb3MsCit9OworCisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkg
KCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUZXN0VHlwZU5lZWRpbmdDYXN0
IDogUldJUHJvdG9jb2xKU09OT2JqZWN0CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2Fk
OihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKKy0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2Jq
ZWN0OworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZyBu
dW1iZXI6KGludCludW1iZXIgYW5pbWFsczooVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHMp
YW5pbWFscyBpZGVudGlmaWVyOihpbnQpaWRlbnRpZmllciB0cmVlOihUZXN0UHJvdG9jb2xUZXN0
UmVjdXJzaXZlT2JqZWN0MSAqKXRyZWU7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0
b21pYywgY29weSkgTlNTdHJpbmcgKnN0cmluZzsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAo
bm9uYXRvbWljLCBhc3NpZ24pIGludCBudW1iZXI7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkg
KG5vbmF0b21pYywgYXNzaWduKSBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFscyBhbmltYWxz
OworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgaW50IGlkZW50
aWZpZXI7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluKSBUZXN0
UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSAqdHJlZTsKK0BlbmQKKworX19hdHRyaWJ1dGVf
XygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbFRlc3RS
ZWN1cnNpdmVPYmplY3QxIDogUldJUHJvdG9jb2xKU09OT2JqZWN0CistIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsK
Ky0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05P
YmplY3QgKilqc29uT2JqZWN0OworLyogb3B0aW9uYWwgKi8gQHByb3BlcnR5IChub25hdG9taWMs
IHJldGFpbikgVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDIgKm9iajsKK0BlbmQKKwor
X19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQ
cm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QyIDogUldJUHJvdG9jb2xKU09OT2JqZWN0CistIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+
ICopcGF5bG9hZDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQ
cm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OworLyogb3B0aW9uYWwgKi8gQHByb3BlcnR5
IChub25hdG9taWMsIHJldGFpbikgVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgKm9i
ajsKK0BlbmQKKworCisKKworCisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1
aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4KKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wu
aAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0
UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCisj
aW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4K
KyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKKworCisKKyMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sSW50ZXJuYWwuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmlu
Zy1ydW50aW1lLWNhc3RzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3Iv
UldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Igewor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+CitPcHRpb25hbDxPYmpDRW51bVR5cGU+
IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKKworCitpbmxpbmUgU3Ry
aW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFscyB2YWx1
ZSkKK3sKKyAgICBzd2l0Y2godmFsdWUpIHsKKyAgICBjYXNlIFRlc3RQcm90b2NvbFRlc3RVbmNh
c3RlZEFuaW1hbHNQaWdzOgorICAgICAgICByZXR1cm4gIlBpZ3MiX3M7CisgICAgY2FzZSBUZXN0
UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzQ293czoKKyAgICAgICAgcmV0dXJuICJDb3dzIl9z
OworICAgIGNhc2UgVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc0NhdHM6CisgICAgICAg
IHJldHVybiAiQ2F0cyJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1h
bHNIZW5zOgorICAgICAgICByZXR1cm4gIkhlbnMiX3M7CisgICAgfQorfQorCit0ZW1wbGF0ZTw+
CitpbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFscz4gZnJvbVBy
b3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09ICJQ
aWdzIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHNQaWdz
OworICAgIGlmICh2YWx1ZSA9PSAiQ293cyIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xU
ZXN0VW5jYXN0ZWRBbmltYWxzQ293czsKKyAgICBpZiAodmFsdWUgPT0gIkNhdHMiKQorICAgICAg
ICByZXR1cm4gVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc0NhdHM7CisgICAgaWYgKHZh
bHVlID09ICJIZW5zIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFRlc3RVbmNhc3RlZEFu
aW1hbHNIZW5zOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK2lubGluZSBTdHJpbmcg
dG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFscyB2YWx1ZSkKK3sK
KyAgICBzd2l0Y2godmFsdWUpIHsKKyAgICBjYXNlIFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmlt
YWxzRHVja3M6CisgICAgICAgIHJldHVybiAiRHVja3MiX3M7CisgICAgY2FzZSBUZXN0UHJvdG9j
b2xUZXN0Q2FzdGVkQW5pbWFsc0hlbnM6CisgICAgICAgIHJldHVybiAiSGVucyJfczsKKyAgICBj
YXNlIFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzQ3Jvd3M6CisgICAgICAgIHJldHVybiAi
Q3Jvd3MiX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFsc0ZsYW1pbmdv
czoKKyAgICAgICAgcmV0dXJuICJGbGFtaW5nb3MiX3M7CisgICAgfQorfQorCit0ZW1wbGF0ZTw+
CitpbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHM+IGZyb21Qcm90
b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSAiRHVj
a3MiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHNEdWNrczsK
KyAgICBpZiAodmFsdWUgPT0gIkhlbnMiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sVGVz
dENhc3RlZEFuaW1hbHNIZW5zOworICAgIGlmICh2YWx1ZSA9PSAiQ3Jvd3MiKQorICAgICAgICBy
ZXR1cm4gVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHNDcm93czsKKyAgICBpZiAodmFsdWUg
PT0gIkZsYW1pbmdvcyIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5p
bWFsc0ZsYW1pbmdvczsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCit9IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1j
YXN0cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNp
bXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorCisjaW1wb3J0ICJUZXN0UHJv
dG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKKyNpbXBvcnQgPFdl
Ykluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisKK3VzaW5nIG5hbWVz
cGFjZSBJbnNwZWN0b3I7CisKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
IChUZXN0RG9tYWluKQorCisrICh2b2lkKV9wYXJzZVR5cGVOZWVkaW5nQ2FzdDooVGVzdFByb3Rv
Y29sVGVzdFR5cGVOZWVkaW5nQ2FzdCAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9h
ZDsKKysgKHZvaWQpX3BhcnNlQ2FzdGVkT2JqZWN0SWQ6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZy
b21QYXlsb2FkOihpZClwYXlsb2FkOworKyAodm9pZClfcGFyc2VVbmNhc3RlZE9iamVjdElkOihO
U051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3Bh
cnNlVW5jYXN0ZWRBbmltYWxzOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQp
cGF5bG9hZDsKKysgKHZvaWQpX3BhcnNlQ2FzdGVkQW5pbWFsczooTlNOdW1iZXIgKiopb3V0VmFs
dWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisrICh2b2lkKV9wYXJzZVJlY3Vyc2l2ZU9iamVj
dDE6KFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxICoqKW91dFZhbHVlIGZyb21QYXls
b2FkOihpZClwYXlsb2FkOworKyAodm9pZClfcGFyc2VSZWN1cnNpdmVPYmplY3QyOihUZXN0UHJv
dG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MiAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5
bG9hZDsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zIChUZXN0RG9tYWluKQorCisrICh2b2lkKV9wYXJzZVR5cGVOZWVkaW5nQ2FzdDooVGVzdFBy
b3RvY29sVGVzdFR5cGVOZWVkaW5nQ2FzdCAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5
bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGlj
dGlvbmFyeSBjbGFzc10pOworICAgICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sVGVzdFR5cGVO
ZWVkaW5nQ2FzdCBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOworfQorCisrICh2b2lk
KV9wYXJzZUNhc3RlZE9iamVjdElkOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDoo
aWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwg
W05TTnVtYmVyIGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gKE5TTnVtYmVyICopcGF5bG9hZDsK
K30KKworKyAodm9pZClfcGFyc2VVbmNhc3RlZE9iamVjdElkOihOU051bWJlciAqKilvdXRWYWx1
ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFE
X1RZUEUocGF5bG9hZCwgW05TTnVtYmVyIGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gKE5TTnVt
YmVyICopcGF5bG9hZDsKK30KKworKyAodm9pZClfcGFyc2VVbmNhc3RlZEFuaW1hbHM6KE5TTnVt
YmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKKyAgICBPcHRp
b25hbDxUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzPiByZXN1bHQgPSBJbnNwZWN0b3I6
OmZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzPihwYXls
b2FkKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9FTlVNX1ZBTFVFKHJlc3VsdCwgQCJV
bmNhc3RlZEFuaW1hbHMiKTsKKyAgICAqb3V0VmFsdWUgPSBAKHJlc3VsdC52YWx1ZSgpKTsKK30K
KworKyAodm9pZClfcGFyc2VDYXN0ZWRBbmltYWxzOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9t
UGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUo
cGF5bG9hZCwgW05TU3RyaW5nIGNsYXNzXSk7CisgICAgT3B0aW9uYWw8VGVzdFByb3RvY29sVGVz
dENhc3RlZEFuaW1hbHM+IHJlc3VsdCA9IEluc3BlY3Rvcjo6ZnJvbVByb3RvY29sU3RyaW5nPFRl
c3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzPihwYXlsb2FkKTsKKyAgICBUSFJPV19FWENFUFRJ
T05fRk9SX0JBRF9FTlVNX1ZBTFVFKHJlc3VsdCwgQCJDYXN0ZWRBbmltYWxzIik7CisgICAgKm91
dFZhbHVlID0gQChyZXN1bHQudmFsdWUoKSk7Cit9CisKKysgKHZvaWQpX3BhcnNlUmVjdXJzaXZl
T2JqZWN0MTooVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgKiopb3V0VmFsdWUgZnJv
bVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBF
KHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQ
cm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9h
ZF07Cit9CisKKysgKHZvaWQpX3BhcnNlUmVjdXJzaXZlT2JqZWN0MjooVGVzdFByb3RvY29sVGVz
dFJlY3Vyc2l2ZU9iamVjdDIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sK
KyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkg
Y2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmpl
Y3QyIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07Cit9CisKK0BlbmQKKworCisjIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorCisjIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sVHlwZXMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIK
KworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDxXZWJJ
bnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorI2ltcG9ydCA8d3RmL0Fz
c2VydGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFj
ZSBJbnNwZWN0b3I7CisKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFRlc3RUeXBlTmVl
ZGluZ0Nhc3QKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBOU0Rp
Y3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZAoreworICAgIGlmICghKHNlbGYgPSBb
c3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0Aic3RyaW5nIl0sIEAic3RyaW5nIik7Cisg
ICAgc2VsZi5zdHJpbmcgPSBwYXlsb2FkW0Aic3RyaW5nIl07CisKKyAgICBUSFJPV19FWENFUFRJ
T05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJudW1iZXIiXSwgQCJudW1iZXIiKTsK
KyAgICBzZWxmLm51bWJlciA9IFtwYXlsb2FkW0AibnVtYmVyIl0gaW50ZWdlclZhbHVlXTsKKwor
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImFuaW1h
bHMiXSwgQCJhbmltYWxzIik7CisgICAgT3B0aW9uYWw8VGVzdFByb3RvY29sVGVzdENhc3RlZEFu
aW1hbHM+IGFuaW1hbHMgPSBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sVGVzdENhc3Rl
ZEFuaW1hbHM+KHBheWxvYWRbQCJhbmltYWxzIl0pOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
QkFEX0VOVU1fVkFMVUUoYW5pbWFscywgQCJhbmltYWxzIik7CisgICAgc2VsZi5hbmltYWxzID0g
YW5pbWFscy52YWx1ZSgpOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9Q
RVJUWShwYXlsb2FkW0AiaWQiXSwgQCJpZCIpOworICAgIHNlbGYuaWRlbnRpZmllciA9IFtwYXls
b2FkW0AiaWQiXSBpbnRlZ2VyVmFsdWVdOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFV
SVJFRF9QUk9QRVJUWShwYXlsb2FkW0AidHJlZSJdLCBAInRyZWUiKTsKKyAgICBzZWxmLnRyZWUg
PSBbW1Rlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxIGFsbG9jXSBpbml0V2l0aFBheWxv
YWQ6cGF5bG9hZFtAInRyZWUiXV07CisKKyAgICByZXR1cm4gc2VsZjsKK30KKy0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilvYmpl
Y3QKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoSlNPTk9iamVjdDpbb2JqZWN0
IHRvSlNPTk9iamVjdF0uZ2V0KCldKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHJldHVy
biBzZWxmOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhTdHJpbmc6KE5TU3RyaW5nICop
c3RyaW5nIG51bWJlcjooaW50KW51bWJlciBhbmltYWxzOihUZXN0UHJvdG9jb2xUZXN0Q2FzdGVk
QW5pbWFscylhbmltYWxzIGlkZW50aWZpZXI6KGludClpZGVudGlmaWVyIHRyZWU6KFRlc3RQcm90
b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxICopdHJlZQoreworICAgIGlmICghKHNlbGYgPSBbc3Vw
ZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9SRVFVSVJFRF9QUk9QRVJUWShzdHJpbmcsIEAic3RyaW5nIik7CisgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWSh0cmVlLCBAInRyZWUiKTsKKworICAgIHNlbGYuc3Ry
aW5nID0gc3RyaW5nOworICAgIHNlbGYubnVtYmVyID0gbnVtYmVyOworICAgIHNlbGYuYW5pbWFs
cyA9IGFuaW1hbHM7CisgICAgc2VsZi5pZGVudGlmaWVyID0gaWRlbnRpZmllcjsKKyAgICBzZWxm
LnRyZWUgPSB0cmVlOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpc2V0U3RyaW5n
OihOU1N0cmluZyAqKXN0cmluZworeworICAgIFtzdXBlciBzZXRTdHJpbmc6c3RyaW5nIGZvcktl
eTpAInN0cmluZyJdOworfQorCistIChOU1N0cmluZyAqKXN0cmluZworeworICAgIHJldHVybiBb
c3VwZXIgc3RyaW5nRm9yS2V5OkAic3RyaW5nIl07Cit9CisKKy0gKHZvaWQpc2V0TnVtYmVyOihp
bnQpbnVtYmVyCit7CisgICAgW3N1cGVyIHNldEludGVnZXI6bnVtYmVyIGZvcktleTpAIm51bWJl
ciJdOworfQorCistIChpbnQpbnVtYmVyCit7CisgICAgcmV0dXJuIFtzdXBlciBpbnRlZ2VyRm9y
S2V5OkAibnVtYmVyIl07Cit9CisKKy0gKHZvaWQpc2V0QW5pbWFsczooVGVzdFByb3RvY29sVGVz
dENhc3RlZEFuaW1hbHMpYW5pbWFscworeworICAgIFtzdXBlciBzZXRTdHJpbmc6dG9Qcm90b2Nv
bFN0cmluZyhhbmltYWxzKSBmb3JLZXk6QCJhbmltYWxzIl07Cit9CisKKy0gKFRlc3RQcm90b2Nv
bFRlc3RDYXN0ZWRBbmltYWxzKWFuaW1hbHMKK3sKKyAgICByZXR1cm4gZnJvbVByb3RvY29sU3Ry
aW5nPFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzPihbc3VwZXIgc3RyaW5nRm9yS2V5OkAi
YW5pbWFscyJdKS52YWx1ZSgpOworfQorCistICh2b2lkKXNldElkZW50aWZpZXI6KGludClpZGVu
dGlmaWVyCit7CisgICAgW3N1cGVyIHNldEludGVnZXI6aWRlbnRpZmllciBmb3JLZXk6QCJpZCJd
OworfQorCistIChpbnQpaWRlbnRpZmllcgoreworICAgIHJldHVybiBbc3VwZXIgaW50ZWdlckZv
cktleTpAImlkIl07Cit9CisKKy0gKHZvaWQpc2V0VHJlZTooVGVzdFByb3RvY29sVGVzdFJlY3Vy
c2l2ZU9iamVjdDEgKil0cmVlCit7CisgICAgW3N1cGVyIHNldE9iamVjdDp0cmVlIGZvcktleTpA
InRyZWUiXTsKK30KKworLSAoVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgKil0cmVl
Cit7CisgICAgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvYmplY3QgPSBbc3VwZXIgb2JqZWN0Rm9y
S2V5OkAidHJlZSJdOworICAgIGlmICghb2JqZWN0KQorICAgICAgICByZXR1cm4gbmlsOworICAg
IHJldHVybiBbW1Rlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxIGFsbG9jXSBpbml0V2l0
aEpTT05PYmplY3Q6W1tzdXBlciBvYmplY3RGb3JLZXk6QCJ0cmVlIl0gdG9KU09OT2JqZWN0XS5n
ZXQoKV07Cit9CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFRlc3RSZWN1
cnNpdmVPYmplY3QxCisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwg
TlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQKK3sKKyAgICBpZiAoIShzZWxm
ID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHNlbGYub2JqID0g
W1tUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MiBhbGxvY10gaW5pdFdpdGhQYXlsb2Fk
OnBheWxvYWRbQCJvYmoiXV07CisKKyAgICByZXR1cm4gc2VsZjsKK30KKy0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilvYmplY3QK
K3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoSlNPTk9iamVjdDpbb2JqZWN0IHRv
SlNPTk9iamVjdF0uZ2V0KCldKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHJldHVybiBz
ZWxmOworfQorCistICh2b2lkKXNldE9iajooVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVj
dDIgKilvYmoKK3sKKyAgICBbc3VwZXIgc2V0T2JqZWN0Om9iaiBmb3JLZXk6QCJvYmoiXTsKK30K
KworLSAoVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDIgKilvYmoKK3sKKyAgICBSV0lQ
cm90b2NvbEpTT05PYmplY3QgKm9iamVjdCA9IFtzdXBlciBvYmplY3RGb3JLZXk6QCJvYmoiXTsK
KyAgICBpZiAoIW9iamVjdCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICByZXR1cm4gW1tUZXN0
UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MiBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0Oltb
c3VwZXIgb2JqZWN0Rm9yS2V5OkAib2JqIl0gdG9KU09OT2JqZWN0XS5nZXQoKV07Cit9CisKK0Bl
bmQKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QyCisK
Ky0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5T
U3RyaW5nICosIGlkPiAqKXBheWxvYWQKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRd
KSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHNlbGYub2JqID0gW1tUZXN0UHJvdG9jb2xU
ZXN0UmVjdXJzaXZlT2JqZWN0MSBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRbQCJvYmoi
XV07CisKKyAgICByZXR1cm4gc2VsZjsKK30KKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3Rv
Y29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilvYmplY3QKK3sKKyAgICBpZiAoIShz
ZWxmID0gW3N1cGVyIGluaXRXaXRoSlNPTk9iamVjdDpbb2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0
KCldKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHJldHVybiBzZWxmOworfQorCistICh2
b2lkKXNldE9iajooVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgKilvYmoKK3sKKyAg
ICBbc3VwZXIgc2V0T2JqZWN0Om9iaiBmb3JLZXk6QCJvYmoiXTsKK30KKworLSAoVGVzdFByb3Rv
Y29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgKilvYmoKK3sKKyAgICBSV0lQcm90b2NvbEpTT05PYmpl
Y3QgKm9iamVjdCA9IFtzdXBlciBvYmplY3RGb3JLZXk6QCJvYmoiXTsKKyAgICBpZiAoIW9iamVj
dCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICByZXR1cm4gW1tUZXN0UHJvdG9jb2xUZXN0UmVj
dXJzaXZlT2JqZWN0MSBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0Oltbc3VwZXIgb2JqZWN0Rm9y
S2V5OkAib2JqIl0gdG9KU09OT2JqZWN0XS5nZXQoKV07Cit9CisKK0BlbmQKKworCisjIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS13aXRoLW9wZW4tcGFy
YW1ldGVycy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5iYWNiNjU2NWE4MgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC90eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0CkBAIC0w
LDAgKzEsMTEyOSBAQAorIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5q
cworLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtd2l0aC1vcGVuLXBhcmFt
ZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorIyMj
IEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKKworIyMjIEJlZ2luIEZpbGU6
IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCisjaW5jbHVkZSAiVGVzdFByb3Rv
Y29sVHlwZXMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlci5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91
dGVyLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBBbHRlcm5hdGVCYWNrZW5k
RGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQ
dHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVy
ID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQorICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5k
RGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0K
K3ByaXZhdGU6CisgICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRj
aGVyOworfTsKKworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyMjIyBFbmQgRmlsZTogVGVz
dEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFj
a2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBl
LXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmpl
Y3RzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCisKKworfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisj
IyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL0pTT05W
YWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKKyNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCisjZW5k
aWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKK25hbWVzcGFj
ZSBJbnNwZWN0b3IgeworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQg
RmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RG
cm9udGVuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0
eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xP
YmplY3RzLmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEZyb250ZW5k
Um91dGVyOworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEZy
b250ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0
Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRoLW9w
ZW4tcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRj
aGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0
ZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0
b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0RnJv
bnRlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVj
dHMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtd2l0aC1vcGVuLXBh
cmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3Rv
Y29sVHlwZXMuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgSW5z
cGVjdG9yIHsKKworCisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKworCisvLyBGb3J3YXJkIGRl
Y2xhcmF0aW9ucy4KK25hbWVzcGFjZSBUZXN0IHsKK2NsYXNzIE5vT3BlblBhcmFtZXRlcnM7Citj
bGFzcyBPcGVuUGFyYW1ldGVyczsKK30gLy8gVGVzdAorLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFy
YXRpb25zLgorCisKKworCituYW1lc3BhY2UgVGVzdCB7CitjbGFzcyBOb09wZW5QYXJhbWV0ZXJz
IDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgeworcHVibGljOgorICAgIGVudW0geworICAgICAg
ICBOb0ZpZWxkc1NldCA9IDAsCisgICAgICAgIE9uZVNldCA9IDEgPDwgMCwKKyAgICAgICAgVHdv
U2V0ID0gMSA8PCAxLAorICAgICAgICBBbGxGaWVsZHNTZXQgPSAoT25lU2V0IHwgVHdvU2V0KQor
ICAgIH07CisKKyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CisgICAgY2xhc3MgQnVpbGRlciB7Cisg
ICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7CisKKyAg
ICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRl
KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxk
ZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcihS
ZWY8LypOb09wZW5QYXJhbWV0ZXJzKi9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQorICAgICAgICAg
ICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9u
X2luaXRfc3RhdGUpOworICAgICAgICB9CisgICAgICAgIGZyaWVuZCBjbGFzcyBOb09wZW5QYXJh
bWV0ZXJzOworICAgIHB1YmxpYzoKKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgT25lU2V0PiYg
c2V0T25lKGRvdWJsZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIE9uZVNldCksIHByb3BlcnR5X29uZV9hbHJlYWR5X3NldCk7CisgICAgICAg
ICAgICBtX3Jlc3VsdC0+c2V0RG91YmxlKCJvbmUiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIHJl
dHVybiBjYXN0U3RhdGU8T25lU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxT
VEFURSB8IFR3b1NldD4mIHNldFR3byhkb3VibGUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUd29TZXQpLCBwcm9wZXJ0eV90d29fYWxyZWFk
eV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldERvdWJsZSgidHdvIl9zLCB2YWx1ZSk7
CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFR3b1NldD4oKTsKKyAgICAgICAgfQorCisg
ICAgICAgIFJlZjxOb09wZW5QYXJhbWV0ZXJzPiByZWxlYXNlKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90
X3JlYWR5KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihOb09wZW5QYXJhbWV0
ZXJzKSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0KSwgY2Fubm90X2Nhc3QpOworCisgICAgICAgICAg
ICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uUmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwo
KTsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxS
ZWY8Tm9PcGVuUGFyYW1ldGVycz4qPigmanNvblJlc3VsdCkpOworICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvKgorICAgICAqIFN5bnRoZXRpYyBj
b25zdHJ1Y3RvcjoKKyAgICAgKiBSZWY8Tm9PcGVuUGFyYW1ldGVycz4gcmVzdWx0ID0gTm9PcGVu
UGFyYW1ldGVyczo6Y3JlYXRlKCkKKyAgICAgKiAgICAgLnNldE9uZSguLi4pCisgICAgICogICAg
IC5zZXRUd28oLi4uKQorICAgICAqICAgICAucmVsZWFzZSgpOworICAgICAqLworICAgIHN0YXRp
YyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1
aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOworICAgIH0KK307CisK
K2NsYXNzIE9wZW5QYXJhbWV0ZXJzIDogcHVibGljIEpTT046Ok9iamVjdCB7CitwdWJsaWM6Cisg
ICAgZW51bSB7CisgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKKyAgICAgICAgQWxwaGFTZXQgPSAx
IDw8IDAsCisgICAgICAgIEJldGFTZXQgPSAxIDw8IDEsCisgICAgICAgIEFsbEZpZWxkc1NldCA9
IChBbHBoYVNldCB8IEJldGFTZXQpCisgICAgfTsKKworICAgIHRlbXBsYXRlPGludCBTVEFURT4K
KyAgICBjbGFzcyBCdWlsZGVyIHsKKyAgICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8SlNPTjo6
T2JqZWN0PiBtX3Jlc3VsdDsKKworICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxT
VEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
KnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CisgICAgICAg
IH0KKworICAgICAgICBCdWlsZGVyKFJlZjwvKk9wZW5QYXJhbWV0ZXJzKi9KU09OOjpPYmplY3Q+
JiYgb2JqZWN0KQorICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBi
dWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAgICAgICB9CisgICAgICAgIGZy
aWVuZCBjbGFzcyBPcGVuUGFyYW1ldGVyczsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgQnVpbGRl
cjxTVEFURSB8IEFscGhhU2V0PiYgc2V0QWxwaGEoZG91YmxlIHZhbHVlKQorICAgICAgICB7Cisg
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQWxwaGFTZXQpLCBwcm9wZXJ0eV9h
bHBoYV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0RG91YmxlKCJhbHBo
YSJfcywgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxBbHBoYVNldD4oKTsK
KyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBCZXRhU2V0PiYgc2V0QmV0YShk
b3VibGUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBCZXRhU2V0KSwgcHJvcGVydHlfYmV0YV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0RG91YmxlKCJiZXRhIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPEJldGFTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBSZWY8T3BlblBhcmFt
ZXRlcnM+IHJlbGVhc2UoKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChT
VEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOworICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoc2l6ZW9mKE9wZW5QYXJhbWV0ZXJzKSA9PSBzaXplb2YoSlNPTjo6T2Jq
ZWN0KSwgY2Fubm90X2Nhc3QpOworCisgICAgICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29u
UmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKKyAgICAgICAgICAgIGF1dG8gcmVz
dWx0ID0gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8T3BlblBhcmFtZXRlcnM+Kj4oJmpz
b25SZXN1bHQpKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICB9
OworCisgICAgLyoKKyAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CisgICAgICogUmVmPE9w
ZW5QYXJhbWV0ZXJzPiByZXN1bHQgPSBPcGVuUGFyYW1ldGVyczo6Y3JlYXRlKCkKKyAgICAgKiAg
ICAgLnNldEFscGhhKC4uLikKKyAgICAgKiAgICAgLnNldEJldGEoLi4uKQorICAgICAqICAgICAu
cmVsZWFzZSgpOworICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVh
dGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9i
amVjdDo6Y3JlYXRlKCkpOworICAgIH0KKworICAgIC8vIFByb3BlcnR5IG5hbWVzIGZvciB0eXBl
IGdlbmVyYXRlZCBhcyBvcGVuLgorICAgIE5vbmUgc3RhdGljIGNvbnN0IGNoYXIqIEFscGhhOwor
fTsKKworfSAvLyBUZXN0CisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisK
KyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorCisjaW5jbHVkZSA8d3RmL09wdGlv
bmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVj
dG9yIHsKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworY29uc3QgY2hhciogSW5zcGVjdG9yOjpQ
cm90b2NvbDo6VGVzdDo6T3BlblBhcmFtZXRlcnM6OkFscGhhID0gImFscGhhIjsKKworfSAvLyBu
YW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+
CisKKworCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisj
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNv
bmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNp
bmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisKK25hbWVzcGFj
ZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29s
Lmg+CisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFj
ZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKK0BlbmQKKworCisjIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorCisjIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9u
LmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW1wb3J0ICJUZXN0UHJv
dG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVy
bmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50
YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNw
ZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCit7Cisg
ICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKK30KKworLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250
cm9sbGVyKiljb250cm9sbGVyCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAo
IXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNvbnRyb2xsZXIpOworICAg
IF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9p
ZClkZWFsbG9jCit7CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCitAZW5kCisKKworIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFs
LmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8
d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisjIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlw
ZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCisjaW1w
b3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+CisKKworQGNsYXNzIFRl
c3RQcm90b2NvbFRlc3ROb09wZW5QYXJhbWV0ZXJzOworQGNsYXNzIFRlc3RQcm90b2NvbFRlc3RP
cGVuUGFyYW1ldGVyczsKKworCisKKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1
bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbFRlc3ROb09wZW5QYXJhbWV0ZXJzIDogUldJ
UHJvdG9jb2xKU09OT2JqZWN0CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0Rp
Y3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKKy0gKGluc3RhbmNldHlwZSlpbml0
V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0Owor
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoT25lOihkb3VibGUpb25lIHR3bzooZG91YmxlKXR3bzsK
Ky8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGRvdWJsZSBvbmU7
CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBkb3VibGUgdHdv
OworQGVuZAorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRl
cmZhY2UgVGVzdFByb3RvY29sVGVzdE9wZW5QYXJhbWV0ZXJzIDogUldJUHJvdG9jb2xKU09OT2Jq
ZWN0CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJp
bmcgKiwgaWQ+ICopcGF5bG9hZDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2Jq
ZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OworLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoQWxwaGE6KGRvdWJsZSlhbHBoYSBiZXRhOihkb3VibGUpYmV0YTsKKy8qIHJlcXVp
cmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGRvdWJsZSBhbHBoYTsKKy8qIHJl
cXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGRvdWJsZSBiZXRhOworQGVu
ZAorCisKKworCisKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21w
YXRpYmlsaXR5T2JqZWN0cy5oPgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCisKKyMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5o
IgorI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKKyNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8
d3RmL0pTT05WYWx1ZXMuaD4KKworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRl
cm5hbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRl
cnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1w
b3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFy
cmF5Q29udmVyc2lvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3RlbXBsYXRlPHR5
cGVuYW1lIE9iakNFbnVtVHlwZT4KK09wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29s
U3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1w
b3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJ
UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9y
OworCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoVGVzdERvbWFpbikK
KworKyAodm9pZClfcGFyc2VOb09wZW5QYXJhbWV0ZXJzOihUZXN0UHJvdG9jb2xUZXN0Tm9PcGVu
UGFyYW1ldGVycyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQp
X3BhcnNlT3BlblBhcmFtZXRlcnM6KFRlc3RQcm90b2NvbFRlc3RPcGVuUGFyYW1ldGVycyAqKilv
dXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKworQGVuZAorCitAaW1wbGVtZW50YXRp
b24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChUZXN0RG9tYWluKQorCisrICh2b2lkKV9w
YXJzZU5vT3BlblBhcmFtZXRlcnM6KFRlc3RQcm90b2NvbFRlc3ROb09wZW5QYXJhbWV0ZXJzICoq
KW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7CisgICAgKm91dFZh
bHVlID0gW1tUZXN0UHJvdG9jb2xUZXN0Tm9PcGVuUGFyYW1ldGVycyBhbGxvY10gaW5pdFdpdGhQ
YXlsb2FkOnBheWxvYWRdOworfQorCisrICh2b2lkKV9wYXJzZU9wZW5QYXJhbWV0ZXJzOihUZXN0
UHJvdG9jb2xUZXN0T3BlblBhcmFtZXRlcnMgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBh
eWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0Rp
Y3Rpb25hcnkgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbFRlc3RPcGVu
UGFyYW1ldGVycyBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOworfQorCitAZW5kCisK
KworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFs
LmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8
V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKyNpbXBvcnQgPHd0
Zi9Bc3NlcnRpb25zLmg+CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1l
c3BhY2UgSW5zcGVjdG9yOworCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUZXN0Tm9P
cGVuUGFyYW1ldGVycworCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxs
IE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCit7CisgICAgaWYgKCEoc2Vs
ZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBUSFJPV19FWENF
UFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJvbmUiXSwgQCJvbmUiKTsKKyAg
ICBzZWxmLm9uZSA9IFtwYXlsb2FkW0Aib25lIl0gZG91YmxlVmFsdWVdOworCisgICAgVEhST1df
RVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AidHdvIl0sIEAidHdvIik7
CisgICAgc2VsZi50d28gPSBbcGF5bG9hZFtAInR3byJdIGRvdWJsZVZhbHVlXTsKKworICAgIHJl
dHVybiBzZWxmOworfQorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJX
SVByb3RvY29sSlNPTk9iamVjdCAqKW9iamVjdAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIg
aW5pdFdpdGhKU09OT2JqZWN0OltvYmplY3QgdG9KU09OT2JqZWN0XS5nZXQoKV0pKQorICAgICAg
ICByZXR1cm4gbmlsOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKGluc3RhbmNldHlwZSlp
bml0V2l0aE9uZTooZG91YmxlKW9uZSB0d286KGRvdWJsZSl0d28KK3sKKyAgICBpZiAoIShzZWxm
ID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHNlbGYub25lID0g
b25lOworICAgIHNlbGYudHdvID0gdHdvOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZv
aWQpc2V0T25lOihkb3VibGUpb25lCit7CisgICAgW3N1cGVyIHNldERvdWJsZTpvbmUgZm9yS2V5
OkAib25lIl07Cit9CisKKy0gKGRvdWJsZSlvbmUKK3sKKyAgICByZXR1cm4gW3N1cGVyIGRvdWJs
ZUZvcktleTpAIm9uZSJdOworfQorCistICh2b2lkKXNldFR3bzooZG91YmxlKXR3bworeworICAg
IFtzdXBlciBzZXREb3VibGU6dHdvIGZvcktleTpAInR3byJdOworfQorCistIChkb3VibGUpdHdv
Cit7CisgICAgcmV0dXJuIFtzdXBlciBkb3VibGVGb3JLZXk6QCJ0d28iXTsKK30KKworQGVuZAor
CitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVGVzdE9wZW5QYXJhbWV0ZXJzCisKKy0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5n
ICosIGlkPiAqKXBheWxvYWQKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAg
ICAgICAgcmV0dXJuIG5pbDsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJP
UEVSVFkocGF5bG9hZFtAImFscGhhIl0sIEAiYWxwaGEiKTsKKyAgICBzZWxmLmFscGhhID0gW3Bh
eWxvYWRbQCJhbHBoYSJdIGRvdWJsZVZhbHVlXTsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
UkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImJldGEiXSwgQCJiZXRhIik7CisgICAgc2VsZi5i
ZXRhID0gW3BheWxvYWRbQCJiZXRhIl0gZG91YmxlVmFsdWVdOworCisgICAgcmV0dXJuIHNlbGY7
Cit9CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xK
U09OT2JqZWN0ICopb2JqZWN0Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEpT
T05PYmplY3Q6W29iamVjdCB0b0pTT05PYmplY3RdLmdldCgpXSkpCisgICAgICAgIHJldHVybiBu
aWw7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQWxw
aGE6KGRvdWJsZSlhbHBoYSBiZXRhOihkb3VibGUpYmV0YQoreworICAgIGlmICghKHNlbGYgPSBb
c3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgc2VsZi5hbHBoYSA9IGFs
cGhhOworICAgIHNlbGYuYmV0YSA9IGJldGE7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAo
dm9pZClzZXRBbHBoYTooZG91YmxlKWFscGhhCit7CisgICAgW3N1cGVyIHNldERvdWJsZTphbHBo
YSBmb3JLZXk6QCJhbHBoYSJdOworfQorCistIChkb3VibGUpYWxwaGEKK3sKKyAgICByZXR1cm4g
W3N1cGVyIGRvdWJsZUZvcktleTpAImFscGhhIl07Cit9CisKKy0gKHZvaWQpc2V0QmV0YTooZG91
YmxlKWJldGEKK3sKKyAgICBbc3VwZXIgc2V0RG91YmxlOmJldGEgZm9yS2V5OkAiYmV0YSJdOwor
fQorCistIChkb3VibGUpYmV0YQoreworICAgIHJldHVybiBbc3VwZXIgZG91YmxlRm9yS2V5OkAi
YmV0YSJdOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5t
bQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V4cGVjdGVkL3ZlcnNpb24uanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdmVyc2lvbi5qc29uLXJlc3VsdApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNjVmNGUyZTY2NTgKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvdmVyc2lvbi5qc29uLXJlc3VsdApAQCAtMCwwICsxLDg0NSBAQAorIyMjIEJlZ2lu
IEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcworLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHZlcnNpb24uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisvLyBWZXJzaW9uRG9tYWluCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVy
RG9tYWluKCJWZXJzaW9uRG9tYWluIiwgbnVsbCk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVy
VmVyc2lvbigiVmVyc2lvbkRvbWFpbiIsIDQyKTsKK0luc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVE
b21haW4oIlZlcnNpb25Eb21haW4iLCBudWxsKTsKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFj
a2VuZENvbW1hbmRzLmpzCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERp
c3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBv
bmNlCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JGcm9udGVuZFJvdXRlci5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3Mg
QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHZvaWQgc2V0QmFja2Vu
ZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9i
YWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KKyAgICBCYWNrZW5kRGlz
cGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNw
YXRjaGVyLmdldCgpOyB9Citwcml2YXRlOgorICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4g
bV9iYWNrZW5kRGlzcGF0Y2hlcjsKK307CisKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisj
IyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVn
aW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gdmVyc2lvbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0
cy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0
b3IgeworCit0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKworCisKK30gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lvbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0QmFj
a2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JG
cm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8
d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCisj
aWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjaW5jbHVkZSAiVGVz
dEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgorI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisK
K30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlz
cGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5o
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lvbi5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Ig
eworCitjbGFzcyBGcm9udGVuZFJvdXRlcjsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisj
IyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6
IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIHZlcnNpb24uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0
Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91
dGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVj
dG9yIHsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEZy
b250ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmpl
Y3RzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+CisjaW5j
bHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCitu
YW1lc3BhY2UgUHJvdG9jb2wgeworCisvLyBWZXJzaW9ucy4KK25hbWVzcGFjZSBWZXJzaW9uRG9t
YWluIHsKK3N0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgVkVSU0lPTiA9IDQyOworfSAvLyBWZXJz
aW9uRG9tYWluCisvLyBFbmQgb2YgdmVyc2lvbnMuCisKKworCisKKworCisKKworfSAvLyBuYW1l
c3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbE9iamVjdHMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2Jq
ZWN0cy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKworI2luY2x1ZGUgPHd0
Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNl
IEluc3BlY3RvciB7CisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKworCit9IC8vIG5hbWVzcGFj
ZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFj
a2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJz
aW9uLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVy
cy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworCisKK25hbWVzcGFjZSBJbnNwZWN0
b3IgeworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSB2ZXJzaW9uLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0
Y2hlcnMuaCIKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW5jbHVkZSAi
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMu
aD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgor
CisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorCisjIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lvbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4K
KworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRl
c3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAorQGVuZAorCisKKyMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
dmVyc2lvbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
KyNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKKworI2ltcG9ydCAiVGVzdFBy
b3RvY29sSW50ZXJuYWwuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVy
cy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQu
aD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxl
ci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERp
c3BhdGNoZXJzLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0
aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3Rv
ckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhD
b250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sK
KyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJu
IG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9s
bGVyOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbc3Vw
ZXIgZGVhbGxvY107Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENv
bmZpZ3VyYXRpb24ubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0
Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVz
dFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zLmgiCisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5z
cGVjdG9yOworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5t
bQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKKyNpbXBv
cnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KKworCisKKworCisKKwor
CisKKworCisKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRp
YmlsaXR5T2JqZWN0cy5oPgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gdmVyc2lvbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3Rv
Y29sSlNPTk9iamVjdFByaXZhdGUuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRh
YmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwor
CisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHZlcnNpb24uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgPFdlYkluc3Bl
Y3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KK09wdGlvbmFsPE9iakNFbnVt
VHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOworCit9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1t
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lvbi5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90
b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisK
KworCisKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQor
CisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2lt
cG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0
b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorI2ltcG9ydCA8d3RmL0Fzc2VydGlv
bnMuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNw
ZWN0b3I7CisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24t
Y29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tY29t
bWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kNmRmOWU0YmQ5YwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9m
YWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUu
anNvbgpAQCAtMCwwICsxLDkgQEAKK1sKK3sKKyAgICAiZG9tYWluIjogIkRvbWFpbiIsCisgICAg
ImRlYnVnZ2FibGVUeXBlcyI6IFsiamF2YXNjcmlwdCJdLAorICAgICJ0YXJnZXRUeXBlcyI6IFsi
d29ya2VyIl0sCisgICAgImNvbW1hbmRzIjogW3sibmFtZSI6ICJDb21tYW5kIn1dLAorICAgICJl
dmVudHMiOiBbeyJuYW1lIjogIkV2ZW50In1dCit9CitdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1jb21tYW5kLXRhcmdl
dFR5cGVzLXR5cGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlwZXMtdHlwZS5qc29uCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42NDA1OWY4NGJjZgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9u
LWNvbW1hbmQtdGFyZ2V0VHlwZXMtdHlwZS5qc29uCkBAIC0wLDAgKzEsOSBAQAoreworICAgICJk
b21haW4iOiAiRG9tYWluIiwKKyAgICAiY29tbWFuZHMiOiBbCisgICAgICAgIHsKKyAgICAgICAg
ICAgICJuYW1lIjogIlBhZ2VPbmx5IiwKKyAgICAgICAgICAgICJ0YXJnZXRUeXBlcyI6ICJwYWdl
ZSIKKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlwZXMtdmFs
dWUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9m
YWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlwZXMtdmFsdWUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMC4uNTAyMDQ0NzJlYzgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1jb21tYW5k
LXRhcmdldFR5cGVzLXZhbHVlLmpzb24KQEAgLTAsMCArMSw5IEBACit7CisgICAgImRvbWFpbiI6
ICJEb21haW4iLAorICAgICJjb21tYW5kcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5h
bWUiOiAiUGFnZU9ubHkiLAorICAgICAgICAgICAgInRhcmdldFR5cGVzIjogWyJwYWdlZSJdCisg
ICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kb21haW4tZGVidWdnYWJsZVR5cGVzLXR5cGUu
anNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWls
LW9uLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMtdHlwZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwLi45NzQ4ZjQyMzQ3MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWRvbWFpbi1k
ZWJ1Z2dhYmxlVHlwZXMtdHlwZS5qc29uCkBAIC0wLDAgKzEsOSBAQAoreworICAgICJkb21haW4i
OiAiV2ViT25seSIsCisgICAgImRlYnVnZ2FibGVUeXBlcyI6ICJ3ZWJiIiwKKyAgICAiY29tbWFu
ZHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImVuYWJsZSIKKyAgICAgICAg
fQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9mYWlsLW9uLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMtdmFsdWUuanNvbiBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWRv
bWFpbi1kZWJ1Z2dhYmxlVHlwZXMtdmFsdWUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMC4uYjI1MmRkYmQ4M2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kb21haW4tZGVidWdn
YWJsZVR5cGVzLXZhbHVlLmpzb24KQEAgLTAsMCArMSw5IEBACit7CisgICAgImRvbWFpbiI6ICJX
ZWJPbmx5IiwKKyAgICAiZGVidWdnYWJsZVR5cGVzIjogWyJ3ZWJiIl0sCisgICAgImNvbW1hbmRz
IjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJlbmFibGUiCisgICAgICAgIH0K
KyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVi
dWdnYWJsZVR5cGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9mYWlsLW9uLWRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dh
YmxlVHlwZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi43YWEw
MjgwNDY1NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFp
bi1kZWJ1Z2dhYmxlVHlwZS5qc29uCkBAIC0wLDAgKzEsOCBAQAorWworeworICAgICJkb21haW4i
OiAiRG9tYWluIiwKKyAgICAiZGVidWdnYWJsZVR5cGVzIjogWyJqYXZhc2NyaXB0Il0sCisgICAg
ImNvbW1hbmRzIjogW3sibmFtZSI6ICJDb21tYW5kIiwgInRhcmdldFR5cGVzIjogWyJ3b3JrZXIi
XX1dLAorICAgICJldmVudHMiOiBbeyJuYW1lIjogIkV2ZW50In1dCit9CitdCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1k
b21haW4tdGFyZ2V0VHlwZXMtdHlwZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZG9tYWluLXRhcmdldFR5cGVzLXR5cGUuanNvbgpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZDgyMjI2NzQxNDYKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZXMtdHlwZS5qc29uCkBAIC0wLDAgKzEsOSBAQAor
eworICAgICJkb21haW4iOiAiUGFnZU9ubHkiLAorICAgICJ0YXJnZXRUeXBlcyI6ICJwYWdlZSIs
CisgICAgImNvbW1hbmRzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJlbmFi
bGUiCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZXMtdmFs
dWUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9m
YWlsLW9uLWRvbWFpbi10YXJnZXRUeXBlcy12YWx1ZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwLi5lN2IxMGQ3ZjE1NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWRvbWFpbi10
YXJnZXRUeXBlcy12YWx1ZS5qc29uCkBAIC0wLDAgKzEsOSBAQAoreworICAgICJkb21haW4iOiAi
UGFnZU9ubHkiLAorICAgICJ0YXJnZXRUeXBlcyI6IFsicGFnZWUiXSwKKyAgICAiY29tbWFuZHMi
OiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImVuYWJsZSIKKyAgICAgICAgfQor
ICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9mYWlsLW9uLWR1cGxpY2F0ZS1jb21tYW5kLWNhbGwtcGFyYW1ldGVyLW5hbWVz
Lmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFp
bC1vbi1kdXBsaWNhdGUtY29tbWFuZC1jYWxsLXBhcmFtZXRlci1uYW1lcy5qc29uCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5iYWI3NmNhNjI3OQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWls
LW9uLWR1cGxpY2F0ZS1jb21tYW5kLWNhbGwtcGFyYW1ldGVyLW5hbWVzLmpzb24KQEAgLTAsMCAr
MSwxNiBAQAoreworICAgICJkb21haW4iOiAiT3ZlcmxheSIsCisgICAgImNvbW1hbmRzIjogWwor
ICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJwcm9jZXNzUG9pbnRzIiwKKyAgICAgICAg
ICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicG9pbnQiLCAi
dHlwZSI6ICJudW1iZXIiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwb2ludCIsICJ0
eXBlIjogIm51bWJlciIgfQorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJyZXR1cm5zIjog
WworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicmVzdWx0MSIsICJ0eXBlIjogInN0cmluZyIg
fSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInJlc3VsdDIiLCAidHlwZSI6ICJzdHJpbmci
IH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWR1cGxpY2F0
ZS1jb21tYW5kLXJldHVybi1wYXJhbWV0ZXItbmFtZXMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWR1cGxpY2F0ZS1jb21tYW5kLXJl
dHVybi1wYXJhbWV0ZXItbmFtZXMuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMC4uYzhiYjE1YzA0YjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1y
ZXR1cm4tcGFyYW1ldGVyLW5hbWVzLmpzb24KQEAgLTAsMCArMSwxNiBAQAoreworICAgICJkb21h
aW4iOiAiT3ZlcmxheSIsCisgICAgImNvbW1hbmRzIjogWworICAgICAgICB7CisgICAgICAgICAg
ICAibmFtZSI6ICJwcm9jZXNzUG9pbnRzIiwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwor
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicG9pbnQxIiwgInR5cGUiOiAibnVtYmVyIiB9LAor
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicG9pbnQyIiwgInR5cGUiOiAibnVtYmVyIiB9Cisg
ICAgICAgICAgICBdLAorICAgICAgICAgICAgInJldHVybnMiOiBbCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJyZXN1bHQiLCAidHlwZSI6ICJzdHJpbmciIH0sCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJyZXN1bHQiLCAidHlwZSI6ICJzdHJpbmciIH0KKyAgICAgICAgICAgIF0KKyAg
ICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWR1cGxpY2F0ZS1ldmVudC1wYXJhbWV0ZXItbmFt
ZXMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9m
YWlsLW9uLWR1cGxpY2F0ZS1ldmVudC1wYXJhbWV0ZXItbmFtZXMuanNvbgpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZDNkM2IzY2M2NDIKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1k
dXBsaWNhdGUtZXZlbnQtcGFyYW1ldGVyLW5hbWVzLmpzb24KQEAgLTAsMCArMSwxMiBAQAorewor
ICAgICJkb21haW4iOiAiT3ZlcmxheSIsCisgICAgImV2ZW50cyI6IFsKKyAgICAgICAgeworICAg
ICAgICAgICAgIm5hbWUiOiAicHJvY2Vzc2VkUG9pbnRzIiwKKyAgICAgICAgICAgICJwYXJhbWV0
ZXJzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicG9pbnQiLCAidHlwZSI6ICJudW1i
ZXIiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwb2ludCIsICJ0eXBlIjogIm51bWJl
ciIgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZHVwbGlj
YXRlLXR5cGUtZGVjbGFyYXRpb25zLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1kZWNsYXJhdGlvbnMuanNv
bgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNzAyZmM2YTMyNzAKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1kZWNsYXJhdGlvbnMuanNvbgpAQCAtMCwwICsx
LDE1IEBACit7CisgICAgImRvbWFpbiI6ICJSdW50aW1lIiwKKyAgICAidHlwZXMiOiBbCisgICAg
ICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJSZW1vdGVPYmplY3RJZCIsCisgICAgICAgICAgICAi
dHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBvYmpl
Y3QgaWRlbnRpZmllci4iCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6
ICJSZW1vdGVPYmplY3RJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAg
ICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4iCisgICAgICAg
IH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1tZW1iZXItbmFtZXMuanNvbiBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWR1
cGxpY2F0ZS10eXBlLW1lbWJlci1uYW1lcy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwLi5hZWJhY2VlOGIyMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWR1cGxpY2F0ZS10eXBl
LW1lbWJlci1uYW1lcy5qc29uCkBAIC0wLDAgKzEsMTUgQEAKK1sKK3sKKyAgICAiZG9tYWluIjog
Ik92ZXJsYXlUeXBlcyIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAi
aWQiOiAiUG9pbnQiLAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAg
ICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAieCIsICJ0eXBlIjog
ImludGVnZXIiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ4IiwgInR5cGUiOiAiaW50
ZWdlciIgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXQorfQorXQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24t
ZW51bS13aXRoLW5vLXZhbHVlcy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZW51bS13aXRoLW5vLXZhbHVlcy5qc29uCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yMzJhN2MzMjQ5YQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWls
LW9uLWVudW0td2l0aC1uby12YWx1ZXMuanNvbgpAQCAtMCwwICsxLDEwIEBACit7CisgICAgImRv
bWFpbiI6ICJEYXRhYmFzZSIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAg
ICAiaWQiOiAiUHJpbWFyeUNvbG9ycyIsCisgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAor
ICAgICAgICAgICAgImVudW0iOiBbXQorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZXZl
bnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbiBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWV2ZW50LXRh
cmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjkxMzJjZTA4ODI4Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24t
ZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgpAQCAt
MCwwICsxLDggQEAKK1sKK3sKKyAgICAiZG9tYWluIjogIkRvbWFpbiIsCisgICAgImRlYnVnZ2Fi
bGVUeXBlcyI6IFsiamF2YXNjcmlwdCJdLAorICAgICJjb21tYW5kcyI6IFt7Im5hbWUiOiAiQ29t
bWFuZCJ9XSwKKyAgICAiZXZlbnRzIjogW3sibmFtZSI6ICJFdmVudCIsICJ0YXJnZXRUeXBlcyI6
IFsid29ya2VyIl19XQorfQorXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlwZXMtdHlwZS5qc29u
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24t
ZXZlbnQtdGFyZ2V0VHlwZXMtdHlwZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwLi5lNTRlZDFmNWM2YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGVz
LXR5cGUuanNvbgpAQCAtMCwwICsxLDkgQEAKK3sKKyAgICAiZG9tYWluIjogIkRvbWFpbiIsCisg
ICAgImV2ZW50cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiUGFnZU9ubHki
LAorICAgICAgICAgICAgInRhcmdldFR5cGVzIjogInBhZ2VlIgorICAgICAgICB9CisgICAgXQor
fQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlwZXMtdmFsdWUuanNvbiBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGVz
LXZhbHVlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjU4ODRi
ZmQ3YTZiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlwZXMtdmFsdWUuanNvbgpAQCAt
MCwwICsxLDkgQEAKK3sKKyAgICAiZG9tYWluIjogIkRvbWFpbiIsCisgICAgImV2ZW50cyI6IFsK
KyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiUGFnZU9ubHkiLAorICAgICAgICAgICAg
InRhcmdldFR5cGVzIjogWyJwYWdlZSJdCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1u
dW1iZXItdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbiBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRp
b25hbC1wYXJhbWV0ZXItZmxhZy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwLi43MzA4ZGI5OTJkNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRpb25h
bC1wYXJhbWV0ZXItZmxhZy5qc29uCkBAIC0wLDAgKzEsMTggQEAKK3sKKyAgICAiZG9tYWluIjog
IkRhdGFiYXNlIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6
ICJEYXRhYmFzZUlkIiwKKyAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAg
ICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIGlkZW50aWZpZXIgb2YgRGF0YWJhc2Ugb2JqZWN0LiIK
KyAgICAgICAgfQorICAgIF0sCisgICAgImV2ZW50cyI6IFsKKyAgICAgICAgeworICAgICAgICAg
ICAgIm5hbWUiOiAiZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyIsCisgICAgICAgICAgICAi
cGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwg
InR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogMCB9CisgICAgICAgICAgICBdCisgICAgICAg
IH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIu
anNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWls
LW9uLW51bWJlci10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29uCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hZmVhNTU1ZWM0ZgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLW51
bWJlci10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29uCkBAIC0wLDAgKzEsMTYgQEAKK1sK
K3sKKyAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsK
KyAgICAgICAgICAgICJpZCI6ICJFcnJvciIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3Qi
LAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkRhdGFiYXNlIGVycm9yLiIsCisgICAgICAg
ICAgICAicHJvcGVydGllcyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm1lc3NhZ2Ui
LCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgbWVzc2FnZS4iIH0sCisg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2RlIiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNj
cmlwdGlvbiI6ICJFcnJvciBjb2RlLiIsICJvcHRpb25hbCI6IDAgfQorICAgICAgICAgICAgXQor
ICAgICAgICB9CisgICAgXQorfQorXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXBh
cmFtZXRlci1mbGFnLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZmFpbC1vbi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNv
bgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNDAxMmM3OWI2YjMKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZmFpbC1vbi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbgpA
QCAtMCwwICsxLDE4IEBACit7CisgICAgImRvbWFpbiI6ICJEYXRhYmFzZSIsCisgICAgInR5cGVz
IjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiRGF0YWJhc2VJZCIsCisgICAgICAg
ICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1
ZSBpZGVudGlmaWVyIG9mIERhdGFiYXNlIG9iamVjdC4iCisgICAgICAgIH0KKyAgICBdLAorICAg
ICJldmVudHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImRpZEV4ZWN1dGVP
cHRpb25hbFBhcmFtZXRlcnMiLAorICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRp
b25hbCI6ICJ0cnVlIiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFp
bC1vbi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNvbiBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXN0cmluZy10eXBlZC1v
cHRpb25hbC10eXBlLW1lbWJlci5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwLi5jYTNlZjI4YThmOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXN0cmluZy10eXBlZC1vcHRpb25h
bC10eXBlLW1lbWJlci5qc29uCkBAIC0wLDAgKzEsMTYgQEAKK1sKK3sKKyAgICAiZG9tYWluIjog
IkRhdGFiYXNlIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6
ICJFcnJvciIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgImRl
c2NyaXB0aW9uIjogIkRhdGFiYXNlIGVycm9yLiIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6
IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm1lc3NhZ2UiLCAidHlwZSI6ICJzdHJpbmci
LCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgbWVzc2FnZS4iIH0sCisgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJjb2RlIiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBj
b2RlLiIsICJvcHRpb25hbCI6ICJmYWxzZSIgfQorICAgICAgICAgICAgXQorICAgICAgICB9Cisg
ICAgXQorfQorXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2ZhaWwtb24tdHlwZS1kZWNsYXJhdGlvbi11c2luZy10eXBlLXJlZmVyZW5j
ZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2Zh
aWwtb24tdHlwZS1kZWNsYXJhdGlvbi11c2luZy10eXBlLXJlZmVyZW5jZS5qc29uCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xOWI3NTkwY2NjNgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWls
LW9uLXR5cGUtZGVjbGFyYXRpb24tdXNpbmctdHlwZS1yZWZlcmVuY2UuanNvbgpAQCAtMCwwICsx
LDEzIEBACitbCit7CisgICAgImRvbWFpbiI6ICJSdW50aW1lIiwKKyAgICAidHlwZXMiOiBbCisg
ICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJSZW1vdGVPYmplY3RJZCIsCisgICAgICAgICAg
ICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgIiRyZWYiOiAiU29tZVR5cGUiLAorICAg
ICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4iCisgICAg
ICAgIH0KKyAgICBdCit9CitdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi10eXBlLXJlZmVyZW5jZS1hcy1wcmltaXRpdmUt
dHlwZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2ZhaWwtb24tdHlwZS1yZWZlcmVuY2UtYXMtcHJpbWl0aXZlLXR5cGUuanNvbgpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOGM4M2JiZmNlNDEKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1v
bi10eXBlLXJlZmVyZW5jZS1hcy1wcmltaXRpdmUtdHlwZS5qc29uCkBAIC0wLDAgKzEsMTggQEAK
K3sKKyAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsK
KyAgICAgICAgICAgICJpZCI6ICJEYXRhYmFzZUlkIiwKKyAgICAgICAgICAgICJ0eXBlIjogInN0
cmluZyIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIGlkZW50aWZpZXIgb2Yg
RGF0YWJhc2Ugb2JqZWN0LiIKKyAgICAgICAgfQorICAgIF0sCisgICAgImV2ZW50cyI6IFsKKyAg
ICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVy
cyIsCisgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiRGF0YWJhc2VJZCIgfQorICAgICAgICAgICAgXQor
ICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdHlwZS13aXRoLWxvd2VyY2FzZS1uYW1lLmpz
b24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1v
bi10eXBlLXdpdGgtbG93ZXJjYXNlLW5hbWUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMC4uNTMxOTAxZTRhOWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi10eXBlLXdpdGgtbG93
ZXJjYXNlLW5hbWUuanNvbgpAQCAtMCwwICsxLDEwIEBACit7CisgICAgImRvbWFpbiI6ICJEYXRh
YmFzZSIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiZGF0
YWJhc2VJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJpbnRlZ2VyIiwKKyAgICAgICAgICAgICJk
ZXNjcmlwdGlvbiI6ICJVbmlxdWUgaWRlbnRpZmllciBvZiBEYXRhYmFzZSBvYmplY3QuIgorICAg
ICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBl
LWRlY2xhcmF0aW9uLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtZGVjbGFyYXRp
b24uanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZDY4ODdhMjc0
MTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtZGVjbGFy
YXRpb24uanNvbgpAQCAtMCwwICsxLDEyIEBACitbCit7CisgICAgImRvbWFpbiI6ICJSdW50aW1l
IiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJSZW1vdGVP
YmplY3RJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJkcmFnb24iLAorICAgICAgICAgICAgImRl
c2NyaXB0aW9uIjogIlVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4iCisgICAgICAgIH0KKyAgICBd
Cit9CitdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtbWVtYmVyLmpz
b24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1v
bi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtbWVtYmVyLmpzb24KbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmI4MTdkYjUwNDRkCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24t
dW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLW1lbWJlci5qc29uCkBAIC0wLDAgKzEsMTUg
QEAKK1sKK3sKKyAgICAiZG9tYWluIjogIkZhbnRhc3kiLAorICAgICJ0eXBlcyI6IFsKKyAgICAg
ICAgeworICAgICAgICAgICAgImlkIjogIkRyYWdvbkVnZyIsCisgICAgICAgICAgICAidHlwZSI6
ICJvYmplY3QiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkEgZHJhZ29uIGVnZy4iLAor
ICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJj
b2xvciIsICIkcmVmIjogIkNvbG9yIiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBd
Cit9CitdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24gYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJhdGUtZG9tYWlu
cy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAuLjY3Y2Y4ZTU4MmY2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0
dXJlLWd1YXJkcy5qc29uCkBAIC0wLDAgKzEsMzYgQEAKK1sKK3sKKyAgICAiZG9tYWluIjogIk5l
dHdvcmsxIiwKKyAgICAiZmVhdHVyZUd1YXJkIjogIlBMQVRGT1JNKFdFQl9DT01NQU5EUykiLAor
ICAgICJjb21tYW5kcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAibG9hZFJl
c291cmNlIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBhIHJlc291cmNlIGlu
IHRoZSBjb250ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGluc3BlY3RlZCBwYWdlIHdpdGhvdXQgY3Jv
c3Mgb3JpZ2luIGNoZWNrcy4iCisgICAgICAgIH0KKyAgICBdCit9LAoreworICAgICJkb21haW4i
OiAiTmV0d29yazIiLAorICAgICJmZWF0dXJlR3VhcmQiOiAiUExBVEZPUk0oV0VCX1RZUEVTKSIs
CisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiTmV0d29ya0Vy
cm9yIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAicHJvcGVy
dGllcyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm1lc3NhZ2UiLCAidHlwZSI6ICJz
dHJpbmciLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgbWVzc2FnZS4iIH0sCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJjb2RlIiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJF
cnJvciBjb2RlLiIgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXQorfSwKK3sKKyAg
ICAiZG9tYWluIjogIk5ldHdvcmszIiwKKyAgICAiZmVhdHVyZUd1YXJkIjogIlBMQVRGT1JNKFdF
Ql9FVkVOVFMpIiwKKyAgICAiZXZlbnRzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFt
ZSI6ICJyZXNvdXJjZUxvYWRlZCIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQSByZXNv
dXJjZSB3YXMgbG9hZGVkLiIKKyAgICAgICAgfQorICAgIF0KK30KK10KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2NvbW1h
bmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbiBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2NvbW1hbmQt
dGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggZDI3YWI2NWI5MmEuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2NvbW1hbmQt
dGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgorKysgL2Rldi9u
dWxsCkBAIC0xLDkgKzAsMCBAQAotWwotewotICAgICJkb21haW4iOiAiRG9tYWluIiwKLSAgICAi
ZGVidWdnYWJsZVR5cGVzIjogWyJwYWdlIl0sCi0gICAgInRhcmdldFR5cGVzIjogWyJwYWdlIiwg
IndvcmtlciJdLAotICAgICJjb21tYW5kcyI6IFt7Im5hbWUiOiAiQ29tbWFuZCJ9XSwKLSAgICAi
ZXZlbnRzIjogW3sibmFtZSI6ICJFdmVudCJ9XQotfQotXQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvY29tbWFuZHMtd2l0
aC1hc3luYy1hdHRyaWJ1dGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9nZW5lcmljL2NvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24K
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExMjYyZTg4OWZhLi4wMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJp
Yy9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCisrKyAvZGV2L251bGwKQEAgLTEs
MTA5ICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKLSAgICAidHlwZXMiOiBb
Ci0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJEYXRhYmFzZUlkIiwKLSAgICAgICAgICAg
ICJ0eXBlIjogImludGVnZXIiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBp
ZGVudGlmaWVyIG9mIERhdGFiYXNlIG9iamVjdC4iCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAg
ICAgICAgICAgICJpZCI6ICJQcmltYXJ5Q29sb3JzIiwKLSAgICAgICAgICAgICJ0eXBlIjogInN0
cmluZyIsCi0gICAgICAgICAgICAiZW51bSI6IFsicmVkIiwgImdyZWVuIiwgImJsdWUiXQotICAg
ICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiQ29sb3JMaXN0IiwKLSAgICAg
ICAgICAgICJ0eXBlIjogImFycmF5IiwKLSAgICAgICAgICAgICJpdGVtcyI6IHsgIiRyZWYiOiAi
UHJpbWFyeUNvbG9ycyIgfQotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQi
OiAiRXJyb3IiLAotICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKLSAgICAgICAgICAgICJk
ZXNjcmlwdGlvbiI6ICJEYXRhYmFzZSBlcnJvci4iLAotICAgICAgICAgICAgInByb3BlcnRpZXMi
OiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJtZXNzYWdlIiwgInR5cGUiOiAic3RyaW5n
IiwgImRlc2NyaXB0aW9uIjogIkVycm9yIG1lc3NhZ2UuIiB9LAotICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAiY29kZSIsICJ0eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAiRXJyb3Ig
Y29kZS4iIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfQotICAgIF0sCi0gICAgImNvbW1hbmRz
IjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJleGVjdXRlU1FMU3luY09wdGlv
bmFsUmV0dXJuVmFsdWVzIiwKLSAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwotICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiIH0sCi0g
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJxdWVyeSIsICJ0eXBlIjogInN0cmluZyIgfQotICAg
ICAgICAgICAgXSwKLSAgICAgICAgICAgICJyZXR1cm5zIjogWwotICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJvcHRpb25hbCI6IHRydWUs
ICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCi0gICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIsICJvcHRp
b25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBl
IjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1l
IjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIsICJv
cHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNxbEVycm9yIiwg
IiRyZWYiOiAiRXJyb3IiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlDb2xvcnMiLCAib3B0aW9uYWwi
OiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJhbHRlcm5hdGVDb2xvcnMiLCAi
JHJlZiI6ICJDb2xvckxpc3QiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbImN5YW4i
LCAibWFnZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSwgIm9wdGlvbmFsIjogdHJ1ZSB9Ci0gICAg
ICAgICAgICBdCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImV4
ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzIiwKLSAgICAgICAgICAgICJhc3luYyI6
IHRydWUsCi0gICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKLSAgICAgICAgICAgICAgICB7ICJu
YW1lIjogImRhdGFiYXNlSWQiLCAiJHJlZiI6ICJEYXRhYmFzZUlkIiB9LAotICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAicXVlcnkiLCAidHlwZSI6ICJzdHJpbmciIH0KLSAgICAgICAgICAgIF0s
Ci0gICAgICAgICAgICAicmV0dXJucyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNv
bHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAib3B0aW9uYWwiOiB0cnVlLCAiaXRlbXMiOiB7
ICJ0eXBlIjogInN0cmluZyIgfSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMi
LCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiLCAib3B0aW9uYWwiOiB0cnVl
IH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3Qi
LCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2Fk
IiwgInR5cGUiOiAiYW55IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiLCAib3B0aW9uYWwiOiB0
cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVy
cm9yIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2Ny
ZWVuQ29sb3IiLCAiJHJlZiI6ICJQcmltYXJ5Q29sb3JzIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAot
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwgIiRyZWYiOiAiQ29s
b3JMaXN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
cHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJjeWFuIiwgIm1hZ2VudGEi
LCAieWVsbG93IiwgImJsYWNrIl0sICJvcHRpb25hbCI6IHRydWUgfQotICAgICAgICAgICAgXQot
ICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJleGVjdXRlU1FMU3lu
YyIsCi0gICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1l
IjogImRhdGFiYXNlSWQiLCAiJHJlZiI6ICJEYXRhYmFzZUlkIiB9LAotICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAicXVlcnkiLCAidHlwZSI6ICJzdHJpbmciIH0KLSAgICAgICAgICAgIF0sCi0g
ICAgICAgICAgICAicmV0dXJucyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVt
bk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9
LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciIH0s
Ci0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIi
IH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3Qi
IH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiB9
LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFi
YXNlSWQiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjog
IkVycm9yIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwg
IiRyZWYiOiAiQ29sb3JMaXN0IiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2NyZWVu
Q29sb3IiLCAiJHJlZiI6ICJQcmltYXJ5Q29sb3JzIiB9LAotICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJjeWFuIiwgIm1h
Z2VudGEiLCAieWVsbG93IiwgImJsYWNrIl0gfQotICAgICAgICAgICAgXQotICAgICAgICB9LAot
ICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJleGVjdXRlU1FMQXN5bmMiLAotICAgICAg
ICAgICAgImFzeW5jIjogdHJ1ZSwKLSAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwotICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiIH0s
Ci0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJxdWVyeSIsICJ0eXBlIjogInN0cmluZyIgfQot
ICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJyZXR1cm5zIjogWwotICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgInR5
cGUiOiAic3RyaW5nIiB9IH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0
eXBlIjogInN0cmluZyIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIs
ICJ0eXBlIjogIm51bWJlciIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIs
ICJ0eXBlIjogIm9iamVjdCIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxvYWQi
LCAidHlwZSI6ICJhbnkiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlk
IiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNx
bEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJz
Y3JlZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlDb2xvcnMiIH0sCi0gICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJhbHRlcm5hdGVDb2xvcnMiLCAiJHJlZiI6ICJDb2xvckxpc3QiIH0sCi0gICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgImVu
dW0iOiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSB9Ci0gICAgICAgICAg
ICBdCi0gICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9jb21tYW5kcy13aXRoLW9wdGlvbmFs
LWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1y
ZXR1cm4tcGFyYW1ldGVycy5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNjFk
NTdkODIwZC4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVy
bi1wYXJhbWV0ZXJzLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBACi17Ci0gICAg
ImRvbWFpbiI6ICJEYXRhYmFzZSIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7Ci0gICAgICAg
ICAgICAiaWQiOiAiRGF0YWJhc2VJZCIsCi0gICAgICAgICAgICAidHlwZSI6ICJpbnRlZ2VyIiwK
LSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgaWRlbnRpZmllciBvZiBEYXRhYmFz
ZSBvYmplY3QuIgotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiUHJp
bWFyeUNvbG9ycyIsCi0gICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAotICAgICAgICAgICAg
ImVudW0iOiBbInJlZCIsICJncmVlbiIsICJibHVlIl0KLSAgICAgICAgfSwKLSAgICAgICAgewot
ICAgICAgICAgICAgImlkIjogIkNvbG9yTGlzdCIsCi0gICAgICAgICAgICAidHlwZSI6ICJhcnJh
eSIsCi0gICAgICAgICAgICAiaXRlbXMiOiB7ICIkcmVmIjogIlByaW1hcnlDb2xvcnMiIH0KLSAg
ICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIkVycm9yIiwKLSAgICAgICAg
ICAgICJ0eXBlIjogIm9iamVjdCIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRGF0YWJh
c2UgZXJyb3IuIiwKLSAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwotICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAibWVzc2FnZSIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJF
cnJvciBtZXNzYWdlLiIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvZGUiLCAidHlw
ZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIGNvZGUuIiB9Ci0gICAgICAgICAg
ICBdCi0gICAgICAgIH0KLSAgICBdLAotICAgICJjb21tYW5kcyI6IFsKLSAgICAgICAgewotICAg
ICAgICAgICAgIm5hbWUiOiAiZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyIsCi0gICAgICAg
ICAgICAicGFyYW1ldGVycyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5h
bWVzIiwgInR5cGUiOiAiYXJyYXkiLCAib3B0aW9uYWwiOiB0cnVlLCAiaXRlbXMiOiB7ICJ0eXBl
IjogInN0cmluZyIgfSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAidHlw
ZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0g
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0
aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5
cGUiOiAiYW55IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiLCAib3B0aW9uYWwiOiB0cnVlIH0s
Ci0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVycm9yIiwg
Im9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2NyZWVuQ29s
b3IiLCAiJHJlZiI6ICJQcmltYXJ5Q29sb3JzIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwgIiRyZWYiOiAiQ29sb3JMaXN0
IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJpbnRD
b2xvciIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJjeWFuIiwgIm1hZ2VudGEiLCAieWVs
bG93IiwgImJsYWNrIl0sICJvcHRpb25hbCI6IHRydWUgfQotICAgICAgICAgICAgXSwKLSAgICAg
ICAgICAgICJyZXR1cm5zIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFt
ZXMiLCAidHlwZSI6ICJhcnJheSIsICJvcHRpb25hbCI6IHRydWUsICJpdGVtcyI6IHsgInR5cGUi
OiAic3RyaW5nIiB9IH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBl
IjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1l
IjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRp
b25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlw
ZSI6ICJhbnkiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIsICJvcHRpb25hbCI6IHRydWUgfSwK
LSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiLCAi
b3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5Db2xv
ciIsICIkcmVmIjogIlByaW1hcnlDb2xvcnMiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJhbHRlcm5hdGVDb2xvcnMiLCAiJHJlZiI6ICJDb2xvckxpc3Qi
LCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcmludENv
bG9yIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxs
b3ciLCAiYmxhY2siXSwgIm9wdGlvbmFsIjogdHJ1ZSB9Ci0gICAgICAgICAgICBdCi0gICAgICAg
IH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImV4ZWN1dGVOb09wdGlvbmFsUGFy
YW1ldGVycyIsCi0gICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKLSAgICAgICAgICAgICAgICB7
ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICJ0eXBl
IjogInN0cmluZyIgfSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAidHlw
ZSI6ICJzdHJpbmciIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAi
dHlwZSI6ICJudW1iZXIiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAi
dHlwZSI6ICJvYmplY3QiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2FkIiwg
InR5cGUiOiAiYW55IiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIs
ICIkcmVmIjogIkRhdGFiYXNlSWQiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzcWxF
cnJvciIsICIkcmVmIjogIkVycm9yIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2Ny
ZWVuQ29sb3IiLCAiJHJlZiI6ICJQcmltYXJ5Q29sb3JzIiB9LAotICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwgIiRyZWYiOiAiQ29sb3JMaXN0IiB9LAotICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmluZyIsICJlbnVt
IjogWyJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93IiwgImJsYWNrIl0gfQotICAgICAgICAgICAg
XSwKLSAgICAgICAgICAgICJyZXR1cm5zIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
Y29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5n
IiB9IH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmlu
ZyIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51
bWJlciIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9i
amVjdCIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJh
bnkiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAi
RGF0YWJhc2VJZCIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRy
ZWYiOiAiRXJyb3IiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5Db2xvciIs
ICIkcmVmIjogIlByaW1hcnlDb2xvcnMiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJh
bHRlcm5hdGVDb2xvcnMiLCAiJHJlZiI6ICJDb2xvckxpc3QiIH0sCi0gICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbImN5YW4i
LCAibWFnZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSB9Ci0gICAgICAgICAgICBdCi0gICAgICAg
IH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29u
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMv
ZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggODE3ZjEzNWVlNWEuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2RlZmluaXRpb25zLXdpdGgtbWFj
LXBsYXRmb3JtLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi17Ci0gICAgImRv
bWFpbiI6ICJOZXR3b3JrIiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAg
ICJpZCI6ICJOZXR3b3JrRXJyb3IiLAotICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKLSAg
ICAgICAgICAgICJwbGF0Zm9ybSI6ICJtYWNvcyIsCi0gICAgICAgICAgICAicHJvcGVydGllcyI6
IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm1lc3NhZ2UiLCAidHlwZSI6ICJzdHJpbmci
LCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgbWVzc2FnZS4iIH0sCi0gICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJjb2RlIiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBj
b2RlLiIgfQotICAgICAgICAgICAgXQotICAgICAgICB9Ci0gICAgXSwKLSAgICAiY29tbWFuZHMi
OiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJjZSIsCi0gICAg
ICAgICAgICAicGxhdGZvcm0iOiAibWFjb3MiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjog
IkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVj
dGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKLSAgICAgICAgfQotICAgIF0s
Ci0gICAgImV2ZW50cyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAicmVzb3Vy
Y2VMb2FkZWQiLAotICAgICAgICAgICAgInBsYXRmb3JtIjogIm1hY29zIiwKLSAgICAgICAgICAg
ICJkZXNjcmlwdGlvbiI6ICJBIHJlc291cmNlIHdhcyBsb2FkZWQuIgotICAgICAgICB9Ci0gICAg
XQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZG9tYWluLWRlYnVnZ2Fi
bGVUeXBlcy5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZmViMGM5YTI3ZS4u
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uCisrKyAvZGV2L251bGwK
QEAgLTEsOCArMCwwIEBACi1bCi17Ci0gICAgImRvbWFpbiI6ICJEb21haW4iLAotICAgICJkZWJ1
Z2dhYmxlVHlwZXMiOiBbIndlYi1wYWdlIl0sCi0gICAgImNvbW1hbmRzIjogW3sibmFtZSI6ICJD
b21tYW5kIn1dLAotICAgICJldmVudHMiOiBbeyJuYW1lIjogIkV2ZW50In1dCi19Ci1dCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2Vu
ZXJpYy9kb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNv
biBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2RvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNjJmYjM4YmE3OC4uMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMv
ZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKysr
IC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLVsKLXsKLSAgICAiZG9tYWluIjogIkRvbWFpbiIs
Ci0gICAgImRlYnVnZ2FibGVUeXBlcyI6IFsicGFnZSJdLAotICAgICJjb21tYW5kcyI6IFt7Im5h
bWUiOiAiQ29tbWFuZCIsICJ0YXJnZXRUeXBlcyI6IFsicGFnZSIsICJ3b3JrZXIiXX1dLAotICAg
ICJldmVudHMiOiBbeyJuYW1lIjogIkV2ZW50In1dCi19Ci1dCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9kb21haW4tdGFy
Z2V0VHlwZXMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9nZW5lcmljL2RvbWFpbi10YXJnZXRUeXBlcy5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA2YTZlNDBkNjBhZC4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZG9tYWluLXRhcmdldFR5cGVz
Lmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLVsKLXsKLSAgICAiZG9tYWluIjog
IkRvbWFpbiIsCi0gICAgInRhcmdldFR5cGVzIjogWyJwYWdlIl0sCi0gICAgImNvbW1hbmRzIjog
W3sibmFtZSI6ICJDb21tYW5kIiwgInRhcmdldFR5cGVzIjogWyJwYWdlIl19XSwKLSAgICAiZXZl
bnRzIjogW3sibmFtZSI6ICJFdmVudCIsICJ0YXJnZXRUeXBlcyI6IFsicGFnZSJdfV0KLX0KLV0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9nZW5lcmljL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbiBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2RvbWFpbnMt
d2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggOTRhOGVjYjE3NmQuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNv
bW1hbmQtc2l6ZXMuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLVsKLXsKLSAg
ICAiZG9tYWluIjogIk5ldHdvcmsxIiwKLSAgICAiY29tbWFuZHMiOiBbCi0gICAgICAgIHsKLSAg
ICAgICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJjZTEiLAotICAgICAgICAgICAgImRlc2NyaXB0
aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUg
aW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKLSAgICAgICAgfQot
ICAgIF0KLX0sCi17Ci0gICAgImRvbWFpbiI6ICJOZXR3b3JrMiIsCi0gICAgInR5cGVzIjogWwot
ICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiTG9hZGVySWQiLAotICAgICAgICAgICAgInR5
cGUiOiAic3RyaW5nIiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgbG9hZGVy
IGlkZW50aWZpZXIuIgotICAgICAgICB9Ci0gICAgXQotfSwKLXsKLSAgICAiZG9tYWluIjogIk5l
dHdvcmszIiwKLSAgICAiY29tbWFuZHMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1l
IjogImxvYWRSZXNvdXJjZTEiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEg
cmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ug
d2l0aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKLSAgICAgICAgfSwKLSAgICAgICAgewotICAg
ICAgICAgICAgIm5hbWUiOiAibG9hZFJlc291cmNlMiIsCi0gICAgICAgICAgICAiZGVzY3JpcHRp
b24iOiAiTG9hZHMgYSByZXNvdXJjZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBp
bnNwZWN0ZWQgcGFnZSB3aXRob3V0IGNyb3NzIG9yaWdpbiBjaGVja3MuIgotICAgICAgICB9LAot
ICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJsb2FkUmVzb3VyY2UzIiwKLSAgICAgICAg
ICAgICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBhIHJlc291cmNlIGluIHRoZSBjb250ZXh0IG9mIGEg
ZnJhbWUgb24gdGhlIGluc3BlY3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNoZWNrcy4i
Ci0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJj
ZTQiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhl
IGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBv
cmlnaW4gY2hlY2tzLiIKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUi
OiAibG9hZFJlc291cmNlNSIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9hZHMgYSBy
ZXNvdXJjZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFnZSB3
aXRob3V0IGNyb3NzIG9yaWdpbiBjaGVja3MuIgotICAgICAgICB9LAotICAgICAgICB7Ci0gICAg
ICAgICAgICAibmFtZSI6ICJsb2FkUmVzb3VyY2U2IiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlv
biI6ICJMb2FkcyBhIHJlc291cmNlIGluIHRoZSBjb250ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGlu
c3BlY3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNoZWNrcy4iCi0gICAgICAgIH0sCi0g
ICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJjZTciLAotICAgICAgICAg
ICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBm
cmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIK
LSAgICAgICAgfQotICAgIF0KLX0KLV0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2VudW0tdmFsdWVzLmpzb24gYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9lbnVtLXZh
bHVlcy5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZGFkNjFkZjdjOS4uMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2dlbmVyaWMvZW51bS12YWx1ZXMuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAg
QEAKLXsiZG9tYWlucyI6WwotewotICAgICJkb21haW4iOiAiVHlwZURvbWFpbiIsCi0gICAgInR5
cGVzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiVHlwZURvbWFpbkVudW0iLAot
ICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKLSAgICAgICAgICAgICJlbnVtIjogWyJzaGFy
ZWQiLCAicmVkIiwgImdyZWVuIiwgImJsdWUiXQotICAgICAgICB9Ci0gICAgXQotfSwKLXsKLSAg
ICAiZG9tYWluIjogIkNvbW1hbmREb21haW4iLAotICAgICJjb21tYW5kcyI6IFsKLSAgICAgICAg
ewotICAgICAgICAgICAgIm5hbWUiOiAiY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUiLAotICAg
ICAgICAgICAgInBhcmFtZXRlcnMiOiBbXSwKLSAgICAgICAgICAgICJyZXR1cm5zIjogWwotICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAicmV0dXJuVmFsdWUiLCAidHlwZSI6ICJzdHJpbmciLCAi
ZW51bSI6IFsic2hhcmVkIiwgImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciXSB9Ci0gICAgICAg
ICAgICBdCi0gICAgICAgIH0KLSAgICBdCi19LAotewotICAgICJkb21haW4iOiAiRXZlbnREb21h
aW4iLAotICAgICJldmVudHMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImV2
ZW50V2l0aEVudW1QYXJhbWV0ZXIiLAotICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCi0gICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJwYXJhbWV0ZXIiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51
bSI6IFsic2hhcmVkIiwgImJsYWNrIiwgIndoaXRlIl0gfQotICAgICAgICAgICAgXQotICAgICAg
ICB9Ci0gICAgXQotfQotXX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9t
YWluLWRlYnVnZ2FibGVUeXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9ldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1k
ZWJ1Z2dhYmxlVHlwZS5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZGZlZDQx
ZWQyMS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVi
dWdnYWJsZVR5cGUuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotWwotewotICAg
ICJkb21haW4iOiAiRG9tYWluIiwKLSAgICAiZGVidWdnYWJsZVR5cGVzIjogWyJwYWdlIl0sCi0g
ICAgImNvbW1hbmRzIjogW3sibmFtZSI6ICJDb21tYW5kIn1dLAotICAgICJldmVudHMiOiBbeyJu
YW1lIjogIkV2ZW50IiwgInRhcmdldFR5cGVzIjogWyJwYWdlIiwgIndvcmtlciJdfV0KLX0KLV0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9nZW5lcmljL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbiBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V2ZW50cy13aXRo
LW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
Y2FiYmYxMGI4MzYuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRl
cnMuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjog
IkRhdGFiYXNlIiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6
ICJEYXRhYmFzZUlkIiwKLSAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCi0gICAgICAgICAg
ICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIGlkZW50aWZpZXIgb2YgRGF0YWJhc2Ugb2JqZWN0LiIK
LSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIlByaW1hcnlDb2xvcnMi
LAotICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKLSAgICAgICAgICAgICJ2YWx1ZXMiOiBb
InJlZCIsICJncmVlbiIsICJibHVlIl0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAg
ICAgImlkIjogIkNvbG9yTGlzdCIsCi0gICAgICAgICAgICAidHlwZSI6ICJhcnJheSIsCi0gICAg
ICAgICAgICAiaXRlbXMiOiB7ICIkcmVmIjogIlByaW1hcnlDb2xvcnMiIH0KLSAgICAgICAgfSwK
LSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIkVycm9yIiwKLSAgICAgICAgICAgICJ0eXBl
IjogIm9iamVjdCIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRGF0YWJhc2UgZXJyb3Iu
IiwKLSAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAibWVzc2FnZSIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBtZXNz
YWdlLiIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvZGUiLCAidHlwZSI6ICJpbnRl
Z2VyIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIGNvZGUuIiB9Ci0gICAgICAgICAgICBdCi0gICAg
ICAgIH0KLSAgICBdLAotICAgICJldmVudHMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJu
YW1lIjogImRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMiLAotICAgICAgICAgICAgInBhcmFt
ZXRlcnMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBl
IjogImFycmF5IiwgIm9wdGlvbmFsIjogdHJ1ZSwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmci
IH0gfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5n
IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0
YW1wIiwgInR5cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogdHJ1
ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIs
ICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNxbEVycm9y
IiwgIiRyZWYiOiAiRXJyb3IiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlDb2xvcnMiLCAib3B0aW9u
YWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJhbHRlcm5hdGVDb2xvcnMi
LCAiJHJlZiI6ICJDb2xvckxpc3QiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgInZhbHVlcyI6IFsi
Y3lhbiIsICJtYWdlbnRhIiwgInllbGxvdyIsICJibGFjayJdLCAib3B0aW9uYWwiOiB0cnVlIH0K
LSAgICAgICAgICAgIF0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUi
OiAiZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIiwKLSAgICAgICAgICAgICJwYXJhbWV0
ZXJzIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6
ICJhcnJheSIsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCi0gICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIgfSwKLSAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIgfSwKLSAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIgfSwKLSAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiIH0sCi0gICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVycm9yIiB9LAotICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6ICJQcmltYXJ5Q29sb3JzIiB9LAot
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwgIiRyZWYiOiAiQ29s
b3JMaXN0IiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBl
IjogInN0cmluZyIsICJ2YWx1ZXMiOiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciLCAiYmxh
Y2siXSB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBl
Y3RlZC9jb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpz
b24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvZXhwZWN0ZWQvY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1
Z2dhYmxlVHlwZS5qc29uLXJlc3VsdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDMx
M2ZhOTE1MWUuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2NvbW1hbmQtdGFyZ2V0VHlwZS1tYXRj
aGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1yZXN1bHQKKysrIC9kZXYvbnVsbApAQCAt
MSwxMDYzICswLDAgQEAKLSMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMu
anMKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5cGUt
bWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotLy8gRG9tYWluCi1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lz
dGVyRG9tYWluKCJEb21haW4iLCBbInBhZ2UiLCAid29ya2VyIl0pOwotSW5zcGVjdG9yQmFja2Vu
ZC5yZWdpc3RlckNvbW1hbmQoIkRvbWFpbi5Db21tYW5kIiwgbnVsbCwgW10sIFtdKTsKLUluc3Bl
Y3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudCgiRG9tYWluLkV2ZW50IiwgbnVsbCwgW10pOwotSW5z
cGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbkRpc3BhdGNoZXIgPSBJbnNwZWN0b3JCYWNrZW5k
LnJlZ2lzdGVyRGlzcGF0Y2hlci5iaW5kKEluc3BlY3RvckJhY2tlbmQsICJEb21haW4iKTsKLUlu
c3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkRvbWFpbiIsIFsicGFnZSJdKTsKLSMjIyBF
bmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVU
eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3By
YWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
LQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQot
Y2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZvaWQgc2V0
QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIp
IHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KLSAgICBCYWNr
ZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tl
bmREaXNwYXRjaGVyLmdldCgpOyB9Ci1wcml2YXRlOgotICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0
Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKLX07Ci0KLQotY2xhc3MgQWx0ZXJuYXRlRG9tYWlu
QmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewot
cHVibGljOgotICAgIHZpcnR1YWwgfkFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKCkg
eyB9Ci0gICAgdmlydHVhbCB2b2lkIENvbW1hbmQobG9uZyBjYWxsSWQpID0gMDsKLX07Ci0KLX0g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCi0jIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlz
cGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZC10YXJnZXRUeXBlLW1hdGNo
aW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29s
T2JqZWN0cy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJ
bnNwZWN0b3IgewotCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQotI2lmIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotY2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFj
a2VuZERpc3BhdGNoZXI7Ci0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCi0KLWNsYXNzIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7Ci1wdWJs
aWM6Ci0gICAgdmlydHVhbCB2b2lkIENvbW1hbmQoRXJyb3JTdHJpbmcmKSA9IDA7Ci1wcm90ZWN0
ZWQ6Ci0gICAgdmlydHVhbCB+RG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7Ci19Owot
Ci1jbGFzcyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50
YWxCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgRG9tYWluQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29u
c3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkgZmluYWw7Ci1w
cml2YXRlOgotICAgIHZvaWQgQ29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9i
amVjdD4mJiBwYXJhbWV0ZXJzKTsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKLXB1YmxpYzoKLSAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJu
YXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRl
cm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQotcHJpdmF0ZToKLSAgICBB
bHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciogbV9hbHRlcm5hdGVEaXNwYXRjaGVyIHsg
bnVsbHB0ciB9OwotI2VuZGlmCi1wcml2YXRlOgotICAgIERvbWFpbkJhY2tlbmREaXNwYXRjaGVy
KEJhY2tlbmREaXNwYXRjaGVyJiwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0g
ICAgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50IHsgbnVsbHB0ciB9Owot
fTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5k
RGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5j
cHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5cGUt
bWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRl
c3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNs
dWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSNpbmNsdWRl
ICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNl
IEluc3BlY3RvciB7Ci0KLURvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6fkRvbWFpbkJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQotCi1SZWY8RG9tYWluQmFja2VuZERpc3BhdGNo
ZXI+IERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImIGJh
Y2tlbmREaXNwYXRjaGVyLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQot
ewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKGJhY2tl
bmREaXNwYXRjaGVyLCBhZ2VudCkpOwotfQotCi1Eb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6RG9t
YWluQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVy
LCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQotICAgIDogU3VwcGxlbWVu
dGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCi0gICAgLCBtX2FnZW50KGFn
ZW50KQotewotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRv
bWFpbigiRG9tYWluIl9zLCB0aGlzKTsKLX0KLQotdm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hl
cjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNP
Tjo6T2JqZWN0PiYmIG1lc3NhZ2UpCi17Ci0gICAgUmVmPERvbWFpbkJhY2tlbmREaXNwYXRjaGVy
PiBwcm90ZWN0KCp0aGlzKTsKLQotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7
Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRlcnMpOwotCi0gICAg
aWYgKG1ldGhvZCA9PSAiQ29tbWFuZCIpCi0gICAgICAgIENvbW1hbmQocmVxdWVzdElkLCBXVEZN
b3ZlKHBhcmFtZXRlcnMpKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAi
J0RvbWFpbi4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOwotfQotCi12b2lkIERvbWFp
bkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6
T2JqZWN0PiYmKQotewotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQotICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVE
aXNwYXRjaGVyLT5Db21tYW5kKHJlcXVlc3RJZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0j
ZW5kaWYKLQotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJl
c3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgbV9hZ2VudC0+Q29tbWFuZChlcnJv
cik7Ci0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAg
ICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3Io
QmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0
Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZC10YXJnZXRUeXBlLW1hdGNo
aW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29s
T2JqZWN0cy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBGcm9udGVu
ZFJvdXRlcjsKLQotY2xhc3MgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVyIHsKLSAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBEb21haW5Gcm9udGVuZERpc3BhdGNoZXIo
RnJvbnRlbmRSb3V0ZXImIGZyb250ZW5kUm91dGVyKSA6IG1fZnJvbnRlbmRSb3V0ZXIoZnJvbnRl
bmRSb3V0ZXIpIHsgfQotICAgIHZvaWQgRXZlbnQoKTsKLXByaXZhdGU6Ci0gICAgRnJvbnRlbmRS
b3V0ZXImIG1fZnJvbnRlbmRSb3V0ZXI7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
LSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlw
ZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgotCi0j
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi12b2lk
IERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcjo6RXZlbnQoKQotewotICAgIFJlZjxKU09OOjpPYmpl
Y3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2Fn
ZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOwotCi0gICAgbV9mcm9u
dGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlz
cGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hp
bmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4K
LQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0K
LQotCi0KLQotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVU
eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLQotI2lu
Y2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQot
bmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLQotCi19IC8v
IG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgot
I2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQotQHByb3RvY29sIFRlc3RQcm90b2NvbERvbWFp
bkRvbWFpbkhhbmRsZXI7Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLWNsYXNzIE9iakNJ
bnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVE
b21haW5CYWNrZW5kRGlzcGF0Y2hlciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1w
dWJsaWM6Ci0gICAgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQ
cm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRs
ZXI7IH0KLSAgICB2b2lkIENvbW1hbmQobG9uZyByZXF1ZXN0SWQpIGZpbmFsOwotcHJpdmF0ZToK
LSAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4+IG1fZGVs
ZWdhdGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQg
ImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0K
LSNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLW5hbWVz
cGFjZSBJbnNwZWN0b3IgewotCi12b2lkIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0
Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVlc3RJZCkKLXsKLSAgICBpZiAoIVttX2RlbGVnYXRlIHJl
c3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nl
c3NDYWxsYmFjazopXSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90
b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAi
J0RvbWFpbi5Db21tYW5kJyB3YXMgbm90IGZvdW5kIl9zKTsKLSAgICAgICAgYmFja2VuZERpc3Bh
dGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERp
c3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVy
KCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgfTsKLQotICAgIGlkIHN1Y2Nlc3NDYWxsYmFj
ayA9IF57Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0
SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKLSAgICB9OwotCi0gICAgW21fZGVs
ZWdhdGUgQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxi
YWNrOnN1Y2Nlc3NDYWxsYmFja107Ci19Ci0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0K
LSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVn
Z2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgotCi1fX2F0dHJpYnV0ZV9f
KCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbiA6IE5TT2JqZWN0Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluLCBzZXR0ZXI9
c2V0RG9tYWluSGFuZGxlcjopIGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IGRv
bWFpbkhhbmRsZXI7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFRlc3RQcm90b2Nv
bERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqZG9tYWluRXZlbnREaXNwYXRjaGVyOwotQGVu
ZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1
Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKLQotI2ltcG9ydCAiVGVz
dFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRj
aGVycy5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdl
bnQuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJv
bGxlci5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2Vu
ZERpc3BhdGNoZXJzLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcnMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGltcGxlbWVu
dGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KLXsKLSAgICBBdWdtZW50YWJsZUluc3Bl
Y3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotICAgIGlkPFRlc3RQcm90b2NvbERvbWFpbkRv
bWFpbkhhbmRsZXI+IF9kb21haW5IYW5kbGVyOwotICAgIFRlc3RQcm90b2NvbERvbWFpbkRvbWFp
bkV2ZW50RGlzcGF0Y2hlciAqX2RvbWFpbkV2ZW50RGlzcGF0Y2hlcjsKLX0KLQotLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVy
Kiljb250cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYp
Ci0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIpOwotICAgIF9jb250
cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClkZWFs
bG9jCi17Ci0gICAgW19kb21haW5IYW5kbGVyIHJlbGVhc2VdOwotICAgIFtfZG9tYWluRXZlbnRE
aXNwYXRjaGVyIHJlbGVhc2VdOwotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAodm9pZClz
ZXREb21haW5IYW5kbGVyOihpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiloYW5k
bGVyCi17Ci0gICAgaWYgKGhhbmRsZXIgPT0gX2RvbWFpbkhhbmRsZXIpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIFtfZG9tYWluSGFuZGxlciByZWxlYXNlXTsKLSAgICBfZG9tYWluSGFuZGxlciA9
IFtoYW5kbGVyIHJldGFpbl07Ci0KLSAgICBhdXRvIGFsdGVybmF0ZURpc3BhdGNoZXIgPSBtYWtl
VW5pcXVlPE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7Ci0g
ICAgYXV0byBhbHRlcm5hdGVBZ2VudCA9IG1ha2VVbmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxl
QWdlbnQ8RG9tYWluQmFja2VuZERpc3BhdGNoZXIsIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNw
YXRjaGVyPj4oIkRvbWFpbiJfcywgKl9jb250cm9sbGVyLCBXVEZNb3ZlKGFsdGVybmF0ZURpc3Bh
dGNoZXIpKTsKLSAgICBfY29udHJvbGxlci0+YXBwZW5kRXh0cmFBZ2VudChXVEZNb3ZlKGFsdGVy
bmF0ZUFnZW50KSk7Ci19Ci0KLS0gKGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+
KWRvbWFpbkhhbmRsZXIKLXsKLSAgICByZXR1cm4gX2RvbWFpbkhhbmRsZXI7Ci19Ci0KLS0gKFRl
c3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqKWRvbWFpbkV2ZW50RGlzcGF0
Y2hlcgotewotICAgIGlmICghX2RvbWFpbkV2ZW50RGlzcGF0Y2hlcikKLSAgICAgICAgX2RvbWFp
bkV2ZW50RGlzcGF0Y2hlciA9IFtbVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRj
aGVyIGFsbG9jXSBpbml0V2l0aENvbnRyb2xsZXI6X2NvbnRyb2xsZXJdOwotICAgIHJldHVybiBf
ZG9tYWluRXZlbnREaXNwYXRjaGVyOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xF
dmVudERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29t
bWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90
b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5o
IgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3Rv
cjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0
Y2hlcgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7
Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5z
cGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07
Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9s
bGVyKTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19
Ci0KLS0gKHZvaWQpRXZlbnQKLXsKLSAgICBjb25zdCBGcm9udGVuZFJvdXRlciYgcm91dGVyID0g
X2NvbnRyb2xsZXItPmZyb250ZW5kUm91dGVyKCk7Ci0KLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBq
c29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNl
dFN0cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9zKTsKLSAgICByb3V0ZXIuc2VuZEV2
ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFu
ZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPEZvdW5kYXRpb24v
Rm91bmRhdGlvbi5oPgotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2Jq
ZWN0Lmg+Ci0KLQotCi0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbFBs
YXRmb3JtKSB7Ci0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1BbGwsCi0gICAgVGVzdFByb3RvY29s
UGxhdGZvcm1HZW5lcmljLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TLAotICAgIFRlc3RQ
cm90b2NvbFBsYXRmb3JtTWFjT1MsCi19OwotCi0KLQotCi0KLUBwcm90b2NvbCBUZXN0UHJvdG9j
b2xEb21haW5Eb21haW5IYW5kbGVyIDxOU09iamVjdD4KLUBvcHRpb25hbAotLSAodm9pZClDb21t
YW5kV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxi
YWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKSh2b2lkKSlzdWNjZXNzQ2FsbGJhY2s7Ci1AZW5k
Ci0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBU
ZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgOiBOU09iamVjdAotLSAodm9p
ZClFdmVudDsKLUBlbmQKLQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWls
ZENvbXBhdGliaWxpdHlPYmplY3RzLmg+Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgK
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRl
YnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09O
T2JqZWN0UHJpdmF0ZS5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNw
ZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi1AaW50ZXJm
YWNlIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAoUHJpdmF0ZSkKLS0g
KGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEluc3BlY3Rvcjo6QXVnbWVudGFibGVJ
bnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyOwotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sSW50ZXJuYWwuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5k
LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29s
LmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+
Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5
cGU+Ci1PcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJp
bmcmIHZhbHVlKTsKLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2Nv
bFBsYXRmb3JtIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFBy
b3RvY29sUGxhdGZvcm1BbGw6Ci0gICAgICAgIHJldHVybiAiYWxsIl9zOwotICAgIGNhc2UgVGVz
dFByb3RvY29sUGxhdGZvcm1HZW5lcmljOgotICAgICAgICByZXR1cm4gImdlbmVyaWMiX3M7Ci0g
ICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzoKLSAgICAgICAgcmV0dXJuICJpb3MiX3M7
Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOgotICAgICAgICByZXR1cm4gIm1h
Y29zIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90
b2NvbFBsYXRmb3JtPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsK
LSAgICBpZiAodmFsdWUgPT0gImFsbCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0
Zm9ybUFsbDsKLSAgICBpZiAodmFsdWUgPT0gImdlbmVyaWMiKQotICAgICAgICByZXR1cm4gVGVz
dFByb3RvY29sUGxhdGZvcm1HZW5lcmljOwotICAgIGlmICh2YWx1ZSA9PSAiaW9zIikKLSAgICAg
ICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOwotICAgIGlmICh2YWx1ZSA9PSAibWFj
b3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzsKLSAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlw
ZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBv
cnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKLSNpbXBvcnQgPFdlYklu
c3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0KLXVzaW5nIG5hbWVzcGFj
ZSBJbnNwZWN0b3I7Ci0KLQotCi0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hp
bmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2lt
cG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0
b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotI2ltcG9ydCA8d3RmL0Fzc2VydGlv
bnMuaD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNw
ZWN0b3I7Ci0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMv
ZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbi1yZXN1bHQgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3Rl
ZC9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uLXJlc3VsdApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggZmM1YzQxZGI1M2EuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2Nv
bW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24tcmVzdWx0CisrKyAvZGV2L251bGwKQEAg
LTEsMTgwOSArMCwwIEBACi0jIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRz
LmpzCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3lu
Yy1hdHRyaWJ1dGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0vLyBEYXRhYmFzZQotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiRGF0YWJh
c2UiLCBudWxsKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJEYXRhYmFzZS5Qcmlt
YXJ5Q29sb3JzIiwge1JlZDogInJlZCIsIEdyZWVuOiAiZ3JlZW4iLCBCbHVlOiAiYmx1ZSJ9KTsK
LUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJEYXRhYmFzZS5leGVjdXRlU1FMU3lu
Y09wdGlvbmFsUmV0dXJuVmFsdWVzIiwgbnVsbCwgW3sibmFtZSI6ICJkYXRhYmFzZUlkIiwgInR5
cGUiOiAibnVtYmVyIn0sIHsibmFtZSI6ICJxdWVyeSIsICJ0eXBlIjogInN0cmluZyJ9XSwgWyJj
b2x1bW5OYW1lcyIsICJub3RlcyIsICJ0aW1lc3RhbXAiLCAidmFsdWVzIiwgInBheWxvYWQiLCAi
ZGF0YWJhc2VJZCIsICJzcWxFcnJvciIsICJzY3JlZW5Db2xvciIsICJhbHRlcm5hdGVDb2xvcnMi
LCAicHJpbnRDb2xvciJdKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJEYXRh
YmFzZS5leGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyIsIG51bGwsIFt7Im5hbWUi
OiAiZGF0YWJhc2VJZCIsICJ0eXBlIjogIm51bWJlciJ9LCB7Im5hbWUiOiAicXVlcnkiLCAidHlw
ZSI6ICJzdHJpbmcifV0sIFsiY29sdW1uTmFtZXMiLCAibm90ZXMiLCAidGltZXN0YW1wIiwgInZh
bHVlcyIsICJwYXlsb2FkIiwgImRhdGFiYXNlSWQiLCAic3FsRXJyb3IiLCAic2NyZWVuQ29sb3Ii
LCAiYWx0ZXJuYXRlQ29sb3JzIiwgInByaW50Q29sb3IiXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJl
Z2lzdGVyQ29tbWFuZCgiRGF0YWJhc2UuZXhlY3V0ZVNRTFN5bmMiLCBudWxsLCBbeyJuYW1lIjog
ImRhdGFiYXNlSWQiLCAidHlwZSI6ICJudW1iZXIifSwgeyJuYW1lIjogInF1ZXJ5IiwgInR5cGUi
OiAic3RyaW5nIn1dLCBbImNvbHVtbk5hbWVzIiwgIm5vdGVzIiwgInRpbWVzdGFtcCIsICJ2YWx1
ZXMiLCAicGF5bG9hZCIsICJkYXRhYmFzZUlkIiwgInNxbEVycm9yIiwgImFsdGVybmF0ZUNvbG9y
cyIsICJzY3JlZW5Db2xvciIsICJwcmludENvbG9yIl0pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdp
c3RlckNvbW1hbmQoIkRhdGFiYXNlLmV4ZWN1dGVTUUxBc3luYyIsIG51bGwsIFt7Im5hbWUiOiAi
ZGF0YWJhc2VJZCIsICJ0eXBlIjogIm51bWJlciJ9LCB7Im5hbWUiOiAicXVlcnkiLCAidHlwZSI6
ICJzdHJpbmcifV0sIFsiY29sdW1uTmFtZXMiLCAibm90ZXMiLCAidGltZXN0YW1wIiwgInZhbHVl
cyIsICJwYXlsb2FkIiwgImRhdGFiYXNlSWQiLCAic3FsRXJyb3IiLCAic2NyZWVuQ29sb3IiLCAi
YWx0ZXJuYXRlQ29sb3JzIiwgInByaW50Q29sb3IiXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lz
dGVyRGF0YWJhc2VEaXNwYXRjaGVyID0gSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRpc3BhdGNo
ZXIuYmluZChJbnNwZWN0b3JCYWNrZW5kLCAiRGF0YWJhc2UiKTsKLUluc3BlY3RvckJhY2tlbmQu
YWN0aXZhdGVEb21haW4oIkRhdGFiYXNlIiwgbnVsbCk7Ci0jIyMgRW5kIEZpbGU6IEluc3BlY3Rv
ckJhY2tlbmRDb21tYW5kcy5qcwotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tl
bmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFu
ZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKLSNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0KLW5hbWVz
cGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1w
dWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3Bh
dGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNw
YXRjaGVyKTsgfQotICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNv
bnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KLXByaXZhdGU6Ci0gICAg
UmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwotfTsKLQotCi1j
bGFzcyBBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5BbHRlcm5hdGVEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVyKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxT
eW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyBjYWxsSWQsIGludCBpbl9kYXRhYmFzZUlkLCBj
b25zdCBTdHJpbmcmIGluX3F1ZXJ5KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxB
c3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgY2FsbElkLCBpbnQgaW5fZGF0YWJhc2VJZCwg
Y29uc3QgU3RyaW5nJiBpbl9xdWVyeSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FM
U3luYyhsb25nIGNhbGxJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVl
cnkpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTEFzeW5jKGxvbmcgY2FsbElkLCBp
bnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkgPSAwOwotfTsKLQotfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVS
TkFURV9ESVNQQVRDSEVSUykKLSMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNw
YXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJp
YnV0ZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNw
cmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10eXBlZGVm
IFN0cmluZyBFcnJvclN0cmluZzsKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQotY2xhc3MgQWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjsKLSNl
bmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQotY2xhc3Mg
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewotcHVibGljOgotICAgIC8vIE5hbWVk
IGFmdGVyIHBhcmFtZXRlciAncHJpbnRDb2xvcicgd2hpbGUgZ2VuZXJhdGluZyBjb21tYW5kL2V2
ZW50IGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMuCi0gICAgZW51bSBjbGFzcyBQ
cmludENvbG9yIHsKLSAgICAgICAgQ3lhbiA9IDMsCi0gICAgICAgIE1hZ2VudGEgPSA0LAotICAg
ICAgICBZZWxsb3cgPSA1LAotICAgICAgICBCbGFjayA9IDYsCi0gICAgfTsgLy8gZW51bSBjbGFz
cyBQcmludENvbG9yCi0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1
cm5WYWx1ZXMoRXJyb3JTdHJpbmcmLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBp
bl9xdWVyeSwgUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mIG9wdF9vdXRfY29sdW1uTmFt
ZXMsIE9wdGlvbmFsPFN0cmluZz4mIG9wdF9vdXRfbm90ZXMsIE9wdGlvbmFsPGRvdWJsZT4mIG9w
dF9vdXRfdGltZXN0YW1wLCBPcHRpb25hbDxKU09OOjpPYmplY3Q+JiBvcHRfb3V0X3ZhbHVlcywg
T3B0aW9uYWw8SlNPTjo6VmFsdWU+JiBvcHRfb3V0X3BheWxvYWQsIE9wdGlvbmFsPGludD4mIG9w
dF9vdXRfZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpF
cnJvcj4mIG9wdF9vdXRfc3FsRXJyb3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQ
cmltYXJ5Q29sb3JzKiBvcHRfb3V0X3NjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4mIG9wdF9vdXRfYWx0ZXJuYXRlQ29sb3JzLCBEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciogb3B0X291dF9wcmludENv
bG9yKSA9IDA7Ci0gICAgY2xhc3MgRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXND
YWxsYmFjayA6IHB1YmxpYyBCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlIHsKLSAgICBw
dWJsaWM6Ci0gICAgICAgIEV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJh
Y2soUmVmPEJhY2tlbmREaXNwYXRjaGVyPiYmLCBpbnQgaWQpOwotICAgICAgICB2b2lkIHNlbmRT
dWNjZXNzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiYgY29sdW1uTmFtZXMsIE9wdGlv
bmFsPFN0cmluZz4mIG5vdGVzLCBPcHRpb25hbDxkb3VibGU+JiB0aW1lc3RhbXAsIE9wdGlvbmFs
PEpTT046Ok9iamVjdD4mIHZhbHVlcywgT3B0aW9uYWw8SlNPTjo6VmFsdWU+JiBwYXlsb2FkLCBP
cHRpb25hbDxpbnQ+JiBkYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0
YWJhc2U6OkVycm9yPiYmIHNxbEVycm9yLCBPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpE
YXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYmIGFsdGVybmF0ZUNvbG9ycywgT3B0aW9uYWw8
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3I+IHByaW50Q29sb3Ip
OwotICAgIH07Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJu
VmFsdWVzKGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5LCBSZWY8RXhl
Y3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjaz4mJiBjYWxsYmFjaykgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMU3luYyhFcnJvclN0cmluZyYsIGludCBpbl9k
YXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxT
dHJpbmc+PiYgb3V0X2NvbHVtbk5hbWVzLCBTdHJpbmcqIG91dF9ub3RlcywgZG91YmxlKiBvdXRf
dGltZXN0YW1wLCBKU09OOjpPYmplY3QqIG91dF92YWx1ZXMsIEpTT046OlZhbHVlKiBvdXRfcGF5
bG9hZCwgaW50KiBvdXRfZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpFcnJvcj4mIG91dF9zcWxFcnJvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiBvdXRfYWx0ZXJuYXRlQ29sb3JzLCBJbnNwZWN0b3I6OlBy
b3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyogb3V0X3NjcmVlbkNvbG9yLCBEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciogb3V0X3ByaW50Q29sb3IpID0g
MDsKLSAgICBjbGFzcyBFeGVjdXRlU1FMQXN5bmNDYWxsYmFjayA6IHB1YmxpYyBCYWNrZW5kRGlz
cGF0Y2hlcjo6Q2FsbGJhY2tCYXNlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEV4ZWN1dGVTUUxB
c3luY0NhbGxiYWNrKFJlZjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiwgaW50IGlkKTsKLSAgICAgICAg
dm9pZCBzZW5kU3VjY2VzcyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYmIGNvbHVtbk5h
bWVzLCBjb25zdCBTdHJpbmcmIG5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBKU09OOjpPYmplY3Qg
dmFsdWVzLCBKU09OOjpWYWx1ZSBwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mJiBzcWxFcnJvciwgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYmIGFsdGVybmF0ZUNvbG9ycywg
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3IgcHJpbnRDb2xvcik7
Ci0gICAgfTsKLSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTEFzeW5jKGludCBpbl9kYXRhYmFz
ZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5LCBSZWY8RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2s+
JiYgY2FsbGJhY2spID0gMDsKLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIH5EYXRhYmFzZUJhY2tl
bmREaXNwYXRjaGVySGFuZGxlcigpOwotfTsKLQotY2xhc3MgRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJs
aWM6Ci0gICAgc3RhdGljIFJlZjxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFj
a2VuZERpc3BhdGNoZXImLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAg
IHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8
SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOwotcHJpdmF0ZToKLSAgICB2b2lkIGV4ZWN1
dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09O
OjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0gICAgdm9pZCBleGVjdXRlU1FMQXN5bmNPcHRpb25h
bFJldHVyblZhbHVlcyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJh
bWV0ZXJzKTsKLSAgICB2b2lkIGV4ZWN1dGVTUUxTeW5jKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8
SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwotICAgIHZvaWQgZXhlY3V0ZVNRTEFzeW5jKGxv
bmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwotI2lmIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotcHVibGljOgotICAgIHZvaWQg
c2V0QWx0ZXJuYXRlRGlzcGF0Y2hlcihBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
KiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0
ZURpc3BhdGNoZXI7IH0KLXByaXZhdGU6Ci0gICAgQWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlciogbV9hbHRlcm5hdGVEaXNwYXRjaGVyIHsgbnVsbHB0ciB9OwotI2VuZGlmCi1wcml2
YXRlOgotICAgIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImLCBE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIERhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50IHsgbnVsbHB0ciB9OwotfTsKLQotfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9K
U09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCi0jaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgot
I2VuZGlmCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1EYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVySGFuZGxlcjo6fkRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9Ci0KLVJl
ZjxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpj
cmVhdGUoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBEYXRhYmFzZUJhY2tl
bmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKLX0K
LQotRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihC
YWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIERhdGFiYXNlQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyKiBhZ2VudCkKLSAgICA6IFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVy
KGJhY2tlbmREaXNwYXRjaGVyKQotICAgICwgbV9hZ2VudChhZ2VudCkKLXsKLSAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oIkRhdGFiYXNlIl9zLCB0
aGlzKTsKLX0KLQotdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25n
IHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVz
c2FnZSkKLXsKLSAgICBSZWY8RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhp
cyk7Ci0KLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOwotICAgIG1lc3NhZ2Ut
PmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsKLQotICAgIGlmIChtZXRob2QgPT0g
ImV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMiKQotICAgICAgICBleGVjdXRlU1FM
U3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7
Ci0gICAgZWxzZSBpZiAobWV0aG9kID09ICJleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZh
bHVlcyIpCi0gICAgICAgIGV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKHJlcXVl
c3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7Ci0gICAgZWxzZSBpZiAobWV0aG9kID09ICJleGVj
dXRlU1FMU3luYyIpCi0gICAgICAgIGV4ZWN1dGVTUUxTeW5jKHJlcXVlc3RJZCwgV1RGTW92ZShw
YXJhbWV0ZXJzKSk7Ci0gICAgZWxzZSBpZiAobWV0aG9kID09ICJleGVjdXRlU1FMQXN5bmMiKQot
ICAgICAgICBleGVjdXRlU1FMQXN5bmMocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsK
LSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJy
b3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RhdGFiYXNlLiIgKyBtZXRo
b2QgKyAiJyB3YXMgbm90IGZvdW5kIik7Ci19Ci0KLXZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlcjo6ZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHJlcXVlc3RJZCwg
UmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKQotewotICAgIGludCBpbl9kYXRhYmFz
ZUlkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0SW50ZWdlcihwYXJhbWV0ZXJzLmdldCgpLCAi
ZGF0YWJhc2VJZCJfcywgbnVsbHB0cik7Ci0gICAgU3RyaW5nIGluX3F1ZXJ5ID0gbV9iYWNrZW5k
RGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksICJxdWVyeSJfcywgbnVsbHB0
cik7Ci0gICAgaWYgKG1fYmFja2VuZERpc3BhdGNoZXItPmhhc1Byb3RvY29sRXJyb3JzKCkpIHsK
LSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5k
RGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnRGF0
YWJhc2UuZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcycgY2FuJ3QgYmUgcHJvY2Vz
c2VkIl9zKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotI2lmIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQotICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsK
LSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5leGVjdXRlU1FMU3luY09wdGlvbmFsUmV0
dXJuVmFsdWVzKHJlcXVlc3RJZCwgaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnkpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8
SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIFJlZlB0
cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IG91dF9jb2x1bW5OYW1lczsKLSAgICBPcHRpb25hbDxT
dHJpbmc+IG91dF9ub3RlczsKLSAgICBPcHRpb25hbDxkb3VibGU+IG91dF90aW1lc3RhbXA7Ci0g
ICAgT3B0aW9uYWw8SlNPTjo6T2JqZWN0PiBvdXRfdmFsdWVzOwotICAgIE9wdGlvbmFsPEpTT046
OlZhbHVlPiBvdXRfcGF5bG9hZDsKLSAgICBPcHRpb25hbDxpbnQ+IG91dF9kYXRhYmFzZUlkOwot
ICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IG91dF9zcWxF
cnJvcjsKLSAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyBv
dXRfc2NyZWVuQ29sb3I7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNl
OjpDb2xvckxpc3Q+IG91dF9hbHRlcm5hdGVDb2xvcnM7Ci0gICAgRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3Igb3V0X3ByaW50Q29sb3I7Ci0gICAgbV9hZ2VudC0+
ZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhlcnJvciwgaW5fZGF0YWJhc2VJZCwg
aW5fcXVlcnksIG91dF9jb2x1bW5OYW1lcywgb3V0X25vdGVzLCBvdXRfdGltZXN0YW1wLCBvdXRf
dmFsdWVzLCBvdXRfcGF5bG9hZCwgb3V0X2RhdGFiYXNlSWQsIG91dF9zcWxFcnJvciwgb3V0X3Nj
cmVlbkNvbG9yLCBvdXRfYWx0ZXJuYXRlQ29sb3JzLCBvdXRfcHJpbnRDb2xvcik7Ci0KLSAgICBp
ZiAoIWVycm9yLmxlbmd0aCgpKSB7Ci0gICAgICAgIGlmIChvdXRfY29sdW1uTmFtZXMpCi0gICAg
ICAgICAgICByZXN1bHQtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgb3V0X2NvbHVtbk5hbWVz
KTsKLSAgICAgICAgaWYgKG91dF9ub3Rlcy5oYXNWYWx1ZSgpKQotICAgICAgICAgICAgcmVzdWx0
LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCAqb3V0X25vdGVzKTsKLSAgICAgICAgaWYgKG91dF90aW1l
c3RhbXAuaGFzVmFsdWUoKSkKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0RG91YmxlKCJ0aW1lc3Rh
bXAiX3MsICpvdXRfdGltZXN0YW1wKTsKLSAgICAgICAgaWYgKG91dF92YWx1ZXMuaGFzVmFsdWUo
KSkKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsICpvdXRfdmFsdWVz
KTsKLSAgICAgICAgaWYgKG91dF9wYXlsb2FkLmhhc1ZhbHVlKCkpCi0gICAgICAgICAgICByZXN1
bHQtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCAqb3V0X3BheWxvYWQpOwotICAgICAgICBpZiAob3V0
X2RhdGFiYXNlSWQuaGFzVmFsdWUoKSkKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0SW50ZWdlcigi
ZGF0YWJhc2VJZCJfcywgKm91dF9kYXRhYmFzZUlkKTsKLSAgICAgICAgaWYgKG91dF9zcWxFcnJv
cikKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgb3V0X3NxbEVy
cm9yKTsKLSAgICAgICAgaWYgKG91dF9zY3JlZW5Db2xvci5oYXNWYWx1ZSgpKQotICAgICAgICAg
ICAgcmVzdWx0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCAqb3V0X3NjcmVlbkNvbG9yKTsK
LSAgICAgICAgaWYgKG91dF9hbHRlcm5hdGVDb2xvcnMpCi0gICAgICAgICAgICByZXN1bHQtPnNl
dEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIG91dF9hbHRlcm5hdGVDb2xvcnMpOwotICAgICAg
ICBpZiAob3V0X3ByaW50Q29sb3IuaGFzVmFsdWUoKSkKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0
U3RyaW5nKCJwcmludENvbG9yIl9zLCAqb3V0X3ByaW50Q29sb3IpOwotICAgIH0KLSAgICBpZiAo
IWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9u
c2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAg
IG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNo
ZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Ci19Ci0KLURhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxi
YWNrOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrKFJlZjxCYWNr
ZW5kRGlzcGF0Y2hlcj4mJiBiYWNrZW5kRGlzcGF0Y2hlciwgaW50IGlkKSA6IEJhY2tlbmREaXNw
YXRjaGVyOjpDYWxsYmFja0Jhc2UoV1RGTW92ZShiYWNrZW5kRGlzcGF0Y2hlciksIGlkKSB7IH0K
LQotdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5j
T3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjazo6c2VuZFN1Y2Nlc3MoUmVmUHRyPEpTT046OkFy
cmF5T2Y8U3RyaW5nPj4mJiBjb2x1bW5OYW1lcywgT3B0aW9uYWw8U3RyaW5nPiYgbm90ZXMsIE9w
dGlvbmFsPGRvdWJsZT4mIHRpbWVzdGFtcCwgT3B0aW9uYWw8SlNPTjo6T2JqZWN0PiYgdmFsdWVz
LCBPcHRpb25hbDxKU09OOjpWYWx1ZT4mIHBheWxvYWQsIE9wdGlvbmFsPGludD4mIGRhdGFiYXNl
SWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiYgc3FsRXJy
b3IsIE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3Jz
PiBzY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xv
ckxpc3Q+JiYgYWx0ZXJuYXRlQ29sb3JzLCBPcHRpb25hbDxEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVySGFuZGxlcjo6UHJpbnRDb2xvcj4gcHJpbnRDb2xvcikKLXsKLSAgICBSZWY8SlNPTjo6T2Jq
ZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgaWYgKGNvbHVt
bk5hbWVzKQotICAgICAgICBqc29uTWVzc2FnZS0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBj
b2x1bW5OYW1lcyk7Ci0gICAgaWYgKG5vdGVzLmhhc1ZhbHVlKCkpCi0gICAgICAgIGpzb25NZXNz
YWdlLT5zZXRTdHJpbmcoIm5vdGVzIl9zLCAqbm90ZXMpOwotICAgIGlmICh0aW1lc3RhbXAuaGFz
VmFsdWUoKSkKLSAgICAgICAganNvbk1lc3NhZ2UtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCAq
dGltZXN0YW1wKTsKLSAgICBpZiAodmFsdWVzLmhhc1ZhbHVlKCkpCi0gICAgICAgIGpzb25NZXNz
YWdlLT5zZXRPYmplY3QoInZhbHVlcyJfcywgKnZhbHVlcyk7Ci0gICAgaWYgKHBheWxvYWQuaGFz
VmFsdWUoKSkKLSAgICAgICAganNvbk1lc3NhZ2UtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCAqcGF5
bG9hZCk7Ci0gICAgaWYgKGRhdGFiYXNlSWQuaGFzVmFsdWUoKSkKLSAgICAgICAganNvbk1lc3Nh
Z2UtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsICpkYXRhYmFzZUlkKTsKLSAgICBpZiAoc3Fs
RXJyb3IpCi0gICAgICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBzcWxF
cnJvcik7Ci0gICAgaWYgKHNjcmVlbkNvbG9yLmhhc1ZhbHVlKCkpCi0gICAgICAgIGpzb25NZXNz
YWdlLT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCAqc2NyZWVuQ29sb3IpOwotICAgIGlmIChh
bHRlcm5hdGVDb2xvcnMpCi0gICAgICAgIGpzb25NZXNzYWdlLT5zZXRBcnJheSgiYWx0ZXJuYXRl
Q29sb3JzIl9zLCBhbHRlcm5hdGVDb2xvcnMpOwotICAgIGlmIChwcmludENvbG9yLmhhc1ZhbHVl
KCkpCi0gICAgICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsICpwcmlu
dENvbG9yKTsKLSAgICBDYWxsYmFja0Jhc2U6OnNlbmRTdWNjZXNzKFdURk1vdmUoanNvbk1lc3Nh
Z2UpKTsKLX0KLQotdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMQXN5
bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBwYXJhbWV0ZXJzKQotewotICAgIGludCBpbl9kYXRhYmFzZUlkID0gbV9iYWNrZW5kRGlz
cGF0Y2hlci0+Z2V0SW50ZWdlcihwYXJhbWV0ZXJzLmdldCgpLCAiZGF0YWJhc2VJZCJfcywgbnVs
bHB0cik7Ci0gICAgU3RyaW5nIGluX3F1ZXJ5ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3Ry
aW5nKHBhcmFtZXRlcnMuZ2V0KCksICJxdWVyeSJfcywgbnVsbHB0cik7Ci0gICAgaWYgKG1fYmFj
a2VuZERpc3BhdGNoZXItPmhhc1Byb3RvY29sRXJyb3JzKCkpIHsKLSAgICAgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxp
ZFBhcmFtcywgIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnRGF0YWJhc2UuZXhlY3V0ZVNRTEFz
eW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMnIGNhbid0IGJlIHByb2Nlc3NlZCJfcyk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKLSAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJu
YXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMocmVxdWVz
dElkLCBpbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0j
ZW5kaWYKLQotICAgIFJlZjxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0
ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjaz4gY2FsbGJhY2sgPSBhZG9wdFJl
ZigqbmV3IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNP
cHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrKG1fYmFja2VuZERpc3BhdGNoZXIuY29weVJlZigp
LCByZXF1ZXN0SWQpKTsKLSAgICBtX2FnZW50LT5leGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVy
blZhbHVlcyhpbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSwgY2FsbGJhY2suY29weVJlZigpKTsKLQot
fQotCi12b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5jKGxvbmcg
cmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpCi17Ci0gICAgaW50
IGluX2RhdGFiYXNlSWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRJbnRlZ2VyKHBhcmFtZXRl
cnMuZ2V0KCksICJkYXRhYmFzZUlkIl9zLCBudWxscHRyKTsKLSAgICBTdHJpbmcgaW5fcXVlcnkg
PSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgInF1ZXJ5
Il9zLCBudWxscHRyKTsKLSAgICBpZiAobV9iYWNrZW5kRGlzcGF0Y2hlci0+aGFzUHJvdG9jb2xF
cnJvcnMoKSkgewotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVy
cm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCAiU29tZSBhcmd1bWVudHMgb2Yg
bWV0aG9kICdEYXRhYmFzZS5leGVjdXRlU1FMU3luYycgY2FuJ3QgYmUgcHJvY2Vzc2VkIl9zKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQotICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAg
bV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5leGVjdXRlU1FMU3luYyhyZXF1ZXN0SWQsIGluX2RhdGFi
YXNlSWQsIGluX3F1ZXJ5KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAg
RXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiBvdXRf
Y29sdW1uTmFtZXM7Ci0gICAgU3RyaW5nIG91dF9ub3RlczsKLSAgICBkb3VibGUgb3V0X3RpbWVz
dGFtcDsKLSAgICBKU09OOjpPYmplY3Qgb3V0X3ZhbHVlczsKLSAgICBKU09OOjpWYWx1ZSBvdXRf
cGF5bG9hZDsKLSAgICBpbnQgb3V0X2RhdGFiYXNlSWQ7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gb3V0X3NxbEVycm9yOwotICAgIFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiBvdXRfYWx0ZXJuYXRlQ29sb3Jz
OwotICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzIG91dF9z
Y3JlZW5Db2xvcjsKLSAgICBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRD
b2xvciBvdXRfcHJpbnRDb2xvcjsKLSAgICBtX2FnZW50LT5leGVjdXRlU1FMU3luYyhlcnJvciwg
aW5fZGF0YWJhc2VJZCwgaW5fcXVlcnksIG91dF9jb2x1bW5OYW1lcywgJm91dF9ub3RlcywgJm91
dF90aW1lc3RhbXAsIG91dF92YWx1ZXMsICZvdXRfcGF5bG9hZCwgJm91dF9kYXRhYmFzZUlkLCBv
dXRfc3FsRXJyb3IsIG91dF9hbHRlcm5hdGVDb2xvcnMsICZvdXRfc2NyZWVuQ29sb3IsICZvdXRf
cHJpbnRDb2xvcik7Ci0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7Ci0gICAgICAgIHJlc3Vs
dC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBvdXRfY29sdW1uTmFtZXMpOwotICAgICAgICBy
ZXN1bHQtPnNldFN0cmluZygibm90ZXMiX3MsIG91dF9ub3Rlcyk7Ci0gICAgICAgIHJlc3VsdC0+
c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIG91dF90aW1lc3RhbXApOwotICAgICAgICByZXN1bHQt
PnNldE9iamVjdCgidmFsdWVzIl9zLCBvdXRfdmFsdWVzKTsKLSAgICAgICAgcmVzdWx0LT5zZXRW
YWx1ZSgicGF5bG9hZCJfcywgb3V0X3BheWxvYWQpOwotICAgICAgICByZXN1bHQtPnNldEludGVn
ZXIoImRhdGFiYXNlSWQiX3MsIG91dF9kYXRhYmFzZUlkKTsKLSAgICAgICAgcmVzdWx0LT5zZXRP
YmplY3QoInNxbEVycm9yIl9zLCBvdXRfc3FsRXJyb3IpOwotICAgICAgICByZXN1bHQtPnNldEFy
cmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIG91dF9hbHRlcm5hdGVDb2xvcnMpOwotICAgICAgICBy
ZXN1bHQtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRl
c3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShvdXRfc2NyZWVuQ29sb3IpKTsKLSAgICAg
ICAgcmVzdWx0LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShvdXRfcHJpbnRDb2xvcikpOwotICAg
IH0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBl
bHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFj
a2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Ci19Ci0KLURhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNDYWxsYmFjazo6RXhl
Y3V0ZVNRTEFzeW5jQ2FsbGJhY2soUmVmPEJhY2tlbmREaXNwYXRjaGVyPiYmIGJhY2tlbmREaXNw
YXRjaGVyLCBpbnQgaWQpIDogQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZShXVEZNb3Zl
KGJhY2tlbmREaXNwYXRjaGVyKSwgaWQpIHsgfQotCi12b2lkIERhdGFiYXNlQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNDYWxsYmFjazo6c2VuZFN1Y2Nlc3MoUmVmUHRy
PEpTT046OkFycmF5T2Y8U3RyaW5nPj4mJiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBub3Rl
cywgZG91YmxlIHRpbWVzdGFtcCwgSlNPTjo6T2JqZWN0IHZhbHVlcywgSlNPTjo6VmFsdWUgcGF5
bG9hZCwgaW50IGRhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFz
ZTo6RXJyb3I+JiYgc3FsRXJyb3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmlt
YXJ5Q29sb3JzIHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6OkNvbG9yTGlzdD4mJiBhbHRlcm5hdGVDb2xvcnMsIERhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyOjpQcmludENvbG9yIHByaW50Q29sb3IpCi17Ci0gICAgUmVmPEpTT046Ok9iamVj
dD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdl
LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIGNvbHVtbk5hbWVzKTsKLSAgICBqc29uTWVzc2Fn
ZS0+c2V0U3RyaW5nKCJub3RlcyJfcywgbm90ZXMpOwotICAgIGpzb25NZXNzYWdlLT5zZXREb3Vi
bGUoInRpbWVzdGFtcCJfcywgdGltZXN0YW1wKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0
KCJ2YWx1ZXMiX3MsIHZhbHVlcyk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFZhbHVlKCJwYXlsb2Fk
Il9zLCBwYXlsb2FkKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJf
cywgZGF0YWJhc2VJZCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldE9iamVjdCgic3FsRXJyb3IiX3Ms
IHNxbEVycm9yKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywg
SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKHNj
cmVlbkNvbG9yKSk7Ci0gICAganNvbk1lc3NhZ2UtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMi
X3MsIGFsdGVybmF0ZUNvbG9ycyk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygicHJpbnRD
b2xvciJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFu
dFZhbHVlKHByaW50Q29sb3IpKTsKLSAgICBDYWxsYmFja0Jhc2U6OnNlbmRTdWNjZXNzKFdURk1v
dmUoanNvbk1lc3NhZ2UpKTsKLX0KLQotdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpl
eGVjdXRlU1FMQXN5bmMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFy
YW1ldGVycykKLXsKLSAgICBpbnQgaW5fZGF0YWJhc2VJZCA9IG1fYmFja2VuZERpc3BhdGNoZXIt
PmdldEludGVnZXIocGFyYW1ldGVycy5nZXQoKSwgImRhdGFiYXNlSWQiX3MsIG51bGxwdHIpOwot
ICAgIFN0cmluZyBpbl9xdWVyeSA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwYXJh
bWV0ZXJzLmdldCgpLCAicXVlcnkiX3MsIG51bGxwdHIpOwotICAgIGlmIChtX2JhY2tlbmREaXNw
YXRjaGVyLT5oYXNQcm90b2NvbEVycm9ycygpKSB7Ci0gICAgICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMs
ICJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJ0RhdGFiYXNlLmV4ZWN1dGVTUUxBc3luYycgY2Fu
J3QgYmUgcHJvY2Vzc2VkIl9zKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotI2lmIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotICAgIGlmIChtX2FsdGVybmF0ZURp
c3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5leGVjdXRlU1FMQXN5
bmMocmVxdWVzdElkLCBpbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0jZW5kaWYKLQotICAgIFJlZjxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxl
cjo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2s+IGNhbGxiYWNrID0gYWRvcHRSZWYoKm5ldyBEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2sobV9i
YWNrZW5kRGlzcGF0Y2hlci5jb3B5UmVmKCksIHJlcXVlc3RJZCkpOwotICAgIG1fYWdlbnQtPmV4
ZWN1dGVTUUxBc3luYyhpbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSwgY2FsbGJhY2suY29weVJlZigp
KTsKLQotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0
QmFja2VuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlz
cGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdp
dGgtYXN5bmMtYXR0cmlidXRlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3Rz
LmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEZyb250ZW5kUm91dGVy
OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5k
RGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMu
Y3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3lu
Yy1hdHRyaWJ1dGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hl
cnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVy
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9y
IHsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEZyb250
ZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3Rz
LmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5j
LWF0dHJpYnV0ZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJv
dG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5hbWVzcGFjZSBJ
bnNwZWN0b3IgewotCi0KLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLS8vIEZvcndhcmQg
ZGVjbGFyYXRpb25zLgotbmFtZXNwYWNlIERhdGFiYXNlIHsKLWNsYXNzIEVycm9yOwotZW51bSBj
bGFzcyBQcmltYXJ5Q29sb3JzOwotfSAvLyBEYXRhYmFzZQotLy8gRW5kIG9mIGZvcndhcmQgZGVj
bGFyYXRpb25zLgotCi0KLS8vIFR5cGVkZWZzLgotbmFtZXNwYWNlIERhdGFiYXNlIHsKLS8qIFVu
aXF1ZSBpZGVudGlmaWVyIG9mIERhdGFiYXNlIG9iamVjdC4gKi8KLXR5cGVkZWYgaW50IERhdGFi
YXNlSWQ7Ci10eXBlZGVmIEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6OlByaW1hcnlDb2xvcnM+IENvbG9yTGlzdDsKLX0gLy8gRGF0YWJhc2UKLS8vIEVuZCBvZiB0
eXBlZGVmcy4KLQotbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKLQotU3RyaW5nIGdldEVudW1Db25z
dGFudFZhbHVlKGludCBjb2RlKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdldEVu
dW1Db25zdGFudFZhbHVlKFQgZW51bVZhbHVlKQotewotICAgIHJldHVybiBnZXRFbnVtQ29uc3Rh
bnRWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KGVudW1WYWx1ZSkpOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBUZXN0SGVscGVycwotCi1uYW1lc3BhY2UgRGF0YWJhc2UgewotLyogICovCi1lbnVtIGNsYXNz
IFByaW1hcnlDb2xvcnMgewotICAgIFJlZCA9IDAsCi0gICAgR3JlZW4gPSAxLAotICAgIEJsdWUg
PSAyLAotfTsgLy8gZW51bSBjbGFzcyBQcmltYXJ5Q29sb3JzCi0vKiBEYXRhYmFzZSBlcnJvci4g
Ki8KLWNsYXNzIEVycm9yIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewotcHVibGljOgotICAg
IGVudW0gewotICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCi0gICAgICAgIE1lc3NhZ2VTZXQgPSAx
IDw8IDAsCi0gICAgICAgIENvZGVTZXQgPSAxIDw8IDEsCi0gICAgICAgIEFsbEZpZWxkc1NldCA9
IChNZXNzYWdlU2V0IHwgQ29kZVNldCkKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8aW50IFNUQVRF
PgotICAgIGNsYXNzIEJ1aWxkZXIgewotICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0cjxKU09O
OjpPYmplY3Q+IG1fcmVzdWx0OwotCi0gICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVy
PFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIEJ1aWxkZXIoUmVmPC8qRXJyb3IqL0pTT046Ok9iamVjdD4mJiBvYmpl
Y3QpCi0gICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKLSAgICAgICAgewot
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJf
Y3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZnJpZW5kIGNs
YXNzIEVycm9yOwotICAgIHB1YmxpYzoKLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTWVzc2Fn
ZVNldD4mIHNldE1lc3NhZ2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICAgICAgewotICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE1lc3NhZ2VTZXQpLCBwcm9wZXJ0eV9tZXNz
YWdlX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1lc3Nh
Z2UiX3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TWVzc2FnZVNldD4o
KTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2RlU2V0PiYgc2V0Q29k
ZShpbnQgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBDb2RlU2V0KSwgcHJvcGVydHlfY29kZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0SW50ZWdlcigiY29kZSJfcywgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxDb2RlU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgUmVmPEVycm9yPiBy
ZWxlYXNlKCkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0g
QWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKLSAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKHNpemVvZihFcnJvcikgPT0gc2l6ZW9mKEpTT046Ok9iamVjdCksIGNhbm5vdF9jYXN0
KTsKLQotICAgICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4ganNvblJlc3VsdCA9IG1fcmVzdWx0
LnJlbGVhc2VOb25OdWxsKCk7Ci0gICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFdURk1vdmUoKnJl
aW50ZXJwcmV0X2Nhc3Q8UmVmPEVycm9yPio+KCZqc29uUmVzdWx0KSk7Ci0gICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIC8qCi0gICAgICogU3ludGhl
dGljIGNvbnN0cnVjdG9yOgotICAgICAqIFJlZjxFcnJvcj4gcmVzdWx0ID0gRXJyb3I6OmNyZWF0
ZSgpCi0gICAgICogICAgIC5zZXRNZXNzYWdlKC4uLikKLSAgICAgKiAgICAgLnNldENvZGUoLi4u
KQotICAgICAqICAgICAucmVsZWFzZSgpOwotICAgICAqLwotICAgIHN0YXRpYyBCdWlsZGVyPE5v
RmllbGRzU2V0PiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVs
ZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOwotICAgIH0KLX07Ci0KLX0gLy8gRGF0YWJh
c2UKLQotCi0KLW5hbWVzcGFjZSBUZXN0SGVscGVycyB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFBy
b3RvY29sRW51bVR5cGU+Ci1PcHRpb25hbDxQcm90b2NvbEVudW1UeXBlPiBwYXJzZUVudW1WYWx1
ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJik7Ci0KLS8vIEVudW1zIGluIHRoZSAnRGF0YWJhc2Un
IERvbWFpbgotdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6OlByaW1hcnlDb2xvcnM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlBy
b3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4oY29uc3QgU3RyaW5nJik7Ci0KLX0gLy8g
bmFtZXNwYWNlIFRlc3RIZWxwZXJzCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgotCi1uYW1lc3BhY2UgV1RGIHsKLQotdGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwotCi0vLyBIYXNoIGRlY2xhcmF0aW9ucyBpbiB0aGUg
J0RhdGFiYXNlJyBEb21haW4KLXRlbXBsYXRlPD4KLXN0cnVjdCBEZWZhdWx0SGFzaDxJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gewotICAgIHR5cGVkZWYgSW50
SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gSGFzaDsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmpl
Y3RzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUu
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotCi0jaW5jbHVk
ZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1l
c3BhY2UgSW5zcGVjdG9yIHsKLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotbmFtZXNwYWNlIFRl
c3RIZWxwZXJzIHsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFs
dWVzW10gPSB7Ci0gICAgInJlZCIsCi0gICAgImdyZWVuIiwKLSAgICAiYmx1ZSIsCi0gICAgImN5
YW4iLAotICAgICJtYWdlbnRhIiwKLSAgICAieWVsbG93IiwKLSAgICAiYmxhY2siLAotfTsKLQot
U3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7Ci0gICAgcmV0dXJuIGVudW1f
Y29uc3RhbnRfdmFsdWVzW2NvZGVdOwotfQotCi0vLyBFbnVtcyBpbiB0aGUgJ0RhdGFiYXNlJyBE
b21haW4KLXRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNl
OjpQcmltYXJ5Q29sb3JzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90
b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJp
bmcpCi17Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0gewotICAg
ICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3Jz
OjpSZWQsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlBy
aW1hcnlDb2xvcnM6OkdyZWVuLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzOjpCbHVlLAotICAgIH07Ci0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCAzOyArK2kpCi0gICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2Nv
bnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCi0gICAgICAgICAgICByZXR1cm4gKElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzKWNvbnN0YW50VmFsdWVz
W2ldOwotCi0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotCi19IC8vIG5hbWVzcGFjZSBU
ZXN0SGVscGVycwotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLQot
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUu
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+
Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi1AcHJvdG9jb2wgVGVzdFByb3RvY29sRGF0
YWJhc2VEb21haW5IYW5kbGVyOwotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi1jbGFzcyBP
YmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRl
cm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKLXB1YmxpYzoKLSAgICBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
cihpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxl
Z2F0ZSA9IGhhbmRsZXI7IH0KLSAgICB2b2lkIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXMobG9uZyByZXF1ZXN0SWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGlu
X3F1ZXJ5KSBmaW5hbDsKLSAgICB2b2lkIGV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFs
dWVzKGxvbmcgcmVxdWVzdElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9x
dWVyeSkgZmluYWw7Ci0gICAgdm9pZCBleGVjdXRlU1FMU3luYyhsb25nIHJlcXVlc3RJZCwgaW50
IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpIGZpbmFsOwotICAgIHZvaWQg
ZXhlY3V0ZVNRTEFzeW5jKGxvbmcgcmVxdWVzdElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3Qg
U3RyaW5nJiBpbl9xdWVyeSkgZmluYWw7Ci1wcml2YXRlOgotICAgIFJldGFpblB0cjxpZDxUZXN0
UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwotfTsKLQotfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERp
c3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRj
aGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgt
YXN5bmMtYXR0cmlidXRlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5k
RGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW5j
bHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05W
YWx1ZXMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXZvaWQgT2JqQ0luc3BlY3RvckRh
dGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1
ZXMobG9uZyByZXF1ZXN0SWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1
ZXJ5KQotewotICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rv
cihleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzV2l0aEVycm9yQ2FsbGJhY2s6c3Vj
Y2Vzc0NhbGxiYWNrOmRhdGFiYXNlSWQ6cXVlcnk6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3Bh
dGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVy
OjpNZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS5leGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJu
VmFsdWVzJyB3YXMgbm90IGZvdW5kIl9zKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlkIGVy
cm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6
OlNlcnZlckVycm9yLCBlcnJvcik7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQ
ZW5kaW5nRXJyb3JzKCk7Ci0gICAgfTsKLQotICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oTlNB
cnJheS8qPE5TU3RyaW5nPiovICoqY29sdW1uTmFtZXMsIE5TU3RyaW5nICoqbm90ZXMsIGRvdWJs
ZSAqdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKip2YWx1ZXMsIFJXSVByb3RvY29s
SlNPTk9iamVjdCAqKnBheWxvYWQsIGludCAqZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJh
c2VFcnJvciAqKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgKnNj
cmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiphbHRlcm5hdGVDb2xvcnMsIFRlc3RQ
cm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29s
b3IgKnByaW50Q29sb3IpIHsKLSAgICAgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0T2JqZWN0
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9C
QURfT1BUSU9OQUxfUEFSQU1FVEVSKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7Ci0gICAg
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihub3RlcywgQCJu
b3RlcyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVU
RVIodmFsdWVzLCBAInZhbHVlcyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9P
UFRJT05BTF9QQVJBTUVURVIocGF5bG9hZCwgQCJwYXlsb2FkIik7Ci0gICAgICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihzcWxFcnJvciwgQCJzcWxFcnJvciIp
OwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoYWx0
ZXJuYXRlQ29sb3JzLCBAImFsdGVybmF0ZUNvbG9ycyIpOwotICAgICAgICBpZiAoY29sdW1uTmFt
ZXMpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywg
dG9KU09OU3RyaW5nQXJyYXkoKmNvbHVtbk5hbWVzKSk7Ci0gICAgICAgIGlmIChub3RlcykKLSAg
ICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJub3RlcyJfcywgKm5vdGVzKTsKLSAg
ICAgICAgaWYgKHRpbWVzdGFtcCkKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0RG91Ymxl
KCJ0aW1lc3RhbXAiX3MsICp0aW1lc3RhbXApOwotICAgICAgICBpZiAodmFsdWVzKQotICAgICAg
ICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgWyp2YWx1ZXMgdG9KU09O
T2JqZWN0XSk7Ci0gICAgICAgIGlmIChwYXlsb2FkKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0
LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgWypwYXlsb2FkIHRvSlNPTk9iamVjdF0pOwotICAgICAg
ICBpZiAoZGF0YWJhc2VJZCkKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0SW50ZWdlcigi
ZGF0YWJhc2VJZCJfcywgKmRhdGFiYXNlSWQpOwotICAgICAgICBpZiAoc3FsRXJyb3IpCi0gICAg
ICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIFsqc3FsRXJyb3Ig
dG9KU09OT2JqZWN0XSk7Ci0gICAgICAgIGlmIChzY3JlZW5Db2xvcikKLSAgICAgICAgICAgIHJl
c3VsdE9iamVjdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgdG9Qcm90b2NvbFN0cmluZygq
c2NyZWVuQ29sb3IpKTsKLSAgICAgICAgaWYgKGFsdGVybmF0ZUNvbG9ycykKLSAgICAgICAgICAg
IHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5n
QXJyYXkoKmFsdGVybmF0ZUNvbG9ycykpOwotICAgICAgICBpZiAocHJpbnRDb2xvcikKLSAgICAg
ICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCB0b1Byb3RvY29s
U3RyaW5nKCpwcmludENvbG9yKSk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRS
ZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0T2JqZWN0KSwgZmFsc2UpOwotICAgIH07
Ci0KLSAgICBpbnQgb19pbl9kYXRhYmFzZUlkID0gaW5fZGF0YWJhc2VJZDsKLSAgICBOU1N0cmlu
ZyAqb19pbl9xdWVyeSA9IGluX3F1ZXJ5OwotCi0gICAgW21fZGVsZWdhdGUgZXhlY3V0ZVNRTFN5
bmNPcHRpb25hbFJldHVyblZhbHVlc1dpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3Vj
Y2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjayBkYXRhYmFzZUlkOm9faW5fZGF0YWJhc2VJZCBx
dWVyeTpvX2luX3F1ZXJ5XTsKLX0KLQotdm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyByZXF1
ZXN0SWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KQotewotICAg
IGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihleGVjdXRlU1FM
QXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1dpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFj
azpkYXRhYmFzZUlkOnF1ZXJ5OildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJl
cG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90
Rm91bmQsICInRGF0YWJhc2UuZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMnIHdh
cyBub3QgZm91bmQiX3MpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGlu
Z0Vycm9ycygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWQgZXJyb3JDYWxsYmFj
ayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJl
cG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJy
b3IsIGVycm9yKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJv
cnMoKTsKLSAgICB9OwotCi0gICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihOU0FycmF5Lyo8TlNT
dHJpbmc+Ki8gKipjb2x1bW5OYW1lcywgTlNTdHJpbmcgKipub3RlcywgZG91YmxlICp0aW1lc3Rh
bXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0
ICoqcGF5bG9hZCwgaW50ICpkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoq
c3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqc2NyZWVuQ29sb3Is
IE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0
YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3IgKnByaW50
Q29sb3IpIHsKLSAgICAgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9O
QUxfUEFSQU1FVEVSKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7Ci0gICAgICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihub3RlcywgQCJub3RlcyIpOwot
ICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIodmFsdWVz
LCBAInZhbHVlcyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9Q
QVJBTUVURVIocGF5bG9hZCwgQCJwYXlsb2FkIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihzcWxFcnJvciwgQCJzcWxFcnJvciIpOwotICAgICAg
ICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoYWx0ZXJuYXRlQ29s
b3JzLCBAImFsdGVybmF0ZUNvbG9ycyIpOwotICAgICAgICBpZiAoY29sdW1uTmFtZXMpCi0gICAg
ICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgdG9KU09OU3Ry
aW5nQXJyYXkoKmNvbHVtbk5hbWVzKSk7Ci0gICAgICAgIGlmIChub3RlcykKLSAgICAgICAgICAg
IHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJub3RlcyJfcywgKm5vdGVzKTsKLSAgICAgICAgaWYg
KHRpbWVzdGFtcCkKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0RG91YmxlKCJ0aW1lc3Rh
bXAiX3MsICp0aW1lc3RhbXApOwotICAgICAgICBpZiAodmFsdWVzKQotICAgICAgICAgICAgcmVz
dWx0T2JqZWN0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgWyp2YWx1ZXMgdG9KU09OT2JqZWN0XSk7
Ci0gICAgICAgIGlmIChwYXlsb2FkKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRWYWx1
ZSgicGF5bG9hZCJfcywgWypwYXlsb2FkIHRvSlNPTk9iamVjdF0pOwotICAgICAgICBpZiAoZGF0
YWJhc2VJZCkKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJ
ZCJfcywgKmRhdGFiYXNlSWQpOwotICAgICAgICBpZiAoc3FsRXJyb3IpCi0gICAgICAgICAgICBy
ZXN1bHRPYmplY3QtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIFsqc3FsRXJyb3IgdG9KU09OT2Jq
ZWN0XSk7Ci0gICAgICAgIGlmIChzY3JlZW5Db2xvcikKLSAgICAgICAgICAgIHJlc3VsdE9iamVj
dC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgdG9Qcm90b2NvbFN0cmluZygqc2NyZWVuQ29s
b3IpKTsKLSAgICAgICAgaWYgKGFsdGVybmF0ZUNvbG9ycykKLSAgICAgICAgICAgIHJlc3VsdE9i
amVjdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5nQXJyYXkoKmFs
dGVybmF0ZUNvbG9ycykpOwotICAgICAgICBpZiAocHJpbnRDb2xvcikKLSAgICAgICAgICAgIHJl
c3VsdE9iamVjdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKCpw
cmludENvbG9yKSk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShy
ZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0T2JqZWN0KSwgZmFsc2UpOwotICAgIH07Ci0KLSAgICBp
bnQgb19pbl9kYXRhYmFzZUlkID0gaW5fZGF0YWJhc2VJZDsKLSAgICBOU1N0cmluZyAqb19pbl9x
dWVyeSA9IGluX3F1ZXJ5OwotCi0gICAgW21fZGVsZWdhdGUgZXhlY3V0ZVNRTEFzeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXNXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxs
YmFjazpzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDpvX2luX2RhdGFiYXNlSWQgcXVlcnk6b19p
bl9xdWVyeV07Ci19Ci0KLXZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXI6OmV4ZWN1dGVTUUxTeW5jKGxvbmcgcmVxdWVzdElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29u
c3QgU3RyaW5nJiBpbl9xdWVyeSkKLXsKLSAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9T
ZWxlY3RvcjpAc2VsZWN0b3IoZXhlY3V0ZVNRTFN5bmNXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNz
Q2FsbGJhY2s6ZGF0YWJhc2VJZDpxdWVyeTopXSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1l
dGhvZE5vdEZvdW5kLCAiJ0RhdGFiYXNlLmV4ZWN1dGVTUUxTeW5jJyB3YXMgbm90IGZvdW5kIl9z
KTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5n
ICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVy
cm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7Ci0g
ICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgfTsK
LQotICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiovICpjb2x1
bW5OYW1lcywgTlNTdHJpbmcgKm5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSV0lQcm90b2NvbEpT
T05PYmplY3QgKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkLCBpbnQgZGF0
YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqc3FsRXJyb3IsIE5TQXJyYXkvKjxO
U1N0cmluZz4qLyAqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlD
b2xvcnMgc2NyZWVuQ29sb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmlu
dENvbG9yIHByaW50Q29sb3IpIHsKLSAgICAgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0T2Jq
ZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9SRVFVSVJFRF9QQVJBTUVURVIoY29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsKLSAgICAg
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIobm90ZXMsIEAibm90ZXMi
KTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIodmFsdWVz
LCBAInZhbHVlcyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFN
RVRFUihwYXlsb2FkLCBAInBheWxvYWQiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9S
RVFVSVJFRF9QQVJBTUVURVIoc3FsRXJyb3IsIEAic3FsRXJyb3IiKTsKLSAgICAgICAgVEhST1df
RVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoYWx0ZXJuYXRlQ29sb3JzLCBAImFsdGVy
bmF0ZUNvbG9ycyIpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJjb2x1bW5OYW1l
cyJfcywgdG9KU09OU3RyaW5nQXJyYXkoY29sdW1uTmFtZXMpKTsKLSAgICAgICAgcmVzdWx0T2Jq
ZWN0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBub3Rlcyk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+
c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIHRpbWVzdGFtcCk7Ci0gICAgICAgIHJlc3VsdE9iamVj
dC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFt2YWx1ZXMgdG9KU09OT2JqZWN0XSk7Ci0gICAgICAg
IHJlc3VsdE9iamVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFtwYXlsb2FkIHRvSlNPTk9iamVj
dF0pOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsIGRh
dGFiYXNlSWQpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdCgic3FsRXJyb3IiX3Ms
IFtzcWxFcnJvciB0b0pTT05PYmplY3RdKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJh
eSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCB0b0pTT05TdHJpbmdBcnJheShhbHRlcm5hdGVDb2xvcnMp
KTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCB0b1By
b3RvY29sU3RyaW5nKHNjcmVlbkNvbG9yKSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3Ry
aW5nKCJwcmludENvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKHByaW50Q29sb3IpKTsKLSAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShy
ZXN1bHRPYmplY3QpLCBmYWxzZSk7Ci0gICAgfTsKLQotICAgIGludCBvX2luX2RhdGFiYXNlSWQg
PSBpbl9kYXRhYmFzZUlkOwotICAgIE5TU3RyaW5nICpvX2luX3F1ZXJ5ID0gaW5fcXVlcnk7Ci0K
LSAgICBbbV9kZWxlZ2F0ZSBleGVjdXRlU1FMU3luY1dpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2Fs
bGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjayBkYXRhYmFzZUlkOm9faW5fZGF0
YWJhc2VJZCBxdWVyeTpvX2luX3F1ZXJ5XTsKLX0KLQotdm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTEFzeW5jKGxvbmcgcmVxdWVzdElkLCBpbnQg
aW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkKLXsKLSAgICBpZiAoIVttX2Rl
bGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoZXhlY3V0ZVNRTEFzeW5jV2l0aEVy
cm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOmRhdGFiYXNlSWQ6cXVlcnk6KV0pIHsKLSAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJh
Y2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS5leGVjdXRlU1FMQXN5
bmMnIHdhcyBub3QgZm91bmQiX3MpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5k
UGVuZGluZ0Vycm9ycygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWQgZXJyb3JD
YWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVy
KCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2Vy
dmVyRXJyb3IsIGVycm9yKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRp
bmdFcnJvcnMoKTsKLSAgICB9OwotCi0gICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihOU0FycmF5
Lyo8TlNTdHJpbmc+Ki8gKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqbm90ZXMsIGRvdWJsZSB0aW1l
c3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmpl
Y3QgKnBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpz
cWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzIHNjcmVlbkNvbG9yLCBO
U0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJh
c2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yIHByaW50Q29sb3IpIHsKLSAgICAgICAgUmVmPEpT
T046Ok9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICAg
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoY29sdW1uTmFtZXMsIEAi
Y29sdW1uTmFtZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJB
TUVURVIobm90ZXMsIEAibm90ZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFV
SVJFRF9QQVJBTUVURVIodmFsdWVzLCBAInZhbHVlcyIpOwotICAgICAgICBUSFJPV19FWENFUFRJ
T05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihwYXlsb2FkLCBAInBheWxvYWQiKTsKLSAgICAgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoc3FsRXJyb3IsIEAic3FsRXJy
b3IiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoYWx0
ZXJuYXRlQ29sb3JzLCBAImFsdGVybmF0ZUNvbG9ycyIpOwotICAgICAgICByZXN1bHRPYmplY3Qt
PnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgdG9KU09OU3RyaW5nQXJyYXkoY29sdW1uTmFtZXMp
KTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBub3Rlcyk7Ci0g
ICAgICAgIHJlc3VsdE9iamVjdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIHRpbWVzdGFtcCk7
Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFt2YWx1ZXMgdG9K
U09OT2JqZWN0XSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3Ms
IFtwYXlsb2FkIHRvSlNPTk9iamVjdF0pOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldEludGVn
ZXIoImRhdGFiYXNlSWQiX3MsIGRhdGFiYXNlSWQpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNl
dE9iamVjdCgic3FsRXJyb3IiX3MsIFtzcWxFcnJvciB0b0pTT05PYmplY3RdKTsKLSAgICAgICAg
cmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5n
KHNjcmVlbkNvbG9yKSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoImFsdGVybmF0
ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5nQXJyYXkoYWx0ZXJuYXRlQ29sb3JzKSk7Ci0gICAgICAg
IHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5n
KHByaW50Q29sb3IpKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNl
KHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHRPYmplY3QpLCBmYWxzZSk7Ci0gICAgfTsKLQotICAg
IGludCBvX2luX2RhdGFiYXNlSWQgPSBpbl9kYXRhYmFzZUlkOwotICAgIE5TU3RyaW5nICpvX2lu
X3F1ZXJ5ID0gaW5fcXVlcnk7Ci0KLSAgICBbbV9kZWxlZ2F0ZSBleGVjdXRlU1FMQXN5bmNXaXRo
RXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJh
Y2sgZGF0YWJhc2VJZDpvX2luX2RhdGFiYXNlSWQgcXVlcnk6b19pbl9xdWVyeV07Ci19Ci0KLQot
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFj
a2VuZERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1
cmF0aW9uLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRo
LWFzeW5jLWF0dHJpYnV0ZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KLQotX19hdHRy
aWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAotQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbiwg
c2V0dGVyPXNldERhdGFiYXNlSGFuZGxlcjopIGlkPFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWlu
SGFuZGxlcj4gZGF0YWJhc2VIYW5kbGVyOwotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbi5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25m
aWd1cmF0aW9uLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMt
d2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCi0KLSNp
bXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNr
ZW5kRGlzcGF0Y2hlcnMuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3Bh
dGNoYWJsZUFnZW50Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3Bl
Y3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVy
bmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0K
LUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCi17Ci0gICAgQXVnbWVu
dGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKLSAgICBpZDxUZXN0UHJvdG9j
b2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+IF9kYXRhYmFzZUhhbmRsZXI7Ci19Ci0KLS0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxl
ciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxm
KQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBfY29u
dHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVh
bGxvYwotewotICAgIFtfZGF0YWJhc2VIYW5kbGVyIHJlbGVhc2VdOwotICAgIFtzdXBlciBkZWFs
bG9jXTsKLX0KLQotLSAodm9pZClzZXREYXRhYmFzZUhhbmRsZXI6KGlkPFRlc3RQcm90b2NvbERh
dGFiYXNlRG9tYWluSGFuZGxlcj4paGFuZGxlcgotewotICAgIGlmIChoYW5kbGVyID09IF9kYXRh
YmFzZUhhbmRsZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIFtfZGF0YWJhc2VIYW5kbGVyIHJl
bGVhc2VdOwotICAgIF9kYXRhYmFzZUhhbmRsZXIgPSBbaGFuZGxlciByZXRhaW5dOwotCi0gICAg
YXV0byBhbHRlcm5hdGVEaXNwYXRjaGVyID0gbWFrZVVuaXF1ZTxPYmpDSW5zcGVjdG9yRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7Ci0gICAgYXV0byBhbHRlcm5hdGVBZ2VudCA9
IG1ha2VVbmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8RGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlciwgQWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4+KCJEYXRhYmFzZSJf
cywgKl9jb250cm9sbGVyLCBXVEZNb3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIpKTsKLSAgICBfY29u
dHJvbGxlci0+YXBwZW5kRXh0cmFBZ2VudChXVEZNb3ZlKGFsdGVybmF0ZUFnZW50KSk7Ci19Ci0K
LS0gKGlkPFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4pZGF0YWJhc2VIYW5kbGVy
Ci17Ci0gICAgcmV0dXJuIF9kYXRhYmFzZUhhbmRsZXI7Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVy
bmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9y
dCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0j
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
Y29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4K
LQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgotCi0KLUBj
bGFzcyBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yOwotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRl
Z2VyLCBUZXN0UHJvdG9jb2xQbGF0Zm9ybSkgewotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxs
LAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYywKLSAgICBUZXN0UHJvdG9jb2xQbGF0
Zm9ybUlPUywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TLAotfTsKLQotCi10eXBlZGVm
IE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMpIHsK
LSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNSZWQsCi0gICAgVGVzdFByb3Rv
Y29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzR3JlZW4sCi0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VQ
cmltYXJ5Q29sb3JzQmx1ZSwKLX07Ci0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQ
cm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29s
b3IpIHsKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1
cm5WYWx1ZXNQcmludENvbG9yQ3lhbiwKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVT
UUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yTWFnZW50YSwKLSAgICBUZXN0UHJv
dG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9y
WWVsbG93LAotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJl
dHVyblZhbHVlc1ByaW50Q29sb3JCbGFjaywKLX07Ci0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVn
ZXIsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1
ZXNQcmludENvbG9yKSB7Ci0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNP
cHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JDeWFuLAotICAgIFRlc3RQcm90b2NvbERhdGFi
YXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yTWFnZW50YSwK
LSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFs
dWVzUHJpbnRDb2xvclllbGxvdywKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxB
c3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvckJsYWNrLAotfTsKLQotdHlwZWRlZiBO
U19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50
Q29sb3IpIHsKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xv
ckN5YW4sCi0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3JN
YWdlbnRhLAotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9y
WWVsbG93LAotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9y
QmxhY2ssCi19OwotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xEYXRh
YmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3IpIHsKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFz
ZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JDeWFuLAotICAgIFRlc3RQcm90b2NvbERhdGFiYXNl
RXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvck1hZ2VudGEsCi0gICAgVGVzdFByb3RvY29sRGF0YWJh
c2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yWWVsbG93LAotICAgIFRlc3RQcm90b2NvbERhdGFi
YXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvckJsYWNrLAotfTsKLQotCi1fX2F0dHJpYnV0ZV9f
KCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sRGF0YWJh
c2VFcnJvciA6IFJXSVByb3RvY29sSlNPTk9iamVjdAotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
UGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQ7Ci0tIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICop
anNvbk9iamVjdDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICop
bWVzc2FnZSBjb2RlOihpbnQpY29kZTsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRv
bWljLCBjb3B5KSBOU1N0cmluZyAqbWVzc2FnZTsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAo
bm9uYXRvbWljLCBhc3NpZ24pIGludCBjb2RlOwotQGVuZAotCi1AcHJvdG9jb2wgVGVzdFByb3Rv
Y29sRGF0YWJhc2VEb21haW5IYW5kbGVyIDxOU09iamVjdD4KLUBvcHRpb25hbAotLSAodm9pZCll
eGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQo
XikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZChe
KShOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKipjb2x1bW5OYW1lcywgTlNTdHJpbmcgKipub3Rlcywg
ZG91YmxlICp0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnZhbHVlcywgUldJUHJv
dG9jb2xKU09OT2JqZWN0ICoqcGF5bG9hZCwgaW50ICpkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xE
YXRhYmFzZUVycm9yICoqc3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9y
cyAqc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmFsdGVybmF0ZUNvbG9ycywg
VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJp
bnRDb2xvciAqcHJpbnRDb2xvcikpc3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNlSWQ6KGludClkYXRh
YmFzZUlkIHF1ZXJ5OihOU1N0cmluZyAqKXF1ZXJ5OwotLSAodm9pZClleGVjdXRlU1FMQXN5bmNP
cHRpb25hbFJldHVyblZhbHVlc1dpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICpl
cnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoTlNBcnJheS8qPE5T
U3RyaW5nPiovICoqY29sdW1uTmFtZXMsIE5TU3RyaW5nICoqbm90ZXMsIGRvdWJsZSAqdGltZXN0
YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKip2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVj
dCAqKnBheWxvYWQsIGludCAqZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAq
KnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgKnNjcmVlbkNvbG9y
LCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERh
dGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yICpwcmlu
dENvbG9yKSlzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDooaW50KWRhdGFiYXNlSWQgcXVlcnk6
KE5TU3RyaW5nICopcXVlcnk7Ci0tICh2b2lkKWV4ZWN1dGVTUUxTeW5jV2l0aEVycm9yQ2FsbGJh
Y2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFj
azoodm9pZCheKShOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAq
bm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqdmFsdWVzLCBS
V0lQcm90b2NvbEpTT05PYmplY3QgKnBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBUZXN0UHJvdG9j
b2xEYXRhYmFzZUVycm9yICpzcWxFcnJvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICphbHRlcm5h
dGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyBzY3JlZW5Db2xvciwg
VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3IgcHJpbnRDb2xvcikp
c3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNlSWQ6KGludClkYXRhYmFzZUlkIHF1ZXJ5OihOU1N0cmlu
ZyAqKXF1ZXJ5OwotLSAodm9pZClleGVjdXRlU1FMQXN5bmNXaXRoRXJyb3JDYWxsYmFjazoodm9p
ZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lk
KF4pKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqY29sdW1uTmFtZXMsIE5TU3RyaW5nICpub3Rlcywg
ZG91YmxlIHRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICp2YWx1ZXMsIFJXSVByb3Rv
Y29sSlNPTk9iamVjdCAqcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFi
YXNlRXJyb3IgKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgc2Ny
ZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJv
dG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3IgcHJpbnRDb2xvcikpc3VjY2Vz
c0NhbGxiYWNrIGRhdGFiYXNlSWQ6KGludClkYXRhYmFzZUlkIHF1ZXJ5OihOU1N0cmluZyAqKXF1
ZXJ5OwotQGVuZAotCi0KLQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWls
ZENvbXBhdGliaWxpdHlPYmplY3RzLmg+Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgK
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKLSNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgot
I2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xJbnRlcm5hbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgt
YXN5bmMtYXR0cmlidXRlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3Iv
UldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Igewot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+Ci1PcHRpb25hbDxPYmpDRW51bVR5cGU+
IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKLQotaW5saW5lIFN0cmlu
ZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFBsYXRmb3JtIHZhbHVlKQotewotICAgIHN3
aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1BbGw6Ci0gICAgICAg
IHJldHVybiAiYWxsIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOgot
ICAgICAgICByZXR1cm4gImdlbmVyaWMiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9y
bUlPUzoKLSAgICAgICAgcmV0dXJuICJpb3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0
Zm9ybU1hY09TOgotICAgICAgICByZXR1cm4gIm1hY29zIl9zOwotICAgIH0KLX0KLQotdGVtcGxh
dGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFBsYXRmb3JtPiBmcm9tUHJvdG9jb2xT
dHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gImFsbCIpCi0g
ICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDsKLSAgICBpZiAodmFsdWUgPT0g
ImdlbmVyaWMiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOwot
ICAgIGlmICh2YWx1ZSA9PSAiaW9zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRm
b3JtSU9TOwotICAgIGlmICh2YWx1ZSA9PSAibWFjb3MiKQotICAgICAgICByZXR1cm4gVGVzdFBy
b3RvY29sUGxhdGZvcm1NYWNPUzsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi0KLWlu
bGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlD
b2xvcnMgdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9j
b2xEYXRhYmFzZVByaW1hcnlDb2xvcnNSZWQ6Ci0gICAgICAgIHJldHVybiAicmVkIl9zOwotICAg
IGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzR3JlZW46Ci0gICAgICAgIHJl
dHVybiAiZ3JlZW4iX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xv
cnNCbHVlOgotICAgICAgICByZXR1cm4gImJsdWUiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+
Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzPiBmcm9t
UHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0g
InJlZCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNS
ZWQ7Ci0gICAgaWYgKHZhbHVlID09ICJncmVlbiIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9j
b2xEYXRhYmFzZVByaW1hcnlDb2xvcnNHcmVlbjsKLSAgICBpZiAodmFsdWUgPT0gImJsdWUiKQot
ICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzQmx1ZTsKLSAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJp
bmcoVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVz
UHJpbnRDb2xvciB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQ
cm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29s
b3JDeWFuOgotICAgICAgICByZXR1cm4gImN5YW4iX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xE
YXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yTWFnZW50
YToKLSAgICAgICAgcmV0dXJuICJtYWdlbnRhIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0
YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvclllbGxvdzoK
LSAgICAgICAgcmV0dXJuICJ5ZWxsb3ciX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFz
ZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yQmxhY2s6Ci0gICAg
ICAgIHJldHVybiAiYmxhY2siX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0
aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFs
dWVzUHJpbnRDb2xvcj4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17
Ci0gICAgaWYgKHZhbHVlID09ICJjeWFuIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERh
dGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JDeWFuOwot
ICAgIGlmICh2YWx1ZSA9PSAibWFnZW50YSIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xE
YXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yTWFnZW50
YTsKLSAgICBpZiAodmFsdWUgPT0gInllbGxvdyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9j
b2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yWWVs
bG93OwotICAgIGlmICh2YWx1ZSA9PSAiYmxhY2siKQotICAgICAgICByZXR1cm4gVGVzdFByb3Rv
Y29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvckJs
YWNrOwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90
b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0
dXJuVmFsdWVzUHJpbnRDb2xvciB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBj
YXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1
ZXNQcmludENvbG9yQ3lhbjoKLSAgICAgICAgcmV0dXJuICJjeWFuIl9zOwotICAgIGNhc2UgVGVz
dFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50
Q29sb3JNYWdlbnRhOgotICAgICAgICByZXR1cm4gIm1hZ2VudGEiX3M7Ci0gICAgY2FzZSBUZXN0
UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRD
b2xvclllbGxvdzoKLSAgICAgICAgcmV0dXJuICJ5ZWxsb3ciX3M7Ci0gICAgY2FzZSBUZXN0UHJv
dG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xv
ckJsYWNrOgotICAgICAgICByZXR1cm4gImJsYWNrIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8
PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0
aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gImN5YW4iKQotICAgICAgICByZXR1cm4g
VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1By
aW50Q29sb3JDeWFuOwotICAgIGlmICh2YWx1ZSA9PSAibWFnZW50YSIpCi0gICAgICAgIHJldHVy
biBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVz
UHJpbnRDb2xvck1hZ2VudGE7Ci0gICAgaWYgKHZhbHVlID09ICJ5ZWxsb3ciKQotICAgICAgICBy
ZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZh
bHVlc1ByaW50Q29sb3JZZWxsb3c7Ci0gICAgaWYgKHZhbHVlID09ICJibGFjayIpCi0gICAgICAg
IHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJu
VmFsdWVzUHJpbnRDb2xvckJsYWNrOwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLWlu
bGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVT
UUxTeW5jUHJpbnRDb2xvciB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBjYXNl
IFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yQ3lhbjoKLSAgICAg
ICAgcmV0dXJuICJjeWFuIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRl
U1FMU3luY1ByaW50Q29sb3JNYWdlbnRhOgotICAgICAgICByZXR1cm4gIm1hZ2VudGEiX3M7Ci0g
ICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvclllbGxv
dzoKLSAgICAgICAgcmV0dXJuICJ5ZWxsb3ciX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRh
YmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvckJsYWNrOgotICAgICAgICByZXR1cm4gImJsYWNr
Il9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2Nv
bERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gImN5YW4iKQotICAgICAgICBy
ZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3JDeWFuOwot
ICAgIGlmICh2YWx1ZSA9PSAibWFnZW50YSIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xE
YXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvck1hZ2VudGE7Ci0gICAgaWYgKHZhbHVlID09
ICJ5ZWxsb3ciKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FM
U3luY1ByaW50Q29sb3JZZWxsb3c7Ci0gICAgaWYgKHZhbHVlID09ICJibGFjayIpCi0gICAgICAg
IHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvckJsYWNr
OwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2Nv
bFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3IgdmFs
dWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFz
ZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JDeWFuOgotICAgICAgICByZXR1cm4gImN5YW4iX3M7
Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JN
YWdlbnRhOgotICAgICAgICByZXR1cm4gIm1hZ2VudGEiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9j
b2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JZZWxsb3c6Ci0gICAgICAgIHJldHVy
biAieWVsbG93Il9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5
bmNQcmludENvbG9yQmxhY2s6Ci0gICAgICAgIHJldHVybiAiYmxhY2siX3M7Ci0gICAgfQotfQot
Ci10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRl
U1FMQXN5bmNQcmludENvbG9yPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1
ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gImN5YW4iKQotICAgICAgICByZXR1cm4gVGVzdFByb3Rv
Y29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yQ3lhbjsKLSAgICBpZiAodmFsdWUg
PT0gIm1hZ2VudGEiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRl
U1FMQXN5bmNQcmludENvbG9yTWFnZW50YTsKLSAgICBpZiAodmFsdWUgPT0gInllbGxvdyIpCi0g
ICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29s
b3JZZWxsb3c7Ci0gICAgaWYgKHZhbHVlID09ICJibGFjayIpCi0gICAgICAgIHJldHVybiBUZXN0
UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JCbGFjazsKLSAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0
UHJvdG9jb2xUeXBlUGFyc2VyLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xK
U09OT2JqZWN0UHJpdmF0ZS5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW50
ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoRGF0YWJhc2VEb21haW4pCi0KLSsg
KHZvaWQpX3BhcnNlRGF0YWJhc2VJZDooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6
KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZVByaW1hcnlDb2xvcnM6KE5TTnVtYmVyICoqKW91
dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotKyAodm9pZClfcGFyc2VDb2xvckxpc3Q6
KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9h
ZDsKLSsgKHZvaWQpX3BhcnNlRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKiopb3V0
VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9u
IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoRGF0YWJhc2VEb21haW4pCi0KLSsgKHZvaWQp
X3BhcnNlRGF0YWJhc2VJZDooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBh
eWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU051
bWJlciBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IChOU051bWJlciAqKXBheWxvYWQ7Ci19Ci0K
LSsgKHZvaWQpX3BhcnNlUHJpbWFyeUNvbG9yczooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBh
eWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBh
eWxvYWQsIFtOU1N0cmluZyBjbGFzc10pOwotICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFi
YXNlUHJpbWFyeUNvbG9ycz4gcmVzdWx0ID0gSW5zcGVjdG9yOjpmcm9tUHJvdG9jb2xTdHJpbmc8
VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzPihwYXlsb2FkKTsKLSAgICBUSFJPV19F
WENFUFRJT05fRk9SX0JBRF9FTlVNX1ZBTFVFKHJlc3VsdCwgQCJQcmltYXJ5Q29sb3JzIik7Ci0g
ICAgKm91dFZhbHVlID0gQChyZXN1bHQudmFsdWUoKSk7Ci19Ci0KLSsgKHZvaWQpX3BhcnNlQ29s
b3JMaXN0OihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlk
KXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtO
U0FycmF5Lyo8TlNTdHJpbmc+Ki8gY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSAoTlNBcnJheS8q
PE5TU3RyaW5nPiovICopcGF5bG9hZDsKLX0KLQotKyAodm9pZClfcGFyc2VFcnJvcjooVGVzdFBy
b3RvY29sRGF0YWJhc2VFcnJvciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAot
ewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFy
eSBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBh
bGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbFR5cGVzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29t
bWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0j
aW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPFdlYkluc3Bl
Y3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0
aW9ucy5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIElu
c3BlY3RvcjsKLQotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcgot
Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxO
U1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0
XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJ
UkVEX1BST1BFUlRZKHBheWxvYWRbQCJtZXNzYWdlIl0sIEAibWVzc2FnZSIpOwotICAgIHNlbGYu
bWVzc2FnZSA9IHBheWxvYWRbQCJtZXNzYWdlIl07Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9S
X1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJjb2RlIl0sIEAiY29kZSIpOwotICAgIHNlbGYu
Y29kZSA9IFtwYXlsb2FkW0AiY29kZSJdIGludGVnZXJWYWx1ZV07Ci0KLSAgICByZXR1cm4gc2Vs
ZjsKLX0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2Nv
bEpTT05PYmplY3QgKilvYmplY3QKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRo
SlNPTk9iamVjdDpbb2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0KCldKSkKLSAgICAgICAgcmV0dXJu
IG5pbDsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhN
ZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZTooaW50KWNvZGUKLXsKLSAgICBpZiAoIShz
ZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkobWVzc2FnZSwgQCJtZXNzYWdlIik7Ci0KLSAg
ICBzZWxmLm1lc3NhZ2UgPSBtZXNzYWdlOwotICAgIHNlbGYuY29kZSA9IGNvZGU7Ci0KLSAgICBy
ZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClzZXRNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UK
LXsKLSAgICBbc3VwZXIgc2V0U3RyaW5nOm1lc3NhZ2UgZm9yS2V5OkAibWVzc2FnZSJdOwotfQot
Ci0tIChOU1N0cmluZyAqKW1lc3NhZ2UKLXsKLSAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0Zvcktl
eTpAIm1lc3NhZ2UiXTsKLX0KLQotLSAodm9pZClzZXRDb2RlOihpbnQpY29kZQotewotICAgIFtz
dXBlciBzZXRJbnRlZ2VyOmNvZGUgZm9yS2V5OkAiY29kZSJdOwotfQotCi0tIChpbnQpY29kZQot
ewotICAgIHJldHVybiBbc3VwZXIgaW50ZWdlckZvcktleTpAImNvZGUiXTsKLX0KLQotQGVuZAot
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVk
L2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uLXJlc3Vs
dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5q
c29uLXJlc3VsdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODU5NDFlZDUxZjEuLjAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4t
cGFyYW1ldGVycy5qc29uLXJlc3VsdAorKysgL2Rldi9udWxsCkBAIC0xLDE2NzQgKzAsMCBAQAot
IyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4t
cGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLS8vIERhdGFiYXNlCi1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJEYXRhYmFz
ZSIsIG51bGwpOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIkRhdGFiYXNlLlByaW1h
cnlDb2xvcnMiLCB7UmVkOiAicmVkIiwgR3JlZW46ICJncmVlbiIsIEJsdWU6ICJibHVlIn0pOwot
SW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIkRhdGFiYXNlLmV4ZWN1dGVBbGxPcHRp
b25hbFBhcmFtZXRlcnMiLCBudWxsLCBbeyJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAi
b2JqZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZX0sIHsibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0
cmluZyIsICJvcHRpb25hbCI6IHRydWV9LCB7Im5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAi
bnVtYmVyIiwgIm9wdGlvbmFsIjogdHJ1ZX0sIHsibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJv
YmplY3QiLCAib3B0aW9uYWwiOiB0cnVlfSwgeyJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJv
YmplY3QiLCAib3B0aW9uYWwiOiB0cnVlfSwgeyJuYW1lIjogImRhdGFiYXNlSWQiLCAidHlwZSI6
ICJudW1iZXIiLCAib3B0aW9uYWwiOiB0cnVlfSwgeyJuYW1lIjogInNxbEVycm9yIiwgInR5cGUi
OiAib2JqZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZX0sIHsibmFtZSI6ICJzY3JlZW5Db2xvciIsICJ0
eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWV9LCB7Im5hbWUiOiAiYWx0ZXJuYXRlQ29s
b3JzIiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZX0sIHsibmFtZSI6ICJwcmlu
dENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZX1dLCBbImNvbHVtbk5h
bWVzIiwgIm5vdGVzIiwgInRpbWVzdGFtcCIsICJ2YWx1ZXMiLCAicGF5bG9hZCIsICJkYXRhYmFz
ZUlkIiwgInNxbEVycm9yIiwgInNjcmVlbkNvbG9yIiwgImFsdGVybmF0ZUNvbG9ycyIsICJwcmlu
dENvbG9yIl0pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIkRhdGFiYXNlLmV4
ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyIsIG51bGwsIFt7Im5hbWUiOiAiY29sdW1uTmFtZXMi
LCAidHlwZSI6ICJvYmplY3QifSwgeyJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIn0s
IHsibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIifSwgeyJuYW1lIjogInZhbHVl
cyIsICJ0eXBlIjogIm9iamVjdCJ9LCB7Im5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogIm9iamVj
dCJ9LCB7Im5hbWUiOiAiZGF0YWJhc2VJZCIsICJ0eXBlIjogIm51bWJlciJ9LCB7Im5hbWUiOiAi
c3FsRXJyb3IiLCAidHlwZSI6ICJvYmplY3QifSwgeyJuYW1lIjogInNjcmVlbkNvbG9yIiwgInR5
cGUiOiAic3RyaW5nIn0sIHsibmFtZSI6ICJhbHRlcm5hdGVDb2xvcnMiLCAidHlwZSI6ICJvYmpl
Y3QifSwgeyJuYW1lIjogInByaW50Q29sb3IiLCAidHlwZSI6ICJzdHJpbmcifV0sIFsiY29sdW1u
TmFtZXMiLCAibm90ZXMiLCAidGltZXN0YW1wIiwgInZhbHVlcyIsICJwYXlsb2FkIiwgImRhdGFi
YXNlSWQiLCAic3FsRXJyb3IiLCAic2NyZWVuQ29sb3IiLCAiYWx0ZXJuYXRlQ29sb3JzIiwgInBy
aW50Q29sb3IiXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJEYXRhYmFzZSIs
IG51bGwpOwotIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1
cm4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgotI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLQotbmFtZXNwYWNlIEluc3Bl
Y3RvciB7Ci0KLWNsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAg
ICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBk
aXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9
Ci0gICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1
cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQotcHJpdmF0ZToKLSAgICBSZWZQdHI8QmFj
a2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Ci19OwotCi0KLWNsYXNzIEFsdGVy
bmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERp
c3BhdGNoZXIgewotcHVibGljOgotICAgIHZpcnR1YWwgfkFsdGVybmF0ZURhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXIoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZUFsbE9wdGlvbmFsUGFy
YW1ldGVycyhsb25nIGNhbGxJZCwgY29uc3QgSlNPTjo6QXJyYXkqIGluX2NvbHVtbk5hbWVzLCBj
b25zdCBTdHJpbmcqIGluX25vdGVzLCBjb25zdCBkb3VibGUqIGluX3RpbWVzdGFtcCwgY29uc3Qg
SlNPTjo6T2JqZWN0KiBpbl92YWx1ZXMsIGNvbnN0IEpTT046OlZhbHVlKiBpbl9wYXlsb2FkLCBj
b25zdCBpbnQqIGluX2RhdGFiYXNlSWQsIGNvbnN0IEpTT046Ok9iamVjdCogaW5fc3FsRXJyb3Is
IGNvbnN0IFN0cmluZyogaW5fc2NyZWVuQ29sb3IsIGNvbnN0IEpTT046OkFycmF5KiBpbl9hbHRl
cm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyogaW5fcHJpbnRDb2xvcikgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMobG9uZyBjYWxsSWQsIGNvbnN0IEpT
T046OkFycmF5JiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBpbl9ub3RlcywgZG91Ymxl
IGluX3RpbWVzdGFtcCwgY29uc3QgSlNPTjo6T2JqZWN0JiBpbl92YWx1ZXMsIEpTT046OlZhbHVl
IGluX3BheWxvYWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBKU09OOjpPYmplY3QmIGluX3Nx
bEVycm9yLCBjb25zdCBTdHJpbmcmIGluX3NjcmVlbkNvbG9yLCBjb25zdCBKU09OOjpBcnJheSYg
aW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcmIGluX3ByaW50Q29sb3IpID0gMDsKLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVy
cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRp
b25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9j
b2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNl
IEluc3BlY3RvciB7Ci0KLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCi0jaWYgRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi1jbGFzcyBBbHRlcm5hdGVEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVyOwotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQotCi1jbGFzcyBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7
Ci1wdWJsaWM6Ci0gICAgLy8gTmFtZWQgYWZ0ZXIgcGFyYW1ldGVyICdwcmludENvbG9yJyB3aGls
ZSBnZW5lcmF0aW5nIGNvbW1hbmQvZXZlbnQgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycy4K
LSAgICBlbnVtIGNsYXNzIFByaW50Q29sb3IgewotICAgICAgICBDeWFuID0gMywKLSAgICAgICAg
TWFnZW50YSA9IDQsCi0gICAgICAgIFllbGxvdyA9IDUsCi0gICAgICAgIEJsYWNrID0gNiwKLSAg
ICB9OyAvLyBlbnVtIGNsYXNzIFByaW50Q29sb3IKLSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZUFs
bE9wdGlvbmFsUGFyYW1ldGVycyhFcnJvclN0cmluZyYsIGNvbnN0IEpTT046OkFycmF5KiBvcHRf
aW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyogb3B0X2luX25vdGVzLCBjb25zdCBkb3VibGUq
IG9wdF9pbl90aW1lc3RhbXAsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0X2luX3ZhbHVlcywgY29u
c3QgSlNPTjo6VmFsdWUqIG9wdF9pbl9wYXlsb2FkLCBjb25zdCBpbnQqIG9wdF9pbl9kYXRhYmFz
ZUlkLCBjb25zdCBKU09OOjpPYmplY3QqIG9wdF9pbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nKiBv
cHRfaW5fc2NyZWVuQ29sb3IsIGNvbnN0IEpTT046OkFycmF5KiBvcHRfaW5fYWx0ZXJuYXRlQ29s
b3JzLCBjb25zdCBTdHJpbmcqIG9wdF9pbl9wcmludENvbG9yLCBSZWZQdHI8SlNPTjo6QXJyYXlP
ZjxTdHJpbmc+PiYgb3B0X291dF9jb2x1bW5OYW1lcywgT3B0aW9uYWw8U3RyaW5nPiYgb3B0X291
dF9ub3RlcywgT3B0aW9uYWw8ZG91YmxlPiYgb3B0X291dF90aW1lc3RhbXAsIE9wdGlvbmFsPEpT
T046Ok9iamVjdD4mIG9wdF9vdXRfdmFsdWVzLCBPcHRpb25hbDxKU09OOjpWYWx1ZT4mIG9wdF9v
dXRfcGF5bG9hZCwgT3B0aW9uYWw8aW50PiYgb3B0X291dF9kYXRhYmFzZUlkLCBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYgb3B0X291dF9zcWxFcnJvciwgSW5z
cGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMqIG9wdF9vdXRfc2NyZWVu
Q29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYg
b3B0X291dF9hbHRlcm5hdGVDb2xvcnMsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
OjpQcmludENvbG9yKiBvcHRfb3V0X3ByaW50Q29sb3IpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKEVycm9yU3RyaW5nJiwgY29uc3QgSlNPTjo6QXJy
YXkmIGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIGluX25vdGVzLCBkb3VibGUgaW5fdGlt
ZXN0YW1wLCBjb25zdCBKU09OOjpPYmplY3QmIGluX3ZhbHVlcywgSlNPTjo6VmFsdWUgaW5fcGF5
bG9hZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IEpTT046Ok9iamVjdCYgaW5fc3FsRXJyb3Is
IGNvbnN0IFN0cmluZyYgaW5fc2NyZWVuQ29sb3IsIGNvbnN0IEpTT046OkFycmF5JiBpbl9hbHRl
cm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgaW5fcHJpbnRDb2xvciwgUmVmUHRyPEpTT046OkFy
cmF5T2Y8U3RyaW5nPj4mIG91dF9jb2x1bW5OYW1lcywgU3RyaW5nKiBvdXRfbm90ZXMsIGRvdWJs
ZSogb3V0X3RpbWVzdGFtcCwgSlNPTjo6T2JqZWN0KiBvdXRfdmFsdWVzLCBKU09OOjpWYWx1ZSog
b3V0X3BheWxvYWQsIGludCogb3V0X2RhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEYXRhYmFzZTo6RXJyb3I+JiBvdXRfc3FsRXJyb3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzKiBvdXRfc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYgb3V0X2FsdGVybmF0ZUNvbG9ycywg
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3IqIG91dF9wcmludENv
bG9yKSA9IDA7Ci1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB+RGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXIoKTsKLX07Ci0KLWNsYXNzIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIgZmlu
YWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAg
IHN0YXRpYyBSZWY8RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNw
YXRjaGVyJiwgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICB2b2lkIGRp
c3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9i
amVjdD4mJiBtZXNzYWdlKSBmaW5hbDsKLXByaXZhdGU6Ci0gICAgdm9pZCBleGVjdXRlQWxsT3B0
aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBh
cmFtZXRlcnMpOwotICAgIHZvaWQgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVx
dWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwotI2lmIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotcHVibGljOgotICAgIHZvaWQgc2V0QWx0
ZXJuYXRlRGlzcGF0Y2hlcihBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKiBhbHRl
cm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3Bh
dGNoZXI7IH0KLXByaXZhdGU6Ci0gICAgQWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
ciogbV9hbHRlcm5hdGVEaXNwYXRjaGVyIHsgbnVsbHB0ciB9OwotI2VuZGlmCi1wcml2YXRlOgot
ICAgIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImLCBEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIERhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyKiBtX2FnZW50IHsgbnVsbHB0ciB9OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRl
cnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0j
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNs
dWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQotI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0
Y2hlcnMuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5EYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigp
IHsgfQotCi1SZWY8RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4gRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlcjo6Y3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQotewotICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIsIGFn
ZW50KSk7Ci19Ci0KLURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OkRhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCi0gICAgOiBTdXBwbGVtZW50YWxCYWNrZW5k
RGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKLSAgICAsIG1fYWdlbnQoYWdlbnQpCi17Ci0g
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKCJEYXRh
YmFzZSJfcywgdGhpcyk7Ci19Ci0KLXZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlz
cGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2Jq
ZWN0PiYmIG1lc3NhZ2UpCi17Ci0gICAgUmVmPERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+IHBy
b3RlY3QoKnRoaXMpOwotCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVyczsKLSAg
ICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFyYW1ldGVycyk7Ci0KLSAgICBpZiAo
bWV0aG9kID09ICJleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzIikKLSAgICAgICAgZXhlY3V0
ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOwot
ICAgIGVsc2UgaWYgKG1ldGhvZCA9PSAiZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIikKLSAg
ICAgICAgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJh
bWV0ZXJzKSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQ
cm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEYXRhYmFz
ZS4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOwotfQotCi12b2lkIERhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0
SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycykKLXsKLSAgICBib29sIG9wdF9p
bl9jb2x1bW5OYW1lc192YWx1ZUZvdW5kID0gZmFsc2U7Ci0gICAgUmVmUHRyPEpTT046OkFycmF5
PiBvcHRfaW5fY29sdW1uTmFtZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRBcnJheShwYXJh
bWV0ZXJzLmdldCgpLCAiY29sdW1uTmFtZXMiX3MsICZvcHRfaW5fY29sdW1uTmFtZXNfdmFsdWVG
b3VuZCk7Ci0gICAgYm9vbCBvcHRfaW5fbm90ZXNfdmFsdWVGb3VuZCA9IGZhbHNlOwotICAgIFN0
cmluZyBvcHRfaW5fbm90ZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1l
dGVycy5nZXQoKSwgIm5vdGVzIl9zLCAmb3B0X2luX25vdGVzX3ZhbHVlRm91bmQpOwotICAgIGJv
b2wgb3B0X2luX3RpbWVzdGFtcF92YWx1ZUZvdW5kID0gZmFsc2U7Ci0gICAgZG91YmxlIG9wdF9p
bl90aW1lc3RhbXAgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXREb3VibGUocGFyYW1ldGVycy5n
ZXQoKSwgInRpbWVzdGFtcCJfcywgJm9wdF9pbl90aW1lc3RhbXBfdmFsdWVGb3VuZCk7Ci0gICAg
Ym9vbCBvcHRfaW5fdmFsdWVzX3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAgICBSZWZQdHI8SlNPTjo6
T2JqZWN0PiBvcHRfaW5fdmFsdWVzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0T2JqZWN0KHBh
cmFtZXRlcnMuZ2V0KCksICJ2YWx1ZXMiX3MsICZvcHRfaW5fdmFsdWVzX3ZhbHVlRm91bmQpOwot
ICAgIGJvb2wgb3B0X2luX3BheWxvYWRfdmFsdWVGb3VuZCA9IGZhbHNlOwotICAgIFJlZlB0cjxK
U09OOjpWYWx1ZT4gb3B0X2luX3BheWxvYWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRWYWx1
ZShwYXJhbWV0ZXJzLmdldCgpLCAicGF5bG9hZCJfcywgJm9wdF9pbl9wYXlsb2FkX3ZhbHVlRm91
bmQpOwotICAgIGJvb2wgb3B0X2luX2RhdGFiYXNlSWRfdmFsdWVGb3VuZCA9IGZhbHNlOwotICAg
IGludCBvcHRfaW5fZGF0YWJhc2VJZCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEludGVnZXIo
cGFyYW1ldGVycy5nZXQoKSwgImRhdGFiYXNlSWQiX3MsICZvcHRfaW5fZGF0YWJhc2VJZF92YWx1
ZUZvdW5kKTsKLSAgICBib29sIG9wdF9pbl9zcWxFcnJvcl92YWx1ZUZvdW5kID0gZmFsc2U7Ci0g
ICAgUmVmUHRyPEpTT046Ok9iamVjdD4gb3B0X2luX3NxbEVycm9yID0gbV9iYWNrZW5kRGlzcGF0
Y2hlci0+Z2V0T2JqZWN0KHBhcmFtZXRlcnMuZ2V0KCksICJzcWxFcnJvciJfcywgJm9wdF9pbl9z
cWxFcnJvcl92YWx1ZUZvdW5kKTsKLSAgICBib29sIG9wdF9pbl9zY3JlZW5Db2xvcl92YWx1ZUZv
dW5kID0gZmFsc2U7Ci0gICAgU3RyaW5nIG9wdF9pbl9zY3JlZW5Db2xvciA9IG1fYmFja2VuZERp
c3BhdGNoZXItPmdldFN0cmluZyhwYXJhbWV0ZXJzLmdldCgpLCAic2NyZWVuQ29sb3IiX3MsICZv
cHRfaW5fc2NyZWVuQ29sb3JfdmFsdWVGb3VuZCk7Ci0gICAgYm9vbCBvcHRfaW5fYWx0ZXJuYXRl
Q29sb3JzX3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IG9wdF9p
bl9hbHRlcm5hdGVDb2xvcnMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRBcnJheShwYXJhbWV0
ZXJzLmdldCgpLCAiYWx0ZXJuYXRlQ29sb3JzIl9zLCAmb3B0X2luX2FsdGVybmF0ZUNvbG9yc192
YWx1ZUZvdW5kKTsKLSAgICBib29sIG9wdF9pbl9wcmludENvbG9yX3ZhbHVlRm91bmQgPSBmYWxz
ZTsKLSAgICBTdHJpbmcgb3B0X2luX3ByaW50Q29sb3IgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5n
ZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgInByaW50Q29sb3IiX3MsICZvcHRfaW5fcHJpbnRD
b2xvcl92YWx1ZUZvdW5kKTsKLSAgICBpZiAobV9iYWNrZW5kRGlzcGF0Y2hlci0+aGFzUHJvdG9j
b2xFcnJvcnMoKSkgewotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2Nv
bEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCAiU29tZSBhcmd1bWVudHMg
b2YgbWV0aG9kICdEYXRhYmFzZS5leGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzJyBjYW4ndCBi
ZSBwcm9jZXNzZWQiX3MpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0jaWYgRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0gICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0
Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVBbGxPcHRpb25h
bFBhcmFtZXRlcnMocmVxdWVzdElkLCBvcHRfaW5fY29sdW1uTmFtZXNfdmFsdWVGb3VuZCA/IG9w
dF9pbl9jb2x1bW5OYW1lcy5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9ub3Rlc192YWx1ZUZvdW5k
ID8gJm9wdF9pbl9ub3RlcyA6IG51bGxwdHIsIG9wdF9pbl90aW1lc3RhbXBfdmFsdWVGb3VuZCA/
ICZvcHRfaW5fdGltZXN0YW1wIDogbnVsbHB0ciwgb3B0X2luX3ZhbHVlc192YWx1ZUZvdW5kID8g
b3B0X2luX3ZhbHVlcy5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9wYXlsb2FkX3ZhbHVlRm91bmQg
PyBvcHRfaW5fcGF5bG9hZC5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9kYXRhYmFzZUlkX3ZhbHVl
Rm91bmQgPyAmb3B0X2luX2RhdGFiYXNlSWQgOiBudWxscHRyLCBvcHRfaW5fc3FsRXJyb3JfdmFs
dWVGb3VuZCA/IG9wdF9pbl9zcWxFcnJvci5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9zY3JlZW5D
b2xvcl92YWx1ZUZvdW5kID8gJm9wdF9pbl9zY3JlZW5Db2xvciA6IG51bGxwdHIsIG9wdF9pbl9h
bHRlcm5hdGVDb2xvcnNfdmFsdWVGb3VuZCA/IG9wdF9pbl9hbHRlcm5hdGVDb2xvcnMuZ2V0KCkg
OiBudWxscHRyLCBvcHRfaW5fcHJpbnRDb2xvcl92YWx1ZUZvdW5kID8gJm9wdF9pbl9wcmludENv
bG9yIDogbnVsbHB0cik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIEVy
cm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9i
amVjdDo6Y3JlYXRlKCk7Ci0gICAgUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gb3V0X2Nv
bHVtbk5hbWVzOwotICAgIE9wdGlvbmFsPFN0cmluZz4gb3V0X25vdGVzOwotICAgIE9wdGlvbmFs
PGRvdWJsZT4gb3V0X3RpbWVzdGFtcDsKLSAgICBPcHRpb25hbDxKU09OOjpPYmplY3Q+IG91dF92
YWx1ZXM7Ci0gICAgT3B0aW9uYWw8SlNPTjo6VmFsdWU+IG91dF9wYXlsb2FkOwotICAgIE9wdGlv
bmFsPGludD4gb3V0X2RhdGFiYXNlSWQ7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpFcnJvcj4gb3V0X3NxbEVycm9yOwotICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzIG91dF9zY3JlZW5Db2xvcjsKLSAgICBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4gb3V0X2FsdGVybmF0ZUNvbG9y
czsKLSAgICBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciBvdXRf
cHJpbnRDb2xvcjsKLSAgICBtX2FnZW50LT5leGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGVy
cm9yLCBvcHRfaW5fY29sdW1uTmFtZXNfdmFsdWVGb3VuZCA/IG9wdF9pbl9jb2x1bW5OYW1lcy5n
ZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9ub3Rlc192YWx1ZUZvdW5kID8gJm9wdF9pbl9ub3RlcyA6
IG51bGxwdHIsIG9wdF9pbl90aW1lc3RhbXBfdmFsdWVGb3VuZCA/ICZvcHRfaW5fdGltZXN0YW1w
IDogbnVsbHB0ciwgb3B0X2luX3ZhbHVlc192YWx1ZUZvdW5kID8gb3B0X2luX3ZhbHVlcy5nZXQo
KSA6IG51bGxwdHIsIG9wdF9pbl9wYXlsb2FkX3ZhbHVlRm91bmQgPyBvcHRfaW5fcGF5bG9hZC5n
ZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9kYXRhYmFzZUlkX3ZhbHVlRm91bmQgPyAmb3B0X2luX2Rh
dGFiYXNlSWQgOiBudWxscHRyLCBvcHRfaW5fc3FsRXJyb3JfdmFsdWVGb3VuZCA/IG9wdF9pbl9z
cWxFcnJvci5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9zY3JlZW5Db2xvcl92YWx1ZUZvdW5kID8g
Jm9wdF9pbl9zY3JlZW5Db2xvciA6IG51bGxwdHIsIG9wdF9pbl9hbHRlcm5hdGVDb2xvcnNfdmFs
dWVGb3VuZCA/IG9wdF9pbl9hbHRlcm5hdGVDb2xvcnMuZ2V0KCkgOiBudWxscHRyLCBvcHRfaW5f
cHJpbnRDb2xvcl92YWx1ZUZvdW5kID8gJm9wdF9pbl9wcmludENvbG9yIDogbnVsbHB0ciwgb3V0
X2NvbHVtbk5hbWVzLCBvdXRfbm90ZXMsIG91dF90aW1lc3RhbXAsIG91dF92YWx1ZXMsIG91dF9w
YXlsb2FkLCBvdXRfZGF0YWJhc2VJZCwgb3V0X3NxbEVycm9yLCBvdXRfc2NyZWVuQ29sb3IsIG91
dF9hbHRlcm5hdGVDb2xvcnMsIG91dF9wcmludENvbG9yKTsKLQotICAgIGlmICghZXJyb3IubGVu
Z3RoKCkpIHsKLSAgICAgICAgaWYgKG91dF9jb2x1bW5OYW1lcykKLSAgICAgICAgICAgIHJlc3Vs
dC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBvdXRfY29sdW1uTmFtZXMpOwotICAgICAgICBp
ZiAob3V0X25vdGVzLmhhc1ZhbHVlKCkpCi0gICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZygi
bm90ZXMiX3MsICpvdXRfbm90ZXMpOwotICAgICAgICBpZiAob3V0X3RpbWVzdGFtcC5oYXNWYWx1
ZSgpKQotICAgICAgICAgICAgcmVzdWx0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgKm91dF90
aW1lc3RhbXApOwotICAgICAgICBpZiAob3V0X3ZhbHVlcy5oYXNWYWx1ZSgpKQotICAgICAgICAg
ICAgcmVzdWx0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgKm91dF92YWx1ZXMpOwotICAgICAgICBp
ZiAob3V0X3BheWxvYWQuaGFzVmFsdWUoKSkKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0VmFsdWUo
InBheWxvYWQiX3MsICpvdXRfcGF5bG9hZCk7Ci0gICAgICAgIGlmIChvdXRfZGF0YWJhc2VJZC5o
YXNWYWx1ZSgpKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9z
LCAqb3V0X2RhdGFiYXNlSWQpOwotICAgICAgICBpZiAob3V0X3NxbEVycm9yKQotICAgICAgICAg
ICAgcmVzdWx0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBvdXRfc3FsRXJyb3IpOwotICAgICAg
ICBpZiAob3V0X3NjcmVlbkNvbG9yLmhhc1ZhbHVlKCkpCi0gICAgICAgICAgICByZXN1bHQtPnNl
dFN0cmluZygic2NyZWVuQ29sb3IiX3MsICpvdXRfc2NyZWVuQ29sb3IpOwotICAgICAgICBpZiAo
b3V0X2FsdGVybmF0ZUNvbG9ycykKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoImFsdGVy
bmF0ZUNvbG9ycyJfcywgb3V0X2FsdGVybmF0ZUNvbG9ycyk7Ci0gICAgICAgIGlmIChvdXRfcHJp
bnRDb2xvci5oYXNWYWx1ZSgpKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInByaW50
Q29sb3IiX3MsICpvdXRfcHJpbnRDb2xvcik7Ci0gICAgfQotICAgIGlmICghZXJyb3IubGVuZ3Ro
KCkpCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQs
IFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJy
b3IsIFdURk1vdmUoZXJyb3IpKTsKLX0KLQotdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
OjpleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09O
OjpPYmplY3Q+JiYgcGFyYW1ldGVycykKLXsKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGluX2Nv
bHVtbk5hbWVzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0QXJyYXkocGFyYW1ldGVycy5nZXQo
KSwgImNvbHVtbk5hbWVzIl9zLCBudWxscHRyKTsKLSAgICBTdHJpbmcgaW5fbm90ZXMgPSBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgIm5vdGVzIl9zLCBu
dWxscHRyKTsKLSAgICBkb3VibGUgaW5fdGltZXN0YW1wID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+
Z2V0RG91YmxlKHBhcmFtZXRlcnMuZ2V0KCksICJ0aW1lc3RhbXAiX3MsIG51bGxwdHIpOwotICAg
IFJlZlB0cjxKU09OOjpPYmplY3Q+IGluX3ZhbHVlcyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdl
dE9iamVjdChwYXJhbWV0ZXJzLmdldCgpLCAidmFsdWVzIl9zLCBudWxscHRyKTsKLSAgICBSZWZQ
dHI8SlNPTjo6VmFsdWU+IGluX3BheWxvYWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRWYWx1
ZShwYXJhbWV0ZXJzLmdldCgpLCAicGF5bG9hZCJfcywgbnVsbHB0cik7Ci0gICAgaW50IGluX2Rh
dGFiYXNlSWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRJbnRlZ2VyKHBhcmFtZXRlcnMuZ2V0
KCksICJkYXRhYmFzZUlkIl9zLCBudWxscHRyKTsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBp
bl9zcWxFcnJvciA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldE9iamVjdChwYXJhbWV0ZXJzLmdl
dCgpLCAic3FsRXJyb3IiX3MsIG51bGxwdHIpOwotICAgIFN0cmluZyBpbl9zY3JlZW5Db2xvciA9
IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwYXJhbWV0ZXJzLmdldCgpLCAic2NyZWVu
Q29sb3IiX3MsIG51bGxwdHIpOwotICAgIFJlZlB0cjxKU09OOjpBcnJheT4gaW5fYWx0ZXJuYXRl
Q29sb3JzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0QXJyYXkocGFyYW1ldGVycy5nZXQoKSwg
ImFsdGVybmF0ZUNvbG9ycyJfcywgbnVsbHB0cik7Ci0gICAgU3RyaW5nIGluX3ByaW50Q29sb3Ig
PSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgInByaW50
Q29sb3IiX3MsIG51bGxwdHIpOwotICAgIGlmIChtX2JhY2tlbmREaXNwYXRjaGVyLT5oYXNQcm90
b2NvbEVycm9ycygpKSB7Ci0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3Rv
Y29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsICJTb21lIGFyZ3VtZW50
cyBvZiBtZXRob2QgJ0RhdGFiYXNlLmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycycgY2FuJ3Qg
YmUgcHJvY2Vzc2VkIl9zKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotI2lmIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotICAgIGlmIChtX2FsdGVybmF0ZURpc3Bh
dGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5leGVjdXRlTm9PcHRpb25h
bFBhcmFtZXRlcnMocmVxdWVzdElkLCAqaW5fY29sdW1uTmFtZXMsIGluX25vdGVzLCBpbl90aW1l
c3RhbXAsICppbl92YWx1ZXMsICppbl9wYXlsb2FkLCBpbl9kYXRhYmFzZUlkLCAqaW5fc3FsRXJy
b3IsIGluX3NjcmVlbkNvbG9yLCAqaW5fYWx0ZXJuYXRlQ29sb3JzLCBpbl9wcmludENvbG9yKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7
Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
LSAgICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiBvdXRfY29sdW1uTmFtZXM7Ci0gICAg
U3RyaW5nIG91dF9ub3RlczsKLSAgICBkb3VibGUgb3V0X3RpbWVzdGFtcDsKLSAgICBKU09OOjpP
YmplY3Qgb3V0X3ZhbHVlczsKLSAgICBKU09OOjpWYWx1ZSBvdXRfcGF5bG9hZDsKLSAgICBpbnQg
b3V0X2RhdGFiYXNlSWQ7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNl
OjpFcnJvcj4gb3V0X3NxbEVycm9yOwotICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNl
OjpQcmltYXJ5Q29sb3JzIG91dF9zY3JlZW5Db2xvcjsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4gb3V0X2FsdGVybmF0ZUNvbG9yczsKLSAgICBE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciBvdXRfcHJpbnRDb2xv
cjsKLSAgICBtX2FnZW50LT5leGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMoZXJyb3IsICppbl9j
b2x1bW5OYW1lcywgaW5fbm90ZXMsIGluX3RpbWVzdGFtcCwgKmluX3ZhbHVlcywgKmluX3BheWxv
YWQsIGluX2RhdGFiYXNlSWQsICppbl9zcWxFcnJvciwgaW5fc2NyZWVuQ29sb3IsICppbl9hbHRl
cm5hdGVDb2xvcnMsIGluX3ByaW50Q29sb3IsIG91dF9jb2x1bW5OYW1lcywgJm91dF9ub3Rlcywg
Jm91dF90aW1lc3RhbXAsIG91dF92YWx1ZXMsICZvdXRfcGF5bG9hZCwgJm91dF9kYXRhYmFzZUlk
LCBvdXRfc3FsRXJyb3IsICZvdXRfc2NyZWVuQ29sb3IsIG91dF9hbHRlcm5hdGVDb2xvcnMsICZv
dXRfcHJpbnRDb2xvcik7Ci0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7Ci0gICAgICAgIHJl
c3VsdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBvdXRfY29sdW1uTmFtZXMpOwotICAgICAg
ICByZXN1bHQtPnNldFN0cmluZygibm90ZXMiX3MsIG91dF9ub3Rlcyk7Ci0gICAgICAgIHJlc3Vs
dC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIG91dF90aW1lc3RhbXApOwotICAgICAgICByZXN1
bHQtPnNldE9iamVjdCgidmFsdWVzIl9zLCBvdXRfdmFsdWVzKTsKLSAgICAgICAgcmVzdWx0LT5z
ZXRWYWx1ZSgicGF5bG9hZCJfcywgb3V0X3BheWxvYWQpOwotICAgICAgICByZXN1bHQtPnNldElu
dGVnZXIoImRhdGFiYXNlSWQiX3MsIG91dF9kYXRhYmFzZUlkKTsKLSAgICAgICAgcmVzdWx0LT5z
ZXRPYmplY3QoInNxbEVycm9yIl9zLCBvdXRfc3FsRXJyb3IpOwotICAgICAgICByZXN1bHQtPnNl
dFN0cmluZygic2NyZWVuQ29sb3IiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJz
OjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShvdXRfc2NyZWVuQ29sb3IpKTsKLSAgICAgICAgcmVzdWx0
LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCBvdXRfYWx0ZXJuYXRlQ29sb3JzKTsKLSAg
ICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShvdXRfcHJpbnRDb2xvcikpOwot
ICAgIH0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAg
ICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3Io
QmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0
Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1j
YWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmpl
Y3RzLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEZyb250ZW5kUm91
dGVyOwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEZyb250
ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hl
cnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1v
cHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRl
c3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQot
bmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMg
RW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sT2JqZWN0cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
Y29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi1uYW1l
c3BhY2UgUHJvdG9jb2wgewotCi0KLQotLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCi1uYW1lc3Bh
Y2UgRGF0YWJhc2UgewotY2xhc3MgRXJyb3I7Ci1lbnVtIGNsYXNzIFByaW1hcnlDb2xvcnM7Ci19
IC8vIERhdGFiYXNlCi0vLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCi0KLQotLy8gVHlw
ZWRlZnMuCi1uYW1lc3BhY2UgRGF0YWJhc2UgewotLyogVW5pcXVlIGlkZW50aWZpZXIgb2YgRGF0
YWJhc2Ugb2JqZWN0LiAqLwotdHlwZWRlZiBpbnQgRGF0YWJhc2VJZDsKLXR5cGVkZWYgSlNPTjo6
QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gQ29s
b3JMaXN0OwotfSAvLyBEYXRhYmFzZQotLy8gRW5kIG9mIHR5cGVkZWZzLgotCi1uYW1lc3BhY2Ug
VGVzdEhlbHBlcnMgewotCi1TdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpOwot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoVCBlbnVt
VmFsdWUpCi17Ci0gICAgcmV0dXJuIGdldEVudW1Db25zdGFudFZhbHVlKHN0YXRpY19jYXN0PGlu
dD4oZW51bVZhbHVlKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCi0KLW5hbWVz
cGFjZSBEYXRhYmFzZSB7Ci0vKiAgKi8KLWVudW0gY2xhc3MgUHJpbWFyeUNvbG9ycyB7Ci0gICAg
UmVkID0gMCwKLSAgICBHcmVlbiA9IDEsCi0gICAgQmx1ZSA9IDIsCi19OyAvLyBlbnVtIGNsYXNz
IFByaW1hcnlDb2xvcnMKLS8qIERhdGFiYXNlIGVycm9yLiAqLwotY2xhc3MgRXJyb3IgOiBwdWJs
aWMgSlNPTjo6T2JqZWN0QmFzZSB7Ci1wdWJsaWM6Ci0gICAgZW51bSB7Ci0gICAgICAgIE5vRmll
bGRzU2V0ID0gMCwKLSAgICAgICAgTWVzc2FnZVNldCA9IDEgPDwgMCwKLSAgICAgICAgQ29kZVNl
dCA9IDEgPDwgMSwKLSAgICAgICAgQWxsRmllbGRzU2V0ID0gKE1lc3NhZ2VTZXQgfCBDb2RlU2V0
KQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+Ci0gICAgY2xhc3MgQnVpbGRlciB7
Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7Ci0K
LSAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0
YXRlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1
aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRl
cihSZWY8LypFcnJvciovSlNPTjo6T2JqZWN0PiYmIG9iamVjdCkKLSAgICAgICAgICAgIDogbV9y
ZXN1bHQoV1RGTW92ZShvYmplY3QpKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FT
U0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0
YXRlKTsKLSAgICAgICAgfQotICAgICAgICBmcmllbmQgY2xhc3MgRXJyb3I7Ci0gICAgcHVibGlj
OgotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2FnZShjb25z
dCBTdHJpbmcmIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgTWVzc2FnZVNldCksIHByb3BlcnR5X21lc3NhZ2VfYWxyZWFkeV9zZXQpOwotICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibWVzc2FnZSJfcywgdmFsdWUpOwotICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNZXNzYWdlU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IENvZGVTZXQ+JiBzZXRDb2RlKGludCB2YWx1ZSkKLSAgICAgICAg
ewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENvZGVTZXQpLCBwcm9wZXJ0
eV9jb2RlX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2VyKCJj
b2RlIl9zLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvZGVTZXQ+KCk7
Ci0gICAgICAgIH0KLQotICAgICAgICBSZWY8RXJyb3I+IHJlbGVhc2UoKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9p
c19ub3RfcmVhZHkpOwotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEVycm9yKSA9
PSBzaXplb2YoSlNPTjo6T2JqZWN0KSwgY2Fubm90X2Nhc3QpOwotCi0gICAgICAgICAgICBSZWY8
SlNPTjo6T2JqZWN0PiBqc29uUmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKLSAg
ICAgICAgICAgIGF1dG8gcmVzdWx0ID0gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8RXJy
b3I+Kj4oJmpzb25SZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAg
IH0KLSAgICB9OwotCi0gICAgLyoKLSAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6Ci0gICAg
ICogUmVmPEVycm9yPiByZXN1bHQgPSBFcnJvcjo6Y3JlYXRlKCkKLSAgICAgKiAgICAgLnNldE1l
c3NhZ2UoLi4uKQotICAgICAqICAgICAuc2V0Q29kZSguLi4pCi0gICAgICogICAgIC5yZWxlYXNl
KCk7Ci0gICAgICovCi0gICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCi0g
ICAgewotICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKSk7Ci0gICAgfQotfTsKLQotfSAvLyBEYXRhYmFzZQotCi0KLQotbmFtZXNwYWNlIFRl
c3RIZWxwZXJzIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgUHJvdG9jb2xFbnVtVHlwZT4KLU9wdGlv
bmFsPFByb3RvY29sRW51bVR5cGU+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZyhjb25zdCBTdHJp
bmcmKTsKLQotLy8gRW51bXMgaW4gdGhlICdEYXRhYmFzZScgRG9tYWluCi10ZW1wbGF0ZTw+Ci1P
cHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gcGFy
c2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmlt
YXJ5Q29sb3JzPihjb25zdCBTdHJpbmcmKTsKLQotfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMK
LQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0K
LW5hbWVzcGFjZSBXVEYgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhh
c2g7Ci0KLS8vIEhhc2ggZGVjbGFyYXRpb25zIGluIHRoZSAnRGF0YWJhc2UnIERvbWFpbgotdGVt
cGxhdGU8Pgotc3RydWN0IERlZmF1bHRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNl
OjpQcmltYXJ5Q29sb3JzPiB7Ci0gICAgdHlwZWRlZiBJbnRIYXNoPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiBIYXNoOwotfTsKLQotfSAvLyBuYW1lc3BhY2Ug
V1RGCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotCi0jaW5jbHVkZSA8d3Rm
L09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotbmFtZXNwYWNlIFRlc3RIZWxw
ZXJzIHsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFsdWVzW10g
PSB7Ci0gICAgInJlZCIsCi0gICAgImdyZWVuIiwKLSAgICAiYmx1ZSIsCi0gICAgImN5YW4iLAot
ICAgICJtYWdlbnRhIiwKLSAgICAieWVsbG93IiwKLSAgICAiYmxhY2siLAotfTsKLQotU3RyaW5n
IGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7Ci0gICAgcmV0dXJuIGVudW1fY29uc3Rh
bnRfdmFsdWVzW2NvZGVdOwotfQotCi0vLyBFbnVtcyBpbiB0aGUgJ0RhdGFiYXNlJyBEb21haW4K
LXRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmlt
YXJ5Q29sb3JzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCi17
Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0gewotICAgICAgICAo
c2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzOjpSZWQs
Ci0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlD
b2xvcnM6OkdyZWVuLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFi
YXNlOjpQcmltYXJ5Q29sb3JzOjpCbHVlLAotICAgIH07Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCAzOyArK2kpCi0gICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50
X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCi0gICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzKWNvbnN0YW50VmFsdWVzW2ldOwot
Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotCi19IC8vIG5hbWVzcGFjZSBUZXN0SGVs
cGVycwotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1w
YXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNw
YXRjaGVycy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQotQHByb3RvY29sIFRlc3RQ
cm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcjsKLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0K
LQotY2xhc3MgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBw
dWJsaWMgQWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciB7Ci0gICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyPiBoYW5kbGVy
KSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9Ci0gICAgdm9pZCBleGVjdXRlQWxsT3B0aW9uYWxQ
YXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBjb25zdCBKU09OOjpBcnJheSogaW5fY29sdW1uTmFt
ZXMsIGNvbnN0IFN0cmluZyogaW5fbm90ZXMsIGNvbnN0IGRvdWJsZSogaW5fdGltZXN0YW1wLCBj
b25zdCBKU09OOjpPYmplY3QqIGluX3ZhbHVlcywgY29uc3QgSlNPTjo6VmFsdWUqIGluX3BheWxv
YWQsIGNvbnN0IGludCogaW5fZGF0YWJhc2VJZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBpbl9zcWxF
cnJvciwgY29uc3QgU3RyaW5nKiBpbl9zY3JlZW5Db2xvciwgY29uc3QgSlNPTjo6QXJyYXkqIGlu
X2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nKiBpbl9wcmludENvbG9yKSBmaW5hbDsKLSAg
ICB2b2lkIGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhsb25nIHJlcXVlc3RJZCwgY29uc3Qg
SlNPTjo6QXJyYXkmIGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIGluX25vdGVzLCBkb3Vi
bGUgaW5fdGltZXN0YW1wLCBjb25zdCBKU09OOjpPYmplY3QmIGluX3ZhbHVlcywgSlNPTjo6VmFs
dWUgaW5fcGF5bG9hZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IEpTT046Ok9iamVjdCYgaW5f
c3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgaW5fc2NyZWVuQ29sb3IsIGNvbnN0IEpTT046OkFycmF5
JiBpbl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgaW5fcHJpbnRDb2xvcikgZmluYWw7
Ci1wcml2YXRlOgotICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhh
bmRsZXI+PiBtX2RlbGVnYXRlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFy
YW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNo
ZXJzLmgiCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2luY2x1ZGUgIlRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+
Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi12b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVyOjpleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVz
dElkLCBjb25zdCBKU09OOjpBcnJheSogaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyogaW5f
bm90ZXMsIGNvbnN0IGRvdWJsZSogaW5fdGltZXN0YW1wLCBjb25zdCBKU09OOjpPYmplY3QqIGlu
X3ZhbHVlcywgY29uc3QgSlNPTjo6VmFsdWUqIGluX3BheWxvYWQsIGNvbnN0IGludCogaW5fZGF0
YWJhc2VJZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nKiBp
bl9zY3JlZW5Db2xvciwgY29uc3QgSlNPTjo6QXJyYXkqIGluX2FsdGVybmF0ZUNvbG9ycywgY29u
c3QgU3RyaW5nKiBpbl9wcmludENvbG9yKQotewotICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9u
ZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzV2l0aEVy
cm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOmNvbHVtbk5hbWVzOm5vdGVzOnRpbWVzdGFtcDp2
YWx1ZXM6cGF5bG9hZDpkYXRhYmFzZUlkOnNxbEVycm9yOnNjcmVlbkNvbG9yOmFsdGVybmF0ZUNv
bG9yczpwcmludENvbG9yOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9y
dFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91
bmQsICInRGF0YWJhc2UuZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycycgd2FzIG5vdCBmb3Vu
ZCJfcyk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0
cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9j
b2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3Ip
OwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAg
IH07Ci0KLSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAq
KmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqKm5vdGVzLCBkb3VibGUgKnRpbWVzdGFtcCwgUldJUHJv
dG9jb2xKU09OT2JqZWN0ICoqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipwYXlsb2Fk
LCBpbnQgKmRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipzcWxFcnJvciwg
VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzICpzY3JlZW5Db2xvciwgTlNBcnJheS8q
PE5TU3RyaW5nPiovICoqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yICpwcmludENvbG9yKSB7Ci0gICAgICAg
IFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdE9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihjb2x1
bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JB
RF9PUFRJT05BTF9QQVJBTUVURVIobm90ZXMsIEAibm90ZXMiKTsKLSAgICAgICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHZhbHVlcywgQCJ2YWx1ZXMiKTsKLSAg
ICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHBheWxvYWQs
IEAicGF5bG9hZCIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9Q
QVJBTUVURVIoc3FsRXJyb3IsIEAic3FsRXJyb3IiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKGFsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVD
b2xvcnMiKTsKLSAgICAgICAgaWYgKGNvbHVtbk5hbWVzKQotICAgICAgICAgICAgcmVzdWx0T2Jq
ZWN0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KCpjb2x1bW5O
YW1lcykpOwotICAgICAgICBpZiAobm90ZXMpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNl
dFN0cmluZygibm90ZXMiX3MsICpub3Rlcyk7Ci0gICAgICAgIGlmICh0aW1lc3RhbXApCi0gICAg
ICAgICAgICByZXN1bHRPYmplY3QtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCAqdGltZXN0YW1w
KTsKLSAgICAgICAgaWYgKHZhbHVlcykKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2Jq
ZWN0KCJ2YWx1ZXMiX3MsIFsqdmFsdWVzIHRvSlNPTk9iamVjdF0pOwotICAgICAgICBpZiAocGF5
bG9hZCkKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFsq
cGF5bG9hZCB0b0pTT05PYmplY3RdKTsKLSAgICAgICAgaWYgKGRhdGFiYXNlSWQpCi0gICAgICAg
ICAgICByZXN1bHRPYmplY3QtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsICpkYXRhYmFzZUlk
KTsKLSAgICAgICAgaWYgKHNxbEVycm9yKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRP
YmplY3QoInNxbEVycm9yIl9zLCBbKnNxbEVycm9yIHRvSlNPTk9iamVjdF0pOwotICAgICAgICBp
ZiAoc2NyZWVuQ29sb3IpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygic2Ny
ZWVuQ29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcoKnNjcmVlbkNvbG9yKSk7Ci0gICAgICAgIGlm
IChhbHRlcm5hdGVDb2xvcnMpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJh
bHRlcm5hdGVDb2xvcnMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KCphbHRlcm5hdGVDb2xvcnMpKTsK
LSAgICAgICAgaWYgKHByaW50Q29sb3IpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0
cmluZygicHJpbnRDb2xvciJfcywgdG9Qcm90b2NvbFN0cmluZygqcHJpbnRDb2xvcikpOwotICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3Zl
KHJlc3VsdE9iamVjdCksIGZhbHNlKTsKLSAgICB9OwotCi0gICAgTlNBcnJheS8qPE5TU3RyaW5n
PiovICpvX2luX2NvbHVtbk5hbWVzOwotICAgIGlmIChpbl9jb2x1bW5OYW1lcykKLSAgICAgICAg
b19pbl9jb2x1bW5OYW1lcyA9IHRvT2JqQ1N0cmluZ0FycmF5KGluX2NvbHVtbk5hbWVzKTsKLSAg
ICBOU1N0cmluZyAqb19pbl9ub3RlczsKLSAgICBpZiAoaW5fbm90ZXMpCi0gICAgICAgIG9faW5f
bm90ZXMgPSAqaW5fbm90ZXM7Ci0gICAgZG91YmxlIG9faW5fdGltZXN0YW1wOwotICAgIGlmIChp
bl90aW1lc3RhbXApCi0gICAgICAgIG9faW5fdGltZXN0YW1wID0gKmluX3RpbWVzdGFtcDsKLSAg
ICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9faW5fdmFsdWVzOwotICAgIGlmIChpbl92YWx1ZXMp
Ci0gICAgICAgIG9faW5fdmFsdWVzID0gW1tbUldJUHJvdG9jb2xKU09OT2JqZWN0IGFsbG9jXSBp
bml0V2l0aEpTT05PYmplY3Q6aW5fdmFsdWVzXSBhdXRvcmVsZWFzZV07Ci0gICAgUldJUHJvdG9j
b2xKU09OT2JqZWN0ICpvX2luX3BheWxvYWQ7Ci0gICAgaWYgKGluX3BheWxvYWQpCi0gICAgICAg
IG9faW5fcGF5bG9hZCA9IFtbW1JXSVByb3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5pdFdpdGhK
U09OT2JqZWN0OmluX3BheWxvYWRdIGF1dG9yZWxlYXNlXTsKLSAgICBpbnQgb19pbl9kYXRhYmFz
ZUlkOwotICAgIGlmIChpbl9kYXRhYmFzZUlkKQotICAgICAgICBvX2luX2RhdGFiYXNlSWQgPSAq
aW5fZGF0YWJhc2VJZDsKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpvX2luX3NxbEVy
cm9yOwotICAgIGlmIChpbl9zcWxFcnJvcikKLSAgICAgICAgb19pbl9zcWxFcnJvciA9IFtbW1Rl
c3RQcm90b2NvbERhdGFiYXNlRXJyb3IgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDppbl9zcWxF
cnJvcl0gYXV0b3JlbGVhc2VdOwotICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlUHJp
bWFyeUNvbG9ycz4gb19pbl9zY3JlZW5Db2xvcjsKLSAgICBpZiAoaW5fc2NyZWVuQ29sb3IpCi0g
ICAgICAgIG9faW5fc2NyZWVuQ29sb3IgPSBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29s
RGF0YWJhc2VQcmltYXJ5Q29sb3JzPigqaW5fc2NyZWVuQ29sb3IpOwotICAgIE5TQXJyYXkvKjxO
U1N0cmluZz4qLyAqb19pbl9hbHRlcm5hdGVDb2xvcnM7Ci0gICAgaWYgKGluX2FsdGVybmF0ZUNv
bG9ycykKLSAgICAgICAgb19pbl9hbHRlcm5hdGVDb2xvcnMgPSB0b09iakNTdHJpbmdBcnJheShp
bl9hbHRlcm5hdGVDb2xvcnMpOwotICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlRXhl
Y3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3I+IG9faW5fcHJpbnRDb2xvcjsKLSAg
ICBpZiAoaW5fcHJpbnRDb2xvcikKLSAgICAgICAgb19pbl9wcmludENvbG9yID0gZnJvbVByb3Rv
Y29sU3RyaW5nPFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVy
c1ByaW50Q29sb3I+KCppbl9wcmludENvbG9yKTsKLQotICAgIFttX2RlbGVnYXRlIGV4ZWN1dGVB
bGxPcHRpb25hbFBhcmFtZXRlcnNXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nl
c3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2sgY29sdW1uTmFtZXM6KGluX2NvbHVtbk5hbWVzID8g
Jm9faW5fY29sdW1uTmFtZXMgOiBuaWwpIG5vdGVzOihpbl9ub3RlcyA/ICZvX2luX25vdGVzIDog
bmlsKSB0aW1lc3RhbXA6KGluX3RpbWVzdGFtcCA/ICZvX2luX3RpbWVzdGFtcCA6IG5pbCkgdmFs
dWVzOihpbl92YWx1ZXMgPyAmb19pbl92YWx1ZXMgOiBuaWwpIHBheWxvYWQ6KGluX3BheWxvYWQg
PyAmb19pbl9wYXlsb2FkIDogbmlsKSBkYXRhYmFzZUlkOihpbl9kYXRhYmFzZUlkID8gJm9faW5f
ZGF0YWJhc2VJZCA6IG5pbCkgc3FsRXJyb3I6KGluX3NxbEVycm9yID8gJm9faW5fc3FsRXJyb3Ig
OiBuaWwpIHNjcmVlbkNvbG9yOihpbl9zY3JlZW5Db2xvciA/ICZvX2luX3NjcmVlbkNvbG9yLnZh
bHVlKCkgOiBuaWwpIGFsdGVybmF0ZUNvbG9yczooaW5fYWx0ZXJuYXRlQ29sb3JzID8gJm9faW5f
YWx0ZXJuYXRlQ29sb3JzIDogbmlsKSBwcmludENvbG9yOihpbl9wcmludENvbG9yID8gJm9faW5f
cHJpbnRDb2xvci52YWx1ZSgpIDogbmlsKV07Ci19Ci0KLXZvaWQgT2JqQ0luc3BlY3RvckRhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhsb25nIHJl
cXVlc3RJZCwgY29uc3QgSlNPTjo6QXJyYXkmIGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcm
IGluX25vdGVzLCBkb3VibGUgaW5fdGltZXN0YW1wLCBjb25zdCBKU09OOjpPYmplY3QmIGluX3Zh
bHVlcywgSlNPTjo6VmFsdWUgaW5fcGF5bG9hZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IEpT
T046Ok9iamVjdCYgaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgaW5fc2NyZWVuQ29sb3IsIGNv
bnN0IEpTT046OkFycmF5JiBpbl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgaW5fcHJp
bnRDb2xvcikKLXsKLSAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2Vs
ZWN0b3IoZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vz
c0NhbGxiYWNrOmNvbHVtbk5hbWVzOm5vdGVzOnRpbWVzdGFtcDp2YWx1ZXM6cGF5bG9hZDpkYXRh
YmFzZUlkOnNxbEVycm9yOnNjcmVlbkNvbG9yOmFsdGVybmF0ZUNvbG9yczpwcmludENvbG9yOild
KSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVx
dWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRGF0YWJhc2UuZXhl
Y3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzJyB3YXMgbm90IGZvdW5kIl9zKTsKLSAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwg
QmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7Ci0gICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgfTsKLQotICAgIGlkIHN1Y2Nl
c3NDYWxsYmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiovICpjb2x1bW5OYW1lcywgTlNTdHJp
bmcgKm5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnZhbHVl
cywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgVGVzdFBy
b3RvY29sRGF0YWJhc2VFcnJvciAqc3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFy
eUNvbG9ycyBzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICphbHRlcm5hdGVDb2xv
cnMsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRD
b2xvciBwcmludENvbG9yKSB7Ci0gICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdE9iamVj
dCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
UkVRVUlSRURfUEFSQU1FVEVSKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7Ci0gICAgICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG5vdGVzLCBAIm5vdGVzIik7
Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHZhbHVlcywg
QCJ2YWx1ZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVU
RVIocGF5bG9hZCwgQCJwYXlsb2FkIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVR
VUlSRURfUEFSQU1FVEVSKHNxbEVycm9yLCBAInNxbEVycm9yIik7Ci0gICAgICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKGFsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5h
dGVDb2xvcnMiKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMi
X3MsIHRvSlNPTlN0cmluZ0FycmF5KGNvbHVtbk5hbWVzKSk7Ci0gICAgICAgIHJlc3VsdE9iamVj
dC0+c2V0U3RyaW5nKCJub3RlcyJfcywgbm90ZXMpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNl
dERvdWJsZSgidGltZXN0YW1wIl9zLCB0aW1lc3RhbXApOwotICAgICAgICByZXN1bHRPYmplY3Qt
PnNldE9iamVjdCgidmFsdWVzIl9zLCBbdmFsdWVzIHRvSlNPTk9iamVjdF0pOwotICAgICAgICBy
ZXN1bHRPYmplY3QtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBbcGF5bG9hZCB0b0pTT05PYmplY3Rd
KTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCBkYXRh
YmFzZUlkKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBb
c3FsRXJyb3IgdG9KU09OT2JqZWN0XSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5n
KCJzY3JlZW5Db2xvciJfcywgdG9Qcm90b2NvbFN0cmluZyhzY3JlZW5Db2xvcikpOwotICAgICAg
ICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIHRvSlNPTlN0cmlu
Z0FycmF5KGFsdGVybmF0ZUNvbG9ycykpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmlu
ZygicHJpbnRDb2xvciJfcywgdG9Qcm90b2NvbFN0cmluZyhwcmludENvbG9yKSk7Ci0gICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVz
dWx0T2JqZWN0KSwgZmFsc2UpOwotICAgIH07Ci0KLSAgICBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8g
Km9faW5fY29sdW1uTmFtZXMgPSB0b09iakNTdHJpbmdBcnJheSgmaW5fY29sdW1uTmFtZXMpOwot
ICAgIE5TU3RyaW5nICpvX2luX25vdGVzID0gaW5fbm90ZXM7Ci0gICAgZG91YmxlIG9faW5fdGlt
ZXN0YW1wID0gaW5fdGltZXN0YW1wOwotICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb19pbl92
YWx1ZXMgPSBbW1tSV0lQcm90b2NvbEpTT05PYmplY3QgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVj
dDomaW5fdmFsdWVzXSBhdXRvcmVsZWFzZV07Ci0gICAgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpv
X2luX3BheWxvYWQgPSBbW1tSV0lQcm90b2NvbEpTT05PYmplY3QgYWxsb2NdIGluaXRXaXRoSlNP
Tk9iamVjdDomaW5fcGF5bG9hZF0gYXV0b3JlbGVhc2VdOwotICAgIGludCBvX2luX2RhdGFiYXNl
SWQgPSBpbl9kYXRhYmFzZUlkOwotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKm9faW5f
c3FsRXJyb3IgPSBbW1tUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGFsbG9jXSBpbml0V2l0aEpT
T05PYmplY3Q6JmluX3NxbEVycm9yXSBhdXRvcmVsZWFzZV07Ci0gICAgT3B0aW9uYWw8VGVzdFBy
b3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzPiBvX2luX3NjcmVlbkNvbG9yID0gZnJvbVByb3Rv
Y29sU3RyaW5nPFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycz4oaW5fc2NyZWVuQ29s
b3IpOwotICAgIGlmICghb19pbl9zY3JlZW5Db2xvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFy
YW1zLCAiUGFyYW1ldGVyICdzY3JlZW5Db2xvcicgb2YgbWV0aG9kICdEYXRhYmFzZS5leGVjdXRl
Tm9PcHRpb25hbFBhcmFtZXRlcnMnIGNhbm5vdCBiZSBwcm9jZXNzZWQiX3MpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqb19pbl9hbHRlcm5hdGVD
b2xvcnMgPSB0b09iakNTdHJpbmdBcnJheSgmaW5fYWx0ZXJuYXRlQ29sb3JzKTsKLSAgICBPcHRp
b25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50
Q29sb3I+IG9faW5fcHJpbnRDb2xvciA9IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xE
YXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3I+KGluX3ByaW50Q29s
b3IpOwotICAgIGlmICghb19pbl9wcmludENvbG9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJh
bXMsICJQYXJhbWV0ZXIgJ3ByaW50Q29sb3InIG9mIG1ldGhvZCAnRGF0YWJhc2UuZXhlY3V0ZU5v
T3B0aW9uYWxQYXJhbWV0ZXJzJyBjYW5ub3QgYmUgcHJvY2Vzc2VkIl9zKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIFttX2RlbGVnYXRlIGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVy
c1dpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3ND
YWxsYmFjayBjb2x1bW5OYW1lczpvX2luX2NvbHVtbk5hbWVzIG5vdGVzOm9faW5fbm90ZXMgdGlt
ZXN0YW1wOm9faW5fdGltZXN0YW1wIHZhbHVlczpvX2luX3ZhbHVlcyBwYXlsb2FkOm9faW5fcGF5
bG9hZCBkYXRhYmFzZUlkOm9faW5fZGF0YWJhc2VJZCBzcWxFcnJvcjpvX2luX3NxbEVycm9yIHNj
cmVlbkNvbG9yOm9faW5fc2NyZWVuQ29sb3IudmFsdWUoKSBhbHRlcm5hdGVDb2xvcnM6b19pbl9h
bHRlcm5hdGVDb2xvcnMgcHJpbnRDb2xvcjpvX2luX3ByaW50Q29sb3IudmFsdWUoKV07Ci19Ci0K
LQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
QmFja2VuZERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25m
aWd1cmF0aW9uLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13
aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFBy
b3RvY29sLmg+Ci0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGlu
dGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKLUBwcm9wZXJ0eSAo
bm9uYXRvbWljLCByZXRhaW4sIHNldHRlcj1zZXREYXRhYmFzZUhhbmRsZXI6KSBpZDxUZXN0UHJv
dG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+IGRhdGFiYXNlSGFuZGxlcjsKLUBlbmQKLQotCi0j
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQg
IlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50
ZXJuYWwuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotI2lt
cG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KLSNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2lt
cG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJz
Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMu
aD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24KLXsKLSAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xs
ZXIqIF9jb250cm9sbGVyOwotICAgIGlkPFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxl
cj4gX2RhdGFiYXNlSGFuZGxlcjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJv
bGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCi17Ci0gICAg
c2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7
Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIpOwotICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsK
LSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgW19kYXRhYmFz
ZUhhbmRsZXIgcmVsZWFzZV07Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi0tICh2b2lkKXNl
dERhdGFiYXNlSGFuZGxlcjooaWQ8VGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyPilo
YW5kbGVyCi17Ci0gICAgaWYgKGhhbmRsZXIgPT0gX2RhdGFiYXNlSGFuZGxlcikKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgW19kYXRhYmFzZUhhbmRsZXIgcmVsZWFzZV07Ci0gICAgX2RhdGFiYXNl
SGFuZGxlciA9IFtoYW5kbGVyIHJldGFpbl07Ci0KLSAgICBhdXRvIGFsdGVybmF0ZURpc3BhdGNo
ZXIgPSBtYWtlVW5pcXVlPE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiho
YW5kbGVyKTsKLSAgICBhdXRvIGFsdGVybmF0ZUFnZW50ID0gbWFrZVVuaXF1ZTxBbHRlcm5hdGVE
aXNwYXRjaGFibGVBZ2VudDxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyLCBBbHRlcm5hdGVEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVyPj4oIkRhdGFiYXNlIl9zLCAqX2NvbnRyb2xsZXIsIFdURk1v
dmUoYWx0ZXJuYXRlRGlzcGF0Y2hlcikpOwotICAgIF9jb250cm9sbGVyLT5hcHBlbmRFeHRyYUFn
ZW50KFdURk1vdmUoYWx0ZXJuYXRlQWdlbnQpKTsKLX0KLQotLSAoaWQ8VGVzdFByb3RvY29sRGF0
YWJhc2VEb21haW5IYW5kbGVyPilkYXRhYmFzZUhhbmRsZXIKLXsKLSAgICByZXR1cm4gX2RhdGFi
YXNlSGFuZGxlcjsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29u
ZmlndXJhdGlvbi5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRj
aGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgt
b3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgi
Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8d3Rm
L0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0jIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFu
ZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3Vu
ZGF0aW9uLmg+Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3Qu
aD4KLQotCi1AY2xhc3MgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcjsKLQotdHlwZWRlZiBOU19F
TlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sUGxhdGZvcm0pIHsKLSAgICBUZXN0UHJvdG9jb2xQ
bGF0Zm9ybUFsbCwKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWMsCi0gICAgVGVzdFBy
b3RvY29sUGxhdGZvcm1JT1MsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUywKLX07Ci0K
LQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5
Q29sb3JzKSB7Ci0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzUmVkLAotICAg
IFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc0dyZWVuLAotICAgIFRlc3RQcm90b2Nv
bERhdGFiYXNlUHJpbWFyeUNvbG9yc0JsdWUsCi19OwotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRl
Z2VyLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmlu
dENvbG9yKSB7Ci0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJh
bWV0ZXJzUHJpbnRDb2xvckN5YW4sCi0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxs
T3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvck1hZ2VudGEsCi0gICAgVGVzdFByb3RvY29sRGF0
YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvclllbGxvdywKLSAgICBU
ZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9y
QmxhY2ssCi19OwotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xEYXRh
YmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yKSB7Ci0gICAgVGVzdFBy
b3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckN5YW4s
Ci0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJp
bnRDb2xvck1hZ2VudGEsCi0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9u
YWxQYXJhbWV0ZXJzUHJpbnRDb2xvclllbGxvdywKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQmxhY2ssCi19OwotCi10eXBlZGVm
IE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFs
UGFyYW1ldGVyc1ByaW50Q29sb3IpIHsKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVO
b09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JDeWFuLAotICAgIFRlc3RQcm90b2NvbERhdGFi
YXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvck1hZ2VudGEsCi0gICAgVGVz
dFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yWWVs
bG93LAotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJz
UHJpbnRDb2xvckJsYWNrLAotfTsKLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFBy
b3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yKSB7Ci0g
ICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENv
bG9yQ3lhbiwKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1l
dGVyc1ByaW50Q29sb3JNYWdlbnRhLAotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5v
T3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvclllbGxvdywKLSAgICBUZXN0UHJvdG9jb2xEYXRh
YmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JCbGFjaywKLX07Ci0KLQot
X19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQ
cm90b2NvbERhdGFiYXNlRXJyb3IgOiBSV0lQcm90b2NvbEpTT05PYmplY3QKLS0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXls
b2FkOwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29s
SlNPTk9iamVjdCAqKWpzb25PYmplY3Q7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhNZXNzYWdl
OihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZTooaW50KWNvZGU7Ci0vKiByZXF1aXJlZCAqLyBAcHJv
cGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKm1lc3NhZ2U7Ci0vKiByZXF1aXJlZCAq
LyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQgY29kZTsKLUBlbmQKLQotQHByb3Rv
Y29sIFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlciA8TlNPYmplY3Q+Ci1Ab3B0aW9u
YWwKLS0gKHZvaWQpZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1dpdGhFcnJvckNhbGxiYWNr
Oih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6
KHZvaWQoXikoTlNBcnJheS8qPE5TU3RyaW5nPiovICoqY29sdW1uTmFtZXMsIE5TU3RyaW5nICoq
bm90ZXMsIGRvdWJsZSAqdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKip2YWx1ZXMs
IFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnBheWxvYWQsIGludCAqZGF0YWJhc2VJZCwgVGVzdFBy
b3RvY29sRGF0YWJhc2VFcnJvciAqKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1h
cnlDb2xvcnMgKnNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiphbHRlcm5hdGVD
b2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1By
aW50Q29sb3IgKnByaW50Q29sb3IpKXN1Y2Nlc3NDYWxsYmFjayBjb2x1bW5OYW1lczooTlNBcnJh
eS8qPE5TU3RyaW5nPiovICoqKWNvbHVtbk5hbWVzIG5vdGVzOihOU1N0cmluZyAqKilub3RlcyB0
aW1lc3RhbXA6KGRvdWJsZSAqKXRpbWVzdGFtcCB2YWx1ZXM6KFJXSVByb3RvY29sSlNPTk9iamVj
dCAqKil2YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqKXBheWxvYWQgZGF0
YWJhc2VJZDooaW50ICopZGF0YWJhc2VJZCBzcWxFcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VF
cnJvciAqKilzcWxFcnJvciBzY3JlZW5Db2xvcjooVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5
Q29sb3JzICopc2NyZWVuQ29sb3IgYWx0ZXJuYXRlQ29sb3JzOihOU0FycmF5Lyo8TlNTdHJpbmc+
Ki8gKiopYWx0ZXJuYXRlQ29sb3JzIHByaW50Q29sb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXhl
Y3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IgKilwcmludENvbG9yOwotLSAodm9p
ZClleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShO
U1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKE5T
QXJyYXkvKjxOU1N0cmluZz4qLyAqY29sdW1uTmFtZXMsIE5TU3RyaW5nICpub3RlcywgZG91Ymxl
IHRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICp2YWx1ZXMsIFJXSVByb3RvY29sSlNP
Tk9iamVjdCAqcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJy
b3IgKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgc2NyZWVuQ29s
b3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xE
YXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IgcHJpbnRDb2xvcikp
c3VjY2Vzc0NhbGxiYWNrIGNvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1
bW5OYW1lcyBub3RlczooTlNTdHJpbmcgKilub3RlcyB0aW1lc3RhbXA6KGRvdWJsZSl0aW1lc3Rh
bXAgdmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKil2YWx1ZXMgcGF5bG9hZDooUldJUHJv
dG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZCBkYXRhYmFzZUlkOihpbnQpZGF0YWJhc2VJZCBzcWxF
cnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKXNxbEVycm9yIHNjcmVlbkNvbG9yOihU
ZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMpc2NyZWVuQ29sb3IgYWx0ZXJuYXRlQ29s
b3JzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilhbHRlcm5hdGVDb2xvcnMgcHJpbnRDb2xvcjoo
VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9y
KXByaW50Q29sb3I7Ci1AZW5kCi0KLQotCi0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90
b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2wuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1y
ZXR1cm4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29s
SlNPTk9iamVjdFByaXZhdGUuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxl
SW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotCi0K
LQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQg
IlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlD
b252ZXJzaW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdGVtcGxhdGU8dHlwZW5h
bWUgT2JqQ0VudW1UeXBlPgotT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJp
bmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmlu
ZyhUZXN0UHJvdG9jb2xQbGF0Zm9ybSB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAg
ICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOgotICAgICAgICByZXR1cm4gImFsbCJfczsK
LSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzoKLSAgICAgICAgcmV0dXJuICJn
ZW5lcmljIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1JT1M6Ci0gICAgICAgIHJl
dHVybiAiaW9zIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzoKLSAgICAg
ICAgcmV0dXJuICJtYWNvcyJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRp
b25hbDxUZXN0UHJvdG9jb2xQbGF0Zm9ybT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJhbGwiKQotICAgICAgICByZXR1cm4gVGVz
dFByb3RvY29sUGxhdGZvcm1BbGw7Ci0gICAgaWYgKHZhbHVlID09ICJnZW5lcmljIikKLSAgICAg
ICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzsKLSAgICBpZiAodmFsdWUgPT0g
ImlvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzsKLSAgICBpZiAo
dmFsdWUgPT0gIm1hY29zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFj
T1M7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotCi1pbmxpbmUgU3RyaW5nIHRvUHJv
dG9jb2xTdHJpbmcoVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzIHZhbHVlKQotewot
ICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5
Q29sb3JzUmVkOgotICAgICAgICByZXR1cm4gInJlZCJfczsKLSAgICBjYXNlIFRlc3RQcm90b2Nv
bERhdGFiYXNlUHJpbWFyeUNvbG9yc0dyZWVuOgotICAgICAgICByZXR1cm4gImdyZWVuIl9zOwot
ICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzQmx1ZToKLSAgICAgICAg
cmV0dXJuICJibHVlIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFs
PFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycz4gZnJvbVByb3RvY29sU3RyaW5nKGNv
bnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJyZWQiKQotICAgICAgICBy
ZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzUmVkOwotICAgIGlmICh2YWx1
ZSA9PSAiZ3JlZW4iKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5
Q29sb3JzR3JlZW47Ci0gICAgaWYgKHZhbHVlID09ICJibHVlIikKLSAgICAgICAgcmV0dXJuIFRl
c3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc0JsdWU7Ci0gICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKLX0KLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbERh
dGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IgdmFsdWUpCi17Ci0g
ICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVB
bGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQ3lhbjoKLSAgICAgICAgcmV0dXJuICJjeWFu
Il9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJh
bWV0ZXJzUHJpbnRDb2xvck1hZ2VudGE6Ci0gICAgICAgIHJldHVybiAibWFnZW50YSJfczsKLSAg
ICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1By
aW50Q29sb3JZZWxsb3c6Ci0gICAgICAgIHJldHVybiAieWVsbG93Il9zOwotICAgIGNhc2UgVGVz
dFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckJs
YWNrOgotICAgICAgICByZXR1cm4gImJsYWNrIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8Pgot
aW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFy
YW1ldGVyc1ByaW50Q29sb3I+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVl
KQotewotICAgIGlmICh2YWx1ZSA9PSAiY3lhbiIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9j
b2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQ3lhbjsKLSAg
ICBpZiAodmFsdWUgPT0gIm1hZ2VudGEiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0
YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvck1hZ2VudGE7Ci0gICAg
aWYgKHZhbHVlID09ICJ5ZWxsb3ciKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJh
c2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvclllbGxvdzsKLSAgICBpZiAo
dmFsdWUgPT0gImJsYWNrIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhl
Y3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JCbGFjazsKLSAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwotfQotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3Rv
Y29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvciB2YWx1ZSkK
LXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhl
Y3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JDeWFuOgotICAgICAgICByZXR1cm4g
ImN5YW4iX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25h
bFBhcmFtZXRlcnNQcmludENvbG9yTWFnZW50YToKLSAgICAgICAgcmV0dXJuICJtYWdlbnRhIl9z
OwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0
ZXJzUHJpbnRDb2xvclllbGxvdzoKLSAgICAgICAgcmV0dXJuICJ5ZWxsb3ciX3M7Ci0gICAgY2Fz
ZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENv
bG9yQmxhY2s6Ci0gICAgICAgIHJldHVybiAiYmxhY2siX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0
ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9u
YWxQYXJhbWV0ZXJzUHJpbnRDb2xvcj4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYg
dmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJjeWFuIikKLSAgICAgICAgcmV0dXJuIFRlc3RQ
cm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JDeWFu
OwotICAgIGlmICh2YWx1ZSA9PSAibWFnZW50YSIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9j
b2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yTWFnZW50YTsK
LSAgICBpZiAodmFsdWUgPT0gInllbGxvdyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xE
YXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yWWVsbG93OwotICAg
IGlmICh2YWx1ZSA9PSAiYmxhY2siKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJh
c2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckJsYWNrOwotICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7Ci19Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0
UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IgdmFs
dWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFz
ZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JDeWFuOgotICAgICAgICByZXR1
cm4gImN5YW4iX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlv
bmFsUGFyYW1ldGVyc1ByaW50Q29sb3JNYWdlbnRhOgotICAgICAgICByZXR1cm4gIm1hZ2VudGEi
X3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1l
dGVyc1ByaW50Q29sb3JZZWxsb3c6Ci0gICAgICAgIHJldHVybiAieWVsbG93Il9zOwotICAgIGNh
c2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENv
bG9yQmxhY2s6Ci0gICAgICAgIHJldHVybiAiYmxhY2siX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0
ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25h
bFBhcmFtZXRlcnNQcmludENvbG9yPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2
YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gImN5YW4iKQotICAgICAgICByZXR1cm4gVGVzdFBy
b3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQ3lhbjsK
LSAgICBpZiAodmFsdWUgPT0gIm1hZ2VudGEiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29s
RGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yTWFnZW50YTsKLSAg
ICBpZiAodmFsdWUgPT0gInllbGxvdyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRh
YmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JZZWxsb3c7Ci0gICAgaWYg
KHZhbHVlID09ICJibGFjayIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JCbGFjazsKLSAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwotfQotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3Rv
Y29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yIHZhbHVlKQot
ewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVj
dXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQ3lhbjoKLSAgICAgICAgcmV0dXJuICJj
eWFuIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBh
cmFtZXRlcnNQcmludENvbG9yTWFnZW50YToKLSAgICAgICAgcmV0dXJuICJtYWdlbnRhIl9zOwot
ICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQ
cmludENvbG9yWWVsbG93OgotICAgICAgICByZXR1cm4gInllbGxvdyJfczsKLSAgICBjYXNlIFRl
c3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckJs
YWNrOgotICAgICAgICByZXR1cm4gImJsYWNrIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8Pgot
aW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJh
bWV0ZXJzUHJpbnRDb2xvcj4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUp
Ci17Ci0gICAgaWYgKHZhbHVlID09ICJjeWFuIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2Nv
bERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckN5YW47Ci0gICAg
aWYgKHZhbHVlID09ICJtYWdlbnRhIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFi
YXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvck1hZ2VudGE7Ci0gICAgaWYg
KHZhbHVlID09ICJ5ZWxsb3ciKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VF
eGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yWWVsbG93OwotICAgIGlmICh2YWx1
ZSA9PSAiYmxhY2siKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRl
Tm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQmxhY2s7Ci0gICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNv
bW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQg
IlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90
b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0K
LUBpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChEYXRhYmFzZURvbWFpbikK
LQotKyAodm9pZClfcGFyc2VEYXRhYmFzZUlkOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5
bG9hZDooaWQpcGF5bG9hZDsKLSsgKHZvaWQpX3BhcnNlUHJpbWFyeUNvbG9yczooTlNOdW1iZXIg
Kiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZUNvbG9y
TGlzdDooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClw
YXlsb2FkOwotKyAodm9pZClfcGFyc2VFcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAq
KilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLQotQGVuZAotCi1AaW1wbGVtZW50
YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChEYXRhYmFzZURvbWFpbikKLQotKyAo
dm9pZClfcGFyc2VEYXRhYmFzZUlkOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDoo
aWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwg
W05TTnVtYmVyIGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gKE5TTnVtYmVyICopcGF5bG9hZDsK
LX0KLQotKyAodm9pZClfcGFyc2VQcmltYXJ5Q29sb3JzOihOU051bWJlciAqKilvdXRWYWx1ZSBm
cm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZ
UEUocGF5bG9hZCwgW05TU3RyaW5nIGNsYXNzXSk7Ci0gICAgT3B0aW9uYWw8VGVzdFByb3RvY29s
RGF0YWJhc2VQcmltYXJ5Q29sb3JzPiByZXN1bHQgPSBJbnNwZWN0b3I6OmZyb21Qcm90b2NvbFN0
cmluZzxUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnM+KHBheWxvYWQpOwotICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfQkFEX0VOVU1fVkFMVUUocmVzdWx0LCBAIlByaW1hcnlDb2xvcnMi
KTsKLSAgICAqb3V0VmFsdWUgPSBAKHJlc3VsdC52YWx1ZSgpKTsKLX0KLQotKyAodm9pZClfcGFy
c2VDb2xvckxpc3Q6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9h
ZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9h
ZCwgW05TQXJyYXkvKjxOU1N0cmluZz4qLyBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IChOU0Fy
cmF5Lyo8TlNTdHJpbmc+Ki8gKilwYXlsb2FkOwotfQotCi0rICh2b2lkKV9wYXJzZUVycm9yOihU
ZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXls
b2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNEaWN0
aW9uYXJ5IGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xEYXRhYmFzZUVy
cm9yIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07Ci19Ci0KLUBlbmQKLQotCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sVHlwZXMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJv
dG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMu
aCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+
Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4K
LQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi1AaW1wbGVtZW50YXRpb24gVGVzdFBy
b3RvY29sRGF0YWJhc2VFcnJvcgotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihu
b25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCi17Ci0gICAgaWYg
KCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBUSFJP
V19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJtZXNzYWdlIl0sIEAi
bWVzc2FnZSIpOwotICAgIHNlbGYubWVzc2FnZSA9IHBheWxvYWRbQCJtZXNzYWdlIl07Ci0KLSAg
ICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJjb2RlIl0s
IEAiY29kZSIpOwotICAgIHNlbGYuY29kZSA9IFtwYXlsb2FkW0AiY29kZSJdIGludGVnZXJWYWx1
ZV07Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3Rv
Y29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilvYmplY3QKLXsKLSAgICBpZiAoIShz
ZWxmID0gW3N1cGVyIGluaXRXaXRoSlNPTk9iamVjdDpbb2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0
KCldKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZTooaW50
KWNvZGUKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJu
IG5pbDsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkobWVzc2Fn
ZSwgQCJtZXNzYWdlIik7Ci0KLSAgICBzZWxmLm1lc3NhZ2UgPSBtZXNzYWdlOwotICAgIHNlbGYu
Y29kZSA9IGNvZGU7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClzZXRNZXNzYWdl
OihOU1N0cmluZyAqKW1lc3NhZ2UKLXsKLSAgICBbc3VwZXIgc2V0U3RyaW5nOm1lc3NhZ2UgZm9y
S2V5OkAibWVzc2FnZSJdOwotfQotCi0tIChOU1N0cmluZyAqKW1lc3NhZ2UKLXsKLSAgICByZXR1
cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAIm1lc3NhZ2UiXTsKLX0KLQotLSAodm9pZClzZXRDb2Rl
OihpbnQpY29kZQotewotICAgIFtzdXBlciBzZXRJbnRlZ2VyOmNvZGUgZm9yS2V5OkAiY29kZSJd
OwotfQotCi0tIChpbnQpY29kZQotewotICAgIHJldHVybiBbc3VwZXIgaW50ZWdlckZvcktleTpA
ImNvZGUiXTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMu
bW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24t
cmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvZXhwZWN0ZWQvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbi1yZXN1bHQK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0YzBmZTNmZTNjLi4wMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJp
Yy9leHBlY3RlZC9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uLXJlc3VsdAorKysg
L2Rldi9udWxsCkBAIC0xLDg3MCArMCwwIEBACi0jIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFj
a2VuZENvbW1hbmRzLmpzCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5p
dGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMK
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRm
b3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3By
YWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
LQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQot
Y2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZvaWQgc2V0
QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIp
IHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KLSAgICBCYWNr
ZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tl
bmREaXNwYXRjaGVyLmdldCgpOyB9Ci1wcml2YXRlOgotICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0
Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKLX07Ci0KLQotCi0KLX0gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgotCi0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCi0jIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQot
I2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdHlwZWRlZiBTdHJpbmcgRXJyb3JT
dHJpbmc7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVz
dEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3Bh
dGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25z
LXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlz
cGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5k
Um91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvTmV2
ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNpZiBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSNpbmNsdWRlICJUZXN0QWx0ZXJu
YXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIEluc3BlY3RvciB7
Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0QmFj
a2VuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0
Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdp
dGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgi
Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEZyb250ZW5kUm91dGVyOwot
Ci19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlz
cGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3Bw
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMt
cGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMu
aCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsK
LQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5k
RGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1w
bGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9j
b2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNw
ZWN0b3IgewotCi0KLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLQotCi0KLQotCi0KLX0g
Ly8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbE9iamVjdHMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5p
dGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdFByb3Rv
Y29sT2JqZWN0cy5oIgotCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotbmFtZXNwYWNlIFBy
b3RvY29sIHsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0KLSMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgot
I2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQotCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3Igewot
Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNr
ZW5kRGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZp
bml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3Rv
Y29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5h
bC5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2luY2x1ZGUg
PHd0Zi9KU09OVmFsdWVzLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi19IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0
Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBs
YXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgotCi1fX2F0dHJpYnV0ZV9fKCh2
aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJh
dGlvbiA6IE5TT2JqZWN0Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25m
aWd1cmF0aW9uLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24u
bW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1h
Yy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKLQotI2ltcG9ydCAiVGVz
dFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRj
aGVycy5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdl
bnQuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJv
bGxlci5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2Vu
ZERpc3BhdGNoZXJzLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcnMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGltcGxlbWVu
dGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KLXsKLSAgICBBdWdtZW50YWJsZUluc3Bl
Y3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIK
LXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0
dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250
cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBb
c3VwZXIgZGVhbGxvY107Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24ubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlz
cGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9u
cy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQg
IlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMu
aD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1t
YWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2ltcG9ydCA8V2ViSW5z
cGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgotCi0KLQotCi10eXBlZGVmIE5TX0VOVU0o
TlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xQbGF0Zm9ybSkgewotICAgIFRlc3RQcm90b2NvbFBsYXRm
b3JtQWxsLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYywKLSAgICBUZXN0UHJvdG9j
b2xQbGF0Zm9ybUlPUywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TLAotfTsKLQotCi0K
LQotCi0KLQotCi0KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21w
YXRpYmlsaXR5T2JqZWN0cy5oPgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0KLSMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCi0jaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBv
cnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLQotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
SW50ZXJuYWwuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
LmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1h
Yy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVBy
b3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdGVt
cGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgotT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9t
UHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0KLWlubGluZSBTdHJpbmcgdG9Q
cm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xQbGF0Zm9ybSB2YWx1ZSkKLXsKLSAgICBzd2l0Y2go
dmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOgotICAgICAgICByZXR1
cm4gImFsbCJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzoKLSAgICAg
ICAgcmV0dXJuICJnZW5lcmljIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1JT1M6
Ci0gICAgICAgIHJldHVybiAiaW9zIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1N
YWNPUzoKLSAgICAgICAgcmV0dXJuICJtYWNvcyJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4K
LWlubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xQbGF0Zm9ybT4gZnJvbVByb3RvY29sU3RyaW5n
KGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJhbGwiKQotICAgICAg
ICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1BbGw7Ci0gICAgaWYgKHZhbHVlID09ICJnZW5l
cmljIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzsKLSAgICBp
ZiAodmFsdWUgPT0gImlvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlP
UzsKLSAgICBpZiAodmFsdWUgPT0gIm1hY29zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2Nv
bFBsYXRmb3JtTWFjT1M7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBs
YXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0KLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgotI2ltcG9ydCA8
V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLQotdXNpbmcgbmFt
ZXNwYWNlIEluc3BlY3RvcjsKLQotCi0KLQotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5t
bQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFj
LXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xK
U09OT2JqZWN0UHJpdmF0ZS5oPgotI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQg
PHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZG9tYWlu
LWRlYnVnZ2FibGVUeXBlcy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2RvbWFpbi1kZWJ1Z2dhYmxlVHlw
ZXMuanNvbi1yZXN1bHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1YjU5MTdhYTBi
Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9kb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24tcmVz
dWx0CisrKyAvZGV2L251bGwKQEAgLTEsMTA2MyArMCwwIEBACi0jIyMgQmVnaW4gRmlsZTogSW5z
cGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLS8vIERvbWFpbgotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRv
bWFpbigiRG9tYWluIiwgbnVsbCk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgi
RG9tYWluLkNvbW1hbmQiLCBudWxsLCBbXSwgW10pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rl
ckV2ZW50KCJEb21haW4uRXZlbnQiLCBudWxsLCBbXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lz
dGVyRG9tYWluRGlzcGF0Y2hlciA9IEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEaXNwYXRjaGVy
LmJpbmQoSW5zcGVjdG9yQmFja2VuZCwgIkRvbWFpbiIpOwotSW5zcGVjdG9yQmFja2VuZC5hY3Rp
dmF0ZURvbWFpbigiRG9tYWluIiwgWyJ3ZWItcGFnZSJdKTsKLSMjIyBFbmQgRmlsZTogSW5zcGVj
dG9yQmFja2VuZENvbW1hbmRzLmpzCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21h
aW4tZGVidWdnYWJsZVR5cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCi0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotCi1uYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKLQotY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGlj
OgotICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVy
PiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hl
cik7IH0KLSAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7
IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Ci1wcml2YXRlOgotICAgIFJlZlB0
cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKLX07Ci0KLQotY2xhc3Mg
QWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2Vu
ZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZpcnR1YWwgfkFsdGVybmF0ZURvbWFpbkJhY2tl
bmREaXNwYXRjaGVyKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIENvbW1hbmQobG9uZyBjYWxsSWQp
ID0gMDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jZW5kaWYgLy8gRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jIyMgRW5kIEZpbGU6IFRlc3RBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmRE
aXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLWRl
YnVnZ2FibGVUeXBlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgot
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Igewot
Ci10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQotY2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNo
ZXI7Ci0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0K
LWNsYXNzIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7Ci1wdWJsaWM6Ci0gICAgdmly
dHVhbCB2b2lkIENvbW1hbmQoRXJyb3JTdHJpbmcmKSA9IDA7Ci1wcm90ZWN0ZWQ6Ci0gICAgdmly
dHVhbCB+RG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7Ci19OwotCi1jbGFzcyBEb21h
aW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlz
cGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hl
cj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyKik7Ci0gICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBt
ZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkgZmluYWw7Ci1wcml2YXRlOgotICAg
IHZvaWQgQ29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJh
bWV0ZXJzKTsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLXB1
YmxpYzoKLSAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlRG9tYWluQmFj
a2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRj
aGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQotcHJpdmF0ZToKLSAgICBBbHRlcm5hdGVEb21h
aW5CYWNrZW5kRGlzcGF0Y2hlciogbV9hbHRlcm5hdGVEaXNwYXRjaGVyIHsgbnVsbHB0ciB9Owot
I2VuZGlmCi1wcml2YXRlOgotICAgIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNw
YXRjaGVyJiwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgRG9tYWluQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50IHsgbnVsbHB0ciB9OwotfTsKLQotfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMu
aAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pT
T05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKLSNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCi0j
ZW5kaWYKLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLURvbWFpbkJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlcjo6fkRvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQotCi1SZWY8RG9t
YWluQmFja2VuZERpc3BhdGNoZXI+IERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoQmFj
a2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIqIGFnZW50KQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERvbWFpbkJhY2tl
bmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOwotfQotCi1Eb21haW5CYWNr
ZW5kRGlzcGF0Y2hlcjo6RG9tYWluQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXIm
IGJhY2tlbmREaXNwYXRjaGVyLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50
KQotICAgIDogU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIp
Ci0gICAgLCBtX2FnZW50KGFnZW50KQotewotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lz
dGVyRGlzcGF0Y2hlckZvckRvbWFpbigiRG9tYWluIl9zLCB0aGlzKTsKLX0KLQotdm9pZCBEb21h
aW5CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmlu
ZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCi17Ci0gICAgUmVmPERvbWFp
bkJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKLQotICAgIFJlZlB0cjxKU09OOjpP
YmplY3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBh
cmFtZXRlcnMpOwotCi0gICAgaWYgKG1ldGhvZCA9PSAiQ29tbWFuZCIpCi0gICAgICAgIENvbW1h
bmQocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKLSAgICBlbHNlCi0gICAgICAgIG1f
YmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6
Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIp
OwotfQotCi12b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVz
dElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQotewotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQotICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAg
ICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5Db21tYW5kKHJlcXVlc3RJZCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJl
ZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgbV9h
Z2VudC0+Q29tbWFuZChlcnJvcik7Ci0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJl
c3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJl
cG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3Zl
KGVycm9yKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6
IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlu
LWRlYnVnZ2FibGVUeXBlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5o
IgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBGcm9udGVuZFJvdXRlcjsK
LQotY2xhc3MgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKLXB1YmxpYzoKLSAgICBEb21haW5Gcm9udGVuZERpc3BhdGNoZXIoRnJvbnRlbmRS
b3V0ZXImIGZyb250ZW5kUm91dGVyKSA6IG1fZnJvbnRlbmRSb3V0ZXIoZnJvbnRlbmRSb3V0ZXIp
IHsgfQotICAgIHZvaWQgRXZlbnQoKTsKLXByaXZhdGU6Ci0gICAgRnJvbnRlbmRSb3V0ZXImIG1f
ZnJvbnRlbmRSb3V0ZXI7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQg
RmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZy
b250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
ZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJv
bnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFj
ZSBJbnNwZWN0b3IgewotCi12b2lkIERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcjo6RXZlbnQoKQot
ewotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4uRXZl
bnQiX3MpOwotCi0gICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRv
SlNPTlN0cmluZygpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQg
RmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xPYmplY3RzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21h
aW4tZGVidWdnYWJsZVR5cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFt
ZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotCi0K
LQotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBkb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbE9iamVjdHMuaCIKLQotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLW5hbWVzcGFj
ZSBQcm90b2NvbCB7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAot
Ci0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2lu
Y2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQotQHByb3RvY29sIFRlc3RQcm90b2NvbERvbWFpbkRv
bWFpbkhhbmRsZXI7Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLWNsYXNzIE9iakNJbnNw
ZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVEb21h
aW5CYWNrZW5kRGlzcGF0Y2hlciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJs
aWM6Ci0gICAgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQcm90
b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7
IH0KLSAgICB2b2lkIENvbW1hbmQobG9uZyByZXF1ZXN0SWQpIGZpbmFsOwotcHJpdmF0ZToKLSAg
ICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdh
dGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3Rv
Y29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5h
bC5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2luY2x1ZGUg
PHd0Zi9KU09OVmFsdWVzLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi12b2lkIE9iakNJ
bnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVlc3RJZCkK
LXsKLSAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoQ29t
bWFuZFdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgewotICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERp
c3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi5Db21tYW5kJyB3YXMgbm90IGZvdW5k
Il9zKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3Ry
aW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2Nv
bEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7
Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAg
fTsKLQotICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57Ci0gICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCksIGZh
bHNlKTsKLSAgICB9OwotCi0gICAgW21fZGVsZWdhdGUgQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNr
OmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107Ci19Ci0KLQot
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFj
a2VuZERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1
cmF0aW9uLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdn
YWJsZVR5cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgotCi1fX2F0dHJpYnV0ZV9f
KCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbiA6IE5TT2JqZWN0Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluLCBzZXR0ZXI9
c2V0RG9tYWluSGFuZGxlcjopIGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IGRv
bWFpbkhhbmRsZXI7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFRlc3RQcm90b2Nv
bERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqZG9tYWluRXZlbnREaXNwYXRjaGVyOwotQGVu
ZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbENv
bmZpZ3VyYXRpb24uaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbXBv
cnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRD
b3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW1wb3J0IDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLQotdXNpbmcgbmFt
ZXNwYWNlIEluc3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3Vy
YXRpb24KLXsKLSAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVy
OwotICAgIGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IF9kb21haW5IYW5kbGVy
OwotICAgIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqX2RvbWFpbkV2
ZW50RGlzcGF0Y2hlcjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjoo
QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCi17Ci0gICAgc2VsZiA9
IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAg
QVNTRVJUKGNvbnRyb2xsZXIpOwotICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICBy
ZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgW19kb21haW5IYW5kbGVy
IHJlbGVhc2VdOwotICAgIFtfZG9tYWluRXZlbnREaXNwYXRjaGVyIHJlbGVhc2VdOwotICAgIFtz
dXBlciBkZWFsbG9jXTsKLX0KLQotLSAodm9pZClzZXREb21haW5IYW5kbGVyOihpZDxUZXN0UHJv
dG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiloYW5kbGVyCi17Ci0gICAgaWYgKGhhbmRsZXIgPT0g
X2RvbWFpbkhhbmRsZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIFtfZG9tYWluSGFuZGxlciBy
ZWxlYXNlXTsKLSAgICBfZG9tYWluSGFuZGxlciA9IFtoYW5kbGVyIHJldGFpbl07Ci0KLSAgICBh
dXRvIGFsdGVybmF0ZURpc3BhdGNoZXIgPSBtYWtlVW5pcXVlPE9iakNJbnNwZWN0b3JEb21haW5C
YWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7Ci0gICAgYXV0byBhbHRlcm5hdGVBZ2VudCA9IG1h
a2VVbmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8RG9tYWluQmFja2VuZERpc3BhdGNo
ZXIsIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyPj4oIkRvbWFpbiJfcywgKl9jb250
cm9sbGVyLCBXVEZNb3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIpKTsKLSAgICBfY29udHJvbGxlci0+
YXBwZW5kRXh0cmFBZ2VudChXVEZNb3ZlKGFsdGVybmF0ZUFnZW50KSk7Ci19Ci0KLS0gKGlkPFRl
c3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+KWRvbWFpbkhhbmRsZXIKLXsKLSAgICByZXR1
cm4gX2RvbWFpbkhhbmRsZXI7Ci19Ci0KLS0gKFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50
RGlzcGF0Y2hlciAqKWRvbWFpbkV2ZW50RGlzcGF0Y2hlcgotewotICAgIGlmICghX2RvbWFpbkV2
ZW50RGlzcGF0Y2hlcikKLSAgICAgICAgX2RvbWFpbkV2ZW50RGlzcGF0Y2hlciA9IFtbVGVzdFBy
b3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyIGFsbG9jXSBpbml0V2l0aENvbnRyb2xs
ZXI6X2NvbnRyb2xsZXJdOwotICAgIHJldHVybiBfZG9tYWluRXZlbnREaXNwYXRjaGVyOwotfQot
Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5oIgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3Bl
Y3RvcjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlz
cGF0Y2hlcgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xs
ZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxl
SW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5p
dF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250
cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7
Ci19Ci0KLS0gKHZvaWQpRXZlbnQKLXsKLSAgICBjb25zdCBGcm9udGVuZFJvdXRlciYgcm91dGVy
ID0gX2NvbnRyb2xsZXItPmZyb250ZW5kUm91dGVyKCk7Ci0KLSAgICBSZWY8SlNPTjo6T2JqZWN0
PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2Ut
PnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9zKTsKLSAgICByb3V0ZXIuc2Vu
ZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Ci19Ci0KLUBlbmQKLQotCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9t
YWluLWRlYnVnZ2FibGVUeXBlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotCi0jaW1wb3J0
IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+Ci0KLQotCi0KLXR5cGVkZWYg
TlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbFBsYXRmb3JtKSB7Ci0gICAgVGVzdFByb3Rv
Y29sUGxhdGZvcm1BbGwsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljLAotICAgIFRl
c3RQcm90b2NvbFBsYXRmb3JtSU9TLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1MsCi19
OwotCi0KLQotCi0KLUBwcm90b2NvbCBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyIDxO
U09iamVjdD4KLUBvcHRpb25hbAotLSAodm9pZClDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6KHZv
aWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9p
ZCheKSh2b2lkKSlzdWNjZXNzQ2FsbGJhY2s7Ci1AZW5kCi0KLV9fYXR0cmlidXRlX18oKHZpc2li
aWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5F
dmVudERpc3BhdGNoZXIgOiBOU09iamVjdAotLSAodm9pZClFdmVudDsKLUBlbmQKLQotCi0jaW1w
b3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbEludGVybmFsLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21h
aW4tZGVidWdnYWJsZVR5cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2xKU09OT2JqZWN0UHJpdmF0ZS5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFi
bGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi1A
aW50ZXJmYWNlIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAoUHJpdmF0
ZSkKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEluc3BlY3Rvcjo6QXVnbWVu
dGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyOwotQGVuZAotCi0KLSMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBk
b21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0IDxXZWJJbnNw
ZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0
b3IgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+Ci1PcHRpb25hbDxPYmpDRW51
bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKLQotaW5saW5l
IFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFBsYXRmb3JtIHZhbHVlKQotewot
ICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1BbGw6Ci0g
ICAgICAgIHJldHVybiAiYWxsIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5l
cmljOgotICAgICAgICByZXR1cm4gImdlbmVyaWMiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQ
bGF0Zm9ybUlPUzoKLSAgICAgICAgcmV0dXJuICJpb3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9j
b2xQbGF0Zm9ybU1hY09TOgotICAgICAgICByZXR1cm4gIm1hY29zIl9zOwotICAgIH0KLX0KLQot
dGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFBsYXRmb3JtPiBmcm9tUHJv
dG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gImFs
bCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDsKLSAgICBpZiAodmFs
dWUgPT0gImdlbmVyaWMiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1HZW5l
cmljOwotICAgIGlmICh2YWx1ZSA9PSAiaW9zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2Nv
bFBsYXRmb3JtSU9TOwotICAgIGlmICh2YWx1ZSA9PSAibWFjb3MiKQotICAgICAgICByZXR1cm4g
VGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQot
Ci19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLWRlYnVn
Z2FibGVUeXBlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotCi0jaW1wb3J0ICJU
ZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKLSNpbXBv
cnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0KLXVzaW5n
IG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotCi0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlw
ZXMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJs
ZVR5cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09O
T2JqZWN0UHJpdmF0ZS5oPgotI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQgPHd0
Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZG9tYWluLXRh
cmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tcmVzdWx0IGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0
ZWQvZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24t
cmVzdWx0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzBmMjRiNWMzNS4uMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvZXhwZWN0ZWQvZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVn
Z2FibGVUeXBlLmpzb24tcmVzdWx0CisrKyAvZGV2L251bGwKQEAgLTEsMTA2MyArMCwwIEBACi0j
IyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRl
YnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotLy8gRG9tYWluCi1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJEb21haW4i
LCBudWxsKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJEb21haW4uQ29tbWFu
ZCIsIFsicGFnZSIsICJ3b3JrZXIiXSwgW10sIFtdKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0
ZXJFdmVudCgiRG9tYWluLkV2ZW50IiwgbnVsbCwgW10pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdp
c3RlckRvbWFpbkRpc3BhdGNoZXIgPSBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRGlzcGF0Y2hl
ci5iaW5kKEluc3BlY3RvckJhY2tlbmQsICJEb21haW4iKTsKLUluc3BlY3RvckJhY2tlbmQuYWN0
aXZhdGVEb21haW4oIkRvbWFpbiIsIFsicGFnZSJdKTsKLSMjIyBFbmQgRmlsZTogSW5zcGVjdG9y
QmFja2VuZENvbW1hbmRzLmpzCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2Vu
ZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4t
dGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi0jaW5jbHVkZSAiVGVzdFBy
b3RvY29sVHlwZXMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5k
Um91dGVyLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihS
ZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRj
aGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQotICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNr
ZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7
IH0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNw
YXRjaGVyOwotfTsKLQotCi1jbGFzcyBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciA6
IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdmlydHVh
bCB+QWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIoKSB7IH0KLSAgICB2aXJ0dWFsIHZv
aWQgQ29tbWFuZChsb25nIGNhbGxJZCkgPSAwOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
LSMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJs
ZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0j
cHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdHlwZWRl
ZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKLWNsYXNzIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyOwotI2Vu
ZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi1jbGFzcyBE
b21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewotcHVibGljOgotICAgIHZpcnR1YWwgdm9p
ZCBDb21tYW5kKEVycm9yU3RyaW5nJikgPSAwOwotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgfkRv
bWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOwotfTsKLQotY2xhc3MgRG9tYWluQmFja2Vu
ZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIg
ewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8RG9tYWluQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0
ZShCYWNrZW5kRGlzcGF0Y2hlciYsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwot
ICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBS
ZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOwotcHJpdmF0ZToKLSAgICB2b2lkIENv
bW1hbmQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7
Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi1wdWJsaWM6Ci0g
ICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNw
YXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFs
dGVybmF0ZURpc3BhdGNoZXI7IH0KLXByaXZhdGU6Ci0gICAgQWx0ZXJuYXRlRG9tYWluQmFja2Vu
ZERpc3BhdGNoZXIqIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciB7IG51bGxwdHIgfTsKLSNlbmRpZgot
cHJpdmF0ZToKLSAgICBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYs
IERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIERvbWFpbkJhY2tlbmREaXNw
YXRjaGVySGFuZGxlciogbV9hZ2VudCB7IG51bGxwdHIgfTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVn
Z2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMu
aCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+
Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95
ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNpZiBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2Vu
ZERpc3BhdGNoZXJzLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLURvbWFp
bkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6fkRvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxl
cigpIHsgfQotCi1SZWY8RG9tYWluQmFja2VuZERpc3BhdGNoZXI+IERvbWFpbkJhY2tlbmREaXNw
YXRjaGVyOjpjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBEb21h
aW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQotewotICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkp
OwotfQotCi1Eb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6RG9tYWluQmFja2VuZERpc3BhdGNoZXIo
QmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBEb21haW5CYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXIqIGFnZW50KQotICAgIDogU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIo
YmFja2VuZERpc3BhdGNoZXIpCi0gICAgLCBtX2FnZW50KGFnZW50KQotewotICAgIG1fYmFja2Vu
ZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbigiRG9tYWluIl9zLCB0aGlz
KTsKLX0KLQotdm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1
ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2Up
Ci17Ci0gICAgUmVmPERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKLQot
ICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2Jq
ZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRlcnMpOwotCi0gICAgaWYgKG1ldGhvZCA9PSAiQ29tbWFu
ZCIpCi0gICAgICAgIENvbW1hbmQocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKLSAg
ICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3Io
QmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi4iICsgbWV0aG9kICsg
Iicgd2FzIG5vdCBmb3VuZCIpOwotfQotCi12b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpD
b21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQotewotI2lmIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotICAgIGlmIChtX2FsdGVybmF0
ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5Db21tYW5kKHJl
cXVlc3RJZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIEVycm9yU3Ry
aW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6
Y3JlYXRlKCk7Ci0gICAgbV9hZ2VudC0+Q29tbWFuZChlcnJvcik7Ci0KLSAgICBpZiAoIWVycm9y
Lmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVx
dWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFj
a2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNl
cnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgotCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVU
eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3By
YWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8
d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFt
ZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEZyb250ZW5kUm91dGVyOwotCi1jbGFzcyBEb21h
aW5Gcm9udGVuZERpc3BhdGNoZXIgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVi
bGljOgotICAgIERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcihGcm9udGVuZFJvdXRlciYgZnJvbnRl
bmRSb3V0ZXIpIDogbV9mcm9udGVuZFJvdXRlcihmcm9udGVuZFJvdXRlcikgeyB9Ci0gICAgdm9p
ZCBFdmVudCgpOwotcHJpdmF0ZToKLSAgICBGcm9udGVuZFJvdXRlciYgbV9mcm9udGVuZFJvdXRl
cjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0RnJv
bnRlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRj
aGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0
VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdm9pZCBEb21haW5Gcm9udGVuZERpc3BhdGNo
ZXI6OkV2ZW50KCkKLXsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9z
LCAiRG9tYWluLkV2ZW50Il9zKTsKLQotICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpz
b25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgotCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBl
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdt
YSBvbmNlCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVz
Lmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7
Ci0KLQotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotCi0KLQotCi0KLQotfSAvLyBuYW1l
c3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbE9iamVjdHMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2Jq
ZWN0cy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0
VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQot
bmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVj
dHMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMu
aAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlLW1h
dGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+
Ci0KLUBwcm90b2NvbCBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyOwotCi1uYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKLQotCi1jbGFzcyBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3Bh
dGNoZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIgewot
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIE9iakNJbnNwZWN0b3JE
b21haW5CYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVy
PiBoYW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9Ci0gICAgdm9pZCBDb21tYW5kKGxv
bmcgcmVxdWVzdElkKSBmaW5hbDsKLXByaXZhdGU6Ci0gICAgUmV0YWluUHRyPGlkPFRlc3RQcm90
b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwotfTsKLQotfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNo
ZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5t
bQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlLW1h
dGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFBy
b3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRl
cm5hbC5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2luY2x1
ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi12b2lkIE9i
akNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVlc3RJ
ZCkKLXsKLSAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Io
Q29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgewotICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2Vu
ZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi5Db21tYW5kJyB3YXMgbm90IGZv
dW5kIl9zKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMo
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5T
U3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90
b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJv
cik7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0g
ICAgfTsKLQotICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57Ci0gICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCks
IGZhbHNlKTsKLSAgICB9OwotCi0gICAgW21fZGVsZWdhdGUgQ29tbWFuZFdpdGhFcnJvckNhbGxi
YWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107Ci19Ci0K
LQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
QmFja2VuZERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25m
aWd1cmF0aW9uLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFy
Z2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVz
dFByb3RvY29sLmg+Ci0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQot
QGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKLUBwcm9wZXJ0
eSAobm9uYXRvbWljLCByZXRhaW4sIHNldHRlcj1zZXREb21haW5IYW5kbGVyOikgaWQ8VGVzdFBy
b3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4gZG9tYWluSGFuZGxlcjsKLUBwcm9wZXJ0eSAobm9u
YXRvbWljLCByZWFkb25seSkgVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVy
ICpkb21haW5FdmVudERpc3BhdGNoZXI7Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xDb25maWd1cmF0aW9uLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZp
Z3VyYXRpb24ubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFy
Z2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25m
aWd1cmF0aW9uLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW1wb3J0
ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRD
b3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0KLXVzaW5nIG5hbWVz
cGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0
aW9uCi17Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsK
LSAgICBpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiBfZG9tYWluSGFuZGxlcjsK
LSAgICBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKl9kb21haW5FdmVu
dERpc3BhdGNoZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1
Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBb
c3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFT
U0VSVChjb250cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0
dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAgIFtfZG9tYWluSGFuZGxlciBy
ZWxlYXNlXTsKLSAgICBbX2RvbWFpbkV2ZW50RGlzcGF0Y2hlciByZWxlYXNlXTsKLSAgICBbc3Vw
ZXIgZGVhbGxvY107Ci19Ci0KLS0gKHZvaWQpc2V0RG9tYWluSGFuZGxlcjooaWQ8VGVzdFByb3Rv
Y29sRG9tYWluRG9tYWluSGFuZGxlcj4paGFuZGxlcgotewotICAgIGlmIChoYW5kbGVyID09IF9k
b21haW5IYW5kbGVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBbX2RvbWFpbkhhbmRsZXIgcmVs
ZWFzZV07Ci0gICAgX2RvbWFpbkhhbmRsZXIgPSBbaGFuZGxlciByZXRhaW5dOwotCi0gICAgYXV0
byBhbHRlcm5hdGVEaXNwYXRjaGVyID0gbWFrZVVuaXF1ZTxPYmpDSW5zcGVjdG9yRG9tYWluQmFj
a2VuZERpc3BhdGNoZXI+KGhhbmRsZXIpOwotICAgIGF1dG8gYWx0ZXJuYXRlQWdlbnQgPSBtYWtl
VW5pcXVlPEFsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50PERvbWFpbkJhY2tlbmREaXNwYXRjaGVy
LCBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4+KCJEb21haW4iX3MsICpfY29udHJv
bGxlciwgV1RGTW92ZShhbHRlcm5hdGVEaXNwYXRjaGVyKSk7Ci0gICAgX2NvbnRyb2xsZXItPmFw
cGVuZEV4dHJhQWdlbnQoV1RGTW92ZShhbHRlcm5hdGVBZ2VudCkpOwotfQotCi0tIChpZDxUZXN0
UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPilkb21haW5IYW5kbGVyCi17Ci0gICAgcmV0dXJu
IF9kb21haW5IYW5kbGVyOwotfQotCi0tIChUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERp
c3BhdGNoZXIgKilkb21haW5FdmVudERpc3BhdGNoZXIKLXsKLSAgICBpZiAoIV9kb21haW5FdmVu
dERpc3BhdGNoZXIpCi0gICAgICAgIF9kb21haW5FdmVudERpc3BhdGNoZXIgPSBbW1Rlc3RQcm90
b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciBhbGxvY10gaW5pdFdpdGhDb250cm9sbGVy
Ol9jb250cm9sbGVyXTsKLSAgICByZXR1cm4gX2RvbWFpbkV2ZW50RGlzcGF0Y2hlcjsKLX0KLQot
QGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFp
bi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4K
LQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90
b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlcgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVj
dG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0
aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgot
ewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1
cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRy
b2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpRXZlbnQKLXsKLSAgICBjb25z
dCBGcm9udGVuZFJvdXRlciYgcm91dGVyID0gX2NvbnRyb2xsZXItPmZyb250ZW5kUm91dGVyKCk7
Ci0KLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2
ZW50Il9zKTsKLSAgICByb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmco
KSk7Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0
Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRl
YnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLSNpbXBvcnQgPFdlYklu
c3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KLQotCi0KLQotdHlwZWRlZiBOU19FTlVN
KE5TSW50ZWdlciwgVGVzdFByb3RvY29sUGxhdGZvcm0pIHsKLSAgICBUZXN0UHJvdG9jb2xQbGF0
Zm9ybUFsbCwKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWMsCi0gICAgVGVzdFByb3Rv
Y29sUGxhdGZvcm1JT1MsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUywKLX07Ci0KLQot
Ci0KLQotQHByb3RvY29sIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXIgPE5TT2JqZWN0
PgotQG9wdGlvbmFsCi0tICh2b2lkKUNvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShO
U1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKHZv
aWQpKXN1Y2Nlc3NDYWxsYmFjazsKLUBlbmQKLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAo
ImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlz
cGF0Y2hlciA6IE5TT2JqZWN0Ci0tICh2b2lkKUV2ZW50OwotQGVuZAotCi0KLSNpbXBvcnQgPFdl
Ykluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4KLQotIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
SW50ZXJuYWwuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJn
ZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgot
I2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKLSNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8d3Rm
L0pTT05WYWx1ZXMuaD4KLQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVu
dERpc3BhdGNoZXIgKFByaXZhdGUpCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVy
OihJbnNwZWN0b3I6OkF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcjsK
LUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVn
Z2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJv
dG9jb2xBcnJheUNvbnZlcnNpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+Ci1PcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Q
cm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKLQotaW5saW5lIFN0cmluZyB0b1By
b3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFBsYXRmb3JtIHZhbHVlKQotewotICAgIHN3aXRjaCh2
YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1BbGw6Ci0gICAgICAgIHJldHVy
biAiYWxsIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOgotICAgICAg
ICByZXR1cm4gImdlbmVyaWMiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzoK
LSAgICAgICAgcmV0dXJuICJpb3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1h
Y09TOgotICAgICAgICByZXR1cm4gIm1hY29zIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8Pgot
aW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFBsYXRmb3JtPiBmcm9tUHJvdG9jb2xTdHJpbmco
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gImFsbCIpCi0gICAgICAg
IHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDsKLSAgICBpZiAodmFsdWUgPT0gImdlbmVy
aWMiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOwotICAgIGlm
ICh2YWx1ZSA9PSAiaW9zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9T
OwotICAgIGlmICh2YWx1ZSA9PSAibWFjb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29s
UGxhdGZvcm1NYWNPUzsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi19IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hp
bmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgi
Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBh
cnNlci5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZh
dGUuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0KLQotCi0KLSMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xUeXBlcy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRv
bWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90
b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5o
IgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4K
LSNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgot
Ci11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2RvbWFpbi10YXJnZXRUeXBlcy5qc29uLXJl
c3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmljL2V4cGVjdGVkL2RvbWFpbi10YXJnZXRUeXBlcy5qc29uLXJlc3VsdApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggZjg5NDhhMmY3NDcuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2Rv
bWFpbi10YXJnZXRUeXBlcy5qc29uLXJlc3VsdAorKysgL2Rldi9udWxsCkBAIC0xLDEwNjMgKzAs
MCBAQAotIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlcy5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLS8vIERvbWFpbgotSW5zcGVj
dG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiRG9tYWluIiwgWyJwYWdlIl0pOwotSW5zcGVjdG9y
QmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIkRvbWFpbi5Db21tYW5kIiwgWyJwYWdlIl0sIFtdLCBb
XSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnQoIkRvbWFpbi5FdmVudCIsIFsicGFn
ZSJdLCBbXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluRGlzcGF0Y2hlciA9IElu
c3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEaXNwYXRjaGVyLmJpbmQoSW5zcGVjdG9yQmFja2VuZCwg
IkRvbWFpbiIpOwotSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiRG9tYWluIiwgbnVs
bCk7Ci0jIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVzLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQotI2luY2x1ZGUgIlRlc3RQcm90
b2NvbFR5cGVzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJv
dXRlci5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgQWx0ZXJuYXRlQmFja2Vu
ZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVm
UHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hl
ciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KLSAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2Vu
ZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9
Ci1wcml2YXRlOgotICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0
Y2hlcjsKLX07Ci0KLQotY2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIgOiBw
dWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZpcnR1YWwg
fkFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lk
IENvbW1hbmQobG9uZyBjYWxsSWQpID0gMDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgotCi0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0j
IyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJv
dG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNw
YWNlIEluc3BlY3RvciB7Ci0KLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCi0jaWYgRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi1jbGFzcyBBbHRlcm5hdGVEb21h
aW5CYWNrZW5kRGlzcGF0Y2hlcjsKLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKLQotY2xhc3MgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsK
LXB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChFcnJvclN0cmluZyYpID0gMDsKLXBy
b3RlY3RlZDoKLSAgICB2aXJ0dWFsIH5Eb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsK
LX07Ci0KLWNsYXNzIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBs
ZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPERvbWFp
bkJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElk
LCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5h
bDsKLXByaXZhdGU6Ci0gICAgdm9pZCBDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQotcHVibGljOgotICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0Y2hlcihB
bHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBt
X2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9Ci1wcml2YXRlOgot
ICAgIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKiBtX2FsdGVybmF0ZURpc3BhdGNo
ZXIgeyBudWxscHRyIH07Ci0jZW5kaWYKLXByaXZhdGU6Ci0gICAgRG9tYWluQmFja2VuZERpc3Bh
dGNoZXIoQmFja2VuZERpc3BhdGNoZXImLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIq
KTsKLSAgICBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQgeyBudWxscHRy
IH07Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEJh
Y2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNo
ZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRU
eXBlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCi0K
LSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2lu
Y2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNw
YXRjaGVycy5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1Eb21haW5CYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5Eb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7
IH0KLQotUmVmPERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBEb21haW5CYWNrZW5kRGlzcGF0Y2hl
cjo6Y3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgRG9tYWluQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKLX0K
LQotRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkRvbWFpbkJhY2tlbmREaXNwYXRjaGVyKEJhY2tl
bmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyKiBhZ2VudCkKLSAgICA6IFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tl
bmREaXNwYXRjaGVyKQotICAgICwgbV9hZ2VudChhZ2VudCkKLXsKLSAgICBtX2JhY2tlbmREaXNw
YXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oIkRvbWFpbiJfcywgdGhpcyk7Ci19
Ci0KLXZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElk
LCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQotewot
ICAgIFJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7Ci0KLSAgICBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOwotICAgIG1lc3NhZ2UtPmdldE9iamVjdCgi
cGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsKLQotICAgIGlmIChtZXRob2QgPT0gIkNvbW1hbmQiKQot
ICAgICAgICBDb21tYW5kKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7Ci0gICAgZWxz
ZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tl
bmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uIiArIG1ldGhvZCArICInIHdh
cyBub3QgZm91bmQiKTsKLX0KLQotdm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFu
ZChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKLXsKLSNpZiBFTkFCTEUo
SU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSAgICBpZiAobV9hbHRlcm5hdGVEaXNw
YXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+Q29tbWFuZChyZXF1ZXN0
SWQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBFcnJvclN0cmluZyBl
cnJvcjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpOwotICAgIG1fYWdlbnQtPkNvbW1hbmQoZXJyb3IpOwotCi0gICAgaWYgKCFlcnJvci5sZW5n
dGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJ
ZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJF
cnJvciwgV1RGTW92ZShlcnJvcikpOwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQot
IyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29s
T2JqZWN0cy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBGcm9udGVu
ZFJvdXRlcjsKLQotY2xhc3MgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVyIHsKLSAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBEb21haW5Gcm9udGVuZERpc3BhdGNoZXIo
RnJvbnRlbmRSb3V0ZXImIGZyb250ZW5kUm91dGVyKSA6IG1fZnJvbnRlbmRSb3V0ZXIoZnJvbnRl
bmRSb3V0ZXIpIHsgfQotICAgIHZvaWQgRXZlbnQoKTsKLXByaXZhdGU6Ci0gICAgRnJvbnRlbmRS
b3V0ZXImIG1fZnJvbnRlbmRSb3V0ZXI7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
LSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RG
cm9udGVuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFt
ZXNwYWNlIEluc3BlY3RvciB7Ci0KLXZvaWQgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVyOjpFdmVu
dCgpCi17Ci0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFp
bi5FdmVudCJfcyk7Ci0KLSAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChqc29uTWVzc2Fn
ZS0+dG9KU09OU3RyaW5nKCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMj
IEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbE9iamVjdHMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGRvbWFpbi10YXJnZXRUeXBlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5h
bWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLQot
Ci0KLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gZG9tYWluLXRhcmdldFR5cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RQcm90
b2NvbE9iamVjdHMuaCIKLQotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLW5hbWVzcGFjZSBQ
cm90b2NvbCB7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZXMuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW5jbHVkZSA8
d3RmL1JldGFpblB0ci5oPgotCi1AcHJvdG9jb2wgVGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFu
ZGxlcjsKLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotY2xhc3MgT2JqQ0luc3BlY3RvckRv
bWFpbkJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZURvbWFpbkJhY2tl
bmREaXNwYXRjaGVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAg
ICBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sRG9t
YWluRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQotICAg
IHZvaWQgQ29tbWFuZChsb25nIHJlcXVlc3RJZCkgZmluYWw7Ci1wcml2YXRlOgotICAgIFJldGFp
blB0cjxpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNr
ZW5kRGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21h
aW4tdGFyZ2V0VHlwZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmRE
aXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbmNs
dWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZh
bHVlcy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdm9pZCBPYmpDSW5zcGVjdG9yRG9t
YWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9uZyByZXF1ZXN0SWQpCi17Ci0gICAgaWYg
KCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKENvbW1hbmRXaXRoRXJy
b3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpN
ZXRob2ROb3RGb3VuZCwgIidEb21haW4uQ29tbWFuZCcgd2FzIG5vdCBmb3VuZCJfcyk7Ci0gICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3Ip
IHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1
ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwotICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgIH07Ci0KLSAgICBp
ZCBzdWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5k
UmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7Ci0gICAg
fTsKLQotICAgIFttX2RlbGVnYXRlIENvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxi
YWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOwotfQotCi0KLX0gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRj
aGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVzLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8V2Vi
SW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgi
ZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2Jq
ZWN0Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluLCBzZXR0ZXI9c2V0RG9tYWluSGFuZGxl
cjopIGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IGRvbWFpbkhhbmRsZXI7Ci1A
cHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2
ZW50RGlzcGF0Y2hlciAqZG9tYWluRXZlbnREaXNwYXRjaGVyOwotQGVuZAotCi0KLSMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZG9tYWluLXRhcmdldFR5cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgotCi0j
aW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFj
a2VuZERpc3BhdGNoZXJzLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNw
YXRjaGFibGVBZ2VudC5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNw
ZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwot
Ci1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgotewotICAgIEF1Z21l
bnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci0gICAgaWQ8VGVzdFByb3Rv
Y29sRG9tYWluRG9tYWluSGFuZGxlcj4gX2RvbWFpbkhhbmRsZXI7Ci0gICAgVGVzdFByb3RvY29s
RG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyICpfZG9tYWluRXZlbnREaXNwYXRjaGVyOwotfQot
Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3Rv
ckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAg
IGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7
Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQotCi0t
ICh2b2lkKWRlYWxsb2MKLXsKLSAgICBbX2RvbWFpbkhhbmRsZXIgcmVsZWFzZV07Ci0gICAgW19k
b21haW5FdmVudERpc3BhdGNoZXIgcmVsZWFzZV07Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQot
Ci0tICh2b2lkKXNldERvbWFpbkhhbmRsZXI6KGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhh
bmRsZXI+KWhhbmRsZXIKLXsKLSAgICBpZiAoaGFuZGxlciA9PSBfZG9tYWluSGFuZGxlcikKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgW19kb21haW5IYW5kbGVyIHJlbGVhc2VdOwotICAgIF9kb21h
aW5IYW5kbGVyID0gW2hhbmRsZXIgcmV0YWluXTsKLQotICAgIGF1dG8gYWx0ZXJuYXRlRGlzcGF0
Y2hlciA9IG1ha2VVbmlxdWU8T2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiho
YW5kbGVyKTsKLSAgICBhdXRvIGFsdGVybmF0ZUFnZW50ID0gbWFrZVVuaXF1ZTxBbHRlcm5hdGVE
aXNwYXRjaGFibGVBZ2VudDxEb21haW5CYWNrZW5kRGlzcGF0Y2hlciwgQWx0ZXJuYXRlRG9tYWlu
QmFja2VuZERpc3BhdGNoZXI+PigiRG9tYWluIl9zLCAqX2NvbnRyb2xsZXIsIFdURk1vdmUoYWx0
ZXJuYXRlRGlzcGF0Y2hlcikpOwotICAgIF9jb250cm9sbGVyLT5hcHBlbmRFeHRyYUFnZW50KFdU
Rk1vdmUoYWx0ZXJuYXRlQWdlbnQpKTsKLX0KLQotLSAoaWQ8VGVzdFByb3RvY29sRG9tYWluRG9t
YWluSGFuZGxlcj4pZG9tYWluSGFuZGxlcgotewotICAgIHJldHVybiBfZG9tYWluSGFuZGxlcjsK
LX0KLQotLSAoVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyICopZG9tYWlu
RXZlbnREaXNwYXRjaGVyCi17Ci0gICAgaWYgKCFfZG9tYWluRXZlbnREaXNwYXRjaGVyKQotICAg
ICAgICBfZG9tYWluRXZlbnREaXNwYXRjaGVyID0gW1tUZXN0UHJvdG9jb2xEb21haW5Eb21haW5F
dmVudERpc3BhdGNoZXIgYWxsb2NdIGluaXRXaXRoQ29udHJvbGxlcjpfY29udHJvbGxlcl07Ci0g
ICAgcmV0dXJuIF9kb21haW5FdmVudERpc3BhdGNoZXI7Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0j
aW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPHd0Zi9KU09O
VmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlv
biBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIKLXsKLSAgICBBdWdtZW50
YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotfQotCi0tIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNv
bnRyb2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAg
ICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRyb2xs
ZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKUV2ZW50Ci17
Ci0gICAgY29uc3QgRnJvbnRlbmRSb3V0ZXImIHJvdXRlciA9IF9jb250cm9sbGVyLT5mcm9udGVu
ZFJvdXRlcigpOwotCi0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywg
IkRvbWFpbi5FdmVudCJfcyk7Ci0gICAgcm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9K
U09OU3RyaW5nKCkpOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xF
dmVudERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlcy5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPEZvdW5k
YXRpb24vRm91bmRhdGlvbi5oPgotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xK
U09OT2JqZWN0Lmg+Ci0KLQotCi0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90
b2NvbFBsYXRmb3JtKSB7Ci0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1BbGwsCi0gICAgVGVzdFBy
b3RvY29sUGxhdGZvcm1HZW5lcmljLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TLAotICAg
IFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1MsCi19OwotCi0KLQotCi0KLUBwcm90b2NvbCBUZXN0
UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyIDxOU09iamVjdD4KLUBvcHRpb25hbAotLSAodm9p
ZClDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJv
ckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKSh2b2lkKSlzdWNjZXNzQ2FsbGJhY2s7
Ci1AZW5kCi0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVy
ZmFjZSBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgOiBOU09iamVjdAot
LSAodm9pZClFdmVudDsKLUBlbmQKLQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9j
b2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZXMuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCi0jaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBv
cnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sRG9tYWluRG9t
YWluRXZlbnREaXNwYXRjaGVyIChQcml2YXRlKQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29u
dHJvbGxlcjooSW5zcGVjdG9yOjpBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRy
b2xsZXI7Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlcy5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2Nv
bC5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5o
PgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1U
eXBlPgotT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3Ry
aW5nJiB2YWx1ZSk7Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9j
b2xQbGF0Zm9ybSB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQ
cm90b2NvbFBsYXRmb3JtQWxsOgotICAgICAgICByZXR1cm4gImFsbCJfczsKLSAgICBjYXNlIFRl
c3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzoKLSAgICAgICAgcmV0dXJuICJnZW5lcmljIl9zOwot
ICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1JT1M6Ci0gICAgICAgIHJldHVybiAiaW9zIl9z
OwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzoKLSAgICAgICAgcmV0dXJuICJt
YWNvcyJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJv
dG9jb2xQbGF0Zm9ybT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17
Ci0gICAgaWYgKHZhbHVlID09ICJhbGwiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxh
dGZvcm1BbGw7Ci0gICAgaWYgKHZhbHVlID09ICJnZW5lcmljIikKLSAgICAgICAgcmV0dXJuIFRl
c3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzsKLSAgICBpZiAodmFsdWUgPT0gImlvcyIpCi0gICAg
ICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzsKLSAgICBpZiAodmFsdWUgPT0gIm1h
Y29zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M7Ci0gICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5
cGVQYXJzZXIuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQ
cml2YXRlLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotCi0KLQotCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sVHlwZXMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBkb21haW4tdGFyZ2V0VHlwZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0
ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9S
V0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5o
PgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3Rv
cjsKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBl
Y3RlZC9kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24tcmVzdWx0IGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0
ZWQvZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uLXJlc3VsdApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmMwN2NiMTM0N2YuLjAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVj
dGVkL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbi1yZXN1bHQKKysrIC9k
ZXYvbnVsbApAQCAtMSwxNDU1ICswLDAgQEAKLSMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNr
ZW5kQ29tbWFuZHMuanMKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5z
LXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotLy8gTmV0d29yazEKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0
ZXJEb21haW4oIk5ldHdvcmsxIiwgbnVsbCk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29t
bWFuZCgiTmV0d29yazEubG9hZFJlc291cmNlMSIsIG51bGwsIFtdLCBbXSk7Ci1JbnNwZWN0b3JC
YWNrZW5kLmFjdGl2YXRlRG9tYWluKCJOZXR3b3JrMSIsIG51bGwpOwotCi0vLyBOZXR3b3JrMwot
SW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiTmV0d29yazMiLCBudWxsKTsKLUluc3Bl
Y3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2UxIiwgbnVs
bCwgW10sIFtdKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMy5s
b2FkUmVzb3VyY2UyIiwgbnVsbCwgW10sIFtdKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJD
b21tYW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2UzIiwgbnVsbCwgW10sIFtdKTsKLUluc3BlY3Rv
ckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2U0IiwgbnVsbCwg
W10sIFtdKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMy5sb2Fk
UmVzb3VyY2U1IiwgbnVsbCwgW10sIFtdKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21t
YW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2U2IiwgbnVsbCwgW10sIFtdKTsKLUluc3BlY3RvckJh
Y2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2U3IiwgbnVsbCwgW10s
IFtdKTsKLUluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIk5ldHdvcmszIiwgbnVsbCk7
Ci0jIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25j
ZQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0KLSNpbmNs
dWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yRnJvbnRlbmRSb3V0ZXIuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2b2lkIHNldEJhY2tlbmRE
aXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFj
a2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9Ci0gICAgQmFja2VuZERpc3Bh
dGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0
Y2hlci5nZXQoKTsgfQotcHJpdmF0ZToKLSAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1f
YmFja2VuZERpc3BhdGNoZXI7Ci19OwotCi0KLWNsYXNzIEFsdGVybmF0ZU5ldHdvcmsxQmFja2Vu
ZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGlj
OgotICAgIHZpcnR1YWwgfkFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoKSB7IH0K
LSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMShsb25nIGNhbGxJZCkgPSAwOwotfTsKLWNs
YXNzIEFsdGVybmF0ZU5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRl
QmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZpcnR1YWwgfkFsdGVybmF0ZU5ldHdv
cmszQmFja2VuZERpc3BhdGNoZXIoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNl
MShsb25nIGNhbGxJZCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UyKGxvbmcg
Y2FsbElkKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTMobG9uZyBjYWxsSWQp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlNChsb25nIGNhbGxJZCkgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2U1KGxvbmcgY2FsbElkKSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIGxvYWRSZXNvdXJjZTYobG9uZyBjYWxsSWQpID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgbG9hZFJlc291cmNlNyhsb25nIGNhbGxJZCkgPSAwOwotfTsKLQotfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKLSMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBv
bmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXR5cGVkZWYgU3RyaW5n
IEVycm9yU3RyaW5nOwotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCi1jbGFzcyBBbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOwotY2xhc3MgQWx0
ZXJuYXRlTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjsKLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQotY2xhc3MgTmV0d29yazFCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXIgewotcHVibGljOgotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UxKEVy
cm9yU3RyaW5nJikgPSAwOwotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgfk5ldHdvcmsxQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyKCk7Ci19OwotCi1jbGFzcyBOZXR3b3JrM0JhY2tlbmREaXNwYXRj
aGVySGFuZGxlciB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTEoRXJy
b3JTdHJpbmcmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTIoRXJyb3JTdHJp
bmcmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTMoRXJyb3JTdHJpbmcmKSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTQoRXJyb3JTdHJpbmcmKSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTUoRXJyb3JTdHJpbmcmKSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIGxvYWRSZXNvdXJjZTYoRXJyb3JTdHJpbmcmKSA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIGxvYWRSZXNvdXJjZTcoRXJyb3JTdHJpbmcmKSA9IDA7Ci1wcm90ZWN0ZWQ6Ci0gICAgdmly
dHVhbCB+TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKLX07Ci0KLWNsYXNzIE5l
dHdvcmsxQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2Vu
ZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8TmV0d29yazFCYWNrZW5kRGlz
cGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgTmV0d29yazFCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXIqKTsKLSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBT
dHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5hbDsKLXByaXZh
dGU6Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2UxKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6
T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQotcHVibGljOgotICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0Y2hlcihBbHRl
cm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1f
YWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KLXByaXZhdGU6Ci0g
ICAgQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciogbV9hbHRlcm5hdGVEaXNwYXRj
aGVyIHsgbnVsbHB0ciB9OwotI2VuZGlmCi1wcml2YXRlOgotICAgIE5ldHdvcmsxQmFja2VuZERp
c3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImLCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlciopOwotICAgIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50IHsg
bnVsbHB0ciB9OwotfTsKLQotY2xhc3MgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6
IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgc3Rh
dGljIFJlZjxOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNo
ZXImLCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIHZvaWQgZGlzcGF0
Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0
PiYmIG1lc3NhZ2UpIGZpbmFsOwotcHJpdmF0ZToKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTEobG9u
ZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0gICAgdm9p
ZCBsb2FkUmVzb3VyY2UyKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBh
cmFtZXRlcnMpOwotICAgIHZvaWQgbG9hZFJlc291cmNlMyhsb25nIHJlcXVlc3RJZCwgUmVmUHRy
PEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTQobG9u
ZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0gICAgdm9p
ZCBsb2FkUmVzb3VyY2U1KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBh
cmFtZXRlcnMpOwotICAgIHZvaWQgbG9hZFJlc291cmNlNihsb25nIHJlcXVlc3RJZCwgUmVmUHRy
PEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTcobG9u
ZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0jaWYgRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi1wdWJsaWM6Ci0gICAgdm9pZCBz
ZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZU5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIq
IGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRl
RGlzcGF0Y2hlcjsgfQotcHJpdmF0ZToKLSAgICBBbHRlcm5hdGVOZXR3b3JrM0JhY2tlbmREaXNw
YXRjaGVyKiBtX2FsdGVybmF0ZURpc3BhdGNoZXIgeyBudWxscHRyIH07Ci0jZW5kaWYKLXByaXZh
dGU6Ci0gICAgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYsIE5l
dHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgTmV0d29yazNCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQgeyBudWxscHRyIH07Ci19OwotCi19IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMj
IyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3
dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQotI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMu
aCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotTmV0d29yazFCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXI6On5OZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQot
TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5OZXR3b3JrM0JhY2tlbmREaXNwYXRj
aGVySGFuZGxlcigpIHsgfQotCi1SZWY8TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4gTmV0d29y
azFCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlz
cGF0Y2hlciwgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQotewotICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERp
c3BhdGNoZXIsIGFnZW50KSk7Ci19Ci0KLU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6Ok5ldHdv
cmsxQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVy
LCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCi0gICAgOiBTdXBwbGVt
ZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKLSAgICAsIG1fYWdlbnQo
YWdlbnQpCi17Ci0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9y
RG9tYWluKCJOZXR3b3JrMSJfcywgdGhpcyk7Ci19Ci0KLXZvaWQgTmV0d29yazFCYWNrZW5kRGlz
cGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBS
ZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCi17Ci0gICAgUmVmPE5ldHdvcmsxQmFja2VuZERp
c3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwotCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFy
YW1ldGVyczsKLSAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFyYW1ldGVycyk7
Ci0KLSAgICBpZiAobWV0aG9kID09ICJsb2FkUmVzb3VyY2UxIikKLSAgICAgICAgbG9hZFJlc291
cmNlMShyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOwotICAgIGVsc2UKLSAgICAgICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hl
cjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazEuIiArIG1ldGhvZCArICInIHdhcyBub3QgZm91
bmQiKTsKLX0KLQotdm9pZCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2Ux
KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQotewotI2lmIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotICAgIGlmIChtX2FsdGVybmF0ZURpc3Bh
dGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2UxKHJl
cXVlc3RJZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIEVycm9yU3Ry
aW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6
Y3JlYXRlKCk7Ci0gICAgbV9hZ2VudC0+bG9hZFJlc291cmNlMShlcnJvcik7Ci0KLSAgICBpZiAo
IWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9u
c2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAg
IG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNo
ZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Ci19Ci0KLVJlZjxOZXR3b3JrM0JhY2tl
bmREaXNwYXRjaGVyPiBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoQmFja2VuZERp
c3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFu
ZGxlciogYWdlbnQpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTmV0d29yazNCYWNrZW5k
RGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKLX0KLQotTmV0d29yazNCYWNr
ZW5kRGlzcGF0Y2hlcjo6TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hl
ciYgYmFja2VuZERpc3BhdGNoZXIsIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBh
Z2VudCkKLSAgICA6IFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRj
aGVyKQotICAgICwgbV9hZ2VudChhZ2VudCkKLXsKLSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5y
ZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oIk5ldHdvcmszIl9zLCB0aGlzKTsKLX0KLQotdm9p
ZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29u
c3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKLXsKLSAgICBS
ZWY8TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7Ci0KLSAgICBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOwotICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFy
YW1zIl9zLCBwYXJhbWV0ZXJzKTsKLQotICAgIHR5cGVkZWYgdm9pZCAoTmV0d29yazNCYWNrZW5k
RGlzcGF0Y2hlcjo6KkNhbGxIYW5kbGVyKShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9i
amVjdD4mJiBtZXNzYWdlKTsKLSAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxl
cj4gRGlzcGF0Y2hNYXA7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPERpc3BhdGNoTWFwPiBk
aXNwYXRjaE1hcDsKLSAgICBpZiAoZGlzcGF0Y2hNYXAuZ2V0KCkuaXNFbXB0eSgpKSB7Ci0gICAg
ICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgTWV0aG9kVGFibGUgewotICAgICAgICAgICAgY29uc3Qg
Y2hhciogbmFtZTsKLSAgICAgICAgICAgIENhbGxIYW5kbGVyIGhhbmRsZXI7Ci0gICAgICAgIH0g
Y29tbWFuZHNbXSA9IHsKLSAgICAgICAgICAgIHsgImxvYWRSZXNvdXJjZTEiLCAmTmV0d29yazNC
YWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMSB9LAotICAgICAgICAgICAgeyAibG9hZFJl
c291cmNlMiIsICZOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UyIH0sCi0g
ICAgICAgICAgICB7ICJsb2FkUmVzb3VyY2UzIiwgJk5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6
OmxvYWRSZXNvdXJjZTMgfSwKLSAgICAgICAgICAgIHsgImxvYWRSZXNvdXJjZTQiLCAmTmV0d29y
azNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNCB9LAotICAgICAgICAgICAgeyAibG9h
ZFJlc291cmNlNSIsICZOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U1IH0s
Ci0gICAgICAgICAgICB7ICJsb2FkUmVzb3VyY2U2IiwgJk5ldHdvcmszQmFja2VuZERpc3BhdGNo
ZXI6OmxvYWRSZXNvdXJjZTYgfSwKLSAgICAgICAgICAgIHsgImxvYWRSZXNvdXJjZTciLCAmTmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNyB9LAotICAgICAgICB9OwotICAg
ICAgICBzaXplX3QgbGVuZ3RoID0gV1RGX0FSUkFZX0xFTkdUSChjb21tYW5kcyk7Ci0gICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAgICAgICBkaXNwYXRj
aE1hcC5nZXQoKS5hZGQoY29tbWFuZHNbaV0ubmFtZSwgY29tbWFuZHNbaV0uaGFuZGxlcik7Ci0g
ICAgfQotCi0gICAgYXV0byBmaW5kUmVzdWx0ID0gZGlzcGF0Y2hNYXAuZ2V0KCkuZmluZChtZXRo
b2QpOwotICAgIGlmIChmaW5kUmVzdWx0ID09IGRpc3BhdGNoTWFwLmdldCgpLmVuZCgpKSB7Ci0g
ICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERp
c3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmszLiIgKyBtZXRob2QgKyAiJyB3YXMg
bm90IGZvdW5kIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAoKCp0aGlzKS4qZmlu
ZFJlc3VsdC0+dmFsdWUpKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7Ci19Ci0KLXZv
aWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMShsb25nIHJlcXVlc3RJ
ZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKLXsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVS
TkFURV9ESVNQQVRDSEVSUykKLSAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAg
ICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlMShyZXF1ZXN0SWQpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAg
ICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAg
IG1fYWdlbnQtPmxvYWRSZXNvdXJjZTEoZXJyb3IpOwotCi0gICAgaWYgKCFlcnJvci5sZW5ndGgo
KSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwg
V1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNw
YXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJv
ciwgV1RGTW92ZShlcnJvcikpOwotfQotCi12b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6
OmxvYWRSZXNvdXJjZTIobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCi17
Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0gICAgaWYgKG1f
YWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxv
YWRSZXNvdXJjZTIocmVxdWVzdElkKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgot
Ci0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0g
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2UyKGVycm9y
KTsKLQotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOwotICAg
IGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihC
YWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKLX0KLQotdm9p
ZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UzKGxvbmcgcmVxdWVzdElk
LCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQotewotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQotICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAg
ICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2UzKHJlcXVlc3RJZCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAg
IFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAg
bV9hZ2VudC0+bG9hZFJlc291cmNlMyhlcnJvcik7Ci0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgp
KQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBX
VEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3Bh
dGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9y
LCBXVEZNb3ZlKGVycm9yKSk7Ci19Ci0KLXZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6
bG9hZFJlc291cmNlNChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKLXsK
LSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSAgICBpZiAobV9h
bHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9h
ZFJlc291cmNlNChyZXF1ZXN0SWQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0K
LSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBK
U09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTQoZXJyb3Ip
OwotCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAg
ZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJh
Y2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOwotfQotCi12b2lk
IE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTUobG9uZyByZXF1ZXN0SWQs
IFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCi17Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCi0gICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAg
ICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZTUocmVxdWVzdElkKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAg
UmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBt
X2FnZW50LT5sb2FkUmVzb3VyY2U1KGVycm9yKTsKLQotICAgIGlmICghZXJyb3IubGVuZ3RoKCkp
Ci0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdU
Rk1vdmUocmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3Is
IFdURk1vdmUoZXJyb3IpKTsKLX0KLQotdm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjps
b2FkUmVzb3VyY2U2KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQotewot
I2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotICAgIGlmIChtX2Fs
dGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2Fk
UmVzb3VyY2U2KHJlcXVlc3RJZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQot
ICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpT
T046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgbV9hZ2VudC0+bG9hZFJlc291cmNlNihlcnJvcik7
Ci0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBl
bHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFj
a2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Ci19Ci0KLXZvaWQg
TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNyhsb25nIHJlcXVlc3RJZCwg
UmVmUHRyPEpTT046Ok9iamVjdD4mJikKLXsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKLSAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAg
IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlNyhyZXF1ZXN0SWQpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBS
ZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIG1f
YWdlbnQtPmxvYWRSZXNvdXJjZTcoZXJyb3IpOwotCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkK
LSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RG
TW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwg
V1RGTW92ZShlcnJvcikpOwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVu
ZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRl
c3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xh
c3MgRnJvbnRlbmRSb3V0ZXI7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBG
aWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJv
bnRlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBk
b21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
LQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0j
IyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9B
c3NlcnRpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotbmFtZXNwYWNlIFBy
b3RvY29sIHsKLQotCi0KLQotCi0vLyBUeXBlZGVmcy4KLW5hbWVzcGFjZSBOZXR3b3JrMiB7Ci0v
KiBVbmlxdWUgbG9hZGVyIGlkZW50aWZpZXIuICovCi10eXBlZGVmIFN0cmluZyBMb2FkZXJJZDsK
LX0gLy8gTmV0d29yazIKLS8vIEVuZCBvZiB0eXBlZGVmcy4KLQotCi0KLX0gLy8gbmFtZXNwYWNl
IFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xPYmplY3RzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMu
Y3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlp
bmctY29tbWFuZC1zaXplcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmpl
Y3RzLmgiCi0KLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1uYW1lc3BhY2UgUHJvdG9jb2wg
ewotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNp
bmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLUBwcm90b2NvbCBUZXN0UHJvdG9jb2xOZXR3b3Jr
MURvbWFpbkhhbmRsZXI7Ci1AcHJvdG9jb2wgVGVzdFByb3RvY29sTmV0d29yazNEb21haW5IYW5k
bGVyOwotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi1jbGFzcyBPYmpDSW5zcGVjdG9yTmV0
d29yazFCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVOZXR3b3JrMUJh
Y2tlbmREaXNwYXRjaGVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoK
LSAgICBPYmpDSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9j
b2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7
IH0KLSAgICB2b2lkIGxvYWRSZXNvdXJjZTEobG9uZyByZXF1ZXN0SWQpIGZpbmFsOwotcHJpdmF0
ZToKLSAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyPj4g
bV9kZWxlZ2F0ZTsKLX07Ci0KLWNsYXNzIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNw
YXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZU5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIg
ewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIE9iakNJbnNwZWN0
b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbE5ldHdvcmszRG9tYWlu
SGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQotICAgIHZvaWQgbG9h
ZFJlc291cmNlMShsb25nIHJlcXVlc3RJZCkgZmluYWw7Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2Uy
KGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTMobG9uZyByZXF1
ZXN0SWQpIGZpbmFsOwotICAgIHZvaWQgbG9hZFJlc291cmNlNChsb25nIHJlcXVlc3RJZCkgZmlu
YWw7Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2U1KGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKLSAgICB2
b2lkIGxvYWRSZXNvdXJjZTYobG9uZyByZXF1ZXN0SWQpIGZpbmFsOwotICAgIHZvaWQgbG9hZFJl
c291cmNlNyhsb25nIHJlcXVlc3RJZCkgZmluYWw7Ci1wcml2YXRlOgotICAgIFJldGFpblB0cjxp
ZDxUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwotfTsKLQot
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFj
a2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmRE
aXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMt
d2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90
b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJu
YWwuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbmNsdWRl
IDx3dGYvSlNPTlZhbHVlcy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdm9pZCBPYmpD
SW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMShsb25nIHJl
cXVlc3RJZCkKLXsKLSAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2Vs
ZWN0b3IobG9hZFJlc291cmNlMVdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkg
ewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVl
c3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmsxLmxvYWRS
ZXNvdXJjZTEnIHdhcyBub3QgZm91bmQiX3MpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigp
LT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWQg
ZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hl
cjo6U2VydmVyRXJyb3IsIGVycm9yKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2Vu
ZFBlbmRpbmdFcnJvcnMoKTsKLSAgICB9OwotCi0gICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsK
LSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2UpOwotICAgIH07Ci0KLSAgICBbbV9kZWxlZ2F0ZSBs
b2FkUmVzb3VyY2UxV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJh
Y2s6c3VjY2Vzc0NhbGxiYWNrXTsKLX0KLQotCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0Jh
Y2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UxKGxvbmcgcmVxdWVzdElkKQotewotICAgIGlm
ICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2Ux
V2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0
Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMubG9hZFJlc291cmNlMScgd2FzIG5vdCBm
b3VuZCJfcyk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3Jz
KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZCBlcnJvckNhbGxiYWNrID0gXihO
U1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJv
dG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJy
b3IpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwot
ICAgIH07Ci0KLSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
LCBmYWxzZSk7Ci0gICAgfTsKLQotICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZTFXaXRoRXJy
b3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2td
OwotfQotCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2Fk
UmVzb3VyY2UyKGxvbmcgcmVxdWVzdElkKQotewotICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9u
ZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2UyV2l0aEVycm9yQ2FsbGJhY2s6c3Vj
Y2Vzc0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFBy
b3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQs
ICInTmV0d29yazMubG9hZFJlc291cmNlMicgd2FzIG5vdCBmb3VuZCJfcyk7Ci0gICAgICAgIGJh
Y2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQs
IEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwotICAgICAgICBiYWNrZW5k
RGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgIH07Ci0KLSAgICBpZCBzdWNj
ZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9u
c2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7Ci0gICAgfTsKLQot
ICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZTJXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxi
YWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOwotfQotCi12b2lkIE9iakNJbnNw
ZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UzKGxvbmcgcmVxdWVz
dElkKQotewotICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rv
cihsb2FkUmVzb3VyY2UzV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0g
ICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElk
LCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMubG9hZFJlc291
cmNlMycgd2FzIG5vdCBmb3VuZCJfcyk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNl
bmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZCBlcnJv
ckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpT
ZXJ2ZXJFcnJvciwgZXJyb3IpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVu
ZGluZ0Vycm9ycygpOwotICAgIH07Ci0KLSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeewotICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7Ci0gICAgfTsKLQotICAgIFttX2RlbGVnYXRlIGxvYWRS
ZXNvdXJjZTNXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpz
dWNjZXNzQ2FsbGJhY2tdOwotfQotCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmRE
aXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U0KGxvbmcgcmVxdWVzdElkKQotewotICAgIGlmICghW21f
ZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2U0V2l0aEVy
cm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6
TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMubG9hZFJlc291cmNlNCcgd2FzIG5vdCBmb3VuZCJf
cyk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmlu
ZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xF
cnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwot
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgIH07
Ci0KLSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxz
ZSk7Ci0gICAgfTsKLQotICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZTRXaXRoRXJyb3JDYWxs
YmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOwotfQot
Ci12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3Vy
Y2U1KGxvbmcgcmVxdWVzdElkKQotewotICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1Nl
bGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2U1V2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0Nh
bGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29s
RXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0
d29yazMubG9hZFJlc291cmNlNScgd2FzIG5vdCBmb3VuZCJfcyk7Ci0gICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAg
YmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tl
bmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwotICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgIH07Ci0KLSAgICBpZCBzdWNjZXNzQ2Fs
bGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVx
dWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7Ci0gICAgfTsKLQotICAgIFtt
X2RlbGVnYXRlIGxvYWRSZXNvdXJjZTVXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1
Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOwotfQotCi12b2lkIE9iakNJbnNwZWN0b3JO
ZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U2KGxvbmcgcmVxdWVzdElkKQot
ewotICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2Fk
UmVzb3VyY2U2V2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0gICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNr
ZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMubG9hZFJlc291cmNlNicg
d2FzIG5vdCBmb3VuZCJfcyk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5k
aW5nRXJyb3JzKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZCBlcnJvckNhbGxi
YWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJF
cnJvciwgZXJyb3IpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vy
cm9ycygpOwotICAgIH07Ci0KLSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpLCBmYWxzZSk7Ci0gICAgfTsKLQotICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJj
ZTZXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNz
Q2FsbGJhY2tdOwotfQotCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRj
aGVyOjpsb2FkUmVzb3VyY2U3KGxvbmcgcmVxdWVzdElkKQotewotICAgIGlmICghW21fZGVsZWdh
dGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2U3V2l0aEVycm9yQ2Fs
bGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCkt
PnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9k
Tm90Rm91bmQsICInTmV0d29yazMubG9hZFJlc291cmNlNycgd2FzIG5vdCBmb3VuZCJfcyk7Ci0g
ICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJy
b3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihy
ZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwotICAgICAg
ICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgIH07Ci0KLSAg
ICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5z
ZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7Ci0g
ICAgfTsKLQotICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZTdXaXRoRXJyb3JDYWxsYmFjazpl
cnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOwotfQotCi0KLX0g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tl
bmREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJh
dGlvbi5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZh
cnlpbmctY29tbWFuZC1zaXplcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KLQotX19h
dHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90
b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAotQHByb3BlcnR5IChub25hdG9taWMsIHJldGFp
biwgc2V0dGVyPXNldE5ldHdvcmsxSGFuZGxlcjopIGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9t
YWluSGFuZGxlcj4gbmV0d29yazFIYW5kbGVyOwotQHByb3BlcnR5IChub25hdG9taWMsIHJldGFp
biwgc2V0dGVyPXNldE5ldHdvcmszSGFuZGxlcjopIGlkPFRlc3RQcm90b2NvbE5ldHdvcmszRG9t
YWluSGFuZGxlcj4gbmV0d29yazNIYW5kbGVyOwotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xD
b25maWd1cmF0aW9uLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlu
cy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24u
aCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbXBvcnQgIlRlc3RQcm90
b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJu
YXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRh
YmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3Bl
Y3RvcjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KLXsKLSAg
ICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotICAgIGlkPFRl
c3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4gX25ldHdvcmsxSGFuZGxlcjsKLSAgICBp
ZDxUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkhhbmRsZXI+IF9uZXR3b3JrM0hhbmRsZXI7Ci19
Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVj
dG9yQ29udHJvbGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0g
ICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVy
KTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0K
LS0gKHZvaWQpZGVhbGxvYwotewotICAgIFtfbmV0d29yazFIYW5kbGVyIHJlbGVhc2VdOwotICAg
IFtfbmV0d29yazNIYW5kbGVyIHJlbGVhc2VdOwotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQot
LSAodm9pZClzZXROZXR3b3JrMUhhbmRsZXI6KGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWlu
SGFuZGxlcj4paGFuZGxlcgotewotICAgIGlmIChoYW5kbGVyID09IF9uZXR3b3JrMUhhbmRsZXIp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIFtfbmV0d29yazFIYW5kbGVyIHJlbGVhc2VdOwotICAg
IF9uZXR3b3JrMUhhbmRsZXIgPSBbaGFuZGxlciByZXRhaW5dOwotCi0gICAgYXV0byBhbHRlcm5h
dGVEaXNwYXRjaGVyID0gbWFrZVVuaXF1ZTxPYmpDSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlz
cGF0Y2hlcj4oaGFuZGxlcik7Ci0gICAgYXV0byBhbHRlcm5hdGVBZ2VudCA9IG1ha2VVbmlxdWU8
QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciwgQWx0
ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4+KCJOZXR3b3JrMSJfcywgKl9jb250cm9s
bGVyLCBXVEZNb3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIpKTsKLSAgICBfY29udHJvbGxlci0+YXBw
ZW5kRXh0cmFBZ2VudChXVEZNb3ZlKGFsdGVybmF0ZUFnZW50KSk7Ci19Ci0KLS0gKGlkPFRlc3RQ
cm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4pbmV0d29yazFIYW5kbGVyCi17Ci0gICAgcmV0
dXJuIF9uZXR3b3JrMUhhbmRsZXI7Ci19Ci0KLS0gKHZvaWQpc2V0TmV0d29yazNIYW5kbGVyOihp
ZDxUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkhhbmRsZXI+KWhhbmRsZXIKLXsKLSAgICBpZiAo
aGFuZGxlciA9PSBfbmV0d29yazNIYW5kbGVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBbX25l
dHdvcmszSGFuZGxlciByZWxlYXNlXTsKLSAgICBfbmV0d29yazNIYW5kbGVyID0gW2hhbmRsZXIg
cmV0YWluXTsKLQotICAgIGF1dG8gYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IG1ha2VVbmlxdWU8T2Jq
Q0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI+KGhhbmRsZXIpOwotICAgIGF1dG8g
YWx0ZXJuYXRlQWdlbnQgPSBtYWtlVW5pcXVlPEFsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50PE5l
dHdvcmszQmFja2VuZERpc3BhdGNoZXIsIEFsdGVybmF0ZU5ldHdvcmszQmFja2VuZERpc3BhdGNo
ZXI+PigiTmV0d29yazMiX3MsICpfY29udHJvbGxlciwgV1RGTW92ZShhbHRlcm5hdGVEaXNwYXRj
aGVyKSk7Ci0gICAgX2NvbnRyb2xsZXItPmFwcGVuZEV4dHJhQWdlbnQoV1RGTW92ZShhbHRlcm5h
dGVBZ2VudCkpOwotfQotCi0tIChpZDxUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkhhbmRsZXI+
KW5ldHdvcmszSGFuZGxlcgotewotICAgIHJldHVybiBfbmV0d29yazNIYW5kbGVyOwotfQotCi1A
ZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0KLSMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXpl
cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBv
cnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucy5oIgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNw
YWNlIEluc3BlY3RvcjsKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0
Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQg
PEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJv
dG9jb2xKU09OT2JqZWN0Lmg+Ci0KLQotCi0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRl
c3RQcm90b2NvbFBsYXRmb3JtKSB7Ci0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1BbGwsCi0gICAg
VGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9T
LAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1MsCi19OwotCi0KLQotCi0KLUBwcm90b2Nv
bCBUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXIgPE5TT2JqZWN0PgotQG9wdGlvbmFs
Ci0tICh2b2lkKWxvYWRSZXNvdXJjZTFXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmlu
ZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKHZvaWQpKXN1
Y2Nlc3NDYWxsYmFjazsKLUBlbmQKLQotQHByb3RvY29sIFRlc3RQcm90b2NvbE5ldHdvcmszRG9t
YWluSGFuZGxlciA8TlNPYmplY3Q+Ci1Ab3B0aW9uYWwKLS0gKHZvaWQpbG9hZFJlc291cmNlMVdp
dGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBz
dWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikodm9pZCkpc3VjY2Vzc0NhbGxiYWNrOwotLSAodm9pZCls
b2FkUmVzb3VyY2UyV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSll
cnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKSh2b2lkKSlzdWNjZXNzQ2FsbGJh
Y2s7Ci0tICh2b2lkKWxvYWRSZXNvdXJjZTNXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0
cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKHZvaWQp
KXN1Y2Nlc3NDYWxsYmFjazsKLS0gKHZvaWQpbG9hZFJlc291cmNlNFdpdGhFcnJvckNhbGxiYWNr
Oih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6
KHZvaWQoXikodm9pZCkpc3VjY2Vzc0NhbGxiYWNrOwotLSAodm9pZClsb2FkUmVzb3VyY2U1V2l0
aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1
Y2Nlc3NDYWxsYmFjazoodm9pZCheKSh2b2lkKSlzdWNjZXNzQ2FsbGJhY2s7Ci0tICh2b2lkKWxv
YWRSZXNvdXJjZTZXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVy
cm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKHZvaWQpKXN1Y2Nlc3NDYWxsYmFj
azsKLS0gKHZvaWQpbG9hZFJlc291cmNlN1dpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3Ry
aW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikodm9pZCkp
c3VjY2Vzc0NhbGxiYWNrOwotQGVuZAotCi0KLQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJ
UHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+Ci0KLSMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21t
YW5kLXNpemVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2Jq
ZWN0UHJpdmF0ZS5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0
b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi0KLQotCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgot
I2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgotCi1u
YW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgot
T3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2
YWx1ZSk7Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xQbGF0
Zm9ybSB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQcm90b2Nv
bFBsYXRmb3JtQWxsOgotICAgICAgICByZXR1cm4gImFsbCJfczsKLSAgICBjYXNlIFRlc3RQcm90
b2NvbFBsYXRmb3JtR2VuZXJpYzoKLSAgICAgICAgcmV0dXJuICJnZW5lcmljIl9zOwotICAgIGNh
c2UgVGVzdFByb3RvY29sUGxhdGZvcm1JT1M6Ci0gICAgICAgIHJldHVybiAiaW9zIl9zOwotICAg
IGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzoKLSAgICAgICAgcmV0dXJuICJtYWNvcyJf
czsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xQ
bGF0Zm9ybT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAg
aWYgKHZhbHVlID09ICJhbGwiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1B
bGw7Ci0gICAgaWYgKHZhbHVlID09ICJnZW5lcmljIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90
b2NvbFBsYXRmb3JtR2VuZXJpYzsKLSAgICBpZiAodmFsdWUgPT0gImlvcyIpCi0gICAgICAgIHJl
dHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzsKLSAgICBpZiAodmFsdWUgPT0gIm1hY29zIikK
LSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M7Ci0gICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKLX0KLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAi
VGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3Rv
Y29sSlNPTk9iamVjdFByaXZhdGUuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQot
QGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKE5ldHdvcmsyRG9tYWluKQot
Ci0rICh2b2lkKV9wYXJzZUxvYWRlcklkOihOU1N0cmluZyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9h
ZDooaWQpcGF5bG9hZDsKLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zIChOZXR3b3JrMkRvbWFpbikKLQotKyAodm9pZClfcGFyc2VMb2FkZXJJZDoo
TlNTdHJpbmcgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJP
V19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBjbGFzc10pOwotICAg
ICpvdXRWYWx1ZSA9IChOU1N0cmluZyAqKXBheWxvYWQ7Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sVHlwZXMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBk
b21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwu
aCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDxX
ZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotI2ltcG9ydCA8d3Rm
L0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVz
cGFjZSBJbnNwZWN0b3I7Ci0KLQotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMu
bW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2VudW0tdmFsdWVzLmpzb24tcmVzdWx0IGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZW51
bS12YWx1ZXMuanNvbi1yZXN1bHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwNmZl
YmI3OGQ3Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9lbnVtLXZhbHVlcy5qc29uLXJlc3VsdAor
KysgL2Rldi9udWxsCkBAIC0xLDEyMzYgKzAsMCBAQAotIyMjIEJlZ2luIEZpbGU6IEluc3BlY3Rv
ckJhY2tlbmRDb21tYW5kcy5qcwotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVu
dW0tdmFsdWVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotLy8gVHlwZURvbWFpbgotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiVHlwZURv
bWFpbiIsIG51bGwpOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIlR5cGVEb21haW4u
VHlwZURvbWFpbkVudW0iLCB7U2hhcmVkOiAic2hhcmVkIiwgUmVkOiAicmVkIiwgR3JlZW46ICJn
cmVlbiIsIEJsdWU6ICJibHVlIn0pOwotSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigi
VHlwZURvbWFpbiIsIG51bGwpOwotCi0vLyBDb21tYW5kRG9tYWluCi1JbnNwZWN0b3JCYWNrZW5k
LnJlZ2lzdGVyRG9tYWluKCJDb21tYW5kRG9tYWluIiwgbnVsbCk7Ci1JbnNwZWN0b3JCYWNrZW5k
LnJlZ2lzdGVyQ29tbWFuZCgiQ29tbWFuZERvbWFpbi5jb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1
ZSIsIG51bGwsIFtdLCBbInJldHVyblZhbHVlIl0pOwotSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0
ZURvbWFpbigiQ29tbWFuZERvbWFpbiIsIG51bGwpOwotCi0vLyBFdmVudERvbWFpbgotSW5zcGVj
dG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiRXZlbnREb21haW4iLCBudWxsKTsKLUluc3BlY3Rv
ckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJFdmVudERvbWFpbi5FdmVudFdpdGhFbnVtUGFyYW1ldGVy
UGFyYW1ldGVyIiwge1NoYXJlZDogInNoYXJlZCIsIEJsYWNrOiAiYmxhY2siLCBXaGl0ZTogIndo
aXRlIn0pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckV2ZW50KCJFdmVudERvbWFpbi5ldmVu
dFdpdGhFbnVtUGFyYW1ldGVyIiwgbnVsbCwgWyJwYXJhbWV0ZXIiXSk7Ci1JbnNwZWN0b3JCYWNr
ZW5kLnJlZ2lzdGVyRXZlbnREb21haW5EaXNwYXRjaGVyID0gSW5zcGVjdG9yQmFja2VuZC5yZWdp
c3RlckRpc3BhdGNoZXIuYmluZChJbnNwZWN0b3JCYWNrZW5kLCAiRXZlbnREb21haW4iKTsKLUlu
c3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkV2ZW50RG9tYWluIiwgbnVsbCk7Ci0jIyMg
RW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKLSNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0KLW5hbWVz
cGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1w
dWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3Bh
dGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNw
YXRjaGVyKTsgfQotICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNv
bnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KLXByaXZhdGU6Ci0gICAg
UmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwotfTsKLQotCi1j
bGFzcyBBbHRlcm5hdGVDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0
ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZpcnR1YWwgfkFsdGVybmF0
ZUNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBj
b21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShsb25nIGNhbGxJZCkgPSAwOwotfTsKLQotfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKLSMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVk
ZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsK
LQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotY2xhc3MgQWx0
ZXJuYXRlQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOwotI2VuZGlmIC8vIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi1jbGFzcyBDb21tYW5kRG9tYWluQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKLXB1YmxpYzoKLSAgICAvLyBOYW1lZCBhZnRlciBwYXJh
bWV0ZXIgJ3JldHVyblZhbHVlJyB3aGlsZSBnZW5lcmF0aW5nIGNvbW1hbmQvZXZlbnQgY29tbWFu
ZFdpdGhFbnVtUmV0dXJuVmFsdWUuCi0gICAgZW51bSBjbGFzcyBSZXR1cm5WYWx1ZSB7Ci0gICAg
ICAgIFNoYXJlZCA9IDAsCi0gICAgICAgIEN5YW4gPSA2LAotICAgICAgICBNYWdlbnRhID0gNywK
LSAgICAgICAgWWVsbG93ID0gOCwKLSAgICB9OyAvLyBlbnVtIGNsYXNzIFJldHVyblZhbHVlCi0g
ICAgdmlydHVhbCB2b2lkIGNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlKEVycm9yU3RyaW5nJiwg
Q29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UmV0dXJuVmFsdWUqIG91dF9y
ZXR1cm5WYWx1ZSkgPSAwOwotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgfkNvbW1hbmREb21haW5C
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKLX07Ci0KLWNsYXNzIENvbW1hbmREb21haW5CYWNr
ZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hl
ciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNo
ZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXIqKTsKLSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBT
dHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5hbDsKLXByaXZh
dGU6Ci0gICAgdm9pZCBjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShsb25nIHJlcXVlc3RJZCwg
UmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKLSNpZiBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLXB1YmxpYzoKLSAgICB2b2lkIHNldEFsdGVybmF0ZURp
c3BhdGNoZXIoQWx0ZXJuYXRlQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKiBhbHRlcm5h
dGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNo
ZXI7IH0KLXByaXZhdGU6Ci0gICAgQWx0ZXJuYXRlQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRj
aGVyKiBtX2FsdGVybmF0ZURpc3BhdGNoZXIgeyBudWxscHRyIH07Ci0jZW5kaWYKLXByaXZhdGU6
Ci0gICAgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiwg
Q29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIENvbW1hbmREb21h
aW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQgeyBudWxscHRyIH07Ci19OwotCi19
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1
ZXMuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKLSNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jZW5kaWYK
LQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLUNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXI6On5Db21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9Ci0K
LVJlZjxDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI+IENvbW1hbmREb21haW5CYWNrZW5k
RGlzcGF0Y2hlcjo6Y3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwg
Q29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCi17Ci0gICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmRE
aXNwYXRjaGVyLCBhZ2VudCkpOwotfQotCi1Db21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI6
OkNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2Vu
ZERpc3BhdGNoZXIsIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50
KQotICAgIDogU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIp
Ci0gICAgLCBtX2FnZW50KGFnZW50KQotewotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lz
dGVyRGlzcGF0Y2hlckZvckRvbWFpbigiQ29tbWFuZERvbWFpbiJfcywgdGhpcyk7Ci19Ci0KLXZv
aWQgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJ
ZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKLXsK
LSAgICBSZWY8Q29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsK
LQotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0
T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRlcnMpOwotCi0gICAgaWYgKG1ldGhvZCA9PSAiY29t
bWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUiKQotICAgICAgICBjb21tYW5kV2l0aEVudW1SZXR1cm5W
YWx1ZShyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOwotICAgIGVsc2UKLSAgICAgICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hl
cjo6TWV0aG9kTm90Rm91bmQsICInQ29tbWFuZERvbWFpbi4iICsgbWV0aG9kICsgIicgd2FzIG5v
dCBmb3VuZCIpOwotfQotCi12b2lkIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Y29t
bWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+JiYpCi17Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0g
ICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3Bh
dGNoZXItPmNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlKHJlcXVlc3RJZCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxK
U09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgQ29tbWFu
ZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UmV0dXJuVmFsdWUgb3V0X3JldHVyblZh
bHVlOwotICAgIG1fYWdlbnQtPmNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlKGVycm9yLCAmb3V0
X3JldHVyblZhbHVlKTsKLQotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0gICAgICAgIHJlc3Vs
dC0+c2V0U3RyaW5nKCJyZXR1cm5WYWx1ZSJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhl
bHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKG91dF9yZXR1cm5WYWx1ZSkpOwotCi0gICAgaWYg
KCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3Bv
bnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRj
aGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOwotfQotCi19IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJv
dG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEZy
b250ZW5kUm91dGVyOwotCi1jbGFzcyBFdmVudERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlciB7Ci0g
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgRXZlbnREb21haW5Gcm9u
dGVuZERpc3BhdGNoZXIoRnJvbnRlbmRSb3V0ZXImIGZyb250ZW5kUm91dGVyKSA6IG1fZnJvbnRl
bmRSb3V0ZXIoZnJvbnRlbmRSb3V0ZXIpIHsgfQotICAgICAgICAvLyBOYW1lZCBhZnRlciBwYXJh
bWV0ZXIgJ3BhcmFtZXRlcicgd2hpbGUgZ2VuZXJhdGluZyBjb21tYW5kL2V2ZW50IGV2ZW50V2l0
aEVudW1QYXJhbWV0ZXIuCi0gICAgICAgIGVudW0gY2xhc3MgUGFyYW1ldGVyIHsKLSAgICAgICAg
ICAgIFNoYXJlZCA9IDAsCi0gICAgICAgICAgICBCbGFjayA9IDQsCi0gICAgICAgICAgICBXaGl0
ZSA9IDUsCi0gICAgICAgIH07IC8vIGVudW0gY2xhc3MgUGFyYW1ldGVyCi0gICAgdm9pZCBldmVu
dFdpdGhFbnVtUGFyYW1ldGVyKFBhcmFtZXRlciBwYXJhbWV0ZXIpOwotcHJpdmF0ZToKLSAgICBG
cm9udGVuZFJvdXRlciYgbV9mcm9udGVuZFJvdXRlcjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0
RnJvbnRlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5h
bWVzcGFjZSBJbnNwZWN0b3IgewotCi12b2lkIEV2ZW50RG9tYWluRnJvbnRlbmREaXNwYXRjaGVy
OjpldmVudFdpdGhFbnVtUGFyYW1ldGVyKFBhcmFtZXRlciBwYXJhbWV0ZXIpCi17Ci0gICAgUmVm
PEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAg
IGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkV2ZW50RG9tYWluLmV2ZW50V2l0
aEVudW1QYXJhbWV0ZXIiX3MpOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHBhcmFtc09iamVjdCA9
IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInBh
cmFtZXRlciJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25z
dGFudFZhbHVlKHBhcmFtZXRlcikpOwotICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoInBhcmFt
cyJfcywgV1RGTW92ZShwYXJhbXNPYmplY3QpKTsKLQotICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2Vu
ZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAot
Ci0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9u
cy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLW5hbWVzcGFjZSBQcm90b2NvbCB7
Ci0KLQotCi0vLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KLW5hbWVzcGFjZSBUeXBlRG9tYWluIHsK
LWVudW0gY2xhc3MgVHlwZURvbWFpbkVudW07Ci19IC8vIFR5cGVEb21haW4KLS8vIEVuZCBvZiBm
b3J3YXJkIGRlY2xhcmF0aW9ucy4KLQotCi0KLQotbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKLQot
U3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKTsKLQotdGVtcGxhdGU8dHlwZW5h
bWUgVD4gU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKFQgZW51bVZhbHVlKQotewotICAgIHJl
dHVybiBnZXRFbnVtQ29uc3RhbnRWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KGVudW1WYWx1ZSkpOwot
fQotCi19IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwotCi1uYW1lc3BhY2UgVHlwZURvbWFpbiB7
Ci0vKiAgKi8KLWVudW0gY2xhc3MgVHlwZURvbWFpbkVudW0gewotICAgIFNoYXJlZCA9IDAsCi0g
ICAgUmVkID0gMSwKLSAgICBHcmVlbiA9IDIsCi0gICAgQmx1ZSA9IDMsCi19OyAvLyBlbnVtIGNs
YXNzIFR5cGVEb21haW5FbnVtCi19IC8vIFR5cGVEb21haW4KLQotCi0KLW5hbWVzcGFjZSBUZXN0
SGVscGVycyB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFByb3RvY29sRW51bVR5cGU+Ci1PcHRpb25h
bDxQcm90b2NvbEVudW1UeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5n
Jik7Ci0KLS8vIEVudW1zIGluIHRoZSAnVHlwZURvbWFpbicgRG9tYWluCi10ZW1wbGF0ZTw+Ci1P
cHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51bT4g
cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46
OlR5cGVEb21haW5FbnVtPihjb25zdCBTdHJpbmcmKTsKLQotfSAvLyBuYW1lc3BhY2UgVGVzdEhl
bHBlcnMKLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCi0KLW5hbWVzcGFjZSBXVEYgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVm
YXVsdEhhc2g7Ci0KLS8vIEhhc2ggZGVjbGFyYXRpb25zIGluIHRoZSAnVHlwZURvbWFpbicgRG9t
YWluCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6
VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW0+IHsKLSAgICB0eXBlZGVmIEludEhhc2g8SW5zcGVj
dG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW0+IEhhc2g7Ci19OwotCi19
IC8vIG5hbWVzcGFjZSBXVEYKLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRl
c3RQcm90b2NvbE9iamVjdHMuaCIKLQotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLW5hbWVz
cGFjZSBQcm90b2NvbCB7Ci0KLW5hbWVzcGFjZSBUZXN0SGVscGVycyB7Ci0KLXN0YXRpYyBjb25z
dCBjaGFyKiBjb25zdCBlbnVtX2NvbnN0YW50X3ZhbHVlc1tdID0gewotICAgICJzaGFyZWQiLAot
ICAgICJyZWQiLAotICAgICJncmVlbiIsCi0gICAgImJsdWUiLAotICAgICJibGFjayIsCi0gICAg
IndoaXRlIiwKLSAgICAiY3lhbiIsCi0gICAgIm1hZ2VudGEiLAotICAgICJ5ZWxsb3ciLAotfTsK
LQotU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7Ci0gICAgcmV0dXJuIGVu
dW1fY29uc3RhbnRfdmFsdWVzW2NvZGVdOwotfQotCi0vLyBFbnVtcyBpbiB0aGUgJ1R5cGVEb21h
aW4nIERvbWFpbgotdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6VHlw
ZURvbWFpbjo6VHlwZURvbWFpbkVudW0+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0
b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51bT4oY29uc3QgU3RyaW5nJiBw
cm90b2NvbFN0cmluZykKLXsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVz
W10gPSB7Ci0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6
VHlwZURvbWFpbkVudW06OlNoYXJlZCwKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3Rv
Y29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51bTo6UmVkLAotICAgICAgICAoc2l6ZV90KUlu
c3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46OlR5cGVEb21haW5FbnVtOjpHcmVlbiwKLSAg
ICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWlu
RW51bTo6Qmx1ZSwKLSAgICB9OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgNDsgKytpKQot
ICAgICAgICBpZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3Rh
bnRWYWx1ZXNbaV1dKQotICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpU
eXBlRG9tYWluOjpUeXBlRG9tYWluRW51bSljb25zdGFudFZhbHVlc1tpXTsKLQotICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7Ci19Ci0KLQotfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKLQotCi0K
LX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0j
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQotQHBy
b3RvY29sIFRlc3RQcm90b2NvbENvbW1hbmREb21haW5Eb21haW5IYW5kbGVyOwotCi1uYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKLQotCi1jbGFzcyBPYmpDSW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tl
bmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZUNvbW1hbmREb21haW5CYWNrZW5k
RGlzcGF0Y2hlciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAg
T2JqQ0luc3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9j
b2xDb21tYW5kRG9tYWluRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFu
ZGxlcjsgfQotICAgIHZvaWQgY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUobG9uZyByZXF1ZXN0
SWQpIGZpbmFsOwotcHJpdmF0ZToKLSAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sQ29tbWFu
ZERvbWFpbkRvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwotfTsKLQotfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJz
LmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmlnLmgi
Ci0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUg
IlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLQotbmFtZXNwYWNlIEluc3Bl
Y3RvciB7Ci0KLXZvaWQgT2JqQ0luc3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hl
cjo6Y29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUobG9uZyByZXF1ZXN0SWQpCi17Ci0gICAgaWYg
KCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGNvbW1hbmRXaXRoRW51
bVJldHVyblZhbHVlV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0gICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBC
YWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInQ29tbWFuZERvbWFpbi5jb21tYW5k
V2l0aEVudW1SZXR1cm5WYWx1ZScgd2FzIG5vdCBmb3VuZCJfcyk7Ci0gICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAg
YmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tl
bmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwotICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgIH07Ci0KLSAgICBpZCBzdWNjZXNzQ2Fs
bGJhY2sgPSBeKFRlc3RQcm90b2NvbENvbW1hbmREb21haW5Db21tYW5kV2l0aEVudW1SZXR1cm5W
YWx1ZVJldHVyblZhbHVlIHJldHVyblZhbHVlKSB7Ci0gICAgICAgIFJlZjxKU09OOjpPYmplY3Q+
IHJlc3VsdE9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgIHJlc3VsdE9i
amVjdC0+c2V0U3RyaW5nKCJyZXR1cm5WYWx1ZSJfcywgdG9Qcm90b2NvbFN0cmluZyhyZXR1cm5W
YWx1ZSkpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVz
dElkLCBXVEZNb3ZlKHJlc3VsdE9iamVjdCksIGZhbHNlKTsKLSAgICB9OwotCi0gICAgW21fZGVs
ZWdhdGUgY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWVXaXRoRXJyb3JDYWxsYmFjazplcnJvckNh
bGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOwotfQotCi0KLX0gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNw
YXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5o
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxXZWJJbnNw
ZWN0b3IvVGVzdFByb3RvY29sLmg+Ci0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZh
dWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QK
LUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4sIHNldHRlcj1zZXRDb21tYW5kRG9tYWluSGFu
ZGxlcjopIGlkPFRlc3RQcm90b2NvbENvbW1hbmREb21haW5Eb21haW5IYW5kbGVyPiBjb21tYW5k
RG9tYWluSGFuZGxlcjsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgVGVzdFByb3Rv
Y29sRXZlbnREb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKmV2ZW50RG9tYWluRXZlbnREaXNw
YXRjaGVyOwotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
bi5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbgotLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xD
b25maWd1cmF0aW9uLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW1w
b3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0
Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0KLXVzaW5nIG5h
bWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1
cmF0aW9uCi17Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxl
cjsKLSAgICBpZDxUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluRG9tYWluSGFuZGxlcj4gX2NvbW1h
bmREb21haW5IYW5kbGVyOwotICAgIFRlc3RQcm90b2NvbEV2ZW50RG9tYWluRG9tYWluRXZlbnRE
aXNwYXRjaGVyICpfZXZlbnREb21haW5FdmVudERpc3BhdGNoZXI7Ci19Ci0KLS0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciop
Y29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQot
ICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBfY29udHJv
bGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxv
YwotewotICAgIFtfY29tbWFuZERvbWFpbkhhbmRsZXIgcmVsZWFzZV07Ci0gICAgW19ldmVudERv
bWFpbkV2ZW50RGlzcGF0Y2hlciByZWxlYXNlXTsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0K
LS0gKHZvaWQpc2V0Q29tbWFuZERvbWFpbkhhbmRsZXI6KGlkPFRlc3RQcm90b2NvbENvbW1hbmRE
b21haW5Eb21haW5IYW5kbGVyPiloYW5kbGVyCi17Ci0gICAgaWYgKGhhbmRsZXIgPT0gX2NvbW1h
bmREb21haW5IYW5kbGVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBbX2NvbW1hbmREb21haW5I
YW5kbGVyIHJlbGVhc2VdOwotICAgIF9jb21tYW5kRG9tYWluSGFuZGxlciA9IFtoYW5kbGVyIHJl
dGFpbl07Ci0KLSAgICBhdXRvIGFsdGVybmF0ZURpc3BhdGNoZXIgPSBtYWtlVW5pcXVlPE9iakNJ
bnNwZWN0b3JDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI+KGhhbmRsZXIpOwotICAgIGF1
dG8gYWx0ZXJuYXRlQWdlbnQgPSBtYWtlVW5pcXVlPEFsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50
PENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlciwgQWx0ZXJuYXRlQ29tbWFuZERvbWFpbkJh
Y2tlbmREaXNwYXRjaGVyPj4oIkNvbW1hbmREb21haW4iX3MsICpfY29udHJvbGxlciwgV1RGTW92
ZShhbHRlcm5hdGVEaXNwYXRjaGVyKSk7Ci0gICAgX2NvbnRyb2xsZXItPmFwcGVuZEV4dHJhQWdl
bnQoV1RGTW92ZShhbHRlcm5hdGVBZ2VudCkpOwotfQotCi0tIChpZDxUZXN0UHJvdG9jb2xDb21t
YW5kRG9tYWluRG9tYWluSGFuZGxlcj4pY29tbWFuZERvbWFpbkhhbmRsZXIKLXsKLSAgICByZXR1
cm4gX2NvbW1hbmREb21haW5IYW5kbGVyOwotfQotCi0tIChUZXN0UHJvdG9jb2xFdmVudERvbWFp
bkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqKWV2ZW50RG9tYWluRXZlbnREaXNwYXRjaGVyCi17Ci0g
ICAgaWYgKCFfZXZlbnREb21haW5FdmVudERpc3BhdGNoZXIpCi0gICAgICAgIF9ldmVudERvbWFp
bkV2ZW50RGlzcGF0Y2hlciA9IFtbVGVzdFByb3RvY29sRXZlbnREb21haW5Eb21haW5FdmVudERp
c3BhdGNoZXIgYWxsb2NdIGluaXRXaXRoQ29udHJvbGxlcjpfY29udHJvbGxlcl07Ci0gICAgcmV0
dXJuIF9ldmVudERvbWFpbkV2ZW50RGlzcGF0Y2hlcjsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAi
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5o
PgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW1wbGVtZW50YXRpb24gVGVzdFBy
b3RvY29sRXZlbnREb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIKLXsKLSAgICBBdWdtZW50YWJs
ZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotfQotCi0tIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRy
b2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAg
ICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRyb2xsZXIg
PSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWV2ZW50V2l0aEVu
dW1QYXJhbWV0ZXJXaXRoUGFyYW1ldGVyOihUZXN0UHJvdG9jb2xFdmVudERvbWFpbkV2ZW50V2l0
aEVudW1QYXJhbWV0ZXJQYXJhbWV0ZXIpcGFyYW1ldGVyCi17Ci0gICAgY29uc3QgRnJvbnRlbmRS
b3V0ZXImIHJvdXRlciA9IF9jb250cm9sbGVyLT5mcm9udGVuZFJvdXRlcigpOwotCi0gICAgUmVm
PEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAg
IGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkV2ZW50RG9tYWluLmV2ZW50V2l0
aEVudW1QYXJhbWV0ZXIiX3MpOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHBhcmFtc09iamVjdCA9
IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInBh
cmFtZXRlciJfcywgdG9Qcm90b2NvbFN0cmluZyhwYXJhbWV0ZXIpKTsKLSAgICBqc29uTWVzc2Fn
ZS0+c2V0T2JqZWN0KCJwYXJhbXMiX3MsIFdURk1vdmUocGFyYW1zT2JqZWN0KSk7Ci0gICAgcm91
dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwotfQotCi1AZW5kCi0K
LQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGVudW0tdmFsdWVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLSNpbXBvcnQgPFdl
Ykluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KLQotCi0KLQotdHlwZWRlZiBOU19F
TlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sUGxhdGZvcm0pIHsKLSAgICBUZXN0UHJvdG9jb2xQ
bGF0Zm9ybUFsbCwKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWMsCi0gICAgVGVzdFBy
b3RvY29sUGxhdGZvcm1JT1MsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUywKLX07Ci0K
LQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0p
IHsKLSAgICBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bVNoYXJlZCwKLSAgICBUZXN0UHJvdG9j
b2xUeXBlRG9tYWluRW51bVJlZCwKLSAgICBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bUdyZWVu
LAotICAgIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtQmx1ZSwKLX07Ci0KLQotCi1AcHJvdG9j
b2wgVGVzdFByb3RvY29sQ29tbWFuZERvbWFpbkRvbWFpbkhhbmRsZXIgPE5TT2JqZWN0PgotQG9w
dGlvbmFsCi0tICh2b2lkKWNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlV2l0aEVycm9yQ2FsbGJh
Y2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFj
azoodm9pZCheKShUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluQ29tbWFuZFdpdGhFbnVtUmV0dXJu
VmFsdWVSZXR1cm5WYWx1ZSByZXR1cm5WYWx1ZSkpc3VjY2Vzc0NhbGxiYWNrOwotQGVuZAotCi1f
X2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFBy
b3RvY29sRXZlbnREb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgOiBOU09iamVjdAotLSAodm9p
ZClldmVudFdpdGhFbnVtUGFyYW1ldGVyV2l0aFBhcmFtZXRlcjooVGVzdFByb3RvY29sRXZlbnRE
b21haW5FdmVudFdpdGhFbnVtUGFyYW1ldGVyUGFyYW1ldGVyKXBhcmFtZXRlcjsKLUBlbmQKLQot
Ci0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmpl
Y3RzLmg+Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbEludGVybmFsLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBlbnVtLXZhbHVlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sSlNP
Tk9iamVjdFByaXZhdGUuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5z
cGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotQGludGVy
ZmFjZSBUZXN0UHJvdG9jb2xFdmVudERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAoUHJpdmF0
ZSkKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEluc3BlY3Rvcjo6QXVnbWVu
dGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyOwotQGVuZAotCi0KLSMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBl
bnVtLXZhbHVlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVBy
b3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdGVt
cGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgotT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9t
UHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0KLWlubGluZSBTdHJpbmcgdG9Q
cm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xQbGF0Zm9ybSB2YWx1ZSkKLXsKLSAgICBzd2l0Y2go
dmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOgotICAgICAgICByZXR1
cm4gImFsbCJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzoKLSAgICAg
ICAgcmV0dXJuICJnZW5lcmljIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1JT1M6
Ci0gICAgICAgIHJldHVybiAiaW9zIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1N
YWNPUzoKLSAgICAgICAgcmV0dXJuICJtYWNvcyJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4K
LWlubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xQbGF0Zm9ybT4gZnJvbVByb3RvY29sU3RyaW5n
KGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJhbGwiKQotICAgICAg
ICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1BbGw7Ci0gICAgaWYgKHZhbHVlID09ICJnZW5l
cmljIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzsKLSAgICBp
ZiAodmFsdWUgPT0gImlvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlP
UzsKLSAgICBpZiAodmFsdWUgPT0gIm1hY29zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2Nv
bFBsYXRmb3JtTWFjT1M7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotCi1pbmxpbmUg
U3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0gdmFsdWUp
Ci17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xUeXBlRG9tYWlu
RW51bVNoYXJlZDoKLSAgICAgICAgcmV0dXJuICJzaGFyZWQiX3M7Ci0gICAgY2FzZSBUZXN0UHJv
dG9jb2xUeXBlRG9tYWluRW51bVJlZDoKLSAgICAgICAgcmV0dXJuICJyZWQiX3M7Ci0gICAgY2Fz
ZSBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bUdyZWVuOgotICAgICAgICByZXR1cm4gImdyZWVu
Il9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1CbHVlOgotICAgICAgICBy
ZXR1cm4gImJsdWUiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8
VGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJp
bmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAic2hhcmVkIikKLSAgICAgICAgcmV0dXJu
IFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtU2hhcmVkOwotICAgIGlmICh2YWx1ZSA9PSAicmVk
IikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtUmVkOwotICAgIGlm
ICh2YWx1ZSA9PSAiZ3JlZW4iKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sVHlwZURvbWFp
bkVudW1HcmVlbjsKLSAgICBpZiAodmFsdWUgPT0gImJsdWUiKQotICAgICAgICByZXR1cm4gVGVz
dFByb3RvY29sVHlwZURvbWFpbkVudW1CbHVlOwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVl
cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBv
cnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKLSNpbXBvcnQgPFdlYklu
c3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0KLXVzaW5nIG5hbWVzcGFj
ZSBJbnNwZWN0b3I7Ci0KLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChU
eXBlRG9tYWluRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZVR5cGVEb21haW5FbnVtOihOU051bWJl
ciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLQotQGVuZAotCi1AaW1wbGVt
ZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChUeXBlRG9tYWluRG9tYWluKQot
Ci0rICh2b2lkKV9wYXJzZVR5cGVEb21haW5FbnVtOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9t
UGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUo
cGF5bG9hZCwgW05TU3RyaW5nIGNsYXNzXSk7Ci0gICAgT3B0aW9uYWw8VGVzdFByb3RvY29sVHlw
ZURvbWFpbkVudW0+IHJlc3VsdCA9IEluc3BlY3Rvcjo6ZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQ
cm90b2NvbFR5cGVEb21haW5FbnVtPihwYXlsb2FkKTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9S
X0JBRF9FTlVNX1ZBTFVFKHJlc3VsdCwgQCJUeXBlRG9tYWluRW51bSIpOwotICAgICpvdXRWYWx1
ZSA9IEAocmVzdWx0LnZhbHVlKCkpOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMu
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0
ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQ
cml2YXRlLmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3RmL0pTT05W
YWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0KLQotIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZXZlbnQtdGFyZ2V0
VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1yZXN1bHQgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9l
dmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJlc3Vs
dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDg5YTk3ZmY1NWQuLjAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmljL2V4cGVjdGVkL2V2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVU
eXBlLmpzb24tcmVzdWx0CisrKyAvZGV2L251bGwKQEAgLTEsMTA2MyArMCwwIEBACi0jIyMgQmVn
aW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJs
ZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0v
LyBEb21haW4KLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIkRvbWFpbiIsIG51bGwp
OwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIkRvbWFpbi5Db21tYW5kIiwgbnVs
bCwgW10sIFtdKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudCgiRG9tYWluLkV2ZW50
IiwgWyJwYWdlIiwgIndvcmtlciJdLCBbXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9t
YWluRGlzcGF0Y2hlciA9IEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEaXNwYXRjaGVyLmJpbmQo
SW5zcGVjdG9yQmFja2VuZCwgIkRvbWFpbiIpOwotSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURv
bWFpbigiRG9tYWluIiwgWyJwYWdlIl0pOwotIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5k
Q29tbWFuZHMuanMKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0
Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRhcmdldFR5
cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5
cGVzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5o
PgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXIgewotcHVibGljOgotICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJh
Y2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdU
Rk1vdmUoZGlzcGF0Y2hlcik7IH0KLSAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3Bh
dGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Ci1wcml2
YXRlOgotICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsK
LX07Ci0KLQotY2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMg
QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZpcnR1YWwgfkFsdGVy
bmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIENvbW1h
bmQobG9uZyBjYWxsSWQpID0gMDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0j
ZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jIyMgRW5k
IEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9u
Y2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdHlwZWRlZiBTdHJpbmcg
RXJyb3JTdHJpbmc7Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKLWNsYXNzIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyOwotI2VuZGlmIC8vIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi1jbGFzcyBEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIgewotcHVibGljOgotICAgIHZpcnR1YWwgdm9pZCBDb21tYW5k
KEVycm9yU3RyaW5nJikgPSAwOwotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgfkRvbWFpbkJhY2tl
bmREaXNwYXRjaGVySGFuZGxlcigpOwotfTsKLQotY2xhc3MgRG9tYWluQmFja2VuZERpc3BhdGNo
ZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewotcHVibGlj
OgotICAgIHN0YXRpYyBSZWY8RG9tYWluQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5k
RGlzcGF0Y2hlciYsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIHZvaWQg
ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6
T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOwotcHJpdmF0ZToKLSAgICB2b2lkIENvbW1hbmQobG9u
ZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0jaWYgRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi1wdWJsaWM6Ci0gICAgdm9pZCBz
ZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKiBh
bHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURp
c3BhdGNoZXI7IH0KLXByaXZhdGU6Ci0gICAgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNo
ZXIqIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciB7IG51bGxwdHIgfTsKLSNlbmRpZgotcHJpdmF0ZToK
LSAgICBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYsIERvbWFpbkJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlciogbV9hZ2VudCB7IG51bGxwdHIgfTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUu
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRl
IDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQotI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hl
cnMuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotRG9tYWluQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyOjp+RG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9Ci0K
LVJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmNy
ZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIERvbWFpbkJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlciogYWdlbnQpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRG9t
YWluQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIsIGFnZW50KSk7Ci19Ci0KLURv
bWFpbkJhY2tlbmREaXNwYXRjaGVyOjpEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlz
cGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxl
ciogYWdlbnQpCi0gICAgOiBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlz
cGF0Y2hlcikKLSAgICAsIG1fYWdlbnQoYWdlbnQpCi17Ci0gICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKCJEb21haW4iX3MsIHRoaXMpOwotfQotCi12
b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29u
c3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKLXsKLSAgICBS
ZWY8RG9tYWluQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwotCi0gICAgUmVmUHRy
PEpTT046Ok9iamVjdD4gcGFyYW1ldGVyczsKLSAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFt
cyJfcywgcGFyYW1ldGVycyk7Ci0KLSAgICBpZiAobWV0aG9kID09ICJDb21tYW5kIikKLSAgICAg
ICAgQ29tbWFuZChyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOwotICAgIGVsc2UKLSAg
ICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlz
cGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRG9tYWluLiIgKyBtZXRob2QgKyAiJyB3YXMgbm90
IGZvdW5kIik7Ci19Ci0KLXZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9u
ZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCi17Ci0jaWYgRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0gICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hl
cikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPkNvbW1hbmQocmVxdWVzdElkKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7
Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
LSAgICBtX2FnZW50LT5Db21tYW5kKGVycm9yKTsKLQotICAgIGlmICghZXJyb3IubGVuZ3RoKCkp
Ci0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdU
Rk1vdmUocmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3Is
IFdURk1vdmUoZXJyb3IpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBF
bmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRl
c3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQot
Ci0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFs
dWVzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNw
ZWN0b3IgewotCi1jbGFzcyBGcm9udGVuZFJvdXRlcjsKLQotY2xhc3MgRG9tYWluRnJvbnRlbmRE
aXNwYXRjaGVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBE
b21haW5Gcm9udGVuZERpc3BhdGNoZXIoRnJvbnRlbmRSb3V0ZXImIGZyb250ZW5kUm91dGVyKSA6
IG1fZnJvbnRlbmRSb3V0ZXIoZnJvbnRlbmRSb3V0ZXIpIHsgfQotICAgIHZvaWQgRXZlbnQoKTsK
LXByaXZhdGU6Ci0gICAgRnJvbnRlbmRSb3V0ZXImIG1fZnJvbnRlbmRSb3V0ZXI7Ci19OwotCi19
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0
Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGlu
Zy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEZyb250
ZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZy
b250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKLQotdm9pZCBEb21haW5Gcm9udGVuZERpc3BhdGNoZXI6OkV2ZW50KCkK
LXsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2
ZW50Il9zKTsKLQotICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50
b0pTT05TdHJpbmcoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5k
IEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sT2JqZWN0cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZl
bnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRl
IDx3dGYvQXNzZXJ0aW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLW5hbWVz
cGFjZSBQcm90b2NvbCB7Ci0KLQotCi0KLQotCi0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2Nv
bAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
T2JqZWN0cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmct
ZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bE9iamVjdHMuaCIKLQotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLW5hbWVzcGFjZSBQcm90
b2NvbCB7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1k
ZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5k
RGlzcGF0Y2hlcnMuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLUBwcm90b2NvbCBU
ZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyOwotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsK
LQotCi1jbGFzcyBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBw
dWJsaWMgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIgewotICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlz
cGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1f
ZGVsZWdhdGUgPSBoYW5kbGVyOyB9Ci0gICAgdm9pZCBDb21tYW5kKGxvbmcgcmVxdWVzdElkKSBm
aW5hbDsKLXByaXZhdGU6Ci0gICAgUmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFp
bkhhbmRsZXI+PiBtX2RlbGVnYXRlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0K
LSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRl
YnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlz
cGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW5jbHVk
ZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1
ZXMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXZvaWQgT2JqQ0luc3BlY3RvckRvbWFp
bkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElkKQotewotICAgIGlmICgh
W21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihDb21tYW5kV2l0aEVycm9y
Q2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVy
KCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0
aG9kTm90Rm91bmQsICInRG9tYWluLkNvbW1hbmQnIHdhcyBub3QgZm91bmQiX3MpOwotICAgICAg
ICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7
Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVz
dElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKLSAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICB9OwotCi0gICAgaWQg
c3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJl
c3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2UpOwotICAgIH07
Ci0KLSAgICBbbV9kZWxlZ2F0ZSBDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFj
ayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKLX0KLQotCi19IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hl
cnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmct
ZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgotCi1f
X2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmV0
YWluLCBzZXR0ZXI9c2V0RG9tYWluSGFuZGxlcjopIGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFp
bkhhbmRsZXI+IGRvbWFpbkhhbmRsZXI7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkp
IFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqZG9tYWluRXZlbnREaXNw
YXRjaGVyOwotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
bi5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1k
b21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCi0KLSNp
bXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNr
ZW5kRGlzcGF0Y2hlcnMuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3Bh
dGNoYWJsZUFnZW50Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3Bl
Y3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVy
bmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0K
LUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCi17Ci0gICAgQXVnbWVu
dGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKLSAgICBpZDxUZXN0UHJvdG9j
b2xEb21haW5Eb21haW5IYW5kbGVyPiBfZG9tYWluSGFuZGxlcjsKLSAgICBUZXN0UHJvdG9jb2xE
b21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKl9kb21haW5FdmVudERpc3BhdGNoZXI7Ci19Ci0K
LS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9y
Q29udHJvbGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAg
aWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsK
LSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0g
KHZvaWQpZGVhbGxvYwotewotICAgIFtfZG9tYWluSGFuZGxlciByZWxlYXNlXTsKLSAgICBbX2Rv
bWFpbkV2ZW50RGlzcGF0Y2hlciByZWxlYXNlXTsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0K
LS0gKHZvaWQpc2V0RG9tYWluSGFuZGxlcjooaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFu
ZGxlcj4paGFuZGxlcgotewotICAgIGlmIChoYW5kbGVyID09IF9kb21haW5IYW5kbGVyKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBbX2RvbWFpbkhhbmRsZXIgcmVsZWFzZV07Ci0gICAgX2RvbWFp
bkhhbmRsZXIgPSBbaGFuZGxlciByZXRhaW5dOwotCi0gICAgYXV0byBhbHRlcm5hdGVEaXNwYXRj
aGVyID0gbWFrZVVuaXF1ZTxPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXI+KGhh
bmRsZXIpOwotICAgIGF1dG8gYWx0ZXJuYXRlQWdlbnQgPSBtYWtlVW5pcXVlPEFsdGVybmF0ZURp
c3BhdGNoYWJsZUFnZW50PERvbWFpbkJhY2tlbmREaXNwYXRjaGVyLCBBbHRlcm5hdGVEb21haW5C
YWNrZW5kRGlzcGF0Y2hlcj4+KCJEb21haW4iX3MsICpfY29udHJvbGxlciwgV1RGTW92ZShhbHRl
cm5hdGVEaXNwYXRjaGVyKSk7Ci0gICAgX2NvbnRyb2xsZXItPmFwcGVuZEV4dHJhQWdlbnQoV1RG
TW92ZShhbHRlcm5hdGVBZ2VudCkpOwotfQotCi0tIChpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21h
aW5IYW5kbGVyPilkb21haW5IYW5kbGVyCi17Ci0gICAgcmV0dXJuIF9kb21haW5IYW5kbGVyOwot
fQotCi0tIChUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKilkb21haW5F
dmVudERpc3BhdGNoZXIKLXsKLSAgICBpZiAoIV9kb21haW5FdmVudERpc3BhdGNoZXIpCi0gICAg
ICAgIF9kb21haW5FdmVudERpc3BhdGNoZXIgPSBbW1Rlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2
ZW50RGlzcGF0Y2hlciBhbGxvY10gaW5pdFdpdGhDb250cm9sbGVyOl9jb250cm9sbGVyXTsKLSAg
ICByZXR1cm4gX2RvbWFpbkV2ZW50RGlzcGF0Y2hlcjsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAi
VGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLmgiCi0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2Ug
SW5zcGVjdG9yOwotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZl
bnREaXNwYXRjaGVyCi17Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29u
dHJvbGxlcjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVu
dGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtzdXBl
ciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJU
KGNvbnRyb2xsZXIpOwotICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1cm4g
c2VsZjsKLX0KLQotLSAodm9pZClFdmVudAotewotICAgIGNvbnN0IEZyb250ZW5kUm91dGVyJiBy
b3V0ZXIgPSBfY29udHJvbGxlci0+ZnJvbnRlbmRSb3V0ZXIoKTsKLQotICAgIFJlZjxKU09OOjpP
YmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVz
c2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOwotICAgIHJvdXRl
ci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKLX0KLQotQGVuZAotCi0K
LSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPEZvdW5k
YXRpb24vRm91bmRhdGlvbi5oPgotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xK
U09OT2JqZWN0Lmg+Ci0KLQotCi0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90
b2NvbFBsYXRmb3JtKSB7Ci0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1BbGwsCi0gICAgVGVzdFBy
b3RvY29sUGxhdGZvcm1HZW5lcmljLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TLAotICAg
IFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1MsCi19OwotCi0KLQotCi0KLUBwcm90b2NvbCBUZXN0
UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyIDxOU09iamVjdD4KLUBvcHRpb25hbAotLSAodm9p
ZClDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJv
ckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKSh2b2lkKSlzdWNjZXNzQ2FsbGJhY2s7
Ci1AZW5kCi0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVy
ZmFjZSBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgOiBOU09iamVjdAot
LSAodm9pZClFdmVudDsKLUBlbmQKLQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9j
b2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFp
bi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29s
SlNPTk9iamVjdFByaXZhdGUuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxl
SW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotQGlu
dGVyZmFjZSBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKFByaXZhdGUp
Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihJbnNwZWN0b3I6OkF1Z21lbnRh
YmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcjsKLUBlbmQKLQotCi0jIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZl
bnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2wuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMu
aD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVt
VHlwZT4KLU9wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0
cmluZyYgdmFsdWUpOwotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3Rv
Y29sUGxhdGZvcm0gdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0
UHJvdG9jb2xQbGF0Zm9ybUFsbDoKLSAgICAgICAgcmV0dXJuICJhbGwiX3M7Ci0gICAgY2FzZSBU
ZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM6Ci0gICAgICAgIHJldHVybiAiZ2VuZXJpYyJfczsK
LSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOgotICAgICAgICByZXR1cm4gImlvcyJf
czsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M6Ci0gICAgICAgIHJldHVybiAi
bWFjb3MiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFBy
b3RvY29sUGxhdGZvcm0+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQot
ewotICAgIGlmICh2YWx1ZSA9PSAiYWxsIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBs
YXRmb3JtQWxsOwotICAgIGlmICh2YWx1ZSA9PSAiZ2VuZXJpYyIpCi0gICAgICAgIHJldHVybiBU
ZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM7Ci0gICAgaWYgKHZhbHVlID09ICJpb3MiKQotICAg
ICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1JT1M7Ci0gICAgaWYgKHZhbHVlID09ICJt
YWNvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOwotICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlw
ZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBv
cnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKLSNpbXBvcnQgPFdlYklu
c3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0KLXVzaW5nIG5hbWVzcGFj
ZSBJbnNwZWN0b3I7Ci0KLQotCi0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudC10YXJnZXRUeXBlLW1hdGNoaW5n
LWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBv
cnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9y
L1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLSNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25z
Lmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVj
dG9yOwotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4
cGVjdGVkL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3Rl
ZC9ldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0CmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA4YTk1YmE1NThjZi4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQv
ZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uLXJlc3VsdAorKysgL2Rldi9udWxs
CkBAIC0xLDEyMTcgKzAsMCBAQAotIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21t
YW5kcy5qcwotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9w
dGlvbmFsLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0vLyBEYXRhYmFzZQotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigi
RGF0YWJhc2UiLCBudWxsKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudCgiRGF0YWJh
c2UuZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyIsIG51bGwsIFsiY29sdW1uTmFtZXMiLCAi
bm90ZXMiLCAidGltZXN0YW1wIiwgInZhbHVlcyIsICJwYXlsb2FkIiwgInNxbEVycm9yIiwgInNj
cmVlbkNvbG9yIiwgImFsdGVybmF0ZUNvbG9ycyIsICJwcmludENvbG9yIl0pOwotSW5zcGVjdG9y
QmFja2VuZC5yZWdpc3RlckV2ZW50KCJEYXRhYmFzZS5kaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFt
ZXRlcnMiLCBudWxsLCBbImNvbHVtbk5hbWVzIiwgIm5vdGVzIiwgInRpbWVzdGFtcCIsICJ2YWx1
ZXMiLCAicGF5bG9hZCIsICJzcWxFcnJvciIsICJzY3JlZW5Db2xvciIsICJhbHRlcm5hdGVDb2xv
cnMiLCAicHJpbnRDb2xvciJdKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEYXRhYmFzZURp
c3BhdGNoZXIgPSBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRGlzcGF0Y2hlci5iaW5kKEluc3Bl
Y3RvckJhY2tlbmQsICJEYXRhYmFzZSIpOwotSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFp
bigiRGF0YWJhc2UiLCBudWxsKTsKLSMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1h
bmRzLmpzCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJz
LmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25h
bC1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCi0jaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotCi1uYW1lc3BhY2UgSW5zcGVj
dG9yIHsKLQotY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAg
IHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRp
c3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0K
LSAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVy
biBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Ci1wcml2YXRlOgotICAgIFJlZlB0cjxCYWNr
ZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKLX07Ci0KLQotCi0KLX0gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgotCi0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCi0jIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hl
cnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVy
cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFn
bWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10eXBlZGVmIFN0
cmluZyBFcnJvclN0cmluZzsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVu
ZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
ZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJU
ZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5j
bHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jaW5jbHVk
ZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgotI2VuZGlmCi0KLW5hbWVzcGFj
ZSBJbnNwZWN0b3IgewotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQg
RmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RG
cm9udGVuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBl
dmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJv
dG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEZy
b250ZW5kUm91dGVyOwotCi1jbGFzcyBEYXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hlciB7Ci0gICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgRGF0YWJhc2VGcm9udGVuZERp
c3BhdGNoZXIoRnJvbnRlbmRSb3V0ZXImIGZyb250ZW5kUm91dGVyKSA6IG1fZnJvbnRlbmRSb3V0
ZXIoZnJvbnRlbmRSb3V0ZXIpIHsgfQotICAgIHZvaWQgZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1l
dGVycyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiBjb2x1bW5OYW1lcywgY29uc3QgU3Ry
aW5nKiBub3RlcywgY29uc3QgZG91YmxlKiB0aW1lc3RhbXAsIFJlZlB0cjxKU09OOjpPYmplY3Q+
IHZhbHVlcywgUmVmUHRyPEpTT046OlZhbHVlPiBwYXlsb2FkLCBSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBzcWxFcnJvciwgY29uc3QgU3RyaW5nKiBzY3JlZW5D
b2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IGFs
dGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nKiBwcmludENvbG9yKTsKLSAgICB2b2lkIGRpZEV4
ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiBj
b2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUmVmUHRy
PEpTT046Ok9iamVjdD4gdmFsdWVzLCBSZWZQdHI8SlNPTjo6VmFsdWU+IHBheWxvYWQsIFJlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVycm9yLCBjb25zdCBT
dHJpbmcmIHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6
OkNvbG9yTGlzdD4gYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcmIHByaW50Q29sb3IpOwot
cHJpdmF0ZToKLSAgICBGcm9udGVuZFJvdXRlciYgbV9mcm9udGVuZFJvdXRlcjsKLX07Ci0KLX0g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRj
aGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJh
bWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgi
Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0K
LXZvaWQgRGF0YWJhc2VGcm9udGVuZERpc3BhdGNoZXI6OmRpZEV4ZWN1dGVPcHRpb25hbFBhcmFt
ZXRlcnMoUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gY29sdW1uTmFtZXMsIGNvbnN0IFN0
cmluZyogbm90ZXMsIGNvbnN0IGRvdWJsZSogdGltZXN0YW1wLCBSZWZQdHI8SlNPTjo6T2JqZWN0
PiB2YWx1ZXMsIFJlZlB0cjxKU09OOjpWYWx1ZT4gcGF5bG9hZCwgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gc3FsRXJyb3IsIGNvbnN0IFN0cmluZyogc2NyZWVu
Q29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiBh
bHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyogcHJpbnRDb2xvcikKLXsKLSAgICBSZWY8SlNP
Tjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNv
bk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRGF0YWJhc2UuZGlkRXhlY3V0ZU9wdGlv
bmFsUGFyYW1ldGVycyJfcyk7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcGFyYW1zT2JqZWN0ID0g
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBpZiAoY29sdW1uTmFtZXMpCi0gICAgICAgIHBh
cmFtc09iamVjdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBjb2x1bW5OYW1lcyk7Ci0gICAg
aWYgKG5vdGVzKQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygibm90ZXMiX3MsICpu
b3Rlcyk7Ci0gICAgaWYgKHRpbWVzdGFtcCkKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXREb3Vi
bGUoInRpbWVzdGFtcCJfcywgKnRpbWVzdGFtcCk7Ci0gICAgaWYgKHZhbHVlcykKLSAgICAgICAg
cGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgdmFsdWVzKTsKLSAgICBpZiAocGF5
bG9hZCkKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgKnBheWxv
YWQpOwotICAgIGlmIChzcWxFcnJvcikKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3Qo
InNxbEVycm9yIl9zLCBzcWxFcnJvcik7Ci0gICAgaWYgKHNjcmVlbkNvbG9yKQotICAgICAgICBw
YXJhbXNPYmplY3QtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsICpzY3JlZW5Db2xvcik7Ci0g
ICAgaWYgKGFsdGVybmF0ZUNvbG9ycykKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgi
YWx0ZXJuYXRlQ29sb3JzIl9zLCBhbHRlcm5hdGVDb2xvcnMpOwotICAgIGlmIChwcmludENvbG9y
KQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgKnByaW50
Q29sb3IpOwotICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyJfcywgV1RGTW92ZShw
YXJhbXNPYmplY3QpKTsKLQotICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNz
YWdlLT50b0pTT05TdHJpbmcoKSk7Ci19Ci0KLXZvaWQgRGF0YWJhc2VGcm9udGVuZERpc3BhdGNo
ZXI6OmRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxT
dHJpbmc+PiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFt
cCwgUmVmUHRyPEpTT046Ok9iamVjdD4gdmFsdWVzLCBSZWZQdHI8SlNPTjo6VmFsdWU+IHBheWxv
YWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVycm9y
LCBjb25zdCBTdHJpbmcmIHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6OkNvbG9yTGlzdD4gYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcmIHByaW50
Q29sb3IpCi17Ci0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmpl
Y3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRh
dGFiYXNlLmRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyJfcyk7Ci0gICAgUmVmPEpTT046
Ok9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBwYXJh
bXNPYmplY3QtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgY29sdW1uTmFtZXMpOwotICAgIHBh
cmFtc09iamVjdC0+c2V0U3RyaW5nKCJub3RlcyJfcywgbm90ZXMpOwotICAgIHBhcmFtc09iamVj
dC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIHRpbWVzdGFtcCk7Ci0gICAgcGFyYW1zT2JqZWN0
LT5zZXRPYmplY3QoInZhbHVlcyJfcywgdmFsdWVzKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldFZh
bHVlKCJwYXlsb2FkIl9zLCBwYXlsb2FkKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgi
c3FsRXJyb3IiX3MsIHNxbEVycm9yKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygic2Ny
ZWVuQ29sb3IiX3MsIHNjcmVlbkNvbG9yKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldEFycmF5KCJh
bHRlcm5hdGVDb2xvcnMiX3MsIGFsdGVybmF0ZUNvbG9ycyk7Ci0gICAgcGFyYW1zT2JqZWN0LT5z
ZXRTdHJpbmcoInByaW50Q29sb3IiX3MsIHByaW50Q29sb3IpOwotICAgIGpzb25NZXNzYWdlLT5z
ZXRPYmplY3QoInBhcmFtcyJfcywgV1RGTW92ZShwYXJhbXNPYmplY3QpKTsKLQotICAgIG1fZnJv
bnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERp
c3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFy
YW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9j
b2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNw
ZWN0b3IgewotCi0KLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLS8vIEZvcndhcmQgZGVj
bGFyYXRpb25zLgotbmFtZXNwYWNlIERhdGFiYXNlIHsKLWNsYXNzIEVycm9yOwotfSAvLyBEYXRh
YmFzZQotLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgotCi0KLS8vIFR5cGVkZWZzLgot
bmFtZXNwYWNlIERhdGFiYXNlIHsKLS8qIFVuaXF1ZSBpZGVudGlmaWVyIG9mIERhdGFiYXNlIG9i
amVjdC4gKi8KLXR5cGVkZWYgU3RyaW5nIERhdGFiYXNlSWQ7Ci10eXBlZGVmIFN0cmluZyBQcmlt
YXJ5Q29sb3JzOwotdHlwZWRlZiBKU09OOjpBcnJheU9mPFN0cmluZz4gQ29sb3JMaXN0OwotfSAv
LyBEYXRhYmFzZQotLy8gRW5kIG9mIHR5cGVkZWZzLgotCi1uYW1lc3BhY2UgRGF0YWJhc2Ugewot
LyogRGF0YWJhc2UgZXJyb3IuICovCi1jbGFzcyBFcnJvciA6IHB1YmxpYyBKU09OOjpPYmplY3RC
YXNlIHsKLXB1YmxpYzoKLSAgICBlbnVtIHsKLSAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAotICAg
ICAgICBNZXNzYWdlU2V0ID0gMSA8PCAwLAotICAgICAgICBDb2RlU2V0ID0gMSA8PCAxLAotICAg
ICAgICBBbGxGaWVsZHNTZXQgPSAoTWVzc2FnZVNldCB8IENvZGVTZXQpCi0gICAgfTsKLQotICAg
IHRlbXBsYXRlPGludCBTVEFURT4KLSAgICBjbGFzcyBCdWlsZGVyIHsKLSAgICBwcml2YXRlOgot
ICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBtX3Jlc3VsdDsKLQotICAgICAgICB0ZW1wbGF0
ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNU
RVA+Kj4odGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyKFJlZjwvKkVycm9yKi9K
U09OOjpPYmplY3Q+JiYgb2JqZWN0KQotICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9i
amVjdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5v
RmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwotICAgICAgICB9
Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBFcnJvcjsKLSAgICBwdWJsaWM6Ci0KLSAgICAgICAgQnVp
bGRlcjxTVEFURSB8IE1lc3NhZ2VTZXQ+JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYgdmFsdWUp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNZXNzYWdl
U2V0KSwgcHJvcGVydHlfbWVzc2FnZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0U3RyaW5nKCJtZXNzYWdlIl9zLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2Fz
dFN0YXRlPE1lc3NhZ2VTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgQ29kZVNldD4mIHNldENvZGUoaW50IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBD
T01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29kZVNldCksIHByb3BlcnR5X2NvZGVfYWxyZWFkeV9z
ZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldEludGVnZXIoImNvZGUiX3MsIHZhbHVlKTsK
LSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29kZVNldD4oKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIFJlZjxFcnJvcj4gcmVsZWFzZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7Ci0g
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoRXJyb3IpID09IHNpemVvZihKU09OOjpP
YmplY3QpLCBjYW5ub3RfY2FzdCk7Ci0KLSAgICAgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IGpz
b25SZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOwotICAgICAgICAgICAgYXV0byBy
ZXN1bHQgPSBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxFcnJvcj4qPigmanNvblJlc3Vs
dCkpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgIH07Ci0KLSAg
ICAvKgotICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKLSAgICAgKiBSZWY8RXJyb3I+IHJl
c3VsdCA9IEVycm9yOjpjcmVhdGUoKQotICAgICAqICAgICAuc2V0TWVzc2FnZSguLi4pCi0gICAg
ICogICAgIC5zZXRDb2RlKC4uLikKLSAgICAgKiAgICAgLnJlbGVhc2UoKTsKLSAgICAgKi8KLSAg
ICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKLSAgICB9
Ci19OwotCi19IC8vIERhdGFiYXNlCi0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0
cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMu
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotCi0jaW5jbHVk
ZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1l
c3BhY2UgSW5zcGVjdG9yIHsKLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLX0gLy8gbmFt
ZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0
ci5oPgotCi0KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgK
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFt
ZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0j
aW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVy
cy5oIgotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgot
Ci1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8V2ViSW5zcGVj
dG9yL1Rlc3RQcm90b2NvbC5oPgotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVs
dCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0Ci1A
cHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWlu
RXZlbnREaXNwYXRjaGVyICpkYXRhYmFzZUV2ZW50RGlzcGF0Y2hlcjsKLUBlbmQKLQotCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25m
aWd1cmF0aW9uLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW1wb3J0
ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRD
b3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0KLXVzaW5nIG5hbWVz
cGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0
aW9uCi17Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsK
LSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkV2ZW50RGlzcGF0Y2hlciAqX2RhdGFiYXNl
RXZlbnREaXNwYXRjaGVyOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVy
OihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBzZWxm
ID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAg
ICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAg
IHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBbX2RhdGFiYXNlRXZl
bnREaXNwYXRjaGVyIHJlbGVhc2VdOwotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAoVGVz
dFByb3RvY29sRGF0YWJhc2VEb21haW5FdmVudERpc3BhdGNoZXIgKilkYXRhYmFzZUV2ZW50RGlz
cGF0Y2hlcgotewotICAgIGlmICghX2RhdGFiYXNlRXZlbnREaXNwYXRjaGVyKQotICAgICAgICBf
ZGF0YWJhc2VFdmVudERpc3BhdGNoZXIgPSBbW1Rlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluRXZl
bnREaXNwYXRjaGVyIGFsbG9jXSBpbml0V2l0aENvbnRyb2xsZXI6X2NvbnRyb2xsZXJdOwotICAg
IHJldHVybiBfZGF0YWJhc2VFdmVudERpc3BhdGNoZXI7Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50
ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1w
b3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1A
aW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5FdmVudERpc3BhdGNoZXIK
LXsKLSAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotfQot
Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3Rv
ckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAg
IGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7
Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQotCi0t
ICh2b2lkKWRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnNXaXRoQ29sdW1uTmFtZXM6KE5TQXJy
YXkvKjxOU1N0cmluZz4qLyAqKiljb2x1bW5OYW1lcyBub3RlczooTlNTdHJpbmcgKiopbm90ZXMg
dGltZXN0YW1wOihkb3VibGUgKil0aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmpl
Y3QgKiopdmFsdWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKilwYXlsb2FkIHNx
bEVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqKXNxbEVycm9yIHNjcmVlbkNvbG9y
OihOU1N0cmluZyAqKilzY3JlZW5Db2xvciBhbHRlcm5hdGVDb2xvcnM6KE5TQXJyYXkvKjxOU1N0
cmluZz4qLyAqKilhbHRlcm5hdGVDb2xvcnMgcHJpbnRDb2xvcjooTlNTdHJpbmcgKiopcHJpbnRD
b2xvcgotewotICAgIGNvbnN0IEZyb250ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29udHJvbGxlci0+
ZnJvbnRlbmRSb3V0ZXIoKTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFM
X1BBUkFNRVRFUihjb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOwotICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihub3RlcywgQCJub3RlcyIpOwotICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUih2YWx1ZXMsIEAidmFsdWVz
Iik7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHBheWxv
YWQsIEAicGF5bG9hZCIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BB
UkFNRVRFUihzcWxFcnJvciwgQCJzcWxFcnJvciIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
QkFEX09QVElPTkFMX1BBUkFNRVRFUihzY3JlZW5Db2xvciwgQCJzY3JlZW5Db2xvciIpOwotICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihhbHRlcm5hdGVDb2xv
cnMsIEAiYWx0ZXJuYXRlQ29sb3JzIik7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BU
SU9OQUxfUEFSQU1FVEVSKHByaW50Q29sb3IsIEAicHJpbnRDb2xvciIpOwotCi0gICAgUmVmPEpT
T046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpz
b25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRhdGFiYXNlLmRpZEV4ZWN1dGVPcHRp
b25hbFBhcmFtZXRlcnMiX3MpOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHBhcmFtc09iamVjdCA9
IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgaWYgKGNvbHVtbk5hbWVzKQotICAgICAgICBw
YXJhbXNPYmplY3QtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgdG9KU09OU3RyaW5nQXJyYXko
KCpjb2x1bW5OYW1lcykpKTsKLSAgICBpZiAobm90ZXMpCi0gICAgICAgIHBhcmFtc09iamVjdC0+
c2V0U3RyaW5nKCJub3RlcyJfcywgKCpub3RlcykpOwotICAgIGlmICh0aW1lc3RhbXApCi0gICAg
ICAgIHBhcmFtc09iamVjdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICgqdGltZXN0YW1wKSk7
Ci0gICAgaWYgKHZhbHVlcykKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoInZhbHVl
cyJfcywgWygqdmFsdWVzKSB0b0pTT05PYmplY3RdKTsKLSAgICBpZiAocGF5bG9hZCkKLSAgICAg
ICAgcGFyYW1zT2JqZWN0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgWygqcGF5bG9hZCkgdG9KU09O
T2JqZWN0XSk7Ci0gICAgaWYgKHNxbEVycm9yKQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldE9i
amVjdCgic3FsRXJyb3IiX3MsIFsoKnNxbEVycm9yKSB0b0pTT05PYmplY3RdKTsKLSAgICBpZiAo
c2NyZWVuQ29sb3IpCi0gICAgICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xv
ciJfcywgKCpzY3JlZW5Db2xvcikpOwotICAgIGlmIChhbHRlcm5hdGVDb2xvcnMpCi0gICAgICAg
IHBhcmFtc09iamVjdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5n
QXJyYXkoKCphbHRlcm5hdGVDb2xvcnMpKSk7Ci0gICAgaWYgKHByaW50Q29sb3IpCi0gICAgICAg
IHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCAoKnByaW50Q29sb3IpKTsK
LSAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiX3MsIFdURk1vdmUocGFyYW1zT2Jq
ZWN0KSk7Ci0gICAgcm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkp
OwotfQotCi0tICh2b2lkKWRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1dpdGhDb2x1bW5O
YW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMgbm90ZXM6KE5TU3RyaW5n
ICopbm90ZXMgdGltZXN0YW1wOihkb3VibGUpdGltZXN0YW1wIHZhbHVlczooUldJUHJvdG9jb2xK
U09OT2JqZWN0ICopdmFsdWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxv
YWQgc3FsRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKilzcWxFcnJvciBzY3JlZW5D
b2xvcjooTlNTdHJpbmcgKilzY3JlZW5Db2xvciBhbHRlcm5hdGVDb2xvcnM6KE5TQXJyYXkvKjxO
U1N0cmluZz4qLyAqKWFsdGVybmF0ZUNvbG9ycyBwcmludENvbG9yOihOU1N0cmluZyAqKXByaW50
Q29sb3IKLXsKLSAgICBjb25zdCBGcm9udGVuZFJvdXRlciYgcm91dGVyID0gX2NvbnRyb2xsZXIt
PmZyb250ZW5kUm91dGVyKCk7Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BB
UkFNRVRFUihjb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOwotICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG5vdGVzLCBAIm5vdGVzIik7Ci0gICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIodmFsdWVzLCBAInZhbHVlcyIpOwotICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHBheWxvYWQsIEAicGF5bG9hZCIp
OwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHNxbEVycm9yLCBA
InNxbEVycm9yIik7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIo
c2NyZWVuQ29sb3IsIEAic2NyZWVuQ29sb3IiKTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JF
UVVJUkVEX1BBUkFNRVRFUihhbHRlcm5hdGVDb2xvcnMsIEAiYWx0ZXJuYXRlQ29sb3JzIik7Ci0g
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIocHJpbnRDb2xvciwgQCJw
cmludENvbG9yIik7Ci0KLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9z
LCAiRGF0YWJhc2UuZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIl9zKTsKLSAgICBSZWY8
SlNPTjo6T2JqZWN0PiBwYXJhbXNPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAg
IHBhcmFtc09iamVjdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB0b0pTT05TdHJpbmdBcnJh
eShjb2x1bW5OYW1lcykpOwotICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJub3RlcyJfcywg
bm90ZXMpOwotICAgIHBhcmFtc09iamVjdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIHRpbWVz
dGFtcCk7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgW3ZhbHVlcyB0
b0pTT05PYmplY3RdKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBb
cGF5bG9hZCB0b0pTT05PYmplY3RdKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgic3Fs
RXJyb3IiX3MsIFtzcWxFcnJvciB0b0pTT05PYmplY3RdKTsKLSAgICBwYXJhbXNPYmplY3QtPnNl
dFN0cmluZygic2NyZWVuQ29sb3IiX3MsIHNjcmVlbkNvbG9yKTsKLSAgICBwYXJhbXNPYmplY3Qt
PnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KGFsdGVybmF0
ZUNvbG9ycykpOwotICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCBw
cmludENvbG9yKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiX3MsIFdURk1v
dmUocGFyYW1zT2JqZWN0KSk7Ci0gICAgcm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9K
U09OU3RyaW5nKCkpOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xF
dmVudERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFt
ZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0j
aW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9y
L1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgotCi0KLUBjbGFzcyBUZXN0UHJvdG9jb2xEYXRhYmFz
ZUVycm9yOwotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xQbGF0Zm9y
bSkgewotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsLAotICAgIFRlc3RQcm90b2NvbFBsYXRm
b3JtR2VuZXJpYywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUywKLSAgICBUZXN0UHJvdG9j
b2xQbGF0Zm9ybU1hY09TLAotfTsKLQotCi0KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAo
ImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgOiBSV0lQ
cm90b2NvbEpTT05PYmplY3QKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGlj
dGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkOwotLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7Ci0t
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZToo
aW50KWNvZGU7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNT
dHJpbmcgKm1lc3NhZ2U7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNz
aWduKSBpbnQgY29kZTsKLUBlbmQKLQotCi0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJk
ZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkV2ZW50RGlz
cGF0Y2hlciA6IE5TT2JqZWN0Ci0tICh2b2lkKWRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnNX
aXRoQ29sdW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKiljb2x1bW5OYW1lcyBub3Rl
czooTlNTdHJpbmcgKiopbm90ZXMgdGltZXN0YW1wOihkb3VibGUgKil0aW1lc3RhbXAgdmFsdWVz
OihSV0lQcm90b2NvbEpTT05PYmplY3QgKiopdmFsdWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNP
Tk9iamVjdCAqKilwYXlsb2FkIHNxbEVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoq
KXNxbEVycm9yIHNjcmVlbkNvbG9yOihOU1N0cmluZyAqKilzY3JlZW5Db2xvciBhbHRlcm5hdGVD
b2xvcnM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKilhbHRlcm5hdGVDb2xvcnMgcHJpbnRDb2xv
cjooTlNTdHJpbmcgKiopcHJpbnRDb2xvcjsKLS0gKHZvaWQpZGlkRXhlY3V0ZU5vT3B0aW9uYWxQ
YXJhbWV0ZXJzV2l0aENvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5O
YW1lcyBub3RlczooTlNTdHJpbmcgKilub3RlcyB0aW1lc3RhbXA6KGRvdWJsZSl0aW1lc3RhbXAg
dmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKil2YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9j
b2xKU09OT2JqZWN0ICopcGF5bG9hZCBzcWxFcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJv
ciAqKXNxbEVycm9yIHNjcmVlbkNvbG9yOihOU1N0cmluZyAqKXNjcmVlbkNvbG9yIGFsdGVybmF0
ZUNvbG9yczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopYWx0ZXJuYXRlQ29sb3JzIHByaW50Q29s
b3I6KE5TU3RyaW5nICopcHJpbnRDb2xvcjsKLUBlbmQKLQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0
b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+Ci0KLSMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFs
LmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25h
bC1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09O
T2JqZWN0UHJpdmF0ZS5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNw
ZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi1AaW50ZXJm
YWNlIFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluRXZlbnREaXNwYXRjaGVyIChQcml2YXRlKQot
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooSW5zcGVjdG9yOjpBdWdtZW50YWJs
ZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXI7Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50
cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgPFdl
Ykluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KLQotbmFtZXNwYWNlIElu
c3BlY3RvciB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KLU9wdGlvbmFsPE9i
akNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOwotCi1p
bmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sUGxhdGZvcm0gdmFsdWUp
Ci17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFs
bDoKLSAgICAgICAgcmV0dXJuICJhbGwiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9y
bUdlbmVyaWM6Ci0gICAgICAgIHJldHVybiAiZ2VuZXJpYyJfczsKLSAgICBjYXNlIFRlc3RQcm90
b2NvbFBsYXRmb3JtSU9TOgotICAgICAgICByZXR1cm4gImlvcyJfczsKLSAgICBjYXNlIFRlc3RQ
cm90b2NvbFBsYXRmb3JtTWFjT1M6Ci0gICAgICAgIHJldHVybiAibWFjb3MiX3M7Ci0gICAgfQot
fQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sUGxhdGZvcm0+IGZy
b21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9
PSAiYWxsIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOwotICAgIGlm
ICh2YWx1ZSA9PSAiZ2VuZXJpYyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9y
bUdlbmVyaWM7Ci0gICAgaWYgKHZhbHVlID09ICJpb3MiKQotICAgICAgICByZXR1cm4gVGVzdFBy
b3RvY29sUGxhdGZvcm1JT1M7Ci0gICAgaWYgKHZhbHVlID09ICJtYWNvcyIpCi0gICAgICAgIHJl
dHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
Ci19Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZl
bnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5
cGVQYXJzZXIuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQ
cml2YXRlLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbnRlcmZhY2UgVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChEYXRhYmFzZURvbWFpbikKLQotKyAodm9pZClfcGFy
c2VEYXRhYmFzZUlkOihOU1N0cmluZyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9h
ZDsKLSsgKHZvaWQpX3BhcnNlUHJpbWFyeUNvbG9yczooTlNTdHJpbmcgKiopb3V0VmFsdWUgZnJv
bVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZUNvbG9yTGlzdDooTlNBcnJheS8q
PE5TU3RyaW5nPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotKyAodm9p
ZClfcGFyc2VFcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKilvdXRWYWx1ZSBmcm9t
UGF5bG9hZDooaWQpcGF5bG9hZDsKLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zIChEYXRhYmFzZURvbWFpbikKLQotKyAodm9pZClfcGFyc2VEYXRh
YmFzZUlkOihOU1N0cmluZyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewot
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TU3RyaW5nIGNsYXNz
XSk7Ci0gICAgKm91dFZhbHVlID0gKE5TU3RyaW5nICopcGF5bG9hZDsKLX0KLQotKyAodm9pZClf
cGFyc2VQcmltYXJ5Q29sb3JzOihOU1N0cmluZyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQp
cGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05T
U3RyaW5nIGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gKE5TU3RyaW5nICopcGF5bG9hZDsKLX0K
LQotKyAodm9pZClfcGFyc2VDb2xvckxpc3Q6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKilvdXRW
YWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
QkFEX1RZUEUocGF5bG9hZCwgW05TQXJyYXkvKjxOU1N0cmluZz4qLyBjbGFzc10pOwotICAgICpv
dXRWYWx1ZSA9IChOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilwYXlsb2FkOwotfQotCi0rICh2b2lk
KV9wYXJzZUVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqKW91dFZhbHVlIGZyb21Q
YXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShw
YXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gW1tUZXN0UHJv
dG9jb2xEYXRhYmFzZUVycm9yIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07Ci19Ci0K
LUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQot
Ci0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFBy
b3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
LmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5o
PgotI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+
Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotQGltcGxlbWVudGF0aW9uIFRlc3RQ
cm90b2NvbERhdGFiYXNlRXJyb3IKLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoo
bm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZAotewotICAgIGlm
ICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AibWVzc2FnZSJdLCBA
Im1lc3NhZ2UiKTsKLSAgICBzZWxmLm1lc3NhZ2UgPSBwYXlsb2FkW0AibWVzc2FnZSJdOwotCi0g
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiY29kZSJd
LCBAImNvZGUiKTsKLSAgICBzZWxmLmNvZGUgPSBbcGF5bG9hZFtAImNvZGUiXSBpbnRlZ2VyVmFs
dWVdOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90
b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopb2JqZWN0Ci17Ci0gICAgaWYgKCEo
c2VsZiA9IFtzdXBlciBpbml0V2l0aEpTT05PYmplY3Q6W29iamVjdCB0b0pTT05PYmplY3RdLmdl
dCgpXSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlIGNvZGU6KGlu
dCljb2RlCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJldHVy
biBuaWw7Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKG1lc3Nh
Z2UsIEAibWVzc2FnZSIpOwotCi0gICAgc2VsZi5tZXNzYWdlID0gbWVzc2FnZTsKLSAgICBzZWxm
LmNvZGUgPSBjb2RlOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpc2V0TWVzc2Fn
ZTooTlNTdHJpbmcgKiltZXNzYWdlCi17Ci0gICAgW3N1cGVyIHNldFN0cmluZzptZXNzYWdlIGZv
cktleTpAIm1lc3NhZ2UiXTsKLX0KLQotLSAoTlNTdHJpbmcgKiltZXNzYWdlCi17Ci0gICAgcmV0
dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJtZXNzYWdlIl07Ci19Ci0KLS0gKHZvaWQpc2V0Q29k
ZTooaW50KWNvZGUKLXsKLSAgICBbc3VwZXIgc2V0SW50ZWdlcjpjb2RlIGZvcktleTpAImNvZGUi
XTsKLX0KLQotLSAoaW50KWNvZGUKLXsKLSAgICByZXR1cm4gW3N1cGVyIGludGVnZXJGb3JLZXk6
QCJjb2RlIl07Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVz
Lm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGlu
Zy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tY29tbWFu
ZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLWVycm9yCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMTMwYWQ3MGM0MC4uMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMv
ZXhwZWN0ZWQvZmFpbC1vbi1jb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVn
Z2FibGVUeXBlLmpzb24tZXJyb3IKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1FUlJPUjog
TWFsZm9ybWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9uOiBkb21haW4gRG9tYWluIGhhcyBhbiBpdGVt
IGluIHRhcmdldFR5cGVzICJbdSd3b3JrZXInXSIgdGhhdCBpcyBub3Qgc3VwcG9ydGVkIGJ5IGFu
eSB2YWx1ZSBpbiBkZWJ1Z2dhYmxlVHlwZXMgIlt1J2phdmFzY3JpcHQnXSIuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9l
eHBlY3RlZC9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlwZXMtdHlwZS5qc29uLWVycm9yIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0
ZWQvZmFpbC1vbi1jb21tYW5kLXRhcmdldFR5cGVzLXR5cGUuanNvbi1lcnJvcgpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggOTlmNWUxYTRhOGUuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVk
L2ZhaWwtb24tY29tbWFuZC10YXJnZXRUeXBlcy10eXBlLmpzb24tZXJyb3IKKysrIC9kZXYvbnVs
bApAQCAtMSArMCwwIEBACi1FUlJPUjogTWFsZm9ybWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9uOiB0
YXJnZXRUeXBlcyBsaXN0IGZvciBjb21tYW5kIFBhZ2VPbmx5IGlzIG5vdCBhbiBhcnJheQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1jb21tYW5kLXRhcmdldFR5cGVzLXZhbHVlLmpzb24tZXJy
b3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJp
Yy9leHBlY3RlZC9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlwZXMtdmFsdWUuanNvbi1lcnJvcgpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjFhMzY1Njk5MjYuLjAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2V4cGVjdGVkL2ZhaWwtb24tY29tbWFuZC10YXJnZXRUeXBlcy12YWx1ZS5qc29uLWVycm9yCisr
KyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotRVJST1I6IE1hbGZvcm1lZCBkb21haW4gc3BlY2lm
aWNhdGlvbjogdGFyZ2V0VHlwZXMgbGlzdCBmb3IgY29tbWFuZCBQYWdlT25seSBpcyBhbiB1bnN1
cHBvcnRlZCBzdHJpbmcuIFdhczogIlt1J3BhZ2VlJ10iLCBBbGxvd2VkIHZhbHVlczogc2Vydmlj
ZS13b3JrZXIsIGphdmFzY3JpcHQsIHdvcmtlciwgcGFnZSwgd2ViLXBhZ2UKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4
cGVjdGVkL2ZhaWwtb24tY29tbWFuZC13aXRoLWludmFsaWQtcGxhdGZvcm0uanNvbi1lcnJvciBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4
cGVjdGVkL2ZhaWwtb24tY29tbWFuZC13aXRoLWludmFsaWQtcGxhdGZvcm0uanNvbi1lcnJvcgpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWM2MzZjNTRiN2MuLjAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2V4cGVjdGVkL2ZhaWwtb24tY29tbWFuZC13aXRoLWludmFsaWQtcGxhdGZvcm0uanNvbi1lcnJv
cgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUVSUk9SOiBVbmtub3duIHBsYXRmb3JtOiBp
bnZhbGlkCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMt
dHlwZS5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4tZGVidWdnYWJsZVR5cGVzLXR5
cGUuanNvbi1lcnJvcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmI4OThiYTdiZTcu
LjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZG9tYWluLWRlYnVnZ2FibGVUeXBlcy10
eXBlLmpzb24tZXJyb3IKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1FUlJPUjogTWFsZm9y
bWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9uOiBkZWJ1Z2dhYmxlVHlwZXMgZm9yIGRvbWFpbiBXZWJP
bmx5IGlzIG5vdCBhbiBhcnJheQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4tZGVi
dWdnYWJsZVR5cGVzLXZhbHVlLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWRvbWFpbi1kZWJ1
Z2dhYmxlVHlwZXMtdmFsdWUuanNvbi1lcnJvcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggYmY3MWQ0NzBjYmQuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZG9tYWluLWRl
YnVnZ2FibGVUeXBlcy12YWx1ZS5qc29uLWVycm9yCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBA
QAotRVJST1I6IE1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjogZGVidWdnYWJsZVR5cGVz
IGZvciBkb21haW4gV2ViT25seSBpcyBhbiB1bnN1cHBvcnRlZCBzdHJpbmcuIFdhczogIlt1J3dl
YmInXSIsIEFsbG93ZWQgdmFsdWVzOiBzZXJ2aWNlLXdvcmtlciwgamF2YXNjcmlwdCwgcGFnZSwg
d2ViLXBhZ2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZG9tYWluLXRhcmdldFR5cGUtbWF0
Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWRv
bWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLWVycm9y
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NjdlMzUwMDg5OC4uMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVy
aWMvZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVi
dWdnYWJsZVR5cGUuanNvbi1lcnJvcgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUVSUk9S
OiBNYWxmb3JtZWQgZG9tYWluIHNwZWNpZmljYXRpb246IGNvbW1hbmQgQ29tbWFuZCBoYXMgYW4g
aXRlbSBpbiB0YXJnZXRUeXBlcyAiW3Und29ya2VyJ10iIHRoYXQgaXMgbm90IHN1cHBvcnRlZCBi
eSBhbnkgdmFsdWUgaW4gZGVidWdnYWJsZVR5cGVzICJbdSdqYXZhc2NyaXB0J10iLgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVy
aWMvZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZXMtdHlwZS5qc29uLWVycm9yIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhw
ZWN0ZWQvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZXMtdHlwZS5qc29uLWVycm9yCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOWEzNTkzM2EzNS4uMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0
ZWQvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZXMtdHlwZS5qc29uLWVycm9yCisrKyAvZGV2L251
bGwKQEAgLTEgKzAsMCBAQAotRVJST1I6IE1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjog
dGFyZ2V0VHlwZXMgZm9yIGRvbWFpbiBQYWdlT25seSBpcyBub3QgYW4gYXJyYXkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2V4cGVjdGVkL2ZhaWwtb24tZG9tYWluLXRhcmdldFR5cGVzLXZhbHVlLmpzb24tZXJyb3IgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBl
Y3RlZC9mYWlsLW9uLWRvbWFpbi10YXJnZXRUeXBlcy12YWx1ZS5qc29uLWVycm9yCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NjgwN2Y3MmZjNC4uMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0
ZWQvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZXMtdmFsdWUuanNvbi1lcnJvcgorKysgL2Rldi9u
dWxsCkBAIC0xICswLDAgQEAKLUVSUk9SOiBNYWxmb3JtZWQgZG9tYWluIHNwZWNpZmljYXRpb246
IHRhcmdldFR5cGVzIGZvciBkb21haW4gUGFnZU9ubHkgaXMgYW4gdW5zdXBwb3J0ZWQgc3RyaW5n
LiBXYXM6ICJbdSdwYWdlZSddIiwgQWxsb3dlZCB2YWx1ZXM6IHNlcnZpY2Utd29ya2VyLCBqYXZh
c2NyaXB0LCB3b3JrZXIsIHBhZ2UsIHdlYi1wYWdlCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9u
LWR1cGxpY2F0ZS1jb21tYW5kLWNhbGwtcGFyYW1ldGVyLW5hbWVzLmpzb24tZXJyb3IgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3Rl
ZC9mYWlsLW9uLWR1cGxpY2F0ZS1jb21tYW5kLWNhbGwtcGFyYW1ldGVyLW5hbWVzLmpzb24tZXJy
b3IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmNzU2ZGUzMjUwLi4wMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2Vu
ZXJpYy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS1jb21tYW5kLWNhbGwtcGFyYW1ldGVyLW5h
bWVzLmpzb24tZXJyb3IKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1FUlJPUjogTWFsZm9y
bWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9uOiBjYWxsIHBhcmFtZXRlciBsaXN0IGZvciBjb21tYW5k
IHByb2Nlc3NQb2ludHMgaGFzIGR1cGxpY2F0ZSBwYXJhbWV0ZXIgbmFtZXMKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4
cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLWNvbW1hbmQtcmV0dXJuLXBhcmFtZXRlci1uYW1lcy5q
c29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1yZXR1cm4tcGFyYW1l
dGVyLW5hbWVzLmpzb24tZXJyb3IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhMTQ4
ZmY2N2M5Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS1jb21tYW5k
LXJldHVybi1wYXJhbWV0ZXItbmFtZXMuanNvbi1lcnJvcgorKysgL2Rldi9udWxsCkBAIC0xICsw
LDAgQEAKLUVSUk9SOiBNYWxmb3JtZWQgZG9tYWluIHNwZWNpZmljYXRpb246IHJldHVybiBwYXJh
bWV0ZXIgbGlzdCBmb3IgY29tbWFuZCBwcm9jZXNzUG9pbnRzIGhhcyBkdXBsaWNhdGUgcGFyYW1l
dGVyIG5hbWVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS1ldmVudC1wYXJh
bWV0ZXItbmFtZXMuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLWV2ZW50LXBh
cmFtZXRlci1uYW1lcy5qc29uLWVycm9yCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBj
NzFiYmQyMWMyYy4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtZXZl
bnQtcGFyYW1ldGVyLW5hbWVzLmpzb24tZXJyb3IKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBA
Ci1FUlJPUjogTWFsZm9ybWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9uOiBwYXJhbWV0ZXIgbGlzdCBm
b3IgZXZlbnQgcHJvY2Vzc2VkUG9pbnRzIGhhcyBkdXBsaWNhdGUgcGFyYW1ldGVyIG5hbWVzCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLWRlY2xhcmF0aW9ucy5qc29u
LWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1kZWNsYXJhdGlvbnMuanNvbi1l
cnJvcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDQ3Y2RmOGUyOGUuLjAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLXR5cGUtZGVjbGFyYXRpb25zLmpzb24t
ZXJyb3IKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1FUlJPUjogRHVwbGljYXRlIHR5cGUg
ZGVjbGFyYXRpb246IFJ1bnRpbWUuUmVtb3RlT2JqZWN0SWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2Zh
aWwtb24tZHVwbGljYXRlLXR5cGUtbWVtYmVyLW5hbWVzLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWls
LW9uLWR1cGxpY2F0ZS10eXBlLW1lbWJlci1uYW1lcy5qc29uLWVycm9yCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBkNTM3NmE3N2E0NS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFp
bC1vbi1kdXBsaWNhdGUtdHlwZS1tZW1iZXItbmFtZXMuanNvbi1lcnJvcgorKysgL2Rldi9udWxs
CkBAIC0xICswLDAgQEAKLUVSUk9SOiBNYWxmb3JtZWQgZG9tYWluIHNwZWNpZmljYXRpb246IHR5
cGUgZGVjbGFyYXRpb24gZm9yIFBvaW50IGhhcyBkdXBsaWNhdGUgbWVtYmVyIG5hbWVzCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2Vu
ZXJpYy9leHBlY3RlZC9mYWlsLW9uLWVudW0td2l0aC1uby12YWx1ZXMuanNvbi1lcnJvciBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVj
dGVkL2ZhaWwtb24tZW51bS13aXRoLW5vLXZhbHVlcy5qc29uLWVycm9yCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAyNjU1YzJiOTA3ZS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFp
bC1vbi1lbnVtLXdpdGgtbm8tdmFsdWVzLmpzb24tZXJyb3IKKysrIC9kZXYvbnVsbApAQCAtMSAr
MCwwIEBACi1FUlJPUjogVHlwZSByZWZlcmVuY2Ugd2l0aCBlbnVtIHZhbHVlcyBtdXN0IGhhdmUg
YXQgbGVhc3Qgb25lIGVudW0gdmFsdWUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWV2ZW50
LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tZXJyb3IgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBl
Y3RlZC9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVU
eXBlLmpzb24tZXJyb3IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2NWQ3YTBkMTk2
Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGUtbWF0Y2hp
bmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tZXJyb3IKKysrIC9kZXYvbnVsbApAQCAtMSAr
MCwwIEBACi1FUlJPUjogTWFsZm9ybWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9uOiBldmVudCBFdmVu
dCBoYXMgYW4gaXRlbSBpbiB0YXJnZXRUeXBlcyAiW3Und29ya2VyJ10iIHRoYXQgaXMgbm90IHN1
cHBvcnRlZCBieSBhbnkgdmFsdWUgaW4gZGVidWdnYWJsZVR5cGVzICJbdSdqYXZhc2NyaXB0J10i
LgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1ldmVudC10YXJnZXRUeXBlcy10eXBlLmpzb24t
ZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2Vu
ZXJpYy9leHBlY3RlZC9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGVzLXR5cGUuanNvbi1lcnJvcgpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzQwM2UxM2E4MDkuLjAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2V4cGVjdGVkL2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlwZXMtdHlwZS5qc29uLWVycm9yCisrKyAv
ZGV2L251bGwKQEAgLTEgKzAsMCBAQAotRVJST1I6IE1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNh
dGlvbjogdGFyZ2V0VHlwZXMgZm9yIGV2ZW50IFBhZ2VPbmx5IGlzIG5vdCBhbiBhcnJheQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1ldmVudC10YXJnZXRUeXBlcy12YWx1ZS5qc29uLWVycm9y
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMv
ZXhwZWN0ZWQvZmFpbC1vbi1ldmVudC10YXJnZXRUeXBlcy12YWx1ZS5qc29uLWVycm9yCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MzAxMmE5ZmU0ZS4uMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhw
ZWN0ZWQvZmFpbC1vbi1ldmVudC10YXJnZXRUeXBlcy12YWx1ZS5qc29uLWVycm9yCisrKyAvZGV2
L251bGwKQEAgLTEgKzAsMCBAQAotRVJST1I6IE1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNhdGlv
bjogdGFyZ2V0VHlwZXMgZm9yIGV2ZW50IFBhZ2VPbmx5IGlzIGFuIHVuc3VwcG9ydGVkIHN0cmlu
Zy4gV2FzOiAiW3UncGFnZWUnXSIsIEFsbG93ZWQgdmFsdWVzOiBzZXJ2aWNlLXdvcmtlciwgamF2
YXNjcmlwdCwgd29ya2VyLCBwYWdlLCB3ZWItcGFnZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1v
bi1udW1iZXItdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbi1lcnJvciBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVk
L2ZhaWwtb24tbnVtYmVyLXR5cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24tZXJyb3IK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3YjJhZjBlNDdlLi4wMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJp
Yy9leHBlY3RlZC9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxhZy5q
c29uLWVycm9yCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotRVJST1I6IFRoZSAnb3B0aW9u
YWwnIGZsYWcgZm9yIGEgcGFyYW1ldGVyIG11c3QgYmUgYSBib29sZWFuIGxpdGVyYWwuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2Vu
ZXJpYy9leHBlY3RlZC9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5q
c29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1i
ZXIuanNvbi1lcnJvcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODZkZjM3NTBjMWEu
LjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tbnVtYmVyLXR5cGVkLW9wdGlvbmFsLXR5
cGUtbWVtYmVyLmpzb24tZXJyb3IKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1FUlJPUjog
VGhlICdvcHRpb25hbCcgZmxhZyBmb3IgYSB0eXBlIG1lbWJlciBtdXN0IGJlIGEgYm9vbGVhbiBs
aXRlcmFsLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1zdHJpbmctdHlwZWQtb3B0aW9uYWwt
cGFyYW1ldGVyLWZsYWcuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9w
dGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24tZXJyb3IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDk3YjJhZjBlNDdlLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXN0cmlu
Zy10eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29uLWVycm9yCisrKyAvZGV2L251bGwK
QEAgLTEgKzAsMCBAQAotRVJST1I6IFRoZSAnb3B0aW9uYWwnIGZsYWcgZm9yIGEgcGFyYW1ldGVy
IG11c3QgYmUgYSBib29sZWFuIGxpdGVyYWwuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXN0
cmluZy10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29uLWVycm9yIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1v
bi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNvbi1lcnJvcgpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggODZkZjM3NTBjMWEuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVk
L2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24tZXJyb3IKKysr
IC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1FUlJPUjogVGhlICdvcHRpb25hbCcgZmxhZyBmb3Ig
YSB0eXBlIG1lbWJlciBtdXN0IGJlIGEgYm9vbGVhbiBsaXRlcmFsLgpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0
ZWQvZmFpbC1vbi10eXBlLWRlY2xhcmF0aW9uLXVzaW5nLXR5cGUtcmVmZXJlbmNlLmpzb24tZXJy
b3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJp
Yy9leHBlY3RlZC9mYWlsLW9uLXR5cGUtZGVjbGFyYXRpb24tdXNpbmctdHlwZS1yZWZlcmVuY2Uu
anNvbi1lcnJvcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDJmNTc1M2E0MzkuLjAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS1kZWNsYXJhdGlvbi11c2luZy10eXBl
LXJlZmVyZW5jZS5qc29uLWVycm9yCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotRVJST1I6
IFR5cGUgcmVmZXJlbmNlIGNhbm5vdCBoYXZlIGJvdGggJ3R5cGUnIGFuZCAnJHJlZicga2V5cy4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS1yZWZlcmVuY2UtYXMtcHJpbWl0aXZlLXR5
cGUuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS1yZWZlcmVuY2UtYXMtcHJpbWl0aXZl
LXR5cGUuanNvbi1lcnJvcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDc2YmMxYzc3
NzMuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS1yZWZlcmVuY2UtYXMtcHJp
bWl0aXZlLXR5cGUuanNvbi1lcnJvcgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUVSUk9S
OiBUeXBlIHJlZmVyZW5jZSAnRGF0YWJhc2VJZCcgaXMgbm90IGEgcHJpbWl0aXZlIHR5cGUuIEFs
bG93ZWQgdmFsdWVzOiBpbnRlZ2VyLCBudW1iZXIsIHN0cmluZywgYm9vbGVhbiwgZW51bSwgb2Jq
ZWN0LCBhcnJheSwgYW55CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXR5cGUtd2l0aC1pbnZh
bGlkLXBsYXRmb3JtLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXR5cGUtd2l0aC1pbnZhbGlk
LXBsYXRmb3JtLmpzb24tZXJyb3IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjNjM2
YzU0YjdjLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXR5cGUtd2l0aC1pbnZhbGlk
LXBsYXRmb3JtLmpzb24tZXJyb3IKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1FUlJPUjog
VW5rbm93biBwbGF0Zm9ybTogaW52YWxpZApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi10eXBl
LXdpdGgtbG93ZXJjYXNlLW5hbWUuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS13aXRo
LWxvd2VyY2FzZS1uYW1lLmpzb24tZXJyb3IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDRlNDYyMjUwYzBhLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXR5cGUtd2l0aC1s
b3dlcmNhc2UtbmFtZS5qc29uLWVycm9yCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotRVJS
T1I6IFR5cGVzIG11c3QgYmVnaW4gd2l0aCBhbiB1cHBlcmNhc2UgY2hhcmFjdGVyLgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVy
aWMvZXhwZWN0ZWQvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtZGVjbGFy
YXRpb24uanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1p
bi10eXBlLWRlY2xhcmF0aW9uLmpzb24tZXJyb3IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDJkMzhlNjQ2NzVkLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXVua25vd24t
dHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1kZWNsYXJhdGlvbi5qc29uLWVycm9yCisrKyAvZGV2L251
bGwKQEAgLTEgKzAsMCBAQAotRVJST1I6IFR5cGUgcmVmZXJlbmNlICdkcmFnb24nIGlzIG5vdCBh
IHByaW1pdGl2ZSB0eXBlLiBBbGxvd2VkIHZhbHVlczogaW50ZWdlciwgbnVtYmVyLCBzdHJpbmcs
IGJvb2xlYW4sIGVudW0sIG9iamVjdCwgYXJyYXksIGFueQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFp
bC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtbWVtYmVyLmpzb24tZXJyb3IgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBl
Y3RlZC9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1tZW1iZXIuanNvbi1l
cnJvcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmFmNjY3MmNiZWYuLjAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLW1l
bWJlci5qc29uLWVycm9yCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotRVJST1I6IExvb2t1
cCBmYWlsZWQgZm9yIHR5cGUgcmVmZXJlbmNlOiBDb2xvciAocmVmZXJlbmNlZCBmcm9tIGRvbWFp
bjogRmFudGFzeSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2dlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0
dXJlLWd1YXJkcy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2dlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0
dXJlLWd1YXJkcy5qc29uLXJlc3VsdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDk0
NmI1M2UzZjguLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2dlbmVyYXRlLWRvbWFpbnMtd2l0aC1m
ZWF0dXJlLWd1YXJkcy5qc29uLXJlc3VsdAorKysgL2Rldi9udWxsCkBAIC0xLDEyNDUgKzAsMCBA
QAotIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1
YXJkcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLS8v
IE5ldHdvcmsxCi1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJOZXR3b3JrMSIsIG51
bGwpOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIk5ldHdvcmsxLmxvYWRSZXNv
dXJjZSIsIG51bGwsIFtdLCBbXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJO
ZXR3b3JrMSIsIG51bGwpOwotCi0vLyBOZXR3b3JrMwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rl
ckRvbWFpbigiTmV0d29yazMiLCBudWxsKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFdmVu
dCgiTmV0d29yazMucmVzb3VyY2VMb2FkZWQiLCBudWxsLCBbXSk7Ci1JbnNwZWN0b3JCYWNrZW5k
LnJlZ2lzdGVyTmV0d29yazNEaXNwYXRjaGVyID0gSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRp
c3BhdGNoZXIuYmluZChJbnNwZWN0b3JCYWNrZW5kLCAiTmV0d29yazMiKTsKLUluc3BlY3RvckJh
Y2tlbmQuYWN0aXZhdGVEb21haW4oIk5ldHdvcmszIiwgbnVsbCk7Ci0jIyMgRW5kIEZpbGU6IElu
c3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
Z2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUo
SU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQotI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bFR5cGVzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRl
ci5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERp
c3BhdGNoZXIgewotcHVibGljOgotICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRy
PEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9
IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KLSAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERp
c3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Ci1w
cml2YXRlOgotICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hl
cjsKLX07Ci0KLQotI2lmIFBMQVRGT1JNKFdFQl9DT01NQU5EUykKLWNsYXNzIEFsdGVybmF0ZU5l
dHdvcmsxQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXIgewotcHVibGljOgotICAgIHZpcnR1YWwgfkFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3Bh
dGNoZXIoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgY2FsbElkKSA9
IDA7Ci19OwotI2VuZGlmIC8vIFBMQVRGT1JNKFdFQl9DT01NQU5EUykKLQotfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKLSMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5o
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFy
ZHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJh
Z21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdHlwZWRlZiBT
dHJpbmcgRXJyb3JTdHJpbmc7Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKLSNpZiBQTEFURk9STShXRUJfQ09NTUFORFMpCi1jbGFzcyBBbHRlcm5hdGVOZXR3
b3JrMUJhY2tlbmREaXNwYXRjaGVyOwotI2VuZGlmIC8vIFBMQVRGT1JNKFdFQl9DT01NQU5EUykK
LSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQotI2lm
IFBMQVRGT1JNKFdFQl9DT01NQU5EUykKLWNsYXNzIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlKEVycm9yU3Ry
aW5nJikgPSAwOwotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgfk5ldHdvcmsxQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyKCk7Ci19OwotI2VuZGlmIC8vIFBMQVRGT1JNKFdFQl9DT01NQU5EUykKLQot
I2lmIFBMQVRGT1JNKFdFQl9DT01NQU5EUykKLWNsYXNzIE5ldHdvcmsxQmFja2VuZERpc3BhdGNo
ZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewotcHVibGlj
OgotICAgIHN0YXRpYyBSZWY8TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tl
bmREaXNwYXRjaGVyJiwgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICB2
b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpT
T046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5hbDsKLXByaXZhdGU6Ci0gICAgdm9pZCBsb2FkUmVz
b3VyY2UobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7
Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi1wdWJsaWM6Ci0g
ICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERp
c3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0g
YWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQotcHJpdmF0ZToKLSAgICBBbHRlcm5hdGVOZXR3b3JrMUJh
Y2tlbmREaXNwYXRjaGVyKiBtX2FsdGVybmF0ZURpc3BhdGNoZXIgeyBudWxscHRyIH07Ci0jZW5k
aWYKLXByaXZhdGU6Ci0gICAgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0
Y2hlciYsIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgTmV0d29yazFC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQgeyBudWxscHRyIH07Ci19OwotI2VuZGlm
IC8vIFBMQVRGT1JNKFdFQl9DT01NQU5EUykKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0j
IyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgotLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVl
cy5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQotI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNlbmRpZgot
Ci1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotI2lmIFBMQVRGT1JNKFdFQl9DT01NQU5EUykKLU5l
dHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIoKSB7IH0KLSNlbmRpZiAvLyBQTEFURk9STShXRUJfQ09NTUFORFMpCi0KLSNpZiBQ
TEFURk9STShXRUJfQ09NTUFORFMpCi1SZWY8TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4gTmV0
d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5k
RGlzcGF0Y2hlciwgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQotewot
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoYmFja2Vu
ZERpc3BhdGNoZXIsIGFnZW50KSk7Ci19Ci0KLU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6Ok5l
dHdvcmsxQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRj
aGVyLCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCi0gICAgOiBTdXBw
bGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKLSAgICAsIG1fYWdl
bnQoYWdlbnQpCi17Ci0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVy
Rm9yRG9tYWluKCJOZXR3b3JrMSJfcywgdGhpcyk7Ci19Ci0KLXZvaWQgTmV0d29yazFCYWNrZW5k
RGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9k
LCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCi17Ci0gICAgUmVmPE5ldHdvcmsxQmFja2Vu
ZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwotCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4g
cGFyYW1ldGVyczsKLSAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFyYW1ldGVy
cyk7Ci0KLSAgICBpZiAobWV0aG9kID09ICJsb2FkUmVzb3VyY2UiKQotICAgICAgICBsb2FkUmVz
b3VyY2UocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKLSAgICBlbHNlCi0gICAgICAg
IG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNo
ZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmsxLiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZv
dW5kIik7Ci19Ci0KLXZvaWQgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNl
KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQotewotI2lmIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotICAgIGlmIChtX2FsdGVybmF0ZURpc3Bh
dGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2UocmVx
dWVzdElkKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAgRXJyb3JTdHJp
bmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKTsKLSAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2UoZXJyb3IpOwotCi0gICAgaWYgKCFl
cnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNl
KHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVy
OjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOwotfQotI2VuZGlmIC8vIFBMQVRGT1JNKFdF
Ql9DT01NQU5EUykKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTog
VGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVu
ZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0
ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90
b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgRnJv
bnRlbmRSb3V0ZXI7Ci0KLSNpZiBQTEFURk9STShXRUJfRVZFTlRTKQotY2xhc3MgTmV0d29yazNG
cm9udGVuZERpc3BhdGNoZXIgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGlj
OgotICAgIE5ldHdvcmszRnJvbnRlbmREaXNwYXRjaGVyKEZyb250ZW5kUm91dGVyJiBmcm9udGVu
ZFJvdXRlcikgOiBtX2Zyb250ZW5kUm91dGVyKGZyb250ZW5kUm91dGVyKSB7IH0KLSAgICB2b2lk
IHJlc291cmNlTG9hZGVkKCk7Ci1wcml2YXRlOgotICAgIEZyb250ZW5kUm91dGVyJiBtX2Zyb250
ZW5kUm91dGVyOwotfTsKLSNlbmRpZiAvLyBQTEFURk9STShXRUJfRVZFTlRTKQotCi19IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMu
aAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUt
Z3VhcmRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgi
Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0K
LSNpZiBQTEFURk9STShXRUJfRVZFTlRTKQotdm9pZCBOZXR3b3JrM0Zyb250ZW5kRGlzcGF0Y2hl
cjo6cmVzb3VyY2VMb2FkZWQoKQotewotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdl
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJt
ZXRob2QiX3MsICJOZXR3b3JrMy5yZXNvdXJjZUxvYWRlZCJfcyk7Ci0KLSAgICBtX2Zyb250ZW5k
Um91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwotfQotI2VuZGlm
IC8vIFBMQVRGT1JNKFdFQl9FVkVOVFMpCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0j
IyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi1uYW1lc3BhY2Ug
UHJvdG9jb2wgewotCi0KLQotLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCi0jaWYgUExBVEZPUk0o
V0VCX1RZUEVTKQotbmFtZXNwYWNlIE5ldHdvcmsyIHsKLWNsYXNzIE5ldHdvcmtFcnJvcjsKLX0g
Ly8gTmV0d29yazIKLSNlbmRpZiAvLyBQTEFURk9STShXRUJfVFlQRVMpCi0vLyBFbmQgb2YgZm9y
d2FyZCBkZWNsYXJhdGlvbnMuCi0KLQotCi0KLSNpZiBQTEFURk9STShXRUJfVFlQRVMpCi1uYW1l
c3BhY2UgTmV0d29yazIgewotY2xhc3MgTmV0d29ya0Vycm9yIDogcHVibGljIEpTT046Ok9iamVj
dEJhc2UgewotcHVibGljOgotICAgIGVudW0gewotICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCi0g
ICAgICAgIE1lc3NhZ2VTZXQgPSAxIDw8IDAsCi0gICAgICAgIENvZGVTZXQgPSAxIDw8IDEsCi0g
ICAgICAgIEFsbEZpZWxkc1NldCA9IChNZXNzYWdlU2V0IHwgQ29kZVNldCkKLSAgICB9OwotCi0g
ICAgdGVtcGxhdGU8aW50IFNUQVRFPgotICAgIGNsYXNzIEJ1aWxkZXIgewotICAgIHByaXZhdGU6
Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVzdWx0OwotCi0gICAgICAgIHRlbXBs
YXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwg
U1RFUD4qPih0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXIoUmVmPC8qTmV0d29y
a0Vycm9yKi9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQotICAgICAgICAgICAgOiBtX3Jlc3VsdChX
VEZNb3ZlKG9iamVjdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNU
QVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwot
ICAgICAgICB9Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBOZXR3b3JrRXJyb3I7Ci0gICAgcHVibGlj
OgotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2FnZShjb25z
dCBTdHJpbmcmIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgTWVzc2FnZVNldCksIHByb3BlcnR5X21lc3NhZ2VfYWxyZWFkeV9zZXQpOwotICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibWVzc2FnZSJfcywgdmFsdWUpOwotICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNZXNzYWdlU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IENvZGVTZXQ+JiBzZXRDb2RlKGludCB2YWx1ZSkKLSAgICAgICAg
ewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENvZGVTZXQpLCBwcm9wZXJ0
eV9jb2RlX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2VyKCJj
b2RlIl9zLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvZGVTZXQ+KCk7
Ci0gICAgICAgIH0KLQotICAgICAgICBSZWY8TmV0d29ya0Vycm9yPiByZWxlYXNlKCkKLSAgICAg
ICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCBy
ZXN1bHRfaXNfbm90X3JlYWR5KTsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihO
ZXR3b3JrRXJyb3IpID09IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7Ci0KLSAg
ICAgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25SZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNl
Tm9uTnVsbCgpOwotICAgICAgICAgICAgYXV0byByZXN1bHQgPSBXVEZNb3ZlKCpyZWludGVycHJl
dF9jYXN0PFJlZjxOZXR3b3JrRXJyb3I+Kj4oJmpzb25SZXN1bHQpKTsKLSAgICAgICAgICAgIHJl
dHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgLyoKLSAgICAgKiBTeW50aGV0
aWMgY29uc3RydWN0b3I6Ci0gICAgICogUmVmPE5ldHdvcmtFcnJvcj4gcmVzdWx0ID0gTmV0d29y
a0Vycm9yOjpjcmVhdGUoKQotICAgICAqICAgICAuc2V0TWVzc2FnZSguLi4pCi0gICAgICogICAg
IC5zZXRDb2RlKC4uLikKLSAgICAgKiAgICAgLnJlbGVhc2UoKTsKLSAgICAgKi8KLSAgICBzdGF0
aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBC
dWlsZGVyPE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKLSAgICB9Ci19Owot
Ci19IC8vIE5ldHdvcmsyCi0jZW5kaWYgLy8gUExBVEZPUk0oV0VCX1RZUEVTKQotCi0KLQotfSAv
LyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sT2JqZWN0cy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0
ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVz
dFByb3RvY29sT2JqZWN0cy5oIgotCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotbmFtZXNw
YWNlIFByb3RvY29sIHsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3Bw
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0
dXJlLWd1YXJkcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlz
cGF0Y2hlcnMuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLUBwcm90b2NvbCBUZXN0
UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI7Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Igewot
Ci0KLSNpZiBQTEFURk9STShXRUJfQ09NTUFORFMpCi1jbGFzcyBPYmpDSW5zcGVjdG9yTmV0d29y
azFCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVOZXR3b3JrMUJhY2tl
bmREaXNwYXRjaGVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAg
ICBPYmpDSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xO
ZXR3b3JrMURvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0K
LSAgICB2b2lkIGxvYWRSZXNvdXJjZShsb25nIHJlcXVlc3RJZCkgZmluYWw7Ci1wcml2YXRlOgot
ICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+PiBtX2Rl
bGVnYXRlOwotfTsKLSNlbmRpZiAvLyBQTEFURk9STShXRUJfQ09NTUFORFMpCi0KLX0gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNw
YXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hl
cnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5z
LXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJh
Y2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIK
LSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbmNsdWRlIDx3dGYv
SlNPTlZhbHVlcy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotI2lmIFBMQVRGT1JNKFdF
Ql9DT01NQU5EUykKLXZvaWQgT2JqQ0luc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6
OmxvYWRSZXNvdXJjZShsb25nIHJlcXVlc3RJZCkKLXsKLSAgICBpZiAoIVttX2RlbGVnYXRlIHJl
c3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IobG9hZFJlc291cmNlV2l0aEVycm9yQ2FsbGJhY2s6
c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9y
dFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91
bmQsICInTmV0d29yazEubG9hZFJlc291cmNlJyB3YXMgbm90IGZvdW5kIl9zKTsKLSAgICAgICAg
YmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewot
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJ
ZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7Ci0gICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgfTsKLQotICAgIGlkIHN1
Y2Nlc3NDYWxsYmFjayA9IF57Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNw
b25zZShyZXF1ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKLSAgICB9Owot
Ci0gICAgW21fZGVsZWdhdGUgbG9hZFJlc291cmNlV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxs
YmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKLX0KLQotI2VuZGlmIC8vIFBM
QVRGT1JNKFdFQl9DT01NQU5EUykKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxXZWJJbnNw
ZWN0b3IvVGVzdFByb3RvY29sLmg+Ci0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZh
dWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QK
LUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4sIHNldHRlcj1zZXROZXR3b3JrMUhhbmRsZXI6
KSBpZDxUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+IG5ldHdvcmsxSGFuZGxlcjsK
LUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgVGVzdFByb3RvY29sTmV0d29yazNEb21h
aW5FdmVudERpc3BhdGNoZXIgKm5ldHdvcmszRXZlbnREaXNwYXRjaGVyOwotQGVuZAotCi0KLSMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3Rv
Y29sQ29uZmlndXJhdGlvbi5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgot
I2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgotI2ltcG9ydCA8SmF2YVNj
cmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgotCi11c2lu
ZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29u
ZmlndXJhdGlvbgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRy
b2xsZXI7Ci0gICAgaWQ8VGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyPiBfbmV0d29y
azFIYW5kbGVyOwotICAgIFRlc3RQcm90b2NvbE5ldHdvcmszRG9tYWluRXZlbnREaXNwYXRjaGVy
ICpfbmV0d29yazNFdmVudERpc3BhdGNoZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0
aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgot
ewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1
cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRy
b2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAgIFtf
bmV0d29yazFIYW5kbGVyIHJlbGVhc2VdOwotICAgIFtfbmV0d29yazNFdmVudERpc3BhdGNoZXIg
cmVsZWFzZV07Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi0tICh2b2lkKXNldE5ldHdvcmsx
SGFuZGxlcjooaWQ8VGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyPiloYW5kbGVyCi17
Ci0gICAgaWYgKGhhbmRsZXIgPT0gX25ldHdvcmsxSGFuZGxlcikKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgW19uZXR3b3JrMUhhbmRsZXIgcmVsZWFzZV07Ci0gICAgX25ldHdvcmsxSGFuZGxlciA9
IFtoYW5kbGVyIHJldGFpbl07Ci0KLSAgICBhdXRvIGFsdGVybmF0ZURpc3BhdGNoZXIgPSBtYWtl
VW5pcXVlPE9iakNJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPihoYW5kbGVyKTsK
LSAgICBhdXRvIGFsdGVybmF0ZUFnZW50ID0gbWFrZVVuaXF1ZTxBbHRlcm5hdGVEaXNwYXRjaGFi
bGVBZ2VudDxOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyLCBBbHRlcm5hdGVOZXR3b3JrMUJhY2tl
bmREaXNwYXRjaGVyPj4oIk5ldHdvcmsxIl9zLCAqX2NvbnRyb2xsZXIsIFdURk1vdmUoYWx0ZXJu
YXRlRGlzcGF0Y2hlcikpOwotICAgIF9jb250cm9sbGVyLT5hcHBlbmRFeHRyYUFnZW50KFdURk1v
dmUoYWx0ZXJuYXRlQWdlbnQpKTsKLX0KLQotLSAoaWQ8VGVzdFByb3RvY29sTmV0d29yazFEb21h
aW5IYW5kbGVyPiluZXR3b3JrMUhhbmRsZXIKLXsKLSAgICByZXR1cm4gX25ldHdvcmsxSGFuZGxl
cjsKLX0KLQotLSAoVGVzdFByb3RvY29sTmV0d29yazNEb21haW5FdmVudERpc3BhdGNoZXIgKilu
ZXR3b3JrM0V2ZW50RGlzcGF0Y2hlcgotewotICAgIGlmICghX25ldHdvcmszRXZlbnREaXNwYXRj
aGVyKQotICAgICAgICBfbmV0d29yazNFdmVudERpc3BhdGNoZXIgPSBbW1Rlc3RQcm90b2NvbE5l
dHdvcmszRG9tYWluRXZlbnREaXNwYXRjaGVyIGFsbG9jXSBpbml0V2l0aENvbnRyb2xsZXI6X2Nv
bnRyb2xsZXJdOwotICAgIHJldHVybiBfbmV0d29yazNFdmVudERpc3BhdGNoZXI7Ci19Ci0KLUBl
bmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFy
ZHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1w
b3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVz
cGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xOZXR3b3JrM0Rv
bWFpbkV2ZW50RGlzcGF0Y2hlcgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxl
ciogX2NvbnRyb2xsZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6
KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYg
PSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAg
IEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAg
cmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpcmVzb3VyY2VMb2FkZWQKLXsKLSAgICBjb25zdCBG
cm9udGVuZFJvdXRlciYgcm91dGVyID0gX2NvbnRyb2xsZXItPmZyb250ZW5kUm91dGVyKCk7Ci0K
LSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRl
KCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiTmV0d29yazMucmVz
b3VyY2VMb2FkZWQiX3MpOwotICAgIHJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNP
TlN0cmluZygpKTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZl
bnREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVy
ZS1ndWFyZHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2ltcG9ydCA8V2ViSW5zcGVj
dG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgotCi0KLUBjbGFzcyBUZXN0UHJvdG9jb2xOZXR3
b3JrMk5ldHdvcmtFcnJvcjsKLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3Rv
Y29sUGxhdGZvcm0pIHsKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbCwKLSAgICBUZXN0UHJv
dG9jb2xQbGF0Zm9ybUdlbmVyaWMsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1JT1MsCi0gICAg
VGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUywKLX07Ci0KLQotCi0KLV9fYXR0cmlidXRlX18oKHZp
c2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xOZXR3b3JrMk5l
dHdvcmtFcnJvciA6IFJXSVByb3RvY29sSlNPTk9iamVjdAotLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQ7Ci0tIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0
ICopanNvbk9iamVjdDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3RyaW5n
ICopbWVzc2FnZSBjb2RlOihpbnQpY29kZTsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9u
YXRvbWljLCBjb3B5KSBOU1N0cmluZyAqbWVzc2FnZTsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0
eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCBjb2RlOwotQGVuZAotCi1AcHJvdG9jb2wgVGVzdFBy
b3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyIDxOU09iamVjdD4KLUBvcHRpb25hbAotLSAodm9p
ZClsb2FkUmVzb3VyY2VXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3Ip
KWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKHZvaWQpKXN1Y2Nlc3NDYWxs
YmFjazsKLUBlbmQKLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1A
aW50ZXJmYWNlIFRlc3RQcm90b2NvbE5ldHdvcmszRG9tYWluRXZlbnREaXNwYXRjaGVyIDogTlNP
YmplY3QKLS0gKHZvaWQpcmVzb3VyY2VMb2FkZWQ7Ci1AZW5kCi0KLQotI2ltcG9ydCA8V2ViSW5z
cGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgotCi0jIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRl
cm5hbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlu
cy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJv
dG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVu
dGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgot
Ci1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbE5ldHdvcmszRG9tYWluRXZlbnREaXNwYXRjaGVyIChQ
cml2YXRlKQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooSW5zcGVjdG9yOjpB
dWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXI7Ci1AZW5kCi0KLQotIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5o
IgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgot
Ci1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBl
PgotT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5n
JiB2YWx1ZSk7Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xQ
bGF0Zm9ybSB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQcm90
b2NvbFBsYXRmb3JtQWxsOgotICAgICAgICByZXR1cm4gImFsbCJfczsKLSAgICBjYXNlIFRlc3RQ
cm90b2NvbFBsYXRmb3JtR2VuZXJpYzoKLSAgICAgICAgcmV0dXJuICJnZW5lcmljIl9zOwotICAg
IGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1JT1M6Ci0gICAgICAgIHJldHVybiAiaW9zIl9zOwot
ICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzoKLSAgICAgICAgcmV0dXJuICJtYWNv
cyJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJvdG9j
b2xQbGF0Zm9ybT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0g
ICAgaWYgKHZhbHVlID09ICJhbGwiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZv
cm1BbGw7Ci0gICAgaWYgKHZhbHVlID09ICJnZW5lcmljIikKLSAgICAgICAgcmV0dXJuIFRlc3RQ
cm90b2NvbFBsYXRmb3JtR2VuZXJpYzsKLSAgICBpZiAodmFsdWUgPT0gImlvcyIpCi0gICAgICAg
IHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzsKLSAgICBpZiAodmFsdWUgPT0gIm1hY29z
IikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M7Ci0gICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKLX0KLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1w
b3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJ
UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9y
OwotCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoTmV0d29yazJEb21h
aW4pCi0KLSsgKHZvaWQpX3BhcnNlTmV0d29ya0Vycm9yOihUZXN0UHJvdG9jb2xOZXR3b3JrMk5l
dHdvcmtFcnJvciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLQotQGVuZAot
Ci1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChOZXR3b3JrMkRv
bWFpbikKLQotKyAodm9pZClfcGFyc2VOZXR3b3JrRXJyb3I6KFRlc3RQcm90b2NvbE5ldHdvcmsy
TmV0d29ya0Vycm9yICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNz
XSk7Ci0gICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xOZXR3b3JrMk5ldHdvcmtFcnJvciBh
bGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbFR5cGVzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2Vu
ZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwu
aCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDxX
ZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotI2ltcG9ydCA8d3Rm
L0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVz
cGFjZSBJbnNwZWN0b3I7Ci0KLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbE5ldHdvcmsy
TmV0d29ya0Vycm9yCi0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwg
TlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQKLXsKLSAgICBpZiAoIShzZWxm
ID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAIm1lc3NhZ2UiXSwgQCJtZXNzYWdl
Iik7Ci0gICAgc2VsZi5tZXNzYWdlID0gcGF5bG9hZFtAIm1lc3NhZ2UiXTsKLQotICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImNvZGUiXSwgQCJjb2Rl
Iik7Ci0gICAgc2VsZi5jb2RlID0gW3BheWxvYWRbQCJjb2RlIl0gaW50ZWdlclZhbHVlXTsKLQot
ICAgIHJldHVybiBzZWxmOwotfQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmpl
Y3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9iamVjdAotewotICAgIGlmICghKHNlbGYgPSBb
c3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmplY3QgdG9KU09OT2JqZWN0XS5nZXQoKV0pKQot
ICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBjb2RlOihpbnQpY29kZQot
ewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwot
Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShtZXNzYWdlLCBAIm1l
c3NhZ2UiKTsKLQotICAgIHNlbGYubWVzc2FnZSA9IG1lc3NhZ2U7Ci0gICAgc2VsZi5jb2RlID0g
Y29kZTsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKXNldE1lc3NhZ2U6KE5TU3Ry
aW5nICopbWVzc2FnZQotewotICAgIFtzdXBlciBzZXRTdHJpbmc6bWVzc2FnZSBmb3JLZXk6QCJt
ZXNzYWdlIl07Ci19Ci0KLS0gKE5TU3RyaW5nICopbWVzc2FnZQotewotICAgIHJldHVybiBbc3Vw
ZXIgc3RyaW5nRm9yS2V5OkAibWVzc2FnZSJdOwotfQotCi0tICh2b2lkKXNldENvZGU6KGludClj
b2RlCi17Ci0gICAgW3N1cGVyIHNldEludGVnZXI6Y29kZSBmb3JLZXk6QCJjb2RlIl07Ci19Ci0K
LS0gKGludCljb2RlCi17Ci0gICAgcmV0dXJuIFtzdXBlciBpbnRlZ2VyRm9yS2V5OkAiY29kZSJd
OwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvZXhwZWN0ZWQvc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbi1yZXN1bHQg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9l
eHBlY3RlZC9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uLXJlc3VsdApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTk0MDIxMTEzODIuLjAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVj
dGVkL3NhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24tcmVzdWx0CisrKyAvZGV2L251
bGwKQEAgLTEsOTE0ICswLDAgQEAKLSMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29t
bWFuZHMuanMKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQt
ZGlmZmVyZW50LWRvbWFpbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0jIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9u
Y2UKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi0jaW5j
bHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckZyb250ZW5kUm91dGVyLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNrZW5k
RGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2Jh
Y2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQotICAgIEJhY2tlbmREaXNw
YXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3Bh
dGNoZXIuZ2V0KCk7IH0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBt
X2JhY2tlbmREaXNwYXRjaGVyOwotfTsKLQotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
Ci0KLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSMj
IyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVk
ZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsK
LQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2Vu
ZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMu
Y3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZl
cmVudC1kb21haW4uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVy
cy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIu
aD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ry
b3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2lmIEVOQUJMRShJTlNQ
RUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlcnMuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0K
LX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlz
cGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5o
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVu
dC1kb21haW4uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNs
dWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgot
Ci1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgRnJvbnRlbmRSb3V0ZXI7Ci0KLX0gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVy
cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFp
bi5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgotCi0j
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi19IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRj
aGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWlu
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdt
YSBvbmNlCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVz
Lmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7
Ci0KLQotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotCi0KLS8vIFR5cGVkZWZzLgotbmFt
ZXNwYWNlIFJ1bnRpbWUgewotLyogVW5pcXVlIG9iamVjdCBpZGVudGlmaWVyLiAqLwotdHlwZWRl
ZiBTdHJpbmcgUmVtb3RlT2JqZWN0SWQ7Ci19IC8vIFJ1bnRpbWUKLQotbmFtZXNwYWNlIFJ1bnRp
bWUyIHsKLS8qIFVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4gKi8KLXR5cGVkZWYgU3RyaW5nIFJl
bW90ZU9iamVjdElkOwotfSAvLyBSdW50aW1lMgotLy8gRW5kIG9mIHR5cGVkZWZzLgotCi0KLQot
fSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sT2JqZWN0cy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1l
LXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0UHJv
dG9jb2xPYmplY3RzLmgiCi0KLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1uYW1lc3BhY2Ug
UHJvdG9jb2wgewotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLQot
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4u
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+
Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi0KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7
Ci0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJh
Y2tlbmREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNh
bWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJv
dG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVy
bmFsLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW5jbHVk
ZSA8d3RmL0pTT05WYWx1ZXMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLX0gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNw
YXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5o
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVu
dC1kb21haW4uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+Ci0KLV9fYXR0cmlidXRlX18o
KHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1
cmF0aW9uIDogTlNPYmplY3QKLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENv
bmZpZ3VyYXRpb24uaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
bi5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZm
ZXJlbnQtZG9tYWluLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgotCi0jaW1wb3J0ICJU
ZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3Bh
dGNoZXJzLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVB
Z2VudC5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250
cm9sbGVyLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVycy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW1wbGVt
ZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgotewotICAgIEF1Z21lbnRhYmxlSW5z
cGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0
V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxl
cgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICBy
ZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9IGNv
bnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAg
IFtzdXBlciBkZWFsbG9jXTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sQ29uZmlndXJhdGlvbi5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnRE
aXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlw
ZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9y
dCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDx3dGYvSlNPTlZhbHVl
cy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLSMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlm
ZmVyZW50LWRvbWFpbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotCi0jaW1wb3J0IDxXZWJJ
bnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+Ci0KLQotCi0KLXR5cGVkZWYgTlNfRU5V
TShOU0ludGVnZXIsIFRlc3RQcm90b2NvbFBsYXRmb3JtKSB7Ci0gICAgVGVzdFByb3RvY29sUGxh
dGZvcm1BbGwsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljLAotICAgIFRlc3RQcm90
b2NvbFBsYXRmb3JtSU9TLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1MsCi19OwotCi0K
LQotCi0KLQotCi0KLQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENv
bXBhdGliaWxpdHlPYmplY3RzLmg+Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKLQot
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90
b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKLSNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2lt
cG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xJbnRlcm5hbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZm
ZXJlbnQtZG9tYWluLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJ
UHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+Ci1PcHRpb25hbDxPYmpDRW51bVR5cGU+IGZy
b21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKLQotaW5saW5lIFN0cmluZyB0
b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFBsYXRmb3JtIHZhbHVlKQotewotICAgIHN3aXRj
aCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1BbGw6Ci0gICAgICAgIHJl
dHVybiAiYWxsIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOgotICAg
ICAgICByZXR1cm4gImdlbmVyaWMiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlP
UzoKLSAgICAgICAgcmV0dXJuICJpb3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9y
bU1hY09TOgotICAgICAgICByZXR1cm4gIm1hY29zIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8
PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFBsYXRmb3JtPiBmcm9tUHJvdG9jb2xTdHJp
bmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gImFsbCIpCi0gICAg
ICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDsKLSAgICBpZiAodmFsdWUgPT0gImdl
bmVyaWMiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOwotICAg
IGlmICh2YWx1ZSA9PSAiaW9zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3Jt
SU9TOwotICAgIGlmICh2YWx1ZSA9PSAibWFjb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3Rv
Y29sUGxhdGZvcm1NYWNPUzsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi0KLQotCi0K
LX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQt
ZGlmZmVyZW50LWRvbWFpbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotCi0jaW1w
b3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIK
LSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0K
LXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zIChSdW50aW1lRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZVJlbW90ZU9iamVj
dElkOihOU1N0cmluZyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLQotQGVu
ZAotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFJ1bnRpbWUyRG9tYWlu
KQotCi0rICh2b2lkKV9wYXJzZVJlbW90ZU9iamVjdElkOihOU1N0cmluZyAqKilvdXRWYWx1ZSBm
cm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zIChSdW50aW1lRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZVJl
bW90ZU9iamVjdElkOihOU1N0cmluZyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9h
ZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TU3RyaW5n
IGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gKE5TU3RyaW5nICopcGF5bG9hZDsKLX0KLQotQGVu
ZAotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoUnVudGltZTJE
b21haW4pCi0KLSsgKHZvaWQpX3BhcnNlUmVtb3RlT2JqZWN0SWQ6KE5TU3RyaW5nICoqKW91dFZh
bHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9C
QURfVFlQRShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSAoTlNT
dHJpbmcgKilwYXlsb2FkOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVz
Lm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZl
cmVudC1kb21haW4uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2Nv
bEpTT05PYmplY3RQcml2YXRlLmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9y
dCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0K
LQotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVj
dGVkL3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uLXJlc3VsdCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3No
YWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uLXJlc3VsdApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNGJkYjJkNDExOWYuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3NoYWRv
d2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uLXJlc3VsdAorKysgL2Rldi9udWxsCkBAIC0x
LDExMjQgKzAsMCBAQAotIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5q
cwotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5
cGUtc2V0dGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0jIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0K
LSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQotI2luY2x1ZGUg
IlRlc3RQcm90b2NvbFR5cGVzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JG
cm9udGVuZFJvdXRlci5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgQWx0ZXJu
YXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZvaWQgc2V0QmFja2VuZERpc3Bh
dGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5k
RGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KLSAgICBCYWNrZW5kRGlzcGF0Y2hl
ciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVy
LmdldCgpOyB9Ci1wcml2YXRlOgotICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNr
ZW5kRGlzcGF0Y2hlcjsKLX07Ci0KLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0j
ZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jIyMgRW5k
IEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQot
bmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCi0K
LQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlz
cGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25hbC10eXBl
LXNldHRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5o
IgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4K
LSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3ll
ZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2lmIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5k
RGlzcGF0Y2hlcnMuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLX0g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0
Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1z
ZXR0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVk
ZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQot
bmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEZyb250ZW5kUm91dGVyOwotCi19IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMu
aAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJz
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCi0KLSNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLX0gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNo
ZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJz
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdt
YSBvbmNlCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVz
Lmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7
Ci0KLQotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotLy8gRm9yd2FyZCBkZWNsYXJhdGlv
bnMuCi1uYW1lc3BhY2UgUnVudGltZSB7Ci1jbGFzcyBLZXlQYXRoOwotfSAvLyBSdW50aW1lCi0v
LyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCi0KLQotCi0KLW5hbWVzcGFjZSBUZXN0SGVs
cGVycyB7Ci0KLVN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSk7Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkK
LXsKLSAgICByZXR1cm4gZ2V0RW51bUNvbnN0YW50VmFsdWUoc3RhdGljX2Nhc3Q8aW50PihlbnVt
VmFsdWUpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKLQotbmFtZXNwYWNlIFJ1
bnRpbWUgewotLyogS2V5IHBhdGguICovCi1jbGFzcyBLZXlQYXRoIDogcHVibGljIEpTT046Ok9i
amVjdEJhc2UgewotcHVibGljOgotICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ3R5
cGUnIHdoaWxlIGdlbmVyYXRpbmcgS2V5UGF0aC4KLSAgICBlbnVtIGNsYXNzIFR5cGUgewotICAg
ICAgICBOdWxsID0gMCwKLSAgICAgICAgU3RyaW5nID0gMSwKLSAgICAgICAgQXJyYXkgPSAyLAot
ICAgIH07IC8vIGVudW0gY2xhc3MgVHlwZQotICAgIGVudW0gewotICAgICAgICBOb0ZpZWxkc1Nl
dCA9IDAsCi0gICAgICAgIFR5cGVTZXQgPSAxIDw8IDAsCi0gICAgICAgIEFsbEZpZWxkc1NldCA9
IChUeXBlU2V0KQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+Ci0gICAgY2xhc3Mg
QnVpbGRlciB7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbV9y
ZXN1bHQ7Ci0KLSAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQ
PiYgY2FzdFN0YXRlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJl
dF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgQnVpbGRlcihSZWY8LypLZXlQYXRoKi9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQotICAgICAg
ICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5f
bm9uX2luaXRfc3RhdGUpOwotICAgICAgICB9Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBLZXlQYXRo
OwotICAgIHB1YmxpYzoKLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVHlwZVNldD4mIHNldFR5
cGUoVHlwZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIFR5cGVTZXQpLCBwcm9wZXJ0eV90eXBlX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXRTdHJpbmcoInR5cGUiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RI
ZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSh2YWx1ZSkpOwotICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxUeXBlU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgUmVmPEtleVBhdGg+
IHJlbGVhc2UoKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9
PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwotICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoc2l6ZW9mKEtleVBhdGgpID09IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5ub3Rf
Y2FzdCk7Ci0KLSAgICAgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25SZXN1bHQgPSBtX3Jl
c3VsdC5yZWxlYXNlTm9uTnVsbCgpOwotICAgICAgICAgICAgYXV0byByZXN1bHQgPSBXVEZNb3Zl
KCpyZWludGVycHJldF9jYXN0PFJlZjxLZXlQYXRoPio+KCZqc29uUmVzdWx0KSk7Ci0gICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIC8qCi0gICAgICog
U3ludGhldGljIGNvbnN0cnVjdG9yOgotICAgICAqIFJlZjxLZXlQYXRoPiByZXN1bHQgPSBLZXlQ
YXRoOjpjcmVhdGUoKQotICAgICAqICAgICAuc2V0VHlwZSguLi4pCi0gICAgICogICAgIC5yZWxl
YXNlKCk7Ci0gICAgICovCi0gICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgp
Ci0gICAgewotICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKSk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRTdHJpbmcoY29uc3QgU3RyaW5nJiB2
YWx1ZSkKLSAgICB7Ci0gICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldFN0cmluZygic3RyaW5n
Il9zLCB2YWx1ZSk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRBcnJheShSZWZQdHI8SlNPTjo6QXJy
YXlPZjxTdHJpbmc+PiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNl
dEFycmF5KCJhcnJheSJfcywgV1RGTW92ZSh2YWx1ZSkpOwotICAgIH0KLX07Ci0KLX0gLy8gUnVu
dGltZQotCi0KLQotbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
UHJvdG9jb2xFbnVtVHlwZT4KLU9wdGlvbmFsPFByb3RvY29sRW51bVR5cGU+IHBhcnNlRW51bVZh
bHVlRnJvbVN0cmluZyhjb25zdCBTdHJpbmcmKTsKLQotLy8gRW51bXMgaW4gdGhlICdSdW50aW1l
JyBEb21haW4KLXRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRp
bWU6OktleVBhdGg6OlR5cGU+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlBy
b3RvY29sOjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlPihjb25zdCBTdHJpbmcmKTsKLQotfSAvLyBu
YW1lc3BhY2UgVGVzdEhlbHBlcnMKLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAot
Ci0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotCi0jaW5jbHVkZSA8d3Rm
L09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotbmFtZXNwYWNlIFRlc3RIZWxw
ZXJzIHsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFsdWVzW10g
PSB7Ci0gICAgIm51bGwiLAotICAgICJzdHJpbmciLAotICAgICJhcnJheSIsCi19OwotCi1TdHJp
bmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsKLSAgICByZXR1cm4gZW51bV9jb25z
dGFudF92YWx1ZXNbY29kZV07Ci19Ci0KLS8vIEVudW1zIGluIHRoZSAnUnVudGltZScgRG9tYWlu
Ci10ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpLZXlQ
YXRoOjpUeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6
UnVudGltZTo6S2V5UGF0aDo6VHlwZT4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKLXsK
LSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7Ci0gICAgICAgIChz
aXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZTo6TnVsbCwK
LSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpLZXlQYXRoOjpU
eXBlOjpTdHJpbmcsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGlt
ZTo6S2V5UGF0aDo6VHlwZTo6QXJyYXksCi0gICAgfTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IDM7ICsraSkKLSAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRf
dmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9y
OjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZSljb25zdGFudFZhbHVlc1tpXTsKLQot
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLQotfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBl
cnMKLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbmNs
dWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLQotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi19
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNr
ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERp
c3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQt
b3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xC
YWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgi
Ci0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW5jbHVkZSA8d3Rm
L0pTT05WYWx1ZXMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVy
cy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0
ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2lt
cG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgotCi1fX2F0dHJpYnV0ZV9fKCh2aXNp
YmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
biA6IE5TT2JqZWN0Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1
cmF0aW9uLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0K
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25hbC10eXBl
LXNldHRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCi0KLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbEludGVybmFsLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hl
cnMuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50
Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xs
ZXIuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmRE
aXNwYXRjaGVycy5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXJzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRh
dGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCi17Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0
b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
Q29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCi17
Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVy
biBuaWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIpOwotICAgIF9jb250cm9sbGVyID0gY29udHJv
bGxlcjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgW3N1
cGVyIGRlYWxsb2NdOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xD
b25maWd1cmF0aW9uLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3Bh
dGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0
aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAi
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5o
PgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
LmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25hbC10
eXBlLXNldHRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2ltcG9ydCA8V2ViSW5z
cGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgotCi0KLUBjbGFzcyBUZXN0UHJvdG9jb2xS
dW50aW1lS2V5UGF0aDsKLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29s
UGxhdGZvcm0pIHsKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbCwKLSAgICBUZXN0UHJvdG9j
b2xQbGF0Zm9ybUdlbmVyaWMsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1JT1MsCi0gICAgVGVz
dFByb3RvY29sUGxhdGZvcm1NYWNPUywKLX07Ci0KLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdl
ciwgVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlKSB7Ci0gICAgVGVzdFByb3RvY29sUnVu
dGltZUtleVBhdGhUeXBlTnVsbCwKLSAgICBUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGVT
dHJpbmcsCi0gICAgVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlQXJyYXksCi19OwotCi0K
LV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0
UHJvdG9jb2xSdW50aW1lS2V5UGF0aCA6IFJXSVByb3RvY29sSlNPTk9iamVjdAotLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBh
eWxvYWQ7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9j
b2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFR5cGU6
KFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZSl0eXBlOwotLyogcmVxdWlyZWQgKi8gQHBy
b3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBl
IHR5cGU7Ci0vKiBvcHRpb25hbCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJp
bmcgKnN0cmluZzsKLS8qIG9wdGlvbmFsICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBO
U0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmFycmF5OwotQGVuZAotCi0KLQotCi0KLQotI2ltcG9ydCA8
V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgotCi0j
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xJbnRlcm5hbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQt
b3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJv
dG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVu
dGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgot
Ci0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3Rv
Y29sLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25z
Lmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51
bVR5cGU+Ci1PcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBT
dHJpbmcmIHZhbHVlKTsKLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90
b2NvbFBsYXRmb3JtIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVz
dFByb3RvY29sUGxhdGZvcm1BbGw6Ci0gICAgICAgIHJldHVybiAiYWxsIl9zOwotICAgIGNhc2Ug
VGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOgotICAgICAgICByZXR1cm4gImdlbmVyaWMiX3M7
Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzoKLSAgICAgICAgcmV0dXJuICJpb3Mi
X3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOgotICAgICAgICByZXR1cm4g
Im1hY29zIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQ
cm90b2NvbFBsYXRmb3JtPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkK
LXsKLSAgICBpZiAodmFsdWUgPT0gImFsbCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQ
bGF0Zm9ybUFsbDsKLSAgICBpZiAodmFsdWUgPT0gImdlbmVyaWMiKQotICAgICAgICByZXR1cm4g
VGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOwotICAgIGlmICh2YWx1ZSA9PSAiaW9zIikKLSAg
ICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOwotICAgIGlmICh2YWx1ZSA9PSAi
bWFjb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzsKLSAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmlu
ZyhUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGUgdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZh
bHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGVOdWxsOgotICAg
ICAgICByZXR1cm4gIm51bGwiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0
aFR5cGVTdHJpbmc6Ci0gICAgICAgIHJldHVybiAic3RyaW5nIl9zOwotICAgIGNhc2UgVGVzdFBy
b3RvY29sUnVudGltZUtleVBhdGhUeXBlQXJyYXk6Ci0gICAgICAgIHJldHVybiAiYXJyYXkiX3M7
Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sUnVu
dGltZUtleVBhdGhUeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkK
LXsKLSAgICBpZiAodmFsdWUgPT0gIm51bGwiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29s
UnVudGltZUtleVBhdGhUeXBlTnVsbDsKLSAgICBpZiAodmFsdWUgPT0gInN0cmluZyIpCi0gICAg
ICAgIHJldHVybiBUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGVTdHJpbmc7Ci0gICAgaWYg
KHZhbHVlID09ICJhcnJheSIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xSdW50aW1lS2V5
UGF0aFR5cGVBcnJheTsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi19IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1z
ZXR0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0KLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgotI2ltcG9ydCA8
V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLQotdXNpbmcgbmFt
ZXNwYWNlIEluc3BlY3RvcjsKLQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMgKFJ1bnRpbWVEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlS2V5UGF0aDooVGVzdFByb3RvY29s
UnVudGltZUtleVBhdGggKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0KLUBl
bmQKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoUnVudGlt
ZURvbWFpbikKLQotKyAodm9pZClfcGFyc2VLZXlQYXRoOihUZXN0UHJvdG9jb2xSdW50aW1lS2V5
UGF0aCAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOwotICAg
ICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sUnVudGltZUtleVBhdGggYWxsb2NdIGluaXRXaXRo
UGF5bG9hZDpwYXlsb2FkXTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBl
cy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFs
LXR5cGUtc2V0dGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3Rv
Y29sSlNPTk9iamVjdFByaXZhdGUuaD4KLSNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW1w
b3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0K
LUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aAotCi0tIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBp
ZD4gKilwYXlsb2FkCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAg
IHJldHVybiBuaWw7Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZ
KHBheWxvYWRbQCJ0eXBlIl0sIEAidHlwZSIpOwotICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbFJ1
bnRpbWVLZXlQYXRoVHlwZT4gdHlwZSA9IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xS
dW50aW1lS2V5UGF0aFR5cGU+KHBheWxvYWRbQCJ0eXBlIl0pOwotICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfQkFEX0VOVU1fVkFMVUUodHlwZSwgQCJ0eXBlIik7Ci0gICAgc2VsZi50eXBlID0gdHlw
ZS52YWx1ZSgpOwotCi0gICAgc2VsZi5zdHJpbmcgPSBwYXlsb2FkW0Aic3RyaW5nIl07Ci0KLSAg
ICBzZWxmLmFycmF5ID0gcGF5bG9hZFtAImFycmF5Il07Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0K
LS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05P
YmplY3QgKilvYmplY3QKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoSlNPTk9i
amVjdDpbb2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0KCldKSkKLSAgICAgICAgcmV0dXJuIG5pbDsK
LQotICAgIHJldHVybiBzZWxmOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhUeXBlOihU
ZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGUpdHlwZQotewotICAgIGlmICghKHNlbGYgPSBb
c3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgc2VsZi50eXBlID0gdHlw
ZTsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKXNldFR5cGU6KFRlc3RQcm90b2Nv
bFJ1bnRpbWVLZXlQYXRoVHlwZSl0eXBlCi17Ci0gICAgW3N1cGVyIHNldFN0cmluZzp0b1Byb3Rv
Y29sU3RyaW5nKHR5cGUpIGZvcktleTpAInR5cGUiXTsKLX0KLQotLSAoVGVzdFByb3RvY29sUnVu
dGltZUtleVBhdGhUeXBlKXR5cGUKLXsKLSAgICByZXR1cm4gZnJvbVByb3RvY29sU3RyaW5nPFRl
c3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZT4oW3N1cGVyIHN0cmluZ0ZvcktleTpAInR5cGUi
XSkudmFsdWUoKTsKLX0KLQotLSAodm9pZClzZXRTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nCi17
Ci0gICAgW3N1cGVyIHNldFN0cmluZzpzdHJpbmcgZm9yS2V5OkAic3RyaW5nIl07Ci19Ci0KLS0g
KE5TU3RyaW5nICopc3RyaW5nCi17Ci0gICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJz
dHJpbmciXTsKLX0KLQotLSAodm9pZClzZXRBcnJheTooTlNBcnJheS8qPE5TU3RyaW5nPiovICop
YXJyYXkKLXsKLSAgICBbc3VwZXIgc2V0SlNPTkFycmF5OnRvSlNPTlN0cmluZ0FycmF5KGFycmF5
KSBmb3JLZXk6QCJhcnJheSJdOwotfQotCi0tIChOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilhcnJh
eQotewotICAgIHJldHVybiB0b09iakNTdHJpbmdBcnJheShbc3VwZXIgSlNPTkFycmF5Rm9yS2V5
OkAiYXJyYXkiXSk7Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5
cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9zaG91bGQtc3RyaXAtY29tbWVudHMuanNvbi1yZXN1
bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJp
Yy9leHBlY3RlZC9zaG91bGQtc3RyaXAtY29tbWVudHMuanNvbi1yZXN1bHQKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDZhMWZiN2Q0ZjlkLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9z
aG91bGQtc3RyaXAtY29tbWVudHMuanNvbi1yZXN1bHQKKysrIC9kZXYvbnVsbApAQCAtMSw4NzAg
KzAsMCBAQAotIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNob3VsZC1zdHJpcC1jb21tZW50cy5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0jIyMgRW5kIEZpbGU6
IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVy
bmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCi0j
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotCi1uYW1l
c3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewot
cHVibGljOgotICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNw
YXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlz
cGF0Y2hlcik7IH0KLSAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBj
b25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Ci1wcml2YXRlOgotICAg
IFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKLX07Ci0KLQot
Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVy
cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlwLWNvbW1l
bnRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3By
YWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXR5cGVkZWYg
U3RyaW5nIEVycm9yU3RyaW5nOwotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMg
RW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBzaG91bGQtc3RyaXAtY29tbWVudHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEJhY2tl
bmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJv
bnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0
Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2lm
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotI2luY2x1ZGUgIlRlc3RB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgSW5zcGVj
dG9yIHsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRl
c3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmRE
aXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0
cmlwLWNvbW1lbnRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0j
aW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEZyb250ZW5kUm91dGVyOwotCi19
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0
Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLX0gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJz
LmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi1uYW1l
c3BhY2UgUHJvdG9jb2wgewotCi0KLQotCi0KLQotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9j
b2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bE9iamVjdHMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaG91bGQtc3RyaXAtY29tbWVudHMuanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotCi0jaW5jbHVkZSA8
d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLX0gLy8gbmFtZXNw
YWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xC
YWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNo
b3VsZC1zdHJpcC1jb21tZW50cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLQotCi1u
YW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1w
b3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbEludGVybmFsLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
LmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7
Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bEJhY2tlbmREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29u
ZmlndXJhdGlvbi5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0
cmlwLWNvbW1lbnRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgotCi1fX2F0dHJpYnV0
ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29u
ZmlndXJhdGlvbiA6IE5TT2JqZWN0Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xDb25maWd1cmF0aW9uLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3Vy
YXRpb24ubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaG91bGQtc3RyaXAt
Y29tbWVudHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCi0KLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbEludGVybmFsLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hl
cnMuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50
Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xs
ZXIuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmRE
aXNwYXRjaGVycy5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXJzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRh
dGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCi17Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0
b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
Q29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCi17
Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVy
biBuaWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIpOwotICAgIF9jb250cm9sbGVyID0gY29udHJv
bGxlcjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgW3N1
cGVyIGRlYWxsb2NdOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xD
b25maWd1cmF0aW9uLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3Bh
dGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlw
LWNvbW1lbnRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2lu
ZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZl
bnREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaG91bGQtc3RyaXAtY29tbWVudHMuanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxGb3Vu
ZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29s
SlNPTk9iamVjdC5oPgotCi0KLQotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJv
dG9jb2xQbGF0Zm9ybSkgewotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsLAotICAgIFRlc3RQ
cm90b2NvbFBsYXRmb3JtR2VuZXJpYywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUywKLSAg
ICBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TLAotfTsKLQotCi0KLQotCi0KLQotCi0KLQotI2lt
cG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5o
PgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xJbnRlcm5hbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hv
dWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2xKU09OT2JqZWN0UHJpdmF0ZS5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFi
bGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi0K
LQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1w
b3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+Ci0KLW5hbWVz
cGFjZSBJbnNwZWN0b3IgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+Ci1PcHRp
b25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVl
KTsKLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFBsYXRmb3Jt
IHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sUGxh
dGZvcm1BbGw6Ci0gICAgICAgIHJldHVybiAiYWxsIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29s
UGxhdGZvcm1HZW5lcmljOgotICAgICAgICByZXR1cm4gImdlbmVyaWMiX3M7Ci0gICAgY2FzZSBU
ZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzoKLSAgICAgICAgcmV0dXJuICJpb3MiX3M7Ci0gICAgY2Fz
ZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOgotICAgICAgICByZXR1cm4gIm1hY29zIl9zOwot
ICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFBsYXRm
b3JtPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAo
dmFsdWUgPT0gImFsbCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDsK
LSAgICBpZiAodmFsdWUgPT0gImdlbmVyaWMiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29s
UGxhdGZvcm1HZW5lcmljOwotICAgIGlmICh2YWx1ZSA9PSAiaW9zIikKLSAgICAgICAgcmV0dXJu
IFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOwotICAgIGlmICh2YWx1ZSA9PSAibWFjb3MiKQotICAg
ICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzsKLSAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
c2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0K
LSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNl
ci5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUu
aD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0KLQotCi0KLSMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xUeXBlcy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNob3Vs
ZC1zdHJpcC1jb21tZW50cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVBy
b3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLSNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0j
aW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwot
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVk
L3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uLXJlc3VsdCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVj
dGVkL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uLXJlc3VsdApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjU2NjYzNzljYTcuLjAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uLXJl
c3VsdAorKysgL2Rldi9udWxsCkBAIC0xLDg5MSArMCwwIEBACi0jIyMgQmVnaW4gRmlsZTogSW5z
cGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLSMjIyBFbmQgRmlsZTogSW5zcGVjdG9y
QmFja2VuZENvbW1hbmRzLmpzCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2Vu
ZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRl
Y2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShJTlNQ
RUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlw
ZXMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+
Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0
Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFj
a2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RG
TW92ZShkaXNwYXRjaGVyKTsgfQotICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0
Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KLXByaXZh
dGU6Ci0gICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwot
fTsKLQotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSNlbmRpZiAvLyBFTkFCTEUo
SU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSMjIyBFbmQgRmlsZTogVGVzdEFsdGVy
bmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERp
c3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xh
cmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90
b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKLQotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KLQotCi19IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVy
cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmlt
aXRpdmUtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJz
LmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5o
PgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJv
eWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jaWYgRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tl
bmREaXNwYXRjaGVycy5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQot
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNw
YXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFz
ZWQtcHJpbWl0aXZlLXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMu
aCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgRnJvbnRlbmRSb3V0ZXI7
Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmRE
aXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5j
cHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFs
aWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEZyb250ZW5k
RGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250
ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTog
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xPYmplY3RzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xh
cmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9u
cy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLW5hbWVzcGFjZSBQcm90b2NvbCB7
Ci0KLQotCi0KLQotLy8gVHlwZWRlZnMuCi1uYW1lc3BhY2UgUnVudGltZSB7Ci0vKiBVbmlxdWUg
b2JqZWN0IGlkZW50aWZpZXIuICovCi10eXBlZGVmIGludCBSZW1vdGVPYmplY3RJZDsKLX0gLy8g
UnVudGltZQotLy8gRW5kIG9mIHR5cGVkZWZzLgotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9j
b2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bE9iamVjdHMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQt
cHJpbWl0aXZlLXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0
cy5oIgotCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotbmFtZXNwYWNlIFByb3RvY29sIHsK
LQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4K
LSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLQotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsK
LQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFj
a2VuZERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlw
ZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0
ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgIlRlc3RQcm90
b2NvbEludGVybmFsLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgi
Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0K
LX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJh
Y2tlbmREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbi5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJh
dGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5o
PgotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2Ug
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0Ci1AZW5kCi0KLQotIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgotLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xD
b25maWd1cmF0aW9uLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW1w
b3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0
Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0KLXVzaW5nIG5h
bWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1
cmF0aW9uCi17Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxl
cjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJ
bnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0
XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJUKGNvbnRy
b2xsZXIpOwotICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1cm4gc2VsZjsK
LX0KLQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi1AZW5k
Ci0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10
eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2lt
cG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1l
c3BhY2UgSW5zcGVjdG9yOwotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNw
YXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZl
LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0j
aW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9y
L1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgotCi0KLQotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRl
Z2VyLCBUZXN0UHJvdG9jb2xQbGF0Zm9ybSkgewotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxs
LAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYywKLSAgICBUZXN0UHJvdG9jb2xQbGF0
Zm9ybUlPUywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TLAotfTsKLQotCi0KLQotCi0K
LQotCi0KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmls
aXR5T2JqZWN0cy5oPgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFBy
b3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgotI2lt
cG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0j
aW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbEludGVybmFsLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlv
bi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0IDxXZWJJ
bnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNw
ZWN0b3IgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+Ci1PcHRpb25hbDxPYmpD
RW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKLQotaW5s
aW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFBsYXRmb3JtIHZhbHVlKQot
ewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1BbGw6
Ci0gICAgICAgIHJldHVybiAiYWxsIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1H
ZW5lcmljOgotICAgICAgICByZXR1cm4gImdlbmVyaWMiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9j
b2xQbGF0Zm9ybUlPUzoKLSAgICAgICAgcmV0dXJuICJpb3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJv
dG9jb2xQbGF0Zm9ybU1hY09TOgotICAgICAgICByZXR1cm4gIm1hY29zIl9zOwotICAgIH0KLX0K
LQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFBsYXRmb3JtPiBmcm9t
UHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0g
ImFsbCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDsKLSAgICBpZiAo
dmFsdWUgPT0gImdlbmVyaWMiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1H
ZW5lcmljOwotICAgIGlmICh2YWx1ZSA9PSAiaW9zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90
b2NvbFBsYXRmb3JtSU9TOwotICAgIGlmICh2YWx1ZSA9PSAibWFjb3MiKQotICAgICAgICByZXR1
cm4gVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0Owot
fQotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUt
ZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90
b2NvbFR5cGVQYXJzZXIuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05P
YmplY3RQcml2YXRlLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbnRlcmZh
Y2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChSdW50aW1lRG9tYWluKQotCi0rICh2b2lk
KV9wYXJzZVJlbW90ZU9iamVjdElkOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDoo
aWQpcGF5bG9hZDsKLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zIChSdW50aW1lRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZVJlbW90ZU9iamVjdElk
OihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TTnVtYmVyIGNsYXNzXSk7Ci0g
ICAgKm91dFZhbHVlID0gKE5TTnVtYmVyICopcGF5bG9hZDsKLX0KLQotQGVuZAotCi0KLSMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xUeXBlcy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbElu
dGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2lt
cG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLSNpbXBv
cnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2lu
ZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUu
anNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZ2VuZXJpYy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbi1yZXN1
bHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0ZTVjN2U0MDkxLi4wMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2Vu
ZXJpYy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbi1yZXN1bHQKKysr
IC9kZXYvbnVsbApAQCAtMSwxMDczICswLDAgQEAKLSMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JC
YWNrZW5kQ29tbWFuZHMuanMKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBl
LWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0vLyBEZWJ1Z2dlcgotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRv
bWFpbigiRGVidWdnZXIiLCBudWxsKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJE
ZWJ1Z2dlci5SZWFzb24iLCB7RGllZDogIkRpZWQiLCBGYWludGVkOiAiRmFpbnRlZCIsIEh1bmdy
eTogIkh1bmdyeSJ9KTsKLUluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkRlYnVnZ2Vy
IiwgbnVsbCk7Ci0jIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBv
bmNlCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQotI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JGcm9udGVuZFJvdXRlci5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3Mg
QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZvaWQgc2V0QmFja2Vu
ZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9i
YWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KLSAgICBCYWNrZW5kRGlz
cGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNw
YXRjaGVyLmdldCgpOyB9Ci1wcml2YXRlOgotICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4g
bV9iYWNrZW5kRGlzcGF0Y2hlcjsKLX07Ci0KLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgotCi0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0j
IyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRl
ICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
LQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwot
Ci0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5k
RGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5j
cHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFy
cmF5LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5o
IgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4K
LSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3ll
ZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2lmIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5k
RGlzcGF0Y2hlcnMuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLX0g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0
Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10
eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3By
YWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8
d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFt
ZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEZyb250ZW5kUm91dGVyOwotCi19IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAot
Ci0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLX0gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNw
cAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0K
LSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5j
bHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi1u
YW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCi1uYW1l
c3BhY2UgRGVidWdnZXIgewotZW51bSBjbGFzcyBSZWFzb247Ci19IC8vIERlYnVnZ2VyCi0vLyBF
bmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCi0KLQotLy8gVHlwZWRlZnMuCi1uYW1lc3BhY2Ug
RGVidWdnZXIgewotdHlwZWRlZiBpbnQgQnJlYWtwb2ludElkOwotfSAvLyBEZWJ1Z2dlcgotCi1u
YW1lc3BhY2UgUnVudGltZSB7Ci10eXBlZGVmIGludCBPYmplY3RJZDsKLXR5cGVkZWYgSlNPTjo6
QXJyYXlPZjxpbnQ+IEx1Y2t5TnVtYmVyczsKLXR5cGVkZWYgSlNPTjo6QXJyYXlPZjxTdHJpbmc+
IEJhYnlOYW1lczsKLXR5cGVkZWYgSlNPTjo6QXJyYXlPZjxpbnQ+IE5ld09iamVjdHM7Ci10eXBl
ZGVmIEpTT046OkFycmF5T2Y8aW50PiBPbGRPYmplY3RzOwotdHlwZWRlZiBKU09OOjpBcnJheU9m
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb24+IFN0b3BSZWFzb25zOwotfSAv
LyBSdW50aW1lCi0vLyBFbmQgb2YgdHlwZWRlZnMuCi0KLW5hbWVzcGFjZSBUZXN0SGVscGVycyB7
Ci0KLVN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSk7Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+IFN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkKLXsKLSAg
ICByZXR1cm4gZ2V0RW51bUNvbnN0YW50VmFsdWUoc3RhdGljX2Nhc3Q8aW50PihlbnVtVmFsdWUp
KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKLQotbmFtZXNwYWNlIERlYnVnZ2Vy
IHsKLS8qICAqLwotZW51bSBjbGFzcyBSZWFzb24gewotICAgIERpZWQgPSAwLAotICAgIEZhaW50
ZWQgPSAxLAotICAgIEh1bmdyeSA9IDIsCi19OyAvLyBlbnVtIGNsYXNzIFJlYXNvbgotfSAvLyBE
ZWJ1Z2dlcgotCi0KLQotbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKLQotdGVtcGxhdGU8dHlwZW5h
bWUgUHJvdG9jb2xFbnVtVHlwZT4KLU9wdGlvbmFsPFByb3RvY29sRW51bVR5cGU+IHBhcnNlRW51
bVZhbHVlRnJvbVN0cmluZyhjb25zdCBTdHJpbmcmKTsKLQotLy8gRW51bXMgaW4gdGhlICdEZWJ1
Z2dlcicgRG9tYWluCi10ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpE
ZWJ1Z2dlcjo6UmVhc29uPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90
b2NvbDo6RGVidWdnZXI6OlJlYXNvbj4oY29uc3QgU3RyaW5nJik7Ci0KLX0gLy8gbmFtZXNwYWNl
IFRlc3RIZWxwZXJzCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgotCi1uYW1lc3BhY2UgV1RGIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3Ry
dWN0IERlZmF1bHRIYXNoOwotCi0vLyBIYXNoIGRlY2xhcmF0aW9ucyBpbiB0aGUgJ0RlYnVnZ2Vy
JyBEb21haW4KLXRlbXBsYXRlPD4KLXN0cnVjdCBEZWZhdWx0SGFzaDxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEZWJ1Z2dlcjo6UmVhc29uPiB7Ci0gICAgdHlwZWRlZiBJbnRIYXNoPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb24+IEhhc2g7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBX
VEYKLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0KLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1uYW1l
c3BhY2UgUHJvdG9jb2wgewotCi1uYW1lc3BhY2UgVGVzdEhlbHBlcnMgewotCi1zdGF0aWMgY29u
c3QgY2hhciogY29uc3QgZW51bV9jb25zdGFudF92YWx1ZXNbXSA9IHsKLSAgICAiRGllZCIsCi0g
ICAgIkZhaW50ZWQiLAotICAgICJIdW5ncnkiLAotfTsKLQotU3RyaW5nIGdldEVudW1Db25zdGFu
dFZhbHVlKGludCBjb2RlKSB7Ci0gICAgcmV0dXJuIGVudW1fY29uc3RhbnRfdmFsdWVzW2NvZGVd
OwotfQotCi0vLyBFbnVtcyBpbiB0aGUgJ0RlYnVnZ2VyJyBEb21haW4KLXRlbXBsYXRlPD4KLU9w
dGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb24+IHBhcnNlRW51bVZh
bHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uPihjb25z
dCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQotewotICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29u
c3RhbnRWYWx1ZXNbXSA9IHsKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpE
ZWJ1Z2dlcjo6UmVhc29uOjpEaWVkLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRlYnVnZ2VyOjpSZWFzb246OkZhaW50ZWQsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9y
OjpQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbjo6SHVuZ3J5LAotICAgIH07Ci0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCAzOyArK2kpCi0gICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBl
bnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCi0gICAgICAgICAgICByZXR1
cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb24pY29uc3RhbnRWYWx1ZXNb
aV07Ci0KLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi0KLX0gLy8gbmFtZXNwYWNlIFRl
c3RIZWxwZXJzCi0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0j
aW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi0KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0K
LQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
QmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tl
bmREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUt
ZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29s
QmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5o
IgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2luY2x1ZGUgPHd0
Zi9KU09OVmFsdWVzLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi19IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hl
cnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlw
ZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBv
cnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KLQotX19hdHRyaWJ1dGVfXygodmlzaWJp
bGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24g
OiBOU09iamVjdAotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJh
dGlvbi5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10
eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2lt
cG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2xJbnRlcm5hbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgi
Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgot
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+
Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0
Y2hlcnMuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVycy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW1wbGVtZW50YXRpb24g
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29u
dHJvbGxlciogX2NvbnRyb2xsZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRy
b2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgotewotICAg
IHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmls
OwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7
Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAgIFtzdXBlciBk
ZWFsbG9jXTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbi5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVy
cy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24t
YXJyYXktdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNp
bmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2
ZW50RGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBl
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9y
dCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQ
cm90b2NvbEpTT05PYmplY3QuaD4KLQotCi0KLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwg
VGVzdFByb3RvY29sUGxhdGZvcm0pIHsKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbCwKLSAg
ICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWMsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1J
T1MsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUywKLX07Ci0KLQotdHlwZWRlZiBOU19F
TlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGVidWdnZXJSZWFzb24pIHsKLSAgICBUZXN0UHJv
dG9jb2xEZWJ1Z2dlclJlYXNvbkRpZWQsCi0gICAgVGVzdFByb3RvY29sRGVidWdnZXJSZWFzb25G
YWludGVkLAotICAgIFRlc3RQcm90b2NvbERlYnVnZ2VyUmVhc29uSHVuZ3J5LAotfTsKLQotCi0K
LQotCi0KLQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGli
aWxpdHlPYmplY3RzLmg+Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIK
LSNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCi0jaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPHd0
Zi9KU09OVmFsdWVzLmg+Ci0KLQotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJu
YWwuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5
cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1w
b3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFy
cmF5Q29udmVyc2lvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIE9iakNFbnVtVHlwZT4KLU9wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29s
U3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOwotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xT
dHJpbmcoVGVzdFByb3RvY29sUGxhdGZvcm0gdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7
Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDoKLSAgICAgICAgcmV0dXJuICJhbGwi
X3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM6Ci0gICAgICAgIHJldHVy
biAiZ2VuZXJpYyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOgotICAgICAg
ICByZXR1cm4gImlvcyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M6Ci0g
ICAgICAgIHJldHVybiAibWFjb3MiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUg
T3B0aW9uYWw8VGVzdFByb3RvY29sUGxhdGZvcm0+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBT
dHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiYWxsIikKLSAgICAgICAgcmV0dXJu
IFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOwotICAgIGlmICh2YWx1ZSA9PSAiZ2VuZXJpYyIpCi0g
ICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM7Ci0gICAgaWYgKHZhbHVl
ID09ICJpb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1JT1M7Ci0gICAg
aWYgKHZhbHVlID09ICJtYWNvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9y
bU1hY09TOwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLQotaW5saW5lIFN0cmluZyB0
b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbERlYnVnZ2VyUmVhc29uIHZhbHVlKQotewotICAg
IHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sRGVidWdnZXJSZWFzb25EaWVk
OgotICAgICAgICByZXR1cm4gIkRpZWQiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEZWJ1Z2dl
clJlYXNvbkZhaW50ZWQ6Ci0gICAgICAgIHJldHVybiAiRmFpbnRlZCJfczsKLSAgICBjYXNlIFRl
c3RQcm90b2NvbERlYnVnZ2VyUmVhc29uSHVuZ3J5OgotICAgICAgICByZXR1cm4gIkh1bmdyeSJf
czsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xE
ZWJ1Z2dlclJlYXNvbj4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17
Ci0gICAgaWYgKHZhbHVlID09ICJEaWVkIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERl
YnVnZ2VyUmVhc29uRGllZDsKLSAgICBpZiAodmFsdWUgPT0gIkZhaW50ZWQiKQotICAgICAgICBy
ZXR1cm4gVGVzdFByb3RvY29sRGVidWdnZXJSZWFzb25GYWludGVkOwotICAgIGlmICh2YWx1ZSA9
PSAiSHVuZ3J5IikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERlYnVnZ2VyUmVhc29uSHVu
Z3J5OwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAot
Ci0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAi
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5o
IgotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgotI2ltcG9ydCA8V2ViSW5zcGVj
dG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLQotdXNpbmcgbmFtZXNwYWNlIElu
c3BlY3RvcjsKLQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKERlYnVn
Z2VyRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZUJyZWFrcG9pbnRJZDooTlNOdW1iZXIgKiopb3V0
VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZVJlYXNvbjooTlNO
dW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0KLUBlbmQKLUBpbnRl
cmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChSdW50aW1lRG9tYWluKQotCi0rICh2
b2lkKV9wYXJzZU9iamVjdElkOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQp
cGF5bG9hZDsKLSsgKHZvaWQpX3BhcnNlTHVja3lOdW1iZXJzOihOU0FycmF5Lyo8TlNOdW1iZXI+
Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZUJh
YnlOYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihp
ZClwYXlsb2FkOwotKyAodm9pZClfcGFyc2VOZXdPYmplY3RzOihOU0FycmF5Lyo8TlNOdW1iZXI+
Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZU9s
ZE9iamVjdHM6KE5TQXJyYXkvKjxOU051bWJlcj4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDoo
aWQpcGF5bG9hZDsKLSsgKHZvaWQpX3BhcnNlU3RvcFJlYXNvbnM6KE5TQXJyYXkvKjxOU1N0cmlu
Zz4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLQotQGVuZAotCi1AaW1w
bGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChEZWJ1Z2dlckRvbWFpbikK
LQotKyAodm9pZClfcGFyc2VCcmVha3BvaW50SWQ6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21Q
YXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShw
YXlsb2FkLCBbTlNOdW1iZXIgY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSAoTlNOdW1iZXIgKilw
YXlsb2FkOwotfQotCi0rICh2b2lkKV9wYXJzZVJlYXNvbjooTlNOdW1iZXIgKiopb3V0VmFsdWUg
ZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9U
WVBFKHBheWxvYWQsIFtOU1N0cmluZyBjbGFzc10pOwotICAgIE9wdGlvbmFsPFRlc3RQcm90b2Nv
bERlYnVnZ2VyUmVhc29uPiByZXN1bHQgPSBJbnNwZWN0b3I6OmZyb21Qcm90b2NvbFN0cmluZzxU
ZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbj4ocGF5bG9hZCk7Ci0gICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9CQURfRU5VTV9WQUxVRShyZXN1bHQsIEAiUmVhc29uIik7Ci0gICAgKm91dFZhbHVlID0g
QChyZXN1bHQudmFsdWUoKSk7Ci19Ci0KLUBlbmQKLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMgKFJ1bnRpbWVEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlT2JqZWN0
SWQ6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNOdW1iZXIgY2xhc3NdKTsK
LSAgICAqb3V0VmFsdWUgPSAoTlNOdW1iZXIgKilwYXlsb2FkOwotfQotCi0rICh2b2lkKV9wYXJz
ZUx1Y2t5TnVtYmVyczooTlNBcnJheS8qPE5TTnVtYmVyPiovICoqKW91dFZhbHVlIGZyb21QYXls
b2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXls
b2FkLCBbTlNBcnJheS8qPE5TTnVtYmVyPiovIGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gKE5T
QXJyYXkvKjxOU051bWJlcj4qLyAqKXBheWxvYWQ7Ci19Ci0KLSsgKHZvaWQpX3BhcnNlQmFieU5h
bWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBh
eWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0Fy
cmF5Lyo8TlNTdHJpbmc+Ki8gY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSAoTlNBcnJheS8qPE5T
U3RyaW5nPiovICopcGF5bG9hZDsKLX0KLQotKyAodm9pZClfcGFyc2VOZXdPYmplY3RzOihOU0Fy
cmF5Lyo8TlNOdW1iZXI+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsK
LSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0FycmF5Lyo8TlNO
dW1iZXI+Ki8gY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSAoTlNBcnJheS8qPE5TTnVtYmVyPiov
ICopcGF5bG9hZDsKLX0KLQotKyAodm9pZClfcGFyc2VPbGRPYmplY3RzOihOU0FycmF5Lyo8TlNO
dW1iZXI+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJP
V19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0FycmF5Lyo8TlNOdW1iZXI+Ki8g
Y2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSAoTlNBcnJheS8qPE5TTnVtYmVyPiovICopcGF5bG9h
ZDsKLX0KLQotKyAodm9pZClfcGFyc2VTdG9wUmVhc29uczooTlNBcnJheS8qPE5TU3RyaW5nPiov
ICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNBcnJheS8qPE5TU3RyaW5nPiovIGNsYXNzXSk7
Ci0gICAgKm91dFZhbHVlID0gKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKXBheWxvYWQ7Ci19Ci0K
LUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQot
Ci0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIK
LSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0j
aW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQot
dXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0KLQotCi0KLSMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tZW51
bS10eXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNv
bi1yZXN1bHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5NzllOGRiZTJmLi4wMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZ2VuZXJpYy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uLXJlc3Vs
dAorKysgL2Rldi9udWxsCkBAIC0xLDEwODYgKzAsMCBAQAotIyMjIEJlZ2luIEZpbGU6IEluc3Bl
Y3RvckJhY2tlbmRDb21tYW5kcy5qcwotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotLy8gUnVudGltZQotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rl
ckRvbWFpbigiUnVudGltZSIsIG51bGwpOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0o
IlJ1bnRpbWUuRmFybUFuaW1hbHMiLCB7UGlnczogIlBpZ3MiLCBDb3dzOiAiQ293cyIsIENhdHM6
ICJDYXRzIiwgSGVuczogIkhlbnMifSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgi
UnVudGltZS5Ud29MZWdnZWRBbmltYWxzIiwge0R1Y2tzOiAiRHVja3MiLCBIZW5zOiAiSGVucyIs
IENyb3dzOiAiQ3Jvd3MiLCBGbGFtaW5nb3M6ICJGbGFtaW5nb3MifSk7Ci1JbnNwZWN0b3JCYWNr
ZW5kLmFjdGl2YXRlRG9tYWluKCJSdW50aW1lIiwgbnVsbCk7Ci0jIyMgRW5kIEZpbGU6IEluc3Bl
Y3RvckJhY2tlbmRDb21tYW5kcy5qcwotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlw
ZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKLSNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0KLW5hbWVz
cGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1w
dWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3Bh
dGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNw
YXRjaGVyKTsgfQotICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNv
bnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KLXByaXZhdGU6Ci0gICAg
UmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwotfTsKLQotCi0K
LQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tl
bmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJz
LmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVu
dW0tdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10eXBl
ZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgot
IyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
VGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2lu
Y2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotI2luY2x1
ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNlbmRpZgotCi1uYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5k
IEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
RnJvbnRlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
dHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bE9iamVjdHMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgRnJvbnRl
bmRSb3V0ZXI7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0
RnJvbnRlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNw
YXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xh
cmF0aW9uLWVudW0tdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNw
YXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRS
b3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNw
ZWN0b3IgewotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0
RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9i
amVjdHMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRp
b24tZW51bS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQ
cm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFtZXNwYWNl
IEluc3BlY3RvciB7Ci0KLQotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotLy8gRm9yd2Fy
ZCBkZWNsYXJhdGlvbnMuCi1uYW1lc3BhY2UgUnVudGltZSB7Ci1lbnVtIGNsYXNzIEZhcm1Bbmlt
YWxzOwotZW51bSBjbGFzcyBUd29MZWdnZWRBbmltYWxzOwotfSAvLyBSdW50aW1lCi0vLyBFbmQg
b2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCi0KLQotCi0KLW5hbWVzcGFjZSBUZXN0SGVscGVycyB7
Ci0KLVN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSk7Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+IFN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkKLXsKLSAg
ICByZXR1cm4gZ2V0RW51bUNvbnN0YW50VmFsdWUoc3RhdGljX2Nhc3Q8aW50PihlbnVtVmFsdWUp
KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKLQotbmFtZXNwYWNlIFJ1bnRpbWUg
ewotLyogICovCi1lbnVtIGNsYXNzIEZhcm1BbmltYWxzIHsKLSAgICBQaWdzID0gMCwKLSAgICBD
b3dzID0gMSwKLSAgICBDYXRzID0gMiwKLSAgICBIZW5zID0gMywKLX07IC8vIGVudW0gY2xhc3Mg
RmFybUFuaW1hbHMKLS8qICAqLwotZW51bSBjbGFzcyBUd29MZWdnZWRBbmltYWxzIHsKLSAgICBE
dWNrcyA9IDQsCi0gICAgSGVucyA9IDMsCi0gICAgQ3Jvd3MgPSA1LAotICAgIEZsYW1pbmdvcyA9
IDYsCi19OyAvLyBlbnVtIGNsYXNzIFR3b0xlZ2dlZEFuaW1hbHMKLX0gLy8gUnVudGltZQotCi0K
LQotbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgUHJvdG9jb2xF
bnVtVHlwZT4KLU9wdGlvbmFsPFByb3RvY29sRW51bVR5cGU+IHBhcnNlRW51bVZhbHVlRnJvbVN0
cmluZyhjb25zdCBTdHJpbmcmKTsKLQotLy8gRW51bXMgaW4gdGhlICdSdW50aW1lJyBEb21haW4K
LXRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1B
bmltYWxzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVu
dGltZTo6RmFybUFuaW1hbHM+KGNvbnN0IFN0cmluZyYpOwotdGVtcGxhdGU8PgotT3B0aW9uYWw8
SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFscz4gcGFyc2VFbnVt
VmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFu
aW1hbHM+KGNvbnN0IFN0cmluZyYpOwotCi19IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwotCi19
IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotbmFt
ZXNwYWNlIFdURiB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsK
LQotLy8gSGFzaCBkZWNsYXJhdGlvbnMgaW4gdGhlICdSdW50aW1lJyBEb21haW4KLXRlbXBsYXRl
PD4KLXN0cnVjdCBEZWZhdWx0SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpGYXJt
QW5pbWFscz4gewotICAgIHR5cGVkZWYgSW50SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50
aW1lOjpGYXJtQW5pbWFscz4gSGFzaDsKLX07Ci10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgRGVmYXVsdEhh
c2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFscz4gewotICAg
IHR5cGVkZWYgSW50SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUd29MZWdnZWRB
bmltYWxzPiBIYXNoOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0jIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbE9iamVjdHMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0
cy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9u
LWVudW0tdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgi
Ci0KLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi1u
YW1lc3BhY2UgVGVzdEhlbHBlcnMgewotCi1zdGF0aWMgY29uc3QgY2hhciogY29uc3QgZW51bV9j
b25zdGFudF92YWx1ZXNbXSA9IHsKLSAgICAiUGlncyIsCi0gICAgIkNvd3MiLAotICAgICJDYXRz
IiwKLSAgICAiSGVucyIsCi0gICAgIkR1Y2tzIiwKLSAgICAiQ3Jvd3MiLAotICAgICJGbGFtaW5n
b3MiLAotfTsKLQotU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7Ci0gICAg
cmV0dXJuIGVudW1fY29uc3RhbnRfdmFsdWVzW2NvZGVdOwotfQotCi0vLyBFbnVtcyBpbiB0aGUg
J1J1bnRpbWUnIERvbWFpbgotdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6UnVudGltZTo6RmFybUFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0
b3I6OlByb3RvY29sOjpSdW50aW1lOjpGYXJtQW5pbWFscz4oY29uc3QgU3RyaW5nJiBwcm90b2Nv
bFN0cmluZykKLXsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7
Ci0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1h
bHM6OlBpZ3MsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6
RmFybUFuaW1hbHM6OkNvd3MsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6
UnVudGltZTo6RmFybUFuaW1hbHM6OkNhdHMsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQ
cm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM6OkhlbnMsCi0gICAgfTsKLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IDQ7ICsraSkKLSAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVu
dW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAgICAgICAgIHJldHVy
biAoSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHMpY29uc3RhbnRWYWx1
ZXNbaV07Ci0KLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi10ZW1wbGF0ZTw+Ci1PcHRp
b25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxzPiBwYXJz
ZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHdvTGVn
Z2VkQW5pbWFscz4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKLXsKLSAgICBzdGF0aWMg
Y29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7Ci0gICAgICAgIChzaXplX3QpSW5zcGVj
dG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFsczo6RHVja3MsCi0gICAgICAg
IChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFsczo6
SGVucywKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUd29M
ZWdnZWRBbmltYWxzOjpDcm93cywKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29s
OjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxzOjpGbGFtaW5nb3MsCi0gICAgfTsKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IDQ7ICsraSkKLSAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09
IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAgICAgICAgIHJl
dHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFscyljb25z
dGFudFZhbHVlc1tpXTsKLQotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLQotfSAvLyBu
YW1lc3BhY2UgVGVzdEhlbHBlcnMKLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVj
dHMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMu
aAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51
bS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVycy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQotCi0KLW5hbWVzcGFjZSBJbnNw
ZWN0b3IgewotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVz
dFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xJ
bnRlcm5hbC5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2lu
Y2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi19IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5k
RGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRp
b24uaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24t
ZW51bS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgotCi1fX2F0dHJpYnV0ZV9f
KCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbiA6IE5TT2JqZWN0Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xD
b25maWd1cmF0aW9uLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRp
b24ubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9u
LWVudW0tdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKLQotI2ltcG9ydCAiVGVz
dFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRj
aGVycy5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdl
bnQuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJv
bGxlci5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2Vu
ZERpc3BhdGNoZXJzLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcnMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGltcGxlbWVu
dGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KLXsKLSAgICBBdWdtZW50YWJsZUluc3Bl
Y3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIK
LXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0
dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250
cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBb
c3VwZXIgZGVhbGxvY107Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24ubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlz
cGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xh
cmF0aW9uLWVudW0tdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4K
LQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5o
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVt
LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0j
aW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9y
L1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgotCi0KLQotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRl
Z2VyLCBUZXN0UHJvdG9jb2xQbGF0Zm9ybSkgewotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxs
LAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYywKLSAgICBUZXN0UHJvdG9jb2xQbGF0
Zm9ybUlPUywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TLAotfTsKLQotCi10eXBlZGVm
IE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHMpIHsKLSAg
ICBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHNQaWdzLAotICAgIFRlc3RQcm90b2NvbFJ1
bnRpbWVGYXJtQW5pbWFsc0Nvd3MsCi0gICAgVGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxz
Q2F0cywKLSAgICBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHNIZW5zLAotfTsKLQotdHlw
ZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1h
bHMpIHsKLSAgICBUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFsc0R1Y2tzLAotICAg
IFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzSGVucywKLSAgICBUZXN0UHJvdG9j
b2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFsc0Nyb3dzLAotICAgIFRlc3RQcm90b2NvbFJ1bnRpbWVU
d29MZWdnZWRBbmltYWxzRmxhbWluZ29zLAotfTsKLQotCi0KLQotCi0KLQotCi0jaW1wb3J0IDxX
ZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+Ci0KLSMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bEludGVybmFsLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xh
cmF0aW9uLWVudW0tdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29s
SlNPTk9iamVjdFByaXZhdGUuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxl
SW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotCi0K
LQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0j
aW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+Ci0KLW5h
bWVzcGFjZSBJbnNwZWN0b3IgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+Ci1P
cHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZh
bHVlKTsKLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFBsYXRm
b3JtIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29s
UGxhdGZvcm1BbGw6Ci0gICAgICAgIHJldHVybiAiYWxsIl9zOwotICAgIGNhc2UgVGVzdFByb3Rv
Y29sUGxhdGZvcm1HZW5lcmljOgotICAgICAgICByZXR1cm4gImdlbmVyaWMiX3M7Ci0gICAgY2Fz
ZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzoKLSAgICAgICAgcmV0dXJuICJpb3MiX3M7Ci0gICAg
Y2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOgotICAgICAgICByZXR1cm4gIm1hY29zIl9z
OwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFBs
YXRmb3JtPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBp
ZiAodmFsdWUgPT0gImFsbCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFs
bDsKLSAgICBpZiAodmFsdWUgPT0gImdlbmVyaWMiKQotICAgICAgICByZXR1cm4gVGVzdFByb3Rv
Y29sUGxhdGZvcm1HZW5lcmljOwotICAgIGlmICh2YWx1ZSA9PSAiaW9zIikKLSAgICAgICAgcmV0
dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOwotICAgIGlmICh2YWx1ZSA9PSAibWFjb3MiKQot
ICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzsKLSAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwotfQotCi0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJv
dG9jb2xSdW50aW1lRmFybUFuaW1hbHMgdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0g
ICAgY2FzZSBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHNQaWdzOgotICAgICAgICByZXR1
cm4gIlBpZ3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHNDb3dz
OgotICAgICAgICByZXR1cm4gIkNvd3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xSdW50aW1l
RmFybUFuaW1hbHNDYXRzOgotICAgICAgICByZXR1cm4gIkNhdHMiX3M7Ci0gICAgY2FzZSBUZXN0
UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHNIZW5zOgotICAgICAgICByZXR1cm4gIkhlbnMiX3M7
Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sUnVu
dGltZUZhcm1BbmltYWxzPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkK
LXsKLSAgICBpZiAodmFsdWUgPT0gIlBpZ3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29s
UnVudGltZUZhcm1BbmltYWxzUGlnczsKLSAgICBpZiAodmFsdWUgPT0gIkNvd3MiKQotICAgICAg
ICByZXR1cm4gVGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzQ293czsKLSAgICBpZiAodmFs
dWUgPT0gIkNhdHMiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUnVudGltZUZhcm1Bbmlt
YWxzQ2F0czsKLSAgICBpZiAodmFsdWUgPT0gIkhlbnMiKQotICAgICAgICByZXR1cm4gVGVzdFBy
b3RvY29sUnVudGltZUZhcm1BbmltYWxzSGVuczsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0Owot
fQotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sUnVudGltZVR3
b0xlZ2dlZEFuaW1hbHMgdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBU
ZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFsc0R1Y2tzOgotICAgICAgICByZXR1cm4g
IkR1Y2tzIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHNI
ZW5zOgotICAgICAgICByZXR1cm4gIkhlbnMiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xSdW50
aW1lVHdvTGVnZ2VkQW5pbWFsc0Nyb3dzOgotICAgICAgICByZXR1cm4gIkNyb3dzIl9zOwotICAg
IGNhc2UgVGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHNGbGFtaW5nb3M6Ci0gICAg
ICAgIHJldHVybiAiRmxhbWluZ29zIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5l
IE9wdGlvbmFsPFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzPiBmcm9tUHJvdG9j
b2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gIkR1Y2tz
IikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzRHVj
a3M7Ci0gICAgaWYgKHZhbHVlID09ICJIZW5zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2Nv
bFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzSGVuczsKLSAgICBpZiAodmFsdWUgPT0gIkNyb3dzIikK
LSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzQ3Jvd3M7
Ci0gICAgaWYgKHZhbHVlID09ICJGbGFtaW5nb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3Rv
Y29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHNGbGFtaW5nb3M7Ci0gICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5
cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgi
Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBh
cnNlci5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZh
dGUuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGludGVyZmFjZSBUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMgKFJ1bnRpbWVEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlRmFy
bUFuaW1hbHM6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwot
KyAodm9pZClfcGFyc2VUd29MZWdnZWRBbmltYWxzOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9t
UGF5bG9hZDooaWQpcGF5bG9hZDsKLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zIChSdW50aW1lRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZUZhcm1B
bmltYWxzOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewot
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TU3RyaW5nIGNsYXNz
XSk7Ci0gICAgT3B0aW9uYWw8VGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzPiByZXN1bHQg
PSBJbnNwZWN0b3I6OmZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFu
aW1hbHM+KHBheWxvYWQpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX0VOVU1fVkFMVUUo
cmVzdWx0LCBAIkZhcm1BbmltYWxzIik7Ci0gICAgKm91dFZhbHVlID0gQChyZXN1bHQudmFsdWUo
KSk7Ci19Ci0KLSsgKHZvaWQpX3BhcnNlVHdvTGVnZ2VkQW5pbWFsczooTlNOdW1iZXIgKiopb3V0
VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9S
X0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBjbGFzc10pOwotICAgIE9wdGlvbmFsPFRlc3RQ
cm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzPiByZXN1bHQgPSBJbnNwZWN0b3I6OmZyb21Q
cm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFscz4ocGF5bG9h
ZCk7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfRU5VTV9WQUxVRShyZXN1bHQsIEAiVHdv
TGVnZ2VkQW5pbWFscyIpOwotICAgICpvdXRWYWx1ZSA9IEAocmVzdWx0LnZhbHVlKCkpOwotfQot
Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0K
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIK
LSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0j
aW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQot
dXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1vYmplY3Qt
dHlwZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNv
bi1yZXN1bHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyZTZkYTJiYmM4Li4wMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZ2VuZXJpYy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24tcmVz
dWx0CisrKyAvZGV2L251bGwKQEAgLTEsMjQ1NSArMCwwIEBACi0jIyMgQmVnaW4gRmlsZTogSW5z
cGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLS8vIERhdGFiYXNlCi1JbnNwZWN0b3JCYWNrZW5kLnJl
Z2lzdGVyRG9tYWluKCJEYXRhYmFzZSIsIG51bGwpOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rl
ckVudW0oIkRhdGFiYXNlLk1vdXNlQnV0dG9uIiwge05vbmU6ICJOb25lIiwgTGVmdDogIkxlZnQi
LCBNaWRkbGU6ICJNaWRkbGUiLCBSaWdodDogIlJpZ2h0In0pOwotSW5zcGVjdG9yQmFja2VuZC5y
ZWdpc3RlckVudW0oIkRhdGFiYXNlLk9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxp
dHkiLCB7TFRSOiAiTFRSIiwgUlRMOiAiUlRMIn0pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rl
ckVudW0oIkRhdGFiYXNlLlBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5Iiwge0xUUjogIkxU
UiIsIFJUTDogIlJUTCJ9KTsKLUluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkRhdGFi
YXNlIiwgbnVsbCk7Ci0jIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwot
Ci0jIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlw
ZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFn
bWEgb25jZQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0K
LSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNs
YXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2b2lkIHNldEJh
Y2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7
IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9Ci0gICAgQmFja2Vu
ZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5k
RGlzcGF0Y2hlci5nZXQoKTsgfQotcHJpdmF0ZToKLSAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNo
ZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Ci19OwotCi0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKLQotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQotIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJp
bmc7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEJh
Y2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNo
ZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRp
b24tb2JqZWN0LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0
ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRl
c3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2lmIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQot
Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5k
RGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVy
cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1v
YmplY3QtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2lu
Y2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBGcm9udGVuZFJvdXRlcjsKLQotfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNo
ZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5
cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKLQot
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0
Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBl
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdt
YSBvbmNlCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVz
Lmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7
Ci0KLQotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotLy8gRm9yd2FyZCBkZWNsYXJhdGlv
bnMuCi1uYW1lc3BhY2UgRGF0YWJhc2UgewotY2xhc3MgRXJyb3I7Ci1jbGFzcyBPcHRpb25hbFBh
cmFtZXRlckJ1bmRsZTsKLWNsYXNzIFBhcmFtZXRlckJ1bmRsZTsKLWNsYXNzIE9iamVjdFdpdGhQ
cm9wZXJ0eU5hbWVDb25mbGljdHM7Ci1jbGFzcyBEdW1teU9iamVjdDsKLWVudW0gY2xhc3MgTW91
c2VCdXR0b247Ci19IC8vIERhdGFiYXNlCi0KLW5hbWVzcGFjZSBUZXN0IHsKLWNsYXNzIFBhcmFt
ZXRlckJ1bmRsZTsKLX0gLy8gVGVzdAotLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgot
Ci0KLS8vIFR5cGVkZWZzLgotbmFtZXNwYWNlIERhdGFiYXNlIHsKLXR5cGVkZWYgSlNPTjo6QXJy
YXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IEVycm9yTGlzdDsKLX0g
Ly8gRGF0YWJhc2UKLS8vIEVuZCBvZiB0eXBlZGVmcy4KLQotbmFtZXNwYWNlIFRlc3RIZWxwZXJz
IHsKLQotU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKTsKLQotdGVtcGxhdGU8
dHlwZW5hbWUgVD4gU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKFQgZW51bVZhbHVlKQotewot
ICAgIHJldHVybiBnZXRFbnVtQ29uc3RhbnRWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KGVudW1WYWx1
ZSkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwotCi1uYW1lc3BhY2UgRGF0YWJh
c2UgewotLyogRGF0YWJhc2UgZXJyb3IuICovCi1jbGFzcyBFcnJvciA6IHB1YmxpYyBKU09OOjpP
YmplY3RCYXNlIHsKLXB1YmxpYzoKLSAgICBlbnVtIHsKLSAgICAgICAgTm9GaWVsZHNTZXQgPSAw
LAotICAgICAgICBNZXNzYWdlU2V0ID0gMSA8PCAwLAotICAgICAgICBDb2RlU2V0ID0gMSA8PCAx
LAotICAgICAgICBBbGxGaWVsZHNTZXQgPSAoTWVzc2FnZVNldCB8IENvZGVTZXQpCi0gICAgfTsK
LQotICAgIHRlbXBsYXRlPGludCBTVEFURT4KLSAgICBjbGFzcyBCdWlsZGVyIHsKLSAgICBwcml2
YXRlOgotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBtX3Jlc3VsdDsKLQotICAgICAgICB0
ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFU
RSB8IFNURVA+Kj4odGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyKFJlZjwvKkVy
cm9yKi9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQotICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZN
b3ZlKG9iamVjdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRF
ID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwotICAg
ICAgICB9Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBFcnJvcjsKLSAgICBwdWJsaWM6Ci0KLSAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IE1lc3NhZ2VTZXQ+JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYg
dmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBN
ZXNzYWdlU2V0KSwgcHJvcGVydHlfbWVzc2FnZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0U3RyaW5nKCJtZXNzYWdlIl9zLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPE1lc3NhZ2VTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgQ29kZVNldD4mIHNldENvZGUoaW50IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29kZVNldCksIHByb3BlcnR5X2NvZGVfYWxy
ZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldEludGVnZXIoImNvZGUiX3MsIHZh
bHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29kZVNldD4oKTsKLSAgICAgICAg
fQotCi0gICAgICAgIFJlZjxFcnJvcj4gcmVsZWFzZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFk
eSk7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoRXJyb3IpID09IHNpemVvZihK
U09OOjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7Ci0KLSAgICAgICAgICAgIFJlZjxKU09OOjpPYmpl
Y3Q+IGpzb25SZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOwotICAgICAgICAgICAg
YXV0byByZXN1bHQgPSBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxFcnJvcj4qPigmanNv
blJlc3VsdCkpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgIH07
Ci0KLSAgICAvKgotICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKLSAgICAgKiBSZWY8RXJy
b3I+IHJlc3VsdCA9IEVycm9yOjpjcmVhdGUoKQotICAgICAqICAgICAuc2V0TWVzc2FnZSguLi4p
Ci0gICAgICogICAgIC5zZXRDb2RlKC4uLikKLSAgICAgKiAgICAgLnJlbGVhc2UoKTsKLSAgICAg
Ki8KLSAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsK
LSAgICB9Ci19OwotCi0vKiBFbnVtZXJhdGVzIGRpZmZlcmVudCBtb3VzZSBidXR0b25zIHRoYXQg
Y2FuIGJlIHVzZWQuICovCi1lbnVtIGNsYXNzIE1vdXNlQnV0dG9uIHsKLSAgICBOb25lID0gMCwK
LSAgICBMZWZ0ID0gMSwKLSAgICBNaWRkbGUgPSAyLAotICAgIFJpZ2h0ID0gMywKLX07IC8vIGVu
dW0gY2xhc3MgTW91c2VCdXR0b24KLWNsYXNzIE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlIDogcHVi
bGljIEpTT046Ok9iamVjdEJhc2UgewotcHVibGljOgotICAgIC8vIE5hbWVkIGFmdGVyIHByb3Bl
cnR5IG5hbWUgJ2RpcmVjdGlvbmFsaXR5JyB3aGlsZSBnZW5lcmF0aW5nIE9wdGlvbmFsUGFyYW1l
dGVyQnVuZGxlLgotICAgIGVudW0gY2xhc3MgRGlyZWN0aW9uYWxpdHkgewotICAgICAgICBMVFIg
PSA0LAotICAgICAgICBSVEwgPSA1LAotICAgIH07IC8vIGVudW0gY2xhc3MgRGlyZWN0aW9uYWxp
dHkKLSAgICBlbnVtIHsKLSAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAotICAgICAgICBBbGxGaWVs
ZHNTZXQgPSAwCi0gICAgfTsKLQotICAgIHRlbXBsYXRlPGludCBTVEFURT4KLSAgICBjbGFzcyBC
dWlsZGVyIHsKLSAgICBwcml2YXRlOgotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBtX3Jl
c3VsdDsKLQotICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+
JiBjYXN0U3RhdGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0
X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBCdWlsZGVyKFJlZjwvKk9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlKi9KU09OOjpPYmplY3Q+JiYg
b2JqZWN0KQotICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWls
ZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwotICAgICAgICB9Ci0gICAgICAgIGZyaWVu
ZCBjbGFzcyBPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTsKLSAgICBwdWJsaWM6Ci0KLSAgICAgICAg
UmVmPE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlPiByZWxlYXNlKCkKLSAgICAgICAgewotICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90
X3JlYWR5KTsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihPcHRpb25hbFBhcmFt
ZXRlckJ1bmRsZSkgPT0gc2l6ZW9mKEpTT046Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsKLQotICAg
ICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4ganNvblJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VO
b25OdWxsKCk7Ci0gICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFdURk1vdmUoKnJlaW50ZXJwcmV0
X2Nhc3Q8UmVmPE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlPio+KCZqc29uUmVzdWx0KSk7Ci0gICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIC8qCi0gICAg
ICogU3ludGhldGljIGNvbnN0cnVjdG9yOgotICAgICAqIFJlZjxPcHRpb25hbFBhcmFtZXRlckJ1
bmRsZT4gcmVzdWx0ID0gT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU6OmNyZWF0ZSgpCi0gICAgICog
ICAgIC5yZWxlYXNlKCk7Ci0gICAgICovCi0gICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+
IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKSk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRDb2x1bW5OYW1lcyhS
ZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEpTT046
Ok9iamVjdEJhc2U6OnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgV1RGTW92ZSh2YWx1ZSkpOwot
ICAgIH0KLQotICAgIHZvaWQgc2V0QnV0dG9ucyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b24+PiB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIEpTT046Ok9iamVjdEJhc2U6OnNldEFycmF5KCJidXR0b25zIl9zLCBXVEZNb3ZlKHZhbHVl
KSk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXREaXJlY3Rpb25hbGl0eShEaXJlY3Rpb25hbGl0eSB2
YWx1ZSkKLSAgICB7Ci0gICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldFN0cmluZygiZGlyZWN0
aW9uYWxpdHkiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29u
c3RhbnRWYWx1ZSh2YWx1ZSkpOwotICAgIH0KLQotICAgIHZvaWQgc2V0Tm90ZXMoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldFN0cmluZygi
bm90ZXMiX3MsIHZhbHVlKTsKLSAgICB9Ci0KLSAgICB2b2lkIHNldFRpbWVzdGFtcChkb3VibGUg
dmFsdWUpCi0gICAgewotICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXREb3VibGUoInRpbWVz
dGFtcCJfcywgdmFsdWUpOwotICAgIH0KLQotICAgIHZvaWQgc2V0VmFsdWVzKFJlZlB0cjxKU09O
OjpPYmplY3Q+IHZhbHVlKQotICAgIHsKLSAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0T2Jq
ZWN0KCJ2YWx1ZXMiX3MsIFdURk1vdmUodmFsdWUpKTsKLSAgICB9Ci0KLSAgICB2b2lkIHNldFBh
eWxvYWQoUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEpTT046Ok9i
amVjdEJhc2U6OnNldFZhbHVlKCJwYXlsb2FkIl9zLCBXVEZNb3ZlKHZhbHVlKSk7Ci0gICAgfQot
Ci0gICAgdm9pZCBzZXRFcnJvcihSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6
OkVycm9yPiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldE9iamVj
dCgiZXJyb3IiX3MsIFdURk1vdmUodmFsdWUpKTsKLSAgICB9Ci0KLSAgICB2b2lkIHNldEVycm9y
TGlzdChSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yTGlzdD4gdmFs
dWUpCi0gICAgewotICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRBcnJheSgiZXJyb3JMaXN0
Il9zLCBXVEZNb3ZlKHZhbHVlKSk7Ci0gICAgfQotfTsKLQotY2xhc3MgUGFyYW1ldGVyQnVuZGxl
IDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewotcHVibGljOgotICAgIC8vIE5hbWVkIGFmdGVy
IHByb3BlcnR5IG5hbWUgJ2RpcmVjdGlvbmFsaXR5JyB3aGlsZSBnZW5lcmF0aW5nIFBhcmFtZXRl
ckJ1bmRsZS4KLSAgICBlbnVtIGNsYXNzIERpcmVjdGlvbmFsaXR5IHsKLSAgICAgICAgTFRSID0g
NCwKLSAgICAgICAgUlRMID0gNSwKLSAgICB9OyAvLyBlbnVtIGNsYXNzIERpcmVjdGlvbmFsaXR5
Ci0gICAgZW51bSB7Ci0gICAgICAgIE5vRmllbGRzU2V0ID0gMCwKLSAgICAgICAgQ29sdW1uTmFt
ZXNTZXQgPSAxIDw8IDAsCi0gICAgICAgIEJ1dHRvbnNTZXQgPSAxIDw8IDEsCi0gICAgICAgIERp
cmVjdGlvbmFsaXR5U2V0ID0gMSA8PCAyLAotICAgICAgICBOb3Rlc1NldCA9IDEgPDwgMywKLSAg
ICAgICAgVGltZXN0YW1wU2V0ID0gMSA8PCA0LAotICAgICAgICBWYWx1ZXNTZXQgPSAxIDw8IDUs
Ci0gICAgICAgIFBheWxvYWRTZXQgPSAxIDw8IDYsCi0gICAgICAgIEVycm9yU2V0ID0gMSA8PCA3
LAotICAgICAgICBFcnJvckxpc3RTZXQgPSAxIDw8IDgsCi0gICAgICAgIEFsbEZpZWxkc1NldCA9
IChDb2x1bW5OYW1lc1NldCB8IEJ1dHRvbnNTZXQgfCBEaXJlY3Rpb25hbGl0eVNldCB8IE5vdGVz
U2V0IHwgVGltZXN0YW1wU2V0IHwgVmFsdWVzU2V0IHwgUGF5bG9hZFNldCB8IEVycm9yU2V0IHwg
RXJyb3JMaXN0U2V0KQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+Ci0gICAgY2xh
c3MgQnVpbGRlciB7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4g
bV9yZXN1bHQ7Ci0KLSAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBT
VEVQPiYgY2FzdFN0YXRlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICpyZWludGVy
cHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgQnVpbGRlcihSZWY8LypQYXJhbWV0ZXJCdW5kbGUqL0pTT046Ok9iamVjdD4mJiBvYmpl
Y3QpCi0gICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKLSAgICAgICAgewot
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJf
Y3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZnJpZW5kIGNs
YXNzIFBhcmFtZXRlckJ1bmRsZTsKLSAgICBwdWJsaWM6Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IENvbHVtbk5hbWVzU2V0PiYgc2V0Q29sdW1uTmFtZXMoUmVmUHRyPEpTT046OkFycmF5T2Y8
U3RyaW5nPj4gdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBDb2x1bW5OYW1lc1NldCksIHByb3BlcnR5X2NvbHVtbk5hbWVzX2FscmVhZHlfc2V0
KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIHZhbHVl
KTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29sdW1uTmFtZXNTZXQ+KCk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQnV0dG9uc1NldD4mIHNldEJ1dHRvbnMo
UmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNl
QnV0dG9uPj4gdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBCdXR0b25zU2V0KSwgcHJvcGVydHlfYnV0dG9uc19hbHJlYWR5X3NldCk7Ci0gICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoImJ1dHRvbnMiX3MsIHZhbHVlKTsKLSAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8QnV0dG9uc1NldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAg
IEJ1aWxkZXI8U1RBVEUgfCBEaXJlY3Rpb25hbGl0eVNldD4mIHNldERpcmVjdGlvbmFsaXR5KERp
cmVjdGlvbmFsaXR5IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgRGlyZWN0aW9uYWxpdHlTZXQpLCBwcm9wZXJ0eV9kaXJlY3Rpb25hbGl0eV9h
bHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJkaXJlY3Rpb25h
bGl0eSJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFu
dFZhbHVlKHZhbHVlKSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPERpcmVjdGlvbmFs
aXR5U2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IE5vdGVzU2V0
PiYgc2V0Tm90ZXMoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIE5vdGVzU2V0KSwgcHJvcGVydHlfbm90ZXNfYWxyZWFk
eV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibm90ZXMiX3MsIHZhbHVl
KTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Tm90ZXNTZXQ+KCk7Ci0gICAgICAgIH0K
LQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVGltZXN0YW1wU2V0PiYgc2V0VGltZXN0YW1wKGRv
dWJsZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIFRpbWVzdGFtcFNldCksIHByb3BlcnR5X3RpbWVzdGFtcF9hbHJlYWR5X3NldCk7Ci0gICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIHZhbHVlKTsKLSAgICAg
ICAgICAgIHJldHVybiBjYXN0U3RhdGU8VGltZXN0YW1wU2V0PigpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IFZhbHVlc1NldD4mIHNldFZhbHVlcyhSZWZQdHI8SlNPTjo6
T2JqZWN0PiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIFZhbHVlc1NldCksIHByb3BlcnR5X3ZhbHVlc19hbHJlYWR5X3NldCk7Ci0gICAgICAg
ICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIHZhbHVlKTsKLSAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8VmFsdWVzU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVp
bGRlcjxTVEFURSB8IFBheWxvYWRTZXQ+JiBzZXRQYXlsb2FkKFJlZlB0cjxKU09OOjpWYWx1ZT4g
dmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBQ
YXlsb2FkU2V0KSwgcHJvcGVydHlfcGF5bG9hZF9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVy
biBjYXN0U3RhdGU8UGF5bG9hZFNldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBFcnJvclNldD4mIHNldEVycm9yKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpE
YXRhYmFzZTo6RXJyb3I+IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgRXJyb3JTZXQpLCBwcm9wZXJ0eV9lcnJvcl9hbHJlYWR5X3NldCk7Ci0g
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJlcnJvciJfcywgdmFsdWUpOwotICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxFcnJvclNldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAg
IEJ1aWxkZXI8U1RBVEUgfCBFcnJvckxpc3RTZXQ+JiBzZXRFcnJvckxpc3QoUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvckxpc3Q+IHZhbHVlKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRXJyb3JMaXN0U2V0KSwgcHJvcGVy
dHlfZXJyb3JMaXN0X2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJh
eSgiZXJyb3JMaXN0Il9zLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEVy
cm9yTGlzdFNldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIFJlZjxQYXJhbWV0ZXJCdW5kbGU+
IHJlbGVhc2UoKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9
PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwotICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoc2l6ZW9mKFBhcmFtZXRlckJ1bmRsZSkgPT0gc2l6ZW9mKEpTT046Ok9iamVjdCks
IGNhbm5vdF9jYXN0KTsKLQotICAgICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4ganNvblJlc3Vs
dCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7Ci0gICAgICAgICAgICBhdXRvIHJlc3VsdCA9
IFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPFBhcmFtZXRlckJ1bmRsZT4qPigmanNvblJl
c3VsdCkpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgIH07Ci0K
LSAgICAvKgotICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKLSAgICAgKiBSZWY8UGFyYW1l
dGVyQnVuZGxlPiByZXN1bHQgPSBQYXJhbWV0ZXJCdW5kbGU6OmNyZWF0ZSgpCi0gICAgICogICAg
IC5zZXRDb2x1bW5OYW1lcyguLi4pCi0gICAgICogICAgIC5zZXRCdXR0b25zKC4uLikKLSAgICAg
KiAgICAgLnNldERpcmVjdGlvbmFsaXR5KC4uLikKLSAgICAgKiAgICAgLnNldE5vdGVzKC4uLikK
LSAgICAgKiAgICAgLnNldFRpbWVzdGFtcCguLi4pCi0gICAgICogICAgIC5zZXRWYWx1ZXMoLi4u
KQotICAgICAqICAgICAuc2V0UGF5bG9hZCguLi4pCi0gICAgICogICAgIC5zZXRFcnJvciguLi4p
Ci0gICAgICogICAgIC5zZXRFcnJvckxpc3QoLi4uKQotICAgICAqICAgICAucmVsZWFzZSgpOwot
ICAgICAqLwotICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRl
KCkpOwotICAgIH0KLX07Ci0KLS8qIENvbmZsaWN0ZWQgbmFtZXMgbWF5IGNhdXNlIGdlbmVyYXRl
ZCBnZXR0ZXJzL3NldHRlcnMgdG8gY2xhc2ggd2l0aCBidWlsdC1pbiBJbnNwZWN0b3JPYmplY3Qg
bWV0aG9kcy4gKi8KLWNsYXNzIE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHMgOiBwdWJs
aWMgSlNPTjo6T2JqZWN0QmFzZSB7Ci1wdWJsaWM6Ci0gICAgZW51bSB7Ci0gICAgICAgIE5vRmll
bGRzU2V0ID0gMCwKLSAgICAgICAgSW50ZWdlclNldCA9IDEgPDwgMCwKLSAgICAgICAgQXJyYXlT
ZXQgPSAxIDw8IDEsCi0gICAgICAgIFN0cmluZ1NldCA9IDEgPDwgMiwKLSAgICAgICAgVmFsdWVT
ZXQgPSAxIDw8IDMsCi0gICAgICAgIE9iamVjdFNldCA9IDEgPDwgNCwKLSAgICAgICAgQWxsRmll
bGRzU2V0ID0gKEludGVnZXJTZXQgfCBBcnJheVNldCB8IFN0cmluZ1NldCB8IFZhbHVlU2V0IHwg
T2JqZWN0U2V0KQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+Ci0gICAgY2xhc3Mg
QnVpbGRlciB7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbV9y
ZXN1bHQ7Ci0KLSAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQ
PiYgY2FzdFN0YXRlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJl
dF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgQnVpbGRlcihSZWY8LypPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzKi9KU09OOjpP
YmplY3Q+JiYgb2JqZWN0KQotICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRz
U2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwotICAgICAgICB9Ci0gICAg
ICAgIGZyaWVuZCBjbGFzcyBPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzOwotICAgIHB1
YmxpYzoKLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgSW50ZWdlclNldD4mIHNldEludGVnZXIo
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIEludGVnZXJTZXQpLCBwcm9wZXJ0eV9pbnRlZ2VyX2FscmVhZHlfc2V0KTsK
LSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImludGVnZXIiX3MsIHZhbHVlKTsKLSAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8SW50ZWdlclNldD4oKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBBcnJheVNldD4mIHNldEFycmF5KGNvbnN0IFN0cmluZyYg
dmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBB
cnJheVNldCksIHByb3BlcnR5X2FycmF5X2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXRTdHJpbmcoImFycmF5Il9zLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2Fz
dFN0YXRlPEFycmF5U2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8
IFN0cmluZ1NldD4mIHNldFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU3RyaW5nU2V0KSwgcHJvcGVydHlf
c3RyaW5nX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInN0
cmluZyJfcywgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTdHJpbmdTZXQ+
KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVmFsdWVTZXQ+JiBzZXRW
YWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxF
X0FTU0VSVCghKFNUQVRFICYgVmFsdWVTZXQpLCBwcm9wZXJ0eV92YWx1ZV9hbHJlYWR5X3NldCk7
Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ2YWx1ZSJfcywgdmFsdWUpOwotICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxWYWx1ZVNldD4oKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBPYmplY3RTZXQ+JiBzZXRPYmplY3QoY29uc3QgU3RyaW5nJiB2
YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE9i
amVjdFNldCksIHByb3BlcnR5X29iamVjdF9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0U3RyaW5nKCJvYmplY3QiX3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8T2JqZWN0U2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgUmVmPE9iamVjdFdp
dGhQcm9wZXJ0eU5hbWVDb25mbGljdHM+IHJlbGVhc2UoKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVh
ZHkpOwotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKE9iamVjdFdpdGhQcm9wZXJ0
eU5hbWVDb25mbGljdHMpID09IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7Ci0K
LSAgICAgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25SZXN1bHQgPSBtX3Jlc3VsdC5yZWxl
YXNlTm9uTnVsbCgpOwotICAgICAgICAgICAgYXV0byByZXN1bHQgPSBXVEZNb3ZlKCpyZWludGVy
cHJldF9jYXN0PFJlZjxPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzPio+KCZqc29uUmVz
dWx0KSk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgfTsKLQot
ICAgIC8qCi0gICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgotICAgICAqIFJlZjxPYmplY3RX
aXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzPiByZXN1bHQgPSBPYmplY3RXaXRoUHJvcGVydHlOYW1l
Q29uZmxpY3RzOjpjcmVhdGUoKQotICAgICAqICAgICAuc2V0SW50ZWdlciguLi4pCi0gICAgICog
ICAgIC5zZXRBcnJheSguLi4pCi0gICAgICogICAgIC5zZXRTdHJpbmcoLi4uKQotICAgICAqICAg
ICAuc2V0VmFsdWUoLi4uKQotICAgICAqICAgICAuc2V0T2JqZWN0KC4uLikKLSAgICAgKiAgICAg
LnJlbGVhc2UoKTsKLSAgICAgKi8KLSAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3Jl
YXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpKTsKLSAgICB9Ci19OwotCi19IC8vIERhdGFiYXNlCi0KLW5hbWVzcGFj
ZSBUZXN0IHsKLWNsYXNzIFBhcmFtZXRlckJ1bmRsZSA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNl
IHsKLXB1YmxpYzoKLSAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdkaXJlY3Rpb25h
bGl0eScgd2hpbGUgZ2VuZXJhdGluZyBQYXJhbWV0ZXJCdW5kbGUuCi0gICAgZW51bSBjbGFzcyBE
aXJlY3Rpb25hbGl0eSB7Ci0gICAgICAgIExUUiA9IDQsCi0gICAgICAgIFJUTCA9IDUsCi0gICAg
fTsgLy8gZW51bSBjbGFzcyBEaXJlY3Rpb25hbGl0eQotICAgIGVudW0gewotICAgICAgICBOb0Zp
ZWxkc1NldCA9IDAsCi0gICAgICAgIERpcmVjdGlvbmFsaXR5U2V0ID0gMSA8PCAwLAotICAgICAg
ICBCdXR0b25zU2V0ID0gMSA8PCAxLAotICAgICAgICBDb2x1bW5OYW1lc1NldCA9IDEgPDwgMiwK
LSAgICAgICAgTm90ZXNTZXQgPSAxIDw8IDMsCi0gICAgICAgIFRpbWVzdGFtcFNldCA9IDEgPDwg
NCwKLSAgICAgICAgVmFsdWVzU2V0ID0gMSA8PCA1LAotICAgICAgICBQYXlsb2FkU2V0ID0gMSA8
PCA2LAotICAgICAgICBFcnJvclNldCA9IDEgPDwgNywKLSAgICAgICAgQWxsRmllbGRzU2V0ID0g
KERpcmVjdGlvbmFsaXR5U2V0IHwgQnV0dG9uc1NldCB8IENvbHVtbk5hbWVzU2V0IHwgTm90ZXNT
ZXQgfCBUaW1lc3RhbXBTZXQgfCBWYWx1ZXNTZXQgfCBQYXlsb2FkU2V0IHwgRXJyb3JTZXQpCi0g
ICAgfTsKLQotICAgIHRlbXBsYXRlPGludCBTVEFURT4KLSAgICBjbGFzcyBCdWlsZGVyIHsKLSAg
ICBwcml2YXRlOgotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBtX3Jlc3VsdDsKLQotICAg
ICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUo
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRl
cjxTVEFURSB8IFNURVA+Kj4odGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyKFJl
ZjwvKlBhcmFtZXRlckJ1bmRsZSovSlNPTjo6T2JqZWN0PiYmIG9iamVjdCkKLSAgICAgICAgICAg
IDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9p
bml0X3N0YXRlKTsKLSAgICAgICAgfQotICAgICAgICBmcmllbmQgY2xhc3MgUGFyYW1ldGVyQnVu
ZGxlOwotICAgIHB1YmxpYzoKLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRGlyZWN0aW9uYWxp
dHlTZXQ+JiBzZXREaXJlY3Rpb25hbGl0eShEaXJlY3Rpb25hbGl0eSB2YWx1ZSkKLSAgICAgICAg
ewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIERpcmVjdGlvbmFsaXR5U2V0
KSwgcHJvcGVydHlfZGlyZWN0aW9uYWxpdHlfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldFN0cmluZygiZGlyZWN0aW9uYWxpdHkiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSh2YWx1ZSkpOwotICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxEaXJlY3Rpb25hbGl0eVNldD4oKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBCdXR0b25zU2V0PiYgc2V0QnV0dG9ucyhSZWZQdHI8SlNPTjo6
QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b24+PiB2YWx1
ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEJ1dHRv
bnNTZXQpLCBwcm9wZXJ0eV9idXR0b25zX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXRBcnJheSgiYnV0dG9ucyJfcywgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNh
c3RTdGF0ZTxCdXR0b25zU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IENvbHVtbk5hbWVzU2V0PiYgc2V0Q29sdW1uTmFtZXMoUmVmUHRyPEpTT046OkFycmF5T2Y8
U3RyaW5nPj4gdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBDb2x1bW5OYW1lc1NldCksIHByb3BlcnR5X2NvbHVtbk5hbWVzX2FscmVhZHlfc2V0
KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIHZhbHVl
KTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29sdW1uTmFtZXNTZXQ+KCk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTm90ZXNTZXQ+JiBzZXROb3Rlcyhjb25z
dCBTdHJpbmcmIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgTm90ZXNTZXQpLCBwcm9wZXJ0eV9ub3Rlc19hbHJlYWR5X3NldCk7Ci0gICAgICAg
ICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJub3RlcyJfcywgdmFsdWUpOwotICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxOb3Rlc1NldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBUaW1lc3RhbXBTZXQ+JiBzZXRUaW1lc3RhbXAoZG91YmxlIHZhbHVlKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVGltZXN0YW1wU2V0
KSwgcHJvcGVydHlfdGltZXN0YW1wX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNh
c3RTdGF0ZTxUaW1lc3RhbXBTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgVmFsdWVzU2V0PiYgc2V0VmFsdWVzKFJlZlB0cjxKU09OOjpPYmplY3Q+IHZhbHVlKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVmFsdWVzU2V0
KSwgcHJvcGVydHlfdmFsdWVzX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXRPYmplY3QoInZhbHVlcyJfcywgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0
ZTxWYWx1ZXNTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgUGF5
bG9hZFNldD4mIHNldFBheWxvYWQoUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZSkKLSAgICAgICAg
ewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFBheWxvYWRTZXQpLCBwcm9w
ZXJ0eV9wYXlsb2FkX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRWYWx1
ZSgicGF5bG9hZCJfcywgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxQYXls
b2FkU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IEVycm9yU2V0
PiYgc2V0RXJyb3IoUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4g
dmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBF
cnJvclNldCksIHByb3BlcnR5X2Vycm9yX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXRPYmplY3QoImVycm9yIl9zLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2Fz
dFN0YXRlPEVycm9yU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgUmVmPFBhcmFtZXRlckJ1
bmRsZT4gcmVsZWFzZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNU
QVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7Ci0gICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChzaXplb2YoUGFyYW1ldGVyQnVuZGxlKSA9PSBzaXplb2YoSlNPTjo6T2Jq
ZWN0KSwgY2Fubm90X2Nhc3QpOwotCi0gICAgICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29u
UmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKLSAgICAgICAgICAgIGF1dG8gcmVz
dWx0ID0gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8UGFyYW1ldGVyQnVuZGxlPio+KCZq
c29uUmVzdWx0KSk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAg
fTsKLQotICAgIC8qCi0gICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgotICAgICAqIFJlZjxQ
YXJhbWV0ZXJCdW5kbGU+IHJlc3VsdCA9IFBhcmFtZXRlckJ1bmRsZTo6Y3JlYXRlKCkKLSAgICAg
KiAgICAgLnNldERpcmVjdGlvbmFsaXR5KC4uLikKLSAgICAgKiAgICAgLnNldEJ1dHRvbnMoLi4u
KQotICAgICAqICAgICAuc2V0Q29sdW1uTmFtZXMoLi4uKQotICAgICAqICAgICAuc2V0Tm90ZXMo
Li4uKQotICAgICAqICAgICAuc2V0VGltZXN0YW1wKC4uLikKLSAgICAgKiAgICAgLnNldFZhbHVl
cyguLi4pCi0gICAgICogICAgIC5zZXRQYXlsb2FkKC4uLikKLSAgICAgKiAgICAgLnNldEVycm9y
KC4uLikKLSAgICAgKiAgICAgLnJlbGVhc2UoKTsKLSAgICAgKi8KLSAgICBzdGF0aWMgQnVpbGRl
cjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBCdWlsZGVyPE5v
RmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKLSAgICB9Ci19OwotCi19IC8vIFRl
c3QKLQotCi0KLW5hbWVzcGFjZSBUZXN0SGVscGVycyB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFBy
b3RvY29sRW51bVR5cGU+Ci1PcHRpb25hbDxQcm90b2NvbEVudW1UeXBlPiBwYXJzZUVudW1WYWx1
ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJik7Ci0KLS8vIEVudW1zIGluIHRoZSAnRGF0YWJhc2Un
IERvbWFpbgotdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6Ok1vdXNlQnV0dG9uPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90
b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPihjb25zdCBTdHJpbmcmKTsKLXRlbXBsYXRlPD4K
LU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpPcHRpb25hbFBhcmFtZXRl
ckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlv
bmFsaXR5Pihjb25zdCBTdHJpbmcmKTsKLXRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRhdGFiYXNlOjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5PiBwYXJz
ZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlBhcmFt
ZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+KGNvbnN0IFN0cmluZyYpOwotCi0vLyBFbnVtcyBp
biB0aGUgJ1Rlc3QnIERvbWFpbgotdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90
b2NvbDo6VGVzdDo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4gcGFyc2VFbnVtVmFs
dWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlBhcmFtZXRlckJ1bmRsZTo6
RGlyZWN0aW9uYWxpdHk+KGNvbnN0IFN0cmluZyYpOwotCi19IC8vIG5hbWVzcGFjZSBUZXN0SGVs
cGVycwotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKLQotbmFtZXNwYWNlIFdURiB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZh
dWx0SGFzaDsKLQotLy8gSGFzaCBkZWNsYXJhdGlvbnMgaW4gdGhlICdEYXRhYmFzZScgRG9tYWlu
Ci10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0
YWJhc2U6Ok1vdXNlQnV0dG9uPiB7Ci0gICAgdHlwZWRlZiBJbnRIYXNoPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4gSGFzaDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IFdURgotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0KLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1u
YW1lc3BhY2UgUHJvdG9jb2wgewotCi1uYW1lc3BhY2UgVGVzdEhlbHBlcnMgewotCi1zdGF0aWMg
Y29uc3QgY2hhciogY29uc3QgZW51bV9jb25zdGFudF92YWx1ZXNbXSA9IHsKLSAgICAiTm9uZSIs
Ci0gICAgIkxlZnQiLAotICAgICJNaWRkbGUiLAotICAgICJSaWdodCIsCi0gICAgIkxUUiIsCi0g
ICAgIlJUTCIsCi19OwotCi1TdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsK
LSAgICByZXR1cm4gZW51bV9jb25zdGFudF92YWx1ZXNbY29kZV07Ci19Ci0KLS8vIEVudW1zIGlu
IHRoZSAnRGF0YWJhc2UnIERvbWFpbgotdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPihjb25zdCBTdHJpbmcm
IHByb3RvY29sU3RyaW5nKQotewotICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3RhbnRWYWx1
ZXNbXSA9IHsKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6
TW91c2VCdXR0b246Ok5vbmUsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6Ok1vdXNlQnV0dG9uOjpMZWZ0LAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbjo6TWlkZGxlLAotICAgICAgICAoc2l6ZV90
KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbjo6UmlnaHQsCi0gICAg
fTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDQ7ICsraSkKLSAgICAgICAgaWYgKHByb3Rv
Y29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKLSAg
ICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0
dG9uKWNvbnN0YW50VmFsdWVzW2ldOwotCi0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQot
dGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok9wdGlv
bmFsUGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4gcGFyc2VFbnVtVmFsdWVGcm9tU3Ry
aW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpPcHRpb25hbFBhcmFtZXRlckJ1bmRs
ZTo6RGlyZWN0aW9uYWxpdHk+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCi17Ci0gICAg
c3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0gewotICAgICAgICAoc2l6ZV90
KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTo6
RGlyZWN0aW9uYWxpdHk6OkxUUiwKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29s
OjpEYXRhYmFzZTo6T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5OjpSVEws
Ci0gICAgfTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDI7ICsraSkKLSAgICAgICAgaWYg
KHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ld
XSkKLSAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok9w
dGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eSljb25zdGFudFZhbHVlc1tpXTsK
LQotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLXRlbXBsYXRlPD4KLU9wdGlvbmFsPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFs
aXR5PiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+KGNvbnN0IFN0cmluZyYgcHJvdG9j
b2xTdHJpbmcpCi17Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0g
ewotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQYXJhbWV0
ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5OjpMVFIsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9y
OjpQcm90b2NvbDo6RGF0YWJhc2U6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk6OlJU
TCwKLSAgICB9OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMjsgKytpKQotICAgICAgICBp
ZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNb
aV1dKQotICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6
UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eSljb25zdGFudFZhbHVlc1tpXTsKLQotICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLQotLy8gRW51bXMgaW4gdGhlICdUZXN0JyBEb21h
aW4KLXRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlBhcmFt
ZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNw
ZWN0b3I6OlByb3RvY29sOjpUZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5Pihj
b25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQotewotICAgIHN0YXRpYyBjb25zdCBzaXplX3Qg
Y29uc3RhbnRWYWx1ZXNbXSA9IHsKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29s
OjpUZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5OjpMVFIsCi0gICAgICAgIChz
aXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rp
b25hbGl0eTo6UlRMLAotICAgIH07Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAyOyArK2kp
Ci0gICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25z
dGFudFZhbHVlc1tpXV0pCi0gICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlRlc3Q6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHkpY29uc3RhbnRWYWx1ZXNbaV07
Ci0KLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi0KLX0gLy8gbmFtZXNwYWNlIFRlc3RI
ZWxwZXJzCi0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2lu
Y2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQotCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0K
LX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJh
Y2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5k
RGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRl
Y2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xC
YWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgi
Ci0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW5jbHVkZSA8d3Rm
L0pTT05WYWx1ZXMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVy
cy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlw
ZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBv
cnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KLQotX19hdHRyaWJ1dGVfXygodmlzaWJp
bGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24g
OiBOU09iamVjdAotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJh
dGlvbi5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3Qt
dHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNp
bXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKLQotI2ltcG9ydCAiVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5o
IgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4K
LSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5o
PgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXJzLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcnMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9u
IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KLXsKLSAgICBBdWdtZW50YWJsZUluc3BlY3RvckNv
bnRyb2xsZXIqIF9jb250cm9sbGVyOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250
cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAg
ICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5p
bDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVy
OwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBbc3VwZXIg
ZGVhbGxvY107Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZp
Z3VyYXRpb24ubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hl
cnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9u
LW9iamVjdC10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11
c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
RXZlbnREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10
eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2lt
cG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9S
V0lQcm90b2NvbEpTT05PYmplY3QuaD4KLQotCi1AY2xhc3MgVGVzdFByb3RvY29sRGF0YWJhc2VF
cnJvcjsKLUBjbGFzcyBUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxl
OwotQGNsYXNzIFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlOwotQGNsYXNzIFRl
c3RQcm90b2NvbERhdGFiYXNlT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0czsKLUBjbGFz
cyBUZXN0UHJvdG9jb2xEYXRhYmFzZUR1bW15T2JqZWN0OwotQGNsYXNzIFRlc3RQcm90b2NvbFRl
c3RQYXJhbWV0ZXJCdW5kbGU7Ci0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90
b2NvbFBsYXRmb3JtKSB7Ci0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1BbGwsCi0gICAgVGVzdFBy
b3RvY29sUGxhdGZvcm1HZW5lcmljLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TLAotICAg
IFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1MsCi19OwotCi0KLXR5cGVkZWYgTlNfRU5VTShOU0lu
dGVnZXIsIFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VCdXR0b24pIHsKLSAgICBUZXN0UHJvdG9j
b2xEYXRhYmFzZU1vdXNlQnV0dG9uTm9uZSwKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNl
QnV0dG9uTGVmdCwKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9uTWlkZGxlLAot
ICAgIFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VCdXR0b25SaWdodCwKLX07Ci0KLXR5cGVkZWYg
TlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJC
dW5kbGVEaXJlY3Rpb25hbGl0eSkgewotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQ
YXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eUxUUiwKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFz
ZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHlSVEwsCi19OwotCi10eXBlZGVm
IE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZURp
cmVjdGlvbmFsaXR5KSB7Ci0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGVE
aXJlY3Rpb25hbGl0eUxUUiwKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRs
ZURpcmVjdGlvbmFsaXR5UlRMLAotfTsKLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVz
dFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5KSB7Ci0gICAgVGVzdFBy
b3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5TFRSLAotICAgIFRlc3RQcm90
b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eVJUTCwKLX07Ci0KLQotX19hdHRy
aWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2Nv
bERhdGFiYXNlRXJyb3IgOiBSV0lQcm90b2NvbEpTT05PYmplY3QKLS0gKGluc3RhbmNldHlwZSlp
bml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkOwot
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9i
amVjdCAqKWpzb25PYmplY3Q7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0
cmluZyAqKW1lc3NhZ2UgY29kZTooaW50KWNvZGU7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkg
KG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKm1lc3NhZ2U7Ci0vKiByZXF1aXJlZCAqLyBAcHJv
cGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQgY29kZTsKLUBlbmQKLQotX19hdHRyaWJ1dGVf
XygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbERhdGFi
YXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUgOiBSV0lQcm90b2NvbEpTT05PYmplY3QKLS0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4g
KilwYXlsb2FkOwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVBy
b3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7Ci0vKiBvcHRpb25hbCAqLyBAcHJvcGVydHkg
KG5vbmF0b21pYywgY29weSkgTlNBcnJheS8qPE5TU3RyaW5nPiovICpjb2x1bW5OYW1lczsKLS8q
IG9wdGlvbmFsICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU0FycmF5Lyo8TlNTdHJp
bmc+Ki8gKmJ1dHRvbnM7Ci0vKiBvcHRpb25hbCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNz
aWduKSBUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9u
YWxpdHkgZGlyZWN0aW9uYWxpdHk7Ci0vKiBvcHRpb25hbCAqLyBAcHJvcGVydHkgKG5vbmF0b21p
YywgY29weSkgTlNTdHJpbmcgKm5vdGVzOwotLyogb3B0aW9uYWwgKi8gQHByb3BlcnR5IChub25h
dG9taWMsIGFzc2lnbikgZG91YmxlIHRpbWVzdGFtcDsKLS8qIG9wdGlvbmFsICovIEBwcm9wZXJ0
eSAobm9uYXRvbWljLCByZXRhaW4pIFJXSVByb3RvY29sSlNPTk9iamVjdCAqdmFsdWVzOwotLyog
b3B0aW9uYWwgKi8gQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgUldJUHJvdG9jb2xKU09O
T2JqZWN0ICpwYXlsb2FkOwotLyogb3B0aW9uYWwgKi8gQHByb3BlcnR5IChub25hdG9taWMsIHJl
dGFpbikgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqZXJyb3I7Ci0vKiBvcHRpb25hbCAqLyBA
cHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNBcnJheS8qPFRlc3RQcm90b2NvbERhdGFiYXNl
RXJyb3I+Ki8gKmVycm9yTGlzdDsKLUBlbmQKLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAo
ImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVu
ZGxlIDogUldJUHJvdG9jb2xKU09OT2JqZWN0Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXls
b2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKLS0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29u
T2JqZWN0OwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29sdW1uTmFtZXM6KE5TQXJyYXkvKjxO
U1N0cmluZz4qLyAqKWNvbHVtbk5hbWVzIGJ1dHRvbnM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAq
KWJ1dHRvbnMgZGlyZWN0aW9uYWxpdHk6KFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVu
ZGxlRGlyZWN0aW9uYWxpdHkpZGlyZWN0aW9uYWxpdHkgbm90ZXM6KE5TU3RyaW5nICopbm90ZXMg
dGltZXN0YW1wOihkb3VibGUpdGltZXN0YW1wIHZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0
ICopdmFsdWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQgZXJyb3I6
KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKillcnJvciBlcnJvckxpc3Q6KE5TQXJyYXkvKjxU
ZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yPiovICopZXJyb3JMaXN0OwotLyogcmVxdWlyZWQgKi8g
QHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqY29sdW1u
TmFtZXM7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNBcnJh
eS8qPE5TU3RyaW5nPiovICpidXR0b25zOwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25h
dG9taWMsIGFzc2lnbikgVGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rp
b25hbGl0eSBkaXJlY3Rpb25hbGl0eTsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRv
bWljLCBjb3B5KSBOU1N0cmluZyAqbm90ZXM7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5v
bmF0b21pYywgYXNzaWduKSBkb3VibGUgdGltZXN0YW1wOwotLyogcmVxdWlyZWQgKi8gQHByb3Bl
cnR5IChub25hdG9taWMsIHJldGFpbikgUldJUHJvdG9jb2xKU09OT2JqZWN0ICp2YWx1ZXM7Ci0v
KiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluKSBSV0lQcm90b2NvbEpT
T05PYmplY3QgKnBheWxvYWQ7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywg
cmV0YWluKSBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICplcnJvcjsKLS8qIHJlcXVpcmVkICov
IEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU0FycmF5Lyo8VGVzdFByb3RvY29sRGF0YWJh
c2VFcnJvcj4qLyAqZXJyb3JMaXN0OwotQGVuZAotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5
ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sRGF0YWJhc2VPYmplY3RXaXRo
UHJvcGVydHlOYW1lQ29uZmxpY3RzIDogUldJUHJvdG9jb2xKU09OT2JqZWN0Ci0tIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5
bG9hZDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2Nv
bEpTT05PYmplY3QgKilqc29uT2JqZWN0OwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSW50ZWdl
cjooTlNTdHJpbmcgKilpbnRlZ2VyIGFycmF5OihOU1N0cmluZyAqKWFycmF5IHN0cmluZzooTlNT
dHJpbmcgKilzdHJpbmcgdmFsdWU6KE5TU3RyaW5nICopdmFsdWUgb2JqZWN0OihOU1N0cmluZyAq
KW9iamVjdDsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0
cmluZyAqaW50ZWdlcjsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5
KSBOU1N0cmluZyAqYXJyYXk7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywg
Y29weSkgTlNTdHJpbmcgKnN0cmluZzsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRv
bWljLCBjb3B5KSBOU1N0cmluZyAqdmFsdWU7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5v
bmF0b21pYywgY29weSkgTlNTdHJpbmcgKm9iamVjdDsKLUBlbmQKLQotX19hdHRyaWJ1dGVfXygo
dmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbERhdGFiYXNl
RHVtbXlPYmplY3QgOiBSV0lQcm90b2NvbEpTT05PYmplY3QKLS0gKGluc3RhbmNldHlwZSlpbml0
V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkOwotLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVj
dCAqKWpzb25PYmplY3Q7Ci1AZW5kCi0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZh
dWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlIDogUldJ
UHJvdG9jb2xKU09OT2JqZWN0Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0Rp
Y3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKLS0gKGluc3RhbmNldHlwZSlpbml0
V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0Owot
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRGlyZWN0aW9uYWxpdHk6KFRlc3RQcm90b2NvbFRlc3RQ
YXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSlkaXJlY3Rpb25hbGl0eSBidXR0b25zOihOU0Fy
cmF5Lyo8TlNTdHJpbmc+Ki8gKilidXR0b25zIGNvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNTdHJp
bmc+Ki8gKiljb2x1bW5OYW1lcyBub3RlczooTlNTdHJpbmcgKilub3RlcyB0aW1lc3RhbXA6KGRv
dWJsZSl0aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKil2YWx1ZXMgcGF5
bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZCBlcnJvcjooVGVzdFByb3RvY29s
RGF0YWJhc2VFcnJvciAqKWVycm9yOwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9t
aWMsIGFzc2lnbikgVGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5
IGRpcmVjdGlvbmFsaXR5OwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNv
cHkpIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqYnV0dG9uczsKLS8qIHJlcXVpcmVkICovIEBwcm9w
ZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmNvbHVtbk5hbWVz
OwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICpu
b3RlczsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGRvdWJs
ZSB0aW1lc3RhbXA7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWlu
KSBSV0lQcm90b2NvbEpTT05PYmplY3QgKnZhbHVlczsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0
eSAobm9uYXRvbWljLCByZXRhaW4pIFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5bG9hZDsKLS8q
IHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIFRlc3RQcm90b2NvbERh
dGFiYXNlRXJyb3IgKmVycm9yOwotQGVuZAotCi0KLQotCi0KLQotI2ltcG9ydCA8V2ViSW5zcGVj
dG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgotCi0jIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5h
bC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1v
YmplY3QtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9i
amVjdFByaXZhdGUuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVj
dG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotCi0KLQotIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBv
cnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KLQotbmFtZXNw
YWNlIEluc3BlY3RvciB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KLU9wdGlv
bmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUp
OwotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sUGxhdGZvcm0g
dmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0
Zm9ybUFsbDoKLSAgICAgICAgcmV0dXJuICJhbGwiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQ
bGF0Zm9ybUdlbmVyaWM6Ci0gICAgICAgIHJldHVybiAiZ2VuZXJpYyJfczsKLSAgICBjYXNlIFRl
c3RQcm90b2NvbFBsYXRmb3JtSU9TOgotICAgICAgICByZXR1cm4gImlvcyJfczsKLSAgICBjYXNl
IFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M6Ci0gICAgICAgIHJldHVybiAibWFjb3MiX3M7Ci0g
ICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sUGxhdGZv
cm0+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2
YWx1ZSA9PSAiYWxsIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOwot
ICAgIGlmICh2YWx1ZSA9PSAiZ2VuZXJpYyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQ
bGF0Zm9ybUdlbmVyaWM7Ci0gICAgaWYgKHZhbHVlID09ICJpb3MiKQotICAgICAgICByZXR1cm4g
VGVzdFByb3RvY29sUGxhdGZvcm1JT1M7Ci0gICAgaWYgKHZhbHVlID09ICJtYWNvcyIpCi0gICAg
ICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOwotICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7Ci19Ci0KLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2Nv
bERhdGFiYXNlTW91c2VCdXR0b24gdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAg
Y2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9uTm9uZToKLSAgICAgICAgcmV0dXJu
ICJOb25lIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VNb3VzZUJ1dHRvbkxlZnQ6
Ci0gICAgICAgIHJldHVybiAiTGVmdCJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNl
TW91c2VCdXR0b25NaWRkbGU6Ci0gICAgICAgIHJldHVybiAiTWlkZGxlIl9zOwotICAgIGNhc2Ug
VGVzdFByb3RvY29sRGF0YWJhc2VNb3VzZUJ1dHRvblJpZ2h0OgotICAgICAgICByZXR1cm4gIlJp
Z2h0Il9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90
b2NvbERhdGFiYXNlTW91c2VCdXR0b24+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcm
IHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiTm9uZSIpCi0gICAgICAgIHJldHVybiBUZXN0
UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9uTm9uZTsKLSAgICBpZiAodmFsdWUgPT0gIkxlZnQi
KQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VNb3VzZUJ1dHRvbkxlZnQ7Ci0g
ICAgaWYgKHZhbHVlID09ICJNaWRkbGUiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0
YWJhc2VNb3VzZUJ1dHRvbk1pZGRsZTsKLSAgICBpZiAodmFsdWUgPT0gIlJpZ2h0IikKLSAgICAg
ICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VCdXR0b25SaWdodDsKLSAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwotfQotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVz
dFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5IHZh
bHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJh
c2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5TFRSOgotICAgICAgICByZXR1
cm4gIkxUUiJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0
ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eVJUTDoKLSAgICAgICAgcmV0dXJuICJSVEwiX3M7Ci0gICAg
fQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VP
cHRpb25hbFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5PiBmcm9tUHJvdG9jb2xTdHJpbmco
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gIkxUUiIpCi0gICAgICAg
IHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlRGlyZWN0
aW9uYWxpdHlMVFI7Ci0gICAgaWYgKHZhbHVlID09ICJSVEwiKQotICAgICAgICByZXR1cm4gVGVz
dFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5UlRM
OwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2Nv
bFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5
IHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0
YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eUxUUjoKLSAgICAgICAgcmV0dXJuICJM
VFIiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZURpcmVj
dGlvbmFsaXR5UlRMOgotICAgICAgICByZXR1cm4gIlJUTCJfczsKLSAgICB9Ci19Ci0KLXRlbXBs
YXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRs
ZURpcmVjdGlvbmFsaXR5PiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkK
LXsKLSAgICBpZiAodmFsdWUgPT0gIkxUUiIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xE
YXRhYmFzZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5TFRSOwotICAgIGlmICh2YWx1ZSA9
PSAiUlRMIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVu
ZGxlRGlyZWN0aW9uYWxpdHlSVEw7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotCi1p
bmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1
bmRsZURpcmVjdGlvbmFsaXR5IHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNh
c2UgVGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5TFRSOgotICAg
ICAgICByZXR1cm4gIkxUUiJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJC
dW5kbGVEaXJlY3Rpb25hbGl0eVJUTDoKLSAgICAgICAgcmV0dXJuICJSVEwiX3M7Ci0gICAgfQot
fQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sVGVzdFBhcmFtZXRl
ckJ1bmRsZURpcmVjdGlvbmFsaXR5PiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2
YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gIkxUUiIpCi0gICAgICAgIHJldHVybiBUZXN0UHJv
dG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHlMVFI7Ci0gICAgaWYgKHZhbHVl
ID09ICJSVEwiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRs
ZURpcmVjdGlvbmFsaXR5UlRMOwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMu
bW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9i
amVjdC10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0KLSNpbXBvcnQgIlRl
c3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgotI2ltcG9y
dCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLQotdXNpbmcg
bmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMgKERhdGFiYXNlRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZUVycm9yOihUZXN0UHJvdG9j
b2xEYXRhYmFzZUVycm9yICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotKyAo
dm9pZClfcGFyc2VFcnJvckxpc3Q6KE5TQXJyYXkvKjxUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9y
PiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotKyAodm9pZClfcGFyc2VN
b3VzZUJ1dHRvbjooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7
Ci0rICh2b2lkKV9wYXJzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOihUZXN0UHJvdG9jb2xEYXRh
YmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClw
YXlsb2FkOwotKyAodm9pZClfcGFyc2VQYXJhbWV0ZXJCdW5kbGU6KFRlc3RQcm90b2NvbERhdGFi
YXNlUGFyYW1ldGVyQnVuZGxlICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwot
KyAodm9pZClfcGFyc2VPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzOihUZXN0UHJvdG9j
b2xEYXRhYmFzZU9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHMgKiopb3V0VmFsdWUgZnJv
bVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZUR1bW15T2JqZWN0OihUZXN0UHJv
dG9jb2xEYXRhYmFzZUR1bW15T2JqZWN0ICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXls
b2FkOwotCi1AZW5kCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoVGVz
dERvbWFpbikKLQotKyAodm9pZClfcGFyc2VQYXJhbWV0ZXJCdW5kbGU6KFRlc3RQcm90b2NvbFRl
c3RQYXJhbWV0ZXJCdW5kbGUgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0K
LUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoRGF0
YWJhc2VEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNl
RXJyb3IgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19F
WENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKLSAg
ICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgYWxsb2NdIGluaXRXaXRo
UGF5bG9hZDpwYXlsb2FkXTsKLX0KLQotKyAodm9pZClfcGFyc2VFcnJvckxpc3Q6KE5TQXJyYXkv
KjxUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihp
ZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBb
TlNBcnJheS8qPFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I+Ki8gY2xhc3NdKTsKLSAgICAqb3V0
VmFsdWUgPSAoTlNBcnJheS8qPFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I+Ki8gKilwYXlsb2Fk
OwotfQotCi0rICh2b2lkKV9wYXJzZU1vdXNlQnV0dG9uOihOU051bWJlciAqKilvdXRWYWx1ZSBm
cm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZ
UEUocGF5bG9hZCwgW05TU3RyaW5nIGNsYXNzXSk7Ci0gICAgT3B0aW9uYWw8VGVzdFByb3RvY29s
RGF0YWJhc2VNb3VzZUJ1dHRvbj4gcmVzdWx0ID0gSW5zcGVjdG9yOjpmcm9tUHJvdG9jb2xTdHJp
bmc8VGVzdFByb3RvY29sRGF0YWJhc2VNb3VzZUJ1dHRvbj4ocGF5bG9hZCk7Ci0gICAgVEhST1df
RVhDRVBUSU9OX0ZPUl9CQURfRU5VTV9WQUxVRShyZXN1bHQsIEAiTW91c2VCdXR0b24iKTsKLSAg
ICAqb3V0VmFsdWUgPSBAKHJlc3VsdC52YWx1ZSgpKTsKLX0KLQotKyAodm9pZClfcGFyc2VPcHRp
b25hbFBhcmFtZXRlckJ1bmRsZTooVGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFtZXRl
ckJ1bmRsZSAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOwot
ICAgICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1
bmRsZSBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOwotfQotCi0rICh2b2lkKV9wYXJz
ZVBhcmFtZXRlckJ1bmRsZTooVGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGUgKiop
b3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05f
Rk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKLSAgICAqb3V0VmFs
dWUgPSBbW1Rlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlIGFsbG9jXSBpbml0V2l0
aFBheWxvYWQ6cGF5bG9hZF07Ci19Ci0KLSsgKHZvaWQpX3BhcnNlT2JqZWN0V2l0aFByb3BlcnR5
TmFtZUNvbmZsaWN0czooVGVzdFByb3RvY29sRGF0YWJhc2VPYmplY3RXaXRoUHJvcGVydHlOYW1l
Q29uZmxpY3RzICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7
Ci0gICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xEYXRhYmFzZU9iamVjdFdpdGhQcm9wZXJ0
eU5hbWVDb25mbGljdHMgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKLX0KLQotKyAo
dm9pZClfcGFyc2VEdW1teU9iamVjdDooVGVzdFByb3RvY29sRGF0YWJhc2VEdW1teU9iamVjdCAq
KilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOwotICAgICpvdXRW
YWx1ZSA9IFtbVGVzdFByb3RvY29sRGF0YWJhc2VEdW1teU9iamVjdCBhbGxvY10gaW5pdFdpdGhQ
YXlsb2FkOnBheWxvYWRdOwotfQotCi1AZW5kCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zIChUZXN0RG9tYWluKQotCi0rICh2b2lkKV9wYXJzZVBhcmFtZXRlckJ1
bmRsZTooVGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZSAqKilvdXRWYWx1ZSBmcm9tUGF5
bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5
bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IFtbVGVzdFByb3Rv
Y29sVGVzdFBhcmFtZXRlckJ1bmRsZSBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOwot
fQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMu
bW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUu
aD4KLSNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5o
PgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0
UHJvdG9jb2xEYXRhYmFzZUVycm9yCi0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6
KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQKLXsKLSAgICBp
ZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAIm1lc3NhZ2UiXSwg
QCJtZXNzYWdlIik7Ci0gICAgc2VsZi5tZXNzYWdlID0gcGF5bG9hZFtAIm1lc3NhZ2UiXTsKLQot
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImNvZGUi
XSwgQCJjb2RlIik7Ci0gICAgc2VsZi5jb2RlID0gW3BheWxvYWRbQCJjb2RlIl0gaW50ZWdlclZh
bHVlXTsKLQotICAgIHJldHVybiBzZWxmOwotfQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJv
dG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9iamVjdAotewotICAgIGlmICgh
KHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmplY3QgdG9KU09OT2JqZWN0XS5n
ZXQoKV0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0g
KGluc3RhbmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBjb2RlOihp
bnQpY29kZQotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1
cm4gbmlsOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShtZXNz
YWdlLCBAIm1lc3NhZ2UiKTsKLQotICAgIHNlbGYubWVzc2FnZSA9IG1lc3NhZ2U7Ci0gICAgc2Vs
Zi5jb2RlID0gY29kZTsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKXNldE1lc3Nh
Z2U6KE5TU3RyaW5nICopbWVzc2FnZQotewotICAgIFtzdXBlciBzZXRTdHJpbmc6bWVzc2FnZSBm
b3JLZXk6QCJtZXNzYWdlIl07Ci19Ci0KLS0gKE5TU3RyaW5nICopbWVzc2FnZQotewotICAgIHJl
dHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAibWVzc2FnZSJdOwotfQotCi0tICh2b2lkKXNldENv
ZGU6KGludCljb2RlCi17Ci0gICAgW3N1cGVyIHNldEludGVnZXI6Y29kZSBmb3JLZXk6QCJjb2Rl
Il07Ci19Ci0KLS0gKGludCljb2RlCi17Ci0gICAgcmV0dXJuIFtzdXBlciBpbnRlZ2VyRm9yS2V5
OkAiY29kZSJdOwotfQotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xEYXRh
YmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlCi0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBh
eWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQKLXsK
LSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQot
ICAgIHNlbGYuY29sdW1uTmFtZXMgPSBwYXlsb2FkW0AiY29sdW1uTmFtZXMiXTsKLQotICAgIHNl
bGYuYnV0dG9ucyA9IHBheWxvYWRbQCJidXR0b25zIl07Ci0KLSAgICBPcHRpb25hbDxUZXN0UHJv
dG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHk+IGRpcmVj
dGlvbmFsaXR5ID0gZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9u
YWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eT4ocGF5bG9hZFtAImRpcmVjdGlvbmFsaXR5
Il0pOwotICAgIGlmIChkaXJlY3Rpb25hbGl0eSkKLSAgICAgICAgc2VsZi5kaXJlY3Rpb25hbGl0
eSA9IGRpcmVjdGlvbmFsaXR5LnZhbHVlKCk7Ci0KLSAgICBzZWxmLm5vdGVzID0gcGF5bG9hZFtA
Im5vdGVzIl07Ci0KLSAgICBzZWxmLnRpbWVzdGFtcCA9IFtwYXlsb2FkW0AidGltZXN0YW1wIl0g
ZG91YmxlVmFsdWVdOwotCi0gICAgc2VsZi52YWx1ZXMgPSBwYXlsb2FkW0AidmFsdWVzIl07Ci0K
LSAgICBzZWxmLnBheWxvYWQgPSBwYXlsb2FkW0AicGF5bG9hZCJdOwotCi0gICAgc2VsZi5lcnJv
ciA9IFtbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBh
eWxvYWRbQCJlcnJvciJdXTsKLQotICAgIHNlbGYuZXJyb3JMaXN0ID0gb2JqY0FycmF5RnJvbVBh
eWxvYWQ8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4ocGF5bG9hZFtAImVycm9yTGlzdCJdKTsK
LQotICAgIHJldHVybiBzZWxmOwotfQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xP
YmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9iamVjdAotewotICAgIGlmICghKHNlbGYg
PSBbc3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmplY3QgdG9KU09OT2JqZWN0XS5nZXQoKV0p
KQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQp
c2V0Q29sdW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWNvbHVtbk5hbWVzCi17Ci0g
ICAgW3N1cGVyIHNldEpTT05BcnJheTp0b0pTT05TdHJpbmdBcnJheShjb2x1bW5OYW1lcykgZm9y
S2V5OkAiY29sdW1uTmFtZXMiXTsKLX0KLQotLSAoTlNBcnJheS8qPE5TU3RyaW5nPiovICopY29s
dW1uTmFtZXMKLXsKLSAgICByZXR1cm4gdG9PYmpDU3RyaW5nQXJyYXkoW3N1cGVyIEpTT05BcnJh
eUZvcktleTpAImNvbHVtbk5hbWVzIl0pOwotfQotCi0tICh2b2lkKXNldEJ1dHRvbnM6KE5TQXJy
YXkvKjxOU1N0cmluZz4qLyAqKWJ1dHRvbnMKLXsKLSAgICBbc3VwZXIgc2V0SlNPTkFycmF5OnRv
SlNPTlN0cmluZ0FycmF5KGJ1dHRvbnMpIGZvcktleTpAImJ1dHRvbnMiXTsKLX0KLQotLSAoTlNB
cnJheS8qPE5TU3RyaW5nPiovICopYnV0dG9ucwotewotICAgIHJldHVybiB0b09iakNTdHJpbmdB
cnJheShbc3VwZXIgSlNPTkFycmF5Rm9yS2V5OkAiYnV0dG9ucyJdKTsKLX0KLQotLSAodm9pZClz
ZXREaXJlY3Rpb25hbGl0eTooVGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1
bmRsZURpcmVjdGlvbmFsaXR5KWRpcmVjdGlvbmFsaXR5Ci17Ci0gICAgW3N1cGVyIHNldFN0cmlu
Zzp0b1Byb3RvY29sU3RyaW5nKGRpcmVjdGlvbmFsaXR5KSBmb3JLZXk6QCJkaXJlY3Rpb25hbGl0
eSJdOwotfQotCi0tIChUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxl
RGlyZWN0aW9uYWxpdHkpZGlyZWN0aW9uYWxpdHkKLXsKLSAgICByZXR1cm4gZnJvbVByb3RvY29s
U3RyaW5nPFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rp
b25hbGl0eT4oW3N1cGVyIHN0cmluZ0ZvcktleTpAImRpcmVjdGlvbmFsaXR5Il0pLnZhbHVlKCk7
Ci19Ci0KLS0gKHZvaWQpc2V0Tm90ZXM6KE5TU3RyaW5nICopbm90ZXMKLXsKLSAgICBbc3VwZXIg
c2V0U3RyaW5nOm5vdGVzIGZvcktleTpAIm5vdGVzIl07Ci19Ci0KLS0gKE5TU3RyaW5nICopbm90
ZXMKLXsKLSAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAIm5vdGVzIl07Ci19Ci0KLS0g
KHZvaWQpc2V0VGltZXN0YW1wOihkb3VibGUpdGltZXN0YW1wCi17Ci0gICAgW3N1cGVyIHNldERv
dWJsZTp0aW1lc3RhbXAgZm9yS2V5OkAidGltZXN0YW1wIl07Ci19Ci0KLS0gKGRvdWJsZSl0aW1l
c3RhbXAKLXsKLSAgICByZXR1cm4gW3N1cGVyIGRvdWJsZUZvcktleTpAInRpbWVzdGFtcCJdOwot
fQotCi0tICh2b2lkKXNldFZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopdmFsdWVzCi17
Ci0gICAgW3N1cGVyIHNldE9iamVjdDp2YWx1ZXMgZm9yS2V5OkAidmFsdWVzIl07Ci19Ci0KLS0g
KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcwotewotICAgIFJXSVByb3RvY29sSlNPTk9i
amVjdCAqb2JqZWN0ID0gW3N1cGVyIG9iamVjdEZvcktleTpAInZhbHVlcyJdOwotICAgIGlmICgh
b2JqZWN0KQotICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiBbW1JXSVByb3RvY29sSlNP
Tk9iamVjdCBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0Oltbc3VwZXIgb2JqZWN0Rm9yS2V5OkAi
dmFsdWVzIl0gdG9KU09OT2JqZWN0XS5nZXQoKV07Ci19Ci0KLS0gKHZvaWQpc2V0UGF5bG9hZDoo
UldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZAotewotICAgIFtzdXBlciBzZXRPYmplY3Q6
cGF5bG9hZCBmb3JLZXk6QCJwYXlsb2FkIl07Ci19Ci0KLS0gKFJXSVByb3RvY29sSlNPTk9iamVj
dCAqKXBheWxvYWQKLXsKLSAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9iamVjdCA9IFtzdXBl
ciBvYmplY3RGb3JLZXk6QCJwYXlsb2FkIl07Ci0gICAgaWYgKCFvYmplY3QpCi0gICAgICAgIHJl
dHVybiBuaWw7Ci0gICAgcmV0dXJuIFtbUldJUHJvdG9jb2xKU09OT2JqZWN0IGFsbG9jXSBpbml0
V2l0aEpTT05PYmplY3Q6W1tzdXBlciBvYmplY3RGb3JLZXk6QCJwYXlsb2FkIl0gdG9KU09OT2Jq
ZWN0XS5nZXQoKV07Ci19Ci0KLS0gKHZvaWQpc2V0RXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNl
RXJyb3IgKillcnJvcgotewotICAgIFtzdXBlciBzZXRPYmplY3Q6ZXJyb3IgZm9yS2V5OkAiZXJy
b3IiXTsKLX0KLQotLSAoVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKWVycm9yCi17Ci0gICAg
UldJUHJvdG9jb2xKU09OT2JqZWN0ICpvYmplY3QgPSBbc3VwZXIgb2JqZWN0Rm9yS2V5OkAiZXJy
b3IiXTsKLSAgICBpZiAoIW9iamVjdCkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4g
W1tUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6W1tz
dXBlciBvYmplY3RGb3JLZXk6QCJlcnJvciJdIHRvSlNPTk9iamVjdF0uZ2V0KCldOwotfQotCi0t
ICh2b2lkKXNldEVycm9yTGlzdDooTlNBcnJheS8qPFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I+
Ki8gKillcnJvckxpc3QKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFX0lOX0FS
UkFZKGVycm9yTGlzdCwgW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgY2xhc3NdKTsKLSAgICBb
c3VwZXIgc2V0SlNPTkFycmF5OnRvSlNPTk9iamVjdEFycmF5KGVycm9yTGlzdCkgZm9yS2V5OkAi
ZXJyb3JMaXN0Il07Ci19Ci0KLS0gKE5TQXJyYXkvKjxUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9y
PiovICopZXJyb3JMaXN0Ci17Ci0gICAgcmV0dXJuIHRvT2JqQ0FycmF5PFRlc3RQcm90b2NvbERh
dGFiYXNlRXJyb3I+KFtzdXBlciBKU09OQXJyYXlGb3JLZXk6QCJlcnJvckxpc3QiXSk7Ci19Ci0K
LUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVu
ZGxlCi0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9u
YXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVy
IGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
UkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImNvbHVtbk5hbWVzIl0sIEAiY29sdW1uTmFtZXMi
KTsKLSAgICBzZWxmLmNvbHVtbk5hbWVzID0gcGF5bG9hZFtAImNvbHVtbk5hbWVzIl07Ci0KLSAg
ICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJidXR0b25z
Il0sIEAiYnV0dG9ucyIpOwotICAgIHNlbGYuYnV0dG9ucyA9IHBheWxvYWRbQCJidXR0b25zIl07
Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJk
aXJlY3Rpb25hbGl0eSJdLCBAImRpcmVjdGlvbmFsaXR5Iik7Ci0gICAgT3B0aW9uYWw8VGVzdFBy
b3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eT4gZGlyZWN0aW9uYWxp
dHkgPSBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5k
bGVEaXJlY3Rpb25hbGl0eT4ocGF5bG9hZFtAImRpcmVjdGlvbmFsaXR5Il0pOwotICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfQkFEX0VOVU1fVkFMVUUoZGlyZWN0aW9uYWxpdHksIEAiZGlyZWN0aW9u
YWxpdHkiKTsKLSAgICBzZWxmLmRpcmVjdGlvbmFsaXR5ID0gZGlyZWN0aW9uYWxpdHkudmFsdWUo
KTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtA
Im5vdGVzIl0sIEAibm90ZXMiKTsKLSAgICBzZWxmLm5vdGVzID0gcGF5bG9hZFtAIm5vdGVzIl07
Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJ0
aW1lc3RhbXAiXSwgQCJ0aW1lc3RhbXAiKTsKLSAgICBzZWxmLnRpbWVzdGFtcCA9IFtwYXlsb2Fk
W0AidGltZXN0YW1wIl0gZG91YmxlVmFsdWVdOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9S
RVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AidmFsdWVzIl0sIEAidmFsdWVzIik7Ci0gICAgc2Vs
Zi52YWx1ZXMgPSBwYXlsb2FkW0AidmFsdWVzIl07Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9S
X1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJwYXlsb2FkIl0sIEAicGF5bG9hZCIpOwotICAg
IHNlbGYucGF5bG9hZCA9IHBheWxvYWRbQCJwYXlsb2FkIl07Ci0KLSAgICBUSFJPV19FWENFUFRJ
T05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJlcnJvciJdLCBAImVycm9yIik7Ci0g
ICAgc2VsZi5lcnJvciA9IFtbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBhbGxvY10gaW5pdFdp
dGhQYXlsb2FkOnBheWxvYWRbQCJlcnJvciJdXTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
UkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImVycm9yTGlzdCJdLCBAImVycm9yTGlzdCIpOwot
ICAgIHNlbGYuZXJyb3JMaXN0ID0gb2JqY0FycmF5RnJvbVBheWxvYWQ8VGVzdFByb3RvY29sRGF0
YWJhc2VFcnJvcj4ocGF5bG9hZFtAImVycm9yTGlzdCJdKTsKLQotICAgIHJldHVybiBzZWxmOwot
fQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNP
Tk9iamVjdCAqKW9iamVjdAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09O
T2JqZWN0OltvYmplY3QgdG9KU09OT2JqZWN0XS5nZXQoKV0pKQotICAgICAgICByZXR1cm4gbmls
OwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbHVt
bk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcyBidXR0b25zOihOU0Fy
cmF5Lyo8TlNTdHJpbmc+Ki8gKilidXR0b25zIGRpcmVjdGlvbmFsaXR5OihUZXN0UHJvdG9jb2xE
YXRhYmFzZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5KWRpcmVjdGlvbmFsaXR5IG5vdGVz
OihOU1N0cmluZyAqKW5vdGVzIHRpbWVzdGFtcDooZG91YmxlKXRpbWVzdGFtcCB2YWx1ZXM6KFJX
SVByb3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcyBwYXlsb2FkOihSV0lQcm90b2NvbEpTT05PYmpl
Y3QgKilwYXlsb2FkIGVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICopZXJyb3IgZXJy
b3JMaXN0OihOU0FycmF5Lyo8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4qLyAqKWVycm9yTGlz
dAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmls
OwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShjb2x1bW5OYW1l
cywgQCJjb2x1bW5OYW1lcyIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJP
UEVSVFkoYnV0dG9ucywgQCJidXR0b25zIik7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFV
SVJFRF9QUk9QRVJUWShub3RlcywgQCJub3RlcyIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
UkVRVUlSRURfUFJPUEVSVFkodmFsdWVzLCBAInZhbHVlcyIpOwotICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZCwgQCJwYXlsb2FkIik7Ci0gICAgVEhST1df
RVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShlcnJvciwgQCJlcnJvciIpOwotICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkoZXJyb3JMaXN0LCBAImVycm9yTGlz
dCIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEVfSU5fQVJSQVkoZXJyb3JMaXN0
LCBbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBjbGFzc10pOwotCi0gICAgc2VsZi5jb2x1bW5O
YW1lcyA9IGNvbHVtbk5hbWVzOwotICAgIHNlbGYuYnV0dG9ucyA9IGJ1dHRvbnM7Ci0gICAgc2Vs
Zi5kaXJlY3Rpb25hbGl0eSA9IGRpcmVjdGlvbmFsaXR5OwotICAgIHNlbGYubm90ZXMgPSBub3Rl
czsKLSAgICBzZWxmLnRpbWVzdGFtcCA9IHRpbWVzdGFtcDsKLSAgICBzZWxmLnZhbHVlcyA9IHZh
bHVlczsKLSAgICBzZWxmLnBheWxvYWQgPSBwYXlsb2FkOwotICAgIHNlbGYuZXJyb3IgPSBlcnJv
cjsKLSAgICBzZWxmLmVycm9yTGlzdCA9IGVycm9yTGlzdDsKLQotICAgIHJldHVybiBzZWxmOwot
fQotCi0tICh2b2lkKXNldENvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1
bW5OYW1lcwotewotICAgIFtzdXBlciBzZXRKU09OQXJyYXk6dG9KU09OU3RyaW5nQXJyYXkoY29s
dW1uTmFtZXMpIGZvcktleTpAImNvbHVtbk5hbWVzIl07Ci19Ci0KLS0gKE5TQXJyYXkvKjxOU1N0
cmluZz4qLyAqKWNvbHVtbk5hbWVzCi17Ci0gICAgcmV0dXJuIHRvT2JqQ1N0cmluZ0FycmF5KFtz
dXBlciBKU09OQXJyYXlGb3JLZXk6QCJjb2x1bW5OYW1lcyJdKTsKLX0KLQotLSAodm9pZClzZXRC
dXR0b25zOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilidXR0b25zCi17Ci0gICAgW3N1cGVyIHNl
dEpTT05BcnJheTp0b0pTT05TdHJpbmdBcnJheShidXR0b25zKSBmb3JLZXk6QCJidXR0b25zIl07
Ci19Ci0KLS0gKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWJ1dHRvbnMKLXsKLSAgICByZXR1cm4g
dG9PYmpDU3RyaW5nQXJyYXkoW3N1cGVyIEpTT05BcnJheUZvcktleTpAImJ1dHRvbnMiXSk7Ci19
Ci0KLS0gKHZvaWQpc2V0RGlyZWN0aW9uYWxpdHk6KFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1l
dGVyQnVuZGxlRGlyZWN0aW9uYWxpdHkpZGlyZWN0aW9uYWxpdHkKLXsKLSAgICBbc3VwZXIgc2V0
U3RyaW5nOnRvUHJvdG9jb2xTdHJpbmcoZGlyZWN0aW9uYWxpdHkpIGZvcktleTpAImRpcmVjdGlv
bmFsaXR5Il07Ci19Ci0KLS0gKFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlRGly
ZWN0aW9uYWxpdHkpZGlyZWN0aW9uYWxpdHkKLXsKLSAgICByZXR1cm4gZnJvbVByb3RvY29sU3Ry
aW5nPFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHk+KFtz
dXBlciBzdHJpbmdGb3JLZXk6QCJkaXJlY3Rpb25hbGl0eSJdKS52YWx1ZSgpOwotfQotCi0tICh2
b2lkKXNldE5vdGVzOihOU1N0cmluZyAqKW5vdGVzCi17Ci0gICAgW3N1cGVyIHNldFN0cmluZzpu
b3RlcyBmb3JLZXk6QCJub3RlcyJdOwotfQotCi0tIChOU1N0cmluZyAqKW5vdGVzCi17Ci0gICAg
cmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJub3RlcyJdOwotfQotCi0tICh2b2lkKXNldFRp
bWVzdGFtcDooZG91YmxlKXRpbWVzdGFtcAotewotICAgIFtzdXBlciBzZXREb3VibGU6dGltZXN0
YW1wIGZvcktleTpAInRpbWVzdGFtcCJdOwotfQotCi0tIChkb3VibGUpdGltZXN0YW1wCi17Ci0g
ICAgcmV0dXJuIFtzdXBlciBkb3VibGVGb3JLZXk6QCJ0aW1lc3RhbXAiXTsKLX0KLQotLSAodm9p
ZClzZXRWYWx1ZXM6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcwotewotICAgIFtzdXBl
ciBzZXRPYmplY3Q6dmFsdWVzIGZvcktleTpAInZhbHVlcyJdOwotfQotCi0tIChSV0lQcm90b2Nv
bEpTT05PYmplY3QgKil2YWx1ZXMKLXsKLSAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9iamVj
dCA9IFtzdXBlciBvYmplY3RGb3JLZXk6QCJ2YWx1ZXMiXTsKLSAgICBpZiAoIW9iamVjdCkKLSAg
ICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4gW1tSV0lQcm90b2NvbEpTT05PYmplY3QgYWxs
b2NdIGluaXRXaXRoSlNPTk9iamVjdDpbW3N1cGVyIG9iamVjdEZvcktleTpAInZhbHVlcyJdIHRv
SlNPTk9iamVjdF0uZ2V0KCldOwotfQotCi0tICh2b2lkKXNldFBheWxvYWQ6KFJXSVByb3RvY29s
SlNPTk9iamVjdCAqKXBheWxvYWQKLXsKLSAgICBbc3VwZXIgc2V0T2JqZWN0OnBheWxvYWQgZm9y
S2V5OkAicGF5bG9hZCJdOwotfQotCi0tIChSV0lQcm90b2NvbEpTT05PYmplY3QgKilwYXlsb2Fk
Ci17Ci0gICAgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvYmplY3QgPSBbc3VwZXIgb2JqZWN0Rm9y
S2V5OkAicGF5bG9hZCJdOwotICAgIGlmICghb2JqZWN0KQotICAgICAgICByZXR1cm4gbmlsOwot
ICAgIHJldHVybiBbW1JXSVByb3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5pdFdpdGhKU09OT2Jq
ZWN0Oltbc3VwZXIgb2JqZWN0Rm9yS2V5OkAicGF5bG9hZCJdIHRvSlNPTk9iamVjdF0uZ2V0KCld
OwotfQotCi0tICh2b2lkKXNldEVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICopZXJy
b3IKLXsKLSAgICBbc3VwZXIgc2V0T2JqZWN0OmVycm9yIGZvcktleTpAImVycm9yIl07Ci19Ci0K
LS0gKFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKillcnJvcgotewotICAgIFJXSVByb3RvY29s
SlNPTk9iamVjdCAqb2JqZWN0ID0gW3N1cGVyIG9iamVjdEZvcktleTpAImVycm9yIl07Ci0gICAg
aWYgKCFvYmplY3QpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgcmV0dXJuIFtbVGVzdFByb3Rv
Y29sRGF0YWJhc2VFcnJvciBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0Oltbc3VwZXIgb2JqZWN0
Rm9yS2V5OkAiZXJyb3IiXSB0b0pTT05PYmplY3RdLmdldCgpXTsKLX0KLQotLSAodm9pZClzZXRF
cnJvckxpc3Q6KE5TQXJyYXkvKjxUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yPiovICopZXJyb3JM
aXN0Ci17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRV9JTl9BUlJBWShlcnJvckxp
c3QsIFtUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGNsYXNzXSk7Ci0gICAgW3N1cGVyIHNldEpT
T05BcnJheTp0b0pTT05PYmplY3RBcnJheShlcnJvckxpc3QpIGZvcktleTpAImVycm9yTGlzdCJd
OwotfQotCi0tIChOU0FycmF5Lyo8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4qLyAqKWVycm9y
TGlzdAotewotICAgIHJldHVybiB0b09iakNBcnJheTxUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9y
Pihbc3VwZXIgSlNPTkFycmF5Rm9yS2V5OkAiZXJyb3JMaXN0Il0pOwotfQotCi1AZW5kCi0KLUBp
bXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xEYXRhYmFzZU9iamVjdFdpdGhQcm9wZXJ0eU5hbWVD
b25mbGljdHMKLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBOU0Rp
Y3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZAotewotICAgIGlmICghKHNlbGYgPSBb
c3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiaW50ZWdlciJdLCBAImludGVnZXIiKTsK
LSAgICBzZWxmLmludGVnZXIgPSBwYXlsb2FkW0AiaW50ZWdlciJdOwotCi0gICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiYXJyYXkiXSwgQCJhcnJheSIp
OwotICAgIHNlbGYuYXJyYXkgPSBwYXlsb2FkW0AiYXJyYXkiXTsKLQotICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAInN0cmluZyJdLCBAInN0cmluZyIp
OwotICAgIHNlbGYuc3RyaW5nID0gcGF5bG9hZFtAInN0cmluZyJdOwotCi0gICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AidmFsdWUiXSwgQCJ2YWx1ZSIp
OwotICAgIHNlbGYudmFsdWUgPSBwYXlsb2FkW0AidmFsdWUiXTsKLQotICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAIm9iamVjdCJdLCBAIm9iamVjdCIp
OwotICAgIHNlbGYub2JqZWN0ID0gcGF5bG9hZFtAIm9iamVjdCJdOwotCi0gICAgcmV0dXJuIHNl
bGY7Ci19Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9j
b2xKU09OT2JqZWN0ICopb2JqZWN0Ci17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0
aEpTT05PYmplY3Q6W29iamVjdCB0b0pTT05PYmplY3RdLmdldCgpXSkpCi0gICAgICAgIHJldHVy
biBuaWw7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
SW50ZWdlcjooTlNTdHJpbmcgKilpbnRlZ2VyIGFycmF5OihOU1N0cmluZyAqKWFycmF5IHN0cmlu
ZzooTlNTdHJpbmcgKilzdHJpbmcgdmFsdWU6KE5TU3RyaW5nICopdmFsdWUgb2JqZWN0OihOU1N0
cmluZyAqKW9iamVjdAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAg
ICByZXR1cm4gbmlsOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJU
WShpbnRlZ2VyLCBAImludGVnZXIiKTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVE
X1BST1BFUlRZKGFycmF5LCBAImFycmF5Iik7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFV
SVJFRF9QUk9QRVJUWShzdHJpbmcsIEAic3RyaW5nIik7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9SRVFVSVJFRF9QUk9QRVJUWSh2YWx1ZSwgQCJ2YWx1ZSIpOwotICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfUkVRVUlSRURfUFJPUEVSVFkob2JqZWN0LCBAIm9iamVjdCIpOwotCi0gICAgc2VsZi5p
bnRlZ2VyID0gaW50ZWdlcjsKLSAgICBzZWxmLmFycmF5ID0gYXJyYXk7Ci0gICAgc2VsZi5zdHJp
bmcgPSBzdHJpbmc7Ci0gICAgc2VsZi52YWx1ZSA9IHZhbHVlOwotICAgIHNlbGYub2JqZWN0ID0g
b2JqZWN0OwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpc2V0SW50ZWdlcjooTlNT
dHJpbmcgKilpbnRlZ2VyCi17Ci0gICAgW3N1cGVyIHNldFN0cmluZzppbnRlZ2VyIGZvcktleTpA
ImludGVnZXIiXTsKLX0KLQotLSAoTlNTdHJpbmcgKilpbnRlZ2VyCi17Ci0gICAgcmV0dXJuIFtz
dXBlciBzdHJpbmdGb3JLZXk6QCJpbnRlZ2VyIl07Ci19Ci0KLS0gKHZvaWQpc2V0QXJyYXk6KE5T
U3RyaW5nICopYXJyYXkKLXsKLSAgICBbc3VwZXIgc2V0U3RyaW5nOmFycmF5IGZvcktleTpAImFy
cmF5Il07Ci19Ci0KLS0gKE5TU3RyaW5nICopYXJyYXkKLXsKLSAgICByZXR1cm4gW3N1cGVyIHN0
cmluZ0ZvcktleTpAImFycmF5Il07Ci19Ci0KLS0gKHZvaWQpc2V0U3RyaW5nOihOU1N0cmluZyAq
KXN0cmluZwotewotICAgIFtzdXBlciBzZXRTdHJpbmc6c3RyaW5nIGZvcktleTpAInN0cmluZyJd
OwotfQotCi0tIChOU1N0cmluZyAqKXN0cmluZwotewotICAgIHJldHVybiBbc3VwZXIgc3RyaW5n
Rm9yS2V5OkAic3RyaW5nIl07Ci19Ci0KLS0gKHZvaWQpc2V0VmFsdWU6KE5TU3RyaW5nICopdmFs
dWUKLXsKLSAgICBbc3VwZXIgc2V0U3RyaW5nOnZhbHVlIGZvcktleTpAInZhbHVlIl07Ci19Ci0K
LS0gKE5TU3RyaW5nICopdmFsdWUKLXsKLSAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpA
InZhbHVlIl07Ci19Ci0KLS0gKHZvaWQpc2V0T2JqZWN0OihOU1N0cmluZyAqKW9iamVjdAotewot
ICAgIFtzdXBlciBzZXRTdHJpbmc6b2JqZWN0IGZvcktleTpAIm9iamVjdCJdOwotfQotCi0tIChO
U1N0cmluZyAqKW9iamVjdAotewotICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAib2Jq
ZWN0Il07Ci19Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbERhdGFiYXNl
RHVtbXlPYmplY3QKLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBO
U0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZAotewotICAgIGlmICghKHNlbGYg
PSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgcmV0dXJuIHNlbGY7
Ci19Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xK
U09OT2JqZWN0ICopb2JqZWN0Ci17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEpT
T05PYmplY3Q6W29iamVjdCB0b0pTT05PYmplY3RdLmdldCgpXSkpCi0gICAgICAgIHJldHVybiBu
aWw7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotQGVuZAotCi0KLUBpbXBsZW1lbnRhdGlvbiBU
ZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlCi0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0
aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQK
LXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsK
LQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImRp
cmVjdGlvbmFsaXR5Il0sIEAiZGlyZWN0aW9uYWxpdHkiKTsKLSAgICBPcHRpb25hbDxUZXN0UHJv
dG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHk+IGRpcmVjdGlvbmFsaXR5ID0g
ZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rp
b25hbGl0eT4ocGF5bG9hZFtAImRpcmVjdGlvbmFsaXR5Il0pOwotICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfQkFEX0VOVU1fVkFMVUUoZGlyZWN0aW9uYWxpdHksIEAiZGlyZWN0aW9uYWxpdHkiKTsK
LSAgICBzZWxmLmRpcmVjdGlvbmFsaXR5ID0gZGlyZWN0aW9uYWxpdHkudmFsdWUoKTsKLQotICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImJ1dHRvbnMi
XSwgQCJidXR0b25zIik7Ci0gICAgc2VsZi5idXR0b25zID0gcGF5bG9hZFtAImJ1dHRvbnMiXTsK
LQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImNv
bHVtbk5hbWVzIl0sIEAiY29sdW1uTmFtZXMiKTsKLSAgICBzZWxmLmNvbHVtbk5hbWVzID0gcGF5
bG9hZFtAImNvbHVtbk5hbWVzIl07Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVE
X1BST1BFUlRZKHBheWxvYWRbQCJub3RlcyJdLCBAIm5vdGVzIik7Ci0gICAgc2VsZi5ub3RlcyA9
IHBheWxvYWRbQCJub3RlcyJdOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9Q
Uk9QRVJUWShwYXlsb2FkW0AidGltZXN0YW1wIl0sIEAidGltZXN0YW1wIik7Ci0gICAgc2VsZi50
aW1lc3RhbXAgPSBbcGF5bG9hZFtAInRpbWVzdGFtcCJdIGRvdWJsZVZhbHVlXTsKLQotICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAInZhbHVlcyJdLCBA
InZhbHVlcyIpOwotICAgIHNlbGYudmFsdWVzID0gcGF5bG9hZFtAInZhbHVlcyJdOwotCi0gICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AicGF5bG9hZCJd
LCBAInBheWxvYWQiKTsKLSAgICBzZWxmLnBheWxvYWQgPSBwYXlsb2FkW0AicGF5bG9hZCJdOwot
Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiZXJy
b3IiXSwgQCJlcnJvciIpOwotICAgIHNlbGYuZXJyb3IgPSBbW1Rlc3RQcm90b2NvbERhdGFiYXNl
RXJyb3IgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkW0AiZXJyb3IiXV07Ci0KLSAgICBy
ZXR1cm4gc2VsZjsKLX0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihS
V0lQcm90b2NvbEpTT05PYmplY3QgKilvYmplY3QKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVy
IGluaXRXaXRoSlNPTk9iamVjdDpbb2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0KCldKSkKLSAgICAg
ICAgcmV0dXJuIG5pbDsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhEaXJlY3Rpb25hbGl0eTooVGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZURp
cmVjdGlvbmFsaXR5KWRpcmVjdGlvbmFsaXR5IGJ1dHRvbnM6KE5TQXJyYXkvKjxOU1N0cmluZz4q
LyAqKWJ1dHRvbnMgY29sdW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWNvbHVtbk5h
bWVzIG5vdGVzOihOU1N0cmluZyAqKW5vdGVzIHRpbWVzdGFtcDooZG91YmxlKXRpbWVzdGFtcCB2
YWx1ZXM6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcyBwYXlsb2FkOihSV0lQcm90b2Nv
bEpTT05PYmplY3QgKilwYXlsb2FkIGVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICop
ZXJyb3IKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJu
IG5pbDsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkoYnV0dG9u
cywgQCJidXR0b25zIik7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJU
WShjb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
UkVRVUlSRURfUFJPUEVSVFkobm90ZXMsIEAibm90ZXMiKTsKLSAgICBUSFJPV19FWENFUFRJT05f
Rk9SX1JFUVVJUkVEX1BST1BFUlRZKHZhbHVlcywgQCJ2YWx1ZXMiKTsKLSAgICBUSFJPV19FWENF
UFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWQsIEAicGF5bG9hZCIpOwotICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkoZXJyb3IsIEAiZXJyb3IiKTsKLQot
ICAgIHNlbGYuZGlyZWN0aW9uYWxpdHkgPSBkaXJlY3Rpb25hbGl0eTsKLSAgICBzZWxmLmJ1dHRv
bnMgPSBidXR0b25zOwotICAgIHNlbGYuY29sdW1uTmFtZXMgPSBjb2x1bW5OYW1lczsKLSAgICBz
ZWxmLm5vdGVzID0gbm90ZXM7Ci0gICAgc2VsZi50aW1lc3RhbXAgPSB0aW1lc3RhbXA7Ci0gICAg
c2VsZi52YWx1ZXMgPSB2YWx1ZXM7Ci0gICAgc2VsZi5wYXlsb2FkID0gcGF5bG9hZDsKLSAgICBz
ZWxmLmVycm9yID0gZXJyb3I7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClzZXRE
aXJlY3Rpb25hbGl0eTooVGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFs
aXR5KWRpcmVjdGlvbmFsaXR5Ci17Ci0gICAgW3N1cGVyIHNldFN0cmluZzp0b1Byb3RvY29sU3Ry
aW5nKGRpcmVjdGlvbmFsaXR5KSBmb3JLZXk6QCJkaXJlY3Rpb25hbGl0eSJdOwotfQotCi0tIChU
ZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHkpZGlyZWN0aW9uYWxp
dHkKLXsKLSAgICByZXR1cm4gZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbFRlc3RQYXJh
bWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eT4oW3N1cGVyIHN0cmluZ0ZvcktleTpAImRpcmVjdGlv
bmFsaXR5Il0pLnZhbHVlKCk7Ci19Ci0KLS0gKHZvaWQpc2V0QnV0dG9uczooTlNBcnJheS8qPE5T
U3RyaW5nPiovICopYnV0dG9ucwotewotICAgIFtzdXBlciBzZXRKU09OQXJyYXk6dG9KU09OU3Ry
aW5nQXJyYXkoYnV0dG9ucykgZm9yS2V5OkAiYnV0dG9ucyJdOwotfQotCi0tIChOU0FycmF5Lyo8
TlNTdHJpbmc+Ki8gKilidXR0b25zCi17Ci0gICAgcmV0dXJuIHRvT2JqQ1N0cmluZ0FycmF5KFtz
dXBlciBKU09OQXJyYXlGb3JLZXk6QCJidXR0b25zIl0pOwotfQotCi0tICh2b2lkKXNldENvbHVt
bk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcwotewotICAgIFtzdXBl
ciBzZXRKU09OQXJyYXk6dG9KU09OU3RyaW5nQXJyYXkoY29sdW1uTmFtZXMpIGZvcktleTpAImNv
bHVtbk5hbWVzIl07Ci19Ci0KLS0gKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWNvbHVtbk5hbWVz
Ci17Ci0gICAgcmV0dXJuIHRvT2JqQ1N0cmluZ0FycmF5KFtzdXBlciBKU09OQXJyYXlGb3JLZXk6
QCJjb2x1bW5OYW1lcyJdKTsKLX0KLQotLSAodm9pZClzZXROb3RlczooTlNTdHJpbmcgKilub3Rl
cwotewotICAgIFtzdXBlciBzZXRTdHJpbmc6bm90ZXMgZm9yS2V5OkAibm90ZXMiXTsKLX0KLQot
LSAoTlNTdHJpbmcgKilub3RlcwotewotICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAi
bm90ZXMiXTsKLX0KLQotLSAodm9pZClzZXRUaW1lc3RhbXA6KGRvdWJsZSl0aW1lc3RhbXAKLXsK
LSAgICBbc3VwZXIgc2V0RG91YmxlOnRpbWVzdGFtcCBmb3JLZXk6QCJ0aW1lc3RhbXAiXTsKLX0K
LQotLSAoZG91YmxlKXRpbWVzdGFtcAotewotICAgIHJldHVybiBbc3VwZXIgZG91YmxlRm9yS2V5
OkAidGltZXN0YW1wIl07Ci19Ci0KLS0gKHZvaWQpc2V0VmFsdWVzOihSV0lQcm90b2NvbEpTT05P
YmplY3QgKil2YWx1ZXMKLXsKLSAgICBbc3VwZXIgc2V0T2JqZWN0OnZhbHVlcyBmb3JLZXk6QCJ2
YWx1ZXMiXTsKLX0KLQotLSAoUldJUHJvdG9jb2xKU09OT2JqZWN0ICopdmFsdWVzCi17Ci0gICAg
UldJUHJvdG9jb2xKU09OT2JqZWN0ICpvYmplY3QgPSBbc3VwZXIgb2JqZWN0Rm9yS2V5OkAidmFs
dWVzIl07Ci0gICAgaWYgKCFvYmplY3QpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgcmV0dXJu
IFtbUldJUHJvdG9jb2xKU09OT2JqZWN0IGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6W1tzdXBl
ciBvYmplY3RGb3JLZXk6QCJ2YWx1ZXMiXSB0b0pTT05PYmplY3RdLmdldCgpXTsKLX0KLQotLSAo
dm9pZClzZXRQYXlsb2FkOihSV0lQcm90b2NvbEpTT05PYmplY3QgKilwYXlsb2FkCi17Ci0gICAg
W3N1cGVyIHNldE9iamVjdDpwYXlsb2FkIGZvcktleTpAInBheWxvYWQiXTsKLX0KLQotLSAoUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZAotewotICAgIFJXSVByb3RvY29sSlNPTk9iamVj
dCAqb2JqZWN0ID0gW3N1cGVyIG9iamVjdEZvcktleTpAInBheWxvYWQiXTsKLSAgICBpZiAoIW9i
amVjdCkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4gW1tSV0lQcm90b2NvbEpTT05P
YmplY3QgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDpbW3N1cGVyIG9iamVjdEZvcktleTpAInBh
eWxvYWQiXSB0b0pTT05PYmplY3RdLmdldCgpXTsKLX0KLQotLSAodm9pZClzZXRFcnJvcjooVGVz
dFByb3RvY29sRGF0YWJhc2VFcnJvciAqKWVycm9yCi17Ci0gICAgW3N1cGVyIHNldE9iamVjdDpl
cnJvciBmb3JLZXk6QCJlcnJvciJdOwotfQotCi0tIChUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9y
ICopZXJyb3IKLXsKLSAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9iamVjdCA9IFtzdXBlciBv
YmplY3RGb3JLZXk6QCJlcnJvciJdOwotICAgIGlmICghb2JqZWN0KQotICAgICAgICByZXR1cm4g
bmlsOwotICAgIHJldHVybiBbW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgYWxsb2NdIGluaXRX
aXRoSlNPTk9iamVjdDpbW3N1cGVyIG9iamVjdEZvcktleTpAImVycm9yIl0gdG9KU09OT2JqZWN0
XS5nZXQoKV07Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVz
Lm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy9leHBlY3RlZC90eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24t
cmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvZXhwZWN0ZWQvdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uLXJlc3VsdApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTg0ZGFjZGNhZjcuLjAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2V4cGVjdGVkL3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbi1yZXN1bHQKKysrIC9k
ZXYvbnVsbApAQCAtMSwxNjQ5ICswLDAgQEAKLSMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNr
ZW5kQ29tbWFuZHMuanMKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJl
cXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotLy8gVGVzdAotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigi
VGVzdCIsIG51bGwpOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIlRlc3QuVW5jYXN0
ZWRBbmltYWxzIiwge1BpZ3M6ICJQaWdzIiwgQ293czogIkNvd3MiLCBDYXRzOiAiQ2F0cyIsIEhl
bnM6ICJIZW5zIn0pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIlRlc3QuQ2FzdGVk
QW5pbWFscyIsIHtEdWNrczogIkR1Y2tzIiwgSGVuczogIkhlbnMiLCBDcm93czogIkNyb3dzIiwg
RmxhbWluZ29zOiAiRmxhbWluZ29zIn0pOwotSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFp
bigiVGVzdCIsIG51bGwpOwotIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMu
anMKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUt
Y2FzdHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0j
cHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Igewot
Ci1jbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBz
ZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hl
cikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQotICAgIEJh
Y2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFj
a2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPEJhY2tlbmREaXNw
YXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwotfTsKLQotCi0KLQotfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKLSMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0K
LSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXR5cGVkZWYgU3RyaW5nIEVycm9y
U3RyaW5nOwotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRl
c3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNw
YXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVp
cmluZy1ydW50aW1lLWNhc3RzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlz
cGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5k
Um91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvTmV2
ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNpZiBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSNpbmNsdWRlICJUZXN0QWx0ZXJu
YXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIEluc3BlY3RvciB7
Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0QmFj
a2VuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0
Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5n
LXJ1bnRpbWUtY2FzdHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIK
LSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgRnJvbnRlbmRSb3V0ZXI7Ci0K
LX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNw
YXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1l
LWNhc3RzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgi
Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0K
LX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERp
c3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1j
YXN0cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNw
cmFnbWEgb25jZQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xU
eXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0
b3IgewotCi0KLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLS8vIEZvcndhcmQgZGVjbGFy
YXRpb25zLgotbmFtZXNwYWNlIFRlc3QgewotY2xhc3MgVHlwZU5lZWRpbmdDYXN0OwotY2xhc3Mg
UmVjdXJzaXZlT2JqZWN0MTsKLWNsYXNzIFJlY3Vyc2l2ZU9iamVjdDI7Ci1lbnVtIGNsYXNzIFVu
Y2FzdGVkQW5pbWFsczsKLWVudW0gY2xhc3MgQ2FzdGVkQW5pbWFsczsKLX0gLy8gVGVzdAotLy8g
RW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgotCi0KLS8vIFR5cGVkZWZzLgotbmFtZXNwYWNl
IFRlc3QgewotdHlwZWRlZiBpbnQgQ2FzdGVkT2JqZWN0SWQ7Ci10eXBlZGVmIGludCBVbmNhc3Rl
ZE9iamVjdElkOwotfSAvLyBUZXN0Ci0vLyBFbmQgb2YgdHlwZWRlZnMuCi0KLW5hbWVzcGFjZSBU
ZXN0SGVscGVycyB7Ci0KLVN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSk7Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShUIGVudW1W
YWx1ZSkKLXsKLSAgICByZXR1cm4gZ2V0RW51bUNvbnN0YW50VmFsdWUoc3RhdGljX2Nhc3Q8aW50
PihlbnVtVmFsdWUpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKLQotbmFtZXNw
YWNlIFRlc3QgewotLyogQSBkdW1teSB0eXBlIHRoYXQgcmVxdWlyZXMgcnVudGltZSBjYXN0cywg
YW5kIGZvcmNlcyBub24tcHJpbWl0aXZlIHJlZmVyZW5jZWQgdHlwZXMgdG8gYWxzbyBlbWl0IHJ1
bnRpbWUgY2FzdCBoZWxwZXJzLiAqLwotY2xhc3MgVHlwZU5lZWRpbmdDYXN0IDogcHVibGljIEpT
T046Ok9iamVjdEJhc2UgewotcHVibGljOgotICAgIGVudW0gewotICAgICAgICBOb0ZpZWxkc1Nl
dCA9IDAsCi0gICAgICAgIFN0cmluZ1NldCA9IDEgPDwgMCwKLSAgICAgICAgTnVtYmVyU2V0ID0g
MSA8PCAxLAotICAgICAgICBBbmltYWxzU2V0ID0gMSA8PCAyLAotICAgICAgICBJZFNldCA9IDEg
PDwgMywKLSAgICAgICAgVHJlZVNldCA9IDEgPDwgNCwKLSAgICAgICAgQWxsRmllbGRzU2V0ID0g
KFN0cmluZ1NldCB8IE51bWJlclNldCB8IEFuaW1hbHNTZXQgfCBJZFNldCB8IFRyZWVTZXQpCi0g
ICAgfTsKLQotICAgIHRlbXBsYXRlPGludCBTVEFURT4KLSAgICBjbGFzcyBCdWlsZGVyIHsKLSAg
ICBwcml2YXRlOgotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBtX3Jlc3VsdDsKLQotICAg
ICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUo
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRl
cjxTVEFURSB8IFNURVA+Kj4odGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyKFJl
ZjwvKlR5cGVOZWVkaW5nQ2FzdCovSlNPTjo6T2JqZWN0PiYmIG9iamVjdCkKLSAgICAgICAgICAg
IDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9p
bml0X3N0YXRlKTsKLSAgICAgICAgfQotICAgICAgICBmcmllbmQgY2xhc3MgVHlwZU5lZWRpbmdD
YXN0OwotICAgIHB1YmxpYzoKLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU3RyaW5nU2V0PiYg
c2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTdHJpbmdTZXQpLCBwcm9wZXJ0eV9zdHJpbmdfYWxyZWFk
eV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygic3RyaW5nIl9zLCB2YWx1
ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFN0cmluZ1NldD4oKTsKLSAgICAgICAg
fQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBOdW1iZXJTZXQ+JiBzZXROdW1iZXIoaW50IHZh
bHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTnVt
YmVyU2V0KSwgcHJvcGVydHlfbnVtYmVyX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXRJbnRlZ2VyKCJudW1iZXIiX3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8TnVtYmVyU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IEFuaW1hbHNTZXQ+JiBzZXRBbmltYWxzKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNh
c3RlZEFuaW1hbHMgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBBbmltYWxzU2V0KSwgcHJvcGVydHlfYW5pbWFsc19hbHJlYWR5X3NldCk7Ci0g
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJhbmltYWxzIl9zLCBJbnNwZWN0b3I6OlBy
b3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUodmFsdWUpKTsKLSAgICAg
ICAgICAgIHJldHVybiBjYXN0U3RhdGU8QW5pbWFsc1NldD4oKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBJZFNldD4mIHNldElkKGludCB2YWx1ZSkKLSAgICAgICAgewot
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIElkU2V0KSwgcHJvcGVydHlfaWRf
YWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldEludGVnZXIoImlkIl9zLCB2
YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPElkU2V0PigpOwotICAgICAgICB9
Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IFRyZWVTZXQ+JiBzZXRUcmVlKFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QxPiB2YWx1ZSkKLSAgICAgICAg
ewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFRyZWVTZXQpLCBwcm9wZXJ0
eV90cmVlX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoInRy
ZWUiX3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VHJlZVNldD4oKTsK
LSAgICAgICAgfQotCi0gICAgICAgIFJlZjxUeXBlTmVlZGluZ0Nhc3Q+IHJlbGVhc2UoKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQs
IHJlc3VsdF9pc19ub3RfcmVhZHkpOwotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9m
KFR5cGVOZWVkaW5nQ2FzdCkgPT0gc2l6ZW9mKEpTT046Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsK
LQotICAgICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4ganNvblJlc3VsdCA9IG1fcmVzdWx0LnJl
bGVhc2VOb25OdWxsKCk7Ci0gICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFdURk1vdmUoKnJlaW50
ZXJwcmV0X2Nhc3Q8UmVmPFR5cGVOZWVkaW5nQ2FzdD4qPigmanNvblJlc3VsdCkpOwotICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICAvKgotICAgICAq
IFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKLSAgICAgKiBSZWY8VHlwZU5lZWRpbmdDYXN0PiByZXN1
bHQgPSBUeXBlTmVlZGluZ0Nhc3Q6OmNyZWF0ZSgpCi0gICAgICogICAgIC5zZXRTdHJpbmcoLi4u
KQotICAgICAqICAgICAuc2V0TnVtYmVyKC4uLikKLSAgICAgKiAgICAgLnNldEFuaW1hbHMoLi4u
KQotICAgICAqICAgICAuc2V0SWQoLi4uKQotICAgICAqICAgICAuc2V0VHJlZSguLi4pCi0gICAg
ICogICAgIC5yZWxlYXNlKCk7Ci0gICAgICovCi0gICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNT
ZXQ+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4o
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7Ci0gICAgfQotfTsKLQotLyogICovCi1lbnVtIGNsYXNz
IFVuY2FzdGVkQW5pbWFscyB7Ci0gICAgUGlncyA9IDQsCi0gICAgQ293cyA9IDUsCi0gICAgQ2F0
cyA9IDYsCi0gICAgSGVucyA9IDEsCi19OyAvLyBlbnVtIGNsYXNzIFVuY2FzdGVkQW5pbWFscwot
LyogICovCi1lbnVtIGNsYXNzIENhc3RlZEFuaW1hbHMgewotICAgIER1Y2tzID0gMCwKLSAgICBI
ZW5zID0gMSwKLSAgICBDcm93cyA9IDIsCi0gICAgRmxhbWluZ29zID0gMywKLX07IC8vIGVudW0g
Y2xhc3MgQ2FzdGVkQW5pbWFscwotY2xhc3MgUmVjdXJzaXZlT2JqZWN0MSA6IHB1YmxpYyBKU09O
OjpPYmplY3RCYXNlIHsKLXB1YmxpYzoKLSAgICBlbnVtIHsKLSAgICAgICAgTm9GaWVsZHNTZXQg
PSAwLAotICAgICAgICBBbGxGaWVsZHNTZXQgPSAwCi0gICAgfTsKLQotICAgIHRlbXBsYXRlPGlu
dCBTVEFURT4KLSAgICBjbGFzcyBCdWlsZGVyIHsKLSAgICBwcml2YXRlOgotICAgICAgICBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiBtX3Jlc3VsdDsKLQotICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4g
QnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7
Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyKFJlZjwvKlJlY3Vyc2l2ZU9iamVjdDEqL0pT
T046Ok9iamVjdD4mJiBvYmplY3QpCi0gICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2Jq
ZWN0KSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9G
aWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7Ci0gICAgICAgIH0K
LSAgICAgICAgZnJpZW5kIGNsYXNzIFJlY3Vyc2l2ZU9iamVjdDE7Ci0gICAgcHVibGljOgotCi0g
ICAgICAgIFJlZjxSZWN1cnNpdmVPYmplY3QxPiByZWxlYXNlKCkKLSAgICAgICAgewotICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90
X3JlYWR5KTsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihSZWN1cnNpdmVPYmpl
Y3QxKSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0KSwgY2Fubm90X2Nhc3QpOwotCi0gICAgICAgICAg
ICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uUmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwo
KTsKLSAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxS
ZWY8UmVjdXJzaXZlT2JqZWN0MT4qPigmanNvblJlc3VsdCkpOwotICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICAvKgotICAgICAqIFN5bnRoZXRpYyBj
b25zdHJ1Y3RvcjoKLSAgICAgKiBSZWY8UmVjdXJzaXZlT2JqZWN0MT4gcmVzdWx0ID0gUmVjdXJz
aXZlT2JqZWN0MTo6Y3JlYXRlKCkKLSAgICAgKiAgICAgLnJlbGVhc2UoKTsKLSAgICAgKi8KLSAg
ICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKLSAgICB9
Ci0KLSAgICB2b2lkIHNldE9iaihSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVj
dXJzaXZlT2JqZWN0Mj4gdmFsdWUpCi0gICAgewotICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpz
ZXRPYmplY3QoIm9iaiJfcywgV1RGTW92ZSh2YWx1ZSkpOwotICAgIH0KLX07Ci0KLWNsYXNzIFJl
Y3Vyc2l2ZU9iamVjdDIgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7Ci1wdWJsaWM6Ci0gICAg
ZW51bSB7Ci0gICAgICAgIE5vRmllbGRzU2V0ID0gMCwKLSAgICAgICAgQWxsRmllbGRzU2V0ID0g
MAotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+Ci0gICAgY2xhc3MgQnVpbGRlciB7
Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7Ci0K
LSAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0
YXRlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1
aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRl
cihSZWY8LypSZWN1cnNpdmVPYmplY3QyKi9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQotICAgICAg
ICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5f
bm9uX2luaXRfc3RhdGUpOwotICAgICAgICB9Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBSZWN1cnNp
dmVPYmplY3QyOwotICAgIHB1YmxpYzoKLQotICAgICAgICBSZWY8UmVjdXJzaXZlT2JqZWN0Mj4g
cmVsZWFzZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09
IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7Ci0gICAgICAgICAgICBDT01QSUxF
X0FTU0VSVChzaXplb2YoUmVjdXJzaXZlT2JqZWN0MikgPT0gc2l6ZW9mKEpTT046Ok9iamVjdCks
IGNhbm5vdF9jYXN0KTsKLQotICAgICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4ganNvblJlc3Vs
dCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7Ci0gICAgICAgICAgICBhdXRvIHJlc3VsdCA9
IFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPFJlY3Vyc2l2ZU9iamVjdDI+Kj4oJmpzb25S
ZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICB9Owot
Ci0gICAgLyoKLSAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6Ci0gICAgICogUmVmPFJlY3Vy
c2l2ZU9iamVjdDI+IHJlc3VsdCA9IFJlY3Vyc2l2ZU9iamVjdDI6OmNyZWF0ZSgpCi0gICAgICog
ICAgIC5yZWxlYXNlKCk7Ci0gICAgICovCi0gICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+
IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKSk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRPYmooUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+IHZhbHVlKQotICAgIHsK
LSAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0T2JqZWN0KCJvYmoiX3MsIFdURk1vdmUodmFs
dWUpKTsKLSAgICB9Ci19OwotCi19IC8vIFRlc3QKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQmluZGlu
Z1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPiB7Ci1zdGF0
aWMgdm9pZCBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShKU09OOjpWYWx1ZSopOwotfTsKLXRl
bXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6
VHlwZU5lZWRpbmdDYXN0PiB7Ci1zdGF0aWMgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRl
c3Q6OlR5cGVOZWVkaW5nQ2FzdD4gcnVudGltZUNhc3QoUmVmUHRyPEpTT046OlZhbHVlPiYmIHZh
bHVlKTsKLXN0YXRpYyB2b2lkIGFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEpTT046OlZhbHVl
Kik7Ci19OwotdGVtcGxhdGU8PiBzdHJ1Y3QgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QxPiB7Ci1zdGF0aWMgdm9pZCBhc3NlcnRWYWx1ZUhh
c0V4cGVjdGVkVHlwZShKU09OOjpWYWx1ZSopOwotfTsKLXRlbXBsYXRlPD4gc3RydWN0IEJpbmRp
bmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0Mj4gewot
c3RhdGljIHZvaWQgYXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSlNPTjo6VmFsdWUqKTsKLX07
Ci0KLW5hbWVzcGFjZSBUZXN0SGVscGVycyB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFByb3RvY29s
RW51bVR5cGU+Ci1PcHRpb25hbDxQcm90b2NvbEVudW1UeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21T
dHJpbmcoY29uc3QgU3RyaW5nJik7Ci0KLS8vIEVudW1zIGluIHRoZSAnVGVzdCcgRG9tYWluCi10
ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFu
aW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0
OjpVbmNhc3RlZEFuaW1hbHM+KGNvbnN0IFN0cmluZyYpOwotdGVtcGxhdGU8PgotT3B0aW9uYWw8
SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVG
cm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+KGNvbnN0
IFN0cmluZyYpOwotCi19IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwotCi19IC8vIG5hbWVzcGFj
ZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotbmFtZXNwYWNlIFdURiB7
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKLQotLy8gSGFzaCBk
ZWNsYXJhdGlvbnMgaW4gdGhlICdUZXN0JyBEb21haW4KLXRlbXBsYXRlPD4KLXN0cnVjdCBEZWZh
dWx0SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM+IHsKLSAg
ICB0eXBlZGVmIEludEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmlt
YWxzPiBIYXNoOwotfTsKLXRlbXBsYXRlPD4KLXN0cnVjdCBEZWZhdWx0SGFzaDxJbnNwZWN0b3I6
OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPiB7Ci0gICAgdHlwZWRlZiBJbnRIYXNoPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+IEhhc2g7Ci19OwotCi19IC8v
IG5hbWVzcGFjZSBXVEYKLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0KLSMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotCi0jaW5jbHVkZSA8d3RmL09wdGlv
bmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVj
dG9yIHsKLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsK
LQotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFsdWVzW10gPSB7Ci0g
ICAgIkR1Y2tzIiwKLSAgICAiSGVucyIsCi0gICAgIkNyb3dzIiwKLSAgICAiRmxhbWluZ29zIiwK
LSAgICAiUGlncyIsCi0gICAgIkNvd3MiLAotICAgICJDYXRzIiwKLX07Ci0KLVN0cmluZyBnZXRF
bnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgewotICAgIHJldHVybiBlbnVtX2NvbnN0YW50X3Zh
bHVlc1tjb2RlXTsKLX0KLQotLy8gRW51bXMgaW4gdGhlICdUZXN0JyBEb21haW4KLXRlbXBsYXRl
PD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFscz4g
cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlVuY2Fz
dGVkQW5pbWFscz4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKLXsKLSAgICBzdGF0aWMg
Y29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7Ci0gICAgICAgIChzaXplX3QpSW5zcGVj
dG9yOjpQcm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzOjpQaWdzLAotICAgICAgICAoc2l6
ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFsczo6Q293cywKLSAg
ICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM6
OkNhdHMsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VW5jYXN0
ZWRBbmltYWxzOjpIZW5zLAotICAgIH07Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCA0OyAr
K2kpCi0gICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tj
b25zdGFudFZhbHVlc1tpXV0pCi0gICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFscyljb25zdGFudFZhbHVlc1tpXTsKLQotICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7Ci19Ci0KLXRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNw
ZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPihjb25zdCBTdHJpbmcmIHByb3Rv
Y29sU3RyaW5nKQotewotICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9
IHsKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmlt
YWxzOjpEdWNrcywKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpD
YXN0ZWRBbmltYWxzOjpIZW5zLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6
OlRlc3Q6OkNhc3RlZEFuaW1hbHM6OkNyb3dzLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6
UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM6OkZsYW1pbmdvcywKLSAgICB9OwotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgNDsgKytpKQotICAgICAgICBpZiAocHJvdG9jb2xTdHJpbmcg
PT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNbaV1dKQotICAgICAgICAgICAg
cmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzKWNvbnN0YW50
VmFsdWVzW2ldOwotCi0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotCi19IC8vIG5hbWVz
cGFjZSBUZXN0SGVscGVycwotCi0KLQotdm9pZCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShK
U09OOjpWYWx1ZSogdmFsdWUpCi17Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBBU1NFUlRfQVJH
KHZhbHVlLCB2YWx1ZSk7Ci0gICAgU3RyaW5nIHJlc3VsdDsKLSAgICBib29sIGNhc3RTdWNjZWVk
ZWQgPSB2YWx1ZS0+YXNTdHJpbmcocmVzdWx0KTsKLSAgICBBU1NFUlQoY2FzdFN1Y2NlZWRlZCk7
Ci0gICAgQVNTRVJUKHJlc3VsdCA9PSAiRHVja3MiIHx8IHJlc3VsdCA9PSAiSGVucyIgfHwgcmVz
dWx0ID09ICJDcm93cyIgfHwgcmVzdWx0ID09ICJGbGFtaW5nb3MiKTsKLSNlbHNlIC8vIEFTU0VS
VF9FTkFCTEVECi0gICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKLSNlbmRpZiAvLyBBU1NFUlRfRU5B
QkxFRAotfQotCi12b2lkIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6
VHlwZU5lZWRpbmdDYXN0Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSlNPTjo6VmFsdWUq
IHZhbHVlKQotewotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgQVNTRVJUX0FSRyh2YWx1ZSwgdmFs
dWUpOwotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG9iamVjdDsKLSAgICBib29sIGNhc3RTdWNj
ZWVkZWQgPSB2YWx1ZS0+YXNPYmplY3Qob2JqZWN0KTsKLSAgICBBU1NFUlRfVU5VU0VEKGNhc3RT
dWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQpOwotICAgIHsKLSAgICAgICAgYXV0byBzdHJpbmdQb3Mg
PSBvYmplY3QtPmZpbmQoInN0cmluZyJfcyk7Ci0gICAgICAgIEFTU0VSVChzdHJpbmdQb3MgIT0g
b2JqZWN0LT5lbmQoKSk7Ci0gICAgICAgIEJpbmRpbmdUcmFpdHM8U3RyaW5nPjo6YXNzZXJ0VmFs
dWVIYXNFeHBlY3RlZFR5cGUoc3RyaW5nUG9zLT52YWx1ZS5nZXQoKSk7Ci0gICAgfQotICAgIHsK
LSAgICAgICAgYXV0byBudW1iZXJQb3MgPSBvYmplY3QtPmZpbmQoIm51bWJlciJfcyk7Ci0gICAg
ICAgIEFTU0VSVChudW1iZXJQb3MgIT0gb2JqZWN0LT5lbmQoKSk7Ci0gICAgICAgIEJpbmRpbmdU
cmFpdHM8aW50Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUobnVtYmVyUG9zLT52YWx1ZS5n
ZXQoKSk7Ci0gICAgfQotICAgIHsKLSAgICAgICAgYXV0byBhbmltYWxzUG9zID0gb2JqZWN0LT5m
aW5kKCJhbmltYWxzIl9zKTsKLSAgICAgICAgQVNTRVJUKGFuaW1hbHNQb3MgIT0gb2JqZWN0LT5l
bmQoKSk7Ci0gICAgICAgIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6
Q2FzdGVkQW5pbWFscz46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKGFuaW1hbHNQb3MtPnZh
bHVlLmdldCgpKTsKLSAgICB9Ci0gICAgewotICAgICAgICBhdXRvIGlkUG9zID0gb2JqZWN0LT5m
aW5kKCJpZCJfcyk7Ci0gICAgICAgIEFTU0VSVChpZFBvcyAhPSBvYmplY3QtPmVuZCgpKTsKLSAg
ICAgICAgQmluZGluZ1RyYWl0czxpbnQ+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShpZFBv
cy0+dmFsdWUuZ2V0KCkpOwotICAgIH0KLSAgICB7Ci0gICAgICAgIGF1dG8gdHJlZVBvcyA9IG9i
amVjdC0+ZmluZCgidHJlZSJfcyk7Ci0gICAgICAgIEFTU0VSVCh0cmVlUG9zICE9IG9iamVjdC0+
ZW5kKCkpOwotICAgICAgICBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6
OlJlY3Vyc2l2ZU9iamVjdDE+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZSh0cmVlUG9zLT52
YWx1ZS5nZXQoKSk7Ci0gICAgfQotCi0gICAgaW50IGZvdW5kUHJvcGVydGllc0NvdW50ID0gNTsK
LSAgICBpZiAoZm91bmRQcm9wZXJ0aWVzQ291bnQgIT0gb2JqZWN0LT5zaXplKCkpCi0gICAgICAg
IEZBVEFMKCJVbmV4cGVjdGVkIHByb3BlcnRpZXMgaW4gb2JqZWN0OiAlc1xuIiwgb2JqZWN0LT50
b0pTT05TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7Ci0jZWxzZSAvLyBBU1NFUlRfRU5BQkxFRAot
ICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7Ci0jZW5kaWYgLy8gQVNTRVJUX0VOQUJMRUQKLX0KLQot
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD4gQmluZGlu
Z1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+OjpydW50
aW1lQ2FzdChSZWZQdHI8SlNPTjo6VmFsdWU+JiYgdmFsdWUpCi17Ci0gICAgUmVmUHRyPEpTT046
Ok9iamVjdD4gcmVzdWx0OwotICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9IHZhbHVlLT5hc09iamVj
dChyZXN1bHQpOwotICAgIEFTU0VSVF9VTlVTRUQoY2FzdFN1Y2NlZWRlZCwgY2FzdFN1Y2NlZWRl
ZCk7Ci0gICAgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVl
ZGluZ0Nhc3Q+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShyZXN1bHQuZ2V0KCkpOwotICAg
IENPTVBJTEVfQVNTRVJUKHNpemVvZihJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVl
ZGluZ0Nhc3QpID09IHNpemVvZihKU09OOjpPYmplY3RCYXNlKSwgdHlwZV9jYXN0X3Byb2JsZW0p
OwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBl
TmVlZGluZ0Nhc3QqPihzdGF0aWNfY2FzdDxKU09OOjpPYmplY3RCYXNlKj4ocmVzdWx0LmdldCgp
KSk7Ci19Ci0KLQotdm9pZCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6
OlJlY3Vyc2l2ZU9iamVjdDE+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShKU09OOjpWYWx1
ZSogdmFsdWUpCi17Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBBU1NFUlRfQVJHKHZhbHVlLCB2
YWx1ZSk7Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gb2JqZWN0OwotICAgIGJvb2wgY2FzdFN1
Y2NlZWRlZCA9IHZhbHVlLT5hc09iamVjdChvYmplY3QpOwotICAgIEFTU0VSVF9VTlVTRUQoY2Fz
dFN1Y2NlZWRlZCwgY2FzdFN1Y2NlZWRlZCk7Ci0KLSAgICBpbnQgZm91bmRQcm9wZXJ0aWVzQ291
bnQgPSAwOwotICAgIHsKLSAgICAgICAgYXV0byBvYmpQb3MgPSBvYmplY3QtPmZpbmQoIm9iaiJf
cyk7Ci0gICAgICAgIGlmIChvYmpQb3MgIT0gb2JqZWN0LT5lbmQoKSkgewotICAgICAgICAgICAg
QmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3Qy
Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUob2JqUG9zLT52YWx1ZS5nZXQoKSk7Ci0gICAg
ICAgICAgICArK2ZvdW5kUHJvcGVydGllc0NvdW50OwotICAgICAgICB9Ci0gICAgfQotICAgIGlm
IChmb3VuZFByb3BlcnRpZXNDb3VudCAhPSBvYmplY3QtPnNpemUoKSkKLSAgICAgICAgRkFUQUwo
IlVuZXhwZWN0ZWQgcHJvcGVydGllcyBpbiBvYmplY3Q6ICVzXG4iLCBvYmplY3QtPnRvSlNPTlN0
cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKLSNlbHNlIC8vIEFTU0VSVF9FTkFCTEVECi0gICAgVU5V
U0VEX1BBUkFNKHZhbHVlKTsKLSNlbmRpZiAvLyBBU1NFUlRfRU5BQkxFRAotfQotCi12b2lkIEJp
bmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0Mj46
OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEpTT046OlZhbHVlKiB2YWx1ZSkKLXsKLSNpZiBB
U1NFUlRfRU5BQkxFRAotICAgIEFTU0VSVF9BUkcodmFsdWUsIHZhbHVlKTsKLSAgICBSZWZQdHI8
SlNPTjo6T2JqZWN0PiBvYmplY3Q7Ci0gICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdmFsdWUtPmFz
T2JqZWN0KG9iamVjdCk7Ci0gICAgQVNTRVJUX1VOVVNFRChjYXN0U3VjY2VlZGVkLCBjYXN0U3Vj
Y2VlZGVkKTsKLQotICAgIGludCBmb3VuZFByb3BlcnRpZXNDb3VudCA9IDA7Ci0gICAgewotICAg
ICAgICBhdXRvIG9ialBvcyA9IG9iamVjdC0+ZmluZCgib2JqIl9zKTsKLSAgICAgICAgaWYgKG9i
alBvcyAhPSBvYmplY3QtPmVuZCgpKSB7Ci0gICAgICAgICAgICBCaW5kaW5nVHJhaXRzPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+Ojphc3NlcnRWYWx1ZUhhc0V4
cGVjdGVkVHlwZShvYmpQb3MtPnZhbHVlLmdldCgpKTsKLSAgICAgICAgICAgICsrZm91bmRQcm9w
ZXJ0aWVzQ291bnQ7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGZvdW5kUHJvcGVydGllc0Nv
dW50ICE9IG9iamVjdC0+c2l6ZSgpKQotICAgICAgICBGQVRBTCgiVW5leHBlY3RlZCBwcm9wZXJ0
aWVzIGluIG9iamVjdDogJXNcbiIsIG9iamVjdC0+dG9KU09OU3RyaW5nKCkuYXNjaWkoKS5kYXRh
KCkpOwotI2Vsc2UgLy8gQVNTRVJUX0VOQUJMRUQKLSAgICBVTlVTRURfUEFSQU0odmFsdWUpOwot
I2VuZGlmIC8vIEFTU0VSVF9FTkFCTEVECi19Ci0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0K
LX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9i
amVjdHMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hl
cnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1
bnRpbWUtY2FzdHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERp
c3BhdGNoZXJzLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi0KLQotbmFtZXNwYWNl
IEluc3BlY3RvciB7Ci0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBv
cnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSAiVGVzdFBy
b3RvY29sSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMu
aCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsK
LQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
QmFja2VuZERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25m
aWd1cmF0aW9uLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVp
cmluZy1ydW50aW1lLWNhc3RzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgotCi1fX2F0
dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3Rv
Y29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENv
bmZpZ3VyYXRpb24ubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJl
cXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgotCi0j
aW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFj
a2VuZERpc3BhdGNoZXJzLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNw
YXRjaGFibGVBZ2VudC5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNw
ZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwot
Ci1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgotewotICAgIEF1Z21l
bnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci19Ci0KLS0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciop
Y29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQot
ICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBfY29udHJv
bGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxv
YwotewotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sRXZlbnREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgot
Ci0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPHd0Zi9K
U09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2wuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVx
dWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2ltcG9y
dCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgotCi0KLUBjbGFzcyBUZXN0
UHJvdG9jb2xUZXN0VHlwZU5lZWRpbmdDYXN0OwotQGNsYXNzIFRlc3RQcm90b2NvbFRlc3RSZWN1
cnNpdmVPYmplY3QxOwotQGNsYXNzIFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QyOwot
Ci10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xQbGF0Zm9ybSkgewotICAg
IFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJp
YywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9y
bU1hY09TLAotfTsKLQotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xU
ZXN0VW5jYXN0ZWRBbmltYWxzKSB7Ci0gICAgVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFs
c1BpZ3MsCi0gICAgVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc0Nvd3MsCi0gICAgVGVz
dFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc0NhdHMsCi0gICAgVGVzdFByb3RvY29sVGVzdFVu
Y2FzdGVkQW5pbWFsc0hlbnMsCi19OwotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0
UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFscykgewotICAgIFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRB
bmltYWxzRHVja3MsCi0gICAgVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHNIZW5zLAotICAg
IFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzQ3Jvd3MsCi0gICAgVGVzdFByb3RvY29sVGVz
dENhc3RlZEFuaW1hbHNGbGFtaW5nb3MsCi19OwotCi0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxp
dHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUZXN0VHlwZU5lZWRpbmdD
YXN0IDogUldJUHJvdG9jb2xKU09OT2JqZWN0Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXls
b2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKLS0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29u
T2JqZWN0OwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoU3RyaW5nOihOU1N0cmluZyAqKXN0cmlu
ZyBudW1iZXI6KGludCludW1iZXIgYW5pbWFsczooVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1h
bHMpYW5pbWFscyBpZGVudGlmaWVyOihpbnQpaWRlbnRpZmllciB0cmVlOihUZXN0UHJvdG9jb2xU
ZXN0UmVjdXJzaXZlT2JqZWN0MSAqKXRyZWU7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5v
bmF0b21pYywgY29weSkgTlNTdHJpbmcgKnN0cmluZzsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0
eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCBudW1iZXI7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVy
dHkgKG5vbmF0b21pYywgYXNzaWduKSBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFscyBhbmlt
YWxzOwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgaW50IGlk
ZW50aWZpZXI7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluKSBU
ZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSAqdHJlZTsKLUBlbmQKLQotX19hdHRyaWJ1
dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbFRl
c3RSZWN1cnNpdmVPYmplY3QxIDogUldJUHJvdG9jb2xKU09OT2JqZWN0Ci0tIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9h
ZDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpT
T05PYmplY3QgKilqc29uT2JqZWN0OwotLyogb3B0aW9uYWwgKi8gQHByb3BlcnR5IChub25hdG9t
aWMsIHJldGFpbikgVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDIgKm9iajsKLUBlbmQK
LQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRl
c3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QyIDogUldJUHJvdG9jb2xKU09OT2JqZWN0Ci0t
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwg
aWQ+ICopcGF5bG9hZDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihS
V0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OwotLyogb3B0aW9uYWwgKi8gQHByb3Bl
cnR5IChub25hdG9taWMsIHJldGFpbikgVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEg
Km9iajsKLUBlbmQKLQotCi0KLQotCi0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2Nv
bEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2wuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJU
ZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgi
Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIu
aD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLQotCi0KLSMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sSW50ZXJuYWwuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVp
cmluZy1ydW50aW1lLWNhc3RzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0
b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+Ci1PcHRpb25hbDxPYmpDRW51bVR5
cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKLQotaW5saW5lIFN0
cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFBsYXRmb3JtIHZhbHVlKQotewotICAg
IHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1BbGw6Ci0gICAg
ICAgIHJldHVybiAiYWxsIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmlj
OgotICAgICAgICByZXR1cm4gImdlbmVyaWMiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0
Zm9ybUlPUzoKLSAgICAgICAgcmV0dXJuICJpb3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQ
bGF0Zm9ybU1hY09TOgotICAgICAgICByZXR1cm4gIm1hY29zIl9zOwotICAgIH0KLX0KLQotdGVt
cGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFBsYXRmb3JtPiBmcm9tUHJvdG9j
b2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gImFsbCIp
Ci0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDsKLSAgICBpZiAodmFsdWUg
PT0gImdlbmVyaWMiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmlj
OwotICAgIGlmICh2YWx1ZSA9PSAiaW9zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBs
YXRmb3JtSU9TOwotICAgIGlmICh2YWx1ZSA9PSAibWFjb3MiKQotICAgICAgICByZXR1cm4gVGVz
dFByb3RvY29sUGxhdGZvcm1NYWNPUzsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi0K
LWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRB
bmltYWxzIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3Rv
Y29sVGVzdFVuY2FzdGVkQW5pbWFsc1BpZ3M6Ci0gICAgICAgIHJldHVybiAiUGlncyJfczsKLSAg
ICBjYXNlIFRlc3RQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHNDb3dzOgotICAgICAgICByZXR1
cm4gIkNvd3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzQ2F0
czoKLSAgICAgICAgcmV0dXJuICJDYXRzIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sVGVzdFVu
Y2FzdGVkQW5pbWFsc0hlbnM6Ci0gICAgICAgIHJldHVybiAiSGVucyJfczsKLSAgICB9Ci19Ci0K
LXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmlt
YWxzPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAo
dmFsdWUgPT0gIlBpZ3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sVGVzdFVuY2FzdGVk
QW5pbWFsc1BpZ3M7Ci0gICAgaWYgKHZhbHVlID09ICJDb3dzIikKLSAgICAgICAgcmV0dXJuIFRl
c3RQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHNDb3dzOwotICAgIGlmICh2YWx1ZSA9PSAiQ2F0
cyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzQ2F0czsK
LSAgICBpZiAodmFsdWUgPT0gIkhlbnMiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sVGVz
dFVuY2FzdGVkQW5pbWFsc0hlbnM7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotaW5s
aW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxz
IHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sVGVz
dENhc3RlZEFuaW1hbHNEdWNrczoKLSAgICAgICAgcmV0dXJuICJEdWNrcyJfczsKLSAgICBjYXNl
IFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzSGVuczoKLSAgICAgICAgcmV0dXJuICJIZW5z
Il9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHNDcm93czoKLSAgICAg
ICAgcmV0dXJuICJDcm93cyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmlt
YWxzRmxhbWluZ29zOgotICAgICAgICByZXR1cm4gIkZsYW1pbmdvcyJfczsKLSAgICB9Ci19Ci0K
LXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFs
cz4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZh
bHVlID09ICJEdWNrcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5p
bWFsc0R1Y2tzOwotICAgIGlmICh2YWx1ZSA9PSAiSGVucyIpCi0gICAgICAgIHJldHVybiBUZXN0
UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFsc0hlbnM7Ci0gICAgaWYgKHZhbHVlID09ICJDcm93cyIp
Ci0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFsc0Nyb3dzOwotICAg
IGlmICh2YWx1ZSA9PSAiRmxhbWluZ29zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFRl
c3RDYXN0ZWRBbmltYWxzRmxhbWluZ29zOwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmlu
Zy1ydW50aW1lLWNhc3RzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0KLSNpbXBv
cnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgot
I2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLQot
dXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMgKFRlc3REb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlVHlwZU5lZWRpbmdDYXN0
OihUZXN0UHJvdG9jb2xUZXN0VHlwZU5lZWRpbmdDYXN0ICoqKW91dFZhbHVlIGZyb21QYXlsb2Fk
OihpZClwYXlsb2FkOwotKyAodm9pZClfcGFyc2VDYXN0ZWRPYmplY3RJZDooTlNOdW1iZXIgKiop
b3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZVVuY2FzdGVk
T2JqZWN0SWQ6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwot
KyAodm9pZClfcGFyc2VVbmNhc3RlZEFuaW1hbHM6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21Q
YXlsb2FkOihpZClwYXlsb2FkOwotKyAodm9pZClfcGFyc2VDYXN0ZWRBbmltYWxzOihOU051bWJl
ciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLSsgKHZvaWQpX3BhcnNlUmVj
dXJzaXZlT2JqZWN0MTooVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgKiopb3V0VmFs
dWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZVJlY3Vyc2l2ZU9iamVj
dDI6KFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QyICoqKW91dFZhbHVlIGZyb21QYXls
b2FkOihpZClwYXlsb2FkOwotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMgKFRlc3REb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlVHlwZU5lZWRpbmdD
YXN0OihUZXN0UHJvdG9jb2xUZXN0VHlwZU5lZWRpbmdDYXN0ICoqKW91dFZhbHVlIGZyb21QYXls
b2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXls
b2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9j
b2xUZXN0VHlwZU5lZWRpbmdDYXN0IGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07Ci19
Ci0KLSsgKHZvaWQpX3BhcnNlQ2FzdGVkT2JqZWN0SWQ6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZy
b21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQ
RShwYXlsb2FkLCBbTlNOdW1iZXIgY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSAoTlNOdW1iZXIg
KilwYXlsb2FkOwotfQotCi0rICh2b2lkKV9wYXJzZVVuY2FzdGVkT2JqZWN0SWQ6KE5TTnVtYmVy
ICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNOdW1iZXIgY2xhc3NdKTsKLSAgICAqb3V0VmFs
dWUgPSAoTlNOdW1iZXIgKilwYXlsb2FkOwotfQotCi0rICh2b2lkKV9wYXJzZVVuY2FzdGVkQW5p
bWFsczooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAg
ICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBjbGFzc10p
OwotICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHM+IHJlc3VsdCA9
IEluc3BlY3Rvcjo6ZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbFRlc3RVbmNhc3RlZEFu
aW1hbHM+KHBheWxvYWQpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX0VOVU1fVkFMVUUo
cmVzdWx0LCBAIlVuY2FzdGVkQW5pbWFscyIpOwotICAgICpvdXRWYWx1ZSA9IEAocmVzdWx0LnZh
bHVlKCkpOwotfQotCi0rICh2b2lkKV9wYXJzZUNhc3RlZEFuaW1hbHM6KE5TTnVtYmVyICoqKW91
dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9CQURfVFlQRShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKLSAgICBPcHRpb25hbDxUZXN0
UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFscz4gcmVzdWx0ID0gSW5zcGVjdG9yOjpmcm9tUHJvdG9j
b2xTdHJpbmc8VGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHM+KHBheWxvYWQpOwotICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfQkFEX0VOVU1fVkFMVUUocmVzdWx0LCBAIkNhc3RlZEFuaW1hbHMi
KTsKLSAgICAqb3V0VmFsdWUgPSBAKHJlc3VsdC52YWx1ZSgpKTsKLX0KLQotKyAodm9pZClfcGFy
c2VSZWN1cnNpdmVPYmplY3QxOihUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSAqKilv
dXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOwotICAgICpvdXRWYWx1
ZSA9IFtbVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgYWxsb2NdIGluaXRXaXRoUGF5
bG9hZDpwYXlsb2FkXTsKLX0KLQotKyAodm9pZClfcGFyc2VSZWN1cnNpdmVPYmplY3QyOihUZXN0
UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MiAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQp
cGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05T
RGljdGlvbmFyeSBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sVGVzdFJl
Y3Vyc2l2ZU9iamVjdDIgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKLX0KLQotQGVu
ZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0KLSMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgotLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJ
bnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNp
bXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0jaW1w
b3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNp
bmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29s
VGVzdFR5cGVOZWVkaW5nQ2FzdAotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihu
b25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCi17Ci0gICAgaWYg
KCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBUSFJP
V19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJzdHJpbmciXSwgQCJz
dHJpbmciKTsKLSAgICBzZWxmLnN0cmluZyA9IHBheWxvYWRbQCJzdHJpbmciXTsKLQotICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAIm51bWJlciJdLCBA
Im51bWJlciIpOwotICAgIHNlbGYubnVtYmVyID0gW3BheWxvYWRbQCJudW1iZXIiXSBpbnRlZ2Vy
VmFsdWVdOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXls
b2FkW0AiYW5pbWFscyJdLCBAImFuaW1hbHMiKTsKLSAgICBPcHRpb25hbDxUZXN0UHJvdG9jb2xU
ZXN0Q2FzdGVkQW5pbWFscz4gYW5pbWFscyA9IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9j
b2xUZXN0Q2FzdGVkQW5pbWFscz4ocGF5bG9hZFtAImFuaW1hbHMiXSk7Ci0gICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9CQURfRU5VTV9WQUxVRShhbmltYWxzLCBAImFuaW1hbHMiKTsKLSAgICBzZWxm
LmFuaW1hbHMgPSBhbmltYWxzLnZhbHVlKCk7Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JF
UVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJpZCJdLCBAImlkIik7Ci0gICAgc2VsZi5pZGVudGlm
aWVyID0gW3BheWxvYWRbQCJpZCJdIGludGVnZXJWYWx1ZV07Ci0KLSAgICBUSFJPV19FWENFUFRJ
T05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJ0cmVlIl0sIEAidHJlZSIpOwotICAg
IHNlbGYudHJlZSA9IFtbVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgYWxsb2NdIGlu
aXRXaXRoUGF5bG9hZDpwYXlsb2FkW0AidHJlZSJdXTsKLQotICAgIHJldHVybiBzZWxmOwotfQot
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9i
amVjdCAqKW9iamVjdAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09OT2Jq
ZWN0OltvYmplY3QgdG9KU09OT2JqZWN0XS5nZXQoKV0pKQotICAgICAgICByZXR1cm4gbmlsOwot
Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFN0cmluZzoo
TlNTdHJpbmcgKilzdHJpbmcgbnVtYmVyOihpbnQpbnVtYmVyIGFuaW1hbHM6KFRlc3RQcm90b2Nv
bFRlc3RDYXN0ZWRBbmltYWxzKWFuaW1hbHMgaWRlbnRpZmllcjooaW50KWlkZW50aWZpZXIgdHJl
ZTooVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgKil0cmVlCi17Ci0gICAgaWYgKCEo
c2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBUSFJPV19F
WENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHN0cmluZywgQCJzdHJpbmciKTsKLSAgICBU
SFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHRyZWUsIEAidHJlZSIpOwotCi0g
ICAgc2VsZi5zdHJpbmcgPSBzdHJpbmc7Ci0gICAgc2VsZi5udW1iZXIgPSBudW1iZXI7Ci0gICAg
c2VsZi5hbmltYWxzID0gYW5pbWFsczsKLSAgICBzZWxmLmlkZW50aWZpZXIgPSBpZGVudGlmaWVy
OwotICAgIHNlbGYudHJlZSA9IHRyZWU7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9p
ZClzZXRTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nCi17Ci0gICAgW3N1cGVyIHNldFN0cmluZzpz
dHJpbmcgZm9yS2V5OkAic3RyaW5nIl07Ci19Ci0KLS0gKE5TU3RyaW5nICopc3RyaW5nCi17Ci0g
ICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJzdHJpbmciXTsKLX0KLQotLSAodm9pZClz
ZXROdW1iZXI6KGludCludW1iZXIKLXsKLSAgICBbc3VwZXIgc2V0SW50ZWdlcjpudW1iZXIgZm9y
S2V5OkAibnVtYmVyIl07Ci19Ci0KLS0gKGludCludW1iZXIKLXsKLSAgICByZXR1cm4gW3N1cGVy
IGludGVnZXJGb3JLZXk6QCJudW1iZXIiXTsKLX0KLQotLSAodm9pZClzZXRBbmltYWxzOihUZXN0
UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFscylhbmltYWxzCi17Ci0gICAgW3N1cGVyIHNldFN0cmlu
Zzp0b1Byb3RvY29sU3RyaW5nKGFuaW1hbHMpIGZvcktleTpAImFuaW1hbHMiXTsKLX0KLQotLSAo
VGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHMpYW5pbWFscwotewotICAgIHJldHVybiBmcm9t
UHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHM+KFtzdXBlciBzdHJp
bmdGb3JLZXk6QCJhbmltYWxzIl0pLnZhbHVlKCk7Ci19Ci0KLS0gKHZvaWQpc2V0SWRlbnRpZmll
cjooaW50KWlkZW50aWZpZXIKLXsKLSAgICBbc3VwZXIgc2V0SW50ZWdlcjppZGVudGlmaWVyIGZv
cktleTpAImlkIl07Ci19Ci0KLS0gKGludClpZGVudGlmaWVyCi17Ci0gICAgcmV0dXJuIFtzdXBl
ciBpbnRlZ2VyRm9yS2V5OkAiaWQiXTsKLX0KLQotLSAodm9pZClzZXRUcmVlOihUZXN0UHJvdG9j
b2xUZXN0UmVjdXJzaXZlT2JqZWN0MSAqKXRyZWUKLXsKLSAgICBbc3VwZXIgc2V0T2JqZWN0OnRy
ZWUgZm9yS2V5OkAidHJlZSJdOwotfQotCi0tIChUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2Jq
ZWN0MSAqKXRyZWUKLXsKLSAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9iamVjdCA9IFtzdXBl
ciBvYmplY3RGb3JLZXk6QCJ0cmVlIl07Ci0gICAgaWYgKCFvYmplY3QpCi0gICAgICAgIHJldHVy
biBuaWw7Ci0gICAgcmV0dXJuIFtbVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgYWxs
b2NdIGluaXRXaXRoSlNPTk9iamVjdDpbW3N1cGVyIG9iamVjdEZvcktleTpAInRyZWUiXSB0b0pT
T05PYmplY3RdLmdldCgpXTsKLX0KLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3Rv
Y29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEKLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9h
ZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZAotewotICAg
IGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAg
c2VsZi5vYmogPSBbW1Rlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QyIGFsbG9jXSBpbml0
V2l0aFBheWxvYWQ6cGF5bG9hZFtAIm9iaiJdXTsKLQotICAgIHJldHVybiBzZWxmOwotfQotLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVj
dCAqKW9iamVjdAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0
OltvYmplY3QgdG9KU09OT2JqZWN0XS5nZXQoKV0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0g
ICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpc2V0T2JqOihUZXN0UHJvdG9jb2xUZXN0UmVj
dXJzaXZlT2JqZWN0MiAqKW9iagotewotICAgIFtzdXBlciBzZXRPYmplY3Q6b2JqIGZvcktleTpA
Im9iaiJdOwotfQotCi0tIChUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MiAqKW9iagot
ewotICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb2JqZWN0ID0gW3N1cGVyIG9iamVjdEZvcktl
eTpAIm9iaiJdOwotICAgIGlmICghb2JqZWN0KQotICAgICAgICByZXR1cm4gbmlsOwotICAgIHJl
dHVybiBbW1Rlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QyIGFsbG9jXSBpbml0V2l0aEpT
T05PYmplY3Q6W1tzdXBlciBvYmplY3RGb3JLZXk6QCJvYmoiXSB0b0pTT05PYmplY3RdLmdldCgp
XTsKLX0KLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2
ZU9iamVjdDIKLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBOU0Rp
Y3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZAotewotICAgIGlmICghKHNlbGYgPSBb
c3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgc2VsZi5vYmogPSBbW1Rl
c3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5
bG9hZFtAIm9iaiJdXTsKLQotICAgIHJldHVybiBzZWxmOwotfQotLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9iamVjdAotewot
ICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmplY3QgdG9KU09O
T2JqZWN0XS5nZXQoKV0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgcmV0dXJuIHNlbGY7
Ci19Ci0KLS0gKHZvaWQpc2V0T2JqOihUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSAq
KW9iagotewotICAgIFtzdXBlciBzZXRPYmplY3Q6b2JqIGZvcktleTpAIm9iaiJdOwotfQotCi0t
IChUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSAqKW9iagotewotICAgIFJXSVByb3Rv
Y29sSlNPTk9iamVjdCAqb2JqZWN0ID0gW3N1cGVyIG9iamVjdEZvcktleTpAIm9iaiJdOwotICAg
IGlmICghb2JqZWN0KQotICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiBbW1Rlc3RQcm90
b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxIGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6W1tzdXBl
ciBvYmplY3RGb3JLZXk6QCJvYmoiXSB0b0pTT05PYmplY3RdLmdldCgpXTsKLX0KLQotQGVuZAot
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVk
L3R5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC90eXBlLXdpdGgt
b3Blbi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBlNDMwZWRlNTA4Yi4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvdHlwZS13aXRoLW9wZW4tcGFy
YW1ldGVycy5qc29uLXJlc3VsdAorKysgL2Rldi9udWxsCkBAIC0xLDExNjQgKzAsMCBAQAotIyMj
IEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotIyMjIEVuZCBGaWxlOiBJbnNwZWN0
b3JCYWNrZW5kQ29tbWFuZHMuanMKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUt
d2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKLSNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0KLW5hbWVzcGFj
ZSBJbnNwZWN0b3IgewotCi1jbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJs
aWM6Ci0gICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNo
ZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRj
aGVyKTsgfQotICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0
IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KLXByaXZhdGU6Ci0gICAgUmVm
UHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwotfTsKLQotCi0KLQot
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKLSMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmRE
aXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXdpdGgtb3Blbi1wYXJhbWV0
ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3By
YWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXR5cGVkZWYg
U3RyaW5nIEVycm9yU3RyaW5nOwotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMg
RW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSB0eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRl
IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0K
LSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSNpbmNsdWRlICJU
ZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIElu
c3BlY3RvciB7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxl
OiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250
ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUt
d2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVj
dHMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgRnJvbnRlbmRSb3V0
ZXI7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVy
cy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXdpdGgtb3Blbi1w
YXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJz
LmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7
Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVu
ZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5o
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRoLW9wZW4tcGFyYW1l
dGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNw
cmFnbWEgb25jZQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xU
eXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0
b3IgewotCi0KLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLS8vIEZvcndhcmQgZGVjbGFy
YXRpb25zLgotbmFtZXNwYWNlIFRlc3QgewotY2xhc3MgTm9PcGVuUGFyYW1ldGVyczsKLWNsYXNz
IE9wZW5QYXJhbWV0ZXJzOwotfSAvLyBUZXN0Ci0vLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlv
bnMuCi0KLQotCi0KLW5hbWVzcGFjZSBUZXN0IHsKLWNsYXNzIE5vT3BlblBhcmFtZXRlcnMgOiBw
dWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7Ci1wdWJsaWM6Ci0gICAgZW51bSB7Ci0gICAgICAgIE5v
RmllbGRzU2V0ID0gMCwKLSAgICAgICAgT25lU2V0ID0gMSA8PCAwLAotICAgICAgICBUd29TZXQg
PSAxIDw8IDEsCi0gICAgICAgIEFsbEZpZWxkc1NldCA9IChPbmVTZXQgfCBUd29TZXQpCi0gICAg
fTsKLQotICAgIHRlbXBsYXRlPGludCBTVEFURT4KLSAgICBjbGFzcyBCdWlsZGVyIHsKLSAgICBw
cml2YXRlOgotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBtX3Jlc3VsdDsKLQotICAgICAg
ICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxT
VEFURSB8IFNURVA+Kj4odGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyKFJlZjwv
Kk5vT3BlblBhcmFtZXRlcnMqL0pTT046Ok9iamVjdD4mJiBvYmplY3QpCi0gICAgICAgICAgICA6
IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5p
dF9zdGF0ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZnJpZW5kIGNsYXNzIE5vT3BlblBhcmFtZXRl
cnM7Ci0gICAgcHVibGljOgotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBPbmVTZXQ+JiBzZXRP
bmUoZG91YmxlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgT25lU2V0KSwgcHJvcGVydHlfb25lX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXREb3VibGUoIm9uZSJfcywgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxPbmVTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgVHdvU2V0PiYgc2V0VHdvKGRvdWJsZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIFR3b1NldCksIHByb3BlcnR5X3R3b19hbHJlYWR5X3Nl
dCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0RG91YmxlKCJ0d28iX3MsIHZhbHVlKTsKLSAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VHdvU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgUmVmPE5vT3BlblBhcmFtZXRlcnM+IHJlbGVhc2UoKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVh
ZHkpOwotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKE5vT3BlblBhcmFtZXRlcnMp
ID09IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7Ci0KLSAgICAgICAgICAgIFJl
ZjxKU09OOjpPYmplY3Q+IGpzb25SZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOwot
ICAgICAgICAgICAgYXV0byByZXN1bHQgPSBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxO
b09wZW5QYXJhbWV0ZXJzPio+KCZqc29uUmVzdWx0KSk7Ci0gICAgICAgICAgICByZXR1cm4gcmVz
dWx0OwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIC8qCi0gICAgICogU3ludGhldGljIGNvbnN0
cnVjdG9yOgotICAgICAqIFJlZjxOb09wZW5QYXJhbWV0ZXJzPiByZXN1bHQgPSBOb09wZW5QYXJh
bWV0ZXJzOjpjcmVhdGUoKQotICAgICAqICAgICAuc2V0T25lKC4uLikKLSAgICAgKiAgICAgLnNl
dFR3byguLi4pCi0gICAgICogICAgIC5yZWxlYXNlKCk7Ci0gICAgICovCi0gICAgc3RhdGljIEJ1
aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gQnVpbGRl
cjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7Ci0gICAgfQotfTsKLQotY2xh
c3MgT3BlblBhcmFtZXRlcnMgOiBwdWJsaWMgSlNPTjo6T2JqZWN0IHsKLXB1YmxpYzoKLSAgICBl
bnVtIHsKLSAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAotICAgICAgICBBbHBoYVNldCA9IDEgPDwg
MCwKLSAgICAgICAgQmV0YVNldCA9IDEgPDwgMSwKLSAgICAgICAgQWxsRmllbGRzU2V0ID0gKEFs
cGhhU2V0IHwgQmV0YVNldCkKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8aW50IFNUQVRFPgotICAg
IGNsYXNzIEJ1aWxkZXIgewotICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+IG1fcmVzdWx0OwotCi0gICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRF
IHwgU1RFUD4mIGNhc3RTdGF0ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAqcmVp
bnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIEJ1aWxkZXIoUmVmPC8qT3BlblBhcmFtZXRlcnMqL0pTT046Ok9iamVjdD4mJiBv
YmplY3QpCi0gICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKLSAgICAgICAg
ewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxk
ZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZnJpZW5k
IGNsYXNzIE9wZW5QYXJhbWV0ZXJzOwotICAgIHB1YmxpYzoKLQotICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgQWxwaGFTZXQ+JiBzZXRBbHBoYShkb3VibGUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBBbHBoYVNldCksIHByb3BlcnR5X2FscGhh
X2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXREb3VibGUoImFscGhhIl9z
LCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEFscGhhU2V0PigpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IEJldGFTZXQ+JiBzZXRCZXRhKGRvdWJs
ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IEJldGFTZXQpLCBwcm9wZXJ0eV9iZXRhX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXREb3VibGUoImJldGEiX3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0
U3RhdGU8QmV0YVNldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIFJlZjxPcGVuUGFyYW1ldGVy
cz4gcmVsZWFzZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRF
ID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7Ci0gICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVChzaXplb2YoT3BlblBhcmFtZXRlcnMpID09IHNpemVvZihKU09OOjpPYmplY3Qp
LCBjYW5ub3RfY2FzdCk7Ci0KLSAgICAgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25SZXN1
bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOwotICAgICAgICAgICAgYXV0byByZXN1bHQg
PSBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxPcGVuUGFyYW1ldGVycz4qPigmanNvblJl
c3VsdCkpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgIH07Ci0K
LSAgICAvKgotICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKLSAgICAgKiBSZWY8T3BlblBh
cmFtZXRlcnM+IHJlc3VsdCA9IE9wZW5QYXJhbWV0ZXJzOjpjcmVhdGUoKQotICAgICAqICAgICAu
c2V0QWxwaGEoLi4uKQotICAgICAqICAgICAuc2V0QmV0YSguLi4pCi0gICAgICogICAgIC5yZWxl
YXNlKCk7Ci0gICAgICovCi0gICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgp
Ci0gICAgewotICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKSk7Ci0gICAgfQotCi0gICAgLy8gUHJvcGVydHkgbmFtZXMgZm9yIHR5cGUgZ2Vu
ZXJhdGVkIGFzIG9wZW4uCi0gICAgTm9uZSBzdGF0aWMgY29uc3QgY2hhciogQWxwaGE7Ci19Owot
Ci19IC8vIFRlc3QKLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0KLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi1jb25zdCBjaGFyKiBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpUZXN0OjpPcGVuUGFyYW1ldGVyczo6QWxwaGEgPSAiYWxwaGEiOwotCi19IC8vIG5hbWVz
cGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
QmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0
eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVy
bmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQot
Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgot
Ci0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmln
LmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1
ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLQotbmFtZXNwYWNlIElu
c3BlY3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbi5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
dHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4K
LQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRl
c3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAotQGVuZAotCi0KLSMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xDb25maWd1cmF0aW9uLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
dHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIK
LQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2Nv
bEJhY2tlbmREaXNwYXRjaGVycy5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRl
RGlzcGF0Y2hhYmxlQWdlbnQuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxl
SW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3Rv
cjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KLXsKLSAgICBB
dWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotfQotCi0tIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xs
ZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2Vs
ZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2Nv
bnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWRl
YWxsb2MKLXsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSB0eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIK
LQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDx3dGYv
SlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLSMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXdp
dGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLSNpbXBvcnQg
PFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KLQotCi1AY2xhc3MgVGVzdFBy
b3RvY29sVGVzdE5vT3BlblBhcmFtZXRlcnM7Ci1AY2xhc3MgVGVzdFByb3RvY29sVGVzdE9wZW5Q
YXJhbWV0ZXJzOwotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xQbGF0
Zm9ybSkgewotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsLAotICAgIFRlc3RQcm90b2NvbFBs
YXRmb3JtR2VuZXJpYywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUywKLSAgICBUZXN0UHJv
dG9jb2xQbGF0Zm9ybU1hY09TLAotfTsKLQotCi0KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0
eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbFRlc3ROb09wZW5QYXJhbWV0
ZXJzIDogUldJUHJvdG9jb2xKU09OT2JqZWN0Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXls
b2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKLS0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29u
T2JqZWN0OwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoT25lOihkb3VibGUpb25lIHR3bzooZG91
YmxlKXR3bzsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGRv
dWJsZSBvbmU7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBk
b3VibGUgdHdvOwotQGVuZAotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIp
KSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sVGVzdE9wZW5QYXJhbWV0ZXJzIDogUldJUHJvdG9j
b2xKU09OT2JqZWN0Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25h
cnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBy
b3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OwotLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoQWxwaGE6KGRvdWJsZSlhbHBoYSBiZXRhOihkb3VibGUpYmV0YTsK
LS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGRvdWJsZSBhbHBo
YTsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGRvdWJsZSBi
ZXRhOwotQGVuZAotCi0KLQotCi0KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29s
QnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKLSNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgot
I2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xJbnRlcm5hbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtd2l0aC1vcGVu
LXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQ
cm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KLU9wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJv
bVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOwotCi1pbmxpbmUgU3RyaW5nIHRv
UHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sUGxhdGZvcm0gdmFsdWUpCi17Ci0gICAgc3dpdGNo
KHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDoKLSAgICAgICAgcmV0
dXJuICJhbGwiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM6Ci0gICAg
ICAgIHJldHVybiAiZ2VuZXJpYyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9T
OgotICAgICAgICByZXR1cm4gImlvcyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3Jt
TWFjT1M6Ci0gICAgICAgIHJldHVybiAibWFjb3MiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+
Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sUGxhdGZvcm0+IGZyb21Qcm90b2NvbFN0cmlu
Zyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiYWxsIikKLSAgICAg
ICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOwotICAgIGlmICh2YWx1ZSA9PSAiZ2Vu
ZXJpYyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM7Ci0gICAg
aWYgKHZhbHVlID09ICJpb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1J
T1M7Ci0gICAgaWYgKHZhbHVlID09ICJtYWNvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9j
b2xQbGF0Zm9ybU1hY09TOwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLQotCi19IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
Lm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRoLW9wZW4tcGFy
YW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotCi0jaW1wb3J0ICJUZXN0
UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKLSNpbXBvcnQg
PFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0KLXVzaW5nIG5h
bWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zIChUZXN0RG9tYWluKQotCi0rICh2b2lkKV9wYXJzZU5vT3BlblBhcmFtZXRlcnM6KFRlc3RQ
cm90b2NvbFRlc3ROb09wZW5QYXJhbWV0ZXJzICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClw
YXlsb2FkOwotKyAodm9pZClfcGFyc2VPcGVuUGFyYW1ldGVyczooVGVzdFByb3RvY29sVGVzdE9w
ZW5QYXJhbWV0ZXJzICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotCi1AZW5k
Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFRlc3REb21h
aW4pCi0KLSsgKHZvaWQpX3BhcnNlTm9PcGVuUGFyYW1ldGVyczooVGVzdFByb3RvY29sVGVzdE5v
T3BlblBhcmFtZXRlcnMgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAg
ICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xh
c3NdKTsKLSAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbFRlc3ROb09wZW5QYXJhbWV0ZXJz
IGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07Ci19Ci0KLSsgKHZvaWQpX3BhcnNlT3Bl
blBhcmFtZXRlcnM6KFRlc3RQcm90b2NvbFRlc3RPcGVuUGFyYW1ldGVycyAqKilvdXRWYWx1ZSBm
cm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZ
UEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IFtbVGVz
dFByb3RvY29sVGVzdE9wZW5QYXJhbWV0ZXJzIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9h
ZF07Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVz
dFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0
ZS5oPgotI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVz
Lmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotQGltcGxlbWVudGF0aW9uIFRl
c3RQcm90b2NvbFRlc3ROb09wZW5QYXJhbWV0ZXJzCi0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0
aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQK
LXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsK
LQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAIm9u
ZSJdLCBAIm9uZSIpOwotICAgIHNlbGYub25lID0gW3BheWxvYWRbQCJvbmUiXSBkb3VibGVWYWx1
ZV07Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRb
QCJ0d28iXSwgQCJ0d28iKTsKLSAgICBzZWxmLnR3byA9IFtwYXlsb2FkW0AidHdvIl0gZG91Ymxl
VmFsdWVdOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQ
cm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopb2JqZWN0Ci17Ci0gICAgaWYg
KCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEpTT05PYmplY3Q6W29iamVjdCB0b0pTT05PYmplY3Rd
LmdldCgpXSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQot
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoT25lOihkb3VibGUpb25lIHR3bzooZG91YmxlKXR3bwot
ewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwot
Ci0gICAgc2VsZi5vbmUgPSBvbmU7Ci0gICAgc2VsZi50d28gPSB0d287Ci0KLSAgICByZXR1cm4g
c2VsZjsKLX0KLQotLSAodm9pZClzZXRPbmU6KGRvdWJsZSlvbmUKLXsKLSAgICBbc3VwZXIgc2V0
RG91YmxlOm9uZSBmb3JLZXk6QCJvbmUiXTsKLX0KLQotLSAoZG91YmxlKW9uZQotewotICAgIHJl
dHVybiBbc3VwZXIgZG91YmxlRm9yS2V5OkAib25lIl07Ci19Ci0KLS0gKHZvaWQpc2V0VHdvOihk
b3VibGUpdHdvCi17Ci0gICAgW3N1cGVyIHNldERvdWJsZTp0d28gZm9yS2V5OkAidHdvIl07Ci19
Ci0KLS0gKGRvdWJsZSl0d28KLXsKLSAgICByZXR1cm4gW3N1cGVyIGRvdWJsZUZvcktleTpAInR3
byJdOwotfQotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUZXN0T3BlblBh
cmFtZXRlcnMKLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBOU0Rp
Y3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZAotewotICAgIGlmICghKHNlbGYgPSBb
c3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiYWxwaGEiXSwgQCJhbHBoYSIpOwotICAg
IHNlbGYuYWxwaGEgPSBbcGF5bG9hZFtAImFscGhhIl0gZG91YmxlVmFsdWVdOwotCi0gICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiYmV0YSJdLCBAImJl
dGEiKTsKLSAgICBzZWxmLmJldGEgPSBbcGF5bG9hZFtAImJldGEiXSBkb3VibGVWYWx1ZV07Ci0K
LSAgICByZXR1cm4gc2VsZjsKLX0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2Jq
ZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilvYmplY3QKLXsKLSAgICBpZiAoIShzZWxmID0g
W3N1cGVyIGluaXRXaXRoSlNPTk9iamVjdDpbb2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0KCldKSkK
LSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhBbHBoYTooZG91YmxlKWFscGhhIGJldGE6KGRvdWJsZSliZXRhCi17Ci0g
ICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAg
ICBzZWxmLmFscGhhID0gYWxwaGE7Ci0gICAgc2VsZi5iZXRhID0gYmV0YTsKLQotICAgIHJldHVy
biBzZWxmOwotfQotCi0tICh2b2lkKXNldEFscGhhOihkb3VibGUpYWxwaGEKLXsKLSAgICBbc3Vw
ZXIgc2V0RG91YmxlOmFscGhhIGZvcktleTpAImFscGhhIl07Ci19Ci0KLS0gKGRvdWJsZSlhbHBo
YQotewotICAgIHJldHVybiBbc3VwZXIgZG91YmxlRm9yS2V5OkAiYWxwaGEiXTsKLX0KLQotLSAo
dm9pZClzZXRCZXRhOihkb3VibGUpYmV0YQotewotICAgIFtzdXBlciBzZXREb3VibGU6YmV0YSBm
b3JLZXk6QCJiZXRhIl07Ci19Ci0KLS0gKGRvdWJsZSliZXRhCi17Ci0gICAgcmV0dXJuIFtzdXBl
ciBkb3VibGVGb3JLZXk6QCJiZXRhIl07Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC92ZXJzaW9uLmpzb24tcmVzdWx0
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMv
ZXhwZWN0ZWQvdmVyc2lvbi5qc29uLXJlc3VsdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggZDRlODdkYzQ3MzkuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3ZlcnNpb24uanNvbi1yZXN1
bHQKKysrIC9kZXYvbnVsbApAQCAtMSw4ODAgKzAsMCBAQAotIyMjIEJlZ2luIEZpbGU6IEluc3Bl
Y3RvckJhY2tlbmRDb21tYW5kcy5qcwotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHZlcnNpb24uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0vLyBWZXJzaW9uRG9tYWluCi1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJWZXJz
aW9uRG9tYWluIiwgbnVsbCk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyVmVyc2lvbigiVmVy
c2lvbkRvbWFpbiIsIDQyKTsKLUluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIlZlcnNp
b25Eb21haW4iLCBudWxsKTsKLSMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRz
LmpzCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQotI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbFR5cGVzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVu
ZFJvdXRlci5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgQWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIo
UmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0
Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KLSAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFj
a2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgp
OyB9Ci1wcml2YXRlOgotICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlz
cGF0Y2hlcjsKLX07Ci0KLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jZW5kaWYg
Ly8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jIyMgRW5kIEZpbGU6
IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
dmVyc2lvbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10eXBl
ZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgot
IyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gdmVyc2lvbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNo
ZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRl
ci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVz
dHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jaWYgRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVycy5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0K
LQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmRE
aXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJz
LmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNp
bmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3Rv
ciB7Ci0KLWNsYXNzIEZyb250ZW5kUm91dGVyOwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
LSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gdmVyc2lvbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNw
YXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRS
b3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNw
ZWN0b3IgewotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0
RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9i
amVjdHMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHZlcnNpb24uanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UK
LQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNp
bmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0K
LW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLS8vIFZlcnNpb25zLgotbmFtZXNwYWNlIFZlcnNpb25E
b21haW4gewotc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBWRVJTSU9OID0gNDI7Ci19IC8vIFZl
cnNpb25Eb21haW4KLS8vIEVuZCBvZiB2ZXJzaW9ucy4KLQotCi0KLQotCi0KLQotCi19IC8vIG5h
bWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xP
YmplY3RzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHZlcnNpb24uanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotCi0jaW5jbHVkZSA8
d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLX0gLy8gbmFtZXNw
YWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xC
YWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHZl
cnNpb24uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0j
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXJzLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi0KLQotbmFtZXNwYWNlIEluc3Bl
Y3RvciB7Ci0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHZlcnNpb24uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNw
YXRjaGVycy5oIgotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbmNsdWRl
ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVl
cy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0KLSMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5o
PgotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2Ug
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0Ci1AZW5kCi0KLQotIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSB2ZXJzaW9uLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgotCi0jaW1wb3J0ICJUZXN0
UHJvdG9jb2xJbnRlcm5hbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNo
ZXJzLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2Vu
dC5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9s
bGVyLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5k
RGlzcGF0Y2hlcnMuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVycy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW1wbGVtZW50
YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVj
dG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0
aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgot
ewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1
cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRy
b2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAgIFtz
dXBlciBkZWFsbG9jXTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbi5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNw
YXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHZlcnNpb24uanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJU
ZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMuaCIKLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJ
bnNwZWN0b3I7Ci0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJz
Lm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHZlcnNpb24uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2lt
cG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgotCi0KLQotCi10eXBl
ZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xQbGF0Zm9ybSkgewotICAgIFRlc3RQ
cm90b2NvbFBsYXRmb3JtQWxsLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYywKLSAg
ICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09T
LAotfTsKLQotCi0KLQotCi0KLQotCi0KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3Rv
Y29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lvbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2lt
cG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKLSNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8d3RmL0pT
T05WYWx1ZXMuaD4KLQotCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5o
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHZlcnNpb24uanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNp
bXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KLQotbmFt
ZXNwYWNlIEluc3BlY3RvciB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KLU9w
dGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFs
dWUpOwotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sUGxhdGZv
cm0gdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQ
bGF0Zm9ybUFsbDoKLSAgICAgICAgcmV0dXJuICJhbGwiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9j
b2xQbGF0Zm9ybUdlbmVyaWM6Ci0gICAgICAgIHJldHVybiAiZ2VuZXJpYyJfczsKLSAgICBjYXNl
IFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOgotICAgICAgICByZXR1cm4gImlvcyJfczsKLSAgICBj
YXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M6Ci0gICAgICAgIHJldHVybiAibWFjb3MiX3M7
Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sUGxh
dGZvcm0+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlm
ICh2YWx1ZSA9PSAiYWxsIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxs
OwotICAgIGlmICh2YWx1ZSA9PSAiZ2VuZXJpYyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9j
b2xQbGF0Zm9ybUdlbmVyaWM7Ci0gICAgaWYgKHZhbHVlID09ICJpb3MiKQotICAgICAgICByZXR1
cm4gVGVzdFByb3RvY29sUGxhdGZvcm1JT1M7Ci0gICAgaWYgKHZhbHVlID09ICJtYWNvcyIpCi0g
ICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOwotICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSB2ZXJzaW9uLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0KLSNpbXBvcnQgIlRl
c3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgotI2ltcG9y
dCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLQotdXNpbmcg
bmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0KLQotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBl
cy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHZlcnNpb24uanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJv
dG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMu
aCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+
Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4K
LQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGlu
Zy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tY29tbWFuZC10YXJnZXRUeXBlLW1h
dGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBkNmRmOWU0YmQ5Yy4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1jb21tYW5kLXRhcmdl
dFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKysrIC9kZXYvbnVsbApA
QCAtMSw5ICswLDAgQEAKLVsKLXsKLSAgICAiZG9tYWluIjogIkRvbWFpbiIsCi0gICAgImRlYnVn
Z2FibGVUeXBlcyI6IFsiamF2YXNjcmlwdCJdLAotICAgICJ0YXJnZXRUeXBlcyI6IFsid29ya2Vy
Il0sCi0gICAgImNvbW1hbmRzIjogW3sibmFtZSI6ICJDb21tYW5kIn1dLAotICAgICJldmVudHMi
OiBbeyJuYW1lIjogIkV2ZW50In1dCi19Ci1dCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWNvbW1hbmQtdGFy
Z2V0VHlwZXMtdHlwZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1jb21tYW5kLXRhcmdldFR5cGVzLXR5cGUuanNvbgpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjQwNTlmODRiY2YuLjAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2ZhaWwtb24tY29tbWFuZC10YXJnZXRUeXBlcy10eXBlLmpzb24KKysrIC9kZXYvbnVsbApAQCAt
MSw5ICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIkRvbWFpbiIsCi0gICAgImNvbW1hbmRzIjog
WwotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJQYWdlT25seSIsCi0gICAgICAgICAg
ICAidGFyZ2V0VHlwZXMiOiAicGFnZWUiCi0gICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9m
YWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlwZXMtdmFsdWUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tY29tbWFuZC10YXJn
ZXRUeXBlcy12YWx1ZS5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MDIwNDQ3
MmVjOC4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1jb21tYW5kLXRhcmdldFR5cGVzLXZhbHVlLmpz
b24KKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIkRvbWFp
biIsCi0gICAgImNvbW1hbmRzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJQ
YWdlT25seSIsCi0gICAgICAgICAgICAidGFyZ2V0VHlwZXMiOiBbInBhZ2VlIl0KLSAgICAgICAg
fQotICAgIF0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tY29tbWFuZC13aXRoLWludmFsaWQtcGxhdGZv
cm0uanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL2ZhaWwtb24tY29tbWFuZC13aXRoLWludmFsaWQtcGxhdGZvcm0uanNvbgpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTE4MGNhZTliZmYuLjAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwt
b24tY29tbWFuZC13aXRoLWludmFsaWQtcGxhdGZvcm0uanNvbgorKysgL2Rldi9udWxsCkBAIC0x
LDE2ICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIk92ZXJsYXkiLAotICAgICJjb21tYW5kcyI6
IFsKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAicHJvY2Vzc1BvaW50cyIsCi0gICAg
ICAgICAgICAicGxhdGZvcm0iOiAiaW52YWxpZCIsCi0gICAgICAgICAgICAicGFyYW1ldGVycyI6
IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBvaW50MSIsICJ0eXBlIjogIm51bWJlciIg
fSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBvaW50MiIsICJ0eXBlIjogIm51bWJlciIg
fQotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJyZXR1cm5zIjogWwotICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAicmVzdWx0IiwgInR5cGUiOiAic3RyaW5nIiB9Ci0gICAgICAgICAgICBd
Ci0gICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWRvbWFpbi1kZWJ1Z2dhYmxl
VHlwZXMtdHlwZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kb21haW4tZGVidWdnYWJsZVR5cGVzLXR5cGUuanNvbgpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTc0OGY0MjM0NzMuLjAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2ZhaWwtb24tZG9tYWluLWRlYnVnZ2FibGVUeXBlcy10eXBlLmpzb24KKysrIC9kZXYvbnVsbApA
QCAtMSw5ICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIldlYk9ubHkiLAotICAgICJkZWJ1Z2dh
YmxlVHlwZXMiOiAid2ViYiIsCi0gICAgImNvbW1hbmRzIjogWwotICAgICAgICB7Ci0gICAgICAg
ICAgICAibmFtZSI6ICJlbmFibGUiCi0gICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWls
LW9uLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMtdmFsdWUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZG9tYWluLWRlYnVn
Z2FibGVUeXBlcy12YWx1ZS5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMjUy
ZGRiZDgzZC4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kb21haW4tZGVidWdnYWJsZVR5cGVzLXZh
bHVlLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjog
IldlYk9ubHkiLAotICAgICJkZWJ1Z2dhYmxlVHlwZXMiOiBbIndlYmIiXSwKLSAgICAiY29tbWFu
ZHMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImVuYWJsZSIKLSAgICAgICAg
fQotICAgIF0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmct
ZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWRvbWFpbi10YXJnZXRUeXBlLW1hdGNo
aW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA3YWEwMjgwNDY1Ny4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlw
ZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgorKysgL2Rldi9udWxsCkBAIC0x
LDggKzAsMCBAQAotWwotewotICAgICJkb21haW4iOiAiRG9tYWluIiwKLSAgICAiZGVidWdnYWJs
ZVR5cGVzIjogWyJqYXZhc2NyaXB0Il0sCi0gICAgImNvbW1hbmRzIjogW3sibmFtZSI6ICJDb21t
YW5kIiwgInRhcmdldFR5cGVzIjogWyJ3b3JrZXIiXX1dLAotICAgICJldmVudHMiOiBbeyJuYW1l
IjogIkV2ZW50In1dCi19Ci1dCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWRvbWFpbi10YXJnZXRUeXBlcy10
eXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJpYy9mYWlsLW9uLWRvbWFpbi10YXJnZXRUeXBlcy10eXBlLmpzb24KZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGQ4MjIyNjc0MTQ2Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWRv
bWFpbi10YXJnZXRUeXBlcy10eXBlLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAK
LXsKLSAgICAiZG9tYWluIjogIlBhZ2VPbmx5IiwKLSAgICAidGFyZ2V0VHlwZXMiOiAicGFnZWUi
LAotICAgICJjb21tYW5kcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiZW5h
YmxlIgotICAgICAgICB9Ci0gICAgXQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kb21haW4tdGFyZ2V0
VHlwZXMtdmFsdWUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZG9tYWluLXRhcmdldFR5cGVzLXZhbHVlLmpzb24KZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3YjEwZDdmMTU0Li4wMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9m
YWlsLW9uLWRvbWFpbi10YXJnZXRUeXBlcy12YWx1ZS5qc29uCisrKyAvZGV2L251bGwKQEAgLTEs
OSArMCwwIEBACi17Ci0gICAgImRvbWFpbiI6ICJQYWdlT25seSIsCi0gICAgInRhcmdldFR5cGVz
IjogWyJwYWdlZSJdLAotICAgICJjb21tYW5kcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAg
Im5hbWUiOiAiZW5hYmxlIgotICAgICAgICB9Ci0gICAgXQotfQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1k
dXBsaWNhdGUtY29tbWFuZC1jYWxsLXBhcmFtZXRlci1uYW1lcy5qc29uIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kdXBsaWNh
dGUtY29tbWFuZC1jYWxsLXBhcmFtZXRlci1uYW1lcy5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBiYWI3NmNhNjI3OS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kdXBsaWNhdGUt
Y29tbWFuZC1jYWxsLXBhcmFtZXRlci1uYW1lcy5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsMTYg
KzAsMCBAQAotewotICAgICJkb21haW4iOiAiT3ZlcmxheSIsCi0gICAgImNvbW1hbmRzIjogWwot
ICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJwcm9jZXNzUG9pbnRzIiwKLSAgICAgICAg
ICAgICJwYXJhbWV0ZXJzIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicG9pbnQiLCAi
dHlwZSI6ICJudW1iZXIiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwb2ludCIsICJ0
eXBlIjogIm51bWJlciIgfQotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJyZXR1cm5zIjog
WwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicmVzdWx0MSIsICJ0eXBlIjogInN0cmluZyIg
fSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInJlc3VsdDIiLCAidHlwZSI6ICJzdHJpbmci
IH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfQotICAgIF0KLX0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24t
ZHVwbGljYXRlLWNvbW1hbmQtcmV0dXJuLXBhcmFtZXRlci1uYW1lcy5qc29uIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kdXBs
aWNhdGUtY29tbWFuZC1yZXR1cm4tcGFyYW1ldGVyLW5hbWVzLmpzb24KZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGM4YmIxNWMwNGI2Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWR1cGxp
Y2F0ZS1jb21tYW5kLXJldHVybi1wYXJhbWV0ZXItbmFtZXMuanNvbgorKysgL2Rldi9udWxsCkBA
IC0xLDE2ICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIk92ZXJsYXkiLAotICAgICJjb21tYW5k
cyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAicHJvY2Vzc1BvaW50cyIsCi0g
ICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBv
aW50MSIsICJ0eXBlIjogIm51bWJlciIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBv
aW50MiIsICJ0eXBlIjogIm51bWJlciIgfQotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJy
ZXR1cm5zIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicmVzdWx0IiwgInR5cGUiOiAi
c3RyaW5nIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicmVzdWx0IiwgInR5cGUiOiAi
c3RyaW5nIiB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9m
YWlsLW9uLWR1cGxpY2F0ZS1ldmVudC1wYXJhbWV0ZXItbmFtZXMuanNvbiBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZHVwbGlj
YXRlLWV2ZW50LXBhcmFtZXRlci1uYW1lcy5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBkM2QzYjNjYzY0Mi4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kdXBsaWNhdGUtZXZlbnQt
cGFyYW1ldGVyLW5hbWVzLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi17Ci0g
ICAgImRvbWFpbiI6ICJPdmVybGF5IiwKLSAgICAiZXZlbnRzIjogWwotICAgICAgICB7Ci0gICAg
ICAgICAgICAibmFtZSI6ICJwcm9jZXNzZWRQb2ludHMiLAotICAgICAgICAgICAgInBhcmFtZXRl
cnMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwb2ludCIsICJ0eXBlIjogIm51bWJl
ciIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBvaW50IiwgInR5cGUiOiAibnVtYmVy
IiB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9u
LWR1cGxpY2F0ZS10eXBlLWRlY2xhcmF0aW9ucy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1k
ZWNsYXJhdGlvbnMuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzAyZmM2YTMy
NzAuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZHVwbGljYXRlLXR5cGUtZGVjbGFyYXRpb25zLmpz
b24KKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi17Ci0gICAgImRvbWFpbiI6ICJSdW50
aW1lIiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJSZW1v
dGVPYmplY3RJZCIsCi0gICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAotICAgICAgICAgICAg
ImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4iCi0gICAgICAgIH0sCi0g
ICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJSZW1vdGVPYmplY3RJZCIsCi0gICAgICAgICAg
ICAidHlwZSI6ICJzdHJpbmciLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBv
YmplY3QgaWRlbnRpZmllci4iCi0gICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9u
LWR1cGxpY2F0ZS10eXBlLW1lbWJlci1uYW1lcy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1t
ZW1iZXItbmFtZXMuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWViYWNlZThi
MjMuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZHVwbGljYXRlLXR5cGUtbWVtYmVyLW5hbWVzLmpz
b24KKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi1bCi17Ci0gICAgImRvbWFpbiI6ICJP
dmVybGF5VHlwZXMiLAotICAgICJ0eXBlcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgImlk
IjogIlBvaW50IiwKLSAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCi0gICAgICAgICAgICAi
cHJvcGVydGllcyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogIngiLCAidHlwZSI6ICJp
bnRlZ2VyIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAieCIsICJ0eXBlIjogImludGVn
ZXIiIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfQotICAgIF0KLX0KLV0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2Zh
aWwtb24tZW51bS13aXRoLW5vLXZhbHVlcy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1lbnVtLXdpdGgtbm8tdmFsdWVz
Lmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzMmE3YzMyNDlhLi4wMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJpYy9mYWlsLW9uLWVudW0td2l0aC1uby12YWx1ZXMuanNvbgorKysgL2Rldi9udWxsCkBA
IC0xLDEwICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKLSAgICAidHlwZXMi
OiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJQcmltYXJ5Q29sb3JzIiwKLSAgICAg
ICAgICAgICJ0eXBlIjogInN0cmluZyIsCi0gICAgICAgICAgICAiZW51bSI6IFtdCi0gICAgICAg
IH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmct
ZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGUtbWF0Y2hp
bmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDkxMzJjZTA4ODI4Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGUt
bWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw4
ICswLDAgQEAKLVsKLXsKLSAgICAiZG9tYWluIjogIkRvbWFpbiIsCi0gICAgImRlYnVnZ2FibGVU
eXBlcyI6IFsiamF2YXNjcmlwdCJdLAotICAgICJjb21tYW5kcyI6IFt7Im5hbWUiOiAiQ29tbWFu
ZCJ9XSwKLSAgICAiZXZlbnRzIjogW3sibmFtZSI6ICJFdmVudCIsICJ0YXJnZXRUeXBlcyI6IFsi
d29ya2VyIl19XQotfQotXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1ldmVudC10YXJnZXRUeXBlcy10eXBl
Lmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2Vu
ZXJpYy9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGVzLXR5cGUuanNvbgpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggZTU0ZWQxZjVjNmIuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZXZlbnQt
dGFyZ2V0VHlwZXMtdHlwZS5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi17Ci0g
ICAgImRvbWFpbiI6ICJEb21haW4iLAotICAgICJldmVudHMiOiBbCi0gICAgICAgIHsKLSAgICAg
ICAgICAgICJuYW1lIjogIlBhZ2VPbmx5IiwKLSAgICAgICAgICAgICJ0YXJnZXRUeXBlcyI6ICJw
YWdlZSIKLSAgICAgICAgfQotICAgIF0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZXZlbnQtdGFyZ2V0
VHlwZXMtdmFsdWUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlwZXMtdmFsdWUuanNvbgpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTg4NGJmZDdhNmIuLjAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2Zh
aWwtb24tZXZlbnQtdGFyZ2V0VHlwZXMtdmFsdWUuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDkg
KzAsMCBAQAotewotICAgICJkb21haW4iOiAiRG9tYWluIiwKLSAgICAiZXZlbnRzIjogWwotICAg
ICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJQYWdlT25seSIsCi0gICAgICAgICAgICAidGFy
Z2V0VHlwZXMiOiBbInBhZ2VlIl0KLSAgICAgICAgfQotICAgIF0KLX0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwt
b24tbnVtYmVyLXR5cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24gYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLW51bWJl
ci10eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA3MzA4ZGI5OTJkNi4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1udW1iZXItdHlw
ZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDE4ICsw
LDAgQEAKLXsKLSAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKLSAgICAidHlwZXMiOiBbCi0gICAg
ICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJEYXRhYmFzZUlkIiwKLSAgICAgICAgICAgICJ0eXBl
IjogInN0cmluZyIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIGlkZW50aWZp
ZXIgb2YgRGF0YWJhc2Ugb2JqZWN0LiIKLSAgICAgICAgfQotICAgIF0sCi0gICAgImV2ZW50cyI6
IFsKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiZGlkRXhlY3V0ZU9wdGlvbmFsUGFy
YW1ldGVycyIsCi0gICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKLSAgICAgICAgICAgICAgICB7
ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogMCB9
Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLW51
bWJlci10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29uIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1udW1iZXItdHlwZWQt
b3B0aW9uYWwtdHlwZS1tZW1iZXIuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
YWZlYTU1NWVjNGYuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tbnVtYmVyLXR5cGVkLW9wdGlvbmFs
LXR5cGUtbWVtYmVyLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi1bCi17Ci0g
ICAgImRvbWFpbiI6ICJEYXRhYmFzZSIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7Ci0gICAg
ICAgICAgICAiaWQiOiAiRXJyb3IiLAotICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKLSAg
ICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJEYXRhYmFzZSBlcnJvci4iLAotICAgICAgICAgICAg
InByb3BlcnRpZXMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJtZXNzYWdlIiwgInR5
cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIG1lc3NhZ2UuIiB9LAotICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAiY29kZSIsICJ0eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRp
b24iOiAiRXJyb3IgY29kZS4iLCAib3B0aW9uYWwiOiAwIH0KLSAgICAgICAgICAgIF0KLSAgICAg
ICAgfQotICAgIF0KLX0KLV0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFs
LXBhcmFtZXRlci1mbGFnLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLXN0cmluZy10eXBlZC1vcHRpb25hbC1wYXJhbWV0
ZXItZmxhZy5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MDEyYzc5YjZiMy4u
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZs
YWcuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjog
IkRhdGFiYXNlIiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6
ICJEYXRhYmFzZUlkIiwKLSAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCi0gICAgICAgICAg
ICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIGlkZW50aWZpZXIgb2YgRGF0YWJhc2Ugb2JqZWN0LiIK
LSAgICAgICAgfQotICAgIF0sCi0gICAgImV2ZW50cyI6IFsKLSAgICAgICAgewotICAgICAgICAg
ICAgIm5hbWUiOiAiZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyIsCi0gICAgICAgICAgICAi
cGFyYW1ldGVycyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwg
InR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogInRydWUiIH0KLSAgICAgICAgICAgIF0KLSAg
ICAgICAgfQotICAgIF0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFs
LXR5cGUtbWVtYmVyLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLXN0cmluZy10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJl
ci5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYTNlZjI4YThmOC4uMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvZmFpbC1vbi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNvbgor
KysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLVsKLXsKLSAgICAiZG9tYWluIjogIkRhdGFi
YXNlIiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJFcnJv
ciIsCi0gICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAotICAgICAgICAgICAgImRlc2NyaXB0
aW9uIjogIkRhdGFiYXNlIGVycm9yLiIsCi0gICAgICAgICAgICAicHJvcGVydGllcyI6IFsKLSAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogIm1lc3NhZ2UiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVz
Y3JpcHRpb24iOiAiRXJyb3IgbWVzc2FnZS4iIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJjb2RlIiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBjb2RlLiIs
ICJvcHRpb25hbCI6ICJmYWxzZSIgfQotICAgICAgICAgICAgXQotICAgICAgICB9Ci0gICAgXQot
fQotXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi10eXBlLWRlY2xhcmF0aW9uLXVzaW5nLXR5cGUtcmVmZXJl
bmNlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJpYy9mYWlsLW9uLXR5cGUtZGVjbGFyYXRpb24tdXNpbmctdHlwZS1yZWZlcmVuY2UuanNv
bgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTliNzU5MGNjYzYuLjAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmljL2ZhaWwtb24tdHlwZS1kZWNsYXJhdGlvbi11c2luZy10eXBlLXJlZmVyZW5jZS5qc29uCisr
KyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotWwotewotICAgICJkb21haW4iOiAiUnVudGlt
ZSIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiUmVtb3Rl
T2JqZWN0SWQiLAotICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKLSAgICAgICAgICAgICIk
cmVmIjogIlNvbWVUeXBlIiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgb2Jq
ZWN0IGlkZW50aWZpZXIuIgotICAgICAgICB9Ci0gICAgXQotfQotXQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1v
bi10eXBlLXJlZmVyZW5jZS1hcy1wcmltaXRpdmUtdHlwZS5qc29uIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi10eXBlLXJlZmVy
ZW5jZS1hcy1wcmltaXRpdmUtdHlwZS5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA4YzgzYmJmY2U0MS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi10eXBlLXJlZmVyZW5jZS1hcy1w
cmltaXRpdmUtdHlwZS5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotewotICAg
ICJkb21haW4iOiAiRGF0YWJhc2UiLAotICAgICJ0eXBlcyI6IFsKLSAgICAgICAgewotICAgICAg
ICAgICAgImlkIjogIkRhdGFiYXNlSWQiLAotICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwK
LSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgaWRlbnRpZmllciBvZiBEYXRhYmFz
ZSBvYmplY3QuIgotICAgICAgICB9Ci0gICAgXSwKLSAgICAiZXZlbnRzIjogWwotICAgICAgICB7
Ci0gICAgICAgICAgICAibmFtZSI6ICJkaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzIiwKLSAg
ICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29s
dW1uTmFtZXMiLCAidHlwZSI6ICJEYXRhYmFzZUlkIiB9Ci0gICAgICAgICAgICBdCi0gICAgICAg
IH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLXR5cGUtd2l0aC1pbnZhbGlkLXBsYXRmb3Jt
Lmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2Vu
ZXJpYy9mYWlsLW9uLXR5cGUtd2l0aC1pbnZhbGlkLXBsYXRmb3JtLmpzb24KZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGE5ZmQyZTk5NTYxLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLXR5
cGUtd2l0aC1pbnZhbGlkLXBsYXRmb3JtLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCww
IEBACi17Ci0gICAgImRvbWFpbiI6ICJSdW50aW1lIiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAg
IHsKLSAgICAgICAgICAgICJpZCI6ICJSZW1vdGVPYmplY3RJZCIsCi0gICAgICAgICAgICAidHlw
ZSI6ICJzdHJpbmciLAotICAgICAgICAgICAgInBsYXRmb3JtIjogImludmFsaWQiLAotICAgICAg
ICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4iCi0gICAgICAg
IH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLXR5cGUtd2l0aC1sb3dlcmNhc2UtbmFtZS5q
c29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVy
aWMvZmFpbC1vbi10eXBlLXdpdGgtbG93ZXJjYXNlLW5hbWUuanNvbgpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNTMxOTAxZTRhOWEuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tdHlwZS13
aXRoLWxvd2VyY2FzZS1uYW1lLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi17
Ci0gICAgImRvbWFpbiI6ICJEYXRhYmFzZSIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7Ci0g
ICAgICAgICAgICAiaWQiOiAiZGF0YWJhc2VJZCIsCi0gICAgICAgICAgICAidHlwZSI6ICJpbnRl
Z2VyIiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgaWRlbnRpZmllciBvZiBE
YXRhYmFzZSBvYmplY3QuIgotICAgICAgICB9Ci0gICAgXQotfQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi11
bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtZGVjbGFyYXRpb24uanNvbiBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tdW5r
bm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLWRlY2xhcmF0aW9uLmpzb24KZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGQ2ODg3YTI3NDExLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLXVu
a25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1kZWNsYXJhdGlvbi5qc29uCisrKyAvZGV2L251
bGwKQEAgLTEsMTIgKzAsMCBAQAotWwotewotICAgICJkb21haW4iOiAiUnVudGltZSIsCi0gICAg
InR5cGVzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiUmVtb3RlT2JqZWN0SWQi
LAotICAgICAgICAgICAgInR5cGUiOiAiZHJhZ29uIiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlv
biI6ICJVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIuIgotICAgICAgICB9Ci0gICAgXQotfQotXQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtbWVtYmVyLmpz
b24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJp
Yy9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1tZW1iZXIuanNvbgpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjgxN2RiNTA0NGQuLjAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2Zh
aWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLW1lbWJlci5qc29uCisrKyAvZGV2
L251bGwKQEAgLTEsMTUgKzAsMCBAQAotWwotewotICAgICJkb21haW4iOiAiRmFudGFzeSIsCi0g
ICAgInR5cGVzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiRHJhZ29uRWdnIiwK
LSAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24i
OiAiQSBkcmFnb24gZWdnLiIsCi0gICAgICAgICAgICAicHJvcGVydGllcyI6IFsKLSAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogImNvbG9yIiwgIiRyZWYiOiAiQ29sb3IiIH0KLSAgICAgICAgICAg
IF0KLSAgICAgICAgfQotICAgIF0KLX0KLV0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2dlbmVyYXRlLWRvbWFpbnMtd2l0
aC1mZWF0dXJlLWd1YXJkcy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRz
Lmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3Y2Y4ZTU4MmY2Li4wMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJpYy9nZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgorKysgL2Rl
di9udWxsCkBAIC0xLDM2ICswLDAgQEAKLVsKLXsKLSAgICAiZG9tYWluIjogIk5ldHdvcmsxIiwK
LSAgICAiZmVhdHVyZUd1YXJkIjogIlBMQVRGT1JNKFdFQl9DT01NQU5EUykiLAotICAgICJjb21t
YW5kcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAibG9hZFJlc291cmNlIiwK
LSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBhIHJlc291cmNlIGluIHRoZSBjb250
ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGluc3BlY3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3JpZ2lu
IGNoZWNrcy4iCi0gICAgICAgIH0KLSAgICBdCi19LAotewotICAgICJkb21haW4iOiAiTmV0d29y
azIiLAotICAgICJmZWF0dXJlR3VhcmQiOiAiUExBVEZPUk0oV0VCX1RZUEVTKSIsCi0gICAgInR5
cGVzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiTmV0d29ya0Vycm9yIiwKLSAg
ICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCi0gICAgICAgICAgICAicHJvcGVydGllcyI6IFsK
LSAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm1lc3NhZ2UiLCAidHlwZSI6ICJzdHJpbmciLCAi
ZGVzY3JpcHRpb24iOiAiRXJyb3IgbWVzc2FnZS4iIH0sCi0gICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJjb2RlIiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBjb2Rl
LiIgfQotICAgICAgICAgICAgXQotICAgICAgICB9Ci0gICAgXQotfSwKLXsKLSAgICAiZG9tYWlu
IjogIk5ldHdvcmszIiwKLSAgICAiZmVhdHVyZUd1YXJkIjogIlBMQVRGT1JNKFdFQl9FVkVOVFMp
IiwKLSAgICAiZXZlbnRzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJyZXNv
dXJjZUxvYWRlZCIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQSByZXNvdXJjZSB3YXMg
bG9hZGVkLiIKLSAgICAgICAgfQotICAgIF0KLX0KLV0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL3NhbWUtdHlwZS1pZC1k
aWZmZXJlbnQtZG9tYWluLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZ2VuZXJpYy9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYmY0ZGZmNWNjYy4uMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMv
c2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDIy
ICswLDAgQEAKLVsKLXsKLSAgICAiZG9tYWluIjogIlJ1bnRpbWUiLAotICAgICJ0eXBlcyI6IFsK
LSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIlJlbW90ZU9iamVjdElkIiwKLSAgICAgICAg
ICAgICJ0eXBlIjogInN0cmluZyIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVl
IG9iamVjdCBpZGVudGlmaWVyLiIKLSAgICAgICAgfQotICAgIF0KLX0sCi17Ci0gICAgImRvbWFp
biI6ICJSdW50aW1lMiIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAi
aWQiOiAiUmVtb3RlT2JqZWN0SWQiLAotICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKLSAg
ICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIuIgotICAg
ICAgICB9Ci0gICAgXQotfQotXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0
ZXJzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJpYy9zaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMjBhMGMxNTUyNzUuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL3NoYWRvd2VkLW9w
dGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAot
ewotICAgICJkb21haW4iOiAiUnVudGltZSIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7Ci0g
ICAgICAgICAgICAiaWQiOiAiS2V5UGF0aCIsCi0gICAgICAgICAgICAidHlwZSI6ICJvYmplY3Qi
LAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIktleSBwYXRoLiIsCi0gICAgICAgICAgICAi
cHJvcGVydGllcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJu
YW1lIjogInR5cGUiLAotICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAotICAg
ICAgICAgICAgICAgICAgICAiZW51bSI6IFsibnVsbCIsICJzdHJpbmciLCAiYXJyYXkiXSwKLSAg
ICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIktleSBwYXRoIHR5cGUuIgotICAgICAg
ICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibmFt
ZSI6ICJzdHJpbmciLAotICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAotICAg
ICAgICAgICAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgICAgICAgICAgICAgICAi
ZGVzY3JpcHRpb24iOiAiU3RyaW5nIHZhbHVlLiIKLSAgICAgICAgICAgICAgICB9LAotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiYXJyYXkiLAotICAgICAg
ICAgICAgICAgICAgICAidHlwZSI6ICJhcnJheSIsCi0gICAgICAgICAgICAgICAgICAgICJvcHRp
b25hbCI6IHRydWUsCi0gICAgICAgICAgICAgICAgICAgICJpdGVtcyI6IHsgInR5cGUiOiAic3Ry
aW5nIiB9LAotICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQXJyYXkgdmFsdWUu
IgotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfQotICAgIF0KLX0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9nZW5lcmljL3Nob3VsZC1zdHJpcC1jb21tZW50cy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvc2hvdWxkLXN0cmlwLWNvbW1lbnRz
Lmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjZTFkY2ZjNjFjLi4wMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJpYy9zaG91bGQtc3RyaXAtY29tbWVudHMuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDUg
KzAsMCBAQAotewotICAgIC8qIGFib3ZlICovCi0gICAgLyogYmVmb3JlICovICJkb21haW4iIC8q
IGluICovIDogLyogaW4gKi8gIkNvbW1lbnQiIC8qIGFmdGVyICovCi0gICAgLyogYmVsb3cgKi8K
LX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9nZW5lcmljL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29u
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMv
dHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGNiYzlkNTM5NDc4Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy90eXBlLWRlY2xh
cmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDEw
ICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIlJ1bnRpbWUiLAotICAgICJ0eXBlcyI6IFsKLSAg
ICAgICAgewotICAgICAgICAgICAgImlkIjogIlJlbW90ZU9iamVjdElkIiwKLSAgICAgICAgICAg
ICJ0eXBlIjogImludGVnZXIiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBv
YmplY3QgaWRlbnRpZmllci4iCi0gICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy90eXBlLWRl
Y2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL3R5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29u
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZmIwOGJkOTQwYi4uMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVy
aWMvdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw1
MCArMCwwIEBACi1bCi17Ci0gICAgImRvbWFpbiI6ICJEZWJ1Z2dlciIsCi0gICAgInR5cGVzIjog
WwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiQnJlYWtwb2ludElkIiwKLSAgICAgICAg
ICAgICJ0eXBlIjogImludGVnZXIiCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAg
ICJpZCI6ICJSZWFzb24iLAotICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKLSAgICAgICAg
ICAgICJlbnVtIjogWyJEaWVkIiwgIkZhaW50ZWQiLCAiSHVuZ3J5Il0KLSAgICAgICAgfQotICAg
IF0KLX0sCi17Ci0gICAgImRvbWFpbiI6ICJSdW50aW1lIiwKLSAgICAidHlwZXMiOiBbCi0gICAg
ICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJPYmplY3RJZCIsCi0gICAgICAgICAgICAidHlwZSI6
ICJpbnRlZ2VyIgotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiTHVj
a3lOdW1iZXJzIiwKLSAgICAgICAgICAgICJ0eXBlIjogImFycmF5IiwKLSAgICAgICAgICAgICJp
dGVtcyI6IHsgInR5cGUiOiAiaW50ZWdlciIgfQotICAgICAgICB9LAotICAgICAgICB7Ci0gICAg
ICAgICAgICAiaWQiOiAiQmFieU5hbWVzIiwKLSAgICAgICAgICAgICJ0eXBlIjogImFycmF5IiwK
LSAgICAgICAgICAgICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9Ci0gICAgICAgIH0sCi0g
ICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJOZXdPYmplY3RzIiwKLSAgICAgICAgICAgICJ0
eXBlIjogImFycmF5IiwKLSAgICAgICAgICAgICJpdGVtcyI6IHsgIiRyZWYiOiAiT2JqZWN0SWQi
IH0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIk9sZE9iamVjdHMi
LAotICAgICAgICAgICAgInR5cGUiOiAiYXJyYXkiLAotICAgICAgICAgICAgIml0ZW1zIjogeyAi
JHJlZiI6ICJEZWJ1Z2dlci5CcmVha3BvaW50SWQiIH0KLSAgICAgICAgfSwKLSAgICAgICAgewot
ICAgICAgICAgICAgImlkIjogIlN0b3BSZWFzb25zIiwKLSAgICAgICAgICAgICJ0eXBlIjogImFy
cmF5IiwKLSAgICAgICAgICAgICJpdGVtcyI6IHsgIiRyZWYiOiAiRGVidWdnZXIuUmVhc29uIiB9
Ci0gICAgICAgIH0KLSAgICBdCi19Ci1dCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy90eXBlLWRlY2xhcmF0aW9uLWVudW0t
dHlwZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggOWYwYWVlOWM5MWIuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL3R5cGUtZGVjbGFyYXRp
b24tZW51bS10eXBlLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi17Ci0gICAg
ImRvbWFpbiI6ICJSdW50aW1lIiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAg
ICAgICJpZCI6ICJGYXJtQW5pbWFscyIsCi0gICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAot
ICAgICAgICAgICAgImVudW0iOiBbIlBpZ3MiLCAiQ293cyIsICJDYXRzIiwgIkhlbnMiXQotICAg
ICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiVHdvTGVnZ2VkQW5pbWFscyIs
Ci0gICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAotICAgICAgICAgICAgImVudW0iOiBbIkR1
Y2tzIiwgIkhlbnMiLCAiQ3Jvd3MiLCAiRmxhbWluZ29zIl0KLSAgICAgICAgfQotICAgIF0KLX0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9nZW5lcmljL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbiBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL3R5cGUtZGVjbGFyYXRp
b24tb2JqZWN0LXR5cGUuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmM0M2Mz
MzA5OTIuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9nZW5lcmljL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgor
KysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi1bCi17Ci0gICAgImRvbWFpbiI6ICJEYXRh
YmFzZSIsCi0gICAgImRlc2NyaXB0aW9uIjogIlRlc3QgdHlwZSBidWlsZGVyIGdlbmVyYXRpb24g
b2YgdmFyaW91cyBvYmplY3QgdHlwZXMuIiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAg
ICAgICAgICAgICJpZCI6ICJFcnJvciIsCi0gICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAot
ICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkRhdGFiYXNlIGVycm9yLiIsCi0gICAgICAgICAg
ICAicHJvcGVydGllcyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm1lc3NhZ2UiLCAi
dHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgbWVzc2FnZS4iIH0sCi0gICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJjb2RlIiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlw
dGlvbiI6ICJFcnJvciBjb2RlLiIgfQotICAgICAgICAgICAgXQotICAgICAgICB9LAotICAgICAg
ICB7Ci0gICAgICAgICAgICAiaWQiOiAiRXJyb3JMaXN0IiwKLSAgICAgICAgICAgICJ0eXBlIjog
ImFycmF5IiwKLSAgICAgICAgICAgICJpdGVtcyI6IHsgIiRyZWYiOiAiRXJyb3IiIH0KLSAgICAg
ICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIk1vdXNlQnV0dG9uIiwKLSAgICAg
ICAgICAgICJ0eXBlIjogInN0cmluZyIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRW51
bWVyYXRlcyBkaWZmZXJlbnQgbW91c2UgYnV0dG9ucyB0aGF0IGNhbiBiZSB1c2VkLiIsCi0gICAg
ICAgICAgICAiZW51bSI6IFsKLSAgICAgICAgICAgICAgICAiTm9uZSIsCi0gICAgICAgICAgICAg
ICAgIkxlZnQiLAotICAgICAgICAgICAgICAgICJNaWRkbGUiLAotICAgICAgICAgICAgICAgICJS
aWdodCIKLSAgICAgICAgICAgIF0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAg
ImlkIjogIk9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlIiwKLSAgICAgICAgICAgICJ0eXBlIjogIm9i
amVjdCIsCi0gICAgICAgICAgICAicHJvcGVydGllcyI6IFsKLSAgICAgICAgICAgICAgICB7ICJu
YW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAib3B0aW9uYWwiOiB0cnVlLCAi
aXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAiYnV0dG9ucyIsICJ0eXBlIjogImFycmF5IiwgIm9wdGlvbmFsIjogdHJ1ZSwgIml0ZW1zIjog
eyAiJHJlZiI6ICJNb3VzZUJ1dHRvbiIgfSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
ZGlyZWN0aW9uYWxpdHkiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsiTFRSIiwgIlJUTCJd
LCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIs
ICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7
ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6IHRydWUg
fSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIs
ICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxvYWQi
LCAidHlwZSI6ICJhbnkiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJlcnJvciIsICIkcmVmIjogIkVycm9yIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAiZXJyb3JMaXN0IiwgIiRyZWYiOiAiRXJyb3JMaXN0Iiwg
Im9wdGlvbmFsIjogdHJ1ZSB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0sCi0gICAgICAgIHsK
LSAgICAgICAgICAgICJpZCI6ICJQYXJhbWV0ZXJCdW5kbGUiLAotICAgICAgICAgICAgInR5cGUi
OiAib2JqZWN0IiwKLSAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwotICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgInR5
cGUiOiAic3RyaW5nIiB9IH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJidXR0b25zIiwg
InR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICIkcmVmIjogIk1vdXNlQnV0dG9uIiB9IH0sCi0g
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkaXJlY3Rpb25hbGl0eSIsICJ0eXBlIjogInN0cmlu
ZyIsICJlbnVtIjogWyJMVFIiLCAiUlRMIl0gfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjog
Im5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
dGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjog
ImVycm9yIiwgIiRyZWYiOiAiRXJyb3IiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJl
cnJvckxpc3QiLCAiJHJlZiI6ICJFcnJvckxpc3QiIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAg
fSwKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIk9iamVjdFdpdGhQcm9wZXJ0eU5hbWVD
b25mbGljdHMiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkNvbmZsaWN0ZWQgbmFtZXMg
bWF5IGNhdXNlIGdlbmVyYXRlZCBnZXR0ZXJzL3NldHRlcnMgdG8gY2xhc2ggd2l0aCBidWlsdC1p
biBJbnNwZWN0b3JPYmplY3QgbWV0aG9kcy4iLAotICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0
IiwKLSAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAiaW50ZWdlciIsICJ0eXBlIjogInN0cmluZyIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1l
IjogImFycmF5IiwgInR5cGUiOiAic3RyaW5nIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAic3RyaW5nIiwgInR5cGUiOiAic3RyaW5nIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAidmFsdWUiLCAidHlwZSI6ICJzdHJpbmciIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJvYmplY3QiLCAidHlwZSI6ICJzdHJpbmciIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfSwK
LSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIkR1bW15T2JqZWN0IiwKLSAgICAgICAgICAg
ICJkZXNjcmlwdGlvbiI6ICJBbiBvcGVuIG9iamVjdCB0aGF0IGRvZXNuJ3QgaGF2ZSBhbnkgcHJl
ZGVmaW5lZCBmaWVsZHMuIiwKLSAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIKLSAgICAgICAg
fQotICAgIF0KLX0sCi17Ci0gICAgImRvbWFpbiI6ICJUZXN0IiwKLSAgICAiZGVzY3JpcHRpb24i
OiAiVGVzdCB0aGUgZ2VuZXJhdGlvbiBvZiBzcGVjaWFsIGJlaGF2aW9ycyB0aGF0IG9ubHkgYXBw
bHkgdG8gc3BlY2lmaWMgY2xhc3Nlcy4iLAotICAgICJ0eXBlcyI6IFsKLSAgICAgICAgewotICAg
ICAgICAgICAgImlkIjogIlBhcmFtZXRlckJ1bmRsZSIsCi0gICAgICAgICAgICAidHlwZSI6ICJv
YmplY3QiLAotICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCi0gICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJkaXJlY3Rpb25hbGl0eSIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJMVFIi
LCAiUlRMIl0gfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImJ1dHRvbnMiLCAidHlwZSI6
ICJhcnJheSIsICJpdGVtcyI6IHsgIiRyZWYiOiAiRGF0YWJhc2UuTW91c2VCdXR0b24iIH0gfSwK
LSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXki
LCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAotICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciIH0sCi0gICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiIH0sCi0gICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiIH0sCi0gICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiB9LAotICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAiZXJyb3IiLCAiJHJlZiI6ICJEYXRhYmFzZS5FcnJvciIgfQotICAgICAgICAgICAgXQot
ICAgICAgICB9Ci0gICAgXQotfQotXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvdHlwZS1yZXF1aXJpbmctcnVudGltZS1j
YXN0cy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA4M2Q5NGJlODk3ZC4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvdHlwZS1yZXF1aXJp
bmctcnVudGltZS1jYXN0cy5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotWwot
ewotICAgICJkb21haW4iOiAiVGVzdCIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7Ci0gICAg
ICAgICAgICAiaWQiOiAiVHlwZU5lZWRpbmdDYXN0IiwKLSAgICAgICAgICAgICJ0eXBlIjogIm9i
amVjdCIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQSBkdW1teSB0eXBlIHRoYXQgcmVx
dWlyZXMgcnVudGltZSBjYXN0cywgYW5kIGZvcmNlcyBub24tcHJpbWl0aXZlIHJlZmVyZW5jZWQg
dHlwZXMgdG8gYWxzbyBlbWl0IHJ1bnRpbWUgY2FzdCBoZWxwZXJzLiIsCi0gICAgICAgICAgICAi
cHJvcGVydGllcyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInN0cmluZyIsICJ0eXBl
IjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJTdHJpbmcgbWVtYmVyLiIgfSwKLSAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogIm51bWJlciIsICJ0eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRp
b24iOiAiTnVtYmVyIG1lbWJlci4iIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJhbmlt
YWxzIiwgIiRyZWYiOiAiQ2FzdGVkQW5pbWFscyIsICJkZXNjcmlwdGlvbiI6ICJFbnVtIG1lbWJl
ci4iIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJpZCIsICIkcmVmIjogIkNhc3RlZE9i
amVjdElkIiwgImRlc2NyaXB0aW9uIjogIkFsaWFzZWQgbWVtYmVyLiIgfSwKLSAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInRyZWUiLCAiJHJlZiI6ICJSZWN1cnNpdmVPYmplY3QxIiwgImRlc2Ny
aXB0aW9uIjogIlJlY3Vyc2l2ZSBvYmplY3QgbWVtYmVyLiIgfQotICAgICAgICAgICAgXQotICAg
ICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiQ2FzdGVkT2JqZWN0SWQiLAot
ICAgICAgICAgICAgInR5cGUiOiAiaW50ZWdlciIKLSAgICAgICAgfSwKLSAgICAgICAgewotICAg
ICAgICAgICAgImlkIjogIlVuY2FzdGVkT2JqZWN0SWQiLAotICAgICAgICAgICAgInR5cGUiOiAi
aW50ZWdlciIKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIlVuY2Fz
dGVkQW5pbWFscyIsCi0gICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAotICAgICAgICAgICAg
ImVudW0iOiBbIlBpZ3MiLCAiQ293cyIsICJDYXRzIiwgIkhlbnMiXQotICAgICAgICB9LAotICAg
ICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiQ2FzdGVkQW5pbWFscyIsCi0gICAgICAgICAgICAi
dHlwZSI6ICJzdHJpbmciLAotICAgICAgICAgICAgImVudW0iOiBbIkR1Y2tzIiwgIkhlbnMiLCAi
Q3Jvd3MiLCAiRmxhbWluZ29zIl0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAg
ImlkIjogIlJlY3Vyc2l2ZU9iamVjdDEiLAotICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwK
LSAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
b2JqIiwgIiRyZWYiOiAiUmVjdXJzaXZlT2JqZWN0MiIsICJvcHRpb25hbCI6IHRydWUgfQotICAg
ICAgICAgICAgXQotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiUmVj
dXJzaXZlT2JqZWN0MiIsCi0gICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAotICAgICAgICAg
ICAgInByb3BlcnRpZXMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJvYmoiLCAiJHJl
ZiI6ICJSZWN1cnNpdmVPYmplY3QxIiwgIm9wdGlvbmFsIjogdHJ1ZSB9Ci0gICAgICAgICAgICBd
Ci0gICAgICAgIH0KLSAgICBdCi19Ci1dCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy90eXBlLXdpdGgtb3Blbi1wYXJhbWV0
ZXJzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJpYy90eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDk5YjAyMjBkMzEyLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy90eXBlLXdpdGgtb3Blbi1w
YXJhbWV0ZXJzLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi17Ci0gICAgImRv
bWFpbiI6ICJUZXN0IiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJp
ZCI6ICJOb09wZW5QYXJhbWV0ZXJzIiwKLSAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCi0g
ICAgICAgICAgICAicHJvcGVydGllcyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm9u
ZSIsICJ0eXBlIjogIm51bWJlciIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInR3byIs
ICJ0eXBlIjogIm51bWJlciIgfQotICAgICAgICAgICAgXQotICAgICAgICB9LAotICAgICAgICB7
Ci0gICAgICAgICAgICAiaWQiOiAiT3BlblBhcmFtZXRlcnMiLAotICAgICAgICAgICAgInR5cGUi
OiAib2JqZWN0IiwKLSAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwotICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAiYWxwaGEiLCAidHlwZSI6ICJudW1iZXIiIH0sCi0gICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJiZXRhIiwgInR5cGUiOiAibnVtYmVyIiB9Ci0gICAgICAgICAgICBdCi0gICAg
ICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy92ZXJzaW9uLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy92ZXJzaW9uLmpzb24KZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwN2E1ZDkwMTc2Li4wMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy92ZXJz
aW9uLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLXsiZG9tYWlucyI6Wwotewot
ICAgICJkb21haW4iOiAiVmVyc2lvbkRvbWFpbiIsCi0gICAgInZlcnNpb24iOiA0MgotfQotXX0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9pb3MvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbiBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9pb3MvZGVmaW5pdGlvbnMtd2l0aC1tYWMt
cGxhdGZvcm0uanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODE3ZjEzNWVlNWEu
LjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9pb3MvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgorKysgL2Rldi9u
dWxsCkBAIC0xLDI4ICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIk5ldHdvcmsiLAotICAgICJ0
eXBlcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIk5ldHdvcmtFcnJvciIsCi0g
ICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAotICAgICAgICAgICAgInBsYXRmb3JtIjogIm1h
Y29zIiwKLSAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwotICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAibWVzc2FnZSIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBt
ZXNzYWdlLiIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvZGUiLCAidHlwZSI6ICJp
bnRlZ2VyIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIGNvZGUuIiB9Ci0gICAgICAgICAgICBdCi0g
ICAgICAgIH0KLSAgICBdLAotICAgICJjb21tYW5kcyI6IFsKLSAgICAgICAgewotICAgICAgICAg
ICAgIm5hbWUiOiAibG9hZFJlc291cmNlIiwKLSAgICAgICAgICAgICJwbGF0Zm9ybSI6ICJtYWNv
cyIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9hZHMgYSByZXNvdXJjZSBpbiB0aGUg
Y29udGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFnZSB3aXRob3V0IGNyb3NzIG9y
aWdpbiBjaGVja3MuIgotICAgICAgICB9Ci0gICAgXSwKLSAgICAiZXZlbnRzIjogWwotICAgICAg
ICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJyZXNvdXJjZUxvYWRlZCIsCi0gICAgICAgICAgICAi
cGxhdGZvcm0iOiAibWFjb3MiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkEgcmVzb3Vy
Y2Ugd2FzIGxvYWRlZC4iCi0gICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvaW9zL2V4cGVjdGVkL2RlZmlu
aXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2lvcy9leHBlY3RlZC9kZWZpbml0aW9ucy13aXRo
LW1hYy1wbGF0Zm9ybS5qc29uLXJlc3VsdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ZDRjMGZlM2ZlM2MuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9pb3MvZXhwZWN0ZWQvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxh
dGZvcm0uanNvbi1yZXN1bHQKKysrIC9kZXYvbnVsbApAQCAtMSw4NzAgKzAsMCBAQAotIyMjIEJl
Z2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLSMjIyBFbmQgRmlsZTogSW5zcGVj
dG9yQmFja2VuZENvbW1hbmRzLmpzCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZp
bml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgot
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0j
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLQotbmFt
ZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsK
LXB1YmxpYzoKLSAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlz
cGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRp
c3BhdGNoZXIpOyB9Ci0gICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkg
Y29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQotcHJpdmF0ZToKLSAg
ICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Ci19OwotCi0K
LQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hl
cnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgt
bWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0j
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0K
LXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVz
Lmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
Ci0jaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgotI2VuZGlmCi0K
LW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0K
LSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAi
VGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1j
bGFzcyBGcm9udGVuZFJvdXRlcjsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5k
IEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RG
cm9udGVuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRl
c3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQot
bmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMg
RW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sT2JqZWN0cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
ZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9u
cy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLW5hbWVzcGFjZSBQcm90b2NvbCB7
Ci0KLQotCi0KLQotCi0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0KLSMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLQotI2luY2x1ZGUgPHd0Zi9PcHRp
b25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3Bl
Y3RvciB7Ci0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90
b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xPYmplY3RzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERp
c3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9u
cy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLQotCi1u
YW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcu
aCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVk
ZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotCi1uYW1lc3BhY2UgSW5z
cGVjdG9yIHsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xDb25maWd1cmF0aW9uLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBk
ZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wu
aD4KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNl
IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAotQGVuZAotCi0KLSMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0
aW9uLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW1wb3J0ICJUZXN0
UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0Fs
dGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdt
ZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJ
bnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCi17
Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKLX0KLQot
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JD
b250cm9sbGVyKiljb250cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBp
ZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIpOwot
ICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAo
dm9pZClkZWFsbG9jCi17Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi1AZW5kCi0KLQotIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJ
bnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNp
bXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0K
LQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9u
Lmg+Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KLQot
Ci0KLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sUGxhdGZvcm0pIHsK
LSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbCwKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdl
bmVyaWMsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1JT1MsCi0gICAgVGVzdFByb3RvY29sUGxh
dGZvcm1NYWNPUywKLX07Ci0KLQotCi0KLQotCi0KLQotCi0KLSNpbXBvcnQgPFdlYkluc3BlY3Rv
ci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4KLQotIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2wuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwu
aAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFj
LXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2Jq
ZWN0UHJpdmF0ZS5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0
b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi0KLQotCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBv
cnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KLQotbmFtZXNw
YWNlIEluc3BlY3RvciB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KLU9wdGlv
bmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUp
OwotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sUGxhdGZvcm0g
dmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0
Zm9ybUFsbDoKLSAgICAgICAgcmV0dXJuICJhbGwiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQ
bGF0Zm9ybUdlbmVyaWM6Ci0gICAgICAgIHJldHVybiAiZ2VuZXJpYyJfczsKLSAgICBjYXNlIFRl
c3RQcm90b2NvbFBsYXRmb3JtSU9TOgotICAgICAgICByZXR1cm4gImlvcyJfczsKLSAgICBjYXNl
IFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M6Ci0gICAgICAgIHJldHVybiAibWFjb3MiX3M7Ci0g
ICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sUGxhdGZv
cm0+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2
YWx1ZSA9PSAiYWxsIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOwot
ICAgIGlmICh2YWx1ZSA9PSAiZ2VuZXJpYyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQ
bGF0Zm9ybUdlbmVyaWM7Ci0gICAgaWYgKHZhbHVlID09ICJpb3MiKQotICAgICAgICByZXR1cm4g
VGVzdFByb3RvY29sUGxhdGZvcm1JT1M7Ci0gICAgaWYgKHZhbHVlID09ICJtYWNvcyIpCi0gICAg
ICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOwotICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBk
ZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5
cGVQYXJzZXIuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQ
cml2YXRlLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotCi0KLQotCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sVHlwZXMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgi
Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8V2Vi
SW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLSNpbXBvcnQgPHd0Zi9B
c3NlcnRpb25zLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yOwotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9t
YWMvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9tYWMvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxh
dGZvcm0uanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODE3ZjEzNWVlNWEuLjAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9tYWMvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgorKysgL2Rldi9udWxs
CkBAIC0xLDI4ICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIk5ldHdvcmsiLAotICAgICJ0eXBl
cyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIk5ldHdvcmtFcnJvciIsCi0gICAg
ICAgICAgICAidHlwZSI6ICJvYmplY3QiLAotICAgICAgICAgICAgInBsYXRmb3JtIjogIm1hY29z
IiwKLSAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAibWVzc2FnZSIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBtZXNz
YWdlLiIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvZGUiLCAidHlwZSI6ICJpbnRl
Z2VyIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIGNvZGUuIiB9Ci0gICAgICAgICAgICBdCi0gICAg
ICAgIH0KLSAgICBdLAotICAgICJjb21tYW5kcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAg
Im5hbWUiOiAibG9hZFJlc291cmNlIiwKLSAgICAgICAgICAgICJwbGF0Zm9ybSI6ICJtYWNvcyIs
Ci0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9hZHMgYSByZXNvdXJjZSBpbiB0aGUgY29u
dGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFnZSB3aXRob3V0IGNyb3NzIG9yaWdp
biBjaGVja3MuIgotICAgICAgICB9Ci0gICAgXSwKLSAgICAiZXZlbnRzIjogWwotICAgICAgICB7
Ci0gICAgICAgICAgICAibmFtZSI6ICJyZXNvdXJjZUxvYWRlZCIsCi0gICAgICAgICAgICAicGxh
dGZvcm0iOiAibWFjb3MiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkEgcmVzb3VyY2Ug
d2FzIGxvYWRlZC4iCi0gICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvbWFjL2V4cGVjdGVkL2RlZmluaXRp
b25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL21hYy9leHBlY3RlZC9kZWZpbml0aW9ucy13aXRoLW1h
Yy1wbGF0Zm9ybS5qc29uLXJlc3VsdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzZl
NjhmNGE5YWUuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9tYWMvZXhwZWN0ZWQvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZv
cm0uanNvbi1yZXN1bHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMjE3ICswLDAgQEAKLSMjIyBCZWdp
biBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLS8vIE5ldHdvcmsKLUluc3BlY3Rv
ckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIk5ldHdvcmsiLCBudWxsKTsKLUluc3BlY3RvckJhY2tl
bmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrLmxvYWRSZXNvdXJjZSIsIG51bGwsIFtdLCBbXSk7
Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnQoIk5ldHdvcmsucmVzb3VyY2VMb2FkZWQi
LCBudWxsLCBbXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyTmV0d29ya0Rpc3BhdGNoZXIg
PSBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRGlzcGF0Y2hlci5iaW5kKEluc3BlY3RvckJhY2tl
bmQsICJOZXR3b3JrIik7Ci1JbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJOZXR3b3Jr
IiwgbnVsbCk7Ci0jIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0u
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21h
IG9uY2UKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi0j
aW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFz
cyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNr
ZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBt
X2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQotICAgIEJhY2tlbmRE
aXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERp
c3BhdGNoZXIuZ2V0KCk7IH0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVy
PiBtX2JhY2tlbmREaXNwYXRjaGVyOwotfTsKLQotCi1jbGFzcyBBbHRlcm5hdGVOZXR3b3JrQmFj
a2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVi
bGljOgotICAgIHZpcnR1YWwgfkFsdGVybmF0ZU5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcigpIHsg
fQotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UobG9uZyBjYWxsSWQpID0gMDsKLX07Ci0K
LX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5k
RGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5o
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMt
cGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdHlw
ZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKLWNsYXNzIEFsdGVybmF0ZU5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjsK
LSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQotY2xh
c3MgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7Ci1wdWJsaWM6Ci0gICAgdmlydHVh
bCB2b2lkIGxvYWRSZXNvdXJjZShFcnJvclN0cmluZyYpID0gMDsKLXByb3RlY3RlZDoKLSAgICB2
aXJ0dWFsIH5OZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7Ci19OwotCi1jbGFzcyBO
ZXR3b3JrQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2Vu
ZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8TmV0d29ya0JhY2tlbmREaXNw
YXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBOZXR3b3JrQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyKik7Ci0gICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3Ry
aW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkgZmluYWw7Ci1wcml2YXRl
OgotICAgIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmIHBhcmFtZXRlcnMpOwotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQotcHVibGljOgotICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0Y2hlcihBbHRlcm5h
dGVOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRl
cm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQotcHJpdmF0ZToKLSAgICBB
bHRlcm5hdGVOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIqIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciB7
IG51bGxwdHIgfTsKLSNlbmRpZgotcHJpdmF0ZToKLSAgICBOZXR3b3JrQmFja2VuZERpc3BhdGNo
ZXIoQmFja2VuZERpc3BhdGNoZXImLCBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7
Ci0gICAgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2VudCB7IG51bGxwdHIg
fTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0QmFj
a2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hl
cnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0
aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0
ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRl
c3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2lmIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQot
TmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6fk5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIoKSB7IH0KLQotUmVmPE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcj4gTmV0d29ya0Jh
Y2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRj
aGVyLCBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKLXsKLSAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNo
ZXIsIGFnZW50KSk7Ci19Ci0KLU5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjo6TmV0d29ya0JhY2tl
bmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgTmV0d29y
a0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCi0gICAgOiBTdXBwbGVtZW50YWxCYWNr
ZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKLSAgICAsIG1fYWdlbnQoYWdlbnQpCi17
Ci0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKCJO
ZXR3b3JrIl9zLCB0aGlzKTsKLX0KLQotdm9pZCBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI6OmRp
c3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9i
amVjdD4mJiBtZXNzYWdlKQotewotICAgIFJlZjxOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI+IHBy
b3RlY3QoKnRoaXMpOwotCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVyczsKLSAg
ICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFyYW1ldGVycyk7Ci0KLSAgICBpZiAo
bWV0aG9kID09ICJsb2FkUmVzb3VyY2UiKQotICAgICAgICBsb2FkUmVzb3VyY2UocmVxdWVzdElk
LCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3Bh
dGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZv
dW5kLCAiJ05ldHdvcmsuIiArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKLX0KLQotdm9p
ZCBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZShsb25nIHJlcXVlc3RJZCwg
UmVmUHRyPEpTT046Ok9iamVjdD4mJikKLXsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKLSAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAg
IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlKHJlcXVlc3RJZCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJl
ZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgbV9h
Z2VudC0+bG9hZFJlc291cmNlKGVycm9yKTsKLQotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0g
ICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1v
dmUocmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdU
Rk1vdmUoZXJyb3IpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQg
RmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RG
cm9udGVuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBk
ZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3Rv
Y29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBGcm9u
dGVuZFJvdXRlcjsKLQotY2xhc3MgTmV0d29ya0Zyb250ZW5kRGlzcGF0Y2hlciB7Ci0gICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgTmV0d29ya0Zyb250ZW5kRGlzcGF0
Y2hlcihGcm9udGVuZFJvdXRlciYgZnJvbnRlbmRSb3V0ZXIpIDogbV9mcm9udGVuZFJvdXRlcihm
cm9udGVuZFJvdXRlcikgeyB9Ci0gICAgdm9pZCByZXNvdXJjZUxvYWRlZCgpOwotcHJpdmF0ZToK
LSAgICBGcm9udGVuZFJvdXRlciYgbV9mcm9udGVuZFJvdXRlcjsKLX07Ci0KLX0gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi12b2lkIE5ldHdv
cmtGcm9udGVuZERpc3BhdGNoZXI6OnJlc291cmNlTG9hZGVkKCkKLXsKLSAgICBSZWY8SlNPTjo6
T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1l
c3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiTmV0d29yay5yZXNvdXJjZUxvYWRlZCJfcyk7
Ci0KLSAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3Ry
aW5nKCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBU
ZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bE9iamVjdHMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25z
LXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFt
ZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotLy8g
Rm9yd2FyZCBkZWNsYXJhdGlvbnMuCi1uYW1lc3BhY2UgTmV0d29yayB7Ci1jbGFzcyBOZXR3b3Jr
RXJyb3I7Ci19IC8vIE5ldHdvcmsKLS8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KLQot
Ci0KLQotbmFtZXNwYWNlIE5ldHdvcmsgewotY2xhc3MgTmV0d29ya0Vycm9yIDogcHVibGljIEpT
T046Ok9iamVjdEJhc2UgewotcHVibGljOgotICAgIGVudW0gewotICAgICAgICBOb0ZpZWxkc1Nl
dCA9IDAsCi0gICAgICAgIE1lc3NhZ2VTZXQgPSAxIDw8IDAsCi0gICAgICAgIENvZGVTZXQgPSAx
IDw8IDEsCi0gICAgICAgIEFsbEZpZWxkc1NldCA9IChNZXNzYWdlU2V0IHwgQ29kZVNldCkKLSAg
ICB9OwotCi0gICAgdGVtcGxhdGU8aW50IFNUQVRFPgotICAgIGNsYXNzIEJ1aWxkZXIgewotICAg
IHByaXZhdGU6Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVzdWx0OwotCi0gICAg
ICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVy
PFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXIoUmVm
PC8qTmV0d29ya0Vycm9yKi9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQotICAgICAgICAgICAgOiBt
X3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRf
c3RhdGUpOwotICAgICAgICB9Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBOZXR3b3JrRXJyb3I7Ci0g
ICAgcHVibGljOgotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVz
c2FnZShjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxF
X0FTU0VSVCghKFNUQVRFICYgTWVzc2FnZVNldCksIHByb3BlcnR5X21lc3NhZ2VfYWxyZWFkeV9z
ZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibWVzc2FnZSJfcywgdmFsdWUp
OwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNZXNzYWdlU2V0PigpOwotICAgICAgICB9
Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvZGVTZXQ+JiBzZXRDb2RlKGludCB2YWx1ZSkK
LSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENvZGVTZXQp
LCBwcm9wZXJ0eV9jb2RlX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJ
bnRlZ2VyKCJjb2RlIl9zLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENv
ZGVTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBSZWY8TmV0d29ya0Vycm9yPiByZWxlYXNl
KCkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmll
bGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KHNpemVvZihOZXR3b3JrRXJyb3IpID09IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5ub3RfY2Fz
dCk7Ci0KLSAgICAgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25SZXN1bHQgPSBtX3Jlc3Vs
dC5yZWxlYXNlTm9uTnVsbCgpOwotICAgICAgICAgICAgYXV0byByZXN1bHQgPSBXVEZNb3ZlKCpy
ZWludGVycHJldF9jYXN0PFJlZjxOZXR3b3JrRXJyb3I+Kj4oJmpzb25SZXN1bHQpKTsKLSAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgLyoKLSAgICAg
KiBTeW50aGV0aWMgY29uc3RydWN0b3I6Ci0gICAgICogUmVmPE5ldHdvcmtFcnJvcj4gcmVzdWx0
ID0gTmV0d29ya0Vycm9yOjpjcmVhdGUoKQotICAgICAqICAgICAuc2V0TWVzc2FnZSguLi4pCi0g
ICAgICogICAgIC5zZXRDb2RlKC4uLikKLSAgICAgKiAgICAgLnJlbGVhc2UoKTsKLSAgICAgKi8K
LSAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKLSAg
ICB9Ci19OwotCi19IC8vIE5ldHdvcmsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0K
LX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmpl
Y3RzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0u
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotCi0jaW5jbHVk
ZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1l
c3BhY2UgSW5zcGVjdG9yIHsKLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLX0gLy8gbmFt
ZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIu
aD4KLQotQHByb3RvY29sIFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5IYW5kbGVyOwotCi1uYW1l
c3BhY2UgSW5zcGVjdG9yIHsKLQotCi1jbGFzcyBPYmpDSW5zcGVjdG9yTmV0d29ya0JhY2tlbmRE
aXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZU5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hl
ciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgT2JqQ0luc3Bl
Y3Rvck5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWlu
SGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQotICAgIHZvaWQgbG9h
ZFJlc291cmNlKGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKLXByaXZhdGU6Ci0gICAgUmV0YWluUHRy
PGlkPFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKLX07Ci0K
LX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJh
Y2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5k
RGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0
aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29s
QmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5o
IgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2luY2x1ZGUgPHd0
Zi9KU09OVmFsdWVzLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi12b2lkIE9iakNJbnNw
ZWN0b3JOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZShsb25nIHJlcXVlc3RJ
ZCkKLXsKLSAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Io
bG9hZFJlc291cmNlV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0gICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBC
YWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yay5sb2FkUmVzb3VyY2Un
IHdhcyBub3QgZm91bmQiX3MpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVu
ZGluZ0Vycm9ycygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWQgZXJyb3JDYWxs
YmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCkt
PnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVy
RXJyb3IsIGVycm9yKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdF
cnJvcnMoKTsKLSAgICB9OwotCi0gICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAgICAgICAg
YmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKSwgZmFsc2UpOwotICAgIH07Ci0KLSAgICBbbV9kZWxlZ2F0ZSBsb2FkUmVzb3Vy
Y2VXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNz
Q2FsbGJhY2tdOwotfQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFBy
b3RvY29sLmg+Ci0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGlu
dGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKLUBwcm9wZXJ0eSAo
bm9uYXRvbWljLCByZXRhaW4sIHNldHRlcj1zZXROZXR3b3JrSGFuZGxlcjopIGlkPFRlc3RQcm90
b2NvbE5ldHdvcmtEb21haW5IYW5kbGVyPiBuZXR3b3JrSGFuZGxlcjsKLUBwcm9wZXJ0eSAobm9u
YXRvbWljLCByZWFkb25seSkgVGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkV2ZW50RGlzcGF0Y2hl
ciAqbmV0d29ya0V2ZW50RGlzcGF0Y2hlcjsKLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24uaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29u
ZmlndXJhdGlvbi5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRp
b25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgotCi0j
aW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFj
a2VuZERpc3BhdGNoZXJzLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNw
YXRjaGFibGVBZ2VudC5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNw
ZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwot
Ci1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgotewotICAgIEF1Z21l
bnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci0gICAgaWQ8VGVzdFByb3Rv
Y29sTmV0d29ya0RvbWFpbkhhbmRsZXI+IF9uZXR3b3JrSGFuZGxlcjsKLSAgICBUZXN0UHJvdG9j
b2xOZXR3b3JrRG9tYWluRXZlbnREaXNwYXRjaGVyICpfbmV0d29ya0V2ZW50RGlzcGF0Y2hlcjsK
LX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNw
ZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsK
LSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xs
ZXIpOwotICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1cm4gc2VsZjsKLX0K
LQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgW19uZXR3b3JrSGFuZGxlciByZWxlYXNlXTsKLSAg
ICBbX25ldHdvcmtFdmVudERpc3BhdGNoZXIgcmVsZWFzZV07Ci0gICAgW3N1cGVyIGRlYWxsb2Nd
OwotfQotCi0tICh2b2lkKXNldE5ldHdvcmtIYW5kbGVyOihpZDxUZXN0UHJvdG9jb2xOZXR3b3Jr
RG9tYWluSGFuZGxlcj4paGFuZGxlcgotewotICAgIGlmIChoYW5kbGVyID09IF9uZXR3b3JrSGFu
ZGxlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgW19uZXR3b3JrSGFuZGxlciByZWxlYXNlXTsK
LSAgICBfbmV0d29ya0hhbmRsZXIgPSBbaGFuZGxlciByZXRhaW5dOwotCi0gICAgYXV0byBhbHRl
cm5hdGVEaXNwYXRjaGVyID0gbWFrZVVuaXF1ZTxPYmpDSW5zcGVjdG9yTmV0d29ya0JhY2tlbmRE
aXNwYXRjaGVyPihoYW5kbGVyKTsKLSAgICBhdXRvIGFsdGVybmF0ZUFnZW50ID0gbWFrZVVuaXF1
ZTxBbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudDxOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIsIEFs
dGVybmF0ZU5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcj4+KCJOZXR3b3JrIl9zLCAqX2NvbnRyb2xs
ZXIsIFdURk1vdmUoYWx0ZXJuYXRlRGlzcGF0Y2hlcikpOwotICAgIF9jb250cm9sbGVyLT5hcHBl
bmRFeHRyYUFnZW50KFdURk1vdmUoYWx0ZXJuYXRlQWdlbnQpKTsKLX0KLQotLSAoaWQ8VGVzdFBy
b3RvY29sTmV0d29ya0RvbWFpbkhhbmRsZXI+KW5ldHdvcmtIYW5kbGVyCi17Ci0gICAgcmV0dXJu
IF9uZXR3b3JrSGFuZGxlcjsKLX0KLQotLSAoVGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkV2ZW50
RGlzcGF0Y2hlciAqKW5ldHdvcmtFdmVudERpc3BhdGNoZXIKLXsKLSAgICBpZiAoIV9uZXR3b3Jr
RXZlbnREaXNwYXRjaGVyKQotICAgICAgICBfbmV0d29ya0V2ZW50RGlzcGF0Y2hlciA9IFtbVGVz
dFByb3RvY29sTmV0d29ya0RvbWFpbkV2ZW50RGlzcGF0Y2hlciBhbGxvY10gaW5pdFdpdGhDb250
cm9sbGVyOl9jb250cm9sbGVyXTsKLSAgICByZXR1cm4gX25ldHdvcmtFdmVudERpc3BhdGNoZXI7
Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24u
bW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0
Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNp
bXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFt
ZXNwYWNlIEluc3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbE5ldHdvcmtE
b21haW5FdmVudERpc3BhdGNoZXIKLXsKLSAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xs
ZXIqIF9jb250cm9sbGVyOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVy
OihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBzZWxm
ID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAg
ICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAg
IHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKXJlc291cmNlTG9hZGVkCi17Ci0gICAgY29uc3Qg
RnJvbnRlbmRSb3V0ZXImIHJvdXRlciA9IF9jb250cm9sbGVyLT5mcm9udGVuZFJvdXRlcigpOwot
Ci0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIk5ldHdvcmsucmVz
b3VyY2VMb2FkZWQiX3MpOwotICAgIHJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNP
TlN0cmluZygpKTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZl
bnREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9y
bS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBv
cnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJ
UHJvdG9jb2xKU09OT2JqZWN0Lmg+Ci0KLQotQGNsYXNzIFRlc3RQcm90b2NvbE5ldHdvcmtFcnJv
cjsKLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sUGxhdGZvcm0pIHsK
LSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbCwKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdl
bmVyaWMsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1JT1MsCi0gICAgVGVzdFByb3RvY29sUGxh
dGZvcm1NYWNPUywKLX07Ci0KLQotCi0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZh
dWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xOZXR3b3JrRXJyb3IgOiBSV0lQcm90b2Nv
bEpTT05PYmplY3QKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFy
eTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkOwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJv
dG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7Ci0tIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZTooaW50KWNv
ZGU7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcg
Km1lc3NhZ2U7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBp
bnQgY29kZTsKLUBlbmQKLQotQHByb3RvY29sIFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5IYW5k
bGVyIDxOU09iamVjdD4KLUBvcHRpb25hbAotLSAodm9pZClsb2FkUmVzb3VyY2VXaXRoRXJyb3JD
YWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0Nh
bGxiYWNrOih2b2lkKF4pKHZvaWQpKXN1Y2Nlc3NDYWxsYmFjazsKLUBlbmQKLQotX19hdHRyaWJ1
dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbE5l
dHdvcmtEb21haW5FdmVudERpc3BhdGNoZXIgOiBOU09iamVjdAotLSAodm9pZClyZXNvdXJjZUxv
YWRlZDsKLUBlbmQKLQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENv
bXBhdGliaWxpdHlPYmplY3RzLmg+Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKLQot
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90
b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKLSNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2lt
cG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xOZXR3b3Jr
RG9tYWluRXZlbnREaXNwYXRjaGVyIChQcml2YXRlKQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
Q29udHJvbGxlcjooSW5zcGVjdG9yOjpBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNv
bnRyb2xsZXI7Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5o
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3Jt
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9y
dCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJh
eUNvbnZlcnNpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBPYmpDRW51bVR5cGU+Ci1PcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0
cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3Ry
aW5nKFRlc3RQcm90b2NvbFBsYXRmb3JtIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewot
ICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1BbGw6Ci0gICAgICAgIHJldHVybiAiYWxsIl9z
OwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOgotICAgICAgICByZXR1cm4g
ImdlbmVyaWMiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzoKLSAgICAgICAg
cmV0dXJuICJpb3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOgotICAg
ICAgICByZXR1cm4gIm1hY29zIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9w
dGlvbmFsPFRlc3RQcm90b2NvbFBsYXRmb3JtPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gImFsbCIpCi0gICAgICAgIHJldHVybiBU
ZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDsKLSAgICBpZiAodmFsdWUgPT0gImdlbmVyaWMiKQotICAg
ICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOwotICAgIGlmICh2YWx1ZSA9
PSAiaW9zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOwotICAgIGlm
ICh2YWx1ZSA9PSAibWFjb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1N
YWNPUzsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi0KLQotfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgK
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3Jt
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9y
dCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2Nv
bC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgotI2ltcG9ydCA8V2ViSW5z
cGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLQotdXNpbmcgbmFtZXNwYWNl
IEluc3BlY3RvcjsKLQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKE5l
dHdvcmtEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlTmV0d29ya0Vycm9yOihUZXN0UHJvdG9jb2xO
ZXR3b3JrRXJyb3IgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0KLUBlbmQK
LQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoTmV0d29ya0Rv
bWFpbikKLQotKyAodm9pZClfcGFyc2VOZXR3b3JrRXJyb3I6KFRlc3RQcm90b2NvbE5ldHdvcmtF
cnJvciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOwotICAg
ICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sTmV0d29ya0Vycm9yIGFsbG9jXSBpbml0V2l0aFBh
eWxvYWQ6cGF5bG9hZF07Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMu
bW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1h
Yy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29s
SlNPTk9iamVjdFByaXZhdGUuaD4KLSNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW1wb3J0
IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLUBp
bXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xOZXR3b3JrRXJyb3IKLQotLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICop
cGF5bG9hZAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1
cm4gbmlsOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXls
b2FkW0AibWVzc2FnZSJdLCBAIm1lc3NhZ2UiKTsKLSAgICBzZWxmLm1lc3NhZ2UgPSBwYXlsb2Fk
W0AibWVzc2FnZSJdOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJU
WShwYXlsb2FkW0AiY29kZSJdLCBAImNvZGUiKTsKLSAgICBzZWxmLmNvZGUgPSBbcGF5bG9hZFtA
ImNvZGUiXSBpbnRlZ2VyVmFsdWVdOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0tIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopb2Jq
ZWN0Ci17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEpTT05PYmplY3Q6W29iamVj
dCB0b0pTT05PYmplY3RdLmdldCgpXSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICByZXR1
cm4gc2VsZjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTWVzc2FnZTooTlNTdHJpbmcg
KiltZXNzYWdlIGNvZGU6KGludCljb2RlCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0
XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJ
UkVEX1BST1BFUlRZKG1lc3NhZ2UsIEAibWVzc2FnZSIpOwotCi0gICAgc2VsZi5tZXNzYWdlID0g
bWVzc2FnZTsKLSAgICBzZWxmLmNvZGUgPSBjb2RlOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0K
LS0gKHZvaWQpc2V0TWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlCi17Ci0gICAgW3N1cGVyIHNl
dFN0cmluZzptZXNzYWdlIGZvcktleTpAIm1lc3NhZ2UiXTsKLX0KLQotLSAoTlNTdHJpbmcgKilt
ZXNzYWdlCi17Ci0gICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJtZXNzYWdlIl07Ci19
Ci0KLS0gKHZvaWQpc2V0Q29kZTooaW50KWNvZGUKLXsKLSAgICBbc3VwZXIgc2V0SW50ZWdlcjpj
b2RlIGZvcktleTpAImNvZGUiXTsKLX0KLQotLSAoaW50KWNvZGUKLXsKLSAgICByZXR1cm4gW3N1
cGVyIGludGVnZXJGb3JLZXk6QCJjb2RlIl07Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNv
biBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9zYW1lLXR5
cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwLi4zYmY0ZGZmNWNjYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRv
bWFpbi5qc29uCkBAIC0wLDAgKzEsMjIgQEAKK1sKK3sKKyAgICAiZG9tYWluIjogIlJ1bnRpbWUi
LAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlJlbW90ZU9i
amVjdElkIiwKKyAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAiZGVz
Y3JpcHRpb24iOiAiVW5pcXVlIG9iamVjdCBpZGVudGlmaWVyLiIKKyAgICAgICAgfQorICAgIF0K
K30sCit7CisgICAgImRvbWFpbiI6ICJSdW50aW1lMiIsCisgICAgInR5cGVzIjogWworICAgICAg
ICB7CisgICAgICAgICAgICAiaWQiOiAiUmVtb3RlT2JqZWN0SWQiLAorICAgICAgICAgICAgInR5
cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgb2JqZWN0
IGlkZW50aWZpZXIuIgorICAgICAgICB9CisgICAgXQorfQorXQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3NoYWRvd2VkLW9wdGlvbmFs
LXR5cGUtc2V0dGVycy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yMGEwYzE1NTI3NQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9zaGFkb3dl
ZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgpAQCAtMCwwICsxLDMxIEBACit7CisgICAgImRv
bWFpbiI6ICJSdW50aW1lIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAg
ICJpZCI6ICJLZXlQYXRoIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAg
ICAgICAiZGVzY3JpcHRpb24iOiAiS2V5IHBhdGguIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVz
IjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAidHlw
ZSIsCisgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAg
ICAgICAgICJlbnVtIjogWyJudWxsIiwgInN0cmluZyIsICJhcnJheSJdLAorICAgICAgICAgICAg
ICAgICAgICAiZGVzY3JpcHRpb24iOiAiS2V5IHBhdGggdHlwZS4iCisgICAgICAgICAgICAgICAg
fSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJuYW1lIjogInN0cmlu
ZyIsCisgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAg
ICAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlv
biI6ICJTdHJpbmcgdmFsdWUuIgorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJhcnJheSIsCisgICAgICAgICAgICAgICAg
ICAgICJ0eXBlIjogImFycmF5IiwKKyAgICAgICAgICAgICAgICAgICAgIm9wdGlvbmFsIjogdHJ1
ZSwKKyAgICAgICAgICAgICAgICAgICAgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0sCisg
ICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJBcnJheSB2YWx1ZS4iCisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3Nob3VsZC1z
dHJpcC1jb21tZW50cy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL3Nob3VsZC1zdHJpcC1jb21tZW50cy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwLi5lY2UxZGNmYzYxYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9zaG91bGQtc3RyaXAtY29t
bWVudHMuanNvbgpAQCAtMCwwICsxLDUgQEAKK3sKKyAgICAvKiBhYm92ZSAqLworICAgIC8qIGJl
Zm9yZSAqLyAiZG9tYWluIiAvKiBpbiAqLyA6IC8qIGluICovICJDb21tZW50IiAvKiBhZnRlciAq
LworICAgIC8qIGJlbG93ICovCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2
ZS10eXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmNiYzlkNTM5NDc4Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUt
ZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCkBAIC0wLDAgKzEsMTAgQEAK
K3sKKyAgICAiZG9tYWluIjogIlJ1bnRpbWUiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgewor
ICAgICAgICAgICAgImlkIjogIlJlbW90ZU9iamVjdElkIiwKKyAgICAgICAgICAgICJ0eXBlIjog
ImludGVnZXIiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBvYmplY3QgaWRl
bnRpZmllci4iCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10
eXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
dHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAuLmNmYjA4YmQ5NDBiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRpb24tYXJy
YXktdHlwZS5qc29uCkBAIC0wLDAgKzEsNTAgQEAKK1sKK3sKKyAgICAiZG9tYWluIjogIkRlYnVn
Z2VyIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJCcmVh
a3BvaW50SWQiLAorICAgICAgICAgICAgInR5cGUiOiAiaW50ZWdlciIKKyAgICAgICAgfSwKKyAg
ICAgICAgeworICAgICAgICAgICAgImlkIjogIlJlYXNvbiIsCisgICAgICAgICAgICAidHlwZSI6
ICJzdHJpbmciLAorICAgICAgICAgICAgImVudW0iOiBbIkRpZWQiLCAiRmFpbnRlZCIsICJIdW5n
cnkiXQorICAgICAgICB9CisgICAgXQorfSwKK3sKKyAgICAiZG9tYWluIjogIlJ1bnRpbWUiLAor
ICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIk9iamVjdElkIiwK
KyAgICAgICAgICAgICJ0eXBlIjogImludGVnZXIiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAg
ICAgICAgICAgICJpZCI6ICJMdWNreU51bWJlcnMiLAorICAgICAgICAgICAgInR5cGUiOiAiYXJy
YXkiLAorICAgICAgICAgICAgIml0ZW1zIjogeyAidHlwZSI6ICJpbnRlZ2VyIiB9CisgICAgICAg
IH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJCYWJ5TmFtZXMiLAorICAgICAgICAg
ICAgInR5cGUiOiAiYXJyYXkiLAorICAgICAgICAgICAgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJp
bmciIH0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIk5ld09iamVj
dHMiLAorICAgICAgICAgICAgInR5cGUiOiAiYXJyYXkiLAorICAgICAgICAgICAgIml0ZW1zIjog
eyAiJHJlZiI6ICJPYmplY3RJZCIgfQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAg
ICAiaWQiOiAiT2xkT2JqZWN0cyIsCisgICAgICAgICAgICAidHlwZSI6ICJhcnJheSIsCisgICAg
ICAgICAgICAiaXRlbXMiOiB7ICIkcmVmIjogIkRlYnVnZ2VyLkJyZWFrcG9pbnRJZCIgfQorICAg
ICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiU3RvcFJlYXNvbnMiLAorICAg
ICAgICAgICAgInR5cGUiOiAiYXJyYXkiLAorICAgICAgICAgICAgIml0ZW1zIjogeyAiJHJlZiI6
ICJEZWJ1Z2dlci5SZWFzb24iIH0KKyAgICAgICAgfQorICAgIF0KK30KK10KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLWRlY2xh
cmF0aW9uLWVudW0tdHlwZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjlmMGFlZTljOTFiCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtZGVj
bGFyYXRpb24tZW51bS10eXBlLmpzb24KQEAgLTAsMCArMSwxNSBAQAoreworICAgICJkb21haW4i
OiAiUnVudGltZSIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQi
OiAiRmFybUFuaW1hbHMiLAorICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAg
ICAgICJlbnVtIjogWyJQaWdzIiwgIkNvd3MiLCAiQ2F0cyIsICJIZW5zIl0KKyAgICAgICAgfSwK
KyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlR3b0xlZ2dlZEFuaW1hbHMiLAorICAgICAg
ICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICJlbnVtIjogWyJEdWNrcyIsICJI
ZW5zIiwgIkNyb3dzIiwgIkZsYW1pbmdvcyJdCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1k
ZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMmM0M2MzMzA5OTIKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
dHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCkBAIC0wLDAgKzEsMTAwIEBACitbCit7
CisgICAgImRvbWFpbiI6ICJEYXRhYmFzZSIsCisgICAgImRlc2NyaXB0aW9uIjogIlRlc3QgdHlw
ZSBidWlsZGVyIGdlbmVyYXRpb24gb2YgdmFyaW91cyBvYmplY3QgdHlwZXMuIiwKKyAgICAidHlw
ZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJFcnJvciIsCisgICAgICAgICAg
ICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkRhdGFiYXNl
IGVycm9yLiIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKKyAgICAgICAgICAgICAgICB7
ICJuYW1lIjogIm1lc3NhZ2UiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiRXJy
b3IgbWVzc2FnZS4iIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2RlIiwgInR5cGUi
OiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBjb2RlLiIgfQorICAgICAgICAgICAg
XQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiRXJyb3JMaXN0IiwK
KyAgICAgICAgICAgICJ0eXBlIjogImFycmF5IiwKKyAgICAgICAgICAgICJpdGVtcyI6IHsgIiRy
ZWYiOiAiRXJyb3IiIH0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjog
Ik1vdXNlQnV0dG9uIiwKKyAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAg
ICAiZGVzY3JpcHRpb24iOiAiRW51bWVyYXRlcyBkaWZmZXJlbnQgbW91c2UgYnV0dG9ucyB0aGF0
IGNhbiBiZSB1c2VkLiIsCisgICAgICAgICAgICAiZW51bSI6IFsKKyAgICAgICAgICAgICAgICAi
Tm9uZSIsCisgICAgICAgICAgICAgICAgIkxlZnQiLAorICAgICAgICAgICAgICAgICJNaWRkbGUi
LAorICAgICAgICAgICAgICAgICJSaWdodCIKKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAg
ICAgICAgeworICAgICAgICAgICAgImlkIjogIk9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlIiwKKyAg
ICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IFsK
KyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXki
LCAib3B0aW9uYWwiOiB0cnVlLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAorICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAiYnV0dG9ucyIsICJ0eXBlIjogImFycmF5IiwgIm9wdGlv
bmFsIjogdHJ1ZSwgIml0ZW1zIjogeyAiJHJlZiI6ICJNb3VzZUJ1dHRvbiIgfSB9LAorICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAiZGlyZWN0aW9uYWxpdHkiLCAidHlwZSI6ICJzdHJpbmciLCAi
ZW51bSI6IFsiTFRSIiwgIlJUTCJdLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWUg
fSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJl
ciIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVl
cyIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiLCAib3B0aW9uYWwiOiB0cnVlIH0s
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJlcnJvciIsICIkcmVmIjogIkVycm9yIiwgIm9w
dGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZXJyb3JMaXN0Iiwg
IiRyZWYiOiAiRXJyb3JMaXN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9CisgICAgICAgICAgICBdCisg
ICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJQYXJhbWV0ZXJCdW5kbGUi
LAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVz
IjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJh
cnJheSIsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJidXR0b25zIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICIkcmVmIjog
Ik1vdXNlQnV0dG9uIiB9IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkaXJlY3Rpb25h
bGl0eSIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJMVFIiLCAiUlRMIl0gfSwKKyAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiB9LAorICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiB9LAorICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiB9LAorICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIgfSwKKyAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogImVycm9yIiwgIiRyZWYiOiAiRXJyb3IiIH0sCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJlcnJvckxpc3QiLCAiJHJlZiI6ICJFcnJvckxpc3QiIH0KKyAg
ICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIk9i
amVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHMiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9u
IjogIkNvbmZsaWN0ZWQgbmFtZXMgbWF5IGNhdXNlIGdlbmVyYXRlZCBnZXR0ZXJzL3NldHRlcnMg
dG8gY2xhc2ggd2l0aCBidWlsdC1pbiBJbnNwZWN0b3JPYmplY3QgbWV0aG9kcy4iLAorICAgICAg
ICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAiaW50ZWdlciIsICJ0eXBlIjogInN0cmluZyIgfSwKKyAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogImFycmF5IiwgInR5cGUiOiAic3RyaW5nIiB9LAorICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAic3RyaW5nIiwgInR5cGUiOiAic3RyaW5nIiB9LAorICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWUiLCAidHlwZSI6ICJzdHJpbmciIH0sCisgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJvYmplY3QiLCAidHlwZSI6ICJzdHJpbmciIH0KKyAgICAg
ICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkR1bW15
T2JqZWN0IiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJBbiBvcGVuIG9iamVjdCB0aGF0
IGRvZXNuJ3QgaGF2ZSBhbnkgcHJlZGVmaW5lZCBmaWVsZHMuIiwKKyAgICAgICAgICAgICJ0eXBl
IjogIm9iamVjdCIKKyAgICAgICAgfQorICAgIF0KK30sCit7CisgICAgImRvbWFpbiI6ICJUZXN0
IiwKKyAgICAiZGVzY3JpcHRpb24iOiAiVGVzdCB0aGUgZ2VuZXJhdGlvbiBvZiBzcGVjaWFsIGJl
aGF2aW9ycyB0aGF0IG9ubHkgYXBwbHkgdG8gc3BlY2lmaWMgY2xhc3Nlcy4iLAorICAgICJ0eXBl
cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlBhcmFtZXRlckJ1bmRsZSIsCisg
ICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiBb
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkaXJlY3Rpb25hbGl0eSIsICJ0eXBlIjogInN0
cmluZyIsICJlbnVtIjogWyJMVFIiLCAiUlRMIl0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogImJ1dHRvbnMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgIiRyZWYiOiAiRGF0YWJh
c2UuTW91c2VCdXR0b24iIH0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5h
bWVzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAor
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciIH0sCisg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiIH0s
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiIH0s
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiB9LAor
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZXJyb3IiLCAiJHJlZiI6ICJEYXRhYmFzZS5FcnJv
ciIgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXQorfQorXQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtcmVxdWly
aW5nLXJ1bnRpbWUtY2FzdHMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy90eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjgzZDk0YmU4OTdkCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUt
cmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgpAQCAtMCwwICsxLDUxIEBACitbCit7CisgICAg
ImRvbWFpbiI6ICJUZXN0IiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAg
ICJpZCI6ICJUeXBlTmVlZGluZ0Nhc3QiLAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwK
KyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJBIGR1bW15IHR5cGUgdGhhdCByZXF1aXJlcyBy
dW50aW1lIGNhc3RzLCBhbmQgZm9yY2VzIG5vbi1wcmltaXRpdmUgcmVmZXJlbmNlZCB0eXBlcyB0
byBhbHNvIGVtaXQgcnVudGltZSBjYXN0IGhlbHBlcnMuIiwKKyAgICAgICAgICAgICJwcm9wZXJ0
aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic3RyaW5nIiwgInR5cGUiOiAic3Ry
aW5nIiwgImRlc2NyaXB0aW9uIjogIlN0cmluZyBtZW1iZXIuIiB9LAorICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAibnVtYmVyIiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJO
dW1iZXIgbWVtYmVyLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImFuaW1hbHMiLCAi
JHJlZiI6ICJDYXN0ZWRBbmltYWxzIiwgImRlc2NyaXB0aW9uIjogIkVudW0gbWVtYmVyLiIgfSwK
KyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImlkIiwgIiRyZWYiOiAiQ2FzdGVkT2JqZWN0SWQi
LCAiZGVzY3JpcHRpb24iOiAiQWxpYXNlZCBtZW1iZXIuIiB9LAorICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAidHJlZSIsICIkcmVmIjogIlJlY3Vyc2l2ZU9iamVjdDEiLCAiZGVzY3JpcHRpb24i
OiAiUmVjdXJzaXZlIG9iamVjdCBtZW1iZXIuIiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0s
CisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJDYXN0ZWRPYmplY3RJZCIsCisgICAgICAg
ICAgICAidHlwZSI6ICJpbnRlZ2VyIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAg
ICAiaWQiOiAiVW5jYXN0ZWRPYmplY3RJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJpbnRlZ2Vy
IgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiVW5jYXN0ZWRBbmlt
YWxzIiwKKyAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAiZW51bSI6
IFsiUGlncyIsICJDb3dzIiwgIkNhdHMiLCAiSGVucyJdCisgICAgICAgIH0sCisgICAgICAgIHsK
KyAgICAgICAgICAgICJpZCI6ICJDYXN0ZWRBbmltYWxzIiwKKyAgICAgICAgICAgICJ0eXBlIjog
InN0cmluZyIsCisgICAgICAgICAgICAiZW51bSI6IFsiRHVja3MiLCAiSGVucyIsICJDcm93cyIs
ICJGbGFtaW5nb3MiXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAi
UmVjdXJzaXZlT2JqZWN0MSIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAg
ICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJvYmoiLCAi
JHJlZiI6ICJSZWN1cnNpdmVPYmplY3QyIiwgIm9wdGlvbmFsIjogdHJ1ZSB9CisgICAgICAgICAg
ICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJSZWN1cnNpdmVP
YmplY3QyIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAicHJv
cGVydGllcyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm9iaiIsICIkcmVmIjogIlJl
Y3Vyc2l2ZU9iamVjdDEiLCAib3B0aW9uYWwiOiB0cnVlIH0KKyAgICAgICAgICAgIF0KKyAgICAg
ICAgfQorICAgIF0KK30KK10KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24gYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS13aXRoLW9wZW4t
cGFyYW1ldGVycy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45
OWIwMjIwZDMxMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24KQEAgLTAs
MCArMSwyMSBAQAoreworICAgICJkb21haW4iOiAiVGVzdCIsCisgICAgInR5cGVzIjogWworICAg
ICAgICB7CisgICAgICAgICAgICAiaWQiOiAiTm9PcGVuUGFyYW1ldGVycyIsCisgICAgICAgICAg
ICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJvbmUiLCAidHlwZSI6ICJudW1iZXIiIH0sCisgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJ0d28iLCAidHlwZSI6ICJudW1iZXIiIH0KKyAgICAgICAgICAgIF0K
KyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIk9wZW5QYXJhbWV0ZXJz
IiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAicHJvcGVydGll
cyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImFscGhhIiwgInR5cGUiOiAibnVtYmVy
IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYmV0YSIsICJ0eXBlIjogIm51bWJlciIg
fQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3ZlcnNpb24uanNvbiBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy92ZXJzaW9uLmpzb24K
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjUwN2E1ZDkwMTc2Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL3ZlcnNpb24uanNvbgpAQCAtMCwwICsxLDYgQEAKK3siZG9tYWlucyI6WworeworICAgICJk
b21haW4iOiAiVmVyc2lvbkRvbWFpbiIsCisgICAgInZlcnNpb24iOiA0MgorfQorXX0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuaWRs
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5pZGwKaW5k
ZXggZTc4YzE4OTE5NjIuLjJjY2ExYjcwMzJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmlkbApAQCAtOTMsOSArOTMsNyBAQAogICAg
IGJvb2xlYW4gaXNCZWluZ0luc3BlY3RlZCgpOwogCiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGJv
b2xlYW4gc3VwcG9ydHNEaWFnbm9zdGljTG9nZ2luZzsKLSNpZiBFTkFCTEVfSU5TUEVDVE9SX1RF
TEVNRVRSWQotICAgIHZvaWQgbG9nRGlhZ25vc3RpY0V2ZW50KERPTVN0cmluZyBldmVudE5hbWUs
IERPTVN0cmluZyBjb250ZW50KTsKLSNlbmRpZgorICAgIFtDb25kaXRpb25hbD1JTlNQRUNUT1Jf
VEVMRU1FVFJZXSB2b2lkIGxvZ0RpYWdub3N0aWNFdmVudChET01TdHJpbmcgZXZlbnROYW1lLCBE
T01TdHJpbmcgY29udGVudCk7CiB9OwogCiBkaWN0aW9uYXJ5IENvbnRleHRNZW51SXRlbSB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRp
b24uY3BwCmluZGV4IDBjNDQyZWU5MDg4Li5iYzkzZDZlMWQwOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAKQEAgLTc5
MywxMSArNzkzLDEzIEBAIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpmcmFtZUNsZWFy
ZWRTY2hlZHVsZWROYXZpZ2F0aW9uSW1wbChJbnN0cnVtZW50aW5nCiAgICAgICAgIGluc3BlY3Rv
clBhZ2VBZ2VudC0+ZnJhbWVDbGVhcmVkU2NoZWR1bGVkTmF2aWdhdGlvbihmcmFtZSk7CiB9CiAK
KyNpZiBIQVZFKERBUktfTU9ERV9DU1MpCiB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
ZGVmYXVsdEFwcGVhcmFuY2VEaWRDaGFuZ2VJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3Ry
dW1lbnRpbmdBZ2VudHMsIGJvb2wgdXNlRGFya0FwcGVhcmFuY2UpCiB7CiAgICAgaWYgKEluc3Bl
Y3RvclBhZ2VBZ2VudCogaW5zcGVjdG9yUGFnZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5p
bnNwZWN0b3JQYWdlQWdlbnQoKSkKICAgICAgICAgaW5zcGVjdG9yUGFnZUFnZW50LT5kZWZhdWx0
QXBwZWFyYW5jZURpZENoYW5nZSh1c2VEYXJrQXBwZWFyYW5jZSk7CiB9CisjZW5kaWYKIAogdm9p
ZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxEZXN0cm95Q2FjaGVkUmVzb3VyY2VJbXBs
KENhY2hlZFJlc291cmNlJiBjYWNoZWRSZXNvdXJjZSkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaAppbmRleCAwM2JkZDU1Y2M5
My4uMjY1ZjA0NGMwZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgKQEAgLTIyOSw3ICsyMjksOSBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIHZvaWQgZnJhbWVTdG9wcGVkTG9hZGluZyhGcmFtZSYpOwogICAgIHN0YXRpYyB2b2lk
IGZyYW1lU2NoZWR1bGVkTmF2aWdhdGlvbihGcmFtZSYsIFNlY29uZHMgZGVsYXkpOwogICAgIHN0
YXRpYyB2b2lkIGZyYW1lQ2xlYXJlZFNjaGVkdWxlZE5hdmlnYXRpb24oRnJhbWUmKTsKKyNpZiBI
QVZFKERBUktfTU9ERV9DU1MpCiAgICAgc3RhdGljIHZvaWQgZGVmYXVsdEFwcGVhcmFuY2VEaWRD
aGFuZ2UoUGFnZSYsIGJvb2wgdXNlRGFya0FwcGVhcmFuY2UpOworI2VuZGlmCiAgICAgc3RhdGlj
IHZvaWQgd2lsbERlc3Ryb3lDYWNoZWRSZXNvdXJjZShDYWNoZWRSZXNvdXJjZSYpOwogCiAgICAg
c3RhdGljIGJvb2wgd2lsbEludGVyY2VwdFJlcXVlc3QoY29uc3QgRnJhbWUqLCBjb25zdCBSZXNv
dXJjZVJlcXVlc3QmKTsKQEAgLTQzNCw3ICs0MzYsOSBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2
b2lkIGZyYW1lU3RvcHBlZExvYWRpbmdJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmLCBGcmFtZSYp
OwogICAgIHN0YXRpYyB2b2lkIGZyYW1lU2NoZWR1bGVkTmF2aWdhdGlvbkltcGwoSW5zdHJ1bWVu
dGluZ0FnZW50cyYsIEZyYW1lJiwgU2Vjb25kcyBkZWxheSk7CiAgICAgc3RhdGljIHZvaWQgZnJh
bWVDbGVhcmVkU2NoZWR1bGVkTmF2aWdhdGlvbkltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYsIEZy
YW1lJik7CisjaWYgSEFWRShEQVJLX01PREVfQ1NTKQogICAgIHN0YXRpYyB2b2lkIGRlZmF1bHRB
cHBlYXJhbmNlRGlkQ2hhbmdlSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiwgYm9vbCB1c2VEYXJr
QXBwZWFyYW5jZSk7CisjZW5kaWYKICAgICBzdGF0aWMgdm9pZCB3aWxsRGVzdHJveUNhY2hlZFJl
c291cmNlSW1wbChDYWNoZWRSZXNvdXJjZSYpOwogCiAgICAgc3RhdGljIGJvb2wgd2lsbEludGVy
Y2VwdFJlcXVlc3RJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmLCBjb25zdCBSZXNvdXJjZVJlcXVl
c3QmKTsKQEAgLTEyMzcsMTEgKzEyNDEsMTMgQEAgaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjpmcmFtZUNsZWFyZWRTY2hlZHVsZWROYXZpZ2F0aW9uKEZyYW1lJiBmcmEKICAg
ICAgICAgZnJhbWVDbGVhcmVkU2NoZWR1bGVkTmF2aWdhdGlvbkltcGwoKmluc3RydW1lbnRpbmdB
Z2VudHMsIGZyYW1lKTsKIH0KIAorI2lmIEhBVkUoREFSS19NT0RFX0NTUykKIGlubGluZSB2b2lk
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGVmYXVsdEFwcGVhcmFuY2VEaWRDaGFuZ2UoUGFn
ZSYgcGFnZSwgYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSkKIHsKICAgICBGQVNUX1JFVFVSTl9JRl9O
T19GUk9OVEVORFModm9pZCgpKTsKICAgICBkZWZhdWx0QXBwZWFyYW5jZURpZENoYW5nZUltcGwo
aW5zdHJ1bWVudGluZ0FnZW50c0ZvclBhZ2UocGFnZSksIHVzZURhcmtBcHBlYXJhbmNlKTsKIH0K
KyNlbmRpZgogCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxEZXN0
cm95Q2FjaGVkUmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2UmIGNhY2hlZFJlc291cmNlKQogewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclNoYWRlclByb2dyYW0u
Y3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclNoYWRlclByb2dyYW0uY3Bw
CmluZGV4IDI5MWJkMjRiMDZmLi5mODE2YmI2ZjQzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvclNoYWRlclByb2dyYW0uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTaGFkZXJQcm9ncmFtLmNwcApAQCAtMjYsNiArMjYsOCBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkluc3BlY3RvclNoYWRlclByb2dyYW0u
aCIKIAorI2lmIEVOQUJMRShXRUJHTCkgfHwgRU5BQkxFKFdFQkdQVSkKKwogI2luY2x1ZGUgIklu
c3BlY3RvckNhbnZhcy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lkZW50aWZpZXJzRmFj
dG9yeS5oPgogI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgpAQCAtMTUyLDEwICsxNTQsNiBAQCBz
dGF0aWMgUmVmUHRyPFdlYkdQVVNoYWRlck1vZHVsZT4gc2hhZGVyRm9yVHlwZShXZWJHUFVQaXBl
bGluZSYgcGlwZWxpbmUsIEluc3BlYwogCiBTdHJpbmcgSW5zcGVjdG9yU2hhZGVyUHJvZ3JhbTo6
cmVxdWVzdFNoYWRlclNvdXJjZShJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OlNoYWRlclR5
cGUgc2hhZGVyVHlwZSkKIHsKLSNpZiAhRU5BQkxFKFdFQkdMKSAmJiAhRU5BQkxFKFdFQkdQVSkK
LSAgICBVTlVTRURfUEFSQU0oc2hhZGVyVHlwZSk7Ci0jZW5kaWYKLQogICAgIHJldHVybiBXVEY6
OnN3aXRjaE9uKG1fcHJvZ3JhbSwKICNpZiBFTkFCTEUoV0VCR0wpCiAgICAgICAgIFsmXSAoc3Rk
OjpyZWZlcmVuY2Vfd3JhcHBlcjxXZWJHTFByb2dyYW0+IHByb2dyYW1XcmFwcGVyKSB7CkBAIC0x
ODQsMTEgKzE4Miw2IEBAIFN0cmluZyBJbnNwZWN0b3JTaGFkZXJQcm9ncmFtOjpyZXF1ZXN0U2hh
ZGVyU291cmNlKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6CiAKIGJvb2wgSW5zcGVjdG9y
U2hhZGVyUHJvZ3JhbTo6dXBkYXRlU2hhZGVyKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6
U2hhZGVyVHlwZSBzaGFkZXJUeXBlLCBjb25zdCBTdHJpbmcmIHNvdXJjZSkKIHsKLSNpZiAhRU5B
QkxFKFdFQkdMKSAmJiAhRU5BQkxFKFdFQkdQVSkKLSAgICBVTlVTRURfUEFSQU0oc2hhZGVyVHlw
ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHNvdXJjZSk7Ci0jZW5kaWYKLQogICAgIHJldHVybiBXVEY6
OnN3aXRjaE9uKG1fcHJvZ3JhbSwKICNpZiBFTkFCTEUoV0VCR0wpCiAgICAgICAgIFsmXSAoc3Rk
OjpyZWZlcmVuY2Vfd3JhcHBlcjxXZWJHTFByb2dyYW0+IHByb2dyYW1XcmFwcGVyKSB7CkBAIC0y
ODEsMyArMjc0LDUgQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6U2hhZGVyUHJv
Z3JhbT4gSW5zcGVjdG9yU2hhZGVyUHJvZ3JhbTo6YnVpbGRPYmoKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclNoYWRlclByb2dy
YW0uaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTaGFkZXJQcm9ncmFtLmgK
aW5kZXggNmRmMTNkZmZkZWIuLmNjYzczY2VmMzc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yU2hhZGVyUHJvZ3JhbS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JTaGFkZXJQcm9ncmFtLmgKQEAgLTI1LDYgKzI1LDggQEAKIAog
I3ByYWdtYSBvbmNlCiAKKyNpZiBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpCisKICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbE9iamVjdHMuaD4KICNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CkBAIC05OSwz
ICsxMDEsNSBAQCBwcml2YXRlOgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDYW52YXNBZ2VudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNhbnZhc0FnZW50LmNwcAppbmRl
eCAxZDM5OGM1NDdjYy4uNWZmZjI5ODYzMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ2FudmFzQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ2FudmFzQWdlbnQuY3BwCkBAIC04OCw3ICs4
OCw5IEBAIEluc3BlY3RvckNhbnZhc0FnZW50OjpJbnNwZWN0b3JDYW52YXNBZ2VudChQYWdlQWdl
bnRDb250ZXh0JiBjb250ZXh0KQogICAgICwgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIoY29udGV4
dC5pbmplY3RlZFNjcmlwdE1hbmFnZXIpCiAgICAgLCBtX2luc3BlY3RlZFBhZ2UoY29udGV4dC5p
bnNwZWN0ZWRQYWdlKQogICAgICwgbV9jYW52YXNEZXN0cm95ZWRUaW1lcigqdGhpcywgJkluc3Bl
Y3RvckNhbnZhc0FnZW50OjpjYW52YXNEZXN0cm95ZWRUaW1lckZpcmVkKQorI2lmIEVOQUJMRShX
RUJHTCkgfHwgRU5BQkxFKFdFQkdQVSkKICAgICAsIG1fcHJvZ3JhbURlc3Ryb3llZFRpbWVyKCp0
aGlzLCAmSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnByb2dyYW1EZXN0cm95ZWRUaW1lckZpcmVkKQor
I2VuZGlmIC8vIEVOQUJMRShXRUJHTCkgfHwgRU5BQkxFKFdFQkdQVSkKIHsKIH0KIApAQCAtMTMy
LDcgKzEzNCw3IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmVuYWJsZShFcnJvclN0cmlu
ZyYpCiAgICAgICAgICAgICAvLyBUaGUgYWN0dWFsICJjb250ZXh0IiBmb3IgV2ViR1BVIGlzIHRo
ZSBgV2ViR1BVRGV2aWNlYCwgbm90IHRoZSA8Y2FudmFzPi4KICAgICAgICAgICAgIGlmIChpczxH
UFVDYW52YXNDb250ZXh0Pihjb250ZXh0KSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSNl
bmRpZgorI2VuZGlmIC8vIEVOQUJMRShXRUJHUFUpCiAKICAgICAgICAgICAgIGlmIChleGlzdHNJ
bkN1cnJlbnRQYWdlKGNvbnRleHQtPmNhbnZhc0Jhc2UoKS5zY3JpcHRFeGVjdXRpb25Db250ZXh0
KCkpKQogICAgICAgICAgICAgICAgIGJpbmRDYW52YXMoKmNvbnRleHQsIGZhbHNlKTsKQEAgLTE0
Nyw3ICsxNDksNyBAQCB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjplbmFibGUoRXJyb3JTdHJp
bmcmKQogICAgICAgICAgICAgICAgIGJpbmRDYW52YXMoKmRldmljZSwgZmFsc2UpOwogICAgICAg
ICB9CiAgICAgfQotI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdQVSkKIAogI2lmIEVOQUJM
RShXRUJHTCkKICAgICB7CkBAIC0xNTcsNyArMTU5LDcgQEAgdm9pZCBJbnNwZWN0b3JDYW52YXNB
Z2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nJikKICAgICAgICAgICAgICAgICBkaWRDcmVhdGVXZWJH
TFByb2dyYW0oKmNvbnRleHRXZWJHTEJhc2UsICpwcm9ncmFtKTsKICAgICAgICAgfQogICAgIH0K
LSNlbmRpZgorI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKIAogI2lmIEVOQUJMRShXRUJHUFUpCiAg
ICAgewpAQCAtMTY3LDcgKzE2OSw3IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmVuYWJs
ZShFcnJvclN0cmluZyYpCiAgICAgICAgICAgICAgICAgZGlkQ3JlYXRlV2ViR1BVUGlwZWxpbmUo
KmRldmljZSwgKnBpcGVsaW5lKTsKICAgICAgICAgfQogICAgIH0KLSNlbmRpZgorI2VuZGlmIC8v
IEVOQUJMRShXRUJHUFUpCiB9CiAKIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmRpc2FibGUo
RXJyb3JTdHJpbmcmKQpAQCAtMzAzLDYgKzMwNSw3IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdl
bnQ6OnN0b3BSZWNvcmRpbmcoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcm
CiAgICAgZGlkRmluaXNoUmVjb3JkaW5nQ2FudmFzRnJhbWUoKmNvbnRleHQsIHRydWUpOwogfQog
CisjaWYgRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKQogdm9pZCBJbnNwZWN0b3JDYW52
YXNBZ2VudDo6cmVxdWVzdFNoYWRlclNvdXJjZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNv
bnN0IFN0cmluZyYgcHJvZ3JhbUlkLCBjb25zdCBTdHJpbmcmIHNoYWRlclR5cGVTdHJpbmcsIFN0
cmluZyogb3V0U291cmNlKQogewogICAgIGF1dG8gaW5zcGVjdG9yUHJvZ3JhbSA9IGFzc2VydElu
c3BlY3RvclByb2dyYW0oZXJyb3JTdHJpbmcsIHByb2dyYW1JZCk7CkBAIC0zNDAsNiArMzQzLDcg
QEAgdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6dXBkYXRlU2hhZGVyKEVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgY29uc3QgU3RyaW5nJgogICAgICAgICBlcnJvclN0cmluZyA9ICJGYWlsZWQg
dG8gdXBkYXRlIHNoYWRlciBvZiBnaXZlbiBzaGFkZXJUeXBlIGZvciBnaXZlbiBwcm9ncmFtSWQi
X3M7CiB9CiAKKyNpZiBFTkFCTEUoV0VCR0wpCiB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50Ojpz
ZXRTaGFkZXJQcm9ncmFtRGlzYWJsZWQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBT
dHJpbmcmIHByb2dyYW1JZCwgYm9vbCBkaXNhYmxlZCkKIHsKICAgICBhdXRvIGluc3BlY3RvclBy
b2dyYW0gPSBhc3NlcnRJbnNwZWN0b3JQcm9ncmFtKGVycm9yU3RyaW5nLCBwcm9ncmFtSWQpOwpA
QCAtMzU3LDYgKzM2MSw4IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnNldFNoYWRlclBy
b2dyYW1IaWdobGlnaHRlZChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsCiAKICAgICBpbnNwZWN0
b3JQcm9ncmFtLT5zZXRIaWdobGlnaHRlZChoaWdobGlnaHRlZCk7CiB9CisjZW5kaWYgLy8gRU5B
QkxFKFdFQkdMKQorI2VuZGlmIC8vI2lmIEVOQUJMRShXRUJHTCkgfHwgRU5BQkxFKFdFQkdQVSkK
IAogdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZnJhbWVOYXZpZ2F0ZWQoRnJhbWUmIGZyYW1l
KQogewpAQCAtNjI1LDcgKzYzMSw3IEBAIGJvb2wgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmlzV2Vi
R0xQcm9ncmFtSGlnaGxpZ2h0ZWQoV2ViR0xQcm9ncmFtJiBwcm9ncmFtKQogCiAgICAgcmV0dXJu
IGluc3BlY3RvclByb2dyYW0tPmhpZ2hsaWdodGVkKCk7CiB9Ci0jZW5kaWYKKyNlbmRpZiAvLyBF
TkFCTEUoV0VCR0wpCiAKICNpZiBFTkFCTEUoV0VCR1BVKQogdm9pZCBJbnNwZWN0b3JDYW52YXNB
Z2VudDo6ZGlkQ3JlYXRlV2ViR1BVRGV2aWNlKFdlYkdQVURldmljZSYgZGV2aWNlKQpAQCAtNjg4
LDcgKzY5NCw3IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OndpbGxEZXN0cm95V2ViR1BV
UGlwZWxpbmUoV2ViR1BVUGlwZWxpbmUmIHBpcGVsaW5lKQogCiAgICAgdW5iaW5kUHJvZ3JhbSgq
aW5zcGVjdG9yUHJvZ3JhbSk7CiB9Ci0jZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR1BVKQog
CiB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpzdGFydFJlY29yZGluZyhJbnNwZWN0b3JDYW52
YXMmIGluc3BlY3RvckNhbnZhcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6UmVjb3JkaW5nOjpJbml0
aWF0b3IgaW5pdGlhdG9yLCBSZWNvcmRpbmdPcHRpb25zJiYgcmVjb3JkaW5nT3B0aW9ucykKIHsK
QEAgLTcwMCwxMCArNzA2LDEwIEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnN0YXJ0UmVj
b3JkaW5nKEluc3BlY3RvckNhbnZhcyYgaW5zcGVjdG9yQ2FudmFzLCBJbnNwCiAgICAgICAgICYm
ICFpczxJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ+KGNvbnRleHQpCiAjaWYgRU5BQkxFKFdF
QkdMKQogICAgICAgICAmJiAhaXM8V2ViR0xSZW5kZXJpbmdDb250ZXh0Pihjb250ZXh0KQotI2Vu
ZGlmCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQogI2lmIEVOQUJMRShXRUJHTDIpCiAgICAgICAg
ICYmICFpczxXZWJHTDJSZW5kZXJpbmdDb250ZXh0Pihjb250ZXh0KQotI2VuZGlmCisjZW5kaWYg
Ly8gRU5BQkxFKFdFQkdMMikKICAgICApCiAgICAgICAgIHJldHVybjsKIApAQCAtNzMzLDYgKzcz
OSw3IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmNhbnZhc0Rlc3Ryb3llZFRpbWVyRmly
ZWQoKQogICAgIG1fcmVtb3ZlZENhbnZhc0lkZW50aWZpZXJzLmNsZWFyKCk7CiB9CiAKKyNpZiBF
TkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpCiB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50
Ojpwcm9ncmFtRGVzdHJveWVkVGltZXJGaXJlZCgpCiB7CiAgICAgaWYgKCFtX3JlbW92ZWRQcm9n
cmFtSWRlbnRpZmllcnMuc2l6ZSgpKQpAQCAtNzQzLDYgKzc1MCw3IEBAIHZvaWQgSW5zcGVjdG9y
Q2FudmFzQWdlbnQ6OnByb2dyYW1EZXN0cm95ZWRUaW1lckZpcmVkKCkKIAogICAgIG1fcmVtb3Zl
ZFByb2dyYW1JZGVudGlmaWVycy5jbGVhcigpOwogfQorI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkg
fHwgRU5BQkxFKFdFQkdQVSkKIAogdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6cmVzZXQoKQog
ewpAQCAtNzU2LDEwICs3NjQsMTIgQEAgdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6cmVzZXQo
KQogICAgIGlmIChtX2NhbnZhc0Rlc3Ryb3llZFRpbWVyLmlzQWN0aXZlKCkpCiAgICAgICAgIG1f
Y2FudmFzRGVzdHJveWVkVGltZXIuc3RvcCgpOwogCisjaWYgRU5BQkxFKFdFQkdMKSB8fCBFTkFC
TEUoV0VCR1BVKQogICAgIG1faWRlbnRpZmllclRvSW5zcGVjdG9yUHJvZ3JhbS5jbGVhcigpOwog
ICAgIG1fcmVtb3ZlZFByb2dyYW1JZGVudGlmaWVycy5jbGVhcigpOwogICAgIGlmIChtX3Byb2dy
YW1EZXN0cm95ZWRUaW1lci5pc0FjdGl2ZSgpKQogICAgICAgICBtX3Byb2dyYW1EZXN0cm95ZWRU
aW1lci5zdG9wKCk7CisjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKQog
CiAgICAgbV9yZWNvcmRpbmdDYW52YXNJZGVudGlmaWVycy5jbGVhcigpOwogfQpAQCAtNzk4LDcg
KzgwOCw3IEBAIEluc3BlY3RvckNhbnZhcyYgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmJpbmRDYW52
YXMoV2ViR1BVRGV2aWNlJiBkZXZpY2UsIGJvb2wgY2FwCiAKICAgICByZXR1cm4gaW5zcGVjdG9y
Q2FudmFzOwogfQotI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdQVSkKIAogdm9pZCBJbnNw
ZWN0b3JDYW52YXNBZ2VudDo6dW5iaW5kQ2FudmFzKEluc3BlY3RvckNhbnZhcyYgaW5zcGVjdG9y
Q2FudmFzKQogewpAQCAtODExLDcgKzgyMSw3IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6
OnVuYmluZENhbnZhcyhJbnNwZWN0b3JDYW52YXMmIGluc3BlY3RvckNhbnZhcykKIAogICAgIGZv
ciAoYXV0byogaW5zcGVjdG9yUHJvZ3JhbSA6IHByb2dyYW1zVG9SZW1vdmUpCiAgICAgICAgIHVu
YmluZFByb2dyYW0oKmluc3BlY3RvclByb2dyYW0pOwotI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxF
KFdFQkdMKQogCiAgICAgaWYgKGF1dG8qIGNvbnRleHQgPSBpbnNwZWN0b3JDYW52YXMuY2FudmFz
Q29udGV4dCgpKQogICAgICAgICBjb250ZXh0LT5jYW52YXNCYXNlKCkucmVtb3ZlT2JzZXJ2ZXIo
KnRoaXMpOwpAQCAtODU2LDggKzg2Niw5IEBAIFJlZlB0cjxJbnNwZWN0b3JDYW52YXM+IEluc3Bl
Y3RvckNhbnZhc0FnZW50OjpmaW5kSW5zcGVjdG9yQ2FudmFzKFdlYkdQVURldmljZSYKICAgICB9
CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9Ci0jZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR1BV
KQogCisjaWYgRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKQogdm9pZCBJbnNwZWN0b3JD
YW52YXNBZ2VudDo6dW5iaW5kUHJvZ3JhbShJbnNwZWN0b3JTaGFkZXJQcm9ncmFtJiBpbnNwZWN0
b3JQcm9ncmFtKQogewogICAgIFN0cmluZyBpZGVudGlmaWVyID0gaW5zcGVjdG9yUHJvZ3JhbS5p
ZGVudGlmaWVyKCk7CkBAIC04OTEsNyArOTAyLDcgQEAgUmVmUHRyPEluc3BlY3RvclNoYWRlclBy
b2dyYW0+IEluc3BlY3RvckNhbnZhc0FnZW50OjpmaW5kSW5zcGVjdG9yUHJvZ3JhbShXZWJHTFAK
ICAgICB9CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9Ci0jZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUo
V0VCR0wpCiAKICNpZiBFTkFCTEUoV0VCR1BVKQogUmVmUHRyPEluc3BlY3RvclNoYWRlclByb2dy
YW0+IEluc3BlY3RvckNhbnZhc0FnZW50OjpmaW5kSW5zcGVjdG9yUHJvZ3JhbShXZWJHUFVQaXBl
bGluZSYgcGlwZWxpbmUpCkBAIC05MDIsNiArOTEzLDcgQEAgUmVmUHRyPEluc3BlY3RvclNoYWRl
clByb2dyYW0+IEluc3BlY3RvckNhbnZhc0FnZW50OjpmaW5kSW5zcGVjdG9yUHJvZ3JhbShXZWJH
UFUKICAgICB9CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9Ci0jZW5kaWYKKyNlbmRpZiAvLyBFTkFC
TEUoV0VCR1BVKQorI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkgfHwgRU5BQkxFKFdFQkdQVSkKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JDYW52YXNBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JDYW52YXNBZ2VudC5oCmluZGV4IGZmOWE1MzNlMDQ4Li4wZWYx
YWVmYjY0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JDYW52YXNBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yQ2FudmFzQWdlbnQuaApAQCAtNDMsMTcgKzQzLDE5IEBAIGNsYXNzIEluamVjdGVk
U2NyaXB0TWFuYWdlcjsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDsKKyNpZiBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpCiBjbGFzcyBJ
bnNwZWN0b3JTaGFkZXJQcm9ncmFtOwogI2lmIEVOQUJMRShXRUJHTCkKIGNsYXNzIFdlYkdMUHJv
Z3JhbTsKIGNsYXNzIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U7Ci0jZW5kaWYKKyNlbmRpZiAv
LyBFTkFCTEUoV0VCR0wpCiAjaWYgRU5BQkxFKFdFQkdQVSkKIGNsYXNzIEdQVUNhbnZhc0NvbnRl
eHQ7CiBjbGFzcyBXZWJHUFVEZXZpY2U7CiBjbGFzcyBXZWJHUFVQaXBlbGluZTsKIGNsYXNzIFdl
YkdQVVN3YXBDaGFpbjsKLSNlbmRpZgorI2VuZGlmIC8vIEVOQUJMRShXRUJHUFUpCisjZW5kaWYg
Ly8gRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKQogCiB0eXBlZGVmIFN0cmluZyBFcnJv
clN0cmluZzsKIApAQCAtNzksMTAgKzgxLDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFJlY29y
ZGluZ0F1dG9DYXB0dXJlRnJhbWVDb3VudChFcnJvclN0cmluZyYsIGludCBjb3VudCkgb3ZlcnJp
ZGU7CiAgICAgdm9pZCBzdGFydFJlY29yZGluZyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYg
Y2FudmFzSWQsIGNvbnN0IGludCogZnJhbWVDb3VudCwgY29uc3QgaW50KiBtZW1vcnlMaW1pdCkg
b3ZlcnJpZGU7CiAgICAgdm9pZCBzdG9wUmVjb3JkaW5nKEVycm9yU3RyaW5nJiwgY29uc3QgU3Ry
aW5nJiBjYW52YXNJZCkgb3ZlcnJpZGU7CisjaWYgRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VC
R1BVKQogICAgIHZvaWQgcmVxdWVzdFNoYWRlclNvdXJjZShFcnJvclN0cmluZyYsIGNvbnN0IFN0
cmluZyYgcHJvZ3JhbUlkLCBjb25zdCBTdHJpbmcmIHNoYWRlclR5cGUsIFN0cmluZyogc291cmNl
KSBvdmVycmlkZTsKICAgICB2b2lkIHVwZGF0ZVNoYWRlcihFcnJvclN0cmluZyYsIGNvbnN0IFN0
cmluZyYgcHJvZ3JhbUlkLCBjb25zdCBTdHJpbmcmIHNoYWRlclR5cGUsIGNvbnN0IFN0cmluZyYg
c291cmNlKSBvdmVycmlkZTsKKyNpZiBFTkFCTEUoV0VCR0wpCiAgICAgdm9pZCBzZXRTaGFkZXJQ
cm9ncmFtRGlzYWJsZWQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHByb2dyYW1JZCwgYm9v
bCBkaXNhYmxlZCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRTaGFkZXJQcm9ncmFtSGlnaGxpZ2h0
ZWQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHByb2dyYW1JZCwgYm9vbCBoaWdobGlnaHRl
ZCkgb3ZlcnJpZGU7CisjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQorI2VuZGlmIC8vIEVOQUJMRShX
RUJHTCkgfHwgRU5BQkxFKFdFQkdQVSkKIAogICAgIC8vIENhbnZhc09ic2VydmVyCiAgICAgdm9p
ZCBjYW52YXNDaGFuZ2VkKENhbnZhc0Jhc2UmLCBjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsK
QEAgLTEwNCwxNCArMTEwLDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIHdpbGxEZXN0cm95V2ViR0xQ
cm9ncmFtKFdlYkdMUHJvZ3JhbSYpOwogICAgIGJvb2wgaXNXZWJHTFByb2dyYW1EaXNhYmxlZChX
ZWJHTFByb2dyYW0mKTsKICAgICBib29sIGlzV2ViR0xQcm9ncmFtSGlnaGxpZ2h0ZWQoV2ViR0xQ
cm9ncmFtJik7Ci0jZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCiAjaWYgRU5BQkxFKFdF
QkdQVSkKICAgICB2b2lkIGRpZENyZWF0ZVdlYkdQVURldmljZShXZWJHUFVEZXZpY2UmKTsKICAg
ICB2b2lkIHdpbGxEZXN0cm95V2ViR1BVRGV2aWNlKFdlYkdQVURldmljZSYpOwogICAgIHZvaWQg
d2lsbENvbmZpZ3VyZVN3YXBDaGFpbihHUFVDYW52YXNDb250ZXh0JiwgV2ViR1BVU3dhcENoYWlu
Jik7CiAgICAgdm9pZCBkaWRDcmVhdGVXZWJHUFVQaXBlbGluZShXZWJHUFVEZXZpY2UmLCBXZWJH
UFVQaXBlbGluZSYpOwogICAgIHZvaWQgd2lsbERlc3Ryb3lXZWJHUFVQaXBlbGluZShXZWJHUFVQ
aXBlbGluZSYpOwotI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdQVSkKIAogcHJpdmF0ZToK
ICAgICBzdHJ1Y3QgUmVjb3JkaW5nT3B0aW9ucyB7CkBAIC0xMjIsMjggKzEyOCwzMiBAQCBwcml2
YXRlOgogICAgIHZvaWQgc3RhcnRSZWNvcmRpbmcoSW5zcGVjdG9yQ2FudmFzJiwgSW5zcGVjdG9y
OjpQcm90b2NvbDo6UmVjb3JkaW5nOjpJbml0aWF0b3IsIFJlY29yZGluZ09wdGlvbnMmJiA9IHsg
fSk7CiAKICAgICB2b2lkIGNhbnZhc0Rlc3Ryb3llZFRpbWVyRmlyZWQoKTsKKyNpZiBFTkFCTEUo
V0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpCiAgICAgdm9pZCBwcm9ncmFtRGVzdHJveWVkVGltZXJG
aXJlZCgpOworI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkgfHwgRU5BQkxFKFdFQkdQVSkKICAgICB2
b2lkIHJlc2V0KCk7CiAKICAgICBJbnNwZWN0b3JDYW52YXMmIGJpbmRDYW52YXMoQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dCYsIGJvb2wgY2FwdHVyZUJhY2t0cmFjZSk7CiAjaWYgRU5BQkxFKFdFQkdQ
VSkKICAgICBJbnNwZWN0b3JDYW52YXMmIGJpbmRDYW52YXMoV2ViR1BVRGV2aWNlJiwgYm9vbCBj
YXB0dXJlQmFja3RyYWNlKTsKLSNlbmRpZgorI2VuZGlmIC8vIEVOQUJMRShXRUJHUFUpCiAgICAg
dm9pZCB1bmJpbmRDYW52YXMoSW5zcGVjdG9yQ2FudmFzJik7CiAgICAgUmVmUHRyPEluc3BlY3Rv
ckNhbnZhcz4gYXNzZXJ0SW5zcGVjdG9yQ2FudmFzKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5n
JiBjYW52YXNJZCk7CiAgICAgUmVmUHRyPEluc3BlY3RvckNhbnZhcz4gZmluZEluc3BlY3RvckNh
bnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0Jik7CiAjaWYgRU5BQkxFKFdFQkdQVSkKICAgICBS
ZWZQdHI8SW5zcGVjdG9yQ2FudmFzPiBmaW5kSW5zcGVjdG9yQ2FudmFzKFdlYkdQVURldmljZSYp
OwotI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdQVSkKIAorI2lmIEVOQUJMRShXRUJHTCkg
fHwgRU5BQkxFKFdFQkdQVSkKICAgICB2b2lkIHVuYmluZFByb2dyYW0oSW5zcGVjdG9yU2hhZGVy
UHJvZ3JhbSYpOwogICAgIFJlZlB0cjxJbnNwZWN0b3JTaGFkZXJQcm9ncmFtPiBhc3NlcnRJbnNw
ZWN0b3JQcm9ncmFtKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBwcm9ncmFtSWQpOwogI2lm
IEVOQUJMRShXRUJHTCkKICAgICBSZWZQdHI8SW5zcGVjdG9yU2hhZGVyUHJvZ3JhbT4gZmluZElu
c3BlY3RvclByb2dyYW0oV2ViR0xQcm9ncmFtJik7Ci0jZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUo
V0VCR0wpCiAjaWYgRU5BQkxFKFdFQkdQVSkKICAgICBSZWZQdHI8SW5zcGVjdG9yU2hhZGVyUHJv
Z3JhbT4gZmluZEluc3BlY3RvclByb2dyYW0oV2ViR1BVUGlwZWxpbmUmKTsKLSNlbmRpZgorI2Vu
ZGlmIC8vIEVOQUJMRShXRUJHUFUpCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUo
V0VCR1BVKQogCiAgICAgc3RkOjp1bmlxdWVfcHRyPEluc3BlY3Rvcjo6Q2FudmFzRnJvbnRlbmRE
aXNwYXRjaGVyPiBtX2Zyb250ZW5kRGlzcGF0Y2hlcjsKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpD
YW52YXNCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKQEAgLTE1NSw5ICsx
NjUsMTEgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8U3RyaW5nPiBtX3JlbW92ZWRDYW52YXNJZGVu
dGlmaWVyczsKICAgICBUaW1lciBtX2NhbnZhc0Rlc3Ryb3llZFRpbWVyOwogCisjaWYgRU5BQkxF
KFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKQogICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8SW5z
cGVjdG9yU2hhZGVyUHJvZ3JhbT4+IG1faWRlbnRpZmllclRvSW5zcGVjdG9yUHJvZ3JhbTsKICAg
ICBWZWN0b3I8U3RyaW5nPiBtX3JlbW92ZWRQcm9ncmFtSWRlbnRpZmllcnM7CiAgICAgVGltZXIg
bV9wcm9ncmFtRGVzdHJveWVkVGltZXI7CisjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKSB8fCBFTkFC
TEUoV0VCR1BVKQogCiAgICAgSGFzaFNldDxTdHJpbmc+IG1fcmVjb3JkaW5nQ2FudmFzSWRlbnRp
ZmllcnM7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yRE9NQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JET01BZ2VudC5jcHAKaW5kZXggYTJmOGRmYTE2MjQuLmMzNWEwNThiOTRhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50
LmNwcApAQCAtMTIwNywxMCArMTIwNywxNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8SGlnaGxpZ2h0Q29u
ZmlnPiBJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0Q29uZmlnRnJvbUluc3BlY3RvcgogICAg
IHJldHVybiBoaWdobGlnaHRDb25maWc7CiB9CiAKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQor
dm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0SW5zcGVjdE1vZGVFbmFibGVkKEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgYm9vbCBlbmFibGVkLCBjb25zdCBKU09OOjpPYmplY3QqIGhpZ2hsaWdo
dENvbmZpZykKK3sKKyAgICBzZXRTZWFyY2hpbmdGb3JOb2RlKGVycm9yU3RyaW5nLCBlbmFibGVk
LCBoaWdobGlnaHRDb25maWcgPyBoaWdobGlnaHRDb25maWcgOiBudWxscHRyLCBmYWxzZSk7Cit9
CisjZWxzZQogdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0SW5zcGVjdE1vZGVFbmFibGVkKEVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgYm9vbCBlbmFibGVkLCBjb25zdCBKU09OOjpPYmplY3Qq
IGhpZ2hsaWdodENvbmZpZywgY29uc3QgYm9vbCogc2hvd1J1bGVycykKIHsKICAgICBzZXRTZWFy
Y2hpbmdGb3JOb2RlKGVycm9yU3RyaW5nLCBlbmFibGVkLCBoaWdobGlnaHRDb25maWcgPyBoaWdo
bGlnaHRDb25maWcgOiBudWxscHRyLCBzaG93UnVsZXJzICYmICpzaG93UnVsZXJzKTsKIH0KKyNl
bmRpZgogCiB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHRSZWN0KEVycm9yU3RyaW5n
JiwgaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGNvbnN0IEpTT046Ok9iamVj
dCogY29sb3IsIGNvbnN0IEpTT046Ok9iamVjdCogb3V0bGluZUNvbG9yLCBjb25zdCBib29sKiB1
c2VQYWdlQ29vcmRpbmF0ZXMpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
YWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmgKaW5kZXggN2RmMGU4M2ViNTMuLmU4YTc0ZjZkMDA3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRP
TUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JE
T01BZ2VudC5oCkBAIC0xMzEsNyArMTMxLDExIEBAIHB1YmxpYzoKICAgICB2b2lkIGRpc2NhcmRT
ZWFyY2hSZXN1bHRzKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBzZWFyY2hJZCkgb3ZlcnJp
ZGU7CiAgICAgdm9pZCByZXNvbHZlTm9kZShFcnJvclN0cmluZyYsIGludCBub2RlSWQsIGNvbnN0
IFN0cmluZyogb2JqZWN0R3JvdXAsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1l
OjpSZW1vdGVPYmplY3Q+JiByZXN1bHQpIG92ZXJyaWRlOwogICAgIHZvaWQgZ2V0QXR0cmlidXRl
cyhFcnJvclN0cmluZyYsIGludCBub2RlSWQsIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+
JiByZXN1bHQpIG92ZXJyaWRlOworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgdm9pZCBz
ZXRJbnNwZWN0TW9kZUVuYWJsZWQoRXJyb3JTdHJpbmcmLCBib29sIGVuYWJsZWQsIGNvbnN0IEpT
T046Ok9iamVjdCogaGlnaGxpZ2h0Q29uZmlnKSBvdmVycmlkZTsKKyNlbHNlCiAgICAgdm9pZCBz
ZXRJbnNwZWN0TW9kZUVuYWJsZWQoRXJyb3JTdHJpbmcmLCBib29sIGVuYWJsZWQsIGNvbnN0IEpT
T046Ok9iamVjdCogaGlnaGxpZ2h0Q29uZmlnLCBjb25zdCBib29sKiBzaG93UnVsZXJzKSBvdmVy
cmlkZTsKKyNlbmRpZgogICAgIHZvaWQgcmVxdWVzdE5vZGUoRXJyb3JTdHJpbmcmLCBjb25zdCBT
dHJpbmcmIG9iamVjdElkLCBpbnQqIG5vZGVJZCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBwdXNoTm9k
ZUJ5UGF0aFRvRnJvbnRlbmQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHBhdGgsIGludCog
bm9kZUlkKSBvdmVycmlkZTsKICAgICB2b2lkIGhpZGVIaWdobGlnaHQoRXJyb3JTdHJpbmcmKSBv
dmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yUGFnZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yUGFnZUFnZW50LmNwcAppbmRleCAwMmVkZDQzODU5Ni4uZTcwNzMxMDk1ZGEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUGFnZUFnZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclBhZ2VB
Z2VudC5jcHAKQEAgLTM1Niw3ICszNTYsNyBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6ZW5h
YmxlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKICAgICBzdG9wd2F0Y2gucmVzZXQoKTsKICAg
ICBzdG9wd2F0Y2guc3RhcnQoKTsKIAotI2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCisj
aWYgSEFWRShEQVJLX01PREVfQ1NTKQogICAgIGRlZmF1bHRBcHBlYXJhbmNlRGlkQ2hhbmdlKG1f
aW5zcGVjdGVkUGFnZS5kZWZhdWx0VXNlRGFya0FwcGVhcmFuY2UoKSk7CiAjZW5kaWYKIH0KQEAg
LTM2NywxMCArMzY3LDE0IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpkaXNhYmxlKEVycm9y
U3RyaW5nJikKIAogICAgIEVycm9yU3RyaW5nIHVudXNlZDsKICAgICBzZXRTaG93UGFpbnRSZWN0
cyh1bnVzZWQsIGZhbHNlKTsKKyNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBzZXRTaG93
UnVsZXJzKHVudXNlZCwgZmFsc2UpOworI2VuZGlmCiAgICAgb3ZlcnJpZGVVc2VyQWdlbnQodW51
c2VkLCBudWxscHRyKTsKICAgICBzZXRFbXVsYXRlZE1lZGlhKHVudXNlZCwgZW1wdHlTdHJpbmco
KSk7CisjaWYgSEFWRShEQVJLX01PREVfQ1NTKQogICAgIHNldEZvcmNlZEFwcGVhcmFuY2UodW51
c2VkLCBlbXB0eVN0cmluZygpKTsKKyNlbmRpZgogCiAgICAgYXV0byYgaW5zcGVjdGVkUGFnZVNl
dHRpbmdzID0gbV9pbnNwZWN0ZWRQYWdlLnNldHRpbmdzKCk7CiAgICAgaW5zcGVjdGVkUGFnZVNl
dHRpbmdzLnNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkSW5zcGVjdG9yT3ZlcnJpZGUoV1RG
OjpudWxsb3B0KTsKQEAgLTc3MCwxMCArNzc0LDEyIEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50
OjpzZWFyY2hJblJlc291cmNlcyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgdGV4dCwgY29u
CiAgICAgICAgIG5ldHdvcmtBZ2VudC0+c2VhcmNoT3RoZXJSZXF1ZXN0cyhyZWdleCwgcmVzdWx0
KTsKIH0KIAorI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQogdm9pZCBJbnNwZWN0b3JQYWdlQWdl
bnQ6OnNldFNob3dSdWxlcnMoRXJyb3JTdHJpbmcmLCBib29sIHNob3dSdWxlcnMpCiB7CiAgICAg
bV9vdmVybGF5LT5zZXRTaG93UnVsZXJzKHNob3dSdWxlcnMpOwogfQorI2VuZGlmCiAKIHZvaWQg
SW5zcGVjdG9yUGFnZUFnZW50OjpzZXRTaG93UGFpbnRSZWN0cyhFcnJvclN0cmluZyYsIGJvb2wg
c2hvdykKIHsKQEAgLTg2OSwxMCArODc1LDEyIEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50Ojpm
cmFtZUNsZWFyZWRTY2hlZHVsZWROYXZpZ2F0aW9uKEZyYW1lJiBmcmFtZSkKICAgICBtX2Zyb250
ZW5kRGlzcGF0Y2hlci0+ZnJhbWVDbGVhcmVkU2NoZWR1bGVkTmF2aWdhdGlvbihmcmFtZUlkKCZm
cmFtZSkpOwogfQogCisjaWYgSEFWRShEQVJLX01PREVfQ1NTKQogdm9pZCBJbnNwZWN0b3JQYWdl
QWdlbnQ6OmRlZmF1bHRBcHBlYXJhbmNlRGlkQ2hhbmdlKGJvb2wgdXNlRGFya0FwcGVhcmFuY2Up
CiB7CiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmRlZmF1bHRBcHBlYXJhbmNlRGlkQ2hhbmdl
KHVzZURhcmtBcHBlYXJhbmNlID8gSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6QXBwZWFyYW5j
ZTo6RGFyayA6IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkFwcGVhcmFuY2U6OkxpZ2h0KTsK
IH0KKyNlbmRpZgogCiB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6ZGlkQ2xlYXJXaW5kb3dPYmpl
Y3RJbldvcmxkKEZyYW1lJiBmcmFtZSwgRE9NV3JhcHBlcldvcmxkJiB3b3JsZCkKIHsKQEAgLTEw
MDgsMTMgKzEwMTYsOSBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6c2V0RW11bGF0ZWRNZWRp
YShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgbWVkaWEpCiAgICAgZG9jdW1lbnQtPmV2YWx1
YXRlTWVkaWFRdWVyaWVzQW5kUmVwb3J0Q2hhbmdlcygpOwogfQogCisjaWYgSEFWRShEQVJLX01P
REVfQ1NTKQogdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNldEZvcmNlZEFwcGVhcmFuY2UoRXJy
b3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGFwcGVhcmFuY2UpCiB7Ci0gICAgaWYgKGFwcGVhcmFu
Y2UgPT0gbV9mb3JjZWRBcHBlYXJhbmNlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2ZvcmNl
ZEFwcGVhcmFuY2UgPSBhcHBlYXJhbmNlOwotCiAgICAgaWYgKGFwcGVhcmFuY2UgPT0gIkxpZ2h0
Il9zKQogICAgICAgICBtX2luc3BlY3RlZFBhZ2Uuc2V0VXNlRGFya0FwcGVhcmFuY2VPdmVycmlk
ZShmYWxzZSk7CiAgICAgZWxzZSBpZiAoYXBwZWFyYW5jZSA9PSAiRGFyayJfcykKQEAgLTEwMjIs
NiArMTAyNiw3IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzZXRGb3JjZWRBcHBlYXJhbmNl
KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBhcHBlYXJhCiAgICAgZWxzZQogICAgICAgICBt
X2luc3BlY3RlZFBhZ2Uuc2V0VXNlRGFya0FwcGVhcmFuY2VPdmVycmlkZShXVEY6Om51bGxvcHQp
OwogfQorI2VuZGlmCiAKIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjphcHBseVVzZXJBZ2VudE92
ZXJyaWRlKFN0cmluZyYgdXNlckFnZW50KQogewpAQCAtMTA2OSw5ICsxMDc0LDkgQEAgdm9pZCBJ
bnNwZWN0b3JQYWdlQWdlbnQ6OnNuYXBzaG90UmVjdChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGludCB4LCBpbnQgeSwgaW4KICAgICAqb3V0RGF0YVVSTCA9IHNuYXBzaG90LT50b0RhdGFVUkwo
ImltYWdlL3BuZyJfcywgV1RGOjpudWxsb3B0LCBQcmVzZXJ2ZVJlc29sdXRpb246Olllcyk7CiB9
CiAKKyNpZiBFTkFCTEUoV0VCX0FSQ0hJVkUpICYmIFVTRShDRikKIHZvaWQgSW5zcGVjdG9yUGFn
ZUFnZW50OjphcmNoaXZlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgU3RyaW5nKiBkYXRhKQog
ewotI2lmIEVOQUJMRShXRUJfQVJDSElWRSkgJiYgVVNFKENGKQogICAgIGF1dG8gYXJjaGl2ZSA9
IExlZ2FjeVdlYkFyY2hpdmU6OmNyZWF0ZShtX2luc3BlY3RlZFBhZ2UubWFpbkZyYW1lKCkpOwog
ICAgIGlmICghYXJjaGl2ZSkgewogICAgICAgICBlcnJvclN0cmluZyA9ICJDb3VsZCBub3QgY3Jl
YXRlIHdlYiBhcmNoaXZlIGZvciBtYWluIGZyYW1lIl9zOwpAQCAtMTA4MCwxMCArMTA4NSw3IEBA
IHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjphcmNoaXZlKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgU3RyaW5nKiBkYXRhKQogCiAgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gYnVmZmVyID0gYXJj
aGl2ZS0+cmF3RGF0YVJlcHJlc2VudGF0aW9uKCk7CiAgICAgKmRhdGEgPSBiYXNlNjRFbmNvZGUo
Q0ZEYXRhR2V0Qnl0ZVB0cihidWZmZXIuZ2V0KCkpLCBDRkRhdGFHZXRMZW5ndGgoYnVmZmVyLmdl
dCgpKSk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShkYXRhKTsKLSAgICBlcnJvclN0cmluZyA9
ICJOb3Qgc3VwcG9ydGVkIl9zOwotI2VuZGlmCiB9CisjZW5kaWYKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JQYWdlQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVj
dG9yUGFnZUFnZW50LmgKaW5kZXggNmM3NTgyOTUwMjMuLmE1NTI3Yzc4ZmUzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclBhZ2VBZ2VudC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUGFnZUFnZW50LmgK
QEAgLTEwOCwxMyArMTA4LDE5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEJvb3RzdHJhcFNjcmlw
dChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxTb3VyY2UpIGZpbmFsOwogICAg
IHZvaWQgc2VhcmNoSW5SZXNvdXJjZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZnJhbWVJ
ZCwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgcXVlcnksIGNvbnN0IGJvb2wqIG9w
dGlvbmFsQ2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogb3B0aW9uYWxJc1JlZ2V4LCBjb25zdCBT
dHJpbmcqIG9wdGlvbmFsUmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6
OlByb3RvY29sOjpHZW5lcmljVHlwZXM6OlNlYXJjaE1hdGNoPj4mKSBvdmVycmlkZTsKICAgICB2
b2lkIHNlYXJjaEluUmVzb3VyY2VzKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgY29uc3Qg
Ym9vbCogY2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogaXNSZWdleCwgUmVmUHRyPEpTT046OkFy
cmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6U2VhcmNoUmVzdWx0Pj4mKSBvdmVycmlk
ZTsKKyNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICB2b2lkIHNldFNob3dSdWxlcnMoRXJy
b3JTdHJpbmcmLCBib29sKSBvdmVycmlkZTsKKyNlbmRpZgogICAgIHZvaWQgc2V0U2hvd1BhaW50
UmVjdHMoRXJyb3JTdHJpbmcmLCBib29sIHNob3cpIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0RW11
bGF0ZWRNZWRpYShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOworI2lmIEhB
VkUoREFSS19NT0RFX0NTUykKICAgICB2b2lkIHNldEZvcmNlZEFwcGVhcmFuY2UoRXJyb3JTdHJp
bmcmLCBjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKKyNlbmRpZgogICAgIHZvaWQgc25hcHNob3RO
b2RlKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCwgU3RyaW5nKiBvdXREYXRhVVJMKSBvdmVycmlk
ZTsKICAgICB2b2lkIHNuYXBzaG90UmVjdChFcnJvclN0cmluZyYsIGludCB4LCBpbnQgeSwgaW50
IHdpZHRoLCBpbnQgaGVpZ2h0LCBjb25zdCBTdHJpbmcmIGNvb3JkaW5hdGVTeXN0ZW0sIFN0cmlu
Zyogb3V0RGF0YVVSTCkgb3ZlcnJpZGU7CisjaWYgRU5BQkxFKFdFQl9BUkNISVZFKSAmJiBVU0Uo
Q0YpCiAgICAgdm9pZCBhcmNoaXZlKEVycm9yU3RyaW5nJiwgU3RyaW5nKiBkYXRhKSBvdmVycmlk
ZTsKKyNlbmRpZgogCiAgICAgLy8gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uCiAgICAgdm9pZCBk
b21Db250ZW50RXZlbnRGaXJlZCgpOwpAQCAtMTI2LDcgKzEzMiw5IEBAIHB1YmxpYzoKICAgICB2
b2lkIGZyYW1lU3RvcHBlZExvYWRpbmcoRnJhbWUmKTsKICAgICB2b2lkIGZyYW1lU2NoZWR1bGVk
TmF2aWdhdGlvbihGcmFtZSYsIFNlY29uZHMgZGVsYXkpOwogICAgIHZvaWQgZnJhbWVDbGVhcmVk
U2NoZWR1bGVkTmF2aWdhdGlvbihGcmFtZSYpOworI2lmIEhBVkUoREFSS19NT0RFX0NTUykKICAg
ICB2b2lkIGRlZmF1bHRBcHBlYXJhbmNlRGlkQ2hhbmdlKGJvb2wgdXNlRGFya0FwcGVhcmFuY2Up
OworI2VuZGlmCiAgICAgdm9pZCBhcHBseVVzZXJBZ2VudE92ZXJyaWRlKFN0cmluZyYpOwogICAg
IHZvaWQgYXBwbHlFbXVsYXRlZE1lZGlhKFN0cmluZyYpOwogICAgIHZvaWQgZGlkQ2xlYXJXaW5k
b3dPYmplY3RJbldvcmxkKEZyYW1lJiwgRE9NV3JhcHBlcldvcmxkJik7CkBAIC0xNjEsNyArMTY5
LDYgQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPERvY3VtZW50TG9hZGVyKiwgU3RyaW5nPiBtX2xv
YWRlclRvSWRlbnRpZmllcjsKICAgICBTdHJpbmcgbV91c2VyQWdlbnRPdmVycmlkZTsKICAgICBT
dHJpbmcgbV9lbXVsYXRlZE1lZGlhOwotICAgIFN0cmluZyBtX2ZvcmNlZEFwcGVhcmFuY2U7CiAg
ICAgU3RyaW5nIG1fYm9vdHN0cmFwU2NyaXB0OwogICAgIGJvb2wgbV9pc0ZpcnN0TGF5b3V0QWZ0
ZXJPbkxvYWQgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9zaG93UGFpbnRSZWN0cyB7IGZhbHNlIH07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9CYXNlL01h
aW4uanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9CYXNlL01haW4uanMK
aW5kZXggZTViNDMyYzJjYjguLjM1NDM5MThjMTcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9CYXNlL01haW4uanMKKysrIGIvU291cmNlL1dlYkluc3Bl
Y3RvclVJL1VzZXJJbnRlcmZhY2UvQmFzZS9NYWluLmpzCkBAIC0yMzkzLDcgKzIzOTMsNyBAQCBX
SS5fdXBkYXRlRG93bmxvYWRUYWJCYXJCdXR0b24gPSBmdW5jdGlvbigpCiAgICAgaWYgKCFXSS5f
cmVsb2FkVGFiQmFyQnV0dG9uKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIUluc3BlY3Rv
ckJhY2tlbmQuaGFzRG9tYWluKCJQYWdlIikpIHsKKyAgICBpZiAoIUluc3BlY3RvckJhY2tlbmQu
aGFzQ29tbWFuZCgiUGFnZS5hcmNoaXZlIikpIHsKICAgICAgICAgV0kuX2Rvd25sb2FkVGFiQmFy
QnV0dG9uLmhpZGRlbiA9IHRydWU7CiAgICAgICAgIFdJLl91cGRhdGVUYWJCYXJEaXZpZGVycygp
OwogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3Vy
Y2VzLm1ha2UgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UKaW5kZXggYTEyYjc4
NjNjOTIuLjhjNThhNTc3MTQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3Vy
Y2VzLm1ha2UKKysrIGIvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy5tYWtlCkBAIC0zMTcs
MTcgKzMxNyw5IEBAIEFVVE9NQVRJT05fUFJPVE9DT0xfT1VUUFVUX0ZJTEVTID0gXAogIwogQVVU
T01BVElPTl9QUk9UT0NPTF9PVVRQVVRfUEFUVEVSTlMgPSAkKHN1YnN0IC4sJSwkKEFVVE9NQVRJ
T05fUFJPVE9DT0xfT1VUUFVUX0ZJTEVTKSkKIAotaWZlcSAoJChPUyksTUFDT1MpCi1pZmVxICgk
KHNoZWxsICQoQ0MpIC1zdGQ9Z251KysxeiAteCBjKysgLUUgLVAgLWRNICQoU0RLX0ZMQUdTKSAk
KFRBUkdFVF9UUklQTEVfRkxBR1MpICQoRlJBTUVXT1JLX0ZMQUdTKSAkKEhFQURFUl9GTEFHUykg
LWluY2x1ZGUgInd0Zi9QbGF0Zm9ybS5oIiAvZGV2L251bGwgfCBncmVwICcgV1RGX1BMQVRGT1JN
X0lPU19GQU1JTFkgJyB8IGN1dCAtZCcgJyAtZjMpLCAxKQotCUFVVE9NQVRJT05fQkFDS0VORF9Q
TEFURk9STV9BUkdVTUVOVFMgPSAtLXBsYXRmb3JtIGlPUwotZWxzZQotCUFVVE9NQVRJT05fQkFD
S0VORF9QTEFURk9STV9BUkdVTUVOVFMgPSAtLXBsYXRmb3JtIG1hY09TCi1lbmRpZgotZW5kaWYg
IyBNQUNPUwotCiAjIEpTT04tUlBDIEZyb250ZW5kIERpc3BhdGNoZXJzLCBCYWNrZW5kIERpc3Bh
dGNoZXJzLCBUeXBlIEJ1aWxkZXJzCiAkKEFVVE9NQVRJT05fUFJPVE9DT0xfT1VUUFVUX1BBVFRF
Uk5TKSA6ICQoQVVUT01BVElPTl9QUk9UT0NPTF9JTlBVVF9GSUxFUykgJChBVVRPTUFUSU9OX1BS
T1RPQ09MX0dFTkVSQVRPUl9TQ1JJUFRTKQotCSQoUFlUSE9OKSAkKEphdmFTY3JpcHRDb3JlX1ND
UklQVFNfRElSKS9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkgLS1mcmFt
ZXdvcmsgV2ViS2l0ICQoQVVUT01BVElPTl9CQUNLRU5EX1BMQVRGT1JNX0FSR1VNRU5UUykgLS1i
YWNrZW5kIC0tb3V0cHV0RGlyIC4gJChBVVRPTUFUSU9OX1BST1RPQ09MX0lOUFVUX0ZJTEVTKQor
CSQoUFlUSE9OKSAkKEphdmFTY3JpcHRDb3JlX1NDUklQVFNfRElSKS9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkgLS1mcmFtZXdvcmsgV2ViS2l0IC0tYmFja2VuZCAtLW91
dHB1dERpciAuICQoQVVUT01BVElPTl9QUk9UT0NPTF9JTlBVVF9GSUxFUykKIAogYWxsIDogJChB
VVRPTUFUSU9OX1BST1RPQ09MX09VVFBVVF9GSUxFUykKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9QbGF0Zm9ybU1hYy5jbWFrZSBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1NYWMuY21ha2UK
aW5kZXggNDhlMTYwMTNkY2IuLjRjMmQzMGJlYmY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1BsYXRmb3JtTWFjLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1NYWMuY21ha2UK
QEAgLTQ4MCwxMCArNDgwLDYgQEAgZm9yZWFjaCAoX2ZpbGUgJHtPYmpDRm9yd2FyZGluZ0hlYWRl
cnN9KQogICAgIGZpbGUoV1JJVEUgJHtGT1JXQVJESU5HX0hFQURFUlNfRElSfS9XZWJLaXQvJHtf
ZmlsZX0gIiNpbXBvcnQgPFdlYktpdExlZ2FjeS8ke19maWxlfT4iKQogZW5kZm9yZWFjaCAoKQog
Ci1saXN0KEFQUEVORCBXZWJLaXRfQVVUT01BVElPTl9QUk9UT0NPTF9HRU5FUkFUT1JfRVhUUkFf
RkxBR1MKLSAgICAtLXBsYXRmb3JtPW1hY09TCi0pCi0KIHNldChTZWNJdGVtU2hpbURpcmVjdG9y
eSAke0NNQUtFX0xJQlJBUllfT1VUUFVUX0RJUkVDVE9SWX0vV2ViS2l0LmZyYW1ld29yay9WZXJz
aW9ucy9BL0ZyYW1ld29ya3MpCiBhZGRfbGlicmFyeShTZWNJdGVtU2hpbSBTSEFSRUQgV2ViUHJv
Y2Vzcy9tYWMvU2VjSXRlbVNoaW1MaWJyYXJ5Lm1tKQogV0VCS0lUX0NSRUFURV9TWU1MSU5LKFNl
Y0l0ZW1TaGltICR7U2VjSXRlbVNoaW1EaXJlY3Rvcnl9ICR7Q01BS0VfTElCUkFSWV9PVVRQVVRf
RElSRUNUT1JZfS9XZWJLaXQuZnJhbWV3b3JrL0ZyYW1ld29ya3MpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL0F1dG9tYXRpb24uanNvbiBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vQXV0b21hdGlvbi5qc29uCmluZGV4IDdmNTUyNTcw
NWVmLi5mNTZlNmNmOTgwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0
b21hdGlvbi9BdXRvbWF0aW9uLmpzb24KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0
b21hdGlvbi9BdXRvbWF0aW9uLmpzb24KQEAgLTQzNyw3ICs0MzcsNyBAQAogICAgICAgICB7CiAg
ICAgICAgICAgICAibmFtZSI6ICJpbnNwZWN0QnJvd3NpbmdDb250ZXh0IiwKICAgICAgICAgICAg
ICJkZXNjcmlwdGlvbiI6ICJJbnNwZWN0IHRoZSBzcGVjaWZpZWQgYnJvd3NpbmcgY29udGV4dCB1
c2luZyBXZWIgSW5zcGVjdG9yLiIsCi0gICAgICAgICAgICAicGxhdGZvcm0iOiAibWFjb3MiLAor
ICAgICAgICAgICAgImNvbmRpdGlvbiI6ICJQTEFURk9STShNQUMpIiwKICAgICAgICAgICAgICJw
YXJhbWV0ZXJzIjogWwogICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiaGFuZGxlIiwgIiRyZWYi
OiAiQnJvd3NpbmdDb250ZXh0SGFuZGxlIiwgImRlc2NyaXB0aW9uIjogIlRoZSBoYW5kbGUgZm9y
IHRoZSBicm93c2luZyBjb250ZXh0IHRoYXQgc2hvdWxkIGJlIGluc3BlY3RlZC4iIH0sCiAgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJlbmFibGVBdXRvQ2FwdHVyaW5nIiwgInR5cGUiOiAiYm9v
bGVhbiIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJJZiB0aGlzIG9wdGlvbiBp
cyBwcmVzZW50IGFuZCBzZXQgdG8gdHJ1ZSwgdGhlIFdlYiBJbnNwZWN0b3Igd2lsbCBhdXRvbWF0
aWNhbGx5IHN0YXJ0IGEgdGltZWxpbmUgcmVjb3JkaW5nIG9mIHRoZSBzcGVjaWZpZWQgYnJvd3Np
bmcgY29udGV4dCBvbmNlIGl0IGlzIGF0dGFjaGVkLiBOb3RlIHRoYXQgdGhpcyBkaXNhYmxlcyB0
aGUgZGVidWdnZXIgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgcmVjb3JkaW5nLiIgfQpkaWZmIC0t
Z2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9pbnNwZWN0b3IvbWFpbi5weSBiL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvaW5zcGVjdG9yL21haW4ucHkKaW5kZXggMTQ2MmQ4MDE5ZDkuLjllMDkw
NGMyMGZmIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2luc3BlY3Rvci9tYWlu
LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvaW5zcGVjdG9yL21haW4ucHkKQEAgLTM4
LDE0ICszOCwxMyBAQCBjbGFzcyBJbnNwZWN0b3JHZW5lcmF0b3JUZXN0czoKICAgICAgICAgc2Vs
Zi5yZXNldF9yZXN1bHRzID0gcmVzZXRfcmVzdWx0cwogICAgICAgICBzZWxmLmV4ZWN1dGl2ZSA9
IGV4ZWN1dGl2ZQogCi0gICAgZGVmIGdlbmVyYXRlX2Zyb21fanNvbihzZWxmLCBqc29uX2ZpbGUs
IHBsYXRmb3JtLCBvdXRwdXRfZGlyZWN0b3J5KToKKyAgICBkZWYgZ2VuZXJhdGVfZnJvbV9qc29u
KHNlbGYsIGpzb25fZmlsZSwgb3V0cHV0X2RpcmVjdG9yeSk6CiAgICAgICAgIGNtZCA9IFsncHl0
aG9uJywKICAgICAgICAgICAgICAgICdKYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHknLAogICAgICAgICAgICAgICAg
Jy0tb3V0cHV0RGlyJywgb3V0cHV0X2RpcmVjdG9yeSwKICAgICAgICAgICAgICAgICctLWZvcmNl
JywKICAgICAgICAgICAgICAgICctLWZyYW1ld29yaycsICdUZXN0JywKICAgICAgICAgICAgICAg
ICctLXRlc3QnLAotICAgICAgICAgICAgICAgJy0tcGxhdGZvcm0nLCBwbGF0Zm9ybSwKICAgICAg
ICAgICAgICAgIGpzb25fZmlsZV0KIAogICAgICAgICBleGl0X2NvZGUgPSAwCkBAIC04OCw3ICs4
Nyw3IEBAIGNsYXNzIEluc3BlY3RvckdlbmVyYXRvclRlc3RzOgogICAgICAgICAgICAgICAgIHBy
aW50KCdQQVNTOiAlcycgJSBvdXRwdXRfZmlsZSkKICAgICAgICAgcmV0dXJuIGNoYW5nZXNfZm91
bmQKIAotICAgIGRlZiBydW5fdGVzdHMoc2VsZiwgcGxhdGZvcm0sIGlucHV0X2RpcmVjdG9yeSwg
cmVmZXJlbmNlX2RpcmVjdG9yeSk6CisgICAgZGVmIHJ1bl90ZXN0cyhzZWxmLCBpbnB1dF9kaXJl
Y3RvcnksIHJlZmVyZW5jZV9kaXJlY3RvcnkpOgogICAgICAgICB3b3JrX2RpcmVjdG9yeSA9IHJl
ZmVyZW5jZV9kaXJlY3RvcnkKIAogICAgICAgICBwYXNzZWQgPSBUcnVlCkBAIC0xMDEsNyArMTAw
LDcgQEAgY2xhc3MgSW5zcGVjdG9yR2VuZXJhdG9yVGVzdHM6CiAgICAgICAgICAgICBpZiBub3Qg
c2VsZi5yZXNldF9yZXN1bHRzOgogICAgICAgICAgICAgICAgIHdvcmtfZGlyZWN0b3J5ID0gdGVt
cGZpbGUubWtkdGVtcCgpCiAKLSAgICAgICAgICAgIGlmIHNlbGYuZ2VuZXJhdGVfZnJvbV9qc29u
KG9zLnBhdGguam9pbihpbnB1dF9kaXJlY3RvcnksIGlucHV0X2ZpbGUpLCBwbGF0Zm9ybSwgd29y
a19kaXJlY3RvcnkpOgorICAgICAgICAgICAgaWYgc2VsZi5nZW5lcmF0ZV9mcm9tX2pzb24ob3Mu
cGF0aC5qb2luKGlucHV0X2RpcmVjdG9yeSwgaW5wdXRfZmlsZSksIHdvcmtfZGlyZWN0b3J5KToK
ICAgICAgICAgICAgICAgICBwYXNzZWQgPSBGYWxzZQogCiAgICAgICAgICAgICBpZiBzZWxmLnJl
c2V0X3Jlc3VsdHM6CkBAIC0xMjIsMjEgKzEyMSwxMCBAQCBjbGFzcyBJbnNwZWN0b3JHZW5lcmF0
b3JUZXN0czoKICAgICAgICAgYWxsX3Rlc3RzX3Bhc3NlZCA9IFRydWUKIAogICAgICAgICBiYXNl
X2RpcmVjdG9yeSA9IG9zLnBhdGguam9pbignSmF2YVNjcmlwdENvcmUnLCAnaW5zcGVjdG9yJywg
J3NjcmlwdHMnLCAndGVzdHMnKQotCi0gICAgICAgIHBsYXRmb3JtX2RpcmVjdG9yaWVzID0gewot
ICAgICAgICAgICAgJ21hY29zJzogJ21hYycsCi0gICAgICAgICAgICAnaW9zJzogJ2lvcycsCi0g
ICAgICAgICAgICAnZ2VuZXJpYyc6ICdnZW5lcmljJywKLSAgICAgICAgICAgICdhbGwnOiAnYWxs
JywKLSAgICAgICAgfQotCi0gICAgICAgIGZvciBwbGF0Zm9ybV9uYW1lLCBwbGF0Zm9ybV9kaXJl
Y3RvcnkgaW4gcGxhdGZvcm1fZGlyZWN0b3JpZXMuaXRlcml0ZW1zKCk6Ci0gICAgICAgICAgICBp
bnB1dF9kaXJlY3RvcnkgPSBvcy5wYXRoLmpvaW4oYmFzZV9kaXJlY3RvcnksIHBsYXRmb3JtX2Rp
cmVjdG9yeSkKLSAgICAgICAgICAgIHJlZmVyZW5jZV9kaXJlY3RvcnkgPSBvcy5wYXRoLmpvaW4o
aW5wdXRfZGlyZWN0b3J5LCAnZXhwZWN0ZWQnKQotICAgICAgICAgICAgaWYgbm90IG9zLnBhdGgu
aXNkaXIoaW5wdXRfZGlyZWN0b3J5KSBvciBub3Qgb3MucGF0aC5pc2RpcihyZWZlcmVuY2VfZGly
ZWN0b3J5KToKLSAgICAgICAgICAgICAgICBjb250aW51ZQotCi0gICAgICAgICAgICBhbGxfdGVz
dHNfcGFzc2VkID0gYWxsX3Rlc3RzX3Bhc3NlZCBhbmQgc2VsZi5ydW5fdGVzdHMocGxhdGZvcm1f
bmFtZSwgaW5wdXRfZGlyZWN0b3J5LCByZWZlcmVuY2VfZGlyZWN0b3J5KQorICAgICAgICBpbnB1
dF9kaXJlY3RvcnkgPSBiYXNlX2RpcmVjdG9yeQorICAgICAgICByZWZlcmVuY2VfZGlyZWN0b3J5
ID0gb3MucGF0aC5qb2luKGlucHV0X2RpcmVjdG9yeSwgJ2V4cGVjdGVkJykKKyAgICAgICAgaWYg
b3MucGF0aC5pc2RpcihpbnB1dF9kaXJlY3RvcnkpIGFuZCBvcy5wYXRoLmlzZGlyKHJlZmVyZW5j
ZV9kaXJlY3RvcnkpOgorICAgICAgICAgICAgYWxsX3Rlc3RzX3Bhc3NlZCA9IHNlbGYucnVuX3Rl
c3RzKGlucHV0X2RpcmVjdG9yeSwgcmVmZXJlbmNlX2RpcmVjdG9yeSkKIAogICAgICAgICBwcmlu
dCgnJykKICAgICAgICAgaWYgYWxsX3Rlc3RzX3Bhc3NlZDoK
</data>
<flag name="commit-queue"
          id="414929"
          type_id="3"
          status="-"
          setter="hi"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>399507</attachid>
            <date>2020-05-15 13:45:21 -0700</date>
            <delta_ts>2020-05-15 16:21:19 -0700</delta_ts>
            <desc>[Patch] WIP</desc>
            <filename>210014.diff</filename>
            <type>text/plain</type>
            <size>2686472</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKaW5kZXggMDBkMmE1N2Iz
ZWQuLjQzYmZjNmQxZDJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZl
ZFNvdXJjZXMubWFrZQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMu
bWFrZQpAQCAtNDYsNiArNDYsMjAgQEAgZWxzZQogICAgIERFTEVURSA9IHJtIC1mCiBlbmRpZgog
CitGUkFNRVdPUktfRkxBR1MgPSAkKHNoZWxsIGVjaG8gJChCVUlMVF9QUk9EVUNUU19ESVIpICQo
RlJBTUVXT1JLX1NFQVJDSF9QQVRIUykgJChTWVNURU1fRlJBTUVXT1JLX1NFQVJDSF9QQVRIUykg
fCBwZXJsIC1lICdwcmludCAiLUYgIiAuIGpvaW4oIiAtRiAiLCBzcGxpdCgiICIsIDw+KSk7JykK
K0hFQURFUl9GTEFHUyA9ICQoc2hlbGwgZWNobyAkKEJVSUxUX1BST0RVQ1RTX0RJUikgJChIRUFE
RVJfU0VBUkNIX1BBVEhTKSAkKFNZU1RFTV9IRUFERVJfU0VBUkNIX1BBVEhTKSB8IHBlcmwgLWUg
J3ByaW50ICItSSAiIC4gam9pbigiIC1JICIsIHNwbGl0KCIgIiwgPD4pKTsnKQorCitURVhUX1BS
RVBST0NFU1NPUl9GTEFHUz0tRSAtUCAtdworCitpZm5lcSAoJChTREtST09UKSwpCisJU0RLX0ZM
QUdTPS1pc3lzcm9vdCAkKFNES1JPT1QpCitlbmRpZgorCitpZmVxICgkKFVTRV9MTFZNX1RBUkdF
VF9UUklQTEVTX0ZPUl9DTEFORyksWUVTKQorCVdLX0NVUlJFTlRfQVJDSD0kKHdvcmQgMSwgJChB
UkNIUykpCisJVEFSR0VUX1RSSVBMRV9GTEFHUz0tdGFyZ2V0ICQoV0tfQ1VSUkVOVF9BUkNIKS0k
KExMVk1fVEFSR0VUX1RSSVBMRV9WRU5ET1IpLSQoTExWTV9UQVJHRVRfVFJJUExFX09TX1ZFUlNJ
T04pJChMTFZNX1RBUkdFVF9UUklQTEVfU1VGRklYKQorZW5kaWYKKwogIyAtLS0tLS0tLQogCiAu
UEhPTlkgOiBhbGwKQEAgLTI0Myw2ICsyNTcsOCBAQCBJTlNQRUNUT1JfRE9NQUlOUyA6PSBcCiAg
ICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3RvY29sL0FuaW1hdGlvbi5qc29uIFwK
ICAgICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvQXBwbGljYXRpb25DYWNo
ZS5qc29uIFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvQXVkaXQu
anNvbiBcCisgICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3RvY29sL0Jyb3dzZXIu
anNvbiBcCisgICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3RvY29sL0NQVVByb2Zp
bGVyLmpzb24gXAogICAgICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9wcm90b2NvbC9DU1Mu
anNvbiBcCiAgICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3RvY29sL0NhbnZhcy5q
c29uIFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvQ29uc29sZS5q
c29uIFwKQEAgLTI1MSwzNSArMjY3LDI0IEBAIElOU1BFQ1RPUl9ET01BSU5TIDo9IFwKICAgICAk
KEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvRE9NU3RvcmFnZS5qc29uIFwKICAg
ICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvRGF0YWJhc2UuanNvbiBcCiAg
ICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3RvY29sL0RlYnVnZ2VyLmpzb24gXAot
ICAgICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9wcm90b2NvbC9Ccm93c2VyLmpzb24gXAog
ICAgICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9wcm90b2NvbC9HZW5lcmljVHlwZXMuanNv
biBcCiAgICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3RvY29sL0hlYXAuanNvbiBc
CisgICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3RvY29sL0luZGV4ZWREQi5qc29u
IFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvSW5zcGVjdG9yLmpz
b24gXAogICAgICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9wcm90b2NvbC9MYXllclRyZWUu
anNvbiBcCisgICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3RvY29sL01lbW9yeS5q
c29uIFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvTmV0d29yay5q
c29uIFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvUGFnZS5qc29u
IFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvUmVjb3JkaW5nLmpz
b24gXAogICAgICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9wcm90b2NvbC9SdW50aW1lLmpz
b24gXAogICAgICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9wcm90b2NvbC9TY3JpcHRQcm9m
aWxlci5qc29uIFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvU2Vj
dXJpdHkuanNvbiBcCisgICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3RvY29sL1Nl
cnZpY2VXb3JrZXIuanNvbiBcCiAgICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3Rv
Y29sL1RhcmdldC5qc29uIFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9j
b2wvVGltZWxpbmUuanNvbiBcCiAgICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3Rv
Y29sL1dvcmtlci5qc29uIFwKICMKIAotaWZlcSAoJChmaW5kc3RyaW5nIEVOQUJMRV9JTkRFWEVE
X0RBVEFCQVNFLCQoRkVBVFVSRV9ERUZJTkVTKSksIEVOQUJMRV9JTkRFWEVEX0RBVEFCQVNFKQot
ICAgIElOU1BFQ1RPUl9ET01BSU5TIDo9ICQoSU5TUEVDVE9SX0RPTUFJTlMpICQoSmF2YVNjcmlw
dENvcmUpL2luc3BlY3Rvci9wcm90b2NvbC9JbmRleGVkREIuanNvbgotZW5kaWYKLQotaWZlcSAo
JChmaW5kc3RyaW5nIEVOQUJMRV9SRVNPVVJDRV9VU0FHRSwkKEZFQVRVUkVfREVGSU5FUykpLCBF
TkFCTEVfUkVTT1VSQ0VfVVNBR0UpCi0gICAgSU5TUEVDVE9SX0RPTUFJTlMgOj0gJChJTlNQRUNU
T1JfRE9NQUlOUykgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3RvY29sL0NQVVByb2Zp
bGVyLmpzb24KLSAgICBJTlNQRUNUT1JfRE9NQUlOUyA6PSAkKElOU1BFQ1RPUl9ET01BSU5TKSAk
KEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvTWVtb3J5Lmpzb24KLWVuZGlmCi0K
LWlmZXEgKCQoZmluZHN0cmluZyBFTkFCTEVfU0VSVklDRV9XT1JLRVIsJChGRUFUVVJFX0RFRklO
RVMpKSwgRU5BQkxFX1NFUlZJQ0VfV09SS0VSKQotICAgIElOU1BFQ1RPUl9ET01BSU5TIDo9ICQo
SU5TUEVDVE9SX0RPTUFJTlMpICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9wcm90b2NvbC9T
ZXJ2aWNlV29ya2VyLmpzb24KLWVuZGlmCi0KIElOU1BFQ1RPUl9HRU5FUkFUT1JfU0NSSVBUUyA9
IFwKIAkkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL19faW5pdF9f
LnB5IFwKIAkkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2NwcF9n
ZW5lcmF0b3JfdGVtcGxhdGVzLnB5IFwKQEAgLTMyNyw2ICszMzIsOSBAQCBDb21iaW5lZERvbWFp
bnMuanNvbiA6ICQoSmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVIpL2dlbmVyYXRlLWNvbWJpbmVk
LWluc3BlY3RvcgogIyBJbnNwZWN0b3IgQmFja2VuZCBEaXNwYXRjaGVycywgRnJvbnRlbmQgRGlz
cGF0Y2hlcnMsIFR5cGUgQnVpbGRlcnMKICQoSU5TUEVDVE9SX0RJU1BBVENIRVJfRklMRVNfUEFU
VEVSTlMpIDogQ29tYmluZWREb21haW5zLmpzb24gJChJTlNQRUNUT1JfR0VORVJBVE9SX1NDUklQ
VFMpCiAJJChQWVRIT04pICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weSAtLWZyYW1ld29yayBKYXZhU2NyaXB0
Q29yZSAtLW91dHB1dERpciBpbnNwZWN0b3IgLi9Db21iaW5lZERvbWFpbnMuanNvbgorCW12IGlu
c3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMgaW5zcGVjdG9yL0luc3BlY3RvckJh
Y2tlbmRDb21tYW5kcy5qcy5pbgorCSQoQ0MpICQoU0RLX0ZMQUdTKSAkKFRBUkdFVF9UUklQTEVf
RkxBR1MpICQoVEVYVF9QUkVQUk9DRVNTT1JfRkxBR1MpICQoRlJBTUVXT1JLX0ZMQUdTKSAkKEhF
QURFUl9GTEFHUykgLWluY2x1ZGUgInd0Zi9QbGF0Zm9ybS5oIiAtIDwgaW5zcGVjdG9yL0luc3Bl
Y3RvckJhY2tlbmRDb21tYW5kcy5qcy5pbiA+IGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kQ29t
bWFuZHMuanMub3V0CisJdHIgLXMgIlxuIiA8IGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kQ29t
bWFuZHMuanMub3V0ID4gaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwogCiBJ
bmplY3RlZFNjcmlwdFNvdXJjZS5oIDogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0U291cmNlLmpz
ICQoSmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVIpL2pzbWluLnB5ICQoSmF2YVNjcmlwdENvcmVf
U0NSSVBUU19ESVIpL3h4ZC5wbAogCWVjaG8gIi8vIyBzb3VyY2VVUkw9X19JbmplY3RlZFNjcmlw
dF9JbmplY3RlZFNjcmlwdFNvdXJjZS5qcyIgPiAuL0luamVjdGVkU2NyaXB0U291cmNlLm1pbi5q
cwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9D
UFVQcm9maWxlci5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2Nv
bC9DUFVQcm9maWxlci5qc29uCmluZGV4IGNmYWNkMDFkYjczLi5lMTc5MjIyMDc5NSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9DUFVQcm9maWxl
ci5qc29uCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvQ1BV
UHJvZmlsZXIuanNvbgpAQCAtMSw3ICsxLDcgQEAKIHsKICAgICAiZG9tYWluIjogIkNQVVByb2Zp
bGVyIiwKICAgICAiZGVzY3JpcHRpb24iOiAiQ1BVUHJvZmlsZXIgZG9tYWluIGV4cG9zZXMgY3B1
IHVzYWdlIHRyYWNraW5nLiIsCi0gICAgImZlYXR1cmVHdWFyZCI6ICJFTkFCTEUoUkVTT1VSQ0Vf
VVNBR0UpIiwKKyAgICAiY29uZGl0aW9uIjogIkVOQUJMRShSRVNPVVJDRV9VU0FHRSkiLAogICAg
ICJkZWJ1Z2dhYmxlVHlwZXMiOiBbInBhZ2UiLCAid2ViLXBhZ2UiXSwKICAgICAidGFyZ2V0VHlw
ZXMiOiBbInBhZ2UiXSwKICAgICAidHlwZXMiOiBbCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL0NhbnZhcy5qc29uIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9DYW52YXMuanNvbgppbmRleCBhYjU0NDQwZjA0YS4u
NjA0NjAyZTUzNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
cHJvdG9jb2wvQ2FudmFzLmpzb24KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9wcm90b2NvbC9DYW52YXMuanNvbgpAQCAtMTEsNiArMTEsNyBAQAogICAgICAgICB9LAogICAg
ICAgICB7CiAgICAgICAgICAgICAiaWQiOiAiUHJvZ3JhbUlkIiwKKyAgICAgICAgICAgICJjb25k
aXRpb24iOiAiRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKSIsCiAgICAgICAgICAgICAi
dHlwZSI6ICJzdHJpbmciLAogICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBzaGFk
ZXIgcHJvZ3JhbSBpZGVudGlmaWVyLiIKICAgICAgICAgfSwKQEAgLTIyLDExICsyMywxMyBAQAog
ICAgICAgICB9LAogICAgICAgICB7CiAgICAgICAgICAgICAiaWQiOiAiUHJvZ3JhbVR5cGUiLAor
ICAgICAgICAgICAgImNvbmRpdGlvbiI6ICJFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUp
IiwKICAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCiAgICAgICAgICAgICAiZW51bSI6IFsi
Y29tcHV0ZSIsICJyZW5kZXIiXQogICAgICAgICB9LAogICAgICAgICB7CiAgICAgICAgICAgICAi
aWQiOiAiU2hhZGVyVHlwZSIsCisgICAgICAgICAgICAiY29uZGl0aW9uIjogIkVOQUJMRShXRUJH
TCkgfHwgRU5BQkxFKFdFQkdQVSkiLAogICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKICAg
ICAgICAgICAgICJlbnVtIjogWyJjb21wdXRlIiwgImZyYWdtZW50IiwgInZlcnRleCJdCiAgICAg
ICAgIH0sCkBAIC02MSw4ICs2NCw5IEBACiAgICAgICAgIH0sCiAgICAgICAgIHsKICAgICAgICAg
ICAgICJpZCI6ICJTaGFkZXJQcm9ncmFtIiwKLSAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIs
CiAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiSW5mb3JtYXRpb24gYWJvdXQgYSBXZWJHTC9X
ZWJHTDIgc2hhZGVyIHByb2dyYW0gb3IgV2ViR1BVIHNoYWRlciBwaXBlbGluZS4iLAorICAgICAg
ICAgICAgImNvbmRpdGlvbiI6ICJFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpIiwKKyAg
ICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCiAgICAgICAgICAgICAicHJvcGVydGllcyI6IFsK
ICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInByb2dyYW1JZCIsICIkcmVmIjogIlByb2dyYW1J
ZCIgfSwKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInByb2dyYW1UeXBlIiwgIiRyZWYiOiAi
UHJvZ3JhbVR5cGUiIH0sCkBAIC0xNDcsNiArMTUxLDcgQEAKICAgICAgICAgewogICAgICAgICAg
ICAgIm5hbWUiOiAicmVxdWVzdFNoYWRlclNvdXJjZSIsCiAgICAgICAgICAgICAiZGVzY3JpcHRp
b24iOiAiUmVxdWVzdHMgdGhlIHNvdXJjZSBvZiB0aGUgc2hhZGVyIG9mIHRoZSBnaXZlbiB0eXBl
IGZyb20gdGhlIHByb2dyYW0gd2l0aCB0aGUgZ2l2ZW4gaWQuIiwKKyAgICAgICAgICAgICJjb25k
aXRpb24iOiAiRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKSIsCiAgICAgICAgICAgICAi
cGFyYW1ldGVycyI6IFsKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInByb2dyYW1JZCIsICIk
cmVmIjogIlByb2dyYW1JZCIgfSwKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNoYWRlclR5
cGUiLCAiJHJlZiI6ICJTaGFkZXJUeXBlIiB9CkBAIC0xNTgsNiArMTYzLDcgQEAKICAgICAgICAg
ewogICAgICAgICAgICAgIm5hbWUiOiAidXBkYXRlU2hhZGVyIiwKICAgICAgICAgICAgICJkZXNj
cmlwdGlvbiI6ICJDb21waWxlcyBhbmQgbGlua3MgdGhlIHNoYWRlciB3aXRoIGlkZW50aWZpZXIg
YW5kIHR5cGUgd2l0aCB0aGUgZ2l2ZW4gc291cmNlIGNvZGUuIiwKKyAgICAgICAgICAgICJjb25k
aXRpb24iOiAiRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKSIsCiAgICAgICAgICAgICAi
cGFyYW1ldGVycyI6IFsKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInByb2dyYW1JZCIsICIk
cmVmIjogIlByb2dyYW1JZCIgfSwKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNoYWRlclR5
cGUiLCAiJHJlZiI6ICJTaGFkZXJUeXBlIiB9LApAQCAtMTY3LDYgKzE3Myw3IEBACiAgICAgICAg
IHsKICAgICAgICAgICAgICJuYW1lIjogInNldFNoYWRlclByb2dyYW1EaXNhYmxlZCIsCiAgICAg
ICAgICAgICAiZGVzY3JpcHRpb24iOiAiRW5hYmxlL2Rpc2FibGUgdGhlIHZpc2liaWxpdHkgb2Yg
dGhlIGdpdmVuIHNoYWRlciBwcm9ncmFtLiIsCisgICAgICAgICAgICAiY29uZGl0aW9uIjogIkVO
QUJMRShXRUJHTCkiLAogICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCiAgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJwcm9ncmFtSWQiLCAiJHJlZiI6ICJQcm9ncmFtSWQiIH0sCiAgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJkaXNhYmxlZCIsICJ0eXBlIjogImJvb2xlYW4iIH0KQEAgLTE3
NSw2ICsxODIsNyBAQAogICAgICAgICB7CiAgICAgICAgICAgICAibmFtZSI6ICJzZXRTaGFkZXJQ
cm9ncmFtSGlnaGxpZ2h0ZWQiLAogICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkVuYWJsZS9k
aXNhYmxlIGhpZ2hsaWdodGluZyBvZiB0aGUgZ2l2ZW4gc2hhZGVyIHByb2dyYW0uIiwKKyAgICAg
ICAgICAgICJjb25kaXRpb24iOiAiRU5BQkxFKFdFQkdMKSIsCiAgICAgICAgICAgICAicGFyYW1l
dGVycyI6IFsKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInByb2dyYW1JZCIsICIkcmVmIjog
IlByb2dyYW1JZCIgfSwKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImhpZ2hsaWdodGVkIiwg
InR5cGUiOiAiYm9vbGVhbiIgfQpAQCAtMjM4LDEyICsyNDYsMTQgQEAKICAgICAgICAgfSwKICAg
ICAgICAgewogICAgICAgICAgICAgIm5hbWUiOiAicHJvZ3JhbUNyZWF0ZWQiLAorICAgICAgICAg
ICAgImNvbmRpdGlvbiI6ICJFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpIiwKICAgICAg
ICAgICAgICJwYXJhbWV0ZXJzIjogWwogICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2hhZGVy
UHJvZ3JhbSIsICIkcmVmIjogIlNoYWRlclByb2dyYW0iIH0KICAgICAgICAgICAgIF0KICAgICAg
ICAgfSwKICAgICAgICAgewogICAgICAgICAgICAgIm5hbWUiOiAicHJvZ3JhbURlbGV0ZWQiLAor
ICAgICAgICAgICAgImNvbmRpdGlvbiI6ICJFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUp
IiwKICAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwogICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAicHJvZ3JhbUlkIiwgIiRyZWYiOiAiUHJvZ3JhbUlkIiB9CiAgICAgICAgICAgICBdCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL0RPTS5qc29u
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9ET00uanNvbgppbmRl
eCAzOGNiNDhiZWRmMi4uM2FhNGEyOGNjMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvRE9NLmpzb24KKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9wcm90b2NvbC9ET00uanNvbgpAQCAtMzk5LDYgKzM5OSwxNiBAQAogICAg
ICAgICB7CiAgICAgICAgICAgICAibmFtZSI6ICJzZXRJbnNwZWN0TW9kZUVuYWJsZWQiLAogICAg
ICAgICAgICAgImRlc2NyaXB0aW9uIjogIkVudGVycyB0aGUgJ2luc3BlY3QnIG1vZGUuIEluIHRo
aXMgbW9kZSwgZWxlbWVudHMgdGhhdCB1c2VyIGlzIGhvdmVyaW5nIG92ZXIgYXJlIGhpZ2hsaWdo
dGVkLiBCYWNrZW5kIHRoZW4gZ2VuZXJhdGVzICdpbnNwZWN0JyBjb21tYW5kIHVwb24gZWxlbWVu
dCBzZWxlY3Rpb24uIiwKKyAgICAgICAgICAgICJjb25kaXRpb24iOiAiUExBVEZPUk0oSU9TX0ZB
TUlMWSkiLAorICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJlbmFibGVkIiwgInR5cGUiOiAiYm9vbGVhbiIsICJkZXNjcmlwdGlvbiI6ICJUcnVl
IHRvIGVuYWJsZSBpbnNwZWN0aW9uIG1vZGUsIGZhbHNlIHRvIGRpc2FibGUgaXQuIiB9LAorICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAiaGlnaGxpZ2h0Q29uZmlnIiwgIiRyZWYiOiAiSGlnaGxp
Z2h0Q29uZmlnIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIkEgZGVzY3JpcHRv
ciBmb3IgdGhlIGhpZ2hsaWdodCBhcHBlYXJhbmNlIG9mIGhvdmVyZWQtb3ZlciBub2Rlcy4gTWF5
IGJlIG9taXR0ZWQgaWYgPGNvZGU+ZW5hYmxlZCA9PSBmYWxzZTwvY29kZT4uIiB9CisgICAgICAg
ICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogInNldElu
c3BlY3RNb2RlRW5hYmxlZCIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRW50ZXJzIHRo
ZSAnaW5zcGVjdCcgbW9kZS4gSW4gdGhpcyBtb2RlLCBlbGVtZW50cyB0aGF0IHVzZXIgaXMgaG92
ZXJpbmcgb3ZlciBhcmUgaGlnaGxpZ2h0ZWQuIEJhY2tlbmQgdGhlbiBnZW5lcmF0ZXMgJ2luc3Bl
Y3QnIGNvbW1hbmQgdXBvbiBlbGVtZW50IHNlbGVjdGlvbi4iLAorICAgICAgICAgICAgImNvbmRp
dGlvbiI6ICIhUExBVEZPUk0oSU9TX0ZBTUlMWSkiLAogICAgICAgICAgICAgInBhcmFtZXRlcnMi
OiBbCiAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJlbmFibGVkIiwgInR5cGUiOiAiYm9vbGVh
biIsICJkZXNjcmlwdGlvbiI6ICJUcnVlIHRvIGVuYWJsZSBpbnNwZWN0aW9uIG1vZGUsIGZhbHNl
IHRvIGRpc2FibGUgaXQuIiB9LAogICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiaGlnaGxpZ2h0
Q29uZmlnIiwgIiRyZWYiOiAiSGlnaGxpZ2h0Q29uZmlnIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRl
c2NyaXB0aW9uIjogIkEgZGVzY3JpcHRvciBmb3IgdGhlIGhpZ2hsaWdodCBhcHBlYXJhbmNlIG9m
IGhvdmVyZWQtb3ZlciBub2Rlcy4gTWF5IGJlIG9taXR0ZWQgaWYgPGNvZGU+ZW5hYmxlZCA9PSBm
YWxzZTwvY29kZT4uIiB9LApAQCAtNjg4LDYgKzY5OCw3IEBACiAgICAgICAgIHsKICAgICAgICAg
ICAgICJuYW1lIjogInBvd2VyRWZmaWNpZW50UGxheWJhY2tTdGF0ZUNoYW5nZWQiLAogICAgICAg
ICAgICAgImRlc2NyaXB0aW9uIjogIkNhbGxlZCB3aGVuIGFuIGVsZW1lbnQgZW50ZXJzL2V4aXRz
IGEgcG93ZXIgZWZmaWNpZW50IHBsYXliYWNrIHN0YXRlLiIsCisgICAgICAgICAgICAiY29uZGl0
aW9uIjogIkVOQUJMRShWSURFTykiLAogICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCiAgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJub2RlSWQiLCAiJHJlZiI6ICJOb2RlSWQiIH0sCiAgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAiJHJlZiI6ICJOZXR3b3JrLlRpbWVz
dGFtcCIgfSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJv
dG9jb2wvSW5kZXhlZERCLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3By
b3RvY29sL0luZGV4ZWREQi5qc29uCmluZGV4IDlkMjMwMDg5MzA3Li44NDNkMWE2ZGNiNCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9JbmRleGVk
REIuanNvbgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL0lu
ZGV4ZWREQi5qc29uCkBAIC0xLDYgKzEsNiBAQAogewogICAgICJkb21haW4iOiAiSW5kZXhlZERC
IiwKLSAgICAiZmVhdHVyZUd1YXJkIjogIkVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKSIsCisgICAg
ImNvbmRpdGlvbiI6ICJFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkiLAogICAgICJkZWJ1Z2dhYmxl
VHlwZXMiOiBbInBhZ2UiLCAid2ViLXBhZ2UiXSwKICAgICAidGFyZ2V0VHlwZXMiOiBbInBhZ2Ui
XSwKICAgICAidHlwZXMiOiBbCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3Byb3RvY29sL0luc3BlY3Rvci5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9wcm90b2NvbC9JbnNwZWN0b3IuanNvbgppbmRleCAyYmI4ZDYyODU1YS4uZmY5MmYz
ZTcwYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9j
b2wvSW5zcGVjdG9yLmpzb24KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9w
cm90b2NvbC9JbnNwZWN0b3IuanNvbgpAQCAtMzMsNiArMzMsNyBAQAogICAgICAgICB7CiAgICAg
ICAgICAgICAibmFtZSI6ICJhY3RpdmF0ZUV4dHJhRG9tYWlucyIsCiAgICAgICAgICAgICAiZGVz
Y3JpcHRpb24iOiAiRmlyZWQgd2hlbiB0aGUgYmFja2VuZCBoYXMgYWx0ZXJuYXRlIGRvbWFpbnMg
dGhhdCBuZWVkIHRvIGJlIGFjdGl2YXRlZC4iLAorICAgICAgICAgICAgImNvbmRpdGlvbiI6ICJF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykiLAogICAgICAgICAgICAgInBh
cmFtZXRlcnMiOiBbCiAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkb21haW5zIiwgInR5cGUi
OiAiYXJyYXkiLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSwgImRlc2NyaXB0aW9uIjog
IkRvbWFpbiBuYW1lcyB0aGF0IG5lZWQgYWN0aXZhdGlvbiIgfQogICAgICAgICAgICAgXQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9NZW1vcnku
anNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvTWVtb3J5Lmpz
b24KaW5kZXggMGMzZDkxNDM4NzEuLmY1YzlkYTFiMGYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL01lbW9yeS5qc29uCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvTWVtb3J5Lmpzb24KQEAgLTEsNyArMSw3
IEBACiB7CiAgICAgImRvbWFpbiI6ICJNZW1vcnkiLAogICAgICJkZXNjcmlwdGlvbiI6ICJNZW1v
cnkgZG9tYWluIGV4cG9zZXMgcGFnZSBtZW1vcnkgdHJhY2tpbmcuIiwKLSAgICAiZmVhdHVyZUd1
YXJkIjogIkVOQUJMRShSRVNPVVJDRV9VU0FHRSkiLAorICAgICJjb25kaXRpb24iOiAiRU5BQkxF
KFJFU09VUkNFX1VTQUdFKSIsCiAgICAgImRlYnVnZ2FibGVUeXBlcyI6IFsicGFnZSIsICJ3ZWIt
cGFnZSJdLAogICAgICJ0YXJnZXRUeXBlcyI6IFsicGFnZSJdLAogICAgICJ0eXBlcyI6IFsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvUGFnZS5q
c29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9QYWdlLmpzb24K
aW5kZXggZDI3NTEyYTRmMDAuLmVjNGY4NTk0OTkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL1BhZ2UuanNvbgorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL1BhZ2UuanNvbgpAQCAtNDUsNiArNDUsNyBAQAog
ICAgICAgICB7CiAgICAgICAgICAgICAiaWQiOiAiQXBwZWFyYW5jZSIsCiAgICAgICAgICAgICAi
dHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgImNvbmRpdGlvbiI6ICJFTkFCTEUoREFSS19N
T0RFX0NTUykiLAogICAgICAgICAgICAgImVudW0iOiBbIkxpZ2h0IiwgIkRhcmsiXSwKICAgICAg
ICAgICAgICJkZXNjcmlwdGlvbiI6ICJQYWdlIGFwcGVhcmFuY2UgbmFtZS4iCiAgICAgICAgIH0s
CkBAIC0yMjksNiArMjMwLDcgQEAKICAgICAgICAgewogICAgICAgICAgICAgIm5hbWUiOiAic2V0
U2hvd1J1bGVycyIsCiAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiUmVxdWVzdHMgdGhhdCBi
YWNrZW5kIGRyYXcgcnVsZXJzIGluIHRoZSBpbnNwZWN0b3Igb3ZlcmxheSIsCisgICAgICAgICAg
ICAiY29uZGl0aW9uIjogIiFQTEFURk9STShJT1NfRkFNSUxZKSIsCiAgICAgICAgICAgICAicGFy
YW1ldGVycyI6IFsKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInJlc3VsdCIsICJ0eXBlIjog
ImJvb2xlYW4iLCAiZGVzY3JpcHRpb24iOiAiVHJ1ZSBmb3Igc2hvd2luZyBydWxlcnMiIH0KICAg
ICAgICAgICAgIF0KQEAgLTI1MCw2ICsyNTIsNyBAQAogICAgICAgICB7CiAgICAgICAgICAgICAi
bmFtZSI6ICJzZXRGb3JjZWRBcHBlYXJhbmNlIiwKICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6
ICJGb3JjZXMgdGhlIGdpdmVuIGFwcGVhcmFuY2UgZm9yIHRoZSBwYWdlLiIsCisgICAgICAgICAg
ICAiY29uZGl0aW9uIjogIkVOQUJMRShEQVJLX01PREVfQ1NTKSIsCiAgICAgICAgICAgICAicGFy
YW1ldGVycyI6IFsKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImFwcGVhcmFuY2UiLCAiJHJl
ZiI6ICJBcHBlYXJhbmNlIiwgImRlc2NyaXB0aW9uIjogIkFwcGVhcmFuY2UgbmFtZSB0byBmb3Jj
ZS4gRW1wdHkgc3RyaW5nIGRpc2FibGVzIHRoZSBvdmVycmlkZS4iIH0KICAgICAgICAgICAgIF0K
QEAgLTI4MSw2ICsyODQsNyBAQAogICAgICAgICB7CiAgICAgICAgICAgICAibmFtZSI6ICJhcmNo
aXZlIiwKICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJHcmFiIGFuIGFyY2hpdmUgb2YgdGhl
IHBhZ2UuIiwKKyAgICAgICAgICAgICJjb25kaXRpb24iOiAiRU5BQkxFKFdFQl9BUkNISVZFKSAm
JiBVU0UoQ0YpIiwKICAgICAgICAgICAgICJyZXR1cm5zIjogWwogICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAiZGF0YSIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJCYXNlNjQt
ZW5jb2RlZCB3ZWIgYXJjaGl2ZS4iIH0KICAgICAgICAgICAgIF0KQEAgLTM0NSw2ICszNDksNyBA
QAogICAgICAgICB7CiAgICAgICAgICAgICAibmFtZSI6ICJkZWZhdWx0QXBwZWFyYW5jZURpZENo
YW5nZSIsCiAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRmlyZWQgd2hlbiBwYWdlJ3MgZGVm
YXVsdCBhcHBlYXJhbmNlIGNoYW5nZXMsIGV2ZW4gaWYgdGhlcmUgaXMgYSBmb3JjZWQgYXBwZWFy
YW5jZS4iLAorICAgICAgICAgICAgImNvbmRpdGlvbiI6ICJFTkFCTEUoREFSS19NT0RFX0NTUyki
LAogICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCiAgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJhcHBlYXJhbmNlIiwgIiRyZWYiOiAiQXBwZWFyYW5jZSIsICJkZXNjcmlwdGlvbiI6ICJOYW1l
IG9mIHRoZSBhcHBlYXJhbmNlIHRoYXQgaXMgYWN0aXZlIChub3QgY29uc2lkZXJpbmcgYW55IGZv
cmNlZCBhcHBlYXJhbmNlLikiIH0KICAgICAgICAgICAgIF0KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvU2VydmljZVdvcmtlci5qc29uIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9TZXJ2aWNlV29ya2VyLmpzb24K
aW5kZXggOGFjM2Q0ZjdkNmIuLjBjNTAzMGZiNjg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL1NlcnZpY2VXb3JrZXIuanNvbgorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL1NlcnZpY2VXb3JrZXIuanNvbgpA
QCAtMSw2ICsxLDcgQEAKIHsKICAgICAiZG9tYWluIjogIlNlcnZpY2VXb3JrZXIiLAogICAgICJk
ZXNjcmlwdGlvbiI6ICJBY3Rpb25zIGFuZCBldmVudHMgcmVsYXRlZCB0byB0aGUgaW5zcGVjdGVk
IHNlcnZpY2Ugd29ya2VyLiIsCisgICAgImNvbmRpdGlvbiI6ICJFTkFCTEUoU0VSVklDRV9XT1JL
RVIpIiwKICAgICAiZGVidWdnYWJsZVR5cGVzIjogWyJzZXJ2aWNlLXdvcmtlciJdLAogICAgICJ0
YXJnZXRUeXBlcyI6IFsic2VydmljZS13b3JrZXIiXSwKICAgICAidHlwZXMiOiBbCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9jcHBf
Z2VuZXJhdG9yX3RlbXBsYXRlcy5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5CmluZGV4IDk2YjU1ZTQx
NjJjLi5kMGM3YmU2ZDQ5MSAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vY3BwX2dlbmVyYXRv
cl90ZW1wbGF0ZXMucHkKQEAgLTEwOCw3ICsxMDgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRB
bHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZSR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hl
ciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5h
dGVEaXNwYXRjaGVyOyB9CiBwcml2YXRlOgogICAgIEFsdGVybmF0ZSR7ZG9tYWluTmFtZX1CYWNr
ZW5kRGlzcGF0Y2hlciogbV9hbHRlcm5hdGVEaXNwYXRjaGVyIHsgbnVsbHB0ciB9OwotI2VuZGlm
IiIiKQorI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKSIi
IikKIAogICAgIEJhY2tlbmREaXNwYXRjaGVySGVhZGVyQXN5bmNDb21tYW5kRGVjbGFyYXRpb24g
PSAoCiAgICAgIiIiICAgICR7Y2xhc3NBbmRFeHBvcnRNYWNyb30gJHtjYWxsYmFja05hbWV9IDog
cHVibGljIEJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UgewpAQCAtMTI3LDggKzEyNyw4
IEBAIHByaXZhdGU6CiAgICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRl
cnMpOwogCiAke2Rpc3BhdGNoQ2FzZXN9Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNw
YXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RG
b3VuZCwgIicke2RvbWFpbk5hbWV9LiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CisK
KyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNw
YXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIicke2RvbWFpbk5hbWV9LiIgKyBtZXRob2QgKyAiJyB3
YXMgbm90IGZvdW5kIik7CiB9IiIiKQogCiAgICAgQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRh
dGlvbkxhcmdlU3dpdGNoID0gKApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2FsdGVybmF0ZV9iYWNrZW5kX2Rp
c3BhdGNoZXJfaGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVh
ZGVyLnB5CmluZGV4IGU2Mjc4ODBlMTMzLi5kY2QwYmYzNDdhZiAxMDA3NTUKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Fs
dGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9hbHRlcm5hdGVf
YmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQpAQCAtODcsNyArODcsNyBAQCBjbGFzcyBDcHBB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgog
ICAgICAgICAgICAgJ2NvbW1hbmREZWNsYXJhdGlvbnMnOiAnXG4nLmpvaW4oY29tbWFuZF9kZWNs
YXJhdGlvbnMpLAogICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1
YXJkX2Zvcl9kb21haW4oZG9tYWluLCBUZW1wbGF0ZShDcHBUZW1wbGF0ZXMuQWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXJIZWFkZXJEb21haW5IYW5kbGVySW50ZXJmYWNlRGVjbGFyYXRpb24pLnN1
YnN0aXR1dGUoTm9uZSwgKipoYW5kbGVyX2FyZ3MpKQorICAgICAgICByZXR1cm4gc2VsZi53cmFw
X3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9uLCBUZW1wbGF0ZShDcHBU
ZW1wbGF0ZXMuQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJIZWFkZXJEb21haW5IYW5kbGVySW50
ZXJmYWNlRGVjbGFyYXRpb24pLnN1YnN0aXR1dGUoTm9uZSwgKipoYW5kbGVyX2FyZ3MpKQogCiAg
ICAgZGVmIF9nZW5lcmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKHNlbGYsIGNv
bW1hbmQpOgogICAgICAgICBsaW5lcyA9IFtdCkBAIC0xMDAsNCArMTAwLDQgQEAgY2xhc3MgQ3Bw
QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToK
ICAgICAgICAgICAgICdwYXJhbWV0ZXJzJzogJywgJy5qb2luKHBhcmFtZXRlcnMpLAogICAgICAg
ICB9CiAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHZpcnR1YWwgdm9pZCAlKGNvbW1hbmROYW1l
KXMoJShwYXJhbWV0ZXJzKXMpID0gMDsnICUgY29tbWFuZF9hcmdzKQotICAgICAgICByZXR1cm4g
J1xuJy5qb2luKGxpbmVzKQorICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9y
X2NvbmRpdGlvbihjb21tYW5kLmNvbmRpdGlvbiwgJ1xuJy5qb2luKGxpbmVzKSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0
Y2hlcl9oZWFkZXIucHkKaW5kZXggZTNmZTRlMTAwNDIuLjEwZDhmMTRiZDVmIDEwMDc1NQotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNw
YXRjaGVyX2hlYWRlci5weQpAQCAtOTEsNyArOTEsNyBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0
Y2hlckhlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICBsaW5lcyA9IFtdCiAg
ICAgICAgIGxpbmVzLmFwcGVuZCgnI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKScpCiAgICAgICAgIGZvciBkb21haW4gaW4gZG9tYWluczoKLSAgICAgICAgICAgIGxp
bmVzLmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgJ2NsYXNz
IEFsdGVybmF0ZSVzQmFja2VuZERpc3BhdGNoZXI7JyAlIGRvbWFpbi5kb21haW5fbmFtZSkpCisg
ICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlv
bihkb21haW4uY29uZGl0aW9uLCAnY2xhc3MgQWx0ZXJuYXRlJXNCYWNrZW5kRGlzcGF0Y2hlcjsn
ICUgZG9tYWluLmRvbWFpbl9uYW1lKSkKICAgICAgICAgbGluZXMuYXBwZW5kKCcjZW5kaWYgLy8g
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpJykKICAgICAgICAgcmV0dXJu
ICdcbicuam9pbihsaW5lcykKIApAQCAtMTEzLDcgKzExMyw3IEBAIGNsYXNzIENwcEJhY2tlbmRE
aXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgICAgICAnY29t
bWFuZERlY2xhcmF0aW9ucyc6ICJcbiIuam9pbihjb21tYW5kX2RlY2xhcmF0aW9ucykKICAgICAg
ICAgfQogCi0gICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRv
bWFpbiwgVGVtcGxhdGUoQ3BwVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVySGVhZGVyRG9tYWlu
SGFuZGxlckRlY2xhcmF0aW9uKS5zdWJzdGl0dXRlKE5vbmUsICoqaGFuZGxlcl9hcmdzKSkKKyAg
ICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZG9tYWluLmNv
bmRpdGlvbiwgVGVtcGxhdGUoQ3BwVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVySGVhZGVyRG9t
YWluSGFuZGxlckRlY2xhcmF0aW9uKS5zdWJzdGl0dXRlKE5vbmUsICoqaGFuZGxlcl9hcmdzKSkK
IAogICAgIGRlZiBfZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX3BhcmFtZXRlcihzZWxmLCBw
YXJhbWV0ZXIsIGNvbW1hbmQpOgogICAgICAgICBlbnVtX2FyZ3MgPSB7CkBAIC0xNjEsNyArMTYx
LDcgQEAgY2xhc3MgQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJh
dG9yKToKICAgICAgICAgICAgICdwYXJhbWV0ZXJzJzogIiwgIi5qb2luKHBhcmFtZXRlcnMpCiAg
ICAgICAgIH0KICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgdmlydHVhbCB2b2lkICUoY29tbWFu
ZE5hbWUpcyglKHBhcmFtZXRlcnMpcykgPSAwOycgJSBjb21tYW5kX2FyZ3MpCi0gICAgICAgIHJl
dHVybiAnXG4nLmpvaW4obGluZXMpCisgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFy
ZF9mb3JfY29uZGl0aW9uKGNvbW1hbmQuY29uZGl0aW9uLCAnXG4nLmpvaW4obGluZXMpKQogCiAg
ICAgZGVmIF9nZW5lcmF0ZV9hc3luY19oYW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKHNl
bGYsIGNvbW1hbmQpOgogICAgICAgICBjYWxsYmFja05hbWUgPSAiJXNDYWxsYmFjayIgJSB1Y2Zp
cnN0KGNvbW1hbmQuY29tbWFuZF9uYW1lKQpAQCAtMTkyLDcgKzE5Miw3IEBAIGNsYXNzIENwcEJh
Y2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgICAg
ICAnb3V0UGFyYW1ldGVycyc6ICIsICIuam9pbihvdXRfcGFyYW1ldGVycyksCiAgICAgICAgIH0K
IAotICAgICAgICByZXR1cm4gVGVtcGxhdGUoQ3BwVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVy
SGVhZGVyQXN5bmNDb21tYW5kRGVjbGFyYXRpb24pLnN1YnN0aXR1dGUoTm9uZSwgKipjb21tYW5k
X2FyZ3MpCisgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9u
KGNvbW1hbmQuY29uZGl0aW9uLCBUZW1wbGF0ZShDcHBUZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNo
ZXJIZWFkZXJBc3luY0NvbW1hbmREZWNsYXJhdGlvbikuc3Vic3RpdHV0ZShOb25lLCAqKmNvbW1h
bmRfYXJncykpCiAKICAgICBkZWYgX2dlbmVyYXRlX2Rpc3BhdGNoZXJfZGVjbGFyYXRpb25zX2Zv
cl9kb21haW4oc2VsZiwgZG9tYWluKToKICAgICAgICAgY2xhc3NDb21wb25lbnRzID0gWydjbGFz
cyddCkBAIC0yMjAsNyArMjIwLDcgQEAgY2xhc3MgQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJH
ZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgICAgICdjb21tYW5kRGVjbGFyYXRpb25z
JzogIlxuIi5qb2luKGRlY2xhcmF0aW9ucykKICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiBz
ZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgVGVtcGxhdGUoQ3BwVGVtcGxh
dGVzLkJhY2tlbmREaXNwYXRjaGVySGVhZGVyRG9tYWluRGlzcGF0Y2hlckRlY2xhcmF0aW9uKS5z
dWJzdGl0dXRlKE5vbmUsICoqaGFuZGxlcl9hcmdzKSkKKyAgICAgICAgcmV0dXJuIHNlbGYud3Jh
cF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZG9tYWluLmNvbmRpdGlvbiwgVGVtcGxhdGUoQ3Bw
VGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVySGVhZGVyRG9tYWluRGlzcGF0Y2hlckRlY2xhcmF0
aW9uKS5zdWJzdGl0dXRlKE5vbmUsICoqaGFuZGxlcl9hcmdzKSkKIAogICAgIGRlZiBfZ2VuZXJh
dGVfZGlzcGF0Y2hlcl9kZWNsYXJhdGlvbl9mb3JfY29tbWFuZChzZWxmLCBjb21tYW5kKToKLSAg
ICAgICAgcmV0dXJuICIgICAgdm9pZCAlcyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9i
amVjdD4mJiBwYXJhbWV0ZXJzKTsiICUgY29tbWFuZC5jb21tYW5kX25hbWUKKyAgICAgICAgcmV0
dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oY29tbWFuZC5jb25kaXRpb24s
ICIgICAgdm9pZCAlcyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJh
bWV0ZXJzKTsiICUgY29tbWFuZC5jb21tYW5kX25hbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2Vu
ZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9p
bXBsZW1lbnRhdGlvbi5weQppbmRleCBhMTU5NjFhNjQ3NC4uZGFmMTljOTUwZmIgMTAwNzU1Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Jh
Y2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQpAQCAtNjAsNyArNjAsNyBAQCBjbGFz
cyBDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKENwcEdlbmVyYXRv
cik6CiAgICAgICAgICAgICBzZWNvbmRhcnlfaW5jbHVkZXMuYXBwZW5kKCcnKQogICAgICAgICAg
ICAgc2Vjb25kYXJ5X2luY2x1ZGVzLmFwcGVuZCgnI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKScpCiAgICAgICAgICAgICBzZWNvbmRhcnlfaW5jbHVkZXMuYXBwZW5k
KCcjaW5jbHVkZSAiJXNBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCInICUgc2VsZi5wcm90
b2NvbF9uYW1lKCkpCi0gICAgICAgICAgICBzZWNvbmRhcnlfaW5jbHVkZXMuYXBwZW5kKCcjZW5k
aWYnKQorICAgICAgICAgICAgc2Vjb25kYXJ5X2luY2x1ZGVzLmFwcGVuZCgnI2VuZGlmIC8vIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKScpCiAKICAgICAgICAgaGVhZGVy
X2FyZ3MgPSB7CiAgICAgICAgICAgICAncHJpbWFyeUluY2x1ZGUnOiAnIiVzQmFja2VuZERpc3Bh
dGNoZXJzLmgiJyAlIHNlbGYucHJvdG9jb2xfbmFtZSgpLApAQCAtOTMsNyArOTMsNyBAQCBjbGFz
cyBDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKENwcEdlbmVyYXRv
cik6CiAgICAgICAgICAgICAnZG9tYWluTmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZQogICAgICAg
ICB9CiAgICAgICAgIGRlc3RydWN0b3IgPSAnJShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXI6On4lKGRvbWFpbk5hbWUpc0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfScg
JSBkZXN0cnVjdG9yX2FyZ3MKLSAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zv
cl9kb21haW4oZG9tYWluLCBkZXN0cnVjdG9yKQorICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dp
dGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9uLCBkZXN0cnVjdG9yKQogCiAg
ICAgZGVmIF9nZW5lcmF0ZV9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uc19mb3JfZG9tYWluKHNl
bGYsIGRvbWFpbik6CiAgICAgICAgIGltcGxlbWVudGF0aW9ucyA9IFtdCkBAIC0xMTUsMTcgKzEx
NSwyOSBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9y
KENwcEdlbmVyYXRvcik6CiAgICAgICAgICAgICAgICAgaW1wbGVtZW50YXRpb25zLmFwcGVuZChz
ZWxmLl9nZW5lcmF0ZV9hc3luY19kaXNwYXRjaGVyX2NsYXNzX2Zvcl9kb21haW4oY29tbWFuZCwg
ZG9tYWluKSkKICAgICAgICAgICAgIGltcGxlbWVudGF0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJh
dGVfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbl9mb3JfY29tbWFuZChjb21tYW5kLCBkb21haW4p
KQogCi0gICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFp
biwgJ1xuXG4nLmpvaW4oaW1wbGVtZW50YXRpb25zKSkKKyAgICAgICAgcmV0dXJuIHNlbGYud3Jh
cF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZG9tYWluLmNvbmRpdGlvbiwgJ1xuXG4nLmpvaW4o
aW1wbGVtZW50YXRpb25zKSkKIAogICAgIGRlZiBfZ2VuZXJhdGVfc21hbGxfZGlzcGF0Y2hlcl9z
d2l0Y2hfaW1wbGVtZW50YXRpb25fZm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgogICAgICAgICBj
b21tYW5kcyA9IHNlbGYuY29tbWFuZHNfZm9yX2RvbWFpbihkb21haW4pCiAKICAgICAgICAgY2Fz
ZXMgPSBbXQotICAgICAgICBjYXNlcy5hcHBlbmQoJyAgICBpZiAobWV0aG9kID09ICIlcyIpJyAl
IGNvbW1hbmRzWzBdLmNvbW1hbmRfbmFtZSkKLSAgICAgICAgY2FzZXMuYXBwZW5kKCcgICAgICAg
ICVzKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7JyAlIGNvbW1hbmRzWzBdLmNvbW1h
bmRfbmFtZSkKKworICAgICAgICBmaXJzdF9jb21tYW5kX3N0cmluZyA9ICJcbiIuam9pbihbCisg
ICAgICAgICAgICAnICAgIGlmIChtZXRob2QgPT0gIiVzIikgeycgJSBjb21tYW5kc1swXS5jb21t
YW5kX25hbWUsCisgICAgICAgICAgICAnICAgICAgICAlcyhyZXF1ZXN0SWQsIFdURk1vdmUocGFy
YW1ldGVycykpOycgJSBjb21tYW5kc1swXS5jb21tYW5kX25hbWUsCisgICAgICAgICAgICAnICAg
ICAgICByZXR1cm47JywKKyAgICAgICAgICAgICcgICAgfScsCisgICAgICAgIF0pCisgICAgICAg
IGNhc2VzLmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGNvbW1hbmRz
WzBdLmNvbmRpdGlvbiwgZmlyc3RfY29tbWFuZF9zdHJpbmcpKQorCiAgICAgICAgIGZvciBjb21t
YW5kIGluIGNvbW1hbmRzWzE6XToKLSAgICAgICAgICAgIGNhc2VzLmFwcGVuZCgnICAgIGVsc2Ug
aWYgKG1ldGhvZCA9PSAiJXMiKScgJSBjb21tYW5kLmNvbW1hbmRfbmFtZSkKLSAgICAgICAgICAg
IGNhc2VzLmFwcGVuZCgnICAgICAgICAlcyhyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykp
OycgJSBjb21tYW5kLmNvbW1hbmRfbmFtZSkKKyAgICAgICAgICAgIGFkZGl0aW9uYWxfY29tbWFu
ZF9zdHJpbmcgPSAiXG4iLmpvaW4oWworICAgICAgICAgICAgICAgICcgICAgaWYgKG1ldGhvZCA9
PSAiJXMiKSB7JyAlIGNvbW1hbmQuY29tbWFuZF9uYW1lLAorICAgICAgICAgICAgICAgICcgICAg
ICAgICVzKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7JyAlIGNvbW1hbmQuY29tbWFu
ZF9uYW1lLAorICAgICAgICAgICAgICAgICcgICAgICAgIHJldHVybjsnLAorICAgICAgICAgICAg
ICAgICcgICAgfScsCisgICAgICAgICAgICBdKQorICAgICAgICAgICAgY2FzZXMuYXBwZW5kKHNl
bGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oY29tbWFuZC5jb25kaXRpb24sIGFkZGl0
aW9uYWxfY29tbWFuZF9zdHJpbmcpKQogCiAgICAgICAgIHN3aXRjaF9hcmdzID0gewogICAgICAg
ICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUsCkBAIC0xNDMsNyArMTU1LDcg
QEAgY2xhc3MgQ3BwQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihDcHBH
ZW5lcmF0b3IpOgogICAgICAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9u
YW1lLAogICAgICAgICAgICAgICAgICdjb21tYW5kTmFtZSc6IGNvbW1hbmQuY29tbWFuZF9uYW1l
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlcy5hcHBlbmQoJyAgICAgICAgICAgIHsg
IiUoY29tbWFuZE5hbWUpcyIsICYlKGRvbWFpbk5hbWUpc0JhY2tlbmREaXNwYXRjaGVyOjolKGNv
bW1hbmROYW1lKXMgfSwnICUgYXJncykKKyAgICAgICAgICAgIGNhc2VzLmFwcGVuZChzZWxmLndy
YXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGNvbW1hbmQuY29uZGl0aW9uLCAnICAgICAgICAg
ICAgeyAiJShjb21tYW5kTmFtZSlzIiwgJiUoZG9tYWluTmFtZSlzQmFja2VuZERpc3BhdGNoZXI6
OiUoY29tbWFuZE5hbWUpcyB9LCcgJSBhcmdzKSkKIAogICAgICAgICBzd2l0Y2hfYXJncyA9IHsK
ICAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLApAQCAtMTg1LDcg
KzE5Nyw3IEBAIGNsYXNzIENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0
b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgICAgICdmb3JtYWxQYXJhbWV0ZXJzJzogIiwgIi5q
b2luKGZvcm1hbF9wYXJhbWV0ZXJzKSwKICAgICAgICAgICAgICdvdXRQYXJhbWV0ZXJBc3NpZ25t
ZW50cyc6ICJcbiIuam9pbihvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzKQogICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiBUZW1wbGF0ZShDcHBUZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNoZXJJbXBs
ZW1lbnRhdGlvbkFzeW5jQ29tbWFuZCkuc3Vic3RpdHV0ZShOb25lLCAqKmFzeW5jX2FyZ3MpCisg
ICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGNvbW1hbmQu
Y29uZGl0aW9uLCBUZW1wbGF0ZShDcHBUZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNoZXJJbXBsZW1l
bnRhdGlvbkFzeW5jQ29tbWFuZCkuc3Vic3RpdHV0ZShOb25lLCAqKmFzeW5jX2FyZ3MpKQogCiAg
ICAgZGVmIF9nZW5lcmF0ZV9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uX2Zvcl9jb21tYW5kKHNl
bGYsIGNvbW1hbmQsIGRvbWFpbik6CiAgICAgICAgIGluX3BhcmFtZXRlcl9kZWNsYXJhdGlvbnMg
PSBbXQpAQCAtMzA0LDcgKzMxNiw3IEBAIGNsYXNzIENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVt
ZW50YXRpb25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgICAgIGxpbmVzLmFwcGVu
ZCgnICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPiUoY29tbWFuZE5hbWUpcyglKGFsdGVy
bmF0ZUludm9jYXRpb25QYXJhbWV0ZXJzKXMpOycgJSBjb21tYW5kX2FyZ3MpCiAgICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoJyAgICAgICAgcmV0dXJuOycpCiAgICAgICAgICAgICBsaW5lcy5hcHBl
bmQoJyAgICB9JykKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnI2VuZGlmJykKKyAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZCgnI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKScpCiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycpCiAKICAgICAgICAgaWYg
Y29tbWFuZC5pc19hc3luYzoKQEAgLTMzNCw0ICszNDYsNCBAQCBjbGFzcyBDcHBCYWNrZW5kRGlz
cGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoJyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9j
b2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsn
KQogCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnfScpCi0gICAgICAgIHJldHVybiAiXG4iLmpvaW4o
bGluZXMpCisgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9u
KGNvbW1hbmQuY29uZGl0aW9uLCAiXG4iLmpvaW4obGluZXMpKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Zy
b250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVh
ZGVyLnB5CmluZGV4IDVjZjc0Nzg1NDMzLi4xMTlkMjNjMzhjZCAxMDA3NTUKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Zy
b250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVy
X2hlYWRlci5weQpAQCAtMTExLDcgKzExMSw3IEBAIGNsYXNzIENwcEZyb250ZW5kRGlzcGF0Y2hl
ckhlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICAgICAgJ2V2ZW50RGVjbGFy
YXRpb25zJzogIlxuIi5qb2luKGV2ZW50X2RlY2xhcmF0aW9ucykKICAgICAgICAgfQogCi0gICAg
ICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgVGVtcGxh
dGUoQ3BwVGVtcGxhdGVzLkZyb250ZW5kRGlzcGF0Y2hlckRvbWFpbkRpc3BhdGNoZXJEZWNsYXJh
dGlvbikuc3Vic3RpdHV0ZShOb25lLCAqKmhhbmRsZXJfYXJncykpCisgICAgICAgIHJldHVybiBz
ZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRvbWFpbi5jb25kaXRpb24sIFRlbXBs
YXRlKENwcFRlbXBsYXRlcy5Gcm9udGVuZERpc3BhdGNoZXJEb21haW5EaXNwYXRjaGVyRGVjbGFy
YXRpb24pLnN1YnN0aXR1dGUoTm9uZSwgKipoYW5kbGVyX2FyZ3MpKQogCiAgICAgZGVmIF9nZW5l
cmF0ZV9kaXNwYXRjaGVyX2RlY2xhcmF0aW9uX2Zvcl9ldmVudChzZWxmLCBldmVudCwgZG9tYWlu
LCB1c2VkX2VudW1fbmFtZXMpOgogICAgICAgICBmb3JtYWxfcGFyYW1ldGVycyA9IFtdCkBAIC0x
MjMsNCArMTIzLDQgQEAgY2xhc3MgQ3BwRnJvbnRlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9y
KENwcEdlbmVyYXRvcik6CiAgICAgICAgICAgICAgICAgdXNlZF9lbnVtX25hbWVzLmFkZChwYXJh
bWV0ZXIucGFyYW1ldGVyX25hbWUpCiAKICAgICAgICAgbGluZXMuYXBwZW5kKCIgICAgdm9pZCAl
cyglcyk7IiAlIChldmVudC5ldmVudF9uYW1lLCAiLCAiLmpvaW4oZm9ybWFsX3BhcmFtZXRlcnMp
KSkKLSAgICAgICAgcmV0dXJuICJcbiIuam9pbihsaW5lcykKKyAgICAgICAgcmV0dXJuIHNlbGYu
d3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZXZlbnQuY29uZGl0aW9uLCAiXG4iLmpvaW4o
bGluZXMpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRp
b24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9n
ZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQppbmRleCA5
MDRkMjI3YTZlOS4uNjZkYzZlMTg1Y2YgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRj
aGVyX2ltcGxlbWVudGF0aW9uLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxl
bWVudGF0aW9uLnB5CkBAIC04Miw3ICs4Miw3IEBAIGNsYXNzIENwcEZyb250ZW5kRGlzcGF0Y2hl
ckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgIGZvciBldmVu
dCBpbiBldmVudHM6CiAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbnMuYXBwZW5kKHNlbGYuX2dl
bmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25fZm9yX2V2ZW50KGV2ZW50LCBkb21haW4p
KQogCi0gICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFp
biwgJ1xuXG4nLmpvaW4oaW1wbGVtZW50YXRpb25zKSkKKyAgICAgICAgcmV0dXJuIHNlbGYud3Jh
cF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZG9tYWluLmNvbmRpdGlvbiwgJ1xuXG4nLmpvaW4o
aW1wbGVtZW50YXRpb25zKSkKIAogICAgIGRlZiBfZ2VuZXJhdGVfZGlzcGF0Y2hlcl9pbXBsZW1l
bnRhdGlvbl9mb3JfZXZlbnQoc2VsZiwgZXZlbnQsIGRvbWFpbik6CiAgICAgICAgIGxpbmVzID0g
W10KQEAgLTEzMSw0ICsxMzEsNCBAQCBjbGFzcyBDcHBGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1l
bnRhdGlvbkdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICBsaW5lcy5hcHBlbmQoJycp
CiAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpz
b25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7JykKICAgICAgICAgbGluZXMuYXBwZW5kKCd9JykK
LSAgICAgICAgcmV0dXJuICJcbiIuam9pbihsaW5lcykKKyAgICAgICAgcmV0dXJuIHNlbGYud3Jh
cF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZXZlbnQuY29uZGl0aW9uLCAiXG4iLmpvaW4obGlu
ZXMpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2hlYWRlci5weSBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90
b2NvbF90eXBlc19oZWFkZXIucHkKaW5kZXggNDIzZDdhMjMwMDguLjVlMGE2ZjU2OTFlIDEwMDc1
NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9n
ZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaGVhZGVyLnB5CisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90
eXBlc19oZWFkZXIucHkKQEAgLTEwNSw3ICsxMDUsNyBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVz
SGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgICAgICAgICAgZG9tYWluX2xp
bmVzLmFwcGVuZCgnc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBWRVJTSU9OID0gJXM7JyAlIHZl
cnNpb24pCiAKICAgICAgICAgICAgIGRvbWFpbl9saW5lcy5hcHBlbmQoJ30gLy8gJXMnICUgZG9t
YWluLmRvbWFpbl9uYW1lKQotICAgICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYud3JhcF93
aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCAnXG4nLmpvaW4oZG9tYWluX2xpbmVzKSkpCisg
ICAgICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRp
dGlvbihkb21haW4uY29uZGl0aW9uLCAnXG4nLmpvaW4oZG9tYWluX2xpbmVzKSkpCiAKICAgICAg
ICAgaWYgbGVuKHNlY3Rpb25zKSA9PSAwOgogICAgICAgICAgICAgcmV0dXJuICcnCkBAIC0xMzIs
MTAgKzEzMiwxMCBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9yKENwcEdl
bmVyYXRvcik6CiAgICAgICAgICAgICBkb21haW5fbGluZXMuYXBwZW5kKCduYW1lc3BhY2UgJXMg
eycgJSBkb21haW4uZG9tYWluX25hbWUpCiAKICAgICAgICAgICAgICMgRm9yd2FyZC1kZWNsYXJl
IGFsbCBjbGFzc2VzIHNvIHRoZSB0eXBlIGJ1aWxkZXJzIHdvbid0IGJyZWFrIGlmIHJlYXJyYW5n
ZWQuCi0gICAgICAgICAgICBkb21haW5fbGluZXMuZXh0ZW5kKCdjbGFzcyAlczsnICUgb2JqZWN0
X3R5cGUucmF3X25hbWUoKSBmb3Igb2JqZWN0X3R5cGUgaW4gb2JqZWN0X3R5cGVzKQotICAgICAg
ICAgICAgZG9tYWluX2xpbmVzLmV4dGVuZCgnZW51bSBjbGFzcyAlczsnICUgZW51bV90eXBlLnJh
d19uYW1lKCkgZm9yIGVudW1fdHlwZSBpbiBlbnVtX3R5cGVzKQorICAgICAgICAgICAgZG9tYWlu
X2xpbmVzLmV4dGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKG9iamVjdF90
eXBlLmRlY2xhcmF0aW9uKCkuY29uZGl0aW9uLCAnY2xhc3MgJXM7JyAlIG9iamVjdF90eXBlLnJh
d19uYW1lKCkpIGZvciBvYmplY3RfdHlwZSBpbiBvYmplY3RfdHlwZXMpCisgICAgICAgICAgICBk
b21haW5fbGluZXMuZXh0ZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZW51
bV90eXBlLmRlY2xhcmF0aW9uKCkuY29uZGl0aW9uLCAnZW51bSBjbGFzcyAlczsnICUgZW51bV90
eXBlLnJhd19uYW1lKCkpIGZvciBlbnVtX3R5cGUgaW4gZW51bV90eXBlcykKICAgICAgICAgICAg
IGRvbWFpbl9saW5lcy5hcHBlbmQoJ30gLy8gJXMnICUgZG9tYWluLmRvbWFpbl9uYW1lKQotICAg
ICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4o
ZG9tYWluLCAnXG4nLmpvaW4oZG9tYWluX2xpbmVzKSkpCisgICAgICAgICAgICBzZWN0aW9ucy5h
cHBlbmQoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9u
LCAnXG4nLmpvaW4oZG9tYWluX2xpbmVzKSkpCiAKICAgICAgICAgaWYgbGVuKHNlY3Rpb25zKSA9
PSAwOgogICAgICAgICAgICAgcmV0dXJuICcnCkBAIC0xNzAsNyArMTcwLDcgQEAgY2xhc3MgQ3Bw
UHJvdG9jb2xUeXBlc0hlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICAgICAg
aWYgbGVuKGRlY2xhcmF0aW9uLmRlc2NyaXB0aW9uKSA+IDA6CiAgICAgICAgICAgICAgICAgdHlw
ZWRlZl9saW5lcy5hcHBlbmQoJy8qICVzICovJyAlIGRlY2xhcmF0aW9uLmRlc2NyaXB0aW9uKQog
ICAgICAgICAgICAgdHlwZWRlZl9saW5lcy5hcHBlbmQoJ3R5cGVkZWYgJXMgJXM7JyAlIChwcmlt
aXRpdmVfbmFtZSwgZGVjbGFyYXRpb24udHlwZV9uYW1lKSkKLSAgICAgICAgICAgIHNlY3Rpb25z
LmFwcGVuZCgnXG4nLmpvaW4odHlwZWRlZl9saW5lcykpCisgICAgICAgICAgICBzZWN0aW9ucy5h
cHBlbmQoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihkZWNsYXJhdGlvbi5jb25k
aXRpb24sICdcbicuam9pbih0eXBlZGVmX2xpbmVzKSkpCiAKICAgICAgICAgZm9yIGRlY2xhcmF0
aW9uIGluIGFycmF5X2RlY2xhcmF0aW9uczoKICAgICAgICAgICAgIGVsZW1lbnRfdHlwZSA9IENw
cEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShkZWNsYXJhdGlvbi50eXBlLmVs
ZW1lbnRfdHlwZSkKQEAgLTE3OCwxMyArMTc4LDEzIEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNI
ZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgICAgIGlmIGxlbihkZWNsYXJh
dGlvbi5kZXNjcmlwdGlvbikgPiAwOgogICAgICAgICAgICAgICAgIHR5cGVkZWZfbGluZXMuYXBw
ZW5kKCcvKiAlcyAqLycgJSBkZWNsYXJhdGlvbi5kZXNjcmlwdGlvbikKICAgICAgICAgICAgIHR5
cGVkZWZfbGluZXMuYXBwZW5kKCd0eXBlZGVmIEpTT046OkFycmF5T2Y8JXM+ICVzOycgJSAoZWxl
bWVudF90eXBlLCBkZWNsYXJhdGlvbi50eXBlX25hbWUpKQotICAgICAgICAgICAgc2VjdGlvbnMu
YXBwZW5kKCdcbicuam9pbih0eXBlZGVmX2xpbmVzKSkKKyAgICAgICAgICAgIHNlY3Rpb25zLmFw
cGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRlY2xhcmF0aW9uLmNvbmRp
dGlvbiwgJ1xuJy5qb2luKHR5cGVkZWZfbGluZXMpKSkKIAogICAgICAgICBsaW5lcyA9IFtdCiAg
ICAgICAgIGxpbmVzLmFwcGVuZCgnbmFtZXNwYWNlICVzIHsnICUgZG9tYWluLmRvbWFpbl9uYW1l
KQogICAgICAgICBsaW5lcy5hcHBlbmQoJ1xuJy5qb2luKHNlY3Rpb25zKSkKICAgICAgICAgbGlu
ZXMuYXBwZW5kKCd9IC8vICVzJyAlIGRvbWFpbi5kb21haW5fbmFtZSkKLSAgICAgICAgcmV0dXJu
IHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCAnXG4nLmpvaW4obGluZXMp
KQorICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihkb21h
aW4uY29uZGl0aW9uLCAnXG4nLmpvaW4obGluZXMpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9lbnVt
X2NvbnN0YW50X3ZhbHVlX2NvbnZlcnNpb25fbWV0aG9kcyhzZWxmKToKICAgICAgICAgaWYgbm90
IHNlbGYuYXNzaWduZWRfZW51bV92YWx1ZXMoKToKQEAgLTIyNyw3ICsyMjcsNyBAQCBjbGFzcyBD
cHBQcm90b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgIGxp
bmVzLmFwcGVuZCgnbmFtZXNwYWNlICVzIHsnICUgZG9tYWluLmRvbWFpbl9uYW1lKQogICAgICAg
ICBsaW5lcy5hcHBlbmQoJ1xuJy5qb2luKHNlY3Rpb25zKSkKICAgICAgICAgbGluZXMuYXBwZW5k
KCd9IC8vICVzJyAlIGRvbWFpbi5kb21haW5fbmFtZSkKLSAgICAgICAgcmV0dXJuIHNlbGYud3Jh
cF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCAnXG4nLmpvaW4obGluZXMpKQorICAgICAg
ICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihkb21haW4uY29uZGl0
aW9uLCAnXG4nLmpvaW4obGluZXMpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9jbGFzc19mb3Jfb2Jq
ZWN0X2RlY2xhcmF0aW9uKHNlbGYsIHR5cGVfZGVjbGFyYXRpb24sIGRvbWFpbik6CiAgICAgICAg
IGlmIGxlbih0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVycykgPT0gMDoKQEAgLTI3OSwxMyAr
Mjc5LDEzIEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJh
dG9yKToKIAogICAgICAgICBsaW5lcy5hcHBlbmQoJ307JykKICAgICAgICAgbGluZXMuYXBwZW5k
KCcnKQotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorICAgICAgICByZXR1cm4gc2Vs
Zi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbih0eXBlX2RlY2xhcmF0aW9uLmNvbmRpdGlv
biwgJ1xuJy5qb2luKGxpbmVzKSkKIAogICAgIGRlZiBfZ2VuZXJhdGVfc3RydWN0X2Zvcl9lbnVt
X2RlY2xhcmF0aW9uKHNlbGYsIGVudW1fZGVjbGFyYXRpb24pOgogICAgICAgICBsaW5lcyA9IFtd
CiAgICAgICAgIGxpbmVzLmFwcGVuZCgnLyogJXMgKi8nICUgZW51bV9kZWNsYXJhdGlvbi5kZXNj
cmlwdGlvbikKICAgICAgICAgbGluZXMuZXh0ZW5kKHNlbGYuX2dlbmVyYXRlX3N0cnVjdF9mb3Jf
ZW51bV90eXBlKGVudW1fZGVjbGFyYXRpb24udHlwZV9uYW1lLCBlbnVtX2RlY2xhcmF0aW9uLnR5
cGUpKQotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorICAgICAgICByZXR1cm4gc2Vs
Zi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihlbnVtX2RlY2xhcmF0aW9uLmNvbmRpdGlv
biwgJ1xuJy5qb2luKGxpbmVzKSkKIAogICAgIGRlZiBfZ2VuZXJhdGVfc3RydWN0X2Zvcl9hbm9u
eW1vdXNfZW51bV9tZW1iZXIoc2VsZiwgZW51bV9tZW1iZXIpOgogICAgICAgICBkZWYgYXBwbHlf
aW5kZW50YXRpb24obGluZSk6CkBAIC0zODEsMTAgKzM4MSwxMCBAQCBjbGFzcyBDcHBQcm90b2Nv
bFR5cGVzSGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgICAgICBmb3IgdHlw
ZV9kZWNsYXJhdGlvbiBpbiBkZWNsYXJhdGlvbnNfdG9fZ2VuZXJhdGU6CiAgICAgICAgICAgICAg
ICAgZm9yIHR5cGVfbWVtYmVyIGluIHR5cGVfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzOgogICAg
ICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGVfbWVtYmVyLnR5cGUsIEVudW1UeXBl
KToKLSAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVfYXJndW1lbnRzLmFwcGVuZCgoQ3BwR2Vu
ZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlX21lbWJlcih0eXBlX21lbWJlciwgdHlw
ZV9kZWNsYXJhdGlvbiksIEZhbHNlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVfYXJn
dW1lbnRzLmFwcGVuZCgoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbih0eXBlX2Rl
Y2xhcmF0aW9uLmNvbmRpdGlvbiwgQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90
eXBlX21lbWJlcih0eXBlX21lbWJlciwgdHlwZV9kZWNsYXJhdGlvbikpLCBGYWxzZSkpCiAKICAg
ICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGVfZGVjbGFyYXRpb24udHlwZSwgT2JqZWN0
VHlwZSk6Ci0gICAgICAgICAgICAgICAgICAgIHR5cGVfYXJndW1lbnRzLmFwcGVuZCgoQ3BwR2Vu
ZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKHR5cGVfZGVjbGFyYXRpb24udHlwZSks
IEdlbmVyYXRvci50eXBlX25lZWRzX3J1bnRpbWVfY2FzdHModHlwZV9kZWNsYXJhdGlvbi50eXBl
KSkpCisgICAgICAgICAgICAgICAgICAgIHR5cGVfYXJndW1lbnRzLmFwcGVuZCgoc2VsZi53cmFw
X3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbih0eXBlX2RlY2xhcmF0aW9uLmNvbmRpdGlvbiwgQ3Bw
R2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKHR5cGVfZGVjbGFyYXRpb24udHlw
ZSkpLCBHZW5lcmF0b3IudHlwZV9uZWVkc19ydW50aW1lX2Nhc3RzKHR5cGVfZGVjbGFyYXRpb24u
dHlwZSkpKQogCiAgICAgICAgIHN0cnVjdF9rZXl3b3JkcyA9IFsnc3RydWN0J10KICAgICAgICAg
ZnVuY3Rpb25fa2V5d29yZHMgPSBbJ3N0YXRpYyB2b2lkJ10KQEAgLTQzNywxOSArNDM3LDIwIEBA
IGNsYXNzIENwcFByb3RvY29sVHlwZXNIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAg
ICAgICAgICAgIGRvbWFpbl9saW5lcy5hcHBlbmQoIi8vIEVudW1zIGluIHRoZSAnJXMnIERvbWFp
biIgJSBkb21haW4uZG9tYWluX25hbWUpCiAgICAgICAgICAgICBmb3IgZW51bV90eXBlIGluIGVu
dW1fdHlwZXM6CiAgICAgICAgICAgICAgICAgY3BwX3Byb3RvY29sX3R5cGUgPSBDcHBHZW5lcmF0
b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGUoZW51bV90eXBlKQotICAgICAgICAgICAgICAg
IGRvbWFpbl9saW5lcy5hcHBlbmQoJ3RlbXBsYXRlPD4nKQotICAgICAgICAgICAgICAgIGRvbWFp
bl9saW5lcy5hcHBlbmQoJyVzIHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzwlcz4oY29uc3QgU3Ry
aW5nJik7JyAlIChyZXR1cm5fdHlwZV93aXRoX2V4cG9ydF9tYWNybyhjcHBfcHJvdG9jb2xfdHlw
ZSksIGNwcF9wcm90b2NvbF90eXBlKSkKKyAgICAgICAgICAgICAgICBkb21haW5fbGluZXMuYXBw
ZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZW51bV90eXBlLmRlY2xhcmF0
aW9uKCkuY29uZGl0aW9uLCAndGVtcGxhdGU8PlxuJXMgcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5n
PCVzPihjb25zdCBTdHJpbmcmKTsnICUgKHJldHVybl90eXBlX3dpdGhfZXhwb3J0X21hY3JvKGNw
cF9wcm90b2NvbF90eXBlKSwgY3BwX3Byb3RvY29sX3R5cGUpKSkKIAogICAgICAgICAgICAgZm9y
IG9iamVjdF90eXBlIGluIG9iamVjdF90eXBlczoKKyAgICAgICAgICAgICAgICBvYmplY3RfbGlu
ZXMgPSBbXQogICAgICAgICAgICAgICAgIGZvciBlbnVtX21lbWJlciBpbiBmaWx0ZXIodHlwZV9t
ZW1iZXJfaXNfYW5vbnltb3VzX2VudW1fdHlwZSwgb2JqZWN0X3R5cGUubWVtYmVycyk6CiAgICAg
ICAgICAgICAgICAgICAgIGNwcF9wcm90b2NvbF90eXBlID0gQ3BwR2VuZXJhdG9yLmNwcF9wcm90
b2NvbF90eXBlX2Zvcl90eXBlX21lbWJlcihlbnVtX21lbWJlciwgb2JqZWN0X3R5cGUuZGVjbGFy
YXRpb24oKSkKLSAgICAgICAgICAgICAgICAgICAgZG9tYWluX2xpbmVzLmFwcGVuZCgndGVtcGxh
dGU8PicpCi0gICAgICAgICAgICAgICAgICAgIGRvbWFpbl9saW5lcy5hcHBlbmQoJyVzIHBhcnNl
RW51bVZhbHVlRnJvbVN0cmluZzwlcz4oY29uc3QgU3RyaW5nJik7JyAlIChyZXR1cm5fdHlwZV93
aXRoX2V4cG9ydF9tYWNybyhjcHBfcHJvdG9jb2xfdHlwZSksIGNwcF9wcm90b2NvbF90eXBlKSkK
KyAgICAgICAgICAgICAgICAgICAgb2JqZWN0X2xpbmVzLmFwcGVuZCgndGVtcGxhdGU8PlxuJXMg
cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPCVzPihjb25zdCBTdHJpbmcmKTsnICUgKHJldHVybl90
eXBlX3dpdGhfZXhwb3J0X21hY3JvKGNwcF9wcm90b2NvbF90eXBlKSwgY3BwX3Byb3RvY29sX3R5
cGUpKQorICAgICAgICAgICAgICAgIGlmIGxlbihvYmplY3RfbGluZXMpOgorICAgICAgICAgICAg
ICAgICAgICBkb21haW5fbGluZXMuYXBwZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25k
aXRpb24ob2JqZWN0X3R5cGUuZGVjbGFyYXRpb24oKS5jb25kaXRpb24sICdcbicuam9pbihvYmpl
Y3RfbGluZXMpKSkKIAogICAgICAgICAgICAgaWYgbGVuKGRvbWFpbl9saW5lcykgPT0gMToKICAg
ICAgICAgICAgICAgICBjb250aW51ZSAgIyBObyByZWFsIGRlY2xhcmF0aW9ucyB0byBlbWl0LCBq
dXN0IHRoZSBkb21haW4gY29tbWVudC4gU2tpcC4KIAotICAgICAgICAgICAgc2VjdGlvbnMuYXBw
ZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCAnXG4nLmpvaW4oZG9t
YWluX2xpbmVzKSkpCisgICAgICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi53cmFwX3dpdGhf
Z3VhcmRfZm9yX2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9uLCAnXG4nLmpvaW4oZG9tYWluX2xp
bmVzKSkpCiAKICAgICAgICAgaWYgbGVuKHNlY3Rpb25zKSA9PSAxOgogICAgICAgICAgICAgcmV0
dXJuIFtdICMgTm8gcmVhbCBzZWN0aW9ucyB0byBlbWl0LCBqdXN0IHRoZSBuYW1lc3BhY2UgYW5k
IHRlbXBsYXRlIGRlY2xhcmF0aW9uLiBTa2lwLgpAQCAtNDc0LDE0ICs0NzUsMjAgQEAgY2xhc3Mg
Q3BwUHJvdG9jb2xUeXBlc0hlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICAg
ICAgICAgIGxpbmVzLmFwcGVuZCgnJykKICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsnKQogCi0gICAgICAgICAgICBs
aW5lcy5hcHBlbmQoJycpCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoIi8vIEhhc2ggZGVjbGFy
YXRpb25zIGluIHRoZSAnJXMnIERvbWFpbiIgJSBkb21haW4uZG9tYWluX25hbWUpCisgICAgICAg
ICAgICBkb21haW5fbGluZXMgPSBbXQorCisgICAgICAgICAgICBkb21haW5fbGluZXMuYXBwZW5k
KCcnKQorICAgICAgICAgICAgZG9tYWluX2xpbmVzLmFwcGVuZCgiLy8gSGFzaCBkZWNsYXJhdGlv
bnMgaW4gdGhlICclcycgRG9tYWluIiAlIGRvbWFpbi5kb21haW5fbmFtZSkKIAogICAgICAgICAg
ICAgZm9yIGVudW1fdHlwZSBpbiBlbnVtX3R5cGVzOgotICAgICAgICAgICAgICAgIGxpbmVzLmFw
cGVuZCgndGVtcGxhdGU8PicpCi0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdzdHJ1Y3Qg
RGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6JXM6OiVzPiB7JyAlIChkb21haW4uZG9t
YWluX25hbWUsIGVudW1fdHlwZS5yYXdfbmFtZSgpKSkKLSAgICAgICAgICAgICAgICBsaW5lcy5h
cHBlbmQoJyAgICB0eXBlZGVmIEludEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6JXM6OiVzPiBI
YXNoOycgJSAoZG9tYWluLmRvbWFpbl9uYW1lLCBlbnVtX3R5cGUucmF3X25hbWUoKSkpCi0gICAg
ICAgICAgICAgICAgbGluZXMuYXBwZW5kKCd9OycpCisgICAgICAgICAgICAgICAgZW51bV9saW5l
cyA9IFtdCisgICAgICAgICAgICAgICAgZW51bV9saW5lcy5hcHBlbmQoJ3RlbXBsYXRlPD4nKQor
ICAgICAgICAgICAgICAgIGVudW1fbGluZXMuYXBwZW5kKCdzdHJ1Y3QgRGVmYXVsdEhhc2g8SW5z
cGVjdG9yOjpQcm90b2NvbDo6JXM6OiVzPiB7JyAlIChkb21haW4uZG9tYWluX25hbWUsIGVudW1f
dHlwZS5yYXdfbmFtZSgpKSkKKyAgICAgICAgICAgICAgICBlbnVtX2xpbmVzLmFwcGVuZCgnICAg
IHR5cGVkZWYgSW50SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjolczo6JXM+IEhhc2g7JyAlIChk
b21haW4uZG9tYWluX25hbWUsIGVudW1fdHlwZS5yYXdfbmFtZSgpKSkKKyAgICAgICAgICAgICAg
ICBlbnVtX2xpbmVzLmFwcGVuZCgnfTsnKQorICAgICAgICAgICAgICAgIGRvbWFpbl9saW5lcy5h
cHBlbmQoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihlbnVtX3R5cGUuZGVjbGFy
YXRpb24oKS5jb25kaXRpb24sICdcbicuam9pbihlbnVtX2xpbmVzKSkpCisKKyAgICAgICAgICAg
IGxpbmVzLmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRvbWFpbi5j
b25kaXRpb24sICdcbicuam9pbihkb21haW5fbGluZXMpKSkKIAogICAgICAgICBpZiBsZW4obGlu
ZXMpID09IDA6CiAgICAgICAgICAgICByZXR1cm4gW10KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2Nv
bF90eXBlc19pbXBsZW1lbnRhdGlvbi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRh
dGlvbi5weQppbmRleCA2NWNlYmY1ODNlZS4uODUzMGU2NTQzMWYgMTAwNzU1Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9w
cm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNf
aW1wbGVtZW50YXRpb24ucHkKQEAgLTEzMCw3ICsxMzAsNyBAQCBjbGFzcyBDcHBQcm90b2NvbFR5
cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgICAgICAg
ICAnfScsCiAgICAgICAgICAgICAgICAgJycsCiAgICAgICAgICAgICBdKQotICAgICAgICAgICAg
cmV0dXJuIGJvZHlfbGluZXMKKyAgICAgICAgICAgIHJldHVybiAnXG4nLmpvaW4oYm9keV9saW5l
cykKIAogICAgICAgICB0eXBlX2RlY2xhcmF0aW9ucyA9IHNlbGYudHlwZV9kZWNsYXJhdGlvbnNf
Zm9yX2RvbWFpbihkb21haW4pCiAgICAgICAgIGRlY2xhcmF0aW9uX3R5cGVzID0gW2RlY2wudHlw
ZSBmb3IgZGVjbCBpbiB0eXBlX2RlY2xhcmF0aW9uc10KQEAgLTE0NiwxNyArMTQ2LDIwIEBAIGNs
YXNzIENwcFByb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihDcHBHZW5lcmF0b3Ip
OgogICAgICAgICBsaW5lcy5hcHBlbmQoIi8vIEVudW1zIGluIHRoZSAnJXMnIERvbWFpbiIgJSBk
b21haW4uZG9tYWluX25hbWUpCiAgICAgICAgIGZvciBlbnVtX3R5cGUgaW4gZW51bV90eXBlczoK
ICAgICAgICAgICAgIGNwcF9wcm90b2NvbF90eXBlID0gQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2Nv
bF90eXBlX2Zvcl90eXBlKGVudW1fdHlwZSkKLSAgICAgICAgICAgIGxpbmVzLmV4dGVuZChnZW5l
cmF0ZV9jb252ZXJzaW9uX21ldGhvZF9ib2R5KGVudW1fdHlwZSwgY3BwX3Byb3RvY29sX3R5cGUp
KQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25k
aXRpb24oZW51bV90eXBlLmRlY2xhcmF0aW9uKCkuY29uZGl0aW9uLCBnZW5lcmF0ZV9jb252ZXJz
aW9uX21ldGhvZF9ib2R5KGVudW1fdHlwZSwgY3BwX3Byb3RvY29sX3R5cGUpKSkKIAogICAgICAg
ICBmb3Igb2JqZWN0X3R5cGUgaW4gb2JqZWN0X3R5cGVzOgorICAgICAgICAgICAgb2JqZWN0X2xp
bmVzID0gW10KICAgICAgICAgICAgIGZvciBlbnVtX21lbWJlciBpbiBmaWx0ZXIodHlwZV9tZW1i
ZXJfaXNfYW5vbnltb3VzX2VudW1fdHlwZSwgb2JqZWN0X3R5cGUubWVtYmVycyk6CiAgICAgICAg
ICAgICAgICAgY3BwX3Byb3RvY29sX3R5cGUgPSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5
cGVfZm9yX3R5cGVfbWVtYmVyKGVudW1fbWVtYmVyLCBvYmplY3RfdHlwZS5kZWNsYXJhdGlvbigp
KQotICAgICAgICAgICAgICAgIGxpbmVzLmV4dGVuZChnZW5lcmF0ZV9jb252ZXJzaW9uX21ldGhv
ZF9ib2R5KGVudW1fbWVtYmVyLnR5cGUsIGNwcF9wcm90b2NvbF90eXBlKSkKKyAgICAgICAgICAg
ICAgICBvYmplY3RfbGluZXMuYXBwZW5kKGdlbmVyYXRlX2NvbnZlcnNpb25fbWV0aG9kX2JvZHko
ZW51bV9tZW1iZXIudHlwZSwgY3BwX3Byb3RvY29sX3R5cGUpKQorICAgICAgICAgICAgaWYgbGVu
KG9iamVjdF9saW5lcyk6CisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYud3JhcF93
aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24ob2JqZWN0X3R5cGUuZGVjbGFyYXRpb24oKS5jb25kaXRp
b24sICdcbicuam9pbihvYmplY3RfbGluZXMpKSkKIAogICAgICAgICBpZiBsZW4obGluZXMpID09
IDE6CiAgICAgICAgICAgICByZXR1cm4gJycgICMgTm8gcmVhbCBkZWNsYXJhdGlvbnMgdG8gZW1p
dCwganVzdCB0aGUgZG9tYWluIGNvbW1lbnQuCiAKLSAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93
aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCAnXG4nLmpvaW4obGluZXMpKQorICAgICAgICBy
ZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9u
LCAnXG4nLmpvaW4obGluZXMpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9lbnVtX21hcHBpbmdfYW5k
X2NvbnZlcnNpb25fbWV0aG9kcyhzZWxmLCBkb21haW5zKToKICAgICAgICAgc2VjdGlvbnMgPSBb
XQpAQCAtMTczLDEyICsxNzYsMTUgQEAgY2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0
aW9uR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgZGVmIF9nZW5lcmF0ZV9vcGVuX2ZpZWxk
X25hbWVzKHNlbGYpOgogICAgICAgICBsaW5lcyA9IFtdCiAgICAgICAgIGZvciBkb21haW4gaW4g
c2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCk6CisgICAgICAgICAgICBkb21haW5fbGluZXMgPSBb
XQogICAgICAgICAgICAgdHlwZV9kZWNsYXJhdGlvbnMgPSBzZWxmLnR5cGVfZGVjbGFyYXRpb25z
X2Zvcl9kb21haW4oZG9tYWluKQogICAgICAgICAgICAgZm9yIHR5cGVfZGVjbGFyYXRpb24gaW4g
W2RlY2wgZm9yIGRlY2wgaW4gdHlwZV9kZWNsYXJhdGlvbnMgaWYgR2VuZXJhdG9yLnR5cGVfaGFz
X29wZW5fZmllbGRzKGRlY2wudHlwZSldOgogICAgICAgICAgICAgICAgIG9wZW5fbWVtYmVycyA9
IEdlbmVyYXRvci5vcGVuX2ZpZWxkcyh0eXBlX2RlY2xhcmF0aW9uKQogICAgICAgICAgICAgICAg
IGZvciB0eXBlX21lbWJlciBpbiBzb3J0ZWQob3Blbl9tZW1iZXJzLCBrZXk9bGFtYmRhIG1lbWJl
cjogbWVtYmVyLm1lbWJlcl9uYW1lKToKICAgICAgICAgICAgICAgICAgICAgZmllbGRfbmFtZSA9
ICc6Oicuam9pbihbJ0luc3BlY3RvcicsICdQcm90b2NvbCcsIGRvbWFpbi5kb21haW5fbmFtZSwg
dWNmaXJzdCh0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbmFtZSksIHVjZmlyc3QodHlwZV9tZW1iZXIu
bWVtYmVyX25hbWUpXSkKLSAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdjb25zdCBj
aGFyKiAlcyA9ICIlcyI7JyAlIChmaWVsZF9uYW1lLCB0eXBlX21lbWJlci5tZW1iZXJfbmFtZSkp
CisgICAgICAgICAgICAgICAgICAgIGRvbWFpbl9saW5lcy5hcHBlbmQoJ2NvbnN0IGNoYXIqICVz
ID0gIiVzIjsnICUgKGZpZWxkX25hbWUsIHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lKSkKKyAgICAg
ICAgICAgIGlmIGxlbihkb21haW5fbGluZXMpOgorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVu
ZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRvbWFpbi5jb25kaXRpb24sICdc
bicuam9pbihkb21haW5fbGluZXMpKSkKIAogICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVz
KQogCkBAIC0xODgsMTYgKzE5NCwxOSBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVzSW1wbGVtZW50
YXRpb25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgZGVjbGFyYXRpb25zX3RvX2dl
bmVyYXRlID0gW2RlY2wgZm9yIGRlY2wgaW4gdHlwZV9kZWNsYXJhdGlvbnMgaWYgc2VsZi50eXBl
X25lZWRzX3NoYXBlX2Fzc2VydGlvbnMoZGVjbC50eXBlKV0KIAogICAgICAgICBmb3IgdHlwZV9k
ZWNsYXJhdGlvbiBpbiBkZWNsYXJhdGlvbnNfdG9fZ2VuZXJhdGU6CisgICAgICAgICAgICB0eXBl
X2xpbmVzID0gW10KICAgICAgICAgICAgIGZvciB0eXBlX21lbWJlciBpbiB0eXBlX2RlY2xhcmF0
aW9uLnR5cGVfbWVtYmVyczoKICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGVfbWVt
YmVyLnR5cGUsIEVudW1UeXBlKToKLSAgICAgICAgICAgICAgICAgICAgc2VjdGlvbnMuYXBwZW5k
KHNlbGYuX2dlbmVyYXRlX2Fzc2VydGlvbl9mb3JfZW51bSh0eXBlX21lbWJlciwgdHlwZV9kZWNs
YXJhdGlvbikpCisgICAgICAgICAgICAgICAgICAgIHR5cGVfbGluZXMuYXBwZW5kKHNlbGYuX2dl
bmVyYXRlX2Fzc2VydGlvbl9mb3JfZW51bSh0eXBlX21lbWJlciwgdHlwZV9kZWNsYXJhdGlvbikp
CiAKICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodHlwZV9kZWNsYXJhdGlvbi50eXBlLCBPYmpl
Y3RUeXBlKToKLSAgICAgICAgICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVf
YXNzZXJ0aW9uX2Zvcl9vYmplY3RfZGVjbGFyYXRpb24odHlwZV9kZWNsYXJhdGlvbikpCisgICAg
ICAgICAgICAgICAgdHlwZV9saW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYXNzZXJ0aW9uX2Zv
cl9vYmplY3RfZGVjbGFyYXRpb24odHlwZV9kZWNsYXJhdGlvbikpCiAgICAgICAgICAgICAgICAg
aWYgR2VuZXJhdG9yLnR5cGVfbmVlZHNfcnVudGltZV9jYXN0cyh0eXBlX2RlY2xhcmF0aW9uLnR5
cGUpOgotICAgICAgICAgICAgICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVf
cnVudGltZV9jYXN0X2Zvcl9vYmplY3RfZGVjbGFyYXRpb24odHlwZV9kZWNsYXJhdGlvbikpCisg
ICAgICAgICAgICAgICAgICAgIHR5cGVfbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX3J1bnRp
bWVfY2FzdF9mb3Jfb2JqZWN0X2RlY2xhcmF0aW9uKHR5cGVfZGVjbGFyYXRpb24pKQorICAgICAg
ICAgICAgaWYgbGVuKHR5cGVfbGluZXMpOgorICAgICAgICAgICAgICAgIHNlY3Rpb25zLmFwcGVu
ZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKHR5cGVfZGVjbGFyYXRpb24uY29u
ZGl0aW9uLCAnXG5cbicuam9pbih0eXBlX2xpbmVzKSkpCiAKLSAgICAgICAgcmV0dXJuICdcblxu
Jy5qb2luKHNlY3Rpb25zKQorICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9y
X2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9uLCAnXG5cbicuam9pbihzZWN0aW9ucykpCiAKICAg
ICBkZWYgX2dlbmVyYXRlX3J1bnRpbWVfY2FzdF9mb3Jfb2JqZWN0X2RlY2xhcmF0aW9uKHNlbGYs
IG9iamVjdF9kZWNsYXJhdGlvbik6CiAgICAgICAgIGFyZ3MgPSB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9qc19i
YWNrZW5kX2NvbW1hbmRzLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vZ2VuZXJhdGVfanNfYmFja2VuZF9jb21tYW5kcy5weQppbmRleCBiYmY3NmY5
MjkxMS4uNzMxMjY5N2NiNTYgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2pzX2JhY2tlbmRfY29tbWFuZHMucHkKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJh
dGVfanNfYmFja2VuZF9jb21tYW5kcy5weQpAQCAtOTYsNyArOTYsNyBAQCBjbGFzcyBKU0JhY2tl
bmRDb21tYW5kc0dlbmVyYXRvcihHZW5lcmF0b3IpOgogICAgICAgICAgICAgICAgICAgICAnZW51
bU5hbWUnOiBkZWNsYXJhdGlvbi50eXBlX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICdlbnVt
TWFwJzogIiwgIi5qb2luKFsnJXM6ICIlcyInICUgKEdlbmVyYXRvci5zdHlsaXplZF9uYW1lX2Zv
cl9lbnVtX3ZhbHVlKGVudW1fdmFsdWUpLCBlbnVtX3ZhbHVlKSBmb3IgZW51bV92YWx1ZSBpbiBk
ZWNsYXJhdGlvbi50eXBlLmVudW1fdmFsdWVzKCldKQogICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCIl
KGRvbWFpbk5hbWUpcy4lKGVudW1OYW1lKXMiLCB7JShlbnVtTWFwKXN9KTsnICUgZW51bV9hcmdz
KQorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3Jf
Y29uZGl0aW9uKGRlY2xhcmF0aW9uLmNvbmRpdGlvbiwgJ0luc3BlY3RvckJhY2tlbmQucmVnaXN0
ZXJFbnVtKCIlKGRvbWFpbk5hbWUpcy4lKGVudW1OYW1lKXMiLCB7JShlbnVtTWFwKXN9KTsnICUg
ZW51bV9hcmdzKSkKIAogICAgICAgICAgICAgZGVmIGlzX2Fub255bW91c19lbnVtX21lbWJlcih0
eXBlX21lbWJlcik6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGlzaW5zdGFuY2UodHlwZV9tZW1i
ZXIudHlwZSwgRW51bVR5cGUpIGFuZCB0eXBlX21lbWJlci50eXBlLmlzX2Fub255bW91cwpAQCAt
MTI4LDE2ICsxMjgsMTggQEAgY2xhc3MgSlNCYWNrZW5kQ29tbWFuZHNHZW5lcmF0b3IoR2VuZXJh
dG9yKToKICAgICAgICAgICAgICAgICAnY2FsbFBhcmFtcyc6ICIsICIuam9pbihbZ2VuZXJhdGVf
cGFyYW1ldGVyX29iamVjdChwYXJhbWV0ZXIpIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxs
X3BhcmFtZXRlcnNdKSwKICAgICAgICAgICAgICAgICAncmV0dXJuUGFyYW1zJzogIiwgIi5qb2lu
KFsnIiVzIicgJSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUgZm9yIHBhcmFtZXRlciBpbiBjb21t
YW5kLnJldHVybl9wYXJhbWV0ZXJzXSksCiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBsaW5l
cy5hcHBlbmQoJ0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCIlKGRvbWFpbk5hbWUp
cy4lKGNvbW1hbmROYW1lKXMiLCAlKHRhcmdldFR5cGVzKXMsIFslKGNhbGxQYXJhbXMpc10sIFsl
KHJldHVyblBhcmFtcylzXSk7JyAlIGNvbW1hbmRfYXJncykKKyAgICAgICAgICAgIGxpbmVzLmFw
cGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGNvbW1hbmQuY29uZGl0aW9u
LCAnSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIiUoZG9tYWluTmFtZSlzLiUoY29t
bWFuZE5hbWUpcyIsICUodGFyZ2V0VHlwZXMpcywgWyUoY2FsbFBhcmFtcylzXSwgWyUocmV0dXJu
UGFyYW1zKXNdKTsnICUgY29tbWFuZF9hcmdzKSkKIAogICAgICAgICBmb3IgZXZlbnQgaW4gZXZl
bnRzOgorICAgICAgICAgICAgZXZlbnRfbGluZXMgPSBbXQorCiAgICAgICAgICAgICBmb3IgcGFy
YW0gaW4gZmlsdGVyKGlzX2Fub255bW91c19lbnVtX3BhcmFtLCBldmVudC5ldmVudF9wYXJhbWV0
ZXJzKToKICAgICAgICAgICAgICAgICBlbnVtX2FyZ3MgPSB7CiAgICAgICAgICAgICAgICAgICAg
ICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLAogICAgICAgICAgICAgICAgICAgICAn
ZW51bU5hbWUnOiAnJXMlcycgJSAodWNmaXJzdChldmVudC5ldmVudF9uYW1lKSwgdWNmaXJzdChw
YXJhbS5wYXJhbWV0ZXJfbmFtZSkpLAogICAgICAgICAgICAgICAgICAgICAnZW51bU1hcCc6ICIs
ICIuam9pbihbJyVzOiAiJXMiJyAlIChHZW5lcmF0b3Iuc3R5bGl6ZWRfbmFtZV9mb3JfZW51bV92
YWx1ZShlbnVtX3ZhbHVlKSwgZW51bV92YWx1ZSkgZm9yIGVudW1fdmFsdWUgaW4gcGFyYW0udHlw
ZS5lbnVtX3ZhbHVlcygpXSksCiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGxp
bmVzLmFwcGVuZCgnSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIiUoZG9tYWluTmFtZSlz
LiUoZW51bU5hbWUpcyIsIHslKGVudW1NYXApc30pOycgJSBlbnVtX2FyZ3MpCisgICAgICAgICAg
ICAgICAgZXZlbnRfbGluZXMuYXBwZW5kKCdJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgi
JShkb21haW5OYW1lKXMuJShlbnVtTmFtZSlzIiwgeyUoZW51bU1hcClzfSk7JyAlIGVudW1fYXJn
cykKIAogICAgICAgICAgICAgZXZlbnRfYXJncyA9IHsKICAgICAgICAgICAgICAgICAnZG9tYWlu
TmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZSwKQEAgLTE0NSw3ICsxNDcsOSBAQCBjbGFzcyBKU0Jh
Y2tlbmRDb21tYW5kc0dlbmVyYXRvcihHZW5lcmF0b3IpOgogICAgICAgICAgICAgICAgICd0YXJn
ZXRUeXBlcyc6IGpzb24uZHVtcHMoZXZlbnQudGFyZ2V0X3R5cGVzKSwKICAgICAgICAgICAgICAg
ICAncGFyYW1zJzogIiwgIi5qb2luKFsnIiVzIicgJSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUg
Zm9yIHBhcmFtZXRlciBpbiBldmVudC5ldmVudF9wYXJhbWV0ZXJzXSksCiAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFdmVu
dCgiJShkb21haW5OYW1lKXMuJShldmVudE5hbWUpcyIsICUodGFyZ2V0VHlwZXMpcywgWyUocGFy
YW1zKXNdKTsnICUgZXZlbnRfYXJncykKKyAgICAgICAgICAgIGV2ZW50X2xpbmVzLmFwcGVuZCgn
SW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckV2ZW50KCIlKGRvbWFpbk5hbWUpcy4lKGV2ZW50TmFt
ZSlzIiwgJSh0YXJnZXRUeXBlcylzLCBbJShwYXJhbXMpc10pOycgJSBldmVudF9hcmdzKQorCisg
ICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlv
bihldmVudC5jb25kaXRpb24sICdcbicuam9pbihldmVudF9saW5lcykpKQogCiAgICAgICAgIGhh
c19hc3luY19jb21tYW5kcyA9IGFueShbY29tbWFuZC5pc19hc3luYyBmb3IgY29tbWFuZCBpbiBj
b21tYW5kc10pCiAgICAgICAgIGlmIGxlbihldmVudHMpID4gMCBvciBoYXNfYXN5bmNfY29tbWFu
ZHM6CkBAIC0xNjAsNCArMTY0LDQgQEAgY2xhc3MgSlNCYWNrZW5kQ29tbWFuZHNHZW5lcmF0b3Io
R2VuZXJhdG9yKToKICAgICAgICAgfQogICAgICAgICBsaW5lcy5hcHBlbmQoJ0luc3BlY3RvckJh
Y2tlbmQuYWN0aXZhdGVEb21haW4oIiUoZG9tYWluTmFtZSlzIiwgJShkZWJ1Z2dhYmxlVHlwZXMp
cyk7JyAlIGFjdGl2YXRlX2FyZ3MpCiAKLSAgICAgICAgcmV0dXJuICJcbiIuam9pbihsaW5lcykK
KyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZG9tYWlu
LmNvbmRpdGlvbiwgIlxuIi5qb2luKGxpbmVzKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfYmFja2VuZF9k
aXNwYXRjaGVyX2hlYWRlci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQpp
bmRleCBlZDhjYzU5NmQzMS4uZWEyZmMxMTI3NGUgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfYmFja2VuZF9k
aXNwYXRjaGVyX2hlYWRlci5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIu
cHkKQEAgLTk5LDcgKzk5LDcgQEAgY2xhc3MgT2JqQ0JhY2tlbmREaXNwYXRjaGVySGVhZGVyR2Vu
ZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogICAgICAgICAgICAgJ29iamNQcmVmaXgnOiBzZWxmLm9i
amNfcHJlZml4KCksCiAgICAgICAgIH0KIAotICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhf
Z3VhcmRfZm9yX2RvbWFpbihkb21haW4sIFRlbXBsYXRlKE9iakNUZW1wbGF0ZXMuQmFja2VuZERp
c3BhdGNoZXJIZWFkZXJEb21haW5IYW5kbGVyT2JqQ0RlY2xhcmF0aW9uKS5zdWJzdGl0dXRlKE5v
bmUsICoqaGFuZGxlcl9hcmdzKSkKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJk
X2Zvcl9jb25kaXRpb24oZG9tYWluLmNvbmRpdGlvbiwgVGVtcGxhdGUoT2JqQ1RlbXBsYXRlcy5C
YWNrZW5kRGlzcGF0Y2hlckhlYWRlckRvbWFpbkhhbmRsZXJPYmpDRGVjbGFyYXRpb24pLnN1YnN0
aXR1dGUoTm9uZSwgKipoYW5kbGVyX2FyZ3MpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9vYmpjX2hh
bmRsZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQoc2VsZiwgY29tbWFuZCk6CiAgICAgICAgIGxp
bmVzID0gW10KQEAgLTExMiw0ICsxMTIsNCBAQCBjbGFzcyBPYmpDQmFja2VuZERpc3BhdGNoZXJI
ZWFkZXJHZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgICAgICAgICAncGFyYW1ldGVycyc6
ICcsICcuam9pbihwYXJhbWV0ZXJzKSwKICAgICAgICAgfQogICAgICAgICBsaW5lcy5hcHBlbmQo
JyAgICB2b2lkICUoY29tbWFuZE5hbWUpcyglKHBhcmFtZXRlcnMpcykgZmluYWw7JyAlIGNvbW1h
bmRfYXJncykKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKyAgICAgICAgcmV0dXJu
IHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oY29tbWFuZC5jb25kaXRpb24sICdc
bicuam9pbihsaW5lcykpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBs
ZW1lbnRhdGlvbi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9j
b2RlZ2VuL2dlbmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5
CmluZGV4IGExYjllMTc5NzA1Li4wMjMxYmY1ODkzZCAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5k
X2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNo
ZXJfaW1wbGVtZW50YXRpb24ucHkKQEAgLTEwNCwxMCArMTA0LDEwIEBAIGNsYXNzIE9iakNCYWNr
ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogICAg
ICAgICAgICAgJ2ludm9jYXRpb24nOiBzZWxmLl9nZW5lcmF0ZV9pbnZvY2F0aW9uX2Zvcl9jb21t
YW5kKGRvbWFpbiwgY29tbWFuZCksCiAgICAgICAgIH0KIAotICAgICAgICByZXR1cm4gc2VsZi53
cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4sIFRlbXBsYXRlKE9iakNUZW1wbGF0ZXMu
QmFja2VuZERpc3BhdGNoZXJIZWFkZXJEb21haW5IYW5kbGVySW1wbGVtZW50YXRpb24pLnN1YnN0
aXR1dGUoTm9uZSwgKipjb21tYW5kX2FyZ3MpKQorICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dp
dGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9uLCBUZW1wbGF0ZShPYmpDVGVt
cGxhdGVzLkJhY2tlbmREaXNwYXRjaGVySGVhZGVyRG9tYWluSGFuZGxlckltcGxlbWVudGF0aW9u
KS5zdWJzdGl0dXRlKE5vbmUsICoqY29tbWFuZF9hcmdzKSkKIAogICAgIGRlZiBfZ2VuZXJhdGVf
cmVzcG9uZHNfdG9fc2VsZWN0b3JfZm9yX2NvbW1hbmQoc2VsZiwgZG9tYWluLCBjb21tYW5kKToK
LSAgICAgICAgcmV0dXJuICdbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9y
KCVzV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOiVzKV0nICUgKGNvbW1hbmQuY29t
bWFuZF9uYW1lLCAnJy5qb2luKG1hcChsYW1iZGEgcGFyYW1ldGVyOiAnJXM6JyAlIHBhcmFtZXRl
ci5wYXJhbWV0ZXJfbmFtZSwgY29tbWFuZC5jYWxsX3BhcmFtZXRlcnMpKSkKKyAgICAgICAgcmV0
dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oY29tbWFuZC5jb25kaXRpb24s
ICdbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKCVzV2l0aEVycm9yQ2Fs
bGJhY2s6c3VjY2Vzc0NhbGxiYWNrOiVzKV0nICUgKGNvbW1hbmQuY29tbWFuZF9uYW1lLCAnJy5q
b2luKG1hcChsYW1iZGEgcGFyYW1ldGVyOiAnJXM6JyAlIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFt
ZSwgY29tbWFuZC5jYWxsX3BhcmFtZXRlcnMpKSkpCiAKICAgICBkZWYgX2dlbmVyYXRlX3N1Y2Nl
c3NfYmxvY2tfZm9yX2NvbW1hbmQoc2VsZiwgZG9tYWluLCBjb21tYW5kKToKICAgICAgICAgbGlu
ZXMgPSBbXQpAQCAtMTU2LDcgKzE1Niw3IEBAIGNsYXNzIE9iakNCYWNrZW5kRGlzcGF0Y2hlcklt
cGxlbWVudGF0aW9uR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogICAgICAgICAgICAgbGluZXMu
YXBwZW5kKCcgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0
SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsnKQogCiAgICAgICAgIGxpbmVzLmFw
cGVuZCgnICAgIH07JykKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKyAgICAgICAg
cmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oY29tbWFuZC5jb25kaXRp
b24sICdcbicuam9pbihsaW5lcykpCiAKICAgICBkZWYgX2dlbmVyYXRlX2NvbnZlcnNpb25zX2Zv
cl9jb21tYW5kKHNlbGYsIGRvbWFpbiwgY29tbWFuZCk6CiAgICAgICAgIGxpbmVzID0gW10KQEAg
LTE5OSw3ICsxOTksNyBAQCBjbGFzcyBPYmpDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlv
bkdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKIAogICAgICAgICBpZiBsaW5lczoKICAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZCgnJykKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKyAg
ICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oY29tbWFuZC5j
b25kaXRpb24sICdcbicuam9pbihsaW5lcykpCiAKICAgICBkZWYgX2dlbmVyYXRlX2ludm9jYXRp
b25fZm9yX2NvbW1hbmQoc2VsZiwgZG9tYWluLCBjb21tYW5kKToKICAgICAgICAgcGFpcnMgPSBb
XQpAQCAtMjE5LDQgKzIxOSw0IEBAIGNsYXNzIE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVu
dGF0aW9uR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogCiAgICAgICAgICAgICAgICAgb3B0aW9u
YWxfZXhwcmVzc2lvbiA9ICcoJXMgPyAmJXMgOiBuaWwpJyAlIChpbl9wYXJhbV9uYW1lLCBvYmpj
X2luX3BhcmFtX2V4cHJlc3Npb24pCiAgICAgICAgICAgICAgICAgcGFpcnMuYXBwZW5kKCclczol
cycgJSAocGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lLCBvcHRpb25hbF9leHByZXNzaW9uKSkKLSAg
ICAgICAgcmV0dXJuICcgICAgW21fZGVsZWdhdGUgJXMlc107JyAlIChjb21tYW5kLmNvbW1hbmRf
bmFtZSwgJyAnLmpvaW4ocGFpcnMpKQorICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3Vh
cmRfZm9yX2NvbmRpdGlvbihjb21tYW5kLmNvbmRpdGlvbiwgJyAgICBbbV9kZWxlZ2F0ZSAlcyVz
XTsnICUgKGNvbW1hbmQuY29tbWFuZF9uYW1lLCAnICcuam9pbihwYWlycykpKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJh
dGVfb2JqY19oZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2hlYWRlci5weQppbmRleCAxNWZiNzRiZThiZi4uMjVl
OWZhZTEwMWQgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfaGVhZGVyLnB5CisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfaGVhZGVyLnB5
CkBAIC0zMSwxMiArMzEsMTIgQEAgZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCiAKIHRyeToK
ICAgICBmcm9tIC5nZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJzdAotICAgIGZyb20g
Lm1vZGVscyBpbXBvcnQgT2JqZWN0VHlwZSwgRW51bVR5cGUsIFBsYXRmb3JtcworICAgIGZyb20g
Lm1vZGVscyBpbXBvcnQgT2JqZWN0VHlwZSwgRW51bVR5cGUKICAgICBmcm9tIC5vYmpjX2dlbmVy
YXRvciBpbXBvcnQgT2JqQ0dlbmVyYXRvciwgam9pbl90eXBlX2FuZF9uYW1lCiAgICAgZnJvbSAu
b2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBPYmpDR2VuZXJhdG9yVGVtcGxhdGVzIGFz
IE9iakNUZW1wbGF0ZXMKIGV4Y2VwdCBWYWx1ZUVycm9yOgogICAgIGZyb20gZ2VuZXJhdG9yIGlt
cG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKLSAgICBmcm9tIG1vZGVscyBpbXBvcnQgT2JqZWN0VHlw
ZSwgRW51bVR5cGUsIFBsYXRmb3JtcworICAgIGZyb20gbW9kZWxzIGltcG9ydCBPYmplY3RUeXBl
LCBFbnVtVHlwZQogICAgIGZyb20gb2JqY19nZW5lcmF0b3IgaW1wb3J0IE9iakNHZW5lcmF0b3Is
IGpvaW5fdHlwZV9hbmRfbmFtZQogICAgIGZyb20gb2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzIGlt
cG9ydCBPYmpDR2VuZXJhdG9yVGVtcGxhdGVzIGFzIE9iakNUZW1wbGF0ZXMKIApAQCAtODcsNyAr
ODcsNiBAQCBjbGFzcyBPYmpDSGVhZGVyR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogICAgICAg
ICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9saWNlbnNlKCkpCiAgICAgICAgIHNlY3Rp
b25zLmFwcGVuZChUZW1wbGF0ZShPYmpDVGVtcGxhdGVzLkhlYWRlclByZWx1ZGUpLnN1YnN0aXR1
dGUoTm9uZSwgKipoZWFkZXJQcmVsdWRlX2FyZ3MpKQogICAgICAgICBzZWN0aW9ucy5hcHBlbmQo
J1xuJy5qb2luKFtfZiBmb3IgX2YgaW4gbWFwKHNlbGYuX2dlbmVyYXRlX2ZvcndhcmRfZGVjbGFy
YXRpb25zLCB0eXBlX2RvbWFpbnMpIGlmIF9mXSkpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChz
ZWxmLl9nZW5lcmF0ZV9lbnVtX2Zvcl9wbGF0Zm9ybXMoKSkKICAgICAgICAgc2VjdGlvbnMuYXBw
ZW5kKCdcbicuam9pbihbX2YgZm9yIF9mIGluIG1hcChzZWxmLl9nZW5lcmF0ZV9lbnVtcywgdHlw
ZV9kb21haW5zKSBpZiBfZl0pKQogICAgICAgICBzZWN0aW9ucy5hcHBlbmQoJ1xuJy5qb2luKFtf
ZiBmb3IgX2YgaW4gbWFwKHNlbGYuX2dlbmVyYXRlX3R5cGVzLCB0eXBlX2RvbWFpbnMpIGlmIF9m
XSkpCiAKQEAgLTEwMyw0MiArMTAyLDUxIEBAIGNsYXNzIE9iakNIZWFkZXJHZW5lcmF0b3IoT2Jq
Q0dlbmVyYXRvcik6CiAgICAgICAgIGZvciBkZWNsYXJhdGlvbiBpbiBzZWxmLnR5cGVfZGVjbGFy
YXRpb25zX2Zvcl9kb21haW4oZG9tYWluKToKICAgICAgICAgICAgIGlmIChpc2luc3RhbmNlKGRl
Y2xhcmF0aW9uLnR5cGUsIE9iamVjdFR5cGUpKToKICAgICAgICAgICAgICAgICBvYmpjX25hbWUg
PSBzZWxmLm9iamNfbmFtZV9mb3JfdHlwZShkZWNsYXJhdGlvbi50eXBlKQotICAgICAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZCgnQGNsYXNzICVzOycgJSBvYmpjX25hbWUpCi0gICAgICAgIHJldHVy
biAnXG4nLmpvaW4obGluZXMpCisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYud3Jh
cF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZGVjbGFyYXRpb24uY29uZGl0aW9uLCAnQGNsYXNz
ICVzOycgJSBvYmpjX25hbWUpKQorICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRf
Zm9yX2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9uLCAnXG4nLmpvaW4obGluZXMpKQogCiAgICAg
ZGVmIF9nZW5lcmF0ZV9lbnVtcyhzZWxmLCBkb21haW4pOgogICAgICAgICBsaW5lcyA9IFtdCiAK
ICAgICAgICAgIyBUeXBlIGVudW1zIGFuZCBtZW1iZXIgZW51bXMuCiAgICAgICAgIGZvciBkZWNs
YXJhdGlvbiBpbiBzZWxmLnR5cGVfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4oZG9tYWluKToKKyAg
ICAgICAgICAgIGRlY2xhcmF0aW9uX2xpbmVzID0gW10KICAgICAgICAgICAgIGlmIGlzaW5zdGFu
Y2UoZGVjbGFyYXRpb24udHlwZSwgRW51bVR5cGUpOgotICAgICAgICAgICAgICAgIGFkZF9uZXds
aW5lKGxpbmVzKQotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9h
bm9ueW1vdXNfZW51bV9mb3JfZGVjbGFyYXRpb24oZG9tYWluLCBkZWNsYXJhdGlvbikpCisgICAg
ICAgICAgICAgICAgYWRkX25ld2xpbmUoZGVjbGFyYXRpb25fbGluZXMpCisgICAgICAgICAgICAg
ICAgZGVjbGFyYXRpb25fbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVt
X2Zvcl9kZWNsYXJhdGlvbihkb21haW4sIGRlY2xhcmF0aW9uKSkKICAgICAgICAgICAgIGVsc2U6
CiAgICAgICAgICAgICAgICAgZm9yIG1lbWJlciBpbiBkZWNsYXJhdGlvbi50eXBlX21lbWJlcnM6
CiAgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UobWVtYmVyLnR5cGUsIEVudW1UeXBl
KSBhbmQgbWVtYmVyLnR5cGUuaXNfYW5vbnltb3VzOgotICAgICAgICAgICAgICAgICAgICAgICAg
YWRkX25ld2xpbmUobGluZXMpCi0gICAgICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQo
c2VsZi5fZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX21lbWJlcihkb21haW4sIGRlY2xhcmF0
aW9uLCBtZW1iZXIpKQorICAgICAgICAgICAgICAgICAgICAgICAgYWRkX25ld2xpbmUoZGVjbGFy
YXRpb25fbGluZXMpCisgICAgICAgICAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbl9saW5lcy5h
cHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX21lbWJlcihkb21haW4sIGRl
Y2xhcmF0aW9uLCBtZW1iZXIpKQorICAgICAgICAgICAgaWYgbGVuKGRlY2xhcmF0aW9uX2xpbmVz
KToKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9y
X2NvbmRpdGlvbihkZWNsYXJhdGlvbi5jb25kaXRpb24sICdcbicuam9pbihkZWNsYXJhdGlvbl9s
aW5lcykpKQogCiAgICAgICAgICMgQW5vbnltb3VzIGNvbW1hbmQgZW51bXMuCiAgICAgICAgIGZv
ciBjb21tYW5kIGluIHNlbGYuY29tbWFuZHNfZm9yX2RvbWFpbihkb21haW4pOgorICAgICAgICAg
ICAgY29tbWFuZF9saW5lcyA9IFtdCiAgICAgICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGNvbW1h
bmQuY2FsbF9wYXJhbWV0ZXJzOgogICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocGFyYW1l
dGVyLnR5cGUsIEVudW1UeXBlKSBhbmQgcGFyYW1ldGVyLnR5cGUuaXNfYW5vbnltb3VzOgotICAg
ICAgICAgICAgICAgICAgICBhZGRfbmV3bGluZShsaW5lcykKLSAgICAgICAgICAgICAgICAgICAg
bGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2Zvcl9wYXJhbWV0ZXIo
ZG9tYWluLCBjb21tYW5kLmNvbW1hbmRfbmFtZSwgcGFyYW1ldGVyKSkKKyAgICAgICAgICAgICAg
ICAgICAgYWRkX25ld2xpbmUoY29tbWFuZF9saW5lcykKKyAgICAgICAgICAgICAgICAgICAgY29t
bWFuZF9saW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX3BhcmFt
ZXRlcihkb21haW4sIGNvbW1hbmQuY29tbWFuZF9uYW1lLCBwYXJhbWV0ZXIpKQogICAgICAgICAg
ICAgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzOgogICAgICAgICAg
ICAgICAgIGlmIGlzaW5zdGFuY2UocGFyYW1ldGVyLnR5cGUsIEVudW1UeXBlKSBhbmQgcGFyYW1l
dGVyLnR5cGUuaXNfYW5vbnltb3VzOgotICAgICAgICAgICAgICAgICAgICBhZGRfbmV3bGluZShs
aW5lcykKLSAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fu
b255bW91c19lbnVtX2Zvcl9wYXJhbWV0ZXIoZG9tYWluLCBjb21tYW5kLmNvbW1hbmRfbmFtZSwg
cGFyYW1ldGVyKSkKKyAgICAgICAgICAgICAgICAgICAgYWRkX25ld2xpbmUoY29tbWFuZF9saW5l
cykKKyAgICAgICAgICAgICAgICAgICAgY29tbWFuZF9saW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJh
dGVfYW5vbnltb3VzX2VudW1fZm9yX3BhcmFtZXRlcihkb21haW4sIGNvbW1hbmQuY29tbWFuZF9u
YW1lLCBwYXJhbWV0ZXIpKQorICAgICAgICAgICAgaWYgbGVuKGNvbW1hbmRfbGluZXMpOgorICAg
ICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0
aW9uKGNvbW1hbmQuY29uZGl0aW9uLCAnXG4nLmpvaW4oY29tbWFuZF9saW5lcykpKQogCiAgICAg
ICAgICMgQW5vbnltb3VzIGV2ZW50IGVudW1zLgogICAgICAgICBmb3IgZXZlbnQgaW4gc2VsZi5l
dmVudHNfZm9yX2RvbWFpbihkb21haW4pOgorICAgICAgICAgICAgZXZlbnRfbGluZXMgPSBbXQog
ICAgICAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBldmVudC5ldmVudF9wYXJhbWV0ZXJzOgogICAg
ICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocGFyYW1ldGVyLnR5cGUsIEVudW1UeXBlKSBhbmQg
cGFyYW1ldGVyLnR5cGUuaXNfYW5vbnltb3VzOgotICAgICAgICAgICAgICAgICAgICBhZGRfbmV3
bGluZShsaW5lcykKLSAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVy
YXRlX2Fub255bW91c19lbnVtX2Zvcl9wYXJhbWV0ZXIoZG9tYWluLCBldmVudC5ldmVudF9uYW1l
LCBwYXJhbWV0ZXIpKQorICAgICAgICAgICAgICAgICAgICBhZGRfbmV3bGluZShldmVudF9saW5l
cykKKyAgICAgICAgICAgICAgICAgICAgZXZlbnRfbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRl
X2Fub255bW91c19lbnVtX2Zvcl9wYXJhbWV0ZXIoZG9tYWluLCBldmVudC5ldmVudF9uYW1lLCBw
YXJhbWV0ZXIpKQorICAgICAgICAgICAgaWYgbGVuKGV2ZW50X2xpbmVzKToKKyAgICAgICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihldmVu
dC5jb25kaXRpb24sICdcbicuam9pbihldmVudF9saW5lcykpKQogCi0gICAgICAgIHJldHVybiAn
XG4nLmpvaW4obGluZXMpCisgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3Jf
Y29uZGl0aW9uKGRvbWFpbi5jb25kaXRpb24sICdcbicuam9pbihsaW5lcykpCiAKICAgICBkZWYg
X2dlbmVyYXRlX3R5cGVzKHNlbGYsIGRvbWFpbik6CiAgICAgICAgIGxpbmVzID0gW10KQEAgLTE0
NywxMiArMTU1LDcgQEAgY2xhc3MgT2JqQ0hlYWRlckdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToK
ICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZGVjbGFyYXRpb24udHlwZSwgT2JqZWN0VHlwZSk6
CiAgICAgICAgICAgICAgICAgYWRkX25ld2xpbmUobGluZXMpCiAgICAgICAgICAgICAgICAgbGlu
ZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX3R5cGVfaW50ZXJmYWNlKGRvbWFpbiwgZGVjbGFyYXRp
b24pKQotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQotCi0gICAgZGVmIF9nZW5lcmF0
ZV9lbnVtX2Zvcl9wbGF0Zm9ybXMoc2VsZik6Ci0gICAgICAgIG9iamNfZW51bV9uYW1lID0gJyVz
UGxhdGZvcm0nICUgc2VsZi5vYmpjX3ByZWZpeCgpCi0gICAgICAgIGVudW1fdmFsdWVzID0gW3Bs
YXRmb3JtLm5hbWUgZm9yIHBsYXRmb3JtIGluIFBsYXRmb3Jtc10KLSAgICAgICAgcmV0dXJuIHNl
bGYuX2dlbmVyYXRlX2VudW0ob2JqY19lbnVtX25hbWUsIGVudW1fdmFsdWVzKQorICAgICAgICBy
ZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9u
LCAnXG4nLmpvaW4obGluZXMpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9m
b3JfZGVjbGFyYXRpb24oc2VsZiwgZG9tYWluLCBkZWNsYXJhdGlvbik6CiAgICAgICAgIG9iamNf
ZW51bV9uYW1lID0gc2VsZi5vYmpjX2VudW1fbmFtZV9mb3JfYW5vbnltb3VzX2VudW1fZGVjbGFy
YXRpb24oZGVjbGFyYXRpb24pCkBAIC0xOTQsNyArMTk3LDcgQEAgY2xhc3MgT2JqQ0hlYWRlckdl
bmVyYXRvcihPYmpDR2VuZXJhdG9yKToKICAgICAgICAgZm9yIG1lbWJlciBpbiBvcHRpb25hbF9t
ZW1iZXJzOgogICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcvKiBvcHRpb25hbCAqLyAnICsgc2Vs
Zi5fZ2VuZXJhdGVfbWVtYmVyX3Byb3BlcnR5KGRlY2xhcmF0aW9uLCBtZW1iZXIpKQogICAgICAg
ICBsaW5lcy5hcHBlbmQoJ0BlbmQnKQotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQor
ICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihkZWNsYXJh
dGlvbi5jb25kaXRpb24sICdcbicuam9pbihsaW5lcykpCiAKICAgICBkZWYgX2dlbmVyYXRlX2lu
aXRfbWV0aG9kX2Zvcl9yZXF1aXJlZF9tZW1iZXJzKHNlbGYsIGRvbWFpbiwgZGVjbGFyYXRpb24s
IHJlcXVpcmVkX21lbWJlcnMpOgogICAgICAgICBwYWlycyA9IFtdCkBAIC0yMTksNyArMjIyLDcg
QEAgY2xhc3MgT2JqQ0hlYWRlckdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKICAgICAgICAgICAg
IGZvciBjb21tYW5kIGluIHNlbGYuY29tbWFuZHNfZm9yX2RvbWFpbihkb21haW4pOgogICAgICAg
ICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9zaW5nbGVfY29tbWFuZF9wcm90
b2NvbChkb21haW4sIGNvbW1hbmQpKQogICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdAZW5kJykK
LSAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKyAgICAgICAgcmV0dXJuIHNlbGYud3Jh
cF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZG9tYWluLmNvbmRpdGlvbiwgJ1xuJy5qb2luKGxp
bmVzKSkKIAogICAgIGRlZiBfZ2VuZXJhdGVfc2luZ2xlX2NvbW1hbmRfcHJvdG9jb2woc2VsZiwg
ZG9tYWluLCBjb21tYW5kKToKICAgICAgICAgcGFpcnMgPSBbXQpAQCAtMjI4LDcgKzIzMSw3IEBA
IGNsYXNzIE9iakNIZWFkZXJHZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgICAgIGZvciBw
YXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6CiAgICAgICAgICAgICBwYXJhbV9u
YW1lID0gcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCiAgICAgICAgICAgICBwYWlycy5hcHBlbmQo
JyVzOiglcyklcycgJSAocGFyYW1fbmFtZSwgc2VsZi5vYmpjX3R5cGVfZm9yX3BhcmFtKGRvbWFp
biwgY29tbWFuZC5jb21tYW5kX25hbWUsIHBhcmFtZXRlciksIHBhcmFtX25hbWUpKQotICAgICAg
ICByZXR1cm4gJy0gKHZvaWQpJXNXaXRoJXM7JyAlIChjb21tYW5kLmNvbW1hbmRfbmFtZSwgJyAn
LmpvaW4ocGFpcnMpKQorICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2Nv
bmRpdGlvbihjb21tYW5kLmNvbmRpdGlvbiwgJy0gKHZvaWQpJXNXaXRoJXM7JyAlIChjb21tYW5k
LmNvbW1hbmRfbmFtZSwgJyAnLmpvaW4ocGFpcnMpKSkKIAogICAgIGRlZiBfY2FsbGJhY2tfYmxv
Y2tfZm9yX2NvbW1hbmQoc2VsZiwgZG9tYWluLCBjb21tYW5kKToKICAgICAgICAgcGFpcnMgPSBb
XQpAQCAtMjQ5LDcgKzI1Miw3IEBAIGNsYXNzIE9iakNIZWFkZXJHZW5lcmF0b3IoT2JqQ0dlbmVy
YXRvcik6CiAgICAgICAgICAgICBmb3IgZXZlbnQgaW4gZXZlbnRzOgogICAgICAgICAgICAgICAg
IGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9zaW5nbGVfZXZlbnRfaW50ZXJmYWNlKGRvbWFp
biwgZXZlbnQpKQogICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdAZW5kJykKLSAgICAgICAgcmV0
dXJuICdcbicuam9pbihsaW5lcykKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJk
X2Zvcl9jb25kaXRpb24oZG9tYWluLmNvbmRpdGlvbiwgJ1xuJy5qb2luKGxpbmVzKSkKIAogICAg
IGRlZiBfZ2VuZXJhdGVfc2luZ2xlX2V2ZW50X2ludGVyZmFjZShzZWxmLCBkb21haW4sIGV2ZW50
KToKICAgICAgICAgaWYgbm90IGV2ZW50LmV2ZW50X3BhcmFtZXRlcnM6CkBAIC0yNTksNCArMjYy
LDQgQEAgY2xhc3MgT2JqQ0hlYWRlckdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKICAgICAgICAg
ICAgIHBhcmFtX25hbWUgPSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKICAgICAgICAgICAgIHBh
aXJzLmFwcGVuZCgnJXM6KCVzKSVzJyAlIChwYXJhbV9uYW1lLCBzZWxmLm9iamNfdHlwZV9mb3Jf
cGFyYW0oZG9tYWluLCBldmVudC5ldmVudF9uYW1lLCBwYXJhbWV0ZXIpLCBwYXJhbV9uYW1lKSkK
ICAgICAgICAgcGFpcnNbMF0gPSB1Y2ZpcnN0KHBhaXJzWzBdKQotICAgICAgICByZXR1cm4gJy0g
KHZvaWQpJXNXaXRoJXM7JyAlIChldmVudC5ldmVudF9uYW1lLCAnICcuam9pbihwYWlycykpCisg
ICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGV2ZW50LmNv
bmRpdGlvbiwgJy0gKHZvaWQpJXNXaXRoJXM7JyAlIChldmVudC5ldmVudF9uYW1lLCAnICcuam9p
bihwYWlycykpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBlX2NvbnZlcnNpb25zX2hl
YWRlci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L2dlbmVyYXRlX29iamNfcHJvdG9jb2xfdHlwZV9jb252ZXJzaW9uc19oZWFkZXIucHkKaW5kZXgg
MjU3MWY0YjIyYTguLjU0MDE1MWE1MWE5IDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVf
Y29udmVyc2lvbnNfaGVhZGVyLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfcHJvdG9jb2xfdHlwZV9jb252ZXJzaW9u
c19oZWFkZXIucHkKQEAgLTMxLDEyICszMSwxMiBAQCBmcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxh
dGUKIAogdHJ5OgogICAgIGZyb20gLmdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yCi0gICAgZnJv
bSAubW9kZWxzIGltcG9ydCBFbnVtVHlwZSwgRnJhbWV3b3JrcywgUGxhdGZvcm1zCisgICAgZnJv
bSAubW9kZWxzIGltcG9ydCBFbnVtVHlwZSwgRnJhbWV3b3JrcwogICAgIGZyb20gLm9iamNfZ2Vu
ZXJhdG9yIGltcG9ydCBPYmpDR2VuZXJhdG9yCiAgICAgZnJvbSAub2JqY19nZW5lcmF0b3JfdGVt
cGxhdGVzIGltcG9ydCBPYmpDR2VuZXJhdG9yVGVtcGxhdGVzIGFzIE9iakNUZW1wbGF0ZXMKIGV4
Y2VwdCBWYWx1ZUVycm9yOgogICAgIGZyb20gZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IKLSAg
ICBmcm9tIG1vZGVscyBpbXBvcnQgRW51bVR5cGUsIEZyYW1ld29ya3MsIFBsYXRmb3JtcworICAg
IGZyb20gbW9kZWxzIGltcG9ydCBFbnVtVHlwZSwgRnJhbWV3b3JrcwogICAgIGZyb20gb2JqY19n
ZW5lcmF0b3IgaW1wb3J0IE9iakNHZW5lcmF0b3IKICAgICBmcm9tIG9iamNfZ2VuZXJhdG9yX3Rl
bXBsYXRlcyBpbXBvcnQgT2JqQ0dlbmVyYXRvclRlbXBsYXRlcyBhcyBPYmpDVGVtcGxhdGVzCiAK
QEAgLTc1LDcgKzc1LDYgQEAgY2xhc3MgT2JqQ1Byb3RvY29sVHlwZUNvbnZlcnNpb25zSGVhZGVy
R2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5n
ZW5lcmF0ZV9saWNlbnNlKCkpCiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShPYmpD
VGVtcGxhdGVzLlR5cGVDb252ZXJzaW9uc0hlYWRlclByZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwg
KipoZWFkZXJfYXJncykpCiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShPYmpDVGVt
cGxhdGVzLlR5cGVDb252ZXJzaW9uc0hlYWRlclN0YW5kYXJkKS5zdWJzdGl0dXRlKE5vbmUpKQot
ICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfZW51bV9jb252ZXJzaW9uX2Zv
cl9wbGF0Zm9ybXMoKSkKICAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKGxpc3QobWFwKHNlbGYuX2dl
bmVyYXRlX2VudW1fY29udmVyc2lvbl9mdW5jdGlvbnMsIGRvbWFpbnMpKSkKICAgICAgICAgc2Vj
dGlvbnMuYXBwZW5kKFRlbXBsYXRlKE9iakNUZW1wbGF0ZXMuVHlwZUNvbnZlcnNpb25zSGVhZGVy
UG9zdGx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCiAgICAgICAgIHJldHVy
biAnXG5cbicuam9pbihzZWN0aW9ucykKQEAgLTg1LDQyICs4NCw0MyBAQCBjbGFzcyBPYmpDUHJv
dG9jb2xUeXBlQ29udmVyc2lvbnNIZWFkZXJHZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAKICAg
ICAgICAgIyBUeXBlIGVudW1zIGFuZCBtZW1iZXIgZW51bXMuCiAgICAgICAgIGZvciBkZWNsYXJh
dGlvbiBpbiBzZWxmLnR5cGVfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4oZG9tYWluKToKKyAgICAg
ICAgICAgIGRlY2xhcmF0aW9uX2xpbmVzID0gW10KICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uo
ZGVjbGFyYXRpb24udHlwZSwgRW51bVR5cGUpOgotICAgICAgICAgICAgICAgIGFkZF9uZXdsaW5l
KGxpbmVzKQotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9u
eW1vdXNfZW51bV9jb252ZXJzaW9uX2Zvcl9kZWNsYXJhdGlvbihkb21haW4sIGRlY2xhcmF0aW9u
KSkKKyAgICAgICAgICAgICAgICBhZGRfbmV3bGluZShkZWNsYXJhdGlvbl9saW5lcykKKyAgICAg
ICAgICAgICAgICBkZWNsYXJhdGlvbl9saW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnlt
b3VzX2VudW1fY29udmVyc2lvbl9mb3JfZGVjbGFyYXRpb24oZG9tYWluLCBkZWNsYXJhdGlvbikp
CiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGZvciBtZW1iZXIgaW4gZGVjbGFy
YXRpb24udHlwZV9tZW1iZXJzOgogICAgICAgICAgICAgICAgICAgICBpZiAoaXNpbnN0YW5jZSht
ZW1iZXIudHlwZSwgRW51bVR5cGUpIGFuZCBtZW1iZXIudHlwZS5pc19hbm9ueW1vdXMpOgotICAg
ICAgICAgICAgICAgICAgICAgICAgYWRkX25ld2xpbmUobGluZXMpCi0gICAgICAgICAgICAgICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fY29udmVy
c2lvbl9mb3JfbWVtYmVyKGRvbWFpbiwgZGVjbGFyYXRpb24sIG1lbWJlcikpCisgICAgICAgICAg
ICAgICAgICAgICAgICBhZGRfbmV3bGluZShkZWNsYXJhdGlvbl9saW5lcykKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGRlY2xhcmF0aW9uX2xpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9u
eW1vdXNfZW51bV9jb252ZXJzaW9uX2Zvcl9tZW1iZXIoZG9tYWluLCBkZWNsYXJhdGlvbiwgbWVt
YmVyKSkKKyAgICAgICAgICAgIGlmIGxlbihkZWNsYXJhdGlvbl9saW5lcyk6CisgICAgICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZGVj
bGFyYXRpb24uY29uZGl0aW9uLCAnXG4nLmpvaW4oZGVjbGFyYXRpb25fbGluZXMpKSkKIAogICAg
ICAgICAjIEFub255bW91cyBjb21tYW5kIGVudW1zLgogICAgICAgICBmb3IgY29tbWFuZCBpbiBz
ZWxmLmNvbW1hbmRzX2Zvcl9kb21haW4oZG9tYWluKToKKyAgICAgICAgICAgIGNvbW1hbmRfbGlu
ZXMgPSBbXQogICAgICAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLmNhbGxfcGFyYW1l
dGVyczoKICAgICAgICAgICAgICAgICBpZiAoaXNpbnN0YW5jZShwYXJhbWV0ZXIudHlwZSwgRW51
bVR5cGUpIGFuZCBwYXJhbWV0ZXIudHlwZS5pc19hbm9ueW1vdXMpOgotICAgICAgICAgICAgICAg
ICAgICBhZGRfbmV3bGluZShsaW5lcykKLSAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5k
KHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2NvbnZlcnNpb25fZm9yX3BhcmFtZXRlcihk
b21haW4sIGNvbW1hbmQuY29tbWFuZF9uYW1lLCBwYXJhbWV0ZXIpKQorICAgICAgICAgICAgICAg
ICAgICBhZGRfbmV3bGluZShjb21tYW5kX2xpbmVzKQorICAgICAgICAgICAgICAgICAgICBjb21t
YW5kX2xpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9jb252ZXJzaW9u
X2Zvcl9wYXJhbWV0ZXIoZG9tYWluLCBjb21tYW5kLmNvbW1hbmRfbmFtZSwgcGFyYW1ldGVyKSkK
ICAgICAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVyczoK
ICAgICAgICAgICAgICAgICBpZiAoaXNpbnN0YW5jZShwYXJhbWV0ZXIudHlwZSwgRW51bVR5cGUp
IGFuZCBwYXJhbWV0ZXIudHlwZS5pc19hbm9ueW1vdXMpOgotICAgICAgICAgICAgICAgICAgICBh
ZGRfbmV3bGluZShsaW5lcykKLSAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYu
X2dlbmVyYXRlX2Fub255bW91c19lbnVtX2NvbnZlcnNpb25fZm9yX3BhcmFtZXRlcihkb21haW4s
IGNvbW1hbmQuY29tbWFuZF9uYW1lLCBwYXJhbWV0ZXIpKQorICAgICAgICAgICAgICAgICAgICBh
ZGRfbmV3bGluZShjb21tYW5kX2xpbmVzKQorICAgICAgICAgICAgICAgICAgICBjb21tYW5kX2xp
bmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9jb252ZXJzaW9uX2Zvcl9w
YXJhbWV0ZXIoZG9tYWluLCBjb21tYW5kLmNvbW1hbmRfbmFtZSwgcGFyYW1ldGVyKSkKKyAgICAg
ICAgICAgIGlmIGxlbihjb21tYW5kX2xpbmVzKToKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBl
bmQoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihjb21tYW5kLmNvbmRpdGlvbiwg
J1xuJy5qb2luKGNvbW1hbmRfbGluZXMpKSkKIAogICAgICAgICAjIEFub255bW91cyBldmVudCBl
bnVtcy4KICAgICAgICAgZm9yIGV2ZW50IGluIHNlbGYuZXZlbnRzX2Zvcl9kb21haW4oZG9tYWlu
KToKKyAgICAgICAgICAgIGV2ZW50X2xpbmVzID0gW10KICAgICAgICAgICAgIGZvciBwYXJhbWV0
ZXIgaW4gZXZlbnQuZXZlbnRfcGFyYW1ldGVyczoKICAgICAgICAgICAgICAgICBpZiAoaXNpbnN0
YW5jZShwYXJhbWV0ZXIudHlwZSwgRW51bVR5cGUpIGFuZCBwYXJhbWV0ZXIudHlwZS5pc19hbm9u
eW1vdXMpOgotICAgICAgICAgICAgICAgICAgICBhZGRfbmV3bGluZShsaW5lcykKLSAgICAgICAg
ICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2Nv
bnZlcnNpb25fZm9yX3BhcmFtZXRlcihkb21haW4sIGV2ZW50LmV2ZW50X25hbWUsIHBhcmFtZXRl
cikpCisgICAgICAgICAgICAgICAgICAgIGFkZF9uZXdsaW5lKGV2ZW50X2xpbmVzKQorICAgICAg
ICAgICAgICAgICAgICBldmVudF9saW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnltb3Vz
X2VudW1fY29udmVyc2lvbl9mb3JfcGFyYW1ldGVyKGRvbWFpbiwgZXZlbnQuZXZlbnRfbmFtZSwg
cGFyYW1ldGVyKSkKKyAgICAgICAgICAgIGlmIGxlbihldmVudF9saW5lcyk6CisgICAgICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZXZl
bnQuY29uZGl0aW9uLCAnXG4nLmpvaW4oZXZlbnRfbGluZXMpKSkKIAotICAgICAgICByZXR1cm4g
J1xuJy5qb2luKGxpbmVzKQotCi0gICAgZGVmIF9nZW5lcmF0ZV9lbnVtX2NvbnZlcnNpb25fZm9y
X3BsYXRmb3JtcyhzZWxmKToKLSAgICAgICAgb2JqY19lbnVtX25hbWUgPSAnJXNQbGF0Zm9ybScg
JSBzZWxmLm9iamNfcHJlZml4KCkKLSAgICAgICAgZW51bV92YWx1ZXMgPSBbcGxhdGZvcm0ubmFt
ZSBmb3IgcGxhdGZvcm0gaW4gUGxhdGZvcm1zXQotICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAg
IGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9lbnVtX29iamNfdG9fcHJvdG9jb2xfc3RyaW5n
KG9iamNfZW51bV9uYW1lLCBlbnVtX3ZhbHVlcykpCi0gICAgICAgIGxpbmVzLmFwcGVuZChzZWxm
Ll9nZW5lcmF0ZV9lbnVtX2Zyb21fcHJvdG9jb2xfc3RyaW5nKG9iamNfZW51bV9uYW1lLCBlbnVt
X3ZhbHVlcykpCi0gICAgICAgIHJldHVybiAnXG5cbicuam9pbihsaW5lcykKKyAgICAgICAgcmV0
dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZG9tYWluLmNvbmRpdGlvbiwg
J1xuJy5qb2luKGxpbmVzKSkKIAogICAgIGRlZiBfZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fY29u
dmVyc2lvbl9mb3JfZGVjbGFyYXRpb24oc2VsZiwgZG9tYWluLCBkZWNsYXJhdGlvbik6CiAgICAg
ICAgIG9iamNfZW51bV9uYW1lID0gc2VsZi5vYmpjX2VudW1fbmFtZV9mb3JfYW5vbnltb3VzX2Vu
dW1fZGVjbGFyYXRpb24oZGVjbGFyYXRpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5
cGVfY29udmVyc2lvbnNfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVfY29u
dmVyc2lvbnNfaW1wbGVtZW50YXRpb24ucHkKaW5kZXggYTM2ZDgxM2VjZWUuLmZiZDEzMWE2NmUy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVfY29udmVyc2lvbnNfaW1wbGVtZW50YXRp
b24ucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVn
ZW4vZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBlX2NvbnZlcnNpb25zX2ltcGxlbWVudGF0aW9u
LnB5CkBAIC04MywxNSArODMsMTYgQEAgY2xhc3MgT2JqQ1Byb3RvY29sVHlwZUNvbnZlcnNpb25z
SW1wbGVtZW50YXRpb25HZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgZGVmIF9nZW5lcmF0
ZV90eXBlX2ZhY3RvcnlfY2F0ZWdvcnlfaW50ZXJmYWNlKHNlbGYsIGRvbWFpbnMpOgogICAgICAg
ICBsaW5lcyA9IFtdCiAgICAgICAgIGZvciBkb21haW4gaW4gZG9tYWluczoKLSAgICAgICAgICAg
IGxpbmVzLmFwcGVuZCgnQGludGVyZmFjZSAlc1R5cGVDb252ZXJzaW9ucyAoJXNEb21haW4pJyAl
IChzZWxmLnByb3RvY29sX25hbWUoKSwgZG9tYWluLmRvbWFpbl9uYW1lKSkKLSAgICAgICAgICAg
IGxpbmVzLmFwcGVuZCgnJykKKyAgICAgICAgICAgIGRvbWFpbl9saW5lcyA9IFtdCisgICAgICAg
ICAgICBkb21haW5fbGluZXMuYXBwZW5kKCdAaW50ZXJmYWNlICVzVHlwZUNvbnZlcnNpb25zICgl
c0RvbWFpbiknICUgKHNlbGYucHJvdG9jb2xfbmFtZSgpLCBkb21haW4uZG9tYWluX25hbWUpKQor
ICAgICAgICAgICAgYWRkX25ld2xpbmUoZG9tYWluX2xpbmVzKQogCiAgICAgICAgICAgICBmb3Ig
ZGVjbGFyYXRpb24gaW4gc2VsZi50eXBlX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluKGRvbWFpbik6
Ci0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX3R5cGVfZmFjdG9y
eV9tZXRob2RfZGVjbGFyYXRpb24oZG9tYWluLCBkZWNsYXJhdGlvbikpCi0KLSAgICAgICAgICAg
IGFkZF9uZXdsaW5lKGxpbmVzKQotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdAZW5kJykKKyAg
ICAgICAgICAgICAgICBkb21haW5fbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX3R5cGVfZmFj
dG9yeV9tZXRob2RfZGVjbGFyYXRpb24oZG9tYWluLCBkZWNsYXJhdGlvbikpCiAKKyAgICAgICAg
ICAgIGFkZF9uZXdsaW5lKGRvbWFpbl9saW5lcykKKyAgICAgICAgICAgIGRvbWFpbl9saW5lcy5h
cHBlbmQoJ0BlbmQnKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYud3JhcF93aXRoX2d1
YXJkX2Zvcl9jb25kaXRpb24oZG9tYWluLmNvbmRpdGlvbiwgJ1xuJy5qb2luKGRvbWFpbl9saW5l
cykpKQogICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQogCiAgICAgZGVmIF9nZW5lcmF0
ZV90eXBlX2ZhY3RvcnlfbWV0aG9kX2RlY2xhcmF0aW9uKHNlbGYsIGRvbWFpbiwgZGVjbGFyYXRp
b24pOgpAQCAtMTAwLDIwICsxMDEsMjMgQEAgY2xhc3MgT2JqQ1Byb3RvY29sVHlwZUNvbnZlcnNp
b25zSW1wbGVtZW50YXRpb25HZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgICAgICAgICBy
ZXNvbHZlZF90eXBlID0gcmVzb2x2ZWRfdHlwZS5hbGlhc2VkX3R5cGUKICAgICAgICAgaWYgaXNp
bnN0YW5jZShyZXNvbHZlZF90eXBlLCAoT2JqZWN0VHlwZSwgQXJyYXlUeXBlLCBQcmltaXRpdmVU
eXBlKSk6CiAgICAgICAgICAgICBvYmpjX3R5cGUgPSBzZWxmLm9iamNfY2xhc3NfZm9yX3R5cGUo
cmVzb2x2ZWRfdHlwZSkKLSAgICAgICAgICAgIHJldHVybiAnKyAodm9pZClfcGFyc2UlczooJXMg
Kiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7JyAlIChkZWNsYXJhdGlvbi50eXBl
LnJhd19uYW1lKCksIG9iamNfdHlwZSkKKyAgICAgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0
aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRlY2xhcmF0aW9uLmNvbmRpdGlvbiwgJysgKHZvaWQpX3Bh
cnNlJXM6KCVzICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOycgJSAoZGVjbGFy
YXRpb24udHlwZS5yYXdfbmFtZSgpLCBvYmpjX3R5cGUpKQogICAgICAgICBpZiBpc2luc3RhbmNl
KHJlc29sdmVkX3R5cGUsIEVudW1UeXBlKToKLSAgICAgICAgICAgIHJldHVybiAnKyAodm9pZClf
cGFyc2UlczooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7JyAl
IGRlY2xhcmF0aW9uLnR5cGUucmF3X25hbWUoKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYud3Jh
cF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZGVjbGFyYXRpb24uY29uZGl0aW9uLCAnKyAodm9p
ZClfcGFyc2UlczooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7
JyAlIGRlY2xhcmF0aW9uLnR5cGUucmF3X25hbWUoKSkKIAogICAgIGRlZiBfZ2VuZXJhdGVfdHlw
ZV9mYWN0b3J5X2NhdGVnb3J5X2ltcGxlbWVudGF0aW9uKHNlbGYsIGRvbWFpbnMpOgogICAgICAg
ICBsaW5lcyA9IFtdCiAgICAgICAgIGZvciBkb21haW4gaW4gZG9tYWluczoKLSAgICAgICAgICAg
IGxpbmVzLmFwcGVuZCgnQGltcGxlbWVudGF0aW9uICVzVHlwZUNvbnZlcnNpb25zICglc0RvbWFp
biknICUgKHNlbGYucHJvdG9jb2xfbmFtZSgpLCBkb21haW4uZG9tYWluX25hbWUpKQotICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKCcnKQorICAgICAgICAgICAgZG9tYWluX2xpbmVzID0gW10KKyAg
ICAgICAgICAgIGRvbWFpbl9saW5lcy5hcHBlbmQoJ0BpbXBsZW1lbnRhdGlvbiAlc1R5cGVDb252
ZXJzaW9ucyAoJXNEb21haW4pJyAlIChzZWxmLnByb3RvY29sX25hbWUoKSwgZG9tYWluLmRvbWFp
bl9uYW1lKSkKKyAgICAgICAgICAgIGFkZF9uZXdsaW5lKGRvbWFpbl9saW5lcykKIAogICAgICAg
ICAgICAgZm9yIGRlY2xhcmF0aW9uIGluIHNlbGYudHlwZV9kZWNsYXJhdGlvbnNfZm9yX2RvbWFp
bihkb21haW4pOgotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV90
eXBlX2ZhY3RvcnlfbWV0aG9kX2ltcGxlbWVudGF0aW9uKGRvbWFpbiwgZGVjbGFyYXRpb24pKQot
ICAgICAgICAgICAgICAgIGFkZF9uZXdsaW5lKGxpbmVzKQotICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKCdAZW5kJykKKyAgICAgICAgICAgICAgICBkb21haW5fbGluZXMuYXBwZW5kKHNlbGYuX2dl
bmVyYXRlX3R5cGVfZmFjdG9yeV9tZXRob2RfaW1wbGVtZW50YXRpb24oZG9tYWluLCBkZWNsYXJh
dGlvbikpCisgICAgICAgICAgICAgICAgYWRkX25ld2xpbmUoZG9tYWluX2xpbmVzKQorCisgICAg
ICAgICAgICBkb21haW5fbGluZXMuYXBwZW5kKCdAZW5kJykKKyAgICAgICAgICAgIGxpbmVzLmFw
cGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRvbWFpbi5jb25kaXRpb24s
ICdcbicuam9pbihkb21haW5fbGluZXMpKSkKICAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5l
cykKIAogICAgIGRlZiBfZ2VuZXJhdGVfdHlwZV9mYWN0b3J5X21ldGhvZF9pbXBsZW1lbnRhdGlv
bihzZWxmLCBkb21haW4sIGRlY2xhcmF0aW9uKToKQEAgLTE0MSw0ICsxNDUsNCBAQCBjbGFzcyBP
YmpDUHJvdG9jb2xUeXBlQ29udmVyc2lvbnNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihPYmpDR2Vu
ZXJhdG9yKToKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOycpCiAgICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoJyAgICAqb3V0VmFsdWUgPSBbWyVzIGFsbG9jXSBpbml0V2l0aFBheWxv
YWQ6cGF5bG9hZF07JyAlIChvYmpjX2NsYXNzKSkKICAgICAgICAgbGluZXMuYXBwZW5kKCd9JykK
LSAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKyAgICAgICAgcmV0dXJuIHNlbGYud3Jh
cF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZGVjbGFyYXRpb24uY29uZGl0aW9uLCAnXG4nLmpv
aW4obGluZXMpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlv
bi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dl
bmVyYXRlX29iamNfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkKaW5kZXggYzg3MDg4
MWFiZDguLjAwZDdhMGFmZTdkIDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVzX2ltcGxl
bWVudGF0aW9uLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkK
QEAgLTkxLDcgKzkxLDcgQEAgY2xhc3MgT2JqQ1Byb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdl
bmVyYXRvcihPYmpDR2VuZXJhdG9yKToKICAgICAgICAgICAgIGlmIChpc2luc3RhbmNlKGRlY2xh
cmF0aW9uLnR5cGUsIE9iamVjdFR5cGUpKToKICAgICAgICAgICAgICAgICBhZGRfbmV3bGluZShs
aW5lcykKICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV90eXBlX2lt
cGxlbWVudGF0aW9uKGRvbWFpbiwgZGVjbGFyYXRpb24pKQotICAgICAgICByZXR1cm4gJ1xuJy5q
b2luKGxpbmVzKQorICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRp
dGlvbihkb21haW4uY29uZGl0aW9uLCAnXG4nLmpvaW4obGluZXMpKQogCiAgICAgZGVmIGdlbmVy
YXRlX3R5cGVfaW1wbGVtZW50YXRpb24oc2VsZiwgZG9tYWluLCBkZWNsYXJhdGlvbik6CiAgICAg
ICAgIGxpbmVzID0gW10KQEAgLTExMiw3ICsxMTIsNyBAQCBjbGFzcyBPYmpDUHJvdG9jb2xUeXBl
c0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogICAgICAgICAgICAgbGlu
ZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2dldHRlcl9mb3JfbWVtYmVyKGRvbWFpbiwgZGVjbGFy
YXRpb24sIG1lbWJlcikpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKICAgICAgICAgbGluZXMu
YXBwZW5kKCdAZW5kJykKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKyAgICAgICAg
cmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZGVjbGFyYXRpb24uY29u
ZGl0aW9uLCAnXG4nLmpvaW4obGluZXMpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9pbml0X21ldGhv
ZF9mb3JfcHJvdG9jb2xfb2JqZWN0KHNlbGYsIGRvbWFpbiwgZGVjbGFyYXRpb24pOgogICAgICAg
ICBsaW5lcyA9IFtdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3IucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3IucHkKaW5kZXggOGMyZmJiOGJjNTIuLjk0
ZDE4ZDlkNjYxIDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0b3IucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yLnB5CkBAIC0zMSwxMCArMzEsMTAgQEAg
ZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCiAKIHRyeToKICAgICBmcm9tIC5nZW5lcmF0b3Jf
dGVtcGxhdGVzIGltcG9ydCBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgVGVtcGxhdGVzCi0gICAgZnJv
bSAubW9kZWxzIGltcG9ydCBQcmltaXRpdmVUeXBlLCBPYmplY3RUeXBlLCBBcnJheVR5cGUsIEVu
dW1UeXBlLCBBbGlhc2VkVHlwZSwgRnJhbWV3b3JrcywgUGxhdGZvcm1zCisgICAgZnJvbSAubW9k
ZWxzIGltcG9ydCBQcmltaXRpdmVUeXBlLCBPYmplY3RUeXBlLCBBcnJheVR5cGUsIEVudW1UeXBl
LCBBbGlhc2VkVHlwZSwgRnJhbWV3b3JrcwogZXhjZXB0IFZhbHVlRXJyb3I6CiAgICAgZnJvbSBn
ZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgVGVtcGxhdGVz
Ci0gICAgZnJvbSBtb2RlbHMgaW1wb3J0IFByaW1pdGl2ZVR5cGUsIE9iamVjdFR5cGUsIEFycmF5
VHlwZSwgRW51bVR5cGUsIEFsaWFzZWRUeXBlLCBGcmFtZXdvcmtzLCBQbGF0Zm9ybXMKKyAgICBm
cm9tIG1vZGVscyBpbXBvcnQgUHJpbWl0aXZlVHlwZSwgT2JqZWN0VHlwZSwgQXJyYXlUeXBlLCBF
bnVtVHlwZSwgQWxpYXNlZFR5cGUsIEZyYW1ld29ya3MKIAogbG9nID0gbG9nZ2luZy5nZXRMb2dn
ZXIoJ2dsb2JhbCcpCiAKQEAgLTk0LDM1ICs5NCwyOCBAQCBfVFlQRVNfV0lUSF9PUEVOX0ZJRUxE
UyA9IHsKIH0KIAogY2xhc3MgR2VuZXJhdG9yOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2Rl
bCwgcGxhdGZvcm0sIGlucHV0X2ZpbGVwYXRoKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbW9k
ZWwsIGlucHV0X2ZpbGVwYXRoKToKICAgICAgICAgc2VsZi5fbW9kZWwgPSBtb2RlbAotICAgICAg
ICBzZWxmLl9wbGF0Zm9ybSA9IHBsYXRmb3JtCiAgICAgICAgIHNlbGYuX2lucHV0X2ZpbGVwYXRo
ID0gaW5wdXRfZmlsZXBhdGgKICAgICAgICAgc2VsZi5fc2V0dGluZ3MgPSB7fQogCiAgICAgZGVm
IG1vZGVsKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5fbW9kZWwKIAotICAgIGRlZiBwbGF0
Zm9ybShzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX3BsYXRmb3JtCi0KICAgICBkZWYgc2V0
X2dlbmVyYXRvcl9zZXR0aW5nKHNlbGYsIGtleSwgdmFsdWUpOgogICAgICAgICBzZWxmLl9zZXR0
aW5nc1trZXldID0gdmFsdWUKIAotICAgIGRlZiBjYW5fZ2VuZXJhdGVfcGxhdGZvcm0oc2VsZiwg
bW9kZWxfcGxhdGZvcm0pOgotICAgICAgICByZXR1cm4gbW9kZWxfcGxhdGZvcm0gaXMgUGxhdGZv
cm1zLkdlbmVyaWMgb3Igc2VsZi5fcGxhdGZvcm0gaXMgUGxhdGZvcm1zLkFsbCBvciBtb2RlbF9w
bGF0Zm9ybSBpcyBzZWxmLl9wbGF0Zm9ybQotCiAgICAgZGVmIHZlcnNpb25fZm9yX2RvbWFpbihz
ZWxmLCBkb21haW4pOgogICAgICAgICByZXR1cm4gZG9tYWluLnZlcnNpb24oKQogCiAgICAgZGVm
IHR5cGVfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToKLSAgICAgICAgcmV0
dXJuIFt0eXBlX2RlY2xhcmF0aW9uIGZvciB0eXBlX2RlY2xhcmF0aW9uIGluIGRvbWFpbi5hbGxf
dHlwZV9kZWNsYXJhdGlvbnMoKSBpZiBzZWxmLmNhbl9nZW5lcmF0ZV9wbGF0Zm9ybSh0eXBlX2Rl
Y2xhcmF0aW9uLnBsYXRmb3JtKV0KKyAgICAgICAgcmV0dXJuIGRvbWFpbi5hbGxfdHlwZV9kZWNs
YXJhdGlvbnMoKQogCiAgICAgZGVmIGNvbW1hbmRzX2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToK
LSAgICAgICAgcmV0dXJuIFtjb21tYW5kIGZvciBjb21tYW5kIGluIGRvbWFpbi5hbGxfY29tbWFu
ZHMoKSBpZiBzZWxmLmNhbl9nZW5lcmF0ZV9wbGF0Zm9ybShjb21tYW5kLnBsYXRmb3JtKV0KKyAg
ICAgICAgcmV0dXJuIGRvbWFpbi5hbGxfY29tbWFuZHMoKQogCiAgICAgZGVmIGV2ZW50c19mb3Jf
ZG9tYWluKHNlbGYsIGRvbWFpbik6Ci0gICAgICAgIHJldHVybiBbZXZlbnQgZm9yIGV2ZW50IGlu
IGRvbWFpbi5hbGxfZXZlbnRzKCkgaWYgc2VsZi5jYW5fZ2VuZXJhdGVfcGxhdGZvcm0oZXZlbnQu
cGxhdGZvcm0pXQorICAgICAgICByZXR1cm4gZG9tYWluLmFsbF9ldmVudHMoKQogCiAgICAgIyBU
aGUgZ29vZnkgbmFtZSBpcyB0byBkaXNhbWJpZ3VhdGUgZ2VuZXJhdG9yIHNldHRpbmdzIGZyb20g
ZnJhbWV3b3JrIHNldHRpbmdzLgogICAgIGRlZiBnZXRfZ2VuZXJhdG9yX3NldHRpbmcoc2VsZiwg
a2V5LCBkZWZhdWx0PU5vbmUpOgpAQCAtMjY3LDIyICsyNjAsMTUgQEAgY2xhc3MgR2VuZXJhdG9y
OgogICAgICAgICBzZWxmLl9hc3NpZ25lZF9lbnVtX3ZhbHVlcy5hcHBlbmQoZW51bV92YWx1ZSkK
IAogICAgICMgTWlzY2VsbGFuZW91cyB0ZXh0IG1hbmlwdWxhdGlvbiByb3V0aW5lcy4KLSAgICBk
ZWYgd3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oc2VsZiwgZG9tYWluLCB0ZXh0KToKLSAgICAg
ICAgaWYgc2VsZi5tb2RlbCgpLmZyYW1ld29yayBpcyBGcmFtZXdvcmtzLldlYkluc3BlY3RvcjoK
LSAgICAgICAgICAgIHJldHVybiB0ZXh0Ci0gICAgICAgIGd1YXJkID0gZG9tYWluLmZlYXR1cmVf
Z3VhcmQKLSAgICAgICAgaWYgZ3VhcmQ6Ci0gICAgICAgICAgICByZXR1cm4gR2VuZXJhdG9yLndy
YXBfd2l0aF9ndWFyZChndWFyZCwgdGV4dCkKKyAgICBkZWYgd3JhcF93aXRoX2d1YXJkX2Zvcl9j
b25kaXRpb24oc2VsZiwgY29uZGl0aW9uLCB0ZXh0KToKKyAgICAgICAgaWYgY29uZGl0aW9uOgor
ICAgICAgICAgICAgcmV0dXJuICdcbicuam9pbihbCisgICAgICAgICAgICAgICAgJyNpZiAlcycg
JSBjb25kaXRpb24sCisgICAgICAgICAgICAgICAgdGV4dCwKKyAgICAgICAgICAgICAgICAnI2Vu
ZGlmIC8vICVzJyAlIGNvbmRpdGlvbiwKKyAgICAgICAgICAgIF0pCiAgICAgICAgIHJldHVybiB0
ZXh0CiAKLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIHdyYXBfd2l0aF9ndWFyZChndWFyZCwg
dGV4dCk6Ci0gICAgICAgIHJldHVybiAnXG4nLmpvaW4oWwotICAgICAgICAgICAgJyNpZiAlcycg
JSBndWFyZCwKLSAgICAgICAgICAgIHRleHQsCi0gICAgICAgICAgICAnI2VuZGlmIC8vICVzJyAl
IGd1YXJkLAotICAgICAgICBdKQotCiAgICAgQHN0YXRpY21ldGhvZAogICAgIGRlZiBzdHlsaXpl
ZF9uYW1lX2Zvcl9lbnVtX3ZhbHVlKGVudW1fdmFsdWUpOgogICAgICAgICByZWdleCA9ICcoJXMp
JyAlICJ8Ii5qb2luKF9BTFdBWVNfU1BFQ0lBTENBU0VEX0VOVU1fVkFMVUVfU1VCU1RSSU5HUykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL21vZGVscy5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9j
b2RlZ2VuL21vZGVscy5weQppbmRleCA2ZDk3YTA5M2MzNC4uMWRmMmJkZjY2NWEgMTAwNzU1Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL21vZGVs
cy5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9tb2RlbHMucHkKQEAgLTEzNiw0MSArMTM2LDYgQEAgY2xhc3MgRnJhbWV3b3JrczoKICAgICBU
ZXN0ID0gRnJhbWV3b3JrKCJUZXN0IikKIAogCi1jbGFzcyBQbGF0Zm9ybToKLSAgICBkZWYgX19p
bml0X18oc2VsZiwgbmFtZSk6Ci0gICAgICAgIHNlbGYubmFtZSA9IG5hbWUKLQotICAgIEBzdGF0
aWNtZXRob2QKLSAgICBkZWYgZnJvbVN0cmluZyhwbGF0Zm9ybVN0cmluZyk6Ci0gICAgICAgIHBs
YXRmb3JtU3RyaW5nID0gcGxhdGZvcm1TdHJpbmcubG93ZXIoKQotICAgICAgICBpZiBwbGF0Zm9y
bVN0cmluZyA9PSAiaW9zIjoKLSAgICAgICAgICAgIHJldHVybiBQbGF0Zm9ybXMuaU9TCi0KLSAg
ICAgICAgaWYgcGxhdGZvcm1TdHJpbmcgPT0gIm1hY29zIjoKLSAgICAgICAgICAgIHJldHVybiBQ
bGF0Zm9ybXMubWFjT1MKLQotICAgICAgICBpZiBwbGF0Zm9ybVN0cmluZyA9PSAiYWxsIjoKLSAg
ICAgICAgICAgIHJldHVybiBQbGF0Zm9ybXMuQWxsCi0KLSAgICAgICAgaWYgcGxhdGZvcm1TdHJp
bmcgPT0gImdlbmVyaWMiIG9yIG5vdCBwbGF0Zm9ybVN0cmluZzoKLSAgICAgICAgICAgIHJldHVy
biBQbGF0Zm9ybXMuR2VuZXJpYwotCi0gICAgICAgIHJhaXNlIFBhcnNlRXhjZXB0aW9uKCJVbmtu
b3duIHBsYXRmb3JtOiAlcyIgJSBwbGF0Zm9ybVN0cmluZykKLQotCi1jbGFzcyBQbGF0Zm9ybXM6
Ci0gICAgQWxsID0gUGxhdGZvcm0oImFsbCIpCi0gICAgR2VuZXJpYyA9IFBsYXRmb3JtKCJnZW5l
cmljIikKLSAgICBpT1MgPSBQbGF0Zm9ybSgiaW9zIikKLSAgICBtYWNPUyA9IFBsYXRmb3JtKCJt
YWNvcyIpCi0KLSAgICAjIEFsbG93IGl0ZXJhdGlvbiBvdmVyIGFsbCBwbGF0Zm9ybXMuIFNlZSA8
aHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy81NDM0NDAwLz4uCi0gICAgY2xhc3Mg
X19tZXRhY2xhc3NfXyh0eXBlKToKLSAgICAgICAgZGVmIF9faXRlcl9fKHNlbGYpOgotICAgICAg
ICAgICAgZm9yIGF0dHIgaW4gZGlyKFBsYXRmb3Jtcyk6Ci0gICAgICAgICAgICAgICAgaWYgbm90
IGF0dHIuc3RhcnRzd2l0aCgiX18iKToKLSAgICAgICAgICAgICAgICAgICAgeWllbGQgZ2V0YXR0
cihQbGF0Zm9ybXMsIGF0dHIpCi0KIGNsYXNzIFR5cGVSZWZlcmVuY2U6CiAgICAgZGVmIF9faW5p
dF9fKHNlbGYsIHR5cGVfa2luZCwgcmVmZXJlbmNlZF90eXBlX25hbWUsIGVudW1fdmFsdWVzLCBh
cnJheV9pdGVtcyk6CiAgICAgICAgIHNlbGYudHlwZV9raW5kID0gdHlwZV9raW5kCkBAIC00Mzks
NyArNDA0LDcgQEAgY2xhc3MgUHJvdG9jb2w6CiAgICAgICAgICAgICAgICAgcmFpc2UgUGFyc2VF
eGNlcHRpb24oIk1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjogZXZlbnRzIGlzIG5vdCBh
biBhcnJheSIpCiAgICAgICAgICAgICBldmVudHMuZXh0ZW5kKFtzZWxmLnBhcnNlX2V2ZW50KGV2
ZW50LCBkZWJ1Z2dhYmxlX3R5cGVzKSBmb3IgZXZlbnQgaW4ganNvblsnZXZlbnRzJ11dKQogCi0g
ICAgICAgIHNlbGYuZG9tYWlucy5hcHBlbmQoRG9tYWluKGpzb25bJ2RvbWFpbiddLCBqc29uLmdl
dCgnZGVzY3JpcHRpb24nLCAnJyksIGpzb24uZ2V0KCdmZWF0dXJlR3VhcmQnKSwgZGVidWdnYWJs
ZV90eXBlcywgdGFyZ2V0X3R5cGVzLCBpc1N1cHBsZW1lbnRhbCwgdmVyc2lvbiwgdHlwZXMsIGNv
bW1hbmRzLCBldmVudHMpKQorICAgICAgICBzZWxmLmRvbWFpbnMuYXBwZW5kKERvbWFpbihqc29u
Wydkb21haW4nXSwganNvbi5nZXQoJ2Rlc2NyaXB0aW9uJywgJycpLCBqc29uLmdldCgnY29uZGl0
aW9uJyksIGRlYnVnZ2FibGVfdHlwZXMsIHRhcmdldF90eXBlcywgaXNTdXBwbGVtZW50YWwsIHZl
cnNpb24sIHR5cGVzLCBjb21tYW5kcywgZXZlbnRzKSkKIAogICAgIGRlZiBwYXJzZV90eXBlX2Rl
Y2xhcmF0aW9uKHNlbGYsIGpzb24pOgogICAgICAgICBjaGVja19mb3JfcmVxdWlyZWRfcHJvcGVy
dGllcyhbJ2lkJywgJ3R5cGUnXSwganNvbiwgInR5cGUiKQpAQCAtNDU3LDggKzQyMiw3IEBAIGNs
YXNzIFByb3RvY29sOgogICAgICAgICAgICAgcmFpc2UgUGFyc2VFeGNlcHRpb24oIk1hbGZvcm1l
ZCBkb21haW4gc3BlY2lmaWNhdGlvbjogdHlwZSBkZWNsYXJhdGlvbiBmb3IgJXMgaGFzIGR1cGxp
Y2F0ZSBtZW1iZXIgbmFtZXMiICUganNvblsnaWQnXSkKIAogICAgICAgICB0eXBlX3JlZiA9IFR5
cGVSZWZlcmVuY2UoanNvblsndHlwZSddLCBqc29uLmdldCgnJHJlZicpLCBqc29uLmdldCgnZW51
bScpLCBqc29uLmdldCgnaXRlbXMnKSkKLSAgICAgICAgcGxhdGZvcm0gPSBQbGF0Zm9ybS5mcm9t
U3RyaW5nKGpzb24uZ2V0KCdwbGF0Zm9ybScsICdnZW5lcmljJykpCi0gICAgICAgIHJldHVybiBU
eXBlRGVjbGFyYXRpb24oanNvblsnaWQnXSwgdHlwZV9yZWYsIGpzb24uZ2V0KCJkZXNjcmlwdGlv
biIsICIiKSwgcGxhdGZvcm0sIHR5cGVfbWVtYmVycykKKyAgICAgICAgcmV0dXJuIFR5cGVEZWNs
YXJhdGlvbihqc29uWydpZCddLCB0eXBlX3JlZiwganNvbi5nZXQoImRlc2NyaXB0aW9uIiwgIiIp
LCBqc29uLmdldCgnY29uZGl0aW9uJyksIHR5cGVfbWVtYmVycykKIAogICAgIGRlZiBwYXJzZV90
eXBlX21lbWJlcihzZWxmLCBqc29uKToKICAgICAgICAgY2hlY2tfZm9yX3JlcXVpcmVkX3Byb3Bl
cnRpZXMoWyduYW1lJ10sIGpzb24sICJ0eXBlIG1lbWJlciIpCkBAIC01MDksOCArNDczLDcgQEAg
Y2xhc3MgUHJvdG9jb2w6CiAgICAgICAgICAgICBpZiBsZW4oZHVwbGljYXRlX25hbWVzKSA+IDA6
CiAgICAgICAgICAgICAgICAgcmFpc2UgUGFyc2VFeGNlcHRpb24oIk1hbGZvcm1lZCBkb21haW4g
c3BlY2lmaWNhdGlvbjogcmV0dXJuIHBhcmFtZXRlciBsaXN0IGZvciBjb21tYW5kICVzIGhhcyBk
dXBsaWNhdGUgcGFyYW1ldGVyIG5hbWVzIiAlIGpzb25bJ25hbWUnXSkKIAotICAgICAgICBwbGF0
Zm9ybSA9IFBsYXRmb3JtLmZyb21TdHJpbmcoanNvbi5nZXQoJ3BsYXRmb3JtJywgJ2dlbmVyaWMn
KSkKLSAgICAgICAgcmV0dXJuIENvbW1hbmQoanNvblsnbmFtZSddLCB0YXJnZXRfdHlwZXMsIGNh
bGxfcGFyYW1ldGVycywgcmV0dXJuX3BhcmFtZXRlcnMsIGpzb24uZ2V0KCdkZXNjcmlwdGlvbics
ICIiKSwgcGxhdGZvcm0sIGpzb24uZ2V0KCdhc3luYycsIEZhbHNlKSkKKyAgICAgICAgcmV0dXJu
IENvbW1hbmQoanNvblsnbmFtZSddLCB0YXJnZXRfdHlwZXMsIGNhbGxfcGFyYW1ldGVycywgcmV0
dXJuX3BhcmFtZXRlcnMsIGpzb24uZ2V0KCdkZXNjcmlwdGlvbicsICIiKSwganNvbi5nZXQoJ2Nv
bmRpdGlvbicpLCBqc29uLmdldCgnYXN5bmMnLCBGYWxzZSkpCiAKICAgICBkZWYgcGFyc2VfZXZl
bnQoc2VsZiwganNvbiwgZGVidWdnYWJsZV90eXBlcyk6CiAgICAgICAgIGNoZWNrX2Zvcl9yZXF1
aXJlZF9wcm9wZXJ0aWVzKFsnbmFtZSddLCBqc29uLCAiZXZlbnQiKQpAQCAtNTQ0LDggKzUwNyw3
IEBAIGNsYXNzIFByb3RvY29sOgogICAgICAgICAgICAgaWYgbGVuKGR1cGxpY2F0ZV9uYW1lcykg
PiAwOgogICAgICAgICAgICAgICAgIHJhaXNlIFBhcnNlRXhjZXB0aW9uKCJNYWxmb3JtZWQgZG9t
YWluIHNwZWNpZmljYXRpb246IHBhcmFtZXRlciBsaXN0IGZvciBldmVudCAlcyBoYXMgZHVwbGlj
YXRlIHBhcmFtZXRlciBuYW1lcyIgJSBqc29uWyduYW1lJ10pCiAKLSAgICAgICAgcGxhdGZvcm0g
PSBQbGF0Zm9ybS5mcm9tU3RyaW5nKGpzb24uZ2V0KCdwbGF0Zm9ybScsICdnZW5lcmljJykpCi0g
ICAgICAgIHJldHVybiBFdmVudChqc29uWyduYW1lJ10sIHRhcmdldF90eXBlcywgZXZlbnRfcGFy
YW1ldGVycywganNvbi5nZXQoJ2Rlc2NyaXB0aW9uJywgIiIpLCBwbGF0Zm9ybSkKKyAgICAgICAg
cmV0dXJuIEV2ZW50KGpzb25bJ25hbWUnXSwgdGFyZ2V0X3R5cGVzLCBldmVudF9wYXJhbWV0ZXJz
LCBqc29uLmdldCgnZGVzY3JpcHRpb24nLCAiIiksIGpzb24uZ2V0KCdjb25kaXRpb24nKSkKIAog
ICAgIGRlZiBwYXJzZV9jYWxsX29yX3JldHVybl9wYXJhbWV0ZXIoc2VsZiwganNvbik6CiAgICAg
ICAgIGNoZWNrX2Zvcl9yZXF1aXJlZF9wcm9wZXJ0aWVzKFsnbmFtZSddLCBqc29uLCAicGFyYW1l
dGVyIikKQEAgLTY0MywxMCArNjA1LDEwIEBAIGNsYXNzIFByb3RvY29sOgogCiAKIGNsYXNzIERv
bWFpbjoKLSAgICBkZWYgX19pbml0X18oc2VsZiwgZG9tYWluX25hbWUsIGRlc2NyaXB0aW9uLCBm
ZWF0dXJlX2d1YXJkLCBkZWJ1Z2dhYmxlX3R5cGVzLCB0YXJnZXRfdHlwZXMsIGlzU3VwcGxlbWVu
dGFsLCB2ZXJzaW9uLCB0eXBlX2RlY2xhcmF0aW9ucywgY29tbWFuZHMsIGV2ZW50cyk6CisgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIGRvbWFpbl9uYW1lLCBkZXNjcmlwdGlvbiwgY29uZGl0aW9uLCBk
ZWJ1Z2dhYmxlX3R5cGVzLCB0YXJnZXRfdHlwZXMsIGlzU3VwcGxlbWVudGFsLCB2ZXJzaW9uLCB0
eXBlX2RlY2xhcmF0aW9ucywgY29tbWFuZHMsIGV2ZW50cyk6CiAgICAgICAgIHNlbGYuZG9tYWlu
X25hbWUgPSBkb21haW5fbmFtZQogICAgICAgICBzZWxmLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRp
b24KLSAgICAgICAgc2VsZi5mZWF0dXJlX2d1YXJkID0gZmVhdHVyZV9ndWFyZAorICAgICAgICBz
ZWxmLmNvbmRpdGlvbiA9IGNvbmRpdGlvbgogICAgICAgICBzZWxmLmRlYnVnZ2FibGVfdHlwZXMg
PSBkZWJ1Z2dhYmxlX3R5cGVzCiAgICAgICAgIHNlbGYudGFyZ2V0X3R5cGVzID0gdGFyZ2V0X3R5
cGVzCiAgICAgICAgIHNlbGYuaXNfc3VwcGxlbWVudGFsID0gaXNTdXBwbGVtZW50YWwKQEAgLTY4
NiwxMSArNjQ4LDExIEBAIGNsYXNzIERvbWFpbnM6CiAKIAogY2xhc3MgVHlwZURlY2xhcmF0aW9u
OgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0eXBlX25hbWUsIHR5cGVfcmVmLCBkZXNjcmlwdGlv
biwgcGxhdGZvcm0sIHR5cGVfbWVtYmVycyk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHR5cGVf
bmFtZSwgdHlwZV9yZWYsIGRlc2NyaXB0aW9uLCBjb25kaXRpb24sIHR5cGVfbWVtYmVycyk6CiAg
ICAgICAgIHNlbGYudHlwZV9uYW1lID0gdHlwZV9uYW1lCiAgICAgICAgIHNlbGYudHlwZV9yZWYg
PSB0eXBlX3JlZgogICAgICAgICBzZWxmLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24KLSAgICAg
ICAgc2VsZi5wbGF0Zm9ybSA9IHBsYXRmb3JtCisgICAgICAgIHNlbGYuY29uZGl0aW9uID0gY29u
ZGl0aW9uCiAgICAgICAgIHNlbGYudHlwZV9tZW1iZXJzID0gdHlwZV9tZW1iZXJzCiAKICAgICAg
ICAgaWYgc2VsZi50eXBlX25hbWUgIT0gdWNmaXJzdChzZWxmLnR5cGVfbmFtZSk6CkBAIC03MzQs
MTMgKzY5NiwxMyBAQCBjbGFzcyBQYXJhbWV0ZXI6CiAKIAogY2xhc3MgQ29tbWFuZDoKLSAgICBk
ZWYgX19pbml0X18oc2VsZiwgY29tbWFuZF9uYW1lLCB0YXJnZXRfdHlwZXMsIGNhbGxfcGFyYW1l
dGVycywgcmV0dXJuX3BhcmFtZXRlcnMsIGRlc2NyaXB0aW9uLCBwbGF0Zm9ybSwgaXNfYXN5bmMp
OgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb21tYW5kX25hbWUsIHRhcmdldF90eXBlcywgY2Fs
bF9wYXJhbWV0ZXJzLCByZXR1cm5fcGFyYW1ldGVycywgZGVzY3JpcHRpb24sIGNvbmRpdGlvbiwg
aXNfYXN5bmMpOgogICAgICAgICBzZWxmLmNvbW1hbmRfbmFtZSA9IGNvbW1hbmRfbmFtZQogICAg
ICAgICBzZWxmLnRhcmdldF90eXBlcyA9IHRhcmdldF90eXBlcwogICAgICAgICBzZWxmLmNhbGxf
cGFyYW1ldGVycyA9IGNhbGxfcGFyYW1ldGVycwogICAgICAgICBzZWxmLnJldHVybl9wYXJhbWV0
ZXJzID0gcmV0dXJuX3BhcmFtZXRlcnMKICAgICAgICAgc2VsZi5kZXNjcmlwdGlvbiA9IGRlc2Ny
aXB0aW9uCi0gICAgICAgIHNlbGYucGxhdGZvcm0gPSBwbGF0Zm9ybQorICAgICAgICBzZWxmLmNv
bmRpdGlvbiA9IGNvbmRpdGlvbgogICAgICAgICBzZWxmLmlzX2FzeW5jID0gaXNfYXN5bmMKIAog
ICAgIGRlZiByZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyhzZWxmLCBwcm90b2NvbCwgZG9tYWluKToK
QEAgLTc1NCwxMiArNzE2LDEyIEBAIGNsYXNzIENvbW1hbmQ6CiAKIAogY2xhc3MgRXZlbnQ6Ci0g
ICAgZGVmIF9faW5pdF9fKHNlbGYsIGV2ZW50X25hbWUsIHRhcmdldF90eXBlcywgZXZlbnRfcGFy
YW1ldGVycywgZGVzY3JpcHRpb24sIHBsYXRmb3JtKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwg
ZXZlbnRfbmFtZSwgdGFyZ2V0X3R5cGVzLCBldmVudF9wYXJhbWV0ZXJzLCBkZXNjcmlwdGlvbiwg
Y29uZGl0aW9uKToKICAgICAgICAgc2VsZi5ldmVudF9uYW1lID0gZXZlbnRfbmFtZQogICAgICAg
ICBzZWxmLnRhcmdldF90eXBlcyA9IHRhcmdldF90eXBlcwogICAgICAgICBzZWxmLmV2ZW50X3Bh
cmFtZXRlcnMgPSBldmVudF9wYXJhbWV0ZXJzCiAgICAgICAgIHNlbGYuZGVzY3JpcHRpb24gPSBk
ZXNjcmlwdGlvbgotICAgICAgICBzZWxmLnBsYXRmb3JtID0gcGxhdGZvcm0KKyAgICAgICAgc2Vs
Zi5jb25kaXRpb24gPSBjb25kaXRpb24KIAogICAgIGRlZiByZXNvbHZlX3R5cGVfcmVmZXJlbmNl
cyhzZWxmLCBwcm90b2NvbCwgZG9tYWluKToKICAgICAgICAgbG9nLmRlYnVnKCI+PiBSZXNvbHZp
bmcgdHlwZSByZWZlcmVuY2VzIGZvciBwYXJhbWV0ZXJzIGluIGV2ZW50OiAlcyIgJSBzZWxmLmV2
ZW50X25hbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5IGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQppbmRleCAyYjFkODc4MmNiMi4uYmQxOWMwMDI3NTEgMTAwNzU1Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQpAQCAt
MTE3LDcgKzExNyw2IEBAIGRlZiBnZW5lcmF0ZV9mcm9tX3NwZWNpZmljYXRpb24ocHJpbWFyeV9z
cGVjaWZpY2F0aW9uX2ZpbGVwYXRoPU5vbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG91dHB1dF9kaXJwYXRoPU5vbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZvcmNlX291dHB1dD1GYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJh
bWV3b3JrX25hbWU9IiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYXRmb3Jt
X25hbWU9IiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlX2Zyb250
ZW5kPVRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlX2JhY2tl
bmQ9VHJ1ZSk6CiAKQEAgLTEzMCw3ICsxMjksNiBAQCBkZWYgZ2VuZXJhdGVfZnJvbV9zcGVjaWZp
Y2F0aW9uKHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aD1Ob25lLAogICAgICAgICBleGNl
cHQgVmFsdWVFcnJvciBhcyBlOgogICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJFcnJvciBw
YXJzaW5nIHZhbGlkIEpTT04gaW4gZmlsZTogIiArIGZpbGVwYXRoICsgIlxuUGFyc2UgZXJyb3I6
ICIgKyBzdHIoZSkpCiAKLSAgICBwbGF0Zm9ybSA9IFBsYXRmb3JtLmZyb21TdHJpbmcocGxhdGZv
cm1fbmFtZSkKICAgICBwcm90b2NvbCA9IG1vZGVscy5Qcm90b2NvbChmcmFtZXdvcmtfbmFtZSkK
ICAgICBmb3Igc3BlY2lmaWNhdGlvbiBpbiBzdXBwbGVtZW50YWxfc3BlY2lmaWNhdGlvbl9maWxl
cGF0aHM6CiAgICAgICAgIGxvYWRfc3BlY2lmaWNhdGlvbihwcm90b2NvbCwgc3BlY2lmaWNhdGlv
biwgaXNTdXBwbGVtZW50YWw9VHJ1ZSkKQEAgLTEzOCw3ICsxMzYsNyBAQCBkZWYgZ2VuZXJhdGVf
ZnJvbV9zcGVjaWZpY2F0aW9uKHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aD1Ob25lLAog
CiAgICAgcHJvdG9jb2wucmVzb2x2ZV90eXBlcygpCiAKLSAgICBnZW5lcmF0b3JfYXJndW1lbnRz
ID0gW3Byb3RvY29sLCBwbGF0Zm9ybSwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoXQor
ICAgIGdlbmVyYXRvcl9hcmd1bWVudHMgPSBbcHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlv
bl9maWxlcGF0aF0KICAgICBnZW5lcmF0b3JzID0gW10KIAogICAgIGlmIHByb3RvY29sLmZyYW1l
d29yayBpcyBGcmFtZXdvcmtzLlRlc3Q6CkBAIC0yMjksNyArMjI3LDYgQEAgZGVmIGdlbmVyYXRl
X2Zyb21fc3BlY2lmaWNhdGlvbihwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGg9Tm9uZSwK
IAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICBhbGxvd2VkX2ZyYW1ld29ya19uYW1l
cyA9IFsnSmF2YVNjcmlwdENvcmUnLCAnV2ViSW5zcGVjdG9yJywgJ1dlYkluc3BlY3RvclVJJywg
J1dlYktpdCcsICdUZXN0J10KLSAgICBhbGxvd2VkX3BsYXRmb3JtX25hbWVzID0gWydpT1MnLCAn
bWFjT1MnLCAnYWxsJywgJ2dlbmVyaWMnXQogICAgIGNsaV9wYXJzZXIgPSBvcHRwYXJzZS5PcHRp
b25QYXJzZXIodXNhZ2U9InVzYWdlOiAlcHJvZyBbb3B0aW9uc10gUHJpbWFyeVByb3RvY29sLmpz
b24gW1N1cHBsZW1lbnRhbFByb3RvY29sLmpzb24gLi4uXSIpCiAgICAgY2xpX3BhcnNlci5hZGRf
b3B0aW9uKCItbyIsICItLW91dHB1dERpciIsIGhlbHA9IkRpcmVjdG9yeSB3aGVyZSBnZW5lcmF0
ZWQgZmlsZXMgc2hvdWxkIGJlIHdyaXR0ZW4uIikKICAgICBjbGlfcGFyc2VyLmFkZF9vcHRpb24o
Ii0tZnJhbWV3b3JrIiwgdHlwZT0iY2hvaWNlIiwgY2hvaWNlcz1hbGxvd2VkX2ZyYW1ld29ya19u
YW1lcywgaGVscD0iVGhlIGZyYW1ld29yayB0aGF0IHRoZSBwcmltYXJ5IHNwZWNpZmljYXRpb24g
YmVsb25ncyB0by4iKQpAQCAtMjM4LDcgKzIzNSw2IEBAIGlmIF9fbmFtZV9fID09ICdfX21haW5f
Xyc6CiAgICAgY2xpX3BhcnNlci5hZGRfb3B0aW9uKCItdCIsICItLXRlc3QiLCBhY3Rpb249InN0
b3JlX3RydWUiLCBoZWxwPSJFbmFibGUgdGVzdCBtb2RlLiBVc2UgdW5pcXVlIG91dHB1dCBmaWxl
bmFtZXMgY3JlYXRlZCBieSBwcmVwZW5kaW5nIHRoZSBpbnB1dCBmaWxlbmFtZS4iKQogICAgIGNs
aV9wYXJzZXIuYWRkX29wdGlvbigiLS1mcm9udGVuZCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGhl
bHA9IkdlbmVyYXRlIGNvZGUgZm9yIHRoZSBmcm9udGVuZC1zaWRlIG9mIHRoZSBwcm90b2NvbCBv
bmx5LiIpCiAgICAgY2xpX3BhcnNlci5hZGRfb3B0aW9uKCItLWJhY2tlbmQiLCBhY3Rpb249InN0
b3JlX3RydWUiLCBoZWxwPSJHZW5lcmF0ZSBjb2RlIGZvciB0aGUgYmFja2VuZC1zaWRlIG9mIHRo
ZSBwcm90b2NvbCBvbmx5LiIpCi0gICAgY2xpX3BhcnNlci5hZGRfb3B0aW9uKCItLXBsYXRmb3Jt
IiwgZGVmYXVsdD0iZ2VuZXJpYyIsIGhlbHA9IlRoZSBwbGF0Zm9ybSBvZiB0aGUgYmFja2VuZCBi
ZWluZyBnZW5lcmF0ZWQuIEZvciBleGFtcGxlLCB3ZSBjb21waWxlIFdlYktpdDIgZm9yIGVpdGhl
ciBtYWNPUyBvciBpT1MuIFRoaXMgdmFsdWUgaXMgY2FzZS1pbnNlbnNpdGl2ZS4gQWxsb3dlZCB2
YWx1ZXM6ICVzIiAlICIsICIuam9pbihhbGxvd2VkX3BsYXRmb3JtX25hbWVzKSkKICAgICBvcHRp
b25zID0gTm9uZQogCiAgICAgYXJnX29wdGlvbnMsIGFyZ192YWx1ZXMgPSBjbGlfcGFyc2VyLnBh
cnNlX2FyZ3MoKQpAQCAtMjY0LDcgKzI2MCw2IEBAIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6
CiAgICAgICAgICdvdXRwdXRfZGlycGF0aCc6IGFyZ19vcHRpb25zLm91dHB1dERpciwKICAgICAg
ICAgJ2NvbmNhdGVuYXRlX291dHB1dCc6IGFyZ19vcHRpb25zLnRlc3QsCiAgICAgICAgICdmcmFt
ZXdvcmtfbmFtZSc6IGFyZ19vcHRpb25zLmZyYW1ld29yaywKLSAgICAgICAgJ3BsYXRmb3JtX25h
bWUnOiBhcmdfb3B0aW9ucy5wbGF0Zm9ybSwKICAgICAgICAgJ2ZvcmNlX291dHB1dCc6IGFyZ19v
cHRpb25zLmZvcmNlLAogICAgICAgICAnZ2VuZXJhdGVfYmFja2VuZCc6IGdlbmVyYXRlX2JhY2tl
bmQsCiAgICAgICAgICdnZW5lcmF0ZV9mcm9udGVuZCc6IGdlbmVyYXRlX2Zyb250ZW5kLApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2Fs
bC9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2FsbC9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0
Zm9ybS5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MTdmMTM1ZWU1YS4uMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2FsbC9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCisrKyAvZGV2L251bGwK
QEAgLTEsMjggKzAsMCBAQAotewotICAgICJkb21haW4iOiAiTmV0d29yayIsCi0gICAgInR5cGVz
IjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiTmV0d29ya0Vycm9yIiwKLSAgICAg
ICAgICAgICJ0eXBlIjogIm9iamVjdCIsCi0gICAgICAgICAgICAicGxhdGZvcm0iOiAibWFjb3Mi
LAotICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJtZXNzYWdlIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIG1lc3Nh
Z2UuIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29kZSIsICJ0eXBlIjogImludGVn
ZXIiLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgY29kZS4iIH0KLSAgICAgICAgICAgIF0KLSAgICAg
ICAgfQotICAgIF0sCi0gICAgImNvbW1hbmRzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAi
bmFtZSI6ICJsb2FkUmVzb3VyY2UiLAotICAgICAgICAgICAgInBsYXRmb3JtIjogIm1hY29zIiwK
LSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBhIHJlc291cmNlIGluIHRoZSBjb250
ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGluc3BlY3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3JpZ2lu
IGNoZWNrcy4iCi0gICAgICAgIH0KLSAgICBdLAotICAgICJldmVudHMiOiBbCi0gICAgICAgIHsK
LSAgICAgICAgICAgICJuYW1lIjogInJlc291cmNlTG9hZGVkIiwKLSAgICAgICAgICAgICJwbGF0
Zm9ybSI6ICJtYWNvcyIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQSByZXNvdXJjZSB3
YXMgbG9hZGVkLiIKLSAgICAgICAgfQotICAgIF0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9hbGwvZXhwZWN0ZWQvZGVmaW5pdGlv
bnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvYWxsL2V4cGVjdGVkL2RlZmluaXRpb25zLXdpdGgtbWFj
LXBsYXRmb3JtLmpzb24tcmVzdWx0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNmU2
OGY0YTlhZS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2FsbC9leHBlY3RlZC9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9y
bS5qc29uLXJlc3VsdAorKysgL2Rldi9udWxsCkBAIC0xLDEyMTcgKzAsMCBAQAotIyMjIEJlZ2lu
IEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotLy8gTmV0d29yawotSW5zcGVjdG9y
QmFja2VuZC5yZWdpc3RlckRvbWFpbigiTmV0d29yayIsIG51bGwpOwotSW5zcGVjdG9yQmFja2Vu
ZC5yZWdpc3RlckNvbW1hbmQoIk5ldHdvcmsubG9hZFJlc291cmNlIiwgbnVsbCwgW10sIFtdKTsK
LUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudCgiTmV0d29yay5yZXNvdXJjZUxvYWRlZCIs
IG51bGwsIFtdKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJOZXR3b3JrRGlzcGF0Y2hlciA9
IEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEaXNwYXRjaGVyLmJpbmQoSW5zcGVjdG9yQmFja2Vu
ZCwgIk5ldHdvcmsiKTsKLUluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIk5ldHdvcmsi
LCBudWxsKTsKLSMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0KLSMj
IyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEg
b25jZQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0KLSNp
bmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNz
IEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2b2lkIHNldEJhY2tl
bmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1f
YmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9Ci0gICAgQmFja2VuZERp
c3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlz
cGF0Y2hlci5nZXQoKTsgfQotcHJpdmF0ZToKLSAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+
IG1fYmFja2VuZERpc3BhdGNoZXI7Ci19OwotCi0KLWNsYXNzIEFsdGVybmF0ZU5ldHdvcmtCYWNr
ZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJs
aWM6Ci0gICAgdmlydHVhbCB+QWx0ZXJuYXRlTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyKCkgeyB9
Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZShsb25nIGNhbGxJZCkgPSAwOwotfTsKLQot
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKLSMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmRE
aXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1w
bGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10eXBl
ZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQotY2xhc3MgQWx0ZXJuYXRlTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyOwot
I2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi1jbGFz
cyBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFs
IHZvaWQgbG9hZFJlc291cmNlKEVycm9yU3RyaW5nJikgPSAwOwotcHJvdGVjdGVkOgotICAgIHZp
cnR1YWwgfk5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKLX07Ci0KLWNsYXNzIE5l
dHdvcmtCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5k
RGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxOZXR3b3JrQmFja2VuZERpc3Bh
dGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIqKTsKLSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJp
bmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5hbDsKLXByaXZhdGU6
Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+JiYgcGFyYW1ldGVycyk7Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCi1wdWJsaWM6Ci0gICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0
ZU5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVy
bmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9Ci1wcml2YXRlOgotICAgIEFs
dGVybmF0ZU5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlciogbV9hbHRlcm5hdGVEaXNwYXRjaGVyIHsg
bnVsbHB0ciB9OwotI2VuZGlmCi1wcml2YXRlOgotICAgIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hl
cihCYWNrZW5kRGlzcGF0Y2hlciYsIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsK
LSAgICBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50IHsgbnVsbHB0ciB9
OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNr
ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVy
cy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRo
LW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNo
ZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRl
ci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVz
dHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jaWYgRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVycy5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1O
ZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+TmV0d29ya0JhY2tlbmREaXNwYXRjaGVy
SGFuZGxlcigpIHsgfQotCi1SZWY8TmV0d29ya0JhY2tlbmREaXNwYXRjaGVyPiBOZXR3b3JrQmFj
a2VuZERpc3BhdGNoZXI6OmNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNo
ZXIsIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQotewotICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hl
ciwgYWdlbnQpKTsKLX0KLQotTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyOjpOZXR3b3JrQmFja2Vu
ZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBOZXR3b3Jr
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKLSAgICA6IFN1cHBsZW1lbnRhbEJhY2tl
bmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQotICAgICwgbV9hZ2VudChhZ2VudCkKLXsK
LSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oIk5l
dHdvcmsiX3MsIHRoaXMpOwotfQotCi12b2lkIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlz
cGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2Jq
ZWN0PiYmIG1lc3NhZ2UpCi17Ci0gICAgUmVmPE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcj4gcHJv
dGVjdCgqdGhpcyk7Ci0KLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOwotICAg
IG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsKLQotICAgIGlmICht
ZXRob2QgPT0gImxvYWRSZXNvdXJjZSIpCi0gICAgICAgIGxvYWRSZXNvdXJjZShyZXF1ZXN0SWQs
IFdURk1vdmUocGFyYW1ldGVycykpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91
bmQsICInTmV0d29yay4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOwotfQotCi12b2lk
IE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkLCBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQotewotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQotICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAg
bV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2UocmVxdWVzdElkKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVm
PEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtX2Fn
ZW50LT5sb2FkUmVzb3VyY2UoZXJyb3IpOwotCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAg
ICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92
ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RG
TW92ZShlcnJvcikpOwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBG
aWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZy
b250ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRl
ZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9j
b2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEZyb250
ZW5kUm91dGVyOwotCi1jbGFzcyBOZXR3b3JrRnJvbnRlbmREaXNwYXRjaGVyIHsKLSAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBOZXR3b3JrRnJvbnRlbmREaXNwYXRj
aGVyKEZyb250ZW5kUm91dGVyJiBmcm9udGVuZFJvdXRlcikgOiBtX2Zyb250ZW5kUm91dGVyKGZy
b250ZW5kUm91dGVyKSB7IH0KLSAgICB2b2lkIHJlc291cmNlTG9hZGVkKCk7Ci1wcml2YXRlOgot
ICAgIEZyb250ZW5kUm91dGVyJiBtX2Zyb250ZW5kUm91dGVyOwotfTsKLQotfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLQot
IyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXZvaWQgTmV0d29y
a0Zyb250ZW5kRGlzcGF0Y2hlcjo6cmVzb3VyY2VMb2FkZWQoKQotewotICAgIFJlZjxKU09OOjpP
YmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVz
c2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJOZXR3b3JrLnJlc291cmNlTG9hZGVkIl9zKTsK
LQotICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJp
bmcoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRl
c3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
T2JqZWN0cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMt
d2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotCi1uYW1l
c3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLQotCi0vLyBG
b3J3YXJkIGRlY2xhcmF0aW9ucy4KLW5hbWVzcGFjZSBOZXR3b3JrIHsKLWNsYXNzIE5ldHdvcmtF
cnJvcjsKLX0gLy8gTmV0d29yawotLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgotCi0K
LQotCi1uYW1lc3BhY2UgTmV0d29yayB7Ci1jbGFzcyBOZXR3b3JrRXJyb3IgOiBwdWJsaWMgSlNP
Tjo6T2JqZWN0QmFzZSB7Ci1wdWJsaWM6Ci0gICAgZW51bSB7Ci0gICAgICAgIE5vRmllbGRzU2V0
ID0gMCwKLSAgICAgICAgTWVzc2FnZVNldCA9IDEgPDwgMCwKLSAgICAgICAgQ29kZVNldCA9IDEg
PDwgMSwKLSAgICAgICAgQWxsRmllbGRzU2V0ID0gKE1lc3NhZ2VTZXQgfCBDb2RlU2V0KQotICAg
IH07Ci0KLSAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+Ci0gICAgY2xhc3MgQnVpbGRlciB7Ci0gICAg
cHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7Ci0KLSAgICAg
ICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8
U1RBVEUgfCBTVEVQPio+KHRoaXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcihSZWY8
LypOZXR3b3JrRXJyb3IqL0pTT046Ok9iamVjdD4mJiBvYmplY3QpCi0gICAgICAgICAgICA6IG1f
cmVzdWx0KFdURk1vdmUob2JqZWN0KSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9z
dGF0ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZnJpZW5kIGNsYXNzIE5ldHdvcmtFcnJvcjsKLSAg
ICBwdWJsaWM6Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1lc3NhZ2VTZXQ+JiBzZXRNZXNz
YWdlKGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKCEoU1RBVEUgJiBNZXNzYWdlU2V0KSwgcHJvcGVydHlfbWVzc2FnZV9hbHJlYWR5X3Nl
dCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJtZXNzYWdlIl9zLCB2YWx1ZSk7
Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1lc3NhZ2VTZXQ+KCk7Ci0gICAgICAgIH0K
LQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29kZVNldD4mIHNldENvZGUoaW50IHZhbHVlKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29kZVNldCks
IHByb3BlcnR5X2NvZGVfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldElu
dGVnZXIoImNvZGUiX3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29k
ZVNldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIFJlZjxOZXR3b3JrRXJyb3I+IHJlbGVhc2Uo
KQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVs
ZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
c2l6ZW9mKE5ldHdvcmtFcnJvcikgPT0gc2l6ZW9mKEpTT046Ok9iamVjdCksIGNhbm5vdF9jYXN0
KTsKLQotICAgICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4ganNvblJlc3VsdCA9IG1fcmVzdWx0
LnJlbGVhc2VOb25OdWxsKCk7Ci0gICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFdURk1vdmUoKnJl
aW50ZXJwcmV0X2Nhc3Q8UmVmPE5ldHdvcmtFcnJvcj4qPigmanNvblJlc3VsdCkpOwotICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICAvKgotICAgICAq
IFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKLSAgICAgKiBSZWY8TmV0d29ya0Vycm9yPiByZXN1bHQg
PSBOZXR3b3JrRXJyb3I6OmNyZWF0ZSgpCi0gICAgICogICAgIC5zZXRNZXNzYWdlKC4uLikKLSAg
ICAgKiAgICAgLnNldENvZGUoLi4uKQotICAgICAqICAgICAucmVsZWFzZSgpOwotICAgICAqLwot
ICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOwotICAg
IH0KLX07Ci0KLX0gLy8gTmV0d29yawotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQot
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVj
dHMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0KLSNpbmNsdWRl
IDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVz
cGFjZSBJbnNwZWN0b3IgewotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotfSAvLyBuYW1l
c3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
ZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5o
PgotCi1AcHJvdG9jb2wgVGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkhhbmRsZXI7Ci0KLW5hbWVz
cGFjZSBJbnNwZWN0b3IgewotCi0KLWNsYXNzIE9iakNJbnNwZWN0b3JOZXR3b3JrQmFja2VuZERp
c3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJuYXRlTmV0d29ya0JhY2tlbmREaXNwYXRjaGVy
IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBPYmpDSW5zcGVj
dG9yTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5I
YW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9Ci0gICAgdm9pZCBsb2Fk
UmVzb3VyY2UobG9uZyByZXF1ZXN0SWQpIGZpbmFsOwotcHJpdmF0ZToKLSAgICBSZXRhaW5QdHI8
aWQ8VGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwotfTsKLQot
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFj
a2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmRE
aXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRp
b25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xC
YWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgi
Ci0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW5jbHVkZSA8d3Rm
L0pTT05WYWx1ZXMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXZvaWQgT2JqQ0luc3Bl
Y3Rvck5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElk
KQotewotICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihs
b2FkUmVzb3VyY2VXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsKLSAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJh
Y2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrLmxvYWRSZXNvdXJjZScg
d2FzIG5vdCBmb3VuZCJfcyk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5k
aW5nRXJyb3JzKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZCBlcnJvckNhbGxi
YWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJF
cnJvciwgZXJyb3IpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vy
cm9ycygpOwotICAgIH07Ci0KLSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpLCBmYWxzZSk7Ci0gICAgfTsKLQotICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJj
ZVdpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3ND
YWxsYmFja107Ci19Ci0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJv
dG9jb2wuaD4KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50
ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAotQHByb3BlcnR5IChu
b25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNldE5ldHdvcmtIYW5kbGVyOikgaWQ8VGVzdFByb3Rv
Y29sTmV0d29ya0RvbWFpbkhhbmRsZXI+IG5ldHdvcmtIYW5kbGVyOwotQHByb3BlcnR5IChub25h
dG9taWMsIHJlYWRvbmx5KSBUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluRXZlbnREaXNwYXRjaGVy
ICpuZXR3b3JrRXZlbnREaXNwYXRjaGVyOwotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbi5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25m
aWd1cmF0aW9uLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlv
bnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCi0KLSNp
bXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNr
ZW5kRGlzcGF0Y2hlcnMuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3Bh
dGNoYWJsZUFnZW50Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3Bl
Y3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVy
bmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0K
LUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCi17Ci0gICAgQXVnbWVu
dGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKLSAgICBpZDxUZXN0UHJvdG9j
b2xOZXR3b3JrRG9tYWluSGFuZGxlcj4gX25ldHdvcmtIYW5kbGVyOwotICAgIFRlc3RQcm90b2Nv
bE5ldHdvcmtEb21haW5FdmVudERpc3BhdGNoZXIgKl9uZXR3b3JrRXZlbnREaXNwYXRjaGVyOwot
fQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3Bl
Y3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwot
ICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxl
cik7Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQot
Ci0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBbX25ldHdvcmtIYW5kbGVyIHJlbGVhc2VdOwotICAg
IFtfbmV0d29ya0V2ZW50RGlzcGF0Y2hlciByZWxlYXNlXTsKLSAgICBbc3VwZXIgZGVhbGxvY107
Ci19Ci0KLS0gKHZvaWQpc2V0TmV0d29ya0hhbmRsZXI6KGlkPFRlc3RQcm90b2NvbE5ldHdvcmtE
b21haW5IYW5kbGVyPiloYW5kbGVyCi17Ci0gICAgaWYgKGhhbmRsZXIgPT0gX25ldHdvcmtIYW5k
bGVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBbX25ldHdvcmtIYW5kbGVyIHJlbGVhc2VdOwot
ICAgIF9uZXR3b3JrSGFuZGxlciA9IFtoYW5kbGVyIHJldGFpbl07Ci0KLSAgICBhdXRvIGFsdGVy
bmF0ZURpc3BhdGNoZXIgPSBtYWtlVW5pcXVlPE9iakNJbnNwZWN0b3JOZXR3b3JrQmFja2VuZERp
c3BhdGNoZXI+KGhhbmRsZXIpOwotICAgIGF1dG8gYWx0ZXJuYXRlQWdlbnQgPSBtYWtlVW5pcXVl
PEFsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50PE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlciwgQWx0
ZXJuYXRlTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyPj4oIk5ldHdvcmsiX3MsICpfY29udHJvbGxl
ciwgV1RGTW92ZShhbHRlcm5hdGVEaXNwYXRjaGVyKSk7Ci0gICAgX2NvbnRyb2xsZXItPmFwcGVu
ZEV4dHJhQWdlbnQoV1RGTW92ZShhbHRlcm5hdGVBZ2VudCkpOwotfQotCi0tIChpZDxUZXN0UHJv
dG9jb2xOZXR3b3JrRG9tYWluSGFuZGxlcj4pbmV0d29ya0hhbmRsZXIKLXsKLSAgICByZXR1cm4g
X25ldHdvcmtIYW5kbGVyOwotfQotCi0tIChUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluRXZlbnRE
aXNwYXRjaGVyICopbmV0d29ya0V2ZW50RGlzcGF0Y2hlcgotewotICAgIGlmICghX25ldHdvcmtF
dmVudERpc3BhdGNoZXIpCi0gICAgICAgIF9uZXR3b3JrRXZlbnREaXNwYXRjaGVyID0gW1tUZXN0
UHJvdG9jb2xOZXR3b3JrRG9tYWluRXZlbnREaXNwYXRjaGVyIGFsbG9jXSBpbml0V2l0aENvbnRy
b2xsZXI6X2NvbnRyb2xsZXJdOwotICAgIHJldHVybiBfbmV0d29ya0V2ZW50RGlzcGF0Y2hlcjsK
LX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5t
bQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRm
b3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2lt
cG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1l
c3BhY2UgSW5zcGVjdG9yOwotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sTmV0d29ya0Rv
bWFpbkV2ZW50RGlzcGF0Y2hlcgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxl
ciogX2NvbnRyb2xsZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6
KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYg
PSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAg
IEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAg
cmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpcmVzb3VyY2VMb2FkZWQKLXsKLSAgICBjb25zdCBG
cm9udGVuZFJvdXRlciYgcm91dGVyID0gX2NvbnRyb2xsZXItPmZyb250ZW5kUm91dGVyKCk7Ci0K
LSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRl
KCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiTmV0d29yay5yZXNv
dXJjZUxvYWRlZCJfcyk7Ci0gICAgcm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09O
U3RyaW5nKCkpOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVu
dERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3Jt
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9y
dCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQ
cm90b2NvbEpTT05PYmplY3QuaD4KLQotCi1AY2xhc3MgVGVzdFByb3RvY29sTmV0d29ya0Vycm9y
OwotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xQbGF0Zm9ybSkgewot
ICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtR2Vu
ZXJpYywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUywKLSAgICBUZXN0UHJvdG9jb2xQbGF0
Zm9ybU1hY09TLAotfTsKLQotCi0KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1
bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbE5ldHdvcmtFcnJvciA6IFJXSVByb3RvY29s
SlNPTk9iamVjdAotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5
PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQ7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90
b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKLS0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBjb2RlOihpbnQpY29k
ZTsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAq
bWVzc2FnZTsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGlu
dCBjb2RlOwotQGVuZAotCi1AcHJvdG9jb2wgVGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkhhbmRs
ZXIgPE5TT2JqZWN0PgotQG9wdGlvbmFsCi0tICh2b2lkKWxvYWRSZXNvdXJjZVdpdGhFcnJvckNh
bGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2Fs
bGJhY2s6KHZvaWQoXikodm9pZCkpc3VjY2Vzc0NhbGxiYWNrOwotQGVuZAotCi1fX2F0dHJpYnV0
ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sTmV0
d29ya0RvbWFpbkV2ZW50RGlzcGF0Y2hlciA6IE5TT2JqZWN0Ci0tICh2b2lkKXJlc291cmNlTG9h
ZGVkOwotQGVuZAotCi0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29t
cGF0aWJpbGl0eU9iamVjdHMuaD4KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3Rv
Y29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgotI2ltcG9y
dCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1w
b3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbE5ldHdvcmtE
b21haW5FdmVudERpc3BhdGNoZXIgKFByaXZhdGUpCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhD
b250cm9sbGVyOihJbnNwZWN0b3I6OkF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29u
dHJvbGxlcjsKLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgK
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0u
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0
ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5
Q29udmVyc2lvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIE9iakNFbnVtVHlwZT4KLU9wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3Ry
aW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOwotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJp
bmcoVGVzdFByb3RvY29sUGxhdGZvcm0gdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0g
ICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDoKLSAgICAgICAgcmV0dXJuICJhbGwiX3M7
Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM6Ci0gICAgICAgIHJldHVybiAi
Z2VuZXJpYyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOgotICAgICAgICBy
ZXR1cm4gImlvcyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M6Ci0gICAg
ICAgIHJldHVybiAibWFjb3MiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0
aW9uYWw8VGVzdFByb3RvY29sUGxhdGZvcm0+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJp
bmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiYWxsIikKLSAgICAgICAgcmV0dXJuIFRl
c3RQcm90b2NvbFBsYXRmb3JtQWxsOwotICAgIGlmICh2YWx1ZSA9PSAiZ2VuZXJpYyIpCi0gICAg
ICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM7Ci0gICAgaWYgKHZhbHVlID09
ICJpb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1JT1M7Ci0gICAgaWYg
KHZhbHVlID09ICJtYWNvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1h
Y09TOwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAot
Ci0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0u
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0
ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29s
LmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCi0jaW1wb3J0IDxXZWJJbnNw
ZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotCi11c2luZyBuYW1lc3BhY2Ug
SW5zcGVjdG9yOwotCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoTmV0
d29ya0RvbWFpbikKLQotKyAodm9pZClfcGFyc2VOZXR3b3JrRXJyb3I6KFRlc3RQcm90b2NvbE5l
dHdvcmtFcnJvciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLQotQGVuZAot
Ci1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChOZXR3b3JrRG9t
YWluKQotCi0rICh2b2lkKV9wYXJzZU5ldHdvcmtFcnJvcjooVGVzdFByb3RvY29sTmV0d29ya0Vy
cm9yICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7Ci0gICAg
Km91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xOZXR3b3JrRXJyb3IgYWxsb2NdIGluaXRXaXRoUGF5
bG9hZDpwYXlsb2FkXTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5t
bQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFj
LXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xK
U09OT2JqZWN0UHJpdmF0ZS5oPgotI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQg
PHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotQGlt
cGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbE5ldHdvcmtFcnJvcgotCi0tIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilw
YXlsb2FkCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJldHVy
biBuaWw7Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxv
YWRbQCJtZXNzYWdlIl0sIEAibWVzc2FnZSIpOwotICAgIHNlbGYubWVzc2FnZSA9IHBheWxvYWRb
QCJtZXNzYWdlIl07Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZ
KHBheWxvYWRbQCJjb2RlIl0sIEAiY29kZSIpOwotICAgIHNlbGYuY29kZSA9IFtwYXlsb2FkW0Ai
Y29kZSJdIGludGVnZXJWYWx1ZV07Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLS0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilvYmpl
Y3QKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoSlNPTk9iamVjdDpbb2JqZWN0
IHRvSlNPTk9iamVjdF0uZ2V0KCldKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIHJldHVy
biBzZWxmOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAq
KW1lc3NhZ2UgY29kZTooaW50KWNvZGUKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRd
KSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlS
RURfUFJPUEVSVFkobWVzc2FnZSwgQCJtZXNzYWdlIik7Ci0KLSAgICBzZWxmLm1lc3NhZ2UgPSBt
ZXNzYWdlOwotICAgIHNlbGYuY29kZSA9IGNvZGU7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQot
LSAodm9pZClzZXRNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UKLXsKLSAgICBbc3VwZXIgc2V0
U3RyaW5nOm1lc3NhZ2UgZm9yS2V5OkAibWVzc2FnZSJdOwotfQotCi0tIChOU1N0cmluZyAqKW1l
c3NhZ2UKLXsKLSAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAIm1lc3NhZ2UiXTsKLX0K
LQotLSAodm9pZClzZXRDb2RlOihpbnQpY29kZQotewotICAgIFtzdXBlciBzZXRJbnRlZ2VyOmNv
ZGUgZm9yS2V5OkAiY29kZSJdOwotfQotCi0tIChpbnQpY29kZQotewotICAgIHJldHVybiBbc3Vw
ZXIgaW50ZWdlckZvcktleTpAImNvZGUiXTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9jb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWlu
LWRlYnVnZ2FibGVUeXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxl
VHlwZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kMjdhYjY1
YjkyYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9jb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2Fi
bGVUeXBlLmpzb24KQEAgLTAsMCArMSw5IEBACitbCit7CisgICAgImRvbWFpbiI6ICJEb21haW4i
LAorICAgICJkZWJ1Z2dhYmxlVHlwZXMiOiBbInBhZ2UiXSwKKyAgICAidGFyZ2V0VHlwZXMiOiBb
InBhZ2UiLCAid29ya2VyIl0sCisgICAgImNvbW1hbmRzIjogW3sibmFtZSI6ICJDb21tYW5kIn1d
LAorICAgICJldmVudHMiOiBbeyJuYW1lIjogIkV2ZW50In1dCit9CitdCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvY29tbWFuZHMtd2l0
aC1hc3luYy1hdHRyaWJ1dGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xMTI2MmU4ODlmYQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9jb21t
YW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCkBAIC0wLDAgKzEsMTA5IEBACit7CisgICAg
ImRvbWFpbiI6ICJEYXRhYmFzZSIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAg
ICAgICAiaWQiOiAiRGF0YWJhc2VJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJpbnRlZ2VyIiwK
KyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgaWRlbnRpZmllciBvZiBEYXRhYmFz
ZSBvYmplY3QuIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiUHJp
bWFyeUNvbG9ycyIsCisgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAg
ImVudW0iOiBbInJlZCIsICJncmVlbiIsICJibHVlIl0KKyAgICAgICAgfSwKKyAgICAgICAgewor
ICAgICAgICAgICAgImlkIjogIkNvbG9yTGlzdCIsCisgICAgICAgICAgICAidHlwZSI6ICJhcnJh
eSIsCisgICAgICAgICAgICAiaXRlbXMiOiB7ICIkcmVmIjogIlByaW1hcnlDb2xvcnMiIH0KKyAg
ICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkVycm9yIiwKKyAgICAgICAg
ICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRGF0YWJh
c2UgZXJyb3IuIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAibWVzc2FnZSIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJF
cnJvciBtZXNzYWdlLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvZGUiLCAidHlw
ZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIGNvZGUuIiB9CisgICAgICAgICAg
ICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJjb21tYW5kcyI6IFsKKyAgICAgICAgeworICAg
ICAgICAgICAgIm5hbWUiOiAiZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyIsCisg
ICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRh
dGFiYXNlSWQiLCAiJHJlZiI6ICJEYXRhYmFzZUlkIiB9LAorICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAicXVlcnkiLCAidHlwZSI6ICJzdHJpbmciIH0KKyAgICAgICAgICAgIF0sCisgICAgICAg
ICAgICAicmV0dXJucyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVz
IiwgInR5cGUiOiAiYXJyYXkiLCAib3B0aW9uYWwiOiB0cnVlLCAiaXRlbXMiOiB7ICJ0eXBlIjog
InN0cmluZyIgfSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6
ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9u
YWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUi
OiAiYW55IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
ZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVycm9yIiwgIm9w
dGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2NyZWVuQ29sb3Ii
LCAiJHJlZiI6ICJQcmltYXJ5Q29sb3JzIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwgIiRyZWYiOiAiQ29sb3JMaXN0Iiwg
Im9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJpbnRDb2xv
ciIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93
IiwgImJsYWNrIl0sICJvcHRpb25hbCI6IHRydWUgfQorICAgICAgICAgICAgXQorICAgICAgICB9
LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJleGVjdXRlU1FMQXN5bmNPcHRpb25h
bFJldHVyblZhbHVlcyIsCisgICAgICAgICAgICAiYXN5bmMiOiB0cnVlLAorICAgICAgICAgICAg
InBhcmFtZXRlcnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwg
IiRyZWYiOiAiRGF0YWJhc2VJZCIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInF1ZXJ5
IiwgInR5cGUiOiAic3RyaW5nIiB9CisgICAgICAgICAgICBdLAorICAgICAgICAgICAgInJldHVy
bnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjog
ImFycmF5IiwgIm9wdGlvbmFsIjogdHJ1ZSwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0g
fSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiwg
Im9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1w
IiwgInR5cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9
LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIsICJv
cHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRhdGFiYXNlSWQi
LCAiJHJlZiI6ICJEYXRhYmFzZUlkIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAic3FsRXJyb3IiLCAiJHJlZiI6ICJFcnJvciIsICJvcHRpb25hbCI6IHRy
dWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNjcmVlbkNvbG9yIiwgIiRyZWYiOiAi
UHJpbWFyeUNvbG9ycyIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJu
YW1lIjogImFsdGVybmF0ZUNvbG9ycyIsICIkcmVmIjogIkNvbG9yTGlzdCIsICJvcHRpb25hbCI6
IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInByaW50Q29sb3IiLCAidHlwZSI6
ICJzdHJpbmciLCAiZW51bSI6IFsiY3lhbiIsICJtYWdlbnRhIiwgInllbGxvdyIsICJibGFjayJd
LCAib3B0aW9uYWwiOiB0cnVlIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAg
eworICAgICAgICAgICAgIm5hbWUiOiAiZXhlY3V0ZVNRTFN5bmMiLAorICAgICAgICAgICAgInBh
cmFtZXRlcnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRy
ZWYiOiAiRGF0YWJhc2VJZCIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInF1ZXJ5Iiwg
InR5cGUiOiAic3RyaW5nIiB9CisgICAgICAgICAgICBdLAorICAgICAgICAgICAgInJldHVybnMi
OiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFy
cmF5IiwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwKKyAgICAgICAgICAgICAgICB7
ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiB9LAorICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiB9LAorICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiB9LAorICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIgfSwKKyAgICAgICAgICAgICAgICB7
ICJuYW1lIjogImRhdGFiYXNlSWQiLCAiJHJlZiI6ICJEYXRhYmFzZUlkIiB9LAorICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAic3FsRXJyb3IiLCAiJHJlZiI6ICJFcnJvciIgfSwKKyAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogImFsdGVybmF0ZUNvbG9ycyIsICIkcmVmIjogIkNvbG9yTGlzdCIg
fSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNjcmVlbkNvbG9yIiwgIiRyZWYiOiAiUHJp
bWFyeUNvbG9ycyIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInByaW50Q29sb3IiLCAi
dHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsiY3lhbiIsICJtYWdlbnRhIiwgInllbGxvdyIsICJi
bGFjayJdIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAg
ICAgIm5hbWUiOiAiZXhlY3V0ZVNRTEFzeW5jIiwKKyAgICAgICAgICAgICJhc3luYyI6IHRydWUs
CisgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjog
ImRhdGFiYXNlSWQiLCAiJHJlZiI6ICJEYXRhYmFzZUlkIiB9LAorICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAicXVlcnkiLCAidHlwZSI6ICJzdHJpbmciIH0KKyAgICAgICAgICAgIF0sCisgICAg
ICAgICAgICAicmV0dXJucyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5h
bWVzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAor
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciIH0sCisg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiIH0s
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiIH0s
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiB9LAor
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNl
SWQiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVy
cm9yIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6
ICJQcmltYXJ5Q29sb3JzIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYWx0ZXJuYXRl
Q29sb3JzIiwgIiRyZWYiOiAiQ29sb3JMaXN0IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJjeWFuIiwgIm1hZ2Vu
dGEiLCAieWVsbG93IiwgImJsYWNrIl0gfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAg
XQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29u
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2NvbW1hbmRz
LXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4zNjFkNTdkODIwZAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9jb21tYW5kcy13
aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgpAQCAtMCwwICsxLDg1IEBA
Cit7CisgICAgImRvbWFpbiI6ICJEYXRhYmFzZSIsCisgICAgInR5cGVzIjogWworICAgICAgICB7
CisgICAgICAgICAgICAiaWQiOiAiRGF0YWJhc2VJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJp
bnRlZ2VyIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgaWRlbnRpZmllciBv
ZiBEYXRhYmFzZSBvYmplY3QuIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAi
aWQiOiAiUHJpbWFyeUNvbG9ycyIsCisgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAorICAg
ICAgICAgICAgImVudW0iOiBbInJlZCIsICJncmVlbiIsICJibHVlIl0KKyAgICAgICAgfSwKKyAg
ICAgICAgeworICAgICAgICAgICAgImlkIjogIkNvbG9yTGlzdCIsCisgICAgICAgICAgICAidHlw
ZSI6ICJhcnJheSIsCisgICAgICAgICAgICAiaXRlbXMiOiB7ICIkcmVmIjogIlByaW1hcnlDb2xv
cnMiIH0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkVycm9yIiwK
KyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24i
OiAiRGF0YWJhc2UgZXJyb3IuIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAibWVzc2FnZSIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlw
dGlvbiI6ICJFcnJvciBtZXNzYWdlLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNv
ZGUiLCAidHlwZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIGNvZGUuIiB9Cisg
ICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJjb21tYW5kcyI6IFsKKyAgICAg
ICAgeworICAgICAgICAgICAgIm5hbWUiOiAiZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyIs
CisgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjog
ImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAib3B0aW9uYWwiOiB0cnVlLCAiaXRlbXMi
OiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90
ZXMiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiLCAib3B0aW9uYWwiOiB0
cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmpl
Y3QiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXls
b2FkIiwgInR5cGUiOiAiYW55IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiLCAib3B0aW9uYWwi
OiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjog
IkVycm9yIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
c2NyZWVuQ29sb3IiLCAiJHJlZiI6ICJQcmltYXJ5Q29sb3JzIiwgIm9wdGlvbmFsIjogdHJ1ZSB9
LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwgIiRyZWYiOiAi
Q29sb3JMaXN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJjeWFuIiwgIm1hZ2Vu
dGEiLCAieWVsbG93IiwgImJsYWNrIl0sICJvcHRpb25hbCI6IHRydWUgfQorICAgICAgICAgICAg
XSwKKyAgICAgICAgICAgICJyZXR1cm5zIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
Y29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJvcHRpb25hbCI6IHRydWUsICJpdGVtcyI6
IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3Rl
cyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6IHRy
dWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVj
dCIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxv
YWQiLCAidHlwZSI6ICJhbnkiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIsICJvcHRpb25hbCI6
IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAi
RXJyb3IiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJz
Y3JlZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlDb2xvcnMiLCAib3B0aW9uYWwiOiB0cnVlIH0s
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJhbHRlcm5hdGVDb2xvcnMiLCAiJHJlZiI6ICJD
b2xvckxpc3QiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbImN5YW4iLCAibWFnZW50
YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSwgIm9wdGlvbmFsIjogdHJ1ZSB9CisgICAgICAgICAgICBd
CisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImV4ZWN1dGVOb09w
dGlvbmFsUGFyYW1ldGVycyIsCisgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMi
OiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90
ZXMiLCAidHlwZSI6ICJzdHJpbmciIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1l
c3RhbXAiLCAidHlwZSI6ICJudW1iZXIiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2
YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJw
YXlsb2FkIiwgInR5cGUiOiAiYW55IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0
YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiIH0sCisgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVycm9yIiB9LAorICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6ICJQcmltYXJ5Q29sb3JzIiB9LAorICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwgIiRyZWYiOiAiQ29sb3JMaXN0IiB9
LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmlu
ZyIsICJlbnVtIjogWyJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93IiwgImJsYWNrIl0gfQorICAg
ICAgICAgICAgXSwKKyAgICAgICAgICAgICJyZXR1cm5zIjogWworICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgInR5cGUi
OiAic3RyaW5nIiB9IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBl
IjogInN0cmluZyIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0
eXBlIjogIm51bWJlciIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0
eXBlIjogIm9iamVjdCIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAi
dHlwZSI6ICJhbnkiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwg
IiRyZWYiOiAiRGF0YWJhc2VJZCIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNxbEVy
cm9yIiwgIiRyZWYiOiAiRXJyb3IiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzY3Jl
ZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlDb2xvcnMiIH0sCisgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJhbHRlcm5hdGVDb2xvcnMiLCAiJHJlZiI6ICJDb2xvckxpc3QiIH0sCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0i
OiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSB9CisgICAgICAgICAgICBd
CisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNv
biBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9kZWZpbml0
aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwLi45YmU0NmExN2FkMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0
Zm9ybS5qc29uCkBAIC0wLDAgKzEsMjggQEAKK3sKKyAgICAiZG9tYWluIjogIk5ldHdvcmsiLAor
ICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIk5ldHdvcmtFcnJv
ciIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgImNvbmRpdGlv
biI6ICJQTEFURk9STShNQUMpIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAibWVzc2FnZSIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlw
dGlvbiI6ICJFcnJvciBtZXNzYWdlLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNv
ZGUiLCAidHlwZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIGNvZGUuIiB9Cisg
ICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJjb21tYW5kcyI6IFsKKyAgICAg
ICAgeworICAgICAgICAgICAgIm5hbWUiOiAibG9hZFJlc291cmNlIiwKKyAgICAgICAgICAgICJj
b25kaXRpb24iOiAiUExBVEZPUk0oTUFDKSIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAi
TG9hZHMgYSByZXNvdXJjZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0
ZWQgcGFnZSB3aXRob3V0IGNyb3NzIG9yaWdpbiBjaGVja3MuIgorICAgICAgICB9CisgICAgXSwK
KyAgICAiZXZlbnRzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJyZXNvdXJj
ZUxvYWRlZCIsCisgICAgICAgICAgICAiY29uZGl0aW9uIjogIlBMQVRGT1JNKE1BQykiLAorICAg
ICAgICAgICAgImRlc2NyaXB0aW9uIjogIkEgcmVzb3VyY2Ugd2FzIGxvYWRlZC4iCisgICAgICAg
IH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2RvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMu
anNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMWZlYjBjOWEyN2UK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uCkBAIC0wLDAgKzEsOCBAQAorWwor
eworICAgICJkb21haW4iOiAiRG9tYWluIiwKKyAgICAiZGVidWdnYWJsZVR5cGVzIjogWyJ3ZWIt
cGFnZSJdLAorICAgICJjb21tYW5kcyI6IFt7Im5hbWUiOiAiQ29tbWFuZCJ9XSwKKyAgICAiZXZl
bnRzIjogW3sibmFtZSI6ICJFdmVudCJ9XQorfQorXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2RvbWFpbi10YXJnZXRUeXBlLW1hdGNo
aW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2RvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1k
ZWJ1Z2dhYmxlVHlwZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
Li5mNjJmYjM4YmE3OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9kb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4t
ZGVidWdnYWJsZVR5cGUuanNvbgpAQCAtMCwwICsxLDggQEAKK1sKK3sKKyAgICAiZG9tYWluIjog
IkRvbWFpbiIsCisgICAgImRlYnVnZ2FibGVUeXBlcyI6IFsicGFnZSJdLAorICAgICJjb21tYW5k
cyI6IFt7Im5hbWUiOiAiQ29tbWFuZCIsICJ0YXJnZXRUeXBlcyI6IFsicGFnZSIsICJ3b3JrZXIi
XX1dLAorICAgICJldmVudHMiOiBbeyJuYW1lIjogIkV2ZW50In1dCit9CitdCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZG9tYWluLXRh
cmdldFR5cGVzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZG9tYWluLXRhcmdldFR5cGVzLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAuLjZhNmU0MGQ2MGFkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2RvbWFpbi10YXJnZXRUeXBlcy5qc29u
CkBAIC0wLDAgKzEsOCBAQAorWworeworICAgICJkb21haW4iOiAiRG9tYWluIiwKKyAgICAidGFy
Z2V0VHlwZXMiOiBbInBhZ2UiXSwKKyAgICAiY29tbWFuZHMiOiBbeyJuYW1lIjogIkNvbW1hbmQi
LCAidGFyZ2V0VHlwZXMiOiBbInBhZ2UiXX1dLAorICAgICJldmVudHMiOiBbeyJuYW1lIjogIkV2
ZW50IiwgInRhcmdldFR5cGVzIjogWyJwYWdlIl19XQorfQorXQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2RvbWFpbnMtd2l0aC12YXJ5
aW5nLWNvbW1hbmQtc2l6ZXMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjk0YThlY2IxNzZkCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgpAQCAtMCwwICsxLDU0IEBA
CitbCit7CisgICAgImRvbWFpbiI6ICJOZXR3b3JrMSIsCisgICAgImNvbW1hbmRzIjogWworICAg
ICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJsb2FkUmVzb3VyY2UxIiwKKyAgICAgICAgICAg
ICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBhIHJlc291cmNlIGluIHRoZSBjb250ZXh0IG9mIGEgZnJh
bWUgb24gdGhlIGluc3BlY3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNoZWNrcy4iCisg
ICAgICAgIH0KKyAgICBdCit9LAoreworICAgICJkb21haW4iOiAiTmV0d29yazIiLAorICAgICJ0
eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkxvYWRlcklkIiwKKyAgICAg
ICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5p
cXVlIGxvYWRlciBpZGVudGlmaWVyLiIKKyAgICAgICAgfQorICAgIF0KK30sCit7CisgICAgImRv
bWFpbiI6ICJOZXR3b3JrMyIsCisgICAgImNvbW1hbmRzIjogWworICAgICAgICB7CisgICAgICAg
ICAgICAibmFtZSI6ICJsb2FkUmVzb3VyY2UxIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6
ICJMb2FkcyBhIHJlc291cmNlIGluIHRoZSBjb250ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGluc3Bl
Y3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNoZWNrcy4iCisgICAgICAgIH0sCisgICAg
ICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJjZTIiLAorICAgICAgICAgICAg
ImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFt
ZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKKyAg
ICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAibG9hZFJlc291cmNlMyIs
CisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9hZHMgYSByZXNvdXJjZSBpbiB0aGUgY29u
dGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFnZSB3aXRob3V0IGNyb3NzIG9yaWdp
biBjaGVja3MuIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJs
b2FkUmVzb3VyY2U0IiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBhIHJlc291
cmNlIGluIHRoZSBjb250ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGluc3BlY3RlZCBwYWdlIHdpdGhv
dXQgY3Jvc3Mgb3JpZ2luIGNoZWNrcy4iCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAg
ICAgICJuYW1lIjogImxvYWRSZXNvdXJjZTUiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjog
IkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVj
dGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKKyAgICAgICAgfSwKKyAgICAg
ICAgeworICAgICAgICAgICAgIm5hbWUiOiAibG9hZFJlc291cmNlNiIsCisgICAgICAgICAgICAi
ZGVzY3JpcHRpb24iOiAiTG9hZHMgYSByZXNvdXJjZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1l
IG9uIHRoZSBpbnNwZWN0ZWQgcGFnZSB3aXRob3V0IGNyb3NzIG9yaWdpbiBjaGVja3MuIgorICAg
ICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJsb2FkUmVzb3VyY2U3IiwK
KyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBhIHJlc291cmNlIGluIHRoZSBjb250
ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGluc3BlY3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3JpZ2lu
IGNoZWNrcy4iCisgICAgICAgIH0KKyAgICBdCit9CitdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZW51bS12YWx1ZXMuanNvbiBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9lbnVtLXZhbHVlcy5q
c29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jZGFkNjFkZjdjOQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9lbnVtLXZhbHVlcy5qc29uCkBAIC0wLDAgKzEsMzUgQEAKK3siZG9tYWlucyI6Wwor
eworICAgICJkb21haW4iOiAiVHlwZURvbWFpbiIsCisgICAgInR5cGVzIjogWworICAgICAgICB7
CisgICAgICAgICAgICAiaWQiOiAiVHlwZURvbWFpbkVudW0iLAorICAgICAgICAgICAgInR5cGUi
OiAic3RyaW5nIiwKKyAgICAgICAgICAgICJlbnVtIjogWyJzaGFyZWQiLCAicmVkIiwgImdyZWVu
IiwgImJsdWUiXQorICAgICAgICB9CisgICAgXQorfSwKK3sKKyAgICAiZG9tYWluIjogIkNvbW1h
bmREb21haW4iLAorICAgICJjb21tYW5kcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5h
bWUiOiAiY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUiLAorICAgICAgICAgICAgInBhcmFtZXRl
cnMiOiBbXSwKKyAgICAgICAgICAgICJyZXR1cm5zIjogWworICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAicmV0dXJuVmFsdWUiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsic2hhcmVkIiwg
ImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciXSB9CisgICAgICAgICAgICBdCisgICAgICAgIH0K
KyAgICBdCit9LAoreworICAgICJkb21haW4iOiAiRXZlbnREb21haW4iLAorICAgICJldmVudHMi
OiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImV2ZW50V2l0aEVudW1QYXJhbWV0
ZXIiLAorICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJwYXJhbWV0ZXIiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsic2hhcmVkIiwgImJs
YWNrIiwgIndoaXRlIl0gfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXQorfQorXX0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9ldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V2ZW50LXRhcmdl
dFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjRkZmVkNDFlZDIxCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V2ZW50LXRhcmdl
dFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KQEAgLTAsMCArMSw4IEBA
CitbCit7CisgICAgImRvbWFpbiI6ICJEb21haW4iLAorICAgICJkZWJ1Z2dhYmxlVHlwZXMiOiBb
InBhZ2UiXSwKKyAgICAiY29tbWFuZHMiOiBbeyJuYW1lIjogIkNvbW1hbmQifV0sCisgICAgImV2
ZW50cyI6IFt7Im5hbWUiOiAiRXZlbnQiLCAidGFyZ2V0VHlwZXMiOiBbInBhZ2UiLCAid29ya2Vy
Il19XQorfQorXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbiBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9ldmVudHMtd2l0aC1vcHRp
b25hbC1wYXJhbWV0ZXJzLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAuLmNhYmJmMTBiODM2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMu
anNvbgpAQCAtMCwwICsxLDU5IEBACit7CisgICAgImRvbWFpbiI6ICJEYXRhYmFzZSIsCisgICAg
InR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiRGF0YWJhc2VJZCIsCisg
ICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjog
IlVuaXF1ZSBpZGVudGlmaWVyIG9mIERhdGFiYXNlIG9iamVjdC4iCisgICAgICAgIH0sCisgICAg
ICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJQcmltYXJ5Q29sb3JzIiwKKyAgICAgICAgICAgICJ0
eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAidmFsdWVzIjogWyJyZWQiLCAiZ3JlZW4iLCAi
Ymx1ZSJdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJDb2xvckxp
c3QiLAorICAgICAgICAgICAgInR5cGUiOiAiYXJyYXkiLAorICAgICAgICAgICAgIml0ZW1zIjog
eyAiJHJlZiI6ICJQcmltYXJ5Q29sb3JzIiB9CisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAg
ICAgICAgICJpZCI6ICJFcnJvciIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAg
ICAgICAgICAgImRlc2NyaXB0aW9uIjogIkRhdGFiYXNlIGVycm9yLiIsCisgICAgICAgICAgICAi
cHJvcGVydGllcyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm1lc3NhZ2UiLCAidHlw
ZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgbWVzc2FnZS4iIH0sCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJjb2RlIiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlv
biI6ICJFcnJvciBjb2RlLiIgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAg
ICAiZXZlbnRzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJkaWRFeGVjdXRl
T3B0aW9uYWxQYXJhbWV0ZXJzIiwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJvcHRp
b25hbCI6IHRydWUsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCisgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRy
dWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51
bWJlciIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZh
bHVlcyIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiLCAib3B0aW9uYWwiOiB0cnVl
IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVycm9y
IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2NyZWVu
Q29sb3IiLCAiJHJlZiI6ICJQcmltYXJ5Q29sb3JzIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwgIiRyZWYiOiAiQ29sb3JM
aXN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJp
bnRDb2xvciIsICJ0eXBlIjogInN0cmluZyIsICJ2YWx1ZXMiOiBbImN5YW4iLCAibWFnZW50YSIs
ICJ5ZWxsb3ciLCAiYmxhY2siXSwgIm9wdGlvbmFsIjogdHJ1ZSB9CisgICAgICAgICAgICBdCisg
ICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImRpZEV4ZWN1dGVOb09w
dGlvbmFsUGFyYW1ldGVycyIsCisgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMi
OiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90
ZXMiLCAidHlwZSI6ICJzdHJpbmciIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1l
c3RhbXAiLCAidHlwZSI6ICJudW1iZXIiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2
YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJw
YXlsb2FkIiwgInR5cGUiOiAiYW55IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic3Fs
RXJyb3IiLCAiJHJlZiI6ICJFcnJvciIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNj
cmVlbkNvbG9yIiwgIiRyZWYiOiAiUHJpbWFyeUNvbG9ycyIgfSwKKyAgICAgICAgICAgICAgICB7
ICJuYW1lIjogImFsdGVybmF0ZUNvbG9ycyIsICIkcmVmIjogIkNvbG9yTGlzdCIgfSwKKyAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogInByaW50Q29sb3IiLCAidHlwZSI6ICJzdHJpbmciLCAidmFs
dWVzIjogWyJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93IiwgImJsYWNrIl0gfQorICAgICAgICAg
ICAgXQorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmQtdGFyZ2V0VHlwZS1t
YXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZC10YXJnZXRU
eXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJlc3VsdApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOTEzZWM4MTczY2IKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29u
LXJlc3VsdApAQCAtMCwwICsxLDEwMzAgQEAKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNr
ZW5kQ29tbWFuZHMuanMKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5k
LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworLy8gRG9tYWluCitJbnNwZWN0b3JC
YWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJEb21haW4iLCBbInBhZ2UiLCAid29ya2VyIl0pOworSW5z
cGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIkRvbWFpbi5Db21tYW5kIiwgbnVsbCwgW10s
IFtdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudCgiRG9tYWluLkV2ZW50IiwgbnVs
bCwgW10pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbkRpc3BhdGNoZXIgPSBJbnNw
ZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRGlzcGF0Y2hlci5iaW5kKEluc3BlY3RvckJhY2tlbmQsICJE
b21haW4iKTsKK0luc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkRvbWFpbiIsIFsicGFn
ZSJdKTsKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWlu
LWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorCituYW1lc3BhY2UgSW5z
cGVjdG9yIHsKKworY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgor
ICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYm
IGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7
IH0KKyAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJl
dHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Citwcml2YXRlOgorICAgIFJlZlB0cjxC
YWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKK307CisKKworY2xhc3MgQWx0
ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERp
c3BhdGNoZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgfkFsdGVybmF0ZURvbWFpbkJhY2tlbmRE
aXNwYXRjaGVyKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIENvbW1hbmQobG9uZyBjYWxsSWQpID0g
MDsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5h
dGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNw
YXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZC10YXJn
ZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAi
VGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisK
K25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKwor
I2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorY2xhc3MgQWx0ZXJu
YXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXI7CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKK2NsYXNzIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIENvbW1hbmQoRXJyb3JTdHJpbmcmKSA9
IDA7Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+RG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyKCk7Cit9OworCitjbGFzcyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1Ymxp
YyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFJl
ZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgRG9t
YWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgdm9pZCBkaXNwYXRjaChsb25nIHJl
cXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2Fn
ZSkgZmluYWw7Citwcml2YXRlOgorICAgIHZvaWQgQ29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVm
UHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKK3B1YmxpYzoKKyAgICB2b2lkIHNldEFsdGVybmF0ZURpc3Bh
dGNoZXIoQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNo
ZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQorcHJp
dmF0ZToKKyAgICBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciogbV9hbHRlcm5hdGVE
aXNwYXRjaGVyIHsgbnVsbHB0ciB9OworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQorcHJpdmF0ZToKKyAgICBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihC
YWNrZW5kRGlzcGF0Y2hlciYsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAg
IERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2VudCB7IG51bGxwdHIgfTsKK307
CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERp
c3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3Bw
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZC10YXJnZXRUeXBlLW1h
dGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0
QmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVk
ZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgor
CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjaW5jbHVkZSAi
VGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgorI2VuZGlmIC8vIEVOQUJMRShJTlNQ
RUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwor
RG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+RG9tYWluQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyKCkgeyB9CisKK1JlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gRG9tYWluQmFja2Vu
ZERpc3BhdGNoZXI6OmNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIs
IERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCit7CisgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgRG9tYWluQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIsIGFn
ZW50KSk7Cit9CisKK0RvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpEb21haW5CYWNrZW5kRGlzcGF0
Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIERvbWFpbkJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlciogYWdlbnQpCisgICAgOiBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0
Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKKyAgICAsIG1fYWdlbnQoYWdlbnQpCit7CisgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKCJEb21haW4iX3Ms
IHRoaXMpOworfQorCit2b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25n
IHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVz
c2FnZSkKK3sKKyAgICBSZWY8RG9tYWluQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMp
OworCisgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVyczsKKyAgICBtZXNzYWdlLT5n
ZXRPYmplY3QoInBhcmFtcyJfcywgcGFyYW1ldGVycyk7CisKKyAgICBpZiAobWV0aG9kID09ICJD
b21tYW5kIikgeworICAgICAgICBDb21tYW5kKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJz
KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5y
ZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidE
b21haW4uIiArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKK30KKwordm9pZCBEb21haW5C
YWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9i
amVjdD4mJikKK3sKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
KyAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlz
cGF0Y2hlci0+Q29tbWFuZChyZXF1ZXN0SWQpOworICAgICAgICByZXR1cm47CisgICAgfQorI2Vu
ZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCisgICAgRXJy
b3JTdHJpbmcgZXJyb3I7CisgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKKyAgICBtX2FnZW50LT5Db21tYW5kKGVycm9yKTsKKworICAgIGlmICgh
ZXJyb3IubGVuZ3RoKCkpCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25z
ZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOworICAgIGVsc2UKKyAgICAgICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hl
cjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVn
Z2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5j
bHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
KworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEZyb250ZW5kUm91dGVyOworCitjbGFz
cyBEb21haW5Gcm9udGVuZERpc3BhdGNoZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OworcHVibGljOgorICAgIERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcihGcm9udGVuZFJvdXRlciYg
ZnJvbnRlbmRSb3V0ZXIpIDogbV9mcm9udGVuZFJvdXRlcihmcm9udGVuZFJvdXRlcikgeyB9Cisg
ICAgdm9pZCBFdmVudCgpOworcHJpdmF0ZToKKyAgICBGcm9udGVuZFJvdXRlciYgbV9mcm9udGVu
ZFJvdXRlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBU
ZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmRE
aXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5k
LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3ZvaWQgRG9tYWluRnJvbnRlbmRE
aXNwYXRjaGVyOjpFdmVudCgpCit7CisgICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2Ug
PSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1l
dGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7CisKKyAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRF
dmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKwor
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdn
YWJsZVR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3Rv
Y29sVHlwZXMuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgSW5z
cGVjdG9yIHsKKworCisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKworCisKKworCisKKworCit9
IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xPYmplY3RzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1h
bmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorCisjaW5jbHVkZSA8d3RmL09wdGlv
bmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVj
dG9yIHsKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworCisKK30gLy8gbmFtZXNwYWNlIFByb3Rv
Y29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbE9iamVjdHMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlz
cGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmQtdGFy
Z2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgorLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8d3RmL1Jl
dGFpblB0ci5oPgorCitAcHJvdG9jb2wgVGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcjsK
KworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworY2xhc3MgT2JqQ0luc3BlY3RvckRvbWFpbkJh
Y2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNw
YXRjaGVyIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBPYmpD
SW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sRG9tYWluRG9t
YWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQorICAgIHZvaWQg
Q29tbWFuZChsb25nIHJlcXVlc3RJZCkgZmluYWw7Citwcml2YXRlOgorICAgIFJldGFpblB0cjxp
ZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKK307CisKK30g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tl
bmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlz
cGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRh
cmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1w
b3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbEludGVybmFsLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
LmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7
CisKK3ZvaWQgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxv
bmcgcmVxdWVzdElkKQoreworICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9y
OkBzZWxlY3RvcihDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7
CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVz
dElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRG9tYWluLkNvbW1hbmQn
IHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVu
ZGluZ0Vycm9ycygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWQgZXJyb3JDYWxs
YmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCkt
PnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVy
RXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdF
cnJvcnMoKTsKKyAgICB9OworCisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKKyAgICAgICAg
YmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKSwgZmFsc2UpOworICAgIH07CisKKyAgICBbbV9kZWxlZ2F0ZSBDb21tYW5kV2l0
aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxi
YWNrXTsKK30KKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24uaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxXZWJJ
bnNwZWN0b3IvVGVzdFByb3RvY29sLmg+CisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJk
ZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmpl
Y3QKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4sIHNldHRlcj1zZXREb21haW5IYW5kbGVy
OikgaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4gZG9tYWluSGFuZGxlcjsKK0Bw
cm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZl
bnREaXNwYXRjaGVyICpkb21haW5FdmVudERpc3BhdGNoZXI7CitAZW5kCisKKworIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVz
dFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5h
bC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisjaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgorI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4K
KyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgor
Cit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3Rv
Y29sQ29uZmlndXJhdGlvbgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciog
X2NvbnRyb2xsZXI7CisgICAgaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4gX2Rv
bWFpbkhhbmRsZXI7CisgICAgVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVy
ICpfZG9tYWluRXZlbnREaXNwYXRjaGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhD
b250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sK
KyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJu
IG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9s
bGVyOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbX2Rv
bWFpbkhhbmRsZXIgcmVsZWFzZV07CisgICAgW19kb21haW5FdmVudERpc3BhdGNoZXIgcmVsZWFz
ZV07CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistICh2b2lkKXNldERvbWFpbkhhbmRsZXI6
KGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+KWhhbmRsZXIKK3sKKyAgICBpZiAo
aGFuZGxlciA9PSBfZG9tYWluSGFuZGxlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgW19kb21h
aW5IYW5kbGVyIHJlbGVhc2VdOworICAgIF9kb21haW5IYW5kbGVyID0gW2hhbmRsZXIgcmV0YWlu
XTsKKworICAgIGF1dG8gYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IG1ha2VVbmlxdWU8T2JqQ0luc3Bl
Y3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyPihoYW5kbGVyKTsKKyAgICBhdXRvIGFsdGVybmF0
ZUFnZW50ID0gbWFrZVVuaXF1ZTxBbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudDxEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlciwgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXI+PigiRG9tYWlu
Il9zLCAqX2NvbnRyb2xsZXIsIFdURk1vdmUoYWx0ZXJuYXRlRGlzcGF0Y2hlcikpOworICAgIF9j
b250cm9sbGVyLT5hcHBlbmRFeHRyYUFnZW50KFdURk1vdmUoYWx0ZXJuYXRlQWdlbnQpKTsKK30K
KworLSAoaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4pZG9tYWluSGFuZGxlcgor
eworICAgIHJldHVybiBfZG9tYWluSGFuZGxlcjsKK30KKworLSAoVGVzdFByb3RvY29sRG9tYWlu
RG9tYWluRXZlbnREaXNwYXRjaGVyICopZG9tYWluRXZlbnREaXNwYXRjaGVyCit7CisgICAgaWYg
KCFfZG9tYWluRXZlbnREaXNwYXRjaGVyKQorICAgICAgICBfZG9tYWluRXZlbnREaXNwYXRjaGVy
ID0gW1tUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgYWxsb2NdIGluaXRX
aXRoQ29udHJvbGxlcjpfY29udHJvbGxlcl07CisgICAgcmV0dXJuIF9kb21haW5FdmVudERpc3Bh
dGNoZXI7Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3Vy
YXRpb24ubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMu
bW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5cGUt
bWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIK
KworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDx3dGYv
SlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50
YXRpb24gVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyCit7CisgICAgQXVn
bWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKK30KKworLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVy
Kiljb250cm9sbGVyCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYp
CisgICAgICAgIHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250
cm9sbGVyID0gY29udHJvbGxlcjsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClFdmVu
dAoreworICAgIGNvbnN0IEZyb250ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29udHJvbGxlci0+ZnJv
bnRlbmRSb3V0ZXIoKTsKKworICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2Qi
X3MsICJEb21haW4uRXZlbnQiX3MpOworICAgIHJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2Ut
PnRvSlNPTlN0cmluZygpKTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sRXZlbnREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5cGUtbWF0
Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisK
KyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KKworCisKKwor
CisKKworCitAcHJvdG9jb2wgVGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlciA8TlNPYmpl
Y3Q+CitAb3B0aW9uYWwKKy0gKHZvaWQpQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4p
KE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXiko
dm9pZCkpc3VjY2Vzc0NhbGxiYWNrOworQGVuZAorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5
ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnRE
aXNwYXRjaGVyIDogTlNPYmplY3QKKy0gKHZvaWQpRXZlbnQ7CitAZW5kCisKKworI2ltcG9ydCA8
V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgorCisj
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xJbnRlcm5hbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZC10
YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCisvLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5o
IgorI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKKyNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8
d3RmL0pTT05WYWx1ZXMuaD4KKworQGludGVyZmFjZSBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5F
dmVudERpc3BhdGNoZXIgKFByaXZhdGUpCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9s
bGVyOihJbnNwZWN0b3I6OkF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxl
cjsKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1k
ZWJ1Z2dhYmxlVHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JX
SVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgorT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBm
cm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7CisKK30gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5o
CisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmct
ZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisK
KyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNl
ci5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUu
aD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisKKworCisKKyMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xUeXBlcy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1h
bmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9j
b2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIK
KyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Cisj
aW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwor
dXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbi1y
ZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbi1yZXN1bHQKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjk4ODE3NWNjMDRmCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVj
dGVkL2NvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24tcmVzdWx0CkBAIC0wLDAgKzEs
MTc4MiBAQAorIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcworLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmli
dXRlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworLy8g
RGF0YWJhc2UKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIkRhdGFiYXNlIiwgbnVs
bCk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiRGF0YWJhc2UuUHJpbWFyeUNvbG9y
cyIsIHtSZWQ6ICJyZWQiLCBHcmVlbjogImdyZWVuIiwgQmx1ZTogImJsdWUifSk7CitJbnNwZWN0
b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiRGF0YWJhc2UuZXhlY3V0ZVNRTFN5bmNPcHRpb25h
bFJldHVyblZhbHVlcyIsIG51bGwsIFt7Im5hbWUiOiAiZGF0YWJhc2VJZCIsICJ0eXBlIjogIm51
bWJlciJ9LCB7Im5hbWUiOiAicXVlcnkiLCAidHlwZSI6ICJzdHJpbmcifV0sIFsiY29sdW1uTmFt
ZXMiLCAibm90ZXMiLCAidGltZXN0YW1wIiwgInZhbHVlcyIsICJwYXlsb2FkIiwgImRhdGFiYXNl
SWQiLCAic3FsRXJyb3IiLCAic2NyZWVuQ29sb3IiLCAiYWx0ZXJuYXRlQ29sb3JzIiwgInByaW50
Q29sb3IiXSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiRGF0YWJhc2UuZXhl
Y3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMiLCBudWxsLCBbeyJuYW1lIjogImRhdGFi
YXNlSWQiLCAidHlwZSI6ICJudW1iZXIifSwgeyJuYW1lIjogInF1ZXJ5IiwgInR5cGUiOiAic3Ry
aW5nIn1dLCBbImNvbHVtbk5hbWVzIiwgIm5vdGVzIiwgInRpbWVzdGFtcCIsICJ2YWx1ZXMiLCAi
cGF5bG9hZCIsICJkYXRhYmFzZUlkIiwgInNxbEVycm9yIiwgInNjcmVlbkNvbG9yIiwgImFsdGVy
bmF0ZUNvbG9ycyIsICJwcmludENvbG9yIl0pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNv
bW1hbmQoIkRhdGFiYXNlLmV4ZWN1dGVTUUxTeW5jIiwgbnVsbCwgW3sibmFtZSI6ICJkYXRhYmFz
ZUlkIiwgInR5cGUiOiAibnVtYmVyIn0sIHsibmFtZSI6ICJxdWVyeSIsICJ0eXBlIjogInN0cmlu
ZyJ9XSwgWyJjb2x1bW5OYW1lcyIsICJub3RlcyIsICJ0aW1lc3RhbXAiLCAidmFsdWVzIiwgInBh
eWxvYWQiLCAiZGF0YWJhc2VJZCIsICJzcWxFcnJvciIsICJhbHRlcm5hdGVDb2xvcnMiLCAic2Ny
ZWVuQ29sb3IiLCAicHJpbnRDb2xvciJdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21t
YW5kKCJEYXRhYmFzZS5leGVjdXRlU1FMQXN5bmMiLCBudWxsLCBbeyJuYW1lIjogImRhdGFiYXNl
SWQiLCAidHlwZSI6ICJudW1iZXIifSwgeyJuYW1lIjogInF1ZXJ5IiwgInR5cGUiOiAic3RyaW5n
In1dLCBbImNvbHVtbk5hbWVzIiwgIm5vdGVzIiwgInRpbWVzdGFtcCIsICJ2YWx1ZXMiLCAicGF5
bG9hZCIsICJkYXRhYmFzZUlkIiwgInNxbEVycm9yIiwgInNjcmVlbkNvbG9yIiwgImFsdGVybmF0
ZUNvbG9ycyIsICJwcmludENvbG9yIl0pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRhdGFi
YXNlRGlzcGF0Y2hlciA9IEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEaXNwYXRjaGVyLmJpbmQo
SW5zcGVjdG9yQmFja2VuZCwgIkRhdGFiYXNlIik7CitJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRl
RG9tYWluKCJEYXRhYmFzZSIsIG51bGwpOworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5k
Q29tbWFuZHMuanMKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0
Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgt
YXN5bmMtYXR0cmlidXRlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorCituYW1lc3BhY2UgSW5z
cGVjdG9yIHsKKworY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgor
ICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYm
IGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7
IH0KKyAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJl
dHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Citwcml2YXRlOgorICAgIFJlZlB0cjxC
YWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKK307CisKKworY2xhc3MgQWx0
ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5k
RGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+QWx0ZXJuYXRlRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlcigpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMU3luY09wdGlv
bmFsUmV0dXJuVmFsdWVzKGxvbmcgY2FsbElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3Ry
aW5nJiBpbl9xdWVyeSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMQXN5bmNPcHRp
b25hbFJldHVyblZhbHVlcyhsb25nIGNhbGxJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0
cmluZyYgaW5fcXVlcnkpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTFN5bmMobG9u
ZyBjYWxsSWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxBc3luYyhsb25nIGNhbGxJZCwgaW50IGluX2Rh
dGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpID0gMDsKK307CisKK30gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCisjIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMu
aAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcg
RXJyb3JTdHJpbmc7CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKK2NsYXNzIEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI7CisjZW5kaWYgLy8g
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKK2NsYXNzIERhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKK3B1YmxpYzoKKyAgICAvLyBOYW1lZCBhZnRlciBw
YXJhbWV0ZXIgJ3ByaW50Q29sb3InIHdoaWxlIGdlbmVyYXRpbmcgY29tbWFuZC9ldmVudCBleGVj
dXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzLgorICAgIGVudW0gY2xhc3MgUHJpbnRDb2xv
ciB7CisgICAgICAgIEN5YW4gPSAzLAorICAgICAgICBNYWdlbnRhID0gNCwKKyAgICAgICAgWWVs
bG93ID0gNSwKKyAgICAgICAgQmxhY2sgPSA2LAorICAgIH07IC8vIGVudW0gY2xhc3MgUHJpbnRD
b2xvcgorICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVz
KEVycm9yU3RyaW5nJiwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnks
IFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiBvcHRfb3V0X2NvbHVtbk5hbWVzLCBPcHRp
b25hbDxTdHJpbmc+JiBvcHRfb3V0X25vdGVzLCBPcHRpb25hbDxkb3VibGU+JiBvcHRfb3V0X3Rp
bWVzdGFtcCwgT3B0aW9uYWw8SlNPTjo6T2JqZWN0PiYgb3B0X291dF92YWx1ZXMsIE9wdGlvbmFs
PEpTT046OlZhbHVlPiYgb3B0X291dF9wYXlsb2FkLCBPcHRpb25hbDxpbnQ+JiBvcHRfb3V0X2Rh
dGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiBv
cHRfb3V0X3NxbEVycm9yLCBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNv
bG9ycyogb3B0X291dF9zY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpDb2xvckxpc3Q+JiBvcHRfb3V0X2FsdGVybmF0ZUNvbG9ycywgRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3IqIG9wdF9vdXRfcHJpbnRDb2xvcikgPSAw
OworICAgIGNsYXNzIEV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2sg
OiBwdWJsaWMgQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZSB7CisgICAgcHVibGljOgor
ICAgICAgICBFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrKFJlZjxC
YWNrZW5kRGlzcGF0Y2hlcj4mJiwgaW50IGlkKTsKKyAgICAgICAgdm9pZCBzZW5kU3VjY2VzcyhS
ZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYmIGNvbHVtbk5hbWVzLCBPcHRpb25hbDxTdHJp
bmc+JiBub3RlcywgT3B0aW9uYWw8ZG91YmxlPiYgdGltZXN0YW1wLCBPcHRpb25hbDxKU09OOjpP
YmplY3Q+JiB2YWx1ZXMsIE9wdGlvbmFsPEpTT046OlZhbHVlPiYgcGF5bG9hZCwgT3B0aW9uYWw8
aW50PiYgZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpF
cnJvcj4mJiBzcWxFcnJvciwgT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6
OlByaW1hcnlDb2xvcnM+IHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6OkNvbG9yTGlzdD4mJiBhbHRlcm5hdGVDb2xvcnMsIE9wdGlvbmFsPERhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yPiBwcmludENvbG9yKTsKKyAgICB9
OworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhp
bnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSwgUmVmPEV4ZWN1dGVTUUxB
c3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2s+JiYgY2FsbGJhY2spID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTFN5bmMoRXJyb3JTdHJpbmcmLCBpbnQgaW5fZGF0YWJhc2VJ
ZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSwgUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4m
IG91dF9jb2x1bW5OYW1lcywgU3RyaW5nKiBvdXRfbm90ZXMsIGRvdWJsZSogb3V0X3RpbWVzdGFt
cCwgSlNPTjo6T2JqZWN0KiBvdXRfdmFsdWVzLCBKU09OOjpWYWx1ZSogb3V0X3BheWxvYWQsIGlu
dCogb3V0X2RhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6
RXJyb3I+JiBvdXRfc3FsRXJyb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFz
ZTo6Q29sb3JMaXN0PiYgb3V0X2FsdGVybmF0ZUNvbG9ycywgSW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMqIG91dF9zY3JlZW5Db2xvciwgRGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3IqIG91dF9wcmludENvbG9yKSA9IDA7CisgICAg
Y2xhc3MgRXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2sgOiBwdWJsaWMgQmFja2VuZERpc3BhdGNoZXI6
OkNhbGxiYWNrQmFzZSB7CisgICAgcHVibGljOgorICAgICAgICBFeGVjdXRlU1FMQXN5bmNDYWxs
YmFjayhSZWY8QmFja2VuZERpc3BhdGNoZXI+JiYsIGludCBpZCk7CisgICAgICAgIHZvaWQgc2Vu
ZFN1Y2Nlc3MoUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mJiBjb2x1bW5OYW1lcywgY29u
c3QgU3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgSlNPTjo6T2JqZWN0IHZhbHVlcywg
SlNPTjo6VmFsdWUgcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiYgc3FsRXJyb3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzIHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4mJiBhbHRlcm5hdGVDb2xvcnMsIERhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yIHByaW50Q29sb3IpOworICAgIH07
CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxBc3luYyhpbnQgaW5fZGF0YWJhc2VJZCwgY29u
c3QgU3RyaW5nJiBpbl9xdWVyeSwgUmVmPEV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrPiYmIGNhbGxi
YWNrKSA9IDA7Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+RGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXIoKTsKK307CisKK2NsYXNzIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIgZmlu
YWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAg
IHN0YXRpYyBSZWY8RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNw
YXRjaGVyJiwgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICB2b2lkIGRp
c3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9i
amVjdD4mJiBtZXNzYWdlKSBmaW5hbDsKK3ByaXZhdGU6CisgICAgdm9pZCBleGVjdXRlU1FMU3lu
Y09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0
PiYmIHBhcmFtZXRlcnMpOworICAgIHZvaWQgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7
CisgICAgdm9pZCBleGVjdXRlU1FMU3luYyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9i
amVjdD4mJiBwYXJhbWV0ZXJzKTsKKyAgICB2b2lkIGV4ZWN1dGVTUUxBc3luYyhsb25nIHJlcXVl
c3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyNpZiBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK3B1YmxpYzoKKyAgICB2b2lkIHNldEFsdGVy
bmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJu
YXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRj
aGVyOyB9Citwcml2YXRlOgorICAgIEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIq
IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciB7IG51bGxwdHIgfTsKKyNlbmRpZiAvLyBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK3ByaXZhdGU6CisgICAgRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYsIERhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyKik7CisgICAgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdl
bnQgeyBudWxscHRyIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQg
RmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFj
a2VuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNv
bW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRl
IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisK
KyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyNpbmNsdWRlICJU
ZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCisjZW5kaWYgLy8gRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6fkRhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyKCkgeyB9CisKK1JlZjxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNw
YXRjaGVyLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCit7CisgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlz
cGF0Y2hlciwgYWdlbnQpKTsKK30KKworRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6RGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIs
IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKKyAgICA6IFN1cHBsZW1l
bnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQorICAgICwgbV9hZ2VudChh
Z2VudCkKK3sKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JE
b21haW4oIkRhdGFiYXNlIl9zLCB0aGlzKTsKK30KKwordm9pZCBEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJl
ZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKK3sKKyAgICBSZWY8RGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CisKKyAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJh
bWV0ZXJzOworICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsK
KworICAgIGlmIChtZXRob2QgPT0gImV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMi
KSB7CisgICAgICAgIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMocmVxdWVzdElk
LCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAo
bWV0aG9kID09ICJleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyIpIHsKKyAgICAg
ICAgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMocmVxdWVzdElkLCBXVEZNb3Zl
KHBhcmFtZXRlcnMpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAobWV0aG9kID09
ICJleGVjdXRlU1FMU3luYyIpIHsKKyAgICAgICAgZXhlY3V0ZVNRTFN5bmMocmVxdWVzdElkLCBX
VEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAobWV0
aG9kID09ICJleGVjdXRlU1FMQXN5bmMiKSB7CisgICAgICAgIGV4ZWN1dGVTUUxBc3luYyhyZXF1
ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0
Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRGF0YWJhc2UuIiArIG1ldGhvZCArICInIHdhcyBub3Qg
Zm91bmQiKTsKK30KKwordm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FM
U3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmIHBhcmFtZXRlcnMpCit7CisgICAgaW50IGluX2RhdGFiYXNlSWQgPSBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5nZXRJbnRlZ2VyKHBhcmFtZXRlcnMuZ2V0KCksICJkYXRhYmFzZUlkIl9zLCBu
dWxscHRyKTsKKyAgICBTdHJpbmcgaW5fcXVlcnkgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRT
dHJpbmcocGFyYW1ldGVycy5nZXQoKSwgInF1ZXJ5Il9zLCBudWxscHRyKTsKKyAgICBpZiAobV9i
YWNrZW5kRGlzcGF0Y2hlci0+aGFzUHJvdG9jb2xFcnJvcnMoKSkgeworICAgICAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZh
bGlkUGFyYW1zLCAiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICdEYXRhYmFzZS5leGVjdXRlU1FM
U3luY09wdGlvbmFsUmV0dXJuVmFsdWVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiX3MpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCisgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeworICAgICAgICBtX2FsdGVy
bmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMocmVxdWVz
dElkLCBpbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisj
ZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyAgICBF
cnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IG91dF9j
b2x1bW5OYW1lczsKKyAgICBPcHRpb25hbDxTdHJpbmc+IG91dF9ub3RlczsKKyAgICBPcHRpb25h
bDxkb3VibGU+IG91dF90aW1lc3RhbXA7CisgICAgT3B0aW9uYWw8SlNPTjo6T2JqZWN0PiBvdXRf
dmFsdWVzOworICAgIE9wdGlvbmFsPEpTT046OlZhbHVlPiBvdXRfcGF5bG9hZDsKKyAgICBPcHRp
b25hbDxpbnQ+IG91dF9kYXRhYmFzZUlkOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpEYXRhYmFzZTo6RXJyb3I+IG91dF9zcWxFcnJvcjsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyBvdXRfc2NyZWVuQ29sb3I7CisgICAgUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IG91dF9hbHRlcm5hdGVDb2xv
cnM7CisgICAgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3Igb3V0
X3ByaW50Q29sb3I7CisgICAgbV9hZ2VudC0+ZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZh
bHVlcyhlcnJvciwgaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnksIG91dF9jb2x1bW5OYW1lcywgb3V0
X25vdGVzLCBvdXRfdGltZXN0YW1wLCBvdXRfdmFsdWVzLCBvdXRfcGF5bG9hZCwgb3V0X2RhdGFi
YXNlSWQsIG91dF9zcWxFcnJvciwgb3V0X3NjcmVlbkNvbG9yLCBvdXRfYWx0ZXJuYXRlQ29sb3Jz
LCBvdXRfcHJpbnRDb2xvcik7CisKKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7CisgICAgICAg
IGlmIChvdXRfY29sdW1uTmFtZXMpCisgICAgICAgICAgICByZXN1bHQtPnNldEFycmF5KCJjb2x1
bW5OYW1lcyJfcywgb3V0X2NvbHVtbk5hbWVzKTsKKyAgICAgICAgaWYgKG91dF9ub3Rlcy5oYXNW
YWx1ZSgpKQorICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCAqb3V0X25v
dGVzKTsKKyAgICAgICAgaWYgKG91dF90aW1lc3RhbXAuaGFzVmFsdWUoKSkKKyAgICAgICAgICAg
IHJlc3VsdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICpvdXRfdGltZXN0YW1wKTsKKyAgICAg
ICAgaWYgKG91dF92YWx1ZXMuaGFzVmFsdWUoKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0T2Jq
ZWN0KCJ2YWx1ZXMiX3MsICpvdXRfdmFsdWVzKTsKKyAgICAgICAgaWYgKG91dF9wYXlsb2FkLmhh
c1ZhbHVlKCkpCisgICAgICAgICAgICByZXN1bHQtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCAqb3V0
X3BheWxvYWQpOworICAgICAgICBpZiAob3V0X2RhdGFiYXNlSWQuaGFzVmFsdWUoKSkKKyAgICAg
ICAgICAgIHJlc3VsdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgKm91dF9kYXRhYmFzZUlk
KTsKKyAgICAgICAgaWYgKG91dF9zcWxFcnJvcikKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0T2Jq
ZWN0KCJzcWxFcnJvciJfcywgb3V0X3NxbEVycm9yKTsKKyAgICAgICAgaWYgKG91dF9zY3JlZW5D
b2xvci5oYXNWYWx1ZSgpKQorICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInNjcmVlbkNv
bG9yIl9zLCAqb3V0X3NjcmVlbkNvbG9yKTsKKyAgICAgICAgaWYgKG91dF9hbHRlcm5hdGVDb2xv
cnMpCisgICAgICAgICAgICByZXN1bHQtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIG91
dF9hbHRlcm5hdGVDb2xvcnMpOworICAgICAgICBpZiAob3V0X3ByaW50Q29sb3IuaGFzVmFsdWUo
KSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCAqb3V0X3By
aW50Q29sb3IpOworICAgIH0KKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQorICAgICAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCks
IGZhbHNlKTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFBy
b3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9y
KSk7Cit9CisKK0RhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5
bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJl
dHVyblZhbHVlc0NhbGxiYWNrKFJlZjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBiYWNrZW5kRGlzcGF0
Y2hlciwgaW50IGlkKSA6IEJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UoV1RGTW92ZShi
YWNrZW5kRGlzcGF0Y2hlciksIGlkKSB7IH0KKwordm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjazo6
c2VuZFN1Y2Nlc3MoUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mJiBjb2x1bW5OYW1lcywg
T3B0aW9uYWw8U3RyaW5nPiYgbm90ZXMsIE9wdGlvbmFsPGRvdWJsZT4mIHRpbWVzdGFtcCwgT3B0
aW9uYWw8SlNPTjo6T2JqZWN0PiYgdmFsdWVzLCBPcHRpb25hbDxKU09OOjpWYWx1ZT4mIHBheWxv
YWQsIE9wdGlvbmFsPGludD4mIGRhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpEYXRhYmFzZTo6RXJyb3I+JiYgc3FsRXJyb3IsIE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiBzY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiYgYWx0ZXJuYXRlQ29sb3JzLCBPcHRp
b25hbDxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvcj4gcHJpbnRD
b2xvcikKK3sKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVj
dDo6Y3JlYXRlKCk7CisgICAgaWYgKGNvbHVtbk5hbWVzKQorICAgICAgICBqc29uTWVzc2FnZS0+
c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBjb2x1bW5OYW1lcyk7CisgICAgaWYgKG5vdGVzLmhh
c1ZhbHVlKCkpCisgICAgICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm5vdGVzIl9zLCAqbm90
ZXMpOworICAgIGlmICh0aW1lc3RhbXAuaGFzVmFsdWUoKSkKKyAgICAgICAganNvbk1lc3NhZ2Ut
PnNldERvdWJsZSgidGltZXN0YW1wIl9zLCAqdGltZXN0YW1wKTsKKyAgICBpZiAodmFsdWVzLmhh
c1ZhbHVlKCkpCisgICAgICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoInZhbHVlcyJfcywgKnZh
bHVlcyk7CisgICAgaWYgKHBheWxvYWQuaGFzVmFsdWUoKSkKKyAgICAgICAganNvbk1lc3NhZ2Ut
PnNldFZhbHVlKCJwYXlsb2FkIl9zLCAqcGF5bG9hZCk7CisgICAgaWYgKGRhdGFiYXNlSWQuaGFz
VmFsdWUoKSkKKyAgICAgICAganNvbk1lc3NhZ2UtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3Ms
ICpkYXRhYmFzZUlkKTsKKyAgICBpZiAoc3FsRXJyb3IpCisgICAgICAgIGpzb25NZXNzYWdlLT5z
ZXRPYmplY3QoInNxbEVycm9yIl9zLCBzcWxFcnJvcik7CisgICAgaWYgKHNjcmVlbkNvbG9yLmhh
c1ZhbHVlKCkpCisgICAgICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9z
LCAqc2NyZWVuQ29sb3IpOworICAgIGlmIChhbHRlcm5hdGVDb2xvcnMpCisgICAgICAgIGpzb25N
ZXNzYWdlLT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCBhbHRlcm5hdGVDb2xvcnMpOwor
ICAgIGlmIChwcmludENvbG9yLmhhc1ZhbHVlKCkpCisgICAgICAgIGpzb25NZXNzYWdlLT5zZXRT
dHJpbmcoInByaW50Q29sb3IiX3MsICpwcmludENvbG9yKTsKKyAgICBDYWxsYmFja0Jhc2U6OnNl
bmRTdWNjZXNzKFdURk1vdmUoanNvbk1lc3NhZ2UpKTsKK30KKwordm9pZCBEYXRhYmFzZUJhY2tl
bmREaXNwYXRjaGVyOjpleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHJl
cXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKQoreworICAgIGludCBp
bl9kYXRhYmFzZUlkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0SW50ZWdlcihwYXJhbWV0ZXJz
LmdldCgpLCAiZGF0YWJhc2VJZCJfcywgbnVsbHB0cik7CisgICAgU3RyaW5nIGluX3F1ZXJ5ID0g
bV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksICJxdWVyeSJf
cywgbnVsbHB0cik7CisgICAgaWYgKG1fYmFja2VuZERpc3BhdGNoZXItPmhhc1Byb3RvY29sRXJy
b3JzKCkpIHsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJv
cihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgIlNvbWUgYXJndW1lbnRzIG9mIG1l
dGhvZCAnRGF0YWJhc2UuZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMnIGNhbid0
IGJlIHByb2Nlc3NlZCJfcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNpZiBFTkFCTEUo
SU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyAgICBpZiAobV9hbHRlcm5hdGVEaXNw
YXRjaGVyKSB7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZVNRTEFzeW5j
T3B0aW9uYWxSZXR1cm5WYWx1ZXMocmVxdWVzdElkLCBpbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCisKKyAgICBSZWY8RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXI6OkV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2s+IGNhbGxi
YWNrID0gYWRvcHRSZWYoKm5ldyBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhl
Y3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjayhtX2JhY2tlbmREaXNwYXRj
aGVyLmNvcHlSZWYoKSwgcmVxdWVzdElkKSk7CisgICAgbV9hZ2VudC0+ZXhlY3V0ZVNRTEFzeW5j
T3B0aW9uYWxSZXR1cm5WYWx1ZXMoaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnksIGNhbGxiYWNrLmNv
cHlSZWYoKSk7CisKK30KKwordm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRl
U1FMU3luYyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJz
KQoreworICAgIGludCBpbl9kYXRhYmFzZUlkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0SW50
ZWdlcihwYXJhbWV0ZXJzLmdldCgpLCAiZGF0YWJhc2VJZCJfcywgbnVsbHB0cik7CisgICAgU3Ry
aW5nIGluX3F1ZXJ5ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMu
Z2V0KCksICJxdWVyeSJfcywgbnVsbHB0cik7CisgICAgaWYgKG1fYmFja2VuZERpc3BhdGNoZXIt
Pmhhc1Byb3RvY29sRXJyb3JzKCkpIHsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVw
b3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgIlNvbWUg
YXJndW1lbnRzIG9mIG1ldGhvZCAnRGF0YWJhc2UuZXhlY3V0ZVNRTFN5bmMnIGNhbid0IGJlIHBy
b2Nlc3NlZCJfcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNpZiBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVy
KSB7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZVNRTFN5bmMocmVxdWVz
dElkLCBpbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisj
ZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyAgICBF
cnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IG91dF9j
b2x1bW5OYW1lczsKKyAgICBTdHJpbmcgb3V0X25vdGVzOworICAgIGRvdWJsZSBvdXRfdGltZXN0
YW1wOworICAgIEpTT046Ok9iamVjdCBvdXRfdmFsdWVzOworICAgIEpTT046OlZhbHVlIG91dF9w
YXlsb2FkOworICAgIGludCBvdXRfZGF0YWJhc2VJZDsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBvdXRfc3FsRXJyb3I7CisgICAgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IG91dF9hbHRlcm5hdGVDb2xvcnM7
CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgb3V0X3Nj
cmVlbkNvbG9yOworICAgIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENv
bG9yIG91dF9wcmludENvbG9yOworICAgIG1fYWdlbnQtPmV4ZWN1dGVTUUxTeW5jKGVycm9yLCBp
bl9kYXRhYmFzZUlkLCBpbl9xdWVyeSwgb3V0X2NvbHVtbk5hbWVzLCAmb3V0X25vdGVzLCAmb3V0
X3RpbWVzdGFtcCwgb3V0X3ZhbHVlcywgJm91dF9wYXlsb2FkLCAmb3V0X2RhdGFiYXNlSWQsIG91
dF9zcWxFcnJvciwgb3V0X2FsdGVybmF0ZUNvbG9ycywgJm91dF9zY3JlZW5Db2xvciwgJm91dF9w
cmludENvbG9yKTsKKworICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIHsKKyAgICAgICAgcmVzdWx0
LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIG91dF9jb2x1bW5OYW1lcyk7CisgICAgICAgIHJl
c3VsdC0+c2V0U3RyaW5nKCJub3RlcyJfcywgb3V0X25vdGVzKTsKKyAgICAgICAgcmVzdWx0LT5z
ZXREb3VibGUoInRpbWVzdGFtcCJfcywgb3V0X3RpbWVzdGFtcCk7CisgICAgICAgIHJlc3VsdC0+
c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIG91dF92YWx1ZXMpOworICAgICAgICByZXN1bHQtPnNldFZh
bHVlKCJwYXlsb2FkIl9zLCBvdXRfcGF5bG9hZCk7CisgICAgICAgIHJlc3VsdC0+c2V0SW50ZWdl
cigiZGF0YWJhc2VJZCJfcywgb3V0X2RhdGFiYXNlSWQpOworICAgICAgICByZXN1bHQtPnNldE9i
amVjdCgic3FsRXJyb3IiX3MsIG91dF9zcWxFcnJvcik7CisgICAgICAgIHJlc3VsdC0+c2V0QXJy
YXkoImFsdGVybmF0ZUNvbG9ycyJfcywgb3V0X2FsdGVybmF0ZUNvbG9ycyk7CisgICAgICAgIHJl
c3VsdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVz
dEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKG91dF9zY3JlZW5Db2xvcikpOworICAgICAg
ICByZXN1bHQtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6
VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKG91dF9wcmludENvbG9yKSk7CisgICAg
fQorICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOworICAgIGVs
c2UKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNr
ZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKK30KKworRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrOjpFeGVj
dXRlU1FMQXN5bmNDYWxsYmFjayhSZWY8QmFja2VuZERpc3BhdGNoZXI+JiYgYmFja2VuZERpc3Bh
dGNoZXIsIGludCBpZCkgOiBCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlKFdURk1vdmUo
YmFja2VuZERpc3BhdGNoZXIpLCBpZCkgeyB9CisKK3ZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrOjpzZW5kU3VjY2VzcyhSZWZQdHI8
SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYmIGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG5vdGVz
LCBkb3VibGUgdGltZXN0YW1wLCBKU09OOjpPYmplY3QgdmFsdWVzLCBKU09OOjpWYWx1ZSBwYXls
b2FkLCBpbnQgZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNl
OjpFcnJvcj4mJiBzcWxFcnJvciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1h
cnlDb2xvcnMgc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFz
ZTo6Q29sb3JMaXN0PiYmIGFsdGVybmF0ZUNvbG9ycywgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXI6OlByaW50Q29sb3IgcHJpbnRDb2xvcikKK3sKKyAgICBSZWY8SlNPTjo6T2JqZWN0
PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAganNvbk1lc3NhZ2Ut
PnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgY29sdW1uTmFtZXMpOworICAgIGpzb25NZXNzYWdl
LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBub3Rlcyk7CisgICAganNvbk1lc3NhZ2UtPnNldERvdWJs
ZSgidGltZXN0YW1wIl9zLCB0aW1lc3RhbXApOworICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3Qo
InZhbHVlcyJfcywgdmFsdWVzKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0VmFsdWUoInBheWxvYWQi
X3MsIHBheWxvYWQpOworICAgIGpzb25NZXNzYWdlLT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9z
LCBkYXRhYmFzZUlkKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywg
c3FsRXJyb3IpOworICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoc2Ny
ZWVuQ29sb3IpKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJf
cywgYWx0ZXJuYXRlQ29sb3JzKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJwcmludENv
bG9yIl9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50
VmFsdWUocHJpbnRDb2xvcikpOworICAgIENhbGxiYWNrQmFzZTo6c2VuZFN1Y2Nlc3MoV1RGTW92
ZShqc29uTWVzc2FnZSkpOworfQorCit2b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4
ZWN1dGVTUUxBc3luYyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJh
bWV0ZXJzKQoreworICAgIGludCBpbl9kYXRhYmFzZUlkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+
Z2V0SW50ZWdlcihwYXJhbWV0ZXJzLmdldCgpLCAiZGF0YWJhc2VJZCJfcywgbnVsbHB0cik7Cisg
ICAgU3RyaW5nIGluX3F1ZXJ5ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFt
ZXRlcnMuZ2V0KCksICJxdWVyeSJfcywgbnVsbHB0cik7CisgICAgaWYgKG1fYmFja2VuZERpc3Bh
dGNoZXItPmhhc1Byb3RvY29sRXJyb3JzKCkpIHsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywg
IlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnRGF0YWJhc2UuZXhlY3V0ZVNRTEFzeW5jJyBjYW4n
dCBiZSBwcm9jZXNzZWQiX3MpOworICAgICAgICByZXR1cm47CisgICAgfQorCisjaWYgRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisgICAgaWYgKG1fYWx0ZXJuYXRlRGlz
cGF0Y2hlcikgeworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVTUUxBc3lu
YyhyZXF1ZXN0SWQsIGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5KTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
KworICAgIFJlZjxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFz
eW5jQ2FsbGJhY2s+IGNhbGxiYWNrID0gYWRvcHRSZWYoKm5ldyBEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2sobV9iYWNrZW5kRGlzcGF0Y2hl
ci5jb3B5UmVmKCksIHJlcXVlc3RJZCkpOworICAgIG1fYWdlbnQtPmV4ZWN1dGVTUUxBc3luYyhp
bl9kYXRhYmFzZUlkLCBpbl9xdWVyeSwgY2FsbGJhY2suY29weVJlZigpKTsKKworfQorCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNo
ZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmli
dXRlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8
d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEZyb250ZW5kUm91dGVyOworCit9IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAor
CisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMu
Y3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgor
I2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisK
KworbmFtZXNwYWNlIFByb3RvY29sIHsKKworCisKKy8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgor
bmFtZXNwYWNlIERhdGFiYXNlIHsKK2NsYXNzIEVycm9yOworZW51bSBjbGFzcyBQcmltYXJ5Q29s
b3JzOworfSAvLyBEYXRhYmFzZQorLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgorCisK
Ky8vIFR5cGVkZWZzLgorbmFtZXNwYWNlIERhdGFiYXNlIHsKKy8qIFVuaXF1ZSBpZGVudGlmaWVy
IG9mIERhdGFiYXNlIG9iamVjdC4gKi8KK3R5cGVkZWYgaW50IERhdGFiYXNlSWQ7Cit0eXBlZGVm
IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xv
cnM+IENvbG9yTGlzdDsKK30gLy8gRGF0YWJhc2UKKy8vIEVuZCBvZiB0eXBlZGVmcy4KKworbmFt
ZXNwYWNlIFRlc3RIZWxwZXJzIHsKKworU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBj
b2RlKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVl
KFQgZW51bVZhbHVlKQoreworICAgIHJldHVybiBnZXRFbnVtQ29uc3RhbnRWYWx1ZShzdGF0aWNf
Y2FzdDxpbnQ+KGVudW1WYWx1ZSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwor
CituYW1lc3BhY2UgRGF0YWJhc2UgeworLyogICovCitlbnVtIGNsYXNzIFByaW1hcnlDb2xvcnMg
eworICAgIFJlZCA9IDAsCisgICAgR3JlZW4gPSAxLAorICAgIEJsdWUgPSAyLAorfTsgLy8gZW51
bSBjbGFzcyBQcmltYXJ5Q29sb3JzCisvKiBEYXRhYmFzZSBlcnJvci4gKi8KK2NsYXNzIEVycm9y
IDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgeworcHVibGljOgorICAgIGVudW0geworICAgICAg
ICBOb0ZpZWxkc1NldCA9IDAsCisgICAgICAgIE1lc3NhZ2VTZXQgPSAxIDw8IDAsCisgICAgICAg
IENvZGVTZXQgPSAxIDw8IDEsCisgICAgICAgIEFsbEZpZWxkc1NldCA9IChNZXNzYWdlU2V0IHwg
Q29kZVNldCkKKyAgICB9OworCisgICAgdGVtcGxhdGU8aW50IFNUQVRFPgorICAgIGNsYXNzIEJ1
aWxkZXIgeworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVz
dWx0OworCisgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4m
IGNhc3RTdGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRf
Y2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAg
IEJ1aWxkZXIoUmVmPC8qRXJyb3IqL0pTT046Ok9iamVjdD4mJiBvYmplY3QpCisgICAgICAgICAg
ICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25f
aW5pdF9zdGF0ZSk7CisgICAgICAgIH0KKyAgICAgICAgZnJpZW5kIGNsYXNzIEVycm9yOworICAg
IHB1YmxpYzoKKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTWVzc2FnZVNldD4mIHNldE1lc3Nh
Z2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoIShTVEFURSAmIE1lc3NhZ2VTZXQpLCBwcm9wZXJ0eV9tZXNzYWdlX2FscmVhZHlfc2V0
KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1lc3NhZ2UiX3MsIHZhbHVlKTsK
KyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TWVzc2FnZVNldD4oKTsKKyAgICAgICAgfQor
CisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2RlU2V0PiYgc2V0Q29kZShpbnQgdmFsdWUpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2RlU2V0KSwg
cHJvcGVydHlfY29kZV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50
ZWdlcigiY29kZSJfcywgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb2Rl
U2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgUmVmPEVycm9yPiByZWxlYXNlKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCBy
ZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihF
cnJvcikgPT0gc2l6ZW9mKEpTT046Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsKKworICAgICAgICAg
ICAgUmVmPEpTT046Ok9iamVjdD4ganNvblJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxs
KCk7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8
UmVmPEVycm9yPio+KCZqc29uUmVzdWx0KSk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgICAgICB9CisgICAgfTsKKworICAgIC8qCisgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9y
OgorICAgICAqIFJlZjxFcnJvcj4gcmVzdWx0ID0gRXJyb3I6OmNyZWF0ZSgpCisgICAgICogICAg
IC5zZXRNZXNzYWdlKC4uLikKKyAgICAgKiAgICAgLnNldENvZGUoLi4uKQorICAgICAqICAgICAu
cmVsZWFzZSgpOworICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVh
dGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9i
amVjdDo6Y3JlYXRlKCkpOworICAgIH0KK307CisKK30gLy8gRGF0YWJhc2UKKworCisKK25hbWVz
cGFjZSBUZXN0SGVscGVycyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFByb3RvY29sRW51bVR5cGU+
CitPcHRpb25hbDxQcm90b2NvbEVudW1UeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmcoY29u
c3QgU3RyaW5nJik7CisKKy8vIEVudW1zIGluIHRoZSAnRGF0YWJhc2UnIERvbWFpbgordGVtcGxh
dGU8PgorT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xv
cnM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFz
ZTo6UHJpbWFyeUNvbG9ycz4oY29uc3QgU3RyaW5nJik7CisKK30gLy8gbmFtZXNwYWNlIFRlc3RI
ZWxwZXJzCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERl
ZmF1bHRIYXNoOworCisvLyBIYXNoIGRlY2xhcmF0aW9ucyBpbiB0aGUgJ0RhdGFiYXNlJyBEb21h
aW4KK3RlbXBsYXRlPD4KK3N0cnVjdCBEZWZhdWx0SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpE
YXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4geworICAgIHR5cGVkZWYgSW50SGFzaDxJbnNwZWN0b3I6
OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gSGFzaDsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdURgorIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorCisjaW5jbHVkZSA8d3RmL09wdGlvbmFs
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9y
IHsKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKKwor
c3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFsdWVzW10gPSB7CisgICAg
InJlZCIsCisgICAgImdyZWVuIiwKKyAgICAiYmx1ZSIsCisgICAgImN5YW4iLAorICAgICJtYWdl
bnRhIiwKKyAgICAieWVsbG93IiwKKyAgICAiYmxhY2siLAorfTsKKworU3RyaW5nIGdldEVudW1D
b25zdGFudFZhbHVlKGludCBjb2RlKSB7CisgICAgcmV0dXJuIGVudW1fY29uc3RhbnRfdmFsdWVz
W2NvZGVdOworfQorCisvLyBFbnVtcyBpbiB0aGUgJ0RhdGFiYXNlJyBEb21haW4KK3RlbXBsYXRl
PD4KK09wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3Jz
PiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6
OlByaW1hcnlDb2xvcnM+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCit7CisgICAgc3Rh
dGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0geworICAgICAgICAoc2l6ZV90KUlu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzOjpSZWQsCisgICAgICAg
IChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM6Okdy
ZWVuLAorICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmlt
YXJ5Q29sb3JzOjpCbHVlLAorICAgIH07CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAzOyAr
K2kpCisgICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tj
b25zdGFudFZhbHVlc1tpXV0pCisgICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzKWNvbnN0YW50VmFsdWVzW2ldOworCisgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKK30KKworCit9IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycworCisK
KworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisK
KyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8d3Rm
L1JldGFpblB0ci5oPgorCitAcHJvdG9jb2wgVGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5k
bGVyOworCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCitjbGFzcyBPYmpDSW5zcGVjdG9yRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVyIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoK
KyAgICBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9j
b2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7
IH0KKyAgICB2b2lkIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyByZXF1
ZXN0SWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KSBmaW5hbDsK
KyAgICB2b2lkIGV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVz
dElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkgZmluYWw7Cisg
ICAgdm9pZCBleGVjdXRlU1FMU3luYyhsb25nIHJlcXVlc3RJZCwgaW50IGluX2RhdGFiYXNlSWQs
IGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpIGZpbmFsOworICAgIHZvaWQgZXhlY3V0ZVNRTEFzeW5j
KGxvbmcgcmVxdWVzdElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVy
eSkgZmluYWw7Citwcml2YXRlOgorICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xEYXRhYmFz
ZURvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKwor
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRl
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9y
dCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIK
KworI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW5jbHVkZSAiVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKK3ZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0
SWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KQoreworICAgIGlm
ICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihleGVjdXRlU1FMU3lu
Y09wdGlvbmFsUmV0dXJuVmFsdWVzV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOmRh
dGFiYXNlSWQ6cXVlcnk6KV0pIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0
UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3Vu
ZCwgIidEYXRhYmFzZS5leGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzJyB3YXMgbm90
IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJv
cnMoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBe
KE5TU3RyaW5nICplcnJvcikgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQ
cm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBl
cnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7
CisgICAgfTsKKworICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5n
PiovICoqY29sdW1uTmFtZXMsIE5TU3RyaW5nICoqbm90ZXMsIGRvdWJsZSAqdGltZXN0YW1wLCBS
V0lQcm90b2NvbEpTT05PYmplY3QgKip2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnBh
eWxvYWQsIGludCAqZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKnNxbEVy
cm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgKnNjcmVlbkNvbG9yLCBOU0Fy
cmF5Lyo8TlNTdHJpbmc+Ki8gKiphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNl
RXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3IgKnByaW50Q29sb3Ip
IHsKKyAgICAgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFS
QU1FVEVSKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7CisgICAgICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihub3RlcywgQCJub3RlcyIpOworICAgICAg
ICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIodmFsdWVzLCBAInZh
bHVlcyIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVU
RVIocGF5bG9hZCwgQCJwYXlsb2FkIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFE
X09QVElPTkFMX1BBUkFNRVRFUihzcWxFcnJvciwgQCJzcWxFcnJvciIpOworICAgICAgICBUSFJP
V19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoYWx0ZXJuYXRlQ29sb3JzLCBA
ImFsdGVybmF0ZUNvbG9ycyIpOworICAgICAgICBpZiAoY29sdW1uTmFtZXMpCisgICAgICAgICAg
ICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgdG9KU09OU3RyaW5nQXJy
YXkoKmNvbHVtbk5hbWVzKSk7CisgICAgICAgIGlmIChub3RlcykKKyAgICAgICAgICAgIHJlc3Vs
dE9iamVjdC0+c2V0U3RyaW5nKCJub3RlcyJfcywgKm5vdGVzKTsKKyAgICAgICAgaWYgKHRpbWVz
dGFtcCkKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3Ms
ICp0aW1lc3RhbXApOworICAgICAgICBpZiAodmFsdWVzKQorICAgICAgICAgICAgcmVzdWx0T2Jq
ZWN0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgWyp2YWx1ZXMgdG9KU09OT2JqZWN0XSk7CisgICAg
ICAgIGlmIChwYXlsb2FkKQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRWYWx1ZSgicGF5
bG9hZCJfcywgWypwYXlsb2FkIHRvSlNPTk9iamVjdF0pOworICAgICAgICBpZiAoZGF0YWJhc2VJ
ZCkKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywg
KmRhdGFiYXNlSWQpOworICAgICAgICBpZiAoc3FsRXJyb3IpCisgICAgICAgICAgICByZXN1bHRP
YmplY3QtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIFsqc3FsRXJyb3IgdG9KU09OT2JqZWN0XSk7
CisgICAgICAgIGlmIChzY3JlZW5Db2xvcikKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0
U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgdG9Qcm90b2NvbFN0cmluZygqc2NyZWVuQ29sb3IpKTsK
KyAgICAgICAgaWYgKGFsdGVybmF0ZUNvbG9ycykKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+
c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5nQXJyYXkoKmFsdGVybmF0
ZUNvbG9ycykpOworICAgICAgICBpZiAocHJpbnRDb2xvcikKKyAgICAgICAgICAgIHJlc3VsdE9i
amVjdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKCpwcmludENv
bG9yKSk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0
SWQsIFdURk1vdmUocmVzdWx0T2JqZWN0KSwgZmFsc2UpOworICAgIH07CisKKyAgICBpbnQgb19p
bl9kYXRhYmFzZUlkID0gaW5fZGF0YWJhc2VJZDsKKyAgICBOU1N0cmluZyAqb19pbl9xdWVyeSA9
IGluX3F1ZXJ5OworCisgICAgW21fZGVsZWdhdGUgZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVy
blZhbHVlc1dpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1
Y2Nlc3NDYWxsYmFjayBkYXRhYmFzZUlkOm9faW5fZGF0YWJhc2VJZCBxdWVyeTpvX2luX3F1ZXJ5
XTsKK30KKwordm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhl
Y3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0SWQsIGludCBpbl9k
YXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KQoreworICAgIGlmICghW21fZGVsZWdh
dGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJl
dHVyblZhbHVlc1dpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazpkYXRhYmFzZUlkOnF1
ZXJ5OildKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJy
b3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRGF0YWJh
c2UuZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMnIHdhcyBub3QgZm91bmQiX3Mp
OworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcg
KmVycm9yKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJy
b3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICB9Owor
CisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKipjb2x1
bW5OYW1lcywgTlNTdHJpbmcgKipub3RlcywgZG91YmxlICp0aW1lc3RhbXAsIFJXSVByb3RvY29s
SlNPTk9iamVjdCAqKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqcGF5bG9hZCwgaW50
ICpkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqc3FsRXJyb3IsIFRlc3RQ
cm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0
cmluZz4qLyAqKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FM
QXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3IgKnByaW50Q29sb3IpIHsKKyAgICAg
ICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKGNv
bHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
QkFEX09QVElPTkFMX1BBUkFNRVRFUihub3RlcywgQCJub3RlcyIpOworICAgICAgICBUSFJPV19F
WENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIodmFsdWVzLCBAInZhbHVlcyIpOwor
ICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIocGF5bG9h
ZCwgQCJwYXlsb2FkIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFM
X1BBUkFNRVRFUihzcWxFcnJvciwgQCJzcWxFcnJvciIpOworICAgICAgICBUSFJPV19FWENFUFRJ
T05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoYWx0ZXJuYXRlQ29sb3JzLCBAImFsdGVybmF0
ZUNvbG9ycyIpOworICAgICAgICBpZiAoY29sdW1uTmFtZXMpCisgICAgICAgICAgICByZXN1bHRP
YmplY3QtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgdG9KU09OU3RyaW5nQXJyYXkoKmNvbHVt
bk5hbWVzKSk7CisgICAgICAgIGlmIChub3RlcykKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+
c2V0U3RyaW5nKCJub3RlcyJfcywgKm5vdGVzKTsKKyAgICAgICAgaWYgKHRpbWVzdGFtcCkKKyAg
ICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICp0aW1lc3Rh
bXApOworICAgICAgICBpZiAodmFsdWVzKQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRP
YmplY3QoInZhbHVlcyJfcywgWyp2YWx1ZXMgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIGlmIChw
YXlsb2FkKQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywg
WypwYXlsb2FkIHRvSlNPTk9iamVjdF0pOworICAgICAgICBpZiAoZGF0YWJhc2VJZCkKKyAgICAg
ICAgICAgIHJlc3VsdE9iamVjdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgKmRhdGFiYXNl
SWQpOworICAgICAgICBpZiAoc3FsRXJyb3IpCisgICAgICAgICAgICByZXN1bHRPYmplY3QtPnNl
dE9iamVjdCgic3FsRXJyb3IiX3MsIFsqc3FsRXJyb3IgdG9KU09OT2JqZWN0XSk7CisgICAgICAg
IGlmIChzY3JlZW5Db2xvcikKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJz
Y3JlZW5Db2xvciJfcywgdG9Qcm90b2NvbFN0cmluZygqc2NyZWVuQ29sb3IpKTsKKyAgICAgICAg
aWYgKGFsdGVybmF0ZUNvbG9ycykKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXko
ImFsdGVybmF0ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5nQXJyYXkoKmFsdGVybmF0ZUNvbG9ycykp
OworICAgICAgICBpZiAocHJpbnRDb2xvcikKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0
U3RyaW5nKCJwcmludENvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKCpwcmludENvbG9yKSk7Cisg
ICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1v
dmUocmVzdWx0T2JqZWN0KSwgZmFsc2UpOworICAgIH07CisKKyAgICBpbnQgb19pbl9kYXRhYmFz
ZUlkID0gaW5fZGF0YWJhc2VJZDsKKyAgICBOU1N0cmluZyAqb19pbl9xdWVyeSA9IGluX3F1ZXJ5
OworCisgICAgW21fZGVsZWdhdGUgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNX
aXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2Fs
bGJhY2sgZGF0YWJhc2VJZDpvX2luX2RhdGFiYXNlSWQgcXVlcnk6b19pbl9xdWVyeV07Cit9CisK
K3ZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxT
eW5jKGxvbmcgcmVxdWVzdElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9x
dWVyeSkKK3sKKyAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0
b3IoZXhlY3V0ZVNRTFN5bmNXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6ZGF0YWJh
c2VJZDpxdWVyeTopXSkgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90
b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAi
J0RhdGFiYXNlLmV4ZWN1dGVTUUxTeW5jJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgeworICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwg
QmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgfTsKKworICAgIGlkIHN1Y2Nl
c3NDYWxsYmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiovICpjb2x1bW5OYW1lcywgTlNTdHJp
bmcgKm5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnZhbHVl
cywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgVGVzdFBy
b3RvY29sRGF0YWJhc2VFcnJvciAqc3FsRXJyb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqYWx0
ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgc2NyZWVuQ29s
b3IsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yIHByaW50Q29s
b3IpIHsKKyAgICAgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJB
TUVURVIoY29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIobm90ZXMsIEAibm90ZXMiKTsKKyAgICAgICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIodmFsdWVzLCBAInZhbHVlcyIpOwor
ICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihwYXlsb2FkLCBA
InBheWxvYWQiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVU
RVIoc3FsRXJyb3IsIEAic3FsRXJyb3IiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9S
RVFVSVJFRF9QQVJBTUVURVIoYWx0ZXJuYXRlQ29sb3JzLCBAImFsdGVybmF0ZUNvbG9ycyIpOwor
ICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgdG9KU09OU3Ry
aW5nQXJyYXkoY29sdW1uTmFtZXMpKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmco
Im5vdGVzIl9zLCBub3Rlcyk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0RG91YmxlKCJ0aW1l
c3RhbXAiX3MsIHRpbWVzdGFtcCk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KCJ2
YWx1ZXMiX3MsIFt2YWx1ZXMgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+
c2V0VmFsdWUoInBheWxvYWQiX3MsIFtwYXlsb2FkIHRvSlNPTk9iamVjdF0pOworICAgICAgICBy
ZXN1bHRPYmplY3QtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsIGRhdGFiYXNlSWQpOworICAg
ICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIFtzcWxFcnJvciB0b0pT
T05PYmplY3RdKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29s
b3JzIl9zLCB0b0pTT05TdHJpbmdBcnJheShhbHRlcm5hdGVDb2xvcnMpKTsKKyAgICAgICAgcmVz
dWx0T2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKHNj
cmVlbkNvbG9yKSk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJwcmludENvbG9y
Il9zLCB0b1Byb3RvY29sU3RyaW5nKHByaW50Q29sb3IpKTsKKyAgICAgICAgYmFja2VuZERpc3Bh
dGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHRPYmplY3QpLCBm
YWxzZSk7CisgICAgfTsKKworICAgIGludCBvX2luX2RhdGFiYXNlSWQgPSBpbl9kYXRhYmFzZUlk
OworICAgIE5TU3RyaW5nICpvX2luX3F1ZXJ5ID0gaW5fcXVlcnk7CisKKyAgICBbbV9kZWxlZ2F0
ZSBleGVjdXRlU1FMU3luY1dpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0Nh
bGxiYWNrOnN1Y2Nlc3NDYWxsYmFjayBkYXRhYmFzZUlkOm9faW5fZGF0YWJhc2VJZCBxdWVyeTpv
X2luX3F1ZXJ5XTsKK30KKwordm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlcjo6ZXhlY3V0ZVNRTEFzeW5jKGxvbmcgcmVxdWVzdElkLCBpbnQgaW5fZGF0YWJhc2VJZCwg
Y29uc3QgU3RyaW5nJiBpbl9xdWVyeSkKK3sKKyAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRz
VG9TZWxlY3RvcjpAc2VsZWN0b3IoZXhlY3V0ZVNRTEFzeW5jV2l0aEVycm9yQ2FsbGJhY2s6c3Vj
Y2Vzc0NhbGxiYWNrOmRhdGFiYXNlSWQ6cXVlcnk6KV0pIHsKKyAgICAgICAgYmFja2VuZERpc3Bh
dGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVy
OjpNZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS5leGVjdXRlU1FMQXN5bmMnIHdhcyBub3QgZm91
bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNT
dHJpbmcgKmVycm9yKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3Rv
Y29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9y
KTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAg
ICB9OworCisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8g
KmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJXSVByb3Rv
Y29sSlNPTk9iamVjdCAqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnBheWxvYWQsIGlu
dCBkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpzcWxFcnJvciwgVGVzdFBy
b3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzIHNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJp
bmc+Ki8gKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5
bmNQcmludENvbG9yIHByaW50Q29sb3IpIHsKKyAgICAgICAgUmVmPEpTT046Ok9iamVjdD4gcmVz
dWx0T2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoY29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsK
KyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIobm90ZXMsIEAi
bm90ZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIo
dmFsdWVzLCBAInZhbHVlcyIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVE
X1BBUkFNRVRFUihwYXlsb2FkLCBAInBheWxvYWQiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoc3FsRXJyb3IsIEAic3FsRXJyb3IiKTsKKyAgICAgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoYWx0ZXJuYXRlQ29sb3JzLCBA
ImFsdGVybmF0ZUNvbG9ycyIpOworICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJjb2x1
bW5OYW1lcyJfcywgdG9KU09OU3RyaW5nQXJyYXkoY29sdW1uTmFtZXMpKTsKKyAgICAgICAgcmVz
dWx0T2JqZWN0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBub3Rlcyk7CisgICAgICAgIHJlc3VsdE9i
amVjdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIHRpbWVzdGFtcCk7CisgICAgICAgIHJlc3Vs
dE9iamVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFt2YWx1ZXMgdG9KU09OT2JqZWN0XSk7Cisg
ICAgICAgIHJlc3VsdE9iamVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFtwYXlsb2FkIHRvSlNP
Tk9iamVjdF0pOworICAgICAgICByZXN1bHRPYmplY3QtPnNldEludGVnZXIoImRhdGFiYXNlSWQi
X3MsIGRhdGFiYXNlSWQpOworICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdCgic3FsRXJy
b3IiX3MsIFtzcWxFcnJvciB0b0pTT05PYmplY3RdKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5z
ZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKHNjcmVlbkNvbG9yKSk7
CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgdG9K
U09OU3RyaW5nQXJyYXkoYWx0ZXJuYXRlQ29sb3JzKSk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+
c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKHByaW50Q29sb3IpKTsK
KyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RG
TW92ZShyZXN1bHRPYmplY3QpLCBmYWxzZSk7CisgICAgfTsKKworICAgIGludCBvX2luX2RhdGFi
YXNlSWQgPSBpbl9kYXRhYmFzZUlkOworICAgIE5TU3RyaW5nICpvX2luX3F1ZXJ5ID0gaW5fcXVl
cnk7CisKKyAgICBbbV9kZWxlZ2F0ZSBleGVjdXRlU1FMQXN5bmNXaXRoRXJyb3JDYWxsYmFjazpl
cnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDpv
X2luX2RhdGFiYXNlSWQgcXVlcnk6b19pbl9xdWVyeV07Cit9CisKKworfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJz
Lm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0
ZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBv
cnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KKworX19hdHRyaWJ1dGVfXygodmlzaWJp
bGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24g
OiBOU09iamVjdAorQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNldERhdGFi
YXNlSGFuZGxlcjopIGlkPFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4gZGF0YWJh
c2VIYW5kbGVyOworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJh
dGlvbi5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRy
aWJ1dGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisj
aW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90
b2NvbEludGVybmFsLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMu
aCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+
CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIu
aD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNw
YXRjaGVycy5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXJzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlv
biBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCit7CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JD
b250cm9sbGVyKiBfY29udHJvbGxlcjsKKyAgICBpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFp
bkhhbmRsZXI+IF9kYXRhYmFzZUhhbmRsZXI7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0
aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgor
eworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1
cm4gbmlsOworICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRy
b2xsZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIFtf
ZGF0YWJhc2VIYW5kbGVyIHJlbGVhc2VdOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAo
dm9pZClzZXREYXRhYmFzZUhhbmRsZXI6KGlkPFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFu
ZGxlcj4paGFuZGxlcgoreworICAgIGlmIChoYW5kbGVyID09IF9kYXRhYmFzZUhhbmRsZXIpCisg
ICAgICAgIHJldHVybjsKKworICAgIFtfZGF0YWJhc2VIYW5kbGVyIHJlbGVhc2VdOworICAgIF9k
YXRhYmFzZUhhbmRsZXIgPSBbaGFuZGxlciByZXRhaW5dOworCisgICAgYXV0byBhbHRlcm5hdGVE
aXNwYXRjaGVyID0gbWFrZVVuaXF1ZTxPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlcj4oaGFuZGxlcik7CisgICAgYXV0byBhbHRlcm5hdGVBZ2VudCA9IG1ha2VVbmlxdWU8QWx0
ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciwgQWx0ZXJu
YXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4+KCJEYXRhYmFzZSJfcywgKl9jb250cm9sbGVy
LCBXVEZNb3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIpKTsKKyAgICBfY29udHJvbGxlci0+YXBwZW5k
RXh0cmFBZ2VudChXVEZNb3ZlKGFsdGVybmF0ZUFnZW50KSk7Cit9CisKKy0gKGlkPFRlc3RQcm90
b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4pZGF0YWJhc2VIYW5kbGVyCit7CisgICAgcmV0dXJu
IF9kYXRhYmFzZUhhbmRsZXI7Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbENvbmZpZ3VyYXRpb24ubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50
RGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5k
cy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBv
cnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8d3RmL0pTT05WYWx1
ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisjIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1h
c3luYy1hdHRyaWJ1dGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKworI2ltcG9ydCA8V2Vi
SW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgorCisKK0BjbGFzcyBUZXN0UHJvdG9j
b2xEYXRhYmFzZUVycm9yOworCisKK3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90
b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycykgeworICAgIFRlc3RQcm90b2NvbERhdGFiYXNlUHJp
bWFyeUNvbG9yc1JlZCwKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNHcmVl
biwKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNCbHVlLAorfTsKKwordHlw
ZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3lu
Y09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvcikgeworICAgIFRlc3RQcm90b2NvbERhdGFi
YXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JDeWFuLAorICAg
IFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1By
aW50Q29sb3JNYWdlbnRhLAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNP
cHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JZZWxsb3csCisgICAgVGVzdFByb3RvY29sRGF0
YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvckJsYWNrLAor
fTsKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVj
dXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3IpIHsKKyAgICBUZXN0UHJv
dG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xv
ckN5YW4sCisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJl
dHVyblZhbHVlc1ByaW50Q29sb3JNYWdlbnRhLAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhl
Y3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yWWVsbG93LAorICAgIFRl
c3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmlu
dENvbG9yQmxhY2ssCit9OworCit0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9j
b2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvcikgeworICAgIFRlc3RQcm90b2NvbERh
dGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yQ3lhbiwKKyAgICBUZXN0UHJvdG9jb2xEYXRh
YmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvck1hZ2VudGEsCisgICAgVGVzdFByb3RvY29sRGF0
YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3JZZWxsb3csCisgICAgVGVzdFByb3RvY29sRGF0
YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3JCbGFjaywKK307CisKK3R5cGVkZWYgTlNfRU5V
TShOU0ludGVnZXIsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xv
cikgeworICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvckN5
YW4sCisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yTWFn
ZW50YSwKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JZ
ZWxsb3csCisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9y
QmxhY2ssCit9OworCisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQor
QGludGVyZmFjZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIDogUldJUHJvdG9jb2xKU09OT2Jq
ZWN0CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJp
bmcgKiwgaWQ+ICopcGF5bG9hZDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2Jq
ZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OworLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlIGNvZGU6KGludCljb2RlOworLyog
cmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICptZXNzYWdl
OworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgaW50IGNvZGU7
CitAZW5kCisKK0Bwcm90b2NvbCBUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXIgPE5T
T2JqZWN0PgorQG9wdGlvbmFsCistICh2b2lkKWV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXNXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2Fs
bGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmNv
bHVtbk5hbWVzLCBOU1N0cmluZyAqKm5vdGVzLCBkb3VibGUgKnRpbWVzdGFtcCwgUldJUHJvdG9j
b2xKU09OT2JqZWN0ICoqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipwYXlsb2FkLCBp
bnQgKmRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipzcWxFcnJvciwgVGVz
dFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzICpzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5T
U3RyaW5nPiovICoqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVT
UUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yICpwcmludENvbG9yKSlzdWNjZXNz
Q2FsbGJhY2sgZGF0YWJhc2VJZDooaW50KWRhdGFiYXNlSWQgcXVlcnk6KE5TU3RyaW5nICopcXVl
cnk7CistICh2b2lkKWV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzV2l0aEVycm9y
Q2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3ND
YWxsYmFjazoodm9pZCheKShOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKipjb2x1bW5OYW1lcywgTlNT
dHJpbmcgKipub3RlcywgZG91YmxlICp0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAq
KnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqcGF5bG9hZCwgaW50ICpkYXRhYmFzZUlk
LCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqc3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFi
YXNlUHJpbWFyeUNvbG9ycyAqc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmFs
dGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25h
bFJldHVyblZhbHVlc1ByaW50Q29sb3IgKnByaW50Q29sb3IpKXN1Y2Nlc3NDYWxsYmFjayBkYXRh
YmFzZUlkOihpbnQpZGF0YWJhc2VJZCBxdWVyeTooTlNTdHJpbmcgKilxdWVyeTsKKy0gKHZvaWQp
ZXhlY3V0ZVNRTFN5bmNXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3Ip
KWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0cmlu
Zz4qLyAqY29sdW1uTmFtZXMsIE5TU3RyaW5nICpub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICp2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5bG9h
ZCwgaW50IGRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKnNxbEVycm9yLCBO
U0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJh
c2VQcmltYXJ5Q29sb3JzIHNjcmVlbkNvbG9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVT
UUxTeW5jUHJpbnRDb2xvciBwcmludENvbG9yKSlzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDoo
aW50KWRhdGFiYXNlSWQgcXVlcnk6KE5TU3RyaW5nICopcXVlcnk7CistICh2b2lkKWV4ZWN1dGVT
UUxBc3luY1dpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JD
YWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoTlNBcnJheS8qPE5TU3RyaW5nPiovICpj
b2x1bW5OYW1lcywgTlNTdHJpbmcgKm5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSV0lQcm90b2Nv
bEpTT05PYmplY3QgKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkLCBpbnQg
ZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqc3FsRXJyb3IsIFRlc3RQcm90
b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyBzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5n
PiovICphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5j
UHJpbnRDb2xvciBwcmludENvbG9yKSlzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDooaW50KWRh
dGFiYXNlSWQgcXVlcnk6KE5TU3RyaW5nICopcXVlcnk7CitAZW5kCisKKworCisKKyNpbXBvcnQg
PFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4KKwor
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRz
LXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJv
dG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVu
dGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgor
CisKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9j
b2wuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMu
aD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVt
VHlwZT4KK09wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0
cmluZyYgdmFsdWUpOworCisKK2lubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJv
dG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgdmFsdWUpCit7CisgICAgc3dpdGNoKHZhbHVlKSB7
CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNSZWQ6CisgICAgICAg
IHJldHVybiAicmVkIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29s
b3JzR3JlZW46CisgICAgICAgIHJldHVybiAiZ3JlZW4iX3M7CisgICAgY2FzZSBUZXN0UHJvdG9j
b2xEYXRhYmFzZVByaW1hcnlDb2xvcnNCbHVlOgorICAgICAgICByZXR1cm4gImJsdWUiX3M7Cisg
ICAgfQorfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJh
c2VQcmltYXJ5Q29sb3JzPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkK
K3sKKyAgICBpZiAodmFsdWUgPT0gInJlZCIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xE
YXRhYmFzZVByaW1hcnlDb2xvcnNSZWQ7CisgICAgaWYgKHZhbHVlID09ICJncmVlbiIpCisgICAg
ICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNHcmVlbjsKKyAgICBp
ZiAodmFsdWUgPT0gImJsdWUiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VQ
cmltYXJ5Q29sb3JzQmx1ZTsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCitpbmxpbmUg
U3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3lu
Y09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvciB2YWx1ZSkKK3sKKyAgICBzd2l0Y2godmFs
dWUpIHsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25h
bFJldHVyblZhbHVlc1ByaW50Q29sb3JDeWFuOgorICAgICAgICByZXR1cm4gImN5YW4iX3M7Cisg
ICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXNQcmludENvbG9yTWFnZW50YToKKyAgICAgICAgcmV0dXJuICJtYWdlbnRhIl9zOworICAg
IGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFs
dWVzUHJpbnRDb2xvclllbGxvdzoKKyAgICAgICAgcmV0dXJuICJ5ZWxsb3ciX3M7CisgICAgY2Fz
ZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQ
cmludENvbG9yQmxhY2s6CisgICAgICAgIHJldHVybiAiYmxhY2siX3M7CisgICAgfQorfQorCit0
ZW1wbGF0ZTw+CitpbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FM
U3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvcj4gZnJvbVByb3RvY29sU3RyaW5nKGNv
bnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09ICJjeWFuIikKKyAgICAgICAg
cmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZh
bHVlc1ByaW50Q29sb3JDeWFuOworICAgIGlmICh2YWx1ZSA9PSAibWFnZW50YSIpCisgICAgICAg
IHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXNQcmludENvbG9yTWFnZW50YTsKKyAgICBpZiAodmFsdWUgPT0gInllbGxvdyIpCisgICAg
ICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1
cm5WYWx1ZXNQcmludENvbG9yWWVsbG93OworICAgIGlmICh2YWx1ZSA9PSAiYmxhY2siKQorICAg
ICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0
dXJuVmFsdWVzUHJpbnRDb2xvckJsYWNrOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisK
K2lubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvciB2YWx1ZSkKK3sKKyAgICBz
d2l0Y2godmFsdWUpIHsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFz
eW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yQ3lhbjoKKyAgICAgICAgcmV0dXJuICJj
eWFuIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRp
b25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JNYWdlbnRhOgorICAgICAgICByZXR1cm4gIm1hZ2Vu
dGEiX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlv
bmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvclllbGxvdzoKKyAgICAgICAgcmV0dXJuICJ5ZWxsb3ci
X3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFs
UmV0dXJuVmFsdWVzUHJpbnRDb2xvckJsYWNrOgorICAgICAgICByZXR1cm4gImJsYWNrIl9zOwor
ICAgIH0KK30KKwordGVtcGxhdGU8PgoraW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFi
YXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yPiBmcm9tUHJv
dG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gImN5
YW4iKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNP
cHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JDeWFuOworICAgIGlmICh2YWx1ZSA9PSAibWFn
ZW50YSIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3lu
Y09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvck1hZ2VudGE7CisgICAgaWYgKHZhbHVlID09
ICJ5ZWxsb3ciKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FM
QXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JZZWxsb3c7CisgICAgaWYgKHZhbHVl
ID09ICJibGFjayIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVT
UUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvckJsYWNrOworICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7Cit9CisKK2lubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJv
dG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvciB2YWx1ZSkKK3sKKyAgICBzd2l0
Y2godmFsdWUpIHsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQ
cmludENvbG9yQ3lhbjoKKyAgICAgICAgcmV0dXJuICJjeWFuIl9zOworICAgIGNhc2UgVGVzdFBy
b3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3JNYWdlbnRhOgorICAgICAgICBy
ZXR1cm4gIm1hZ2VudGEiX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVT
UUxTeW5jUHJpbnRDb2xvclllbGxvdzoKKyAgICAgICAgcmV0dXJuICJ5ZWxsb3ciX3M7CisgICAg
Y2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvckJsYWNrOgor
ICAgICAgICByZXR1cm4gImJsYWNrIl9zOworICAgIH0KK30KKwordGVtcGxhdGU8PgoraW5saW5l
IE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yPiBm
cm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUg
PT0gImN5YW4iKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FM
U3luY1ByaW50Q29sb3JDeWFuOworICAgIGlmICh2YWx1ZSA9PSAibWFnZW50YSIpCisgICAgICAg
IHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvck1hZ2Vu
dGE7CisgICAgaWYgKHZhbHVlID09ICJ5ZWxsb3ciKQorICAgICAgICByZXR1cm4gVGVzdFByb3Rv
Y29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3JZZWxsb3c7CisgICAgaWYgKHZhbHVl
ID09ICJibGFjayIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVT
UUxTeW5jUHJpbnRDb2xvckJsYWNrOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK2lu
bGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVT
UUxBc3luY1ByaW50Q29sb3IgdmFsdWUpCit7CisgICAgc3dpdGNoKHZhbHVlKSB7CisgICAgY2Fz
ZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JDeWFuOgorICAg
ICAgICByZXR1cm4gImN5YW4iX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVTUUxBc3luY1ByaW50Q29sb3JNYWdlbnRhOgorICAgICAgICByZXR1cm4gIm1hZ2VudGEiX3M7
CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JZ
ZWxsb3c6CisgICAgICAgIHJldHVybiAieWVsbG93Il9zOworICAgIGNhc2UgVGVzdFByb3RvY29s
RGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yQmxhY2s6CisgICAgICAgIHJldHVybiAi
YmxhY2siX3M7CisgICAgfQorfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgT3B0aW9uYWw8VGVzdFBy
b3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yPiBmcm9tUHJvdG9jb2xTdHJp
bmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gImN5YW4iKQorICAg
ICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9y
Q3lhbjsKKyAgICBpZiAodmFsdWUgPT0gIm1hZ2VudGEiKQorICAgICAgICByZXR1cm4gVGVzdFBy
b3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yTWFnZW50YTsKKyAgICBpZiAo
dmFsdWUgPT0gInllbGxvdyIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JZZWxsb3c7CisgICAgaWYgKHZhbHVlID09ICJibGFjayIp
CisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50
Q29sb3JCbGFjazsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCit9IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMu
aAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1
dGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1w
b3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKworI2ltcG9ydCAiVGVzdFByb3Rv
Y29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCisjaW1wb3J0IDxXZWJJ
bnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorCit1c2luZyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yOworCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAo
RGF0YWJhc2VEb21haW4pCisKKysgKHZvaWQpX3BhcnNlRGF0YWJhc2VJZDooTlNOdW1iZXIgKiop
b3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisrICh2b2lkKV9wYXJzZVByaW1hcnlD
b2xvcnM6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworKyAo
dm9pZClfcGFyc2VDb2xvckxpc3Q6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKilvdXRWYWx1ZSBm
cm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNlRXJyb3I6KFRlc3RQcm90b2Nv
bERhdGFiYXNlRXJyb3IgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisKK0Bl
bmQKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoRGF0YWJh
c2VEb21haW4pCisKKysgKHZvaWQpX3BhcnNlRGF0YWJhc2VJZDooTlNOdW1iZXIgKiopb3V0VmFs
dWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JB
RF9UWVBFKHBheWxvYWQsIFtOU051bWJlciBjbGFzc10pOworICAgICpvdXRWYWx1ZSA9IChOU051
bWJlciAqKXBheWxvYWQ7Cit9CisKKysgKHZvaWQpX3BhcnNlUHJpbWFyeUNvbG9yczooTlNOdW1i
ZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENF
UFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBjbGFzc10pOworICAgIE9wdGlv
bmFsPFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycz4gcmVzdWx0ID0gSW5zcGVjdG9y
Ojpmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzPihw
YXlsb2FkKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9FTlVNX1ZBTFVFKHJlc3VsdCwg
QCJQcmltYXJ5Q29sb3JzIik7CisgICAgKm91dFZhbHVlID0gQChyZXN1bHQudmFsdWUoKSk7Cit9
CisKKysgKHZvaWQpX3BhcnNlQ29sb3JMaXN0OihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopb3V0
VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9S
X0JBRF9UWVBFKHBheWxvYWQsIFtOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gY2xhc3NdKTsKKyAgICAq
b3V0VmFsdWUgPSAoTlNBcnJheS8qPE5TU3RyaW5nPiovICopcGF5bG9hZDsKK30KKworKyAodm9p
ZClfcGFyc2VFcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKilvdXRWYWx1ZSBmcm9t
UGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUo
cGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOworICAgICpvdXRWYWx1ZSA9IFtbVGVzdFBy
b3RvY29sRGF0YWJhc2VFcnJvciBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOworfQor
CitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0K
KworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJv
dG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMu
aCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+
CisjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4K
KwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCitAaW1wbGVtZW50YXRpb24gVGVzdFBy
b3RvY29sRGF0YWJhc2VFcnJvcgorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihu
b25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCit7CisgICAgaWYg
KCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBUSFJP
V19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJtZXNzYWdlIl0sIEAi
bWVzc2FnZSIpOworICAgIHNlbGYubWVzc2FnZSA9IHBheWxvYWRbQCJtZXNzYWdlIl07CisKKyAg
ICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJjb2RlIl0s
IEAiY29kZSIpOworICAgIHNlbGYuY29kZSA9IFtwYXlsb2FkW0AiY29kZSJdIGludGVnZXJWYWx1
ZV07CisKKyAgICByZXR1cm4gc2VsZjsKK30KKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3Rv
Y29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilvYmplY3QKK3sKKyAgICBpZiAoIShz
ZWxmID0gW3N1cGVyIGluaXRXaXRoSlNPTk9iamVjdDpbb2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0
KCldKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHJldHVybiBzZWxmOworfQorCistIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZTooaW50
KWNvZGUKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJu
IG5pbDsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkobWVzc2Fn
ZSwgQCJtZXNzYWdlIik7CisKKyAgICBzZWxmLm1lc3NhZ2UgPSBtZXNzYWdlOworICAgIHNlbGYu
Y29kZSA9IGNvZGU7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClzZXRNZXNzYWdl
OihOU1N0cmluZyAqKW1lc3NhZ2UKK3sKKyAgICBbc3VwZXIgc2V0U3RyaW5nOm1lc3NhZ2UgZm9y
S2V5OkAibWVzc2FnZSJdOworfQorCistIChOU1N0cmluZyAqKW1lc3NhZ2UKK3sKKyAgICByZXR1
cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAIm1lc3NhZ2UiXTsKK30KKworLSAodm9pZClzZXRDb2Rl
OihpbnQpY29kZQoreworICAgIFtzdXBlciBzZXRJbnRlZ2VyOmNvZGUgZm9yS2V5OkAiY29kZSJd
OworfQorCistIChpbnQpY29kZQoreworICAgIHJldHVybiBbc3VwZXIgaW50ZWdlckZvcktleTpA
ImNvZGUiXTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMu
bW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRl
cnMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0
ZXJzLmpzb24tcmVzdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4x
MzFlZjdmZGVmMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwt
cmV0dXJuLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQKQEAgLTAsMCArMSwxNjQzIEBACisjIyMgQmVn
aW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0
ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworLy8g
RGF0YWJhc2UKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIkRhdGFiYXNlIiwgbnVs
bCk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiRGF0YWJhc2UuUHJpbWFyeUNvbG9y
cyIsIHtSZWQ6ICJyZWQiLCBHcmVlbjogImdyZWVuIiwgQmx1ZTogImJsdWUifSk7CitJbnNwZWN0
b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiRGF0YWJhc2UuZXhlY3V0ZUFsbE9wdGlvbmFsUGFy
YW1ldGVycyIsIG51bGwsIFt7Im5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJvYmplY3Qi
LCAib3B0aW9uYWwiOiB0cnVlfSwgeyJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiwg
Im9wdGlvbmFsIjogdHJ1ZX0sIHsibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIi
LCAib3B0aW9uYWwiOiB0cnVlfSwgeyJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIs
ICJvcHRpb25hbCI6IHRydWV9LCB7Im5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogIm9iamVjdCIs
ICJvcHRpb25hbCI6IHRydWV9LCB7Im5hbWUiOiAiZGF0YWJhc2VJZCIsICJ0eXBlIjogIm51bWJl
ciIsICJvcHRpb25hbCI6IHRydWV9LCB7Im5hbWUiOiAic3FsRXJyb3IiLCAidHlwZSI6ICJvYmpl
Y3QiLCAib3B0aW9uYWwiOiB0cnVlfSwgeyJuYW1lIjogInNjcmVlbkNvbG9yIiwgInR5cGUiOiAi
c3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZX0sIHsibmFtZSI6ICJhbHRlcm5hdGVDb2xvcnMiLCAi
dHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0cnVlfSwgeyJuYW1lIjogInByaW50Q29sb3Ii
LCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVlfV0sIFsiY29sdW1uTmFtZXMiLCAi
bm90ZXMiLCAidGltZXN0YW1wIiwgInZhbHVlcyIsICJwYXlsb2FkIiwgImRhdGFiYXNlSWQiLCAi
c3FsRXJyb3IiLCAic2NyZWVuQ29sb3IiLCAiYWx0ZXJuYXRlQ29sb3JzIiwgInByaW50Q29sb3Ii
XSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiRGF0YWJhc2UuZXhlY3V0ZU5v
T3B0aW9uYWxQYXJhbWV0ZXJzIiwgbnVsbCwgW3sibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBl
IjogIm9iamVjdCJ9LCB7Im5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmcifSwgeyJuYW1l
IjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciJ9LCB7Im5hbWUiOiAidmFsdWVzIiwgInR5
cGUiOiAib2JqZWN0In0sIHsibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAib2JqZWN0In0sIHsi
bmFtZSI6ICJkYXRhYmFzZUlkIiwgInR5cGUiOiAibnVtYmVyIn0sIHsibmFtZSI6ICJzcWxFcnJv
ciIsICJ0eXBlIjogIm9iamVjdCJ9LCB7Im5hbWUiOiAic2NyZWVuQ29sb3IiLCAidHlwZSI6ICJz
dHJpbmcifSwgeyJuYW1lIjogImFsdGVybmF0ZUNvbG9ycyIsICJ0eXBlIjogIm9iamVjdCJ9LCB7
Im5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmluZyJ9XSwgWyJjb2x1bW5OYW1lcyIs
ICJub3RlcyIsICJ0aW1lc3RhbXAiLCAidmFsdWVzIiwgInBheWxvYWQiLCAiZGF0YWJhc2VJZCIs
ICJzcWxFcnJvciIsICJzY3JlZW5Db2xvciIsICJhbHRlcm5hdGVDb2xvcnMiLCAicHJpbnRDb2xv
ciJdKTsKK0luc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkRhdGFiYXNlIiwgbnVsbCk7
CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcworCisjIyMgQmVnaW4g
RmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJh
bWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsK
KworY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHZvaWQg
c2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNo
ZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KKyAgICBC
YWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2Jh
Y2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Citwcml2YXRlOgorICAgIFJlZlB0cjxCYWNrZW5kRGlz
cGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKK307CisKKworY2xhc3MgQWx0ZXJuYXRlRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hl
ciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+QWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlcigpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJz
KGxvbmcgY2FsbElkLCBjb25zdCBKU09OOjpBcnJheSogaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0
cmluZyogaW5fbm90ZXMsIGNvbnN0IGRvdWJsZSogaW5fdGltZXN0YW1wLCBjb25zdCBKU09OOjpP
YmplY3QqIGluX3ZhbHVlcywgY29uc3QgSlNPTjo6VmFsdWUqIGluX3BheWxvYWQsIGNvbnN0IGlu
dCogaW5fZGF0YWJhc2VJZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBpbl9zcWxFcnJvciwgY29uc3Qg
U3RyaW5nKiBpbl9zY3JlZW5Db2xvciwgY29uc3QgSlNPTjo6QXJyYXkqIGluX2FsdGVybmF0ZUNv
bG9ycywgY29uc3QgU3RyaW5nKiBpbl9wcmludENvbG9yKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhsb25nIGNhbGxJZCwgY29uc3QgSlNPTjo6QXJy
YXkmIGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIGluX25vdGVzLCBkb3VibGUgaW5fdGlt
ZXN0YW1wLCBjb25zdCBKU09OOjpPYmplY3QmIGluX3ZhbHVlcywgSlNPTjo6VmFsdWUgaW5fcGF5
bG9hZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IEpTT046Ok9iamVjdCYgaW5fc3FsRXJyb3Is
IGNvbnN0IFN0cmluZyYgaW5fc2NyZWVuQ29sb3IsIGNvbnN0IEpTT046OkFycmF5JiBpbl9hbHRl
cm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgaW5fcHJpbnRDb2xvcikgPSAwOworfTsKKworfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVS
TkFURV9ESVNQQVRDSEVSUykKKyMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNw
YXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNh
bGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVj
dHMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVj
dG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKKyNpZiBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK2NsYXNzIEFsdGVybmF0ZURhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXI7CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCisKK2NsYXNzIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKK3B1Ymxp
YzoKKyAgICAvLyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIgJ3ByaW50Q29sb3InIHdoaWxlIGdlbmVy
YXRpbmcgY29tbWFuZC9ldmVudCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzLgorICAgIGVu
dW0gY2xhc3MgUHJpbnRDb2xvciB7CisgICAgICAgIEN5YW4gPSAzLAorICAgICAgICBNYWdlbnRh
ID0gNCwKKyAgICAgICAgWWVsbG93ID0gNSwKKyAgICAgICAgQmxhY2sgPSA2LAorICAgIH07IC8v
IGVudW0gY2xhc3MgUHJpbnRDb2xvcgorICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlQWxsT3B0aW9u
YWxQYXJhbWV0ZXJzKEVycm9yU3RyaW5nJiwgY29uc3QgSlNPTjo6QXJyYXkqIG9wdF9pbl9jb2x1
bW5OYW1lcywgY29uc3QgU3RyaW5nKiBvcHRfaW5fbm90ZXMsIGNvbnN0IGRvdWJsZSogb3B0X2lu
X3RpbWVzdGFtcCwgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRfaW5fdmFsdWVzLCBjb25zdCBKU09O
OjpWYWx1ZSogb3B0X2luX3BheWxvYWQsIGNvbnN0IGludCogb3B0X2luX2RhdGFiYXNlSWQsIGNv
bnN0IEpTT046Ok9iamVjdCogb3B0X2luX3NxbEVycm9yLCBjb25zdCBTdHJpbmcqIG9wdF9pbl9z
Y3JlZW5Db2xvciwgY29uc3QgSlNPTjo6QXJyYXkqIG9wdF9pbl9hbHRlcm5hdGVDb2xvcnMsIGNv
bnN0IFN0cmluZyogb3B0X2luX3ByaW50Q29sb3IsIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmlu
Zz4+JiBvcHRfb3V0X2NvbHVtbk5hbWVzLCBPcHRpb25hbDxTdHJpbmc+JiBvcHRfb3V0X25vdGVz
LCBPcHRpb25hbDxkb3VibGU+JiBvcHRfb3V0X3RpbWVzdGFtcCwgT3B0aW9uYWw8SlNPTjo6T2Jq
ZWN0PiYgb3B0X291dF92YWx1ZXMsIE9wdGlvbmFsPEpTT046OlZhbHVlPiYgb3B0X291dF9wYXls
b2FkLCBPcHRpb25hbDxpbnQ+JiBvcHRfb3V0X2RhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiBvcHRfb3V0X3NxbEVycm9yLCBJbnNwZWN0b3I6
OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyogb3B0X291dF9zY3JlZW5Db2xvciwg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiBvcHRfb3V0
X2FsdGVybmF0ZUNvbG9ycywgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50
Q29sb3IqIG9wdF9vdXRfcHJpbnRDb2xvcikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRl
Tm9PcHRpb25hbFBhcmFtZXRlcnMoRXJyb3JTdHJpbmcmLCBjb25zdCBKU09OOjpBcnJheSYgaW5f
Y29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgaW5fbm90ZXMsIGRvdWJsZSBpbl90aW1lc3RhbXAs
IGNvbnN0IEpTT046Ok9iamVjdCYgaW5fdmFsdWVzLCBKU09OOjpWYWx1ZSBpbl9wYXlsb2FkLCBp
bnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgSlNPTjo6T2JqZWN0JiBpbl9zcWxFcnJvciwgY29uc3Qg
U3RyaW5nJiBpbl9zY3JlZW5Db2xvciwgY29uc3QgSlNPTjo6QXJyYXkmIGluX2FsdGVybmF0ZUNv
bG9ycywgY29uc3QgU3RyaW5nJiBpbl9wcmludENvbG9yLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxT
dHJpbmc+PiYgb3V0X2NvbHVtbk5hbWVzLCBTdHJpbmcqIG91dF9ub3RlcywgZG91YmxlKiBvdXRf
dGltZXN0YW1wLCBKU09OOjpPYmplY3QqIG91dF92YWx1ZXMsIEpTT046OlZhbHVlKiBvdXRfcGF5
bG9hZCwgaW50KiBvdXRfZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpFcnJvcj4mIG91dF9zcWxFcnJvciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6OlByaW1hcnlDb2xvcnMqIG91dF9zY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiBvdXRfYWx0ZXJuYXRlQ29sb3JzLCBEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciogb3V0X3ByaW50Q29sb3IpID0g
MDsKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5EYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlcigpOworfTsKKworY2xhc3MgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1
YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFJlZjxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXIm
LCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIHZvaWQgZGlzcGF0Y2go
bG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYm
IG1lc3NhZ2UpIGZpbmFsOworcHJpdmF0ZToKKyAgICB2b2lkIGV4ZWN1dGVBbGxPcHRpb25hbFBh
cmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVy
cyk7CisgICAgdm9pZCBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQs
IFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisjaWYgRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCitwdWJsaWM6CisgICAgdm9pZCBzZXRBbHRlcm5hdGVE
aXNwYXRjaGVyKEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURp
c3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsg
fQorcHJpdmF0ZToKKyAgICBBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKiBtX2Fs
dGVybmF0ZURpc3BhdGNoZXIgeyBudWxscHRyIH07CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCitwcml2YXRlOgorICAgIERhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlciopOworICAgIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50IHsg
bnVsbHB0ciB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6
IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmRE
aXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5k
cy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5o
PgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQor
I2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNlbmRpZiAvLyBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CisKK0RhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+RGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KKworUmVmPERhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXI+IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYg
YmFja2VuZERpc3BhdGNoZXIsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2Vu
dCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
KGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOworfQorCitEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVyOjpEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5k
RGlzcGF0Y2hlciwgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQorICAg
IDogU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCisgICAg
LCBtX2FnZW50KGFnZW50KQoreworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlz
cGF0Y2hlckZvckRvbWFpbigiRGF0YWJhc2UiX3MsIHRoaXMpOworfQorCit2b2lkIERhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcm
IG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQoreworICAgIFJlZjxEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKKworICAgIFJlZlB0cjxKU09OOjpP
YmplY3Q+IHBhcmFtZXRlcnM7CisgICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBh
cmFtZXRlcnMpOworCisgICAgaWYgKG1ldGhvZCA9PSAiZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1l
dGVycyIpIHsKKyAgICAgICAgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhyZXF1ZXN0SWQs
IFdURk1vdmUocGFyYW1ldGVycykpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICht
ZXRob2QgPT0gImV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyIpIHsKKyAgICAgICAgZXhlY3V0
ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQ
cm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEYXRhYmFz
ZS4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOworfQorCit2b2lkIERhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0
SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycykKK3sKKyAgICBib29sIG9wdF9p
bl9jb2x1bW5OYW1lc192YWx1ZUZvdW5kID0gZmFsc2U7CisgICAgUmVmUHRyPEpTT046OkFycmF5
PiBvcHRfaW5fY29sdW1uTmFtZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRBcnJheShwYXJh
bWV0ZXJzLmdldCgpLCAiY29sdW1uTmFtZXMiX3MsICZvcHRfaW5fY29sdW1uTmFtZXNfdmFsdWVG
b3VuZCk7CisgICAgYm9vbCBvcHRfaW5fbm90ZXNfdmFsdWVGb3VuZCA9IGZhbHNlOworICAgIFN0
cmluZyBvcHRfaW5fbm90ZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1l
dGVycy5nZXQoKSwgIm5vdGVzIl9zLCAmb3B0X2luX25vdGVzX3ZhbHVlRm91bmQpOworICAgIGJv
b2wgb3B0X2luX3RpbWVzdGFtcF92YWx1ZUZvdW5kID0gZmFsc2U7CisgICAgZG91YmxlIG9wdF9p
bl90aW1lc3RhbXAgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXREb3VibGUocGFyYW1ldGVycy5n
ZXQoKSwgInRpbWVzdGFtcCJfcywgJm9wdF9pbl90aW1lc3RhbXBfdmFsdWVGb3VuZCk7CisgICAg
Ym9vbCBvcHRfaW5fdmFsdWVzX3ZhbHVlRm91bmQgPSBmYWxzZTsKKyAgICBSZWZQdHI8SlNPTjo6
T2JqZWN0PiBvcHRfaW5fdmFsdWVzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0T2JqZWN0KHBh
cmFtZXRlcnMuZ2V0KCksICJ2YWx1ZXMiX3MsICZvcHRfaW5fdmFsdWVzX3ZhbHVlRm91bmQpOwor
ICAgIGJvb2wgb3B0X2luX3BheWxvYWRfdmFsdWVGb3VuZCA9IGZhbHNlOworICAgIFJlZlB0cjxK
U09OOjpWYWx1ZT4gb3B0X2luX3BheWxvYWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRWYWx1
ZShwYXJhbWV0ZXJzLmdldCgpLCAicGF5bG9hZCJfcywgJm9wdF9pbl9wYXlsb2FkX3ZhbHVlRm91
bmQpOworICAgIGJvb2wgb3B0X2luX2RhdGFiYXNlSWRfdmFsdWVGb3VuZCA9IGZhbHNlOworICAg
IGludCBvcHRfaW5fZGF0YWJhc2VJZCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEludGVnZXIo
cGFyYW1ldGVycy5nZXQoKSwgImRhdGFiYXNlSWQiX3MsICZvcHRfaW5fZGF0YWJhc2VJZF92YWx1
ZUZvdW5kKTsKKyAgICBib29sIG9wdF9pbl9zcWxFcnJvcl92YWx1ZUZvdW5kID0gZmFsc2U7Cisg
ICAgUmVmUHRyPEpTT046Ok9iamVjdD4gb3B0X2luX3NxbEVycm9yID0gbV9iYWNrZW5kRGlzcGF0
Y2hlci0+Z2V0T2JqZWN0KHBhcmFtZXRlcnMuZ2V0KCksICJzcWxFcnJvciJfcywgJm9wdF9pbl9z
cWxFcnJvcl92YWx1ZUZvdW5kKTsKKyAgICBib29sIG9wdF9pbl9zY3JlZW5Db2xvcl92YWx1ZUZv
dW5kID0gZmFsc2U7CisgICAgU3RyaW5nIG9wdF9pbl9zY3JlZW5Db2xvciA9IG1fYmFja2VuZERp
c3BhdGNoZXItPmdldFN0cmluZyhwYXJhbWV0ZXJzLmdldCgpLCAic2NyZWVuQ29sb3IiX3MsICZv
cHRfaW5fc2NyZWVuQ29sb3JfdmFsdWVGb3VuZCk7CisgICAgYm9vbCBvcHRfaW5fYWx0ZXJuYXRl
Q29sb3JzX3ZhbHVlRm91bmQgPSBmYWxzZTsKKyAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IG9wdF9p
bl9hbHRlcm5hdGVDb2xvcnMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRBcnJheShwYXJhbWV0
ZXJzLmdldCgpLCAiYWx0ZXJuYXRlQ29sb3JzIl9zLCAmb3B0X2luX2FsdGVybmF0ZUNvbG9yc192
YWx1ZUZvdW5kKTsKKyAgICBib29sIG9wdF9pbl9wcmludENvbG9yX3ZhbHVlRm91bmQgPSBmYWxz
ZTsKKyAgICBTdHJpbmcgb3B0X2luX3ByaW50Q29sb3IgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5n
ZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgInByaW50Q29sb3IiX3MsICZvcHRfaW5fcHJpbnRD
b2xvcl92YWx1ZUZvdW5kKTsKKyAgICBpZiAobV9iYWNrZW5kRGlzcGF0Y2hlci0+aGFzUHJvdG9j
b2xFcnJvcnMoKSkgeworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2Nv
bEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCAiU29tZSBhcmd1bWVudHMg
b2YgbWV0aG9kICdEYXRhYmFzZS5leGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzJyBjYW4ndCBi
ZSBwcm9jZXNzZWQiX3MpOworICAgICAgICByZXR1cm47CisgICAgfQorCisjaWYgRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0
Y2hlcikgeworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVBbGxPcHRpb25h
bFBhcmFtZXRlcnMocmVxdWVzdElkLCBvcHRfaW5fY29sdW1uTmFtZXNfdmFsdWVGb3VuZCA/IG9w
dF9pbl9jb2x1bW5OYW1lcy5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9ub3Rlc192YWx1ZUZvdW5k
ID8gJm9wdF9pbl9ub3RlcyA6IG51bGxwdHIsIG9wdF9pbl90aW1lc3RhbXBfdmFsdWVGb3VuZCA/
ICZvcHRfaW5fdGltZXN0YW1wIDogbnVsbHB0ciwgb3B0X2luX3ZhbHVlc192YWx1ZUZvdW5kID8g
b3B0X2luX3ZhbHVlcy5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9wYXlsb2FkX3ZhbHVlRm91bmQg
PyBvcHRfaW5fcGF5bG9hZC5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9kYXRhYmFzZUlkX3ZhbHVl
Rm91bmQgPyAmb3B0X2luX2RhdGFiYXNlSWQgOiBudWxscHRyLCBvcHRfaW5fc3FsRXJyb3JfdmFs
dWVGb3VuZCA/IG9wdF9pbl9zcWxFcnJvci5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9zY3JlZW5D
b2xvcl92YWx1ZUZvdW5kID8gJm9wdF9pbl9zY3JlZW5Db2xvciA6IG51bGxwdHIsIG9wdF9pbl9h
bHRlcm5hdGVDb2xvcnNfdmFsdWVGb3VuZCA/IG9wdF9pbl9hbHRlcm5hdGVDb2xvcnMuZ2V0KCkg
OiBudWxscHRyLCBvcHRfaW5fcHJpbnRDb2xvcl92YWx1ZUZvdW5kID8gJm9wdF9pbl9wcmludENv
bG9yIDogbnVsbHB0cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYgLy8gRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyAgICBFcnJvclN0cmluZyBlcnJv
cjsKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OworICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IG91dF9jb2x1bW5OYW1lczsKKyAg
ICBPcHRpb25hbDxTdHJpbmc+IG91dF9ub3RlczsKKyAgICBPcHRpb25hbDxkb3VibGU+IG91dF90
aW1lc3RhbXA7CisgICAgT3B0aW9uYWw8SlNPTjo6T2JqZWN0PiBvdXRfdmFsdWVzOworICAgIE9w
dGlvbmFsPEpTT046OlZhbHVlPiBvdXRfcGF5bG9hZDsKKyAgICBPcHRpb25hbDxpbnQ+IG91dF9k
YXRhYmFzZUlkOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJy
b3I+IG91dF9zcWxFcnJvcjsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJp
bWFyeUNvbG9ycyBvdXRfc2NyZWVuQ29sb3I7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IG91dF9hbHRlcm5hdGVDb2xvcnM7CisgICAgRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3Igb3V0X3ByaW50Q29sb3I7Cisg
ICAgbV9hZ2VudC0+ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhlcnJvciwgb3B0X2luX2Nv
bHVtbk5hbWVzX3ZhbHVlRm91bmQgPyBvcHRfaW5fY29sdW1uTmFtZXMuZ2V0KCkgOiBudWxscHRy
LCBvcHRfaW5fbm90ZXNfdmFsdWVGb3VuZCA/ICZvcHRfaW5fbm90ZXMgOiBudWxscHRyLCBvcHRf
aW5fdGltZXN0YW1wX3ZhbHVlRm91bmQgPyAmb3B0X2luX3RpbWVzdGFtcCA6IG51bGxwdHIsIG9w
dF9pbl92YWx1ZXNfdmFsdWVGb3VuZCA/IG9wdF9pbl92YWx1ZXMuZ2V0KCkgOiBudWxscHRyLCBv
cHRfaW5fcGF5bG9hZF92YWx1ZUZvdW5kID8gb3B0X2luX3BheWxvYWQuZ2V0KCkgOiBudWxscHRy
LCBvcHRfaW5fZGF0YWJhc2VJZF92YWx1ZUZvdW5kID8gJm9wdF9pbl9kYXRhYmFzZUlkIDogbnVs
bHB0ciwgb3B0X2luX3NxbEVycm9yX3ZhbHVlRm91bmQgPyBvcHRfaW5fc3FsRXJyb3IuZ2V0KCkg
OiBudWxscHRyLCBvcHRfaW5fc2NyZWVuQ29sb3JfdmFsdWVGb3VuZCA/ICZvcHRfaW5fc2NyZWVu
Q29sb3IgOiBudWxscHRyLCBvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzX3ZhbHVlRm91bmQgPyBvcHRf
aW5fYWx0ZXJuYXRlQ29sb3JzLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX3ByaW50Q29sb3JfdmFs
dWVGb3VuZCA/ICZvcHRfaW5fcHJpbnRDb2xvciA6IG51bGxwdHIsIG91dF9jb2x1bW5OYW1lcywg
b3V0X25vdGVzLCBvdXRfdGltZXN0YW1wLCBvdXRfdmFsdWVzLCBvdXRfcGF5bG9hZCwgb3V0X2Rh
dGFiYXNlSWQsIG91dF9zcWxFcnJvciwgb3V0X3NjcmVlbkNvbG9yLCBvdXRfYWx0ZXJuYXRlQ29s
b3JzLCBvdXRfcHJpbnRDb2xvcik7CisKKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7CisgICAg
ICAgIGlmIChvdXRfY29sdW1uTmFtZXMpCisgICAgICAgICAgICByZXN1bHQtPnNldEFycmF5KCJj
b2x1bW5OYW1lcyJfcywgb3V0X2NvbHVtbk5hbWVzKTsKKyAgICAgICAgaWYgKG91dF9ub3Rlcy5o
YXNWYWx1ZSgpKQorICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCAqb3V0
X25vdGVzKTsKKyAgICAgICAgaWYgKG91dF90aW1lc3RhbXAuaGFzVmFsdWUoKSkKKyAgICAgICAg
ICAgIHJlc3VsdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICpvdXRfdGltZXN0YW1wKTsKKyAg
ICAgICAgaWYgKG91dF92YWx1ZXMuaGFzVmFsdWUoKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0
T2JqZWN0KCJ2YWx1ZXMiX3MsICpvdXRfdmFsdWVzKTsKKyAgICAgICAgaWYgKG91dF9wYXlsb2Fk
Lmhhc1ZhbHVlKCkpCisgICAgICAgICAgICByZXN1bHQtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCAq
b3V0X3BheWxvYWQpOworICAgICAgICBpZiAob3V0X2RhdGFiYXNlSWQuaGFzVmFsdWUoKSkKKyAg
ICAgICAgICAgIHJlc3VsdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgKm91dF9kYXRhYmFz
ZUlkKTsKKyAgICAgICAgaWYgKG91dF9zcWxFcnJvcikKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0
T2JqZWN0KCJzcWxFcnJvciJfcywgb3V0X3NxbEVycm9yKTsKKyAgICAgICAgaWYgKG91dF9zY3Jl
ZW5Db2xvci5oYXNWYWx1ZSgpKQorICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInNjcmVl
bkNvbG9yIl9zLCAqb3V0X3NjcmVlbkNvbG9yKTsKKyAgICAgICAgaWYgKG91dF9hbHRlcm5hdGVD
b2xvcnMpCisgICAgICAgICAgICByZXN1bHQtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3Ms
IG91dF9hbHRlcm5hdGVDb2xvcnMpOworICAgICAgICBpZiAob3V0X3ByaW50Q29sb3IuaGFzVmFs
dWUoKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCAqb3V0
X3ByaW50Q29sb3IpOworICAgIH0KKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQorICAgICAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3Vs
dCksIGZhbHNlKTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9y
dFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVy
cm9yKSk7Cit9CisKK3ZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZU5vT3B0
aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBh
cmFtZXRlcnMpCit7CisgICAgUmVmUHRyPEpTT046OkFycmF5PiBpbl9jb2x1bW5OYW1lcyA9IG1f
YmFja2VuZERpc3BhdGNoZXItPmdldEFycmF5KHBhcmFtZXRlcnMuZ2V0KCksICJjb2x1bW5OYW1l
cyJfcywgbnVsbHB0cik7CisgICAgU3RyaW5nIGluX25vdGVzID0gbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksICJub3RlcyJfcywgbnVsbHB0cik7CisgICAg
ZG91YmxlIGluX3RpbWVzdGFtcCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldERvdWJsZShwYXJh
bWV0ZXJzLmdldCgpLCAidGltZXN0YW1wIl9zLCBudWxscHRyKTsKKyAgICBSZWZQdHI8SlNPTjo6
T2JqZWN0PiBpbl92YWx1ZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRPYmplY3QocGFyYW1l
dGVycy5nZXQoKSwgInZhbHVlcyJfcywgbnVsbHB0cik7CisgICAgUmVmUHRyPEpTT046OlZhbHVl
PiBpbl9wYXlsb2FkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0VmFsdWUocGFyYW1ldGVycy5n
ZXQoKSwgInBheWxvYWQiX3MsIG51bGxwdHIpOworICAgIGludCBpbl9kYXRhYmFzZUlkID0gbV9i
YWNrZW5kRGlzcGF0Y2hlci0+Z2V0SW50ZWdlcihwYXJhbWV0ZXJzLmdldCgpLCAiZGF0YWJhc2VJ
ZCJfcywgbnVsbHB0cik7CisgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gaW5fc3FsRXJyb3IgPSBt
X2JhY2tlbmREaXNwYXRjaGVyLT5nZXRPYmplY3QocGFyYW1ldGVycy5nZXQoKSwgInNxbEVycm9y
Il9zLCBudWxscHRyKTsKKyAgICBTdHJpbmcgaW5fc2NyZWVuQ29sb3IgPSBtX2JhY2tlbmREaXNw
YXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgInNjcmVlbkNvbG9yIl9zLCBudWxs
cHRyKTsKKyAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGluX2FsdGVybmF0ZUNvbG9ycyA9IG1fYmFj
a2VuZERpc3BhdGNoZXItPmdldEFycmF5KHBhcmFtZXRlcnMuZ2V0KCksICJhbHRlcm5hdGVDb2xv
cnMiX3MsIG51bGxwdHIpOworICAgIFN0cmluZyBpbl9wcmludENvbG9yID0gbV9iYWNrZW5kRGlz
cGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksICJwcmludENvbG9yIl9zLCBudWxs
cHRyKTsKKyAgICBpZiAobV9iYWNrZW5kRGlzcGF0Y2hlci0+aGFzUHJvdG9jb2xFcnJvcnMoKSkg
eworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tl
bmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCAiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICdE
YXRhYmFzZS5leGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMnIGNhbid0IGJlIHByb2Nlc3NlZCJf
cyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVS
TkFURV9ESVNQQVRDSEVSUykKKyAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7CisgICAg
ICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKHJl
cXVlc3RJZCwgKmluX2NvbHVtbk5hbWVzLCBpbl9ub3RlcywgaW5fdGltZXN0YW1wLCAqaW5fdmFs
dWVzLCAqaW5fcGF5bG9hZCwgaW5fZGF0YWJhc2VJZCwgKmluX3NxbEVycm9yLCBpbl9zY3JlZW5D
b2xvciwgKmluX2FsdGVybmF0ZUNvbG9ycywgaW5fcHJpbnRDb2xvcik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCisKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1
bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0
cmluZz4+IG91dF9jb2x1bW5OYW1lczsKKyAgICBTdHJpbmcgb3V0X25vdGVzOworICAgIGRvdWJs
ZSBvdXRfdGltZXN0YW1wOworICAgIEpTT046Ok9iamVjdCBvdXRfdmFsdWVzOworICAgIEpTT046
OlZhbHVlIG91dF9wYXlsb2FkOworICAgIGludCBvdXRfZGF0YWJhc2VJZDsKKyAgICBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBvdXRfc3FsRXJyb3I7CisgICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgb3V0X3NjcmVlbkNv
bG9yOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0
PiBvdXRfYWx0ZXJuYXRlQ29sb3JzOworICAgIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyOjpQcmludENvbG9yIG91dF9wcmludENvbG9yOworICAgIG1fYWdlbnQtPmV4ZWN1dGVOb09w
dGlvbmFsUGFyYW1ldGVycyhlcnJvciwgKmluX2NvbHVtbk5hbWVzLCBpbl9ub3RlcywgaW5fdGlt
ZXN0YW1wLCAqaW5fdmFsdWVzLCAqaW5fcGF5bG9hZCwgaW5fZGF0YWJhc2VJZCwgKmluX3NxbEVy
cm9yLCBpbl9zY3JlZW5Db2xvciwgKmluX2FsdGVybmF0ZUNvbG9ycywgaW5fcHJpbnRDb2xvciwg
b3V0X2NvbHVtbk5hbWVzLCAmb3V0X25vdGVzLCAmb3V0X3RpbWVzdGFtcCwgb3V0X3ZhbHVlcywg
Jm91dF9wYXlsb2FkLCAmb3V0X2RhdGFiYXNlSWQsIG91dF9zcWxFcnJvciwgJm91dF9zY3JlZW5D
b2xvciwgb3V0X2FsdGVybmF0ZUNvbG9ycywgJm91dF9wcmludENvbG9yKTsKKworICAgIGlmICgh
ZXJyb3IubGVuZ3RoKCkpIHsKKyAgICAgICAgcmVzdWx0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMi
X3MsIG91dF9jb2x1bW5OYW1lcyk7CisgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJub3RlcyJf
cywgb3V0X25vdGVzKTsKKyAgICAgICAgcmVzdWx0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywg
b3V0X3RpbWVzdGFtcCk7CisgICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIG91
dF92YWx1ZXMpOworICAgICAgICByZXN1bHQtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBvdXRfcGF5
bG9hZCk7CisgICAgICAgIHJlc3VsdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgb3V0X2Rh
dGFiYXNlSWQpOworICAgICAgICByZXN1bHQtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIG91dF9z
cWxFcnJvcik7CisgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgSW5z
cGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKG91dF9z
Y3JlZW5Db2xvcikpOworICAgICAgICByZXN1bHQtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMi
X3MsIG91dF9hbHRlcm5hdGVDb2xvcnMpOworICAgICAgICByZXN1bHQtPnNldFN0cmluZygicHJp
bnRDb2xvciJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25z
dGFudFZhbHVlKG91dF9wcmludENvbG9yKSk7CisgICAgfQorICAgIGlmICghZXJyb3IubGVuZ3Ro
KCkpCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQs
IFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOworICAgIGVsc2UKKyAgICAgICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJy
b3IsIFdURk1vdmUoZXJyb3IpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMj
IyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6
IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZh
bHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5z
cGVjdG9yIHsKKworY2xhc3MgRnJvbnRlbmRSb3V0ZXI7CisKK30gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRl
cnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKKwor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0
Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwt
cmV0dXJuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvclByb3RvY29sVHlwZXMuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1l
c3BhY2UgSW5zcGVjdG9yIHsKKworCisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKworCisvLyBG
b3J3YXJkIGRlY2xhcmF0aW9ucy4KK25hbWVzcGFjZSBEYXRhYmFzZSB7CitjbGFzcyBFcnJvcjsK
K2VudW0gY2xhc3MgUHJpbWFyeUNvbG9yczsKK30gLy8gRGF0YWJhc2UKKy8vIEVuZCBvZiBmb3J3
YXJkIGRlY2xhcmF0aW9ucy4KKworCisvLyBUeXBlZGVmcy4KK25hbWVzcGFjZSBEYXRhYmFzZSB7
CisvKiBVbmlxdWUgaWRlbnRpZmllciBvZiBEYXRhYmFzZSBvYmplY3QuICovCit0eXBlZGVmIGlu
dCBEYXRhYmFzZUlkOwordHlwZWRlZiBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiBDb2xvckxpc3Q7Cit9IC8vIERhdGFiYXNlCisvLyBF
bmQgb2YgdHlwZWRlZnMuCisKK25hbWVzcGFjZSBUZXN0SGVscGVycyB7CisKK1N0cmluZyBnZXRF
bnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmlu
ZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkKK3sKKyAgICByZXR1cm4gZ2V0RW51
bUNvbnN0YW50VmFsdWUoc3RhdGljX2Nhc3Q8aW50PihlbnVtVmFsdWUpKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgVGVzdEhlbHBlcnMKKworbmFtZXNwYWNlIERhdGFiYXNlIHsKKy8qICAqLworZW51
bSBjbGFzcyBQcmltYXJ5Q29sb3JzIHsKKyAgICBSZWQgPSAwLAorICAgIEdyZWVuID0gMSwKKyAg
ICBCbHVlID0gMiwKK307IC8vIGVudW0gY2xhc3MgUHJpbWFyeUNvbG9ycworLyogRGF0YWJhc2Ug
ZXJyb3IuICovCitjbGFzcyBFcnJvciA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKK3B1Ymxp
YzoKKyAgICBlbnVtIHsKKyAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAorICAgICAgICBNZXNzYWdl
U2V0ID0gMSA8PCAwLAorICAgICAgICBDb2RlU2V0ID0gMSA8PCAxLAorICAgICAgICBBbGxGaWVs
ZHNTZXQgPSAoTWVzc2FnZVNldCB8IENvZGVTZXQpCisgICAgfTsKKworICAgIHRlbXBsYXRlPGlu
dCBTVEFURT4KKyAgICBjbGFzcyBCdWlsZGVyIHsKKyAgICBwcml2YXRlOgorICAgICAgICBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiBtX3Jlc3VsdDsKKworICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4g
QnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7
CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyKFJlZjwvKkVycm9yKi9KU09OOjpPYmplY3Q+
JiYgb2JqZWN0KQorICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBi
dWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAgICAgICB9CisgICAgICAgIGZy
aWVuZCBjbGFzcyBFcnJvcjsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8
IE1lc3NhZ2VTZXQ+JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIHsK
KyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNZXNzYWdlU2V0KSwgcHJvcGVy
dHlfbWVzc2FnZV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5n
KCJtZXNzYWdlIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1lc3Nh
Z2VTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29kZVNldD4m
IHNldENvZGUoaW50IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgQ29kZVNldCksIHByb3BlcnR5X2NvZGVfYWxyZWFkeV9zZXQpOworICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldEludGVnZXIoImNvZGUiX3MsIHZhbHVlKTsKKyAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8Q29kZVNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIFJlZjxF
cnJvcj4gcmVsZWFzZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNU
QVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CisgICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChzaXplb2YoRXJyb3IpID09IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5u
b3RfY2FzdCk7CisKKyAgICAgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25SZXN1bHQgPSBt
X3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBXVEZN
b3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxFcnJvcj4qPigmanNvblJlc3VsdCkpOworICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvKgorICAgICAq
IFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKKyAgICAgKiBSZWY8RXJyb3I+IHJlc3VsdCA9IEVycm9y
OjpjcmVhdGUoKQorICAgICAqICAgICAuc2V0TWVzc2FnZSguLi4pCisgICAgICogICAgIC5zZXRD
b2RlKC4uLikKKyAgICAgKiAgICAgLnJlbGVhc2UoKTsKKyAgICAgKi8KKyAgICBzdGF0aWMgQnVp
bGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBCdWlsZGVy
PE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICB9Cit9OworCit9IC8v
IERhdGFiYXNlCisKKworCituYW1lc3BhY2UgVGVzdEhlbHBlcnMgeworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBQcm90b2NvbEVudW1UeXBlPgorT3B0aW9uYWw8UHJvdG9jb2xFbnVtVHlwZT4gcGFyc2VF
bnVtVmFsdWVGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYpOworCisvLyBFbnVtcyBpbiB0aGUgJ0Rh
dGFiYXNlJyBEb21haW4KK3RlbXBsYXRlPD4KK09wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+KGNvbnN0IFN0cmluZyYpOwor
Cit9IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAor
Cit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKKworLy8gSGFzaCBkZWNsYXJhdGlvbnMg
aW4gdGhlICdEYXRhYmFzZScgRG9tYWluCit0ZW1wbGF0ZTw+CitzdHJ1Y3QgRGVmYXVsdEhhc2g8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IHsKKyAgICB0eXBl
ZGVmIEludEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+
IEhhc2g7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKyMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sT2JqZWN0cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwt
Y2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9j
b2xPYmplY3RzLmgiCisKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCituYW1lc3BhY2UgUHJv
dG9jb2wgeworCituYW1lc3BhY2UgVGVzdEhlbHBlcnMgeworCitzdGF0aWMgY29uc3QgY2hhciog
Y29uc3QgZW51bV9jb25zdGFudF92YWx1ZXNbXSA9IHsKKyAgICAicmVkIiwKKyAgICAiZ3JlZW4i
LAorICAgICJibHVlIiwKKyAgICAiY3lhbiIsCisgICAgIm1hZ2VudGEiLAorICAgICJ5ZWxsb3ci
LAorICAgICJibGFjayIsCit9OworCitTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNv
ZGUpIHsKKyAgICByZXR1cm4gZW51bV9jb25zdGFudF92YWx1ZXNbY29kZV07Cit9CisKKy8vIEVu
dW1zIGluIHRoZSAnRGF0YWJhc2UnIERvbWFpbgordGVtcGxhdGU8PgorT3B0aW9uYWw8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IHBhcnNlRW51bVZhbHVlRnJv
bVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4oY29u
c3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKK3sKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNv
bnN0YW50VmFsdWVzW10gPSB7CisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM6OlJlZCwKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6
OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9yczo6R3JlZW4sCisgICAgICAgIChzaXpl
X3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM6OkJsdWUsCisg
ICAgfTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDM7ICsraSkKKyAgICAgICAgaWYgKHBy
b3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkK
KyAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1h
cnlDb2xvcnMpY29uc3RhbnRWYWx1ZXNbaV07CisKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
fQorCisKK30gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCisKKworCit9IC8vIG5hbWVzcGFjZSBQ
cm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xPYmplY3RzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2Vu
ZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5k
cy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8d3RmL1Jl
dGFpblB0ci5oPgorCitAcHJvdG9jb2wgVGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVy
OworCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCitjbGFzcyBPYmpDSW5zcGVjdG9yRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVEYXRhYmFzZUJhY2tl
bmREaXNwYXRjaGVyIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAg
ICBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xE
YXRhYmFzZURvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0K
KyAgICB2b2lkIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIGNv
bnN0IEpTT046OkFycmF5KiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nKiBpbl9ub3Rlcywg
Y29uc3QgZG91YmxlKiBpbl90aW1lc3RhbXAsIGNvbnN0IEpTT046Ok9iamVjdCogaW5fdmFsdWVz
LCBjb25zdCBKU09OOjpWYWx1ZSogaW5fcGF5bG9hZCwgY29uc3QgaW50KiBpbl9kYXRhYmFzZUlk
LCBjb25zdCBKU09OOjpPYmplY3QqIGluX3NxbEVycm9yLCBjb25zdCBTdHJpbmcqIGluX3NjcmVl
bkNvbG9yLCBjb25zdCBKU09OOjpBcnJheSogaW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJp
bmcqIGluX3ByaW50Q29sb3IpIGZpbmFsOworICAgIHZvaWQgZXhlY3V0ZU5vT3B0aW9uYWxQYXJh
bWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBjb25zdCBKU09OOjpBcnJheSYgaW5fY29sdW1uTmFtZXMs
IGNvbnN0IFN0cmluZyYgaW5fbm90ZXMsIGRvdWJsZSBpbl90aW1lc3RhbXAsIGNvbnN0IEpTT046
Ok9iamVjdCYgaW5fdmFsdWVzLCBKU09OOjpWYWx1ZSBpbl9wYXlsb2FkLCBpbnQgaW5fZGF0YWJh
c2VJZCwgY29uc3QgSlNPTjo6T2JqZWN0JiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nJiBpbl9z
Y3JlZW5Db2xvciwgY29uc3QgSlNPTjo6QXJyYXkmIGluX2FsdGVybmF0ZUNvbG9ycywgY29uc3Qg
U3RyaW5nJiBpbl9wcmludENvbG9yKSBmaW5hbDsKK3ByaXZhdGU6CisgICAgUmV0YWluUHRyPGlk
PFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNr
ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERp
c3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMt
d2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0
ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgIlRlc3RQcm90
b2NvbEludGVybmFsLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgi
CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisK
K3ZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVBbGxP
cHRpb25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIGNvbnN0IEpTT046OkFycmF5KiBpbl9j
b2x1bW5OYW1lcywgY29uc3QgU3RyaW5nKiBpbl9ub3RlcywgY29uc3QgZG91YmxlKiBpbl90aW1l
c3RhbXAsIGNvbnN0IEpTT046Ok9iamVjdCogaW5fdmFsdWVzLCBjb25zdCBKU09OOjpWYWx1ZSog
aW5fcGF5bG9hZCwgY29uc3QgaW50KiBpbl9kYXRhYmFzZUlkLCBjb25zdCBKU09OOjpPYmplY3Qq
IGluX3NxbEVycm9yLCBjb25zdCBTdHJpbmcqIGluX3NjcmVlbkNvbG9yLCBjb25zdCBKU09OOjpB
cnJheSogaW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcqIGluX3ByaW50Q29sb3IpCit7
CisgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGV4ZWN1
dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6
Y29sdW1uTmFtZXM6bm90ZXM6dGltZXN0YW1wOnZhbHVlczpwYXlsb2FkOmRhdGFiYXNlSWQ6c3Fs
RXJyb3I6c2NyZWVuQ29sb3I6YWx0ZXJuYXRlQ29sb3JzOnByaW50Q29sb3I6KV0pIHsKKyAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJh
Y2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS5leGVjdXRlQWxsT3B0
aW9uYWxQYXJhbWV0ZXJzJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2VuZERpc3Bh
dGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgeworICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERp
c3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVy
KCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgfTsKKworICAgIGlkIHN1Y2Nlc3NDYWxsYmFj
ayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiovICoqY29sdW1uTmFtZXMsIE5TU3RyaW5nICoqbm90
ZXMsIGRvdWJsZSAqdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKip2YWx1ZXMsIFJX
SVByb3RvY29sSlNPTk9iamVjdCAqKnBheWxvYWQsIGludCAqZGF0YWJhc2VJZCwgVGVzdFByb3Rv
Y29sRGF0YWJhc2VFcnJvciAqKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlD
b2xvcnMgKnNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiphbHRlcm5hdGVDb2xv
cnMsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50
Q29sb3IgKnByaW50Q29sb3IpIHsKKyAgICAgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0T2Jq
ZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7Cisg
ICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihub3Rlcywg
QCJub3RlcyIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJB
TUVURVIodmFsdWVzLCBAInZhbHVlcyIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JB
RF9PUFRJT05BTF9QQVJBTUVURVIocGF5bG9hZCwgQCJwYXlsb2FkIik7CisgICAgICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihzcWxFcnJvciwgQCJzcWxFcnJv
ciIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIo
YWx0ZXJuYXRlQ29sb3JzLCBAImFsdGVybmF0ZUNvbG9ycyIpOworICAgICAgICBpZiAoY29sdW1u
TmFtZXMpCisgICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJf
cywgdG9KU09OU3RyaW5nQXJyYXkoKmNvbHVtbk5hbWVzKSk7CisgICAgICAgIGlmIChub3RlcykK
KyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJub3RlcyJfcywgKm5vdGVzKTsK
KyAgICAgICAgaWYgKHRpbWVzdGFtcCkKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0RG91
YmxlKCJ0aW1lc3RhbXAiX3MsICp0aW1lc3RhbXApOworICAgICAgICBpZiAodmFsdWVzKQorICAg
ICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgWyp2YWx1ZXMgdG9K
U09OT2JqZWN0XSk7CisgICAgICAgIGlmIChwYXlsb2FkKQorICAgICAgICAgICAgcmVzdWx0T2Jq
ZWN0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgWypwYXlsb2FkIHRvSlNPTk9iamVjdF0pOworICAg
ICAgICBpZiAoZGF0YWJhc2VJZCkKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0SW50ZWdl
cigiZGF0YWJhc2VJZCJfcywgKmRhdGFiYXNlSWQpOworICAgICAgICBpZiAoc3FsRXJyb3IpCisg
ICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIFsqc3FsRXJy
b3IgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIGlmIChzY3JlZW5Db2xvcikKKyAgICAgICAgICAg
IHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgdG9Qcm90b2NvbFN0cmlu
Zygqc2NyZWVuQ29sb3IpKTsKKyAgICAgICAgaWYgKGFsdGVybmF0ZUNvbG9ycykKKyAgICAgICAg
ICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgdG9KU09OU3Ry
aW5nQXJyYXkoKmFsdGVybmF0ZUNvbG9ycykpOworICAgICAgICBpZiAocHJpbnRDb2xvcikKKyAg
ICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCB0b1Byb3Rv
Y29sU3RyaW5nKCpwcmludENvbG9yKSk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNl
bmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0T2JqZWN0KSwgZmFsc2UpOworICAg
IH07CisKKyAgICBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKm9faW5fY29sdW1uTmFtZXM7CisgICAg
aWYgKGluX2NvbHVtbk5hbWVzKQorICAgICAgICBvX2luX2NvbHVtbk5hbWVzID0gdG9PYmpDU3Ry
aW5nQXJyYXkoaW5fY29sdW1uTmFtZXMpOworICAgIE5TU3RyaW5nICpvX2luX25vdGVzOworICAg
IGlmIChpbl9ub3RlcykKKyAgICAgICAgb19pbl9ub3RlcyA9ICppbl9ub3RlczsKKyAgICBkb3Vi
bGUgb19pbl90aW1lc3RhbXA7CisgICAgaWYgKGluX3RpbWVzdGFtcCkKKyAgICAgICAgb19pbl90
aW1lc3RhbXAgPSAqaW5fdGltZXN0YW1wOworICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb19p
bl92YWx1ZXM7CisgICAgaWYgKGluX3ZhbHVlcykKKyAgICAgICAgb19pbl92YWx1ZXMgPSBbW1tS
V0lQcm90b2NvbEpTT05PYmplY3QgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDppbl92YWx1ZXNd
IGF1dG9yZWxlYXNlXTsKKyAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9faW5fcGF5bG9hZDsK
KyAgICBpZiAoaW5fcGF5bG9hZCkKKyAgICAgICAgb19pbl9wYXlsb2FkID0gW1tbUldJUHJvdG9j
b2xKU09OT2JqZWN0IGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6aW5fcGF5bG9hZF0gYXV0b3Jl
bGVhc2VdOworICAgIGludCBvX2luX2RhdGFiYXNlSWQ7CisgICAgaWYgKGluX2RhdGFiYXNlSWQp
CisgICAgICAgIG9faW5fZGF0YWJhc2VJZCA9ICppbl9kYXRhYmFzZUlkOworICAgIFRlc3RQcm90
b2NvbERhdGFiYXNlRXJyb3IgKm9faW5fc3FsRXJyb3I7CisgICAgaWYgKGluX3NxbEVycm9yKQor
ICAgICAgICBvX2luX3NxbEVycm9yID0gW1tbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBhbGxv
Y10gaW5pdFdpdGhKU09OT2JqZWN0OmluX3NxbEVycm9yXSBhdXRvcmVsZWFzZV07CisgICAgT3B0
aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzPiBvX2luX3NjcmVlbkNvbG9y
OworICAgIGlmIChpbl9zY3JlZW5Db2xvcikKKyAgICAgICAgb19pbl9zY3JlZW5Db2xvciA9IGZy
b21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnM+KCppbl9z
Y3JlZW5Db2xvcik7CisgICAgTlNBcnJheS8qPE5TU3RyaW5nPiovICpvX2luX2FsdGVybmF0ZUNv
bG9yczsKKyAgICBpZiAoaW5fYWx0ZXJuYXRlQ29sb3JzKQorICAgICAgICBvX2luX2FsdGVybmF0
ZUNvbG9ycyA9IHRvT2JqQ1N0cmluZ0FycmF5KGluX2FsdGVybmF0ZUNvbG9ycyk7CisgICAgT3B0
aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJp
bnRDb2xvcj4gb19pbl9wcmludENvbG9yOworICAgIGlmIChpbl9wcmludENvbG9yKQorICAgICAg
ICBvX2luX3ByaW50Q29sb3IgPSBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sRGF0YWJh
c2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvcj4oKmluX3ByaW50Q29sb3Ip
OworCisgICAgW21fZGVsZWdhdGUgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1dpdGhFcnJv
ckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjayBj
b2x1bW5OYW1lczooaW5fY29sdW1uTmFtZXMgPyAmb19pbl9jb2x1bW5OYW1lcyA6IG5pbCkgbm90
ZXM6KGluX25vdGVzID8gJm9faW5fbm90ZXMgOiBuaWwpIHRpbWVzdGFtcDooaW5fdGltZXN0YW1w
ID8gJm9faW5fdGltZXN0YW1wIDogbmlsKSB2YWx1ZXM6KGluX3ZhbHVlcyA/ICZvX2luX3ZhbHVl
cyA6IG5pbCkgcGF5bG9hZDooaW5fcGF5bG9hZCA/ICZvX2luX3BheWxvYWQgOiBuaWwpIGRhdGFi
YXNlSWQ6KGluX2RhdGFiYXNlSWQgPyAmb19pbl9kYXRhYmFzZUlkIDogbmlsKSBzcWxFcnJvcjoo
aW5fc3FsRXJyb3IgPyAmb19pbl9zcWxFcnJvciA6IG5pbCkgc2NyZWVuQ29sb3I6KGluX3NjcmVl
bkNvbG9yID8gJm9faW5fc2NyZWVuQ29sb3IudmFsdWUoKSA6IG5pbCkgYWx0ZXJuYXRlQ29sb3Jz
Oihpbl9hbHRlcm5hdGVDb2xvcnMgPyAmb19pbl9hbHRlcm5hdGVDb2xvcnMgOiBuaWwpIHByaW50
Q29sb3I6KGluX3ByaW50Q29sb3IgPyAmb19pbl9wcmludENvbG9yLnZhbHVlKCkgOiBuaWwpXTsK
K30KKwordm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0
ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBjb25zdCBKU09OOjpBcnJheSYg
aW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgaW5fbm90ZXMsIGRvdWJsZSBpbl90aW1lc3Rh
bXAsIGNvbnN0IEpTT046Ok9iamVjdCYgaW5fdmFsdWVzLCBKU09OOjpWYWx1ZSBpbl9wYXlsb2Fk
LCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgSlNPTjo6T2JqZWN0JiBpbl9zcWxFcnJvciwgY29u
c3QgU3RyaW5nJiBpbl9zY3JlZW5Db2xvciwgY29uc3QgSlNPTjo6QXJyYXkmIGluX2FsdGVybmF0
ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBpbl9wcmludENvbG9yKQoreworICAgIGlmICghW21fZGVs
ZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihleGVjdXRlTm9PcHRpb25hbFBhcmFt
ZXRlcnNXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6Y29sdW1uTmFtZXM6bm90ZXM6
dGltZXN0YW1wOnZhbHVlczpwYXlsb2FkOmRhdGFiYXNlSWQ6c3FsRXJyb3I6c2NyZWVuQ29sb3I6
YWx0ZXJuYXRlQ29sb3JzOnByaW50Q29sb3I6KV0pIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpN
ZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS5leGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMnIHdh
cyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGlu
Z0Vycm9ycygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWQgZXJyb3JDYWxsYmFj
ayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJl
cG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJy
b3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJv
cnMoKTsKKyAgICB9OworCisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihOU0FycmF5Lyo8TlNT
dHJpbmc+Ki8gKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAs
IFJXSVByb3RvY29sSlNPTk9iamVjdCAqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnBh
eWxvYWQsIGludCBkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpzcWxFcnJv
ciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzIHNjcmVlbkNvbG9yLCBOU0FycmF5
Lyo8TlNTdHJpbmc+Ki8gKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVj
dXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yIHByaW50Q29sb3IpIHsKKyAgICAgICAg
UmVmPEpTT046Ok9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
KyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoY29sdW1uTmFt
ZXMsIEAiY29sdW1uTmFtZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJF
RF9QQVJBTUVURVIobm90ZXMsIEAibm90ZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9SRVFVSVJFRF9QQVJBTUVURVIodmFsdWVzLCBAInZhbHVlcyIpOworICAgICAgICBUSFJPV19F
WENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihwYXlsb2FkLCBAInBheWxvYWQiKTsKKyAg
ICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoc3FsRXJyb3IsIEAi
c3FsRXJyb3IiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVU
RVIoYWx0ZXJuYXRlQ29sb3JzLCBAImFsdGVybmF0ZUNvbG9ycyIpOworICAgICAgICByZXN1bHRP
YmplY3QtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgdG9KU09OU3RyaW5nQXJyYXkoY29sdW1u
TmFtZXMpKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBub3Rl
cyk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIHRpbWVz
dGFtcCk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFt2YWx1
ZXMgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0VmFsdWUoInBheWxv
YWQiX3MsIFtwYXlsb2FkIHRvSlNPTk9iamVjdF0pOworICAgICAgICByZXN1bHRPYmplY3QtPnNl
dEludGVnZXIoImRhdGFiYXNlSWQiX3MsIGRhdGFiYXNlSWQpOworICAgICAgICByZXN1bHRPYmpl
Y3QtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIFtzcWxFcnJvciB0b0pTT05PYmplY3RdKTsKKyAg
ICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCB0b1Byb3RvY29s
U3RyaW5nKHNjcmVlbkNvbG9yKSk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoImFs
dGVybmF0ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5nQXJyYXkoYWx0ZXJuYXRlQ29sb3JzKSk7Cisg
ICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCB0b1Byb3RvY29s
U3RyaW5nKHByaW50Q29sb3IpKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJl
c3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHRPYmplY3QpLCBmYWxzZSk7CisgICAgfTsK
KworICAgIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqb19pbl9jb2x1bW5OYW1lcyA9IHRvT2JqQ1N0
cmluZ0FycmF5KCZpbl9jb2x1bW5OYW1lcyk7CisgICAgTlNTdHJpbmcgKm9faW5fbm90ZXMgPSBp
bl9ub3RlczsKKyAgICBkb3VibGUgb19pbl90aW1lc3RhbXAgPSBpbl90aW1lc3RhbXA7CisgICAg
UldJUHJvdG9jb2xKU09OT2JqZWN0ICpvX2luX3ZhbHVlcyA9IFtbW1JXSVByb3RvY29sSlNPTk9i
amVjdCBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0OiZpbl92YWx1ZXNdIGF1dG9yZWxlYXNlXTsK
KyAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9faW5fcGF5bG9hZCA9IFtbW1JXSVByb3RvY29s
SlNPTk9iamVjdCBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0OiZpbl9wYXlsb2FkXSBhdXRvcmVs
ZWFzZV07CisgICAgaW50IG9faW5fZGF0YWJhc2VJZCA9IGluX2RhdGFiYXNlSWQ7CisgICAgVGVz
dFByb3RvY29sRGF0YWJhc2VFcnJvciAqb19pbl9zcWxFcnJvciA9IFtbW1Rlc3RQcm90b2NvbERh
dGFiYXNlRXJyb3IgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDomaW5fc3FsRXJyb3JdIGF1dG9y
ZWxlYXNlXTsKKyAgICBPcHRpb25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnM+
IG9faW5fc2NyZWVuQ29sb3IgPSBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sRGF0YWJh
c2VQcmltYXJ5Q29sb3JzPihpbl9zY3JlZW5Db2xvcik7CisgICAgaWYgKCFvX2luX3NjcmVlbkNv
bG9yKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3Io
QmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsICJQYXJhbWV0ZXIgJ3NjcmVlbkNvbG9y
JyBvZiBtZXRob2QgJ0RhdGFiYXNlLmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycycgY2Fubm90
IGJlIHByb2Nlc3NlZCJfcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgTlNBcnJheS8q
PE5TU3RyaW5nPiovICpvX2luX2FsdGVybmF0ZUNvbG9ycyA9IHRvT2JqQ1N0cmluZ0FycmF5KCZp
bl9hbHRlcm5hdGVDb2xvcnMpOworICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlRXhl
Y3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvcj4gb19pbl9wcmludENvbG9yID0gZnJv
bVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJh
bWV0ZXJzUHJpbnRDb2xvcj4oaW5fcHJpbnRDb2xvcik7CisgICAgaWYgKCFvX2luX3ByaW50Q29s
b3IpIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihC
YWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgIlBhcmFtZXRlciAncHJpbnRDb2xvcicg
b2YgbWV0aG9kICdEYXRhYmFzZS5leGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMnIGNhbm5vdCBi
ZSBwcm9jZXNzZWQiX3MpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgW21fZGVsZWdh
dGUgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxs
YmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrIGNvbHVtbk5hbWVzOm9faW5fY29s
dW1uTmFtZXMgbm90ZXM6b19pbl9ub3RlcyB0aW1lc3RhbXA6b19pbl90aW1lc3RhbXAgdmFsdWVz
Om9faW5fdmFsdWVzIHBheWxvYWQ6b19pbl9wYXlsb2FkIGRhdGFiYXNlSWQ6b19pbl9kYXRhYmFz
ZUlkIHNxbEVycm9yOm9faW5fc3FsRXJyb3Igc2NyZWVuQ29sb3I6b19pbl9zY3JlZW5Db2xvci52
YWx1ZSgpIGFsdGVybmF0ZUNvbG9yczpvX2luX2FsdGVybmF0ZUNvbG9ycyBwcmludENvbG9yOm9f
aW5fcHJpbnRDb2xvci52YWx1ZSgpXTsKK30KKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
KworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFy
YW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
KyNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KKworX19hdHRyaWJ1dGVfXygo
dmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3Vy
YXRpb24gOiBOU09iamVjdAorQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNl
dERhdGFiYXNlSGFuZGxlcjopIGlkPFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4g
ZGF0YWJhc2VIYW5kbGVyOworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29u
ZmlndXJhdGlvbi5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9u
Lm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRp
b25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5o
IgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2ltcG9ydCAiVGVzdFByb3Rv
Y29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5h
dGVEaXNwYXRjaGFibGVBZ2VudC5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFi
bGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVj
dG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgoreworICAg
IEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7CisgICAgaWQ8VGVz
dFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyPiBfZGF0YWJhc2VIYW5kbGVyOworfQorCist
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNv
bnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlm
ICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7Cisg
ICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQorCistICh2
b2lkKWRlYWxsb2MKK3sKKyAgICBbX2RhdGFiYXNlSGFuZGxlciByZWxlYXNlXTsKKyAgICBbc3Vw
ZXIgZGVhbGxvY107Cit9CisKKy0gKHZvaWQpc2V0RGF0YWJhc2VIYW5kbGVyOihpZDxUZXN0UHJv
dG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+KWhhbmRsZXIKK3sKKyAgICBpZiAoaGFuZGxlciA9
PSBfZGF0YWJhc2VIYW5kbGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBbX2RhdGFiYXNlSGFu
ZGxlciByZWxlYXNlXTsKKyAgICBfZGF0YWJhc2VIYW5kbGVyID0gW2hhbmRsZXIgcmV0YWluXTsK
KworICAgIGF1dG8gYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IG1ha2VVbmlxdWU8T2JqQ0luc3BlY3Rv
ckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+KGhhbmRsZXIpOworICAgIGF1dG8gYWx0ZXJuYXRl
QWdlbnQgPSBtYWtlVW5pcXVlPEFsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50PERhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXIsIEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+PigiRGF0
YWJhc2UiX3MsICpfY29udHJvbGxlciwgV1RGTW92ZShhbHRlcm5hdGVEaXNwYXRjaGVyKSk7Cisg
ICAgX2NvbnRyb2xsZXItPmFwcGVuZEV4dHJhQWdlbnQoV1RGTW92ZShhbHRlcm5hdGVBZ2VudCkp
OworfQorCistIChpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+KWRhdGFiYXNl
SGFuZGxlcgoreworICAgIHJldHVybiBfZGF0YWJhc2VIYW5kbGVyOworfQorCitAZW5kCisKKwor
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0
ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lt
cG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1l
c3BhY2UgSW5zcGVjdG9yOworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNw
YXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJu
LXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKworI2ltcG9ydCA8V2ViSW5z
cGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgorCisKK0BjbGFzcyBUZXN0UHJvdG9jb2xE
YXRhYmFzZUVycm9yOworCisKK3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2Nv
bERhdGFiYXNlUHJpbWFyeUNvbG9ycykgeworICAgIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFy
eUNvbG9yc1JlZCwKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNHcmVlbiwK
KyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNCbHVlLAorfTsKKwordHlwZWRl
ZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9u
YWxQYXJhbWV0ZXJzUHJpbnRDb2xvcikgeworICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0
ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JDeWFuLAorICAgIFRlc3RQcm90b2NvbERh
dGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JNYWdlbnRhLAorICAg
IFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29s
b3JZZWxsb3csCisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJh
bWV0ZXJzUHJpbnRDb2xvckJsYWNrLAorfTsKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwg
VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xv
cikgeworICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVy
c1ByaW50Q29sb3JDeWFuLAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlv
bmFsUGFyYW1ldGVyc1ByaW50Q29sb3JNYWdlbnRhLAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNl
RXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JZZWxsb3csCisgICAgVGVzdFBy
b3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckJsYWNr
LAorfTsKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGF0YWJhc2VF
eGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yKSB7CisgICAgVGVzdFByb3RvY29s
RGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQ3lhbiwKKyAgICBU
ZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JN
YWdlbnRhLAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0
ZXJzUHJpbnRDb2xvclllbGxvdywKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09w
dGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JCbGFjaywKK307CisKK3R5cGVkZWYgTlNfRU5VTShO
U0ludGVnZXIsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJz
UHJpbnRDb2xvcikgeworICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQ
YXJhbWV0ZXJzUHJpbnRDb2xvckN5YW4sCisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRl
Tm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yTWFnZW50YSwKKyAgICBUZXN0UHJvdG9jb2xE
YXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JZZWxsb3csCisgICAg
VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9y
QmxhY2ssCit9OworCisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQor
QGludGVyZmFjZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIDogUldJUHJvdG9jb2xKU09OT2Jq
ZWN0CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJp
bmcgKiwgaWQ+ICopcGF5bG9hZDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2Jq
ZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OworLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlIGNvZGU6KGludCljb2RlOworLyog
cmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICptZXNzYWdl
OworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgaW50IGNvZGU7
CitAZW5kCisKK0Bwcm90b2NvbCBUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXIgPE5T
T2JqZWN0PgorQG9wdGlvbmFsCistICh2b2lkKWV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNX
aXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sg
c3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmNvbHVtbk5h
bWVzLCBOU1N0cmluZyAqKm5vdGVzLCBkb3VibGUgKnRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09O
T2JqZWN0ICoqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipwYXlsb2FkLCBpbnQgKmRh
dGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipzcWxFcnJvciwgVGVzdFByb3Rv
Y29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzICpzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5n
PiovICoqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRp
b25hbFBhcmFtZXRlcnNQcmludENvbG9yICpwcmludENvbG9yKSlzdWNjZXNzQ2FsbGJhY2sgY29s
dW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKiljb2x1bW5OYW1lcyBub3RlczooTlNT
dHJpbmcgKiopbm90ZXMgdGltZXN0YW1wOihkb3VibGUgKil0aW1lc3RhbXAgdmFsdWVzOihSV0lQ
cm90b2NvbEpTT05PYmplY3QgKiopdmFsdWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVj
dCAqKilwYXlsb2FkIGRhdGFiYXNlSWQ6KGludCAqKWRhdGFiYXNlSWQgc3FsRXJyb3I6KFRlc3RQ
cm90b2NvbERhdGFiYXNlRXJyb3IgKiopc3FsRXJyb3Igc2NyZWVuQ29sb3I6KFRlc3RQcm90b2Nv
bERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqKXNjcmVlbkNvbG9yIGFsdGVybmF0ZUNvbG9yczooTlNB
cnJheS8qPE5TU3RyaW5nPiovICoqKWFsdGVybmF0ZUNvbG9ycyBwcmludENvbG9yOihUZXN0UHJv
dG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yICopcHJp
bnRDb2xvcjsKKy0gKHZvaWQpZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzV2l0aEVycm9yQ2Fs
bGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxs
YmFjazoodm9pZCheKShOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmNvbHVtbk5hbWVzLCBOU1N0cmlu
ZyAqbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqdmFsdWVz
LCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBUZXN0UHJv
dG9jb2xEYXRhYmFzZUVycm9yICpzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5
Q29sb3JzIHNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmFsdGVybmF0ZUNvbG9y
cywgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENv
bG9yIHByaW50Q29sb3IpKXN1Y2Nlc3NDYWxsYmFjayBjb2x1bW5OYW1lczooTlNBcnJheS8qPE5T
U3RyaW5nPiovICopY29sdW1uTmFtZXMgbm90ZXM6KE5TU3RyaW5nICopbm90ZXMgdGltZXN0YW1w
Oihkb3VibGUpdGltZXN0YW1wIHZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopdmFsdWVz
IHBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQgZGF0YWJhc2VJZDooaW50
KWRhdGFiYXNlSWQgc3FsRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKilzcWxFcnJv
ciBzY3JlZW5Db2xvcjooVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzKXNjcmVlbkNv
bG9yIGFsdGVybmF0ZUNvbG9yczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopYWx0ZXJuYXRlQ29s
b3JzIHByaW50Q29sb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJh
bWV0ZXJzUHJpbnRDb2xvcilwcmludENvbG9yOworQGVuZAorCisKKworCisjaW1wb3J0IDxXZWJJ
bnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+CisKKyMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbElu
dGVybmFsLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRo
LW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBv
cnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0
Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPHd0Zi9KU09O
VmFsdWVzLmg+CisKKworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAor
CisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0
dXJuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9S
V0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisK
K3RlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KK09wdGlvbmFsPE9iakNFbnVtVHlwZT4g
ZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOworCisKK2lubGluZSBTdHJp
bmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgdmFs
dWUpCit7CisgICAgc3dpdGNoKHZhbHVlKSB7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFz
ZVByaW1hcnlDb2xvcnNSZWQ6CisgICAgICAgIHJldHVybiAicmVkIl9zOworICAgIGNhc2UgVGVz
dFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzR3JlZW46CisgICAgICAgIHJldHVybiAiZ3Jl
ZW4iX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNCbHVlOgor
ICAgICAgICByZXR1cm4gImJsdWUiX3M7CisgICAgfQorfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUg
T3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzPiBmcm9tUHJvdG9jb2xT
dHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gInJlZCIpCisg
ICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNSZWQ7CisgICAg
aWYgKHZhbHVlID09ICJncmVlbiIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFz
ZVByaW1hcnlDb2xvcnNHcmVlbjsKKyAgICBpZiAodmFsdWUgPT0gImJsdWUiKQorICAgICAgICBy
ZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzQmx1ZTsKKyAgICByZXR1cm4g
V1RGOjpudWxsb3B0OworfQorCitpbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFBy
b3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvciB2YWx1
ZSkKK3sKKyAgICBzd2l0Y2godmFsdWUpIHsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNl
RXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JDeWFuOgorICAgICAgICByZXR1
cm4gImN5YW4iX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRp
b25hbFBhcmFtZXRlcnNQcmludENvbG9yTWFnZW50YToKKyAgICAgICAgcmV0dXJuICJtYWdlbnRh
Il9zOworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJh
bWV0ZXJzUHJpbnRDb2xvclllbGxvdzoKKyAgICAgICAgcmV0dXJuICJ5ZWxsb3ciX3M7CisgICAg
Y2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmlu
dENvbG9yQmxhY2s6CisgICAgICAgIHJldHVybiAiYmxhY2siX3M7CisgICAgfQorfQorCit0ZW1w
bGF0ZTw+CitpbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0
aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvcj4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09ICJjeWFuIikKKyAgICAgICAgcmV0dXJuIFRl
c3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JD
eWFuOworICAgIGlmICh2YWx1ZSA9PSAibWFnZW50YSIpCisgICAgICAgIHJldHVybiBUZXN0UHJv
dG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yTWFnZW50
YTsKKyAgICBpZiAodmFsdWUgPT0gInllbGxvdyIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9j
b2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yWWVsbG93Owor
ICAgIGlmICh2YWx1ZSA9PSAiYmxhY2siKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0
YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckJsYWNrOworICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK2lubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhU
ZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9y
IHZhbHVlKQoreworICAgIHN3aXRjaCh2YWx1ZSkgeworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0
YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckN5YW46CisgICAgICAg
IHJldHVybiAiY3lhbiJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFs
bE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JNYWdlbnRhOgorICAgICAgICByZXR1cm4gIm1h
Z2VudGEiX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25h
bFBhcmFtZXRlcnNQcmludENvbG9yWWVsbG93OgorICAgICAgICByZXR1cm4gInllbGxvdyJfczsK
KyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVy
c1ByaW50Q29sb3JCbGFjazoKKyAgICAgICAgcmV0dXJuICJibGFjayJfczsKKyAgICB9Cit9CisK
K3RlbXBsYXRlPD4KK2lubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVB
bGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gImN5YW4iKQorICAgICAgICByZXR1
cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRD
b2xvckN5YW47CisgICAgaWYgKHZhbHVlID09ICJtYWdlbnRhIikKKyAgICAgICAgcmV0dXJuIFRl
c3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JN
YWdlbnRhOworICAgIGlmICh2YWx1ZSA9PSAieWVsbG93IikKKyAgICAgICAgcmV0dXJuIFRlc3RQ
cm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JZZWxs
b3c7CisgICAgaWYgKHZhbHVlID09ICJibGFjayIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9j
b2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQmxhY2s7Cisg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKworaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3Ry
aW5nKFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRD
b2xvciB2YWx1ZSkKK3sKKyAgICBzd2l0Y2godmFsdWUpIHsKKyAgICBjYXNlIFRlc3RQcm90b2Nv
bERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckN5YW46CisgICAg
ICAgIHJldHVybiAiY3lhbiJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0
ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvck1hZ2VudGE6CisgICAgICAgIHJldHVybiAi
bWFnZW50YSJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9u
YWxQYXJhbWV0ZXJzUHJpbnRDb2xvclllbGxvdzoKKyAgICAgICAgcmV0dXJuICJ5ZWxsb3ciX3M7
CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVy
c1ByaW50Q29sb3JCbGFjazoKKyAgICAgICAgcmV0dXJuICJibGFjayJfczsKKyAgICB9Cit9CisK
K3RlbXBsYXRlPD4KK2lubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVO
b09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3I+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBT
dHJpbmcmIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSAiY3lhbiIpCisgICAgICAgIHJldHVy
biBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29s
b3JDeWFuOworICAgIGlmICh2YWx1ZSA9PSAibWFnZW50YSIpCisgICAgICAgIHJldHVybiBUZXN0
UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JNYWdl
bnRhOworICAgIGlmICh2YWx1ZSA9PSAieWVsbG93IikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90
b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvclllbGxvdzsK
KyAgICBpZiAodmFsdWUgPT0gImJsYWNrIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERh
dGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckJsYWNrOworICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK2lubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhU
ZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3Ig
dmFsdWUpCit7CisgICAgc3dpdGNoKHZhbHVlKSB7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRh
YmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JDeWFuOgorICAgICAgICBy
ZXR1cm4gImN5YW4iX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09w
dGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JNYWdlbnRhOgorICAgICAgICByZXR1cm4gIm1hZ2Vu
dGEiX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFy
YW1ldGVyc1ByaW50Q29sb3JZZWxsb3c6CisgICAgICAgIHJldHVybiAieWVsbG93Il9zOworICAg
IGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmlu
dENvbG9yQmxhY2s6CisgICAgICAgIHJldHVybiAiYmxhY2siX3M7CisgICAgfQorfQorCit0ZW1w
bGF0ZTw+CitpbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRp
b25hbFBhcmFtZXRlcnNQcmludENvbG9yPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5n
JiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gImN5YW4iKQorICAgICAgICByZXR1cm4gVGVz
dFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQ3lh
bjsKKyAgICBpZiAodmFsdWUgPT0gIm1hZ2VudGEiKQorICAgICAgICByZXR1cm4gVGVzdFByb3Rv
Y29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yTWFnZW50YTsK
KyAgICBpZiAodmFsdWUgPT0gInllbGxvdyIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xE
YXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JZZWxsb3c7CisgICAg
aWYgKHZhbHVlID09ICJibGFjayIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFz
ZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JCbGFjazsKKyAgICByZXR1cm4g
V1RGOjpudWxsb3B0OworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgor
I2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9y
L1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3Bl
Y3RvcjsKKworQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKERhdGFiYXNl
RG9tYWluKQorCisrICh2b2lkKV9wYXJzZURhdGFiYXNlSWQ6KE5TTnVtYmVyICoqKW91dFZhbHVl
IGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworKyAodm9pZClfcGFyc2VQcmltYXJ5Q29sb3JzOihO
U051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3Bh
cnNlQ29sb3JMaXN0OihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxv
YWQ6KGlkKXBheWxvYWQ7CisrICh2b2lkKV9wYXJzZUVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFz
ZUVycm9yICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworCitAZW5kCisKK0Bp
bXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKERhdGFiYXNlRG9tYWlu
KQorCisrICh2b2lkKV9wYXJzZURhdGFiYXNlSWQ6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21Q
YXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShw
YXlsb2FkLCBbTlNOdW1iZXIgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSAoTlNOdW1iZXIgKilw
YXlsb2FkOworfQorCisrICh2b2lkKV9wYXJzZVByaW1hcnlDb2xvcnM6KE5TTnVtYmVyICoqKW91
dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9CQURfVFlQRShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKKyAgICBPcHRpb25hbDxUZXN0
UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnM+IHJlc3VsdCA9IEluc3BlY3Rvcjo6ZnJvbVBy
b3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycz4ocGF5bG9hZCk7
CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfRU5VTV9WQUxVRShyZXN1bHQsIEAiUHJpbWFy
eUNvbG9ycyIpOworICAgICpvdXRWYWx1ZSA9IEAocmVzdWx0LnZhbHVlKCkpOworfQorCisrICh2
b2lkKV9wYXJzZUNvbG9yTGlzdDooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKW91dFZhbHVlIGZy
b21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQ
RShwYXlsb2FkLCBbTlNBcnJheS8qPE5TU3RyaW5nPiovIGNsYXNzXSk7CisgICAgKm91dFZhbHVl
ID0gKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKXBheWxvYWQ7Cit9CisKKysgKHZvaWQpX3BhcnNl
RXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6
KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQs
IFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbERh
dGFiYXNlRXJyb3IgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKK30KKworQGVuZAor
CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5q
c29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFBy
aXZhdGUuaD4KKyNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW1wb3J0IDx3dGYvSlNPTlZh
bHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisKK0BpbXBsZW1lbnRhdGlv
biBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yCisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBh
eWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQKK3sK
KyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKwor
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAIm1lc3Nh
Z2UiXSwgQCJtZXNzYWdlIik7CisgICAgc2VsZi5tZXNzYWdlID0gcGF5bG9hZFtAIm1lc3NhZ2Ui
XTsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtA
ImNvZGUiXSwgQCJjb2RlIik7CisgICAgc2VsZi5jb2RlID0gW3BheWxvYWRbQCJjb2RlIl0gaW50
ZWdlclZhbHVlXTsKKworICAgIHJldHVybiBzZWxmOworfQorLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9iamVjdAoreworICAg
IGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmplY3QgdG9KU09OT2Jq
ZWN0XS5nZXQoKV0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgcmV0dXJuIHNlbGY7Cit9
CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBj
b2RlOihpbnQpY29kZQoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAg
ICByZXR1cm4gbmlsOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJU
WShtZXNzYWdlLCBAIm1lc3NhZ2UiKTsKKworICAgIHNlbGYubWVzc2FnZSA9IG1lc3NhZ2U7Cisg
ICAgc2VsZi5jb2RlID0gY29kZTsKKworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXNl
dE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZQoreworICAgIFtzdXBlciBzZXRTdHJpbmc6bWVz
c2FnZSBmb3JLZXk6QCJtZXNzYWdlIl07Cit9CisKKy0gKE5TU3RyaW5nICopbWVzc2FnZQorewor
ICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAibWVzc2FnZSJdOworfQorCistICh2b2lk
KXNldENvZGU6KGludCljb2RlCit7CisgICAgW3N1cGVyIHNldEludGVnZXI6Y29kZSBmb3JLZXk6
QCJjb2RlIl07Cit9CisKKy0gKGludCljb2RlCit7CisgICAgcmV0dXJuIFtzdXBlciBpbnRlZ2Vy
Rm9yS2V5OkAiY29kZSJdOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24t
cmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4
cGVjdGVkL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24tcmVzdWx0Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yMTdkMDQ3YjdhOQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uLXJlc3VsdApAQCAtMCwwICsx
LDEyMjggQEAKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0
Zm9ybS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKy8v
IE5ldHdvcmsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIk5ldHdvcmsiLCBudWxs
KTsKKyNpZiBQTEFURk9STShNQUMpCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgi
TmV0d29yay5sb2FkUmVzb3VyY2UiLCBudWxsLCBbXSwgW10pOworI2VuZGlmIC8vIFBMQVRGT1JN
KE1BQykKKyNpZiBQTEFURk9STShNQUMpCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnQo
Ik5ldHdvcmsucmVzb3VyY2VMb2FkZWQiLCBudWxsLCBbXSk7CisjZW5kaWYgLy8gUExBVEZPUk0o
TUFDKQorSW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rlck5ldHdvcmtEaXNwYXRjaGVyID0gSW5zcGVj
dG9yQmFja2VuZC5yZWdpc3RlckRpc3BhdGNoZXIuYmluZChJbnNwZWN0b3JCYWNrZW5kLCAiTmV0
d29yayIpOworSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiTmV0d29yayIsIG51bGwp
OworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisK
KyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworI2luY2x1ZGUg
IlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JG
cm9udGVuZFJvdXRlci5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgQWx0ZXJu
YXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHZvaWQgc2V0QmFja2VuZERpc3Bh
dGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5k
RGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KKyAgICBCYWNrZW5kRGlzcGF0Y2hl
ciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVy
LmdldCgpOyB9Citwcml2YXRlOgorICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNr
ZW5kRGlzcGF0Y2hlcjsKK307CisKKworY2xhc3MgQWx0ZXJuYXRlTmV0d29ya0JhY2tlbmREaXNw
YXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAg
ICB2aXJ0dWFsIH5BbHRlcm5hdGVOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIoKSB7IH0KKyNpZiBQ
TEFURk9STShNQUMpCisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZShsb25nIGNhbGxJZCkg
PSAwOworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
CisjIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMg
QmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJp
bmc7CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK2NsYXNz
IEFsdGVybmF0ZU5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjsKKyNlbmRpZiAvLyBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworY2xhc3MgTmV0d29ya0JhY2tlbmREaXNw
YXRjaGVySGFuZGxlciB7CitwdWJsaWM6CisjaWYgUExBVEZPUk0oTUFDKQorICAgIHZpcnR1YWwg
dm9pZCBsb2FkUmVzb3VyY2UoRXJyb3JTdHJpbmcmKSA9IDA7CisjZW5kaWYgLy8gUExBVEZPUk0o
TUFDKQorcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgfk5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXIoKTsKK307CisKK2NsYXNzIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1
YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFJlZjxOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYs
IE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICB2b2lkIGRpc3BhdGNoKGxv
bmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBt
ZXNzYWdlKSBmaW5hbDsKK3ByaXZhdGU6CisjaWYgUExBVEZPUk0oTUFDKQorICAgIHZvaWQgbG9h
ZFJlc291cmNlKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRl
cnMpOworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVS
TkFURV9ESVNQQVRDSEVSUykKK3B1YmxpYzoKKyAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNo
ZXIoQWx0ZXJuYXRlTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVy
KSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KK3ByaXZh
dGU6CisgICAgQWx0ZXJuYXRlTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyKiBtX2FsdGVybmF0ZURp
c3BhdGNoZXIgeyBudWxscHRyIH07CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCitwcml2YXRlOgorICAgIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcihC
YWNrZW5kRGlzcGF0Y2hlciYsIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAg
ICBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50IHsgbnVsbHB0ciB9Owor
fTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5k
RGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5j
cHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1h
Yy1wbGF0Zm9ybS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJz
LmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5o
PgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJv
eWVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCisjaWYgRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tl
bmREaXNwYXRjaGVycy5oIgorI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworTmV0d29ya0JhY2tlbmREaXNw
YXRjaGVySGFuZGxlcjo6fk5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KKwor
UmVmPE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcj4gTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyOjpj
cmVhdGUoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBOZXR3b3JrQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBO
ZXR3b3JrQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIsIGFnZW50KSk7Cit9CisK
K05ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjo6TmV0d29ya0JhY2tlbmREaXNwYXRjaGVyKEJhY2tl
bmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVy
SGFuZGxlciogYWdlbnQpCisgICAgOiBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNr
ZW5kRGlzcGF0Y2hlcikKKyAgICAsIG1fYWdlbnQoYWdlbnQpCit7CisgICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKCJOZXR3b3JrIl9zLCB0aGlzKTsK
K30KKwordm9pZCBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVz
dElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQor
eworICAgIFJlZjxOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOworCisg
ICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVyczsKKyAgICBtZXNzYWdlLT5nZXRPYmpl
Y3QoInBhcmFtcyJfcywgcGFyYW1ldGVycyk7CisKKyNpZiBQTEFURk9STShNQUMpCisgICAgaWYg
KG1ldGhvZCA9PSAibG9hZFJlc291cmNlIikgeworICAgICAgICBsb2FkUmVzb3VyY2UocmVxdWVz
dElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRp
ZiAvLyBQTEFURk9STShNQUMpCisKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90
b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrLiIg
KyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7Cit9CisKKyNpZiBQTEFURk9STShNQUMpCit2
b2lkIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElk
LCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQoreworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQorICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKKyAgICAg
ICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2UocmVxdWVzdElkKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKKworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgIFJlZjxKU09OOjpPYmpl
Y3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9hZ2VudC0+bG9hZFJl
c291cmNlKGVycm9yKTsKKworICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCisgICAgICAgIG1fYmFj
a2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwg
ZmFsc2UpOworICAgIGVsc2UKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJv
dG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3Ip
KTsKK30KKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgorCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1
ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsK
KworY2xhc3MgRnJvbnRlbmRSb3V0ZXI7CisKK2NsYXNzIE5ldHdvcmtGcm9udGVuZERpc3BhdGNo
ZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIE5ldHdvcmtG
cm9udGVuZERpc3BhdGNoZXIoRnJvbnRlbmRSb3V0ZXImIGZyb250ZW5kUm91dGVyKSA6IG1fZnJv
bnRlbmRSb3V0ZXIoZnJvbnRlbmRSb3V0ZXIpIHsgfQorI2lmIFBMQVRGT1JNKE1BQykKKyAgICB2
b2lkIHJlc291cmNlTG9hZGVkKCk7CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorcHJpdmF0ZToK
KyAgICBGcm9udGVuZFJvdXRlciYgbV9mcm9udGVuZFJvdXRlcjsKK307CisKK30gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisK
KyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisjaWYgUExBVEZP
Uk0oTUFDKQordm9pZCBOZXR3b3JrRnJvbnRlbmREaXNwYXRjaGVyOjpyZXNvdXJjZUxvYWRlZCgp
Cit7CisgICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOworICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIk5ldHdvcmsu
cmVzb3VyY2VMb2FkZWQiX3MpOworCisgICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQoanNv
bk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKK30KKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCisK
K30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERp
c3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxh
dGZvcm0uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29s
VHlwZXMuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVj
dG9yIHsKKworCisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKworCisvLyBGb3J3YXJkIGRlY2xh
cmF0aW9ucy4KK25hbWVzcGFjZSBOZXR3b3JrIHsKKyNpZiBQTEFURk9STShNQUMpCitjbGFzcyBO
ZXR3b3JrRXJyb3I7CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorfSAvLyBOZXR3b3JrCisvLyBF
bmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCisKKworCisKK25hbWVzcGFjZSBOZXR3b3JrIHsK
KyNpZiBQTEFURk9STShNQUMpCitjbGFzcyBOZXR3b3JrRXJyb3IgOiBwdWJsaWMgSlNPTjo6T2Jq
ZWN0QmFzZSB7CitwdWJsaWM6CisgICAgZW51bSB7CisgICAgICAgIE5vRmllbGRzU2V0ID0gMCwK
KyAgICAgICAgTWVzc2FnZVNldCA9IDEgPDwgMCwKKyAgICAgICAgQ29kZVNldCA9IDEgPDwgMSwK
KyAgICAgICAgQWxsRmllbGRzU2V0ID0gKE1lc3NhZ2VTZXQgfCBDb2RlU2V0KQorICAgIH07CisK
KyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CisgICAgY2xhc3MgQnVpbGRlciB7CisgICAgcHJpdmF0
ZToKKyAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7CisKKyAgICAgICAgdGVt
cGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUg
fCBTVEVQPio+KHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcihSZWY8LypOZXR3
b3JrRXJyb3IqL0pTT046Ok9iamVjdD4mJiBvYmplY3QpCisgICAgICAgICAgICA6IG1fcmVzdWx0
KFdURk1vdmUob2JqZWN0KSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
U1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7
CisgICAgICAgIH0KKyAgICAgICAgZnJpZW5kIGNsYXNzIE5ldHdvcmtFcnJvcjsKKyAgICBwdWJs
aWM6CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1lc3NhZ2VTZXQ+JiBzZXRNZXNzYWdlKGNv
bnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBNZXNzYWdlU2V0KSwgcHJvcGVydHlfbWVzc2FnZV9hbHJlYWR5X3NldCk7Cisg
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJtZXNzYWdlIl9zLCB2YWx1ZSk7CisgICAg
ICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1lc3NhZ2VTZXQ+KCk7CisgICAgICAgIH0KKworICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgQ29kZVNldD4mIHNldENvZGUoaW50IHZhbHVlKQorICAgICAg
ICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29kZVNldCksIHByb3Bl
cnR5X2NvZGVfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldEludGVnZXIo
ImNvZGUiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29kZVNldD4o
KTsKKyAgICAgICAgfQorCisgICAgICAgIFJlZjxOZXR3b3JrRXJyb3I+IHJlbGVhc2UoKQorICAg
ICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQs
IHJlc3VsdF9pc19ub3RfcmVhZHkpOworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9m
KE5ldHdvcmtFcnJvcikgPT0gc2l6ZW9mKEpTT046Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsKKwor
ICAgICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4ganNvblJlc3VsdCA9IG1fcmVzdWx0LnJlbGVh
c2VOb25OdWxsKCk7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFdURk1vdmUoKnJlaW50ZXJw
cmV0X2Nhc3Q8UmVmPE5ldHdvcmtFcnJvcj4qPigmanNvblJlc3VsdCkpOworICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvKgorICAgICAqIFN5bnRo
ZXRpYyBjb25zdHJ1Y3RvcjoKKyAgICAgKiBSZWY8TmV0d29ya0Vycm9yPiByZXN1bHQgPSBOZXR3
b3JrRXJyb3I6OmNyZWF0ZSgpCisgICAgICogICAgIC5zZXRNZXNzYWdlKC4uLikKKyAgICAgKiAg
ICAgLnNldENvZGUoLi4uKQorICAgICAqICAgICAucmVsZWFzZSgpOworICAgICAqLworICAgIHN0
YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOworICAgIH0KK307
CisKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCit9IC8vIE5ldHdvcmsKKworCisKK30gLy8gbmFt
ZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9i
amVjdHMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMt
d2l0aC1tYWMtcGxhdGZvcm0uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2Jq
ZWN0cy5oIgorCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFByb3RvY29s
IHsKKworCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2luY2x1
ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworQHByb3RvY29sIFRlc3RQcm90b2NvbE5ldHdvcmtEb21h
aW5IYW5kbGVyOworCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCitjbGFzcyBPYmpDSW5zcGVj
dG9yTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZU5ldHdv
cmtCYWNrZW5kRGlzcGF0Y2hlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJs
aWM6CisgICAgT2JqQ0luc3BlY3Rvck5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJv
dG9jb2xOZXR3b3JrRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxl
cjsgfQorI2lmIFBMQVRGT1JNKE1BQykKKyAgICB2b2lkIGxvYWRSZXNvdXJjZShsb25nIHJlcXVl
c3RJZCkgZmluYWw7CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorcHJpdmF0ZToKKyAgICBSZXRh
aW5QdHI8aWQ8VGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJh
Y2tlbmREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRl
ZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJv
dG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVy
bmFsLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW5jbHVk
ZSA8d3RmL0pTT05WYWx1ZXMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3ZvaWQgT2Jq
Q0luc3BlY3Rvck5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlKGxvbmcgcmVx
dWVzdElkKQoreworICAgIGlmICghI2lmIFBMQVRGT1JNKE1BQykKK1ttX2RlbGVnYXRlIHJlc3Bv
bmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IobG9hZFJlc291cmNlV2l0aEVycm9yQ2FsbGJhY2s6c3Vj
Y2Vzc0NhbGxiYWNrOildCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKSkgeworICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERp
c3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmsubG9hZFJlc291cmNlJyB3YXMgbm90
IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJv
cnMoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBe
KE5TU3RyaW5nICplcnJvcikgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQ
cm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBl
cnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7
CisgICAgfTsKKworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBe
eworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBK
U09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgfTsKKyNlbmRpZiAvLyBQTEFURk9S
TShNQUMpCisjaWYgUExBVEZPUk0oTUFDKQorCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorI2lm
IFBMQVRGT1JNKE1BQykKKyAgICBbbV9kZWxlZ2F0ZSBsb2FkUmVzb3VyY2VXaXRoRXJyb3JDYWxs
YmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOworI2Vu
ZGlmIC8vIFBMQVRGT1JNKE1BQykKK30KKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKwor
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8V2ViSW5zcGVj
dG9yL1Rlc3RQcm90b2NvbC5oPgorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVs
dCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0CitA
cHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluLCBzZXR0ZXI9c2V0TmV0d29ya0hhbmRsZXI6KSBp
ZDxUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluSGFuZGxlcj4gbmV0d29ya0hhbmRsZXI7CitAcHJv
cGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5FdmVu
dERpc3BhdGNoZXIgKm5ldHdvcmtFdmVudERpc3BhdGNoZXI7CitAZW5kCisKKworIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRp
b24uaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbXBvcnQgIlRlc3RQ
cm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0
ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21l
bnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIElu
c3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KK3sK
KyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworICAgIGlk
PFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5IYW5kbGVyPiBfbmV0d29ya0hhbmRsZXI7CisgICAg
VGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkV2ZW50RGlzcGF0Y2hlciAqX25ldHdvcmtFdmVudERp
c3BhdGNoZXI7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21l
bnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgoreworICAgIHNlbGYgPSBbc3Vw
ZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIEFTU0VS
VChjb250cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAgcmV0dXJu
IHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIFtfbmV0d29ya0hhbmRsZXIgcmVs
ZWFzZV07CisgICAgW19uZXR3b3JrRXZlbnREaXNwYXRjaGVyIHJlbGVhc2VdOworICAgIFtzdXBl
ciBkZWFsbG9jXTsKK30KKworLSAodm9pZClzZXROZXR3b3JrSGFuZGxlcjooaWQ8VGVzdFByb3Rv
Y29sTmV0d29ya0RvbWFpbkhhbmRsZXI+KWhhbmRsZXIKK3sKKyAgICBpZiAoaGFuZGxlciA9PSBf
bmV0d29ya0hhbmRsZXIpCisgICAgICAgIHJldHVybjsKKworICAgIFtfbmV0d29ya0hhbmRsZXIg
cmVsZWFzZV07CisgICAgX25ldHdvcmtIYW5kbGVyID0gW2hhbmRsZXIgcmV0YWluXTsKKworICAg
IGF1dG8gYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IG1ha2VVbmlxdWU8T2JqQ0luc3BlY3Rvck5ldHdv
cmtCYWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7CisgICAgYXV0byBhbHRlcm5hdGVBZ2VudCA9
IG1ha2VVbmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8TmV0d29ya0JhY2tlbmREaXNw
YXRjaGVyLCBBbHRlcm5hdGVOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI+PigiTmV0d29yayJfcywg
Kl9jb250cm9sbGVyLCBXVEZNb3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIpKTsKKyAgICBfY29udHJv
bGxlci0+YXBwZW5kRXh0cmFBZ2VudChXVEZNb3ZlKGFsdGVybmF0ZUFnZW50KSk7Cit9CisKKy0g
KGlkPFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5IYW5kbGVyPiluZXR3b3JrSGFuZGxlcgorewor
ICAgIHJldHVybiBfbmV0d29ya0hhbmRsZXI7Cit9CisKKy0gKFRlc3RQcm90b2NvbE5ldHdvcmtE
b21haW5FdmVudERpc3BhdGNoZXIgKiluZXR3b3JrRXZlbnREaXNwYXRjaGVyCit7CisgICAgaWYg
KCFfbmV0d29ya0V2ZW50RGlzcGF0Y2hlcikKKyAgICAgICAgX25ldHdvcmtFdmVudERpc3BhdGNo
ZXIgPSBbW1Rlc3RQcm90b2NvbE5ldHdvcmtEb21haW5FdmVudERpc3BhdGNoZXIgYWxsb2NdIGlu
aXRXaXRoQ29udHJvbGxlcjpfY29udHJvbGxlcl07CisgICAgcmV0dXJuIF9uZXR3b3JrRXZlbnRE
aXNwYXRjaGVyOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25m
aWd1cmF0aW9uLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNo
ZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0
aC1tYWMtcGxhdGZvcm0uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisK
K3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9j
b2xOZXR3b3JrRG9tYWluRXZlbnREaXNwYXRjaGVyCit7CisgICAgQXVnbWVudGFibGVJbnNwZWN0
b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
Q29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCit7
CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVy
biBuaWw7CisgICAgQVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250cm9sbGVyID0gY29udHJv
bGxlcjsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClyZXNvdXJjZUxvYWRlZAorewor
ICAgIGNvbnN0IEZyb250ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29udHJvbGxlci0+ZnJvbnRlbmRS
b3V0ZXIoKTsKKworICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJO
ZXR3b3JrLnJlc291cmNlTG9hZGVkIl9zKTsKKyAgICByb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNz
YWdlLT50b0pTT05TdHJpbmcoKSk7Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1t
YWMtcGxhdGZvcm0uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKworI2ltcG9ydCA8V2ViSW5z
cGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgorCisKKyNpZiBQTEFURk9STShNQUMpCitA
Y2xhc3MgVGVzdFByb3RvY29sTmV0d29ya0Vycm9yOworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykK
KworCisKKworI2lmIFBMQVRGT1JNKE1BQykKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJk
ZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xOZXR3b3JrRXJyb3IgOiBSV0lQcm90
b2NvbEpTT05PYmplY3QKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlv
bmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkOworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
UHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7CistIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZTooaW50
KWNvZGU7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJp
bmcgKm1lc3NhZ2U7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWdu
KSBpbnQgY29kZTsKK0BlbmQKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCisKK0Bwcm90b2NvbCBU
ZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluSGFuZGxlciA8TlNPYmplY3Q+CitAb3B0aW9uYWwKKyNp
ZiBQTEFURk9STShNQUMpCistICh2b2lkKWxvYWRSZXNvdXJjZVdpdGhFcnJvckNhbGxiYWNrOih2
b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZv
aWQoXikodm9pZCkpc3VjY2Vzc0NhbGxiYWNrOworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKK0Bl
bmQKKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNl
IFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5FdmVudERpc3BhdGNoZXIgOiBOU09iamVjdAorLSAo
dm9pZClyZXNvdXJjZUxvYWRlZDsKK0BlbmQKKworCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJ
UHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+CisKKyMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0
Zm9ybS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNp
bXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFBy
aXZhdGUuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29u
dHJvbGxlci5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKworQGludGVyZmFjZSBUZXN0
UHJvdG9jb2xOZXR3b3JrRG9tYWluRXZlbnREaXNwYXRjaGVyIChQcml2YXRlKQorLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooSW5zcGVjdG9yOjpBdWdtZW50YWJsZUluc3BlY3Rv
ckNvbnRyb2xsZXIqKWNvbnRyb2xsZXI7CitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xJbnRlcm5hbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdp
dGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3Iv
UldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Igewor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+CitPcHRpb25hbDxPYmpDRW51bVR5cGU+
IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKKworCisKK30gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0K
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1w
bGF0Zm9ybS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
KyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorCisjaW1wb3J0ICJUZXN0
UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKKyNpbXBvcnQg
PFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisKK3VzaW5nIG5h
bWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zIChOZXR3b3JrRG9tYWluKQorCisjaWYgUExBVEZPUk0oTUFDKQorKyAodm9pZClfcGFyc2VO
ZXR3b3JrRXJyb3I6KFRlc3RQcm90b2NvbE5ldHdvcmtFcnJvciAqKilvdXRWYWx1ZSBmcm9tUGF5
bG9hZDooaWQpcGF5bG9hZDsKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCisKK0BlbmQKKworQGlt
cGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoTmV0d29ya0RvbWFpbikK
KworI2lmIFBMQVRGT1JNKE1BQykKKysgKHZvaWQpX3BhcnNlTmV0d29ya0Vycm9yOihUZXN0UHJv
dG9jb2xOZXR3b3JrRXJyb3IgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sK
KyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkg
Y2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbE5ldHdvcmtFcnJvciBhbGxv
Y10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOworfQorI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykK
KworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1t
CisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFBy
b3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
LmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5o
PgorI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+
CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworI2lmIFBMQVRGT1JNKE1BQykKK0Bp
bXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xOZXR3b3JrRXJyb3IKKworLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICop
cGF5bG9hZAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1
cm4gbmlsOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXls
b2FkW0AibWVzc2FnZSJdLCBAIm1lc3NhZ2UiKTsKKyAgICBzZWxmLm1lc3NhZ2UgPSBwYXlsb2Fk
W0AibWVzc2FnZSJdOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJU
WShwYXlsb2FkW0AiY29kZSJdLCBAImNvZGUiKTsKKyAgICBzZWxmLmNvZGUgPSBbcGF5bG9hZFtA
ImNvZGUiXSBpbnRlZ2VyVmFsdWVdOworCisgICAgcmV0dXJuIHNlbGY7Cit9CistIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopb2Jq
ZWN0Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEpTT05PYmplY3Q6W29iamVj
dCB0b0pTT05PYmplY3RdLmdldCgpXSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICByZXR1
cm4gc2VsZjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTWVzc2FnZTooTlNTdHJpbmcg
KiltZXNzYWdlIGNvZGU6KGludCljb2RlCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0
XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJ
UkVEX1BST1BFUlRZKG1lc3NhZ2UsIEAibWVzc2FnZSIpOworCisgICAgc2VsZi5tZXNzYWdlID0g
bWVzc2FnZTsKKyAgICBzZWxmLmNvZGUgPSBjb2RlOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisK
Ky0gKHZvaWQpc2V0TWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlCit7CisgICAgW3N1cGVyIHNl
dFN0cmluZzptZXNzYWdlIGZvcktleTpAIm1lc3NhZ2UiXTsKK30KKworLSAoTlNTdHJpbmcgKilt
ZXNzYWdlCit7CisgICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJtZXNzYWdlIl07Cit9
CisKKy0gKHZvaWQpc2V0Q29kZTooaW50KWNvZGUKK3sKKyAgICBbc3VwZXIgc2V0SW50ZWdlcjpj
b2RlIGZvcktleTpAImNvZGUiXTsKK30KKworLSAoaW50KWNvZGUKK3sKKyAgICByZXR1cm4gW3N1
cGVyIGludGVnZXJGb3JLZXk6QCJjb2RlIl07Cit9CisKK0BlbmQKKyNlbmRpZiAvLyBQTEFURk9S
TShNQUMpCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVk
L2RvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWluLWRlYnVnZ2FibGVUeXBl
cy5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNjRl
YzViOTA4MTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uLXJl
c3VsdApAQCAtMCwwICsxLDEwMzAgQEAKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5k
Q29tbWFuZHMuanMKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVi
dWdnYWJsZVR5cGVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworLy8gRG9tYWluCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJEb21haW4i
LCBudWxsKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJEb21haW4uQ29tbWFu
ZCIsIG51bGwsIFtdLCBbXSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnQoIkRvbWFp
bi5FdmVudCIsIG51bGwsIFtdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW5EaXNw
YXRjaGVyID0gSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRpc3BhdGNoZXIuYmluZChJbnNwZWN0
b3JCYWNrZW5kLCAiRG9tYWluIik7CitJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJE
b21haW4iLCBbIndlYi1wYWdlIl0pOworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29t
bWFuZHMuanMKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hl
cnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxl
VHlwZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisj
cHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Igewor
CitjbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdm9pZCBz
ZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hl
cikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQorICAgIEJh
Y2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFj
a2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KK3ByaXZhdGU6CisgICAgUmVmUHRyPEJhY2tlbmREaXNw
YXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOworfTsKKworCitjbGFzcyBBbHRlcm5hdGVEb21h
aW5CYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7
CitwdWJsaWM6CisgICAgdmlydHVhbCB+QWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIo
KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChsb25nIGNhbGxJZCkgPSAwOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKKyMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmRE
aXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJsZVR5cGVz
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3R5cGVkZWYgU3Ry
aW5nIEVycm9yU3RyaW5nOworCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCitjbGFzcyBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjsKKyNlbmRpZiAv
LyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworY2xhc3MgRG9tYWlu
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgQ29t
bWFuZChFcnJvclN0cmluZyYpID0gMDsKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5Eb21haW5C
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKK307CisKK2NsYXNzIERvbWFpbkJhY2tlbmREaXNw
YXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUmVmPERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFj
a2VuZERpc3BhdGNoZXImLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICB2
b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpT
T046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5hbDsKK3ByaXZhdGU6CisgICAgdm9pZCBDb21tYW5k
KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOworI2lm
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorcHVibGljOgorICAgIHZv
aWQgc2V0QWx0ZXJuYXRlRGlzcGF0Y2hlcihBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hl
ciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5h
dGVEaXNwYXRjaGVyOyB9Citwcml2YXRlOgorICAgIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNw
YXRjaGVyKiBtX2FsdGVybmF0ZURpc3BhdGNoZXIgeyBudWxscHRyIH07CisjZW5kaWYgLy8gRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCitwcml2YXRlOgorICAgIERvbWFp
bkJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiwgRG9tYWluQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyKik7CisgICAgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2Fn
ZW50IHsgbnVsbHB0ciB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5k
IEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJh
Y2tlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBk
b21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RCYWNrZW5k
RGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250
ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYv
TmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpZiBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyNpbmNsdWRlICJUZXN0QWx0
ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitEb21haW5C
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5Eb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIo
KSB7IH0KKworUmVmPERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBEb21haW5CYWNrZW5kRGlzcGF0
Y2hlcjo6Y3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgRG9tYWlu
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsK
K30KKworRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkRvbWFpbkJhY2tlbmREaXNwYXRjaGVyKEJh
Y2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgRG9tYWluQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyKiBhZ2VudCkKKyAgICA6IFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJh
Y2tlbmREaXNwYXRjaGVyKQorICAgICwgbV9hZ2VudChhZ2VudCkKK3sKKyAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oIkRvbWFpbiJfcywgdGhpcyk7
Cit9CisKK3ZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVz
dElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQor
eworICAgIFJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CisKKyAg
ICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOworICAgIG1lc3NhZ2UtPmdldE9iamVj
dCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsKKworICAgIGlmIChtZXRob2QgPT0gIkNvbW1hbmQi
KSB7CisgICAgICAgIENvbW1hbmQocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFBy
b3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi4i
ICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOworfQorCit2b2lkIERvbWFpbkJhY2tlbmRE
aXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYm
KQoreworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorICAgIGlm
IChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVy
LT5Db21tYW5kKHJlcXVlc3RJZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYgLy8g
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyAgICBFcnJvclN0cmlu
ZyBlcnJvcjsKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOworICAgIG1fYWdlbnQtPkNvbW1hbmQoZXJyb3IpOworCisgICAgaWYgKCFlcnJvci5s
ZW5ndGgoKSkKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVl
c3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7CisgICAgZWxzZQorICAgICAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2
ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
KworIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4g
RmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3Mg
RnJvbnRlbmRSb3V0ZXI7CisKK2NsYXNzIERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlciB7CisgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgRG9tYWluRnJvbnRlbmREaXNw
YXRjaGVyKEZyb250ZW5kUm91dGVyJiBmcm9udGVuZFJvdXRlcikgOiBtX2Zyb250ZW5kUm91dGVy
KGZyb250ZW5kUm91dGVyKSB7IH0KKyAgICB2b2lkIEV2ZW50KCk7Citwcml2YXRlOgorICAgIEZy
b250ZW5kUm91dGVyJiBtX2Zyb250ZW5kUm91dGVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbgorLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordm9pZCBEb21haW5Gcm9udGVuZERpc3Bh
dGNoZXI6OkV2ZW50KCkKK3sKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpT
T046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9k
Il9zLCAiRG9tYWluLkV2ZW50Il9zKTsKKworICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50
KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorCisjIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFByb3Rv
Y29sIHsKKworCisKKworCisKKworCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgK
KworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisKKyNpbmNsdWRlIDx3dGYvT3B0aW9u
YWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0
b3IgeworCituYW1lc3BhY2UgUHJvdG9jb2wgeworCisKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9j
b2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sT2JqZWN0cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNw
YXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLWRlYnVn
Z2FibGVUeXBlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlz
cGF0Y2hlcnMuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKK0Bwcm90b2NvbCBUZXN0
UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyOworCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwor
CitjbGFzcyBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJs
aWMgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIgeworICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOworcHVibGljOgorICAgIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0
Y2hlcihpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVs
ZWdhdGUgPSBoYW5kbGVyOyB9CisgICAgdm9pZCBDb21tYW5kKGxvbmcgcmVxdWVzdElkKSBmaW5h
bDsKK3ByaXZhdGU6CisgICAgUmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhh
bmRsZXI+PiBtX2RlbGVnYXRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNp
bXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSAiVGVz
dFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9y
IHsKKwordm9pZCBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQo
bG9uZyByZXF1ZXN0SWQpCit7CisgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0
b3I6QHNlbGVjdG9yKENvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6KV0p
IHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1
ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uQ29tbWFu
ZCcgd2FzIG5vdCBmb3VuZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQ
ZW5kaW5nRXJyb3JzKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZCBlcnJvckNh
bGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2
ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGlu
Z0Vycm9ycygpOworICAgIH07CisKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeeworICAgICAg
ICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmpl
Y3Q6OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgfTsKKworICAgIFttX2RlbGVnYXRlIENvbW1hbmRX
aXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2Fs
bGJhY2tdOworfQorCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4K
KworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRl
c3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAorQHByb3BlcnR5IChub25hdG9taWMs
IHJldGFpbiwgc2V0dGVyPXNldERvbWFpbkhhbmRsZXI6KSBpZDxUZXN0UHJvdG9jb2xEb21haW5E
b21haW5IYW5kbGVyPiBkb21haW5IYW5kbGVyOworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRv
bmx5KSBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKmRvbWFpbkV2ZW50
RGlzcGF0Y2hlcjsKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3Vy
YXRpb24uaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMu
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0
ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbElu
dGVybmFsLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+CisjaW1w
b3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVy
cy5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJz
Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0
UHJvdG9jb2xDb25maWd1cmF0aW9uCit7CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9s
bGVyKiBfY29udHJvbGxlcjsKKyAgICBpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVy
PiBfZG9tYWluSGFuZGxlcjsKKyAgICBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3Bh
dGNoZXIgKl9kb21haW5FdmVudERpc3BhdGNoZXI7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0
V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxl
cgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICBy
ZXR1cm4gbmlsOworICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNv
bnRyb2xsZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAg
IFtfZG9tYWluSGFuZGxlciByZWxlYXNlXTsKKyAgICBbX2RvbWFpbkV2ZW50RGlzcGF0Y2hlciBy
ZWxlYXNlXTsKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0gKHZvaWQpc2V0RG9tYWluSGFu
ZGxlcjooaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4paGFuZGxlcgoreworICAg
IGlmIChoYW5kbGVyID09IF9kb21haW5IYW5kbGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBb
X2RvbWFpbkhhbmRsZXIgcmVsZWFzZV07CisgICAgX2RvbWFpbkhhbmRsZXIgPSBbaGFuZGxlciBy
ZXRhaW5dOworCisgICAgYXV0byBhbHRlcm5hdGVEaXNwYXRjaGVyID0gbWFrZVVuaXF1ZTxPYmpD
SW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXI+KGhhbmRsZXIpOworICAgIGF1dG8gYWx0
ZXJuYXRlQWdlbnQgPSBtYWtlVW5pcXVlPEFsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50PERvbWFp
bkJhY2tlbmREaXNwYXRjaGVyLCBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4+KCJE
b21haW4iX3MsICpfY29udHJvbGxlciwgV1RGTW92ZShhbHRlcm5hdGVEaXNwYXRjaGVyKSk7Cisg
ICAgX2NvbnRyb2xsZXItPmFwcGVuZEV4dHJhQWdlbnQoV1RGTW92ZShhbHRlcm5hdGVBZ2VudCkp
OworfQorCistIChpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPilkb21haW5IYW5k
bGVyCit7CisgICAgcmV0dXJuIF9kb21haW5IYW5kbGVyOworfQorCistIChUZXN0UHJvdG9jb2xE
b21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKilkb21haW5FdmVudERpc3BhdGNoZXIKK3sKKyAg
ICBpZiAoIV9kb21haW5FdmVudERpc3BhdGNoZXIpCisgICAgICAgIF9kb21haW5FdmVudERpc3Bh
dGNoZXIgPSBbW1Rlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciBhbGxvY10g
aW5pdFdpdGhDb250cm9sbGVyOl9jb250cm9sbGVyXTsKKyAgICByZXR1cm4gX2RvbWFpbkV2ZW50
RGlzcGF0Y2hlcjsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29u
ZmlndXJhdGlvbi5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRj
aGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dh
YmxlVHlwZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5n
IG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xEb21h
aW5Eb21haW5FdmVudERpc3BhdGNoZXIKK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRy
b2xsZXIqIF9jb250cm9sbGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9s
bGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBz
ZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsK
KyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwor
ICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKUV2ZW50Cit7CisgICAgY29uc3QgRnJvbnRl
bmRSb3V0ZXImIHJvdXRlciA9IF9jb250cm9sbGVyLT5mcm9udGVuZFJvdXRlcigpOworCisgICAg
UmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwor
ICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7
CisgICAgcm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworfQor
CitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1t
CisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbgorLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRp
b24uaD4KKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgor
CisKKworCisKKworCisKK0Bwcm90b2NvbCBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVy
IDxOU09iamVjdD4KK0BvcHRpb25hbAorLSAodm9pZClDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6
KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoo
dm9pZCheKSh2b2lkKSlzdWNjZXNzQ2FsbGJhY2s7CitAZW5kCisKK19fYXR0cmlidXRlX18oKHZp
c2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xEb21haW5Eb21h
aW5FdmVudERpc3BhdGNoZXIgOiBOU09iamVjdAorLSAodm9pZClFdmVudDsKK0BlbmQKKworCisj
aW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3Rz
Lmg+CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKKworIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbEludGVybmFsLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBk
b21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJv
dG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVu
dGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgor
CitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAoUHJp
dmF0ZSkKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEluc3BlY3Rvcjo6QXVn
bWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyOworQGVuZAorCisKKyMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBkb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0IDxXZWJJ
bnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+CisKK25hbWVzcGFjZSBJbnNw
ZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+CitPcHRpb25hbDxPYmpD
RW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKKworfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxl
VHlwZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisj
aW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKworI2ltcG9ydCAiVGVzdFBy
b3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCisjaW1wb3J0IDxX
ZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorCit1c2luZyBuYW1l
c3BhY2UgSW5zcGVjdG9yOworCisKKworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1t
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLWRlYnVnZ2FibGVUeXBl
cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBv
cnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucy5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVj
dFByaXZhdGUuaD4KKyNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW1wb3J0IDx3dGYvSlNP
TlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisKKyMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW4tdGFyZ2V0VHlwZS1tYXRj
aGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWluLXRhcmdldFR5cGUt
bWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tcmVzdWx0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5lY2M3MjFjNTI4ZQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9k
b21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1yZXN1
bHQKQEAgLTAsMCArMSwxMDMwIEBACisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENv
bW1hbmRzLmpzCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdl
dFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworLy8gRG9tYWluCitJbnNwZWN0b3JCYWNrZW5k
LnJlZ2lzdGVyRG9tYWluKCJEb21haW4iLCBudWxsKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0
ZXJDb21tYW5kKCJEb21haW4uQ29tbWFuZCIsIFsicGFnZSIsICJ3b3JrZXIiXSwgW10sIFtdKTsK
K0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudCgiRG9tYWluLkV2ZW50IiwgbnVsbCwgW10p
OworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbkRpc3BhdGNoZXIgPSBJbnNwZWN0b3JC
YWNrZW5kLnJlZ2lzdGVyRGlzcGF0Y2hlci5iaW5kKEluc3BlY3RvckJhY2tlbmQsICJEb21haW4i
KTsKK0luc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkRvbWFpbiIsIFsicGFnZSJdKTsK
KyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdn
YWJsZVR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENI
RVJTKQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Ig
eworCitjbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdm9p
ZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0
Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQorICAg
IEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1f
YmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KK3ByaXZhdGU6CisgICAgUmVmUHRyPEJhY2tlbmRE
aXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOworfTsKKworCitjbGFzcyBBbHRlcm5hdGVE
b21haW5CYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hl
ciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+QWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNo
ZXIoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChsb25nIGNhbGxJZCkgPSAwOworfTsK
KworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tl
bmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJz
LmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZS1t
YXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRlc3RQcm90
b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKKyNpZiBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK2NsYXNzIEFsdGVybmF0ZURvbWFp
bkJhY2tlbmREaXNwYXRjaGVyOworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQorCitjbGFzcyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewor
cHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBDb21tYW5kKEVycm9yU3RyaW5nJikgPSAwOworcHJv
dGVjdGVkOgorICAgIHZpcnR1YWwgfkRvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOwor
fTsKKworY2xhc3MgRG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxl
bWVudGFsQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8RG9tYWlu
QmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIERvbWFpbkJhY2tl
bmREaXNwYXRjaGVySGFuZGxlciopOworICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQs
IGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFs
OworcHJpdmF0ZToKKyAgICB2b2lkIENvbW1hbmQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09O
OjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCitwdWJsaWM6CisgICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFs
dGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1f
YWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KK3ByaXZhdGU6Cisg
ICAgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIqIG1fYWx0ZXJuYXRlRGlzcGF0Y2hl
ciB7IG51bGxwdHIgfTsKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKK3ByaXZhdGU6CisgICAgRG9tYWluQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERp
c3BhdGNoZXImLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICBEb21haW5C
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQgeyBudWxscHRyIH07Cit9OworCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVy
cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRv
bWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0QmFja2VuZERp
c3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVu
ZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL05l
dmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCisjaWYgRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjaW5jbHVkZSAiVGVzdEFsdGVy
bmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgorI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworRG9tYWluQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+RG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCkg
eyB9CisKK1JlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gRG9tYWluQmFja2VuZERpc3BhdGNo
ZXI6OmNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIERvbWFpbkJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgRG9tYWluQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIsIGFnZW50KSk7Cit9
CisKK0RvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihCYWNr
ZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlciogYWdlbnQpCisgICAgOiBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNr
ZW5kRGlzcGF0Y2hlcikKKyAgICAsIG1fYWdlbnQoYWdlbnQpCit7CisgICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKCJEb21haW4iX3MsIHRoaXMpOwor
fQorCit2b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJ
ZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKK3sK
KyAgICBSZWY8RG9tYWluQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOworCisgICAg
UmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVyczsKKyAgICBtZXNzYWdlLT5nZXRPYmplY3Qo
InBhcmFtcyJfcywgcGFyYW1ldGVycyk7CisKKyAgICBpZiAobWV0aG9kID09ICJDb21tYW5kIikg
eworICAgICAgICBDb21tYW5kKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90
b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uIiAr
IG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKK30KKwordm9pZCBEb21haW5CYWNrZW5kRGlz
cGF0Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikK
K3sKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyAgICBpZiAo
bV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+
Q29tbWFuZChyZXF1ZXN0SWQpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmIC8vIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCisgICAgRXJyb3JTdHJpbmcg
ZXJyb3I7CisgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKKyAgICBtX2FnZW50LT5Db21tYW5kKGVycm9yKTsKKworICAgIGlmICghZXJyb3IubGVu
Z3RoKCkpCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0
SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOworICAgIGVsc2UKKyAgICAgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVy
RXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisK
KyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZp
bGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUu
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDx3dGYv
SlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKKworY2xhc3MgRnJvbnRlbmRSb3V0ZXI7CisKK2NsYXNzIERvbWFpbkZy
b250ZW5kRGlzcGF0Y2hlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6
CisgICAgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVyKEZyb250ZW5kUm91dGVyJiBmcm9udGVuZFJv
dXRlcikgOiBtX2Zyb250ZW5kUm91dGVyKGZyb250ZW5kUm91dGVyKSB7IH0KKyAgICB2b2lkIEV2
ZW50KCk7Citwcml2YXRlOgorICAgIEZyb250ZW5kUm91dGVyJiBtX2Zyb250ZW5kUm91dGVyOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVu
ZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJz
LmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBl
LW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJU
ZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisK
K25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit2b2lkIERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcjo6
RXZlbnQoKQoreworICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJE
b21haW4uRXZlbnQiX3MpOworCisgICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1l
c3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisK
KyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBkb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4K
KyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwor
CisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKworCisKKworCisKKworCit9IC8vIG5hbWVzcGFj
ZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sT2JqZWN0cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3Rz
LmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBl
LW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xPYmplY3RzLmgiCisKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCituYW1l
c3BhY2UgUHJvdG9jb2wgeworCisKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5j
cHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hp
bmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVy
bmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKwor
QHByb3RvY29sIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI7CisKK25hbWVzcGFjZSBJ
bnNwZWN0b3IgeworCisKK2NsYXNzIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hl
ciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciB7CisgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgT2JqQ0luc3BlY3RvckRvbWFp
bkJhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IGhh
bmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KKyAgICB2b2lkIENvbW1hbmQobG9uZyBy
ZXF1ZXN0SWQpIGZpbmFsOworcHJpdmF0ZToKKyAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29s
RG9tYWluRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMu
aAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hp
bmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9j
b2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFs
LmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW5jbHVkZSA8
d3RmL0pTT05WYWx1ZXMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3ZvaWQgT2JqQ0lu
c3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElkKQor
eworICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihDb21t
YW5kV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7CisgICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlz
cGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRG9tYWluLkNvbW1hbmQnIHdhcyBub3QgZm91bmQi
X3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJp
bmcgKmVycm9yKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29s
RXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsK
KyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICB9
OworCisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKKyAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFs
c2UpOworICAgIH07CisKKyAgICBbbV9kZWxlZ2F0ZSBDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6
ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKK30KKworCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNr
ZW5kRGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3Vy
YXRpb24uaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRU
eXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJv
dG9jb2wuaD4KKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50
ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAorQHByb3BlcnR5IChu
b25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNldERvbWFpbkhhbmRsZXI6KSBpZDxUZXN0UHJvdG9j
b2xEb21haW5Eb21haW5IYW5kbGVyPiBkb21haW5IYW5kbGVyOworQHByb3BlcnR5IChub25hdG9t
aWMsIHJlYWRvbmx5KSBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKmRv
bWFpbkV2ZW50RGlzcGF0Y2hlcjsKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24uaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJh
dGlvbi5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRU
eXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3Vy
YXRpb24uaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbXBvcnQgIlRl
c3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1
Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKwordXNpbmcgbmFtZXNwYWNl
IEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24K
K3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworICAg
IGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IF9kb21haW5IYW5kbGVyOworICAg
IFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqX2RvbWFpbkV2ZW50RGlz
cGF0Y2hlcjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVu
dGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCit7CisgICAgc2VsZiA9IFtzdXBl
ciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgQVNTRVJU
KGNvbnRyb2xsZXIpOworICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKKyAgICByZXR1cm4g
c2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgW19kb21haW5IYW5kbGVyIHJlbGVh
c2VdOworICAgIFtfZG9tYWluRXZlbnREaXNwYXRjaGVyIHJlbGVhc2VdOworICAgIFtzdXBlciBk
ZWFsbG9jXTsKK30KKworLSAodm9pZClzZXREb21haW5IYW5kbGVyOihpZDxUZXN0UHJvdG9jb2xE
b21haW5Eb21haW5IYW5kbGVyPiloYW5kbGVyCit7CisgICAgaWYgKGhhbmRsZXIgPT0gX2RvbWFp
bkhhbmRsZXIpCisgICAgICAgIHJldHVybjsKKworICAgIFtfZG9tYWluSGFuZGxlciByZWxlYXNl
XTsKKyAgICBfZG9tYWluSGFuZGxlciA9IFtoYW5kbGVyIHJldGFpbl07CisKKyAgICBhdXRvIGFs
dGVybmF0ZURpc3BhdGNoZXIgPSBtYWtlVW5pcXVlPE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5k
RGlzcGF0Y2hlcj4oaGFuZGxlcik7CisgICAgYXV0byBhbHRlcm5hdGVBZ2VudCA9IG1ha2VVbmlx
dWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8RG9tYWluQmFja2VuZERpc3BhdGNoZXIsIEFs
dGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyPj4oIkRvbWFpbiJfcywgKl9jb250cm9sbGVy
LCBXVEZNb3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIpKTsKKyAgICBfY29udHJvbGxlci0+YXBwZW5k
RXh0cmFBZ2VudChXVEZNb3ZlKGFsdGVybmF0ZUFnZW50KSk7Cit9CisKKy0gKGlkPFRlc3RQcm90
b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+KWRvbWFpbkhhbmRsZXIKK3sKKyAgICByZXR1cm4gX2Rv
bWFpbkhhbmRsZXI7Cit9CisKKy0gKFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0
Y2hlciAqKWRvbWFpbkV2ZW50RGlzcGF0Y2hlcgoreworICAgIGlmICghX2RvbWFpbkV2ZW50RGlz
cGF0Y2hlcikKKyAgICAgICAgX2RvbWFpbkV2ZW50RGlzcGF0Y2hlciA9IFtbVGVzdFByb3RvY29s
RG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyIGFsbG9jXSBpbml0V2l0aENvbnRyb2xsZXI6X2Nv
bnRyb2xsZXJdOworICAgIHJldHVybiBfZG9tYWluRXZlbnREaXNwYXRjaGVyOworfQorCitAZW5k
CisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRl
YnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1
c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29s
RG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyCit7CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JD
b250cm9sbGVyKiBfY29udHJvbGxlcjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29u
dHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCit7Cisg
ICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBu
aWw7CisgICAgQVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250cm9sbGVyID0gY29udHJvbGxl
cjsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClFdmVudAoreworICAgIGNvbnN0IEZy
b250ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29udHJvbGxlci0+ZnJvbnRlbmRSb3V0ZXIoKTsKKwor
ICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KTsKKyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4uRXZlbnQi
X3MpOworICAgIHJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsK
K30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVy
cy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdn
YWJsZVR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKworI2ltcG9ydCA8V2ViSW5zcGVj
dG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgorCisKKworCisKKworCisKK0Bwcm90b2NvbCBU
ZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyIDxOU09iamVjdD4KK0BvcHRpb25hbAorLSAo
dm9pZClDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSll
cnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKSh2b2lkKSlzdWNjZXNzQ2FsbGJh
Y2s7CitAZW5kCisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGlu
dGVyZmFjZSBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgOiBOU09iamVj
dAorLSAodm9pZClFdmVudDsKK0BlbmQKKworCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJv
dG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+CisKKyMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1k
b21haW4tZGVidWdnYWJsZVR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90
b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50
YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisK
K0BpbnRlcmZhY2UgVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyIChQcml2
YXRlKQorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooSW5zcGVjdG9yOjpBdWdt
ZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXI7CitAZW5kCisKKworIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQ
cm90b2NvbC5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJz
aW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgT2Jq
Q0VudW1UeXBlPgorT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29u
c3QgU3RyaW5nJiB2YWx1ZSk7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisKKyMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUu
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0
ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29s
LmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCisjaW1wb3J0IDxXZWJJbnNw
ZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorCit1c2luZyBuYW1lc3BhY2Ug
SW5zcGVjdG9yOworCisKKworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmct
ZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9y
dCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3Iv
UldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMu
aD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0
b3I7CisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2Rv
bWFpbi10YXJnZXRUeXBlcy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW4tdGFyZ2V0VHlwZXMuanNvbi1yZXN1
bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjgwNDFjMjdjMWJlCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL2RvbWFpbi10YXJnZXRUeXBlcy5qc29uLXJlc3VsdApAQCAtMCwwICsx
LDEwMzAgQEAKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZXMuanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisvLyBEb21haW4KK0lu
c3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIkRvbWFpbiIsIFsicGFnZSJdKTsKK0luc3Bl
Y3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJEb21haW4uQ29tbWFuZCIsIFsicGFnZSJdLCBb
XSwgW10pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckV2ZW50KCJEb21haW4uRXZlbnQiLCBb
InBhZ2UiXSwgW10pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbkRpc3BhdGNoZXIg
PSBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRGlzcGF0Y2hlci5iaW5kKEluc3BlY3RvckJhY2tl
bmQsICJEb21haW4iKTsKK0luc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkRvbWFpbiIs
IG51bGwpOworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlcy5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaWYg
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyNpbmNsdWRlICJUZXN0
UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRl
bmRSb3V0ZXIuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVy
KFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3Bh
dGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9CisgICAgQmFja2VuZERpc3BhdGNoZXIqIGJh
Y2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQo
KTsgfQorcHJpdmF0ZToKKyAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERp
c3BhdGNoZXI7Cit9OworCisKK2NsYXNzIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVy
IDogcHVibGljIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0
dWFsIH5BbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQorICAgIHZpcnR1YWwg
dm9pZCBDb21tYW5kKGxvbmcgY2FsbElkKSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQorIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVz
dFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25h
bWVzcGFjZSBJbnNwZWN0b3IgeworCit0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKworI2lm
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorY2xhc3MgQWx0ZXJuYXRl
RG9tYWluQmFja2VuZERpc3BhdGNoZXI7CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCisKK2NsYXNzIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxl
ciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIENvbW1hbmQoRXJyb3JTdHJpbmcmKSA9IDA7
Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+RG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
KCk7Cit9OworCitjbGFzcyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBT
dXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxE
b21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgRG9tYWlu
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVl
c3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkg
ZmluYWw7Citwcml2YXRlOgorICAgIHZvaWQgQ29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVmUHRy
PEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVS
TkFURV9ESVNQQVRDSEVSUykKK3B1YmxpYzoKKyAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNo
ZXIoQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIp
IHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQorcHJpdmF0
ZToKKyAgICBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciogbV9hbHRlcm5hdGVEaXNw
YXRjaGVyIHsgbnVsbHB0ciB9OworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQorcHJpdmF0ZToKKyAgICBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihCYWNr
ZW5kRGlzcGF0Y2hlciYsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIERv
bWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2VudCB7IG51bGxwdHIgfTsKK307CisK
K30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3Bh
dGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVzLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3Rm
L0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKKyNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgi
CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKK25h
bWVzcGFjZSBJbnNwZWN0b3IgeworCitEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5E
b21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KKworUmVmPERvbWFpbkJhY2tlbmRE
aXNwYXRjaGVyPiBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEJhY2tlbmREaXNwYXRj
aGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBh
Z2VudCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEb21haW5CYWNrZW5kRGlzcGF0Y2hl
cihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKK30KKworRG9tYWluQmFja2VuZERpc3BhdGNo
ZXI6OkRvbWFpbkJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlz
cGF0Y2hlciwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKKyAgICA6IFN1
cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQorICAgICwgbV9h
Z2VudChhZ2VudCkKK3sKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNo
ZXJGb3JEb21haW4oIkRvbWFpbiJfcywgdGhpcyk7Cit9CisKK3ZvaWQgRG9tYWluQmFja2VuZERp
c3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwg
UmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQoreworICAgIFJlZjxEb21haW5CYWNrZW5kRGlz
cGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CisKKyAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJh
bWV0ZXJzOworICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsK
KworICAgIGlmIChtZXRob2QgPT0gIkNvbW1hbmQiKSB7CisgICAgICAgIENvbW1hbmQocmVxdWVz
dElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNo
ZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3Vu
ZCIpOworfQorCit2b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVx
dWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQoreworI2lmIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQorICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsK
KyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5Db21tYW5kKHJlcXVlc3RJZCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCisKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWY8SlNPTjo6T2Jq
ZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYWdlbnQtPkNvbW1h
bmQoZXJyb3IpOworCisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKKyAgICAgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxz
ZSk7CisgICAgZWxzZQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2Nv
bEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0QmFja2Vu
ZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hl
cnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBl
cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPHd0
Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVz
cGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBGcm9udGVuZFJvdXRlcjsKKworY2xhc3MgRG9tYWlu
RnJvbnRlbmREaXNwYXRjaGVyIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1Ymxp
YzoKKyAgICBEb21haW5Gcm9udGVuZERpc3BhdGNoZXIoRnJvbnRlbmRSb3V0ZXImIGZyb250ZW5k
Um91dGVyKSA6IG1fZnJvbnRlbmRSb3V0ZXIoZnJvbnRlbmRSb3V0ZXIpIHsgfQorICAgIHZvaWQg
RXZlbnQoKTsKK3ByaXZhdGU6CisgICAgRnJvbnRlbmRSb3V0ZXImIG1fZnJvbnRlbmRSb3V0ZXI7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250
ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hl
cnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5
cGVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCisK
KyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3Zv
aWQgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVyOjpFdmVudCgpCit7CisgICAgUmVmPEpTT046Ok9i
amVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGpzb25NZXNz
YWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7CisKKyAgICBtX2Zy
b250ZW5kUm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmRE
aXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlcy5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgor
I2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisK
KworbmFtZXNwYWNlIFByb3RvY29sIHsKKworCisKKworCisKKworCisKK30gLy8gbmFtZXNwYWNl
IFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xPYmplY3RzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMu
Y3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVz
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKworI2luY2x1
ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKworCit9IC8vIG5h
bWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBkb21haW4tdGFyZ2V0VHlwZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRl
QmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCitAcHJv
dG9jb2wgVGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcjsKKworbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CisKKworY2xhc3MgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyIGZp
bmFsIDogcHVibGljIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyIHsKKyAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBPYmpDSW5zcGVjdG9yRG9tYWluQmFj
a2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4gaGFuZGxl
cikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQorICAgIHZvaWQgQ29tbWFuZChsb25nIHJlcXVl
c3RJZCkgZmluYWw7Citwcml2YXRlOgorICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xEb21h
aW5Eb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisK
KyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZXMuanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcu
aCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVk
ZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorCituYW1lc3BhY2UgSW5z
cGVjdG9yIHsKKwordm9pZCBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNv
bW1hbmQobG9uZyByZXF1ZXN0SWQpCit7CisgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1Rv
U2VsZWN0b3I6QHNlbGVjdG9yKENvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJh
Y2s6KV0pIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJv
cihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4u
Q29tbWFuZCcgd2FzIG5vdCBmb3VuZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCkt
PnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZCBl
cnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKKyAgICAgICAgYmFja2VuZERpc3Bh
dGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVy
OjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5k
UGVuZGluZ0Vycm9ycygpOworICAgIH07CisKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeewor
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgfTsKKworICAgIFttX2RlbGVnYXRlIENv
bW1hbmRXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNj
ZXNzQ2FsbGJhY2tdOworfQorCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5o
PgorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2Ug
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0CitAcHJvcGVydHkgKG5vbmF0b21p
YywgcmV0YWluLCBzZXR0ZXI9c2V0RG9tYWluSGFuZGxlcjopIGlkPFRlc3RQcm90b2NvbERvbWFp
bkRvbWFpbkhhbmRsZXI+IGRvbWFpbkhhbmRsZXI7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVh
ZG9ubHkpIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqZG9tYWluRXZl
bnREaXNwYXRjaGVyOworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbi5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1t
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVzLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAi
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRl
cm5hbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisjaW1w
b3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgorI2ltcG9y
dCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1w
b3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMu
aD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5o
PgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxl
ciogX2NvbnRyb2xsZXI7CisgICAgaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4g
X2RvbWFpbkhhbmRsZXI7CisgICAgVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRj
aGVyICpfZG9tYWluRXZlbnREaXNwYXRjaGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIK
K3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0
dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250
cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBb
X2RvbWFpbkhhbmRsZXIgcmVsZWFzZV07CisgICAgW19kb21haW5FdmVudERpc3BhdGNoZXIgcmVs
ZWFzZV07CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistICh2b2lkKXNldERvbWFpbkhhbmRs
ZXI6KGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+KWhhbmRsZXIKK3sKKyAgICBp
ZiAoaGFuZGxlciA9PSBfZG9tYWluSGFuZGxlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgW19k
b21haW5IYW5kbGVyIHJlbGVhc2VdOworICAgIF9kb21haW5IYW5kbGVyID0gW2hhbmRsZXIgcmV0
YWluXTsKKworICAgIGF1dG8gYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IG1ha2VVbmlxdWU8T2JqQ0lu
c3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyPihoYW5kbGVyKTsKKyAgICBhdXRvIGFsdGVy
bmF0ZUFnZW50ID0gbWFrZVVuaXF1ZTxBbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudDxEb21haW5C
YWNrZW5kRGlzcGF0Y2hlciwgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXI+PigiRG9t
YWluIl9zLCAqX2NvbnRyb2xsZXIsIFdURk1vdmUoYWx0ZXJuYXRlRGlzcGF0Y2hlcikpOworICAg
IF9jb250cm9sbGVyLT5hcHBlbmRFeHRyYUFnZW50KFdURk1vdmUoYWx0ZXJuYXRlQWdlbnQpKTsK
K30KKworLSAoaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4pZG9tYWluSGFuZGxl
cgoreworICAgIHJldHVybiBfZG9tYWluSGFuZGxlcjsKK30KKworLSAoVGVzdFByb3RvY29sRG9t
YWluRG9tYWluRXZlbnREaXNwYXRjaGVyICopZG9tYWluRXZlbnREaXNwYXRjaGVyCit7CisgICAg
aWYgKCFfZG9tYWluRXZlbnREaXNwYXRjaGVyKQorICAgICAgICBfZG9tYWluRXZlbnREaXNwYXRj
aGVyID0gW1tUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgYWxsb2NdIGlu
aXRXaXRoQ29udHJvbGxlcjpfY29udHJvbGxlcl07CisgICAgcmV0dXJuIF9kb21haW5FdmVudERp
c3BhdGNoZXI7Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZp
Z3VyYXRpb24ubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hl
cnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlw
ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1w
b3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVz
cGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xEb21haW5Eb21h
aW5FdmVudERpc3BhdGNoZXIKK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIq
IF9jb250cm9sbGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihB
dWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0g
W3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBB
U1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJl
dHVybiBzZWxmOworfQorCistICh2b2lkKUV2ZW50Cit7CisgICAgY29uc3QgRnJvbnRlbmRSb3V0
ZXImIHJvdXRlciA9IF9jb250cm9sbGVyLT5mcm9udGVuZFJvdXRlcigpOworCisgICAgUmVmPEpT
T046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGpz
b25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7CisgICAg
cm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworfQorCitAZW5k
CisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisKKyMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCisj
aW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+CisKKworCisKKwor
CisKKworQHByb3RvY29sIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXIgPE5TT2JqZWN0
PgorQG9wdGlvbmFsCistICh2b2lkKUNvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShO
U1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKHZv
aWQpKXN1Y2Nlc3NDYWxsYmFjazsKK0BlbmQKKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAo
ImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlz
cGF0Y2hlciA6IE5TT2JqZWN0CistICh2b2lkKUV2ZW50OworQGVuZAorCisKKyNpbXBvcnQgPFdl
Ykluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4KKworIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
SW50ZXJuYWwuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJn
ZXRUeXBlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
KyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVj
dFByaXZhdGUuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9y
Q29udHJvbGxlci5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKworQGludGVyZmFjZSBU
ZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKFByaXZhdGUpCistIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihJbnNwZWN0b3I6OkF1Z21lbnRhYmxlSW5zcGVj
dG9yQ29udHJvbGxlciopY29udHJvbGxlcjsKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbEludGVybmFsLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdl
dFR5cGVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9j
b2xBcnJheUNvbnZlcnNpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+CitPcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90
b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlcy5qc29uCisvLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucy5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRl
c3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2Nv
bEpTT05PYmplY3RQcml2YXRlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKwor
CisKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorCisj
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5o
IgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPFdl
Ykluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisjaW1wb3J0IDx3dGYv
QXNzZXJ0aW9ucy5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNw
YWNlIEluc3BlY3RvcjsKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uLXJlc3VsdCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9k
b21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24tcmVzdWx0Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jZWEyMGYzZmNmZgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC9kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24tcmVzdWx0CkBAIC0wLDAg
KzEsMTQyMiBAQAorIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNv
bW1hbmQtc2l6ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisvLyBOZXR3b3JrMQorSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiTmV0d29y
azEiLCBudWxsKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMS5s
b2FkUmVzb3VyY2UxIiwgbnVsbCwgW10sIFtdKTsKK0luc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVE
b21haW4oIk5ldHdvcmsxIiwgbnVsbCk7CisKKy8vIE5ldHdvcmszCitJbnNwZWN0b3JCYWNrZW5k
LnJlZ2lzdGVyRG9tYWluKCJOZXR3b3JrMyIsIG51bGwpOworSW5zcGVjdG9yQmFja2VuZC5yZWdp
c3RlckNvbW1hbmQoIk5ldHdvcmszLmxvYWRSZXNvdXJjZTEiLCBudWxsLCBbXSwgW10pOworSW5z
cGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIk5ldHdvcmszLmxvYWRSZXNvdXJjZTIiLCBu
dWxsLCBbXSwgW10pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIk5ldHdvcmsz
LmxvYWRSZXNvdXJjZTMiLCBudWxsLCBbXSwgW10pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rl
ckNvbW1hbmQoIk5ldHdvcmszLmxvYWRSZXNvdXJjZTQiLCBudWxsLCBbXSwgW10pOworSW5zcGVj
dG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIk5ldHdvcmszLmxvYWRSZXNvdXJjZTUiLCBudWxs
LCBbXSwgW10pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIk5ldHdvcmszLmxv
YWRSZXNvdXJjZTYiLCBudWxsLCBbXSwgW10pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNv
bW1hbmQoIk5ldHdvcmszLmxvYWRSZXNvdXJjZTciLCBudWxsLCBbXSwgW10pOworSW5zcGVjdG9y
QmFja2VuZC5hY3RpdmF0ZURvbWFpbigiTmV0d29yazMiLCBudWxsKTsKKyMjIyBFbmQgRmlsZTog
SW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJu
YXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KKy8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUo
SU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bFR5cGVzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRl
ci5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERp
c3BhdGNoZXIgeworcHVibGljOgorICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRy
PEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9
IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KKyAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERp
c3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Citw
cml2YXRlOgorICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hl
cjsKK307CisKKworY2xhc3MgQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciA6IHB1
YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+
QWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQorICAgIHZpcnR1YWwgdm9p
ZCBsb2FkUmVzb3VyY2UxKGxvbmcgY2FsbElkKSA9IDA7Cit9OworY2xhc3MgQWx0ZXJuYXRlTmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hl
ciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+QWx0ZXJuYXRlTmV0d29yazNCYWNrZW5kRGlzcGF0
Y2hlcigpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UxKGxvbmcgY2FsbElkKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTIobG9uZyBjYWxsSWQpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMyhsb25nIGNhbGxJZCkgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBsb2FkUmVzb3VyY2U0KGxvbmcgY2FsbElkKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGxvYWRSZXNvdXJjZTUobG9uZyBjYWxsSWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJl
c291cmNlNihsb25nIGNhbGxJZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2U3
KGxvbmcgY2FsbElkKSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2Vu
ZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorIyMjIEVuZCBG
aWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6
IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgorLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
IlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgor
CituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisK
KyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK2NsYXNzIEFsdGVy
bmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI7CitjbGFzcyBBbHRlcm5hdGVOZXR3b3JrM0Jh
Y2tlbmREaXNwYXRjaGVyOworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQorCitjbGFzcyBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7Citw
dWJsaWM6CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTEoRXJyb3JTdHJpbmcmKSA9IDA7
Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIoKTsKK307CisKK2NsYXNzIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKK3B1
YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMShFcnJvclN0cmluZyYpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMihFcnJvclN0cmluZyYpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMyhFcnJvclN0cmluZyYpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgbG9hZFJlc291cmNlNChFcnJvclN0cmluZyYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
bG9hZFJlc291cmNlNShFcnJvclN0cmluZyYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJl
c291cmNlNihFcnJvclN0cmluZyYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNl
NyhFcnJvclN0cmluZyYpID0gMDsKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5OZXR3b3JrM0Jh
Y2tlbmREaXNwYXRjaGVySGFuZGxlcigpOworfTsKKworY2xhc3MgTmV0d29yazFCYWNrZW5kRGlz
cGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7Citw
dWJsaWM6CisgICAgc3RhdGljIFJlZjxOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUo
QmFja2VuZERpc3BhdGNoZXImLCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwor
ICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBS
ZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOworcHJpdmF0ZToKKyAgICB2b2lkIGxv
YWRSZXNvdXJjZTEobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1l
dGVycyk7CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCitwdWJs
aWM6CisgICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZU5ldHdvcmsxQmFj
a2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRj
aGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQorcHJpdmF0ZToKKyAgICBBbHRlcm5hdGVOZXR3
b3JrMUJhY2tlbmREaXNwYXRjaGVyKiBtX2FsdGVybmF0ZURpc3BhdGNoZXIgeyBudWxscHRyIH07
CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCitwcml2
YXRlOgorICAgIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImLCBO
ZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIE5ldHdvcmsxQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50IHsgbnVsbHB0ciB9OworfTsKKworY2xhc3MgTmV0d29y
azNCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlz
cGF0Y2hlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxOZXR3b3JrM0JhY2tlbmREaXNwYXRj
aGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVy
SGFuZGxlciopOworICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmlu
ZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOworcHJpdmF0ZToK
KyAgICB2b2lkIGxvYWRSZXNvdXJjZTEobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+JiYgcGFyYW1ldGVycyk7CisgICAgdm9pZCBsb2FkUmVzb3VyY2UyKGxvbmcgcmVxdWVzdElk
LCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOworICAgIHZvaWQgbG9hZFJlc291
cmNlMyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsK
KyAgICB2b2lkIGxvYWRSZXNvdXJjZTQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+JiYgcGFyYW1ldGVycyk7CisgICAgdm9pZCBsb2FkUmVzb3VyY2U1KGxvbmcgcmVxdWVzdElk
LCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOworICAgIHZvaWQgbG9hZFJlc291
cmNlNihsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsK
KyAgICB2b2lkIGxvYWRSZXNvdXJjZTcobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+JiYgcGFyYW1ldGVycyk7CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCitwdWJsaWM6CisgICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0
ZU5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRl
cm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQorcHJpdmF0ZToKKyAgICBB
bHRlcm5hdGVOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyKiBtX2FsdGVybmF0ZURpc3BhdGNoZXIg
eyBudWxscHRyIH07CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCitwcml2YXRlOgorICAgIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERp
c3BhdGNoZXImLCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIE5ldHdv
cmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50IHsgbnVsbHB0ciB9OworfTsKKwor
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0
Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21t
YW5kLXNpemVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMu
aCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+
CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95
ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2Vu
ZERpc3BhdGNoZXJzLmgiCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitOZXR3b3JrMUJhY2tlbmREaXNw
YXRjaGVySGFuZGxlcjo6fk5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9CitO
ZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6fk5ldHdvcmszQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyKCkgeyB9CisKK1JlZjxOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPiBOZXR3b3Jr
MUJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNw
YXRjaGVyLCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCit7CisgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlz
cGF0Y2hlciwgYWdlbnQpKTsKK30KKworTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6TmV0d29y
azFCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIs
IE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKKyAgICA6IFN1cHBsZW1l
bnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQorICAgICwgbV9hZ2VudChh
Z2VudCkKK3sKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JE
b21haW4oIk5ldHdvcmsxIl9zLCB0aGlzKTsKK30KKwordm9pZCBOZXR3b3JrMUJhY2tlbmREaXNw
YXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJl
ZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKK3sKKyAgICBSZWY8TmV0d29yazFCYWNrZW5kRGlz
cGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CisKKyAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJh
bWV0ZXJzOworICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsK
KworICAgIGlmIChtZXRob2QgPT0gImxvYWRSZXNvdXJjZTEiKSB7CisgICAgICAgIGxvYWRSZXNv
dXJjZTEocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFj
a2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmsxLiIgKyBtZXRob2QgKyAi
JyB3YXMgbm90IGZvdW5kIik7Cit9CisKK3ZvaWQgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6
bG9hZFJlc291cmNlMShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKK3sK
KyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyAgICBpZiAobV9h
bHRlcm5hdGVEaXNwYXRjaGVyKSB7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9h
ZFJlc291cmNlMShyZXF1ZXN0SWQpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmIC8v
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCisgICAgRXJyb3JTdHJp
bmcgZXJyb3I7CisgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKTsKKyAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2UxKGVycm9yKTsKKworICAgIGlmICgh
ZXJyb3IubGVuZ3RoKCkpCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25z
ZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOworICAgIGVsc2UKKyAgICAgICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hl
cjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKK30KKworUmVmPE5ldHdvcmszQmFja2Vu
ZERpc3BhdGNoZXI+IE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShCYWNrZW5kRGlz
cGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyKiBhZ2VudCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBOZXR3b3JrM0JhY2tlbmRE
aXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOworfQorCitOZXR3b3JrM0JhY2tl
bmREaXNwYXRjaGVyOjpOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVy
JiBiYWNrZW5kRGlzcGF0Y2hlciwgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFn
ZW50KQorICAgIDogU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNo
ZXIpCisgICAgLCBtX2FnZW50KGFnZW50KQoreworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJl
Z2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbigiTmV0d29yazMiX3MsIHRoaXMpOworfQorCit2b2lk
IE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25z
dCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQoreworICAgIFJl
ZjxOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKKworICAgIFJlZlB0
cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7CisgICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJh
bXMiX3MsIHBhcmFtZXRlcnMpOworCisgICAgdHlwZWRlZiB2b2lkIChOZXR3b3JrM0JhY2tlbmRE
aXNwYXRjaGVyOjoqQ2FsbEhhbmRsZXIpKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmIG1lc3NhZ2UpOworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVy
PiBEaXNwYXRjaE1hcDsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8RGlzcGF0Y2hNYXA+IGRp
c3BhdGNoTWFwOworICAgIGlmIChkaXNwYXRjaE1hcC5nZXQoKS5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgc3RhdGljIGNvbnN0IHN0cnVjdCBNZXRob2RUYWJsZSB7CisgICAgICAgICAgICBjb25zdCBj
aGFyKiBuYW1lOworICAgICAgICAgICAgQ2FsbEhhbmRsZXIgaGFuZGxlcjsKKyAgICAgICAgfSBj
b21tYW5kc1tdID0geworICAgICAgICAgICAgeyAibG9hZFJlc291cmNlMSIsICZOZXR3b3JrM0Jh
Y2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UxIH0sCisgICAgICAgICAgICB7ICJsb2FkUmVz
b3VyY2UyIiwgJk5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTIgfSwKKyAg
ICAgICAgICAgIHsgImxvYWRSZXNvdXJjZTMiLCAmTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6
bG9hZFJlc291cmNlMyB9LAorICAgICAgICAgICAgeyAibG9hZFJlc291cmNlNCIsICZOZXR3b3Jr
M0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U0IH0sCisgICAgICAgICAgICB7ICJsb2Fk
UmVzb3VyY2U1IiwgJk5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTUgfSwK
KyAgICAgICAgICAgIHsgImxvYWRSZXNvdXJjZTYiLCAmTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hl
cjo6bG9hZFJlc291cmNlNiB9LAorICAgICAgICAgICAgeyAibG9hZFJlc291cmNlNyIsICZOZXR3
b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U3IH0sCisgICAgICAgIH07CisgICAg
ICAgIHNpemVfdCBsZW5ndGggPSBXVEZfQVJSQVlfTEVOR1RIKGNvbW1hbmRzKTsKKyAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKKyAgICAgICAgICAgIGRpc3BhdGNo
TWFwLmdldCgpLmFkZChjb21tYW5kc1tpXS5uYW1lLCBjb21tYW5kc1tpXS5oYW5kbGVyKTsKKyAg
ICB9CisKKyAgICBhdXRvIGZpbmRSZXN1bHQgPSBkaXNwYXRjaE1hcC5nZXQoKS5maW5kKG1ldGhv
ZCk7CisgICAgaWYgKGZpbmRSZXN1bHQgPT0gZGlzcGF0Y2hNYXAuZ2V0KCkuZW5kKCkpIHsKKyAg
ICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlz
cGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMuIiArIG1ldGhvZCArICInIHdhcyBu
b3QgZm91bmQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgICgoKnRoaXMpLipmaW5k
UmVzdWx0LT52YWx1ZSkocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKK30KKwordm9p
ZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UxKGxvbmcgcmVxdWVzdElk
LCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQoreworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQorICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKKyAgICAg
ICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2UxKHJlcXVlc3RJZCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCisKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWY8SlNPTjo6T2Jq
ZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYWdlbnQtPmxvYWRS
ZXNvdXJjZTEoZXJyb3IpOworCisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKKyAgICAgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQp
LCBmYWxzZSk7CisgICAgZWxzZQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQ
cm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJv
cikpOworfQorCit2b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTIo
bG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCit7CisjaWYgRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0
Y2hlcikgeworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZTIocmVx
dWVzdElkKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAg
IFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAg
bV9hZ2VudC0+bG9hZFJlc291cmNlMihlcnJvcik7CisKKyAgICBpZiAoIWVycm9yLmxlbmd0aCgp
KQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBX
VEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2VuZERpc3Bh
dGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9y
LCBXVEZNb3ZlKGVycm9yKSk7Cit9CisKK3ZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6
bG9hZFJlc291cmNlMyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKK3sK
KyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyAgICBpZiAobV9h
bHRlcm5hdGVEaXNwYXRjaGVyKSB7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9h
ZFJlc291cmNlMyhyZXF1ZXN0SWQpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmIC8v
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCisgICAgRXJyb3JTdHJp
bmcgZXJyb3I7CisgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKTsKKyAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2UzKGVycm9yKTsKKworICAgIGlmICgh
ZXJyb3IubGVuZ3RoKCkpCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25z
ZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOworICAgIGVsc2UKKyAgICAgICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hl
cjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKK30KKwordm9pZCBOZXR3b3JrM0JhY2tl
bmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U0KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6
T2JqZWN0PiYmKQoreworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQorICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKKyAgICAgICAgbV9hbHRlcm5hdGVE
aXNwYXRjaGVyLT5sb2FkUmVzb3VyY2U0KHJlcXVlc3RJZCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisK
KyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBK
U09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTQoZXJyb3Ip
OworCisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7CisgICAg
ZWxzZQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJh
Y2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOworfQorCit2b2lk
IE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTUobG9uZyByZXF1ZXN0SWQs
IFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCit7CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCisgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeworICAgICAg
ICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZTUocmVxdWVzdElkKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKKworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgIFJlZjxKU09OOjpPYmpl
Y3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9hZ2VudC0+bG9hZFJl
c291cmNlNShlcnJvcik7CisKKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQorICAgICAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCks
IGZhbHNlKTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFBy
b3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9y
KSk7Cit9CisKK3ZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNihs
b25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKK3sKKyNpZiBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRj
aGVyKSB7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlNihyZXF1
ZXN0SWQpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCisgICAgRXJyb3JTdHJpbmcgZXJyb3I7CisgICAg
UmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBt
X2FnZW50LT5sb2FkUmVzb3VyY2U2KGVycm9yKTsKKworICAgIGlmICghZXJyb3IubGVuZ3RoKCkp
CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdU
Rk1vdmUocmVzdWx0KSwgZmFsc2UpOworICAgIGVsc2UKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3Is
IFdURk1vdmUoZXJyb3IpKTsKK30KKwordm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjps
b2FkUmVzb3VyY2U3KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQorewor
I2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorICAgIGlmIChtX2Fs
dGVybmF0ZURpc3BhdGNoZXIpIHsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2Fk
UmVzb3VyY2U3KHJlcXVlc3RJZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYgLy8g
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyAgICBFcnJvclN0cmlu
ZyBlcnJvcjsKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOworICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTcoZXJyb3IpOworCisgICAgaWYgKCFl
cnJvci5sZW5ndGgoKSkKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNl
KHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7CisgICAgZWxzZQorICAgICAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVy
OjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMg
QmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZh
bHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5z
cGVjdG9yIHsKKworY2xhc3MgRnJvbnRlbmRSb3V0ZXI7CisKK30gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK30gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAor
CisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgor
I2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisK
KworbmFtZXNwYWNlIFByb3RvY29sIHsKKworCisKKworCisvLyBUeXBlZGVmcy4KK25hbWVzcGFj
ZSBOZXR3b3JrMiB7CisvKiBVbmlxdWUgbG9hZGVyIGlkZW50aWZpZXIuICovCit0eXBlZGVmIFN0
cmluZyBMb2FkZXJJZDsKK30gLy8gTmV0d29yazIKKy8vIEVuZCBvZiB0eXBlZGVmcy4KKworCisK
K30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbE9iamVjdHMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9t
YWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xPYmplY3RzLmgiCisKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCituYW1l
c3BhY2UgUHJvdG9jb2wgeworCisKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5j
cHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29t
bWFuZC1zaXplcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlz
cGF0Y2hlcnMuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKK0Bwcm90b2NvbCBUZXN0
UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI7CitAcHJvdG9jb2wgVGVzdFByb3RvY29sTmV0
d29yazNEb21haW5IYW5kbGVyOworCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCitjbGFzcyBP
YmpDSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRl
cm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKK3B1YmxpYzoKKyAgICBPYmpDSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hl
cihpZDxUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxl
Z2F0ZSA9IGhhbmRsZXI7IH0KKyAgICB2b2lkIGxvYWRSZXNvdXJjZTEobG9uZyByZXF1ZXN0SWQp
IGZpbmFsOworcHJpdmF0ZToKKyAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sTmV0d29yazFE
b21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKK307CisKK2NsYXNzIE9iakNJbnNwZWN0b3JOZXR3
b3JrM0JhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZU5ldHdvcmszQmFj
a2VuZERpc3BhdGNoZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgor
ICAgIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2Nv
bE5ldHdvcmszRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsg
fQorICAgIHZvaWQgbG9hZFJlc291cmNlMShsb25nIHJlcXVlc3RJZCkgZmluYWw7CisgICAgdm9p
ZCBsb2FkUmVzb3VyY2UyKGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKKyAgICB2b2lkIGxvYWRSZXNv
dXJjZTMobG9uZyByZXF1ZXN0SWQpIGZpbmFsOworICAgIHZvaWQgbG9hZFJlc291cmNlNChsb25n
IHJlcXVlc3RJZCkgZmluYWw7CisgICAgdm9pZCBsb2FkUmVzb3VyY2U1KGxvbmcgcmVxdWVzdElk
KSBmaW5hbDsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTYobG9uZyByZXF1ZXN0SWQpIGZpbmFsOwor
ICAgIHZvaWQgbG9hZFJlc291cmNlNyhsb25nIHJlcXVlc3RJZCkgZmluYWw7Citwcml2YXRlOgor
ICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkhhbmRsZXI+PiBtX2Rl
bGVnYXRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNp
bXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSAiVGVz
dFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9y
IHsKKwordm9pZCBPYmpDSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJl
c291cmNlMShsb25nIHJlcXVlc3RJZCkKK3sKKyAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRz
VG9TZWxlY3RvcjpAc2VsZWN0b3IobG9hZFJlc291cmNlMVdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nl
c3NDYWxsYmFjazopXSkgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90
b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAi
J05ldHdvcmsxLmxvYWRSZXNvdXJjZTEnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7CisgICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBC
YWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICB9OworCisgICAgaWQgc3VjY2Vz
c0NhbGxiYWNrID0gXnsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNl
KHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2UpOworICAgIH07CisKKyAg
ICBbbV9kZWxlZ2F0ZSBsb2FkUmVzb3VyY2UxV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFj
ayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKK30KKworCit2b2lkIE9iakNJbnNw
ZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UxKGxvbmcgcmVxdWVz
dElkKQoreworICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rv
cihsb2FkUmVzb3VyY2UxV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Cisg
ICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElk
LCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMubG9hZFJlc291
cmNlMScgd2FzIG5vdCBmb3VuZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNl
bmRQZW5kaW5nRXJyb3JzKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZCBlcnJv
ckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpT
ZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVu
ZGluZ0Vycm9ycygpOworICAgIH07CisKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeeworICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgfTsKKworICAgIFttX2RlbGVnYXRlIGxvYWRS
ZXNvdXJjZTFXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpz
dWNjZXNzQ2FsbGJhY2tdOworfQorCit2b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmRE
aXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UyKGxvbmcgcmVxdWVzdElkKQoreworICAgIGlmICghW21f
ZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2UyV2l0aEVy
cm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6
TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMubG9hZFJlc291cmNlMicgd2FzIG5vdCBmb3VuZCJf
cyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmlu
ZyAqZXJyb3IpIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xF
cnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwor
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgIH07
CisKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxz
ZSk7CisgICAgfTsKKworICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZTJXaXRoRXJyb3JDYWxs
YmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOworfQor
Cit2b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3Vy
Y2UzKGxvbmcgcmVxdWVzdElkKQoreworICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1Nl
bGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2UzV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0Nh
bGxiYWNrOildKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29s
RXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0
d29yazMubG9hZFJlc291cmNlMycgd2FzIG5vdCBmb3VuZCJfcyk7CisgICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKKyAgICAgICAg
YmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tl
bmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgIH07CisKKyAgICBpZCBzdWNjZXNzQ2Fs
bGJhY2sgPSBeeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVx
dWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgfTsKKworICAgIFtt
X2RlbGVnYXRlIGxvYWRSZXNvdXJjZTNXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1
Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOworfQorCit2b2lkIE9iakNJbnNwZWN0b3JO
ZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U0KGxvbmcgcmVxdWVzdElkKQor
eworICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2Fk
UmVzb3VyY2U0V2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7CisgICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNr
ZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMubG9hZFJlc291cmNlNCcg
d2FzIG5vdCBmb3VuZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5k
aW5nRXJyb3JzKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZCBlcnJvckNhbGxi
YWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJF
cnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vy
cm9ycygpOworICAgIH07CisKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeeworICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgfTsKKworICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJj
ZTRXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNz
Q2FsbGJhY2tdOworfQorCit2b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRj
aGVyOjpsb2FkUmVzb3VyY2U1KGxvbmcgcmVxdWVzdElkKQoreworICAgIGlmICghW21fZGVsZWdh
dGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2U1V2l0aEVycm9yQ2Fs
bGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCkt
PnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9k
Tm90Rm91bmQsICInTmV0d29yazMubG9hZFJlc291cmNlNScgd2FzIG5vdCBmb3VuZCJfcyk7Cisg
ICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJy
b3IpIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihy
ZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAg
ICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgIH07CisKKyAg
ICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5z
ZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7Cisg
ICAgfTsKKworICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZTVXaXRoRXJyb3JDYWxsYmFjazpl
cnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOworfQorCit2b2lk
IE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U2KGxv
bmcgcmVxdWVzdElkKQoreworICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9y
OkBzZWxlY3Rvcihsb2FkUmVzb3VyY2U2V2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNr
OildKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3Io
cmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMu
bG9hZFJlc291cmNlNicgd2FzIG5vdCBmb3VuZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKKyAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNw
YXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigp
LT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgIH07CisKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sg
PSBeeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElk
LCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgfTsKKworICAgIFttX2RlbGVn
YXRlIGxvYWRSZXNvdXJjZTZXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3ND
YWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOworfQorCit2b2lkIE9iakNJbnNwZWN0b3JOZXR3b3Jr
M0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U3KGxvbmcgcmVxdWVzdElkKQoreworICAg
IGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3Vy
Y2U3V2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7CisgICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlz
cGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMubG9hZFJlc291cmNlNycgd2FzIG5v
dCBmb3VuZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJy
b3JzKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZCBlcnJvckNhbGxiYWNrID0g
XihOU1N0cmluZyAqZXJyb3IpIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0
UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwg
ZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygp
OworICAgIH07CisKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeeworICAgICAgICBiYWNrZW5k
RGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpLCBmYWxzZSk7CisgICAgfTsKKworICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZTdXaXRo
RXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJh
Y2tdOworfQorCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbi5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
ZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJv
dG9jb2wuaD4KKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50
ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAorQHByb3BlcnR5IChu
b25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNldE5ldHdvcmsxSGFuZGxlcjopIGlkPFRlc3RQcm90
b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4gbmV0d29yazFIYW5kbGVyOworQHByb3BlcnR5IChu
b25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNldE5ldHdvcmszSGFuZGxlcjopIGlkPFRlc3RQcm90
b2NvbE5ldHdvcmszRG9tYWluSGFuZGxlcj4gbmV0d29yazNIYW5kbGVyOworQGVuZAorCisKKyMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24uaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNp
bXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorI2ltcG9ydCA8SmF2YVNj
cmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKwordXNpbmcg
bmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZp
Z3VyYXRpb24KK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9s
bGVyOworICAgIGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4gX25ldHdvcmsx
SGFuZGxlcjsKKyAgICBpZDxUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkhhbmRsZXI+IF9uZXR3
b3JrM0hhbmRsZXI7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1
Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgoreworICAgIHNlbGYgPSBb
c3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIEFT
U0VSVChjb250cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAgcmV0
dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIFtfbmV0d29yazFIYW5kbGVy
IHJlbGVhc2VdOworICAgIFtfbmV0d29yazNIYW5kbGVyIHJlbGVhc2VdOworICAgIFtzdXBlciBk
ZWFsbG9jXTsKK30KKworLSAodm9pZClzZXROZXR3b3JrMUhhbmRsZXI6KGlkPFRlc3RQcm90b2Nv
bE5ldHdvcmsxRG9tYWluSGFuZGxlcj4paGFuZGxlcgoreworICAgIGlmIChoYW5kbGVyID09IF9u
ZXR3b3JrMUhhbmRsZXIpCisgICAgICAgIHJldHVybjsKKworICAgIFtfbmV0d29yazFIYW5kbGVy
IHJlbGVhc2VdOworICAgIF9uZXR3b3JrMUhhbmRsZXIgPSBbaGFuZGxlciByZXRhaW5dOworCisg
ICAgYXV0byBhbHRlcm5hdGVEaXNwYXRjaGVyID0gbWFrZVVuaXF1ZTxPYmpDSW5zcGVjdG9yTmV0
d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7CisgICAgYXV0byBhbHRlcm5hdGVBZ2Vu
dCA9IG1ha2VVbmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8TmV0d29yazFCYWNrZW5k
RGlzcGF0Y2hlciwgQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4+KCJOZXR3b3Jr
MSJfcywgKl9jb250cm9sbGVyLCBXVEZNb3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIpKTsKKyAgICBf
Y29udHJvbGxlci0+YXBwZW5kRXh0cmFBZ2VudChXVEZNb3ZlKGFsdGVybmF0ZUFnZW50KSk7Cit9
CisKKy0gKGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4pbmV0d29yazFIYW5k
bGVyCit7CisgICAgcmV0dXJuIF9uZXR3b3JrMUhhbmRsZXI7Cit9CisKKy0gKHZvaWQpc2V0TmV0
d29yazNIYW5kbGVyOihpZDxUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkhhbmRsZXI+KWhhbmRs
ZXIKK3sKKyAgICBpZiAoaGFuZGxlciA9PSBfbmV0d29yazNIYW5kbGVyKQorICAgICAgICByZXR1
cm47CisKKyAgICBbX25ldHdvcmszSGFuZGxlciByZWxlYXNlXTsKKyAgICBfbmV0d29yazNIYW5k
bGVyID0gW2hhbmRsZXIgcmV0YWluXTsKKworICAgIGF1dG8gYWx0ZXJuYXRlRGlzcGF0Y2hlciA9
IG1ha2VVbmlxdWU8T2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI+KGhhbmRs
ZXIpOworICAgIGF1dG8gYWx0ZXJuYXRlQWdlbnQgPSBtYWtlVW5pcXVlPEFsdGVybmF0ZURpc3Bh
dGNoYWJsZUFnZW50PE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIsIEFsdGVybmF0ZU5ldHdvcmsz
QmFja2VuZERpc3BhdGNoZXI+PigiTmV0d29yazMiX3MsICpfY29udHJvbGxlciwgV1RGTW92ZShh
bHRlcm5hdGVEaXNwYXRjaGVyKSk7CisgICAgX2NvbnRyb2xsZXItPmFwcGVuZEV4dHJhQWdlbnQo
V1RGTW92ZShhbHRlcm5hdGVBZ2VudCkpOworfQorCistIChpZDxUZXN0UHJvdG9jb2xOZXR3b3Jr
M0RvbWFpbkhhbmRsZXI+KW5ldHdvcmszSGFuZGxlcgoreworICAgIHJldHVybiBfbmV0d29yazNI
YW5kbGVyOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1
cmF0aW9uLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJz
Lm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlp
bmctY29tbWFuZC1zaXplcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4K
KwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5o
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmct
Y29tbWFuZC1zaXplcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCisjaW1wb3J0IDxXZWJJ
bnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+CisKKworCisKKworCisKKworQHByb3Rv
Y29sIFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlciA8TlNPYmplY3Q+CitAb3B0aW9u
YWwKKy0gKHZvaWQpbG9hZFJlc291cmNlMVdpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3Ry
aW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikodm9pZCkp
c3VjY2Vzc0NhbGxiYWNrOworQGVuZAorCitAcHJvdG9jb2wgVGVzdFByb3RvY29sTmV0d29yazNE
b21haW5IYW5kbGVyIDxOU09iamVjdD4KK0BvcHRpb25hbAorLSAodm9pZClsb2FkUmVzb3VyY2Ux
V2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNr
IHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKSh2b2lkKSlzdWNjZXNzQ2FsbGJhY2s7CistICh2b2lk
KWxvYWRSZXNvdXJjZTJXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3Ip
KWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKHZvaWQpKXN1Y2Nlc3NDYWxs
YmFjazsKKy0gKHZvaWQpbG9hZFJlc291cmNlM1dpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5T
U3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikodm9p
ZCkpc3VjY2Vzc0NhbGxiYWNrOworLSAodm9pZClsb2FkUmVzb3VyY2U0V2l0aEVycm9yQ2FsbGJh
Y2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFj
azoodm9pZCheKSh2b2lkKSlzdWNjZXNzQ2FsbGJhY2s7CistICh2b2lkKWxvYWRSZXNvdXJjZTVX
aXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sg
c3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKHZvaWQpKXN1Y2Nlc3NDYWxsYmFjazsKKy0gKHZvaWQp
bG9hZFJlc291cmNlNldpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikp
ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikodm9pZCkpc3VjY2Vzc0NhbGxi
YWNrOworLSAodm9pZClsb2FkUmVzb3VyY2U3V2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNT
dHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKSh2b2lk
KSlzdWNjZXNzQ2FsbGJhY2s7CitAZW5kCisKKworCisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9S
V0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4KKworIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2wuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNv
bW1hbmQtc2l6ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05P
YmplY3RQcml2YXRlLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3Bl
Y3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKKworCisKKyMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorCisjIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KKy8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgi
CisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+CisK
K25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+
CitPcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcm
IHZhbHVlKTsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KKy8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFBy
b3RvY29sVHlwZVBhcnNlci5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNP
Tk9iamVjdFByaXZhdGUuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGludGVy
ZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKE5ldHdvcmsyRG9tYWluKQorCisrICh2
b2lkKV9wYXJzZUxvYWRlcklkOihOU1N0cmluZyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQp
cGF5bG9hZDsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zIChOZXR3b3JrMkRvbWFpbikKKworKyAodm9pZClfcGFyc2VMb2FkZXJJZDooTlNTdHJp
bmcgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENF
UFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBjbGFzc10pOworICAgICpvdXRW
YWx1ZSA9IChOU1N0cmluZyAqKXBheWxvYWQ7Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sVHlwZXMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5z
LXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKwor
I2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDxXZWJJbnNw
ZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorI2ltcG9ydCA8d3RmL0Fzc2Vy
dGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJ
bnNwZWN0b3I7CisKKworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC9lbnVtLXZhbHVlcy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9lbnVtLXZhbHVlcy5qc29uLXJlc3VsdApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uY2Q5MDEyMDg2ZDYKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZXhwZWN0ZWQvZW51bS12YWx1ZXMuanNvbi1yZXN1bHQKQEAgLTAsMCArMSwxMjAzIEBACisj
IyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisvLyBUeXBlRG9tYWluCitJbnNwZWN0b3JCYWNrZW5k
LnJlZ2lzdGVyRG9tYWluKCJUeXBlRG9tYWluIiwgbnVsbCk7CitJbnNwZWN0b3JCYWNrZW5kLnJl
Z2lzdGVyRW51bSgiVHlwZURvbWFpbi5UeXBlRG9tYWluRW51bSIsIHtTaGFyZWQ6ICJzaGFyZWQi
LCBSZWQ6ICJyZWQiLCBHcmVlbjogImdyZWVuIiwgQmx1ZTogImJsdWUifSk7CitJbnNwZWN0b3JC
YWNrZW5kLmFjdGl2YXRlRG9tYWluKCJUeXBlRG9tYWluIiwgbnVsbCk7CisKKy8vIENvbW1hbmRE
b21haW4KK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIkNvbW1hbmREb21haW4iLCBu
dWxsKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJDb21tYW5kRG9tYWluLmNv
bW1hbmRXaXRoRW51bVJldHVyblZhbHVlIiwgbnVsbCwgW10sIFsicmV0dXJuVmFsdWUiXSk7CitJ
bnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJDb21tYW5kRG9tYWluIiwgbnVsbCk7CisK
Ky8vIEV2ZW50RG9tYWluCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJFdmVudERv
bWFpbiIsIG51bGwpOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIkV2ZW50RG9tYWlu
LkV2ZW50V2l0aEVudW1QYXJhbWV0ZXJQYXJhbWV0ZXIiLCB7U2hhcmVkOiAic2hhcmVkIiwgQmxh
Y2s6ICJibGFjayIsIFdoaXRlOiAid2hpdGUifSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVy
RXZlbnQoIkV2ZW50RG9tYWluLmV2ZW50V2l0aEVudW1QYXJhbWV0ZXIiLCBudWxsLCBbInBhcmFt
ZXRlciJdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudERvbWFpbkRpc3BhdGNoZXIg
PSBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRGlzcGF0Y2hlci5iaW5kKEluc3BlY3RvckJhY2tl
bmQsICJFdmVudERvbWFpbiIpOworSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiRXZl
bnREb21haW4iLCBudWxsKTsKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRz
LmpzCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisj
aWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJv
bnRlbmRSb3V0ZXIuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRj
aGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERp
c3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9CisgICAgQmFja2VuZERpc3BhdGNoZXIq
IGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5n
ZXQoKTsgfQorcHJpdmF0ZToKKyAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2Vu
ZERpc3BhdGNoZXI7Cit9OworCisKK2NsYXNzIEFsdGVybmF0ZUNvbW1hbmREb21haW5CYWNrZW5k
RGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6
CisgICAgdmlydHVhbCB+QWx0ZXJuYXRlQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKCkg
eyB9CisgICAgdmlydHVhbCB2b2lkIGNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlKGxvbmcgY2Fs
bElkKSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorIyMjIEVuZCBGaWxlOiBUZXN0
QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNr
ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0t
dmFsdWVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3R5cGVk
ZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCitjbGFzcyBBbHRlcm5hdGVDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNo
ZXI7CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisK
K2NsYXNzIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgeworcHVibGljOgor
ICAgIC8vIE5hbWVkIGFmdGVyIHBhcmFtZXRlciAncmV0dXJuVmFsdWUnIHdoaWxlIGdlbmVyYXRp
bmcgY29tbWFuZC9ldmVudCBjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZS4KKyAgICBlbnVtIGNs
YXNzIFJldHVyblZhbHVlIHsKKyAgICAgICAgU2hhcmVkID0gMCwKKyAgICAgICAgQ3lhbiA9IDYs
CisgICAgICAgIE1hZ2VudGEgPSA3LAorICAgICAgICBZZWxsb3cgPSA4LAorICAgIH07IC8vIGVu
dW0gY2xhc3MgUmV0dXJuVmFsdWUKKyAgICB2aXJ0dWFsIHZvaWQgY29tbWFuZFdpdGhFbnVtUmV0
dXJuVmFsdWUoRXJyb3JTdHJpbmcmLCBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyOjpSZXR1cm5WYWx1ZSogb3V0X3JldHVyblZhbHVlKSA9IDA7Citwcm90ZWN0ZWQ6CisgICAg
dmlydHVhbCB+Q29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOworfTsKKwor
Y2xhc3MgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBs
ZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPENvbW1h
bmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgQ29t
bWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIHZvaWQgZGlzcGF0Y2go
bG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYm
IG1lc3NhZ2UpIGZpbmFsOworcHJpdmF0ZToKKyAgICB2b2lkIGNvbW1hbmRXaXRoRW51bVJldHVy
blZhbHVlKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMp
OworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorcHVibGljOgor
ICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0Y2hlcihBbHRlcm5hdGVDb21tYW5kRG9tYWluQmFj
a2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRj
aGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQorcHJpdmF0ZToKKyAgICBBbHRlcm5hdGVDb21t
YW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIqIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciB7IG51bGxw
dHIgfTsKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
K3ByaXZhdGU6CisgICAgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNw
YXRjaGVyJiwgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIENv
bW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQgeyBudWxscHRyIH07
Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tl
bmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJz
LmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3Rm
L0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKKyNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgi
CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKK25h
bWVzcGFjZSBJbnNwZWN0b3IgeworCitDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyOjp+Q29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQorCitSZWY8
Q29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBDb21tYW5kRG9tYWluQmFja2VuZERpc3Bh
dGNoZXI6OmNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIENvbW1h
bmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQoreworICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0
Y2hlciwgYWdlbnQpKTsKK30KKworQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21t
YW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNw
YXRjaGVyLCBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKKyAg
ICA6IFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQorICAg
ICwgbV9hZ2VudChhZ2VudCkKK3sKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRp
c3BhdGNoZXJGb3JEb21haW4oIkNvbW1hbmREb21haW4iX3MsIHRoaXMpOworfQorCit2b2lkIENv
bW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNv
bnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCit7CisgICAg
UmVmPENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CisKKyAg
ICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOworICAgIG1lc3NhZ2UtPmdldE9iamVj
dCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsKKworICAgIGlmIChtZXRob2QgPT0gImNvbW1hbmRX
aXRoRW51bVJldHVyblZhbHVlIikgeworICAgICAgICBjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1
ZShyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5k
RGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInQ29tbWFuZERvbWFpbi4iICsgbWV0aG9kICsg
Iicgd2FzIG5vdCBmb3VuZCIpOworfQorCit2b2lkIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0
Y2hlcjo6Y29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxK
U09OOjpPYmplY3Q+JiYpCit7CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCisgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeworICAgICAgICBtX2FsdGVy
bmF0ZURpc3BhdGNoZXItPmNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlKHJlcXVlc3RJZCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCisKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWY8SlNPTjo6
T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIENvbW1hbmREb21h
aW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlJldHVyblZhbHVlIG91dF9yZXR1cm5WYWx1ZTsK
KyAgICBtX2FnZW50LT5jb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShlcnJvciwgJm91dF9yZXR1
cm5WYWx1ZSk7CisKKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQorICAgICAgICByZXN1bHQtPnNl
dFN0cmluZygicmV0dXJuVmFsdWUiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJz
OjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShvdXRfcmV0dXJuVmFsdWUpKTsKKworICAgIGlmICghZXJy
b3IubGVuZ3RoKCkpCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShy
ZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOworICAgIGVsc2UKKyAgICAgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6
U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29s
T2JqZWN0cy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBGcm9udGVu
ZFJvdXRlcjsKKworY2xhc3MgRXZlbnREb21haW5Gcm9udGVuZERpc3BhdGNoZXIgeworICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIEV2ZW50RG9tYWluRnJvbnRlbmRE
aXNwYXRjaGVyKEZyb250ZW5kUm91dGVyJiBmcm9udGVuZFJvdXRlcikgOiBtX2Zyb250ZW5kUm91
dGVyKGZyb250ZW5kUm91dGVyKSB7IH0KKyAgICAgICAgLy8gTmFtZWQgYWZ0ZXIgcGFyYW1ldGVy
ICdwYXJhbWV0ZXInIHdoaWxlIGdlbmVyYXRpbmcgY29tbWFuZC9ldmVudCBldmVudFdpdGhFbnVt
UGFyYW1ldGVyLgorICAgICAgICBlbnVtIGNsYXNzIFBhcmFtZXRlciB7CisgICAgICAgICAgICBT
aGFyZWQgPSAwLAorICAgICAgICAgICAgQmxhY2sgPSA0LAorICAgICAgICAgICAgV2hpdGUgPSA1
LAorICAgICAgICB9OyAvLyBlbnVtIGNsYXNzIFBhcmFtZXRlcgorICAgIHZvaWQgZXZlbnRXaXRo
RW51bVBhcmFtZXRlcihQYXJhbWV0ZXIgcGFyYW1ldGVyKTsKK3ByaXZhdGU6CisgICAgRnJvbnRl
bmRSb3V0ZXImIG1fZnJvbnRlbmRSb3V0ZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4g
RmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEZyb250
ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZy
b250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKKwordm9pZCBFdmVudERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcjo6ZXZl
bnRXaXRoRW51bVBhcmFtZXRlcihQYXJhbWV0ZXIgcGFyYW1ldGVyKQoreworICAgIFJlZjxKU09O
OjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBqc29u
TWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJFdmVudERvbWFpbi5ldmVudFdpdGhFbnVt
UGFyYW1ldGVyIl9zKTsKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiBwYXJhbXNPYmplY3QgPSBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJwYXJhbWV0
ZXIiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRW
YWx1ZShwYXJhbWV0ZXIpKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiX3Ms
IFdURk1vdmUocGFyYW1zT2JqZWN0KSk7CisKKyAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVu
dChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4K
KworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCituYW1lc3BhY2UgUHJvdG9jb2wgeworCisK
KworLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCituYW1lc3BhY2UgVHlwZURvbWFpbiB7CitlbnVt
IGNsYXNzIFR5cGVEb21haW5FbnVtOworfSAvLyBUeXBlRG9tYWluCisvLyBFbmQgb2YgZm9yd2Fy
ZCBkZWNsYXJhdGlvbnMuCisKKworCisKK25hbWVzcGFjZSBUZXN0SGVscGVycyB7CisKK1N0cmlu
ZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IFN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkKK3sKKyAgICByZXR1cm4g
Z2V0RW51bUNvbnN0YW50VmFsdWUoc3RhdGljX2Nhc3Q8aW50PihlbnVtVmFsdWUpKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKKworbmFtZXNwYWNlIFR5cGVEb21haW4geworLyog
ICovCitlbnVtIGNsYXNzIFR5cGVEb21haW5FbnVtIHsKKyAgICBTaGFyZWQgPSAwLAorICAgIFJl
ZCA9IDEsCisgICAgR3JlZW4gPSAyLAorICAgIEJsdWUgPSAzLAorfTsgLy8gZW51bSBjbGFzcyBU
eXBlRG9tYWluRW51bQorfSAvLyBUeXBlRG9tYWluCisKKworCituYW1lc3BhY2UgVGVzdEhlbHBl
cnMgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBQcm90b2NvbEVudW1UeXBlPgorT3B0aW9uYWw8UHJv
dG9jb2xFbnVtVHlwZT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYpOwor
CisvLyBFbnVtcyBpbiB0aGUgJ1R5cGVEb21haW4nIERvbWFpbgordGVtcGxhdGU8PgorT3B0aW9u
YWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW0+IHBhcnNl
RW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBl
RG9tYWluRW51bT4oY29uc3QgU3RyaW5nJik7CisKK30gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJz
CisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgor
CituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRI
YXNoOworCisvLyBIYXNoIGRlY2xhcmF0aW9ucyBpbiB0aGUgJ1R5cGVEb21haW4nIERvbWFpbgor
dGVtcGxhdGU8Pgorc3RydWN0IERlZmF1bHRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVE
b21haW46OlR5cGVEb21haW5FbnVtPiB7CisgICAgdHlwZWRlZiBJbnRIYXNoPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlR5cGVEb21haW46OlR5cGVEb21haW5FbnVtPiBIYXNoOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV1RGCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorCisjIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0UHJv
dG9jb2xPYmplY3RzLmgiCisKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCituYW1lc3BhY2Ug
UHJvdG9jb2wgeworCituYW1lc3BhY2UgVGVzdEhlbHBlcnMgeworCitzdGF0aWMgY29uc3QgY2hh
ciogY29uc3QgZW51bV9jb25zdGFudF92YWx1ZXNbXSA9IHsKKyAgICAic2hhcmVkIiwKKyAgICAi
cmVkIiwKKyAgICAiZ3JlZW4iLAorICAgICJibHVlIiwKKyAgICAiYmxhY2siLAorICAgICJ3aGl0
ZSIsCisgICAgImN5YW4iLAorICAgICJtYWdlbnRhIiwKKyAgICAieWVsbG93IiwKK307CisKK1N0
cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgeworICAgIHJldHVybiBlbnVtX2Nv
bnN0YW50X3ZhbHVlc1tjb2RlXTsKK30KKworLy8gRW51bXMgaW4gdGhlICdUeXBlRG9tYWluJyBE
b21haW4KK3RlbXBsYXRlPD4KK09wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21h
aW46OlR5cGVEb21haW5FbnVtPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW0+KGNvbnN0IFN0cmluZyYgcHJvdG9j
b2xTdHJpbmcpCit7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0g
eworICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46OlR5cGVE
b21haW5FbnVtOjpTaGFyZWQsCisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6
VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW06OlJlZCwKKyAgICAgICAgKHNpemVfdClJbnNwZWN0
b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51bTo6R3JlZW4sCisgICAgICAg
IChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW06
OkJsdWUsCisgICAgfTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDQ7ICsraSkKKyAgICAg
ICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFs
dWVzW2ldXSkKKyAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURv
bWFpbjo6VHlwZURvbWFpbkVudW0pY29uc3RhbnRWYWx1ZXNbaV07CisKKyAgICByZXR1cm4gV1RG
OjpudWxsb3B0OworfQorCisKK30gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCisKKworCit9IC8v
IG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBlbnVtLXZhbHVlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKK0Bwcm90b2Nv
bCBUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluRG9tYWluSGFuZGxlcjsKKworbmFtZXNwYWNlIElu
c3BlY3RvciB7CisKKworY2xhc3MgT2JqQ0luc3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5kRGlz
cGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVDb21tYW5kRG9tYWluQmFja2VuZERpc3Bh
dGNoZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIE9iakNJ
bnNwZWN0b3JDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sQ29t
bWFuZERvbWFpbkRvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7
IH0KKyAgICB2b2lkIGNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlKGxvbmcgcmVxdWVzdElkKSBm
aW5hbDsKK3ByaXZhdGU6CisgICAgUmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbENvbW1hbmREb21h
aW5Eb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisK
KyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCisvLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2lt
cG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlICJUZXN0
UHJvdG9jb2xJbnRlcm5hbC5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Ig
eworCit2b2lkIE9iakNJbnNwZWN0b3JDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmNv
bW1hbmRXaXRoRW51bVJldHVyblZhbHVlKGxvbmcgcmVxdWVzdElkKQoreworICAgIGlmICghW21f
ZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihjb21tYW5kV2l0aEVudW1SZXR1
cm5WYWx1ZVdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgeworICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2Vu
ZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0NvbW1hbmREb21haW4uY29tbWFuZFdpdGhF
bnVtUmV0dXJuVmFsdWUnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7CisgICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlz
cGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICB9OworCisgICAgaWQgc3VjY2Vzc0NhbGxiYWNr
ID0gXihUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluQ29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWVS
ZXR1cm5WYWx1ZSByZXR1cm5WYWx1ZSkgeworICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1
bHRPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICByZXN1bHRPYmplY3Qt
PnNldFN0cmluZygicmV0dXJuVmFsdWUiX3MsIHRvUHJvdG9jb2xTdHJpbmcocmV0dXJuVmFsdWUp
KTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwg
V1RGTW92ZShyZXN1bHRPYmplY3QpLCBmYWxzZSk7CisgICAgfTsKKworICAgIFttX2RlbGVnYXRl
IGNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFj
ayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKK30KKworCit9IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hl
cnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9y
L1Rlc3RQcm90b2NvbC5oPgorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIp
KSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0CitAcHJv
cGVydHkgKG5vbmF0b21pYywgcmV0YWluLCBzZXR0ZXI9c2V0Q29tbWFuZERvbWFpbkhhbmRsZXI6
KSBpZDxUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluRG9tYWluSGFuZGxlcj4gY29tbWFuZERvbWFp
bkhhbmRsZXI7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFRlc3RQcm90b2NvbEV2
ZW50RG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyICpldmVudERvbWFpbkV2ZW50RGlzcGF0Y2hl
cjsKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAor
CisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KKy8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbi5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2ltcG9ydCAi
VGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgorCit1c2luZyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
bgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Cisg
ICAgaWQ8VGVzdFByb3RvY29sQ29tbWFuZERvbWFpbkRvbWFpbkhhbmRsZXI+IF9jb21tYW5kRG9t
YWluSGFuZGxlcjsKKyAgICBUZXN0UHJvdG9jb2xFdmVudERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0
Y2hlciAqX2V2ZW50RG9tYWluRXZlbnREaXNwYXRjaGVyOworfQorCistIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRy
b2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAg
ICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIg
PSBjb250cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sK
KyAgICBbX2NvbW1hbmREb21haW5IYW5kbGVyIHJlbGVhc2VdOworICAgIFtfZXZlbnREb21haW5F
dmVudERpc3BhdGNoZXIgcmVsZWFzZV07CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistICh2
b2lkKXNldENvbW1hbmREb21haW5IYW5kbGVyOihpZDxUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWlu
RG9tYWluSGFuZGxlcj4paGFuZGxlcgoreworICAgIGlmIChoYW5kbGVyID09IF9jb21tYW5kRG9t
YWluSGFuZGxlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgW19jb21tYW5kRG9tYWluSGFuZGxl
ciByZWxlYXNlXTsKKyAgICBfY29tbWFuZERvbWFpbkhhbmRsZXIgPSBbaGFuZGxlciByZXRhaW5d
OworCisgICAgYXV0byBhbHRlcm5hdGVEaXNwYXRjaGVyID0gbWFrZVVuaXF1ZTxPYmpDSW5zcGVj
dG9yQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPihoYW5kbGVyKTsKKyAgICBhdXRvIGFs
dGVybmF0ZUFnZW50ID0gbWFrZVVuaXF1ZTxBbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudDxDb21t
YW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIsIEFsdGVybmF0ZUNvbW1hbmREb21haW5CYWNrZW5k
RGlzcGF0Y2hlcj4+KCJDb21tYW5kRG9tYWluIl9zLCAqX2NvbnRyb2xsZXIsIFdURk1vdmUoYWx0
ZXJuYXRlRGlzcGF0Y2hlcikpOworICAgIF9jb250cm9sbGVyLT5hcHBlbmRFeHRyYUFnZW50KFdU
Rk1vdmUoYWx0ZXJuYXRlQWdlbnQpKTsKK30KKworLSAoaWQ8VGVzdFByb3RvY29sQ29tbWFuZERv
bWFpbkRvbWFpbkhhbmRsZXI+KWNvbW1hbmREb21haW5IYW5kbGVyCit7CisgICAgcmV0dXJuIF9j
b21tYW5kRG9tYWluSGFuZGxlcjsKK30KKworLSAoVGVzdFByb3RvY29sRXZlbnREb21haW5Eb21h
aW5FdmVudERpc3BhdGNoZXIgKilldmVudERvbWFpbkV2ZW50RGlzcGF0Y2hlcgoreworICAgIGlm
ICghX2V2ZW50RG9tYWluRXZlbnREaXNwYXRjaGVyKQorICAgICAgICBfZXZlbnREb21haW5FdmVu
dERpc3BhdGNoZXIgPSBbW1Rlc3RQcm90b2NvbEV2ZW50RG9tYWluRG9tYWluRXZlbnREaXNwYXRj
aGVyIGFsbG9jXSBpbml0V2l0aENvbnRyb2xsZXI6X2NvbnRyb2xsZXJdOworICAgIHJldHVybiBf
ZXZlbnREb21haW5FdmVudERpc3BhdGNoZXI7Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBlbnVtLXZhbHVlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwor
dXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2Nv
bEV2ZW50RG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyCit7CisgICAgQXVnbWVudGFibGVJbnNw
ZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVy
Cit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJl
dHVybiBuaWw7CisgICAgQVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250cm9sbGVyID0gY29u
dHJvbGxlcjsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClldmVudFdpdGhFbnVtUGFy
YW1ldGVyV2l0aFBhcmFtZXRlcjooVGVzdFByb3RvY29sRXZlbnREb21haW5FdmVudFdpdGhFbnVt
UGFyYW1ldGVyUGFyYW1ldGVyKXBhcmFtZXRlcgoreworICAgIGNvbnN0IEZyb250ZW5kUm91dGVy
JiByb3V0ZXIgPSBfY29udHJvbGxlci0+ZnJvbnRlbmRSb3V0ZXIoKTsKKworICAgIFJlZjxKU09O
OjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBqc29u
TWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJFdmVudERvbWFpbi5ldmVudFdpdGhFbnVt
UGFyYW1ldGVyIl9zKTsKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiBwYXJhbXNPYmplY3QgPSBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJwYXJhbWV0
ZXIiX3MsIHRvUHJvdG9jb2xTdHJpbmcocGFyYW1ldGVyKSk7CisgICAganNvbk1lc3NhZ2UtPnNl
dE9iamVjdCgicGFyYW1zIl9zLCBXVEZNb3ZlKHBhcmFtc09iamVjdCkpOworICAgIHJvdXRlci5z
ZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKK30KKworQGVuZAorCisKKyMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBl
bnVtLXZhbHVlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCisjaW1wb3J0IDxXZWJJbnNw
ZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+CisKKworCisKKwordHlwZWRlZiBOU19FTlVN
KE5TSW50ZWdlciwgVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0pIHsKKyAgICBUZXN0UHJvdG9j
b2xUeXBlRG9tYWluRW51bVNoYXJlZCwKKyAgICBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bVJl
ZCwKKyAgICBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bUdyZWVuLAorICAgIFRlc3RQcm90b2Nv
bFR5cGVEb21haW5FbnVtQmx1ZSwKK307CisKKworCitAcHJvdG9jb2wgVGVzdFByb3RvY29sQ29t
bWFuZERvbWFpbkRvbWFpbkhhbmRsZXIgPE5TT2JqZWN0PgorQG9wdGlvbmFsCistICh2b2lkKWNv
bW1hbmRXaXRoRW51bVJldHVyblZhbHVlV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJp
bmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKShUZXN0UHJv
dG9jb2xDb21tYW5kRG9tYWluQ29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWVSZXR1cm5WYWx1ZSBy
ZXR1cm5WYWx1ZSkpc3VjY2Vzc0NhbGxiYWNrOworQGVuZAorCitfX2F0dHJpYnV0ZV9fKCh2aXNp
YmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sRXZlbnREb21haW5E
b21haW5FdmVudERpc3BhdGNoZXIgOiBOU09iamVjdAorLSAodm9pZClldmVudFdpdGhFbnVtUGFy
YW1ldGVyV2l0aFBhcmFtZXRlcjooVGVzdFByb3RvY29sRXZlbnREb21haW5FdmVudFdpdGhFbnVt
UGFyYW1ldGVyUGFyYW1ldGVyKXBhcmFtZXRlcjsKK0BlbmQKKworCisjaW1wb3J0IDxXZWJJbnNw
ZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+CisKKyMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVy
bmFsLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRl
c3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIK
KyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5o
PgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKworQGludGVyZmFjZSBUZXN0UHJvdG9jb2xF
dmVudERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAoUHJpdmF0ZSkKKy0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aENvbnRyb2xsZXI6KEluc3BlY3Rvcjo6QXVnbWVudGFibGVJbnNwZWN0b3JDb250
cm9sbGVyKiljb250cm9sbGVyOworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
SW50ZXJuYWwuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
LmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQ
cm90b2NvbC5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJz
aW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgT2Jq
Q0VudW1UeXBlPgorT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29u
c3QgU3RyaW5nJiB2YWx1ZSk7CisKKworaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRl
c3RQcm90b2NvbFR5cGVEb21haW5FbnVtIHZhbHVlKQoreworICAgIHN3aXRjaCh2YWx1ZSkgewor
ICAgIGNhc2UgVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1TaGFyZWQ6CisgICAgICAgIHJldHVy
biAic2hhcmVkIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1SZWQ6Cisg
ICAgICAgIHJldHVybiAicmVkIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sVHlwZURvbWFpbkVu
dW1HcmVlbjoKKyAgICAgICAgcmV0dXJuICJncmVlbiJfczsKKyAgICBjYXNlIFRlc3RQcm90b2Nv
bFR5cGVEb21haW5FbnVtQmx1ZToKKyAgICAgICAgcmV0dXJuICJibHVlIl9zOworICAgIH0KK30K
KwordGVtcGxhdGU8PgoraW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVt
PiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAodmFs
dWUgPT0gInNoYXJlZCIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51
bVNoYXJlZDsKKyAgICBpZiAodmFsdWUgPT0gInJlZCIpCisgICAgICAgIHJldHVybiBUZXN0UHJv
dG9jb2xUeXBlRG9tYWluRW51bVJlZDsKKyAgICBpZiAodmFsdWUgPT0gImdyZWVuIikKKyAgICAg
ICAgcmV0dXJuIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtR3JlZW47CisgICAgaWYgKHZhbHVl
ID09ICJibHVlIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtQmx1
ZTsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorCisjIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9j
b2xUeXBlUGFyc2VyLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2Jq
ZWN0UHJpdmF0ZS5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW50ZXJmYWNl
IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoVHlwZURvbWFpbkRvbWFpbikKKworKyAodm9p
ZClfcGFyc2VUeXBlRG9tYWluRW51bTooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6
KGlkKXBheWxvYWQ7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucyAoVHlwZURvbWFpbkRvbWFpbikKKworKyAodm9pZClfcGFyc2VUeXBlRG9tYWlu
RW51bTooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAg
ICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBjbGFzc10p
OworICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtPiByZXN1bHQgPSBJbnNw
ZWN0b3I6OmZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bT4ocGF5
bG9hZCk7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfRU5VTV9WQUxVRShyZXN1bHQsIEAi
VHlwZURvbWFpbkVudW0iKTsKKyAgICAqb3V0VmFsdWUgPSBAKHJlc3VsdC52YWx1ZSgpKTsKK30K
KworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1t
CisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIK
KworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDxXZWJJ
bnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorI2ltcG9ydCA8d3RmL0Fz
c2VydGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFj
ZSBJbnNwZWN0b3I7CisKKworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9leHBlY3RlZC9ldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlw
ZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC9ldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxl
VHlwZS5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u
ODE3ZTNhNTZjYTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1k
b21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1yZXN1bHQKQEAgLTAsMCArMSwxMDMwIEBACisjIyMg
QmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdn
YWJsZVR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisvLyBEb21haW4KK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIkRvbWFpbiIsIG51
bGwpOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIkRvbWFpbi5Db21tYW5kIiwg
bnVsbCwgW10sIFtdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudCgiRG9tYWluLkV2
ZW50IiwgWyJwYWdlIiwgIndvcmtlciJdLCBbXSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVy
RG9tYWluRGlzcGF0Y2hlciA9IEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEaXNwYXRjaGVyLmJp
bmQoSW5zcGVjdG9yQmFja2VuZCwgIkRvbWFpbiIpOworSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0
ZURvbWFpbigiRG9tYWluIiwgWyJwYWdlIl0pOworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNr
ZW5kQ29tbWFuZHMuanMKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlz
cGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRhcmdl
dFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUo
SU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bFR5cGVzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRl
ci5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERp
c3BhdGNoZXIgeworcHVibGljOgorICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRy
PEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9
IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KKyAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERp
c3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Citw
cml2YXRlOgorICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hl
cjsKK307CisKKworY2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIgOiBwdWJs
aWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgfkFs
dGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIENv
bW1hbmQobG9uZyBjYWxsSWQpID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgor
CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjIyMg
RW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4g
RmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUu
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJp
bmcgRXJyb3JTdHJpbmc7CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKK2NsYXNzIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyOworI2VuZGlmIC8v
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCitjbGFzcyBEb21haW5C
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBDb21t
YW5kKEVycm9yU3RyaW5nJikgPSAwOworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgfkRvbWFpbkJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlcigpOworfTsKKworY2xhc3MgRG9tYWluQmFja2VuZERpc3Bh
dGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgeworcHVi
bGljOgorICAgIHN0YXRpYyBSZWY8RG9tYWluQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNr
ZW5kRGlzcGF0Y2hlciYsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIHZv
aWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNP
Tjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOworcHJpdmF0ZToKKyAgICB2b2lkIENvbW1hbmQo
bG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisjaWYg
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCitwdWJsaWM6CisgICAgdm9p
ZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVy
KiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0
ZURpc3BhdGNoZXI7IH0KK3ByaXZhdGU6CisgICAgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3Bh
dGNoZXIqIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciB7IG51bGxwdHIgfTsKKyNlbmRpZiAvLyBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK3ByaXZhdGU6CisgICAgRG9tYWlu
QmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImLCBEb21haW5CYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXIqKTsKKyAgICBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdl
bnQgeyBudWxscHRyIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQg
RmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFj
a2VuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2
ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL0pTT05W
YWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKKyNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCisjZW5k
aWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKK25hbWVzcGFj
ZSBJbnNwZWN0b3IgeworCitEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5Eb21haW5C
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KKworUmVmPERvbWFpbkJhY2tlbmREaXNwYXRj
aGVyPiBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiBi
YWNrZW5kRGlzcGF0Y2hlciwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkK
K3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihiYWNr
ZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKK30KKworRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkRv
bWFpbkJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hl
ciwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKKyAgICA6IFN1cHBsZW1l
bnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQorICAgICwgbV9hZ2VudChh
Z2VudCkKK3sKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JE
b21haW4oIkRvbWFpbiJfcywgdGhpcyk7Cit9CisKK3ZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNo
ZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpT
T046Ok9iamVjdD4mJiBtZXNzYWdlKQoreworICAgIFJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hl
cj4gcHJvdGVjdCgqdGhpcyk7CisKKyAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJz
OworICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsKKworICAg
IGlmIChtZXRob2QgPT0gIkNvbW1hbmQiKSB7CisgICAgICAgIENvbW1hbmQocmVxdWVzdElkLCBX
VEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fYmFj
a2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1l
dGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOwor
fQorCit2b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElk
LCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQoreworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQorICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKKyAgICAg
ICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5Db21tYW5kKHJlcXVlc3RJZCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCisKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiBy
ZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYWdlbnQtPkNvbW1hbmQoZXJy
b3IpOworCisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Cisg
ICAgZWxzZQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9y
KEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOworfQorCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3Bh
dGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRhcmdldFR5cGUtbWF0Y2hp
bmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xP
YmplY3RzLmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEZyb250ZW5k
Um91dGVyOworCitjbGFzcyBEb21haW5Gcm9udGVuZERpc3BhdGNoZXIgeworICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcihG
cm9udGVuZFJvdXRlciYgZnJvbnRlbmRSb3V0ZXIpIDogbV9mcm9udGVuZFJvdXRlcihmcm9udGVu
ZFJvdXRlcikgeyB9CisgICAgdm9pZCBFdmVudCgpOworcHJpdmF0ZToKKyAgICBGcm9udGVuZFJv
dXRlciYgbV9mcm9udGVuZFJvdXRlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgor
IyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxl
OiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5q
c29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit2b2lkIERv
bWFpbkZyb250ZW5kRGlzcGF0Y2hlcjo6RXZlbnQoKQoreworICAgIFJlZjxKU09OOjpPYmplY3Q+
IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBqc29uTWVzc2FnZS0+
c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOworCisgICAgbV9mcm9udGVu
ZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0
Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRv
bWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yUHJvdG9jb2xUeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25h
bWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworCisKKwor
CisKKworCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKworIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorCisjaW5jbHVkZSA8
d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworCisKK30gLy8gbmFtZXNw
YWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xC
YWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2
ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2luY2x1ZGUg
PHd0Zi9SZXRhaW5QdHIuaD4KKworQHByb3RvY29sIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhh
bmRsZXI7CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKK2NsYXNzIE9iakNJbnNwZWN0b3JE
b21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6Cisg
ICAgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbERv
bWFpbkRvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KKyAg
ICB2b2lkIENvbW1hbmQobG9uZyByZXF1ZXN0SWQpIGZpbmFsOworcHJpdmF0ZToKKyAgICBSZXRh
aW5QdHI8aWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFj
a2VuZERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZl
bnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIK
KyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSAi
VGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorCituYW1lc3BhY2UgSW5zcGVj
dG9yIHsKKwordm9pZCBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1h
bmQobG9uZyByZXF1ZXN0SWQpCit7CisgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2Vs
ZWN0b3I6QHNlbGVjdG9yKENvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6
KV0pIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihy
ZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uQ29t
bWFuZCcgd2FzIG5vdCBmb3VuZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNl
bmRQZW5kaW5nRXJyb3JzKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZCBlcnJv
ckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpT
ZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVu
ZGluZ0Vycm9ycygpOworICAgIH07CisKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeeworICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgfTsKKworICAgIFttX2RlbGVnYXRlIENvbW1h
bmRXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNz
Q2FsbGJhY2tdOworfQorCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxX
ZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+CisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkg
KCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNP
YmplY3QKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4sIHNldHRlcj1zZXREb21haW5IYW5k
bGVyOikgaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4gZG9tYWluSGFuZGxlcjsK
K0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgVGVzdFByb3RvY29sRG9tYWluRG9tYWlu
RXZlbnREaXNwYXRjaGVyICpkb21haW5FdmVudERpc3BhdGNoZXI7CitAZW5kCisKKworIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKworIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRl
c3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJu
YWwuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorI2ltcG9y
dCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9y
dCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+
CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4K
KwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90
b2NvbENvbmZpZ3VyYXRpb24KK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIq
IF9jb250cm9sbGVyOworICAgIGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IF9k
b21haW5IYW5kbGVyOworICAgIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hl
ciAqX2RvbWFpbkV2ZW50RGlzcGF0Y2hlcjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
Q29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCit7
CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVy
biBuaWw7CisgICAgQVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250cm9sbGVyID0gY29udHJv
bGxlcjsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgW19k
b21haW5IYW5kbGVyIHJlbGVhc2VdOworICAgIFtfZG9tYWluRXZlbnREaXNwYXRjaGVyIHJlbGVh
c2VdOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAodm9pZClzZXREb21haW5IYW5kbGVy
OihpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiloYW5kbGVyCit7CisgICAgaWYg
KGhhbmRsZXIgPT0gX2RvbWFpbkhhbmRsZXIpCisgICAgICAgIHJldHVybjsKKworICAgIFtfZG9t
YWluSGFuZGxlciByZWxlYXNlXTsKKyAgICBfZG9tYWluSGFuZGxlciA9IFtoYW5kbGVyIHJldGFp
bl07CisKKyAgICBhdXRvIGFsdGVybmF0ZURpc3BhdGNoZXIgPSBtYWtlVW5pcXVlPE9iakNJbnNw
ZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7CisgICAgYXV0byBhbHRlcm5h
dGVBZ2VudCA9IG1ha2VVbmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8RG9tYWluQmFj
a2VuZERpc3BhdGNoZXIsIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyPj4oIkRvbWFp
biJfcywgKl9jb250cm9sbGVyLCBXVEZNb3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIpKTsKKyAgICBf
Y29udHJvbGxlci0+YXBwZW5kRXh0cmFBZ2VudChXVEZNb3ZlKGFsdGVybmF0ZUFnZW50KSk7Cit9
CisKKy0gKGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+KWRvbWFpbkhhbmRsZXIK
K3sKKyAgICByZXR1cm4gX2RvbWFpbkhhbmRsZXI7Cit9CisKKy0gKFRlc3RQcm90b2NvbERvbWFp
bkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqKWRvbWFpbkV2ZW50RGlzcGF0Y2hlcgoreworICAgIGlm
ICghX2RvbWFpbkV2ZW50RGlzcGF0Y2hlcikKKyAgICAgICAgX2RvbWFpbkV2ZW50RGlzcGF0Y2hl
ciA9IFtbVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyIGFsbG9jXSBpbml0
V2l0aENvbnRyb2xsZXI6X2NvbnRyb2xsZXJdOworICAgIHJldHVybiBfZG9tYWluRXZlbnREaXNw
YXRjaGVyOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1
cmF0aW9uLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJz
Lm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1t
YXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgor
CisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPHd0Zi9K
U09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRh
dGlvbiBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIKK3sKKyAgICBBdWdt
ZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworfQorCistIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIq
KWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikK
KyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRy
b2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKUV2ZW50
Cit7CisgICAgY29uc3QgRnJvbnRlbmRSb3V0ZXImIHJvdXRlciA9IF9jb250cm9sbGVyLT5mcm9u
dGVuZFJvdXRlcigpOworCisgICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJf
cywgIkRvbWFpbi5FdmVudCJfcyk7CisgICAgcm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+
dG9KU09OU3RyaW5nKCkpOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xFdmVudERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRhcmdldFR5cGUtbWF0Y2hp
bmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKKyNp
bXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KKworCisKKworCisK
KworCitAcHJvdG9jb2wgVGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlciA8TlNPYmplY3Q+
CitAb3B0aW9uYWwKKy0gKHZvaWQpQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5T
U3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikodm9p
ZCkpc3VjY2Vzc0NhbGxiYWNrOworQGVuZAorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgi
ZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNw
YXRjaGVyIDogTlNPYmplY3QKKy0gKHZvaWQpRXZlbnQ7CitAZW5kCisKKworI2ltcG9ydCA8V2Vi
SW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgorCisjIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJ
bnRlcm5hbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0
VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNp
bXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCisjaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPHd0Zi9K
U09OVmFsdWVzLmg+CisKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnRE
aXNwYXRjaGVyIChQcml2YXRlKQorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjoo
SW5zcGVjdG9yOjpBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXI7CitA
ZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2Fi
bGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9j
b2xBcnJheUNvbnZlcnNpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+CitPcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90
b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRl
YnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgorI2lt
cG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKwordXNp
bmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisKKworCisKKyMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xU
eXBlcy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRhcmdldFR5
cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwu
aCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDxX
ZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorI2ltcG9ydCA8d3Rm
L0Fzc2VydGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVz
cGFjZSBJbnNwZWN0b3I7CisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZl
bnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uODNhYmRjNzdiMjUKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZl
bnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uLXJlc3VsdApAQCAtMCwwICsxLDExODIg
QEAKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJz
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworLy8gRGF0
YWJhc2UKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIkRhdGFiYXNlIiwgbnVsbCk7
CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnQoIkRhdGFiYXNlLmRpZEV4ZWN1dGVPcHRp
b25hbFBhcmFtZXRlcnMiLCBudWxsLCBbImNvbHVtbk5hbWVzIiwgIm5vdGVzIiwgInRpbWVzdGFt
cCIsICJ2YWx1ZXMiLCAicGF5bG9hZCIsICJzcWxFcnJvciIsICJzY3JlZW5Db2xvciIsICJhbHRl
cm5hdGVDb2xvcnMiLCAicHJpbnRDb2xvciJdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJF
dmVudCgiRGF0YWJhc2UuZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIiwgbnVsbCwgWyJj
b2x1bW5OYW1lcyIsICJub3RlcyIsICJ0aW1lc3RhbXAiLCAidmFsdWVzIiwgInBheWxvYWQiLCAi
c3FsRXJyb3IiLCAic2NyZWVuQ29sb3IiLCAiYWx0ZXJuYXRlQ29sb3JzIiwgInByaW50Q29sb3Ii
XSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRGF0YWJhc2VEaXNwYXRjaGVyID0gSW5zcGVj
dG9yQmFja2VuZC5yZWdpc3RlckRpc3BhdGNoZXIuYmluZChJbnNwZWN0b3JCYWNrZW5kLCAiRGF0
YWJhc2UiKTsKK0luc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkRhdGFiYXNlIiwgbnVs
bCk7CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcworCisjIyMgQmVn
aW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25j
ZQorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyNpbmNs
dWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yRnJvbnRlbmRSb3V0ZXIuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldEJhY2tlbmRE
aXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFj
a2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9CisgICAgQmFja2VuZERpc3Bh
dGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0
Y2hlci5nZXQoKTsgfQorcHJpdmF0ZToKKyAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1f
YmFja2VuZERpc3BhdGNoZXI7Cit9OworCisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
KworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorIyMj
IEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1
ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7
CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tl
bmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJz
LmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlv
bmFsLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0
ZXIuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRl
c3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCit9IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNw
cAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMu
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDx3dGYv
SlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKKworY2xhc3MgRnJvbnRlbmRSb3V0ZXI7CisKK2NsYXNzIERhdGFiYXNl
RnJvbnRlbmREaXNwYXRjaGVyIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1Ymxp
YzoKKyAgICBEYXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hlcihGcm9udGVuZFJvdXRlciYgZnJvbnRl
bmRSb3V0ZXIpIDogbV9mcm9udGVuZFJvdXRlcihmcm9udGVuZFJvdXRlcikgeyB9CisgICAgdm9p
ZCBkaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmlu
Zz4+IGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIG5vdGVzLCBjb25zdCBkb3VibGUqIHRpbWVz
dGFtcCwgUmVmUHRyPEpTT046Ok9iamVjdD4gdmFsdWVzLCBSZWZQdHI8SlNPTjo6VmFsdWU+IHBh
eWxvYWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVy
cm9yLCBjb25zdCBTdHJpbmcqIHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4gYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcqIHBy
aW50Q29sb3IpOworICAgIHZvaWQgZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKFJlZlB0
cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG5vdGVz
LCBkb3VibGUgdGltZXN0YW1wLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiB2YWx1ZXMsIFJlZlB0cjxK
U09OOjpWYWx1ZT4gcGF5bG9hZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNl
OjpFcnJvcj4gc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiBhbHRlcm5hdGVDb2xvcnMsIGNv
bnN0IFN0cmluZyYgcHJpbnRDb2xvcik7Citwcml2YXRlOgorICAgIEZyb250ZW5kUm91dGVyJiBt
X2Zyb250ZW5kUm91dGVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5k
IEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RG
cm9udGVuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgor
CituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordm9pZCBEYXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hl
cjo6ZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJp
bmc+PiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nKiBub3RlcywgY29uc3QgZG91YmxlKiB0aW1l
c3RhbXAsIFJlZlB0cjxKU09OOjpPYmplY3Q+IHZhbHVlcywgUmVmUHRyPEpTT046OlZhbHVlPiBw
YXlsb2FkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBzcWxF
cnJvciwgY29uc3QgU3RyaW5nKiBzY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IGFsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nKiBw
cmludENvbG9yKQoreworICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3Ms
ICJEYXRhYmFzZS5kaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzIl9zKTsKKyAgICBSZWY8SlNP
Tjo6T2JqZWN0PiBwYXJhbXNPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGlm
IChjb2x1bW5OYW1lcykKKyAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiY29sdW1uTmFt
ZXMiX3MsIGNvbHVtbk5hbWVzKTsKKyAgICBpZiAobm90ZXMpCisgICAgICAgIHBhcmFtc09iamVj
dC0+c2V0U3RyaW5nKCJub3RlcyJfcywgKm5vdGVzKTsKKyAgICBpZiAodGltZXN0YW1wKQorICAg
ICAgICBwYXJhbXNPYmplY3QtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCAqdGltZXN0YW1wKTsK
KyAgICBpZiAodmFsdWVzKQorICAgICAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgidmFsdWVz
Il9zLCB2YWx1ZXMpOworICAgIGlmIChwYXlsb2FkKQorICAgICAgICBwYXJhbXNPYmplY3QtPnNl
dFZhbHVlKCJwYXlsb2FkIl9zLCAqcGF5bG9hZCk7CisgICAgaWYgKHNxbEVycm9yKQorICAgICAg
ICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIHNxbEVycm9yKTsKKyAgICBp
ZiAoc2NyZWVuQ29sb3IpCisgICAgICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJzY3JlZW5D
b2xvciJfcywgKnNjcmVlbkNvbG9yKTsKKyAgICBpZiAoYWx0ZXJuYXRlQ29sb3JzKQorICAgICAg
ICBwYXJhbXNPYmplY3QtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIGFsdGVybmF0ZUNv
bG9ycyk7CisgICAgaWYgKHByaW50Q29sb3IpCisgICAgICAgIHBhcmFtc09iamVjdC0+c2V0U3Ry
aW5nKCJwcmludENvbG9yIl9zLCAqcHJpbnRDb2xvcik7CisgICAganNvbk1lc3NhZ2UtPnNldE9i
amVjdCgicGFyYW1zIl9zLCBXVEZNb3ZlKHBhcmFtc09iamVjdCkpOworCisgICAgbV9mcm9udGVu
ZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKK30KKwordm9p
ZCBEYXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hlcjo6ZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0
ZXJzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IGNvbHVtbk5hbWVzLCBjb25zdCBTdHJp
bmcmIG5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiB2YWx1ZXMs
IFJlZlB0cjxKU09OOjpWYWx1ZT4gcGF5bG9hZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpFcnJvcj4gc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgc2NyZWVuQ29sb3IsIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiBhbHRlcm5hdGVD
b2xvcnMsIGNvbnN0IFN0cmluZyYgcHJpbnRDb2xvcikKK3sKKyAgICBSZWY8SlNPTjo6T2JqZWN0
PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAganNvbk1lc3NhZ2Ut
PnNldFN0cmluZygibWV0aG9kIl9zLCAiRGF0YWJhc2UuZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJh
bWV0ZXJzIl9zKTsKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiBwYXJhbXNPYmplY3QgPSBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpOworICAgIHBhcmFtc09iamVjdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVz
Il9zLCBjb2x1bW5OYW1lcyk7CisgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoIm5vdGVzIl9z
LCBub3Rlcyk7CisgICAgcGFyYW1zT2JqZWN0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgdGlt
ZXN0YW1wKTsKKyAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgidmFsdWVzIl9zLCB2YWx1ZXMp
OworICAgIHBhcmFtc09iamVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIHBheWxvYWQpOworICAg
IHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgc3FsRXJyb3IpOworICAgIHBh
cmFtc09iamVjdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgc2NyZWVuQ29sb3IpOworICAg
IHBhcmFtc09iamVjdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgYWx0ZXJuYXRlQ29s
b3JzKTsKKyAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgcHJpbnRD
b2xvcik7CisgICAganNvbk1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIl9zLCBXVEZNb3ZlKHBh
cmFtc09iamVjdCkpOworCisgICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3Nh
Z2UtPnRvSlNPTlN0cmluZygpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMj
IyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2Vy
dGlvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCituYW1lc3BhY2UgUHJvdG9j
b2wgeworCisKKworLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCituYW1lc3BhY2UgRGF0YWJhc2Ug
eworY2xhc3MgRXJyb3I7Cit9IC8vIERhdGFiYXNlCisvLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJh
dGlvbnMuCisKKworLy8gVHlwZWRlZnMuCituYW1lc3BhY2UgRGF0YWJhc2UgeworLyogVW5pcXVl
IGlkZW50aWZpZXIgb2YgRGF0YWJhc2Ugb2JqZWN0LiAqLwordHlwZWRlZiBTdHJpbmcgRGF0YWJh
c2VJZDsKK3R5cGVkZWYgU3RyaW5nIFByaW1hcnlDb2xvcnM7Cit0eXBlZGVmIEpTT046OkFycmF5
T2Y8U3RyaW5nPiBDb2xvckxpc3Q7Cit9IC8vIERhdGFiYXNlCisvLyBFbmQgb2YgdHlwZWRlZnMu
CisKK25hbWVzcGFjZSBEYXRhYmFzZSB7CisvKiBEYXRhYmFzZSBlcnJvci4gKi8KK2NsYXNzIEVy
cm9yIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgeworcHVibGljOgorICAgIGVudW0geworICAg
ICAgICBOb0ZpZWxkc1NldCA9IDAsCisgICAgICAgIE1lc3NhZ2VTZXQgPSAxIDw8IDAsCisgICAg
ICAgIENvZGVTZXQgPSAxIDw8IDEsCisgICAgICAgIEFsbEZpZWxkc1NldCA9IChNZXNzYWdlU2V0
IHwgQ29kZVNldCkKKyAgICB9OworCisgICAgdGVtcGxhdGU8aW50IFNUQVRFPgorICAgIGNsYXNz
IEJ1aWxkZXIgeworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1f
cmVzdWx0OworCisgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RF
UD4mIGNhc3RTdGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnBy
ZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKKyAgICAgICAgfQorCisgICAg
ICAgIEJ1aWxkZXIoUmVmPC8qRXJyb3IqL0pTT046Ok9iamVjdD4mJiBvYmplY3QpCisgICAgICAg
ICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKKyAgICAgICAgeworICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9u
b25faW5pdF9zdGF0ZSk7CisgICAgICAgIH0KKyAgICAgICAgZnJpZW5kIGNsYXNzIEVycm9yOwor
ICAgIHB1YmxpYzoKKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTWVzc2FnZVNldD4mIHNldE1l
c3NhZ2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoIShTVEFURSAmIE1lc3NhZ2VTZXQpLCBwcm9wZXJ0eV9tZXNzYWdlX2FscmVhZHlf
c2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1lc3NhZ2UiX3MsIHZhbHVl
KTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TWVzc2FnZVNldD4oKTsKKyAgICAgICAg
fQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2RlU2V0PiYgc2V0Q29kZShpbnQgdmFsdWUp
CisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2RlU2V0
KSwgcHJvcGVydHlfY29kZV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
SW50ZWdlcigiY29kZSJfcywgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxD
b2RlU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgUmVmPEVycm9yPiByZWxlYXNlKCkKKyAg
ICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0
LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVv
ZihFcnJvcikgPT0gc2l6ZW9mKEpTT046Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsKKworICAgICAg
ICAgICAgUmVmPEpTT046Ok9iamVjdD4ganNvblJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25O
dWxsKCk7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nh
c3Q8UmVmPEVycm9yPio+KCZqc29uUmVzdWx0KSk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgICAgICB9CisgICAgfTsKKworICAgIC8qCisgICAgICogU3ludGhldGljIGNvbnN0cnVj
dG9yOgorICAgICAqIFJlZjxFcnJvcj4gcmVzdWx0ID0gRXJyb3I6OmNyZWF0ZSgpCisgICAgICog
ICAgIC5zZXRNZXNzYWdlKC4uLikKKyAgICAgKiAgICAgLnNldENvZGUoLi4uKQorICAgICAqICAg
ICAucmVsZWFzZSgpOworICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBj
cmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046
Ok9iamVjdDo6Y3JlYXRlKCkpOworICAgIH0KK307CisKK30gLy8gRGF0YWJhc2UKKworCisKK30g
Ly8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbE9iamVjdHMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRz
LXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0UHJv
dG9jb2xPYmplY3RzLmgiCisKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCituYW1lc3BhY2Ug
UHJvdG9jb2wgeworCisKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKwor
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVy
cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMu
aD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKKworCituYW1lc3BhY2UgSW5zcGVjdG9y
IHsKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
QmFja2VuZERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
ZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVz
dFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xJ
bnRlcm5hbC5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2lu
Y2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5k
RGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRp
b24uaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlv
bmFsLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+CisKK19fYXR0cmli
dXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xD
b25maWd1cmF0aW9uIDogTlNPYmplY3QKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkg
VGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5FdmVudERpc3BhdGNoZXIgKmRhdGFiYXNlRXZlbnRE
aXNwYXRjaGVyOworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJh
dGlvbi5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFy
YW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
KyNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKKworI2ltcG9ydCAiVGVzdFBy
b3RvY29sSW50ZXJuYWwuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVy
cy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQu
aD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxl
ci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERp
c3BhdGNoZXJzLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0
aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3Rv
ckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWlu
RXZlbnREaXNwYXRjaGVyICpfZGF0YWJhc2VFdmVudERpc3BhdGNoZXI7Cit9CisKKy0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxl
ciopY29udHJvbGxlcgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxm
KQorICAgICAgICByZXR1cm4gbmlsOworICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBfY29u
dHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVh
bGxvYworeworICAgIFtfZGF0YWJhc2VFdmVudERpc3BhdGNoZXIgcmVsZWFzZV07CisgICAgW3N1
cGVyIGRlYWxsb2NdOworfQorCistIChUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkV2ZW50RGlz
cGF0Y2hlciAqKWRhdGFiYXNlRXZlbnREaXNwYXRjaGVyCit7CisgICAgaWYgKCFfZGF0YWJhc2VF
dmVudERpc3BhdGNoZXIpCisgICAgICAgIF9kYXRhYmFzZUV2ZW50RGlzcGF0Y2hlciA9IFtbVGVz
dFByb3RvY29sRGF0YWJhc2VEb21haW5FdmVudERpc3BhdGNoZXIgYWxsb2NdIGluaXRXaXRoQ29u
dHJvbGxlcjpfY29udHJvbGxlcl07CisgICAgcmV0dXJuIF9kYXRhYmFzZUV2ZW50RGlzcGF0Y2hl
cjsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
bi5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBh
cmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5n
IG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xEYXRh
YmFzZURvbWFpbkV2ZW50RGlzcGF0Y2hlcgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29u
dHJvbGxlciogX2NvbnRyb2xsZXI7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRy
b2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgoreworICAg
IHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmls
OworICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7
CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1l
dGVyc1dpdGhDb2x1bW5OYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKWNvbHVtbk5hbWVz
IG5vdGVzOihOU1N0cmluZyAqKilub3RlcyB0aW1lc3RhbXA6KGRvdWJsZSAqKXRpbWVzdGFtcCB2
YWx1ZXM6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKil2YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9j
b2xKU09OT2JqZWN0ICoqKXBheWxvYWQgc3FsRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJy
b3IgKiopc3FsRXJyb3Igc2NyZWVuQ29sb3I6KE5TU3RyaW5nICoqKXNjcmVlbkNvbG9yIGFsdGVy
bmF0ZUNvbG9yczooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKWFsdGVybmF0ZUNvbG9ycyBwcmlu
dENvbG9yOihOU1N0cmluZyAqKilwcmludENvbG9yCit7CisgICAgY29uc3QgRnJvbnRlbmRSb3V0
ZXImIHJvdXRlciA9IF9jb250cm9sbGVyLT5mcm9udGVuZFJvdXRlcigpOworCisgICAgVEhST1df
RVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKGNvbHVtbk5hbWVzLCBAImNvbHVt
bk5hbWVzIik7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVS
KG5vdGVzLCBAIm5vdGVzIik7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxf
UEFSQU1FVEVSKHZhbHVlcywgQCJ2YWx1ZXMiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JB
RF9PUFRJT05BTF9QQVJBTUVURVIocGF5bG9hZCwgQCJwYXlsb2FkIik7CisgICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHNxbEVycm9yLCBAInNxbEVycm9yIik7
CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHNjcmVlbkNv
bG9yLCBAInNjcmVlbkNvbG9yIik7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9O
QUxfUEFSQU1FVEVSKGFsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsKKyAgICBU
SFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIocHJpbnRDb2xvciwgQCJw
cmludENvbG9yIik7CisKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9z
LCAiRGF0YWJhc2UuZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyJfcyk7CisgICAgUmVmPEpT
T046Ok9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBp
ZiAoY29sdW1uTmFtZXMpCisgICAgICAgIHBhcmFtc09iamVjdC0+c2V0QXJyYXkoImNvbHVtbk5h
bWVzIl9zLCB0b0pTT05TdHJpbmdBcnJheSgoKmNvbHVtbk5hbWVzKSkpOworICAgIGlmIChub3Rl
cykKKyAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCAoKm5vdGVzKSk7
CisgICAgaWYgKHRpbWVzdGFtcCkKKyAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXREb3VibGUoInRp
bWVzdGFtcCJfcywgKCp0aW1lc3RhbXApKTsKKyAgICBpZiAodmFsdWVzKQorICAgICAgICBwYXJh
bXNPYmplY3QtPnNldE9iamVjdCgidmFsdWVzIl9zLCBbKCp2YWx1ZXMpIHRvSlNPTk9iamVjdF0p
OworICAgIGlmIChwYXlsb2FkKQorICAgICAgICBwYXJhbXNPYmplY3QtPnNldFZhbHVlKCJwYXls
b2FkIl9zLCBbKCpwYXlsb2FkKSB0b0pTT05PYmplY3RdKTsKKyAgICBpZiAoc3FsRXJyb3IpCisg
ICAgICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgWygqc3FsRXJyb3Ip
IHRvSlNPTk9iamVjdF0pOworICAgIGlmIChzY3JlZW5Db2xvcikKKyAgICAgICAgcGFyYW1zT2Jq
ZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCAoKnNjcmVlbkNvbG9yKSk7CisgICAgaWYg
KGFsdGVybmF0ZUNvbG9ycykKKyAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJu
YXRlQ29sb3JzIl9zLCB0b0pTT05TdHJpbmdBcnJheSgoKmFsdGVybmF0ZUNvbG9ycykpKTsKKyAg
ICBpZiAocHJpbnRDb2xvcikKKyAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInByaW50
Q29sb3IiX3MsICgqcHJpbnRDb2xvcikpOworICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoInBh
cmFtcyJfcywgV1RGTW92ZShwYXJhbXNPYmplY3QpKTsKKyAgICByb3V0ZXIuc2VuZEV2ZW50KGpz
b25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cit9CisKKy0gKHZvaWQpZGlkRXhlY3V0ZU5vT3B0
aW9uYWxQYXJhbWV0ZXJzV2l0aENvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilj
b2x1bW5OYW1lcyBub3RlczooTlNTdHJpbmcgKilub3RlcyB0aW1lc3RhbXA6KGRvdWJsZSl0aW1l
c3RhbXAgdmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKil2YWx1ZXMgcGF5bG9hZDooUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZCBzcWxFcnJvcjooVGVzdFByb3RvY29sRGF0YWJh
c2VFcnJvciAqKXNxbEVycm9yIHNjcmVlbkNvbG9yOihOU1N0cmluZyAqKXNjcmVlbkNvbG9yIGFs
dGVybmF0ZUNvbG9yczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopYWx0ZXJuYXRlQ29sb3JzIHBy
aW50Q29sb3I6KE5TU3RyaW5nICopcHJpbnRDb2xvcgoreworICAgIGNvbnN0IEZyb250ZW5kUm91
dGVyJiByb3V0ZXIgPSBfY29udHJvbGxlci0+ZnJvbnRlbmRSb3V0ZXIoKTsKKworICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5h
bWVzIik7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIobm90ZXMs
IEAibm90ZXMiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUih2
YWx1ZXMsIEAidmFsdWVzIik7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJB
TUVURVIocGF5bG9hZCwgQCJwYXlsb2FkIik7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFV
SVJFRF9QQVJBTUVURVIoc3FsRXJyb3IsIEAic3FsRXJyb3IiKTsKKyAgICBUSFJPV19FWENFUFRJ
T05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihzY3JlZW5Db2xvciwgQCJzY3JlZW5Db2xvciIpOwor
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKGFsdGVybmF0ZUNvbG9y
cywgQCJhbHRlcm5hdGVDb2xvcnMiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVE
X1BBUkFNRVRFUihwcmludENvbG9yLCBAInByaW50Q29sb3IiKTsKKworICAgIFJlZjxKU09OOjpP
YmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBqc29uTWVz
c2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEYXRhYmFzZS5kaWRFeGVjdXRlTm9PcHRpb25h
bFBhcmFtZXRlcnMiX3MpOworICAgIFJlZjxKU09OOjpPYmplY3Q+IHBhcmFtc09iamVjdCA9IEpT
T046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiY29sdW1u
TmFtZXMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KGNvbHVtbk5hbWVzKSk7CisgICAgcGFyYW1zT2Jq
ZWN0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBub3Rlcyk7CisgICAgcGFyYW1zT2JqZWN0LT5zZXRE
b3VibGUoInRpbWVzdGFtcCJfcywgdGltZXN0YW1wKTsKKyAgICBwYXJhbXNPYmplY3QtPnNldE9i
amVjdCgidmFsdWVzIl9zLCBbdmFsdWVzIHRvSlNPTk9iamVjdF0pOworICAgIHBhcmFtc09iamVj
dC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFtwYXlsb2FkIHRvSlNPTk9iamVjdF0pOworICAgIHBh
cmFtc09iamVjdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgW3NxbEVycm9yIHRvSlNPTk9iamVj
dF0pOworICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgc2NyZWVu
Q29sb3IpOworICAgIHBhcmFtc09iamVjdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywg
dG9KU09OU3RyaW5nQXJyYXkoYWx0ZXJuYXRlQ29sb3JzKSk7CisgICAgcGFyYW1zT2JqZWN0LT5z
ZXRTdHJpbmcoInByaW50Q29sb3IiX3MsIHByaW50Q29sb3IpOworICAgIGpzb25NZXNzYWdlLT5z
ZXRPYmplY3QoInBhcmFtcyJfcywgV1RGTW92ZShwYXJhbXNPYmplY3QpKTsKKyAgICByb3V0ZXIu
c2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cit9CisKK0BlbmQKKworCisj
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
ZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5o
PgorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+CisKKwor
QGNsYXNzIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I7CisKKworCisKK19fYXR0cmlidXRlX18o
KHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xEYXRhYmFz
ZUVycm9yIDogUldJUHJvdG9jb2xKU09OT2JqZWN0CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQ
YXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKKy0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilq
c29uT2JqZWN0OworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTWVzc2FnZTooTlNTdHJpbmcgKilt
ZXNzYWdlIGNvZGU6KGludCljb2RlOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9t
aWMsIGNvcHkpIE5TU3RyaW5nICptZXNzYWdlOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChu
b25hdG9taWMsIGFzc2lnbikgaW50IGNvZGU7CitAZW5kCisKKworCitfX2F0dHJpYnV0ZV9fKCh2
aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sRGF0YWJhc2VE
b21haW5FdmVudERpc3BhdGNoZXIgOiBOU09iamVjdAorLSAodm9pZClkaWRFeGVjdXRlT3B0aW9u
YWxQYXJhbWV0ZXJzV2l0aENvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopY29s
dW1uTmFtZXMgbm90ZXM6KE5TU3RyaW5nICoqKW5vdGVzIHRpbWVzdGFtcDooZG91YmxlICopdGlt
ZXN0YW1wIHZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqKXZhbHVlcyBwYXlsb2FkOihS
V0lQcm90b2NvbEpTT05PYmplY3QgKiopcGF5bG9hZCBzcWxFcnJvcjooVGVzdFByb3RvY29sRGF0
YWJhc2VFcnJvciAqKilzcWxFcnJvciBzY3JlZW5Db2xvcjooTlNTdHJpbmcgKiopc2NyZWVuQ29s
b3IgYWx0ZXJuYXRlQ29sb3JzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopYWx0ZXJuYXRlQ29s
b3JzIHByaW50Q29sb3I6KE5TU3RyaW5nICoqKXByaW50Q29sb3I7CistICh2b2lkKWRpZEV4ZWN1
dGVOb09wdGlvbmFsUGFyYW1ldGVyc1dpdGhDb2x1bW5OYW1lczooTlNBcnJheS8qPE5TU3RyaW5n
PiovICopY29sdW1uTmFtZXMgbm90ZXM6KE5TU3RyaW5nICopbm90ZXMgdGltZXN0YW1wOihkb3Vi
bGUpdGltZXN0YW1wIHZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopdmFsdWVzIHBheWxv
YWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQgc3FsRXJyb3I6KFRlc3RQcm90b2Nv
bERhdGFiYXNlRXJyb3IgKilzcWxFcnJvciBzY3JlZW5Db2xvcjooTlNTdHJpbmcgKilzY3JlZW5D
b2xvciBhbHRlcm5hdGVDb2xvcnM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWFsdGVybmF0ZUNv
bG9ycyBwcmludENvbG9yOihOU1N0cmluZyAqKXByaW50Q29sb3I7CitAZW5kCisKKworI2ltcG9y
dCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgor
CisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xJbnRlcm5hbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRz
LXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVz
dFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1
Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMu
aD4KKworQGludGVyZmFjZSBUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkV2ZW50RGlzcGF0Y2hl
ciAoUHJpdmF0ZSkKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEluc3BlY3Rv
cjo6QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyOworQGVuZAorCisK
KyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorCisjIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgi
CisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+CisK
K25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+
CitPcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcm
IHZhbHVlKTsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3Rv
Y29sVHlwZVBhcnNlci5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9i
amVjdFByaXZhdGUuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGludGVyZmFj
ZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKERhdGFiYXNlRG9tYWluKQorCisrICh2b2lk
KV9wYXJzZURhdGFiYXNlSWQ6KE5TU3RyaW5nICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClw
YXlsb2FkOworKyAodm9pZClfcGFyc2VQcmltYXJ5Q29sb3JzOihOU1N0cmluZyAqKilvdXRWYWx1
ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNlQ29sb3JMaXN0OihOU0Fy
cmF5Lyo8TlNTdHJpbmc+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Cisr
ICh2b2lkKV9wYXJzZUVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqKW91dFZhbHVl
IGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKERhdGFiYXNlRG9tYWluKQorCisrICh2b2lkKV9wYXJz
ZURhdGFiYXNlSWQ6KE5TU3RyaW5nICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2Fk
Cit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNTdHJpbmcg
Y2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSAoTlNTdHJpbmcgKilwYXlsb2FkOworfQorCisrICh2
b2lkKV9wYXJzZVByaW1hcnlDb2xvcnM6KE5TU3RyaW5nICoqKW91dFZhbHVlIGZyb21QYXlsb2Fk
OihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2Fk
LCBbTlNTdHJpbmcgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSAoTlNTdHJpbmcgKilwYXlsb2Fk
OworfQorCisrICh2b2lkKV9wYXJzZUNvbG9yTGlzdDooTlNBcnJheS8qPE5TU3RyaW5nPiovICoq
KW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNBcnJheS8qPE5TU3RyaW5nPiovIGNsYXNzXSk7Cisg
ICAgKm91dFZhbHVlID0gKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKXBheWxvYWQ7Cit9CisKKysg
KHZvaWQpX3BhcnNlRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKiopb3V0VmFsdWUg
ZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9U
WVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSBbW1Rl
c3RQcm90b2NvbERhdGFiYXNlRXJyb3IgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsK
K30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
Lm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJU
ZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2
YXRlLmg+CisjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1
ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCitAaW1wbGVtZW50YXRpb24g
VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcgorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXls
b2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCit7Cisg
ICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAg
ICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJtZXNzYWdl
Il0sIEAibWVzc2FnZSIpOworICAgIHNlbGYubWVzc2FnZSA9IHBheWxvYWRbQCJtZXNzYWdlIl07
CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJj
b2RlIl0sIEAiY29kZSIpOworICAgIHNlbGYuY29kZSA9IFtwYXlsb2FkW0AiY29kZSJdIGludGVn
ZXJWYWx1ZV07CisKKyAgICByZXR1cm4gc2VsZjsKK30KKy0gKGluc3RhbmNldHlwZSlpbml0V2l0
aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilvYmplY3QKK3sKKyAgICBp
ZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoSlNPTk9iamVjdDpbb2JqZWN0IHRvSlNPTk9iamVj
dF0uZ2V0KCldKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHJldHVybiBzZWxmOworfQor
CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29k
ZTooaW50KWNvZGUKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAg
cmV0dXJuIG5pbDsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFko
bWVzc2FnZSwgQCJtZXNzYWdlIik7CisKKyAgICBzZWxmLm1lc3NhZ2UgPSBtZXNzYWdlOworICAg
IHNlbGYuY29kZSA9IGNvZGU7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClzZXRN
ZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UKK3sKKyAgICBbc3VwZXIgc2V0U3RyaW5nOm1lc3Nh
Z2UgZm9yS2V5OkAibWVzc2FnZSJdOworfQorCistIChOU1N0cmluZyAqKW1lc3NhZ2UKK3sKKyAg
ICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAIm1lc3NhZ2UiXTsKK30KKworLSAodm9pZClz
ZXRDb2RlOihpbnQpY29kZQoreworICAgIFtzdXBlciBzZXRJbnRlZ2VyOmNvZGUgZm9yS2V5OkAi
Y29kZSJdOworfQorCistIChpbnQpY29kZQoreworICAgIHJldHVybiBbc3VwZXIgaW50ZWdlckZv
cktleTpAImNvZGUiXTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
VHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1k
b21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlw
ZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1lcnJvcgpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYTEzMGFkNzBjNDAKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
ZmFpbC1vbi1jb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBl
Lmpzb24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6IE1hbGZvcm1lZCBkb21haW4gc3BlY2lm
aWNhdGlvbjogZG9tYWluIERvbWFpbiBoYXMgYW4gaXRlbSBpbiB0YXJnZXRUeXBlcyAiW3Und29y
a2VyJ10iIHRoYXQgaXMgbm90IHN1cHBvcnRlZCBieSBhbnkgdmFsdWUgaW4gZGVidWdnYWJsZVR5
cGVzICJbdSdqYXZhc2NyaXB0J10iLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tY29tbWFuZC10YXJnZXRU
eXBlcy10eXBlLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1jb21tYW5kLXRhcmdldFR5cGVzLXR5cGUuanNv
bi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOTlmNWUxYTRh
OGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1jb21tYW5kLXRhcmdldFR5cGVzLXR5cGUuanNv
bi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjogTWFsZm9ybWVkIGRvbWFpbiBzcGVjaWZpY2F0
aW9uOiB0YXJnZXRUeXBlcyBsaXN0IGZvciBjb21tYW5kIFBhZ2VPbmx5IGlzIG5vdCBhbiBhcnJh
eQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V4cGVjdGVkL2ZhaWwtb24tY29tbWFuZC10YXJnZXRUeXBlcy12YWx1ZS5qc29uLWVycm9y
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVk
L2ZhaWwtb24tY29tbWFuZC10YXJnZXRUeXBlcy12YWx1ZS5qc29uLWVycm9yCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yMWEzNjU2OTkyNgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlwZXMtdmFsdWUuanNvbi1lcnJvcgpAQCAtMCwwICsx
IEBACitFUlJPUjogTWFsZm9ybWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9uOiB0YXJnZXRUeXBlcyBs
aXN0IGZvciBjb21tYW5kIFBhZ2VPbmx5IGlzIGFuIHVuc3VwcG9ydGVkIHN0cmluZy4gV2FzOiAi
W3UncGFnZWUnXSIsIEFsbG93ZWQgdmFsdWVzOiBzZXJ2aWNlLXdvcmtlciwgamF2YXNjcmlwdCwg
d29ya2VyLCBwYWdlLCB3ZWItcGFnZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZG9tYWluLWRlYnVnZ2Fi
bGVUeXBlcy10eXBlLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4tZGVidWdnYWJsZVR5cGVzLXR5
cGUuanNvbi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMmI4
OThiYTdiZTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4tZGVidWdnYWJsZVR5cGVz
LXR5cGUuanNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjogTWFsZm9ybWVkIGRvbWFpbiBz
cGVjaWZpY2F0aW9uOiBkZWJ1Z2dhYmxlVHlwZXMgZm9yIGRvbWFpbiBXZWJPbmx5IGlzIG5vdCBh
biBhcnJheQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZG9tYWluLWRlYnVnZ2FibGVUeXBlcy12YWx1ZS5q
c29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL2ZhaWwtb24tZG9tYWluLWRlYnVnZ2FibGVUeXBlcy12YWx1ZS5qc29uLWVycm9y
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5iZjcxZDQ3MGNiZAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMtdmFsdWUuanNvbi1l
cnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjogTWFsZm9ybWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9u
OiBkZWJ1Z2dhYmxlVHlwZXMgZm9yIGRvbWFpbiBXZWJPbmx5IGlzIGFuIHVuc3VwcG9ydGVkIHN0
cmluZy4gV2FzOiAiW3Und2ViYiddIiwgQWxsb3dlZCB2YWx1ZXM6IHNlcnZpY2Utd29ya2VyLCBq
YXZhc2NyaXB0LCBwYWdlLCB3ZWItcGFnZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZG9tYWluLXRhcmdl
dFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tZXJyb3IgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1k
b21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1lcnJv
cgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uODY3ZTM1MDA4OTgKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4t
ZGVidWdnYWJsZVR5cGUuanNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjogTWFsZm9ybWVk
IGRvbWFpbiBzcGVjaWZpY2F0aW9uOiBjb21tYW5kIENvbW1hbmQgaGFzIGFuIGl0ZW0gaW4gdGFy
Z2V0VHlwZXMgIlt1J3dvcmtlciddIiB0aGF0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgYW55IHZhbHVl
IGluIGRlYnVnZ2FibGVUeXBlcyAiW3UnamF2YXNjcmlwdCddIi4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9u
LWRvbWFpbi10YXJnZXRUeXBlcy10eXBlLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4tdGFyZ2V0
VHlwZXMtdHlwZS5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwLi5lOWEzNTkzM2EzNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWRvbWFpbi10YXJnZXRU
eXBlcy10eXBlLmpzb24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6IE1hbGZvcm1lZCBkb21h
aW4gc3BlY2lmaWNhdGlvbjogdGFyZ2V0VHlwZXMgZm9yIGRvbWFpbiBQYWdlT25seSBpcyBub3Qg
YW4gYXJyYXkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWRvbWFpbi10YXJnZXRUeXBlcy12YWx1ZS5qc29u
LWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4
cGVjdGVkL2ZhaWwtb24tZG9tYWluLXRhcmdldFR5cGVzLXZhbHVlLmpzb24tZXJyb3IKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjQ2ODA3ZjcyZmM0Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4
cGVjdGVkL2ZhaWwtb24tZG9tYWluLXRhcmdldFR5cGVzLXZhbHVlLmpzb24tZXJyb3IKQEAgLTAs
MCArMSBAQAorRVJST1I6IE1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjogdGFyZ2V0VHlw
ZXMgZm9yIGRvbWFpbiBQYWdlT25seSBpcyBhbiB1bnN1cHBvcnRlZCBzdHJpbmcuIFdhczogIlt1
J3BhZ2VlJ10iLCBBbGxvd2VkIHZhbHVlczogc2VydmljZS13b3JrZXIsIGphdmFzY3JpcHQsIHdv
cmtlciwgcGFnZSwgd2ViLXBhZ2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS1jb21tYW5k
LWNhbGwtcGFyYW1ldGVyLW5hbWVzLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFu
ZC1jYWxsLXBhcmFtZXRlci1uYW1lcy5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwLi4zZjc1NmRlMzI1MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWR1
cGxpY2F0ZS1jb21tYW5kLWNhbGwtcGFyYW1ldGVyLW5hbWVzLmpzb24tZXJyb3IKQEAgLTAsMCAr
MSBAQAorRVJST1I6IE1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjogY2FsbCBwYXJhbWV0
ZXIgbGlzdCBmb3IgY29tbWFuZCBwcm9jZXNzUG9pbnRzIGhhcyBkdXBsaWNhdGUgcGFyYW1ldGVy
IG5hbWVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1yZXR1cm4tcGFyYW1l
dGVyLW5hbWVzLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1yZXR1cm4tcGFy
YW1ldGVyLW5hbWVzLmpzb24tZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAuLmVhMTQ4ZmY2N2M5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLWNv
bW1hbmQtcmV0dXJuLXBhcmFtZXRlci1uYW1lcy5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VS
Uk9SOiBNYWxmb3JtZWQgZG9tYWluIHNwZWNpZmljYXRpb246IHJldHVybiBwYXJhbWV0ZXIgbGlz
dCBmb3IgY29tbWFuZCBwcm9jZXNzUG9pbnRzIGhhcyBkdXBsaWNhdGUgcGFyYW1ldGVyIG5hbWVz
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtZXZlbnQtcGFyYW1ldGVyLW5hbWVzLmpzb24t
ZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtZXZlbnQtcGFyYW1ldGVyLW5hbWVzLmpzb24tZXJyb3IK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmM3MWJiZDIxYzJjCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLWV2ZW50LXBhcmFtZXRlci1uYW1lcy5qc29u
LWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBNYWxmb3JtZWQgZG9tYWluIHNwZWNpZmljYXRp
b246IHBhcmFtZXRlciBsaXN0IGZvciBldmVudCBwcm9jZXNzZWRQb2ludHMgaGFzIGR1cGxpY2F0
ZSBwYXJhbWV0ZXIgbmFtZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLWRlY2xh
cmF0aW9ucy5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLXR5cGUtZGVjbGFyYXRpb25zLmpz
b24tZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjQ0N2NkZjhl
MjhlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLXR5cGUtZGVjbGFyYXRpb25z
Lmpzb24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6IER1cGxpY2F0ZSB0eXBlIGRlY2xhcmF0
aW9uOiBSdW50aW1lLlJlbW90ZU9iamVjdElkCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUt
dHlwZS1tZW1iZXItbmFtZXMuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLW1lbWJl
ci1uYW1lcy5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
Li5kNTM3NmE3N2E0NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLW1l
bWJlci1uYW1lcy5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBNYWxmb3JtZWQgZG9t
YWluIHNwZWNpZmljYXRpb246IHR5cGUgZGVjbGFyYXRpb24gZm9yIFBvaW50IGhhcyBkdXBsaWNh
dGUgbWVtYmVyIG5hbWVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1lbnVtLXdpdGgtbm8tdmFsdWVzLmpz
b24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvZmFpbC1vbi1lbnVtLXdpdGgtbm8tdmFsdWVzLmpzb24tZXJyb3IKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjI2NTVjMmI5MDdlCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVj
dGVkL2ZhaWwtb24tZW51bS13aXRoLW5vLXZhbHVlcy5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAK
K0VSUk9SOiBUeXBlIHJlZmVyZW5jZSB3aXRoIGVudW0gdmFsdWVzIG11c3QgaGF2ZSBhdCBsZWFz
dCBvbmUgZW51bSB2YWx1ZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGUtbWF0
Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1ldmVudC10YXJn
ZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLWVycm9yCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5iNjVkN2EwZDE5NgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVU
eXBlLmpzb24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6IE1hbGZvcm1lZCBkb21haW4gc3Bl
Y2lmaWNhdGlvbjogZXZlbnQgRXZlbnQgaGFzIGFuIGl0ZW0gaW4gdGFyZ2V0VHlwZXMgIlt1J3dv
cmtlciddIiB0aGF0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgYW55IHZhbHVlIGluIGRlYnVnZ2FibGVU
eXBlcyAiW3UnamF2YXNjcmlwdCddIi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWV2ZW50LXRhcmdldFR5
cGVzLXR5cGUuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGVzLXR5cGUuanNvbi1l
cnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNzQwM2UxM2E4MDkK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1ldmVudC10YXJnZXRUeXBlcy10eXBlLmpzb24tZXJy
b3IKQEAgLTAsMCArMSBAQAorRVJST1I6IE1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjog
dGFyZ2V0VHlwZXMgZm9yIGV2ZW50IFBhZ2VPbmx5IGlzIG5vdCBhbiBhcnJheQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVk
L2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlwZXMtdmFsdWUuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWV2ZW50
LXRhcmdldFR5cGVzLXZhbHVlLmpzb24tZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAuLjgzMDEyYTlmZTRlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZXZlbnQt
dGFyZ2V0VHlwZXMtdmFsdWUuanNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjogTWFsZm9y
bWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9uOiB0YXJnZXRUeXBlcyBmb3IgZXZlbnQgUGFnZU9ubHkg
aXMgYW4gdW5zdXBwb3J0ZWQgc3RyaW5nLiBXYXM6ICJbdSdwYWdlZSddIiwgQWxsb3dlZCB2YWx1
ZXM6IHNlcnZpY2Utd29ya2VyLCBqYXZhc2NyaXB0LCB3b3JrZXIsIHBhZ2UsIHdlYi1wYWdlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNv
bi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29u
LWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45N2IyYWYwZTQ3
ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRpb25hbC1wYXJhbWV0
ZXItZmxhZy5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBUaGUgJ29wdGlvbmFsJyBm
bGFnIGZvciBhIHBhcmFtZXRlciBtdXN0IGJlIGEgYm9vbGVhbiBsaXRlcmFsLgpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVk
L2ZhaWwtb24tbnVtYmVyLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24tZXJyb3IgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFp
bC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNvbi1lcnJvcgpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uODZkZjM3NTBjMWEKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNvbi1lcnJv
cgpAQCAtMCwwICsxIEBACitFUlJPUjogVGhlICdvcHRpb25hbCcgZmxhZyBmb3IgYSB0eXBlIG1l
bWJlciBtdXN0IGJlIGEgYm9vbGVhbiBsaXRlcmFsLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tc3RyaW5n
LXR5cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1zdHJpbmct
dHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOTdiMmFmMGU0N2UKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFp
bC1vbi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbi1lcnJvcgpAQCAt
MCwwICsxIEBACitFUlJPUjogVGhlICdvcHRpb25hbCcgZmxhZyBmb3IgYSBwYXJhbWV0ZXIgbXVz
dCBiZSBhIGJvb2xlYW4gbGl0ZXJhbC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXN0cmluZy10eXBlZC1v
cHRpb25hbC10eXBlLW1lbWJlci5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlv
bmFsLXR5cGUtbWVtYmVyLmpzb24tZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAuLjg2ZGYzNzUwYzFhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tc3RyaW5nLXR5
cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6
IFRoZSAnb3B0aW9uYWwnIGZsYWcgZm9yIGEgdHlwZSBtZW1iZXIgbXVzdCBiZSBhIGJvb2xlYW4g
bGl0ZXJhbC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXR5cGUtZGVjbGFyYXRpb24tdXNpbmctdHlwZS1y
ZWZlcmVuY2UuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXR5cGUtZGVjbGFyYXRpb24tdXNpbmctdHlwZS1y
ZWZlcmVuY2UuanNvbi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MC4uNDJmNTc1M2E0MzkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi10eXBlLWRlY2xhcmF0aW9u
LXVzaW5nLXR5cGUtcmVmZXJlbmNlLmpzb24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6IFR5
cGUgcmVmZXJlbmNlIGNhbm5vdCBoYXZlIGJvdGggJ3R5cGUnIGFuZCAnJHJlZicga2V5cy4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC9mYWlsLW9uLXR5cGUtcmVmZXJlbmNlLWFzLXByaW1pdGl2ZS10eXBlLmpzb24tZXJy
b3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvZmFpbC1vbi10eXBlLXJlZmVyZW5jZS1hcy1wcmltaXRpdmUtdHlwZS5qc29uLWVycm9yCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kNzZiYzFjNzc3MwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9leHBlY3RlZC9mYWlsLW9uLXR5cGUtcmVmZXJlbmNlLWFzLXByaW1pdGl2ZS10eXBlLmpzb24t
ZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6IFR5cGUgcmVmZXJlbmNlICdEYXRhYmFzZUlkJyBp
cyBub3QgYSBwcmltaXRpdmUgdHlwZS4gQWxsb3dlZCB2YWx1ZXM6IGludGVnZXIsIG51bWJlciwg
c3RyaW5nLCBib29sZWFuLCBlbnVtLCBvYmplY3QsIGFycmF5LCBhbnkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWls
LW9uLXR5cGUtd2l0aC1sb3dlcmNhc2UtbmFtZS5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS13aXRo
LWxvd2VyY2FzZS1uYW1lLmpzb24tZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAuLjRlNDYyMjUwYzBhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS13aXRo
LWxvd2VyY2FzZS1uYW1lLmpzb24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6IFR5cGVzIG11
c3QgYmVnaW4gd2l0aCBhbiB1cHBlcmNhc2UgY2hhcmFjdGVyLgpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24t
dW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLWRlY2xhcmF0aW9uLmpzb24tZXJyb3IgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFp
bC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtZGVjbGFyYXRpb24uanNvbi1lcnJv
cgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMmQzOGU2NDY3NWQKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtZGVj
bGFyYXRpb24uanNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjogVHlwZSByZWZlcmVuY2Ug
J2RyYWdvbicgaXMgbm90IGEgcHJpbWl0aXZlIHR5cGUuIEFsbG93ZWQgdmFsdWVzOiBpbnRlZ2Vy
LCBudW1iZXIsIHN0cmluZywgYm9vbGVhbiwgZW51bSwgb2JqZWN0LCBhcnJheSwgYW55CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtbWVtYmVyLmpzb24t
ZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtbWVtYmVyLmpzb24t
ZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmZhZjY2NzJjYmVm
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBl
LW1lbWJlci5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBMb29rdXAgZmFpbGVkIGZv
ciB0eXBlIHJlZmVyZW5jZTogQ29sb3IgKHJlZmVyZW5jZWQgZnJvbSBkb21haW46IEZhbnRhc3kp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZXhwZWN0ZWQvZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24tcmVz
dWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVj
dGVkL2dlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uLXJlc3VsdApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZWIxM2Q4NWI1ZjYKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24tcmVzdWx0
CkBAIC0wLDAgKzEsMTE4OCBAQAorIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21t
YW5kcy5qcworLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFp
bnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKy8vIE5ldHdvcmsxCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9t
YWluKCJOZXR3b3JrMSIsIG51bGwpOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQo
Ik5ldHdvcmsxLmxvYWRSZXNvdXJjZSIsIG51bGwsIFtdLCBbXSk7CitJbnNwZWN0b3JCYWNrZW5k
LmFjdGl2YXRlRG9tYWluKCJOZXR3b3JrMSIsIG51bGwpOworCisvLyBOZXR3b3JrMworSW5zcGVj
dG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiTmV0d29yazMiLCBudWxsKTsKK0luc3BlY3RvckJh
Y2tlbmQucmVnaXN0ZXJFdmVudCgiTmV0d29yazMucmVzb3VyY2VMb2FkZWQiLCBudWxsLCBbXSk7
CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyTmV0d29yazNEaXNwYXRjaGVyID0gSW5zcGVjdG9y
QmFja2VuZC5yZWdpc3RlckRpc3BhdGNoZXIuYmluZChJbnNwZWN0b3JCYWNrZW5kLCAiTmV0d29y
azMiKTsKK0luc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIk5ldHdvcmszIiwgbnVsbCk7
CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcworCisjIyMgQmVnaW4g
RmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBv
bmNlCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JGcm9udGVuZFJvdXRlci5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3Mg
QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHZvaWQgc2V0QmFja2Vu
ZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9i
YWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KKyAgICBCYWNrZW5kRGlz
cGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNw
YXRjaGVyLmdldCgpOyB9Citwcml2YXRlOgorICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4g
bV9iYWNrZW5kRGlzcGF0Y2hlcjsKK307CisKKworY2xhc3MgQWx0ZXJuYXRlTmV0d29yazFCYWNr
ZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJs
aWM6CisgICAgdmlydHVhbCB+QWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcigpIHsg
fQorICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UobG9uZyBjYWxsSWQpID0gMDsKK307CisK
K30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5k
RGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5o
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRo
LWZlYXR1cmUtZ3VhcmRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgi
CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7
CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCitjbGFzcyBBbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNw
YXRjaGVyOworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQorCitjbGFzcyBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CitwdWJsaWM6Cisg
ICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZShFcnJvclN0cmluZyYpID0gMDsKK3Byb3RlY3Rl
ZDoKKyAgICB2aXJ0dWFsIH5OZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOworfTsK
KworY2xhc3MgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVt
ZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxOZXR3b3Jr
MUJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBOZXR3b3JrMUJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0
SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZp
bmFsOworcHJpdmF0ZToKKyAgICB2b2lkIGxvYWRSZXNvdXJjZShsb25nIHJlcXVlc3RJZCwgUmVm
UHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKK3B1YmxpYzoKKyAgICB2b2lkIHNldEFsdGVybmF0ZURpc3Bh
dGNoZXIoQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0
Y2hlcikgeyBtX2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9Citw
cml2YXRlOgorICAgIEFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIqIG1fYWx0ZXJu
YXRlRGlzcGF0Y2hlciB7IG51bGxwdHIgfTsKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKK3ByaXZhdGU6CisgICAgTmV0d29yazFCYWNrZW5kRGlzcGF0
Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYsIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
Kik7CisgICAgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQgeyBudWxs
cHRyIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVz
dEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3Bh
dGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRv
bWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0QmFj
a2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JG
cm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8
d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCisj
aWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjaW5jbHVkZSAiVGVz
dEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgorI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworTmV0
d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5OZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlcigpIHsgfQorCitSZWY8TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4gTmV0d29yazFC
YWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0
Y2hlciwgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQoreworICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3Bh
dGNoZXIsIGFnZW50KSk7Cit9CisKK05ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6Ok5ldHdvcmsx
QmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBO
ZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCisgICAgOiBTdXBwbGVtZW50
YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKKyAgICAsIG1fYWdlbnQoYWdl
bnQpCit7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9t
YWluKCJOZXR3b3JrMSJfcywgdGhpcyk7Cit9CisKK3ZvaWQgTmV0d29yazFCYWNrZW5kRGlzcGF0
Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8
SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCit7CisgICAgUmVmPE5ldHdvcmsxQmFja2VuZERpc3Bh
dGNoZXI+IHByb3RlY3QoKnRoaXMpOworCisgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1l
dGVyczsKKyAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFyYW1ldGVycyk7CisK
KyAgICBpZiAobWV0aG9kID09ICJsb2FkUmVzb3VyY2UiKSB7CisgICAgICAgIGxvYWRSZXNvdXJj
ZShyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5k
RGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazEuIiArIG1ldGhvZCArICInIHdh
cyBub3QgZm91bmQiKTsKK30KKwordm9pZCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpsb2Fk
UmVzb3VyY2UobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCit7CisjaWYg
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisgICAgaWYgKG1fYWx0ZXJu
YXRlRGlzcGF0Y2hlcikgeworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNv
dXJjZShyZXF1ZXN0SWQpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmIC8vIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCisgICAgRXJyb3JTdHJpbmcgZXJy
b3I7CisgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KTsKKyAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2UoZXJyb3IpOworCisgICAgaWYgKCFlcnJvci5s
ZW5ndGgoKSkKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVl
c3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7CisgICAgZWxzZQorICAgICAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2
ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
KworIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4g
RmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVz
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0
b3IgeworCitjbGFzcyBGcm9udGVuZFJvdXRlcjsKKworY2xhc3MgTmV0d29yazNGcm9udGVuZERp
c3BhdGNoZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIE5l
dHdvcmszRnJvbnRlbmREaXNwYXRjaGVyKEZyb250ZW5kUm91dGVyJiBmcm9udGVuZFJvdXRlcikg
OiBtX2Zyb250ZW5kUm91dGVyKGZyb250ZW5kUm91dGVyKSB7IH0KKyAgICB2b2lkIHJlc291cmNl
TG9hZGVkKCk7Citwcml2YXRlOgorICAgIEZyb250ZW5kUm91dGVyJiBtX2Zyb250ZW5kUm91dGVy
OworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9u
dGVuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNo
ZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFp
bnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJv
bnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFj
ZSBJbnNwZWN0b3IgeworCit2b2lkIE5ldHdvcmszRnJvbnRlbmREaXNwYXRjaGVyOjpyZXNvdXJj
ZUxvYWRlZCgpCit7CisgICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpOworICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywg
Ik5ldHdvcmszLnJlc291cmNlTG9hZGVkIl9zKTsKKworICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2Vu
ZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAor
CisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+
CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisK
KworCituYW1lc3BhY2UgUHJvdG9jb2wgeworCisKKworLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMu
CituYW1lc3BhY2UgTmV0d29yazIgeworY2xhc3MgTmV0d29ya0Vycm9yOworfSAvLyBOZXR3b3Jr
MgorLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgorCisKKworCituYW1lc3BhY2UgTmV0
d29yazIgeworY2xhc3MgTmV0d29ya0Vycm9yIDogcHVibGljIEpTT046Ok9iamVjdEJhc2Ugewor
cHVibGljOgorICAgIGVudW0geworICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCisgICAgICAgIE1l
c3NhZ2VTZXQgPSAxIDw8IDAsCisgICAgICAgIENvZGVTZXQgPSAxIDw8IDEsCisgICAgICAgIEFs
bEZpZWxkc1NldCA9IChNZXNzYWdlU2V0IHwgQ29kZVNldCkKKyAgICB9OworCisgICAgdGVtcGxh
dGU8aW50IFNUQVRFPgorICAgIGNsYXNzIEJ1aWxkZXIgeworICAgIHByaXZhdGU6CisgICAgICAg
IFJlZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVzdWx0OworCisgICAgICAgIHRlbXBsYXRlPGludCBT
VEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0
aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXIoUmVmPC8qTmV0d29ya0Vycm9yKi9K
U09OOjpPYmplY3Q+JiYgb2JqZWN0KQorICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9i
amVjdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5v
RmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAgICAgICB9
CisgICAgICAgIGZyaWVuZCBjbGFzcyBOZXR3b3JrRXJyb3I7CisgICAgcHVibGljOgorCisgICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2FnZShjb25zdCBTdHJpbmcm
IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
TWVzc2FnZVNldCksIHByb3BlcnR5X21lc3NhZ2VfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAg
bV9yZXN1bHQtPnNldFN0cmluZygibWVzc2FnZSJfcywgdmFsdWUpOworICAgICAgICAgICAgcmV0
dXJuIGNhc3RTdGF0ZTxNZXNzYWdlU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRl
cjxTVEFURSB8IENvZGVTZXQ+JiBzZXRDb2RlKGludCB2YWx1ZSkKKyAgICAgICAgeworICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENvZGVTZXQpLCBwcm9wZXJ0eV9jb2RlX2Fs
cmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2VyKCJjb2RlIl9zLCB2
YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvZGVTZXQ+KCk7CisgICAgICAg
IH0KKworICAgICAgICBSZWY8TmV0d29ya0Vycm9yPiByZWxlYXNlKCkKKyAgICAgICAgeworICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNf
bm90X3JlYWR5KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihOZXR3b3JrRXJy
b3IpID09IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7CisKKyAgICAgICAgICAg
IFJlZjxKU09OOjpPYmplY3Q+IGpzb25SZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgp
OworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJl
ZjxOZXR3b3JrRXJyb3I+Kj4oJmpzb25SZXN1bHQpKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyoKKyAgICAgKiBTeW50aGV0aWMgY29uc3Ry
dWN0b3I6CisgICAgICogUmVmPE5ldHdvcmtFcnJvcj4gcmVzdWx0ID0gTmV0d29ya0Vycm9yOjpj
cmVhdGUoKQorICAgICAqICAgICAuc2V0TWVzc2FnZSguLi4pCisgICAgICogICAgIC5zZXRDb2Rl
KC4uLikKKyAgICAgKiAgICAgLnJlbGVhc2UoKTsKKyAgICAgKi8KKyAgICBzdGF0aWMgQnVpbGRl
cjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBCdWlsZGVyPE5v
RmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICB9Cit9OworCit9IC8vIE5l
dHdvcmsyCisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisKKyNpbmNsdWRlIDx3dGYvT3B0
aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNw
ZWN0b3IgeworCituYW1lc3BhY2UgUHJvdG9jb2wgeworCisKKworfSAvLyBuYW1lc3BhY2UgUHJv
dG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sT2JqZWN0cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmRE
aXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUt
ZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4K
KworQHByb3RvY29sIFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcjsKKworbmFtZXNw
YWNlIEluc3BlY3RvciB7CisKKworY2xhc3MgT2JqQ0luc3BlY3Rvck5ldHdvcmsxQmFja2VuZERp
c3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hl
ciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgT2JqQ0luc3Bl
Y3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sTmV0d29yazFEb21h
aW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9CisgICAgdm9pZCBs
b2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0SWQpIGZpbmFsOworcHJpdmF0ZToKKyAgICBSZXRhaW5Q
dHI8aWQ8VGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKK307
CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNr
ZW5kRGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5l
cmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRl
c3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSAiVGVzdFByb3RvY29s
SW50ZXJuYWwuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNp
bmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordm9p
ZCBPYmpDSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlKGxv
bmcgcmVxdWVzdElkKQoreworICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9y
OkBzZWxlY3Rvcihsb2FkUmVzb3VyY2VXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6
KV0pIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihy
ZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMS5s
b2FkUmVzb3VyY2UnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7CisgICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0
Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICB9OworCisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0g
XnsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwg
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2UpOworICAgIH07CisKKyAgICBbbV9kZWxlZ2F0
ZSBsb2FkUmVzb3VyY2VXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxs
YmFjazpzdWNjZXNzQ2FsbGJhY2tdOworfQorCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgor
CisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorCisjIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8
V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5
ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5T
T2JqZWN0CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluLCBzZXR0ZXI9c2V0TmV0d29yazFI
YW5kbGVyOikgaWQ8VGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyPiBuZXR3b3JrMUhh
bmRsZXI7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFRlc3RQcm90b2NvbE5ldHdv
cmszRG9tYWluRXZlbnREaXNwYXRjaGVyICpuZXR3b3JrM0V2ZW50RGlzcGF0Y2hlcjsKK0BlbmQK
KworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorCisjIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRl
c3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJu
YWwuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorI2ltcG9y
dCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9y
dCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+
CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4K
KwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90
b2NvbENvbmZpZ3VyYXRpb24KK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIq
IF9jb250cm9sbGVyOworICAgIGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4g
X25ldHdvcmsxSGFuZGxlcjsKKyAgICBUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkV2ZW50RGlz
cGF0Y2hlciAqX25ldHdvcmszRXZlbnREaXNwYXRjaGVyOworfQorCistIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRy
b2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAg
ICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIg
PSBjb250cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sK
KyAgICBbX25ldHdvcmsxSGFuZGxlciByZWxlYXNlXTsKKyAgICBbX25ldHdvcmszRXZlbnREaXNw
YXRjaGVyIHJlbGVhc2VdOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAodm9pZClzZXRO
ZXR3b3JrMUhhbmRsZXI6KGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4paGFu
ZGxlcgoreworICAgIGlmIChoYW5kbGVyID09IF9uZXR3b3JrMUhhbmRsZXIpCisgICAgICAgIHJl
dHVybjsKKworICAgIFtfbmV0d29yazFIYW5kbGVyIHJlbGVhc2VdOworICAgIF9uZXR3b3JrMUhh
bmRsZXIgPSBbaGFuZGxlciByZXRhaW5dOworCisgICAgYXV0byBhbHRlcm5hdGVEaXNwYXRjaGVy
ID0gbWFrZVVuaXF1ZTxPYmpDSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4oaGFu
ZGxlcik7CisgICAgYXV0byBhbHRlcm5hdGVBZ2VudCA9IG1ha2VVbmlxdWU8QWx0ZXJuYXRlRGlz
cGF0Y2hhYmxlQWdlbnQ8TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciwgQWx0ZXJuYXRlTmV0d29y
azFCYWNrZW5kRGlzcGF0Y2hlcj4+KCJOZXR3b3JrMSJfcywgKl9jb250cm9sbGVyLCBXVEZNb3Zl
KGFsdGVybmF0ZURpc3BhdGNoZXIpKTsKKyAgICBfY29udHJvbGxlci0+YXBwZW5kRXh0cmFBZ2Vu
dChXVEZNb3ZlKGFsdGVybmF0ZUFnZW50KSk7Cit9CisKKy0gKGlkPFRlc3RQcm90b2NvbE5ldHdv
cmsxRG9tYWluSGFuZGxlcj4pbmV0d29yazFIYW5kbGVyCit7CisgICAgcmV0dXJuIF9uZXR3b3Jr
MUhhbmRsZXI7Cit9CisKKy0gKFRlc3RQcm90b2NvbE5ldHdvcmszRG9tYWluRXZlbnREaXNwYXRj
aGVyICopbmV0d29yazNFdmVudERpc3BhdGNoZXIKK3sKKyAgICBpZiAoIV9uZXR3b3JrM0V2ZW50
RGlzcGF0Y2hlcikKKyAgICAgICAgX25ldHdvcmszRXZlbnREaXNwYXRjaGVyID0gW1tUZXN0UHJv
dG9jb2xOZXR3b3JrM0RvbWFpbkV2ZW50RGlzcGF0Y2hlciBhbGxvY10gaW5pdFdpdGhDb250cm9s
bGVyOl9jb250cm9sbGVyXTsKKyAgICByZXR1cm4gX25ldHdvcmszRXZlbnREaXNwYXRjaGVyOwor
fQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1t
CisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1
cmUtZ3VhcmRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2lu
ZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sTmV0
d29yazNEb21haW5FdmVudERpc3BhdGNoZXIKK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNv
bnRyb2xsZXIqIF9jb250cm9sbGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250
cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAg
ICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5p
bDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVy
OworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXJlc291cmNlTG9hZGVkCit7CisgICAg
Y29uc3QgRnJvbnRlbmRSb3V0ZXImIHJvdXRlciA9IF9jb250cm9sbGVyLT5mcm9udGVuZFJvdXRl
cigpOworCisgICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOworICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIk5ldHdv
cmszLnJlc291cmNlTG9hZGVkIl9zKTsKKyAgICByb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdl
LT50b0pTT05TdHJpbmcoKSk7Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5o
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRo
LWZlYXR1cmUtZ3VhcmRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKKyNpbXBvcnQgPFdl
Ykluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KKworCitAY2xhc3MgVGVzdFByb3Rv
Y29sTmV0d29yazJOZXR3b3JrRXJyb3I7CisKKworCisKK19fYXR0cmlidXRlX18oKHZpc2liaWxp
dHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xOZXR3b3JrMk5ldHdvcmtF
cnJvciA6IFJXSVByb3RvY29sSlNPTk9iamVjdAorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5
bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQ7CistIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNv
bk9iamVjdDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVz
c2FnZSBjb2RlOihpbnQpY29kZTsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWlj
LCBjb3B5KSBOU1N0cmluZyAqbWVzc2FnZTsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9u
YXRvbWljLCBhc3NpZ24pIGludCBjb2RlOworQGVuZAorCitAcHJvdG9jb2wgVGVzdFByb3RvY29s
TmV0d29yazFEb21haW5IYW5kbGVyIDxOU09iamVjdD4KK0BvcHRpb25hbAorLSAodm9pZClsb2Fk
UmVzb3VyY2VXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9y
Q2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKHZvaWQpKXN1Y2Nlc3NDYWxsYmFjazsK
K0BlbmQKKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJm
YWNlIFRlc3RQcm90b2NvbE5ldHdvcmszRG9tYWluRXZlbnREaXNwYXRjaGVyIDogTlNPYmplY3QK
Ky0gKHZvaWQpcmVzb3VyY2VMb2FkZWQ7CitAZW5kCisKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9y
L1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgorCisjIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5o
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRo
LWZlYXR1cmUtZ3VhcmRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xK
U09OT2JqZWN0UHJpdmF0ZS5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJ
bnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCitAaW50
ZXJmYWNlIFRlc3RQcm90b2NvbE5ldHdvcmszRG9tYWluRXZlbnREaXNwYXRjaGVyIChQcml2YXRl
KQorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooSW5zcGVjdG9yOjpBdWdtZW50
YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXI7CitAZW5kCisKKworIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdl
bmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2lt
cG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgorCituYW1l
c3BhY2UgSW5zcGVjdG9yIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgorT3B0
aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1
ZSk7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2Vu
ZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3Rv
Y29sVHlwZVBhcnNlci5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9i
amVjdFByaXZhdGUuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGludGVyZmFj
ZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKE5ldHdvcmsyRG9tYWluKQorCisrICh2b2lk
KV9wYXJzZU5ldHdvcmtFcnJvcjooVGVzdFByb3RvY29sTmV0d29yazJOZXR3b3JrRXJyb3IgKiop
b3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisKK0BlbmQKKworQGltcGxlbWVudGF0
aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoTmV0d29yazJEb21haW4pCisKKysgKHZv
aWQpX3BhcnNlTmV0d29ya0Vycm9yOihUZXN0UHJvdG9jb2xOZXR3b3JrMk5ldHdvcmtFcnJvciAq
KilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOworICAgICpvdXRW
YWx1ZSA9IFtbVGVzdFByb3RvY29sTmV0d29yazJOZXR3b3JrRXJyb3IgYWxsb2NdIGluaXRXaXRo
UGF5bG9hZDpwYXlsb2FkXTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBl
cy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMt
d2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JX
SVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKyNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+
CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9y
OworCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xOZXR3b3JrMk5ldHdvcmtFcnJvcgor
CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxO
U1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0
XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJ
UkVEX1BST1BFUlRZKHBheWxvYWRbQCJtZXNzYWdlIl0sIEAibWVzc2FnZSIpOworICAgIHNlbGYu
bWVzc2FnZSA9IHBheWxvYWRbQCJtZXNzYWdlIl07CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9S
X1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJjb2RlIl0sIEAiY29kZSIpOworICAgIHNlbGYu
Y29kZSA9IFtwYXlsb2FkW0AiY29kZSJdIGludGVnZXJWYWx1ZV07CisKKyAgICByZXR1cm4gc2Vs
ZjsKK30KKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2Nv
bEpTT05PYmplY3QgKilvYmplY3QKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRo
SlNPTk9iamVjdDpbb2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0KCldKSkKKyAgICAgICAgcmV0dXJu
IG5pbDsKKworICAgIHJldHVybiBzZWxmOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhN
ZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZTooaW50KWNvZGUKK3sKKyAgICBpZiAoIShz
ZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkobWVzc2FnZSwgQCJtZXNzYWdlIik7CisKKyAg
ICBzZWxmLm1lc3NhZ2UgPSBtZXNzYWdlOworICAgIHNlbGYuY29kZSA9IGNvZGU7CisKKyAgICBy
ZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClzZXRNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UK
K3sKKyAgICBbc3VwZXIgc2V0U3RyaW5nOm1lc3NhZ2UgZm9yS2V5OkAibWVzc2FnZSJdOworfQor
CistIChOU1N0cmluZyAqKW1lc3NhZ2UKK3sKKyAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0Zvcktl
eTpAIm1lc3NhZ2UiXTsKK30KKworLSAodm9pZClzZXRDb2RlOihpbnQpY29kZQoreworICAgIFtz
dXBlciBzZXRJbnRlZ2VyOmNvZGUgZm9yS2V5OkAiY29kZSJdOworfQorCistIChpbnQpY29kZQor
eworICAgIHJldHVybiBbc3VwZXIgaW50ZWdlckZvcktleTpAImNvZGUiXTsKK30KKworQGVuZAor
CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zYW1lLXR5
cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zYW1lLXR5cGUtaWQtZGlmZmVyZW50
LWRvbWFpbi5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MC4uY2Y1YTU5MzFiYzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2FtZS10eXBlLWlkLWRpZmZlcmVudC1k
b21haW4uanNvbi1yZXN1bHQKQEAgLTAsMCArMSw4NzkgQEAKKyMjIyBCZWdpbiBGaWxlOiBJbnNw
ZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21t
YW5kcy5qcworCisjIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVy
cy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZl
cmVudC1kb21haW4uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0
b3IgeworCitjbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAg
dm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlz
cGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQor
ICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJu
IG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KK3ByaXZhdGU6CisgICAgUmVmUHRyPEJhY2tl
bmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOworfTsKKworCisKKworfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKKyMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVy
cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5q
c29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0eXBlZGVmIFN0cmlu
ZyBFcnJvclN0cmluZzsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBG
aWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNr
ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2Ft
ZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEJh
Y2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
RnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUg
PHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwor
I2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorI2luY2x1ZGUgIlRl
c3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKwor
Cit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERp
c3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMu
aAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJl
bnQtZG9tYWluLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5j
bHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
KworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEZyb250ZW5kUm91dGVyOworCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hl
cnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21h
aW4uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKKwor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0
Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFp
bi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBl
cy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Ig
eworCisKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworCisKKworCisvLyBUeXBlZGVmcy4KK25h
bWVzcGFjZSBSdW50aW1lIHsKKy8qIFVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4gKi8KK3R5cGVk
ZWYgU3RyaW5nIFJlbW90ZU9iamVjdElkOworfSAvLyBSdW50aW1lCisKK25hbWVzcGFjZSBSdW50
aW1lMiB7CisvKiBVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIuICovCit0eXBlZGVmIFN0cmluZyBS
ZW1vdGVPYmplY3RJZDsKK30gLy8gUnVudGltZTIKKy8vIEVuZCBvZiB0eXBlZGVmcy4KKworCisK
K30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbE9iamVjdHMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2Ft
ZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdFBy
b3RvY29sT2JqZWN0cy5oIgorCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNl
IFByb3RvY29sIHsKKworCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisK
KyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWlu
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5o
PgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworCisKK25hbWVzcGFjZSBJbnNwZWN0b3Ig
eworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xC
YWNrZW5kRGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBz
YW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFBy
b3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRl
cm5hbC5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2luY2x1
ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlz
cGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24u
aAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJl
bnQtZG9tYWluLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgorCitfX2F0dHJpYnV0ZV9f
KCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbiA6IE5TT2JqZWN0CitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xD
b25maWd1cmF0aW9uLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRp
b24ubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlm
ZmVyZW50LWRvbWFpbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKKworI2ltcG9ydCAi
VGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNw
YXRjaGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxl
QWdlbnQuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29u
dHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXJzLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxl
bWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KK3sKKyAgICBBdWdtZW50YWJsZUlu
c3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xs
ZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAg
cmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBj
b250cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAg
ICBbc3VwZXIgZGVhbGxvY107Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbENvbmZpZ3VyYXRpb24ubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50
RGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5
cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBv
cnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8d3RmL0pTT05WYWx1
ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisjIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRp
ZmZlcmVudC1kb21haW4uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKworI2ltcG9ydCA8V2Vi
SW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgorCisKKworCisKKworCisKKworCisK
KworCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlP
YmplY3RzLmg+CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKKworIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2lt
cG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKKyNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8d3RmL0pT
T05WYWx1ZXMuaD4KKworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5o
CisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWlu
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9y
dCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJh
eUNvbnZlcnNpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBPYmpDRW51bVR5cGU+CitPcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0
cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKKworCisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorCisj
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgi
CisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0
b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5z
cGVjdG9yOworCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoUnVudGlt
ZURvbWFpbikKKworKyAodm9pZClfcGFyc2VSZW1vdGVPYmplY3RJZDooTlNTdHJpbmcgKiopb3V0
VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisKK0BlbmQKK0BpbnRlcmZhY2UgVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zIChSdW50aW1lMkRvbWFpbikKKworKyAodm9pZClfcGFyc2VS
ZW1vdGVPYmplY3RJZDooTlNTdHJpbmcgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxv
YWQ7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cyAoUnVudGltZURvbWFpbikKKworKyAodm9pZClfcGFyc2VSZW1vdGVPYmplY3RJZDooTlNTdHJp
bmcgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENF
UFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBjbGFzc10pOworICAgICpvdXRW
YWx1ZSA9IChOU1N0cmluZyAqKXBheWxvYWQ7Cit9CisKK0BlbmQKK0BpbXBsZW1lbnRhdGlvbiBU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFJ1bnRpbWUyRG9tYWluKQorCisrICh2b2lkKV9w
YXJzZVJlbW90ZU9iamVjdElkOihOU1N0cmluZyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQp
cGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05T
U3RyaW5nIGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gKE5TU3RyaW5nICopcGF5bG9hZDsKK30K
KworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1t
CisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFBy
b3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
LmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5o
PgorI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+
CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworCisKKworCisjIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1z
ZXR0ZXJzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uLXJl
c3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMTA3MjEyYjliNDgK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24tcmVz
dWx0CkBAIC0wLDAgKzEsMTA4OSBAQAorIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRD
b21tYW5kcy5qcworLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9w
dGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcworCisj
IyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJz
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdt
YSBvbmNlCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKwor
I2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xh
c3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHZvaWQgc2V0QmFj
a2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsg
bV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KKyAgICBCYWNrZW5k
RGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmRE
aXNwYXRjaGVyLmdldCgpOyB9Citwcml2YXRlOgorICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hl
cj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKK307CisKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
CisjIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMg
QmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3Ry
aW5nOworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRp
b25hbC10eXBlLXNldHRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNw
YXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRS
b3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZl
ckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorI2luY2x1ZGUgIlRlc3RBbHRlcm5h
dGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVS
TkFURV9ESVNQQVRDSEVSUykKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCit9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJz
LmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVy
cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPHd0
Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVz
cGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBGcm9udGVuZFJvdXRlcjsKKworfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKwor
IyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5j
cHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgor
I2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisK
KworbmFtZXNwYWNlIFByb3RvY29sIHsKKworCisKKy8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgor
bmFtZXNwYWNlIFJ1bnRpbWUgeworY2xhc3MgS2V5UGF0aDsKK30gLy8gUnVudGltZQorLy8gRW5k
IG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgorCisKKworCituYW1lc3BhY2UgVGVzdEhlbHBlcnMg
eworCitTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpOworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFsdWUpCit7Cisg
ICAgcmV0dXJuIGdldEVudW1Db25zdGFudFZhbHVlKHN0YXRpY19jYXN0PGludD4oZW51bVZhbHVl
KSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCisKK25hbWVzcGFjZSBSdW50aW1l
IHsKKy8qIEtleSBwYXRoLiAqLworY2xhc3MgS2V5UGF0aCA6IHB1YmxpYyBKU09OOjpPYmplY3RC
YXNlIHsKK3B1YmxpYzoKKyAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICd0eXBlJyB3
aGlsZSBnZW5lcmF0aW5nIEtleVBhdGguCisgICAgZW51bSBjbGFzcyBUeXBlIHsKKyAgICAgICAg
TnVsbCA9IDAsCisgICAgICAgIFN0cmluZyA9IDEsCisgICAgICAgIEFycmF5ID0gMiwKKyAgICB9
OyAvLyBlbnVtIGNsYXNzIFR5cGUKKyAgICBlbnVtIHsKKyAgICAgICAgTm9GaWVsZHNTZXQgPSAw
LAorICAgICAgICBUeXBlU2V0ID0gMSA8PCAwLAorICAgICAgICBBbGxGaWVsZHNTZXQgPSAoVHlw
ZVNldCkKKyAgICB9OworCisgICAgdGVtcGxhdGU8aW50IFNUQVRFPgorICAgIGNsYXNzIEJ1aWxk
ZXIgeworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVzdWx0
OworCisgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNh
c3RTdGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2Fz
dDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1
aWxkZXIoUmVmPC8qS2V5UGF0aCovSlNPTjo6T2JqZWN0PiYmIG9iamVjdCkKKyAgICAgICAgICAg
IDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQorICAgICAgICB7CisgICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9p
bml0X3N0YXRlKTsKKyAgICAgICAgfQorICAgICAgICBmcmllbmQgY2xhc3MgS2V5UGF0aDsKKyAg
ICBwdWJsaWM6CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFR5cGVTZXQ+JiBzZXRUeXBlKFR5
cGUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUg
JiBUeXBlU2V0KSwgcHJvcGVydHlfdHlwZV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0U3RyaW5nKCJ0eXBlIl9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVy
czo6Z2V0RW51bUNvbnN0YW50VmFsdWUodmFsdWUpKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0
U3RhdGU8VHlwZVNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIFJlZjxLZXlQYXRoPiByZWxl
YXNlKCkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxs
RmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKHNpemVvZihLZXlQYXRoKSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0KSwgY2Fubm90X2Nhc3Qp
OworCisgICAgICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uUmVzdWx0ID0gbV9yZXN1bHQu
cmVsZWFzZU5vbk51bGwoKTsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gV1RGTW92ZSgqcmVp
bnRlcnByZXRfY2FzdDxSZWY8S2V5UGF0aD4qPigmanNvblJlc3VsdCkpOworICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvKgorICAgICAqIFN5bnRo
ZXRpYyBjb25zdHJ1Y3RvcjoKKyAgICAgKiBSZWY8S2V5UGF0aD4gcmVzdWx0ID0gS2V5UGF0aDo6
Y3JlYXRlKCkKKyAgICAgKiAgICAgLnNldFR5cGUoLi4uKQorICAgICAqICAgICAucmVsZWFzZSgp
OworICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCkpOworICAgIH0KKworICAgIHZvaWQgc2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUp
CisgICAgeworICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRTdHJpbmcoInN0cmluZyJfcywg
dmFsdWUpOworICAgIH0KKworICAgIHZvaWQgc2V0QXJyYXkoUmVmUHRyPEpTT046OkFycmF5T2Y8
U3RyaW5nPj4gdmFsdWUpCisgICAgeworICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRBcnJh
eSgiYXJyYXkiX3MsIFdURk1vdmUodmFsdWUpKTsKKyAgICB9Cit9OworCit9IC8vIFJ1bnRpbWUK
KworCisKK25hbWVzcGFjZSBUZXN0SGVscGVycyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFByb3Rv
Y29sRW51bVR5cGU+CitPcHRpb25hbDxQcm90b2NvbEVudW1UeXBlPiBwYXJzZUVudW1WYWx1ZUZy
b21TdHJpbmcoY29uc3QgU3RyaW5nJik7CisKKy8vIEVudW1zIGluIHRoZSAnUnVudGltZScgRG9t
YWluCit0ZW1wbGF0ZTw+CitPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpL
ZXlQYXRoOjpUeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZT4oY29uc3QgU3RyaW5nJik7CisKK30gLy8gbmFtZXNw
YWNlIFRlc3RIZWxwZXJzCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKworI2luY2x1ZGUgPHd0Zi9PcHRp
b25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKK25hbWVzcGFjZSBUZXN0SGVscGVycyB7
CisKK3N0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBlbnVtX2NvbnN0YW50X3ZhbHVlc1tdID0gewor
ICAgICJudWxsIiwKKyAgICAic3RyaW5nIiwKKyAgICAiYXJyYXkiLAorfTsKKworU3RyaW5nIGdl
dEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CisgICAgcmV0dXJuIGVudW1fY29uc3RhbnRf
dmFsdWVzW2NvZGVdOworfQorCisvLyBFbnVtcyBpbiB0aGUgJ1J1bnRpbWUnIERvbWFpbgordGVt
cGxhdGU8PgorT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6
VHlwZT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRp
bWU6OktleVBhdGg6OlR5cGU+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCit7CisgICAg
c3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0geworICAgICAgICAoc2l6ZV90
KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6OlR5cGU6Ok51bGwsCisgICAg
ICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZTo6
U3RyaW5nLAorICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6Oktl
eVBhdGg6OlR5cGU6OkFycmF5LAorICAgIH07CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAz
OyArK2kpCisgICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVl
c1tjb25zdGFudFZhbHVlc1tpXV0pCisgICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6OlR5cGUpY29uc3RhbnRWYWx1ZXNbaV07CisKKyAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworfQorCisKK30gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCisK
KworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
KworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorCisjIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8
d3RmL1JldGFpblB0ci5oPgorCisKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERp
c3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRj
aGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlv
bmFsLXR5cGUtc2V0dGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2Vu
ZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9KU09O
VmFsdWVzLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0K
KworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5q
c29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQg
PFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0
eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBO
U09iamVjdAorQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
bi5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0
ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lt
cG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9j
b2xJbnRlcm5hbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgi
CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgor
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+
CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0
Y2hlcnMuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVycy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24g
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29u
dHJvbGxlciogX2NvbnRyb2xsZXI7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRy
b2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgoreworICAg
IHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmls
OworICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7
CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIFtzdXBlciBk
ZWFsbG9jXTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbi5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVy
cy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFs
LXR5cGUtc2V0dGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwor
dXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bEV2ZW50RGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1z
ZXR0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rv
ci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KKworCitAY2xhc3MgVGVzdFByb3RvY29sUnVudGlt
ZUtleVBhdGg7CisKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sUnVu
dGltZUtleVBhdGhUeXBlKSB7CisgICAgVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlTnVs
bCwKKyAgICBUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGVTdHJpbmcsCisgICAgVGVzdFBy
b3RvY29sUnVudGltZUtleVBhdGhUeXBlQXJyYXksCit9OworCisKK19fYXR0cmlidXRlX18oKHZp
c2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xSdW50aW1lS2V5
UGF0aCA6IFJXSVByb3RvY29sSlNPTk9iamVjdAorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5
bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQ7CistIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNv
bk9iamVjdDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFR5cGU6KFRlc3RQcm90b2NvbFJ1bnRp
bWVLZXlQYXRoVHlwZSl0eXBlOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMs
IGFzc2lnbikgVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlIHR5cGU7CisvKiBvcHRpb25h
bCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKnN0cmluZzsKKy8qIG9w
dGlvbmFsICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU0FycmF5Lyo8TlNTdHJpbmc+
Ki8gKmFycmF5OworQGVuZAorCisKKworCisKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVBy
b3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgorCisjIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0
ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lt
cG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJp
dmF0ZS5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250
cm9sbGVyLmg+CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCisKKworCisjIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hh
ZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0IDxX
ZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+CisKK25hbWVzcGFjZSBJ
bnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+CitPcHRpb25hbDxP
YmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKKwor
CitpbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sUnVudGltZUtleVBh
dGhUeXBlIHZhbHVlKQoreworICAgIHN3aXRjaCh2YWx1ZSkgeworICAgIGNhc2UgVGVzdFByb3Rv
Y29sUnVudGltZUtleVBhdGhUeXBlTnVsbDoKKyAgICAgICAgcmV0dXJuICJudWxsIl9zOworICAg
IGNhc2UgVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlU3RyaW5nOgorICAgICAgICByZXR1
cm4gInN0cmluZyJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZUFy
cmF5OgorICAgICAgICByZXR1cm4gImFycmF5Il9zOworICAgIH0KK30KKwordGVtcGxhdGU8Pgor
aW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZT4gZnJvbVByb3Rv
Y29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09ICJudWxs
IikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZU51bGw7Cisg
ICAgaWYgKHZhbHVlID09ICJzdHJpbmciKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUnVu
dGltZUtleVBhdGhUeXBlU3RyaW5nOworICAgIGlmICh2YWx1ZSA9PSAiYXJyYXkiKQorICAgICAg
ICByZXR1cm4gVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlQXJyYXk7CisgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKK30KKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKworIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucy5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQ
cm90b2NvbFR5cGVQYXJzZXIuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpT
T05PYmplY3RQcml2YXRlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbnRl
cmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChSdW50aW1lRG9tYWluKQorCisrICh2
b2lkKV9wYXJzZUtleVBhdGg6KFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoICoqKW91dFZhbHVl
IGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFJ1bnRpbWVEb21haW4pCisKKysgKHZvaWQpX3BhcnNl
S2V5UGF0aDooVGVzdFByb3RvY29sUnVudGltZUtleVBhdGggKiopb3V0VmFsdWUgZnJvbVBheWxv
YWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxv
YWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2Nv
bFJ1bnRpbWVLZXlQYXRoIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07Cit9CisKK0Bl
bmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorCisj
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9j
b2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIK
KyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Cisj
aW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwor
dXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3Rv
Y29sUnVudGltZUtleVBhdGgKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9u
bnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZAoreworICAgIGlmICgh
KHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgVEhST1df
RVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AidHlwZSJdLCBAInR5cGUi
KTsKKyAgICBPcHRpb25hbDxUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGU+IHR5cGUgPSBm
cm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlPihwYXlsb2Fk
W0AidHlwZSJdKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9FTlVNX1ZBTFVFKHR5cGUs
IEAidHlwZSIpOworICAgIHNlbGYudHlwZSA9IHR5cGUudmFsdWUoKTsKKworICAgIHNlbGYuc3Ry
aW5nID0gcGF5bG9hZFtAInN0cmluZyJdOworCisgICAgc2VsZi5hcnJheSA9IHBheWxvYWRbQCJh
cnJheSJdOworCisgICAgcmV0dXJuIHNlbGY7Cit9CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQ
cm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopb2JqZWN0Cit7CisgICAgaWYg
KCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEpTT05PYmplY3Q6W29iamVjdCB0b0pTT05PYmplY3Rd
LmdldCgpXSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKwor
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVHlwZTooVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhU
eXBlKXR5cGUKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0
dXJuIG5pbDsKKworICAgIHNlbGYudHlwZSA9IHR5cGU7CisKKyAgICByZXR1cm4gc2VsZjsKK30K
KworLSAodm9pZClzZXRUeXBlOihUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGUpdHlwZQor
eworICAgIFtzdXBlciBzZXRTdHJpbmc6dG9Qcm90b2NvbFN0cmluZyh0eXBlKSBmb3JLZXk6QCJ0
eXBlIl07Cit9CisKKy0gKFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZSl0eXBlCit7Cisg
ICAgcmV0dXJuIGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5
cGU+KFtzdXBlciBzdHJpbmdGb3JLZXk6QCJ0eXBlIl0pLnZhbHVlKCk7Cit9CisKKy0gKHZvaWQp
c2V0U3RyaW5nOihOU1N0cmluZyAqKXN0cmluZworeworICAgIFtzdXBlciBzZXRTdHJpbmc6c3Ry
aW5nIGZvcktleTpAInN0cmluZyJdOworfQorCistIChOU1N0cmluZyAqKXN0cmluZworeworICAg
IHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAic3RyaW5nIl07Cit9CisKKy0gKHZvaWQpc2V0
QXJyYXk6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWFycmF5Cit7CisgICAgW3N1cGVyIHNldEpT
T05BcnJheTp0b0pTT05TdHJpbmdBcnJheShhcnJheSkgZm9yS2V5OkAiYXJyYXkiXTsKK30KKwor
LSAoTlNBcnJheS8qPE5TU3RyaW5nPiovICopYXJyYXkKK3sKKyAgICByZXR1cm4gdG9PYmpDU3Ry
aW5nQXJyYXkoW3N1cGVyIEpTT05BcnJheUZvcktleTpAImFycmF5Il0pOworfQorCitAZW5kCisK
KworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3Nob3VsZC1z
dHJpcC1jb21tZW50cy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zaG91bGQtc3RyaXAtY29tbWVudHMuanNvbi1yZXN1
bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmViYTg4ZDExM2NhCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL3Nob3VsZC1zdHJpcC1jb21tZW50cy5qc29uLXJlc3VsdApAQCAtMCww
ICsxLDgzNSBAQAorIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNob3VsZC1zdHJpcC1jb21tZW50cy5q
c29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisjIyMgRW5kIEZp
bGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcworCisjIyMgQmVnaW4gRmlsZTogVGVzdEFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgi
CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4K
KyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorCitu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIg
eworcHVibGljOgorICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmRE
aXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUo
ZGlzcGF0Y2hlcik7IH0KKyAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIo
KSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Citwcml2YXRlOgor
ICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKK307CisK
KworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlwLWNv
bW1lbnRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3R5cGVk
ZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisj
IyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTog
VGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBzaG91bGQtc3RyaXAtY29tbWVudHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEJh
Y2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
RnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUg
PHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwor
I2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorI2luY2x1ZGUgIlRl
c3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKwor
Cit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERp
c3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMu
aAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNob3VsZC1zdHJpcC1jb21tZW50
cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPHd0
Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVz
cGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBGcm9udGVuZFJvdXRlcjsKKworfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKwor
IyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNob3VsZC1zdHJpcC1jb21tZW50cy5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHNob3VsZC1zdHJpcC1jb21tZW50cy5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFByb3Rv
Y29sIHsKKworCisKKworCisKKworCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgK
KworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKworI2luY2x1ZGUgPHd0Zi9PcHRpb25h
bC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90b2Nv
bAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xPYmplY3RzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3Bh
dGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaG91bGQtc3RyaXAt
Y29tbWVudHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXJzLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCisKKworbmFtZXNwYWNlIElu
c3BlY3RvciB7CisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIHNob3VsZC1zdHJpcC1jb21tZW50cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFBy
b3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRl
cm5hbC5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2luY2x1
ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlz
cGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24u
aAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNob3VsZC1zdHJpcC1jb21tZW50
cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBv
cnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KKworX19hdHRyaWJ1dGVfXygodmlzaWJp
bGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24g
OiBOU09iamVjdAorQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJh
dGlvbi5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAi
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRl
cm5hbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisjaW1w
b3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgorI2ltcG9y
dCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1w
b3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMu
aD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5o
PgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxl
ciogX2NvbnRyb2xsZXI7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6
KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgoreworICAgIHNlbGYg
PSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAg
IEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAg
cmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIFtzdXBlciBkZWFsbG9j
XTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
bi5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNob3VsZC1zdHJpcC1jb21tZW50cy5q
c29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5oIgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNl
IEluc3BlY3RvcjsKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hl
cnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KKy8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3Vu
ZGF0aW9uLmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3Qu
aD4KKworCisKKworCisKKworCisKKworCisKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVBy
b3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgorCisjIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVz
dFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgor
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+
CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCisKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbEludGVybmFsLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlw
LWNvbW1lbnRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJv
dG9jb2xBcnJheUNvbnZlcnNpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+CitPcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Q
cm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKKworfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKwor
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNob3VsZC1zdHJpcC1jb21tZW50cy5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBv
cnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQ
cm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7
CisKKworCisKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5t
bQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBzaG91bGQtc3RyaXAtY29tbWVudHMuanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJ
bnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNp
bXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisjaW1w
b3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNp
bmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5
cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBl
Lmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29u
LXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOGZmZjlhNGUw
ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10
eXBlLmpzb24tcmVzdWx0CkBAIC0wLDAgKzEsODU2IEBACisjIyMgQmVnaW4gRmlsZTogSW5zcGVj
dG9yQmFja2VuZENvbW1hbmRzLmpzCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
dHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KKy8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFj
a2VuZENvbW1hbmRzLmpzCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERp
c3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xh
cmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMu
aCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5o
PgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisK
K25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hl
ciB7CitwdWJsaWM6CisgICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2Vu
ZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92
ZShkaXNwYXRjaGVyKTsgfQorICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hl
cigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KK3ByaXZhdGU6
CisgICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOworfTsK
KworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3Bh
dGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0
aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bE9iamVjdHMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKKworCit9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5o
CisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRp
dmUtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgi
CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgor
I2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVk
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCisjaWYgRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmRE
aXNwYXRjaGVycy5oIgorI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK30gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMj
IyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBl
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8d3Rm
L0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNw
YWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEZyb250ZW5kUm91dGVyOworCit9IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorCisj
IyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10
eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCisK
KyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK30g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3Bh
dGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXBy
aW1pdGl2ZS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQ
cm90b2NvbFR5cGVzLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNl
IEluc3BlY3RvciB7CisKKworCituYW1lc3BhY2UgUHJvdG9jb2wgeworCisKKworCisKKy8vIFR5
cGVkZWZzLgorbmFtZXNwYWNlIFJ1bnRpbWUgeworLyogVW5pcXVlIG9iamVjdCBpZGVudGlmaWVy
LiAqLwordHlwZWRlZiBpbnQgUmVtb3RlT2JqZWN0SWQ7Cit9IC8vIFJ1bnRpbWUKKy8vIEVuZCBv
ZiB0eXBlZGVmcy4KKworCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKworI2luY2x1ZGUg
PHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNw
YWNlIEluc3BlY3RvciB7CisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKworCit9IC8vIG5hbWVz
cGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0
eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgorLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8d3RmL1Jl
dGFpblB0ci5oPgorCisKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNo
ZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5t
bQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxp
YXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFj
a2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgor
I2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9K
U09OVmFsdWVzLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMu
bW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmlt
aXRpdmUtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KKworX19hdHRyaWJ1dGVf
XygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZp
Z3VyYXRpb24gOiBOU09iamVjdAorQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbi5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0
aW9uLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlv
bi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgor
CisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29s
QmFja2VuZERpc3BhdGNoZXJzLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVE
aXNwYXRjaGFibGVBZ2VudC5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJ
bnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9y
OworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgoreworICAgIEF1
Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Cit9CisKKy0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxl
ciopY29udHJvbGxlcgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxm
KQorICAgICAgICByZXR1cm4gbmlsOworICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBfY29u
dHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVh
bGxvYworeworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2Nv
bEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgor
I2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsK
KworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8Rm91bmRhdGlv
bi9Gb3VuZGF0aW9uLmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05P
YmplY3QuaD4KKworCisKKworCisKKworCisKKworCisKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9y
L1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgorCisjIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5o
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlh
c2VkLXByaW1pdGl2ZS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9j
b2xKU09OT2JqZWN0UHJpdmF0ZS5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFi
bGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCisK
KworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKworIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVz
dFByb3RvY29sLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZl
cnNpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBP
YmpDRW51bVR5cGU+CitPcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhj
b25zdCBTdHJpbmcmIHZhbHVlKTsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisj
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgi
CisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0
b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5z
cGVjdG9yOworCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoUnVudGlt
ZURvbWFpbikKKworKyAodm9pZClfcGFyc2VSZW1vdGVPYmplY3RJZDooTlNOdW1iZXIgKiopb3V0
VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9u
IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoUnVudGltZURvbWFpbikKKworKyAodm9pZClf
cGFyc2VSZW1vdGVPYmplY3RJZDooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlk
KXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtO
U051bWJlciBjbGFzc10pOworICAgICpvdXRWYWx1ZSA9IChOU051bWJlciAqKXBheWxvYWQ7Cit9
CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5t
bQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5
cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1w
b3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmpl
Y3RQcml2YXRlLmg+CisjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2ltcG9ydCA8d3RmL0pT
T05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisKKworIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24t
YXJyYXktdHlwZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbi1y
ZXN1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmJiODRhYjhmOGIx
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uLXJlc3Vs
dApAQCAtMCwwICsxLDEwMzggQEAKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29t
bWFuZHMuanMKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0
aW9uLWFycmF5LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisvLyBEZWJ1Z2dlcgorSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiRGVi
dWdnZXIiLCBudWxsKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJEZWJ1Z2dlci5S
ZWFzb24iLCB7RGllZDogIkRpZWQiLCBGYWludGVkOiAiRmFpbnRlZCIsIEh1bmdyeTogIkh1bmdy
eSJ9KTsKK0luc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkRlYnVnZ2VyIiwgbnVsbCk7
CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcworCisjIyMgQmVnaW4g
RmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNp
ZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworI2luY2x1ZGUgIlRl
c3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9u
dGVuZFJvdXRlci5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgQWx0ZXJuYXRl
QmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNo
ZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlz
cGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KKyAgICBCYWNrZW5kRGlzcGF0Y2hlciog
YmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdl
dCgpOyB9Citwcml2YXRlOgorICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5k
RGlzcGF0Y2hlcjsKK307CisKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5k
aWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjIyMgRW5kIEZp
bGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTog
VGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJv
dG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNw
YWNlIEluc3BlY3RvciB7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCisKKworfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hl
cnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUu
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRl
IDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQorI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hl
cnMuaCIKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
KworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
KworIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4g
RmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAi
VGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitj
bGFzcyBGcm9udGVuZFJvdXRlcjsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5k
IEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RG
cm9udGVuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0
RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25h
bWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVu
ZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbE9iamVjdHMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5
cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+
CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKwor
CisKKy8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgorbmFtZXNwYWNlIERlYnVnZ2VyIHsKK2VudW0g
Y2xhc3MgUmVhc29uOworfSAvLyBEZWJ1Z2dlcgorLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRp
b25zLgorCisKKy8vIFR5cGVkZWZzLgorbmFtZXNwYWNlIERlYnVnZ2VyIHsKK3R5cGVkZWYgaW50
IEJyZWFrcG9pbnRJZDsKK30gLy8gRGVidWdnZXIKKworbmFtZXNwYWNlIFJ1bnRpbWUgewordHlw
ZWRlZiBpbnQgT2JqZWN0SWQ7Cit0eXBlZGVmIEpTT046OkFycmF5T2Y8aW50PiBMdWNreU51bWJl
cnM7Cit0eXBlZGVmIEpTT046OkFycmF5T2Y8U3RyaW5nPiBCYWJ5TmFtZXM7Cit0eXBlZGVmIEpT
T046OkFycmF5T2Y8aW50PiBOZXdPYmplY3RzOwordHlwZWRlZiBKU09OOjpBcnJheU9mPGludD4g
T2xkT2JqZWN0czsKK3R5cGVkZWYgSlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpE
ZWJ1Z2dlcjo6UmVhc29uPiBTdG9wUmVhc29uczsKK30gLy8gUnVudGltZQorLy8gRW5kIG9mIHR5
cGVkZWZzLgorCituYW1lc3BhY2UgVGVzdEhlbHBlcnMgeworCitTdHJpbmcgZ2V0RW51bUNvbnN0
YW50VmFsdWUoaW50IGNvZGUpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgZ2V0RW51
bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFsdWUpCit7CisgICAgcmV0dXJuIGdldEVudW1Db25zdGFu
dFZhbHVlKHN0YXRpY19jYXN0PGludD4oZW51bVZhbHVlKSk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFRlc3RIZWxwZXJzCisKK25hbWVzcGFjZSBEZWJ1Z2dlciB7CisvKiAgKi8KK2VudW0gY2xhc3Mg
UmVhc29uIHsKKyAgICBEaWVkID0gMCwKKyAgICBGYWludGVkID0gMSwKKyAgICBIdW5ncnkgPSAy
LAorfTsgLy8gZW51bSBjbGFzcyBSZWFzb24KK30gLy8gRGVidWdnZXIKKworCisKK25hbWVzcGFj
ZSBUZXN0SGVscGVycyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFByb3RvY29sRW51bVR5cGU+CitP
cHRpb25hbDxQcm90b2NvbEVudW1UeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmcoY29uc3Qg
U3RyaW5nJik7CisKKy8vIEVudW1zIGluIHRoZSAnRGVidWdnZXInIERvbWFpbgordGVtcGxhdGU8
PgorT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbj4gcGFyc2VF
bnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb24+
KGNvbnN0IFN0cmluZyYpOworCit9IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycworCit9IC8vIG5h
bWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworbmFtZXNwYWNl
IFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKKworLy8g
SGFzaCBkZWNsYXJhdGlvbnMgaW4gdGhlICdEZWJ1Z2dlcicgRG9tYWluCit0ZW1wbGF0ZTw+Citz
dHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbj4g
eworICAgIHR5cGVkZWYgSW50SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVh
c29uPiBIYXNoOworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisjIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbE9iamVjdHMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5j
cHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFy
cmF5LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgor
CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworbmFt
ZXNwYWNlIFRlc3RIZWxwZXJzIHsKKworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29u
c3RhbnRfdmFsdWVzW10gPSB7CisgICAgIkRpZWQiLAorICAgICJGYWludGVkIiwKKyAgICAiSHVu
Z3J5IiwKK307CisKK1N0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgeworICAg
IHJldHVybiBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb2RlXTsKK30KKworLy8gRW51bXMgaW4gdGhl
ICdEZWJ1Z2dlcicgRG9tYWluCit0ZW1wbGF0ZTw+CitPcHRpb25hbDxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEZWJ1Z2dlcjo6UmVhc29uPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbj4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmlu
ZykKK3sKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7CisgICAg
ICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbjo6RGllZCwK
KyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uOjpG
YWludGVkLAorICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpS
ZWFzb246Okh1bmdyeSwKKyAgICB9OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMzsgKytp
KQorICAgICAgICBpZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29u
c3RhbnRWYWx1ZXNbaV1dKQorICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29s
OjpEZWJ1Z2dlcjo6UmVhc29uKWNvbnN0YW50VmFsdWVzW2ldOworCisgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKK30KKworCit9IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycworCisKKworfSAvLyBu
YW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIu
aD4KKworCisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKK30gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisK
KyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUu
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0
ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgor
CisjaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorCituYW1l
c3BhY2UgSW5zcGVjdG9yIHsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFBy
b3RvY29sLmg+CisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGlu
dGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKK0BlbmQKKworCisj
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorCisjIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZp
Z3VyYXRpb24uaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENv
cmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKwordXNpbmcgbmFtZXNw
YWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRp
b24KK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwor
fQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3Bl
Y3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOwor
ICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxl
cik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQor
CistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKK0BlbmQKKwor
CisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9j
b2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIK
KyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7
CisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisKKyMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlv
bi5oPgorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+CisK
KworCisKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGVidWdnZXJS
ZWFzb24pIHsKKyAgICBUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbkRpZWQsCisgICAgVGVzdFBy
b3RvY29sRGVidWdnZXJSZWFzb25GYWludGVkLAorICAgIFRlc3RQcm90b2NvbERlYnVnZ2VyUmVh
c29uSHVuZ3J5LAorfTsKKworCisKKworCisKKworCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJ
UHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+CisKKyMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5
cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1w
b3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2
YXRlLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRy
b2xsZXIuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKKworCisKKyMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBl
LWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgPFdlYklu
c3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KKworbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KK09wdGlvbmFsPE9iakNF
bnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOworCisKK2lu
bGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbiB2
YWx1ZSkKK3sKKyAgICBzd2l0Y2godmFsdWUpIHsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERlYnVn
Z2VyUmVhc29uRGllZDoKKyAgICAgICAgcmV0dXJuICJEaWVkIl9zOworICAgIGNhc2UgVGVzdFBy
b3RvY29sRGVidWdnZXJSZWFzb25GYWludGVkOgorICAgICAgICByZXR1cm4gIkZhaW50ZWQiX3M7
CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbkh1bmdyeToKKyAgICAgICAgcmV0
dXJuICJIdW5ncnkiX3M7CisgICAgfQorfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgT3B0aW9uYWw8
VGVzdFByb3RvY29sRGVidWdnZXJSZWFzb24+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJp
bmcmIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSAiRGllZCIpCisgICAgICAgIHJldHVybiBU
ZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbkRpZWQ7CisgICAgaWYgKHZhbHVlID09ICJGYWludGVk
IikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERlYnVnZ2VyUmVhc29uRmFpbnRlZDsKKyAg
ICBpZiAodmFsdWUgPT0gIkh1bmdyeSIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEZWJ1
Z2dlclJlYXNvbkh1bmdyeTsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCisKKworfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24t
YXJyYXktdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorCisjaW1wb3J0ICJU
ZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKKyNpbXBv
cnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisKK3VzaW5n
IG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zIChEZWJ1Z2dlckRvbWFpbikKKworKyAodm9pZClfcGFyc2VCcmVha3BvaW50SWQ6KE5T
TnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworKyAodm9pZClfcGFy
c2VSZWFzb246KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwor
CitAZW5kCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoUnVudGltZURv
bWFpbikKKworKyAodm9pZClfcGFyc2VPYmplY3RJZDooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJv
bVBheWxvYWQ6KGlkKXBheWxvYWQ7CisrICh2b2lkKV9wYXJzZUx1Y2t5TnVtYmVyczooTlNBcnJh
eS8qPE5TTnVtYmVyPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworKyAo
dm9pZClfcGFyc2VCYWJ5TmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKilvdXRWYWx1ZSBm
cm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNlTmV3T2JqZWN0czooTlNBcnJh
eS8qPE5TTnVtYmVyPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworKyAo
dm9pZClfcGFyc2VPbGRPYmplY3RzOihOU0FycmF5Lyo8TlNOdW1iZXI+Ki8gKiopb3V0VmFsdWUg
ZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisrICh2b2lkKV9wYXJzZVN0b3BSZWFzb25zOihOU0Fy
cmF5Lyo8TlNTdHJpbmc+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisK
K0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoRGVi
dWdnZXJEb21haW4pCisKKysgKHZvaWQpX3BhcnNlQnJlYWtwb2ludElkOihOU051bWJlciAqKilv
dXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfQkFEX1RZUEUocGF5bG9hZCwgW05TTnVtYmVyIGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0g
KE5TTnVtYmVyICopcGF5bG9hZDsKK30KKworKyAodm9pZClfcGFyc2VSZWFzb246KE5TTnVtYmVy
ICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKKyAgICBPcHRpb25h
bDxUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbj4gcmVzdWx0ID0gSW5zcGVjdG9yOjpmcm9tUHJv
dG9jb2xTdHJpbmc8VGVzdFByb3RvY29sRGVidWdnZXJSZWFzb24+KHBheWxvYWQpOworICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfQkFEX0VOVU1fVkFMVUUocmVzdWx0LCBAIlJlYXNvbiIpOworICAg
ICpvdXRWYWx1ZSA9IEAocmVzdWx0LnZhbHVlKCkpOworfQorCitAZW5kCitAaW1wbGVtZW50YXRp
b24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChSdW50aW1lRG9tYWluKQorCisrICh2b2lk
KV9wYXJzZU9iamVjdElkOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5
bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TTnVt
YmVyIGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gKE5TTnVtYmVyICopcGF5bG9hZDsKK30KKwor
KyAodm9pZClfcGFyc2VMdWNreU51bWJlcnM6KE5TQXJyYXkvKjxOU051bWJlcj4qLyAqKilvdXRW
YWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
QkFEX1RZUEUocGF5bG9hZCwgW05TQXJyYXkvKjxOU051bWJlcj4qLyBjbGFzc10pOworICAgICpv
dXRWYWx1ZSA9IChOU0FycmF5Lyo8TlNOdW1iZXI+Ki8gKilwYXlsb2FkOworfQorCisrICh2b2lk
KV9wYXJzZUJhYnlOYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKW91dFZhbHVlIGZyb21Q
YXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShw
YXlsb2FkLCBbTlNBcnJheS8qPE5TU3RyaW5nPiovIGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0g
KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKXBheWxvYWQ7Cit9CisKKysgKHZvaWQpX3BhcnNlTmV3
T2JqZWN0czooTlNBcnJheS8qPE5TTnVtYmVyPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihp
ZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBb
TlNBcnJheS8qPE5TTnVtYmVyPiovIGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gKE5TQXJyYXkv
KjxOU051bWJlcj4qLyAqKXBheWxvYWQ7Cit9CisKKysgKHZvaWQpX3BhcnNlT2xkT2JqZWN0czoo
TlNBcnJheS8qPE5TTnVtYmVyPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2Fk
Cit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNBcnJheS8q
PE5TTnVtYmVyPiovIGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gKE5TQXJyYXkvKjxOU051bWJl
cj4qLyAqKXBheWxvYWQ7Cit9CisKKysgKHZvaWQpX3BhcnNlU3RvcFJlYXNvbnM6KE5TQXJyYXkv
KjxOU1N0cmluZz4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TQXJyYXkvKjxOU1N0cmlu
Zz4qLyBjbGFzc10pOworICAgICpvdXRWYWx1ZSA9IChOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilw
YXlsb2FkOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBl
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9y
dCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0
UHJpdmF0ZS5oPgorI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9KU09O
VmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworCisKKworCisjIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlv
bi1lbnVtLXR5cGUuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbi1y
ZXN1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjA5NzAwMGQxODZi
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24tcmVzdWx0
CkBAIC0wLDAgKzEsMTA1MSBAQAorIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21t
YW5kcy5qcworLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRp
b24tZW51bS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworLy8gUnVudGltZQorSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiUnVudGlt
ZSIsIG51bGwpOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIlJ1bnRpbWUuRmFybUFu
aW1hbHMiLCB7UGlnczogIlBpZ3MiLCBDb3dzOiAiQ293cyIsIENhdHM6ICJDYXRzIiwgSGVuczog
IkhlbnMifSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiUnVudGltZS5Ud29MZWdn
ZWRBbmltYWxzIiwge0R1Y2tzOiAiRHVja3MiLCBIZW5zOiAiSGVucyIsIENyb3dzOiAiQ3Jvd3Mi
LCBGbGFtaW5nb3M6ICJGbGFtaW5nb3MifSk7CitJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9t
YWluKCJSdW50aW1lIiwgbnVsbCk7CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21t
YW5kcy5qcworCisjIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVy
cy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1l
bnVtLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENI
RVJTKQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Ig
eworCitjbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdm9p
ZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0
Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQorICAg
IEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1f
YmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KK3ByaXZhdGU6CisgICAgUmVmUHRyPEJhY2tlbmRE
aXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOworfTsKKworCisKKworfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKKyMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5o
CisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0eXBlZGVmIFN0cmluZyBFcnJv
clN0cmluZzsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBU
ZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlz
cGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNs
YXJhdGlvbi1lbnVtLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNw
YXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRS
b3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZl
ckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorI2luY2x1ZGUgIlRlc3RBbHRlcm5h
dGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVS
TkFURV9ESVNQQVRDSEVSUykKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCit9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJz
LmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8d3RmL0pT
T05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNl
IEluc3BlY3RvciB7CisKK2NsYXNzIEZyb250ZW5kUm91dGVyOworCit9IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMg
QmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCisvLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgorI2luY2x1ZGUgPHd0
Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNl
IFByb3RvY29sIHsKKworCisKKy8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgorbmFtZXNwYWNlIFJ1
bnRpbWUgeworZW51bSBjbGFzcyBGYXJtQW5pbWFsczsKK2VudW0gY2xhc3MgVHdvTGVnZ2VkQW5p
bWFsczsKK30gLy8gUnVudGltZQorLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgorCisK
KworCituYW1lc3BhY2UgVGVzdEhlbHBlcnMgeworCitTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFs
dWUoaW50IGNvZGUpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgZ2V0RW51bUNvbnN0
YW50VmFsdWUoVCBlbnVtVmFsdWUpCit7CisgICAgcmV0dXJuIGdldEVudW1Db25zdGFudFZhbHVl
KHN0YXRpY19jYXN0PGludD4oZW51bVZhbHVlKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RI
ZWxwZXJzCisKK25hbWVzcGFjZSBSdW50aW1lIHsKKy8qICAqLworZW51bSBjbGFzcyBGYXJtQW5p
bWFscyB7CisgICAgUGlncyA9IDAsCisgICAgQ293cyA9IDEsCisgICAgQ2F0cyA9IDIsCisgICAg
SGVucyA9IDMsCit9OyAvLyBlbnVtIGNsYXNzIEZhcm1BbmltYWxzCisvKiAgKi8KK2VudW0gY2xh
c3MgVHdvTGVnZ2VkQW5pbWFscyB7CisgICAgRHVja3MgPSA0LAorICAgIEhlbnMgPSAzLAorICAg
IENyb3dzID0gNSwKKyAgICBGbGFtaW5nb3MgPSA2LAorfTsgLy8gZW51bSBjbGFzcyBUd29MZWdn
ZWRBbmltYWxzCit9IC8vIFJ1bnRpbWUKKworCisKK25hbWVzcGFjZSBUZXN0SGVscGVycyB7CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFByb3RvY29sRW51bVR5cGU+CitPcHRpb25hbDxQcm90b2NvbEVu
dW1UeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJik7CisKKy8vIEVu
dW1zIGluIHRoZSAnUnVudGltZScgRG9tYWluCit0ZW1wbGF0ZTw+CitPcHRpb25hbDxJbnNwZWN0
b3I6OlByb3RvY29sOjpSdW50aW1lOjpGYXJtQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9tU3Ry
aW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzPihjb25zdCBTdHJp
bmcmKTsKK3RlbXBsYXRlPD4KK09wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6
OlR3b0xlZ2dlZEFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlBy
b3RvY29sOjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxzPihjb25zdCBTdHJpbmcmKTsKKworfSAv
LyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7CisKKy8vIEhhc2ggZGVjbGFyYXRpb25zIGluIHRo
ZSAnUnVudGltZScgRG9tYWluCit0ZW1wbGF0ZTw+CitzdHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVj
dG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM+IHsKKyAgICB0eXBlZGVmIEludEhh
c2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM+IEhhc2g7Cit9Owor
dGVtcGxhdGU8Pgorc3RydWN0IERlZmF1bHRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRp
bWU6OlR3b0xlZ2dlZEFuaW1hbHM+IHsKKyAgICB0eXBlZGVmIEludEhhc2g8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFscz4gSGFzaDsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdURgorIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgorLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsK
KworbmFtZXNwYWNlIFByb3RvY29sIHsKKworbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKKworc3Rh
dGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFsdWVzW10gPSB7CisgICAgIlBp
Z3MiLAorICAgICJDb3dzIiwKKyAgICAiQ2F0cyIsCisgICAgIkhlbnMiLAorICAgICJEdWNrcyIs
CisgICAgIkNyb3dzIiwKKyAgICAiRmxhbWluZ29zIiwKK307CisKK1N0cmluZyBnZXRFbnVtQ29u
c3RhbnRWYWx1ZShpbnQgY29kZSkgeworICAgIHJldHVybiBlbnVtX2NvbnN0YW50X3ZhbHVlc1tj
b2RlXTsKK30KKworLy8gRW51bXMgaW4gdGhlICdSdW50aW1lJyBEb21haW4KK3RlbXBsYXRlPD4K
K09wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzPiBwYXJz
ZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFu
aW1hbHM+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCit7CisgICAgc3RhdGljIGNvbnN0
IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0geworICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6
UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzOjpQaWdzLAorICAgICAgICAoc2l6ZV90KUlu
c3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzOjpDb3dzLAorICAgICAgICAo
c2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzOjpDYXRzLAor
ICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxz
OjpIZW5zLAorICAgIH07CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCA0OyArK2kpCisgICAg
ICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZh
bHVlc1tpXV0pCisgICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRp
bWU6OkZhcm1BbmltYWxzKWNvbnN0YW50VmFsdWVzW2ldOworCisgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKK30KKwordGVtcGxhdGU8PgorT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVu
dGltZTo6VHdvTGVnZ2VkQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM+KGNvbnN0IFN0cmluZyYgcHJv
dG9jb2xTdHJpbmcpCit7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1td
ID0geworICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xl
Z2dlZEFuaW1hbHM6OkR1Y2tzLAorICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6
OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM6OkhlbnMsCisgICAgICAgIChzaXplX3QpSW5zcGVj
dG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFsczo6Q3Jvd3MsCisgICAgICAg
IChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFsczo6
RmxhbWluZ29zLAorICAgIH07CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCA0OyArK2kpCisg
ICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFu
dFZhbHVlc1tpXV0pCisgICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1
bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHMpY29uc3RhbnRWYWx1ZXNbaV07CisKKyAgICByZXR1cm4g
V1RGOjpudWxsb3B0OworfQorCisKK30gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCisKKworCit9
IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWlu
UHRyLmg+CisKKworCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCit9IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMu
aAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5
cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1w
b3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5o
IgorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorCitu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0
UHJvdG9jb2wuaD4KKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitA
aW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAorQGVuZAorCisK
KyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgorLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25m
aWd1cmF0aW9uLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW1wb3J0
ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRD
b3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+CisKK3VzaW5nIG5hbWVz
cGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0
aW9uCit7CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsK
K30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNw
ZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsK
KyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNvbnRyb2xs
ZXIpOworICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKKyAgICByZXR1cm4gc2VsZjsKK30K
KworLSAodm9pZClkZWFsbG9jCit7CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCitAZW5kCisK
KworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9j
b2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIK
KyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7
CisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisKKyMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9u
Lmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KKwor
CisKKworCit0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xSdW50aW1lRmFy
bUFuaW1hbHMpIHsKKyAgICBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHNQaWdzLAorICAg
IFRlc3RQcm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFsc0Nvd3MsCisgICAgVGVzdFByb3RvY29sUnVu
dGltZUZhcm1BbmltYWxzQ2F0cywKKyAgICBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHNI
ZW5zLAorfTsKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sUnVudGlt
ZVR3b0xlZ2dlZEFuaW1hbHMpIHsKKyAgICBUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5p
bWFsc0R1Y2tzLAorICAgIFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzSGVucywK
KyAgICBUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFsc0Nyb3dzLAorICAgIFRlc3RQ
cm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzRmxhbWluZ29zLAorfTsKKworCisKKworCisK
KworCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlP
YmplY3RzLmg+CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKKworIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9y
dCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRD
b3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8d3RmL0pTT05W
YWx1ZXMuaD4KKworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisK
KyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVz
dFByb3RvY29sLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZl
cnNpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBP
YmpDRW51bVR5cGU+CitPcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhj
b25zdCBTdHJpbmcmIHZhbHVlKTsKKworCitpbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmco
VGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzIHZhbHVlKQoreworICAgIHN3aXRjaCh2YWx1
ZSkgeworICAgIGNhc2UgVGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzUGlnczoKKyAgICAg
ICAgcmV0dXJuICJQaWdzIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sUnVudGltZUZhcm1Bbmlt
YWxzQ293czoKKyAgICAgICAgcmV0dXJuICJDb3dzIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29s
UnVudGltZUZhcm1BbmltYWxzQ2F0czoKKyAgICAgICAgcmV0dXJuICJDYXRzIl9zOworICAgIGNh
c2UgVGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzSGVuczoKKyAgICAgICAgcmV0dXJuICJI
ZW5zIl9zOworICAgIH0KK30KKwordGVtcGxhdGU8PgoraW5saW5lIE9wdGlvbmFsPFRlc3RQcm90
b2NvbFJ1bnRpbWVGYXJtQW5pbWFscz4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYg
dmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09ICJQaWdzIikKKyAgICAgICAgcmV0dXJuIFRlc3RQ
cm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFsc1BpZ3M7CisgICAgaWYgKHZhbHVlID09ICJDb3dzIikK
KyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFsc0Nvd3M7CisgICAg
aWYgKHZhbHVlID09ICJDYXRzIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFJ1bnRpbWVG
YXJtQW5pbWFsc0NhdHM7CisgICAgaWYgKHZhbHVlID09ICJIZW5zIikKKyAgICAgICAgcmV0dXJu
IFRlc3RQcm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFsc0hlbnM7CisgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKK30KKworaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFJ1
bnRpbWVUd29MZWdnZWRBbmltYWxzIHZhbHVlKQoreworICAgIHN3aXRjaCh2YWx1ZSkgeworICAg
IGNhc2UgVGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHNEdWNrczoKKyAgICAgICAg
cmV0dXJuICJEdWNrcyJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRB
bmltYWxzSGVuczoKKyAgICAgICAgcmV0dXJuICJIZW5zIl9zOworICAgIGNhc2UgVGVzdFByb3Rv
Y29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHNDcm93czoKKyAgICAgICAgcmV0dXJuICJDcm93cyJf
czsKKyAgICBjYXNlIFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzRmxhbWluZ29z
OgorICAgICAgICByZXR1cm4gIkZsYW1pbmdvcyJfczsKKyAgICB9Cit9CisKK3RlbXBsYXRlPD4K
K2lubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFscz4gZnJv
bVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09
ICJEdWNrcyIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5p
bWFsc0R1Y2tzOworICAgIGlmICh2YWx1ZSA9PSAiSGVucyIpCisgICAgICAgIHJldHVybiBUZXN0
UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFsc0hlbnM7CisgICAgaWYgKHZhbHVlID09ICJD
cm93cyIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFs
c0Nyb3dzOworICAgIGlmICh2YWx1ZSA9PSAiRmxhbWluZ29zIikKKyAgICAgICAgcmV0dXJuIFRl
c3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzRmxhbWluZ29zOworICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucy5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2Nv
bFR5cGVQYXJzZXIuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmpl
Y3RQcml2YXRlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbnRlcmZhY2Ug
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChSdW50aW1lRG9tYWluKQorCisrICh2b2lkKV9w
YXJzZUZhcm1BbmltYWxzOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5
bG9hZDsKKysgKHZvaWQpX3BhcnNlVHdvTGVnZ2VkQW5pbWFsczooTlNOdW1iZXIgKiopb3V0VmFs
dWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoUnVudGltZURvbWFpbikKKworKyAodm9pZClfcGFy
c2VGYXJtQW5pbWFsczooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxv
YWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmlu
ZyBjbGFzc10pOworICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFscz4g
cmVzdWx0ID0gSW5zcGVjdG9yOjpmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sUnVudGlt
ZUZhcm1BbmltYWxzPihwYXlsb2FkKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9FTlVN
X1ZBTFVFKHJlc3VsdCwgQCJGYXJtQW5pbWFscyIpOworICAgICpvdXRWYWx1ZSA9IEAocmVzdWx0
LnZhbHVlKCkpOworfQorCisrICh2b2lkKV9wYXJzZVR3b0xlZ2dlZEFuaW1hbHM6KE5TTnVtYmVy
ICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKKyAgICBPcHRpb25h
bDxUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFscz4gcmVzdWx0ID0gSW5zcGVjdG9y
Ojpmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHM+
KHBheWxvYWQpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX0VOVU1fVkFMVUUocmVzdWx0
LCBAIlR3b0xlZ2dlZEFuaW1hbHMiKTsKKyAgICAqb3V0VmFsdWUgPSBAKHJlc3VsdC52YWx1ZSgp
KTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVz
dFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0
ZS5oPgorI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVz
Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworCisKKyMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10
eXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbi1yZXN1bHQK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmM5NWI5ZDhjMWY1Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbi1yZXN1bHQKQEAg
LTAsMCArMSwyNDIwIEBACisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRz
LmpzCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1v
YmplY3QtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKy8vIERhdGFiYXNlCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJEYXRhYmFz
ZSIsIG51bGwpOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIkRhdGFiYXNlLk1vdXNl
QnV0dG9uIiwge05vbmU6ICJOb25lIiwgTGVmdDogIkxlZnQiLCBNaWRkbGU6ICJNaWRkbGUiLCBS
aWdodDogIlJpZ2h0In0pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIkRhdGFiYXNl
Lk9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHkiLCB7TFRSOiAiTFRSIiwgUlRM
OiAiUlRMIn0pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIkRhdGFiYXNlLlBhcmFt
ZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5Iiwge0xUUjogIkxUUiIsIFJUTDogIlJUTCJ9KTsKK0lu
c3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkRhdGFiYXNlIiwgbnVsbCk7CisjIyMgRW5k
IEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcworCisjIyMgQmVnaW4gRmlsZTogVGVz
dEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyNpbmNsdWRlICJUZXN0UHJvdG9j
b2xUeXBlcy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0
ZXIuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEFsdGVybmF0ZUJhY2tlbmRE
aXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0
cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIg
PSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9CisgICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmRE
aXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQor
cHJpdmF0ZToKKyAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNo
ZXI7Cit9OworCisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorIyMjIEVuZCBGaWxlOiBUZXN0
QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNr
ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUt
ZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9i
amVjdHMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5z
cGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKKworCit9IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisK
KyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYv
SlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQorI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIK
KyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMj
IEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTog
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3Mg
RnJvbnRlbmRSb3V0ZXI7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxl
OiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBl
LWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RGcm9u
dGVuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JG
cm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNw
YWNlIEluc3BlY3RvciB7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZp
bGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sT2JqZWN0cy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1k
ZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisK
K25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworCisK
Ky8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgorbmFtZXNwYWNlIERhdGFiYXNlIHsKK2NsYXNzIEVy
cm9yOworY2xhc3MgT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU7CitjbGFzcyBQYXJhbWV0ZXJCdW5k
bGU7CitjbGFzcyBPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzOworY2xhc3MgRHVtbXlP
YmplY3Q7CitlbnVtIGNsYXNzIE1vdXNlQnV0dG9uOworfSAvLyBEYXRhYmFzZQorCituYW1lc3Bh
Y2UgVGVzdCB7CitjbGFzcyBQYXJhbWV0ZXJCdW5kbGU7Cit9IC8vIFRlc3QKKy8vIEVuZCBvZiBm
b3J3YXJkIGRlY2xhcmF0aW9ucy4KKworCisvLyBUeXBlZGVmcy4KK25hbWVzcGFjZSBEYXRhYmFz
ZSB7Cit0eXBlZGVmIEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6
OkVycm9yPiBFcnJvckxpc3Q7Cit9IC8vIERhdGFiYXNlCisvLyBFbmQgb2YgdHlwZWRlZnMuCisK
K25hbWVzcGFjZSBUZXN0SGVscGVycyB7CisKK1N0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShp
bnQgY29kZSk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRFbnVtQ29uc3RhbnRW
YWx1ZShUIGVudW1WYWx1ZSkKK3sKKyAgICByZXR1cm4gZ2V0RW51bUNvbnN0YW50VmFsdWUoc3Rh
dGljX2Nhc3Q8aW50PihlbnVtVmFsdWUpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBl
cnMKKworbmFtZXNwYWNlIERhdGFiYXNlIHsKKy8qIERhdGFiYXNlIGVycm9yLiAqLworY2xhc3Mg
RXJyb3IgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CitwdWJsaWM6CisgICAgZW51bSB7Cisg
ICAgICAgIE5vRmllbGRzU2V0ID0gMCwKKyAgICAgICAgTWVzc2FnZVNldCA9IDEgPDwgMCwKKyAg
ICAgICAgQ29kZVNldCA9IDEgPDwgMSwKKyAgICAgICAgQWxsRmllbGRzU2V0ID0gKE1lc3NhZ2VT
ZXQgfCBDb2RlU2V0KQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CisgICAgY2xh
c3MgQnVpbGRlciB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4g
bV9yZXN1bHQ7CisKKyAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBT
VEVQPiYgY2FzdFN0YXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICpyZWludGVy
cHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOworICAgICAgICB9CisKKyAg
ICAgICAgQnVpbGRlcihSZWY8LypFcnJvciovSlNPTjo6T2JqZWN0PiYmIG9iamVjdCkKKyAgICAg
ICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQorICAgICAgICB7CisgICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2lu
X25vbl9pbml0X3N0YXRlKTsKKyAgICAgICAgfQorICAgICAgICBmcmllbmQgY2xhc3MgRXJyb3I7
CisgICAgcHVibGljOgorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNZXNzYWdlU2V0PiYgc2V0
TWVzc2FnZShjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVCghKFNUQVRFICYgTWVzc2FnZVNldCksIHByb3BlcnR5X21lc3NhZ2VfYWxyZWFk
eV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibWVzc2FnZSJfcywgdmFs
dWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNZXNzYWdlU2V0PigpOworICAgICAg
ICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvZGVTZXQ+JiBzZXRDb2RlKGludCB2YWx1
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENvZGVT
ZXQpLCBwcm9wZXJ0eV9jb2RlX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXRJbnRlZ2VyKCJjb2RlIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PENvZGVTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBSZWY8RXJyb3I+IHJlbGVhc2UoKQor
ICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNT
ZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6
ZW9mKEVycm9yKSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0KSwgY2Fubm90X2Nhc3QpOworCisgICAg
ICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uUmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5v
bk51bGwoKTsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gV1RGTW92ZSgqcmVpbnRlcnByZXRf
Y2FzdDxSZWY8RXJyb3I+Kj4oJmpzb25SZXN1bHQpKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyoKKyAgICAgKiBTeW50aGV0aWMgY29uc3Ry
dWN0b3I6CisgICAgICogUmVmPEVycm9yPiByZXN1bHQgPSBFcnJvcjo6Y3JlYXRlKCkKKyAgICAg
KiAgICAgLnNldE1lc3NhZ2UoLi4uKQorICAgICAqICAgICAuc2V0Q29kZSguLi4pCisgICAgICog
ICAgIC5yZWxlYXNlKCk7CisgICAgICovCisgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+
IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKSk7CisgICAgfQorfTsKKworLyogRW51bWVyYXRlcyBkaWZmZXJl
bnQgbW91c2UgYnV0dG9ucyB0aGF0IGNhbiBiZSB1c2VkLiAqLworZW51bSBjbGFzcyBNb3VzZUJ1
dHRvbiB7CisgICAgTm9uZSA9IDAsCisgICAgTGVmdCA9IDEsCisgICAgTWlkZGxlID0gMiwKKyAg
ICBSaWdodCA9IDMsCit9OyAvLyBlbnVtIGNsYXNzIE1vdXNlQnV0dG9uCitjbGFzcyBPcHRpb25h
bFBhcmFtZXRlckJ1bmRsZSA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKK3B1YmxpYzoKKyAg
ICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdkaXJlY3Rpb25hbGl0eScgd2hpbGUgZ2Vu
ZXJhdGluZyBPcHRpb25hbFBhcmFtZXRlckJ1bmRsZS4KKyAgICBlbnVtIGNsYXNzIERpcmVjdGlv
bmFsaXR5IHsKKyAgICAgICAgTFRSID0gNCwKKyAgICAgICAgUlRMID0gNSwKKyAgICB9OyAvLyBl
bnVtIGNsYXNzIERpcmVjdGlvbmFsaXR5CisgICAgZW51bSB7CisgICAgICAgIE5vRmllbGRzU2V0
ID0gMCwKKyAgICAgICAgQWxsRmllbGRzU2V0ID0gMAorICAgIH07CisKKyAgICB0ZW1wbGF0ZTxp
bnQgU1RBVEU+CisgICAgY2xhc3MgQnVpbGRlciB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVm
UHRyPEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7CisKKyAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+
IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMp
OworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcihSZWY8LypPcHRpb25hbFBhcmFtZXRlckJ1
bmRsZSovSlNPTjo6T2JqZWN0PiYmIG9iamVjdCkKKyAgICAgICAgICAgIDogbV9yZXN1bHQoV1RG
TW92ZShvYmplY3QpKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFU
RSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKKyAg
ICAgICAgfQorICAgICAgICBmcmllbmQgY2xhc3MgT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU7Cisg
ICAgcHVibGljOgorCisgICAgICAgIFJlZjxPcHRpb25hbFBhcmFtZXRlckJ1bmRsZT4gcmVsZWFz
ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZp
ZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VS
VChzaXplb2YoT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUpID09IHNpemVvZihKU09OOjpPYmplY3Qp
LCBjYW5ub3RfY2FzdCk7CisKKyAgICAgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25SZXN1
bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOworICAgICAgICAgICAgYXV0byByZXN1bHQg
PSBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxPcHRpb25hbFBhcmFtZXRlckJ1bmRsZT4q
PigmanNvblJlc3VsdCkpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQor
ICAgIH07CisKKyAgICAvKgorICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKKyAgICAgKiBS
ZWY8T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU+IHJlc3VsdCA9IE9wdGlvbmFsUGFyYW1ldGVyQnVu
ZGxlOjpjcmVhdGUoKQorICAgICAqICAgICAucmVsZWFzZSgpOworICAgICAqLworICAgIHN0YXRp
YyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1
aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOworICAgIH0KKworICAg
IHZvaWQgc2V0Q29sdW1uTmFtZXMoUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gdmFsdWUp
CisgICAgeworICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRBcnJheSgiY29sdW1uTmFtZXMi
X3MsIFdURk1vdmUodmFsdWUpKTsKKyAgICB9CisKKyAgICB2b2lkIHNldEJ1dHRvbnMoUmVmUHRy
PEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9u
Pj4gdmFsdWUpCisgICAgeworICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRBcnJheSgiYnV0
dG9ucyJfcywgV1RGTW92ZSh2YWx1ZSkpOworICAgIH0KKworICAgIHZvaWQgc2V0RGlyZWN0aW9u
YWxpdHkoRGlyZWN0aW9uYWxpdHkgdmFsdWUpCisgICAgeworICAgICAgICBKU09OOjpPYmplY3RC
YXNlOjpzZXRTdHJpbmcoImRpcmVjdGlvbmFsaXR5Il9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpU
ZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUodmFsdWUpKTsKKyAgICB9CisKKyAgICB2
b2lkIHNldE5vdGVzKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgeworICAgICAgICBKU09OOjpP
YmplY3RCYXNlOjpzZXRTdHJpbmcoIm5vdGVzIl9zLCB2YWx1ZSk7CisgICAgfQorCisgICAgdm9p
ZCBzZXRUaW1lc3RhbXAoZG91YmxlIHZhbHVlKQorICAgIHsKKyAgICAgICAgSlNPTjo6T2JqZWN0
QmFzZTo6c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIHZhbHVlKTsKKyAgICB9CisKKyAgICB2b2lk
IHNldFZhbHVlcyhSZWZQdHI8SlNPTjo6T2JqZWN0PiB2YWx1ZSkKKyAgICB7CisgICAgICAgIEpT
T046Ok9iamVjdEJhc2U6OnNldE9iamVjdCgidmFsdWVzIl9zLCBXVEZNb3ZlKHZhbHVlKSk7Cisg
ICAgfQorCisgICAgdm9pZCBzZXRQYXlsb2FkKFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWUpCisg
ICAgeworICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRWYWx1ZSgicGF5bG9hZCJfcywgV1RG
TW92ZSh2YWx1ZSkpOworICAgIH0KKworICAgIHZvaWQgc2V0RXJyb3IoUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gdmFsdWUpCisgICAgeworICAgICAgICBKU09O
OjpPYmplY3RCYXNlOjpzZXRPYmplY3QoImVycm9yIl9zLCBXVEZNb3ZlKHZhbHVlKSk7CisgICAg
fQorCisgICAgdm9pZCBzZXRFcnJvckxpc3QoUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpFcnJvckxpc3Q+IHZhbHVlKQorICAgIHsKKyAgICAgICAgSlNPTjo6T2JqZWN0QmFz
ZTo6c2V0QXJyYXkoImVycm9yTGlzdCJfcywgV1RGTW92ZSh2YWx1ZSkpOworICAgIH0KK307CisK
K2NsYXNzIFBhcmFtZXRlckJ1bmRsZSA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKK3B1Ymxp
YzoKKyAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdkaXJlY3Rpb25hbGl0eScgd2hp
bGUgZ2VuZXJhdGluZyBQYXJhbWV0ZXJCdW5kbGUuCisgICAgZW51bSBjbGFzcyBEaXJlY3Rpb25h
bGl0eSB7CisgICAgICAgIExUUiA9IDQsCisgICAgICAgIFJUTCA9IDUsCisgICAgfTsgLy8gZW51
bSBjbGFzcyBEaXJlY3Rpb25hbGl0eQorICAgIGVudW0geworICAgICAgICBOb0ZpZWxkc1NldCA9
IDAsCisgICAgICAgIENvbHVtbk5hbWVzU2V0ID0gMSA8PCAwLAorICAgICAgICBCdXR0b25zU2V0
ID0gMSA8PCAxLAorICAgICAgICBEaXJlY3Rpb25hbGl0eVNldCA9IDEgPDwgMiwKKyAgICAgICAg
Tm90ZXNTZXQgPSAxIDw8IDMsCisgICAgICAgIFRpbWVzdGFtcFNldCA9IDEgPDwgNCwKKyAgICAg
ICAgVmFsdWVzU2V0ID0gMSA8PCA1LAorICAgICAgICBQYXlsb2FkU2V0ID0gMSA8PCA2LAorICAg
ICAgICBFcnJvclNldCA9IDEgPDwgNywKKyAgICAgICAgRXJyb3JMaXN0U2V0ID0gMSA8PCA4LAor
ICAgICAgICBBbGxGaWVsZHNTZXQgPSAoQ29sdW1uTmFtZXNTZXQgfCBCdXR0b25zU2V0IHwgRGly
ZWN0aW9uYWxpdHlTZXQgfCBOb3Rlc1NldCB8IFRpbWVzdGFtcFNldCB8IFZhbHVlc1NldCB8IFBh
eWxvYWRTZXQgfCBFcnJvclNldCB8IEVycm9yTGlzdFNldCkKKyAgICB9OworCisgICAgdGVtcGxh
dGU8aW50IFNUQVRFPgorICAgIGNsYXNzIEJ1aWxkZXIgeworICAgIHByaXZhdGU6CisgICAgICAg
IFJlZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVzdWx0OworCisgICAgICAgIHRlbXBsYXRlPGludCBT
VEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0
aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXIoUmVmPC8qUGFyYW1ldGVyQnVuZGxl
Ki9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQorICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3Zl
KG9iamVjdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09
IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAgICAg
ICB9CisgICAgICAgIGZyaWVuZCBjbGFzcyBQYXJhbWV0ZXJCdW5kbGU7CisgICAgcHVibGljOgor
CisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2x1bW5OYW1lc1NldD4mIHNldENvbHVtbk5hbWVz
KFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IHZhbHVlKQorICAgICAgICB7CisgICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29sdW1uTmFtZXNTZXQpLCBwcm9wZXJ0eV9j
b2x1bW5OYW1lc19hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXko
ImNvbHVtbk5hbWVzIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENv
bHVtbk5hbWVzU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IEJ1
dHRvbnNTZXQ+JiBzZXRCdXR0b25zKFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4+IHZhbHVlKQorICAgICAgICB7CisgICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQnV0dG9uc1NldCksIHByb3BlcnR5X2J1dHRv
bnNfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJidXR0b25z
Il9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEJ1dHRvbnNTZXQ+KCk7
CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRGlyZWN0aW9uYWxpdHlTZXQ+
JiBzZXREaXJlY3Rpb25hbGl0eShEaXJlY3Rpb25hbGl0eSB2YWx1ZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIERpcmVjdGlvbmFsaXR5U2V0KSwgcHJv
cGVydHlfZGlyZWN0aW9uYWxpdHlfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQt
PnNldFN0cmluZygiZGlyZWN0aW9uYWxpdHkiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RI
ZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSh2YWx1ZSkpOworICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxEaXJlY3Rpb25hbGl0eVNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBOb3Rlc1NldD4mIHNldE5vdGVzKGNvbnN0IFN0cmluZyYgdmFsdWUpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBOb3Rlc1NldCks
IHByb3BlcnR5X25vdGVzX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRT
dHJpbmcoIm5vdGVzIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE5v
dGVzU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFRpbWVzdGFt
cFNldD4mIHNldFRpbWVzdGFtcChkb3VibGUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUaW1lc3RhbXBTZXQpLCBwcm9wZXJ0eV90aW1lc3Rh
bXBfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldERvdWJsZSgidGltZXN0
YW1wIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFRpbWVzdGFtcFNl
dD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBWYWx1ZXNTZXQ+JiBz
ZXRWYWx1ZXMoUmVmUHRyPEpTT046Ok9iamVjdD4gdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBWYWx1ZXNTZXQpLCBwcm9wZXJ0eV92YWx1ZXNf
YWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdCgidmFsdWVzIl9z
LCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFZhbHVlc1NldD4oKTsKKyAg
ICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBQYXlsb2FkU2V0PiYgc2V0UGF5bG9h
ZChSZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVCghKFNUQVRFICYgUGF5bG9hZFNldCksIHByb3BlcnR5X3BheWxvYWRfYWxyZWFk
eV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCB2YWx1
ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFBheWxvYWRTZXQ+KCk7CisgICAgICAg
IH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRXJyb3JTZXQ+JiBzZXRFcnJvcihSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiB2YWx1ZSkKKyAgICAgICAgewor
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEVycm9yU2V0KSwgcHJvcGVydHlf
ZXJyb3JfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdCgiZXJy
b3IiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8RXJyb3JTZXQ+KCk7
CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRXJyb3JMaXN0U2V0PiYgc2V0
RXJyb3JMaXN0KFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3JMaXN0
PiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IEVycm9yTGlzdFNldCksIHByb3BlcnR5X2Vycm9yTGlzdF9hbHJlYWR5X3NldCk7CisgICAgICAg
ICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoImVycm9yTGlzdCJfcywgdmFsdWUpOworICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxFcnJvckxpc3RTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAg
ICBSZWY8UGFyYW1ldGVyQnVuZGxlPiByZWxlYXNlKCkKKyAgICAgICAgeworICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5
KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihQYXJhbWV0ZXJCdW5kbGUpID09
IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7CisKKyAgICAgICAgICAgIFJlZjxK
U09OOjpPYmplY3Q+IGpzb25SZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOworICAg
ICAgICAgICAgYXV0byByZXN1bHQgPSBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxQYXJh
bWV0ZXJCdW5kbGU+Kj4oJmpzb25SZXN1bHQpKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyoKKyAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0
b3I6CisgICAgICogUmVmPFBhcmFtZXRlckJ1bmRsZT4gcmVzdWx0ID0gUGFyYW1ldGVyQnVuZGxl
OjpjcmVhdGUoKQorICAgICAqICAgICAuc2V0Q29sdW1uTmFtZXMoLi4uKQorICAgICAqICAgICAu
c2V0QnV0dG9ucyguLi4pCisgICAgICogICAgIC5zZXREaXJlY3Rpb25hbGl0eSguLi4pCisgICAg
ICogICAgIC5zZXROb3RlcyguLi4pCisgICAgICogICAgIC5zZXRUaW1lc3RhbXAoLi4uKQorICAg
ICAqICAgICAuc2V0VmFsdWVzKC4uLikKKyAgICAgKiAgICAgLnNldFBheWxvYWQoLi4uKQorICAg
ICAqICAgICAuc2V0RXJyb3IoLi4uKQorICAgICAqICAgICAuc2V0RXJyb3JMaXN0KC4uLikKKyAg
ICAgKiAgICAgLnJlbGVhc2UoKTsKKyAgICAgKi8KKyAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxk
c1NldD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0
PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICB9Cit9OworCisvKiBDb25mbGljdGVkIG5h
bWVzIG1heSBjYXVzZSBnZW5lcmF0ZWQgZ2V0dGVycy9zZXR0ZXJzIHRvIGNsYXNoIHdpdGggYnVp
bHQtaW4gSW5zcGVjdG9yT2JqZWN0IG1ldGhvZHMuICovCitjbGFzcyBPYmplY3RXaXRoUHJvcGVy
dHlOYW1lQ29uZmxpY3RzIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgeworcHVibGljOgorICAg
IGVudW0geworICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCisgICAgICAgIEludGVnZXJTZXQgPSAx
IDw8IDAsCisgICAgICAgIEFycmF5U2V0ID0gMSA8PCAxLAorICAgICAgICBTdHJpbmdTZXQgPSAx
IDw8IDIsCisgICAgICAgIFZhbHVlU2V0ID0gMSA8PCAzLAorICAgICAgICBPYmplY3RTZXQgPSAx
IDw8IDQsCisgICAgICAgIEFsbEZpZWxkc1NldCA9IChJbnRlZ2VyU2V0IHwgQXJyYXlTZXQgfCBT
dHJpbmdTZXQgfCBWYWx1ZVNldCB8IE9iamVjdFNldCkKKyAgICB9OworCisgICAgdGVtcGxhdGU8
aW50IFNUQVRFPgorICAgIGNsYXNzIEJ1aWxkZXIgeworICAgIHByaXZhdGU6CisgICAgICAgIFJl
ZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVzdWx0OworCisgICAgICAgIHRlbXBsYXRlPGludCBTVEVQ
PiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlz
KTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXIoUmVmPC8qT2JqZWN0V2l0aFByb3BlcnR5
TmFtZUNvbmZsaWN0cyovSlNPTjo6T2JqZWN0PiYmIG9iamVjdCkKKyAgICAgICAgICAgIDogbV9y
ZXN1bHQoV1RGTW92ZShvYmplY3QpKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FT
U0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0
YXRlKTsKKyAgICAgICAgfQorICAgICAgICBmcmllbmQgY2xhc3MgT2JqZWN0V2l0aFByb3BlcnR5
TmFtZUNvbmZsaWN0czsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IElu
dGVnZXJTZXQ+JiBzZXRJbnRlZ2VyKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBJbnRlZ2VyU2V0KSwgcHJvcGVydHlf
aW50ZWdlcl9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJp
bnRlZ2VyIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEludGVnZXJT
ZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQXJyYXlTZXQ+JiBz
ZXRBcnJheShjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVCghKFNUQVRFICYgQXJyYXlTZXQpLCBwcm9wZXJ0eV9hcnJheV9hbHJlYWR5X3Nl
dCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJhcnJheSJfcywgdmFsdWUpOwor
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxBcnJheVNldD4oKTsKKyAgICAgICAgfQorCisg
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTdHJpbmdTZXQ+JiBzZXRTdHJpbmcoY29uc3QgU3RyaW5n
JiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IFN0cmluZ1NldCksIHByb3BlcnR5X3N0cmluZ19hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0U3RyaW5nKCJzdHJpbmciX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVy
biBjYXN0U3RhdGU8U3RyaW5nU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxT
VEFURSB8IFZhbHVlU2V0PiYgc2V0VmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAg
eworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFZhbHVlU2V0KSwgcHJvcGVy
dHlfdmFsdWVfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygi
dmFsdWUiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VmFsdWVTZXQ+
KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgT2JqZWN0U2V0PiYgc2V0
T2JqZWN0KGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBPYmplY3RTZXQpLCBwcm9wZXJ0eV9vYmplY3RfYWxyZWFkeV9z
ZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygib2JqZWN0Il9zLCB2YWx1ZSk7
CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE9iamVjdFNldD4oKTsKKyAgICAgICAgfQor
CisgICAgICAgIFJlZjxPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzPiByZWxlYXNlKCkK
KyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRz
U2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNp
emVvZihPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzKSA9PSBzaXplb2YoSlNPTjo6T2Jq
ZWN0KSwgY2Fubm90X2Nhc3QpOworCisgICAgICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29u
UmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKKyAgICAgICAgICAgIGF1dG8gcmVz
dWx0ID0gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8T2JqZWN0V2l0aFByb3BlcnR5TmFt
ZUNvbmZsaWN0cz4qPigmanNvblJlc3VsdCkpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICAgICAgfQorICAgIH07CisKKyAgICAvKgorICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3Rv
cjoKKyAgICAgKiBSZWY8T2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cz4gcmVzdWx0ID0g
T2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0czo6Y3JlYXRlKCkKKyAgICAgKiAgICAgLnNl
dEludGVnZXIoLi4uKQorICAgICAqICAgICAuc2V0QXJyYXkoLi4uKQorICAgICAqICAgICAuc2V0
U3RyaW5nKC4uLikKKyAgICAgKiAgICAgLnNldFZhbHVlKC4uLikKKyAgICAgKiAgICAgLnNldE9i
amVjdCguLi4pCisgICAgICogICAgIC5yZWxlYXNlKCk7CisgICAgICovCisgICAgc3RhdGljIEJ1
aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gQnVpbGRl
cjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7CisgICAgfQorfTsKKworfSAv
LyBEYXRhYmFzZQorCituYW1lc3BhY2UgVGVzdCB7CitjbGFzcyBQYXJhbWV0ZXJCdW5kbGUgOiBw
dWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CitwdWJsaWM6CisgICAgLy8gTmFtZWQgYWZ0ZXIgcHJv
cGVydHkgbmFtZSAnZGlyZWN0aW9uYWxpdHknIHdoaWxlIGdlbmVyYXRpbmcgUGFyYW1ldGVyQnVu
ZGxlLgorICAgIGVudW0gY2xhc3MgRGlyZWN0aW9uYWxpdHkgeworICAgICAgICBMVFIgPSA0LAor
ICAgICAgICBSVEwgPSA1LAorICAgIH07IC8vIGVudW0gY2xhc3MgRGlyZWN0aW9uYWxpdHkKKyAg
ICBlbnVtIHsKKyAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAorICAgICAgICBEaXJlY3Rpb25hbGl0
eVNldCA9IDEgPDwgMCwKKyAgICAgICAgQnV0dG9uc1NldCA9IDEgPDwgMSwKKyAgICAgICAgQ29s
dW1uTmFtZXNTZXQgPSAxIDw8IDIsCisgICAgICAgIE5vdGVzU2V0ID0gMSA8PCAzLAorICAgICAg
ICBUaW1lc3RhbXBTZXQgPSAxIDw8IDQsCisgICAgICAgIFZhbHVlc1NldCA9IDEgPDwgNSwKKyAg
ICAgICAgUGF5bG9hZFNldCA9IDEgPDwgNiwKKyAgICAgICAgRXJyb3JTZXQgPSAxIDw8IDcsCisg
ICAgICAgIEFsbEZpZWxkc1NldCA9IChEaXJlY3Rpb25hbGl0eVNldCB8IEJ1dHRvbnNTZXQgfCBD
b2x1bW5OYW1lc1NldCB8IE5vdGVzU2V0IHwgVGltZXN0YW1wU2V0IHwgVmFsdWVzU2V0IHwgUGF5
bG9hZFNldCB8IEVycm9yU2V0KQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+Cisg
ICAgY2xhc3MgQnVpbGRlciB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPEpTT046Ok9i
amVjdD4gbV9yZXN1bHQ7CisKKyAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RB
VEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICpy
ZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOworICAgICAgICB9
CisKKyAgICAgICAgQnVpbGRlcihSZWY8LypQYXJhbWV0ZXJCdW5kbGUqL0pTT046Ok9iamVjdD4m
JiBvYmplY3QpCisgICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKKyAgICAg
ICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1
aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CisgICAgICAgIH0KKyAgICAgICAgZnJp
ZW5kIGNsYXNzIFBhcmFtZXRlckJ1bmRsZTsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgQnVpbGRl
cjxTVEFURSB8IERpcmVjdGlvbmFsaXR5U2V0PiYgc2V0RGlyZWN0aW9uYWxpdHkoRGlyZWN0aW9u
YWxpdHkgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBEaXJlY3Rpb25hbGl0eVNldCksIHByb3BlcnR5X2RpcmVjdGlvbmFsaXR5X2FscmVhZHlf
c2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImRpcmVjdGlvbmFsaXR5Il9z
LCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUo
dmFsdWUpKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8RGlyZWN0aW9uYWxpdHlTZXQ+
KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQnV0dG9uc1NldD4mIHNl
dEJ1dHRvbnMoUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6Ok1vdXNlQnV0dG9uPj4gdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKCEoU1RBVEUgJiBCdXR0b25zU2V0KSwgcHJvcGVydHlfYnV0dG9uc19hbHJlYWR5X3Nl
dCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoImJ1dHRvbnMiX3MsIHZhbHVlKTsK
KyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8QnV0dG9uc1NldD4oKTsKKyAgICAgICAgfQor
CisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2x1bW5OYW1lc1NldD4mIHNldENvbHVtbk5hbWVz
KFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IHZhbHVlKQorICAgICAgICB7CisgICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29sdW1uTmFtZXNTZXQpLCBwcm9wZXJ0eV9j
b2x1bW5OYW1lc19hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXko
ImNvbHVtbk5hbWVzIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENv
bHVtbk5hbWVzU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IE5v
dGVzU2V0PiYgc2V0Tm90ZXMoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgeworICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE5vdGVzU2V0KSwgcHJvcGVydHlfbm90ZXNf
YWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibm90ZXMiX3Ms
IHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Tm90ZXNTZXQ+KCk7CisgICAg
ICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVGltZXN0YW1wU2V0PiYgc2V0VGltZXN0
YW1wKGRvdWJsZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
IShTVEFURSAmIFRpbWVzdGFtcFNldCksIHByb3BlcnR5X3RpbWVzdGFtcF9hbHJlYWR5X3NldCk7
CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIHZhbHVlKTsK
KyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VGltZXN0YW1wU2V0PigpOworICAgICAgICB9
CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFZhbHVlc1NldD4mIHNldFZhbHVlcyhSZWZQdHI8
SlNPTjo6T2JqZWN0PiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIFZhbHVlc1NldCksIHByb3BlcnR5X3ZhbHVlc19hbHJlYWR5X3NldCk7Cisg
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIHZhbHVlKTsKKyAgICAg
ICAgICAgIHJldHVybiBjYXN0U3RhdGU8VmFsdWVzU2V0PigpOworICAgICAgICB9CisKKyAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IFBheWxvYWRTZXQ+JiBzZXRQYXlsb2FkKFJlZlB0cjxKU09OOjpW
YWx1ZT4gdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBQYXlsb2FkU2V0KSwgcHJvcGVydHlfcGF5bG9hZF9hbHJlYWR5X3NldCk7CisgICAgICAg
ICAgICBtX3Jlc3VsdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIHZhbHVlKTsKKyAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8UGF5bG9hZFNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBFcnJvclNldD4mIHNldEVycm9yKFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEYXRhYmFzZTo6RXJyb3I+IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVCghKFNUQVRFICYgRXJyb3JTZXQpLCBwcm9wZXJ0eV9lcnJvcl9hbHJlYWR5X3Nl
dCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJlcnJvciJfcywgdmFsdWUpOwor
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxFcnJvclNldD4oKTsKKyAgICAgICAgfQorCisg
ICAgICAgIFJlZjxQYXJhbWV0ZXJCdW5kbGU+IHJlbGVhc2UoKQorICAgICAgICB7CisgICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3Rf
cmVhZHkpOworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFBhcmFtZXRlckJ1bmRs
ZSkgPT0gc2l6ZW9mKEpTT046Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsKKworICAgICAgICAgICAg
UmVmPEpTT046Ok9iamVjdD4ganNvblJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7
CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVm
PFBhcmFtZXRlckJ1bmRsZT4qPigmanNvblJlc3VsdCkpOworICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvKgorICAgICAqIFN5bnRoZXRpYyBjb25z
dHJ1Y3RvcjoKKyAgICAgKiBSZWY8UGFyYW1ldGVyQnVuZGxlPiByZXN1bHQgPSBQYXJhbWV0ZXJC
dW5kbGU6OmNyZWF0ZSgpCisgICAgICogICAgIC5zZXREaXJlY3Rpb25hbGl0eSguLi4pCisgICAg
ICogICAgIC5zZXRCdXR0b25zKC4uLikKKyAgICAgKiAgICAgLnNldENvbHVtbk5hbWVzKC4uLikK
KyAgICAgKiAgICAgLnNldE5vdGVzKC4uLikKKyAgICAgKiAgICAgLnNldFRpbWVzdGFtcCguLi4p
CisgICAgICogICAgIC5zZXRWYWx1ZXMoLi4uKQorICAgICAqICAgICAuc2V0UGF5bG9hZCguLi4p
CisgICAgICogICAgIC5zZXRFcnJvciguLi4pCisgICAgICogICAgIC5yZWxlYXNlKCk7CisgICAg
ICovCisgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCisgICAgeworICAg
ICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7
CisgICAgfQorfTsKKworfSAvLyBUZXN0CisKKworCituYW1lc3BhY2UgVGVzdEhlbHBlcnMgewor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBQcm90b2NvbEVudW1UeXBlPgorT3B0aW9uYWw8UHJvdG9jb2xF
bnVtVHlwZT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYpOworCisvLyBF
bnVtcyBpbiB0aGUgJ0RhdGFiYXNlJyBEb21haW4KK3RlbXBsYXRlPD4KK09wdGlvbmFsPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4gcGFyc2VFbnVtVmFsdWVGcm9t
U3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4oY29uc3Qg
U3RyaW5nJik7Cit0ZW1wbGF0ZTw+CitPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5PiBwYXJzZUVudW1W
YWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok9wdGlvbmFsUGFy
YW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4oY29uc3QgU3RyaW5nJik7Cit0ZW1wbGF0ZTw+
CitPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UGFyYW1ldGVyQnVuZGxl
OjpEaXJlY3Rpb25hbGl0eT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5Pihjb25zdCBT
dHJpbmcmKTsKKworLy8gRW51bXMgaW4gdGhlICdUZXN0JyBEb21haW4KK3RlbXBsYXRlPD4KK09w
dGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0
aW9uYWxpdHk+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpU
ZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5Pihjb25zdCBTdHJpbmcmKTsKKwor
fSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKwor
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7CisKKy8vIEhhc2ggZGVjbGFyYXRpb25zIGlu
IHRoZSAnRGF0YWJhc2UnIERvbWFpbgordGVtcGxhdGU8Pgorc3RydWN0IERlZmF1bHRIYXNoPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4geworICAgIHR5cGVkZWYg
SW50SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b24+IEhhc2g7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2Jq
ZWN0cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUu
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorCisjaW5jbHVk
ZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1l
c3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworbmFtZXNwYWNlIFRl
c3RIZWxwZXJzIHsKKworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFs
dWVzW10gPSB7CisgICAgIk5vbmUiLAorICAgICJMZWZ0IiwKKyAgICAiTWlkZGxlIiwKKyAgICAi
UmlnaHQiLAorICAgICJMVFIiLAorICAgICJSVEwiLAorfTsKKworU3RyaW5nIGdldEVudW1Db25z
dGFudFZhbHVlKGludCBjb2RlKSB7CisgICAgcmV0dXJuIGVudW1fY29uc3RhbnRfdmFsdWVzW2Nv
ZGVdOworfQorCisvLyBFbnVtcyBpbiB0aGUgJ0RhdGFiYXNlJyBEb21haW4KK3RlbXBsYXRlPD4K
K09wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4gcGFy
c2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3Vz
ZUJ1dHRvbj4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKK3sKKyAgICBzdGF0aWMgY29u
c3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7CisgICAgICAgIChzaXplX3QpSW5zcGVjdG9y
OjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uOjpOb25lLAorICAgICAgICAoc2l6ZV90
KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbjo6TGVmdCwKKyAgICAg
ICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b246Ok1p
ZGRsZSwKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6TW91
c2VCdXR0b246OlJpZ2h0LAorICAgIH07CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCA0OyAr
K2kpCisgICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tj
b25zdGFudFZhbHVlc1tpXV0pCisgICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbiljb25zdGFudFZhbHVlc1tpXTsKKworICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7Cit9CisKK3RlbXBsYXRlPD4KK09wdGlvbmFsPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+
IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6
T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5Pihjb25zdCBTdHJpbmcmIHBy
b3RvY29sU3RyaW5nKQoreworICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3RhbnRWYWx1ZXNb
XSA9IHsKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6T3B0
aW9uYWxQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5OjpMVFIsCisgICAgICAgIChzaXpl
X3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok9wdGlvbmFsUGFyYW1ldGVyQnVuZGxl
OjpEaXJlY3Rpb25hbGl0eTo6UlRMLAorICAgIH07CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCAyOyArK2kpCisgICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3Zh
bHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCisgICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRhdGFiYXNlOjpPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxp
dHkpY29uc3RhbnRWYWx1ZXNbaV07CisKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCit0
ZW1wbGF0ZTw+CitPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UGFyYW1l
dGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5
Pihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQoreworICAgIHN0YXRpYyBjb25zdCBzaXpl
X3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEYXRhYmFzZTo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eTo6TFRSLAorICAg
ICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQYXJhbWV0ZXJCdW5k
bGU6OkRpcmVjdGlvbmFsaXR5OjpSVEwsCisgICAgfTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IDI7ICsraSkKKyAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRf
dmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKKyAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9y
OjpQcm90b2NvbDo6RGF0YWJhc2U6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHkpY29u
c3RhbnRWYWx1ZXNbaV07CisKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCisKKy8vIEVu
dW1zIGluIHRoZSAnVGVzdCcgRG9tYWluCit0ZW1wbGF0ZTw+CitPcHRpb25hbDxJbnNwZWN0b3I6
OlByb3RvY29sOjpUZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5PiBwYXJzZUVu
dW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UGFyYW1ldGVyQnVu
ZGxlOjpEaXJlY3Rpb25hbGl0eT4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKK3sKKyAg
ICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7CisgICAgICAgIChzaXpl
X3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25h
bGl0eTo6TFRSLAorICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlBh
cmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk6OlJUTCwKKyAgICB9OworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgMjsgKytpKQorICAgICAgICBpZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51
bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNbaV1dKQorICAgICAgICAgICAgcmV0dXJu
IChJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFs
aXR5KWNvbnN0YW50VmFsdWVzW2ldOworCisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKwor
Cit9IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycworCisKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9j
b2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sT2JqZWN0cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNw
YXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJh
dGlvbi1vYmplY3QtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKKworCituYW1l
c3BhY2UgSW5zcGVjdG9yIHsKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgor
I2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0
b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24uaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUt
ZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+CisK
K19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0
UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sQ29uZmlndXJhdGlvbi5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5
cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgi
CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9j
b2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0
ZURpc3BhdGNoYWJsZUFnZW50Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJs
ZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0
b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCit7CisgICAg
QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKK30KKworLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9s
bGVyKiljb250cm9sbGVyCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNl
bGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9j
b250cm9sbGVyID0gY29udHJvbGxlcjsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClk
ZWFsbG9jCit7CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCitAZW5kCisKKworIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFs
LmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8
d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisjIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlw
ZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCisj
aW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+CisKKworQGNsYXNz
IFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I7CitAY2xhc3MgVGVzdFByb3RvY29sRGF0YWJhc2VP
cHRpb25hbFBhcmFtZXRlckJ1bmRsZTsKK0BjbGFzcyBUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFt
ZXRlckJ1bmRsZTsKK0BjbGFzcyBUZXN0UHJvdG9jb2xEYXRhYmFzZU9iamVjdFdpdGhQcm9wZXJ0
eU5hbWVDb25mbGljdHM7CitAY2xhc3MgVGVzdFByb3RvY29sRGF0YWJhc2VEdW1teU9iamVjdDsK
K0BjbGFzcyBUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlOworCisKK3R5cGVkZWYgTlNf
RU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VCdXR0b24pIHsKKyAgICBU
ZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9uTm9uZSwKKyAgICBUZXN0UHJvdG9jb2xEYXRh
YmFzZU1vdXNlQnV0dG9uTGVmdCwKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9u
TWlkZGxlLAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VCdXR0b25SaWdodCwKK307CisK
K3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQ
YXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSkgeworICAgIFRlc3RQcm90b2NvbERhdGFiYXNl
T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eUxUUiwKKyAgICBUZXN0UHJvdG9j
b2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHlSVEwsCit9Owor
Cit0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRl
ckJ1bmRsZURpcmVjdGlvbmFsaXR5KSB7CisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0
ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eUxUUiwKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFt
ZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5UlRMLAorfTsKKwordHlwZWRlZiBOU19FTlVNKE5TSW50
ZWdlciwgVGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5KSB7Cisg
ICAgVGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5TFRSLAorICAg
IFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eVJUTCwKK307CisK
KworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRl
c3RQcm90b2NvbERhdGFiYXNlRXJyb3IgOiBSV0lQcm90b2NvbEpTT05PYmplY3QKKy0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilw
YXlsb2FkOworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3Rv
Y29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhNZXNz
YWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZTooaW50KWNvZGU7CisvKiByZXF1aXJlZCAqLyBA
cHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKm1lc3NhZ2U7CisvKiByZXF1aXJl
ZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQgY29kZTsKK0BlbmQKKworX19h
dHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90
b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUgOiBSV0lQcm90b2NvbEpTT05PYmpl
Y3QKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmlu
ZyAqLCBpZD4gKilwYXlsb2FkOworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmpl
Y3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7CisvKiBvcHRpb25hbCAqLyBA
cHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNBcnJheS8qPE5TU3RyaW5nPiovICpjb2x1bW5O
YW1lczsKKy8qIG9wdGlvbmFsICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU0FycmF5
Lyo8TlNTdHJpbmc+Ki8gKmJ1dHRvbnM7CisvKiBvcHRpb25hbCAqLyBAcHJvcGVydHkgKG5vbmF0
b21pYywgYXNzaWduKSBUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxl
RGlyZWN0aW9uYWxpdHkgZGlyZWN0aW9uYWxpdHk7CisvKiBvcHRpb25hbCAqLyBAcHJvcGVydHkg
KG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKm5vdGVzOworLyogb3B0aW9uYWwgKi8gQHByb3Bl
cnR5IChub25hdG9taWMsIGFzc2lnbikgZG91YmxlIHRpbWVzdGFtcDsKKy8qIG9wdGlvbmFsICov
IEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIFJXSVByb3RvY29sSlNPTk9iamVjdCAqdmFs
dWVzOworLyogb3B0aW9uYWwgKi8gQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgUldJUHJv
dG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkOworLyogb3B0aW9uYWwgKi8gQHByb3BlcnR5IChub25h
dG9taWMsIHJldGFpbikgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqZXJyb3I7CisvKiBvcHRp
b25hbCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNBcnJheS8qPFRlc3RQcm90b2Nv
bERhdGFiYXNlRXJyb3I+Ki8gKmVycm9yTGlzdDsKK0BlbmQKKworX19hdHRyaWJ1dGVfXygodmlz
aWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbERhdGFiYXNlUGFy
YW1ldGVyQnVuZGxlIDogUldJUHJvdG9jb2xKU09OT2JqZWN0CistIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKKy0g
KGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmpl
Y3QgKilqc29uT2JqZWN0OworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29sdW1uTmFtZXM6KE5T
QXJyYXkvKjxOU1N0cmluZz4qLyAqKWNvbHVtbk5hbWVzIGJ1dHRvbnM6KE5TQXJyYXkvKjxOU1N0
cmluZz4qLyAqKWJ1dHRvbnMgZGlyZWN0aW9uYWxpdHk6KFRlc3RQcm90b2NvbERhdGFiYXNlUGFy
YW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHkpZGlyZWN0aW9uYWxpdHkgbm90ZXM6KE5TU3RyaW5n
ICopbm90ZXMgdGltZXN0YW1wOihkb3VibGUpdGltZXN0YW1wIHZhbHVlczooUldJUHJvdG9jb2xK
U09OT2JqZWN0ICopdmFsdWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxv
YWQgZXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKillcnJvciBlcnJvckxpc3Q6KE5T
QXJyYXkvKjxUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yPiovICopZXJyb3JMaXN0OworLyogcmVx
dWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TQXJyYXkvKjxOU1N0cmluZz4q
LyAqY29sdW1uTmFtZXM7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29w
eSkgTlNBcnJheS8qPE5TU3RyaW5nPiovICpidXR0b25zOworLyogcmVxdWlyZWQgKi8gQHByb3Bl
cnR5IChub25hdG9taWMsIGFzc2lnbikgVGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5k
bGVEaXJlY3Rpb25hbGl0eSBkaXJlY3Rpb25hbGl0eTsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0
eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqbm90ZXM7CisvKiByZXF1aXJlZCAqLyBAcHJv
cGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBkb3VibGUgdGltZXN0YW1wOworLyogcmVxdWlyZWQg
Ki8gQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgUldJUHJvdG9jb2xKU09OT2JqZWN0ICp2
YWx1ZXM7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluKSBSV0lQ
cm90b2NvbEpTT05PYmplY3QgKnBheWxvYWQ7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5v
bmF0b21pYywgcmV0YWluKSBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICplcnJvcjsKKy8qIHJl
cXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU0FycmF5Lyo8VGVzdFByb3Rv
Y29sRGF0YWJhc2VFcnJvcj4qLyAqZXJyb3JMaXN0OworQGVuZAorCitfX2F0dHJpYnV0ZV9fKCh2
aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sRGF0YWJhc2VP
YmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzIDogUldJUHJvdG9jb2xKU09OT2JqZWN0Cist
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwg
aWQ+ICopcGF5bG9hZDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihS
V0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OworLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoSW50ZWdlcjooTlNTdHJpbmcgKilpbnRlZ2VyIGFycmF5OihOU1N0cmluZyAqKWFycmF5IHN0
cmluZzooTlNTdHJpbmcgKilzdHJpbmcgdmFsdWU6KE5TU3RyaW5nICopdmFsdWUgb2JqZWN0OihO
U1N0cmluZyAqKW9iamVjdDsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBj
b3B5KSBOU1N0cmluZyAqaW50ZWdlcjsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRv
bWljLCBjb3B5KSBOU1N0cmluZyAqYXJyYXk7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5v
bmF0b21pYywgY29weSkgTlNTdHJpbmcgKnN0cmluZzsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0
eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqdmFsdWU7CisvKiByZXF1aXJlZCAqLyBAcHJv
cGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKm9iamVjdDsKK0BlbmQKKworX19hdHRy
aWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2Nv
bERhdGFiYXNlRHVtbXlPYmplY3QgOiBSV0lQcm90b2NvbEpTT05PYmplY3QKKy0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXls
b2FkOworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29s
SlNPTk9iamVjdCAqKWpzb25PYmplY3Q7CitAZW5kCisKK19fYXR0cmlidXRlX18oKHZpc2liaWxp
dHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVu
ZGxlIDogUldJUHJvdG9jb2xKU09OT2JqZWN0CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXls
b2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKKy0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29u
T2JqZWN0OworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRGlyZWN0aW9uYWxpdHk6KFRlc3RQcm90
b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSlkaXJlY3Rpb25hbGl0eSBidXR0
b25zOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilidXR0b25zIGNvbHVtbk5hbWVzOihOU0FycmF5
Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcyBub3RlczooTlNTdHJpbmcgKilub3RlcyB0aW1l
c3RhbXA6KGRvdWJsZSl0aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKil2
YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZCBlcnJvcjooVGVz
dFByb3RvY29sRGF0YWJhc2VFcnJvciAqKWVycm9yOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5
IChub25hdG9taWMsIGFzc2lnbikgVGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZURpcmVj
dGlvbmFsaXR5IGRpcmVjdGlvbmFsaXR5OworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25h
dG9taWMsIGNvcHkpIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqYnV0dG9uczsKKy8qIHJlcXVpcmVk
ICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmNv
bHVtbk5hbWVzOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5T
U3RyaW5nICpub3RlczsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3Np
Z24pIGRvdWJsZSB0aW1lc3RhbXA7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21p
YywgcmV0YWluKSBSV0lQcm90b2NvbEpTT05PYmplY3QgKnZhbHVlczsKKy8qIHJlcXVpcmVkICov
IEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5
bG9hZDsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIFRlc3RQ
cm90b2NvbERhdGFiYXNlRXJyb3IgKmVycm9yOworQGVuZAorCisKKworCisKKworI2ltcG9ydCA8
V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgorCisj
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xJbnRlcm5hbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNs
YXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3Rv
Y29sSlNPTk9iamVjdFByaXZhdGUuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRh
YmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwor
CisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wu
aCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4K
KworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlw
ZT4KK09wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpOworCisKK2lubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9j
b2xEYXRhYmFzZU1vdXNlQnV0dG9uIHZhbHVlKQoreworICAgIHN3aXRjaCh2YWx1ZSkgeworICAg
IGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VNb3VzZUJ1dHRvbk5vbmU6CisgICAgICAgIHJldHVy
biAiTm9uZSJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VCdXR0b25MZWZ0
OgorICAgICAgICByZXR1cm4gIkxlZnQiX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFz
ZU1vdXNlQnV0dG9uTWlkZGxlOgorICAgICAgICByZXR1cm4gIk1pZGRsZSJfczsKKyAgICBjYXNl
IFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VCdXR0b25SaWdodDoKKyAgICAgICAgcmV0dXJuICJS
aWdodCJfczsKKyAgICB9Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBPcHRpb25hbDxUZXN0UHJv
dG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9uPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5n
JiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gIk5vbmUiKQorICAgICAgICByZXR1cm4gVGVz
dFByb3RvY29sRGF0YWJhc2VNb3VzZUJ1dHRvbk5vbmU7CisgICAgaWYgKHZhbHVlID09ICJMZWZ0
IikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VCdXR0b25MZWZ0Owor
ICAgIGlmICh2YWx1ZSA9PSAiTWlkZGxlIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERh
dGFiYXNlTW91c2VCdXR0b25NaWRkbGU7CisgICAgaWYgKHZhbHVlID09ICJSaWdodCIpCisgICAg
ICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9uUmlnaHQ7CisgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKK30KKworaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRl
c3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSB2
YWx1ZSkKK3sKKyAgICBzd2l0Y2godmFsdWUpIHsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFi
YXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eUxUUjoKKyAgICAgICAgcmV0
dXJuICJMVFIiX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1l
dGVyQnVuZGxlRGlyZWN0aW9uYWxpdHlSVEw6CisgICAgICAgIHJldHVybiAiUlRMIl9zOworICAg
IH0KK30KKwordGVtcGxhdGU8PgoraW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNl
T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eT4gZnJvbVByb3RvY29sU3RyaW5n
KGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09ICJMVFIiKQorICAgICAg
ICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZURpcmVj
dGlvbmFsaXR5TFRSOworICAgIGlmICh2YWx1ZSA9PSAiUlRMIikKKyAgICAgICAgcmV0dXJuIFRl
c3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eVJU
TDsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCitpbmxpbmUgU3RyaW5nIHRvUHJvdG9j
b2xTdHJpbmcoVGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0
eSB2YWx1ZSkKK3sKKyAgICBzd2l0Y2godmFsdWUpIHsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERh
dGFiYXNlUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHlMVFI6CisgICAgICAgIHJldHVybiAi
TFRSIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJl
Y3Rpb25hbGl0eVJUTDoKKyAgICAgICAgcmV0dXJuICJSVEwiX3M7CisgICAgfQorfQorCit0ZW1w
bGF0ZTw+CitpbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5k
bGVEaXJlY3Rpb25hbGl0eT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUp
Cit7CisgICAgaWYgKHZhbHVlID09ICJMVFIiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29s
RGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eUxUUjsKKyAgICBpZiAodmFsdWUg
PT0gIlJUTCIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1
bmRsZURpcmVjdGlvbmFsaXR5UlRMOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKKwor
aW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJC
dW5kbGVEaXJlY3Rpb25hbGl0eSB2YWx1ZSkKK3sKKyAgICBzd2l0Y2godmFsdWUpIHsKKyAgICBj
YXNlIFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eUxUUjoKKyAg
ICAgICAgcmV0dXJuICJMVFIiX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVy
QnVuZGxlRGlyZWN0aW9uYWxpdHlSVEw6CisgICAgICAgIHJldHVybiAiUlRMIl9zOworICAgIH0K
K30KKwordGVtcGxhdGU8PgoraW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0
ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYg
dmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09ICJMVFIiKQorICAgICAgICByZXR1cm4gVGVzdFBy
b3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5TFRSOworICAgIGlmICh2YWx1
ZSA9PSAiUlRMIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5k
bGVEaXJlY3Rpb25hbGl0eVJUTDsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
Lm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1v
YmplY3QtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorCisjaW1wb3J0ICJU
ZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKKyNpbXBv
cnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisKK3VzaW5n
IG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zIChEYXRhYmFzZURvbWFpbikKKworKyAodm9pZClfcGFyc2VFcnJvcjooVGVzdFByb3Rv
Y29sRGF0YWJhc2VFcnJvciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysg
KHZvaWQpX3BhcnNlRXJyb3JMaXN0OihOU0FycmF5Lyo8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJv
cj4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNl
TW91c2VCdXR0b246KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2Fk
OworKyAodm9pZClfcGFyc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTooVGVzdFByb3RvY29sRGF0
YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZSAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQp
cGF5bG9hZDsKKysgKHZvaWQpX3BhcnNlUGFyYW1ldGVyQnVuZGxlOihUZXN0UHJvdG9jb2xEYXRh
YmFzZVBhcmFtZXRlckJ1bmRsZSAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsK
KysgKHZvaWQpX3BhcnNlT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0czooVGVzdFByb3Rv
Y29sRGF0YWJhc2VPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzICoqKW91dFZhbHVlIGZy
b21QYXlsb2FkOihpZClwYXlsb2FkOworKyAodm9pZClfcGFyc2VEdW1teU9iamVjdDooVGVzdFBy
b3RvY29sRGF0YWJhc2VEdW1teU9iamVjdCAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5
bG9hZDsKKworQGVuZAorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFRl
c3REb21haW4pCisKKysgKHZvaWQpX3BhcnNlUGFyYW1ldGVyQnVuZGxlOihUZXN0UHJvdG9jb2xU
ZXN0UGFyYW1ldGVyQnVuZGxlICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwor
CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKERh
dGFiYXNlRG9tYWluKQorCisrICh2b2lkKV9wYXJzZUVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFz
ZUVycm9yICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1df
RVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7Cisg
ICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGFsbG9jXSBpbml0V2l0
aFBheWxvYWQ6cGF5bG9hZF07Cit9CisKKysgKHZvaWQpX3BhcnNlRXJyb3JMaXN0OihOU0FycmF5
Lyo8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDoo
aWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwg
W05TQXJyYXkvKjxUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yPiovIGNsYXNzXSk7CisgICAgKm91
dFZhbHVlID0gKE5TQXJyYXkvKjxUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yPiovICopcGF5bG9h
ZDsKK30KKworKyAodm9pZClfcGFyc2VNb3VzZUJ1dHRvbjooTlNOdW1iZXIgKiopb3V0VmFsdWUg
ZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9U
WVBFKHBheWxvYWQsIFtOU1N0cmluZyBjbGFzc10pOworICAgIE9wdGlvbmFsPFRlc3RQcm90b2Nv
bERhdGFiYXNlTW91c2VCdXR0b24+IHJlc3VsdCA9IEluc3BlY3Rvcjo6ZnJvbVByb3RvY29sU3Ry
aW5nPFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VCdXR0b24+KHBheWxvYWQpOworICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfQkFEX0VOVU1fVkFMVUUocmVzdWx0LCBAIk1vdXNlQnV0dG9uIik7Cisg
ICAgKm91dFZhbHVlID0gQChyZXN1bHQudmFsdWUoKSk7Cit9CisKKysgKHZvaWQpX3BhcnNlT3B0
aW9uYWxQYXJhbWV0ZXJCdW5kbGU6KFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0
ZXJCdW5kbGUgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJP
V19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsK
KyAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJC
dW5kbGUgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKK30KKworKyAodm9pZClfcGFy
c2VQYXJhbWV0ZXJCdW5kbGU6KFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlICoq
KW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7CisgICAgKm91dFZh
bHVlID0gW1tUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZSBhbGxvY10gaW5pdFdp
dGhQYXlsb2FkOnBheWxvYWRdOworfQorCisrICh2b2lkKV9wYXJzZU9iamVjdFdpdGhQcm9wZXJ0
eU5hbWVDb25mbGljdHM6KFRlc3RQcm90b2NvbERhdGFiYXNlT2JqZWN0V2l0aFByb3BlcnR5TmFt
ZUNvbmZsaWN0cyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10p
OworICAgICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sRGF0YWJhc2VPYmplY3RXaXRoUHJvcGVy
dHlOYW1lQ29uZmxpY3RzIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07Cit9CisKKysg
KHZvaWQpX3BhcnNlRHVtbXlPYmplY3Q6KFRlc3RQcm90b2NvbERhdGFiYXNlRHVtbXlPYmplY3Qg
Kiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJ
T05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKKyAgICAqb3V0
VmFsdWUgPSBbW1Rlc3RQcm90b2NvbERhdGFiYXNlRHVtbXlPYmplY3QgYWxsb2NdIGluaXRXaXRo
UGF5bG9hZDpwYXlsb2FkXTsKK30KKworQGVuZAorQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucyAoVGVzdERvbWFpbikKKworKyAodm9pZClfcGFyc2VQYXJhbWV0ZXJC
dW5kbGU6KFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGUgKiopb3V0VmFsdWUgZnJvbVBh
eWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBh
eWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90
b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGUgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsK
K30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
Lm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0
UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRl
Lmg+CisjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMu
aD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCitAaW1wbGVtZW50YXRpb24gVGVz
dFByb3RvY29sRGF0YWJhc2VFcnJvcgorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2Fk
Oihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCit7CisgICAg
aWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBU
SFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJtZXNzYWdlIl0s
IEAibWVzc2FnZSIpOworICAgIHNlbGYubWVzc2FnZSA9IHBheWxvYWRbQCJtZXNzYWdlIl07CisK
KyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJjb2Rl
Il0sIEAiY29kZSIpOworICAgIHNlbGYuY29kZSA9IFtwYXlsb2FkW0AiY29kZSJdIGludGVnZXJW
YWx1ZV07CisKKyAgICByZXR1cm4gc2VsZjsKK30KKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBy
b3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilvYmplY3QKK3sKKyAgICBpZiAo
IShzZWxmID0gW3N1cGVyIGluaXRXaXRoSlNPTk9iamVjdDpbb2JqZWN0IHRvSlNPTk9iamVjdF0u
Z2V0KCldKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHJldHVybiBzZWxmOworfQorCist
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZToo
aW50KWNvZGUKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0
dXJuIG5pbDsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkobWVz
c2FnZSwgQCJtZXNzYWdlIik7CisKKyAgICBzZWxmLm1lc3NhZ2UgPSBtZXNzYWdlOworICAgIHNl
bGYuY29kZSA9IGNvZGU7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClzZXRNZXNz
YWdlOihOU1N0cmluZyAqKW1lc3NhZ2UKK3sKKyAgICBbc3VwZXIgc2V0U3RyaW5nOm1lc3NhZ2Ug
Zm9yS2V5OkAibWVzc2FnZSJdOworfQorCistIChOU1N0cmluZyAqKW1lc3NhZ2UKK3sKKyAgICBy
ZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAIm1lc3NhZ2UiXTsKK30KKworLSAodm9pZClzZXRD
b2RlOihpbnQpY29kZQoreworICAgIFtzdXBlciBzZXRJbnRlZ2VyOmNvZGUgZm9yS2V5OkAiY29k
ZSJdOworfQorCistIChpbnQpY29kZQoreworICAgIHJldHVybiBbc3VwZXIgaW50ZWdlckZvcktl
eTpAImNvZGUiXTsKK30KKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sRGF0
YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQ
YXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCit7
CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisK
KyAgICBzZWxmLmNvbHVtbk5hbWVzID0gcGF5bG9hZFtAImNvbHVtbk5hbWVzIl07CisKKyAgICBz
ZWxmLmJ1dHRvbnMgPSBwYXlsb2FkW0AiYnV0dG9ucyJdOworCisgICAgT3B0aW9uYWw8VGVzdFBy
b3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5PiBkaXJl
Y3Rpb25hbGl0eSA9IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlv
bmFsUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHk+KHBheWxvYWRbQCJkaXJlY3Rpb25hbGl0
eSJdKTsKKyAgICBpZiAoZGlyZWN0aW9uYWxpdHkpCisgICAgICAgIHNlbGYuZGlyZWN0aW9uYWxp
dHkgPSBkaXJlY3Rpb25hbGl0eS52YWx1ZSgpOworCisgICAgc2VsZi5ub3RlcyA9IHBheWxvYWRb
QCJub3RlcyJdOworCisgICAgc2VsZi50aW1lc3RhbXAgPSBbcGF5bG9hZFtAInRpbWVzdGFtcCJd
IGRvdWJsZVZhbHVlXTsKKworICAgIHNlbGYudmFsdWVzID0gcGF5bG9hZFtAInZhbHVlcyJdOwor
CisgICAgc2VsZi5wYXlsb2FkID0gcGF5bG9hZFtAInBheWxvYWQiXTsKKworICAgIHNlbGYuZXJy
b3IgPSBbW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpw
YXlsb2FkW0AiZXJyb3IiXV07CisKKyAgICBzZWxmLmVycm9yTGlzdCA9IG9iamNBcnJheUZyb21Q
YXlsb2FkPFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I+KHBheWxvYWRbQCJlcnJvckxpc3QiXSk7
CisKKyAgICByZXR1cm4gc2VsZjsKK30KKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29s
T2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilvYmplY3QKK3sKKyAgICBpZiAoIShzZWxm
ID0gW3N1cGVyIGluaXRXaXRoSlNPTk9iamVjdDpbb2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0KCld
KSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lk
KXNldENvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcworewor
ICAgIFtzdXBlciBzZXRKU09OQXJyYXk6dG9KU09OU3RyaW5nQXJyYXkoY29sdW1uTmFtZXMpIGZv
cktleTpAImNvbHVtbk5hbWVzIl07Cit9CisKKy0gKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWNv
bHVtbk5hbWVzCit7CisgICAgcmV0dXJuIHRvT2JqQ1N0cmluZ0FycmF5KFtzdXBlciBKU09OQXJy
YXlGb3JLZXk6QCJjb2x1bW5OYW1lcyJdKTsKK30KKworLSAodm9pZClzZXRCdXR0b25zOihOU0Fy
cmF5Lyo8TlNTdHJpbmc+Ki8gKilidXR0b25zCit7CisgICAgW3N1cGVyIHNldEpTT05BcnJheTp0
b0pTT05TdHJpbmdBcnJheShidXR0b25zKSBmb3JLZXk6QCJidXR0b25zIl07Cit9CisKKy0gKE5T
QXJyYXkvKjxOU1N0cmluZz4qLyAqKWJ1dHRvbnMKK3sKKyAgICByZXR1cm4gdG9PYmpDU3RyaW5n
QXJyYXkoW3N1cGVyIEpTT05BcnJheUZvcktleTpAImJ1dHRvbnMiXSk7Cit9CisKKy0gKHZvaWQp
c2V0RGlyZWN0aW9uYWxpdHk6KFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJC
dW5kbGVEaXJlY3Rpb25hbGl0eSlkaXJlY3Rpb25hbGl0eQoreworICAgIFtzdXBlciBzZXRTdHJp
bmc6dG9Qcm90b2NvbFN0cmluZyhkaXJlY3Rpb25hbGl0eSkgZm9yS2V5OkAiZGlyZWN0aW9uYWxp
dHkiXTsKK30KKworLSAoVGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRs
ZURpcmVjdGlvbmFsaXR5KWRpcmVjdGlvbmFsaXR5Cit7CisgICAgcmV0dXJuIGZyb21Qcm90b2Nv
bFN0cmluZzxUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlRGlyZWN0
aW9uYWxpdHk+KFtzdXBlciBzdHJpbmdGb3JLZXk6QCJkaXJlY3Rpb25hbGl0eSJdKS52YWx1ZSgp
OworfQorCistICh2b2lkKXNldE5vdGVzOihOU1N0cmluZyAqKW5vdGVzCit7CisgICAgW3N1cGVy
IHNldFN0cmluZzpub3RlcyBmb3JLZXk6QCJub3RlcyJdOworfQorCistIChOU1N0cmluZyAqKW5v
dGVzCit7CisgICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJub3RlcyJdOworfQorCist
ICh2b2lkKXNldFRpbWVzdGFtcDooZG91YmxlKXRpbWVzdGFtcAoreworICAgIFtzdXBlciBzZXRE
b3VibGU6dGltZXN0YW1wIGZvcktleTpAInRpbWVzdGFtcCJdOworfQorCistIChkb3VibGUpdGlt
ZXN0YW1wCit7CisgICAgcmV0dXJuIFtzdXBlciBkb3VibGVGb3JLZXk6QCJ0aW1lc3RhbXAiXTsK
K30KKworLSAodm9pZClzZXRWYWx1ZXM6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcwor
eworICAgIFtzdXBlciBzZXRPYmplY3Q6dmFsdWVzIGZvcktleTpAInZhbHVlcyJdOworfQorCist
IChSV0lQcm90b2NvbEpTT05PYmplY3QgKil2YWx1ZXMKK3sKKyAgICBSV0lQcm90b2NvbEpTT05P
YmplY3QgKm9iamVjdCA9IFtzdXBlciBvYmplY3RGb3JLZXk6QCJ2YWx1ZXMiXTsKKyAgICBpZiAo
IW9iamVjdCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICByZXR1cm4gW1tSV0lQcm90b2NvbEpT
T05PYmplY3QgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDpbW3N1cGVyIG9iamVjdEZvcktleTpA
InZhbHVlcyJdIHRvSlNPTk9iamVjdF0uZ2V0KCldOworfQorCistICh2b2lkKXNldFBheWxvYWQ6
KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQKK3sKKyAgICBbc3VwZXIgc2V0T2JqZWN0
OnBheWxvYWQgZm9yS2V5OkAicGF5bG9hZCJdOworfQorCistIChSV0lQcm90b2NvbEpTT05PYmpl
Y3QgKilwYXlsb2FkCit7CisgICAgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvYmplY3QgPSBbc3Vw
ZXIgb2JqZWN0Rm9yS2V5OkAicGF5bG9hZCJdOworICAgIGlmICghb2JqZWN0KQorICAgICAgICBy
ZXR1cm4gbmlsOworICAgIHJldHVybiBbW1JXSVByb3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5p
dFdpdGhKU09OT2JqZWN0Oltbc3VwZXIgb2JqZWN0Rm9yS2V5OkAicGF5bG9hZCJdIHRvSlNPTk9i
amVjdF0uZ2V0KCldOworfQorCistICh2b2lkKXNldEVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFz
ZUVycm9yICopZXJyb3IKK3sKKyAgICBbc3VwZXIgc2V0T2JqZWN0OmVycm9yIGZvcktleTpAImVy
cm9yIl07Cit9CisKKy0gKFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKillcnJvcgoreworICAg
IFJXSVByb3RvY29sSlNPTk9iamVjdCAqb2JqZWN0ID0gW3N1cGVyIG9iamVjdEZvcktleTpAImVy
cm9yIl07CisgICAgaWYgKCFvYmplY3QpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgcmV0dXJu
IFtbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0Oltb
c3VwZXIgb2JqZWN0Rm9yS2V5OkAiZXJyb3IiXSB0b0pTT05PYmplY3RdLmdldCgpXTsKK30KKwor
LSAodm9pZClzZXRFcnJvckxpc3Q6KE5TQXJyYXkvKjxUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9y
PiovICopZXJyb3JMaXN0Cit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRV9JTl9B
UlJBWShlcnJvckxpc3QsIFtUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGNsYXNzXSk7CisgICAg
W3N1cGVyIHNldEpTT05BcnJheTp0b0pTT05PYmplY3RBcnJheShlcnJvckxpc3QpIGZvcktleTpA
ImVycm9yTGlzdCJdOworfQorCistIChOU0FycmF5Lyo8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJv
cj4qLyAqKWVycm9yTGlzdAoreworICAgIHJldHVybiB0b09iakNBcnJheTxUZXN0UHJvdG9jb2xE
YXRhYmFzZUVycm9yPihbc3VwZXIgSlNPTkFycmF5Rm9yS2V5OkAiZXJyb3JMaXN0Il0pOworfQor
CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1
bmRsZQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlv
bmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBl
ciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9S
X1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJjb2x1bW5OYW1lcyJdLCBAImNvbHVtbk5hbWVz
Iik7CisgICAgc2VsZi5jb2x1bW5OYW1lcyA9IHBheWxvYWRbQCJjb2x1bW5OYW1lcyJdOworCisg
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiYnV0dG9u
cyJdLCBAImJ1dHRvbnMiKTsKKyAgICBzZWxmLmJ1dHRvbnMgPSBwYXlsb2FkW0AiYnV0dG9ucyJd
OworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0Ai
ZGlyZWN0aW9uYWxpdHkiXSwgQCJkaXJlY3Rpb25hbGl0eSIpOworICAgIE9wdGlvbmFsPFRlc3RQ
cm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHk+IGRpcmVjdGlvbmFs
aXR5ID0gZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVu
ZGxlRGlyZWN0aW9uYWxpdHk+KHBheWxvYWRbQCJkaXJlY3Rpb25hbGl0eSJdKTsKKyAgICBUSFJP
V19FWENFUFRJT05fRk9SX0JBRF9FTlVNX1ZBTFVFKGRpcmVjdGlvbmFsaXR5LCBAImRpcmVjdGlv
bmFsaXR5Iik7CisgICAgc2VsZi5kaXJlY3Rpb25hbGl0eSA9IGRpcmVjdGlvbmFsaXR5LnZhbHVl
KCk7CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRb
QCJub3RlcyJdLCBAIm5vdGVzIik7CisgICAgc2VsZi5ub3RlcyA9IHBheWxvYWRbQCJub3RlcyJd
OworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0Ai
dGltZXN0YW1wIl0sIEAidGltZXN0YW1wIik7CisgICAgc2VsZi50aW1lc3RhbXAgPSBbcGF5bG9h
ZFtAInRpbWVzdGFtcCJdIGRvdWJsZVZhbHVlXTsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
UkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAInZhbHVlcyJdLCBAInZhbHVlcyIpOworICAgIHNl
bGYudmFsdWVzID0gcGF5bG9hZFtAInZhbHVlcyJdOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AicGF5bG9hZCJdLCBAInBheWxvYWQiKTsKKyAg
ICBzZWxmLnBheWxvYWQgPSBwYXlsb2FkW0AicGF5bG9hZCJdOworCisgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiZXJyb3IiXSwgQCJlcnJvciIpOwor
ICAgIHNlbGYuZXJyb3IgPSBbW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgYWxsb2NdIGluaXRX
aXRoUGF5bG9hZDpwYXlsb2FkW0AiZXJyb3IiXV07CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9S
X1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJlcnJvckxpc3QiXSwgQCJlcnJvckxpc3QiKTsK
KyAgICBzZWxmLmVycm9yTGlzdCA9IG9iamNBcnJheUZyb21QYXlsb2FkPFRlc3RQcm90b2NvbERh
dGFiYXNlRXJyb3I+KHBheWxvYWRbQCJlcnJvckxpc3QiXSk7CisKKyAgICByZXR1cm4gc2VsZjsK
K30KKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpT
T05PYmplY3QgKilvYmplY3QKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoSlNP
Tk9iamVjdDpbb2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0KCldKSkKKyAgICAgICAgcmV0dXJuIG5p
bDsKKworICAgIHJldHVybiBzZWxmOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb2x1
bW5OYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMgYnV0dG9uczooTlNB
cnJheS8qPE5TU3RyaW5nPiovICopYnV0dG9ucyBkaXJlY3Rpb25hbGl0eTooVGVzdFByb3RvY29s
RGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSlkaXJlY3Rpb25hbGl0eSBub3Rl
czooTlNTdHJpbmcgKilub3RlcyB0aW1lc3RhbXA6KGRvdWJsZSl0aW1lc3RhbXAgdmFsdWVzOihS
V0lQcm90b2NvbEpTT05PYmplY3QgKil2YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2Jq
ZWN0ICopcGF5bG9hZCBlcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKWVycm9yIGVy
cm9yTGlzdDooTlNBcnJheS8qPFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I+Ki8gKillcnJvckxp
c3QKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5p
bDsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkoY29sdW1uTmFt
ZXMsIEAiY29sdW1uTmFtZXMiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BS
T1BFUlRZKGJ1dHRvbnMsIEAiYnV0dG9ucyIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVR
VUlSRURfUFJPUEVSVFkobm90ZXMsIEAibm90ZXMiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9S
X1JFUVVJUkVEX1BST1BFUlRZKHZhbHVlcywgQCJ2YWx1ZXMiKTsKKyAgICBUSFJPV19FWENFUFRJ
T05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWQsIEAicGF5bG9hZCIpOworICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkoZXJyb3IsIEAiZXJyb3IiKTsKKyAgICBU
SFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKGVycm9yTGlzdCwgQCJlcnJvckxp
c3QiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFX0lOX0FSUkFZKGVycm9yTGlz
dCwgW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgY2xhc3NdKTsKKworICAgIHNlbGYuY29sdW1u
TmFtZXMgPSBjb2x1bW5OYW1lczsKKyAgICBzZWxmLmJ1dHRvbnMgPSBidXR0b25zOworICAgIHNl
bGYuZGlyZWN0aW9uYWxpdHkgPSBkaXJlY3Rpb25hbGl0eTsKKyAgICBzZWxmLm5vdGVzID0gbm90
ZXM7CisgICAgc2VsZi50aW1lc3RhbXAgPSB0aW1lc3RhbXA7CisgICAgc2VsZi52YWx1ZXMgPSB2
YWx1ZXM7CisgICAgc2VsZi5wYXlsb2FkID0gcGF5bG9hZDsKKyAgICBzZWxmLmVycm9yID0gZXJy
b3I7CisgICAgc2VsZi5lcnJvckxpc3QgPSBlcnJvckxpc3Q7CisKKyAgICByZXR1cm4gc2VsZjsK
K30KKworLSAodm9pZClzZXRDb2x1bW5OYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopY29s
dW1uTmFtZXMKK3sKKyAgICBbc3VwZXIgc2V0SlNPTkFycmF5OnRvSlNPTlN0cmluZ0FycmF5KGNv
bHVtbk5hbWVzKSBmb3JLZXk6QCJjb2x1bW5OYW1lcyJdOworfQorCistIChOU0FycmF5Lyo8TlNT
dHJpbmc+Ki8gKiljb2x1bW5OYW1lcworeworICAgIHJldHVybiB0b09iakNTdHJpbmdBcnJheShb
c3VwZXIgSlNPTkFycmF5Rm9yS2V5OkAiY29sdW1uTmFtZXMiXSk7Cit9CisKKy0gKHZvaWQpc2V0
QnV0dG9uczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopYnV0dG9ucworeworICAgIFtzdXBlciBz
ZXRKU09OQXJyYXk6dG9KU09OU3RyaW5nQXJyYXkoYnV0dG9ucykgZm9yS2V5OkAiYnV0dG9ucyJd
OworfQorCistIChOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilidXR0b25zCit7CisgICAgcmV0dXJu
IHRvT2JqQ1N0cmluZ0FycmF5KFtzdXBlciBKU09OQXJyYXlGb3JLZXk6QCJidXR0b25zIl0pOwor
fQorCistICh2b2lkKXNldERpcmVjdGlvbmFsaXR5OihUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFt
ZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5KWRpcmVjdGlvbmFsaXR5Cit7CisgICAgW3N1cGVyIHNl
dFN0cmluZzp0b1Byb3RvY29sU3RyaW5nKGRpcmVjdGlvbmFsaXR5KSBmb3JLZXk6QCJkaXJlY3Rp
b25hbGl0eSJdOworfQorCistIChUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZURp
cmVjdGlvbmFsaXR5KWRpcmVjdGlvbmFsaXR5Cit7CisgICAgcmV0dXJuIGZyb21Qcm90b2NvbFN0
cmluZzxUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5Pihb
c3VwZXIgc3RyaW5nRm9yS2V5OkAiZGlyZWN0aW9uYWxpdHkiXSkudmFsdWUoKTsKK30KKworLSAo
dm9pZClzZXROb3RlczooTlNTdHJpbmcgKilub3RlcworeworICAgIFtzdXBlciBzZXRTdHJpbmc6
bm90ZXMgZm9yS2V5OkAibm90ZXMiXTsKK30KKworLSAoTlNTdHJpbmcgKilub3RlcworeworICAg
IHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAibm90ZXMiXTsKK30KKworLSAodm9pZClzZXRU
aW1lc3RhbXA6KGRvdWJsZSl0aW1lc3RhbXAKK3sKKyAgICBbc3VwZXIgc2V0RG91YmxlOnRpbWVz
dGFtcCBmb3JLZXk6QCJ0aW1lc3RhbXAiXTsKK30KKworLSAoZG91YmxlKXRpbWVzdGFtcAorewor
ICAgIHJldHVybiBbc3VwZXIgZG91YmxlRm9yS2V5OkAidGltZXN0YW1wIl07Cit9CisKKy0gKHZv
aWQpc2V0VmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKil2YWx1ZXMKK3sKKyAgICBbc3Vw
ZXIgc2V0T2JqZWN0OnZhbHVlcyBmb3JLZXk6QCJ2YWx1ZXMiXTsKK30KKworLSAoUldJUHJvdG9j
b2xKU09OT2JqZWN0ICopdmFsdWVzCit7CisgICAgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvYmpl
Y3QgPSBbc3VwZXIgb2JqZWN0Rm9yS2V5OkAidmFsdWVzIl07CisgICAgaWYgKCFvYmplY3QpCisg
ICAgICAgIHJldHVybiBuaWw7CisgICAgcmV0dXJuIFtbUldJUHJvdG9jb2xKU09OT2JqZWN0IGFs
bG9jXSBpbml0V2l0aEpTT05PYmplY3Q6W1tzdXBlciBvYmplY3RGb3JLZXk6QCJ2YWx1ZXMiXSB0
b0pTT05PYmplY3RdLmdldCgpXTsKK30KKworLSAodm9pZClzZXRQYXlsb2FkOihSV0lQcm90b2Nv
bEpTT05PYmplY3QgKilwYXlsb2FkCit7CisgICAgW3N1cGVyIHNldE9iamVjdDpwYXlsb2FkIGZv
cktleTpAInBheWxvYWQiXTsKK30KKworLSAoUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9h
ZAoreworICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb2JqZWN0ID0gW3N1cGVyIG9iamVjdEZv
cktleTpAInBheWxvYWQiXTsKKyAgICBpZiAoIW9iamVjdCkKKyAgICAgICAgcmV0dXJuIG5pbDsK
KyAgICByZXR1cm4gW1tSV0lQcm90b2NvbEpTT05PYmplY3QgYWxsb2NdIGluaXRXaXRoSlNPTk9i
amVjdDpbW3N1cGVyIG9iamVjdEZvcktleTpAInBheWxvYWQiXSB0b0pTT05PYmplY3RdLmdldCgp
XTsKK30KKworLSAodm9pZClzZXRFcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKWVy
cm9yCit7CisgICAgW3N1cGVyIHNldE9iamVjdDplcnJvciBmb3JLZXk6QCJlcnJvciJdOworfQor
CistIChUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICopZXJyb3IKK3sKKyAgICBSV0lQcm90b2Nv
bEpTT05PYmplY3QgKm9iamVjdCA9IFtzdXBlciBvYmplY3RGb3JLZXk6QCJlcnJvciJdOworICAg
IGlmICghb2JqZWN0KQorICAgICAgICByZXR1cm4gbmlsOworICAgIHJldHVybiBbW1Rlc3RQcm90
b2NvbERhdGFiYXNlRXJyb3IgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDpbW3N1cGVyIG9iamVj
dEZvcktleTpAImVycm9yIl0gdG9KU09OT2JqZWN0XS5nZXQoKV07Cit9CisKKy0gKHZvaWQpc2V0
RXJyb3JMaXN0OihOU0FycmF5Lyo8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4qLyAqKWVycm9y
TGlzdAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEVfSU5fQVJSQVkoZXJyb3JM
aXN0LCBbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBjbGFzc10pOworICAgIFtzdXBlciBzZXRK
U09OQXJyYXk6dG9KU09OT2JqZWN0QXJyYXkoZXJyb3JMaXN0KSBmb3JLZXk6QCJlcnJvckxpc3Qi
XTsKK30KKworLSAoTlNBcnJheS8qPFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I+Ki8gKillcnJv
ckxpc3QKK3sKKyAgICByZXR1cm4gdG9PYmpDQXJyYXk8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJv
cj4oW3N1cGVyIEpTT05BcnJheUZvcktleTpAImVycm9yTGlzdCJdKTsKK30KKworQGVuZAorCitA
aW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sRGF0YWJhc2VPYmplY3RXaXRoUHJvcGVydHlOYW1l
Q29uZmxpY3RzCisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNE
aWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQKK3sKKyAgICBpZiAoIShzZWxmID0g
W3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImludGVnZXIiXSwgQCJpbnRlZ2VyIik7
CisgICAgc2VsZi5pbnRlZ2VyID0gcGF5bG9hZFtAImludGVnZXIiXTsKKworICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImFycmF5Il0sIEAiYXJyYXki
KTsKKyAgICBzZWxmLmFycmF5ID0gcGF5bG9hZFtAImFycmF5Il07CisKKyAgICBUSFJPV19FWENF
UFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJzdHJpbmciXSwgQCJzdHJpbmci
KTsKKyAgICBzZWxmLnN0cmluZyA9IHBheWxvYWRbQCJzdHJpbmciXTsKKworICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAInZhbHVlIl0sIEAidmFsdWUi
KTsKKyAgICBzZWxmLnZhbHVlID0gcGF5bG9hZFtAInZhbHVlIl07CisKKyAgICBUSFJPV19FWENF
UFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJvYmplY3QiXSwgQCJvYmplY3Qi
KTsKKyAgICBzZWxmLm9iamVjdCA9IHBheWxvYWRbQCJvYmplY3QiXTsKKworICAgIHJldHVybiBz
ZWxmOworfQorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3Rv
Y29sSlNPTk9iamVjdCAqKW9iamVjdAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdp
dGhKU09OT2JqZWN0OltvYmplY3QgdG9KU09OT2JqZWN0XS5nZXQoKV0pKQorICAgICAgICByZXR1
cm4gbmlsOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0
aEludGVnZXI6KE5TU3RyaW5nICopaW50ZWdlciBhcnJheTooTlNTdHJpbmcgKilhcnJheSBzdHJp
bmc6KE5TU3RyaW5nICopc3RyaW5nIHZhbHVlOihOU1N0cmluZyAqKXZhbHVlIG9iamVjdDooTlNT
dHJpbmcgKilvYmplY3QKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAg
ICAgcmV0dXJuIG5pbDsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVS
VFkoaW50ZWdlciwgQCJpbnRlZ2VyIik7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJF
RF9QUk9QRVJUWShhcnJheSwgQCJhcnJheSIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVR
VUlSRURfUFJPUEVSVFkoc3RyaW5nLCBAInN0cmluZyIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfUkVRVUlSRURfUFJPUEVSVFkodmFsdWUsIEAidmFsdWUiKTsKKyAgICBUSFJPV19FWENFUFRJ
T05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKG9iamVjdCwgQCJvYmplY3QiKTsKKworICAgIHNlbGYu
aW50ZWdlciA9IGludGVnZXI7CisgICAgc2VsZi5hcnJheSA9IGFycmF5OworICAgIHNlbGYuc3Ry
aW5nID0gc3RyaW5nOworICAgIHNlbGYudmFsdWUgPSB2YWx1ZTsKKyAgICBzZWxmLm9iamVjdCA9
IG9iamVjdDsKKworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXNldEludGVnZXI6KE5T
U3RyaW5nICopaW50ZWdlcgoreworICAgIFtzdXBlciBzZXRTdHJpbmc6aW50ZWdlciBmb3JLZXk6
QCJpbnRlZ2VyIl07Cit9CisKKy0gKE5TU3RyaW5nICopaW50ZWdlcgoreworICAgIHJldHVybiBb
c3VwZXIgc3RyaW5nRm9yS2V5OkAiaW50ZWdlciJdOworfQorCistICh2b2lkKXNldEFycmF5OihO
U1N0cmluZyAqKWFycmF5Cit7CisgICAgW3N1cGVyIHNldFN0cmluZzphcnJheSBmb3JLZXk6QCJh
cnJheSJdOworfQorCistIChOU1N0cmluZyAqKWFycmF5Cit7CisgICAgcmV0dXJuIFtzdXBlciBz
dHJpbmdGb3JLZXk6QCJhcnJheSJdOworfQorCistICh2b2lkKXNldFN0cmluZzooTlNTdHJpbmcg
KilzdHJpbmcKK3sKKyAgICBbc3VwZXIgc2V0U3RyaW5nOnN0cmluZyBmb3JLZXk6QCJzdHJpbmci
XTsKK30KKworLSAoTlNTdHJpbmcgKilzdHJpbmcKK3sKKyAgICByZXR1cm4gW3N1cGVyIHN0cmlu
Z0ZvcktleTpAInN0cmluZyJdOworfQorCistICh2b2lkKXNldFZhbHVlOihOU1N0cmluZyAqKXZh
bHVlCit7CisgICAgW3N1cGVyIHNldFN0cmluZzp2YWx1ZSBmb3JLZXk6QCJ2YWx1ZSJdOworfQor
CistIChOU1N0cmluZyAqKXZhbHVlCit7CisgICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6
QCJ2YWx1ZSJdOworfQorCistICh2b2lkKXNldE9iamVjdDooTlNTdHJpbmcgKilvYmplY3QKK3sK
KyAgICBbc3VwZXIgc2V0U3RyaW5nOm9iamVjdCBmb3JLZXk6QCJvYmplY3QiXTsKK30KKworLSAo
TlNTdHJpbmcgKilvYmplY3QKK3sKKyAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAIm9i
amVjdCJdOworfQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xEYXRhYmFz
ZUR1bW15T2JqZWN0CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwg
TlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQKK3sKKyAgICBpZiAoIShzZWxm
ID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHJldHVybiBzZWxm
OworfQorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29s
SlNPTk9iamVjdCAqKW9iamVjdAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhK
U09OT2JqZWN0OltvYmplY3QgdG9KU09OT2JqZWN0XS5nZXQoKV0pKQorICAgICAgICByZXR1cm4g
bmlsOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKK0BlbmQKKworCitAaW1wbGVtZW50YXRpb24g
VGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2Fk
Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7
CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJk
aXJlY3Rpb25hbGl0eSJdLCBAImRpcmVjdGlvbmFsaXR5Iik7CisgICAgT3B0aW9uYWw8VGVzdFBy
b3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5PiBkaXJlY3Rpb25hbGl0eSA9
IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlRGlyZWN0
aW9uYWxpdHk+KHBheWxvYWRbQCJkaXJlY3Rpb25hbGl0eSJdKTsKKyAgICBUSFJPV19FWENFUFRJ
T05fRk9SX0JBRF9FTlVNX1ZBTFVFKGRpcmVjdGlvbmFsaXR5LCBAImRpcmVjdGlvbmFsaXR5Iik7
CisgICAgc2VsZi5kaXJlY3Rpb25hbGl0eSA9IGRpcmVjdGlvbmFsaXR5LnZhbHVlKCk7CisKKyAg
ICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJidXR0b25z
Il0sIEAiYnV0dG9ucyIpOworICAgIHNlbGYuYnV0dG9ucyA9IHBheWxvYWRbQCJidXR0b25zIl07
CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJj
b2x1bW5OYW1lcyJdLCBAImNvbHVtbk5hbWVzIik7CisgICAgc2VsZi5jb2x1bW5OYW1lcyA9IHBh
eWxvYWRbQCJjb2x1bW5OYW1lcyJdOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJF
RF9QUk9QRVJUWShwYXlsb2FkW0Aibm90ZXMiXSwgQCJub3RlcyIpOworICAgIHNlbGYubm90ZXMg
PSBwYXlsb2FkW0Aibm90ZXMiXTsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURf
UFJPUEVSVFkocGF5bG9hZFtAInRpbWVzdGFtcCJdLCBAInRpbWVzdGFtcCIpOworICAgIHNlbGYu
dGltZXN0YW1wID0gW3BheWxvYWRbQCJ0aW1lc3RhbXAiXSBkb3VibGVWYWx1ZV07CisKKyAgICBU
SFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJ2YWx1ZXMiXSwg
QCJ2YWx1ZXMiKTsKKyAgICBzZWxmLnZhbHVlcyA9IHBheWxvYWRbQCJ2YWx1ZXMiXTsKKworICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAInBheWxvYWQi
XSwgQCJwYXlsb2FkIik7CisgICAgc2VsZi5wYXlsb2FkID0gcGF5bG9hZFtAInBheWxvYWQiXTsK
KworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImVy
cm9yIl0sIEAiZXJyb3IiKTsKKyAgICBzZWxmLmVycm9yID0gW1tUZXN0UHJvdG9jb2xEYXRhYmFz
ZUVycm9yIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZFtAImVycm9yIl1dOworCisgICAg
cmV0dXJuIHNlbGY7Cit9CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDoo
UldJUHJvdG9jb2xKU09OT2JqZWN0ICopb2JqZWN0Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBl
ciBpbml0V2l0aEpTT05PYmplY3Q6W29iamVjdCB0b0pTT05PYmplY3RdLmdldCgpXSkpCisgICAg
ICAgIHJldHVybiBuaWw7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoRGlyZWN0aW9uYWxpdHk6KFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVE
aXJlY3Rpb25hbGl0eSlkaXJlY3Rpb25hbGl0eSBidXR0b25zOihOU0FycmF5Lyo8TlNTdHJpbmc+
Ki8gKilidXR0b25zIGNvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5O
YW1lcyBub3RlczooTlNTdHJpbmcgKilub3RlcyB0aW1lc3RhbXA6KGRvdWJsZSl0aW1lc3RhbXAg
dmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKil2YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9j
b2xKU09OT2JqZWN0ICopcGF5bG9hZCBlcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAq
KWVycm9yCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVy
biBuaWw7CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKGJ1dHRv
bnMsIEAiYnV0dG9ucyIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVS
VFkoY29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9S
X1JFUVVJUkVEX1BST1BFUlRZKG5vdGVzLCBAIm5vdGVzIik7CisgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9SRVFVSVJFRF9QUk9QRVJUWSh2YWx1ZXMsIEAidmFsdWVzIik7CisgICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkLCBAInBheWxvYWQiKTsKKyAgICBU
SFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKGVycm9yLCBAImVycm9yIik7CisK
KyAgICBzZWxmLmRpcmVjdGlvbmFsaXR5ID0gZGlyZWN0aW9uYWxpdHk7CisgICAgc2VsZi5idXR0
b25zID0gYnV0dG9uczsKKyAgICBzZWxmLmNvbHVtbk5hbWVzID0gY29sdW1uTmFtZXM7CisgICAg
c2VsZi5ub3RlcyA9IG5vdGVzOworICAgIHNlbGYudGltZXN0YW1wID0gdGltZXN0YW1wOworICAg
IHNlbGYudmFsdWVzID0gdmFsdWVzOworICAgIHNlbGYucGF5bG9hZCA9IHBheWxvYWQ7CisgICAg
c2VsZi5lcnJvciA9IGVycm9yOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpc2V0
RGlyZWN0aW9uYWxpdHk6KFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25h
bGl0eSlkaXJlY3Rpb25hbGl0eQoreworICAgIFtzdXBlciBzZXRTdHJpbmc6dG9Qcm90b2NvbFN0
cmluZyhkaXJlY3Rpb25hbGl0eSkgZm9yS2V5OkAiZGlyZWN0aW9uYWxpdHkiXTsKK30KKworLSAo
VGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5KWRpcmVjdGlvbmFs
aXR5Cit7CisgICAgcmV0dXJuIGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xUZXN0UGFy
YW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHk+KFtzdXBlciBzdHJpbmdGb3JLZXk6QCJkaXJlY3Rp
b25hbGl0eSJdKS52YWx1ZSgpOworfQorCistICh2b2lkKXNldEJ1dHRvbnM6KE5TQXJyYXkvKjxO
U1N0cmluZz4qLyAqKWJ1dHRvbnMKK3sKKyAgICBbc3VwZXIgc2V0SlNPTkFycmF5OnRvSlNPTlN0
cmluZ0FycmF5KGJ1dHRvbnMpIGZvcktleTpAImJ1dHRvbnMiXTsKK30KKworLSAoTlNBcnJheS8q
PE5TU3RyaW5nPiovICopYnV0dG9ucworeworICAgIHJldHVybiB0b09iakNTdHJpbmdBcnJheShb
c3VwZXIgSlNPTkFycmF5Rm9yS2V5OkAiYnV0dG9ucyJdKTsKK30KKworLSAodm9pZClzZXRDb2x1
bW5OYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMKK3sKKyAgICBbc3Vw
ZXIgc2V0SlNPTkFycmF5OnRvSlNPTlN0cmluZ0FycmF5KGNvbHVtbk5hbWVzKSBmb3JLZXk6QCJj
b2x1bW5OYW1lcyJdOworfQorCistIChOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1l
cworeworICAgIHJldHVybiB0b09iakNTdHJpbmdBcnJheShbc3VwZXIgSlNPTkFycmF5Rm9yS2V5
OkAiY29sdW1uTmFtZXMiXSk7Cit9CisKKy0gKHZvaWQpc2V0Tm90ZXM6KE5TU3RyaW5nICopbm90
ZXMKK3sKKyAgICBbc3VwZXIgc2V0U3RyaW5nOm5vdGVzIGZvcktleTpAIm5vdGVzIl07Cit9CisK
Ky0gKE5TU3RyaW5nICopbm90ZXMKK3sKKyAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpA
Im5vdGVzIl07Cit9CisKKy0gKHZvaWQpc2V0VGltZXN0YW1wOihkb3VibGUpdGltZXN0YW1wCit7
CisgICAgW3N1cGVyIHNldERvdWJsZTp0aW1lc3RhbXAgZm9yS2V5OkAidGltZXN0YW1wIl07Cit9
CisKKy0gKGRvdWJsZSl0aW1lc3RhbXAKK3sKKyAgICByZXR1cm4gW3N1cGVyIGRvdWJsZUZvcktl
eTpAInRpbWVzdGFtcCJdOworfQorCistICh2b2lkKXNldFZhbHVlczooUldJUHJvdG9jb2xKU09O
T2JqZWN0ICopdmFsdWVzCit7CisgICAgW3N1cGVyIHNldE9iamVjdDp2YWx1ZXMgZm9yS2V5OkAi
dmFsdWVzIl07Cit9CisKKy0gKFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcworeworICAg
IFJXSVByb3RvY29sSlNPTk9iamVjdCAqb2JqZWN0ID0gW3N1cGVyIG9iamVjdEZvcktleTpAInZh
bHVlcyJdOworICAgIGlmICghb2JqZWN0KQorICAgICAgICByZXR1cm4gbmlsOworICAgIHJldHVy
biBbW1JXSVByb3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0Oltbc3Vw
ZXIgb2JqZWN0Rm9yS2V5OkAidmFsdWVzIl0gdG9KU09OT2JqZWN0XS5nZXQoKV07Cit9CisKKy0g
KHZvaWQpc2V0UGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZAoreworICAg
IFtzdXBlciBzZXRPYmplY3Q6cGF5bG9hZCBmb3JLZXk6QCJwYXlsb2FkIl07Cit9CisKKy0gKFJX
SVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQKK3sKKyAgICBSV0lQcm90b2NvbEpTT05PYmpl
Y3QgKm9iamVjdCA9IFtzdXBlciBvYmplY3RGb3JLZXk6QCJwYXlsb2FkIl07CisgICAgaWYgKCFv
YmplY3QpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgcmV0dXJuIFtbUldJUHJvdG9jb2xKU09O
T2JqZWN0IGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6W1tzdXBlciBvYmplY3RGb3JLZXk6QCJw
YXlsb2FkIl0gdG9KU09OT2JqZWN0XS5nZXQoKV07Cit9CisKKy0gKHZvaWQpc2V0RXJyb3I6KFRl
c3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKillcnJvcgoreworICAgIFtzdXBlciBzZXRPYmplY3Q6
ZXJyb3IgZm9yS2V5OkAiZXJyb3IiXTsKK30KKworLSAoVGVzdFByb3RvY29sRGF0YWJhc2VFcnJv
ciAqKWVycm9yCit7CisgICAgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvYmplY3QgPSBbc3VwZXIg
b2JqZWN0Rm9yS2V5OkAiZXJyb3IiXTsKKyAgICBpZiAoIW9iamVjdCkKKyAgICAgICAgcmV0dXJu
IG5pbDsKKyAgICByZXR1cm4gW1tUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGFsbG9jXSBpbml0
V2l0aEpTT05PYmplY3Q6W1tzdXBlciBvYmplY3RGb3JLZXk6QCJlcnJvciJdIHRvSlNPTk9iamVj
dF0uZ2V0KCldOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBl
cy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbi1yZXN1bHQg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
dHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZDljOTc2ZWZlMzYKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlw
ZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uLXJlc3VsdApAQCAtMCwwICsxLDE2MTQgQEAK
KyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworLy8gVGVzdAorSW5z
cGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiVGVzdCIsIG51bGwpOworSW5zcGVjdG9yQmFj
a2VuZC5yZWdpc3RlckVudW0oIlRlc3QuVW5jYXN0ZWRBbmltYWxzIiwge1BpZ3M6ICJQaWdzIiwg
Q293czogIkNvd3MiLCBDYXRzOiAiQ2F0cyIsIEhlbnM6ICJIZW5zIn0pOworSW5zcGVjdG9yQmFj
a2VuZC5yZWdpc3RlckVudW0oIlRlc3QuQ2FzdGVkQW5pbWFscyIsIHtEdWNrczogIkR1Y2tzIiwg
SGVuczogIkhlbnMiLCBDcm93czogIkNyb3dzIiwgRmxhbWluZ29zOiAiRmxhbWluZ29zIn0pOwor
SW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiVGVzdCIsIG51bGwpOworIyMjIEVuZCBG
aWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgorLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29s
VHlwZXMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlci5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVy
Lmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlz
cGF0Y2hlciB7CitwdWJsaWM6CisgICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8
QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0g
V1RGTW92ZShkaXNwYXRjaGVyKTsgfQorICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlz
cGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KK3By
aXZhdGU6CisgICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVy
OworfTsKKworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyMjIyBFbmQgRmlsZTogVGVzdEFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2Vu
ZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJl
cXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmpl
Y3RzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCisKKworfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisj
IyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL0pT
T05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKKyNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCisj
ZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKK25hbWVz
cGFjZSBJbnNwZWN0b3IgeworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBF
bmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRl
c3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJv
dG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEZy
b250ZW5kUm91dGVyOworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTog
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5k
RGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1y
ZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJv
bnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFj
ZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxl
OiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbE9iamVjdHMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVx
dWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvclByb3RvY29sVHlwZXMuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCitu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKworCisv
LyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KK25hbWVzcGFjZSBUZXN0IHsKK2NsYXNzIFR5cGVOZWVk
aW5nQ2FzdDsKK2NsYXNzIFJlY3Vyc2l2ZU9iamVjdDE7CitjbGFzcyBSZWN1cnNpdmVPYmplY3Qy
OworZW51bSBjbGFzcyBVbmNhc3RlZEFuaW1hbHM7CitlbnVtIGNsYXNzIENhc3RlZEFuaW1hbHM7
Cit9IC8vIFRlc3QKKy8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KKworCisvLyBUeXBl
ZGVmcy4KK25hbWVzcGFjZSBUZXN0IHsKK3R5cGVkZWYgaW50IENhc3RlZE9iamVjdElkOwordHlw
ZWRlZiBpbnQgVW5jYXN0ZWRPYmplY3RJZDsKK30gLy8gVGVzdAorLy8gRW5kIG9mIHR5cGVkZWZz
LgorCituYW1lc3BhY2UgVGVzdEhlbHBlcnMgeworCitTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFs
dWUoaW50IGNvZGUpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgZ2V0RW51bUNvbnN0
YW50VmFsdWUoVCBlbnVtVmFsdWUpCit7CisgICAgcmV0dXJuIGdldEVudW1Db25zdGFudFZhbHVl
KHN0YXRpY19jYXN0PGludD4oZW51bVZhbHVlKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RI
ZWxwZXJzCisKK25hbWVzcGFjZSBUZXN0IHsKKy8qIEEgZHVtbXkgdHlwZSB0aGF0IHJlcXVpcmVz
IHJ1bnRpbWUgY2FzdHMsIGFuZCBmb3JjZXMgbm9uLXByaW1pdGl2ZSByZWZlcmVuY2VkIHR5cGVz
IHRvIGFsc28gZW1pdCBydW50aW1lIGNhc3QgaGVscGVycy4gKi8KK2NsYXNzIFR5cGVOZWVkaW5n
Q2FzdCA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKK3B1YmxpYzoKKyAgICBlbnVtIHsKKyAg
ICAgICAgTm9GaWVsZHNTZXQgPSAwLAorICAgICAgICBTdHJpbmdTZXQgPSAxIDw8IDAsCisgICAg
ICAgIE51bWJlclNldCA9IDEgPDwgMSwKKyAgICAgICAgQW5pbWFsc1NldCA9IDEgPDwgMiwKKyAg
ICAgICAgSWRTZXQgPSAxIDw8IDMsCisgICAgICAgIFRyZWVTZXQgPSAxIDw8IDQsCisgICAgICAg
IEFsbEZpZWxkc1NldCA9IChTdHJpbmdTZXQgfCBOdW1iZXJTZXQgfCBBbmltYWxzU2V0IHwgSWRT
ZXQgfCBUcmVlU2V0KQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CisgICAgY2xh
c3MgQnVpbGRlciB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4g
bV9yZXN1bHQ7CisKKyAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBT
VEVQPiYgY2FzdFN0YXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICpyZWludGVy
cHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOworICAgICAgICB9CisKKyAg
ICAgICAgQnVpbGRlcihSZWY8LypUeXBlTmVlZGluZ0Nhc3QqL0pTT046Ok9iamVjdD4mJiBvYmpl
Y3QpCisgICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKKyAgICAgICAgewor
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJf
Y3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CisgICAgICAgIH0KKyAgICAgICAgZnJpZW5kIGNs
YXNzIFR5cGVOZWVkaW5nQ2FzdDsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IFN0cmluZ1NldD4mIHNldFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAgICB7
CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU3RyaW5nU2V0KSwgcHJvcGVy
dHlfc3RyaW5nX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmco
InN0cmluZyJfcywgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTdHJpbmdT
ZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTnVtYmVyU2V0PiYg
c2V0TnVtYmVyKGludCB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIE51bWJlclNldCksIHByb3BlcnR5X251bWJlcl9hbHJlYWR5X3NldCk7Cisg
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcigibnVtYmVyIl9zLCB2YWx1ZSk7CisgICAg
ICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE51bWJlclNldD4oKTsKKyAgICAgICAgfQorCisgICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBBbmltYWxzU2V0PiYgc2V0QW5pbWFscyhJbnNwZWN0b3I6OlBy
b3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQW5pbWFsc1NldCksIHByb3BlcnR5X2FuaW1hbHNf
YWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygiYW5pbWFscyJf
cywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVl
KHZhbHVlKSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEFuaW1hbHNTZXQ+KCk7Cisg
ICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgSWRTZXQ+JiBzZXRJZChpbnQgdmFs
dWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBJZFNl
dCksIHByb3BlcnR5X2lkX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJ
bnRlZ2VyKCJpZCJfcywgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxJZFNl
dD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUcmVlU2V0PiYgc2V0
VHJlZShSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT4g
dmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBU
cmVlU2V0KSwgcHJvcGVydHlfdHJlZV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0T2JqZWN0KCJ0cmVlIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0
YXRlPFRyZWVTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBSZWY8VHlwZU5lZWRpbmdDYXN0
PiByZWxlYXNlKCkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUg
PT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKHNpemVvZihUeXBlTmVlZGluZ0Nhc3QpID09IHNpemVvZihKU09OOjpPYmplY3Qp
LCBjYW5ub3RfY2FzdCk7CisKKyAgICAgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25SZXN1
bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOworICAgICAgICAgICAgYXV0byByZXN1bHQg
PSBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxUeXBlTmVlZGluZ0Nhc3Q+Kj4oJmpzb25S
ZXN1bHQpKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICB9Owor
CisgICAgLyoKKyAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CisgICAgICogUmVmPFR5cGVO
ZWVkaW5nQ2FzdD4gcmVzdWx0ID0gVHlwZU5lZWRpbmdDYXN0OjpjcmVhdGUoKQorICAgICAqICAg
ICAuc2V0U3RyaW5nKC4uLikKKyAgICAgKiAgICAgLnNldE51bWJlciguLi4pCisgICAgICogICAg
IC5zZXRBbmltYWxzKC4uLikKKyAgICAgKiAgICAgLnNldElkKC4uLikKKyAgICAgKiAgICAgLnNl
dFRyZWUoLi4uKQorICAgICAqICAgICAucmVsZWFzZSgpOworICAgICAqLworICAgIHN0YXRpYyBC
dWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxk
ZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOworICAgIH0KK307CisKKy8q
ICAqLworZW51bSBjbGFzcyBVbmNhc3RlZEFuaW1hbHMgeworICAgIFBpZ3MgPSA0LAorICAgIENv
d3MgPSA1LAorICAgIENhdHMgPSA2LAorICAgIEhlbnMgPSAxLAorfTsgLy8gZW51bSBjbGFzcyBV
bmNhc3RlZEFuaW1hbHMKKy8qICAqLworZW51bSBjbGFzcyBDYXN0ZWRBbmltYWxzIHsKKyAgICBE
dWNrcyA9IDAsCisgICAgSGVucyA9IDEsCisgICAgQ3Jvd3MgPSAyLAorICAgIEZsYW1pbmdvcyA9
IDMsCit9OyAvLyBlbnVtIGNsYXNzIENhc3RlZEFuaW1hbHMKK2NsYXNzIFJlY3Vyc2l2ZU9iamVj
dDEgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CitwdWJsaWM6CisgICAgZW51bSB7CisgICAg
ICAgIE5vRmllbGRzU2V0ID0gMCwKKyAgICAgICAgQWxsRmllbGRzU2V0ID0gMAorICAgIH07CisK
KyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CisgICAgY2xhc3MgQnVpbGRlciB7CisgICAgcHJpdmF0
ZToKKyAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7CisKKyAgICAgICAgdGVt
cGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUg
fCBTVEVQPio+KHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcihSZWY8LypSZWN1
cnNpdmVPYmplY3QxKi9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQorICAgICAgICAgICAgOiBtX3Jl
c3VsdChXVEZNb3ZlKG9iamVjdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3Rh
dGUpOworICAgICAgICB9CisgICAgICAgIGZyaWVuZCBjbGFzcyBSZWN1cnNpdmVPYmplY3QxOwor
ICAgIHB1YmxpYzoKKworICAgICAgICBSZWY8UmVjdXJzaXZlT2JqZWN0MT4gcmVsZWFzZSgpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1Nl
dCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXpl
b2YoUmVjdXJzaXZlT2JqZWN0MSkgPT0gc2l6ZW9mKEpTT046Ok9iamVjdCksIGNhbm5vdF9jYXN0
KTsKKworICAgICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4ganNvblJlc3VsdCA9IG1fcmVzdWx0
LnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFdURk1vdmUoKnJl
aW50ZXJwcmV0X2Nhc3Q8UmVmPFJlY3Vyc2l2ZU9iamVjdDE+Kj4oJmpzb25SZXN1bHQpKTsKKyAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyoKKyAg
ICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CisgICAgICogUmVmPFJlY3Vyc2l2ZU9iamVjdDE+
IHJlc3VsdCA9IFJlY3Vyc2l2ZU9iamVjdDE6OmNyZWF0ZSgpCisgICAgICogICAgIC5yZWxlYXNl
KCk7CisgICAgICovCisgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCisg
ICAgeworICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKSk7CisgICAgfQorCisgICAgdm9pZCBzZXRPYmooUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDI+IHZhbHVlKQorICAgIHsKKyAgICAgICAgSlNP
Tjo6T2JqZWN0QmFzZTo6c2V0T2JqZWN0KCJvYmoiX3MsIFdURk1vdmUodmFsdWUpKTsKKyAgICB9
Cit9OworCitjbGFzcyBSZWN1cnNpdmVPYmplY3QyIDogcHVibGljIEpTT046Ok9iamVjdEJhc2Ug
eworcHVibGljOgorICAgIGVudW0geworICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCisgICAgICAg
IEFsbEZpZWxkc1NldCA9IDAKKyAgICB9OworCisgICAgdGVtcGxhdGU8aW50IFNUQVRFPgorICAg
IGNsYXNzIEJ1aWxkZXIgeworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+IG1fcmVzdWx0OworCisgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRF
IHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqcmVp
bnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKKyAgICAgICAgfQor
CisgICAgICAgIEJ1aWxkZXIoUmVmPC8qUmVjdXJzaXZlT2JqZWN0MiovSlNPTjo6T2JqZWN0PiYm
IG9iamVjdCkKKyAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQorICAgICAg
ICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVp
bGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKKyAgICAgICAgfQorICAgICAgICBmcmll
bmQgY2xhc3MgUmVjdXJzaXZlT2JqZWN0MjsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgUmVmPFJl
Y3Vyc2l2ZU9iamVjdDI+IHJlbGVhc2UoKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxF
X0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOworICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFJlY3Vyc2l2ZU9iamVjdDIpID09IHNpemVv
ZihKU09OOjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7CisKKyAgICAgICAgICAgIFJlZjxKU09OOjpP
YmplY3Q+IGpzb25SZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOworICAgICAgICAg
ICAgYXV0byByZXN1bHQgPSBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxSZWN1cnNpdmVP
YmplY3QyPio+KCZqc29uUmVzdWx0KSk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
ICAgICB9CisgICAgfTsKKworICAgIC8qCisgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgor
ICAgICAqIFJlZjxSZWN1cnNpdmVPYmplY3QyPiByZXN1bHQgPSBSZWN1cnNpdmVPYmplY3QyOjpj
cmVhdGUoKQorICAgICAqICAgICAucmVsZWFzZSgpOworICAgICAqLworICAgIHN0YXRpYyBCdWls
ZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8
Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOworICAgIH0KKworICAgIHZvaWQg
c2V0T2JqKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3Qx
PiB2YWx1ZSkKKyAgICB7CisgICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldE9iamVjdCgib2Jq
Il9zLCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgfQorfTsKKworfSAvLyBUZXN0CisKK3RlbXBsYXRl
PD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVk
QW5pbWFscz4geworc3RhdGljIHZvaWQgYXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSlNPTjo6
VmFsdWUqKTsKK307Cit0ZW1wbGF0ZTw+IHN0cnVjdCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD4geworc3RhdGljIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+IHJ1bnRpbWVDYXN0KFJlZlB0cjxK
U09OOjpWYWx1ZT4mJiB2YWx1ZSk7CitzdGF0aWMgdm9pZCBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVk
VHlwZShKU09OOjpWYWx1ZSopOworfTsKK3RlbXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8
SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT4geworc3RhdGljIHZv
aWQgYXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSlNPTjo6VmFsdWUqKTsKK307Cit0ZW1wbGF0
ZTw+IHN0cnVjdCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vy
c2l2ZU9iamVjdDI+IHsKK3N0YXRpYyB2b2lkIGFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEpT
T046OlZhbHVlKik7Cit9OworCituYW1lc3BhY2UgVGVzdEhlbHBlcnMgeworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBQcm90b2NvbEVudW1UeXBlPgorT3B0aW9uYWw8UHJvdG9jb2xFbnVtVHlwZT4gcGFy
c2VFbnVtVmFsdWVGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYpOworCisvLyBFbnVtcyBpbiB0aGUg
J1Rlc3QnIERvbWFpbgordGVtcGxhdGU8PgorT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6
VGVzdDo6VW5jYXN0ZWRBbmltYWxzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9y
OjpQcm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzPihjb25zdCBTdHJpbmcmKTsKK3RlbXBs
YXRlPD4KK09wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+
IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0
ZWRBbmltYWxzPihjb25zdCBTdHJpbmcmKTsKKworfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMK
KworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisK
K25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhh
c2g7CisKKy8vIEhhc2ggZGVjbGFyYXRpb25zIGluIHRoZSAnVGVzdCcgRG9tYWluCit0ZW1wbGF0
ZTw+CitzdHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VW5jYXN0
ZWRBbmltYWxzPiB7CisgICAgdHlwZWRlZiBJbnRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRl
c3Q6OlVuY2FzdGVkQW5pbWFscz4gSGFzaDsKK307Cit0ZW1wbGF0ZTw+CitzdHJ1Y3QgRGVmYXVs
dEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz4geworICAgIHR5
cGVkZWYgSW50SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPiBI
YXNoOworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bE9iamVjdHMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNh
c3RzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKworI2lu
Y2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwor
bmFtZXNwYWNlIEluc3BlY3RvciB7CisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKK25hbWVzcGFj
ZSBUZXN0SGVscGVycyB7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBlbnVtX2NvbnN0YW50
X3ZhbHVlc1tdID0geworICAgICJEdWNrcyIsCisgICAgIkhlbnMiLAorICAgICJDcm93cyIsCisg
ICAgIkZsYW1pbmdvcyIsCisgICAgIlBpZ3MiLAorICAgICJDb3dzIiwKKyAgICAiQ2F0cyIsCit9
OworCitTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsKKyAgICByZXR1cm4g
ZW51bV9jb25zdGFudF92YWx1ZXNbY29kZV07Cit9CisKKy8vIEVudW1zIGluIHRoZSAnVGVzdCcg
RG9tYWluCit0ZW1wbGF0ZTw+CitPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpV
bmNhc3RlZEFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcp
Cit7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0geworICAgICAg
ICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFsczo6UGln
cywKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFu
aW1hbHM6OkNvd3MsCisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6
VW5jYXN0ZWRBbmltYWxzOjpDYXRzLAorICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9j
b2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFsczo6SGVucywKKyAgICB9OworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgNDsgKytpKQorICAgICAgICBpZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9j
b25zdGFudF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNbaV1dKQorICAgICAgICAgICAgcmV0dXJuIChJ
bnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHMpY29uc3RhbnRWYWx1ZXNb
aV07CisKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCit0ZW1wbGF0ZTw+CitPcHRpb25h
bDxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPiBwYXJzZUVudW1WYWx1
ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz4oY29u
c3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKK3sKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNv
bnN0YW50VmFsdWVzW10gPSB7CisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6
VGVzdDo6Q2FzdGVkQW5pbWFsczo6RHVja3MsCisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQ
cm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFsczo6SGVucywKKyAgICAgICAgKHNpemVfdClJbnNw
ZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzOjpDcm93cywKKyAgICAgICAgKHNp
emVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzOjpGbGFtaW5nb3Ms
CisgICAgfTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDQ7ICsraSkKKyAgICAgICAgaWYg
KHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ld
XSkKKyAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVk
QW5pbWFscyljb25zdGFudFZhbHVlc1tpXTsKKworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9
CisKKworfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKKworCisKK3ZvaWQgQmluZGluZ1RyYWl0
czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPjo6YXNzZXJ0VmFsdWVI
YXNFeHBlY3RlZFR5cGUoSlNPTjo6VmFsdWUqIHZhbHVlKQoreworI2lmIEFTU0VSVF9FTkFCTEVE
CisgICAgQVNTRVJUX0FSRyh2YWx1ZSwgdmFsdWUpOworICAgIFN0cmluZyByZXN1bHQ7CisgICAg
Ym9vbCBjYXN0U3VjY2VlZGVkID0gdmFsdWUtPmFzU3RyaW5nKHJlc3VsdCk7CisgICAgQVNTRVJU
KGNhc3RTdWNjZWVkZWQpOworICAgIEFTU0VSVChyZXN1bHQgPT0gIkR1Y2tzIiB8fCByZXN1bHQg
PT0gIkhlbnMiIHx8IHJlc3VsdCA9PSAiQ3Jvd3MiIHx8IHJlc3VsdCA9PSAiRmxhbWluZ29zIik7
CisjZWxzZSAvLyBBU1NFUlRfRU5BQkxFRAorICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7CisjZW5k
aWYgLy8gQVNTRVJUX0VOQUJMRUQKK30KKwordm9pZCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRU
eXBlKEpTT046OlZhbHVlKiB2YWx1ZSkKK3sKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgIEFTU0VS
VF9BUkcodmFsdWUsIHZhbHVlKTsKKyAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBvYmplY3Q7Cisg
ICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdmFsdWUtPmFzT2JqZWN0KG9iamVjdCk7CisgICAgQVNT
RVJUX1VOVVNFRChjYXN0U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsKKyAgICB7CisgICAgICAg
IGF1dG8gc3RyaW5nUG9zID0gb2JqZWN0LT5maW5kKCJzdHJpbmciX3MpOworICAgICAgICBBU1NF
UlQoc3RyaW5nUG9zICE9IG9iamVjdC0+ZW5kKCkpOworICAgICAgICBCaW5kaW5nVHJhaXRzPFN0
cmluZz46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKHN0cmluZ1Bvcy0+dmFsdWUuZ2V0KCkp
OworICAgIH0KKyAgICB7CisgICAgICAgIGF1dG8gbnVtYmVyUG9zID0gb2JqZWN0LT5maW5kKCJu
dW1iZXIiX3MpOworICAgICAgICBBU1NFUlQobnVtYmVyUG9zICE9IG9iamVjdC0+ZW5kKCkpOwor
ICAgICAgICBCaW5kaW5nVHJhaXRzPGludD46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKG51
bWJlclBvcy0+dmFsdWUuZ2V0KCkpOworICAgIH0KKyAgICB7CisgICAgICAgIGF1dG8gYW5pbWFs
c1BvcyA9IG9iamVjdC0+ZmluZCgiYW5pbWFscyJfcyk7CisgICAgICAgIEFTU0VSVChhbmltYWxz
UG9zICE9IG9iamVjdC0+ZW5kKCkpOworICAgICAgICBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlw
ZShhbmltYWxzUG9zLT52YWx1ZS5nZXQoKSk7CisgICAgfQorICAgIHsKKyAgICAgICAgYXV0byBp
ZFBvcyA9IG9iamVjdC0+ZmluZCgiaWQiX3MpOworICAgICAgICBBU1NFUlQoaWRQb3MgIT0gb2Jq
ZWN0LT5lbmQoKSk7CisgICAgICAgIEJpbmRpbmdUcmFpdHM8aW50Pjo6YXNzZXJ0VmFsdWVIYXNF
eHBlY3RlZFR5cGUoaWRQb3MtPnZhbHVlLmdldCgpKTsKKyAgICB9CisgICAgeworICAgICAgICBh
dXRvIHRyZWVQb3MgPSBvYmplY3QtPmZpbmQoInRyZWUiX3MpOworICAgICAgICBBU1NFUlQodHJl
ZVBvcyAhPSBvYmplY3QtPmVuZCgpKTsKKyAgICAgICAgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6
OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QxPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3Rl
ZFR5cGUodHJlZVBvcy0+dmFsdWUuZ2V0KCkpOworICAgIH0KKworICAgIGludCBmb3VuZFByb3Bl
cnRpZXNDb3VudCA9IDU7CisgICAgaWYgKGZvdW5kUHJvcGVydGllc0NvdW50ICE9IG9iamVjdC0+
c2l6ZSgpKQorICAgICAgICBGQVRBTCgiVW5leHBlY3RlZCBwcm9wZXJ0aWVzIGluIG9iamVjdDog
JXNcbiIsIG9iamVjdC0+dG9KU09OU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOworI2Vsc2UgLy8g
QVNTRVJUX0VOQUJMRUQKKyAgICBVTlVTRURfUEFSQU0odmFsdWUpOworI2VuZGlmIC8vIEFTU0VS
VF9FTkFCTEVECit9CisKK1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVl
ZGluZ0Nhc3Q+IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5l
ZWRpbmdDYXN0Pjo6cnVudGltZUNhc3QoUmVmUHRyPEpTT046OlZhbHVlPiYmIHZhbHVlKQorewor
ICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHJlc3VsdDsKKyAgICBib29sIGNhc3RTdWNjZWVkZWQg
PSB2YWx1ZS0+YXNPYmplY3QocmVzdWx0KTsKKyAgICBBU1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVk
ZWQsIGNhc3RTdWNjZWVkZWQpOworICAgIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUocmVz
dWx0LmdldCgpKTsKKyAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoSW5zcGVjdG9yOjpQcm90b2Nv
bDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0KSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0QmFzZSksIHR5
cGVfY2FzdF9wcm9ibGVtKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SW5zcGVjdG9yOjpQcm90
b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0Kj4oc3RhdGljX2Nhc3Q8SlNPTjo6T2JqZWN0QmFz
ZSo+KHJlc3VsdC5nZXQoKSkpOworfQorCisKK3ZvaWQgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6
OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QxPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3Rl
ZFR5cGUoSlNPTjo6VmFsdWUqIHZhbHVlKQoreworI2lmIEFTU0VSVF9FTkFCTEVECisgICAgQVNT
RVJUX0FSRyh2YWx1ZSwgdmFsdWUpOworICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG9iamVjdDsK
KyAgICBib29sIGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNPYmplY3Qob2JqZWN0KTsKKyAgICBB
U1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQpOworCisgICAgaW50IGZv
dW5kUHJvcGVydGllc0NvdW50ID0gMDsKKyAgICB7CisgICAgICAgIGF1dG8gb2JqUG9zID0gb2Jq
ZWN0LT5maW5kKCJvYmoiX3MpOworICAgICAgICBpZiAob2JqUG9zICE9IG9iamVjdC0+ZW5kKCkp
IHsKKyAgICAgICAgICAgIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6
UmVjdXJzaXZlT2JqZWN0Mj46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKG9ialBvcy0+dmFs
dWUuZ2V0KCkpOworICAgICAgICAgICAgKytmb3VuZFByb3BlcnRpZXNDb3VudDsKKyAgICAgICAg
fQorICAgIH0KKyAgICBpZiAoZm91bmRQcm9wZXJ0aWVzQ291bnQgIT0gb2JqZWN0LT5zaXplKCkp
CisgICAgICAgIEZBVEFMKCJVbmV4cGVjdGVkIHByb3BlcnRpZXMgaW4gb2JqZWN0OiAlc1xuIiwg
b2JqZWN0LT50b0pTT05TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7CisjZWxzZSAvLyBBU1NFUlRf
RU5BQkxFRAorICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7CisjZW5kaWYgLy8gQVNTRVJUX0VOQUJM
RUQKK30KKwordm9pZCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJl
Y3Vyc2l2ZU9iamVjdDI+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShKU09OOjpWYWx1ZSog
dmFsdWUpCit7CisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICBBU1NFUlRfQVJHKHZhbHVlLCB2YWx1
ZSk7CisgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gb2JqZWN0OworICAgIGJvb2wgY2FzdFN1Y2Nl
ZWRlZCA9IHZhbHVlLT5hc09iamVjdChvYmplY3QpOworICAgIEFTU0VSVF9VTlVTRUQoY2FzdFN1
Y2NlZWRlZCwgY2FzdFN1Y2NlZWRlZCk7CisKKyAgICBpbnQgZm91bmRQcm9wZXJ0aWVzQ291bnQg
PSAwOworICAgIHsKKyAgICAgICAgYXV0byBvYmpQb3MgPSBvYmplY3QtPmZpbmQoIm9iaiJfcyk7
CisgICAgICAgIGlmIChvYmpQb3MgIT0gb2JqZWN0LT5lbmQoKSkgeworICAgICAgICAgICAgQmlu
ZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QxPjo6
YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUob2JqUG9zLT52YWx1ZS5nZXQoKSk7CisgICAgICAg
ICAgICArK2ZvdW5kUHJvcGVydGllc0NvdW50OworICAgICAgICB9CisgICAgfQorICAgIGlmIChm
b3VuZFByb3BlcnRpZXNDb3VudCAhPSBvYmplY3QtPnNpemUoKSkKKyAgICAgICAgRkFUQUwoIlVu
ZXhwZWN0ZWQgcHJvcGVydGllcyBpbiBvYmplY3Q6ICVzXG4iLCBvYmplY3QtPnRvSlNPTlN0cmlu
ZygpLmFzY2lpKCkuZGF0YSgpKTsKKyNlbHNlIC8vIEFTU0VSVF9FTkFCTEVECisgICAgVU5VU0VE
X1BBUkFNKHZhbHVlKTsKKyNlbmRpZiAvLyBBU1NFUlRfRU5BQkxFRAorfQorCit9IC8vIG5hbWVz
cGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0
eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4K
KworCisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAi
Y29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKwor
I2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zLmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKworbmFtZXNw
YWNlIEluc3BlY3RvciB7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJv
dG9jb2wuaD4KKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50
ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAorQGVuZAorCisKKyMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZp
Z3VyYXRpb24uaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENv
cmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKwordXNpbmcgbmFtZXNw
YWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRp
b24KK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwor
fQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3Bl
Y3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOwor
ICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxl
cik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQor
CistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKK0BlbmQKKwor
CisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgi
CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9y
OworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorCisj
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KKy8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0
aW9uLmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4K
KworCitAY2xhc3MgVGVzdFByb3RvY29sVGVzdFR5cGVOZWVkaW5nQ2FzdDsKK0BjbGFzcyBUZXN0
UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MTsKK0BjbGFzcyBUZXN0UHJvdG9jb2xUZXN0UmVj
dXJzaXZlT2JqZWN0MjsKKworCit0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9j
b2xUZXN0VW5jYXN0ZWRBbmltYWxzKSB7CisgICAgVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5p
bWFsc1BpZ3MsCisgICAgVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc0Nvd3MsCisgICAg
VGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc0NhdHMsCisgICAgVGVzdFByb3RvY29sVGVz
dFVuY2FzdGVkQW5pbWFsc0hlbnMsCit9OworCit0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBU
ZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFscykgeworICAgIFRlc3RQcm90b2NvbFRlc3RDYXN0
ZWRBbmltYWxzRHVja3MsCisgICAgVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHNIZW5zLAor
ICAgIFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzQ3Jvd3MsCisgICAgVGVzdFByb3RvY29s
VGVzdENhc3RlZEFuaW1hbHNGbGFtaW5nb3MsCit9OworCisKK19fYXR0cmlidXRlX18oKHZpc2li
aWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUZXN0VHlwZU5lZWRp
bmdDYXN0IDogUldJUHJvdG9jb2xKU09OT2JqZWN0CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQ
YXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKKy0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilq
c29uT2JqZWN0OworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoU3RyaW5nOihOU1N0cmluZyAqKXN0
cmluZyBudW1iZXI6KGludCludW1iZXIgYW5pbWFsczooVGVzdFByb3RvY29sVGVzdENhc3RlZEFu
aW1hbHMpYW5pbWFscyBpZGVudGlmaWVyOihpbnQpaWRlbnRpZmllciB0cmVlOihUZXN0UHJvdG9j
b2xUZXN0UmVjdXJzaXZlT2JqZWN0MSAqKXRyZWU7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkg
KG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKnN0cmluZzsKKy8qIHJlcXVpcmVkICovIEBwcm9w
ZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCBudW1iZXI7CisvKiByZXF1aXJlZCAqLyBAcHJv
cGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFscyBh
bmltYWxzOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgaW50
IGlkZW50aWZpZXI7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWlu
KSBUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSAqdHJlZTsKK0BlbmQKKworX19hdHRy
aWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2Nv
bFRlc3RSZWN1cnNpdmVPYmplY3QxIDogUldJUHJvdG9jb2xKU09OT2JqZWN0CistIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5
bG9hZDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2Nv
bEpTT05PYmplY3QgKilqc29uT2JqZWN0OworLyogb3B0aW9uYWwgKi8gQHByb3BlcnR5IChub25h
dG9taWMsIHJldGFpbikgVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDIgKm9iajsKK0Bl
bmQKKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNl
IFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QyIDogUldJUHJvdG9jb2xKU09OT2JqZWN0
CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcg
KiwgaWQ+ICopcGF5bG9hZDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0
OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OworLyogb3B0aW9uYWwgKi8gQHBy
b3BlcnR5IChub25hdG9taWMsIHJldGFpbikgVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVj
dDEgKm9iajsKK0BlbmQKKworCisKKworCisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90
b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4KKworIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2wuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMu
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0
ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRl
LmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xs
ZXIuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKKworCisKKyMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sSW50ZXJuYWwuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJl
cXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0IDxXZWJJbnNw
ZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0
b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+CitPcHRpb25hbDxPYmpDRW51
bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKKworCitpbmxp
bmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFs
cyB2YWx1ZSkKK3sKKyAgICBzd2l0Y2godmFsdWUpIHsKKyAgICBjYXNlIFRlc3RQcm90b2NvbFRl
c3RVbmNhc3RlZEFuaW1hbHNQaWdzOgorICAgICAgICByZXR1cm4gIlBpZ3MiX3M7CisgICAgY2Fz
ZSBUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzQ293czoKKyAgICAgICAgcmV0dXJuICJD
b3dzIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc0NhdHM6Cisg
ICAgICAgIHJldHVybiAiQ2F0cyJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbFRlc3RVbmNhc3Rl
ZEFuaW1hbHNIZW5zOgorICAgICAgICByZXR1cm4gIkhlbnMiX3M7CisgICAgfQorfQorCit0ZW1w
bGF0ZTw+CitpbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFscz4g
ZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVl
ID09ICJQaWdzIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1h
bHNQaWdzOworICAgIGlmICh2YWx1ZSA9PSAiQ293cyIpCisgICAgICAgIHJldHVybiBUZXN0UHJv
dG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzQ293czsKKyAgICBpZiAodmFsdWUgPT0gIkNhdHMiKQor
ICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc0NhdHM7CisgICAg
aWYgKHZhbHVlID09ICJIZW5zIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFRlc3RVbmNh
c3RlZEFuaW1hbHNIZW5zOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK2lubGluZSBT
dHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFscyB2YWx1
ZSkKK3sKKyAgICBzd2l0Y2godmFsdWUpIHsKKyAgICBjYXNlIFRlc3RQcm90b2NvbFRlc3RDYXN0
ZWRBbmltYWxzRHVja3M6CisgICAgICAgIHJldHVybiAiRHVja3MiX3M7CisgICAgY2FzZSBUZXN0
UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFsc0hlbnM6CisgICAgICAgIHJldHVybiAiSGVucyJfczsK
KyAgICBjYXNlIFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzQ3Jvd3M6CisgICAgICAgIHJl
dHVybiAiQ3Jvd3MiX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFsc0Zs
YW1pbmdvczoKKyAgICAgICAgcmV0dXJuICJGbGFtaW5nb3MiX3M7CisgICAgfQorfQorCit0ZW1w
bGF0ZTw+CitpbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHM+IGZy
b21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9
PSAiRHVja3MiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHNE
dWNrczsKKyAgICBpZiAodmFsdWUgPT0gIkhlbnMiKQorICAgICAgICByZXR1cm4gVGVzdFByb3Rv
Y29sVGVzdENhc3RlZEFuaW1hbHNIZW5zOworICAgIGlmICh2YWx1ZSA9PSAiQ3Jvd3MiKQorICAg
ICAgICByZXR1cm4gVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHNDcm93czsKKyAgICBpZiAo
dmFsdWUgPT0gIkZsYW1pbmdvcyIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xUZXN0Q2Fz
dGVkQW5pbWFsc0ZsYW1pbmdvczsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
Lm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVu
dGltZS1jYXN0cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorCisjaW1wb3J0ICJU
ZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKKyNpbXBv
cnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisKK3VzaW5n
IG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zIChUZXN0RG9tYWluKQorCisrICh2b2lkKV9wYXJzZVR5cGVOZWVkaW5nQ2FzdDooVGVz
dFByb3RvY29sVGVzdFR5cGVOZWVkaW5nQ2FzdCAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQp
cGF5bG9hZDsKKysgKHZvaWQpX3BhcnNlQ2FzdGVkT2JqZWN0SWQ6KE5TTnVtYmVyICoqKW91dFZh
bHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworKyAodm9pZClfcGFyc2VVbmNhc3RlZE9iamVj
dElkOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZv
aWQpX3BhcnNlVW5jYXN0ZWRBbmltYWxzOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9h
ZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNlQ2FzdGVkQW5pbWFsczooTlNOdW1iZXIgKiop
b3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisrICh2b2lkKV9wYXJzZVJlY3Vyc2l2
ZU9iamVjdDE6KFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxICoqKW91dFZhbHVlIGZy
b21QYXlsb2FkOihpZClwYXlsb2FkOworKyAodm9pZClfcGFyc2VSZWN1cnNpdmVPYmplY3QyOihU
ZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MiAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDoo
aWQpcGF5bG9hZDsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zIChUZXN0RG9tYWluKQorCisrICh2b2lkKV9wYXJzZVR5cGVOZWVkaW5nQ2FzdDoo
VGVzdFByb3RvY29sVGVzdFR5cGVOZWVkaW5nQ2FzdCAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDoo
aWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwg
W05TRGljdGlvbmFyeSBjbGFzc10pOworICAgICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sVGVz
dFR5cGVOZWVkaW5nQ2FzdCBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOworfQorCisr
ICh2b2lkKV9wYXJzZUNhc3RlZE9iamVjdElkOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5
bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5
bG9hZCwgW05TTnVtYmVyIGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gKE5TTnVtYmVyICopcGF5
bG9hZDsKK30KKworKyAodm9pZClfcGFyc2VVbmNhc3RlZE9iamVjdElkOihOU051bWJlciAqKilv
dXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfQkFEX1RZUEUocGF5bG9hZCwgW05TTnVtYmVyIGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0g
KE5TTnVtYmVyICopcGF5bG9hZDsKK30KKworKyAodm9pZClfcGFyc2VVbmNhc3RlZEFuaW1hbHM6
KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKKyAg
ICBPcHRpb25hbDxUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzPiByZXN1bHQgPSBJbnNw
ZWN0b3I6OmZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxz
PihwYXlsb2FkKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9FTlVNX1ZBTFVFKHJlc3Vs
dCwgQCJVbmNhc3RlZEFuaW1hbHMiKTsKKyAgICAqb3V0VmFsdWUgPSBAKHJlc3VsdC52YWx1ZSgp
KTsKK30KKworKyAodm9pZClfcGFyc2VDYXN0ZWRBbmltYWxzOihOU051bWJlciAqKilvdXRWYWx1
ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFE
X1RZUEUocGF5bG9hZCwgW05TU3RyaW5nIGNsYXNzXSk7CisgICAgT3B0aW9uYWw8VGVzdFByb3Rv
Y29sVGVzdENhc3RlZEFuaW1hbHM+IHJlc3VsdCA9IEluc3BlY3Rvcjo6ZnJvbVByb3RvY29sU3Ry
aW5nPFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzPihwYXlsb2FkKTsKKyAgICBUSFJPV19F
WENFUFRJT05fRk9SX0JBRF9FTlVNX1ZBTFVFKHJlc3VsdCwgQCJDYXN0ZWRBbmltYWxzIik7Cisg
ICAgKm91dFZhbHVlID0gQChyZXN1bHQudmFsdWUoKSk7Cit9CisKKysgKHZvaWQpX3BhcnNlUmVj
dXJzaXZlT2JqZWN0MTooVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgKiopb3V0VmFs
dWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JB
RF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSBb
W1Rlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6
cGF5bG9hZF07Cit9CisKKysgKHZvaWQpX3BhcnNlUmVjdXJzaXZlT2JqZWN0MjooVGVzdFByb3Rv
Y29sVGVzdFJlY3Vyc2l2ZU9iamVjdDIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxv
YWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rp
b25hcnkgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbFRlc3RSZWN1cnNp
dmVPYmplY3QyIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07Cit9CisKK0BlbmQKKwor
CisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorCisjIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KKy8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJu
YWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0
IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorI2ltcG9ydCA8
d3RmL0Fzc2VydGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5h
bWVzcGFjZSBJbnNwZWN0b3I7CisKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFRlc3RU
eXBlTmVlZGluZ0Nhc3QKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVs
bCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZAoreworICAgIGlmICghKHNl
bGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0Aic3RyaW5nIl0sIEAic3RyaW5n
Iik7CisgICAgc2VsZi5zdHJpbmcgPSBwYXlsb2FkW0Aic3RyaW5nIl07CisKKyAgICBUSFJPV19F
WENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJudW1iZXIiXSwgQCJudW1i
ZXIiKTsKKyAgICBzZWxmLm51bWJlciA9IFtwYXlsb2FkW0AibnVtYmVyIl0gaW50ZWdlclZhbHVl
XTsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtA
ImFuaW1hbHMiXSwgQCJhbmltYWxzIik7CisgICAgT3B0aW9uYWw8VGVzdFByb3RvY29sVGVzdENh
c3RlZEFuaW1hbHM+IGFuaW1hbHMgPSBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sVGVz
dENhc3RlZEFuaW1hbHM+KHBheWxvYWRbQCJhbmltYWxzIl0pOworICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfQkFEX0VOVU1fVkFMVUUoYW5pbWFscywgQCJhbmltYWxzIik7CisgICAgc2VsZi5hbmlt
YWxzID0gYW5pbWFscy52YWx1ZSgpOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJF
RF9QUk9QRVJUWShwYXlsb2FkW0AiaWQiXSwgQCJpZCIpOworICAgIHNlbGYuaWRlbnRpZmllciA9
IFtwYXlsb2FkW0AiaWQiXSBpbnRlZ2VyVmFsdWVdOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AidHJlZSJdLCBAInRyZWUiKTsKKyAgICBzZWxm
LnRyZWUgPSBbW1Rlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxIGFsbG9jXSBpbml0V2l0
aFBheWxvYWQ6cGF5bG9hZFtAInRyZWUiXV07CisKKyAgICByZXR1cm4gc2VsZjsKK30KKy0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3Qg
KilvYmplY3QKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoSlNPTk9iamVjdDpb
b2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0KCldKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAg
IHJldHVybiBzZWxmOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhTdHJpbmc6KE5TU3Ry
aW5nICopc3RyaW5nIG51bWJlcjooaW50KW51bWJlciBhbmltYWxzOihUZXN0UHJvdG9jb2xUZXN0
Q2FzdGVkQW5pbWFscylhbmltYWxzIGlkZW50aWZpZXI6KGludClpZGVudGlmaWVyIHRyZWU6KFRl
c3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxICopdHJlZQoreworICAgIGlmICghKHNlbGYg
PSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShzdHJpbmcsIEAic3RyaW5nIik7CisgICAgVEhST1df
RVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWSh0cmVlLCBAInRyZWUiKTsKKworICAgIHNl
bGYuc3RyaW5nID0gc3RyaW5nOworICAgIHNlbGYubnVtYmVyID0gbnVtYmVyOworICAgIHNlbGYu
YW5pbWFscyA9IGFuaW1hbHM7CisgICAgc2VsZi5pZGVudGlmaWVyID0gaWRlbnRpZmllcjsKKyAg
ICBzZWxmLnRyZWUgPSB0cmVlOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpc2V0
U3RyaW5nOihOU1N0cmluZyAqKXN0cmluZworeworICAgIFtzdXBlciBzZXRTdHJpbmc6c3RyaW5n
IGZvcktleTpAInN0cmluZyJdOworfQorCistIChOU1N0cmluZyAqKXN0cmluZworeworICAgIHJl
dHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAic3RyaW5nIl07Cit9CisKKy0gKHZvaWQpc2V0TnVt
YmVyOihpbnQpbnVtYmVyCit7CisgICAgW3N1cGVyIHNldEludGVnZXI6bnVtYmVyIGZvcktleTpA
Im51bWJlciJdOworfQorCistIChpbnQpbnVtYmVyCit7CisgICAgcmV0dXJuIFtzdXBlciBpbnRl
Z2VyRm9yS2V5OkAibnVtYmVyIl07Cit9CisKKy0gKHZvaWQpc2V0QW5pbWFsczooVGVzdFByb3Rv
Y29sVGVzdENhc3RlZEFuaW1hbHMpYW5pbWFscworeworICAgIFtzdXBlciBzZXRTdHJpbmc6dG9Q
cm90b2NvbFN0cmluZyhhbmltYWxzKSBmb3JLZXk6QCJhbmltYWxzIl07Cit9CisKKy0gKFRlc3RQ
cm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzKWFuaW1hbHMKK3sKKyAgICByZXR1cm4gZnJvbVByb3Rv
Y29sU3RyaW5nPFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzPihbc3VwZXIgc3RyaW5nRm9y
S2V5OkAiYW5pbWFscyJdKS52YWx1ZSgpOworfQorCistICh2b2lkKXNldElkZW50aWZpZXI6KGlu
dClpZGVudGlmaWVyCit7CisgICAgW3N1cGVyIHNldEludGVnZXI6aWRlbnRpZmllciBmb3JLZXk6
QCJpZCJdOworfQorCistIChpbnQpaWRlbnRpZmllcgoreworICAgIHJldHVybiBbc3VwZXIgaW50
ZWdlckZvcktleTpAImlkIl07Cit9CisKKy0gKHZvaWQpc2V0VHJlZTooVGVzdFByb3RvY29sVGVz
dFJlY3Vyc2l2ZU9iamVjdDEgKil0cmVlCit7CisgICAgW3N1cGVyIHNldE9iamVjdDp0cmVlIGZv
cktleTpAInRyZWUiXTsKK30KKworLSAoVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEg
Kil0cmVlCit7CisgICAgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvYmplY3QgPSBbc3VwZXIgb2Jq
ZWN0Rm9yS2V5OkAidHJlZSJdOworICAgIGlmICghb2JqZWN0KQorICAgICAgICByZXR1cm4gbmls
OworICAgIHJldHVybiBbW1Rlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxIGFsbG9jXSBp
bml0V2l0aEpTT05PYmplY3Q6W1tzdXBlciBvYmplY3RGb3JLZXk6QCJ0cmVlIl0gdG9KU09OT2Jq
ZWN0XS5nZXQoKV07Cit9CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFRl
c3RSZWN1cnNpdmVPYmplY3QxCisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5v
bm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQKK3sKKyAgICBpZiAo
IShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHNlbGYu
b2JqID0gW1tUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MiBhbGxvY10gaW5pdFdpdGhQ
YXlsb2FkOnBheWxvYWRbQCJvYmoiXV07CisKKyAgICByZXR1cm4gc2VsZjsKK30KKy0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilv
YmplY3QKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoSlNPTk9iamVjdDpbb2Jq
ZWN0IHRvSlNPTk9iamVjdF0uZ2V0KCldKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHJl
dHVybiBzZWxmOworfQorCistICh2b2lkKXNldE9iajooVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2
ZU9iamVjdDIgKilvYmoKK3sKKyAgICBbc3VwZXIgc2V0T2JqZWN0Om9iaiBmb3JLZXk6QCJvYmoi
XTsKK30KKworLSAoVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDIgKilvYmoKK3sKKyAg
ICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9iamVjdCA9IFtzdXBlciBvYmplY3RGb3JLZXk6QCJv
YmoiXTsKKyAgICBpZiAoIW9iamVjdCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICByZXR1cm4g
W1tUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MiBhbGxvY10gaW5pdFdpdGhKU09OT2Jq
ZWN0Oltbc3VwZXIgb2JqZWN0Rm9yS2V5OkAib2JqIl0gdG9KU09OT2JqZWN0XS5nZXQoKV07Cit9
CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmpl
Y3QyCisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9u
YXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVy
IGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHNlbGYub2JqID0gW1tUZXN0UHJv
dG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRb
QCJvYmoiXV07CisKKyAgICByZXR1cm4gc2VsZjsKK30KKy0gKGluc3RhbmNldHlwZSlpbml0V2l0
aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilvYmplY3QKK3sKKyAgICBp
ZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoSlNPTk9iamVjdDpbb2JqZWN0IHRvSlNPTk9iamVj
dF0uZ2V0KCldKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHJldHVybiBzZWxmOworfQor
CistICh2b2lkKXNldE9iajooVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgKilvYmoK
K3sKKyAgICBbc3VwZXIgc2V0T2JqZWN0Om9iaiBmb3JLZXk6QCJvYmoiXTsKK30KKworLSAoVGVz
dFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgKilvYmoKK3sKKyAgICBSV0lQcm90b2NvbEpT
T05PYmplY3QgKm9iamVjdCA9IFtzdXBlciBvYmplY3RGb3JLZXk6QCJvYmoiXTsKKyAgICBpZiAo
IW9iamVjdCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICByZXR1cm4gW1tUZXN0UHJvdG9jb2xU
ZXN0UmVjdXJzaXZlT2JqZWN0MSBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0Oltbc3VwZXIgb2Jq
ZWN0Rm9yS2V5OkAib2JqIl0gdG9KU09OT2JqZWN0XS5nZXQoKV07Cit9CisKK0BlbmQKKworCisj
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS13aXRoLW9w
ZW4tcGFyYW1ldGVycy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24t
cmVzdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5iYWNiNjU2NWE4
MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0
CkBAIC0wLDAgKzEsMTEyOSBAQAorIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21t
YW5kcy5qcworLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtd2l0aC1vcGVu
LXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2lm
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCisjaW5jbHVkZSAiVGVz
dFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250
ZW5kUm91dGVyLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hl
cihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNw
YXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQorICAgIEJhY2tlbmREaXNwYXRjaGVyKiBi
YWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0
KCk7IH0KK3ByaXZhdGU6CisgICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmRE
aXNwYXRjaGVyOworfTsKKworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRp
ZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyMjIyBFbmQgRmls
ZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBU
ZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSB0eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9j
b2xPYmplY3RzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNl
IEluc3BlY3RvciB7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCisKKworfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMu
aAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3Rm
L0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKKyNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgi
CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKK25h
bWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMj
IyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6
IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSB0eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJv
dG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEZy
b250ZW5kUm91dGVyOworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTog
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5k
RGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13
aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0RnJvbnRlbmRE
aXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRl
bmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJ
bnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBU
ZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bE9iamVjdHMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtd2l0aC1v
cGVuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
clByb3RvY29sVHlwZXMuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKKworCisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKworCisvLyBGb3J3
YXJkIGRlY2xhcmF0aW9ucy4KK25hbWVzcGFjZSBUZXN0IHsKK2NsYXNzIE5vT3BlblBhcmFtZXRl
cnM7CitjbGFzcyBPcGVuUGFyYW1ldGVyczsKK30gLy8gVGVzdAorLy8gRW5kIG9mIGZvcndhcmQg
ZGVjbGFyYXRpb25zLgorCisKKworCituYW1lc3BhY2UgVGVzdCB7CitjbGFzcyBOb09wZW5QYXJh
bWV0ZXJzIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgeworcHVibGljOgorICAgIGVudW0gewor
ICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCisgICAgICAgIE9uZVNldCA9IDEgPDwgMCwKKyAgICAg
ICAgVHdvU2V0ID0gMSA8PCAxLAorICAgICAgICBBbGxGaWVsZHNTZXQgPSAoT25lU2V0IHwgVHdv
U2V0KQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CisgICAgY2xhc3MgQnVpbGRl
ciB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7
CisKKyAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2Fz
dFN0YXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0
PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgQnVp
bGRlcihSZWY8LypOb09wZW5QYXJhbWV0ZXJzKi9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQorICAg
ICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRf
aW5fbm9uX2luaXRfc3RhdGUpOworICAgICAgICB9CisgICAgICAgIGZyaWVuZCBjbGFzcyBOb09w
ZW5QYXJhbWV0ZXJzOworICAgIHB1YmxpYzoKKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgT25l
U2V0PiYgc2V0T25lKGRvdWJsZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoIShTVEFURSAmIE9uZVNldCksIHByb3BlcnR5X29uZV9hbHJlYWR5X3NldCk7Cisg
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0RG91YmxlKCJvbmUiX3MsIHZhbHVlKTsKKyAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8T25lU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVp
bGRlcjxTVEFURSB8IFR3b1NldD4mIHNldFR3byhkb3VibGUgdmFsdWUpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUd29TZXQpLCBwcm9wZXJ0eV90d29f
YWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldERvdWJsZSgidHdvIl9zLCB2
YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFR3b1NldD4oKTsKKyAgICAgICAg
fQorCisgICAgICAgIFJlZjxOb09wZW5QYXJhbWV0ZXJzPiByZWxlYXNlKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRf
aXNfbm90X3JlYWR5KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihOb09wZW5Q
YXJhbWV0ZXJzKSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0KSwgY2Fubm90X2Nhc3QpOworCisgICAg
ICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uUmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5v
bk51bGwoKTsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gV1RGTW92ZSgqcmVpbnRlcnByZXRf
Y2FzdDxSZWY8Tm9PcGVuUGFyYW1ldGVycz4qPigmanNvblJlc3VsdCkpOworICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvKgorICAgICAqIFN5bnRo
ZXRpYyBjb25zdHJ1Y3RvcjoKKyAgICAgKiBSZWY8Tm9PcGVuUGFyYW1ldGVycz4gcmVzdWx0ID0g
Tm9PcGVuUGFyYW1ldGVyczo6Y3JlYXRlKCkKKyAgICAgKiAgICAgLnNldE9uZSguLi4pCisgICAg
ICogICAgIC5zZXRUd28oLi4uKQorICAgICAqICAgICAucmVsZWFzZSgpOworICAgICAqLworICAg
IHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOworICAgIH0K
K307CisKK2NsYXNzIE9wZW5QYXJhbWV0ZXJzIDogcHVibGljIEpTT046Ok9iamVjdCB7CitwdWJs
aWM6CisgICAgZW51bSB7CisgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKKyAgICAgICAgQWxwaGFT
ZXQgPSAxIDw8IDAsCisgICAgICAgIEJldGFTZXQgPSAxIDw8IDEsCisgICAgICAgIEFsbEZpZWxk
c1NldCA9IChBbHBoYVNldCB8IEJldGFTZXQpCisgICAgfTsKKworICAgIHRlbXBsYXRlPGludCBT
VEFURT4KKyAgICBjbGFzcyBCdWlsZGVyIHsKKyAgICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8
SlNPTjo6T2JqZWN0PiBtX3Jlc3VsdDsKKworICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVp
bGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7Cisg
ICAgICAgIH0KKworICAgICAgICBCdWlsZGVyKFJlZjwvKk9wZW5QYXJhbWV0ZXJzKi9KU09OOjpP
YmplY3Q+JiYgb2JqZWN0KQorICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkp
CisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRz
U2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAgICAgICB9CisgICAg
ICAgIGZyaWVuZCBjbGFzcyBPcGVuUGFyYW1ldGVyczsKKyAgICBwdWJsaWM6CisKKyAgICAgICAg
QnVpbGRlcjxTVEFURSB8IEFscGhhU2V0PiYgc2V0QWxwaGEoZG91YmxlIHZhbHVlKQorICAgICAg
ICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQWxwaGFTZXQpLCBwcm9w
ZXJ0eV9hbHBoYV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0RG91Ymxl
KCJhbHBoYSJfcywgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxBbHBoYVNl
dD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBCZXRhU2V0PiYgc2V0
QmV0YShkb3VibGUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBCZXRhU2V0KSwgcHJvcGVydHlfYmV0YV9hbHJlYWR5X3NldCk7CisgICAgICAg
ICAgICBtX3Jlc3VsdC0+c2V0RG91YmxlKCJiZXRhIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPEJldGFTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBSZWY8T3Bl
blBhcmFtZXRlcnM+IHJlbGVhc2UoKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FT
U0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOworICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKE9wZW5QYXJhbWV0ZXJzKSA9PSBzaXplb2YoSlNP
Tjo6T2JqZWN0KSwgY2Fubm90X2Nhc3QpOworCisgICAgICAgICAgICBSZWY8SlNPTjo6T2JqZWN0
PiBqc29uUmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKKyAgICAgICAgICAgIGF1
dG8gcmVzdWx0ID0gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8T3BlblBhcmFtZXRlcnM+
Kj4oJmpzb25SZXN1bHQpKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0K
KyAgICB9OworCisgICAgLyoKKyAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CisgICAgICog
UmVmPE9wZW5QYXJhbWV0ZXJzPiByZXN1bHQgPSBPcGVuUGFyYW1ldGVyczo6Y3JlYXRlKCkKKyAg
ICAgKiAgICAgLnNldEFscGhhKC4uLikKKyAgICAgKiAgICAgLnNldEJldGEoLi4uKQorICAgICAq
ICAgICAucmVsZWFzZSgpOworICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0
PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpT
T046Ok9iamVjdDo6Y3JlYXRlKCkpOworICAgIH0KKworICAgIC8vIFByb3BlcnR5IG5hbWVzIGZv
ciB0eXBlIGdlbmVyYXRlZCBhcyBvcGVuLgorICAgIE5vbmUgc3RhdGljIGNvbnN0IGNoYXIqIEFs
cGhhOworfTsKKworfSAvLyBUZXN0CisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0
cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorCisjaW5jbHVkZSA8d3Rm
L09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworY29uc3QgY2hhciogSW5zcGVj
dG9yOjpQcm90b2NvbDo6VGVzdDo6T3BlblBhcmFtZXRlcnM6OkFscGhhID0gImFscGhhIjsKKwor
fSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWlu
UHRyLmg+CisKKworCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCit9IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMu
aAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVy
cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBv
cnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgi
CisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2luY2x1ZGUgIlRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisKK25h
bWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFBy
b3RvY29sLmg+CisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGlu
dGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKK0BlbmQKKworCisj
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorCisjIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1
cmF0aW9uLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW1wb3J0ICJU
ZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9B
dWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2ltcG9ydCA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+CisKK3VzaW5nIG5hbWVzcGFj
ZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9u
Cit7CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKK30K
KworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0
b3JDb250cm9sbGVyKiljb250cm9sbGVyCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAg
ICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNvbnRyb2xsZXIp
OworICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKKyAgICByZXR1cm4gc2VsZjsKK30KKwor
LSAodm9pZClkZWFsbG9jCit7CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCitAZW5kCisKKwor
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbElu
dGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2lt
cG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKwor
CisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgor
CisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+CisKKworQGNs
YXNzIFRlc3RQcm90b2NvbFRlc3ROb09wZW5QYXJhbWV0ZXJzOworQGNsYXNzIFRlc3RQcm90b2Nv
bFRlc3RPcGVuUGFyYW1ldGVyczsKKworCisKKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAo
ImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbFRlc3ROb09wZW5QYXJhbWV0ZXJz
IDogUldJUHJvdG9jb2xKU09OT2JqZWN0CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2Fk
OihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKKy0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2Jq
ZWN0OworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoT25lOihkb3VibGUpb25lIHR3bzooZG91Ymxl
KXR3bzsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGRvdWJs
ZSBvbmU7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBkb3Vi
bGUgdHdvOworQGVuZAorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkK
K0BpbnRlcmZhY2UgVGVzdFByb3RvY29sVGVzdE9wZW5QYXJhbWV0ZXJzIDogUldJUHJvdG9jb2xK
U09OT2JqZWN0CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8
TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3Rv
Y29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OworLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoQWxwaGE6KGRvdWJsZSlhbHBoYSBiZXRhOihkb3VibGUpYmV0YTsKKy8q
IHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGRvdWJsZSBhbHBoYTsK
Ky8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGRvdWJsZSBiZXRh
OworQGVuZAorCisKKworCisKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVp
bGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5o
CisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90
b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKKyNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2lt
cG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xJbnRlcm5hbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtd2l0aC1vcGVuLXBh
cmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90
b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3RlbXBs
YXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KK09wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVBy
b3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOworCisKKworfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgK
KworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgi
CisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0
b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5z
cGVjdG9yOworCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoVGVzdERv
bWFpbikKKworKyAodm9pZClfcGFyc2VOb09wZW5QYXJhbWV0ZXJzOihUZXN0UHJvdG9jb2xUZXN0
Tm9PcGVuUGFyYW1ldGVycyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysg
KHZvaWQpX3BhcnNlT3BlblBhcmFtZXRlcnM6KFRlc3RQcm90b2NvbFRlc3RPcGVuUGFyYW1ldGVy
cyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKworQGVuZAorCitAaW1wbGVt
ZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChUZXN0RG9tYWluKQorCisrICh2
b2lkKV9wYXJzZU5vT3BlblBhcmFtZXRlcnM6KFRlc3RQcm90b2NvbFRlc3ROb09wZW5QYXJhbWV0
ZXJzICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7CisgICAg
Km91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xUZXN0Tm9PcGVuUGFyYW1ldGVycyBhbGxvY10gaW5p
dFdpdGhQYXlsb2FkOnBheWxvYWRdOworfQorCisrICh2b2lkKV9wYXJzZU9wZW5QYXJhbWV0ZXJz
OihUZXN0UHJvdG9jb2xUZXN0T3BlblBhcmFtZXRlcnMgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6
KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQs
IFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbFRl
c3RPcGVuUGFyYW1ldGVycyBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOworfQorCitA
ZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKwor
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbElu
dGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2lt
cG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKyNpbXBv
cnQgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2lu
ZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xU
ZXN0Tm9PcGVuUGFyYW1ldGVycworCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihu
b25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCit7CisgICAgaWYg
KCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBUSFJP
V19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJvbmUiXSwgQCJvbmUi
KTsKKyAgICBzZWxmLm9uZSA9IFtwYXlsb2FkW0Aib25lIl0gZG91YmxlVmFsdWVdOworCisgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AidHdvIl0sIEAi
dHdvIik7CisgICAgc2VsZi50d28gPSBbcGF5bG9hZFtAInR3byJdIGRvdWJsZVZhbHVlXTsKKwor
ICAgIHJldHVybiBzZWxmOworfQorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmpl
Y3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9iamVjdAoreworICAgIGlmICghKHNlbGYgPSBb
c3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmplY3QgdG9KU09OT2JqZWN0XS5nZXQoKV0pKQor
ICAgICAgICByZXR1cm4gbmlsOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aE9uZTooZG91YmxlKW9uZSB0d286KGRvdWJsZSl0d28KK3sKKyAgICBpZiAo
IShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHNlbGYu
b25lID0gb25lOworICAgIHNlbGYudHdvID0gdHdvOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisK
Ky0gKHZvaWQpc2V0T25lOihkb3VibGUpb25lCit7CisgICAgW3N1cGVyIHNldERvdWJsZTpvbmUg
Zm9yS2V5OkAib25lIl07Cit9CisKKy0gKGRvdWJsZSlvbmUKK3sKKyAgICByZXR1cm4gW3N1cGVy
IGRvdWJsZUZvcktleTpAIm9uZSJdOworfQorCistICh2b2lkKXNldFR3bzooZG91YmxlKXR3bwor
eworICAgIFtzdXBlciBzZXREb3VibGU6dHdvIGZvcktleTpAInR3byJdOworfQorCistIChkb3Vi
bGUpdHdvCit7CisgICAgcmV0dXJuIFtzdXBlciBkb3VibGVGb3JLZXk6QCJ0d28iXTsKK30KKwor
QGVuZAorCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVGVzdE9wZW5QYXJhbWV0ZXJzCisK
Ky0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5T
U3RyaW5nICosIGlkPiAqKXBheWxvYWQKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRd
KSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlS
RURfUFJPUEVSVFkocGF5bG9hZFtAImFscGhhIl0sIEAiYWxwaGEiKTsKKyAgICBzZWxmLmFscGhh
ID0gW3BheWxvYWRbQCJhbHBoYSJdIGRvdWJsZVZhbHVlXTsKKworICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImJldGEiXSwgQCJiZXRhIik7CisgICAg
c2VsZi5iZXRhID0gW3BheWxvYWRbQCJiZXRhIl0gZG91YmxlVmFsdWVdOworCisgICAgcmV0dXJu
IHNlbGY7Cit9CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJv
dG9jb2xKU09OT2JqZWN0ICopb2JqZWN0Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0
V2l0aEpTT05PYmplY3Q6W29iamVjdCB0b0pTT05PYmplY3RdLmdldCgpXSkpCisgICAgICAgIHJl
dHVybiBuaWw7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoQWxwaGE6KGRvdWJsZSlhbHBoYSBiZXRhOihkb3VibGUpYmV0YQoreworICAgIGlmICghKHNl
bGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgc2VsZi5hbHBo
YSA9IGFscGhhOworICAgIHNlbGYuYmV0YSA9IGJldGE7CisKKyAgICByZXR1cm4gc2VsZjsKK30K
KworLSAodm9pZClzZXRBbHBoYTooZG91YmxlKWFscGhhCit7CisgICAgW3N1cGVyIHNldERvdWJs
ZTphbHBoYSBmb3JLZXk6QCJhbHBoYSJdOworfQorCistIChkb3VibGUpYWxwaGEKK3sKKyAgICBy
ZXR1cm4gW3N1cGVyIGRvdWJsZUZvcktleTpAImFscGhhIl07Cit9CisKKy0gKHZvaWQpc2V0QmV0
YTooZG91YmxlKWJldGEKK3sKKyAgICBbc3VwZXIgc2V0RG91YmxlOmJldGEgZm9yS2V5OkAiYmV0
YSJdOworfQorCistIChkb3VibGUpYmV0YQoreworICAgIHJldHVybiBbc3VwZXIgZG91YmxlRm9y
S2V5OkAiYmV0YSJdOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xU
eXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL3ZlcnNpb24uanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdmVyc2lvbi5qc29uLXJlc3Vs
dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNjVmNGUyZTY2NTgKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvdmVyc2lvbi5qc29uLXJlc3VsdApAQCAtMCwwICsxLDg0NSBAQAorIyMj
IEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcworLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHZlcnNpb24uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisvLyBWZXJzaW9uRG9tYWluCitJbnNwZWN0b3JCYWNrZW5kLnJl
Z2lzdGVyRG9tYWluKCJWZXJzaW9uRG9tYWluIiwgbnVsbCk7CitJbnNwZWN0b3JCYWNrZW5kLnJl
Z2lzdGVyVmVyc2lvbigiVmVyc2lvbkRvbWFpbiIsIDQyKTsKK0luc3BlY3RvckJhY2tlbmQuYWN0
aXZhdGVEb21haW4oIlZlcnNpb25Eb21haW4iLCBudWxsKTsKKyMjIyBFbmQgRmlsZTogSW5zcGVj
dG9yQmFja2VuZENvbW1hbmRzLmpzCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJz
aW9uLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3By
YWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
KworI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwor
Y2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHZvaWQgc2V0
QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIp
IHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KKyAgICBCYWNr
ZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tl
bmREaXNwYXRjaGVyLmdldCgpOyB9Citwcml2YXRlOgorICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0
Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKK307CisKKworCisKK30gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCisjIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisj
IyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lvbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29s
T2JqZWN0cy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJ
bnNwZWN0b3IgeworCit0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKworCisKK30gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgK
KworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lvbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJU
ZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5j
bHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjaW5jbHVk
ZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgorI2VuZGlmIC8vIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsK
KworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNr
ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRj
aGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lvbi5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFs
dWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNw
ZWN0b3IgeworCitjbGFzcyBGcm9udGVuZFJvdXRlcjsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHZlcnNpb24uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEZyb250ZW5k
RGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250
ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTog
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xPYmplY3RzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+
CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisK
KworCituYW1lc3BhY2UgUHJvdG9jb2wgeworCisvLyBWZXJzaW9ucy4KK25hbWVzcGFjZSBWZXJz
aW9uRG9tYWluIHsKK3N0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgVkVSU0lPTiA9IDQyOworfSAv
LyBWZXJzaW9uRG9tYWluCisvLyBFbmQgb2YgdmVyc2lvbnMuCisKKworCisKKworCisKKworfSAv
LyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sT2JqZWN0cy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9u
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKworI2luY2x1
ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKworCit9IC8vIG5h
bWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSB2ZXJzaW9uLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNw
YXRjaGVycy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworCisKK25hbWVzcGFjZSBJ
bnNwZWN0b3IgeworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSB2ZXJzaW9uLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5k
RGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW5j
bHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW5jbHVkZSA8d3RmL0pTT05W
YWx1ZXMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK30gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQor
CisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lvbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9j
b2wuaD4KKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJm
YWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAorQGVuZAorCisKKyMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gdmVyc2lvbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKKworI2ltcG9ydCAi
VGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNw
YXRjaGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxl
QWdlbnQuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29u
dHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXJzLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxl
bWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KK3sKKyAgICBBdWdtZW50YWJsZUlu
c3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xs
ZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAg
cmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBj
b250cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAg
ICBbc3VwZXIgZGVhbGxvY107Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbENvbmZpZ3VyYXRpb24ubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50
RGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9u
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9y
dCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLmgiCisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yOworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRj
aGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisK
KyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KKworCisKKwor
CisKKworCisKKworCisKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRD
b21wYXRpYmlsaXR5T2JqZWN0cy5oPgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCisK
KyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lvbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVz
dFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1
Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMu
aD4KKworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHZlcnNpb24uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgPFdl
Ykluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KKworbmFtZXNwYWNlIElu
c3BlY3RvciB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KK09wdGlvbmFsPE9i
akNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOworCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lvbi5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNp
bXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9S
V0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0
b3I7CisKKworCisKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIK
KworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDxXZWJJ
bnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorI2ltcG9ydCA8d3RmL0Fz
c2VydGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFj
ZSBJbnNwZWN0b3I7CisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2Zh
aWwtb24tY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5q
c29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwt
b24tY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29u
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kNmRmOWU0YmQ5YwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJs
ZVR5cGUuanNvbgpAQCAtMCwwICsxLDkgQEAKK1sKK3sKKyAgICAiZG9tYWluIjogIkRvbWFpbiIs
CisgICAgImRlYnVnZ2FibGVUeXBlcyI6IFsiamF2YXNjcmlwdCJdLAorICAgICJ0YXJnZXRUeXBl
cyI6IFsid29ya2VyIl0sCisgICAgImNvbW1hbmRzIjogW3sibmFtZSI6ICJDb21tYW5kIn1dLAor
ICAgICJldmVudHMiOiBbeyJuYW1lIjogIkV2ZW50In1dCit9CitdCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1jb21tYW5k
LXRhcmdldFR5cGVzLXR5cGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlwZXMtdHlwZS5qc29uCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42NDA1OWY4NGJjZgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9m
YWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlwZXMtdHlwZS5qc29uCkBAIC0wLDAgKzEsOSBAQAorewor
ICAgICJkb21haW4iOiAiRG9tYWluIiwKKyAgICAiY29tbWFuZHMiOiBbCisgICAgICAgIHsKKyAg
ICAgICAgICAgICJuYW1lIjogIlBhZ2VPbmx5IiwKKyAgICAgICAgICAgICJ0YXJnZXRUeXBlcyI6
ICJwYWdlZSIKKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlw
ZXMtdmFsdWUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlwZXMtdmFsdWUuanNvbgpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNTAyMDQ0NzJlYzgKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1j
b21tYW5kLXRhcmdldFR5cGVzLXZhbHVlLmpzb24KQEAgLTAsMCArMSw5IEBACit7CisgICAgImRv
bWFpbiI6ICJEb21haW4iLAorICAgICJjb21tYW5kcyI6IFsKKyAgICAgICAgeworICAgICAgICAg
ICAgIm5hbWUiOiAiUGFnZU9ubHkiLAorICAgICAgICAgICAgInRhcmdldFR5cGVzIjogWyJwYWdl
ZSJdCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kb21haW4tZGVidWdnYWJsZVR5cGVz
LXR5cGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9mYWlsLW9uLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMtdHlwZS5qc29uCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45NzQ4ZjQyMzQ3MwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWRv
bWFpbi1kZWJ1Z2dhYmxlVHlwZXMtdHlwZS5qc29uCkBAIC0wLDAgKzEsOSBAQAoreworICAgICJk
b21haW4iOiAiV2ViT25seSIsCisgICAgImRlYnVnZ2FibGVUeXBlcyI6ICJ3ZWJiIiwKKyAgICAi
Y29tbWFuZHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImVuYWJsZSIKKyAg
ICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMtdmFsdWUu
anNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWls
LW9uLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMtdmFsdWUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMC4uYjI1MmRkYmQ4M2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kb21haW4t
ZGVidWdnYWJsZVR5cGVzLXZhbHVlLmpzb24KQEAgLTAsMCArMSw5IEBACit7CisgICAgImRvbWFp
biI6ICJXZWJPbmx5IiwKKyAgICAiZGVidWdnYWJsZVR5cGVzIjogWyJ3ZWJiIl0sCisgICAgImNv
bW1hbmRzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJlbmFibGUiCisgICAg
ICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21h
aW4tZGVidWdnYWJsZVR5cGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9mYWlsLW9uLWRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1k
ZWJ1Z2dhYmxlVHlwZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
Li43YWEwMjgwNDY1NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5n
LWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCkBAIC0wLDAgKzEsOCBAQAorWworeworICAgICJk
b21haW4iOiAiRG9tYWluIiwKKyAgICAiZGVidWdnYWJsZVR5cGVzIjogWyJqYXZhc2NyaXB0Il0s
CisgICAgImNvbW1hbmRzIjogW3sibmFtZSI6ICJDb21tYW5kIiwgInRhcmdldFR5cGVzIjogWyJ3
b3JrZXIiXX1dLAorICAgICJldmVudHMiOiBbeyJuYW1lIjogIkV2ZW50In1dCit9CitdCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFp
bC1vbi1kb21haW4tdGFyZ2V0VHlwZXMtdHlwZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZG9tYWluLXRhcmdldFR5cGVzLXR5cGUu
anNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZDgyMjI2NzQxNDYK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZXMtdHlwZS5qc29uCkBAIC0wLDAgKzEs
OSBAQAoreworICAgICJkb21haW4iOiAiUGFnZU9ubHkiLAorICAgICJ0YXJnZXRUeXBlcyI6ICJw
YWdlZSIsCisgICAgImNvbW1hbmRzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6
ICJlbmFibGUiCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlw
ZXMtdmFsdWUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9mYWlsLW9uLWRvbWFpbi10YXJnZXRUeXBlcy12YWx1ZS5qc29uCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5lN2IxMGQ3ZjE1NAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWRv
bWFpbi10YXJnZXRUeXBlcy12YWx1ZS5qc29uCkBAIC0wLDAgKzEsOSBAQAoreworICAgICJkb21h
aW4iOiAiUGFnZU9ubHkiLAorICAgICJ0YXJnZXRUeXBlcyI6IFsicGFnZWUiXSwKKyAgICAiY29t
bWFuZHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImVuYWJsZSIKKyAgICAg
ICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWR1cGxpY2F0ZS1jb21tYW5kLWNhbGwtcGFyYW1ldGVy
LW5hbWVzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1jYWxsLXBhcmFtZXRlci1uYW1lcy5qc29uCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5iYWI3NmNhNjI3OQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9mYWlsLW9uLWR1cGxpY2F0ZS1jb21tYW5kLWNhbGwtcGFyYW1ldGVyLW5hbWVzLmpzb24KQEAg
LTAsMCArMSwxNiBAQAoreworICAgICJkb21haW4iOiAiT3ZlcmxheSIsCisgICAgImNvbW1hbmRz
IjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJwcm9jZXNzUG9pbnRzIiwKKyAg
ICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicG9p
bnQiLCAidHlwZSI6ICJudW1iZXIiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwb2lu
dCIsICJ0eXBlIjogIm51bWJlciIgfQorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJyZXR1
cm5zIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicmVzdWx0MSIsICJ0eXBlIjogInN0
cmluZyIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInJlc3VsdDIiLCAidHlwZSI6ICJz
dHJpbmciIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWR1
cGxpY2F0ZS1jb21tYW5kLXJldHVybi1wYXJhbWV0ZXItbmFtZXMuanNvbiBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWR1cGxpY2F0ZS1jb21t
YW5kLXJldHVybi1wYXJhbWV0ZXItbmFtZXMuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMC4uYzhiYjE1YzA0YjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kdXBsaWNhdGUtY29t
bWFuZC1yZXR1cm4tcGFyYW1ldGVyLW5hbWVzLmpzb24KQEAgLTAsMCArMSwxNiBAQAoreworICAg
ICJkb21haW4iOiAiT3ZlcmxheSIsCisgICAgImNvbW1hbmRzIjogWworICAgICAgICB7CisgICAg
ICAgICAgICAibmFtZSI6ICJwcm9jZXNzUG9pbnRzIiwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJz
IjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicG9pbnQxIiwgInR5cGUiOiAibnVtYmVy
IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicG9pbnQyIiwgInR5cGUiOiAibnVtYmVy
IiB9CisgICAgICAgICAgICBdLAorICAgICAgICAgICAgInJldHVybnMiOiBbCisgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJyZXN1bHQiLCAidHlwZSI6ICJzdHJpbmciIH0sCisgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJyZXN1bHQiLCAidHlwZSI6ICJzdHJpbmciIH0KKyAgICAgICAgICAg
IF0KKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWR1cGxpY2F0ZS1ldmVudC1wYXJhbWV0
ZXItbmFtZXMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9mYWlsLW9uLWR1cGxpY2F0ZS1ldmVudC1wYXJhbWV0ZXItbmFtZXMuanNvbgpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZDNkM2IzY2M2NDIKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFp
bC1vbi1kdXBsaWNhdGUtZXZlbnQtcGFyYW1ldGVyLW5hbWVzLmpzb24KQEAgLTAsMCArMSwxMiBA
QAoreworICAgICJkb21haW4iOiAiT3ZlcmxheSIsCisgICAgImV2ZW50cyI6IFsKKyAgICAgICAg
eworICAgICAgICAgICAgIm5hbWUiOiAicHJvY2Vzc2VkUG9pbnRzIiwKKyAgICAgICAgICAgICJw
YXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicG9pbnQiLCAidHlwZSI6
ICJudW1iZXIiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwb2ludCIsICJ0eXBlIjog
Im51bWJlciIgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24t
ZHVwbGljYXRlLXR5cGUtZGVjbGFyYXRpb25zLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1kZWNsYXJhdGlv
bnMuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNzAyZmM2YTMy
NzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1kZWNsYXJhdGlvbnMuanNvbgpAQCAt
MCwwICsxLDE1IEBACit7CisgICAgImRvbWFpbiI6ICJSdW50aW1lIiwKKyAgICAidHlwZXMiOiBb
CisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJSZW1vdGVPYmplY3RJZCIsCisgICAgICAg
ICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1
ZSBvYmplY3QgaWRlbnRpZmllci4iCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAg
ICJpZCI6ICJSZW1vdGVPYmplY3RJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAor
ICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4iCisg
ICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1tZW1iZXItbmFtZXMu
anNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWls
LW9uLWR1cGxpY2F0ZS10eXBlLW1lbWJlci1uYW1lcy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwLi5hZWJhY2VlOGIyMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWR1cGxpY2F0
ZS10eXBlLW1lbWJlci1uYW1lcy5qc29uCkBAIC0wLDAgKzEsMTUgQEAKK1sKK3sKKyAgICAiZG9t
YWluIjogIk92ZXJsYXlUeXBlcyIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAg
ICAgICAiaWQiOiAiUG9pbnQiLAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAg
ICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAieCIsICJ0
eXBlIjogImludGVnZXIiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ4IiwgInR5cGUi
OiAiaW50ZWdlciIgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXQorfQorXQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2Zh
aWwtb24tZW51bS13aXRoLW5vLXZhbHVlcy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZW51bS13aXRoLW5vLXZhbHVlcy5qc29uCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yMzJhN2MzMjQ5YQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9mYWlsLW9uLWVudW0td2l0aC1uby12YWx1ZXMuanNvbgpAQCAtMCwwICsxLDEwIEBACit7Cisg
ICAgImRvbWFpbiI6ICJEYXRhYmFzZSIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAg
ICAgICAgICAiaWQiOiAiUHJpbWFyeUNvbG9ycyIsCisgICAgICAgICAgICAidHlwZSI6ICJzdHJp
bmciLAorICAgICAgICAgICAgImVudW0iOiBbXQorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwt
b24tZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbiBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWV2
ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjkxMzJjZTA4ODI4Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2Zh
aWwtb24tZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNv
bgpAQCAtMCwwICsxLDggQEAKK1sKK3sKKyAgICAiZG9tYWluIjogIkRvbWFpbiIsCisgICAgImRl
YnVnZ2FibGVUeXBlcyI6IFsiamF2YXNjcmlwdCJdLAorICAgICJjb21tYW5kcyI6IFt7Im5hbWUi
OiAiQ29tbWFuZCJ9XSwKKyAgICAiZXZlbnRzIjogW3sibmFtZSI6ICJFdmVudCIsICJ0YXJnZXRU
eXBlcyI6IFsid29ya2VyIl19XQorfQorXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlwZXMtdHlw
ZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2Zh
aWwtb24tZXZlbnQtdGFyZ2V0VHlwZXMtdHlwZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwLi5lNTRlZDFmNWM2YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWV2ZW50LXRhcmdl
dFR5cGVzLXR5cGUuanNvbgpAQCAtMCwwICsxLDkgQEAKK3sKKyAgICAiZG9tYWluIjogIkRvbWFp
biIsCisgICAgImV2ZW50cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiUGFn
ZU9ubHkiLAorICAgICAgICAgICAgInRhcmdldFR5cGVzIjogInBhZ2VlIgorICAgICAgICB9Cisg
ICAgXQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlwZXMtdmFsdWUuanNvbiBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWV2ZW50LXRhcmdl
dFR5cGVzLXZhbHVlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu
LjU4ODRiZmQ3YTZiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlwZXMtdmFsdWUuanNv
bgpAQCAtMCwwICsxLDkgQEAKK3sKKyAgICAiZG9tYWluIjogIkRvbWFpbiIsCisgICAgImV2ZW50
cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiUGFnZU9ubHkiLAorICAgICAg
ICAgICAgInRhcmdldFR5cGVzIjogWyJwYWdlZSJdCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFp
bC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbiBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLW51bWJlci10eXBl
ZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwLi43MzA4ZGI5OTJkNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLW51bWJlci10eXBlZC1v
cHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29uCkBAIC0wLDAgKzEsMTggQEAKK3sKKyAgICAiZG9t
YWluIjogIkRhdGFiYXNlIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAg
ICJpZCI6ICJEYXRhYmFzZUlkIiwKKyAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAg
ICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIGlkZW50aWZpZXIgb2YgRGF0YWJhc2Ugb2Jq
ZWN0LiIKKyAgICAgICAgfQorICAgIF0sCisgICAgImV2ZW50cyI6IFsKKyAgICAgICAgeworICAg
ICAgICAgICAgIm5hbWUiOiAiZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyIsCisgICAgICAg
ICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5h
bWVzIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogMCB9CisgICAgICAgICAgICBdCisg
ICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtdHlwZS1t
ZW1iZXIuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29uCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hZmVhNTU1ZWM0ZgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWls
LW9uLW51bWJlci10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29uCkBAIC0wLDAgKzEsMTYg
QEAKK1sKK3sKKyAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKKyAgICAidHlwZXMiOiBbCisgICAg
ICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJFcnJvciIsCisgICAgICAgICAgICAidHlwZSI6ICJv
YmplY3QiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkRhdGFiYXNlIGVycm9yLiIsCisg
ICAgICAgICAgICAicHJvcGVydGllcyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm1l
c3NhZ2UiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgbWVzc2FnZS4i
IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2RlIiwgInR5cGUiOiAiaW50ZWdlciIs
ICJkZXNjcmlwdGlvbiI6ICJFcnJvciBjb2RlLiIsICJvcHRpb25hbCI6IDAgfQorICAgICAgICAg
ICAgXQorICAgICAgICB9CisgICAgXQorfQorXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlv
bmFsLXBhcmFtZXRlci1mbGFnLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZs
YWcuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNDAxMmM3OWI2
YjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZmFpbC1vbi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcu
anNvbgpAQCAtMCwwICsxLDE4IEBACit7CisgICAgImRvbWFpbiI6ICJEYXRhYmFzZSIsCisgICAg
InR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiRGF0YWJhc2VJZCIsCisg
ICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjog
IlVuaXF1ZSBpZGVudGlmaWVyIG9mIERhdGFiYXNlIG9iamVjdC4iCisgICAgICAgIH0KKyAgICBd
LAorICAgICJldmVudHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImRpZEV4
ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMiLAorICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogInN0cmluZyIs
ICJvcHRpb25hbCI6ICJ0cnVlIiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdCit9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZmFpbC1vbi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNvbiBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXN0cmluZy10
eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwLi5jYTNlZjI4YThmOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXN0cmluZy10eXBlZC1v
cHRpb25hbC10eXBlLW1lbWJlci5qc29uCkBAIC0wLDAgKzEsMTYgQEAKK1sKK3sKKyAgICAiZG9t
YWluIjogIkRhdGFiYXNlIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAg
ICJpZCI6ICJFcnJvciIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAg
ICAgImRlc2NyaXB0aW9uIjogIkRhdGFiYXNlIGVycm9yLiIsCisgICAgICAgICAgICAicHJvcGVy
dGllcyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm1lc3NhZ2UiLCAidHlwZSI6ICJz
dHJpbmciLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgbWVzc2FnZS4iIH0sCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJjb2RlIiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJF
cnJvciBjb2RlLiIsICJvcHRpb25hbCI6ICJmYWxzZSIgfQorICAgICAgICAgICAgXQorICAgICAg
ICB9CisgICAgXQorfQorXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdHlwZS1kZWNsYXJhdGlvbi11c2luZy10eXBlLXJl
ZmVyZW5jZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2ZhaWwtb24tdHlwZS1kZWNsYXJhdGlvbi11c2luZy10eXBlLXJlZmVyZW5jZS5qc29uCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xOWI3NTkwY2NjNgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9mYWlsLW9uLXR5cGUtZGVjbGFyYXRpb24tdXNpbmctdHlwZS1yZWZlcmVuY2UuanNvbgpAQCAt
MCwwICsxLDEzIEBACitbCit7CisgICAgImRvbWFpbiI6ICJSdW50aW1lIiwKKyAgICAidHlwZXMi
OiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJSZW1vdGVPYmplY3RJZCIsCisgICAg
ICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgIiRyZWYiOiAiU29tZVR5cGUi
LAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4i
CisgICAgICAgIH0KKyAgICBdCit9CitdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi10eXBlLXJlZmVyZW5jZS1hcy1wcmlt
aXRpdmUtdHlwZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2ZhaWwtb24tdHlwZS1yZWZlcmVuY2UtYXMtcHJpbWl0aXZlLXR5cGUuanNvbgpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOGM4M2JiZmNlNDEKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZmFpbC1vbi10eXBlLXJlZmVyZW5jZS1hcy1wcmltaXRpdmUtdHlwZS5qc29uCkBAIC0wLDAgKzEs
MTggQEAKK3sKKyAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKKyAgICAidHlwZXMiOiBbCisgICAg
ICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJEYXRhYmFzZUlkIiwKKyAgICAgICAgICAgICJ0eXBl
IjogInN0cmluZyIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIGlkZW50aWZp
ZXIgb2YgRGF0YWJhc2Ugb2JqZWN0LiIKKyAgICAgICAgfQorICAgIF0sCisgICAgImV2ZW50cyI6
IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiZGlkRXhlY3V0ZU9wdGlvbmFsUGFy
YW1ldGVycyIsCisgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAgICB7
ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiRGF0YWJhc2VJZCIgfQorICAgICAgICAg
ICAgXQorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdHlwZS13aXRoLWxvd2VyY2FzZS1u
YW1lLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZmFpbC1vbi10eXBlLXdpdGgtbG93ZXJjYXNlLW5hbWUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMC4uNTMxOTAxZTRhOWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi10eXBlLXdp
dGgtbG93ZXJjYXNlLW5hbWUuanNvbgpAQCAtMCwwICsxLDEwIEBACit7CisgICAgImRvbWFpbiI6
ICJEYXRhYmFzZSIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQi
OiAiZGF0YWJhc2VJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJpbnRlZ2VyIiwKKyAgICAgICAg
ICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgaWRlbnRpZmllciBvZiBEYXRhYmFzZSBvYmplY3Qu
IgorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1p
bi10eXBlLWRlY2xhcmF0aW9uLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtZGVj
bGFyYXRpb24uanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZDY4
ODdhMjc0MTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUt
ZGVjbGFyYXRpb24uanNvbgpAQCAtMCwwICsxLDEyIEBACitbCit7CisgICAgImRvbWFpbiI6ICJS
dW50aW1lIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJS
ZW1vdGVPYmplY3RJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJkcmFnb24iLAorICAgICAgICAg
ICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4iCisgICAgICAgIH0K
KyAgICBdCit9CitdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtbWVt
YmVyLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtbWVtYmVyLmpzb24KbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmI4MTdkYjUwNDRkCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2Zh
aWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLW1lbWJlci5qc29uCkBAIC0wLDAg
KzEsMTUgQEAKK1sKK3sKKyAgICAiZG9tYWluIjogIkZhbnRhc3kiLAorICAgICJ0eXBlcyI6IFsK
KyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkRyYWdvbkVnZyIsCisgICAgICAgICAgICAi
dHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkEgZHJhZ29uIGVn
Zy4iLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJjb2xvciIsICIkcmVmIjogIkNvbG9yIiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0K
KyAgICBdCit9CitdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24g
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJhdGUt
ZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAuLjY3Y2Y4ZTU4MmY2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyYXRlLWRvbWFpbnMtd2l0
aC1mZWF0dXJlLWd1YXJkcy5qc29uCkBAIC0wLDAgKzEsMzYgQEAKK1sKK3sKKyAgICAiZG9tYWlu
IjogIk5ldHdvcmsxIiwKKyAgICAiZmVhdHVyZUd1YXJkIjogIlBMQVRGT1JNKFdFQl9DT01NQU5E
UykiLAorICAgICJjb21tYW5kcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAi
bG9hZFJlc291cmNlIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBhIHJlc291
cmNlIGluIHRoZSBjb250ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGluc3BlY3RlZCBwYWdlIHdpdGhv
dXQgY3Jvc3Mgb3JpZ2luIGNoZWNrcy4iCisgICAgICAgIH0KKyAgICBdCit9LAoreworICAgICJk
b21haW4iOiAiTmV0d29yazIiLAorICAgICJmZWF0dXJlR3VhcmQiOiAiUExBVEZPUk0oV0VCX1RZ
UEVTKSIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiTmV0
d29ya0Vycm9yIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAi
cHJvcGVydGllcyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm1lc3NhZ2UiLCAidHlw
ZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgbWVzc2FnZS4iIH0sCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJjb2RlIiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlv
biI6ICJFcnJvciBjb2RlLiIgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXQorfSwK
K3sKKyAgICAiZG9tYWluIjogIk5ldHdvcmszIiwKKyAgICAiZmVhdHVyZUd1YXJkIjogIlBMQVRG
T1JNKFdFQl9FVkVOVFMpIiwKKyAgICAiZXZlbnRzIjogWworICAgICAgICB7CisgICAgICAgICAg
ICAibmFtZSI6ICJyZXNvdXJjZUxvYWRlZCIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAi
QSByZXNvdXJjZSB3YXMgbG9hZGVkLiIKKyAgICAgICAgfQorICAgIF0KK30KK10KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2NvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbiBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2Nv
bW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDI3YWI2NWI5MmEuLjAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2Nv
bW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgorKysg
L2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotWwotewotICAgICJkb21haW4iOiAiRG9tYWluIiwK
LSAgICAiZGVidWdnYWJsZVR5cGVzIjogWyJwYWdlIl0sCi0gICAgInRhcmdldFR5cGVzIjogWyJw
YWdlIiwgIndvcmtlciJdLAotICAgICJjb21tYW5kcyI6IFt7Im5hbWUiOiAiQ29tbWFuZCJ9XSwK
LSAgICAiZXZlbnRzIjogW3sibmFtZSI6ICJFdmVudCJ9XQotfQotXQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvY29tbWFu
ZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2NvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRl
Lmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExMjYyZTg4OWZhLi4wMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJpYy9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCisrKyAvZGV2L251bGwK
QEAgLTEsMTA5ICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKLSAgICAidHlw
ZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJEYXRhYmFzZUlkIiwKLSAgICAg
ICAgICAgICJ0eXBlIjogImludGVnZXIiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVu
aXF1ZSBpZGVudGlmaWVyIG9mIERhdGFiYXNlIG9iamVjdC4iCi0gICAgICAgIH0sCi0gICAgICAg
IHsKLSAgICAgICAgICAgICJpZCI6ICJQcmltYXJ5Q29sb3JzIiwKLSAgICAgICAgICAgICJ0eXBl
IjogInN0cmluZyIsCi0gICAgICAgICAgICAiZW51bSI6IFsicmVkIiwgImdyZWVuIiwgImJsdWUi
XQotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiQ29sb3JMaXN0IiwK
LSAgICAgICAgICAgICJ0eXBlIjogImFycmF5IiwKLSAgICAgICAgICAgICJpdGVtcyI6IHsgIiRy
ZWYiOiAiUHJpbWFyeUNvbG9ycyIgfQotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAg
ICAiaWQiOiAiRXJyb3IiLAotICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKLSAgICAgICAg
ICAgICJkZXNjcmlwdGlvbiI6ICJEYXRhYmFzZSBlcnJvci4iLAotICAgICAgICAgICAgInByb3Bl
cnRpZXMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJtZXNzYWdlIiwgInR5cGUiOiAi
c3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIG1lc3NhZ2UuIiB9LAotICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAiY29kZSIsICJ0eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAi
RXJyb3IgY29kZS4iIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfQotICAgIF0sCi0gICAgImNv
bW1hbmRzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJleGVjdXRlU1FMU3lu
Y09wdGlvbmFsUmV0dXJuVmFsdWVzIiwKLSAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwotICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQi
IH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJxdWVyeSIsICJ0eXBlIjogInN0cmluZyIg
fQotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJyZXR1cm5zIjogWwotICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJvcHRpb25hbCI6
IHRydWUsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCi0gICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWUgfSwK
LSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIs
ICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIs
ICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7
ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0g
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJ
ZCIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNxbEVy
cm9yIiwgIiRyZWYiOiAiRXJyb3IiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlDb2xvcnMiLCAib3B0
aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJhbHRlcm5hdGVDb2xv
cnMiLCAiJHJlZiI6ICJDb2xvckxpc3QiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBb
ImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSwgIm9wdGlvbmFsIjogdHJ1ZSB9
Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1l
IjogImV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzIiwKLSAgICAgICAgICAgICJh
c3luYyI6IHRydWUsCi0gICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKLSAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogImRhdGFiYXNlSWQiLCAiJHJlZiI6ICJEYXRhYmFzZUlkIiB9LAotICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAicXVlcnkiLCAidHlwZSI6ICJzdHJpbmciIH0KLSAgICAgICAg
ICAgIF0sCi0gICAgICAgICAgICAicmV0dXJucyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1l
IjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAib3B0aW9uYWwiOiB0cnVlLCAiaXRl
bXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
bm90ZXMiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiLCAib3B0aW9uYWwi
OiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJv
YmplY3QiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJw
YXlsb2FkIiwgInR5cGUiOiAiYW55IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiLCAib3B0aW9u
YWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVm
IjogIkVycm9yIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6ICJQcmltYXJ5Q29sb3JzIiwgIm9wdGlvbmFsIjogdHJ1
ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwgIiRyZWYi
OiAiQ29sb3JMaXN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJjeWFuIiwgIm1h
Z2VudGEiLCAieWVsbG93IiwgImJsYWNrIl0sICJvcHRpb25hbCI6IHRydWUgfQotICAgICAgICAg
ICAgXQotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJleGVjdXRl
U1FMU3luYyIsCi0gICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKLSAgICAgICAgICAgICAgICB7
ICJuYW1lIjogImRhdGFiYXNlSWQiLCAiJHJlZiI6ICJEYXRhYmFzZUlkIiB9LAotICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAicXVlcnkiLCAidHlwZSI6ICJzdHJpbmciIH0KLSAgICAgICAgICAg
IF0sCi0gICAgICAgICAgICAicmV0dXJucyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjog
ImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmlu
ZyIgfSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJp
bmciIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJu
dW1iZXIiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJv
YmplY3QiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAi
YW55IiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjog
IkRhdGFiYXNlSWQiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzcWxFcnJvciIsICIk
cmVmIjogIkVycm9yIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYWx0ZXJuYXRlQ29s
b3JzIiwgIiRyZWYiOiAiQ29sb3JMaXN0IiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
c2NyZWVuQ29sb3IiLCAiJHJlZiI6ICJQcmltYXJ5Q29sb3JzIiB9LAotICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJjeWFu
IiwgIm1hZ2VudGEiLCAieWVsbG93IiwgImJsYWNrIl0gfQotICAgICAgICAgICAgXQotICAgICAg
ICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJleGVjdXRlU1FMQXN5bmMiLAot
ICAgICAgICAgICAgImFzeW5jIjogdHJ1ZSwKLSAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwot
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNl
SWQiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJxdWVyeSIsICJ0eXBlIjogInN0cmlu
ZyIgfQotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJyZXR1cm5zIjogWwotICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6
IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3Rl
cyIsICJ0eXBlIjogInN0cmluZyIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVz
dGFtcCIsICJ0eXBlIjogIm51bWJlciIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZh
bHVlcyIsICJ0eXBlIjogIm9iamVjdCIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBh
eWxvYWQiLCAidHlwZSI6ICJhbnkiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRh
YmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1l
IjogInNxbEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJzY3JlZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlDb2xvcnMiIH0sCi0gICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJhbHRlcm5hdGVDb2xvcnMiLCAiJHJlZiI6ICJDb2xvckxpc3QiIH0s
Ci0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5n
IiwgImVudW0iOiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSB9Ci0gICAg
ICAgICAgICBdCi0gICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9jb21tYW5kcy13aXRoLW9w
dGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwt
Y2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAzNjFkNTdkODIwZC4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxs
LXJldHVybi1wYXJhbWV0ZXJzLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBACi17
Ci0gICAgImRvbWFpbiI6ICJEYXRhYmFzZSIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7Ci0g
ICAgICAgICAgICAiaWQiOiAiRGF0YWJhc2VJZCIsCi0gICAgICAgICAgICAidHlwZSI6ICJpbnRl
Z2VyIiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgaWRlbnRpZmllciBvZiBE
YXRhYmFzZSBvYmplY3QuIgotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQi
OiAiUHJpbWFyeUNvbG9ycyIsCi0gICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAotICAgICAg
ICAgICAgImVudW0iOiBbInJlZCIsICJncmVlbiIsICJibHVlIl0KLSAgICAgICAgfSwKLSAgICAg
ICAgewotICAgICAgICAgICAgImlkIjogIkNvbG9yTGlzdCIsCi0gICAgICAgICAgICAidHlwZSI6
ICJhcnJheSIsCi0gICAgICAgICAgICAiaXRlbXMiOiB7ICIkcmVmIjogIlByaW1hcnlDb2xvcnMi
IH0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIkVycm9yIiwKLSAg
ICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAi
RGF0YWJhc2UgZXJyb3IuIiwKLSAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwotICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAibWVzc2FnZSIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlv
biI6ICJFcnJvciBtZXNzYWdlLiIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvZGUi
LCAidHlwZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIGNvZGUuIiB9Ci0gICAg
ICAgICAgICBdCi0gICAgICAgIH0KLSAgICBdLAotICAgICJjb21tYW5kcyI6IFsKLSAgICAgICAg
ewotICAgICAgICAgICAgIm5hbWUiOiAiZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyIsCi0g
ICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNv
bHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAib3B0aW9uYWwiOiB0cnVlLCAiaXRlbXMiOiB7
ICJ0eXBlIjogInN0cmluZyIgfSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMi
LCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiLCAib3B0aW9uYWwiOiB0cnVl
IH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3Qi
LCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2Fk
IiwgInR5cGUiOiAiYW55IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiLCAib3B0aW9uYWwiOiB0
cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVy
cm9yIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2Ny
ZWVuQ29sb3IiLCAiJHJlZiI6ICJQcmltYXJ5Q29sb3JzIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAot
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwgIiRyZWYiOiAiQ29s
b3JMaXN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
cHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJjeWFuIiwgIm1hZ2VudGEi
LCAieWVsbG93IiwgImJsYWNrIl0sICJvcHRpb25hbCI6IHRydWUgfQotICAgICAgICAgICAgXSwK
LSAgICAgICAgICAgICJyZXR1cm5zIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29s
dW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJvcHRpb25hbCI6IHRydWUsICJpdGVtcyI6IHsg
InR5cGUiOiAic3RyaW5nIiB9IH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIs
ICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7
ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6IHRydWUg
fSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIs
ICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxvYWQi
LCAidHlwZSI6ICJhbnkiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIsICJvcHRpb25hbCI6IHRy
dWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAiRXJy
b3IiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzY3Jl
ZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlDb2xvcnMiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0g
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJhbHRlcm5hdGVDb2xvcnMiLCAiJHJlZiI6ICJDb2xv
ckxpc3QiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJw
cmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbImN5YW4iLCAibWFnZW50YSIs
ICJ5ZWxsb3ciLCAiYmxhY2siXSwgIm9wdGlvbmFsIjogdHJ1ZSB9Ci0gICAgICAgICAgICBdCi0g
ICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImV4ZWN1dGVOb09wdGlv
bmFsUGFyYW1ldGVycyIsCi0gICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKLSAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7
ICJ0eXBlIjogInN0cmluZyIgfSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMi
LCAidHlwZSI6ICJzdHJpbmciIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3Rh
bXAiLCAidHlwZSI6ICJudW1iZXIiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1
ZXMiLCAidHlwZSI6ICJvYmplY3QiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXls
b2FkIiwgInR5cGUiOiAiYW55IiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJh
c2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJzcWxFcnJvciIsICIkcmVmIjogIkVycm9yIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6ICJQcmltYXJ5Q29sb3JzIiB9LAotICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwgIiRyZWYiOiAiQ29sb3JMaXN0IiB9LAot
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmluZyIs
ICJlbnVtIjogWyJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93IiwgImJsYWNrIl0gfQotICAgICAg
ICAgICAgXSwKLSAgICAgICAgICAgICJyZXR1cm5zIjogWwotICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgInR5cGUiOiAi
c3RyaW5nIiB9IH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjog
InN0cmluZyIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBl
IjogIm51bWJlciIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBl
IjogIm9iamVjdCIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlw
ZSI6ICJhbnkiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRy
ZWYiOiAiRGF0YWJhc2VJZCIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNxbEVycm9y
IiwgIiRyZWYiOiAiRXJyb3IiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5D
b2xvciIsICIkcmVmIjogIlByaW1hcnlDb2xvcnMiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJhbHRlcm5hdGVDb2xvcnMiLCAiJHJlZiI6ICJDb2xvckxpc3QiIH0sCi0gICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBb
ImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSB9Ci0gICAgICAgICAgICBdCi0g
ICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9y
bS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggODE3ZjEzNWVlNWEuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2RlZmluaXRpb25zLXdp
dGgtbWFjLXBsYXRmb3JtLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi17Ci0g
ICAgImRvbWFpbiI6ICJOZXR3b3JrIiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAg
ICAgICAgICJpZCI6ICJOZXR3b3JrRXJyb3IiLAotICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0
IiwKLSAgICAgICAgICAgICJwbGF0Zm9ybSI6ICJtYWNvcyIsCi0gICAgICAgICAgICAicHJvcGVy
dGllcyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm1lc3NhZ2UiLCAidHlwZSI6ICJz
dHJpbmciLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgbWVzc2FnZS4iIH0sCi0gICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJjb2RlIiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJF
cnJvciBjb2RlLiIgfQotICAgICAgICAgICAgXQotICAgICAgICB9Ci0gICAgXSwKLSAgICAiY29t
bWFuZHMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJjZSIs
Ci0gICAgICAgICAgICAicGxhdGZvcm0iOiAibWFjb3MiLAotICAgICAgICAgICAgImRlc2NyaXB0
aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUg
aW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKLSAgICAgICAgfQot
ICAgIF0sCi0gICAgImV2ZW50cyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAi
cmVzb3VyY2VMb2FkZWQiLAotICAgICAgICAgICAgInBsYXRmb3JtIjogIm1hY29zIiwKLSAgICAg
ICAgICAgICJkZXNjcmlwdGlvbiI6ICJBIHJlc291cmNlIHdhcyBsb2FkZWQuIgotICAgICAgICB9
Ci0gICAgXQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZG9tYWluLWRl
YnVnZ2FibGVUeXBlcy5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZmViMGM5
YTI3ZS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uCisrKyAvZGV2
L251bGwKQEAgLTEsOCArMCwwIEBACi1bCi17Ci0gICAgImRvbWFpbiI6ICJEb21haW4iLAotICAg
ICJkZWJ1Z2dhYmxlVHlwZXMiOiBbIndlYi1wYWdlIl0sCi0gICAgImNvbW1hbmRzIjogW3sibmFt
ZSI6ICJDb21tYW5kIn1dLAotICAgICJldmVudHMiOiBbeyJuYW1lIjogIkV2ZW50In1dCi19Ci1d
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZ2VuZXJpYy9kb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5
cGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL2RvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5q
c29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNjJmYjM4YmE3OC4uMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpz
b24KKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLVsKLXsKLSAgICAiZG9tYWluIjogIkRv
bWFpbiIsCi0gICAgImRlYnVnZ2FibGVUeXBlcyI6IFsicGFnZSJdLAotICAgICJjb21tYW5kcyI6
IFt7Im5hbWUiOiAiQ29tbWFuZCIsICJ0YXJnZXRUeXBlcyI6IFsicGFnZSIsICJ3b3JrZXIiXX1d
LAotICAgICJldmVudHMiOiBbeyJuYW1lIjogIkV2ZW50In1dCi19Ci1dCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9kb21h
aW4tdGFyZ2V0VHlwZXMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL2RvbWFpbi10YXJnZXRUeXBlcy5qc29uCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA2YTZlNDBkNjBhZC4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZG9tYWluLXRhcmdl
dFR5cGVzLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLVsKLXsKLSAgICAiZG9t
YWluIjogIkRvbWFpbiIsCi0gICAgInRhcmdldFR5cGVzIjogWyJwYWdlIl0sCi0gICAgImNvbW1h
bmRzIjogW3sibmFtZSI6ICJDb21tYW5kIiwgInRhcmdldFR5cGVzIjogWyJwYWdlIl19XSwKLSAg
ICAiZXZlbnRzIjogW3sibmFtZSI6ICJFdmVudCIsICJ0YXJnZXRUeXBlcyI6IFsicGFnZSJdfV0K
LX0KLV0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbiBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2Rv
bWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggOTRhOGVjYjE3NmQuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2RvbWFpbnMtd2l0aC12YXJ5
aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLVsK
LXsKLSAgICAiZG9tYWluIjogIk5ldHdvcmsxIiwKLSAgICAiY29tbWFuZHMiOiBbCi0gICAgICAg
IHsKLSAgICAgICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJjZTEiLAotICAgICAgICAgICAgImRl
c2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBv
biB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKLSAgICAg
ICAgfQotICAgIF0KLX0sCi17Ci0gICAgImRvbWFpbiI6ICJOZXR3b3JrMiIsCi0gICAgInR5cGVz
IjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiTG9hZGVySWQiLAotICAgICAgICAg
ICAgInR5cGUiOiAic3RyaW5nIiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUg
bG9hZGVyIGlkZW50aWZpZXIuIgotICAgICAgICB9Ci0gICAgXQotfSwKLXsKLSAgICAiZG9tYWlu
IjogIk5ldHdvcmszIiwKLSAgICAiY29tbWFuZHMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAg
ICJuYW1lIjogImxvYWRSZXNvdXJjZTEiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxv
YWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVk
IHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKLSAgICAgICAgfSwKLSAgICAgICAg
ewotICAgICAgICAgICAgIm5hbWUiOiAibG9hZFJlc291cmNlMiIsCi0gICAgICAgICAgICAiZGVz
Y3JpcHRpb24iOiAiTG9hZHMgYSByZXNvdXJjZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1lIG9u
IHRoZSBpbnNwZWN0ZWQgcGFnZSB3aXRob3V0IGNyb3NzIG9yaWdpbiBjaGVja3MuIgotICAgICAg
ICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJsb2FkUmVzb3VyY2UzIiwKLSAg
ICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBhIHJlc291cmNlIGluIHRoZSBjb250ZXh0
IG9mIGEgZnJhbWUgb24gdGhlIGluc3BlY3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNo
ZWNrcy4iCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImxvYWRS
ZXNvdXJjZTQiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2Ug
aW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBj
cm9zcyBvcmlnaW4gY2hlY2tzLiIKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAg
Im5hbWUiOiAibG9hZFJlc291cmNlNSIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9h
ZHMgYSByZXNvdXJjZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQg
cGFnZSB3aXRob3V0IGNyb3NzIG9yaWdpbiBjaGVja3MuIgotICAgICAgICB9LAotICAgICAgICB7
Ci0gICAgICAgICAgICAibmFtZSI6ICJsb2FkUmVzb3VyY2U2IiwKLSAgICAgICAgICAgICJkZXNj
cmlwdGlvbiI6ICJMb2FkcyBhIHJlc291cmNlIGluIHRoZSBjb250ZXh0IG9mIGEgZnJhbWUgb24g
dGhlIGluc3BlY3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNoZWNrcy4iCi0gICAgICAg
IH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJjZTciLAotICAg
ICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRleHQg
b2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4gY2hl
Y2tzLiIKLSAgICAgICAgfQotICAgIF0KLX0KLV0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2VudW0tdmFsdWVzLmpzb24g
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9l
bnVtLXZhbHVlcy5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZGFkNjFkZjdj
OS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2dlbmVyaWMvZW51bS12YWx1ZXMuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDM1
ICswLDAgQEAKLXsiZG9tYWlucyI6WwotewotICAgICJkb21haW4iOiAiVHlwZURvbWFpbiIsCi0g
ICAgInR5cGVzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiVHlwZURvbWFpbkVu
dW0iLAotICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKLSAgICAgICAgICAgICJlbnVtIjog
WyJzaGFyZWQiLCAicmVkIiwgImdyZWVuIiwgImJsdWUiXQotICAgICAgICB9Ci0gICAgXQotfSwK
LXsKLSAgICAiZG9tYWluIjogIkNvbW1hbmREb21haW4iLAotICAgICJjb21tYW5kcyI6IFsKLSAg
ICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUi
LAotICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbXSwKLSAgICAgICAgICAgICJyZXR1cm5zIjog
WwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicmV0dXJuVmFsdWUiLCAidHlwZSI6ICJzdHJp
bmciLCAiZW51bSI6IFsic2hhcmVkIiwgImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciXSB9Ci0g
ICAgICAgICAgICBdCi0gICAgICAgIH0KLSAgICBdCi19LAotewotICAgICJkb21haW4iOiAiRXZl
bnREb21haW4iLAotICAgICJldmVudHMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1l
IjogImV2ZW50V2l0aEVudW1QYXJhbWV0ZXIiLAotICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBb
Ci0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXJhbWV0ZXIiLCAidHlwZSI6ICJzdHJpbmci
LCAiZW51bSI6IFsic2hhcmVkIiwgImJsYWNrIiwgIndoaXRlIl0gfQotICAgICAgICAgICAgXQot
ICAgICAgICB9Ci0gICAgXQotfQotXX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V2ZW50LXRhcmdldFR5cGUtbWF0Y2hp
bmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9ldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRv
bWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0
ZGZlZDQxZWQyMS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21h
aW4tZGVidWdnYWJsZVR5cGUuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotWwot
ewotICAgICJkb21haW4iOiAiRG9tYWluIiwKLSAgICAiZGVidWdnYWJsZVR5cGVzIjogWyJwYWdl
Il0sCi0gICAgImNvbW1hbmRzIjogW3sibmFtZSI6ICJDb21tYW5kIn1dLAotICAgICJldmVudHMi
OiBbeyJuYW1lIjogIkV2ZW50IiwgInRhcmdldFR5cGVzIjogWyJwYWdlIiwgIndvcmtlciJdfV0K
LX0KLV0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbiBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V2ZW50
cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggY2FiYmYxMGI4MzYuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBh
cmFtZXRlcnMuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLXsKLSAgICAiZG9t
YWluIjogIkRhdGFiYXNlIiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAg
ICJpZCI6ICJEYXRhYmFzZUlkIiwKLSAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCi0gICAg
ICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIGlkZW50aWZpZXIgb2YgRGF0YWJhc2Ugb2Jq
ZWN0LiIKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIlByaW1hcnlD
b2xvcnMiLAotICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKLSAgICAgICAgICAgICJ2YWx1
ZXMiOiBbInJlZCIsICJncmVlbiIsICJibHVlIl0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAg
ICAgICAgICAgImlkIjogIkNvbG9yTGlzdCIsCi0gICAgICAgICAgICAidHlwZSI6ICJhcnJheSIs
Ci0gICAgICAgICAgICAiaXRlbXMiOiB7ICIkcmVmIjogIlByaW1hcnlDb2xvcnMiIH0KLSAgICAg
ICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIkVycm9yIiwKLSAgICAgICAgICAg
ICJ0eXBlIjogIm9iamVjdCIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRGF0YWJhc2Ug
ZXJyb3IuIiwKLSAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwotICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAibWVzc2FnZSIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJFcnJv
ciBtZXNzYWdlLiIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvZGUiLCAidHlwZSI6
ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIGNvZGUuIiB9Ci0gICAgICAgICAgICBd
Ci0gICAgICAgIH0KLSAgICBdLAotICAgICJldmVudHMiOiBbCi0gICAgICAgIHsKLSAgICAgICAg
ICAgICJuYW1lIjogImRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMiLAotICAgICAgICAgICAg
InBhcmFtZXRlcnMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIs
ICJ0eXBlIjogImFycmF5IiwgIm9wdGlvbmFsIjogdHJ1ZSwgIml0ZW1zIjogeyAidHlwZSI6ICJz
dHJpbmciIH0gfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAi
c3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
dGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFs
IjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjog
ImFueSIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNx
bEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlDb2xvcnMiLCAi
b3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJhbHRlcm5hdGVD
b2xvcnMiLCAiJHJlZiI6ICJDb2xvckxpc3QiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgInZhbHVl
cyI6IFsiY3lhbiIsICJtYWdlbnRhIiwgInllbGxvdyIsICJibGFjayJdLCAib3B0aW9uYWwiOiB0
cnVlIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAg
Im5hbWUiOiAiZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIiwKLSAgICAgICAgICAgICJw
YXJhbWV0ZXJzIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAi
dHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCi0gICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIgfSwKLSAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIgfSwKLSAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIgfSwKLSAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiIH0sCi0gICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVycm9yIiB9LAotICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6ICJQcmltYXJ5Q29sb3Jz
IiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwgIiRyZWYi
OiAiQ29sb3JMaXN0IiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJpbnRDb2xvciIs
ICJ0eXBlIjogInN0cmluZyIsICJ2YWx1ZXMiOiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ci
LCAiYmxhY2siXSB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJp
Yy9leHBlY3RlZC9jb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVU
eXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFp
bi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJlc3VsdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggNDMxM2ZhOTE1MWUuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2NvbW1hbmQtdGFyZ2V0VHlw
ZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1yZXN1bHQKKysrIC9kZXYvbnVs
bApAQCAtMSwxMDYzICswLDAgQEAKLSMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29t
bWFuZHMuanMKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdl
dFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotLy8gRG9tYWluCi1JbnNwZWN0b3JCYWNrZW5k
LnJlZ2lzdGVyRG9tYWluKCJEb21haW4iLCBbInBhZ2UiLCAid29ya2VyIl0pOwotSW5zcGVjdG9y
QmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIkRvbWFpbi5Db21tYW5kIiwgbnVsbCwgW10sIFtdKTsK
LUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudCgiRG9tYWluLkV2ZW50IiwgbnVsbCwgW10p
OwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbkRpc3BhdGNoZXIgPSBJbnNwZWN0b3JC
YWNrZW5kLnJlZ2lzdGVyRGlzcGF0Y2hlci5iaW5kKEluc3BlY3RvckJhY2tlbmQsICJEb21haW4i
KTsKLUluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkRvbWFpbiIsIFsicGFnZSJdKTsK
LSMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVn
Z2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCi0jaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9y
IHsKLQotY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZv
aWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3Bh
dGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KLSAg
ICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBt
X2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Ci1wcml2YXRlOgotICAgIFJlZlB0cjxCYWNrZW5k
RGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKLX07Ci0KLQotY2xhc3MgQWx0ZXJuYXRl
RG9tYWluQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXIgewotcHVibGljOgotICAgIHZpcnR1YWwgfkFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRj
aGVyKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIENvbW1hbmQobG9uZyBjYWxsSWQpID0gMDsKLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVy
cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZC10YXJnZXRUeXBl
LW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFBy
b3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVz
cGFjZSBJbnNwZWN0b3IgewotCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQotI2lmIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotY2xhc3MgQWx0ZXJuYXRlRG9t
YWluQmFja2VuZERpc3BhdGNoZXI7Ci0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCi0KLWNsYXNzIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7
Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIENvbW1hbmQoRXJyb3JTdHJpbmcmKSA9IDA7Ci1w
cm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB+RG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7
Ci19OwotCi1jbGFzcyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBw
bGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEb21h
aW5CYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgRG9tYWluQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJ
ZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkgZmlu
YWw7Ci1wcml2YXRlOgotICAgIHZvaWQgQ29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpT
T046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKLXB1YmxpYzoKLSAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIo
QWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsg
bV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQotcHJpdmF0ZToK
LSAgICBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciogbV9hbHRlcm5hdGVEaXNwYXRj
aGVyIHsgbnVsbHB0ciB9OwotI2VuZGlmCi1wcml2YXRlOgotICAgIERvbWFpbkJhY2tlbmREaXNw
YXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
Kik7Ci0gICAgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50IHsgbnVsbHB0
ciB9OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdl
dFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4K
LSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSNp
bmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jZW5kaWYKLQotbmFt
ZXNwYWNlIEluc3BlY3RvciB7Ci0KLURvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6fkRv
bWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQotCi1SZWY8RG9tYWluQmFja2VuZERp
c3BhdGNoZXI+IERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoQmFja2VuZERpc3BhdGNo
ZXImIGJhY2tlbmREaXNwYXRjaGVyLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFn
ZW50KQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERvbWFpbkJhY2tlbmREaXNwYXRjaGVy
KGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOwotfQotCi1Eb21haW5CYWNrZW5kRGlzcGF0Y2hl
cjo6RG9tYWluQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNw
YXRjaGVyLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQotICAgIDogU3Vw
cGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCi0gICAgLCBtX2Fn
ZW50KGFnZW50KQotewotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hl
ckZvckRvbWFpbigiRG9tYWluIl9zLCB0aGlzKTsKLX0KLQotdm9pZCBEb21haW5CYWNrZW5kRGlz
cGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBS
ZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCi17Ci0gICAgUmVmPERvbWFpbkJhY2tlbmREaXNw
YXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKLQotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFt
ZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRlcnMpOwot
Ci0gICAgaWYgKG1ldGhvZCA9PSAiQ29tbWFuZCIpCi0gICAgICAgIENvbW1hbmQocmVxdWVzdElk
LCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3Bh
dGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZv
dW5kLCAiJ0RvbWFpbi4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOwotfQotCi12b2lk
IERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8
SlNPTjo6T2JqZWN0PiYmKQotewotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQotICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRl
cm5hdGVEaXNwYXRjaGVyLT5Db21tYW5kKHJlcXVlc3RJZCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0jZW5kaWYKLQotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmpl
Y3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgbV9hZ2VudC0+Q29tbWFu
ZChlcnJvcik7Ci0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNl
KTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29s
RXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5k
RGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVy
cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZC10YXJnZXRUeXBl
LW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFBy
b3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBG
cm9udGVuZFJvdXRlcjsKLQotY2xhc3MgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVyIHsKLSAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBEb21haW5Gcm9udGVuZERpc3Bh
dGNoZXIoRnJvbnRlbmRSb3V0ZXImIGZyb250ZW5kUm91dGVyKSA6IG1fZnJvbnRlbmRSb3V0ZXIo
ZnJvbnRlbmRSb3V0ZXIpIHsgfQotICAgIHZvaWQgRXZlbnQoKTsKLXByaXZhdGU6Ci0gICAgRnJv
bnRlbmRSb3V0ZXImIG1fZnJvbnRlbmRSb3V0ZXI7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dh
YmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5o
IgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Igewot
Ci12b2lkIERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcjo6RXZlbnQoKQotewotICAgIFJlZjxKU09O
OjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29u
TWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOwotCi0gICAg
bV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEZyb250
ZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3Rz
LmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5cGUt
bWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi1uYW1lc3BhY2UgUHJvdG9jb2wg
ewotCi0KLQotCi0KLQotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVn
Z2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIK
LQotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLQot
Ci19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQot
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVU
eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVy
cy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQotQHByb3RvY29sIFRlc3RQcm90b2Nv
bERvbWFpbkRvbWFpbkhhbmRsZXI7Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLWNsYXNz
IE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRl
cm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7Ci1wdWJsaWM6Ci0gICAgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyKGlk
PFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9
IGhhbmRsZXI7IH0KLSAgICB2b2lkIENvbW1hbmQobG9uZyByZXF1ZXN0SWQpIGZpbmFsOwotcHJp
dmF0ZToKLSAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4+
IG1fZGVsZWdhdGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxl
VHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNp
bXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJz
LmgiCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0K
LW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi12b2lkIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5k
RGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVlc3RJZCkKLXsKLSAgICBpZiAoIVttX2RlbGVn
YXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNr
OnN1Y2Nlc3NDYWxsYmFjazopXSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBv
cnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZv
dW5kLCAiJ0RvbWFpbi5Db21tYW5kJyB3YXMgbm90IGZvdW5kIl9zKTsKLSAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAg
ICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFj
a2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7Ci0gICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgfTsKLQotICAgIGlkIHN1Y2Nlc3ND
YWxsYmFjayA9IF57Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShy
ZXF1ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKLSAgICB9OwotCi0gICAg
W21fZGVsZWdhdGUgQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vz
c0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107Ci19Ci0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWlu
LWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgotCi1fX2F0dHJp
YnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbiA6IE5TT2JqZWN0Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluLCBz
ZXR0ZXI9c2V0RG9tYWluSGFuZGxlcjopIGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRs
ZXI+IGRvbWFpbkhhbmRsZXI7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFRlc3RQ
cm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqZG9tYWluRXZlbnREaXNwYXRjaGVy
OwotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFp
bi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKLQotI2ltcG9y
dCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmRE
aXNwYXRjaGVycy5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hh
YmxlQWdlbnQuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9y
Q29udHJvbGxlci5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRl
QmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcnMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGlt
cGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KLXsKLSAgICBBdWdtZW50YWJs
ZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotICAgIGlkPFRlc3RQcm90b2NvbERv
bWFpbkRvbWFpbkhhbmRsZXI+IF9kb21haW5IYW5kbGVyOwotICAgIFRlc3RQcm90b2NvbERvbWFp
bkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqX2RvbWFpbkV2ZW50RGlzcGF0Y2hlcjsKLX0KLQotLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250
cm9sbGVyKiljb250cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAo
IXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIpOwotICAg
IF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9p
ZClkZWFsbG9jCi17Ci0gICAgW19kb21haW5IYW5kbGVyIHJlbGVhc2VdOwotICAgIFtfZG9tYWlu
RXZlbnREaXNwYXRjaGVyIHJlbGVhc2VdOwotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAo
dm9pZClzZXREb21haW5IYW5kbGVyOihpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVy
PiloYW5kbGVyCi17Ci0gICAgaWYgKGhhbmRsZXIgPT0gX2RvbWFpbkhhbmRsZXIpCi0gICAgICAg
IHJldHVybjsKLQotICAgIFtfZG9tYWluSGFuZGxlciByZWxlYXNlXTsKLSAgICBfZG9tYWluSGFu
ZGxlciA9IFtoYW5kbGVyIHJldGFpbl07Ci0KLSAgICBhdXRvIGFsdGVybmF0ZURpc3BhdGNoZXIg
PSBtYWtlVW5pcXVlPE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxl
cik7Ci0gICAgYXV0byBhbHRlcm5hdGVBZ2VudCA9IG1ha2VVbmlxdWU8QWx0ZXJuYXRlRGlzcGF0
Y2hhYmxlQWdlbnQ8RG9tYWluQmFja2VuZERpc3BhdGNoZXIsIEFsdGVybmF0ZURvbWFpbkJhY2tl
bmREaXNwYXRjaGVyPj4oIkRvbWFpbiJfcywgKl9jb250cm9sbGVyLCBXVEZNb3ZlKGFsdGVybmF0
ZURpc3BhdGNoZXIpKTsKLSAgICBfY29udHJvbGxlci0+YXBwZW5kRXh0cmFBZ2VudChXVEZNb3Zl
KGFsdGVybmF0ZUFnZW50KSk7Ci19Ci0KLS0gKGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhh
bmRsZXI+KWRvbWFpbkhhbmRsZXIKLXsKLSAgICByZXR1cm4gX2RvbWFpbkhhbmRsZXI7Ci19Ci0K
LS0gKFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqKWRvbWFpbkV2ZW50
RGlzcGF0Y2hlcgotewotICAgIGlmICghX2RvbWFpbkV2ZW50RGlzcGF0Y2hlcikKLSAgICAgICAg
X2RvbWFpbkV2ZW50RGlzcGF0Y2hlciA9IFtbVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnRE
aXNwYXRjaGVyIGFsbG9jXSBpbml0V2l0aENvbnRyb2xsZXI6X2NvbnRyb2xsZXJdOwotICAgIHJl
dHVybiBfZG9tYWluRXZlbnREaXNwYXRjaGVyOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRl
c3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucy5oIgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIElu
c3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50
RGlzcGF0Y2hlcgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRy
b2xsZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRh
YmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIg
aW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChj
b250cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNl
bGY7Ci19Ci0KLS0gKHZvaWQpRXZlbnQKLXsKLSAgICBjb25zdCBGcm9udGVuZFJvdXRlciYgcm91
dGVyID0gX2NvbnRyb2xsZXItPmZyb250ZW5kUm91dGVyKCk7Ci0KLSAgICBSZWY8SlNPTjo6T2Jq
ZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3Nh
Z2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9zKTsKLSAgICByb3V0ZXIu
c2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Ci19Ci0KLUBlbmQKLQotCi0j
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
Y29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPEZvdW5k
YXRpb24vRm91bmRhdGlvbi5oPgotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xK
U09OT2JqZWN0Lmg+Ci0KLQotCi0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90
b2NvbFBsYXRmb3JtKSB7Ci0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1BbGwsCi0gICAgVGVzdFBy
b3RvY29sUGxhdGZvcm1HZW5lcmljLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TLAotICAg
IFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1MsCi19OwotCi0KLQotCi0KLUBwcm90b2NvbCBUZXN0
UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyIDxOU09iamVjdD4KLUBvcHRpb25hbAotLSAodm9p
ZClDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJv
ckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKSh2b2lkKSlzdWNjZXNzQ2FsbGJhY2s7
Ci1AZW5kCi0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVy
ZmFjZSBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgOiBOU09iamVjdAot
LSAodm9pZClFdmVudDsKLUBlbmQKLQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9j
b2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9t
YWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2xKU09OT2JqZWN0UHJpdmF0ZS5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFi
bGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi1A
aW50ZXJmYWNlIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAoUHJpdmF0
ZSkKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEluc3BlY3Rvcjo6QXVnbWVu
dGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyOwotQGVuZAotCi0KLSMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBj
b21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFBy
b3RvY29sLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNp
b25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPYmpD
RW51bVR5cGU+Ci1PcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25z
dCBTdHJpbmcmIHZhbHVlKTsKLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQ
cm90b2NvbFBsYXRmb3JtIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2Ug
VGVzdFByb3RvY29sUGxhdGZvcm1BbGw6Ci0gICAgICAgIHJldHVybiAiYWxsIl9zOwotICAgIGNh
c2UgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOgotICAgICAgICByZXR1cm4gImdlbmVyaWMi
X3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzoKLSAgICAgICAgcmV0dXJuICJp
b3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOgotICAgICAgICByZXR1
cm4gIm1hY29zIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRl
c3RQcm90b2NvbFBsYXRmb3JtPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1
ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gImFsbCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9j
b2xQbGF0Zm9ybUFsbDsKLSAgICBpZiAodmFsdWUgPT0gImdlbmVyaWMiKQotICAgICAgICByZXR1
cm4gVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOwotICAgIGlmICh2YWx1ZSA9PSAiaW9zIikK
LSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOwotICAgIGlmICh2YWx1ZSA9
PSAibWFjb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzsKLSAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQot
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dh
YmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotCi0jaW1wb3J0ICJUZXN0
UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKLSNpbXBvcnQg
PFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0KLXVzaW5nIG5h
bWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotCi0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMu
bW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5cGUt
bWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIK
LQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDxXZWJJ
bnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotI2ltcG9ydCA8d3RmL0Fz
c2VydGlvbnMuaD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFj
ZSBJbnNwZWN0b3I7Ci0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbi1yZXN1bHQg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9l
eHBlY3RlZC9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uLXJlc3VsdApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmM1YzQxZGI1M2EuLjAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVj
dGVkL2NvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24tcmVzdWx0CisrKyAvZGV2L251
bGwKQEAgLTEsMTgwOSArMCwwIEBACi0jIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENv
bW1hbmRzLmpzCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0
aC1hc3luYy1hdHRyaWJ1dGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0vLyBEYXRhYmFzZQotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigi
RGF0YWJhc2UiLCBudWxsKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJEYXRhYmFz
ZS5QcmltYXJ5Q29sb3JzIiwge1JlZDogInJlZCIsIEdyZWVuOiAiZ3JlZW4iLCBCbHVlOiAiYmx1
ZSJ9KTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJEYXRhYmFzZS5leGVjdXRl
U1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzIiwgbnVsbCwgW3sibmFtZSI6ICJkYXRhYmFzZUlk
IiwgInR5cGUiOiAibnVtYmVyIn0sIHsibmFtZSI6ICJxdWVyeSIsICJ0eXBlIjogInN0cmluZyJ9
XSwgWyJjb2x1bW5OYW1lcyIsICJub3RlcyIsICJ0aW1lc3RhbXAiLCAidmFsdWVzIiwgInBheWxv
YWQiLCAiZGF0YWJhc2VJZCIsICJzcWxFcnJvciIsICJzY3JlZW5Db2xvciIsICJhbHRlcm5hdGVD
b2xvcnMiLCAicHJpbnRDb2xvciJdKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5k
KCJEYXRhYmFzZS5leGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyIsIG51bGwsIFt7
Im5hbWUiOiAiZGF0YWJhc2VJZCIsICJ0eXBlIjogIm51bWJlciJ9LCB7Im5hbWUiOiAicXVlcnki
LCAidHlwZSI6ICJzdHJpbmcifV0sIFsiY29sdW1uTmFtZXMiLCAibm90ZXMiLCAidGltZXN0YW1w
IiwgInZhbHVlcyIsICJwYXlsb2FkIiwgImRhdGFiYXNlSWQiLCAic3FsRXJyb3IiLCAic2NyZWVu
Q29sb3IiLCAiYWx0ZXJuYXRlQ29sb3JzIiwgInByaW50Q29sb3IiXSk7Ci1JbnNwZWN0b3JCYWNr
ZW5kLnJlZ2lzdGVyQ29tbWFuZCgiRGF0YWJhc2UuZXhlY3V0ZVNRTFN5bmMiLCBudWxsLCBbeyJu
YW1lIjogImRhdGFiYXNlSWQiLCAidHlwZSI6ICJudW1iZXIifSwgeyJuYW1lIjogInF1ZXJ5Iiwg
InR5cGUiOiAic3RyaW5nIn1dLCBbImNvbHVtbk5hbWVzIiwgIm5vdGVzIiwgInRpbWVzdGFtcCIs
ICJ2YWx1ZXMiLCAicGF5bG9hZCIsICJkYXRhYmFzZUlkIiwgInNxbEVycm9yIiwgImFsdGVybmF0
ZUNvbG9ycyIsICJzY3JlZW5Db2xvciIsICJwcmludENvbG9yIl0pOwotSW5zcGVjdG9yQmFja2Vu
ZC5yZWdpc3RlckNvbW1hbmQoIkRhdGFiYXNlLmV4ZWN1dGVTUUxBc3luYyIsIG51bGwsIFt7Im5h
bWUiOiAiZGF0YWJhc2VJZCIsICJ0eXBlIjogIm51bWJlciJ9LCB7Im5hbWUiOiAicXVlcnkiLCAi
dHlwZSI6ICJzdHJpbmcifV0sIFsiY29sdW1uTmFtZXMiLCAibm90ZXMiLCAidGltZXN0YW1wIiwg
InZhbHVlcyIsICJwYXlsb2FkIiwgImRhdGFiYXNlSWQiLCAic3FsRXJyb3IiLCAic2NyZWVuQ29s
b3IiLCAiYWx0ZXJuYXRlQ29sb3JzIiwgInByaW50Q29sb3IiXSk7Ci1JbnNwZWN0b3JCYWNrZW5k
LnJlZ2lzdGVyRGF0YWJhc2VEaXNwYXRjaGVyID0gSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRp
c3BhdGNoZXIuYmluZChJbnNwZWN0b3JCYWNrZW5kLCAiRGF0YWJhc2UiKTsKLUluc3BlY3RvckJh
Y2tlbmQuYWN0aXZhdGVEb21haW4oIkRhdGFiYXNlIiwgbnVsbCk7Ci0jIyMgRW5kIEZpbGU6IElu
c3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
Y29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMu
aCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5o
PgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0K
LW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hl
ciB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2Vu
ZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92
ZShkaXNwYXRjaGVyKTsgfQotICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hl
cigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KLXByaXZhdGU6
Ci0gICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwotfTsK
LQotCi1jbGFzcyBBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5BbHRlcm5h
dGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1
dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyBjYWxsSWQsIGludCBpbl9kYXRhYmFz
ZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1
dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgY2FsbElkLCBpbnQgaW5fZGF0YWJh
c2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBleGVj
dXRlU1FMU3luYyhsb25nIGNhbGxJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYg
aW5fcXVlcnkpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTEFzeW5jKGxvbmcgY2Fs
bElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkgPSAwOwotfTsK
LQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tl
bmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJz
LmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5j
LWF0dHJpYnV0ZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10
eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQotY2xhc3MgQWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
cjsKLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQot
Y2xhc3MgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewotcHVibGljOgotICAgIC8v
IE5hbWVkIGFmdGVyIHBhcmFtZXRlciAncHJpbnRDb2xvcicgd2hpbGUgZ2VuZXJhdGluZyBjb21t
YW5kL2V2ZW50IGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMuCi0gICAgZW51bSBj
bGFzcyBQcmludENvbG9yIHsKLSAgICAgICAgQ3lhbiA9IDMsCi0gICAgICAgIE1hZ2VudGEgPSA0
LAotICAgICAgICBZZWxsb3cgPSA1LAotICAgICAgICBCbGFjayA9IDYsCi0gICAgfTsgLy8gZW51
bSBjbGFzcyBQcmludENvbG9yCi0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxTeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXMoRXJyb3JTdHJpbmcmLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3Ry
aW5nJiBpbl9xdWVyeSwgUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mIG9wdF9vdXRfY29s
dW1uTmFtZXMsIE9wdGlvbmFsPFN0cmluZz4mIG9wdF9vdXRfbm90ZXMsIE9wdGlvbmFsPGRvdWJs
ZT4mIG9wdF9vdXRfdGltZXN0YW1wLCBPcHRpb25hbDxKU09OOjpPYmplY3Q+JiBvcHRfb3V0X3Zh
bHVlcywgT3B0aW9uYWw8SlNPTjo6VmFsdWU+JiBvcHRfb3V0X3BheWxvYWQsIE9wdGlvbmFsPGlu
dD4mIG9wdF9vdXRfZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFi
YXNlOjpFcnJvcj4mIG9wdF9vdXRfc3FsRXJyb3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFi
YXNlOjpQcmltYXJ5Q29sb3JzKiBvcHRfb3V0X3NjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4mIG9wdF9vdXRfYWx0ZXJuYXRlQ29sb3Jz
LCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciogb3B0X291dF9w
cmludENvbG9yKSA9IDA7Ci0gICAgY2xhc3MgRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXNDYWxsYmFjayA6IHB1YmxpYyBCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlIHsK
LSAgICBwdWJsaWM6Ci0gICAgICAgIEV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVz
Q2FsbGJhY2soUmVmPEJhY2tlbmREaXNwYXRjaGVyPiYmLCBpbnQgaWQpOwotICAgICAgICB2b2lk
IHNlbmRTdWNjZXNzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiYgY29sdW1uTmFtZXMs
IE9wdGlvbmFsPFN0cmluZz4mIG5vdGVzLCBPcHRpb25hbDxkb3VibGU+JiB0aW1lc3RhbXAsIE9w
dGlvbmFsPEpTT046Ok9iamVjdD4mIHZhbHVlcywgT3B0aW9uYWw8SlNPTjo6VmFsdWU+JiBwYXls
b2FkLCBPcHRpb25hbDxpbnQ+JiBkYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGF0YWJhc2U6OkVycm9yPiYmIHNxbEVycm9yLCBPcHRpb25hbDxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYmIGFsdGVybmF0ZUNvbG9ycywgT3B0
aW9uYWw8RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3I+IHByaW50
Q29sb3IpOwotICAgIH07Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxBc3luY09wdGlvbmFs
UmV0dXJuVmFsdWVzKGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5LCBS
ZWY8RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjaz4mJiBjYWxsYmFj
aykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMU3luYyhFcnJvclN0cmluZyYsIGlu
dCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5LCBSZWZQdHI8SlNPTjo6QXJy
YXlPZjxTdHJpbmc+PiYgb3V0X2NvbHVtbk5hbWVzLCBTdHJpbmcqIG91dF9ub3RlcywgZG91Ymxl
KiBvdXRfdGltZXN0YW1wLCBKU09OOjpPYmplY3QqIG91dF92YWx1ZXMsIEpTT046OlZhbHVlKiBv
dXRfcGF5bG9hZCwgaW50KiBvdXRfZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRhdGFiYXNlOjpFcnJvcj4mIG91dF9zcWxFcnJvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiBvdXRfYWx0ZXJuYXRlQ29sb3JzLCBJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyogb3V0X3NjcmVlbkNvbG9yLCBE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciogb3V0X3ByaW50Q29s
b3IpID0gMDsKLSAgICBjbGFzcyBFeGVjdXRlU1FMQXN5bmNDYWxsYmFjayA6IHB1YmxpYyBCYWNr
ZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEV4ZWN1
dGVTUUxBc3luY0NhbGxiYWNrKFJlZjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiwgaW50IGlkKTsKLSAg
ICAgICAgdm9pZCBzZW5kU3VjY2VzcyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYmIGNv
bHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBKU09OOjpP
YmplY3QgdmFsdWVzLCBKU09OOjpWYWx1ZSBwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mJiBzcWxFcnJvciwgSW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIFJlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYmIGFsdGVybmF0ZUNv
bG9ycywgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3IgcHJpbnRD
b2xvcik7Ci0gICAgfTsKLSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTEFzeW5jKGludCBpbl9k
YXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5LCBSZWY8RXhlY3V0ZVNRTEFzeW5jQ2Fs
bGJhY2s+JiYgY2FsbGJhY2spID0gMDsKLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIH5EYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOwotfTsKLQotY2xhc3MgRGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7
Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBjcmVh
dGUoQmFja2VuZERpc3BhdGNoZXImLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciop
OwotICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9k
LCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOwotcHJpdmF0ZToKLSAgICB2b2lk
IGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0SWQsIFJlZlB0
cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0gICAgdm9pZCBleGVjdXRlU1FMQXN5bmNP
cHRpb25hbFJldHVyblZhbHVlcyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4m
JiBwYXJhbWV0ZXJzKTsKLSAgICB2b2lkIGV4ZWN1dGVTUUxTeW5jKGxvbmcgcmVxdWVzdElkLCBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwotICAgIHZvaWQgZXhlY3V0ZVNRTEFz
eW5jKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwot
I2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotcHVibGljOgotICAg
IHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0Y2hlcihBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFs
dGVybmF0ZURpc3BhdGNoZXI7IH0KLXByaXZhdGU6Ci0gICAgQWx0ZXJuYXRlRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlciogbV9hbHRlcm5hdGVEaXNwYXRjaGVyIHsgbnVsbHB0ciB9OwotI2VuZGlm
Ci1wcml2YXRlOgotICAgIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNo
ZXImLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIERhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50IHsgbnVsbHB0ciB9OwotfTsKLQotfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMu
aAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUg
PHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCi0jaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVy
cy5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1EYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlcjo6fkRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9
Ci0KLVJlZjxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVyOjpjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQp
KTsKLX0KLQotRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6RGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIERhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKLSAgICA6IFN1cHBsZW1lbnRhbEJhY2tlbmREaXNw
YXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQotICAgICwgbV9hZ2VudChhZ2VudCkKLXsKLSAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oIkRhdGFiYXNl
Il9zLCB0aGlzKTsKLX0KLQotdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRj
aChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+
JiYgbWVzc2FnZSkKLXsKLSAgICBSZWY8RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVj
dCgqdGhpcyk7Ci0KLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOwotICAgIG1l
c3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsKLQotICAgIGlmIChtZXRo
b2QgPT0gImV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMiKQotICAgICAgICBleGVj
dXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0
ZXJzKSk7Ci0gICAgZWxzZSBpZiAobWV0aG9kID09ICJleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJl
dHVyblZhbHVlcyIpCi0gICAgICAgIGV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVz
KHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7Ci0gICAgZWxzZSBpZiAobWV0aG9kID09
ICJleGVjdXRlU1FMU3luYyIpCi0gICAgICAgIGV4ZWN1dGVTUUxTeW5jKHJlcXVlc3RJZCwgV1RG
TW92ZShwYXJhbWV0ZXJzKSk7Ci0gICAgZWxzZSBpZiAobWV0aG9kID09ICJleGVjdXRlU1FMQXN5
bmMiKQotICAgICAgICBleGVjdXRlU1FMQXN5bmMocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRl
cnMpKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3Rv
Y29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RhdGFiYXNlLiIg
KyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7Ci19Ci0KLXZvaWQgRGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHJlcXVl
c3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKQotewotICAgIGludCBpbl9k
YXRhYmFzZUlkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0SW50ZWdlcihwYXJhbWV0ZXJzLmdl
dCgpLCAiZGF0YWJhc2VJZCJfcywgbnVsbHB0cik7Ci0gICAgU3RyaW5nIGluX3F1ZXJ5ID0gbV9i
YWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksICJxdWVyeSJfcywg
bnVsbHB0cik7Ci0gICAgaWYgKG1fYmFja2VuZERpc3BhdGNoZXItPmhhc1Byb3RvY29sRXJyb3Jz
KCkpIHsKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihC
YWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhv
ZCAnRGF0YWJhc2UuZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcycgY2FuJ3QgYmUg
cHJvY2Vzc2VkIl9zKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotI2lmIEVOQUJMRShJTlNQ
RUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNo
ZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5leGVjdXRlU1FMU3luY09wdGlv
bmFsUmV0dXJuVmFsdWVzKHJlcXVlc3RJZCwgaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnkpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAg
ICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAg
IFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IG91dF9jb2x1bW5OYW1lczsKLSAgICBPcHRp
b25hbDxTdHJpbmc+IG91dF9ub3RlczsKLSAgICBPcHRpb25hbDxkb3VibGU+IG91dF90aW1lc3Rh
bXA7Ci0gICAgT3B0aW9uYWw8SlNPTjo6T2JqZWN0PiBvdXRfdmFsdWVzOwotICAgIE9wdGlvbmFs
PEpTT046OlZhbHVlPiBvdXRfcGF5bG9hZDsKLSAgICBPcHRpb25hbDxpbnQ+IG91dF9kYXRhYmFz
ZUlkOwotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IG91
dF9zcWxFcnJvcjsKLSAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNv
bG9ycyBvdXRfc2NyZWVuQ29sb3I7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpDb2xvckxpc3Q+IG91dF9hbHRlcm5hdGVDb2xvcnM7Ci0gICAgRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3Igb3V0X3ByaW50Q29sb3I7Ci0gICAgbV9h
Z2VudC0+ZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhlcnJvciwgaW5fZGF0YWJh
c2VJZCwgaW5fcXVlcnksIG91dF9jb2x1bW5OYW1lcywgb3V0X25vdGVzLCBvdXRfdGltZXN0YW1w
LCBvdXRfdmFsdWVzLCBvdXRfcGF5bG9hZCwgb3V0X2RhdGFiYXNlSWQsIG91dF9zcWxFcnJvciwg
b3V0X3NjcmVlbkNvbG9yLCBvdXRfYWx0ZXJuYXRlQ29sb3JzLCBvdXRfcHJpbnRDb2xvcik7Ci0K
LSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7Ci0gICAgICAgIGlmIChvdXRfY29sdW1uTmFtZXMp
Ci0gICAgICAgICAgICByZXN1bHQtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgb3V0X2NvbHVt
bk5hbWVzKTsKLSAgICAgICAgaWYgKG91dF9ub3Rlcy5oYXNWYWx1ZSgpKQotICAgICAgICAgICAg
cmVzdWx0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCAqb3V0X25vdGVzKTsKLSAgICAgICAgaWYgKG91
dF90aW1lc3RhbXAuaGFzVmFsdWUoKSkKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0RG91YmxlKCJ0
aW1lc3RhbXAiX3MsICpvdXRfdGltZXN0YW1wKTsKLSAgICAgICAgaWYgKG91dF92YWx1ZXMuaGFz
VmFsdWUoKSkKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsICpvdXRf
dmFsdWVzKTsKLSAgICAgICAgaWYgKG91dF9wYXlsb2FkLmhhc1ZhbHVlKCkpCi0gICAgICAgICAg
ICByZXN1bHQtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCAqb3V0X3BheWxvYWQpOwotICAgICAgICBp
ZiAob3V0X2RhdGFiYXNlSWQuaGFzVmFsdWUoKSkKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0SW50
ZWdlcigiZGF0YWJhc2VJZCJfcywgKm91dF9kYXRhYmFzZUlkKTsKLSAgICAgICAgaWYgKG91dF9z
cWxFcnJvcikKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgb3V0
X3NxbEVycm9yKTsKLSAgICAgICAgaWYgKG91dF9zY3JlZW5Db2xvci5oYXNWYWx1ZSgpKQotICAg
ICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCAqb3V0X3NjcmVlbkNv
bG9yKTsKLSAgICAgICAgaWYgKG91dF9hbHRlcm5hdGVDb2xvcnMpCi0gICAgICAgICAgICByZXN1
bHQtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIG91dF9hbHRlcm5hdGVDb2xvcnMpOwot
ICAgICAgICBpZiAob3V0X3ByaW50Q29sb3IuaGFzVmFsdWUoKSkKLSAgICAgICAgICAgIHJlc3Vs
dC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCAqb3V0X3ByaW50Q29sb3IpOwotICAgIH0KLSAg
ICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5k
UmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0g
ICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERp
c3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Ci19Ci0KLURhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVl
c0NhbGxiYWNrOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrKFJl
ZjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBiYWNrZW5kRGlzcGF0Y2hlciwgaW50IGlkKSA6IEJhY2tl
bmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UoV1RGTW92ZShiYWNrZW5kRGlzcGF0Y2hlciksIGlk
KSB7IH0KLQotdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNR
TEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjazo6c2VuZFN1Y2Nlc3MoUmVmUHRyPEpT
T046OkFycmF5T2Y8U3RyaW5nPj4mJiBjb2x1bW5OYW1lcywgT3B0aW9uYWw8U3RyaW5nPiYgbm90
ZXMsIE9wdGlvbmFsPGRvdWJsZT4mIHRpbWVzdGFtcCwgT3B0aW9uYWw8SlNPTjo6T2JqZWN0PiYg
dmFsdWVzLCBPcHRpb25hbDxKU09OOjpWYWx1ZT4mIHBheWxvYWQsIE9wdGlvbmFsPGludD4mIGRh
dGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiYg
c3FsRXJyb3IsIE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5
Q29sb3JzPiBzY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNl
OjpDb2xvckxpc3Q+JiYgYWx0ZXJuYXRlQ29sb3JzLCBPcHRpb25hbDxEYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvcj4gcHJpbnRDb2xvcikKLXsKLSAgICBSZWY8SlNP
Tjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgaWYg
KGNvbHVtbk5hbWVzKQotICAgICAgICBqc29uTWVzc2FnZS0+c2V0QXJyYXkoImNvbHVtbk5hbWVz
Il9zLCBjb2x1bW5OYW1lcyk7Ci0gICAgaWYgKG5vdGVzLmhhc1ZhbHVlKCkpCi0gICAgICAgIGpz
b25NZXNzYWdlLT5zZXRTdHJpbmcoIm5vdGVzIl9zLCAqbm90ZXMpOwotICAgIGlmICh0aW1lc3Rh
bXAuaGFzVmFsdWUoKSkKLSAgICAgICAganNvbk1lc3NhZ2UtPnNldERvdWJsZSgidGltZXN0YW1w
Il9zLCAqdGltZXN0YW1wKTsKLSAgICBpZiAodmFsdWVzLmhhc1ZhbHVlKCkpCi0gICAgICAgIGpz
b25NZXNzYWdlLT5zZXRPYmplY3QoInZhbHVlcyJfcywgKnZhbHVlcyk7Ci0gICAgaWYgKHBheWxv
YWQuaGFzVmFsdWUoKSkKLSAgICAgICAganNvbk1lc3NhZ2UtPnNldFZhbHVlKCJwYXlsb2FkIl9z
LCAqcGF5bG9hZCk7Ci0gICAgaWYgKGRhdGFiYXNlSWQuaGFzVmFsdWUoKSkKLSAgICAgICAganNv
bk1lc3NhZ2UtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsICpkYXRhYmFzZUlkKTsKLSAgICBp
ZiAoc3FsRXJyb3IpCi0gICAgICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoInNxbEVycm9yIl9z
LCBzcWxFcnJvcik7Ci0gICAgaWYgKHNjcmVlbkNvbG9yLmhhc1ZhbHVlKCkpCi0gICAgICAgIGpz
b25NZXNzYWdlLT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCAqc2NyZWVuQ29sb3IpOwotICAg
IGlmIChhbHRlcm5hdGVDb2xvcnMpCi0gICAgICAgIGpzb25NZXNzYWdlLT5zZXRBcnJheSgiYWx0
ZXJuYXRlQ29sb3JzIl9zLCBhbHRlcm5hdGVDb2xvcnMpOwotICAgIGlmIChwcmludENvbG9yLmhh
c1ZhbHVlKCkpCi0gICAgICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3Ms
ICpwcmludENvbG9yKTsKLSAgICBDYWxsYmFja0Jhc2U6OnNlbmRTdWNjZXNzKFdURk1vdmUoanNv
bk1lc3NhZ2UpKTsKLX0KLQotdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRl
U1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046
Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKQotewotICAgIGludCBpbl9kYXRhYmFzZUlkID0gbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+Z2V0SW50ZWdlcihwYXJhbWV0ZXJzLmdldCgpLCAiZGF0YWJhc2VJZCJf
cywgbnVsbHB0cik7Ci0gICAgU3RyaW5nIGluX3F1ZXJ5ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+
Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksICJxdWVyeSJfcywgbnVsbHB0cik7Ci0gICAgaWYg
KG1fYmFja2VuZERpc3BhdGNoZXItPmhhc1Byb3RvY29sRXJyb3JzKCkpIHsKLSAgICAgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6
SW52YWxpZFBhcmFtcywgIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnRGF0YWJhc2UuZXhlY3V0
ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMnIGNhbid0IGJlIHByb2Nlc3NlZCJfcyk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKLSAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1f
YWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMo
cmVxdWVzdElkLCBpbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0jZW5kaWYKLQotICAgIFJlZjxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6
RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjaz4gY2FsbGJhY2sgPSBh
ZG9wdFJlZigqbmV3IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FM
QXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrKG1fYmFja2VuZERpc3BhdGNoZXIuY29w
eVJlZigpLCByZXF1ZXN0SWQpKTsKLSAgICBtX2FnZW50LT5leGVjdXRlU1FMQXN5bmNPcHRpb25h
bFJldHVyblZhbHVlcyhpbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSwgY2FsbGJhY2suY29weVJlZigp
KTsKLQotfQotCi12b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5j
KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpCi17Ci0g
ICAgaW50IGluX2RhdGFiYXNlSWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRJbnRlZ2VyKHBh
cmFtZXRlcnMuZ2V0KCksICJkYXRhYmFzZUlkIl9zLCBudWxscHRyKTsKLSAgICBTdHJpbmcgaW5f
cXVlcnkgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwg
InF1ZXJ5Il9zLCBudWxscHRyKTsKLSAgICBpZiAobV9iYWNrZW5kRGlzcGF0Y2hlci0+aGFzUHJv
dG9jb2xFcnJvcnMoKSkgewotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90
b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCAiU29tZSBhcmd1bWVu
dHMgb2YgbWV0aG9kICdEYXRhYmFzZS5leGVjdXRlU1FMU3luYycgY2FuJ3QgYmUgcHJvY2Vzc2Vk
Il9zKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQotICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAg
ICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5leGVjdXRlU1FMU3luYyhyZXF1ZXN0SWQsIGlu
X2RhdGFiYXNlSWQsIGluX3F1ZXJ5KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgot
Ci0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0g
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+
PiBvdXRfY29sdW1uTmFtZXM7Ci0gICAgU3RyaW5nIG91dF9ub3RlczsKLSAgICBkb3VibGUgb3V0
X3RpbWVzdGFtcDsKLSAgICBKU09OOjpPYmplY3Qgb3V0X3ZhbHVlczsKLSAgICBKU09OOjpWYWx1
ZSBvdXRfcGF5bG9hZDsKLSAgICBpbnQgb3V0X2RhdGFiYXNlSWQ7Ci0gICAgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gb3V0X3NxbEVycm9yOwotICAgIFJlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiBvdXRfYWx0ZXJuYXRl
Q29sb3JzOwotICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3Jz
IG91dF9zY3JlZW5Db2xvcjsKLSAgICBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6
UHJpbnRDb2xvciBvdXRfcHJpbnRDb2xvcjsKLSAgICBtX2FnZW50LT5leGVjdXRlU1FMU3luYyhl
cnJvciwgaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnksIG91dF9jb2x1bW5OYW1lcywgJm91dF9ub3Rl
cywgJm91dF90aW1lc3RhbXAsIG91dF92YWx1ZXMsICZvdXRfcGF5bG9hZCwgJm91dF9kYXRhYmFz
ZUlkLCBvdXRfc3FsRXJyb3IsIG91dF9hbHRlcm5hdGVDb2xvcnMsICZvdXRfc2NyZWVuQ29sb3Is
ICZvdXRfcHJpbnRDb2xvcik7Ci0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7Ci0gICAgICAg
IHJlc3VsdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBvdXRfY29sdW1uTmFtZXMpOwotICAg
ICAgICByZXN1bHQtPnNldFN0cmluZygibm90ZXMiX3MsIG91dF9ub3Rlcyk7Ci0gICAgICAgIHJl
c3VsdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIG91dF90aW1lc3RhbXApOwotICAgICAgICBy
ZXN1bHQtPnNldE9iamVjdCgidmFsdWVzIl9zLCBvdXRfdmFsdWVzKTsKLSAgICAgICAgcmVzdWx0
LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgb3V0X3BheWxvYWQpOwotICAgICAgICByZXN1bHQtPnNl
dEludGVnZXIoImRhdGFiYXNlSWQiX3MsIG91dF9kYXRhYmFzZUlkKTsKLSAgICAgICAgcmVzdWx0
LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBvdXRfc3FsRXJyb3IpOwotICAgICAgICByZXN1bHQt
PnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIG91dF9hbHRlcm5hdGVDb2xvcnMpOwotICAg
ICAgICByZXN1bHQtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShvdXRfc2NyZWVuQ29sb3IpKTsK
LSAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShvdXRfcHJpbnRDb2xvcikp
OwotICAgIH0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNw
YXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsK
LSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJy
b3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Ci19Ci0K
LURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNDYWxsYmFj
azo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2soUmVmPEJhY2tlbmREaXNwYXRjaGVyPiYmIGJhY2tl
bmREaXNwYXRjaGVyLCBpbnQgaWQpIDogQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZShX
VEZNb3ZlKGJhY2tlbmREaXNwYXRjaGVyKSwgaWQpIHsgfQotCi12b2lkIERhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNDYWxsYmFjazo6c2VuZFN1Y2Nlc3Mo
UmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mJiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5n
JiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgSlNPTjo6T2JqZWN0IHZhbHVlcywgSlNPTjo6VmFs
dWUgcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpE
YXRhYmFzZTo6RXJyb3I+JiYgc3FsRXJyb3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNl
OjpQcmltYXJ5Q29sb3JzIHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6OkNvbG9yTGlzdD4mJiBhbHRlcm5hdGVDb2xvcnMsIERhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yIHByaW50Q29sb3IpCi17Ci0gICAgUmVmPEpTT046
Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25N
ZXNzYWdlLT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIGNvbHVtbk5hbWVzKTsKLSAgICBqc29u
TWVzc2FnZS0+c2V0U3RyaW5nKCJub3RlcyJfcywgbm90ZXMpOwotICAgIGpzb25NZXNzYWdlLT5z
ZXREb3VibGUoInRpbWVzdGFtcCJfcywgdGltZXN0YW1wKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0
T2JqZWN0KCJ2YWx1ZXMiX3MsIHZhbHVlcyk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFZhbHVlKCJw
YXlsb2FkIl9zLCBwYXlsb2FkKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0SW50ZWdlcigiZGF0YWJh
c2VJZCJfcywgZGF0YWJhc2VJZCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldE9iamVjdCgic3FsRXJy
b3IiX3MsIHNxbEVycm9yKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJzY3JlZW5Db2xv
ciJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZh
bHVlKHNjcmVlbkNvbG9yKSk7Ci0gICAganNvbk1lc3NhZ2UtPnNldEFycmF5KCJhbHRlcm5hdGVD
b2xvcnMiX3MsIGFsdGVybmF0ZUNvbG9ycyk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygi
cHJpbnRDb2xvciJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1D
b25zdGFudFZhbHVlKHByaW50Q29sb3IpKTsKLSAgICBDYWxsYmFja0Jhc2U6OnNlbmRTdWNjZXNz
KFdURk1vdmUoanNvbk1lc3NhZ2UpKTsKLX0KLQotdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVyOjpleGVjdXRlU1FMQXN5bmMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+
JiYgcGFyYW1ldGVycykKLXsKLSAgICBpbnQgaW5fZGF0YWJhc2VJZCA9IG1fYmFja2VuZERpc3Bh
dGNoZXItPmdldEludGVnZXIocGFyYW1ldGVycy5nZXQoKSwgImRhdGFiYXNlSWQiX3MsIG51bGxw
dHIpOwotICAgIFN0cmluZyBpbl9xdWVyeSA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmlu
ZyhwYXJhbWV0ZXJzLmdldCgpLCAicXVlcnkiX3MsIG51bGxwdHIpOwotICAgIGlmIChtX2JhY2tl
bmREaXNwYXRjaGVyLT5oYXNQcm90b2NvbEVycm9ycygpKSB7Ci0gICAgICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQ
YXJhbXMsICJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJ0RhdGFiYXNlLmV4ZWN1dGVTUUxBc3lu
YycgY2FuJ3QgYmUgcHJvY2Vzc2VkIl9zKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotI2lm
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotICAgIGlmIChtX2FsdGVy
bmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5leGVjdXRl
U1FMQXN5bmMocmVxdWVzdElkLCBpbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIFJlZjxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2s+IGNhbGxiYWNrID0gYWRvcHRSZWYoKm5l
dyBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJh
Y2sobV9iYWNrZW5kRGlzcGF0Y2hlci5jb3B5UmVmKCksIHJlcXVlc3RJZCkpOwotICAgIG1fYWdl
bnQtPmV4ZWN1dGVTUUxBc3luYyhpbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSwgY2FsbGJhY2suY29w
eVJlZigpKTsKLQotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxl
OiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250
ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1h
bmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xP
YmplY3RzLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEZyb250ZW5k
Um91dGVyOwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEZy
b250ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0
Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0
aC1hc3luYy1hdHRyaWJ1dGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlz
cGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5k
Um91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5z
cGVjdG9yIHsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVz
dEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xP
YmplY3RzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRo
LWFzeW5jLWF0dHJpYnV0ZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5hbWVz
cGFjZSBJbnNwZWN0b3IgewotCi0KLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLS8vIEZv
cndhcmQgZGVjbGFyYXRpb25zLgotbmFtZXNwYWNlIERhdGFiYXNlIHsKLWNsYXNzIEVycm9yOwot
ZW51bSBjbGFzcyBQcmltYXJ5Q29sb3JzOwotfSAvLyBEYXRhYmFzZQotLy8gRW5kIG9mIGZvcndh
cmQgZGVjbGFyYXRpb25zLgotCi0KLS8vIFR5cGVkZWZzLgotbmFtZXNwYWNlIERhdGFiYXNlIHsK
LS8qIFVuaXF1ZSBpZGVudGlmaWVyIG9mIERhdGFiYXNlIG9iamVjdC4gKi8KLXR5cGVkZWYgaW50
IERhdGFiYXNlSWQ7Ci10eXBlZGVmIEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IENvbG9yTGlzdDsKLX0gLy8gRGF0YWJhc2UKLS8vIEVu
ZCBvZiB0eXBlZGVmcy4KLQotbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKLQotU3RyaW5nIGdldEVu
dW1Db25zdGFudFZhbHVlKGludCBjb2RlKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5n
IGdldEVudW1Db25zdGFudFZhbHVlKFQgZW51bVZhbHVlKQotewotICAgIHJldHVybiBnZXRFbnVt
Q29uc3RhbnRWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KGVudW1WYWx1ZSkpOwotfQotCi19IC8vIG5h
bWVzcGFjZSBUZXN0SGVscGVycwotCi1uYW1lc3BhY2UgRGF0YWJhc2UgewotLyogICovCi1lbnVt
IGNsYXNzIFByaW1hcnlDb2xvcnMgewotICAgIFJlZCA9IDAsCi0gICAgR3JlZW4gPSAxLAotICAg
IEJsdWUgPSAyLAotfTsgLy8gZW51bSBjbGFzcyBQcmltYXJ5Q29sb3JzCi0vKiBEYXRhYmFzZSBl
cnJvci4gKi8KLWNsYXNzIEVycm9yIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewotcHVibGlj
OgotICAgIGVudW0gewotICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCi0gICAgICAgIE1lc3NhZ2VT
ZXQgPSAxIDw8IDAsCi0gICAgICAgIENvZGVTZXQgPSAxIDw8IDEsCi0gICAgICAgIEFsbEZpZWxk
c1NldCA9IChNZXNzYWdlU2V0IHwgQ29kZVNldCkKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8aW50
IFNUQVRFPgotICAgIGNsYXNzIEJ1aWxkZXIgewotICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0
cjxKU09OOjpPYmplY3Q+IG1fcmVzdWx0OwotCi0gICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBC
dWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsK
LSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXIoUmVmPC8qRXJyb3IqL0pTT046Ok9iamVjdD4m
JiBvYmplY3QpCi0gICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKLSAgICAg
ICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1
aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZnJp
ZW5kIGNsYXNzIEVycm9yOwotICAgIHB1YmxpYzoKLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
TWVzc2FnZVNldD4mIHNldE1lc3NhZ2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICAgICAgewot
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE1lc3NhZ2VTZXQpLCBwcm9wZXJ0
eV9tZXNzYWdlX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmco
Im1lc3NhZ2UiX3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TWVzc2Fn
ZVNldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2RlU2V0PiYg
c2V0Q29kZShpbnQgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBDb2RlU2V0KSwgcHJvcGVydHlfY29kZV9hbHJlYWR5X3NldCk7Ci0gICAgICAg
ICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcigiY29kZSJfcywgdmFsdWUpOwotICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxDb2RlU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgUmVmPEVy
cm9yPiByZWxlYXNlKCkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RB
VEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKLSAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKHNpemVvZihFcnJvcikgPT0gc2l6ZW9mKEpTT046Ok9iamVjdCksIGNhbm5v
dF9jYXN0KTsKLQotICAgICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4ganNvblJlc3VsdCA9IG1f
cmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7Ci0gICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFdURk1v
dmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPEVycm9yPio+KCZqc29uUmVzdWx0KSk7Ci0gICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIC8qCi0gICAgICog
U3ludGhldGljIGNvbnN0cnVjdG9yOgotICAgICAqIFJlZjxFcnJvcj4gcmVzdWx0ID0gRXJyb3I6
OmNyZWF0ZSgpCi0gICAgICogICAgIC5zZXRNZXNzYWdlKC4uLikKLSAgICAgKiAgICAgLnNldENv
ZGUoLi4uKQotICAgICAqICAgICAucmVsZWFzZSgpOwotICAgICAqLwotICAgIHN0YXRpYyBCdWls
ZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEJ1aWxkZXI8
Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOwotICAgIH0KLX07Ci0KLX0gLy8g
RGF0YWJhc2UKLQotCi0KLW5hbWVzcGFjZSBUZXN0SGVscGVycyB7Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIFByb3RvY29sRW51bVR5cGU+Ci1PcHRpb25hbDxQcm90b2NvbEVudW1UeXBlPiBwYXJzZUVu
dW1WYWx1ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJik7Ci0KLS8vIEVudW1zIGluIHRoZSAnRGF0
YWJhc2UnIERvbWFpbgotdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4oY29uc3QgU3RyaW5nJik7Ci0K
LX0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0K
LX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi1uYW1lc3BhY2UgV1RGIHsKLQotdGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwotCi0vLyBIYXNoIGRlY2xhcmF0aW9ucyBp
biB0aGUgJ0RhdGFiYXNlJyBEb21haW4KLXRlbXBsYXRlPD4KLXN0cnVjdCBEZWZhdWx0SGFzaDxJ
bnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gewotICAgIHR5cGVk
ZWYgSW50SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4g
SGFzaDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xPYmplY3RzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRy
aWJ1dGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotCi0j
aW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgot
Ci1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotbmFtZXNw
YWNlIFRlc3RIZWxwZXJzIHsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3Rh
bnRfdmFsdWVzW10gPSB7Ci0gICAgInJlZCIsCi0gICAgImdyZWVuIiwKLSAgICAiYmx1ZSIsCi0g
ICAgImN5YW4iLAotICAgICJtYWdlbnRhIiwKLSAgICAieWVsbG93IiwKLSAgICAiYmxhY2siLAot
fTsKLQotU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7Ci0gICAgcmV0dXJu
IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvZGVdOwotfQotCi0vLyBFbnVtcyBpbiB0aGUgJ0RhdGFi
YXNlJyBEb21haW4KLXRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpQcmltYXJ5Q29sb3JzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+KGNvbnN0IFN0cmluZyYgcHJvdG9j
b2xTdHJpbmcpCi17Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0g
ewotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5
Q29sb3JzOjpSZWQsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6OlByaW1hcnlDb2xvcnM6OkdyZWVuLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzOjpCbHVlLAotICAgIH07Ci0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCAzOyArK2kpCi0gICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBl
bnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCi0gICAgICAgICAgICByZXR1
cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzKWNvbnN0YW50
VmFsdWVzW2ldOwotCi0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotCi19IC8vIG5hbWVz
cGFjZSBUZXN0SGVscGVycwotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5j
cHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRy
aWJ1dGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0j
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXJzLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi1AcHJvdG9jb2wgVGVzdFByb3Rv
Y29sRGF0YWJhc2VEb21haW5IYW5kbGVyOwotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi1j
bGFzcyBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1Ymxp
YyBBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyIHsKLSAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsg
bV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KLSAgICB2b2lkIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxS
ZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0SWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJp
bmcmIGluX3F1ZXJ5KSBmaW5hbDsKLSAgICB2b2lkIGV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0
dXJuVmFsdWVzKGxvbmcgcmVxdWVzdElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5n
JiBpbl9xdWVyeSkgZmluYWw7Ci0gICAgdm9pZCBleGVjdXRlU1FMU3luYyhsb25nIHJlcXVlc3RJ
ZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpIGZpbmFsOwotICAg
IHZvaWQgZXhlY3V0ZVNRTEFzeW5jKGxvbmcgcmVxdWVzdElkLCBpbnQgaW5fZGF0YWJhc2VJZCwg
Y29uc3QgU3RyaW5nJiBpbl9xdWVyeSkgZmluYWw7Ci1wcml2YXRlOgotICAgIFJldGFpblB0cjxp
ZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwotfTsKLQot
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFj
a2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmRE
aXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRz
LXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xC
YWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgi
Ci0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW5jbHVkZSA8d3Rm
L0pTT05WYWx1ZXMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXZvaWQgT2JqQ0luc3Bl
Y3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1
cm5WYWx1ZXMobG9uZyByZXF1ZXN0SWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcm
IGluX3F1ZXJ5KQotewotICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBz
ZWxlY3RvcihleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzV2l0aEVycm9yQ2FsbGJh
Y2s6c3VjY2Vzc0NhbGxiYWNrOmRhdGFiYXNlSWQ6cXVlcnk6KV0pIHsKLSAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNw
YXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS5leGVjdXRlU1FMU3luY09wdGlvbmFs
UmV0dXJuVmFsdWVzJyB3YXMgbm90IGZvdW5kIl9zKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5k
RGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3Bh
dGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCkt
PnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgfTsKLQotICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9
IF4oTlNBcnJheS8qPE5TU3RyaW5nPiovICoqY29sdW1uTmFtZXMsIE5TU3RyaW5nICoqbm90ZXMs
IGRvdWJsZSAqdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKip2YWx1ZXMsIFJXSVBy
b3RvY29sSlNPTk9iamVjdCAqKnBheWxvYWQsIGludCAqZGF0YWJhc2VJZCwgVGVzdFByb3RvY29s
RGF0YWJhc2VFcnJvciAqKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xv
cnMgKnNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiphbHRlcm5hdGVDb2xvcnMs
IFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1By
aW50Q29sb3IgKnByaW50Q29sb3IpIHsKLSAgICAgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0
T2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7
Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihub3Rl
cywgQCJub3RlcyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9Q
QVJBTUVURVIodmFsdWVzLCBAInZhbHVlcyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9S
X0JBRF9PUFRJT05BTF9QQVJBTUVURVIocGF5bG9hZCwgQCJwYXlsb2FkIik7Ci0gICAgICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihzcWxFcnJvciwgQCJzcWxF
cnJvciIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVU
RVIoYWx0ZXJuYXRlQ29sb3JzLCBAImFsdGVybmF0ZUNvbG9ycyIpOwotICAgICAgICBpZiAoY29s
dW1uTmFtZXMpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJjb2x1bW5OYW1l
cyJfcywgdG9KU09OU3RyaW5nQXJyYXkoKmNvbHVtbk5hbWVzKSk7Ci0gICAgICAgIGlmIChub3Rl
cykKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJub3RlcyJfcywgKm5vdGVz
KTsKLSAgICAgICAgaWYgKHRpbWVzdGFtcCkKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0
RG91YmxlKCJ0aW1lc3RhbXAiX3MsICp0aW1lc3RhbXApOwotICAgICAgICBpZiAodmFsdWVzKQot
ICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgWyp2YWx1ZXMg
dG9KU09OT2JqZWN0XSk7Ci0gICAgICAgIGlmIChwYXlsb2FkKQotICAgICAgICAgICAgcmVzdWx0
T2JqZWN0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgWypwYXlsb2FkIHRvSlNPTk9iamVjdF0pOwot
ICAgICAgICBpZiAoZGF0YWJhc2VJZCkKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0SW50
ZWdlcigiZGF0YWJhc2VJZCJfcywgKmRhdGFiYXNlSWQpOwotICAgICAgICBpZiAoc3FsRXJyb3Ip
Ci0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIFsqc3Fs
RXJyb3IgdG9KU09OT2JqZWN0XSk7Ci0gICAgICAgIGlmIChzY3JlZW5Db2xvcikKLSAgICAgICAg
ICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgdG9Qcm90b2NvbFN0
cmluZygqc2NyZWVuQ29sb3IpKTsKLSAgICAgICAgaWYgKGFsdGVybmF0ZUNvbG9ycykKLSAgICAg
ICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgdG9KU09O
U3RyaW5nQXJyYXkoKmFsdGVybmF0ZUNvbG9ycykpOwotICAgICAgICBpZiAocHJpbnRDb2xvcikK
LSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCB0b1By
b3RvY29sU3RyaW5nKCpwcmludENvbG9yKSk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCkt
PnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0T2JqZWN0KSwgZmFsc2UpOwot
ICAgIH07Ci0KLSAgICBpbnQgb19pbl9kYXRhYmFzZUlkID0gaW5fZGF0YWJhc2VJZDsKLSAgICBO
U1N0cmluZyAqb19pbl9xdWVyeSA9IGluX3F1ZXJ5OwotCi0gICAgW21fZGVsZWdhdGUgZXhlY3V0
ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1dpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJh
Y2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjayBkYXRhYmFzZUlkOm9faW5fZGF0YWJh
c2VJZCBxdWVyeTpvX2luX3F1ZXJ5XTsKLX0KLQotdm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VC
YWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9u
ZyByZXF1ZXN0SWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KQot
ewotICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihleGVj
dXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1dpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3ND
YWxsYmFjazpkYXRhYmFzZUlkOnF1ZXJ5OildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVy
KCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0
aG9kTm90Rm91bmQsICInRGF0YWJhc2UuZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1
ZXMnIHdhcyBub3QgZm91bmQiX3MpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5k
UGVuZGluZ0Vycm9ycygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWQgZXJyb3JD
YWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVy
KCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2Vy
dmVyRXJyb3IsIGVycm9yKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRp
bmdFcnJvcnMoKTsKLSAgICB9OwotCi0gICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihOU0FycmF5
Lyo8TlNTdHJpbmc+Ki8gKipjb2x1bW5OYW1lcywgTlNTdHJpbmcgKipub3RlcywgZG91YmxlICp0
aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnZhbHVlcywgUldJUHJvdG9jb2xKU09O
T2JqZWN0ICoqcGF5bG9hZCwgaW50ICpkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVy
cm9yICoqc3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqc2NyZWVu
Q29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3Rv
Y29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3Ig
KnByaW50Q29sb3IpIHsKLSAgICAgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0T2JqZWN0ID0g
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURf
T1BUSU9OQUxfUEFSQU1FVEVSKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7Ci0gICAgICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihub3RlcywgQCJub3Rl
cyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIo
dmFsdWVzLCBAInZhbHVlcyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJ
T05BTF9QQVJBTUVURVIocGF5bG9hZCwgQCJwYXlsb2FkIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihzcWxFcnJvciwgQCJzcWxFcnJvciIpOwot
ICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoYWx0ZXJu
YXRlQ29sb3JzLCBAImFsdGVybmF0ZUNvbG9ycyIpOwotICAgICAgICBpZiAoY29sdW1uTmFtZXMp
Ci0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgdG9K
U09OU3RyaW5nQXJyYXkoKmNvbHVtbk5hbWVzKSk7Ci0gICAgICAgIGlmIChub3RlcykKLSAgICAg
ICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJub3RlcyJfcywgKm5vdGVzKTsKLSAgICAg
ICAgaWYgKHRpbWVzdGFtcCkKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0RG91YmxlKCJ0
aW1lc3RhbXAiX3MsICp0aW1lc3RhbXApOwotICAgICAgICBpZiAodmFsdWVzKQotICAgICAgICAg
ICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgWyp2YWx1ZXMgdG9KU09OT2Jq
ZWN0XSk7Ci0gICAgICAgIGlmIChwYXlsb2FkKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5z
ZXRWYWx1ZSgicGF5bG9hZCJfcywgWypwYXlsb2FkIHRvSlNPTk9iamVjdF0pOwotICAgICAgICBp
ZiAoZGF0YWJhc2VJZCkKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0SW50ZWdlcigiZGF0
YWJhc2VJZCJfcywgKmRhdGFiYXNlSWQpOwotICAgICAgICBpZiAoc3FsRXJyb3IpCi0gICAgICAg
ICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIFsqc3FsRXJyb3IgdG9K
U09OT2JqZWN0XSk7Ci0gICAgICAgIGlmIChzY3JlZW5Db2xvcikKLSAgICAgICAgICAgIHJlc3Vs
dE9iamVjdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgdG9Qcm90b2NvbFN0cmluZygqc2Ny
ZWVuQ29sb3IpKTsKLSAgICAgICAgaWYgKGFsdGVybmF0ZUNvbG9ycykKLSAgICAgICAgICAgIHJl
c3VsdE9iamVjdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5nQXJy
YXkoKmFsdGVybmF0ZUNvbG9ycykpOwotICAgICAgICBpZiAocHJpbnRDb2xvcikKLSAgICAgICAg
ICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCB0b1Byb3RvY29sU3Ry
aW5nKCpwcmludENvbG9yKSk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNw
b25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0T2JqZWN0KSwgZmFsc2UpOwotICAgIH07Ci0K
LSAgICBpbnQgb19pbl9kYXRhYmFzZUlkID0gaW5fZGF0YWJhc2VJZDsKLSAgICBOU1N0cmluZyAq
b19pbl9xdWVyeSA9IGluX3F1ZXJ5OwotCi0gICAgW21fZGVsZWdhdGUgZXhlY3V0ZVNRTEFzeW5j
T3B0aW9uYWxSZXR1cm5WYWx1ZXNXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nl
c3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDpvX2luX2RhdGFiYXNlSWQgcXVl
cnk6b19pbl9xdWVyeV07Ci19Ci0KLXZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5jKGxvbmcgcmVxdWVzdElkLCBpbnQgaW5fZGF0YWJhc2VJ
ZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkKLXsKLSAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3Bv
bmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoZXhlY3V0ZVNRTFN5bmNXaXRoRXJyb3JDYWxsYmFjazpz
dWNjZXNzQ2FsbGJhY2s6ZGF0YWJhc2VJZDpxdWVyeTopXSkgewotICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNo
ZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RhdGFiYXNlLmV4ZWN1dGVTUUxTeW5jJyB3YXMgbm90IGZv
dW5kIl9zKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMo
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5T
U3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90
b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJv
cik7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0g
ICAgfTsKLQotICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiov
ICpjb2x1bW5OYW1lcywgTlNTdHJpbmcgKm5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSV0lQcm90
b2NvbEpTT05PYmplY3QgKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkLCBp
bnQgZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqc3FsRXJyb3IsIE5TQXJy
YXkvKjxOU1N0cmluZz4qLyAqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVBy
aW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5
bmNQcmludENvbG9yIHByaW50Q29sb3IpIHsKLSAgICAgICAgUmVmPEpTT046Ok9iamVjdD4gcmVz
dWx0T2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICAgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoY29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsK
LSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIobm90ZXMsIEAi
bm90ZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIo
dmFsdWVzLCBAInZhbHVlcyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVE
X1BBUkFNRVRFUihwYXlsb2FkLCBAInBheWxvYWQiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoc3FsRXJyb3IsIEAic3FsRXJyb3IiKTsKLSAgICAgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoYWx0ZXJuYXRlQ29sb3JzLCBA
ImFsdGVybmF0ZUNvbG9ycyIpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJjb2x1
bW5OYW1lcyJfcywgdG9KU09OU3RyaW5nQXJyYXkoY29sdW1uTmFtZXMpKTsKLSAgICAgICAgcmVz
dWx0T2JqZWN0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBub3Rlcyk7Ci0gICAgICAgIHJlc3VsdE9i
amVjdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIHRpbWVzdGFtcCk7Ci0gICAgICAgIHJlc3Vs
dE9iamVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFt2YWx1ZXMgdG9KU09OT2JqZWN0XSk7Ci0g
ICAgICAgIHJlc3VsdE9iamVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFtwYXlsb2FkIHRvSlNP
Tk9iamVjdF0pOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldEludGVnZXIoImRhdGFiYXNlSWQi
X3MsIGRhdGFiYXNlSWQpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdCgic3FsRXJy
b3IiX3MsIFtzcWxFcnJvciB0b0pTT05PYmplY3RdKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5z
ZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCB0b0pTT05TdHJpbmdBcnJheShhbHRlcm5hdGVD
b2xvcnMpKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9z
LCB0b1Byb3RvY29sU3RyaW5nKHNjcmVlbkNvbG9yKSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+
c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKHByaW50Q29sb3IpKTsK
LSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RG
TW92ZShyZXN1bHRPYmplY3QpLCBmYWxzZSk7Ci0gICAgfTsKLQotICAgIGludCBvX2luX2RhdGFi
YXNlSWQgPSBpbl9kYXRhYmFzZUlkOwotICAgIE5TU3RyaW5nICpvX2luX3F1ZXJ5ID0gaW5fcXVl
cnk7Ci0KLSAgICBbbV9kZWxlZ2F0ZSBleGVjdXRlU1FMU3luY1dpdGhFcnJvckNhbGxiYWNrOmVy
cm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjayBkYXRhYmFzZUlkOm9f
aW5fZGF0YWJhc2VJZCBxdWVyeTpvX2luX3F1ZXJ5XTsKLX0KLQotdm9pZCBPYmpDSW5zcGVjdG9y
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTEFzeW5jKGxvbmcgcmVxdWVzdElk
LCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkKLXsKLSAgICBpZiAo
IVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoZXhlY3V0ZVNRTEFzeW5j
V2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOmRhdGFiYXNlSWQ6cXVlcnk6KV0pIHsK
LSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0
SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS5leGVjdXRl
U1FMQXN5bmMnIHdhcyBub3QgZm91bmQiX3MpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigp
LT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWQg
ZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hl
cjo6U2VydmVyRXJyb3IsIGVycm9yKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2Vu
ZFBlbmRpbmdFcnJvcnMoKTsKLSAgICB9OwotCi0gICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihO
U0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqbm90ZXMsIGRvdWJs
ZSB0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqdmFsdWVzLCBSV0lQcm90b2NvbEpT
T05PYmplY3QgKnBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVy
cm9yICpzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzIHNjcmVlbkNv
bG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29s
RGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yIHByaW50Q29sb3IpIHsKLSAgICAgICAg
UmVmPEpTT046Ok9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
LSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoY29sdW1uTmFt
ZXMsIEAiY29sdW1uTmFtZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJF
RF9QQVJBTUVURVIobm90ZXMsIEAibm90ZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9SRVFVSVJFRF9QQVJBTUVURVIodmFsdWVzLCBAInZhbHVlcyIpOwotICAgICAgICBUSFJPV19F
WENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihwYXlsb2FkLCBAInBheWxvYWQiKTsKLSAg
ICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoc3FsRXJyb3IsIEAi
c3FsRXJyb3IiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVU
RVIoYWx0ZXJuYXRlQ29sb3JzLCBAImFsdGVybmF0ZUNvbG9ycyIpOwotICAgICAgICByZXN1bHRP
YmplY3QtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgdG9KU09OU3RyaW5nQXJyYXkoY29sdW1u
TmFtZXMpKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBub3Rl
cyk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIHRpbWVz
dGFtcCk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFt2YWx1
ZXMgdG9KU09OT2JqZWN0XSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0VmFsdWUoInBheWxv
YWQiX3MsIFtwYXlsb2FkIHRvSlNPTk9iamVjdF0pOwotICAgICAgICByZXN1bHRPYmplY3QtPnNl
dEludGVnZXIoImRhdGFiYXNlSWQiX3MsIGRhdGFiYXNlSWQpOwotICAgICAgICByZXN1bHRPYmpl
Y3QtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIFtzcWxFcnJvciB0b0pTT05PYmplY3RdKTsKLSAg
ICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCB0b1Byb3RvY29s
U3RyaW5nKHNjcmVlbkNvbG9yKSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoImFs
dGVybmF0ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5nQXJyYXkoYWx0ZXJuYXRlQ29sb3JzKSk7Ci0g
ICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCB0b1Byb3RvY29s
U3RyaW5nKHByaW50Q29sb3IpKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJl
c3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHRPYmplY3QpLCBmYWxzZSk7Ci0gICAgfTsK
LQotICAgIGludCBvX2luX2RhdGFiYXNlSWQgPSBpbl9kYXRhYmFzZUlkOwotICAgIE5TU3RyaW5n
ICpvX2luX3F1ZXJ5ID0gaW5fcXVlcnk7Ci0KLSAgICBbbV9kZWxlZ2F0ZSBleGVjdXRlU1FMQXN5
bmNXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNz
Q2FsbGJhY2sgZGF0YWJhc2VJZDpvX2luX2RhdGFiYXNlSWQgcXVlcnk6b19pbl9xdWVyeV07Ci19
Ci0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xD
b25maWd1cmF0aW9uLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5k
cy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KLQot
X19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAotQHByb3BlcnR5IChub25hdG9taWMsIHJl
dGFpbiwgc2V0dGVyPXNldERhdGFiYXNlSGFuZGxlcjopIGlkPFRlc3RQcm90b2NvbERhdGFiYXNl
RG9tYWluSGFuZGxlcj4gZGF0YWJhc2VIYW5kbGVyOwotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xDb25maWd1cmF0aW9uLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29t
bWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgi
Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0
ZURpc3BhdGNoYWJsZUFnZW50Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJs
ZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0
b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCi17Ci0gICAg
QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKLSAgICBpZDxUZXN0
UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+IF9kYXRhYmFzZUhhbmRsZXI7Ci19Ci0KLS0g
KGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29u
dHJvbGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYg
KCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAg
ICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZv
aWQpZGVhbGxvYwotewotICAgIFtfZGF0YWJhc2VIYW5kbGVyIHJlbGVhc2VdOwotICAgIFtzdXBl
ciBkZWFsbG9jXTsKLX0KLQotLSAodm9pZClzZXREYXRhYmFzZUhhbmRsZXI6KGlkPFRlc3RQcm90
b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4paGFuZGxlcgotewotICAgIGlmIChoYW5kbGVyID09
IF9kYXRhYmFzZUhhbmRsZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIFtfZGF0YWJhc2VIYW5k
bGVyIHJlbGVhc2VdOwotICAgIF9kYXRhYmFzZUhhbmRsZXIgPSBbaGFuZGxlciByZXRhaW5dOwot
Ci0gICAgYXV0byBhbHRlcm5hdGVEaXNwYXRjaGVyID0gbWFrZVVuaXF1ZTxPYmpDSW5zcGVjdG9y
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7Ci0gICAgYXV0byBhbHRlcm5hdGVB
Z2VudCA9IG1ha2VVbmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8RGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlciwgQWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4+KCJEYXRh
YmFzZSJfcywgKl9jb250cm9sbGVyLCBXVEZNb3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIpKTsKLSAg
ICBfY29udHJvbGxlci0+YXBwZW5kRXh0cmFBZ2VudChXVEZNb3ZlKGFsdGVybmF0ZUFnZW50KSk7
Ci19Ci0KLS0gKGlkPFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4pZGF0YWJhc2VI
YW5kbGVyCi17Ci0gICAgcmV0dXJuIF9kYXRhYmFzZUhhbmRsZXI7Ci19Ci0KLUBlbmQKLQotCi0j
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2Nv
bEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgot
I2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsK
LQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRp
b24uaD4KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgot
Ci0KLUBjbGFzcyBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yOwotCi10eXBlZGVmIE5TX0VOVU0o
TlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xQbGF0Zm9ybSkgewotICAgIFRlc3RQcm90b2NvbFBsYXRm
b3JtQWxsLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYywKLSAgICBUZXN0UHJvdG9j
b2xQbGF0Zm9ybUlPUywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TLAotfTsKLQotCi10
eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xv
cnMpIHsKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNSZWQsCi0gICAgVGVz
dFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzR3JlZW4sCi0gICAgVGVzdFByb3RvY29sRGF0
YWJhc2VQcmltYXJ5Q29sb3JzQmx1ZSwKLX07Ci0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIs
IFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1By
aW50Q29sb3IpIHsKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXNQcmludENvbG9yQ3lhbiwKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yTWFnZW50YSwKLSAgICBU
ZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmlu
dENvbG9yWWVsbG93LAotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRp
b25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JCbGFjaywKLX07Ci0KLXR5cGVkZWYgTlNfRU5VTShO
U0ludGVnZXIsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1
cm5WYWx1ZXNQcmludENvbG9yKSB7Ci0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FM
QXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JDeWFuLAotICAgIFRlc3RQcm90b2Nv
bERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yTWFn
ZW50YSwKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0
dXJuVmFsdWVzUHJpbnRDb2xvclllbGxvdywKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvckJsYWNrLAotfTsKLQotdHlw
ZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3lu
Y1ByaW50Q29sb3IpIHsKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJp
bnRDb2xvckN5YW4sCi0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50
Q29sb3JNYWdlbnRhLAotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmlu
dENvbG9yWWVsbG93LAotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmlu
dENvbG9yQmxhY2ssCi19OwotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9j
b2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3IpIHsKLSAgICBUZXN0UHJvdG9jb2xE
YXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JDeWFuLAotICAgIFRlc3RQcm90b2NvbERh
dGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvck1hZ2VudGEsCi0gICAgVGVzdFByb3RvY29s
RGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yWWVsbG93LAotICAgIFRlc3RQcm90b2Nv
bERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvckJsYWNrLAotfTsKLQotCi1fX2F0dHJp
YnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29s
RGF0YWJhc2VFcnJvciA6IFJXSVByb3RvY29sSlNPTk9iamVjdAotLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQ7Ci0t
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2Jq
ZWN0ICopanNvbk9iamVjdDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3Ry
aW5nICopbWVzc2FnZSBjb2RlOihpbnQpY29kZTsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAo
bm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqbWVzc2FnZTsKLS8qIHJlcXVpcmVkICovIEBwcm9w
ZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCBjb2RlOwotQGVuZAotCi1AcHJvdG9jb2wgVGVz
dFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyIDxOU09iamVjdD4KLUBvcHRpb25hbAotLSAo
dm9pZClleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzV2l0aEVycm9yQ2FsbGJhY2s6
KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoo
dm9pZCheKShOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKipjb2x1bW5OYW1lcywgTlNTdHJpbmcgKipu
b3RlcywgZG91YmxlICp0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnZhbHVlcywg
UldJUHJvdG9jb2xKU09OT2JqZWN0ICoqcGF5bG9hZCwgaW50ICpkYXRhYmFzZUlkLCBUZXN0UHJv
dG9jb2xEYXRhYmFzZUVycm9yICoqc3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFy
eUNvbG9ycyAqc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmFsdGVybmF0ZUNv
bG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFs
dWVzUHJpbnRDb2xvciAqcHJpbnRDb2xvcikpc3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNlSWQ6KGlu
dClkYXRhYmFzZUlkIHF1ZXJ5OihOU1N0cmluZyAqKXF1ZXJ5OwotLSAodm9pZClleGVjdXRlU1FM
QXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1dpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3Ry
aW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoTlNBcnJh
eS8qPE5TU3RyaW5nPiovICoqY29sdW1uTmFtZXMsIE5TU3RyaW5nICoqbm90ZXMsIGRvdWJsZSAq
dGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKip2YWx1ZXMsIFJXSVByb3RvY29sSlNP
Tk9iamVjdCAqKnBheWxvYWQsIGludCAqZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VF
cnJvciAqKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgKnNjcmVl
bkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90
b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9y
ICpwcmludENvbG9yKSlzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDooaW50KWRhdGFiYXNlSWQg
cXVlcnk6KE5TU3RyaW5nICopcXVlcnk7Ci0tICh2b2lkKWV4ZWN1dGVTUUxTeW5jV2l0aEVycm9y
Q2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3ND
YWxsYmFjazoodm9pZCheKShOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmNvbHVtbk5hbWVzLCBOU1N0
cmluZyAqbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqdmFs
dWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBUZXN0
UHJvdG9jb2xEYXRhYmFzZUVycm9yICpzcWxFcnJvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICph
bHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyBzY3JlZW5D
b2xvciwgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3IgcHJpbnRD
b2xvcikpc3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNlSWQ6KGludClkYXRhYmFzZUlkIHF1ZXJ5OihO
U1N0cmluZyAqKXF1ZXJ5OwotLSAodm9pZClleGVjdXRlU1FMQXN5bmNXaXRoRXJyb3JDYWxsYmFj
azoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNr
Oih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqY29sdW1uTmFtZXMsIE5TU3RyaW5nICpu
b3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICp2YWx1ZXMsIFJX
SVByb3RvY29sSlNPTk9iamVjdCAqcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQsIFRlc3RQcm90b2Nv
bERhdGFiYXNlRXJyb3IgKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xv
cnMgc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqYWx0ZXJuYXRlQ29sb3JzLCBU
ZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3IgcHJpbnRDb2xvcikp
c3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNlSWQ6KGludClkYXRhYmFzZUlkIHF1ZXJ5OihOU1N0cmlu
ZyAqKXF1ZXJ5OwotQGVuZAotCi0KLQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9j
b2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQg
IlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUu
aCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxl
ci5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotCi0KLQotIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRz
LXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0IDxXZWJJbnNw
ZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0
b3IgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+Ci1PcHRpb25hbDxPYmpDRW51
bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKLQotaW5saW5l
IFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFBsYXRmb3JtIHZhbHVlKQotewot
ICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1BbGw6Ci0g
ICAgICAgIHJldHVybiAiYWxsIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5l
cmljOgotICAgICAgICByZXR1cm4gImdlbmVyaWMiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQ
bGF0Zm9ybUlPUzoKLSAgICAgICAgcmV0dXJuICJpb3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9j
b2xQbGF0Zm9ybU1hY09TOgotICAgICAgICByZXR1cm4gIm1hY29zIl9zOwotICAgIH0KLX0KLQot
dGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFBsYXRmb3JtPiBmcm9tUHJv
dG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gImFs
bCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDsKLSAgICBpZiAodmFs
dWUgPT0gImdlbmVyaWMiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1HZW5l
cmljOwotICAgIGlmICh2YWx1ZSA9PSAiaW9zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2Nv
bFBsYXRmb3JtSU9TOwotICAgIGlmICh2YWx1ZSA9PSAibWFjb3MiKQotICAgICAgICByZXR1cm4g
VGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQot
Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFzZVBy
aW1hcnlDb2xvcnMgdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0
UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNSZWQ6Ci0gICAgICAgIHJldHVybiAicmVkIl9z
OwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzR3JlZW46Ci0gICAg
ICAgIHJldHVybiAiZ3JlZW4iX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1h
cnlDb2xvcnNCbHVlOgotICAgICAgICByZXR1cm4gImJsdWUiX3M7Ci0gICAgfQotfQotCi10ZW1w
bGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3Jz
PiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFs
dWUgPT0gInJlZCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlD
b2xvcnNSZWQ7Ci0gICAgaWYgKHZhbHVlID09ICJncmVlbiIpCi0gICAgICAgIHJldHVybiBUZXN0
UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNHcmVlbjsKLSAgICBpZiAodmFsdWUgPT0gImJs
dWUiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzQmx1
ZTsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9j
b2xTdHJpbmcoVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJu
VmFsdWVzUHJpbnRDb2xvciB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBjYXNl
IFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1By
aW50Q29sb3JDeWFuOgotICAgICAgICByZXR1cm4gImN5YW4iX3M7Ci0gICAgY2FzZSBUZXN0UHJv
dG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9y
TWFnZW50YToKLSAgICAgICAgcmV0dXJuICJtYWdlbnRhIl9zOwotICAgIGNhc2UgVGVzdFByb3Rv
Y29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvclll
bGxvdzoKLSAgICAgICAgcmV0dXJuICJ5ZWxsb3ciX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xE
YXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yQmxhY2s6
Ci0gICAgICAgIHJldHVybiAiYmxhY2siX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxp
bmUgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0
dXJuVmFsdWVzUHJpbnRDb2xvcj4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFs
dWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJjeWFuIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90
b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JD
eWFuOwotICAgIGlmICh2YWx1ZSA9PSAibWFnZW50YSIpCi0gICAgICAgIHJldHVybiBUZXN0UHJv
dG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9y
TWFnZW50YTsKLSAgICBpZiAodmFsdWUgPT0gInllbGxvdyIpCi0gICAgICAgIHJldHVybiBUZXN0
UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENv
bG9yWWVsbG93OwotICAgIGlmICh2YWx1ZSA9PSAiYmxhY2siKQotICAgICAgICByZXR1cm4gVGVz
dFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRD
b2xvckJsYWNrOwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLWlubGluZSBTdHJpbmcg
dG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlv
bmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvciB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsK
LSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1
cm5WYWx1ZXNQcmludENvbG9yQ3lhbjoKLSAgICAgICAgcmV0dXJuICJjeWFuIl9zOwotICAgIGNh
c2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVl
c1ByaW50Q29sb3JNYWdlbnRhOgotICAgICAgICByZXR1cm4gIm1hZ2VudGEiX3M7Ci0gICAgY2Fz
ZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVz
UHJpbnRDb2xvclllbGxvdzoKLSAgICAgICAgcmV0dXJuICJ5ZWxsb3ciX3M7Ci0gICAgY2FzZSBU
ZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJp
bnRDb2xvckJsYWNrOgotICAgICAgICByZXR1cm4gImJsYWNrIl9zOwotICAgIH0KLX0KLQotdGVt
cGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFz
eW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gImN5YW4iKQotICAgICAgICBy
ZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZh
bHVlc1ByaW50Q29sb3JDeWFuOwotICAgIGlmICh2YWx1ZSA9PSAibWFnZW50YSIpCi0gICAgICAg
IHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJu
VmFsdWVzUHJpbnRDb2xvck1hZ2VudGE7Ci0gICAgaWYgKHZhbHVlID09ICJ5ZWxsb3ciKQotICAg
ICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJl
dHVyblZhbHVlc1ByaW50Q29sb3JZZWxsb3c7Ci0gICAgaWYgKHZhbHVlID09ICJibGFjayIpCi0g
ICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFs
UmV0dXJuVmFsdWVzUHJpbnRDb2xvckJsYWNrOwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19
Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVTUUxTeW5jUHJpbnRDb2xvciB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAg
ICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yQ3lhbjoK
LSAgICAgICAgcmV0dXJuICJjeWFuIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VF
eGVjdXRlU1FMU3luY1ByaW50Q29sb3JNYWdlbnRhOgotICAgICAgICByZXR1cm4gIm1hZ2VudGEi
X3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xv
clllbGxvdzoKLSAgICAgICAgcmV0dXJuICJ5ZWxsb3ciX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9j
b2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvckJsYWNrOgotICAgICAgICByZXR1cm4g
ImJsYWNrIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQ
cm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yPiBmcm9tUHJvdG9jb2xTdHJp
bmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gImN5YW4iKQotICAg
ICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3JD
eWFuOwotICAgIGlmICh2YWx1ZSA9PSAibWFnZW50YSIpCi0gICAgICAgIHJldHVybiBUZXN0UHJv
dG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvck1hZ2VudGE7Ci0gICAgaWYgKHZh
bHVlID09ICJ5ZWxsb3ciKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVj
dXRlU1FMU3luY1ByaW50Q29sb3JZZWxsb3c7Ci0gICAgaWYgKHZhbHVlID09ICJibGFjayIpCi0g
ICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xv
ckJsYWNrOwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLWlubGluZSBTdHJpbmcgdG9Q
cm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29s
b3IgdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xE
YXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JDeWFuOgotICAgICAgICByZXR1cm4gImN5
YW4iX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50
Q29sb3JNYWdlbnRhOgotICAgICAgICByZXR1cm4gIm1hZ2VudGEiX3M7Ci0gICAgY2FzZSBUZXN0
UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JZZWxsb3c6Ci0gICAgICAg
IHJldHVybiAieWVsbG93Il9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRl
U1FMQXN5bmNQcmludENvbG9yQmxhY2s6Ci0gICAgICAgIHJldHVybiAiYmxhY2siX3M7Ci0gICAg
fQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VF
eGVjdXRlU1FMQXN5bmNQcmludENvbG9yPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5n
JiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gImN5YW4iKQotICAgICAgICByZXR1cm4gVGVz
dFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yQ3lhbjsKLSAgICBpZiAo
dmFsdWUgPT0gIm1hZ2VudGEiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VF
eGVjdXRlU1FMQXN5bmNQcmludENvbG9yTWFnZW50YTsKLSAgICBpZiAodmFsdWUgPT0gInllbGxv
dyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1By
aW50Q29sb3JZZWxsb3c7Ci0gICAgaWYgKHZhbHVlID09ICJibGFjayIpCi0gICAgICAgIHJldHVy
biBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JCbGFjazsKLSAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQot
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0
ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJv
dG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwot
Ci1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoRGF0YWJhc2VEb21haW4p
Ci0KLSsgKHZvaWQpX3BhcnNlRGF0YWJhc2VJZDooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBh
eWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZVByaW1hcnlDb2xvcnM6KE5TTnVtYmVy
ICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotKyAodm9pZClfcGFyc2VDb2xv
ckxpc3Q6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQp
cGF5bG9hZDsKLSsgKHZvaWQpX3BhcnNlRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3Ig
Kiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0KLUBlbmQKLQotQGltcGxlbWVu
dGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoRGF0YWJhc2VEb21haW4pCi0KLSsg
KHZvaWQpX3BhcnNlRGF0YWJhc2VJZDooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6
KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQs
IFtOU051bWJlciBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IChOU051bWJlciAqKXBheWxvYWQ7
Ci19Ci0KLSsgKHZvaWQpX3BhcnNlUHJpbWFyeUNvbG9yczooTlNOdW1iZXIgKiopb3V0VmFsdWUg
ZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9U
WVBFKHBheWxvYWQsIFtOU1N0cmluZyBjbGFzc10pOwotICAgIE9wdGlvbmFsPFRlc3RQcm90b2Nv
bERhdGFiYXNlUHJpbWFyeUNvbG9ycz4gcmVzdWx0ID0gSW5zcGVjdG9yOjpmcm9tUHJvdG9jb2xT
dHJpbmc8VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzPihwYXlsb2FkKTsKLSAgICBU
SFJPV19FWENFUFRJT05fRk9SX0JBRF9FTlVNX1ZBTFVFKHJlc3VsdCwgQCJQcmltYXJ5Q29sb3Jz
Iik7Ci0gICAgKm91dFZhbHVlID0gQChyZXN1bHQudmFsdWUoKSk7Ci19Ci0KLSsgKHZvaWQpX3Bh
cnNlQ29sb3JMaXN0OihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxv
YWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxv
YWQsIFtOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSAoTlNB
cnJheS8qPE5TU3RyaW5nPiovICopcGF5bG9hZDsKLX0KLQotKyAodm9pZClfcGFyc2VFcnJvcjoo
VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5
bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGlj
dGlvbmFyeSBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sRGF0YWJhc2VF
cnJvciBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOwotfQotCi1AZW5kCi0KLQotIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5o
IgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPFdl
Ykluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0jaW1wb3J0IDx3dGYv
QXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNw
YWNlIEluc3BlY3RvcjsKLQotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sRGF0YWJhc2VF
cnJvcgotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlv
bmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBl
ciBpbml0XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9S
X1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJtZXNzYWdlIl0sIEAibWVzc2FnZSIpOwotICAg
IHNlbGYubWVzc2FnZSA9IHBheWxvYWRbQCJtZXNzYWdlIl07Ci0KLSAgICBUSFJPV19FWENFUFRJ
T05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJjb2RlIl0sIEAiY29kZSIpOwotICAg
IHNlbGYuY29kZSA9IFtwYXlsb2FkW0AiY29kZSJdIGludGVnZXJWYWx1ZV07Ci0KLSAgICByZXR1
cm4gc2VsZjsKLX0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQ
cm90b2NvbEpTT05PYmplY3QgKilvYmplY3QKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGlu
aXRXaXRoSlNPTk9iamVjdDpbb2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0KCldKSkKLSAgICAgICAg
cmV0dXJuIG5pbDsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZTooaW50KWNvZGUKLXsKLSAgICBp
ZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkobWVzc2FnZSwgQCJtZXNzYWdlIik7
Ci0KLSAgICBzZWxmLm1lc3NhZ2UgPSBtZXNzYWdlOwotICAgIHNlbGYuY29kZSA9IGNvZGU7Ci0K
LSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClzZXRNZXNzYWdlOihOU1N0cmluZyAqKW1l
c3NhZ2UKLXsKLSAgICBbc3VwZXIgc2V0U3RyaW5nOm1lc3NhZ2UgZm9yS2V5OkAibWVzc2FnZSJd
OwotfQotCi0tIChOU1N0cmluZyAqKW1lc3NhZ2UKLXsKLSAgICByZXR1cm4gW3N1cGVyIHN0cmlu
Z0ZvcktleTpAIm1lc3NhZ2UiXTsKLX0KLQotLSAodm9pZClzZXRDb2RlOihpbnQpY29kZQotewot
ICAgIFtzdXBlciBzZXRJbnRlZ2VyOmNvZGUgZm9yS2V5OkAiY29kZSJdOwotfQotCi0tIChpbnQp
Y29kZQotewotICAgIHJldHVybiBbc3VwZXIgaW50ZWdlckZvcktleTpAImNvZGUiXTsKLX0KLQot
QGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4
cGVjdGVkL2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29u
LXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1l
dGVycy5qc29uLXJlc3VsdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODU5NDFlZDUx
ZjEuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1y
ZXR1cm4tcGFyYW1ldGVycy5qc29uLXJlc3VsdAorKysgL2Rldi9udWxsCkBAIC0xLDE2NzQgKzAs
MCBAQAotIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1y
ZXR1cm4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLS8vIERhdGFiYXNlCi1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJE
YXRhYmFzZSIsIG51bGwpOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIkRhdGFiYXNl
LlByaW1hcnlDb2xvcnMiLCB7UmVkOiAicmVkIiwgR3JlZW46ICJncmVlbiIsIEJsdWU6ICJibHVl
In0pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIkRhdGFiYXNlLmV4ZWN1dGVB
bGxPcHRpb25hbFBhcmFtZXRlcnMiLCBudWxsLCBbeyJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5
cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZX0sIHsibmFtZSI6ICJub3RlcyIsICJ0eXBl
IjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWV9LCB7Im5hbWUiOiAidGltZXN0YW1wIiwgInR5
cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFsIjogdHJ1ZX0sIHsibmFtZSI6ICJ2YWx1ZXMiLCAidHlw
ZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0cnVlfSwgeyJuYW1lIjogInBheWxvYWQiLCAidHlw
ZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0cnVlfSwgeyJuYW1lIjogImRhdGFiYXNlSWQiLCAi
dHlwZSI6ICJudW1iZXIiLCAib3B0aW9uYWwiOiB0cnVlfSwgeyJuYW1lIjogInNxbEVycm9yIiwg
InR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZX0sIHsibmFtZSI6ICJzY3JlZW5Db2xv
ciIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWV9LCB7Im5hbWUiOiAiYWx0ZXJu
YXRlQ29sb3JzIiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZX0sIHsibmFtZSI6
ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZX1dLCBbImNv
bHVtbk5hbWVzIiwgIm5vdGVzIiwgInRpbWVzdGFtcCIsICJ2YWx1ZXMiLCAicGF5bG9hZCIsICJk
YXRhYmFzZUlkIiwgInNxbEVycm9yIiwgInNjcmVlbkNvbG9yIiwgImFsdGVybmF0ZUNvbG9ycyIs
ICJwcmludENvbG9yIl0pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIkRhdGFi
YXNlLmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyIsIG51bGwsIFt7Im5hbWUiOiAiY29sdW1u
TmFtZXMiLCAidHlwZSI6ICJvYmplY3QifSwgeyJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3Ry
aW5nIn0sIHsibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIifSwgeyJuYW1lIjog
InZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCJ9LCB7Im5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjog
Im9iamVjdCJ9LCB7Im5hbWUiOiAiZGF0YWJhc2VJZCIsICJ0eXBlIjogIm51bWJlciJ9LCB7Im5h
bWUiOiAic3FsRXJyb3IiLCAidHlwZSI6ICJvYmplY3QifSwgeyJuYW1lIjogInNjcmVlbkNvbG9y
IiwgInR5cGUiOiAic3RyaW5nIn0sIHsibmFtZSI6ICJhbHRlcm5hdGVDb2xvcnMiLCAidHlwZSI6
ICJvYmplY3QifSwgeyJuYW1lIjogInByaW50Q29sb3IiLCAidHlwZSI6ICJzdHJpbmcifV0sIFsi
Y29sdW1uTmFtZXMiLCAibm90ZXMiLCAidGltZXN0YW1wIiwgInZhbHVlcyIsICJwYXlsb2FkIiwg
ImRhdGFiYXNlSWQiLCAic3FsRXJyb3IiLCAic2NyZWVuQ29sb3IiLCAiYWx0ZXJuYXRlQ29sb3Jz
IiwgInByaW50Q29sb3IiXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJEYXRh
YmFzZSIsIG51bGwpOwotIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMK
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2Fs
bC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgotI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLQotbmFtZXNwYWNl
IEluc3BlY3RvciB7Ci0KLWNsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1Ymxp
YzoKLSAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hl
cj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNo
ZXIpOyB9Ci0gICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3Qg
eyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQotcHJpdmF0ZToKLSAgICBSZWZQ
dHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Ci19OwotCi0KLWNsYXNz
IEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZpcnR1YWwgfkFsdGVybmF0ZURhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXIoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZUFsbE9wdGlv
bmFsUGFyYW1ldGVycyhsb25nIGNhbGxJZCwgY29uc3QgSlNPTjo6QXJyYXkqIGluX2NvbHVtbk5h
bWVzLCBjb25zdCBTdHJpbmcqIGluX25vdGVzLCBjb25zdCBkb3VibGUqIGluX3RpbWVzdGFtcCwg
Y29uc3QgSlNPTjo6T2JqZWN0KiBpbl92YWx1ZXMsIGNvbnN0IEpTT046OlZhbHVlKiBpbl9wYXls
b2FkLCBjb25zdCBpbnQqIGluX2RhdGFiYXNlSWQsIGNvbnN0IEpTT046Ok9iamVjdCogaW5fc3Fs
RXJyb3IsIGNvbnN0IFN0cmluZyogaW5fc2NyZWVuQ29sb3IsIGNvbnN0IEpTT046OkFycmF5KiBp
bl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyogaW5fcHJpbnRDb2xvcikgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMobG9uZyBjYWxsSWQsIGNv
bnN0IEpTT046OkFycmF5JiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBpbl9ub3Rlcywg
ZG91YmxlIGluX3RpbWVzdGFtcCwgY29uc3QgSlNPTjo6T2JqZWN0JiBpbl92YWx1ZXMsIEpTT046
OlZhbHVlIGluX3BheWxvYWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBKU09OOjpPYmplY3Qm
IGluX3NxbEVycm9yLCBjb25zdCBTdHJpbmcmIGluX3NjcmVlbkNvbG9yLCBjb25zdCBKU09OOjpB
cnJheSYgaW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcmIGluX3ByaW50Q29sb3IpID0g
MDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jZW5kaWYgLy8gRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5h
dGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNw
YXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0
aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0
UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFt
ZXNwYWNlIEluc3BlY3RvciB7Ci0KLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCi0jaWYg
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi1jbGFzcyBBbHRlcm5hdGVE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOwotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQotCi1jbGFzcyBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlciB7Ci1wdWJsaWM6Ci0gICAgLy8gTmFtZWQgYWZ0ZXIgcGFyYW1ldGVyICdwcmludENvbG9y
JyB3aGlsZSBnZW5lcmF0aW5nIGNvbW1hbmQvZXZlbnQgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1l
dGVycy4KLSAgICBlbnVtIGNsYXNzIFByaW50Q29sb3IgewotICAgICAgICBDeWFuID0gMywKLSAg
ICAgICAgTWFnZW50YSA9IDQsCi0gICAgICAgIFllbGxvdyA9IDUsCi0gICAgICAgIEJsYWNrID0g
NiwKLSAgICB9OyAvLyBlbnVtIGNsYXNzIFByaW50Q29sb3IKLSAgICB2aXJ0dWFsIHZvaWQgZXhl
Y3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhFcnJvclN0cmluZyYsIGNvbnN0IEpTT046OkFycmF5
KiBvcHRfaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyogb3B0X2luX25vdGVzLCBjb25zdCBk
b3VibGUqIG9wdF9pbl90aW1lc3RhbXAsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0X2luX3ZhbHVl
cywgY29uc3QgSlNPTjo6VmFsdWUqIG9wdF9pbl9wYXlsb2FkLCBjb25zdCBpbnQqIG9wdF9pbl9k
YXRhYmFzZUlkLCBjb25zdCBKU09OOjpPYmplY3QqIG9wdF9pbl9zcWxFcnJvciwgY29uc3QgU3Ry
aW5nKiBvcHRfaW5fc2NyZWVuQ29sb3IsIGNvbnN0IEpTT046OkFycmF5KiBvcHRfaW5fYWx0ZXJu
YXRlQ29sb3JzLCBjb25zdCBTdHJpbmcqIG9wdF9pbl9wcmludENvbG9yLCBSZWZQdHI8SlNPTjo6
QXJyYXlPZjxTdHJpbmc+PiYgb3B0X291dF9jb2x1bW5OYW1lcywgT3B0aW9uYWw8U3RyaW5nPiYg
b3B0X291dF9ub3RlcywgT3B0aW9uYWw8ZG91YmxlPiYgb3B0X291dF90aW1lc3RhbXAsIE9wdGlv
bmFsPEpTT046Ok9iamVjdD4mIG9wdF9vdXRfdmFsdWVzLCBPcHRpb25hbDxKU09OOjpWYWx1ZT4m
IG9wdF9vdXRfcGF5bG9hZCwgT3B0aW9uYWw8aW50PiYgb3B0X291dF9kYXRhYmFzZUlkLCBSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYgb3B0X291dF9zcWxFcnJv
ciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMqIG9wdF9vdXRf
c2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JM
aXN0PiYgb3B0X291dF9hbHRlcm5hdGVDb2xvcnMsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyOjpQcmludENvbG9yKiBvcHRfb3V0X3ByaW50Q29sb3IpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKEVycm9yU3RyaW5nJiwgY29uc3QgSlNP
Tjo6QXJyYXkmIGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIGluX25vdGVzLCBkb3VibGUg
aW5fdGltZXN0YW1wLCBjb25zdCBKU09OOjpPYmplY3QmIGluX3ZhbHVlcywgSlNPTjo6VmFsdWUg
aW5fcGF5bG9hZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IEpTT046Ok9iamVjdCYgaW5fc3Fs
RXJyb3IsIGNvbnN0IFN0cmluZyYgaW5fc2NyZWVuQ29sb3IsIGNvbnN0IEpTT046OkFycmF5JiBp
bl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgaW5fcHJpbnRDb2xvciwgUmVmUHRyPEpT
T046OkFycmF5T2Y8U3RyaW5nPj4mIG91dF9jb2x1bW5OYW1lcywgU3RyaW5nKiBvdXRfbm90ZXMs
IGRvdWJsZSogb3V0X3RpbWVzdGFtcCwgSlNPTjo6T2JqZWN0KiBvdXRfdmFsdWVzLCBKU09OOjpW
YWx1ZSogb3V0X3BheWxvYWQsIGludCogb3V0X2RhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiBvdXRfc3FsRXJyb3IsIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzKiBvdXRfc2NyZWVuQ29sb3IsIFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYgb3V0X2FsdGVybmF0ZUNv
bG9ycywgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3IqIG91dF9w
cmludENvbG9yKSA9IDA7Ci1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB+RGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIoKTsKLX07Ci0KLWNsYXNzIERhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewotcHVibGlj
OgotICAgIHN0YXRpYyBSZWY8RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tl
bmREaXNwYXRjaGVyJiwgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICB2
b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpT
T046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5hbDsKLXByaXZhdGU6Ci0gICAgdm9pZCBleGVjdXRl
QWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0
PiYmIHBhcmFtZXRlcnMpOwotICAgIHZvaWQgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxv
bmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwotI2lmIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotcHVibGljOgotICAgIHZvaWQg
c2V0QWx0ZXJuYXRlRGlzcGF0Y2hlcihBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
KiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0
ZURpc3BhdGNoZXI7IH0KLXByaXZhdGU6Ci0gICAgQWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlciogbV9hbHRlcm5hdGVEaXNwYXRjaGVyIHsgbnVsbHB0ciB9OwotI2VuZGlmCi1wcml2
YXRlOgotICAgIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImLCBE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIERhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50IHsgbnVsbHB0ciB9OwotfTsKLQotfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBh
cmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5o
IgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4K
LSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3ll
ZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2lmIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5k
RGlzcGF0Y2hlcnMuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5EYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlcigpIHsgfQotCi1SZWY8RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4gRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hl
ciwgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQotewotICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNo
ZXIsIGFnZW50KSk7Ci19Ci0KLURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OkRhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCi0gICAgOiBTdXBwbGVtZW50YWxC
YWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKLSAgICAsIG1fYWdlbnQoYWdlbnQp
Ci17Ci0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWlu
KCJEYXRhYmFzZSJfcywgdGhpcyk7Ci19Ci0KLXZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
cjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNP
Tjo6T2JqZWN0PiYmIG1lc3NhZ2UpCi17Ci0gICAgUmVmPERhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXI+IHByb3RlY3QoKnRoaXMpOwotCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVy
czsKLSAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFyYW1ldGVycyk7Ci0KLSAg
ICBpZiAobWV0aG9kID09ICJleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzIikKLSAgICAgICAg
ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVy
cykpOwotICAgIGVsc2UgaWYgKG1ldGhvZCA9PSAiZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJz
IikKLSAgICAgICAgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKHJlcXVlc3RJZCwgV1RGTW92
ZShwYXJhbWV0ZXJzKSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5y
ZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidE
YXRhYmFzZS4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOwotfQotCi12b2lkIERhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyBy
ZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycykKLXsKLSAgICBib29s
IG9wdF9pbl9jb2x1bW5OYW1lc192YWx1ZUZvdW5kID0gZmFsc2U7Ci0gICAgUmVmUHRyPEpTT046
OkFycmF5PiBvcHRfaW5fY29sdW1uTmFtZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRBcnJh
eShwYXJhbWV0ZXJzLmdldCgpLCAiY29sdW1uTmFtZXMiX3MsICZvcHRfaW5fY29sdW1uTmFtZXNf
dmFsdWVGb3VuZCk7Ci0gICAgYm9vbCBvcHRfaW5fbm90ZXNfdmFsdWVGb3VuZCA9IGZhbHNlOwot
ICAgIFN0cmluZyBvcHRfaW5fbm90ZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmco
cGFyYW1ldGVycy5nZXQoKSwgIm5vdGVzIl9zLCAmb3B0X2luX25vdGVzX3ZhbHVlRm91bmQpOwot
ICAgIGJvb2wgb3B0X2luX3RpbWVzdGFtcF92YWx1ZUZvdW5kID0gZmFsc2U7Ci0gICAgZG91Ymxl
IG9wdF9pbl90aW1lc3RhbXAgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXREb3VibGUocGFyYW1l
dGVycy5nZXQoKSwgInRpbWVzdGFtcCJfcywgJm9wdF9pbl90aW1lc3RhbXBfdmFsdWVGb3VuZCk7
Ci0gICAgYm9vbCBvcHRfaW5fdmFsdWVzX3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAgICBSZWZQdHI8
SlNPTjo6T2JqZWN0PiBvcHRfaW5fdmFsdWVzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0T2Jq
ZWN0KHBhcmFtZXRlcnMuZ2V0KCksICJ2YWx1ZXMiX3MsICZvcHRfaW5fdmFsdWVzX3ZhbHVlRm91
bmQpOwotICAgIGJvb2wgb3B0X2luX3BheWxvYWRfdmFsdWVGb3VuZCA9IGZhbHNlOwotICAgIFJl
ZlB0cjxKU09OOjpWYWx1ZT4gb3B0X2luX3BheWxvYWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5n
ZXRWYWx1ZShwYXJhbWV0ZXJzLmdldCgpLCAicGF5bG9hZCJfcywgJm9wdF9pbl9wYXlsb2FkX3Zh
bHVlRm91bmQpOwotICAgIGJvb2wgb3B0X2luX2RhdGFiYXNlSWRfdmFsdWVGb3VuZCA9IGZhbHNl
OwotICAgIGludCBvcHRfaW5fZGF0YWJhc2VJZCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldElu
dGVnZXIocGFyYW1ldGVycy5nZXQoKSwgImRhdGFiYXNlSWQiX3MsICZvcHRfaW5fZGF0YWJhc2VJ
ZF92YWx1ZUZvdW5kKTsKLSAgICBib29sIG9wdF9pbl9zcWxFcnJvcl92YWx1ZUZvdW5kID0gZmFs
c2U7Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gb3B0X2luX3NxbEVycm9yID0gbV9iYWNrZW5k
RGlzcGF0Y2hlci0+Z2V0T2JqZWN0KHBhcmFtZXRlcnMuZ2V0KCksICJzcWxFcnJvciJfcywgJm9w
dF9pbl9zcWxFcnJvcl92YWx1ZUZvdW5kKTsKLSAgICBib29sIG9wdF9pbl9zY3JlZW5Db2xvcl92
YWx1ZUZvdW5kID0gZmFsc2U7Ci0gICAgU3RyaW5nIG9wdF9pbl9zY3JlZW5Db2xvciA9IG1fYmFj
a2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwYXJhbWV0ZXJzLmdldCgpLCAic2NyZWVuQ29sb3Ii
X3MsICZvcHRfaW5fc2NyZWVuQ29sb3JfdmFsdWVGb3VuZCk7Ci0gICAgYm9vbCBvcHRfaW5fYWx0
ZXJuYXRlQ29sb3JzX3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXk+
IG9wdF9pbl9hbHRlcm5hdGVDb2xvcnMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRBcnJheShw
YXJhbWV0ZXJzLmdldCgpLCAiYWx0ZXJuYXRlQ29sb3JzIl9zLCAmb3B0X2luX2FsdGVybmF0ZUNv
bG9yc192YWx1ZUZvdW5kKTsKLSAgICBib29sIG9wdF9pbl9wcmludENvbG9yX3ZhbHVlRm91bmQg
PSBmYWxzZTsKLSAgICBTdHJpbmcgb3B0X2luX3ByaW50Q29sb3IgPSBtX2JhY2tlbmREaXNwYXRj
aGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgInByaW50Q29sb3IiX3MsICZvcHRfaW5f
cHJpbnRDb2xvcl92YWx1ZUZvdW5kKTsKLSAgICBpZiAobV9iYWNrZW5kRGlzcGF0Y2hlci0+aGFz
UHJvdG9jb2xFcnJvcnMoKSkgewotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQ
cm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCAiU29tZSBhcmd1
bWVudHMgb2YgbWV0aG9kICdEYXRhYmFzZS5leGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzJyBj
YW4ndCBiZSBwcm9jZXNzZWQiX3MpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0jaWYgRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0gICAgaWYgKG1fYWx0ZXJuYXRl
RGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVBbGxP
cHRpb25hbFBhcmFtZXRlcnMocmVxdWVzdElkLCBvcHRfaW5fY29sdW1uTmFtZXNfdmFsdWVGb3Vu
ZCA/IG9wdF9pbl9jb2x1bW5OYW1lcy5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9ub3Rlc192YWx1
ZUZvdW5kID8gJm9wdF9pbl9ub3RlcyA6IG51bGxwdHIsIG9wdF9pbl90aW1lc3RhbXBfdmFsdWVG
b3VuZCA/ICZvcHRfaW5fdGltZXN0YW1wIDogbnVsbHB0ciwgb3B0X2luX3ZhbHVlc192YWx1ZUZv
dW5kID8gb3B0X2luX3ZhbHVlcy5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9wYXlsb2FkX3ZhbHVl
Rm91bmQgPyBvcHRfaW5fcGF5bG9hZC5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9kYXRhYmFzZUlk
X3ZhbHVlRm91bmQgPyAmb3B0X2luX2RhdGFiYXNlSWQgOiBudWxscHRyLCBvcHRfaW5fc3FsRXJy
b3JfdmFsdWVGb3VuZCA/IG9wdF9pbl9zcWxFcnJvci5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9z
Y3JlZW5Db2xvcl92YWx1ZUZvdW5kID8gJm9wdF9pbl9zY3JlZW5Db2xvciA6IG51bGxwdHIsIG9w
dF9pbl9hbHRlcm5hdGVDb2xvcnNfdmFsdWVGb3VuZCA/IG9wdF9pbl9hbHRlcm5hdGVDb2xvcnMu
Z2V0KCkgOiBudWxscHRyLCBvcHRfaW5fcHJpbnRDb2xvcl92YWx1ZUZvdW5kID8gJm9wdF9pbl9w
cmludENvbG9yIDogbnVsbHB0cik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQot
ICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpT
T046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4g
b3V0X2NvbHVtbk5hbWVzOwotICAgIE9wdGlvbmFsPFN0cmluZz4gb3V0X25vdGVzOwotICAgIE9w
dGlvbmFsPGRvdWJsZT4gb3V0X3RpbWVzdGFtcDsKLSAgICBPcHRpb25hbDxKU09OOjpPYmplY3Q+
IG91dF92YWx1ZXM7Ci0gICAgT3B0aW9uYWw8SlNPTjo6VmFsdWU+IG91dF9wYXlsb2FkOwotICAg
IE9wdGlvbmFsPGludD4gb3V0X2RhdGFiYXNlSWQ7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gb3V0X3NxbEVycm9yOwotICAgIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzIG91dF9zY3JlZW5Db2xvcjsKLSAgICBSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4gb3V0X2FsdGVybmF0
ZUNvbG9yczsKLSAgICBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xv
ciBvdXRfcHJpbnRDb2xvcjsKLSAgICBtX2FnZW50LT5leGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0
ZXJzKGVycm9yLCBvcHRfaW5fY29sdW1uTmFtZXNfdmFsdWVGb3VuZCA/IG9wdF9pbl9jb2x1bW5O
YW1lcy5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9ub3Rlc192YWx1ZUZvdW5kID8gJm9wdF9pbl9u
b3RlcyA6IG51bGxwdHIsIG9wdF9pbl90aW1lc3RhbXBfdmFsdWVGb3VuZCA/ICZvcHRfaW5fdGlt
ZXN0YW1wIDogbnVsbHB0ciwgb3B0X2luX3ZhbHVlc192YWx1ZUZvdW5kID8gb3B0X2luX3ZhbHVl
cy5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9wYXlsb2FkX3ZhbHVlRm91bmQgPyBvcHRfaW5fcGF5
bG9hZC5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9kYXRhYmFzZUlkX3ZhbHVlRm91bmQgPyAmb3B0
X2luX2RhdGFiYXNlSWQgOiBudWxscHRyLCBvcHRfaW5fc3FsRXJyb3JfdmFsdWVGb3VuZCA/IG9w
dF9pbl9zcWxFcnJvci5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9zY3JlZW5Db2xvcl92YWx1ZUZv
dW5kID8gJm9wdF9pbl9zY3JlZW5Db2xvciA6IG51bGxwdHIsIG9wdF9pbl9hbHRlcm5hdGVDb2xv
cnNfdmFsdWVGb3VuZCA/IG9wdF9pbl9hbHRlcm5hdGVDb2xvcnMuZ2V0KCkgOiBudWxscHRyLCBv
cHRfaW5fcHJpbnRDb2xvcl92YWx1ZUZvdW5kID8gJm9wdF9pbl9wcmludENvbG9yIDogbnVsbHB0
ciwgb3V0X2NvbHVtbk5hbWVzLCBvdXRfbm90ZXMsIG91dF90aW1lc3RhbXAsIG91dF92YWx1ZXMs
IG91dF9wYXlsb2FkLCBvdXRfZGF0YWJhc2VJZCwgb3V0X3NxbEVycm9yLCBvdXRfc2NyZWVuQ29s
b3IsIG91dF9hbHRlcm5hdGVDb2xvcnMsIG91dF9wcmludENvbG9yKTsKLQotICAgIGlmICghZXJy
b3IubGVuZ3RoKCkpIHsKLSAgICAgICAgaWYgKG91dF9jb2x1bW5OYW1lcykKLSAgICAgICAgICAg
IHJlc3VsdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBvdXRfY29sdW1uTmFtZXMpOwotICAg
ICAgICBpZiAob3V0X25vdGVzLmhhc1ZhbHVlKCkpCi0gICAgICAgICAgICByZXN1bHQtPnNldFN0
cmluZygibm90ZXMiX3MsICpvdXRfbm90ZXMpOwotICAgICAgICBpZiAob3V0X3RpbWVzdGFtcC5o
YXNWYWx1ZSgpKQotICAgICAgICAgICAgcmVzdWx0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywg
Km91dF90aW1lc3RhbXApOwotICAgICAgICBpZiAob3V0X3ZhbHVlcy5oYXNWYWx1ZSgpKQotICAg
ICAgICAgICAgcmVzdWx0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgKm91dF92YWx1ZXMpOwotICAg
ICAgICBpZiAob3V0X3BheWxvYWQuaGFzVmFsdWUoKSkKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0
VmFsdWUoInBheWxvYWQiX3MsICpvdXRfcGF5bG9hZCk7Ci0gICAgICAgIGlmIChvdXRfZGF0YWJh
c2VJZC5oYXNWYWx1ZSgpKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRJbnRlZ2VyKCJkYXRhYmFz
ZUlkIl9zLCAqb3V0X2RhdGFiYXNlSWQpOwotICAgICAgICBpZiAob3V0X3NxbEVycm9yKQotICAg
ICAgICAgICAgcmVzdWx0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBvdXRfc3FsRXJyb3IpOwot
ICAgICAgICBpZiAob3V0X3NjcmVlbkNvbG9yLmhhc1ZhbHVlKCkpCi0gICAgICAgICAgICByZXN1
bHQtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsICpvdXRfc2NyZWVuQ29sb3IpOwotICAgICAg
ICBpZiAob3V0X2FsdGVybmF0ZUNvbG9ycykKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0QXJyYXko
ImFsdGVybmF0ZUNvbG9ycyJfcywgb3V0X2FsdGVybmF0ZUNvbG9ycyk7Ci0gICAgICAgIGlmIChv
dXRfcHJpbnRDb2xvci5oYXNWYWx1ZSgpKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmco
InByaW50Q29sb3IiX3MsICpvdXRfcHJpbnRDb2xvcik7Ci0gICAgfQotICAgIGlmICghZXJyb3Iu
bGVuZ3RoKCkpCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1
ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2Vy
dmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKLX0KLQotdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVyOjpleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIFJlZlB0
cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycykKLXsKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXk+
IGluX2NvbHVtbk5hbWVzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0QXJyYXkocGFyYW1ldGVy
cy5nZXQoKSwgImNvbHVtbk5hbWVzIl9zLCBudWxscHRyKTsKLSAgICBTdHJpbmcgaW5fbm90ZXMg
PSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgIm5vdGVz
Il9zLCBudWxscHRyKTsKLSAgICBkb3VibGUgaW5fdGltZXN0YW1wID0gbV9iYWNrZW5kRGlzcGF0
Y2hlci0+Z2V0RG91YmxlKHBhcmFtZXRlcnMuZ2V0KCksICJ0aW1lc3RhbXAiX3MsIG51bGxwdHIp
OwotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGluX3ZhbHVlcyA9IG1fYmFja2VuZERpc3BhdGNo
ZXItPmdldE9iamVjdChwYXJhbWV0ZXJzLmdldCgpLCAidmFsdWVzIl9zLCBudWxscHRyKTsKLSAg
ICBSZWZQdHI8SlNPTjo6VmFsdWU+IGluX3BheWxvYWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5n
ZXRWYWx1ZShwYXJhbWV0ZXJzLmdldCgpLCAicGF5bG9hZCJfcywgbnVsbHB0cik7Ci0gICAgaW50
IGluX2RhdGFiYXNlSWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRJbnRlZ2VyKHBhcmFtZXRl
cnMuZ2V0KCksICJkYXRhYmFzZUlkIl9zLCBudWxscHRyKTsKLSAgICBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiBpbl9zcWxFcnJvciA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldE9iamVjdChwYXJhbWV0
ZXJzLmdldCgpLCAic3FsRXJyb3IiX3MsIG51bGxwdHIpOwotICAgIFN0cmluZyBpbl9zY3JlZW5D
b2xvciA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwYXJhbWV0ZXJzLmdldCgpLCAi
c2NyZWVuQ29sb3IiX3MsIG51bGxwdHIpOwotICAgIFJlZlB0cjxKU09OOjpBcnJheT4gaW5fYWx0
ZXJuYXRlQ29sb3JzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0QXJyYXkocGFyYW1ldGVycy5n
ZXQoKSwgImFsdGVybmF0ZUNvbG9ycyJfcywgbnVsbHB0cik7Ci0gICAgU3RyaW5nIGluX3ByaW50
Q29sb3IgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwg
InByaW50Q29sb3IiX3MsIG51bGxwdHIpOwotICAgIGlmIChtX2JhY2tlbmREaXNwYXRjaGVyLT5o
YXNQcm90b2NvbEVycm9ycygpKSB7Ci0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9y
dFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsICJTb21lIGFy
Z3VtZW50cyBvZiBtZXRob2QgJ0RhdGFiYXNlLmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycycg
Y2FuJ3QgYmUgcHJvY2Vzc2VkIl9zKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotI2lmIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotICAgIGlmIChtX2FsdGVybmF0
ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5leGVjdXRlTm9P
cHRpb25hbFBhcmFtZXRlcnMocmVxdWVzdElkLCAqaW5fY29sdW1uTmFtZXMsIGluX25vdGVzLCBp
bl90aW1lc3RhbXAsICppbl92YWx1ZXMsICppbl9wYXlsb2FkLCBpbl9kYXRhYmFzZUlkLCAqaW5f
c3FsRXJyb3IsIGluX3NjcmVlbkNvbG9yLCAqaW5fYWx0ZXJuYXRlQ29sb3JzLCBpbl9wcmludENv
bG9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAgRXJyb3JTdHJpbmcg
ZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiBvdXRfY29sdW1uTmFtZXM7
Ci0gICAgU3RyaW5nIG91dF9ub3RlczsKLSAgICBkb3VibGUgb3V0X3RpbWVzdGFtcDsKLSAgICBK
U09OOjpPYmplY3Qgb3V0X3ZhbHVlczsKLSAgICBKU09OOjpWYWx1ZSBvdXRfcGF5bG9hZDsKLSAg
ICBpbnQgb3V0X2RhdGFiYXNlSWQ7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpFcnJvcj4gb3V0X3NxbEVycm9yOwotICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpQcmltYXJ5Q29sb3JzIG91dF9zY3JlZW5Db2xvcjsKLSAgICBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4gb3V0X2FsdGVybmF0ZUNvbG9yczsK
LSAgICBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciBvdXRfcHJp
bnRDb2xvcjsKLSAgICBtX2FnZW50LT5leGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMoZXJyb3Is
ICppbl9jb2x1bW5OYW1lcywgaW5fbm90ZXMsIGluX3RpbWVzdGFtcCwgKmluX3ZhbHVlcywgKmlu
X3BheWxvYWQsIGluX2RhdGFiYXNlSWQsICppbl9zcWxFcnJvciwgaW5fc2NyZWVuQ29sb3IsICpp
bl9hbHRlcm5hdGVDb2xvcnMsIGluX3ByaW50Q29sb3IsIG91dF9jb2x1bW5OYW1lcywgJm91dF9u
b3RlcywgJm91dF90aW1lc3RhbXAsIG91dF92YWx1ZXMsICZvdXRfcGF5bG9hZCwgJm91dF9kYXRh
YmFzZUlkLCBvdXRfc3FsRXJyb3IsICZvdXRfc2NyZWVuQ29sb3IsIG91dF9hbHRlcm5hdGVDb2xv
cnMsICZvdXRfcHJpbnRDb2xvcik7Ci0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7Ci0gICAg
ICAgIHJlc3VsdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBvdXRfY29sdW1uTmFtZXMpOwot
ICAgICAgICByZXN1bHQtPnNldFN0cmluZygibm90ZXMiX3MsIG91dF9ub3Rlcyk7Ci0gICAgICAg
IHJlc3VsdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIG91dF90aW1lc3RhbXApOwotICAgICAg
ICByZXN1bHQtPnNldE9iamVjdCgidmFsdWVzIl9zLCBvdXRfdmFsdWVzKTsKLSAgICAgICAgcmVz
dWx0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgb3V0X3BheWxvYWQpOwotICAgICAgICByZXN1bHQt
PnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsIG91dF9kYXRhYmFzZUlkKTsKLSAgICAgICAgcmVz
dWx0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBvdXRfc3FsRXJyb3IpOwotICAgICAgICByZXN1
bHQtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RI
ZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShvdXRfc2NyZWVuQ29sb3IpKTsKLSAgICAgICAg
cmVzdWx0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCBvdXRfYWx0ZXJuYXRlQ29sb3Jz
KTsKLSAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShvdXRfcHJpbnRDb2xv
cikpOwotICAgIH0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNl
KTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29s
RXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5k
RGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVy
cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRp
b25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9j
b2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEZyb250
ZW5kUm91dGVyOwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVz
dEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlz
cGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMt
d2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgot
Ci0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNl
Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0j
aW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQot
Ci1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCi1u
YW1lc3BhY2UgRGF0YWJhc2UgewotY2xhc3MgRXJyb3I7Ci1lbnVtIGNsYXNzIFByaW1hcnlDb2xv
cnM7Ci19IC8vIERhdGFiYXNlCi0vLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCi0KLQot
Ly8gVHlwZWRlZnMuCi1uYW1lc3BhY2UgRGF0YWJhc2UgewotLyogVW5pcXVlIGlkZW50aWZpZXIg
b2YgRGF0YWJhc2Ugb2JqZWN0LiAqLwotdHlwZWRlZiBpbnQgRGF0YWJhc2VJZDsKLXR5cGVkZWYg
SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9y
cz4gQ29sb3JMaXN0OwotfSAvLyBEYXRhYmFzZQotLy8gRW5kIG9mIHR5cGVkZWZzLgotCi1uYW1l
c3BhY2UgVGVzdEhlbHBlcnMgewotCi1TdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNv
ZGUpOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUo
VCBlbnVtVmFsdWUpCi17Ci0gICAgcmV0dXJuIGdldEVudW1Db25zdGFudFZhbHVlKHN0YXRpY19j
YXN0PGludD4oZW51bVZhbHVlKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCi0K
LW5hbWVzcGFjZSBEYXRhYmFzZSB7Ci0vKiAgKi8KLWVudW0gY2xhc3MgUHJpbWFyeUNvbG9ycyB7
Ci0gICAgUmVkID0gMCwKLSAgICBHcmVlbiA9IDEsCi0gICAgQmx1ZSA9IDIsCi19OyAvLyBlbnVt
IGNsYXNzIFByaW1hcnlDb2xvcnMKLS8qIERhdGFiYXNlIGVycm9yLiAqLwotY2xhc3MgRXJyb3Ig
OiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7Ci1wdWJsaWM6Ci0gICAgZW51bSB7Ci0gICAgICAg
IE5vRmllbGRzU2V0ID0gMCwKLSAgICAgICAgTWVzc2FnZVNldCA9IDEgPDwgMCwKLSAgICAgICAg
Q29kZVNldCA9IDEgPDwgMSwKLSAgICAgICAgQWxsRmllbGRzU2V0ID0gKE1lc3NhZ2VTZXQgfCBD
b2RlU2V0KQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+Ci0gICAgY2xhc3MgQnVp
bGRlciB7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbV9yZXN1
bHQ7Ci0KLSAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYg
Y2FzdFN0YXRlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9j
YXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwotICAgICAgICB9Ci0KLSAgICAgICAg
QnVpbGRlcihSZWY8LypFcnJvciovSlNPTjo6T2JqZWN0PiYmIG9iamVjdCkKLSAgICAgICAgICAg
IDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9p
bml0X3N0YXRlKTsKLSAgICAgICAgfQotICAgICAgICBmcmllbmQgY2xhc3MgRXJyb3I7Ci0gICAg
cHVibGljOgotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2Fn
ZShjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgTWVzc2FnZVNldCksIHByb3BlcnR5X21lc3NhZ2VfYWxyZWFkeV9zZXQp
OwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibWVzc2FnZSJfcywgdmFsdWUpOwot
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNZXNzYWdlU2V0PigpOwotICAgICAgICB9Ci0K
LSAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvZGVTZXQ+JiBzZXRDb2RlKGludCB2YWx1ZSkKLSAg
ICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENvZGVTZXQpLCBw
cm9wZXJ0eV9jb2RlX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJbnRl
Z2VyKCJjb2RlIl9zLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvZGVT
ZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBSZWY8RXJyb3I+IHJlbGVhc2UoKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJl
c3VsdF9pc19ub3RfcmVhZHkpOwotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEVy
cm9yKSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0KSwgY2Fubm90X2Nhc3QpOwotCi0gICAgICAgICAg
ICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uUmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwo
KTsKLSAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxS
ZWY8RXJyb3I+Kj4oJmpzb25SZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0g
ICAgICAgIH0KLSAgICB9OwotCi0gICAgLyoKLSAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6
Ci0gICAgICogUmVmPEVycm9yPiByZXN1bHQgPSBFcnJvcjo6Y3JlYXRlKCkKLSAgICAgKiAgICAg
LnNldE1lc3NhZ2UoLi4uKQotICAgICAqICAgICAuc2V0Q29kZSguLi4pCi0gICAgICogICAgIC5y
ZWxlYXNlKCk7Ci0gICAgICovCi0gICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0
ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKSk7Ci0gICAgfQotfTsKLQotfSAvLyBEYXRhYmFzZQotCi0KLQotbmFtZXNw
YWNlIFRlc3RIZWxwZXJzIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgUHJvdG9jb2xFbnVtVHlwZT4K
LU9wdGlvbmFsPFByb3RvY29sRW51bVR5cGU+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZyhjb25z
dCBTdHJpbmcmKTsKLQotLy8gRW51bXMgaW4gdGhlICdEYXRhYmFzZScgRG9tYWluCi10ZW1wbGF0
ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9y
cz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNl
OjpQcmltYXJ5Q29sb3JzPihjb25zdCBTdHJpbmcmKTsKLQotfSAvLyBuYW1lc3BhY2UgVGVzdEhl
bHBlcnMKLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCi0KLW5hbWVzcGFjZSBXVEYgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVm
YXVsdEhhc2g7Ci0KLS8vIEhhc2ggZGVjbGFyYXRpb25zIGluIHRoZSAnRGF0YWJhc2UnIERvbWFp
bgotdGVtcGxhdGU8Pgotc3RydWN0IERlZmF1bHRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpQcmltYXJ5Q29sb3JzPiB7Ci0gICAgdHlwZWRlZiBJbnRIYXNoPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiBIYXNoOwotfTsKLQotfSAvLyBuYW1l
c3BhY2UgV1RGCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMu
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotCi0jaW5jbHVk
ZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1l
c3BhY2UgSW5zcGVjdG9yIHsKLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotbmFtZXNwYWNlIFRl
c3RIZWxwZXJzIHsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFs
dWVzW10gPSB7Ci0gICAgInJlZCIsCi0gICAgImdyZWVuIiwKLSAgICAiYmx1ZSIsCi0gICAgImN5
YW4iLAotICAgICJtYWdlbnRhIiwKLSAgICAieWVsbG93IiwKLSAgICAiYmxhY2siLAotfTsKLQot
U3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7Ci0gICAgcmV0dXJuIGVudW1f
Y29uc3RhbnRfdmFsdWVzW2NvZGVdOwotfQotCi0vLyBFbnVtcyBpbiB0aGUgJ0RhdGFiYXNlJyBE
b21haW4KLXRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNl
OjpQcmltYXJ5Q29sb3JzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90
b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJp
bmcpCi17Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0gewotICAg
ICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3Jz
OjpSZWQsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlBy
aW1hcnlDb2xvcnM6OkdyZWVuLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzOjpCbHVlLAotICAgIH07Ci0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCAzOyArK2kpCi0gICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2Nv
bnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCi0gICAgICAgICAgICByZXR1cm4gKElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzKWNvbnN0YW50VmFsdWVz
W2ldOwotCi0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotCi19IC8vIG5hbWVzcGFjZSBU
ZXN0SGVscGVycwotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLQot
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJl
dHVybi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tl
bmREaXNwYXRjaGVycy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQotQHByb3RvY29s
IFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcjsKLQotbmFtZXNwYWNlIEluc3BlY3Rv
ciB7Ci0KLQotY2xhc3MgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIgZmlu
YWwgOiBwdWJsaWMgQWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciB7Ci0gICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgT2JqQ0luc3BlY3RvckRhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyPiBo
YW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9Ci0gICAgdm9pZCBleGVjdXRlQWxsT3B0
aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBjb25zdCBKU09OOjpBcnJheSogaW5fY29s
dW1uTmFtZXMsIGNvbnN0IFN0cmluZyogaW5fbm90ZXMsIGNvbnN0IGRvdWJsZSogaW5fdGltZXN0
YW1wLCBjb25zdCBKU09OOjpPYmplY3QqIGluX3ZhbHVlcywgY29uc3QgSlNPTjo6VmFsdWUqIGlu
X3BheWxvYWQsIGNvbnN0IGludCogaW5fZGF0YWJhc2VJZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBp
bl9zcWxFcnJvciwgY29uc3QgU3RyaW5nKiBpbl9zY3JlZW5Db2xvciwgY29uc3QgSlNPTjo6QXJy
YXkqIGluX2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nKiBpbl9wcmludENvbG9yKSBmaW5h
bDsKLSAgICB2b2lkIGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhsb25nIHJlcXVlc3RJZCwg
Y29uc3QgSlNPTjo6QXJyYXkmIGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIGluX25vdGVz
LCBkb3VibGUgaW5fdGltZXN0YW1wLCBjb25zdCBKU09OOjpPYmplY3QmIGluX3ZhbHVlcywgSlNP
Tjo6VmFsdWUgaW5fcGF5bG9hZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IEpTT046Ok9iamVj
dCYgaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgaW5fc2NyZWVuQ29sb3IsIGNvbnN0IEpTT046
OkFycmF5JiBpbl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgaW5fcHJpbnRDb2xvcikg
ZmluYWw7Ci1wcml2YXRlOgotICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURv
bWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1
cm4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERp
c3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2luY2x1
ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFs
dWVzLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi12b2lkIE9iakNJbnNwZWN0b3JEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcg
cmVxdWVzdElkLCBjb25zdCBKU09OOjpBcnJheSogaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmlu
ZyogaW5fbm90ZXMsIGNvbnN0IGRvdWJsZSogaW5fdGltZXN0YW1wLCBjb25zdCBKU09OOjpPYmpl
Y3QqIGluX3ZhbHVlcywgY29uc3QgSlNPTjo6VmFsdWUqIGluX3BheWxvYWQsIGNvbnN0IGludCog
aW5fZGF0YWJhc2VJZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBpbl9zcWxFcnJvciwgY29uc3QgU3Ry
aW5nKiBpbl9zY3JlZW5Db2xvciwgY29uc3QgSlNPTjo6QXJyYXkqIGluX2FsdGVybmF0ZUNvbG9y
cywgY29uc3QgU3RyaW5nKiBpbl9wcmludENvbG9yKQotewotICAgIGlmICghW21fZGVsZWdhdGUg
cmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJz
V2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOmNvbHVtbk5hbWVzOm5vdGVzOnRpbWVz
dGFtcDp2YWx1ZXM6cGF5bG9hZDpkYXRhYmFzZUlkOnNxbEVycm9yOnNjcmVlbkNvbG9yOmFsdGVy
bmF0ZUNvbG9yczpwcmludENvbG9yOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCkt
PnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9k
Tm90Rm91bmQsICInRGF0YWJhc2UuZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycycgd2FzIG5v
dCBmb3VuZCJfcyk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJy
b3JzKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZCBlcnJvckNhbGxiYWNrID0g
XihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0
UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwg
ZXJyb3IpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygp
OwotICAgIH07Ci0KLSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0cmlu
Zz4qLyAqKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqKm5vdGVzLCBkb3VibGUgKnRpbWVzdGFtcCwg
UldJUHJvdG9jb2xKU09OT2JqZWN0ICoqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipw
YXlsb2FkLCBpbnQgKmRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipzcWxF
cnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzICpzY3JlZW5Db2xvciwgTlNB
cnJheS8qPE5TU3RyaW5nPiovICoqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFz
ZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yICpwcmludENvbG9yKSB7Ci0g
ICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdE9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRF
Uihjb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05f
Rk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIobm90ZXMsIEAibm90ZXMiKTsKLSAgICAgICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHZhbHVlcywgQCJ2YWx1ZXMi
KTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHBh
eWxvYWQsIEAicGF5bG9hZCIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJ
T05BTF9QQVJBTUVURVIoc3FsRXJyb3IsIEAic3FsRXJyb3IiKTsKLSAgICAgICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKGFsdGVybmF0ZUNvbG9ycywgQCJhbHRl
cm5hdGVDb2xvcnMiKTsKLSAgICAgICAgaWYgKGNvbHVtbk5hbWVzKQotICAgICAgICAgICAgcmVz
dWx0T2JqZWN0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KCpj
b2x1bW5OYW1lcykpOwotICAgICAgICBpZiAobm90ZXMpCi0gICAgICAgICAgICByZXN1bHRPYmpl
Y3QtPnNldFN0cmluZygibm90ZXMiX3MsICpub3Rlcyk7Ci0gICAgICAgIGlmICh0aW1lc3RhbXAp
Ci0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCAqdGlt
ZXN0YW1wKTsKLSAgICAgICAgaWYgKHZhbHVlcykKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+
c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFsqdmFsdWVzIHRvSlNPTk9iamVjdF0pOwotICAgICAgICBp
ZiAocGF5bG9hZCkKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0VmFsdWUoInBheWxvYWQi
X3MsIFsqcGF5bG9hZCB0b0pTT05PYmplY3RdKTsKLSAgICAgICAgaWYgKGRhdGFiYXNlSWQpCi0g
ICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsICpkYXRh
YmFzZUlkKTsKLSAgICAgICAgaWYgKHNxbEVycm9yKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0
LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBbKnNxbEVycm9yIHRvSlNPTk9iamVjdF0pOwotICAg
ICAgICBpZiAoc2NyZWVuQ29sb3IpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmlu
Zygic2NyZWVuQ29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcoKnNjcmVlbkNvbG9yKSk7Ci0gICAg
ICAgIGlmIChhbHRlcm5hdGVDb2xvcnMpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldEFy
cmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KCphbHRlcm5hdGVDb2xv
cnMpKTsKLSAgICAgICAgaWYgKHByaW50Q29sb3IpCi0gICAgICAgICAgICByZXN1bHRPYmplY3Qt
PnNldFN0cmluZygicHJpbnRDb2xvciJfcywgdG9Qcm90b2NvbFN0cmluZygqcHJpbnRDb2xvcikp
OwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBX
VEZNb3ZlKHJlc3VsdE9iamVjdCksIGZhbHNlKTsKLSAgICB9OwotCi0gICAgTlNBcnJheS8qPE5T
U3RyaW5nPiovICpvX2luX2NvbHVtbk5hbWVzOwotICAgIGlmIChpbl9jb2x1bW5OYW1lcykKLSAg
ICAgICAgb19pbl9jb2x1bW5OYW1lcyA9IHRvT2JqQ1N0cmluZ0FycmF5KGluX2NvbHVtbk5hbWVz
KTsKLSAgICBOU1N0cmluZyAqb19pbl9ub3RlczsKLSAgICBpZiAoaW5fbm90ZXMpCi0gICAgICAg
IG9faW5fbm90ZXMgPSAqaW5fbm90ZXM7Ci0gICAgZG91YmxlIG9faW5fdGltZXN0YW1wOwotICAg
IGlmIChpbl90aW1lc3RhbXApCi0gICAgICAgIG9faW5fdGltZXN0YW1wID0gKmluX3RpbWVzdGFt
cDsKLSAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9faW5fdmFsdWVzOwotICAgIGlmIChpbl92
YWx1ZXMpCi0gICAgICAgIG9faW5fdmFsdWVzID0gW1tbUldJUHJvdG9jb2xKU09OT2JqZWN0IGFs
bG9jXSBpbml0V2l0aEpTT05PYmplY3Q6aW5fdmFsdWVzXSBhdXRvcmVsZWFzZV07Ci0gICAgUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICpvX2luX3BheWxvYWQ7Ci0gICAgaWYgKGluX3BheWxvYWQpCi0g
ICAgICAgIG9faW5fcGF5bG9hZCA9IFtbW1JXSVByb3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5p
dFdpdGhKU09OT2JqZWN0OmluX3BheWxvYWRdIGF1dG9yZWxlYXNlXTsKLSAgICBpbnQgb19pbl9k
YXRhYmFzZUlkOwotICAgIGlmIChpbl9kYXRhYmFzZUlkKQotICAgICAgICBvX2luX2RhdGFiYXNl
SWQgPSAqaW5fZGF0YWJhc2VJZDsKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpvX2lu
X3NxbEVycm9yOwotICAgIGlmIChpbl9zcWxFcnJvcikKLSAgICAgICAgb19pbl9zcWxFcnJvciA9
IFtbW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDpp
bl9zcWxFcnJvcl0gYXV0b3JlbGVhc2VdOwotICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFi
YXNlUHJpbWFyeUNvbG9ycz4gb19pbl9zY3JlZW5Db2xvcjsKLSAgICBpZiAoaW5fc2NyZWVuQ29s
b3IpCi0gICAgICAgIG9faW5fc2NyZWVuQ29sb3IgPSBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFBy
b3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzPigqaW5fc2NyZWVuQ29sb3IpOwotICAgIE5TQXJy
YXkvKjxOU1N0cmluZz4qLyAqb19pbl9hbHRlcm5hdGVDb2xvcnM7Ci0gICAgaWYgKGluX2FsdGVy
bmF0ZUNvbG9ycykKLSAgICAgICAgb19pbl9hbHRlcm5hdGVDb2xvcnMgPSB0b09iakNTdHJpbmdB
cnJheShpbl9hbHRlcm5hdGVDb2xvcnMpOwotICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFi
YXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3I+IG9faW5fcHJpbnRDb2xv
cjsKLSAgICBpZiAoaW5fcHJpbnRDb2xvcikKLSAgICAgICAgb19pbl9wcmludENvbG9yID0gZnJv
bVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFy
YW1ldGVyc1ByaW50Q29sb3I+KCppbl9wcmludENvbG9yKTsKLQotICAgIFttX2RlbGVnYXRlIGV4
ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNr
IHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2sgY29sdW1uTmFtZXM6KGluX2NvbHVtbk5h
bWVzID8gJm9faW5fY29sdW1uTmFtZXMgOiBuaWwpIG5vdGVzOihpbl9ub3RlcyA/ICZvX2luX25v
dGVzIDogbmlsKSB0aW1lc3RhbXA6KGluX3RpbWVzdGFtcCA/ICZvX2luX3RpbWVzdGFtcCA6IG5p
bCkgdmFsdWVzOihpbl92YWx1ZXMgPyAmb19pbl92YWx1ZXMgOiBuaWwpIHBheWxvYWQ6KGluX3Bh
eWxvYWQgPyAmb19pbl9wYXlsb2FkIDogbmlsKSBkYXRhYmFzZUlkOihpbl9kYXRhYmFzZUlkID8g
Jm9faW5fZGF0YWJhc2VJZCA6IG5pbCkgc3FsRXJyb3I6KGluX3NxbEVycm9yID8gJm9faW5fc3Fs
RXJyb3IgOiBuaWwpIHNjcmVlbkNvbG9yOihpbl9zY3JlZW5Db2xvciA/ICZvX2luX3NjcmVlbkNv
bG9yLnZhbHVlKCkgOiBuaWwpIGFsdGVybmF0ZUNvbG9yczooaW5fYWx0ZXJuYXRlQ29sb3JzID8g
Jm9faW5fYWx0ZXJuYXRlQ29sb3JzIDogbmlsKSBwcmludENvbG9yOihpbl9wcmludENvbG9yID8g
Jm9faW5fcHJpbnRDb2xvci52YWx1ZSgpIDogbmlsKV07Ci19Ci0KLXZvaWQgT2JqQ0luc3BlY3Rv
ckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhs
b25nIHJlcXVlc3RJZCwgY29uc3QgSlNPTjo6QXJyYXkmIGluX2NvbHVtbk5hbWVzLCBjb25zdCBT
dHJpbmcmIGluX25vdGVzLCBkb3VibGUgaW5fdGltZXN0YW1wLCBjb25zdCBKU09OOjpPYmplY3Qm
IGluX3ZhbHVlcywgSlNPTjo6VmFsdWUgaW5fcGF5bG9hZCwgaW50IGluX2RhdGFiYXNlSWQsIGNv
bnN0IEpTT046Ok9iamVjdCYgaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgaW5fc2NyZWVuQ29s
b3IsIGNvbnN0IEpTT046OkFycmF5JiBpbl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYg
aW5fcHJpbnRDb2xvcikKLXsKLSAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3Rv
cjpAc2VsZWN0b3IoZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzV2l0aEVycm9yQ2FsbGJhY2s6
c3VjY2Vzc0NhbGxiYWNrOmNvbHVtbk5hbWVzOm5vdGVzOnRpbWVzdGFtcDp2YWx1ZXM6cGF5bG9h
ZDpkYXRhYmFzZUlkOnNxbEVycm9yOnNjcmVlbkNvbG9yOmFsdGVybmF0ZUNvbG9yczpwcmludENv
bG9yOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJy
b3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRGF0YWJh
c2UuZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzJyB3YXMgbm90IGZvdW5kIl9zKTsKLSAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikg
ewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVl
c3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7Ci0gICAgICAgIGJh
Y2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgfTsKLQotICAgIGlk
IHN1Y2Nlc3NDYWxsYmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiovICpjb2x1bW5OYW1lcywg
TlNTdHJpbmcgKm5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3Qg
KnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwg
VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqc3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNl
UHJpbWFyeUNvbG9ycyBzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICphbHRlcm5h
dGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJz
UHJpbnRDb2xvciBwcmludENvbG9yKSB7Ci0gICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3Vs
dE9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7Ci0g
ICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG5vdGVzLCBAIm5v
dGVzIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHZh
bHVlcywgQCJ2YWx1ZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9Q
QVJBTUVURVIocGF5bG9hZCwgQCJwYXlsb2FkIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfUkVRVUlSRURfUEFSQU1FVEVSKHNxbEVycm9yLCBAInNxbEVycm9yIik7Ci0gICAgICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKGFsdGVybmF0ZUNvbG9ycywgQCJh
bHRlcm5hdGVDb2xvcnMiKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheSgiY29sdW1u
TmFtZXMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KGNvbHVtbk5hbWVzKSk7Ci0gICAgICAgIHJlc3Vs
dE9iamVjdC0+c2V0U3RyaW5nKCJub3RlcyJfcywgbm90ZXMpOwotICAgICAgICByZXN1bHRPYmpl
Y3QtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCB0aW1lc3RhbXApOwotICAgICAgICByZXN1bHRP
YmplY3QtPnNldE9iamVjdCgidmFsdWVzIl9zLCBbdmFsdWVzIHRvSlNPTk9iamVjdF0pOwotICAg
ICAgICByZXN1bHRPYmplY3QtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBbcGF5bG9hZCB0b0pTT05P
YmplY3RdKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9z
LCBkYXRhYmFzZUlkKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9y
Il9zLCBbc3FsRXJyb3IgdG9KU09OT2JqZWN0XSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0
U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgdG9Qcm90b2NvbFN0cmluZyhzY3JlZW5Db2xvcikpOwot
ICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIHRvSlNP
TlN0cmluZ0FycmF5KGFsdGVybmF0ZUNvbG9ycykpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNl
dFN0cmluZygicHJpbnRDb2xvciJfcywgdG9Qcm90b2NvbFN0cmluZyhwcmludENvbG9yKSk7Ci0g
ICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1v
dmUocmVzdWx0T2JqZWN0KSwgZmFsc2UpOwotICAgIH07Ci0KLSAgICBOU0FycmF5Lyo8TlNTdHJp
bmc+Ki8gKm9faW5fY29sdW1uTmFtZXMgPSB0b09iakNTdHJpbmdBcnJheSgmaW5fY29sdW1uTmFt
ZXMpOwotICAgIE5TU3RyaW5nICpvX2luX25vdGVzID0gaW5fbm90ZXM7Ci0gICAgZG91YmxlIG9f
aW5fdGltZXN0YW1wID0gaW5fdGltZXN0YW1wOwotICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAq
b19pbl92YWx1ZXMgPSBbW1tSV0lQcm90b2NvbEpTT05PYmplY3QgYWxsb2NdIGluaXRXaXRoSlNP
Tk9iamVjdDomaW5fdmFsdWVzXSBhdXRvcmVsZWFzZV07Ci0gICAgUldJUHJvdG9jb2xKU09OT2Jq
ZWN0ICpvX2luX3BheWxvYWQgPSBbW1tSV0lQcm90b2NvbEpTT05PYmplY3QgYWxsb2NdIGluaXRX
aXRoSlNPTk9iamVjdDomaW5fcGF5bG9hZF0gYXV0b3JlbGVhc2VdOwotICAgIGludCBvX2luX2Rh
dGFiYXNlSWQgPSBpbl9kYXRhYmFzZUlkOwotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3Ig
Km9faW5fc3FsRXJyb3IgPSBbW1tUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGFsbG9jXSBpbml0
V2l0aEpTT05PYmplY3Q6JmluX3NxbEVycm9yXSBhdXRvcmVsZWFzZV07Ci0gICAgT3B0aW9uYWw8
VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzPiBvX2luX3NjcmVlbkNvbG9yID0gZnJv
bVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycz4oaW5fc2Ny
ZWVuQ29sb3IpOwotICAgIGlmICghb19pbl9zY3JlZW5Db2xvcikgewotICAgICAgICBiYWNrZW5k
RGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZh
bGlkUGFyYW1zLCAiUGFyYW1ldGVyICdzY3JlZW5Db2xvcicgb2YgbWV0aG9kICdEYXRhYmFzZS5l
eGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMnIGNhbm5vdCBiZSBwcm9jZXNzZWQiX3MpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqb19pbl9hbHRl
cm5hdGVDb2xvcnMgPSB0b09iakNTdHJpbmdBcnJheSgmaW5fYWx0ZXJuYXRlQ29sb3JzKTsKLSAg
ICBPcHRpb25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVy
c1ByaW50Q29sb3I+IG9faW5fcHJpbnRDb2xvciA9IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJv
dG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3I+KGluX3By
aW50Q29sb3IpOwotICAgIGlmICghb19pbl9wcmludENvbG9yKSB7Ci0gICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OkludmFs
aWRQYXJhbXMsICJQYXJhbWV0ZXIgJ3ByaW50Q29sb3InIG9mIG1ldGhvZCAnRGF0YWJhc2UuZXhl
Y3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzJyBjYW5ub3QgYmUgcHJvY2Vzc2VkIl9zKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIFttX2RlbGVnYXRlIGV4ZWN1dGVOb09wdGlvbmFsUGFy
YW1ldGVyc1dpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1
Y2Nlc3NDYWxsYmFjayBjb2x1bW5OYW1lczpvX2luX2NvbHVtbk5hbWVzIG5vdGVzOm9faW5fbm90
ZXMgdGltZXN0YW1wOm9faW5fdGltZXN0YW1wIHZhbHVlczpvX2luX3ZhbHVlcyBwYXlsb2FkOm9f
aW5fcGF5bG9hZCBkYXRhYmFzZUlkOm9faW5fZGF0YWJhc2VJZCBzcWxFcnJvcjpvX2luX3NxbEVy
cm9yIHNjcmVlbkNvbG9yOm9faW5fc2NyZWVuQ29sb3IudmFsdWUoKSBhbHRlcm5hdGVDb2xvcnM6
b19pbl9hbHRlcm5hdGVDb2xvcnMgcHJpbnRDb2xvcjpvX2luX3ByaW50Q29sb3IudmFsdWUoKV07
Ci19Ci0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xDb25maWd1cmF0aW9uLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21t
YW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3Iv
VGVzdFByb3RvY29sLmg+Ci0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0Iikp
KQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKLUBwcm9w
ZXJ0eSAobm9uYXRvbWljLCByZXRhaW4sIHNldHRlcj1zZXREYXRhYmFzZUhhbmRsZXI6KSBpZDxU
ZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+IGRhdGFiYXNlSGFuZGxlcjsKLUBlbmQK
LQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1l
dGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNp
bXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKLQotI2ltcG9ydCAiVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5o
IgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4K
LSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5o
PgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXJzLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcnMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9u
IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KLXsKLSAgICBBdWdtZW50YWJsZUluc3BlY3RvckNv
bnRyb2xsZXIqIF9jb250cm9sbGVyOwotICAgIGlkPFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWlu
SGFuZGxlcj4gX2RhdGFiYXNlSGFuZGxlcjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
Q29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCi17
Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVy
biBuaWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIpOwotICAgIF9jb250cm9sbGVyID0gY29udHJv
bGxlcjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgW19k
YXRhYmFzZUhhbmRsZXIgcmVsZWFzZV07Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi0tICh2
b2lkKXNldERhdGFiYXNlSGFuZGxlcjooaWQ8VGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5k
bGVyPiloYW5kbGVyCi17Ci0gICAgaWYgKGhhbmRsZXIgPT0gX2RhdGFiYXNlSGFuZGxlcikKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgW19kYXRhYmFzZUhhbmRsZXIgcmVsZWFzZV07Ci0gICAgX2Rh
dGFiYXNlSGFuZGxlciA9IFtoYW5kbGVyIHJldGFpbl07Ci0KLSAgICBhdXRvIGFsdGVybmF0ZURp
c3BhdGNoZXIgPSBtYWtlVW5pcXVlPE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVyPihoYW5kbGVyKTsKLSAgICBhdXRvIGFsdGVybmF0ZUFnZW50ID0gbWFrZVVuaXF1ZTxBbHRl
cm5hdGVEaXNwYXRjaGFibGVBZ2VudDxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyLCBBbHRlcm5h
dGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPj4oIkRhdGFiYXNlIl9zLCAqX2NvbnRyb2xsZXIs
IFdURk1vdmUoYWx0ZXJuYXRlRGlzcGF0Y2hlcikpOwotICAgIF9jb250cm9sbGVyLT5hcHBlbmRF
eHRyYUFnZW50KFdURk1vdmUoYWx0ZXJuYXRlQWdlbnQpKTsKLX0KLQotLSAoaWQ8VGVzdFByb3Rv
Y29sRGF0YWJhc2VEb21haW5IYW5kbGVyPilkYXRhYmFzZUhhbmRsZXIKLXsKLSAgICByZXR1cm4g
X2RhdGFiYXNlSGFuZGxlcjsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sQ29uZmlndXJhdGlvbi5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnRE
aXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRz
LXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVy
bmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9y
dCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0j
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
Y29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8Rm91bmRhdGlv
bi9Gb3VuZGF0aW9uLmg+Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05P
YmplY3QuaD4KLQotCi1AY2xhc3MgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcjsKLQotdHlwZWRl
ZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sUGxhdGZvcm0pIHsKLSAgICBUZXN0UHJv
dG9jb2xQbGF0Zm9ybUFsbCwKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWMsCi0gICAg
VGVzdFByb3RvY29sUGxhdGZvcm1JT1MsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUywK
LX07Ci0KLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGF0YWJhc2VQ
cmltYXJ5Q29sb3JzKSB7Ci0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzUmVk
LAotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc0dyZWVuLAotICAgIFRlc3RQ
cm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc0JsdWUsCi19OwotCi10eXBlZGVmIE5TX0VOVU0o
TlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRl
cnNQcmludENvbG9yKSB7Ci0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9u
YWxQYXJhbWV0ZXJzUHJpbnRDb2xvckN5YW4sCi0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVj
dXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvck1hZ2VudGEsCi0gICAgVGVzdFByb3Rv
Y29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvclllbGxvdywK
LSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmlu
dENvbG9yQmxhY2ssCi19OwotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9j
b2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yKSB7Ci0gICAg
VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xv
ckN5YW4sCi0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0
ZXJzUHJpbnRDb2xvck1hZ2VudGEsCi0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxs
T3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvclllbGxvdywKLSAgICBUZXN0UHJvdG9jb2xEYXRh
YmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQmxhY2ssCi19OwotCi10
eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09w
dGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IpIHsKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JDeWFuLAotICAgIFRlc3RQcm90b2Nv
bERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvck1hZ2VudGEsCi0g
ICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENv
bG9yWWVsbG93LAotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJh
bWV0ZXJzUHJpbnRDb2xvckJsYWNrLAotfTsKLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwg
VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9y
KSB7Ci0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQ
cmludENvbG9yQ3lhbiwKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFs
UGFyYW1ldGVyc1ByaW50Q29sb3JNYWdlbnRhLAotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhl
Y3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvclllbGxvdywKLSAgICBUZXN0UHJvdG9j
b2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JCbGFjaywKLX07
Ci0KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNl
IFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgOiBSV0lQcm90b2NvbEpTT05PYmplY3QKLS0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4g
KilwYXlsb2FkOwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVBy
b3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhN
ZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZTooaW50KWNvZGU7Ci0vKiByZXF1aXJlZCAq
LyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKm1lc3NhZ2U7Ci0vKiByZXF1
aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQgY29kZTsKLUBlbmQKLQot
QHByb3RvY29sIFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlciA8TlNPYmplY3Q+Ci1A
b3B0aW9uYWwKLS0gKHZvaWQpZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1dpdGhFcnJvckNh
bGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2Fs
bGJhY2s6KHZvaWQoXikoTlNBcnJheS8qPE5TU3RyaW5nPiovICoqY29sdW1uTmFtZXMsIE5TU3Ry
aW5nICoqbm90ZXMsIGRvdWJsZSAqdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKip2
YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnBheWxvYWQsIGludCAqZGF0YWJhc2VJZCwg
VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFz
ZVByaW1hcnlDb2xvcnMgKnNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiphbHRl
cm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1l
dGVyc1ByaW50Q29sb3IgKnByaW50Q29sb3IpKXN1Y2Nlc3NDYWxsYmFjayBjb2x1bW5OYW1lczoo
TlNBcnJheS8qPE5TU3RyaW5nPiovICoqKWNvbHVtbk5hbWVzIG5vdGVzOihOU1N0cmluZyAqKilu
b3RlcyB0aW1lc3RhbXA6KGRvdWJsZSAqKXRpbWVzdGFtcCB2YWx1ZXM6KFJXSVByb3RvY29sSlNP
Tk9iamVjdCAqKil2YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqKXBheWxv
YWQgZGF0YWJhc2VJZDooaW50ICopZGF0YWJhc2VJZCBzcWxFcnJvcjooVGVzdFByb3RvY29sRGF0
YWJhc2VFcnJvciAqKilzcWxFcnJvciBzY3JlZW5Db2xvcjooVGVzdFByb3RvY29sRGF0YWJhc2VQ
cmltYXJ5Q29sb3JzICopc2NyZWVuQ29sb3IgYWx0ZXJuYXRlQ29sb3JzOihOU0FycmF5Lyo8TlNT
dHJpbmc+Ki8gKiopYWx0ZXJuYXRlQ29sb3JzIHByaW50Q29sb3I6KFRlc3RQcm90b2NvbERhdGFi
YXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IgKilwcmludENvbG9yOwot
LSAodm9pZClleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNXaXRoRXJyb3JDYWxsYmFjazoodm9p
ZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lk
KF4pKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqY29sdW1uTmFtZXMsIE5TU3RyaW5nICpub3Rlcywg
ZG91YmxlIHRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICp2YWx1ZXMsIFJXSVByb3Rv
Y29sSlNPTk9iamVjdCAqcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFi
YXNlRXJyb3IgKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgc2Ny
ZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJv
dG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IgcHJpbnRD
b2xvcikpc3VjY2Vzc0NhbGxiYWNrIGNvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8g
Kiljb2x1bW5OYW1lcyBub3RlczooTlNTdHJpbmcgKilub3RlcyB0aW1lc3RhbXA6KGRvdWJsZSl0
aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKil2YWx1ZXMgcGF5bG9hZDoo
UldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZCBkYXRhYmFzZUlkOihpbnQpZGF0YWJhc2VJ
ZCBzcWxFcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKXNxbEVycm9yIHNjcmVlbkNv
bG9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMpc2NyZWVuQ29sb3IgYWx0ZXJu
YXRlQ29sb3JzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilhbHRlcm5hdGVDb2xvcnMgcHJpbnRD
b2xvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmlu
dENvbG9yKXByaW50Q29sb3I7Ci1AZW5kCi0KLQotCi0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9S
V0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4KLQotIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2wuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwt
Y2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFBy
b3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21l
bnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4K
LQotCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1l
dGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNp
bXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29s
QXJyYXlDb252ZXJzaW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdGVtcGxhdGU8
dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgotT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9j
b2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2Nv
bFN0cmluZyhUZXN0UHJvdG9jb2xQbGF0Zm9ybSB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUp
IHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOgotICAgICAgICByZXR1cm4gImFs
bCJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzoKLSAgICAgICAgcmV0
dXJuICJnZW5lcmljIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1JT1M6Ci0gICAg
ICAgIHJldHVybiAiaW9zIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzoK
LSAgICAgICAgcmV0dXJuICJtYWNvcyJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGlu
ZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xQbGF0Zm9ybT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0
IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJhbGwiKQotICAgICAgICByZXR1
cm4gVGVzdFByb3RvY29sUGxhdGZvcm1BbGw7Ci0gICAgaWYgKHZhbHVlID09ICJnZW5lcmljIikK
LSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzsKLSAgICBpZiAodmFs
dWUgPT0gImlvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzsKLSAg
ICBpZiAodmFsdWUgPT0gIm1hY29zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRm
b3JtTWFjT1M7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotCi1pbmxpbmUgU3RyaW5n
IHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzIHZhbHVl
KQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VQ
cmltYXJ5Q29sb3JzUmVkOgotICAgICAgICByZXR1cm4gInJlZCJfczsKLSAgICBjYXNlIFRlc3RQ
cm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc0dyZWVuOgotICAgICAgICByZXR1cm4gImdyZWVu
Il9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzQmx1ZToKLSAg
ICAgICAgcmV0dXJuICJibHVlIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9w
dGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycz4gZnJvbVByb3RvY29sU3Ry
aW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJyZWQiKQotICAg
ICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzUmVkOwotICAgIGlm
ICh2YWx1ZSA9PSAiZ3JlZW4iKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VQ
cmltYXJ5Q29sb3JzR3JlZW47Ci0gICAgaWYgKHZhbHVlID09ICJibHVlIikKLSAgICAgICAgcmV0
dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc0JsdWU7Ci0gICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKLX0KLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90
b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IgdmFsdWUp
Ci17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQ3lhbjoKLSAgICAgICAgcmV0dXJu
ICJjeWFuIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9u
YWxQYXJhbWV0ZXJzUHJpbnRDb2xvck1hZ2VudGE6Ci0gICAgICAgIHJldHVybiAibWFnZW50YSJf
czsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1l
dGVyc1ByaW50Q29sb3JZZWxsb3c6Ci0gICAgICAgIHJldHVybiAieWVsbG93Il9zOwotICAgIGNh
c2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRD
b2xvckJsYWNrOgotICAgICAgICByZXR1cm4gImJsYWNrIl9zOwotICAgIH0KLX0KLQotdGVtcGxh
dGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlv
bmFsUGFyYW1ldGVyc1ByaW50Q29sb3I+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcm
IHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiY3lhbiIpCi0gICAgICAgIHJldHVybiBUZXN0
UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQ3lh
bjsKLSAgICBpZiAodmFsdWUgPT0gIm1hZ2VudGEiKQotICAgICAgICByZXR1cm4gVGVzdFByb3Rv
Y29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvck1hZ2VudGE7
Ci0gICAgaWYgKHZhbHVlID09ICJ5ZWxsb3ciKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29s
RGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvclllbGxvdzsKLSAg
ICBpZiAodmFsdWUgPT0gImJsYWNrIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFi
YXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JCbGFjazsKLSAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwotfQotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVz
dFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvciB2
YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFi
YXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JDeWFuOgotICAgICAgICBy
ZXR1cm4gImN5YW4iX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxP
cHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yTWFnZW50YToKLSAgICAgICAgcmV0dXJuICJtYWdl
bnRhIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQ
YXJhbWV0ZXJzUHJpbnRDb2xvclllbGxvdzoKLSAgICAgICAgcmV0dXJuICJ5ZWxsb3ciX3M7Ci0g
ICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQ
cmludENvbG9yQmxhY2s6Ci0gICAgICAgIHJldHVybiAiYmxhY2siX3M7Ci0gICAgfQotfQotCi10
ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxs
T3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvcj4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0
cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJjeWFuIikKLSAgICAgICAgcmV0dXJu
IFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29s
b3JDeWFuOwotICAgIGlmICh2YWx1ZSA9PSAibWFnZW50YSIpCi0gICAgICAgIHJldHVybiBUZXN0
UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yTWFn
ZW50YTsKLSAgICBpZiAodmFsdWUgPT0gInllbGxvdyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJv
dG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yWWVsbG93
OwotICAgIGlmICh2YWx1ZSA9PSAiYmxhY2siKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29s
RGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckJsYWNrOwotICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmlu
ZyhUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29s
b3IgdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xE
YXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JDeWFuOgotICAgICAg
ICByZXR1cm4gImN5YW4iX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVO
b09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JNYWdlbnRhOgotICAgICAgICByZXR1cm4gIm1h
Z2VudGEiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFs
UGFyYW1ldGVyc1ByaW50Q29sb3JZZWxsb3c6Ci0gICAgICAgIHJldHVybiAieWVsbG93Il9zOwot
ICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQ
cmludENvbG9yQmxhY2s6Ci0gICAgICAgIHJldHVybiAiYmxhY2siX3M7Ci0gICAgfQotfQotCi10
ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9P
cHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gImN5YW4iKQotICAgICAgICByZXR1cm4g
VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9y
Q3lhbjsKLSAgICBpZiAodmFsdWUgPT0gIm1hZ2VudGEiKQotICAgICAgICByZXR1cm4gVGVzdFBy
b3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yTWFnZW50
YTsKLSAgICBpZiAodmFsdWUgPT0gInllbGxvdyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9j
b2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JZZWxsb3c7Ci0g
ICAgaWYgKHZhbHVlID09ICJibGFjayIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRh
YmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JCbGFjazsKLSAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwotfQotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVz
dFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yIHZh
bHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJh
c2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQ3lhbjoKLSAgICAgICAgcmV0
dXJuICJjeWFuIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRp
b25hbFBhcmFtZXRlcnNQcmludENvbG9yTWFnZW50YToKLSAgICAgICAgcmV0dXJuICJtYWdlbnRh
Il9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFt
ZXRlcnNQcmludENvbG9yWWVsbG93OgotICAgICAgICByZXR1cm4gInllbGxvdyJfczsKLSAgICBj
YXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRD
b2xvckJsYWNrOgotICAgICAgICByZXR1cm4gImJsYWNrIl9zOwotICAgIH0KLX0KLQotdGVtcGxh
dGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9u
YWxQYXJhbWV0ZXJzUHJpbnRDb2xvcj4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYg
dmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJjeWFuIikKLSAgICAgICAgcmV0dXJuIFRlc3RQ
cm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckN5YW47
Ci0gICAgaWYgKHZhbHVlID09ICJtYWdlbnRhIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2Nv
bERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvck1hZ2VudGE7Ci0g
ICAgaWYgKHZhbHVlID09ICJ5ZWxsb3ciKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0
YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yWWVsbG93OwotICAgIGlm
ICh2YWx1ZSA9PSAiYmxhY2siKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VF
eGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQmxhY2s7Ci0gICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNp
bXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9S
V0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0
b3I7Ci0KLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChEYXRhYmFzZURv
bWFpbikKLQotKyAodm9pZClfcGFyc2VEYXRhYmFzZUlkOihOU051bWJlciAqKilvdXRWYWx1ZSBm
cm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLSsgKHZvaWQpX3BhcnNlUHJpbWFyeUNvbG9yczooTlNO
dW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJz
ZUNvbG9yTGlzdDooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2Fk
OihpZClwYXlsb2FkOwotKyAodm9pZClfcGFyc2VFcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VF
cnJvciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLQotQGVuZAotCi1AaW1w
bGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChEYXRhYmFzZURvbWFpbikK
LQotKyAodm9pZClfcGFyc2VEYXRhYmFzZUlkOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5
bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5
bG9hZCwgW05TTnVtYmVyIGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gKE5TTnVtYmVyICopcGF5
bG9hZDsKLX0KLQotKyAodm9pZClfcGFyc2VQcmltYXJ5Q29sb3JzOihOU051bWJlciAqKilvdXRW
YWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
QkFEX1RZUEUocGF5bG9hZCwgW05TU3RyaW5nIGNsYXNzXSk7Ci0gICAgT3B0aW9uYWw8VGVzdFBy
b3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzPiByZXN1bHQgPSBJbnNwZWN0b3I6OmZyb21Qcm90
b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnM+KHBheWxvYWQpOwot
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX0VOVU1fVkFMVUUocmVzdWx0LCBAIlByaW1hcnlD
b2xvcnMiKTsKLSAgICAqb3V0VmFsdWUgPSBAKHJlc3VsdC52YWx1ZSgpKTsKLX0KLQotKyAodm9p
ZClfcGFyc2VDb2xvckxpc3Q6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKilvdXRWYWx1ZSBmcm9t
UGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUo
cGF5bG9hZCwgW05TQXJyYXkvKjxOU1N0cmluZz4qLyBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9
IChOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilwYXlsb2FkOwotfQotCi0rICh2b2lkKV9wYXJzZUVy
cm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihp
ZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBb
TlNEaWN0aW9uYXJ5IGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xEYXRh
YmFzZUVycm9yIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07Ci19Ci0KLUBlbmQKLQot
Ci0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJU
ZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2
YXRlLmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1
ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi1AaW1wbGVtZW50YXRpb24g
VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcgotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXls
b2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCi17Ci0g
ICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAg
ICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJtZXNzYWdl
Il0sIEAibWVzc2FnZSIpOwotICAgIHNlbGYubWVzc2FnZSA9IHBheWxvYWRbQCJtZXNzYWdlIl07
Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJj
b2RlIl0sIEAiY29kZSIpOwotICAgIHNlbGYuY29kZSA9IFtwYXlsb2FkW0AiY29kZSJdIGludGVn
ZXJWYWx1ZV07Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0
aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilvYmplY3QKLXsKLSAgICBp
ZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoSlNPTk9iamVjdDpbb2JqZWN0IHRvSlNPTk9iamVj
dF0uZ2V0KCldKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIHJldHVybiBzZWxmOwotfQot
Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29k
ZTooaW50KWNvZGUKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAg
cmV0dXJuIG5pbDsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFko
bWVzc2FnZSwgQCJtZXNzYWdlIik7Ci0KLSAgICBzZWxmLm1lc3NhZ2UgPSBtZXNzYWdlOwotICAg
IHNlbGYuY29kZSA9IGNvZGU7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClzZXRN
ZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UKLXsKLSAgICBbc3VwZXIgc2V0U3RyaW5nOm1lc3Nh
Z2UgZm9yS2V5OkAibWVzc2FnZSJdOwotfQotCi0tIChOU1N0cmluZyAqKW1lc3NhZ2UKLXsKLSAg
ICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAIm1lc3NhZ2UiXTsKLX0KLQotLSAodm9pZClz
ZXRDb2RlOihpbnQpY29kZQotewotICAgIFtzdXBlciBzZXRJbnRlZ2VyOmNvZGUgZm9yS2V5OkAi
Y29kZSJdOwotfQotCi0tIChpbnQpY29kZQotewotICAgIHJldHVybiBbc3VwZXIgaW50ZWdlckZv
cktleTpAImNvZGUiXTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
VHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3Jt
Lmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2dlbmVyaWMvZXhwZWN0ZWQvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbi1y
ZXN1bHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0YzBmZTNmZTNjLi4wMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJpYy9leHBlY3RlZC9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uLXJlc3Vs
dAorKysgL2Rldi9udWxsCkBAIC0xLDg3MCArMCwwIEBACi0jIyMgQmVnaW4gRmlsZTogSW5zcGVj
dG9yQmFja2VuZENvbW1hbmRzLmpzCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
ZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFu
ZHMuanMKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMu
aAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFj
LXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCi0jaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9y
IHsKLQotY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZv
aWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3Bh
dGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KLSAg
ICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBt
X2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Ci1wcml2YXRlOgotICAgIFJlZlB0cjxCYWNrZW5k
RGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKLX07Ci0KLQotCi0KLX0gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgotCi0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCi0jIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMu
aAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9u
Y2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdHlwZWRlZiBTdHJpbmcg
RXJyb3JTdHJpbmc7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmls
ZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2Vu
ZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmlu
aXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RCYWNr
ZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZy
b250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3
dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNp
ZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSNpbmNsdWRlICJUZXN0
QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIEluc3Bl
Y3RvciB7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBU
ZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5k
RGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRp
b25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmpl
Y3RzLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEZyb250ZW5kUm91
dGVyOwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEZyb250
ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hl
cnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0
aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0
Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91
dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVj
dG9yIHsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEZy
b250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmpl
Y3RzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRo
LW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
UHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5hbWVzcGFj
ZSBJbnNwZWN0b3IgewotCi0KLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLQotCi0KLQot
Ci0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgot
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbE9iamVjdHMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
ZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVz
dFByb3RvY29sT2JqZWN0cy5oIgotCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotbmFtZXNw
YWNlIFByb3RvY29sIHsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3Bw
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRm
b3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVy
cy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQotCi0KLW5hbWVzcGFjZSBJbnNwZWN0
b3IgewotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVz
dFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xJ
bnRlcm5hbC5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2lu
Y2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi19IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5k
RGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRp
b24uaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgt
bWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgotCi1fX2F0dHJpYnV0
ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29u
ZmlndXJhdGlvbiA6IE5TT2JqZWN0Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xDb25maWd1cmF0aW9uLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3Vy
YXRpb24ubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13
aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKLQotI2ltcG9y
dCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmRE
aXNwYXRjaGVycy5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hh
YmxlQWdlbnQuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9y
Q29udHJvbGxlci5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRl
QmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcnMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGlt
cGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KLXsKLSAgICBBdWdtZW50YWJs
ZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotfQotCi0tIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRy
b2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAg
ICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRyb2xsZXIg
PSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWRlYWxsb2MKLXsK
LSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2
ZW50RGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZp
bml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNp
bXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8d3RmL0pTT05W
YWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0jIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMt
d2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2ltcG9ydCA8
V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgotCi0KLQotCi10eXBlZGVmIE5T
X0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xQbGF0Zm9ybSkgewotICAgIFRlc3RQcm90b2Nv
bFBsYXRmb3JtQWxsLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYywKLSAgICBUZXN0
UHJvdG9jb2xQbGF0Zm9ybUlPUywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TLAotfTsK
LQotCi0KLQotCi0KLQotCi0KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVp
bGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5o
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0
UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCi0j
aW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4K
LSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLQotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sSW50ZXJuYWwuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13
aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9y
L1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsK
LQotdGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgotT3B0aW9uYWw8T2JqQ0VudW1UeXBl
PiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0KLWlubGluZSBTdHJp
bmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xQbGF0Zm9ybSB2YWx1ZSkKLXsKLSAgICBz
d2l0Y2godmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOgotICAgICAg
ICByZXR1cm4gImFsbCJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzoK
LSAgICAgICAgcmV0dXJuICJnZW5lcmljIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZv
cm1JT1M6Ci0gICAgICAgIHJldHVybiAiaW9zIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxh
dGZvcm1NYWNPUzoKLSAgICAgICAgcmV0dXJuICJtYWNvcyJfczsKLSAgICB9Ci19Ci0KLXRlbXBs
YXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xQbGF0Zm9ybT4gZnJvbVByb3RvY29s
U3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJhbGwiKQot
ICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1BbGw7Ci0gICAgaWYgKHZhbHVlID09
ICJnZW5lcmljIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzsK
LSAgICBpZiAodmFsdWUgPT0gImlvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0
Zm9ybUlPUzsKLSAgICBpZiAodmFsdWUgPT0gIm1hY29zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQ
cm90b2NvbFBsYXRmb3JtTWFjT1M7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgt
bWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0KLSNpbXBvcnQg
IlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgotI2lt
cG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLQotdXNp
bmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0KLQotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xU
eXBlcy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdp
dGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJv
dG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNp
bXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0K
LQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQv
ZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2RvbWFpbi1kZWJ1Z2dh
YmxlVHlwZXMuanNvbi1yZXN1bHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1YjU5
MTdhYTBiLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9kb21haW4tZGVidWdnYWJsZVR5cGVzLmpz
b24tcmVzdWx0CisrKyAvZGV2L251bGwKQEAgLTEsMTA2MyArMCwwIEBACi0jIyMgQmVnaW4gRmls
ZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLS8vIERvbWFpbgotSW5zcGVjdG9yQmFja2VuZC5yZWdp
c3RlckRvbWFpbigiRG9tYWluIiwgbnVsbCk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29t
bWFuZCgiRG9tYWluLkNvbW1hbmQiLCBudWxsLCBbXSwgW10pOwotSW5zcGVjdG9yQmFja2VuZC5y
ZWdpc3RlckV2ZW50KCJEb21haW4uRXZlbnQiLCBudWxsLCBbXSk7Ci1JbnNwZWN0b3JCYWNrZW5k
LnJlZ2lzdGVyRG9tYWluRGlzcGF0Y2hlciA9IEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEaXNw
YXRjaGVyLmJpbmQoSW5zcGVjdG9yQmFja2VuZCwgIkRvbWFpbiIpOwotSW5zcGVjdG9yQmFja2Vu
ZC5hY3RpdmF0ZURvbWFpbigiRG9tYWluIiwgWyJ3ZWItcGFnZSJdKTsKLSMjIyBFbmQgRmlsZTog
SW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJu
YXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBkb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCi0j
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotCi1uYW1l
c3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewot
cHVibGljOgotICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNw
YXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlz
cGF0Y2hlcik7IH0KLSAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBj
b25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Ci1wcml2YXRlOgotICAg
IFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKLX07Ci0KLQot
Y2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRl
QmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZpcnR1YWwgfkFsdGVybmF0ZURvbWFp
bkJhY2tlbmREaXNwYXRjaGVyKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIENvbW1hbmQobG9uZyBj
YWxsSWQpID0gMDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jZW5kaWYgLy8g
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jIyMgRW5kIEZpbGU6IFRl
c3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJh
Y2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9t
YWluLWRlYnVnZ2FibGVUeXBlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0
cy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0
b3IgewotCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQotI2lmIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotY2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERp
c3BhdGNoZXI7Ci0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCi0KLWNsYXNzIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7Ci1wdWJsaWM6Ci0g
ICAgdmlydHVhbCB2b2lkIENvbW1hbmQoRXJyb3JTdHJpbmcmKSA9IDA7Ci1wcm90ZWN0ZWQ6Ci0g
ICAgdmlydHVhbCB+RG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7Ci19OwotCi1jbGFz
cyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNr
ZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEb21haW5CYWNrZW5kRGlz
cGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgRG9tYWluQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyKik7Ci0gICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3Ry
aW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkgZmluYWw7Ci1wcml2YXRl
OgotICAgIHZvaWQgQ29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4m
JiBwYXJhbWV0ZXJzKTsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKLXB1YmxpYzoKLSAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlRG9t
YWluQmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVE
aXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQotcHJpdmF0ZToKLSAgICBBbHRlcm5h
dGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciogbV9hbHRlcm5hdGVEaXNwYXRjaGVyIHsgbnVsbHB0
ciB9OwotI2VuZGlmCi1wcml2YXRlOgotICAgIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKEJhY2tl
bmREaXNwYXRjaGVyJiwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgRG9t
YWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50IHsgbnVsbHB0ciB9OwotfTsKLQot
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0
Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJsZVR5cGVzLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8
d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKLSNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJz
LmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLURvbWFpbkJhY2tlbmREaXNw
YXRjaGVySGFuZGxlcjo6fkRvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQotCi1S
ZWY8RG9tYWluQmFja2VuZERpc3BhdGNoZXI+IERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpjcmVh
dGUoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBEb21haW5CYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXIqIGFnZW50KQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERvbWFp
bkJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOwotfQotCi1Eb21h
aW5CYWNrZW5kRGlzcGF0Y2hlcjo6RG9tYWluQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3Bh
dGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIq
IGFnZW50KQotICAgIDogU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3Bh
dGNoZXIpCi0gICAgLCBtX2FnZW50KGFnZW50KQotewotICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbigiRG9tYWluIl9zLCB0aGlzKTsKLX0KLQotdm9p
ZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0
IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCi17Ci0gICAgUmVm
PERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKLQotICAgIFJlZlB0cjxK
U09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMi
X3MsIHBhcmFtZXRlcnMpOwotCi0gICAgaWYgKG1ldGhvZCA9PSAiQ29tbWFuZCIpCi0gICAgICAg
IENvbW1hbmQocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKLSAgICBlbHNlCi0gICAg
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3Bh
dGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBm
b3VuZCIpOwotfQotCi12b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcg
cmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQotewotI2lmIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIp
IHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5Db21tYW5kKHJlcXVlc3RJZCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIEVycm9yU3RyaW5nIGVycm9yOwot
ICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0g
ICAgbV9hZ2VudC0+Q29tbWFuZChlcnJvcik7Ci0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQot
ICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZN
b3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBX
VEZNb3ZlKGVycm9yKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5k
IEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
RnJvbnRlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
ZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2Jq
ZWN0cy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBGcm9udGVuZFJv
dXRlcjsKLQotY2xhc3MgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVyIHsKLSAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBEb21haW5Gcm9udGVuZERpc3BhdGNoZXIoRnJv
bnRlbmRSb3V0ZXImIGZyb250ZW5kUm91dGVyKSA6IG1fZnJvbnRlbmRSb3V0ZXIoZnJvbnRlbmRS
b3V0ZXIpIHsgfQotICAgIHZvaWQgRXZlbnQoKTsKLXByaXZhdGU6Ci0gICAgRnJvbnRlbmRSb3V0
ZXImIG1fZnJvbnRlbmRSb3V0ZXI7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMj
IyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0
RnJvbnRlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5h
bWVzcGFjZSBJbnNwZWN0b3IgewotCi12b2lkIERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcjo6RXZl
bnQoKQotewotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21h
aW4uRXZlbnQiX3MpOwotCi0gICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3Nh
Z2UtPnRvSlNPTlN0cmluZygpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMj
IyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBkb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4K
LQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0K
LQotCi0KLQotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLQotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLW5h
bWVzcGFjZSBQcm90b2NvbCB7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3Rz
LmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJsZVR5cGVz
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5o
PgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQotQHByb3RvY29sIFRlc3RQcm90b2NvbERv
bWFpbkRvbWFpbkhhbmRsZXI7Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLWNsYXNzIE9i
akNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5h
dGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
Ci1wdWJsaWM6Ci0gICAgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyKGlkPFRl
c3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhh
bmRsZXI7IH0KLSAgICB2b2lkIENvbW1hbmQobG9uZyByZXF1ZXN0SWQpIGZpbmFsOwotcHJpdmF0
ZToKLSAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4+IG1f
ZGVsZWdhdGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVz
dFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xJ
bnRlcm5hbC5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2lu
Y2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi12b2lk
IE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVl
c3RJZCkKLXsKLSAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0
b3IoQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgewotICAgICAg
ICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFj
a2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi5Db21tYW5kJyB3YXMgbm90
IGZvdW5kIl9zKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJv
cnMoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBe
KE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQ
cm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBl
cnJvcik7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7
Ci0gICAgfTsKLQotICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57Ci0gICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRl
KCksIGZhbHNlKTsKLSAgICB9OwotCi0gICAgW21fZGVsZWdhdGUgQ29tbWFuZFdpdGhFcnJvckNh
bGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107Ci19
Ci0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xD
b25maWd1cmF0aW9uLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4t
ZGVidWdnYWJsZVR5cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgotCi1fX2F0dHJp
YnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbiA6IE5TT2JqZWN0Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluLCBz
ZXR0ZXI9c2V0RG9tYWluSGFuZGxlcjopIGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRs
ZXI+IGRvbWFpbkhhbmRsZXI7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFRlc3RQ
cm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqZG9tYWluRXZlbnREaXNwYXRjaGVy
OwotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90
b2NvbENvbmZpZ3VyYXRpb24uaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIK
LSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KLSNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW1w
b3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLQotdXNp
bmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENv
bmZpZ3VyYXRpb24KLXsKLSAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250
cm9sbGVyOwotICAgIGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IF9kb21haW5I
YW5kbGVyOwotICAgIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqX2Rv
bWFpbkV2ZW50RGlzcGF0Y2hlcjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJv
bGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCi17Ci0gICAg
c2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7
Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIpOwotICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsK
LSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgW19kb21haW5I
YW5kbGVyIHJlbGVhc2VdOwotICAgIFtfZG9tYWluRXZlbnREaXNwYXRjaGVyIHJlbGVhc2VdOwot
ICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAodm9pZClzZXREb21haW5IYW5kbGVyOihpZDxU
ZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiloYW5kbGVyCi17Ci0gICAgaWYgKGhhbmRs
ZXIgPT0gX2RvbWFpbkhhbmRsZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIFtfZG9tYWluSGFu
ZGxlciByZWxlYXNlXTsKLSAgICBfZG9tYWluSGFuZGxlciA9IFtoYW5kbGVyIHJldGFpbl07Ci0K
LSAgICBhdXRvIGFsdGVybmF0ZURpc3BhdGNoZXIgPSBtYWtlVW5pcXVlPE9iakNJbnNwZWN0b3JE
b21haW5CYWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7Ci0gICAgYXV0byBhbHRlcm5hdGVBZ2Vu
dCA9IG1ha2VVbmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8RG9tYWluQmFja2VuZERp
c3BhdGNoZXIsIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyPj4oIkRvbWFpbiJfcywg
Kl9jb250cm9sbGVyLCBXVEZNb3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIpKTsKLSAgICBfY29udHJv
bGxlci0+YXBwZW5kRXh0cmFBZ2VudChXVEZNb3ZlKGFsdGVybmF0ZUFnZW50KSk7Ci19Ci0KLS0g
KGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+KWRvbWFpbkhhbmRsZXIKLXsKLSAg
ICByZXR1cm4gX2RvbWFpbkhhbmRsZXI7Ci19Ci0KLS0gKFRlc3RQcm90b2NvbERvbWFpbkRvbWFp
bkV2ZW50RGlzcGF0Y2hlciAqKWRvbWFpbkV2ZW50RGlzcGF0Y2hlcgotewotICAgIGlmICghX2Rv
bWFpbkV2ZW50RGlzcGF0Y2hlcikKLSAgICAgICAgX2RvbWFpbkV2ZW50RGlzcGF0Y2hlciA9IFtb
VGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyIGFsbG9jXSBpbml0V2l0aENv
bnRyb2xsZXI6X2NvbnRyb2xsZXJdOwotICAgIHJldHVybiBfZG9tYWluRXZlbnREaXNwYXRjaGVy
OwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9u
Lm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQg
IlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5oIgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNl
IEluc3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2
ZW50RGlzcGF0Y2hlcgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2Nv
bnRyb2xsZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21l
bnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3Vw
ZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VS
VChjb250cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJu
IHNlbGY7Ci19Ci0KLS0gKHZvaWQpRXZlbnQKLXsKLSAgICBjb25zdCBGcm9udGVuZFJvdXRlciYg
cm91dGVyID0gX2NvbnRyb2xsZXItPmZyb250ZW5kUm91dGVyKCk7Ci0KLSAgICBSZWY8SlNPTjo6
T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1l
c3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9zKTsKLSAgICByb3V0
ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Ci19Ci0KLUBlbmQKLQot
Ci0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotCi0j
aW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+Ci0KLQotCi0KLXR5
cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbFBsYXRmb3JtKSB7Ci0gICAgVGVz
dFByb3RvY29sUGxhdGZvcm1BbGwsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljLAot
ICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFj
T1MsCi19OwotCi0KLQotCi0KLUBwcm90b2NvbCBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5k
bGVyIDxOU09iamVjdD4KLUBvcHRpb25hbAotLSAodm9pZClDb21tYW5kV2l0aEVycm9yQ2FsbGJh
Y2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFj
azoodm9pZCheKSh2b2lkKSlzdWNjZXNzQ2FsbGJhY2s7Ci1AZW5kCi0KLV9fYXR0cmlidXRlX18o
KHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xEb21haW5E
b21haW5FdmVudERpc3BhdGNoZXIgOiBOU09iamVjdAotLSAodm9pZClFdmVudDsKLUBlbmQKLQot
Ci0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmpl
Y3RzLmg+Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbEludGVybmFsLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBkb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0
UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVn
bWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5o
PgotCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAo
UHJpdmF0ZSkKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEluc3BlY3Rvcjo6
QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyOwotQGVuZAotCi0KLSMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBkb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0IDxX
ZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+Ci0KLW5hbWVzcGFjZSBJ
bnNwZWN0b3IgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+Ci1PcHRpb25hbDxP
YmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKLQot
aW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFBsYXRmb3JtIHZhbHVl
KQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1B
bGw6Ci0gICAgICAgIHJldHVybiAiYWxsIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZv
cm1HZW5lcmljOgotICAgICAgICByZXR1cm4gImdlbmVyaWMiX3M7Ci0gICAgY2FzZSBUZXN0UHJv
dG9jb2xQbGF0Zm9ybUlPUzoKLSAgICAgICAgcmV0dXJuICJpb3MiX3M7Ci0gICAgY2FzZSBUZXN0
UHJvdG9jb2xQbGF0Zm9ybU1hY09TOgotICAgICAgICByZXR1cm4gIm1hY29zIl9zOwotICAgIH0K
LX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFBsYXRmb3JtPiBm
cm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUg
PT0gImFsbCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDsKLSAgICBp
ZiAodmFsdWUgPT0gImdlbmVyaWMiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZv
cm1HZW5lcmljOwotICAgIGlmICh2YWx1ZSA9PSAiaW9zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQ
cm90b2NvbFBsYXRmb3JtSU9TOwotICAgIGlmICh2YWx1ZSA9PSAibWFjb3MiKQotICAgICAgICBy
ZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlu
LWRlYnVnZ2FibGVUeXBlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotCi0jaW1w
b3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIK
LSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0K
LXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotCi0KLQotCi0jIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sVHlwZXMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVi
dWdnYWJsZVR5cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9j
b2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbXBv
cnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQot
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZG9t
YWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tcmVzdWx0
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMv
ZXhwZWN0ZWQvZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBl
Lmpzb24tcmVzdWx0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzBmMjRiNWMzNS4u
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWlu
LWRlYnVnZ2FibGVUeXBlLmpzb24tcmVzdWx0CisrKyAvZGV2L251bGwKQEAgLTEsMTA2MyArMCww
IEBACi0jIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9t
YWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotLy8gRG9tYWluCi1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJE
b21haW4iLCBudWxsKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJEb21haW4u
Q29tbWFuZCIsIFsicGFnZSIsICJ3b3JrZXIiXSwgW10sIFtdKTsKLUluc3BlY3RvckJhY2tlbmQu
cmVnaXN0ZXJFdmVudCgiRG9tYWluLkV2ZW50IiwgbnVsbCwgW10pOwotSW5zcGVjdG9yQmFja2Vu
ZC5yZWdpc3RlckRvbWFpbkRpc3BhdGNoZXIgPSBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRGlz
cGF0Y2hlci5iaW5kKEluc3BlY3RvckJhY2tlbmQsICJEb21haW4iKTsKLUluc3BlY3RvckJhY2tl
bmQuYWN0aXZhdGVEb21haW4oIkRvbWFpbiIsIFsicGFnZSJdKTsKLSMjIyBFbmQgRmlsZTogSW5z
cGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRl
QmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBk
b21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQot
I2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi0jaW5jbHVkZSAi
VGVzdFByb3RvY29sVHlwZXMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZy
b250ZW5kUm91dGVyLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBBbHRlcm5h
dGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0
Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmRE
aXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQotICAgIEJhY2tlbmREaXNwYXRjaGVy
KiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIu
Z2V0KCk7IH0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tl
bmREaXNwYXRjaGVyOwotfTsKLQotCi1jbGFzcyBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0
Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAg
dmlydHVhbCB+QWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIoKSB7IH0KLSAgICB2aXJ0
dWFsIHZvaWQgQ29tbWFuZChsb25nIGNhbGxJZCkgPSAwOwotfTsKLQotfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKLSMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVi
dWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQot
dHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVS
TkFURV9ESVNQQVRDSEVSUykKLWNsYXNzIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVy
OwotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi1j
bGFzcyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewotcHVibGljOgotICAgIHZpcnR1
YWwgdm9pZCBDb21tYW5kKEVycm9yU3RyaW5nJikgPSAwOwotcHJvdGVjdGVkOgotICAgIHZpcnR1
YWwgfkRvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOwotfTsKLQotY2xhc3MgRG9tYWlu
QmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3Bh
dGNoZXIgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8RG9tYWluQmFja2VuZERpc3BhdGNoZXI+
IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxl
ciopOwotICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0
aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOwotcHJpdmF0ZToKLSAgICB2
b2lkIENvbW1hbmQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1l
dGVycyk7Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi1wdWJs
aWM6Ci0gICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZURvbWFpbkJhY2tl
bmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hl
ciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KLXByaXZhdGU6Ci0gICAgQWx0ZXJuYXRlRG9tYWlu
QmFja2VuZERpc3BhdGNoZXIqIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciB7IG51bGxwdHIgfTsKLSNl
bmRpZgotcHJpdmF0ZToKLSAgICBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0
Y2hlciYsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIERvbWFpbkJhY2tl
bmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2VudCB7IG51bGxwdHIgfTsKLX07Ci0KLX0gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgK
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWlu
LWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0
Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91
dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJE
ZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNpZiBFTkFCTEUo
SU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSNpbmNsdWRlICJUZXN0QWx0ZXJuYXRl
QmFja2VuZERpc3BhdGNoZXJzLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0K
LURvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6fkRvbWFpbkJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlcigpIHsgfQotCi1SZWY8RG9tYWluQmFja2VuZERpc3BhdGNoZXI+IERvbWFpbkJhY2tl
bmREaXNwYXRjaGVyOjpjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVy
LCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQotewotICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBh
Z2VudCkpOwotfQotCi1Eb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6RG9tYWluQmFja2VuZERpc3Bh
dGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBEb21haW5CYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQotICAgIDogU3VwcGxlbWVudGFsQmFja2VuZERpc3Bh
dGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCi0gICAgLCBtX2FnZW50KGFnZW50KQotewotICAgIG1f
YmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbigiRG9tYWluIl9z
LCB0aGlzKTsKLX0KLQotdm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9u
ZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1l
c3NhZ2UpCi17Ci0gICAgUmVmPERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlz
KTsKLQotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+
Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRlcnMpOwotCi0gICAgaWYgKG1ldGhvZCA9PSAi
Q29tbWFuZCIpCi0gICAgICAgIENvbW1hbmQocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMp
KTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29s
RXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi4iICsgbWV0
aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOwotfQotCi12b2lkIERvbWFpbkJhY2tlbmREaXNwYXRj
aGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQotewot
I2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotICAgIGlmIChtX2Fs
dGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5Db21t
YW5kKHJlcXVlc3RJZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIEVy
cm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9i
amVjdDo6Y3JlYXRlKCk7Ci0gICAgbV9hZ2VudC0+Q29tbWFuZChlcnJvcik7Ci0KLSAgICBpZiAo
IWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9u
c2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAg
IG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNo
ZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMj
IyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVn
Z2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5j
bHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
LQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEZyb250ZW5kUm91dGVyOwotCi1jbGFz
cyBEb21haW5Gcm9udGVuZERpc3BhdGNoZXIgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwotcHVibGljOgotICAgIERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcihGcm9udGVuZFJvdXRlciYg
ZnJvbnRlbmRSb3V0ZXIpIDogbV9mcm9udGVuZFJvdXRlcihmcm9udGVuZFJvdXRlcikgeyB9Ci0g
ICAgdm9pZCBFdmVudCgpOwotcHJpdmF0ZToKLSAgICBGcm9udGVuZFJvdXRlciYgbV9mcm9udGVu
ZFJvdXRlcjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBU
ZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmRE
aXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4t
dGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdm9pZCBEb21haW5Gcm9udGVuZERp
c3BhdGNoZXI6OkV2ZW50KCkKLXsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9
IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0
aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9zKTsKLQotICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2
ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2Fi
bGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2Nv
bFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFtZXNwYWNlIEluc3Bl
Y3RvciB7Ci0KLQotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotCi0KLQotCi0KLQotfSAv
LyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sT2JqZWN0cy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4t
dGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFs
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9y
IHsKLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29s
Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bE9iamVjdHMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0
Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRU
eXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWlu
UHRyLmg+Ci0KLUBwcm90b2NvbCBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyOwotCi1u
YW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi1jbGFzcyBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2Vu
ZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNo
ZXIgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIE9iakNJbnNw
ZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5I
YW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9Ci0gICAgdm9pZCBDb21t
YW5kKGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKLXByaXZhdGU6Ci0gICAgUmV0YWluUHRyPGlkPFRl
c3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwotfTsKLQotfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERp
c3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRj
aGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRU
eXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAi
VGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9j
b2xJbnRlcm5hbC5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgot
I2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi12
b2lkIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJl
cXVlc3RJZCkKLXsKLSAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2Vs
ZWN0b3IoQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgewotICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwg
QmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi5Db21tYW5kJyB3YXMg
bm90IGZvdW5kIl9zKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdF
cnJvcnMoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlkIGVycm9yQ2FsbGJhY2sg
PSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBv
cnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9y
LCBlcnJvcik7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3Jz
KCk7Ci0gICAgfTsKLQotICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57Ci0gICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCksIGZhbHNlKTsKLSAgICB9OwotCi0gICAgW21fZGVsZWdhdGUgQ29tbWFuZFdpdGhFcnJv
ckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107
Ci19Ci0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xDb25maWd1cmF0aW9uLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21h
aW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0
b3IvVGVzdFByb3RvY29sLmg+Ci0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0
IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKLUBw
cm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4sIHNldHRlcj1zZXREb21haW5IYW5kbGVyOikgaWQ8
VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4gZG9tYWluSGFuZGxlcjsKLUBwcm9wZXJ0
eSAobm9uYXRvbWljLCByZWFkb25seSkgVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNw
YXRjaGVyICpkb21haW5FdmVudERpc3BhdGNoZXI7Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24ubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21h
aW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2xDb25maWd1cmF0aW9uLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0j
aW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+Ci0jaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2ltcG9y
dCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0KLXVzaW5n
IG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25m
aWd1cmF0aW9uCi17Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJv
bGxlcjsKLSAgICBpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiBfZG9tYWluSGFu
ZGxlcjsKLSAgICBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKl9kb21h
aW5FdmVudERpc3BhdGNoZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xs
ZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgotewotICAgIHNl
bGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwot
ICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0g
ICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAgIFtfZG9tYWluSGFu
ZGxlciByZWxlYXNlXTsKLSAgICBbX2RvbWFpbkV2ZW50RGlzcGF0Y2hlciByZWxlYXNlXTsKLSAg
ICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLS0gKHZvaWQpc2V0RG9tYWluSGFuZGxlcjooaWQ8VGVz
dFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4paGFuZGxlcgotewotICAgIGlmIChoYW5kbGVy
ID09IF9kb21haW5IYW5kbGVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBbX2RvbWFpbkhhbmRs
ZXIgcmVsZWFzZV07Ci0gICAgX2RvbWFpbkhhbmRsZXIgPSBbaGFuZGxlciByZXRhaW5dOwotCi0g
ICAgYXV0byBhbHRlcm5hdGVEaXNwYXRjaGVyID0gbWFrZVVuaXF1ZTxPYmpDSW5zcGVjdG9yRG9t
YWluQmFja2VuZERpc3BhdGNoZXI+KGhhbmRsZXIpOwotICAgIGF1dG8gYWx0ZXJuYXRlQWdlbnQg
PSBtYWtlVW5pcXVlPEFsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50PERvbWFpbkJhY2tlbmREaXNw
YXRjaGVyLCBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4+KCJEb21haW4iX3MsICpf
Y29udHJvbGxlciwgV1RGTW92ZShhbHRlcm5hdGVEaXNwYXRjaGVyKSk7Ci0gICAgX2NvbnRyb2xs
ZXItPmFwcGVuZEV4dHJhQWdlbnQoV1RGTW92ZShhbHRlcm5hdGVBZ2VudCkpOwotfQotCi0tIChp
ZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPilkb21haW5IYW5kbGVyCi17Ci0gICAg
cmV0dXJuIF9kb21haW5IYW5kbGVyOwotfQotCi0tIChUZXN0UHJvdG9jb2xEb21haW5Eb21haW5F
dmVudERpc3BhdGNoZXIgKilkb21haW5FdmVudERpc3BhdGNoZXIKLXsKLSAgICBpZiAoIV9kb21h
aW5FdmVudERpc3BhdGNoZXIpCi0gICAgICAgIF9kb21haW5FdmVudERpc3BhdGNoZXIgPSBbW1Rl
c3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciBhbGxvY10gaW5pdFdpdGhDb250
cm9sbGVyOl9jb250cm9sbGVyXTsKLSAgICByZXR1cm4gX2RvbWFpbkV2ZW50RGlzcGF0Y2hlcjsK
LX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5t
bQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5n
LWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBv
cnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8d3RmL0pTT05WYWx1
ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9uIFRl
c3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlcgotewotICAgIEF1Z21lbnRhYmxl
SW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlp
bml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJv
bGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAg
ICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9
IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpRXZlbnQKLXsKLSAg
ICBjb25zdCBGcm9udGVuZFJvdXRlciYgcm91dGVyID0gX2NvbnRyb2xsZXItPmZyb250ZW5kUm91
dGVyKCk7Ci0KLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVj
dDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9t
YWluLkV2ZW50Il9zKTsKLSAgICByb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05T
dHJpbmcoKSk7Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50
RGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9t
YWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLSNpbXBvcnQg
PFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KLQotCi0KLQotdHlwZWRlZiBO
U19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sUGxhdGZvcm0pIHsKLSAgICBUZXN0UHJvdG9j
b2xQbGF0Zm9ybUFsbCwKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWMsCi0gICAgVGVz
dFByb3RvY29sUGxhdGZvcm1JT1MsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUywKLX07
Ci0KLQotCi0KLQotQHByb3RvY29sIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXIgPE5T
T2JqZWN0PgotQG9wdGlvbmFsCi0tICh2b2lkKUNvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazoodm9p
ZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lk
KF4pKHZvaWQpKXN1Y2Nlc3NDYWxsYmFjazsKLUBlbmQKLQotX19hdHRyaWJ1dGVfXygodmlzaWJp
bGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2
ZW50RGlzcGF0Y2hlciA6IE5TT2JqZWN0Ci0tICh2b2lkKUV2ZW50OwotQGVuZAotCi0KLSNpbXBv
cnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4K
LQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sSW50ZXJuYWwuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFp
bi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2Nv
bC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKLSNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9y
dCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xEb21haW5Eb21h
aW5FdmVudERpc3BhdGNoZXIgKFByaXZhdGUpCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250
cm9sbGVyOihJbnNwZWN0b3I6OkF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJv
bGxlcjsKLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLQot
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWlu
LWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3Iv
UldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Igewot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+Ci1PcHRpb25hbDxPYmpDRW51bVR5cGU+
IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKLQotaW5saW5lIFN0cmlu
ZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFBsYXRmb3JtIHZhbHVlKQotewotICAgIHN3
aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1BbGw6Ci0gICAgICAg
IHJldHVybiAiYWxsIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOgot
ICAgICAgICByZXR1cm4gImdlbmVyaWMiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9y
bUlPUzoKLSAgICAgICAgcmV0dXJuICJpb3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0
Zm9ybU1hY09TOgotICAgICAgICByZXR1cm4gIm1hY29zIl9zOwotICAgIH0KLX0KLQotdGVtcGxh
dGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFBsYXRmb3JtPiBmcm9tUHJvdG9jb2xT
dHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gImFsbCIpCi0g
ICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDsKLSAgICBpZiAodmFsdWUgPT0g
ImdlbmVyaWMiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOwot
ICAgIGlmICh2YWx1ZSA9PSAiaW9zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRm
b3JtSU9TOwotICAgIGlmICh2YWx1ZSA9PSAibWFjb3MiKQotICAgICAgICByZXR1cm4gVGVzdFBy
b3RvY29sUGxhdGZvcm1NYWNPUzsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi19IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
Lm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGUt
bWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29s
VHlwZVBhcnNlci5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVj
dFByaXZhdGUuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0KLQotCi0KLSMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRl
c3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucy5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZh
dGUuaD4KLSNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVl
cy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLSMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2RvbWFpbi10YXJnZXRUeXBlcy5q
c29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9nZW5lcmljL2V4cGVjdGVkL2RvbWFpbi10YXJnZXRUeXBlcy5qc29uLXJlc3VsdApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjg5NDhhMmY3NDcuLjAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVj
dGVkL2RvbWFpbi10YXJnZXRUeXBlcy5qc29uLXJlc3VsdAorKysgL2Rldi9udWxsCkBAIC0xLDEw
NjMgKzAsMCBAQAotIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlcy5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLS8vIERvbWFpbgot
SW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiRG9tYWluIiwgWyJwYWdlIl0pOwotSW5z
cGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIkRvbWFpbi5Db21tYW5kIiwgWyJwYWdlIl0s
IFtdLCBbXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnQoIkRvbWFpbi5FdmVudCIs
IFsicGFnZSJdLCBbXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluRGlzcGF0Y2hl
ciA9IEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEaXNwYXRjaGVyLmJpbmQoSW5zcGVjdG9yQmFj
a2VuZCwgIkRvbWFpbiIpOwotSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiRG9tYWlu
IiwgbnVsbCk7Ci0jIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVzLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNp
ZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQotI2luY2x1ZGUgIlRl
c3RQcm90b2NvbFR5cGVzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9u
dGVuZFJvdXRlci5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgQWx0ZXJuYXRl
QmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNo
ZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlz
cGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KLSAgICBCYWNrZW5kRGlzcGF0Y2hlciog
YmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdl
dCgpOyB9Ci1wcml2YXRlOgotICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5k
RGlzcGF0Y2hlcjsKLX07Ci0KLQotY2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNo
ZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZp
cnR1YWwgfkFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKCkgeyB9Ci0gICAgdmlydHVh
bCB2b2lkIENvbW1hbmQobG9uZyBjYWxsSWQpID0gMDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgotCi0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCi0jIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQot
bmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCi0j
aWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi1jbGFzcyBBbHRlcm5h
dGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjsKLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKLQotY2xhc3MgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChFcnJvclN0cmluZyYpID0g
MDsKLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIH5Eb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIoKTsKLX07Ci0KLWNsYXNzIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGlj
IFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVm
PERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBEb21h
aW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVx
dWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdl
KSBmaW5hbDsKLXByaXZhdGU6Ci0gICAgdm9pZCBDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQotcHVibGljOgotICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0
Y2hlcihBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hl
cikgeyBtX2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9Ci1wcml2
YXRlOgotICAgIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKiBtX2FsdGVybmF0ZURp
c3BhdGNoZXIgeyBudWxscHRyIH07Ci0jZW5kaWYKLXByaXZhdGU6Ci0gICAgRG9tYWluQmFja2Vu
ZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXIqKTsKLSAgICBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQgeyBu
dWxscHRyIH07Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTog
VGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERp
c3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10
YXJnZXRUeXBlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJz
LmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5o
PgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJv
eWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jaWYgRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tl
bmREaXNwYXRjaGVycy5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1Eb21h
aW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5Eb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIoKSB7IH0KLQotUmVmPERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBEb21haW5CYWNrZW5kRGlz
cGF0Y2hlcjo6Y3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgRG9t
YWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKLXsKLSAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQp
KTsKLX0KLQotRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkRvbWFpbkJhY2tlbmREaXNwYXRjaGVy
KEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgRG9tYWluQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyKiBhZ2VudCkKLSAgICA6IFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVy
KGJhY2tlbmREaXNwYXRjaGVyKQotICAgICwgbV9hZ2VudChhZ2VudCkKLXsKLSAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oIkRvbWFpbiJfcywgdGhp
cyk7Ci19Ci0KLXZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVx
dWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdl
KQotewotICAgIFJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7Ci0K
LSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOwotICAgIG1lc3NhZ2UtPmdldE9i
amVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsKLQotICAgIGlmIChtZXRob2QgPT0gIkNvbW1h
bmQiKQotICAgICAgICBDb21tYW5kKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7Ci0g
ICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9y
KEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uIiArIG1ldGhvZCAr
ICInIHdhcyBub3QgZm91bmQiKTsKLX0KLQotdm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6
Q29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKLXsKLSNpZiBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSAgICBpZiAobV9hbHRlcm5h
dGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+Q29tbWFuZChy
ZXF1ZXN0SWQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBFcnJvclN0
cmluZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOwotICAgIG1fYWdlbnQtPkNvbW1hbmQoZXJyb3IpOwotCi0gICAgaWYgKCFlcnJv
ci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJl
cXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpT
ZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFBy
b3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBG
cm9udGVuZFJvdXRlcjsKLQotY2xhc3MgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVyIHsKLSAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBEb21haW5Gcm9udGVuZERpc3Bh
dGNoZXIoRnJvbnRlbmRSb3V0ZXImIGZyb250ZW5kUm91dGVyKSA6IG1fZnJvbnRlbmRSb3V0ZXIo
ZnJvbnRlbmRSb3V0ZXIpIHsgfQotICAgIHZvaWQgRXZlbnQoKTsKLXByaXZhdGU6Ci0gICAgRnJv
bnRlbmRSb3V0ZXImIG1fZnJvbnRlbmRSb3V0ZXI7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
LQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXZvaWQgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVy
OjpFdmVudCgpCi17Ci0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywg
IkRvbWFpbi5FdmVudCJfcyk7Ci0KLSAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChqc29u
TWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
LQotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+
Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQot
Ci0KLQotCi0KLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRl
c3RQcm90b2NvbE9iamVjdHMuaCIKLQotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLW5hbWVz
cGFjZSBQcm90b2NvbCB7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNw
cAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZXMuanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW5j
bHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi1AcHJvdG9jb2wgVGVzdFByb3RvY29sRG9tYWluRG9t
YWluSGFuZGxlcjsKLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotY2xhc3MgT2JqQ0luc3Bl
Y3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZURvbWFp
bkJhY2tlbmREaXNwYXRjaGVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1Ymxp
YzoKLSAgICBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3Rv
Y29sRG9tYWluRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsg
fQotICAgIHZvaWQgQ29tbWFuZChsb25nIHJlcXVlc3RJZCkgZmluYWw7Ci1wcml2YXRlOgotICAg
IFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0
ZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBkb21haW4tdGFyZ2V0VHlwZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJh
Y2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIK
LSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbmNsdWRlIDx3dGYv
SlNPTlZhbHVlcy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdm9pZCBPYmpDSW5zcGVj
dG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9uZyByZXF1ZXN0SWQpCi17Ci0g
ICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKENvbW1hbmRX
aXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsKLSAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRj
aGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uQ29tbWFuZCcgd2FzIG5vdCBmb3VuZCJfcyk7
Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAq
ZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJv
cihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwotICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgIH07Ci0K
LSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigp
LT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7
Ci0gICAgfTsKLQotICAgIFttX2RlbGVnYXRlIENvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazplcnJv
ckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOwotfQotCi0KLX0gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmRE
aXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
bi5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVz
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9y
dCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmls
aXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6
IE5TT2JqZWN0Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluLCBzZXR0ZXI9c2V0RG9tYWlu
SGFuZGxlcjopIGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IGRvbWFpbkhhbmRs
ZXI7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFRlc3RQcm90b2NvbERvbWFpbkRv
bWFpbkV2ZW50RGlzcGF0Y2hlciAqZG9tYWluRXZlbnREaXNwYXRjaGVyOwotQGVuZAotCi0KLSMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5o
IgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2ltcG9ydCAiVGVzdFByb3Rv
Y29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5h
dGVEaXNwYXRjaGFibGVBZ2VudC5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFi
bGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVj
dG9yOwotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgotewotICAg
IEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci0gICAgaWQ8VGVz
dFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4gX2RvbWFpbkhhbmRsZXI7Ci0gICAgVGVzdFBy
b3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyICpfZG9tYWluRXZlbnREaXNwYXRjaGVy
OwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUlu
c3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRd
OwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJv
bGxlcik7Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwot
fQotCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBbX2RvbWFpbkhhbmRsZXIgcmVsZWFzZV07Ci0g
ICAgW19kb21haW5FdmVudERpc3BhdGNoZXIgcmVsZWFzZV07Ci0gICAgW3N1cGVyIGRlYWxsb2Nd
OwotfQotCi0tICh2b2lkKXNldERvbWFpbkhhbmRsZXI6KGlkPFRlc3RQcm90b2NvbERvbWFpbkRv
bWFpbkhhbmRsZXI+KWhhbmRsZXIKLXsKLSAgICBpZiAoaGFuZGxlciA9PSBfZG9tYWluSGFuZGxl
cikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgW19kb21haW5IYW5kbGVyIHJlbGVhc2VdOwotICAg
IF9kb21haW5IYW5kbGVyID0gW2hhbmRsZXIgcmV0YWluXTsKLQotICAgIGF1dG8gYWx0ZXJuYXRl
RGlzcGF0Y2hlciA9IG1ha2VVbmlxdWU8T2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRj
aGVyPihoYW5kbGVyKTsKLSAgICBhdXRvIGFsdGVybmF0ZUFnZW50ID0gbWFrZVVuaXF1ZTxBbHRl
cm5hdGVEaXNwYXRjaGFibGVBZ2VudDxEb21haW5CYWNrZW5kRGlzcGF0Y2hlciwgQWx0ZXJuYXRl
RG9tYWluQmFja2VuZERpc3BhdGNoZXI+PigiRG9tYWluIl9zLCAqX2NvbnRyb2xsZXIsIFdURk1v
dmUoYWx0ZXJuYXRlRGlzcGF0Y2hlcikpOwotICAgIF9jb250cm9sbGVyLT5hcHBlbmRFeHRyYUFn
ZW50KFdURk1vdmUoYWx0ZXJuYXRlQWdlbnQpKTsKLX0KLQotLSAoaWQ8VGVzdFByb3RvY29sRG9t
YWluRG9tYWluSGFuZGxlcj4pZG9tYWluSGFuZGxlcgotewotICAgIHJldHVybiBfZG9tYWluSGFu
ZGxlcjsKLX0KLQotLSAoVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyICop
ZG9tYWluRXZlbnREaXNwYXRjaGVyCi17Ci0gICAgaWYgKCFfZG9tYWluRXZlbnREaXNwYXRjaGVy
KQotICAgICAgICBfZG9tYWluRXZlbnREaXNwYXRjaGVyID0gW1tUZXN0UHJvdG9jb2xEb21haW5E
b21haW5FdmVudERpc3BhdGNoZXIgYWxsb2NdIGluaXRXaXRoQ29udHJvbGxlcjpfY29udHJvbGxl
cl07Ci0gICAgcmV0dXJuIF9kb21haW5FdmVudERpc3BhdGNoZXI7Ci19Ci0KLUBlbmQKLQotCi0j
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5o
IgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPHd0
Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1l
bnRhdGlvbiBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIKLXsKLSAgICBB
dWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotfQotCi0tIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xs
ZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2Vs
ZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2Nv
bnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKUV2
ZW50Ci17Ci0gICAgY29uc3QgRnJvbnRlbmRSb3V0ZXImIHJvdXRlciA9IF9jb250cm9sbGVyLT5m
cm9udGVuZFJvdXRlcigpOwotCi0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBK
U09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhv
ZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7Ci0gICAgcm91dGVyLnNlbmRFdmVudChqc29uTWVzc2Fn
ZS0+dG9KU09OU3RyaW5nKCkpOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wu
aAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlcy5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQg
PEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJv
dG9jb2xKU09OT2JqZWN0Lmg+Ci0KLQotCi0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRl
c3RQcm90b2NvbFBsYXRmb3JtKSB7Ci0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1BbGwsCi0gICAg
VGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9T
LAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1MsCi19OwotCi0KLQotCi0KLUBwcm90b2Nv
bCBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyIDxOU09iamVjdD4KLUBvcHRpb25hbAot
LSAodm9pZClDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9y
KSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKSh2b2lkKSlzdWNjZXNzQ2Fs
bGJhY2s7Ci1AZW5kCi0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQot
QGludGVyZmFjZSBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgOiBOU09i
amVjdAotLSAodm9pZClFdmVudDsKLUBlbmQKLQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJ
UHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+Ci0KLSMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZXMuanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0
UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCi0j
aW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4K
LSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sRG9t
YWluRG9tYWluRXZlbnREaXNwYXRjaGVyIChQcml2YXRlKQotLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoQ29udHJvbGxlcjooSW5zcGVjdG9yOjpBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIq
KWNvbnRyb2xsZXI7Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5h
bC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlcy5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbC5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJz
aW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgT2Jq
Q0VudW1UeXBlPgotT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29u
c3QgU3RyaW5nJiB2YWx1ZSk7Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0
UHJvdG9jb2xQbGF0Zm9ybSB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBjYXNl
IFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOgotICAgICAgICByZXR1cm4gImFsbCJfczsKLSAgICBj
YXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzoKLSAgICAgICAgcmV0dXJuICJnZW5lcmlj
Il9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1JT1M6Ci0gICAgICAgIHJldHVybiAi
aW9zIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzoKLSAgICAgICAgcmV0
dXJuICJtYWNvcyJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxU
ZXN0UHJvdG9jb2xQbGF0Zm9ybT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFs
dWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJhbGwiKQotICAgICAgICByZXR1cm4gVGVzdFByb3Rv
Y29sUGxhdGZvcm1BbGw7Ci0gICAgaWYgKHZhbHVlID09ICJnZW5lcmljIikKLSAgICAgICAgcmV0
dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzsKLSAgICBpZiAodmFsdWUgPT0gImlvcyIp
Ci0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzsKLSAgICBpZiAodmFsdWUg
PT0gIm1hY29zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M7Ci0g
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0K
LSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90
b2NvbFR5cGVQYXJzZXIuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05P
YmplY3RQcml2YXRlLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotCi0KLQot
Ci0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0j
aW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPFdlYkluc3Bl
Y3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0
aW9ucy5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIElu
c3BlY3RvcjsKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJp
Yy9leHBlY3RlZC9kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24tcmVzdWx0
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMv
ZXhwZWN0ZWQvZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uLXJlc3VsdApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmMwN2NiMTM0N2YuLjAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2V4cGVjdGVkL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbi1yZXN1bHQK
KysrIC9kZXYvbnVsbApAQCAtMSwxNDU1ICswLDAgQEAKLSMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0
b3JCYWNrZW5kQ29tbWFuZHMuanMKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBk
b21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotLy8gTmV0d29yazEKLUluc3BlY3RvckJhY2tlbmQu
cmVnaXN0ZXJEb21haW4oIk5ldHdvcmsxIiwgbnVsbCk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lz
dGVyQ29tbWFuZCgiTmV0d29yazEubG9hZFJlc291cmNlMSIsIG51bGwsIFtdLCBbXSk7Ci1JbnNw
ZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJOZXR3b3JrMSIsIG51bGwpOwotCi0vLyBOZXR3
b3JrMwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiTmV0d29yazMiLCBudWxsKTsK
LUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2Ux
IiwgbnVsbCwgW10sIFtdKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3
b3JrMy5sb2FkUmVzb3VyY2UyIiwgbnVsbCwgW10sIFtdKTsKLUluc3BlY3RvckJhY2tlbmQucmVn
aXN0ZXJDb21tYW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2UzIiwgbnVsbCwgW10sIFtdKTsKLUlu
c3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2U0Iiwg
bnVsbCwgW10sIFtdKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3Jr
My5sb2FkUmVzb3VyY2U1IiwgbnVsbCwgW10sIFtdKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0
ZXJDb21tYW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2U2IiwgbnVsbCwgW10sIFtdKTsKLUluc3Bl
Y3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2U3IiwgbnVs
bCwgW10sIFtdKTsKLUluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIk5ldHdvcmszIiwg
bnVsbCk7Ci0jIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXpl
cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFn
bWEgb25jZQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0K
LSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNs
YXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2b2lkIHNldEJh
Y2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7
IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9Ci0gICAgQmFja2Vu
ZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5k
RGlzcGF0Y2hlci5nZXQoKTsgfQotcHJpdmF0ZToKLSAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNo
ZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Ci19OwotCi0KLWNsYXNzIEFsdGVybmF0ZU5ldHdvcmsx
QmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewot
cHVibGljOgotICAgIHZpcnR1YWwgfkFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIo
KSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMShsb25nIGNhbGxJZCkgPSAwOwot
fTsKLWNsYXNzIEFsdGVybmF0ZU5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0
ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZpcnR1YWwgfkFsdGVybmF0
ZU5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJl
c291cmNlMShsb25nIGNhbGxJZCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2Uy
KGxvbmcgY2FsbElkKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTMobG9uZyBj
YWxsSWQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlNChsb25nIGNhbGxJZCkg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2U1KGxvbmcgY2FsbElkKSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTYobG9uZyBjYWxsSWQpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgbG9hZFJlc291cmNlNyhsb25nIGNhbGxJZCkgPSAwOwotfTsKLQotfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKLSMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVy
cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNp
emVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3By
YWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXR5cGVkZWYg
U3RyaW5nIEVycm9yU3RyaW5nOwotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCi1jbGFzcyBBbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOwotY2xh
c3MgQWx0ZXJuYXRlTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjsKLSNlbmRpZiAvLyBFTkFCTEUo
SU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQotY2xhc3MgTmV0d29yazFCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIgewotcHVibGljOgotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3Vy
Y2UxKEVycm9yU3RyaW5nJikgPSAwOwotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgfk5ldHdvcmsx
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7Ci19OwotCi1jbGFzcyBOZXR3b3JrM0JhY2tlbmRE
aXNwYXRjaGVySGFuZGxlciB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJj
ZTEoRXJyb3JTdHJpbmcmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTIoRXJy
b3JTdHJpbmcmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTMoRXJyb3JTdHJp
bmcmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTQoRXJyb3JTdHJpbmcmKSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTUoRXJyb3JTdHJpbmcmKSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTYoRXJyb3JTdHJpbmcmKSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIGxvYWRSZXNvdXJjZTcoRXJyb3JTdHJpbmcmKSA9IDA7Ci1wcm90ZWN0ZWQ6Ci0g
ICAgdmlydHVhbCB+TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKLX07Ci0KLWNs
YXNzIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFs
QmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8TmV0d29yazFCYWNr
ZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgTmV0d29yazFCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBj
b25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5hbDsK
LXByaXZhdGU6Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2UxKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8
SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQotcHVibGljOgotICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0Y2hl
cihBbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVy
KSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KLXByaXZh
dGU6Ci0gICAgQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciogbV9hbHRlcm5hdGVE
aXNwYXRjaGVyIHsgbnVsbHB0ciB9OwotI2VuZGlmCi1wcml2YXRlOgotICAgIE5ldHdvcmsxQmFj
a2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImLCBOZXR3b3JrMUJhY2tlbmREaXNwYXRj
aGVySGFuZGxlciopOwotICAgIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2Fn
ZW50IHsgbnVsbHB0ciB9OwotfTsKLQotY2xhc3MgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlciBm
aW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0g
ICAgc3RhdGljIFJlZjxOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERp
c3BhdGNoZXImLCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIHZvaWQg
ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6
T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOwotcHJpdmF0ZToKLSAgICB2b2lkIGxvYWRSZXNvdXJj
ZTEobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0g
ICAgdm9pZCBsb2FkUmVzb3VyY2UyKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0
PiYmIHBhcmFtZXRlcnMpOwotICAgIHZvaWQgbG9hZFJlc291cmNlMyhsb25nIHJlcXVlc3RJZCwg
UmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKLSAgICB2b2lkIGxvYWRSZXNvdXJj
ZTQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0g
ICAgdm9pZCBsb2FkUmVzb3VyY2U1KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0
PiYmIHBhcmFtZXRlcnMpOwotICAgIHZvaWQgbG9hZFJlc291cmNlNihsb25nIHJlcXVlc3RJZCwg
UmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKLSAgICB2b2lkIGxvYWRSZXNvdXJj
ZTcobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0j
aWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi1wdWJsaWM6Ci0gICAg
dm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZU5ldHdvcmszQmFja2VuZERpc3Bh
dGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0
ZXJuYXRlRGlzcGF0Y2hlcjsgfQotcHJpdmF0ZToKLSAgICBBbHRlcm5hdGVOZXR3b3JrM0JhY2tl
bmREaXNwYXRjaGVyKiBtX2FsdGVybmF0ZURpc3BhdGNoZXIgeyBudWxscHRyIH07Ci0jZW5kaWYK
LXByaXZhdGU6Ci0gICAgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hl
ciYsIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgTmV0d29yazNCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQgeyBudWxscHRyIH07Ci19OwotCi19IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5o
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6
ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0j
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNs
dWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQotI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0
Y2hlcnMuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotTmV0d29yazFCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5OZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigp
IHsgfQotTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5OZXR3b3JrM0JhY2tlbmRE
aXNwYXRjaGVySGFuZGxlcigpIHsgfQotCi1SZWY8TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4g
TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNr
ZW5kRGlzcGF0Y2hlciwgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQot
ewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoYmFj
a2VuZERpc3BhdGNoZXIsIGFnZW50KSk7Ci19Ci0KLU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6
Ok5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNw
YXRjaGVyLCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCi0gICAgOiBT
dXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKLSAgICAsIG1f
YWdlbnQoYWdlbnQpCi17Ci0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRj
aGVyRm9yRG9tYWluKCJOZXR3b3JrMSJfcywgdGhpcyk7Ci19Ci0KLXZvaWQgTmV0d29yazFCYWNr
ZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0
aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCi17Ci0gICAgUmVmPE5ldHdvcmsxQmFj
a2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwotCi0gICAgUmVmUHRyPEpTT046Ok9iamVj
dD4gcGFyYW1ldGVyczsKLSAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFyYW1l
dGVycyk7Ci0KLSAgICBpZiAobWV0aG9kID09ICJsb2FkUmVzb3VyY2UxIikKLSAgICAgICAgbG9h
ZFJlc291cmNlMShyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOwotICAgIGVsc2UKLSAg
ICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlz
cGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazEuIiArIG1ldGhvZCArICInIHdhcyBu
b3QgZm91bmQiKTsKLX0KLQotdm9pZCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVz
b3VyY2UxKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQotewotI2lmIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotICAgIGlmIChtX2FsdGVybmF0
ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3Vy
Y2UxKHJlcXVlc3RJZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIEVy
cm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9i
amVjdDo6Y3JlYXRlKCk7Ci0gICAgbV9hZ2VudC0+bG9hZFJlc291cmNlMShlcnJvcik7Ci0KLSAg
ICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5k
UmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0g
ICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERp
c3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Ci19Ci0KLVJlZjxOZXR3b3Jr
M0JhY2tlbmREaXNwYXRjaGVyPiBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoQmFj
a2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBOZXR3b3JrM0JhY2tlbmREaXNwYXRj
aGVySGFuZGxlciogYWdlbnQpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTmV0d29yazNC
YWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKLX0KLQotTmV0d29y
azNCYWNrZW5kRGlzcGF0Y2hlcjo6TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlz
cGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyKiBhZ2VudCkKLSAgICA6IFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmRE
aXNwYXRjaGVyKQotICAgICwgbV9hZ2VudChhZ2VudCkKLXsKLSAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oIk5ldHdvcmszIl9zLCB0aGlzKTsKLX0K
LQotdm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJ
ZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKLXsK
LSAgICBSZWY8TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7Ci0KLSAg
ICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOwotICAgIG1lc3NhZ2UtPmdldE9iamVj
dCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsKLQotICAgIHR5cGVkZWYgdm9pZCAoTmV0d29yazNC
YWNrZW5kRGlzcGF0Y2hlcjo6KkNhbGxIYW5kbGVyKShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpT
T046Ok9iamVjdD4mJiBtZXNzYWdlKTsKLSAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBDYWxs
SGFuZGxlcj4gRGlzcGF0Y2hNYXA7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPERpc3BhdGNo
TWFwPiBkaXNwYXRjaE1hcDsKLSAgICBpZiAoZGlzcGF0Y2hNYXAuZ2V0KCkuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgTWV0aG9kVGFibGUgewotICAgICAgICAgICAg
Y29uc3QgY2hhciogbmFtZTsKLSAgICAgICAgICAgIENhbGxIYW5kbGVyIGhhbmRsZXI7Ci0gICAg
ICAgIH0gY29tbWFuZHNbXSA9IHsKLSAgICAgICAgICAgIHsgImxvYWRSZXNvdXJjZTEiLCAmTmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMSB9LAotICAgICAgICAgICAgeyAi
bG9hZFJlc291cmNlMiIsICZOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2Uy
IH0sCi0gICAgICAgICAgICB7ICJsb2FkUmVzb3VyY2UzIiwgJk5ldHdvcmszQmFja2VuZERpc3Bh
dGNoZXI6OmxvYWRSZXNvdXJjZTMgfSwKLSAgICAgICAgICAgIHsgImxvYWRSZXNvdXJjZTQiLCAm
TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNCB9LAotICAgICAgICAgICAg
eyAibG9hZFJlc291cmNlNSIsICZOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3Vy
Y2U1IH0sCi0gICAgICAgICAgICB7ICJsb2FkUmVzb3VyY2U2IiwgJk5ldHdvcmszQmFja2VuZERp
c3BhdGNoZXI6OmxvYWRSZXNvdXJjZTYgfSwKLSAgICAgICAgICAgIHsgImxvYWRSZXNvdXJjZTci
LCAmTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNyB9LAotICAgICAgICB9
OwotICAgICAgICBzaXplX3QgbGVuZ3RoID0gV1RGX0FSUkFZX0xFTkdUSChjb21tYW5kcyk7Ci0g
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAgICAgICBk
aXNwYXRjaE1hcC5nZXQoKS5hZGQoY29tbWFuZHNbaV0ubmFtZSwgY29tbWFuZHNbaV0uaGFuZGxl
cik7Ci0gICAgfQotCi0gICAgYXV0byBmaW5kUmVzdWx0ID0gZGlzcGF0Y2hNYXAuZ2V0KCkuZmlu
ZChtZXRob2QpOwotICAgIGlmIChmaW5kUmVzdWx0ID09IGRpc3BhdGNoTWFwLmdldCgpLmVuZCgp
KSB7Ci0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFj
a2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmszLiIgKyBtZXRob2QgKyAi
JyB3YXMgbm90IGZvdW5kIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAoKCp0aGlz
KS4qZmluZFJlc3VsdC0+dmFsdWUpKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7Ci19
Ci0KLXZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMShsb25nIHJl
cXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKLXsKLSNpZiBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7
Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlMShyZXF1ZXN0SWQp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBFcnJvclN0cmluZyBlcnJv
cjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OwotICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTEoZXJyb3IpOwotCi0gICAgaWYgKCFlcnJvci5s
ZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVl
c3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2
ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOwotfQotCi12b2lkIE5ldHdvcmszQmFja2VuZERpc3Bh
dGNoZXI6OmxvYWRSZXNvdXJjZTIobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+
JiYpCi17Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0gICAg
aWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNo
ZXItPmxvYWRSZXNvdXJjZTIocmVxdWVzdElkKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNl
bmRpZgotCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVz
dWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2Uy
KGVycm9yKTsKLQotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0gICAgICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2Up
OwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xF
cnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKLX0K
LQotdm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UzKGxvbmcgcmVx
dWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQotewotI2lmIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQotICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsK
LSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2UzKHJlcXVlc3RJZCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIEVycm9yU3RyaW5nIGVycm9y
OwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
Ci0gICAgbV9hZ2VudC0+bG9hZFJlc291cmNlMyhlcnJvcik7Ci0KLSAgICBpZiAoIWVycm9yLmxl
bmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVz
dElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2Vu
ZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZl
ckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Ci19Ci0KLXZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0
Y2hlcjo6bG9hZFJlc291cmNlNChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4m
JikKLXsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSAgICBp
ZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hl
ci0+bG9hZFJlc291cmNlNChyZXF1ZXN0SWQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2Vu
ZGlmCi0KLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1
bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTQo
ZXJyb3IpOwotCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7
Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVy
cm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOwotfQot
Ci12b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTUobG9uZyByZXF1
ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCi17Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0gICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewot
ICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZTUocmVxdWVzdElkKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7
Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
LSAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2U1KGVycm9yKTsKLQotICAgIGlmICghZXJyb3IubGVu
Z3RoKCkpCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0
SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVy
RXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKLX0KLQotdm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRj
aGVyOjpsb2FkUmVzb3VyY2U2KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYm
KQotewotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotICAgIGlm
IChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVy
LT5sb2FkUmVzb3VyY2U2KHJlcXVlc3RJZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5k
aWYKLQotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3Vs
dCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgbV9hZ2VudC0+bG9hZFJlc291cmNlNihl
cnJvcik7Ci0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNw
YXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsK
LSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJy
b3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Ci19Ci0K
LXZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNyhsb25nIHJlcXVl
c3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKLXsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKLSAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0g
ICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlNyhyZXF1ZXN0SWQpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBFcnJvclN0cmluZyBlcnJvcjsK
LSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwot
ICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTcoZXJyb3IpOwotCi0gICAgaWYgKCFlcnJvci5sZW5n
dGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJ
ZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJF
cnJvciwgV1RGTW92ZShlcnJvcikpOwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQot
IyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgotLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1
ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsK
LQotY2xhc3MgRnJvbnRlbmRSb3V0ZXI7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMj
IEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgotCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUg
PHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotbmFtZXNw
YWNlIFByb3RvY29sIHsKLQotCi0KLQotCi0vLyBUeXBlZGVmcy4KLW5hbWVzcGFjZSBOZXR3b3Jr
MiB7Ci0vKiBVbmlxdWUgbG9hZGVyIGlkZW50aWZpZXIuICovCi10eXBlZGVmIFN0cmluZyBMb2Fk
ZXJJZDsKLX0gLy8gTmV0d29yazIKLS8vIEVuZCBvZiB0eXBlZGVmcy4KLQotCi0KLX0gLy8gbmFt
ZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9i
amVjdHMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRo
LXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9j
b2xPYmplY3RzLmgiCi0KLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1uYW1lc3BhY2UgUHJv
dG9jb2wgewotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXpl
cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMu
aD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLUBwcm90b2NvbCBUZXN0UHJvdG9jb2xO
ZXR3b3JrMURvbWFpbkhhbmRsZXI7Ci1AcHJvdG9jb2wgVGVzdFByb3RvY29sTmV0d29yazNEb21h
aW5IYW5kbGVyOwotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi1jbGFzcyBPYmpDSW5zcGVj
dG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVOZXR3
b3JrMUJhY2tlbmREaXNwYXRjaGVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1
YmxpYzoKLSAgICBPYmpDSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0
UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhh
bmRsZXI7IH0KLSAgICB2b2lkIGxvYWRSZXNvdXJjZTEobG9uZyByZXF1ZXN0SWQpIGZpbmFsOwot
cHJpdmF0ZToKLSAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5k
bGVyPj4gbV9kZWxlZ2F0ZTsKLX07Ci0KLWNsYXNzIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tl
bmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZU5ldHdvcmszQmFja2VuZERpc3Bh
dGNoZXIgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIE9iakNJ
bnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbE5ldHdvcmsz
RG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQotICAgIHZv
aWQgbG9hZFJlc291cmNlMShsb25nIHJlcXVlc3RJZCkgZmluYWw7Ci0gICAgdm9pZCBsb2FkUmVz
b3VyY2UyKGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTMobG9u
ZyByZXF1ZXN0SWQpIGZpbmFsOwotICAgIHZvaWQgbG9hZFJlc291cmNlNChsb25nIHJlcXVlc3RJ
ZCkgZmluYWw7Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2U1KGxvbmcgcmVxdWVzdElkKSBmaW5hbDsK
LSAgICB2b2lkIGxvYWRSZXNvdXJjZTYobG9uZyByZXF1ZXN0SWQpIGZpbmFsOwotICAgIHZvaWQg
bG9hZFJlc291cmNlNyhsb25nIHJlcXVlc3RJZCkgZmluYWw7Ci1wcml2YXRlOgotICAgIFJldGFp
blB0cjxpZDxUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwot
fTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJh
Y2tlbmREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRv
bWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRl
c3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29s
SW50ZXJuYWwuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNp
bmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdm9p
ZCBPYmpDSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMShs
b25nIHJlcXVlc3RJZCkKLXsKLSAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3Rv
cjpAc2VsZWN0b3IobG9hZFJlc291cmNlMVdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFj
azopXSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9y
KHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmsx
LmxvYWRSZXNvdXJjZTEnIHdhcyBub3QgZm91bmQiX3MpOwotICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlz
cGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICB9OwotCi0gICAgaWQgc3VjY2Vzc0NhbGxiYWNr
ID0gXnsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJ
ZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2UpOwotICAgIH07Ci0KLSAgICBbbV9kZWxl
Z2F0ZSBsb2FkUmVzb3VyY2UxV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNz
Q2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKLX0KLQotCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3
b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UxKGxvbmcgcmVxdWVzdElkKQotewot
ICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVz
b3VyY2UxV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJh
Y2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5k
RGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMubG9hZFJlc291cmNlMScgd2Fz
IG5vdCBmb3VuZCJfcyk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5n
RXJyb3JzKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZCBlcnJvckNhbGxiYWNr
ID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVw
b3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJv
ciwgZXJyb3IpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9y
cygpOwotICAgIH07Ci0KLSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpLCBmYWxzZSk7Ci0gICAgfTsKLQotICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZTFX
aXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2Fs
bGJhY2tdOwotfQotCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVy
Ojpsb2FkUmVzb3VyY2UyKGxvbmcgcmVxdWVzdElkKQotewotICAgIGlmICghW21fZGVsZWdhdGUg
cmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2UyV2l0aEVycm9yQ2FsbGJh
Y2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJl
cG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90
Rm91bmQsICInTmV0d29yazMubG9hZFJlc291cmNlMicgd2FzIG5vdCBmb3VuZCJfcyk7Ci0gICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3Ip
IHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1
ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwotICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgIH07Ci0KLSAgICBp
ZCBzdWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5k
UmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7Ci0gICAg
fTsKLQotICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZTJXaXRoRXJyb3JDYWxsYmFjazplcnJv
ckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOwotfQotCi12b2lkIE9i
akNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UzKGxvbmcg
cmVxdWVzdElkKQotewotICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBz
ZWxlY3Rvcihsb2FkUmVzb3VyY2UzV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOild
KSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVx
dWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMubG9h
ZFJlc291cmNlMycgd2FzIG5vdCBmb3VuZCJfcyk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVy
KCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBp
ZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRj
aGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5z
ZW5kUGVuZGluZ0Vycm9ycygpOwotICAgIH07Ci0KLSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBe
ewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBK
U09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7Ci0gICAgfTsKLQotICAgIFttX2RlbGVnYXRl
IGxvYWRSZXNvdXJjZTNXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxs
YmFjazpzdWNjZXNzQ2FsbGJhY2tdOwotfQotCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0Jh
Y2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U0KGxvbmcgcmVxdWVzdElkKQotewotICAgIGlm
ICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2U0
V2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0
Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMubG9hZFJlc291cmNlNCcgd2FzIG5vdCBm
b3VuZCJfcyk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3Jz
KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZCBlcnJvckNhbGxiYWNrID0gXihO
U1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJv
dG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJy
b3IpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwot
ICAgIH07Ci0KLSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
LCBmYWxzZSk7Ci0gICAgfTsKLQotICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZTRXaXRoRXJy
b3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2td
OwotfQotCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2Fk
UmVzb3VyY2U1KGxvbmcgcmVxdWVzdElkKQotewotICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9u
ZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2U1V2l0aEVycm9yQ2FsbGJhY2s6c3Vj
Y2Vzc0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFBy
b3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQs
ICInTmV0d29yazMubG9hZFJlc291cmNlNScgd2FzIG5vdCBmb3VuZCJfcyk7Ci0gICAgICAgIGJh
Y2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQs
IEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwotICAgICAgICBiYWNrZW5k
RGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgIH07Ci0KLSAgICBpZCBzdWNj
ZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9u
c2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7Ci0gICAgfTsKLQot
ICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZTVXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxi
YWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOwotfQotCi12b2lkIE9iakNJbnNw
ZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U2KGxvbmcgcmVxdWVz
dElkKQotewotICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rv
cihsb2FkUmVzb3VyY2U2V2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0g
ICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElk
LCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMubG9hZFJlc291
cmNlNicgd2FzIG5vdCBmb3VuZCJfcyk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNl
bmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZCBlcnJv
ckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpT
ZXJ2ZXJFcnJvciwgZXJyb3IpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVu
ZGluZ0Vycm9ycygpOwotICAgIH07Ci0KLSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeewotICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7Ci0gICAgfTsKLQotICAgIFttX2RlbGVnYXRlIGxvYWRS
ZXNvdXJjZTZXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpz
dWNjZXNzQ2FsbGJhY2tdOwotfQotCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmRE
aXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U3KGxvbmcgcmVxdWVzdElkKQotewotICAgIGlmICghW21f
ZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2U3V2l0aEVy
cm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6
TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMubG9hZFJlc291cmNlNycgd2FzIG5vdCBmb3VuZCJf
cyk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmlu
ZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xF
cnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwot
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgIH07
Ci0KLSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxz
ZSk7Ci0gICAgfTsKLQotICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZTdXaXRoRXJyb3JDYWxs
YmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOwotfQot
Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bEJhY2tlbmREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29u
ZmlndXJhdGlvbi5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13
aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4K
LQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRl
c3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAotQHByb3BlcnR5IChub25hdG9taWMs
IHJldGFpbiwgc2V0dGVyPXNldE5ldHdvcmsxSGFuZGxlcjopIGlkPFRlc3RQcm90b2NvbE5ldHdv
cmsxRG9tYWluSGFuZGxlcj4gbmV0d29yazFIYW5kbGVyOwotQHByb3BlcnR5IChub25hdG9taWMs
IHJldGFpbiwgc2V0dGVyPXNldE5ldHdvcmszSGFuZGxlcjopIGlkPFRlc3RQcm90b2NvbE5ldHdv
cmszRG9tYWluSGFuZGxlcj4gbmV0d29yazNIYW5kbGVyOwotQGVuZAotCi0KLSMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xDb25maWd1cmF0aW9uLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
ZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3Vy
YXRpb24uaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbXBvcnQgIlRl
c3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1
Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLQotdXNpbmcgbmFtZXNwYWNl
IEluc3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24K
LXsKLSAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotICAg
IGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4gX25ldHdvcmsxSGFuZGxlcjsK
LSAgICBpZDxUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkhhbmRsZXI+IF9uZXR3b3JrM0hhbmRs
ZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxl
SW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5p
dF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250
cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7
Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAgIFtfbmV0d29yazFIYW5kbGVyIHJlbGVhc2Vd
OwotICAgIFtfbmV0d29yazNIYW5kbGVyIHJlbGVhc2VdOwotICAgIFtzdXBlciBkZWFsbG9jXTsK
LX0KLQotLSAodm9pZClzZXROZXR3b3JrMUhhbmRsZXI6KGlkPFRlc3RQcm90b2NvbE5ldHdvcmsx
RG9tYWluSGFuZGxlcj4paGFuZGxlcgotewotICAgIGlmIChoYW5kbGVyID09IF9uZXR3b3JrMUhh
bmRsZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIFtfbmV0d29yazFIYW5kbGVyIHJlbGVhc2Vd
OwotICAgIF9uZXR3b3JrMUhhbmRsZXIgPSBbaGFuZGxlciByZXRhaW5dOwotCi0gICAgYXV0byBh
bHRlcm5hdGVEaXNwYXRjaGVyID0gbWFrZVVuaXF1ZTxPYmpDSW5zcGVjdG9yTmV0d29yazFCYWNr
ZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7Ci0gICAgYXV0byBhbHRlcm5hdGVBZ2VudCA9IG1ha2VV
bmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hl
ciwgQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4+KCJOZXR3b3JrMSJfcywgKl9j
b250cm9sbGVyLCBXVEZNb3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIpKTsKLSAgICBfY29udHJvbGxl
ci0+YXBwZW5kRXh0cmFBZ2VudChXVEZNb3ZlKGFsdGVybmF0ZUFnZW50KSk7Ci19Ci0KLS0gKGlk
PFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4pbmV0d29yazFIYW5kbGVyCi17Ci0g
ICAgcmV0dXJuIF9uZXR3b3JrMUhhbmRsZXI7Ci19Ci0KLS0gKHZvaWQpc2V0TmV0d29yazNIYW5k
bGVyOihpZDxUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkhhbmRsZXI+KWhhbmRsZXIKLXsKLSAg
ICBpZiAoaGFuZGxlciA9PSBfbmV0d29yazNIYW5kbGVyKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBbX25ldHdvcmszSGFuZGxlciByZWxlYXNlXTsKLSAgICBfbmV0d29yazNIYW5kbGVyID0gW2hh
bmRsZXIgcmV0YWluXTsKLQotICAgIGF1dG8gYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IG1ha2VVbmlx
dWU8T2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI+KGhhbmRsZXIpOwotICAg
IGF1dG8gYWx0ZXJuYXRlQWdlbnQgPSBtYWtlVW5pcXVlPEFsdGVybmF0ZURpc3BhdGNoYWJsZUFn
ZW50PE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIsIEFsdGVybmF0ZU5ldHdvcmszQmFja2VuZERp
c3BhdGNoZXI+PigiTmV0d29yazMiX3MsICpfY29udHJvbGxlciwgV1RGTW92ZShhbHRlcm5hdGVE
aXNwYXRjaGVyKSk7Ci0gICAgX2NvbnRyb2xsZXItPmFwcGVuZEV4dHJhQWdlbnQoV1RGTW92ZShh
bHRlcm5hdGVBZ2VudCkpOwotfQotCi0tIChpZDxUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkhh
bmRsZXI+KW5ldHdvcmszSGFuZGxlcgotewotICAgIHJldHVybiBfbmV0d29yazNIYW5kbGVyOwot
fQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1t
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFu
ZC1zaXplcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcg
bmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50
RGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1z
aXplcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNp
bXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3Iv
UldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+Ci0KLQotCi0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVn
ZXIsIFRlc3RQcm90b2NvbFBsYXRmb3JtKSB7Ci0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1BbGws
Ci0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljLAotICAgIFRlc3RQcm90b2NvbFBsYXRm
b3JtSU9TLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1MsCi19OwotCi0KLQotCi0KLUBw
cm90b2NvbCBUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXIgPE5TT2JqZWN0PgotQG9w
dGlvbmFsCi0tICh2b2lkKWxvYWRSZXNvdXJjZTFXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShO
U1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKHZv
aWQpKXN1Y2Nlc3NDYWxsYmFjazsKLUBlbmQKLQotQHByb3RvY29sIFRlc3RQcm90b2NvbE5ldHdv
cmszRG9tYWluSGFuZGxlciA8TlNPYmplY3Q+Ci1Ab3B0aW9uYWwKLS0gKHZvaWQpbG9hZFJlc291
cmNlMVdpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxs
YmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikodm9pZCkpc3VjY2Vzc0NhbGxiYWNrOwotLSAo
dm9pZClsb2FkUmVzb3VyY2UyV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVy
cm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKSh2b2lkKSlzdWNjZXNz
Q2FsbGJhY2s7Ci0tICh2b2lkKWxvYWRSZXNvdXJjZTNXaXRoRXJyb3JDYWxsYmFjazoodm9pZChe
KShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4p
KHZvaWQpKXN1Y2Nlc3NDYWxsYmFjazsKLS0gKHZvaWQpbG9hZFJlc291cmNlNFdpdGhFcnJvckNh
bGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2Fs
bGJhY2s6KHZvaWQoXikodm9pZCkpc3VjY2Vzc0NhbGxiYWNrOwotLSAodm9pZClsb2FkUmVzb3Vy
Y2U1V2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxi
YWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKSh2b2lkKSlzdWNjZXNzQ2FsbGJhY2s7Ci0tICh2
b2lkKWxvYWRSZXNvdXJjZTZXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJy
b3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKHZvaWQpKXN1Y2Nlc3ND
YWxsYmFjazsKLS0gKHZvaWQpbG9hZFJlc291cmNlN1dpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4p
KE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXiko
dm9pZCkpc3VjY2Vzc0NhbGxiYWNrOwotQGVuZAotCi0KLQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0
b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+Ci0KLSMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFs
LmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWlu
Zy1jb21tYW5kLXNpemVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xK
U09OT2JqZWN0UHJpdmF0ZS5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJ
bnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi0KLQot
Ci0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2Nv
bC5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5o
PgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1U
eXBlPgotT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3Ry
aW5nJiB2YWx1ZSk7Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9j
b2xQbGF0Zm9ybSB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQ
cm90b2NvbFBsYXRmb3JtQWxsOgotICAgICAgICByZXR1cm4gImFsbCJfczsKLSAgICBjYXNlIFRl
c3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzoKLSAgICAgICAgcmV0dXJuICJnZW5lcmljIl9zOwot
ICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1JT1M6Ci0gICAgICAgIHJldHVybiAiaW9zIl9z
OwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzoKLSAgICAgICAgcmV0dXJuICJt
YWNvcyJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJv
dG9jb2xQbGF0Zm9ybT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17
Ci0gICAgaWYgKHZhbHVlID09ICJhbGwiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxh
dGZvcm1BbGw7Ci0gICAgaWYgKHZhbHVlID09ICJnZW5lcmljIikKLSAgICAgICAgcmV0dXJuIFRl
c3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzsKLSAgICBpZiAodmFsdWUgPT0gImlvcyIpCi0gICAg
ICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzsKLSAgICBpZiAodmFsdWUgPT0gIm1h
Y29zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M7Ci0gICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0j
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2lt
cG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JX
SVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3Rv
cjsKLQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKE5ldHdvcmsyRG9t
YWluKQotCi0rICh2b2lkKV9wYXJzZUxvYWRlcklkOihOU1N0cmluZyAqKilvdXRWYWx1ZSBmcm9t
UGF5bG9hZDooaWQpcGF5bG9hZDsKLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zIChOZXR3b3JrMkRvbWFpbikKLQotKyAodm9pZClfcGFyc2VMb2Fk
ZXJJZDooTlNTdHJpbmcgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAg
ICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBjbGFzc10p
OwotICAgICpvdXRWYWx1ZSA9IChOU1N0cmluZyAqKXBheWxvYWQ7Ci19Ci0KLUBlbmQKLQotCi0j
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50
ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1w
b3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotI2ltcG9y
dCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5n
IG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
VHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2VudW0tdmFsdWVzLmpzb24tcmVzdWx0IGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0
ZWQvZW51bS12YWx1ZXMuanNvbi1yZXN1bHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGYwNmZlYmI3OGQ3Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9lbnVtLXZhbHVlcy5qc29uLXJl
c3VsdAorKysgL2Rldi9udWxsCkBAIC0xLDEyMzYgKzAsMCBAQAotIyMjIEJlZ2luIEZpbGU6IElu
c3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGVudW0tdmFsdWVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotLy8gVHlwZURvbWFpbgotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigi
VHlwZURvbWFpbiIsIG51bGwpOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIlR5cGVE
b21haW4uVHlwZURvbWFpbkVudW0iLCB7U2hhcmVkOiAic2hhcmVkIiwgUmVkOiAicmVkIiwgR3Jl
ZW46ICJncmVlbiIsIEJsdWU6ICJibHVlIn0pOwotSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURv
bWFpbigiVHlwZURvbWFpbiIsIG51bGwpOwotCi0vLyBDb21tYW5kRG9tYWluCi1JbnNwZWN0b3JC
YWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJDb21tYW5kRG9tYWluIiwgbnVsbCk7Ci1JbnNwZWN0b3JC
YWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiQ29tbWFuZERvbWFpbi5jb21tYW5kV2l0aEVudW1SZXR1
cm5WYWx1ZSIsIG51bGwsIFtdLCBbInJldHVyblZhbHVlIl0pOwotSW5zcGVjdG9yQmFja2VuZC5h
Y3RpdmF0ZURvbWFpbigiQ29tbWFuZERvbWFpbiIsIG51bGwpOwotCi0vLyBFdmVudERvbWFpbgot
SW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiRXZlbnREb21haW4iLCBudWxsKTsKLUlu
c3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJFdmVudERvbWFpbi5FdmVudFdpdGhFbnVtUGFy
YW1ldGVyUGFyYW1ldGVyIiwge1NoYXJlZDogInNoYXJlZCIsIEJsYWNrOiAiYmxhY2siLCBXaGl0
ZTogIndoaXRlIn0pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckV2ZW50KCJFdmVudERvbWFp
bi5ldmVudFdpdGhFbnVtUGFyYW1ldGVyIiwgbnVsbCwgWyJwYXJhbWV0ZXIiXSk7Ci1JbnNwZWN0
b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnREb21haW5EaXNwYXRjaGVyID0gSW5zcGVjdG9yQmFja2Vu
ZC5yZWdpc3RlckRpc3BhdGNoZXIuYmluZChJbnNwZWN0b3JCYWNrZW5kLCAiRXZlbnREb21haW4i
KTsKLUluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkV2ZW50RG9tYWluIiwgbnVsbCk7
Ci0jIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMu
aCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5o
PgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0K
LW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hl
ciB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2Vu
ZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92
ZShkaXNwYXRjaGVyKTsgfQotICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hl
cigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KLXByaXZhdGU6
Ci0gICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwotfTsK
LQotCi1jbGFzcyBBbHRlcm5hdGVDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIgOiBwdWJs
aWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZpcnR1YWwgfkFs
dGVybmF0ZUNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQotICAgIHZpcnR1YWwg
dm9pZCBjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShsb25nIGNhbGxJZCkgPSAwOwotfTsKLQot
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKLSMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmRE
aXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0j
aW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10eXBlZGVmIFN0cmluZyBFcnJvclN0
cmluZzsKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotY2xh
c3MgQWx0ZXJuYXRlQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOwotI2VuZGlmIC8vIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi1jbGFzcyBDb21tYW5kRG9t
YWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKLXB1YmxpYzoKLSAgICAvLyBOYW1lZCBhZnRl
ciBwYXJhbWV0ZXIgJ3JldHVyblZhbHVlJyB3aGlsZSBnZW5lcmF0aW5nIGNvbW1hbmQvZXZlbnQg
Y29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUuCi0gICAgZW51bSBjbGFzcyBSZXR1cm5WYWx1ZSB7
Ci0gICAgICAgIFNoYXJlZCA9IDAsCi0gICAgICAgIEN5YW4gPSA2LAotICAgICAgICBNYWdlbnRh
ID0gNywKLSAgICAgICAgWWVsbG93ID0gOCwKLSAgICB9OyAvLyBlbnVtIGNsYXNzIFJldHVyblZh
bHVlCi0gICAgdmlydHVhbCB2b2lkIGNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlKEVycm9yU3Ry
aW5nJiwgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UmV0dXJuVmFsdWUq
IG91dF9yZXR1cm5WYWx1ZSkgPSAwOwotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgfkNvbW1hbmRE
b21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKLX07Ci0KLWNsYXNzIENvbW1hbmREb21h
aW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlz
cGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxDb21tYW5kRG9tYWluQmFja2VuZERp
c3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIENvbW1hbmREb21haW5CYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBj
b25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5hbDsK
LXByaXZhdGU6Ci0gICAgdm9pZCBjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShsb25nIHJlcXVl
c3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKLSNpZiBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLXB1YmxpYzoKLSAgICB2b2lkIHNldEFsdGVy
bmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKiBh
bHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURp
c3BhdGNoZXI7IH0KLXByaXZhdGU6Ci0gICAgQWx0ZXJuYXRlQ29tbWFuZERvbWFpbkJhY2tlbmRE
aXNwYXRjaGVyKiBtX2FsdGVybmF0ZURpc3BhdGNoZXIgeyBudWxscHRyIH07Ci0jZW5kaWYKLXBy
aXZhdGU6Ci0gICAgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRj
aGVyJiwgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIENvbW1h
bmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQgeyBudWxscHRyIH07Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmRE
aXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNw
cAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pT
T05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKLSNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCi0j
ZW5kaWYKLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLUNvbW1hbmREb21haW5CYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXI6On5Db21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCkg
eyB9Ci0KLVJlZjxDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI+IENvbW1hbmREb21haW5C
YWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0
Y2hlciwgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCi17Ci0g
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKGJh
Y2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOwotfQotCi1Db21tYW5kRG9tYWluQmFja2VuZERpc3Bh
dGNoZXI6OkNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYg
YmFja2VuZERpc3BhdGNoZXIsIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIq
IGFnZW50KQotICAgIDogU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3Bh
dGNoZXIpCi0gICAgLCBtX2FnZW50KGFnZW50KQotewotICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbigiQ29tbWFuZERvbWFpbiJfcywgdGhpcyk7Ci19
Ci0KLXZvaWQgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJl
cXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2Fn
ZSkKLXsKLSAgICBSZWY8Q29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0
aGlzKTsKLQotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2Fn
ZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRlcnMpOwotCi0gICAgaWYgKG1ldGhvZCA9
PSAiY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUiKQotICAgICAgICBjb21tYW5kV2l0aEVudW1S
ZXR1cm5WYWx1ZShyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOwotICAgIGVsc2UKLSAg
ICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlz
cGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInQ29tbWFuZERvbWFpbi4iICsgbWV0aG9kICsgIicg
d2FzIG5vdCBmb3VuZCIpOwotfQotCi12b2lkIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hl
cjo6Y29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09O
OjpPYmplY3Q+JiYpCi17Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCi0gICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0
ZURpc3BhdGNoZXItPmNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlKHJlcXVlc3RJZCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAg
IFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAg
Q29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UmV0dXJuVmFsdWUgb3V0X3Jl
dHVyblZhbHVlOwotICAgIG1fYWdlbnQtPmNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlKGVycm9y
LCAmb3V0X3JldHVyblZhbHVlKTsKLQotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0gICAgICAg
IHJlc3VsdC0+c2V0U3RyaW5nKCJyZXR1cm5WYWx1ZSJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6
VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKG91dF9yZXR1cm5WYWx1ZSkpOwotCi0g
ICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2Vu
ZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQot
ICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmRE
aXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOwotfQotCi19IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNw
cAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNs
YXNzIEZyb250ZW5kUm91dGVyOwotCi1jbGFzcyBFdmVudERvbWFpbkZyb250ZW5kRGlzcGF0Y2hl
ciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgRXZlbnREb21h
aW5Gcm9udGVuZERpc3BhdGNoZXIoRnJvbnRlbmRSb3V0ZXImIGZyb250ZW5kUm91dGVyKSA6IG1f
ZnJvbnRlbmRSb3V0ZXIoZnJvbnRlbmRSb3V0ZXIpIHsgfQotICAgICAgICAvLyBOYW1lZCBhZnRl
ciBwYXJhbWV0ZXIgJ3BhcmFtZXRlcicgd2hpbGUgZ2VuZXJhdGluZyBjb21tYW5kL2V2ZW50IGV2
ZW50V2l0aEVudW1QYXJhbWV0ZXIuCi0gICAgICAgIGVudW0gY2xhc3MgUGFyYW1ldGVyIHsKLSAg
ICAgICAgICAgIFNoYXJlZCA9IDAsCi0gICAgICAgICAgICBCbGFjayA9IDQsCi0gICAgICAgICAg
ICBXaGl0ZSA9IDUsCi0gICAgICAgIH07IC8vIGVudW0gY2xhc3MgUGFyYW1ldGVyCi0gICAgdm9p
ZCBldmVudFdpdGhFbnVtUGFyYW1ldGVyKFBhcmFtZXRlciBwYXJhbWV0ZXIpOwotcHJpdmF0ZToK
LSAgICBGcm9udGVuZFJvdXRlciYgbV9mcm9udGVuZFJvdXRlcjsKLX07Ci0KLX0gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi12b2lkIEV2ZW50RG9tYWluRnJvbnRlbmREaXNw
YXRjaGVyOjpldmVudFdpdGhFbnVtUGFyYW1ldGVyKFBhcmFtZXRlciBwYXJhbWV0ZXIpCi17Ci0g
ICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkV2ZW50RG9tYWluLmV2
ZW50V2l0aEVudW1QYXJhbWV0ZXIiX3MpOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHBhcmFtc09i
amVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJp
bmcoInBhcmFtZXRlciJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVu
dW1Db25zdGFudFZhbHVlKHBhcmFtZXRlcikpOwotICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3Qo
InBhcmFtcyJfcywgV1RGTW92ZShwYXJhbXNPYmplY3QpKTsKLQotICAgIG1fZnJvbnRlbmRSb3V0
ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJz
LmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLW5hbWVzcGFjZSBQcm90
b2NvbCB7Ci0KLQotCi0vLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KLW5hbWVzcGFjZSBUeXBlRG9t
YWluIHsKLWVudW0gY2xhc3MgVHlwZURvbWFpbkVudW07Ci19IC8vIFR5cGVEb21haW4KLS8vIEVu
ZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KLQotCi0KLQotbmFtZXNwYWNlIFRlc3RIZWxwZXJz
IHsKLQotU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKTsKLQotdGVtcGxhdGU8
dHlwZW5hbWUgVD4gU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKFQgZW51bVZhbHVlKQotewot
ICAgIHJldHVybiBnZXRFbnVtQ29uc3RhbnRWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KGVudW1WYWx1
ZSkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwotCi1uYW1lc3BhY2UgVHlwZURv
bWFpbiB7Ci0vKiAgKi8KLWVudW0gY2xhc3MgVHlwZURvbWFpbkVudW0gewotICAgIFNoYXJlZCA9
IDAsCi0gICAgUmVkID0gMSwKLSAgICBHcmVlbiA9IDIsCi0gICAgQmx1ZSA9IDMsCi19OyAvLyBl
bnVtIGNsYXNzIFR5cGVEb21haW5FbnVtCi19IC8vIFR5cGVEb21haW4KLQotCi0KLW5hbWVzcGFj
ZSBUZXN0SGVscGVycyB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFByb3RvY29sRW51bVR5cGU+Ci1P
cHRpb25hbDxQcm90b2NvbEVudW1UeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmcoY29uc3Qg
U3RyaW5nJik7Ci0KLS8vIEVudW1zIGluIHRoZSAnVHlwZURvbWFpbicgRG9tYWluCi10ZW1wbGF0
ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWlu
RW51bT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVE
b21haW46OlR5cGVEb21haW5FbnVtPihjb25zdCBTdHJpbmcmKTsKLQotfSAvLyBuYW1lc3BhY2Ug
VGVzdEhlbHBlcnMKLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCi0KLW5hbWVzcGFjZSBXVEYgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgRGVmYXVsdEhhc2g7Ci0KLS8vIEhhc2ggZGVjbGFyYXRpb25zIGluIHRoZSAnVHlwZURvbWFp
bicgRG9tYWluCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90
b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW0+IHsKLSAgICB0eXBlZGVmIEludEhhc2g8
SW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW0+IEhhc2g7Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBXVEYKLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0
cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLQotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0K
LW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLW5hbWVzcGFjZSBUZXN0SGVscGVycyB7Ci0KLXN0YXRp
YyBjb25zdCBjaGFyKiBjb25zdCBlbnVtX2NvbnN0YW50X3ZhbHVlc1tdID0gewotICAgICJzaGFy
ZWQiLAotICAgICJyZWQiLAotICAgICJncmVlbiIsCi0gICAgImJsdWUiLAotICAgICJibGFjayIs
Ci0gICAgIndoaXRlIiwKLSAgICAiY3lhbiIsCi0gICAgIm1hZ2VudGEiLAotICAgICJ5ZWxsb3ci
LAotfTsKLQotU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7Ci0gICAgcmV0
dXJuIGVudW1fY29uc3RhbnRfdmFsdWVzW2NvZGVdOwotfQotCi0vLyBFbnVtcyBpbiB0aGUgJ1R5
cGVEb21haW4nIERvbWFpbgotdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW0+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJ
bnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51bT4oY29uc3QgU3Ry
aW5nJiBwcm90b2NvbFN0cmluZykKLXsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50
VmFsdWVzW10gPSB7Ci0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURv
bWFpbjo6VHlwZURvbWFpbkVudW06OlNoYXJlZCwKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6
OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51bTo6UmVkLAotICAgICAgICAoc2l6
ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46OlR5cGVEb21haW5FbnVtOjpHcmVl
biwKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBl
RG9tYWluRW51bTo6Qmx1ZSwKLSAgICB9OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgNDsg
KytpKQotICAgICAgICBpZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNb
Y29uc3RhbnRWYWx1ZXNbaV1dKQotICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3Rv
Y29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51bSljb25zdGFudFZhbHVlc1tpXTsKLQotICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLQotfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMK
LQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4K
LQotQHByb3RvY29sIFRlc3RQcm90b2NvbENvbW1hbmREb21haW5Eb21haW5IYW5kbGVyOwotCi1u
YW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi1jbGFzcyBPYmpDSW5zcGVjdG9yQ29tbWFuZERvbWFp
bkJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZUNvbW1hbmREb21haW5C
YWNrZW5kRGlzcGF0Y2hlciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6
Ci0gICAgT2JqQ0luc3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0
UHJvdG9jb2xDb21tYW5kRG9tYWluRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRl
ID0gaGFuZGxlcjsgfQotICAgIHZvaWQgY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUobG9uZyBy
ZXF1ZXN0SWQpIGZpbmFsOwotcHJpdmF0ZToKLSAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29s
Q29tbWFuZERvbWFpbkRvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwotfTsKLQotfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3Bh
dGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVy
cy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29u
ZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLQotbmFtZXNwYWNl
IEluc3BlY3RvciB7Ci0KLXZvaWQgT2JqQ0luc3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5kRGlz
cGF0Y2hlcjo6Y29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUobG9uZyByZXF1ZXN0SWQpCi17Ci0g
ICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGNvbW1hbmRX
aXRoRW51bVJldHVyblZhbHVlV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7
Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVz
dElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInQ29tbWFuZERvbWFpbi5j
b21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZScgd2FzIG5vdCBmb3VuZCJfcyk7Ci0gICAgICAgIGJh
Y2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQs
IEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwotICAgICAgICBiYWNrZW5k
RGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgIH07Ci0KLSAgICBpZCBzdWNj
ZXNzQ2FsbGJhY2sgPSBeKFRlc3RQcm90b2NvbENvbW1hbmREb21haW5Db21tYW5kV2l0aEVudW1S
ZXR1cm5WYWx1ZVJldHVyblZhbHVlIHJldHVyblZhbHVlKSB7Ci0gICAgICAgIFJlZjxKU09OOjpP
YmplY3Q+IHJlc3VsdE9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgIHJl
c3VsdE9iamVjdC0+c2V0U3RyaW5nKCJyZXR1cm5WYWx1ZSJfcywgdG9Qcm90b2NvbFN0cmluZyhy
ZXR1cm5WYWx1ZSkpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2Uo
cmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdE9iamVjdCksIGZhbHNlKTsKLSAgICB9OwotCi0gICAg
W21fZGVsZWdhdGUgY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWVXaXRoRXJyb3JDYWxsYmFjazpl
cnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOwotfQotCi0KLX0g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tl
bmREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJh
dGlvbi5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxX
ZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+Ci0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkg
KCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNP
YmplY3QKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4sIHNldHRlcj1zZXRDb21tYW5kRG9t
YWluSGFuZGxlcjopIGlkPFRlc3RQcm90b2NvbENvbW1hbmREb21haW5Eb21haW5IYW5kbGVyPiBj
b21tYW5kRG9tYWluSGFuZGxlcjsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgVGVz
dFByb3RvY29sRXZlbnREb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKmV2ZW50RG9tYWluRXZl
bnREaXNwYXRjaGVyOwotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbi5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1t
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJv
dG9jb2xDb25maWd1cmF0aW9uLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgi
Ci0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+Ci0jaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2lt
cG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0KLXVz
aW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xD
b25maWd1cmF0aW9uCi17Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29u
dHJvbGxlcjsKLSAgICBpZDxUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluRG9tYWluSGFuZGxlcj4g
X2NvbW1hbmREb21haW5IYW5kbGVyOwotICAgIFRlc3RQcm90b2NvbEV2ZW50RG9tYWluRG9tYWlu
RXZlbnREaXNwYXRjaGVyICpfZXZlbnREb21haW5FdmVudERpc3BhdGNoZXI7Ci19Ci0KLS0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJv
bGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFz
ZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBf
Y29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQp
ZGVhbGxvYwotewotICAgIFtfY29tbWFuZERvbWFpbkhhbmRsZXIgcmVsZWFzZV07Ci0gICAgW19l
dmVudERvbWFpbkV2ZW50RGlzcGF0Y2hlciByZWxlYXNlXTsKLSAgICBbc3VwZXIgZGVhbGxvY107
Ci19Ci0KLS0gKHZvaWQpc2V0Q29tbWFuZERvbWFpbkhhbmRsZXI6KGlkPFRlc3RQcm90b2NvbENv
bW1hbmREb21haW5Eb21haW5IYW5kbGVyPiloYW5kbGVyCi17Ci0gICAgaWYgKGhhbmRsZXIgPT0g
X2NvbW1hbmREb21haW5IYW5kbGVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBbX2NvbW1hbmRE
b21haW5IYW5kbGVyIHJlbGVhc2VdOwotICAgIF9jb21tYW5kRG9tYWluSGFuZGxlciA9IFtoYW5k
bGVyIHJldGFpbl07Ci0KLSAgICBhdXRvIGFsdGVybmF0ZURpc3BhdGNoZXIgPSBtYWtlVW5pcXVl
PE9iakNJbnNwZWN0b3JDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI+KGhhbmRsZXIpOwot
ICAgIGF1dG8gYWx0ZXJuYXRlQWdlbnQgPSBtYWtlVW5pcXVlPEFsdGVybmF0ZURpc3BhdGNoYWJs
ZUFnZW50PENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlciwgQWx0ZXJuYXRlQ29tbWFuZERv
bWFpbkJhY2tlbmREaXNwYXRjaGVyPj4oIkNvbW1hbmREb21haW4iX3MsICpfY29udHJvbGxlciwg
V1RGTW92ZShhbHRlcm5hdGVEaXNwYXRjaGVyKSk7Ci0gICAgX2NvbnRyb2xsZXItPmFwcGVuZEV4
dHJhQWdlbnQoV1RGTW92ZShhbHRlcm5hdGVBZ2VudCkpOwotfQotCi0tIChpZDxUZXN0UHJvdG9j
b2xDb21tYW5kRG9tYWluRG9tYWluSGFuZGxlcj4pY29tbWFuZERvbWFpbkhhbmRsZXIKLXsKLSAg
ICByZXR1cm4gX2NvbW1hbmREb21haW5IYW5kbGVyOwotfQotCi0tIChUZXN0UHJvdG9jb2xFdmVu
dERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqKWV2ZW50RG9tYWluRXZlbnREaXNwYXRjaGVy
Ci17Ci0gICAgaWYgKCFfZXZlbnREb21haW5FdmVudERpc3BhdGNoZXIpCi0gICAgICAgIF9ldmVu
dERvbWFpbkV2ZW50RGlzcGF0Y2hlciA9IFtbVGVzdFByb3RvY29sRXZlbnREb21haW5Eb21haW5F
dmVudERpc3BhdGNoZXIgYWxsb2NdIGluaXRXaXRoQ29udHJvbGxlcjpfY29udHJvbGxlcl07Ci0g
ICAgcmV0dXJuIF9ldmVudERvbWFpbkV2ZW50RGlzcGF0Y2hlcjsKLX0KLQotQGVuZAotCi0KLSMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2lt
cG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDx3dGYvSlNPTlZh
bHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW1wbGVtZW50YXRpb24g
VGVzdFByb3RvY29sRXZlbnREb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIKLXsKLSAgICBBdWdt
ZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotfQotCi0tIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIq
KWNvbnRyb2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikK
LSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRy
b2xsZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWV2ZW50
V2l0aEVudW1QYXJhbWV0ZXJXaXRoUGFyYW1ldGVyOihUZXN0UHJvdG9jb2xFdmVudERvbWFpbkV2
ZW50V2l0aEVudW1QYXJhbWV0ZXJQYXJhbWV0ZXIpcGFyYW1ldGVyCi17Ci0gICAgY29uc3QgRnJv
bnRlbmRSb3V0ZXImIHJvdXRlciA9IF9jb250cm9sbGVyLT5mcm9udGVuZFJvdXRlcigpOwotCi0g
ICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkV2ZW50RG9tYWluLmV2
ZW50V2l0aEVudW1QYXJhbWV0ZXIiX3MpOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHBhcmFtc09i
amVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJp
bmcoInBhcmFtZXRlciJfcywgdG9Qcm90b2NvbFN0cmluZyhwYXJhbWV0ZXIpKTsKLSAgICBqc29u
TWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiX3MsIFdURk1vdmUocGFyYW1zT2JqZWN0KSk7Ci0g
ICAgcm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwotfQotCi1A
ZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLSNpbXBv
cnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KLQotCi0KLQotdHlwZWRl
ZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sUGxhdGZvcm0pIHsKLSAgICBUZXN0UHJv
dG9jb2xQbGF0Zm9ybUFsbCwKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWMsCi0gICAg
VGVzdFByb3RvY29sUGxhdGZvcm1JT1MsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUywK
LX07Ci0KLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sVHlwZURvbWFp
bkVudW0pIHsKLSAgICBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bVNoYXJlZCwKLSAgICBUZXN0
UHJvdG9jb2xUeXBlRG9tYWluRW51bVJlZCwKLSAgICBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51
bUdyZWVuLAotICAgIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtQmx1ZSwKLX07Ci0KLQotCi1A
cHJvdG9jb2wgVGVzdFByb3RvY29sQ29tbWFuZERvbWFpbkRvbWFpbkhhbmRsZXIgPE5TT2JqZWN0
PgotQG9wdGlvbmFsCi0tICh2b2lkKWNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlV2l0aEVycm9y
Q2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3ND
YWxsYmFjazoodm9pZCheKShUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluQ29tbWFuZFdpdGhFbnVt
UmV0dXJuVmFsdWVSZXR1cm5WYWx1ZSByZXR1cm5WYWx1ZSkpc3VjY2Vzc0NhbGxiYWNrOwotQGVu
ZAotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2Ug
VGVzdFByb3RvY29sRXZlbnREb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgOiBOU09iamVjdAot
LSAodm9pZClldmVudFdpdGhFbnVtUGFyYW1ldGVyV2l0aFBhcmFtZXRlcjooVGVzdFByb3RvY29s
RXZlbnREb21haW5FdmVudFdpdGhFbnVtUGFyYW1ldGVyUGFyYW1ldGVyKXBhcmFtZXRlcjsKLUBl
bmQKLQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxp
dHlPYmplY3RzLmg+Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3Rv
Y29sSlNPTk9iamVjdFByaXZhdGUuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRh
YmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQot
QGludGVyZmFjZSBUZXN0UHJvdG9jb2xFdmVudERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAo
UHJpdmF0ZSkKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEluc3BlY3Rvcjo6
QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyOwotQGVuZAotCi0KLSMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBlbnVtLXZhbHVlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9y
L1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsK
LQotdGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgotT3B0aW9uYWw8T2JqQ0VudW1UeXBl
PiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0KLWlubGluZSBTdHJp
bmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xQbGF0Zm9ybSB2YWx1ZSkKLXsKLSAgICBz
d2l0Y2godmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOgotICAgICAg
ICByZXR1cm4gImFsbCJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzoK
LSAgICAgICAgcmV0dXJuICJnZW5lcmljIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZv
cm1JT1M6Ci0gICAgICAgIHJldHVybiAiaW9zIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxh
dGZvcm1NYWNPUzoKLSAgICAgICAgcmV0dXJuICJtYWNvcyJfczsKLSAgICB9Ci19Ci0KLXRlbXBs
YXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xQbGF0Zm9ybT4gZnJvbVByb3RvY29s
U3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJhbGwiKQot
ICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1BbGw7Ci0gICAgaWYgKHZhbHVlID09
ICJnZW5lcmljIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzsK
LSAgICBpZiAodmFsdWUgPT0gImlvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0
Zm9ybUlPUzsKLSAgICBpZiAodmFsdWUgPT0gIm1hY29zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQ
cm90b2NvbFBsYXRmb3JtTWFjT1M7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotCi1p
bmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0g
dmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xUeXBl
RG9tYWluRW51bVNoYXJlZDoKLSAgICAgICAgcmV0dXJuICJzaGFyZWQiX3M7Ci0gICAgY2FzZSBU
ZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bVJlZDoKLSAgICAgICAgcmV0dXJuICJyZWQiX3M7Ci0g
ICAgY2FzZSBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bUdyZWVuOgotICAgICAgICByZXR1cm4g
ImdyZWVuIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1CbHVlOgotICAg
ICAgICByZXR1cm4gImJsdWUiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0
aW9uYWw8VGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0+IGZyb21Qcm90b2NvbFN0cmluZyhjb25z
dCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAic2hhcmVkIikKLSAgICAgICAg
cmV0dXJuIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtU2hhcmVkOwotICAgIGlmICh2YWx1ZSA9
PSAicmVkIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtUmVkOwot
ICAgIGlmICh2YWx1ZSA9PSAiZ3JlZW4iKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sVHlw
ZURvbWFpbkVudW1HcmVlbjsKLSAgICBpZiAodmFsdWUgPT0gImJsdWUiKQotICAgICAgICByZXR1
cm4gVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1CbHVlOwotICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVt
LXZhbHVlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotCi0jaW1wb3J0ICJUZXN0
UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKLSNpbXBvcnQg
PFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0KLXVzaW5nIG5h
bWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zIChUeXBlRG9tYWluRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZVR5cGVEb21haW5FbnVtOihO
U051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLQotQGVuZAotCi1A
aW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChUeXBlRG9tYWluRG9t
YWluKQotCi0rICh2b2lkKV9wYXJzZVR5cGVEb21haW5FbnVtOihOU051bWJlciAqKilvdXRWYWx1
ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFE
X1RZUEUocGF5bG9hZCwgW05TU3RyaW5nIGNsYXNzXSk7Ci0gICAgT3B0aW9uYWw8VGVzdFByb3Rv
Y29sVHlwZURvbWFpbkVudW0+IHJlc3VsdCA9IEluc3BlY3Rvcjo6ZnJvbVByb3RvY29sU3RyaW5n
PFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtPihwYXlsb2FkKTsKLSAgICBUSFJPV19FWENFUFRJ
T05fRk9SX0JBRF9FTlVNX1ZBTFVFKHJlc3VsdCwgQCJUeXBlRG9tYWluRW51bSIpOwotICAgICpv
dXRWYWx1ZSA9IEAocmVzdWx0LnZhbHVlKCkpOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbFR5cGVzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12
YWx1ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0j
aW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05P
YmplY3RQcml2YXRlLmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3Rm
L0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0KLQotIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZXZlbnQt
dGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1yZXN1bHQgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBl
Y3RlZC9ldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29u
LXJlc3VsdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDg5YTk3ZmY1NWQuLjAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9nZW5lcmljL2V4cGVjdGVkL2V2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVn
Z2FibGVUeXBlLmpzb24tcmVzdWx0CisrKyAvZGV2L251bGwKQEAgLTEsMTA2MyArMCwwIEBACi0j
IyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVi
dWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0vLyBEb21haW4KLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIkRvbWFpbiIs
IG51bGwpOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIkRvbWFpbi5Db21tYW5k
IiwgbnVsbCwgW10sIFtdKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudCgiRG9tYWlu
LkV2ZW50IiwgWyJwYWdlIiwgIndvcmtlciJdLCBbXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lz
dGVyRG9tYWluRGlzcGF0Y2hlciA9IEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEaXNwYXRjaGVy
LmJpbmQoSW5zcGVjdG9yQmFja2VuZCwgIkRvbWFpbiIpOwotSW5zcGVjdG9yQmFja2VuZC5hY3Rp
dmF0ZURvbWFpbigiRG9tYWluIiwgWyJwYWdlIl0pOwotIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JC
YWNrZW5kQ29tbWFuZHMuanMKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5k
RGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRh
cmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQotI2luY2x1ZGUgIlRlc3RQcm90
b2NvbFR5cGVzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJv
dXRlci5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgQWx0ZXJuYXRlQmFja2Vu
ZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVm
UHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hl
ciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KLSAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2Vu
ZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9
Ci1wcml2YXRlOgotICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0
Y2hlcjsKLX07Ci0KLQotY2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIgOiBw
dWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZpcnR1YWwg
fkFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lk
IENvbW1hbmQobG9uZyBjYWxsSWQpID0gMDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgotCi0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0j
IyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5
cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJh
Z21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdHlwZWRlZiBT
dHJpbmcgRXJyb3JTdHJpbmc7Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKLWNsYXNzIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyOwotI2VuZGlm
IC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi1jbGFzcyBEb21h
aW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewotcHVibGljOgotICAgIHZpcnR1YWwgdm9pZCBD
b21tYW5kKEVycm9yU3RyaW5nJikgPSAwOwotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgfkRvbWFp
bkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOwotfTsKLQotY2xhc3MgRG9tYWluQmFja2VuZERp
c3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewot
cHVibGljOgotICAgIHN0YXRpYyBSZWY8RG9tYWluQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShC
YWNrZW5kRGlzcGF0Y2hlciYsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAg
IHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8
SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOwotcHJpdmF0ZToKLSAgICB2b2lkIENvbW1h
bmQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0j
aWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi1wdWJsaWM6Ci0gICAg
dm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRj
aGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVy
bmF0ZURpc3BhdGNoZXI7IH0KLXByaXZhdGU6Ci0gICAgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERp
c3BhdGNoZXIqIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciB7IG51bGxwdHIgfTsKLSNlbmRpZgotcHJp
dmF0ZToKLSAgICBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYsIERv
bWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIERvbWFpbkJhY2tlbmREaXNwYXRj
aGVySGFuZGxlciogbV9hZ2VudCB7IG51bGxwdHIgfTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJs
ZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgot
Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNp
bmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2lmIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQotI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlz
cGF0Y2hlcnMuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotRG9tYWluQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+RG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCkg
eyB9Ci0KLVJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gRG9tYWluQmFja2VuZERpc3BhdGNo
ZXI6OmNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIERvbWFpbkJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgRG9tYWluQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIsIGFnZW50KSk7Ci19
Ci0KLURvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihCYWNr
ZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlciogYWdlbnQpCi0gICAgOiBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNr
ZW5kRGlzcGF0Y2hlcikKLSAgICAsIG1fYWdlbnQoYWdlbnQpCi17Ci0gICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKCJEb21haW4iX3MsIHRoaXMpOwot
fQotCi12b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJ
ZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKLXsK
LSAgICBSZWY8RG9tYWluQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwotCi0gICAg
UmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVyczsKLSAgICBtZXNzYWdlLT5nZXRPYmplY3Qo
InBhcmFtcyJfcywgcGFyYW1ldGVycyk7Ci0KLSAgICBpZiAobWV0aG9kID09ICJDb21tYW5kIikK
LSAgICAgICAgQ29tbWFuZChyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOwotICAgIGVs
c2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNr
ZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRG9tYWluLiIgKyBtZXRob2QgKyAiJyB3
YXMgbm90IGZvdW5kIik7Ci19Ci0KLXZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1h
bmQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCi17Ci0jaWYgRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0gICAgaWYgKG1fYWx0ZXJuYXRlRGlz
cGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPkNvbW1hbmQocmVxdWVz
dElkKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAgRXJyb3JTdHJpbmcg
ZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKLSAgICBtX2FnZW50LT5Db21tYW5kKGVycm9yKTsKLQotICAgIGlmICghZXJyb3IubGVu
Z3RoKCkpCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0
SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVy
RXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0K
LSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEg
b25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPHd0Zi9K
U09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFj
ZSBJbnNwZWN0b3IgewotCi1jbGFzcyBGcm9udGVuZFJvdXRlcjsKLQotY2xhc3MgRG9tYWluRnJv
bnRlbmREaXNwYXRjaGVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoK
LSAgICBEb21haW5Gcm9udGVuZERpc3BhdGNoZXIoRnJvbnRlbmRSb3V0ZXImIGZyb250ZW5kUm91
dGVyKSA6IG1fZnJvbnRlbmRSb3V0ZXIoZnJvbnRlbmRSb3V0ZXIpIHsgfQotICAgIHZvaWQgRXZl
bnQoKTsKLXByaXZhdGU6Ci0gICAgRnJvbnRlbmRSb3V0ZXImIG1fZnJvbnRlbmRSb3V0ZXI7Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5k
RGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMu
Y3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1t
YXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVz
dEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1u
YW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdm9pZCBEb21haW5Gcm9udGVuZERpc3BhdGNoZXI6OkV2
ZW50KCkKLXsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVj
dDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9t
YWluLkV2ZW50Il9zKTsKLQotICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNz
YWdlLT50b0pTT05TdHJpbmcoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0j
IyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UK
LQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNp
bmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0K
LW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLQotCi0KLQotCi0KLQotCi19IC8vIG5hbWVzcGFjZSBQ
cm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sT2JqZWN0cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNw
cAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRhcmdldFR5cGUtbWF0
Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbE9iamVjdHMuaCIKLQotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLW5hbWVzcGFj
ZSBQcm90b2NvbCB7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAot
Ci0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRv
bWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLUBwcm90
b2NvbCBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyOwotCi1uYW1lc3BhY2UgSW5zcGVj
dG9yIHsKLQotCi1jbGFzcyBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmlu
YWwgOiBwdWJsaWMgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIgewotICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIE9iakNJbnNwZWN0b3JEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiBoYW5kbGVy
KSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9Ci0gICAgdm9pZCBDb21tYW5kKGxvbmcgcmVxdWVz
dElkKSBmaW5hbDsKLXByaXZhdGU6Ci0gICAgUmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbERvbWFp
bkRvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLQot
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9t
YWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNr
ZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0j
aW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW5jbHVkZSA8d3RmL0pT
T05WYWx1ZXMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXZvaWQgT2JqQ0luc3BlY3Rv
ckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElkKQotewotICAg
IGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihDb21tYW5kV2l0
aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hl
cjo6TWV0aG9kTm90Rm91bmQsICInRG9tYWluLkNvbW1hbmQnIHdhcyBub3QgZm91bmQiX3MpOwot
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVy
cm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3Io
cmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKLSAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICB9OwotCi0g
ICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2UpOwot
ICAgIH07Ci0KLSAgICBbbV9kZWxlZ2F0ZSBDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JD
YWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKLX0KLQotCi19IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlz
cGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24u
aAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRhcmdldFR5cGUtbWF0
Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5o
PgotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2Ug
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0Ci1AcHJvcGVydHkgKG5vbmF0b21p
YywgcmV0YWluLCBzZXR0ZXI9c2V0RG9tYWluSGFuZGxlcjopIGlkPFRlc3RQcm90b2NvbERvbWFp
bkRvbWFpbkhhbmRsZXI+IGRvbWFpbkhhbmRsZXI7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVh
ZG9ubHkpIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqZG9tYWluRXZl
bnREaXNwYXRjaGVyOwotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbi5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1t
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRj
aGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgi
Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0
ZURpc3BhdGNoYWJsZUFnZW50Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJs
ZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0
b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCi17Ci0gICAg
QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKLSAgICBpZDxUZXN0
UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiBfZG9tYWluSGFuZGxlcjsKLSAgICBUZXN0UHJv
dG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKl9kb21haW5FdmVudERpc3BhdGNoZXI7
Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5z
cGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07
Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9s
bGVyKTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19
Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAgIFtfZG9tYWluSGFuZGxlciByZWxlYXNlXTsKLSAg
ICBbX2RvbWFpbkV2ZW50RGlzcGF0Y2hlciByZWxlYXNlXTsKLSAgICBbc3VwZXIgZGVhbGxvY107
Ci19Ci0KLS0gKHZvaWQpc2V0RG9tYWluSGFuZGxlcjooaWQ8VGVzdFByb3RvY29sRG9tYWluRG9t
YWluSGFuZGxlcj4paGFuZGxlcgotewotICAgIGlmIChoYW5kbGVyID09IF9kb21haW5IYW5kbGVy
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBbX2RvbWFpbkhhbmRsZXIgcmVsZWFzZV07Ci0gICAg
X2RvbWFpbkhhbmRsZXIgPSBbaGFuZGxlciByZXRhaW5dOwotCi0gICAgYXV0byBhbHRlcm5hdGVE
aXNwYXRjaGVyID0gbWFrZVVuaXF1ZTxPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNo
ZXI+KGhhbmRsZXIpOwotICAgIGF1dG8gYWx0ZXJuYXRlQWdlbnQgPSBtYWtlVW5pcXVlPEFsdGVy
bmF0ZURpc3BhdGNoYWJsZUFnZW50PERvbWFpbkJhY2tlbmREaXNwYXRjaGVyLCBBbHRlcm5hdGVE
b21haW5CYWNrZW5kRGlzcGF0Y2hlcj4+KCJEb21haW4iX3MsICpfY29udHJvbGxlciwgV1RGTW92
ZShhbHRlcm5hdGVEaXNwYXRjaGVyKSk7Ci0gICAgX2NvbnRyb2xsZXItPmFwcGVuZEV4dHJhQWdl
bnQoV1RGTW92ZShhbHRlcm5hdGVBZ2VudCkpOwotfQotCi0tIChpZDxUZXN0UHJvdG9jb2xEb21h
aW5Eb21haW5IYW5kbGVyPilkb21haW5IYW5kbGVyCi17Ci0gICAgcmV0dXJuIF9kb21haW5IYW5k
bGVyOwotfQotCi0tIChUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKilk
b21haW5FdmVudERpc3BhdGNoZXIKLXsKLSAgICBpZiAoIV9kb21haW5FdmVudERpc3BhdGNoZXIp
Ci0gICAgICAgIF9kb21haW5FdmVudERpc3BhdGNoZXIgPSBbW1Rlc3RQcm90b2NvbERvbWFpbkRv
bWFpbkV2ZW50RGlzcGF0Y2hlciBhbGxvY10gaW5pdFdpdGhDb250cm9sbGVyOl9jb250cm9sbGVy
XTsKLSAgICByZXR1cm4gX2RvbWFpbkV2ZW50RGlzcGF0Y2hlcjsKLX0KLQotQGVuZAotCi0KLSMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVU
eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2lt
cG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1l
c3BhY2UgSW5zcGVjdG9yOwotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sRG9tYWluRG9t
YWluRXZlbnREaXNwYXRjaGVyCi17Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVy
KiBfY29udHJvbGxlcjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjoo
QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCi17Ci0gICAgc2VsZiA9
IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAg
QVNTRVJUKGNvbnRyb2xsZXIpOwotICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICBy
ZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClFdmVudAotewotICAgIGNvbnN0IEZyb250ZW5kUm91
dGVyJiByb3V0ZXIgPSBfY29udHJvbGxlci0+ZnJvbnRlbmRSb3V0ZXIoKTsKLQotICAgIFJlZjxK
U09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBq
c29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOwotICAg
IHJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKLX0KLQotQGVu
ZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQg
PEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJv
dG9jb2xKU09OT2JqZWN0Lmg+Ci0KLQotCi0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRl
c3RQcm90b2NvbFBsYXRmb3JtKSB7Ci0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1BbGwsCi0gICAg
VGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9T
LAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1MsCi19OwotCi0KLQotCi0KLUBwcm90b2Nv
bCBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyIDxOU09iamVjdD4KLUBvcHRpb25hbAot
LSAodm9pZClDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9y
KSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKSh2b2lkKSlzdWNjZXNzQ2Fs
bGJhY2s7Ci1AZW5kCi0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQot
QGludGVyZmFjZSBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgOiBOU09i
amVjdAotLSAodm9pZClFdmVudDsKLUBlbmQKLQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJ
UHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+Ci0KLSMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudC10YXJnZXRUeXBlLW1hdGNoaW5n
LWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFBy
b3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21l
bnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4K
LQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKFBy
aXZhdGUpCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihJbnNwZWN0b3I6OkF1
Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcjsKLUBlbmQKLQotCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0
UHJvdG9jb2wuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVy
c2lvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9i
akNFbnVtVHlwZT4KLU9wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNv
bnN0IFN0cmluZyYgdmFsdWUpOwotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVz
dFByb3RvY29sUGxhdGZvcm0gdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2Fz
ZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDoKLSAgICAgICAgcmV0dXJuICJhbGwiX3M7Ci0gICAg
Y2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM6Ci0gICAgICAgIHJldHVybiAiZ2VuZXJp
YyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOgotICAgICAgICByZXR1cm4g
ImlvcyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M6Ci0gICAgICAgIHJl
dHVybiAibWFjb3MiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8
VGVzdFByb3RvY29sUGxhdGZvcm0+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZh
bHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiYWxsIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90
b2NvbFBsYXRmb3JtQWxsOwotICAgIGlmICh2YWx1ZSA9PSAiZ2VuZXJpYyIpCi0gICAgICAgIHJl
dHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM7Ci0gICAgaWYgKHZhbHVlID09ICJpb3Mi
KQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1JT1M7Ci0gICAgaWYgKHZhbHVl
ID09ICJtYWNvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOwot
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgot
Ci0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dh
YmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotCi0jaW1wb3J0ICJUZXN0
UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKLSNpbXBvcnQg
PFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0KLXVzaW5nIG5h
bWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotCi0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMu
bW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudC10YXJnZXRUeXBlLW1h
dGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0K
LSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8V2ViSW5z
cGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLSNpbXBvcnQgPHd0Zi9Bc3Nl
cnRpb25zLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2Ug
SW5zcGVjdG9yOwotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmljL2V4cGVjdGVkL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9l
eHBlY3RlZC9ldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0CmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YTk1YmE1NThjZi4uMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhw
ZWN0ZWQvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uLXJlc3VsdAorKysgL2Rl
di9udWxsCkBAIC0xLDEyMTcgKzAsMCBAQAotIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tl
bmRDb21tYW5kcy5qcwotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13
aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0vLyBEYXRhYmFzZQotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRv
bWFpbigiRGF0YWJhc2UiLCBudWxsKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudCgi
RGF0YWJhc2UuZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyIsIG51bGwsIFsiY29sdW1uTmFt
ZXMiLCAibm90ZXMiLCAidGltZXN0YW1wIiwgInZhbHVlcyIsICJwYXlsb2FkIiwgInNxbEVycm9y
IiwgInNjcmVlbkNvbG9yIiwgImFsdGVybmF0ZUNvbG9ycyIsICJwcmludENvbG9yIl0pOwotSW5z
cGVjdG9yQmFja2VuZC5yZWdpc3RlckV2ZW50KCJEYXRhYmFzZS5kaWRFeGVjdXRlTm9PcHRpb25h
bFBhcmFtZXRlcnMiLCBudWxsLCBbImNvbHVtbk5hbWVzIiwgIm5vdGVzIiwgInRpbWVzdGFtcCIs
ICJ2YWx1ZXMiLCAicGF5bG9hZCIsICJzcWxFcnJvciIsICJzY3JlZW5Db2xvciIsICJhbHRlcm5h
dGVDb2xvcnMiLCAicHJpbnRDb2xvciJdKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEYXRh
YmFzZURpc3BhdGNoZXIgPSBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRGlzcGF0Y2hlci5iaW5k
KEluc3BlY3RvckJhY2tlbmQsICJEYXRhYmFzZSIpOwotSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0
ZURvbWFpbigiRGF0YWJhc2UiLCBudWxsKTsKLSMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2Vu
ZENvbW1hbmRzLmpzCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1v
cHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCi0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotCi1uYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKLQotY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGlj
OgotICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVy
PiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hl
cik7IH0KLSAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7
IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Ci1wcml2YXRlOgotICAgIFJlZlB0
cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKLX07Ci0KLQotCi0KLX0g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCi0jIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlz
cGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFy
YW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10eXBl
ZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgot
IyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+
Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0j
aW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgotI2VuZGlmCi0KLW5h
bWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMj
IyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNs
YXNzIEZyb250ZW5kUm91dGVyOwotCi1jbGFzcyBEYXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hlciB7
Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgRGF0YWJhc2VGcm9u
dGVuZERpc3BhdGNoZXIoRnJvbnRlbmRSb3V0ZXImIGZyb250ZW5kUm91dGVyKSA6IG1fZnJvbnRl
bmRSb3V0ZXIoZnJvbnRlbmRSb3V0ZXIpIHsgfQotICAgIHZvaWQgZGlkRXhlY3V0ZU9wdGlvbmFs
UGFyYW1ldGVycyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiBjb2x1bW5OYW1lcywgY29u
c3QgU3RyaW5nKiBub3RlcywgY29uc3QgZG91YmxlKiB0aW1lc3RhbXAsIFJlZlB0cjxKU09OOjpP
YmplY3Q+IHZhbHVlcywgUmVmUHRyPEpTT046OlZhbHVlPiBwYXlsb2FkLCBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBzcWxFcnJvciwgY29uc3QgU3RyaW5nKiBz
Y3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxp
c3Q+IGFsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nKiBwcmludENvbG9yKTsKLSAgICB2b2lk
IGRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJp
bmc+PiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwg
UmVmUHRyPEpTT046Ok9iamVjdD4gdmFsdWVzLCBSZWZQdHI8SlNPTjo6VmFsdWU+IHBheWxvYWQs
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVycm9yLCBj
b25zdCBTdHJpbmcmIHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0
YWJhc2U6OkNvbG9yTGlzdD4gYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcmIHByaW50Q29s
b3IpOwotcHJpdmF0ZToKLSAgICBGcm9udGVuZFJvdXRlciYgbV9mcm9udGVuZFJvdXRlcjsKLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmRE
aXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5j
cHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25h
bC1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNo
ZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRl
ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3Rv
ciB7Ci0KLXZvaWQgRGF0YWJhc2VGcm9udGVuZERpc3BhdGNoZXI6OmRpZEV4ZWN1dGVPcHRpb25h
bFBhcmFtZXRlcnMoUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gY29sdW1uTmFtZXMsIGNv
bnN0IFN0cmluZyogbm90ZXMsIGNvbnN0IGRvdWJsZSogdGltZXN0YW1wLCBSZWZQdHI8SlNPTjo6
T2JqZWN0PiB2YWx1ZXMsIFJlZlB0cjxKU09OOjpWYWx1ZT4gcGF5bG9hZCwgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gc3FsRXJyb3IsIGNvbnN0IFN0cmluZyog
c2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JM
aXN0PiBhbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyogcHJpbnRDb2xvcikKLXsKLSAgICBS
ZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0g
ICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRGF0YWJhc2UuZGlkRXhlY3V0
ZU9wdGlvbmFsUGFyYW1ldGVycyJfcyk7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcGFyYW1zT2Jq
ZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBpZiAoY29sdW1uTmFtZXMpCi0gICAg
ICAgIHBhcmFtc09iamVjdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBjb2x1bW5OYW1lcyk7
Ci0gICAgaWYgKG5vdGVzKQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygibm90ZXMi
X3MsICpub3Rlcyk7Ci0gICAgaWYgKHRpbWVzdGFtcCkKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5z
ZXREb3VibGUoInRpbWVzdGFtcCJfcywgKnRpbWVzdGFtcCk7Ci0gICAgaWYgKHZhbHVlcykKLSAg
ICAgICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgdmFsdWVzKTsKLSAgICBp
ZiAocGF5bG9hZCkKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywg
KnBheWxvYWQpOwotICAgIGlmIChzcWxFcnJvcikKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRP
YmplY3QoInNxbEVycm9yIl9zLCBzcWxFcnJvcik7Ci0gICAgaWYgKHNjcmVlbkNvbG9yKQotICAg
ICAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsICpzY3JlZW5Db2xv
cik7Ci0gICAgaWYgKGFsdGVybmF0ZUNvbG9ycykKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRB
cnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCBhbHRlcm5hdGVDb2xvcnMpOwotICAgIGlmIChwcmlu
dENvbG9yKQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywg
KnByaW50Q29sb3IpOwotICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyJfcywgV1RG
TW92ZShwYXJhbXNPYmplY3QpKTsKLQotICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpz
b25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Ci19Ci0KLXZvaWQgRGF0YWJhc2VGcm9udGVuZERp
c3BhdGNoZXI6OmRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhSZWZQdHI8SlNPTjo6QXJy
YXlPZjxTdHJpbmc+PiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBub3RlcywgZG91YmxlIHRp
bWVzdGFtcCwgUmVmUHRyPEpTT046Ok9iamVjdD4gdmFsdWVzLCBSZWZQdHI8SlNPTjo6VmFsdWU+
IHBheWxvYWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHNx
bEVycm9yLCBjb25zdCBTdHJpbmcmIHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4gYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcm
IHByaW50Q29sb3IpCi17Ci0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJf
cywgIkRhdGFiYXNlLmRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyJfcyk7Ci0gICAgUmVm
PEpTT046Ok9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAg
ICBwYXJhbXNPYmplY3QtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgY29sdW1uTmFtZXMpOwot
ICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJub3RlcyJfcywgbm90ZXMpOwotICAgIHBhcmFt
c09iamVjdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIHRpbWVzdGFtcCk7Ci0gICAgcGFyYW1z
T2JqZWN0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgdmFsdWVzKTsKLSAgICBwYXJhbXNPYmplY3Qt
PnNldFZhbHVlKCJwYXlsb2FkIl9zLCBwYXlsb2FkKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldE9i
amVjdCgic3FsRXJyb3IiX3MsIHNxbEVycm9yKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldFN0cmlu
Zygic2NyZWVuQ29sb3IiX3MsIHNjcmVlbkNvbG9yKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldEFy
cmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIGFsdGVybmF0ZUNvbG9ycyk7Ci0gICAgcGFyYW1zT2Jq
ZWN0LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsIHByaW50Q29sb3IpOwotICAgIGpzb25NZXNz
YWdlLT5zZXRPYmplY3QoInBhcmFtcyJfcywgV1RGTW92ZShwYXJhbXNPYmplY3QpKTsKLQotICAg
IG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9u
dGVuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0
cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9u
YWwtcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
UHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5hbWVzcGFj
ZSBJbnNwZWN0b3IgewotCi0KLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLS8vIEZvcndh
cmQgZGVjbGFyYXRpb25zLgotbmFtZXNwYWNlIERhdGFiYXNlIHsKLWNsYXNzIEVycm9yOwotfSAv
LyBEYXRhYmFzZQotLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgotCi0KLS8vIFR5cGVk
ZWZzLgotbmFtZXNwYWNlIERhdGFiYXNlIHsKLS8qIFVuaXF1ZSBpZGVudGlmaWVyIG9mIERhdGFi
YXNlIG9iamVjdC4gKi8KLXR5cGVkZWYgU3RyaW5nIERhdGFiYXNlSWQ7Ci10eXBlZGVmIFN0cmlu
ZyBQcmltYXJ5Q29sb3JzOwotdHlwZWRlZiBKU09OOjpBcnJheU9mPFN0cmluZz4gQ29sb3JMaXN0
OwotfSAvLyBEYXRhYmFzZQotLy8gRW5kIG9mIHR5cGVkZWZzLgotCi1uYW1lc3BhY2UgRGF0YWJh
c2UgewotLyogRGF0YWJhc2UgZXJyb3IuICovCi1jbGFzcyBFcnJvciA6IHB1YmxpYyBKU09OOjpP
YmplY3RCYXNlIHsKLXB1YmxpYzoKLSAgICBlbnVtIHsKLSAgICAgICAgTm9GaWVsZHNTZXQgPSAw
LAotICAgICAgICBNZXNzYWdlU2V0ID0gMSA8PCAwLAotICAgICAgICBDb2RlU2V0ID0gMSA8PCAx
LAotICAgICAgICBBbGxGaWVsZHNTZXQgPSAoTWVzc2FnZVNldCB8IENvZGVTZXQpCi0gICAgfTsK
LQotICAgIHRlbXBsYXRlPGludCBTVEFURT4KLSAgICBjbGFzcyBCdWlsZGVyIHsKLSAgICBwcml2
YXRlOgotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBtX3Jlc3VsdDsKLQotICAgICAgICB0
ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFU
RSB8IFNURVA+Kj4odGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyKFJlZjwvKkVy
cm9yKi9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQotICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZN
b3ZlKG9iamVjdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRF
ID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwotICAg
ICAgICB9Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBFcnJvcjsKLSAgICBwdWJsaWM6Ci0KLSAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IE1lc3NhZ2VTZXQ+JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYg
dmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBN
ZXNzYWdlU2V0KSwgcHJvcGVydHlfbWVzc2FnZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0U3RyaW5nKCJtZXNzYWdlIl9zLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPE1lc3NhZ2VTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgQ29kZVNldD4mIHNldENvZGUoaW50IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29kZVNldCksIHByb3BlcnR5X2NvZGVfYWxy
ZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldEludGVnZXIoImNvZGUiX3MsIHZh
bHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29kZVNldD4oKTsKLSAgICAgICAg
fQotCi0gICAgICAgIFJlZjxFcnJvcj4gcmVsZWFzZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFk
eSk7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoRXJyb3IpID09IHNpemVvZihK
U09OOjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7Ci0KLSAgICAgICAgICAgIFJlZjxKU09OOjpPYmpl
Y3Q+IGpzb25SZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOwotICAgICAgICAgICAg
YXV0byByZXN1bHQgPSBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxFcnJvcj4qPigmanNv
blJlc3VsdCkpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgIH07
Ci0KLSAgICAvKgotICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKLSAgICAgKiBSZWY8RXJy
b3I+IHJlc3VsdCA9IEVycm9yOjpjcmVhdGUoKQotICAgICAqICAgICAuc2V0TWVzc2FnZSguLi4p
Ci0gICAgICogICAgIC5zZXRDb2RlKC4uLikKLSAgICAgKiAgICAgLnJlbGVhc2UoKTsKLSAgICAg
Ki8KLSAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsK
LSAgICB9Ci19OwotCi19IC8vIERhdGFiYXNlCi0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2Nv
bAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
T2JqZWN0cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFt
ZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotCi0j
aW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgot
Ci1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLX0g
Ly8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW5jbHVkZSA8d3RmL1Jl
dGFpblB0ci5oPgotCi0KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNo
ZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5t
bQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFs
LXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNw
YXRjaGVycy5oIgotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbmNsdWRl
ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVl
cy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0KLSMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8V2Vi
SW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgi
ZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2Jq
ZWN0Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFRlc3RQcm90b2NvbERhdGFiYXNl
RG9tYWluRXZlbnREaXNwYXRjaGVyICpkYXRhYmFzZUV2ZW50RGlzcGF0Y2hlcjsKLUBlbmQKLQot
Ci0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2xDb25maWd1cmF0aW9uLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0j
aW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+Ci0jaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2ltcG9y
dCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0KLXVzaW5n
IG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25m
aWd1cmF0aW9uCi17Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJv
bGxlcjsKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkV2ZW50RGlzcGF0Y2hlciAqX2Rh
dGFiYXNlRXZlbnREaXNwYXRjaGVyOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250
cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAg
ICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5p
bDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVy
OwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBbX2RhdGFi
YXNlRXZlbnREaXNwYXRjaGVyIHJlbGVhc2VdOwotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQot
LSAoVGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5FdmVudERpc3BhdGNoZXIgKilkYXRhYmFzZUV2
ZW50RGlzcGF0Y2hlcgotewotICAgIGlmICghX2RhdGFiYXNlRXZlbnREaXNwYXRjaGVyKQotICAg
ICAgICBfZGF0YWJhc2VFdmVudERpc3BhdGNoZXIgPSBbW1Rlc3RQcm90b2NvbERhdGFiYXNlRG9t
YWluRXZlbnREaXNwYXRjaGVyIGFsbG9jXSBpbml0V2l0aENvbnRyb2xsZXI6X2NvbnRyb2xsZXJd
OwotICAgIHJldHVybiBfZGF0YWJhc2VFdmVudERpc3BhdGNoZXI7Ci19Ci0KLUBlbmQKLQotCi0j
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgi
Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9y
OwotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5FdmVudERpc3Bh
dGNoZXIKLXsKLSAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVy
OwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUlu
c3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRd
OwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJv
bGxlcik7Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwot
fQotCi0tICh2b2lkKWRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnNXaXRoQ29sdW1uTmFtZXM6
KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKiljb2x1bW5OYW1lcyBub3RlczooTlNTdHJpbmcgKiop
bm90ZXMgdGltZXN0YW1wOihkb3VibGUgKil0aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90b2NvbEpT
T05PYmplY3QgKiopdmFsdWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKilwYXls
b2FkIHNxbEVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqKXNxbEVycm9yIHNjcmVl
bkNvbG9yOihOU1N0cmluZyAqKilzY3JlZW5Db2xvciBhbHRlcm5hdGVDb2xvcnM6KE5TQXJyYXkv
KjxOU1N0cmluZz4qLyAqKilhbHRlcm5hdGVDb2xvcnMgcHJpbnRDb2xvcjooTlNTdHJpbmcgKiop
cHJpbnRDb2xvcgotewotICAgIGNvbnN0IEZyb250ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29udHJv
bGxlci0+ZnJvbnRlbmRSb3V0ZXIoKTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09Q
VElPTkFMX1BBUkFNRVRFUihjb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOwotICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihub3RlcywgQCJub3RlcyIpOwot
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUih2YWx1ZXMsIEAi
dmFsdWVzIik7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVS
KHBheWxvYWQsIEAicGF5bG9hZCIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElP
TkFMX1BBUkFNRVRFUihzcWxFcnJvciwgQCJzcWxFcnJvciIpOwotICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihzY3JlZW5Db2xvciwgQCJzY3JlZW5Db2xvciIp
OwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihhbHRlcm5h
dGVDb2xvcnMsIEAiYWx0ZXJuYXRlQ29sb3JzIik7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9C
QURfT1BUSU9OQUxfUEFSQU1FVEVSKHByaW50Q29sb3IsIEAicHJpbnRDb2xvciIpOwotCi0gICAg
UmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwot
ICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRhdGFiYXNlLmRpZEV4ZWN1
dGVPcHRpb25hbFBhcmFtZXRlcnMiX3MpOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHBhcmFtc09i
amVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgaWYgKGNvbHVtbk5hbWVzKQotICAg
ICAgICBwYXJhbXNPYmplY3QtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgdG9KU09OU3RyaW5n
QXJyYXkoKCpjb2x1bW5OYW1lcykpKTsKLSAgICBpZiAobm90ZXMpCi0gICAgICAgIHBhcmFtc09i
amVjdC0+c2V0U3RyaW5nKCJub3RlcyJfcywgKCpub3RlcykpOwotICAgIGlmICh0aW1lc3RhbXAp
Ci0gICAgICAgIHBhcmFtc09iamVjdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICgqdGltZXN0
YW1wKSk7Ci0gICAgaWYgKHZhbHVlcykKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3Qo
InZhbHVlcyJfcywgWygqdmFsdWVzKSB0b0pTT05PYmplY3RdKTsKLSAgICBpZiAocGF5bG9hZCkK
LSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgWygqcGF5bG9hZCkg
dG9KU09OT2JqZWN0XSk7Ci0gICAgaWYgKHNxbEVycm9yKQotICAgICAgICBwYXJhbXNPYmplY3Qt
PnNldE9iamVjdCgic3FsRXJyb3IiX3MsIFsoKnNxbEVycm9yKSB0b0pTT05PYmplY3RdKTsKLSAg
ICBpZiAoc2NyZWVuQ29sb3IpCi0gICAgICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJzY3Jl
ZW5Db2xvciJfcywgKCpzY3JlZW5Db2xvcikpOwotICAgIGlmIChhbHRlcm5hdGVDb2xvcnMpCi0g
ICAgICAgIHBhcmFtc09iamVjdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgdG9KU09O
U3RyaW5nQXJyYXkoKCphbHRlcm5hdGVDb2xvcnMpKSk7Ci0gICAgaWYgKHByaW50Q29sb3IpCi0g
ICAgICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCAoKnByaW50Q29s
b3IpKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiX3MsIFdURk1vdmUocGFy
YW1zT2JqZWN0KSk7Ci0gICAgcm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3Ry
aW5nKCkpOwotfQotCi0tICh2b2lkKWRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1dpdGhD
b2x1bW5OYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMgbm90ZXM6KE5T
U3RyaW5nICopbm90ZXMgdGltZXN0YW1wOihkb3VibGUpdGltZXN0YW1wIHZhbHVlczooUldJUHJv
dG9jb2xKU09OT2JqZWN0ICopdmFsdWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAq
KXBheWxvYWQgc3FsRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKilzcWxFcnJvciBz
Y3JlZW5Db2xvcjooTlNTdHJpbmcgKilzY3JlZW5Db2xvciBhbHRlcm5hdGVDb2xvcnM6KE5TQXJy
YXkvKjxOU1N0cmluZz4qLyAqKWFsdGVybmF0ZUNvbG9ycyBwcmludENvbG9yOihOU1N0cmluZyAq
KXByaW50Q29sb3IKLXsKLSAgICBjb25zdCBGcm9udGVuZFJvdXRlciYgcm91dGVyID0gX2NvbnRy
b2xsZXItPmZyb250ZW5kUm91dGVyKCk7Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJ
UkVEX1BBUkFNRVRFUihjb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOwotICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG5vdGVzLCBAIm5vdGVzIik7Ci0gICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIodmFsdWVzLCBAInZhbHVlcyIpOwot
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHBheWxvYWQsIEAicGF5
bG9hZCIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHNxbEVy
cm9yLCBAInNxbEVycm9yIik7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJB
TUVURVIoc2NyZWVuQ29sb3IsIEAic2NyZWVuQ29sb3IiKTsKLSAgICBUSFJPV19FWENFUFRJT05f
Rk9SX1JFUVVJUkVEX1BBUkFNRVRFUihhbHRlcm5hdGVDb2xvcnMsIEAiYWx0ZXJuYXRlQ29sb3Jz
Iik7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIocHJpbnRDb2xv
ciwgQCJwcmludENvbG9yIik7Ci0KLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9
IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0
aG9kIl9zLCAiRGF0YWJhc2UuZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIl9zKTsKLSAg
ICBSZWY8SlNPTjo6T2JqZWN0PiBwYXJhbXNPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OwotICAgIHBhcmFtc09iamVjdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB0b0pTT05TdHJp
bmdBcnJheShjb2x1bW5OYW1lcykpOwotICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJub3Rl
cyJfcywgbm90ZXMpOwotICAgIHBhcmFtc09iamVjdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3Ms
IHRpbWVzdGFtcCk7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgW3Zh
bHVlcyB0b0pTT05PYmplY3RdKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldFZhbHVlKCJwYXlsb2Fk
Il9zLCBbcGF5bG9hZCB0b0pTT05PYmplY3RdKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldE9iamVj
dCgic3FsRXJyb3IiX3MsIFtzcWxFcnJvciB0b0pTT05PYmplY3RdKTsKLSAgICBwYXJhbXNPYmpl
Y3QtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsIHNjcmVlbkNvbG9yKTsKLSAgICBwYXJhbXNP
YmplY3QtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KGFs
dGVybmF0ZUNvbG9ycykpOwotICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJwcmludENvbG9y
Il9zLCBwcmludENvbG9yKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiX3Ms
IFdURk1vdmUocGFyYW1zT2JqZWN0KSk7Ci0gICAgcm91dGVyLnNlbmRFdmVudChqc29uTWVzc2Fn
ZS0+dG9KU09OU3RyaW5nKCkpOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wu
aAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFs
LXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2ltcG9ydCA8V2ViSW5z
cGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgotCi0KLUBjbGFzcyBUZXN0UHJvdG9jb2xE
YXRhYmFzZUVycm9yOwotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xQ
bGF0Zm9ybSkgewotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsLAotICAgIFRlc3RQcm90b2Nv
bFBsYXRmb3JtR2VuZXJpYywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUywKLSAgICBUZXN0
UHJvdG9jb2xQbGF0Zm9ybU1hY09TLAotfTsKLQotCi0KLQotX19hdHRyaWJ1dGVfXygodmlzaWJp
bGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3Ig
OiBSV0lQcm90b2NvbEpTT05PYmplY3QKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6
KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkOwotLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmpl
Y3Q7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2Ug
Y29kZTooaW50KWNvZGU7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29w
eSkgTlNTdHJpbmcgKm1lc3NhZ2U7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21p
YywgYXNzaWduKSBpbnQgY29kZTsKLUBlbmQKLQotCi0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxp
dHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkV2
ZW50RGlzcGF0Y2hlciA6IE5TT2JqZWN0Ci0tICh2b2lkKWRpZEV4ZWN1dGVPcHRpb25hbFBhcmFt
ZXRlcnNXaXRoQ29sdW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKiljb2x1bW5OYW1l
cyBub3RlczooTlNTdHJpbmcgKiopbm90ZXMgdGltZXN0YW1wOihkb3VibGUgKil0aW1lc3RhbXAg
dmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKiopdmFsdWVzIHBheWxvYWQ6KFJXSVByb3Rv
Y29sSlNPTk9iamVjdCAqKilwYXlsb2FkIHNxbEVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVy
cm9yICoqKXNxbEVycm9yIHNjcmVlbkNvbG9yOihOU1N0cmluZyAqKilzY3JlZW5Db2xvciBhbHRl
cm5hdGVDb2xvcnM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKilhbHRlcm5hdGVDb2xvcnMgcHJp
bnRDb2xvcjooTlNTdHJpbmcgKiopcHJpbnRDb2xvcjsKLS0gKHZvaWQpZGlkRXhlY3V0ZU5vT3B0
aW9uYWxQYXJhbWV0ZXJzV2l0aENvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilj
b2x1bW5OYW1lcyBub3RlczooTlNTdHJpbmcgKilub3RlcyB0aW1lc3RhbXA6KGRvdWJsZSl0aW1l
c3RhbXAgdmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKil2YWx1ZXMgcGF5bG9hZDooUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZCBzcWxFcnJvcjooVGVzdFByb3RvY29sRGF0YWJh
c2VFcnJvciAqKXNxbEVycm9yIHNjcmVlbkNvbG9yOihOU1N0cmluZyAqKXNjcmVlbkNvbG9yIGFs
dGVybmF0ZUNvbG9yczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopYWx0ZXJuYXRlQ29sb3JzIHBy
aW50Q29sb3I6KE5TU3RyaW5nICopcHJpbnRDb2xvcjsKLUBlbmQKLQotCi0jaW1wb3J0IDxXZWJJ
bnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+Ci0KLSMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbElu
dGVybmFsLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1v
cHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2xKU09OT2JqZWN0UHJpdmF0ZS5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFi
bGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi1A
aW50ZXJmYWNlIFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluRXZlbnREaXNwYXRjaGVyIChQcml2
YXRlKQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooSW5zcGVjdG9yOjpBdWdt
ZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXI7Ci1AZW5kCi0KLQotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBv
cnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KLQotbmFtZXNw
YWNlIEluc3BlY3RvciB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KLU9wdGlv
bmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUp
OwotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sUGxhdGZvcm0g
dmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0
Zm9ybUFsbDoKLSAgICAgICAgcmV0dXJuICJhbGwiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQ
bGF0Zm9ybUdlbmVyaWM6Ci0gICAgICAgIHJldHVybiAiZ2VuZXJpYyJfczsKLSAgICBjYXNlIFRl
c3RQcm90b2NvbFBsYXRmb3JtSU9TOgotICAgICAgICByZXR1cm4gImlvcyJfczsKLSAgICBjYXNl
IFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M6Ci0gICAgICAgIHJldHVybiAibWFjb3MiX3M7Ci0g
ICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sUGxhdGZv
cm0+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2
YWx1ZSA9PSAiYWxsIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOwot
ICAgIGlmICh2YWx1ZSA9PSAiZ2VuZXJpYyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQ
bGF0Zm9ybUdlbmVyaWM7Ci0gICAgaWYgKHZhbHVlID09ICJpb3MiKQotICAgICAgICByZXR1cm4g
VGVzdFByb3RvY29sUGxhdGZvcm1JT1M7Ci0gICAgaWYgKHZhbHVlID09ICJtYWNvcyIpCi0gICAg
ICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOwotICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7Ci19Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90
b2NvbFR5cGVQYXJzZXIuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05P
YmplY3RQcml2YXRlLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbnRlcmZh
Y2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChEYXRhYmFzZURvbWFpbikKLQotKyAodm9p
ZClfcGFyc2VEYXRhYmFzZUlkOihOU1N0cmluZyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQp
cGF5bG9hZDsKLSsgKHZvaWQpX3BhcnNlUHJpbWFyeUNvbG9yczooTlNTdHJpbmcgKiopb3V0VmFs
dWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZUNvbG9yTGlzdDooTlNB
cnJheS8qPE5TU3RyaW5nPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwot
KyAodm9pZClfcGFyc2VFcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKilvdXRWYWx1
ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChEYXRhYmFzZURvbWFpbikKLQotKyAodm9pZClfcGFy
c2VEYXRhYmFzZUlkOihOU1N0cmluZyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9h
ZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TU3RyaW5n
IGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gKE5TU3RyaW5nICopcGF5bG9hZDsKLX0KLQotKyAo
dm9pZClfcGFyc2VQcmltYXJ5Q29sb3JzOihOU1N0cmluZyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9h
ZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9h
ZCwgW05TU3RyaW5nIGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gKE5TU3RyaW5nICopcGF5bG9h
ZDsKLX0KLQotKyAodm9pZClfcGFyc2VDb2xvckxpc3Q6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAq
KilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TQXJyYXkvKjxOU1N0cmluZz4qLyBjbGFzc10pOwot
ICAgICpvdXRWYWx1ZSA9IChOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilwYXlsb2FkOwotfQotCi0r
ICh2b2lkKV9wYXJzZUVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqKW91dFZhbHVl
IGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURf
VFlQRShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gW1tU
ZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07
Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAi
VGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJp
dmF0ZS5oPgotI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFs
dWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotQGltcGxlbWVudGF0aW9u
IFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IKLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5
bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZAotewot
ICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0g
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AibWVzc2Fn
ZSJdLCBAIm1lc3NhZ2UiKTsKLSAgICBzZWxmLm1lc3NhZ2UgPSBwYXlsb2FkW0AibWVzc2FnZSJd
OwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0Ai
Y29kZSJdLCBAImNvZGUiKTsKLSAgICBzZWxmLmNvZGUgPSBbcGF5bG9hZFtAImNvZGUiXSBpbnRl
Z2VyVmFsdWVdOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopb2JqZWN0Ci17Ci0gICAg
aWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEpTT05PYmplY3Q6W29iamVjdCB0b0pTT05PYmpl
Y3RdLmdldCgpXSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0K
LQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlIGNv
ZGU6KGludCljb2RlCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAg
IHJldHVybiBuaWw7Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZ
KG1lc3NhZ2UsIEAibWVzc2FnZSIpOwotCi0gICAgc2VsZi5tZXNzYWdlID0gbWVzc2FnZTsKLSAg
ICBzZWxmLmNvZGUgPSBjb2RlOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpc2V0
TWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlCi17Ci0gICAgW3N1cGVyIHNldFN0cmluZzptZXNz
YWdlIGZvcktleTpAIm1lc3NhZ2UiXTsKLX0KLQotLSAoTlNTdHJpbmcgKiltZXNzYWdlCi17Ci0g
ICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJtZXNzYWdlIl07Ci19Ci0KLS0gKHZvaWQp
c2V0Q29kZTooaW50KWNvZGUKLXsKLSAgICBbc3VwZXIgc2V0SW50ZWdlcjpjb2RlIGZvcktleTpA
ImNvZGUiXTsKLX0KLQotLSAoaW50KWNvZGUKLXsKLSAgICByZXR1cm4gW3N1cGVyIGludGVnZXJG
b3JLZXk6QCJjb2RlIl07Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlwZS1t
YXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24t
Y29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLWVy
cm9yCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMTMwYWQ3MGM0MC4uMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1jb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWlu
LWRlYnVnZ2FibGVUeXBlLmpzb24tZXJyb3IKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1F
UlJPUjogTWFsZm9ybWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9uOiBkb21haW4gRG9tYWluIGhhcyBh
biBpdGVtIGluIHRhcmdldFR5cGVzICJbdSd3b3JrZXInXSIgdGhhdCBpcyBub3Qgc3VwcG9ydGVk
IGJ5IGFueSB2YWx1ZSBpbiBkZWJ1Z2dhYmxlVHlwZXMgIlt1J2phdmFzY3JpcHQnXSIuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2Vu
ZXJpYy9leHBlY3RlZC9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlwZXMtdHlwZS5qc29uLWVycm9y
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMv
ZXhwZWN0ZWQvZmFpbC1vbi1jb21tYW5kLXRhcmdldFR5cGVzLXR5cGUuanNvbi1lcnJvcgpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTlmNWUxYTRhOGUuLjAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4
cGVjdGVkL2ZhaWwtb24tY29tbWFuZC10YXJnZXRUeXBlcy10eXBlLmpzb24tZXJyb3IKKysrIC9k
ZXYvbnVsbApAQCAtMSArMCwwIEBACi1FUlJPUjogTWFsZm9ybWVkIGRvbWFpbiBzcGVjaWZpY2F0
aW9uOiB0YXJnZXRUeXBlcyBsaXN0IGZvciBjb21tYW5kIFBhZ2VPbmx5IGlzIG5vdCBhbiBhcnJh
eQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1jb21tYW5kLXRhcmdldFR5cGVzLXZhbHVlLmpz
b24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlwZXMtdmFsdWUuanNvbi1l
cnJvcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjFhMzY1Njk5MjYuLjAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tY29tbWFuZC10YXJnZXRUeXBlcy12YWx1ZS5qc29uLWVy
cm9yCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotRVJST1I6IE1hbGZvcm1lZCBkb21haW4g
c3BlY2lmaWNhdGlvbjogdGFyZ2V0VHlwZXMgbGlzdCBmb3IgY29tbWFuZCBQYWdlT25seSBpcyBh
biB1bnN1cHBvcnRlZCBzdHJpbmcuIFdhczogIlt1J3BhZ2VlJ10iLCBBbGxvd2VkIHZhbHVlczog
c2VydmljZS13b3JrZXIsIGphdmFzY3JpcHQsIHdvcmtlciwgcGFnZSwgd2ViLXBhZ2UKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmljL2V4cGVjdGVkL2ZhaWwtb24tY29tbWFuZC13aXRoLWludmFsaWQtcGxhdGZvcm0uanNvbi1l
cnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmljL2V4cGVjdGVkL2ZhaWwtb24tY29tbWFuZC13aXRoLWludmFsaWQtcGxhdGZvcm0uanNvbi1l
cnJvcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWM2MzZjNTRiN2MuLjAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tY29tbWFuZC13aXRoLWludmFsaWQtcGxhdGZvcm0uanNv
bi1lcnJvcgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUVSUk9SOiBVbmtub3duIHBsYXRm
b3JtOiBpbnZhbGlkCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWRvbWFpbi1kZWJ1Z2dhYmxl
VHlwZXMtdHlwZS5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4tZGVidWdnYWJsZVR5
cGVzLXR5cGUuanNvbi1lcnJvcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmI4OThi
YTdiZTcuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZG9tYWluLWRlYnVnZ2FibGVU
eXBlcy10eXBlLmpzb24tZXJyb3IKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1FUlJPUjog
TWFsZm9ybWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9uOiBkZWJ1Z2dhYmxlVHlwZXMgZm9yIGRvbWFp
biBXZWJPbmx5IGlzIG5vdCBhbiBhcnJheQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1kb21h
aW4tZGVidWdnYWJsZVR5cGVzLXZhbHVlLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWRvbWFp
bi1kZWJ1Z2dhYmxlVHlwZXMtdmFsdWUuanNvbi1lcnJvcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggYmY3MWQ0NzBjYmQuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZG9t
YWluLWRlYnVnZ2FibGVUeXBlcy12YWx1ZS5qc29uLWVycm9yCisrKyAvZGV2L251bGwKQEAgLTEg
KzAsMCBAQAotRVJST1I6IE1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjogZGVidWdnYWJs
ZVR5cGVzIGZvciBkb21haW4gV2ViT25seSBpcyBhbiB1bnN1cHBvcnRlZCBzdHJpbmcuIFdhczog
Ilt1J3dlYmInXSIsIEFsbG93ZWQgdmFsdWVzOiBzZXJ2aWNlLXdvcmtlciwgamF2YXNjcmlwdCwg
cGFnZSwgd2ViLXBhZ2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZG9tYWluLXRhcmdldFR5
cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWls
LW9uLWRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29u
LWVycm9yCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NjdlMzUwMDg5OC4uMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21h
aW4tZGVidWdnYWJsZVR5cGUuanNvbi1lcnJvcgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAK
LUVSUk9SOiBNYWxmb3JtZWQgZG9tYWluIHNwZWNpZmljYXRpb246IGNvbW1hbmQgQ29tbWFuZCBo
YXMgYW4gaXRlbSBpbiB0YXJnZXRUeXBlcyAiW3Und29ya2VyJ10iIHRoYXQgaXMgbm90IHN1cHBv
cnRlZCBieSBhbnkgdmFsdWUgaW4gZGVidWdnYWJsZVR5cGVzICJbdSdqYXZhc2NyaXB0J10iLgpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZXMtdHlwZS5qc29uLWVy
cm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVy
aWMvZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZXMtdHlwZS5qc29uLWVycm9yCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOWEzNTkzM2EzNS4uMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMv
ZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZXMtdHlwZS5qc29uLWVycm9yCisrKyAv
ZGV2L251bGwKQEAgLTEgKzAsMCBAQAotRVJST1I6IE1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNh
dGlvbjogdGFyZ2V0VHlwZXMgZm9yIGRvbWFpbiBQYWdlT25seSBpcyBub3QgYW4gYXJyYXkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZG9tYWluLXRhcmdldFR5cGVzLXZhbHVlLmpzb24tZXJy
b3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJp
Yy9leHBlY3RlZC9mYWlsLW9uLWRvbWFpbi10YXJnZXRUeXBlcy12YWx1ZS5qc29uLWVycm9yCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NjgwN2Y3MmZjNC4uMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMv
ZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZXMtdmFsdWUuanNvbi1lcnJvcgorKysg
L2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUVSUk9SOiBNYWxmb3JtZWQgZG9tYWluIHNwZWNpZmlj
YXRpb246IHRhcmdldFR5cGVzIGZvciBkb21haW4gUGFnZU9ubHkgaXMgYW4gdW5zdXBwb3J0ZWQg
c3RyaW5nLiBXYXM6ICJbdSdwYWdlZSddIiwgQWxsb3dlZCB2YWx1ZXM6IHNlcnZpY2Utd29ya2Vy
LCBqYXZhc2NyaXB0LCB3b3JrZXIsIHBhZ2UsIHdlYi1wYWdlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9m
YWlsLW9uLWR1cGxpY2F0ZS1jb21tYW5kLWNhbGwtcGFyYW1ldGVyLW5hbWVzLmpzb24tZXJyb3Ig
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9l
eHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS1jb21tYW5kLWNhbGwtcGFyYW1ldGVyLW5hbWVzLmpz
b24tZXJyb3IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmNzU2ZGUzMjUwLi4wMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS1jb21tYW5kLWNhbGwtcGFyYW1l
dGVyLW5hbWVzLmpzb24tZXJyb3IKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1FUlJPUjog
TWFsZm9ybWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9uOiBjYWxsIHBhcmFtZXRlciBsaXN0IGZvciBj
b21tYW5kIHByb2Nlc3NQb2ludHMgaGFzIGR1cGxpY2F0ZSBwYXJhbWV0ZXIgbmFtZXMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmljL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLWNvbW1hbmQtcmV0dXJuLXBhcmFtZXRlci1u
YW1lcy5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1yZXR1cm4t
cGFyYW1ldGVyLW5hbWVzLmpzb24tZXJyb3IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGVhMTQ4ZmY2N2M5Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS1j
b21tYW5kLXJldHVybi1wYXJhbWV0ZXItbmFtZXMuanNvbi1lcnJvcgorKysgL2Rldi9udWxsCkBA
IC0xICswLDAgQEAKLUVSUk9SOiBNYWxmb3JtZWQgZG9tYWluIHNwZWNpZmljYXRpb246IHJldHVy
biBwYXJhbWV0ZXIgbGlzdCBmb3IgY29tbWFuZCBwcm9jZXNzUG9pbnRzIGhhcyBkdXBsaWNhdGUg
cGFyYW1ldGVyIG5hbWVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS1ldmVu
dC1wYXJhbWV0ZXItbmFtZXMuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLWV2
ZW50LXBhcmFtZXRlci1uYW1lcy5qc29uLWVycm9yCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBjNzFiYmQyMWMyYy4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNh
dGUtZXZlbnQtcGFyYW1ldGVyLW5hbWVzLmpzb24tZXJyb3IKKysrIC9kZXYvbnVsbApAQCAtMSAr
MCwwIEBACi1FUlJPUjogTWFsZm9ybWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9uOiBwYXJhbWV0ZXIg
bGlzdCBmb3IgZXZlbnQgcHJvY2Vzc2VkUG9pbnRzIGhhcyBkdXBsaWNhdGUgcGFyYW1ldGVyIG5h
bWVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLWRlY2xhcmF0aW9u
cy5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1kZWNsYXJhdGlvbnMu
anNvbi1lcnJvcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDQ3Y2RmOGUyOGUuLjAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLXR5cGUtZGVjbGFyYXRpb25z
Lmpzb24tZXJyb3IKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1FUlJPUjogRHVwbGljYXRl
IHR5cGUgZGVjbGFyYXRpb246IFJ1bnRpbWUuUmVtb3RlT2JqZWN0SWQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVj
dGVkL2ZhaWwtb24tZHVwbGljYXRlLXR5cGUtbWVtYmVyLW5hbWVzLmpzb24tZXJyb3IgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3Rl
ZC9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLW1lbWJlci1uYW1lcy5qc29uLWVycm9yCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNTM3NmE3N2E0NS4uMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0
ZWQvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1tZW1iZXItbmFtZXMuanNvbi1lcnJvcgorKysgL2Rl
di9udWxsCkBAIC0xICswLDAgQEAKLUVSUk9SOiBNYWxmb3JtZWQgZG9tYWluIHNwZWNpZmljYXRp
b246IHR5cGUgZGVjbGFyYXRpb24gZm9yIFBvaW50IGhhcyBkdXBsaWNhdGUgbWVtYmVyIG5hbWVz
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWVudW0td2l0aC1uby12YWx1ZXMuanNvbi1lcnJv
ciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2V4cGVjdGVkL2ZhaWwtb24tZW51bS13aXRoLW5vLXZhbHVlcy5qc29uLWVycm9yCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNjU1YzJiOTA3ZS4uMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0
ZWQvZmFpbC1vbi1lbnVtLXdpdGgtbm8tdmFsdWVzLmpzb24tZXJyb3IKKysrIC9kZXYvbnVsbApA
QCAtMSArMCwwIEBACi1FUlJPUjogVHlwZSByZWZlcmVuY2Ugd2l0aCBlbnVtIHZhbHVlcyBtdXN0
IGhhdmUgYXQgbGVhc3Qgb25lIGVudW0gdmFsdWUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9u
LWV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tZXJy
b3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJp
Yy9leHBlY3RlZC9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVn
Z2FibGVUeXBlLmpzb24tZXJyb3IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2NWQ3
YTBkMTk2Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGUt
bWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tZXJyb3IKKysrIC9kZXYvbnVsbApA
QCAtMSArMCwwIEBACi1FUlJPUjogTWFsZm9ybWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9uOiBldmVu
dCBFdmVudCBoYXMgYW4gaXRlbSBpbiB0YXJnZXRUeXBlcyAiW3Und29ya2VyJ10iIHRoYXQgaXMg
bm90IHN1cHBvcnRlZCBieSBhbnkgdmFsdWUgaW4gZGVidWdnYWJsZVR5cGVzICJbdSdqYXZhc2Ny
aXB0J10iLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1ldmVudC10YXJnZXRUeXBlcy10eXBl
Lmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGVzLXR5cGUuanNvbi1l
cnJvcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzQwM2UxM2E4MDkuLjAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlwZXMtdHlwZS5qc29uLWVycm9y
CisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotRVJST1I6IE1hbGZvcm1lZCBkb21haW4gc3Bl
Y2lmaWNhdGlvbjogdGFyZ2V0VHlwZXMgZm9yIGV2ZW50IFBhZ2VPbmx5IGlzIG5vdCBhbiBhcnJh
eQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1ldmVudC10YXJnZXRUeXBlcy12YWx1ZS5qc29u
LWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1ldmVudC10YXJnZXRUeXBlcy12YWx1ZS5qc29uLWVycm9y
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MzAxMmE5ZmU0ZS4uMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVy
aWMvZXhwZWN0ZWQvZmFpbC1vbi1ldmVudC10YXJnZXRUeXBlcy12YWx1ZS5qc29uLWVycm9yCisr
KyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotRVJST1I6IE1hbGZvcm1lZCBkb21haW4gc3BlY2lm
aWNhdGlvbjogdGFyZ2V0VHlwZXMgZm9yIGV2ZW50IFBhZ2VPbmx5IGlzIGFuIHVuc3VwcG9ydGVk
IHN0cmluZy4gV2FzOiAiW3UncGFnZWUnXSIsIEFsbG93ZWQgdmFsdWVzOiBzZXJ2aWNlLXdvcmtl
ciwgamF2YXNjcmlwdCwgd29ya2VyLCBwYWdlLCB3ZWItcGFnZQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQv
ZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbi1lcnJvciBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4
cGVjdGVkL2ZhaWwtb24tbnVtYmVyLXR5cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24t
ZXJyb3IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3YjJhZjBlNDdlLi4wMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXIt
ZmxhZy5qc29uLWVycm9yCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotRVJST1I6IFRoZSAn
b3B0aW9uYWwnIGZsYWcgZm9yIGEgcGFyYW1ldGVyIG11c3QgYmUgYSBib29sZWFuIGxpdGVyYWwu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRpb25hbC10eXBlLW1l
bWJlci5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtdHlw
ZS1tZW1iZXIuanNvbi1lcnJvcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODZkZjM3
NTBjMWEuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tbnVtYmVyLXR5cGVkLW9wdGlv
bmFsLXR5cGUtbWVtYmVyLmpzb24tZXJyb3IKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1F
UlJPUjogVGhlICdvcHRpb25hbCcgZmxhZyBmb3IgYSB0eXBlIG1lbWJlciBtdXN0IGJlIGEgYm9v
bGVhbiBsaXRlcmFsLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1zdHJpbmctdHlwZWQtb3B0
aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tc3RyaW5nLXR5
cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24tZXJyb3IKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDk3YjJhZjBlNDdlLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9u
LXN0cmluZy10eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29uLWVycm9yCisrKyAvZGV2
L251bGwKQEAgLTEgKzAsMCBAQAotRVJST1I6IFRoZSAnb3B0aW9uYWwnIGZsYWcgZm9yIGEgcGFy
YW1ldGVyIG11c3QgYmUgYSBib29sZWFuIGxpdGVyYWwuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWls
LW9uLXN0cmluZy10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29uLWVycm9yIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQv
ZmFpbC1vbi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNvbi1lcnJvcgpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODZkZjM3NTBjMWEuLjAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4
cGVjdGVkL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24tZXJy
b3IKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1FUlJPUjogVGhlICdvcHRpb25hbCcgZmxh
ZyBmb3IgYSB0eXBlIG1lbWJlciBtdXN0IGJlIGEgYm9vbGVhbiBsaXRlcmFsLgpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMv
ZXhwZWN0ZWQvZmFpbC1vbi10eXBlLWRlY2xhcmF0aW9uLXVzaW5nLXR5cGUtcmVmZXJlbmNlLmpz
b24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXR5cGUtZGVjbGFyYXRpb24tdXNpbmctdHlwZS1yZWZl
cmVuY2UuanNvbi1lcnJvcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDJmNTc1M2E0
MzkuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS1kZWNsYXJhdGlvbi11c2lu
Zy10eXBlLXJlZmVyZW5jZS5qc29uLWVycm9yCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAot
RVJST1I6IFR5cGUgcmVmZXJlbmNlIGNhbm5vdCBoYXZlIGJvdGggJ3R5cGUnIGFuZCAnJHJlZicg
a2V5cy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS1yZWZlcmVuY2UtYXMtcHJpbWl0
aXZlLXR5cGUuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS1yZWZlcmVuY2UtYXMtcHJp
bWl0aXZlLXR5cGUuanNvbi1lcnJvcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDc2
YmMxYzc3NzMuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS1yZWZlcmVuY2Ut
YXMtcHJpbWl0aXZlLXR5cGUuanNvbi1lcnJvcgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAK
LUVSUk9SOiBUeXBlIHJlZmVyZW5jZSAnRGF0YWJhc2VJZCcgaXMgbm90IGEgcHJpbWl0aXZlIHR5
cGUuIEFsbG93ZWQgdmFsdWVzOiBpbnRlZ2VyLCBudW1iZXIsIHN0cmluZywgYm9vbGVhbiwgZW51
bSwgb2JqZWN0LCBhcnJheSwgYW55CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXR5cGUtd2l0
aC1pbnZhbGlkLXBsYXRmb3JtLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXR5cGUtd2l0aC1p
bnZhbGlkLXBsYXRmb3JtLmpzb24tZXJyb3IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGVjNjM2YzU0YjdjLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXR5cGUtd2l0aC1p
bnZhbGlkLXBsYXRmb3JtLmpzb24tZXJyb3IKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1F
UlJPUjogVW5rbm93biBwbGF0Zm9ybTogaW52YWxpZApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1v
bi10eXBlLXdpdGgtbG93ZXJjYXNlLW5hbWUuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tdHlw
ZS13aXRoLWxvd2VyY2FzZS1uYW1lLmpzb24tZXJyb3IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDRlNDYyMjUwYzBhLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXR5cGUt
d2l0aC1sb3dlcmNhc2UtbmFtZS5qc29uLWVycm9yCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBA
QAotRVJST1I6IFR5cGVzIG11c3QgYmVnaW4gd2l0aCBhbiB1cHBlcmNhc2UgY2hhcmFjdGVyLgpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUt
ZGVjbGFyYXRpb24uanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVy
ZW5jZS1pbi10eXBlLWRlY2xhcmF0aW9uLmpzb24tZXJyb3IKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDJkMzhlNjQ2NzVkLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXVu
a25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1kZWNsYXJhdGlvbi5qc29uLWVycm9yCisrKyAv
ZGV2L251bGwKQEAgLTEgKzAsMCBAQAotRVJST1I6IFR5cGUgcmVmZXJlbmNlICdkcmFnb24nIGlz
IG5vdCBhIHByaW1pdGl2ZSB0eXBlLiBBbGxvd2VkIHZhbHVlczogaW50ZWdlciwgbnVtYmVyLCBz
dHJpbmcsIGJvb2xlYW4sIGVudW0sIG9iamVjdCwgYXJyYXksIGFueQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0
ZWQvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtbWVtYmVyLmpzb24tZXJy
b3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJp
Yy9leHBlY3RlZC9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1tZW1iZXIu
anNvbi1lcnJvcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmFmNjY3MmNiZWYuLjAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10
eXBlLW1lbWJlci5qc29uLWVycm9yCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotRVJST1I6
IExvb2t1cCBmYWlsZWQgZm9yIHR5cGUgcmVmZXJlbmNlOiBDb2xvciAocmVmZXJlbmNlZCBmcm9t
IGRvbWFpbjogRmFudGFzeSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2dlbmVyYXRlLWRvbWFpbnMtd2l0
aC1mZWF0dXJlLWd1YXJkcy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2dlbmVyYXRlLWRvbWFpbnMtd2l0
aC1mZWF0dXJlLWd1YXJkcy5qc29uLXJlc3VsdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDk0NmI1M2UzZjguLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2dlbmVyYXRlLWRvbWFpbnMt
d2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uLXJlc3VsdAorKysgL2Rldi9udWxsCkBAIC0xLDEyNDUg
KzAsMCBAQAotIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0
dXJlLWd1YXJkcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLS8vIE5ldHdvcmsxCi1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJOZXR3b3Jr
MSIsIG51bGwpOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIk5ldHdvcmsxLmxv
YWRSZXNvdXJjZSIsIG51bGwsIFtdLCBbXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9t
YWluKCJOZXR3b3JrMSIsIG51bGwpOwotCi0vLyBOZXR3b3JrMwotSW5zcGVjdG9yQmFja2VuZC5y
ZWdpc3RlckRvbWFpbigiTmV0d29yazMiLCBudWxsKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0
ZXJFdmVudCgiTmV0d29yazMucmVzb3VyY2VMb2FkZWQiLCBudWxsLCBbXSk7Ci1JbnNwZWN0b3JC
YWNrZW5kLnJlZ2lzdGVyTmV0d29yazNEaXNwYXRjaGVyID0gSW5zcGVjdG9yQmFja2VuZC5yZWdp
c3RlckRpc3BhdGNoZXIuYmluZChJbnNwZWN0b3JCYWNrZW5kLCAiTmV0d29yazMiKTsKLUluc3Bl
Y3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIk5ldHdvcmszIiwgbnVsbCk7Ci0jIyMgRW5kIEZp
bGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQotI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbFR5cGVzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVu
ZFJvdXRlci5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgQWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIo
UmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0
Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KLSAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFj
a2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgp
OyB9Ci1wcml2YXRlOgotICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlz
cGF0Y2hlcjsKLX07Ci0KLQotI2lmIFBMQVRGT1JNKFdFQl9DT01NQU5EUykKLWNsYXNzIEFsdGVy
bmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERp
c3BhdGNoZXIgewotcHVibGljOgotICAgIHZpcnR1YWwgfkFsdGVybmF0ZU5ldHdvcmsxQmFja2Vu
ZERpc3BhdGNoZXIoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgY2Fs
bElkKSA9IDA7Ci19OwotI2VuZGlmIC8vIFBMQVRGT1JNKFdFQl9DT01NQU5EUykKLQotfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKLSMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVy
ZS1ndWFyZHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdHlw
ZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKLSNpZiBQTEFURk9STShXRUJfQ09NTUFORFMpCi1jbGFzcyBBbHRlcm5h
dGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOwotI2VuZGlmIC8vIFBMQVRGT1JNKFdFQl9DT01N
QU5EUykKLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
LQotI2lmIFBMQVRGT1JNKFdFQl9DT01NQU5EUykKLWNsYXNzIE5ldHdvcmsxQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlKEVy
cm9yU3RyaW5nJikgPSAwOwotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgfk5ldHdvcmsxQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyKCk7Ci19OwotI2VuZGlmIC8vIFBMQVRGT1JNKFdFQl9DT01NQU5E
UykKLQotI2lmIFBMQVRGT1JNKFdFQl9DT01NQU5EUykKLWNsYXNzIE5ldHdvcmsxQmFja2VuZERp
c3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewot
cHVibGljOgotICAgIHN0YXRpYyBSZWY8TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRl
KEJhY2tlbmREaXNwYXRjaGVyJiwgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsK
LSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwg
UmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5hbDsKLXByaXZhdGU6Ci0gICAgdm9pZCBs
b2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1l
dGVycyk7Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi1wdWJs
aWM6Ci0gICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZU5ldHdvcmsxQmFj
a2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRj
aGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQotcHJpdmF0ZToKLSAgICBBbHRlcm5hdGVOZXR3
b3JrMUJhY2tlbmREaXNwYXRjaGVyKiBtX2FsdGVybmF0ZURpc3BhdGNoZXIgeyBudWxscHRyIH07
Ci0jZW5kaWYKLXByaXZhdGU6Ci0gICAgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5k
RGlzcGF0Y2hlciYsIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgTmV0
d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQgeyBudWxscHRyIH07Ci19Owot
I2VuZGlmIC8vIFBMQVRGT1JNKFdFQl9DT01NQU5EUykKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNP
TlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQotI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNl
bmRpZgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotI2lmIFBMQVRGT1JNKFdFQl9DT01NQU5E
UykKLU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+TmV0d29yazFCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXIoKSB7IH0KLSNlbmRpZiAvLyBQTEFURk9STShXRUJfQ09NTUFORFMpCi0K
LSNpZiBQTEFURk9STShXRUJfQ09NTUFORFMpCi1SZWY8TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hl
cj4gTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiBi
YWNrZW5kRGlzcGF0Y2hlciwgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50
KQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIo
YmFja2VuZERpc3BhdGNoZXIsIGFnZW50KSk7Ci19Ci0KLU5ldHdvcmsxQmFja2VuZERpc3BhdGNo
ZXI6Ok5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmRE
aXNwYXRjaGVyLCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCi0gICAg
OiBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKLSAgICAs
IG1fYWdlbnQoYWdlbnQpCi17Ci0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNw
YXRjaGVyRm9yRG9tYWluKCJOZXR3b3JrMSJfcywgdGhpcyk7Ci19Ci0KLXZvaWQgTmV0d29yazFC
YWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYg
bWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCi17Ci0gICAgUmVmPE5ldHdvcmsx
QmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwotCi0gICAgUmVmUHRyPEpTT046Ok9i
amVjdD4gcGFyYW1ldGVyczsKLSAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFy
YW1ldGVycyk7Ci0KLSAgICBpZiAobWV0aG9kID09ICJsb2FkUmVzb3VyY2UiKQotICAgICAgICBs
b2FkUmVzb3VyY2UocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKLSAgICBlbHNlCi0g
ICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERp
c3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmsxLiIgKyBtZXRob2QgKyAiJyB3YXMg
bm90IGZvdW5kIik7Ci19Ci0KLXZvaWQgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJl
c291cmNlKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQotewotI2lmIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotICAgIGlmIChtX2FsdGVybmF0
ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3Vy
Y2UocmVxdWVzdElkKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAgRXJy
b3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKLSAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2UoZXJyb3IpOwotCi0gICAg
aWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJl
c3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQotICAg
ICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNw
YXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOwotfQotI2VuZGlmIC8vIFBMQVRG
T1JNKFdFQl9DT01NQU5EUykKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQg
RmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RG
cm9udGVuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBn
ZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRl
c3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xh
c3MgRnJvbnRlbmRSb3V0ZXI7Ci0KLSNpZiBQTEFURk9STShXRUJfRVZFTlRTKQotY2xhc3MgTmV0
d29yazNGcm9udGVuZERpc3BhdGNoZXIgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwot
cHVibGljOgotICAgIE5ldHdvcmszRnJvbnRlbmREaXNwYXRjaGVyKEZyb250ZW5kUm91dGVyJiBm
cm9udGVuZFJvdXRlcikgOiBtX2Zyb250ZW5kUm91dGVyKGZyb250ZW5kUm91dGVyKSB7IH0KLSAg
ICB2b2lkIHJlc291cmNlTG9hZGVkKCk7Ci1wcml2YXRlOgotICAgIEZyb250ZW5kUm91dGVyJiBt
X2Zyb250ZW5kUm91dGVyOwotfTsKLSNlbmRpZiAvLyBQTEFURk9STShXRUJfRVZFTlRTKQotCi19
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0
Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZl
YXR1cmUtZ3VhcmRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNo
ZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRl
ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3Rv
ciB7Ci0KLSNpZiBQTEFURk9STShXRUJfRVZFTlRTKQotdm9pZCBOZXR3b3JrM0Zyb250ZW5kRGlz
cGF0Y2hlcjo6cmVzb3VyY2VMb2FkZWQoKQotewotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25N
ZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3Ry
aW5nKCJtZXRob2QiX3MsICJOZXR3b3JrMy5yZXNvdXJjZUxvYWRlZCJfcyk7Ci0KLSAgICBtX2Zy
b250ZW5kUm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwotfQot
I2VuZGlmIC8vIFBMQVRGT1JNKFdFQl9FVkVOVFMpCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgotCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi1uYW1l
c3BhY2UgUHJvdG9jb2wgewotCi0KLQotLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCi0jaWYgUExB
VEZPUk0oV0VCX1RZUEVTKQotbmFtZXNwYWNlIE5ldHdvcmsyIHsKLWNsYXNzIE5ldHdvcmtFcnJv
cjsKLX0gLy8gTmV0d29yazIKLSNlbmRpZiAvLyBQTEFURk9STShXRUJfVFlQRVMpCi0vLyBFbmQg
b2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCi0KLQotCi0KLSNpZiBQTEFURk9STShXRUJfVFlQRVMp
Ci1uYW1lc3BhY2UgTmV0d29yazIgewotY2xhc3MgTmV0d29ya0Vycm9yIDogcHVibGljIEpTT046
Ok9iamVjdEJhc2UgewotcHVibGljOgotICAgIGVudW0gewotICAgICAgICBOb0ZpZWxkc1NldCA9
IDAsCi0gICAgICAgIE1lc3NhZ2VTZXQgPSAxIDw8IDAsCi0gICAgICAgIENvZGVTZXQgPSAxIDw8
IDEsCi0gICAgICAgIEFsbEZpZWxkc1NldCA9IChNZXNzYWdlU2V0IHwgQ29kZVNldCkKLSAgICB9
OwotCi0gICAgdGVtcGxhdGU8aW50IFNUQVRFPgotICAgIGNsYXNzIEJ1aWxkZXIgewotICAgIHBy
aXZhdGU6Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVzdWx0OwotCi0gICAgICAg
IHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNU
QVRFIHwgU1RFUD4qPih0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXIoUmVmPC8q
TmV0d29ya0Vycm9yKi9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQotICAgICAgICAgICAgOiBtX3Jl
c3VsdChXVEZNb3ZlKG9iamVjdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3Rh
dGUpOwotICAgICAgICB9Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBOZXR3b3JrRXJyb3I7Ci0gICAg
cHVibGljOgotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2Fn
ZShjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgTWVzc2FnZVNldCksIHByb3BlcnR5X21lc3NhZ2VfYWxyZWFkeV9zZXQp
OwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibWVzc2FnZSJfcywgdmFsdWUpOwot
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNZXNzYWdlU2V0PigpOwotICAgICAgICB9Ci0K
LSAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvZGVTZXQ+JiBzZXRDb2RlKGludCB2YWx1ZSkKLSAg
ICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENvZGVTZXQpLCBw
cm9wZXJ0eV9jb2RlX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJbnRl
Z2VyKCJjb2RlIl9zLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvZGVT
ZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBSZWY8TmV0d29ya0Vycm9yPiByZWxlYXNlKCkK
LSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRz
U2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNp
emVvZihOZXR3b3JrRXJyb3IpID09IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7
Ci0KLSAgICAgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25SZXN1bHQgPSBtX3Jlc3VsdC5y
ZWxlYXNlTm9uTnVsbCgpOwotICAgICAgICAgICAgYXV0byByZXN1bHQgPSBXVEZNb3ZlKCpyZWlu
dGVycHJldF9jYXN0PFJlZjxOZXR3b3JrRXJyb3I+Kj4oJmpzb25SZXN1bHQpKTsKLSAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgLyoKLSAgICAgKiBT
eW50aGV0aWMgY29uc3RydWN0b3I6Ci0gICAgICogUmVmPE5ldHdvcmtFcnJvcj4gcmVzdWx0ID0g
TmV0d29ya0Vycm9yOjpjcmVhdGUoKQotICAgICAqICAgICAuc2V0TWVzc2FnZSguLi4pCi0gICAg
ICogICAgIC5zZXRDb2RlKC4uLikKLSAgICAgKiAgICAgLnJlbGVhc2UoKTsKLSAgICAgKi8KLSAg
ICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKLSAgICB9
Ci19OwotCi19IC8vIE5ldHdvcmsyCi0jZW5kaWYgLy8gUExBVEZPUk0oV0VCX1RZUEVTKQotCi0K
LQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0j
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sT2JqZWN0cy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBn
ZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQot
bmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVj
dHMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMu
aAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0
aC1mZWF0dXJlLWd1YXJkcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLUBwcm90b2Nv
bCBUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI7Ci0KLW5hbWVzcGFjZSBJbnNwZWN0
b3IgewotCi0KLSNpZiBQTEFURk9STShXRUJfQ09NTUFORFMpCi1jbGFzcyBPYmpDSW5zcGVjdG9y
TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVOZXR3b3Jr
MUJhY2tlbmREaXNwYXRjaGVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1Ymxp
YzoKLSAgICBPYmpDSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJv
dG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRs
ZXI7IH0KLSAgICB2b2lkIGxvYWRSZXNvdXJjZShsb25nIHJlcXVlc3RJZCkgZmluYWw7Ci1wcml2
YXRlOgotICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+
PiBtX2RlbGVnYXRlOwotfTsKLSNlbmRpZiAvLyBQTEFURk9STShXRUJfQ09NTUFORFMpCi0KLX0g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tl
bmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlz
cGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1k
b21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90
b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJu
YWwuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbmNsdWRl
IDx3dGYvSlNPTlZhbHVlcy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotI2lmIFBMQVRG
T1JNKFdFQl9DT01NQU5EUykKLXZvaWQgT2JqQ0luc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3Bh
dGNoZXI6OmxvYWRSZXNvdXJjZShsb25nIHJlcXVlc3RJZCkKLXsKLSAgICBpZiAoIVttX2RlbGVn
YXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IobG9hZFJlc291cmNlV2l0aEVycm9yQ2Fs
bGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCkt
PnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9k
Tm90Rm91bmQsICInTmV0d29yazEubG9hZFJlc291cmNlJyB3YXMgbm90IGZvdW5kIl9zKTsKLSAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJv
cikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJl
cXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7Ci0gICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgfTsKLQotICAg
IGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNl
bmRSZXNwb25zZShyZXF1ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKLSAg
ICB9OwotCi0gICAgW21fZGVsZWdhdGUgbG9hZFJlc291cmNlV2l0aEVycm9yQ2FsbGJhY2s6ZXJy
b3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKLX0KLQotI2VuZGlm
IC8vIFBMQVRGT1JNKFdFQl9DT01NQU5EUykKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0K
LSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxX
ZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+Ci0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkg
KCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNP
YmplY3QKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4sIHNldHRlcj1zZXROZXR3b3JrMUhh
bmRsZXI6KSBpZDxUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+IG5ldHdvcmsxSGFu
ZGxlcjsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgVGVzdFByb3RvY29sTmV0d29y
azNEb21haW5FdmVudERpc3BhdGNoZXIgKm5ldHdvcmszRXZlbnREaXNwYXRjaGVyOwotQGVuZAot
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVz
dFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5h
bC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgotI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4K
LSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgot
Ci11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3Rv
Y29sQ29uZmlndXJhdGlvbgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciog
X2NvbnRyb2xsZXI7Ci0gICAgaWQ8VGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyPiBf
bmV0d29yazFIYW5kbGVyOwotICAgIFRlc3RQcm90b2NvbE5ldHdvcmszRG9tYWluRXZlbnREaXNw
YXRjaGVyICpfbmV0d29yazNFdmVudERpc3BhdGNoZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlp
bml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJv
bGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAg
ICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9
IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwotewot
ICAgIFtfbmV0d29yazFIYW5kbGVyIHJlbGVhc2VdOwotICAgIFtfbmV0d29yazNFdmVudERpc3Bh
dGNoZXIgcmVsZWFzZV07Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi0tICh2b2lkKXNldE5l
dHdvcmsxSGFuZGxlcjooaWQ8VGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyPiloYW5k
bGVyCi17Ci0gICAgaWYgKGhhbmRsZXIgPT0gX25ldHdvcmsxSGFuZGxlcikKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgW19uZXR3b3JrMUhhbmRsZXIgcmVsZWFzZV07Ci0gICAgX25ldHdvcmsxSGFu
ZGxlciA9IFtoYW5kbGVyIHJldGFpbl07Ci0KLSAgICBhdXRvIGFsdGVybmF0ZURpc3BhdGNoZXIg
PSBtYWtlVW5pcXVlPE9iakNJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPihoYW5k
bGVyKTsKLSAgICBhdXRvIGFsdGVybmF0ZUFnZW50ID0gbWFrZVVuaXF1ZTxBbHRlcm5hdGVEaXNw
YXRjaGFibGVBZ2VudDxOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyLCBBbHRlcm5hdGVOZXR3b3Jr
MUJhY2tlbmREaXNwYXRjaGVyPj4oIk5ldHdvcmsxIl9zLCAqX2NvbnRyb2xsZXIsIFdURk1vdmUo
YWx0ZXJuYXRlRGlzcGF0Y2hlcikpOwotICAgIF9jb250cm9sbGVyLT5hcHBlbmRFeHRyYUFnZW50
KFdURk1vdmUoYWx0ZXJuYXRlQWdlbnQpKTsKLX0KLQotLSAoaWQ8VGVzdFByb3RvY29sTmV0d29y
azFEb21haW5IYW5kbGVyPiluZXR3b3JrMUhhbmRsZXIKLXsKLSAgICByZXR1cm4gX25ldHdvcmsx
SGFuZGxlcjsKLX0KLQotLSAoVGVzdFByb3RvY29sTmV0d29yazNEb21haW5FdmVudERpc3BhdGNo
ZXIgKiluZXR3b3JrM0V2ZW50RGlzcGF0Y2hlcgotewotICAgIGlmICghX25ldHdvcmszRXZlbnRE
aXNwYXRjaGVyKQotICAgICAgICBfbmV0d29yazNFdmVudERpc3BhdGNoZXIgPSBbW1Rlc3RQcm90
b2NvbE5ldHdvcmszRG9tYWluRXZlbnREaXNwYXRjaGVyIGFsbG9jXSBpbml0V2l0aENvbnRyb2xs
ZXI6X2NvbnRyb2xsZXJdOwotICAgIHJldHVybiBfbmV0d29yazNFdmVudERpc3BhdGNoZXI7Ci19
Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0K
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVy
ZS1ndWFyZHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5n
IG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xOZXR3
b3JrM0RvbWFpbkV2ZW50RGlzcGF0Y2hlcgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29u
dHJvbGxlciogX2NvbnRyb2xsZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRy
b2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgotewotICAg
IHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmls
OwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7
Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpcmVzb3VyY2VMb2FkZWQKLXsKLSAgICBj
b25zdCBGcm9udGVuZFJvdXRlciYgcm91dGVyID0gX2NvbnRyb2xsZXItPmZyb250ZW5kUm91dGVy
KCk7Ci0KLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6
Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiTmV0d29y
azMucmVzb3VyY2VMb2FkZWQiX3MpOwotICAgIHJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2Ut
PnRvSlNPTlN0cmluZygpKTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sRXZlbnREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgt
ZmVhdHVyZS1ndWFyZHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2ltcG9ydCA8V2Vi
SW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgotCi0KLUBjbGFzcyBUZXN0UHJvdG9j
b2xOZXR3b3JrMk5ldHdvcmtFcnJvcjsKLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVz
dFByb3RvY29sUGxhdGZvcm0pIHsKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbCwKLSAgICBU
ZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWMsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1JT1Ms
Ci0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUywKLX07Ci0KLQotCi0KLV9fYXR0cmlidXRl
X18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xOZXR3
b3JrMk5ldHdvcmtFcnJvciA6IFJXSVByb3RvY29sSlNPTk9iamVjdAotLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQ7
Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09O
T2JqZWN0ICopanNvbk9iamVjdDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6KE5T
U3RyaW5nICopbWVzc2FnZSBjb2RlOihpbnQpY29kZTsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0
eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqbWVzc2FnZTsKLS8qIHJlcXVpcmVkICovIEBw
cm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCBjb2RlOwotQGVuZAotCi1AcHJvdG9jb2wg
VGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyIDxOU09iamVjdD4KLUBvcHRpb25hbAot
LSAodm9pZClsb2FkUmVzb3VyY2VXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAq
ZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKHZvaWQpKXN1Y2Nl
c3NDYWxsYmFjazsKLUBlbmQKLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQi
KSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbE5ldHdvcmszRG9tYWluRXZlbnREaXNwYXRjaGVy
IDogTlNPYmplY3QKLS0gKHZvaWQpcmVzb3VyY2VMb2FkZWQ7Ci1AZW5kCi0KLQotI2ltcG9ydCA8
V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgotCi0j
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xJbnRlcm5hbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUt
ZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJU
ZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVl
cy5oPgotCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbE5ldHdvcmszRG9tYWluRXZlbnREaXNwYXRj
aGVyIChQcml2YXRlKQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooSW5zcGVj
dG9yOjpBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXI7Ci1AZW5kCi0K
LQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90
b2NvbC5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9u
cy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0Vu
dW1UeXBlPgotT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3Qg
U3RyaW5nJiB2YWx1ZSk7Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJv
dG9jb2xQbGF0Zm9ybSB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBjYXNlIFRl
c3RQcm90b2NvbFBsYXRmb3JtQWxsOgotICAgICAgICByZXR1cm4gImFsbCJfczsKLSAgICBjYXNl
IFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzoKLSAgICAgICAgcmV0dXJuICJnZW5lcmljIl9z
OwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1JT1M6Ci0gICAgICAgIHJldHVybiAiaW9z
Il9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzoKLSAgICAgICAgcmV0dXJu
ICJtYWNvcyJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0
UHJvdG9jb2xQbGF0Zm9ybT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUp
Ci17Ci0gICAgaWYgKHZhbHVlID09ICJhbGwiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29s
UGxhdGZvcm1BbGw7Ci0gICAgaWYgKHZhbHVlID09ICJnZW5lcmljIikKLSAgICAgICAgcmV0dXJu
IFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzsKLSAgICBpZiAodmFsdWUgPT0gImlvcyIpCi0g
ICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzsKLSAgICBpZiAodmFsdWUgPT0g
Im1hY29zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M7Ci0gICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgot
Ci0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgi
Ci0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0
b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5z
cGVjdG9yOwotCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoTmV0d29y
azJEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlTmV0d29ya0Vycm9yOihUZXN0UHJvdG9jb2xOZXR3
b3JrMk5ldHdvcmtFcnJvciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLQot
QGVuZAotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChOZXR3
b3JrMkRvbWFpbikKLQotKyAodm9pZClfcGFyc2VOZXR3b3JrRXJyb3I6KFRlc3RQcm90b2NvbE5l
dHdvcmsyTmV0d29ya0Vycm9yICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17
Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5
IGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xOZXR3b3JrMk5ldHdvcmtF
cnJvciBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOwotfQotCi1AZW5kCi0KLQotIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50
ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1w
b3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotI2ltcG9y
dCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5n
IG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbE5l
dHdvcmsyTmV0d29ya0Vycm9yCi0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5v
bm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQKLXsKLSAgICBpZiAo
IShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAIm1lc3NhZ2UiXSwgQCJt
ZXNzYWdlIik7Ci0gICAgc2VsZi5tZXNzYWdlID0gcGF5bG9hZFtAIm1lc3NhZ2UiXTsKLQotICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImNvZGUiXSwg
QCJjb2RlIik7Ci0gICAgc2VsZi5jb2RlID0gW3BheWxvYWRbQCJjb2RlIl0gaW50ZWdlclZhbHVl
XTsKLQotICAgIHJldHVybiBzZWxmOwotfQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9j
b2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9iamVjdAotewotICAgIGlmICghKHNl
bGYgPSBbc3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmplY3QgdG9KU09OT2JqZWN0XS5nZXQo
KV0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBjb2RlOihpbnQp
Y29kZQotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4g
bmlsOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShtZXNzYWdl
LCBAIm1lc3NhZ2UiKTsKLQotICAgIHNlbGYubWVzc2FnZSA9IG1lc3NhZ2U7Ci0gICAgc2VsZi5j
b2RlID0gY29kZTsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKXNldE1lc3NhZ2U6
KE5TU3RyaW5nICopbWVzc2FnZQotewotICAgIFtzdXBlciBzZXRTdHJpbmc6bWVzc2FnZSBmb3JL
ZXk6QCJtZXNzYWdlIl07Ci19Ci0KLS0gKE5TU3RyaW5nICopbWVzc2FnZQotewotICAgIHJldHVy
biBbc3VwZXIgc3RyaW5nRm9yS2V5OkAibWVzc2FnZSJdOwotfQotCi0tICh2b2lkKXNldENvZGU6
KGludCljb2RlCi17Ci0gICAgW3N1cGVyIHNldEludGVnZXI6Y29kZSBmb3JLZXk6QCJjb2RlIl07
Ci19Ci0KLS0gKGludCljb2RlCi17Ci0gICAgcmV0dXJuIFtzdXBlciBpbnRlZ2VyRm9yS2V5OkAi
Y29kZSJdOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5t
bQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2dlbmVyaWMvZXhwZWN0ZWQvc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbi1y
ZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2Vu
ZXJpYy9leHBlY3RlZC9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uLXJlc3VsdApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTk0MDIxMTEzODIuLjAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2V4cGVjdGVkL3NhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24tcmVzdWx0CisrKyAv
ZGV2L251bGwKQEAgLTEsOTE0ICswLDAgQEAKLSMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNr
ZW5kQ29tbWFuZHMuanMKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5
cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0jIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwot
Ci0jIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21h
aW4uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJh
Z21hIG9uY2UKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQot
Ci0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1j
bGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBzZXRC
YWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikg
eyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQotICAgIEJhY2tl
bmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2Vu
ZERpc3BhdGNoZXIuZ2V0KCk7IH0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPEJhY2tlbmREaXNwYXRj
aGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwotfTsKLQotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKLSMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMj
IyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0j
aW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10eXBlZGVmIFN0cmluZyBFcnJvclN0
cmluZzsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0
QmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0
Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlk
LWRpZmZlcmVudC1kb21haW4uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNw
YXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRS
b3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi9OZXZl
ckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2lmIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotI2luY2x1ZGUgIlRlc3RBbHRlcm5h
dGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsK
LQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNr
ZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRj
aGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRp
ZmZlcmVudC1kb21haW4uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIK
LSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgRnJvbnRlbmRSb3V0ZXI7Ci0K
LX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNw
YXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50
LWRvbWFpbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5o
IgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Igewot
Ci19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmRE
aXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQt
ZG9tYWluLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2Nv
bFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFtZXNwYWNlIEluc3Bl
Y3RvciB7Ci0KLQotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotCi0KLS8vIFR5cGVkZWZz
LgotbmFtZXNwYWNlIFJ1bnRpbWUgewotLyogVW5pcXVlIG9iamVjdCBpZGVudGlmaWVyLiAqLwot
dHlwZWRlZiBTdHJpbmcgUmVtb3RlT2JqZWN0SWQ7Ci19IC8vIFJ1bnRpbWUKLQotbmFtZXNwYWNl
IFJ1bnRpbWUyIHsKLS8qIFVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4gKi8KLXR5cGVkZWYgU3Ry
aW5nIFJlbW90ZU9iamVjdElkOwotfSAvLyBSdW50aW1lMgotLy8gRW5kIG9mIHR5cGVkZWZzLgot
Ci0KLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
Ci0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0KLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1uYW1l
c3BhY2UgUHJvdG9jb2wgewotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5j
cHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1k
b21haW4uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0j
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXJzLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi0KLQotbmFtZXNwYWNlIEluc3Bl
Y3RvciB7Ci0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJU
ZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bEludGVybmFsLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0j
aW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLX0g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tl
bmREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJh
dGlvbi5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRp
ZmZlcmVudC1kb21haW4uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+Ci0KLV9fYXR0cmli
dXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xD
b25maWd1cmF0aW9uIDogTlNPYmplY3QKLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbENvbmZpZ3VyYXRpb24uaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbi5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1p
ZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgotCi0jaW1w
b3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2Vu
ZERpc3BhdGNoZXJzLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRj
aGFibGVBZ2VudC5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0
b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5h
dGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVycy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1A
aW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgotewotICAgIEF1Z21lbnRh
YmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29u
dHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAg
ICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBfY29udHJvbGxl
ciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwot
ewotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
RXZlbnREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNh
bWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQot
I2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDx3dGYvSlNP
TlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLSMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUt
aWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotCi0jaW1wb3J0
IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+Ci0KLQotCi0KLXR5cGVkZWYg
TlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbFBsYXRmb3JtKSB7Ci0gICAgVGVzdFByb3Rv
Y29sUGxhdGZvcm1BbGwsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljLAotICAgIFRl
c3RQcm90b2NvbFBsYXRmb3JtSU9TLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1MsCi19
OwotCi0KLQotCi0KLQotCi0KLQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xC
dWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
LmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRl
c3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIK
LSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5o
PgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xJbnRlcm5hbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1p
ZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0
b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+Ci1PcHRpb25hbDxPYmpDRW51bVR5
cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKLQotaW5saW5lIFN0
cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFBsYXRmb3JtIHZhbHVlKQotewotICAg
IHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1BbGw6Ci0gICAg
ICAgIHJldHVybiAiYWxsIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmlj
OgotICAgICAgICByZXR1cm4gImdlbmVyaWMiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0
Zm9ybUlPUzoKLSAgICAgICAgcmV0dXJuICJpb3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQ
bGF0Zm9ybU1hY09TOgotICAgICAgICByZXR1cm4gIm1hY29zIl9zOwotICAgIH0KLX0KLQotdGVt
cGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFBsYXRmb3JtPiBmcm9tUHJvdG9j
b2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gImFsbCIp
Ci0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDsKLSAgICBpZiAodmFsdWUg
PT0gImdlbmVyaWMiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmlj
OwotICAgIGlmICh2YWx1ZSA9PSAiaW9zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBs
YXRmb3JtSU9TOwotICAgIGlmICh2YWx1ZSA9PSAibWFjb3MiKQotICAgICAgICByZXR1cm4gVGVz
dFByb3RvY29sUGxhdGZvcm1NYWNPUzsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi0K
LQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5
cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgot
Ci0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJz
ZXIuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRl
Lmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbnRlcmZhY2UgVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zIChSdW50aW1lRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZVJlbW90
ZU9iamVjdElkOihOU1N0cmluZyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsK
LQotQGVuZAotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFJ1bnRpbWUy
RG9tYWluKQotCi0rICh2b2lkKV9wYXJzZVJlbW90ZU9iamVjdElkOihOU1N0cmluZyAqKilvdXRW
YWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24g
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChSdW50aW1lRG9tYWluKQotCi0rICh2b2lkKV9w
YXJzZVJlbW90ZU9iamVjdElkOihOU1N0cmluZyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQp
cGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05T
U3RyaW5nIGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gKE5TU3RyaW5nICopcGF5bG9hZDsKLX0K
LQotQGVuZAotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoUnVu
dGltZTJEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlUmVtb3RlT2JqZWN0SWQ6KE5TU3RyaW5nICoq
KW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUg
PSAoTlNTdHJpbmcgKilwYXlsb2FkOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlk
LWRpZmZlcmVudC1kb21haW4uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQ
cm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgot
I2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsK
LQotCi0KLQotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2V4cGVjdGVkL3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uLXJlc3VsdCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVj
dGVkL3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uLXJlc3VsdApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNGJkYjJkNDExOWYuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVk
L3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uLXJlc3VsdAorKysgL2Rldi9udWxs
CkBAIC0xLDExMjQgKzAsMCBAQAotIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21t
YW5kcy5qcwotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlv
bmFsLXR5cGUtc2V0dGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0jIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBv
bmNlCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQotI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JGcm9udGVuZFJvdXRlci5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3Mg
QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZvaWQgc2V0QmFja2Vu
ZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9i
YWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KLSAgICBCYWNrZW5kRGlz
cGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNw
YXRjaGVyLmdldCgpOyB9Ci1wcml2YXRlOgotICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4g
bV9iYWNrZW5kRGlzcGF0Y2hlcjsKLX07Ci0KLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgotCi0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0j
IyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNs
dWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5n
OwotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNr
ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVy
cy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25h
bC10eXBlLXNldHRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0
ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRl
c3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2lmIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQot
Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5k
RGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVy
cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwt
dHlwZS1zZXR0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0j
aW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEZyb250ZW5kUm91dGVyOwotCi19
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0
Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1z
ZXR0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgi
Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0K
LX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERp
c3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1z
ZXR0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2Nv
bFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFtZXNwYWNlIEluc3Bl
Y3RvciB7Ci0KLQotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotLy8gRm9yd2FyZCBkZWNs
YXJhdGlvbnMuCi1uYW1lc3BhY2UgUnVudGltZSB7Ci1jbGFzcyBLZXlQYXRoOwotfSAvLyBSdW50
aW1lCi0vLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCi0KLQotCi0KLW5hbWVzcGFjZSBU
ZXN0SGVscGVycyB7Ci0KLVN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSk7Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShUIGVudW1W
YWx1ZSkKLXsKLSAgICByZXR1cm4gZ2V0RW51bUNvbnN0YW50VmFsdWUoc3RhdGljX2Nhc3Q8aW50
PihlbnVtVmFsdWUpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKLQotbmFtZXNw
YWNlIFJ1bnRpbWUgewotLyogS2V5IHBhdGguICovCi1jbGFzcyBLZXlQYXRoIDogcHVibGljIEpT
T046Ok9iamVjdEJhc2UgewotcHVibGljOgotICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5h
bWUgJ3R5cGUnIHdoaWxlIGdlbmVyYXRpbmcgS2V5UGF0aC4KLSAgICBlbnVtIGNsYXNzIFR5cGUg
ewotICAgICAgICBOdWxsID0gMCwKLSAgICAgICAgU3RyaW5nID0gMSwKLSAgICAgICAgQXJyYXkg
PSAyLAotICAgIH07IC8vIGVudW0gY2xhc3MgVHlwZQotICAgIGVudW0gewotICAgICAgICBOb0Zp
ZWxkc1NldCA9IDAsCi0gICAgICAgIFR5cGVTZXQgPSAxIDw8IDAsCi0gICAgICAgIEFsbEZpZWxk
c1NldCA9IChUeXBlU2V0KQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+Ci0gICAg
Y2xhc3MgQnVpbGRlciB7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVj
dD4gbV9yZXN1bHQ7Ci0KLSAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUg
fCBTVEVQPiYgY2FzdFN0YXRlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICpyZWlu
dGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwotICAgICAgICB9Ci0K
LSAgICAgICAgQnVpbGRlcihSZWY8LypLZXlQYXRoKi9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQot
ICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0
ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwotICAgICAgICB9Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBL
ZXlQYXRoOwotICAgIHB1YmxpYzoKLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVHlwZVNldD4m
IHNldFR5cGUoVHlwZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIFR5cGVTZXQpLCBwcm9wZXJ0eV90eXBlX2FscmVhZHlfc2V0KTsKLSAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInR5cGUiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSh2YWx1ZSkpOwotICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxUeXBlU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgUmVmPEtl
eVBhdGg+IHJlbGVhc2UoKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChT
VEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwotICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoc2l6ZW9mKEtleVBhdGgpID09IHNpemVvZihKU09OOjpPYmplY3QpLCBj
YW5ub3RfY2FzdCk7Ci0KLSAgICAgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25SZXN1bHQg
PSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOwotICAgICAgICAgICAgYXV0byByZXN1bHQgPSBX
VEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxLZXlQYXRoPio+KCZqc29uUmVzdWx0KSk7Ci0g
ICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIC8qCi0g
ICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgotICAgICAqIFJlZjxLZXlQYXRoPiByZXN1bHQg
PSBLZXlQYXRoOjpjcmVhdGUoKQotICAgICAqICAgICAuc2V0VHlwZSguLi4pCi0gICAgICogICAg
IC5yZWxlYXNlKCk7Ci0gICAgICovCi0gICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNy
ZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKSk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRTdHJpbmcoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldFN0cmluZygi
c3RyaW5nIl9zLCB2YWx1ZSk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRBcnJheShSZWZQdHI8SlNP
Tjo6QXJyYXlPZjxTdHJpbmc+PiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEpTT046Ok9iamVjdEJh
c2U6OnNldEFycmF5KCJhcnJheSJfcywgV1RGTW92ZSh2YWx1ZSkpOwotICAgIH0KLX07Ci0KLX0g
Ly8gUnVudGltZQotCi0KLQotbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKLQotdGVtcGxhdGU8dHlw
ZW5hbWUgUHJvdG9jb2xFbnVtVHlwZT4KLU9wdGlvbmFsPFByb3RvY29sRW51bVR5cGU+IHBhcnNl
RW51bVZhbHVlRnJvbVN0cmluZyhjb25zdCBTdHJpbmcmKTsKLQotLy8gRW51bXMgaW4gdGhlICdS
dW50aW1lJyBEb21haW4KLXRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlJ1bnRpbWU6OktleVBhdGg6OlR5cGU+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0
b3I6OlByb3RvY29sOjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlPihjb25zdCBTdHJpbmcmKTsKLQot
fSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQot
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVj
dHMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMu
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotCi0jaW5jbHVk
ZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1l
c3BhY2UgSW5zcGVjdG9yIHsKLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotbmFtZXNwYWNlIFRl
c3RIZWxwZXJzIHsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFs
dWVzW10gPSB7Ci0gICAgIm51bGwiLAotICAgICJzdHJpbmciLAotICAgICJhcnJheSIsCi19Owot
Ci1TdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsKLSAgICByZXR1cm4gZW51
bV9jb25zdGFudF92YWx1ZXNbY29kZV07Ci19Ci0KLS8vIEVudW1zIGluIHRoZSAnUnVudGltZScg
RG9tYWluCi10ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1l
OjpLZXlQYXRoOjpUeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90
b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZT4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmlu
ZykKLXsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7Ci0gICAg
ICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZTo6
TnVsbCwKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpLZXlQ
YXRoOjpUeXBlOjpTdHJpbmcsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6
UnVudGltZTo6S2V5UGF0aDo6VHlwZTo6QXJyYXksCi0gICAgfTsKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IDM7ICsraSkKLSAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1fY29u
c3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAgICAgICAgIHJldHVybiAoSW5z
cGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZSljb25zdGFudFZhbHVlc1tp
XTsKLQotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLQotfSAvLyBuYW1lc3BhY2UgVGVz
dEhlbHBlcnMKLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0KLSMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4K
LSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLQotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsK
LQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFj
a2VuZERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hh
ZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJv
dG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVy
bmFsLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW5jbHVk
ZSA8d3RmL0pTT05WYWx1ZXMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLX0gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNw
YXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5o
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlw
ZS1zZXR0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgotCi1fX2F0dHJpYnV0ZV9f
KCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbiA6IE5TT2JqZWN0Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xD
b25maWd1cmF0aW9uLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRp
b24ubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25h
bC10eXBlLXNldHRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCi0KLSNpbXBvcnQg
IlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlz
cGF0Y2hlcnMuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJs
ZUFnZW50Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNv
bnRyb2xsZXIuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVycy5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXJzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBs
ZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCi17Ci0gICAgQXVnbWVudGFibGVJ
bnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9s
bGVyCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAg
IHJldHVybiBuaWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIpOwotICAgIF9jb250cm9sbGVyID0g
Y29udHJvbGxlcjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClkZWFsbG9jCi17Ci0g
ICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xDb25maWd1cmF0aW9uLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVu
dERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93
ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2lt
cG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDx3dGYvSlNPTlZh
bHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLSMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRp
b25hbC10eXBlLXNldHRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2ltcG9ydCA8
V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgotCi0KLUBjbGFzcyBUZXN0UHJv
dG9jb2xSdW50aW1lS2V5UGF0aDsKLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFBy
b3RvY29sUGxhdGZvcm0pIHsKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbCwKLSAgICBUZXN0
UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWMsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1JT1MsCi0g
ICAgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUywKLX07Ci0KLQotdHlwZWRlZiBOU19FTlVNKE5T
SW50ZWdlciwgVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlKSB7Ci0gICAgVGVzdFByb3Rv
Y29sUnVudGltZUtleVBhdGhUeXBlTnVsbCwKLSAgICBUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0
aFR5cGVTdHJpbmcsCi0gICAgVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlQXJyYXksCi19
OwotCi0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFj
ZSBUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aCA6IFJXSVByb3RvY29sSlNPTk9iamVjdAotLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlk
PiAqKXBheWxvYWQ7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0
aFR5cGU6KFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZSl0eXBlOwotLyogcmVxdWlyZWQg
Ki8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgVGVzdFByb3RvY29sUnVudGltZUtleVBh
dGhUeXBlIHR5cGU7Ci0vKiBvcHRpb25hbCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkg
TlNTdHJpbmcgKnN0cmluZzsKLS8qIG9wdGlvbmFsICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBj
b3B5KSBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmFycmF5OwotQGVuZAotCi0KLQotCi0KLQotI2lt
cG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5o
PgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xJbnRlcm5hbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hh
ZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJU
ZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVl
cy5oPgotCi0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVz
dFByb3RvY29sLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZl
cnNpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBP
YmpDRW51bVR5cGU+Ci1PcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhj
b25zdCBTdHJpbmcmIHZhbHVlKTsKLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRl
c3RQcm90b2NvbFBsYXRmb3JtIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNh
c2UgVGVzdFByb3RvY29sUGxhdGZvcm1BbGw6Ci0gICAgICAgIHJldHVybiAiYWxsIl9zOwotICAg
IGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOgotICAgICAgICByZXR1cm4gImdlbmVy
aWMiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzoKLSAgICAgICAgcmV0dXJu
ICJpb3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOgotICAgICAgICBy
ZXR1cm4gIm1hY29zIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFs
PFRlc3RQcm90b2NvbFBsYXRmb3JtPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2
YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gImFsbCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJv
dG9jb2xQbGF0Zm9ybUFsbDsKLSAgICBpZiAodmFsdWUgPT0gImdlbmVyaWMiKQotICAgICAgICBy
ZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOwotICAgIGlmICh2YWx1ZSA9PSAiaW9z
IikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOwotICAgIGlmICh2YWx1
ZSA9PSAibWFjb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzsK
LSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2Nv
bFN0cmluZyhUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGUgdmFsdWUpCi17Ci0gICAgc3dp
dGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGVOdWxs
OgotICAgICAgICByZXR1cm4gIm51bGwiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xSdW50aW1l
S2V5UGF0aFR5cGVTdHJpbmc6Ci0gICAgICAgIHJldHVybiAic3RyaW5nIl9zOwotICAgIGNhc2Ug
VGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlQXJyYXk6Ci0gICAgICAgIHJldHVybiAiYXJy
YXkiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3Rv
Y29sUnVudGltZUtleVBhdGhUeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2
YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gIm51bGwiKQotICAgICAgICByZXR1cm4gVGVzdFBy
b3RvY29sUnVudGltZUtleVBhdGhUeXBlTnVsbDsKLSAgICBpZiAodmFsdWUgPT0gInN0cmluZyIp
Ci0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGVTdHJpbmc7Ci0g
ICAgaWYgKHZhbHVlID09ICJhcnJheSIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xSdW50
aW1lS2V5UGF0aFR5cGVBcnJheTsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi19IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
Lm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwt
dHlwZS1zZXR0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0KLSNpbXBvcnQg
IlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgotI2lt
cG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLQotdXNp
bmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMgKFJ1bnRpbWVEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlS2V5UGF0aDooVGVzdFBy
b3RvY29sUnVudGltZUtleVBhdGggKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7
Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAo
UnVudGltZURvbWFpbikKLQotKyAodm9pZClfcGFyc2VLZXlQYXRoOihUZXN0UHJvdG9jb2xSdW50
aW1lS2V5UGF0aCAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10p
OwotICAgICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sUnVudGltZUtleVBhdGggYWxsb2NdIGlu
aXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xUeXBlcy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9w
dGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQg
IlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JX
SVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLSNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+
Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9y
OwotCi0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aAotCi0tIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmlu
ZyAqLCBpZD4gKilwYXlsb2FkCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0g
ICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BS
T1BFUlRZKHBheWxvYWRbQCJ0eXBlIl0sIEAidHlwZSIpOwotICAgIE9wdGlvbmFsPFRlc3RQcm90
b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZT4gdHlwZSA9IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJv
dG9jb2xSdW50aW1lS2V5UGF0aFR5cGU+KHBheWxvYWRbQCJ0eXBlIl0pOwotICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfQkFEX0VOVU1fVkFMVUUodHlwZSwgQCJ0eXBlIik7Ci0gICAgc2VsZi50eXBl
ID0gdHlwZS52YWx1ZSgpOwotCi0gICAgc2VsZi5zdHJpbmcgPSBwYXlsb2FkW0Aic3RyaW5nIl07
Ci0KLSAgICBzZWxmLmFycmF5ID0gcGF5bG9hZFtAImFycmF5Il07Ci0KLSAgICByZXR1cm4gc2Vs
ZjsKLX0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2Nv
bEpTT05PYmplY3QgKilvYmplY3QKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRo
SlNPTk9iamVjdDpbb2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0KCldKSkKLSAgICAgICAgcmV0dXJu
IG5pbDsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhU
eXBlOihUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGUpdHlwZQotewotICAgIGlmICghKHNl
bGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgc2VsZi50eXBl
ID0gdHlwZTsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKXNldFR5cGU6KFRlc3RQ
cm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZSl0eXBlCi17Ci0gICAgW3N1cGVyIHNldFN0cmluZzp0
b1Byb3RvY29sU3RyaW5nKHR5cGUpIGZvcktleTpAInR5cGUiXTsKLX0KLQotLSAoVGVzdFByb3Rv
Y29sUnVudGltZUtleVBhdGhUeXBlKXR5cGUKLXsKLSAgICByZXR1cm4gZnJvbVByb3RvY29sU3Ry
aW5nPFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZT4oW3N1cGVyIHN0cmluZ0ZvcktleTpA
InR5cGUiXSkudmFsdWUoKTsKLX0KLQotLSAodm9pZClzZXRTdHJpbmc6KE5TU3RyaW5nICopc3Ry
aW5nCi17Ci0gICAgW3N1cGVyIHNldFN0cmluZzpzdHJpbmcgZm9yS2V5OkAic3RyaW5nIl07Ci19
Ci0KLS0gKE5TU3RyaW5nICopc3RyaW5nCi17Ci0gICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JL
ZXk6QCJzdHJpbmciXTsKLX0KLQotLSAodm9pZClzZXRBcnJheTooTlNBcnJheS8qPE5TU3RyaW5n
PiovICopYXJyYXkKLXsKLSAgICBbc3VwZXIgc2V0SlNPTkFycmF5OnRvSlNPTlN0cmluZ0FycmF5
KGFycmF5KSBmb3JLZXk6QCJhcnJheSJdOwotfQotCi0tIChOU0FycmF5Lyo8TlNTdHJpbmc+Ki8g
KilhcnJheQotewotICAgIHJldHVybiB0b09iakNTdHJpbmdBcnJheShbc3VwZXIgSlNPTkFycmF5
Rm9yS2V5OkAiYXJyYXkiXSk7Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9zaG91bGQtc3RyaXAtY29tbWVudHMuanNv
bi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJpYy9leHBlY3RlZC9zaG91bGQtc3RyaXAtY29tbWVudHMuanNvbi1yZXN1bHQKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhMWZiN2Q0ZjlkLi4wMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBl
Y3RlZC9zaG91bGQtc3RyaXAtY29tbWVudHMuanNvbi1yZXN1bHQKKysrIC9kZXYvbnVsbApAQCAt
MSw4NzAgKzAsMCBAQAotIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5q
cwotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNob3VsZC1zdHJpcC1jb21tZW50
cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0jIyMgRW5k
IEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVz
LmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIu
aD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgot
Ci1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXIgewotcHVibGljOgotICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tl
bmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1v
dmUoZGlzcGF0Y2hlcik7IH0KLSAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNo
ZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Ci1wcml2YXRl
OgotICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKLX07
Ci0KLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jZW5kaWYgLy8gRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5h
dGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNw
YXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlw
LWNvbW1lbnRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXR5
cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
Ci0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBzaG91bGQtc3RyaXAtY29tbWVudHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVz
dEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1
ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
LQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotI2luY2x1ZGUg
IlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZp
bGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJv
bnRlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hv
dWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3Rz
LmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEZyb250ZW5kUm91dGVy
OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5k
RGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMu
Y3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlwLWNvbW1l
bnRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCi0K
LSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLX0g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3Bh
dGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNl
Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0j
aW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQot
Ci1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotCi0KLQotCi0KLQotfSAvLyBuYW1lc3BhY2Ug
UHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbE9iamVjdHMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5j
cHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaG91bGQtc3RyaXAtY29tbWVu
dHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotCi0jaW5j
bHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1u
YW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLX0gLy8g
bmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHNob3VsZC1zdHJpcC1jb21tZW50cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0K
LQotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
LQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmlnLmgi
Ci0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUg
IlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLQotbmFtZXNwYWNlIEluc3Bl
Y3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sQ29uZmlndXJhdGlvbi5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hv
dWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgotCi1fX2F0
dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3Rv
Y29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENv
bmZpZ3VyYXRpb24ubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaG91bGQt
c3RyaXAtY29tbWVudHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCi0KLSNpbXBvcnQg
IlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlz
cGF0Y2hlcnMuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJs
ZUFnZW50Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNv
bnRyb2xsZXIuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVycy5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXJzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBs
ZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCi17Ci0gICAgQXVnbWVudGFibGVJ
bnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9s
bGVyCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAg
IHJldHVybiBuaWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIpOwotICAgIF9jb250cm9sbGVyID0g
Y29udHJvbGxlcjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClkZWFsbG9jCi17Ci0g
ICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xDb25maWd1cmF0aW9uLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVu
dERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxk
LXN0cmlwLWNvbW1lbnRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgot
Ci11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sRXZlbnREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaG91bGQtc3RyaXAtY29tbWVudHMu
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0
IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVBy
b3RvY29sSlNPTk9iamVjdC5oPgotCi0KLQotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBU
ZXN0UHJvdG9jb2xQbGF0Zm9ybSkgewotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsLAotICAg
IFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlP
UywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TLAotfTsKLQotCi0KLQotCi0KLQotCi0K
LQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2Jq
ZWN0cy5oPgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0
UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVn
bWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5o
PgotCi0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgi
Ci0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+Ci0K
LW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+
Ci1PcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcm
IHZhbHVlKTsKLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFBs
YXRmb3JtIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3Rv
Y29sUGxhdGZvcm1BbGw6Ci0gICAgICAgIHJldHVybiAiYWxsIl9zOwotICAgIGNhc2UgVGVzdFBy
b3RvY29sUGxhdGZvcm1HZW5lcmljOgotICAgICAgICByZXR1cm4gImdlbmVyaWMiX3M7Ci0gICAg
Y2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzoKLSAgICAgICAgcmV0dXJuICJpb3MiX3M7Ci0g
ICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOgotICAgICAgICByZXR1cm4gIm1hY29z
Il9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2Nv
bFBsYXRmb3JtPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAg
ICBpZiAodmFsdWUgPT0gImFsbCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9y
bUFsbDsKLSAgICBpZiAodmFsdWUgPT0gImdlbmVyaWMiKQotICAgICAgICByZXR1cm4gVGVzdFBy
b3RvY29sUGxhdGZvcm1HZW5lcmljOwotICAgIGlmICh2YWx1ZSA9PSAiaW9zIikKLSAgICAgICAg
cmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOwotICAgIGlmICh2YWx1ZSA9PSAibWFjb3Mi
KQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzsKLSAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
LmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlw
ZVBhcnNlci5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFBy
aXZhdGUuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0KLQotCi0KLSMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xUeXBlcy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHNob3VsZC1zdHJpcC1jb21tZW50cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBv
cnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9y
L1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLSNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25z
Lmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVj
dG9yOwotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4
cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uLXJlc3Vs
dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uLXJl
c3VsdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjU2NjYzNzljYTcuLjAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5q
c29uLXJlc3VsdAorKysgL2Rldi9udWxsCkBAIC0xLDg5MSArMCwwIEBACi0jIyMgQmVnaW4gRmls
ZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLSMjIyBFbmQgRmlsZTogSW5z
cGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRl
QmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0
eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi0jaW5jbHVkZSAiVGVzdFByb3Rv
Y29sVHlwZXMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91
dGVyLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBBbHRlcm5hdGVCYWNrZW5k
RGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQ
dHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVy
ID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQotICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5k
RGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0K
LXByaXZhdGU6Ci0gICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRj
aGVyOwotfTsKLQotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSNlbmRpZiAvLyBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSMjIyBFbmQgRmlsZTogVGVz
dEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFj
a2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBl
LWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRl
c3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1u
YW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KLQot
Ci19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNw
YXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNl
ZC1wcmltaXRpdmUtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0QmFja2VuZERpc3Bh
dGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJv
dXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVy
RGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jaWYgRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jaW5jbHVkZSAiVGVzdEFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVycy5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3Igewot
Ci0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tl
bmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNo
ZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9u
LWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9i
amVjdHMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgRnJvbnRlbmRS
b3V0ZXI7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0RnJv
bnRlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRj
aGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0
aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEZy
b250ZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1l
c3BhY2UgSW5zcGVjdG9yIHsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQg
RmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xPYmplY3RzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBl
LWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLW5hbWVzcGFjZSBQcm90
b2NvbCB7Ci0KLQotCi0KLQotLy8gVHlwZWRlZnMuCi1uYW1lc3BhY2UgUnVudGltZSB7Ci0vKiBV
bmlxdWUgb2JqZWN0IGlkZW50aWZpZXIuICovCi10eXBlZGVmIGludCBSZW1vdGVPYmplY3RJZDsK
LX0gLy8gUnVudGltZQotLy8gRW5kIG9mIHR5cGVkZWZzLgotCi0KLQotfSAvLyBuYW1lc3BhY2Ug
UHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbE9iamVjdHMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5j
cHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFs
aWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29s
T2JqZWN0cy5oIgotCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotbmFtZXNwYWNlIFByb3Rv
Y29sIHsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUt
dHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hl
cnMuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLQotCi1uYW1lc3BhY2UgSW5zcGVj
dG9yIHsKLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmlnLmgiCi0j
aW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgIlRl
c3RQcm90b2NvbEludGVybmFsLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3Rv
ciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbi5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1k
ZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90
b2NvbC5oPgotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRl
cmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0Ci1AZW5kCi0KLQotIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJv
dG9jb2xDb25maWd1cmF0aW9uLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgi
Ci0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+Ci0jaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2lt
cG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0KLXVz
aW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xD
b25maWd1cmF0aW9uCi17Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29u
dHJvbGxlcjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVu
dGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtzdXBl
ciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJU
KGNvbnRyb2xsZXIpOwotICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1cm4g
c2VsZjsKLX0KLQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQot
Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1p
dGl2ZS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2lu
ZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZl
bnREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJp
bWl0aXZlLXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2ltcG9ydCA8V2ViSW5z
cGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgotCi0KLQotCi10eXBlZGVmIE5TX0VOVU0o
TlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xQbGF0Zm9ybSkgewotICAgIFRlc3RQcm90b2NvbFBsYXRm
b3JtQWxsLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYywKLSAgICBUZXN0UHJvdG9j
b2xQbGF0Zm9ybUlPUywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TLAotfTsKLQotCi0K
LQotCi0KLQotCi0KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21w
YXRpYmlsaXR5T2JqZWN0cy5oPgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0KLSMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAi
VGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5o
IgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVy
Lmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi0KLQotCi0jIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbEludGVybmFsLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNs
YXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0
IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+Ci0KLW5hbWVzcGFj
ZSBJbnNwZWN0b3IgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+Ci1PcHRpb25h
bDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsK
LQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFBsYXRmb3JtIHZh
bHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZv
cm1BbGw6Ci0gICAgICAgIHJldHVybiAiYWxsIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxh
dGZvcm1HZW5lcmljOgotICAgICAgICByZXR1cm4gImdlbmVyaWMiX3M7Ci0gICAgY2FzZSBUZXN0
UHJvdG9jb2xQbGF0Zm9ybUlPUzoKLSAgICAgICAgcmV0dXJuICJpb3MiX3M7Ci0gICAgY2FzZSBU
ZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOgotICAgICAgICByZXR1cm4gIm1hY29zIl9zOwotICAg
IH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFBsYXRmb3Jt
PiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFs
dWUgPT0gImFsbCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDsKLSAg
ICBpZiAodmFsdWUgPT0gImdlbmVyaWMiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxh
dGZvcm1HZW5lcmljOwotICAgIGlmICh2YWx1ZSA9PSAiaW9zIikKLSAgICAgICAgcmV0dXJuIFRl
c3RQcm90b2NvbFBsYXRmb3JtSU9TOwotICAgIGlmICh2YWx1ZSA9PSAibWFjb3MiKQotICAgICAg
ICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzsKLSAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwotfQotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucy5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRl
c3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2Nv
bEpTT05PYmplY3RQcml2YXRlLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBp
bnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChSdW50aW1lRG9tYWluKQotCi0r
ICh2b2lkKV9wYXJzZVJlbW90ZU9iamVjdElkOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5
bG9hZDooaWQpcGF5bG9hZDsKLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zIChSdW50aW1lRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZVJlbW90ZU9i
amVjdElkOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewot
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TTnVtYmVyIGNsYXNz
XSk7Ci0gICAgKm91dFZhbHVlID0gKE5TTnVtYmVyICopcGF5bG9hZDsKLX0KLQotQGVuZAotCi0K
LSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90
b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5o
IgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4K
LSNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgot
Ci11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFycmF5
LXR5cGUuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNv
bi1yZXN1bHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0ZTVjN2U0MDkxLi4wMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZ2VuZXJpYy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbi1yZXN1
bHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMDczICswLDAgQEAKLSMjIyBCZWdpbiBGaWxlOiBJbnNw
ZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0vLyBEZWJ1Z2dlcgotSW5zcGVjdG9yQmFja2VuZC5yZWdp
c3RlckRvbWFpbigiRGVidWdnZXIiLCBudWxsKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJF
bnVtKCJEZWJ1Z2dlci5SZWFzb24iLCB7RGllZDogIkRpZWQiLCBGYWludGVkOiAiRmFpbnRlZCIs
IEh1bmdyeTogIkh1bmdyeSJ9KTsKLUluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkRl
YnVnZ2VyIiwgbnVsbCk7Ci0jIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5q
cwotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10
eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3By
YWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
LQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQot
Y2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZvaWQgc2V0
QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIp
IHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KLSAgICBCYWNr
ZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tl
bmREaXNwYXRjaGVyLmdldCgpOyB9Ci1wcml2YXRlOgotICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0
Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKLX07Ci0KLQotCi0KLX0gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgotCi0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCi0jIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNp
bmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXR5cGVkZWYgU3RyaW5nIEVycm9yU3Ry
aW5nOwotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0
aW9uLWFycmF5LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0
ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRl
c3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2lmIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQot
Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5k
RGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVy
cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1h
cnJheS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5j
bHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
LQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEZyb250ZW5kUm91dGVyOwotCi19IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hl
cnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBl
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCi0KLSNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLX0gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNo
ZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBv
bmNlCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+
Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0K
LQotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMu
Ci1uYW1lc3BhY2UgRGVidWdnZXIgewotZW51bSBjbGFzcyBSZWFzb247Ci19IC8vIERlYnVnZ2Vy
Ci0vLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCi0KLQotLy8gVHlwZWRlZnMuCi1uYW1l
c3BhY2UgRGVidWdnZXIgewotdHlwZWRlZiBpbnQgQnJlYWtwb2ludElkOwotfSAvLyBEZWJ1Z2dl
cgotCi1uYW1lc3BhY2UgUnVudGltZSB7Ci10eXBlZGVmIGludCBPYmplY3RJZDsKLXR5cGVkZWYg
SlNPTjo6QXJyYXlPZjxpbnQ+IEx1Y2t5TnVtYmVyczsKLXR5cGVkZWYgSlNPTjo6QXJyYXlPZjxT
dHJpbmc+IEJhYnlOYW1lczsKLXR5cGVkZWYgSlNPTjo6QXJyYXlPZjxpbnQ+IE5ld09iamVjdHM7
Ci10eXBlZGVmIEpTT046OkFycmF5T2Y8aW50PiBPbGRPYmplY3RzOwotdHlwZWRlZiBKU09OOjpB
cnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb24+IFN0b3BSZWFzb25z
OwotfSAvLyBSdW50aW1lCi0vLyBFbmQgb2YgdHlwZWRlZnMuCi0KLW5hbWVzcGFjZSBUZXN0SGVs
cGVycyB7Ci0KLVN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSk7Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkK
LXsKLSAgICByZXR1cm4gZ2V0RW51bUNvbnN0YW50VmFsdWUoc3RhdGljX2Nhc3Q8aW50PihlbnVt
VmFsdWUpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKLQotbmFtZXNwYWNlIERl
YnVnZ2VyIHsKLS8qICAqLwotZW51bSBjbGFzcyBSZWFzb24gewotICAgIERpZWQgPSAwLAotICAg
IEZhaW50ZWQgPSAxLAotICAgIEh1bmdyeSA9IDIsCi19OyAvLyBlbnVtIGNsYXNzIFJlYXNvbgot
fSAvLyBEZWJ1Z2dlcgotCi0KLQotbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKLQotdGVtcGxhdGU8
dHlwZW5hbWUgUHJvdG9jb2xFbnVtVHlwZT4KLU9wdGlvbmFsPFByb3RvY29sRW51bVR5cGU+IHBh
cnNlRW51bVZhbHVlRnJvbVN0cmluZyhjb25zdCBTdHJpbmcmKTsKLQotLy8gRW51bXMgaW4gdGhl
ICdEZWJ1Z2dlcicgRG9tYWluCi10ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEZWJ1Z2dlcjo6UmVhc29uPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbj4oY29uc3QgU3RyaW5nJik7Ci0KLX0gLy8gbmFt
ZXNwYWNlIFRlc3RIZWxwZXJzCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgotCi1uYW1lc3BhY2UgV1RGIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RydWN0IERlZmF1bHRIYXNoOwotCi0vLyBIYXNoIGRlY2xhcmF0aW9ucyBpbiB0aGUgJ0Rl
YnVnZ2VyJyBEb21haW4KLXRlbXBsYXRlPD4KLXN0cnVjdCBEZWZhdWx0SGFzaDxJbnNwZWN0b3I6
OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uPiB7Ci0gICAgdHlwZWRlZiBJbnRIYXNoPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb24+IEhhc2g7Ci19OwotCi19IC8vIG5hbWVz
cGFjZSBXVEYKLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0KLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Igewot
Ci1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi1uYW1lc3BhY2UgVGVzdEhlbHBlcnMgewotCi1zdGF0
aWMgY29uc3QgY2hhciogY29uc3QgZW51bV9jb25zdGFudF92YWx1ZXNbXSA9IHsKLSAgICAiRGll
ZCIsCi0gICAgIkZhaW50ZWQiLAotICAgICJIdW5ncnkiLAotfTsKLQotU3RyaW5nIGdldEVudW1D
b25zdGFudFZhbHVlKGludCBjb2RlKSB7Ci0gICAgcmV0dXJuIGVudW1fY29uc3RhbnRfdmFsdWVz
W2NvZGVdOwotfQotCi0vLyBFbnVtcyBpbiB0aGUgJ0RlYnVnZ2VyJyBEb21haW4KLXRlbXBsYXRl
PD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb24+IHBhcnNl
RW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29u
Pihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQotewotICAgIHN0YXRpYyBjb25zdCBzaXpl
X3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEZWJ1Z2dlcjo6UmVhc29uOjpEaWVkLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb246OkZhaW50ZWQsCi0gICAgICAgIChzaXplX3QpSW5z
cGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbjo6SHVuZ3J5LAotICAgIH07Ci0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCAzOyArK2kpCi0gICAgICAgIGlmIChwcm90b2NvbFN0cmlu
ZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCi0gICAgICAgICAg
ICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb24pY29uc3RhbnRW
YWx1ZXNbaV07Ci0KLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi0KLX0gLy8gbmFtZXNw
YWNlIFRlc3RIZWxwZXJzCi0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNw
cAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5
cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJz
Lmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi0KLQotbmFtZXNwYWNlIEluc3BlY3Rv
ciB7Ci0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bEJhY2tlbmREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFBy
b3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRl
cm5hbC5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2luY2x1
ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi19IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlz
cGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24u
aAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJy
YXktdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KLQotX19hdHRyaWJ1dGVfXygo
dmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3Vy
YXRpb24gOiBOU09iamVjdAotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29u
ZmlndXJhdGlvbi5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9u
Lm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1h
cnJheS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgotCi0jaW1wb3J0ICJUZXN0
UHJvdG9jb2xJbnRlcm5hbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNo
ZXJzLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2Vu
dC5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9s
bGVyLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5k
RGlzcGF0Y2hlcnMuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVycy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW1wbGVtZW50
YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVj
dG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0
aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgot
ewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1
cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRy
b2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAgIFtz
dXBlciBkZWFsbG9jXTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbi5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNw
YXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFy
YXRpb24tYXJyYXktdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4K
LQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5o
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJh
eS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rv
ci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KLQotCi0KLQotdHlwZWRlZiBOU19FTlVNKE5TSW50
ZWdlciwgVGVzdFByb3RvY29sUGxhdGZvcm0pIHsKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFs
bCwKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWMsCi0gICAgVGVzdFByb3RvY29sUGxh
dGZvcm1JT1MsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUywKLX07Ci0KLQotdHlwZWRl
ZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGVidWdnZXJSZWFzb24pIHsKLSAgICBU
ZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbkRpZWQsCi0gICAgVGVzdFByb3RvY29sRGVidWdnZXJS
ZWFzb25GYWludGVkLAotICAgIFRlc3RQcm90b2NvbERlYnVnZ2VyUmVhc29uSHVuZ3J5LAotfTsK
LQotCi0KLQotCi0KLQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENv
bXBhdGliaWxpdHlPYmplY3RzLmg+Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKLQot
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCi0jaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBv
cnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLQotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
SW50ZXJuYWwuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
LmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFy
cmF5LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90
b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KLU9wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVBy
b3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOwotCi1pbmxpbmUgU3RyaW5nIHRvUHJv
dG9jb2xTdHJpbmcoVGVzdFByb3RvY29sUGxhdGZvcm0gdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZh
bHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDoKLSAgICAgICAgcmV0dXJu
ICJhbGwiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM6Ci0gICAgICAg
IHJldHVybiAiZ2VuZXJpYyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOgot
ICAgICAgICByZXR1cm4gImlvcyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFj
T1M6Ci0gICAgICAgIHJldHVybiAibWFjb3MiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1p
bmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sUGxhdGZvcm0+IGZyb21Qcm90b2NvbFN0cmluZyhj
b25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiYWxsIikKLSAgICAgICAg
cmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOwotICAgIGlmICh2YWx1ZSA9PSAiZ2VuZXJp
YyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM7Ci0gICAgaWYg
KHZhbHVlID09ICJpb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1JT1M7
Ci0gICAgaWYgKHZhbHVlID09ICJtYWNvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQ
bGF0Zm9ybU1hY09TOwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLQotaW5saW5lIFN0
cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbERlYnVnZ2VyUmVhc29uIHZhbHVlKQot
ewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sRGVidWdnZXJSZWFz
b25EaWVkOgotICAgICAgICByZXR1cm4gIkRpZWQiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xE
ZWJ1Z2dlclJlYXNvbkZhaW50ZWQ6Ci0gICAgICAgIHJldHVybiAiRmFpbnRlZCJfczsKLSAgICBj
YXNlIFRlc3RQcm90b2NvbERlYnVnZ2VyUmVhc29uSHVuZ3J5OgotICAgICAgICByZXR1cm4gIkh1
bmdyeSJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJv
dG9jb2xEZWJ1Z2dlclJlYXNvbj4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFs
dWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJEaWVkIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90
b2NvbERlYnVnZ2VyUmVhc29uRGllZDsKLSAgICBpZiAodmFsdWUgPT0gIkZhaW50ZWQiKQotICAg
ICAgICByZXR1cm4gVGVzdFByb3RvY29sRGVidWdnZXJSZWFzb25GYWludGVkOwotICAgIGlmICh2
YWx1ZSA9PSAiSHVuZ3J5IikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERlYnVnZ2VyUmVh
c29uSHVuZ3J5OwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLQotCi19IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10
eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2lt
cG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90
b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgotI2ltcG9ydCA8V2Vi
SW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLQotdXNpbmcgbmFtZXNw
YWNlIEluc3BlY3RvcjsKLQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMg
KERlYnVnZ2VyRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZUJyZWFrcG9pbnRJZDooTlNOdW1iZXIg
Kiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZVJlYXNv
bjooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0KLUBlbmQK
LUBpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChSdW50aW1lRG9tYWluKQot
Ci0rICh2b2lkKV9wYXJzZU9iamVjdElkOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9h
ZDooaWQpcGF5bG9hZDsKLSsgKHZvaWQpX3BhcnNlTHVja3lOdW1iZXJzOihOU0FycmF5Lyo8TlNO
dW1iZXI+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9w
YXJzZUJhYnlOYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKW91dFZhbHVlIGZyb21QYXls
b2FkOihpZClwYXlsb2FkOwotKyAodm9pZClfcGFyc2VOZXdPYmplY3RzOihOU0FycmF5Lyo8TlNO
dW1iZXI+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9w
YXJzZU9sZE9iamVjdHM6KE5TQXJyYXkvKjxOU051bWJlcj4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5
bG9hZDooaWQpcGF5bG9hZDsKLSsgKHZvaWQpX3BhcnNlU3RvcFJlYXNvbnM6KE5TQXJyYXkvKjxO
U1N0cmluZz4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLQotQGVuZAot
Ci1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChEZWJ1Z2dlckRv
bWFpbikKLQotKyAodm9pZClfcGFyc2VCcmVha3BvaW50SWQ6KE5TTnVtYmVyICoqKW91dFZhbHVl
IGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURf
VFlQRShwYXlsb2FkLCBbTlNOdW1iZXIgY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSAoTlNOdW1i
ZXIgKilwYXlsb2FkOwotfQotCi0rICh2b2lkKV9wYXJzZVJlYXNvbjooTlNOdW1iZXIgKiopb3V0
VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9S
X0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBjbGFzc10pOwotICAgIE9wdGlvbmFsPFRlc3RQ
cm90b2NvbERlYnVnZ2VyUmVhc29uPiByZXN1bHQgPSBJbnNwZWN0b3I6OmZyb21Qcm90b2NvbFN0
cmluZzxUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbj4ocGF5bG9hZCk7Ci0gICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9CQURfRU5VTV9WQUxVRShyZXN1bHQsIEAiUmVhc29uIik7Ci0gICAgKm91dFZh
bHVlID0gQChyZXN1bHQudmFsdWUoKSk7Ci19Ci0KLUBlbmQKLUBpbXBsZW1lbnRhdGlvbiBUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFJ1bnRpbWVEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNl
T2JqZWN0SWQ6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17
Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNOdW1iZXIgY2xh
c3NdKTsKLSAgICAqb3V0VmFsdWUgPSAoTlNOdW1iZXIgKilwYXlsb2FkOwotfQotCi0rICh2b2lk
KV9wYXJzZUx1Y2t5TnVtYmVyczooTlNBcnJheS8qPE5TTnVtYmVyPiovICoqKW91dFZhbHVlIGZy
b21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQ
RShwYXlsb2FkLCBbTlNBcnJheS8qPE5TTnVtYmVyPiovIGNsYXNzXSk7Ci0gICAgKm91dFZhbHVl
ID0gKE5TQXJyYXkvKjxOU051bWJlcj4qLyAqKXBheWxvYWQ7Ci19Ci0KLSsgKHZvaWQpX3BhcnNl
QmFieU5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6
KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQs
IFtOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSAoTlNBcnJh
eS8qPE5TU3RyaW5nPiovICopcGF5bG9hZDsKLX0KLQotKyAodm9pZClfcGFyc2VOZXdPYmplY3Rz
OihOU0FycmF5Lyo8TlNOdW1iZXI+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxv
YWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0FycmF5
Lyo8TlNOdW1iZXI+Ki8gY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSAoTlNBcnJheS8qPE5TTnVt
YmVyPiovICopcGF5bG9hZDsKLX0KLQotKyAodm9pZClfcGFyc2VPbGRPYmplY3RzOihOU0FycmF5
Lyo8TlNOdW1iZXI+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAg
ICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0FycmF5Lyo8TlNOdW1i
ZXI+Ki8gY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSAoTlNBcnJheS8qPE5TTnVtYmVyPiovICop
cGF5bG9hZDsKLX0KLQotKyAodm9pZClfcGFyc2VTdG9wUmVhc29uczooTlNBcnJheS8qPE5TU3Ry
aW5nPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1df
RVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNBcnJheS8qPE5TU3RyaW5nPiovIGNs
YXNzXSk7Ci0gICAgKm91dFZhbHVlID0gKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKXBheWxvYWQ7
Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0
UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRl
Lmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMu
aD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0KLQotCi0KLSMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRp
b24tZW51bS10eXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5
cGUuanNvbi1yZXN1bHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5NzllOGRiZTJm
Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29u
LXJlc3VsdAorKysgL2Rldi9udWxsCkBAIC0xLDEwODYgKzAsMCBAQAotIyMjIEJlZ2luIEZpbGU6
IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotLy8gUnVudGltZQotSW5zcGVjdG9yQmFja2VuZC5y
ZWdpc3RlckRvbWFpbigiUnVudGltZSIsIG51bGwpOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rl
ckVudW0oIlJ1bnRpbWUuRmFybUFuaW1hbHMiLCB7UGlnczogIlBpZ3MiLCBDb3dzOiAiQ293cyIs
IENhdHM6ICJDYXRzIiwgSGVuczogIkhlbnMifSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVy
RW51bSgiUnVudGltZS5Ud29MZWdnZWRBbmltYWxzIiwge0R1Y2tzOiAiRHVja3MiLCBIZW5zOiAi
SGVucyIsIENyb3dzOiAiQ3Jvd3MiLCBGbGFtaW5nb3M6ICJGbGFtaW5nb3MifSk7Ci1JbnNwZWN0
b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJSdW50aW1lIiwgbnVsbCk7Ci0jIyMgRW5kIEZpbGU6
IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVy
bmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMu
aCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5o
PgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0K
LW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hl
ciB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2Vu
ZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92
ZShkaXNwYXRjaGVyKTsgfQotICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hl
cigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KLXByaXZhdGU6
Ci0gICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwotfTsK
LQotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3Bh
dGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0
aW9uLWVudW0tdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgot
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Igewot
Ci10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5o
PgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQot
I2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNlbmRpZgotCi1u
YW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0j
IyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3Mg
RnJvbnRlbmRSb3V0ZXI7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxl
OiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBl
LWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJv
bnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFj
ZSBJbnNwZWN0b3IgewotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxl
OiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbE9iamVjdHMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVj
bGFyYXRpb24tZW51bS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFt
ZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotLy8g
Rm9yd2FyZCBkZWNsYXJhdGlvbnMuCi1uYW1lc3BhY2UgUnVudGltZSB7Ci1lbnVtIGNsYXNzIEZh
cm1BbmltYWxzOwotZW51bSBjbGFzcyBUd29MZWdnZWRBbmltYWxzOwotfSAvLyBSdW50aW1lCi0v
LyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCi0KLQotCi0KLW5hbWVzcGFjZSBUZXN0SGVs
cGVycyB7Ci0KLVN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSk7Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkK
LXsKLSAgICByZXR1cm4gZ2V0RW51bUNvbnN0YW50VmFsdWUoc3RhdGljX2Nhc3Q8aW50PihlbnVt
VmFsdWUpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKLQotbmFtZXNwYWNlIFJ1
bnRpbWUgewotLyogICovCi1lbnVtIGNsYXNzIEZhcm1BbmltYWxzIHsKLSAgICBQaWdzID0gMCwK
LSAgICBDb3dzID0gMSwKLSAgICBDYXRzID0gMiwKLSAgICBIZW5zID0gMywKLX07IC8vIGVudW0g
Y2xhc3MgRmFybUFuaW1hbHMKLS8qICAqLwotZW51bSBjbGFzcyBUd29MZWdnZWRBbmltYWxzIHsK
LSAgICBEdWNrcyA9IDQsCi0gICAgSGVucyA9IDMsCi0gICAgQ3Jvd3MgPSA1LAotICAgIEZsYW1p
bmdvcyA9IDYsCi19OyAvLyBlbnVtIGNsYXNzIFR3b0xlZ2dlZEFuaW1hbHMKLX0gLy8gUnVudGlt
ZQotCi0KLQotbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgUHJv
dG9jb2xFbnVtVHlwZT4KLU9wdGlvbmFsPFByb3RvY29sRW51bVR5cGU+IHBhcnNlRW51bVZhbHVl
RnJvbVN0cmluZyhjb25zdCBTdHJpbmcmKTsKLQotLy8gRW51bXMgaW4gdGhlICdSdW50aW1lJyBE
b21haW4KLXRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6
OkZhcm1BbmltYWxzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6UnVudGltZTo6RmFybUFuaW1hbHM+KGNvbnN0IFN0cmluZyYpOwotdGVtcGxhdGU8PgotT3B0
aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFscz4gcGFy
c2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xl
Z2dlZEFuaW1hbHM+KGNvbnN0IFN0cmluZyYpOwotCi19IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVy
cwotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
LQotbmFtZXNwYWNlIFdURiB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0
SGFzaDsKLQotLy8gSGFzaCBkZWNsYXJhdGlvbnMgaW4gdGhlICdSdW50aW1lJyBEb21haW4KLXRl
bXBsYXRlPD4KLXN0cnVjdCBEZWZhdWx0SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1l
OjpGYXJtQW5pbWFscz4gewotICAgIHR5cGVkZWYgSW50SGFzaDxJbnNwZWN0b3I6OlByb3RvY29s
OjpSdW50aW1lOjpGYXJtQW5pbWFscz4gSGFzaDsKLX07Ci10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgRGVm
YXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFscz4g
ewotICAgIHR5cGVkZWYgSW50SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUd29M
ZWdnZWRBbmltYWxzPiBIYXNoOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0jIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
T2JqZWN0cy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xh
cmF0aW9uLWVudW0tdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmpl
Y3RzLmgiCi0KLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1uYW1lc3BhY2UgUHJvdG9jb2wg
ewotCi1uYW1lc3BhY2UgVGVzdEhlbHBlcnMgewotCi1zdGF0aWMgY29uc3QgY2hhciogY29uc3Qg
ZW51bV9jb25zdGFudF92YWx1ZXNbXSA9IHsKLSAgICAiUGlncyIsCi0gICAgIkNvd3MiLAotICAg
ICJDYXRzIiwKLSAgICAiSGVucyIsCi0gICAgIkR1Y2tzIiwKLSAgICAiQ3Jvd3MiLAotICAgICJG
bGFtaW5nb3MiLAotfTsKLQotU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7
Ci0gICAgcmV0dXJuIGVudW1fY29uc3RhbnRfdmFsdWVzW2NvZGVdOwotfQotCi0vLyBFbnVtcyBp
biB0aGUgJ1J1bnRpbWUnIERvbWFpbgotdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJ
bnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpGYXJtQW5pbWFscz4oY29uc3QgU3RyaW5nJiBw
cm90b2NvbFN0cmluZykKLXsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVz
W10gPSB7Ci0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFy
bUFuaW1hbHM6OlBpZ3MsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVu
dGltZTo6RmFybUFuaW1hbHM6OkNvd3MsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90
b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM6OkNhdHMsCi0gICAgICAgIChzaXplX3QpSW5zcGVj
dG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM6OkhlbnMsCi0gICAgfTsKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IDQ7ICsraSkKLSAgICAgICAgaWYgKHByb3RvY29sU3RyaW5n
ID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAgICAgICAg
IHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHMpY29uc3Rh
bnRWYWx1ZXNbaV07Ci0KLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi10ZW1wbGF0ZTw+
Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxz
PiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6
VHdvTGVnZ2VkQW5pbWFscz4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKLXsKLSAgICBz
dGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7Ci0gICAgICAgIChzaXplX3Qp
SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFsczo6RHVja3MsCi0g
ICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5p
bWFsczo6SGVucywKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1l
OjpUd29MZWdnZWRBbmltYWxzOjpDcm93cywKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlBy
b3RvY29sOjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxzOjpGbGFtaW5nb3MsCi0gICAgfTsKLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDQ7ICsraSkKLSAgICAgICAgaWYgKHByb3RvY29sU3Ry
aW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAgICAg
ICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFs
cyljb25zdGFudFZhbHVlc1tpXTsKLQotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLQot
fSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29s
Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bE9iamVjdHMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0
Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRp
b24tZW51bS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmRE
aXNwYXRjaGVycy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQotCi0KLW5hbWVzcGFj
ZSBJbnNwZWN0b3IgewotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9y
dCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlICJUZXN0UHJv
dG9jb2xJbnRlcm5hbC5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5o
IgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Igewot
Ci19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xC
YWNrZW5kRGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZp
Z3VyYXRpb24uaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFy
YXRpb24tZW51bS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgotCi1fX2F0dHJp
YnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbiA6IE5TT2JqZWN0Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xDb25maWd1cmF0aW9uLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZp
Z3VyYXRpb24ubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xh
cmF0aW9uLWVudW0tdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKLQotI2ltcG9y
dCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmRE
aXNwYXRjaGVycy5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hh
YmxlQWdlbnQuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9y
Q29udHJvbGxlci5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRl
QmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcnMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGlt
cGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KLXsKLSAgICBBdWdtZW50YWJs
ZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotfQotCi0tIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRy
b2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAg
ICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRyb2xsZXIg
PSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWRlYWxsb2MKLXsK
LSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2
ZW50RGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBl
LWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBv
cnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8d3RmL0pTT05WYWx1
ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0jIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlv
bi1lbnVtLXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2ltcG9ydCA8V2ViSW5z
cGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgotCi0KLQotCi10eXBlZGVmIE5TX0VOVU0o
TlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xQbGF0Zm9ybSkgewotICAgIFRlc3RQcm90b2NvbFBsYXRm
b3JtQWxsLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYywKLSAgICBUZXN0UHJvdG9j
b2xQbGF0Zm9ybUlPUywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TLAotfTsKLQotCi10
eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHMp
IHsKLSAgICBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHNQaWdzLAotICAgIFRlc3RQcm90
b2NvbFJ1bnRpbWVGYXJtQW5pbWFsc0Nvd3MsCi0gICAgVGVzdFByb3RvY29sUnVudGltZUZhcm1B
bmltYWxzQ2F0cywKLSAgICBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHNIZW5zLAotfTsK
LQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dl
ZEFuaW1hbHMpIHsKLSAgICBUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFsc0R1Y2tz
LAotICAgIFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzSGVucywKLSAgICBUZXN0
UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFsc0Nyb3dzLAotICAgIFRlc3RQcm90b2NvbFJ1
bnRpbWVUd29MZWdnZWRBbmltYWxzRmxhbWluZ29zLAotfTsKLQotCi0KLQotCi0KLQotCi0jaW1w
b3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbEludGVybmFsLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBl
LWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFBy
b3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21l
bnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4K
LQotCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29s
LmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+
Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5
cGU+Ci1PcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJp
bmcmIHZhbHVlKTsKLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2Nv
bFBsYXRmb3JtIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFBy
b3RvY29sUGxhdGZvcm1BbGw6Ci0gICAgICAgIHJldHVybiAiYWxsIl9zOwotICAgIGNhc2UgVGVz
dFByb3RvY29sUGxhdGZvcm1HZW5lcmljOgotICAgICAgICByZXR1cm4gImdlbmVyaWMiX3M7Ci0g
ICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzoKLSAgICAgICAgcmV0dXJuICJpb3MiX3M7
Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOgotICAgICAgICByZXR1cm4gIm1h
Y29zIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90
b2NvbFBsYXRmb3JtPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsK
LSAgICBpZiAodmFsdWUgPT0gImFsbCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0
Zm9ybUFsbDsKLSAgICBpZiAodmFsdWUgPT0gImdlbmVyaWMiKQotICAgICAgICByZXR1cm4gVGVz
dFByb3RvY29sUGxhdGZvcm1HZW5lcmljOwotICAgIGlmICh2YWx1ZSA9PSAiaW9zIikKLSAgICAg
ICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOwotICAgIGlmICh2YWx1ZSA9PSAibWFj
b3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzsKLSAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwotfQotCi0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhU
ZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHMgdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVl
KSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHNQaWdzOgotICAgICAg
ICByZXR1cm4gIlBpZ3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1h
bHNDb3dzOgotICAgICAgICByZXR1cm4gIkNvd3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xS
dW50aW1lRmFybUFuaW1hbHNDYXRzOgotICAgICAgICByZXR1cm4gIkNhdHMiX3M7Ci0gICAgY2Fz
ZSBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHNIZW5zOgotICAgICAgICByZXR1cm4gIkhl
bnMiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3Rv
Y29sUnVudGltZUZhcm1BbmltYWxzPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2
YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gIlBpZ3MiKQotICAgICAgICByZXR1cm4gVGVzdFBy
b3RvY29sUnVudGltZUZhcm1BbmltYWxzUGlnczsKLSAgICBpZiAodmFsdWUgPT0gIkNvd3MiKQot
ICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzQ293czsKLSAgICBp
ZiAodmFsdWUgPT0gIkNhdHMiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUnVudGltZUZh
cm1BbmltYWxzQ2F0czsKLSAgICBpZiAodmFsdWUgPT0gIkhlbnMiKQotICAgICAgICByZXR1cm4g
VGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzSGVuczsKLSAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwotfQotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sUnVu
dGltZVR3b0xlZ2dlZEFuaW1hbHMgdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAg
Y2FzZSBUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFsc0R1Y2tzOgotICAgICAgICBy
ZXR1cm4gIkR1Y2tzIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFu
aW1hbHNIZW5zOgotICAgICAgICByZXR1cm4gIkhlbnMiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9j
b2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFsc0Nyb3dzOgotICAgICAgICByZXR1cm4gIkNyb3dzIl9z
OwotICAgIGNhc2UgVGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHNGbGFtaW5nb3M6
Ci0gICAgICAgIHJldHVybiAiRmxhbWluZ29zIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8Pgot
aW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzPiBmcm9t
UHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0g
IkR1Y2tzIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmlt
YWxzRHVja3M7Ci0gICAgaWYgKHZhbHVlID09ICJIZW5zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQ
cm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzSGVuczsKLSAgICBpZiAodmFsdWUgPT0gIkNy
b3dzIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxz
Q3Jvd3M7Ci0gICAgaWYgKHZhbHVlID09ICJGbGFtaW5nb3MiKQotICAgICAgICByZXR1cm4gVGVz
dFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHNGbGFtaW5nb3M7Ci0gICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29s
VHlwZVBhcnNlci5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVj
dFByaXZhdGUuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGludGVyZmFjZSBU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFJ1bnRpbWVEb21haW4pCi0KLSsgKHZvaWQpX3Bh
cnNlRmFybUFuaW1hbHM6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXls
b2FkOwotKyAodm9pZClfcGFyc2VUd29MZWdnZWRBbmltYWxzOihOU051bWJlciAqKilvdXRWYWx1
ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChSdW50aW1lRG9tYWluKQotCi0rICh2b2lkKV9wYXJz
ZUZhcm1BbmltYWxzOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9h
ZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TU3RyaW5n
IGNsYXNzXSk7Ci0gICAgT3B0aW9uYWw8VGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzPiBy
ZXN1bHQgPSBJbnNwZWN0b3I6OmZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xSdW50aW1l
RmFybUFuaW1hbHM+KHBheWxvYWQpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX0VOVU1f
VkFMVUUocmVzdWx0LCBAIkZhcm1BbmltYWxzIik7Ci0gICAgKm91dFZhbHVlID0gQChyZXN1bHQu
dmFsdWUoKSk7Ci19Ci0KLSsgKHZvaWQpX3BhcnNlVHdvTGVnZ2VkQW5pbWFsczooTlNOdW1iZXIg
Kiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJ
T05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBjbGFzc10pOwotICAgIE9wdGlvbmFs
PFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzPiByZXN1bHQgPSBJbnNwZWN0b3I6
OmZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFscz4o
cGF5bG9hZCk7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfRU5VTV9WQUxVRShyZXN1bHQs
IEAiVHdvTGVnZ2VkQW5pbWFscyIpOwotICAgICpvdXRWYWx1ZSA9IEAocmVzdWx0LnZhbHVlKCkp
OwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0
UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRl
Lmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMu
aD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0KLQotIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1v
YmplY3QtdHlwZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5
cGUuanNvbi1yZXN1bHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyZTZkYTJiYmM4
Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpz
b24tcmVzdWx0CisrKyAvZGV2L251bGwKQEAgLTEsMjQ1NSArMCwwIEBACi0jIyMgQmVnaW4gRmls
ZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLS8vIERhdGFiYXNlCi1JbnNwZWN0b3JCYWNr
ZW5kLnJlZ2lzdGVyRG9tYWluKCJEYXRhYmFzZSIsIG51bGwpOwotSW5zcGVjdG9yQmFja2VuZC5y
ZWdpc3RlckVudW0oIkRhdGFiYXNlLk1vdXNlQnV0dG9uIiwge05vbmU6ICJOb25lIiwgTGVmdDog
IkxlZnQiLCBNaWRkbGU6ICJNaWRkbGUiLCBSaWdodDogIlJpZ2h0In0pOwotSW5zcGVjdG9yQmFj
a2VuZC5yZWdpc3RlckVudW0oIkRhdGFiYXNlLk9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlRGlyZWN0
aW9uYWxpdHkiLCB7TFRSOiAiTFRSIiwgUlRMOiAiUlRMIn0pOwotSW5zcGVjdG9yQmFja2VuZC5y
ZWdpc3RlckVudW0oIkRhdGFiYXNlLlBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5Iiwge0xU
UjogIkxUUiIsIFJUTDogIlJUTCJ9KTsKLUluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4o
IkRhdGFiYXNlIiwgbnVsbCk7Ci0jIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5k
cy5qcwotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5o
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmpl
Y3QtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgotI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7
Ci0KLWNsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2b2lk
IHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRj
aGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9Ci0gICAg
QmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9i
YWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQotcHJpdmF0ZToKLSAgICBSZWZQdHI8QmFja2VuZERp
c3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Ci19OwotCi0KLQotCi19IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKLQotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQotIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgK
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UK
LQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdHlwZWRlZiBTdHJpbmcgRXJy
b3JTdHJpbmc7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTog
VGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERp
c3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVj
bGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEJhY2tlbmRE
aXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRl
bmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi9O
ZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2lmIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotI2luY2x1ZGUgIlRlc3RBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgSW5zcGVjdG9y
IHsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNw
YXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJh
dGlvbi1vYmplY3QtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5o
IgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBGcm9udGVuZFJvdXRlcjsK
LQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERp
c3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNw
cAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2Jq
ZWN0LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMu
aCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsK
LQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5k
RGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVj
dC10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2Nv
bFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFtZXNwYWNlIEluc3Bl
Y3RvciB7Ci0KLQotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotLy8gRm9yd2FyZCBkZWNs
YXJhdGlvbnMuCi1uYW1lc3BhY2UgRGF0YWJhc2UgewotY2xhc3MgRXJyb3I7Ci1jbGFzcyBPcHRp
b25hbFBhcmFtZXRlckJ1bmRsZTsKLWNsYXNzIFBhcmFtZXRlckJ1bmRsZTsKLWNsYXNzIE9iamVj
dFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHM7Ci1jbGFzcyBEdW1teU9iamVjdDsKLWVudW0gY2xh
c3MgTW91c2VCdXR0b247Ci19IC8vIERhdGFiYXNlCi0KLW5hbWVzcGFjZSBUZXN0IHsKLWNsYXNz
IFBhcmFtZXRlckJ1bmRsZTsKLX0gLy8gVGVzdAotLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRp
b25zLgotCi0KLS8vIFR5cGVkZWZzLgotbmFtZXNwYWNlIERhdGFiYXNlIHsKLXR5cGVkZWYgSlNP
Tjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IEVycm9yTGlz
dDsKLX0gLy8gRGF0YWJhc2UKLS8vIEVuZCBvZiB0eXBlZGVmcy4KLQotbmFtZXNwYWNlIFRlc3RI
ZWxwZXJzIHsKLQotU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKTsKLQotdGVt
cGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKFQgZW51bVZhbHVl
KQotewotICAgIHJldHVybiBnZXRFbnVtQ29uc3RhbnRWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KGVu
dW1WYWx1ZSkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwotCi1uYW1lc3BhY2Ug
RGF0YWJhc2UgewotLyogRGF0YWJhc2UgZXJyb3IuICovCi1jbGFzcyBFcnJvciA6IHB1YmxpYyBK
U09OOjpPYmplY3RCYXNlIHsKLXB1YmxpYzoKLSAgICBlbnVtIHsKLSAgICAgICAgTm9GaWVsZHNT
ZXQgPSAwLAotICAgICAgICBNZXNzYWdlU2V0ID0gMSA8PCAwLAotICAgICAgICBDb2RlU2V0ID0g
MSA8PCAxLAotICAgICAgICBBbGxGaWVsZHNTZXQgPSAoTWVzc2FnZVNldCB8IENvZGVTZXQpCi0g
ICAgfTsKLQotICAgIHRlbXBsYXRlPGludCBTVEFURT4KLSAgICBjbGFzcyBCdWlsZGVyIHsKLSAg
ICBwcml2YXRlOgotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBtX3Jlc3VsdDsKLQotICAg
ICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUo
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRl
cjxTVEFURSB8IFNURVA+Kj4odGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyKFJl
ZjwvKkVycm9yKi9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQotICAgICAgICAgICAgOiBtX3Jlc3Vs
dChXVEZNb3ZlKG9iamVjdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUp
OwotICAgICAgICB9Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBFcnJvcjsKLSAgICBwdWJsaWM6Ci0K
LSAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1lc3NhZ2VTZXQ+JiBzZXRNZXNzYWdlKGNvbnN0IFN0
cmluZyYgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBNZXNzYWdlU2V0KSwgcHJvcGVydHlfbWVzc2FnZV9hbHJlYWR5X3NldCk7Ci0gICAgICAg
ICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJtZXNzYWdlIl9zLCB2YWx1ZSk7Ci0gICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPE1lc3NhZ2VTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgQ29kZVNldD4mIHNldENvZGUoaW50IHZhbHVlKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29kZVNldCksIHByb3BlcnR5X2Nv
ZGVfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldEludGVnZXIoImNvZGUi
X3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29kZVNldD4oKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIFJlZjxFcnJvcj4gcmVsZWFzZSgpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25v
dF9yZWFkeSk7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoRXJyb3IpID09IHNp
emVvZihKU09OOjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7Ci0KLSAgICAgICAgICAgIFJlZjxKU09O
OjpPYmplY3Q+IGpzb25SZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOwotICAgICAg
ICAgICAgYXV0byByZXN1bHQgPSBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxFcnJvcj4q
PigmanNvblJlc3VsdCkpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQot
ICAgIH07Ci0KLSAgICAvKgotICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKLSAgICAgKiBS
ZWY8RXJyb3I+IHJlc3VsdCA9IEVycm9yOjpjcmVhdGUoKQotICAgICAqICAgICAuc2V0TWVzc2Fn
ZSguLi4pCi0gICAgICogICAgIC5zZXRDb2RlKC4uLikKLSAgICAgKiAgICAgLnJlbGVhc2UoKTsK
LSAgICAgKi8KLSAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpKTsKLSAgICB9Ci19OwotCi0vKiBFbnVtZXJhdGVzIGRpZmZlcmVudCBtb3VzZSBidXR0b25z
IHRoYXQgY2FuIGJlIHVzZWQuICovCi1lbnVtIGNsYXNzIE1vdXNlQnV0dG9uIHsKLSAgICBOb25l
ID0gMCwKLSAgICBMZWZ0ID0gMSwKLSAgICBNaWRkbGUgPSAyLAotICAgIFJpZ2h0ID0gMywKLX07
IC8vIGVudW0gY2xhc3MgTW91c2VCdXR0b24KLWNsYXNzIE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxl
IDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewotcHVibGljOgotICAgIC8vIE5hbWVkIGFmdGVy
IHByb3BlcnR5IG5hbWUgJ2RpcmVjdGlvbmFsaXR5JyB3aGlsZSBnZW5lcmF0aW5nIE9wdGlvbmFs
UGFyYW1ldGVyQnVuZGxlLgotICAgIGVudW0gY2xhc3MgRGlyZWN0aW9uYWxpdHkgewotICAgICAg
ICBMVFIgPSA0LAotICAgICAgICBSVEwgPSA1LAotICAgIH07IC8vIGVudW0gY2xhc3MgRGlyZWN0
aW9uYWxpdHkKLSAgICBlbnVtIHsKLSAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAotICAgICAgICBB
bGxGaWVsZHNTZXQgPSAwCi0gICAgfTsKLQotICAgIHRlbXBsYXRlPGludCBTVEFURT4KLSAgICBj
bGFzcyBCdWlsZGVyIHsKLSAgICBwcml2YXRlOgotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0
PiBtX3Jlc3VsdDsKLQotICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8
IFNURVA+JiBjYXN0U3RhdGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKnJlaW50
ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBCdWlsZGVyKFJlZjwvKk9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlKi9KU09OOjpPYmpl
Y3Q+JiYgb2JqZWN0KQotICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0
LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwotICAgICAgICB9Ci0gICAgICAg
IGZyaWVuZCBjbGFzcyBPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTsKLSAgICBwdWJsaWM6Ci0KLSAg
ICAgICAgUmVmPE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlPiByZWxlYXNlKCkKLSAgICAgICAgewot
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRf
aXNfbm90X3JlYWR5KTsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihPcHRpb25h
bFBhcmFtZXRlckJ1bmRsZSkgPT0gc2l6ZW9mKEpTT046Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsK
LQotICAgICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4ganNvblJlc3VsdCA9IG1fcmVzdWx0LnJl
bGVhc2VOb25OdWxsKCk7Ci0gICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFdURk1vdmUoKnJlaW50
ZXJwcmV0X2Nhc3Q8UmVmPE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlPio+KCZqc29uUmVzdWx0KSk7
Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIC8q
Ci0gICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgotICAgICAqIFJlZjxPcHRpb25hbFBhcmFt
ZXRlckJ1bmRsZT4gcmVzdWx0ID0gT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU6OmNyZWF0ZSgpCi0g
ICAgICogICAgIC5yZWxlYXNlKCk7Ci0gICAgICovCi0gICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVs
ZHNTZXQ+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1Nl
dD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRDb2x1bW5O
YW1lcyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiB2YWx1ZSkKLSAgICB7Ci0gICAgICAg
IEpTT046Ok9iamVjdEJhc2U6OnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgV1RGTW92ZSh2YWx1
ZSkpOwotICAgIH0KLQotICAgIHZvaWQgc2V0QnV0dG9ucyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b24+PiB2YWx1ZSkKLSAgICB7
Ci0gICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldEFycmF5KCJidXR0b25zIl9zLCBXVEZNb3Zl
KHZhbHVlKSk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXREaXJlY3Rpb25hbGl0eShEaXJlY3Rpb25h
bGl0eSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldFN0cmluZygi
ZGlyZWN0aW9uYWxpdHkiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRF
bnVtQ29uc3RhbnRWYWx1ZSh2YWx1ZSkpOwotICAgIH0KLQotICAgIHZvaWQgc2V0Tm90ZXMoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldFN0
cmluZygibm90ZXMiX3MsIHZhbHVlKTsKLSAgICB9Ci0KLSAgICB2b2lkIHNldFRpbWVzdGFtcChk
b3VibGUgdmFsdWUpCi0gICAgewotICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXREb3VibGUo
InRpbWVzdGFtcCJfcywgdmFsdWUpOwotICAgIH0KLQotICAgIHZvaWQgc2V0VmFsdWVzKFJlZlB0
cjxKU09OOjpPYmplY3Q+IHZhbHVlKQotICAgIHsKLSAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6
c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFdURk1vdmUodmFsdWUpKTsKLSAgICB9Ci0KLSAgICB2b2lk
IHNldFBheWxvYWQoUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEpT
T046Ok9iamVjdEJhc2U6OnNldFZhbHVlKCJwYXlsb2FkIl9zLCBXVEZNb3ZlKHZhbHVlKSk7Ci0g
ICAgfQotCi0gICAgdm9pZCBzZXRFcnJvcihSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0
YWJhc2U6OkVycm9yPiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNl
dE9iamVjdCgiZXJyb3IiX3MsIFdURk1vdmUodmFsdWUpKTsKLSAgICB9Ci0KLSAgICB2b2lkIHNl
dEVycm9yTGlzdChSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yTGlz
dD4gdmFsdWUpCi0gICAgewotICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRBcnJheSgiZXJy
b3JMaXN0Il9zLCBXVEZNb3ZlKHZhbHVlKSk7Ci0gICAgfQotfTsKLQotY2xhc3MgUGFyYW1ldGVy
QnVuZGxlIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewotcHVibGljOgotICAgIC8vIE5hbWVk
IGFmdGVyIHByb3BlcnR5IG5hbWUgJ2RpcmVjdGlvbmFsaXR5JyB3aGlsZSBnZW5lcmF0aW5nIFBh
cmFtZXRlckJ1bmRsZS4KLSAgICBlbnVtIGNsYXNzIERpcmVjdGlvbmFsaXR5IHsKLSAgICAgICAg
TFRSID0gNCwKLSAgICAgICAgUlRMID0gNSwKLSAgICB9OyAvLyBlbnVtIGNsYXNzIERpcmVjdGlv
bmFsaXR5Ci0gICAgZW51bSB7Ci0gICAgICAgIE5vRmllbGRzU2V0ID0gMCwKLSAgICAgICAgQ29s
dW1uTmFtZXNTZXQgPSAxIDw8IDAsCi0gICAgICAgIEJ1dHRvbnNTZXQgPSAxIDw8IDEsCi0gICAg
ICAgIERpcmVjdGlvbmFsaXR5U2V0ID0gMSA8PCAyLAotICAgICAgICBOb3Rlc1NldCA9IDEgPDwg
MywKLSAgICAgICAgVGltZXN0YW1wU2V0ID0gMSA8PCA0LAotICAgICAgICBWYWx1ZXNTZXQgPSAx
IDw8IDUsCi0gICAgICAgIFBheWxvYWRTZXQgPSAxIDw8IDYsCi0gICAgICAgIEVycm9yU2V0ID0g
MSA8PCA3LAotICAgICAgICBFcnJvckxpc3RTZXQgPSAxIDw8IDgsCi0gICAgICAgIEFsbEZpZWxk
c1NldCA9IChDb2x1bW5OYW1lc1NldCB8IEJ1dHRvbnNTZXQgfCBEaXJlY3Rpb25hbGl0eVNldCB8
IE5vdGVzU2V0IHwgVGltZXN0YW1wU2V0IHwgVmFsdWVzU2V0IHwgUGF5bG9hZFNldCB8IEVycm9y
U2V0IHwgRXJyb3JMaXN0U2V0KQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+Ci0g
ICAgY2xhc3MgQnVpbGRlciB7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPEpTT046Ok9i
amVjdD4gbV9yZXN1bHQ7Ci0KLSAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RB
VEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICpy
ZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwotICAgICAgICB9
Ci0KLSAgICAgICAgQnVpbGRlcihSZWY8LypQYXJhbWV0ZXJCdW5kbGUqL0pTT046Ok9iamVjdD4m
JiBvYmplY3QpCi0gICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKLSAgICAg
ICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1
aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZnJp
ZW5kIGNsYXNzIFBhcmFtZXRlckJ1bmRsZTsKLSAgICBwdWJsaWM6Ci0KLSAgICAgICAgQnVpbGRl
cjxTVEFURSB8IENvbHVtbk5hbWVzU2V0PiYgc2V0Q29sdW1uTmFtZXMoUmVmUHRyPEpTT046OkFy
cmF5T2Y8U3RyaW5nPj4gdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBDb2x1bW5OYW1lc1NldCksIHByb3BlcnR5X2NvbHVtbk5hbWVzX2FscmVh
ZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3Ms
IHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29sdW1uTmFtZXNTZXQ+KCk7
Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQnV0dG9uc1NldD4mIHNldEJ1
dHRvbnMoUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6
Ok1vdXNlQnV0dG9uPj4gdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBCdXR0b25zU2V0KSwgcHJvcGVydHlfYnV0dG9uc19hbHJlYWR5X3NldCk7
Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoImJ1dHRvbnMiX3MsIHZhbHVlKTsKLSAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8QnV0dG9uc1NldD4oKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBEaXJlY3Rpb25hbGl0eVNldD4mIHNldERpcmVjdGlvbmFs
aXR5KERpcmVjdGlvbmFsaXR5IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxF
X0FTU0VSVCghKFNUQVRFICYgRGlyZWN0aW9uYWxpdHlTZXQpLCBwcm9wZXJ0eV9kaXJlY3Rpb25h
bGl0eV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJkaXJl
Y3Rpb25hbGl0eSJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1D
b25zdGFudFZhbHVlKHZhbHVlKSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPERpcmVj
dGlvbmFsaXR5U2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IE5v
dGVzU2V0PiYgc2V0Tm90ZXMoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICAgICAgewotICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE5vdGVzU2V0KSwgcHJvcGVydHlfbm90ZXNf
YWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibm90ZXMiX3Ms
IHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Tm90ZXNTZXQ+KCk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVGltZXN0YW1wU2V0PiYgc2V0VGltZXN0
YW1wKGRvdWJsZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
IShTVEFURSAmIFRpbWVzdGFtcFNldCksIHByb3BlcnR5X3RpbWVzdGFtcF9hbHJlYWR5X3NldCk7
Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIHZhbHVlKTsK
LSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VGltZXN0YW1wU2V0PigpOwotICAgICAgICB9
Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IFZhbHVlc1NldD4mIHNldFZhbHVlcyhSZWZQdHI8
SlNPTjo6T2JqZWN0PiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIFZhbHVlc1NldCksIHByb3BlcnR5X3ZhbHVlc19hbHJlYWR5X3NldCk7Ci0g
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIHZhbHVlKTsKLSAgICAg
ICAgICAgIHJldHVybiBjYXN0U3RhdGU8VmFsdWVzU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IFBheWxvYWRTZXQ+JiBzZXRQYXlsb2FkKFJlZlB0cjxKU09OOjpW
YWx1ZT4gdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBQYXlsb2FkU2V0KSwgcHJvcGVydHlfcGF5bG9hZF9hbHJlYWR5X3NldCk7Ci0gICAgICAg
ICAgICBtX3Jlc3VsdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIHZhbHVlKTsKLSAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8UGF5bG9hZFNldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBFcnJvclNldD4mIHNldEVycm9yKFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEYXRhYmFzZTo6RXJyb3I+IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVCghKFNUQVRFICYgRXJyb3JTZXQpLCBwcm9wZXJ0eV9lcnJvcl9hbHJlYWR5X3Nl
dCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJlcnJvciJfcywgdmFsdWUpOwot
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxFcnJvclNldD4oKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBFcnJvckxpc3RTZXQ+JiBzZXRFcnJvckxpc3QoUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvckxpc3Q+IHZhbHVlKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRXJyb3JMaXN0U2V0KSwg
cHJvcGVydHlfZXJyb3JMaXN0X2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXRBcnJheSgiZXJyb3JMaXN0Il9zLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0
YXRlPEVycm9yTGlzdFNldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIFJlZjxQYXJhbWV0ZXJC
dW5kbGU+IHJlbGVhc2UoKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChT
VEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwotICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoc2l6ZW9mKFBhcmFtZXRlckJ1bmRsZSkgPT0gc2l6ZW9mKEpTT046Ok9i
amVjdCksIGNhbm5vdF9jYXN0KTsKLQotICAgICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4ganNv
blJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7Ci0gICAgICAgICAgICBhdXRvIHJl
c3VsdCA9IFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPFBhcmFtZXRlckJ1bmRsZT4qPigm
anNvblJlc3VsdCkpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAg
IH07Ci0KLSAgICAvKgotICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKLSAgICAgKiBSZWY8
UGFyYW1ldGVyQnVuZGxlPiByZXN1bHQgPSBQYXJhbWV0ZXJCdW5kbGU6OmNyZWF0ZSgpCi0gICAg
ICogICAgIC5zZXRDb2x1bW5OYW1lcyguLi4pCi0gICAgICogICAgIC5zZXRCdXR0b25zKC4uLikK
LSAgICAgKiAgICAgLnNldERpcmVjdGlvbmFsaXR5KC4uLikKLSAgICAgKiAgICAgLnNldE5vdGVz
KC4uLikKLSAgICAgKiAgICAgLnNldFRpbWVzdGFtcCguLi4pCi0gICAgICogICAgIC5zZXRWYWx1
ZXMoLi4uKQotICAgICAqICAgICAuc2V0UGF5bG9hZCguLi4pCi0gICAgICogICAgIC5zZXRFcnJv
ciguLi4pCi0gICAgICogICAgIC5zZXRFcnJvckxpc3QoLi4uKQotICAgICAqICAgICAucmVsZWFz
ZSgpOwotICAgICAqLwotICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6
Y3JlYXRlKCkpOwotICAgIH0KLX07Ci0KLS8qIENvbmZsaWN0ZWQgbmFtZXMgbWF5IGNhdXNlIGdl
bmVyYXRlZCBnZXR0ZXJzL3NldHRlcnMgdG8gY2xhc2ggd2l0aCBidWlsdC1pbiBJbnNwZWN0b3JP
YmplY3QgbWV0aG9kcy4gKi8KLWNsYXNzIE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHMg
OiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7Ci1wdWJsaWM6Ci0gICAgZW51bSB7Ci0gICAgICAg
IE5vRmllbGRzU2V0ID0gMCwKLSAgICAgICAgSW50ZWdlclNldCA9IDEgPDwgMCwKLSAgICAgICAg
QXJyYXlTZXQgPSAxIDw8IDEsCi0gICAgICAgIFN0cmluZ1NldCA9IDEgPDwgMiwKLSAgICAgICAg
VmFsdWVTZXQgPSAxIDw8IDMsCi0gICAgICAgIE9iamVjdFNldCA9IDEgPDwgNCwKLSAgICAgICAg
QWxsRmllbGRzU2V0ID0gKEludGVnZXJTZXQgfCBBcnJheVNldCB8IFN0cmluZ1NldCB8IFZhbHVl
U2V0IHwgT2JqZWN0U2V0KQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+Ci0gICAg
Y2xhc3MgQnVpbGRlciB7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVj
dD4gbV9yZXN1bHQ7Ci0KLSAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUg
fCBTVEVQPiYgY2FzdFN0YXRlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICpyZWlu
dGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwotICAgICAgICB9Ci0K
LSAgICAgICAgQnVpbGRlcihSZWY8LypPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzKi9K
U09OOjpPYmplY3Q+JiYgb2JqZWN0KQotICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9i
amVjdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5v
RmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwotICAgICAgICB9
Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzOwot
ICAgIHB1YmxpYzoKLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgSW50ZWdlclNldD4mIHNldElu
dGVnZXIoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoIShTVEFURSAmIEludGVnZXJTZXQpLCBwcm9wZXJ0eV9pbnRlZ2VyX2FscmVhZHlf
c2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImludGVnZXIiX3MsIHZhbHVl
KTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8SW50ZWdlclNldD4oKTsKLSAgICAgICAg
fQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBBcnJheVNldD4mIHNldEFycmF5KGNvbnN0IFN0
cmluZyYgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBBcnJheVNldCksIHByb3BlcnR5X2FycmF5X2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXRTdHJpbmcoImFycmF5Il9zLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPEFycmF5U2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcjxT
VEFURSB8IFN0cmluZ1NldD4mIHNldFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU3RyaW5nU2V0KSwgcHJv
cGVydHlfc3RyaW5nX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJp
bmcoInN0cmluZyJfcywgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTdHJp
bmdTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVmFsdWVTZXQ+
JiBzZXRWYWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBD
T01QSUxFX0FTU0VSVCghKFNUQVRFICYgVmFsdWVTZXQpLCBwcm9wZXJ0eV92YWx1ZV9hbHJlYWR5
X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ2YWx1ZSJfcywgdmFsdWUp
OwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxWYWx1ZVNldD4oKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBPYmplY3RTZXQ+JiBzZXRPYmplY3QoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIE9iamVjdFNldCksIHByb3BlcnR5X29iamVjdF9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAg
ICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJvYmplY3QiX3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJl
dHVybiBjYXN0U3RhdGU8T2JqZWN0U2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgUmVmPE9i
amVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHM+IHJlbGVhc2UoKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19u
b3RfcmVhZHkpOwotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKE9iamVjdFdpdGhQ
cm9wZXJ0eU5hbWVDb25mbGljdHMpID09IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5ub3RfY2Fz
dCk7Ci0KLSAgICAgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25SZXN1bHQgPSBtX3Jlc3Vs
dC5yZWxlYXNlTm9uTnVsbCgpOwotICAgICAgICAgICAgYXV0byByZXN1bHQgPSBXVEZNb3ZlKCpy
ZWludGVycHJldF9jYXN0PFJlZjxPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzPio+KCZq
c29uUmVzdWx0KSk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAg
fTsKLQotICAgIC8qCi0gICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgotICAgICAqIFJlZjxP
YmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzPiByZXN1bHQgPSBPYmplY3RXaXRoUHJvcGVy
dHlOYW1lQ29uZmxpY3RzOjpjcmVhdGUoKQotICAgICAqICAgICAuc2V0SW50ZWdlciguLi4pCi0g
ICAgICogICAgIC5zZXRBcnJheSguLi4pCi0gICAgICogICAgIC5zZXRTdHJpbmcoLi4uKQotICAg
ICAqICAgICAuc2V0VmFsdWUoLi4uKQotICAgICAqICAgICAuc2V0T2JqZWN0KC4uLikKLSAgICAg
KiAgICAgLnJlbGVhc2UoKTsKLSAgICAgKi8KLSAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1Nl
dD4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihK
U09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKLSAgICB9Ci19OwotCi19IC8vIERhdGFiYXNlCi0KLW5h
bWVzcGFjZSBUZXN0IHsKLWNsYXNzIFBhcmFtZXRlckJ1bmRsZSA6IHB1YmxpYyBKU09OOjpPYmpl
Y3RCYXNlIHsKLXB1YmxpYzoKLSAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdkaXJl
Y3Rpb25hbGl0eScgd2hpbGUgZ2VuZXJhdGluZyBQYXJhbWV0ZXJCdW5kbGUuCi0gICAgZW51bSBj
bGFzcyBEaXJlY3Rpb25hbGl0eSB7Ci0gICAgICAgIExUUiA9IDQsCi0gICAgICAgIFJUTCA9IDUs
Ci0gICAgfTsgLy8gZW51bSBjbGFzcyBEaXJlY3Rpb25hbGl0eQotICAgIGVudW0gewotICAgICAg
ICBOb0ZpZWxkc1NldCA9IDAsCi0gICAgICAgIERpcmVjdGlvbmFsaXR5U2V0ID0gMSA8PCAwLAot
ICAgICAgICBCdXR0b25zU2V0ID0gMSA8PCAxLAotICAgICAgICBDb2x1bW5OYW1lc1NldCA9IDEg
PDwgMiwKLSAgICAgICAgTm90ZXNTZXQgPSAxIDw8IDMsCi0gICAgICAgIFRpbWVzdGFtcFNldCA9
IDEgPDwgNCwKLSAgICAgICAgVmFsdWVzU2V0ID0gMSA8PCA1LAotICAgICAgICBQYXlsb2FkU2V0
ID0gMSA8PCA2LAotICAgICAgICBFcnJvclNldCA9IDEgPDwgNywKLSAgICAgICAgQWxsRmllbGRz
U2V0ID0gKERpcmVjdGlvbmFsaXR5U2V0IHwgQnV0dG9uc1NldCB8IENvbHVtbk5hbWVzU2V0IHwg
Tm90ZXNTZXQgfCBUaW1lc3RhbXBTZXQgfCBWYWx1ZXNTZXQgfCBQYXlsb2FkU2V0IHwgRXJyb3JT
ZXQpCi0gICAgfTsKLQotICAgIHRlbXBsYXRlPGludCBTVEFURT4KLSAgICBjbGFzcyBCdWlsZGVy
IHsKLSAgICBwcml2YXRlOgotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBtX3Jlc3VsdDsK
LQotICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0
U3RhdGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8
QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWls
ZGVyKFJlZjwvKlBhcmFtZXRlckJ1bmRsZSovSlNPTjo6T2JqZWN0PiYmIG9iamVjdCkKLSAgICAg
ICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2lu
X25vbl9pbml0X3N0YXRlKTsKLSAgICAgICAgfQotICAgICAgICBmcmllbmQgY2xhc3MgUGFyYW1l
dGVyQnVuZGxlOwotICAgIHB1YmxpYzoKLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRGlyZWN0
aW9uYWxpdHlTZXQ+JiBzZXREaXJlY3Rpb25hbGl0eShEaXJlY3Rpb25hbGl0eSB2YWx1ZSkKLSAg
ICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIERpcmVjdGlvbmFs
aXR5U2V0KSwgcHJvcGVydHlfZGlyZWN0aW9uYWxpdHlfYWxyZWFkeV9zZXQpOwotICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldFN0cmluZygiZGlyZWN0aW9uYWxpdHkiX3MsIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSh2YWx1ZSkpOwotICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxEaXJlY3Rpb25hbGl0eVNldD4oKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBCdXR0b25zU2V0PiYgc2V0QnV0dG9ucyhSZWZQdHI8
SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b24+
PiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IEJ1dHRvbnNTZXQpLCBwcm9wZXJ0eV9idXR0b25zX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXRBcnJheSgiYnV0dG9ucyJfcywgdmFsdWUpOwotICAgICAgICAgICAgcmV0
dXJuIGNhc3RTdGF0ZTxCdXR0b25zU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRl
cjxTVEFURSB8IENvbHVtbk5hbWVzU2V0PiYgc2V0Q29sdW1uTmFtZXMoUmVmUHRyPEpTT046OkFy
cmF5T2Y8U3RyaW5nPj4gdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBDb2x1bW5OYW1lc1NldCksIHByb3BlcnR5X2NvbHVtbk5hbWVzX2FscmVh
ZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3Ms
IHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29sdW1uTmFtZXNTZXQ+KCk7
Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTm90ZXNTZXQ+JiBzZXROb3Rl
cyhjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgTm90ZXNTZXQpLCBwcm9wZXJ0eV9ub3Rlc19hbHJlYWR5X3NldCk7Ci0g
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJub3RlcyJfcywgdmFsdWUpOwotICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxOb3Rlc1NldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAg
IEJ1aWxkZXI8U1RBVEUgfCBUaW1lc3RhbXBTZXQ+JiBzZXRUaW1lc3RhbXAoZG91YmxlIHZhbHVl
KQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVGltZXN0
YW1wU2V0KSwgcHJvcGVydHlfdGltZXN0YW1wX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgdmFsdWUpOwotICAgICAgICAgICAgcmV0
dXJuIGNhc3RTdGF0ZTxUaW1lc3RhbXBTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgVmFsdWVzU2V0PiYgc2V0VmFsdWVzKFJlZlB0cjxKU09OOjpPYmplY3Q+IHZh
bHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVmFs
dWVzU2V0KSwgcHJvcGVydHlfdmFsdWVzX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNh
c3RTdGF0ZTxWYWx1ZXNTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgUGF5bG9hZFNldD4mIHNldFBheWxvYWQoUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZSkKLSAg
ICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFBheWxvYWRTZXQp
LCBwcm9wZXJ0eV9wYXlsb2FkX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXRWYWx1ZSgicGF5bG9hZCJfcywgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0
ZTxQYXlsb2FkU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IEVy
cm9yU2V0PiYgc2V0RXJyb3IoUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpF
cnJvcj4gdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBFcnJvclNldCksIHByb3BlcnR5X2Vycm9yX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXRPYmplY3QoImVycm9yIl9zLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPEVycm9yU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgUmVmPFBhcmFt
ZXRlckJ1bmRsZT4gcmVsZWFzZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7Ci0gICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoUGFyYW1ldGVyQnVuZGxlKSA9PSBzaXplb2YoSlNP
Tjo6T2JqZWN0KSwgY2Fubm90X2Nhc3QpOwotCi0gICAgICAgICAgICBSZWY8SlNPTjo6T2JqZWN0
PiBqc29uUmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKLSAgICAgICAgICAgIGF1
dG8gcmVzdWx0ID0gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8UGFyYW1ldGVyQnVuZGxl
Pio+KCZqc29uUmVzdWx0KSk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9
Ci0gICAgfTsKLQotICAgIC8qCi0gICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgotICAgICAq
IFJlZjxQYXJhbWV0ZXJCdW5kbGU+IHJlc3VsdCA9IFBhcmFtZXRlckJ1bmRsZTo6Y3JlYXRlKCkK
LSAgICAgKiAgICAgLnNldERpcmVjdGlvbmFsaXR5KC4uLikKLSAgICAgKiAgICAgLnNldEJ1dHRv
bnMoLi4uKQotICAgICAqICAgICAuc2V0Q29sdW1uTmFtZXMoLi4uKQotICAgICAqICAgICAuc2V0
Tm90ZXMoLi4uKQotICAgICAqICAgICAuc2V0VGltZXN0YW1wKC4uLikKLSAgICAgKiAgICAgLnNl
dFZhbHVlcyguLi4pCi0gICAgICogICAgIC5zZXRQYXlsb2FkKC4uLikKLSAgICAgKiAgICAgLnNl
dEVycm9yKC4uLikKLSAgICAgKiAgICAgLnJlbGVhc2UoKTsKLSAgICAgKi8KLSAgICBzdGF0aWMg
QnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBCdWls
ZGVyPE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKLSAgICB9Ci19OwotCi19
IC8vIFRlc3QKLQotCi0KLW5hbWVzcGFjZSBUZXN0SGVscGVycyB7Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIFByb3RvY29sRW51bVR5cGU+Ci1PcHRpb25hbDxQcm90b2NvbEVudW1UeXBlPiBwYXJzZUVu
dW1WYWx1ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJik7Ci0KLS8vIEVudW1zIGluIHRoZSAnRGF0
YWJhc2UnIERvbWFpbgotdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPihjb25zdCBTdHJpbmcmKTsKLXRlbXBs
YXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpPcHRpb25hbFBh
cmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJ
bnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU6OkRp
cmVjdGlvbmFsaXR5Pihjb25zdCBTdHJpbmcmKTsKLXRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5
PiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6
OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+KGNvbnN0IFN0cmluZyYpOwotCi0vLyBF
bnVtcyBpbiB0aGUgJ1Rlc3QnIERvbWFpbgotdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9y
OjpQcm90b2NvbDo6VGVzdDo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4gcGFyc2VF
bnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlBhcmFtZXRlckJ1
bmRsZTo6RGlyZWN0aW9uYWxpdHk+KGNvbnN0IFN0cmluZyYpOwotCi19IC8vIG5hbWVzcGFjZSBU
ZXN0SGVscGVycwotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKLQotbmFtZXNwYWNlIFdURiB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBEZWZhdWx0SGFzaDsKLQotLy8gSGFzaCBkZWNsYXJhdGlvbnMgaW4gdGhlICdEYXRhYmFzZScg
RG9tYWluCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPiB7Ci0gICAgdHlwZWRlZiBJbnRIYXNoPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4gSGFzaDsKLX07Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdURgotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0KLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi1uYW1lc3BhY2UgVGVzdEhlbHBlcnMgewotCi1z
dGF0aWMgY29uc3QgY2hhciogY29uc3QgZW51bV9jb25zdGFudF92YWx1ZXNbXSA9IHsKLSAgICAi
Tm9uZSIsCi0gICAgIkxlZnQiLAotICAgICJNaWRkbGUiLAotICAgICJSaWdodCIsCi0gICAgIkxU
UiIsCi0gICAgIlJUTCIsCi19OwotCi1TdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNv
ZGUpIHsKLSAgICByZXR1cm4gZW51bV9jb25zdGFudF92YWx1ZXNbY29kZV07Ci19Ci0KLS8vIEVu
dW1zIGluIHRoZSAnRGF0YWJhc2UnIERvbWFpbgotdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPiBwYXJzZUVudW1WYWx1ZUZyb21T
dHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPihjb25zdCBT
dHJpbmcmIHByb3RvY29sU3RyaW5nKQotewotICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3Rh
bnRWYWx1ZXNbXSA9IHsKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6TW91c2VCdXR0b246Ok5vbmUsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90
b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uOjpMZWZ0LAotICAgICAgICAoc2l6ZV90KUluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbjo6TWlkZGxlLAotICAgICAgICAo
c2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbjo6UmlnaHQs
Ci0gICAgfTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDQ7ICsraSkKLSAgICAgICAgaWYg
KHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ld
XSkKLSAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1v
dXNlQnV0dG9uKWNvbnN0YW50VmFsdWVzW2ldOwotCi0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
LX0KLQotdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6
Ok9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4gcGFyc2VFbnVtVmFsdWVG
cm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpPcHRpb25hbFBhcmFtZXRl
ckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCi17
Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0gewotICAgICAgICAo
c2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpPcHRpb25hbFBhcmFtZXRlckJ1
bmRsZTo6RGlyZWN0aW9uYWxpdHk6OkxUUiwKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlBy
b3RvY29sOjpEYXRhYmFzZTo6T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5
OjpSVEwsCi0gICAgfTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDI7ICsraSkKLSAgICAg
ICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFs
dWVzW2ldXSkKLSAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6Ok9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eSljb25zdGFudFZhbHVl
c1tpXTsKLQotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLXRlbXBsYXRlPD4KLU9wdGlv
bmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVj
dGlvbmFsaXR5PiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+KGNvbnN0IFN0cmluZyYg
cHJvdG9jb2xTdHJpbmcpCi17Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVl
c1tdID0gewotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQ
YXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5OjpMVFIsCi0gICAgICAgIChzaXplX3QpSW5z
cGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxp
dHk6OlJUTCwKLSAgICB9OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMjsgKytpKQotICAg
ICAgICBpZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRW
YWx1ZXNbaV1dKQotICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eSljb25zdGFudFZhbHVlc1tpXTsK
LQotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLQotLy8gRW51bXMgaW4gdGhlICdUZXN0
JyBEb21haW4KLXRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6
OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmlu
ZzxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFs
aXR5Pihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQotewotICAgIHN0YXRpYyBjb25zdCBz
aXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlBy
b3RvY29sOjpUZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5OjpMVFIsCi0gICAg
ICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UGFyYW1ldGVyQnVuZGxlOjpE
aXJlY3Rpb25hbGl0eTo6UlRMLAotICAgIH07Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAy
OyArK2kpCi0gICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVl
c1tjb25zdGFudFZhbHVlc1tpXV0pCi0gICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlRlc3Q6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHkpY29uc3RhbnRWYWx1
ZXNbaV07Ci0KLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi0KLX0gLy8gbmFtZXNwYWNl
IFRlc3RIZWxwZXJzCi0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAot
Ci0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBl
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5o
PgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQotCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xC
YWNrZW5kRGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0
eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJv
dG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVy
bmFsLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW5jbHVk
ZSA8d3RmL0pTT05WYWx1ZXMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLX0gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNw
YXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5o
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmpl
Y3QtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KLQotX19hdHRyaWJ1dGVfXygo
dmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3Vy
YXRpb24gOiBOU09iamVjdAotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29u
ZmlndXJhdGlvbi5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9u
Lm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1v
YmplY3QtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKLQotI2ltcG9ydCAiVGVz
dFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRj
aGVycy5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdl
bnQuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJv
bGxlci5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2Vu
ZERpc3BhdGNoZXJzLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcnMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGltcGxlbWVu
dGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KLXsKLSAgICBBdWdtZW50YWJsZUluc3Bl
Y3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIK
LXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0
dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250
cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBb
c3VwZXIgZGVhbGxvY107Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24ubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlz
cGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xh
cmF0aW9uLW9iamVjdC10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAi
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5o
PgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
LmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9i
amVjdC10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLSNpbXBvcnQgPFdlYkluc3Bl
Y3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KLQotCi1AY2xhc3MgVGVzdFByb3RvY29sRGF0
YWJhc2VFcnJvcjsKLUBjbGFzcyBUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVy
QnVuZGxlOwotQGNsYXNzIFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlOwotQGNs
YXNzIFRlc3RQcm90b2NvbERhdGFiYXNlT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0czsK
LUBjbGFzcyBUZXN0UHJvdG9jb2xEYXRhYmFzZUR1bW15T2JqZWN0OwotQGNsYXNzIFRlc3RQcm90
b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGU7Ci0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRl
c3RQcm90b2NvbFBsYXRmb3JtKSB7Ci0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1BbGwsCi0gICAg
VGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9T
LAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1MsCi19OwotCi0KLXR5cGVkZWYgTlNfRU5V
TShOU0ludGVnZXIsIFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VCdXR0b24pIHsKLSAgICBUZXN0
UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9uTm9uZSwKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFz
ZU1vdXNlQnV0dG9uTGVmdCwKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9uTWlk
ZGxlLAotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VCdXR0b25SaWdodCwKLX07Ci0KLXR5
cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJh
bWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSkgewotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlT3B0
aW9uYWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eUxUUiwKLSAgICBUZXN0UHJvdG9jb2xE
YXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHlSVEwsCi19OwotCi10
eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1
bmRsZURpcmVjdGlvbmFsaXR5KSB7Ci0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJC
dW5kbGVEaXJlY3Rpb25hbGl0eUxUUiwKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRl
ckJ1bmRsZURpcmVjdGlvbmFsaXR5UlRMLAotfTsKLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdl
ciwgVGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5KSB7Ci0gICAg
VGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5TFRSLAotICAgIFRl
c3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eVJUTCwKLX07Ci0KLQot
X19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQ
cm90b2NvbERhdGFiYXNlRXJyb3IgOiBSV0lQcm90b2NvbEpTT05PYmplY3QKLS0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXls
b2FkOwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29s
SlNPTk9iamVjdCAqKWpzb25PYmplY3Q7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhNZXNzYWdl
OihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZTooaW50KWNvZGU7Ci0vKiByZXF1aXJlZCAqLyBAcHJv
cGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKm1lc3NhZ2U7Ci0vKiByZXF1aXJlZCAq
LyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQgY29kZTsKLUBlbmQKLQotX19hdHRy
aWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2Nv
bERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUgOiBSV0lQcm90b2NvbEpTT05PYmplY3QK
LS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAq
LCBpZD4gKilwYXlsb2FkOwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6
KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7Ci0vKiBvcHRpb25hbCAqLyBAcHJv
cGVydHkgKG5vbmF0b21pYywgY29weSkgTlNBcnJheS8qPE5TU3RyaW5nPiovICpjb2x1bW5OYW1l
czsKLS8qIG9wdGlvbmFsICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU0FycmF5Lyo8
TlNTdHJpbmc+Ki8gKmJ1dHRvbnM7Ci0vKiBvcHRpb25hbCAqLyBAcHJvcGVydHkgKG5vbmF0b21p
YywgYXNzaWduKSBUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlRGly
ZWN0aW9uYWxpdHkgZGlyZWN0aW9uYWxpdHk7Ci0vKiBvcHRpb25hbCAqLyBAcHJvcGVydHkgKG5v
bmF0b21pYywgY29weSkgTlNTdHJpbmcgKm5vdGVzOwotLyogb3B0aW9uYWwgKi8gQHByb3BlcnR5
IChub25hdG9taWMsIGFzc2lnbikgZG91YmxlIHRpbWVzdGFtcDsKLS8qIG9wdGlvbmFsICovIEBw
cm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIFJXSVByb3RvY29sSlNPTk9iamVjdCAqdmFsdWVz
OwotLyogb3B0aW9uYWwgKi8gQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgUldJUHJvdG9j
b2xKU09OT2JqZWN0ICpwYXlsb2FkOwotLyogb3B0aW9uYWwgKi8gQHByb3BlcnR5IChub25hdG9t
aWMsIHJldGFpbikgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqZXJyb3I7Ci0vKiBvcHRpb25h
bCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNBcnJheS8qPFRlc3RQcm90b2NvbERh
dGFiYXNlRXJyb3I+Ki8gKmVycm9yTGlzdDsKLUBlbmQKLQotX19hdHRyaWJ1dGVfXygodmlzaWJp
bGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1l
dGVyQnVuZGxlIDogUldJUHJvdG9jb2xKU09OT2JqZWN0Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKLS0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3Qg
Kilqc29uT2JqZWN0OwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29sdW1uTmFtZXM6KE5TQXJy
YXkvKjxOU1N0cmluZz4qLyAqKWNvbHVtbk5hbWVzIGJ1dHRvbnM6KE5TQXJyYXkvKjxOU1N0cmlu
Zz4qLyAqKWJ1dHRvbnMgZGlyZWN0aW9uYWxpdHk6KFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1l
dGVyQnVuZGxlRGlyZWN0aW9uYWxpdHkpZGlyZWN0aW9uYWxpdHkgbm90ZXM6KE5TU3RyaW5nICop
bm90ZXMgdGltZXN0YW1wOihkb3VibGUpdGltZXN0YW1wIHZhbHVlczooUldJUHJvdG9jb2xKU09O
T2JqZWN0ICopdmFsdWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQg
ZXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKillcnJvciBlcnJvckxpc3Q6KE5TQXJy
YXkvKjxUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yPiovICopZXJyb3JMaXN0OwotLyogcmVxdWly
ZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAq
Y29sdW1uTmFtZXM7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkg
TlNBcnJheS8qPE5TU3RyaW5nPiovICpidXR0b25zOwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5
IChub25hdG9taWMsIGFzc2lnbikgVGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGVE
aXJlY3Rpb25hbGl0eSBkaXJlY3Rpb25hbGl0eTsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAo
bm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqbm90ZXM7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVy
dHkgKG5vbmF0b21pYywgYXNzaWduKSBkb3VibGUgdGltZXN0YW1wOwotLyogcmVxdWlyZWQgKi8g
QHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgUldJUHJvdG9jb2xKU09OT2JqZWN0ICp2YWx1
ZXM7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluKSBSV0lQcm90
b2NvbEpTT05PYmplY3QgKnBheWxvYWQ7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0
b21pYywgcmV0YWluKSBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICplcnJvcjsKLS8qIHJlcXVp
cmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU0FycmF5Lyo8VGVzdFByb3RvY29s
RGF0YWJhc2VFcnJvcj4qLyAqZXJyb3JMaXN0OwotQGVuZAotCi1fX2F0dHJpYnV0ZV9fKCh2aXNp
YmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sRGF0YWJhc2VPYmpl
Y3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzIDogUldJUHJvdG9jb2xKU09OT2JqZWN0Ci0tIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+
ICopcGF5bG9hZDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQ
cm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
SW50ZWdlcjooTlNTdHJpbmcgKilpbnRlZ2VyIGFycmF5OihOU1N0cmluZyAqKWFycmF5IHN0cmlu
ZzooTlNTdHJpbmcgKilzdHJpbmcgdmFsdWU6KE5TU3RyaW5nICopdmFsdWUgb2JqZWN0OihOU1N0
cmluZyAqKW9iamVjdDsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5
KSBOU1N0cmluZyAqaW50ZWdlcjsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWlj
LCBjb3B5KSBOU1N0cmluZyAqYXJyYXk7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0
b21pYywgY29weSkgTlNTdHJpbmcgKnN0cmluZzsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAo
bm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqdmFsdWU7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVy
dHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKm9iamVjdDsKLUBlbmQKLQotX19hdHRyaWJ1
dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbERh
dGFiYXNlRHVtbXlPYmplY3QgOiBSV0lQcm90b2NvbEpTT05PYmplY3QKLS0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2Fk
OwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNP
Tk9iamVjdCAqKWpzb25PYmplY3Q7Ci1AZW5kCi0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkg
KCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxl
IDogUldJUHJvdG9jb2xKU09OT2JqZWN0Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2Fk
OihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKLS0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2Jq
ZWN0OwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRGlyZWN0aW9uYWxpdHk6KFRlc3RQcm90b2Nv
bFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSlkaXJlY3Rpb25hbGl0eSBidXR0b25z
OihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilidXR0b25zIGNvbHVtbk5hbWVzOihOU0FycmF5Lyo8
TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcyBub3RlczooTlNTdHJpbmcgKilub3RlcyB0aW1lc3Rh
bXA6KGRvdWJsZSl0aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKil2YWx1
ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZCBlcnJvcjooVGVzdFBy
b3RvY29sRGF0YWJhc2VFcnJvciAqKWVycm9yOwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChu
b25hdG9taWMsIGFzc2lnbikgVGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZURpcmVjdGlv
bmFsaXR5IGRpcmVjdGlvbmFsaXR5OwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9t
aWMsIGNvcHkpIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqYnV0dG9uczsKLS8qIHJlcXVpcmVkICov
IEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmNvbHVt
bk5hbWVzOwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3Ry
aW5nICpub3RlczsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24p
IGRvdWJsZSB0aW1lc3RhbXA7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywg
cmV0YWluKSBSV0lQcm90b2NvbEpTT05PYmplY3QgKnZhbHVlczsKLS8qIHJlcXVpcmVkICovIEBw
cm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5bG9h
ZDsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIFRlc3RQcm90
b2NvbERhdGFiYXNlRXJyb3IgKmVycm9yOwotQGVuZAotCi0KLQotCi0KLQotI2ltcG9ydCA8V2Vi
SW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgotCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJ
bnRlcm5hbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJh
dGlvbi1vYmplY3QtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29s
SlNPTk9iamVjdFByaXZhdGUuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxl
SW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotCi0K
LQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIK
LSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KLQot
bmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4K
LU9wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYg
dmFsdWUpOwotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sUGxh
dGZvcm0gdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9j
b2xQbGF0Zm9ybUFsbDoKLSAgICAgICAgcmV0dXJuICJhbGwiX3M7Ci0gICAgY2FzZSBUZXN0UHJv
dG9jb2xQbGF0Zm9ybUdlbmVyaWM6Ci0gICAgICAgIHJldHVybiAiZ2VuZXJpYyJfczsKLSAgICBj
YXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOgotICAgICAgICByZXR1cm4gImlvcyJfczsKLSAg
ICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M6Ci0gICAgICAgIHJldHVybiAibWFjb3Mi
X3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29s
UGxhdGZvcm0+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAg
IGlmICh2YWx1ZSA9PSAiYWxsIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3Jt
QWxsOwotICAgIGlmICh2YWx1ZSA9PSAiZ2VuZXJpYyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJv
dG9jb2xQbGF0Zm9ybUdlbmVyaWM7Ci0gICAgaWYgKHZhbHVlID09ICJpb3MiKQotICAgICAgICBy
ZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1JT1M7Ci0gICAgaWYgKHZhbHVlID09ICJtYWNvcyIp
Ci0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOwotICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7Ci19Ci0KLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQ
cm90b2NvbERhdGFiYXNlTW91c2VCdXR0b24gdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7
Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9uTm9uZToKLSAgICAgICAg
cmV0dXJuICJOb25lIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VNb3VzZUJ1dHRv
bkxlZnQ6Ci0gICAgICAgIHJldHVybiAiTGVmdCJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERh
dGFiYXNlTW91c2VCdXR0b25NaWRkbGU6Ci0gICAgICAgIHJldHVybiAiTWlkZGxlIl9zOwotICAg
IGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VNb3VzZUJ1dHRvblJpZ2h0OgotICAgICAgICByZXR1
cm4gIlJpZ2h0Il9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRl
c3RQcm90b2NvbERhdGFiYXNlTW91c2VCdXR0b24+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBT
dHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiTm9uZSIpCi0gICAgICAgIHJldHVy
biBUZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9uTm9uZTsKLSAgICBpZiAodmFsdWUgPT0g
IkxlZnQiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VNb3VzZUJ1dHRvbkxl
ZnQ7Ci0gICAgaWYgKHZhbHVlID09ICJNaWRkbGUiKQotICAgICAgICByZXR1cm4gVGVzdFByb3Rv
Y29sRGF0YWJhc2VNb3VzZUJ1dHRvbk1pZGRsZTsKLSAgICBpZiAodmFsdWUgPT0gIlJpZ2h0IikK
LSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VCdXR0b25SaWdodDsKLSAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJp
bmcoVGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFs
aXR5IHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29s
RGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5TFRSOgotICAgICAg
ICByZXR1cm4gIkxUUiJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQ
YXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eVJUTDoKLSAgICAgICAgcmV0dXJuICJSVEwiX3M7
Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0
YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5PiBmcm9tUHJvdG9jb2xT
dHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gIkxUUiIpCi0g
ICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxl
RGlyZWN0aW9uYWxpdHlMVFI7Ci0gICAgaWYgKHZhbHVlID09ICJSVEwiKQotICAgICAgICByZXR1
cm4gVGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFs
aXR5UlRMOwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLWlubGluZSBTdHJpbmcgdG9Q
cm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlv
bmFsaXR5IHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3Rv
Y29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eUxUUjoKLSAgICAgICAgcmV0
dXJuICJMVFIiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRs
ZURpcmVjdGlvbmFsaXR5UlRMOgotICAgICAgICByZXR1cm4gIlJUTCJfczsKLSAgICB9Ci19Ci0K
LXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRl
ckJ1bmRsZURpcmVjdGlvbmFsaXR5PiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2
YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gIkxUUiIpCi0gICAgICAgIHJldHVybiBUZXN0UHJv
dG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5TFRSOwotICAgIGlmICh2
YWx1ZSA9PSAiUlRMIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1l
dGVyQnVuZGxlRGlyZWN0aW9uYWxpdHlSVEw7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0K
LQotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sVGVzdFBhcmFt
ZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5IHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewot
ICAgIGNhc2UgVGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5TFRS
OgotICAgICAgICByZXR1cm4gIkxUUiJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFRlc3RQYXJh
bWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eVJUTDoKLSAgICAgICAgcmV0dXJuICJSVEwiX3M7Ci0g
ICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sVGVzdFBh
cmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5PiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gIkxUUiIpCi0gICAgICAgIHJldHVybiBU
ZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHlMVFI7Ci0gICAgaWYg
KHZhbHVlID09ICJSVEwiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sVGVzdFBhcmFtZXRl
ckJ1bmRsZURpcmVjdGlvbmFsaXR5UlRMOwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0
aW9uLW9iamVjdC10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0KLSNpbXBv
cnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgot
I2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLQot
dXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMgKERhdGFiYXNlRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZUVycm9yOihUZXN0
UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2Fk
OwotKyAodm9pZClfcGFyc2VFcnJvckxpc3Q6KE5TQXJyYXkvKjxUZXN0UHJvdG9jb2xEYXRhYmFz
ZUVycm9yPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotKyAodm9pZClf
cGFyc2VNb3VzZUJ1dHRvbjooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBh
eWxvYWQ7Ci0rICh2b2lkKV9wYXJzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOihUZXN0UHJvdG9j
b2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlICoqKW91dFZhbHVlIGZyb21QYXlsb2Fk
OihpZClwYXlsb2FkOwotKyAodm9pZClfcGFyc2VQYXJhbWV0ZXJCdW5kbGU6KFRlc3RQcm90b2Nv
bERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXls
b2FkOwotKyAodm9pZClfcGFyc2VPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzOihUZXN0
UHJvdG9jb2xEYXRhYmFzZU9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHMgKiopb3V0VmFs
dWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZUR1bW15T2JqZWN0OihU
ZXN0UHJvdG9jb2xEYXRhYmFzZUR1bW15T2JqZWN0ICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihp
ZClwYXlsb2FkOwotCi1AZW5kCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cyAoVGVzdERvbWFpbikKLQotKyAodm9pZClfcGFyc2VQYXJhbWV0ZXJCdW5kbGU6KFRlc3RQcm90
b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGUgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxv
YWQ7Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cyAoRGF0YWJhc2VEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlRXJyb3I6KFRlc3RQcm90b2NvbERh
dGFiYXNlRXJyb3IgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBU
SFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3Nd
KTsKLSAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgYWxsb2NdIGlu
aXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKLX0KLQotKyAodm9pZClfcGFyc2VFcnJvckxpc3Q6KE5T
QXJyYXkvKjxUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yPiovICoqKW91dFZhbHVlIGZyb21QYXls
b2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXls
b2FkLCBbTlNBcnJheS8qPFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I+Ki8gY2xhc3NdKTsKLSAg
ICAqb3V0VmFsdWUgPSAoTlNBcnJheS8qPFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I+Ki8gKilw
YXlsb2FkOwotfQotCi0rICh2b2lkKV9wYXJzZU1vdXNlQnV0dG9uOihOU051bWJlciAqKilvdXRW
YWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
QkFEX1RZUEUocGF5bG9hZCwgW05TU3RyaW5nIGNsYXNzXSk7Ci0gICAgT3B0aW9uYWw8VGVzdFBy
b3RvY29sRGF0YWJhc2VNb3VzZUJ1dHRvbj4gcmVzdWx0ID0gSW5zcGVjdG9yOjpmcm9tUHJvdG9j
b2xTdHJpbmc8VGVzdFByb3RvY29sRGF0YWJhc2VNb3VzZUJ1dHRvbj4ocGF5bG9hZCk7Ci0gICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfRU5VTV9WQUxVRShyZXN1bHQsIEAiTW91c2VCdXR0b24i
KTsKLSAgICAqb3V0VmFsdWUgPSBAKHJlc3VsdC52YWx1ZSgpKTsKLX0KLQotKyAodm9pZClfcGFy
c2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTooVGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBh
cmFtZXRlckJ1bmRsZSAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFz
c10pOwotICAgICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFt
ZXRlckJ1bmRsZSBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOwotfQotCi0rICh2b2lk
KV9wYXJzZVBhcmFtZXRlckJ1bmRsZTooVGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5k
bGUgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENF
UFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKLSAgICAq
b3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlIGFsbG9jXSBp
bml0V2l0aFBheWxvYWQ6cGF5bG9hZF07Ci19Ci0KLSsgKHZvaWQpX3BhcnNlT2JqZWN0V2l0aFBy
b3BlcnR5TmFtZUNvbmZsaWN0czooVGVzdFByb3RvY29sRGF0YWJhc2VPYmplY3RXaXRoUHJvcGVy
dHlOYW1lQ29uZmxpY3RzICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0g
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNs
YXNzXSk7Ci0gICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xEYXRhYmFzZU9iamVjdFdpdGhQ
cm9wZXJ0eU5hbWVDb25mbGljdHMgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKLX0K
LQotKyAodm9pZClfcGFyc2VEdW1teU9iamVjdDooVGVzdFByb3RvY29sRGF0YWJhc2VEdW1teU9i
amVjdCAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOwotICAg
ICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sRGF0YWJhc2VEdW1teU9iamVjdCBhbGxvY10gaW5p
dFdpdGhQYXlsb2FkOnBheWxvYWRdOwotfQotCi1AZW5kCi1AaW1wbGVtZW50YXRpb24gVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zIChUZXN0RG9tYWluKQotCi0rICh2b2lkKV9wYXJzZVBhcmFt
ZXRlckJ1bmRsZTooVGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZSAqKilvdXRWYWx1ZSBm
cm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZ
UEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IFtbVGVz
dFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZSBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxv
YWRdOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQg
IlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFBy
aXZhdGUuaD4KLSNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZh
bHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLUBpbXBsZW1lbnRhdGlv
biBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yCi0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBh
eWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQKLXsK
LSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQot
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAIm1lc3Nh
Z2UiXSwgQCJtZXNzYWdlIik7Ci0gICAgc2VsZi5tZXNzYWdlID0gcGF5bG9hZFtAIm1lc3NhZ2Ui
XTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtA
ImNvZGUiXSwgQCJjb2RlIik7Ci0gICAgc2VsZi5jb2RlID0gW3BheWxvYWRbQCJjb2RlIl0gaW50
ZWdlclZhbHVlXTsKLQotICAgIHJldHVybiBzZWxmOwotfQotLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9iamVjdAotewotICAg
IGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmplY3QgdG9KU09OT2Jq
ZWN0XS5nZXQoKV0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19
Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBj
b2RlOihpbnQpY29kZQotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAg
ICByZXR1cm4gbmlsOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJU
WShtZXNzYWdlLCBAIm1lc3NhZ2UiKTsKLQotICAgIHNlbGYubWVzc2FnZSA9IG1lc3NhZ2U7Ci0g
ICAgc2VsZi5jb2RlID0gY29kZTsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKXNl
dE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZQotewotICAgIFtzdXBlciBzZXRTdHJpbmc6bWVz
c2FnZSBmb3JLZXk6QCJtZXNzYWdlIl07Ci19Ci0KLS0gKE5TU3RyaW5nICopbWVzc2FnZQotewot
ICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAibWVzc2FnZSJdOwotfQotCi0tICh2b2lk
KXNldENvZGU6KGludCljb2RlCi17Ci0gICAgW3N1cGVyIHNldEludGVnZXI6Y29kZSBmb3JLZXk6
QCJjb2RlIl07Ci19Ci0KLS0gKGludCljb2RlCi17Ci0gICAgcmV0dXJuIFtzdXBlciBpbnRlZ2Vy
Rm9yS2V5OkAiY29kZSJdOwotfQotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9j
b2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlCi0KLS0gKGluc3RhbmNldHlwZSlpbml0
V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxv
YWQKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5p
bDsKLQotICAgIHNlbGYuY29sdW1uTmFtZXMgPSBwYXlsb2FkW0AiY29sdW1uTmFtZXMiXTsKLQot
ICAgIHNlbGYuYnV0dG9ucyA9IHBheWxvYWRbQCJidXR0b25zIl07Ci0KLSAgICBPcHRpb25hbDxU
ZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHk+
IGRpcmVjdGlvbmFsaXR5ID0gZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERhdGFiYXNl
T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eT4ocGF5bG9hZFtAImRpcmVjdGlv
bmFsaXR5Il0pOwotICAgIGlmIChkaXJlY3Rpb25hbGl0eSkKLSAgICAgICAgc2VsZi5kaXJlY3Rp
b25hbGl0eSA9IGRpcmVjdGlvbmFsaXR5LnZhbHVlKCk7Ci0KLSAgICBzZWxmLm5vdGVzID0gcGF5
bG9hZFtAIm5vdGVzIl07Ci0KLSAgICBzZWxmLnRpbWVzdGFtcCA9IFtwYXlsb2FkW0AidGltZXN0
YW1wIl0gZG91YmxlVmFsdWVdOwotCi0gICAgc2VsZi52YWx1ZXMgPSBwYXlsb2FkW0AidmFsdWVz
Il07Ci0KLSAgICBzZWxmLnBheWxvYWQgPSBwYXlsb2FkW0AicGF5bG9hZCJdOwotCi0gICAgc2Vs
Zi5lcnJvciA9IFtbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBhbGxvY10gaW5pdFdpdGhQYXls
b2FkOnBheWxvYWRbQCJlcnJvciJdXTsKLQotICAgIHNlbGYuZXJyb3JMaXN0ID0gb2JqY0FycmF5
RnJvbVBheWxvYWQ8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4ocGF5bG9hZFtAImVycm9yTGlz
dCJdKTsKLQotICAgIHJldHVybiBzZWxmOwotfQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJv
dG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9iamVjdAotewotICAgIGlmICgh
KHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmplY3QgdG9KU09OT2JqZWN0XS5n
ZXQoKV0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0g
KHZvaWQpc2V0Q29sdW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWNvbHVtbk5hbWVz
Ci17Ci0gICAgW3N1cGVyIHNldEpTT05BcnJheTp0b0pTT05TdHJpbmdBcnJheShjb2x1bW5OYW1l
cykgZm9yS2V5OkAiY29sdW1uTmFtZXMiXTsKLX0KLQotLSAoTlNBcnJheS8qPE5TU3RyaW5nPiov
ICopY29sdW1uTmFtZXMKLXsKLSAgICByZXR1cm4gdG9PYmpDU3RyaW5nQXJyYXkoW3N1cGVyIEpT
T05BcnJheUZvcktleTpAImNvbHVtbk5hbWVzIl0pOwotfQotCi0tICh2b2lkKXNldEJ1dHRvbnM6
KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWJ1dHRvbnMKLXsKLSAgICBbc3VwZXIgc2V0SlNPTkFy
cmF5OnRvSlNPTlN0cmluZ0FycmF5KGJ1dHRvbnMpIGZvcktleTpAImJ1dHRvbnMiXTsKLX0KLQot
LSAoTlNBcnJheS8qPE5TU3RyaW5nPiovICopYnV0dG9ucwotewotICAgIHJldHVybiB0b09iakNT
dHJpbmdBcnJheShbc3VwZXIgSlNPTkFycmF5Rm9yS2V5OkAiYnV0dG9ucyJdKTsKLX0KLQotLSAo
dm9pZClzZXREaXJlY3Rpb25hbGl0eTooVGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFt
ZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5KWRpcmVjdGlvbmFsaXR5Ci17Ci0gICAgW3N1cGVyIHNl
dFN0cmluZzp0b1Byb3RvY29sU3RyaW5nKGRpcmVjdGlvbmFsaXR5KSBmb3JLZXk6QCJkaXJlY3Rp
b25hbGl0eSJdOwotfQotCi0tIChUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVy
QnVuZGxlRGlyZWN0aW9uYWxpdHkpZGlyZWN0aW9uYWxpdHkKLXsKLSAgICByZXR1cm4gZnJvbVBy
b3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGVE
aXJlY3Rpb25hbGl0eT4oW3N1cGVyIHN0cmluZ0ZvcktleTpAImRpcmVjdGlvbmFsaXR5Il0pLnZh
bHVlKCk7Ci19Ci0KLS0gKHZvaWQpc2V0Tm90ZXM6KE5TU3RyaW5nICopbm90ZXMKLXsKLSAgICBb
c3VwZXIgc2V0U3RyaW5nOm5vdGVzIGZvcktleTpAIm5vdGVzIl07Ci19Ci0KLS0gKE5TU3RyaW5n
ICopbm90ZXMKLXsKLSAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAIm5vdGVzIl07Ci19
Ci0KLS0gKHZvaWQpc2V0VGltZXN0YW1wOihkb3VibGUpdGltZXN0YW1wCi17Ci0gICAgW3N1cGVy
IHNldERvdWJsZTp0aW1lc3RhbXAgZm9yS2V5OkAidGltZXN0YW1wIl07Ci19Ci0KLS0gKGRvdWJs
ZSl0aW1lc3RhbXAKLXsKLSAgICByZXR1cm4gW3N1cGVyIGRvdWJsZUZvcktleTpAInRpbWVzdGFt
cCJdOwotfQotCi0tICh2b2lkKXNldFZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopdmFs
dWVzCi17Ci0gICAgW3N1cGVyIHNldE9iamVjdDp2YWx1ZXMgZm9yS2V5OkAidmFsdWVzIl07Ci19
Ci0KLS0gKFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcwotewotICAgIFJXSVByb3RvY29s
SlNPTk9iamVjdCAqb2JqZWN0ID0gW3N1cGVyIG9iamVjdEZvcktleTpAInZhbHVlcyJdOwotICAg
IGlmICghb2JqZWN0KQotICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiBbW1JXSVByb3Rv
Y29sSlNPTk9iamVjdCBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0Oltbc3VwZXIgb2JqZWN0Rm9y
S2V5OkAidmFsdWVzIl0gdG9KU09OT2JqZWN0XS5nZXQoKV07Ci19Ci0KLS0gKHZvaWQpc2V0UGF5
bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZAotewotICAgIFtzdXBlciBzZXRP
YmplY3Q6cGF5bG9hZCBmb3JLZXk6QCJwYXlsb2FkIl07Ci19Ci0KLS0gKFJXSVByb3RvY29sSlNP
Tk9iamVjdCAqKXBheWxvYWQKLXsKLSAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9iamVjdCA9
IFtzdXBlciBvYmplY3RGb3JLZXk6QCJwYXlsb2FkIl07Ci0gICAgaWYgKCFvYmplY3QpCi0gICAg
ICAgIHJldHVybiBuaWw7Ci0gICAgcmV0dXJuIFtbUldJUHJvdG9jb2xKU09OT2JqZWN0IGFsbG9j
XSBpbml0V2l0aEpTT05PYmplY3Q6W1tzdXBlciBvYmplY3RGb3JLZXk6QCJwYXlsb2FkIl0gdG9K
U09OT2JqZWN0XS5nZXQoKV07Ci19Ci0KLS0gKHZvaWQpc2V0RXJyb3I6KFRlc3RQcm90b2NvbERh
dGFiYXNlRXJyb3IgKillcnJvcgotewotICAgIFtzdXBlciBzZXRPYmplY3Q6ZXJyb3IgZm9yS2V5
OkAiZXJyb3IiXTsKLX0KLQotLSAoVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKWVycm9yCi17
Ci0gICAgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvYmplY3QgPSBbc3VwZXIgb2JqZWN0Rm9yS2V5
OkAiZXJyb3IiXTsKLSAgICBpZiAoIW9iamVjdCkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBy
ZXR1cm4gW1tUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGFsbG9jXSBpbml0V2l0aEpTT05PYmpl
Y3Q6W1tzdXBlciBvYmplY3RGb3JLZXk6QCJlcnJvciJdIHRvSlNPTk9iamVjdF0uZ2V0KCldOwot
fQotCi0tICh2b2lkKXNldEVycm9yTGlzdDooTlNBcnJheS8qPFRlc3RQcm90b2NvbERhdGFiYXNl
RXJyb3I+Ki8gKillcnJvckxpc3QKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBF
X0lOX0FSUkFZKGVycm9yTGlzdCwgW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgY2xhc3NdKTsK
LSAgICBbc3VwZXIgc2V0SlNPTkFycmF5OnRvSlNPTk9iamVjdEFycmF5KGVycm9yTGlzdCkgZm9y
S2V5OkAiZXJyb3JMaXN0Il07Ci19Ci0KLS0gKE5TQXJyYXkvKjxUZXN0UHJvdG9jb2xEYXRhYmFz
ZUVycm9yPiovICopZXJyb3JMaXN0Ci17Ci0gICAgcmV0dXJuIHRvT2JqQ0FycmF5PFRlc3RQcm90
b2NvbERhdGFiYXNlRXJyb3I+KFtzdXBlciBKU09OQXJyYXlGb3JLZXk6QCJlcnJvckxpc3QiXSk7
Ci19Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1l
dGVyQnVuZGxlCi0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNE
aWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQKLXsKLSAgICBpZiAoIShzZWxmID0g
W3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImNvbHVtbk5hbWVzIl0sIEAiY29sdW1u
TmFtZXMiKTsKLSAgICBzZWxmLmNvbHVtbk5hbWVzID0gcGF5bG9hZFtAImNvbHVtbk5hbWVzIl07
Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJi
dXR0b25zIl0sIEAiYnV0dG9ucyIpOwotICAgIHNlbGYuYnV0dG9ucyA9IHBheWxvYWRbQCJidXR0
b25zIl07Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxv
YWRbQCJkaXJlY3Rpb25hbGl0eSJdLCBAImRpcmVjdGlvbmFsaXR5Iik7Ci0gICAgT3B0aW9uYWw8
VGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eT4gZGlyZWN0
aW9uYWxpdHkgPSBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0
ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eT4ocGF5bG9hZFtAImRpcmVjdGlvbmFsaXR5Il0pOwotICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX0VOVU1fVkFMVUUoZGlyZWN0aW9uYWxpdHksIEAiZGly
ZWN0aW9uYWxpdHkiKTsKLSAgICBzZWxmLmRpcmVjdGlvbmFsaXR5ID0gZGlyZWN0aW9uYWxpdHku
dmFsdWUoKTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5
bG9hZFtAIm5vdGVzIl0sIEAibm90ZXMiKTsKLSAgICBzZWxmLm5vdGVzID0gcGF5bG9hZFtAIm5v
dGVzIl07Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxv
YWRbQCJ0aW1lc3RhbXAiXSwgQCJ0aW1lc3RhbXAiKTsKLSAgICBzZWxmLnRpbWVzdGFtcCA9IFtw
YXlsb2FkW0AidGltZXN0YW1wIl0gZG91YmxlVmFsdWVdOwotCi0gICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AidmFsdWVzIl0sIEAidmFsdWVzIik7Ci0g
ICAgc2VsZi52YWx1ZXMgPSBwYXlsb2FkW0AidmFsdWVzIl07Ci0KLSAgICBUSFJPV19FWENFUFRJ
T05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJwYXlsb2FkIl0sIEAicGF5bG9hZCIp
OwotICAgIHNlbGYucGF5bG9hZCA9IHBheWxvYWRbQCJwYXlsb2FkIl07Ci0KLSAgICBUSFJPV19F
WENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJlcnJvciJdLCBAImVycm9y
Iik7Ci0gICAgc2VsZi5lcnJvciA9IFtbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBhbGxvY10g
aW5pdFdpdGhQYXlsb2FkOnBheWxvYWRbQCJlcnJvciJdXTsKLQotICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImVycm9yTGlzdCJdLCBAImVycm9yTGlz
dCIpOwotICAgIHNlbGYuZXJyb3JMaXN0ID0gb2JqY0FycmF5RnJvbVBheWxvYWQ8VGVzdFByb3Rv
Y29sRGF0YWJhc2VFcnJvcj4ocGF5bG9hZFtAImVycm9yTGlzdCJdKTsKLQotICAgIHJldHVybiBz
ZWxmOwotfQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3Rv
Y29sSlNPTk9iamVjdCAqKW9iamVjdAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdp
dGhKU09OT2JqZWN0OltvYmplY3QgdG9KU09OT2JqZWN0XS5nZXQoKV0pKQotICAgICAgICByZXR1
cm4gbmlsOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0
aENvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcyBidXR0b25z
OihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilidXR0b25zIGRpcmVjdGlvbmFsaXR5OihUZXN0UHJv
dG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5KWRpcmVjdGlvbmFsaXR5
IG5vdGVzOihOU1N0cmluZyAqKW5vdGVzIHRpbWVzdGFtcDooZG91YmxlKXRpbWVzdGFtcCB2YWx1
ZXM6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcyBwYXlsb2FkOihSV0lQcm90b2NvbEpT
T05PYmplY3QgKilwYXlsb2FkIGVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICopZXJy
b3IgZXJyb3JMaXN0OihOU0FycmF5Lyo8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4qLyAqKWVy
cm9yTGlzdAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1
cm4gbmlsOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShjb2x1
bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlS
RURfUFJPUEVSVFkoYnV0dG9ucywgQCJidXR0b25zIik7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9SRVFVSVJFRF9QUk9QRVJUWShub3RlcywgQCJub3RlcyIpOwotICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfUkVRVUlSRURfUFJPUEVSVFkodmFsdWVzLCBAInZhbHVlcyIpOwotICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZCwgQCJwYXlsb2FkIik7Ci0gICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShlcnJvciwgQCJlcnJvciIpOwot
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkoZXJyb3JMaXN0LCBAImVy
cm9yTGlzdCIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEVfSU5fQVJSQVkoZXJy
b3JMaXN0LCBbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBjbGFzc10pOwotCi0gICAgc2VsZi5j
b2x1bW5OYW1lcyA9IGNvbHVtbk5hbWVzOwotICAgIHNlbGYuYnV0dG9ucyA9IGJ1dHRvbnM7Ci0g
ICAgc2VsZi5kaXJlY3Rpb25hbGl0eSA9IGRpcmVjdGlvbmFsaXR5OwotICAgIHNlbGYubm90ZXMg
PSBub3RlczsKLSAgICBzZWxmLnRpbWVzdGFtcCA9IHRpbWVzdGFtcDsKLSAgICBzZWxmLnZhbHVl
cyA9IHZhbHVlczsKLSAgICBzZWxmLnBheWxvYWQgPSBwYXlsb2FkOwotICAgIHNlbGYuZXJyb3Ig
PSBlcnJvcjsKLSAgICBzZWxmLmVycm9yTGlzdCA9IGVycm9yTGlzdDsKLQotICAgIHJldHVybiBz
ZWxmOwotfQotCi0tICh2b2lkKXNldENvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8g
Kiljb2x1bW5OYW1lcwotewotICAgIFtzdXBlciBzZXRKU09OQXJyYXk6dG9KU09OU3RyaW5nQXJy
YXkoY29sdW1uTmFtZXMpIGZvcktleTpAImNvbHVtbk5hbWVzIl07Ci19Ci0KLS0gKE5TQXJyYXkv
KjxOU1N0cmluZz4qLyAqKWNvbHVtbk5hbWVzCi17Ci0gICAgcmV0dXJuIHRvT2JqQ1N0cmluZ0Fy
cmF5KFtzdXBlciBKU09OQXJyYXlGb3JLZXk6QCJjb2x1bW5OYW1lcyJdKTsKLX0KLQotLSAodm9p
ZClzZXRCdXR0b25zOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilidXR0b25zCi17Ci0gICAgW3N1
cGVyIHNldEpTT05BcnJheTp0b0pTT05TdHJpbmdBcnJheShidXR0b25zKSBmb3JLZXk6QCJidXR0
b25zIl07Ci19Ci0KLS0gKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWJ1dHRvbnMKLXsKLSAgICBy
ZXR1cm4gdG9PYmpDU3RyaW5nQXJyYXkoW3N1cGVyIEpTT05BcnJheUZvcktleTpAImJ1dHRvbnMi
XSk7Ci19Ci0KLS0gKHZvaWQpc2V0RGlyZWN0aW9uYWxpdHk6KFRlc3RQcm90b2NvbERhdGFiYXNl
UGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHkpZGlyZWN0aW9uYWxpdHkKLXsKLSAgICBbc3Vw
ZXIgc2V0U3RyaW5nOnRvUHJvdG9jb2xTdHJpbmcoZGlyZWN0aW9uYWxpdHkpIGZvcktleTpAImRp
cmVjdGlvbmFsaXR5Il07Ci19Ci0KLS0gKFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVu
ZGxlRGlyZWN0aW9uYWxpdHkpZGlyZWN0aW9uYWxpdHkKLXsKLSAgICByZXR1cm4gZnJvbVByb3Rv
Y29sU3RyaW5nPFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxp
dHk+KFtzdXBlciBzdHJpbmdGb3JLZXk6QCJkaXJlY3Rpb25hbGl0eSJdKS52YWx1ZSgpOwotfQot
Ci0tICh2b2lkKXNldE5vdGVzOihOU1N0cmluZyAqKW5vdGVzCi17Ci0gICAgW3N1cGVyIHNldFN0
cmluZzpub3RlcyBmb3JLZXk6QCJub3RlcyJdOwotfQotCi0tIChOU1N0cmluZyAqKW5vdGVzCi17
Ci0gICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJub3RlcyJdOwotfQotCi0tICh2b2lk
KXNldFRpbWVzdGFtcDooZG91YmxlKXRpbWVzdGFtcAotewotICAgIFtzdXBlciBzZXREb3VibGU6
dGltZXN0YW1wIGZvcktleTpAInRpbWVzdGFtcCJdOwotfQotCi0tIChkb3VibGUpdGltZXN0YW1w
Ci17Ci0gICAgcmV0dXJuIFtzdXBlciBkb3VibGVGb3JLZXk6QCJ0aW1lc3RhbXAiXTsKLX0KLQot
LSAodm9pZClzZXRWYWx1ZXM6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcwotewotICAg
IFtzdXBlciBzZXRPYmplY3Q6dmFsdWVzIGZvcktleTpAInZhbHVlcyJdOwotfQotCi0tIChSV0lQ
cm90b2NvbEpTT05PYmplY3QgKil2YWx1ZXMKLXsKLSAgICBSV0lQcm90b2NvbEpTT05PYmplY3Qg
Km9iamVjdCA9IFtzdXBlciBvYmplY3RGb3JLZXk6QCJ2YWx1ZXMiXTsKLSAgICBpZiAoIW9iamVj
dCkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4gW1tSV0lQcm90b2NvbEpTT05PYmpl
Y3QgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDpbW3N1cGVyIG9iamVjdEZvcktleTpAInZhbHVl
cyJdIHRvSlNPTk9iamVjdF0uZ2V0KCldOwotfQotCi0tICh2b2lkKXNldFBheWxvYWQ6KFJXSVBy
b3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQKLXsKLSAgICBbc3VwZXIgc2V0T2JqZWN0OnBheWxv
YWQgZm9yS2V5OkAicGF5bG9hZCJdOwotfQotCi0tIChSV0lQcm90b2NvbEpTT05PYmplY3QgKilw
YXlsb2FkCi17Ci0gICAgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvYmplY3QgPSBbc3VwZXIgb2Jq
ZWN0Rm9yS2V5OkAicGF5bG9hZCJdOwotICAgIGlmICghb2JqZWN0KQotICAgICAgICByZXR1cm4g
bmlsOwotICAgIHJldHVybiBbW1JXSVByb3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5pdFdpdGhK
U09OT2JqZWN0Oltbc3VwZXIgb2JqZWN0Rm9yS2V5OkAicGF5bG9hZCJdIHRvSlNPTk9iamVjdF0u
Z2V0KCldOwotfQotCi0tICh2b2lkKXNldEVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9y
ICopZXJyb3IKLXsKLSAgICBbc3VwZXIgc2V0T2JqZWN0OmVycm9yIGZvcktleTpAImVycm9yIl07
Ci19Ci0KLS0gKFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKillcnJvcgotewotICAgIFJXSVBy
b3RvY29sSlNPTk9iamVjdCAqb2JqZWN0ID0gW3N1cGVyIG9iamVjdEZvcktleTpAImVycm9yIl07
Ci0gICAgaWYgKCFvYmplY3QpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgcmV0dXJuIFtbVGVz
dFByb3RvY29sRGF0YWJhc2VFcnJvciBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0Oltbc3VwZXIg
b2JqZWN0Rm9yS2V5OkAiZXJyb3IiXSB0b0pTT05PYmplY3RdLmdldCgpXTsKLX0KLQotLSAodm9p
ZClzZXRFcnJvckxpc3Q6KE5TQXJyYXkvKjxUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yPiovICop
ZXJyb3JMaXN0Ci17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRV9JTl9BUlJBWShl
cnJvckxpc3QsIFtUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGNsYXNzXSk7Ci0gICAgW3N1cGVy
IHNldEpTT05BcnJheTp0b0pTT05PYmplY3RBcnJheShlcnJvckxpc3QpIGZvcktleTpAImVycm9y
TGlzdCJdOwotfQotCi0tIChOU0FycmF5Lyo8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4qLyAq
KWVycm9yTGlzdAotewotICAgIHJldHVybiB0b09iakNBcnJheTxUZXN0UHJvdG9jb2xEYXRhYmFz
ZUVycm9yPihbc3VwZXIgSlNPTkFycmF5Rm9yS2V5OkAiZXJyb3JMaXN0Il0pOwotfQotCi1AZW5k
Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xEYXRhYmFzZU9iamVjdFdpdGhQcm9wZXJ0
eU5hbWVDb25mbGljdHMKLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVs
bCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZAotewotICAgIGlmICghKHNl
bGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiaW50ZWdlciJdLCBAImludGVn
ZXIiKTsKLSAgICBzZWxmLmludGVnZXIgPSBwYXlsb2FkW0AiaW50ZWdlciJdOwotCi0gICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiYXJyYXkiXSwgQCJh
cnJheSIpOwotICAgIHNlbGYuYXJyYXkgPSBwYXlsb2FkW0AiYXJyYXkiXTsKLQotICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAInN0cmluZyJdLCBAInN0
cmluZyIpOwotICAgIHNlbGYuc3RyaW5nID0gcGF5bG9hZFtAInN0cmluZyJdOwotCi0gICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AidmFsdWUiXSwgQCJ2
YWx1ZSIpOwotICAgIHNlbGYudmFsdWUgPSBwYXlsb2FkW0AidmFsdWUiXTsKLQotICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAIm9iamVjdCJdLCBAIm9i
amVjdCIpOwotICAgIHNlbGYub2JqZWN0ID0gcGF5bG9hZFtAIm9iamVjdCJdOwotCi0gICAgcmV0
dXJuIHNlbGY7Ci19Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICopb2JqZWN0Ci17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBp
bml0V2l0aEpTT05PYmplY3Q6W29iamVjdCB0b0pTT05PYmplY3RdLmdldCgpXSkpCi0gICAgICAg
IHJldHVybiBuaWw7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoSW50ZWdlcjooTlNTdHJpbmcgKilpbnRlZ2VyIGFycmF5OihOU1N0cmluZyAqKWFycmF5
IHN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcgdmFsdWU6KE5TU3RyaW5nICopdmFsdWUgb2JqZWN0
OihOU1N0cmluZyAqKW9iamVjdAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQot
ICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9Q
Uk9QRVJUWShpbnRlZ2VyLCBAImludGVnZXIiKTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JF
UVVJUkVEX1BST1BFUlRZKGFycmF5LCBAImFycmF5Iik7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9SRVFVSVJFRF9QUk9QRVJUWShzdHJpbmcsIEAic3RyaW5nIik7Ci0gICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWSh2YWx1ZSwgQCJ2YWx1ZSIpOwotICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkob2JqZWN0LCBAIm9iamVjdCIpOwotCi0gICAg
c2VsZi5pbnRlZ2VyID0gaW50ZWdlcjsKLSAgICBzZWxmLmFycmF5ID0gYXJyYXk7Ci0gICAgc2Vs
Zi5zdHJpbmcgPSBzdHJpbmc7Ci0gICAgc2VsZi52YWx1ZSA9IHZhbHVlOwotICAgIHNlbGYub2Jq
ZWN0ID0gb2JqZWN0OwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpc2V0SW50ZWdl
cjooTlNTdHJpbmcgKilpbnRlZ2VyCi17Ci0gICAgW3N1cGVyIHNldFN0cmluZzppbnRlZ2VyIGZv
cktleTpAImludGVnZXIiXTsKLX0KLQotLSAoTlNTdHJpbmcgKilpbnRlZ2VyCi17Ci0gICAgcmV0
dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJpbnRlZ2VyIl07Ci19Ci0KLS0gKHZvaWQpc2V0QXJy
YXk6KE5TU3RyaW5nICopYXJyYXkKLXsKLSAgICBbc3VwZXIgc2V0U3RyaW5nOmFycmF5IGZvcktl
eTpAImFycmF5Il07Ci19Ci0KLS0gKE5TU3RyaW5nICopYXJyYXkKLXsKLSAgICByZXR1cm4gW3N1
cGVyIHN0cmluZ0ZvcktleTpAImFycmF5Il07Ci19Ci0KLS0gKHZvaWQpc2V0U3RyaW5nOihOU1N0
cmluZyAqKXN0cmluZwotewotICAgIFtzdXBlciBzZXRTdHJpbmc6c3RyaW5nIGZvcktleTpAInN0
cmluZyJdOwotfQotCi0tIChOU1N0cmluZyAqKXN0cmluZwotewotICAgIHJldHVybiBbc3VwZXIg
c3RyaW5nRm9yS2V5OkAic3RyaW5nIl07Ci19Ci0KLS0gKHZvaWQpc2V0VmFsdWU6KE5TU3RyaW5n
ICopdmFsdWUKLXsKLSAgICBbc3VwZXIgc2V0U3RyaW5nOnZhbHVlIGZvcktleTpAInZhbHVlIl07
Ci19Ci0KLS0gKE5TU3RyaW5nICopdmFsdWUKLXsKLSAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0Zv
cktleTpAInZhbHVlIl07Ci19Ci0KLS0gKHZvaWQpc2V0T2JqZWN0OihOU1N0cmluZyAqKW9iamVj
dAotewotICAgIFtzdXBlciBzZXRTdHJpbmc6b2JqZWN0IGZvcktleTpAIm9iamVjdCJdOwotfQot
Ci0tIChOU1N0cmluZyAqKW9iamVjdAotewotICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5
OkAib2JqZWN0Il07Ci19Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbERh
dGFiYXNlRHVtbXlPYmplY3QKLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9u
bnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZAotewotICAgIGlmICgh
KHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgcmV0dXJu
IHNlbGY7Ci19Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJv
dG9jb2xKU09OT2JqZWN0ICopb2JqZWN0Ci17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0
V2l0aEpTT05PYmplY3Q6W29iamVjdCB0b0pTT05PYmplY3RdLmdldCgpXSkpCi0gICAgICAgIHJl
dHVybiBuaWw7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotQGVuZAotCi0KLUBpbXBsZW1lbnRh
dGlvbiBUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlCi0KLS0gKGluc3RhbmNldHlwZSlp
bml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBh
eWxvYWQKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJu
IG5pbDsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9h
ZFtAImRpcmVjdGlvbmFsaXR5Il0sIEAiZGlyZWN0aW9uYWxpdHkiKTsKLSAgICBPcHRpb25hbDxU
ZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHk+IGRpcmVjdGlvbmFs
aXR5ID0gZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVE
aXJlY3Rpb25hbGl0eT4ocGF5bG9hZFtAImRpcmVjdGlvbmFsaXR5Il0pOwotICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfQkFEX0VOVU1fVkFMVUUoZGlyZWN0aW9uYWxpdHksIEAiZGlyZWN0aW9uYWxp
dHkiKTsKLSAgICBzZWxmLmRpcmVjdGlvbmFsaXR5ID0gZGlyZWN0aW9uYWxpdHkudmFsdWUoKTsK
LQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImJ1
dHRvbnMiXSwgQCJidXR0b25zIik7Ci0gICAgc2VsZi5idXR0b25zID0gcGF5bG9hZFtAImJ1dHRv
bnMiXTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9h
ZFtAImNvbHVtbk5hbWVzIl0sIEAiY29sdW1uTmFtZXMiKTsKLSAgICBzZWxmLmNvbHVtbk5hbWVz
ID0gcGF5bG9hZFtAImNvbHVtbk5hbWVzIl07Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JF
UVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJub3RlcyJdLCBAIm5vdGVzIik7Ci0gICAgc2VsZi5u
b3RlcyA9IHBheWxvYWRbQCJub3RlcyJdOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFV
SVJFRF9QUk9QRVJUWShwYXlsb2FkW0AidGltZXN0YW1wIl0sIEAidGltZXN0YW1wIik7Ci0gICAg
c2VsZi50aW1lc3RhbXAgPSBbcGF5bG9hZFtAInRpbWVzdGFtcCJdIGRvdWJsZVZhbHVlXTsKLQot
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAInZhbHVl
cyJdLCBAInZhbHVlcyIpOwotICAgIHNlbGYudmFsdWVzID0gcGF5bG9hZFtAInZhbHVlcyJdOwot
Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AicGF5
bG9hZCJdLCBAInBheWxvYWQiKTsKLSAgICBzZWxmLnBheWxvYWQgPSBwYXlsb2FkW0AicGF5bG9h
ZCJdOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2Fk
W0AiZXJyb3IiXSwgQCJlcnJvciIpOwotICAgIHNlbGYuZXJyb3IgPSBbW1Rlc3RQcm90b2NvbERh
dGFiYXNlRXJyb3IgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkW0AiZXJyb3IiXV07Ci0K
LSAgICByZXR1cm4gc2VsZjsKLX0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2Jq
ZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilvYmplY3QKLXsKLSAgICBpZiAoIShzZWxmID0g
W3N1cGVyIGluaXRXaXRoSlNPTk9iamVjdDpbb2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0KCldKSkK
LSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhEaXJlY3Rpb25hbGl0eTooVGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1
bmRsZURpcmVjdGlvbmFsaXR5KWRpcmVjdGlvbmFsaXR5IGJ1dHRvbnM6KE5TQXJyYXkvKjxOU1N0
cmluZz4qLyAqKWJ1dHRvbnMgY29sdW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWNv
bHVtbk5hbWVzIG5vdGVzOihOU1N0cmluZyAqKW5vdGVzIHRpbWVzdGFtcDooZG91YmxlKXRpbWVz
dGFtcCB2YWx1ZXM6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcyBwYXlsb2FkOihSV0lQ
cm90b2NvbEpTT05PYmplY3QgKilwYXlsb2FkIGVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVy
cm9yICopZXJyb3IKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAg
cmV0dXJuIG5pbDsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFko
YnV0dG9ucywgQCJidXR0b25zIik7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9Q
Uk9QRVJUWShjb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOwotICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfUkVRVUlSRURfUFJPUEVSVFkobm90ZXMsIEAibm90ZXMiKTsKLSAgICBUSFJPV19FWENF
UFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHZhbHVlcywgQCJ2YWx1ZXMiKTsKLSAgICBUSFJP
V19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWQsIEAicGF5bG9hZCIpOwot
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkoZXJyb3IsIEAiZXJyb3Ii
KTsKLQotICAgIHNlbGYuZGlyZWN0aW9uYWxpdHkgPSBkaXJlY3Rpb25hbGl0eTsKLSAgICBzZWxm
LmJ1dHRvbnMgPSBidXR0b25zOwotICAgIHNlbGYuY29sdW1uTmFtZXMgPSBjb2x1bW5OYW1lczsK
LSAgICBzZWxmLm5vdGVzID0gbm90ZXM7Ci0gICAgc2VsZi50aW1lc3RhbXAgPSB0aW1lc3RhbXA7
Ci0gICAgc2VsZi52YWx1ZXMgPSB2YWx1ZXM7Ci0gICAgc2VsZi5wYXlsb2FkID0gcGF5bG9hZDsK
LSAgICBzZWxmLmVycm9yID0gZXJyb3I7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9p
ZClzZXREaXJlY3Rpb25hbGl0eTooVGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZURpcmVj
dGlvbmFsaXR5KWRpcmVjdGlvbmFsaXR5Ci17Ci0gICAgW3N1cGVyIHNldFN0cmluZzp0b1Byb3Rv
Y29sU3RyaW5nKGRpcmVjdGlvbmFsaXR5KSBmb3JLZXk6QCJkaXJlY3Rpb25hbGl0eSJdOwotfQot
Ci0tIChUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHkpZGlyZWN0
aW9uYWxpdHkKLXsKLSAgICByZXR1cm4gZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbFRl
c3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eT4oW3N1cGVyIHN0cmluZ0ZvcktleTpAImRp
cmVjdGlvbmFsaXR5Il0pLnZhbHVlKCk7Ci19Ci0KLS0gKHZvaWQpc2V0QnV0dG9uczooTlNBcnJh
eS8qPE5TU3RyaW5nPiovICopYnV0dG9ucwotewotICAgIFtzdXBlciBzZXRKU09OQXJyYXk6dG9K
U09OU3RyaW5nQXJyYXkoYnV0dG9ucykgZm9yS2V5OkAiYnV0dG9ucyJdOwotfQotCi0tIChOU0Fy
cmF5Lyo8TlNTdHJpbmc+Ki8gKilidXR0b25zCi17Ci0gICAgcmV0dXJuIHRvT2JqQ1N0cmluZ0Fy
cmF5KFtzdXBlciBKU09OQXJyYXlGb3JLZXk6QCJidXR0b25zIl0pOwotfQotCi0tICh2b2lkKXNl
dENvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcwotewotICAg
IFtzdXBlciBzZXRKU09OQXJyYXk6dG9KU09OU3RyaW5nQXJyYXkoY29sdW1uTmFtZXMpIGZvcktl
eTpAImNvbHVtbk5hbWVzIl07Ci19Ci0KLS0gKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWNvbHVt
bk5hbWVzCi17Ci0gICAgcmV0dXJuIHRvT2JqQ1N0cmluZ0FycmF5KFtzdXBlciBKU09OQXJyYXlG
b3JLZXk6QCJjb2x1bW5OYW1lcyJdKTsKLX0KLQotLSAodm9pZClzZXROb3RlczooTlNTdHJpbmcg
Kilub3RlcwotewotICAgIFtzdXBlciBzZXRTdHJpbmc6bm90ZXMgZm9yS2V5OkAibm90ZXMiXTsK
LX0KLQotLSAoTlNTdHJpbmcgKilub3RlcwotewotICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9y
S2V5OkAibm90ZXMiXTsKLX0KLQotLSAodm9pZClzZXRUaW1lc3RhbXA6KGRvdWJsZSl0aW1lc3Rh
bXAKLXsKLSAgICBbc3VwZXIgc2V0RG91YmxlOnRpbWVzdGFtcCBmb3JLZXk6QCJ0aW1lc3RhbXAi
XTsKLX0KLQotLSAoZG91YmxlKXRpbWVzdGFtcAotewotICAgIHJldHVybiBbc3VwZXIgZG91Ymxl
Rm9yS2V5OkAidGltZXN0YW1wIl07Ci19Ci0KLS0gKHZvaWQpc2V0VmFsdWVzOihSV0lQcm90b2Nv
bEpTT05PYmplY3QgKil2YWx1ZXMKLXsKLSAgICBbc3VwZXIgc2V0T2JqZWN0OnZhbHVlcyBmb3JL
ZXk6QCJ2YWx1ZXMiXTsKLX0KLQotLSAoUldJUHJvdG9jb2xKU09OT2JqZWN0ICopdmFsdWVzCi17
Ci0gICAgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvYmplY3QgPSBbc3VwZXIgb2JqZWN0Rm9yS2V5
OkAidmFsdWVzIl07Ci0gICAgaWYgKCFvYmplY3QpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAg
cmV0dXJuIFtbUldJUHJvdG9jb2xKU09OT2JqZWN0IGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6
W1tzdXBlciBvYmplY3RGb3JLZXk6QCJ2YWx1ZXMiXSB0b0pTT05PYmplY3RdLmdldCgpXTsKLX0K
LQotLSAodm9pZClzZXRQYXlsb2FkOihSV0lQcm90b2NvbEpTT05PYmplY3QgKilwYXlsb2FkCi17
Ci0gICAgW3N1cGVyIHNldE9iamVjdDpwYXlsb2FkIGZvcktleTpAInBheWxvYWQiXTsKLX0KLQot
LSAoUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZAotewotICAgIFJXSVByb3RvY29sSlNP
Tk9iamVjdCAqb2JqZWN0ID0gW3N1cGVyIG9iamVjdEZvcktleTpAInBheWxvYWQiXTsKLSAgICBp
ZiAoIW9iamVjdCkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4gW1tSV0lQcm90b2Nv
bEpTT05PYmplY3QgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDpbW3N1cGVyIG9iamVjdEZvcktl
eTpAInBheWxvYWQiXSB0b0pTT05PYmplY3RdLmdldCgpXTsKLX0KLQotLSAodm9pZClzZXRFcnJv
cjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKWVycm9yCi17Ci0gICAgW3N1cGVyIHNldE9i
amVjdDplcnJvciBmb3JLZXk6QCJlcnJvciJdOwotfQotCi0tIChUZXN0UHJvdG9jb2xEYXRhYmFz
ZUVycm9yICopZXJyb3IKLXsKLSAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9iamVjdCA9IFtz
dXBlciBvYmplY3RGb3JLZXk6QCJlcnJvciJdOwotICAgIGlmICghb2JqZWN0KQotICAgICAgICBy
ZXR1cm4gbmlsOwotICAgIHJldHVybiBbW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgYWxsb2Nd
IGluaXRXaXRoSlNPTk9iamVjdDpbW3N1cGVyIG9iamVjdEZvcktleTpAImVycm9yIl0gdG9KU09O
T2JqZWN0XS5nZXQoKV07Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC90eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3Rz
Lmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2dlbmVyaWMvZXhwZWN0ZWQvdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uLXJl
c3VsdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTg0ZGFjZGNhZjcuLjAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL2V4cGVjdGVkL3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbi1yZXN1bHQK
KysrIC9kZXYvbnVsbApAQCAtMSwxNjQ5ICswLDAgQEAKLSMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0
b3JCYWNrZW5kQ29tbWFuZHMuanMKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0
eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotLy8gVGVzdAotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRv
bWFpbigiVGVzdCIsIG51bGwpOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIlRlc3Qu
VW5jYXN0ZWRBbmltYWxzIiwge1BpZ3M6ICJQaWdzIiwgQ293czogIkNvd3MiLCBDYXRzOiAiQ2F0
cyIsIEhlbnM6ICJIZW5zIn0pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIlRlc3Qu
Q2FzdGVkQW5pbWFscyIsIHtEdWNrczogIkR1Y2tzIiwgSGVuczogIkhlbnMiLCBDcm93czogIkNy
b3dzIiwgRmxhbWluZ29zOiAiRmxhbWluZ29zIn0pOwotSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0
ZURvbWFpbigiVGVzdCIsIG51bGwpOwotIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29t
bWFuZHMuanMKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hl
cnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1
bnRpbWUtY2FzdHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKLSNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0
b3IgewotCi1jbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAg
dm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlz
cGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQot
ICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJu
IG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPEJhY2tl
bmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwotfTsKLQotCi0KLQotfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKLSMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVy
cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBv
bmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXR5cGVkZWYgU3RyaW5n
IEVycm9yU3RyaW5nOwotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZp
bGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tl
bmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBl
LXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RCYWNr
ZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZy
b250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3
dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNp
ZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSNpbmNsdWRlICJUZXN0
QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIEluc3Bl
Y3RvciB7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBU
ZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5k
RGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVx
dWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVj
dHMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgRnJvbnRlbmRSb3V0
ZXI7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVy
cy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1y
dW50aW1lLWNhc3RzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNo
ZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRl
ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3Rv
ciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9u
dGVuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0
cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVu
dGltZS1jYXN0cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJv
dG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5hbWVzcGFjZSBJ
bnNwZWN0b3IgewotCi0KLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLS8vIEZvcndhcmQg
ZGVjbGFyYXRpb25zLgotbmFtZXNwYWNlIFRlc3QgewotY2xhc3MgVHlwZU5lZWRpbmdDYXN0Owot
Y2xhc3MgUmVjdXJzaXZlT2JqZWN0MTsKLWNsYXNzIFJlY3Vyc2l2ZU9iamVjdDI7Ci1lbnVtIGNs
YXNzIFVuY2FzdGVkQW5pbWFsczsKLWVudW0gY2xhc3MgQ2FzdGVkQW5pbWFsczsKLX0gLy8gVGVz
dAotLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgotCi0KLS8vIFR5cGVkZWZzLgotbmFt
ZXNwYWNlIFRlc3QgewotdHlwZWRlZiBpbnQgQ2FzdGVkT2JqZWN0SWQ7Ci10eXBlZGVmIGludCBV
bmNhc3RlZE9iamVjdElkOwotfSAvLyBUZXN0Ci0vLyBFbmQgb2YgdHlwZWRlZnMuCi0KLW5hbWVz
cGFjZSBUZXN0SGVscGVycyB7Ci0KLVN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29k
ZSk7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShU
IGVudW1WYWx1ZSkKLXsKLSAgICByZXR1cm4gZ2V0RW51bUNvbnN0YW50VmFsdWUoc3RhdGljX2Nh
c3Q8aW50PihlbnVtVmFsdWUpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKLQot
bmFtZXNwYWNlIFRlc3QgewotLyogQSBkdW1teSB0eXBlIHRoYXQgcmVxdWlyZXMgcnVudGltZSBj
YXN0cywgYW5kIGZvcmNlcyBub24tcHJpbWl0aXZlIHJlZmVyZW5jZWQgdHlwZXMgdG8gYWxzbyBl
bWl0IHJ1bnRpbWUgY2FzdCBoZWxwZXJzLiAqLwotY2xhc3MgVHlwZU5lZWRpbmdDYXN0IDogcHVi
bGljIEpTT046Ok9iamVjdEJhc2UgewotcHVibGljOgotICAgIGVudW0gewotICAgICAgICBOb0Zp
ZWxkc1NldCA9IDAsCi0gICAgICAgIFN0cmluZ1NldCA9IDEgPDwgMCwKLSAgICAgICAgTnVtYmVy
U2V0ID0gMSA8PCAxLAotICAgICAgICBBbmltYWxzU2V0ID0gMSA8PCAyLAotICAgICAgICBJZFNl
dCA9IDEgPDwgMywKLSAgICAgICAgVHJlZVNldCA9IDEgPDwgNCwKLSAgICAgICAgQWxsRmllbGRz
U2V0ID0gKFN0cmluZ1NldCB8IE51bWJlclNldCB8IEFuaW1hbHNTZXQgfCBJZFNldCB8IFRyZWVT
ZXQpCi0gICAgfTsKLQotICAgIHRlbXBsYXRlPGludCBTVEFURT4KLSAgICBjbGFzcyBCdWlsZGVy
IHsKLSAgICBwcml2YXRlOgotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBtX3Jlc3VsdDsK
LQotICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0
U3RhdGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8
QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWls
ZGVyKFJlZjwvKlR5cGVOZWVkaW5nQ2FzdCovSlNPTjo6T2JqZWN0PiYmIG9iamVjdCkKLSAgICAg
ICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2lu
X25vbl9pbml0X3N0YXRlKTsKLSAgICAgICAgfQotICAgICAgICBmcmllbmQgY2xhc3MgVHlwZU5l
ZWRpbmdDYXN0OwotICAgIHB1YmxpYzoKLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU3RyaW5n
U2V0PiYgc2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTdHJpbmdTZXQpLCBwcm9wZXJ0eV9zdHJpbmdf
YWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygic3RyaW5nIl9z
LCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFN0cmluZ1NldD4oKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBOdW1iZXJTZXQ+JiBzZXROdW1iZXIo
aW50IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRF
ICYgTnVtYmVyU2V0KSwgcHJvcGVydHlfbnVtYmVyX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXRJbnRlZ2VyKCJudW1iZXIiX3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJl
dHVybiBjYXN0U3RhdGU8TnVtYmVyU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRl
cjxTVEFURSB8IEFuaW1hbHNTZXQ+JiBzZXRBbmltYWxzKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRl
c3Q6OkNhc3RlZEFuaW1hbHMgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKCEoU1RBVEUgJiBBbmltYWxzU2V0KSwgcHJvcGVydHlfYW5pbWFsc19hbHJlYWR5X3Nl
dCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJhbmltYWxzIl9zLCBJbnNwZWN0
b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUodmFsdWUpKTsK
LSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8QW5pbWFsc1NldD4oKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBJZFNldD4mIHNldElkKGludCB2YWx1ZSkKLSAgICAg
ICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIElkU2V0KSwgcHJvcGVy
dHlfaWRfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldEludGVnZXIoImlk
Il9zLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPElkU2V0PigpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IFRyZWVTZXQ+JiBzZXRUcmVlKFJlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QxPiB2YWx1ZSkKLSAg
ICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFRyZWVTZXQpLCBw
cm9wZXJ0eV90cmVlX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmpl
Y3QoInRyZWUiX3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VHJlZVNl
dD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIFJlZjxUeXBlTmVlZGluZ0Nhc3Q+IHJlbGVhc2Uo
KQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVs
ZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
c2l6ZW9mKFR5cGVOZWVkaW5nQ2FzdCkgPT0gc2l6ZW9mKEpTT046Ok9iamVjdCksIGNhbm5vdF9j
YXN0KTsKLQotICAgICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4ganNvblJlc3VsdCA9IG1fcmVz
dWx0LnJlbGVhc2VOb25OdWxsKCk7Ci0gICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFdURk1vdmUo
KnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPFR5cGVOZWVkaW5nQ2FzdD4qPigmanNvblJlc3VsdCkpOwot
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICAvKgot
ICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKLSAgICAgKiBSZWY8VHlwZU5lZWRpbmdDYXN0
PiByZXN1bHQgPSBUeXBlTmVlZGluZ0Nhc3Q6OmNyZWF0ZSgpCi0gICAgICogICAgIC5zZXRTdHJp
bmcoLi4uKQotICAgICAqICAgICAuc2V0TnVtYmVyKC4uLikKLSAgICAgKiAgICAgLnNldEFuaW1h
bHMoLi4uKQotICAgICAqICAgICAuc2V0SWQoLi4uKQotICAgICAqICAgICAuc2V0VHJlZSguLi4p
Ci0gICAgICogICAgIC5yZWxlYXNlKCk7Ci0gICAgICovCi0gICAgc3RhdGljIEJ1aWxkZXI8Tm9G
aWVsZHNTZXQ+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxk
c1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7Ci0gICAgfQotfTsKLQotLyogICovCi1lbnVt
IGNsYXNzIFVuY2FzdGVkQW5pbWFscyB7Ci0gICAgUGlncyA9IDQsCi0gICAgQ293cyA9IDUsCi0g
ICAgQ2F0cyA9IDYsCi0gICAgSGVucyA9IDEsCi19OyAvLyBlbnVtIGNsYXNzIFVuY2FzdGVkQW5p
bWFscwotLyogICovCi1lbnVtIGNsYXNzIENhc3RlZEFuaW1hbHMgewotICAgIER1Y2tzID0gMCwK
LSAgICBIZW5zID0gMSwKLSAgICBDcm93cyA9IDIsCi0gICAgRmxhbWluZ29zID0gMywKLX07IC8v
IGVudW0gY2xhc3MgQ2FzdGVkQW5pbWFscwotY2xhc3MgUmVjdXJzaXZlT2JqZWN0MSA6IHB1Ymxp
YyBKU09OOjpPYmplY3RCYXNlIHsKLXB1YmxpYzoKLSAgICBlbnVtIHsKLSAgICAgICAgTm9GaWVs
ZHNTZXQgPSAwLAotICAgICAgICBBbGxGaWVsZHNTZXQgPSAwCi0gICAgfTsKLQotICAgIHRlbXBs
YXRlPGludCBTVEFURT4KLSAgICBjbGFzcyBCdWlsZGVyIHsKLSAgICBwcml2YXRlOgotICAgICAg
ICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBtX3Jlc3VsdDsKLQotICAgICAgICB0ZW1wbGF0ZTxpbnQg
U1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4o
dGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyKFJlZjwvKlJlY3Vyc2l2ZU9iamVj
dDEqL0pTT046Ok9iamVjdD4mJiBvYmplY3QpCi0gICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1v
dmUob2JqZWN0KSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUg
PT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgZnJpZW5kIGNsYXNzIFJlY3Vyc2l2ZU9iamVjdDE7Ci0gICAgcHVibGlj
OgotCi0gICAgICAgIFJlZjxSZWN1cnNpdmVPYmplY3QxPiByZWxlYXNlKCkKLSAgICAgICAgewot
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRf
aXNfbm90X3JlYWR5KTsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihSZWN1cnNp
dmVPYmplY3QxKSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0KSwgY2Fubm90X2Nhc3QpOwotCi0gICAg
ICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uUmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5v
bk51bGwoKTsKLSAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gV1RGTW92ZSgqcmVpbnRlcnByZXRf
Y2FzdDxSZWY8UmVjdXJzaXZlT2JqZWN0MT4qPigmanNvblJlc3VsdCkpOwotICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICAvKgotICAgICAqIFN5bnRo
ZXRpYyBjb25zdHJ1Y3RvcjoKLSAgICAgKiBSZWY8UmVjdXJzaXZlT2JqZWN0MT4gcmVzdWx0ID0g
UmVjdXJzaXZlT2JqZWN0MTo6Y3JlYXRlKCkKLSAgICAgKiAgICAgLnJlbGVhc2UoKTsKLSAgICAg
Ki8KLSAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsK
LSAgICB9Ci0KLSAgICB2b2lkIHNldE9iaihSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVz
dDo6UmVjdXJzaXZlT2JqZWN0Mj4gdmFsdWUpCi0gICAgewotICAgICAgICBKU09OOjpPYmplY3RC
YXNlOjpzZXRPYmplY3QoIm9iaiJfcywgV1RGTW92ZSh2YWx1ZSkpOwotICAgIH0KLX07Ci0KLWNs
YXNzIFJlY3Vyc2l2ZU9iamVjdDIgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7Ci1wdWJsaWM6
Ci0gICAgZW51bSB7Ci0gICAgICAgIE5vRmllbGRzU2V0ID0gMCwKLSAgICAgICAgQWxsRmllbGRz
U2V0ID0gMAotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+Ci0gICAgY2xhc3MgQnVp
bGRlciB7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbV9yZXN1
bHQ7Ci0KLSAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYg
Y2FzdFN0YXRlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9j
YXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwotICAgICAgICB9Ci0KLSAgICAgICAg
QnVpbGRlcihSZWY8LypSZWN1cnNpdmVPYmplY3QyKi9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQot
ICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0
ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwotICAgICAgICB9Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBS
ZWN1cnNpdmVPYmplY3QyOwotICAgIHB1YmxpYzoKLQotICAgICAgICBSZWY8UmVjdXJzaXZlT2Jq
ZWN0Mj4gcmVsZWFzZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNU
QVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7Ci0gICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChzaXplb2YoUmVjdXJzaXZlT2JqZWN0MikgPT0gc2l6ZW9mKEpTT046Ok9i
amVjdCksIGNhbm5vdF9jYXN0KTsKLQotICAgICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4ganNv
blJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7Ci0gICAgICAgICAgICBhdXRvIHJl
c3VsdCA9IFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPFJlY3Vyc2l2ZU9iamVjdDI+Kj4o
Jmpzb25SZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAg
ICB9OwotCi0gICAgLyoKLSAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6Ci0gICAgICogUmVm
PFJlY3Vyc2l2ZU9iamVjdDI+IHJlc3VsdCA9IFJlY3Vyc2l2ZU9iamVjdDI6OmNyZWF0ZSgpCi0g
ICAgICogICAgIC5yZWxlYXNlKCk7Ci0gICAgICovCi0gICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVs
ZHNTZXQ+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1Nl
dD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRPYmooUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+IHZhbHVlKQot
ICAgIHsKLSAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0T2JqZWN0KCJvYmoiX3MsIFdURk1v
dmUodmFsdWUpKTsKLSAgICB9Ci19OwotCi19IC8vIFRlc3QKLQotdGVtcGxhdGU8PiBzdHJ1Y3Qg
QmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPiB7
Ci1zdGF0aWMgdm9pZCBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShKU09OOjpWYWx1ZSopOwot
fTsKLXRlbXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6
VGVzdDo6VHlwZU5lZWRpbmdDYXN0PiB7Ci1zdGF0aWMgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD4gcnVudGltZUNhc3QoUmVmUHRyPEpTT046OlZhbHVl
PiYmIHZhbHVlKTsKLXN0YXRpYyB2b2lkIGFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEpTT046
OlZhbHVlKik7Ci19OwotdGVtcGxhdGU8PiBzdHJ1Y3QgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6
OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QxPiB7Ci1zdGF0aWMgdm9pZCBhc3NlcnRW
YWx1ZUhhc0V4cGVjdGVkVHlwZShKU09OOjpWYWx1ZSopOwotfTsKLXRlbXBsYXRlPD4gc3RydWN0
IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0
Mj4gewotc3RhdGljIHZvaWQgYXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSlNPTjo6VmFsdWUq
KTsKLX07Ci0KLW5hbWVzcGFjZSBUZXN0SGVscGVycyB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFBy
b3RvY29sRW51bVR5cGU+Ci1PcHRpb25hbDxQcm90b2NvbEVudW1UeXBlPiBwYXJzZUVudW1WYWx1
ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJik7Ci0KLS8vIEVudW1zIGluIHRoZSAnVGVzdCcgRG9t
YWluCi10ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNh
c3RlZEFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29s
OjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM+KGNvbnN0IFN0cmluZyYpOwotdGVtcGxhdGU8PgotT3B0
aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz4gcGFyc2VFbnVt
VmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+
KGNvbnN0IFN0cmluZyYpOwotCi19IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwotCi19IC8vIG5h
bWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotbmFtZXNwYWNl
IFdURiB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKLQotLy8g
SGFzaCBkZWNsYXJhdGlvbnMgaW4gdGhlICdUZXN0JyBEb21haW4KLXRlbXBsYXRlPD4KLXN0cnVj
dCBEZWZhdWx0SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM+
IHsKLSAgICB0eXBlZGVmIEludEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VW5jYXN0
ZWRBbmltYWxzPiBIYXNoOwotfTsKLXRlbXBsYXRlPD4KLXN0cnVjdCBEZWZhdWx0SGFzaDxJbnNw
ZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPiB7Ci0gICAgdHlwZWRlZiBJbnRI
YXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+IEhhc2g7Ci19Owot
Ci19IC8vIG5hbWVzcGFjZSBXVEYKLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5o
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotCi0jaW5jbHVkZSA8d3Rm
L09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotbmFtZXNwYWNlIFRlc3RIZWxw
ZXJzIHsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFsdWVzW10g
PSB7Ci0gICAgIkR1Y2tzIiwKLSAgICAiSGVucyIsCi0gICAgIkNyb3dzIiwKLSAgICAiRmxhbWlu
Z29zIiwKLSAgICAiUGlncyIsCi0gICAgIkNvd3MiLAotICAgICJDYXRzIiwKLX07Ci0KLVN0cmlu
ZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgewotICAgIHJldHVybiBlbnVtX2NvbnN0
YW50X3ZhbHVlc1tjb2RlXTsKLX0KLQotLy8gRW51bXMgaW4gdGhlICdUZXN0JyBEb21haW4KLXRl
bXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5p
bWFscz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6
OlVuY2FzdGVkQW5pbWFscz4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKLXsKLSAgICBz
dGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7Ci0gICAgICAgIChzaXplX3Qp
SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzOjpQaWdzLAotICAgICAg
ICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFsczo6Q293
cywKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFu
aW1hbHM6OkNhdHMsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6
VW5jYXN0ZWRBbmltYWxzOjpIZW5zLAotICAgIH07Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCA0OyArK2kpCi0gICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3Zh
bHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCi0gICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFscyljb25zdGFudFZhbHVlc1tpXTsKLQotICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLXRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmlu
ZzxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPihjb25zdCBTdHJpbmcm
IHByb3RvY29sU3RyaW5nKQotewotICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3RhbnRWYWx1
ZXNbXSA9IHsKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0
ZWRBbmltYWxzOjpEdWNrcywKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpU
ZXN0OjpDYXN0ZWRBbmltYWxzOjpIZW5zLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJv
dG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM6OkNyb3dzLAotICAgICAgICAoc2l6ZV90KUluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM6OkZsYW1pbmdvcywKLSAgICB9Owot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgNDsgKytpKQotICAgICAgICBpZiAocHJvdG9jb2xT
dHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNbaV1dKQotICAgICAg
ICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzKWNv
bnN0YW50VmFsdWVzW2ldOwotCi0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotCi19IC8v
IG5hbWVzcGFjZSBUZXN0SGVscGVycwotCi0KLQotdm9pZCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVk
VHlwZShKU09OOjpWYWx1ZSogdmFsdWUpCi17Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBBU1NF
UlRfQVJHKHZhbHVlLCB2YWx1ZSk7Ci0gICAgU3RyaW5nIHJlc3VsdDsKLSAgICBib29sIGNhc3RT
dWNjZWVkZWQgPSB2YWx1ZS0+YXNTdHJpbmcocmVzdWx0KTsKLSAgICBBU1NFUlQoY2FzdFN1Y2Nl
ZWRlZCk7Ci0gICAgQVNTRVJUKHJlc3VsdCA9PSAiRHVja3MiIHx8IHJlc3VsdCA9PSAiSGVucyIg
fHwgcmVzdWx0ID09ICJDcm93cyIgfHwgcmVzdWx0ID09ICJGbGFtaW5nb3MiKTsKLSNlbHNlIC8v
IEFTU0VSVF9FTkFCTEVECi0gICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKLSNlbmRpZiAvLyBBU1NF
UlRfRU5BQkxFRAotfQotCi12b2lkIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6
VGVzdDo6VHlwZU5lZWRpbmdDYXN0Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSlNPTjo6
VmFsdWUqIHZhbHVlKQotewotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgQVNTRVJUX0FSRyh2YWx1
ZSwgdmFsdWUpOwotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG9iamVjdDsKLSAgICBib29sIGNh
c3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNPYmplY3Qob2JqZWN0KTsKLSAgICBBU1NFUlRfVU5VU0VE
KGNhc3RTdWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQpOwotICAgIHsKLSAgICAgICAgYXV0byBzdHJp
bmdQb3MgPSBvYmplY3QtPmZpbmQoInN0cmluZyJfcyk7Ci0gICAgICAgIEFTU0VSVChzdHJpbmdQ
b3MgIT0gb2JqZWN0LT5lbmQoKSk7Ci0gICAgICAgIEJpbmRpbmdUcmFpdHM8U3RyaW5nPjo6YXNz
ZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoc3RyaW5nUG9zLT52YWx1ZS5nZXQoKSk7Ci0gICAgfQot
ICAgIHsKLSAgICAgICAgYXV0byBudW1iZXJQb3MgPSBvYmplY3QtPmZpbmQoIm51bWJlciJfcyk7
Ci0gICAgICAgIEFTU0VSVChudW1iZXJQb3MgIT0gb2JqZWN0LT5lbmQoKSk7Ci0gICAgICAgIEJp
bmRpbmdUcmFpdHM8aW50Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUobnVtYmVyUG9zLT52
YWx1ZS5nZXQoKSk7Ci0gICAgfQotICAgIHsKLSAgICAgICAgYXV0byBhbmltYWxzUG9zID0gb2Jq
ZWN0LT5maW5kKCJhbmltYWxzIl9zKTsKLSAgICAgICAgQVNTRVJUKGFuaW1hbHNQb3MgIT0gb2Jq
ZWN0LT5lbmQoKSk7Ci0gICAgICAgIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6
VGVzdDo6Q2FzdGVkQW5pbWFscz46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKGFuaW1hbHNQ
b3MtPnZhbHVlLmdldCgpKTsKLSAgICB9Ci0gICAgewotICAgICAgICBhdXRvIGlkUG9zID0gb2Jq
ZWN0LT5maW5kKCJpZCJfcyk7Ci0gICAgICAgIEFTU0VSVChpZFBvcyAhPSBvYmplY3QtPmVuZCgp
KTsKLSAgICAgICAgQmluZGluZ1RyYWl0czxpbnQ+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlw
ZShpZFBvcy0+dmFsdWUuZ2V0KCkpOwotICAgIH0KLSAgICB7Ci0gICAgICAgIGF1dG8gdHJlZVBv
cyA9IG9iamVjdC0+ZmluZCgidHJlZSJfcyk7Ci0gICAgICAgIEFTU0VSVCh0cmVlUG9zICE9IG9i
amVjdC0+ZW5kKCkpOwotICAgICAgICBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZSh0cmVl
UG9zLT52YWx1ZS5nZXQoKSk7Ci0gICAgfQotCi0gICAgaW50IGZvdW5kUHJvcGVydGllc0NvdW50
ID0gNTsKLSAgICBpZiAoZm91bmRQcm9wZXJ0aWVzQ291bnQgIT0gb2JqZWN0LT5zaXplKCkpCi0g
ICAgICAgIEZBVEFMKCJVbmV4cGVjdGVkIHByb3BlcnRpZXMgaW4gb2JqZWN0OiAlc1xuIiwgb2Jq
ZWN0LT50b0pTT05TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7Ci0jZWxzZSAvLyBBU1NFUlRfRU5B
QkxFRAotICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7Ci0jZW5kaWYgLy8gQVNTRVJUX0VOQUJMRUQK
LX0KLQotUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD4g
QmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+
OjpydW50aW1lQ2FzdChSZWZQdHI8SlNPTjo6VmFsdWU+JiYgdmFsdWUpCi17Ci0gICAgUmVmUHRy
PEpTT046Ok9iamVjdD4gcmVzdWx0OwotICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9IHZhbHVlLT5h
c09iamVjdChyZXN1bHQpOwotICAgIEFTU0VSVF9VTlVTRUQoY2FzdFN1Y2NlZWRlZCwgY2FzdFN1
Y2NlZWRlZCk7Ci0gICAgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpU
eXBlTmVlZGluZ0Nhc3Q+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShyZXN1bHQuZ2V0KCkp
OwotICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpU
eXBlTmVlZGluZ0Nhc3QpID09IHNpemVvZihKU09OOjpPYmplY3RCYXNlKSwgdHlwZV9jYXN0X3By
b2JsZW0pOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0
OjpUeXBlTmVlZGluZ0Nhc3QqPihzdGF0aWNfY2FzdDxKU09OOjpPYmplY3RCYXNlKj4ocmVzdWx0
LmdldCgpKSk7Ci19Ci0KLQotdm9pZCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShKU09O
OjpWYWx1ZSogdmFsdWUpCi17Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBBU1NFUlRfQVJHKHZh
bHVlLCB2YWx1ZSk7Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gb2JqZWN0OwotICAgIGJvb2wg
Y2FzdFN1Y2NlZWRlZCA9IHZhbHVlLT5hc09iamVjdChvYmplY3QpOwotICAgIEFTU0VSVF9VTlVT
RUQoY2FzdFN1Y2NlZWRlZCwgY2FzdFN1Y2NlZWRlZCk7Ci0KLSAgICBpbnQgZm91bmRQcm9wZXJ0
aWVzQ291bnQgPSAwOwotICAgIHsKLSAgICAgICAgYXV0byBvYmpQb3MgPSBvYmplY3QtPmZpbmQo
Im9iaiJfcyk7Ci0gICAgICAgIGlmIChvYmpQb3MgIT0gb2JqZWN0LT5lbmQoKSkgewotICAgICAg
ICAgICAgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVP
YmplY3QyPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUob2JqUG9zLT52YWx1ZS5nZXQoKSk7
Ci0gICAgICAgICAgICArK2ZvdW5kUHJvcGVydGllc0NvdW50OwotICAgICAgICB9Ci0gICAgfQot
ICAgIGlmIChmb3VuZFByb3BlcnRpZXNDb3VudCAhPSBvYmplY3QtPnNpemUoKSkKLSAgICAgICAg
RkFUQUwoIlVuZXhwZWN0ZWQgcHJvcGVydGllcyBpbiBvYmplY3Q6ICVzXG4iLCBvYmplY3QtPnRv
SlNPTlN0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKLSNlbHNlIC8vIEFTU0VSVF9FTkFCTEVECi0g
ICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKLSNlbmRpZiAvLyBBU1NFUlRfRU5BQkxFRAotfQotCi12
b2lkIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2Jq
ZWN0Mj46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEpTT046OlZhbHVlKiB2YWx1ZSkKLXsK
LSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIEFTU0VSVF9BUkcodmFsdWUsIHZhbHVlKTsKLSAgICBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiBvYmplY3Q7Ci0gICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdmFs
dWUtPmFzT2JqZWN0KG9iamVjdCk7Ci0gICAgQVNTRVJUX1VOVVNFRChjYXN0U3VjY2VlZGVkLCBj
YXN0U3VjY2VlZGVkKTsKLQotICAgIGludCBmb3VuZFByb3BlcnRpZXNDb3VudCA9IDA7Ci0gICAg
ewotICAgICAgICBhdXRvIG9ialBvcyA9IG9iamVjdC0+ZmluZCgib2JqIl9zKTsKLSAgICAgICAg
aWYgKG9ialBvcyAhPSBvYmplY3QtPmVuZCgpKSB7Ci0gICAgICAgICAgICBCaW5kaW5nVHJhaXRz
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+Ojphc3NlcnRWYWx1
ZUhhc0V4cGVjdGVkVHlwZShvYmpQb3MtPnZhbHVlLmdldCgpKTsKLSAgICAgICAgICAgICsrZm91
bmRQcm9wZXJ0aWVzQ291bnQ7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGZvdW5kUHJvcGVy
dGllc0NvdW50ICE9IG9iamVjdC0+c2l6ZSgpKQotICAgICAgICBGQVRBTCgiVW5leHBlY3RlZCBw
cm9wZXJ0aWVzIGluIG9iamVjdDogJXNcbiIsIG9iamVjdC0+dG9KU09OU3RyaW5nKCkuYXNjaWko
KS5kYXRhKCkpOwotI2Vsc2UgLy8gQVNTRVJUX0VOQUJMRUQKLSAgICBVTlVTRURfUEFSQU0odmFs
dWUpOwotI2VuZGlmIC8vIEFTU0VSVF9FTkFCTEVECi19Ci0KLX0gLy8gbmFtZXNwYWNlIFByb3Rv
Y29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbE9iamVjdHMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlz
cGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWly
aW5nLXJ1bnRpbWUtY2FzdHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXJzLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi0KLQotbmFt
ZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIK
LSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSAi
VGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotCi1uYW1lc3BhY2UgSW5zcGVj
dG9yIHsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xDb25maWd1cmF0aW9uLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBl
LXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgot
Ci1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVz
dFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbENvbmZpZ3VyYXRpb24ubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0
eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5o
IgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2ltcG9ydCAiVGVzdFByb3Rv
Y29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5h
dGVEaXNwYXRjaGFibGVBZ2VudC5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFi
bGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVj
dG9yOwotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgotewotICAg
IEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci19Ci0KLS0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJv
bGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFz
ZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBf
Y29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQp
ZGVhbGxvYwotewotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5h
bC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQg
PHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2wuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5
cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQot
I2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgotCi0KLUBjbGFz
cyBUZXN0UHJvdG9jb2xUZXN0VHlwZU5lZWRpbmdDYXN0OwotQGNsYXNzIFRlc3RQcm90b2NvbFRl
c3RSZWN1cnNpdmVPYmplY3QxOwotQGNsYXNzIFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmpl
Y3QyOwotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xQbGF0Zm9ybSkg
ewotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3Jt
R2VuZXJpYywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUywKLSAgICBUZXN0UHJvdG9jb2xQ
bGF0Zm9ybU1hY09TLAotfTsKLQotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJv
dG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzKSB7Ci0gICAgVGVzdFByb3RvY29sVGVzdFVuY2FzdGVk
QW5pbWFsc1BpZ3MsCi0gICAgVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc0Nvd3MsCi0g
ICAgVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc0NhdHMsCi0gICAgVGVzdFByb3RvY29s
VGVzdFVuY2FzdGVkQW5pbWFsc0hlbnMsCi19OwotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2Vy
LCBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFscykgewotICAgIFRlc3RQcm90b2NvbFRlc3RD
YXN0ZWRBbmltYWxzRHVja3MsCi0gICAgVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHNIZW5z
LAotICAgIFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzQ3Jvd3MsCi0gICAgVGVzdFByb3Rv
Y29sVGVzdENhc3RlZEFuaW1hbHNGbGFtaW5nb3MsCi19OwotCi0KLV9fYXR0cmlidXRlX18oKHZp
c2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUZXN0VHlwZU5l
ZWRpbmdDYXN0IDogUldJUHJvdG9jb2xKU09OT2JqZWN0Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKLS0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3Qg
Kilqc29uT2JqZWN0OwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoU3RyaW5nOihOU1N0cmluZyAq
KXN0cmluZyBudW1iZXI6KGludCludW1iZXIgYW5pbWFsczooVGVzdFByb3RvY29sVGVzdENhc3Rl
ZEFuaW1hbHMpYW5pbWFscyBpZGVudGlmaWVyOihpbnQpaWRlbnRpZmllciB0cmVlOihUZXN0UHJv
dG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSAqKXRyZWU7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVy
dHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKnN0cmluZzsKLS8qIHJlcXVpcmVkICovIEBw
cm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCBudW1iZXI7Ci0vKiByZXF1aXJlZCAqLyBA
cHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFs
cyBhbmltYWxzOwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikg
aW50IGlkZW50aWZpZXI7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0
YWluKSBUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSAqdHJlZTsKLUBlbmQKLQotX19h
dHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90
b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxIDogUldJUHJvdG9jb2xKU09OT2JqZWN0Ci0tIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICop
cGF5bG9hZDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90
b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OwotLyogb3B0aW9uYWwgKi8gQHByb3BlcnR5IChu
b25hdG9taWMsIHJldGFpbikgVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDIgKm9iajsK
LUBlbmQKLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJm
YWNlIFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QyIDogUldJUHJvdG9jb2xKU09OT2Jq
ZWN0Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJp
bmcgKiwgaWQ+ICopcGF5bG9hZDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2Jq
ZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OwotLyogb3B0aW9uYWwgKi8g
QHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9i
amVjdDEgKm9iajsKLUBlbmQKLQotCi0KLQotCi0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQ
cm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4KLQotIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2wuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2Fz
dHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1w
b3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2
YXRlLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRy
b2xsZXIuaD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLQotCi0KLSMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBl
LXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0IDxXZWJJ
bnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNw
ZWN0b3IgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+Ci1PcHRpb25hbDxPYmpD
RW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKLQotaW5s
aW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFBsYXRmb3JtIHZhbHVlKQot
ewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1BbGw6
Ci0gICAgICAgIHJldHVybiAiYWxsIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1H
ZW5lcmljOgotICAgICAgICByZXR1cm4gImdlbmVyaWMiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9j
b2xQbGF0Zm9ybUlPUzoKLSAgICAgICAgcmV0dXJuICJpb3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJv
dG9jb2xQbGF0Zm9ybU1hY09TOgotICAgICAgICByZXR1cm4gIm1hY29zIl9zOwotICAgIH0KLX0K
LQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFBsYXRmb3JtPiBmcm9t
UHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0g
ImFsbCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDsKLSAgICBpZiAo
dmFsdWUgPT0gImdlbmVyaWMiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1H
ZW5lcmljOwotICAgIGlmICh2YWx1ZSA9PSAiaW9zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90
b2NvbFBsYXRmb3JtSU9TOwotICAgIGlmICh2YWx1ZSA9PSAibWFjb3MiKQotICAgICAgICByZXR1
cm4gVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0Owot
fQotCi0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xUZXN0VW5j
YXN0ZWRBbmltYWxzIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVz
dFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc1BpZ3M6Ci0gICAgICAgIHJldHVybiAiUGlncyJf
czsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHNDb3dzOgotICAgICAg
ICByZXR1cm4gIkNvd3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmlt
YWxzQ2F0czoKLSAgICAgICAgcmV0dXJuICJDYXRzIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29s
VGVzdFVuY2FzdGVkQW5pbWFsc0hlbnM6Ci0gICAgICAgIHJldHVybiAiSGVucyJfczsKLSAgICB9
Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xUZXN0VW5jYXN0
ZWRBbmltYWxzPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAg
ICBpZiAodmFsdWUgPT0gIlBpZ3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sVGVzdFVu
Y2FzdGVkQW5pbWFsc1BpZ3M7Ci0gICAgaWYgKHZhbHVlID09ICJDb3dzIikKLSAgICAgICAgcmV0
dXJuIFRlc3RQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHNDb3dzOwotICAgIGlmICh2YWx1ZSA9
PSAiQ2F0cyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxz
Q2F0czsKLSAgICBpZiAodmFsdWUgPT0gIkhlbnMiKQotICAgICAgICByZXR1cm4gVGVzdFByb3Rv
Y29sVGVzdFVuY2FzdGVkQW5pbWFsc0hlbnM7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0K
LQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRB
bmltYWxzIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3Rv
Y29sVGVzdENhc3RlZEFuaW1hbHNEdWNrczoKLSAgICAgICAgcmV0dXJuICJEdWNrcyJfczsKLSAg
ICBjYXNlIFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzSGVuczoKLSAgICAgICAgcmV0dXJu
ICJIZW5zIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHNDcm93czoK
LSAgICAgICAgcmV0dXJuICJDcm93cyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFRlc3RDYXN0
ZWRBbmltYWxzRmxhbWluZ29zOgotICAgICAgICByZXR1cm4gIkZsYW1pbmdvcyJfczsKLSAgICB9
Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xUZXN0Q2FzdGVk
QW5pbWFscz4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAg
aWYgKHZhbHVlID09ICJEdWNrcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xUZXN0Q2Fz
dGVkQW5pbWFsc0R1Y2tzOwotICAgIGlmICh2YWx1ZSA9PSAiSGVucyIpCi0gICAgICAgIHJldHVy
biBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFsc0hlbnM7Ci0gICAgaWYgKHZhbHVlID09ICJD
cm93cyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFsc0Nyb3dz
OwotICAgIGlmICh2YWx1ZSA9PSAiRmxhbWluZ29zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90
b2NvbFRlc3RDYXN0ZWRBbmltYWxzRmxhbWluZ29zOwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJl
cXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0K
LSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNl
ci5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUu
aD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGludGVyZmFjZSBUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMgKFRlc3REb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlVHlwZU5lZWRp
bmdDYXN0OihUZXN0UHJvdG9jb2xUZXN0VHlwZU5lZWRpbmdDYXN0ICoqKW91dFZhbHVlIGZyb21Q
YXlsb2FkOihpZClwYXlsb2FkOwotKyAodm9pZClfcGFyc2VDYXN0ZWRPYmplY3RJZDooTlNOdW1i
ZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZVVu
Y2FzdGVkT2JqZWN0SWQ6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXls
b2FkOwotKyAodm9pZClfcGFyc2VVbmNhc3RlZEFuaW1hbHM6KE5TTnVtYmVyICoqKW91dFZhbHVl
IGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotKyAodm9pZClfcGFyc2VDYXN0ZWRBbmltYWxzOihO
U051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLSsgKHZvaWQpX3Bh
cnNlUmVjdXJzaXZlT2JqZWN0MTooVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgKiop
b3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZVJlY3Vyc2l2
ZU9iamVjdDI6KFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QyICoqKW91dFZhbHVlIGZy
b21QYXlsb2FkOihpZClwYXlsb2FkOwotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMgKFRlc3REb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlVHlwZU5l
ZWRpbmdDYXN0OihUZXN0UHJvdG9jb2xUZXN0VHlwZU5lZWRpbmdDYXN0ICoqKW91dFZhbHVlIGZy
b21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQ
RShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gW1tUZXN0
UHJvdG9jb2xUZXN0VHlwZU5lZWRpbmdDYXN0IGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9h
ZF07Ci19Ci0KLSsgKHZvaWQpX3BhcnNlQ2FzdGVkT2JqZWN0SWQ6KE5TTnVtYmVyICoqKW91dFZh
bHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9C
QURfVFlQRShwYXlsb2FkLCBbTlNOdW1iZXIgY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSAoTlNO
dW1iZXIgKilwYXlsb2FkOwotfQotCi0rICh2b2lkKV9wYXJzZVVuY2FzdGVkT2JqZWN0SWQ6KE5T
TnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1df
RVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNOdW1iZXIgY2xhc3NdKTsKLSAgICAq
b3V0VmFsdWUgPSAoTlNOdW1iZXIgKilwYXlsb2FkOwotfQotCi0rICh2b2lkKV9wYXJzZVVuY2Fz
dGVkQW5pbWFsczooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQK
LXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBj
bGFzc10pOwotICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHM+IHJl
c3VsdCA9IEluc3BlY3Rvcjo6ZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbFRlc3RVbmNh
c3RlZEFuaW1hbHM+KHBheWxvYWQpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX0VOVU1f
VkFMVUUocmVzdWx0LCBAIlVuY2FzdGVkQW5pbWFscyIpOwotICAgICpvdXRWYWx1ZSA9IEAocmVz
dWx0LnZhbHVlKCkpOwotfQotCi0rICh2b2lkKV9wYXJzZUNhc3RlZEFuaW1hbHM6KE5TTnVtYmVy
ICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKLSAgICBPcHRpb25h
bDxUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFscz4gcmVzdWx0ID0gSW5zcGVjdG9yOjpmcm9t
UHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHM+KHBheWxvYWQpOwot
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX0VOVU1fVkFMVUUocmVzdWx0LCBAIkNhc3RlZEFu
aW1hbHMiKTsKLSAgICAqb3V0VmFsdWUgPSBAKHJlc3VsdC52YWx1ZSgpKTsKLX0KLQotKyAodm9p
ZClfcGFyc2VSZWN1cnNpdmVPYmplY3QxOihUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0
MSAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOwotICAgICpv
dXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgYWxsb2NdIGluaXRX
aXRoUGF5bG9hZDpwYXlsb2FkXTsKLX0KLQotKyAodm9pZClfcGFyc2VSZWN1cnNpdmVPYmplY3Qy
OihUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MiAqKilvdXRWYWx1ZSBmcm9tUGF5bG9h
ZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9h
ZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29s
VGVzdFJlY3Vyc2l2ZU9iamVjdDIgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKLX0K
LQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1t
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJv
dG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMu
aCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+
Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4K
LQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi1AaW1wbGVtZW50YXRpb24gVGVzdFBy
b3RvY29sVGVzdFR5cGVOZWVkaW5nQ2FzdAotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXls
b2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCi17Ci0g
ICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAg
ICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJzdHJpbmci
XSwgQCJzdHJpbmciKTsKLSAgICBzZWxmLnN0cmluZyA9IHBheWxvYWRbQCJzdHJpbmciXTsKLQot
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAIm51bWJl
ciJdLCBAIm51bWJlciIpOwotICAgIHNlbGYubnVtYmVyID0gW3BheWxvYWRbQCJudW1iZXIiXSBp
bnRlZ2VyVmFsdWVdOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJU
WShwYXlsb2FkW0AiYW5pbWFscyJdLCBAImFuaW1hbHMiKTsKLSAgICBPcHRpb25hbDxUZXN0UHJv
dG9jb2xUZXN0Q2FzdGVkQW5pbWFscz4gYW5pbWFscyA9IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0
UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFscz4ocGF5bG9hZFtAImFuaW1hbHMiXSk7Ci0gICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9CQURfRU5VTV9WQUxVRShhbmltYWxzLCBAImFuaW1hbHMiKTsKLSAg
ICBzZWxmLmFuaW1hbHMgPSBhbmltYWxzLnZhbHVlKCk7Ci0KLSAgICBUSFJPV19FWENFUFRJT05f
Rk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJpZCJdLCBAImlkIik7Ci0gICAgc2VsZi5p
ZGVudGlmaWVyID0gW3BheWxvYWRbQCJpZCJdIGludGVnZXJWYWx1ZV07Ci0KLSAgICBUSFJPV19F
WENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJ0cmVlIl0sIEAidHJlZSIp
OwotICAgIHNlbGYudHJlZSA9IFtbVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgYWxs
b2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkW0AidHJlZSJdXTsKLQotICAgIHJldHVybiBzZWxm
OwotfQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29s
SlNPTk9iamVjdCAqKW9iamVjdAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhK
U09OT2JqZWN0OltvYmplY3QgdG9KU09OT2JqZWN0XS5nZXQoKV0pKQotICAgICAgICByZXR1cm4g
bmlsOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFN0
cmluZzooTlNTdHJpbmcgKilzdHJpbmcgbnVtYmVyOihpbnQpbnVtYmVyIGFuaW1hbHM6KFRlc3RQ
cm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzKWFuaW1hbHMgaWRlbnRpZmllcjooaW50KWlkZW50aWZp
ZXIgdHJlZTooVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgKil0cmVlCi17Ci0gICAg
aWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBU
SFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHN0cmluZywgQCJzdHJpbmciKTsK
LSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHRyZWUsIEAidHJlZSIp
OwotCi0gICAgc2VsZi5zdHJpbmcgPSBzdHJpbmc7Ci0gICAgc2VsZi5udW1iZXIgPSBudW1iZXI7
Ci0gICAgc2VsZi5hbmltYWxzID0gYW5pbWFsczsKLSAgICBzZWxmLmlkZW50aWZpZXIgPSBpZGVu
dGlmaWVyOwotICAgIHNlbGYudHJlZSA9IHRyZWU7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQot
LSAodm9pZClzZXRTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nCi17Ci0gICAgW3N1cGVyIHNldFN0
cmluZzpzdHJpbmcgZm9yS2V5OkAic3RyaW5nIl07Ci19Ci0KLS0gKE5TU3RyaW5nICopc3RyaW5n
Ci17Ci0gICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJzdHJpbmciXTsKLX0KLQotLSAo
dm9pZClzZXROdW1iZXI6KGludCludW1iZXIKLXsKLSAgICBbc3VwZXIgc2V0SW50ZWdlcjpudW1i
ZXIgZm9yS2V5OkAibnVtYmVyIl07Ci19Ci0KLS0gKGludCludW1iZXIKLXsKLSAgICByZXR1cm4g
W3N1cGVyIGludGVnZXJGb3JLZXk6QCJudW1iZXIiXTsKLX0KLQotLSAodm9pZClzZXRBbmltYWxz
OihUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFscylhbmltYWxzCi17Ci0gICAgW3N1cGVyIHNl
dFN0cmluZzp0b1Byb3RvY29sU3RyaW5nKGFuaW1hbHMpIGZvcktleTpAImFuaW1hbHMiXTsKLX0K
LQotLSAoVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHMpYW5pbWFscwotewotICAgIHJldHVy
biBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHM+KFtzdXBl
ciBzdHJpbmdGb3JLZXk6QCJhbmltYWxzIl0pLnZhbHVlKCk7Ci19Ci0KLS0gKHZvaWQpc2V0SWRl
bnRpZmllcjooaW50KWlkZW50aWZpZXIKLXsKLSAgICBbc3VwZXIgc2V0SW50ZWdlcjppZGVudGlm
aWVyIGZvcktleTpAImlkIl07Ci19Ci0KLS0gKGludClpZGVudGlmaWVyCi17Ci0gICAgcmV0dXJu
IFtzdXBlciBpbnRlZ2VyRm9yS2V5OkAiaWQiXTsKLX0KLQotLSAodm9pZClzZXRUcmVlOihUZXN0
UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSAqKXRyZWUKLXsKLSAgICBbc3VwZXIgc2V0T2Jq
ZWN0OnRyZWUgZm9yS2V5OkAidHJlZSJdOwotfQotCi0tIChUZXN0UHJvdG9jb2xUZXN0UmVjdXJz
aXZlT2JqZWN0MSAqKXRyZWUKLXsKLSAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9iamVjdCA9
IFtzdXBlciBvYmplY3RGb3JLZXk6QCJ0cmVlIl07Ci0gICAgaWYgKCFvYmplY3QpCi0gICAgICAg
IHJldHVybiBuaWw7Ci0gICAgcmV0dXJuIFtbVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVj
dDEgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDpbW3N1cGVyIG9iamVjdEZvcktleTpAInRyZWUi
XSB0b0pTT05PYmplY3RdLmdldCgpXTsKLX0KLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gVGVz
dFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEKLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
UGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZAot
ewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwot
Ci0gICAgc2VsZi5vYmogPSBbW1Rlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QyIGFsbG9j
XSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZFtAIm9iaiJdXTsKLQotICAgIHJldHVybiBzZWxmOwot
fQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNP
Tk9iamVjdCAqKW9iamVjdAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09O
T2JqZWN0OltvYmplY3QgdG9KU09OT2JqZWN0XS5nZXQoKV0pKQotICAgICAgICByZXR1cm4gbmls
OwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpc2V0T2JqOihUZXN0UHJvdG9jb2xU
ZXN0UmVjdXJzaXZlT2JqZWN0MiAqKW9iagotewotICAgIFtzdXBlciBzZXRPYmplY3Q6b2JqIGZv
cktleTpAIm9iaiJdOwotfQotCi0tIChUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MiAq
KW9iagotewotICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb2JqZWN0ID0gW3N1cGVyIG9iamVj
dEZvcktleTpAIm9iaiJdOwotICAgIGlmICghb2JqZWN0KQotICAgICAgICByZXR1cm4gbmlsOwot
ICAgIHJldHVybiBbW1Rlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QyIGFsbG9jXSBpbml0
V2l0aEpTT05PYmplY3Q6W1tzdXBlciBvYmplY3RGb3JLZXk6QCJvYmoiXSB0b0pTT05PYmplY3Rd
LmdldCgpXTsKLX0KLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVGVzdFJl
Y3Vyc2l2ZU9iamVjdDIKLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVs
bCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZAotewotICAgIGlmICghKHNl
bGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgc2VsZi5vYmog
PSBbW1Rlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxIGFsbG9jXSBpbml0V2l0aFBheWxv
YWQ6cGF5bG9hZFtAIm9iaiJdXTsKLQotICAgIHJldHVybiBzZWxmOwotfQotLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9iamVj
dAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmplY3Qg
dG9KU09OT2JqZWN0XS5nZXQoKV0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgcmV0dXJu
IHNlbGY7Ci19Ci0KLS0gKHZvaWQpc2V0T2JqOihUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2Jq
ZWN0MSAqKW9iagotewotICAgIFtzdXBlciBzZXRPYmplY3Q6b2JqIGZvcktleTpAIm9iaiJdOwot
fQotCi0tIChUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSAqKW9iagotewotICAgIFJX
SVByb3RvY29sSlNPTk9iamVjdCAqb2JqZWN0ID0gW3N1cGVyIG9iamVjdEZvcktleTpAIm9iaiJd
OwotICAgIGlmICghb2JqZWN0KQotICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiBbW1Rl
c3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxIGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6
W1tzdXBlciBvYmplY3RGb3JLZXk6QCJvYmoiXSB0b0pTT05PYmplY3RdLmdldCgpXTsKLX0KLQot
QGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4
cGVjdGVkL3R5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC90eXBl
LXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBlNDMwZWRlNTA4Yi4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvdHlwZS13aXRoLW9w
ZW4tcGFyYW1ldGVycy5qc29uLXJlc3VsdAorKysgL2Rldi9udWxsCkBAIC0xLDExNjQgKzAsMCBA
QAotIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotIyMjIEVuZCBGaWxlOiBJ
bnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5h
dGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIK
LSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgot
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0KLW5h
bWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7
Ci1wdWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERp
c3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShk
aXNwYXRjaGVyKTsgfQotICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigp
IGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KLXByaXZhdGU6Ci0g
ICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwotfTsKLQot
Ci0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNo
ZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXdpdGgtb3Blbi1w
YXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXR5
cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
Ci0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSB0eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNp
bmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSNpbmNs
dWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jZW5kaWYKLQotbmFtZXNw
YWNlIEluc3BlY3RvciB7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVu
ZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bE9iamVjdHMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgRnJvbnRl
bmRSb3V0ZXI7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0
RnJvbnRlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNw
YXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXdpdGgt
b3Blbi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3Bh
dGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJv
dXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3Bl
Y3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RG
cm9udGVuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2Jq
ZWN0cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRoLW9wZW4t
cGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJv
dG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5hbWVzcGFjZSBJ
bnNwZWN0b3IgewotCi0KLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLS8vIEZvcndhcmQg
ZGVjbGFyYXRpb25zLgotbmFtZXNwYWNlIFRlc3QgewotY2xhc3MgTm9PcGVuUGFyYW1ldGVyczsK
LWNsYXNzIE9wZW5QYXJhbWV0ZXJzOwotfSAvLyBUZXN0Ci0vLyBFbmQgb2YgZm9yd2FyZCBkZWNs
YXJhdGlvbnMuCi0KLQotCi0KLW5hbWVzcGFjZSBUZXN0IHsKLWNsYXNzIE5vT3BlblBhcmFtZXRl
cnMgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7Ci1wdWJsaWM6Ci0gICAgZW51bSB7Ci0gICAg
ICAgIE5vRmllbGRzU2V0ID0gMCwKLSAgICAgICAgT25lU2V0ID0gMSA8PCAwLAotICAgICAgICBU
d29TZXQgPSAxIDw8IDEsCi0gICAgICAgIEFsbEZpZWxkc1NldCA9IChPbmVTZXQgfCBUd29TZXQp
Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPGludCBTVEFURT4KLSAgICBjbGFzcyBCdWlsZGVyIHsK
LSAgICBwcml2YXRlOgotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBtX3Jlc3VsdDsKLQot
ICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3Rh
dGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVp
bGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVy
KFJlZjwvKk5vT3BlblBhcmFtZXRlcnMqL0pTT046Ok9iamVjdD4mJiBvYmplY3QpCi0gICAgICAg
ICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKLSAgICAgICAgewotICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9u
b25faW5pdF9zdGF0ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZnJpZW5kIGNsYXNzIE5vT3BlblBh
cmFtZXRlcnM7Ci0gICAgcHVibGljOgotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBPbmVTZXQ+
JiBzZXRPbmUoZG91YmxlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgT25lU2V0KSwgcHJvcGVydHlfb25lX2FscmVhZHlfc2V0KTsKLSAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXREb3VibGUoIm9uZSJfcywgdmFsdWUpOwotICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxPbmVTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgVHdvU2V0PiYgc2V0VHdvKGRvdWJsZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFR3b1NldCksIHByb3BlcnR5X3R3b19hbHJl
YWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0RG91YmxlKCJ0d28iX3MsIHZhbHVl
KTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VHdvU2V0PigpOwotICAgICAgICB9Ci0K
LSAgICAgICAgUmVmPE5vT3BlblBhcmFtZXRlcnM+IHJlbGVhc2UoKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19u
b3RfcmVhZHkpOwotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKE5vT3BlblBhcmFt
ZXRlcnMpID09IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7Ci0KLSAgICAgICAg
ICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25SZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVs
bCgpOwotICAgICAgICAgICAgYXV0byByZXN1bHQgPSBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0
PFJlZjxOb09wZW5QYXJhbWV0ZXJzPio+KCZqc29uUmVzdWx0KSk7Ci0gICAgICAgICAgICByZXR1
cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIC8qCi0gICAgICogU3ludGhldGlj
IGNvbnN0cnVjdG9yOgotICAgICAqIFJlZjxOb09wZW5QYXJhbWV0ZXJzPiByZXN1bHQgPSBOb09w
ZW5QYXJhbWV0ZXJzOjpjcmVhdGUoKQotICAgICAqICAgICAuc2V0T25lKC4uLikKLSAgICAgKiAg
ICAgLnNldFR3byguLi4pCi0gICAgICogICAgIC5yZWxlYXNlKCk7Ci0gICAgICovCi0gICAgc3Rh
dGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4g
QnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7Ci0gICAgfQotfTsK
LQotY2xhc3MgT3BlblBhcmFtZXRlcnMgOiBwdWJsaWMgSlNPTjo6T2JqZWN0IHsKLXB1YmxpYzoK
LSAgICBlbnVtIHsKLSAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAotICAgICAgICBBbHBoYVNldCA9
IDEgPDwgMCwKLSAgICAgICAgQmV0YVNldCA9IDEgPDwgMSwKLSAgICAgICAgQWxsRmllbGRzU2V0
ID0gKEFscGhhU2V0IHwgQmV0YVNldCkKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8aW50IFNUQVRF
PgotICAgIGNsYXNzIEJ1aWxkZXIgewotICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0cjxKU09O
OjpPYmplY3Q+IG1fcmVzdWx0OwotCi0gICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVy
PFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIEJ1aWxkZXIoUmVmPC8qT3BlblBhcmFtZXRlcnMqL0pTT046Ok9iamVj
dD4mJiBvYmplY3QpCi0gICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKLSAg
ICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQs
IGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7Ci0gICAgICAgIH0KLSAgICAgICAg
ZnJpZW5kIGNsYXNzIE9wZW5QYXJhbWV0ZXJzOwotICAgIHB1YmxpYzoKLQotICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgQWxwaGFTZXQ+JiBzZXRBbHBoYShkb3VibGUgdmFsdWUpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBBbHBoYVNldCksIHByb3BlcnR5
X2FscGhhX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXREb3VibGUoImFs
cGhhIl9zLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEFscGhhU2V0Pigp
OwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IEJldGFTZXQ+JiBzZXRCZXRh
KGRvdWJsZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIEJldGFTZXQpLCBwcm9wZXJ0eV9iZXRhX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXREb3VibGUoImJldGEiX3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVy
biBjYXN0U3RhdGU8QmV0YVNldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIFJlZjxPcGVuUGFy
YW1ldGVycz4gcmVsZWFzZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7Ci0gICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVChzaXplb2YoT3BlblBhcmFtZXRlcnMpID09IHNpemVvZihKU09OOjpP
YmplY3QpLCBjYW5ub3RfY2FzdCk7Ci0KLSAgICAgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IGpz
b25SZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOwotICAgICAgICAgICAgYXV0byBy
ZXN1bHQgPSBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxPcGVuUGFyYW1ldGVycz4qPigm
anNvblJlc3VsdCkpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAg
IH07Ci0KLSAgICAvKgotICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKLSAgICAgKiBSZWY8
T3BlblBhcmFtZXRlcnM+IHJlc3VsdCA9IE9wZW5QYXJhbWV0ZXJzOjpjcmVhdGUoKQotICAgICAq
ICAgICAuc2V0QWxwaGEoLi4uKQotICAgICAqICAgICAuc2V0QmV0YSguLi4pCi0gICAgICogICAg
IC5yZWxlYXNlKCk7Ci0gICAgICovCi0gICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNy
ZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKSk7Ci0gICAgfQotCi0gICAgLy8gUHJvcGVydHkgbmFtZXMgZm9yIHR5
cGUgZ2VuZXJhdGVkIGFzIG9wZW4uCi0gICAgTm9uZSBzdGF0aWMgY29uc3QgY2hhciogQWxwaGE7
Ci19OwotCi19IC8vIFRlc3QKLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgK
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0KLSNpbmNsdWRlIDx3dGYvT3B0
aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNw
ZWN0b3IgewotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi1jb25zdCBjaGFyKiBJbnNwZWN0b3I6
OlByb3RvY29sOjpUZXN0OjpPcGVuUGFyYW1ldGVyczo6QWxwaGEgPSAiYWxwaGEiOwotCi19IC8v
IG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSB0eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIu
aD4KLQotCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAi
Y29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQot
I2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLQotbmFtZXNw
YWNlIEluc3BlY3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9j
b2wuaD4KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJm
YWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAotQGVuZAotCi0KLSMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRp
b24uaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0
ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21l
bnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIElu
c3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KLXsK
LSAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotfQotCi0t
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNv
bnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlm
ICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0g
ICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2
b2lkKWRlYWxsb2MKLXsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLUBlbmQKLQotCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSB0eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJu
YWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0
IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLSMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0
eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLSNp
bXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KLQotCi1AY2xhc3Mg
VGVzdFByb3RvY29sVGVzdE5vT3BlblBhcmFtZXRlcnM7Ci1AY2xhc3MgVGVzdFByb3RvY29sVGVz
dE9wZW5QYXJhbWV0ZXJzOwotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9j
b2xQbGF0Zm9ybSkgewotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsLAotICAgIFRlc3RQcm90
b2NvbFBsYXRmb3JtR2VuZXJpYywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUywKLSAgICBU
ZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TLAotfTsKLQotCi0KLQotX19hdHRyaWJ1dGVfXygodmlz
aWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbFRlc3ROb09wZW5Q
YXJhbWV0ZXJzIDogUldJUHJvdG9jb2xKU09OT2JqZWN0Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKLS0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3Qg
Kilqc29uT2JqZWN0OwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoT25lOihkb3VibGUpb25lIHR3
bzooZG91YmxlKXR3bzsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3Np
Z24pIGRvdWJsZSBvbmU7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNz
aWduKSBkb3VibGUgdHdvOwotQGVuZAotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVm
YXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sVGVzdE9wZW5QYXJhbWV0ZXJzIDogUldJ
UHJvdG9jb2xKU09OT2JqZWN0Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0Rp
Y3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKLS0gKGluc3RhbmNldHlwZSlpbml0
V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0Owot
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQWxwaGE6KGRvdWJsZSlhbHBoYSBiZXRhOihkb3VibGUp
YmV0YTsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGRvdWJs
ZSBhbHBoYTsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGRv
dWJsZSBiZXRhOwotQGVuZAotCi0KLQotCi0KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVBy
b3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQg
IlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUu
aCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxl
ci5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotCi0KLQotIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtd2l0
aC1vcGVuLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rv
ci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KLU9wdGlvbmFsPE9iakNFbnVtVHlw
ZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOwotCi1pbmxpbmUgU3Ry
aW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sUGxhdGZvcm0gdmFsdWUpCi17Ci0gICAg
c3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDoKLSAgICAg
ICAgcmV0dXJuICJhbGwiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM6
Ci0gICAgICAgIHJldHVybiAiZ2VuZXJpYyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRm
b3JtSU9TOgotICAgICAgICByZXR1cm4gImlvcyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBs
YXRmb3JtTWFjT1M6Ci0gICAgICAgIHJldHVybiAibWFjb3MiX3M7Ci0gICAgfQotfQotCi10ZW1w
bGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sUGxhdGZvcm0+IGZyb21Qcm90b2Nv
bFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiYWxsIikK
LSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOwotICAgIGlmICh2YWx1ZSA9
PSAiZ2VuZXJpYyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM7
Ci0gICAgaWYgKHZhbHVlID09ICJpb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxh
dGZvcm1JT1M7Ci0gICAgaWYgKHZhbHVlID09ICJtYWNvcyIpCi0gICAgICAgIHJldHVybiBUZXN0
UHJvdG9jb2xQbGF0Zm9ybU1hY09TOwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLQot
Ci19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRoLW9w
ZW4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotCi0jaW1wb3J0
ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKLSNp
bXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0KLXVz
aW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zIChUZXN0RG9tYWluKQotCi0rICh2b2lkKV9wYXJzZU5vT3BlblBhcmFtZXRlcnM6
KFRlc3RQcm90b2NvbFRlc3ROb09wZW5QYXJhbWV0ZXJzICoqKW91dFZhbHVlIGZyb21QYXlsb2Fk
OihpZClwYXlsb2FkOwotKyAodm9pZClfcGFyc2VPcGVuUGFyYW1ldGVyczooVGVzdFByb3RvY29s
VGVzdE9wZW5QYXJhbWV0ZXJzICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwot
Ci1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFRl
c3REb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlTm9PcGVuUGFyYW1ldGVyczooVGVzdFByb3RvY29s
VGVzdE5vT3BlblBhcmFtZXRlcnMgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQK
LXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25h
cnkgY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbFRlc3ROb09wZW5QYXJh
bWV0ZXJzIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07Ci19Ci0KLSsgKHZvaWQpX3Bh
cnNlT3BlblBhcmFtZXRlcnM6KFRlc3RQcm90b2NvbFRlc3RPcGVuUGFyYW1ldGVycyAqKilvdXRW
YWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
QkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9
IFtbVGVzdFByb3RvY29sVGVzdE9wZW5QYXJhbWV0ZXJzIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6
cGF5bG9hZF07Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJz
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9y
dCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0
UHJpdmF0ZS5oPgotI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQgPHd0Zi9KU09O
VmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotQGltcGxlbWVudGF0
aW9uIFRlc3RQcm90b2NvbFRlc3ROb09wZW5QYXJhbWV0ZXJzCi0KLS0gKGluc3RhbmNldHlwZSlp
bml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBh
eWxvYWQKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJu
IG5pbDsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9h
ZFtAIm9uZSJdLCBAIm9uZSIpOwotICAgIHNlbGYub25lID0gW3BheWxvYWRbQCJvbmUiXSBkb3Vi
bGVWYWx1ZV07Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBh
eWxvYWRbQCJ0d28iXSwgQCJ0d28iKTsKLSAgICBzZWxmLnR3byA9IFtwYXlsb2FkW0AidHdvIl0g
ZG91YmxlVmFsdWVdOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0tIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopb2JqZWN0Ci17Ci0g
ICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEpTT05PYmplY3Q6W29iamVjdCB0b0pTT05P
YmplY3RdLmdldCgpXSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICByZXR1cm4gc2VsZjsK
LX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoT25lOihkb3VibGUpb25lIHR3bzooZG91Ymxl
KXR3bwotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4g
bmlsOwotCi0gICAgc2VsZi5vbmUgPSBvbmU7Ci0gICAgc2VsZi50d28gPSB0d287Ci0KLSAgICBy
ZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClzZXRPbmU6KGRvdWJsZSlvbmUKLXsKLSAgICBbc3Vw
ZXIgc2V0RG91YmxlOm9uZSBmb3JLZXk6QCJvbmUiXTsKLX0KLQotLSAoZG91YmxlKW9uZQotewot
ICAgIHJldHVybiBbc3VwZXIgZG91YmxlRm9yS2V5OkAib25lIl07Ci19Ci0KLS0gKHZvaWQpc2V0
VHdvOihkb3VibGUpdHdvCi17Ci0gICAgW3N1cGVyIHNldERvdWJsZTp0d28gZm9yS2V5OkAidHdv
Il07Ci19Ci0KLS0gKGRvdWJsZSl0d28KLXsKLSAgICByZXR1cm4gW3N1cGVyIGRvdWJsZUZvcktl
eTpAInR3byJdOwotfQotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUZXN0
T3BlblBhcmFtZXRlcnMKLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVs
bCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZAotewotICAgIGlmICghKHNl
bGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiYWxwaGEiXSwgQCJhbHBoYSIp
OwotICAgIHNlbGYuYWxwaGEgPSBbcGF5bG9hZFtAImFscGhhIl0gZG91YmxlVmFsdWVdOwotCi0g
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiYmV0YSJd
LCBAImJldGEiKTsKLSAgICBzZWxmLmJldGEgPSBbcGF5bG9hZFtAImJldGEiXSBkb3VibGVWYWx1
ZV07Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3Rv
Y29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilvYmplY3QKLXsKLSAgICBpZiAoIShz
ZWxmID0gW3N1cGVyIGluaXRXaXRoSlNPTk9iamVjdDpbb2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0
KCldKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhBbHBoYTooZG91YmxlKWFscGhhIGJldGE6KGRvdWJsZSliZXRh
Ci17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJldHVybiBuaWw7
Ci0KLSAgICBzZWxmLmFscGhhID0gYWxwaGE7Ci0gICAgc2VsZi5iZXRhID0gYmV0YTsKLQotICAg
IHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKXNldEFscGhhOihkb3VibGUpYWxwaGEKLXsKLSAg
ICBbc3VwZXIgc2V0RG91YmxlOmFscGhhIGZvcktleTpAImFscGhhIl07Ci19Ci0KLS0gKGRvdWJs
ZSlhbHBoYQotewotICAgIHJldHVybiBbc3VwZXIgZG91YmxlRm9yS2V5OkAiYWxwaGEiXTsKLX0K
LQotLSAodm9pZClzZXRCZXRhOihkb3VibGUpYmV0YQotewotICAgIFtzdXBlciBzZXREb3VibGU6
YmV0YSBmb3JLZXk6QCJiZXRhIl07Ci19Ci0KLS0gKGRvdWJsZSliZXRhCi17Ci0gICAgcmV0dXJu
IFtzdXBlciBkb3VibGVGb3JLZXk6QCJiZXRhIl07Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC92ZXJzaW9uLmpzb24t
cmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvZXhwZWN0ZWQvdmVyc2lvbi5qc29uLXJlc3VsdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggZDRlODdkYzQ3MzkuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3ZlcnNpb24uanNv
bi1yZXN1bHQKKysrIC9kZXYvbnVsbApAQCAtMSw4ODAgKzAsMCBAQAotIyMjIEJlZ2luIEZpbGU6
IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIHZlcnNpb24uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0vLyBWZXJzaW9uRG9tYWluCi1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWlu
KCJWZXJzaW9uRG9tYWluIiwgbnVsbCk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyVmVyc2lv
bigiVmVyc2lvbkRvbWFpbiIsIDQyKTsKLUluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4o
IlZlcnNpb25Eb21haW4iLCBudWxsKTsKLSMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENv
bW1hbmRzLmpzCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0K
LSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQotI2luY2x1ZGUg
IlRlc3RQcm90b2NvbFR5cGVzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JG
cm9udGVuZFJvdXRlci5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgQWx0ZXJu
YXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZvaWQgc2V0QmFja2VuZERpc3Bh
dGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5k
RGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KLSAgICBCYWNrZW5kRGlzcGF0Y2hl
ciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVy
LmdldCgpOyB9Ci1wcml2YXRlOgotICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNr
ZW5kRGlzcGF0Y2hlcjsKLX07Ci0KLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0j
ZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jIyMgRW5k
IEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gdmVyc2lvbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgot
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Igewot
Ci10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gdmVyc2lvbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0QmFja2VuZERp
c3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVu
ZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL05l
dmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jaWYgRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jaW5jbHVkZSAiVGVzdEFsdGVy
bmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEJh
Y2tlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3Bh
dGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNl
Ci0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05W
YWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIElu
c3BlY3RvciB7Ci0KLWNsYXNzIEZyb250ZW5kUm91dGVyOwotCi19IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gdmVyc2lvbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJv
bnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFj
ZSBJbnNwZWN0b3IgewotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxl
OiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbE9iamVjdHMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHZlcnNpb24u
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21h
IG9uY2UKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMu
aD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsK
LQotCi0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLS8vIFZlcnNpb25zLgotbmFtZXNwYWNlIFZl
cnNpb25Eb21haW4gewotc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBWRVJTSU9OID0gNDI7Ci19
IC8vIFZlcnNpb25Eb21haW4KLS8vIEVuZCBvZiB2ZXJzaW9ucy4KLQotCi0KLQotCi0KLQotCi19
IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xPYmplY3RzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHZlcnNp
b24uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotCi0jaW5j
bHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1u
YW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLX0gLy8g
bmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHZlcnNpb24uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERp
c3BhdGNoZXJzLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi0KLQotbmFtZXNwYWNl
IEluc3BlY3RvciB7Ci0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHZlcnNpb24uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tl
bmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNp
bmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbmNsdWRlIDx3dGYvSlNP
TlZhbHVlcy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1t
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90
b2NvbC5oPgotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRl
cmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0Ci1AZW5kCi0KLQotIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSB2ZXJzaW9uLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgotCi0jaW1wb3J0
ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERp
c3BhdGNoZXJzLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFi
bGVBZ2VudC5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JD
b250cm9sbGVyLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVycy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW1w
bGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgotewotICAgIEF1Z21lbnRhYmxl
SW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlp
bml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJv
bGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAg
ICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9
IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwotewot
ICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbi5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZl
bnREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHZlcnNp
b24uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1w
b3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVz
cGFjZSBJbnNwZWN0b3I7Ci0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3Bh
dGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHZlcnNpb24uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4K
LQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgotCi0KLQot
Ci10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xQbGF0Zm9ybSkgewotICAg
IFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJp
YywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9y
bU1hY09TLAotfTsKLQotCi0KLQotCi0KLQotCi0KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JX
SVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgotCi0jIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lvbi5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5o
IgotI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKLSNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8
d3RmL0pTT05WYWx1ZXMuaD4KLQotCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRl
cm5hbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHZlcnNpb24uanNvbgotLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wu
aCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4K
LQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlw
ZT4KLU9wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpOwotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29s
UGxhdGZvcm0gdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJv
dG9jb2xQbGF0Zm9ybUFsbDoKLSAgICAgICAgcmV0dXJuICJhbGwiX3M7Ci0gICAgY2FzZSBUZXN0
UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM6Ci0gICAgICAgIHJldHVybiAiZ2VuZXJpYyJfczsKLSAg
ICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOgotICAgICAgICByZXR1cm4gImlvcyJfczsK
LSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M6Ci0gICAgICAgIHJldHVybiAibWFj
b3MiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3Rv
Y29sUGxhdGZvcm0+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewot
ICAgIGlmICh2YWx1ZSA9PSAiYWxsIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRm
b3JtQWxsOwotICAgIGlmICh2YWx1ZSA9PSAiZ2VuZXJpYyIpCi0gICAgICAgIHJldHVybiBUZXN0
UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM7Ci0gICAgaWYgKHZhbHVlID09ICJpb3MiKQotICAgICAg
ICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1JT1M7Ci0gICAgaWYgKHZhbHVlID09ICJtYWNv
cyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOwotICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSB2ZXJzaW9uLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0KLSNpbXBv
cnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgot
I2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLQot
dXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0KLQotCi0KLSMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xUeXBlcy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHZlcnNpb24uanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJU
ZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2
YXRlLmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1
ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0jIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlwZS1t
YXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tY29tbWFuZC10YXJnZXRU
eXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBkNmRmOWU0YmQ5Yy4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1jb21tYW5k
LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKysrIC9kZXYv
bnVsbApAQCAtMSw5ICswLDAgQEAKLVsKLXsKLSAgICAiZG9tYWluIjogIkRvbWFpbiIsCi0gICAg
ImRlYnVnZ2FibGVUeXBlcyI6IFsiamF2YXNjcmlwdCJdLAotICAgICJ0YXJnZXRUeXBlcyI6IFsi
d29ya2VyIl0sCi0gICAgImNvbW1hbmRzIjogW3sibmFtZSI6ICJDb21tYW5kIn1dLAotICAgICJl
dmVudHMiOiBbeyJuYW1lIjogIkV2ZW50In1dCi19Ci1dCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWNvbW1h
bmQtdGFyZ2V0VHlwZXMtdHlwZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1jb21tYW5kLXRhcmdldFR5cGVzLXR5cGUu
anNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjQwNTlmODRiY2YuLjAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL2ZhaWwtb24tY29tbWFuZC10YXJnZXRUeXBlcy10eXBlLmpzb24KKysrIC9kZXYvbnVs
bApAQCAtMSw5ICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIkRvbWFpbiIsCi0gICAgImNvbW1h
bmRzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJQYWdlT25seSIsCi0gICAg
ICAgICAgICAidGFyZ2V0VHlwZXMiOiAicGFnZWUiCi0gICAgICAgIH0KLSAgICBdCi19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2Vu
ZXJpYy9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlwZXMtdmFsdWUuanNvbiBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tY29tbWFu
ZC10YXJnZXRUeXBlcy12YWx1ZS5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1
MDIwNDQ3MmVjOC4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1jb21tYW5kLXRhcmdldFR5cGVzLXZh
bHVlLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjog
IkRvbWFpbiIsCi0gICAgImNvbW1hbmRzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAibmFt
ZSI6ICJQYWdlT25seSIsCi0gICAgICAgICAgICAidGFyZ2V0VHlwZXMiOiBbInBhZ2VlIl0KLSAg
ICAgICAgfQotICAgIF0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tY29tbWFuZC13aXRoLWludmFsaWQt
cGxhdGZvcm0uanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9nZW5lcmljL2ZhaWwtb24tY29tbWFuZC13aXRoLWludmFsaWQtcGxhdGZvcm0uanNvbgpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTE4MGNhZTliZmYuLjAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2ZhaWwtb24tY29tbWFuZC13aXRoLWludmFsaWQtcGxhdGZvcm0uanNvbgorKysgL2Rldi9udWxs
CkBAIC0xLDE2ICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIk92ZXJsYXkiLAotICAgICJjb21t
YW5kcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAicHJvY2Vzc1BvaW50cyIs
Ci0gICAgICAgICAgICAicGxhdGZvcm0iOiAiaW52YWxpZCIsCi0gICAgICAgICAgICAicGFyYW1l
dGVycyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBvaW50MSIsICJ0eXBlIjogIm51
bWJlciIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBvaW50MiIsICJ0eXBlIjogIm51
bWJlciIgfQotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJyZXR1cm5zIjogWwotICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAicmVzdWx0IiwgInR5cGUiOiAic3RyaW5nIiB9Ci0gICAgICAg
ICAgICBdCi0gICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWRvbWFpbi1kZWJ1
Z2dhYmxlVHlwZXMtdHlwZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kb21haW4tZGVidWdnYWJsZVR5cGVzLXR5cGUu
anNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTc0OGY0MjM0NzMuLjAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL2ZhaWwtb24tZG9tYWluLWRlYnVnZ2FibGVUeXBlcy10eXBlLmpzb24KKysrIC9kZXYv
bnVsbApAQCAtMSw5ICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIldlYk9ubHkiLAotICAgICJk
ZWJ1Z2dhYmxlVHlwZXMiOiAid2ViYiIsCi0gICAgImNvbW1hbmRzIjogWwotICAgICAgICB7Ci0g
ICAgICAgICAgICAibmFtZSI6ICJlbmFibGUiCi0gICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJp
Yy9mYWlsLW9uLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMtdmFsdWUuanNvbiBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZG9tYWlu
LWRlYnVnZ2FibGVUeXBlcy12YWx1ZS5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBiMjUyZGRiZDgzZC4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kb21haW4tZGVidWdnYWJsZVR5
cGVzLXZhbHVlLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLXsKLSAgICAiZG9t
YWluIjogIldlYk9ubHkiLAotICAgICJkZWJ1Z2dhYmxlVHlwZXMiOiBbIndlYmIiXSwKLSAgICAi
Y29tbWFuZHMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImVuYWJsZSIKLSAg
ICAgICAgfQotICAgIF0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZG9tYWluLXRhcmdldFR5cGUtbWF0
Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWRvbWFpbi10YXJnZXRUeXBl
LW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA3YWEwMjgwNDY1Ny4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kb21haW4tdGFy
Z2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgorKysgL2Rldi9udWxs
CkBAIC0xLDggKzAsMCBAQAotWwotewotICAgICJkb21haW4iOiAiRG9tYWluIiwKLSAgICAiZGVi
dWdnYWJsZVR5cGVzIjogWyJqYXZhc2NyaXB0Il0sCi0gICAgImNvbW1hbmRzIjogW3sibmFtZSI6
ICJDb21tYW5kIiwgInRhcmdldFR5cGVzIjogWyJ3b3JrZXIiXX1dLAotICAgICJldmVudHMiOiBb
eyJuYW1lIjogIkV2ZW50In1dCi19Ci1dCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWRvbWFpbi10YXJnZXRU
eXBlcy10eXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWRvbWFpbi10YXJnZXRUeXBlcy10eXBlLmpzb24KZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4MjIyNjc0MTQ2Li4wMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWls
LW9uLWRvbWFpbi10YXJnZXRUeXBlcy10eXBlLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw5ICsw
LDAgQEAKLXsKLSAgICAiZG9tYWluIjogIlBhZ2VPbmx5IiwKLSAgICAidGFyZ2V0VHlwZXMiOiAi
cGFnZWUiLAotICAgICJjb21tYW5kcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUi
OiAiZW5hYmxlIgotICAgICAgICB9Ci0gICAgXQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kb21haW4t
dGFyZ2V0VHlwZXMtdmFsdWUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZG9tYWluLXRhcmdldFR5cGVzLXZhbHVlLmpz
b24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3YjEwZDdmMTU0Li4wMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2Vu
ZXJpYy9mYWlsLW9uLWRvbWFpbi10YXJnZXRUeXBlcy12YWx1ZS5qc29uCisrKyAvZGV2L251bGwK
QEAgLTEsOSArMCwwIEBACi17Ci0gICAgImRvbWFpbiI6ICJQYWdlT25seSIsCi0gICAgInRhcmdl
dFR5cGVzIjogWyJwYWdlZSJdLAotICAgICJjb21tYW5kcyI6IFsKLSAgICAgICAgewotICAgICAg
ICAgICAgIm5hbWUiOiAiZW5hYmxlIgotICAgICAgICB9Ci0gICAgXQotfQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFp
bC1vbi1kdXBsaWNhdGUtY29tbWFuZC1jYWxsLXBhcmFtZXRlci1uYW1lcy5qc29uIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1k
dXBsaWNhdGUtY29tbWFuZC1jYWxsLXBhcmFtZXRlci1uYW1lcy5qc29uCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBiYWI3NmNhNjI3OS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kdXBs
aWNhdGUtY29tbWFuZC1jYWxsLXBhcmFtZXRlci1uYW1lcy5qc29uCisrKyAvZGV2L251bGwKQEAg
LTEsMTYgKzAsMCBAQAotewotICAgICJkb21haW4iOiAiT3ZlcmxheSIsCi0gICAgImNvbW1hbmRz
IjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJwcm9jZXNzUG9pbnRzIiwKLSAg
ICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicG9p
bnQiLCAidHlwZSI6ICJudW1iZXIiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwb2lu
dCIsICJ0eXBlIjogIm51bWJlciIgfQotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJyZXR1
cm5zIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicmVzdWx0MSIsICJ0eXBlIjogInN0
cmluZyIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInJlc3VsdDIiLCAidHlwZSI6ICJz
dHJpbmciIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfQotICAgIF0KLX0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2Zh
aWwtb24tZHVwbGljYXRlLWNvbW1hbmQtcmV0dXJuLXBhcmFtZXRlci1uYW1lcy5qc29uIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1v
bi1kdXBsaWNhdGUtY29tbWFuZC1yZXR1cm4tcGFyYW1ldGVyLW5hbWVzLmpzb24KZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4YmIxNWMwNGI2Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9u
LWR1cGxpY2F0ZS1jb21tYW5kLXJldHVybi1wYXJhbWV0ZXItbmFtZXMuanNvbgorKysgL2Rldi9u
dWxsCkBAIC0xLDE2ICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIk92ZXJsYXkiLAotICAgICJj
b21tYW5kcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAicHJvY2Vzc1BvaW50
cyIsCi0gICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1l
IjogInBvaW50MSIsICJ0eXBlIjogIm51bWJlciIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1l
IjogInBvaW50MiIsICJ0eXBlIjogIm51bWJlciIgfQotICAgICAgICAgICAgXSwKLSAgICAgICAg
ICAgICJyZXR1cm5zIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicmVzdWx0IiwgInR5
cGUiOiAic3RyaW5nIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicmVzdWx0IiwgInR5
cGUiOiAic3RyaW5nIiB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0KLSAgICBdCi19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2Vu
ZXJpYy9mYWlsLW9uLWR1cGxpY2F0ZS1ldmVudC1wYXJhbWV0ZXItbmFtZXMuanNvbiBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24t
ZHVwbGljYXRlLWV2ZW50LXBhcmFtZXRlci1uYW1lcy5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBkM2QzYjNjYzY0Mi4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kdXBsaWNhdGUt
ZXZlbnQtcGFyYW1ldGVyLW5hbWVzLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBA
Ci17Ci0gICAgImRvbWFpbiI6ICJPdmVybGF5IiwKLSAgICAiZXZlbnRzIjogWwotICAgICAgICB7
Ci0gICAgICAgICAgICAibmFtZSI6ICJwcm9jZXNzZWRQb2ludHMiLAotICAgICAgICAgICAgInBh
cmFtZXRlcnMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwb2ludCIsICJ0eXBlIjog
Im51bWJlciIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBvaW50IiwgInR5cGUiOiAi
bnVtYmVyIiB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9m
YWlsLW9uLWR1cGxpY2F0ZS10eXBlLWRlY2xhcmF0aW9ucy5qc29uIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kdXBsaWNhdGUt
dHlwZS1kZWNsYXJhdGlvbnMuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzAy
ZmM2YTMyNzAuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZHVwbGljYXRlLXR5cGUtZGVjbGFyYXRp
b25zLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi17Ci0gICAgImRvbWFpbiI6
ICJSdW50aW1lIiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6
ICJSZW1vdGVPYmplY3RJZCIsCi0gICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAotICAgICAg
ICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4iCi0gICAgICAg
IH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJSZW1vdGVPYmplY3RJZCIsCi0gICAg
ICAgICAgICAidHlwZSI6ICJzdHJpbmciLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVu
aXF1ZSBvYmplY3QgaWRlbnRpZmllci4iCi0gICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9m
YWlsLW9uLWR1cGxpY2F0ZS10eXBlLW1lbWJlci1uYW1lcy5qc29uIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kdXBsaWNhdGUt
dHlwZS1tZW1iZXItbmFtZXMuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWVi
YWNlZThiMjMuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZHVwbGljYXRlLXR5cGUtbWVtYmVyLW5h
bWVzLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi1bCi17Ci0gICAgImRvbWFp
biI6ICJPdmVybGF5VHlwZXMiLAotICAgICJ0eXBlcyI6IFsKLSAgICAgICAgewotICAgICAgICAg
ICAgImlkIjogIlBvaW50IiwKLSAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCi0gICAgICAg
ICAgICAicHJvcGVydGllcyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogIngiLCAidHlw
ZSI6ICJpbnRlZ2VyIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAieCIsICJ0eXBlIjog
ImludGVnZXIiIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfQotICAgIF0KLX0KLV0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmljL2ZhaWwtb24tZW51bS13aXRoLW5vLXZhbHVlcy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1lbnVtLXdpdGgtbm8t
dmFsdWVzLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzMmE3YzMyNDlhLi4w
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWVudW0td2l0aC1uby12YWx1ZXMuanNvbgorKysgL2Rldi9u
dWxsCkBAIC0xLDEwICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKLSAgICAi
dHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJQcmltYXJ5Q29sb3JzIiwK
LSAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCi0gICAgICAgICAgICAiZW51bSI6IFtdCi0g
ICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGUtbWF0
Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGUt
bWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDkxMzJjZTA4ODI4Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWV2ZW50LXRhcmdl
dFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKysrIC9kZXYvbnVsbApA
QCAtMSw4ICswLDAgQEAKLVsKLXsKLSAgICAiZG9tYWluIjogIkRvbWFpbiIsCi0gICAgImRlYnVn
Z2FibGVUeXBlcyI6IFsiamF2YXNjcmlwdCJdLAotICAgICJjb21tYW5kcyI6IFt7Im5hbWUiOiAi
Q29tbWFuZCJ9XSwKLSAgICAiZXZlbnRzIjogW3sibmFtZSI6ICJFdmVudCIsICJ0YXJnZXRUeXBl
cyI6IFsid29ya2VyIl19XQotfQotXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1ldmVudC10YXJnZXRUeXBl
cy10eXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZ2VuZXJpYy9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGVzLXR5cGUuanNvbgpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggZTU0ZWQxZjVjNmIuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24t
ZXZlbnQtdGFyZ2V0VHlwZXMtdHlwZS5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBA
Ci17Ci0gICAgImRvbWFpbiI6ICJEb21haW4iLAotICAgICJldmVudHMiOiBbCi0gICAgICAgIHsK
LSAgICAgICAgICAgICJuYW1lIjogIlBhZ2VPbmx5IiwKLSAgICAgICAgICAgICJ0YXJnZXRUeXBl
cyI6ICJwYWdlZSIKLSAgICAgICAgfQotICAgIF0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZXZlbnQt
dGFyZ2V0VHlwZXMtdmFsdWUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlwZXMtdmFsdWUuanNv
bgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTg4NGJmZDdhNmIuLjAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmljL2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlwZXMtdmFsdWUuanNvbgorKysgL2Rldi9udWxsCkBA
IC0xLDkgKzAsMCBAQAotewotICAgICJkb21haW4iOiAiRG9tYWluIiwKLSAgICAiZXZlbnRzIjog
WwotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJQYWdlT25seSIsCi0gICAgICAgICAg
ICAidGFyZ2V0VHlwZXMiOiBbInBhZ2VlIl0KLSAgICAgICAgfQotICAgIF0KLX0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2ZhaWwtb24tbnVtYmVyLXR5cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24gYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9u
LW51bWJlci10eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29uCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA3MzA4ZGI5OTJkNi4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1udW1i
ZXItdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbgorKysgL2Rldi9udWxsCkBAIC0x
LDE4ICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKLSAgICAidHlwZXMiOiBb
Ci0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJEYXRhYmFzZUlkIiwKLSAgICAgICAgICAg
ICJ0eXBlIjogInN0cmluZyIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIGlk
ZW50aWZpZXIgb2YgRGF0YWJhc2Ugb2JqZWN0LiIKLSAgICAgICAgfQotICAgIF0sCi0gICAgImV2
ZW50cyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiZGlkRXhlY3V0ZU9wdGlv
bmFsUGFyYW1ldGVycyIsCi0gICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKLSAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFs
IjogMCB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWls
LW9uLW51bWJlci10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29uIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1udW1iZXIt
dHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggYWZlYTU1NWVjNGYuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tbnVtYmVyLXR5cGVkLW9w
dGlvbmFsLXR5cGUtbWVtYmVyLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi1b
Ci17Ci0gICAgImRvbWFpbiI6ICJEYXRhYmFzZSIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7
Ci0gICAgICAgICAgICAiaWQiOiAiRXJyb3IiLAotICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0
IiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJEYXRhYmFzZSBlcnJvci4iLAotICAgICAg
ICAgICAgInByb3BlcnRpZXMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJtZXNzYWdl
IiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIG1lc3NhZ2UuIiB9LAot
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29kZSIsICJ0eXBlIjogImludGVnZXIiLCAiZGVz
Y3JpcHRpb24iOiAiRXJyb3IgY29kZS4iLCAib3B0aW9uYWwiOiAwIH0KLSAgICAgICAgICAgIF0K
LSAgICAgICAgfQotICAgIF0KLX0KLV0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9w
dGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLXN0cmluZy10eXBlZC1vcHRpb25hbC1w
YXJhbWV0ZXItZmxhZy5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MDEyYzc5
YjZiMy4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtcGFyYW1l
dGVyLWZsYWcuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLXsKLSAgICAiZG9t
YWluIjogIkRhdGFiYXNlIiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAg
ICJpZCI6ICJEYXRhYmFzZUlkIiwKLSAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCi0gICAg
ICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIGlkZW50aWZpZXIgb2YgRGF0YWJhc2Ugb2Jq
ZWN0LiIKLSAgICAgICAgfQotICAgIF0sCi0gICAgImV2ZW50cyI6IFsKLSAgICAgICAgewotICAg
ICAgICAgICAgIm5hbWUiOiAiZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyIsCi0gICAgICAg
ICAgICAicGFyYW1ldGVycyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5h
bWVzIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogInRydWUiIH0KLSAgICAgICAgICAg
IF0KLSAgICAgICAgfQotICAgIF0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9w
dGlvbmFsLXR5cGUtbWVtYmVyLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLXN0cmluZy10eXBlZC1vcHRpb25hbC10eXBl
LW1lbWJlci5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYTNlZjI4YThmOC4u
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIu
anNvbgorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLVsKLXsKLSAgICAiZG9tYWluIjog
IkRhdGFiYXNlIiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6
ICJFcnJvciIsCi0gICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAotICAgICAgICAgICAgImRl
c2NyaXB0aW9uIjogIkRhdGFiYXNlIGVycm9yLiIsCi0gICAgICAgICAgICAicHJvcGVydGllcyI6
IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm1lc3NhZ2UiLCAidHlwZSI6ICJzdHJpbmci
LCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgbWVzc2FnZS4iIH0sCi0gICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJjb2RlIiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBj
b2RlLiIsICJvcHRpb25hbCI6ICJmYWxzZSIgfQotICAgICAgICAgICAgXQotICAgICAgICB9Ci0g
ICAgXQotfQotXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi10eXBlLWRlY2xhcmF0aW9uLXVzaW5nLXR5cGUt
cmVmZXJlbmNlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy9mYWlsLW9uLXR5cGUtZGVjbGFyYXRpb24tdXNpbmctdHlwZS1yZWZlcmVu
Y2UuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTliNzU5MGNjYzYuLjAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9nZW5lcmljL2ZhaWwtb24tdHlwZS1kZWNsYXJhdGlvbi11c2luZy10eXBlLXJlZmVyZW5jZS5q
c29uCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotWwotewotICAgICJkb21haW4iOiAi
UnVudGltZSIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAi
UmVtb3RlT2JqZWN0SWQiLAotICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKLSAgICAgICAg
ICAgICIkcmVmIjogIlNvbWVUeXBlIiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlx
dWUgb2JqZWN0IGlkZW50aWZpZXIuIgotICAgICAgICB9Ci0gICAgXQotfQotXQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMv
ZmFpbC1vbi10eXBlLXJlZmVyZW5jZS1hcy1wcmltaXRpdmUtdHlwZS5qc29uIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi10eXBl
LXJlZmVyZW5jZS1hcy1wcmltaXRpdmUtdHlwZS5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA4YzgzYmJmY2U0MS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi10eXBlLXJlZmVyZW5j
ZS1hcy1wcmltaXRpdmUtdHlwZS5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAot
ewotICAgICJkb21haW4iOiAiRGF0YWJhc2UiLAotICAgICJ0eXBlcyI6IFsKLSAgICAgICAgewot
ICAgICAgICAgICAgImlkIjogIkRhdGFiYXNlSWQiLAotICAgICAgICAgICAgInR5cGUiOiAic3Ry
aW5nIiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgaWRlbnRpZmllciBvZiBE
YXRhYmFzZSBvYmplY3QuIgotICAgICAgICB9Ci0gICAgXSwKLSAgICAiZXZlbnRzIjogWwotICAg
ICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJkaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJz
IiwKLSAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJEYXRhYmFzZUlkIiB9Ci0gICAgICAgICAgICBdCi0g
ICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLXR5cGUtd2l0aC1pbnZhbGlkLXBs
YXRmb3JtLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZ2VuZXJpYy9mYWlsLW9uLXR5cGUtd2l0aC1pbnZhbGlkLXBsYXRmb3JtLmpzb24KZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5ZmQyZTk5NTYxLi4wMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWls
LW9uLXR5cGUtd2l0aC1pbnZhbGlkLXBsYXRmb3JtLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwx
MSArMCwwIEBACi17Ci0gICAgImRvbWFpbiI6ICJSdW50aW1lIiwKLSAgICAidHlwZXMiOiBbCi0g
ICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJSZW1vdGVPYmplY3RJZCIsCi0gICAgICAgICAg
ICAidHlwZSI6ICJzdHJpbmciLAotICAgICAgICAgICAgInBsYXRmb3JtIjogImludmFsaWQiLAot
ICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4iCi0g
ICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLXR5cGUtd2l0aC1sb3dlcmNhc2Ut
bmFtZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvZmFpbC1vbi10eXBlLXdpdGgtbG93ZXJjYXNlLW5hbWUuanNvbgpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNTMxOTAxZTRhOWEuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24t
dHlwZS13aXRoLWxvd2VyY2FzZS1uYW1lLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCww
IEBACi17Ci0gICAgImRvbWFpbiI6ICJEYXRhYmFzZSIsCi0gICAgInR5cGVzIjogWwotICAgICAg
ICB7Ci0gICAgICAgICAgICAiaWQiOiAiZGF0YWJhc2VJZCIsCi0gICAgICAgICAgICAidHlwZSI6
ICJpbnRlZ2VyIiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgaWRlbnRpZmll
ciBvZiBEYXRhYmFzZSBvYmplY3QuIgotICAgICAgICB9Ci0gICAgXQotfQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFp
bC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtZGVjbGFyYXRpb24uanNvbiBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwt
b24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLWRlY2xhcmF0aW9uLmpzb24KZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2ODg3YTI3NDExLi4wMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWls
LW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1kZWNsYXJhdGlvbi5qc29uCisrKyAv
ZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotWwotewotICAgICJkb21haW4iOiAiUnVudGltZSIs
Ci0gICAgInR5cGVzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiUmVtb3RlT2Jq
ZWN0SWQiLAotICAgICAgICAgICAgInR5cGUiOiAiZHJhZ29uIiwKLSAgICAgICAgICAgICJkZXNj
cmlwdGlvbiI6ICJVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIuIgotICAgICAgICB9Ci0gICAgXQot
fQotXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtbWVt
YmVyLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJpYy9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1tZW1iZXIuanNv
bgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjgxN2RiNTA0NGQuLjAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmljL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLW1lbWJlci5qc29uCisr
KyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotWwotewotICAgICJkb21haW4iOiAiRmFudGFz
eSIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiRHJhZ29u
RWdnIiwKLSAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCi0gICAgICAgICAgICAiZGVzY3Jp
cHRpb24iOiAiQSBkcmFnb24gZWdnLiIsCi0gICAgICAgICAgICAicHJvcGVydGllcyI6IFsKLSAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbG9yIiwgIiRyZWYiOiAiQ29sb3IiIH0KLSAgICAg
ICAgICAgIF0KLSAgICAgICAgfQotICAgIF0KLX0KLV0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2dlbmVyYXRlLWRvbWFp
bnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUt
Z3VhcmRzLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3Y2Y4ZTU4MmY2Li4w
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy9nZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgor
KysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLVsKLXsKLSAgICAiZG9tYWluIjogIk5ldHdv
cmsxIiwKLSAgICAiZmVhdHVyZUd1YXJkIjogIlBMQVRGT1JNKFdFQl9DT01NQU5EUykiLAotICAg
ICJjb21tYW5kcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAibG9hZFJlc291
cmNlIiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBhIHJlc291cmNlIGluIHRo
ZSBjb250ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGluc3BlY3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mg
b3JpZ2luIGNoZWNrcy4iCi0gICAgICAgIH0KLSAgICBdCi19LAotewotICAgICJkb21haW4iOiAi
TmV0d29yazIiLAotICAgICJmZWF0dXJlR3VhcmQiOiAiUExBVEZPUk0oV0VCX1RZUEVTKSIsCi0g
ICAgInR5cGVzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiTmV0d29ya0Vycm9y
IiwKLSAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCi0gICAgICAgICAgICAicHJvcGVydGll
cyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm1lc3NhZ2UiLCAidHlwZSI6ICJzdHJp
bmciLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgbWVzc2FnZS4iIH0sCi0gICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJjb2RlIiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJFcnJv
ciBjb2RlLiIgfQotICAgICAgICAgICAgXQotICAgICAgICB9Ci0gICAgXQotfSwKLXsKLSAgICAi
ZG9tYWluIjogIk5ldHdvcmszIiwKLSAgICAiZmVhdHVyZUd1YXJkIjogIlBMQVRGT1JNKFdFQl9F
VkVOVFMpIiwKLSAgICAiZXZlbnRzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6
ICJyZXNvdXJjZUxvYWRlZCIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQSByZXNvdXJj
ZSB3YXMgbG9hZGVkLiIKLSAgICAgICAgfQotICAgIF0KLX0KLV0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL3NhbWUtdHlw
ZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5q
c29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYmY0ZGZmNWNjYy4uMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgorKysgL2Rldi9udWxsCkBA
IC0xLDIyICswLDAgQEAKLVsKLXsKLSAgICAiZG9tYWluIjogIlJ1bnRpbWUiLAotICAgICJ0eXBl
cyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIlJlbW90ZU9iamVjdElkIiwKLSAg
ICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAi
VW5pcXVlIG9iamVjdCBpZGVudGlmaWVyLiIKLSAgICAgICAgfQotICAgIF0KLX0sCi17Ci0gICAg
ImRvbWFpbiI6ICJSdW50aW1lMiIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7Ci0gICAgICAg
ICAgICAiaWQiOiAiUmVtb3RlT2JqZWN0SWQiLAotICAgICAgICAgICAgInR5cGUiOiAic3RyaW5n
IiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIu
IgotICAgICAgICB9Ci0gICAgXQotfQotXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvc2hhZG93ZWQtb3B0aW9uYWwtdHlw
ZS1zZXR0ZXJzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy9zaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjBhMGMxNTUyNzUuLjAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL3NoYWRv
d2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAs
MCBAQAotewotICAgICJkb21haW4iOiAiUnVudGltZSIsCi0gICAgInR5cGVzIjogWwotICAgICAg
ICB7Ci0gICAgICAgICAgICAiaWQiOiAiS2V5UGF0aCIsCi0gICAgICAgICAgICAidHlwZSI6ICJv
YmplY3QiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIktleSBwYXRoLiIsCi0gICAgICAg
ICAgICAicHJvcGVydGllcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgICJuYW1lIjogInR5cGUiLAotICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmci
LAotICAgICAgICAgICAgICAgICAgICAiZW51bSI6IFsibnVsbCIsICJzdHJpbmciLCAiYXJyYXki
XSwKLSAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIktleSBwYXRoIHR5cGUuIgot
ICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICAibmFtZSI6ICJzdHJpbmciLAotICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmci
LAotICAgICAgICAgICAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgICAgICAgICAg
ICAgICAiZGVzY3JpcHRpb24iOiAiU3RyaW5nIHZhbHVlLiIKLSAgICAgICAgICAgICAgICB9LAot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiYXJyYXkiLAot
ICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJhcnJheSIsCi0gICAgICAgICAgICAgICAgICAg
ICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAgICAgICAgICAgICAgICJpdGVtcyI6IHsgInR5cGUi
OiAic3RyaW5nIiB9LAotICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQXJyYXkg
dmFsdWUuIgotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfQotICAg
IF0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL3Nob3VsZC1zdHJpcC1jb21tZW50cy5qc29uIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvc2hvdWxkLXN0cmlwLWNv
bW1lbnRzLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjZTFkY2ZjNjFjLi4w
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy9zaG91bGQtc3RyaXAtY29tbWVudHMuanNvbgorKysgL2Rldi9udWxsCkBA
IC0xLDUgKzAsMCBAQAotewotICAgIC8qIGFib3ZlICovCi0gICAgLyogYmVmb3JlICovICJkb21h
aW4iIC8qIGluICovIDogLyogaW4gKi8gIkNvbW1lbnQiIC8qIGFmdGVyICovCi0gICAgLyogYmVs
b3cgKi8KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlw
ZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiYzlkNTM5NDc4Li4wMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy90eXBl
LWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgorKysgL2Rldi9udWxsCkBA
IC0xLDEwICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIlJ1bnRpbWUiLAotICAgICJ0eXBlcyI6
IFsKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIlJlbW90ZU9iamVjdElkIiwKLSAgICAg
ICAgICAgICJ0eXBlIjogImludGVnZXIiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVu
aXF1ZSBvYmplY3QgaWRlbnRpZmllci4iCi0gICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy90
eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL3R5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlw
ZS5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZmIwOGJkOTQwYi4uMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KKysrIC9kZXYvbnVsbApA
QCAtMSw1MCArMCwwIEBACi1bCi17Ci0gICAgImRvbWFpbiI6ICJEZWJ1Z2dlciIsCi0gICAgInR5
cGVzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiQnJlYWtwb2ludElkIiwKLSAg
ICAgICAgICAgICJ0eXBlIjogImludGVnZXIiCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAg
ICAgICAgICJpZCI6ICJSZWFzb24iLAotICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKLSAg
ICAgICAgICAgICJlbnVtIjogWyJEaWVkIiwgIkZhaW50ZWQiLCAiSHVuZ3J5Il0KLSAgICAgICAg
fQotICAgIF0KLX0sCi17Ci0gICAgImRvbWFpbiI6ICJSdW50aW1lIiwKLSAgICAidHlwZXMiOiBb
Ci0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJPYmplY3RJZCIsCi0gICAgICAgICAgICAi
dHlwZSI6ICJpbnRlZ2VyIgotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQi
OiAiTHVja3lOdW1iZXJzIiwKLSAgICAgICAgICAgICJ0eXBlIjogImFycmF5IiwKLSAgICAgICAg
ICAgICJpdGVtcyI6IHsgInR5cGUiOiAiaW50ZWdlciIgfQotICAgICAgICB9LAotICAgICAgICB7
Ci0gICAgICAgICAgICAiaWQiOiAiQmFieU5hbWVzIiwKLSAgICAgICAgICAgICJ0eXBlIjogImFy
cmF5IiwKLSAgICAgICAgICAgICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9Ci0gICAgICAg
IH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJOZXdPYmplY3RzIiwKLSAgICAgICAg
ICAgICJ0eXBlIjogImFycmF5IiwKLSAgICAgICAgICAgICJpdGVtcyI6IHsgIiRyZWYiOiAiT2Jq
ZWN0SWQiIH0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIk9sZE9i
amVjdHMiLAotICAgICAgICAgICAgInR5cGUiOiAiYXJyYXkiLAotICAgICAgICAgICAgIml0ZW1z
IjogeyAiJHJlZiI6ICJEZWJ1Z2dlci5CcmVha3BvaW50SWQiIH0KLSAgICAgICAgfSwKLSAgICAg
ICAgewotICAgICAgICAgICAgImlkIjogIlN0b3BSZWFzb25zIiwKLSAgICAgICAgICAgICJ0eXBl
IjogImFycmF5IiwKLSAgICAgICAgICAgICJpdGVtcyI6IHsgIiRyZWYiOiAiRGVidWdnZXIuUmVh
c29uIiB9Ci0gICAgICAgIH0KLSAgICBdCi19Ci1dCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy90eXBlLWRlY2xhcmF0aW9u
LWVudW0tdHlwZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggOWYwYWVlOWM5MWIuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL3R5cGUtZGVj
bGFyYXRpb24tZW51bS10eXBlLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi17
Ci0gICAgImRvbWFpbiI6ICJSdW50aW1lIiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAg
ICAgICAgICAgICJpZCI6ICJGYXJtQW5pbWFscyIsCi0gICAgICAgICAgICAidHlwZSI6ICJzdHJp
bmciLAotICAgICAgICAgICAgImVudW0iOiBbIlBpZ3MiLCAiQ293cyIsICJDYXRzIiwgIkhlbnMi
XQotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiVHdvTGVnZ2VkQW5p
bWFscyIsCi0gICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAotICAgICAgICAgICAgImVudW0i
OiBbIkR1Y2tzIiwgIkhlbnMiLCAiQ3Jvd3MiLCAiRmxhbWluZ29zIl0KLSAgICAgICAgfQotICAg
IF0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbiBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL3R5cGUtZGVj
bGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MmM0M2MzMzA5OTIuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUu
anNvbgorKysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi1bCi17Ci0gICAgImRvbWFpbiI6
ICJEYXRhYmFzZSIsCi0gICAgImRlc2NyaXB0aW9uIjogIlRlc3QgdHlwZSBidWlsZGVyIGdlbmVy
YXRpb24gb2YgdmFyaW91cyBvYmplY3QgdHlwZXMuIiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAg
IHsKLSAgICAgICAgICAgICJpZCI6ICJFcnJvciIsCi0gICAgICAgICAgICAidHlwZSI6ICJvYmpl
Y3QiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkRhdGFiYXNlIGVycm9yLiIsCi0gICAg
ICAgICAgICAicHJvcGVydGllcyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm1lc3Nh
Z2UiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgbWVzc2FnZS4iIH0s
Ci0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2RlIiwgInR5cGUiOiAiaW50ZWdlciIsICJk
ZXNjcmlwdGlvbiI6ICJFcnJvciBjb2RlLiIgfQotICAgICAgICAgICAgXQotICAgICAgICB9LAot
ICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiRXJyb3JMaXN0IiwKLSAgICAgICAgICAgICJ0
eXBlIjogImFycmF5IiwKLSAgICAgICAgICAgICJpdGVtcyI6IHsgIiRyZWYiOiAiRXJyb3IiIH0K
LSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIk1vdXNlQnV0dG9uIiwK
LSAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24i
OiAiRW51bWVyYXRlcyBkaWZmZXJlbnQgbW91c2UgYnV0dG9ucyB0aGF0IGNhbiBiZSB1c2VkLiIs
Ci0gICAgICAgICAgICAiZW51bSI6IFsKLSAgICAgICAgICAgICAgICAiTm9uZSIsCi0gICAgICAg
ICAgICAgICAgIkxlZnQiLAotICAgICAgICAgICAgICAgICJNaWRkbGUiLAotICAgICAgICAgICAg
ICAgICJSaWdodCIKLSAgICAgICAgICAgIF0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAg
ICAgICAgImlkIjogIk9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlIiwKLSAgICAgICAgICAgICJ0eXBl
IjogIm9iamVjdCIsCi0gICAgICAgICAgICAicHJvcGVydGllcyI6IFsKLSAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAib3B0aW9uYWwiOiB0
cnVlLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAotICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAiYnV0dG9ucyIsICJ0eXBlIjogImFycmF5IiwgIm9wdGlvbmFsIjogdHJ1ZSwgIml0
ZW1zIjogeyAiJHJlZiI6ICJNb3VzZUJ1dHRvbiIgfSB9LAotICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAiZGlyZWN0aW9uYWxpdHkiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsiTFRSIiwg
IlJUTCJdLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJu
b3RlcyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6
IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9i
amVjdCIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBh
eWxvYWQiLCAidHlwZSI6ICJhbnkiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJlcnJvciIsICIkcmVmIjogIkVycm9yIiwgIm9wdGlvbmFsIjogdHJ1ZSB9
LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZXJyb3JMaXN0IiwgIiRyZWYiOiAiRXJyb3JM
aXN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0sCi0gICAg
ICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJQYXJhbWV0ZXJCdW5kbGUiLAotICAgICAgICAgICAg
InR5cGUiOiAib2JqZWN0IiwKLSAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwotICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6
IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJidXR0
b25zIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICIkcmVmIjogIk1vdXNlQnV0dG9uIiB9
IH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkaXJlY3Rpb25hbGl0eSIsICJ0eXBlIjog
InN0cmluZyIsICJlbnVtIjogWyJMVFIiLCAiUlRMIl0gfSwKLSAgICAgICAgICAgICAgICB7ICJu
YW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiB9LAotICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiB9LAotICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiB9LAotICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIgfSwKLSAgICAgICAgICAgICAgICB7ICJu
YW1lIjogImVycm9yIiwgIiRyZWYiOiAiRXJyb3IiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJlcnJvckxpc3QiLCAiJHJlZiI6ICJFcnJvckxpc3QiIH0KLSAgICAgICAgICAgIF0KLSAg
ICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIk9iamVjdFdpdGhQcm9wZXJ0
eU5hbWVDb25mbGljdHMiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkNvbmZsaWN0ZWQg
bmFtZXMgbWF5IGNhdXNlIGdlbmVyYXRlZCBnZXR0ZXJzL3NldHRlcnMgdG8gY2xhc2ggd2l0aCBi
dWlsdC1pbiBJbnNwZWN0b3JPYmplY3QgbWV0aG9kcy4iLAotICAgICAgICAgICAgInR5cGUiOiAi
b2JqZWN0IiwKLSAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwotICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAiaW50ZWdlciIsICJ0eXBlIjogInN0cmluZyIgfSwKLSAgICAgICAgICAgICAgICB7
ICJuYW1lIjogImFycmF5IiwgInR5cGUiOiAic3RyaW5nIiB9LAotICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAic3RyaW5nIiwgInR5cGUiOiAic3RyaW5nIiB9LAotICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAidmFsdWUiLCAidHlwZSI6ICJzdHJpbmciIH0sCi0gICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJvYmplY3QiLCAidHlwZSI6ICJzdHJpbmciIH0KLSAgICAgICAgICAgIF0KLSAgICAg
ICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIkR1bW15T2JqZWN0IiwKLSAgICAg
ICAgICAgICJkZXNjcmlwdGlvbiI6ICJBbiBvcGVuIG9iamVjdCB0aGF0IGRvZXNuJ3QgaGF2ZSBh
bnkgcHJlZGVmaW5lZCBmaWVsZHMuIiwKLSAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIKLSAg
ICAgICAgfQotICAgIF0KLX0sCi17Ci0gICAgImRvbWFpbiI6ICJUZXN0IiwKLSAgICAiZGVzY3Jp
cHRpb24iOiAiVGVzdCB0aGUgZ2VuZXJhdGlvbiBvZiBzcGVjaWFsIGJlaGF2aW9ycyB0aGF0IG9u
bHkgYXBwbHkgdG8gc3BlY2lmaWMgY2xhc3Nlcy4iLAotICAgICJ0eXBlcyI6IFsKLSAgICAgICAg
ewotICAgICAgICAgICAgImlkIjogIlBhcmFtZXRlckJ1bmRsZSIsCi0gICAgICAgICAgICAidHlw
ZSI6ICJvYmplY3QiLAotICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCi0gICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJkaXJlY3Rpb25hbGl0eSIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjog
WyJMVFIiLCAiUlRMIl0gfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImJ1dHRvbnMiLCAi
dHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgIiRyZWYiOiAiRGF0YWJhc2UuTW91c2VCdXR0b24i
IH0gfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAi
YXJyYXkiLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAotICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciIH0sCi0gICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiIH0sCi0gICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiIH0sCi0gICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiB9LAotICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAiZXJyb3IiLCAiJHJlZiI6ICJEYXRhYmFzZS5FcnJvciIgfQotICAgICAgICAg
ICAgXQotICAgICAgICB9Ci0gICAgXQotfQotXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvdHlwZS1yZXF1aXJpbmctcnVu
dGltZS1jYXN0cy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4M2Q5NGJlODk3ZC4uMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvdHlwZS1y
ZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBA
QAotWwotewotICAgICJkb21haW4iOiAiVGVzdCIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7
Ci0gICAgICAgICAgICAiaWQiOiAiVHlwZU5lZWRpbmdDYXN0IiwKLSAgICAgICAgICAgICJ0eXBl
IjogIm9iamVjdCIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQSBkdW1teSB0eXBlIHRo
YXQgcmVxdWlyZXMgcnVudGltZSBjYXN0cywgYW5kIGZvcmNlcyBub24tcHJpbWl0aXZlIHJlZmVy
ZW5jZWQgdHlwZXMgdG8gYWxzbyBlbWl0IHJ1bnRpbWUgY2FzdCBoZWxwZXJzLiIsCi0gICAgICAg
ICAgICAicHJvcGVydGllcyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInN0cmluZyIs
ICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJTdHJpbmcgbWVtYmVyLiIgfSwKLSAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogIm51bWJlciIsICJ0eXBlIjogImludGVnZXIiLCAiZGVz
Y3JpcHRpb24iOiAiTnVtYmVyIG1lbWJlci4iIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJhbmltYWxzIiwgIiRyZWYiOiAiQ2FzdGVkQW5pbWFscyIsICJkZXNjcmlwdGlvbiI6ICJFbnVt
IG1lbWJlci4iIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJpZCIsICIkcmVmIjogIkNh
c3RlZE9iamVjdElkIiwgImRlc2NyaXB0aW9uIjogIkFsaWFzZWQgbWVtYmVyLiIgfSwKLSAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogInRyZWUiLCAiJHJlZiI6ICJSZWN1cnNpdmVPYmplY3QxIiwg
ImRlc2NyaXB0aW9uIjogIlJlY3Vyc2l2ZSBvYmplY3QgbWVtYmVyLiIgfQotICAgICAgICAgICAg
XQotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiQ2FzdGVkT2JqZWN0
SWQiLAotICAgICAgICAgICAgInR5cGUiOiAiaW50ZWdlciIKLSAgICAgICAgfSwKLSAgICAgICAg
ewotICAgICAgICAgICAgImlkIjogIlVuY2FzdGVkT2JqZWN0SWQiLAotICAgICAgICAgICAgInR5
cGUiOiAiaW50ZWdlciIKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjog
IlVuY2FzdGVkQW5pbWFscyIsCi0gICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAotICAgICAg
ICAgICAgImVudW0iOiBbIlBpZ3MiLCAiQ293cyIsICJDYXRzIiwgIkhlbnMiXQotICAgICAgICB9
LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiQ2FzdGVkQW5pbWFscyIsCi0gICAgICAg
ICAgICAidHlwZSI6ICJzdHJpbmciLAotICAgICAgICAgICAgImVudW0iOiBbIkR1Y2tzIiwgIkhl
bnMiLCAiQ3Jvd3MiLCAiRmxhbWluZ29zIl0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAg
ICAgICAgImlkIjogIlJlY3Vyc2l2ZU9iamVjdDEiLAotICAgICAgICAgICAgInR5cGUiOiAib2Jq
ZWN0IiwKLSAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwotICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAib2JqIiwgIiRyZWYiOiAiUmVjdXJzaXZlT2JqZWN0MiIsICJvcHRpb25hbCI6IHRydWUg
fQotICAgICAgICAgICAgXQotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQi
OiAiUmVjdXJzaXZlT2JqZWN0MiIsCi0gICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAotICAg
ICAgICAgICAgInByb3BlcnRpZXMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJvYmoi
LCAiJHJlZiI6ICJSZWN1cnNpdmVPYmplY3QxIiwgIm9wdGlvbmFsIjogdHJ1ZSB9Ci0gICAgICAg
ICAgICBdCi0gICAgICAgIH0KLSAgICBdCi19Ci1dCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy90eXBlLXdpdGgtb3Blbi1w
YXJhbWV0ZXJzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy90eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24KZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDk5YjAyMjBkMzEyLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy90eXBlLXdpdGgt
b3Blbi1wYXJhbWV0ZXJzLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi17Ci0g
ICAgImRvbWFpbiI6ICJUZXN0IiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAg
ICAgICJpZCI6ICJOb09wZW5QYXJhbWV0ZXJzIiwKLSAgICAgICAgICAgICJ0eXBlIjogIm9iamVj
dCIsCi0gICAgICAgICAgICAicHJvcGVydGllcyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1l
IjogIm9uZSIsICJ0eXBlIjogIm51bWJlciIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjog
InR3byIsICJ0eXBlIjogIm51bWJlciIgfQotICAgICAgICAgICAgXQotICAgICAgICB9LAotICAg
ICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiT3BlblBhcmFtZXRlcnMiLAotICAgICAgICAgICAg
InR5cGUiOiAib2JqZWN0IiwKLSAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwotICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAiYWxwaGEiLCAidHlwZSI6ICJudW1iZXIiIH0sCi0gICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJiZXRhIiwgInR5cGUiOiAibnVtYmVyIiB9Ci0gICAgICAgICAgICBd
Ci0gICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy92ZXJzaW9uLmpzb24gYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy92ZXJzaW9uLmpzb24K
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwN2E1ZDkwMTc2Li4wMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJp
Yy92ZXJzaW9uLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLXsiZG9tYWlucyI6
WwotewotICAgICJkb21haW4iOiAiVmVyc2lvbkRvbWFpbiIsCi0gICAgInZlcnNpb24iOiA0Mgot
fQotXX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9pb3MvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbiBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9pb3MvZGVmaW5pdGlvbnMtd2l0
aC1tYWMtcGxhdGZvcm0uanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODE3ZjEz
NWVlNWEuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9pb3MvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgorKysg
L2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIk5ldHdvcmsiLAot
ICAgICJ0eXBlcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIk5ldHdvcmtFcnJv
ciIsCi0gICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAotICAgICAgICAgICAgInBsYXRmb3Jt
IjogIm1hY29zIiwKLSAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwotICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAibWVzc2FnZSIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJF
cnJvciBtZXNzYWdlLiIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvZGUiLCAidHlw
ZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIGNvZGUuIiB9Ci0gICAgICAgICAg
ICBdCi0gICAgICAgIH0KLSAgICBdLAotICAgICJjb21tYW5kcyI6IFsKLSAgICAgICAgewotICAg
ICAgICAgICAgIm5hbWUiOiAibG9hZFJlc291cmNlIiwKLSAgICAgICAgICAgICJwbGF0Zm9ybSI6
ICJtYWNvcyIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9hZHMgYSByZXNvdXJjZSBp
biB0aGUgY29udGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFnZSB3aXRob3V0IGNy
b3NzIG9yaWdpbiBjaGVja3MuIgotICAgICAgICB9Ci0gICAgXSwKLSAgICAiZXZlbnRzIjogWwot
ICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJyZXNvdXJjZUxvYWRlZCIsCi0gICAgICAg
ICAgICAicGxhdGZvcm0iOiAibWFjb3MiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkEg
cmVzb3VyY2Ugd2FzIGxvYWRlZC4iCi0gICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvaW9zL2V4cGVjdGVk
L2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2lvcy9leHBlY3RlZC9kZWZpbml0aW9u
cy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uLXJlc3VsdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggZDRjMGZlM2ZlM2MuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9pb3MvZXhwZWN0ZWQvZGVmaW5pdGlvbnMtd2l0aC1t
YWMtcGxhdGZvcm0uanNvbi1yZXN1bHQKKysrIC9kZXYvbnVsbApAQCAtMSw4NzAgKzAsMCBAQAot
IyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLSMjIyBFbmQgRmlsZTog
SW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJu
YXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBl
cy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
Lmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4K
LQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVyIHsKLXB1YmxpYzoKLSAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNr
ZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZN
b3ZlKGRpc3BhdGNoZXIpOyB9Ci0gICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRj
aGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQotcHJpdmF0
ZToKLSAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Ci19
OwotCi0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotI2VuZGlmIC8vIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJu
YXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlz
cGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25z
LXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3Rz
LmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3Rv
ciB7Ci0KLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCi0KLQotfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09O
VmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCi0jaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgotI2Vu
ZGlmCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5j
bHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewotCi1jbGFzcyBGcm9udGVuZFJvdXRlcjsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0j
IyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgot
Ci0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLW5hbWVzcGFjZSBQcm90
b2NvbCB7Ci0KLQotCi0KLQotCi0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5o
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLQotI2luY2x1ZGUgPHd0
Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNl
IEluc3BlY3RvciB7Ci0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLQotCi19IC8vIG5hbWVzcGFj
ZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFj
a2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZp
bml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0K
LQotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
LQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJj
b25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0j
aW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotCi1uYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJv
dG9jb2wuaD4KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50
ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAotQGVuZAotCi0KLSMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25m
aWd1cmF0aW9uLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW1wb3J0
ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRD
b3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0KLXVzaW5nIG5hbWVz
cGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0
aW9uCi17Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsK
LX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNw
ZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsK
LSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xs
ZXIpOwotICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1cm4gc2VsZjsKLX0K
LQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi1AZW5kCi0K
LQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJv
dG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMu
aCIKLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0
b3I7Ci0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3Vu
ZGF0aW9uLmg+Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3Qu
aD4KLQotCi0KLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sUGxhdGZv
cm0pIHsKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbCwKLSAgICBUZXN0UHJvdG9jb2xQbGF0
Zm9ybUdlbmVyaWMsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1JT1MsCi0gICAgVGVzdFByb3Rv
Y29sUGxhdGZvcm1NYWNPUywKLX07Ci0KLQotCi0KLQotCi0KLQotCi0KLSNpbXBvcnQgPFdlYklu
c3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4KLQotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50
ZXJuYWwuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdp
dGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xK
U09OT2JqZWN0UHJpdmF0ZS5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJ
bnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi0KLQot
Ci0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIK
LSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KLQot
bmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4K
LU9wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYg
dmFsdWUpOwotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sUGxh
dGZvcm0gdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9j
b2xQbGF0Zm9ybUFsbDoKLSAgICAgICAgcmV0dXJuICJhbGwiX3M7Ci0gICAgY2FzZSBUZXN0UHJv
dG9jb2xQbGF0Zm9ybUdlbmVyaWM6Ci0gICAgICAgIHJldHVybiAiZ2VuZXJpYyJfczsKLSAgICBj
YXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOgotICAgICAgICByZXR1cm4gImlvcyJfczsKLSAg
ICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M6Ci0gICAgICAgIHJldHVybiAibWFjb3Mi
X3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29s
UGxhdGZvcm0+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAg
IGlmICh2YWx1ZSA9PSAiYWxsIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3Jt
QWxsOwotICAgIGlmICh2YWx1ZSA9PSAiZ2VuZXJpYyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJv
dG9jb2xQbGF0Zm9ybUdlbmVyaWM7Ci0gICAgaWYgKHZhbHVlID09ICJpb3MiKQotICAgICAgICBy
ZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1JT1M7Ci0gICAgaWYgKHZhbHVlID09ICJtYWNvcyIp
Ci0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOwotICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90
b2NvbFR5cGVQYXJzZXIuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05P
YmplY3RQcml2YXRlLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotCi0KLQot
Ci0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVy
bmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9y
dCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLSNpbXBvcnQg
PHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBu
YW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMu
bW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9tYWMvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbiBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9tYWMvZGVmaW5pdGlvbnMtd2l0aC1t
YWMtcGxhdGZvcm0uanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODE3ZjEzNWVl
NWEuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9tYWMvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgorKysgL2Rl
di9udWxsCkBAIC0xLDI4ICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIk5ldHdvcmsiLAotICAg
ICJ0eXBlcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIk5ldHdvcmtFcnJvciIs
Ci0gICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAotICAgICAgICAgICAgInBsYXRmb3JtIjog
Im1hY29zIiwKLSAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwotICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAibWVzc2FnZSIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJFcnJv
ciBtZXNzYWdlLiIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvZGUiLCAidHlwZSI6
ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIGNvZGUuIiB9Ci0gICAgICAgICAgICBd
Ci0gICAgICAgIH0KLSAgICBdLAotICAgICJjb21tYW5kcyI6IFsKLSAgICAgICAgewotICAgICAg
ICAgICAgIm5hbWUiOiAibG9hZFJlc291cmNlIiwKLSAgICAgICAgICAgICJwbGF0Zm9ybSI6ICJt
YWNvcyIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9hZHMgYSByZXNvdXJjZSBpbiB0
aGUgY29udGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFnZSB3aXRob3V0IGNyb3Nz
IG9yaWdpbiBjaGVja3MuIgotICAgICAgICB9Ci0gICAgXSwKLSAgICAiZXZlbnRzIjogWwotICAg
ICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJyZXNvdXJjZUxvYWRlZCIsCi0gICAgICAgICAg
ICAicGxhdGZvcm0iOiAibWFjb3MiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkEgcmVz
b3VyY2Ugd2FzIGxvYWRlZC4iCi0gICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvbWFjL2V4cGVjdGVkL2Rl
ZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL21hYy9leHBlY3RlZC9kZWZpbml0aW9ucy13
aXRoLW1hYy1wbGF0Zm9ybS5qc29uLXJlc3VsdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggYzZlNjhmNGE5YWUuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9tYWMvZXhwZWN0ZWQvZGVmaW5pdGlvbnMtd2l0aC1tYWMt
cGxhdGZvcm0uanNvbi1yZXN1bHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMjE3ICswLDAgQEAKLSMj
IyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLS8vIE5ldHdvcmsKLUlu
c3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIk5ldHdvcmsiLCBudWxsKTsKLUluc3BlY3Rv
ckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrLmxvYWRSZXNvdXJjZSIsIG51bGwsIFtd
LCBbXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnQoIk5ldHdvcmsucmVzb3VyY2VM
b2FkZWQiLCBudWxsLCBbXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyTmV0d29ya0Rpc3Bh
dGNoZXIgPSBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRGlzcGF0Y2hlci5iaW5kKEluc3BlY3Rv
ckJhY2tlbmQsICJOZXR3b3JrIik7Ci1JbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJO
ZXR3b3JrIiwgbnVsbCk7Ci0jIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5q
cwotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxh
dGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0j
cHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Igewot
Ci1jbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBz
ZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hl
cikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQotICAgIEJh
Y2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFj
a2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPEJhY2tlbmREaXNw
YXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwotfTsKLQotCi1jbGFzcyBBbHRlcm5hdGVOZXR3
b3JrQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIg
ewotcHVibGljOgotICAgIHZpcnR1YWwgfkFsdGVybmF0ZU5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hl
cigpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UobG9uZyBjYWxsSWQpID0gMDsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jZW5kaWYgLy8gRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0
aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIK
LSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsK
LQotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKLWNsYXNzIEFsdGVybmF0ZU5ldHdvcmtCYWNrZW5kRGlzcGF0
Y2hlcjsKLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
LQotY2xhc3MgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7Ci1wdWJsaWM6Ci0gICAg
dmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZShFcnJvclN0cmluZyYpID0gMDsKLXByb3RlY3RlZDoK
LSAgICB2aXJ0dWFsIH5OZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7Ci19OwotCi1j
bGFzcyBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFs
QmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8TmV0d29ya0JhY2tl
bmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBOZXR3b3JrQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29u
c3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkgZmluYWw7Ci1w
cml2YXRlOgotICAgIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQotcHVibGljOgotICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0Y2hlcihB
bHRlcm5hdGVOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsg
bV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQotcHJpdmF0ZToK
LSAgICBBbHRlcm5hdGVOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIqIG1fYWx0ZXJuYXRlRGlzcGF0
Y2hlciB7IG51bGxwdHIgfTsKLSNlbmRpZgotcHJpdmF0ZToKLSAgICBOZXR3b3JrQmFja2VuZERp
c3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImLCBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyKik7Ci0gICAgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2VudCB7IG51
bGxwdHIgfTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBU
ZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlz
cGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlv
bnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEJhY2tlbmRE
aXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRl
bmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi9O
ZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2lmIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotI2luY2x1ZGUgIlRlc3RBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgSW5zcGVjdG9y
IHsKLQotTmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6fk5ldHdvcmtCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXIoKSB7IH0KLQotUmVmPE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcj4gTmV0
d29ya0JhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmRE
aXNwYXRjaGVyLCBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKLXsKLSAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERp
c3BhdGNoZXIsIGFnZW50KSk7Ci19Ci0KLU5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjo6TmV0d29y
a0JhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwg
TmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCi0gICAgOiBTdXBwbGVtZW50
YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKLSAgICAsIG1fYWdlbnQoYWdl
bnQpCi17Ci0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9t
YWluKCJOZXR3b3JrIl9zLCB0aGlzKTsKLX0KLQotdm9pZCBOZXR3b3JrQmFja2VuZERpc3BhdGNo
ZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpT
T046Ok9iamVjdD4mJiBtZXNzYWdlKQotewotICAgIFJlZjxOZXR3b3JrQmFja2VuZERpc3BhdGNo
ZXI+IHByb3RlY3QoKnRoaXMpOwotCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVy
czsKLSAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFyYW1ldGVycyk7Ci0KLSAg
ICBpZiAobWV0aG9kID09ICJsb2FkUmVzb3VyY2UiKQotICAgICAgICBsb2FkUmVzb3VyY2UocmVx
dWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2Vu
ZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhv
ZE5vdEZvdW5kLCAiJ05ldHdvcmsuIiArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKLX0K
LQotdm9pZCBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZShsb25nIHJlcXVl
c3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKLXsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKLSAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0g
ICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlKHJlcXVlc3RJZCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIEVycm9yU3RyaW5nIGVycm9yOwot
ICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0g
ICAgbV9hZ2VudC0+bG9hZFJlc291cmNlKGVycm9yKTsKLQotICAgIGlmICghZXJyb3IubGVuZ3Ro
KCkpCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQs
IFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJy
b3IsIFdURk1vdmUoZXJyb3IpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMj
IyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVz
dFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFz
cyBGcm9udGVuZFJvdXRlcjsKLQotY2xhc3MgTmV0d29ya0Zyb250ZW5kRGlzcGF0Y2hlciB7Ci0g
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgTmV0d29ya0Zyb250ZW5k
RGlzcGF0Y2hlcihGcm9udGVuZFJvdXRlciYgZnJvbnRlbmRSb3V0ZXIpIDogbV9mcm9udGVuZFJv
dXRlcihmcm9udGVuZFJvdXRlcikgeyB9Ci0gICAgdm9pZCByZXNvdXJjZUxvYWRlZCgpOwotcHJp
dmF0ZToKLSAgICBGcm9udGVuZFJvdXRlciYgbV9mcm9udGVuZFJvdXRlcjsKLX07Ci0KLX0gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVy
cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9y
bS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgotCi0j
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi12b2lk
IE5ldHdvcmtGcm9udGVuZERpc3BhdGNoZXI6OnJlc291cmNlTG9hZGVkKCkKLXsKLSAgICBSZWY8
SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAg
anNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiTmV0d29yay5yZXNvdXJjZUxvYWRl
ZCJfcyk7Ci0KLSAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9K
U09OU3RyaW5nKCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBG
aWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbE9iamVjdHMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmlu
aXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4K
LQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0K
LQotLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCi1uYW1lc3BhY2UgTmV0d29yayB7Ci1jbGFzcyBO
ZXR3b3JrRXJyb3I7Ci19IC8vIE5ldHdvcmsKLS8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9u
cy4KLQotCi0KLQotbmFtZXNwYWNlIE5ldHdvcmsgewotY2xhc3MgTmV0d29ya0Vycm9yIDogcHVi
bGljIEpTT046Ok9iamVjdEJhc2UgewotcHVibGljOgotICAgIGVudW0gewotICAgICAgICBOb0Zp
ZWxkc1NldCA9IDAsCi0gICAgICAgIE1lc3NhZ2VTZXQgPSAxIDw8IDAsCi0gICAgICAgIENvZGVT
ZXQgPSAxIDw8IDEsCi0gICAgICAgIEFsbEZpZWxkc1NldCA9IChNZXNzYWdlU2V0IHwgQ29kZVNl
dCkKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8aW50IFNUQVRFPgotICAgIGNsYXNzIEJ1aWxkZXIg
ewotICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVzdWx0Owot
Ci0gICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RT
dGF0ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxC
dWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxk
ZXIoUmVmPC8qTmV0d29ya0Vycm9yKi9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQotICAgICAgICAg
ICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9u
X2luaXRfc3RhdGUpOwotICAgICAgICB9Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBOZXR3b3JrRXJy
b3I7Ci0gICAgcHVibGljOgotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNZXNzYWdlU2V0PiYg
c2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBD
T01QSUxFX0FTU0VSVCghKFNUQVRFICYgTWVzc2FnZVNldCksIHByb3BlcnR5X21lc3NhZ2VfYWxy
ZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibWVzc2FnZSJfcywg
dmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNZXNzYWdlU2V0PigpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvZGVTZXQ+JiBzZXRDb2RlKGludCB2
YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENv
ZGVTZXQpLCBwcm9wZXJ0eV9jb2RlX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXRJbnRlZ2VyKCJjb2RlIl9zLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0
YXRlPENvZGVTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBSZWY8TmV0d29ya0Vycm9yPiBy
ZWxlYXNlKCkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0g
QWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKLSAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKHNpemVvZihOZXR3b3JrRXJyb3IpID09IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5u
b3RfY2FzdCk7Ci0KLSAgICAgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25SZXN1bHQgPSBt
X3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOwotICAgICAgICAgICAgYXV0byByZXN1bHQgPSBXVEZN
b3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxOZXR3b3JrRXJyb3I+Kj4oJmpzb25SZXN1bHQpKTsK
LSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgLyoK
LSAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6Ci0gICAgICogUmVmPE5ldHdvcmtFcnJvcj4g
cmVzdWx0ID0gTmV0d29ya0Vycm9yOjpjcmVhdGUoKQotICAgICAqICAgICAuc2V0TWVzc2FnZSgu
Li4pCi0gICAgICogICAgIC5zZXRDb2RlKC4uLikKLSAgICAgKiAgICAgLnJlbGVhc2UoKTsKLSAg
ICAgKi8KLSAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
KTsKLSAgICB9Ci19OwotCi19IC8vIE5ldHdvcmsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3Rv
Y29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xPYmplY3RzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxh
dGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotCi0j
aW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgot
Ci1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLX0g
Ly8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRh
aW5QdHIuaD4KLQotQHByb3RvY29sIFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5IYW5kbGVyOwot
Ci1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi1jbGFzcyBPYmpDSW5zcGVjdG9yTmV0d29ya0Jh
Y2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZU5ldHdvcmtCYWNrZW5kRGlz
cGF0Y2hlciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgT2Jq
Q0luc3BlY3Rvck5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xOZXR3b3Jr
RG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQotICAgIHZv
aWQgbG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKLXByaXZhdGU6Ci0gICAgUmV0
YWluUHRyPGlkPFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xC
YWNrZW5kRGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBk
ZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFBy
b3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRl
cm5hbC5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2luY2x1
ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi12b2lkIE9i
akNJbnNwZWN0b3JOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZShsb25nIHJl
cXVlc3RJZCkKLXsKLSAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2Vs
ZWN0b3IobG9hZFJlc291cmNlV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7
Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVz
dElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yay5sb2FkUmVz
b3VyY2UnIHdhcyBub3QgZm91bmQiX3MpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5z
ZW5kUGVuZGluZ0Vycm9ycygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWQgZXJy
b3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6
U2VydmVyRXJyb3IsIGVycm9yKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBl
bmRpbmdFcnJvcnMoKTsKLSAgICB9OwotCi0gICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2UpOwotICAgIH07Ci0KLSAgICBbbV9kZWxlZ2F0ZSBsb2Fk
UmVzb3VyY2VXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpz
dWNjZXNzQ2FsbGJhY2tdOwotfQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3Iv
VGVzdFByb3RvY29sLmg+Ci0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0Iikp
KQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKLUBwcm9w
ZXJ0eSAobm9uYXRvbWljLCByZXRhaW4sIHNldHRlcj1zZXROZXR3b3JrSGFuZGxlcjopIGlkPFRl
c3RQcm90b2NvbE5ldHdvcmtEb21haW5IYW5kbGVyPiBuZXR3b3JrSGFuZGxlcjsKLUBwcm9wZXJ0
eSAobm9uYXRvbWljLCByZWFkb25seSkgVGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkV2ZW50RGlz
cGF0Y2hlciAqbmV0d29ya0V2ZW50RGlzcGF0Y2hlcjsKLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sQ29uZmlndXJhdGlvbi5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRl
ZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5o
IgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2ltcG9ydCAiVGVzdFByb3Rv
Y29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5h
dGVEaXNwYXRjaGFibGVBZ2VudC5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFi
bGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVj
dG9yOwotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgotewotICAg
IEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci0gICAgaWQ8VGVz
dFByb3RvY29sTmV0d29ya0RvbWFpbkhhbmRsZXI+IF9uZXR3b3JrSGFuZGxlcjsKLSAgICBUZXN0
UHJvdG9jb2xOZXR3b3JrRG9tYWluRXZlbnREaXNwYXRjaGVyICpfbmV0d29ya0V2ZW50RGlzcGF0
Y2hlcjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFi
bGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtzdXBlciBp
bml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJUKGNv
bnRyb2xsZXIpOwotICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1cm4gc2Vs
ZjsKLX0KLQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgW19uZXR3b3JrSGFuZGxlciByZWxlYXNl
XTsKLSAgICBbX25ldHdvcmtFdmVudERpc3BhdGNoZXIgcmVsZWFzZV07Ci0gICAgW3N1cGVyIGRl
YWxsb2NdOwotfQotCi0tICh2b2lkKXNldE5ldHdvcmtIYW5kbGVyOihpZDxUZXN0UHJvdG9jb2xO
ZXR3b3JrRG9tYWluSGFuZGxlcj4paGFuZGxlcgotewotICAgIGlmIChoYW5kbGVyID09IF9uZXR3
b3JrSGFuZGxlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgW19uZXR3b3JrSGFuZGxlciByZWxl
YXNlXTsKLSAgICBfbmV0d29ya0hhbmRsZXIgPSBbaGFuZGxlciByZXRhaW5dOwotCi0gICAgYXV0
byBhbHRlcm5hdGVEaXNwYXRjaGVyID0gbWFrZVVuaXF1ZTxPYmpDSW5zcGVjdG9yTmV0d29ya0Jh
Y2tlbmREaXNwYXRjaGVyPihoYW5kbGVyKTsKLSAgICBhdXRvIGFsdGVybmF0ZUFnZW50ID0gbWFr
ZVVuaXF1ZTxBbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudDxOZXR3b3JrQmFja2VuZERpc3BhdGNo
ZXIsIEFsdGVybmF0ZU5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcj4+KCJOZXR3b3JrIl9zLCAqX2Nv
bnRyb2xsZXIsIFdURk1vdmUoYWx0ZXJuYXRlRGlzcGF0Y2hlcikpOwotICAgIF9jb250cm9sbGVy
LT5hcHBlbmRFeHRyYUFnZW50KFdURk1vdmUoYWx0ZXJuYXRlQWdlbnQpKTsKLX0KLQotLSAoaWQ8
VGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkhhbmRsZXI+KW5ldHdvcmtIYW5kbGVyCi17Ci0gICAg
cmV0dXJuIF9uZXR3b3JrSGFuZGxlcjsKLX0KLQotLSAoVGVzdFByb3RvY29sTmV0d29ya0RvbWFp
bkV2ZW50RGlzcGF0Y2hlciAqKW5ldHdvcmtFdmVudERpc3BhdGNoZXIKLXsKLSAgICBpZiAoIV9u
ZXR3b3JrRXZlbnREaXNwYXRjaGVyKQotICAgICAgICBfbmV0d29ya0V2ZW50RGlzcGF0Y2hlciA9
IFtbVGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkV2ZW50RGlzcGF0Y2hlciBhbGxvY10gaW5pdFdp
dGhDb250cm9sbGVyOl9jb250cm9sbGVyXTsKLSAgICByZXR1cm4gX25ldHdvcmtFdmVudERpc3Bh
dGNoZXI7Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3Vy
YXRpb24ubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMu
bW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1h
Yy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNp
bmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbE5l
dHdvcmtEb21haW5FdmVudERpc3BhdGNoZXIKLXsKLSAgICBBdWdtZW50YWJsZUluc3BlY3RvckNv
bnRyb2xsZXIqIF9jb250cm9sbGVyOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250
cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAg
ICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5p
bDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVy
OwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKXJlc291cmNlTG9hZGVkCi17Ci0gICAg
Y29uc3QgRnJvbnRlbmRSb3V0ZXImIHJvdXRlciA9IF9jb250cm9sbGVyLT5mcm9udGVuZFJvdXRl
cigpOwotCi0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIk5ldHdv
cmsucmVzb3VyY2VMb2FkZWQiX3MpOwotICAgIHJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2Ut
PnRvSlNPTlN0cmluZygpKTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sRXZlbnREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1w
bGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotCi0jaW1wb3J0IDxXZWJJbnNwZWN0
b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+Ci0KLQotQGNsYXNzIFRlc3RQcm90b2NvbE5ldHdv
cmtFcnJvcjsKLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sUGxhdGZv
cm0pIHsKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbCwKLSAgICBUZXN0UHJvdG9jb2xQbGF0
Zm9ybUdlbmVyaWMsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1JT1MsCi0gICAgVGVzdFByb3Rv
Y29sUGxhdGZvcm1NYWNPUywKLX07Ci0KLQotCi0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkg
KCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xOZXR3b3JrRXJyb3IgOiBSV0lQ
cm90b2NvbEpTT05PYmplY3QKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGlj
dGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkOwotLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7Ci0t
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZToo
aW50KWNvZGU7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNT
dHJpbmcgKm1lc3NhZ2U7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNz
aWduKSBpbnQgY29kZTsKLUBlbmQKLQotQHByb3RvY29sIFRlc3RQcm90b2NvbE5ldHdvcmtEb21h
aW5IYW5kbGVyIDxOU09iamVjdD4KLUBvcHRpb25hbAotLSAodm9pZClsb2FkUmVzb3VyY2VXaXRo
RXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3Vj
Y2Vzc0NhbGxiYWNrOih2b2lkKF4pKHZvaWQpKXN1Y2Nlc3NDYWxsYmFjazsKLUBlbmQKLQotX19h
dHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90
b2NvbE5ldHdvcmtEb21haW5FdmVudERpc3BhdGNoZXIgOiBOU09iamVjdAotLSAodm9pZClyZXNv
dXJjZUxvYWRlZDsKLUBlbmQKLQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xC
dWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
LmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRl
c3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIK
LSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5o
PgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xO
ZXR3b3JrRG9tYWluRXZlbnREaXNwYXRjaGVyIChQcml2YXRlKQotLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoQ29udHJvbGxlcjooSW5zcGVjdG9yOjpBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xs
ZXIqKWNvbnRyb2xsZXI7Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRl
cm5hbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBs
YXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9j
b2xBcnJheUNvbnZlcnNpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+Ci1PcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90
b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKLQotaW5saW5lIFN0cmluZyB0b1Byb3Rv
Y29sU3RyaW5nKFRlc3RQcm90b2NvbFBsYXRmb3JtIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1
ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1BbGw6Ci0gICAgICAgIHJldHVybiAi
YWxsIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOgotICAgICAgICBy
ZXR1cm4gImdlbmVyaWMiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzoKLSAg
ICAgICAgcmV0dXJuICJpb3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09T
OgotICAgICAgICByZXR1cm4gIm1hY29zIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5s
aW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFBsYXRmb3JtPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gImFsbCIpCi0gICAgICAgIHJl
dHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDsKLSAgICBpZiAodmFsdWUgPT0gImdlbmVyaWMi
KQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOwotICAgIGlmICh2
YWx1ZSA9PSAiaW9zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOwot
ICAgIGlmICh2YWx1ZSA9PSAibWFjb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxh
dGZvcm1NYWNPUzsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi0KLQotfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBs
YXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0KLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgotI2ltcG9ydCA8
V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLQotdXNpbmcgbmFt
ZXNwYWNlIEluc3BlY3RvcjsKLQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMgKE5ldHdvcmtEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlTmV0d29ya0Vycm9yOihUZXN0UHJv
dG9jb2xOZXR3b3JrRXJyb3IgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0K
LUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoTmV0
d29ya0RvbWFpbikKLQotKyAodm9pZClfcGFyc2VOZXR3b3JrRXJyb3I6KFRlc3RQcm90b2NvbE5l
dHdvcmtFcnJvciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10p
OwotICAgICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sTmV0d29ya0Vycm9yIGFsbG9jXSBpbml0
V2l0aFBheWxvYWQ6cGF5bG9hZF07Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
VHlwZXMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13
aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVBy
b3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLSNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0j
aW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwot
Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xOZXR3b3JrRXJyb3IKLQotLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwg
aWQ+ICopcGF5bG9hZAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAg
ICByZXR1cm4gbmlsOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJU
WShwYXlsb2FkW0AibWVzc2FnZSJdLCBAIm1lc3NhZ2UiKTsKLSAgICBzZWxmLm1lc3NhZ2UgPSBw
YXlsb2FkW0AibWVzc2FnZSJdOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9Q
Uk9QRVJUWShwYXlsb2FkW0AiY29kZSJdLCBAImNvZGUiKTsKLSAgICBzZWxmLmNvZGUgPSBbcGF5
bG9hZFtAImNvZGUiXSBpbnRlZ2VyVmFsdWVdOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0tIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0
ICopb2JqZWN0Ci17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEpTT05PYmplY3Q6
W29iamVjdCB0b0pTT05PYmplY3RdLmdldCgpXSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAg
ICByZXR1cm4gc2VsZjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTWVzc2FnZTooTlNT
dHJpbmcgKiltZXNzYWdlIGNvZGU6KGludCljb2RlCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBl
ciBpbml0XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9S
X1JFUVVJUkVEX1BST1BFUlRZKG1lc3NhZ2UsIEAibWVzc2FnZSIpOwotCi0gICAgc2VsZi5tZXNz
YWdlID0gbWVzc2FnZTsKLSAgICBzZWxmLmNvZGUgPSBjb2RlOwotCi0gICAgcmV0dXJuIHNlbGY7
Ci19Ci0KLS0gKHZvaWQpc2V0TWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlCi17Ci0gICAgW3N1
cGVyIHNldFN0cmluZzptZXNzYWdlIGZvcktleTpAIm1lc3NhZ2UiXTsKLX0KLQotLSAoTlNTdHJp
bmcgKiltZXNzYWdlCi17Ci0gICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJtZXNzYWdl
Il07Ci19Ci0KLS0gKHZvaWQpc2V0Q29kZTooaW50KWNvZGUKLXsKLSAgICBbc3VwZXIgc2V0SW50
ZWdlcjpjb2RlIGZvcktleTpAImNvZGUiXTsKLX0KLQotLSAoaW50KWNvZGUKLXsKLSAgICByZXR1
cm4gW3N1cGVyIGludGVnZXJGb3JLZXk6QCJjb2RlIl07Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21h
aW4uanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9z
YW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwLi4zYmY0ZGZmNWNjYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9zYW1lLXR5cGUtaWQtZGlmZmVy
ZW50LWRvbWFpbi5qc29uCkBAIC0wLDAgKzEsMjIgQEAKK1sKK3sKKyAgICAiZG9tYWluIjogIlJ1
bnRpbWUiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlJl
bW90ZU9iamVjdElkIiwKKyAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAg
ICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIG9iamVjdCBpZGVudGlmaWVyLiIKKyAgICAgICAgfQor
ICAgIF0KK30sCit7CisgICAgImRvbWFpbiI6ICJSdW50aW1lMiIsCisgICAgInR5cGVzIjogWwor
ICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiUmVtb3RlT2JqZWN0SWQiLAorICAgICAgICAg
ICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUg
b2JqZWN0IGlkZW50aWZpZXIuIgorICAgICAgICB9CisgICAgXQorfQorXQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3NoYWRvd2VkLW9w
dGlvbmFsLXR5cGUtc2V0dGVycy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yMGEwYzE1NTI3NQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9z
aGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgpAQCAtMCwwICsxLDMxIEBACit7Cisg
ICAgImRvbWFpbiI6ICJSdW50aW1lIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAg
ICAgICAgICJpZCI6ICJLZXlQYXRoIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisg
ICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiS2V5IHBhdGguIiwKKyAgICAgICAgICAgICJwcm9w
ZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgIm5hbWUi
OiAidHlwZSIsCisgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAg
ICAgICAgICAgICAgICJlbnVtIjogWyJudWxsIiwgInN0cmluZyIsICJhcnJheSJdLAorICAgICAg
ICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiS2V5IHBhdGggdHlwZS4iCisgICAgICAgICAg
ICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJuYW1lIjog
InN0cmluZyIsCisgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAg
ICAgICAgICAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAgICAgICAgICAgICAgICJkZXNj
cmlwdGlvbiI6ICJTdHJpbmcgdmFsdWUuIgorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJhcnJheSIsCisgICAgICAgICAg
ICAgICAgICAgICJ0eXBlIjogImFycmF5IiwKKyAgICAgICAgICAgICAgICAgICAgIm9wdGlvbmFs
IjogdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmci
IH0sCisgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJBcnJheSB2YWx1ZS4iCisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXQorfQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3No
b3VsZC1zdHJpcC1jb21tZW50cy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL3Nob3VsZC1zdHJpcC1jb21tZW50cy5qc29uCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5lY2UxZGNmYzYxYwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9zaG91bGQtc3Ry
aXAtY29tbWVudHMuanNvbgpAQCAtMCwwICsxLDUgQEAKK3sKKyAgICAvKiBhYm92ZSAqLworICAg
IC8qIGJlZm9yZSAqLyAiZG9tYWluIiAvKiBpbiAqLyA6IC8qIGluICovICJDb21tZW50IiAvKiBh
ZnRlciAqLworICAgIC8qIGJlbG93ICovCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXBy
aW1pdGl2ZS10eXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmNiYzlkNTM5NDc4Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCkBAIC0wLDAgKzEs
MTAgQEAKK3sKKyAgICAiZG9tYWluIjogIlJ1bnRpbWUiLAorICAgICJ0eXBlcyI6IFsKKyAgICAg
ICAgeworICAgICAgICAgICAgImlkIjogIlJlbW90ZU9iamVjdElkIiwKKyAgICAgICAgICAgICJ0
eXBlIjogImludGVnZXIiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBvYmpl
Y3QgaWRlbnRpZmllci4iCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1kZWNsYXJhdGlvbi1h
cnJheS10eXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAuLmNmYjA4YmQ5NDBiCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRp
b24tYXJyYXktdHlwZS5qc29uCkBAIC0wLDAgKzEsNTAgQEAKK1sKK3sKKyAgICAiZG9tYWluIjog
IkRlYnVnZ2VyIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6
ICJCcmVha3BvaW50SWQiLAorICAgICAgICAgICAgInR5cGUiOiAiaW50ZWdlciIKKyAgICAgICAg
fSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlJlYXNvbiIsCisgICAgICAgICAgICAi
dHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgImVudW0iOiBbIkRpZWQiLCAiRmFpbnRlZCIs
ICJIdW5ncnkiXQorICAgICAgICB9CisgICAgXQorfSwKK3sKKyAgICAiZG9tYWluIjogIlJ1bnRp
bWUiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIk9iamVj
dElkIiwKKyAgICAgICAgICAgICJ0eXBlIjogImludGVnZXIiCisgICAgICAgIH0sCisgICAgICAg
IHsKKyAgICAgICAgICAgICJpZCI6ICJMdWNreU51bWJlcnMiLAorICAgICAgICAgICAgInR5cGUi
OiAiYXJyYXkiLAorICAgICAgICAgICAgIml0ZW1zIjogeyAidHlwZSI6ICJpbnRlZ2VyIiB9Cisg
ICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJCYWJ5TmFtZXMiLAorICAg
ICAgICAgICAgInR5cGUiOiAiYXJyYXkiLAorICAgICAgICAgICAgIml0ZW1zIjogeyAidHlwZSI6
ICJzdHJpbmciIH0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIk5l
d09iamVjdHMiLAorICAgICAgICAgICAgInR5cGUiOiAiYXJyYXkiLAorICAgICAgICAgICAgIml0
ZW1zIjogeyAiJHJlZiI6ICJPYmplY3RJZCIgfQorICAgICAgICB9LAorICAgICAgICB7CisgICAg
ICAgICAgICAiaWQiOiAiT2xkT2JqZWN0cyIsCisgICAgICAgICAgICAidHlwZSI6ICJhcnJheSIs
CisgICAgICAgICAgICAiaXRlbXMiOiB7ICIkcmVmIjogIkRlYnVnZ2VyLkJyZWFrcG9pbnRJZCIg
fQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiU3RvcFJlYXNvbnMi
LAorICAgICAgICAgICAgInR5cGUiOiAiYXJyYXkiLAorICAgICAgICAgICAgIml0ZW1zIjogeyAi
JHJlZiI6ICJEZWJ1Z2dlci5SZWFzb24iIH0KKyAgICAgICAgfQorICAgIF0KK30KK10KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBl
LWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjlmMGFlZTljOTFiCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5
cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KQEAgLTAsMCArMSwxNSBAQAoreworICAgICJk
b21haW4iOiAiUnVudGltZSIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAg
ICAiaWQiOiAiRmFybUFuaW1hbHMiLAorICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAg
ICAgICAgICAgICJlbnVtIjogWyJQaWdzIiwgIkNvd3MiLCAiQ2F0cyIsICJIZW5zIl0KKyAgICAg
ICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlR3b0xlZ2dlZEFuaW1hbHMiLAor
ICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICJlbnVtIjogWyJEdWNr
cyIsICJIZW5zIiwgIkNyb3dzIiwgIkZsYW1pbmdvcyJdCisgICAgICAgIH0KKyAgICBdCit9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
dHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNv
bgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMmM0M2MzMzA5OTIKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCkBAIC0wLDAgKzEsMTAwIEBA
CitbCit7CisgICAgImRvbWFpbiI6ICJEYXRhYmFzZSIsCisgICAgImRlc2NyaXB0aW9uIjogIlRl
c3QgdHlwZSBidWlsZGVyIGdlbmVyYXRpb24gb2YgdmFyaW91cyBvYmplY3QgdHlwZXMuIiwKKyAg
ICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJFcnJvciIsCisgICAg
ICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkRh
dGFiYXNlIGVycm9yLiIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKKyAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogIm1lc3NhZ2UiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24i
OiAiRXJyb3IgbWVzc2FnZS4iIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2RlIiwg
InR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBjb2RlLiIgfQorICAgICAg
ICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiRXJyb3JM
aXN0IiwKKyAgICAgICAgICAgICJ0eXBlIjogImFycmF5IiwKKyAgICAgICAgICAgICJpdGVtcyI6
IHsgIiRyZWYiOiAiRXJyb3IiIH0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAg
ImlkIjogIk1vdXNlQnV0dG9uIiwKKyAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAg
ICAgICAgICAiZGVzY3JpcHRpb24iOiAiRW51bWVyYXRlcyBkaWZmZXJlbnQgbW91c2UgYnV0dG9u
cyB0aGF0IGNhbiBiZSB1c2VkLiIsCisgICAgICAgICAgICAiZW51bSI6IFsKKyAgICAgICAgICAg
ICAgICAiTm9uZSIsCisgICAgICAgICAgICAgICAgIkxlZnQiLAorICAgICAgICAgICAgICAgICJN
aWRkbGUiLAorICAgICAgICAgICAgICAgICJSaWdodCIKKyAgICAgICAgICAgIF0KKyAgICAgICAg
fSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIk9wdGlvbmFsUGFyYW1ldGVyQnVuZGxl
IiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAicHJvcGVydGll
cyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAi
YXJyYXkiLCAib3B0aW9uYWwiOiB0cnVlLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9
LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYnV0dG9ucyIsICJ0eXBlIjogImFycmF5Iiwg
Im9wdGlvbmFsIjogdHJ1ZSwgIml0ZW1zIjogeyAiJHJlZiI6ICJNb3VzZUJ1dHRvbiIgfSB9LAor
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGlyZWN0aW9uYWxpdHkiLCAidHlwZSI6ICJzdHJp
bmciLCAiZW51bSI6IFsiTFRSIiwgIlJUTCJdLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6
IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjog
Im51bWJlciIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjog
InZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiLCAib3B0aW9uYWwiOiB0
cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJlcnJvciIsICIkcmVmIjogIkVycm9y
IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZXJyb3JM
aXN0IiwgIiRyZWYiOiAiRXJyb3JMaXN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9CisgICAgICAgICAg
ICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJQYXJhbWV0ZXJC
dW5kbGUiLAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAgICJwcm9w
ZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlw
ZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCisgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJidXR0b25zIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICIk
cmVmIjogIk1vdXNlQnV0dG9uIiB9IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkaXJl
Y3Rpb25hbGl0eSIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJMVFIiLCAiUlRMIl0gfSwK
KyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiB9LAor
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiB9
LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiB9
LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIgfSwK
KyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImVycm9yIiwgIiRyZWYiOiAiRXJyb3IiIH0sCisg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJlcnJvckxpc3QiLCAiJHJlZiI6ICJFcnJvckxpc3Qi
IH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlk
IjogIk9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHMiLAorICAgICAgICAgICAgImRlc2Ny
aXB0aW9uIjogIkNvbmZsaWN0ZWQgbmFtZXMgbWF5IGNhdXNlIGdlbmVyYXRlZCBnZXR0ZXJzL3Nl
dHRlcnMgdG8gY2xhc2ggd2l0aCBidWlsdC1pbiBJbnNwZWN0b3JPYmplY3QgbWV0aG9kcy4iLAor
ICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjog
WworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiaW50ZWdlciIsICJ0eXBlIjogInN0cmluZyIg
fSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImFycmF5IiwgInR5cGUiOiAic3RyaW5nIiB9
LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic3RyaW5nIiwgInR5cGUiOiAic3RyaW5nIiB9
LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWUiLCAidHlwZSI6ICJzdHJpbmciIH0s
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJvYmplY3QiLCAidHlwZSI6ICJzdHJpbmciIH0K
KyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjog
IkR1bW15T2JqZWN0IiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJBbiBvcGVuIG9iamVj
dCB0aGF0IGRvZXNuJ3QgaGF2ZSBhbnkgcHJlZGVmaW5lZCBmaWVsZHMuIiwKKyAgICAgICAgICAg
ICJ0eXBlIjogIm9iamVjdCIKKyAgICAgICAgfQorICAgIF0KK30sCit7CisgICAgImRvbWFpbiI6
ICJUZXN0IiwKKyAgICAiZGVzY3JpcHRpb24iOiAiVGVzdCB0aGUgZ2VuZXJhdGlvbiBvZiBzcGVj
aWFsIGJlaGF2aW9ycyB0aGF0IG9ubHkgYXBwbHkgdG8gc3BlY2lmaWMgY2xhc3Nlcy4iLAorICAg
ICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlBhcmFtZXRlckJ1bmRs
ZSIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgInByb3BlcnRp
ZXMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkaXJlY3Rpb25hbGl0eSIsICJ0eXBl
IjogInN0cmluZyIsICJlbnVtIjogWyJMVFIiLCAiUlRMIl0gfSwKKyAgICAgICAgICAgICAgICB7
ICJuYW1lIjogImJ1dHRvbnMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgIiRyZWYiOiAi
RGF0YWJhc2UuTW91c2VCdXR0b24iIH0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNv
bHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIg
fSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmci
IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1i
ZXIiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmpl
Y3QiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55
IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZXJyb3IiLCAiJHJlZiI6ICJEYXRhYmFz
ZS5FcnJvciIgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXQorfQorXQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUt
cmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjgzZDk0YmU4OTdkCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgpAQCAtMCwwICsxLDUxIEBACitbCit7
CisgICAgImRvbWFpbiI6ICJUZXN0IiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAg
ICAgICAgICJpZCI6ICJUeXBlTmVlZGluZ0Nhc3QiLAorICAgICAgICAgICAgInR5cGUiOiAib2Jq
ZWN0IiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJBIGR1bW15IHR5cGUgdGhhdCByZXF1
aXJlcyBydW50aW1lIGNhc3RzLCBhbmQgZm9yY2VzIG5vbi1wcmltaXRpdmUgcmVmZXJlbmNlZCB0
eXBlcyB0byBhbHNvIGVtaXQgcnVudGltZSBjYXN0IGhlbHBlcnMuIiwKKyAgICAgICAgICAgICJw
cm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic3RyaW5nIiwgInR5cGUi
OiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIlN0cmluZyBtZW1iZXIuIiB9LAorICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAibnVtYmVyIiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlv
biI6ICJOdW1iZXIgbWVtYmVyLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImFuaW1h
bHMiLCAiJHJlZiI6ICJDYXN0ZWRBbmltYWxzIiwgImRlc2NyaXB0aW9uIjogIkVudW0gbWVtYmVy
LiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImlkIiwgIiRyZWYiOiAiQ2FzdGVkT2Jq
ZWN0SWQiLCAiZGVzY3JpcHRpb24iOiAiQWxpYXNlZCBtZW1iZXIuIiB9LAorICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAidHJlZSIsICIkcmVmIjogIlJlY3Vyc2l2ZU9iamVjdDEiLCAiZGVzY3Jp
cHRpb24iOiAiUmVjdXJzaXZlIG9iamVjdCBtZW1iZXIuIiB9CisgICAgICAgICAgICBdCisgICAg
ICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJDYXN0ZWRPYmplY3RJZCIsCisg
ICAgICAgICAgICAidHlwZSI6ICJpbnRlZ2VyIgorICAgICAgICB9LAorICAgICAgICB7CisgICAg
ICAgICAgICAiaWQiOiAiVW5jYXN0ZWRPYmplY3RJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJp
bnRlZ2VyIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiVW5jYXN0
ZWRBbmltYWxzIiwKKyAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAi
ZW51bSI6IFsiUGlncyIsICJDb3dzIiwgIkNhdHMiLCAiSGVucyJdCisgICAgICAgIH0sCisgICAg
ICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJDYXN0ZWRBbmltYWxzIiwKKyAgICAgICAgICAgICJ0
eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAiZW51bSI6IFsiRHVja3MiLCAiSGVucyIsICJD
cm93cyIsICJGbGFtaW5nb3MiXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAi
aWQiOiAiUmVjdXJzaXZlT2JqZWN0MSIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAor
ICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJv
YmoiLCAiJHJlZiI6ICJSZWN1cnNpdmVPYmplY3QyIiwgIm9wdGlvbmFsIjogdHJ1ZSB9CisgICAg
ICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJSZWN1
cnNpdmVPYmplY3QyIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAg
ICAicHJvcGVydGllcyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm9iaiIsICIkcmVm
IjogIlJlY3Vyc2l2ZU9iamVjdDEiLCAib3B0aW9uYWwiOiB0cnVlIH0KKyAgICAgICAgICAgIF0K
KyAgICAgICAgfQorICAgIF0KK30KK10KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24g
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS13aXRo
LW9wZW4tcGFyYW1ldGVycy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwLi45OWIwMjIwZDMxMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24K
QEAgLTAsMCArMSwyMSBAQAoreworICAgICJkb21haW4iOiAiVGVzdCIsCisgICAgInR5cGVzIjog
WworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiTm9PcGVuUGFyYW1ldGVycyIsCisgICAg
ICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJvbmUiLCAidHlwZSI6ICJudW1iZXIiIH0sCisgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJ0d28iLCAidHlwZSI6ICJudW1iZXIiIH0KKyAgICAgICAg
ICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIk9wZW5QYXJh
bWV0ZXJzIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAicHJv
cGVydGllcyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImFscGhhIiwgInR5cGUiOiAi
bnVtYmVyIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYmV0YSIsICJ0eXBlIjogIm51
bWJlciIgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3ZlcnNpb24uanNv
biBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy92ZXJzaW9u
Lmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjUwN2E1ZDkwMTc2
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL3ZlcnNpb24uanNvbgpAQCAtMCwwICsxLDYgQEAKK3siZG9tYWlucyI6Wworewor
ICAgICJkb21haW4iOiAiVmVyc2lvbkRvbWFpbiIsCisgICAgInZlcnNpb24iOiA0MgorfQorXX0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhv
c3QuaWRsIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5p
ZGwKaW5kZXggZTc4YzE4OTE5NjIuLjJjY2ExYjcwMzJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmlkbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmlkbApAQCAtOTMsOSArOTMsNyBA
QAogICAgIGJvb2xlYW4gaXNCZWluZ0luc3BlY3RlZCgpOwogCiAgICAgcmVhZG9ubHkgYXR0cmli
dXRlIGJvb2xlYW4gc3VwcG9ydHNEaWFnbm9zdGljTG9nZ2luZzsKLSNpZiBFTkFCTEVfSU5TUEVD
VE9SX1RFTEVNRVRSWQotICAgIHZvaWQgbG9nRGlhZ25vc3RpY0V2ZW50KERPTVN0cmluZyBldmVu
dE5hbWUsIERPTVN0cmluZyBjb250ZW50KTsKLSNlbmRpZgorICAgIFtDb25kaXRpb25hbD1JTlNQ
RUNUT1JfVEVMRU1FVFJZXSB2b2lkIGxvZ0RpYWdub3N0aWNFdmVudChET01TdHJpbmcgZXZlbnRO
YW1lLCBET01TdHJpbmcgY29udGVudCk7CiB9OwogCiBkaWN0aW9uYXJ5IENvbnRleHRNZW51SXRl
bSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb24uY3BwCmluZGV4IDBjNDQyZWU5MDg4Li42NDQ5NzI3M2RiNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAK
QEAgLTc5MywxMSArNzkzLDEzIEBAIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpmcmFt
ZUNsZWFyZWRTY2hlZHVsZWROYXZpZ2F0aW9uSW1wbChJbnN0cnVtZW50aW5nCiAgICAgICAgIGlu
c3BlY3RvclBhZ2VBZ2VudC0+ZnJhbWVDbGVhcmVkU2NoZWR1bGVkTmF2aWdhdGlvbihmcmFtZSk7
CiB9CiAKKyNpZiBFTkFCTEUoREFSS19NT0RFX0NTUykKIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjpkZWZhdWx0QXBwZWFyYW5jZURpZENoYW5nZUltcGwoSW5zdHJ1bWVudGluZ0FnZW50
cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSkKIHsKICAgICBp
ZiAoSW5zcGVjdG9yUGFnZUFnZW50KiBpbnNwZWN0b3JQYWdlQWdlbnQgPSBpbnN0cnVtZW50aW5n
QWdlbnRzLmluc3BlY3RvclBhZ2VBZ2VudCgpKQogICAgICAgICBpbnNwZWN0b3JQYWdlQWdlbnQt
PmRlZmF1bHRBcHBlYXJhbmNlRGlkQ2hhbmdlKHVzZURhcmtBcHBlYXJhbmNlKTsKIH0KKyNlbmRp
ZgogCiB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbERlc3Ryb3lDYWNoZWRSZXNv
dXJjZUltcGwoQ2FjaGVkUmVzb3VyY2UmIGNhY2hlZFJlc291cmNlKQogewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oCmluZGV4IDAz
YmRkNTVjYzkzLi42MDc3YWNkMmM5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaApAQCAtMjI5LDcgKzIyOSw5IEBAIHB1Ymxp
YzoKICAgICBzdGF0aWMgdm9pZCBmcmFtZVN0b3BwZWRMb2FkaW5nKEZyYW1lJik7CiAgICAgc3Rh
dGljIHZvaWQgZnJhbWVTY2hlZHVsZWROYXZpZ2F0aW9uKEZyYW1lJiwgU2Vjb25kcyBkZWxheSk7
CiAgICAgc3RhdGljIHZvaWQgZnJhbWVDbGVhcmVkU2NoZWR1bGVkTmF2aWdhdGlvbihGcmFtZSYp
OworI2lmIEVOQUJMRShEQVJLX01PREVfQ1NTKQogICAgIHN0YXRpYyB2b2lkIGRlZmF1bHRBcHBl
YXJhbmNlRGlkQ2hhbmdlKFBhZ2UmLCBib29sIHVzZURhcmtBcHBlYXJhbmNlKTsKKyNlbmRpZgog
ICAgIHN0YXRpYyB2b2lkIHdpbGxEZXN0cm95Q2FjaGVkUmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2Um
KTsKIAogICAgIHN0YXRpYyBib29sIHdpbGxJbnRlcmNlcHRSZXF1ZXN0KGNvbnN0IEZyYW1lKiwg
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7CkBAIC00MzQsNyArNDM2LDkgQEAgcHJpdmF0ZToKICAg
ICBzdGF0aWMgdm9pZCBmcmFtZVN0b3BwZWRMb2FkaW5nSW1wbChJbnN0cnVtZW50aW5nQWdlbnRz
JiwgRnJhbWUmKTsKICAgICBzdGF0aWMgdm9pZCBmcmFtZVNjaGVkdWxlZE5hdmlnYXRpb25JbXBs
KEluc3RydW1lbnRpbmdBZ2VudHMmLCBGcmFtZSYsIFNlY29uZHMgZGVsYXkpOwogICAgIHN0YXRp
YyB2b2lkIGZyYW1lQ2xlYXJlZFNjaGVkdWxlZE5hdmlnYXRpb25JbXBsKEluc3RydW1lbnRpbmdB
Z2VudHMmLCBGcmFtZSYpOworI2lmIEVOQUJMRShEQVJLX01PREVfQ1NTKQogICAgIHN0YXRpYyB2
b2lkIGRlZmF1bHRBcHBlYXJhbmNlRGlkQ2hhbmdlSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiwg
Ym9vbCB1c2VEYXJrQXBwZWFyYW5jZSk7CisjZW5kaWYKICAgICBzdGF0aWMgdm9pZCB3aWxsRGVz
dHJveUNhY2hlZFJlc291cmNlSW1wbChDYWNoZWRSZXNvdXJjZSYpOwogCiAgICAgc3RhdGljIGJv
b2wgd2lsbEludGVyY2VwdFJlcXVlc3RJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmLCBjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmKTsKQEAgLTEyMzcsMTEgKzEyNDEsMTMgQEAgaW5saW5lIHZvaWQgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpmcmFtZUNsZWFyZWRTY2hlZHVsZWROYXZpZ2F0aW9uKEZy
YW1lJiBmcmEKICAgICAgICAgZnJhbWVDbGVhcmVkU2NoZWR1bGVkTmF2aWdhdGlvbkltcGwoKmlu
c3RydW1lbnRpbmdBZ2VudHMsIGZyYW1lKTsKIH0KIAorI2lmIEVOQUJMRShEQVJLX01PREVfQ1NT
KQogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkZWZhdWx0QXBwZWFyYW5j
ZURpZENoYW5nZShQYWdlJiBwYWdlLCBib29sIHVzZURhcmtBcHBlYXJhbmNlKQogewogICAgIEZB
U1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkpOwogICAgIGRlZmF1bHRBcHBlYXJhbmNl
RGlkQ2hhbmdlSW1wbChpbnN0cnVtZW50aW5nQWdlbnRzRm9yUGFnZShwYWdlKSwgdXNlRGFya0Fw
cGVhcmFuY2UpOwogfQorI2VuZGlmCiAKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6d2lsbERlc3Ryb3lDYWNoZWRSZXNvdXJjZShDYWNoZWRSZXNvdXJjZSYgY2FjaGVkUmVz
b3VyY2UpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
U2hhZGVyUHJvZ3JhbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU2hh
ZGVyUHJvZ3JhbS5jcHAKaW5kZXggMjkxYmQyNGIwNmYuLmY4MTZiYjZmNDM2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU2hhZGVyUHJvZ3JhbS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclNoYWRlclByb2dyYW0uY3BwCkBA
IC0yNiw2ICsyNiw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9y
U2hhZGVyUHJvZ3JhbS5oIgogCisjaWYgRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKQor
CiAjaW5jbHVkZSAiSW5zcGVjdG9yQ2FudmFzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SWRlbnRpZmllcnNGYWN0b3J5Lmg+CiAjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CkBAIC0xNTIs
MTAgKzE1NCw2IEBAIHN0YXRpYyBSZWZQdHI8V2ViR1BVU2hhZGVyTW9kdWxlPiBzaGFkZXJGb3JU
eXBlKFdlYkdQVVBpcGVsaW5lJiBwaXBlbGluZSwgSW5zcGVjCiAKIFN0cmluZyBJbnNwZWN0b3JT
aGFkZXJQcm9ncmFtOjpyZXF1ZXN0U2hhZGVyU291cmNlKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNh
bnZhczo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlKQogewotI2lmICFFTkFCTEUoV0VCR0wpICYmICFF
TkFCTEUoV0VCR1BVKQotICAgIFVOVVNFRF9QQVJBTShzaGFkZXJUeXBlKTsKLSNlbmRpZgotCiAg
ICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9wcm9ncmFtLAogI2lmIEVOQUJMRShXRUJHTCkKICAg
ICAgICAgWyZdIChzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFdlYkdMUHJvZ3JhbT4gcHJvZ3JhbVdy
YXBwZXIpIHsKQEAgLTE4NCwxMSArMTgyLDYgQEAgU3RyaW5nIEluc3BlY3RvclNoYWRlclByb2dy
YW06OnJlcXVlc3RTaGFkZXJTb3VyY2UoSW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjoKIAog
Ym9vbCBJbnNwZWN0b3JTaGFkZXJQcm9ncmFtOjp1cGRhdGVTaGFkZXIoSW5zcGVjdG9yOjpQcm90
b2NvbDo6Q2FudmFzOjpTaGFkZXJUeXBlIHNoYWRlclR5cGUsIGNvbnN0IFN0cmluZyYgc291cmNl
KQogewotI2lmICFFTkFCTEUoV0VCR0wpICYmICFFTkFCTEUoV0VCR1BVKQotICAgIFVOVVNFRF9Q
QVJBTShzaGFkZXJUeXBlKTsKLSAgICBVTlVTRURfUEFSQU0oc291cmNlKTsKLSNlbmRpZgotCiAg
ICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9wcm9ncmFtLAogI2lmIEVOQUJMRShXRUJHTCkKICAg
ICAgICAgWyZdIChzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFdlYkdMUHJvZ3JhbT4gcHJvZ3JhbVdy
YXBwZXIpIHsKQEAgLTI4MSwzICsyNzQsNSBAQCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q2Fu
dmFzOjpTaGFkZXJQcm9ncmFtPiBJbnNwZWN0b3JTaGFkZXJQcm9ncmFtOjpidWlsZE9iagogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpIHx8IEVO
QUJMRShXRUJHUFUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yU2hhZGVyUHJvZ3JhbS5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclNo
YWRlclByb2dyYW0uaAppbmRleCA2ZGYxM2RmZmRlYi4uY2NjNzNjZWYzNzQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTaGFkZXJQcm9ncmFtLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclNoYWRlclByb2dyYW0uaApAQCAtMjUs
NiArMjUsOCBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2lmIEVOQUJMRShXRUJHTCkgfHwgRU5BQkxF
KFdFQkdQVSkKKwogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sT2Jq
ZWN0cy5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50
ZWQuaD4KQEAgLTk5LDMgKzEwMSw1IEBAIHByaXZhdGU6CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNhbnZhc0Fn
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ2FudmFz
QWdlbnQuY3BwCmluZGV4IDFkMzk4YzU0N2NjLi41ZmZmMjk4NjMzNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDYW52YXNBZ2VudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDYW52YXNBZ2VudC5j
cHAKQEAgLTg4LDcgKzg4LDkgQEAgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6Okluc3BlY3RvckNhbnZh
c0FnZW50KFBhZ2VBZ2VudENvbnRleHQmIGNvbnRleHQpCiAgICAgLCBtX2luamVjdGVkU2NyaXB0
TWFuYWdlcihjb250ZXh0LmluamVjdGVkU2NyaXB0TWFuYWdlcikKICAgICAsIG1faW5zcGVjdGVk
UGFnZShjb250ZXh0Lmluc3BlY3RlZFBhZ2UpCiAgICAgLCBtX2NhbnZhc0Rlc3Ryb3llZFRpbWVy
KCp0aGlzLCAmSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmNhbnZhc0Rlc3Ryb3llZFRpbWVyRmlyZWQp
CisjaWYgRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKQogICAgICwgbV9wcm9ncmFtRGVz
dHJveWVkVGltZXIoKnRoaXMsICZJbnNwZWN0b3JDYW52YXNBZ2VudDo6cHJvZ3JhbURlc3Ryb3ll
ZFRpbWVyRmlyZWQpCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKQog
ewogfQogCkBAIC0xMzIsNyArMTM0LDcgQEAgdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZW5h
YmxlKEVycm9yU3RyaW5nJikKICAgICAgICAgICAgIC8vIFRoZSBhY3R1YWwgImNvbnRleHQiIGZv
ciBXZWJHUFUgaXMgdGhlIGBXZWJHUFVEZXZpY2VgLCBub3QgdGhlIDxjYW52YXM+LgogICAgICAg
ICAgICAgaWYgKGlzPEdQVUNhbnZhc0NvbnRleHQ+KGNvbnRleHQpKQogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdQVSkKIAogICAgICAgICAg
ICAgaWYgKGV4aXN0c0luQ3VycmVudFBhZ2UoY29udGV4dC0+Y2FudmFzQmFzZSgpLnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKSkpCiAgICAgICAgICAgICAgICAgYmluZENhbnZhcygqY29udGV4dCwg
ZmFsc2UpOwpAQCAtMTQ3LDcgKzE0OSw3IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmVu
YWJsZShFcnJvclN0cmluZyYpCiAgICAgICAgICAgICAgICAgYmluZENhbnZhcygqZGV2aWNlLCBm
YWxzZSk7CiAgICAgICAgIH0KICAgICB9Ci0jZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR1BV
KQogCiAjaWYgRU5BQkxFKFdFQkdMKQogICAgIHsKQEAgLTE1Nyw3ICsxNTksNyBAQCB2b2lkIElu
c3BlY3RvckNhbnZhc0FnZW50OjplbmFibGUoRXJyb3JTdHJpbmcmKQogICAgICAgICAgICAgICAg
IGRpZENyZWF0ZVdlYkdMUHJvZ3JhbSgqY29udGV4dFdlYkdMQmFzZSwgKnByb2dyYW0pOwogICAg
ICAgICB9CiAgICAgfQotI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQogCiAjaWYgRU5B
QkxFKFdFQkdQVSkKICAgICB7CkBAIC0xNjcsNyArMTY5LDcgQEAgdm9pZCBJbnNwZWN0b3JDYW52
YXNBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nJikKICAgICAgICAgICAgICAgICBkaWRDcmVhdGVX
ZWJHUFVQaXBlbGluZSgqZGV2aWNlLCAqcGlwZWxpbmUpOwogICAgICAgICB9CiAgICAgfQotI2Vu
ZGlmCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdQVSkKIH0KIAogdm9pZCBJbnNwZWN0b3JDYW52YXNB
Z2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYpCkBAIC0zMDMsNiArMzA1LDcgQEAgdm9pZCBJbnNw
ZWN0b3JDYW52YXNBZ2VudDo6c3RvcFJlY29yZGluZyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGNvbnN0IFN0cmluZyYKICAgICBkaWRGaW5pc2hSZWNvcmRpbmdDYW52YXNGcmFtZSgqY29udGV4
dCwgdHJ1ZSk7CiB9CiAKKyNpZiBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpCiB2b2lk
IEluc3BlY3RvckNhbnZhc0FnZW50OjpyZXF1ZXN0U2hhZGVyU291cmNlKEVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBwcm9ncmFtSWQsIGNvbnN0IFN0cmluZyYgc2hhZGVy
VHlwZVN0cmluZywgU3RyaW5nKiBvdXRTb3VyY2UpCiB7CiAgICAgYXV0byBpbnNwZWN0b3JQcm9n
cmFtID0gYXNzZXJ0SW5zcGVjdG9yUHJvZ3JhbShlcnJvclN0cmluZywgcHJvZ3JhbUlkKTsKQEAg
LTM0MCw2ICszNDMsNyBAQCB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50Ojp1cGRhdGVTaGFkZXIo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmCiAgICAgICAgIGVycm9yU3Ry
aW5nID0gIkZhaWxlZCB0byB1cGRhdGUgc2hhZGVyIG9mIGdpdmVuIHNoYWRlclR5cGUgZm9yIGdp
dmVuIHByb2dyYW1JZCJfczsKIH0KIAorI2lmIEVOQUJMRShXRUJHTCkKIHZvaWQgSW5zcGVjdG9y
Q2FudmFzQWdlbnQ6OnNldFNoYWRlclByb2dyYW1EaXNhYmxlZChFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIGNvbnN0IFN0cmluZyYgcHJvZ3JhbUlkLCBib29sIGRpc2FibGVkKQogewogICAgIGF1
dG8gaW5zcGVjdG9yUHJvZ3JhbSA9IGFzc2VydEluc3BlY3RvclByb2dyYW0oZXJyb3JTdHJpbmcs
IHByb2dyYW1JZCk7CkBAIC0zNTcsNiArMzYxLDggQEAgdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2Vu
dDo6c2V0U2hhZGVyUHJvZ3JhbUhpZ2hsaWdodGVkKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywK
IAogICAgIGluc3BlY3RvclByb2dyYW0tPnNldEhpZ2hsaWdodGVkKGhpZ2hsaWdodGVkKTsKIH0K
KyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCisjZW5kaWYgLy8jaWYgRU5BQkxFKFdFQkdMKSB8fCBF
TkFCTEUoV0VCR1BVKQogCiB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpmcmFtZU5hdmlnYXRl
ZChGcmFtZSYgZnJhbWUpCiB7CkBAIC02MjUsNyArNjMxLDcgQEAgYm9vbCBJbnNwZWN0b3JDYW52
YXNBZ2VudDo6aXNXZWJHTFByb2dyYW1IaWdobGlnaHRlZChXZWJHTFByb2dyYW0mIHByb2dyYW0p
CiAKICAgICByZXR1cm4gaW5zcGVjdG9yUHJvZ3JhbS0+aGlnaGxpZ2h0ZWQoKTsKIH0KLSNlbmRp
ZgorI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKIAogI2lmIEVOQUJMRShXRUJHUFUpCiB2b2lkIElu
c3BlY3RvckNhbnZhc0FnZW50OjpkaWRDcmVhdGVXZWJHUFVEZXZpY2UoV2ViR1BVRGV2aWNlJiBk
ZXZpY2UpCkBAIC02ODgsNyArNjk0LDcgQEAgdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6d2ls
bERlc3Ryb3lXZWJHUFVQaXBlbGluZShXZWJHUFVQaXBlbGluZSYgcGlwZWxpbmUpCiAKICAgICB1
bmJpbmRQcm9ncmFtKCppbnNwZWN0b3JQcm9ncmFtKTsKIH0KLSNlbmRpZgorI2VuZGlmIC8vIEVO
QUJMRShXRUJHUFUpCiAKIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnN0YXJ0UmVjb3JkaW5n
KEluc3BlY3RvckNhbnZhcyYgaW5zcGVjdG9yQ2FudmFzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpS
ZWNvcmRpbmc6OkluaXRpYXRvciBpbml0aWF0b3IsIFJlY29yZGluZ09wdGlvbnMmJiByZWNvcmRp
bmdPcHRpb25zKQogewpAQCAtNzAwLDEwICs3MDYsMTAgQEAgdm9pZCBJbnNwZWN0b3JDYW52YXNB
Z2VudDo6c3RhcnRSZWNvcmRpbmcoSW5zcGVjdG9yQ2FudmFzJiBpbnNwZWN0b3JDYW52YXMsIElu
c3AKICAgICAgICAgJiYgIWlzPEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dD4oY29udGV4dCkK
ICNpZiBFTkFCTEUoV0VCR0wpCiAgICAgICAgICYmICFpczxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+
KGNvbnRleHQpCi0jZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCiAjaWYgRU5BQkxFKFdF
QkdMMikKICAgICAgICAgJiYgIWlzPFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ+KGNvbnRleHQpCi0j
ZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wyKQogICAgICkKICAgICAgICAgcmV0dXJuOwog
CkBAIC03MzMsNiArNzM5LDcgQEAgdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6Y2FudmFzRGVz
dHJveWVkVGltZXJGaXJlZCgpCiAgICAgbV9yZW1vdmVkQ2FudmFzSWRlbnRpZmllcnMuY2xlYXIo
KTsKIH0KIAorI2lmIEVOQUJMRShXRUJHTCkgfHwgRU5BQkxFKFdFQkdQVSkKIHZvaWQgSW5zcGVj
dG9yQ2FudmFzQWdlbnQ6OnByb2dyYW1EZXN0cm95ZWRUaW1lckZpcmVkKCkKIHsKICAgICBpZiAo
IW1fcmVtb3ZlZFByb2dyYW1JZGVudGlmaWVycy5zaXplKCkpCkBAIC03NDMsNiArNzUwLDcgQEAg
dm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6cHJvZ3JhbURlc3Ryb3llZFRpbWVyRmlyZWQoKQog
CiAgICAgbV9yZW1vdmVkUHJvZ3JhbUlkZW50aWZpZXJzLmNsZWFyKCk7CiB9CisjZW5kaWYgLy8g
RU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKQogCiB2b2lkIEluc3BlY3RvckNhbnZhc0Fn
ZW50OjpyZXNldCgpCiB7CkBAIC03NTYsMTAgKzc2NCwxMiBAQCB2b2lkIEluc3BlY3RvckNhbnZh
c0FnZW50OjpyZXNldCgpCiAgICAgaWYgKG1fY2FudmFzRGVzdHJveWVkVGltZXIuaXNBY3RpdmUo
KSkKICAgICAgICAgbV9jYW52YXNEZXN0cm95ZWRUaW1lci5zdG9wKCk7CiAKKyNpZiBFTkFCTEUo
V0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpCiAgICAgbV9pZGVudGlmaWVyVG9JbnNwZWN0b3JQcm9n
cmFtLmNsZWFyKCk7CiAgICAgbV9yZW1vdmVkUHJvZ3JhbUlkZW50aWZpZXJzLmNsZWFyKCk7CiAg
ICAgaWYgKG1fcHJvZ3JhbURlc3Ryb3llZFRpbWVyLmlzQWN0aXZlKCkpCiAgICAgICAgIG1fcHJv
Z3JhbURlc3Ryb3llZFRpbWVyLnN0b3AoKTsKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpIHx8IEVO
QUJMRShXRUJHUFUpCiAKICAgICBtX3JlY29yZGluZ0NhbnZhc0lkZW50aWZpZXJzLmNsZWFyKCk7
CiB9CkBAIC03OTgsNyArODA4LDcgQEAgSW5zcGVjdG9yQ2FudmFzJiBJbnNwZWN0b3JDYW52YXNB
Z2VudDo6YmluZENhbnZhcyhXZWJHUFVEZXZpY2UmIGRldmljZSwgYm9vbCBjYXAKIAogICAgIHJl
dHVybiBpbnNwZWN0b3JDYW52YXM7CiB9Ci0jZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR1BV
KQogCiB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50Ojp1bmJpbmRDYW52YXMoSW5zcGVjdG9yQ2Fu
dmFzJiBpbnNwZWN0b3JDYW52YXMpCiB7CkBAIC04MTEsNyArODIxLDcgQEAgdm9pZCBJbnNwZWN0
b3JDYW52YXNBZ2VudDo6dW5iaW5kQ2FudmFzKEluc3BlY3RvckNhbnZhcyYgaW5zcGVjdG9yQ2Fu
dmFzKQogCiAgICAgZm9yIChhdXRvKiBpbnNwZWN0b3JQcm9ncmFtIDogcHJvZ3JhbXNUb1JlbW92
ZSkKICAgICAgICAgdW5iaW5kUHJvZ3JhbSgqaW5zcGVjdG9yUHJvZ3JhbSk7Ci0jZW5kaWYKKyNl
bmRpZiAvLyBFTkFCTEUoV0VCR0wpCiAKICAgICBpZiAoYXV0byogY29udGV4dCA9IGluc3BlY3Rv
ckNhbnZhcy5jYW52YXNDb250ZXh0KCkpCiAgICAgICAgIGNvbnRleHQtPmNhbnZhc0Jhc2UoKS5y
ZW1vdmVPYnNlcnZlcigqdGhpcyk7CkBAIC04NTYsOCArODY2LDkgQEAgUmVmUHRyPEluc3BlY3Rv
ckNhbnZhcz4gSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmZpbmRJbnNwZWN0b3JDYW52YXMoV2ViR1BV
RGV2aWNlJgogICAgIH0KICAgICByZXR1cm4gbnVsbHB0cjsKIH0KLSNlbmRpZgorI2VuZGlmIC8v
IEVOQUJMRShXRUJHUFUpCiAKKyNpZiBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpCiB2
b2lkIEluc3BlY3RvckNhbnZhc0FnZW50Ojp1bmJpbmRQcm9ncmFtKEluc3BlY3RvclNoYWRlclBy
b2dyYW0mIGluc3BlY3RvclByb2dyYW0pCiB7CiAgICAgU3RyaW5nIGlkZW50aWZpZXIgPSBpbnNw
ZWN0b3JQcm9ncmFtLmlkZW50aWZpZXIoKTsKQEAgLTg5MSw3ICs5MDIsNyBAQCBSZWZQdHI8SW5z
cGVjdG9yU2hhZGVyUHJvZ3JhbT4gSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmZpbmRJbnNwZWN0b3JQ
cm9ncmFtKFdlYkdMUAogICAgIH0KICAgICByZXR1cm4gbnVsbHB0cjsKIH0KLSNlbmRpZgorI2Vu
ZGlmIC8vIEVOQUJMRShXRUJHTCkKIAogI2lmIEVOQUJMRShXRUJHUFUpCiBSZWZQdHI8SW5zcGVj
dG9yU2hhZGVyUHJvZ3JhbT4gSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmZpbmRJbnNwZWN0b3JQcm9n
cmFtKFdlYkdQVVBpcGVsaW5lJiBwaXBlbGluZSkKQEAgLTkwMiw2ICs5MTMsNyBAQCBSZWZQdHI8
SW5zcGVjdG9yU2hhZGVyUHJvZ3JhbT4gSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmZpbmRJbnNwZWN0
b3JQcm9ncmFtKFdlYkdQVQogICAgIH0KICAgICByZXR1cm4gbnVsbHB0cjsKIH0KLSNlbmRpZgor
I2VuZGlmIC8vIEVOQUJMRShXRUJHUFUpCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKSB8fCBFTkFC
TEUoV0VCR1BVKQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNhbnZhc0FnZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNhbnZhc0FnZW50LmgKaW5kZXggZmY5
YTUzM2UwNDguLjBlZjFhZWZiNjQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvYWdlbnRzL0luc3BlY3RvckNhbnZhc0FnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDYW52YXNBZ2VudC5oCkBAIC00MywxNyArNDMsMTkgQEAg
Y2xhc3MgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFz
cyBDYW52YXNSZW5kZXJpbmdDb250ZXh0OworI2lmIEVOQUJMRShXRUJHTCkgfHwgRU5BQkxFKFdF
QkdQVSkKIGNsYXNzIEluc3BlY3RvclNoYWRlclByb2dyYW07CiAjaWYgRU5BQkxFKFdFQkdMKQog
Y2xhc3MgV2ViR0xQcm9ncmFtOwogY2xhc3MgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTsKLSNl
bmRpZgorI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKICNpZiBFTkFCTEUoV0VCR1BVKQogY2xhc3Mg
R1BVQ2FudmFzQ29udGV4dDsKIGNsYXNzIFdlYkdQVURldmljZTsKIGNsYXNzIFdlYkdQVVBpcGVs
aW5lOwogY2xhc3MgV2ViR1BVU3dhcENoYWluOwotI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxFKFdF
QkdQVSkKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpCiAKIHR5cGVk
ZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogCkBAIC03OSwxMCArODEsMTQgQEAgcHVibGljOgogICAg
IHZvaWQgc2V0UmVjb3JkaW5nQXV0b0NhcHR1cmVGcmFtZUNvdW50KEVycm9yU3RyaW5nJiwgaW50
IGNvdW50KSBvdmVycmlkZTsKICAgICB2b2lkIHN0YXJ0UmVjb3JkaW5nKEVycm9yU3RyaW5nJiwg
Y29uc3QgU3RyaW5nJiBjYW52YXNJZCwgY29uc3QgaW50KiBmcmFtZUNvdW50LCBjb25zdCBpbnQq
IG1lbW9yeUxpbWl0KSBvdmVycmlkZTsKICAgICB2b2lkIHN0b3BSZWNvcmRpbmcoRXJyb3JTdHJp
bmcmLCBjb25zdCBTdHJpbmcmIGNhbnZhc0lkKSBvdmVycmlkZTsKKyNpZiBFTkFCTEUoV0VCR0wp
IHx8IEVOQUJMRShXRUJHUFUpCiAgICAgdm9pZCByZXF1ZXN0U2hhZGVyU291cmNlKEVycm9yU3Ry
aW5nJiwgY29uc3QgU3RyaW5nJiBwcm9ncmFtSWQsIGNvbnN0IFN0cmluZyYgc2hhZGVyVHlwZSwg
U3RyaW5nKiBzb3VyY2UpIG92ZXJyaWRlOwogICAgIHZvaWQgdXBkYXRlU2hhZGVyKEVycm9yU3Ry
aW5nJiwgY29uc3QgU3RyaW5nJiBwcm9ncmFtSWQsIGNvbnN0IFN0cmluZyYgc2hhZGVyVHlwZSwg
Y29uc3QgU3RyaW5nJiBzb3VyY2UpIG92ZXJyaWRlOworI2lmIEVOQUJMRShXRUJHTCkKICAgICB2
b2lkIHNldFNoYWRlclByb2dyYW1EaXNhYmxlZChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYg
cHJvZ3JhbUlkLCBib29sIGRpc2FibGVkKSBvdmVycmlkZTsKICAgICB2b2lkIHNldFNoYWRlclBy
b2dyYW1IaWdobGlnaHRlZChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgcHJvZ3JhbUlkLCBi
b29sIGhpZ2hsaWdodGVkKSBvdmVycmlkZTsKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCisjZW5k
aWYgLy8gRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKQogCiAgICAgLy8gQ2FudmFzT2Jz
ZXJ2ZXIKICAgICB2b2lkIGNhbnZhc0NoYW5nZWQoQ2FudmFzQmFzZSYsIGNvbnN0IEZsb2F0UmVj
dCYpIG92ZXJyaWRlOwpAQCAtMTA0LDE0ICsxMTAsMTQgQEAgcHVibGljOgogICAgIHZvaWQgd2ls
bERlc3Ryb3lXZWJHTFByb2dyYW0oV2ViR0xQcm9ncmFtJik7CiAgICAgYm9vbCBpc1dlYkdMUHJv
Z3JhbURpc2FibGVkKFdlYkdMUHJvZ3JhbSYpOwogICAgIGJvb2wgaXNXZWJHTFByb2dyYW1IaWdo
bGlnaHRlZChXZWJHTFByb2dyYW0mKTsKLSNlbmRpZgorI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkK
ICNpZiBFTkFCTEUoV0VCR1BVKQogICAgIHZvaWQgZGlkQ3JlYXRlV2ViR1BVRGV2aWNlKFdlYkdQ
VURldmljZSYpOwogICAgIHZvaWQgd2lsbERlc3Ryb3lXZWJHUFVEZXZpY2UoV2ViR1BVRGV2aWNl
Jik7CiAgICAgdm9pZCB3aWxsQ29uZmlndXJlU3dhcENoYWluKEdQVUNhbnZhc0NvbnRleHQmLCBX
ZWJHUFVTd2FwQ2hhaW4mKTsKICAgICB2b2lkIGRpZENyZWF0ZVdlYkdQVVBpcGVsaW5lKFdlYkdQ
VURldmljZSYsIFdlYkdQVVBpcGVsaW5lJik7CiAgICAgdm9pZCB3aWxsRGVzdHJveVdlYkdQVVBp
cGVsaW5lKFdlYkdQVVBpcGVsaW5lJik7Ci0jZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR1BV
KQogCiBwcml2YXRlOgogICAgIHN0cnVjdCBSZWNvcmRpbmdPcHRpb25zIHsKQEAgLTEyMiwyOCAr
MTI4LDMyIEBAIHByaXZhdGU6CiAgICAgdm9pZCBzdGFydFJlY29yZGluZyhJbnNwZWN0b3JDYW52
YXMmLCBJbnNwZWN0b3I6OlByb3RvY29sOjpSZWNvcmRpbmc6OkluaXRpYXRvciwgUmVjb3JkaW5n
T3B0aW9ucyYmID0geyB9KTsKIAogICAgIHZvaWQgY2FudmFzRGVzdHJveWVkVGltZXJGaXJlZCgp
OworI2lmIEVOQUJMRShXRUJHTCkgfHwgRU5BQkxFKFdFQkdQVSkKICAgICB2b2lkIHByb2dyYW1E
ZXN0cm95ZWRUaW1lckZpcmVkKCk7CisjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUo
V0VCR1BVKQogICAgIHZvaWQgcmVzZXQoKTsKIAogICAgIEluc3BlY3RvckNhbnZhcyYgYmluZENh
bnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0JiwgYm9vbCBjYXB0dXJlQmFja3RyYWNlKTsKICNp
ZiBFTkFCTEUoV0VCR1BVKQogICAgIEluc3BlY3RvckNhbnZhcyYgYmluZENhbnZhcyhXZWJHUFVE
ZXZpY2UmLCBib29sIGNhcHR1cmVCYWNrdHJhY2UpOwotI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxF
KFdFQkdQVSkKICAgICB2b2lkIHVuYmluZENhbnZhcyhJbnNwZWN0b3JDYW52YXMmKTsKICAgICBS
ZWZQdHI8SW5zcGVjdG9yQ2FudmFzPiBhc3NlcnRJbnNwZWN0b3JDYW52YXMoRXJyb3JTdHJpbmcm
LCBjb25zdCBTdHJpbmcmIGNhbnZhc0lkKTsKICAgICBSZWZQdHI8SW5zcGVjdG9yQ2FudmFzPiBm
aW5kSW5zcGVjdG9yQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQmKTsKICNpZiBFTkFCTEUo
V0VCR1BVKQogICAgIFJlZlB0cjxJbnNwZWN0b3JDYW52YXM+IGZpbmRJbnNwZWN0b3JDYW52YXMo
V2ViR1BVRGV2aWNlJik7Ci0jZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR1BVKQogCisjaWYg
RU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKQogICAgIHZvaWQgdW5iaW5kUHJvZ3JhbShJ
bnNwZWN0b3JTaGFkZXJQcm9ncmFtJik7CiAgICAgUmVmUHRyPEluc3BlY3RvclNoYWRlclByb2dy
YW0+IGFzc2VydEluc3BlY3RvclByb2dyYW0oRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHBy
b2dyYW1JZCk7CiAjaWYgRU5BQkxFKFdFQkdMKQogICAgIFJlZlB0cjxJbnNwZWN0b3JTaGFkZXJQ
cm9ncmFtPiBmaW5kSW5zcGVjdG9yUHJvZ3JhbShXZWJHTFByb2dyYW0mKTsKLSNlbmRpZgorI2Vu
ZGlmIC8vIEVOQUJMRShXRUJHTCkKICNpZiBFTkFCTEUoV0VCR1BVKQogICAgIFJlZlB0cjxJbnNw
ZWN0b3JTaGFkZXJQcm9ncmFtPiBmaW5kSW5zcGVjdG9yUHJvZ3JhbShXZWJHUFVQaXBlbGluZSYp
OwotI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdQVSkKKyNlbmRpZiAvLyBFTkFCTEUoV0VC
R0wpIHx8IEVOQUJMRShXRUJHUFUpCiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yOjpD
YW52YXNGcm9udGVuZERpc3BhdGNoZXI+IG1fZnJvbnRlbmREaXNwYXRjaGVyOwogICAgIFJlZlB0
cjxJbnNwZWN0b3I6OkNhbnZhc0JhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVy
OwpAQCAtMTU1LDkgKzE2NSwxMSBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxTdHJpbmc+IG1fcmVt
b3ZlZENhbnZhc0lkZW50aWZpZXJzOwogICAgIFRpbWVyIG1fY2FudmFzRGVzdHJveWVkVGltZXI7
CiAKKyNpZiBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpCiAgICAgSGFzaE1hcDxTdHJp
bmcsIFJlZlB0cjxJbnNwZWN0b3JTaGFkZXJQcm9ncmFtPj4gbV9pZGVudGlmaWVyVG9JbnNwZWN0
b3JQcm9ncmFtOwogICAgIFZlY3RvcjxTdHJpbmc+IG1fcmVtb3ZlZFByb2dyYW1JZGVudGlmaWVy
czsKICAgICBUaW1lciBtX3Byb2dyYW1EZXN0cm95ZWRUaW1lcjsKKyNlbmRpZiAvLyBFTkFCTEUo
V0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpCiAKICAgICBIYXNoU2V0PFN0cmluZz4gbV9yZWNvcmRp
bmdDYW52YXNJZGVudGlmaWVyczsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcAppbmRleCBhMmY4ZGZhMTYyNC4uYzM1YTA1
OGI5NGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVj
dG9yRE9NQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yRE9NQWdlbnQuY3BwCkBAIC0xMjA3LDEwICsxMjA3LDE3IEBAIHN0ZDo6dW5pcXVlX3B0
cjxIaWdobGlnaHRDb25maWc+IEluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHRDb25maWdGcm9t
SW5zcGVjdG9yCiAgICAgcmV0dXJuIGhpZ2hsaWdodENvbmZpZzsKIH0KIAorI2lmIFBMQVRGT1JN
KElPU19GQU1JTFkpCit2b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRJbnNwZWN0TW9kZUVuYWJs
ZWQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBib29sIGVuYWJsZWQsIGNvbnN0IEpTT046Ok9i
amVjdCogaGlnaGxpZ2h0Q29uZmlnKQoreworICAgIHNldFNlYXJjaGluZ0Zvck5vZGUoZXJyb3JT
dHJpbmcsIGVuYWJsZWQsIGhpZ2hsaWdodENvbmZpZyA/IGhpZ2hsaWdodENvbmZpZyA6IG51bGxw
dHIsIGZhbHNlKTsKK30KKyNlbHNlCiB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRJbnNwZWN0
TW9kZUVuYWJsZWQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBib29sIGVuYWJsZWQsIGNvbnN0
IEpTT046Ok9iamVjdCogaGlnaGxpZ2h0Q29uZmlnLCBjb25zdCBib29sKiBzaG93UnVsZXJzKQog
ewogICAgIHNldFNlYXJjaGluZ0Zvck5vZGUoZXJyb3JTdHJpbmcsIGVuYWJsZWQsIGhpZ2hsaWdo
dENvbmZpZyA/IGhpZ2hsaWdodENvbmZpZyA6IG51bGxwdHIsIHNob3dSdWxlcnMgJiYgKnNob3dS
dWxlcnMpOwogfQorI2VuZGlmCiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodFJl
Y3QoRXJyb3JTdHJpbmcmLCBpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwgY29u
c3QgSlNPTjo6T2JqZWN0KiBjb2xvciwgY29uc3QgSlNPTjo6T2JqZWN0KiBvdXRsaW5lQ29sb3Is
IGNvbnN0IGJvb2wqIHVzZVBhZ2VDb29yZGluYXRlcykKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuaCBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuaAppbmRleCA3ZGYwZTgzZWI1
My4uZThhNzRmNmQwMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvSW5zcGVjdG9yRE9NQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdl
bnRzL0luc3BlY3RvckRPTUFnZW50LmgKQEAgLTEzMSw3ICsxMzEsMTEgQEAgcHVibGljOgogICAg
IHZvaWQgZGlzY2FyZFNlYXJjaFJlc3VsdHMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHNl
YXJjaElkKSBvdmVycmlkZTsKICAgICB2b2lkIHJlc29sdmVOb2RlKEVycm9yU3RyaW5nJiwgaW50
IG5vZGVJZCwgY29uc3QgU3RyaW5nKiBvYmplY3RHcm91cCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCkgb3ZlcnJpZGU7CiAgICAgdm9p
ZCBnZXRBdHRyaWJ1dGVzKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCwgUmVmUHRyPEpTT046OkFy
cmF5T2Y8U3RyaW5nPj4mIHJlc3VsdCkgb3ZlcnJpZGU7CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlM
WSkKKyAgICB2b2lkIHNldEluc3BlY3RNb2RlRW5hYmxlZChFcnJvclN0cmluZyYsIGJvb2wgZW5h
YmxlZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBoaWdobGlnaHRDb25maWcpIG92ZXJyaWRlOworI2Vs
c2UKICAgICB2b2lkIHNldEluc3BlY3RNb2RlRW5hYmxlZChFcnJvclN0cmluZyYsIGJvb2wgZW5h
YmxlZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBoaWdobGlnaHRDb25maWcsIGNvbnN0IGJvb2wqIHNo
b3dSdWxlcnMpIG92ZXJyaWRlOworI2VuZGlmCiAgICAgdm9pZCByZXF1ZXN0Tm9kZShFcnJvclN0
cmluZyYsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGludCogbm9kZUlkKSBvdmVycmlkZTsKICAg
ICB2b2lkIHB1c2hOb2RlQnlQYXRoVG9Gcm9udGVuZChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmlu
ZyYgcGF0aCwgaW50KiBub2RlSWQpIG92ZXJyaWRlOwogICAgIHZvaWQgaGlkZUhpZ2hsaWdodChF
cnJvclN0cmluZyYpIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCmluZGV4IDAyZWRkNDM4NTk2Li5hNThj
ZTgyMGFkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JQYWdlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yUGFnZUFnZW50LmNwcApAQCAtMzU2LDcgKzM1Niw3IEBAIHZvaWQgSW5zcGVjdG9y
UGFnZUFnZW50OjplbmFibGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQogICAgIHN0b3B3YXRj
aC5yZXNldCgpOwogICAgIHN0b3B3YXRjaC5zdGFydCgpOwogCi0jaWYgSEFWRShPU19EQVJLX01P
REVfU1VQUE9SVCkKKyNpZiBFTkFCTEUoREFSS19NT0RFX0NTUykKICAgICBkZWZhdWx0QXBwZWFy
YW5jZURpZENoYW5nZShtX2luc3BlY3RlZFBhZ2UuZGVmYXVsdFVzZURhcmtBcHBlYXJhbmNlKCkp
OwogI2VuZGlmCiB9CkBAIC0zNjcsMTAgKzM2NywxNCBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2Vu
dDo6ZGlzYWJsZShFcnJvclN0cmluZyYpCiAKICAgICBFcnJvclN0cmluZyB1bnVzZWQ7CiAgICAg
c2V0U2hvd1BhaW50UmVjdHModW51c2VkLCBmYWxzZSk7CisjaWYgIVBMQVRGT1JNKElPU19GQU1J
TFkpCiAgICAgc2V0U2hvd1J1bGVycyh1bnVzZWQsIGZhbHNlKTsKKyNlbmRpZgogICAgIG92ZXJy
aWRlVXNlckFnZW50KHVudXNlZCwgbnVsbHB0cik7CiAgICAgc2V0RW11bGF0ZWRNZWRpYSh1bnVz
ZWQsIGVtcHR5U3RyaW5nKCkpOworI2lmIEVOQUJMRShEQVJLX01PREVfQ1NTKQogICAgIHNldEZv
cmNlZEFwcGVhcmFuY2UodW51c2VkLCBlbXB0eVN0cmluZygpKTsKKyNlbmRpZgogCiAgICAgYXV0
byYgaW5zcGVjdGVkUGFnZVNldHRpbmdzID0gbV9pbnNwZWN0ZWRQYWdlLnNldHRpbmdzKCk7CiAg
ICAgaW5zcGVjdGVkUGFnZVNldHRpbmdzLnNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkSW5z
cGVjdG9yT3ZlcnJpZGUoV1RGOjpudWxsb3B0KTsKQEAgLTc3MCwxMCArNzc0LDEyIEBAIHZvaWQg
SW5zcGVjdG9yUGFnZUFnZW50OjpzZWFyY2hJblJlc291cmNlcyhFcnJvclN0cmluZyYsIGNvbnN0
IFN0cmluZyYgdGV4dCwgY29uCiAgICAgICAgIG5ldHdvcmtBZ2VudC0+c2VhcmNoT3RoZXJSZXF1
ZXN0cyhyZWdleCwgcmVzdWx0KTsKIH0KIAorI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQogdm9p
ZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNldFNob3dSdWxlcnMoRXJyb3JTdHJpbmcmLCBib29sIHNo
b3dSdWxlcnMpCiB7CiAgICAgbV9vdmVybGF5LT5zZXRTaG93UnVsZXJzKHNob3dSdWxlcnMpOwog
fQorI2VuZGlmCiAKIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzZXRTaG93UGFpbnRSZWN0cyhF
cnJvclN0cmluZyYsIGJvb2wgc2hvdykKIHsKQEAgLTg2OSwxMCArODc1LDEyIEBAIHZvaWQgSW5z
cGVjdG9yUGFnZUFnZW50OjpmcmFtZUNsZWFyZWRTY2hlZHVsZWROYXZpZ2F0aW9uKEZyYW1lJiBm
cmFtZSkKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+ZnJhbWVDbGVhcmVkU2NoZWR1bGVkTmF2
aWdhdGlvbihmcmFtZUlkKCZmcmFtZSkpOwogfQogCisjaWYgRU5BQkxFKERBUktfTU9ERV9DU1Mp
CiB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6ZGVmYXVsdEFwcGVhcmFuY2VEaWRDaGFuZ2UoYm9v
bCB1c2VEYXJrQXBwZWFyYW5jZSkKIHsKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+ZGVmYXVs
dEFwcGVhcmFuY2VEaWRDaGFuZ2UodXNlRGFya0FwcGVhcmFuY2UgPyBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpQYWdlOjpBcHBlYXJhbmNlOjpEYXJrIDogSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6
QXBwZWFyYW5jZTo6TGlnaHQpOwogfQorI2VuZGlmCiAKIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50
OjpkaWRDbGVhcldpbmRvd09iamVjdEluV29ybGQoRnJhbWUmIGZyYW1lLCBET01XcmFwcGVyV29y
bGQmIHdvcmxkKQogewpAQCAtMTAwOCwxMyArMTAxNiw5IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFn
ZW50OjpzZXRFbXVsYXRlZE1lZGlhKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBtZWRpYSkK
ICAgICBkb2N1bWVudC0+ZXZhbHVhdGVNZWRpYVF1ZXJpZXNBbmRSZXBvcnRDaGFuZ2VzKCk7CiB9
CiAKKyNpZiBFTkFCTEUoREFSS19NT0RFX0NTUykKIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50Ojpz
ZXRGb3JjZWRBcHBlYXJhbmNlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBhcHBlYXJhbmNl
KQogewotICAgIGlmIChhcHBlYXJhbmNlID09IG1fZm9yY2VkQXBwZWFyYW5jZSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgbV9mb3JjZWRBcHBlYXJhbmNlID0gYXBwZWFyYW5jZTsKLQogICAgIGlm
IChhcHBlYXJhbmNlID09ICJMaWdodCJfcykKICAgICAgICAgbV9pbnNwZWN0ZWRQYWdlLnNldFVz
ZURhcmtBcHBlYXJhbmNlT3ZlcnJpZGUoZmFsc2UpOwogICAgIGVsc2UgaWYgKGFwcGVhcmFuY2Ug
PT0gIkRhcmsiX3MpCkBAIC0xMDIyLDYgKzEwMjYsNyBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2Vu
dDo6c2V0Rm9yY2VkQXBwZWFyYW5jZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgYXBwZWFy
YQogICAgIGVsc2UKICAgICAgICAgbV9pbnNwZWN0ZWRQYWdlLnNldFVzZURhcmtBcHBlYXJhbmNl
T3ZlcnJpZGUoV1RGOjpudWxsb3B0KTsKIH0KKyNlbmRpZgogCiB2b2lkIEluc3BlY3RvclBhZ2VB
Z2VudDo6YXBwbHlVc2VyQWdlbnRPdmVycmlkZShTdHJpbmcmIHVzZXJBZ2VudCkKIHsKQEAgLTEw
NjksOSArMTA3NCw5IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzbmFwc2hvdFJlY3QoRXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgeCwgaW50IHksIGluCiAgICAgKm91dERhdGFVUkwg
PSBzbmFwc2hvdC0+dG9EYXRhVVJMKCJpbWFnZS9wbmciX3MsIFdURjo6bnVsbG9wdCwgUHJlc2Vy
dmVSZXNvbHV0aW9uOjpZZXMpOwogfQogCisjaWYgRU5BQkxFKFdFQl9BUkNISVZFKSAmJiBVU0Uo
Q0YpCiB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6YXJjaGl2ZShFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIFN0cmluZyogZGF0YSkKIHsKLSNpZiBFTkFCTEUoV0VCX0FSQ0hJVkUpICYmIFVTRShD
RikKICAgICBhdXRvIGFyY2hpdmUgPSBMZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGUobV9pbnNwZWN0
ZWRQYWdlLm1haW5GcmFtZSgpKTsKICAgICBpZiAoIWFyY2hpdmUpIHsKICAgICAgICAgZXJyb3JT
dHJpbmcgPSAiQ291bGQgbm90IGNyZWF0ZSB3ZWIgYXJjaGl2ZSBmb3IgbWFpbiBmcmFtZSJfczsK
QEAgLTEwODAsMTAgKzEwODUsNyBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6YXJjaGl2ZShF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFN0cmluZyogZGF0YSkKIAogICAgIFJldGFpblB0cjxD
RkRhdGFSZWY+IGJ1ZmZlciA9IGFyY2hpdmUtPnJhd0RhdGFSZXByZXNlbnRhdGlvbigpOwogICAg
ICpkYXRhID0gYmFzZTY0RW5jb2RlKENGRGF0YUdldEJ5dGVQdHIoYnVmZmVyLmdldCgpKSwgQ0ZE
YXRhR2V0TGVuZ3RoKGJ1ZmZlci5nZXQoKSkpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oZGF0
YSk7Ci0gICAgZXJyb3JTdHJpbmcgPSAiTm90IHN1cHBvcnRlZCJfczsKLSNlbmRpZgogfQorI2Vu
ZGlmCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUGFnZUFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclBhZ2VBZ2VudC5oCmluZGV4IDZjNzU4Mjk1MDIzLi5k
M2UwZmRiYjI3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JQYWdlQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3RvclBhZ2VBZ2VudC5oCkBAIC0xMDgsMTMgKzEwOCwxOSBAQCBwdWJsaWM6CiAgICAg
dm9pZCBzZXRCb290c3RyYXBTY3JpcHQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcqIG9wdGlv
bmFsU291cmNlKSBmaW5hbDsKICAgICB2b2lkIHNlYXJjaEluUmVzb3VyY2UoRXJyb3JTdHJpbmcm
LCBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcm
IHF1ZXJ5LCBjb25zdCBib29sKiBvcHRpb25hbENhc2VTZW5zaXRpdmUsIGNvbnN0IGJvb2wqIG9w
dGlvbmFsSXNSZWdleCwgY29uc3QgU3RyaW5nKiBvcHRpb25hbFJlcXVlc3RJZCwgUmVmUHRyPEpT
T046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6R2VuZXJpY1R5cGVzOjpTZWFyY2hNYXRj
aD4+Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZWFyY2hJblJlc291cmNlcyhFcnJvclN0cmluZyYs
IGNvbnN0IFN0cmluZyYsIGNvbnN0IGJvb2wqIGNhc2VTZW5zaXRpdmUsIGNvbnN0IGJvb2wqIGlz
UmVnZXgsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlNl
YXJjaFJlc3VsdD4+Jikgb3ZlcnJpZGU7CisjaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAg
dm9pZCBzZXRTaG93UnVsZXJzKEVycm9yU3RyaW5nJiwgYm9vbCkgb3ZlcnJpZGU7CisjZW5kaWYK
ICAgICB2b2lkIHNldFNob3dQYWludFJlY3RzKEVycm9yU3RyaW5nJiwgYm9vbCBzaG93KSBvdmVy
cmlkZTsKICAgICB2b2lkIHNldEVtdWxhdGVkTWVkaWEoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJp
bmcmKSBvdmVycmlkZTsKKyNpZiBFTkFCTEUoREFSS19NT0RFX0NTUykKICAgICB2b2lkIHNldEZv
cmNlZEFwcGVhcmFuY2UoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKKyNl
bmRpZgogICAgIHZvaWQgc25hcHNob3ROb2RlKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCwgU3Ry
aW5nKiBvdXREYXRhVVJMKSBvdmVycmlkZTsKICAgICB2b2lkIHNuYXBzaG90UmVjdChFcnJvclN0
cmluZyYsIGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBjb25zdCBTdHJpbmcm
IGNvb3JkaW5hdGVTeXN0ZW0sIFN0cmluZyogb3V0RGF0YVVSTCkgb3ZlcnJpZGU7CisjaWYgRU5B
QkxFKFdFQl9BUkNISVZFKSAmJiBVU0UoQ0YpCiAgICAgdm9pZCBhcmNoaXZlKEVycm9yU3RyaW5n
JiwgU3RyaW5nKiBkYXRhKSBvdmVycmlkZTsKKyNlbmRpZgogCiAgICAgLy8gSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uCiAgICAgdm9pZCBkb21Db250ZW50RXZlbnRGaXJlZCgpOwpAQCAtMTI2LDcg
KzEzMiw5IEBAIHB1YmxpYzoKICAgICB2b2lkIGZyYW1lU3RvcHBlZExvYWRpbmcoRnJhbWUmKTsK
ICAgICB2b2lkIGZyYW1lU2NoZWR1bGVkTmF2aWdhdGlvbihGcmFtZSYsIFNlY29uZHMgZGVsYXkp
OwogICAgIHZvaWQgZnJhbWVDbGVhcmVkU2NoZWR1bGVkTmF2aWdhdGlvbihGcmFtZSYpOworI2lm
IEVOQUJMRShEQVJLX01PREVfQ1NTKQogICAgIHZvaWQgZGVmYXVsdEFwcGVhcmFuY2VEaWRDaGFu
Z2UoYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSk7CisjZW5kaWYKICAgICB2b2lkIGFwcGx5VXNlckFn
ZW50T3ZlcnJpZGUoU3RyaW5nJik7CiAgICAgdm9pZCBhcHBseUVtdWxhdGVkTWVkaWEoU3RyaW5n
Jik7CiAgICAgdm9pZCBkaWRDbGVhcldpbmRvd09iamVjdEluV29ybGQoRnJhbWUmLCBET01XcmFw
cGVyV29ybGQmKTsKQEAgLTE2MSw3ICsxNjksNiBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8RG9j
dW1lbnRMb2FkZXIqLCBTdHJpbmc+IG1fbG9hZGVyVG9JZGVudGlmaWVyOwogICAgIFN0cmluZyBt
X3VzZXJBZ2VudE92ZXJyaWRlOwogICAgIFN0cmluZyBtX2VtdWxhdGVkTWVkaWE7Ci0gICAgU3Ry
aW5nIG1fZm9yY2VkQXBwZWFyYW5jZTsKICAgICBTdHJpbmcgbV9ib290c3RyYXBTY3JpcHQ7CiAg
ICAgYm9vbCBtX2lzRmlyc3RMYXlvdXRBZnRlck9uTG9hZCB7IGZhbHNlIH07CiAgICAgYm9vbCBt
X3Nob3dQYWludFJlY3RzIHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL0Jhc2UvTWFpbi5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL0Jhc2UvTWFpbi5qcwppbmRleCBlNWI0MzJjMmNiOC4uMzU0MzkxOGMxNzIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Jhc2UvTWFp
bi5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9CYXNlL01haW4u
anMKQEAgLTIzOTMsNyArMjM5Myw3IEBAIFdJLl91cGRhdGVEb3dubG9hZFRhYkJhckJ1dHRvbiA9
IGZ1bmN0aW9uKCkKICAgICBpZiAoIVdJLl9yZWxvYWRUYWJCYXJCdXR0b24pCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGlmICghSW5zcGVjdG9yQmFja2VuZC5oYXNEb21haW4oIlBhZ2UiKSkgewor
ICAgIGlmICghSW5zcGVjdG9yQmFja2VuZC5oYXNDb21tYW5kKCJQYWdlLmFyY2hpdmUiKSkgewog
ICAgICAgICBXSS5fZG93bmxvYWRUYWJCYXJCdXR0b24uaGlkZGVuID0gdHJ1ZTsKICAgICAgICAg
V0kuX3VwZGF0ZVRhYkJhckRpdmlkZXJzKCk7CiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMubWFrZSBiL1NvdXJjZS9XZWJLaXQvRGVyaXZl
ZFNvdXJjZXMubWFrZQppbmRleCBhMTJiNzg2M2M5Mi4uOGM1OGE1NzcxNDYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMubWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0L0Rl
cml2ZWRTb3VyY2VzLm1ha2UKQEAgLTMxNywxNyArMzE3LDkgQEAgQVVUT01BVElPTl9QUk9UT0NP
TF9PVVRQVVRfRklMRVMgPSBcCiAjCiBBVVRPTUFUSU9OX1BST1RPQ09MX09VVFBVVF9QQVRURVJO
UyA9ICQoc3Vic3QgLiwlLCQoQVVUT01BVElPTl9QUk9UT0NPTF9PVVRQVVRfRklMRVMpKQogCi1p
ZmVxICgkKE9TKSxNQUNPUykKLWlmZXEgKCQoc2hlbGwgJChDQykgLXN0ZD1nbnUrKzF6IC14IGMr
KyAtRSAtUCAtZE0gJChTREtfRkxBR1MpICQoVEFSR0VUX1RSSVBMRV9GTEFHUykgJChGUkFNRVdP
UktfRkxBR1MpICQoSEVBREVSX0ZMQUdTKSAtaW5jbHVkZSAid3RmL1BsYXRmb3JtLmgiIC9kZXYv
bnVsbCB8IGdyZXAgJyBXVEZfUExBVEZPUk1fSU9TX0ZBTUlMWSAnIHwgY3V0IC1kJyAnIC1mMyks
IDEpCi0JQVVUT01BVElPTl9CQUNLRU5EX1BMQVRGT1JNX0FSR1VNRU5UUyA9IC0tcGxhdGZvcm0g
aU9TCi1lbHNlCi0JQVVUT01BVElPTl9CQUNLRU5EX1BMQVRGT1JNX0FSR1VNRU5UUyA9IC0tcGxh
dGZvcm0gbWFjT1MKLWVuZGlmCi1lbmRpZiAjIE1BQ09TCi0KICMgSlNPTi1SUEMgRnJvbnRlbmQg
RGlzcGF0Y2hlcnMsIEJhY2tlbmQgRGlzcGF0Y2hlcnMsIFR5cGUgQnVpbGRlcnMKICQoQVVUT01B
VElPTl9QUk9UT0NPTF9PVVRQVVRfUEFUVEVSTlMpIDogJChBVVRPTUFUSU9OX1BST1RPQ09MX0lO
UFVUX0ZJTEVTKSAkKEFVVE9NQVRJT05fUFJPVE9DT0xfR0VORVJBVE9SX1NDUklQVFMpCi0JJChQ
WVRIT04pICQoSmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVIpL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weSAtLWZyYW1ld29yayBXZWJLaXQgJChBVVRPTUFUSU9OX0JBQ0tF
TkRfUExBVEZPUk1fQVJHVU1FTlRTKSAtLWJhY2tlbmQgLS1vdXRwdXREaXIgLiAkKEFVVE9NQVRJ
T05fUFJPVE9DT0xfSU5QVVRfRklMRVMpCisJJChQWVRIT04pICQoSmF2YVNjcmlwdENvcmVfU0NS
SVBUU19ESVIpL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weSAtLWZyYW1l
d29yayBXZWJLaXQgLS1iYWNrZW5kIC0tb3V0cHV0RGlyIC4gJChBVVRPTUFUSU9OX1BST1RPQ09M
X0lOUFVUX0ZJTEVTKQogCiBhbGwgOiAkKEFVVE9NQVRJT05fUFJPVE9DT0xfT1VUUFVUX0ZJTEVT
KQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtTWFjLmNtYWtlIGIvU291cmNl
L1dlYktpdC9QbGF0Zm9ybU1hYy5jbWFrZQppbmRleCA0OGUxNjAxM2RjYi4uNGMyZDMwYmViZjcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1NYWMuY21ha2UKKysrIGIvU291cmNl
L1dlYktpdC9QbGF0Zm9ybU1hYy5jbWFrZQpAQCAtNDgwLDEwICs0ODAsNiBAQCBmb3JlYWNoIChf
ZmlsZSAke09iakNGb3J3YXJkaW5nSGVhZGVyc30pCiAgICAgZmlsZShXUklURSAke0ZPUldBUkRJ
TkdfSEVBREVSU19ESVJ9L1dlYktpdC8ke19maWxlfSAiI2ltcG9ydCA8V2ViS2l0TGVnYWN5LyR7
X2ZpbGV9PiIpCiBlbmRmb3JlYWNoICgpCiAKLWxpc3QoQVBQRU5EIFdlYktpdF9BVVRPTUFUSU9O
X1BST1RPQ09MX0dFTkVSQVRPUl9FWFRSQV9GTEFHUwotICAgIC0tcGxhdGZvcm09bWFjT1MKLSkK
LQogc2V0KFNlY0l0ZW1TaGltRGlyZWN0b3J5ICR7Q01BS0VfTElCUkFSWV9PVVRQVVRfRElSRUNU
T1JZfS9XZWJLaXQuZnJhbWV3b3JrL1ZlcnNpb25zL0EvRnJhbWV3b3JrcykKIGFkZF9saWJyYXJ5
KFNlY0l0ZW1TaGltIFNIQVJFRCBXZWJQcm9jZXNzL21hYy9TZWNJdGVtU2hpbUxpYnJhcnkubW0p
CiBXRUJLSVRfQ1JFQVRFX1NZTUxJTksoU2VjSXRlbVNoaW0gJHtTZWNJdGVtU2hpbURpcmVjdG9y
eX0gJHtDTUFLRV9MSUJSQVJZX09VVFBVVF9ESVJFQ1RPUll9L1dlYktpdC5mcmFtZXdvcmsvRnJh
bWV3b3JrcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24v
QXV0b21hdGlvbi5qc29uIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9BdXRv
bWF0aW9uLmpzb24KaW5kZXggN2Y1NTI1NzA1ZWYuLmY1NmU2Y2Y5ODAzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL0F1dG9tYXRpb24uanNvbgorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL0F1dG9tYXRpb24uanNvbgpAQCAtNDM3
LDcgKzQzNyw3IEBACiAgICAgICAgIHsKICAgICAgICAgICAgICJuYW1lIjogImluc3BlY3RCcm93
c2luZ0NvbnRleHQiLAogICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkluc3BlY3QgdGhlIHNw
ZWNpZmllZCBicm93c2luZyBjb250ZXh0IHVzaW5nIFdlYiBJbnNwZWN0b3IuIiwKLSAgICAgICAg
ICAgICJwbGF0Zm9ybSI6ICJtYWNvcyIsCisgICAgICAgICAgICAiY29uZGl0aW9uIjogIlBMQVRG
T1JNKE1BQykiLAogICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCiAgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJoYW5kbGUiLCAiJHJlZiI6ICJCcm93c2luZ0NvbnRleHRIYW5kbGUiLCAiZGVz
Y3JpcHRpb24iOiAiVGhlIGhhbmRsZSBmb3IgdGhlIGJyb3dzaW5nIGNvbnRleHQgdGhhdCBzaG91
bGQgYmUgaW5zcGVjdGVkLiIgfSwKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImVuYWJsZUF1
dG9DYXB0dXJpbmciLCAidHlwZSI6ICJib29sZWFuIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2Ny
aXB0aW9uIjogIklmIHRoaXMgb3B0aW9uIGlzIHByZXNlbnQgYW5kIHNldCB0byB0cnVlLCB0aGUg
V2ViIEluc3BlY3RvciB3aWxsIGF1dG9tYXRpY2FsbHkgc3RhcnQgYSB0aW1lbGluZSByZWNvcmRp
bmcgb2YgdGhlIHNwZWNpZmllZCBicm93c2luZyBjb250ZXh0IG9uY2UgaXQgaXMgYXR0YWNoZWQu
IE5vdGUgdGhhdCB0aGlzIGRpc2FibGVzIHRoZSBkZWJ1Z2dlciBmb3IgdGhlIGR1cmF0aW9uIG9m
IHRoZSByZWNvcmRpbmcuIiB9CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2lu
c3BlY3Rvci9tYWluLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9pbnNwZWN0b3IvbWFpbi5w
eQppbmRleCAxNDYyZDgwMTlkOS4uOWUwOTA0YzIwZmYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvaW5zcGVjdG9yL21haW4ucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9pbnNwZWN0b3IvbWFpbi5weQpAQCAtMzgsMTQgKzM4LDEzIEBAIGNsYXNzIEluc3BlY3Rvckdl
bmVyYXRvclRlc3RzOgogICAgICAgICBzZWxmLnJlc2V0X3Jlc3VsdHMgPSByZXNldF9yZXN1bHRz
CiAgICAgICAgIHNlbGYuZXhlY3V0aXZlID0gZXhlY3V0aXZlCiAKLSAgICBkZWYgZ2VuZXJhdGVf
ZnJvbV9qc29uKHNlbGYsIGpzb25fZmlsZSwgcGxhdGZvcm0sIG91dHB1dF9kaXJlY3RvcnkpOgor
ICAgIGRlZiBnZW5lcmF0ZV9mcm9tX2pzb24oc2VsZiwganNvbl9maWxlLCBvdXRwdXRfZGlyZWN0
b3J5KToKICAgICAgICAgY21kID0gWydweXRob24nLAogICAgICAgICAgICAgICAgJ0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weScsCiAgICAgICAgICAgICAgICAnLS1vdXRwdXREaXInLCBvdXRwdXRfZGlyZWN0b3J5
LAogICAgICAgICAgICAgICAgJy0tZm9yY2UnLAogICAgICAgICAgICAgICAgJy0tZnJhbWV3b3Jr
JywgJ1Rlc3QnLAogICAgICAgICAgICAgICAgJy0tdGVzdCcsCi0gICAgICAgICAgICAgICAnLS1w
bGF0Zm9ybScsIHBsYXRmb3JtLAogICAgICAgICAgICAgICAganNvbl9maWxlXQogCiAgICAgICAg
IGV4aXRfY29kZSA9IDAKQEAgLTg4LDcgKzg3LDcgQEAgY2xhc3MgSW5zcGVjdG9yR2VuZXJhdG9y
VGVzdHM6CiAgICAgICAgICAgICAgICAgcHJpbnQoJ1BBU1M6ICVzJyAlIG91dHB1dF9maWxlKQog
ICAgICAgICByZXR1cm4gY2hhbmdlc19mb3VuZAogCi0gICAgZGVmIHJ1bl90ZXN0cyhzZWxmLCBw
bGF0Zm9ybSwgaW5wdXRfZGlyZWN0b3J5LCByZWZlcmVuY2VfZGlyZWN0b3J5KToKKyAgICBkZWYg
cnVuX3Rlc3RzKHNlbGYsIGlucHV0X2RpcmVjdG9yeSwgcmVmZXJlbmNlX2RpcmVjdG9yeSk6CiAg
ICAgICAgIHdvcmtfZGlyZWN0b3J5ID0gcmVmZXJlbmNlX2RpcmVjdG9yeQogCiAgICAgICAgIHBh
c3NlZCA9IFRydWUKQEAgLTEwMSw3ICsxMDAsNyBAQCBjbGFzcyBJbnNwZWN0b3JHZW5lcmF0b3JU
ZXN0czoKICAgICAgICAgICAgIGlmIG5vdCBzZWxmLnJlc2V0X3Jlc3VsdHM6CiAgICAgICAgICAg
ICAgICAgd29ya19kaXJlY3RvcnkgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKIAotICAgICAgICAgICAg
aWYgc2VsZi5nZW5lcmF0ZV9mcm9tX2pzb24ob3MucGF0aC5qb2luKGlucHV0X2RpcmVjdG9yeSwg
aW5wdXRfZmlsZSksIHBsYXRmb3JtLCB3b3JrX2RpcmVjdG9yeSk6CisgICAgICAgICAgICBpZiBz
ZWxmLmdlbmVyYXRlX2Zyb21fanNvbihvcy5wYXRoLmpvaW4oaW5wdXRfZGlyZWN0b3J5LCBpbnB1
dF9maWxlKSwgd29ya19kaXJlY3RvcnkpOgogICAgICAgICAgICAgICAgIHBhc3NlZCA9IEZhbHNl
CiAKICAgICAgICAgICAgIGlmIHNlbGYucmVzZXRfcmVzdWx0czoKQEAgLTEyMiwyMSArMTIxLDEw
IEBAIGNsYXNzIEluc3BlY3RvckdlbmVyYXRvclRlc3RzOgogICAgICAgICBhbGxfdGVzdHNfcGFz
c2VkID0gVHJ1ZQogCiAgICAgICAgIGJhc2VfZGlyZWN0b3J5ID0gb3MucGF0aC5qb2luKCdKYXZh
U2NyaXB0Q29yZScsICdpbnNwZWN0b3InLCAnc2NyaXB0cycsICd0ZXN0cycpCi0KLSAgICAgICAg
cGxhdGZvcm1fZGlyZWN0b3JpZXMgPSB7Ci0gICAgICAgICAgICAnbWFjb3MnOiAnbWFjJywKLSAg
ICAgICAgICAgICdpb3MnOiAnaW9zJywKLSAgICAgICAgICAgICdnZW5lcmljJzogJ2dlbmVyaWMn
LAotICAgICAgICAgICAgJ2FsbCc6ICdhbGwnLAotICAgICAgICB9Ci0KLSAgICAgICAgZm9yIHBs
YXRmb3JtX25hbWUsIHBsYXRmb3JtX2RpcmVjdG9yeSBpbiBwbGF0Zm9ybV9kaXJlY3Rvcmllcy5p
dGVyaXRlbXMoKToKLSAgICAgICAgICAgIGlucHV0X2RpcmVjdG9yeSA9IG9zLnBhdGguam9pbihi
YXNlX2RpcmVjdG9yeSwgcGxhdGZvcm1fZGlyZWN0b3J5KQotICAgICAgICAgICAgcmVmZXJlbmNl
X2RpcmVjdG9yeSA9IG9zLnBhdGguam9pbihpbnB1dF9kaXJlY3RvcnksICdleHBlY3RlZCcpCi0g
ICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihpbnB1dF9kaXJlY3RvcnkpIG9yIG5vdCBv
cy5wYXRoLmlzZGlyKHJlZmVyZW5jZV9kaXJlY3RvcnkpOgotICAgICAgICAgICAgICAgIGNvbnRp
bnVlCi0KLSAgICAgICAgICAgIGFsbF90ZXN0c19wYXNzZWQgPSBhbGxfdGVzdHNfcGFzc2VkIGFu
ZCBzZWxmLnJ1bl90ZXN0cyhwbGF0Zm9ybV9uYW1lLCBpbnB1dF9kaXJlY3RvcnksIHJlZmVyZW5j
ZV9kaXJlY3RvcnkpCisgICAgICAgIGlucHV0X2RpcmVjdG9yeSA9IGJhc2VfZGlyZWN0b3J5Cisg
ICAgICAgIHJlZmVyZW5jZV9kaXJlY3RvcnkgPSBvcy5wYXRoLmpvaW4oaW5wdXRfZGlyZWN0b3J5
LCAnZXhwZWN0ZWQnKQorICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGlucHV0X2RpcmVjdG9yeSkg
YW5kIG9zLnBhdGguaXNkaXIocmVmZXJlbmNlX2RpcmVjdG9yeSk6CisgICAgICAgICAgICBhbGxf
dGVzdHNfcGFzc2VkID0gc2VsZi5ydW5fdGVzdHMoaW5wdXRfZGlyZWN0b3J5LCByZWZlcmVuY2Vf
ZGlyZWN0b3J5KQogCiAgICAgICAgIHByaW50KCcnKQogICAgICAgICBpZiBhbGxfdGVzdHNfcGFz
c2VkOgo=
</data>
<flag name="commit-queue"
          id="414932"
          type_id="3"
          status="-"
          setter="hi"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>399526</attachid>
            <date>2020-05-15 16:21:19 -0700</date>
            <delta_ts>2020-05-16 13:39:07 -0700</delta_ts>
            <desc>[Patch] WIP</desc>
            <filename>210014.diff</filename>
            <type>text/plain</type>
            <size>2686862</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKaW5kZXggMDBkMmE1N2Iz
ZWQuLjQzYmZjNmQxZDJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZl
ZFNvdXJjZXMubWFrZQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMu
bWFrZQpAQCAtNDYsNiArNDYsMjAgQEAgZWxzZQogICAgIERFTEVURSA9IHJtIC1mCiBlbmRpZgog
CitGUkFNRVdPUktfRkxBR1MgPSAkKHNoZWxsIGVjaG8gJChCVUlMVF9QUk9EVUNUU19ESVIpICQo
RlJBTUVXT1JLX1NFQVJDSF9QQVRIUykgJChTWVNURU1fRlJBTUVXT1JLX1NFQVJDSF9QQVRIUykg
fCBwZXJsIC1lICdwcmludCAiLUYgIiAuIGpvaW4oIiAtRiAiLCBzcGxpdCgiICIsIDw+KSk7JykK
K0hFQURFUl9GTEFHUyA9ICQoc2hlbGwgZWNobyAkKEJVSUxUX1BST0RVQ1RTX0RJUikgJChIRUFE
RVJfU0VBUkNIX1BBVEhTKSAkKFNZU1RFTV9IRUFERVJfU0VBUkNIX1BBVEhTKSB8IHBlcmwgLWUg
J3ByaW50ICItSSAiIC4gam9pbigiIC1JICIsIHNwbGl0KCIgIiwgPD4pKTsnKQorCitURVhUX1BS
RVBST0NFU1NPUl9GTEFHUz0tRSAtUCAtdworCitpZm5lcSAoJChTREtST09UKSwpCisJU0RLX0ZM
QUdTPS1pc3lzcm9vdCAkKFNES1JPT1QpCitlbmRpZgorCitpZmVxICgkKFVTRV9MTFZNX1RBUkdF
VF9UUklQTEVTX0ZPUl9DTEFORyksWUVTKQorCVdLX0NVUlJFTlRfQVJDSD0kKHdvcmQgMSwgJChB
UkNIUykpCisJVEFSR0VUX1RSSVBMRV9GTEFHUz0tdGFyZ2V0ICQoV0tfQ1VSUkVOVF9BUkNIKS0k
KExMVk1fVEFSR0VUX1RSSVBMRV9WRU5ET1IpLSQoTExWTV9UQVJHRVRfVFJJUExFX09TX1ZFUlNJ
T04pJChMTFZNX1RBUkdFVF9UUklQTEVfU1VGRklYKQorZW5kaWYKKwogIyAtLS0tLS0tLQogCiAu
UEhPTlkgOiBhbGwKQEAgLTI0Myw2ICsyNTcsOCBAQCBJTlNQRUNUT1JfRE9NQUlOUyA6PSBcCiAg
ICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3RvY29sL0FuaW1hdGlvbi5qc29uIFwK
ICAgICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvQXBwbGljYXRpb25DYWNo
ZS5qc29uIFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvQXVkaXQu
anNvbiBcCisgICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3RvY29sL0Jyb3dzZXIu
anNvbiBcCisgICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3RvY29sL0NQVVByb2Zp
bGVyLmpzb24gXAogICAgICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9wcm90b2NvbC9DU1Mu
anNvbiBcCiAgICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3RvY29sL0NhbnZhcy5q
c29uIFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvQ29uc29sZS5q
c29uIFwKQEAgLTI1MSwzNSArMjY3LDI0IEBAIElOU1BFQ1RPUl9ET01BSU5TIDo9IFwKICAgICAk
KEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvRE9NU3RvcmFnZS5qc29uIFwKICAg
ICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvRGF0YWJhc2UuanNvbiBcCiAg
ICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3RvY29sL0RlYnVnZ2VyLmpzb24gXAot
ICAgICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9wcm90b2NvbC9Ccm93c2VyLmpzb24gXAog
ICAgICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9wcm90b2NvbC9HZW5lcmljVHlwZXMuanNv
biBcCiAgICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3RvY29sL0hlYXAuanNvbiBc
CisgICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3RvY29sL0luZGV4ZWREQi5qc29u
IFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvSW5zcGVjdG9yLmpz
b24gXAogICAgICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9wcm90b2NvbC9MYXllclRyZWUu
anNvbiBcCisgICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3RvY29sL01lbW9yeS5q
c29uIFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvTmV0d29yay5q
c29uIFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvUGFnZS5qc29u
IFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvUmVjb3JkaW5nLmpz
b24gXAogICAgICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9wcm90b2NvbC9SdW50aW1lLmpz
b24gXAogICAgICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9wcm90b2NvbC9TY3JpcHRQcm9m
aWxlci5qc29uIFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvU2Vj
dXJpdHkuanNvbiBcCisgICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3RvY29sL1Nl
cnZpY2VXb3JrZXIuanNvbiBcCiAgICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3Rv
Y29sL1RhcmdldC5qc29uIFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9j
b2wvVGltZWxpbmUuanNvbiBcCiAgICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3Rv
Y29sL1dvcmtlci5qc29uIFwKICMKIAotaWZlcSAoJChmaW5kc3RyaW5nIEVOQUJMRV9JTkRFWEVE
X0RBVEFCQVNFLCQoRkVBVFVSRV9ERUZJTkVTKSksIEVOQUJMRV9JTkRFWEVEX0RBVEFCQVNFKQot
ICAgIElOU1BFQ1RPUl9ET01BSU5TIDo9ICQoSU5TUEVDVE9SX0RPTUFJTlMpICQoSmF2YVNjcmlw
dENvcmUpL2luc3BlY3Rvci9wcm90b2NvbC9JbmRleGVkREIuanNvbgotZW5kaWYKLQotaWZlcSAo
JChmaW5kc3RyaW5nIEVOQUJMRV9SRVNPVVJDRV9VU0FHRSwkKEZFQVRVUkVfREVGSU5FUykpLCBF
TkFCTEVfUkVTT1VSQ0VfVVNBR0UpCi0gICAgSU5TUEVDVE9SX0RPTUFJTlMgOj0gJChJTlNQRUNU
T1JfRE9NQUlOUykgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3RvY29sL0NQVVByb2Zp
bGVyLmpzb24KLSAgICBJTlNQRUNUT1JfRE9NQUlOUyA6PSAkKElOU1BFQ1RPUl9ET01BSU5TKSAk
KEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvTWVtb3J5Lmpzb24KLWVuZGlmCi0K
LWlmZXEgKCQoZmluZHN0cmluZyBFTkFCTEVfU0VSVklDRV9XT1JLRVIsJChGRUFUVVJFX0RFRklO
RVMpKSwgRU5BQkxFX1NFUlZJQ0VfV09SS0VSKQotICAgIElOU1BFQ1RPUl9ET01BSU5TIDo9ICQo
SU5TUEVDVE9SX0RPTUFJTlMpICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9wcm90b2NvbC9T
ZXJ2aWNlV29ya2VyLmpzb24KLWVuZGlmCi0KIElOU1BFQ1RPUl9HRU5FUkFUT1JfU0NSSVBUUyA9
IFwKIAkkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL19faW5pdF9f
LnB5IFwKIAkkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2NwcF9n
ZW5lcmF0b3JfdGVtcGxhdGVzLnB5IFwKQEAgLTMyNyw2ICszMzIsOSBAQCBDb21iaW5lZERvbWFp
bnMuanNvbiA6ICQoSmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVIpL2dlbmVyYXRlLWNvbWJpbmVk
LWluc3BlY3RvcgogIyBJbnNwZWN0b3IgQmFja2VuZCBEaXNwYXRjaGVycywgRnJvbnRlbmQgRGlz
cGF0Y2hlcnMsIFR5cGUgQnVpbGRlcnMKICQoSU5TUEVDVE9SX0RJU1BBVENIRVJfRklMRVNfUEFU
VEVSTlMpIDogQ29tYmluZWREb21haW5zLmpzb24gJChJTlNQRUNUT1JfR0VORVJBVE9SX1NDUklQ
VFMpCiAJJChQWVRIT04pICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weSAtLWZyYW1ld29yayBKYXZhU2NyaXB0
Q29yZSAtLW91dHB1dERpciBpbnNwZWN0b3IgLi9Db21iaW5lZERvbWFpbnMuanNvbgorCW12IGlu
c3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMgaW5zcGVjdG9yL0luc3BlY3RvckJh
Y2tlbmRDb21tYW5kcy5qcy5pbgorCSQoQ0MpICQoU0RLX0ZMQUdTKSAkKFRBUkdFVF9UUklQTEVf
RkxBR1MpICQoVEVYVF9QUkVQUk9DRVNTT1JfRkxBR1MpICQoRlJBTUVXT1JLX0ZMQUdTKSAkKEhF
QURFUl9GTEFHUykgLWluY2x1ZGUgInd0Zi9QbGF0Zm9ybS5oIiAtIDwgaW5zcGVjdG9yL0luc3Bl
Y3RvckJhY2tlbmRDb21tYW5kcy5qcy5pbiA+IGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kQ29t
bWFuZHMuanMub3V0CisJdHIgLXMgIlxuIiA8IGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kQ29t
bWFuZHMuanMub3V0ID4gaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwogCiBJ
bmplY3RlZFNjcmlwdFNvdXJjZS5oIDogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0U291cmNlLmpz
ICQoSmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVIpL2pzbWluLnB5ICQoSmF2YVNjcmlwdENvcmVf
U0NSSVBUU19ESVIpL3h4ZC5wbAogCWVjaG8gIi8vIyBzb3VyY2VVUkw9X19JbmplY3RlZFNjcmlw
dF9JbmplY3RlZFNjcmlwdFNvdXJjZS5qcyIgPiAuL0luamVjdGVkU2NyaXB0U291cmNlLm1pbi5q
cwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9D
UFVQcm9maWxlci5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2Nv
bC9DUFVQcm9maWxlci5qc29uCmluZGV4IGNmYWNkMDFkYjczLi5lMTc5MjIyMDc5NSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9DUFVQcm9maWxl
ci5qc29uCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvQ1BV
UHJvZmlsZXIuanNvbgpAQCAtMSw3ICsxLDcgQEAKIHsKICAgICAiZG9tYWluIjogIkNQVVByb2Zp
bGVyIiwKICAgICAiZGVzY3JpcHRpb24iOiAiQ1BVUHJvZmlsZXIgZG9tYWluIGV4cG9zZXMgY3B1
IHVzYWdlIHRyYWNraW5nLiIsCi0gICAgImZlYXR1cmVHdWFyZCI6ICJFTkFCTEUoUkVTT1VSQ0Vf
VVNBR0UpIiwKKyAgICAiY29uZGl0aW9uIjogIkVOQUJMRShSRVNPVVJDRV9VU0FHRSkiLAogICAg
ICJkZWJ1Z2dhYmxlVHlwZXMiOiBbInBhZ2UiLCAid2ViLXBhZ2UiXSwKICAgICAidGFyZ2V0VHlw
ZXMiOiBbInBhZ2UiXSwKICAgICAidHlwZXMiOiBbCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL0NhbnZhcy5qc29uIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9DYW52YXMuanNvbgppbmRleCBhYjU0NDQwZjA0YS4u
NjA0NjAyZTUzNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
cHJvdG9jb2wvQ2FudmFzLmpzb24KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9wcm90b2NvbC9DYW52YXMuanNvbgpAQCAtMTEsNiArMTEsNyBAQAogICAgICAgICB9LAogICAg
ICAgICB7CiAgICAgICAgICAgICAiaWQiOiAiUHJvZ3JhbUlkIiwKKyAgICAgICAgICAgICJjb25k
aXRpb24iOiAiRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKSIsCiAgICAgICAgICAgICAi
dHlwZSI6ICJzdHJpbmciLAogICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBzaGFk
ZXIgcHJvZ3JhbSBpZGVudGlmaWVyLiIKICAgICAgICAgfSwKQEAgLTIyLDExICsyMywxMyBAQAog
ICAgICAgICB9LAogICAgICAgICB7CiAgICAgICAgICAgICAiaWQiOiAiUHJvZ3JhbVR5cGUiLAor
ICAgICAgICAgICAgImNvbmRpdGlvbiI6ICJFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUp
IiwKICAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCiAgICAgICAgICAgICAiZW51bSI6IFsi
Y29tcHV0ZSIsICJyZW5kZXIiXQogICAgICAgICB9LAogICAgICAgICB7CiAgICAgICAgICAgICAi
aWQiOiAiU2hhZGVyVHlwZSIsCisgICAgICAgICAgICAiY29uZGl0aW9uIjogIkVOQUJMRShXRUJH
TCkgfHwgRU5BQkxFKFdFQkdQVSkiLAogICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKICAg
ICAgICAgICAgICJlbnVtIjogWyJjb21wdXRlIiwgImZyYWdtZW50IiwgInZlcnRleCJdCiAgICAg
ICAgIH0sCkBAIC02MSw4ICs2NCw5IEBACiAgICAgICAgIH0sCiAgICAgICAgIHsKICAgICAgICAg
ICAgICJpZCI6ICJTaGFkZXJQcm9ncmFtIiwKLSAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIs
CiAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiSW5mb3JtYXRpb24gYWJvdXQgYSBXZWJHTC9X
ZWJHTDIgc2hhZGVyIHByb2dyYW0gb3IgV2ViR1BVIHNoYWRlciBwaXBlbGluZS4iLAorICAgICAg
ICAgICAgImNvbmRpdGlvbiI6ICJFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpIiwKKyAg
ICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCiAgICAgICAgICAgICAicHJvcGVydGllcyI6IFsK
ICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInByb2dyYW1JZCIsICIkcmVmIjogIlByb2dyYW1J
ZCIgfSwKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInByb2dyYW1UeXBlIiwgIiRyZWYiOiAi
UHJvZ3JhbVR5cGUiIH0sCkBAIC0xNDcsNiArMTUxLDcgQEAKICAgICAgICAgewogICAgICAgICAg
ICAgIm5hbWUiOiAicmVxdWVzdFNoYWRlclNvdXJjZSIsCiAgICAgICAgICAgICAiZGVzY3JpcHRp
b24iOiAiUmVxdWVzdHMgdGhlIHNvdXJjZSBvZiB0aGUgc2hhZGVyIG9mIHRoZSBnaXZlbiB0eXBl
IGZyb20gdGhlIHByb2dyYW0gd2l0aCB0aGUgZ2l2ZW4gaWQuIiwKKyAgICAgICAgICAgICJjb25k
aXRpb24iOiAiRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKSIsCiAgICAgICAgICAgICAi
cGFyYW1ldGVycyI6IFsKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInByb2dyYW1JZCIsICIk
cmVmIjogIlByb2dyYW1JZCIgfSwKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNoYWRlclR5
cGUiLCAiJHJlZiI6ICJTaGFkZXJUeXBlIiB9CkBAIC0xNTgsNiArMTYzLDcgQEAKICAgICAgICAg
ewogICAgICAgICAgICAgIm5hbWUiOiAidXBkYXRlU2hhZGVyIiwKICAgICAgICAgICAgICJkZXNj
cmlwdGlvbiI6ICJDb21waWxlcyBhbmQgbGlua3MgdGhlIHNoYWRlciB3aXRoIGlkZW50aWZpZXIg
YW5kIHR5cGUgd2l0aCB0aGUgZ2l2ZW4gc291cmNlIGNvZGUuIiwKKyAgICAgICAgICAgICJjb25k
aXRpb24iOiAiRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKSIsCiAgICAgICAgICAgICAi
cGFyYW1ldGVycyI6IFsKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInByb2dyYW1JZCIsICIk
cmVmIjogIlByb2dyYW1JZCIgfSwKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNoYWRlclR5
cGUiLCAiJHJlZiI6ICJTaGFkZXJUeXBlIiB9LApAQCAtMTY3LDYgKzE3Myw3IEBACiAgICAgICAg
IHsKICAgICAgICAgICAgICJuYW1lIjogInNldFNoYWRlclByb2dyYW1EaXNhYmxlZCIsCiAgICAg
ICAgICAgICAiZGVzY3JpcHRpb24iOiAiRW5hYmxlL2Rpc2FibGUgdGhlIHZpc2liaWxpdHkgb2Yg
dGhlIGdpdmVuIHNoYWRlciBwcm9ncmFtLiIsCisgICAgICAgICAgICAiY29uZGl0aW9uIjogIkVO
QUJMRShXRUJHTCkiLAogICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCiAgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJwcm9ncmFtSWQiLCAiJHJlZiI6ICJQcm9ncmFtSWQiIH0sCiAgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJkaXNhYmxlZCIsICJ0eXBlIjogImJvb2xlYW4iIH0KQEAgLTE3
NSw2ICsxODIsNyBAQAogICAgICAgICB7CiAgICAgICAgICAgICAibmFtZSI6ICJzZXRTaGFkZXJQ
cm9ncmFtSGlnaGxpZ2h0ZWQiLAogICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkVuYWJsZS9k
aXNhYmxlIGhpZ2hsaWdodGluZyBvZiB0aGUgZ2l2ZW4gc2hhZGVyIHByb2dyYW0uIiwKKyAgICAg
ICAgICAgICJjb25kaXRpb24iOiAiRU5BQkxFKFdFQkdMKSIsCiAgICAgICAgICAgICAicGFyYW1l
dGVycyI6IFsKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInByb2dyYW1JZCIsICIkcmVmIjog
IlByb2dyYW1JZCIgfSwKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImhpZ2hsaWdodGVkIiwg
InR5cGUiOiAiYm9vbGVhbiIgfQpAQCAtMjM4LDEyICsyNDYsMTQgQEAKICAgICAgICAgfSwKICAg
ICAgICAgewogICAgICAgICAgICAgIm5hbWUiOiAicHJvZ3JhbUNyZWF0ZWQiLAorICAgICAgICAg
ICAgImNvbmRpdGlvbiI6ICJFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpIiwKICAgICAg
ICAgICAgICJwYXJhbWV0ZXJzIjogWwogICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2hhZGVy
UHJvZ3JhbSIsICIkcmVmIjogIlNoYWRlclByb2dyYW0iIH0KICAgICAgICAgICAgIF0KICAgICAg
ICAgfSwKICAgICAgICAgewogICAgICAgICAgICAgIm5hbWUiOiAicHJvZ3JhbURlbGV0ZWQiLAor
ICAgICAgICAgICAgImNvbmRpdGlvbiI6ICJFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUp
IiwKICAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwogICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAicHJvZ3JhbUlkIiwgIiRyZWYiOiAiUHJvZ3JhbUlkIiB9CiAgICAgICAgICAgICBdCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL0RPTS5qc29u
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9ET00uanNvbgppbmRl
eCAzOGNiNDhiZWRmMi4uM2FhNGEyOGNjMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvRE9NLmpzb24KKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9wcm90b2NvbC9ET00uanNvbgpAQCAtMzk5LDYgKzM5OSwxNiBAQAogICAg
ICAgICB7CiAgICAgICAgICAgICAibmFtZSI6ICJzZXRJbnNwZWN0TW9kZUVuYWJsZWQiLAogICAg
ICAgICAgICAgImRlc2NyaXB0aW9uIjogIkVudGVycyB0aGUgJ2luc3BlY3QnIG1vZGUuIEluIHRo
aXMgbW9kZSwgZWxlbWVudHMgdGhhdCB1c2VyIGlzIGhvdmVyaW5nIG92ZXIgYXJlIGhpZ2hsaWdo
dGVkLiBCYWNrZW5kIHRoZW4gZ2VuZXJhdGVzICdpbnNwZWN0JyBjb21tYW5kIHVwb24gZWxlbWVu
dCBzZWxlY3Rpb24uIiwKKyAgICAgICAgICAgICJjb25kaXRpb24iOiAiUExBVEZPUk0oSU9TX0ZB
TUlMWSkiLAorICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJlbmFibGVkIiwgInR5cGUiOiAiYm9vbGVhbiIsICJkZXNjcmlwdGlvbiI6ICJUcnVl
IHRvIGVuYWJsZSBpbnNwZWN0aW9uIG1vZGUsIGZhbHNlIHRvIGRpc2FibGUgaXQuIiB9LAorICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAiaGlnaGxpZ2h0Q29uZmlnIiwgIiRyZWYiOiAiSGlnaGxp
Z2h0Q29uZmlnIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIkEgZGVzY3JpcHRv
ciBmb3IgdGhlIGhpZ2hsaWdodCBhcHBlYXJhbmNlIG9mIGhvdmVyZWQtb3ZlciBub2Rlcy4gTWF5
IGJlIG9taXR0ZWQgaWYgPGNvZGU+ZW5hYmxlZCA9PSBmYWxzZTwvY29kZT4uIiB9CisgICAgICAg
ICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogInNldElu
c3BlY3RNb2RlRW5hYmxlZCIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRW50ZXJzIHRo
ZSAnaW5zcGVjdCcgbW9kZS4gSW4gdGhpcyBtb2RlLCBlbGVtZW50cyB0aGF0IHVzZXIgaXMgaG92
ZXJpbmcgb3ZlciBhcmUgaGlnaGxpZ2h0ZWQuIEJhY2tlbmQgdGhlbiBnZW5lcmF0ZXMgJ2luc3Bl
Y3QnIGNvbW1hbmQgdXBvbiBlbGVtZW50IHNlbGVjdGlvbi4iLAorICAgICAgICAgICAgImNvbmRp
dGlvbiI6ICIhUExBVEZPUk0oSU9TX0ZBTUlMWSkiLAogICAgICAgICAgICAgInBhcmFtZXRlcnMi
OiBbCiAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJlbmFibGVkIiwgInR5cGUiOiAiYm9vbGVh
biIsICJkZXNjcmlwdGlvbiI6ICJUcnVlIHRvIGVuYWJsZSBpbnNwZWN0aW9uIG1vZGUsIGZhbHNl
IHRvIGRpc2FibGUgaXQuIiB9LAogICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiaGlnaGxpZ2h0
Q29uZmlnIiwgIiRyZWYiOiAiSGlnaGxpZ2h0Q29uZmlnIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRl
c2NyaXB0aW9uIjogIkEgZGVzY3JpcHRvciBmb3IgdGhlIGhpZ2hsaWdodCBhcHBlYXJhbmNlIG9m
IGhvdmVyZWQtb3ZlciBub2Rlcy4gTWF5IGJlIG9taXR0ZWQgaWYgPGNvZGU+ZW5hYmxlZCA9PSBm
YWxzZTwvY29kZT4uIiB9LApAQCAtNjg4LDYgKzY5OCw3IEBACiAgICAgICAgIHsKICAgICAgICAg
ICAgICJuYW1lIjogInBvd2VyRWZmaWNpZW50UGxheWJhY2tTdGF0ZUNoYW5nZWQiLAogICAgICAg
ICAgICAgImRlc2NyaXB0aW9uIjogIkNhbGxlZCB3aGVuIGFuIGVsZW1lbnQgZW50ZXJzL2V4aXRz
IGEgcG93ZXIgZWZmaWNpZW50IHBsYXliYWNrIHN0YXRlLiIsCisgICAgICAgICAgICAiY29uZGl0
aW9uIjogIkVOQUJMRShWSURFTykiLAogICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCiAgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJub2RlSWQiLCAiJHJlZiI6ICJOb2RlSWQiIH0sCiAgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAiJHJlZiI6ICJOZXR3b3JrLlRpbWVz
dGFtcCIgfSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJv
dG9jb2wvSW5kZXhlZERCLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3By
b3RvY29sL0luZGV4ZWREQi5qc29uCmluZGV4IDlkMjMwMDg5MzA3Li44NDNkMWE2ZGNiNCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9JbmRleGVk
REIuanNvbgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL0lu
ZGV4ZWREQi5qc29uCkBAIC0xLDYgKzEsNiBAQAogewogICAgICJkb21haW4iOiAiSW5kZXhlZERC
IiwKLSAgICAiZmVhdHVyZUd1YXJkIjogIkVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKSIsCisgICAg
ImNvbmRpdGlvbiI6ICJFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkiLAogICAgICJkZWJ1Z2dhYmxl
VHlwZXMiOiBbInBhZ2UiLCAid2ViLXBhZ2UiXSwKICAgICAidGFyZ2V0VHlwZXMiOiBbInBhZ2Ui
XSwKICAgICAidHlwZXMiOiBbCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3Byb3RvY29sL0luc3BlY3Rvci5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9wcm90b2NvbC9JbnNwZWN0b3IuanNvbgppbmRleCAyYmI4ZDYyODU1YS4uZmY5MmYz
ZTcwYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9j
b2wvSW5zcGVjdG9yLmpzb24KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9w
cm90b2NvbC9JbnNwZWN0b3IuanNvbgpAQCAtMzMsNiArMzMsNyBAQAogICAgICAgICB7CiAgICAg
ICAgICAgICAibmFtZSI6ICJhY3RpdmF0ZUV4dHJhRG9tYWlucyIsCiAgICAgICAgICAgICAiZGVz
Y3JpcHRpb24iOiAiRmlyZWQgd2hlbiB0aGUgYmFja2VuZCBoYXMgYWx0ZXJuYXRlIGRvbWFpbnMg
dGhhdCBuZWVkIHRvIGJlIGFjdGl2YXRlZC4iLAorICAgICAgICAgICAgImNvbmRpdGlvbiI6ICJF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykiLAogICAgICAgICAgICAgInBh
cmFtZXRlcnMiOiBbCiAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkb21haW5zIiwgInR5cGUi
OiAiYXJyYXkiLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSwgImRlc2NyaXB0aW9uIjog
IkRvbWFpbiBuYW1lcyB0aGF0IG5lZWQgYWN0aXZhdGlvbiIgfQogICAgICAgICAgICAgXQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9NZW1vcnku
anNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvTWVtb3J5Lmpz
b24KaW5kZXggMGMzZDkxNDM4NzEuLmY1YzlkYTFiMGYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL01lbW9yeS5qc29uCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvTWVtb3J5Lmpzb24KQEAgLTEsNyArMSw3
IEBACiB7CiAgICAgImRvbWFpbiI6ICJNZW1vcnkiLAogICAgICJkZXNjcmlwdGlvbiI6ICJNZW1v
cnkgZG9tYWluIGV4cG9zZXMgcGFnZSBtZW1vcnkgdHJhY2tpbmcuIiwKLSAgICAiZmVhdHVyZUd1
YXJkIjogIkVOQUJMRShSRVNPVVJDRV9VU0FHRSkiLAorICAgICJjb25kaXRpb24iOiAiRU5BQkxF
KFJFU09VUkNFX1VTQUdFKSIsCiAgICAgImRlYnVnZ2FibGVUeXBlcyI6IFsicGFnZSIsICJ3ZWIt
cGFnZSJdLAogICAgICJ0YXJnZXRUeXBlcyI6IFsicGFnZSJdLAogICAgICJ0eXBlcyI6IFsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvUGFnZS5q
c29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9QYWdlLmpzb24K
aW5kZXggZDI3NTEyYTRmMDAuLjVhYmZjOTQwNjVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL1BhZ2UuanNvbgorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL1BhZ2UuanNvbgpAQCAtNDUsNiArNDUsNyBAQAog
ICAgICAgICB7CiAgICAgICAgICAgICAiaWQiOiAiQXBwZWFyYW5jZSIsCiAgICAgICAgICAgICAi
dHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgImNvbmRpdGlvbiI6ICJFTkFCTEUoREFSS19N
T0RFX0NTUykgfHwgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkiLAogICAgICAgICAgICAgImVu
dW0iOiBbIkxpZ2h0IiwgIkRhcmsiXSwKICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJQYWdl
IGFwcGVhcmFuY2UgbmFtZS4iCiAgICAgICAgIH0sCkBAIC0yMjksNiArMjMwLDcgQEAKICAgICAg
ICAgewogICAgICAgICAgICAgIm5hbWUiOiAic2V0U2hvd1J1bGVycyIsCiAgICAgICAgICAgICAi
ZGVzY3JpcHRpb24iOiAiUmVxdWVzdHMgdGhhdCBiYWNrZW5kIGRyYXcgcnVsZXJzIGluIHRoZSBp
bnNwZWN0b3Igb3ZlcmxheSIsCisgICAgICAgICAgICAiY29uZGl0aW9uIjogIiFQTEFURk9STShJ
T1NfRkFNSUxZKSIsCiAgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKICAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInJlc3VsdCIsICJ0eXBlIjogImJvb2xlYW4iLCAiZGVzY3JpcHRpb24iOiAi
VHJ1ZSBmb3Igc2hvd2luZyBydWxlcnMiIH0KICAgICAgICAgICAgIF0KQEAgLTI1MCw2ICsyNTIs
NyBAQAogICAgICAgICB7CiAgICAgICAgICAgICAibmFtZSI6ICJzZXRGb3JjZWRBcHBlYXJhbmNl
IiwKICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJGb3JjZXMgdGhlIGdpdmVuIGFwcGVhcmFu
Y2UgZm9yIHRoZSBwYWdlLiIsCisgICAgICAgICAgICAiY29uZGl0aW9uIjogIkVOQUJMRShEQVJL
X01PREVfQ1NTKSB8fCBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKSIsCiAgICAgICAgICAgICAi
cGFyYW1ldGVycyI6IFsKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImFwcGVhcmFuY2UiLCAi
JHJlZiI6ICJBcHBlYXJhbmNlIiwgImRlc2NyaXB0aW9uIjogIkFwcGVhcmFuY2UgbmFtZSB0byBm
b3JjZS4gRW1wdHkgc3RyaW5nIGRpc2FibGVzIHRoZSBvdmVycmlkZS4iIH0KICAgICAgICAgICAg
IF0KQEAgLTI4MSw2ICsyODQsNyBAQAogICAgICAgICB7CiAgICAgICAgICAgICAibmFtZSI6ICJh
cmNoaXZlIiwKICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJHcmFiIGFuIGFyY2hpdmUgb2Yg
dGhlIHBhZ2UuIiwKKyAgICAgICAgICAgICJjb25kaXRpb24iOiAiRU5BQkxFKFdFQl9BUkNISVZF
KSAmJiBVU0UoQ0YpIiwKICAgICAgICAgICAgICJyZXR1cm5zIjogWwogICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAiZGF0YSIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJCYXNl
NjQtZW5jb2RlZCB3ZWIgYXJjaGl2ZS4iIH0KICAgICAgICAgICAgIF0KQEAgLTM0NSw2ICszNDks
NyBAQAogICAgICAgICB7CiAgICAgICAgICAgICAibmFtZSI6ICJkZWZhdWx0QXBwZWFyYW5jZURp
ZENoYW5nZSIsCiAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRmlyZWQgd2hlbiBwYWdlJ3Mg
ZGVmYXVsdCBhcHBlYXJhbmNlIGNoYW5nZXMsIGV2ZW4gaWYgdGhlcmUgaXMgYSBmb3JjZWQgYXBw
ZWFyYW5jZS4iLAorICAgICAgICAgICAgImNvbmRpdGlvbiI6ICJFTkFCTEUoREFSS19NT0RFX0NT
UykgfHwgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkiLAogICAgICAgICAgICAgInBhcmFtZXRl
cnMiOiBbCiAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJhcHBlYXJhbmNlIiwgIiRyZWYiOiAi
QXBwZWFyYW5jZSIsICJkZXNjcmlwdGlvbiI6ICJOYW1lIG9mIHRoZSBhcHBlYXJhbmNlIHRoYXQg
aXMgYWN0aXZlIChub3QgY29uc2lkZXJpbmcgYW55IGZvcmNlZCBhcHBlYXJhbmNlLikiIH0KICAg
ICAgICAgICAgIF0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
cHJvdG9jb2wvU2VydmljZVdvcmtlci5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9wcm90b2NvbC9TZXJ2aWNlV29ya2VyLmpzb24KaW5kZXggOGFjM2Q0ZjdkNmIuLjBjNTAz
MGZiNjg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3Rv
Y29sL1NlcnZpY2VXb3JrZXIuanNvbgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3Byb3RvY29sL1NlcnZpY2VXb3JrZXIuanNvbgpAQCAtMSw2ICsxLDcgQEAKIHsKICAgICAi
ZG9tYWluIjogIlNlcnZpY2VXb3JrZXIiLAogICAgICJkZXNjcmlwdGlvbiI6ICJBY3Rpb25zIGFu
ZCBldmVudHMgcmVsYXRlZCB0byB0aGUgaW5zcGVjdGVkIHNlcnZpY2Ugd29ya2VyLiIsCisgICAg
ImNvbmRpdGlvbiI6ICJFTkFCTEUoU0VSVklDRV9XT1JLRVIpIiwKICAgICAiZGVidWdnYWJsZVR5
cGVzIjogWyJzZXJ2aWNlLXdvcmtlciJdLAogICAgICJ0YXJnZXRUeXBlcyI6IFsic2VydmljZS13
b3JrZXIiXSwKICAgICAidHlwZXMiOiBbCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5l
cmF0b3JfdGVtcGxhdGVzLnB5CmluZGV4IDk2YjU1ZTQxNjJjLi5kMGM3YmU2ZDQ5MSAxMDA3NTUK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vY3Bw
X2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkKQEAgLTEwOCw3
ICsxMDgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVy
bmF0ZSR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikg
eyBtX2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9CiBwcml2YXRl
OgogICAgIEFsdGVybmF0ZSR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlciogbV9hbHRlcm5h
dGVEaXNwYXRjaGVyIHsgbnVsbHB0ciB9OwotI2VuZGlmIiIiKQorI2VuZGlmIC8vIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKSIiIikKIAogICAgIEJhY2tlbmREaXNwYXRj
aGVySGVhZGVyQXN5bmNDb21tYW5kRGVjbGFyYXRpb24gPSAoCiAgICAgIiIiICAgICR7Y2xhc3NB
bmRFeHBvcnRNYWNyb30gJHtjYWxsYmFja05hbWV9IDogcHVibGljIEJhY2tlbmREaXNwYXRjaGVy
OjpDYWxsYmFja0Jhc2UgewpAQCAtMTI3LDggKzEyNyw4IEBAIHByaXZhdGU6CiAgICAgbWVzc2Fn
ZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRlcnMpOwogCiAke2Rpc3BhdGNoQ2FzZXN9
Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVy
cm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIicke2RvbWFpbk5hbWV9LiIg
KyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CisKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwg
Iicke2RvbWFpbk5hbWV9LiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CiB9IiIiKQog
CiAgICAgQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkxhcmdlU3dpdGNoID0gKApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGVfY3BwX2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3Bw
X2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CmluZGV4IGU2Mjc4ODBlMTMz
Li5kY2QwYmYzNDdhZiAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNo
ZXJfaGVhZGVyLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9hbHRlcm5hdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRl
ci5weQpAQCAtODcsNyArODcsNyBAQCBjbGFzcyBDcHBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hl
ckhlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICAgICAgJ2NvbW1hbmREZWNs
YXJhdGlvbnMnOiAnXG4nLmpvaW4oY29tbWFuZF9kZWNsYXJhdGlvbnMpLAogICAgICAgICB9CiAK
LSAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCBU
ZW1wbGF0ZShDcHBUZW1wbGF0ZXMuQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJIZWFkZXJEb21h
aW5IYW5kbGVySW50ZXJmYWNlRGVjbGFyYXRpb24pLnN1YnN0aXR1dGUoTm9uZSwgKipoYW5kbGVy
X2FyZ3MpKQorICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlv
bihkb21haW4uY29uZGl0aW9uLCBUZW1wbGF0ZShDcHBUZW1wbGF0ZXMuQWx0ZXJuYXRlQmFja2Vu
ZERpc3BhdGNoZXJIZWFkZXJEb21haW5IYW5kbGVySW50ZXJmYWNlRGVjbGFyYXRpb24pLnN1YnN0
aXR1dGUoTm9uZSwgKipoYW5kbGVyX2FyZ3MpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9oYW5kbGVy
X2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKHNlbGYsIGNvbW1hbmQpOgogICAgICAgICBsaW5lcyA9
IFtdCkBAIC0xMDAsNCArMTAwLDQgQEAgY2xhc3MgQ3BwQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXJIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgICAgICdwYXJhbWV0ZXJz
JzogJywgJy5qb2luKHBhcmFtZXRlcnMpLAogICAgICAgICB9CiAgICAgICAgIGxpbmVzLmFwcGVu
ZCgnICAgIHZpcnR1YWwgdm9pZCAlKGNvbW1hbmROYW1lKXMoJShwYXJhbWV0ZXJzKXMpID0gMDsn
ICUgY29tbWFuZF9hcmdzKQotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorICAgICAg
ICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihjb21tYW5kLmNvbmRp
dGlvbiwgJ1xuJy5qb2luKGxpbmVzKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNo
ZXJfaGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKaW5kZXggZTNm
ZTRlMTAwNDIuLjEwZDhmMTRiZDVmIDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVy
X2hlYWRlci5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQpAQCAtOTEs
NyArOTEsNyBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihDcHBH
ZW5lcmF0b3IpOgogICAgICAgICBsaW5lcyA9IFtdCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnI2lm
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKScpCiAgICAgICAgIGZvciBk
b21haW4gaW4gZG9tYWluczoKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLndyYXBfd2l0
aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgJ2NsYXNzIEFsdGVybmF0ZSVzQmFja2VuZERpc3Bh
dGNoZXI7JyAlIGRvbWFpbi5kb21haW5fbmFtZSkpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQo
c2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9uLCAnY2xh
c3MgQWx0ZXJuYXRlJXNCYWNrZW5kRGlzcGF0Y2hlcjsnICUgZG9tYWluLmRvbWFpbl9uYW1lKSkK
ICAgICAgICAgbGluZXMuYXBwZW5kKCcjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpJykKICAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKIApAQCAt
MTEzLDcgKzExMyw3IEBAIGNsYXNzIENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9y
KENwcEdlbmVyYXRvcik6CiAgICAgICAgICAgICAnY29tbWFuZERlY2xhcmF0aW9ucyc6ICJcbiIu
am9pbihjb21tYW5kX2RlY2xhcmF0aW9ucykKICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiBz
ZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgVGVtcGxhdGUoQ3BwVGVtcGxh
dGVzLkJhY2tlbmREaXNwYXRjaGVySGVhZGVyRG9tYWluSGFuZGxlckRlY2xhcmF0aW9uKS5zdWJz
dGl0dXRlKE5vbmUsICoqaGFuZGxlcl9hcmdzKSkKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93
aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZG9tYWluLmNvbmRpdGlvbiwgVGVtcGxhdGUoQ3BwVGVt
cGxhdGVzLkJhY2tlbmREaXNwYXRjaGVySGVhZGVyRG9tYWluSGFuZGxlckRlY2xhcmF0aW9uKS5z
dWJzdGl0dXRlKE5vbmUsICoqaGFuZGxlcl9hcmdzKSkKIAogICAgIGRlZiBfZ2VuZXJhdGVfYW5v
bnltb3VzX2VudW1fZm9yX3BhcmFtZXRlcihzZWxmLCBwYXJhbWV0ZXIsIGNvbW1hbmQpOgogICAg
ICAgICBlbnVtX2FyZ3MgPSB7CkBAIC0xNjEsNyArMTYxLDcgQEAgY2xhc3MgQ3BwQmFja2VuZERp
c3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgICAgICdwYXJh
bWV0ZXJzJzogIiwgIi5qb2luKHBhcmFtZXRlcnMpCiAgICAgICAgIH0KICAgICAgICAgbGluZXMu
YXBwZW5kKCcgICAgdmlydHVhbCB2b2lkICUoY29tbWFuZE5hbWUpcyglKHBhcmFtZXRlcnMpcykg
PSAwOycgJSBjb21tYW5kX2FyZ3MpCi0gICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisg
ICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGNvbW1hbmQu
Y29uZGl0aW9uLCAnXG4nLmpvaW4obGluZXMpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9hc3luY19o
YW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKHNlbGYsIGNvbW1hbmQpOgogICAgICAgICBj
YWxsYmFja05hbWUgPSAiJXNDYWxsYmFjayIgJSB1Y2ZpcnN0KGNvbW1hbmQuY29tbWFuZF9uYW1l
KQpAQCAtMTkyLDcgKzE5Miw3IEBAIGNsYXNzIENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2Vu
ZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgICAgICAnb3V0UGFyYW1ldGVycyc6ICIsICIu
am9pbihvdXRfcGFyYW1ldGVycyksCiAgICAgICAgIH0KIAotICAgICAgICByZXR1cm4gVGVtcGxh
dGUoQ3BwVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVySGVhZGVyQXN5bmNDb21tYW5kRGVjbGFy
YXRpb24pLnN1YnN0aXR1dGUoTm9uZSwgKipjb21tYW5kX2FyZ3MpCisgICAgICAgIHJldHVybiBz
ZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGNvbW1hbmQuY29uZGl0aW9uLCBUZW1w
bGF0ZShDcHBUZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNoZXJIZWFkZXJBc3luY0NvbW1hbmREZWNs
YXJhdGlvbikuc3Vic3RpdHV0ZShOb25lLCAqKmNvbW1hbmRfYXJncykpCiAKICAgICBkZWYgX2dl
bmVyYXRlX2Rpc3BhdGNoZXJfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToK
ICAgICAgICAgY2xhc3NDb21wb25lbnRzID0gWydjbGFzcyddCkBAIC0yMjAsNyArMjIwLDcgQEAg
Y2xhc3MgQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToK
ICAgICAgICAgICAgICdjb21tYW5kRGVjbGFyYXRpb25zJzogIlxuIi5qb2luKGRlY2xhcmF0aW9u
cykKICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3Jf
ZG9tYWluKGRvbWFpbiwgVGVtcGxhdGUoQ3BwVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVySGVh
ZGVyRG9tYWluRGlzcGF0Y2hlckRlY2xhcmF0aW9uKS5zdWJzdGl0dXRlKE5vbmUsICoqaGFuZGxl
cl9hcmdzKSkKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRp
b24oZG9tYWluLmNvbmRpdGlvbiwgVGVtcGxhdGUoQ3BwVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRj
aGVySGVhZGVyRG9tYWluRGlzcGF0Y2hlckRlY2xhcmF0aW9uKS5zdWJzdGl0dXRlKE5vbmUsICoq
aGFuZGxlcl9hcmdzKSkKIAogICAgIGRlZiBfZ2VuZXJhdGVfZGlzcGF0Y2hlcl9kZWNsYXJhdGlv
bl9mb3JfY29tbWFuZChzZWxmLCBjb21tYW5kKToKLSAgICAgICAgcmV0dXJuICIgICAgdm9pZCAl
cyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsiICUg
Y29tbWFuZC5jb21tYW5kX25hbWUKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJk
X2Zvcl9jb25kaXRpb24oY29tbWFuZC5jb25kaXRpb24sICIgICAgdm9pZCAlcyhsb25nIHJlcXVl
c3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsiICUgY29tbWFuZC5jb21t
YW5kX25hbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0
aW9uLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQppbmRleCBh
MTU5NjFhNjQ3NC4uZGFmMTljOTUwZmIgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNo
ZXJfaW1wbGVtZW50YXRpb24ucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1l
bnRhdGlvbi5weQpAQCAtNjAsNyArNjAsNyBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hlcklt
cGxlbWVudGF0aW9uR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgICAgICBzZWNvbmRh
cnlfaW5jbHVkZXMuYXBwZW5kKCcnKQogICAgICAgICAgICAgc2Vjb25kYXJ5X2luY2x1ZGVzLmFw
cGVuZCgnI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKScpCiAgICAg
ICAgICAgICBzZWNvbmRhcnlfaW5jbHVkZXMuYXBwZW5kKCcjaW5jbHVkZSAiJXNBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlcnMuaCInICUgc2VsZi5wcm90b2NvbF9uYW1lKCkpCi0gICAgICAgICAg
ICBzZWNvbmRhcnlfaW5jbHVkZXMuYXBwZW5kKCcjZW5kaWYnKQorICAgICAgICAgICAgc2Vjb25k
YXJ5X2luY2x1ZGVzLmFwcGVuZCgnI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKScpCiAKICAgICAgICAgaGVhZGVyX2FyZ3MgPSB7CiAgICAgICAgICAgICAn
cHJpbWFyeUluY2x1ZGUnOiAnIiVzQmFja2VuZERpc3BhdGNoZXJzLmgiJyAlIHNlbGYucHJvdG9j
b2xfbmFtZSgpLApAQCAtOTMsNyArOTMsNyBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hlcklt
cGxlbWVudGF0aW9uR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgICAgICAnZG9tYWlu
TmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZQogICAgICAgICB9CiAgICAgICAgIGRlc3RydWN0b3Ig
PSAnJShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On4lKGRvbWFpbk5hbWUp
c0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfScgJSBkZXN0cnVjdG9yX2FyZ3MKLSAgICAg
ICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCBkZXN0cnVj
dG9yKQorICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihk
b21haW4uY29uZGl0aW9uLCBkZXN0cnVjdG9yKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9kaXNwYXRj
aGVyX2ltcGxlbWVudGF0aW9uc19mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6CiAgICAgICAgIGlt
cGxlbWVudGF0aW9ucyA9IFtdCkBAIC0xMTUsMTcgKzExNSwyOSBAQCBjbGFzcyBDcHBCYWNrZW5k
RGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAg
ICAgICAgICAgaW1wbGVtZW50YXRpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hc3luY19kaXNw
YXRjaGVyX2NsYXNzX2Zvcl9kb21haW4oY29tbWFuZCwgZG9tYWluKSkKICAgICAgICAgICAgIGlt
cGxlbWVudGF0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9pbXBsZW1lbnRh
dGlvbl9mb3JfY29tbWFuZChjb21tYW5kLCBkb21haW4pKQogCi0gICAgICAgIHJldHVybiBzZWxm
LndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgJ1xuXG4nLmpvaW4oaW1wbGVtZW50
YXRpb25zKSkKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRp
b24oZG9tYWluLmNvbmRpdGlvbiwgJ1xuXG4nLmpvaW4oaW1wbGVtZW50YXRpb25zKSkKIAogICAg
IGRlZiBfZ2VuZXJhdGVfc21hbGxfZGlzcGF0Y2hlcl9zd2l0Y2hfaW1wbGVtZW50YXRpb25fZm9y
X2RvbWFpbihzZWxmLCBkb21haW4pOgogICAgICAgICBjb21tYW5kcyA9IHNlbGYuY29tbWFuZHNf
Zm9yX2RvbWFpbihkb21haW4pCiAKICAgICAgICAgY2FzZXMgPSBbXQotICAgICAgICBjYXNlcy5h
cHBlbmQoJyAgICBpZiAobWV0aG9kID09ICIlcyIpJyAlIGNvbW1hbmRzWzBdLmNvbW1hbmRfbmFt
ZSkKLSAgICAgICAgY2FzZXMuYXBwZW5kKCcgICAgICAgICVzKHJlcXVlc3RJZCwgV1RGTW92ZShw
YXJhbWV0ZXJzKSk7JyAlIGNvbW1hbmRzWzBdLmNvbW1hbmRfbmFtZSkKKworICAgICAgICBmaXJz
dF9jb21tYW5kX3N0cmluZyA9ICJcbiIuam9pbihbCisgICAgICAgICAgICAnICAgIGlmIChtZXRo
b2QgPT0gIiVzIikgeycgJSBjb21tYW5kc1swXS5jb21tYW5kX25hbWUsCisgICAgICAgICAgICAn
ICAgICAgICAlcyhyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOycgJSBjb21tYW5kc1sw
XS5jb21tYW5kX25hbWUsCisgICAgICAgICAgICAnICAgICAgICByZXR1cm47JywKKyAgICAgICAg
ICAgICcgICAgfScsCisgICAgICAgIF0pCisgICAgICAgIGNhc2VzLmFwcGVuZChzZWxmLndyYXBf
d2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGNvbW1hbmRzWzBdLmNvbmRpdGlvbiwgZmlyc3RfY29t
bWFuZF9zdHJpbmcpKQorCiAgICAgICAgIGZvciBjb21tYW5kIGluIGNvbW1hbmRzWzE6XToKLSAg
ICAgICAgICAgIGNhc2VzLmFwcGVuZCgnICAgIGVsc2UgaWYgKG1ldGhvZCA9PSAiJXMiKScgJSBj
b21tYW5kLmNvbW1hbmRfbmFtZSkKLSAgICAgICAgICAgIGNhc2VzLmFwcGVuZCgnICAgICAgICAl
cyhyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOycgJSBjb21tYW5kLmNvbW1hbmRfbmFt
ZSkKKyAgICAgICAgICAgIGFkZGl0aW9uYWxfY29tbWFuZF9zdHJpbmcgPSAiXG4iLmpvaW4oWwor
ICAgICAgICAgICAgICAgICcgICAgaWYgKG1ldGhvZCA9PSAiJXMiKSB7JyAlIGNvbW1hbmQuY29t
bWFuZF9uYW1lLAorICAgICAgICAgICAgICAgICcgICAgICAgICVzKHJlcXVlc3RJZCwgV1RGTW92
ZShwYXJhbWV0ZXJzKSk7JyAlIGNvbW1hbmQuY29tbWFuZF9uYW1lLAorICAgICAgICAgICAgICAg
ICcgICAgICAgIHJldHVybjsnLAorICAgICAgICAgICAgICAgICcgICAgfScsCisgICAgICAgICAg
ICBdKQorICAgICAgICAgICAgY2FzZXMuYXBwZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9j
b25kaXRpb24oY29tbWFuZC5jb25kaXRpb24sIGFkZGl0aW9uYWxfY29tbWFuZF9zdHJpbmcpKQog
CiAgICAgICAgIHN3aXRjaF9hcmdzID0gewogICAgICAgICAgICAgJ2RvbWFpbk5hbWUnOiBkb21h
aW4uZG9tYWluX25hbWUsCkBAIC0xNDMsNyArMTU1LDcgQEAgY2xhc3MgQ3BwQmFja2VuZERpc3Bh
dGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICAgICAg
ICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLAogICAgICAgICAgICAgICAgICdj
b21tYW5kTmFtZSc6IGNvbW1hbmQuY29tbWFuZF9uYW1lCiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBjYXNlcy5hcHBlbmQoJyAgICAgICAgICAgIHsgIiUoY29tbWFuZE5hbWUpcyIsICYlKGRv
bWFpbk5hbWUpc0JhY2tlbmREaXNwYXRjaGVyOjolKGNvbW1hbmROYW1lKXMgfSwnICUgYXJncykK
KyAgICAgICAgICAgIGNhc2VzLmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0
aW9uKGNvbW1hbmQuY29uZGl0aW9uLCAnICAgICAgICAgICAgeyAiJShjb21tYW5kTmFtZSlzIiwg
JiUoZG9tYWluTmFtZSlzQmFja2VuZERpc3BhdGNoZXI6OiUoY29tbWFuZE5hbWUpcyB9LCcgJSBh
cmdzKSkKIAogICAgICAgICBzd2l0Y2hfYXJncyA9IHsKICAgICAgICAgICAgICdkb21haW5OYW1l
JzogZG9tYWluLmRvbWFpbl9uYW1lLApAQCAtMTg1LDcgKzE5Nyw3IEBAIGNsYXNzIENwcEJhY2tl
bmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAg
ICAgICAgICdmb3JtYWxQYXJhbWV0ZXJzJzogIiwgIi5qb2luKGZvcm1hbF9wYXJhbWV0ZXJzKSwK
ICAgICAgICAgICAgICdvdXRQYXJhbWV0ZXJBc3NpZ25tZW50cyc6ICJcbiIuam9pbihvdXRfcGFy
YW1ldGVyX2Fzc2lnbm1lbnRzKQogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBUZW1wbGF0ZShD
cHBUZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkFzeW5jQ29tbWFuZCku
c3Vic3RpdHV0ZShOb25lLCAqKmFzeW5jX2FyZ3MpCisgICAgICAgIHJldHVybiBzZWxmLndyYXBf
d2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGNvbW1hbmQuY29uZGl0aW9uLCBUZW1wbGF0ZShDcHBU
ZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkFzeW5jQ29tbWFuZCkuc3Vi
c3RpdHV0ZShOb25lLCAqKmFzeW5jX2FyZ3MpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9kaXNwYXRj
aGVyX2ltcGxlbWVudGF0aW9uX2Zvcl9jb21tYW5kKHNlbGYsIGNvbW1hbmQsIGRvbWFpbik6CiAg
ICAgICAgIGluX3BhcmFtZXRlcl9kZWNsYXJhdGlvbnMgPSBbXQpAQCAtMzA0LDcgKzMxNiw3IEBA
IGNsYXNzIENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoQ3BwR2Vu
ZXJhdG9yKToKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBtX2FsdGVybmF0ZURp
c3BhdGNoZXItPiUoY29tbWFuZE5hbWUpcyglKGFsdGVybmF0ZUludm9jYXRpb25QYXJhbWV0ZXJz
KXMpOycgJSBjb21tYW5kX2FyZ3MpCiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAg
cmV0dXJuOycpCiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICB9JykKLSAgICAgICAgICAg
IGxpbmVzLmFwcGVuZCgnI2VuZGlmJykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnI2VuZGlm
IC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKScpCiAgICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoJycpCiAKICAgICAgICAgaWYgY29tbWFuZC5pc19hc3luYzoKQEAgLTMz
NCw0ICszNDYsNCBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2Vu
ZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hl
cjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsnKQogCiAgICAgICAgIGxpbmVzLmFwcGVu
ZCgnfScpCi0gICAgICAgIHJldHVybiAiXG4iLmpvaW4obGluZXMpCisgICAgICAgIHJldHVybiBz
ZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGNvbW1hbmQuY29uZGl0aW9uLCAiXG4i
LmpvaW4obGluZXMpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVy
LnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2Vu
ZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CmluZGV4IDVjZjc0Nzg1NDMz
Li4xMTlkMjNjMzhjZCAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVy
LnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L2dlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlci5weQpAQCAtMTExLDcgKzEx
MSw3IEBAIGNsYXNzIENwcEZyb250ZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihDcHBHZW5l
cmF0b3IpOgogICAgICAgICAgICAgJ2V2ZW50RGVjbGFyYXRpb25zJzogIlxuIi5qb2luKGV2ZW50
X2RlY2xhcmF0aW9ucykKICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0
aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgVGVtcGxhdGUoQ3BwVGVtcGxhdGVzLkZyb250ZW5k
RGlzcGF0Y2hlckRvbWFpbkRpc3BhdGNoZXJEZWNsYXJhdGlvbikuc3Vic3RpdHV0ZShOb25lLCAq
KmhhbmRsZXJfYXJncykpCisgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3Jf
Y29uZGl0aW9uKGRvbWFpbi5jb25kaXRpb24sIFRlbXBsYXRlKENwcFRlbXBsYXRlcy5Gcm9udGVu
ZERpc3BhdGNoZXJEb21haW5EaXNwYXRjaGVyRGVjbGFyYXRpb24pLnN1YnN0aXR1dGUoTm9uZSwg
KipoYW5kbGVyX2FyZ3MpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9kaXNwYXRjaGVyX2RlY2xhcmF0
aW9uX2Zvcl9ldmVudChzZWxmLCBldmVudCwgZG9tYWluLCB1c2VkX2VudW1fbmFtZXMpOgogICAg
ICAgICBmb3JtYWxfcGFyYW1ldGVycyA9IFtdCkBAIC0xMjMsNCArMTIzLDQgQEAgY2xhc3MgQ3Bw
RnJvbnRlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAg
ICAgICAgICAgdXNlZF9lbnVtX25hbWVzLmFkZChwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpCiAK
ICAgICAgICAgbGluZXMuYXBwZW5kKCIgICAgdm9pZCAlcyglcyk7IiAlIChldmVudC5ldmVudF9u
YW1lLCAiLCAiLmpvaW4oZm9ybWFsX3BhcmFtZXRlcnMpKSkKLSAgICAgICAgcmV0dXJuICJcbiIu
am9pbihsaW5lcykKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25k
aXRpb24oZXZlbnQuY29uZGl0aW9uLCAiXG4iLmpvaW4obGluZXMpKQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3Bw
X2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlz
cGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQppbmRleCA5MDRkMjI3YTZlOS4uNjZkYzZlMTg1Y2Yg
MTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5Cisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CkBAIC04Miw3ICs4
Miw3IEBAIGNsYXNzIENwcEZyb250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9y
KENwcEdlbmVyYXRvcik6CiAgICAgICAgIGZvciBldmVudCBpbiBldmVudHM6CiAgICAgICAgICAg
ICBpbXBsZW1lbnRhdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVt
ZW50YXRpb25fZm9yX2V2ZW50KGV2ZW50LCBkb21haW4pKQogCi0gICAgICAgIHJldHVybiBzZWxm
LndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgJ1xuXG4nLmpvaW4oaW1wbGVtZW50
YXRpb25zKSkKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRp
b24oZG9tYWluLmNvbmRpdGlvbiwgJ1xuXG4nLmpvaW4oaW1wbGVtZW50YXRpb25zKSkKIAogICAg
IGRlZiBfZ2VuZXJhdGVfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbl9mb3JfZXZlbnQoc2VsZiwg
ZXZlbnQsIGRvbWFpbik6CiAgICAgICAgIGxpbmVzID0gW10KQEAgLTEzMSw0ICsxMzEsNCBAQCBj
bGFzcyBDcHBGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihDcHBHZW5l
cmF0b3IpOgogICAgICAgICBsaW5lcy5hcHBlbmQoJycpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgn
ICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmco
KSk7JykKICAgICAgICAgbGluZXMuYXBwZW5kKCd9JykKLSAgICAgICAgcmV0dXJuICJcbiIuam9p
bihsaW5lcykKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRp
b24oZXZlbnQuY29uZGl0aW9uLCAiXG4iLmpvaW4obGluZXMpKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3By
b3RvY29sX3R5cGVzX2hlYWRlci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19oZWFkZXIucHkKaW5k
ZXggNDIzZDdhMjMwMDguLjVlMGE2ZjU2OTFlIDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlw
ZXNfaGVhZGVyLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19oZWFkZXIucHkKQEAgLTEwNSw3
ICsxMDUsNyBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9yKENwcEdlbmVy
YXRvcik6CiAgICAgICAgICAgICAgICAgZG9tYWluX2xpbmVzLmFwcGVuZCgnc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBWRVJTSU9OID0gJXM7JyAlIHZlcnNpb24pCiAKICAgICAgICAgICAgIGRv
bWFpbl9saW5lcy5hcHBlbmQoJ30gLy8gJXMnICUgZG9tYWluLmRvbWFpbl9uYW1lKQotICAgICAg
ICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9t
YWluLCAnXG4nLmpvaW4oZG9tYWluX2xpbmVzKSkpCisgICAgICAgICAgICBzZWN0aW9ucy5hcHBl
bmQoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9uLCAn
XG4nLmpvaW4oZG9tYWluX2xpbmVzKSkpCiAKICAgICAgICAgaWYgbGVuKHNlY3Rpb25zKSA9PSAw
OgogICAgICAgICAgICAgcmV0dXJuICcnCkBAIC0xMzIsMTAgKzEzMiwxMCBAQCBjbGFzcyBDcHBQ
cm90b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgICAgICBk
b21haW5fbGluZXMuYXBwZW5kKCduYW1lc3BhY2UgJXMgeycgJSBkb21haW4uZG9tYWluX25hbWUp
CiAKICAgICAgICAgICAgICMgRm9yd2FyZC1kZWNsYXJlIGFsbCBjbGFzc2VzIHNvIHRoZSB0eXBl
IGJ1aWxkZXJzIHdvbid0IGJyZWFrIGlmIHJlYXJyYW5nZWQuCi0gICAgICAgICAgICBkb21haW5f
bGluZXMuZXh0ZW5kKCdjbGFzcyAlczsnICUgb2JqZWN0X3R5cGUucmF3X25hbWUoKSBmb3Igb2Jq
ZWN0X3R5cGUgaW4gb2JqZWN0X3R5cGVzKQotICAgICAgICAgICAgZG9tYWluX2xpbmVzLmV4dGVu
ZCgnZW51bSBjbGFzcyAlczsnICUgZW51bV90eXBlLnJhd19uYW1lKCkgZm9yIGVudW1fdHlwZSBp
biBlbnVtX3R5cGVzKQorICAgICAgICAgICAgZG9tYWluX2xpbmVzLmV4dGVuZChzZWxmLndyYXBf
d2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKG9iamVjdF90eXBlLmRlY2xhcmF0aW9uKCkuY29uZGl0
aW9uLCAnY2xhc3MgJXM7JyAlIG9iamVjdF90eXBlLnJhd19uYW1lKCkpIGZvciBvYmplY3RfdHlw
ZSBpbiBvYmplY3RfdHlwZXMpCisgICAgICAgICAgICBkb21haW5fbGluZXMuZXh0ZW5kKHNlbGYu
d3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZW51bV90eXBlLmRlY2xhcmF0aW9uKCkuY29u
ZGl0aW9uLCAnZW51bSBjbGFzcyAlczsnICUgZW51bV90eXBlLnJhd19uYW1lKCkpIGZvciBlbnVt
X3R5cGUgaW4gZW51bV90eXBlcykKICAgICAgICAgICAgIGRvbWFpbl9saW5lcy5hcHBlbmQoJ30g
Ly8gJXMnICUgZG9tYWluLmRvbWFpbl9uYW1lKQotICAgICAgICAgICAgc2VjdGlvbnMuYXBwZW5k
KHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCAnXG4nLmpvaW4oZG9tYWlu
X2xpbmVzKSkpCisgICAgICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi53cmFwX3dpdGhfZ3Vh
cmRfZm9yX2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9uLCAnXG4nLmpvaW4oZG9tYWluX2xpbmVz
KSkpCiAKICAgICAgICAgaWYgbGVuKHNlY3Rpb25zKSA9PSAwOgogICAgICAgICAgICAgcmV0dXJu
ICcnCkBAIC0xNzAsNyArMTcwLDcgQEAgY2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0hlYWRlckdlbmVy
YXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICAgICAgaWYgbGVuKGRlY2xhcmF0aW9uLmRlc2Ny
aXB0aW9uKSA+IDA6CiAgICAgICAgICAgICAgICAgdHlwZWRlZl9saW5lcy5hcHBlbmQoJy8qICVz
ICovJyAlIGRlY2xhcmF0aW9uLmRlc2NyaXB0aW9uKQogICAgICAgICAgICAgdHlwZWRlZl9saW5l
cy5hcHBlbmQoJ3R5cGVkZWYgJXMgJXM7JyAlIChwcmltaXRpdmVfbmFtZSwgZGVjbGFyYXRpb24u
dHlwZV9uYW1lKSkKLSAgICAgICAgICAgIHNlY3Rpb25zLmFwcGVuZCgnXG4nLmpvaW4odHlwZWRl
Zl9saW5lcykpCisgICAgICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi53cmFwX3dpdGhfZ3Vh
cmRfZm9yX2NvbmRpdGlvbihkZWNsYXJhdGlvbi5jb25kaXRpb24sICdcbicuam9pbih0eXBlZGVm
X2xpbmVzKSkpCiAKICAgICAgICAgZm9yIGRlY2xhcmF0aW9uIGluIGFycmF5X2RlY2xhcmF0aW9u
czoKICAgICAgICAgICAgIGVsZW1lbnRfdHlwZSA9IENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xf
dHlwZV9mb3JfdHlwZShkZWNsYXJhdGlvbi50eXBlLmVsZW1lbnRfdHlwZSkKQEAgLTE3OCwxMyAr
MTc4LDEzIEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJh
dG9yKToKICAgICAgICAgICAgIGlmIGxlbihkZWNsYXJhdGlvbi5kZXNjcmlwdGlvbikgPiAwOgog
ICAgICAgICAgICAgICAgIHR5cGVkZWZfbGluZXMuYXBwZW5kKCcvKiAlcyAqLycgJSBkZWNsYXJh
dGlvbi5kZXNjcmlwdGlvbikKICAgICAgICAgICAgIHR5cGVkZWZfbGluZXMuYXBwZW5kKCd0eXBl
ZGVmIEpTT046OkFycmF5T2Y8JXM+ICVzOycgJSAoZWxlbWVudF90eXBlLCBkZWNsYXJhdGlvbi50
eXBlX25hbWUpKQotICAgICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCdcbicuam9pbih0eXBlZGVm
X2xpbmVzKSkKKyAgICAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFy
ZF9mb3JfY29uZGl0aW9uKGRlY2xhcmF0aW9uLmNvbmRpdGlvbiwgJ1xuJy5qb2luKHR5cGVkZWZf
bGluZXMpKSkKIAogICAgICAgICBsaW5lcyA9IFtdCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnbmFt
ZXNwYWNlICVzIHsnICUgZG9tYWluLmRvbWFpbl9uYW1lKQogICAgICAgICBsaW5lcy5hcHBlbmQo
J1xuJy5qb2luKHNlY3Rpb25zKSkKICAgICAgICAgbGluZXMuYXBwZW5kKCd9IC8vICVzJyAlIGRv
bWFpbi5kb21haW5fbmFtZSkKLSAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zv
cl9kb21haW4oZG9tYWluLCAnXG4nLmpvaW4obGluZXMpKQorICAgICAgICByZXR1cm4gc2VsZi53
cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9uLCAnXG4nLmpvaW4o
bGluZXMpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9lbnVtX2NvbnN0YW50X3ZhbHVlX2NvbnZlcnNp
b25fbWV0aG9kcyhzZWxmKToKICAgICAgICAgaWYgbm90IHNlbGYuYXNzaWduZWRfZW51bV92YWx1
ZXMoKToKQEAgLTIyNyw3ICsyMjcsNyBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVzSGVhZGVyR2Vu
ZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgIGxpbmVzLmFwcGVuZCgnbmFtZXNwYWNlICVz
IHsnICUgZG9tYWluLmRvbWFpbl9uYW1lKQogICAgICAgICBsaW5lcy5hcHBlbmQoJ1xuJy5qb2lu
KHNlY3Rpb25zKSkKICAgICAgICAgbGluZXMuYXBwZW5kKCd9IC8vICVzJyAlIGRvbWFpbi5kb21h
aW5fbmFtZSkKLSAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4o
ZG9tYWluLCAnXG4nLmpvaW4obGluZXMpKQorICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhf
Z3VhcmRfZm9yX2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9uLCAnXG4nLmpvaW4obGluZXMpKQog
CiAgICAgZGVmIF9nZW5lcmF0ZV9jbGFzc19mb3Jfb2JqZWN0X2RlY2xhcmF0aW9uKHNlbGYsIHR5
cGVfZGVjbGFyYXRpb24sIGRvbWFpbik6CiAgICAgICAgIGlmIGxlbih0eXBlX2RlY2xhcmF0aW9u
LnR5cGVfbWVtYmVycykgPT0gMDoKQEAgLTI3OSwxMyArMjc5LDEzIEBAIGNsYXNzIENwcFByb3Rv
Y29sVHlwZXNIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKIAogICAgICAgICBsaW5lcy5h
cHBlbmQoJ307JykKICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQotICAgICAgICByZXR1cm4gJ1xu
Jy5qb2luKGxpbmVzKQorICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2Nv
bmRpdGlvbih0eXBlX2RlY2xhcmF0aW9uLmNvbmRpdGlvbiwgJ1xuJy5qb2luKGxpbmVzKSkKIAog
ICAgIGRlZiBfZ2VuZXJhdGVfc3RydWN0X2Zvcl9lbnVtX2RlY2xhcmF0aW9uKHNlbGYsIGVudW1f
ZGVjbGFyYXRpb24pOgogICAgICAgICBsaW5lcyA9IFtdCiAgICAgICAgIGxpbmVzLmFwcGVuZCgn
LyogJXMgKi8nICUgZW51bV9kZWNsYXJhdGlvbi5kZXNjcmlwdGlvbikKICAgICAgICAgbGluZXMu
ZXh0ZW5kKHNlbGYuX2dlbmVyYXRlX3N0cnVjdF9mb3JfZW51bV90eXBlKGVudW1fZGVjbGFyYXRp
b24udHlwZV9uYW1lLCBlbnVtX2RlY2xhcmF0aW9uLnR5cGUpKQotICAgICAgICByZXR1cm4gJ1xu
Jy5qb2luKGxpbmVzKQorICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2Nv
bmRpdGlvbihlbnVtX2RlY2xhcmF0aW9uLmNvbmRpdGlvbiwgJ1xuJy5qb2luKGxpbmVzKSkKIAog
ICAgIGRlZiBfZ2VuZXJhdGVfc3RydWN0X2Zvcl9hbm9ueW1vdXNfZW51bV9tZW1iZXIoc2VsZiwg
ZW51bV9tZW1iZXIpOgogICAgICAgICBkZWYgYXBwbHlfaW5kZW50YXRpb24obGluZSk6CkBAIC0z
ODEsMTAgKzM4MSwxMCBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9yKENw
cEdlbmVyYXRvcik6CiAgICAgICAgICAgICBmb3IgdHlwZV9kZWNsYXJhdGlvbiBpbiBkZWNsYXJh
dGlvbnNfdG9fZ2VuZXJhdGU6CiAgICAgICAgICAgICAgICAgZm9yIHR5cGVfbWVtYmVyIGluIHR5
cGVfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzOgogICAgICAgICAgICAgICAgICAgICBpZiBpc2lu
c3RhbmNlKHR5cGVfbWVtYmVyLnR5cGUsIEVudW1UeXBlKToKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHR5cGVfYXJndW1lbnRzLmFwcGVuZCgoQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBl
X2Zvcl90eXBlX21lbWJlcih0eXBlX21lbWJlciwgdHlwZV9kZWNsYXJhdGlvbiksIEZhbHNlKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVfYXJndW1lbnRzLmFwcGVuZCgoc2VsZi53cmFw
X3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbih0eXBlX2RlY2xhcmF0aW9uLmNvbmRpdGlvbiwgQ3Bw
R2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlX21lbWJlcih0eXBlX21lbWJlciwg
dHlwZV9kZWNsYXJhdGlvbikpLCBGYWxzZSkpCiAKICAgICAgICAgICAgICAgICBpZiBpc2luc3Rh
bmNlKHR5cGVfZGVjbGFyYXRpb24udHlwZSwgT2JqZWN0VHlwZSk6Ci0gICAgICAgICAgICAgICAg
ICAgIHR5cGVfYXJndW1lbnRzLmFwcGVuZCgoQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBl
X2Zvcl90eXBlKHR5cGVfZGVjbGFyYXRpb24udHlwZSksIEdlbmVyYXRvci50eXBlX25lZWRzX3J1
bnRpbWVfY2FzdHModHlwZV9kZWNsYXJhdGlvbi50eXBlKSkpCisgICAgICAgICAgICAgICAgICAg
IHR5cGVfYXJndW1lbnRzLmFwcGVuZCgoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlv
bih0eXBlX2RlY2xhcmF0aW9uLmNvbmRpdGlvbiwgQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90
eXBlX2Zvcl90eXBlKHR5cGVfZGVjbGFyYXRpb24udHlwZSkpLCBHZW5lcmF0b3IudHlwZV9uZWVk
c19ydW50aW1lX2Nhc3RzKHR5cGVfZGVjbGFyYXRpb24udHlwZSkpKQogCiAgICAgICAgIHN0cnVj
dF9rZXl3b3JkcyA9IFsnc3RydWN0J10KICAgICAgICAgZnVuY3Rpb25fa2V5d29yZHMgPSBbJ3N0
YXRpYyB2b2lkJ10KQEAgLTQzNywxOSArNDM3LDIwIEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNI
ZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgICAgIGRvbWFpbl9saW5lcy5h
cHBlbmQoIi8vIEVudW1zIGluIHRoZSAnJXMnIERvbWFpbiIgJSBkb21haW4uZG9tYWluX25hbWUp
CiAgICAgICAgICAgICBmb3IgZW51bV90eXBlIGluIGVudW1fdHlwZXM6CiAgICAgICAgICAgICAg
ICAgY3BwX3Byb3RvY29sX3R5cGUgPSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9y
X3R5cGUoZW51bV90eXBlKQotICAgICAgICAgICAgICAgIGRvbWFpbl9saW5lcy5hcHBlbmQoJ3Rl
bXBsYXRlPD4nKQotICAgICAgICAgICAgICAgIGRvbWFpbl9saW5lcy5hcHBlbmQoJyVzIHBhcnNl
RW51bVZhbHVlRnJvbVN0cmluZzwlcz4oY29uc3QgU3RyaW5nJik7JyAlIChyZXR1cm5fdHlwZV93
aXRoX2V4cG9ydF9tYWNybyhjcHBfcHJvdG9jb2xfdHlwZSksIGNwcF9wcm90b2NvbF90eXBlKSkK
KyAgICAgICAgICAgICAgICBkb21haW5fbGluZXMuYXBwZW5kKHNlbGYud3JhcF93aXRoX2d1YXJk
X2Zvcl9jb25kaXRpb24oZW51bV90eXBlLmRlY2xhcmF0aW9uKCkuY29uZGl0aW9uLCAndGVtcGxh
dGU8PlxuJXMgcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPCVzPihjb25zdCBTdHJpbmcmKTsnICUg
KHJldHVybl90eXBlX3dpdGhfZXhwb3J0X21hY3JvKGNwcF9wcm90b2NvbF90eXBlKSwgY3BwX3By
b3RvY29sX3R5cGUpKSkKIAogICAgICAgICAgICAgZm9yIG9iamVjdF90eXBlIGluIG9iamVjdF90
eXBlczoKKyAgICAgICAgICAgICAgICBvYmplY3RfbGluZXMgPSBbXQogICAgICAgICAgICAgICAg
IGZvciBlbnVtX21lbWJlciBpbiBmaWx0ZXIodHlwZV9tZW1iZXJfaXNfYW5vbnltb3VzX2VudW1f
dHlwZSwgb2JqZWN0X3R5cGUubWVtYmVycyk6CiAgICAgICAgICAgICAgICAgICAgIGNwcF9wcm90
b2NvbF90eXBlID0gQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlX21lbWJl
cihlbnVtX21lbWJlciwgb2JqZWN0X3R5cGUuZGVjbGFyYXRpb24oKSkKLSAgICAgICAgICAgICAg
ICAgICAgZG9tYWluX2xpbmVzLmFwcGVuZCgndGVtcGxhdGU8PicpCi0gICAgICAgICAgICAgICAg
ICAgIGRvbWFpbl9saW5lcy5hcHBlbmQoJyVzIHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzwlcz4o
Y29uc3QgU3RyaW5nJik7JyAlIChyZXR1cm5fdHlwZV93aXRoX2V4cG9ydF9tYWNybyhjcHBfcHJv
dG9jb2xfdHlwZSksIGNwcF9wcm90b2NvbF90eXBlKSkKKyAgICAgICAgICAgICAgICAgICAgb2Jq
ZWN0X2xpbmVzLmFwcGVuZCgndGVtcGxhdGU8PlxuJXMgcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5n
PCVzPihjb25zdCBTdHJpbmcmKTsnICUgKHJldHVybl90eXBlX3dpdGhfZXhwb3J0X21hY3JvKGNw
cF9wcm90b2NvbF90eXBlKSwgY3BwX3Byb3RvY29sX3R5cGUpKQorICAgICAgICAgICAgICAgIGlm
IGxlbihvYmplY3RfbGluZXMpOgorICAgICAgICAgICAgICAgICAgICBkb21haW5fbGluZXMuYXBw
ZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24ob2JqZWN0X3R5cGUuZGVjbGFy
YXRpb24oKS5jb25kaXRpb24sICdcbicuam9pbihvYmplY3RfbGluZXMpKSkKIAogICAgICAgICAg
ICAgaWYgbGVuKGRvbWFpbl9saW5lcykgPT0gMToKICAgICAgICAgICAgICAgICBjb250aW51ZSAg
IyBObyByZWFsIGRlY2xhcmF0aW9ucyB0byBlbWl0LCBqdXN0IHRoZSBkb21haW4gY29tbWVudC4g
U2tpcC4KIAotICAgICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYud3JhcF93aXRoX2d1YXJk
X2Zvcl9kb21haW4oZG9tYWluLCAnXG4nLmpvaW4oZG9tYWluX2xpbmVzKSkpCisgICAgICAgICAg
ICBzZWN0aW9ucy5hcHBlbmQoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihkb21h
aW4uY29uZGl0aW9uLCAnXG4nLmpvaW4oZG9tYWluX2xpbmVzKSkpCiAKICAgICAgICAgaWYgbGVu
KHNlY3Rpb25zKSA9PSAxOgogICAgICAgICAgICAgcmV0dXJuIFtdICMgTm8gcmVhbCBzZWN0aW9u
cyB0byBlbWl0LCBqdXN0IHRoZSBuYW1lc3BhY2UgYW5kIHRlbXBsYXRlIGRlY2xhcmF0aW9uLiBT
a2lwLgpAQCAtNDc0LDE0ICs0NzUsMjAgQEAgY2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0hlYWRlckdl
bmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykK
ICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBEZWZhdWx0SGFzaDsnKQogCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycpCi0gICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoIi8vIEhhc2ggZGVjbGFyYXRpb25zIGluIHRoZSAnJXMnIERvbWFp
biIgJSBkb21haW4uZG9tYWluX25hbWUpCisgICAgICAgICAgICBkb21haW5fbGluZXMgPSBbXQor
CisgICAgICAgICAgICBkb21haW5fbGluZXMuYXBwZW5kKCcnKQorICAgICAgICAgICAgZG9tYWlu
X2xpbmVzLmFwcGVuZCgiLy8gSGFzaCBkZWNsYXJhdGlvbnMgaW4gdGhlICclcycgRG9tYWluIiAl
IGRvbWFpbi5kb21haW5fbmFtZSkKIAogICAgICAgICAgICAgZm9yIGVudW1fdHlwZSBpbiBlbnVt
X3R5cGVzOgotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgndGVtcGxhdGU8PicpCi0gICAg
ICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdzdHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6JXM6OiVzPiB7JyAlIChkb21haW4uZG9tYWluX25hbWUsIGVudW1fdHlwZS5yYXdf
bmFtZSgpKSkKLSAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICB0eXBlZGVmIEludEhh
c2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6JXM6OiVzPiBIYXNoOycgJSAoZG9tYWluLmRvbWFpbl9u
YW1lLCBlbnVtX3R5cGUucmF3X25hbWUoKSkpCi0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCd9OycpCisgICAgICAgICAgICAgICAgZW51bV9saW5lcyA9IFtdCisgICAgICAgICAgICAgICAg
ZW51bV9saW5lcy5hcHBlbmQoJ3RlbXBsYXRlPD4nKQorICAgICAgICAgICAgICAgIGVudW1fbGlu
ZXMuYXBwZW5kKCdzdHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6JXM6OiVz
PiB7JyAlIChkb21haW4uZG9tYWluX25hbWUsIGVudW1fdHlwZS5yYXdfbmFtZSgpKSkKKyAgICAg
ICAgICAgICAgICBlbnVtX2xpbmVzLmFwcGVuZCgnICAgIHR5cGVkZWYgSW50SGFzaDxJbnNwZWN0
b3I6OlByb3RvY29sOjolczo6JXM+IEhhc2g7JyAlIChkb21haW4uZG9tYWluX25hbWUsIGVudW1f
dHlwZS5yYXdfbmFtZSgpKSkKKyAgICAgICAgICAgICAgICBlbnVtX2xpbmVzLmFwcGVuZCgnfTsn
KQorICAgICAgICAgICAgICAgIGRvbWFpbl9saW5lcy5hcHBlbmQoc2VsZi53cmFwX3dpdGhfZ3Vh
cmRfZm9yX2NvbmRpdGlvbihlbnVtX3R5cGUuZGVjbGFyYXRpb24oKS5jb25kaXRpb24sICdcbicu
am9pbihlbnVtX2xpbmVzKSkpCisKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLndyYXBf
d2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRvbWFpbi5jb25kaXRpb24sICdcbicuam9pbihkb21h
aW5fbGluZXMpKSkKIAogICAgICAgICBpZiBsZW4obGluZXMpID09IDA6CiAgICAgICAgICAgICBy
ZXR1cm4gW10KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5w
eSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRlX2NwcF9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weQppbmRleCA2NWNlYmY1ODNl
ZS4uODUzMGU2NTQzMWYgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRh
dGlvbi5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkKQEAgLTEz
MCw3ICsxMzAsNyBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0
b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgICAgICAgICAnfScsCiAgICAgICAgICAgICAgICAg
JycsCiAgICAgICAgICAgICBdKQotICAgICAgICAgICAgcmV0dXJuIGJvZHlfbGluZXMKKyAgICAg
ICAgICAgIHJldHVybiAnXG4nLmpvaW4oYm9keV9saW5lcykKIAogICAgICAgICB0eXBlX2RlY2xh
cmF0aW9ucyA9IHNlbGYudHlwZV9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbihkb21haW4pCiAgICAg
ICAgIGRlY2xhcmF0aW9uX3R5cGVzID0gW2RlY2wudHlwZSBmb3IgZGVjbCBpbiB0eXBlX2RlY2xh
cmF0aW9uc10KQEAgLTE0NiwxNyArMTQ2LDIwIEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNJbXBs
ZW1lbnRhdGlvbkdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICBsaW5lcy5hcHBlbmQo
Ii8vIEVudW1zIGluIHRoZSAnJXMnIERvbWFpbiIgJSBkb21haW4uZG9tYWluX25hbWUpCiAgICAg
ICAgIGZvciBlbnVtX3R5cGUgaW4gZW51bV90eXBlczoKICAgICAgICAgICAgIGNwcF9wcm90b2Nv
bF90eXBlID0gQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKGVudW1fdHlw
ZSkKLSAgICAgICAgICAgIGxpbmVzLmV4dGVuZChnZW5lcmF0ZV9jb252ZXJzaW9uX21ldGhvZF9i
b2R5KGVudW1fdHlwZSwgY3BwX3Byb3RvY29sX3R5cGUpKQorICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZW51bV90eXBlLmRlY2xhcmF0
aW9uKCkuY29uZGl0aW9uLCBnZW5lcmF0ZV9jb252ZXJzaW9uX21ldGhvZF9ib2R5KGVudW1fdHlw
ZSwgY3BwX3Byb3RvY29sX3R5cGUpKSkKIAogICAgICAgICBmb3Igb2JqZWN0X3R5cGUgaW4gb2Jq
ZWN0X3R5cGVzOgorICAgICAgICAgICAgb2JqZWN0X2xpbmVzID0gW10KICAgICAgICAgICAgIGZv
ciBlbnVtX21lbWJlciBpbiBmaWx0ZXIodHlwZV9tZW1iZXJfaXNfYW5vbnltb3VzX2VudW1fdHlw
ZSwgb2JqZWN0X3R5cGUubWVtYmVycyk6CiAgICAgICAgICAgICAgICAgY3BwX3Byb3RvY29sX3R5
cGUgPSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGVfbWVtYmVyKGVudW1f
bWVtYmVyLCBvYmplY3RfdHlwZS5kZWNsYXJhdGlvbigpKQotICAgICAgICAgICAgICAgIGxpbmVz
LmV4dGVuZChnZW5lcmF0ZV9jb252ZXJzaW9uX21ldGhvZF9ib2R5KGVudW1fbWVtYmVyLnR5cGUs
IGNwcF9wcm90b2NvbF90eXBlKSkKKyAgICAgICAgICAgICAgICBvYmplY3RfbGluZXMuYXBwZW5k
KGdlbmVyYXRlX2NvbnZlcnNpb25fbWV0aG9kX2JvZHkoZW51bV9tZW1iZXIudHlwZSwgY3BwX3By
b3RvY29sX3R5cGUpKQorICAgICAgICAgICAgaWYgbGVuKG9iamVjdF9saW5lcyk6CisgICAgICAg
ICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24o
b2JqZWN0X3R5cGUuZGVjbGFyYXRpb24oKS5jb25kaXRpb24sICdcbicuam9pbihvYmplY3RfbGlu
ZXMpKSkKIAogICAgICAgICBpZiBsZW4obGluZXMpID09IDE6CiAgICAgICAgICAgICByZXR1cm4g
JycgICMgTm8gcmVhbCBkZWNsYXJhdGlvbnMgdG8gZW1pdCwganVzdCB0aGUgZG9tYWluIGNvbW1l
bnQuCiAKLSAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9t
YWluLCAnXG4nLmpvaW4obGluZXMpKQorICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3Vh
cmRfZm9yX2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9uLCAnXG4nLmpvaW4obGluZXMpKQogCiAg
ICAgZGVmIF9nZW5lcmF0ZV9lbnVtX21hcHBpbmdfYW5kX2NvbnZlcnNpb25fbWV0aG9kcyhzZWxm
LCBkb21haW5zKToKICAgICAgICAgc2VjdGlvbnMgPSBbXQpAQCAtMTczLDEyICsxNzYsMTUgQEAg
Y2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKENwcEdlbmVyYXRv
cik6CiAgICAgZGVmIF9nZW5lcmF0ZV9vcGVuX2ZpZWxkX25hbWVzKHNlbGYpOgogICAgICAgICBs
aW5lcyA9IFtdCiAgICAgICAgIGZvciBkb21haW4gaW4gc2VsZi5kb21haW5zX3RvX2dlbmVyYXRl
KCk6CisgICAgICAgICAgICBkb21haW5fbGluZXMgPSBbXQogICAgICAgICAgICAgdHlwZV9kZWNs
YXJhdGlvbnMgPSBzZWxmLnR5cGVfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4oZG9tYWluKQogICAg
ICAgICAgICAgZm9yIHR5cGVfZGVjbGFyYXRpb24gaW4gW2RlY2wgZm9yIGRlY2wgaW4gdHlwZV9k
ZWNsYXJhdGlvbnMgaWYgR2VuZXJhdG9yLnR5cGVfaGFzX29wZW5fZmllbGRzKGRlY2wudHlwZSld
OgogICAgICAgICAgICAgICAgIG9wZW5fbWVtYmVycyA9IEdlbmVyYXRvci5vcGVuX2ZpZWxkcyh0
eXBlX2RlY2xhcmF0aW9uKQogICAgICAgICAgICAgICAgIGZvciB0eXBlX21lbWJlciBpbiBzb3J0
ZWQob3Blbl9tZW1iZXJzLCBrZXk9bGFtYmRhIG1lbWJlcjogbWVtYmVyLm1lbWJlcl9uYW1lKToK
ICAgICAgICAgICAgICAgICAgICAgZmllbGRfbmFtZSA9ICc6Oicuam9pbihbJ0luc3BlY3Rvcics
ICdQcm90b2NvbCcsIGRvbWFpbi5kb21haW5fbmFtZSwgdWNmaXJzdCh0eXBlX2RlY2xhcmF0aW9u
LnR5cGVfbmFtZSksIHVjZmlyc3QodHlwZV9tZW1iZXIubWVtYmVyX25hbWUpXSkKLSAgICAgICAg
ICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdjb25zdCBjaGFyKiAlcyA9ICIlcyI7JyAlIChmaWVs
ZF9uYW1lLCB0eXBlX21lbWJlci5tZW1iZXJfbmFtZSkpCisgICAgICAgICAgICAgICAgICAgIGRv
bWFpbl9saW5lcy5hcHBlbmQoJ2NvbnN0IGNoYXIqICVzID0gIiVzIjsnICUgKGZpZWxkX25hbWUs
IHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lKSkKKyAgICAgICAgICAgIGlmIGxlbihkb21haW5fbGlu
ZXMpOgorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9m
b3JfY29uZGl0aW9uKGRvbWFpbi5jb25kaXRpb24sICdcbicuam9pbihkb21haW5fbGluZXMpKSkK
IAogICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQogCkBAIC0xODgsMTYgKzE5NCwxOSBA
QCBjbGFzcyBDcHBQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IoQ3BwR2VuZXJh
dG9yKToKICAgICAgICAgZGVjbGFyYXRpb25zX3RvX2dlbmVyYXRlID0gW2RlY2wgZm9yIGRlY2wg
aW4gdHlwZV9kZWNsYXJhdGlvbnMgaWYgc2VsZi50eXBlX25lZWRzX3NoYXBlX2Fzc2VydGlvbnMo
ZGVjbC50eXBlKV0KIAogICAgICAgICBmb3IgdHlwZV9kZWNsYXJhdGlvbiBpbiBkZWNsYXJhdGlv
bnNfdG9fZ2VuZXJhdGU6CisgICAgICAgICAgICB0eXBlX2xpbmVzID0gW10KICAgICAgICAgICAg
IGZvciB0eXBlX21lbWJlciBpbiB0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVyczoKICAgICAg
ICAgICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGVfbWVtYmVyLnR5cGUsIEVudW1UeXBlKToKLSAg
ICAgICAgICAgICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fzc2VydGlv
bl9mb3JfZW51bSh0eXBlX21lbWJlciwgdHlwZV9kZWNsYXJhdGlvbikpCisgICAgICAgICAgICAg
ICAgICAgIHR5cGVfbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fzc2VydGlvbl9mb3JfZW51
bSh0eXBlX21lbWJlciwgdHlwZV9kZWNsYXJhdGlvbikpCiAKICAgICAgICAgICAgIGlmIGlzaW5z
dGFuY2UodHlwZV9kZWNsYXJhdGlvbi50eXBlLCBPYmplY3RUeXBlKToKLSAgICAgICAgICAgICAg
ICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYXNzZXJ0aW9uX2Zvcl9vYmplY3RfZGVj
bGFyYXRpb24odHlwZV9kZWNsYXJhdGlvbikpCisgICAgICAgICAgICAgICAgdHlwZV9saW5lcy5h
cHBlbmQoc2VsZi5fZ2VuZXJhdGVfYXNzZXJ0aW9uX2Zvcl9vYmplY3RfZGVjbGFyYXRpb24odHlw
ZV9kZWNsYXJhdGlvbikpCiAgICAgICAgICAgICAgICAgaWYgR2VuZXJhdG9yLnR5cGVfbmVlZHNf
cnVudGltZV9jYXN0cyh0eXBlX2RlY2xhcmF0aW9uLnR5cGUpOgotICAgICAgICAgICAgICAgICAg
ICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfcnVudGltZV9jYXN0X2Zvcl9vYmplY3Rf
ZGVjbGFyYXRpb24odHlwZV9kZWNsYXJhdGlvbikpCisgICAgICAgICAgICAgICAgICAgIHR5cGVf
bGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX3J1bnRpbWVfY2FzdF9mb3Jfb2JqZWN0X2RlY2xh
cmF0aW9uKHR5cGVfZGVjbGFyYXRpb24pKQorICAgICAgICAgICAgaWYgbGVuKHR5cGVfbGluZXMp
OgorICAgICAgICAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9m
b3JfY29uZGl0aW9uKHR5cGVfZGVjbGFyYXRpb24uY29uZGl0aW9uLCAnXG5cbicuam9pbih0eXBl
X2xpbmVzKSkpCiAKLSAgICAgICAgcmV0dXJuICdcblxuJy5qb2luKHNlY3Rpb25zKQorICAgICAg
ICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihkb21haW4uY29uZGl0
aW9uLCAnXG5cbicuam9pbihzZWN0aW9ucykpCiAKICAgICBkZWYgX2dlbmVyYXRlX3J1bnRpbWVf
Y2FzdF9mb3Jfb2JqZWN0X2RlY2xhcmF0aW9uKHNlbGYsIG9iamVjdF9kZWNsYXJhdGlvbik6CiAg
ICAgICAgIGFyZ3MgPSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9qc19iYWNrZW5kX2NvbW1hbmRzLnB5IGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfanNf
YmFja2VuZF9jb21tYW5kcy5weQppbmRleCBiYmY3NmY5MjkxMS4uNzMxMjY5N2NiNTYgMTAwNzU1
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dl
bmVyYXRlX2pzX2JhY2tlbmRfY29tbWFuZHMucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfanNfYmFja2VuZF9jb21tYW5kcy5w
eQpAQCAtOTYsNyArOTYsNyBAQCBjbGFzcyBKU0JhY2tlbmRDb21tYW5kc0dlbmVyYXRvcihHZW5l
cmF0b3IpOgogICAgICAgICAgICAgICAgICAgICAnZW51bU5hbWUnOiBkZWNsYXJhdGlvbi50eXBl
X25hbWUsCiAgICAgICAgICAgICAgICAgICAgICdlbnVtTWFwJzogIiwgIi5qb2luKFsnJXM6ICIl
cyInICUgKEdlbmVyYXRvci5zdHlsaXplZF9uYW1lX2Zvcl9lbnVtX3ZhbHVlKGVudW1fdmFsdWUp
LCBlbnVtX3ZhbHVlKSBmb3IgZW51bV92YWx1ZSBpbiBkZWNsYXJhdGlvbi50eXBlLmVudW1fdmFs
dWVzKCldKQogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQo
J0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCIlKGRvbWFpbk5hbWUpcy4lKGVudW1OYW1l
KXMiLCB7JShlbnVtTWFwKXN9KTsnICUgZW51bV9hcmdzKQorICAgICAgICAgICAgICAgIGxpbmVz
LmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRlY2xhcmF0aW9uLmNv
bmRpdGlvbiwgJ0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCIlKGRvbWFpbk5hbWUpcy4l
KGVudW1OYW1lKXMiLCB7JShlbnVtTWFwKXN9KTsnICUgZW51bV9hcmdzKSkKIAogICAgICAgICAg
ICAgZGVmIGlzX2Fub255bW91c19lbnVtX21lbWJlcih0eXBlX21lbWJlcik6CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGlzaW5zdGFuY2UodHlwZV9tZW1iZXIudHlwZSwgRW51bVR5cGUpIGFuZCB0
eXBlX21lbWJlci50eXBlLmlzX2Fub255bW91cwpAQCAtMTI4LDE2ICsxMjgsMTggQEAgY2xhc3Mg
SlNCYWNrZW5kQ29tbWFuZHNHZW5lcmF0b3IoR2VuZXJhdG9yKToKICAgICAgICAgICAgICAgICAn
Y2FsbFBhcmFtcyc6ICIsICIuam9pbihbZ2VuZXJhdGVfcGFyYW1ldGVyX29iamVjdChwYXJhbWV0
ZXIpIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnNdKSwKICAgICAgICAg
ICAgICAgICAncmV0dXJuUGFyYW1zJzogIiwgIi5qb2luKFsnIiVzIicgJSBwYXJhbWV0ZXIucGFy
YW1ldGVyX25hbWUgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzXSks
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0luc3BlY3RvckJhY2tl
bmQucmVnaXN0ZXJDb21tYW5kKCIlKGRvbWFpbk5hbWUpcy4lKGNvbW1hbmROYW1lKXMiLCAlKHRh
cmdldFR5cGVzKXMsIFslKGNhbGxQYXJhbXMpc10sIFslKHJldHVyblBhcmFtcylzXSk7JyAlIGNv
bW1hbmRfYXJncykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFy
ZF9mb3JfY29uZGl0aW9uKGNvbW1hbmQuY29uZGl0aW9uLCAnSW5zcGVjdG9yQmFja2VuZC5yZWdp
c3RlckNvbW1hbmQoIiUoZG9tYWluTmFtZSlzLiUoY29tbWFuZE5hbWUpcyIsICUodGFyZ2V0VHlw
ZXMpcywgWyUoY2FsbFBhcmFtcylzXSwgWyUocmV0dXJuUGFyYW1zKXNdKTsnICUgY29tbWFuZF9h
cmdzKSkKIAogICAgICAgICBmb3IgZXZlbnQgaW4gZXZlbnRzOgorICAgICAgICAgICAgZXZlbnRf
bGluZXMgPSBbXQorCiAgICAgICAgICAgICBmb3IgcGFyYW0gaW4gZmlsdGVyKGlzX2Fub255bW91
c19lbnVtX3BhcmFtLCBldmVudC5ldmVudF9wYXJhbWV0ZXJzKToKICAgICAgICAgICAgICAgICBl
bnVtX2FyZ3MgPSB7CiAgICAgICAgICAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRv
bWFpbl9uYW1lLAogICAgICAgICAgICAgICAgICAgICAnZW51bU5hbWUnOiAnJXMlcycgJSAodWNm
aXJzdChldmVudC5ldmVudF9uYW1lKSwgdWNmaXJzdChwYXJhbS5wYXJhbWV0ZXJfbmFtZSkpLAog
ICAgICAgICAgICAgICAgICAgICAnZW51bU1hcCc6ICIsICIuam9pbihbJyVzOiAiJXMiJyAlIChH
ZW5lcmF0b3Iuc3R5bGl6ZWRfbmFtZV9mb3JfZW51bV92YWx1ZShlbnVtX3ZhbHVlKSwgZW51bV92
YWx1ZSkgZm9yIGVudW1fdmFsdWUgaW4gcGFyYW0udHlwZS5lbnVtX3ZhbHVlcygpXSksCiAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnSW5zcGVjdG9yQmFj
a2VuZC5yZWdpc3RlckVudW0oIiUoZG9tYWluTmFtZSlzLiUoZW51bU5hbWUpcyIsIHslKGVudW1N
YXApc30pOycgJSBlbnVtX2FyZ3MpCisgICAgICAgICAgICAgICAgZXZlbnRfbGluZXMuYXBwZW5k
KCdJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiJShkb21haW5OYW1lKXMuJShlbnVtTmFt
ZSlzIiwgeyUoZW51bU1hcClzfSk7JyAlIGVudW1fYXJncykKIAogICAgICAgICAgICAgZXZlbnRf
YXJncyA9IHsKICAgICAgICAgICAgICAgICAnZG9tYWluTmFtZSc6IGRvbWFpbi5kb21haW5fbmFt
ZSwKQEAgLTE0NSw3ICsxNDcsOSBAQCBjbGFzcyBKU0JhY2tlbmRDb21tYW5kc0dlbmVyYXRvcihH
ZW5lcmF0b3IpOgogICAgICAgICAgICAgICAgICd0YXJnZXRUeXBlcyc6IGpzb24uZHVtcHMoZXZl
bnQudGFyZ2V0X3R5cGVzKSwKICAgICAgICAgICAgICAgICAncGFyYW1zJzogIiwgIi5qb2luKFsn
IiVzIicgJSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUgZm9yIHBhcmFtZXRlciBpbiBldmVudC5l
dmVudF9wYXJhbWV0ZXJzXSksCiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBsaW5lcy5hcHBl
bmQoJ0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudCgiJShkb21haW5OYW1lKXMuJShldmVu
dE5hbWUpcyIsICUodGFyZ2V0VHlwZXMpcywgWyUocGFyYW1zKXNdKTsnICUgZXZlbnRfYXJncykK
KyAgICAgICAgICAgIGV2ZW50X2xpbmVzLmFwcGVuZCgnSW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rl
ckV2ZW50KCIlKGRvbWFpbk5hbWUpcy4lKGV2ZW50TmFtZSlzIiwgJSh0YXJnZXRUeXBlcylzLCBb
JShwYXJhbXMpc10pOycgJSBldmVudF9hcmdzKQorCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQo
c2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihldmVudC5jb25kaXRpb24sICdcbicu
am9pbihldmVudF9saW5lcykpKQogCiAgICAgICAgIGhhc19hc3luY19jb21tYW5kcyA9IGFueShb
Y29tbWFuZC5pc19hc3luYyBmb3IgY29tbWFuZCBpbiBjb21tYW5kc10pCiAgICAgICAgIGlmIGxl
bihldmVudHMpID4gMCBvciBoYXNfYXN5bmNfY29tbWFuZHM6CkBAIC0xNjAsNCArMTY0LDQgQEAg
Y2xhc3MgSlNCYWNrZW5kQ29tbWFuZHNHZW5lcmF0b3IoR2VuZXJhdG9yKToKICAgICAgICAgfQog
ICAgICAgICBsaW5lcy5hcHBlbmQoJ0luc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIiUo
ZG9tYWluTmFtZSlzIiwgJShkZWJ1Z2dhYmxlVHlwZXMpcyk7JyAlIGFjdGl2YXRlX2FyZ3MpCiAK
LSAgICAgICAgcmV0dXJuICJcbiIuam9pbihsaW5lcykKKyAgICAgICAgcmV0dXJuIHNlbGYud3Jh
cF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZG9tYWluLmNvbmRpdGlvbiwgIlxuIi5qb2luKGxp
bmVzKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29i
amNfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQppbmRleCBlZDhjYzU5NmQzMS4uZWEyZmMx
MTI3NGUgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKQEAgLTk5LDcgKzk5LDcgQEAgY2xh
c3MgT2JqQ0JhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgog
ICAgICAgICAgICAgJ29iamNQcmVmaXgnOiBzZWxmLm9iamNfcHJlZml4KCksCiAgICAgICAgIH0K
IAotICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4s
IFRlbXBsYXRlKE9iakNUZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNoZXJIZWFkZXJEb21haW5IYW5k
bGVyT2JqQ0RlY2xhcmF0aW9uKS5zdWJzdGl0dXRlKE5vbmUsICoqaGFuZGxlcl9hcmdzKSkKKyAg
ICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZG9tYWluLmNv
bmRpdGlvbiwgVGVtcGxhdGUoT2JqQ1RlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hlckhlYWRlckRv
bWFpbkhhbmRsZXJPYmpDRGVjbGFyYXRpb24pLnN1YnN0aXR1dGUoTm9uZSwgKipoYW5kbGVyX2Fy
Z3MpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9vYmpjX2hhbmRsZXJfZGVjbGFyYXRpb25fZm9yX2Nv
bW1hbmQoc2VsZiwgY29tbWFuZCk6CiAgICAgICAgIGxpbmVzID0gW10KQEAgLTExMiw0ICsxMTIs
NCBAQCBjbGFzcyBPYmpDQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IoT2JqQ0dlbmVy
YXRvcik6CiAgICAgICAgICAgICAncGFyYW1ldGVycyc6ICcsICcuam9pbihwYXJhbWV0ZXJzKSwK
ICAgICAgICAgfQogICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICB2b2lkICUoY29tbWFuZE5hbWUp
cyglKHBhcmFtZXRlcnMpcykgZmluYWw7JyAlIGNvbW1hbmRfYXJncykKLSAgICAgICAgcmV0dXJu
ICdcbicuam9pbihsaW5lcykKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zv
cl9jb25kaXRpb24oY29tbWFuZC5jb25kaXRpb24sICdcbicuam9pbihsaW5lcykpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfYmFj
a2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CmluZGV4IGExYjllMTc5NzA1Li4wMjMx
YmY1ODkzZCAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRp
b24ucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVn
ZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKQEAg
LTEwNCwxMCArMTA0LDEwIEBAIGNsYXNzIE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0
aW9uR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogICAgICAgICAgICAgJ2ludm9jYXRpb24nOiBz
ZWxmLl9nZW5lcmF0ZV9pbnZvY2F0aW9uX2Zvcl9jb21tYW5kKGRvbWFpbiwgY29tbWFuZCksCiAg
ICAgICAgIH0KIAotICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFp
bihkb21haW4sIFRlbXBsYXRlKE9iakNUZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNoZXJIZWFkZXJE
b21haW5IYW5kbGVySW1wbGVtZW50YXRpb24pLnN1YnN0aXR1dGUoTm9uZSwgKipjb21tYW5kX2Fy
Z3MpKQorICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihk
b21haW4uY29uZGl0aW9uLCBUZW1wbGF0ZShPYmpDVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVy
SGVhZGVyRG9tYWluSGFuZGxlckltcGxlbWVudGF0aW9uKS5zdWJzdGl0dXRlKE5vbmUsICoqY29t
bWFuZF9hcmdzKSkKIAogICAgIGRlZiBfZ2VuZXJhdGVfcmVzcG9uZHNfdG9fc2VsZWN0b3JfZm9y
X2NvbW1hbmQoc2VsZiwgZG9tYWluLCBjb21tYW5kKToKLSAgICAgICAgcmV0dXJuICdbbV9kZWxl
Z2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKCVzV2l0aEVycm9yQ2FsbGJhY2s6c3Vj
Y2Vzc0NhbGxiYWNrOiVzKV0nICUgKGNvbW1hbmQuY29tbWFuZF9uYW1lLCAnJy5qb2luKG1hcChs
YW1iZGEgcGFyYW1ldGVyOiAnJXM6JyAlIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwgY29tbWFu
ZC5jYWxsX3BhcmFtZXRlcnMpKSkKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJk
X2Zvcl9jb25kaXRpb24oY29tbWFuZC5jb25kaXRpb24sICdbbV9kZWxlZ2F0ZSByZXNwb25kc1Rv
U2VsZWN0b3I6QHNlbGVjdG9yKCVzV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOiVz
KV0nICUgKGNvbW1hbmQuY29tbWFuZF9uYW1lLCAnJy5qb2luKG1hcChsYW1iZGEgcGFyYW1ldGVy
OiAnJXM6JyAlIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwgY29tbWFuZC5jYWxsX3BhcmFtZXRl
cnMpKSkpCiAKICAgICBkZWYgX2dlbmVyYXRlX3N1Y2Nlc3NfYmxvY2tfZm9yX2NvbW1hbmQoc2Vs
ZiwgZG9tYWluLCBjb21tYW5kKToKICAgICAgICAgbGluZXMgPSBbXQpAQCAtMTU2LDcgKzE1Niw3
IEBAIGNsYXNzIE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKE9i
akNHZW5lcmF0b3IpOgogICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRl
KCksIGZhbHNlKTsnKQogCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIH07JykKLSAgICAgICAg
cmV0dXJuICdcbicuam9pbihsaW5lcykKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1
YXJkX2Zvcl9jb25kaXRpb24oY29tbWFuZC5jb25kaXRpb24sICdcbicuam9pbihsaW5lcykpCiAK
ICAgICBkZWYgX2dlbmVyYXRlX2NvbnZlcnNpb25zX2Zvcl9jb21tYW5kKHNlbGYsIGRvbWFpbiwg
Y29tbWFuZCk6CiAgICAgICAgIGxpbmVzID0gW10KQEAgLTE5OSw3ICsxOTksNyBAQCBjbGFzcyBP
YmpDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihPYmpDR2VuZXJhdG9y
KToKIAogICAgICAgICBpZiBsaW5lczoKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKLSAg
ICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93
aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oY29tbWFuZC5jb25kaXRpb24sICdcbicuam9pbihsaW5l
cykpCiAKICAgICBkZWYgX2dlbmVyYXRlX2ludm9jYXRpb25fZm9yX2NvbW1hbmQoc2VsZiwgZG9t
YWluLCBjb21tYW5kKToKICAgICAgICAgcGFpcnMgPSBbXQpAQCAtMjE5LDQgKzIxOSw0IEBAIGNs
YXNzIE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKE9iakNHZW5l
cmF0b3IpOgogCiAgICAgICAgICAgICAgICAgb3B0aW9uYWxfZXhwcmVzc2lvbiA9ICcoJXMgPyAm
JXMgOiBuaWwpJyAlIChpbl9wYXJhbV9uYW1lLCBvYmpjX2luX3BhcmFtX2V4cHJlc3Npb24pCiAg
ICAgICAgICAgICAgICAgcGFpcnMuYXBwZW5kKCclczolcycgJSAocGFyYW1ldGVyLnBhcmFtZXRl
cl9uYW1lLCBvcHRpb25hbF9leHByZXNzaW9uKSkKLSAgICAgICAgcmV0dXJuICcgICAgW21fZGVs
ZWdhdGUgJXMlc107JyAlIChjb21tYW5kLmNvbW1hbmRfbmFtZSwgJyAnLmpvaW4ocGFpcnMpKQor
ICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihjb21tYW5k
LmNvbmRpdGlvbiwgJyAgICBbbV9kZWxlZ2F0ZSAlcyVzXTsnICUgKGNvbW1hbmQuY29tbWFuZF9u
YW1lLCAnICcuam9pbihwYWlycykpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19oZWFkZXIucHkgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpj
X2hlYWRlci5weQppbmRleCAxNWZiNzRiZThiZi4uMjVlOWZhZTEwMWQgMTAwNzU1Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29i
amNfaGVhZGVyLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfaGVhZGVyLnB5CkBAIC0zMSwxMiArMzEsMTIgQEAgZnJv
bSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCiAKIHRyeToKICAgICBmcm9tIC5nZW5lcmF0b3IgaW1w
b3J0IEdlbmVyYXRvciwgdWNmaXJzdAotICAgIGZyb20gLm1vZGVscyBpbXBvcnQgT2JqZWN0VHlw
ZSwgRW51bVR5cGUsIFBsYXRmb3JtcworICAgIGZyb20gLm1vZGVscyBpbXBvcnQgT2JqZWN0VHlw
ZSwgRW51bVR5cGUKICAgICBmcm9tIC5vYmpjX2dlbmVyYXRvciBpbXBvcnQgT2JqQ0dlbmVyYXRv
ciwgam9pbl90eXBlX2FuZF9uYW1lCiAgICAgZnJvbSAub2JqY19nZW5lcmF0b3JfdGVtcGxhdGVz
IGltcG9ydCBPYmpDR2VuZXJhdG9yVGVtcGxhdGVzIGFzIE9iakNUZW1wbGF0ZXMKIGV4Y2VwdCBW
YWx1ZUVycm9yOgogICAgIGZyb20gZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QK
LSAgICBmcm9tIG1vZGVscyBpbXBvcnQgT2JqZWN0VHlwZSwgRW51bVR5cGUsIFBsYXRmb3Jtcwor
ICAgIGZyb20gbW9kZWxzIGltcG9ydCBPYmplY3RUeXBlLCBFbnVtVHlwZQogICAgIGZyb20gb2Jq
Y19nZW5lcmF0b3IgaW1wb3J0IE9iakNHZW5lcmF0b3IsIGpvaW5fdHlwZV9hbmRfbmFtZQogICAg
IGZyb20gb2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBPYmpDR2VuZXJhdG9yVGVtcGxh
dGVzIGFzIE9iakNUZW1wbGF0ZXMKIApAQCAtODcsNyArODcsNiBAQCBjbGFzcyBPYmpDSGVhZGVy
R2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5n
ZW5lcmF0ZV9saWNlbnNlKCkpCiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShPYmpD
VGVtcGxhdGVzLkhlYWRlclByZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJQcmVsdWRl
X2FyZ3MpKQogICAgICAgICBzZWN0aW9ucy5hcHBlbmQoJ1xuJy5qb2luKFtfZiBmb3IgX2YgaW4g
bWFwKHNlbGYuX2dlbmVyYXRlX2ZvcndhcmRfZGVjbGFyYXRpb25zLCB0eXBlX2RvbWFpbnMpIGlm
IF9mXSkpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9lbnVtX2Zvcl9w
bGF0Zm9ybXMoKSkKICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCdcbicuam9pbihbX2YgZm9yIF9m
IGluIG1hcChzZWxmLl9nZW5lcmF0ZV9lbnVtcywgdHlwZV9kb21haW5zKSBpZiBfZl0pKQogICAg
ICAgICBzZWN0aW9ucy5hcHBlbmQoJ1xuJy5qb2luKFtfZiBmb3IgX2YgaW4gbWFwKHNlbGYuX2dl
bmVyYXRlX3R5cGVzLCB0eXBlX2RvbWFpbnMpIGlmIF9mXSkpCiAKQEAgLTEwMyw0MiArMTAyLDUx
IEBAIGNsYXNzIE9iakNIZWFkZXJHZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgICAgIGZv
ciBkZWNsYXJhdGlvbiBpbiBzZWxmLnR5cGVfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4oZG9tYWlu
KToKICAgICAgICAgICAgIGlmIChpc2luc3RhbmNlKGRlY2xhcmF0aW9uLnR5cGUsIE9iamVjdFR5
cGUpKToKICAgICAgICAgICAgICAgICBvYmpjX25hbWUgPSBzZWxmLm9iamNfbmFtZV9mb3JfdHlw
ZShkZWNsYXJhdGlvbi50eXBlKQotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnQGNsYXNz
ICVzOycgJSBvYmpjX25hbWUpCi0gICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisgICAg
ICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRp
b24oZGVjbGFyYXRpb24uY29uZGl0aW9uLCAnQGNsYXNzICVzOycgJSBvYmpjX25hbWUpKQorICAg
ICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihkb21haW4uY29u
ZGl0aW9uLCAnXG4nLmpvaW4obGluZXMpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9lbnVtcyhzZWxm
LCBkb21haW4pOgogICAgICAgICBsaW5lcyA9IFtdCiAKICAgICAgICAgIyBUeXBlIGVudW1zIGFu
ZCBtZW1iZXIgZW51bXMuCiAgICAgICAgIGZvciBkZWNsYXJhdGlvbiBpbiBzZWxmLnR5cGVfZGVj
bGFyYXRpb25zX2Zvcl9kb21haW4oZG9tYWluKToKKyAgICAgICAgICAgIGRlY2xhcmF0aW9uX2xp
bmVzID0gW10KICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZGVjbGFyYXRpb24udHlwZSwgRW51
bVR5cGUpOgotICAgICAgICAgICAgICAgIGFkZF9uZXdsaW5lKGxpbmVzKQotICAgICAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfZGVjbGFy
YXRpb24oZG9tYWluLCBkZWNsYXJhdGlvbikpCisgICAgICAgICAgICAgICAgYWRkX25ld2xpbmUo
ZGVjbGFyYXRpb25fbGluZXMpCisgICAgICAgICAgICAgICAgZGVjbGFyYXRpb25fbGluZXMuYXBw
ZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2Zvcl9kZWNsYXJhdGlvbihkb21haW4s
IGRlY2xhcmF0aW9uKSkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgZm9yIG1l
bWJlciBpbiBkZWNsYXJhdGlvbi50eXBlX21lbWJlcnM6CiAgICAgICAgICAgICAgICAgICAgIGlm
IGlzaW5zdGFuY2UobWVtYmVyLnR5cGUsIEVudW1UeXBlKSBhbmQgbWVtYmVyLnR5cGUuaXNfYW5v
bnltb3VzOgotICAgICAgICAgICAgICAgICAgICAgICAgYWRkX25ld2xpbmUobGluZXMpCi0gICAg
ICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnltb3Vz
X2VudW1fZm9yX21lbWJlcihkb21haW4sIGRlY2xhcmF0aW9uLCBtZW1iZXIpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgYWRkX25ld2xpbmUoZGVjbGFyYXRpb25fbGluZXMpCisgICAgICAgICAg
ICAgICAgICAgICAgICBkZWNsYXJhdGlvbl9saW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5v
bnltb3VzX2VudW1fZm9yX21lbWJlcihkb21haW4sIGRlY2xhcmF0aW9uLCBtZW1iZXIpKQorICAg
ICAgICAgICAgaWYgbGVuKGRlY2xhcmF0aW9uX2xpbmVzKToKKyAgICAgICAgICAgICAgICBsaW5l
cy5hcHBlbmQoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihkZWNsYXJhdGlvbi5j
b25kaXRpb24sICdcbicuam9pbihkZWNsYXJhdGlvbl9saW5lcykpKQogCiAgICAgICAgICMgQW5v
bnltb3VzIGNvbW1hbmQgZW51bXMuCiAgICAgICAgIGZvciBjb21tYW5kIGluIHNlbGYuY29tbWFu
ZHNfZm9yX2RvbWFpbihkb21haW4pOgorICAgICAgICAgICAgY29tbWFuZF9saW5lcyA9IFtdCiAg
ICAgICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQuY2FsbF9wYXJhbWV0ZXJzOgogICAg
ICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocGFyYW1ldGVyLnR5cGUsIEVudW1UeXBlKSBhbmQg
cGFyYW1ldGVyLnR5cGUuaXNfYW5vbnltb3VzOgotICAgICAgICAgICAgICAgICAgICBhZGRfbmV3
bGluZShsaW5lcykKLSAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVy
YXRlX2Fub255bW91c19lbnVtX2Zvcl9wYXJhbWV0ZXIoZG9tYWluLCBjb21tYW5kLmNvbW1hbmRf
bmFtZSwgcGFyYW1ldGVyKSkKKyAgICAgICAgICAgICAgICAgICAgYWRkX25ld2xpbmUoY29tbWFu
ZF9saW5lcykKKyAgICAgICAgICAgICAgICAgICAgY29tbWFuZF9saW5lcy5hcHBlbmQoc2VsZi5f
Z2VuZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX3BhcmFtZXRlcihkb21haW4sIGNvbW1hbmQuY29t
bWFuZF9uYW1lLCBwYXJhbWV0ZXIpKQogICAgICAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBjb21t
YW5kLnJldHVybl9wYXJhbWV0ZXJzOgogICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocGFy
YW1ldGVyLnR5cGUsIEVudW1UeXBlKSBhbmQgcGFyYW1ldGVyLnR5cGUuaXNfYW5vbnltb3VzOgot
ICAgICAgICAgICAgICAgICAgICBhZGRfbmV3bGluZShsaW5lcykKLSAgICAgICAgICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2Zvcl9wYXJhbWV0
ZXIoZG9tYWluLCBjb21tYW5kLmNvbW1hbmRfbmFtZSwgcGFyYW1ldGVyKSkKKyAgICAgICAgICAg
ICAgICAgICAgYWRkX25ld2xpbmUoY29tbWFuZF9saW5lcykKKyAgICAgICAgICAgICAgICAgICAg
Y29tbWFuZF9saW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX3Bh
cmFtZXRlcihkb21haW4sIGNvbW1hbmQuY29tbWFuZF9uYW1lLCBwYXJhbWV0ZXIpKQorICAgICAg
ICAgICAgaWYgbGVuKGNvbW1hbmRfbGluZXMpOgorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVu
ZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGNvbW1hbmQuY29uZGl0aW9uLCAn
XG4nLmpvaW4oY29tbWFuZF9saW5lcykpKQogCiAgICAgICAgICMgQW5vbnltb3VzIGV2ZW50IGVu
dW1zLgogICAgICAgICBmb3IgZXZlbnQgaW4gc2VsZi5ldmVudHNfZm9yX2RvbWFpbihkb21haW4p
OgorICAgICAgICAgICAgZXZlbnRfbGluZXMgPSBbXQogICAgICAgICAgICAgZm9yIHBhcmFtZXRl
ciBpbiBldmVudC5ldmVudF9wYXJhbWV0ZXJzOgogICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFu
Y2UocGFyYW1ldGVyLnR5cGUsIEVudW1UeXBlKSBhbmQgcGFyYW1ldGVyLnR5cGUuaXNfYW5vbnlt
b3VzOgotICAgICAgICAgICAgICAgICAgICBhZGRfbmV3bGluZShsaW5lcykKLSAgICAgICAgICAg
ICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2Zvcl9w
YXJhbWV0ZXIoZG9tYWluLCBldmVudC5ldmVudF9uYW1lLCBwYXJhbWV0ZXIpKQorICAgICAgICAg
ICAgICAgICAgICBhZGRfbmV3bGluZShldmVudF9saW5lcykKKyAgICAgICAgICAgICAgICAgICAg
ZXZlbnRfbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2Zvcl9wYXJh
bWV0ZXIoZG9tYWluLCBldmVudC5ldmVudF9uYW1lLCBwYXJhbWV0ZXIpKQorICAgICAgICAgICAg
aWYgbGVuKGV2ZW50X2xpbmVzKToKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi53
cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihldmVudC5jb25kaXRpb24sICdcbicuam9pbihl
dmVudF9saW5lcykpKQogCi0gICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisgICAgICAg
IHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRvbWFpbi5jb25kaXRp
b24sICdcbicuam9pbihsaW5lcykpCiAKICAgICBkZWYgX2dlbmVyYXRlX3R5cGVzKHNlbGYsIGRv
bWFpbik6CiAgICAgICAgIGxpbmVzID0gW10KQEAgLTE0NywxMiArMTU1LDcgQEAgY2xhc3MgT2Jq
Q0hlYWRlckdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKICAgICAgICAgICAgIGlmIGlzaW5zdGFu
Y2UoZGVjbGFyYXRpb24udHlwZSwgT2JqZWN0VHlwZSk6CiAgICAgICAgICAgICAgICAgYWRkX25l
d2xpbmUobGluZXMpCiAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRl
X3R5cGVfaW50ZXJmYWNlKGRvbWFpbiwgZGVjbGFyYXRpb24pKQotICAgICAgICByZXR1cm4gJ1xu
Jy5qb2luKGxpbmVzKQotCi0gICAgZGVmIF9nZW5lcmF0ZV9lbnVtX2Zvcl9wbGF0Zm9ybXMoc2Vs
Zik6Ci0gICAgICAgIG9iamNfZW51bV9uYW1lID0gJyVzUGxhdGZvcm0nICUgc2VsZi5vYmpjX3By
ZWZpeCgpCi0gICAgICAgIGVudW1fdmFsdWVzID0gW3BsYXRmb3JtLm5hbWUgZm9yIHBsYXRmb3Jt
IGluIFBsYXRmb3Jtc10KLSAgICAgICAgcmV0dXJuIHNlbGYuX2dlbmVyYXRlX2VudW0ob2JqY19l
bnVtX25hbWUsIGVudW1fdmFsdWVzKQorICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3Vh
cmRfZm9yX2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9uLCAnXG4nLmpvaW4obGluZXMpKQogCiAg
ICAgZGVmIF9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfZGVjbGFyYXRpb24oc2VsZiwgZG9t
YWluLCBkZWNsYXJhdGlvbik6CiAgICAgICAgIG9iamNfZW51bV9uYW1lID0gc2VsZi5vYmpjX2Vu
dW1fbmFtZV9mb3JfYW5vbnltb3VzX2VudW1fZGVjbGFyYXRpb24oZGVjbGFyYXRpb24pCkBAIC0x
OTQsNyArMTk3LDcgQEAgY2xhc3MgT2JqQ0hlYWRlckdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToK
ICAgICAgICAgZm9yIG1lbWJlciBpbiBvcHRpb25hbF9tZW1iZXJzOgogICAgICAgICAgICAgbGlu
ZXMuYXBwZW5kKCcvKiBvcHRpb25hbCAqLyAnICsgc2VsZi5fZ2VuZXJhdGVfbWVtYmVyX3Byb3Bl
cnR5KGRlY2xhcmF0aW9uLCBtZW1iZXIpKQogICAgICAgICBsaW5lcy5hcHBlbmQoJ0BlbmQnKQot
ICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorICAgICAgICByZXR1cm4gc2VsZi53cmFw
X3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihkZWNsYXJhdGlvbi5jb25kaXRpb24sICdcbicuam9p
bihsaW5lcykpCiAKICAgICBkZWYgX2dlbmVyYXRlX2luaXRfbWV0aG9kX2Zvcl9yZXF1aXJlZF9t
ZW1iZXJzKHNlbGYsIGRvbWFpbiwgZGVjbGFyYXRpb24sIHJlcXVpcmVkX21lbWJlcnMpOgogICAg
ICAgICBwYWlycyA9IFtdCkBAIC0yMTksNyArMjIyLDcgQEAgY2xhc3MgT2JqQ0hlYWRlckdlbmVy
YXRvcihPYmpDR2VuZXJhdG9yKToKICAgICAgICAgICAgIGZvciBjb21tYW5kIGluIHNlbGYuY29t
bWFuZHNfZm9yX2RvbWFpbihkb21haW4pOgogICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChz
ZWxmLl9nZW5lcmF0ZV9zaW5nbGVfY29tbWFuZF9wcm90b2NvbChkb21haW4sIGNvbW1hbmQpKQog
ICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdAZW5kJykKLSAgICAgICAgcmV0dXJuICdcbicuam9p
bihsaW5lcykKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRp
b24oZG9tYWluLmNvbmRpdGlvbiwgJ1xuJy5qb2luKGxpbmVzKSkKIAogICAgIGRlZiBfZ2VuZXJh
dGVfc2luZ2xlX2NvbW1hbmRfcHJvdG9jb2woc2VsZiwgZG9tYWluLCBjb21tYW5kKToKICAgICAg
ICAgcGFpcnMgPSBbXQpAQCAtMjI4LDcgKzIzMSw3IEBAIGNsYXNzIE9iakNIZWFkZXJHZW5lcmF0
b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxs
X3BhcmFtZXRlcnM6CiAgICAgICAgICAgICBwYXJhbV9uYW1lID0gcGFyYW1ldGVyLnBhcmFtZXRl
cl9uYW1lCiAgICAgICAgICAgICBwYWlycy5hcHBlbmQoJyVzOiglcyklcycgJSAocGFyYW1fbmFt
ZSwgc2VsZi5vYmpjX3R5cGVfZm9yX3BhcmFtKGRvbWFpbiwgY29tbWFuZC5jb21tYW5kX25hbWUs
IHBhcmFtZXRlciksIHBhcmFtX25hbWUpKQotICAgICAgICByZXR1cm4gJy0gKHZvaWQpJXNXaXRo
JXM7JyAlIChjb21tYW5kLmNvbW1hbmRfbmFtZSwgJyAnLmpvaW4ocGFpcnMpKQorICAgICAgICBy
ZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihjb21tYW5kLmNvbmRpdGlv
biwgJy0gKHZvaWQpJXNXaXRoJXM7JyAlIChjb21tYW5kLmNvbW1hbmRfbmFtZSwgJyAnLmpvaW4o
cGFpcnMpKSkKIAogICAgIGRlZiBfY2FsbGJhY2tfYmxvY2tfZm9yX2NvbW1hbmQoc2VsZiwgZG9t
YWluLCBjb21tYW5kKToKICAgICAgICAgcGFpcnMgPSBbXQpAQCAtMjQ5LDcgKzI1Miw3IEBAIGNs
YXNzIE9iakNIZWFkZXJHZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgICAgICAgICBmb3Ig
ZXZlbnQgaW4gZXZlbnRzOgogICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5l
cmF0ZV9zaW5nbGVfZXZlbnRfaW50ZXJmYWNlKGRvbWFpbiwgZXZlbnQpKQogICAgICAgICAgICAg
bGluZXMuYXBwZW5kKCdAZW5kJykKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKyAg
ICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZG9tYWluLmNv
bmRpdGlvbiwgJ1xuJy5qb2luKGxpbmVzKSkKIAogICAgIGRlZiBfZ2VuZXJhdGVfc2luZ2xlX2V2
ZW50X2ludGVyZmFjZShzZWxmLCBkb21haW4sIGV2ZW50KToKICAgICAgICAgaWYgbm90IGV2ZW50
LmV2ZW50X3BhcmFtZXRlcnM6CkBAIC0yNTksNCArMjYyLDQgQEAgY2xhc3MgT2JqQ0hlYWRlckdl
bmVyYXRvcihPYmpDR2VuZXJhdG9yKToKICAgICAgICAgICAgIHBhcmFtX25hbWUgPSBwYXJhbWV0
ZXIucGFyYW1ldGVyX25hbWUKICAgICAgICAgICAgIHBhaXJzLmFwcGVuZCgnJXM6KCVzKSVzJyAl
IChwYXJhbV9uYW1lLCBzZWxmLm9iamNfdHlwZV9mb3JfcGFyYW0oZG9tYWluLCBldmVudC5ldmVu
dF9uYW1lLCBwYXJhbWV0ZXIpLCBwYXJhbV9uYW1lKSkKICAgICAgICAgcGFpcnNbMF0gPSB1Y2Zp
cnN0KHBhaXJzWzBdKQotICAgICAgICByZXR1cm4gJy0gKHZvaWQpJXNXaXRoJXM7JyAlIChldmVu
dC5ldmVudF9uYW1lLCAnICcuam9pbihwYWlycykpCisgICAgICAgIHJldHVybiBzZWxmLndyYXBf
d2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGV2ZW50LmNvbmRpdGlvbiwgJy0gKHZvaWQpJXNXaXRo
JXM7JyAlIChldmVudC5ldmVudF9uYW1lLCAnICcuam9pbihwYWlycykpKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVf
b2JqY19wcm90b2NvbF90eXBlX2NvbnZlcnNpb25zX2hlYWRlci5weSBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfcHJvdG9jb2xf
dHlwZV9jb252ZXJzaW9uc19oZWFkZXIucHkKaW5kZXggMjU3MWY0YjIyYTguLjU0MDE1MWE1MWE5
IDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVfY29udmVyc2lvbnNfaGVhZGVyLnB5Cisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRlX29iamNfcHJvdG9jb2xfdHlwZV9jb252ZXJzaW9uc19oZWFkZXIucHkKQEAgLTMxLDEyICsz
MSwxMiBAQCBmcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKIAogdHJ5OgogICAgIGZyb20gLmdl
bmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yCi0gICAgZnJvbSAubW9kZWxzIGltcG9ydCBFbnVtVHlw
ZSwgRnJhbWV3b3JrcywgUGxhdGZvcm1zCisgICAgZnJvbSAubW9kZWxzIGltcG9ydCBFbnVtVHlw
ZSwgRnJhbWV3b3JrcwogICAgIGZyb20gLm9iamNfZ2VuZXJhdG9yIGltcG9ydCBPYmpDR2VuZXJh
dG9yCiAgICAgZnJvbSAub2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBPYmpDR2VuZXJh
dG9yVGVtcGxhdGVzIGFzIE9iakNUZW1wbGF0ZXMKIGV4Y2VwdCBWYWx1ZUVycm9yOgogICAgIGZy
b20gZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IKLSAgICBmcm9tIG1vZGVscyBpbXBvcnQgRW51
bVR5cGUsIEZyYW1ld29ya3MsIFBsYXRmb3JtcworICAgIGZyb20gbW9kZWxzIGltcG9ydCBFbnVt
VHlwZSwgRnJhbWV3b3JrcwogICAgIGZyb20gb2JqY19nZW5lcmF0b3IgaW1wb3J0IE9iakNHZW5l
cmF0b3IKICAgICBmcm9tIG9iamNfZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgT2JqQ0dlbmVy
YXRvclRlbXBsYXRlcyBhcyBPYmpDVGVtcGxhdGVzCiAKQEAgLTc1LDcgKzc1LDYgQEAgY2xhc3Mg
T2JqQ1Byb3RvY29sVHlwZUNvbnZlcnNpb25zSGVhZGVyR2VuZXJhdG9yKE9iakNHZW5lcmF0b3Ip
OgogICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9saWNlbnNlKCkpCiAgICAg
ICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShPYmpDVGVtcGxhdGVzLlR5cGVDb252ZXJzaW9u
c0hlYWRlclByZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCiAgICAgICAg
IHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShPYmpDVGVtcGxhdGVzLlR5cGVDb252ZXJzaW9uc0hl
YWRlclN0YW5kYXJkKS5zdWJzdGl0dXRlKE5vbmUpKQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQo
c2VsZi5fZ2VuZXJhdGVfZW51bV9jb252ZXJzaW9uX2Zvcl9wbGF0Zm9ybXMoKSkKICAgICAgICAg
c2VjdGlvbnMuZXh0ZW5kKGxpc3QobWFwKHNlbGYuX2dlbmVyYXRlX2VudW1fY29udmVyc2lvbl9m
dW5jdGlvbnMsIGRvbWFpbnMpKSkKICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKE9i
akNUZW1wbGF0ZXMuVHlwZUNvbnZlcnNpb25zSGVhZGVyUG9zdGx1ZGUpLnN1YnN0aXR1dGUoTm9u
ZSwgKipoZWFkZXJfYXJncykpCiAgICAgICAgIHJldHVybiAnXG5cbicuam9pbihzZWN0aW9ucykK
QEAgLTg1LDQyICs4NCw0MyBAQCBjbGFzcyBPYmpDUHJvdG9jb2xUeXBlQ29udmVyc2lvbnNIZWFk
ZXJHZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAKICAgICAgICAgIyBUeXBlIGVudW1zIGFuZCBt
ZW1iZXIgZW51bXMuCiAgICAgICAgIGZvciBkZWNsYXJhdGlvbiBpbiBzZWxmLnR5cGVfZGVjbGFy
YXRpb25zX2Zvcl9kb21haW4oZG9tYWluKToKKyAgICAgICAgICAgIGRlY2xhcmF0aW9uX2xpbmVz
ID0gW10KICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZGVjbGFyYXRpb24udHlwZSwgRW51bVR5
cGUpOgotICAgICAgICAgICAgICAgIGFkZF9uZXdsaW5lKGxpbmVzKQotICAgICAgICAgICAgICAg
IGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9jb252ZXJzaW9uX2Zv
cl9kZWNsYXJhdGlvbihkb21haW4sIGRlY2xhcmF0aW9uKSkKKyAgICAgICAgICAgICAgICBhZGRf
bmV3bGluZShkZWNsYXJhdGlvbl9saW5lcykKKyAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbl9s
aW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fY29udmVyc2lvbl9mb3Jf
ZGVjbGFyYXRpb24oZG9tYWluLCBkZWNsYXJhdGlvbikpCiAgICAgICAgICAgICBlbHNlOgogICAg
ICAgICAgICAgICAgIGZvciBtZW1iZXIgaW4gZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzOgogICAg
ICAgICAgICAgICAgICAgICBpZiAoaXNpbnN0YW5jZShtZW1iZXIudHlwZSwgRW51bVR5cGUpIGFu
ZCBtZW1iZXIudHlwZS5pc19hbm9ueW1vdXMpOgotICAgICAgICAgICAgICAgICAgICAgICAgYWRk
X25ld2xpbmUobGluZXMpCi0gICAgICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2Vs
Zi5fZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fY29udmVyc2lvbl9mb3JfbWVtYmVyKGRvbWFpbiwg
ZGVjbGFyYXRpb24sIG1lbWJlcikpCisgICAgICAgICAgICAgICAgICAgICAgICBhZGRfbmV3bGlu
ZShkZWNsYXJhdGlvbl9saW5lcykKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9u
X2xpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9jb252ZXJzaW9uX2Zv
cl9tZW1iZXIoZG9tYWluLCBkZWNsYXJhdGlvbiwgbWVtYmVyKSkKKyAgICAgICAgICAgIGlmIGxl
bihkZWNsYXJhdGlvbl9saW5lcyk6CisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYu
d3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZGVjbGFyYXRpb24uY29uZGl0aW9uLCAnXG4n
LmpvaW4oZGVjbGFyYXRpb25fbGluZXMpKSkKIAogICAgICAgICAjIEFub255bW91cyBjb21tYW5k
IGVudW1zLgogICAgICAgICBmb3IgY29tbWFuZCBpbiBzZWxmLmNvbW1hbmRzX2Zvcl9kb21haW4o
ZG9tYWluKToKKyAgICAgICAgICAgIGNvbW1hbmRfbGluZXMgPSBbXQogICAgICAgICAgICAgZm9y
IHBhcmFtZXRlciBpbiBjb21tYW5kLmNhbGxfcGFyYW1ldGVyczoKICAgICAgICAgICAgICAgICBp
ZiAoaXNpbnN0YW5jZShwYXJhbWV0ZXIudHlwZSwgRW51bVR5cGUpIGFuZCBwYXJhbWV0ZXIudHlw
ZS5pc19hbm9ueW1vdXMpOgotICAgICAgICAgICAgICAgICAgICBhZGRfbmV3bGluZShsaW5lcykK
LSAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255bW91
c19lbnVtX2NvbnZlcnNpb25fZm9yX3BhcmFtZXRlcihkb21haW4sIGNvbW1hbmQuY29tbWFuZF9u
YW1lLCBwYXJhbWV0ZXIpKQorICAgICAgICAgICAgICAgICAgICBhZGRfbmV3bGluZShjb21tYW5k
X2xpbmVzKQorICAgICAgICAgICAgICAgICAgICBjb21tYW5kX2xpbmVzLmFwcGVuZChzZWxmLl9n
ZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9jb252ZXJzaW9uX2Zvcl9wYXJhbWV0ZXIoZG9tYWluLCBj
b21tYW5kLmNvbW1hbmRfbmFtZSwgcGFyYW1ldGVyKSkKICAgICAgICAgICAgIGZvciBwYXJhbWV0
ZXIgaW4gY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVyczoKICAgICAgICAgICAgICAgICBpZiAoaXNp
bnN0YW5jZShwYXJhbWV0ZXIudHlwZSwgRW51bVR5cGUpIGFuZCBwYXJhbWV0ZXIudHlwZS5pc19h
bm9ueW1vdXMpOgotICAgICAgICAgICAgICAgICAgICBhZGRfbmV3bGluZShsaW5lcykKLSAgICAg
ICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVt
X2NvbnZlcnNpb25fZm9yX3BhcmFtZXRlcihkb21haW4sIGNvbW1hbmQuY29tbWFuZF9uYW1lLCBw
YXJhbWV0ZXIpKQorICAgICAgICAgICAgICAgICAgICBhZGRfbmV3bGluZShjb21tYW5kX2xpbmVz
KQorICAgICAgICAgICAgICAgICAgICBjb21tYW5kX2xpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0
ZV9hbm9ueW1vdXNfZW51bV9jb252ZXJzaW9uX2Zvcl9wYXJhbWV0ZXIoZG9tYWluLCBjb21tYW5k
LmNvbW1hbmRfbmFtZSwgcGFyYW1ldGVyKSkKKyAgICAgICAgICAgIGlmIGxlbihjb21tYW5kX2xp
bmVzKToKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi53cmFwX3dpdGhfZ3VhcmRf
Zm9yX2NvbmRpdGlvbihjb21tYW5kLmNvbmRpdGlvbiwgJ1xuJy5qb2luKGNvbW1hbmRfbGluZXMp
KSkKIAogICAgICAgICAjIEFub255bW91cyBldmVudCBlbnVtcy4KICAgICAgICAgZm9yIGV2ZW50
IGluIHNlbGYuZXZlbnRzX2Zvcl9kb21haW4oZG9tYWluKToKKyAgICAgICAgICAgIGV2ZW50X2xp
bmVzID0gW10KICAgICAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gZXZlbnQuZXZlbnRfcGFyYW1l
dGVyczoKICAgICAgICAgICAgICAgICBpZiAoaXNpbnN0YW5jZShwYXJhbWV0ZXIudHlwZSwgRW51
bVR5cGUpIGFuZCBwYXJhbWV0ZXIudHlwZS5pc19hbm9ueW1vdXMpOgotICAgICAgICAgICAgICAg
ICAgICBhZGRfbmV3bGluZShsaW5lcykKLSAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5k
KHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2NvbnZlcnNpb25fZm9yX3BhcmFtZXRlcihk
b21haW4sIGV2ZW50LmV2ZW50X25hbWUsIHBhcmFtZXRlcikpCisgICAgICAgICAgICAgICAgICAg
IGFkZF9uZXdsaW5lKGV2ZW50X2xpbmVzKQorICAgICAgICAgICAgICAgICAgICBldmVudF9saW5l
cy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fY29udmVyc2lvbl9mb3JfcGFy
YW1ldGVyKGRvbWFpbiwgZXZlbnQuZXZlbnRfbmFtZSwgcGFyYW1ldGVyKSkKKyAgICAgICAgICAg
IGlmIGxlbihldmVudF9saW5lcyk6CisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYu
d3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZXZlbnQuY29uZGl0aW9uLCAnXG4nLmpvaW4o
ZXZlbnRfbGluZXMpKSkKIAotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQotCi0gICAg
ZGVmIF9nZW5lcmF0ZV9lbnVtX2NvbnZlcnNpb25fZm9yX3BsYXRmb3JtcyhzZWxmKToKLSAgICAg
ICAgb2JqY19lbnVtX25hbWUgPSAnJXNQbGF0Zm9ybScgJSBzZWxmLm9iamNfcHJlZml4KCkKLSAg
ICAgICAgZW51bV92YWx1ZXMgPSBbcGxhdGZvcm0ubmFtZSBmb3IgcGxhdGZvcm0gaW4gUGxhdGZv
cm1zXQotICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5l
cmF0ZV9lbnVtX29iamNfdG9fcHJvdG9jb2xfc3RyaW5nKG9iamNfZW51bV9uYW1lLCBlbnVtX3Zh
bHVlcykpCi0gICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9lbnVtX2Zyb21fcHJv
dG9jb2xfc3RyaW5nKG9iamNfZW51bV9uYW1lLCBlbnVtX3ZhbHVlcykpCi0gICAgICAgIHJldHVy
biAnXG5cbicuam9pbihsaW5lcykKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJk
X2Zvcl9jb25kaXRpb24oZG9tYWluLmNvbmRpdGlvbiwgJ1xuJy5qb2luKGxpbmVzKSkKIAogICAg
IGRlZiBfZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fY29udmVyc2lvbl9mb3JfZGVjbGFyYXRpb24o
c2VsZiwgZG9tYWluLCBkZWNsYXJhdGlvbik6CiAgICAgICAgIG9iamNfZW51bV9uYW1lID0gc2Vs
Zi5vYmpjX2VudW1fbmFtZV9mb3JfYW5vbnltb3VzX2VudW1fZGVjbGFyYXRpb24oZGVjbGFyYXRp
b24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9nZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVfY29udmVyc2lvbnNfaW1wbGVtZW50
YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVfY29udmVyc2lvbnNfaW1wbGVtZW50YXRpb24u
cHkKaW5kZXggYTM2ZDgxM2VjZWUuLmZiZDEzMWE2NmUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX3Byb3Rv
Y29sX3R5cGVfY29udmVyc2lvbnNfaW1wbGVtZW50YXRpb24ucHkKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19wcm90b2Nv
bF90eXBlX2NvbnZlcnNpb25zX2ltcGxlbWVudGF0aW9uLnB5CkBAIC04MywxNSArODMsMTYgQEAg
Y2xhc3MgT2JqQ1Byb3RvY29sVHlwZUNvbnZlcnNpb25zSW1wbGVtZW50YXRpb25HZW5lcmF0b3Io
T2JqQ0dlbmVyYXRvcik6CiAgICAgZGVmIF9nZW5lcmF0ZV90eXBlX2ZhY3RvcnlfY2F0ZWdvcnlf
aW50ZXJmYWNlKHNlbGYsIGRvbWFpbnMpOgogICAgICAgICBsaW5lcyA9IFtdCiAgICAgICAgIGZv
ciBkb21haW4gaW4gZG9tYWluczoKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnQGludGVyZmFj
ZSAlc1R5cGVDb252ZXJzaW9ucyAoJXNEb21haW4pJyAlIChzZWxmLnByb3RvY29sX25hbWUoKSwg
ZG9tYWluLmRvbWFpbl9uYW1lKSkKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKKyAgICAg
ICAgICAgIGRvbWFpbl9saW5lcyA9IFtdCisgICAgICAgICAgICBkb21haW5fbGluZXMuYXBwZW5k
KCdAaW50ZXJmYWNlICVzVHlwZUNvbnZlcnNpb25zICglc0RvbWFpbiknICUgKHNlbGYucHJvdG9j
b2xfbmFtZSgpLCBkb21haW4uZG9tYWluX25hbWUpKQorICAgICAgICAgICAgYWRkX25ld2xpbmUo
ZG9tYWluX2xpbmVzKQogCiAgICAgICAgICAgICBmb3IgZGVjbGFyYXRpb24gaW4gc2VsZi50eXBl
X2RlY2xhcmF0aW9uc19mb3JfZG9tYWluKGRvbWFpbik6Ci0gICAgICAgICAgICAgICAgbGluZXMu
YXBwZW5kKHNlbGYuX2dlbmVyYXRlX3R5cGVfZmFjdG9yeV9tZXRob2RfZGVjbGFyYXRpb24oZG9t
YWluLCBkZWNsYXJhdGlvbikpCi0KLSAgICAgICAgICAgIGFkZF9uZXdsaW5lKGxpbmVzKQotICAg
ICAgICAgICAgbGluZXMuYXBwZW5kKCdAZW5kJykKKyAgICAgICAgICAgICAgICBkb21haW5fbGlu
ZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX3R5cGVfZmFjdG9yeV9tZXRob2RfZGVjbGFyYXRpb24o
ZG9tYWluLCBkZWNsYXJhdGlvbikpCiAKKyAgICAgICAgICAgIGFkZF9uZXdsaW5lKGRvbWFpbl9s
aW5lcykKKyAgICAgICAgICAgIGRvbWFpbl9saW5lcy5hcHBlbmQoJ0BlbmQnKQorICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZG9tYWlu
LmNvbmRpdGlvbiwgJ1xuJy5qb2luKGRvbWFpbl9saW5lcykpKQogICAgICAgICByZXR1cm4gJ1xu
Jy5qb2luKGxpbmVzKQogCiAgICAgZGVmIF9nZW5lcmF0ZV90eXBlX2ZhY3RvcnlfbWV0aG9kX2Rl
Y2xhcmF0aW9uKHNlbGYsIGRvbWFpbiwgZGVjbGFyYXRpb24pOgpAQCAtMTAwLDIwICsxMDEsMjMg
QEAgY2xhc3MgT2JqQ1Byb3RvY29sVHlwZUNvbnZlcnNpb25zSW1wbGVtZW50YXRpb25HZW5lcmF0
b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgICAgICAgICByZXNvbHZlZF90eXBlID0gcmVzb2x2ZWRf
dHlwZS5hbGlhc2VkX3R5cGUKICAgICAgICAgaWYgaXNpbnN0YW5jZShyZXNvbHZlZF90eXBlLCAo
T2JqZWN0VHlwZSwgQXJyYXlUeXBlLCBQcmltaXRpdmVUeXBlKSk6CiAgICAgICAgICAgICBvYmpj
X3R5cGUgPSBzZWxmLm9iamNfY2xhc3NfZm9yX3R5cGUocmVzb2x2ZWRfdHlwZSkKLSAgICAgICAg
ICAgIHJldHVybiAnKyAodm9pZClfcGFyc2UlczooJXMgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6
KGlkKXBheWxvYWQ7JyAlIChkZWNsYXJhdGlvbi50eXBlLnJhd19uYW1lKCksIG9iamNfdHlwZSkK
KyAgICAgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRl
Y2xhcmF0aW9uLmNvbmRpdGlvbiwgJysgKHZvaWQpX3BhcnNlJXM6KCVzICoqKW91dFZhbHVlIGZy
b21QYXlsb2FkOihpZClwYXlsb2FkOycgJSAoZGVjbGFyYXRpb24udHlwZS5yYXdfbmFtZSgpLCBv
YmpjX3R5cGUpKQogICAgICAgICBpZiBpc2luc3RhbmNlKHJlc29sdmVkX3R5cGUsIEVudW1UeXBl
KToKLSAgICAgICAgICAgIHJldHVybiAnKyAodm9pZClfcGFyc2UlczooTlNOdW1iZXIgKiopb3V0
VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7JyAlIGRlY2xhcmF0aW9uLnR5cGUucmF3X25h
bWUoKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRp
b24oZGVjbGFyYXRpb24uY29uZGl0aW9uLCAnKyAodm9pZClfcGFyc2UlczooTlNOdW1iZXIgKiop
b3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7JyAlIGRlY2xhcmF0aW9uLnR5cGUucmF3
X25hbWUoKSkKIAogICAgIGRlZiBfZ2VuZXJhdGVfdHlwZV9mYWN0b3J5X2NhdGVnb3J5X2ltcGxl
bWVudGF0aW9uKHNlbGYsIGRvbWFpbnMpOgogICAgICAgICBsaW5lcyA9IFtdCiAgICAgICAgIGZv
ciBkb21haW4gaW4gZG9tYWluczoKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnQGltcGxlbWVu
dGF0aW9uICVzVHlwZUNvbnZlcnNpb25zICglc0RvbWFpbiknICUgKHNlbGYucHJvdG9jb2xfbmFt
ZSgpLCBkb21haW4uZG9tYWluX25hbWUpKQotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQor
ICAgICAgICAgICAgZG9tYWluX2xpbmVzID0gW10KKyAgICAgICAgICAgIGRvbWFpbl9saW5lcy5h
cHBlbmQoJ0BpbXBsZW1lbnRhdGlvbiAlc1R5cGVDb252ZXJzaW9ucyAoJXNEb21haW4pJyAlIChz
ZWxmLnByb3RvY29sX25hbWUoKSwgZG9tYWluLmRvbWFpbl9uYW1lKSkKKyAgICAgICAgICAgIGFk
ZF9uZXdsaW5lKGRvbWFpbl9saW5lcykKIAogICAgICAgICAgICAgZm9yIGRlY2xhcmF0aW9uIGlu
IHNlbGYudHlwZV9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbihkb21haW4pOgotICAgICAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV90eXBlX2ZhY3RvcnlfbWV0aG9kX2ltcGxl
bWVudGF0aW9uKGRvbWFpbiwgZGVjbGFyYXRpb24pKQotICAgICAgICAgICAgICAgIGFkZF9uZXds
aW5lKGxpbmVzKQotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdAZW5kJykKKyAgICAgICAgICAg
ICAgICBkb21haW5fbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX3R5cGVfZmFjdG9yeV9tZXRo
b2RfaW1wbGVtZW50YXRpb24oZG9tYWluLCBkZWNsYXJhdGlvbikpCisgICAgICAgICAgICAgICAg
YWRkX25ld2xpbmUoZG9tYWluX2xpbmVzKQorCisgICAgICAgICAgICBkb21haW5fbGluZXMuYXBw
ZW5kKCdAZW5kJykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFy
ZF9mb3JfY29uZGl0aW9uKGRvbWFpbi5jb25kaXRpb24sICdcbicuam9pbihkb21haW5fbGluZXMp
KSkKICAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKIAogICAgIGRlZiBfZ2VuZXJhdGVf
dHlwZV9mYWN0b3J5X21ldGhvZF9pbXBsZW1lbnRhdGlvbihzZWxmLCBkb21haW4sIGRlY2xhcmF0
aW9uKToKQEAgLTE0MSw0ICsxNDUsNCBAQCBjbGFzcyBPYmpDUHJvdG9jb2xUeXBlQ29udmVyc2lv
bnNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKICAgICAgICAgICAgIGxp
bmVzLmFwcGVuZCgnICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05T
RGljdGlvbmFyeSBjbGFzc10pOycpCiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAqb3V0
VmFsdWUgPSBbWyVzIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07JyAlIChvYmpjX2Ns
YXNzKSkKICAgICAgICAgbGluZXMuYXBwZW5kKCd9JykKLSAgICAgICAgcmV0dXJuICdcbicuam9p
bihsaW5lcykKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRp
b24oZGVjbGFyYXRpb24uY29uZGl0aW9uLCAnXG4nLmpvaW4obGluZXMpKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVf
b2JqY19wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfcHJvdG9jb2xfdHlw
ZXNfaW1wbGVtZW50YXRpb24ucHkKaW5kZXggYzg3MDg4MWFiZDguLjAwZDdhMGFmZTdkIDEwMDc1
NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9n
ZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5CisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNf
cHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkKQEAgLTkxLDcgKzkxLDcgQEAgY2xhc3Mg
T2JqQ1Byb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToK
ICAgICAgICAgICAgIGlmIChpc2luc3RhbmNlKGRlY2xhcmF0aW9uLnR5cGUsIE9iamVjdFR5cGUp
KToKICAgICAgICAgICAgICAgICBhZGRfbmV3bGluZShsaW5lcykKICAgICAgICAgICAgICAgICBs
aW5lcy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV90eXBlX2ltcGxlbWVudGF0aW9uKGRvbWFpbiwgZGVj
bGFyYXRpb24pKQotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorICAgICAgICByZXR1
cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9uLCAn
XG4nLmpvaW4obGluZXMpKQogCiAgICAgZGVmIGdlbmVyYXRlX3R5cGVfaW1wbGVtZW50YXRpb24o
c2VsZiwgZG9tYWluLCBkZWNsYXJhdGlvbik6CiAgICAgICAgIGxpbmVzID0gW10KQEAgLTExMiw3
ICsxMTIsNyBAQCBjbGFzcyBPYmpDUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9y
KE9iakNHZW5lcmF0b3IpOgogICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRl
X2dldHRlcl9mb3JfbWVtYmVyKGRvbWFpbiwgZGVjbGFyYXRpb24sIG1lbWJlcikpCiAgICAgICAg
IGxpbmVzLmFwcGVuZCgnJykKICAgICAgICAgbGluZXMuYXBwZW5kKCdAZW5kJykKLSAgICAgICAg
cmV0dXJuICdcbicuam9pbihsaW5lcykKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1
YXJkX2Zvcl9jb25kaXRpb24oZGVjbGFyYXRpb24uY29uZGl0aW9uLCAnXG4nLmpvaW4obGluZXMp
KQogCiAgICAgZGVmIF9nZW5lcmF0ZV9pbml0X21ldGhvZF9mb3JfcHJvdG9jb2xfb2JqZWN0KHNl
bGYsIGRvbWFpbiwgZGVjbGFyYXRpb24pOgogICAgICAgICBsaW5lcyA9IFtdCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
b3IucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9n
ZW5lcmF0b3IucHkKaW5kZXggOGMyZmJiOGJjNTIuLjk0ZDE4ZDlkNjYxIDEwMDc1NQotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3Iu
cHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdG9yLnB5CkBAIC0zMSwxMCArMzEsMTAgQEAgZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBs
YXRlCiAKIHRyeToKICAgICBmcm9tIC5nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBHZW5lcmF0
b3JUZW1wbGF0ZXMgYXMgVGVtcGxhdGVzCi0gICAgZnJvbSAubW9kZWxzIGltcG9ydCBQcmltaXRp
dmVUeXBlLCBPYmplY3RUeXBlLCBBcnJheVR5cGUsIEVudW1UeXBlLCBBbGlhc2VkVHlwZSwgRnJh
bWV3b3JrcywgUGxhdGZvcm1zCisgICAgZnJvbSAubW9kZWxzIGltcG9ydCBQcmltaXRpdmVUeXBl
LCBPYmplY3RUeXBlLCBBcnJheVR5cGUsIEVudW1UeXBlLCBBbGlhc2VkVHlwZSwgRnJhbWV3b3Jr
cwogZXhjZXB0IFZhbHVlRXJyb3I6CiAgICAgZnJvbSBnZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9y
dCBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgVGVtcGxhdGVzCi0gICAgZnJvbSBtb2RlbHMgaW1wb3J0
IFByaW1pdGl2ZVR5cGUsIE9iamVjdFR5cGUsIEFycmF5VHlwZSwgRW51bVR5cGUsIEFsaWFzZWRU
eXBlLCBGcmFtZXdvcmtzLCBQbGF0Zm9ybXMKKyAgICBmcm9tIG1vZGVscyBpbXBvcnQgUHJpbWl0
aXZlVHlwZSwgT2JqZWN0VHlwZSwgQXJyYXlUeXBlLCBFbnVtVHlwZSwgQWxpYXNlZFR5cGUsIEZy
YW1ld29ya3MKIAogbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCiAKQEAgLTk0LDM1
ICs5NCwyOCBAQCBfVFlQRVNfV0lUSF9PUEVOX0ZJRUxEUyA9IHsKIH0KIAogY2xhc3MgR2VuZXJh
dG9yOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlbCwgcGxhdGZvcm0sIGlucHV0X2ZpbGVw
YXRoKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKToKICAg
ICAgICAgc2VsZi5fbW9kZWwgPSBtb2RlbAotICAgICAgICBzZWxmLl9wbGF0Zm9ybSA9IHBsYXRm
b3JtCiAgICAgICAgIHNlbGYuX2lucHV0X2ZpbGVwYXRoID0gaW5wdXRfZmlsZXBhdGgKICAgICAg
ICAgc2VsZi5fc2V0dGluZ3MgPSB7fQogCiAgICAgZGVmIG1vZGVsKHNlbGYpOgogICAgICAgICBy
ZXR1cm4gc2VsZi5fbW9kZWwKIAotICAgIGRlZiBwbGF0Zm9ybShzZWxmKToKLSAgICAgICAgcmV0
dXJuIHNlbGYuX3BsYXRmb3JtCi0KICAgICBkZWYgc2V0X2dlbmVyYXRvcl9zZXR0aW5nKHNlbGYs
IGtleSwgdmFsdWUpOgogICAgICAgICBzZWxmLl9zZXR0aW5nc1trZXldID0gdmFsdWUKIAotICAg
IGRlZiBjYW5fZ2VuZXJhdGVfcGxhdGZvcm0oc2VsZiwgbW9kZWxfcGxhdGZvcm0pOgotICAgICAg
ICByZXR1cm4gbW9kZWxfcGxhdGZvcm0gaXMgUGxhdGZvcm1zLkdlbmVyaWMgb3Igc2VsZi5fcGxh
dGZvcm0gaXMgUGxhdGZvcm1zLkFsbCBvciBtb2RlbF9wbGF0Zm9ybSBpcyBzZWxmLl9wbGF0Zm9y
bQotCiAgICAgZGVmIHZlcnNpb25fZm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgogICAgICAgICBy
ZXR1cm4gZG9tYWluLnZlcnNpb24oKQogCiAgICAgZGVmIHR5cGVfZGVjbGFyYXRpb25zX2Zvcl9k
b21haW4oc2VsZiwgZG9tYWluKToKLSAgICAgICAgcmV0dXJuIFt0eXBlX2RlY2xhcmF0aW9uIGZv
ciB0eXBlX2RlY2xhcmF0aW9uIGluIGRvbWFpbi5hbGxfdHlwZV9kZWNsYXJhdGlvbnMoKSBpZiBz
ZWxmLmNhbl9nZW5lcmF0ZV9wbGF0Zm9ybSh0eXBlX2RlY2xhcmF0aW9uLnBsYXRmb3JtKV0KKyAg
ICAgICAgcmV0dXJuIGRvbWFpbi5hbGxfdHlwZV9kZWNsYXJhdGlvbnMoKQogCiAgICAgZGVmIGNv
bW1hbmRzX2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToKLSAgICAgICAgcmV0dXJuIFtjb21tYW5k
IGZvciBjb21tYW5kIGluIGRvbWFpbi5hbGxfY29tbWFuZHMoKSBpZiBzZWxmLmNhbl9nZW5lcmF0
ZV9wbGF0Zm9ybShjb21tYW5kLnBsYXRmb3JtKV0KKyAgICAgICAgcmV0dXJuIGRvbWFpbi5hbGxf
Y29tbWFuZHMoKQogCiAgICAgZGVmIGV2ZW50c19mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6Ci0g
ICAgICAgIHJldHVybiBbZXZlbnQgZm9yIGV2ZW50IGluIGRvbWFpbi5hbGxfZXZlbnRzKCkgaWYg
c2VsZi5jYW5fZ2VuZXJhdGVfcGxhdGZvcm0oZXZlbnQucGxhdGZvcm0pXQorICAgICAgICByZXR1
cm4gZG9tYWluLmFsbF9ldmVudHMoKQogCiAgICAgIyBUaGUgZ29vZnkgbmFtZSBpcyB0byBkaXNh
bWJpZ3VhdGUgZ2VuZXJhdG9yIHNldHRpbmdzIGZyb20gZnJhbWV3b3JrIHNldHRpbmdzLgogICAg
IGRlZiBnZXRfZ2VuZXJhdG9yX3NldHRpbmcoc2VsZiwga2V5LCBkZWZhdWx0PU5vbmUpOgpAQCAt
MjY3LDIyICsyNjAsMTUgQEAgY2xhc3MgR2VuZXJhdG9yOgogICAgICAgICBzZWxmLl9hc3NpZ25l
ZF9lbnVtX3ZhbHVlcy5hcHBlbmQoZW51bV92YWx1ZSkKIAogICAgICMgTWlzY2VsbGFuZW91cyB0
ZXh0IG1hbmlwdWxhdGlvbiByb3V0aW5lcy4KLSAgICBkZWYgd3JhcF93aXRoX2d1YXJkX2Zvcl9k
b21haW4oc2VsZiwgZG9tYWluLCB0ZXh0KToKLSAgICAgICAgaWYgc2VsZi5tb2RlbCgpLmZyYW1l
d29yayBpcyBGcmFtZXdvcmtzLldlYkluc3BlY3RvcjoKLSAgICAgICAgICAgIHJldHVybiB0ZXh0
Ci0gICAgICAgIGd1YXJkID0gZG9tYWluLmZlYXR1cmVfZ3VhcmQKLSAgICAgICAgaWYgZ3VhcmQ6
Ci0gICAgICAgICAgICByZXR1cm4gR2VuZXJhdG9yLndyYXBfd2l0aF9ndWFyZChndWFyZCwgdGV4
dCkKKyAgICBkZWYgd3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oc2VsZiwgY29uZGl0aW9u
LCB0ZXh0KToKKyAgICAgICAgaWYgY29uZGl0aW9uOgorICAgICAgICAgICAgcmV0dXJuICdcbicu
am9pbihbCisgICAgICAgICAgICAgICAgJyNpZiAlcycgJSBjb25kaXRpb24sCisgICAgICAgICAg
ICAgICAgdGV4dCwKKyAgICAgICAgICAgICAgICAnI2VuZGlmIC8vICVzJyAlIGNvbmRpdGlvbiwK
KyAgICAgICAgICAgIF0pCiAgICAgICAgIHJldHVybiB0ZXh0CiAKLSAgICBAc3RhdGljbWV0aG9k
Ci0gICAgZGVmIHdyYXBfd2l0aF9ndWFyZChndWFyZCwgdGV4dCk6Ci0gICAgICAgIHJldHVybiAn
XG4nLmpvaW4oWwotICAgICAgICAgICAgJyNpZiAlcycgJSBndWFyZCwKLSAgICAgICAgICAgIHRl
eHQsCi0gICAgICAgICAgICAnI2VuZGlmIC8vICVzJyAlIGd1YXJkLAotICAgICAgICBdKQotCiAg
ICAgQHN0YXRpY21ldGhvZAogICAgIGRlZiBzdHlsaXplZF9uYW1lX2Zvcl9lbnVtX3ZhbHVlKGVu
dW1fdmFsdWUpOgogICAgICAgICByZWdleCA9ICcoJXMpJyAlICJ8Ii5qb2luKF9BTFdBWVNfU1BF
Q0lBTENBU0VEX0VOVU1fVkFMVUVfU1VCU1RSSU5HUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL21vZGVscy5weSBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL21vZGVscy5weQppbmRleCA2
ZDk3YTA5M2MzNC4uMWRmMmJkZjY2NWEgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL21vZGVscy5weQorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9tb2RlbHMucHkKQEAgLTEzNiw0MSAr
MTM2LDYgQEAgY2xhc3MgRnJhbWV3b3JrczoKICAgICBUZXN0ID0gRnJhbWV3b3JrKCJUZXN0IikK
IAogCi1jbGFzcyBQbGF0Zm9ybToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSk6Ci0gICAg
ICAgIHNlbGYubmFtZSA9IG5hbWUKLQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgZnJvbVN0
cmluZyhwbGF0Zm9ybVN0cmluZyk6Ci0gICAgICAgIHBsYXRmb3JtU3RyaW5nID0gcGxhdGZvcm1T
dHJpbmcubG93ZXIoKQotICAgICAgICBpZiBwbGF0Zm9ybVN0cmluZyA9PSAiaW9zIjoKLSAgICAg
ICAgICAgIHJldHVybiBQbGF0Zm9ybXMuaU9TCi0KLSAgICAgICAgaWYgcGxhdGZvcm1TdHJpbmcg
PT0gIm1hY29zIjoKLSAgICAgICAgICAgIHJldHVybiBQbGF0Zm9ybXMubWFjT1MKLQotICAgICAg
ICBpZiBwbGF0Zm9ybVN0cmluZyA9PSAiYWxsIjoKLSAgICAgICAgICAgIHJldHVybiBQbGF0Zm9y
bXMuQWxsCi0KLSAgICAgICAgaWYgcGxhdGZvcm1TdHJpbmcgPT0gImdlbmVyaWMiIG9yIG5vdCBw
bGF0Zm9ybVN0cmluZzoKLSAgICAgICAgICAgIHJldHVybiBQbGF0Zm9ybXMuR2VuZXJpYwotCi0g
ICAgICAgIHJhaXNlIFBhcnNlRXhjZXB0aW9uKCJVbmtub3duIHBsYXRmb3JtOiAlcyIgJSBwbGF0
Zm9ybVN0cmluZykKLQotCi1jbGFzcyBQbGF0Zm9ybXM6Ci0gICAgQWxsID0gUGxhdGZvcm0oImFs
bCIpCi0gICAgR2VuZXJpYyA9IFBsYXRmb3JtKCJnZW5lcmljIikKLSAgICBpT1MgPSBQbGF0Zm9y
bSgiaW9zIikKLSAgICBtYWNPUyA9IFBsYXRmb3JtKCJtYWNvcyIpCi0KLSAgICAjIEFsbG93IGl0
ZXJhdGlvbiBvdmVyIGFsbCBwbGF0Zm9ybXMuIFNlZSA8aHR0cDovL3N0YWNrb3ZlcmZsb3cuY29t
L3F1ZXN0aW9ucy81NDM0NDAwLz4uCi0gICAgY2xhc3MgX19tZXRhY2xhc3NfXyh0eXBlKToKLSAg
ICAgICAgZGVmIF9faXRlcl9fKHNlbGYpOgotICAgICAgICAgICAgZm9yIGF0dHIgaW4gZGlyKFBs
YXRmb3Jtcyk6Ci0gICAgICAgICAgICAgICAgaWYgbm90IGF0dHIuc3RhcnRzd2l0aCgiX18iKToK
LSAgICAgICAgICAgICAgICAgICAgeWllbGQgZ2V0YXR0cihQbGF0Zm9ybXMsIGF0dHIpCi0KIGNs
YXNzIFR5cGVSZWZlcmVuY2U6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHR5cGVfa2luZCwgcmVm
ZXJlbmNlZF90eXBlX25hbWUsIGVudW1fdmFsdWVzLCBhcnJheV9pdGVtcyk6CiAgICAgICAgIHNl
bGYudHlwZV9raW5kID0gdHlwZV9raW5kCkBAIC00MzksNyArNDA0LDcgQEAgY2xhc3MgUHJvdG9j
b2w6CiAgICAgICAgICAgICAgICAgcmFpc2UgUGFyc2VFeGNlcHRpb24oIk1hbGZvcm1lZCBkb21h
aW4gc3BlY2lmaWNhdGlvbjogZXZlbnRzIGlzIG5vdCBhbiBhcnJheSIpCiAgICAgICAgICAgICBl
dmVudHMuZXh0ZW5kKFtzZWxmLnBhcnNlX2V2ZW50KGV2ZW50LCBkZWJ1Z2dhYmxlX3R5cGVzKSBm
b3IgZXZlbnQgaW4ganNvblsnZXZlbnRzJ11dKQogCi0gICAgICAgIHNlbGYuZG9tYWlucy5hcHBl
bmQoRG9tYWluKGpzb25bJ2RvbWFpbiddLCBqc29uLmdldCgnZGVzY3JpcHRpb24nLCAnJyksIGpz
b24uZ2V0KCdmZWF0dXJlR3VhcmQnKSwgZGVidWdnYWJsZV90eXBlcywgdGFyZ2V0X3R5cGVzLCBp
c1N1cHBsZW1lbnRhbCwgdmVyc2lvbiwgdHlwZXMsIGNvbW1hbmRzLCBldmVudHMpKQorICAgICAg
ICBzZWxmLmRvbWFpbnMuYXBwZW5kKERvbWFpbihqc29uWydkb21haW4nXSwganNvbi5nZXQoJ2Rl
c2NyaXB0aW9uJywgJycpLCBqc29uLmdldCgnY29uZGl0aW9uJyksIGRlYnVnZ2FibGVfdHlwZXMs
IHRhcmdldF90eXBlcywgaXNTdXBwbGVtZW50YWwsIHZlcnNpb24sIHR5cGVzLCBjb21tYW5kcywg
ZXZlbnRzKSkKIAogICAgIGRlZiBwYXJzZV90eXBlX2RlY2xhcmF0aW9uKHNlbGYsIGpzb24pOgog
ICAgICAgICBjaGVja19mb3JfcmVxdWlyZWRfcHJvcGVydGllcyhbJ2lkJywgJ3R5cGUnXSwganNv
biwgInR5cGUiKQpAQCAtNDU3LDggKzQyMiw3IEBAIGNsYXNzIFByb3RvY29sOgogICAgICAgICAg
ICAgcmFpc2UgUGFyc2VFeGNlcHRpb24oIk1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjog
dHlwZSBkZWNsYXJhdGlvbiBmb3IgJXMgaGFzIGR1cGxpY2F0ZSBtZW1iZXIgbmFtZXMiICUganNv
blsnaWQnXSkKIAogICAgICAgICB0eXBlX3JlZiA9IFR5cGVSZWZlcmVuY2UoanNvblsndHlwZSdd
LCBqc29uLmdldCgnJHJlZicpLCBqc29uLmdldCgnZW51bScpLCBqc29uLmdldCgnaXRlbXMnKSkK
LSAgICAgICAgcGxhdGZvcm0gPSBQbGF0Zm9ybS5mcm9tU3RyaW5nKGpzb24uZ2V0KCdwbGF0Zm9y
bScsICdnZW5lcmljJykpCi0gICAgICAgIHJldHVybiBUeXBlRGVjbGFyYXRpb24oanNvblsnaWQn
XSwgdHlwZV9yZWYsIGpzb24uZ2V0KCJkZXNjcmlwdGlvbiIsICIiKSwgcGxhdGZvcm0sIHR5cGVf
bWVtYmVycykKKyAgICAgICAgcmV0dXJuIFR5cGVEZWNsYXJhdGlvbihqc29uWydpZCddLCB0eXBl
X3JlZiwganNvbi5nZXQoImRlc2NyaXB0aW9uIiwgIiIpLCBqc29uLmdldCgnY29uZGl0aW9uJyks
IHR5cGVfbWVtYmVycykKIAogICAgIGRlZiBwYXJzZV90eXBlX21lbWJlcihzZWxmLCBqc29uKToK
ICAgICAgICAgY2hlY2tfZm9yX3JlcXVpcmVkX3Byb3BlcnRpZXMoWyduYW1lJ10sIGpzb24sICJ0
eXBlIG1lbWJlciIpCkBAIC01MDksOCArNDczLDcgQEAgY2xhc3MgUHJvdG9jb2w6CiAgICAgICAg
ICAgICBpZiBsZW4oZHVwbGljYXRlX25hbWVzKSA+IDA6CiAgICAgICAgICAgICAgICAgcmFpc2Ug
UGFyc2VFeGNlcHRpb24oIk1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjogcmV0dXJuIHBh
cmFtZXRlciBsaXN0IGZvciBjb21tYW5kICVzIGhhcyBkdXBsaWNhdGUgcGFyYW1ldGVyIG5hbWVz
IiAlIGpzb25bJ25hbWUnXSkKIAotICAgICAgICBwbGF0Zm9ybSA9IFBsYXRmb3JtLmZyb21TdHJp
bmcoanNvbi5nZXQoJ3BsYXRmb3JtJywgJ2dlbmVyaWMnKSkKLSAgICAgICAgcmV0dXJuIENvbW1h
bmQoanNvblsnbmFtZSddLCB0YXJnZXRfdHlwZXMsIGNhbGxfcGFyYW1ldGVycywgcmV0dXJuX3Bh
cmFtZXRlcnMsIGpzb24uZ2V0KCdkZXNjcmlwdGlvbicsICIiKSwgcGxhdGZvcm0sIGpzb24uZ2V0
KCdhc3luYycsIEZhbHNlKSkKKyAgICAgICAgcmV0dXJuIENvbW1hbmQoanNvblsnbmFtZSddLCB0
YXJnZXRfdHlwZXMsIGNhbGxfcGFyYW1ldGVycywgcmV0dXJuX3BhcmFtZXRlcnMsIGpzb24uZ2V0
KCdkZXNjcmlwdGlvbicsICIiKSwganNvbi5nZXQoJ2NvbmRpdGlvbicpLCBqc29uLmdldCgnYXN5
bmMnLCBGYWxzZSkpCiAKICAgICBkZWYgcGFyc2VfZXZlbnQoc2VsZiwganNvbiwgZGVidWdnYWJs
ZV90eXBlcyk6CiAgICAgICAgIGNoZWNrX2Zvcl9yZXF1aXJlZF9wcm9wZXJ0aWVzKFsnbmFtZSdd
LCBqc29uLCAiZXZlbnQiKQpAQCAtNTQ0LDggKzUwNyw3IEBAIGNsYXNzIFByb3RvY29sOgogICAg
ICAgICAgICAgaWYgbGVuKGR1cGxpY2F0ZV9uYW1lcykgPiAwOgogICAgICAgICAgICAgICAgIHJh
aXNlIFBhcnNlRXhjZXB0aW9uKCJNYWxmb3JtZWQgZG9tYWluIHNwZWNpZmljYXRpb246IHBhcmFt
ZXRlciBsaXN0IGZvciBldmVudCAlcyBoYXMgZHVwbGljYXRlIHBhcmFtZXRlciBuYW1lcyIgJSBq
c29uWyduYW1lJ10pCiAKLSAgICAgICAgcGxhdGZvcm0gPSBQbGF0Zm9ybS5mcm9tU3RyaW5nKGpz
b24uZ2V0KCdwbGF0Zm9ybScsICdnZW5lcmljJykpCi0gICAgICAgIHJldHVybiBFdmVudChqc29u
WyduYW1lJ10sIHRhcmdldF90eXBlcywgZXZlbnRfcGFyYW1ldGVycywganNvbi5nZXQoJ2Rlc2Ny
aXB0aW9uJywgIiIpLCBwbGF0Zm9ybSkKKyAgICAgICAgcmV0dXJuIEV2ZW50KGpzb25bJ25hbWUn
XSwgdGFyZ2V0X3R5cGVzLCBldmVudF9wYXJhbWV0ZXJzLCBqc29uLmdldCgnZGVzY3JpcHRpb24n
LCAiIiksIGpzb24uZ2V0KCdjb25kaXRpb24nKSkKIAogICAgIGRlZiBwYXJzZV9jYWxsX29yX3Jl
dHVybl9wYXJhbWV0ZXIoc2VsZiwganNvbik6CiAgICAgICAgIGNoZWNrX2Zvcl9yZXF1aXJlZF9w
cm9wZXJ0aWVzKFsnbmFtZSddLCBqc29uLCAicGFyYW1ldGVyIikKQEAgLTY0MywxMCArNjA1LDEw
IEBAIGNsYXNzIFByb3RvY29sOgogCiAKIGNsYXNzIERvbWFpbjoKLSAgICBkZWYgX19pbml0X18o
c2VsZiwgZG9tYWluX25hbWUsIGRlc2NyaXB0aW9uLCBmZWF0dXJlX2d1YXJkLCBkZWJ1Z2dhYmxl
X3R5cGVzLCB0YXJnZXRfdHlwZXMsIGlzU3VwcGxlbWVudGFsLCB2ZXJzaW9uLCB0eXBlX2RlY2xh
cmF0aW9ucywgY29tbWFuZHMsIGV2ZW50cyk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRvbWFp
bl9uYW1lLCBkZXNjcmlwdGlvbiwgY29uZGl0aW9uLCBkZWJ1Z2dhYmxlX3R5cGVzLCB0YXJnZXRf
dHlwZXMsIGlzU3VwcGxlbWVudGFsLCB2ZXJzaW9uLCB0eXBlX2RlY2xhcmF0aW9ucywgY29tbWFu
ZHMsIGV2ZW50cyk6CiAgICAgICAgIHNlbGYuZG9tYWluX25hbWUgPSBkb21haW5fbmFtZQogICAg
ICAgICBzZWxmLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24KLSAgICAgICAgc2VsZi5mZWF0dXJl
X2d1YXJkID0gZmVhdHVyZV9ndWFyZAorICAgICAgICBzZWxmLmNvbmRpdGlvbiA9IGNvbmRpdGlv
bgogICAgICAgICBzZWxmLmRlYnVnZ2FibGVfdHlwZXMgPSBkZWJ1Z2dhYmxlX3R5cGVzCiAgICAg
ICAgIHNlbGYudGFyZ2V0X3R5cGVzID0gdGFyZ2V0X3R5cGVzCiAgICAgICAgIHNlbGYuaXNfc3Vw
cGxlbWVudGFsID0gaXNTdXBwbGVtZW50YWwKQEAgLTY4NiwxMSArNjQ4LDExIEBAIGNsYXNzIERv
bWFpbnM6CiAKIAogY2xhc3MgVHlwZURlY2xhcmF0aW9uOgotICAgIGRlZiBfX2luaXRfXyhzZWxm
LCB0eXBlX25hbWUsIHR5cGVfcmVmLCBkZXNjcmlwdGlvbiwgcGxhdGZvcm0sIHR5cGVfbWVtYmVy
cyk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHR5cGVfbmFtZSwgdHlwZV9yZWYsIGRlc2NyaXB0
aW9uLCBjb25kaXRpb24sIHR5cGVfbWVtYmVycyk6CiAgICAgICAgIHNlbGYudHlwZV9uYW1lID0g
dHlwZV9uYW1lCiAgICAgICAgIHNlbGYudHlwZV9yZWYgPSB0eXBlX3JlZgogICAgICAgICBzZWxm
LmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24KLSAgICAgICAgc2VsZi5wbGF0Zm9ybSA9IHBsYXRm
b3JtCisgICAgICAgIHNlbGYuY29uZGl0aW9uID0gY29uZGl0aW9uCiAgICAgICAgIHNlbGYudHlw
ZV9tZW1iZXJzID0gdHlwZV9tZW1iZXJzCiAKICAgICAgICAgaWYgc2VsZi50eXBlX25hbWUgIT0g
dWNmaXJzdChzZWxmLnR5cGVfbmFtZSk6CkBAIC03MzQsMTMgKzY5NiwxMyBAQCBjbGFzcyBQYXJh
bWV0ZXI6CiAKIAogY2xhc3MgQ29tbWFuZDoKLSAgICBkZWYgX19pbml0X18oc2VsZiwgY29tbWFu
ZF9uYW1lLCB0YXJnZXRfdHlwZXMsIGNhbGxfcGFyYW1ldGVycywgcmV0dXJuX3BhcmFtZXRlcnMs
IGRlc2NyaXB0aW9uLCBwbGF0Zm9ybSwgaXNfYXN5bmMpOgorICAgIGRlZiBfX2luaXRfXyhzZWxm
LCBjb21tYW5kX25hbWUsIHRhcmdldF90eXBlcywgY2FsbF9wYXJhbWV0ZXJzLCByZXR1cm5fcGFy
YW1ldGVycywgZGVzY3JpcHRpb24sIGNvbmRpdGlvbiwgaXNfYXN5bmMpOgogICAgICAgICBzZWxm
LmNvbW1hbmRfbmFtZSA9IGNvbW1hbmRfbmFtZQogICAgICAgICBzZWxmLnRhcmdldF90eXBlcyA9
IHRhcmdldF90eXBlcwogICAgICAgICBzZWxmLmNhbGxfcGFyYW1ldGVycyA9IGNhbGxfcGFyYW1l
dGVycwogICAgICAgICBzZWxmLnJldHVybl9wYXJhbWV0ZXJzID0gcmV0dXJuX3BhcmFtZXRlcnMK
ICAgICAgICAgc2VsZi5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uCi0gICAgICAgIHNlbGYucGxh
dGZvcm0gPSBwbGF0Zm9ybQorICAgICAgICBzZWxmLmNvbmRpdGlvbiA9IGNvbmRpdGlvbgogICAg
ICAgICBzZWxmLmlzX2FzeW5jID0gaXNfYXN5bmMKIAogICAgIGRlZiByZXNvbHZlX3R5cGVfcmVm
ZXJlbmNlcyhzZWxmLCBwcm90b2NvbCwgZG9tYWluKToKQEAgLTc1NCwxMiArNzE2LDEyIEBAIGNs
YXNzIENvbW1hbmQ6CiAKIAogY2xhc3MgRXZlbnQ6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGV2
ZW50X25hbWUsIHRhcmdldF90eXBlcywgZXZlbnRfcGFyYW1ldGVycywgZGVzY3JpcHRpb24sIHBs
YXRmb3JtKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZXZlbnRfbmFtZSwgdGFyZ2V0X3R5cGVz
LCBldmVudF9wYXJhbWV0ZXJzLCBkZXNjcmlwdGlvbiwgY29uZGl0aW9uKToKICAgICAgICAgc2Vs
Zi5ldmVudF9uYW1lID0gZXZlbnRfbmFtZQogICAgICAgICBzZWxmLnRhcmdldF90eXBlcyA9IHRh
cmdldF90eXBlcwogICAgICAgICBzZWxmLmV2ZW50X3BhcmFtZXRlcnMgPSBldmVudF9wYXJhbWV0
ZXJzCiAgICAgICAgIHNlbGYuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbgotICAgICAgICBzZWxm
LnBsYXRmb3JtID0gcGxhdGZvcm0KKyAgICAgICAgc2VsZi5jb25kaXRpb24gPSBjb25kaXRpb24K
IAogICAgIGRlZiByZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyhzZWxmLCBwcm90b2NvbCwgZG9tYWlu
KToKICAgICAgICAgbG9nLmRlYnVnKCI+PiBSZXNvbHZpbmcgdHlwZSByZWZlcmVuY2VzIGZvciBw
YXJhbWV0ZXJzIGluIGV2ZW50OiAlcyIgJSBzZWxmLmV2ZW50X25hbWUpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQppbmRleCAyYjFk
ODc4MmNiMi4uYmQxOWMwMDI3NTEgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQpAQCAtMTE3LDcgKzExNyw2IEBAIGRlZiBnZW5l
cmF0ZV9mcm9tX3NwZWNpZmljYXRpb24ocHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoPU5v
bmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9kaXJwYXRoPU5vbmUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmNlX291dHB1dD1GYWxzZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWV3b3JrX25hbWU9IiIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtX25hbWU9IiIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlX2Zyb250ZW5kPVRydWUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlX2JhY2tlbmQ9VHJ1ZSk6CiAKQEAgLTEzMCw3ICsx
MjksNiBAQCBkZWYgZ2VuZXJhdGVfZnJvbV9zcGVjaWZpY2F0aW9uKHByaW1hcnlfc3BlY2lmaWNh
dGlvbl9maWxlcGF0aD1Ob25lLAogICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBlOgogICAg
ICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJFcnJvciBwYXJzaW5nIHZhbGlkIEpTT04gaW4gZmls
ZTogIiArIGZpbGVwYXRoICsgIlxuUGFyc2UgZXJyb3I6ICIgKyBzdHIoZSkpCiAKLSAgICBwbGF0
Zm9ybSA9IFBsYXRmb3JtLmZyb21TdHJpbmcocGxhdGZvcm1fbmFtZSkKICAgICBwcm90b2NvbCA9
IG1vZGVscy5Qcm90b2NvbChmcmFtZXdvcmtfbmFtZSkKICAgICBmb3Igc3BlY2lmaWNhdGlvbiBp
biBzdXBwbGVtZW50YWxfc3BlY2lmaWNhdGlvbl9maWxlcGF0aHM6CiAgICAgICAgIGxvYWRfc3Bl
Y2lmaWNhdGlvbihwcm90b2NvbCwgc3BlY2lmaWNhdGlvbiwgaXNTdXBwbGVtZW50YWw9VHJ1ZSkK
QEAgLTEzOCw3ICsxMzYsNyBAQCBkZWYgZ2VuZXJhdGVfZnJvbV9zcGVjaWZpY2F0aW9uKHByaW1h
cnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aD1Ob25lLAogCiAgICAgcHJvdG9jb2wucmVzb2x2ZV90
eXBlcygpCiAKLSAgICBnZW5lcmF0b3JfYXJndW1lbnRzID0gW3Byb3RvY29sLCBwbGF0Zm9ybSwg
cHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoXQorICAgIGdlbmVyYXRvcl9hcmd1bWVudHMg
PSBbcHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aF0KICAgICBnZW5lcmF0
b3JzID0gW10KIAogICAgIGlmIHByb3RvY29sLmZyYW1ld29yayBpcyBGcmFtZXdvcmtzLlRlc3Q6
CkBAIC0yMjksNyArMjI3LDYgQEAgZGVmIGdlbmVyYXRlX2Zyb21fc3BlY2lmaWNhdGlvbihwcmlt
YXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGg9Tm9uZSwKIAogaWYgX19uYW1lX18gPT0gJ19fbWFp
bl9fJzoKICAgICBhbGxvd2VkX2ZyYW1ld29ya19uYW1lcyA9IFsnSmF2YVNjcmlwdENvcmUnLCAn
V2ViSW5zcGVjdG9yJywgJ1dlYkluc3BlY3RvclVJJywgJ1dlYktpdCcsICdUZXN0J10KLSAgICBh
bGxvd2VkX3BsYXRmb3JtX25hbWVzID0gWydpT1MnLCAnbWFjT1MnLCAnYWxsJywgJ2dlbmVyaWMn
XQogICAgIGNsaV9wYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIodXNhZ2U9InVzYWdlOiAl
cHJvZyBbb3B0aW9uc10gUHJpbWFyeVByb3RvY29sLmpzb24gW1N1cHBsZW1lbnRhbFByb3RvY29s
Lmpzb24gLi4uXSIpCiAgICAgY2xpX3BhcnNlci5hZGRfb3B0aW9uKCItbyIsICItLW91dHB1dERp
ciIsIGhlbHA9IkRpcmVjdG9yeSB3aGVyZSBnZW5lcmF0ZWQgZmlsZXMgc2hvdWxkIGJlIHdyaXR0
ZW4uIikKICAgICBjbGlfcGFyc2VyLmFkZF9vcHRpb24oIi0tZnJhbWV3b3JrIiwgdHlwZT0iY2hv
aWNlIiwgY2hvaWNlcz1hbGxvd2VkX2ZyYW1ld29ya19uYW1lcywgaGVscD0iVGhlIGZyYW1ld29y
ayB0aGF0IHRoZSBwcmltYXJ5IHNwZWNpZmljYXRpb24gYmVsb25ncyB0by4iKQpAQCAtMjM4LDcg
KzIzNSw2IEBAIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgY2xpX3BhcnNlci5hZGRf
b3B0aW9uKCItdCIsICItLXRlc3QiLCBhY3Rpb249InN0b3JlX3RydWUiLCBoZWxwPSJFbmFibGUg
dGVzdCBtb2RlLiBVc2UgdW5pcXVlIG91dHB1dCBmaWxlbmFtZXMgY3JlYXRlZCBieSBwcmVwZW5k
aW5nIHRoZSBpbnB1dCBmaWxlbmFtZS4iKQogICAgIGNsaV9wYXJzZXIuYWRkX29wdGlvbigiLS1m
cm9udGVuZCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGhlbHA9IkdlbmVyYXRlIGNvZGUgZm9yIHRo
ZSBmcm9udGVuZC1zaWRlIG9mIHRoZSBwcm90b2NvbCBvbmx5LiIpCiAgICAgY2xpX3BhcnNlci5h
ZGRfb3B0aW9uKCItLWJhY2tlbmQiLCBhY3Rpb249InN0b3JlX3RydWUiLCBoZWxwPSJHZW5lcmF0
ZSBjb2RlIGZvciB0aGUgYmFja2VuZC1zaWRlIG9mIHRoZSBwcm90b2NvbCBvbmx5LiIpCi0gICAg
Y2xpX3BhcnNlci5hZGRfb3B0aW9uKCItLXBsYXRmb3JtIiwgZGVmYXVsdD0iZ2VuZXJpYyIsIGhl
bHA9IlRoZSBwbGF0Zm9ybSBvZiB0aGUgYmFja2VuZCBiZWluZyBnZW5lcmF0ZWQuIEZvciBleGFt
cGxlLCB3ZSBjb21waWxlIFdlYktpdDIgZm9yIGVpdGhlciBtYWNPUyBvciBpT1MuIFRoaXMgdmFs
dWUgaXMgY2FzZS1pbnNlbnNpdGl2ZS4gQWxsb3dlZCB2YWx1ZXM6ICVzIiAlICIsICIuam9pbihh
bGxvd2VkX3BsYXRmb3JtX25hbWVzKSkKICAgICBvcHRpb25zID0gTm9uZQogCiAgICAgYXJnX29w
dGlvbnMsIGFyZ192YWx1ZXMgPSBjbGlfcGFyc2VyLnBhcnNlX2FyZ3MoKQpAQCAtMjY0LDcgKzI2
MCw2IEBAIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgICAgICdvdXRwdXRfZGlycGF0
aCc6IGFyZ19vcHRpb25zLm91dHB1dERpciwKICAgICAgICAgJ2NvbmNhdGVuYXRlX291dHB1dCc6
IGFyZ19vcHRpb25zLnRlc3QsCiAgICAgICAgICdmcmFtZXdvcmtfbmFtZSc6IGFyZ19vcHRpb25z
LmZyYW1ld29yaywKLSAgICAgICAgJ3BsYXRmb3JtX25hbWUnOiBhcmdfb3B0aW9ucy5wbGF0Zm9y
bSwKICAgICAgICAgJ2ZvcmNlX291dHB1dCc6IGFyZ19vcHRpb25zLmZvcmNlLAogICAgICAgICAn
Z2VuZXJhdGVfYmFja2VuZCc6IGdlbmVyYXRlX2JhY2tlbmQsCiAgICAgICAgICdnZW5lcmF0ZV9m
cm9udGVuZCc6IGdlbmVyYXRlX2Zyb250ZW5kLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2FsbC9kZWZpbml0aW9ucy13aXRoLW1hYy1w
bGF0Zm9ybS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2FsbC9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA4MTdmMTM1ZWU1YS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2FsbC9kZWZpbml0aW9ucy13aXRo
LW1hYy1wbGF0Zm9ybS5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotewotICAg
ICJkb21haW4iOiAiTmV0d29yayIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7Ci0gICAgICAg
ICAgICAiaWQiOiAiTmV0d29ya0Vycm9yIiwKLSAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIs
Ci0gICAgICAgICAgICAicGxhdGZvcm0iOiAibWFjb3MiLAotICAgICAgICAgICAgInByb3BlcnRp
ZXMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJtZXNzYWdlIiwgInR5cGUiOiAic3Ry
aW5nIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIG1lc3NhZ2UuIiB9LAotICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAiY29kZSIsICJ0eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAiRXJy
b3IgY29kZS4iIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfQotICAgIF0sCi0gICAgImNvbW1h
bmRzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJsb2FkUmVzb3VyY2UiLAot
ICAgICAgICAgICAgInBsYXRmb3JtIjogIm1hY29zIiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlv
biI6ICJMb2FkcyBhIHJlc291cmNlIGluIHRoZSBjb250ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGlu
c3BlY3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNoZWNrcy4iCi0gICAgICAgIH0KLSAg
ICBdLAotICAgICJldmVudHMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogInJl
c291cmNlTG9hZGVkIiwKLSAgICAgICAgICAgICJwbGF0Zm9ybSI6ICJtYWNvcyIsCi0gICAgICAg
ICAgICAiZGVzY3JpcHRpb24iOiAiQSByZXNvdXJjZSB3YXMgbG9hZGVkLiIKLSAgICAgICAgfQot
ICAgIF0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9hbGwvZXhwZWN0ZWQvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNv
bi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
YWxsL2V4cGVjdGVkL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24tcmVzdWx0CmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNmU2OGY0YTlhZS4uMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2FsbC9leHBl
Y3RlZC9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uLXJlc3VsdAorKysgL2Rldi9u
dWxsCkBAIC0xLDEyMTcgKzAsMCBAQAotIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRD
b21tYW5kcy5qcwotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25z
LXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotLy8gTmV0d29yawotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigi
TmV0d29yayIsIG51bGwpOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIk5ldHdv
cmsubG9hZFJlc291cmNlIiwgbnVsbCwgW10sIFtdKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0
ZXJFdmVudCgiTmV0d29yay5yZXNvdXJjZUxvYWRlZCIsIG51bGwsIFtdKTsKLUluc3BlY3RvckJh
Y2tlbmQucmVnaXN0ZXJOZXR3b3JrRGlzcGF0Y2hlciA9IEluc3BlY3RvckJhY2tlbmQucmVnaXN0
ZXJEaXNwYXRjaGVyLmJpbmQoSW5zcGVjdG9yQmFja2VuZCwgIk5ldHdvcmsiKTsKLUluc3BlY3Rv
ckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIk5ldHdvcmsiLCBudWxsKTsKLSMjIyBFbmQgRmlsZTog
SW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJu
YXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBl
cy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
Lmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4K
LQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVyIHsKLXB1YmxpYzoKLSAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNr
ZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZN
b3ZlKGRpc3BhdGNoZXIpOyB9Ci0gICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRj
aGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQotcHJpdmF0
ZToKLSAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Ci19
OwotCi0KLWNsYXNzIEFsdGVybmF0ZU5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+QWx0ZXJu
YXRlTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRS
ZXNvdXJjZShsb25nIGNhbGxJZCkgPSAwOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
Ci0KLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSMj
IyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVk
ZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsK
LQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotY2xhc3MgQWx0
ZXJuYXRlTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyOwotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi1jbGFzcyBOZXR3b3JrQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlKEVycm9y
U3RyaW5nJikgPSAwOwotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgfk5ldHdvcmtCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXIoKTsKLX07Ci0KLWNsYXNzIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlciBm
aW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0g
ICAgc3RhdGljIFJlZjxOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlz
cGF0Y2hlciYsIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICB2b2lkIGRp
c3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9i
amVjdD4mJiBtZXNzYWdlKSBmaW5hbDsKLXByaXZhdGU6Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2Uo
bG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0jaWYg
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi1wdWJsaWM6Ci0gICAgdm9p
ZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZU5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hl
ciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5h
dGVEaXNwYXRjaGVyOyB9Ci1wcml2YXRlOgotICAgIEFsdGVybmF0ZU5ldHdvcmtCYWNrZW5kRGlz
cGF0Y2hlciogbV9hbHRlcm5hdGVEaXNwYXRjaGVyIHsgbnVsbHB0ciB9OwotI2VuZGlmCi1wcml2
YXRlOgotICAgIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYsIE5l
dHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICBOZXR3b3JrQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyKiBtX2FnZW50IHsgbnVsbHB0ciB9OwotfTsKLQotfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09O
VmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCi0jaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgotI2Vu
ZGlmCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1OZXR3b3JrQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyOjp+TmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQotCi1SZWY8TmV0
d29ya0JhY2tlbmREaXNwYXRjaGVyPiBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShC
YWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIE5ldHdvcmtCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXIqIGFnZW50KQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE5ldHdvcmtC
YWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKLX0KLQotTmV0d29y
a0JhY2tlbmREaXNwYXRjaGVyOjpOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3Bh
dGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
KiBhZ2VudCkKLSAgICA6IFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNw
YXRjaGVyKQotICAgICwgbV9hZ2VudChhZ2VudCkKLXsKLSAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oIk5ldHdvcmsiX3MsIHRoaXMpOwotfQotCi12
b2lkIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNv
bnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCi17Ci0gICAg
UmVmPE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7Ci0KLSAgICBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOwotICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFy
YW1zIl9zLCBwYXJhbWV0ZXJzKTsKLQotICAgIGlmIChtZXRob2QgPT0gImxvYWRSZXNvdXJjZSIp
Ci0gICAgICAgIGxvYWRSZXNvdXJjZShyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOwot
ICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJv
cihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yay4iICsgbWV0aG9k
ICsgIicgd2FzIG5vdCBmb3VuZCIpOwotfQotCi12b2lkIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hl
cjo6bG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQot
ewotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotICAgIGlmICht
X2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5s
b2FkUmVzb3VyY2UocmVxdWVzdElkKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgot
Ci0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0g
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2UoZXJyb3Ip
OwotCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAg
ZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJh
Y2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOwotfQotCi19IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNo
ZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRm
b3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3By
YWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8
d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFt
ZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEZyb250ZW5kUm91dGVyOwotCi1jbGFzcyBOZXR3
b3JrRnJvbnRlbmREaXNwYXRjaGVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1
YmxpYzoKLSAgICBOZXR3b3JrRnJvbnRlbmREaXNwYXRjaGVyKEZyb250ZW5kUm91dGVyJiBmcm9u
dGVuZFJvdXRlcikgOiBtX2Zyb250ZW5kUm91dGVyKGZyb250ZW5kUm91dGVyKSB7IH0KLSAgICB2
b2lkIHJlc291cmNlTG9hZGVkKCk7Ci1wcml2YXRlOgotICAgIEZyb250ZW5kUm91dGVyJiBtX2Zy
b250ZW5kUm91dGVyOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZp
bGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9u
dGVuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRl
ZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RG
cm9udGVuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFt
ZXNwYWNlIEluc3BlY3RvciB7Ci0KLXZvaWQgTmV0d29ya0Zyb250ZW5kRGlzcGF0Y2hlcjo6cmVz
b3VyY2VMb2FkZWQoKQotewotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2Qi
X3MsICJOZXR3b3JrLnJlc291cmNlTG9hZGVkIl9zKTsKLQotICAgIG1fZnJvbnRlbmRSb3V0ZXIu
c2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNw
cAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UK
LQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNp
bmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0K
LW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLQotCi0vLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KLW5h
bWVzcGFjZSBOZXR3b3JrIHsKLWNsYXNzIE5ldHdvcmtFcnJvcjsKLX0gLy8gTmV0d29yawotLy8g
RW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgotCi0KLQotCi1uYW1lc3BhY2UgTmV0d29yayB7
Ci1jbGFzcyBOZXR3b3JrRXJyb3IgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7Ci1wdWJsaWM6
Ci0gICAgZW51bSB7Ci0gICAgICAgIE5vRmllbGRzU2V0ID0gMCwKLSAgICAgICAgTWVzc2FnZVNl
dCA9IDEgPDwgMCwKLSAgICAgICAgQ29kZVNldCA9IDEgPDwgMSwKLSAgICAgICAgQWxsRmllbGRz
U2V0ID0gKE1lc3NhZ2VTZXQgfCBDb2RlU2V0KQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTxpbnQg
U1RBVEU+Ci0gICAgY2xhc3MgQnVpbGRlciB7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRy
PEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7Ci0KLSAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1
aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcihSZWY8LypOZXR3b3JrRXJyb3IqL0pTT046Ok9i
amVjdD4mJiBvYmplY3QpCi0gICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkK
LSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNT
ZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgZnJpZW5kIGNsYXNzIE5ldHdvcmtFcnJvcjsKLSAgICBwdWJsaWM6Ci0KLSAgICAgICAgQnVp
bGRlcjxTVEFURSB8IE1lc3NhZ2VTZXQ+JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYgdmFsdWUp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNZXNzYWdl
U2V0KSwgcHJvcGVydHlfbWVzc2FnZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0U3RyaW5nKCJtZXNzYWdlIl9zLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2Fz
dFN0YXRlPE1lc3NhZ2VTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgQ29kZVNldD4mIHNldENvZGUoaW50IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBD
T01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29kZVNldCksIHByb3BlcnR5X2NvZGVfYWxyZWFkeV9z
ZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldEludGVnZXIoImNvZGUiX3MsIHZhbHVlKTsK
LSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29kZVNldD4oKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIFJlZjxOZXR3b3JrRXJyb3I+IHJlbGVhc2UoKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVh
ZHkpOwotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKE5ldHdvcmtFcnJvcikgPT0g
c2l6ZW9mKEpTT046Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsKLQotICAgICAgICAgICAgUmVmPEpT
T046Ok9iamVjdD4ganNvblJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7Ci0gICAg
ICAgICAgICBhdXRvIHJlc3VsdCA9IFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPE5ldHdv
cmtFcnJvcj4qPigmanNvblJlc3VsdCkpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAg
ICAgICAgfQotICAgIH07Ci0KLSAgICAvKgotICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoK
LSAgICAgKiBSZWY8TmV0d29ya0Vycm9yPiByZXN1bHQgPSBOZXR3b3JrRXJyb3I6OmNyZWF0ZSgp
Ci0gICAgICogICAgIC5zZXRNZXNzYWdlKC4uLikKLSAgICAgKiAgICAgLnNldENvZGUoLi4uKQot
ICAgICAqICAgICAucmVsZWFzZSgpOwotICAgICAqLwotICAgIHN0YXRpYyBCdWlsZGVyPE5vRmll
bGRzU2V0PiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNT
ZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOwotICAgIH0KLX07Ci0KLX0gLy8gTmV0d29yawot
Ci0KLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
Ci0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0KLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1uYW1l
c3BhY2UgUHJvdG9jb2wgewotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5j
cHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxh
dGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0j
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXJzLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi1AcHJvdG9jb2wgVGVzdFByb3Rv
Y29sTmV0d29ya0RvbWFpbkhhbmRsZXI7Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLWNs
YXNzIE9iakNJbnNwZWN0b3JOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMg
QWx0ZXJuYXRlTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKLXB1YmxpYzoKLSAgICBPYmpDSW5zcGVjdG9yTmV0d29ya0JhY2tlbmREaXNwYXRj
aGVyKGlkPFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVs
ZWdhdGUgPSBoYW5kbGVyOyB9Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0SWQp
IGZpbmFsOwotcHJpdmF0ZToKLSAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sTmV0d29ya0Rv
bWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAi
Y29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQot
I2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLQotbmFtZXNw
YWNlIEluc3BlY3RvciB7Ci0KLXZvaWQgT2JqQ0luc3BlY3Rvck5ldHdvcmtCYWNrZW5kRGlzcGF0
Y2hlcjo6bG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkKQotewotICAgIGlmICghW21fZGVsZWdh
dGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2VXaXRoRXJyb3JDYWxs
YmFjazpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2RO
b3RGb3VuZCwgIidOZXR3b3JrLmxvYWRSZXNvdXJjZScgd2FzIG5vdCBmb3VuZCJfcyk7Ci0gICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3Ip
IHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1
ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwotICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgIH07Ci0KLSAgICBp
ZCBzdWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5k
UmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7Ci0gICAg
fTsKLQotICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZVdpdGhFcnJvckNhbGxiYWNrOmVycm9y
Q2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107Ci19Ci0KLQotfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERp
c3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9u
LmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1h
Yy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KLQotX19hdHRyaWJ1dGVf
XygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZp
Z3VyYXRpb24gOiBOU09iamVjdAotQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVy
PXNldE5ldHdvcmtIYW5kbGVyOikgaWQ8VGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkhhbmRsZXI+
IG5ldHdvcmtIYW5kbGVyOwotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBUZXN0UHJv
dG9jb2xOZXR3b3JrRG9tYWluRXZlbnREaXNwYXRjaGVyICpuZXR3b3JrRXZlbnREaXNwYXRjaGVy
OwotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJU
ZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVy
bmFsLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+Ci0jaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5o
PgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+
Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJv
dG9jb2xDb25maWd1cmF0aW9uCi17Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVy
KiBfY29udHJvbGxlcjsKLSAgICBpZDxUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluSGFuZGxlcj4g
X25ldHdvcmtIYW5kbGVyOwotICAgIFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5FdmVudERpc3Bh
dGNoZXIgKl9uZXR3b3JrRXZlbnREaXNwYXRjaGVyOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xs
ZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAg
cmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRyb2xsZXIgPSBj
b250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAg
ICBbX25ldHdvcmtIYW5kbGVyIHJlbGVhc2VdOwotICAgIFtfbmV0d29ya0V2ZW50RGlzcGF0Y2hl
ciByZWxlYXNlXTsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLS0gKHZvaWQpc2V0TmV0d29y
a0hhbmRsZXI6KGlkPFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5IYW5kbGVyPiloYW5kbGVyCi17
Ci0gICAgaWYgKGhhbmRsZXIgPT0gX25ldHdvcmtIYW5kbGVyKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBbX25ldHdvcmtIYW5kbGVyIHJlbGVhc2VdOwotICAgIF9uZXR3b3JrSGFuZGxlciA9IFto
YW5kbGVyIHJldGFpbl07Ci0KLSAgICBhdXRvIGFsdGVybmF0ZURpc3BhdGNoZXIgPSBtYWtlVW5p
cXVlPE9iakNJbnNwZWN0b3JOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI+KGhhbmRsZXIpOwotICAg
IGF1dG8gYWx0ZXJuYXRlQWdlbnQgPSBtYWtlVW5pcXVlPEFsdGVybmF0ZURpc3BhdGNoYWJsZUFn
ZW50PE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlciwgQWx0ZXJuYXRlTmV0d29ya0JhY2tlbmREaXNw
YXRjaGVyPj4oIk5ldHdvcmsiX3MsICpfY29udHJvbGxlciwgV1RGTW92ZShhbHRlcm5hdGVEaXNw
YXRjaGVyKSk7Ci0gICAgX2NvbnRyb2xsZXItPmFwcGVuZEV4dHJhQWdlbnQoV1RGTW92ZShhbHRl
cm5hdGVBZ2VudCkpOwotfQotCi0tIChpZDxUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluSGFuZGxl
cj4pbmV0d29ya0hhbmRsZXIKLXsKLSAgICByZXR1cm4gX25ldHdvcmtIYW5kbGVyOwotfQotCi0t
IChUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluRXZlbnREaXNwYXRjaGVyICopbmV0d29ya0V2ZW50
RGlzcGF0Y2hlcgotewotICAgIGlmICghX25ldHdvcmtFdmVudERpc3BhdGNoZXIpCi0gICAgICAg
IF9uZXR3b3JrRXZlbnREaXNwYXRjaGVyID0gW1tUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluRXZl
bnREaXNwYXRjaGVyIGFsbG9jXSBpbml0V2l0aENvbnRyb2xsZXI6X2NvbnRyb2xsZXJdOwotICAg
IHJldHVybiBfbmV0d29ya0V2ZW50RGlzcGF0Y2hlcjsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJu
YWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0
IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW1w
bGVtZW50YXRpb24gVGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkV2ZW50RGlzcGF0Y2hlcgotewot
ICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci19Ci0KLS0g
KGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29u
dHJvbGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYg
KCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAg
ICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZv
aWQpcmVzb3VyY2VMb2FkZWQKLXsKLSAgICBjb25zdCBGcm9udGVuZFJvdXRlciYgcm91dGVyID0g
X2NvbnRyb2xsZXItPmZyb250ZW5kUm91dGVyKCk7Ci0KLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBq
c29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNl
dFN0cmluZygibWV0aG9kIl9zLCAiTmV0d29yay5yZXNvdXJjZUxvYWRlZCJfcyk7Ci0gICAgcm91
dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwotfQotCi1AZW5kCi0K
LQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9u
Lmg+Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KLQot
Ci1AY2xhc3MgVGVzdFByb3RvY29sTmV0d29ya0Vycm9yOwotCi10eXBlZGVmIE5TX0VOVU0oTlNJ
bnRlZ2VyLCBUZXN0UHJvdG9jb2xQbGF0Zm9ybSkgewotICAgIFRlc3RQcm90b2NvbFBsYXRmb3Jt
QWxsLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYywKLSAgICBUZXN0UHJvdG9jb2xQ
bGF0Zm9ybUlPUywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TLAotfTsKLQotCi0KLQot
X19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQ
cm90b2NvbE5ldHdvcmtFcnJvciA6IFJXSVByb3RvY29sSlNPTk9iamVjdAotLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxv
YWQ7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xK
U09OT2JqZWN0ICopanNvbk9iamVjdDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6
KE5TU3RyaW5nICopbWVzc2FnZSBjb2RlOihpbnQpY29kZTsKLS8qIHJlcXVpcmVkICovIEBwcm9w
ZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqbWVzc2FnZTsKLS8qIHJlcXVpcmVkICov
IEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCBjb2RlOwotQGVuZAotCi1AcHJvdG9j
b2wgVGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkhhbmRsZXIgPE5TT2JqZWN0PgotQG9wdGlvbmFs
Ci0tICh2b2lkKWxvYWRSZXNvdXJjZVdpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5n
ICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikodm9pZCkpc3Vj
Y2Vzc0NhbGxiYWNrOwotQGVuZAotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVs
dCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkV2ZW50RGlzcGF0Y2hl
ciA6IE5TT2JqZWN0Ci0tICh2b2lkKXJlc291cmNlTG9hZGVkOwotQGVuZAotCi0KLSNpbXBvcnQg
PFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4KLQot
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRp
b25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJv
dG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVu
dGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgot
Ci1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5FdmVudERpc3BhdGNoZXIgKFBy
aXZhdGUpCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihJbnNwZWN0b3I6OkF1
Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcjsKLUBlbmQKLQotCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBv
cnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KLQotbmFtZXNw
YWNlIEluc3BlY3RvciB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KLU9wdGlv
bmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUp
OwotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sUGxhdGZvcm0g
dmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0
Zm9ybUFsbDoKLSAgICAgICAgcmV0dXJuICJhbGwiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQ
bGF0Zm9ybUdlbmVyaWM6Ci0gICAgICAgIHJldHVybiAiZ2VuZXJpYyJfczsKLSAgICBjYXNlIFRl
c3RQcm90b2NvbFBsYXRmb3JtSU9TOgotICAgICAgICByZXR1cm4gImlvcyJfczsKLSAgICBjYXNl
IFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M6Ci0gICAgICAgIHJldHVybiAibWFjb3MiX3M7Ci0g
ICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sUGxhdGZv
cm0+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2
YWx1ZSA9PSAiYWxsIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOwot
ICAgIGlmICh2YWx1ZSA9PSAiZ2VuZXJpYyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQ
bGF0Zm9ybUdlbmVyaWM7Ci0gICAgaWYgKHZhbHVlID09ICJpb3MiKQotICAgICAgICByZXR1cm4g
VGVzdFByb3RvY29sUGxhdGZvcm1JT1M7Ci0gICAgaWYgKHZhbHVlID09ICJtYWNvcyIpCi0gICAg
ICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOwotICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7Ci19Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2xUeXBlUGFyc2VyLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2Jq
ZWN0UHJpdmF0ZS5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW50ZXJmYWNl
IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoTmV0d29ya0RvbWFpbikKLQotKyAodm9pZClf
cGFyc2VOZXR3b3JrRXJyb3I6KFRlc3RQcm90b2NvbE5ldHdvcmtFcnJvciAqKilvdXRWYWx1ZSBm
cm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zIChOZXR3b3JrRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZU5l
dHdvcmtFcnJvcjooVGVzdFByb3RvY29sTmV0d29ya0Vycm9yICoqKW91dFZhbHVlIGZyb21QYXls
b2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXls
b2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9j
b2xOZXR3b3JrRXJyb3IgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKLX0KLQotQGVu
ZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0KLSMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29s
SW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0j
aW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotI2lt
cG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVz
aW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2Nv
bE5ldHdvcmtFcnJvcgotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxs
IE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCi17Ci0gICAgaWYgKCEoc2Vs
ZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBUSFJPV19FWENF
UFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJtZXNzYWdlIl0sIEAibWVzc2Fn
ZSIpOwotICAgIHNlbGYubWVzc2FnZSA9IHBheWxvYWRbQCJtZXNzYWdlIl07Ci0KLSAgICBUSFJP
V19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJjb2RlIl0sIEAiY29k
ZSIpOwotICAgIHNlbGYuY29kZSA9IFtwYXlsb2FkW0AiY29kZSJdIGludGVnZXJWYWx1ZV07Ci0K
LSAgICByZXR1cm4gc2VsZjsKLX0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2Jq
ZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilvYmplY3QKLXsKLSAgICBpZiAoIShzZWxmID0g
W3N1cGVyIGluaXRXaXRoSlNPTk9iamVjdDpbb2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0KCldKSkK
LSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZTooaW50KWNvZGUK
LXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsK
LQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkobWVzc2FnZSwgQCJt
ZXNzYWdlIik7Ci0KLSAgICBzZWxmLm1lc3NhZ2UgPSBtZXNzYWdlOwotICAgIHNlbGYuY29kZSA9
IGNvZGU7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClzZXRNZXNzYWdlOihOU1N0
cmluZyAqKW1lc3NhZ2UKLXsKLSAgICBbc3VwZXIgc2V0U3RyaW5nOm1lc3NhZ2UgZm9yS2V5OkAi
bWVzc2FnZSJdOwotfQotCi0tIChOU1N0cmluZyAqKW1lc3NhZ2UKLXsKLSAgICByZXR1cm4gW3N1
cGVyIHN0cmluZ0ZvcktleTpAIm1lc3NhZ2UiXTsKLX0KLQotLSAodm9pZClzZXRDb2RlOihpbnQp
Y29kZQotewotICAgIFtzdXBlciBzZXRJbnRlZ2VyOmNvZGUgZm9yS2V5OkAiY29kZSJdOwotfQot
Ci0tIChpbnQpY29kZQotewotICAgIHJldHVybiBbc3VwZXIgaW50ZWdlckZvcktleTpAImNvZGUi
XTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9j
b21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24gYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvY29tbWFuZC10YXJn
ZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kMjdhYjY1YjkyYQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9jb21tYW5kLXRh
cmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KQEAgLTAsMCArMSw5
IEBACitbCit7CisgICAgImRvbWFpbiI6ICJEb21haW4iLAorICAgICJkZWJ1Z2dhYmxlVHlwZXMi
OiBbInBhZ2UiXSwKKyAgICAidGFyZ2V0VHlwZXMiOiBbInBhZ2UiLCAid29ya2VyIl0sCisgICAg
ImNvbW1hbmRzIjogW3sibmFtZSI6ICJDb21tYW5kIn1dLAorICAgICJldmVudHMiOiBbeyJuYW1l
IjogIkV2ZW50In1dCit9CitdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbiBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9jb21tYW5kcy13
aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwLi4xMTI2MmU4ODlmYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0
ZS5qc29uCkBAIC0wLDAgKzEsMTA5IEBACit7CisgICAgImRvbWFpbiI6ICJEYXRhYmFzZSIsCisg
ICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiRGF0YWJhc2VJZCIs
CisgICAgICAgICAgICAidHlwZSI6ICJpbnRlZ2VyIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlv
biI6ICJVbmlxdWUgaWRlbnRpZmllciBvZiBEYXRhYmFzZSBvYmplY3QuIgorICAgICAgICB9LAor
ICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiUHJpbWFyeUNvbG9ycyIsCisgICAgICAgICAg
ICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgImVudW0iOiBbInJlZCIsICJncmVlbiIs
ICJibHVlIl0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkNvbG9y
TGlzdCIsCisgICAgICAgICAgICAidHlwZSI6ICJhcnJheSIsCisgICAgICAgICAgICAiaXRlbXMi
OiB7ICIkcmVmIjogIlByaW1hcnlDb2xvcnMiIH0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAg
ICAgICAgICAgImlkIjogIkVycm9yIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisg
ICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRGF0YWJhc2UgZXJyb3IuIiwKKyAgICAgICAgICAg
ICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibWVzc2FnZSIsICJ0
eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBtZXNzYWdlLiIgfSwKKyAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogImNvZGUiLCAidHlwZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0
aW9uIjogIkVycm9yIGNvZGUuIiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAor
ICAgICJjb21tYW5kcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiZXhlY3V0
ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyIsCisgICAgICAgICAgICAicGFyYW1ldGVycyI6
IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRhdGFiYXNlSWQiLCAiJHJlZiI6ICJEYXRh
YmFzZUlkIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicXVlcnkiLCAidHlwZSI6ICJz
dHJpbmciIH0KKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAicmV0dXJucyI6IFsKKyAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAib3B0
aW9uYWwiOiB0cnVlLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAorICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0
cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJu
dW1iZXIiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2
YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiwgIm9wdGlvbmFsIjogdHJ1
ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRh
dGFiYXNlSWQiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJzcWxFcnJvciIsICIkcmVmIjogIkVycm9yIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6ICJQcmltYXJ5Q29sb3Jz
IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYWx0ZXJu
YXRlQ29sb3JzIiwgIiRyZWYiOiAiQ29sb3JMaXN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmluZyIsICJl
bnVtIjogWyJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93IiwgImJsYWNrIl0sICJvcHRpb25hbCI6
IHRydWUgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAg
ICAibmFtZSI6ICJleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyIsCisgICAgICAg
ICAgICAiYXN5bmMiOiB0cnVlLAorICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIgfSwK
KyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInF1ZXJ5IiwgInR5cGUiOiAic3RyaW5nIiB9Cisg
ICAgICAgICAgICBdLAorICAgICAgICAgICAgInJldHVybnMiOiBbCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIm9wdGlvbmFsIjogdHJ1
ZSwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwKKyAgICAgICAgICAgICAgICB7ICJu
YW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiwgIm9w
dGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVzIiwgInR5
cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogImRhdGFiYXNlSWQiLCAiJHJlZiI6ICJEYXRhYmFzZUlkIiwg
Im9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic3FsRXJyb3Ii
LCAiJHJlZiI6ICJFcnJvciIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7
ICJuYW1lIjogInNjcmVlbkNvbG9yIiwgIiRyZWYiOiAiUHJpbWFyeUNvbG9ycyIsICJvcHRpb25h
bCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImFsdGVybmF0ZUNvbG9ycyIs
ICIkcmVmIjogIkNvbG9yTGlzdCIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInByaW50Q29sb3IiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsiY3lh
biIsICJtYWdlbnRhIiwgInllbGxvdyIsICJibGFjayJdLCAib3B0aW9uYWwiOiB0cnVlIH0KKyAg
ICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAi
ZXhlY3V0ZVNRTFN5bmMiLAorICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIgfSwKKyAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogInF1ZXJ5IiwgInR5cGUiOiAic3RyaW5nIiB9CisgICAg
ICAgICAgICBdLAorICAgICAgICAgICAgInJldHVybnMiOiBbCisgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAidHlwZSI6
ICJzdHJpbmciIH0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vdGVzIiwgInR5cGUi
OiAic3RyaW5nIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5
cGUiOiAibnVtYmVyIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVzIiwgInR5
cGUiOiAib2JqZWN0IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0
eXBlIjogImFueSIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRhdGFiYXNlSWQiLCAi
JHJlZiI6ICJEYXRhYmFzZUlkIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic3FsRXJy
b3IiLCAiJHJlZiI6ICJFcnJvciIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImFsdGVy
bmF0ZUNvbG9ycyIsICIkcmVmIjogIkNvbG9yTGlzdCIgfSwKKyAgICAgICAgICAgICAgICB7ICJu
YW1lIjogInNjcmVlbkNvbG9yIiwgIiRyZWYiOiAiUHJpbWFyeUNvbG9ycyIgfSwKKyAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInByaW50Q29sb3IiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6
IFsiY3lhbiIsICJtYWdlbnRhIiwgInllbGxvdyIsICJibGFjayJdIH0KKyAgICAgICAgICAgIF0K
KyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiZXhlY3V0ZVNRTEFz
eW5jIiwKKyAgICAgICAgICAgICJhc3luYyI6IHRydWUsCisgICAgICAgICAgICAicGFyYW1ldGVy
cyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRhdGFiYXNlSWQiLCAiJHJlZiI6ICJE
YXRhYmFzZUlkIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicXVlcnkiLCAidHlwZSI6
ICJzdHJpbmciIH0KKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAicmV0dXJucyI6IFsKKyAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAi
aXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiIH0sCisgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiIH0sCisgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiIH0sCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVycm9yIiB9LAorICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6ICJQcmltYXJ5Q29sb3JzIiB9LAorICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwgIiRyZWYiOiAiQ29sb3JM
aXN0IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjog
InN0cmluZyIsICJlbnVtIjogWyJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93IiwgImJsYWNrIl0g
fQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2NvbW1hbmRzLXdpdGgtb3B0
aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1
cm4tcGFyYW1ldGVycy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
Li4zNjFkNTdkODIwZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJu
LXBhcmFtZXRlcnMuanNvbgpAQCAtMCwwICsxLDg1IEBACit7CisgICAgImRvbWFpbiI6ICJEYXRh
YmFzZSIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiRGF0
YWJhc2VJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJpbnRlZ2VyIiwKKyAgICAgICAgICAgICJk
ZXNjcmlwdGlvbiI6ICJVbmlxdWUgaWRlbnRpZmllciBvZiBEYXRhYmFzZSBvYmplY3QuIgorICAg
ICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiUHJpbWFyeUNvbG9ycyIsCisg
ICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgImVudW0iOiBbInJlZCIs
ICJncmVlbiIsICJibHVlIl0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlk
IjogIkNvbG9yTGlzdCIsCisgICAgICAgICAgICAidHlwZSI6ICJhcnJheSIsCisgICAgICAgICAg
ICAiaXRlbXMiOiB7ICIkcmVmIjogIlByaW1hcnlDb2xvcnMiIH0KKyAgICAgICAgfSwKKyAgICAg
ICAgeworICAgICAgICAgICAgImlkIjogIkVycm9yIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9i
amVjdCIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRGF0YWJhc2UgZXJyb3IuIiwKKyAg
ICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibWVz
c2FnZSIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBtZXNzYWdlLiIg
fSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvZGUiLCAidHlwZSI6ICJpbnRlZ2VyIiwg
ImRlc2NyaXB0aW9uIjogIkVycm9yIGNvZGUuIiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0K
KyAgICBdLAorICAgICJjb21tYW5kcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUi
OiAiZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyIsCisgICAgICAgICAgICAicGFyYW1ldGVy
cyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAi
YXJyYXkiLCAib3B0aW9uYWwiOiB0cnVlLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9
LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciLCAi
b3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAi
LCAidHlwZSI6ICJudW1iZXIiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0cnVlIH0s
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiwgIm9w
dGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIs
ICIkcmVmIjogIkRhdGFiYXNlSWQiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVycm9yIiwgIm9wdGlvbmFsIjogdHJ1
ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6ICJQ
cmltYXJ5Q29sb3JzIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwgIiRyZWYiOiAiQ29sb3JMaXN0IiwgIm9wdGlvbmFsIjog
dHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjog
InN0cmluZyIsICJlbnVtIjogWyJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93IiwgImJsYWNrIl0s
ICJvcHRpb25hbCI6IHRydWUgfQorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJyZXR1cm5z
IjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJh
cnJheSIsICJvcHRpb25hbCI6IHRydWUsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0s
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIsICJv
cHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIs
ICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7
ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRydWUgfSwK
KyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiLCAib3B0
aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwg
IiRyZWYiOiAiRGF0YWJhc2VJZCIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiLCAib3B0aW9uYWwiOiB0cnVl
IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVmIjogIlBy
aW1hcnlDb2xvcnMiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJhbHRlcm5hdGVDb2xvcnMiLCAiJHJlZiI6ICJDb2xvckxpc3QiLCAib3B0aW9uYWwiOiB0
cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAi
c3RyaW5nIiwgImVudW0iOiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSwg
Im9wdGlvbmFsIjogdHJ1ZSB9CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsK
KyAgICAgICAgICAgICJuYW1lIjogImV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyIsCisgICAg
ICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVt
bk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9
LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciIH0s
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIi
IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3Qi
IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiB9
LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFi
YXNlSWQiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjog
IkVycm9yIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2NyZWVuQ29sb3IiLCAiJHJl
ZiI6ICJQcmltYXJ5Q29sb3JzIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYWx0ZXJu
YXRlQ29sb3JzIiwgIiRyZWYiOiAiQ29sb3JMaXN0IiB9LAorICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJjeWFuIiwgIm1h
Z2VudGEiLCAieWVsbG93IiwgImJsYWNrIl0gfQorICAgICAgICAgICAgXSwKKyAgICAgICAgICAg
ICJyZXR1cm5zIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAi
dHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIgfSwKKyAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIgfSwKKyAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIgfSwKKyAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiIH0sCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIgfSwK
KyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiIH0s
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVmIjogIlByaW1h
cnlDb2xvcnMiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJhbHRlcm5hdGVDb2xvcnMi
LCAiJHJlZiI6ICJDb2xvckxpc3QiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcmlu
dENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbImN5YW4iLCAibWFnZW50YSIsICJ5
ZWxsb3ciLCAiYmxhY2siXSB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdCit9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5q
c29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45YmU0NmExN2FkMQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCkBAIC0wLDAgKzEsMjgg
QEAKK3sKKyAgICAiZG9tYWluIjogIk5ldHdvcmsiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAg
eworICAgICAgICAgICAgImlkIjogIk5ldHdvcmtFcnJvciIsCisgICAgICAgICAgICAidHlwZSI6
ICJvYmplY3QiLAorICAgICAgICAgICAgImNvbmRpdGlvbiI6ICJQTEFURk9STShNQUMpIiwKKyAg
ICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibWVz
c2FnZSIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBtZXNzYWdlLiIg
fSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvZGUiLCAidHlwZSI6ICJpbnRlZ2VyIiwg
ImRlc2NyaXB0aW9uIjogIkVycm9yIGNvZGUuIiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0K
KyAgICBdLAorICAgICJjb21tYW5kcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUi
OiAibG9hZFJlc291cmNlIiwKKyAgICAgICAgICAgICJjb25kaXRpb24iOiAiUExBVEZPUk0oTUFD
KSIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9hZHMgYSByZXNvdXJjZSBpbiB0aGUg
Y29udGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFnZSB3aXRob3V0IGNyb3NzIG9y
aWdpbiBjaGVja3MuIgorICAgICAgICB9CisgICAgXSwKKyAgICAiZXZlbnRzIjogWworICAgICAg
ICB7CisgICAgICAgICAgICAibmFtZSI6ICJyZXNvdXJjZUxvYWRlZCIsCisgICAgICAgICAgICAi
Y29uZGl0aW9uIjogIlBMQVRGT1JNKE1BQykiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjog
IkEgcmVzb3VyY2Ugd2FzIGxvYWRlZC4iCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZG9tYWluLWRl
YnVnZ2FibGVUeXBlcy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2RvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMC4uMWZlYjBjOWEyN2UKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZG9tYWluLWRlYnVnZ2Fi
bGVUeXBlcy5qc29uCkBAIC0wLDAgKzEsOCBAQAorWworeworICAgICJkb21haW4iOiAiRG9tYWlu
IiwKKyAgICAiZGVidWdnYWJsZVR5cGVzIjogWyJ3ZWItcGFnZSJdLAorICAgICJjb21tYW5kcyI6
IFt7Im5hbWUiOiAiQ29tbWFuZCJ9XSwKKyAgICAiZXZlbnRzIjogW3sibmFtZSI6ICJFdmVudCJ9
XQorfQorXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2RvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlw
ZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2Rv
bWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5mNjJmYjM4YmE3OAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9k
b21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgpAQCAt
MCwwICsxLDggQEAKK1sKK3sKKyAgICAiZG9tYWluIjogIkRvbWFpbiIsCisgICAgImRlYnVnZ2Fi
bGVUeXBlcyI6IFsicGFnZSJdLAorICAgICJjb21tYW5kcyI6IFt7Im5hbWUiOiAiQ29tbWFuZCIs
ICJ0YXJnZXRUeXBlcyI6IFsicGFnZSIsICJ3b3JrZXIiXX1dLAorICAgICJldmVudHMiOiBbeyJu
YW1lIjogIkV2ZW50In1dCit9CitdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZG9tYWluLXRhcmdldFR5cGVzLmpzb24gYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZG9tYWluLXRhcmdldFR5cGVz
Lmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjZhNmU0MGQ2MGFk
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2RvbWFpbi10YXJnZXRUeXBlcy5qc29uCkBAIC0wLDAgKzEsOCBAQAorWworewor
ICAgICJkb21haW4iOiAiRG9tYWluIiwKKyAgICAidGFyZ2V0VHlwZXMiOiBbInBhZ2UiXSwKKyAg
ICAiY29tbWFuZHMiOiBbeyJuYW1lIjogIkNvbW1hbmQiLCAidGFyZ2V0VHlwZXMiOiBbInBhZ2Ui
XX1dLAorICAgICJldmVudHMiOiBbeyJuYW1lIjogIkV2ZW50IiwgInRhcmdldFR5cGVzIjogWyJw
YWdlIl19XQorfQorXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbiBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9kb21haW5zLXdp
dGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAuLjk0YThlY2IxNzZkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNv
bW1hbmQtc2l6ZXMuanNvbgpAQCAtMCwwICsxLDU0IEBACitbCit7CisgICAgImRvbWFpbiI6ICJO
ZXR3b3JrMSIsCisgICAgImNvbW1hbmRzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFt
ZSI6ICJsb2FkUmVzb3VyY2UxIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBh
IHJlc291cmNlIGluIHRoZSBjb250ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGluc3BlY3RlZCBwYWdl
IHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNoZWNrcy4iCisgICAgICAgIH0KKyAgICBdCit9LAorewor
ICAgICJkb21haW4iOiAiTmV0d29yazIiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAg
ICAgICAgICAgImlkIjogIkxvYWRlcklkIiwKKyAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIs
CisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIGxvYWRlciBpZGVudGlmaWVyLiIK
KyAgICAgICAgfQorICAgIF0KK30sCit7CisgICAgImRvbWFpbiI6ICJOZXR3b3JrMyIsCisgICAg
ImNvbW1hbmRzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJsb2FkUmVzb3Vy
Y2UxIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBhIHJlc291cmNlIGluIHRo
ZSBjb250ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGluc3BlY3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mg
b3JpZ2luIGNoZWNrcy4iCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1l
IjogImxvYWRSZXNvdXJjZTIiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEg
cmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ug
d2l0aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAg
ICAgICAgICAgIm5hbWUiOiAibG9hZFJlc291cmNlMyIsCisgICAgICAgICAgICAiZGVzY3JpcHRp
b24iOiAiTG9hZHMgYSByZXNvdXJjZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBp
bnNwZWN0ZWQgcGFnZSB3aXRob3V0IGNyb3NzIG9yaWdpbiBjaGVja3MuIgorICAgICAgICB9LAor
ICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJsb2FkUmVzb3VyY2U0IiwKKyAgICAgICAg
ICAgICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBhIHJlc291cmNlIGluIHRoZSBjb250ZXh0IG9mIGEg
ZnJhbWUgb24gdGhlIGluc3BlY3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNoZWNrcy4i
CisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJj
ZTUiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhl
IGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBv
cmlnaW4gY2hlY2tzLiIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUi
OiAibG9hZFJlc291cmNlNiIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9hZHMgYSBy
ZXNvdXJjZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFnZSB3
aXRob3V0IGNyb3NzIG9yaWdpbiBjaGVja3MuIgorICAgICAgICB9LAorICAgICAgICB7CisgICAg
ICAgICAgICAibmFtZSI6ICJsb2FkUmVzb3VyY2U3IiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlv
biI6ICJMb2FkcyBhIHJlc291cmNlIGluIHRoZSBjb250ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGlu
c3BlY3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNoZWNrcy4iCisgICAgICAgIH0KKyAg
ICBdCit9CitdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZW51bS12YWx1ZXMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9lbnVtLXZhbHVlcy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwLi5jZGFkNjFkZjdjOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9lbnVtLXZhbHVlcy5qc29u
CkBAIC0wLDAgKzEsMzUgQEAKK3siZG9tYWlucyI6WworeworICAgICJkb21haW4iOiAiVHlwZURv
bWFpbiIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiVHlw
ZURvbWFpbkVudW0iLAorICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAg
ICJlbnVtIjogWyJzaGFyZWQiLCAicmVkIiwgImdyZWVuIiwgImJsdWUiXQorICAgICAgICB9Cisg
ICAgXQorfSwKK3sKKyAgICAiZG9tYWluIjogIkNvbW1hbmREb21haW4iLAorICAgICJjb21tYW5k
cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiY29tbWFuZFdpdGhFbnVtUmV0
dXJuVmFsdWUiLAorICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbXSwKKyAgICAgICAgICAgICJy
ZXR1cm5zIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicmV0dXJuVmFsdWUiLCAidHlw
ZSI6ICJzdHJpbmciLCAiZW51bSI6IFsic2hhcmVkIiwgImN5YW4iLCAibWFnZW50YSIsICJ5ZWxs
b3ciXSB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdCit9LAoreworICAgICJkb21h
aW4iOiAiRXZlbnREb21haW4iLAorICAgICJldmVudHMiOiBbCisgICAgICAgIHsKKyAgICAgICAg
ICAgICJuYW1lIjogImV2ZW50V2l0aEVudW1QYXJhbWV0ZXIiLAorICAgICAgICAgICAgInBhcmFt
ZXRlcnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXJhbWV0ZXIiLCAidHlwZSI6
ICJzdHJpbmciLCAiZW51bSI6IFsic2hhcmVkIiwgImJsYWNrIiwgIndoaXRlIl0gfQorICAgICAg
ICAgICAgXQorICAgICAgICB9CisgICAgXQorfQorXX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9ldmVudC10YXJnZXRUeXBlLW1hdGNo
aW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRl
YnVnZ2FibGVUeXBlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu
LjRkZmVkNDFlZDIxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRl
YnVnZ2FibGVUeXBlLmpzb24KQEAgLTAsMCArMSw4IEBACitbCit7CisgICAgImRvbWFpbiI6ICJE
b21haW4iLAorICAgICJkZWJ1Z2dhYmxlVHlwZXMiOiBbInBhZ2UiXSwKKyAgICAiY29tbWFuZHMi
OiBbeyJuYW1lIjogIkNvbW1hbmQifV0sCisgICAgImV2ZW50cyI6IFt7Im5hbWUiOiAiRXZlbnQi
LCAidGFyZ2V0VHlwZXMiOiBbInBhZ2UiLCAid29ya2VyIl19XQorfQorXQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V2ZW50cy13aXRo
LW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9ldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmNhYmJmMTBiODM2Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgpAQCAtMCwwICsxLDU5IEBACit7
CisgICAgImRvbWFpbiI6ICJEYXRhYmFzZSIsCisgICAgInR5cGVzIjogWworICAgICAgICB7Cisg
ICAgICAgICAgICAiaWQiOiAiRGF0YWJhc2VJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJzdHJp
bmciLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBpZGVudGlmaWVyIG9mIERh
dGFiYXNlIG9iamVjdC4iCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6
ICJQcmltYXJ5Q29sb3JzIiwKKyAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAg
ICAgICAidmFsdWVzIjogWyJyZWQiLCAiZ3JlZW4iLCAiYmx1ZSJdCisgICAgICAgIH0sCisgICAg
ICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJDb2xvckxpc3QiLAorICAgICAgICAgICAgInR5cGUi
OiAiYXJyYXkiLAorICAgICAgICAgICAgIml0ZW1zIjogeyAiJHJlZiI6ICJQcmltYXJ5Q29sb3Jz
IiB9CisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJFcnJvciIsCisg
ICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjog
IkRhdGFiYXNlIGVycm9yLiIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKKyAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogIm1lc3NhZ2UiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRp
b24iOiAiRXJyb3IgbWVzc2FnZS4iIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2Rl
IiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBjb2RlLiIgfQorICAg
ICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAiZXZlbnRzIjogWworICAgICAgICB7
CisgICAgICAgICAgICAibmFtZSI6ICJkaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzIiwKKyAg
ICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29s
dW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJvcHRpb25hbCI6IHRydWUsICJpdGVtcyI6IHsg
InR5cGUiOiAic3RyaW5nIiB9IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIs
ICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7
ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6IHRydWUg
fSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIs
ICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxvYWQi
LCAidHlwZSI6ICJhbnkiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVycm9yIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAor
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6ICJQcmltYXJ5
Q29sb3JzIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
YWx0ZXJuYXRlQ29sb3JzIiwgIiRyZWYiOiAiQ29sb3JMaXN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9
LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmlu
ZyIsICJ2YWx1ZXMiOiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSwgIm9w
dGlvbmFsIjogdHJ1ZSB9CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAg
ICAgICAgICAgICJuYW1lIjogImRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyIsCisgICAg
ICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVt
bk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9
LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciIH0s
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIi
IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3Qi
IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiB9
LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic3FsRXJyb3IiLCAiJHJlZiI6ICJFcnJvciIg
fSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNjcmVlbkNvbG9yIiwgIiRyZWYiOiAiUHJp
bWFyeUNvbG9ycyIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImFsdGVybmF0ZUNvbG9y
cyIsICIkcmVmIjogIkNvbG9yTGlzdCIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBy
aW50Q29sb3IiLCAidHlwZSI6ICJzdHJpbmciLCAidmFsdWVzIjogWyJjeWFuIiwgIm1hZ2VudGEi
LCAieWVsbG93IiwgImJsYWNrIl0gfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXQor
fQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V4cGVjdGVkL2NvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJs
ZVR5cGUuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1
Z2dhYmxlVHlwZS5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMC4uOTEzZWM4MTczY2IKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZC10YXJnZXRUeXBlLW1h
dGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJlc3VsdApAQCAtMCwwICsxLDEwMzAg
QEAKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9t
YWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworLy8gRG9tYWluCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJE
b21haW4iLCBbInBhZ2UiLCAid29ya2VyIl0pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNv
bW1hbmQoIkRvbWFpbi5Db21tYW5kIiwgbnVsbCwgW10sIFtdKTsKK0luc3BlY3RvckJhY2tlbmQu
cmVnaXN0ZXJFdmVudCgiRG9tYWluLkV2ZW50IiwgbnVsbCwgW10pOworSW5zcGVjdG9yQmFja2Vu
ZC5yZWdpc3RlckRvbWFpbkRpc3BhdGNoZXIgPSBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRGlz
cGF0Y2hlci5iaW5kKEluc3BlY3RvckJhY2tlbmQsICJEb21haW4iKTsKK0luc3BlY3RvckJhY2tl
bmQuYWN0aXZhdGVEb21haW4oIkRvbWFpbiIsIFsicGFnZSJdKTsKKyMjIyBFbmQgRmlsZTogSW5z
cGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRl
QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBj
b21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisK
KyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworI2luY2x1ZGUg
IlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JG
cm9udGVuZFJvdXRlci5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgQWx0ZXJu
YXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHZvaWQgc2V0QmFja2VuZERpc3Bh
dGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5k
RGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KKyAgICBCYWNrZW5kRGlzcGF0Y2hl
ciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVy
LmdldCgpOyB9Citwcml2YXRlOgorICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNr
ZW5kRGlzcGF0Y2hlcjsKK307CisKKworY2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3Bh
dGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAg
IHZpcnR1YWwgfkFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKCkgeyB9CisgICAgdmly
dHVhbCB2b2lkIENvbW1hbmQobG9uZyBjYWxsSWQpID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCisjIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAor
CisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1k
ZWJ1Z2dhYmxlVHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Igewor
Cit0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQorY2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNo
ZXI7CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisK
K2NsYXNzIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CitwdWJsaWM6CisgICAgdmly
dHVhbCB2b2lkIENvbW1hbmQoRXJyb3JTdHJpbmcmKSA9IDA7Citwcm90ZWN0ZWQ6CisgICAgdmly
dHVhbCB+RG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7Cit9OworCitjbGFzcyBEb21h
aW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlz
cGF0Y2hlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hl
cj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyKik7CisgICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBt
ZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkgZmluYWw7Citwcml2YXRlOgorICAg
IHZvaWQgQ29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJh
bWV0ZXJzKTsKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK3B1
YmxpYzoKKyAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlRG9tYWluQmFj
a2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRj
aGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQorcHJpdmF0ZToKKyAgICBBbHRlcm5hdGVEb21h
aW5CYWNrZW5kRGlzcGF0Y2hlciogbV9hbHRlcm5hdGVEaXNwYXRjaGVyIHsgbnVsbHB0ciB9Owor
I2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorcHJpdmF0
ZToKKyAgICBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYsIERvbWFp
bkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIERvbWFpbkJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlciogbV9hZ2VudCB7IG51bGxwdHIgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxl
VHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCisK
KyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2lu
Y2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNw
YXRjaGVycy5oIgorI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENI
RVJTKQorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworRG9tYWluQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyOjp+RG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9CisKK1JlZjxEb21h
aW5CYWNrZW5kRGlzcGF0Y2hlcj4gRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShCYWNr
ZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlciogYWdlbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRG9tYWluQmFja2Vu
ZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIsIGFnZW50KSk7Cit9CisKK0RvbWFpbkJhY2tl
bmREaXNwYXRjaGVyOjpEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYg
YmFja2VuZERpc3BhdGNoZXIsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQp
CisgICAgOiBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikK
KyAgICAsIG1fYWdlbnQoYWdlbnQpCit7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0
ZXJEaXNwYXRjaGVyRm9yRG9tYWluKCJEb21haW4iX3MsIHRoaXMpOworfQorCit2b2lkIERvbWFp
bkJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5n
JiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKK3sKKyAgICBSZWY8RG9tYWlu
QmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOworCisgICAgUmVmUHRyPEpTT046Ok9i
amVjdD4gcGFyYW1ldGVyczsKKyAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFy
YW1ldGVycyk7CisKKyAgICBpZiAobWV0aG9kID09ICJDb21tYW5kIikgeworICAgICAgICBDb21t
YW5kKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tl
bmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uIiArIG1ldGhvZCArICInIHdh
cyBub3QgZm91bmQiKTsKK30KKwordm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFu
ZChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKK3sKKyNpZiBFTkFCTEUo
SU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyAgICBpZiAobV9hbHRlcm5hdGVEaXNw
YXRjaGVyKSB7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+Q29tbWFuZChyZXF1ZXN0
SWQpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQorCisgICAgRXJyb3JTdHJpbmcgZXJyb3I7CisgICAgUmVm
PEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBtX2Fn
ZW50LT5Db21tYW5kKGVycm9yKTsKKworICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCisgICAgICAg
IG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVz
dWx0KSwgZmFsc2UpOworICAgIGVsc2UKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVw
b3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUo
ZXJyb3IpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTog
VGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVu
ZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5k
LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7
CisKK2NsYXNzIEZyb250ZW5kUm91dGVyOworCitjbGFzcyBEb21haW5Gcm9udGVuZERpc3BhdGNo
ZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIERvbWFpbkZy
b250ZW5kRGlzcGF0Y2hlcihGcm9udGVuZFJvdXRlciYgZnJvbnRlbmRSb3V0ZXIpIDogbV9mcm9u
dGVuZFJvdXRlcihmcm9udGVuZFJvdXRlcikgeyB9CisgICAgdm9pZCBFdmVudCgpOworcHJpdmF0
ZToKKyAgICBGcm9udGVuZFJvdXRlciYgbV9mcm9udGVuZFJvdXRlcjsKK307CisKK30gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5o
CisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9t
YWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RGcm9udGVuZERp
c3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVu
ZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIElu
c3BlY3RvciB7CisKK3ZvaWQgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVyOjpFdmVudCgpCit7Cisg
ICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OworICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJf
cyk7CisKKyAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09O
U3RyaW5nKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxl
OiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbE9iamVjdHMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmQt
dGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KKyNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK25hbWVzcGFj
ZSBQcm90b2NvbCB7CisKKworCisKKworCisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAor
Cit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2Jq
ZWN0cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1k
b21haW4tZGVidWdnYWJsZVR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29s
T2JqZWN0cy5oIgorCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFByb3Rv
Y29sIHsKKworCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4t
ZGVidWdnYWJsZVR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2Vu
ZERpc3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCitAcHJvdG9jb2wg
VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcjsKKworbmFtZXNwYWNlIEluc3BlY3RvciB7
CisKKworY2xhc3MgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDog
cHVibGljIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyIHsKKyAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERp
c3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBt
X2RlbGVnYXRlID0gaGFuZGxlcjsgfQorICAgIHZvaWQgQ29tbWFuZChsb25nIHJlcXVlc3RJZCkg
ZmluYWw7Citwcml2YXRlOgorICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21h
aW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgor
CisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWlu
LWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5k
RGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW5j
bHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW5jbHVkZSA8d3RmL0pTT05W
YWx1ZXMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3ZvaWQgT2JqQ0luc3BlY3RvckRv
bWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElkKQoreworICAgIGlm
ICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihDb21tYW5kV2l0aEVy
cm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6
TWV0aG9kTm90Rm91bmQsICInRG9tYWluLkNvbW1hbmQnIHdhcyBub3QgZm91bmQiX3MpOworICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9y
KSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVx
dWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAg
YmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICB9OworCisgICAg
aWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2Vu
ZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2UpOworICAg
IH07CisKKyAgICBbbV9kZWxlZ2F0ZSBDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxs
YmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKK30KKworCit9IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0
Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRj
aGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+
CisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBU
ZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKK0Bwcm9wZXJ0eSAobm9uYXRvbWlj
LCByZXRhaW4sIHNldHRlcj1zZXREb21haW5IYW5kbGVyOikgaWQ8VGVzdFByb3RvY29sRG9tYWlu
RG9tYWluSGFuZGxlcj4gZG9tYWluSGFuZGxlcjsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFk
b25seSkgVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyICpkb21haW5FdmVu
dERpc3BhdGNoZXI7CitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1
cmF0aW9uLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0K
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5cGUtbWF0
Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5o
IgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2ltcG9ydCAiVGVzdFByb3Rv
Y29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5h
dGVEaXNwYXRjaGFibGVBZ2VudC5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFi
bGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVj
dG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgoreworICAg
IEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7CisgICAgaWQ8VGVz
dFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4gX2RvbWFpbkhhbmRsZXI7CisgICAgVGVzdFBy
b3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyICpfZG9tYWluRXZlbnREaXNwYXRjaGVy
OworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUlu
c3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRd
OworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJv
bGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVybiBzZWxmOwor
fQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbX2RvbWFpbkhhbmRsZXIgcmVsZWFzZV07Cisg
ICAgW19kb21haW5FdmVudERpc3BhdGNoZXIgcmVsZWFzZV07CisgICAgW3N1cGVyIGRlYWxsb2Nd
OworfQorCistICh2b2lkKXNldERvbWFpbkhhbmRsZXI6KGlkPFRlc3RQcm90b2NvbERvbWFpbkRv
bWFpbkhhbmRsZXI+KWhhbmRsZXIKK3sKKyAgICBpZiAoaGFuZGxlciA9PSBfZG9tYWluSGFuZGxl
cikKKyAgICAgICAgcmV0dXJuOworCisgICAgW19kb21haW5IYW5kbGVyIHJlbGVhc2VdOworICAg
IF9kb21haW5IYW5kbGVyID0gW2hhbmRsZXIgcmV0YWluXTsKKworICAgIGF1dG8gYWx0ZXJuYXRl
RGlzcGF0Y2hlciA9IG1ha2VVbmlxdWU8T2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRj
aGVyPihoYW5kbGVyKTsKKyAgICBhdXRvIGFsdGVybmF0ZUFnZW50ID0gbWFrZVVuaXF1ZTxBbHRl
cm5hdGVEaXNwYXRjaGFibGVBZ2VudDxEb21haW5CYWNrZW5kRGlzcGF0Y2hlciwgQWx0ZXJuYXRl
RG9tYWluQmFja2VuZERpc3BhdGNoZXI+PigiRG9tYWluIl9zLCAqX2NvbnRyb2xsZXIsIFdURk1v
dmUoYWx0ZXJuYXRlRGlzcGF0Y2hlcikpOworICAgIF9jb250cm9sbGVyLT5hcHBlbmRFeHRyYUFn
ZW50KFdURk1vdmUoYWx0ZXJuYXRlQWdlbnQpKTsKK30KKworLSAoaWQ8VGVzdFByb3RvY29sRG9t
YWluRG9tYWluSGFuZGxlcj4pZG9tYWluSGFuZGxlcgoreworICAgIHJldHVybiBfZG9tYWluSGFu
ZGxlcjsKK30KKworLSAoVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyICop
ZG9tYWluRXZlbnREaXNwYXRjaGVyCit7CisgICAgaWYgKCFfZG9tYWluRXZlbnREaXNwYXRjaGVy
KQorICAgICAgICBfZG9tYWluRXZlbnREaXNwYXRjaGVyID0gW1tUZXN0UHJvdG9jb2xEb21haW5E
b21haW5FdmVudERpc3BhdGNoZXIgYWxsb2NdIGluaXRXaXRoQ29udHJvbGxlcjpfY29udHJvbGxl
cl07CisgICAgcmV0dXJuIF9kb21haW5FdmVudERpc3BhdGNoZXI7Cit9CisKK0BlbmQKKworCisj
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKworIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2Fi
bGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBu
YW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sRG9tYWlu
RG9tYWluRXZlbnREaXNwYXRjaGVyCit7CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9s
bGVyKiBfY29udHJvbGxlcjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxl
cjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCit7CisgICAgc2Vs
ZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7Cisg
ICAgQVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKKyAg
ICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClFdmVudAoreworICAgIGNvbnN0IEZyb250ZW5k
Um91dGVyJiByb3V0ZXIgPSBfY29udHJvbGxlci0+ZnJvbnRlbmRSb3V0ZXIoKTsKKworICAgIFJl
ZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAg
ICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOwor
ICAgIHJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKK30KKwor
QGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQor
CisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVU
eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lt
cG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9S
V0lQcm90b2NvbEpTT05PYmplY3QuaD4KKworCisKKworCisKKworCitAcHJvdG9jb2wgVGVzdFBy
b3RvY29sRG9tYWluRG9tYWluSGFuZGxlciA8TlNPYmplY3Q+CitAb3B0aW9uYWwKKy0gKHZvaWQp
Q29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JD
YWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikodm9pZCkpc3VjY2Vzc0NhbGxiYWNrOwor
QGVuZAorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZh
Y2UgVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyIDogTlNPYmplY3QKKy0g
KHZvaWQpRXZlbnQ7CitAZW5kCisKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29s
QnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFp
bi1kZWJ1Z2dhYmxlVHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29s
SlNPTk9iamVjdFByaXZhdGUuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxl
SW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKworQGlu
dGVyZmFjZSBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKFByaXZhdGUp
CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihJbnNwZWN0b3I6OkF1Z21lbnRh
YmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcjsKK0BlbmQKKworCisjIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29t
bWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90
b2NvbC5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9u
cy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0Vu
dW1UeXBlPgorT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3Qg
U3RyaW5nJiB2YWx1ZSk7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAi
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5o
IgorI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgorI2ltcG9ydCA8V2ViSW5zcGVj
dG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKwordXNpbmcgbmFtZXNwYWNlIElu
c3BlY3RvcjsKKworCisKKworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1k
b21haW4tZGVidWdnYWJsZVR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0
ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9S
V0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5o
PgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3Rv
cjsKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29t
bWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1hc3lu
Yy1hdHRyaWJ1dGUuanNvbi1yZXN1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAuLjk4ODE3NWNjMDRmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtYXN5bmMt
YXR0cmlidXRlLmpzb24tcmVzdWx0CkBAIC0wLDAgKzEsMTc4MiBAQAorIyMjIEJlZ2luIEZpbGU6
IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcworLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KKy8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworLy8gRGF0YWJhc2UKK0luc3BlY3RvckJhY2tl
bmQucmVnaXN0ZXJEb21haW4oIkRhdGFiYXNlIiwgbnVsbCk7CitJbnNwZWN0b3JCYWNrZW5kLnJl
Z2lzdGVyRW51bSgiRGF0YWJhc2UuUHJpbWFyeUNvbG9ycyIsIHtSZWQ6ICJyZWQiLCBHcmVlbjog
ImdyZWVuIiwgQmx1ZTogImJsdWUifSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFu
ZCgiRGF0YWJhc2UuZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyIsIG51bGwsIFt7
Im5hbWUiOiAiZGF0YWJhc2VJZCIsICJ0eXBlIjogIm51bWJlciJ9LCB7Im5hbWUiOiAicXVlcnki
LCAidHlwZSI6ICJzdHJpbmcifV0sIFsiY29sdW1uTmFtZXMiLCAibm90ZXMiLCAidGltZXN0YW1w
IiwgInZhbHVlcyIsICJwYXlsb2FkIiwgImRhdGFiYXNlSWQiLCAic3FsRXJyb3IiLCAic2NyZWVu
Q29sb3IiLCAiYWx0ZXJuYXRlQ29sb3JzIiwgInByaW50Q29sb3IiXSk7CitJbnNwZWN0b3JCYWNr
ZW5kLnJlZ2lzdGVyQ29tbWFuZCgiRGF0YWJhc2UuZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1
cm5WYWx1ZXMiLCBudWxsLCBbeyJuYW1lIjogImRhdGFiYXNlSWQiLCAidHlwZSI6ICJudW1iZXIi
fSwgeyJuYW1lIjogInF1ZXJ5IiwgInR5cGUiOiAic3RyaW5nIn1dLCBbImNvbHVtbk5hbWVzIiwg
Im5vdGVzIiwgInRpbWVzdGFtcCIsICJ2YWx1ZXMiLCAicGF5bG9hZCIsICJkYXRhYmFzZUlkIiwg
InNxbEVycm9yIiwgInNjcmVlbkNvbG9yIiwgImFsdGVybmF0ZUNvbG9ycyIsICJwcmludENvbG9y
Il0pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIkRhdGFiYXNlLmV4ZWN1dGVT
UUxTeW5jIiwgbnVsbCwgW3sibmFtZSI6ICJkYXRhYmFzZUlkIiwgInR5cGUiOiAibnVtYmVyIn0s
IHsibmFtZSI6ICJxdWVyeSIsICJ0eXBlIjogInN0cmluZyJ9XSwgWyJjb2x1bW5OYW1lcyIsICJu
b3RlcyIsICJ0aW1lc3RhbXAiLCAidmFsdWVzIiwgInBheWxvYWQiLCAiZGF0YWJhc2VJZCIsICJz
cWxFcnJvciIsICJhbHRlcm5hdGVDb2xvcnMiLCAic2NyZWVuQ29sb3IiLCAicHJpbnRDb2xvciJd
KTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJEYXRhYmFzZS5leGVjdXRlU1FM
QXN5bmMiLCBudWxsLCBbeyJuYW1lIjogImRhdGFiYXNlSWQiLCAidHlwZSI6ICJudW1iZXIifSwg
eyJuYW1lIjogInF1ZXJ5IiwgInR5cGUiOiAic3RyaW5nIn1dLCBbImNvbHVtbk5hbWVzIiwgIm5v
dGVzIiwgInRpbWVzdGFtcCIsICJ2YWx1ZXMiLCAicGF5bG9hZCIsICJkYXRhYmFzZUlkIiwgInNx
bEVycm9yIiwgInNjcmVlbkNvbG9yIiwgImFsdGVybmF0ZUNvbG9ycyIsICJwcmludENvbG9yIl0p
OworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRhdGFiYXNlRGlzcGF0Y2hlciA9IEluc3BlY3Rv
ckJhY2tlbmQucmVnaXN0ZXJEaXNwYXRjaGVyLmJpbmQoSW5zcGVjdG9yQmFja2VuZCwgIkRhdGFi
YXNlIik7CitJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJEYXRhYmFzZSIsIG51bGwp
OworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisK
KyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworI2luY2x1ZGUg
IlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JG
cm9udGVuZFJvdXRlci5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgQWx0ZXJu
YXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHZvaWQgc2V0QmFja2VuZERpc3Bh
dGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5k
RGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KKyAgICBCYWNrZW5kRGlzcGF0Y2hl
ciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVy
LmdldCgpOyB9Citwcml2YXRlOgorICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNr
ZW5kRGlzcGF0Y2hlcjsKK307CisKKworY2xhc3MgQWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6Cisg
ICAgdmlydHVhbCB+QWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQorICAg
IHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgY2Fs
bElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIGNh
bGxJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTFN5bmMobG9uZyBjYWxsSWQsIGludCBpbl9kYXRhYmFz
ZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1
dGVTUUxBc3luYyhsb25nIGNhbGxJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYg
aW5fcXVlcnkpID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYg
Ly8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjIyMgRW5kIEZpbGU6
IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVz
dEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
Y29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRlc3RQcm90
b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKKyNpZiBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK2NsYXNzIEFsdGVybmF0ZURhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXI7CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCisKK2NsYXNzIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
IHsKK3B1YmxpYzoKKyAgICAvLyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIgJ3ByaW50Q29sb3InIHdo
aWxlIGdlbmVyYXRpbmcgY29tbWFuZC9ldmVudCBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJu
VmFsdWVzLgorICAgIGVudW0gY2xhc3MgUHJpbnRDb2xvciB7CisgICAgICAgIEN5YW4gPSAzLAor
ICAgICAgICBNYWdlbnRhID0gNCwKKyAgICAgICAgWWVsbG93ID0gNSwKKyAgICAgICAgQmxhY2sg
PSA2LAorICAgIH07IC8vIGVudW0gY2xhc3MgUHJpbnRDb2xvcgorICAgIHZpcnR1YWwgdm9pZCBl
eGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKEVycm9yU3RyaW5nJiwgaW50IGluX2Rh
dGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnksIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0
cmluZz4+JiBvcHRfb3V0X2NvbHVtbk5hbWVzLCBPcHRpb25hbDxTdHJpbmc+JiBvcHRfb3V0X25v
dGVzLCBPcHRpb25hbDxkb3VibGU+JiBvcHRfb3V0X3RpbWVzdGFtcCwgT3B0aW9uYWw8SlNPTjo6
T2JqZWN0PiYgb3B0X291dF92YWx1ZXMsIE9wdGlvbmFsPEpTT046OlZhbHVlPiYgb3B0X291dF9w
YXlsb2FkLCBPcHRpb25hbDxpbnQ+JiBvcHRfb3V0X2RhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiBvcHRfb3V0X3NxbEVycm9yLCBJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyogb3B0X291dF9zY3JlZW5Db2xv
ciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiBvcHRf
b3V0X2FsdGVybmF0ZUNvbG9ycywgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlBy
aW50Q29sb3IqIG9wdF9vdXRfcHJpbnRDb2xvcikgPSAwOworICAgIGNsYXNzIEV4ZWN1dGVTUUxB
c3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2sgOiBwdWJsaWMgQmFja2VuZERpc3BhdGNo
ZXI6OkNhbGxiYWNrQmFzZSB7CisgICAgcHVibGljOgorICAgICAgICBFeGVjdXRlU1FMQXN5bmNP
cHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrKFJlZjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiwgaW50
IGlkKTsKKyAgICAgICAgdm9pZCBzZW5kU3VjY2VzcyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJp
bmc+PiYmIGNvbHVtbk5hbWVzLCBPcHRpb25hbDxTdHJpbmc+JiBub3RlcywgT3B0aW9uYWw8ZG91
YmxlPiYgdGltZXN0YW1wLCBPcHRpb25hbDxKU09OOjpPYmplY3Q+JiB2YWx1ZXMsIE9wdGlvbmFs
PEpTT046OlZhbHVlPiYgcGF5bG9hZCwgT3B0aW9uYWw8aW50PiYgZGF0YWJhc2VJZCwgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mJiBzcWxFcnJvciwgT3B0aW9u
YWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IHNjcmVlbkNv
bG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4mJiBh
bHRlcm5hdGVDb2xvcnMsIE9wdGlvbmFsPERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
OjpQcmludENvbG9yPiBwcmludENvbG9yKTsKKyAgICB9OworICAgIHZpcnR1YWwgdm9pZCBleGVj
dXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3Qg
U3RyaW5nJiBpbl9xdWVyeSwgUmVmPEV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVz
Q2FsbGJhY2s+JiYgY2FsbGJhY2spID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTFN5
bmMoRXJyb3JTdHJpbmcmLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVy
eSwgUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mIG91dF9jb2x1bW5OYW1lcywgU3RyaW5n
KiBvdXRfbm90ZXMsIGRvdWJsZSogb3V0X3RpbWVzdGFtcCwgSlNPTjo6T2JqZWN0KiBvdXRfdmFs
dWVzLCBKU09OOjpWYWx1ZSogb3V0X3BheWxvYWQsIGludCogb3V0X2RhdGFiYXNlSWQsIFJlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiBvdXRfc3FsRXJyb3IsIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYgb3V0X2FsdGVy
bmF0ZUNvbG9ycywgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMq
IG91dF9zY3JlZW5Db2xvciwgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50
Q29sb3IqIG91dF9wcmludENvbG9yKSA9IDA7CisgICAgY2xhc3MgRXhlY3V0ZVNRTEFzeW5jQ2Fs
bGJhY2sgOiBwdWJsaWMgQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZSB7CisgICAgcHVi
bGljOgorICAgICAgICBFeGVjdXRlU1FMQXN5bmNDYWxsYmFjayhSZWY8QmFja2VuZERpc3BhdGNo
ZXI+JiYsIGludCBpZCk7CisgICAgICAgIHZvaWQgc2VuZFN1Y2Nlc3MoUmVmUHRyPEpTT046OkFy
cmF5T2Y8U3RyaW5nPj4mJiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBub3RlcywgZG91Ymxl
IHRpbWVzdGFtcCwgSlNPTjo6T2JqZWN0IHZhbHVlcywgSlNPTjo6VmFsdWUgcGF5bG9hZCwgaW50
IGRhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+
JiYgc3FsRXJyb3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3Jz
IHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9y
TGlzdD4mJiBhbHRlcm5hdGVDb2xvcnMsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
OjpQcmludENvbG9yIHByaW50Q29sb3IpOworICAgIH07CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1
dGVTUUxBc3luYyhpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSwgUmVm
PEV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrPiYmIGNhbGxiYWNrKSA9IDA7Citwcm90ZWN0ZWQ6Cisg
ICAgdmlydHVhbCB+RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKK307CisKK2Ns
YXNzIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFs
QmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8RGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgRGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBj
b25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5hbDsK
K3ByaXZhdGU6CisgICAgdm9pZCBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxv
bmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOworICAgIHZv
aWQgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0SWQsIFJl
ZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisgICAgdm9pZCBleGVjdXRlU1FMU3lu
Yyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyAg
ICB2b2lkIGV4ZWN1dGVTUUxBc3luYyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBwYXJhbWV0ZXJzKTsKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKK3B1YmxpYzoKKyAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRl
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVy
bmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9Citwcml2YXRlOgorICAgIEFs
dGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIqIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciB7
IG51bGxwdHIgfTsKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKK3ByaXZhdGU6CisgICAgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlz
cGF0Y2hlciYsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQgeyBudWxscHRyIH07Cit9OworCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmli
dXRlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKwor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5j
bHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKKyNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXJzLmgiCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlcjo6fkRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9CisKK1JlZjxE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpjcmVh
dGUoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBEYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlciogYWdlbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKK30KKwor
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihCYWNr
ZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIERhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyKiBhZ2VudCkKKyAgICA6IFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJh
Y2tlbmREaXNwYXRjaGVyKQorICAgICwgbV9hZ2VudChhZ2VudCkKK3sKKyAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oIkRhdGFiYXNlIl9zLCB0aGlz
KTsKK30KKwordm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJl
cXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2Fn
ZSkKK3sKKyAgICBSZWY8RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7
CisKKyAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOworICAgIG1lc3NhZ2UtPmdl
dE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsKKworICAgIGlmIChtZXRob2QgPT0gImV4
ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMiKSB7CisgICAgICAgIGV4ZWN1dGVTUUxT
eW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAobWV0aG9kID09ICJleGVjdXRlU1FMQXN5
bmNPcHRpb25hbFJldHVyblZhbHVlcyIpIHsKKyAgICAgICAgZXhlY3V0ZVNRTEFzeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXMocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBpZiAobWV0aG9kID09ICJleGVjdXRlU1FMU3luYyIpIHsKKyAg
ICAgICAgZXhlY3V0ZVNRTFN5bmMocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAobWV0aG9kID09ICJleGVjdXRlU1FMQXN5bmMi
KSB7CisgICAgICAgIGV4ZWN1dGVTUUxBc3luYyhyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVy
cykpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+
cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICIn
RGF0YWJhc2UuIiArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKK30KKwordm9pZCBEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVz
KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpCit7Cisg
ICAgaW50IGluX2RhdGFiYXNlSWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRJbnRlZ2VyKHBh
cmFtZXRlcnMuZ2V0KCksICJkYXRhYmFzZUlkIl9zLCBudWxscHRyKTsKKyAgICBTdHJpbmcgaW5f
cXVlcnkgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwg
InF1ZXJ5Il9zLCBudWxscHRyKTsKKyAgICBpZiAobV9iYWNrZW5kRGlzcGF0Y2hlci0+aGFzUHJv
dG9jb2xFcnJvcnMoKSkgeworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90
b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCAiU29tZSBhcmd1bWVu
dHMgb2YgbWV0aG9kICdEYXRhYmFzZS5leGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVz
JyBjYW4ndCBiZSBwcm9jZXNzZWQiX3MpOworICAgICAgICByZXR1cm47CisgICAgfQorCisjaWYg
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisgICAgaWYgKG1fYWx0ZXJu
YXRlRGlzcGF0Y2hlcikgeworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVT
UUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMocmVxdWVzdElkLCBpbl9kYXRhYmFzZUlkLCBpbl9x
dWVyeSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBS
ZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJl
ZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IG91dF9jb2x1bW5OYW1lczsKKyAgICBPcHRpb25h
bDxTdHJpbmc+IG91dF9ub3RlczsKKyAgICBPcHRpb25hbDxkb3VibGU+IG91dF90aW1lc3RhbXA7
CisgICAgT3B0aW9uYWw8SlNPTjo6T2JqZWN0PiBvdXRfdmFsdWVzOworICAgIE9wdGlvbmFsPEpT
T046OlZhbHVlPiBvdXRfcGF5bG9hZDsKKyAgICBPcHRpb25hbDxpbnQ+IG91dF9kYXRhYmFzZUlk
OworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IG91dF9z
cWxFcnJvcjsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9y
cyBvdXRfc2NyZWVuQ29sb3I7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFi
YXNlOjpDb2xvckxpc3Q+IG91dF9hbHRlcm5hdGVDb2xvcnM7CisgICAgRGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3Igb3V0X3ByaW50Q29sb3I7CisgICAgbV9hZ2Vu
dC0+ZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhlcnJvciwgaW5fZGF0YWJhc2VJ
ZCwgaW5fcXVlcnksIG91dF9jb2x1bW5OYW1lcywgb3V0X25vdGVzLCBvdXRfdGltZXN0YW1wLCBv
dXRfdmFsdWVzLCBvdXRfcGF5bG9hZCwgb3V0X2RhdGFiYXNlSWQsIG91dF9zcWxFcnJvciwgb3V0
X3NjcmVlbkNvbG9yLCBvdXRfYWx0ZXJuYXRlQ29sb3JzLCBvdXRfcHJpbnRDb2xvcik7CisKKyAg
ICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7CisgICAgICAgIGlmIChvdXRfY29sdW1uTmFtZXMpCisg
ICAgICAgICAgICByZXN1bHQtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgb3V0X2NvbHVtbk5h
bWVzKTsKKyAgICAgICAgaWYgKG91dF9ub3Rlcy5oYXNWYWx1ZSgpKQorICAgICAgICAgICAgcmVz
dWx0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCAqb3V0X25vdGVzKTsKKyAgICAgICAgaWYgKG91dF90
aW1lc3RhbXAuaGFzVmFsdWUoKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0RG91YmxlKCJ0aW1l
c3RhbXAiX3MsICpvdXRfdGltZXN0YW1wKTsKKyAgICAgICAgaWYgKG91dF92YWx1ZXMuaGFzVmFs
dWUoKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsICpvdXRfdmFs
dWVzKTsKKyAgICAgICAgaWYgKG91dF9wYXlsb2FkLmhhc1ZhbHVlKCkpCisgICAgICAgICAgICBy
ZXN1bHQtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCAqb3V0X3BheWxvYWQpOworICAgICAgICBpZiAo
b3V0X2RhdGFiYXNlSWQuaGFzVmFsdWUoKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0SW50ZWdl
cigiZGF0YWJhc2VJZCJfcywgKm91dF9kYXRhYmFzZUlkKTsKKyAgICAgICAgaWYgKG91dF9zcWxF
cnJvcikKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgb3V0X3Nx
bEVycm9yKTsKKyAgICAgICAgaWYgKG91dF9zY3JlZW5Db2xvci5oYXNWYWx1ZSgpKQorICAgICAg
ICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCAqb3V0X3NjcmVlbkNvbG9y
KTsKKyAgICAgICAgaWYgKG91dF9hbHRlcm5hdGVDb2xvcnMpCisgICAgICAgICAgICByZXN1bHQt
PnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIG91dF9hbHRlcm5hdGVDb2xvcnMpOworICAg
ICAgICBpZiAob3V0X3ByaW50Q29sb3IuaGFzVmFsdWUoKSkKKyAgICAgICAgICAgIHJlc3VsdC0+
c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCAqb3V0X3ByaW50Q29sb3IpOworICAgIH0KKyAgICBp
ZiAoIWVycm9yLmxlbmd0aCgpKQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVz
cG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKKyAgICBlbHNlCisgICAg
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3Bh
dGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Cit9CisKK0RhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0Nh
bGxiYWNrOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrKFJlZjxC
YWNrZW5kRGlzcGF0Y2hlcj4mJiBiYWNrZW5kRGlzcGF0Y2hlciwgaW50IGlkKSA6IEJhY2tlbmRE
aXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UoV1RGTW92ZShiYWNrZW5kRGlzcGF0Y2hlciksIGlkKSB7
IH0KKwordm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFz
eW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjazo6c2VuZFN1Y2Nlc3MoUmVmUHRyPEpTT046
OkFycmF5T2Y8U3RyaW5nPj4mJiBjb2x1bW5OYW1lcywgT3B0aW9uYWw8U3RyaW5nPiYgbm90ZXMs
IE9wdGlvbmFsPGRvdWJsZT4mIHRpbWVzdGFtcCwgT3B0aW9uYWw8SlNPTjo6T2JqZWN0PiYgdmFs
dWVzLCBPcHRpb25hbDxKU09OOjpWYWx1ZT4mIHBheWxvYWQsIE9wdGlvbmFsPGludD4mIGRhdGFi
YXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiYgc3Fs
RXJyb3IsIE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29s
b3JzPiBzY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpD
b2xvckxpc3Q+JiYgYWx0ZXJuYXRlQ29sb3JzLCBPcHRpb25hbDxEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvcj4gcHJpbnRDb2xvcikKK3sKKyAgICBSZWY8SlNPTjo6
T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgaWYgKGNv
bHVtbk5hbWVzKQorICAgICAgICBqc29uTWVzc2FnZS0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9z
LCBjb2x1bW5OYW1lcyk7CisgICAgaWYgKG5vdGVzLmhhc1ZhbHVlKCkpCisgICAgICAgIGpzb25N
ZXNzYWdlLT5zZXRTdHJpbmcoIm5vdGVzIl9zLCAqbm90ZXMpOworICAgIGlmICh0aW1lc3RhbXAu
aGFzVmFsdWUoKSkKKyAgICAgICAganNvbk1lc3NhZ2UtPnNldERvdWJsZSgidGltZXN0YW1wIl9z
LCAqdGltZXN0YW1wKTsKKyAgICBpZiAodmFsdWVzLmhhc1ZhbHVlKCkpCisgICAgICAgIGpzb25N
ZXNzYWdlLT5zZXRPYmplY3QoInZhbHVlcyJfcywgKnZhbHVlcyk7CisgICAgaWYgKHBheWxvYWQu
aGFzVmFsdWUoKSkKKyAgICAgICAganNvbk1lc3NhZ2UtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCAq
cGF5bG9hZCk7CisgICAgaWYgKGRhdGFiYXNlSWQuaGFzVmFsdWUoKSkKKyAgICAgICAganNvbk1l
c3NhZ2UtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsICpkYXRhYmFzZUlkKTsKKyAgICBpZiAo
c3FsRXJyb3IpCisgICAgICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBz
cWxFcnJvcik7CisgICAgaWYgKHNjcmVlbkNvbG9yLmhhc1ZhbHVlKCkpCisgICAgICAgIGpzb25N
ZXNzYWdlLT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCAqc2NyZWVuQ29sb3IpOworICAgIGlm
IChhbHRlcm5hdGVDb2xvcnMpCisgICAgICAgIGpzb25NZXNzYWdlLT5zZXRBcnJheSgiYWx0ZXJu
YXRlQ29sb3JzIl9zLCBhbHRlcm5hdGVDb2xvcnMpOworICAgIGlmIChwcmludENvbG9yLmhhc1Zh
bHVlKCkpCisgICAgICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsICpw
cmludENvbG9yKTsKKyAgICBDYWxsYmFja0Jhc2U6OnNlbmRTdWNjZXNzKFdURk1vdmUoanNvbk1l
c3NhZ2UpKTsKK30KKwordm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FM
QXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9i
amVjdD4mJiBwYXJhbWV0ZXJzKQoreworICAgIGludCBpbl9kYXRhYmFzZUlkID0gbV9iYWNrZW5k
RGlzcGF0Y2hlci0+Z2V0SW50ZWdlcihwYXJhbWV0ZXJzLmdldCgpLCAiZGF0YWJhc2VJZCJfcywg
bnVsbHB0cik7CisgICAgU3RyaW5nIGluX3F1ZXJ5ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0
U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksICJxdWVyeSJfcywgbnVsbHB0cik7CisgICAgaWYgKG1f
YmFja2VuZERpc3BhdGNoZXItPmhhc1Byb3RvY29sRXJyb3JzKCkpIHsKKyAgICAgICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52
YWxpZFBhcmFtcywgIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnRGF0YWJhc2UuZXhlY3V0ZVNR
TEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMnIGNhbid0IGJlIHByb2Nlc3NlZCJfcyk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKKyAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7CisgICAgICAgIG1fYWx0
ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMocmVx
dWVzdElkLCBpbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyAg
ICBSZWY8RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY09w
dGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2s+IGNhbGxiYWNrID0gYWRvcHRSZWYoKm5ldyBEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1
cm5WYWx1ZXNDYWxsYmFjayhtX2JhY2tlbmREaXNwYXRjaGVyLmNvcHlSZWYoKSwgcmVxdWVzdElk
KSk7CisgICAgbV9hZ2VudC0+ZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMoaW5f
ZGF0YWJhc2VJZCwgaW5fcXVlcnksIGNhbGxiYWNrLmNvcHlSZWYoKSk7CisKK30KKwordm9pZCBE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMU3luYyhsb25nIHJlcXVlc3RJZCwg
UmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKQoreworICAgIGludCBpbl9kYXRhYmFz
ZUlkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0SW50ZWdlcihwYXJhbWV0ZXJzLmdldCgpLCAi
ZGF0YWJhc2VJZCJfcywgbnVsbHB0cik7CisgICAgU3RyaW5nIGluX3F1ZXJ5ID0gbV9iYWNrZW5k
RGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksICJxdWVyeSJfcywgbnVsbHB0
cik7CisgICAgaWYgKG1fYmFja2VuZERpc3BhdGNoZXItPmhhc1Byb3RvY29sRXJyb3JzKCkpIHsK
KyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5k
RGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnRGF0
YWJhc2UuZXhlY3V0ZVNRTFN5bmMnIGNhbid0IGJlIHByb2Nlc3NlZCJfcyk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKKyAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7CisgICAgICAgIG1fYWx0ZXJuYXRl
RGlzcGF0Y2hlci0+ZXhlY3V0ZVNRTFN5bmMocmVxdWVzdElkLCBpbl9kYXRhYmFzZUlkLCBpbl9x
dWVyeSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBS
ZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJl
ZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IG91dF9jb2x1bW5OYW1lczsKKyAgICBTdHJpbmcg
b3V0X25vdGVzOworICAgIGRvdWJsZSBvdXRfdGltZXN0YW1wOworICAgIEpTT046Ok9iamVjdCBv
dXRfdmFsdWVzOworICAgIEpTT046OlZhbHVlIG91dF9wYXlsb2FkOworICAgIGludCBvdXRfZGF0
YWJhc2VJZDsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9y
PiBvdXRfc3FsRXJyb3I7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNl
OjpDb2xvckxpc3Q+IG91dF9hbHRlcm5hdGVDb2xvcnM7CisgICAgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgb3V0X3NjcmVlbkNvbG9yOworICAgIERhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yIG91dF9wcmludENvbG9yOworICAg
IG1fYWdlbnQtPmV4ZWN1dGVTUUxTeW5jKGVycm9yLCBpbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSwg
b3V0X2NvbHVtbk5hbWVzLCAmb3V0X25vdGVzLCAmb3V0X3RpbWVzdGFtcCwgb3V0X3ZhbHVlcywg
Jm91dF9wYXlsb2FkLCAmb3V0X2RhdGFiYXNlSWQsIG91dF9zcWxFcnJvciwgb3V0X2FsdGVybmF0
ZUNvbG9ycywgJm91dF9zY3JlZW5Db2xvciwgJm91dF9wcmludENvbG9yKTsKKworICAgIGlmICgh
ZXJyb3IubGVuZ3RoKCkpIHsKKyAgICAgICAgcmVzdWx0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMi
X3MsIG91dF9jb2x1bW5OYW1lcyk7CisgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJub3RlcyJf
cywgb3V0X25vdGVzKTsKKyAgICAgICAgcmVzdWx0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywg
b3V0X3RpbWVzdGFtcCk7CisgICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIG91
dF92YWx1ZXMpOworICAgICAgICByZXN1bHQtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBvdXRfcGF5
bG9hZCk7CisgICAgICAgIHJlc3VsdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgb3V0X2Rh
dGFiYXNlSWQpOworICAgICAgICByZXN1bHQtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIG91dF9z
cWxFcnJvcik7CisgICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywg
b3V0X2FsdGVybmF0ZUNvbG9ycyk7CisgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJzY3JlZW5D
b2xvciJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFu
dFZhbHVlKG91dF9zY3JlZW5Db2xvcikpOworICAgICAgICByZXN1bHQtPnNldFN0cmluZygicHJp
bnRDb2xvciJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25z
dGFudFZhbHVlKG91dF9wcmludENvbG9yKSk7CisgICAgfQorICAgIGlmICghZXJyb3IubGVuZ3Ro
KCkpCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQs
IFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOworICAgIGVsc2UKKyAgICAgICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJy
b3IsIFdURk1vdmUoZXJyb3IpKTsKK30KKworRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXI6OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrOjpFeGVjdXRlU1FMQXN5bmNDYWxsYmFjayhSZWY8
QmFja2VuZERpc3BhdGNoZXI+JiYgYmFja2VuZERpc3BhdGNoZXIsIGludCBpZCkgOiBCYWNrZW5k
RGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlKFdURk1vdmUoYmFja2VuZERpc3BhdGNoZXIpLCBpZCkg
eyB9CisKK3ZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxB
c3luY0NhbGxiYWNrOjpzZW5kU3VjY2VzcyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYm
IGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBKU09O
OjpPYmplY3QgdmFsdWVzLCBKU09OOjpWYWx1ZSBwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mJiBzcWxFcnJvciwgSW5z
cGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYmIGFsdGVybmF0
ZUNvbG9ycywgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3IgcHJp
bnRDb2xvcikKK3sKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9i
amVjdDo6Y3JlYXRlKCk7CisgICAganNvbk1lc3NhZ2UtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJf
cywgY29sdW1uTmFtZXMpOworICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBu
b3Rlcyk7CisgICAganNvbk1lc3NhZ2UtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCB0aW1lc3Rh
bXApOworICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoInZhbHVlcyJfcywgdmFsdWVzKTsKKyAg
ICBqc29uTWVzc2FnZS0+c2V0VmFsdWUoInBheWxvYWQiX3MsIHBheWxvYWQpOworICAgIGpzb25N
ZXNzYWdlLT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCBkYXRhYmFzZUlkKTsKKyAgICBqc29u
TWVzc2FnZS0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgc3FsRXJyb3IpOworICAgIGpzb25NZXNz
YWdlLT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0
SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoc2NyZWVuQ29sb3IpKTsKKyAgICBqc29uTWVz
c2FnZS0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgYWx0ZXJuYXRlQ29sb3JzKTsKKyAg
ICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUocHJpbnRDb2xvcikpOworICAg
IENhbGxiYWNrQmFzZTo6c2VuZFN1Y2Nlc3MoV1RGTW92ZShqc29uTWVzc2FnZSkpOworfQorCit2
b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxBc3luYyhsb25nIHJlcXVl
c3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKQoreworICAgIGludCBpbl9k
YXRhYmFzZUlkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0SW50ZWdlcihwYXJhbWV0ZXJzLmdl
dCgpLCAiZGF0YWJhc2VJZCJfcywgbnVsbHB0cik7CisgICAgU3RyaW5nIGluX3F1ZXJ5ID0gbV9i
YWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksICJxdWVyeSJfcywg
bnVsbHB0cik7CisgICAgaWYgKG1fYmFja2VuZERpc3BhdGNoZXItPmhhc1Byb3RvY29sRXJyb3Jz
KCkpIHsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihC
YWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhv
ZCAnRGF0YWJhc2UuZXhlY3V0ZVNRTEFzeW5jJyBjYW4ndCBiZSBwcm9jZXNzZWQiX3MpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCisgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeworICAgICAgICBtX2Fs
dGVybmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVTUUxBc3luYyhyZXF1ZXN0SWQsIGluX2RhdGFiYXNl
SWQsIGluX3F1ZXJ5KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUo
SU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworICAgIFJlZjxEYXRhYmFzZUJhY2tl
bmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2s+IGNhbGxiYWNrID0g
YWRvcHRSZWYoKm5ldyBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNR
TEFzeW5jQ2FsbGJhY2sobV9iYWNrZW5kRGlzcGF0Y2hlci5jb3B5UmVmKCksIHJlcXVlc3RJZCkp
OworICAgIG1fYWdlbnQtPmV4ZWN1dGVTUUxBc3luYyhpbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSwg
Y2FsbGJhY2suY29weVJlZigpKTsKKworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKwor
IyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmls
ZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KKy8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2Ns
YXNzIEZyb250ZW5kUm91dGVyOworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQg
RmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZy
b250ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
Y29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVz
dEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCitu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBF
bmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xPYmplY3RzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBj
b21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25z
Lmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFByb3RvY29sIHsK
KworCisKKy8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgorbmFtZXNwYWNlIERhdGFiYXNlIHsKK2Ns
YXNzIEVycm9yOworZW51bSBjbGFzcyBQcmltYXJ5Q29sb3JzOworfSAvLyBEYXRhYmFzZQorLy8g
RW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgorCisKKy8vIFR5cGVkZWZzLgorbmFtZXNwYWNl
IERhdGFiYXNlIHsKKy8qIFVuaXF1ZSBpZGVudGlmaWVyIG9mIERhdGFiYXNlIG9iamVjdC4gKi8K
K3R5cGVkZWYgaW50IERhdGFiYXNlSWQ7Cit0eXBlZGVmIEpTT046OkFycmF5T2Y8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IENvbG9yTGlzdDsKK30gLy8gRGF0
YWJhc2UKKy8vIEVuZCBvZiB0eXBlZGVmcy4KKworbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKKwor
U3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKTsKKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4gU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKFQgZW51bVZhbHVlKQoreworICAgIHJl
dHVybiBnZXRFbnVtQ29uc3RhbnRWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KGVudW1WYWx1ZSkpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycworCituYW1lc3BhY2UgRGF0YWJhc2Ugewor
LyogICovCitlbnVtIGNsYXNzIFByaW1hcnlDb2xvcnMgeworICAgIFJlZCA9IDAsCisgICAgR3Jl
ZW4gPSAxLAorICAgIEJsdWUgPSAyLAorfTsgLy8gZW51bSBjbGFzcyBQcmltYXJ5Q29sb3JzCisv
KiBEYXRhYmFzZSBlcnJvci4gKi8KK2NsYXNzIEVycm9yIDogcHVibGljIEpTT046Ok9iamVjdEJh
c2UgeworcHVibGljOgorICAgIGVudW0geworICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCisgICAg
ICAgIE1lc3NhZ2VTZXQgPSAxIDw8IDAsCisgICAgICAgIENvZGVTZXQgPSAxIDw8IDEsCisgICAg
ICAgIEFsbEZpZWxkc1NldCA9IChNZXNzYWdlU2V0IHwgQ29kZVNldCkKKyAgICB9OworCisgICAg
dGVtcGxhdGU8aW50IFNUQVRFPgorICAgIGNsYXNzIEJ1aWxkZXIgeworICAgIHByaXZhdGU6Cisg
ICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVzdWx0OworCisgICAgICAgIHRlbXBsYXRl
PGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RF
UD4qPih0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXIoUmVmPC8qRXJyb3IqL0pT
T046Ok9iamVjdD4mJiBvYmplY3QpCisgICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2Jq
ZWN0KSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9G
aWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CisgICAgICAgIH0K
KyAgICAgICAgZnJpZW5kIGNsYXNzIEVycm9yOworICAgIHB1YmxpYzoKKworICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgTWVzc2FnZVNldD4mIHNldE1lc3NhZ2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkK
KyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE1lc3NhZ2VT
ZXQpLCBwcm9wZXJ0eV9tZXNzYWdlX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXRTdHJpbmcoIm1lc3NhZ2UiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0
U3RhdGU8TWVzc2FnZVNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBDb2RlU2V0PiYgc2V0Q29kZShpbnQgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2RlU2V0KSwgcHJvcGVydHlfY29kZV9hbHJlYWR5X3Nl
dCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcigiY29kZSJfcywgdmFsdWUpOwor
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb2RlU2V0PigpOworICAgICAgICB9CisKKyAg
ICAgICAgUmVmPEVycm9yPiByZWxlYXNlKCkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihFcnJvcikgPT0gc2l6ZW9mKEpTT046Ok9i
amVjdCksIGNhbm5vdF9jYXN0KTsKKworICAgICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4ganNv
blJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgICAgICBhdXRvIHJl
c3VsdCA9IFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPEVycm9yPio+KCZqc29uUmVzdWx0
KSk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgfTsKKworICAg
IC8qCisgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgorICAgICAqIFJlZjxFcnJvcj4gcmVz
dWx0ID0gRXJyb3I6OmNyZWF0ZSgpCisgICAgICogICAgIC5zZXRNZXNzYWdlKC4uLikKKyAgICAg
KiAgICAgLnNldENvZGUoLi4uKQorICAgICAqICAgICAucmVsZWFzZSgpOworICAgICAqLworICAg
IHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOworICAgIH0K
K307CisKK30gLy8gRGF0YWJhc2UKKworCisKK25hbWVzcGFjZSBUZXN0SGVscGVycyB7CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFByb3RvY29sRW51bVR5cGU+CitPcHRpb25hbDxQcm90b2NvbEVudW1U
eXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJik7CisKKy8vIEVudW1z
IGluIHRoZSAnRGF0YWJhc2UnIERvbWFpbgordGVtcGxhdGU8PgorT3B0aW9uYWw8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IHBhcnNlRW51bVZhbHVlRnJvbVN0
cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4oY29uc3Qg
U3RyaW5nJik7CisKK30gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCisKK30gLy8gbmFtZXNwYWNl
IFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCituYW1lc3BhY2UgV1RGIHsK
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOworCisvLyBIYXNoIGRl
Y2xhcmF0aW9ucyBpbiB0aGUgJ0RhdGFiYXNlJyBEb21haW4KK3RlbXBsYXRlPD4KK3N0cnVjdCBE
ZWZhdWx0SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4g
eworICAgIHR5cGVkZWYgSW50SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJp
bWFyeUNvbG9ycz4gSGFzaDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9i
amVjdHMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0
aC1hc3luYy1hdHRyaWJ1dGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2Jq
ZWN0cy5oIgorCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFByb3RvY29s
IHsKKworbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKKworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0
IGVudW1fY29uc3RhbnRfdmFsdWVzW10gPSB7CisgICAgInJlZCIsCisgICAgImdyZWVuIiwKKyAg
ICAiYmx1ZSIsCisgICAgImN5YW4iLAorICAgICJtYWdlbnRhIiwKKyAgICAieWVsbG93IiwKKyAg
ICAiYmxhY2siLAorfTsKKworU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7
CisgICAgcmV0dXJuIGVudW1fY29uc3RhbnRfdmFsdWVzW2NvZGVdOworfQorCisvLyBFbnVtcyBp
biB0aGUgJ0RhdGFiYXNlJyBEb21haW4KK3RlbXBsYXRlPD4KK09wdGlvbmFsPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJp
bmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+KGNvbnN0IFN0
cmluZyYgcHJvdG9jb2xTdHJpbmcpCit7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFu
dFZhbHVlc1tdID0geworICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFi
YXNlOjpQcmltYXJ5Q29sb3JzOjpSZWQsCisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90
b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM6OkdyZWVuLAorICAgICAgICAoc2l6ZV90KUlu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzOjpCbHVlLAorICAgIH07
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAzOyArK2kpCisgICAgICAgIGlmIChwcm90b2Nv
bFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCisgICAg
ICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29s
b3JzKWNvbnN0YW50VmFsdWVzW2ldOworCisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKwor
Cit9IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycworCisKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9j
b2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sT2JqZWN0cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNw
YXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0
aC1hc3luYy1hdHRyaWJ1dGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCitAcHJvdG9j
b2wgVGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyOworCituYW1lc3BhY2UgSW5zcGVj
dG9yIHsKKworCitjbGFzcyBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciBm
aW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyIHsKKyAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBPYmpDSW5zcGVjdG9yRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+
IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KKyAgICB2b2lkIGV4ZWN1dGVTUUxT
eW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0SWQsIGludCBpbl9kYXRhYmFzZUlk
LCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KSBmaW5hbDsKKyAgICB2b2lkIGV4ZWN1dGVTUUxBc3lu
Y09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVzdElkLCBpbnQgaW5fZGF0YWJhc2VJZCwg
Y29uc3QgU3RyaW5nJiBpbl9xdWVyeSkgZmluYWw7CisgICAgdm9pZCBleGVjdXRlU1FMU3luYyhs
b25nIHJlcXVlc3RJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkp
IGZpbmFsOworICAgIHZvaWQgZXhlY3V0ZVNRTEFzeW5jKGxvbmcgcmVxdWVzdElkLCBpbnQgaW5f
ZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkgZmluYWw7Citwcml2YXRlOgorICAg
IFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+PiBtX2RlbGVn
YXRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJU
ZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bEludGVybmFsLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisj
aW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3Zv
aWQgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5j
T3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0SWQsIGludCBpbl9kYXRhYmFzZUlkLCBj
b25zdCBTdHJpbmcmIGluX3F1ZXJ5KQoreworICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNU
b1NlbGVjdG9yOkBzZWxlY3RvcihleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzV2l0
aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOmRhdGFiYXNlSWQ6cXVlcnk6KV0pIHsKKyAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQs
IEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS5leGVjdXRlU1FM
U3luY09wdGlvbmFsUmV0dXJuVmFsdWVzJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgeworICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwg
QmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgfTsKKworICAgIGlkIHN1Y2Nl
c3NDYWxsYmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiovICoqY29sdW1uTmFtZXMsIE5TU3Ry
aW5nICoqbm90ZXMsIGRvdWJsZSAqdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKip2
YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnBheWxvYWQsIGludCAqZGF0YWJhc2VJZCwg
VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFz
ZVByaW1hcnlDb2xvcnMgKnNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiphbHRl
cm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJl
dHVyblZhbHVlc1ByaW50Q29sb3IgKnByaW50Q29sb3IpIHsKKyAgICAgICAgUmVmPEpTT046Ok9i
amVjdD4gcmVzdWx0T2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKGNvbHVtbk5hbWVzLCBAImNv
bHVtbk5hbWVzIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BB
UkFNRVRFUihub3RlcywgQCJub3RlcyIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JB
RF9PUFRJT05BTF9QQVJBTUVURVIodmFsdWVzLCBAInZhbHVlcyIpOworICAgICAgICBUSFJPV19F
WENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIocGF5bG9hZCwgQCJwYXlsb2FkIik7
CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihzcWxF
cnJvciwgQCJzcWxFcnJvciIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJ
T05BTF9QQVJBTUVURVIoYWx0ZXJuYXRlQ29sb3JzLCBAImFsdGVybmF0ZUNvbG9ycyIpOworICAg
ICAgICBpZiAoY29sdW1uTmFtZXMpCisgICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5
KCJjb2x1bW5OYW1lcyJfcywgdG9KU09OU3RyaW5nQXJyYXkoKmNvbHVtbk5hbWVzKSk7CisgICAg
ICAgIGlmIChub3RlcykKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJub3Rl
cyJfcywgKm5vdGVzKTsKKyAgICAgICAgaWYgKHRpbWVzdGFtcCkKKyAgICAgICAgICAgIHJlc3Vs
dE9iamVjdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICp0aW1lc3RhbXApOworICAgICAgICBp
ZiAodmFsdWVzKQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInZhbHVlcyJf
cywgWyp2YWx1ZXMgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIGlmIChwYXlsb2FkKQorICAgICAg
ICAgICAgcmVzdWx0T2JqZWN0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgWypwYXlsb2FkIHRvSlNP
Tk9iamVjdF0pOworICAgICAgICBpZiAoZGF0YWJhc2VJZCkKKyAgICAgICAgICAgIHJlc3VsdE9i
amVjdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgKmRhdGFiYXNlSWQpOworICAgICAgICBp
ZiAoc3FsRXJyb3IpCisgICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdCgic3FsRXJy
b3IiX3MsIFsqc3FsRXJyb3IgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIGlmIChzY3JlZW5Db2xv
cikKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywg
dG9Qcm90b2NvbFN0cmluZygqc2NyZWVuQ29sb3IpKTsKKyAgICAgICAgaWYgKGFsdGVybmF0ZUNv
bG9ycykKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9y
cyJfcywgdG9KU09OU3RyaW5nQXJyYXkoKmFsdGVybmF0ZUNvbG9ycykpOworICAgICAgICBpZiAo
cHJpbnRDb2xvcikKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJwcmludENv
bG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKCpwcmludENvbG9yKSk7CisgICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0T2JqZWN0
KSwgZmFsc2UpOworICAgIH07CisKKyAgICBpbnQgb19pbl9kYXRhYmFzZUlkID0gaW5fZGF0YWJh
c2VJZDsKKyAgICBOU1N0cmluZyAqb19pbl9xdWVyeSA9IGluX3F1ZXJ5OworCisgICAgW21fZGVs
ZWdhdGUgZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1dpdGhFcnJvckNhbGxiYWNr
OmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjayBkYXRhYmFzZUlk
Om9faW5fZGF0YWJhc2VJZCBxdWVyeTpvX2luX3F1ZXJ5XTsKK30KKwordm9pZCBPYmpDSW5zcGVj
dG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1
cm5WYWx1ZXMobG9uZyByZXF1ZXN0SWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcm
IGluX3F1ZXJ5KQoreworICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBz
ZWxlY3RvcihleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1dpdGhFcnJvckNhbGxi
YWNrOnN1Y2Nlc3NDYWxsYmFjazpkYXRhYmFzZUlkOnF1ZXJ5OildKSB7CisgICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlz
cGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRGF0YWJhc2UuZXhlY3V0ZVNRTEFzeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXMnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7CisgICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlz
cGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICB9OworCisgICAgaWQgc3VjY2Vzc0NhbGxiYWNr
ID0gXihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKipjb2x1bW5OYW1lcywgTlNTdHJpbmcgKipub3Rl
cywgZG91YmxlICp0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnZhbHVlcywgUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICoqcGF5bG9hZCwgaW50ICpkYXRhYmFzZUlkLCBUZXN0UHJvdG9j
b2xEYXRhYmFzZUVycm9yICoqc3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNv
bG9ycyAqc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmFsdGVybmF0ZUNvbG9y
cywgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVl
c1ByaW50Q29sb3IgKnByaW50Q29sb3IpIHsKKyAgICAgICAgUmVmPEpTT046Ok9iamVjdD4gcmVz
dWx0T2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVz
Iik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihu
b3RlcywgQCJub3RlcyIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05B
TF9QQVJBTUVURVIodmFsdWVzLCBAInZhbHVlcyIpOworICAgICAgICBUSFJPV19FWENFUFRJT05f
Rk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIocGF5bG9hZCwgQCJwYXlsb2FkIik7CisgICAgICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihzcWxFcnJvciwgQCJz
cWxFcnJvciIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJB
TUVURVIoYWx0ZXJuYXRlQ29sb3JzLCBAImFsdGVybmF0ZUNvbG9ycyIpOworICAgICAgICBpZiAo
Y29sdW1uTmFtZXMpCisgICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJjb2x1bW5O
YW1lcyJfcywgdG9KU09OU3RyaW5nQXJyYXkoKmNvbHVtbk5hbWVzKSk7CisgICAgICAgIGlmIChu
b3RlcykKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJub3RlcyJfcywgKm5v
dGVzKTsKKyAgICAgICAgaWYgKHRpbWVzdGFtcCkKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+
c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICp0aW1lc3RhbXApOworICAgICAgICBpZiAodmFsdWVz
KQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgWyp2YWx1
ZXMgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIGlmIChwYXlsb2FkKQorICAgICAgICAgICAgcmVz
dWx0T2JqZWN0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgWypwYXlsb2FkIHRvSlNPTk9iamVjdF0p
OworICAgICAgICBpZiAoZGF0YWJhc2VJZCkKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0
SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgKmRhdGFiYXNlSWQpOworICAgICAgICBpZiAoc3FsRXJy
b3IpCisgICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIFsq
c3FsRXJyb3IgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIGlmIChzY3JlZW5Db2xvcikKKyAgICAg
ICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgdG9Qcm90b2Nv
bFN0cmluZygqc2NyZWVuQ29sb3IpKTsKKyAgICAgICAgaWYgKGFsdGVybmF0ZUNvbG9ycykKKyAg
ICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgdG9K
U09OU3RyaW5nQXJyYXkoKmFsdGVybmF0ZUNvbG9ycykpOworICAgICAgICBpZiAocHJpbnRDb2xv
cikKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCB0
b1Byb3RvY29sU3RyaW5nKCpwcmludENvbG9yKSk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVy
KCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0T2JqZWN0KSwgZmFsc2Up
OworICAgIH07CisKKyAgICBpbnQgb19pbl9kYXRhYmFzZUlkID0gaW5fZGF0YWJhc2VJZDsKKyAg
ICBOU1N0cmluZyAqb19pbl9xdWVyeSA9IGluX3F1ZXJ5OworCisgICAgW21fZGVsZWdhdGUgZXhl
Y3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNXaXRoRXJyb3JDYWxsYmFjazplcnJvckNh
bGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDpvX2luX2Rh
dGFiYXNlSWQgcXVlcnk6b19pbl9xdWVyeV07Cit9CisKK3ZvaWQgT2JqQ0luc3BlY3RvckRhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5jKGxvbmcgcmVxdWVzdElkLCBpbnQg
aW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkKK3sKKyAgICBpZiAoIVttX2Rl
bGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoZXhlY3V0ZVNRTFN5bmNXaXRoRXJy
b3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6ZGF0YWJhc2VJZDpxdWVyeTopXSkgeworICAgICAg
ICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFj
a2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RhdGFiYXNlLmV4ZWN1dGVTUUxTeW5j
JyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBl
bmRpbmdFcnJvcnMoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlkIGVycm9yQ2Fs
bGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigp
LT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZl
ckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5n
RXJyb3JzKCk7CisgICAgfTsKKworICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oTlNBcnJheS8q
PE5TU3RyaW5nPiovICpjb2x1bW5OYW1lcywgTlNTdHJpbmcgKm5vdGVzLCBkb3VibGUgdGltZXN0
YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0
ICpwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqc3Fs
RXJyb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9j
b2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIFRlc3RQcm90b2NvbERhdGFiYXNl
RXhlY3V0ZVNRTFN5bmNQcmludENvbG9yIHByaW50Q29sb3IpIHsKKyAgICAgICAgUmVmPEpTT046
Ok9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoY29sdW1uTmFtZXMsIEAiY29s
dW1uTmFtZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVU
RVIobm90ZXMsIEAibm90ZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJF
RF9QQVJBTUVURVIodmFsdWVzLCBAInZhbHVlcyIpOworICAgICAgICBUSFJPV19FWENFUFRJT05f
Rk9SX1JFUVVJUkVEX1BBUkFNRVRFUihwYXlsb2FkLCBAInBheWxvYWQiKTsKKyAgICAgICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoc3FsRXJyb3IsIEAic3FsRXJyb3Ii
KTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoYWx0ZXJu
YXRlQ29sb3JzLCBAImFsdGVybmF0ZUNvbG9ycyIpOworICAgICAgICByZXN1bHRPYmplY3QtPnNl
dEFycmF5KCJjb2x1bW5OYW1lcyJfcywgdG9KU09OU3RyaW5nQXJyYXkoY29sdW1uTmFtZXMpKTsK
KyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBub3Rlcyk7CisgICAg
ICAgIHJlc3VsdE9iamVjdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIHRpbWVzdGFtcCk7Cisg
ICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFt2YWx1ZXMgdG9KU09O
T2JqZWN0XSk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFtw
YXlsb2FkIHRvSlNPTk9iamVjdF0pOworICAgICAgICByZXN1bHRPYmplY3QtPnNldEludGVnZXIo
ImRhdGFiYXNlSWQiX3MsIGRhdGFiYXNlSWQpOworICAgICAgICByZXN1bHRPYmplY3QtPnNldE9i
amVjdCgic3FsRXJyb3IiX3MsIFtzcWxFcnJvciB0b0pTT05PYmplY3RdKTsKKyAgICAgICAgcmVz
dWx0T2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCB0b0pTT05TdHJpbmdBcnJh
eShhbHRlcm5hdGVDb2xvcnMpKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInNj
cmVlbkNvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKHNjcmVlbkNvbG9yKSk7CisgICAgICAgIHJl
c3VsdE9iamVjdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKHBy
aW50Q29sb3IpKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJl
cXVlc3RJZCwgV1RGTW92ZShyZXN1bHRPYmplY3QpLCBmYWxzZSk7CisgICAgfTsKKworICAgIGlu
dCBvX2luX2RhdGFiYXNlSWQgPSBpbl9kYXRhYmFzZUlkOworICAgIE5TU3RyaW5nICpvX2luX3F1
ZXJ5ID0gaW5fcXVlcnk7CisKKyAgICBbbV9kZWxlZ2F0ZSBleGVjdXRlU1FMU3luY1dpdGhFcnJv
ckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjayBk
YXRhYmFzZUlkOm9faW5fZGF0YWJhc2VJZCBxdWVyeTpvX2luX3F1ZXJ5XTsKK30KKwordm9pZCBP
YmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTEFzeW5jKGxv
bmcgcmVxdWVzdElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkK
K3sKKyAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoZXhl
Y3V0ZVNRTEFzeW5jV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOmRhdGFiYXNlSWQ6
cXVlcnk6KV0pIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xF
cnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEYXRh
YmFzZS5leGVjdXRlU1FMQXN5bmMnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5k
RGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7CisgICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNr
ZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERpc3Bh
dGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICB9OworCisgICAgaWQgc3VjY2Vzc0Nh
bGxiYWNrID0gXihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAq
bm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqdmFsdWVzLCBS
V0lQcm90b2NvbEpTT05PYmplY3QgKnBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBUZXN0UHJvdG9j
b2xEYXRhYmFzZUVycm9yICpzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29s
b3JzIHNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmFsdGVybmF0ZUNvbG9ycywg
VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yIHByaW50Q29sb3Ip
IHsKKyAgICAgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVU
RVIoY29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIobm90ZXMsIEAibm90ZXMiKTsKKyAgICAgICAgVEhST1df
RVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIodmFsdWVzLCBAInZhbHVlcyIpOworICAg
ICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihwYXlsb2FkLCBAInBh
eWxvYWQiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIo
c3FsRXJyb3IsIEAic3FsRXJyb3IiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFV
SVJFRF9QQVJBTUVURVIoYWx0ZXJuYXRlQ29sb3JzLCBAImFsdGVybmF0ZUNvbG9ycyIpOworICAg
ICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgdG9KU09OU3RyaW5n
QXJyYXkoY29sdW1uTmFtZXMpKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoIm5v
dGVzIl9zLCBub3Rlcyk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0RG91YmxlKCJ0aW1lc3Rh
bXAiX3MsIHRpbWVzdGFtcCk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KCJ2YWx1
ZXMiX3MsIFt2YWx1ZXMgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0
VmFsdWUoInBheWxvYWQiX3MsIFtwYXlsb2FkIHRvSlNPTk9iamVjdF0pOworICAgICAgICByZXN1
bHRPYmplY3QtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsIGRhdGFiYXNlSWQpOworICAgICAg
ICByZXN1bHRPYmplY3QtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIFtzcWxFcnJvciB0b0pTT05P
YmplY3RdKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9z
LCB0b1Byb3RvY29sU3RyaW5nKHNjcmVlbkNvbG9yKSk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+
c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5nQXJyYXkoYWx0ZXJuYXRl
Q29sb3JzKSk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9z
LCB0b1Byb3RvY29sU3RyaW5nKHByaW50Q29sb3IpKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHRPYmplY3QpLCBmYWxz
ZSk7CisgICAgfTsKKworICAgIGludCBvX2luX2RhdGFiYXNlSWQgPSBpbl9kYXRhYmFzZUlkOwor
ICAgIE5TU3RyaW5nICpvX2luX3F1ZXJ5ID0gaW5fcXVlcnk7CisKKyAgICBbbV9kZWxlZ2F0ZSBl
eGVjdXRlU1FMQXN5bmNXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxs
YmFjazpzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDpvX2luX2RhdGFiYXNlSWQgcXVlcnk6b19p
bl9xdWVyeV07Cit9CisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJv
dG9jb2wuaD4KKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50
ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAorQHByb3BlcnR5IChu
b25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNldERhdGFiYXNlSGFuZGxlcjopIGlkPFRlc3RQcm90
b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4gZGF0YWJhc2VIYW5kbGVyOworQGVuZAorCisKKyMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgorLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25m
aWd1cmF0aW9uLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW1wb3J0
ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRD
b3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+CisKK3VzaW5nIG5hbWVz
cGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0
aW9uCit7CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsK
KyAgICBpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+IF9kYXRhYmFzZUhhbmRs
ZXI7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxl
SW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5p
dF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIEFTU0VSVChjb250
cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAgcmV0dXJuIHNlbGY7
Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIFtfZGF0YWJhc2VIYW5kbGVyIHJlbGVhc2Vd
OworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAodm9pZClzZXREYXRhYmFzZUhhbmRsZXI6
KGlkPFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4paGFuZGxlcgoreworICAgIGlm
IChoYW5kbGVyID09IF9kYXRhYmFzZUhhbmRsZXIpCisgICAgICAgIHJldHVybjsKKworICAgIFtf
ZGF0YWJhc2VIYW5kbGVyIHJlbGVhc2VdOworICAgIF9kYXRhYmFzZUhhbmRsZXIgPSBbaGFuZGxl
ciByZXRhaW5dOworCisgICAgYXV0byBhbHRlcm5hdGVEaXNwYXRjaGVyID0gbWFrZVVuaXF1ZTxP
YmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7CisgICAgYXV0
byBhbHRlcm5hdGVBZ2VudCA9IG1ha2VVbmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciwgQWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlcj4+KCJEYXRhYmFzZSJfcywgKl9jb250cm9sbGVyLCBXVEZNb3ZlKGFsdGVybmF0ZURpc3Bh
dGNoZXIpKTsKKyAgICBfY29udHJvbGxlci0+YXBwZW5kRXh0cmFBZ2VudChXVEZNb3ZlKGFsdGVy
bmF0ZUFnZW50KSk7Cit9CisKKy0gKGlkPFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxl
cj4pZGF0YWJhc2VIYW5kbGVyCit7CisgICAgcmV0dXJuIF9kYXRhYmFzZUhhbmRsZXI7Cit9CisK
K0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKwor
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5q
c29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5oIgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNl
IEluc3BlY3RvcjsKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hl
cnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxGb3VuZGF0
aW9uL0ZvdW5kYXRpb24uaD4KKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNP
Tk9iamVjdC5oPgorCisKK0BjbGFzcyBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yOworCisKK3R5
cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9y
cykgeworICAgIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc1JlZCwKKyAgICBUZXN0
UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNHcmVlbiwKKyAgICBUZXN0UHJvdG9jb2xEYXRh
YmFzZVByaW1hcnlDb2xvcnNCbHVlLAorfTsKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwg
VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJp
bnRDb2xvcikgeworICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25h
bFJldHVyblZhbHVlc1ByaW50Q29sb3JDeWFuLAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhl
Y3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JNYWdlbnRhLAorICAgIFRl
c3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50
Q29sb3JZZWxsb3csCisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlv
bmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvckJsYWNrLAorfTsKKwordHlwZWRlZiBOU19FTlVNKE5T
SW50ZWdlciwgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVy
blZhbHVlc1ByaW50Q29sb3IpIHsKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxB
c3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvckN5YW4sCisgICAgVGVzdFByb3RvY29s
RGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JNYWdl
bnRhLAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1
cm5WYWx1ZXNQcmludENvbG9yWWVsbG93LAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0
ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yQmxhY2ssCit9OworCit0eXBl
ZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5j
UHJpbnRDb2xvcikgeworICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmlu
dENvbG9yQ3lhbiwKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRD
b2xvck1hZ2VudGEsCisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50
Q29sb3JZZWxsb3csCisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50
Q29sb3JCbGFjaywKK307CisKK3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2Nv
bERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvcikgeworICAgIFRlc3RQcm90b2NvbERh
dGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvckN5YW4sCisgICAgVGVzdFByb3RvY29sRGF0
YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yTWFnZW50YSwKKyAgICBUZXN0UHJvdG9jb2xE
YXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JZZWxsb3csCisgICAgVGVzdFByb3RvY29s
RGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yQmxhY2ssCit9OworCisKK19fYXR0cmli
dXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xE
YXRhYmFzZUVycm9yIDogUldJUHJvdG9jb2xKU09OT2JqZWN0CistIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKKy0g
KGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmpl
Y3QgKilqc29uT2JqZWN0OworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTWVzc2FnZTooTlNTdHJp
bmcgKiltZXNzYWdlIGNvZGU6KGludCljb2RlOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChu
b25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICptZXNzYWdlOworLyogcmVxdWlyZWQgKi8gQHByb3Bl
cnR5IChub25hdG9taWMsIGFzc2lnbikgaW50IGNvZGU7CitAZW5kCisKK0Bwcm90b2NvbCBUZXN0
UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXIgPE5TT2JqZWN0PgorQG9wdGlvbmFsCistICh2
b2lkKWV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNXaXRoRXJyb3JDYWxsYmFjazoo
dm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2
b2lkKF4pKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqKm5v
dGVzLCBkb3VibGUgKnRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqdmFsdWVzLCBS
V0lQcm90b2NvbEpTT05PYmplY3QgKipwYXlsb2FkLCBpbnQgKmRhdGFiYXNlSWQsIFRlc3RQcm90
b2NvbERhdGFiYXNlRXJyb3IgKipzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5
Q29sb3JzICpzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICoqYWx0ZXJuYXRlQ29s
b3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1
ZXNQcmludENvbG9yICpwcmludENvbG9yKSlzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDooaW50
KWRhdGFiYXNlSWQgcXVlcnk6KE5TU3RyaW5nICopcXVlcnk7CistICh2b2lkKWV4ZWN1dGVTUUxB
c3luY09wdGlvbmFsUmV0dXJuVmFsdWVzV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJp
bmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKShOU0FycmF5
Lyo8TlNTdHJpbmc+Ki8gKipjb2x1bW5OYW1lcywgTlNTdHJpbmcgKipub3RlcywgZG91YmxlICp0
aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnZhbHVlcywgUldJUHJvdG9jb2xKU09O
T2JqZWN0ICoqcGF5bG9hZCwgaW50ICpkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVy
cm9yICoqc3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqc2NyZWVu
Q29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3Rv
Y29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3Ig
KnByaW50Q29sb3IpKXN1Y2Nlc3NDYWxsYmFjayBkYXRhYmFzZUlkOihpbnQpZGF0YWJhc2VJZCBx
dWVyeTooTlNTdHJpbmcgKilxdWVyeTsKKy0gKHZvaWQpZXhlY3V0ZVNRTFN5bmNXaXRoRXJyb3JD
YWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0Nh
bGxiYWNrOih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqY29sdW1uTmFtZXMsIE5TU3Ry
aW5nICpub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICp2YWx1
ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQsIFRlc3RQ
cm90b2NvbERhdGFiYXNlRXJyb3IgKnNxbEVycm9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmFs
dGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzIHNjcmVlbkNv
bG9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvciBwcmludENv
bG9yKSlzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDooaW50KWRhdGFiYXNlSWQgcXVlcnk6KE5T
U3RyaW5nICopcXVlcnk7CistICh2b2lkKWV4ZWN1dGVTUUxBc3luY1dpdGhFcnJvckNhbGxiYWNr
Oih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6
KHZvaWQoXikoTlNBcnJheS8qPE5TU3RyaW5nPiovICpjb2x1bW5OYW1lcywgTlNTdHJpbmcgKm5v
dGVzLCBkb3VibGUgdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnZhbHVlcywgUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgVGVzdFByb3RvY29s
RGF0YWJhc2VFcnJvciAqc3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9y
cyBzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICphbHRlcm5hdGVDb2xvcnMsIFRl
c3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvciBwcmludENvbG9yKSlz
dWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDooaW50KWRhdGFiYXNlSWQgcXVlcnk6KE5TU3RyaW5n
ICopcXVlcnk7CitAZW5kCisKKworCisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2Nv
bEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4KKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2wuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAi
VGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5o
IgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVy
Lmg+CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCisKKworCisjIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbEludGVybmFsLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMt
d2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgPFdlYkluc3Bl
Y3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KK09wdGlvbmFsPE9iakNFbnVt
VHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOworCisKK2lubGlu
ZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xv
cnMgdmFsdWUpCit7CisgICAgc3dpdGNoKHZhbHVlKSB7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xE
YXRhYmFzZVByaW1hcnlDb2xvcnNSZWQ6CisgICAgICAgIHJldHVybiAicmVkIl9zOworICAgIGNh
c2UgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzR3JlZW46CisgICAgICAgIHJldHVy
biAiZ3JlZW4iX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNC
bHVlOgorICAgICAgICByZXR1cm4gImJsdWUiX3M7CisgICAgfQorfQorCit0ZW1wbGF0ZTw+Citp
bmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzPiBmcm9tUHJv
dG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gInJl
ZCIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNSZWQ7
CisgICAgaWYgKHZhbHVlID09ICJncmVlbiIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xE
YXRhYmFzZVByaW1hcnlDb2xvcnNHcmVlbjsKKyAgICBpZiAodmFsdWUgPT0gImJsdWUiKQorICAg
ICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzQmx1ZTsKKyAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworfQorCitpbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmco
VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJp
bnRDb2xvciB2YWx1ZSkKK3sKKyAgICBzd2l0Y2godmFsdWUpIHsKKyAgICBjYXNlIFRlc3RQcm90
b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JD
eWFuOgorICAgICAgICByZXR1cm4gImN5YW4iX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRh
YmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yTWFnZW50YToK
KyAgICAgICAgcmV0dXJuICJtYWdlbnRhIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJh
c2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvclllbGxvdzoKKyAg
ICAgICAgcmV0dXJuICJ5ZWxsb3ciX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yQmxhY2s6CisgICAgICAg
IHJldHVybiAiYmxhY2siX3M7CisgICAgfQorfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgT3B0aW9u
YWw8VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVz
UHJpbnRDb2xvcj4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7Cisg
ICAgaWYgKHZhbHVlID09ICJjeWFuIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFi
YXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JDeWFuOworICAg
IGlmICh2YWx1ZSA9PSAibWFnZW50YSIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRh
YmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yTWFnZW50YTsK
KyAgICBpZiAodmFsdWUgPT0gInllbGxvdyIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xE
YXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yWWVsbG93
OworICAgIGlmICh2YWx1ZSA9PSAiYmxhY2siKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29s
RGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvckJsYWNr
OworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK2lubGluZSBTdHJpbmcgdG9Qcm90b2Nv
bFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJu
VmFsdWVzUHJpbnRDb2xvciB2YWx1ZSkKK3sKKyAgICBzd2l0Y2godmFsdWUpIHsKKyAgICBjYXNl
IFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQ
cmludENvbG9yQ3lhbjoKKyAgICAgICAgcmV0dXJuICJjeWFuIl9zOworICAgIGNhc2UgVGVzdFBy
b3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29s
b3JNYWdlbnRhOgorICAgICAgICByZXR1cm4gIm1hZ2VudGEiX3M7CisgICAgY2FzZSBUZXN0UHJv
dG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xv
clllbGxvdzoKKyAgICAgICAgcmV0dXJuICJ5ZWxsb3ciX3M7CisgICAgY2FzZSBUZXN0UHJvdG9j
b2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvckJs
YWNrOgorICAgICAgICByZXR1cm4gImJsYWNrIl9zOworICAgIH0KK30KKwordGVtcGxhdGU8Pgor
aW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXNQcmludENvbG9yPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5n
JiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gImN5YW4iKQorICAgICAgICByZXR1cm4gVGVz
dFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50
Q29sb3JDeWFuOworICAgIGlmICh2YWx1ZSA9PSAibWFnZW50YSIpCisgICAgICAgIHJldHVybiBU
ZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJp
bnRDb2xvck1hZ2VudGE7CisgICAgaWYgKHZhbHVlID09ICJ5ZWxsb3ciKQorICAgICAgICByZXR1
cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVl
c1ByaW50Q29sb3JZZWxsb3c7CisgICAgaWYgKHZhbHVlID09ICJibGFjayIpCisgICAgICAgIHJl
dHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFs
dWVzUHJpbnRDb2xvckJsYWNrOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK2lubGlu
ZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxT
eW5jUHJpbnRDb2xvciB2YWx1ZSkKK3sKKyAgICBzd2l0Y2godmFsdWUpIHsKKyAgICBjYXNlIFRl
c3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yQ3lhbjoKKyAgICAgICAg
cmV0dXJuICJjeWFuIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FM
U3luY1ByaW50Q29sb3JNYWdlbnRhOgorICAgICAgICByZXR1cm4gIm1hZ2VudGEiX3M7CisgICAg
Y2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvclllbGxvdzoK
KyAgICAgICAgcmV0dXJuICJ5ZWxsb3ciX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFz
ZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvckJsYWNrOgorICAgICAgICByZXR1cm4gImJsYWNrIl9z
OworICAgIH0KK30KKwordGVtcGxhdGU8PgoraW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbERh
dGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gImN5YW4iKQorICAgICAgICByZXR1
cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3JDeWFuOworICAg
IGlmICh2YWx1ZSA9PSAibWFnZW50YSIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRh
YmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvck1hZ2VudGE7CisgICAgaWYgKHZhbHVlID09ICJ5
ZWxsb3ciKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3lu
Y1ByaW50Q29sb3JZZWxsb3c7CisgICAgaWYgKHZhbHVlID09ICJibGFjayIpCisgICAgICAgIHJl
dHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvckJsYWNrOwor
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK2lubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0
cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3IgdmFsdWUp
Cit7CisgICAgc3dpdGNoKHZhbHVlKSB7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JDeWFuOgorICAgICAgICByZXR1cm4gImN5YW4iX3M7Cisg
ICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JNYWdl
bnRhOgorICAgICAgICByZXR1cm4gIm1hZ2VudGEiX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xE
YXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JZZWxsb3c6CisgICAgICAgIHJldHVybiAi
eWVsbG93Il9zOworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQ
cmludENvbG9yQmxhY2s6CisgICAgICAgIHJldHVybiAiYmxhY2siX3M7CisgICAgfQorfQorCit0
ZW1wbGF0ZTw+CitpbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FM
QXN5bmNQcmludENvbG9yPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkK
K3sKKyAgICBpZiAodmFsdWUgPT0gImN5YW4iKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29s
RGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yQ3lhbjsKKyAgICBpZiAodmFsdWUgPT0g
Im1hZ2VudGEiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FM
QXN5bmNQcmludENvbG9yTWFnZW50YTsKKyAgICBpZiAodmFsdWUgPT0gInllbGxvdyIpCisgICAg
ICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JZ
ZWxsb3c7CisgICAgaWYgKHZhbHVlID09ICJibGFjayIpCisgICAgICAgIHJldHVybiBUZXN0UHJv
dG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JCbGFjazsKKyAgICByZXR1cm4g
V1RGOjpudWxsb3B0OworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgorLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJv
dG9jb2xUeXBlUGFyc2VyLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09O
T2JqZWN0UHJpdmF0ZS5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW50ZXJm
YWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoRGF0YWJhc2VEb21haW4pCisKKysgKHZv
aWQpX3BhcnNlRGF0YWJhc2VJZDooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlk
KXBheWxvYWQ7CisrICh2b2lkKV9wYXJzZVByaW1hcnlDb2xvcnM6KE5TTnVtYmVyICoqKW91dFZh
bHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworKyAodm9pZClfcGFyc2VDb2xvckxpc3Q6KE5T
QXJyYXkvKjxOU1N0cmluZz4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsK
KysgKHZvaWQpX3BhcnNlRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKiopb3V0VmFs
dWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoRGF0YWJhc2VEb21haW4pCisKKysgKHZvaWQpX3Bh
cnNlRGF0YWJhc2VJZDooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxv
YWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU051bWJl
ciBjbGFzc10pOworICAgICpvdXRWYWx1ZSA9IChOU051bWJlciAqKXBheWxvYWQ7Cit9CisKKysg
KHZvaWQpX3BhcnNlUHJpbWFyeUNvbG9yczooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxv
YWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxv
YWQsIFtOU1N0cmluZyBjbGFzc10pOworICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNl
UHJpbWFyeUNvbG9ycz4gcmVzdWx0ID0gSW5zcGVjdG9yOjpmcm9tUHJvdG9jb2xTdHJpbmc8VGVz
dFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzPihwYXlsb2FkKTsKKyAgICBUSFJPV19FWENF
UFRJT05fRk9SX0JBRF9FTlVNX1ZBTFVFKHJlc3VsdCwgQCJQcmltYXJ5Q29sb3JzIik7CisgICAg
Km91dFZhbHVlID0gQChyZXN1bHQudmFsdWUoKSk7Cit9CisKKysgKHZvaWQpX3BhcnNlQ29sb3JM
aXN0OihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBh
eWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0Fy
cmF5Lyo8TlNTdHJpbmc+Ki8gY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSAoTlNBcnJheS8qPE5T
U3RyaW5nPiovICopcGF5bG9hZDsKK30KKworKyAodm9pZClfcGFyc2VFcnJvcjooVGVzdFByb3Rv
Y29sRGF0YWJhc2VFcnJvciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAorewor
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBj
bGFzc10pOworICAgICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBhbGxv
Y10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbFR5cGVzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFu
ZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1w
b3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rv
ci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisjaW1wb3J0IDx3dGYvQXNzZXJ0aW9u
cy5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3Bl
Y3RvcjsKKworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcgorCist
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0
cmluZyAqLCBpZD4gKilwYXlsb2FkCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkp
CisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVE
X1BST1BFUlRZKHBheWxvYWRbQCJtZXNzYWdlIl0sIEAibWVzc2FnZSIpOworICAgIHNlbGYubWVz
c2FnZSA9IHBheWxvYWRbQCJtZXNzYWdlIl07CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JF
UVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJjb2RlIl0sIEAiY29kZSIpOworICAgIHNlbGYuY29k
ZSA9IFtwYXlsb2FkW0AiY29kZSJdIGludGVnZXJWYWx1ZV07CisKKyAgICByZXR1cm4gc2VsZjsK
K30KKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpT
T05PYmplY3QgKilvYmplY3QKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoSlNP
Tk9iamVjdDpbb2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0KCldKSkKKyAgICAgICAgcmV0dXJuIG5p
bDsKKworICAgIHJldHVybiBzZWxmOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhNZXNz
YWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZTooaW50KWNvZGUKK3sKKyAgICBpZiAoIShzZWxm
ID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkobWVzc2FnZSwgQCJtZXNzYWdlIik7CisKKyAgICBz
ZWxmLm1lc3NhZ2UgPSBtZXNzYWdlOworICAgIHNlbGYuY29kZSA9IGNvZGU7CisKKyAgICByZXR1
cm4gc2VsZjsKK30KKworLSAodm9pZClzZXRNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UKK3sK
KyAgICBbc3VwZXIgc2V0U3RyaW5nOm1lc3NhZ2UgZm9yS2V5OkAibWVzc2FnZSJdOworfQorCist
IChOU1N0cmluZyAqKW1lc3NhZ2UKK3sKKyAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpA
Im1lc3NhZ2UiXTsKK30KKworLSAodm9pZClzZXRDb2RlOihpbnQpY29kZQoreworICAgIFtzdXBl
ciBzZXRJbnRlZ2VyOmNvZGUgZm9yS2V5OkAiY29kZSJdOworfQorCistIChpbnQpY29kZQorewor
ICAgIHJldHVybiBbc3VwZXIgaW50ZWdlckZvcktleTpAImNvZGUiXTsKK30KKworQGVuZAorCisK
KyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13
aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMt
d2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xMzFlZjdmZGVmMwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbi1y
ZXN1bHQKQEAgLTAsMCArMSwxNjQzIEBACisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2Vu
ZENvbW1hbmRzLmpzCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMt
d2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworLy8gRGF0YWJhc2UKK0luc3BlY3RvckJhY2tl
bmQucmVnaXN0ZXJEb21haW4oIkRhdGFiYXNlIiwgbnVsbCk7CitJbnNwZWN0b3JCYWNrZW5kLnJl
Z2lzdGVyRW51bSgiRGF0YWJhc2UuUHJpbWFyeUNvbG9ycyIsIHtSZWQ6ICJyZWQiLCBHcmVlbjog
ImdyZWVuIiwgQmx1ZTogImJsdWUifSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFu
ZCgiRGF0YWJhc2UuZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyIsIG51bGwsIFt7Im5hbWUi
OiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0cnVlfSwgeyJu
YW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZX0sIHsibmFt
ZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiLCAib3B0aW9uYWwiOiB0cnVlfSwgeyJu
YW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRydWV9LCB7Im5h
bWUiOiAicGF5bG9hZCIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRydWV9LCB7Im5h
bWUiOiAiZGF0YWJhc2VJZCIsICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6IHRydWV9LCB7
Im5hbWUiOiAic3FsRXJyb3IiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0cnVlfSwg
eyJuYW1lIjogInNjcmVlbkNvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1
ZX0sIHsibmFtZSI6ICJhbHRlcm5hdGVDb2xvcnMiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9u
YWwiOiB0cnVlfSwgeyJuYW1lIjogInByaW50Q29sb3IiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0
aW9uYWwiOiB0cnVlfV0sIFsiY29sdW1uTmFtZXMiLCAibm90ZXMiLCAidGltZXN0YW1wIiwgInZh
bHVlcyIsICJwYXlsb2FkIiwgImRhdGFiYXNlSWQiLCAic3FsRXJyb3IiLCAic2NyZWVuQ29sb3Ii
LCAiYWx0ZXJuYXRlQ29sb3JzIiwgInByaW50Q29sb3IiXSk7CitJbnNwZWN0b3JCYWNrZW5kLnJl
Z2lzdGVyQ29tbWFuZCgiRGF0YWJhc2UuZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIiwgbnVs
bCwgW3sibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogIm9iamVjdCJ9LCB7Im5hbWUiOiAi
bm90ZXMiLCAidHlwZSI6ICJzdHJpbmcifSwgeyJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjog
Im51bWJlciJ9LCB7Im5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0In0sIHsibmFtZSI6
ICJwYXlsb2FkIiwgInR5cGUiOiAib2JqZWN0In0sIHsibmFtZSI6ICJkYXRhYmFzZUlkIiwgInR5
cGUiOiAibnVtYmVyIn0sIHsibmFtZSI6ICJzcWxFcnJvciIsICJ0eXBlIjogIm9iamVjdCJ9LCB7
Im5hbWUiOiAic2NyZWVuQ29sb3IiLCAidHlwZSI6ICJzdHJpbmcifSwgeyJuYW1lIjogImFsdGVy
bmF0ZUNvbG9ycyIsICJ0eXBlIjogIm9iamVjdCJ9LCB7Im5hbWUiOiAicHJpbnRDb2xvciIsICJ0
eXBlIjogInN0cmluZyJ9XSwgWyJjb2x1bW5OYW1lcyIsICJub3RlcyIsICJ0aW1lc3RhbXAiLCAi
dmFsdWVzIiwgInBheWxvYWQiLCAiZGF0YWJhc2VJZCIsICJzcWxFcnJvciIsICJzY3JlZW5Db2xv
ciIsICJhbHRlcm5hdGVDb2xvcnMiLCAicHJpbnRDb2xvciJdKTsKK0luc3BlY3RvckJhY2tlbmQu
YWN0aXZhdGVEb21haW4oIkRhdGFiYXNlIiwgbnVsbCk7CisjIyMgRW5kIEZpbGU6IEluc3BlY3Rv
ckJhY2tlbmRDb21tYW5kcy5qcworCisjIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tl
bmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFu
ZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworI2luY2x1ZGUgIlRlc3RQcm90
b2NvbFR5cGVzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJv
dXRlci5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgQWx0ZXJuYXRlQmFja2Vu
ZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVm
UHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hl
ciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KKyAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2Vu
ZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9
Citwcml2YXRlOgorICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0
Y2hlcjsKK307CisKKworY2xhc3MgQWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciA6
IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdmlydHVh
bCB+QWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQorICAgIHZpcnR1YWwg
dm9pZCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgY2FsbElkLCBjb25zdCBKU09O
OjpBcnJheSogaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyogaW5fbm90ZXMsIGNvbnN0IGRv
dWJsZSogaW5fdGltZXN0YW1wLCBjb25zdCBKU09OOjpPYmplY3QqIGluX3ZhbHVlcywgY29uc3Qg
SlNPTjo6VmFsdWUqIGluX3BheWxvYWQsIGNvbnN0IGludCogaW5fZGF0YWJhc2VJZCwgY29uc3Qg
SlNPTjo6T2JqZWN0KiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nKiBpbl9zY3JlZW5Db2xvciwg
Y29uc3QgSlNPTjo6QXJyYXkqIGluX2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nKiBpbl9w
cmludENvbG9yKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1l
dGVycyhsb25nIGNhbGxJZCwgY29uc3QgSlNPTjo6QXJyYXkmIGluX2NvbHVtbk5hbWVzLCBjb25z
dCBTdHJpbmcmIGluX25vdGVzLCBkb3VibGUgaW5fdGltZXN0YW1wLCBjb25zdCBKU09OOjpPYmpl
Y3QmIGluX3ZhbHVlcywgSlNPTjo6VmFsdWUgaW5fcGF5bG9hZCwgaW50IGluX2RhdGFiYXNlSWQs
IGNvbnN0IEpTT046Ok9iamVjdCYgaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgaW5fc2NyZWVu
Q29sb3IsIGNvbnN0IEpTT046OkFycmF5JiBpbl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmlu
ZyYgaW5fcHJpbnRDb2xvcikgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisK
KyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyMjIyBF
bmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcg
RXJyb3JTdHJpbmc7CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKK2NsYXNzIEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI7CisjZW5kaWYgLy8g
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKK2NsYXNzIERhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKK3B1YmxpYzoKKyAgICAvLyBOYW1lZCBhZnRlciBw
YXJhbWV0ZXIgJ3ByaW50Q29sb3InIHdoaWxlIGdlbmVyYXRpbmcgY29tbWFuZC9ldmVudCBleGVj
dXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzLgorICAgIGVudW0gY2xhc3MgUHJpbnRDb2xvciB7Cisg
ICAgICAgIEN5YW4gPSAzLAorICAgICAgICBNYWdlbnRhID0gNCwKKyAgICAgICAgWWVsbG93ID0g
NSwKKyAgICAgICAgQmxhY2sgPSA2LAorICAgIH07IC8vIGVudW0gY2xhc3MgUHJpbnRDb2xvcgor
ICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKEVycm9yU3RyaW5n
JiwgY29uc3QgSlNPTjo6QXJyYXkqIG9wdF9pbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nKiBv
cHRfaW5fbm90ZXMsIGNvbnN0IGRvdWJsZSogb3B0X2luX3RpbWVzdGFtcCwgY29uc3QgSlNPTjo6
T2JqZWN0KiBvcHRfaW5fdmFsdWVzLCBjb25zdCBKU09OOjpWYWx1ZSogb3B0X2luX3BheWxvYWQs
IGNvbnN0IGludCogb3B0X2luX2RhdGFiYXNlSWQsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0X2lu
X3NxbEVycm9yLCBjb25zdCBTdHJpbmcqIG9wdF9pbl9zY3JlZW5Db2xvciwgY29uc3QgSlNPTjo6
QXJyYXkqIG9wdF9pbl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyogb3B0X2luX3ByaW50
Q29sb3IsIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiBvcHRfb3V0X2NvbHVtbk5hbWVz
LCBPcHRpb25hbDxTdHJpbmc+JiBvcHRfb3V0X25vdGVzLCBPcHRpb25hbDxkb3VibGU+JiBvcHRf
b3V0X3RpbWVzdGFtcCwgT3B0aW9uYWw8SlNPTjo6T2JqZWN0PiYgb3B0X291dF92YWx1ZXMsIE9w
dGlvbmFsPEpTT046OlZhbHVlPiYgb3B0X291dF9wYXlsb2FkLCBPcHRpb25hbDxpbnQ+JiBvcHRf
b3V0X2RhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJy
b3I+JiBvcHRfb3V0X3NxbEVycm9yLCBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJp
bWFyeUNvbG9ycyogb3B0X291dF9zY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiBvcHRfb3V0X2FsdGVybmF0ZUNvbG9ycywgRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3IqIG9wdF9vdXRfcHJpbnRDb2xv
cikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMoRXJy
b3JTdHJpbmcmLCBjb25zdCBKU09OOjpBcnJheSYgaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmlu
ZyYgaW5fbm90ZXMsIGRvdWJsZSBpbl90aW1lc3RhbXAsIGNvbnN0IEpTT046Ok9iamVjdCYgaW5f
dmFsdWVzLCBKU09OOjpWYWx1ZSBpbl9wYXlsb2FkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3Qg
SlNPTjo6T2JqZWN0JiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nJiBpbl9zY3JlZW5Db2xvciwg
Y29uc3QgSlNPTjo6QXJyYXkmIGluX2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBpbl9w
cmludENvbG9yLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYgb3V0X2NvbHVtbk5hbWVz
LCBTdHJpbmcqIG91dF9ub3RlcywgZG91YmxlKiBvdXRfdGltZXN0YW1wLCBKU09OOjpPYmplY3Qq
IG91dF92YWx1ZXMsIEpTT046OlZhbHVlKiBvdXRfcGF5bG9hZCwgaW50KiBvdXRfZGF0YWJhc2VJ
ZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mIG91dF9zcWxF
cnJvciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMqIG91dF9z
Y3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxp
c3Q+JiBvdXRfYWx0ZXJuYXRlQ29sb3JzLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxl
cjo6UHJpbnRDb2xvciogb3V0X3ByaW50Q29sb3IpID0gMDsKK3Byb3RlY3RlZDoKKyAgICB2aXJ0
dWFsIH5EYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOworfTsKKworY2xhc3MgRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5k
RGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVySGFuZGxlciopOworICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0
cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOworcHJpdmF0
ZToKKyAgICB2b2lkIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQs
IFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisgICAgdm9pZCBleGVjdXRlTm9P
cHRpb25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYg
cGFyYW1ldGVycyk7CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
CitwdWJsaWM6CisgICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZURhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVE
aXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQorcHJpdmF0ZToKKyAgICBBbHRlcm5h
dGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKiBtX2FsdGVybmF0ZURpc3BhdGNoZXIgeyBudWxs
cHRyIH07CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
Citwcml2YXRlOgorICAgIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNo
ZXImLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIERhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50IHsgbnVsbHB0ciB9OworfTsKKworfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMu
aAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0
dXJuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0
ZXIuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRl
c3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK0RhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyOjp+RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7
IH0KKworUmVmPERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+IERhdGFiYXNlQmFja2VuZERpc3Bh
dGNoZXI6OmNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIERhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKK3sKKyAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2Vu
dCkpOworfQorCitEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQorICAgIDogU3VwcGxlbWVudGFsQmFja2VuZERp
c3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCisgICAgLCBtX2FnZW50KGFnZW50KQoreworICAg
IG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbigiRGF0YWJh
c2UiX3MsIHRoaXMpOworfQorCit2b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmRpc3Bh
dGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVj
dD4mJiBtZXNzYWdlKQoreworICAgIFJlZjxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBwcm90
ZWN0KCp0aGlzKTsKKworICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7CisgICAg
bWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRlcnMpOworCisgICAgaWYgKG1l
dGhvZCA9PSAiZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyIpIHsKKyAgICAgICAgZXhlY3V0
ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChtZXRob2QgPT0gImV4ZWN1dGVOb09wdGlv
bmFsUGFyYW1ldGVycyIpIHsKKyAgICAgICAgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKHJl
cXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNw
YXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS4iICsgbWV0aG9kICsgIicgd2FzIG5v
dCBmb3VuZCIpOworfQorCit2b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVB
bGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+
JiYgcGFyYW1ldGVycykKK3sKKyAgICBib29sIG9wdF9pbl9jb2x1bW5OYW1lc192YWx1ZUZvdW5k
ID0gZmFsc2U7CisgICAgUmVmUHRyPEpTT046OkFycmF5PiBvcHRfaW5fY29sdW1uTmFtZXMgPSBt
X2JhY2tlbmREaXNwYXRjaGVyLT5nZXRBcnJheShwYXJhbWV0ZXJzLmdldCgpLCAiY29sdW1uTmFt
ZXMiX3MsICZvcHRfaW5fY29sdW1uTmFtZXNfdmFsdWVGb3VuZCk7CisgICAgYm9vbCBvcHRfaW5f
bm90ZXNfdmFsdWVGb3VuZCA9IGZhbHNlOworICAgIFN0cmluZyBvcHRfaW5fbm90ZXMgPSBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgIm5vdGVzIl9zLCAm
b3B0X2luX25vdGVzX3ZhbHVlRm91bmQpOworICAgIGJvb2wgb3B0X2luX3RpbWVzdGFtcF92YWx1
ZUZvdW5kID0gZmFsc2U7CisgICAgZG91YmxlIG9wdF9pbl90aW1lc3RhbXAgPSBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5nZXREb3VibGUocGFyYW1ldGVycy5nZXQoKSwgInRpbWVzdGFtcCJfcywgJm9w
dF9pbl90aW1lc3RhbXBfdmFsdWVGb3VuZCk7CisgICAgYm9vbCBvcHRfaW5fdmFsdWVzX3ZhbHVl
Rm91bmQgPSBmYWxzZTsKKyAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBvcHRfaW5fdmFsdWVzID0g
bV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0T2JqZWN0KHBhcmFtZXRlcnMuZ2V0KCksICJ2YWx1ZXMi
X3MsICZvcHRfaW5fdmFsdWVzX3ZhbHVlRm91bmQpOworICAgIGJvb2wgb3B0X2luX3BheWxvYWRf
dmFsdWVGb3VuZCA9IGZhbHNlOworICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gb3B0X2luX3BheWxv
YWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRWYWx1ZShwYXJhbWV0ZXJzLmdldCgpLCAicGF5
bG9hZCJfcywgJm9wdF9pbl9wYXlsb2FkX3ZhbHVlRm91bmQpOworICAgIGJvb2wgb3B0X2luX2Rh
dGFiYXNlSWRfdmFsdWVGb3VuZCA9IGZhbHNlOworICAgIGludCBvcHRfaW5fZGF0YWJhc2VJZCA9
IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEludGVnZXIocGFyYW1ldGVycy5nZXQoKSwgImRhdGFi
YXNlSWQiX3MsICZvcHRfaW5fZGF0YWJhc2VJZF92YWx1ZUZvdW5kKTsKKyAgICBib29sIG9wdF9p
bl9zcWxFcnJvcl92YWx1ZUZvdW5kID0gZmFsc2U7CisgICAgUmVmUHRyPEpTT046Ok9iamVjdD4g
b3B0X2luX3NxbEVycm9yID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0T2JqZWN0KHBhcmFtZXRl
cnMuZ2V0KCksICJzcWxFcnJvciJfcywgJm9wdF9pbl9zcWxFcnJvcl92YWx1ZUZvdW5kKTsKKyAg
ICBib29sIG9wdF9pbl9zY3JlZW5Db2xvcl92YWx1ZUZvdW5kID0gZmFsc2U7CisgICAgU3RyaW5n
IG9wdF9pbl9zY3JlZW5Db2xvciA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwYXJh
bWV0ZXJzLmdldCgpLCAic2NyZWVuQ29sb3IiX3MsICZvcHRfaW5fc2NyZWVuQ29sb3JfdmFsdWVG
b3VuZCk7CisgICAgYm9vbCBvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzX3ZhbHVlRm91bmQgPSBmYWxz
ZTsKKyAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IG9wdF9pbl9hbHRlcm5hdGVDb2xvcnMgPSBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5nZXRBcnJheShwYXJhbWV0ZXJzLmdldCgpLCAiYWx0ZXJuYXRlQ29s
b3JzIl9zLCAmb3B0X2luX2FsdGVybmF0ZUNvbG9yc192YWx1ZUZvdW5kKTsKKyAgICBib29sIG9w
dF9pbl9wcmludENvbG9yX3ZhbHVlRm91bmQgPSBmYWxzZTsKKyAgICBTdHJpbmcgb3B0X2luX3By
aW50Q29sb3IgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQo
KSwgInByaW50Q29sb3IiX3MsICZvcHRfaW5fcHJpbnRDb2xvcl92YWx1ZUZvdW5kKTsKKyAgICBp
ZiAobV9iYWNrZW5kRGlzcGF0Y2hlci0+aGFzUHJvdG9jb2xFcnJvcnMoKSkgeworICAgICAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVy
OjpJbnZhbGlkUGFyYW1zLCAiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICdEYXRhYmFzZS5leGVj
dXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzJyBjYW4ndCBiZSBwcm9jZXNzZWQiX3MpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCisgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeworICAgICAgICBtX2FsdGVy
bmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMocmVxdWVzdElkLCBv
cHRfaW5fY29sdW1uTmFtZXNfdmFsdWVGb3VuZCA/IG9wdF9pbl9jb2x1bW5OYW1lcy5nZXQoKSA6
IG51bGxwdHIsIG9wdF9pbl9ub3Rlc192YWx1ZUZvdW5kID8gJm9wdF9pbl9ub3RlcyA6IG51bGxw
dHIsIG9wdF9pbl90aW1lc3RhbXBfdmFsdWVGb3VuZCA/ICZvcHRfaW5fdGltZXN0YW1wIDogbnVs
bHB0ciwgb3B0X2luX3ZhbHVlc192YWx1ZUZvdW5kID8gb3B0X2luX3ZhbHVlcy5nZXQoKSA6IG51
bGxwdHIsIG9wdF9pbl9wYXlsb2FkX3ZhbHVlRm91bmQgPyBvcHRfaW5fcGF5bG9hZC5nZXQoKSA6
IG51bGxwdHIsIG9wdF9pbl9kYXRhYmFzZUlkX3ZhbHVlRm91bmQgPyAmb3B0X2luX2RhdGFiYXNl
SWQgOiBudWxscHRyLCBvcHRfaW5fc3FsRXJyb3JfdmFsdWVGb3VuZCA/IG9wdF9pbl9zcWxFcnJv
ci5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9zY3JlZW5Db2xvcl92YWx1ZUZvdW5kID8gJm9wdF9p
bl9zY3JlZW5Db2xvciA6IG51bGxwdHIsIG9wdF9pbl9hbHRlcm5hdGVDb2xvcnNfdmFsdWVGb3Vu
ZCA/IG9wdF9pbl9hbHRlcm5hdGVDb2xvcnMuZ2V0KCkgOiBudWxscHRyLCBvcHRfaW5fcHJpbnRD
b2xvcl92YWx1ZUZvdW5kID8gJm9wdF9pbl9wcmludENvbG9yIDogbnVsbHB0cik7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCisKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWY8SlNPTjo6T2JqZWN0
PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxKU09OOjpBcnJh
eU9mPFN0cmluZz4+IG91dF9jb2x1bW5OYW1lczsKKyAgICBPcHRpb25hbDxTdHJpbmc+IG91dF9u
b3RlczsKKyAgICBPcHRpb25hbDxkb3VibGU+IG91dF90aW1lc3RhbXA7CisgICAgT3B0aW9uYWw8
SlNPTjo6T2JqZWN0PiBvdXRfdmFsdWVzOworICAgIE9wdGlvbmFsPEpTT046OlZhbHVlPiBvdXRf
cGF5bG9hZDsKKyAgICBPcHRpb25hbDxpbnQ+IG91dF9kYXRhYmFzZUlkOworICAgIFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IG91dF9zcWxFcnJvcjsKKyAgICBJ
bnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyBvdXRfc2NyZWVuQ29s
b3I7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+
IG91dF9hbHRlcm5hdGVDb2xvcnM7CisgICAgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXI6OlByaW50Q29sb3Igb3V0X3ByaW50Q29sb3I7CisgICAgbV9hZ2VudC0+ZXhlY3V0ZUFsbE9w
dGlvbmFsUGFyYW1ldGVycyhlcnJvciwgb3B0X2luX2NvbHVtbk5hbWVzX3ZhbHVlRm91bmQgPyBv
cHRfaW5fY29sdW1uTmFtZXMuZ2V0KCkgOiBudWxscHRyLCBvcHRfaW5fbm90ZXNfdmFsdWVGb3Vu
ZCA/ICZvcHRfaW5fbm90ZXMgOiBudWxscHRyLCBvcHRfaW5fdGltZXN0YW1wX3ZhbHVlRm91bmQg
PyAmb3B0X2luX3RpbWVzdGFtcCA6IG51bGxwdHIsIG9wdF9pbl92YWx1ZXNfdmFsdWVGb3VuZCA/
IG9wdF9pbl92YWx1ZXMuZ2V0KCkgOiBudWxscHRyLCBvcHRfaW5fcGF5bG9hZF92YWx1ZUZvdW5k
ID8gb3B0X2luX3BheWxvYWQuZ2V0KCkgOiBudWxscHRyLCBvcHRfaW5fZGF0YWJhc2VJZF92YWx1
ZUZvdW5kID8gJm9wdF9pbl9kYXRhYmFzZUlkIDogbnVsbHB0ciwgb3B0X2luX3NxbEVycm9yX3Zh
bHVlRm91bmQgPyBvcHRfaW5fc3FsRXJyb3IuZ2V0KCkgOiBudWxscHRyLCBvcHRfaW5fc2NyZWVu
Q29sb3JfdmFsdWVGb3VuZCA/ICZvcHRfaW5fc2NyZWVuQ29sb3IgOiBudWxscHRyLCBvcHRfaW5f
YWx0ZXJuYXRlQ29sb3JzX3ZhbHVlRm91bmQgPyBvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzLmdldCgp
IDogbnVsbHB0ciwgb3B0X2luX3ByaW50Q29sb3JfdmFsdWVGb3VuZCA/ICZvcHRfaW5fcHJpbnRD
b2xvciA6IG51bGxwdHIsIG91dF9jb2x1bW5OYW1lcywgb3V0X25vdGVzLCBvdXRfdGltZXN0YW1w
LCBvdXRfdmFsdWVzLCBvdXRfcGF5bG9hZCwgb3V0X2RhdGFiYXNlSWQsIG91dF9zcWxFcnJvciwg
b3V0X3NjcmVlbkNvbG9yLCBvdXRfYWx0ZXJuYXRlQ29sb3JzLCBvdXRfcHJpbnRDb2xvcik7CisK
KyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7CisgICAgICAgIGlmIChvdXRfY29sdW1uTmFtZXMp
CisgICAgICAgICAgICByZXN1bHQtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgb3V0X2NvbHVt
bk5hbWVzKTsKKyAgICAgICAgaWYgKG91dF9ub3Rlcy5oYXNWYWx1ZSgpKQorICAgICAgICAgICAg
cmVzdWx0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCAqb3V0X25vdGVzKTsKKyAgICAgICAgaWYgKG91
dF90aW1lc3RhbXAuaGFzVmFsdWUoKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0RG91YmxlKCJ0
aW1lc3RhbXAiX3MsICpvdXRfdGltZXN0YW1wKTsKKyAgICAgICAgaWYgKG91dF92YWx1ZXMuaGFz
VmFsdWUoKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsICpvdXRf
dmFsdWVzKTsKKyAgICAgICAgaWYgKG91dF9wYXlsb2FkLmhhc1ZhbHVlKCkpCisgICAgICAgICAg
ICByZXN1bHQtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCAqb3V0X3BheWxvYWQpOworICAgICAgICBp
ZiAob3V0X2RhdGFiYXNlSWQuaGFzVmFsdWUoKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0SW50
ZWdlcigiZGF0YWJhc2VJZCJfcywgKm91dF9kYXRhYmFzZUlkKTsKKyAgICAgICAgaWYgKG91dF9z
cWxFcnJvcikKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgb3V0
X3NxbEVycm9yKTsKKyAgICAgICAgaWYgKG91dF9zY3JlZW5Db2xvci5oYXNWYWx1ZSgpKQorICAg
ICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCAqb3V0X3NjcmVlbkNv
bG9yKTsKKyAgICAgICAgaWYgKG91dF9hbHRlcm5hdGVDb2xvcnMpCisgICAgICAgICAgICByZXN1
bHQtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIG91dF9hbHRlcm5hdGVDb2xvcnMpOwor
ICAgICAgICBpZiAob3V0X3ByaW50Q29sb3IuaGFzVmFsdWUoKSkKKyAgICAgICAgICAgIHJlc3Vs
dC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCAqb3V0X3ByaW50Q29sb3IpOworICAgIH0KKyAg
ICBpZiAoIWVycm9yLmxlbmd0aCgpKQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5k
UmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKKyAgICBlbHNlCisg
ICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERp
c3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Cit9CisKK3ZvaWQgRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVx
dWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpCit7CisgICAgUmVmUHRy
PEpTT046OkFycmF5PiBpbl9jb2x1bW5OYW1lcyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEFy
cmF5KHBhcmFtZXRlcnMuZ2V0KCksICJjb2x1bW5OYW1lcyJfcywgbnVsbHB0cik7CisgICAgU3Ry
aW5nIGluX25vdGVzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMu
Z2V0KCksICJub3RlcyJfcywgbnVsbHB0cik7CisgICAgZG91YmxlIGluX3RpbWVzdGFtcCA9IG1f
YmFja2VuZERpc3BhdGNoZXItPmdldERvdWJsZShwYXJhbWV0ZXJzLmdldCgpLCAidGltZXN0YW1w
Il9zLCBudWxscHRyKTsKKyAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBpbl92YWx1ZXMgPSBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5nZXRPYmplY3QocGFyYW1ldGVycy5nZXQoKSwgInZhbHVlcyJfcywg
bnVsbHB0cik7CisgICAgUmVmUHRyPEpTT046OlZhbHVlPiBpbl9wYXlsb2FkID0gbV9iYWNrZW5k
RGlzcGF0Y2hlci0+Z2V0VmFsdWUocGFyYW1ldGVycy5nZXQoKSwgInBheWxvYWQiX3MsIG51bGxw
dHIpOworICAgIGludCBpbl9kYXRhYmFzZUlkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0SW50
ZWdlcihwYXJhbWV0ZXJzLmdldCgpLCAiZGF0YWJhc2VJZCJfcywgbnVsbHB0cik7CisgICAgUmVm
UHRyPEpTT046Ok9iamVjdD4gaW5fc3FsRXJyb3IgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRP
YmplY3QocGFyYW1ldGVycy5nZXQoKSwgInNxbEVycm9yIl9zLCBudWxscHRyKTsKKyAgICBTdHJp
bmcgaW5fc2NyZWVuQ29sb3IgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1l
dGVycy5nZXQoKSwgInNjcmVlbkNvbG9yIl9zLCBudWxscHRyKTsKKyAgICBSZWZQdHI8SlNPTjo6
QXJyYXk+IGluX2FsdGVybmF0ZUNvbG9ycyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEFycmF5
KHBhcmFtZXRlcnMuZ2V0KCksICJhbHRlcm5hdGVDb2xvcnMiX3MsIG51bGxwdHIpOworICAgIFN0
cmluZyBpbl9wcmludENvbG9yID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFt
ZXRlcnMuZ2V0KCksICJwcmludENvbG9yIl9zLCBudWxscHRyKTsKKyAgICBpZiAobV9iYWNrZW5k
RGlzcGF0Y2hlci0+aGFzUHJvdG9jb2xFcnJvcnMoKSkgeworICAgICAgICBtX2JhY2tlbmREaXNw
YXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFy
YW1zLCAiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICdEYXRhYmFzZS5leGVjdXRlTm9PcHRpb25h
bFBhcmFtZXRlcnMnIGNhbid0IGJlIHByb2Nlc3NlZCJfcyk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyAgICBp
ZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hl
ci0+ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKHJlcXVlc3RJZCwgKmluX2NvbHVtbk5hbWVz
LCBpbl9ub3RlcywgaW5fdGltZXN0YW1wLCAqaW5fdmFsdWVzLCAqaW5fcGF5bG9hZCwgaW5fZGF0
YWJhc2VJZCwgKmluX3NxbEVycm9yLCBpbl9zY3JlZW5Db2xvciwgKmluX2FsdGVybmF0ZUNvbG9y
cywgaW5fcHJpbnRDb2xvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYgLy8gRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyAgICBFcnJvclN0cmluZyBl
cnJvcjsKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpOworICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IG91dF9jb2x1bW5OYW1lczsK
KyAgICBTdHJpbmcgb3V0X25vdGVzOworICAgIGRvdWJsZSBvdXRfdGltZXN0YW1wOworICAgIEpT
T046Ok9iamVjdCBvdXRfdmFsdWVzOworICAgIEpTT046OlZhbHVlIG91dF9wYXlsb2FkOworICAg
IGludCBvdXRfZGF0YWJhc2VJZDsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0
YWJhc2U6OkVycm9yPiBvdXRfc3FsRXJyb3I7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0
YWJhc2U6OlByaW1hcnlDb2xvcnMgb3V0X3NjcmVlbkNvbG9yOworICAgIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiBvdXRfYWx0ZXJuYXRlQ29sb3JzOwor
ICAgIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yIG91dF9wcmlu
dENvbG9yOworICAgIG1fYWdlbnQtPmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhlcnJvciwg
KmluX2NvbHVtbk5hbWVzLCBpbl9ub3RlcywgaW5fdGltZXN0YW1wLCAqaW5fdmFsdWVzLCAqaW5f
cGF5bG9hZCwgaW5fZGF0YWJhc2VJZCwgKmluX3NxbEVycm9yLCBpbl9zY3JlZW5Db2xvciwgKmlu
X2FsdGVybmF0ZUNvbG9ycywgaW5fcHJpbnRDb2xvciwgb3V0X2NvbHVtbk5hbWVzLCAmb3V0X25v
dGVzLCAmb3V0X3RpbWVzdGFtcCwgb3V0X3ZhbHVlcywgJm91dF9wYXlsb2FkLCAmb3V0X2RhdGFi
YXNlSWQsIG91dF9zcWxFcnJvciwgJm91dF9zY3JlZW5Db2xvciwgb3V0X2FsdGVybmF0ZUNvbG9y
cywgJm91dF9wcmludENvbG9yKTsKKworICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIHsKKyAgICAg
ICAgcmVzdWx0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIG91dF9jb2x1bW5OYW1lcyk7Cisg
ICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJub3RlcyJfcywgb3V0X25vdGVzKTsKKyAgICAgICAg
cmVzdWx0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgb3V0X3RpbWVzdGFtcCk7CisgICAgICAg
IHJlc3VsdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIG91dF92YWx1ZXMpOworICAgICAgICByZXN1
bHQtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBvdXRfcGF5bG9hZCk7CisgICAgICAgIHJlc3VsdC0+
c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgb3V0X2RhdGFiYXNlSWQpOworICAgICAgICByZXN1
bHQtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIG91dF9zcWxFcnJvcik7CisgICAgICAgIHJlc3Vs
dC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhl
bHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKG91dF9zY3JlZW5Db2xvcikpOworICAgICAgICBy
ZXN1bHQtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIG91dF9hbHRlcm5hdGVDb2xvcnMp
OworICAgICAgICByZXN1bHQtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKG91dF9wcmludENvbG9y
KSk7CisgICAgfQorICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCisgICAgICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2Up
OworICAgIGVsc2UKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xF
cnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmRE
aXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJz
LmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlv
bmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bE9iamVjdHMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgRnJvbnRl
bmRSb3V0ZXI7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0
RnJvbnRlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNw
YXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13
aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisK
KyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KKyNp
bmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisK
K25hbWVzcGFjZSBQcm90b2NvbCB7CisKKworCisvLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KK25h
bWVzcGFjZSBEYXRhYmFzZSB7CitjbGFzcyBFcnJvcjsKK2VudW0gY2xhc3MgUHJpbWFyeUNvbG9y
czsKK30gLy8gRGF0YWJhc2UKKy8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KKworCisv
LyBUeXBlZGVmcy4KK25hbWVzcGFjZSBEYXRhYmFzZSB7CisvKiBVbmlxdWUgaWRlbnRpZmllciBv
ZiBEYXRhYmFzZSBvYmplY3QuICovCit0eXBlZGVmIGludCBEYXRhYmFzZUlkOwordHlwZWRlZiBK
U09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3Jz
PiBDb2xvckxpc3Q7Cit9IC8vIERhdGFiYXNlCisvLyBFbmQgb2YgdHlwZWRlZnMuCisKK25hbWVz
cGFjZSBUZXN0SGVscGVycyB7CisKK1N0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29k
ZSk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShU
IGVudW1WYWx1ZSkKK3sKKyAgICByZXR1cm4gZ2V0RW51bUNvbnN0YW50VmFsdWUoc3RhdGljX2Nh
c3Q8aW50PihlbnVtVmFsdWUpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKKwor
bmFtZXNwYWNlIERhdGFiYXNlIHsKKy8qICAqLworZW51bSBjbGFzcyBQcmltYXJ5Q29sb3JzIHsK
KyAgICBSZWQgPSAwLAorICAgIEdyZWVuID0gMSwKKyAgICBCbHVlID0gMiwKK307IC8vIGVudW0g
Y2xhc3MgUHJpbWFyeUNvbG9ycworLyogRGF0YWJhc2UgZXJyb3IuICovCitjbGFzcyBFcnJvciA6
IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKK3B1YmxpYzoKKyAgICBlbnVtIHsKKyAgICAgICAg
Tm9GaWVsZHNTZXQgPSAwLAorICAgICAgICBNZXNzYWdlU2V0ID0gMSA8PCAwLAorICAgICAgICBD
b2RlU2V0ID0gMSA8PCAxLAorICAgICAgICBBbGxGaWVsZHNTZXQgPSAoTWVzc2FnZVNldCB8IENv
ZGVTZXQpCisgICAgfTsKKworICAgIHRlbXBsYXRlPGludCBTVEFURT4KKyAgICBjbGFzcyBCdWls
ZGVyIHsKKyAgICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBtX3Jlc3Vs
dDsKKworICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBj
YXN0U3RhdGUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nh
c3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBC
dWlsZGVyKFJlZjwvKkVycm9yKi9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQorICAgICAgICAgICAg
OiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2lu
aXRfc3RhdGUpOworICAgICAgICB9CisgICAgICAgIGZyaWVuZCBjbGFzcyBFcnJvcjsKKyAgICBw
dWJsaWM6CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1lc3NhZ2VTZXQ+JiBzZXRNZXNzYWdl
KGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBNZXNzYWdlU2V0KSwgcHJvcGVydHlfbWVzc2FnZV9hbHJlYWR5X3NldCk7
CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJtZXNzYWdlIl9zLCB2YWx1ZSk7Cisg
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1lc3NhZ2VTZXQ+KCk7CisgICAgICAgIH0KKwor
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29kZVNldD4mIHNldENvZGUoaW50IHZhbHVlKQorICAg
ICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29kZVNldCksIHBy
b3BlcnR5X2NvZGVfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldEludGVn
ZXIoImNvZGUiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29kZVNl
dD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIFJlZjxFcnJvcj4gcmVsZWFzZSgpCisgICAgICAg
IHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVz
dWx0X2lzX25vdF9yZWFkeSk7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoRXJy
b3IpID09IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7CisKKyAgICAgICAgICAg
IFJlZjxKU09OOjpPYmplY3Q+IGpzb25SZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgp
OworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJl
ZjxFcnJvcj4qPigmanNvblJlc3VsdCkpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICAgICAgfQorICAgIH07CisKKyAgICAvKgorICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoK
KyAgICAgKiBSZWY8RXJyb3I+IHJlc3VsdCA9IEVycm9yOjpjcmVhdGUoKQorICAgICAqICAgICAu
c2V0TWVzc2FnZSguLi4pCisgICAgICogICAgIC5zZXRDb2RlKC4uLikKKyAgICAgKiAgICAgLnJl
bGVhc2UoKTsKKyAgICAgKi8KKyAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRl
KCkKKyAgICB7CisgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09OOjpPYmpl
Y3Q6OmNyZWF0ZSgpKTsKKyAgICB9Cit9OworCit9IC8vIERhdGFiYXNlCisKKworCituYW1lc3Bh
Y2UgVGVzdEhlbHBlcnMgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBQcm90b2NvbEVudW1UeXBlPgor
T3B0aW9uYWw8UHJvdG9jb2xFbnVtVHlwZT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nKGNvbnN0
IFN0cmluZyYpOworCisvLyBFbnVtcyBpbiB0aGUgJ0RhdGFiYXNlJyBEb21haW4KK3RlbXBsYXRl
PD4KK09wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3Jz
PiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6
OlByaW1hcnlDb2xvcnM+KGNvbnN0IFN0cmluZyYpOworCit9IC8vIG5hbWVzcGFjZSBUZXN0SGVs
cGVycworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZh
dWx0SGFzaDsKKworLy8gSGFzaCBkZWNsYXJhdGlvbnMgaW4gdGhlICdEYXRhYmFzZScgRG9tYWlu
Cit0ZW1wbGF0ZTw+CitzdHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0
YWJhc2U6OlByaW1hcnlDb2xvcnM+IHsKKyAgICB0eXBlZGVmIEludEhhc2g8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IEhhc2g7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXVEYKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5q
c29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisKKyNpbmNsdWRl
IDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVz
cGFjZSBJbnNwZWN0b3IgeworCituYW1lc3BhY2UgUHJvdG9jb2wgeworCituYW1lc3BhY2UgVGVz
dEhlbHBlcnMgeworCitzdGF0aWMgY29uc3QgY2hhciogY29uc3QgZW51bV9jb25zdGFudF92YWx1
ZXNbXSA9IHsKKyAgICAicmVkIiwKKyAgICAiZ3JlZW4iLAorICAgICJibHVlIiwKKyAgICAiY3lh
biIsCisgICAgIm1hZ2VudGEiLAorICAgICJ5ZWxsb3ciLAorICAgICJibGFjayIsCit9OworCitT
dHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsKKyAgICByZXR1cm4gZW51bV9j
b25zdGFudF92YWx1ZXNbY29kZV07Cit9CisKKy8vIEVudW1zIGluIHRoZSAnRGF0YWJhc2UnIERv
bWFpbgordGVtcGxhdGU8PgorT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6
OlByaW1hcnlDb2xvcnM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmlu
ZykKK3sKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7CisgICAg
ICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM6
OlJlZCwKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJp
bWFyeUNvbG9yczo6R3JlZW4sCisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM6OkJsdWUsCisgICAgfTsKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IDM7ICsraSkKKyAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1fY29u
c3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKKyAgICAgICAgICAgIHJldHVybiAoSW5z
cGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMpY29uc3RhbnRWYWx1ZXNb
aV07CisKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCisKK30gLy8gbmFtZXNwYWNlIFRl
c3RIZWxwZXJzCisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorCisj
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0
dXJuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2Vu
ZERpc3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCitAcHJvdG9jb2wg
VGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyOworCituYW1lc3BhY2UgSW5zcGVjdG9y
IHsKKworCitjbGFzcyBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciBmaW5h
bCA6IHB1YmxpYyBBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyIHsKKyAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBPYmpDSW5zcGVjdG9yRGF0YWJhc2VC
YWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+IGhh
bmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KKyAgICB2b2lkIGV4ZWN1dGVBbGxPcHRp
b25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIGNvbnN0IEpTT046OkFycmF5KiBpbl9jb2x1
bW5OYW1lcywgY29uc3QgU3RyaW5nKiBpbl9ub3RlcywgY29uc3QgZG91YmxlKiBpbl90aW1lc3Rh
bXAsIGNvbnN0IEpTT046Ok9iamVjdCogaW5fdmFsdWVzLCBjb25zdCBKU09OOjpWYWx1ZSogaW5f
cGF5bG9hZCwgY29uc3QgaW50KiBpbl9kYXRhYmFzZUlkLCBjb25zdCBKU09OOjpPYmplY3QqIGlu
X3NxbEVycm9yLCBjb25zdCBTdHJpbmcqIGluX3NjcmVlbkNvbG9yLCBjb25zdCBKU09OOjpBcnJh
eSogaW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcqIGluX3ByaW50Q29sb3IpIGZpbmFs
OworICAgIHZvaWQgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBj
b25zdCBKU09OOjpBcnJheSYgaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgaW5fbm90ZXMs
IGRvdWJsZSBpbl90aW1lc3RhbXAsIGNvbnN0IEpTT046Ok9iamVjdCYgaW5fdmFsdWVzLCBKU09O
OjpWYWx1ZSBpbl9wYXlsb2FkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgSlNPTjo6T2JqZWN0
JiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nJiBpbl9zY3JlZW5Db2xvciwgY29uc3QgSlNPTjo6
QXJyYXkmIGluX2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBpbl9wcmludENvbG9yKSBm
aW5hbDsKK3ByaXZhdGU6CisgICAgUmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbERhdGFiYXNlRG9t
YWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
KworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVy
bi1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlz
cGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW5jbHVk
ZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1
ZXMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3ZvaWQgT2JqQ0luc3BlY3RvckRhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyBy
ZXF1ZXN0SWQsIGNvbnN0IEpTT046OkFycmF5KiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5n
KiBpbl9ub3RlcywgY29uc3QgZG91YmxlKiBpbl90aW1lc3RhbXAsIGNvbnN0IEpTT046Ok9iamVj
dCogaW5fdmFsdWVzLCBjb25zdCBKU09OOjpWYWx1ZSogaW5fcGF5bG9hZCwgY29uc3QgaW50KiBp
bl9kYXRhYmFzZUlkLCBjb25zdCBKU09OOjpPYmplY3QqIGluX3NxbEVycm9yLCBjb25zdCBTdHJp
bmcqIGluX3NjcmVlbkNvbG9yLCBjb25zdCBKU09OOjpBcnJheSogaW5fYWx0ZXJuYXRlQ29sb3Jz
LCBjb25zdCBTdHJpbmcqIGluX3ByaW50Q29sb3IpCit7CisgICAgaWYgKCFbbV9kZWxlZ2F0ZSBy
ZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNX
aXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6Y29sdW1uTmFtZXM6bm90ZXM6dGltZXN0
YW1wOnZhbHVlczpwYXlsb2FkOmRhdGFiYXNlSWQ6c3FsRXJyb3I6c2NyZWVuQ29sb3I6YWx0ZXJu
YXRlQ29sb3JzOnByaW50Q29sb3I6KV0pIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2RO
b3RGb3VuZCwgIidEYXRhYmFzZS5leGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzJyB3YXMgbm90
IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJv
cnMoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBe
KE5TU3RyaW5nICplcnJvcikgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQ
cm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBl
cnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7
CisgICAgfTsKKworICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5n
PiovICoqY29sdW1uTmFtZXMsIE5TU3RyaW5nICoqbm90ZXMsIGRvdWJsZSAqdGltZXN0YW1wLCBS
V0lQcm90b2NvbEpTT05PYmplY3QgKip2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnBh
eWxvYWQsIGludCAqZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKnNxbEVy
cm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgKnNjcmVlbkNvbG9yLCBOU0Fy
cmF5Lyo8TlNTdHJpbmc+Ki8gKiphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNl
RXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IgKnByaW50Q29sb3IpIHsKKyAg
ICAgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVS
KGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihub3RlcywgQCJub3RlcyIpOworICAgICAgICBUSFJP
V19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIodmFsdWVzLCBAInZhbHVlcyIp
OworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIocGF5
bG9hZCwgQCJwYXlsb2FkIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElP
TkFMX1BBUkFNRVRFUihzcWxFcnJvciwgQCJzcWxFcnJvciIpOworICAgICAgICBUSFJPV19FWENF
UFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoYWx0ZXJuYXRlQ29sb3JzLCBAImFsdGVy
bmF0ZUNvbG9ycyIpOworICAgICAgICBpZiAoY29sdW1uTmFtZXMpCisgICAgICAgICAgICByZXN1
bHRPYmplY3QtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgdG9KU09OU3RyaW5nQXJyYXkoKmNv
bHVtbk5hbWVzKSk7CisgICAgICAgIGlmIChub3RlcykKKyAgICAgICAgICAgIHJlc3VsdE9iamVj
dC0+c2V0U3RyaW5nKCJub3RlcyJfcywgKm5vdGVzKTsKKyAgICAgICAgaWYgKHRpbWVzdGFtcCkK
KyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICp0aW1l
c3RhbXApOworICAgICAgICBpZiAodmFsdWVzKQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5z
ZXRPYmplY3QoInZhbHVlcyJfcywgWyp2YWx1ZXMgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIGlm
IChwYXlsb2FkKQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRWYWx1ZSgicGF5bG9hZCJf
cywgWypwYXlsb2FkIHRvSlNPTk9iamVjdF0pOworICAgICAgICBpZiAoZGF0YWJhc2VJZCkKKyAg
ICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgKmRhdGFi
YXNlSWQpOworICAgICAgICBpZiAoc3FsRXJyb3IpCisgICAgICAgICAgICByZXN1bHRPYmplY3Qt
PnNldE9iamVjdCgic3FsRXJyb3IiX3MsIFsqc3FsRXJyb3IgdG9KU09OT2JqZWN0XSk7CisgICAg
ICAgIGlmIChzY3JlZW5Db2xvcikKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5n
KCJzY3JlZW5Db2xvciJfcywgdG9Qcm90b2NvbFN0cmluZygqc2NyZWVuQ29sb3IpKTsKKyAgICAg
ICAgaWYgKGFsdGVybmF0ZUNvbG9ycykKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJy
YXkoImFsdGVybmF0ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5nQXJyYXkoKmFsdGVybmF0ZUNvbG9y
cykpOworICAgICAgICBpZiAocHJpbnRDb2xvcikKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+
c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKCpwcmludENvbG9yKSk7
CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdU
Rk1vdmUocmVzdWx0T2JqZWN0KSwgZmFsc2UpOworICAgIH07CisKKyAgICBOU0FycmF5Lyo8TlNT
dHJpbmc+Ki8gKm9faW5fY29sdW1uTmFtZXM7CisgICAgaWYgKGluX2NvbHVtbk5hbWVzKQorICAg
ICAgICBvX2luX2NvbHVtbk5hbWVzID0gdG9PYmpDU3RyaW5nQXJyYXkoaW5fY29sdW1uTmFtZXMp
OworICAgIE5TU3RyaW5nICpvX2luX25vdGVzOworICAgIGlmIChpbl9ub3RlcykKKyAgICAgICAg
b19pbl9ub3RlcyA9ICppbl9ub3RlczsKKyAgICBkb3VibGUgb19pbl90aW1lc3RhbXA7CisgICAg
aWYgKGluX3RpbWVzdGFtcCkKKyAgICAgICAgb19pbl90aW1lc3RhbXAgPSAqaW5fdGltZXN0YW1w
OworICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb19pbl92YWx1ZXM7CisgICAgaWYgKGluX3Zh
bHVlcykKKyAgICAgICAgb19pbl92YWx1ZXMgPSBbW1tSV0lQcm90b2NvbEpTT05PYmplY3QgYWxs
b2NdIGluaXRXaXRoSlNPTk9iamVjdDppbl92YWx1ZXNdIGF1dG9yZWxlYXNlXTsKKyAgICBSV0lQ
cm90b2NvbEpTT05PYmplY3QgKm9faW5fcGF5bG9hZDsKKyAgICBpZiAoaW5fcGF5bG9hZCkKKyAg
ICAgICAgb19pbl9wYXlsb2FkID0gW1tbUldJUHJvdG9jb2xKU09OT2JqZWN0IGFsbG9jXSBpbml0
V2l0aEpTT05PYmplY3Q6aW5fcGF5bG9hZF0gYXV0b3JlbGVhc2VdOworICAgIGludCBvX2luX2Rh
dGFiYXNlSWQ7CisgICAgaWYgKGluX2RhdGFiYXNlSWQpCisgICAgICAgIG9faW5fZGF0YWJhc2VJ
ZCA9ICppbl9kYXRhYmFzZUlkOworICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKm9faW5f
c3FsRXJyb3I7CisgICAgaWYgKGluX3NxbEVycm9yKQorICAgICAgICBvX2luX3NxbEVycm9yID0g
W1tbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0Omlu
X3NxbEVycm9yXSBhdXRvcmVsZWFzZV07CisgICAgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJh
c2VQcmltYXJ5Q29sb3JzPiBvX2luX3NjcmVlbkNvbG9yOworICAgIGlmIChpbl9zY3JlZW5Db2xv
cikKKyAgICAgICAgb19pbl9zY3JlZW5Db2xvciA9IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJv
dG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnM+KCppbl9zY3JlZW5Db2xvcik7CisgICAgTlNBcnJh
eS8qPE5TU3RyaW5nPiovICpvX2luX2FsdGVybmF0ZUNvbG9yczsKKyAgICBpZiAoaW5fYWx0ZXJu
YXRlQ29sb3JzKQorICAgICAgICBvX2luX2FsdGVybmF0ZUNvbG9ycyA9IHRvT2JqQ1N0cmluZ0Fy
cmF5KGluX2FsdGVybmF0ZUNvbG9ycyk7CisgICAgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJh
c2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvcj4gb19pbl9wcmludENvbG9y
OworICAgIGlmIChpbl9wcmludENvbG9yKQorICAgICAgICBvX2luX3ByaW50Q29sb3IgPSBmcm9t
UHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJh
bWV0ZXJzUHJpbnRDb2xvcj4oKmluX3ByaW50Q29sb3IpOworCisgICAgW21fZGVsZWdhdGUgZXhl
Y3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1dpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sg
c3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjayBjb2x1bW5OYW1lczooaW5fY29sdW1uTmFt
ZXMgPyAmb19pbl9jb2x1bW5OYW1lcyA6IG5pbCkgbm90ZXM6KGluX25vdGVzID8gJm9faW5fbm90
ZXMgOiBuaWwpIHRpbWVzdGFtcDooaW5fdGltZXN0YW1wID8gJm9faW5fdGltZXN0YW1wIDogbmls
KSB2YWx1ZXM6KGluX3ZhbHVlcyA/ICZvX2luX3ZhbHVlcyA6IG5pbCkgcGF5bG9hZDooaW5fcGF5
bG9hZCA/ICZvX2luX3BheWxvYWQgOiBuaWwpIGRhdGFiYXNlSWQ6KGluX2RhdGFiYXNlSWQgPyAm
b19pbl9kYXRhYmFzZUlkIDogbmlsKSBzcWxFcnJvcjooaW5fc3FsRXJyb3IgPyAmb19pbl9zcWxF
cnJvciA6IG5pbCkgc2NyZWVuQ29sb3I6KGluX3NjcmVlbkNvbG9yID8gJm9faW5fc2NyZWVuQ29s
b3IudmFsdWUoKSA6IG5pbCkgYWx0ZXJuYXRlQ29sb3JzOihpbl9hbHRlcm5hdGVDb2xvcnMgPyAm
b19pbl9hbHRlcm5hdGVDb2xvcnMgOiBuaWwpIHByaW50Q29sb3I6KGluX3ByaW50Q29sb3IgPyAm
b19pbl9wcmludENvbG9yLnZhbHVlKCkgOiBuaWwpXTsKK30KKwordm9pZCBPYmpDSW5zcGVjdG9y
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxv
bmcgcmVxdWVzdElkLCBjb25zdCBKU09OOjpBcnJheSYgaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0
cmluZyYgaW5fbm90ZXMsIGRvdWJsZSBpbl90aW1lc3RhbXAsIGNvbnN0IEpTT046Ok9iamVjdCYg
aW5fdmFsdWVzLCBKU09OOjpWYWx1ZSBpbl9wYXlsb2FkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29u
c3QgSlNPTjo6T2JqZWN0JiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nJiBpbl9zY3JlZW5Db2xv
ciwgY29uc3QgSlNPTjo6QXJyYXkmIGluX2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBp
bl9wcmludENvbG9yKQoreworICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9y
OkBzZWxlY3RvcihleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNXaXRoRXJyb3JDYWxsYmFjazpz
dWNjZXNzQ2FsbGJhY2s6Y29sdW1uTmFtZXM6bm90ZXM6dGltZXN0YW1wOnZhbHVlczpwYXlsb2Fk
OmRhdGFiYXNlSWQ6c3FsRXJyb3I6c2NyZWVuQ29sb3I6YWx0ZXJuYXRlQ29sb3JzOnByaW50Q29s
b3I6KV0pIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJv
cihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEYXRhYmFz
ZS5leGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAg
ICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7
CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVz
dElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICB9OworCisgICAgaWQg
c3VjY2Vzc0NhbGxiYWNrID0gXihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmNvbHVtbk5hbWVzLCBO
U1N0cmluZyAqbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAq
dmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBU
ZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQ
cmltYXJ5Q29sb3JzIHNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmFsdGVybmF0
ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQ
cmludENvbG9yIHByaW50Q29sb3IpIHsKKyAgICAgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0
T2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoY29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsKKyAg
ICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIobm90ZXMsIEAibm90
ZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIodmFs
dWVzLCBAInZhbHVlcyIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BB
UkFNRVRFUihwYXlsb2FkLCBAInBheWxvYWQiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9SRVFVSVJFRF9QQVJBTUVURVIoc3FsRXJyb3IsIEAic3FsRXJyb3IiKTsKKyAgICAgICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoYWx0ZXJuYXRlQ29sb3JzLCBAImFs
dGVybmF0ZUNvbG9ycyIpOworICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJjb2x1bW5O
YW1lcyJfcywgdG9KU09OU3RyaW5nQXJyYXkoY29sdW1uTmFtZXMpKTsKKyAgICAgICAgcmVzdWx0
T2JqZWN0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBub3Rlcyk7CisgICAgICAgIHJlc3VsdE9iamVj
dC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIHRpbWVzdGFtcCk7CisgICAgICAgIHJlc3VsdE9i
amVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFt2YWx1ZXMgdG9KU09OT2JqZWN0XSk7CisgICAg
ICAgIHJlc3VsdE9iamVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFtwYXlsb2FkIHRvSlNPTk9i
amVjdF0pOworICAgICAgICByZXN1bHRPYmplY3QtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3Ms
IGRhdGFiYXNlSWQpOworICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdCgic3FsRXJyb3Ii
X3MsIFtzcWxFcnJvciB0b0pTT05PYmplY3RdKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRT
dHJpbmcoInNjcmVlbkNvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKHNjcmVlbkNvbG9yKSk7Cisg
ICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgdG9KU09O
U3RyaW5nQXJyYXkoYWx0ZXJuYXRlQ29sb3JzKSk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0
U3RyaW5nKCJwcmludENvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKHByaW50Q29sb3IpKTsKKyAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92
ZShyZXN1bHRPYmplY3QpLCBmYWxzZSk7CisgICAgfTsKKworICAgIE5TQXJyYXkvKjxOU1N0cmlu
Zz4qLyAqb19pbl9jb2x1bW5OYW1lcyA9IHRvT2JqQ1N0cmluZ0FycmF5KCZpbl9jb2x1bW5OYW1l
cyk7CisgICAgTlNTdHJpbmcgKm9faW5fbm90ZXMgPSBpbl9ub3RlczsKKyAgICBkb3VibGUgb19p
bl90aW1lc3RhbXAgPSBpbl90aW1lc3RhbXA7CisgICAgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpv
X2luX3ZhbHVlcyA9IFtbW1JXSVByb3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5pdFdpdGhKU09O
T2JqZWN0OiZpbl92YWx1ZXNdIGF1dG9yZWxlYXNlXTsKKyAgICBSV0lQcm90b2NvbEpTT05PYmpl
Y3QgKm9faW5fcGF5bG9hZCA9IFtbW1JXSVByb3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5pdFdp
dGhKU09OT2JqZWN0OiZpbl9wYXlsb2FkXSBhdXRvcmVsZWFzZV07CisgICAgaW50IG9faW5fZGF0
YWJhc2VJZCA9IGluX2RhdGFiYXNlSWQ7CisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAq
b19pbl9zcWxFcnJvciA9IFtbW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgYWxsb2NdIGluaXRX
aXRoSlNPTk9iamVjdDomaW5fc3FsRXJyb3JdIGF1dG9yZWxlYXNlXTsKKyAgICBPcHRpb25hbDxU
ZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnM+IG9faW5fc2NyZWVuQ29sb3IgPSBmcm9t
UHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzPihpbl9zY3Jl
ZW5Db2xvcik7CisgICAgaWYgKCFvX2luX3NjcmVlbkNvbG9yKSB7CisgICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OkludmFs
aWRQYXJhbXMsICJQYXJhbWV0ZXIgJ3NjcmVlbkNvbG9yJyBvZiBtZXRob2QgJ0RhdGFiYXNlLmV4
ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycycgY2Fubm90IGJlIHByb2Nlc3NlZCJfcyk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgTlNBcnJheS8qPE5TU3RyaW5nPiovICpvX2luX2FsdGVy
bmF0ZUNvbG9ycyA9IHRvT2JqQ1N0cmluZ0FycmF5KCZpbl9hbHRlcm5hdGVDb2xvcnMpOworICAg
IE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJz
UHJpbnRDb2xvcj4gb19pbl9wcmludENvbG9yID0gZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90
b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvcj4oaW5fcHJp
bnRDb2xvcik7CisgICAgaWYgKCFvX2luX3ByaW50Q29sb3IpIHsKKyAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxp
ZFBhcmFtcywgIlBhcmFtZXRlciAncHJpbnRDb2xvcicgb2YgbWV0aG9kICdEYXRhYmFzZS5leGVj
dXRlTm9PcHRpb25hbFBhcmFtZXRlcnMnIGNhbm5vdCBiZSBwcm9jZXNzZWQiX3MpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgW21fZGVsZWdhdGUgZXhlY3V0ZU5vT3B0aW9uYWxQYXJh
bWV0ZXJzV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3Vj
Y2Vzc0NhbGxiYWNrIGNvbHVtbk5hbWVzOm9faW5fY29sdW1uTmFtZXMgbm90ZXM6b19pbl9ub3Rl
cyB0aW1lc3RhbXA6b19pbl90aW1lc3RhbXAgdmFsdWVzOm9faW5fdmFsdWVzIHBheWxvYWQ6b19p
bl9wYXlsb2FkIGRhdGFiYXNlSWQ6b19pbl9kYXRhYmFzZUlkIHNxbEVycm9yOm9faW5fc3FsRXJy
b3Igc2NyZWVuQ29sb3I6b19pbl9zY3JlZW5Db2xvci52YWx1ZSgpIGFsdGVybmF0ZUNvbG9yczpv
X2luX2FsdGVybmF0ZUNvbG9ycyBwcmludENvbG9yOm9faW5fcHJpbnRDb2xvci52YWx1ZSgpXTsK
K30KKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24uaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1h
bmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9U
ZXN0UHJvdG9jb2wuaD4KKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkp
CitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAorQHByb3Bl
cnR5IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNldERhdGFiYXNlSGFuZGxlcjopIGlkPFRl
c3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4gZGF0YWJhc2VIYW5kbGVyOworQGVuZAor
CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0
ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lt
cG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9j
b2xJbnRlcm5hbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgi
CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgor
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+
CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0
Y2hlcnMuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVycy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24g
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29u
dHJvbGxlciogX2NvbnRyb2xsZXI7CisgICAgaWQ8VGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5I
YW5kbGVyPiBfZGF0YWJhc2VIYW5kbGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhD
b250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sK
KyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJu
IG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9s
bGVyOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbX2Rh
dGFiYXNlSGFuZGxlciByZWxlYXNlXTsKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0gKHZv
aWQpc2V0RGF0YWJhc2VIYW5kbGVyOihpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRs
ZXI+KWhhbmRsZXIKK3sKKyAgICBpZiAoaGFuZGxlciA9PSBfZGF0YWJhc2VIYW5kbGVyKQorICAg
ICAgICByZXR1cm47CisKKyAgICBbX2RhdGFiYXNlSGFuZGxlciByZWxlYXNlXTsKKyAgICBfZGF0
YWJhc2VIYW5kbGVyID0gW2hhbmRsZXIgcmV0YWluXTsKKworICAgIGF1dG8gYWx0ZXJuYXRlRGlz
cGF0Y2hlciA9IG1ha2VVbmlxdWU8T2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXI+KGhhbmRsZXIpOworICAgIGF1dG8gYWx0ZXJuYXRlQWdlbnQgPSBtYWtlVW5pcXVlPEFsdGVy
bmF0ZURpc3BhdGNoYWJsZUFnZW50PERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIsIEFsdGVybmF0
ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+PigiRGF0YWJhc2UiX3MsICpfY29udHJvbGxlciwg
V1RGTW92ZShhbHRlcm5hdGVEaXNwYXRjaGVyKSk7CisgICAgX2NvbnRyb2xsZXItPmFwcGVuZEV4
dHJhQWdlbnQoV1RGTW92ZShhbHRlcm5hdGVBZ2VudCkpOworfQorCistIChpZDxUZXN0UHJvdG9j
b2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+KWRhdGFiYXNlSGFuZGxlcgoreworICAgIHJldHVybiBf
ZGF0YWJhc2VIYW5kbGVyOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xDb25maWd1cmF0aW9uLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERp
c3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMt
d2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJu
YWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0
IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisKKyMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBj
b21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxGb3VuZGF0aW9u
L0ZvdW5kYXRpb24uaD4KKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9i
amVjdC5oPgorCisKK0BjbGFzcyBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yOworCisKK3R5cGVk
ZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycykg
eworICAgIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc1JlZCwKKyAgICBUZXN0UHJv
dG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNHcmVlbiwKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFz
ZVByaW1hcnlDb2xvcnNCbHVlLAorfTsKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVz
dFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvcikg
eworICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1By
aW50Q29sb3JDeWFuLAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFs
UGFyYW1ldGVyc1ByaW50Q29sb3JNYWdlbnRhLAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhl
Y3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JZZWxsb3csCisgICAgVGVzdFByb3Rv
Y29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckJsYWNrLAor
fTsKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVj
dXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvcikgeworICAgIFRlc3RQcm90b2NvbERh
dGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JDeWFuLAorICAgIFRl
c3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JN
YWdlbnRhLAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1l
dGVyc1ByaW50Q29sb3JZZWxsb3csCisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxs
T3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckJsYWNrLAorfTsKKwordHlwZWRlZiBOU19FTlVN
KE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRl
cnNQcmludENvbG9yKSB7CisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25h
bFBhcmFtZXRlcnNQcmludENvbG9yQ3lhbiwKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JNYWdlbnRhLAorICAgIFRlc3RQcm90b2Nv
bERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvclllbGxvdywKKyAg
ICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29s
b3JCbGFjaywKK307CisKK3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbERh
dGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvcikgeworICAgIFRlc3RQ
cm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckN5YW4s
CisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmlu
dENvbG9yTWFnZW50YSwKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFs
UGFyYW1ldGVyc1ByaW50Q29sb3JZZWxsb3csCisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVj
dXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQmxhY2ssCit9OworCisKK19fYXR0cmli
dXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xE
YXRhYmFzZUVycm9yIDogUldJUHJvdG9jb2xKU09OT2JqZWN0CistIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKKy0g
KGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmpl
Y3QgKilqc29uT2JqZWN0OworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTWVzc2FnZTooTlNTdHJp
bmcgKiltZXNzYWdlIGNvZGU6KGludCljb2RlOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChu
b25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICptZXNzYWdlOworLyogcmVxdWlyZWQgKi8gQHByb3Bl
cnR5IChub25hdG9taWMsIGFzc2lnbikgaW50IGNvZGU7CitAZW5kCisKK0Bwcm90b2NvbCBUZXN0
UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXIgPE5TT2JqZWN0PgorQG9wdGlvbmFsCistICh2
b2lkKWV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNXaXRoRXJyb3JDYWxsYmFjazoodm9pZChe
KShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4p
KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqKm5vdGVzLCBk
b3VibGUgKnRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqdmFsdWVzLCBSV0lQcm90
b2NvbEpTT05PYmplY3QgKipwYXlsb2FkLCBpbnQgKmRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERh
dGFiYXNlRXJyb3IgKipzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3Jz
ICpzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICoqYWx0ZXJuYXRlQ29sb3JzLCBU
ZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9y
ICpwcmludENvbG9yKSlzdWNjZXNzQ2FsbGJhY2sgY29sdW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0
cmluZz4qLyAqKiljb2x1bW5OYW1lcyBub3RlczooTlNTdHJpbmcgKiopbm90ZXMgdGltZXN0YW1w
Oihkb3VibGUgKil0aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKiopdmFs
dWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKilwYXlsb2FkIGRhdGFiYXNlSWQ6
KGludCAqKWRhdGFiYXNlSWQgc3FsRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKiop
c3FsRXJyb3Igc2NyZWVuQ29sb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyAq
KXNjcmVlbkNvbG9yIGFsdGVybmF0ZUNvbG9yczooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKWFs
dGVybmF0ZUNvbG9ycyBwcmludENvbG9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxP
cHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yICopcHJpbnRDb2xvcjsKKy0gKHZvaWQpZXhlY3V0
ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcg
KmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKShOU0FycmF5Lyo8
TlNTdHJpbmc+Ki8gKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqbm90ZXMsIGRvdWJsZSB0aW1lc3Rh
bXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3Qg
KnBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpzcWxF
cnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzIHNjcmVlbkNvbG9yLCBOU0Fy
cmF5Lyo8TlNTdHJpbmc+Ki8gKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VF
eGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yIHByaW50Q29sb3IpKXN1Y2Nlc3ND
YWxsYmFjayBjb2x1bW5OYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMg
bm90ZXM6KE5TU3RyaW5nICopbm90ZXMgdGltZXN0YW1wOihkb3VibGUpdGltZXN0YW1wIHZhbHVl
czooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopdmFsdWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNP
Tk9iamVjdCAqKXBheWxvYWQgZGF0YWJhc2VJZDooaW50KWRhdGFiYXNlSWQgc3FsRXJyb3I6KFRl
c3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKilzcWxFcnJvciBzY3JlZW5Db2xvcjooVGVzdFByb3Rv
Y29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzKXNjcmVlbkNvbG9yIGFsdGVybmF0ZUNvbG9yczooTlNB
cnJheS8qPE5TU3RyaW5nPiovICopYWx0ZXJuYXRlQ29sb3JzIHByaW50Q29sb3I6KFRlc3RQcm90
b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvcilwcmludENv
bG9yOworQGVuZAorCisKKworCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWls
ZENvbXBhdGliaWxpdHlPYmplY3RzLmg+CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgK
KworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBh
cmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmpl
Y3RQcml2YXRlLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3Rv
ckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKKworCisKKyMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJv
dG9jb2wuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lv
bnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIE9iakNF
bnVtVHlwZT4KK09wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0
IFN0cmluZyYgdmFsdWUpOworCisKK2lubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0
UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgdmFsdWUpCit7CisgICAgc3dpdGNoKHZhbHVl
KSB7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNSZWQ6CisgICAg
ICAgIHJldHVybiAicmVkIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5
Q29sb3JzR3JlZW46CisgICAgICAgIHJldHVybiAiZ3JlZW4iX3M7CisgICAgY2FzZSBUZXN0UHJv
dG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNCbHVlOgorICAgICAgICByZXR1cm4gImJsdWUiX3M7
CisgICAgfQorfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0
YWJhc2VQcmltYXJ5Q29sb3JzPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1
ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gInJlZCIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9j
b2xEYXRhYmFzZVByaW1hcnlDb2xvcnNSZWQ7CisgICAgaWYgKHZhbHVlID09ICJncmVlbiIpCisg
ICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNHcmVlbjsKKyAg
ICBpZiAodmFsdWUgPT0gImJsdWUiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJh
c2VQcmltYXJ5Q29sb3JzQmx1ZTsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCitpbmxp
bmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxs
T3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvciB2YWx1ZSkKK3sKKyAgICBzd2l0Y2godmFsdWUp
IHsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1l
dGVyc1ByaW50Q29sb3JDeWFuOgorICAgICAgICByZXR1cm4gImN5YW4iX3M7CisgICAgY2FzZSBU
ZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9y
TWFnZW50YToKKyAgICAgICAgcmV0dXJuICJtYWdlbnRhIl9zOworICAgIGNhc2UgVGVzdFByb3Rv
Y29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvclllbGxvdzoK
KyAgICAgICAgcmV0dXJuICJ5ZWxsb3ciX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFz
ZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQmxhY2s6CisgICAgICAgIHJl
dHVybiAiYmxhY2siX3M7CisgICAgfQorfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgT3B0aW9uYWw8
VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xv
cj4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgaWYgKHZh
bHVlID09ICJjeWFuIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0
ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JDeWFuOworICAgIGlmICh2YWx1ZSA9PSAi
bWFnZW50YSIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxP
cHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yTWFnZW50YTsKKyAgICBpZiAodmFsdWUgPT0gInll
bGxvdyIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRp
b25hbFBhcmFtZXRlcnNQcmludENvbG9yWWVsbG93OworICAgIGlmICh2YWx1ZSA9PSAiYmxhY2si
KQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQ
YXJhbWV0ZXJzUHJpbnRDb2xvckJsYWNrOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisK
K2lubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yIHZhbHVlKQoreworICAgIHN3aXRjaCh2
YWx1ZSkgeworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQ
YXJhbWV0ZXJzUHJpbnRDb2xvckN5YW46CisgICAgICAgIHJldHVybiAiY3lhbiJfczsKKyAgICBj
YXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50
Q29sb3JNYWdlbnRhOgorICAgICAgICByZXR1cm4gIm1hZ2VudGEiX3M7CisgICAgY2FzZSBUZXN0
UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yWWVs
bG93OgorICAgICAgICByZXR1cm4gInllbGxvdyJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERh
dGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JCbGFjazoKKyAgICAg
ICAgcmV0dXJuICJibGFjayJfczsKKyAgICB9Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBPcHRp
b25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmlu
dENvbG9yPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBp
ZiAodmFsdWUgPT0gImN5YW4iKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VF
eGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckN5YW47CisgICAgaWYgKHZhbHVl
ID09ICJtYWdlbnRhIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0
ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JNYWdlbnRhOworICAgIGlmICh2YWx1ZSA9
PSAieWVsbG93IikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFs
bE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JZZWxsb3c7CisgICAgaWYgKHZhbHVlID09ICJi
bGFjayIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRp
b25hbFBhcmFtZXRlcnNQcmludENvbG9yQmxhY2s7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
K30KKworaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbERhdGFiYXNl
RXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvciB2YWx1ZSkKK3sKKyAgICBzd2l0
Y2godmFsdWUpIHsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9u
YWxQYXJhbWV0ZXJzUHJpbnRDb2xvckN5YW46CisgICAgICAgIHJldHVybiAiY3lhbiJfczsKKyAg
ICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJp
bnRDb2xvck1hZ2VudGE6CisgICAgICAgIHJldHVybiAibWFnZW50YSJfczsKKyAgICBjYXNlIFRl
c3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvclll
bGxvdzoKKyAgICAgICAgcmV0dXJuICJ5ZWxsb3ciX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xE
YXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JCbGFjazoKKyAgICAg
ICAgcmV0dXJuICJibGFjayJfczsKKyAgICB9Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBPcHRp
b25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50
Q29sb3I+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIGlm
ICh2YWx1ZSA9PSAiY3lhbiIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JDeWFuOworICAgIGlmICh2YWx1ZSA9
PSAibWFnZW50YSIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVO
b09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JNYWdlbnRhOworICAgIGlmICh2YWx1ZSA9PSAi
eWVsbG93IikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0
aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvclllbGxvdzsKKyAgICBpZiAodmFsdWUgPT0gImJsYWNr
IikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQ
YXJhbWV0ZXJzUHJpbnRDb2xvckJsYWNrOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisK
K2lubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IgdmFsdWUpCit7CisgICAgc3dpdGNoKHZh
bHVlKSB7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFy
YW1ldGVyc1ByaW50Q29sb3JDeWFuOgorICAgICAgICByZXR1cm4gImN5YW4iX3M7CisgICAgY2Fz
ZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29s
b3JNYWdlbnRhOgorICAgICAgICByZXR1cm4gIm1hZ2VudGEiX3M7CisgICAgY2FzZSBUZXN0UHJv
dG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JZZWxsb3c6
CisgICAgICAgIHJldHVybiAieWVsbG93Il9zOworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJh
c2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQmxhY2s6CisgICAgICAgIHJl
dHVybiAiYmxhY2siX3M7CisgICAgfQorfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgT3B0aW9uYWw8
VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9y
PiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAodmFs
dWUgPT0gImN5YW4iKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRl
Tm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQ3lhbjsKKyAgICBpZiAodmFsdWUgPT0gIm1h
Z2VudGEiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRp
b25hbFBhcmFtZXRlcnNQcmludENvbG9yTWFnZW50YTsKKyAgICBpZiAodmFsdWUgPT0gInllbGxv
dyIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFs
UGFyYW1ldGVyc1ByaW50Q29sb3JZZWxsb3c7CisgICAgaWYgKHZhbHVlID09ICJibGFjayIpCisg
ICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1l
dGVyc1ByaW50Q29sb3JCbGFjazsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
Lm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRp
b25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
LmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sVHlw
ZVBhcnNlci5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFBy
aXZhdGUuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGludGVyZmFjZSBUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKERhdGFiYXNlRG9tYWluKQorCisrICh2b2lkKV9wYXJz
ZURhdGFiYXNlSWQ6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2Fk
OworKyAodm9pZClfcGFyc2VQcmltYXJ5Q29sb3JzOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9t
UGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNlQ29sb3JMaXN0OihOU0FycmF5Lyo8
TlNTdHJpbmc+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisrICh2b2lk
KV9wYXJzZUVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqKW91dFZhbHVlIGZyb21Q
YXlsb2FkOihpZClwYXlsb2FkOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMgKERhdGFiYXNlRG9tYWluKQorCisrICh2b2lkKV9wYXJzZURhdGFi
YXNlSWQ6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7Cisg
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNOdW1iZXIgY2xhc3Nd
KTsKKyAgICAqb3V0VmFsdWUgPSAoTlNOdW1iZXIgKilwYXlsb2FkOworfQorCisrICh2b2lkKV9w
YXJzZVByaW1hcnlDb2xvcnM6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClw
YXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNT
dHJpbmcgY2xhc3NdKTsKKyAgICBPcHRpb25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlD
b2xvcnM+IHJlc3VsdCA9IEluc3BlY3Rvcjo6ZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2Nv
bERhdGFiYXNlUHJpbWFyeUNvbG9ycz4ocGF5bG9hZCk7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9CQURfRU5VTV9WQUxVRShyZXN1bHQsIEAiUHJpbWFyeUNvbG9ycyIpOworICAgICpvdXRWYWx1
ZSA9IEAocmVzdWx0LnZhbHVlKCkpOworfQorCisrICh2b2lkKV9wYXJzZUNvbG9yTGlzdDooTlNB
cnJheS8qPE5TU3RyaW5nPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7
CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNBcnJheS8qPE5T
U3RyaW5nPiovIGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gKE5TQXJyYXkvKjxOU1N0cmluZz4q
LyAqKXBheWxvYWQ7Cit9CisKKysgKHZvaWQpX3BhcnNlRXJyb3I6KFRlc3RQcm90b2NvbERhdGFi
YXNlRXJyb3IgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJP
V19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsK
KyAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgYWxsb2NdIGluaXRX
aXRoUGF5bG9hZDpwYXlsb2FkXTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xU
eXBlcy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgt
b3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgi
CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8V2Vi
SW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKyNpbXBvcnQgPHd0Zi9B
c3NlcnRpb25zLmg+CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yOworCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xEYXRhYmFzZUVy
cm9yCisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9u
YXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVy
IGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
UkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAIm1lc3NhZ2UiXSwgQCJtZXNzYWdlIik7CisgICAg
c2VsZi5tZXNzYWdlID0gcGF5bG9hZFtAIm1lc3NhZ2UiXTsKKworICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImNvZGUiXSwgQCJjb2RlIik7CisgICAg
c2VsZi5jb2RlID0gW3BheWxvYWRbQCJjb2RlIl0gaW50ZWdlclZhbHVlXTsKKworICAgIHJldHVy
biBzZWxmOworfQorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVBy
b3RvY29sSlNPTk9iamVjdCAqKW9iamVjdAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5p
dFdpdGhKU09OT2JqZWN0OltvYmplY3QgdG9KU09OT2JqZWN0XS5nZXQoKV0pKQorICAgICAgICBy
ZXR1cm4gbmlsOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0
V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBjb2RlOihpbnQpY29kZQoreworICAgIGlm
ICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShtZXNzYWdlLCBAIm1lc3NhZ2UiKTsK
KworICAgIHNlbGYubWVzc2FnZSA9IG1lc3NhZ2U7CisgICAgc2VsZi5jb2RlID0gY29kZTsKKwor
ICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXNldE1lc3NhZ2U6KE5TU3RyaW5nICopbWVz
c2FnZQoreworICAgIFtzdXBlciBzZXRTdHJpbmc6bWVzc2FnZSBmb3JLZXk6QCJtZXNzYWdlIl07
Cit9CisKKy0gKE5TU3RyaW5nICopbWVzc2FnZQoreworICAgIHJldHVybiBbc3VwZXIgc3RyaW5n
Rm9yS2V5OkAibWVzc2FnZSJdOworfQorCistICh2b2lkKXNldENvZGU6KGludCljb2RlCit7Cisg
ICAgW3N1cGVyIHNldEludGVnZXI6Y29kZSBmb3JLZXk6QCJjb2RlIl07Cit9CisKKy0gKGludClj
b2RlCit7CisgICAgcmV0dXJuIFtzdXBlciBpbnRlZ2VyRm9yS2V5OkAiY29kZSJdOworfQorCitA
ZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2Rl
ZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RlZmluaXRpb25zLXdpdGgt
bWFjLXBsYXRmb3JtLmpzb24tcmVzdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwLi4yMTdkMDQ3YjdhOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kZWZpbml0aW9ucy13aXRoLW1h
Yy1wbGF0Zm9ybS5qc29uLXJlc3VsdApAQCAtMCwwICsxLDEyMjggQEAKKyMjIyBCZWdpbiBGaWxl
OiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKy8vIE5ldHdvcmsKK0luc3BlY3RvckJhY2tl
bmQucmVnaXN0ZXJEb21haW4oIk5ldHdvcmsiLCBudWxsKTsKKyNpZiBQTEFURk9STShNQUMpCitJ
bnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiTmV0d29yay5sb2FkUmVzb3VyY2UiLCBu
dWxsLCBbXSwgW10pOworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKKyNpZiBQTEFURk9STShNQUMp
CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnQoIk5ldHdvcmsucmVzb3VyY2VMb2FkZWQi
LCBudWxsLCBbXSk7CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorSW5zcGVjdG9yQmFja2VuZC5y
ZWdpc3Rlck5ldHdvcmtEaXNwYXRjaGVyID0gSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRpc3Bh
dGNoZXIuYmluZChJbnNwZWN0b3JCYWNrZW5kLCAiTmV0d29yayIpOworSW5zcGVjdG9yQmFja2Vu
ZC5hY3RpdmF0ZURvbWFpbigiTmV0d29yayIsIG51bGwpOworIyMjIEVuZCBGaWxlOiBJbnNwZWN0
b3JCYWNrZW5kQ29tbWFuZHMuanMKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmlu
aXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorCituYW1l
c3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewor
cHVibGljOgorICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNw
YXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlz
cGF0Y2hlcik7IH0KKyAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBj
b25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Citwcml2YXRlOgorICAg
IFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKK307CisKKwor
Y2xhc3MgQWx0ZXJuYXRlTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5BbHRlcm5hdGVOZXR3
b3JrQmFja2VuZERpc3BhdGNoZXIoKSB7IH0KKyNpZiBQTEFURk9STShNQUMpCisgICAgdmlydHVh
bCB2b2lkIGxvYWRSZXNvdXJjZShsb25nIGNhbGxJZCkgPSAwOworI2VuZGlmIC8vIFBMQVRGT1JN
KE1BQykKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjIyMgRW5kIEZpbGU6IFRlc3RBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmRE
aXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlv
bnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVj
dHMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVj
dG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKKyNpZiBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK2NsYXNzIEFsdGVybmF0ZU5ldHdvcmtCYWNrZW5k
RGlzcGF0Y2hlcjsKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKKworY2xhc3MgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CitwdWJsaWM6
CisjaWYgUExBVEZPUk0oTUFDKQorICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UoRXJyb3JT
dHJpbmcmKSA9IDA7CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorcHJvdGVjdGVkOgorICAgIHZp
cnR1YWwgfk5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKK307CisKK2NsYXNzIE5l
dHdvcmtCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5k
RGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxOZXR3b3JrQmFja2VuZERpc3Bh
dGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIqKTsKKyAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJp
bmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5hbDsKK3ByaXZhdGU6
CisjaWYgUExBVEZPUk0oTUFDKQorICAgIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElk
LCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOworI2VuZGlmIC8vIFBMQVRGT1JN
KE1BQykKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK3B1Ymxp
YzoKKyAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlTmV0d29ya0JhY2tl
bmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hl
ciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KK3ByaXZhdGU6CisgICAgQWx0ZXJuYXRlTmV0d29y
a0JhY2tlbmREaXNwYXRjaGVyKiBtX2FsdGVybmF0ZURpc3BhdGNoZXIgeyBudWxscHRyIH07Cisj
ZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCitwcml2YXRl
OgorICAgIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYsIE5ldHdv
cmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICBOZXR3b3JrQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyKiBtX2FnZW50IHsgbnVsbHB0ciB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVn
aW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFs
dWVzLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCisjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgorI2VuZGlm
IC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCituYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKKworTmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6fk5ldHdvcmtC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KKworUmVmPE5ldHdvcmtCYWNrZW5kRGlzcGF0
Y2hlcj4gTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoQmFja2VuZERpc3BhdGNoZXIm
IGJhY2tlbmREaXNwYXRjaGVyLCBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2Vu
dCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIo
YmFja2VuZERpc3BhdGNoZXIsIGFnZW50KSk7Cit9CisKK05ldHdvcmtCYWNrZW5kRGlzcGF0Y2hl
cjo6TmV0d29ya0JhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlz
cGF0Y2hlciwgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCisgICAgOiBT
dXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKKyAgICAsIG1f
YWdlbnQoYWdlbnQpCit7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRj
aGVyRm9yRG9tYWluKCJOZXR3b3JrIl9zLCB0aGlzKTsKK30KKwordm9pZCBOZXR3b3JrQmFja2Vu
ZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhv
ZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQoreworICAgIFJlZjxOZXR3b3JrQmFja2Vu
ZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOworCisgICAgUmVmUHRyPEpTT046Ok9iamVjdD4g
cGFyYW1ldGVyczsKKyAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFyYW1ldGVy
cyk7CisKKyNpZiBQTEFURk9STShNQUMpCisgICAgaWYgKG1ldGhvZCA9PSAibG9hZFJlc291cmNl
IikgeworICAgICAgICBsb2FkUmVzb3VyY2UocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCisKKyAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRj
aGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrLiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZv
dW5kIik7Cit9CisKKyNpZiBQTEFURk9STShNQUMpCit2b2lkIE5ldHdvcmtCYWNrZW5kRGlzcGF0
Y2hlcjo6bG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYm
KQoreworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorICAgIGlm
IChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVy
LT5sb2FkUmVzb3VyY2UocmVxdWVzdElkKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRp
ZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworICAgIEVycm9y
U3RyaW5nIGVycm9yOworICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVj
dDo6Y3JlYXRlKCk7CisgICAgbV9hZ2VudC0+bG9hZFJlc291cmNlKGVycm9yKTsKKworICAgIGlm
ICghZXJyb3IubGVuZ3RoKCkpCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNw
b25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOworICAgIGVsc2UKKyAgICAg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0
Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKK30KKyNlbmRpZiAvLyBQTEFURk9S
TShNQUMpCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNw
YXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMt
d2l0aC1tYWMtcGxhdGZvcm0uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMu
aCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgRnJvbnRlbmRSb3V0ZXI7
CisKK2NsYXNzIE5ldHdvcmtGcm9udGVuZERpc3BhdGNoZXIgeworICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOworcHVibGljOgorICAgIE5ldHdvcmtGcm9udGVuZERpc3BhdGNoZXIoRnJvbnRl
bmRSb3V0ZXImIGZyb250ZW5kUm91dGVyKSA6IG1fZnJvbnRlbmRSb3V0ZXIoZnJvbnRlbmRSb3V0
ZXIpIHsgfQorI2lmIFBMQVRGT1JNKE1BQykKKyAgICB2b2lkIHJlc291cmNlTG9hZGVkKCk7Cisj
ZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorcHJpdmF0ZToKKyAgICBGcm9udGVuZFJvdXRlciYgbV9m
cm9udGVuZFJvdXRlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBG
aWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJv
bnRlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBk
ZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0
RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25h
bWVzcGFjZSBJbnNwZWN0b3IgeworCisjaWYgUExBVEZPUk0oTUFDKQordm9pZCBOZXR3b3JrRnJv
bnRlbmREaXNwYXRjaGVyOjpyZXNvdXJjZUxvYWRlZCgpCit7CisgICAgUmVmPEpTT046Ok9iamVj
dD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGpzb25NZXNzYWdl
LT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIk5ldHdvcmsucmVzb3VyY2VMb2FkZWQiX3MpOworCisg
ICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygp
KTsKK30KKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgorCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgorLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KKyNpbmNsdWRlIDx3dGYv
QXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK25hbWVzcGFjZSBQ
cm90b2NvbCB7CisKKworCisvLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KK25hbWVzcGFjZSBOZXR3
b3JrIHsKKyNpZiBQTEFURk9STShNQUMpCitjbGFzcyBOZXR3b3JrRXJyb3I7CisjZW5kaWYgLy8g
UExBVEZPUk0oTUFDKQorfSAvLyBOZXR3b3JrCisvLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlv
bnMuCisKKworCisKK25hbWVzcGFjZSBOZXR3b3JrIHsKKyNpZiBQTEFURk9STShNQUMpCitjbGFz
cyBOZXR3b3JrRXJyb3IgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CitwdWJsaWM6CisgICAg
ZW51bSB7CisgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKKyAgICAgICAgTWVzc2FnZVNldCA9IDEg
PDwgMCwKKyAgICAgICAgQ29kZVNldCA9IDEgPDwgMSwKKyAgICAgICAgQWxsRmllbGRzU2V0ID0g
KE1lc3NhZ2VTZXQgfCBDb2RlU2V0KQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+
CisgICAgY2xhc3MgQnVpbGRlciB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPEpTT046
Ok9iamVjdD4gbV9yZXN1bHQ7CisKKyAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8
U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
ICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOworICAgICAg
ICB9CisKKyAgICAgICAgQnVpbGRlcihSZWY8LypOZXR3b3JrRXJyb3IqL0pTT046Ok9iamVjdD4m
JiBvYmplY3QpCisgICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKKyAgICAg
ICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1
aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CisgICAgICAgIH0KKyAgICAgICAgZnJp
ZW5kIGNsYXNzIE5ldHdvcmtFcnJvcjsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgQnVpbGRlcjxT
VEFURSB8IE1lc3NhZ2VTZXQ+JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNZXNzYWdlU2V0KSwg
cHJvcGVydHlfbWVzc2FnZV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
U3RyaW5nKCJtZXNzYWdlIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PE1lc3NhZ2VTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29k
ZVNldD4mIHNldENvZGUoaW50IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxF
X0FTU0VSVCghKFNUQVRFICYgQ29kZVNldCksIHByb3BlcnR5X2NvZGVfYWxyZWFkeV9zZXQpOwor
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldEludGVnZXIoImNvZGUiX3MsIHZhbHVlKTsKKyAgICAg
ICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29kZVNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAg
IFJlZjxOZXR3b3JrRXJyb3I+IHJlbGVhc2UoKQorICAgICAgICB7CisgICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwor
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKE5ldHdvcmtFcnJvcikgPT0gc2l6ZW9m
KEpTT046Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsKKworICAgICAgICAgICAgUmVmPEpTT046Ok9i
amVjdD4ganNvblJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgICAg
ICBhdXRvIHJlc3VsdCA9IFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPE5ldHdvcmtFcnJv
cj4qPigmanNvblJlc3VsdCkpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAg
fQorICAgIH07CisKKyAgICAvKgorICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKKyAgICAg
KiBSZWY8TmV0d29ya0Vycm9yPiByZXN1bHQgPSBOZXR3b3JrRXJyb3I6OmNyZWF0ZSgpCisgICAg
ICogICAgIC5zZXRNZXNzYWdlKC4uLikKKyAgICAgKiAgICAgLnNldENvZGUoLi4uKQorICAgICAq
ICAgICAucmVsZWFzZSgpOworICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0
PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpT
T046Ok9iamVjdDo6Y3JlYXRlKCkpOworICAgIH0KK307CisKKyNlbmRpZiAvLyBQTEFURk9STShN
QUMpCit9IC8vIE5ldHdvcmsKKworCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgK
KworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorCisjaW5jbHVkZSA8d3Rm
L09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworCisKK30gLy8gbmFtZXNwYWNl
IFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbE9iamVjdHMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNr
ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmlu
aXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVy
bmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKwor
QHByb3RvY29sIFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5IYW5kbGVyOworCituYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKKworCitjbGFzcyBPYmpDSW5zcGVjdG9yTmV0d29ya0JhY2tlbmREaXNwYXRj
aGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZU5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlciB7Cisg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgT2JqQ0luc3BlY3Rvck5l
dHdvcmtCYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluSGFuZGxl
cj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQorI2lmIFBMQVRGT1JNKE1BQykK
KyAgICB2b2lkIGxvYWRSZXNvdXJjZShsb25nIHJlcXVlc3RJZCkgZmluYWw7CisjZW5kaWYgLy8g
UExBVEZPUk0oTUFDKQorcHJpdmF0ZToKKyAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sTmV0
d29ya0RvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgK
KworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRm
b3JtLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lt
cG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMu
aCIKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW5jbHVkZSAiVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKwor
bmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3ZvaWQgT2JqQ0luc3BlY3Rvck5ldHdvcmtCYWNrZW5k
RGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkKQoreworICAgIGlmICghI2lm
IFBMQVRGT1JNKE1BQykKK1ttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Io
bG9hZFJlc291cmNlV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildCisjZW5kaWYg
Ly8gUExBVEZPUk0oTUFDKSkgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQ
cm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5k
LCAiJ05ldHdvcmsubG9hZFJlc291cmNlJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgeworICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwg
QmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgfTsKKworI2lmIFBMQVRGT1JN
KE1BQykKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeeworICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBm
YWxzZSk7CisgICAgfTsKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCisjaWYgUExBVEZPUk0oTUFD
KQorCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorI2lmIFBMQVRGT1JNKE1BQykKKyAgICBbbV9k
ZWxlZ2F0ZSBsb2FkUmVzb3VyY2VXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nl
c3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKK30K
KworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENv
bmZpZ3VyYXRpb24uaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRp
b25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgorCitf
X2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0
YWluLCBzZXR0ZXI9c2V0TmV0d29ya0hhbmRsZXI6KSBpZDxUZXN0UHJvdG9jb2xOZXR3b3JrRG9t
YWluSGFuZGxlcj4gbmV0d29ya0hhbmRsZXI7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9u
bHkpIFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5FdmVudERpc3BhdGNoZXIgKm5ldHdvcmtFdmVu
dERpc3BhdGNoZXI7CitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1
cmF0aW9uLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0K
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1w
bGF0Zm9ybS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
KyNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKKworI2ltcG9ydCAiVGVzdFBy
b3RvY29sSW50ZXJuYWwuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVy
cy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQu
aD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxl
ci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERp
c3BhdGNoZXJzLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0
aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3Rv
ckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworICAgIGlkPFRlc3RQcm90b2NvbE5ldHdvcmtEb21h
aW5IYW5kbGVyPiBfbmV0d29ya0hhbmRsZXI7CisgICAgVGVzdFByb3RvY29sTmV0d29ya0RvbWFp
bkV2ZW50RGlzcGF0Y2hlciAqX25ldHdvcmtFdmVudERpc3BhdGNoZXI7Cit9CisKKy0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxl
ciopY29udHJvbGxlcgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxm
KQorICAgICAgICByZXR1cm4gbmlsOworICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBfY29u
dHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVh
bGxvYworeworICAgIFtfbmV0d29ya0hhbmRsZXIgcmVsZWFzZV07CisgICAgW19uZXR3b3JrRXZl
bnREaXNwYXRjaGVyIHJlbGVhc2VdOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAodm9p
ZClzZXROZXR3b3JrSGFuZGxlcjooaWQ8VGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkhhbmRsZXI+
KWhhbmRsZXIKK3sKKyAgICBpZiAoaGFuZGxlciA9PSBfbmV0d29ya0hhbmRsZXIpCisgICAgICAg
IHJldHVybjsKKworICAgIFtfbmV0d29ya0hhbmRsZXIgcmVsZWFzZV07CisgICAgX25ldHdvcmtI
YW5kbGVyID0gW2hhbmRsZXIgcmV0YWluXTsKKworICAgIGF1dG8gYWx0ZXJuYXRlRGlzcGF0Y2hl
ciA9IG1ha2VVbmlxdWU8T2JqQ0luc3BlY3Rvck5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcj4oaGFu
ZGxlcik7CisgICAgYXV0byBhbHRlcm5hdGVBZ2VudCA9IG1ha2VVbmlxdWU8QWx0ZXJuYXRlRGlz
cGF0Y2hhYmxlQWdlbnQ8TmV0d29ya0JhY2tlbmREaXNwYXRjaGVyLCBBbHRlcm5hdGVOZXR3b3Jr
QmFja2VuZERpc3BhdGNoZXI+PigiTmV0d29yayJfcywgKl9jb250cm9sbGVyLCBXVEZNb3ZlKGFs
dGVybmF0ZURpc3BhdGNoZXIpKTsKKyAgICBfY29udHJvbGxlci0+YXBwZW5kRXh0cmFBZ2VudChX
VEZNb3ZlKGFsdGVybmF0ZUFnZW50KSk7Cit9CisKKy0gKGlkPFRlc3RQcm90b2NvbE5ldHdvcmtE
b21haW5IYW5kbGVyPiluZXR3b3JrSGFuZGxlcgoreworICAgIHJldHVybiBfbmV0d29ya0hhbmRs
ZXI7Cit9CisKKy0gKFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5FdmVudERpc3BhdGNoZXIgKilu
ZXR3b3JrRXZlbnREaXNwYXRjaGVyCit7CisgICAgaWYgKCFfbmV0d29ya0V2ZW50RGlzcGF0Y2hl
cikKKyAgICAgICAgX25ldHdvcmtFdmVudERpc3BhdGNoZXIgPSBbW1Rlc3RQcm90b2NvbE5ldHdv
cmtEb21haW5FdmVudERpc3BhdGNoZXIgYWxsb2NdIGluaXRXaXRoQ29udHJvbGxlcjpfY29udHJv
bGxlcl07CisgICAgcmV0dXJuIF9uZXR3b3JrRXZlbnREaXNwYXRjaGVyOworfQorCitAZW5kCisK
KworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJv
dG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMu
aCIKKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0
b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluRXZlbnREaXNw
YXRjaGVyCit7CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxl
cjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJ
bnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0
XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNvbnRy
b2xsZXIpOworICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKKyAgICByZXR1cm4gc2VsZjsK
K30KKworLSAodm9pZClyZXNvdXJjZUxvYWRlZAoreworICAgIGNvbnN0IEZyb250ZW5kUm91dGVy
JiByb3V0ZXIgPSBfY29udHJvbGxlci0+ZnJvbnRlbmRSb3V0ZXIoKTsKKworICAgIFJlZjxKU09O
OjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBqc29u
TWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJOZXR3b3JrLnJlc291cmNlTG9hZGVkIl9z
KTsKKyAgICByb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cit9
CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMu
bW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxGb3VuZGF0aW9u
L0ZvdW5kYXRpb24uaD4KKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9i
amVjdC5oPgorCisKKyNpZiBQTEFURk9STShNQUMpCitAY2xhc3MgVGVzdFByb3RvY29sTmV0d29y
a0Vycm9yOworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKKworCisKKworI2lmIFBMQVRGT1JNKE1B
QykKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBU
ZXN0UHJvdG9jb2xOZXR3b3JrRXJyb3IgOiBSV0lQcm90b2NvbEpTT05PYmplY3QKKy0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilw
YXlsb2FkOworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3Rv
Y29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhNZXNz
YWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZTooaW50KWNvZGU7CisvKiByZXF1aXJlZCAqLyBA
cHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKm1lc3NhZ2U7CisvKiByZXF1aXJl
ZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQgY29kZTsKK0BlbmQKKyNlbmRp
ZiAvLyBQTEFURk9STShNQUMpCisKK0Bwcm90b2NvbCBUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWlu
SGFuZGxlciA8TlNPYmplY3Q+CitAb3B0aW9uYWwKKyNpZiBQTEFURk9STShNQUMpCistICh2b2lk
KWxvYWRSZXNvdXJjZVdpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikp
ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikodm9pZCkpc3VjY2Vzc0NhbGxi
YWNrOworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKK0BlbmQKKworX19hdHRyaWJ1dGVfXygodmlz
aWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbE5ldHdvcmtEb21h
aW5FdmVudERpc3BhdGNoZXIgOiBOU09iamVjdAorLSAodm9pZClyZXNvdXJjZUxvYWRlZDsKK0Bl
bmQKKworCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxp
dHlPYmplY3RzLmg+CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgor
I2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKKyNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8d3Rm
L0pTT05WYWx1ZXMuaD4KKworQGludGVyZmFjZSBUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluRXZl
bnREaXNwYXRjaGVyIChQcml2YXRlKQorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxl
cjooSW5zcGVjdG9yOjpBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXI7
CitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFBy
b3RvY29sLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNp
b25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpD
RW51bVR5cGU+CitPcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25z
dCBTdHJpbmcmIHZhbHVlKTsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisKKyMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCisvLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucy5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRl
c3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2Nv
bEpTT05PYmplY3RQcml2YXRlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0Bp
bnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChOZXR3b3JrRG9tYWluKQorCisj
aWYgUExBVEZPUk0oTUFDKQorKyAodm9pZClfcGFyc2VOZXR3b3JrRXJyb3I6KFRlc3RQcm90b2Nv
bE5ldHdvcmtFcnJvciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKyNlbmRp
ZiAvLyBQTEFURk9STShNQUMpCisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucyAoTmV0d29ya0RvbWFpbikKKworI2lmIFBMQVRGT1JNKE1BQykKKysg
KHZvaWQpX3BhcnNlTmV0d29ya0Vycm9yOihUZXN0UHJvdG9jb2xOZXR3b3JrRXJyb3IgKiopb3V0
VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9S
X0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUg
PSBbW1Rlc3RQcm90b2NvbE5ldHdvcmtFcnJvciBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxv
YWRdOworfQorI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKKworQGVuZAorCisKKyMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xUeXBlcy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmlu
aXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2lt
cG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0
b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorI2ltcG9ydCA8d3RmL0Fzc2VydGlv
bnMuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNw
ZWN0b3I7CisKKworI2lmIFBMQVRGT1JNKE1BQykKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9j
b2xOZXR3b3JrRXJyb3IKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVs
bCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZAoreworICAgIGlmICghKHNl
bGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AibWVzc2FnZSJdLCBAIm1lc3Nh
Z2UiKTsKKyAgICBzZWxmLm1lc3NhZ2UgPSBwYXlsb2FkW0AibWVzc2FnZSJdOworCisgICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiY29kZSJdLCBAImNv
ZGUiKTsKKyAgICBzZWxmLmNvZGUgPSBbcGF5bG9hZFtAImNvZGUiXSBpbnRlZ2VyVmFsdWVdOwor
CisgICAgcmV0dXJuIHNlbGY7Cit9CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9i
amVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopb2JqZWN0Cit7CisgICAgaWYgKCEoc2VsZiA9
IFtzdXBlciBpbml0V2l0aEpTT05PYmplY3Q6W29iamVjdCB0b0pTT05PYmplY3RdLmdldCgpXSkp
CisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlIGNvZGU6KGludCljb2Rl
Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7
CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKG1lc3NhZ2UsIEAi
bWVzc2FnZSIpOworCisgICAgc2VsZi5tZXNzYWdlID0gbWVzc2FnZTsKKyAgICBzZWxmLmNvZGUg
PSBjb2RlOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpc2V0TWVzc2FnZTooTlNT
dHJpbmcgKiltZXNzYWdlCit7CisgICAgW3N1cGVyIHNldFN0cmluZzptZXNzYWdlIGZvcktleTpA
Im1lc3NhZ2UiXTsKK30KKworLSAoTlNTdHJpbmcgKiltZXNzYWdlCit7CisgICAgcmV0dXJuIFtz
dXBlciBzdHJpbmdGb3JLZXk6QCJtZXNzYWdlIl07Cit9CisKKy0gKHZvaWQpc2V0Q29kZTooaW50
KWNvZGUKK3sKKyAgICBbc3VwZXIgc2V0SW50ZWdlcjpjb2RlIGZvcktleTpAImNvZGUiXTsKK30K
KworLSAoaW50KWNvZGUKK3sKKyAgICByZXR1cm4gW3N1cGVyIGludGVnZXJGb3JLZXk6QCJjb2Rl
Il07Cit9CisKK0BlbmQKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCisKKworIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMu
anNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZXhwZWN0ZWQvZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uLXJlc3VsdApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNjRlYzViOTA4MTgKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uLXJlc3VsdApAQCAtMCwwICsxLDEwMzAgQEAK
KyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworLy8gRG9tYWluCitJbnNwZWN0
b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJEb21haW4iLCBudWxsKTsKK0luc3BlY3RvckJhY2tl
bmQucmVnaXN0ZXJDb21tYW5kKCJEb21haW4uQ29tbWFuZCIsIG51bGwsIFtdLCBbXSk7CitJbnNw
ZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnQoIkRvbWFpbi5FdmVudCIsIG51bGwsIFtdKTsKK0lu
c3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW5EaXNwYXRjaGVyID0gSW5zcGVjdG9yQmFja2Vu
ZC5yZWdpc3RlckRpc3BhdGNoZXIuYmluZChJbnNwZWN0b3JCYWNrZW5kLCAiRG9tYWluIik7CitJ
bnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJEb21haW4iLCBbIndlYi1wYWdlIl0pOwor
IyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKKworIyMjIEJlZ2luIEZp
bGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbgorLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCisjaW5jbHVkZSAiVGVzdFByb3Rv
Y29sVHlwZXMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlci5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91
dGVyLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBBbHRlcm5hdGVCYWNrZW5k
RGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQ
dHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVy
ID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQorICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5k
RGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0K
K3ByaXZhdGU6CisgICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRj
aGVyOworfTsKKworCitjbGFzcyBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciA6IHB1
YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+
QWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
Q29tbWFuZChsb25nIGNhbGxJZCkgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
CisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyMj
IyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0
UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCisjaWYg
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCitjbGFzcyBBbHRlcm5hdGVE
b21haW5CYWNrZW5kRGlzcGF0Y2hlcjsKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVS
TkFURV9ESVNQQVRDSEVSUykKKworY2xhc3MgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChFcnJvclN0cmluZyYpID0gMDsK
K3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5Eb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIo
KTsKK307CisKK2NsYXNzIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1
cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPERv
bWFpbkJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBEb21haW5C
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVz
dElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBm
aW5hbDsKK3ByaXZhdGU6CisgICAgdm9pZCBDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8
SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQorcHVibGljOgorICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0Y2hl
cihBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikg
eyBtX2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9Citwcml2YXRl
OgorICAgIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKiBtX2FsdGVybmF0ZURpc3Bh
dGNoZXIgeyBudWxscHRyIH07CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCitwcml2YXRlOgorICAgIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKEJhY2tl
bmREaXNwYXRjaGVyJiwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgRG9t
YWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50IHsgbnVsbHB0ciB9OworfTsKKwor
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0
Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJsZVR5cGVzLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8
d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKKyNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJz
LmgiCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisK
K25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6
On5Eb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KKworUmVmPERvbWFpbkJhY2tl
bmREaXNwYXRjaGVyPiBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEJhY2tlbmREaXNw
YXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
KiBhZ2VudCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEb21haW5CYWNrZW5kRGlzcGF0
Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKK30KKworRG9tYWluQmFja2VuZERpc3Bh
dGNoZXI6OkRvbWFpbkJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5k
RGlzcGF0Y2hlciwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKKyAgICA6
IFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQorICAgICwg
bV9hZ2VudChhZ2VudCkKK3sKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3Bh
dGNoZXJGb3JEb21haW4oIkRvbWFpbiJfcywgdGhpcyk7Cit9CisKK3ZvaWQgRG9tYWluQmFja2Vu
ZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhv
ZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQoreworICAgIFJlZjxEb21haW5CYWNrZW5k
RGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CisKKyAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBw
YXJhbWV0ZXJzOworICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJz
KTsKKworICAgIGlmIChtZXRob2QgPT0gIkNvbW1hbmQiKSB7CisgICAgICAgIENvbW1hbmQocmVx
dWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3Bh
dGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBm
b3VuZCIpOworfQorCit2b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcg
cmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQoreworI2lmIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIp
IHsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5Db21tYW5kKHJlcXVlc3RJZCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCisKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWY8SlNPTjo6
T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYWdlbnQtPkNv
bW1hbmQoZXJyb3IpOworCisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKKyAgICAgICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBm
YWxzZSk7CisgICAgZWxzZQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90
b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikp
OworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0QmFj
a2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0
Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dh
YmxlVHlwZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNs
dWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgor
CituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgRnJvbnRlbmRSb3V0ZXI7CisKK2NsYXNz
IERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CitwdWJsaWM6CisgICAgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVyKEZyb250ZW5kUm91dGVyJiBm
cm9udGVuZFJvdXRlcikgOiBtX2Zyb250ZW5kUm91dGVyKGZyb250ZW5kUm91dGVyKSB7IH0KKyAg
ICB2b2lkIEV2ZW50KCk7Citwcml2YXRlOgorICAgIEZyb250ZW5kUm91dGVyJiBtX2Zyb250ZW5k
Um91dGVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRl
c3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERp
c3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1k
ZWJ1Z2dhYmxlVHlwZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0
Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91
dGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVj
dG9yIHsKKwordm9pZCBEb21haW5Gcm9udGVuZERpc3BhdGNoZXI6OkV2ZW50KCkKK3sKKyAgICBS
ZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Cisg
ICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9zKTsK
KworICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJp
bmcoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRl
c3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
T2JqZWN0cy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLWRlYnVn
Z2FibGVUeXBlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJv
dG9jb2xUeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBJ
bnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworCisKKworCisKKworCisK
K30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbE9iamVjdHMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9t
YWluLWRlYnVnZ2FibGVUeXBlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xP
YmplY3RzLmgiCisKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCituYW1lc3BhY2UgUHJvdG9j
b2wgeworCisKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbmNsdWRlIDx3
dGYvUmV0YWluUHRyLmg+CisKK0Bwcm90b2NvbCBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5k
bGVyOworCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCitjbGFzcyBPYmpDSW5zcGVjdG9yRG9t
YWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJuYXRlRG9tYWluQmFja2Vu
ZERpc3BhdGNoZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAg
IE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xEb21h
aW5Eb21haW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9CisgICAg
dm9pZCBDb21tYW5kKGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKK3ByaXZhdGU6CisgICAgUmV0YWlu
UHRyPGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOworfTsK
KworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tl
bmREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFp
bi1kZWJ1Z2dhYmxlVHlwZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tl
bmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNp
bmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbmNsdWRlIDx3dGYvSlNP
TlZhbHVlcy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordm9pZCBPYmpDSW5zcGVjdG9y
RG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9uZyByZXF1ZXN0SWQpCit7CisgICAg
aWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKENvbW1hbmRXaXRo
RXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsKKyAgICAgICAgYmFja2VuZERpc3Bh
dGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVy
OjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uQ29tbWFuZCcgd2FzIG5vdCBmb3VuZCJfcyk7Cisg
ICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJy
b3IpIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihy
ZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAg
ICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgIH07CisKKyAg
ICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5z
ZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7Cisg
ICAgfTsKKworICAgIFttX2RlbGVnYXRlIENvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazplcnJvckNh
bGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOworfQorCisKK30gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNw
YXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5o
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLWRlYnVnZ2FibGVUeXBl
cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBv
cnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KKworX19hdHRyaWJ1dGVfXygodmlzaWJp
bGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24g
OiBOU09iamVjdAorQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNldERvbWFp
bkhhbmRsZXI6KSBpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiBkb21haW5IYW5k
bGVyOworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBUZXN0UHJvdG9jb2xEb21haW5E
b21haW5FdmVudERpc3BhdGNoZXIgKmRvbWFpbkV2ZW50RGlzcGF0Y2hlcjsKK0BlbmQKKworCisj
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorCisjIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0
aW9uLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW1wb3J0ICJUZXN0
UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0Fs
dGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdt
ZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJ
bnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCit7
CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKKyAgICBp
ZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiBfZG9tYWluSGFuZGxlcjsKKyAgICBU
ZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKl9kb21haW5FdmVudERpc3Bh
dGNoZXI7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRh
YmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgoreworICAgIHNlbGYgPSBbc3VwZXIg
aW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIEFTU0VSVChj
b250cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAgcmV0dXJuIHNl
bGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIFtfZG9tYWluSGFuZGxlciByZWxlYXNl
XTsKKyAgICBbX2RvbWFpbkV2ZW50RGlzcGF0Y2hlciByZWxlYXNlXTsKKyAgICBbc3VwZXIgZGVh
bGxvY107Cit9CisKKy0gKHZvaWQpc2V0RG9tYWluSGFuZGxlcjooaWQ8VGVzdFByb3RvY29sRG9t
YWluRG9tYWluSGFuZGxlcj4paGFuZGxlcgoreworICAgIGlmIChoYW5kbGVyID09IF9kb21haW5I
YW5kbGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBbX2RvbWFpbkhhbmRsZXIgcmVsZWFzZV07
CisgICAgX2RvbWFpbkhhbmRsZXIgPSBbaGFuZGxlciByZXRhaW5dOworCisgICAgYXV0byBhbHRl
cm5hdGVEaXNwYXRjaGVyID0gbWFrZVVuaXF1ZTxPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERp
c3BhdGNoZXI+KGhhbmRsZXIpOworICAgIGF1dG8gYWx0ZXJuYXRlQWdlbnQgPSBtYWtlVW5pcXVl
PEFsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50PERvbWFpbkJhY2tlbmREaXNwYXRjaGVyLCBBbHRl
cm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4+KCJEb21haW4iX3MsICpfY29udHJvbGxlciwg
V1RGTW92ZShhbHRlcm5hdGVEaXNwYXRjaGVyKSk7CisgICAgX2NvbnRyb2xsZXItPmFwcGVuZEV4
dHJhQWdlbnQoV1RGTW92ZShhbHRlcm5hdGVBZ2VudCkpOworfQorCistIChpZDxUZXN0UHJvdG9j
b2xEb21haW5Eb21haW5IYW5kbGVyPilkb21haW5IYW5kbGVyCit7CisgICAgcmV0dXJuIF9kb21h
aW5IYW5kbGVyOworfQorCistIChUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNo
ZXIgKilkb21haW5FdmVudERpc3BhdGNoZXIKK3sKKyAgICBpZiAoIV9kb21haW5FdmVudERpc3Bh
dGNoZXIpCisgICAgICAgIF9kb21haW5FdmVudERpc3BhdGNoZXIgPSBbW1Rlc3RQcm90b2NvbERv
bWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciBhbGxvY10gaW5pdFdpdGhDb250cm9sbGVyOl9jb250
cm9sbGVyXTsKKyAgICByZXR1cm4gX2RvbWFpbkV2ZW50RGlzcGF0Y2hlcjsKK30KKworQGVuZAor
CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorCisjIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJ
bnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNp
bXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisK
K0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIK
K3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworfQor
CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3Rv
ckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAg
IGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7
CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQorCist
ICh2b2lkKUV2ZW50Cit7CisgICAgY29uc3QgRnJvbnRlbmRSb3V0ZXImIHJvdXRlciA9IF9jb250
cm9sbGVyLT5mcm9udGVuZFJvdXRlcigpOworCisgICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1l
c3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGpzb25NZXNzYWdlLT5zZXRTdHJp
bmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7CisgICAgcm91dGVyLnNlbmRFdmVudChq
c29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2wuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1
Z2dhYmxlVHlwZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKworI2ltcG9ydCA8V2ViSW5z
cGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgorCisKKworCisKKworCisKK0Bwcm90b2Nv
bCBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyIDxOU09iamVjdD4KK0BvcHRpb25hbAor
LSAodm9pZClDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9y
KSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKSh2b2lkKSlzdWNjZXNzQ2Fs
bGJhY2s7CitAZW5kCisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQor
QGludGVyZmFjZSBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgOiBOU09i
amVjdAorLSAodm9pZClFdmVudDsKK0BlbmQKKworCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJ
UHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+CisKKyMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJsZVR5cGVzLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAi
VGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5o
IgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVy
Lmg+CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCitAaW50ZXJmYWNlIFRlc3RQcm90b2Nv
bERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAoUHJpdmF0ZSkKKy0gKGluc3RhbmNldHlwZSlp
bml0V2l0aENvbnRyb2xsZXI6KEluc3BlY3Rvcjo6QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9s
bGVyKiljb250cm9sbGVyOworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50
ZXJuYWwuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJsZVR5cGVz
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9y
dCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJh
eUNvbnZlcnNpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBPYmpDRW51bVR5cGU+CitPcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0
cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisK
KyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbgorLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0
UHJvdG9jb2xUeXBlUGFyc2VyLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xK
U09OT2JqZWN0UHJpdmF0ZS5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisKKwor
CisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFs
LmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8
V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKyNpbXBvcnQgPHd0
Zi9Bc3NlcnRpb25zLmg+CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1l
c3BhY2UgSW5zcGVjdG9yOworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9leHBlY3RlZC9kb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5
cGUuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2Fi
bGVUeXBlLmpzb24tcmVzdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
Li5lY2M3MjFjNTI4ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW4tdGFyZ2V0VHlwZS1tYXRjaGlu
Zy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1yZXN1bHQKQEAgLTAsMCArMSwxMDMwIEBACisj
IyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRl
YnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworLy8gRG9tYWluCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJEb21haW4i
LCBudWxsKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJEb21haW4uQ29tbWFu
ZCIsIFsicGFnZSIsICJ3b3JrZXIiXSwgW10sIFtdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0
ZXJFdmVudCgiRG9tYWluLkV2ZW50IiwgbnVsbCwgW10pOworSW5zcGVjdG9yQmFja2VuZC5yZWdp
c3RlckRvbWFpbkRpc3BhdGNoZXIgPSBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRGlzcGF0Y2hl
ci5iaW5kKEluc3BlY3RvckJhY2tlbmQsICJEb21haW4iKTsKK0luc3BlY3RvckJhY2tlbmQuYWN0
aXZhdGVEb21haW4oIkRvbWFpbiIsIFsicGFnZSJdKTsKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9y
QmFja2VuZENvbW1hbmRzLmpzCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2Vu
ZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4t
dGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2lmIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCisjaW5jbHVkZSAiVGVzdFBy
b3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5k
Um91dGVyLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihS
ZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRj
aGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQorICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNr
ZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7
IH0KK3ByaXZhdGU6CisgICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNw
YXRjaGVyOworfTsKKworCitjbGFzcyBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciA6
IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdmlydHVh
bCB+QWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIoKSB7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgQ29tbWFuZChsb25nIGNhbGxJZCkgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
KyMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJs
ZVR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRl
ZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKK2NsYXNzIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyOworI2Vu
ZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCitjbGFzcyBE
b21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9p
ZCBDb21tYW5kKEVycm9yU3RyaW5nJikgPSAwOworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgfkRv
bWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOworfTsKKworY2xhc3MgRG9tYWluQmFja2Vu
ZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIg
eworcHVibGljOgorICAgIHN0YXRpYyBSZWY8RG9tYWluQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0
ZShCYWNrZW5kRGlzcGF0Y2hlciYsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwor
ICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBS
ZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOworcHJpdmF0ZToKKyAgICB2b2lkIENv
bW1hbmQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7
CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCitwdWJsaWM6Cisg
ICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNw
YXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFs
dGVybmF0ZURpc3BhdGNoZXI7IH0KK3ByaXZhdGU6CisgICAgQWx0ZXJuYXRlRG9tYWluQmFja2Vu
ZERpc3BhdGNoZXIqIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciB7IG51bGxwdHIgfTsKKyNlbmRpZiAv
LyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK3ByaXZhdGU6CisgICAg
RG9tYWluQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImLCBEb21haW5CYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIq
IG1fYWdlbnQgeyBudWxscHRyIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMj
IyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBU
ZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0
Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCisjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5o
IgorI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCitu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKKworRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+
RG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9CisKK1JlZjxEb21haW5CYWNrZW5k
RGlzcGF0Y2hlcj4gRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShCYWNrZW5kRGlzcGF0
Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciog
YWdlbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRG9tYWluQmFja2VuZERpc3BhdGNo
ZXIoYmFja2VuZERpc3BhdGNoZXIsIGFnZW50KSk7Cit9CisKK0RvbWFpbkJhY2tlbmREaXNwYXRj
aGVyOjpEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERp
c3BhdGNoZXIsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCisgICAgOiBT
dXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKKyAgICAsIG1f
YWdlbnQoYWdlbnQpCit7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRj
aGVyRm9yRG9tYWluKCJEb21haW4iX3MsIHRoaXMpOworfQorCit2b2lkIERvbWFpbkJhY2tlbmRE
aXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2Qs
IFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKK3sKKyAgICBSZWY8RG9tYWluQmFja2VuZERp
c3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOworCisgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFy
YW1ldGVyczsKKyAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFyYW1ldGVycyk7
CisKKyAgICBpZiAobWV0aG9kID09ICJDb21tYW5kIikgeworICAgICAgICBDb21tYW5kKHJlcXVl
c3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRj
aGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uIiArIG1ldGhvZCArICInIHdhcyBub3QgZm91
bmQiKTsKK30KKwordm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJl
cXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKK3sKKyNpZiBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7
CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+Q29tbWFuZChyZXF1ZXN0SWQpOworICAg
ICAgICByZXR1cm47CisgICAgfQorI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQorCisgICAgRXJyb3JTdHJpbmcgZXJyb3I7CisgICAgUmVmPEpTT046Ok9i
amVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBtX2FnZW50LT5Db21t
YW5kKGVycm9yKTsKKworICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCisgICAgICAgIG1fYmFja2Vu
ZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFs
c2UpOworICAgIGVsc2UKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9j
b2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tl
bmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNo
ZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlw
ZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3Mg
RnJvbnRlbmRSb3V0ZXI7CisKK2NsYXNzIERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlciB7CisgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgRG9tYWluRnJvbnRlbmREaXNw
YXRjaGVyKEZyb250ZW5kUm91dGVyJiBmcm9udGVuZFJvdXRlcikgOiBtX2Zyb250ZW5kUm91dGVy
KGZyb250ZW5kUm91dGVyKSB7IH0KKyAgICB2b2lkIEV2ZW50KCk7Citwcml2YXRlOgorICAgIEZy
b250ZW5kUm91dGVyJiBtX2Zyb250ZW5kUm91dGVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dh
YmxlVHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5o
IgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Igewor
Cit2b2lkIERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcjo6RXZlbnQoKQoreworICAgIFJlZjxKU09O
OjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBqc29u
TWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOworCisgICAg
bV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250
ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3Rz
LmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZS1t
YXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9u
cy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK25hbWVzcGFjZSBQcm90b2NvbCB7
CisKKworCisKKworCisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisKKyMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dh
YmxlVHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisK
KyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCituYW1lc3BhY2UgUHJvdG9jb2wgeworCisKKwor
fSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBl
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5o
PgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworQHByb3RvY29sIFRlc3RQcm90b2NvbERv
bWFpbkRvbWFpbkhhbmRsZXI7CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKK2NsYXNzIE9i
akNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5h
dGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CitwdWJsaWM6CisgICAgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyKGlkPFRl
c3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhh
bmRsZXI7IH0KKyAgICB2b2lkIENvbW1hbmQobG9uZyByZXF1ZXN0SWQpIGZpbmFsOworcHJpdmF0
ZToKKyAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4+IG1f
ZGVsZWdhdGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBl
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9y
dCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIK
KworI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW5jbHVkZSAiVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKK3ZvaWQgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNw
YXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElkKQoreworICAgIGlmICghW21fZGVsZWdhdGUg
cmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6c3Vj
Y2Vzc0NhbGxiYWNrOildKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFBy
b3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQs
ICInRG9tYWluLkNvbW1hbmQnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7CisgICAgICAgIGJh
Y2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5k
RGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICB9OworCisgICAgaWQgc3VjY2Vzc0NhbGxi
YWNrID0gXnsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVl
c3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2UpOworICAgIH07CisKKyAgICBbbV9k
ZWxlZ2F0ZSBDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2Fs
bGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKK30KKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
KworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1
Z2dhYmxlVHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KKworX19hdHRyaWJ1dGVf
XygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZp
Z3VyYXRpb24gOiBOU09iamVjdAorQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVy
PXNldERvbWFpbkhhbmRsZXI6KSBpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiBk
b21haW5IYW5kbGVyOworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBUZXN0UHJvdG9j
b2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKmRvbWFpbkV2ZW50RGlzcGF0Y2hlcjsKK0Bl
bmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorCisjIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1
Z2dhYmxlVHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKKworI2ltcG9ydCAiVGVz
dFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRj
aGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdl
bnQuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJv
bGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2Vu
ZERpc3BhdGNoZXJzLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVu
dGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KK3sKKyAgICBBdWdtZW50YWJsZUluc3Bl
Y3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworICAgIGlkPFRlc3RQcm90b2NvbERvbWFpbkRv
bWFpbkhhbmRsZXI+IF9kb21haW5IYW5kbGVyOworICAgIFRlc3RQcm90b2NvbERvbWFpbkRvbWFp
bkV2ZW50RGlzcGF0Y2hlciAqX2RvbWFpbkV2ZW50RGlzcGF0Y2hlcjsKK30KKworLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVy
Kiljb250cm9sbGVyCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYp
CisgICAgICAgIHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250
cm9sbGVyID0gY29udHJvbGxlcjsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFs
bG9jCit7CisgICAgW19kb21haW5IYW5kbGVyIHJlbGVhc2VdOworICAgIFtfZG9tYWluRXZlbnRE
aXNwYXRjaGVyIHJlbGVhc2VdOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAodm9pZClz
ZXREb21haW5IYW5kbGVyOihpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiloYW5k
bGVyCit7CisgICAgaWYgKGhhbmRsZXIgPT0gX2RvbWFpbkhhbmRsZXIpCisgICAgICAgIHJldHVy
bjsKKworICAgIFtfZG9tYWluSGFuZGxlciByZWxlYXNlXTsKKyAgICBfZG9tYWluSGFuZGxlciA9
IFtoYW5kbGVyIHJldGFpbl07CisKKyAgICBhdXRvIGFsdGVybmF0ZURpc3BhdGNoZXIgPSBtYWtl
VW5pcXVlPE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7Cisg
ICAgYXV0byBhbHRlcm5hdGVBZ2VudCA9IG1ha2VVbmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxl
QWdlbnQ8RG9tYWluQmFja2VuZERpc3BhdGNoZXIsIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNw
YXRjaGVyPj4oIkRvbWFpbiJfcywgKl9jb250cm9sbGVyLCBXVEZNb3ZlKGFsdGVybmF0ZURpc3Bh
dGNoZXIpKTsKKyAgICBfY29udHJvbGxlci0+YXBwZW5kRXh0cmFBZ2VudChXVEZNb3ZlKGFsdGVy
bmF0ZUFnZW50KSk7Cit9CisKKy0gKGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+
KWRvbWFpbkhhbmRsZXIKK3sKKyAgICByZXR1cm4gX2RvbWFpbkhhbmRsZXI7Cit9CisKKy0gKFRl
c3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqKWRvbWFpbkV2ZW50RGlzcGF0
Y2hlcgoreworICAgIGlmICghX2RvbWFpbkV2ZW50RGlzcGF0Y2hlcikKKyAgICAgICAgX2RvbWFp
bkV2ZW50RGlzcGF0Y2hlciA9IFtbVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRj
aGVyIGFsbG9jXSBpbml0V2l0aENvbnRyb2xsZXI6X2NvbnRyb2xsZXJdOworICAgIHJldHVybiBf
ZG9tYWluRXZlbnREaXNwYXRjaGVyOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xF
dmVudERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9t
YWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgi
CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9y
OworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRj
aGVyCit7CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsK
K30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNw
ZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsK
KyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNvbnRyb2xs
ZXIpOworICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKKyAgICByZXR1cm4gc2VsZjsKK30K
KworLSAodm9pZClFdmVudAoreworICAgIGNvbnN0IEZyb250ZW5kUm91dGVyJiByb3V0ZXIgPSBf
Y29udHJvbGxlci0+ZnJvbnRlbmRSb3V0ZXIoKTsKKworICAgIFJlZjxKU09OOjpPYmplY3Q+IGpz
b25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0
U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOworICAgIHJvdXRlci5zZW5kRXZl
bnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKK30KKworQGVuZAorCisKKyMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4t
dGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxGb3VuZGF0aW9uL0Zv
dW5kYXRpb24uaD4KKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVj
dC5oPgorCisKKworCisKKworCisKK0Bwcm90b2NvbCBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5I
YW5kbGVyIDxOU09iamVjdD4KK0BvcHRpb25hbAorLSAodm9pZClDb21tYW5kV2l0aEVycm9yQ2Fs
bGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxs
YmFjazoodm9pZCheKSh2b2lkKSlzdWNjZXNzQ2FsbGJhY2s7CitAZW5kCisKK19fYXR0cmlidXRl
X18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xEb21h
aW5Eb21haW5FdmVudERpc3BhdGNoZXIgOiBOU09iamVjdAorLSAodm9pZClFdmVudDsKK0BlbmQK
KworCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlP
YmplY3RzLmg+CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKKworIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBkb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJU
ZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgi
CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIu
aD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29s
RG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyIChQcml2YXRlKQorLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoQ29udHJvbGxlcjooSW5zcGVjdG9yOjpBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xs
ZXIqKWNvbnRyb2xsZXI7CitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRl
cm5hbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlLW1hdGNo
aW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCA8V2Vi
SW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgorCituYW1lc3BhY2UgSW5z
cGVjdG9yIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgorT3B0aW9uYWw8T2Jq
Q0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7CisKK30g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlw
ZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9j
b2xUeXBlUGFyc2VyLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2Jq
ZWN0UHJpdmF0ZS5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisKKworCisKKwor
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAi
VGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJp
dmF0ZS5oPgorI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFs
dWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RvbWFpbi10YXJnZXRUeXBlcy5qc29uLXJl
c3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC9kb21haW4tdGFyZ2V0VHlwZXMuanNvbi1yZXN1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAuLjgwNDFjMjdjMWJlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RvbWFpbi10
YXJnZXRUeXBlcy5qc29uLXJlc3VsdApAQCAtMCwwICsxLDEwMzAgQEAKKyMjIyBCZWdpbiBGaWxl
OiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisvLyBEb21haW4KK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJE
b21haW4oIkRvbWFpbiIsIFsicGFnZSJdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21t
YW5kKCJEb21haW4uQ29tbWFuZCIsIFsicGFnZSJdLCBbXSwgW10pOworSW5zcGVjdG9yQmFja2Vu
ZC5yZWdpc3RlckV2ZW50KCJEb21haW4uRXZlbnQiLCBbInBhZ2UiXSwgW10pOworSW5zcGVjdG9y
QmFja2VuZC5yZWdpc3RlckRvbWFpbkRpc3BhdGNoZXIgPSBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lz
dGVyRGlzcGF0Y2hlci5iaW5kKEluc3BlY3RvckJhY2tlbmQsICJEb21haW4iKTsKK0luc3BlY3Rv
ckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkRvbWFpbiIsIG51bGwpOworIyMjIEVuZCBGaWxlOiBJ
bnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5h
dGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGRvbWFpbi10YXJnZXRUeXBlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKworbmFtZXNwYWNl
IEluc3BlY3RvciB7CisKK2NsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1Ymxp
YzoKKyAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hl
cj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNo
ZXIpOyB9CisgICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3Qg
eyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQorcHJpdmF0ZToKKyAgICBSZWZQ
dHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Cit9OworCisKK2NsYXNz
IEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJhY2tl
bmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5BbHRlcm5hdGVEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlcigpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBDb21tYW5kKGxvbmcgY2FsbElk
KSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorIyMjIEVuZCBGaWxlOiBUZXN0QWx0
ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5k
RGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10
YXJnZXRUeXBlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0
eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQorY2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXI7
CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKK2Ns
YXNzIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CitwdWJsaWM6CisgICAgdmlydHVh
bCB2b2lkIENvbW1hbmQoRXJyb3JTdHJpbmcmKSA9IDA7Citwcm90ZWN0ZWQ6CisgICAgdmlydHVh
bCB+RG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7Cit9OworCitjbGFzcyBEb21haW5C
YWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0
Y2hlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4g
Y3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
Kik7CisgICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRo
b2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkgZmluYWw7Citwcml2YXRlOgorICAgIHZv
aWQgQ29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0
ZXJzKTsKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK3B1Ymxp
YzoKKyAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlRG9tYWluQmFja2Vu
ZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVy
ID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQorcHJpdmF0ZToKKyAgICBBbHRlcm5hdGVEb21haW5C
YWNrZW5kRGlzcGF0Y2hlciogbV9hbHRlcm5hdGVEaXNwYXRjaGVyIHsgbnVsbHB0ciB9OworI2Vu
ZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorcHJpdmF0ZToK
KyAgICBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYsIERvbWFpbkJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlciogbV9hZ2VudCB7IG51bGxwdHIgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgorIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZp
bGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRl
IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisK
KyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyNpbmNsdWRlICJU
ZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCisjZW5kaWYgLy8gRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitE
b21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5Eb21haW5CYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXIoKSB7IH0KKworUmVmPERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBEb21haW5CYWNrZW5k
RGlzcGF0Y2hlcjo6Y3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwg
RG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKK3sKKyAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdl
bnQpKTsKK30KKworRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkRvbWFpbkJhY2tlbmREaXNwYXRj
aGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgRG9tYWluQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKKyAgICA6IFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRj
aGVyKGJhY2tlbmREaXNwYXRjaGVyKQorICAgICwgbV9hZ2VudChhZ2VudCkKK3sKKyAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oIkRvbWFpbiJfcywg
dGhpcyk7Cit9CisKK3ZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcg
cmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNz
YWdlKQoreworICAgIFJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7
CisKKyAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOworICAgIG1lc3NhZ2UtPmdl
dE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsKKworICAgIGlmIChtZXRob2QgPT0gIkNv
bW1hbmQiKSB7CisgICAgICAgIENvbW1hbmQocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJl
cG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0Rv
bWFpbi4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOworfQorCit2b2lkIERvbWFpbkJh
Y2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmKQoreworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQor
ICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNw
YXRjaGVyLT5Db21tYW5kKHJlcXVlc3RJZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5k
aWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyAgICBFcnJv
clN0cmluZyBlcnJvcjsKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmpl
Y3Q6OmNyZWF0ZSgpOworICAgIG1fYWdlbnQtPkNvbW1hbmQoZXJyb3IpOworCisgICAgaWYgKCFl
cnJvci5sZW5ndGgoKSkKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNl
KHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7CisgICAgZWxzZQorICAgICAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVy
OjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMg
QmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVz
dFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFz
cyBGcm9udGVuZFJvdXRlcjsKKworY2xhc3MgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVyIHsKKyAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBEb21haW5Gcm9udGVuZERp
c3BhdGNoZXIoRnJvbnRlbmRSb3V0ZXImIGZyb250ZW5kUm91dGVyKSA6IG1fZnJvbnRlbmRSb3V0
ZXIoZnJvbnRlbmRSb3V0ZXIpIHsgfQorICAgIHZvaWQgRXZlbnQoKTsKK3ByaXZhdGU6CisgICAg
RnJvbnRlbmRSb3V0ZXImIG1fZnJvbnRlbmRSb3V0ZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMg
QmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVzLmpzb24KKy8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3ZvaWQgRG9tYWluRnJvbnRlbmREaXNwYXRj
aGVyOjpFdmVudCgpCit7CisgICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJf
cywgIkRvbWFpbi5FdmVudCJfcyk7CisKKyAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChq
c29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25z
Lmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFByb3RvY29sIHsK
KworCisKKworCisKKworCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKworI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK25h
bWVzcGFjZSBQcm90b2NvbCB7CisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3Rz
LmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZXMuanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Cisj
aW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCitAcHJvdG9jb2wgVGVzdFByb3RvY29sRG9tYWlu
RG9tYWluSGFuZGxlcjsKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworY2xhc3MgT2JqQ0lu
c3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZURv
bWFpbkJhY2tlbmREaXNwYXRjaGVyIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1
YmxpYzoKKyAgICBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFBy
b3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxl
cjsgfQorICAgIHZvaWQgQ29tbWFuZChsb25nIHJlcXVlc3RJZCkgZmluYWw7Citwcml2YXRlOgor
ICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPj4gbV9kZWxl
Z2F0ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBkb21haW4tdGFyZ2V0VHlwZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2Nv
bEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwu
aCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbmNsdWRlIDx3
dGYvSlNPTlZhbHVlcy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordm9pZCBPYmpDSW5z
cGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9uZyByZXF1ZXN0SWQpCit7
CisgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKENvbW1h
bmRXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsKKyAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNw
YXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uQ29tbWFuZCcgd2FzIG5vdCBmb3VuZCJf
cyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmlu
ZyAqZXJyb3IpIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xF
cnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwor
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgIH07
CisKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxz
ZSk7CisgICAgfTsKKworICAgIFttX2RlbGVnYXRlIENvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazpl
cnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOworfQorCisKK30g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tl
bmREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJh
dGlvbi5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5
cGVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lt
cG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgorCitfX2F0dHJpYnV0ZV9fKCh2aXNp
YmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
biA6IE5TT2JqZWN0CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluLCBzZXR0ZXI9c2V0RG9t
YWluSGFuZGxlcjopIGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IGRvbWFpbkhh
bmRsZXI7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFRlc3RQcm90b2NvbERvbWFp
bkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqZG9tYWluRXZlbnREaXNwYXRjaGVyOworQGVuZAorCisK
KyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
bi5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2ltcG9ydCAiVGVzdFBy
b3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRl
cm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVu
dGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5z
cGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgorewor
ICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7CisgICAgaWQ8
VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4gX2RvbWFpbkhhbmRsZXI7CisgICAgVGVz
dFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyICpfZG9tYWluRXZlbnREaXNwYXRj
aGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJs
ZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGlu
aXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29u
dHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVybiBzZWxm
OworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbX2RvbWFpbkhhbmRsZXIgcmVsZWFzZV07
CisgICAgW19kb21haW5FdmVudERpc3BhdGNoZXIgcmVsZWFzZV07CisgICAgW3N1cGVyIGRlYWxs
b2NdOworfQorCistICh2b2lkKXNldERvbWFpbkhhbmRsZXI6KGlkPFRlc3RQcm90b2NvbERvbWFp
bkRvbWFpbkhhbmRsZXI+KWhhbmRsZXIKK3sKKyAgICBpZiAoaGFuZGxlciA9PSBfZG9tYWluSGFu
ZGxlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgW19kb21haW5IYW5kbGVyIHJlbGVhc2VdOwor
ICAgIF9kb21haW5IYW5kbGVyID0gW2hhbmRsZXIgcmV0YWluXTsKKworICAgIGF1dG8gYWx0ZXJu
YXRlRGlzcGF0Y2hlciA9IG1ha2VVbmlxdWU8T2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNw
YXRjaGVyPihoYW5kbGVyKTsKKyAgICBhdXRvIGFsdGVybmF0ZUFnZW50ID0gbWFrZVVuaXF1ZTxB
bHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudDxEb21haW5CYWNrZW5kRGlzcGF0Y2hlciwgQWx0ZXJu
YXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXI+PigiRG9tYWluIl9zLCAqX2NvbnRyb2xsZXIsIFdU
Rk1vdmUoYWx0ZXJuYXRlRGlzcGF0Y2hlcikpOworICAgIF9jb250cm9sbGVyLT5hcHBlbmRFeHRy
YUFnZW50KFdURk1vdmUoYWx0ZXJuYXRlQWdlbnQpKTsKK30KKworLSAoaWQ8VGVzdFByb3RvY29s
RG9tYWluRG9tYWluSGFuZGxlcj4pZG9tYWluSGFuZGxlcgoreworICAgIHJldHVybiBfZG9tYWlu
SGFuZGxlcjsKK30KKworLSAoVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVy
ICopZG9tYWluRXZlbnREaXNwYXRjaGVyCit7CisgICAgaWYgKCFfZG9tYWluRXZlbnREaXNwYXRj
aGVyKQorICAgICAgICBfZG9tYWluRXZlbnREaXNwYXRjaGVyID0gW1tUZXN0UHJvdG9jb2xEb21h
aW5Eb21haW5FdmVudERpc3BhdGNoZXIgYWxsb2NdIGluaXRXaXRoQ29udHJvbGxlcjpfY29udHJv
bGxlcl07CisgICAgcmV0dXJuIF9kb21haW5FdmVudERpc3BhdGNoZXI7Cit9CisKK0BlbmQKKwor
CisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZXMuanNvbgorLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5h
bC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQg
PHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBs
ZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIKK3sKKyAg
ICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworfQorCistIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRy
b2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICgh
c2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAg
X2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lk
KUV2ZW50Cit7CisgICAgY29uc3QgRnJvbnRlbmRSb3V0ZXImIHJvdXRlciA9IF9jb250cm9sbGVy
LT5mcm9udGVuZFJvdXRlcigpOworCisgICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2Ug
PSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1l
dGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7CisgICAgcm91dGVyLnNlbmRFdmVudChqc29uTWVz
c2FnZS0+dG9KU09OU3RyaW5nKCkpOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2wuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBl
cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBv
cnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJ
UHJvdG9jb2xKU09OT2JqZWN0Lmg+CisKKworCisKKworCisKKworQHByb3RvY29sIFRlc3RQcm90
b2NvbERvbWFpbkRvbWFpbkhhbmRsZXIgPE5TT2JqZWN0PgorQG9wdGlvbmFsCistICh2b2lkKUNv
bW1hbmRXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2Fs
bGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKHZvaWQpKXN1Y2Nlc3NDYWxsYmFjazsKK0Bl
bmQKKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNl
IFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciA6IE5TT2JqZWN0CistICh2
b2lkKUV2ZW50OworQGVuZAorCisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1
aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4KKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wu
aAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlcy5qc29uCisvLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5o
IgorI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKKyNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8
d3RmL0pTT05WYWx1ZXMuaD4KKworQGludGVyZmFjZSBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5F
dmVudERpc3BhdGNoZXIgKFByaXZhdGUpCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9s
bGVyOihJbnNwZWN0b3I6OkF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxl
cjsKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVzLmpzb24KKy8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgi
CisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+CisK
K25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+
CitPcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcm
IHZhbHVlKTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRv
bWFpbi10YXJnZXRUeXBlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorCisjaW1w
b3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIK
KyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisK
K3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworCisKKworCisjIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sVHlwZXMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFy
Z2V0VHlwZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpT
T05PYmplY3RQcml2YXRlLmg+CisjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2ltcG9ydCA8
d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisjIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWlucy13aXRoLXZh
cnlpbmctY29tbWFuZC1zaXplcy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW5zLXdpdGgtdmFyeWluZy1jb21t
YW5kLXNpemVzLmpzb24tcmVzdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwLi5jZWEyMGYzZmNmZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW5zLXdpdGgtdmFyeWluZy1j
b21tYW5kLXNpemVzLmpzb24tcmVzdWx0CkBAIC0wLDAgKzEsMTQyMiBAQAorIyMjIEJlZ2luIEZp
bGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcworLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisvLyBOZXR3b3JrMQorSW5zcGVj
dG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiTmV0d29yazEiLCBudWxsKTsKK0luc3BlY3RvckJh
Y2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMS5sb2FkUmVzb3VyY2UxIiwgbnVsbCwgW10s
IFtdKTsKK0luc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIk5ldHdvcmsxIiwgbnVsbCk7
CisKKy8vIE5ldHdvcmszCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJOZXR3b3Jr
MyIsIG51bGwpOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIk5ldHdvcmszLmxv
YWRSZXNvdXJjZTEiLCBudWxsLCBbXSwgW10pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNv
bW1hbmQoIk5ldHdvcmszLmxvYWRSZXNvdXJjZTIiLCBudWxsLCBbXSwgW10pOworSW5zcGVjdG9y
QmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIk5ldHdvcmszLmxvYWRSZXNvdXJjZTMiLCBudWxsLCBb
XSwgW10pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIk5ldHdvcmszLmxvYWRS
ZXNvdXJjZTQiLCBudWxsLCBbXSwgW10pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1h
bmQoIk5ldHdvcmszLmxvYWRSZXNvdXJjZTUiLCBudWxsLCBbXSwgW10pOworSW5zcGVjdG9yQmFj
a2VuZC5yZWdpc3RlckNvbW1hbmQoIk5ldHdvcmszLmxvYWRSZXNvdXJjZTYiLCBudWxsLCBbXSwg
W10pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIk5ldHdvcmszLmxvYWRSZXNv
dXJjZTciLCBudWxsLCBbXSwgW10pOworSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigi
TmV0d29yazMiLCBudWxsKTsKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRz
LmpzCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1j
b21tYW5kLXNpemVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorCituYW1lc3BhY2UgSW5zcGVj
dG9yIHsKKworY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAg
IHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRp
c3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0K
KyAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVy
biBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Citwcml2YXRlOgorICAgIFJlZlB0cjxCYWNr
ZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKK307CisKKworY2xhc3MgQWx0ZXJu
YXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlz
cGF0Y2hlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+QWx0ZXJuYXRlTmV0d29yazFCYWNrZW5k
RGlzcGF0Y2hlcigpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UxKGxvbmcgY2Fs
bElkKSA9IDA7Cit9OworY2xhc3MgQWx0ZXJuYXRlTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlciA6
IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdmlydHVh
bCB+QWx0ZXJuYXRlTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQorICAgIHZpcnR1YWwg
dm9pZCBsb2FkUmVzb3VyY2UxKGxvbmcgY2FsbElkKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGxv
YWRSZXNvdXJjZTIobG9uZyBjYWxsSWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291
cmNlMyhsb25nIGNhbGxJZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2U0KGxv
bmcgY2FsbElkKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTUobG9uZyBjYWxs
SWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlNihsb25nIGNhbGxJZCkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2U3KGxvbmcgY2FsbElkKSA9IDA7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQorIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2Vu
ZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMu
aAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5n
LWNvbW1hbmQtc2l6ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIK
KyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsK
KwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKK2NsYXNzIEFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3Bh
dGNoZXI7CitjbGFzcyBBbHRlcm5hdGVOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOworI2VuZGlm
IC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCitjbGFzcyBOZXR3
b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lk
IGxvYWRSZXNvdXJjZTEoRXJyb3JTdHJpbmcmKSA9IDA7Citwcm90ZWN0ZWQ6CisgICAgdmlydHVh
bCB+TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKK307CisKK2NsYXNzIE5ldHdv
cmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQg
bG9hZFJlc291cmNlMShFcnJvclN0cmluZyYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJl
c291cmNlMihFcnJvclN0cmluZyYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNl
MyhFcnJvclN0cmluZyYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlNChFcnJv
clN0cmluZyYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlNShFcnJvclN0cmlu
ZyYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlNihFcnJvclN0cmluZyYpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlNyhFcnJvclN0cmluZyYpID0gMDsKK3By
b3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5OZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcigp
OworfTsKKworY2xhc3MgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBT
dXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxO
ZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBOZXR3
b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIHZvaWQgZGlzcGF0Y2gobG9uZyBy
ZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3Nh
Z2UpIGZpbmFsOworcHJpdmF0ZToKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTEobG9uZyByZXF1ZXN0
SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisjaWYgRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCitwdWJsaWM6CisgICAgdm9pZCBzZXRBbHRlcm5h
dGVEaXNwYXRjaGVyKEFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0
ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hl
cjsgfQorcHJpdmF0ZToKKyAgICBBbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKiBt
X2FsdGVybmF0ZURpc3BhdGNoZXIgeyBudWxscHRyIH07CisjZW5kaWYgLy8gRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCitwcml2YXRlOgorICAgIE5ldHdvcmsxQmFja2Vu
ZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImLCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlciopOworICAgIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50
IHsgbnVsbHB0ciB9OworfTsKKworY2xhc3MgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlciBmaW5h
bCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAg
c3RhdGljIFJlZjxOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3Bh
dGNoZXImLCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIHZvaWQgZGlz
cGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2Jq
ZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOworcHJpdmF0ZToKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTEo
bG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisgICAg
dm9pZCBsb2FkUmVzb3VyY2UyKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYm
IHBhcmFtZXRlcnMpOworICAgIHZvaWQgbG9hZFJlc291cmNlMyhsb25nIHJlcXVlc3RJZCwgUmVm
UHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTQo
bG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisgICAg
dm9pZCBsb2FkUmVzb3VyY2U1KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYm
IHBhcmFtZXRlcnMpOworICAgIHZvaWQgbG9hZFJlc291cmNlNihsb25nIHJlcXVlc3RJZCwgUmVm
UHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTco
bG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisjaWYg
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCitwdWJsaWM6CisgICAgdm9p
ZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZU5ldHdvcmszQmFja2VuZERpc3BhdGNo
ZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJu
YXRlRGlzcGF0Y2hlcjsgfQorcHJpdmF0ZToKKyAgICBBbHRlcm5hdGVOZXR3b3JrM0JhY2tlbmRE
aXNwYXRjaGVyKiBtX2FsdGVybmF0ZURpc3BhdGNoZXIgeyBudWxscHRyIH07CisjZW5kaWYgLy8g
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCitwcml2YXRlOgorICAgIE5l
dHdvcmszQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImLCBOZXR3b3JrM0JhY2tl
bmREaXNwYXRjaGVySGFuZGxlciopOworICAgIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyKiBtX2FnZW50IHsgbnVsbHB0ciB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
CisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmls
ZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1
ZXMuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKKyNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCisjZW5kaWYg
Ly8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKK25hbWVzcGFjZSBJ
bnNwZWN0b3IgeworCitOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6fk5ldHdvcmsx
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9CitOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVy
SGFuZGxlcjo6fk5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9CisKK1JlZjxO
ZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPiBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpjcmVh
dGUoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBOZXR3b3JrMUJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlciogYWdlbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTmV0
d29yazFCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKK30KKwor
TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihCYWNr
ZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIE5ldHdvcmsxQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyKiBhZ2VudCkKKyAgICA6IFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJh
Y2tlbmREaXNwYXRjaGVyKQorICAgICwgbV9hZ2VudChhZ2VudCkKK3sKKyAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oIk5ldHdvcmsxIl9zLCB0aGlz
KTsKK30KKwordm9pZCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJl
cXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2Fn
ZSkKK3sKKyAgICBSZWY8TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7
CisKKyAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOworICAgIG1lc3NhZ2UtPmdl
dE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsKKworICAgIGlmIChtZXRob2QgPT0gImxv
YWRSZXNvdXJjZTEiKSB7CisgICAgICAgIGxvYWRSZXNvdXJjZTEocmVxdWVzdElkLCBXVEZNb3Zl
KHBhcmFtZXRlcnMpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5v
dEZvdW5kLCAiJ05ldHdvcmsxLiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7Cit9CisK
K3ZvaWQgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMShsb25nIHJlcXVl
c3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKK3sKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKKyAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Cisg
ICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlMShyZXF1ZXN0SWQpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQorCisgICAgRXJyb3JTdHJpbmcgZXJyb3I7CisgICAgUmVmPEpTT046
Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBtX2FnZW50LT5s
b2FkUmVzb3VyY2UxKGVycm9yKTsKKworICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCisgICAgICAg
IG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVz
dWx0KSwgZmFsc2UpOworICAgIGVsc2UKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVw
b3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUo
ZXJyb3IpKTsKK30KKworUmVmPE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI+IE5ldHdvcmszQmFj
a2VuZERpc3BhdGNoZXI6OmNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNo
ZXIsIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKK3sKKyAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRj
aGVyLCBhZ2VudCkpOworfQorCitOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpOZXR3b3JrM0Jh
Y2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgTmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQorICAgIDogU3VwcGxlbWVudGFs
QmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCisgICAgLCBtX2FnZW50KGFnZW50
KQoreworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFp
bigiTmV0d29yazMiX3MsIHRoaXMpOworfQorCit2b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNo
ZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpT
T046Ok9iamVjdD4mJiBtZXNzYWdlKQoreworICAgIFJlZjxOZXR3b3JrM0JhY2tlbmREaXNwYXRj
aGVyPiBwcm90ZWN0KCp0aGlzKTsKKworICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRl
cnM7CisgICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRlcnMpOworCisg
ICAgdHlwZWRlZiB2b2lkIChOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjoqQ2FsbEhhbmRsZXIp
KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpOworICAgIHR5
cGVkZWYgSGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVyPiBEaXNwYXRjaE1hcDsKKyAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8RGlzcGF0Y2hNYXA+IGRpc3BhdGNoTWFwOworICAgIGlmIChkaXNw
YXRjaE1hcC5nZXQoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IHN0cnVjdCBN
ZXRob2RUYWJsZSB7CisgICAgICAgICAgICBjb25zdCBjaGFyKiBuYW1lOworICAgICAgICAgICAg
Q2FsbEhhbmRsZXIgaGFuZGxlcjsKKyAgICAgICAgfSBjb21tYW5kc1tdID0geworICAgICAgICAg
ICAgeyAibG9hZFJlc291cmNlMSIsICZOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVz
b3VyY2UxIH0sCisgICAgICAgICAgICB7ICJsb2FkUmVzb3VyY2UyIiwgJk5ldHdvcmszQmFja2Vu
ZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTIgfSwKKyAgICAgICAgICAgIHsgImxvYWRSZXNvdXJj
ZTMiLCAmTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMyB9LAorICAgICAg
ICAgICAgeyAibG9hZFJlc291cmNlNCIsICZOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2Fk
UmVzb3VyY2U0IH0sCisgICAgICAgICAgICB7ICJsb2FkUmVzb3VyY2U1IiwgJk5ldHdvcmszQmFj
a2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTUgfSwKKyAgICAgICAgICAgIHsgImxvYWRSZXNv
dXJjZTYiLCAmTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNiB9LAorICAg
ICAgICAgICAgeyAibG9hZFJlc291cmNlNyIsICZOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjps
b2FkUmVzb3VyY2U3IH0sCisgICAgICAgIH07CisgICAgICAgIHNpemVfdCBsZW5ndGggPSBXVEZf
QVJSQVlfTEVOR1RIKGNvbW1hbmRzKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBs
ZW5ndGg7ICsraSkKKyAgICAgICAgICAgIGRpc3BhdGNoTWFwLmdldCgpLmFkZChjb21tYW5kc1tp
XS5uYW1lLCBjb21tYW5kc1tpXS5oYW5kbGVyKTsKKyAgICB9CisKKyAgICBhdXRvIGZpbmRSZXN1
bHQgPSBkaXNwYXRjaE1hcC5nZXQoKS5maW5kKG1ldGhvZCk7CisgICAgaWYgKGZpbmRSZXN1bHQg
PT0gZGlzcGF0Y2hNYXAuZ2V0KCkuZW5kKCkpIHsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQs
ICInTmV0d29yazMuIiArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgICgoKnRoaXMpLipmaW5kUmVzdWx0LT52YWx1ZSkocmVxdWVzdElk
LCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKK30KKwordm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRj
aGVyOjpsb2FkUmVzb3VyY2UxKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYm
KQoreworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorICAgIGlm
IChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVy
LT5sb2FkUmVzb3VyY2UxKHJlcXVlc3RJZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5k
aWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyAgICBFcnJv
clN0cmluZyBlcnJvcjsKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmpl
Y3Q6OmNyZWF0ZSgpOworICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTEoZXJyb3IpOworCisgICAg
aWYgKCFlcnJvci5sZW5ndGgoKSkKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJl
c3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7CisgICAgZWxzZQorICAg
ICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNw
YXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOworfQorCit2b2lkIE5ldHdvcmsz
QmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTIobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxK
U09OOjpPYmplY3Q+JiYpCit7CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCisgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeworICAgICAgICBtX2FsdGVy
bmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZTIocmVxdWVzdElkKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKKworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3Vs
dCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9hZ2VudC0+bG9hZFJlc291cmNlMihl
cnJvcik7CisKKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQorICAgICAgICBtX2JhY2tlbmREaXNw
YXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsK
KyAgICBlbHNlCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJy
b3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Cit9CisK
K3ZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMyhsb25nIHJlcXVl
c3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKK3sKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKKyAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Cisg
ICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlMyhyZXF1ZXN0SWQpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQorCisgICAgRXJyb3JTdHJpbmcgZXJyb3I7CisgICAgUmVmPEpTT046
Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBtX2FnZW50LT5s
b2FkUmVzb3VyY2UzKGVycm9yKTsKKworICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCisgICAgICAg
IG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVz
dWx0KSwgZmFsc2UpOworICAgIGVsc2UKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVw
b3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUo
ZXJyb3IpKTsKK30KKwordm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3Vy
Y2U0KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQoreworI2lmIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorICAgIGlmIChtX2FsdGVybmF0ZURp
c3BhdGNoZXIpIHsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2U0
KHJlcXVlc3RJZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyAgICBFcnJvclN0cmluZyBlcnJvcjsK
KyAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwor
ICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTQoZXJyb3IpOworCisgICAgaWYgKCFlcnJvci5sZW5n
dGgoKSkKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJ
ZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7CisgICAgZWxzZQorICAgICAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJF
cnJvciwgV1RGTW92ZShlcnJvcikpOworfQorCit2b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNo
ZXI6OmxvYWRSZXNvdXJjZTUobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYp
Cit7CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisgICAgaWYg
KG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXIt
PmxvYWRSZXNvdXJjZTUocmVxdWVzdElkKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRp
ZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworICAgIEVycm9y
U3RyaW5nIGVycm9yOworICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVj
dDo6Y3JlYXRlKCk7CisgICAgbV9hZ2VudC0+bG9hZFJlc291cmNlNShlcnJvcik7CisKKyAgICBp
ZiAoIWVycm9yLmxlbmd0aCgpKQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVz
cG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKKyAgICBlbHNlCisgICAg
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3Bh
dGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Cit9CisKK3ZvaWQgTmV0d29yazNC
YWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNihsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpT
T046Ok9iamVjdD4mJikKK3sKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKKyAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7CisgICAgICAgIG1fYWx0ZXJu
YXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlNihyZXF1ZXN0SWQpOworICAgICAgICByZXR1cm47
CisgICAgfQorI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQorCisgICAgRXJyb3JTdHJpbmcgZXJyb3I7CisgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2U2KGVy
cm9yKTsKKworICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCisgICAgICAgIG1fYmFja2VuZERpc3Bh
dGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOwor
ICAgIGVsc2UKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJv
cihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKK30KKwor
dm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U3KGxvbmcgcmVxdWVz
dElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQoreworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQorICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKKyAg
ICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2U3KHJlcXVlc3RJZCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCisKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWY8SlNPTjo6
T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYWdlbnQtPmxv
YWRSZXNvdXJjZTcoZXJyb3IpOworCisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKKyAgICAgICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1
bHQpLCBmYWxzZSk7CisgICAgZWxzZQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBv
cnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShl
cnJvcikpOworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBU
ZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5k
RGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMt
d2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bE9iamVjdHMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgRnJvbnRl
bmRSb3V0ZXI7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0
RnJvbnRlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNw
YXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdp
dGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RGcm9u
dGVuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JG
cm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNw
YWNlIEluc3BlY3RvciB7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZp
bGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sT2JqZWN0cy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlu
cy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25z
Lmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFByb3RvY29sIHsK
KworCisKKworCisvLyBUeXBlZGVmcy4KK25hbWVzcGFjZSBOZXR3b3JrMiB7CisvKiBVbmlxdWUg
bG9hZGVyIGlkZW50aWZpZXIuICovCit0eXBlZGVmIFN0cmluZyBMb2FkZXJJZDsKK30gLy8gTmV0
d29yazIKKy8vIEVuZCBvZiB0eXBlZGVmcy4KKworCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29s
CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xP
YmplY3RzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFu
ZC1zaXplcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisK
KyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCituYW1lc3BhY2UgUHJvdG9jb2wgeworCisKKwor
fSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbmNsdWRlIDx3
dGYvUmV0YWluUHRyLmg+CisKK0Bwcm90b2NvbCBUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhh
bmRsZXI7CitAcHJvdG9jb2wgVGVzdFByb3RvY29sTmV0d29yazNEb21haW5IYW5kbGVyOworCitu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCitjbGFzcyBPYmpDSW5zcGVjdG9yTmV0d29yazFCYWNr
ZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNw
YXRjaGVyIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBPYmpD
SW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xOZXR3b3Jr
MURvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KKyAgICB2
b2lkIGxvYWRSZXNvdXJjZTEobG9uZyByZXF1ZXN0SWQpIGZpbmFsOworcHJpdmF0ZToKKyAgICBS
ZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0
ZTsKK307CisKK2NsYXNzIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyIGZp
bmFsIDogcHVibGljIEFsdGVybmF0ZU5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIgeworICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIE9iakNJbnNwZWN0b3JOZXR3b3Jr
M0JhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbE5ldHdvcmszRG9tYWluSGFuZGxlcj4g
aGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQorICAgIHZvaWQgbG9hZFJlc291cmNl
MShsb25nIHJlcXVlc3RJZCkgZmluYWw7CisgICAgdm9pZCBsb2FkUmVzb3VyY2UyKGxvbmcgcmVx
dWVzdElkKSBmaW5hbDsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTMobG9uZyByZXF1ZXN0SWQpIGZp
bmFsOworICAgIHZvaWQgbG9hZFJlc291cmNlNChsb25nIHJlcXVlc3RJZCkgZmluYWw7CisgICAg
dm9pZCBsb2FkUmVzb3VyY2U1KGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKKyAgICB2b2lkIGxvYWRS
ZXNvdXJjZTYobG9uZyByZXF1ZXN0SWQpIGZpbmFsOworICAgIHZvaWQgbG9hZFJlc291cmNlNyhs
b25nIHJlcXVlc3RJZCkgZmluYWw7Citwcml2YXRlOgorICAgIFJldGFpblB0cjxpZDxUZXN0UHJv
dG9jb2xOZXR3b3JrM0RvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOworfTsKKworfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3Bh
dGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVy
cy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5
aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tl
bmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNp
bmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbmNsdWRlIDx3dGYvSlNP
TlZhbHVlcy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordm9pZCBPYmpDSW5zcGVjdG9y
TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMShsb25nIHJlcXVlc3RJZCkK
K3sKKyAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IobG9h
ZFJlc291cmNlMVdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgeworICAgICAg
ICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFj
a2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmsxLmxvYWRSZXNvdXJjZTEn
IHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVu
ZGluZ0Vycm9ycygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWQgZXJyb3JDYWxs
YmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCkt
PnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVy
RXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdF
cnJvcnMoKTsKKyAgICB9OworCisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKKyAgICAgICAg
YmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKSwgZmFsc2UpOworICAgIH07CisKKyAgICBbbV9kZWxlZ2F0ZSBsb2FkUmVzb3Vy
Y2UxV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vz
c0NhbGxiYWNrXTsKK30KKworCit2b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNw
YXRjaGVyOjpsb2FkUmVzb3VyY2UxKGxvbmcgcmVxdWVzdElkKQoreworICAgIGlmICghW21fZGVs
ZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2UxV2l0aEVycm9y
Q2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVy
KCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0
aG9kTm90Rm91bmQsICInTmV0d29yazMubG9hZFJlc291cmNlMScgd2FzIG5vdCBmb3VuZCJfcyk7
CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAq
ZXJyb3IpIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJv
cihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgIH07CisK
KyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigp
LT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7
CisgICAgfTsKKworICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZTFXaXRoRXJyb3JDYWxsYmFj
azplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOworfQorCit2
b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2Uy
KGxvbmcgcmVxdWVzdElkKQoreworICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVj
dG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2UyV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxi
YWNrOildKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJy
b3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29y
azMubG9hZFJlc291cmNlMicgd2FzIG5vdCBmb3VuZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKKyAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmRE
aXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgIH07CisKKyAgICBpZCBzdWNjZXNzQ2FsbGJh
Y2sgPSBeeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVz
dElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgfTsKKworICAgIFttX2Rl
bGVnYXRlIGxvYWRSZXNvdXJjZTJXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nl
c3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOworfQorCit2b2lkIE9iakNJbnNwZWN0b3JOZXR3
b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UzKGxvbmcgcmVxdWVzdElkKQorewor
ICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVz
b3VyY2UzV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7CisgICAgICAgIGJh
Y2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5k
RGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMubG9hZFJlc291cmNlMycgd2Fz
IG5vdCBmb3VuZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5n
RXJyb3JzKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZCBlcnJvckNhbGxiYWNr
ID0gXihOU1N0cmluZyAqZXJyb3IpIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVw
b3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJv
ciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9y
cygpOworICAgIH07CisKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeeworICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpLCBmYWxzZSk7CisgICAgfTsKKworICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZTNX
aXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2Fs
bGJhY2tdOworfQorCit2b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVy
Ojpsb2FkUmVzb3VyY2U0KGxvbmcgcmVxdWVzdElkKQoreworICAgIGlmICghW21fZGVsZWdhdGUg
cmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2U0V2l0aEVycm9yQ2FsbGJh
Y2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJl
cG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90
Rm91bmQsICInTmV0d29yazMubG9hZFJlc291cmNlNCcgd2FzIG5vdCBmb3VuZCJfcyk7CisgICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3Ip
IHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1
ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgIH07CisKKyAgICBp
ZCBzdWNjZXNzQ2FsbGJhY2sgPSBeeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5k
UmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAg
fTsKKworICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZTRXaXRoRXJyb3JDYWxsYmFjazplcnJv
ckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOworfQorCit2b2lkIE9i
akNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U1KGxvbmcg
cmVxdWVzdElkKQoreworICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBz
ZWxlY3Rvcihsb2FkUmVzb3VyY2U1V2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOild
KSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVx
dWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMubG9h
ZFJlc291cmNlNScgd2FzIG5vdCBmb3VuZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVy
KCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKKyAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRj
aGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5z
ZW5kUGVuZGluZ0Vycm9ycygpOworICAgIH07CisKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBe
eworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBK
U09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgfTsKKworICAgIFttX2RlbGVnYXRl
IGxvYWRSZXNvdXJjZTVXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxs
YmFjazpzdWNjZXNzQ2FsbGJhY2tdOworfQorCit2b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0Jh
Y2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U2KGxvbmcgcmVxdWVzdElkKQoreworICAgIGlm
ICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2U2
V2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7CisgICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0
Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMubG9hZFJlc291cmNlNicgd2FzIG5vdCBm
b3VuZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3Jz
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZCBlcnJvckNhbGxiYWNrID0gXihO
U1N0cmluZyAqZXJyb3IpIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJv
dG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJy
b3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwor
ICAgIH07CisKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeeworICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
LCBmYWxzZSk7CisgICAgfTsKKworICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZTZXaXRoRXJy
b3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2td
OworfQorCit2b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2Fk
UmVzb3VyY2U3KGxvbmcgcmVxdWVzdElkKQoreworICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9u
ZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2U3V2l0aEVycm9yQ2FsbGJhY2s6c3Vj
Y2Vzc0NhbGxiYWNrOildKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFBy
b3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQs
ICInTmV0d29yazMubG9hZFJlc291cmNlNycgd2FzIG5vdCBmb3VuZCJfcyk7CisgICAgICAgIGJh
Y2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKKyAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQs
IEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5k
RGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgIH07CisKKyAgICBpZCBzdWNj
ZXNzQ2FsbGJhY2sgPSBeeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9u
c2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgfTsKKwor
ICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZTdXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxi
YWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOworfQorCisKK30gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRj
aGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29t
bWFuZC1zaXplcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KKworX19hdHRyaWJ1dGVf
XygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZp
Z3VyYXRpb24gOiBOU09iamVjdAorQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVy
PXNldE5ldHdvcmsxSGFuZGxlcjopIGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxl
cj4gbmV0d29yazFIYW5kbGVyOworQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVy
PXNldE5ldHdvcmszSGFuZGxlcjopIGlkPFRlc3RQcm90b2NvbE5ldHdvcmszRG9tYWluSGFuZGxl
cj4gbmV0d29yazNIYW5kbGVyOworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbi5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0
aW9uLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZh
cnlpbmctY29tbWFuZC1zaXplcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKKworI2lt
cG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tl
bmREaXNwYXRjaGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0
Y2hhYmxlQWdlbnQuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVj
dG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJu
YXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKwor
QGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KK3sKKyAgICBBdWdtZW50
YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworICAgIGlkPFRlc3RQcm90b2Nv
bE5ldHdvcmsxRG9tYWluSGFuZGxlcj4gX25ldHdvcmsxSGFuZGxlcjsKKyAgICBpZDxUZXN0UHJv
dG9jb2xOZXR3b3JrM0RvbWFpbkhhbmRsZXI+IF9uZXR3b3JrM0hhbmRsZXI7Cit9CisKKy0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJv
bGxlciopY29udHJvbGxlcgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFz
ZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBf
Y29udHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQp
ZGVhbGxvYworeworICAgIFtfbmV0d29yazFIYW5kbGVyIHJlbGVhc2VdOworICAgIFtfbmV0d29y
azNIYW5kbGVyIHJlbGVhc2VdOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAodm9pZClz
ZXROZXR3b3JrMUhhbmRsZXI6KGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4p
aGFuZGxlcgoreworICAgIGlmIChoYW5kbGVyID09IF9uZXR3b3JrMUhhbmRsZXIpCisgICAgICAg
IHJldHVybjsKKworICAgIFtfbmV0d29yazFIYW5kbGVyIHJlbGVhc2VdOworICAgIF9uZXR3b3Jr
MUhhbmRsZXIgPSBbaGFuZGxlciByZXRhaW5dOworCisgICAgYXV0byBhbHRlcm5hdGVEaXNwYXRj
aGVyID0gbWFrZVVuaXF1ZTxPYmpDSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4o
aGFuZGxlcik7CisgICAgYXV0byBhbHRlcm5hdGVBZ2VudCA9IG1ha2VVbmlxdWU8QWx0ZXJuYXRl
RGlzcGF0Y2hhYmxlQWdlbnQ8TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciwgQWx0ZXJuYXRlTmV0
d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4+KCJOZXR3b3JrMSJfcywgKl9jb250cm9sbGVyLCBXVEZN
b3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIpKTsKKyAgICBfY29udHJvbGxlci0+YXBwZW5kRXh0cmFB
Z2VudChXVEZNb3ZlKGFsdGVybmF0ZUFnZW50KSk7Cit9CisKKy0gKGlkPFRlc3RQcm90b2NvbE5l
dHdvcmsxRG9tYWluSGFuZGxlcj4pbmV0d29yazFIYW5kbGVyCit7CisgICAgcmV0dXJuIF9uZXR3
b3JrMUhhbmRsZXI7Cit9CisKKy0gKHZvaWQpc2V0TmV0d29yazNIYW5kbGVyOihpZDxUZXN0UHJv
dG9jb2xOZXR3b3JrM0RvbWFpbkhhbmRsZXI+KWhhbmRsZXIKK3sKKyAgICBpZiAoaGFuZGxlciA9
PSBfbmV0d29yazNIYW5kbGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBbX25ldHdvcmszSGFu
ZGxlciByZWxlYXNlXTsKKyAgICBfbmV0d29yazNIYW5kbGVyID0gW2hhbmRsZXIgcmV0YWluXTsK
KworICAgIGF1dG8gYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IG1ha2VVbmlxdWU8T2JqQ0luc3BlY3Rv
ck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI+KGhhbmRsZXIpOworICAgIGF1dG8gYWx0ZXJuYXRl
QWdlbnQgPSBtYWtlVW5pcXVlPEFsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50PE5ldHdvcmszQmFj
a2VuZERpc3BhdGNoZXIsIEFsdGVybmF0ZU5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI+PigiTmV0
d29yazMiX3MsICpfY29udHJvbGxlciwgV1RGTW92ZShhbHRlcm5hdGVEaXNwYXRjaGVyKSk7Cisg
ICAgX2NvbnRyb2xsZXItPmFwcGVuZEV4dHJhQWdlbnQoV1RGTW92ZShhbHRlcm5hdGVBZ2VudCkp
OworfQorCistIChpZDxUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkhhbmRsZXI+KW5ldHdvcmsz
SGFuZGxlcgoreworICAgIHJldHVybiBfbmV0d29yazNIYW5kbGVyOworfQorCitAZW5kCisKKwor
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQ
cm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5oIgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3Bl
Y3RvcjsKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0K
KworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPEZvdW5kYXRp
b24vRm91bmRhdGlvbi5oPgorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09O
T2JqZWN0Lmg+CisKKworCisKKworCisKKworQHByb3RvY29sIFRlc3RQcm90b2NvbE5ldHdvcmsx
RG9tYWluSGFuZGxlciA8TlNPYmplY3Q+CitAb3B0aW9uYWwKKy0gKHZvaWQpbG9hZFJlc291cmNl
MVdpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFj
ayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikodm9pZCkpc3VjY2Vzc0NhbGxiYWNrOworQGVuZAor
CitAcHJvdG9jb2wgVGVzdFByb3RvY29sTmV0d29yazNEb21haW5IYW5kbGVyIDxOU09iamVjdD4K
K0BvcHRpb25hbAorLSAodm9pZClsb2FkUmVzb3VyY2UxV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQo
XikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZChe
KSh2b2lkKSlzdWNjZXNzQ2FsbGJhY2s7CistICh2b2lkKWxvYWRSZXNvdXJjZTJXaXRoRXJyb3JD
YWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0Nh
bGxiYWNrOih2b2lkKF4pKHZvaWQpKXN1Y2Nlc3NDYWxsYmFjazsKKy0gKHZvaWQpbG9hZFJlc291
cmNlM1dpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxs
YmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikodm9pZCkpc3VjY2Vzc0NhbGxiYWNrOworLSAo
dm9pZClsb2FkUmVzb3VyY2U0V2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVy
cm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKSh2b2lkKSlzdWNjZXNz
Q2FsbGJhY2s7CistICh2b2lkKWxvYWRSZXNvdXJjZTVXaXRoRXJyb3JDYWxsYmFjazoodm9pZChe
KShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4p
KHZvaWQpKXN1Y2Nlc3NDYWxsYmFjazsKKy0gKHZvaWQpbG9hZFJlc291cmNlNldpdGhFcnJvckNh
bGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2Fs
bGJhY2s6KHZvaWQoXikodm9pZCkpc3VjY2Vzc0NhbGxiYWNrOworLSAodm9pZClsb2FkUmVzb3Vy
Y2U3V2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxi
YWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKSh2b2lkKSlzdWNjZXNzQ2FsbGJhY2s7CitAZW5k
CisKKworCisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJp
bGl0eU9iamVjdHMuaD4KKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAorCisjIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9j
b2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCisjaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBv
cnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKKworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
SW50ZXJuYWwuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
LmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWlu
Zy1jb21tYW5kLXNpemVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3Iv
UldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Igewor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+CitPcHRpb25hbDxPYmpDRW51bVR5cGU+
IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKKworCisKK30gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0K
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1j
b21tYW5kLXNpemVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgorI2lt
cG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKwordXNp
bmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMgKE5ldHdvcmsyRG9tYWluKQorCisrICh2b2lkKV9wYXJzZUxvYWRlcklkOihOU1N0
cmluZyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKworQGVuZAorCitAaW1w
bGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChOZXR3b3JrMkRvbWFpbikK
KworKyAodm9pZClfcGFyc2VMb2FkZXJJZDooTlNTdHJpbmcgKiopb3V0VmFsdWUgZnJvbVBheWxv
YWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxv
YWQsIFtOU1N0cmluZyBjbGFzc10pOworICAgICpvdXRWYWx1ZSA9IChOU1N0cmluZyAqKXBheWxv
YWQ7Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNp
emVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lt
cG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2Jq
ZWN0UHJpdmF0ZS5oPgorI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9K
U09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworCisKKyMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9lbnVtLXZhbHVlcy5qc29u
LXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC9lbnVtLXZhbHVlcy5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMC4uY2Q5MDEyMDg2ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZW51bS12YWx1ZXMu
anNvbi1yZXN1bHQKQEAgLTAsMCArMSwxMjAzIEBACisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9y
QmFja2VuZENvbW1hbmRzLmpzCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51
bS12YWx1ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisvLyBUeXBlRG9tYWluCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJUeXBlRG9t
YWluIiwgbnVsbCk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiVHlwZURvbWFpbi5U
eXBlRG9tYWluRW51bSIsIHtTaGFyZWQ6ICJzaGFyZWQiLCBSZWQ6ICJyZWQiLCBHcmVlbjogImdy
ZWVuIiwgQmx1ZTogImJsdWUifSk7CitJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJU
eXBlRG9tYWluIiwgbnVsbCk7CisKKy8vIENvbW1hbmREb21haW4KK0luc3BlY3RvckJhY2tlbmQu
cmVnaXN0ZXJEb21haW4oIkNvbW1hbmREb21haW4iLCBudWxsKTsKK0luc3BlY3RvckJhY2tlbmQu
cmVnaXN0ZXJDb21tYW5kKCJDb21tYW5kRG9tYWluLmNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVl
IiwgbnVsbCwgW10sIFsicmV0dXJuVmFsdWUiXSk7CitJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRl
RG9tYWluKCJDb21tYW5kRG9tYWluIiwgbnVsbCk7CisKKy8vIEV2ZW50RG9tYWluCitJbnNwZWN0
b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJFdmVudERvbWFpbiIsIG51bGwpOworSW5zcGVjdG9y
QmFja2VuZC5yZWdpc3RlckVudW0oIkV2ZW50RG9tYWluLkV2ZW50V2l0aEVudW1QYXJhbWV0ZXJQ
YXJhbWV0ZXIiLCB7U2hhcmVkOiAic2hhcmVkIiwgQmxhY2s6ICJibGFjayIsIFdoaXRlOiAid2hp
dGUifSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnQoIkV2ZW50RG9tYWluLmV2ZW50
V2l0aEVudW1QYXJhbWV0ZXIiLCBudWxsLCBbInBhcmFtZXRlciJdKTsKK0luc3BlY3RvckJhY2tl
bmQucmVnaXN0ZXJFdmVudERvbWFpbkRpc3BhdGNoZXIgPSBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lz
dGVyRGlzcGF0Y2hlci5iaW5kKEluc3BlY3RvckJhY2tlbmQsICJFdmVudERvbWFpbiIpOworSW5z
cGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiRXZlbnREb21haW4iLCBudWxsKTsKKyMjIyBF
bmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCisKKyMjIyBCZWdpbiBGaWxlOiBU
ZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgorI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKworbmFtZXNw
YWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1
YmxpYzoKKyAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0
Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3Bh
dGNoZXIpOyB9CisgICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29u
c3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQorcHJpdmF0ZToKKyAgICBS
ZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Cit9OworCisKK2Ns
YXNzIEFsdGVybmF0ZUNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+QWx0ZXJuYXRl
Q29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGNv
bW1hbmRXaXRoRW51bVJldHVyblZhbHVlKGxvbmcgY2FsbElkKSA9IDA7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQorIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KKy8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
KworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwor
CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCitjbGFzcyBBbHRl
cm5hdGVDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI7CisjZW5kaWYgLy8gRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKK2NsYXNzIENvbW1hbmREb21haW5CYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIgeworcHVibGljOgorICAgIC8vIE5hbWVkIGFmdGVyIHBhcmFt
ZXRlciAncmV0dXJuVmFsdWUnIHdoaWxlIGdlbmVyYXRpbmcgY29tbWFuZC9ldmVudCBjb21tYW5k
V2l0aEVudW1SZXR1cm5WYWx1ZS4KKyAgICBlbnVtIGNsYXNzIFJldHVyblZhbHVlIHsKKyAgICAg
ICAgU2hhcmVkID0gMCwKKyAgICAgICAgQ3lhbiA9IDYsCisgICAgICAgIE1hZ2VudGEgPSA3LAor
ICAgICAgICBZZWxsb3cgPSA4LAorICAgIH07IC8vIGVudW0gY2xhc3MgUmV0dXJuVmFsdWUKKyAg
ICB2aXJ0dWFsIHZvaWQgY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUoRXJyb3JTdHJpbmcmLCBD
b21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpSZXR1cm5WYWx1ZSogb3V0X3Jl
dHVyblZhbHVlKSA9IDA7Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+Q29tbWFuZERvbWFpbkJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlcigpOworfTsKKworY2xhc3MgQ29tbWFuZERvbWFpbkJhY2tl
bmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVy
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hl
cj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRj
aGVySGFuZGxlciopOworICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0
cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOworcHJpdmF0
ZToKKyAgICB2b2lkIGNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlKGxvbmcgcmVxdWVzdElkLCBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOworI2lmIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQorcHVibGljOgorICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlz
cGF0Y2hlcihBbHRlcm5hdGVDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0
ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hl
cjsgfQorcHJpdmF0ZToKKyAgICBBbHRlcm5hdGVDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNo
ZXIqIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciB7IG51bGxwdHIgfTsKKyNlbmRpZiAvLyBFTkFCTEUo
SU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK3ByaXZhdGU6CisgICAgQ29tbWFuZERv
bWFpbkJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiwgQ29tbWFuZERvbWFpbkJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXIqIG1fYWdlbnQgeyBudWxscHRyIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRl
IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisK
KyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyNpbmNsdWRlICJU
ZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCisjZW5kaWYgLy8gRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitD
b21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+Q29tbWFuZERvbWFpbkJhY2tl
bmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQorCitSZWY8Q29tbWFuZERvbWFpbkJhY2tlbmREaXNw
YXRjaGVyPiBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShCYWNrZW5kRGlz
cGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIqIGFnZW50KQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENvbW1hbmREb21h
aW5CYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKK30KKworQ29t
bWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNo
ZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBDb21tYW5kRG9tYWluQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKKyAgICA6IFN1cHBsZW1lbnRhbEJhY2tlbmRE
aXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQorICAgICwgbV9hZ2VudChhZ2VudCkKK3sKKyAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oIkNvbW1h
bmREb21haW4iX3MsIHRoaXMpOworfQorCit2b2lkIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0
Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8
SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCit7CisgICAgUmVmPENvbW1hbmREb21haW5CYWNrZW5k
RGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CisKKyAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBw
YXJhbWV0ZXJzOworICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJz
KTsKKworICAgIGlmIChtZXRob2QgPT0gImNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlIikgewor
ICAgICAgICBjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShyZXF1ZXN0SWQsIFdURk1vdmUocGFy
YW1ldGVycykpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91
bmQsICInQ29tbWFuZERvbWFpbi4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOworfQor
Cit2b2lkIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Y29tbWFuZFdpdGhFbnVtUmV0
dXJuVmFsdWUobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCit7CisjaWYg
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisgICAgaWYgKG1fYWx0ZXJu
YXRlRGlzcGF0Y2hlcikgeworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmNvbW1hbmRX
aXRoRW51bVJldHVyblZhbHVlKHJlcXVlc3RJZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisj
ZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyAgICBF
cnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpOworICAgIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXI6OlJldHVyblZhbHVlIG91dF9yZXR1cm5WYWx1ZTsKKyAgICBtX2FnZW50LT5jb21tYW5kV2l0
aEVudW1SZXR1cm5WYWx1ZShlcnJvciwgJm91dF9yZXR1cm5WYWx1ZSk7CisKKyAgICBpZiAoIWVy
cm9yLmxlbmd0aCgpKQorICAgICAgICByZXN1bHQtPnNldFN0cmluZygicmV0dXJuVmFsdWUiX3Ms
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShv
dXRfcmV0dXJuVmFsdWUpKTsKKworICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCisgICAgICAgIG1f
YmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0
KSwgZmFsc2UpOworICAgIGVsc2UKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0
UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJy
b3IpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVz
dEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERp
c3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVl
cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPHd0
Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVz
cGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBGcm9udGVuZFJvdXRlcjsKKworY2xhc3MgRXZlbnRE
b21haW5Gcm9udGVuZERpc3BhdGNoZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwor
cHVibGljOgorICAgIEV2ZW50RG9tYWluRnJvbnRlbmREaXNwYXRjaGVyKEZyb250ZW5kUm91dGVy
JiBmcm9udGVuZFJvdXRlcikgOiBtX2Zyb250ZW5kUm91dGVyKGZyb250ZW5kUm91dGVyKSB7IH0K
KyAgICAgICAgLy8gTmFtZWQgYWZ0ZXIgcGFyYW1ldGVyICdwYXJhbWV0ZXInIHdoaWxlIGdlbmVy
YXRpbmcgY29tbWFuZC9ldmVudCBldmVudFdpdGhFbnVtUGFyYW1ldGVyLgorICAgICAgICBlbnVt
IGNsYXNzIFBhcmFtZXRlciB7CisgICAgICAgICAgICBTaGFyZWQgPSAwLAorICAgICAgICAgICAg
QmxhY2sgPSA0LAorICAgICAgICAgICAgV2hpdGUgPSA1LAorICAgICAgICB9OyAvLyBlbnVtIGNs
YXNzIFBhcmFtZXRlcgorICAgIHZvaWQgZXZlbnRXaXRoRW51bVBhcmFtZXRlcihQYXJhbWV0ZXIg
cGFyYW1ldGVyKTsKK3ByaXZhdGU6CisgICAgRnJvbnRlbmRSb3V0ZXImIG1fZnJvbnRlbmRSb3V0
ZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEZy
b250ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0
Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMu
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordm9pZCBF
dmVudERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcjo6ZXZlbnRXaXRoRW51bVBhcmFtZXRlcihQYXJh
bWV0ZXIgcGFyYW1ldGVyKQoreworICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0g
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRo
b2QiX3MsICJFdmVudERvbWFpbi5ldmVudFdpdGhFbnVtUGFyYW1ldGVyIl9zKTsKKyAgICBSZWY8
SlNPTjo6T2JqZWN0PiBwYXJhbXNPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAg
IHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJwYXJhbWV0ZXIiX3MsIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShwYXJhbWV0ZXIpKTsKKyAgICBq
c29uTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiX3MsIFdURk1vdmUocGFyYW1zT2JqZWN0KSk7
CisKKyAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3Ry
aW5nKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBU
ZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bE9iamVjdHMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVz
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVz
Lmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7
CisKKworCituYW1lc3BhY2UgUHJvdG9jb2wgeworCisKKworLy8gRm9yd2FyZCBkZWNsYXJhdGlv
bnMuCituYW1lc3BhY2UgVHlwZURvbWFpbiB7CitlbnVtIGNsYXNzIFR5cGVEb21haW5FbnVtOwor
fSAvLyBUeXBlRG9tYWluCisvLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCisKKworCisK
K25hbWVzcGFjZSBUZXN0SGVscGVycyB7CisKK1N0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShp
bnQgY29kZSk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRFbnVtQ29uc3RhbnRW
YWx1ZShUIGVudW1WYWx1ZSkKK3sKKyAgICByZXR1cm4gZ2V0RW51bUNvbnN0YW50VmFsdWUoc3Rh
dGljX2Nhc3Q8aW50PihlbnVtVmFsdWUpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBl
cnMKKworbmFtZXNwYWNlIFR5cGVEb21haW4geworLyogICovCitlbnVtIGNsYXNzIFR5cGVEb21h
aW5FbnVtIHsKKyAgICBTaGFyZWQgPSAwLAorICAgIFJlZCA9IDEsCisgICAgR3JlZW4gPSAyLAor
ICAgIEJsdWUgPSAzLAorfTsgLy8gZW51bSBjbGFzcyBUeXBlRG9tYWluRW51bQorfSAvLyBUeXBl
RG9tYWluCisKKworCituYW1lc3BhY2UgVGVzdEhlbHBlcnMgeworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBQcm90b2NvbEVudW1UeXBlPgorT3B0aW9uYWw8UHJvdG9jb2xFbnVtVHlwZT4gcGFyc2VFbnVt
VmFsdWVGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYpOworCisvLyBFbnVtcyBpbiB0aGUgJ1R5cGVE
b21haW4nIERvbWFpbgordGVtcGxhdGU8PgorT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6
VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW0+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNw
ZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51bT4oY29uc3QgU3RyaW5n
Jik7CisKK30gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCisKK30gLy8gbmFtZXNwYWNlIFByb3Rv
Y29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCituYW1lc3BhY2UgV1RGIHsKKwordGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOworCisvLyBIYXNoIGRlY2xhcmF0
aW9ucyBpbiB0aGUgJ1R5cGVEb21haW4nIERvbWFpbgordGVtcGxhdGU8Pgorc3RydWN0IERlZmF1
bHRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46OlR5cGVEb21haW5FbnVtPiB7
CisgICAgdHlwZWRlZiBJbnRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46OlR5
cGVEb21haW5FbnVtPiBIYXNoOworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisjIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
T2JqZWN0cy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVl
cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisKKyNpbmNs
dWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25h
bWVzcGFjZSBJbnNwZWN0b3IgeworCituYW1lc3BhY2UgUHJvdG9jb2wgeworCituYW1lc3BhY2Ug
VGVzdEhlbHBlcnMgeworCitzdGF0aWMgY29uc3QgY2hhciogY29uc3QgZW51bV9jb25zdGFudF92
YWx1ZXNbXSA9IHsKKyAgICAic2hhcmVkIiwKKyAgICAicmVkIiwKKyAgICAiZ3JlZW4iLAorICAg
ICJibHVlIiwKKyAgICAiYmxhY2siLAorICAgICJ3aGl0ZSIsCisgICAgImN5YW4iLAorICAgICJt
YWdlbnRhIiwKKyAgICAieWVsbG93IiwKK307CisKK1N0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1
ZShpbnQgY29kZSkgeworICAgIHJldHVybiBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb2RlXTsKK30K
KworLy8gRW51bXMgaW4gdGhlICdUeXBlRG9tYWluJyBEb21haW4KK3RlbXBsYXRlPD4KK09wdGlv
bmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46OlR5cGVEb21haW5FbnVtPiBwYXJz
ZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlw
ZURvbWFpbkVudW0+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCit7CisgICAgc3RhdGlj
IGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0geworICAgICAgICAoc2l6ZV90KUluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46OlR5cGVEb21haW5FbnVtOjpTaGFyZWQsCisgICAg
ICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVu
dW06OlJlZCwKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWlu
OjpUeXBlRG9tYWluRW51bTo6R3JlZW4sCisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90
b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW06OkJsdWUsCisgICAgfTsKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IDQ7ICsraSkKKyAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09
IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKKyAgICAgICAgICAgIHJl
dHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW0pY29u
c3RhbnRWYWx1ZXNbaV07CisKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCisKK30gLy8g
bmFtZXNwYWNlIFRlc3RIZWxwZXJzCisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmpl
Y3RzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJz
LmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbmNs
dWRlIDx3dGYvUmV0YWluUHRyLmg+CisKK0Bwcm90b2NvbCBUZXN0UHJvdG9jb2xDb21tYW5kRG9t
YWluRG9tYWluSGFuZGxlcjsKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworY2xhc3MgT2Jq
Q0luc3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBB
bHRlcm5hdGVDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIgeworICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIE9iakNJbnNwZWN0b3JDb21tYW5kRG9tYWluQmFj
a2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sQ29tbWFuZERvbWFpbkRvbWFpbkhhbmRsZXI+
IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KKyAgICB2b2lkIGNvbW1hbmRXaXRo
RW51bVJldHVyblZhbHVlKGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKK3ByaXZhdGU6CisgICAgUmV0
YWluUHRyPGlkPFRlc3RQcm90b2NvbENvbW1hbmREb21haW5Eb21haW5IYW5kbGVyPj4gbV9kZWxl
Z2F0ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBlbnVtLXZhbHVlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2Vu
ZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9KU09O
VmFsdWVzLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit2b2lkIE9iakNJbnNwZWN0b3JD
b21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVl
KGxvbmcgcmVxdWVzdElkKQoreworICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVj
dG9yOkBzZWxlY3Rvcihjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZVdpdGhFcnJvckNhbGxiYWNr
OnN1Y2Nlc3NDYWxsYmFjazopXSkgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBv
cnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZv
dW5kLCAiJ0NvbW1hbmREb21haW4uY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUnIHdhcyBub3Qg
Zm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9y
cygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4o
TlNTdHJpbmcgKmVycm9yKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFBy
b3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVy
cm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsK
KyAgICB9OworCisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihUZXN0UHJvdG9jb2xDb21tYW5k
RG9tYWluQ29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWVSZXR1cm5WYWx1ZSByZXR1cm5WYWx1ZSkg
eworICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHRPYmplY3QgPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOworICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygicmV0dXJuVmFsdWUi
X3MsIHRvUHJvdG9jb2xTdHJpbmcocmV0dXJuVmFsdWUpKTsKKyAgICAgICAgYmFja2VuZERpc3Bh
dGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHRPYmplY3QpLCBm
YWxzZSk7CisgICAgfTsKKworICAgIFttX2RlbGVnYXRlIGNvbW1hbmRXaXRoRW51bVJldHVyblZh
bHVlV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vz
c0NhbGxiYWNrXTsKK30KKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgorCitfX2F0
dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3Rv
Y29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWlu
LCBzZXR0ZXI9c2V0Q29tbWFuZERvbWFpbkhhbmRsZXI6KSBpZDxUZXN0UHJvdG9jb2xDb21tYW5k
RG9tYWluRG9tYWluSGFuZGxlcj4gY29tbWFuZERvbWFpbkhhbmRsZXI7CitAcHJvcGVydHkgKG5v
bmF0b21pYywgcmVhZG9ubHkpIFRlc3RQcm90b2NvbEV2ZW50RG9tYWluRG9tYWluRXZlbnREaXNw
YXRjaGVyICpldmVudERvbWFpbkV2ZW50RGlzcGF0Y2hlcjsKK0BlbmQKKworCisjIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbi5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGVudW0tdmFsdWVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgorCisjaW1wb3J0ICJU
ZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3Bh
dGNoZXJzLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVB
Z2VudC5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250
cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVycy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVt
ZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgoreworICAgIEF1Z21lbnRhYmxlSW5z
cGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7CisgICAgaWQ8VGVzdFByb3RvY29sQ29tbWFu
ZERvbWFpbkRvbWFpbkhhbmRsZXI+IF9jb21tYW5kRG9tYWluSGFuZGxlcjsKKyAgICBUZXN0UHJv
dG9jb2xFdmVudERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqX2V2ZW50RG9tYWluRXZlbnRE
aXNwYXRjaGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdt
ZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1
cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NF
UlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVy
biBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbX2NvbW1hbmREb21haW5IYW5k
bGVyIHJlbGVhc2VdOworICAgIFtfZXZlbnREb21haW5FdmVudERpc3BhdGNoZXIgcmVsZWFzZV07
CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistICh2b2lkKXNldENvbW1hbmREb21haW5IYW5k
bGVyOihpZDxUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluRG9tYWluSGFuZGxlcj4paGFuZGxlcgor
eworICAgIGlmIChoYW5kbGVyID09IF9jb21tYW5kRG9tYWluSGFuZGxlcikKKyAgICAgICAgcmV0
dXJuOworCisgICAgW19jb21tYW5kRG9tYWluSGFuZGxlciByZWxlYXNlXTsKKyAgICBfY29tbWFu
ZERvbWFpbkhhbmRsZXIgPSBbaGFuZGxlciByZXRhaW5dOworCisgICAgYXV0byBhbHRlcm5hdGVE
aXNwYXRjaGVyID0gbWFrZVVuaXF1ZTxPYmpDSW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tlbmRE
aXNwYXRjaGVyPihoYW5kbGVyKTsKKyAgICBhdXRvIGFsdGVybmF0ZUFnZW50ID0gbWFrZVVuaXF1
ZTxBbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudDxDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNo
ZXIsIEFsdGVybmF0ZUNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4+KCJDb21tYW5kRG9t
YWluIl9zLCAqX2NvbnRyb2xsZXIsIFdURk1vdmUoYWx0ZXJuYXRlRGlzcGF0Y2hlcikpOworICAg
IF9jb250cm9sbGVyLT5hcHBlbmRFeHRyYUFnZW50KFdURk1vdmUoYWx0ZXJuYXRlQWdlbnQpKTsK
K30KKworLSAoaWQ8VGVzdFByb3RvY29sQ29tbWFuZERvbWFpbkRvbWFpbkhhbmRsZXI+KWNvbW1h
bmREb21haW5IYW5kbGVyCit7CisgICAgcmV0dXJuIF9jb21tYW5kRG9tYWluSGFuZGxlcjsKK30K
KworLSAoVGVzdFByb3RvY29sRXZlbnREb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKilldmVu
dERvbWFpbkV2ZW50RGlzcGF0Y2hlcgoreworICAgIGlmICghX2V2ZW50RG9tYWluRXZlbnREaXNw
YXRjaGVyKQorICAgICAgICBfZXZlbnREb21haW5FdmVudERpc3BhdGNoZXIgPSBbW1Rlc3RQcm90
b2NvbEV2ZW50RG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyIGFsbG9jXSBpbml0V2l0aENvbnRy
b2xsZXI6X2NvbnRyb2xsZXJdOworICAgIHJldHVybiBfZXZlbnREb21haW5FdmVudERpc3BhdGNo
ZXI7Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRp
b24ubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0K
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90
b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5o
IgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3Rv
cjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbEV2ZW50RG9tYWluRG9tYWluRXZlbnRE
aXNwYXRjaGVyCit7CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJv
bGxlcjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFi
bGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCit7CisgICAgc2VsZiA9IFtzdXBlciBp
bml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNv
bnRyb2xsZXIpOworICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKKyAgICByZXR1cm4gc2Vs
ZjsKK30KKworLSAodm9pZClldmVudFdpdGhFbnVtUGFyYW1ldGVyV2l0aFBhcmFtZXRlcjooVGVz
dFByb3RvY29sRXZlbnREb21haW5FdmVudFdpdGhFbnVtUGFyYW1ldGVyUGFyYW1ldGVyKXBhcmFt
ZXRlcgoreworICAgIGNvbnN0IEZyb250ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29udHJvbGxlci0+
ZnJvbnRlbmRSb3V0ZXIoKTsKKworICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0g
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRo
b2QiX3MsICJFdmVudERvbWFpbi5ldmVudFdpdGhFbnVtUGFyYW1ldGVyIl9zKTsKKyAgICBSZWY8
SlNPTjo6T2JqZWN0PiBwYXJhbXNPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAg
IHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJwYXJhbWV0ZXIiX3MsIHRvUHJvdG9jb2xTdHJpbmco
cGFyYW1ldGVyKSk7CisgICAganNvbk1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIl9zLCBXVEZN
b3ZlKHBhcmFtc09iamVjdCkpOworICAgIHJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRv
SlNPTlN0cmluZygpKTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
RXZlbnREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPEZvdW5kYXRpb24v
Rm91bmRhdGlvbi5oPgorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2Jq
ZWN0Lmg+CisKKworCisKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29s
VHlwZURvbWFpbkVudW0pIHsKKyAgICBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bVNoYXJlZCwK
KyAgICBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bVJlZCwKKyAgICBUZXN0UHJvdG9jb2xUeXBl
RG9tYWluRW51bUdyZWVuLAorICAgIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtQmx1ZSwKK307
CisKKworCitAcHJvdG9jb2wgVGVzdFByb3RvY29sQ29tbWFuZERvbWFpbkRvbWFpbkhhbmRsZXIg
PE5TT2JqZWN0PgorQG9wdGlvbmFsCistICh2b2lkKWNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVl
V2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNr
IHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKShUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluQ29tbWFu
ZFdpdGhFbnVtUmV0dXJuVmFsdWVSZXR1cm5WYWx1ZSByZXR1cm5WYWx1ZSkpc3VjY2Vzc0NhbGxi
YWNrOworQGVuZAorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0Bp
bnRlcmZhY2UgVGVzdFByb3RvY29sRXZlbnREb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgOiBO
U09iamVjdAorLSAodm9pZClldmVudFdpdGhFbnVtUGFyYW1ldGVyV2l0aFBhcmFtZXRlcjooVGVz
dFByb3RvY29sRXZlbnREb21haW5FdmVudFdpdGhFbnVtUGFyYW1ldGVyUGFyYW1ldGVyKXBhcmFt
ZXRlcjsKK0BlbmQKKworCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENv
bXBhdGliaWxpdHlPYmplY3RzLmg+CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKKwor
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAi
VGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1
ZXMuaD4KKworQGludGVyZmFjZSBUZXN0UHJvdG9jb2xFdmVudERvbWFpbkRvbWFpbkV2ZW50RGlz
cGF0Y2hlciAoUHJpdmF0ZSkKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KElu
c3BlY3Rvcjo6QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyOworQGVu
ZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorCisjIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCA8V2Vi
SW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgorCituYW1lc3BhY2UgSW5z
cGVjdG9yIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgorT3B0aW9uYWw8T2Jq
Q0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7CisKKwor
aW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVt
IHZhbHVlKQoreworICAgIHN3aXRjaCh2YWx1ZSkgeworICAgIGNhc2UgVGVzdFByb3RvY29sVHlw
ZURvbWFpbkVudW1TaGFyZWQ6CisgICAgICAgIHJldHVybiAic2hhcmVkIl9zOworICAgIGNhc2Ug
VGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1SZWQ6CisgICAgICAgIHJldHVybiAicmVkIl9zOwor
ICAgIGNhc2UgVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1HcmVlbjoKKyAgICAgICAgcmV0dXJu
ICJncmVlbiJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtQmx1ZToKKyAg
ICAgICAgcmV0dXJuICJibHVlIl9zOworICAgIH0KK30KKwordGVtcGxhdGU8PgoraW5saW5lIE9w
dGlvbmFsPFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gInNoYXJlZCIpCisgICAgICAg
IHJldHVybiBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bVNoYXJlZDsKKyAgICBpZiAodmFsdWUg
PT0gInJlZCIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bVJlZDsK
KyAgICBpZiAodmFsdWUgPT0gImdyZWVuIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFR5
cGVEb21haW5FbnVtR3JlZW47CisgICAgaWYgKHZhbHVlID09ICJibHVlIikKKyAgICAgICAgcmV0
dXJuIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtQmx1ZTsKKyAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51
bS12YWx1ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKworI2ltcG9ydCAiVGVz
dFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCisjaW1wb3J0
IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorCit1c2luZyBu
YW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucyAoVHlwZURvbWFpbkRvbWFpbikKKworKyAodm9pZClfcGFyc2VUeXBlRG9tYWluRW51bToo
TlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisKK0BlbmQKKwor
QGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoVHlwZURvbWFpbkRv
bWFpbikKKworKyAodm9pZClfcGFyc2VUeXBlRG9tYWluRW51bTooTlNOdW1iZXIgKiopb3V0VmFs
dWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JB
RF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBjbGFzc10pOworICAgIE9wdGlvbmFsPFRlc3RQcm90
b2NvbFR5cGVEb21haW5FbnVtPiByZXN1bHQgPSBJbnNwZWN0b3I6OmZyb21Qcm90b2NvbFN0cmlu
ZzxUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bT4ocGF5bG9hZCk7CisgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9CQURfRU5VTV9WQUxVRShyZXN1bHQsIEAiVHlwZURvbWFpbkVudW0iKTsKKyAgICAq
b3V0VmFsdWUgPSBAKHJlc3VsdC52YWx1ZSgpKTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xUeXBlcy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0t
dmFsdWVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09O
T2JqZWN0UHJpdmF0ZS5oPgorI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbXBvcnQgPHd0
Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworCisKKyMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9ldmVudC10YXJnZXRU
eXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9ldmVudC10YXJn
ZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJlc3VsdApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uODE3ZTNhNTZjYTYKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNv
bi1yZXN1bHQKQEAgLTAsMCArMSwxMDMwIEBACisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFj
a2VuZENvbW1hbmRzLmpzCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnQt
dGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisvLyBEb21haW4KK0luc3BlY3RvckJh
Y2tlbmQucmVnaXN0ZXJEb21haW4oIkRvbWFpbiIsIG51bGwpOworSW5zcGVjdG9yQmFja2VuZC5y
ZWdpc3RlckNvbW1hbmQoIkRvbWFpbi5Db21tYW5kIiwgbnVsbCwgW10sIFtdKTsKK0luc3BlY3Rv
ckJhY2tlbmQucmVnaXN0ZXJFdmVudCgiRG9tYWluLkV2ZW50IiwgWyJwYWdlIiwgIndvcmtlciJd
LCBbXSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluRGlzcGF0Y2hlciA9IEluc3Bl
Y3RvckJhY2tlbmQucmVnaXN0ZXJEaXNwYXRjaGVyLmJpbmQoSW5zcGVjdG9yQmFja2VuZCwgIkRv
bWFpbiIpOworSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiRG9tYWluIiwgWyJwYWdl
Il0pOworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRl
YnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorCituYW1lc3BhY2UgSW5zcGVj
dG9yIHsKKworY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAg
IHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRp
c3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0K
KyAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVy
biBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Citwcml2YXRlOgorICAgIFJlZlB0cjxCYWNr
ZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKK307CisKKworY2xhc3MgQWx0ZXJu
YXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgfkFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNw
YXRjaGVyKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIENvbW1hbmQobG9uZyBjYWxsSWQpID0gMDsK
K307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0VHlw
ZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1l
c3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKKyNpZiBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK2NsYXNzIEFsdGVybmF0ZURv
bWFpbkJhY2tlbmREaXNwYXRjaGVyOworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQorCitjbGFzcyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIg
eworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBDb21tYW5kKEVycm9yU3RyaW5nJikgPSAwOwor
cHJvdGVjdGVkOgorICAgIHZpcnR1YWwgfkRvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigp
OworfTsKKworY2xhc3MgRG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3Vw
cGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8RG9t
YWluQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIERvbWFpbkJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0
SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZp
bmFsOworcHJpdmF0ZToKKyAgICB2b2lkIENvbW1hbmQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxK
U09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCitwdWJsaWM6CisgICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVy
KEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7
IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KK3ByaXZhdGU6
CisgICAgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIqIG1fYWx0ZXJuYXRlRGlzcGF0
Y2hlciB7IG51bGxwdHIgfTsKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKK3ByaXZhdGU6CisgICAgRG9tYWluQmFja2VuZERpc3BhdGNoZXIoQmFja2Vu
ZERpc3BhdGNoZXImLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICBEb21h
aW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQgeyBudWxscHRyIH07Cit9OworCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmct
ZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RCYWNrZW5k
RGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250
ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYv
TmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpZiBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyNpbmNsdWRlICJUZXN0QWx0
ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitEb21haW5C
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5Eb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIo
KSB7IH0KKworUmVmPERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBEb21haW5CYWNrZW5kRGlzcGF0
Y2hlcjo6Y3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgRG9tYWlu
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsK
K30KKworRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkRvbWFpbkJhY2tlbmREaXNwYXRjaGVyKEJh
Y2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgRG9tYWluQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyKiBhZ2VudCkKKyAgICA6IFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJh
Y2tlbmREaXNwYXRjaGVyKQorICAgICwgbV9hZ2VudChhZ2VudCkKK3sKKyAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oIkRvbWFpbiJfcywgdGhpcyk7
Cit9CisKK3ZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVz
dElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQor
eworICAgIFJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CisKKyAg
ICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOworICAgIG1lc3NhZ2UtPmdldE9iamVj
dCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsKKworICAgIGlmIChtZXRob2QgPT0gIkNvbW1hbmQi
KSB7CisgICAgICAgIENvbW1hbmQocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFBy
b3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi4i
ICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOworfQorCit2b2lkIERvbWFpbkJhY2tlbmRE
aXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYm
KQoreworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorICAgIGlm
IChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVy
LT5Db21tYW5kKHJlcXVlc3RJZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYgLy8g
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyAgICBFcnJvclN0cmlu
ZyBlcnJvcjsKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOworICAgIG1fYWdlbnQtPkNvbW1hbmQoZXJyb3IpOworCisgICAgaWYgKCFlcnJvci5s
ZW5ndGgoKSkKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVl
c3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7CisgICAgZWxzZQorICAgICAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2
ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
KworIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4g
RmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBl
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8d3Rm
L0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNw
YWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEZyb250ZW5kUm91dGVyOworCitjbGFzcyBEb21haW5G
cm9udGVuZERpc3BhdGNoZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGlj
OgorICAgIERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcihGcm9udGVuZFJvdXRlciYgZnJvbnRlbmRS
b3V0ZXIpIDogbV9mcm9udGVuZFJvdXRlcihmcm9udGVuZFJvdXRlcikgeyB9CisgICAgdm9pZCBF
dmVudCgpOworcHJpdmF0ZToKKyAgICBGcm9udGVuZFJvdXRlciYgbV9mcm9udGVuZFJvdXRlcjsK
K307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVy
cy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudC10YXJnZXRUeXBl
LW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJU
ZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisK
K25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit2b2lkIERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcjo6
RXZlbnQoKQoreworICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJE
b21haW4uRXZlbnQiX3MpOworCisgICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1l
c3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisK
KyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgor
I2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisK
KworbmFtZXNwYWNlIFByb3RvY29sIHsKKworCisKKworCisKKworCisKK30gLy8gbmFtZXNwYWNl
IFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xPYmplY3RzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMu
Y3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1t
YXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVz
dFByb3RvY29sT2JqZWN0cy5oIgorCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNw
YWNlIFByb3RvY29sIHsKKworCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3Bw
CisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmct
ZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworQHBy
b3RvY29sIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI7CisKK25hbWVzcGFjZSBJbnNw
ZWN0b3IgeworCisKK2NsYXNzIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlciBm
aW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciB7CisgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgT2JqQ0luc3BlY3RvckRvbWFpbkJh
Y2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IGhhbmRs
ZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KKyAgICB2b2lkIENvbW1hbmQobG9uZyByZXF1
ZXN0SWQpIGZpbmFsOworcHJpdmF0ZToKKyAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sRG9t
YWluRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAor
CisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1k
b21haW4tZGVidWdnYWJsZVR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJh
Y2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIK
KyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbmNsdWRlIDx3dGYv
SlNPTlZhbHVlcy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordm9pZCBPYmpDSW5zcGVj
dG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9uZyByZXF1ZXN0SWQpCit7Cisg
ICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKENvbW1hbmRX
aXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsKKyAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRj
aGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uQ29tbWFuZCcgd2FzIG5vdCBmb3VuZCJfcyk7
CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAq
ZXJyb3IpIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJv
cihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgIH07CisK
KyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigp
LT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7
CisgICAgfTsKKworICAgIFttX2RlbGVnYXRlIENvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazplcnJv
ckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOworfQorCisKK30gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmRE
aXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
bi5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1t
YXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29s
Lmg+CisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFj
ZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKK0Bwcm9wZXJ0eSAobm9uYXRv
bWljLCByZXRhaW4sIHNldHRlcj1zZXREb21haW5IYW5kbGVyOikgaWQ8VGVzdFByb3RvY29sRG9t
YWluRG9tYWluSGFuZGxlcj4gZG9tYWluSGFuZGxlcjsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBy
ZWFkb25seSkgVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyICpkb21haW5F
dmVudERpc3BhdGNoZXI7CitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25m
aWd1cmF0aW9uLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24u
bW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudC10YXJnZXRUeXBlLW1h
dGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24u
aCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbXBvcnQgIlRlc3RQcm90
b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJu
YXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRh
YmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3Bl
Y3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KK3sKKyAg
ICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworICAgIGlkPFRl
c3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IF9kb21haW5IYW5kbGVyOworICAgIFRlc3RQ
cm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqX2RvbWFpbkV2ZW50RGlzcGF0Y2hl
cjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJ
bnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0
XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNvbnRy
b2xsZXIpOworICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKKyAgICByZXR1cm4gc2VsZjsK
K30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgW19kb21haW5IYW5kbGVyIHJlbGVhc2VdOwor
ICAgIFtfZG9tYWluRXZlbnREaXNwYXRjaGVyIHJlbGVhc2VdOworICAgIFtzdXBlciBkZWFsbG9j
XTsKK30KKworLSAodm9pZClzZXREb21haW5IYW5kbGVyOihpZDxUZXN0UHJvdG9jb2xEb21haW5E
b21haW5IYW5kbGVyPiloYW5kbGVyCit7CisgICAgaWYgKGhhbmRsZXIgPT0gX2RvbWFpbkhhbmRs
ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIFtfZG9tYWluSGFuZGxlciByZWxlYXNlXTsKKyAg
ICBfZG9tYWluSGFuZGxlciA9IFtoYW5kbGVyIHJldGFpbl07CisKKyAgICBhdXRvIGFsdGVybmF0
ZURpc3BhdGNoZXIgPSBtYWtlVW5pcXVlPE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0
Y2hlcj4oaGFuZGxlcik7CisgICAgYXV0byBhbHRlcm5hdGVBZ2VudCA9IG1ha2VVbmlxdWU8QWx0
ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8RG9tYWluQmFja2VuZERpc3BhdGNoZXIsIEFsdGVybmF0
ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyPj4oIkRvbWFpbiJfcywgKl9jb250cm9sbGVyLCBXVEZN
b3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIpKTsKKyAgICBfY29udHJvbGxlci0+YXBwZW5kRXh0cmFB
Z2VudChXVEZNb3ZlKGFsdGVybmF0ZUFnZW50KSk7Cit9CisKKy0gKGlkPFRlc3RQcm90b2NvbERv
bWFpbkRvbWFpbkhhbmRsZXI+KWRvbWFpbkhhbmRsZXIKK3sKKyAgICByZXR1cm4gX2RvbWFpbkhh
bmRsZXI7Cit9CisKKy0gKFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAq
KWRvbWFpbkV2ZW50RGlzcGF0Y2hlcgoreworICAgIGlmICghX2RvbWFpbkV2ZW50RGlzcGF0Y2hl
cikKKyAgICAgICAgX2RvbWFpbkV2ZW50RGlzcGF0Y2hlciA9IFtbVGVzdFByb3RvY29sRG9tYWlu
RG9tYWluRXZlbnREaXNwYXRjaGVyIGFsbG9jXSBpbml0V2l0aENvbnRyb2xsZXI6X2NvbnRyb2xs
ZXJdOworICAgIHJldHVybiBfZG9tYWluRXZlbnREaXNwYXRjaGVyOworfQorCitAZW5kCisKKwor
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJs
ZVR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisj
aW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5h
bWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xEb21haW5E
b21haW5FdmVudERpc3BhdGNoZXIKK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xs
ZXIqIF9jb250cm9sbGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVy
OihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxm
ID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAg
ICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAg
IHJldHVybiBzZWxmOworfQorCistICh2b2lkKUV2ZW50Cit7CisgICAgY29uc3QgRnJvbnRlbmRS
b3V0ZXImIHJvdXRlciA9IF9jb250cm9sbGVyLT5mcm9udGVuZFJvdXRlcigpOworCisgICAgUmVm
PEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAg
IGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7Cisg
ICAgcm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworfQorCitA
ZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisK
KyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBl
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9y
dCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQ
cm90b2NvbEpTT05PYmplY3QuaD4KKworCisKKworCisKKworCitAcHJvdG9jb2wgVGVzdFByb3Rv
Y29sRG9tYWluRG9tYWluSGFuZGxlciA8TlNPYmplY3Q+CitAb3B0aW9uYWwKKy0gKHZvaWQpQ29t
bWFuZFdpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxs
YmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikodm9pZCkpc3VjY2Vzc0NhbGxiYWNrOworQGVu
ZAorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2Ug
VGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyIDogTlNPYmplY3QKKy0gKHZv
aWQpRXZlbnQ7CitAZW5kCisKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVp
bGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5o
CisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVi
dWdnYWJsZVR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05P
YmplY3RQcml2YXRlLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3Bl
Y3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK0BpbnRlcmZh
Y2UgVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyIChQcml2YXRlKQorLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooSW5zcGVjdG9yOjpBdWdtZW50YWJsZUlu
c3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXI7CitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRh
cmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgi
CisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+CisK
K25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+
CitPcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcm
IHZhbHVlKTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2
ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9y
dCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVBy
b3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsK
KworCisKKworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1t
CisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVn
Z2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xK
U09OT2JqZWN0UHJpdmF0ZS5oPgorI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbXBvcnQg
PHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2V2ZW50cy13aXRoLW9w
dGlvbmFsLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1l
dGVycy5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u
ODNhYmRjNzdiMjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1l
dGVycy5qc29uLXJlc3VsdApAQCAtMCwwICsxLDExODIgQEAKKyMjIyBCZWdpbiBGaWxlOiBJbnNw
ZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworLy8gRGF0YWJhc2UKK0luc3BlY3RvckJhY2tlbmQu
cmVnaXN0ZXJEb21haW4oIkRhdGFiYXNlIiwgbnVsbCk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lz
dGVyRXZlbnQoIkRhdGFiYXNlLmRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMiLCBudWxsLCBb
ImNvbHVtbk5hbWVzIiwgIm5vdGVzIiwgInRpbWVzdGFtcCIsICJ2YWx1ZXMiLCAicGF5bG9hZCIs
ICJzcWxFcnJvciIsICJzY3JlZW5Db2xvciIsICJhbHRlcm5hdGVDb2xvcnMiLCAicHJpbnRDb2xv
ciJdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudCgiRGF0YWJhc2UuZGlkRXhlY3V0
ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIiwgbnVsbCwgWyJjb2x1bW5OYW1lcyIsICJub3RlcyIsICJ0
aW1lc3RhbXAiLCAidmFsdWVzIiwgInBheWxvYWQiLCAic3FsRXJyb3IiLCAic2NyZWVuQ29sb3Ii
LCAiYWx0ZXJuYXRlQ29sb3JzIiwgInByaW50Q29sb3IiXSk7CitJbnNwZWN0b3JCYWNrZW5kLnJl
Z2lzdGVyRGF0YWJhc2VEaXNwYXRjaGVyID0gSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRpc3Bh
dGNoZXIuYmluZChJbnNwZWN0b3JCYWNrZW5kLCAiRGF0YWJhc2UiKTsKK0luc3BlY3RvckJhY2tl
bmQuYWN0aXZhdGVEb21haW4oIkRhdGFiYXNlIiwgbnVsbCk7CisjIyMgRW5kIEZpbGU6IEluc3Bl
Y3RvckJhY2tlbmRDb21tYW5kcy5qcworCisjIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZl
bnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5o
IgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+
CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKwor
bmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVy
IHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5k
RGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3Zl
KGRpc3BhdGNoZXIpOyB9CisgICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVy
KCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQorcHJpdmF0ZToK
KyAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Cit9Owor
CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQ
RUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRl
QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0
Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9w
dGlvbmFsLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMu
aCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9y
IHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKKworCit9IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvSlNP
TlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQorI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNl
bmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworbmFtZXNw
YWNlIEluc3BlY3RvciB7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVu
ZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVz
dEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3Mg
RnJvbnRlbmRSb3V0ZXI7CisKK2NsYXNzIERhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyIHsKKyAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBEYXRhYmFzZUZyb250ZW5k
RGlzcGF0Y2hlcihGcm9udGVuZFJvdXRlciYgZnJvbnRlbmRSb3V0ZXIpIDogbV9mcm9udGVuZFJv
dXRlcihmcm9udGVuZFJvdXRlcikgeyB9CisgICAgdm9pZCBkaWRFeGVjdXRlT3B0aW9uYWxQYXJh
bWV0ZXJzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IGNvbHVtbk5hbWVzLCBjb25zdCBT
dHJpbmcqIG5vdGVzLCBjb25zdCBkb3VibGUqIHRpbWVzdGFtcCwgUmVmUHRyPEpTT046Ok9iamVj
dD4gdmFsdWVzLCBSZWZQdHI8SlNPTjo6VmFsdWU+IHBheWxvYWQsIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVycm9yLCBjb25zdCBTdHJpbmcqIHNjcmVl
bkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4g
YWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcqIHByaW50Q29sb3IpOworICAgIHZvaWQgZGlk
RXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+
IGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiB2YWx1ZXMsIFJlZlB0cjxKU09OOjpWYWx1ZT4gcGF5bG9hZCwgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gc3FsRXJyb3IsIGNvbnN0
IFN0cmluZyYgc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFz
ZTo6Q29sb3JMaXN0PiBhbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgcHJpbnRDb2xvcik7
Citwcml2YXRlOgorICAgIEZyb250ZW5kUm91dGVyJiBtX2Zyb250ZW5kUm91dGVyOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3Bh
dGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBh
cmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMu
aCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsK
Kwordm9pZCBEYXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hlcjo6ZGlkRXhlY3V0ZU9wdGlvbmFsUGFy
YW1ldGVycyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiBjb2x1bW5OYW1lcywgY29uc3Qg
U3RyaW5nKiBub3RlcywgY29uc3QgZG91YmxlKiB0aW1lc3RhbXAsIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+IHZhbHVlcywgUmVmUHRyPEpTT046OlZhbHVlPiBwYXlsb2FkLCBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBzcWxFcnJvciwgY29uc3QgU3RyaW5nKiBzY3Jl
ZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+
IGFsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nKiBwcmludENvbG9yKQoreworICAgIFJlZjxK
U09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBq
c29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEYXRhYmFzZS5kaWRFeGVjdXRlT3B0
aW9uYWxQYXJhbWV0ZXJzIl9zKTsKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiBwYXJhbXNPYmplY3Qg
PSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGlmIChjb2x1bW5OYW1lcykKKyAgICAgICAg
cGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIGNvbHVtbk5hbWVzKTsKKyAg
ICBpZiAobm90ZXMpCisgICAgICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJub3RlcyJfcywg
Km5vdGVzKTsKKyAgICBpZiAodGltZXN0YW1wKQorICAgICAgICBwYXJhbXNPYmplY3QtPnNldERv
dWJsZSgidGltZXN0YW1wIl9zLCAqdGltZXN0YW1wKTsKKyAgICBpZiAodmFsdWVzKQorICAgICAg
ICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgidmFsdWVzIl9zLCB2YWx1ZXMpOworICAgIGlmIChw
YXlsb2FkKQorICAgICAgICBwYXJhbXNPYmplY3QtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCAqcGF5
bG9hZCk7CisgICAgaWYgKHNxbEVycm9yKQorICAgICAgICBwYXJhbXNPYmplY3QtPnNldE9iamVj
dCgic3FsRXJyb3IiX3MsIHNxbEVycm9yKTsKKyAgICBpZiAoc2NyZWVuQ29sb3IpCisgICAgICAg
IHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgKnNjcmVlbkNvbG9yKTsK
KyAgICBpZiAoYWx0ZXJuYXRlQ29sb3JzKQorICAgICAgICBwYXJhbXNPYmplY3QtPnNldEFycmF5
KCJhbHRlcm5hdGVDb2xvcnMiX3MsIGFsdGVybmF0ZUNvbG9ycyk7CisgICAgaWYgKHByaW50Q29s
b3IpCisgICAgICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCAqcHJp
bnRDb2xvcik7CisgICAganNvbk1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIl9zLCBXVEZNb3Zl
KHBhcmFtc09iamVjdCkpOworCisgICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1l
c3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKK30KKwordm9pZCBEYXRhYmFzZUZyb250ZW5kRGlzcGF0
Y2hlcjo6ZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKFJlZlB0cjxKU09OOjpBcnJheU9m
PFN0cmluZz4+IGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG5vdGVzLCBkb3VibGUgdGltZXN0
YW1wLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiB2YWx1ZXMsIFJlZlB0cjxKU09OOjpWYWx1ZT4gcGF5
bG9hZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gc3FsRXJy
b3IsIGNvbnN0IFN0cmluZyYgc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpEYXRhYmFzZTo6Q29sb3JMaXN0PiBhbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgcHJp
bnRDb2xvcikKK3sKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9i
amVjdDo6Y3JlYXRlKCk7CisgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAi
RGF0YWJhc2UuZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIl9zKTsKKyAgICBSZWY8SlNP
Tjo6T2JqZWN0PiBwYXJhbXNPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIHBh
cmFtc09iamVjdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBjb2x1bW5OYW1lcyk7CisgICAg
cGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBub3Rlcyk7CisgICAgcGFyYW1zT2Jq
ZWN0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgdGltZXN0YW1wKTsKKyAgICBwYXJhbXNPYmpl
Y3QtPnNldE9iamVjdCgidmFsdWVzIl9zLCB2YWx1ZXMpOworICAgIHBhcmFtc09iamVjdC0+c2V0
VmFsdWUoInBheWxvYWQiX3MsIHBheWxvYWQpOworICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0
KCJzcWxFcnJvciJfcywgc3FsRXJyb3IpOworICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJz
Y3JlZW5Db2xvciJfcywgc2NyZWVuQ29sb3IpOworICAgIHBhcmFtc09iamVjdC0+c2V0QXJyYXko
ImFsdGVybmF0ZUNvbG9ycyJfcywgYWx0ZXJuYXRlQ29sb3JzKTsKKyAgICBwYXJhbXNPYmplY3Qt
PnNldFN0cmluZygicHJpbnRDb2xvciJfcywgcHJpbnRDb2xvcik7CisgICAganNvbk1lc3NhZ2Ut
PnNldE9iamVjdCgicGFyYW1zIl9zLCBXVEZNb3ZlKHBhcmFtc09iamVjdCkpOworCisgICAgbV9m
cm9udGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5k
RGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1w
YXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90
b2NvbFR5cGVzLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIElu
c3BlY3RvciB7CisKKworCituYW1lc3BhY2UgUHJvdG9jb2wgeworCisKKworLy8gRm9yd2FyZCBk
ZWNsYXJhdGlvbnMuCituYW1lc3BhY2UgRGF0YWJhc2UgeworY2xhc3MgRXJyb3I7Cit9IC8vIERh
dGFiYXNlCisvLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCisKKworLy8gVHlwZWRlZnMu
CituYW1lc3BhY2UgRGF0YWJhc2UgeworLyogVW5pcXVlIGlkZW50aWZpZXIgb2YgRGF0YWJhc2Ug
b2JqZWN0LiAqLwordHlwZWRlZiBTdHJpbmcgRGF0YWJhc2VJZDsKK3R5cGVkZWYgU3RyaW5nIFBy
aW1hcnlDb2xvcnM7Cit0eXBlZGVmIEpTT046OkFycmF5T2Y8U3RyaW5nPiBDb2xvckxpc3Q7Cit9
IC8vIERhdGFiYXNlCisvLyBFbmQgb2YgdHlwZWRlZnMuCisKK25hbWVzcGFjZSBEYXRhYmFzZSB7
CisvKiBEYXRhYmFzZSBlcnJvci4gKi8KK2NsYXNzIEVycm9yIDogcHVibGljIEpTT046Ok9iamVj
dEJhc2UgeworcHVibGljOgorICAgIGVudW0geworICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCisg
ICAgICAgIE1lc3NhZ2VTZXQgPSAxIDw8IDAsCisgICAgICAgIENvZGVTZXQgPSAxIDw8IDEsCisg
ICAgICAgIEFsbEZpZWxkc1NldCA9IChNZXNzYWdlU2V0IHwgQ29kZVNldCkKKyAgICB9OworCisg
ICAgdGVtcGxhdGU8aW50IFNUQVRFPgorICAgIGNsYXNzIEJ1aWxkZXIgeworICAgIHByaXZhdGU6
CisgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVzdWx0OworCisgICAgICAgIHRlbXBs
YXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwg
U1RFUD4qPih0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXIoUmVmPC8qRXJyb3Iq
L0pTT046Ok9iamVjdD4mJiBvYmplY3QpCisgICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUo
b2JqZWN0KSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0g
Tm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CisgICAgICAg
IH0KKyAgICAgICAgZnJpZW5kIGNsYXNzIEVycm9yOworICAgIHB1YmxpYzoKKworICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgTWVzc2FnZVNldD4mIHNldE1lc3NhZ2UoY29uc3QgU3RyaW5nJiB2YWx1
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE1lc3Nh
Z2VTZXQpLCBwcm9wZXJ0eV9tZXNzYWdlX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXRTdHJpbmcoIm1lc3NhZ2UiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8TWVzc2FnZVNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBDb2RlU2V0PiYgc2V0Q29kZShpbnQgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2RlU2V0KSwgcHJvcGVydHlfY29kZV9hbHJlYWR5
X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcigiY29kZSJfcywgdmFsdWUp
OworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb2RlU2V0PigpOworICAgICAgICB9CisK
KyAgICAgICAgUmVmPEVycm9yPiByZWxlYXNlKCkKKyAgICAgICAgeworICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsK
KyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihFcnJvcikgPT0gc2l6ZW9mKEpTT046
Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsKKworICAgICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4g
anNvblJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgICAgICBhdXRv
IHJlc3VsdCA9IFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPEVycm9yPio+KCZqc29uUmVz
dWx0KSk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgfTsKKwor
ICAgIC8qCisgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgorICAgICAqIFJlZjxFcnJvcj4g
cmVzdWx0ID0gRXJyb3I6OmNyZWF0ZSgpCisgICAgICogICAgIC5zZXRNZXNzYWdlKC4uLikKKyAg
ICAgKiAgICAgLnNldENvZGUoLi4uKQorICAgICAqICAgICAucmVsZWFzZSgpOworICAgICAqLwor
ICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOworICAg
IH0KK307CisKK30gLy8gRGF0YWJhc2UKKworCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisK
K30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmpl
Y3RzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVy
cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisKKyNpbmNs
dWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25h
bWVzcGFjZSBJbnNwZWN0b3IgeworCituYW1lc3BhY2UgUHJvdG9jb2wgeworCisKKworfSAvLyBu
YW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWlu
UHRyLmg+CisKKworCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCit9IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMu
aAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFy
YW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
KyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNo
ZXJzLmgiCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2luY2x1ZGUgIlRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+
CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKwor
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxXZWJJbnNw
ZWN0b3IvVGVzdFByb3RvY29sLmg+CisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZh
dWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QK
K0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgVGVzdFByb3RvY29sRGF0YWJhc2VEb21h
aW5FdmVudERpc3BhdGNoZXIgKmRhdGFiYXNlRXZlbnREaXNwYXRjaGVyOworQGVuZAorCisKKyMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbENv
bmZpZ3VyYXRpb24uaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbXBv
cnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRD
b3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW1wb3J0IDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKwordXNpbmcgbmFt
ZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3Vy
YXRpb24KK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVy
OworICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluRXZlbnREaXNwYXRjaGVyICpfZGF0YWJh
c2VFdmVudERpc3BhdGNoZXI7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xs
ZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgoreworICAgIHNl
bGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOwor
ICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Cisg
ICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIFtfZGF0YWJhc2VF
dmVudERpc3BhdGNoZXIgcmVsZWFzZV07CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistIChU
ZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkV2ZW50RGlzcGF0Y2hlciAqKWRhdGFiYXNlRXZlbnRE
aXNwYXRjaGVyCit7CisgICAgaWYgKCFfZGF0YWJhc2VFdmVudERpc3BhdGNoZXIpCisgICAgICAg
IF9kYXRhYmFzZUV2ZW50RGlzcGF0Y2hlciA9IFtbVGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5F
dmVudERpc3BhdGNoZXIgYWxsb2NdIGluaXRXaXRoQ29udHJvbGxlcjpfY29udHJvbGxlcl07Cisg
ICAgcmV0dXJuIF9kYXRhYmFzZUV2ZW50RGlzcGF0Y2hlcjsKK30KKworQGVuZAorCisKKyMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorCisjIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJ
bnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNp
bXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisK
K0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkV2ZW50RGlzcGF0Y2hl
cgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Cit9
CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVj
dG9yQ29udHJvbGxlciopY29udHJvbGxlcgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Cisg
ICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIEFTU0VSVChjb250cm9sbGVy
KTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9CisK
Ky0gKHZvaWQpZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVyc1dpdGhDb2x1bW5OYW1lczooTlNB
cnJheS8qPE5TU3RyaW5nPiovICoqKWNvbHVtbk5hbWVzIG5vdGVzOihOU1N0cmluZyAqKilub3Rl
cyB0aW1lc3RhbXA6KGRvdWJsZSAqKXRpbWVzdGFtcCB2YWx1ZXM6KFJXSVByb3RvY29sSlNPTk9i
amVjdCAqKil2YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqKXBheWxvYWQg
c3FsRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKiopc3FsRXJyb3Igc2NyZWVuQ29s
b3I6KE5TU3RyaW5nICoqKXNjcmVlbkNvbG9yIGFsdGVybmF0ZUNvbG9yczooTlNBcnJheS8qPE5T
U3RyaW5nPiovICoqKWFsdGVybmF0ZUNvbG9ycyBwcmludENvbG9yOihOU1N0cmluZyAqKilwcmlu
dENvbG9yCit7CisgICAgY29uc3QgRnJvbnRlbmRSb3V0ZXImIHJvdXRlciA9IF9jb250cm9sbGVy
LT5mcm9udGVuZFJvdXRlcigpOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9O
QUxfUEFSQU1FVEVSKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7CisgICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKG5vdGVzLCBAIm5vdGVzIik7CisgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHZhbHVlcywgQCJ2YWx1
ZXMiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIocGF5
bG9hZCwgQCJwYXlsb2FkIik7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxf
UEFSQU1FVEVSKHNxbEVycm9yLCBAInNxbEVycm9yIik7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHNjcmVlbkNvbG9yLCBAInNjcmVlbkNvbG9yIik7Cisg
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKGFsdGVybmF0ZUNv
bG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9P
UFRJT05BTF9QQVJBTUVURVIocHJpbnRDb2xvciwgQCJwcmludENvbG9yIik7CisKKyAgICBSZWY8
SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAg
anNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRGF0YWJhc2UuZGlkRXhlY3V0ZU9w
dGlvbmFsUGFyYW1ldGVycyJfcyk7CisgICAgUmVmPEpTT046Ok9iamVjdD4gcGFyYW1zT2JqZWN0
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBpZiAoY29sdW1uTmFtZXMpCisgICAgICAg
IHBhcmFtc09iamVjdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB0b0pTT05TdHJpbmdBcnJh
eSgoKmNvbHVtbk5hbWVzKSkpOworICAgIGlmIChub3RlcykKKyAgICAgICAgcGFyYW1zT2JqZWN0
LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCAoKm5vdGVzKSk7CisgICAgaWYgKHRpbWVzdGFtcCkKKyAg
ICAgICAgcGFyYW1zT2JqZWN0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgKCp0aW1lc3RhbXAp
KTsKKyAgICBpZiAodmFsdWVzKQorICAgICAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgidmFs
dWVzIl9zLCBbKCp2YWx1ZXMpIHRvSlNPTk9iamVjdF0pOworICAgIGlmIChwYXlsb2FkKQorICAg
ICAgICBwYXJhbXNPYmplY3QtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBbKCpwYXlsb2FkKSB0b0pT
T05PYmplY3RdKTsKKyAgICBpZiAoc3FsRXJyb3IpCisgICAgICAgIHBhcmFtc09iamVjdC0+c2V0
T2JqZWN0KCJzcWxFcnJvciJfcywgWygqc3FsRXJyb3IpIHRvSlNPTk9iamVjdF0pOworICAgIGlm
IChzY3JlZW5Db2xvcikKKyAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNv
bG9yIl9zLCAoKnNjcmVlbkNvbG9yKSk7CisgICAgaWYgKGFsdGVybmF0ZUNvbG9ycykKKyAgICAg
ICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCB0b0pTT05TdHJp
bmdBcnJheSgoKmFsdGVybmF0ZUNvbG9ycykpKTsKKyAgICBpZiAocHJpbnRDb2xvcikKKyAgICAg
ICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsICgqcHJpbnRDb2xvcikp
OworICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyJfcywgV1RGTW92ZShwYXJhbXNP
YmplY3QpKTsKKyAgICByb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmco
KSk7Cit9CisKKy0gKHZvaWQpZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzV2l0aENvbHVt
bk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcyBub3RlczooTlNTdHJp
bmcgKilub3RlcyB0aW1lc3RhbXA6KGRvdWJsZSl0aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90b2Nv
bEpTT05PYmplY3QgKil2YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5
bG9hZCBzcWxFcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKXNxbEVycm9yIHNjcmVl
bkNvbG9yOihOU1N0cmluZyAqKXNjcmVlbkNvbG9yIGFsdGVybmF0ZUNvbG9yczooTlNBcnJheS8q
PE5TU3RyaW5nPiovICopYWx0ZXJuYXRlQ29sb3JzIHByaW50Q29sb3I6KE5TU3RyaW5nICopcHJp
bnRDb2xvcgoreworICAgIGNvbnN0IEZyb250ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29udHJvbGxl
ci0+ZnJvbnRlbmRSb3V0ZXIoKTsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURf
UEFSQU1FVEVSKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7CisgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIobm90ZXMsIEAibm90ZXMiKTsKKyAgICBUSFJPV19F
WENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUih2YWx1ZXMsIEAidmFsdWVzIik7CisgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIocGF5bG9hZCwgQCJwYXlsb2Fk
Iik7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoc3FsRXJyb3Is
IEAic3FsRXJyb3IiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRF
UihzY3JlZW5Db2xvciwgQCJzY3JlZW5Db2xvciIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
UkVRVUlSRURfUEFSQU1FVEVSKGFsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsK
KyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihwcmludENvbG9yLCBA
InByaW50Q29sb3IiKTsKKworICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2Qi
X3MsICJEYXRhYmFzZS5kaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMiX3MpOworICAgIFJl
ZjxKU09OOjpPYmplY3Q+IHBhcmFtc09iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Cisg
ICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0cmluZ0Fy
cmF5KGNvbHVtbk5hbWVzKSk7CisgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoIm5vdGVzIl9z
LCBub3Rlcyk7CisgICAgcGFyYW1zT2JqZWN0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgdGlt
ZXN0YW1wKTsKKyAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgidmFsdWVzIl9zLCBbdmFsdWVz
IHRvSlNPTk9iamVjdF0pOworICAgIHBhcmFtc09iamVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3Ms
IFtwYXlsb2FkIHRvSlNPTk9iamVjdF0pOworICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJz
cWxFcnJvciJfcywgW3NxbEVycm9yIHRvSlNPTk9iamVjdF0pOworICAgIHBhcmFtc09iamVjdC0+
c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgc2NyZWVuQ29sb3IpOworICAgIHBhcmFtc09iamVj
dC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5nQXJyYXkoYWx0ZXJu
YXRlQ29sb3JzKSk7CisgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3Ms
IHByaW50Q29sb3IpOworICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyJfcywgV1RG
TW92ZShwYXJhbXNPYmplY3QpKTsKKyAgICByb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50
b0pTT05TdHJpbmcoKSk7Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bEV2ZW50RGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFy
YW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
KyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCisjaW1wb3J0IDxXZWJJbnNwZWN0
b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+CisKKworQGNsYXNzIFRlc3RQcm90b2NvbERhdGFi
YXNlRXJyb3I7CisKKworCisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0Iikp
KQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIDogUldJUHJvdG9jb2xKU09O
T2JqZWN0CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNT
dHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29s
T2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OworLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlIGNvZGU6KGludCljb2RlOwor
LyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICptZXNz
YWdlOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgaW50IGNv
ZGU7CitAZW5kCisKKworCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkK
K0BpbnRlcmZhY2UgVGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5FdmVudERpc3BhdGNoZXIgOiBO
U09iamVjdAorLSAodm9pZClkaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzV2l0aENvbHVtbk5h
bWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopY29sdW1uTmFtZXMgbm90ZXM6KE5TU3RyaW5n
ICoqKW5vdGVzIHRpbWVzdGFtcDooZG91YmxlICopdGltZXN0YW1wIHZhbHVlczooUldJUHJvdG9j
b2xKU09OT2JqZWN0ICoqKXZhbHVlcyBwYXlsb2FkOihSV0lQcm90b2NvbEpTT05PYmplY3QgKiop
cGF5bG9hZCBzcWxFcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKilzcWxFcnJvciBz
Y3JlZW5Db2xvcjooTlNTdHJpbmcgKiopc2NyZWVuQ29sb3IgYWx0ZXJuYXRlQ29sb3JzOihOU0Fy
cmF5Lyo8TlNTdHJpbmc+Ki8gKiopYWx0ZXJuYXRlQ29sb3JzIHByaW50Q29sb3I6KE5TU3RyaW5n
ICoqKXByaW50Q29sb3I7CistICh2b2lkKWRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1dp
dGhDb2x1bW5OYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMgbm90ZXM6
KE5TU3RyaW5nICopbm90ZXMgdGltZXN0YW1wOihkb3VibGUpdGltZXN0YW1wIHZhbHVlczooUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICopdmFsdWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVj
dCAqKXBheWxvYWQgc3FsRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKilzcWxFcnJv
ciBzY3JlZW5Db2xvcjooTlNTdHJpbmcgKilzY3JlZW5Db2xvciBhbHRlcm5hdGVDb2xvcnM6KE5T
QXJyYXkvKjxOU1N0cmluZz4qLyAqKWFsdGVybmF0ZUNvbG9ycyBwcmludENvbG9yOihOU1N0cmlu
ZyAqKXByaW50Q29sb3I7CitAZW5kCisKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3Rv
Y29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVy
cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBv
cnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZh
dGUuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJv
bGxlci5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKworQGludGVyZmFjZSBUZXN0UHJv
dG9jb2xEYXRhYmFzZURvbWFpbkV2ZW50RGlzcGF0Y2hlciAoUHJpdmF0ZSkKKy0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEluc3BlY3Rvcjo6QXVnbWVudGFibGVJbnNwZWN0b3JD
b250cm9sbGVyKiljb250cm9sbGVyOworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRp
b25hbC1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3Iv
UldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Igewor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+CitPcHRpb25hbDxPYmpDRW51bVR5cGU+
IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKKworCisKK30gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0K
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1w
YXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisKKyNpbXBvcnQgIlRl
c3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgorI2ltcG9y
dCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKwordXNpbmcg
bmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMgKERhdGFiYXNlRG9tYWluKQorCisrICh2b2lkKV9wYXJzZURhdGFiYXNlSWQ6KE5TU3Ry
aW5nICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworKyAodm9pZClfcGFyc2VQ
cmltYXJ5Q29sb3JzOihOU1N0cmluZyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9h
ZDsKKysgKHZvaWQpX3BhcnNlQ29sb3JMaXN0OihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopb3V0
VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisrICh2b2lkKV9wYXJzZUVycm9yOihUZXN0
UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2Fk
OworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMg
KERhdGFiYXNlRG9tYWluKQorCisrICh2b2lkKV9wYXJzZURhdGFiYXNlSWQ6KE5TU3RyaW5nICoq
KW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUg
PSAoTlNTdHJpbmcgKilwYXlsb2FkOworfQorCisrICh2b2lkKV9wYXJzZVByaW1hcnlDb2xvcnM6
KE5TU3RyaW5nICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKKyAg
ICAqb3V0VmFsdWUgPSAoTlNTdHJpbmcgKilwYXlsb2FkOworfQorCisrICh2b2lkKV9wYXJzZUNv
bG9yTGlzdDooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihp
ZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBb
TlNBcnJheS8qPE5TU3RyaW5nPiovIGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gKE5TQXJyYXkv
KjxOU1N0cmluZz4qLyAqKXBheWxvYWQ7Cit9CisKKysgKHZvaWQpX3BhcnNlRXJyb3I6KFRlc3RQ
cm90b2NvbERhdGFiYXNlRXJyb3IgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQK
K3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25h
cnkgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3Ig
YWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKK30KKworQGVuZAorCisKKyMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xUeXBlcy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2
ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgor
CisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPFdlYklu
c3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisjaW1wb3J0IDx3dGYvQXNz
ZXJ0aW9ucy5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNl
IEluc3BlY3RvcjsKKworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sRGF0YWJhc2VFcnJv
cgorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFy
eTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBp
bml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JF
UVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJtZXNzYWdlIl0sIEAibWVzc2FnZSIpOworICAgIHNl
bGYubWVzc2FnZSA9IHBheWxvYWRbQCJtZXNzYWdlIl07CisKKyAgICBUSFJPV19FWENFUFRJT05f
Rk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJjb2RlIl0sIEAiY29kZSIpOworICAgIHNl
bGYuY29kZSA9IFtwYXlsb2FkW0AiY29kZSJdIGludGVnZXJWYWx1ZV07CisKKyAgICByZXR1cm4g
c2VsZjsKK30KKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90
b2NvbEpTT05PYmplY3QgKilvYmplY3QKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRX
aXRoSlNPTk9iamVjdDpbb2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0KCldKSkKKyAgICAgICAgcmV0
dXJuIG5pbDsKKworICAgIHJldHVybiBzZWxmOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZTooaW50KWNvZGUKK3sKKyAgICBpZiAo
IShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkobWVzc2FnZSwgQCJtZXNzYWdlIik7CisK
KyAgICBzZWxmLm1lc3NhZ2UgPSBtZXNzYWdlOworICAgIHNlbGYuY29kZSA9IGNvZGU7CisKKyAg
ICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClzZXRNZXNzYWdlOihOU1N0cmluZyAqKW1lc3Nh
Z2UKK3sKKyAgICBbc3VwZXIgc2V0U3RyaW5nOm1lc3NhZ2UgZm9yS2V5OkAibWVzc2FnZSJdOwor
fQorCistIChOU1N0cmluZyAqKW1lc3NhZ2UKK3sKKyAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0Zv
cktleTpAIm1lc3NhZ2UiXTsKK30KKworLSAodm9pZClzZXRDb2RlOihpbnQpY29kZQoreworICAg
IFtzdXBlciBzZXRJbnRlZ2VyOmNvZGUgZm9yS2V5OkAiY29kZSJdOworfQorCistIChpbnQpY29k
ZQoreworICAgIHJldHVybiBbc3VwZXIgaW50ZWdlckZvcktleTpAImNvZGUiXTsKK30KKworQGVu
ZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWls
LW9uLWNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNv
bi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdn
YWJsZVR5cGUuanNvbi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MC4uYTEzMGFkNzBjNDAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1jb21tYW5kLXRhcmdldFR5
cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tZXJyb3IKQEAgLTAsMCArMSBA
QAorRVJST1I6IE1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjogZG9tYWluIERvbWFpbiBo
YXMgYW4gaXRlbSBpbiB0YXJnZXRUeXBlcyAiW3Und29ya2VyJ10iIHRoYXQgaXMgbm90IHN1cHBv
cnRlZCBieSBhbnkgdmFsdWUgaW4gZGVidWdnYWJsZVR5cGVzICJbdSdqYXZhc2NyaXB0J10iLgpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL2ZhaWwtb24tY29tbWFuZC10YXJnZXRUeXBlcy10eXBlLmpzb24tZXJyb3IgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFp
bC1vbi1jb21tYW5kLXRhcmdldFR5cGVzLXR5cGUuanNvbi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOTlmNWUxYTRhOGUKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFp
bC1vbi1jb21tYW5kLXRhcmdldFR5cGVzLXR5cGUuanNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitF
UlJPUjogTWFsZm9ybWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9uOiB0YXJnZXRUeXBlcyBsaXN0IGZv
ciBjb21tYW5kIFBhZ2VPbmx5IGlzIG5vdCBhbiBhcnJheQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tY29t
bWFuZC10YXJnZXRUeXBlcy12YWx1ZS5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tY29tbWFuZC10YXJnZXRU
eXBlcy12YWx1ZS5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwLi4yMWEzNjU2OTkyNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0
VHlwZXMtdmFsdWUuanNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjogTWFsZm9ybWVkIGRv
bWFpbiBzcGVjaWZpY2F0aW9uOiB0YXJnZXRUeXBlcyBsaXN0IGZvciBjb21tYW5kIFBhZ2VPbmx5
IGlzIGFuIHVuc3VwcG9ydGVkIHN0cmluZy4gV2FzOiAiW3UncGFnZWUnXSIsIEFsbG93ZWQgdmFs
dWVzOiBzZXJ2aWNlLXdvcmtlciwgamF2YXNjcmlwdCwgd29ya2VyLCBwYWdlLCB3ZWItcGFnZQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL2ZhaWwtb24tZG9tYWluLWRlYnVnZ2FibGVUeXBlcy10eXBlLmpzb24tZXJyb3Ig
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
ZmFpbC1vbi1kb21haW4tZGVidWdnYWJsZVR5cGVzLXR5cGUuanNvbi1lcnJvcgpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMmI4OThiYTdiZTcKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvZmFpbC1vbi1kb21haW4tZGVidWdnYWJsZVR5cGVzLXR5cGUuanNvbi1lcnJvcgpAQCAtMCww
ICsxIEBACitFUlJPUjogTWFsZm9ybWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9uOiBkZWJ1Z2dhYmxl
VHlwZXMgZm9yIGRvbWFpbiBXZWJPbmx5IGlzIG5vdCBhbiBhcnJheQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwt
b24tZG9tYWluLWRlYnVnZ2FibGVUeXBlcy12YWx1ZS5qc29uLWVycm9yIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZG9tYWlu
LWRlYnVnZ2FibGVUeXBlcy12YWx1ZS5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwLi5iZjcxZDQ3MGNiZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWRv
bWFpbi1kZWJ1Z2dhYmxlVHlwZXMtdmFsdWUuanNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJP
UjogTWFsZm9ybWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9uOiBkZWJ1Z2dhYmxlVHlwZXMgZm9yIGRv
bWFpbiBXZWJPbmx5IGlzIGFuIHVuc3VwcG9ydGVkIHN0cmluZy4gV2FzOiAiW3Und2ViYiddIiwg
QWxsb3dlZCB2YWx1ZXM6IHNlcnZpY2Utd29ya2VyLCBqYXZhc2NyaXB0LCBwYWdlLCB3ZWItcGFn
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V4cGVjdGVkL2ZhaWwtb24tZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRl
YnVnZ2FibGVUeXBlLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZS1tYXRjaGlu
Zy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMC4uODY3ZTM1MDA4OTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1k
b21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1lcnJv
cgpAQCAtMCwwICsxIEBACitFUlJPUjogTWFsZm9ybWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9uOiBj
b21tYW5kIENvbW1hbmQgaGFzIGFuIGl0ZW0gaW4gdGFyZ2V0VHlwZXMgIlt1J3dvcmtlciddIiB0
aGF0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgYW55IHZhbHVlIGluIGRlYnVnZ2FibGVUeXBlcyAiW3Un
amF2YXNjcmlwdCddIi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWRvbWFpbi10YXJnZXRUeXBlcy10eXBl
Lmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZXMtdHlwZS5qc29uLWVycm9yCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5lOWEzNTkzM2EzNQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9leHBlY3RlZC9mYWlsLW9uLWRvbWFpbi10YXJnZXRUeXBlcy10eXBlLmpzb24tZXJyb3IKQEAg
LTAsMCArMSBAQAorRVJST1I6IE1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjogdGFyZ2V0
VHlwZXMgZm9yIGRvbWFpbiBQYWdlT25seSBpcyBub3QgYW4gYXJyYXkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWls
LW9uLWRvbWFpbi10YXJnZXRUeXBlcy12YWx1ZS5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZG9tYWluLXRh
cmdldFR5cGVzLXZhbHVlLmpzb24tZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAuLjQ2ODA3ZjcyZmM0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZG9tYWluLXRh
cmdldFR5cGVzLXZhbHVlLmpzb24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6IE1hbGZvcm1l
ZCBkb21haW4gc3BlY2lmaWNhdGlvbjogdGFyZ2V0VHlwZXMgZm9yIGRvbWFpbiBQYWdlT25seSBp
cyBhbiB1bnN1cHBvcnRlZCBzdHJpbmcuIFdhczogIlt1J3BhZ2VlJ10iLCBBbGxvd2VkIHZhbHVl
czogc2VydmljZS13b3JrZXIsIGphdmFzY3JpcHQsIHdvcmtlciwgcGFnZSwgd2ViLXBhZ2UKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS1jb21tYW5kLWNhbGwtcGFyYW1ldGVyLW5hbWVzLmpz
b24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1jYWxsLXBhcmFtZXRlci1uYW1lcy5q
c29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4zZjc1NmRl
MzI1MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS1jb21tYW5kLWNhbGwtcGFy
YW1ldGVyLW5hbWVzLmpzb24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6IE1hbGZvcm1lZCBk
b21haW4gc3BlY2lmaWNhdGlvbjogY2FsbCBwYXJhbWV0ZXIgbGlzdCBmb3IgY29tbWFuZCBwcm9j
ZXNzUG9pbnRzIGhhcyBkdXBsaWNhdGUgcGFyYW1ldGVyIG5hbWVzCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1v
bi1kdXBsaWNhdGUtY29tbWFuZC1yZXR1cm4tcGFyYW1ldGVyLW5hbWVzLmpzb24tZXJyb3IgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFp
bC1vbi1kdXBsaWNhdGUtY29tbWFuZC1yZXR1cm4tcGFyYW1ldGVyLW5hbWVzLmpzb24tZXJyb3IK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmVhMTQ4ZmY2N2M5Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLWNvbW1hbmQtcmV0dXJuLXBhcmFtZXRlci1u
YW1lcy5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBNYWxmb3JtZWQgZG9tYWluIHNw
ZWNpZmljYXRpb246IHJldHVybiBwYXJhbWV0ZXIgbGlzdCBmb3IgY29tbWFuZCBwcm9jZXNzUG9p
bnRzIGhhcyBkdXBsaWNhdGUgcGFyYW1ldGVyIG5hbWVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBs
aWNhdGUtZXZlbnQtcGFyYW1ldGVyLW5hbWVzLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUt
ZXZlbnQtcGFyYW1ldGVyLW5hbWVzLmpzb24tZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAuLmM3MWJiZDIxYzJjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZHVw
bGljYXRlLWV2ZW50LXBhcmFtZXRlci1uYW1lcy5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VS
Uk9SOiBNYWxmb3JtZWQgZG9tYWluIHNwZWNpZmljYXRpb246IHBhcmFtZXRlciBsaXN0IGZvciBl
dmVudCBwcm9jZXNzZWRQb2ludHMgaGFzIGR1cGxpY2F0ZSBwYXJhbWV0ZXIgbmFtZXMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLWRlY2xhcmF0aW9ucy5qc29uLWVycm9yIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwt
b24tZHVwbGljYXRlLXR5cGUtZGVjbGFyYXRpb25zLmpzb24tZXJyb3IKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjQ0N2NkZjhlMjhlCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2Zh
aWwtb24tZHVwbGljYXRlLXR5cGUtZGVjbGFyYXRpb25zLmpzb24tZXJyb3IKQEAgLTAsMCArMSBA
QAorRVJST1I6IER1cGxpY2F0ZSB0eXBlIGRlY2xhcmF0aW9uOiBSdW50aW1lLlJlbW90ZU9iamVj
dElkCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1tZW1iZXItbmFtZXMuanNvbi1l
cnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLW1lbWJlci1uYW1lcy5qc29uLWVycm9yCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kNTM3NmE3N2E0NQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLW1lbWJlci1uYW1lcy5qc29uLWVycm9yCkBA
IC0wLDAgKzEgQEAKK0VSUk9SOiBNYWxmb3JtZWQgZG9tYWluIHNwZWNpZmljYXRpb246IHR5cGUg
ZGVjbGFyYXRpb24gZm9yIFBvaW50IGhhcyBkdXBsaWNhdGUgbWVtYmVyIG5hbWVzCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvZmFpbC1vbi1lbnVtLXdpdGgtbm8tdmFsdWVzLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1lbnVtLXdp
dGgtbm8tdmFsdWVzLmpzb24tZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAuLjI2NTVjMmI5MDdlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZW51bS13aXRoLW5v
LXZhbHVlcy5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBUeXBlIHJlZmVyZW5jZSB3
aXRoIGVudW0gdmFsdWVzIG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgZW51bSB2YWx1ZS4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVU
eXBlLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1ldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1k
ZWJ1Z2dhYmxlVHlwZS5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwLi5iNjVkN2EwZDE5NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWV2ZW50LXRhcmdl
dFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tZXJyb3IKQEAgLTAsMCAr
MSBAQAorRVJST1I6IE1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjogZXZlbnQgRXZlbnQg
aGFzIGFuIGl0ZW0gaW4gdGFyZ2V0VHlwZXMgIlt1J3dvcmtlciddIiB0aGF0IGlzIG5vdCBzdXBw
b3J0ZWQgYnkgYW55IHZhbHVlIGluIGRlYnVnZ2FibGVUeXBlcyAiW3UnamF2YXNjcmlwdCddIi4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9leHBlY3RlZC9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGVzLXR5cGUuanNvbi1lcnJvciBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWls
LW9uLWV2ZW50LXRhcmdldFR5cGVzLXR5cGUuanNvbi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMC4uNzQwM2UxM2E4MDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1v
bi1ldmVudC10YXJnZXRUeXBlcy10eXBlLmpzb24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6
IE1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjogdGFyZ2V0VHlwZXMgZm9yIGV2ZW50IFBh
Z2VPbmx5IGlzIG5vdCBhbiBhcnJheQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlw
ZXMtdmFsdWUuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGVzLXZhbHVlLmpzb24t
ZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjgzMDEyYTlmZTRl
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlwZXMtdmFsdWUuanNvbi1l
cnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjogTWFsZm9ybWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9u
OiB0YXJnZXRUeXBlcyBmb3IgZXZlbnQgUGFnZU9ubHkgaXMgYW4gdW5zdXBwb3J0ZWQgc3RyaW5n
LiBXYXM6ICJbdSdwYWdlZSddIiwgQWxsb3dlZCB2YWx1ZXM6IHNlcnZpY2Utd29ya2VyLCBqYXZh
c2NyaXB0LCB3b3JrZXIsIHBhZ2UsIHdlYi1wYWdlCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1udW1iZXIt
dHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLW51bWJlci10
eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45N2IyYWYwZTQ3ZQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWls
LW9uLW51bWJlci10eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29uLWVycm9yCkBAIC0w
LDAgKzEgQEAKK0VSUk9SOiBUaGUgJ29wdGlvbmFsJyBmbGFnIGZvciBhIHBhcmFtZXRlciBtdXN0
IGJlIGEgYm9vbGVhbiBsaXRlcmFsLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tbnVtYmVyLXR5cGVkLW9w
dGlvbmFsLXR5cGUtbWVtYmVyLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9u
YWwtdHlwZS1tZW1iZXIuanNvbi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMC4uODZkZjM3NTBjMWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1udW1iZXItdHlw
ZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjog
VGhlICdvcHRpb25hbCcgZmxhZyBmb3IgYSB0eXBlIG1lbWJlciBtdXN0IGJlIGEgYm9vbGVhbiBs
aXRlcmFsLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXBhcmFtZXRl
ci1mbGFnLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVy
LWZsYWcuanNvbi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u
OTdiMmFmMGU0N2UKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1zdHJpbmctdHlwZWQtb3B0aW9u
YWwtcGFyYW1ldGVyLWZsYWcuanNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjogVGhlICdv
cHRpb25hbCcgZmxhZyBmb3IgYSBwYXJhbWV0ZXIgbXVzdCBiZSBhIGJvb2xlYW4gbGl0ZXJhbC4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9leHBlY3RlZC9mYWlsLW9uLXN0cmluZy10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29u
LWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4
cGVjdGVkL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24tZXJy
b3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjg2ZGYzNzUwYzFhCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVy
Lmpzb24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6IFRoZSAnb3B0aW9uYWwnIGZsYWcgZm9y
IGEgdHlwZSBtZW1iZXIgbXVzdCBiZSBhIGJvb2xlYW4gbGl0ZXJhbC4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWls
LW9uLXR5cGUtZGVjbGFyYXRpb24tdXNpbmctdHlwZS1yZWZlcmVuY2UuanNvbi1lcnJvciBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWls
LW9uLXR5cGUtZGVjbGFyYXRpb24tdXNpbmctdHlwZS1yZWZlcmVuY2UuanNvbi1lcnJvcgpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNDJmNTc1M2E0MzkKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvZmFpbC1vbi10eXBlLWRlY2xhcmF0aW9uLXVzaW5nLXR5cGUtcmVmZXJlbmNlLmpz
b24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6IFR5cGUgcmVmZXJlbmNlIGNhbm5vdCBoYXZl
IGJvdGggJ3R5cGUnIGFuZCAnJHJlZicga2V5cy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXR5cGUtcmVm
ZXJlbmNlLWFzLXByaW1pdGl2ZS10eXBlLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi10eXBlLXJlZmVyZW5j
ZS1hcy1wcmltaXRpdmUtdHlwZS5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwLi5kNzZiYzFjNzc3MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXR5cGUt
cmVmZXJlbmNlLWFzLXByaW1pdGl2ZS10eXBlLmpzb24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJS
T1I6IFR5cGUgcmVmZXJlbmNlICdEYXRhYmFzZUlkJyBpcyBub3QgYSBwcmltaXRpdmUgdHlwZS4g
QWxsb3dlZCB2YWx1ZXM6IGludGVnZXIsIG51bWJlciwgc3RyaW5nLCBib29sZWFuLCBlbnVtLCBv
YmplY3QsIGFycmF5LCBhbnkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXR5cGUtd2l0aC1sb3dlcmNhc2Ut
bmFtZS5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS13aXRoLWxvd2VyY2FzZS1uYW1lLmpzb24tZXJy
b3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjRlNDYyMjUwYzBhCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS13aXRoLWxvd2VyY2FzZS1uYW1lLmpzb24tZXJy
b3IKQEAgLTAsMCArMSBAQAorRVJST1I6IFR5cGVzIG11c3QgYmVnaW4gd2l0aCBhbiB1cHBlcmNh
c2UgY2hhcmFjdGVyLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1p
bi10eXBlLWRlY2xhcmF0aW9uLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJl
bmNlLWluLXR5cGUtZGVjbGFyYXRpb24uanNvbi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMC4uMmQzOGU2NDY3NWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi11
bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtZGVjbGFyYXRpb24uanNvbi1lcnJvcgpAQCAt
MCwwICsxIEBACitFUlJPUjogVHlwZSByZWZlcmVuY2UgJ2RyYWdvbicgaXMgbm90IGEgcHJpbWl0
aXZlIHR5cGUuIEFsbG93ZWQgdmFsdWVzOiBpbnRlZ2VyLCBudW1iZXIsIHN0cmluZywgYm9vbGVh
biwgZW51bSwgb2JqZWN0LCBhcnJheSwgYW55CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi11bmtub3duLXR5
cGUtcmVmZXJlbmNlLWluLXR5cGUtbWVtYmVyLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi11bmtub3duLXR5
cGUtcmVmZXJlbmNlLWluLXR5cGUtbWVtYmVyLmpzb24tZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAuLmZhZjY2NzJjYmVmCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwt
b24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLW1lbWJlci5qc29uLWVycm9yCkBAIC0w
LDAgKzEgQEAKK0VSUk9SOiBMb29rdXAgZmFpbGVkIGZvciB0eXBlIHJlZmVyZW5jZTogQ29sb3Ig
KHJlZmVyZW5jZWQgZnJvbSBkb21haW46IEZhbnRhc3kpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZ2VuZXJhdGUtZG9t
YWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2dlbmVyYXRlLWRvbWFpbnMtd2l0
aC1mZWF0dXJlLWd1YXJkcy5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMC4uZWIxM2Q4NWI1ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZ2VuZXJhdGUtZG9tYWlu
cy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24tcmVzdWx0CkBAIC0wLDAgKzEsMTE4OCBAQAorIyMj
IEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcworLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5q
c29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKy8vIE5ldHdv
cmsxCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJOZXR3b3JrMSIsIG51bGwpOwor
SW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIk5ldHdvcmsxLmxvYWRSZXNvdXJjZSIs
IG51bGwsIFtdLCBbXSk7CitJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJOZXR3b3Jr
MSIsIG51bGwpOworCisvLyBOZXR3b3JrMworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFp
bigiTmV0d29yazMiLCBudWxsKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudCgiTmV0
d29yazMucmVzb3VyY2VMb2FkZWQiLCBudWxsLCBbXSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lz
dGVyTmV0d29yazNEaXNwYXRjaGVyID0gSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRpc3BhdGNo
ZXIuYmluZChJbnNwZWN0b3JCYWNrZW5kLCAiTmV0d29yazMiKTsKK0luc3BlY3RvckJhY2tlbmQu
YWN0aXZhdGVEb21haW4oIk5ldHdvcmszIiwgbnVsbCk7CisjIyMgRW5kIEZpbGU6IEluc3BlY3Rv
ckJhY2tlbmRDb21tYW5kcy5qcworCisjIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tl
bmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJh
dGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVz
LmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIu
aD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgor
CituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXIgeworcHVibGljOgorICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tl
bmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1v
dmUoZGlzcGF0Y2hlcik7IH0KKyAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNo
ZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Citwcml2YXRl
OgorICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKK307
CisKKworY2xhc3MgQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+QWx0ZXJu
YXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBsb2Fk
UmVzb3VyY2UobG9uZyBjYWxsSWQpID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisj
IyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVn
aW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9y
U3RyaW5nOworCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCitj
bGFzcyBBbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOworI2VuZGlmIC8vIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCitjbGFzcyBOZXR3b3JrMUJhY2tl
bmREaXNwYXRjaGVySGFuZGxlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNv
dXJjZShFcnJvclN0cmluZyYpID0gMDsKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5OZXR3b3Jr
MUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOworfTsKKworY2xhc3MgTmV0d29yazFCYWNrZW5k
RGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7
CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPiBjcmVh
dGUoQmFja2VuZERpc3BhdGNoZXImLCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciop
OworICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9k
LCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOworcHJpdmF0ZToKKyAgICB2b2lk
IGxvYWRSZXNvdXJjZShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJh
bWV0ZXJzKTsKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK3B1
YmxpYzoKKyAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlTmV0d29yazFC
YWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVybmF0ZURpc3Bh
dGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9Citwcml2YXRlOgorICAgIEFsdGVybmF0ZU5l
dHdvcmsxQmFja2VuZERpc3BhdGNoZXIqIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciB7IG51bGxwdHIg
fTsKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK3By
aXZhdGU6CisgICAgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYs
IE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgTmV0d29yazFCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQgeyBudWxscHRyIH07Cit9OworCit9IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisK
KyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJk
cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1
ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCisjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVycy5oIgorI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXI6On5OZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQorCitSZWY8TmV0
d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4gTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRl
KEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgTmV0d29yazFCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXIqIGFnZW50KQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE5ldHdv
cmsxQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIsIGFnZW50KSk7Cit9CisKK05l
dHdvcmsxQmFja2VuZERpc3BhdGNoZXI6Ok5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoQmFja2Vu
ZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlciogYWdlbnQpCisgICAgOiBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNr
ZW5kRGlzcGF0Y2hlcikKKyAgICAsIG1fYWdlbnQoYWdlbnQpCit7CisgICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKCJOZXR3b3JrMSJfcywgdGhpcyk7
Cit9CisKK3ZvaWQgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1
ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2Up
Cit7CisgICAgUmVmPE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwor
CisgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVyczsKKyAgICBtZXNzYWdlLT5nZXRP
YmplY3QoInBhcmFtcyJfcywgcGFyYW1ldGVycyk7CisKKyAgICBpZiAobWV0aG9kID09ICJsb2Fk
UmVzb3VyY2UiKSB7CisgICAgICAgIGxvYWRSZXNvdXJjZShyZXF1ZXN0SWQsIFdURk1vdmUocGFy
YW1ldGVycykpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91
bmQsICInTmV0d29yazEuIiArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKK30KKwordm9p
ZCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0SWQs
IFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCit7CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCisgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeworICAgICAg
ICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZShyZXF1ZXN0SWQpOworICAgICAg
ICByZXR1cm47CisgICAgfQorI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQorCisgICAgRXJyb3JTdHJpbmcgZXJyb3I7CisgICAgUmVmPEpTT046Ok9iamVj
dD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBtX2FnZW50LT5sb2FkUmVz
b3VyY2UoZXJyb3IpOworCisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKKyAgICAgICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBm
YWxzZSk7CisgICAgZWxzZQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90
b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikp
OworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0QmFj
a2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0
Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFp
bnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2Jq
ZWN0cy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBGcm9udGVuZFJv
dXRlcjsKKworY2xhc3MgTmV0d29yazNGcm9udGVuZERpc3BhdGNoZXIgeworICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIE5ldHdvcmszRnJvbnRlbmREaXNwYXRjaGVy
KEZyb250ZW5kUm91dGVyJiBmcm9udGVuZFJvdXRlcikgOiBtX2Zyb250ZW5kUm91dGVyKGZyb250
ZW5kUm91dGVyKSB7IH0KKyAgICB2b2lkIHJlc291cmNlTG9hZGVkKCk7Citwcml2YXRlOgorICAg
IEZyb250ZW5kUm91dGVyJiBtX2Zyb250ZW5kUm91dGVyOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5q
c29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit2b2lkIE5l
dHdvcmszRnJvbnRlbmREaXNwYXRjaGVyOjpyZXNvdXJjZUxvYWRlZCgpCit7CisgICAgUmVmPEpT
T046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGpz
b25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIk5ldHdvcmszLnJlc291cmNlTG9hZGVk
Il9zKTsKKworICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pT
T05TdHJpbmcoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZp
bGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sT2JqZWN0cy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJh
dGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCituYW1lc3BhY2UgUHJvdG9jb2wg
eworCisKKworLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCituYW1lc3BhY2UgTmV0d29yazIgewor
Y2xhc3MgTmV0d29ya0Vycm9yOworfSAvLyBOZXR3b3JrMgorLy8gRW5kIG9mIGZvcndhcmQgZGVj
bGFyYXRpb25zLgorCisKKworCituYW1lc3BhY2UgTmV0d29yazIgeworY2xhc3MgTmV0d29ya0Vy
cm9yIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgeworcHVibGljOgorICAgIGVudW0geworICAg
ICAgICBOb0ZpZWxkc1NldCA9IDAsCisgICAgICAgIE1lc3NhZ2VTZXQgPSAxIDw8IDAsCisgICAg
ICAgIENvZGVTZXQgPSAxIDw8IDEsCisgICAgICAgIEFsbEZpZWxkc1NldCA9IChNZXNzYWdlU2V0
IHwgQ29kZVNldCkKKyAgICB9OworCisgICAgdGVtcGxhdGU8aW50IFNUQVRFPgorICAgIGNsYXNz
IEJ1aWxkZXIgeworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1f
cmVzdWx0OworCisgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RF
UD4mIGNhc3RTdGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnBy
ZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKKyAgICAgICAgfQorCisgICAg
ICAgIEJ1aWxkZXIoUmVmPC8qTmV0d29ya0Vycm9yKi9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQor
ICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0
ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAgICAgICB9CisgICAgICAgIGZyaWVuZCBjbGFzcyBO
ZXR3b3JrRXJyb3I7CisgICAgcHVibGljOgorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNZXNz
YWdlU2V0PiYgc2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAgICB7CisgICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTWVzc2FnZVNldCksIHByb3BlcnR5X21l
c3NhZ2VfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibWVz
c2FnZSJfcywgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNZXNzYWdlU2V0
PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvZGVTZXQ+JiBzZXRD
b2RlKGludCB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIENvZGVTZXQpLCBwcm9wZXJ0eV9jb2RlX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXRJbnRlZ2VyKCJjb2RlIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPENvZGVTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBSZWY8TmV0d29y
a0Vycm9yPiByZWxlYXNlKCkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
U1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKHNpemVvZihOZXR3b3JrRXJyb3IpID09IHNpemVvZihKU09OOjpPYmpl
Y3QpLCBjYW5ub3RfY2FzdCk7CisKKyAgICAgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25S
ZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOworICAgICAgICAgICAgYXV0byByZXN1
bHQgPSBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxOZXR3b3JrRXJyb3I+Kj4oJmpzb25S
ZXN1bHQpKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICB9Owor
CisgICAgLyoKKyAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CisgICAgICogUmVmPE5ldHdv
cmtFcnJvcj4gcmVzdWx0ID0gTmV0d29ya0Vycm9yOjpjcmVhdGUoKQorICAgICAqICAgICAuc2V0
TWVzc2FnZSguLi4pCisgICAgICogICAgIC5zZXRDb2RlKC4uLikKKyAgICAgKiAgICAgLnJlbGVh
c2UoKTsKKyAgICAgKi8KKyAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkK
KyAgICB7CisgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpKTsKKyAgICB9Cit9OworCit9IC8vIE5ldHdvcmsyCisKKworCit9IC8vIG5hbWVz
cGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sT2JqZWN0cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmpl
Y3RzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFp
bnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9j
b2xPYmplY3RzLmgiCisKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCituYW1lc3BhY2UgUHJv
dG9jb2wgeworCisKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3Vh
cmRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVy
cy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworQHByb3RvY29sIFRlc3RQcm90b2Nv
bE5ldHdvcmsxRG9tYWluSGFuZGxlcjsKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworY2xh
c3MgT2JqQ0luc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMg
QWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciB7CisgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CitwdWJsaWM6CisgICAgT2JqQ0luc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3Bh
dGNoZXIoaWQ8VGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1f
ZGVsZWdhdGUgPSBoYW5kbGVyOyB9CisgICAgdm9pZCBsb2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0
SWQpIGZpbmFsOworcHJpdmF0ZToKKyAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sTmV0d29y
azFEb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisK
KyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVy
ZS1ndWFyZHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRj
aGVycy5oIgorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5o
PgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordm9pZCBPYmpDSW5zcGVjdG9yTmV0d29yazFC
YWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkKQoreworICAgIGlm
ICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2VX
aXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsKKyAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRj
aGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMS5sb2FkUmVzb3VyY2UnIHdhcyBub3QgZm91
bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNT
dHJpbmcgKmVycm9yKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3Rv
Y29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9y
KTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAg
ICB9OworCisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKKyAgICAgICAgYmFja2VuZERpc3Bh
dGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwg
ZmFsc2UpOworICAgIH07CisKKyAgICBbbV9kZWxlZ2F0ZSBsb2FkUmVzb3VyY2VXaXRoRXJyb3JD
YWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOwor
fQorCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbi5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJh
dGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2Nv
bC5oPgorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZh
Y2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0CitAcHJvcGVydHkgKG5vbmF0
b21pYywgcmV0YWluLCBzZXR0ZXI9c2V0TmV0d29yazFIYW5kbGVyOikgaWQ8VGVzdFByb3RvY29s
TmV0d29yazFEb21haW5IYW5kbGVyPiBuZXR3b3JrMUhhbmRsZXI7CitAcHJvcGVydHkgKG5vbmF0
b21pYywgcmVhZG9ubHkpIFRlc3RQcm90b2NvbE5ldHdvcmszRG9tYWluRXZlbnREaXNwYXRjaGVy
ICpuZXR3b3JrM0V2ZW50RGlzcGF0Y2hlcjsKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24uaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29u
ZmlndXJhdGlvbi5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRl
LWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24u
aCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbXBvcnQgIlRlc3RQcm90
b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJu
YXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRh
YmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3Bl
Y3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KK3sKKyAg
ICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworICAgIGlkPFRl
c3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4gX25ldHdvcmsxSGFuZGxlcjsKKyAgICBU
ZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkV2ZW50RGlzcGF0Y2hlciAqX25ldHdvcmszRXZlbnRE
aXNwYXRjaGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdt
ZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1
cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NF
UlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVy
biBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbX25ldHdvcmsxSGFuZGxlciBy
ZWxlYXNlXTsKKyAgICBbX25ldHdvcmszRXZlbnREaXNwYXRjaGVyIHJlbGVhc2VdOworICAgIFtz
dXBlciBkZWFsbG9jXTsKK30KKworLSAodm9pZClzZXROZXR3b3JrMUhhbmRsZXI6KGlkPFRlc3RQ
cm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4paGFuZGxlcgoreworICAgIGlmIChoYW5kbGVy
ID09IF9uZXR3b3JrMUhhbmRsZXIpCisgICAgICAgIHJldHVybjsKKworICAgIFtfbmV0d29yazFI
YW5kbGVyIHJlbGVhc2VdOworICAgIF9uZXR3b3JrMUhhbmRsZXIgPSBbaGFuZGxlciByZXRhaW5d
OworCisgICAgYXV0byBhbHRlcm5hdGVEaXNwYXRjaGVyID0gbWFrZVVuaXF1ZTxPYmpDSW5zcGVj
dG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7CisgICAgYXV0byBhbHRlcm5h
dGVBZ2VudCA9IG1ha2VVbmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8TmV0d29yazFC
YWNrZW5kRGlzcGF0Y2hlciwgQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4+KCJO
ZXR3b3JrMSJfcywgKl9jb250cm9sbGVyLCBXVEZNb3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIpKTsK
KyAgICBfY29udHJvbGxlci0+YXBwZW5kRXh0cmFBZ2VudChXVEZNb3ZlKGFsdGVybmF0ZUFnZW50
KSk7Cit9CisKKy0gKGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4pbmV0d29y
azFIYW5kbGVyCit7CisgICAgcmV0dXJuIF9uZXR3b3JrMUhhbmRsZXI7Cit9CisKKy0gKFRlc3RQ
cm90b2NvbE5ldHdvcmszRG9tYWluRXZlbnREaXNwYXRjaGVyICopbmV0d29yazNFdmVudERpc3Bh
dGNoZXIKK3sKKyAgICBpZiAoIV9uZXR3b3JrM0V2ZW50RGlzcGF0Y2hlcikKKyAgICAgICAgX25l
dHdvcmszRXZlbnREaXNwYXRjaGVyID0gW1tUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkV2ZW50
RGlzcGF0Y2hlciBhbGxvY10gaW5pdFdpdGhDb250cm9sbGVyOl9jb250cm9sbGVyXTsKKyAgICBy
ZXR1cm4gX25ldHdvcmszRXZlbnREaXNwYXRjaGVyOworfQorCitAZW5kCisKKworIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29s
SW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisj
aW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwor
CitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sTmV0d29yazNEb21haW5FdmVudERpc3BhdGNo
ZXIKK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwor
fQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3Bl
Y3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOwor
ICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxl
cik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQor
CistICh2b2lkKXJlc291cmNlTG9hZGVkCit7CisgICAgY29uc3QgRnJvbnRlbmRSb3V0ZXImIHJv
dXRlciA9IF9jb250cm9sbGVyLT5mcm9udGVuZFJvdXRlcigpOworCisgICAgUmVmPEpTT046Ok9i
amVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGpzb25NZXNz
YWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIk5ldHdvcmszLnJlc291cmNlTG9hZGVkIl9zKTsK
KyAgICByb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cit9CisK
K0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0K
KworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8Rm91bmRh
dGlvbi9Gb3VuZGF0aW9uLmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpT
T05PYmplY3QuaD4KKworCitAY2xhc3MgVGVzdFByb3RvY29sTmV0d29yazJOZXR3b3JrRXJyb3I7
CisKKworCisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVy
ZmFjZSBUZXN0UHJvdG9jb2xOZXR3b3JrMk5ldHdvcmtFcnJvciA6IFJXSVByb3RvY29sSlNPTk9i
amVjdAorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3Ry
aW5nICosIGlkPiAqKXBheWxvYWQ7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9i
amVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKKy0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBjb2RlOihpbnQpY29kZTsKKy8q
IHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqbWVzc2Fn
ZTsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCBjb2Rl
OworQGVuZAorCitAcHJvdG9jb2wgVGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyIDxO
U09iamVjdD4KK0BvcHRpb25hbAorLSAodm9pZClsb2FkUmVzb3VyY2VXaXRoRXJyb3JDYWxsYmFj
azoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNr
Oih2b2lkKF4pKHZvaWQpKXN1Y2Nlc3NDYWxsYmFjazsKK0BlbmQKKworX19hdHRyaWJ1dGVfXygo
dmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbE5ldHdvcmsz
RG9tYWluRXZlbnREaXNwYXRjaGVyIDogTlNPYmplY3QKKy0gKHZvaWQpcmVzb3VyY2VMb2FkZWQ7
CitAZW5kCisKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRp
YmlsaXR5T2JqZWN0cy5oPgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFBy
b3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgorI2lt
cG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Cisj
aW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbE5ldHdv
cmszRG9tYWluRXZlbnREaXNwYXRjaGVyIChQcml2YXRlKQorLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoQ29udHJvbGxlcjooSW5zcGVjdG9yOjpBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIq
KWNvbnRyb2xsZXI7CitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5h
bC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0
dXJlLWd1YXJkcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVBy
b3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordGVt
cGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgorT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9t
UHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7CisKKworCit9IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMu
aAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1
cmUtZ3VhcmRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisKKyNpbXBvcnQgIlRl
c3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgorI2ltcG9y
dCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKwordXNpbmcg
bmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMgKE5ldHdvcmsyRG9tYWluKQorCisrICh2b2lkKV9wYXJzZU5ldHdvcmtFcnJvcjooVGVz
dFByb3RvY29sTmV0d29yazJOZXR3b3JrRXJyb3IgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlk
KXBheWxvYWQ7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucyAoTmV0d29yazJEb21haW4pCisKKysgKHZvaWQpX3BhcnNlTmV0d29ya0Vycm9yOihU
ZXN0UHJvdG9jb2xOZXR3b3JrMk5ldHdvcmtFcnJvciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDoo
aWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwg
W05TRGljdGlvbmFyeSBjbGFzc10pOworICAgICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sTmV0
d29yazJOZXR3b3JrRXJyb3IgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKK30KKwor
QGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisK
KyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRl
c3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucy5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZh
dGUuaD4KKyNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVl
cy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisKK0BpbXBsZW1lbnRhdGlvbiBU
ZXN0UHJvdG9jb2xOZXR3b3JrMk5ldHdvcmtFcnJvcgorCistIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2Fk
Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7
CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJt
ZXNzYWdlIl0sIEAibWVzc2FnZSIpOworICAgIHNlbGYubWVzc2FnZSA9IHBheWxvYWRbQCJtZXNz
YWdlIl07CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxv
YWRbQCJjb2RlIl0sIEAiY29kZSIpOworICAgIHNlbGYuY29kZSA9IFtwYXlsb2FkW0AiY29kZSJd
IGludGVnZXJWYWx1ZV07CisKKyAgICByZXR1cm4gc2VsZjsKK30KKy0gKGluc3RhbmNldHlwZSlp
bml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilvYmplY3QKK3sK
KyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoSlNPTk9iamVjdDpbb2JqZWN0IHRvSlNP
Tk9iamVjdF0uZ2V0KCldKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHJldHVybiBzZWxm
OworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3Nh
Z2UgY29kZTooaW50KWNvZGUKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAg
ICAgICAgcmV0dXJuIG5pbDsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJP
UEVSVFkobWVzc2FnZSwgQCJtZXNzYWdlIik7CisKKyAgICBzZWxmLm1lc3NhZ2UgPSBtZXNzYWdl
OworICAgIHNlbGYuY29kZSA9IGNvZGU7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9p
ZClzZXRNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UKK3sKKyAgICBbc3VwZXIgc2V0U3RyaW5n
Om1lc3NhZ2UgZm9yS2V5OkAibWVzc2FnZSJdOworfQorCistIChOU1N0cmluZyAqKW1lc3NhZ2UK
K3sKKyAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAIm1lc3NhZ2UiXTsKK30KKworLSAo
dm9pZClzZXRDb2RlOihpbnQpY29kZQoreworICAgIFtzdXBlciBzZXRJbnRlZ2VyOmNvZGUgZm9y
S2V5OkAiY29kZSJdOworfQorCistIChpbnQpY29kZQoreworICAgIHJldHVybiBbc3VwZXIgaW50
ZWdlckZvcktleTpAImNvZGUiXTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5q
c29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9leHBlY3RlZC9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uLXJlc3VsdApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uY2Y1YTU5MzFiYzAKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbi1yZXN1bHQKQEAgLTAs
MCArMSw4NzkgQEAKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50
LWRvbWFpbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Cisj
IyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcworCisjIyMgQmVnaW4gRmls
ZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2lm
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCisjaW5jbHVkZSAiVGVz
dFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250
ZW5kUm91dGVyLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hl
cihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNw
YXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQorICAgIEJhY2tlbmREaXNwYXRjaGVyKiBi
YWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0
KCk7IH0KK3ByaXZhdGU6CisgICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmRE
aXNwYXRjaGVyOworfTsKKworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRp
ZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyMjIyBFbmQgRmls
ZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBU
ZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFBy
b3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVz
cGFjZSBJbnNwZWN0b3IgeworCit0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKworCisKK30g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNo
ZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21h
aW4uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNs
dWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQorI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0
Y2hlcnMuaCIKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVn
aW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7
CisKK2NsYXNzIEZyb250ZW5kUm91dGVyOworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMj
IyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTog
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgorLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisK
KyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFByb3Rv
Y29sIHsKKworCisKKworCisvLyBUeXBlZGVmcy4KK25hbWVzcGFjZSBSdW50aW1lIHsKKy8qIFVu
aXF1ZSBvYmplY3QgaWRlbnRpZmllci4gKi8KK3R5cGVkZWYgU3RyaW5nIFJlbW90ZU9iamVjdElk
OworfSAvLyBSdW50aW1lCisKK25hbWVzcGFjZSBSdW50aW1lMiB7CisvKiBVbmlxdWUgb2JqZWN0
IGlkZW50aWZpZXIuICovCit0eXBlZGVmIFN0cmluZyBSZW1vdGVPYmplY3RJZDsKK30gLy8gUnVu
dGltZTIKKy8vIEVuZCBvZiB0eXBlZGVmcy4KKworCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29s
CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xP
YmplY3RzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21h
aW4uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorCisjaW5j
bHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCitu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworCisKK30gLy8g
bmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5Q
dHIuaD4KKworCisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKK30gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5o
CisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRv
bWFpbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNp
bXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJz
LmgiCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisK
K25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9y
L1Rlc3RQcm90b2NvbC5oPgorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIp
KSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0CitAZW5k
CisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90
b2NvbENvbmZpZ3VyYXRpb24uaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIK
KyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW1w
b3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKwordXNp
bmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENv
bmZpZ3VyYXRpb24KK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250
cm9sbGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50
YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVy
IGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQo
Y29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVybiBz
ZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisK
K0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKwor
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5q
c29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5oIgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNl
IEluc3BlY3RvcjsKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hl
cnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxGb3VuZGF0
aW9uL0ZvdW5kYXRpb24uaD4KKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNP
Tk9iamVjdC5oPgorCisKKworCisKKworCisKKworCisKKworCisjaW1wb3J0IDxXZWJJbnNwZWN0
b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+CisKKyMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFs
LmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVy
ZW50LWRvbWFpbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9i
amVjdFByaXZhdGUuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVj
dG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKworCisKKworIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1w
b3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+CisKK25hbWVz
cGFjZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+CitPcHRp
b25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVl
KTsKKworCisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
c2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xU
eXBlUGFyc2VyLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0
UHJpdmF0ZS5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW50ZXJmYWNlIFRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoUnVudGltZURvbWFpbikKKworKyAodm9pZClfcGFy
c2VSZW1vdGVPYmplY3RJZDooTlNTdHJpbmcgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBh
eWxvYWQ7CisKK0BlbmQKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChS
dW50aW1lMkRvbWFpbikKKworKyAodm9pZClfcGFyc2VSZW1vdGVPYmplY3RJZDooTlNTdHJpbmcg
Kiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisKK0BlbmQKKworQGltcGxlbWVu
dGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoUnVudGltZURvbWFpbikKKworKyAo
dm9pZClfcGFyc2VSZW1vdGVPYmplY3RJZDooTlNTdHJpbmcgKiopb3V0VmFsdWUgZnJvbVBheWxv
YWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxv
YWQsIFtOU1N0cmluZyBjbGFzc10pOworICAgICpvdXRWYWx1ZSA9IChOU1N0cmluZyAqKXBheWxv
YWQ7Cit9CisKK0BlbmQKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMgKFJ1bnRpbWUyRG9tYWluKQorCisrICh2b2lkKV9wYXJzZVJlbW90ZU9iamVjdElkOihOU1N0
cmluZyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TU3RyaW5nIGNsYXNzXSk7CisgICAgKm91
dFZhbHVlID0gKE5TU3RyaW5nICopcGF5bG9hZDsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xUeXBlcy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUt
dHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2lt
cG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0
b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorI2ltcG9ydCA8d3RmL0Fzc2VydGlv
bnMuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNw
ZWN0b3I7CisKKworCisKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24tcmVzdWx0IGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3NoYWRv
d2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMC4uMTA3MjEyYjliNDgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2hhZG93
ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24tcmVzdWx0CkBAIC0wLDAgKzEsMTA4OSBAQAor
IyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcworLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisjIyMgRW5kIEZpbGU6
IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcworCisjIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVy
bmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5
cGVzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5o
PgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXIgeworcHVibGljOgorICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJh
Y2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdU
Rk1vdmUoZGlzcGF0Y2hlcik7IH0KKyAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3Bh
dGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Citwcml2
YXRlOgorICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsK
K307CisKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjIyMgRW5kIEZpbGU6IFRlc3RBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmRE
aXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQt
b3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmpl
Y3RzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCisKKworfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisj
IyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYv
SlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQorI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIK
KyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMj
IEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTog
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVz
dFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFz
cyBGcm9udGVuZFJvdXRlcjsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZp
bGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9u
dGVuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNo
YWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0
RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25h
bWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVu
ZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbE9iamVjdHMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNo
YWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25z
Lmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFByb3RvY29sIHsK
KworCisKKy8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgorbmFtZXNwYWNlIFJ1bnRpbWUgeworY2xh
c3MgS2V5UGF0aDsKK30gLy8gUnVudGltZQorLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25z
LgorCisKKworCituYW1lc3BhY2UgVGVzdEhlbHBlcnMgeworCitTdHJpbmcgZ2V0RW51bUNvbnN0
YW50VmFsdWUoaW50IGNvZGUpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgZ2V0RW51
bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFsdWUpCit7CisgICAgcmV0dXJuIGdldEVudW1Db25zdGFu
dFZhbHVlKHN0YXRpY19jYXN0PGludD4oZW51bVZhbHVlKSk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFRlc3RIZWxwZXJzCisKK25hbWVzcGFjZSBSdW50aW1lIHsKKy8qIEtleSBwYXRoLiAqLworY2xh
c3MgS2V5UGF0aCA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKK3B1YmxpYzoKKyAgICAvLyBO
YW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICd0eXBlJyB3aGlsZSBnZW5lcmF0aW5nIEtleVBhdGgu
CisgICAgZW51bSBjbGFzcyBUeXBlIHsKKyAgICAgICAgTnVsbCA9IDAsCisgICAgICAgIFN0cmlu
ZyA9IDEsCisgICAgICAgIEFycmF5ID0gMiwKKyAgICB9OyAvLyBlbnVtIGNsYXNzIFR5cGUKKyAg
ICBlbnVtIHsKKyAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAorICAgICAgICBUeXBlU2V0ID0gMSA8
PCAwLAorICAgICAgICBBbGxGaWVsZHNTZXQgPSAoVHlwZVNldCkKKyAgICB9OworCisgICAgdGVt
cGxhdGU8aW50IFNUQVRFPgorICAgIGNsYXNzIEJ1aWxkZXIgeworICAgIHByaXZhdGU6CisgICAg
ICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVzdWx0OworCisgICAgICAgIHRlbXBsYXRlPGlu
dCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4q
Pih0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXIoUmVmPC8qS2V5UGF0aCovSlNP
Tjo6T2JqZWN0PiYmIG9iamVjdCkKKyAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmpl
Y3QpKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0Zp
ZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKKyAgICAgICAgfQor
ICAgICAgICBmcmllbmQgY2xhc3MgS2V5UGF0aDsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgQnVp
bGRlcjxTVEFURSB8IFR5cGVTZXQ+JiBzZXRUeXBlKFR5cGUgdmFsdWUpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUeXBlU2V0KSwgcHJvcGVydHlfdHlw
ZV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ0eXBlIl9z
LCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUo
dmFsdWUpKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VHlwZVNldD4oKTsKKyAgICAg
ICAgfQorCisgICAgICAgIFJlZjxLZXlQYXRoPiByZWxlYXNlKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90
X3JlYWR5KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihLZXlQYXRoKSA9PSBz
aXplb2YoSlNPTjo6T2JqZWN0KSwgY2Fubm90X2Nhc3QpOworCisgICAgICAgICAgICBSZWY8SlNP
Tjo6T2JqZWN0PiBqc29uUmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKKyAgICAg
ICAgICAgIGF1dG8gcmVzdWx0ID0gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8S2V5UGF0
aD4qPigmanNvblJlc3VsdCkpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAg
fQorICAgIH07CisKKyAgICAvKgorICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKKyAgICAg
KiBSZWY8S2V5UGF0aD4gcmVzdWx0ID0gS2V5UGF0aDo6Y3JlYXRlKCkKKyAgICAgKiAgICAgLnNl
dFR5cGUoLi4uKQorICAgICAqICAgICAucmVsZWFzZSgpOworICAgICAqLworICAgIHN0YXRpYyBC
dWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxk
ZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOworICAgIH0KKworICAgIHZv
aWQgc2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgeworICAgICAgICBKU09OOjpP
YmplY3RCYXNlOjpzZXRTdHJpbmcoInN0cmluZyJfcywgdmFsdWUpOworICAgIH0KKworICAgIHZv
aWQgc2V0QXJyYXkoUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gdmFsdWUpCisgICAgewor
ICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRBcnJheSgiYXJyYXkiX3MsIFdURk1vdmUodmFs
dWUpKTsKKyAgICB9Cit9OworCit9IC8vIFJ1bnRpbWUKKworCisKK25hbWVzcGFjZSBUZXN0SGVs
cGVycyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFByb3RvY29sRW51bVR5cGU+CitPcHRpb25hbDxQ
cm90b2NvbEVudW1UeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJik7
CisKKy8vIEVudW1zIGluIHRoZSAnUnVudGltZScgRG9tYWluCit0ZW1wbGF0ZTw+CitPcHRpb25h
bDxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlPiBwYXJzZUVudW1W
YWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlw
ZT4oY29uc3QgU3RyaW5nJik7CisKK30gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCisKK30gLy8g
bmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bE9iamVjdHMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQt
b3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bE9iamVjdHMuaCIKKworI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK25hbWVzcGFjZSBQcm90
b2NvbCB7CisKK25hbWVzcGFjZSBUZXN0SGVscGVycyB7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBj
b25zdCBlbnVtX2NvbnN0YW50X3ZhbHVlc1tdID0geworICAgICJudWxsIiwKKyAgICAic3RyaW5n
IiwKKyAgICAiYXJyYXkiLAorfTsKKworU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBj
b2RlKSB7CisgICAgcmV0dXJuIGVudW1fY29uc3RhbnRfdmFsdWVzW2NvZGVdOworfQorCisvLyBF
bnVtcyBpbiB0aGUgJ1J1bnRpbWUnIERvbWFpbgordGVtcGxhdGU8PgorT3B0aW9uYWw8SW5zcGVj
dG9yOjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZT4gcGFyc2VFbnVtVmFsdWVGcm9t
U3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6OlR5cGU+KGNvbnN0
IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCit7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25z
dGFudFZhbHVlc1tdID0geworICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1
bnRpbWU6OktleVBhdGg6OlR5cGU6Ok51bGwsCisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQ
cm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZTo6U3RyaW5nLAorICAgICAgICAoc2l6ZV90
KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6OlR5cGU6OkFycmF5LAorICAg
IH07CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAzOyArK2kpCisgICAgICAgIGlmIChwcm90
b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCisg
ICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6
OlR5cGUpY29uc3RhbnRWYWx1ZXNbaV07CisKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQor
CisKK30gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90
b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xPYmplY3RzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERp
c3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1v
cHRpb25hbC10eXBlLXNldHRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRl
QmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCisKKwor
bmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZp
Zy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNs
dWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisKK25hbWVzcGFjZSBJ
bnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24uaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9j
b2wuaD4KKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJm
YWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAorQGVuZAorCisKKyMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbi5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2ltcG9ydCAi
VGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgorCit1c2luZyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
bgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Cit9
CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVj
dG9yQ29udHJvbGxlciopY29udHJvbGxlcgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Cisg
ICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIEFTU0VSVChjb250cm9sbGVy
KTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9CisK
Ky0gKHZvaWQpZGVhbGxvYworeworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworQGVuZAorCisK
KyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorCisjIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90
b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5o
IgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3Rv
cjsKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKwor
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KKy8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3Vu
ZGF0aW9uLmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3Qu
aD4KKworCitAY2xhc3MgVGVzdFByb3RvY29sUnVudGltZUtleVBhdGg7CisKKwordHlwZWRlZiBO
U19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlKSB7CisgICAg
VGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlTnVsbCwKKyAgICBUZXN0UHJvdG9jb2xSdW50
aW1lS2V5UGF0aFR5cGVTdHJpbmcsCisgICAgVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBl
QXJyYXksCit9OworCisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQor
QGludGVyZmFjZSBUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aCA6IFJXSVByb3RvY29sSlNPTk9i
amVjdAorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3Ry
aW5nICosIGlkPiAqKXBheWxvYWQ7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9i
amVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKKy0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aFR5cGU6KFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZSl0eXBlOworLyog
cmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgVGVzdFByb3RvY29sUnVu
dGltZUtleVBhdGhUeXBlIHR5cGU7CisvKiBvcHRpb25hbCAqLyBAcHJvcGVydHkgKG5vbmF0b21p
YywgY29weSkgTlNTdHJpbmcgKnN0cmluZzsKKy8qIG9wdGlvbmFsICovIEBwcm9wZXJ0eSAobm9u
YXRvbWljLCBjb3B5KSBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmFycmF5OworQGVuZAorCisKKwor
CisKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5
T2JqZWN0cy5oPgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisj
aW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgorI2ltcG9ydCA8SmF2YVNj
cmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDx3dGYv
SlNPTlZhbHVlcy5oPgorCisKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFs
LmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0
ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lt
cG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xB
cnJheUNvbnZlcnNpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBPYmpDRW51bVR5cGU+CitPcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2Nv
bFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKKworCitpbmxpbmUgU3RyaW5nIHRvUHJvdG9j
b2xTdHJpbmcoVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlIHZhbHVlKQoreworICAgIHN3
aXRjaCh2YWx1ZSkgeworICAgIGNhc2UgVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlTnVs
bDoKKyAgICAgICAgcmV0dXJuICJudWxsIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sUnVudGlt
ZUtleVBhdGhUeXBlU3RyaW5nOgorICAgICAgICByZXR1cm4gInN0cmluZyJfczsKKyAgICBjYXNl
IFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZUFycmF5OgorICAgICAgICByZXR1cm4gImFy
cmF5Il9zOworICAgIH0KK30KKwordGVtcGxhdGU8PgoraW5saW5lIE9wdGlvbmFsPFRlc3RQcm90
b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYg
dmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09ICJudWxsIikKKyAgICAgICAgcmV0dXJuIFRlc3RQ
cm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZU51bGw7CisgICAgaWYgKHZhbHVlID09ICJzdHJpbmci
KQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlU3RyaW5nOwor
ICAgIGlmICh2YWx1ZSA9PSAiYXJyYXkiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUnVu
dGltZUtleVBhdGhUeXBlQXJyYXk7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKworfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFs
LXR5cGUtc2V0dGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorCisjaW1wb3J0
ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKKyNp
bXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisKK3Vz
aW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zIChSdW50aW1lRG9tYWluKQorCisrICh2b2lkKV9wYXJzZUtleVBhdGg6KFRlc3RQ
cm90b2NvbFJ1bnRpbWVLZXlQYXRoICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2Fk
OworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMg
KFJ1bnRpbWVEb21haW4pCisKKysgKHZvaWQpX3BhcnNlS2V5UGF0aDooVGVzdFByb3RvY29sUnVu
dGltZUtleVBhdGggKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBU
SFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3Nd
KTsKKyAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoIGFsbG9jXSBp
bml0V2l0aFBheWxvYWQ6cGF5bG9hZF07Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sVHlwZXMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1v
cHRpb25hbC10eXBlLXNldHRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0
ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9S
V0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5o
PgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3Rv
cjsKKworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sUnVudGltZUtleVBhdGgKKworLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJp
bmcgKiwgaWQ+ICopcGF5bG9hZAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQor
ICAgICAgICByZXR1cm4gbmlsOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9Q
Uk9QRVJUWShwYXlsb2FkW0AidHlwZSJdLCBAInR5cGUiKTsKKyAgICBPcHRpb25hbDxUZXN0UHJv
dG9jb2xSdW50aW1lS2V5UGF0aFR5cGU+IHR5cGUgPSBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFBy
b3RvY29sUnVudGltZUtleVBhdGhUeXBlPihwYXlsb2FkW0AidHlwZSJdKTsKKyAgICBUSFJPV19F
WENFUFRJT05fRk9SX0JBRF9FTlVNX1ZBTFVFKHR5cGUsIEAidHlwZSIpOworICAgIHNlbGYudHlw
ZSA9IHR5cGUudmFsdWUoKTsKKworICAgIHNlbGYuc3RyaW5nID0gcGF5bG9hZFtAInN0cmluZyJd
OworCisgICAgc2VsZi5hcnJheSA9IHBheWxvYWRbQCJhcnJheSJdOworCisgICAgcmV0dXJuIHNl
bGY7Cit9CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9j
b2xKU09OT2JqZWN0ICopb2JqZWN0Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0
aEpTT05PYmplY3Q6W29iamVjdCB0b0pTT05PYmplY3RdLmdldCgpXSkpCisgICAgICAgIHJldHVy
biBuaWw7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
VHlwZTooVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlKXR5cGUKK3sKKyAgICBpZiAoIShz
ZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHNlbGYudHlw
ZSA9IHR5cGU7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClzZXRUeXBlOihUZXN0
UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGUpdHlwZQoreworICAgIFtzdXBlciBzZXRTdHJpbmc6
dG9Qcm90b2NvbFN0cmluZyh0eXBlKSBmb3JLZXk6QCJ0eXBlIl07Cit9CisKKy0gKFRlc3RQcm90
b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZSl0eXBlCit7CisgICAgcmV0dXJuIGZyb21Qcm90b2NvbFN0
cmluZzxUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGU+KFtzdXBlciBzdHJpbmdGb3JLZXk6
QCJ0eXBlIl0pLnZhbHVlKCk7Cit9CisKKy0gKHZvaWQpc2V0U3RyaW5nOihOU1N0cmluZyAqKXN0
cmluZworeworICAgIFtzdXBlciBzZXRTdHJpbmc6c3RyaW5nIGZvcktleTpAInN0cmluZyJdOwor
fQorCistIChOU1N0cmluZyAqKXN0cmluZworeworICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9y
S2V5OkAic3RyaW5nIl07Cit9CisKKy0gKHZvaWQpc2V0QXJyYXk6KE5TQXJyYXkvKjxOU1N0cmlu
Zz4qLyAqKWFycmF5Cit7CisgICAgW3N1cGVyIHNldEpTT05BcnJheTp0b0pTT05TdHJpbmdBcnJh
eShhcnJheSkgZm9yS2V5OkAiYXJyYXkiXTsKK30KKworLSAoTlNBcnJheS8qPE5TU3RyaW5nPiov
ICopYXJyYXkKK3sKKyAgICByZXR1cm4gdG9PYmpDU3RyaW5nQXJyYXkoW3N1cGVyIEpTT05BcnJh
eUZvcktleTpAImFycmF5Il0pOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3Nob3VsZC1zdHJpcC1jb21tZW50cy5qc29uLXJlc3Vs
dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC9zaG91bGQtc3RyaXAtY29tbWVudHMuanNvbi1yZXN1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAuLmViYTg4ZDExM2NhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3Nob3VsZC1z
dHJpcC1jb21tZW50cy5qc29uLXJlc3VsdApAQCAtMCwwICsxLDgzNSBAQAorIyMjIEJlZ2luIEZp
bGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcworLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHNob3VsZC1zdHJpcC1jb21tZW50cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21t
YW5kcy5qcworCisjIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVy
cy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlwLWNvbW1l
bnRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3By
YWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
KworI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwor
Y2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHZvaWQgc2V0
QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIp
IHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KKyAgICBCYWNr
ZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tl
bmREaXNwYXRjaGVyLmdldCgpOyB9Citwcml2YXRlOgorICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0
Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKK307CisKKworCisKK30gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCisjIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisj
IyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KKy8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
KworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwor
CisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5k
RGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5j
cHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaG91bGQtc3RyaXAtY29tbWVu
dHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNs
dWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQorI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0
Y2hlcnMuaCIKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVn
aW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHNob3VsZC1zdHJpcC1jb21tZW50cy5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVz
dFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFz
cyBGcm9udGVuZFJvdXRlcjsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZp
bGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9u
dGVuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNo
b3VsZC1zdHJpcC1jb21tZW50cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0RnJvbnRlbmRE
aXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRl
bmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJ
bnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBU
ZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bE9iamVjdHMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNob3VsZC1zdHJp
cC1jb21tZW50cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJv
dG9jb2xUeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBJ
bnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworCisKKworCisKKworCisK
K30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbE9iamVjdHMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hv
dWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9i
amVjdHMuaCIKKworI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK25hbWVzcGFjZSBQcm90b2Nv
bCB7CisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorCisjIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBzaG91bGQtc3RyaXAtY29tbWVudHMuanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8d3Rm
L1JldGFpblB0ci5oPgorCisKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3Bh
dGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVy
cy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNob3VsZC1zdHJpcC1jb21t
ZW50cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNp
bXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJz
LmgiCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisK
K25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHNob3VsZC1zdHJpcC1jb21tZW50cy5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJv
dG9jb2wuaD4KKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50
ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAorQGVuZAorCisKKyMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
bi5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2ltcG9ydCAiVGVzdFBy
b3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRl
cm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVu
dGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5z
cGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgorewor
ICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Cit9CisKKy0g
KGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29u
dHJvbGxlciopY29udHJvbGxlcgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYg
KCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAg
ICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZv
aWQpZGVhbGxvYworeworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworQGVuZAorCisKKyMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorCisjIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHNob3VsZC1zdHJpcC1jb21tZW50cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgi
CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8d3Rm
L0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisjIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxk
LXN0cmlwLWNvbW1lbnRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKKyNpbXBvcnQgPFdl
Ykluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KKworCisKKworCisKKworCisKKwor
CisKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5
T2JqZWN0cy5oPgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJU
ZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVl
cy5oPgorCisKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29s
LmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+
CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5
cGU+CitPcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJp
bmcmIHZhbHVlKTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHNob3VsZC1zdHJpcC1jb21tZW50cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgor
CisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJz
ZXIuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRl
Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworCisKKworCisjIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sVHlwZXMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaG91
bGQtc3RyaXAtY29tbWVudHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQ
cm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgor
I2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsK
KworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1k
ZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFy
YXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOGZmZjlhNGUwZTMKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlw
ZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24tcmVzdWx0CkBAIC0wLDAg
KzEsODU2IEBACisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2Vk
LXByaW1pdGl2ZS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZl
LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisj
cHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Igewor
CitjbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdm9pZCBz
ZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hl
cikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQorICAgIEJh
Y2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFj
a2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KK3ByaXZhdGU6CisgICAgUmVmUHRyPEJhY2tlbmREaXNw
YXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOworfTsKKworCisKKworfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKKyMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisK
KyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5
cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBT
dHJpbmcgRXJyb3JTdHJpbmc7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBF
bmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0
QmFja2VuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCisvLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVz
Lmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
CisjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgorI2VuZGlmIC8v
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCituYW1lc3BhY2UgSW5z
cGVjdG9yIHsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6
IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1k
ZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0
UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNz
IEZyb250ZW5kUm91dGVyOworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmls
ZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250
ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlw
ZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgor
CisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+CisjaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCituYW1l
c3BhY2UgUHJvdG9jb2wgeworCisKKworCisKKy8vIFR5cGVkZWZzLgorbmFtZXNwYWNlIFJ1bnRp
bWUgeworLyogVW5pcXVlIG9iamVjdCBpZGVudGlmaWVyLiAqLwordHlwZWRlZiBpbnQgUmVtb3Rl
T2JqZWN0SWQ7Cit9IC8vIFJ1bnRpbWUKKy8vIEVuZCBvZiB0eXBlZGVmcy4KKworCisKK30gLy8g
bmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bE9iamVjdHMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNs
YXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRl
c3RQcm90b2NvbE9iamVjdHMuaCIKKworI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK25hbWVz
cGFjZSBQcm90b2NvbCB7CisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNw
cAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQt
cHJpbWl0aXZlLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2Vu
ZERpc3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCisKKworbmFtZXNw
YWNlIEluc3BlY3RvciB7CisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNv
bmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNp
bmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisKK25hbWVzcGFj
ZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rv
ci9UZXN0UHJvdG9jb2wuaD4KKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQi
KSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAorQGVu
ZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBl
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9y
dCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJ
bnRlcm5hbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisj
aW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgorI2lt
cG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Cisj
aW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hl
cnMuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
cy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gVGVz
dFByb3RvY29sQ29uZmlndXJhdGlvbgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJv
bGxlciogX2NvbnRyb2xsZXI7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xs
ZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgoreworICAgIHNl
bGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOwor
ICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Cisg
ICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIFtzdXBlciBkZWFs
bG9jXTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJh
dGlvbi5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5t
bQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxp
YXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMu
aD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1h
bGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKKyNpbXBv
cnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KKworCisKKworCisKKwor
CisKKworCisKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRp
YmlsaXR5T2JqZWN0cy5oPgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVz
dFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgor
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+
CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCisKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbEludGVybmFsLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJh
dGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0IDxX
ZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+CisKK25hbWVzcGFjZSBJ
bnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+CitPcHRpb25hbDxP
YmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKKwor
CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xh
cmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xU
eXBlUGFyc2VyLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0
UHJpdmF0ZS5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW50ZXJmYWNlIFRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoUnVudGltZURvbWFpbikKKworKyAodm9pZClfcGFy
c2VSZW1vdGVPYmplY3RJZDooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBh
eWxvYWQ7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucyAoUnVudGltZURvbWFpbikKKworKyAodm9pZClfcGFyc2VSZW1vdGVPYmplY3RJZDooTlNO
dW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19F
WENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU051bWJlciBjbGFzc10pOworICAgICpv
dXRWYWx1ZSA9IChOU051bWJlciAqKXBheWxvYWQ7Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sVHlwZXMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBl
LWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5h
bC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQg
PFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisjaW1wb3J0IDx3
dGYvQXNzZXJ0aW9ucy5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFt
ZXNwYWNlIEluc3BlY3RvcjsKKworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBl
cy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uLXJlc3VsdCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90
eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbi1yZXN1bHQKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAuLmJiODRhYjhmOGIxCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUt
ZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uLXJlc3VsdApAQCAtMCwwICsxLDEwMzggQEAKKyMj
IyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisvLyBEZWJ1Z2dlcgorSW5z
cGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiRGVidWdnZXIiLCBudWxsKTsKK0luc3BlY3Rv
ckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJEZWJ1Z2dlci5SZWFzb24iLCB7RGllZDogIkRpZWQiLCBG
YWludGVkOiAiRmFpbnRlZCIsIEh1bmdyeTogIkh1bmdyeSJ9KTsKK0luc3BlY3RvckJhY2tlbmQu
YWN0aXZhdGVEb21haW4oIkRlYnVnZ2VyIiwgbnVsbCk7CisjIyMgRW5kIEZpbGU6IEluc3BlY3Rv
ckJhY2tlbmRDb21tYW5kcy5qcworCisjIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tl
bmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1k
ZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVS
TkFURV9ESVNQQVRDSEVSUykKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorCituYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKKworY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVi
bGljOgorICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRj
aGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0
Y2hlcik7IH0KKyAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25z
dCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Citwcml2YXRlOgorICAgIFJl
ZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKK307CisKKworCisK
K30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5k
RGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5o
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJh
eS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3R5cGVk
ZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisj
IyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTog
VGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
VGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2lu
Y2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorI2luY2x1
ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNlbmRpZiAvLyBFTkFCTEUo
SU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworbmFtZXNwYWNlIEluc3BlY3RvciB7
CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0QmFj
a2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0
Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRp
b24tYXJyYXktdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgor
I2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBGcm9udGVuZFJvdXRlcjsKKwor
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3Bh
dGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXkt
dHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgor
CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNw
YXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlw
ZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBl
cy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Ig
eworCisKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworCisKKy8vIEZvcndhcmQgZGVjbGFyYXRp
b25zLgorbmFtZXNwYWNlIERlYnVnZ2VyIHsKK2VudW0gY2xhc3MgUmVhc29uOworfSAvLyBEZWJ1
Z2dlcgorLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgorCisKKy8vIFR5cGVkZWZzLgor
bmFtZXNwYWNlIERlYnVnZ2VyIHsKK3R5cGVkZWYgaW50IEJyZWFrcG9pbnRJZDsKK30gLy8gRGVi
dWdnZXIKKworbmFtZXNwYWNlIFJ1bnRpbWUgewordHlwZWRlZiBpbnQgT2JqZWN0SWQ7Cit0eXBl
ZGVmIEpTT046OkFycmF5T2Y8aW50PiBMdWNreU51bWJlcnM7Cit0eXBlZGVmIEpTT046OkFycmF5
T2Y8U3RyaW5nPiBCYWJ5TmFtZXM7Cit0eXBlZGVmIEpTT046OkFycmF5T2Y8aW50PiBOZXdPYmpl
Y3RzOwordHlwZWRlZiBKU09OOjpBcnJheU9mPGludD4gT2xkT2JqZWN0czsKK3R5cGVkZWYgSlNP
Tjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uPiBTdG9wUmVh
c29uczsKK30gLy8gUnVudGltZQorLy8gRW5kIG9mIHR5cGVkZWZzLgorCituYW1lc3BhY2UgVGVz
dEhlbHBlcnMgeworCitTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpOworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFs
dWUpCit7CisgICAgcmV0dXJuIGdldEVudW1Db25zdGFudFZhbHVlKHN0YXRpY19jYXN0PGludD4o
ZW51bVZhbHVlKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCisKK25hbWVzcGFj
ZSBEZWJ1Z2dlciB7CisvKiAgKi8KK2VudW0gY2xhc3MgUmVhc29uIHsKKyAgICBEaWVkID0gMCwK
KyAgICBGYWludGVkID0gMSwKKyAgICBIdW5ncnkgPSAyLAorfTsgLy8gZW51bSBjbGFzcyBSZWFz
b24KK30gLy8gRGVidWdnZXIKKworCisKK25hbWVzcGFjZSBUZXN0SGVscGVycyB7CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFByb3RvY29sRW51bVR5cGU+CitPcHRpb25hbDxQcm90b2NvbEVudW1UeXBl
PiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJik7CisKKy8vIEVudW1zIGlu
IHRoZSAnRGVidWdnZXInIERvbWFpbgordGVtcGxhdGU8PgorT3B0aW9uYWw8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbj4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb24+KGNvbnN0IFN0cmluZyYpOworCit9IC8v
IG5hbWVzcGFjZSBUZXN0SGVscGVycworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKKworLy8gSGFzaCBkZWNsYXJhdGlvbnMgaW4gdGhl
ICdEZWJ1Z2dlcicgRG9tYWluCit0ZW1wbGF0ZTw+CitzdHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbj4geworICAgIHR5cGVkZWYgSW50SGFzaDxJ
bnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uPiBIYXNoOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV1RGCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorCisjIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorCisjaW5jbHVkZSA8d3RmL09wdGlvbmFs
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9y
IHsKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKKwor
c3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFsdWVzW10gPSB7CisgICAg
IkRpZWQiLAorICAgICJGYWludGVkIiwKKyAgICAiSHVuZ3J5IiwKK307CisKK1N0cmluZyBnZXRF
bnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgeworICAgIHJldHVybiBlbnVtX2NvbnN0YW50X3Zh
bHVlc1tjb2RlXTsKK30KKworLy8gRW51bXMgaW4gdGhlICdEZWJ1Z2dlcicgRG9tYWluCit0ZW1w
bGF0ZTw+CitPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uPiBw
YXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OlJl
YXNvbj4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKK3sKKyAgICBzdGF0aWMgY29uc3Qg
c2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7CisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbjo6RGllZCwKKyAgICAgICAgKHNpemVfdClJbnNwZWN0
b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uOjpGYWludGVkLAorICAgICAgICAoc2l6ZV90
KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb246Okh1bmdyeSwKKyAgICB9Owor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMzsgKytpKQorICAgICAgICBpZiAocHJvdG9jb2xT
dHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNbaV1dKQorICAgICAg
ICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uKWNvbnN0
YW50VmFsdWVzW2ldOworCisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKworCit9IC8vIG5h
bWVzcGFjZSBUZXN0SGVscGVycworCisKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0
cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5o
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJh
eS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVycy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworCisKK25hbWVzcGFjZSBJbnNw
ZWN0b3IgeworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRl
c3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSAiVGVzdFByb3RvY29s
SW50ZXJuYWwuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNp
bmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2Vu
ZERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0
aW9uLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9u
LWFycmF5LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+CisKK19fYXR0cmlidXRl
X18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25m
aWd1cmF0aW9uIDogTlNPYmplY3QKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24uaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJh
dGlvbi5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRp
b24tYXJyYXktdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKKworI2ltcG9ydCAi
VGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNw
YXRjaGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxl
QWdlbnQuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29u
dHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXJzLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxl
bWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KK3sKKyAgICBBdWdtZW50YWJsZUlu
c3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xs
ZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAg
cmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBj
b250cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAg
ICBbc3VwZXIgZGVhbGxvY107Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbENvbmZpZ3VyYXRpb24ubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50
RGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRl
Y2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0
ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVz
Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2wuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24t
YXJyYXktdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCisjaW1wb3J0IDxXZWJJbnNw
ZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+CisKKworCisKKwordHlwZWRlZiBOU19FTlVN
KE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGVidWdnZXJSZWFzb24pIHsKKyAgICBUZXN0UHJvdG9j
b2xEZWJ1Z2dlclJlYXNvbkRpZWQsCisgICAgVGVzdFByb3RvY29sRGVidWdnZXJSZWFzb25GYWlu
dGVkLAorICAgIFRlc3RQcm90b2NvbERlYnVnZ2VyUmVhc29uSHVuZ3J5LAorfTsKKworCisKKwor
CisKKworCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxp
dHlPYmplY3RzLmg+CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNp
bXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCisjaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPHd0Zi9K
U09OVmFsdWVzLmg+CisKKworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwu
aAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUu
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0
ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5
Q29udmVyc2lvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3RlbXBsYXRlPHR5cGVu
YW1lIE9iakNFbnVtVHlwZT4KK09wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3Ry
aW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOworCisKK2lubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0
cmluZyhUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbiB2YWx1ZSkKK3sKKyAgICBzd2l0Y2godmFs
dWUpIHsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERlYnVnZ2VyUmVhc29uRGllZDoKKyAgICAgICAg
cmV0dXJuICJEaWVkIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sRGVidWdnZXJSZWFzb25GYWlu
dGVkOgorICAgICAgICByZXR1cm4gIkZhaW50ZWQiX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xE
ZWJ1Z2dlclJlYXNvbkh1bmdyeToKKyAgICAgICAgcmV0dXJuICJIdW5ncnkiX3M7CisgICAgfQor
fQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sRGVidWdnZXJSZWFz
b24+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIGlmICh2
YWx1ZSA9PSAiRGllZCIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNv
bkRpZWQ7CisgICAgaWYgKHZhbHVlID09ICJGYWludGVkIikKKyAgICAgICAgcmV0dXJuIFRlc3RQ
cm90b2NvbERlYnVnZ2VyUmVhc29uRmFpbnRlZDsKKyAgICBpZiAodmFsdWUgPT0gIkh1bmdyeSIp
CisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbkh1bmdyeTsKKyAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworfQorCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisK
KyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90
b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisK
K0BpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChEZWJ1Z2dlckRvbWFpbikK
KworKyAodm9pZClfcGFyc2VCcmVha3BvaW50SWQ6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21Q
YXlsb2FkOihpZClwYXlsb2FkOworKyAodm9pZClfcGFyc2VSZWFzb246KE5TTnVtYmVyICoqKW91
dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworCitAZW5kCitAaW50ZXJmYWNlIFRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucyAoUnVudGltZURvbWFpbikKKworKyAodm9pZClfcGFyc2VP
YmplY3RJZDooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Cisr
ICh2b2lkKV9wYXJzZUx1Y2t5TnVtYmVyczooTlNBcnJheS8qPE5TTnVtYmVyPiovICoqKW91dFZh
bHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworKyAodm9pZClfcGFyc2VCYWJ5TmFtZXM6KE5T
QXJyYXkvKjxOU1N0cmluZz4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsK
KysgKHZvaWQpX3BhcnNlTmV3T2JqZWN0czooTlNBcnJheS8qPE5TTnVtYmVyPiovICoqKW91dFZh
bHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworKyAodm9pZClfcGFyc2VPbGRPYmplY3RzOihO
U0FycmF5Lyo8TlNOdW1iZXI+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7
CisrICh2b2lkKV9wYXJzZVN0b3BSZWFzb25zOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopb3V0
VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9u
IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoRGVidWdnZXJEb21haW4pCisKKysgKHZvaWQp
X3BhcnNlQnJlYWtwb2ludElkOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQp
cGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05T
TnVtYmVyIGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gKE5TTnVtYmVyICopcGF5bG9hZDsKK30K
KworKyAodm9pZClfcGFyc2VSZWFzb246KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2Fk
OihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2Fk
LCBbTlNTdHJpbmcgY2xhc3NdKTsKKyAgICBPcHRpb25hbDxUZXN0UHJvdG9jb2xEZWJ1Z2dlclJl
YXNvbj4gcmVzdWx0ID0gSW5zcGVjdG9yOjpmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29s
RGVidWdnZXJSZWFzb24+KHBheWxvYWQpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX0VO
VU1fVkFMVUUocmVzdWx0LCBAIlJlYXNvbiIpOworICAgICpvdXRWYWx1ZSA9IEAocmVzdWx0LnZh
bHVlKCkpOworfQorCitAZW5kCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zIChSdW50aW1lRG9tYWluKQorCisrICh2b2lkKV9wYXJzZU9iamVjdElkOihOU051bWJl
ciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TTnVtYmVyIGNsYXNzXSk7CisgICAgKm91dFZh
bHVlID0gKE5TTnVtYmVyICopcGF5bG9hZDsKK30KKworKyAodm9pZClfcGFyc2VMdWNreU51bWJl
cnM6KE5TQXJyYXkvKjxOU051bWJlcj4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5
bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TQXJy
YXkvKjxOU051bWJlcj4qLyBjbGFzc10pOworICAgICpvdXRWYWx1ZSA9IChOU0FycmF5Lyo8TlNO
dW1iZXI+Ki8gKilwYXlsb2FkOworfQorCisrICh2b2lkKV9wYXJzZUJhYnlOYW1lczooTlNBcnJh
eS8qPE5TU3RyaW5nPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7Cisg
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNBcnJheS8qPE5TU3Ry
aW5nPiovIGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAq
KXBheWxvYWQ7Cit9CisKKysgKHZvaWQpX3BhcnNlTmV3T2JqZWN0czooTlNBcnJheS8qPE5TTnVt
YmVyPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1df
RVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNBcnJheS8qPE5TTnVtYmVyPiovIGNs
YXNzXSk7CisgICAgKm91dFZhbHVlID0gKE5TQXJyYXkvKjxOU051bWJlcj4qLyAqKXBheWxvYWQ7
Cit9CisKKysgKHZvaWQpX3BhcnNlT2xkT2JqZWN0czooTlNBcnJheS8qPE5TTnVtYmVyPiovICoq
KW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNBcnJheS8qPE5TTnVtYmVyPiovIGNsYXNzXSk7Cisg
ICAgKm91dFZhbHVlID0gKE5TQXJyYXkvKjxOU051bWJlcj4qLyAqKXBheWxvYWQ7Cit9CisKKysg
KHZvaWQpX3BhcnNlU3RvcFJlYXNvbnM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKilvdXRWYWx1
ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFE
X1RZUEUocGF5bG9hZCwgW05TQXJyYXkvKjxOU1N0cmluZz4qLyBjbGFzc10pOworICAgICpvdXRW
YWx1ZSA9IChOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilwYXlsb2FkOworfQorCitAZW5kCisKKwor
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwu
aCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDxX
ZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorI2ltcG9ydCA8d3Rm
L0Fzc2VydGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVz
cGFjZSBJbnNwZWN0b3I7CisKKworCisKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5
cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbi1yZXN1bHQg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
dHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbi1yZXN1bHQKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAuLjA5NzAwMGQxODZiCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUt
ZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24tcmVzdWx0CkBAIC0wLDAgKzEsMTA1MSBAQAorIyMj
IEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcworLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworLy8gUnVudGltZQorSW5zcGVj
dG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiUnVudGltZSIsIG51bGwpOworSW5zcGVjdG9yQmFj
a2VuZC5yZWdpc3RlckVudW0oIlJ1bnRpbWUuRmFybUFuaW1hbHMiLCB7UGlnczogIlBpZ3MiLCBD
b3dzOiAiQ293cyIsIENhdHM6ICJDYXRzIiwgSGVuczogIkhlbnMifSk7CitJbnNwZWN0b3JCYWNr
ZW5kLnJlZ2lzdGVyRW51bSgiUnVudGltZS5Ud29MZWdnZWRBbmltYWxzIiwge0R1Y2tzOiAiRHVj
a3MiLCBIZW5zOiAiSGVucyIsIENyb3dzOiAiQ3Jvd3MiLCBGbGFtaW5nb3M6ICJGbGFtaW5nb3Mi
fSk7CitJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJSdW50aW1lIiwgbnVsbCk7Cisj
IyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcworCisjIyMgQmVnaW4gRmls
ZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2lmIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCisjaW5jbHVkZSAiVGVzdFBy
b3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5k
Um91dGVyLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihS
ZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRj
aGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQorICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNr
ZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7
IH0KK3ByaXZhdGU6CisgICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNw
YXRjaGVyOworfTsKKworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAv
LyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyMjIyBFbmQgRmlsZTog
VGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0
QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0
eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29s
T2JqZWN0cy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJ
bnNwZWN0b3IgeworCit0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKworCisKK30gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgK
KworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYv
SlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQorI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIK
KyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMj
IEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTog
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJv
dG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEZy
b250ZW5kUm91dGVyOworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTog
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5k
RGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1k
ZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEZyb250ZW5k
RGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250
ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTog
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xPYmplY3RzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xh
cmF0aW9uLWVudW0tdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yUHJvdG9jb2xUeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVz
cGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworCisKKy8vIEZv
cndhcmQgZGVjbGFyYXRpb25zLgorbmFtZXNwYWNlIFJ1bnRpbWUgeworZW51bSBjbGFzcyBGYXJt
QW5pbWFsczsKK2VudW0gY2xhc3MgVHdvTGVnZ2VkQW5pbWFsczsKK30gLy8gUnVudGltZQorLy8g
RW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgorCisKKworCituYW1lc3BhY2UgVGVzdEhlbHBl
cnMgeworCitTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpOworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFsdWUpCit7
CisgICAgcmV0dXJuIGdldEVudW1Db25zdGFudFZhbHVlKHN0YXRpY19jYXN0PGludD4oZW51bVZh
bHVlKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCisKK25hbWVzcGFjZSBSdW50
aW1lIHsKKy8qICAqLworZW51bSBjbGFzcyBGYXJtQW5pbWFscyB7CisgICAgUGlncyA9IDAsCisg
ICAgQ293cyA9IDEsCisgICAgQ2F0cyA9IDIsCisgICAgSGVucyA9IDMsCit9OyAvLyBlbnVtIGNs
YXNzIEZhcm1BbmltYWxzCisvKiAgKi8KK2VudW0gY2xhc3MgVHdvTGVnZ2VkQW5pbWFscyB7Cisg
ICAgRHVja3MgPSA0LAorICAgIEhlbnMgPSAzLAorICAgIENyb3dzID0gNSwKKyAgICBGbGFtaW5n
b3MgPSA2LAorfTsgLy8gZW51bSBjbGFzcyBUd29MZWdnZWRBbmltYWxzCit9IC8vIFJ1bnRpbWUK
KworCisKK25hbWVzcGFjZSBUZXN0SGVscGVycyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFByb3Rv
Y29sRW51bVR5cGU+CitPcHRpb25hbDxQcm90b2NvbEVudW1UeXBlPiBwYXJzZUVudW1WYWx1ZUZy
b21TdHJpbmcoY29uc3QgU3RyaW5nJik7CisKKy8vIEVudW1zIGluIHRoZSAnUnVudGltZScgRG9t
YWluCit0ZW1wbGF0ZTw+CitPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpG
YXJtQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlJ1bnRpbWU6OkZhcm1BbmltYWxzPihjb25zdCBTdHJpbmcmKTsKK3RlbXBsYXRlPD4KK09wdGlv
bmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM+IHBhcnNl
RW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUd29MZWdn
ZWRBbmltYWxzPihjb25zdCBTdHJpbmcmKTsKKworfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMK
KworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisK
K25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhh
c2g7CisKKy8vIEhhc2ggZGVjbGFyYXRpb25zIGluIHRoZSAnUnVudGltZScgRG9tYWluCit0ZW1w
bGF0ZTw+CitzdHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6
RmFybUFuaW1hbHM+IHsKKyAgICB0eXBlZGVmIEludEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6
UnVudGltZTo6RmFybUFuaW1hbHM+IEhhc2g7Cit9OwordGVtcGxhdGU8Pgorc3RydWN0IERlZmF1
bHRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM+IHsK
KyAgICB0eXBlZGVmIEludEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHdvTGVn
Z2VkQW5pbWFscz4gSGFzaDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9i
amVjdHMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJh
dGlvbi1lbnVtLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0
cy5oIgorCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFByb3RvY29sIHsK
KworbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKKworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVu
dW1fY29uc3RhbnRfdmFsdWVzW10gPSB7CisgICAgIlBpZ3MiLAorICAgICJDb3dzIiwKKyAgICAi
Q2F0cyIsCisgICAgIkhlbnMiLAorICAgICJEdWNrcyIsCisgICAgIkNyb3dzIiwKKyAgICAiRmxh
bWluZ29zIiwKK307CisKK1N0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgewor
ICAgIHJldHVybiBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb2RlXTsKK30KKworLy8gRW51bXMgaW4g
dGhlICdSdW50aW1lJyBEb21haW4KK3RlbXBsYXRlPD4KK09wdGlvbmFsPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5z
cGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM+KGNvbnN0IFN0cmluZyYgcHJv
dG9jb2xTdHJpbmcpCit7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1td
ID0geworICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1B
bmltYWxzOjpQaWdzLAorICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRp
bWU6OkZhcm1BbmltYWxzOjpDb3dzLAorICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9j
b2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzOjpDYXRzLAorICAgICAgICAoc2l6ZV90KUluc3BlY3Rv
cjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzOjpIZW5zLAorICAgIH07CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCA0OyArK2kpCisgICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9
PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCisgICAgICAgICAgICBy
ZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzKWNvbnN0YW50
VmFsdWVzW2ldOworCisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKwordGVtcGxhdGU8Pgor
T3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFscz4g
cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3
b0xlZ2dlZEFuaW1hbHM+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCit7CisgICAgc3Rh
dGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0geworICAgICAgICAoc2l6ZV90KUlu
c3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM6OkR1Y2tzLAorICAg
ICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1h
bHM6OkhlbnMsCisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6
VHdvTGVnZ2VkQW5pbWFsczo6Q3Jvd3MsCisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90
b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFsczo6RmxhbWluZ29zLAorICAgIH07CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCA0OyArK2kpCisgICAgICAgIGlmIChwcm90b2NvbFN0cmlu
ZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCisgICAgICAgICAg
ICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHMp
Y29uc3RhbnRWYWx1ZXNbaV07CisKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCisKK30g
Ly8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAor
Cit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xP
YmplY3RzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNo
ZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9u
LWVudW0tdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlz
cGF0Y2hlcnMuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKKworCituYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSAiVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIK
KyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwor
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFj
a2VuZERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1
cmF0aW9uLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0
aW9uLWVudW0tdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KKworX19hdHRyaWJ1
dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbENv
bmZpZ3VyYXRpb24gOiBOU09iamVjdAorQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1
cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJh
dGlvbi1lbnVtLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCisKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlz
cGF0Y2hlcnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJs
ZUFnZW50Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNv
bnRyb2xsZXIuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVycy5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXJzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBs
ZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCit7CisgICAgQXVnbWVudGFibGVJ
bnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9s
bGVyCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAg
IHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250cm9sbGVyID0g
Y29udHJvbGxlcjsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7Cisg
ICAgW3N1cGVyIGRlYWxsb2NdOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xDb25maWd1cmF0aW9uLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVu
dERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1k
ZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0
ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVz
Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2wuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24t
ZW51bS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKKyNpbXBvcnQgPFdlYkluc3Bl
Y3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KKworCisKKworCit0eXBlZGVmIE5TX0VOVU0o
TlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHMpIHsKKyAgICBUZXN0UHJv
dG9jb2xSdW50aW1lRmFybUFuaW1hbHNQaWdzLAorICAgIFRlc3RQcm90b2NvbFJ1bnRpbWVGYXJt
QW5pbWFsc0Nvd3MsCisgICAgVGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzQ2F0cywKKyAg
ICBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHNIZW5zLAorfTsKKwordHlwZWRlZiBOU19F
TlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHMpIHsKKyAg
ICBUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFsc0R1Y2tzLAorICAgIFRlc3RQcm90
b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzSGVucywKKyAgICBUZXN0UHJvdG9jb2xSdW50aW1l
VHdvTGVnZ2VkQW5pbWFsc0Nyb3dzLAorICAgIFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRB
bmltYWxzRmxhbWluZ29zLAorfTsKKworCisKKworCisKKworCisjaW1wb3J0IDxXZWJJbnNwZWN0
b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+CisKKyMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFs
LmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVu
dW0tdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
KyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVj
dFByaXZhdGUuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9y
Q29udHJvbGxlci5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKworCisKKworIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0IDxX
ZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+CisKK25hbWVzcGFjZSBJ
bnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+CitPcHRpb25hbDxP
YmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKKwor
CitpbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sUnVudGltZUZhcm1B
bmltYWxzIHZhbHVlKQoreworICAgIHN3aXRjaCh2YWx1ZSkgeworICAgIGNhc2UgVGVzdFByb3Rv
Y29sUnVudGltZUZhcm1BbmltYWxzUGlnczoKKyAgICAgICAgcmV0dXJuICJQaWdzIl9zOworICAg
IGNhc2UgVGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzQ293czoKKyAgICAgICAgcmV0dXJu
ICJDb3dzIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzQ2F0czoK
KyAgICAgICAgcmV0dXJuICJDYXRzIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sUnVudGltZUZh
cm1BbmltYWxzSGVuczoKKyAgICAgICAgcmV0dXJuICJIZW5zIl9zOworICAgIH0KK30KKwordGVt
cGxhdGU8PgoraW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFscz4g
ZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVl
ID09ICJQaWdzIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFs
c1BpZ3M7CisgICAgaWYgKHZhbHVlID09ICJDb3dzIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90
b2NvbFJ1bnRpbWVGYXJtQW5pbWFsc0Nvd3M7CisgICAgaWYgKHZhbHVlID09ICJDYXRzIikKKyAg
ICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFsc0NhdHM7CisgICAgaWYg
KHZhbHVlID09ICJIZW5zIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFJ1bnRpbWVGYXJt
QW5pbWFsc0hlbnM7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKworaW5saW5lIFN0cmlu
ZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzIHZh
bHVlKQoreworICAgIHN3aXRjaCh2YWx1ZSkgeworICAgIGNhc2UgVGVzdFByb3RvY29sUnVudGlt
ZVR3b0xlZ2dlZEFuaW1hbHNEdWNrczoKKyAgICAgICAgcmV0dXJuICJEdWNrcyJfczsKKyAgICBj
YXNlIFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzSGVuczoKKyAgICAgICAgcmV0
dXJuICJIZW5zIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1h
bHNDcm93czoKKyAgICAgICAgcmV0dXJuICJDcm93cyJfczsKKyAgICBjYXNlIFRlc3RQcm90b2Nv
bFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzRmxhbWluZ29zOgorICAgICAgICByZXR1cm4gIkZsYW1p
bmdvcyJfczsKKyAgICB9Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBPcHRpb25hbDxUZXN0UHJv
dG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFscz4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0
cmluZyYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09ICJEdWNrcyIpCisgICAgICAgIHJldHVy
biBUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFsc0R1Y2tzOworICAgIGlmICh2YWx1
ZSA9PSAiSGVucyIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2Vk
QW5pbWFsc0hlbnM7CisgICAgaWYgKHZhbHVlID09ICJDcm93cyIpCisgICAgICAgIHJldHVybiBU
ZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFsc0Nyb3dzOworICAgIGlmICh2YWx1ZSA9
PSAiRmxhbWluZ29zIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdn
ZWRBbmltYWxzRmxhbWluZ29zOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK30gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMu
bW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVu
dW0tdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
KyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorCisjaW1wb3J0ICJUZXN0
UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKKyNpbXBvcnQg
PFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisKK3VzaW5nIG5h
bWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zIChSdW50aW1lRG9tYWluKQorCisrICh2b2lkKV9wYXJzZUZhcm1BbmltYWxzOihOU051bWJl
ciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNlVHdv
TGVnZ2VkQW5pbWFsczooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxv
YWQ7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cyAoUnVudGltZURvbWFpbikKKworKyAodm9pZClfcGFyc2VGYXJtQW5pbWFsczooTlNOdW1iZXIg
Kiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJ
T05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBjbGFzc10pOworICAgIE9wdGlvbmFs
PFRlc3RQcm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFscz4gcmVzdWx0ID0gSW5zcGVjdG9yOjpmcm9t
UHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzPihwYXlsb2FkKTsK
KyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9FTlVNX1ZBTFVFKHJlc3VsdCwgQCJGYXJtQW5p
bWFscyIpOworICAgICpvdXRWYWx1ZSA9IEAocmVzdWx0LnZhbHVlKCkpOworfQorCisrICh2b2lk
KV9wYXJzZVR3b0xlZ2dlZEFuaW1hbHM6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2Fk
OihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2Fk
LCBbTlNTdHJpbmcgY2xhc3NdKTsKKyAgICBPcHRpb25hbDxUZXN0UHJvdG9jb2xSdW50aW1lVHdv
TGVnZ2VkQW5pbWFscz4gcmVzdWx0ID0gSW5zcGVjdG9yOjpmcm9tUHJvdG9jb2xTdHJpbmc8VGVz
dFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHM+KHBheWxvYWQpOworICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfQkFEX0VOVU1fVkFMVUUocmVzdWx0LCBAIlR3b0xlZ2dlZEFuaW1hbHMiKTsK
KyAgICAqb3V0VmFsdWUgPSBAKHJlc3VsdC52YWx1ZSgpKTsKK30KKworQGVuZAorCisKKyMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisKKyMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xUeXBlcy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKwor
I2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDxXZWJJbnNw
ZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorI2ltcG9ydCA8d3RmL0Fzc2Vy
dGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJ
bnNwZWN0b3I7CisKKworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24tcmVzdWx0IGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVj
bGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbi1yZXN1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAuLmM5NWI5ZDhjMWY1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFy
YXRpb24tb2JqZWN0LXR5cGUuanNvbi1yZXN1bHQKQEAgLTAsMCArMSwyNDIwIEBACisjIyMgQmVn
aW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKy8vIERhdGFiYXNlCitJbnNwZWN0
b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJEYXRhYmFzZSIsIG51bGwpOworSW5zcGVjdG9yQmFj
a2VuZC5yZWdpc3RlckVudW0oIkRhdGFiYXNlLk1vdXNlQnV0dG9uIiwge05vbmU6ICJOb25lIiwg
TGVmdDogIkxlZnQiLCBNaWRkbGU6ICJNaWRkbGUiLCBSaWdodDogIlJpZ2h0In0pOworSW5zcGVj
dG9yQmFja2VuZC5yZWdpc3RlckVudW0oIkRhdGFiYXNlLk9wdGlvbmFsUGFyYW1ldGVyQnVuZGxl
RGlyZWN0aW9uYWxpdHkiLCB7TFRSOiAiTFRSIiwgUlRMOiAiUlRMIn0pOworSW5zcGVjdG9yQmFj
a2VuZC5yZWdpc3RlckVudW0oIkRhdGFiYXNlLlBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5
Iiwge0xUUjogIkxUUiIsIFJUTDogIlJUTCJ9KTsKK0luc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVE
b21haW4oIkRhdGFiYXNlIiwgbnVsbCk7CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRD
b21tYW5kcy5qcworCisjIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlv
bi1vYmplY3QtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKworbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CisKK2NsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAg
ICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBk
aXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9
CisgICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1
cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQorcHJpdmF0ZToKKyAgICBSZWZQdHI8QmFj
a2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Cit9OworCisKKworCit9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQorIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUu
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJp
bmcgRXJyb3JTdHJpbmc7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQg
RmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFj
a2VuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5
cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEJh
Y2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
RnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUg
PHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwor
I2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorI2luY2x1ZGUgIlRl
c3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKwor
Cit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERp
c3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMu
aAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2Jq
ZWN0LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNs
dWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgor
CituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgRnJvbnRlbmRSb3V0ZXI7CisKK30gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVy
cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBl
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCisKKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK30gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNo
ZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5q
c29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5o
PgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Igewor
CisKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworCisKKy8vIEZvcndhcmQgZGVjbGFyYXRpb25z
LgorbmFtZXNwYWNlIERhdGFiYXNlIHsKK2NsYXNzIEVycm9yOworY2xhc3MgT3B0aW9uYWxQYXJh
bWV0ZXJCdW5kbGU7CitjbGFzcyBQYXJhbWV0ZXJCdW5kbGU7CitjbGFzcyBPYmplY3RXaXRoUHJv
cGVydHlOYW1lQ29uZmxpY3RzOworY2xhc3MgRHVtbXlPYmplY3Q7CitlbnVtIGNsYXNzIE1vdXNl
QnV0dG9uOworfSAvLyBEYXRhYmFzZQorCituYW1lc3BhY2UgVGVzdCB7CitjbGFzcyBQYXJhbWV0
ZXJCdW5kbGU7Cit9IC8vIFRlc3QKKy8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KKwor
CisvLyBUeXBlZGVmcy4KK25hbWVzcGFjZSBEYXRhYmFzZSB7Cit0eXBlZGVmIEpTT046OkFycmF5
T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBFcnJvckxpc3Q7Cit9IC8v
IERhdGFiYXNlCisvLyBFbmQgb2YgdHlwZWRlZnMuCisKK25hbWVzcGFjZSBUZXN0SGVscGVycyB7
CisKK1N0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSk7CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IFN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkKK3sKKyAg
ICByZXR1cm4gZ2V0RW51bUNvbnN0YW50VmFsdWUoc3RhdGljX2Nhc3Q8aW50PihlbnVtVmFsdWUp
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKKworbmFtZXNwYWNlIERhdGFiYXNl
IHsKKy8qIERhdGFiYXNlIGVycm9yLiAqLworY2xhc3MgRXJyb3IgOiBwdWJsaWMgSlNPTjo6T2Jq
ZWN0QmFzZSB7CitwdWJsaWM6CisgICAgZW51bSB7CisgICAgICAgIE5vRmllbGRzU2V0ID0gMCwK
KyAgICAgICAgTWVzc2FnZVNldCA9IDEgPDwgMCwKKyAgICAgICAgQ29kZVNldCA9IDEgPDwgMSwK
KyAgICAgICAgQWxsRmllbGRzU2V0ID0gKE1lc3NhZ2VTZXQgfCBDb2RlU2V0KQorICAgIH07CisK
KyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CisgICAgY2xhc3MgQnVpbGRlciB7CisgICAgcHJpdmF0
ZToKKyAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7CisKKyAgICAgICAgdGVt
cGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUg
fCBTVEVQPio+KHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcihSZWY8LypFcnJv
ciovSlNPTjo6T2JqZWN0PiYmIG9iamVjdCkKKyAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92
ZShvYmplY3QpKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9
PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKKyAgICAg
ICAgfQorICAgICAgICBmcmllbmQgY2xhc3MgRXJyb3I7CisgICAgcHVibGljOgorCisgICAgICAg
IEJ1aWxkZXI8U1RBVEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIHZh
bHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTWVz
c2FnZVNldCksIHByb3BlcnR5X21lc3NhZ2VfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldFN0cmluZygibWVzc2FnZSJfcywgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxNZXNzYWdlU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxT
VEFURSB8IENvZGVTZXQ+JiBzZXRDb2RlKGludCB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENvZGVTZXQpLCBwcm9wZXJ0eV9jb2RlX2FscmVh
ZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2VyKCJjb2RlIl9zLCB2YWx1
ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvZGVTZXQ+KCk7CisgICAgICAgIH0K
KworICAgICAgICBSZWY8RXJyb3I+IHJlbGVhc2UoKQorICAgICAgICB7CisgICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkp
OworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEVycm9yKSA9PSBzaXplb2YoSlNP
Tjo6T2JqZWN0KSwgY2Fubm90X2Nhc3QpOworCisgICAgICAgICAgICBSZWY8SlNPTjo6T2JqZWN0
PiBqc29uUmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKKyAgICAgICAgICAgIGF1
dG8gcmVzdWx0ID0gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8RXJyb3I+Kj4oJmpzb25S
ZXN1bHQpKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICB9Owor
CisgICAgLyoKKyAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CisgICAgICogUmVmPEVycm9y
PiByZXN1bHQgPSBFcnJvcjo6Y3JlYXRlKCkKKyAgICAgKiAgICAgLnNldE1lc3NhZ2UoLi4uKQor
ICAgICAqICAgICAuc2V0Q29kZSguLi4pCisgICAgICogICAgIC5yZWxlYXNlKCk7CisgICAgICov
CisgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCisgICAgeworICAgICAg
ICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7Cisg
ICAgfQorfTsKKworLyogRW51bWVyYXRlcyBkaWZmZXJlbnQgbW91c2UgYnV0dG9ucyB0aGF0IGNh
biBiZSB1c2VkLiAqLworZW51bSBjbGFzcyBNb3VzZUJ1dHRvbiB7CisgICAgTm9uZSA9IDAsCisg
ICAgTGVmdCA9IDEsCisgICAgTWlkZGxlID0gMiwKKyAgICBSaWdodCA9IDMsCit9OyAvLyBlbnVt
IGNsYXNzIE1vdXNlQnV0dG9uCitjbGFzcyBPcHRpb25hbFBhcmFtZXRlckJ1bmRsZSA6IHB1Ymxp
YyBKU09OOjpPYmplY3RCYXNlIHsKK3B1YmxpYzoKKyAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0
eSBuYW1lICdkaXJlY3Rpb25hbGl0eScgd2hpbGUgZ2VuZXJhdGluZyBPcHRpb25hbFBhcmFtZXRl
ckJ1bmRsZS4KKyAgICBlbnVtIGNsYXNzIERpcmVjdGlvbmFsaXR5IHsKKyAgICAgICAgTFRSID0g
NCwKKyAgICAgICAgUlRMID0gNSwKKyAgICB9OyAvLyBlbnVtIGNsYXNzIERpcmVjdGlvbmFsaXR5
CisgICAgZW51bSB7CisgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKKyAgICAgICAgQWxsRmllbGRz
U2V0ID0gMAorICAgIH07CisKKyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CisgICAgY2xhc3MgQnVp
bGRlciB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbV9yZXN1
bHQ7CisKKyAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYg
Y2FzdFN0YXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9j
YXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAg
QnVpbGRlcihSZWY8LypPcHRpb25hbFBhcmFtZXRlckJ1bmRsZSovSlNPTjo6T2JqZWN0PiYmIG9i
amVjdCkKKyAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQorICAgICAgICB7
CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRl
cl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKKyAgICAgICAgfQorICAgICAgICBmcmllbmQg
Y2xhc3MgT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU7CisgICAgcHVibGljOgorCisgICAgICAgIFJl
ZjxPcHRpb25hbFBhcmFtZXRlckJ1bmRsZT4gcmVsZWFzZSgpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9y
ZWFkeSk7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoT3B0aW9uYWxQYXJhbWV0
ZXJCdW5kbGUpID09IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7CisKKyAgICAg
ICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25SZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9u
TnVsbCgpOworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBXVEZNb3ZlKCpyZWludGVycHJldF9j
YXN0PFJlZjxPcHRpb25hbFBhcmFtZXRlckJ1bmRsZT4qPigmanNvblJlc3VsdCkpOworICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvKgorICAgICAq
IFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKKyAgICAgKiBSZWY8T3B0aW9uYWxQYXJhbWV0ZXJCdW5k
bGU+IHJlc3VsdCA9IE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpjcmVhdGUoKQorICAgICAqICAg
ICAucmVsZWFzZSgpOworICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBj
cmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046
Ok9iamVjdDo6Y3JlYXRlKCkpOworICAgIH0KKworICAgIHZvaWQgc2V0Q29sdW1uTmFtZXMoUmVm
UHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gdmFsdWUpCisgICAgeworICAgICAgICBKU09OOjpP
YmplY3RCYXNlOjpzZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIFdURk1vdmUodmFsdWUpKTsKKyAg
ICB9CisKKyAgICB2b2lkIHNldEJ1dHRvbnMoUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPj4gdmFsdWUpCisgICAgeworICAgICAg
ICBKU09OOjpPYmplY3RCYXNlOjpzZXRBcnJheSgiYnV0dG9ucyJfcywgV1RGTW92ZSh2YWx1ZSkp
OworICAgIH0KKworICAgIHZvaWQgc2V0RGlyZWN0aW9uYWxpdHkoRGlyZWN0aW9uYWxpdHkgdmFs
dWUpCisgICAgeworICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRTdHJpbmcoImRpcmVjdGlv
bmFsaXR5Il9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0
YW50VmFsdWUodmFsdWUpKTsKKyAgICB9CisKKyAgICB2b2lkIHNldE5vdGVzKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCisgICAgeworICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRTdHJpbmcoIm5v
dGVzIl9zLCB2YWx1ZSk7CisgICAgfQorCisgICAgdm9pZCBzZXRUaW1lc3RhbXAoZG91YmxlIHZh
bHVlKQorICAgIHsKKyAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0RG91YmxlKCJ0aW1lc3Rh
bXAiX3MsIHZhbHVlKTsKKyAgICB9CisKKyAgICB2b2lkIHNldFZhbHVlcyhSZWZQdHI8SlNPTjo6
T2JqZWN0PiB2YWx1ZSkKKyAgICB7CisgICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldE9iamVj
dCgidmFsdWVzIl9zLCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgfQorCisgICAgdm9pZCBzZXRQYXls
b2FkKFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWUpCisgICAgeworICAgICAgICBKU09OOjpPYmpl
Y3RCYXNlOjpzZXRWYWx1ZSgicGF5bG9hZCJfcywgV1RGTW92ZSh2YWx1ZSkpOworICAgIH0KKwor
ICAgIHZvaWQgc2V0RXJyb3IoUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpF
cnJvcj4gdmFsdWUpCisgICAgeworICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRPYmplY3Qo
ImVycm9yIl9zLCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgfQorCisgICAgdm9pZCBzZXRFcnJvckxp
c3QoUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvckxpc3Q+IHZhbHVl
KQorICAgIHsKKyAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0QXJyYXkoImVycm9yTGlzdCJf
cywgV1RGTW92ZSh2YWx1ZSkpOworICAgIH0KK307CisKK2NsYXNzIFBhcmFtZXRlckJ1bmRsZSA6
IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKK3B1YmxpYzoKKyAgICAvLyBOYW1lZCBhZnRlciBw
cm9wZXJ0eSBuYW1lICdkaXJlY3Rpb25hbGl0eScgd2hpbGUgZ2VuZXJhdGluZyBQYXJhbWV0ZXJC
dW5kbGUuCisgICAgZW51bSBjbGFzcyBEaXJlY3Rpb25hbGl0eSB7CisgICAgICAgIExUUiA9IDQs
CisgICAgICAgIFJUTCA9IDUsCisgICAgfTsgLy8gZW51bSBjbGFzcyBEaXJlY3Rpb25hbGl0eQor
ICAgIGVudW0geworICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCisgICAgICAgIENvbHVtbk5hbWVz
U2V0ID0gMSA8PCAwLAorICAgICAgICBCdXR0b25zU2V0ID0gMSA8PCAxLAorICAgICAgICBEaXJl
Y3Rpb25hbGl0eVNldCA9IDEgPDwgMiwKKyAgICAgICAgTm90ZXNTZXQgPSAxIDw8IDMsCisgICAg
ICAgIFRpbWVzdGFtcFNldCA9IDEgPDwgNCwKKyAgICAgICAgVmFsdWVzU2V0ID0gMSA8PCA1LAor
ICAgICAgICBQYXlsb2FkU2V0ID0gMSA8PCA2LAorICAgICAgICBFcnJvclNldCA9IDEgPDwgNywK
KyAgICAgICAgRXJyb3JMaXN0U2V0ID0gMSA8PCA4LAorICAgICAgICBBbGxGaWVsZHNTZXQgPSAo
Q29sdW1uTmFtZXNTZXQgfCBCdXR0b25zU2V0IHwgRGlyZWN0aW9uYWxpdHlTZXQgfCBOb3Rlc1Nl
dCB8IFRpbWVzdGFtcFNldCB8IFZhbHVlc1NldCB8IFBheWxvYWRTZXQgfCBFcnJvclNldCB8IEVy
cm9yTGlzdFNldCkKKyAgICB9OworCisgICAgdGVtcGxhdGU8aW50IFNUQVRFPgorICAgIGNsYXNz
IEJ1aWxkZXIgeworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1f
cmVzdWx0OworCisgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RF
UD4mIGNhc3RTdGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnBy
ZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKKyAgICAgICAgfQorCisgICAg
ICAgIEJ1aWxkZXIoUmVmPC8qUGFyYW1ldGVyQnVuZGxlKi9KU09OOjpPYmplY3Q+JiYgb2JqZWN0
KQorICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2Ny
ZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAgICAgICB9CisgICAgICAgIGZyaWVuZCBjbGFz
cyBQYXJhbWV0ZXJCdW5kbGU7CisgICAgcHVibGljOgorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBDb2x1bW5OYW1lc1NldD4mIHNldENvbHVtbk5hbWVzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0
cmluZz4+IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgQ29sdW1uTmFtZXNTZXQpLCBwcm9wZXJ0eV9jb2x1bW5OYW1lc19hbHJlYWR5X3NldCk7
CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB2YWx1ZSk7
CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvbHVtbk5hbWVzU2V0PigpOworICAgICAg
ICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IEJ1dHRvbnNTZXQ+JiBzZXRCdXR0b25zKFJl
ZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1
dHRvbj4+IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgQnV0dG9uc1NldCksIHByb3BlcnR5X2J1dHRvbnNfYWxyZWFkeV9zZXQpOworICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJidXR0b25zIl9zLCB2YWx1ZSk7CisgICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPEJ1dHRvbnNTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgRGlyZWN0aW9uYWxpdHlTZXQ+JiBzZXREaXJlY3Rpb25hbGl0eShEaXJl
Y3Rpb25hbGl0eSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
IShTVEFURSAmIERpcmVjdGlvbmFsaXR5U2V0KSwgcHJvcGVydHlfZGlyZWN0aW9uYWxpdHlfYWxy
ZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygiZGlyZWN0aW9uYWxp
dHkiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRW
YWx1ZSh2YWx1ZSkpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxEaXJlY3Rpb25hbGl0
eVNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBOb3Rlc1NldD4m
IHNldE5vdGVzKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBOb3Rlc1NldCksIHByb3BlcnR5X25vdGVzX2FscmVhZHlf
c2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCB2YWx1ZSk7
CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE5vdGVzU2V0PigpOworICAgICAgICB9CisK
KyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFRpbWVzdGFtcFNldD4mIHNldFRpbWVzdGFtcChkb3Vi
bGUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUg
JiBUaW1lc3RhbXBTZXQpLCBwcm9wZXJ0eV90aW1lc3RhbXBfYWxyZWFkeV9zZXQpOworICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCB2YWx1ZSk7CisgICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPFRpbWVzdGFtcFNldD4oKTsKKyAgICAgICAgfQorCisgICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBWYWx1ZXNTZXQ+JiBzZXRWYWx1ZXMoUmVmUHRyPEpTT046Ok9i
amVjdD4gdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBWYWx1ZXNTZXQpLCBwcm9wZXJ0eV92YWx1ZXNfYWxyZWFkeV9zZXQpOworICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldE9iamVjdCgidmFsdWVzIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPFZhbHVlc1NldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBQYXlsb2FkU2V0PiYgc2V0UGF5bG9hZChSZWZQdHI8SlNPTjo6VmFsdWU+IHZh
bHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgUGF5
bG9hZFNldCksIHByb3BlcnR5X3BheWxvYWRfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPFBheWxvYWRTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgRXJyb3JTZXQ+JiBzZXRFcnJvcihSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0
YWJhc2U6OkVycm9yPiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIEVycm9yU2V0KSwgcHJvcGVydHlfZXJyb3JfYWxyZWFkeV9zZXQpOworICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdCgiZXJyb3IiX3MsIHZhbHVlKTsKKyAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8RXJyb3JTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgRXJyb3JMaXN0U2V0PiYgc2V0RXJyb3JMaXN0KFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3JMaXN0PiB2YWx1ZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEVycm9yTGlzdFNldCksIHByb3BlcnR5
X2Vycm9yTGlzdF9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXko
ImVycm9yTGlzdCJfcywgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxFcnJv
ckxpc3RTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBSZWY8UGFyYW1ldGVyQnVuZGxlPiBy
ZWxlYXNlKCkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0g
QWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKHNpemVvZihQYXJhbWV0ZXJCdW5kbGUpID09IHNpemVvZihKU09OOjpPYmplY3QpLCBj
YW5ub3RfY2FzdCk7CisKKyAgICAgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25SZXN1bHQg
PSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBX
VEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxQYXJhbWV0ZXJCdW5kbGU+Kj4oJmpzb25SZXN1
bHQpKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICB9OworCisg
ICAgLyoKKyAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CisgICAgICogUmVmPFBhcmFtZXRl
ckJ1bmRsZT4gcmVzdWx0ID0gUGFyYW1ldGVyQnVuZGxlOjpjcmVhdGUoKQorICAgICAqICAgICAu
c2V0Q29sdW1uTmFtZXMoLi4uKQorICAgICAqICAgICAuc2V0QnV0dG9ucyguLi4pCisgICAgICog
ICAgIC5zZXREaXJlY3Rpb25hbGl0eSguLi4pCisgICAgICogICAgIC5zZXROb3RlcyguLi4pCisg
ICAgICogICAgIC5zZXRUaW1lc3RhbXAoLi4uKQorICAgICAqICAgICAuc2V0VmFsdWVzKC4uLikK
KyAgICAgKiAgICAgLnNldFBheWxvYWQoLi4uKQorICAgICAqICAgICAuc2V0RXJyb3IoLi4uKQor
ICAgICAqICAgICAuc2V0RXJyb3JMaXN0KC4uLikKKyAgICAgKiAgICAgLnJlbGVhc2UoKTsKKyAg
ICAgKi8KKyAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
KTsKKyAgICB9Cit9OworCisvKiBDb25mbGljdGVkIG5hbWVzIG1heSBjYXVzZSBnZW5lcmF0ZWQg
Z2V0dGVycy9zZXR0ZXJzIHRvIGNsYXNoIHdpdGggYnVpbHQtaW4gSW5zcGVjdG9yT2JqZWN0IG1l
dGhvZHMuICovCitjbGFzcyBPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzIDogcHVibGlj
IEpTT046Ok9iamVjdEJhc2UgeworcHVibGljOgorICAgIGVudW0geworICAgICAgICBOb0ZpZWxk
c1NldCA9IDAsCisgICAgICAgIEludGVnZXJTZXQgPSAxIDw8IDAsCisgICAgICAgIEFycmF5U2V0
ID0gMSA8PCAxLAorICAgICAgICBTdHJpbmdTZXQgPSAxIDw8IDIsCisgICAgICAgIFZhbHVlU2V0
ID0gMSA8PCAzLAorICAgICAgICBPYmplY3RTZXQgPSAxIDw8IDQsCisgICAgICAgIEFsbEZpZWxk
c1NldCA9IChJbnRlZ2VyU2V0IHwgQXJyYXlTZXQgfCBTdHJpbmdTZXQgfCBWYWx1ZVNldCB8IE9i
amVjdFNldCkKKyAgICB9OworCisgICAgdGVtcGxhdGU8aW50IFNUQVRFPgorICAgIGNsYXNzIEJ1
aWxkZXIgeworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVz
dWx0OworCisgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4m
IGNhc3RTdGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRf
Y2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAg
IEJ1aWxkZXIoUmVmPC8qT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cyovSlNPTjo6T2Jq
ZWN0PiYmIG9iamVjdCkKKyAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQor
ICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1Nl
dCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKKyAgICAgICAgfQorICAgICAg
ICBmcmllbmQgY2xhc3MgT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0czsKKyAgICBwdWJs
aWM6CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IEludGVnZXJTZXQ+JiBzZXRJbnRlZ2VyKGNv
bnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBJbnRlZ2VyU2V0KSwgcHJvcGVydHlfaW50ZWdlcl9hbHJlYWR5X3NldCk7Cisg
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJpbnRlZ2VyIl9zLCB2YWx1ZSk7CisgICAg
ICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEludGVnZXJTZXQ+KCk7CisgICAgICAgIH0KKworICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgQXJyYXlTZXQ+JiBzZXRBcnJheShjb25zdCBTdHJpbmcmIHZh
bHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQXJy
YXlTZXQpLCBwcm9wZXJ0eV9hcnJheV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0U3RyaW5nKCJhcnJheSJfcywgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxBcnJheVNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBT
dHJpbmdTZXQ+JiBzZXRTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFN0cmluZ1NldCksIHByb3BlcnR5X3N0
cmluZ19hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJzdHJp
bmciX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U3RyaW5nU2V0Pigp
OworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFZhbHVlU2V0PiYgc2V0VmFs
dWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoIShTVEFURSAmIFZhbHVlU2V0KSwgcHJvcGVydHlfdmFsdWVfYWxyZWFkeV9zZXQpOwor
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidmFsdWUiX3MsIHZhbHVlKTsKKyAgICAg
ICAgICAgIHJldHVybiBjYXN0U3RhdGU8VmFsdWVTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgT2JqZWN0U2V0PiYgc2V0T2JqZWN0KGNvbnN0IFN0cmluZyYgdmFs
dWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBPYmpl
Y3RTZXQpLCBwcm9wZXJ0eV9vYmplY3RfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1
bHQtPnNldFN0cmluZygib2JqZWN0Il9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2Fz
dFN0YXRlPE9iamVjdFNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIFJlZjxPYmplY3RXaXRo
UHJvcGVydHlOYW1lQ29uZmxpY3RzPiByZWxlYXNlKCkKKyAgICAgICAgeworICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5
KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihPYmplY3RXaXRoUHJvcGVydHlO
YW1lQ29uZmxpY3RzKSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0KSwgY2Fubm90X2Nhc3QpOworCisg
ICAgICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uUmVzdWx0ID0gbV9yZXN1bHQucmVsZWFz
ZU5vbk51bGwoKTsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gV1RGTW92ZSgqcmVpbnRlcnBy
ZXRfY2FzdDxSZWY8T2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cz4qPigmanNvblJlc3Vs
dCkpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgIH07CisKKyAg
ICAvKgorICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKKyAgICAgKiBSZWY8T2JqZWN0V2l0
aFByb3BlcnR5TmFtZUNvbmZsaWN0cz4gcmVzdWx0ID0gT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNv
bmZsaWN0czo6Y3JlYXRlKCkKKyAgICAgKiAgICAgLnNldEludGVnZXIoLi4uKQorICAgICAqICAg
ICAuc2V0QXJyYXkoLi4uKQorICAgICAqICAgICAuc2V0U3RyaW5nKC4uLikKKyAgICAgKiAgICAg
LnNldFZhbHVlKC4uLikKKyAgICAgKiAgICAgLnNldE9iamVjdCguLi4pCisgICAgICogICAgIC5y
ZWxlYXNlKCk7CisgICAgICovCisgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0
ZSgpCisgICAgeworICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKSk7CisgICAgfQorfTsKKworfSAvLyBEYXRhYmFzZQorCituYW1lc3BhY2Ug
VGVzdCB7CitjbGFzcyBQYXJhbWV0ZXJCdW5kbGUgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7
CitwdWJsaWM6CisgICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAnZGlyZWN0aW9uYWxp
dHknIHdoaWxlIGdlbmVyYXRpbmcgUGFyYW1ldGVyQnVuZGxlLgorICAgIGVudW0gY2xhc3MgRGly
ZWN0aW9uYWxpdHkgeworICAgICAgICBMVFIgPSA0LAorICAgICAgICBSVEwgPSA1LAorICAgIH07
IC8vIGVudW0gY2xhc3MgRGlyZWN0aW9uYWxpdHkKKyAgICBlbnVtIHsKKyAgICAgICAgTm9GaWVs
ZHNTZXQgPSAwLAorICAgICAgICBEaXJlY3Rpb25hbGl0eVNldCA9IDEgPDwgMCwKKyAgICAgICAg
QnV0dG9uc1NldCA9IDEgPDwgMSwKKyAgICAgICAgQ29sdW1uTmFtZXNTZXQgPSAxIDw8IDIsCisg
ICAgICAgIE5vdGVzU2V0ID0gMSA8PCAzLAorICAgICAgICBUaW1lc3RhbXBTZXQgPSAxIDw8IDQs
CisgICAgICAgIFZhbHVlc1NldCA9IDEgPDwgNSwKKyAgICAgICAgUGF5bG9hZFNldCA9IDEgPDwg
NiwKKyAgICAgICAgRXJyb3JTZXQgPSAxIDw8IDcsCisgICAgICAgIEFsbEZpZWxkc1NldCA9IChE
aXJlY3Rpb25hbGl0eVNldCB8IEJ1dHRvbnNTZXQgfCBDb2x1bW5OYW1lc1NldCB8IE5vdGVzU2V0
IHwgVGltZXN0YW1wU2V0IHwgVmFsdWVzU2V0IHwgUGF5bG9hZFNldCB8IEVycm9yU2V0KQorICAg
IH07CisKKyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CisgICAgY2xhc3MgQnVpbGRlciB7CisgICAg
cHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7CisKKyAgICAg
ICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8
U1RBVEUgfCBTVEVQPio+KHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcihSZWY8
LypQYXJhbWV0ZXJCdW5kbGUqL0pTT046Ok9iamVjdD4mJiBvYmplY3QpCisgICAgICAgICAgICA6
IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5p
dF9zdGF0ZSk7CisgICAgICAgIH0KKyAgICAgICAgZnJpZW5kIGNsYXNzIFBhcmFtZXRlckJ1bmRs
ZTsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IERpcmVjdGlvbmFsaXR5
U2V0PiYgc2V0RGlyZWN0aW9uYWxpdHkoRGlyZWN0aW9uYWxpdHkgdmFsdWUpCisgICAgICAgIHsK
KyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBEaXJlY3Rpb25hbGl0eVNldCks
IHByb3BlcnR5X2RpcmVjdGlvbmFsaXR5X2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXRTdHJpbmcoImRpcmVjdGlvbmFsaXR5Il9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpU
ZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUodmFsdWUpKTsKKyAgICAgICAgICAgIHJl
dHVybiBjYXN0U3RhdGU8RGlyZWN0aW9uYWxpdHlTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgQnV0dG9uc1NldD4mIHNldEJ1dHRvbnMoUmVmUHRyPEpTT046OkFy
cmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPj4gdmFsdWUp
CisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBCdXR0b25z
U2V0KSwgcHJvcGVydHlfYnV0dG9uc19hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0QXJyYXkoImJ1dHRvbnMiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0
U3RhdGU8QnV0dG9uc1NldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBDb2x1bW5OYW1lc1NldD4mIHNldENvbHVtbk5hbWVzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0
cmluZz4+IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgQ29sdW1uTmFtZXNTZXQpLCBwcm9wZXJ0eV9jb2x1bW5OYW1lc19hbHJlYWR5X3NldCk7
CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB2YWx1ZSk7
CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvbHVtbk5hbWVzU2V0PigpOworICAgICAg
ICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IE5vdGVzU2V0PiYgc2V0Tm90ZXMoY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIE5vdGVzU2V0KSwgcHJvcGVydHlfbm90ZXNfYWxyZWFkeV9zZXQpOworICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldFN0cmluZygibm90ZXMiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIHJl
dHVybiBjYXN0U3RhdGU8Tm90ZXNTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgVGltZXN0YW1wU2V0PiYgc2V0VGltZXN0YW1wKGRvdWJsZSB2YWx1ZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFRpbWVzdGFtcFNldCks
IHByb3BlcnR5X3RpbWVzdGFtcF9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0
U3RhdGU8VGltZXN0YW1wU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IFZhbHVlc1NldD4mIHNldFZhbHVlcyhSZWZQdHI8SlNPTjo6T2JqZWN0PiB2YWx1ZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFZhbHVlc1NldCks
IHByb3BlcnR5X3ZhbHVlc19hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
T2JqZWN0KCJ2YWx1ZXMiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8
VmFsdWVzU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFBheWxv
YWRTZXQ+JiBzZXRQYXlsb2FkKFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWUpCisgICAgICAgIHsK
KyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBQYXlsb2FkU2V0KSwgcHJvcGVy
dHlfcGF5bG9hZF9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0VmFsdWUo
InBheWxvYWQiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8UGF5bG9h
ZFNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBFcnJvclNldD4m
IHNldEVycm9yKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHZh
bHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRXJy
b3JTZXQpLCBwcm9wZXJ0eV9lcnJvcl9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0T2JqZWN0KCJlcnJvciJfcywgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxFcnJvclNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIFJlZjxQYXJhbWV0ZXJCdW5k
bGU+IHJlbGVhc2UoKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFU
RSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOworICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoc2l6ZW9mKFBhcmFtZXRlckJ1bmRsZSkgPT0gc2l6ZW9mKEpTT046Ok9iamVj
dCksIGNhbm5vdF9jYXN0KTsKKworICAgICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4ganNvblJl
c3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgICAgICBhdXRvIHJlc3Vs
dCA9IFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPFBhcmFtZXRlckJ1bmRsZT4qPigmanNv
blJlc3VsdCkpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgIH07
CisKKyAgICAvKgorICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKKyAgICAgKiBSZWY8UGFy
YW1ldGVyQnVuZGxlPiByZXN1bHQgPSBQYXJhbWV0ZXJCdW5kbGU6OmNyZWF0ZSgpCisgICAgICog
ICAgIC5zZXREaXJlY3Rpb25hbGl0eSguLi4pCisgICAgICogICAgIC5zZXRCdXR0b25zKC4uLikK
KyAgICAgKiAgICAgLnNldENvbHVtbk5hbWVzKC4uLikKKyAgICAgKiAgICAgLnNldE5vdGVzKC4u
LikKKyAgICAgKiAgICAgLnNldFRpbWVzdGFtcCguLi4pCisgICAgICogICAgIC5zZXRWYWx1ZXMo
Li4uKQorICAgICAqICAgICAuc2V0UGF5bG9hZCguLi4pCisgICAgICogICAgIC5zZXRFcnJvcigu
Li4pCisgICAgICogICAgIC5yZWxlYXNlKCk7CisgICAgICovCisgICAgc3RhdGljIEJ1aWxkZXI8
Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0Zp
ZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7CisgICAgfQorfTsKKworfSAvLyBUZXN0
CisKKworCituYW1lc3BhY2UgVGVzdEhlbHBlcnMgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBQcm90
b2NvbEVudW1UeXBlPgorT3B0aW9uYWw8UHJvdG9jb2xFbnVtVHlwZT4gcGFyc2VFbnVtVmFsdWVG
cm9tU3RyaW5nKGNvbnN0IFN0cmluZyYpOworCisvLyBFbnVtcyBpbiB0aGUgJ0RhdGFiYXNlJyBE
b21haW4KK3RlbXBsYXRlPD4KK09wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNl
OjpNb3VzZUJ1dHRvbj4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4oY29uc3QgU3RyaW5nJik7Cit0ZW1wbGF0ZTw+CitP
cHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6T3B0aW9uYWxQYXJhbWV0ZXJC
dW5kbGU6OkRpcmVjdGlvbmFsaXR5PiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RGF0YWJhc2U6Ok9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25h
bGl0eT4oY29uc3QgU3RyaW5nJik7Cit0ZW1wbGF0ZTw+CitPcHRpb25hbDxJbnNwZWN0b3I6OlBy
b3RvY29sOjpEYXRhYmFzZTo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4gcGFyc2VF
bnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQYXJhbWV0
ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5Pihjb25zdCBTdHJpbmcmKTsKKworLy8gRW51bXMgaW4g
dGhlICdUZXN0JyBEb21haW4KK3RlbXBsYXRlPD4KK09wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlRlc3Q6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+IHBhcnNlRW51bVZhbHVl
RnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRp
cmVjdGlvbmFsaXR5Pihjb25zdCBTdHJpbmcmKTsKKworfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBl
cnMKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
CisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVs
dEhhc2g7CisKKy8vIEhhc2ggZGVjbGFyYXRpb25zIGluIHRoZSAnRGF0YWJhc2UnIERvbWFpbgor
dGVtcGxhdGU8Pgorc3RydWN0IERlZmF1bHRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFi
YXNlOjpNb3VzZUJ1dHRvbj4geworICAgIHR5cGVkZWYgSW50SGFzaDxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b24+IEhhc2g7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
VEYKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisKKyMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
VGVzdFByb3RvY29sT2JqZWN0cy5oIgorCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFt
ZXNwYWNlIFByb3RvY29sIHsKKworbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKKworc3RhdGljIGNv
bnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFsdWVzW10gPSB7CisgICAgIk5vbmUiLAor
ICAgICJMZWZ0IiwKKyAgICAiTWlkZGxlIiwKKyAgICAiUmlnaHQiLAorICAgICJMVFIiLAorICAg
ICJSVEwiLAorfTsKKworU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7Cisg
ICAgcmV0dXJuIGVudW1fY29uc3RhbnRfdmFsdWVzW2NvZGVdOworfQorCisvLyBFbnVtcyBpbiB0
aGUgJ0RhdGFiYXNlJyBEb21haW4KK3RlbXBsYXRlPD4KK09wdGlvbmFsPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4oY29uc3QgU3RyaW5nJiBw
cm90b2NvbFN0cmluZykKK3sKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVz
W10gPSB7CisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1v
dXNlQnV0dG9uOjpOb25lLAorICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpNb3VzZUJ1dHRvbjo6TGVmdCwKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlBy
b3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b246Ok1pZGRsZSwKKyAgICAgICAgKHNpemVfdClJ
bnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b246OlJpZ2h0LAorICAgIH07
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCA0OyArK2kpCisgICAgICAgIGlmIChwcm90b2Nv
bFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCisgICAg
ICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRv
biljb25zdGFudFZhbHVlc1tpXTsKKworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK3Rl
bXBsYXRlPD4KK09wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpPcHRpb25h
bFBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmlu
ZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU6
OkRpcmVjdGlvbmFsaXR5Pihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQoreworICAgIHN0
YXRpYyBjb25zdCBzaXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsKKyAgICAgICAgKHNpemVfdClJ
bnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU6OkRp
cmVjdGlvbmFsaXR5OjpMVFIsCisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6Ok9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eTo6UlRMLAor
ICAgIH07CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAyOyArK2kpCisgICAgICAgIGlmIChw
cm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0p
CisgICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpPcHRp
b25hbFBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHkpY29uc3RhbnRWYWx1ZXNbaV07CisK
KyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCit0ZW1wbGF0ZTw+CitPcHRpb25hbDxJbnNw
ZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0
eT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNl
OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5Pihjb25zdCBTdHJpbmcmIHByb3RvY29s
U3RyaW5nKQoreworICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsK
KyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UGFyYW1ldGVy
QnVuZGxlOjpEaXJlY3Rpb25hbGl0eTo6TFRSLAorICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRhdGFiYXNlOjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5OjpSVEws
CisgICAgfTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDI7ICsraSkKKyAgICAgICAgaWYg
KHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ld
XSkKKyAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlBh
cmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHkpY29uc3RhbnRWYWx1ZXNbaV07CisKKyAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworfQorCisKKy8vIEVudW1zIGluIHRoZSAnVGVzdCcgRG9tYWlu
Cit0ZW1wbGF0ZTw+CitPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpQYXJhbWV0
ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5PiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVj
dG9yOjpQcm90b2NvbDo6VGVzdDo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4oY29u
c3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKK3sKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNv
bnN0YW50VmFsdWVzW10gPSB7CisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6
VGVzdDo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eTo6TFRSLAorICAgICAgICAoc2l6
ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9u
YWxpdHk6OlJUTCwKKyAgICB9OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMjsgKytpKQor
ICAgICAgICBpZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3Rh
bnRWYWx1ZXNbaV1dKQorICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpU
ZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5KWNvbnN0YW50VmFsdWVzW2ldOwor
CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKworCit9IC8vIG5hbWVzcGFjZSBUZXN0SGVs
cGVycworCisKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbmNs
dWRlIDx3dGYvUmV0YWluUHRyLmg+CisKKworCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNr
ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERp
c3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNs
YXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFj
a2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgor
I2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9K
U09OVmFsdWVzLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMu
bW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUu
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0
IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+CisKK19fYXR0cmlidXRlX18oKHZpc2liaWxp
dHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDog
TlNPYmplY3QKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRp
b24uaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5
cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1w
b3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2Nv
bEludGVybmFsLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIK
KyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+Cisj
aW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4K
KyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVycy5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXJzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBU
ZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCit7CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250
cm9sbGVyKiBfY29udHJvbGxlcjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJv
bGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCit7CisgICAg
c2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7
CisgICAgQVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsK
KyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgW3N1cGVyIGRl
YWxsb2NdOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1
cmF0aW9uLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJz
Lm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1v
YmplY3QtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNp
bmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2
ZW50RGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlw
ZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBv
cnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJ
UHJvdG9jb2xKU09OT2JqZWN0Lmg+CisKKworQGNsYXNzIFRlc3RQcm90b2NvbERhdGFiYXNlRXJy
b3I7CitAY2xhc3MgVGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTsK
K0BjbGFzcyBUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZTsKK0BjbGFzcyBUZXN0
UHJvdG9jb2xEYXRhYmFzZU9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHM7CitAY2xhc3Mg
VGVzdFByb3RvY29sRGF0YWJhc2VEdW1teU9iamVjdDsKK0BjbGFzcyBUZXN0UHJvdG9jb2xUZXN0
UGFyYW1ldGVyQnVuZGxlOworCisKK3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90
b2NvbERhdGFiYXNlTW91c2VCdXR0b24pIHsKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNl
QnV0dG9uTm9uZSwKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9uTGVmdCwKKyAg
ICBUZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9uTWlkZGxlLAorICAgIFRlc3RQcm90b2Nv
bERhdGFiYXNlTW91c2VCdXR0b25SaWdodCwKK307CisKK3R5cGVkZWYgTlNfRU5VTShOU0ludGVn
ZXIsIFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25h
bGl0eSkgeworICAgIFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGVE
aXJlY3Rpb25hbGl0eUxUUiwKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1l
dGVyQnVuZGxlRGlyZWN0aW9uYWxpdHlSVEwsCit9OworCit0eXBlZGVmIE5TX0VOVU0oTlNJbnRl
Z2VyLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5KSB7
CisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eUxU
UiwKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5
UlRMLAorfTsKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sVGVzdFBh
cmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5KSB7CisgICAgVGVzdFByb3RvY29sVGVzdFBhcmFt
ZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5TFRSLAorICAgIFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0
ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eVJUTCwKK307CisKKworX19hdHRyaWJ1dGVfXygodmlzaWJp
bGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3Ig
OiBSV0lQcm90b2NvbEpTT05PYmplY3QKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6
KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkOworLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmpl
Y3Q7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2Ug
Y29kZTooaW50KWNvZGU7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29w
eSkgTlNTdHJpbmcgKm1lc3NhZ2U7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21p
YywgYXNzaWduKSBpbnQgY29kZTsKK0BlbmQKKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAo
ImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJh
bWV0ZXJCdW5kbGUgOiBSV0lQcm90b2NvbEpTT05PYmplY3QKKy0gKGluc3RhbmNldHlwZSlpbml0
V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkOworLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVj
dCAqKWpzb25PYmplY3Q7CisvKiBvcHRpb25hbCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29w
eSkgTlNBcnJheS8qPE5TU3RyaW5nPiovICpjb2x1bW5OYW1lczsKKy8qIG9wdGlvbmFsICovIEBw
cm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmJ1dHRvbnM7
CisvKiBvcHRpb25hbCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBUZXN0UHJvdG9j
b2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHkgZGlyZWN0aW9u
YWxpdHk7CisvKiBvcHRpb25hbCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJp
bmcgKm5vdGVzOworLyogb3B0aW9uYWwgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikg
ZG91YmxlIHRpbWVzdGFtcDsKKy8qIG9wdGlvbmFsICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBy
ZXRhaW4pIFJXSVByb3RvY29sSlNPTk9iamVjdCAqdmFsdWVzOworLyogb3B0aW9uYWwgKi8gQHBy
b3BlcnR5IChub25hdG9taWMsIHJldGFpbikgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2Fk
OworLyogb3B0aW9uYWwgKi8gQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgVGVzdFByb3Rv
Y29sRGF0YWJhc2VFcnJvciAqZXJyb3I7CisvKiBvcHRpb25hbCAqLyBAcHJvcGVydHkgKG5vbmF0
b21pYywgY29weSkgTlNBcnJheS8qPFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I+Ki8gKmVycm9y
TGlzdDsKK0BlbmQKKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitA
aW50ZXJmYWNlIFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlIDogUldJUHJvdG9j
b2xKU09OT2JqZWN0CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25h
cnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBy
b3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OworLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoQ29sdW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWNv
bHVtbk5hbWVzIGJ1dHRvbnM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWJ1dHRvbnMgZGlyZWN0
aW9uYWxpdHk6KFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxp
dHkpZGlyZWN0aW9uYWxpdHkgbm90ZXM6KE5TU3RyaW5nICopbm90ZXMgdGltZXN0YW1wOihkb3Vi
bGUpdGltZXN0YW1wIHZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopdmFsdWVzIHBheWxv
YWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQgZXJyb3I6KFRlc3RQcm90b2NvbERh
dGFiYXNlRXJyb3IgKillcnJvciBlcnJvckxpc3Q6KE5TQXJyYXkvKjxUZXN0UHJvdG9jb2xEYXRh
YmFzZUVycm9yPiovICopZXJyb3JMaXN0OworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25h
dG9taWMsIGNvcHkpIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqY29sdW1uTmFtZXM7CisvKiByZXF1
aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNBcnJheS8qPE5TU3RyaW5nPiov
ICpidXR0b25zOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikg
VGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSBkaXJlY3Rp
b25hbGl0eTsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0
cmluZyAqbm90ZXM7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWdu
KSBkb3VibGUgdGltZXN0YW1wOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMs
IHJldGFpbikgUldJUHJvdG9jb2xKU09OT2JqZWN0ICp2YWx1ZXM7CisvKiByZXF1aXJlZCAqLyBA
cHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluKSBSV0lQcm90b2NvbEpTT05PYmplY3QgKnBheWxv
YWQ7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluKSBUZXN0UHJv
dG9jb2xEYXRhYmFzZUVycm9yICplcnJvcjsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9u
YXRvbWljLCBjb3B5KSBOU0FycmF5Lyo8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4qLyAqZXJy
b3JMaXN0OworQGVuZAorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkK
K0BpbnRlcmZhY2UgVGVzdFByb3RvY29sRGF0YWJhc2VPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29u
ZmxpY3RzIDogUldJUHJvdG9jb2xKU09OT2JqZWN0CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQ
YXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKKy0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilq
c29uT2JqZWN0OworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSW50ZWdlcjooTlNTdHJpbmcgKilp
bnRlZ2VyIGFycmF5OihOU1N0cmluZyAqKWFycmF5IHN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcg
dmFsdWU6KE5TU3RyaW5nICopdmFsdWUgb2JqZWN0OihOU1N0cmluZyAqKW9iamVjdDsKKy8qIHJl
cXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqaW50ZWdlcjsK
Ky8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqYXJy
YXk7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcg
KnN0cmluZzsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0
cmluZyAqdmFsdWU7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkg
TlNTdHJpbmcgKm9iamVjdDsKK0BlbmQKKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRl
ZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbERhdGFiYXNlRHVtbXlPYmplY3QgOiBS
V0lQcm90b2NvbEpTT05PYmplY3QKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5T
RGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkOworLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7
CitAZW5kCisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVy
ZmFjZSBUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlIDogUldJUHJvdG9jb2xKU09OT2Jq
ZWN0CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJp
bmcgKiwgaWQ+ICopcGF5bG9hZDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2Jq
ZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OworLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoRGlyZWN0aW9uYWxpdHk6KFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVE
aXJlY3Rpb25hbGl0eSlkaXJlY3Rpb25hbGl0eSBidXR0b25zOihOU0FycmF5Lyo8TlNTdHJpbmc+
Ki8gKilidXR0b25zIGNvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5O
YW1lcyBub3RlczooTlNTdHJpbmcgKilub3RlcyB0aW1lc3RhbXA6KGRvdWJsZSl0aW1lc3RhbXAg
dmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKil2YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9j
b2xKU09OT2JqZWN0ICopcGF5bG9hZCBlcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAq
KWVycm9yOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgVGVz
dFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5IGRpcmVjdGlvbmFsaXR5
OworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TQXJyYXkvKjxO
U1N0cmluZz4qLyAqYnV0dG9uczsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWlj
LCBjb3B5KSBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmNvbHVtbk5hbWVzOworLyogcmVxdWlyZWQg
Ki8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICpub3RlczsKKy8qIHJlcXVp
cmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGRvdWJsZSB0aW1lc3RhbXA7Cisv
KiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluKSBSV0lQcm90b2NvbEpT
T05PYmplY3QgKnZhbHVlczsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBy
ZXRhaW4pIFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5bG9hZDsKKy8qIHJlcXVpcmVkICovIEBw
cm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKmVy
cm9yOworQGVuZAorCisKKworCisKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29s
QnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRl
c3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIK
KyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5o
PgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xJbnRlcm5hbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFy
YXRpb24tb2JqZWN0LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rv
ci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7
CisKK3RlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KK09wdGlvbmFsPE9iakNFbnVtVHlw
ZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOworCisKK2lubGluZSBT
dHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9uIHZh
bHVlKQoreworICAgIHN3aXRjaCh2YWx1ZSkgeworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJh
c2VNb3VzZUJ1dHRvbk5vbmU6CisgICAgICAgIHJldHVybiAiTm9uZSJfczsKKyAgICBjYXNlIFRl
c3RQcm90b2NvbERhdGFiYXNlTW91c2VCdXR0b25MZWZ0OgorICAgICAgICByZXR1cm4gIkxlZnQi
X3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9uTWlkZGxlOgorICAg
ICAgICByZXR1cm4gIk1pZGRsZSJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlTW91
c2VCdXR0b25SaWdodDoKKyAgICAgICAgcmV0dXJuICJSaWdodCJfczsKKyAgICB9Cit9CisKK3Rl
bXBsYXRlPD4KK2lubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9u
PiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAodmFs
dWUgPT0gIk5vbmUiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VNb3VzZUJ1
dHRvbk5vbmU7CisgICAgaWYgKHZhbHVlID09ICJMZWZ0IikKKyAgICAgICAgcmV0dXJuIFRlc3RQ
cm90b2NvbERhdGFiYXNlTW91c2VCdXR0b25MZWZ0OworICAgIGlmICh2YWx1ZSA9PSAiTWlkZGxl
IikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VCdXR0b25NaWRkbGU7
CisgICAgaWYgKHZhbHVlID09ICJSaWdodCIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xE
YXRhYmFzZU1vdXNlQnV0dG9uUmlnaHQ7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKwor
aW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9u
YWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSB2YWx1ZSkKK3sKKyAgICBzd2l0Y2godmFs
dWUpIHsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5k
bGVEaXJlY3Rpb25hbGl0eUxUUjoKKyAgICAgICAgcmV0dXJuICJMVFIiX3M7CisgICAgY2FzZSBU
ZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHlS
VEw6CisgICAgICAgIHJldHVybiAiUlRMIl9zOworICAgIH0KK30KKwordGVtcGxhdGU8PgoraW5s
aW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGVE
aXJlY3Rpb25hbGl0eT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7
CisgICAgaWYgKHZhbHVlID09ICJMVFIiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0
YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5TFRSOworICAgIGlmICh2
YWx1ZSA9PSAiUlRMIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9u
YWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eVJUTDsKKyAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworfQorCitpbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sRGF0
YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSB2YWx1ZSkKK3sKKyAgICBzd2l0Y2go
dmFsdWUpIHsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlRGly
ZWN0aW9uYWxpdHlMVFI6CisgICAgICAgIHJldHVybiAiTFRSIl9zOworICAgIGNhc2UgVGVzdFBy
b3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eVJUTDoKKyAgICAgICAg
cmV0dXJuICJSVEwiX3M7CisgICAgfQorfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgT3B0aW9uYWw8
VGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eT4gZnJvbVBy
b3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09ICJM
VFIiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGVE
aXJlY3Rpb25hbGl0eUxUUjsKKyAgICBpZiAodmFsdWUgPT0gIlJUTCIpCisgICAgICAgIHJldHVy
biBUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5UlRMOwor
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKKworaW5saW5lIFN0cmluZyB0b1Byb3RvY29s
U3RyaW5nKFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSB2YWx1
ZSkKK3sKKyAgICBzd2l0Y2godmFsdWUpIHsKKyAgICBjYXNlIFRlc3RQcm90b2NvbFRlc3RQYXJh
bWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eUxUUjoKKyAgICAgICAgcmV0dXJuICJMVFIiX3M7Cisg
ICAgY2FzZSBUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHlSVEw6
CisgICAgICAgIHJldHVybiAiUlRMIl9zOworICAgIH0KK30KKwordGVtcGxhdGU8PgoraW5saW5l
IE9wdGlvbmFsPFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eT4g
ZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVl
ID09ICJMVFIiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRs
ZURpcmVjdGlvbmFsaXR5TFRSOworICAgIGlmICh2YWx1ZSA9PSAiUlRMIikKKyAgICAgICAgcmV0
dXJuIFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eVJUTDsKKyAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKwor
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorCisjIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90
b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisK
K0BpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChEYXRhYmFzZURvbWFpbikK
KworKyAodm9pZClfcGFyc2VFcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKilvdXRW
YWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNlRXJyb3JMaXN0OihO
U0FycmF5Lyo8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5
bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNlTW91c2VCdXR0b246KE5TTnVtYmVyICoq
KW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworKyAodm9pZClfcGFyc2VPcHRpb25h
bFBhcmFtZXRlckJ1bmRsZTooVGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1
bmRsZSAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNl
UGFyYW1ldGVyQnVuZGxlOihUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZSAqKilv
dXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNlT2JqZWN0V2l0
aFByb3BlcnR5TmFtZUNvbmZsaWN0czooVGVzdFByb3RvY29sRGF0YWJhc2VPYmplY3RXaXRoUHJv
cGVydHlOYW1lQ29uZmxpY3RzICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwor
KyAodm9pZClfcGFyc2VEdW1teU9iamVjdDooVGVzdFByb3RvY29sRGF0YWJhc2VEdW1teU9iamVj
dCAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKworQGVuZAorQGludGVyZmFj
ZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFRlc3REb21haW4pCisKKysgKHZvaWQpX3Bh
cnNlUGFyYW1ldGVyQnVuZGxlOihUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlICoqKW91
dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlv
biBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKERhdGFiYXNlRG9tYWluKQorCisrICh2b2lk
KV9wYXJzZUVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqKW91dFZhbHVlIGZyb21Q
YXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShw
YXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gW1tUZXN0UHJv
dG9jb2xEYXRhYmFzZUVycm9yIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07Cit9CisK
KysgKHZvaWQpX3BhcnNlRXJyb3JMaXN0OihOU0FycmF5Lyo8VGVzdFByb3RvY29sRGF0YWJhc2VF
cnJvcj4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TQXJyYXkvKjxUZXN0UHJvdG9jb2xE
YXRhYmFzZUVycm9yPiovIGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gKE5TQXJyYXkvKjxUZXN0
UHJvdG9jb2xEYXRhYmFzZUVycm9yPiovICopcGF5bG9hZDsKK30KKworKyAodm9pZClfcGFyc2VN
b3VzZUJ1dHRvbjooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQK
K3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBj
bGFzc10pOworICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VCdXR0b24+IHJl
c3VsdCA9IEluc3BlY3Rvcjo6ZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERhdGFiYXNl
TW91c2VCdXR0b24+KHBheWxvYWQpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX0VOVU1f
VkFMVUUocmVzdWx0LCBAIk1vdXNlQnV0dG9uIik7CisgICAgKm91dFZhbHVlID0gQChyZXN1bHQu
dmFsdWUoKSk7Cit9CisKKysgKHZvaWQpX3BhcnNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU6KFRl
c3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUgKiopb3V0VmFsdWUgZnJv
bVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBF
KHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQ
cm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUgYWxsb2NdIGluaXRXaXRoUGF5
bG9hZDpwYXlsb2FkXTsKK30KKworKyAodm9pZClfcGFyc2VQYXJhbWV0ZXJCdW5kbGU6KFRlc3RQ
cm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihp
ZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBb
TlNEaWN0aW9uYXJ5IGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xEYXRh
YmFzZVBhcmFtZXRlckJ1bmRsZSBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOworfQor
CisrICh2b2lkKV9wYXJzZU9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHM6KFRlc3RQcm90
b2NvbERhdGFiYXNlT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cyAqKilvdXRWYWx1ZSBm
cm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZ
UEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOworICAgICpvdXRWYWx1ZSA9IFtbVGVz
dFByb3RvY29sRGF0YWJhc2VPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzIGFsbG9jXSBp
bml0V2l0aFBheWxvYWQ6cGF5bG9hZF07Cit9CisKKysgKHZvaWQpX3BhcnNlRHVtbXlPYmplY3Q6
KFRlc3RQcm90b2NvbERhdGFiYXNlRHVtbXlPYmplY3QgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6
KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQs
IFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbERh
dGFiYXNlRHVtbXlPYmplY3QgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKK30KKwor
QGVuZAorQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoVGVzdERv
bWFpbikKKworKyAodm9pZClfcGFyc2VQYXJhbWV0ZXJCdW5kbGU6KFRlc3RQcm90b2NvbFRlc3RQ
YXJhbWV0ZXJCdW5kbGUgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAg
ICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xh
c3NdKTsKKyAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGUg
YWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKK30KKworQGVuZAorCisKKyMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xUeXBlcy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5
cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisj
aW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPFdlYkluc3Bl
Y3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisjaW1wb3J0IDx3dGYvQXNzZXJ0
aW9ucy5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIElu
c3BlY3RvcjsKKworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcgor
CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxO
U1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0
XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJ
UkVEX1BST1BFUlRZKHBheWxvYWRbQCJtZXNzYWdlIl0sIEAibWVzc2FnZSIpOworICAgIHNlbGYu
bWVzc2FnZSA9IHBheWxvYWRbQCJtZXNzYWdlIl07CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9S
X1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJjb2RlIl0sIEAiY29kZSIpOworICAgIHNlbGYu
Y29kZSA9IFtwYXlsb2FkW0AiY29kZSJdIGludGVnZXJWYWx1ZV07CisKKyAgICByZXR1cm4gc2Vs
ZjsKK30KKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2Nv
bEpTT05PYmplY3QgKilvYmplY3QKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRo
SlNPTk9iamVjdDpbb2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0KCldKSkKKyAgICAgICAgcmV0dXJu
IG5pbDsKKworICAgIHJldHVybiBzZWxmOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhN
ZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZTooaW50KWNvZGUKK3sKKyAgICBpZiAoIShz
ZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkobWVzc2FnZSwgQCJtZXNzYWdlIik7CisKKyAg
ICBzZWxmLm1lc3NhZ2UgPSBtZXNzYWdlOworICAgIHNlbGYuY29kZSA9IGNvZGU7CisKKyAgICBy
ZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClzZXRNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UK
K3sKKyAgICBbc3VwZXIgc2V0U3RyaW5nOm1lc3NhZ2UgZm9yS2V5OkAibWVzc2FnZSJdOworfQor
CistIChOU1N0cmluZyAqKW1lc3NhZ2UKK3sKKyAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0Zvcktl
eTpAIm1lc3NhZ2UiXTsKK30KKworLSAodm9pZClzZXRDb2RlOihpbnQpY29kZQoreworICAgIFtz
dXBlciBzZXRJbnRlZ2VyOmNvZGUgZm9yS2V5OkAiY29kZSJdOworfQorCistIChpbnQpY29kZQor
eworICAgIHJldHVybiBbc3VwZXIgaW50ZWdlckZvcktleTpAImNvZGUiXTsKK30KKworQGVuZAor
CitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1
bmRsZQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlv
bmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBl
ciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBzZWxmLmNvbHVtbk5hbWVzID0g
cGF5bG9hZFtAImNvbHVtbk5hbWVzIl07CisKKyAgICBzZWxmLmJ1dHRvbnMgPSBwYXlsb2FkW0Ai
YnV0dG9ucyJdOworCisgICAgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBh
cmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5PiBkaXJlY3Rpb25hbGl0eSA9IGZyb21Qcm90b2Nv
bFN0cmluZzxUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlRGlyZWN0
aW9uYWxpdHk+KHBheWxvYWRbQCJkaXJlY3Rpb25hbGl0eSJdKTsKKyAgICBpZiAoZGlyZWN0aW9u
YWxpdHkpCisgICAgICAgIHNlbGYuZGlyZWN0aW9uYWxpdHkgPSBkaXJlY3Rpb25hbGl0eS52YWx1
ZSgpOworCisgICAgc2VsZi5ub3RlcyA9IHBheWxvYWRbQCJub3RlcyJdOworCisgICAgc2VsZi50
aW1lc3RhbXAgPSBbcGF5bG9hZFtAInRpbWVzdGFtcCJdIGRvdWJsZVZhbHVlXTsKKworICAgIHNl
bGYudmFsdWVzID0gcGF5bG9hZFtAInZhbHVlcyJdOworCisgICAgc2VsZi5wYXlsb2FkID0gcGF5
bG9hZFtAInBheWxvYWQiXTsKKworICAgIHNlbGYuZXJyb3IgPSBbW1Rlc3RQcm90b2NvbERhdGFi
YXNlRXJyb3IgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkW0AiZXJyb3IiXV07CisKKyAg
ICBzZWxmLmVycm9yTGlzdCA9IG9iamNBcnJheUZyb21QYXlsb2FkPFRlc3RQcm90b2NvbERhdGFi
YXNlRXJyb3I+KHBheWxvYWRbQCJlcnJvckxpc3QiXSk7CisKKyAgICByZXR1cm4gc2VsZjsKK30K
Ky0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05P
YmplY3QgKilvYmplY3QKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoSlNPTk9i
amVjdDpbb2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0KCldKSkKKyAgICAgICAgcmV0dXJuIG5pbDsK
KworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXNldENvbHVtbk5hbWVzOihOU0FycmF5
Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcworeworICAgIFtzdXBlciBzZXRKU09OQXJyYXk6
dG9KU09OU3RyaW5nQXJyYXkoY29sdW1uTmFtZXMpIGZvcktleTpAImNvbHVtbk5hbWVzIl07Cit9
CisKKy0gKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWNvbHVtbk5hbWVzCit7CisgICAgcmV0dXJu
IHRvT2JqQ1N0cmluZ0FycmF5KFtzdXBlciBKU09OQXJyYXlGb3JLZXk6QCJjb2x1bW5OYW1lcyJd
KTsKK30KKworLSAodm9pZClzZXRCdXR0b25zOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilidXR0
b25zCit7CisgICAgW3N1cGVyIHNldEpTT05BcnJheTp0b0pTT05TdHJpbmdBcnJheShidXR0b25z
KSBmb3JLZXk6QCJidXR0b25zIl07Cit9CisKKy0gKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWJ1
dHRvbnMKK3sKKyAgICByZXR1cm4gdG9PYmpDU3RyaW5nQXJyYXkoW3N1cGVyIEpTT05BcnJheUZv
cktleTpAImJ1dHRvbnMiXSk7Cit9CisKKy0gKHZvaWQpc2V0RGlyZWN0aW9uYWxpdHk6KFRlc3RQ
cm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSlkaXJl
Y3Rpb25hbGl0eQoreworICAgIFtzdXBlciBzZXRTdHJpbmc6dG9Qcm90b2NvbFN0cmluZyhkaXJl
Y3Rpb25hbGl0eSkgZm9yS2V5OkAiZGlyZWN0aW9uYWxpdHkiXTsKK30KKworLSAoVGVzdFByb3Rv
Y29sRGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5KWRpcmVjdGlv
bmFsaXR5Cit7CisgICAgcmV0dXJuIGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xEYXRh
YmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHk+KFtzdXBlciBzdHJpbmdG
b3JLZXk6QCJkaXJlY3Rpb25hbGl0eSJdKS52YWx1ZSgpOworfQorCistICh2b2lkKXNldE5vdGVz
OihOU1N0cmluZyAqKW5vdGVzCit7CisgICAgW3N1cGVyIHNldFN0cmluZzpub3RlcyBmb3JLZXk6
QCJub3RlcyJdOworfQorCistIChOU1N0cmluZyAqKW5vdGVzCit7CisgICAgcmV0dXJuIFtzdXBl
ciBzdHJpbmdGb3JLZXk6QCJub3RlcyJdOworfQorCistICh2b2lkKXNldFRpbWVzdGFtcDooZG91
YmxlKXRpbWVzdGFtcAoreworICAgIFtzdXBlciBzZXREb3VibGU6dGltZXN0YW1wIGZvcktleTpA
InRpbWVzdGFtcCJdOworfQorCistIChkb3VibGUpdGltZXN0YW1wCit7CisgICAgcmV0dXJuIFtz
dXBlciBkb3VibGVGb3JLZXk6QCJ0aW1lc3RhbXAiXTsKK30KKworLSAodm9pZClzZXRWYWx1ZXM6
KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcworeworICAgIFtzdXBlciBzZXRPYmplY3Q6
dmFsdWVzIGZvcktleTpAInZhbHVlcyJdOworfQorCistIChSV0lQcm90b2NvbEpTT05PYmplY3Qg
Kil2YWx1ZXMKK3sKKyAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9iamVjdCA9IFtzdXBlciBv
YmplY3RGb3JLZXk6QCJ2YWx1ZXMiXTsKKyAgICBpZiAoIW9iamVjdCkKKyAgICAgICAgcmV0dXJu
IG5pbDsKKyAgICByZXR1cm4gW1tSV0lQcm90b2NvbEpTT05PYmplY3QgYWxsb2NdIGluaXRXaXRo
SlNPTk9iamVjdDpbW3N1cGVyIG9iamVjdEZvcktleTpAInZhbHVlcyJdIHRvSlNPTk9iamVjdF0u
Z2V0KCldOworfQorCistICh2b2lkKXNldFBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAq
KXBheWxvYWQKK3sKKyAgICBbc3VwZXIgc2V0T2JqZWN0OnBheWxvYWQgZm9yS2V5OkAicGF5bG9h
ZCJdOworfQorCistIChSV0lQcm90b2NvbEpTT05PYmplY3QgKilwYXlsb2FkCit7CisgICAgUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICpvYmplY3QgPSBbc3VwZXIgb2JqZWN0Rm9yS2V5OkAicGF5bG9h
ZCJdOworICAgIGlmICghb2JqZWN0KQorICAgICAgICByZXR1cm4gbmlsOworICAgIHJldHVybiBb
W1JXSVByb3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0Oltbc3VwZXIg
b2JqZWN0Rm9yS2V5OkAicGF5bG9hZCJdIHRvSlNPTk9iamVjdF0uZ2V0KCldOworfQorCistICh2
b2lkKXNldEVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICopZXJyb3IKK3sKKyAgICBb
c3VwZXIgc2V0T2JqZWN0OmVycm9yIGZvcktleTpAImVycm9yIl07Cit9CisKKy0gKFRlc3RQcm90
b2NvbERhdGFiYXNlRXJyb3IgKillcnJvcgoreworICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAq
b2JqZWN0ID0gW3N1cGVyIG9iamVjdEZvcktleTpAImVycm9yIl07CisgICAgaWYgKCFvYmplY3Qp
CisgICAgICAgIHJldHVybiBuaWw7CisgICAgcmV0dXJuIFtbVGVzdFByb3RvY29sRGF0YWJhc2VF
cnJvciBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0Oltbc3VwZXIgb2JqZWN0Rm9yS2V5OkAiZXJy
b3IiXSB0b0pTT05PYmplY3RdLmdldCgpXTsKK30KKworLSAodm9pZClzZXRFcnJvckxpc3Q6KE5T
QXJyYXkvKjxUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yPiovICopZXJyb3JMaXN0Cit7CisgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRV9JTl9BUlJBWShlcnJvckxpc3QsIFtUZXN0UHJv
dG9jb2xEYXRhYmFzZUVycm9yIGNsYXNzXSk7CisgICAgW3N1cGVyIHNldEpTT05BcnJheTp0b0pT
T05PYmplY3RBcnJheShlcnJvckxpc3QpIGZvcktleTpAImVycm9yTGlzdCJdOworfQorCistIChO
U0FycmF5Lyo8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4qLyAqKWVycm9yTGlzdAoreworICAg
IHJldHVybiB0b09iakNBcnJheTxUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yPihbc3VwZXIgSlNP
TkFycmF5Rm9yS2V5OkAiZXJyb3JMaXN0Il0pOworfQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlv
biBUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZQorCistIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilw
YXlsb2FkCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVy
biBuaWw7CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxv
YWRbQCJjb2x1bW5OYW1lcyJdLCBAImNvbHVtbk5hbWVzIik7CisgICAgc2VsZi5jb2x1bW5OYW1l
cyA9IHBheWxvYWRbQCJjb2x1bW5OYW1lcyJdOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9S
RVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiYnV0dG9ucyJdLCBAImJ1dHRvbnMiKTsKKyAgICBz
ZWxmLmJ1dHRvbnMgPSBwYXlsb2FkW0AiYnV0dG9ucyJdOworCisgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiZGlyZWN0aW9uYWxpdHkiXSwgQCJkaXJl
Y3Rpb25hbGl0eSIpOworICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVy
QnVuZGxlRGlyZWN0aW9uYWxpdHk+IGRpcmVjdGlvbmFsaXR5ID0gZnJvbVByb3RvY29sU3RyaW5n
PFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHk+KHBheWxv
YWRbQCJkaXJlY3Rpb25hbGl0eSJdKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9FTlVN
X1ZBTFVFKGRpcmVjdGlvbmFsaXR5LCBAImRpcmVjdGlvbmFsaXR5Iik7CisgICAgc2VsZi5kaXJl
Y3Rpb25hbGl0eSA9IGRpcmVjdGlvbmFsaXR5LnZhbHVlKCk7CisKKyAgICBUSFJPV19FWENFUFRJ
T05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJub3RlcyJdLCBAIm5vdGVzIik7Cisg
ICAgc2VsZi5ub3RlcyA9IHBheWxvYWRbQCJub3RlcyJdOworCisgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AidGltZXN0YW1wIl0sIEAidGltZXN0YW1w
Iik7CisgICAgc2VsZi50aW1lc3RhbXAgPSBbcGF5bG9hZFtAInRpbWVzdGFtcCJdIGRvdWJsZVZh
bHVlXTsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9h
ZFtAInZhbHVlcyJdLCBAInZhbHVlcyIpOworICAgIHNlbGYudmFsdWVzID0gcGF5bG9hZFtAInZh
bHVlcyJdOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXls
b2FkW0AicGF5bG9hZCJdLCBAInBheWxvYWQiKTsKKyAgICBzZWxmLnBheWxvYWQgPSBwYXlsb2Fk
W0AicGF5bG9hZCJdOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJU
WShwYXlsb2FkW0AiZXJyb3IiXSwgQCJlcnJvciIpOworICAgIHNlbGYuZXJyb3IgPSBbW1Rlc3RQ
cm90b2NvbERhdGFiYXNlRXJyb3IgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkW0AiZXJy
b3IiXV07CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxv
YWRbQCJlcnJvckxpc3QiXSwgQCJlcnJvckxpc3QiKTsKKyAgICBzZWxmLmVycm9yTGlzdCA9IG9i
amNBcnJheUZyb21QYXlsb2FkPFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I+KHBheWxvYWRbQCJl
cnJvckxpc3QiXSk7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKy0gKGluc3RhbmNldHlwZSlpbml0
V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilvYmplY3QKK3sKKyAg
ICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoSlNPTk9iamVjdDpbb2JqZWN0IHRvSlNPTk9i
amVjdF0uZ2V0KCldKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHJldHVybiBzZWxmOwor
fQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb2x1bW5OYW1lczooTlNBcnJheS8qPE5TU3Ry
aW5nPiovICopY29sdW1uTmFtZXMgYnV0dG9uczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopYnV0
dG9ucyBkaXJlY3Rpb25hbGl0eTooVGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGVE
aXJlY3Rpb25hbGl0eSlkaXJlY3Rpb25hbGl0eSBub3RlczooTlNTdHJpbmcgKilub3RlcyB0aW1l
c3RhbXA6KGRvdWJsZSl0aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKil2
YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZCBlcnJvcjooVGVz
dFByb3RvY29sRGF0YWJhc2VFcnJvciAqKWVycm9yIGVycm9yTGlzdDooTlNBcnJheS8qPFRlc3RQ
cm90b2NvbERhdGFiYXNlRXJyb3I+Ki8gKillcnJvckxpc3QKK3sKKyAgICBpZiAoIShzZWxmID0g
W3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfUkVRVUlSRURfUFJPUEVSVFkoY29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsKKyAg
ICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKGJ1dHRvbnMsIEAiYnV0dG9u
cyIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkobm90ZXMsIEAi
bm90ZXMiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHZhbHVl
cywgQCJ2YWx1ZXMiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZ
KHBheWxvYWQsIEAicGF5bG9hZCIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURf
UFJPUEVSVFkoZXJyb3IsIEAiZXJyb3IiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJ
UkVEX1BST1BFUlRZKGVycm9yTGlzdCwgQCJlcnJvckxpc3QiKTsKKyAgICBUSFJPV19FWENFUFRJ
T05fRk9SX0JBRF9UWVBFX0lOX0FSUkFZKGVycm9yTGlzdCwgW1Rlc3RQcm90b2NvbERhdGFiYXNl
RXJyb3IgY2xhc3NdKTsKKworICAgIHNlbGYuY29sdW1uTmFtZXMgPSBjb2x1bW5OYW1lczsKKyAg
ICBzZWxmLmJ1dHRvbnMgPSBidXR0b25zOworICAgIHNlbGYuZGlyZWN0aW9uYWxpdHkgPSBkaXJl
Y3Rpb25hbGl0eTsKKyAgICBzZWxmLm5vdGVzID0gbm90ZXM7CisgICAgc2VsZi50aW1lc3RhbXAg
PSB0aW1lc3RhbXA7CisgICAgc2VsZi52YWx1ZXMgPSB2YWx1ZXM7CisgICAgc2VsZi5wYXlsb2Fk
ID0gcGF5bG9hZDsKKyAgICBzZWxmLmVycm9yID0gZXJyb3I7CisgICAgc2VsZi5lcnJvckxpc3Qg
PSBlcnJvckxpc3Q7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClzZXRDb2x1bW5O
YW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMKK3sKKyAgICBbc3VwZXIg
c2V0SlNPTkFycmF5OnRvSlNPTlN0cmluZ0FycmF5KGNvbHVtbk5hbWVzKSBmb3JLZXk6QCJjb2x1
bW5OYW1lcyJdOworfQorCistIChOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcwor
eworICAgIHJldHVybiB0b09iakNTdHJpbmdBcnJheShbc3VwZXIgSlNPTkFycmF5Rm9yS2V5OkAi
Y29sdW1uTmFtZXMiXSk7Cit9CisKKy0gKHZvaWQpc2V0QnV0dG9uczooTlNBcnJheS8qPE5TU3Ry
aW5nPiovICopYnV0dG9ucworeworICAgIFtzdXBlciBzZXRKU09OQXJyYXk6dG9KU09OU3RyaW5n
QXJyYXkoYnV0dG9ucykgZm9yS2V5OkAiYnV0dG9ucyJdOworfQorCistIChOU0FycmF5Lyo8TlNT
dHJpbmc+Ki8gKilidXR0b25zCit7CisgICAgcmV0dXJuIHRvT2JqQ1N0cmluZ0FycmF5KFtzdXBl
ciBKU09OQXJyYXlGb3JLZXk6QCJidXR0b25zIl0pOworfQorCistICh2b2lkKXNldERpcmVjdGlv
bmFsaXR5OihUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5
KWRpcmVjdGlvbmFsaXR5Cit7CisgICAgW3N1cGVyIHNldFN0cmluZzp0b1Byb3RvY29sU3RyaW5n
KGRpcmVjdGlvbmFsaXR5KSBmb3JLZXk6QCJkaXJlY3Rpb25hbGl0eSJdOworfQorCistIChUZXN0
UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5KWRpcmVjdGlvbmFs
aXR5Cit7CisgICAgcmV0dXJuIGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xEYXRhYmFz
ZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5Pihbc3VwZXIgc3RyaW5nRm9yS2V5OkAiZGly
ZWN0aW9uYWxpdHkiXSkudmFsdWUoKTsKK30KKworLSAodm9pZClzZXROb3RlczooTlNTdHJpbmcg
Kilub3RlcworeworICAgIFtzdXBlciBzZXRTdHJpbmc6bm90ZXMgZm9yS2V5OkAibm90ZXMiXTsK
K30KKworLSAoTlNTdHJpbmcgKilub3RlcworeworICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9y
S2V5OkAibm90ZXMiXTsKK30KKworLSAodm9pZClzZXRUaW1lc3RhbXA6KGRvdWJsZSl0aW1lc3Rh
bXAKK3sKKyAgICBbc3VwZXIgc2V0RG91YmxlOnRpbWVzdGFtcCBmb3JLZXk6QCJ0aW1lc3RhbXAi
XTsKK30KKworLSAoZG91YmxlKXRpbWVzdGFtcAoreworICAgIHJldHVybiBbc3VwZXIgZG91Ymxl
Rm9yS2V5OkAidGltZXN0YW1wIl07Cit9CisKKy0gKHZvaWQpc2V0VmFsdWVzOihSV0lQcm90b2Nv
bEpTT05PYmplY3QgKil2YWx1ZXMKK3sKKyAgICBbc3VwZXIgc2V0T2JqZWN0OnZhbHVlcyBmb3JL
ZXk6QCJ2YWx1ZXMiXTsKK30KKworLSAoUldJUHJvdG9jb2xKU09OT2JqZWN0ICopdmFsdWVzCit7
CisgICAgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvYmplY3QgPSBbc3VwZXIgb2JqZWN0Rm9yS2V5
OkAidmFsdWVzIl07CisgICAgaWYgKCFvYmplY3QpCisgICAgICAgIHJldHVybiBuaWw7CisgICAg
cmV0dXJuIFtbUldJUHJvdG9jb2xKU09OT2JqZWN0IGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6
W1tzdXBlciBvYmplY3RGb3JLZXk6QCJ2YWx1ZXMiXSB0b0pTT05PYmplY3RdLmdldCgpXTsKK30K
KworLSAodm9pZClzZXRQYXlsb2FkOihSV0lQcm90b2NvbEpTT05PYmplY3QgKilwYXlsb2FkCit7
CisgICAgW3N1cGVyIHNldE9iamVjdDpwYXlsb2FkIGZvcktleTpAInBheWxvYWQiXTsKK30KKwor
LSAoUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZAoreworICAgIFJXSVByb3RvY29sSlNP
Tk9iamVjdCAqb2JqZWN0ID0gW3N1cGVyIG9iamVjdEZvcktleTpAInBheWxvYWQiXTsKKyAgICBp
ZiAoIW9iamVjdCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICByZXR1cm4gW1tSV0lQcm90b2Nv
bEpTT05PYmplY3QgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDpbW3N1cGVyIG9iamVjdEZvcktl
eTpAInBheWxvYWQiXSB0b0pTT05PYmplY3RdLmdldCgpXTsKK30KKworLSAodm9pZClzZXRFcnJv
cjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKWVycm9yCit7CisgICAgW3N1cGVyIHNldE9i
amVjdDplcnJvciBmb3JLZXk6QCJlcnJvciJdOworfQorCistIChUZXN0UHJvdG9jb2xEYXRhYmFz
ZUVycm9yICopZXJyb3IKK3sKKyAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9iamVjdCA9IFtz
dXBlciBvYmplY3RGb3JLZXk6QCJlcnJvciJdOworICAgIGlmICghb2JqZWN0KQorICAgICAgICBy
ZXR1cm4gbmlsOworICAgIHJldHVybiBbW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgYWxsb2Nd
IGluaXRXaXRoSlNPTk9iamVjdDpbW3N1cGVyIG9iamVjdEZvcktleTpAImVycm9yIl0gdG9KU09O
T2JqZWN0XS5nZXQoKV07Cit9CisKKy0gKHZvaWQpc2V0RXJyb3JMaXN0OihOU0FycmF5Lyo8VGVz
dFByb3RvY29sRGF0YWJhc2VFcnJvcj4qLyAqKWVycm9yTGlzdAoreworICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfQkFEX1RZUEVfSU5fQVJSQVkoZXJyb3JMaXN0LCBbVGVzdFByb3RvY29sRGF0YWJh
c2VFcnJvciBjbGFzc10pOworICAgIFtzdXBlciBzZXRKU09OQXJyYXk6dG9KU09OT2JqZWN0QXJy
YXkoZXJyb3JMaXN0KSBmb3JLZXk6QCJlcnJvckxpc3QiXTsKK30KKworLSAoTlNBcnJheS8qPFRl
c3RQcm90b2NvbERhdGFiYXNlRXJyb3I+Ki8gKillcnJvckxpc3QKK3sKKyAgICByZXR1cm4gdG9P
YmpDQXJyYXk8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4oW3N1cGVyIEpTT05BcnJheUZvcktl
eTpAImVycm9yTGlzdCJdKTsKK30KKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3Rv
Y29sRGF0YWJhc2VPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzCisKKy0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlk
PiAqKXBheWxvYWQKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAg
cmV0dXJuIG5pbDsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFko
cGF5bG9hZFtAImludGVnZXIiXSwgQCJpbnRlZ2VyIik7CisgICAgc2VsZi5pbnRlZ2VyID0gcGF5
bG9hZFtAImludGVnZXIiXTsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJP
UEVSVFkocGF5bG9hZFtAImFycmF5Il0sIEAiYXJyYXkiKTsKKyAgICBzZWxmLmFycmF5ID0gcGF5
bG9hZFtAImFycmF5Il07CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BF
UlRZKHBheWxvYWRbQCJzdHJpbmciXSwgQCJzdHJpbmciKTsKKyAgICBzZWxmLnN0cmluZyA9IHBh
eWxvYWRbQCJzdHJpbmciXTsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJP
UEVSVFkocGF5bG9hZFtAInZhbHVlIl0sIEAidmFsdWUiKTsKKyAgICBzZWxmLnZhbHVlID0gcGF5
bG9hZFtAInZhbHVlIl07CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BF
UlRZKHBheWxvYWRbQCJvYmplY3QiXSwgQCJvYmplY3QiKTsKKyAgICBzZWxmLm9iamVjdCA9IHBh
eWxvYWRbQCJvYmplY3QiXTsKKworICAgIHJldHVybiBzZWxmOworfQorLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9iamVjdAor
eworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmplY3QgdG9K
U09OT2JqZWN0XS5nZXQoKV0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgcmV0dXJuIHNl
bGY7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aEludGVnZXI6KE5TU3RyaW5nICopaW50
ZWdlciBhcnJheTooTlNTdHJpbmcgKilhcnJheSBzdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nIHZh
bHVlOihOU1N0cmluZyAqKXZhbHVlIG9iamVjdDooTlNTdHJpbmcgKilvYmplY3QKK3sKKyAgICBp
ZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkoaW50ZWdlciwgQCJpbnRlZ2VyIik7
CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShhcnJheSwgQCJhcnJh
eSIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkoc3RyaW5nLCBA
InN0cmluZyIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkodmFs
dWUsIEAidmFsdWUiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZ
KG9iamVjdCwgQCJvYmplY3QiKTsKKworICAgIHNlbGYuaW50ZWdlciA9IGludGVnZXI7CisgICAg
c2VsZi5hcnJheSA9IGFycmF5OworICAgIHNlbGYuc3RyaW5nID0gc3RyaW5nOworICAgIHNlbGYu
dmFsdWUgPSB2YWx1ZTsKKyAgICBzZWxmLm9iamVjdCA9IG9iamVjdDsKKworICAgIHJldHVybiBz
ZWxmOworfQorCistICh2b2lkKXNldEludGVnZXI6KE5TU3RyaW5nICopaW50ZWdlcgoreworICAg
IFtzdXBlciBzZXRTdHJpbmc6aW50ZWdlciBmb3JLZXk6QCJpbnRlZ2VyIl07Cit9CisKKy0gKE5T
U3RyaW5nICopaW50ZWdlcgoreworICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAiaW50
ZWdlciJdOworfQorCistICh2b2lkKXNldEFycmF5OihOU1N0cmluZyAqKWFycmF5Cit7CisgICAg
W3N1cGVyIHNldFN0cmluZzphcnJheSBmb3JLZXk6QCJhcnJheSJdOworfQorCistIChOU1N0cmlu
ZyAqKWFycmF5Cit7CisgICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJhcnJheSJdOwor
fQorCistICh2b2lkKXNldFN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcKK3sKKyAgICBbc3VwZXIg
c2V0U3RyaW5nOnN0cmluZyBmb3JLZXk6QCJzdHJpbmciXTsKK30KKworLSAoTlNTdHJpbmcgKilz
dHJpbmcKK3sKKyAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAInN0cmluZyJdOworfQor
CistICh2b2lkKXNldFZhbHVlOihOU1N0cmluZyAqKXZhbHVlCit7CisgICAgW3N1cGVyIHNldFN0
cmluZzp2YWx1ZSBmb3JLZXk6QCJ2YWx1ZSJdOworfQorCistIChOU1N0cmluZyAqKXZhbHVlCit7
CisgICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJ2YWx1ZSJdOworfQorCistICh2b2lk
KXNldE9iamVjdDooTlNTdHJpbmcgKilvYmplY3QKK3sKKyAgICBbc3VwZXIgc2V0U3RyaW5nOm9i
amVjdCBmb3JLZXk6QCJvYmplY3QiXTsKK30KKworLSAoTlNTdHJpbmcgKilvYmplY3QKK3sKKyAg
ICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAIm9iamVjdCJdOworfQorCitAZW5kCisKK0Bp
bXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xEYXRhYmFzZUR1bW15T2JqZWN0CisKKy0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICos
IGlkPiAqKXBheWxvYWQKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAg
ICAgcmV0dXJuIG5pbDsKKworICAgIHJldHVybiBzZWxmOworfQorLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9iamVjdAorewor
ICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmplY3QgdG9KU09O
T2JqZWN0XS5nZXQoKV0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgcmV0dXJuIHNlbGY7
Cit9CisKK0BlbmQKKworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVGVzdFBhcmFtZXRl
ckJ1bmRsZQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGlj
dGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCit7CisgICAgaWYgKCEoc2VsZiA9IFtz
dXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBUSFJPV19FWENFUFRJT05f
Rk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJkaXJlY3Rpb25hbGl0eSJdLCBAImRpcmVj
dGlvbmFsaXR5Iik7CisgICAgT3B0aW9uYWw8VGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRs
ZURpcmVjdGlvbmFsaXR5PiBkaXJlY3Rpb25hbGl0eSA9IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0
UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHk+KHBheWxvYWRbQCJkaXJl
Y3Rpb25hbGl0eSJdKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9FTlVNX1ZBTFVFKGRp
cmVjdGlvbmFsaXR5LCBAImRpcmVjdGlvbmFsaXR5Iik7CisgICAgc2VsZi5kaXJlY3Rpb25hbGl0
eSA9IGRpcmVjdGlvbmFsaXR5LnZhbHVlKCk7CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JF
UVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJidXR0b25zIl0sIEAiYnV0dG9ucyIpOworICAgIHNl
bGYuYnV0dG9ucyA9IHBheWxvYWRbQCJidXR0b25zIl07CisKKyAgICBUSFJPV19FWENFUFRJT05f
Rk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJjb2x1bW5OYW1lcyJdLCBAImNvbHVtbk5h
bWVzIik7CisgICAgc2VsZi5jb2x1bW5OYW1lcyA9IHBheWxvYWRbQCJjb2x1bW5OYW1lcyJdOwor
CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0Aibm90
ZXMiXSwgQCJub3RlcyIpOworICAgIHNlbGYubm90ZXMgPSBwYXlsb2FkW0Aibm90ZXMiXTsKKwor
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAInRpbWVz
dGFtcCJdLCBAInRpbWVzdGFtcCIpOworICAgIHNlbGYudGltZXN0YW1wID0gW3BheWxvYWRbQCJ0
aW1lc3RhbXAiXSBkb3VibGVWYWx1ZV07CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJ
UkVEX1BST1BFUlRZKHBheWxvYWRbQCJ2YWx1ZXMiXSwgQCJ2YWx1ZXMiKTsKKyAgICBzZWxmLnZh
bHVlcyA9IHBheWxvYWRbQCJ2YWx1ZXMiXTsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVR
VUlSRURfUFJPUEVSVFkocGF5bG9hZFtAInBheWxvYWQiXSwgQCJwYXlsb2FkIik7CisgICAgc2Vs
Zi5wYXlsb2FkID0gcGF5bG9hZFtAInBheWxvYWQiXTsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImVycm9yIl0sIEAiZXJyb3IiKTsKKyAgICBz
ZWxmLmVycm9yID0gW1tUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGFsbG9jXSBpbml0V2l0aFBh
eWxvYWQ6cGF5bG9hZFtAImVycm9yIl1dOworCisgICAgcmV0dXJuIHNlbGY7Cit9CistIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICop
b2JqZWN0Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEpTT05PYmplY3Q6W29i
amVjdCB0b0pTT05PYmplY3RdLmdldCgpXSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBy
ZXR1cm4gc2VsZjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRGlyZWN0aW9uYWxpdHk6
KFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSlkaXJlY3Rpb25h
bGl0eSBidXR0b25zOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilidXR0b25zIGNvbHVtbk5hbWVz
OihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcyBub3RlczooTlNTdHJpbmcgKilu
b3RlcyB0aW1lc3RhbXA6KGRvdWJsZSl0aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90b2NvbEpTT05P
YmplY3QgKil2YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZCBl
cnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKWVycm9yCit7CisgICAgaWYgKCEoc2Vs
ZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBUSFJPV19FWENF
UFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKGJ1dHRvbnMsIEAiYnV0dG9ucyIpOworICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkoY29sdW1uTmFtZXMsIEAiY29sdW1u
TmFtZXMiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKG5vdGVz
LCBAIm5vdGVzIik7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWSh2
YWx1ZXMsIEAidmFsdWVzIik7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9Q
RVJUWShwYXlsb2FkLCBAInBheWxvYWQiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJ
UkVEX1BST1BFUlRZKGVycm9yLCBAImVycm9yIik7CisKKyAgICBzZWxmLmRpcmVjdGlvbmFsaXR5
ID0gZGlyZWN0aW9uYWxpdHk7CisgICAgc2VsZi5idXR0b25zID0gYnV0dG9uczsKKyAgICBzZWxm
LmNvbHVtbk5hbWVzID0gY29sdW1uTmFtZXM7CisgICAgc2VsZi5ub3RlcyA9IG5vdGVzOworICAg
IHNlbGYudGltZXN0YW1wID0gdGltZXN0YW1wOworICAgIHNlbGYudmFsdWVzID0gdmFsdWVzOwor
ICAgIHNlbGYucGF5bG9hZCA9IHBheWxvYWQ7CisgICAgc2VsZi5lcnJvciA9IGVycm9yOworCisg
ICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpc2V0RGlyZWN0aW9uYWxpdHk6KFRlc3RQcm90
b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSlkaXJlY3Rpb25hbGl0eQorewor
ICAgIFtzdXBlciBzZXRTdHJpbmc6dG9Qcm90b2NvbFN0cmluZyhkaXJlY3Rpb25hbGl0eSkgZm9y
S2V5OkAiZGlyZWN0aW9uYWxpdHkiXTsKK30KKworLSAoVGVzdFByb3RvY29sVGVzdFBhcmFtZXRl
ckJ1bmRsZURpcmVjdGlvbmFsaXR5KWRpcmVjdGlvbmFsaXR5Cit7CisgICAgcmV0dXJuIGZyb21Q
cm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxp
dHk+KFtzdXBlciBzdHJpbmdGb3JLZXk6QCJkaXJlY3Rpb25hbGl0eSJdKS52YWx1ZSgpOworfQor
CistICh2b2lkKXNldEJ1dHRvbnM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWJ1dHRvbnMKK3sK
KyAgICBbc3VwZXIgc2V0SlNPTkFycmF5OnRvSlNPTlN0cmluZ0FycmF5KGJ1dHRvbnMpIGZvcktl
eTpAImJ1dHRvbnMiXTsKK30KKworLSAoTlNBcnJheS8qPE5TU3RyaW5nPiovICopYnV0dG9ucwor
eworICAgIHJldHVybiB0b09iakNTdHJpbmdBcnJheShbc3VwZXIgSlNPTkFycmF5Rm9yS2V5OkAi
YnV0dG9ucyJdKTsKK30KKworLSAodm9pZClzZXRDb2x1bW5OYW1lczooTlNBcnJheS8qPE5TU3Ry
aW5nPiovICopY29sdW1uTmFtZXMKK3sKKyAgICBbc3VwZXIgc2V0SlNPTkFycmF5OnRvSlNPTlN0
cmluZ0FycmF5KGNvbHVtbk5hbWVzKSBmb3JLZXk6QCJjb2x1bW5OYW1lcyJdOworfQorCistIChO
U0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcworeworICAgIHJldHVybiB0b09iakNT
dHJpbmdBcnJheShbc3VwZXIgSlNPTkFycmF5Rm9yS2V5OkAiY29sdW1uTmFtZXMiXSk7Cit9CisK
Ky0gKHZvaWQpc2V0Tm90ZXM6KE5TU3RyaW5nICopbm90ZXMKK3sKKyAgICBbc3VwZXIgc2V0U3Ry
aW5nOm5vdGVzIGZvcktleTpAIm5vdGVzIl07Cit9CisKKy0gKE5TU3RyaW5nICopbm90ZXMKK3sK
KyAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAIm5vdGVzIl07Cit9CisKKy0gKHZvaWQp
c2V0VGltZXN0YW1wOihkb3VibGUpdGltZXN0YW1wCit7CisgICAgW3N1cGVyIHNldERvdWJsZTp0
aW1lc3RhbXAgZm9yS2V5OkAidGltZXN0YW1wIl07Cit9CisKKy0gKGRvdWJsZSl0aW1lc3RhbXAK
K3sKKyAgICByZXR1cm4gW3N1cGVyIGRvdWJsZUZvcktleTpAInRpbWVzdGFtcCJdOworfQorCist
ICh2b2lkKXNldFZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopdmFsdWVzCit7CisgICAg
W3N1cGVyIHNldE9iamVjdDp2YWx1ZXMgZm9yS2V5OkAidmFsdWVzIl07Cit9CisKKy0gKFJXSVBy
b3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcworeworICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAq
b2JqZWN0ID0gW3N1cGVyIG9iamVjdEZvcktleTpAInZhbHVlcyJdOworICAgIGlmICghb2JqZWN0
KQorICAgICAgICByZXR1cm4gbmlsOworICAgIHJldHVybiBbW1JXSVByb3RvY29sSlNPTk9iamVj
dCBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0Oltbc3VwZXIgb2JqZWN0Rm9yS2V5OkAidmFsdWVz
Il0gdG9KU09OT2JqZWN0XS5nZXQoKV07Cit9CisKKy0gKHZvaWQpc2V0UGF5bG9hZDooUldJUHJv
dG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZAoreworICAgIFtzdXBlciBzZXRPYmplY3Q6cGF5bG9h
ZCBmb3JLZXk6QCJwYXlsb2FkIl07Cit9CisKKy0gKFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBh
eWxvYWQKK3sKKyAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9iamVjdCA9IFtzdXBlciBvYmpl
Y3RGb3JLZXk6QCJwYXlsb2FkIl07CisgICAgaWYgKCFvYmplY3QpCisgICAgICAgIHJldHVybiBu
aWw7CisgICAgcmV0dXJuIFtbUldJUHJvdG9jb2xKU09OT2JqZWN0IGFsbG9jXSBpbml0V2l0aEpT
T05PYmplY3Q6W1tzdXBlciBvYmplY3RGb3JLZXk6QCJwYXlsb2FkIl0gdG9KU09OT2JqZWN0XS5n
ZXQoKV07Cit9CisKKy0gKHZvaWQpc2V0RXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3Ig
KillcnJvcgoreworICAgIFtzdXBlciBzZXRPYmplY3Q6ZXJyb3IgZm9yS2V5OkAiZXJyb3IiXTsK
K30KKworLSAoVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKWVycm9yCit7CisgICAgUldJUHJv
dG9jb2xKU09OT2JqZWN0ICpvYmplY3QgPSBbc3VwZXIgb2JqZWN0Rm9yS2V5OkAiZXJyb3IiXTsK
KyAgICBpZiAoIW9iamVjdCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICByZXR1cm4gW1tUZXN0
UHJvdG9jb2xEYXRhYmFzZUVycm9yIGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6W1tzdXBlciBv
YmplY3RGb3JLZXk6QCJlcnJvciJdIHRvSlNPTk9iamVjdF0uZ2V0KCldOworfQorCitAZW5kCisK
KworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtcmVx
dWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1yZXF1aXJpbmctcnVudGltZS1j
YXN0cy5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u
ZDljOTc2ZWZlMzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0
cy5qc29uLXJlc3VsdApAQCAtMCwwICsxLDE2MTQgQEAKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0
b3JCYWNrZW5kQ29tbWFuZHMuanMKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0
eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworLy8gVGVzdAorSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRv
bWFpbigiVGVzdCIsIG51bGwpOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIlRlc3Qu
VW5jYXN0ZWRBbmltYWxzIiwge1BpZ3M6ICJQaWdzIiwgQ293czogIkNvd3MiLCBDYXRzOiAiQ2F0
cyIsIEhlbnM6ICJIZW5zIn0pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIlRlc3Qu
Q2FzdGVkQW5pbWFscyIsIHtEdWNrczogIkR1Y2tzIiwgSGVuczogIkhlbnMiLCBDcm93czogIkNy
b3dzIiwgRmxhbWluZ29zOiAiRmxhbWluZ29zIn0pOworSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0
ZURvbWFpbigiVGVzdCIsIG51bGwpOworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29t
bWFuZHMuanMKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hl
cnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1
bnRpbWUtY2FzdHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0
b3IgeworCitjbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAg
dm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlz
cGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQor
ICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJu
IG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KK3ByaXZhdGU6CisgICAgUmVmUHRyPEJhY2tl
bmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOworfTsKKworCisKKworfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKKyMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVy
cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3R5cGVkZWYgU3RyaW5n
IEVycm9yU3RyaW5nOworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZp
bGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tl
bmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBl
LXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RCYWNr
ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZy
b250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3
dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNp
ZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyNpbmNsdWRlICJUZXN0
QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKwor
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNw
YXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1l
LWNhc3RzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVk
ZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwor
bmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEZyb250ZW5kUm91dGVyOworCit9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMu
aAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5q
c29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVy
cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4K
KyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwor
CisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKworCisvLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4K
K25hbWVzcGFjZSBUZXN0IHsKK2NsYXNzIFR5cGVOZWVkaW5nQ2FzdDsKK2NsYXNzIFJlY3Vyc2l2
ZU9iamVjdDE7CitjbGFzcyBSZWN1cnNpdmVPYmplY3QyOworZW51bSBjbGFzcyBVbmNhc3RlZEFu
aW1hbHM7CitlbnVtIGNsYXNzIENhc3RlZEFuaW1hbHM7Cit9IC8vIFRlc3QKKy8vIEVuZCBvZiBm
b3J3YXJkIGRlY2xhcmF0aW9ucy4KKworCisvLyBUeXBlZGVmcy4KK25hbWVzcGFjZSBUZXN0IHsK
K3R5cGVkZWYgaW50IENhc3RlZE9iamVjdElkOwordHlwZWRlZiBpbnQgVW5jYXN0ZWRPYmplY3RJ
ZDsKK30gLy8gVGVzdAorLy8gRW5kIG9mIHR5cGVkZWZzLgorCituYW1lc3BhY2UgVGVzdEhlbHBl
cnMgeworCitTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpOworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFsdWUpCit7
CisgICAgcmV0dXJuIGdldEVudW1Db25zdGFudFZhbHVlKHN0YXRpY19jYXN0PGludD4oZW51bVZh
bHVlKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCisKK25hbWVzcGFjZSBUZXN0
IHsKKy8qIEEgZHVtbXkgdHlwZSB0aGF0IHJlcXVpcmVzIHJ1bnRpbWUgY2FzdHMsIGFuZCBmb3Jj
ZXMgbm9uLXByaW1pdGl2ZSByZWZlcmVuY2VkIHR5cGVzIHRvIGFsc28gZW1pdCBydW50aW1lIGNh
c3QgaGVscGVycy4gKi8KK2NsYXNzIFR5cGVOZWVkaW5nQ2FzdCA6IHB1YmxpYyBKU09OOjpPYmpl
Y3RCYXNlIHsKK3B1YmxpYzoKKyAgICBlbnVtIHsKKyAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAor
ICAgICAgICBTdHJpbmdTZXQgPSAxIDw8IDAsCisgICAgICAgIE51bWJlclNldCA9IDEgPDwgMSwK
KyAgICAgICAgQW5pbWFsc1NldCA9IDEgPDwgMiwKKyAgICAgICAgSWRTZXQgPSAxIDw8IDMsCisg
ICAgICAgIFRyZWVTZXQgPSAxIDw8IDQsCisgICAgICAgIEFsbEZpZWxkc1NldCA9IChTdHJpbmdT
ZXQgfCBOdW1iZXJTZXQgfCBBbmltYWxzU2V0IHwgSWRTZXQgfCBUcmVlU2V0KQorICAgIH07CisK
KyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CisgICAgY2xhc3MgQnVpbGRlciB7CisgICAgcHJpdmF0
ZToKKyAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7CisKKyAgICAgICAgdGVt
cGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUg
fCBTVEVQPio+KHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcihSZWY8LypUeXBl
TmVlZGluZ0Nhc3QqL0pTT046Ok9iamVjdD4mJiBvYmplY3QpCisgICAgICAgICAgICA6IG1fcmVz
dWx0KFdURk1vdmUob2JqZWN0KSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0
ZSk7CisgICAgICAgIH0KKyAgICAgICAgZnJpZW5kIGNsYXNzIFR5cGVOZWVkaW5nQ2FzdDsKKyAg
ICBwdWJsaWM6CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFN0cmluZ1NldD4mIHNldFN0cmlu
Zyhjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgU3RyaW5nU2V0KSwgcHJvcGVydHlfc3RyaW5nX2FscmVhZHlfc2V0KTsK
KyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInN0cmluZyJfcywgdmFsdWUpOworICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTdHJpbmdTZXQ+KCk7CisgICAgICAgIH0KKworICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgTnVtYmVyU2V0PiYgc2V0TnVtYmVyKGludCB2YWx1ZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE51bWJlclNldCks
IHByb3BlcnR5X251bWJlcl9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
SW50ZWdlcigibnVtYmVyIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PE51bWJlclNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBBbmlt
YWxzU2V0PiYgc2V0QW5pbWFscyhJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmlt
YWxzIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRF
ICYgQW5pbWFsc1NldCksIHByb3BlcnR5X2FuaW1hbHNfYWxyZWFkeV9zZXQpOworICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldFN0cmluZygiYW5pbWFscyJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6
VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKHZhbHVlKSk7CisgICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPEFuaW1hbHNTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgSWRTZXQ+JiBzZXRJZChpbnQgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBJZFNldCksIHByb3BlcnR5X2lkX2FscmVhZHlf
c2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2VyKCJpZCJfcywgdmFsdWUpOwor
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxJZFNldD4oKTsKKyAgICAgICAgfQorCisgICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBUcmVlU2V0PiYgc2V0VHJlZShSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT4gdmFsdWUpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUcmVlU2V0KSwgcHJvcGVydHlfdHJlZV9h
bHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJ0cmVlIl9zLCB2
YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFRyZWVTZXQ+KCk7CisgICAgICAg
IH0KKworICAgICAgICBSZWY8VHlwZU5lZWRpbmdDYXN0PiByZWxlYXNlKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRf
aXNfbm90X3JlYWR5KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihUeXBlTmVl
ZGluZ0Nhc3QpID09IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7CisKKyAgICAg
ICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25SZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9u
TnVsbCgpOworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBXVEZNb3ZlKCpyZWludGVycHJldF9j
YXN0PFJlZjxUeXBlTmVlZGluZ0Nhc3Q+Kj4oJmpzb25SZXN1bHQpKTsKKyAgICAgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyoKKyAgICAgKiBTeW50aGV0
aWMgY29uc3RydWN0b3I6CisgICAgICogUmVmPFR5cGVOZWVkaW5nQ2FzdD4gcmVzdWx0ID0gVHlw
ZU5lZWRpbmdDYXN0OjpjcmVhdGUoKQorICAgICAqICAgICAuc2V0U3RyaW5nKC4uLikKKyAgICAg
KiAgICAgLnNldE51bWJlciguLi4pCisgICAgICogICAgIC5zZXRBbmltYWxzKC4uLikKKyAgICAg
KiAgICAgLnNldElkKC4uLikKKyAgICAgKiAgICAgLnNldFRyZWUoLi4uKQorICAgICAqICAgICAu
cmVsZWFzZSgpOworICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVh
dGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9i
amVjdDo6Y3JlYXRlKCkpOworICAgIH0KK307CisKKy8qICAqLworZW51bSBjbGFzcyBVbmNhc3Rl
ZEFuaW1hbHMgeworICAgIFBpZ3MgPSA0LAorICAgIENvd3MgPSA1LAorICAgIENhdHMgPSA2LAor
ICAgIEhlbnMgPSAxLAorfTsgLy8gZW51bSBjbGFzcyBVbmNhc3RlZEFuaW1hbHMKKy8qICAqLwor
ZW51bSBjbGFzcyBDYXN0ZWRBbmltYWxzIHsKKyAgICBEdWNrcyA9IDAsCisgICAgSGVucyA9IDEs
CisgICAgQ3Jvd3MgPSAyLAorICAgIEZsYW1pbmdvcyA9IDMsCit9OyAvLyBlbnVtIGNsYXNzIENh
c3RlZEFuaW1hbHMKK2NsYXNzIFJlY3Vyc2l2ZU9iamVjdDEgOiBwdWJsaWMgSlNPTjo6T2JqZWN0
QmFzZSB7CitwdWJsaWM6CisgICAgZW51bSB7CisgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKKyAg
ICAgICAgQWxsRmllbGRzU2V0ID0gMAorICAgIH07CisKKyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+
CisgICAgY2xhc3MgQnVpbGRlciB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPEpTT046
Ok9iamVjdD4gbV9yZXN1bHQ7CisKKyAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8
U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
ICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOworICAgICAg
ICB9CisKKyAgICAgICAgQnVpbGRlcihSZWY8LypSZWN1cnNpdmVPYmplY3QxKi9KU09OOjpPYmpl
Y3Q+JiYgb2JqZWN0KQorICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0
LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAgICAgICB9CisgICAgICAg
IGZyaWVuZCBjbGFzcyBSZWN1cnNpdmVPYmplY3QxOworICAgIHB1YmxpYzoKKworICAgICAgICBS
ZWY8UmVjdXJzaXZlT2JqZWN0MT4gcmVsZWFzZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7
CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoUmVjdXJzaXZlT2JqZWN0MSkgPT0g
c2l6ZW9mKEpTT046Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsKKworICAgICAgICAgICAgUmVmPEpT
T046Ok9iamVjdD4ganNvblJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7CisgICAg
ICAgICAgICBhdXRvIHJlc3VsdCA9IFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPFJlY3Vy
c2l2ZU9iamVjdDE+Kj4oJmpzb25SZXN1bHQpKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyoKKyAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0
b3I6CisgICAgICogUmVmPFJlY3Vyc2l2ZU9iamVjdDE+IHJlc3VsdCA9IFJlY3Vyc2l2ZU9iamVj
dDE6OmNyZWF0ZSgpCisgICAgICogICAgIC5yZWxlYXNlKCk7CisgICAgICovCisgICAgc3RhdGlj
IEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gQnVp
bGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7CisgICAgfQorCisgICAg
dm9pZCBzZXRPYmooUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9i
amVjdDI+IHZhbHVlKQorICAgIHsKKyAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0T2JqZWN0
KCJvYmoiX3MsIFdURk1vdmUodmFsdWUpKTsKKyAgICB9Cit9OworCitjbGFzcyBSZWN1cnNpdmVP
YmplY3QyIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgeworcHVibGljOgorICAgIGVudW0gewor
ICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCisgICAgICAgIEFsbEZpZWxkc1NldCA9IDAKKyAgICB9
OworCisgICAgdGVtcGxhdGU8aW50IFNUQVRFPgorICAgIGNsYXNzIEJ1aWxkZXIgeworICAgIHBy
aXZhdGU6CisgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVzdWx0OworCisgICAgICAg
IHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNU
QVRFIHwgU1RFUD4qPih0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXIoUmVmPC8q
UmVjdXJzaXZlT2JqZWN0MiovSlNPTjo6T2JqZWN0PiYmIG9iamVjdCkKKyAgICAgICAgICAgIDog
bV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxF
X0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0
X3N0YXRlKTsKKyAgICAgICAgfQorICAgICAgICBmcmllbmQgY2xhc3MgUmVjdXJzaXZlT2JqZWN0
MjsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgUmVmPFJlY3Vyc2l2ZU9iamVjdDI+IHJlbGVhc2Uo
KQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVs
ZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
c2l6ZW9mKFJlY3Vyc2l2ZU9iamVjdDIpID09IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5ub3Rf
Y2FzdCk7CisKKyAgICAgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25SZXN1bHQgPSBtX3Jl
c3VsdC5yZWxlYXNlTm9uTnVsbCgpOworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBXVEZNb3Zl
KCpyZWludGVycHJldF9jYXN0PFJlZjxSZWN1cnNpdmVPYmplY3QyPio+KCZqc29uUmVzdWx0KSk7
CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgfTsKKworICAgIC8q
CisgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgorICAgICAqIFJlZjxSZWN1cnNpdmVPYmpl
Y3QyPiByZXN1bHQgPSBSZWN1cnNpdmVPYmplY3QyOjpjcmVhdGUoKQorICAgICAqICAgICAucmVs
ZWFzZSgpOworICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVj
dDo6Y3JlYXRlKCkpOworICAgIH0KKworICAgIHZvaWQgc2V0T2JqKFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QxPiB2YWx1ZSkKKyAgICB7CisgICAgICAg
IEpTT046Ok9iamVjdEJhc2U6OnNldE9iamVjdCgib2JqIl9zLCBXVEZNb3ZlKHZhbHVlKSk7Cisg
ICAgfQorfTsKKworfSAvLyBUZXN0CisKK3RlbXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8
SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz4geworc3RhdGljIHZvaWQg
YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSlNPTjo6VmFsdWUqKTsKK307Cit0ZW1wbGF0ZTw+
IHN0cnVjdCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVk
aW5nQ2FzdD4geworc3RhdGljIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBl
TmVlZGluZ0Nhc3Q+IHJ1bnRpbWVDYXN0KFJlZlB0cjxKU09OOjpWYWx1ZT4mJiB2YWx1ZSk7Citz
dGF0aWMgdm9pZCBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShKU09OOjpWYWx1ZSopOworfTsK
K3RlbXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVz
dDo6UmVjdXJzaXZlT2JqZWN0MT4geworc3RhdGljIHZvaWQgYXNzZXJ0VmFsdWVIYXNFeHBlY3Rl
ZFR5cGUoSlNPTjo6VmFsdWUqKTsKK307Cit0ZW1wbGF0ZTw+IHN0cnVjdCBCaW5kaW5nVHJhaXRz
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDI+IHsKK3N0YXRpYyB2
b2lkIGFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEpTT046OlZhbHVlKik7Cit9OworCituYW1l
c3BhY2UgVGVzdEhlbHBlcnMgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBQcm90b2NvbEVudW1UeXBl
PgorT3B0aW9uYWw8UHJvdG9jb2xFbnVtVHlwZT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nKGNv
bnN0IFN0cmluZyYpOworCisvLyBFbnVtcyBpbiB0aGUgJ1Rlc3QnIERvbWFpbgordGVtcGxhdGU8
PgorT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzPiBw
YXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VW5jYXN0
ZWRBbmltYWxzPihjb25zdCBTdHJpbmcmKTsKK3RlbXBsYXRlPD4KK09wdGlvbmFsPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmlu
ZzxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPihjb25zdCBTdHJpbmcm
KTsKKworfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9j
b2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7CisKKy8vIEhhc2ggZGVjbGFyYXRp
b25zIGluIHRoZSAnVGVzdCcgRG9tYWluCit0ZW1wbGF0ZTw+CitzdHJ1Y3QgRGVmYXVsdEhhc2g8
SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzPiB7CisgICAgdHlwZWRl
ZiBJbnRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFscz4gSGFz
aDsKK307Cit0ZW1wbGF0ZTw+CitzdHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6VGVzdDo6Q2FzdGVkQW5pbWFscz4geworICAgIHR5cGVkZWYgSW50SGFzaDxJbnNwZWN0b3I6
OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPiBIYXNoOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV1RGCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorCisjIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KKy8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKworI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisK
K25hbWVzcGFjZSBQcm90b2NvbCB7CisKK25hbWVzcGFjZSBUZXN0SGVscGVycyB7CisKK3N0YXRp
YyBjb25zdCBjaGFyKiBjb25zdCBlbnVtX2NvbnN0YW50X3ZhbHVlc1tdID0geworICAgICJEdWNr
cyIsCisgICAgIkhlbnMiLAorICAgICJDcm93cyIsCisgICAgIkZsYW1pbmdvcyIsCisgICAgIlBp
Z3MiLAorICAgICJDb3dzIiwKKyAgICAiQ2F0cyIsCit9OworCitTdHJpbmcgZ2V0RW51bUNvbnN0
YW50VmFsdWUoaW50IGNvZGUpIHsKKyAgICByZXR1cm4gZW51bV9jb25zdGFudF92YWx1ZXNbY29k
ZV07Cit9CisKKy8vIEVudW1zIGluIHRoZSAnVGVzdCcgRG9tYWluCit0ZW1wbGF0ZTw+CitPcHRp
b25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM+IHBhcnNlRW51
bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1h
bHM+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCit7CisgICAgc3RhdGljIGNvbnN0IHNp
emVfdCBjb25zdGFudFZhbHVlc1tdID0geworICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJv
dG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFsczo6UGlncywKKyAgICAgICAgKHNpemVfdClJbnNw
ZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM6OkNvd3MsCisgICAgICAgIChz
aXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzOjpDYXRzLAor
ICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFs
czo6SGVucywKKyAgICB9OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgNDsgKytpKQorICAg
ICAgICBpZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRW
YWx1ZXNbaV1dKQorICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0
OjpVbmNhc3RlZEFuaW1hbHMpY29uc3RhbnRWYWx1ZXNbaV07CisKKyAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworfQorCit0ZW1wbGF0ZTw+CitPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpU
ZXN0OjpDYXN0ZWRBbmltYWxzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmlu
ZykKK3sKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7CisgICAg
ICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFsczo6RHVj
a3MsCisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5p
bWFsczo6SGVucywKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpD
YXN0ZWRBbmltYWxzOjpDcm93cywKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29s
OjpUZXN0OjpDYXN0ZWRBbmltYWxzOjpGbGFtaW5nb3MsCisgICAgfTsKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IDQ7ICsraSkKKyAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1f
Y29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKKyAgICAgICAgICAgIHJldHVybiAo
SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscyljb25zdGFudFZhbHVlc1tp
XTsKKworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKKworfSAvLyBuYW1lc3BhY2UgVGVz
dEhlbHBlcnMKKworCisKK3ZvaWQgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpU
ZXN0OjpDYXN0ZWRBbmltYWxzPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSlNPTjo6VmFs
dWUqIHZhbHVlKQoreworI2lmIEFTU0VSVF9FTkFCTEVECisgICAgQVNTRVJUX0FSRyh2YWx1ZSwg
dmFsdWUpOworICAgIFN0cmluZyByZXN1bHQ7CisgICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdmFs
dWUtPmFzU3RyaW5nKHJlc3VsdCk7CisgICAgQVNTRVJUKGNhc3RTdWNjZWVkZWQpOworICAgIEFT
U0VSVChyZXN1bHQgPT0gIkR1Y2tzIiB8fCByZXN1bHQgPT0gIkhlbnMiIHx8IHJlc3VsdCA9PSAi
Q3Jvd3MiIHx8IHJlc3VsdCA9PSAiRmxhbWluZ29zIik7CisjZWxzZSAvLyBBU1NFUlRfRU5BQkxF
RAorICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7CisjZW5kaWYgLy8gQVNTRVJUX0VOQUJMRUQKK30K
Kwordm9pZCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVk
aW5nQ2FzdD46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEpTT046OlZhbHVlKiB2YWx1ZSkK
K3sKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgIEFTU0VSVF9BUkcodmFsdWUsIHZhbHVlKTsKKyAg
ICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBvYmplY3Q7CisgICAgYm9vbCBjYXN0U3VjY2VlZGVkID0g
dmFsdWUtPmFzT2JqZWN0KG9iamVjdCk7CisgICAgQVNTRVJUX1VOVVNFRChjYXN0U3VjY2VlZGVk
LCBjYXN0U3VjY2VlZGVkKTsKKyAgICB7CisgICAgICAgIGF1dG8gc3RyaW5nUG9zID0gb2JqZWN0
LT5maW5kKCJzdHJpbmciX3MpOworICAgICAgICBBU1NFUlQoc3RyaW5nUG9zICE9IG9iamVjdC0+
ZW5kKCkpOworICAgICAgICBCaW5kaW5nVHJhaXRzPFN0cmluZz46OmFzc2VydFZhbHVlSGFzRXhw
ZWN0ZWRUeXBlKHN0cmluZ1Bvcy0+dmFsdWUuZ2V0KCkpOworICAgIH0KKyAgICB7CisgICAgICAg
IGF1dG8gbnVtYmVyUG9zID0gb2JqZWN0LT5maW5kKCJudW1iZXIiX3MpOworICAgICAgICBBU1NF
UlQobnVtYmVyUG9zICE9IG9iamVjdC0+ZW5kKCkpOworICAgICAgICBCaW5kaW5nVHJhaXRzPGlu
dD46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKG51bWJlclBvcy0+dmFsdWUuZ2V0KCkpOwor
ICAgIH0KKyAgICB7CisgICAgICAgIGF1dG8gYW5pbWFsc1BvcyA9IG9iamVjdC0+ZmluZCgiYW5p
bWFscyJfcyk7CisgICAgICAgIEFTU0VSVChhbmltYWxzUG9zICE9IG9iamVjdC0+ZW5kKCkpOwor
ICAgICAgICBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFu
aW1hbHM+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShhbmltYWxzUG9zLT52YWx1ZS5nZXQo
KSk7CisgICAgfQorICAgIHsKKyAgICAgICAgYXV0byBpZFBvcyA9IG9iamVjdC0+ZmluZCgiaWQi
X3MpOworICAgICAgICBBU1NFUlQoaWRQb3MgIT0gb2JqZWN0LT5lbmQoKSk7CisgICAgICAgIEJp
bmRpbmdUcmFpdHM8aW50Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoaWRQb3MtPnZhbHVl
LmdldCgpKTsKKyAgICB9CisgICAgeworICAgICAgICBhdXRvIHRyZWVQb3MgPSBvYmplY3QtPmZp
bmQoInRyZWUiX3MpOworICAgICAgICBBU1NFUlQodHJlZVBvcyAhPSBvYmplY3QtPmVuZCgpKTsK
KyAgICAgICAgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNp
dmVPYmplY3QxPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUodHJlZVBvcy0+dmFsdWUuZ2V0
KCkpOworICAgIH0KKworICAgIGludCBmb3VuZFByb3BlcnRpZXNDb3VudCA9IDU7CisgICAgaWYg
KGZvdW5kUHJvcGVydGllc0NvdW50ICE9IG9iamVjdC0+c2l6ZSgpKQorICAgICAgICBGQVRBTCgi
VW5leHBlY3RlZCBwcm9wZXJ0aWVzIGluIG9iamVjdDogJXNcbiIsIG9iamVjdC0+dG9KU09OU3Ry
aW5nKCkuYXNjaWkoKS5kYXRhKCkpOworI2Vsc2UgLy8gQVNTRVJUX0VOQUJMRUQKKyAgICBVTlVT
RURfUEFSQU0odmFsdWUpOworI2VuZGlmIC8vIEFTU0VSVF9FTkFCTEVECit9CisKK1JlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+IEJpbmRpbmdUcmFpdHM8
SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0Pjo6cnVudGltZUNhc3Qo
UmVmUHRyPEpTT046OlZhbHVlPiYmIHZhbHVlKQoreworICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+
IHJlc3VsdDsKKyAgICBib29sIGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNPYmplY3QocmVzdWx0
KTsKKyAgICBBU1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQpOworICAg
IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0
Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUocmVzdWx0LmdldCgpKTsKKyAgICBDT01QSUxF
X0FTU0VSVChzaXplb2YoSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0
KSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0QmFzZSksIHR5cGVfY2FzdF9wcm9ibGVtKTsKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdD
YXN0Kj4oc3RhdGljX2Nhc3Q8SlNPTjo6T2JqZWN0QmFzZSo+KHJlc3VsdC5nZXQoKSkpOworfQor
CisKK3ZvaWQgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNp
dmVPYmplY3QxPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSlNPTjo6VmFsdWUqIHZhbHVl
KQoreworI2lmIEFTU0VSVF9FTkFCTEVECisgICAgQVNTRVJUX0FSRyh2YWx1ZSwgdmFsdWUpOwor
ICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG9iamVjdDsKKyAgICBib29sIGNhc3RTdWNjZWVkZWQg
PSB2YWx1ZS0+YXNPYmplY3Qob2JqZWN0KTsKKyAgICBBU1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVk
ZWQsIGNhc3RTdWNjZWVkZWQpOworCisgICAgaW50IGZvdW5kUHJvcGVydGllc0NvdW50ID0gMDsK
KyAgICB7CisgICAgICAgIGF1dG8gb2JqUG9zID0gb2JqZWN0LT5maW5kKCJvYmoiX3MpOworICAg
ICAgICBpZiAob2JqUG9zICE9IG9iamVjdC0+ZW5kKCkpIHsKKyAgICAgICAgICAgIEJpbmRpbmdU
cmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0Mj46OmFzc2Vy
dFZhbHVlSGFzRXhwZWN0ZWRUeXBlKG9ialBvcy0+dmFsdWUuZ2V0KCkpOworICAgICAgICAgICAg
Kytmb3VuZFByb3BlcnRpZXNDb3VudDsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoZm91bmRQ
cm9wZXJ0aWVzQ291bnQgIT0gb2JqZWN0LT5zaXplKCkpCisgICAgICAgIEZBVEFMKCJVbmV4cGVj
dGVkIHByb3BlcnRpZXMgaW4gb2JqZWN0OiAlc1xuIiwgb2JqZWN0LT50b0pTT05TdHJpbmcoKS5h
c2NpaSgpLmRhdGEoKSk7CisjZWxzZSAvLyBBU1NFUlRfRU5BQkxFRAorICAgIFVOVVNFRF9QQVJB
TSh2YWx1ZSk7CisjZW5kaWYgLy8gQVNTRVJUX0VOQUJMRUQKK30KKwordm9pZCBCaW5kaW5nVHJh
aXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDI+Ojphc3NlcnRW
YWx1ZUhhc0V4cGVjdGVkVHlwZShKU09OOjpWYWx1ZSogdmFsdWUpCit7CisjaWYgQVNTRVJUX0VO
QUJMRUQKKyAgICBBU1NFUlRfQVJHKHZhbHVlLCB2YWx1ZSk7CisgICAgUmVmUHRyPEpTT046Ok9i
amVjdD4gb2JqZWN0OworICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9IHZhbHVlLT5hc09iamVjdChv
YmplY3QpOworICAgIEFTU0VSVF9VTlVTRUQoY2FzdFN1Y2NlZWRlZCwgY2FzdFN1Y2NlZWRlZCk7
CisKKyAgICBpbnQgZm91bmRQcm9wZXJ0aWVzQ291bnQgPSAwOworICAgIHsKKyAgICAgICAgYXV0
byBvYmpQb3MgPSBvYmplY3QtPmZpbmQoIm9iaiJfcyk7CisgICAgICAgIGlmIChvYmpQb3MgIT0g
b2JqZWN0LT5lbmQoKSkgeworICAgICAgICAgICAgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlBy
b3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QxPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5
cGUob2JqUG9zLT52YWx1ZS5nZXQoKSk7CisgICAgICAgICAgICArK2ZvdW5kUHJvcGVydGllc0Nv
dW50OworICAgICAgICB9CisgICAgfQorICAgIGlmIChmb3VuZFByb3BlcnRpZXNDb3VudCAhPSBv
YmplY3QtPnNpemUoKSkKKyAgICAgICAgRkFUQUwoIlVuZXhwZWN0ZWQgcHJvcGVydGllcyBpbiBv
YmplY3Q6ICVzXG4iLCBvYmplY3QtPnRvSlNPTlN0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKKyNl
bHNlIC8vIEFTU0VSVF9FTkFCTEVECisgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKKyNlbmRpZiAv
LyBBU1NFUlRfRU5BQkxFRAorfQorCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNw
cAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNh
c3RzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVy
cy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworCisKK25hbWVzcGFjZSBJbnNwZWN0
b3IgeworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0
UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbElu
dGVybmFsLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW5j
bHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK30gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmRE
aXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
bi5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVu
dGltZS1jYXN0cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KKworX19hdHRyaWJ1dGVf
XygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZp
Z3VyYXRpb24gOiBOU09iamVjdAorQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbi5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0
aW9uLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmct
cnVudGltZS1jYXN0cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKKworI2ltcG9ydCAi
VGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNw
YXRjaGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxl
QWdlbnQuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29u
dHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXJzLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxl
bWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KK3sKKyAgICBBdWdtZW50YWJsZUlu
c3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xs
ZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAg
cmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBj
b250cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAg
ICBbc3VwZXIgZGVhbGxvY107Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbENvbmZpZ3VyYXRpb24ubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50
RGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJl
cXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9y
dCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDx3dGYvSlNPTlZhbHVl
cy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisKKyMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1y
dW50aW1lLWNhc3RzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKKyNpbXBvcnQgPFdlYklu
c3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KKworCitAY2xhc3MgVGVzdFByb3RvY29s
VGVzdFR5cGVOZWVkaW5nQ2FzdDsKK0BjbGFzcyBUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2Jq
ZWN0MTsKK0BjbGFzcyBUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MjsKKworCit0eXBl
ZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzKSB7
CisgICAgVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc1BpZ3MsCisgICAgVGVzdFByb3Rv
Y29sVGVzdFVuY2FzdGVkQW5pbWFsc0Nvd3MsCisgICAgVGVzdFByb3RvY29sVGVzdFVuY2FzdGVk
QW5pbWFsc0NhdHMsCisgICAgVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc0hlbnMsCit9
OworCit0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5p
bWFscykgeworICAgIFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzRHVja3MsCisgICAgVGVz
dFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHNIZW5zLAorICAgIFRlc3RQcm90b2NvbFRlc3RDYXN0
ZWRBbmltYWxzQ3Jvd3MsCisgICAgVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHNGbGFtaW5n
b3MsCit9OworCisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGlu
dGVyZmFjZSBUZXN0UHJvdG9jb2xUZXN0VHlwZU5lZWRpbmdDYXN0IDogUldJUHJvdG9jb2xKU09O
T2JqZWN0CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNT
dHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29s
T2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OworLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZyBudW1iZXI6KGludCludW1iZXIg
YW5pbWFsczooVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHMpYW5pbWFscyBpZGVudGlmaWVy
OihpbnQpaWRlbnRpZmllciB0cmVlOihUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSAq
KXRyZWU7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJp
bmcgKnN0cmluZzsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24p
IGludCBudW1iZXI7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWdu
KSBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFscyBhbmltYWxzOworLyogcmVxdWlyZWQgKi8g
QHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgaW50IGlkZW50aWZpZXI7CisvKiByZXF1aXJl
ZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluKSBUZXN0UHJvdG9jb2xUZXN0UmVjdXJz
aXZlT2JqZWN0MSAqdHJlZTsKK0BlbmQKKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRl
ZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxIDog
UldJUHJvdG9jb2xKU09OT2JqZWN0CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihO
U0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKKy0gKGluc3RhbmNldHlwZSlp
bml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0
OworLyogb3B0aW9uYWwgKi8gQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgVGVzdFByb3Rv
Y29sVGVzdFJlY3Vyc2l2ZU9iamVjdDIgKm9iajsKK0BlbmQKKworX19hdHRyaWJ1dGVfXygodmlz
aWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbFRlc3RSZWN1cnNp
dmVPYmplY3QyIDogUldJUHJvdG9jb2xKU09OT2JqZWN0CistIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKKy0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3Qg
Kilqc29uT2JqZWN0OworLyogb3B0aW9uYWwgKi8gQHByb3BlcnR5IChub25hdG9taWMsIHJldGFp
bikgVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgKm9iajsKK0BlbmQKKworCisKKwor
CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9i
amVjdHMuaD4KKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAorCisjIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBv
cnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0
Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPHd0Zi9KU09O
VmFsdWVzLmg+CisKKworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAor
CisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAi
VGVzdFByb3RvY29sLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNv
bnZlcnNpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBPYmpDRW51bVR5cGU+CitPcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmlu
Zyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKKworCitpbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJp
bmcoVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFscyB2YWx1ZSkKK3sKKyAgICBzd2l0Y2go
dmFsdWUpIHsKKyAgICBjYXNlIFRlc3RQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHNQaWdzOgor
ICAgICAgICByZXR1cm4gIlBpZ3MiX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xUZXN0VW5jYXN0
ZWRBbmltYWxzQ293czoKKyAgICAgICAgcmV0dXJuICJDb3dzIl9zOworICAgIGNhc2UgVGVzdFBy
b3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc0NhdHM6CisgICAgICAgIHJldHVybiAiQ2F0cyJfczsK
KyAgICBjYXNlIFRlc3RQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHNIZW5zOgorICAgICAgICBy
ZXR1cm4gIkhlbnMiX3M7CisgICAgfQorfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgT3B0aW9uYWw8
VGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFscz4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0
IFN0cmluZyYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09ICJQaWdzIikKKyAgICAgICAgcmV0
dXJuIFRlc3RQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHNQaWdzOworICAgIGlmICh2YWx1ZSA9
PSAiQ293cyIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxz
Q293czsKKyAgICBpZiAodmFsdWUgPT0gIkNhdHMiKQorICAgICAgICByZXR1cm4gVGVzdFByb3Rv
Y29sVGVzdFVuY2FzdGVkQW5pbWFsc0NhdHM7CisgICAgaWYgKHZhbHVlID09ICJIZW5zIikKKyAg
ICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHNIZW5zOworICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK2lubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhU
ZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFscyB2YWx1ZSkKK3sKKyAgICBzd2l0Y2godmFsdWUp
IHsKKyAgICBjYXNlIFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzRHVja3M6CisgICAgICAg
IHJldHVybiAiRHVja3MiX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFs
c0hlbnM6CisgICAgICAgIHJldHVybiAiSGVucyJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbFRl
c3RDYXN0ZWRBbmltYWxzQ3Jvd3M6CisgICAgICAgIHJldHVybiAiQ3Jvd3MiX3M7CisgICAgY2Fz
ZSBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFsc0ZsYW1pbmdvczoKKyAgICAgICAgcmV0dXJu
ICJGbGFtaW5nb3MiX3M7CisgICAgfQorfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgT3B0aW9uYWw8
VGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHM+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBT
dHJpbmcmIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSAiRHVja3MiKQorICAgICAgICByZXR1
cm4gVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHNEdWNrczsKKyAgICBpZiAodmFsdWUgPT0g
IkhlbnMiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHNIZW5z
OworICAgIGlmICh2YWx1ZSA9PSAiQ3Jvd3MiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29s
VGVzdENhc3RlZEFuaW1hbHNDcm93czsKKyAgICBpZiAodmFsdWUgPT0gIkZsYW1pbmdvcyIpCisg
ICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFsc0ZsYW1pbmdvczsKKyAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKwor
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorCisjIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90
b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisK
K0BpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChUZXN0RG9tYWluKQorCisr
ICh2b2lkKV9wYXJzZVR5cGVOZWVkaW5nQ2FzdDooVGVzdFByb3RvY29sVGVzdFR5cGVOZWVkaW5n
Q2FzdCAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNl
Q2FzdGVkT2JqZWN0SWQ6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXls
b2FkOworKyAodm9pZClfcGFyc2VVbmNhc3RlZE9iamVjdElkOihOU051bWJlciAqKilvdXRWYWx1
ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNlVW5jYXN0ZWRBbmltYWxz
OihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQp
X3BhcnNlQ2FzdGVkQW5pbWFsczooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlk
KXBheWxvYWQ7CisrICh2b2lkKV9wYXJzZVJlY3Vyc2l2ZU9iamVjdDE6KFRlc3RQcm90b2NvbFRl
c3RSZWN1cnNpdmVPYmplY3QxICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwor
KyAodm9pZClfcGFyc2VSZWN1cnNpdmVPYmplY3QyOihUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZl
T2JqZWN0MiAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKworQGVuZAorCitA
aW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChUZXN0RG9tYWluKQor
CisrICh2b2lkKV9wYXJzZVR5cGVOZWVkaW5nQ2FzdDooVGVzdFByb3RvY29sVGVzdFR5cGVOZWVk
aW5nQ2FzdCAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOwor
ICAgICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sVGVzdFR5cGVOZWVkaW5nQ2FzdCBhbGxvY10g
aW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOworfQorCisrICh2b2lkKV9wYXJzZUNhc3RlZE9iamVj
dElkOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TTnVtYmVyIGNsYXNzXSk7
CisgICAgKm91dFZhbHVlID0gKE5TTnVtYmVyICopcGF5bG9hZDsKK30KKworKyAodm9pZClfcGFy
c2VVbmNhc3RlZE9iamVjdElkOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQp
cGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05T
TnVtYmVyIGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gKE5TTnVtYmVyICopcGF5bG9hZDsKK30K
KworKyAodm9pZClfcGFyc2VVbmNhc3RlZEFuaW1hbHM6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZy
b21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQ
RShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKKyAgICBPcHRpb25hbDxUZXN0UHJvdG9jb2xU
ZXN0VW5jYXN0ZWRBbmltYWxzPiByZXN1bHQgPSBJbnNwZWN0b3I6OmZyb21Qcm90b2NvbFN0cmlu
ZzxUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzPihwYXlsb2FkKTsKKyAgICBUSFJPV19F
WENFUFRJT05fRk9SX0JBRF9FTlVNX1ZBTFVFKHJlc3VsdCwgQCJVbmNhc3RlZEFuaW1hbHMiKTsK
KyAgICAqb3V0VmFsdWUgPSBAKHJlc3VsdC52YWx1ZSgpKTsKK30KKworKyAodm9pZClfcGFyc2VD
YXN0ZWRBbmltYWxzOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9h
ZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TU3RyaW5n
IGNsYXNzXSk7CisgICAgT3B0aW9uYWw8VGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHM+IHJl
c3VsdCA9IEluc3BlY3Rvcjo6ZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbFRlc3RDYXN0
ZWRBbmltYWxzPihwYXlsb2FkKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9FTlVNX1ZB
TFVFKHJlc3VsdCwgQCJDYXN0ZWRBbmltYWxzIik7CisgICAgKm91dFZhbHVlID0gQChyZXN1bHQu
dmFsdWUoKSk7Cit9CisKKysgKHZvaWQpX3BhcnNlUmVjdXJzaXZlT2JqZWN0MTooVGVzdFByb3Rv
Y29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxv
YWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rp
b25hcnkgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbFRlc3RSZWN1cnNp
dmVPYmplY3QxIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07Cit9CisKKysgKHZvaWQp
X3BhcnNlUmVjdXJzaXZlT2JqZWN0MjooVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDIg
Kiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJ
T05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKKyAgICAqb3V0
VmFsdWUgPSBbW1Rlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QyIGFsbG9jXSBpbml0V2l0
aFBheWxvYWQ6cGF5bG9hZF07Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlw
ZXMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1y
dW50aW1lLWNhc3RzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9j
b2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbXBv
cnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKwor
QGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFRlc3RUeXBlTmVlZGluZ0Nhc3QKKworLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcg
KiwgaWQ+ICopcGF5bG9hZAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAg
ICAgICByZXR1cm4gbmlsOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9Q
RVJUWShwYXlsb2FkW0Aic3RyaW5nIl0sIEAic3RyaW5nIik7CisgICAgc2VsZi5zdHJpbmcgPSBw
YXlsb2FkW0Aic3RyaW5nIl07CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BS
T1BFUlRZKHBheWxvYWRbQCJudW1iZXIiXSwgQCJudW1iZXIiKTsKKyAgICBzZWxmLm51bWJlciA9
IFtwYXlsb2FkW0AibnVtYmVyIl0gaW50ZWdlclZhbHVlXTsKKworICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImFuaW1hbHMiXSwgQCJhbmltYWxzIik7
CisgICAgT3B0aW9uYWw8VGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHM+IGFuaW1hbHMgPSBm
cm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHM+KHBheWxvYWRb
QCJhbmltYWxzIl0pOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX0VOVU1fVkFMVUUoYW5p
bWFscywgQCJhbmltYWxzIik7CisgICAgc2VsZi5hbmltYWxzID0gYW5pbWFscy52YWx1ZSgpOwor
CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiaWQi
XSwgQCJpZCIpOworICAgIHNlbGYuaWRlbnRpZmllciA9IFtwYXlsb2FkW0AiaWQiXSBpbnRlZ2Vy
VmFsdWVdOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXls
b2FkW0AidHJlZSJdLCBAInRyZWUiKTsKKyAgICBzZWxmLnRyZWUgPSBbW1Rlc3RQcm90b2NvbFRl
c3RSZWN1cnNpdmVPYmplY3QxIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZFtAInRyZWUi
XV07CisKKyAgICByZXR1cm4gc2VsZjsKK30KKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3Rv
Y29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilvYmplY3QKK3sKKyAgICBpZiAoIShz
ZWxmID0gW3N1cGVyIGluaXRXaXRoSlNPTk9iamVjdDpbb2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0
KCldKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHJldHVybiBzZWxmOworfQorCistIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nIG51bWJlcjooaW50
KW51bWJlciBhbmltYWxzOihUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFscylhbmltYWxzIGlk
ZW50aWZpZXI6KGludClpZGVudGlmaWVyIHRyZWU6KFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVP
YmplY3QxICopdHJlZQoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAg
ICByZXR1cm4gbmlsOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJU
WShzdHJpbmcsIEAic3RyaW5nIik7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9Q
Uk9QRVJUWSh0cmVlLCBAInRyZWUiKTsKKworICAgIHNlbGYuc3RyaW5nID0gc3RyaW5nOworICAg
IHNlbGYubnVtYmVyID0gbnVtYmVyOworICAgIHNlbGYuYW5pbWFscyA9IGFuaW1hbHM7CisgICAg
c2VsZi5pZGVudGlmaWVyID0gaWRlbnRpZmllcjsKKyAgICBzZWxmLnRyZWUgPSB0cmVlOworCisg
ICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpc2V0U3RyaW5nOihOU1N0cmluZyAqKXN0cmlu
ZworeworICAgIFtzdXBlciBzZXRTdHJpbmc6c3RyaW5nIGZvcktleTpAInN0cmluZyJdOworfQor
CistIChOU1N0cmluZyAqKXN0cmluZworeworICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5
OkAic3RyaW5nIl07Cit9CisKKy0gKHZvaWQpc2V0TnVtYmVyOihpbnQpbnVtYmVyCit7CisgICAg
W3N1cGVyIHNldEludGVnZXI6bnVtYmVyIGZvcktleTpAIm51bWJlciJdOworfQorCistIChpbnQp
bnVtYmVyCit7CisgICAgcmV0dXJuIFtzdXBlciBpbnRlZ2VyRm9yS2V5OkAibnVtYmVyIl07Cit9
CisKKy0gKHZvaWQpc2V0QW5pbWFsczooVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHMpYW5p
bWFscworeworICAgIFtzdXBlciBzZXRTdHJpbmc6dG9Qcm90b2NvbFN0cmluZyhhbmltYWxzKSBm
b3JLZXk6QCJhbmltYWxzIl07Cit9CisKKy0gKFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxz
KWFuaW1hbHMKK3sKKyAgICByZXR1cm4gZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbFRl
c3RDYXN0ZWRBbmltYWxzPihbc3VwZXIgc3RyaW5nRm9yS2V5OkAiYW5pbWFscyJdKS52YWx1ZSgp
OworfQorCistICh2b2lkKXNldElkZW50aWZpZXI6KGludClpZGVudGlmaWVyCit7CisgICAgW3N1
cGVyIHNldEludGVnZXI6aWRlbnRpZmllciBmb3JLZXk6QCJpZCJdOworfQorCistIChpbnQpaWRl
bnRpZmllcgoreworICAgIHJldHVybiBbc3VwZXIgaW50ZWdlckZvcktleTpAImlkIl07Cit9CisK
Ky0gKHZvaWQpc2V0VHJlZTooVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgKil0cmVl
Cit7CisgICAgW3N1cGVyIHNldE9iamVjdDp0cmVlIGZvcktleTpAInRyZWUiXTsKK30KKworLSAo
VGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgKil0cmVlCit7CisgICAgUldJUHJvdG9j
b2xKU09OT2JqZWN0ICpvYmplY3QgPSBbc3VwZXIgb2JqZWN0Rm9yS2V5OkAidHJlZSJdOworICAg
IGlmICghb2JqZWN0KQorICAgICAgICByZXR1cm4gbmlsOworICAgIHJldHVybiBbW1Rlc3RQcm90
b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxIGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6W1tzdXBl
ciBvYmplY3RGb3JLZXk6QCJ0cmVlIl0gdG9KU09OT2JqZWN0XS5nZXQoKV07Cit9CisKK0BlbmQK
KworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxCisKKy0g
KGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3Ry
aW5nICosIGlkPiAqKXBheWxvYWQKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkK
KyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHNlbGYub2JqID0gW1tUZXN0UHJvdG9jb2xUZXN0
UmVjdXJzaXZlT2JqZWN0MiBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRbQCJvYmoiXV07
CisKKyAgICByZXR1cm4gc2VsZjsKK30KKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29s
T2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilvYmplY3QKK3sKKyAgICBpZiAoIShzZWxm
ID0gW3N1cGVyIGluaXRXaXRoSlNPTk9iamVjdDpbb2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0KCld
KSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lk
KXNldE9iajooVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDIgKilvYmoKK3sKKyAgICBb
c3VwZXIgc2V0T2JqZWN0Om9iaiBmb3JLZXk6QCJvYmoiXTsKK30KKworLSAoVGVzdFByb3RvY29s
VGVzdFJlY3Vyc2l2ZU9iamVjdDIgKilvYmoKK3sKKyAgICBSV0lQcm90b2NvbEpTT05PYmplY3Qg
Km9iamVjdCA9IFtzdXBlciBvYmplY3RGb3JLZXk6QCJvYmoiXTsKKyAgICBpZiAoIW9iamVjdCkK
KyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICByZXR1cm4gW1tUZXN0UHJvdG9jb2xUZXN0UmVjdXJz
aXZlT2JqZWN0MiBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0Oltbc3VwZXIgb2JqZWN0Rm9yS2V5
OkAib2JqIl0gdG9KU09OT2JqZWN0XS5nZXQoKV07Cit9CisKK0BlbmQKKworQGltcGxlbWVudGF0
aW9uIFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QyCisKKy0gKGluc3RhbmNldHlwZSlp
bml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBh
eWxvYWQKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJu
IG5pbDsKKworICAgIHNlbGYub2JqID0gW1tUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0
MSBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRbQCJvYmoiXV07CisKKyAgICByZXR1cm4g
c2VsZjsKK30KKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90
b2NvbEpTT05PYmplY3QgKilvYmplY3QKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRX
aXRoSlNPTk9iamVjdDpbb2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0KCldKSkKKyAgICAgICAgcmV0
dXJuIG5pbDsKKworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXNldE9iajooVGVzdFBy
b3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgKilvYmoKK3sKKyAgICBbc3VwZXIgc2V0T2JqZWN0
Om9iaiBmb3JLZXk6QCJvYmoiXTsKK30KKworLSAoVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9i
amVjdDEgKilvYmoKK3sKKyAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9iamVjdCA9IFtzdXBl
ciBvYmplY3RGb3JLZXk6QCJvYmoiXTsKKyAgICBpZiAoIW9iamVjdCkKKyAgICAgICAgcmV0dXJu
IG5pbDsKKyAgICByZXR1cm4gW1tUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSBhbGxv
Y10gaW5pdFdpdGhKU09OT2JqZWN0Oltbc3VwZXIgb2JqZWN0Rm9yS2V5OkAib2JqIl0gdG9KU09O
T2JqZWN0XS5nZXQoKV07Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uLXJlc3Vs
dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC90eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5iYWNiNjU2NWE4MgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBl
LXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0CkBAIC0wLDAgKzEsMTEyOSBAQAorIyMj
IEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcworLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0
b3JCYWNrZW5kQ29tbWFuZHMuanMKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUt
d2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisKK25hbWVzcGFj
ZSBJbnNwZWN0b3IgeworCitjbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJs
aWM6CisgICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNo
ZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRj
aGVyKTsgfQorICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0
IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KK3ByaXZhdGU6CisgICAgUmVm
UHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOworfTsKKworCisKKwor
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKKyMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmRE
aXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXdpdGgtb3Blbi1wYXJhbWV0
ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3R5cGVkZWYg
U3RyaW5nIEVycm9yU3RyaW5nOworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMg
RW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVz
dEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSB0eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRl
IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisK
KyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyNpbmNsdWRlICJU
ZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCisjZW5kaWYgLy8gRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisK
KworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmRE
aXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJz
LmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXdpdGgtb3Blbi1wYXJh
bWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVk
ZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwor
bmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEZyb250ZW5kUm91dGVyOworCit9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMu
aAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5j
cHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KKyNpbmNs
dWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK25h
bWVzcGFjZSBQcm90b2NvbCB7CisKKworCisvLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KK25hbWVz
cGFjZSBUZXN0IHsKK2NsYXNzIE5vT3BlblBhcmFtZXRlcnM7CitjbGFzcyBPcGVuUGFyYW1ldGVy
czsKK30gLy8gVGVzdAorLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgorCisKKworCitu
YW1lc3BhY2UgVGVzdCB7CitjbGFzcyBOb09wZW5QYXJhbWV0ZXJzIDogcHVibGljIEpTT046Ok9i
amVjdEJhc2UgeworcHVibGljOgorICAgIGVudW0geworICAgICAgICBOb0ZpZWxkc1NldCA9IDAs
CisgICAgICAgIE9uZVNldCA9IDEgPDwgMCwKKyAgICAgICAgVHdvU2V0ID0gMSA8PCAxLAorICAg
ICAgICBBbGxGaWVsZHNTZXQgPSAoT25lU2V0IHwgVHdvU2V0KQorICAgIH07CisKKyAgICB0ZW1w
bGF0ZTxpbnQgU1RBVEU+CisgICAgY2xhc3MgQnVpbGRlciB7CisgICAgcHJpdmF0ZToKKyAgICAg
ICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7CisKKyAgICAgICAgdGVtcGxhdGU8aW50
IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+
KHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcihSZWY8LypOb09wZW5QYXJhbWV0
ZXJzKi9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQorICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZN
b3ZlKG9iamVjdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRF
ID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAg
ICAgICB9CisgICAgICAgIGZyaWVuZCBjbGFzcyBOb09wZW5QYXJhbWV0ZXJzOworICAgIHB1Ymxp
YzoKKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgT25lU2V0PiYgc2V0T25lKGRvdWJsZSB2YWx1
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE9uZVNl
dCksIHByb3BlcnR5X29uZV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
RG91YmxlKCJvbmUiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8T25l
U2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFR3b1NldD4mIHNl
dFR3byhkb3VibGUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBUd29TZXQpLCBwcm9wZXJ0eV90d29fYWxyZWFkeV9zZXQpOworICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldERvdWJsZSgidHdvIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPFR3b1NldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIFJlZjxOb09wZW5Q
YXJhbWV0ZXJzPiByZWxlYXNlKCkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihOb09wZW5QYXJhbWV0ZXJzKSA9PSBzaXplb2YoSlNP
Tjo6T2JqZWN0KSwgY2Fubm90X2Nhc3QpOworCisgICAgICAgICAgICBSZWY8SlNPTjo6T2JqZWN0
PiBqc29uUmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKKyAgICAgICAgICAgIGF1
dG8gcmVzdWx0ID0gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8Tm9PcGVuUGFyYW1ldGVy
cz4qPigmanNvblJlc3VsdCkpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAg
fQorICAgIH07CisKKyAgICAvKgorICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKKyAgICAg
KiBSZWY8Tm9PcGVuUGFyYW1ldGVycz4gcmVzdWx0ID0gTm9PcGVuUGFyYW1ldGVyczo6Y3JlYXRl
KCkKKyAgICAgKiAgICAgLnNldE9uZSguLi4pCisgICAgICogICAgIC5zZXRUd28oLi4uKQorICAg
ICAqICAgICAucmVsZWFzZSgpOworICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRz
U2V0PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+
KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOworICAgIH0KK307CisKK2NsYXNzIE9wZW5QYXJhbWV0
ZXJzIDogcHVibGljIEpTT046Ok9iamVjdCB7CitwdWJsaWM6CisgICAgZW51bSB7CisgICAgICAg
IE5vRmllbGRzU2V0ID0gMCwKKyAgICAgICAgQWxwaGFTZXQgPSAxIDw8IDAsCisgICAgICAgIEJl
dGFTZXQgPSAxIDw8IDEsCisgICAgICAgIEFsbEZpZWxkc1NldCA9IChBbHBoYVNldCB8IEJldGFT
ZXQpCisgICAgfTsKKworICAgIHRlbXBsYXRlPGludCBTVEFURT4KKyAgICBjbGFzcyBCdWlsZGVy
IHsKKyAgICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBtX3Jlc3VsdDsK
KworICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0
U3RhdGUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8
QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBCdWls
ZGVyKFJlZjwvKk9wZW5QYXJhbWV0ZXJzKi9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQorICAgICAg
ICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5f
bm9uX2luaXRfc3RhdGUpOworICAgICAgICB9CisgICAgICAgIGZyaWVuZCBjbGFzcyBPcGVuUGFy
YW1ldGVyczsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IEFscGhhU2V0
PiYgc2V0QWxwaGEoZG91YmxlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxF
X0FTU0VSVCghKFNUQVRFICYgQWxwaGFTZXQpLCBwcm9wZXJ0eV9hbHBoYV9hbHJlYWR5X3NldCk7
CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0RG91YmxlKCJhbHBoYSJfcywgdmFsdWUpOworICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxBbHBoYVNldD4oKTsKKyAgICAgICAgfQorCisgICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBCZXRhU2V0PiYgc2V0QmV0YShkb3VibGUgdmFsdWUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBCZXRhU2V0KSwgcHJv
cGVydHlfYmV0YV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0RG91Ymxl
KCJiZXRhIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEJldGFTZXQ+
KCk7CisgICAgICAgIH0KKworICAgICAgICBSZWY8T3BlblBhcmFtZXRlcnM+IHJlbGVhc2UoKQor
ICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNT
ZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6
ZW9mKE9wZW5QYXJhbWV0ZXJzKSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0KSwgY2Fubm90X2Nhc3Qp
OworCisgICAgICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uUmVzdWx0ID0gbV9yZXN1bHQu
cmVsZWFzZU5vbk51bGwoKTsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gV1RGTW92ZSgqcmVp
bnRlcnByZXRfY2FzdDxSZWY8T3BlblBhcmFtZXRlcnM+Kj4oJmpzb25SZXN1bHQpKTsKKyAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyoKKyAgICAg
KiBTeW50aGV0aWMgY29uc3RydWN0b3I6CisgICAgICogUmVmPE9wZW5QYXJhbWV0ZXJzPiByZXN1
bHQgPSBPcGVuUGFyYW1ldGVyczo6Y3JlYXRlKCkKKyAgICAgKiAgICAgLnNldEFscGhhKC4uLikK
KyAgICAgKiAgICAgLnNldEJldGEoLi4uKQorICAgICAqICAgICAucmVsZWFzZSgpOworICAgICAq
LworICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOwor
ICAgIH0KKworICAgIC8vIFByb3BlcnR5IG5hbWVzIGZvciB0eXBlIGdlbmVyYXRlZCBhcyBvcGVu
LgorICAgIE5vbmUgc3RhdGljIGNvbnN0IGNoYXIqIEFscGhhOworfTsKKworfSAvLyBUZXN0CisK
KworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
KyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdFBy
b3RvY29sT2JqZWN0cy5oIgorCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNl
IFByb3RvY29sIHsKKworY29uc3QgY2hhciogSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6T3Bl
blBhcmFtZXRlcnM6OkFscGhhID0gImFscGhhIjsKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wK
KworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
T2JqZWN0cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRj
aGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRoLW9wZW4t
cGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlz
cGF0Y2hlcnMuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKKworCituYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAi
VGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlICJUZXN0UHJvdG9j
b2xJbnRlcm5hbC5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgor
I2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNr
ZW5kRGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3Vy
YXRpb24uaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtd2l0aC1vcGVu
LXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+CisKK19fYXR0cmlidXRl
X18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25m
aWd1cmF0aW9uIDogTlNPYmplY3QKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24uaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJh
dGlvbi5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtd2l0aC1vcGVu
LXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCisKKyNpbXBvcnQgIlRl
c3RQcm90b2NvbEludGVybmFsLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0
Y2hlcnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFn
ZW50Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRy
b2xsZXIuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tl
bmREaXNwYXRjaGVycy5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXJzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1l
bnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCit7CisgICAgQXVnbWVudGFibGVJbnNw
ZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVy
Cit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJl
dHVybiBuaWw7CisgICAgQVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250cm9sbGVyID0gY29u
dHJvbGxlcjsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAg
W3N1cGVyIGRlYWxsb2NdOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xDb25maWd1cmF0aW9uLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERp
c3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRo
LW9wZW4tcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4K
KwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5o
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRoLW9wZW4tcGFyYW1l
dGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNp
bXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3Iv
UldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+CisKKworQGNsYXNzIFRlc3RQcm90b2NvbFRlc3ROb09w
ZW5QYXJhbWV0ZXJzOworQGNsYXNzIFRlc3RQcm90b2NvbFRlc3RPcGVuUGFyYW1ldGVyczsKKwor
CisKKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNl
IFRlc3RQcm90b2NvbFRlc3ROb09wZW5QYXJhbWV0ZXJzIDogUldJUHJvdG9jb2xKU09OT2JqZWN0
CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcg
KiwgaWQ+ICopcGF5bG9hZDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0
OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OworLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoT25lOihkb3VibGUpb25lIHR3bzooZG91YmxlKXR3bzsKKy8qIHJlcXVpcmVkICovIEBw
cm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGRvdWJsZSBvbmU7CisvKiByZXF1aXJlZCAqLyBA
cHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBkb3VibGUgdHdvOworQGVuZAorCitfX2F0dHJp
YnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29s
VGVzdE9wZW5QYXJhbWV0ZXJzIDogUldJUHJvdG9jb2xKU09OT2JqZWN0CistIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9h
ZDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpT
T05PYmplY3QgKilqc29uT2JqZWN0OworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQWxwaGE6KGRv
dWJsZSlhbHBoYSBiZXRhOihkb3VibGUpYmV0YTsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAo
bm9uYXRvbWljLCBhc3NpZ24pIGRvdWJsZSBhbHBoYTsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0
eSAobm9uYXRvbWljLCBhc3NpZ24pIGRvdWJsZSBiZXRhOworQGVuZAorCisKKworCisKKworI2lt
cG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5o
PgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xJbnRlcm5hbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlw
ZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFBy
b3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21l
bnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4K
KworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wu
aCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4K
KworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlw
ZT4KK09wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpOworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xU
eXBlUGFyc2VyLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0
UHJpdmF0ZS5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW50ZXJmYWNlIFRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoVGVzdERvbWFpbikKKworKyAodm9pZClfcGFyc2VO
b09wZW5QYXJhbWV0ZXJzOihUZXN0UHJvdG9jb2xUZXN0Tm9PcGVuUGFyYW1ldGVycyAqKilvdXRW
YWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNlT3BlblBhcmFtZXRl
cnM6KFRlc3RQcm90b2NvbFRlc3RPcGVuUGFyYW1ldGVycyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9h
ZDooaWQpcGF5bG9hZDsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zIChUZXN0RG9tYWluKQorCisrICh2b2lkKV9wYXJzZU5vT3BlblBhcmFtZXRl
cnM6KFRlc3RQcm90b2NvbFRlc3ROb09wZW5QYXJhbWV0ZXJzICoqKW91dFZhbHVlIGZyb21QYXls
b2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXls
b2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9j
b2xUZXN0Tm9PcGVuUGFyYW1ldGVycyBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOwor
fQorCisrICh2b2lkKV9wYXJzZU9wZW5QYXJhbWV0ZXJzOihUZXN0UHJvdG9jb2xUZXN0T3BlblBh
cmFtZXRlcnMgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJP
V19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsK
KyAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbFRlc3RPcGVuUGFyYW1ldGVycyBhbGxvY10g
aW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbFR5cGVzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRo
LW9wZW4tcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVBy
b3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKyNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Cisj
aW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwor
CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUZXN0Tm9PcGVuUGFyYW1ldGVycworCist
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0
cmluZyAqLCBpZD4gKilwYXlsb2FkCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkp
CisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVE
X1BST1BFUlRZKHBheWxvYWRbQCJvbmUiXSwgQCJvbmUiKTsKKyAgICBzZWxmLm9uZSA9IFtwYXls
b2FkW0Aib25lIl0gZG91YmxlVmFsdWVdOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFV
SVJFRF9QUk9QRVJUWShwYXlsb2FkW0AidHdvIl0sIEAidHdvIik7CisgICAgc2VsZi50d28gPSBb
cGF5bG9hZFtAInR3byJdIGRvdWJsZVZhbHVlXTsKKworICAgIHJldHVybiBzZWxmOworfQorLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVj
dCAqKW9iamVjdAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0
OltvYmplY3QgdG9KU09OT2JqZWN0XS5nZXQoKV0pKQorICAgICAgICByZXR1cm4gbmlsOworCisg
ICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aE9uZTooZG91Ymxl
KW9uZSB0d286KGRvdWJsZSl0d28KK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkK
KyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHNlbGYub25lID0gb25lOworICAgIHNlbGYudHdv
ID0gdHdvOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpc2V0T25lOihkb3VibGUp
b25lCit7CisgICAgW3N1cGVyIHNldERvdWJsZTpvbmUgZm9yS2V5OkAib25lIl07Cit9CisKKy0g
KGRvdWJsZSlvbmUKK3sKKyAgICByZXR1cm4gW3N1cGVyIGRvdWJsZUZvcktleTpAIm9uZSJdOwor
fQorCistICh2b2lkKXNldFR3bzooZG91YmxlKXR3bworeworICAgIFtzdXBlciBzZXREb3VibGU6
dHdvIGZvcktleTpAInR3byJdOworfQorCistIChkb3VibGUpdHdvCit7CisgICAgcmV0dXJuIFtz
dXBlciBkb3VibGVGb3JLZXk6QCJ0d28iXTsKK30KKworQGVuZAorCitAaW1wbGVtZW50YXRpb24g
VGVzdFByb3RvY29sVGVzdE9wZW5QYXJhbWV0ZXJzCisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0
aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQK
K3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsK
KworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImFs
cGhhIl0sIEAiYWxwaGEiKTsKKyAgICBzZWxmLmFscGhhID0gW3BheWxvYWRbQCJhbHBoYSJdIGRv
dWJsZVZhbHVlXTsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFko
cGF5bG9hZFtAImJldGEiXSwgQCJiZXRhIik7CisgICAgc2VsZi5iZXRhID0gW3BheWxvYWRbQCJi
ZXRhIl0gZG91YmxlVmFsdWVdOworCisgICAgcmV0dXJuIHNlbGY7Cit9CistIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopb2JqZWN0
Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEpTT05PYmplY3Q6W29iamVjdCB0
b0pTT05PYmplY3RdLmdldCgpXSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICByZXR1cm4g
c2VsZjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQWxwaGE6KGRvdWJsZSlhbHBoYSBi
ZXRhOihkb3VibGUpYmV0YQoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAg
ICAgICByZXR1cm4gbmlsOworCisgICAgc2VsZi5hbHBoYSA9IGFscGhhOworICAgIHNlbGYuYmV0
YSA9IGJldGE7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClzZXRBbHBoYTooZG91
YmxlKWFscGhhCit7CisgICAgW3N1cGVyIHNldERvdWJsZTphbHBoYSBmb3JLZXk6QCJhbHBoYSJd
OworfQorCistIChkb3VibGUpYWxwaGEKK3sKKyAgICByZXR1cm4gW3N1cGVyIGRvdWJsZUZvcktl
eTpAImFscGhhIl07Cit9CisKKy0gKHZvaWQpc2V0QmV0YTooZG91YmxlKWJldGEKK3sKKyAgICBb
c3VwZXIgc2V0RG91YmxlOmJldGEgZm9yS2V5OkAiYmV0YSJdOworfQorCistIChkb3VibGUpYmV0
YQoreworICAgIHJldHVybiBbc3VwZXIgZG91YmxlRm9yS2V5OkAiYmV0YSJdOworfQorCitAZW5k
CisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3ZlcnNp
b24uanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvdmVyc2lvbi5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMC4uNjVmNGUyZTY2NTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdmVyc2lvbi5q
c29uLXJlc3VsdApAQCAtMCwwICsxLDg0NSBAQAorIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJh
Y2tlbmRDb21tYW5kcy5qcworLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHZlcnNp
b24uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisvLyBW
ZXJzaW9uRG9tYWluCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJWZXJzaW9uRG9t
YWluIiwgbnVsbCk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyVmVyc2lvbigiVmVyc2lvbkRv
bWFpbiIsIDQyKTsKK0luc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIlZlcnNpb25Eb21h
aW4iLCBudWxsKTsKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCisK
KyMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24KKy8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUo
SU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bFR5cGVzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRl
ci5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERp
c3BhdGNoZXIgeworcHVibGljOgorICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRy
PEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9
IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KKyAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERp
c3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Citw
cml2YXRlOgorICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hl
cjsKK307CisKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjIyMgRW5kIEZpbGU6IFRlc3RB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tl
bmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lv
bi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0eXBlZGVmIFN0
cmluZyBFcnJvclN0cmluZzsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVu
ZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
dmVyc2lvbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgi
CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgor
I2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVk
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCisjaWYgRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmRE
aXNwYXRjaGVycy5oIgorI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK30gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMj
IyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lvbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29s
T2JqZWN0cy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBGcm9udGVu
ZFJvdXRlcjsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RG
cm9udGVuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3Bh
dGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHZlcnNpb24uanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMu
Y3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCituYW1lc3BhY2UgUHJvdG9jb2wg
eworCisvLyBWZXJzaW9ucy4KK25hbWVzcGFjZSBWZXJzaW9uRG9tYWluIHsKK3N0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgVkVSU0lPTiA9IDQyOworfSAvLyBWZXJzaW9uRG9tYWluCisvLyBFbmQg
b2YgdmVyc2lvbnMuCisKKworCisKKworCisKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKwor
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVj
dHMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKworI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK25h
bWVzcGFjZSBQcm90b2NvbCB7CisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3Rz
LmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2luY2x1ZGUgPHd0
Zi9SZXRhaW5QdHIuaD4KKworCisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKK30gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNw
YXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hl
cnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmln
LmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1
ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKworbmFtZXNwYWNlIElu
c3BlY3RvciB7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbi5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
dmVyc2lvbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
KyNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KKworX19hdHRyaWJ1dGVfXygo
dmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3Vy
YXRpb24gOiBOU09iamVjdAorQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29u
ZmlndXJhdGlvbi5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9u
Lm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lvbi5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90
b2NvbENvbmZpZ3VyYXRpb24uaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIK
KyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW1w
b3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKwordXNp
bmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENv
bmZpZ3VyYXRpb24KK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250
cm9sbGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50
YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVy
IGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQo
Y29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVybiBz
ZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisK
K0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKwor
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwu
aCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDx3
dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisKKyMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJz
aW9uLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lt
cG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9S
V0lQcm90b2NvbEpTT05PYmplY3QuaD4KKworCisKKworCisKKworCisKKworCisKKworI2ltcG9y
dCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgor
CisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xJbnRlcm5hbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lv
bi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBv
cnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZh
dGUuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJv
bGxlci5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKworCisKKworIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHZlcnNp
b24uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1w
b3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFy
cmF5Q29udmVyc2lvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3RlbXBsYXRlPHR5
cGVuYW1lIE9iakNFbnVtVHlwZT4KK09wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29s
U3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
KworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorCisjIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lvbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5o
IgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQ
YXJzZXIuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2
YXRlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworCisKKworCisjIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorCisjIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sVHlwZXMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB2
ZXJzaW9uLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09O
T2JqZWN0UHJpdmF0ZS5oPgorI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbXBvcnQgPHd0
Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tY29tbWFuZC10YXJnZXRUeXBl
LW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tY29tbWFuZC10YXJnZXRUeXBlLW1h
dGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwLi5kNmRmOWU0YmQ5YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWNvbW1hbmQtdGFy
Z2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgpAQCAtMCwwICsxLDkg
QEAKK1sKK3sKKyAgICAiZG9tYWluIjogIkRvbWFpbiIsCisgICAgImRlYnVnZ2FibGVUeXBlcyI6
IFsiamF2YXNjcmlwdCJdLAorICAgICJ0YXJnZXRUeXBlcyI6IFsid29ya2VyIl0sCisgICAgImNv
bW1hbmRzIjogW3sibmFtZSI6ICJDb21tYW5kIn1dLAorICAgICJldmVudHMiOiBbeyJuYW1lIjog
IkV2ZW50In1dCit9CitdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1jb21tYW5kLXRhcmdldFR5cGVzLXR5cGUuanNvbiBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWNv
bW1hbmQtdGFyZ2V0VHlwZXMtdHlwZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwLi42NDA1OWY4NGJjZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlw
ZXMtdHlwZS5qc29uCkBAIC0wLDAgKzEsOSBAQAoreworICAgICJkb21haW4iOiAiRG9tYWluIiwK
KyAgICAiY29tbWFuZHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIlBhZ2VP
bmx5IiwKKyAgICAgICAgICAgICJ0YXJnZXRUeXBlcyI6ICJwYWdlZSIKKyAgICAgICAgfQorICAg
IF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlwZXMtdmFsdWUuanNvbiBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWNvbW1hbmQtdGFy
Z2V0VHlwZXMtdmFsdWUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MC4uNTAyMDQ0NzJlYzgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1jb21tYW5kLXRhcmdldFR5cGVzLXZhbHVl
Lmpzb24KQEAgLTAsMCArMSw5IEBACit7CisgICAgImRvbWFpbiI6ICJEb21haW4iLAorICAgICJj
b21tYW5kcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiUGFnZU9ubHkiLAor
ICAgICAgICAgICAgInRhcmdldFR5cGVzIjogWyJwYWdlZSJdCisgICAgICAgIH0KKyAgICBdCit9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZmFpbC1vbi1kb21haW4tZGVidWdnYWJsZVR5cGVzLXR5cGUuanNvbiBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWRvbWFpbi1kZWJ1Z2dh
YmxlVHlwZXMtdHlwZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
Li45NzQ4ZjQyMzQ3MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMtdHlw
ZS5qc29uCkBAIC0wLDAgKzEsOSBAQAoreworICAgICJkb21haW4iOiAiV2ViT25seSIsCisgICAg
ImRlYnVnZ2FibGVUeXBlcyI6ICJ3ZWJiIiwKKyAgICAiY29tbWFuZHMiOiBbCisgICAgICAgIHsK
KyAgICAgICAgICAgICJuYW1lIjogImVuYWJsZSIKKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWls
LW9uLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMtdmFsdWUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWRvbWFpbi1kZWJ1Z2dhYmxlVHlw
ZXMtdmFsdWUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYjI1
MmRkYmQ4M2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kb21haW4tZGVidWdnYWJsZVR5cGVzLXZhbHVlLmpz
b24KQEAgLTAsMCArMSw5IEBACit7CisgICAgImRvbWFpbiI6ICJXZWJPbmx5IiwKKyAgICAiZGVi
dWdnYWJsZVR5cGVzIjogWyJ3ZWJiIl0sCisgICAgImNvbW1hbmRzIjogWworICAgICAgICB7Cisg
ICAgICAgICAgICAibmFtZSI6ICJlbmFibGUiCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1v
bi1kb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbiBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWRv
bWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi43YWEwMjgwNDY1NwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9m
YWlsLW9uLWRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5q
c29uCkBAIC0wLDAgKzEsOCBAQAorWworeworICAgICJkb21haW4iOiAiRG9tYWluIiwKKyAgICAi
ZGVidWdnYWJsZVR5cGVzIjogWyJqYXZhc2NyaXB0Il0sCisgICAgImNvbW1hbmRzIjogW3sibmFt
ZSI6ICJDb21tYW5kIiwgInRhcmdldFR5cGVzIjogWyJ3b3JrZXIiXX1dLAorICAgICJldmVudHMi
OiBbeyJuYW1lIjogIkV2ZW50In1dCit9CitdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZXMt
dHlwZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2ZhaWwtb24tZG9tYWluLXRhcmdldFR5cGVzLXR5cGUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMC4uZDgyMjI2NzQxNDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kb21haW4t
dGFyZ2V0VHlwZXMtdHlwZS5qc29uCkBAIC0wLDAgKzEsOSBAQAoreworICAgICJkb21haW4iOiAi
UGFnZU9ubHkiLAorICAgICJ0YXJnZXRUeXBlcyI6ICJwYWdlZSIsCisgICAgImNvbW1hbmRzIjog
WworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJlbmFibGUiCisgICAgICAgIH0KKyAg
ICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZXMtdmFsdWUuanNvbiBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWRvbWFpbi10YXJn
ZXRUeXBlcy12YWx1ZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
Li5lN2IxMGQ3ZjE1NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWRvbWFpbi10YXJnZXRUeXBlcy12YWx1ZS5q
c29uCkBAIC0wLDAgKzEsOSBAQAoreworICAgICJkb21haW4iOiAiUGFnZU9ubHkiLAorICAgICJ0
YXJnZXRUeXBlcyI6IFsicGFnZWUiXSwKKyAgICAiY29tbWFuZHMiOiBbCisgICAgICAgIHsKKyAg
ICAgICAgICAgICJuYW1lIjogImVuYWJsZSIKKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9u
LWR1cGxpY2F0ZS1jb21tYW5kLWNhbGwtcGFyYW1ldGVyLW5hbWVzLmpzb24gYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kdXBsaWNhdGUtY29t
bWFuZC1jYWxsLXBhcmFtZXRlci1uYW1lcy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwLi5iYWI3NmNhNjI3OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWR1cGxpY2F0ZS1jb21t
YW5kLWNhbGwtcGFyYW1ldGVyLW5hbWVzLmpzb24KQEAgLTAsMCArMSwxNiBAQAoreworICAgICJk
b21haW4iOiAiT3ZlcmxheSIsCisgICAgImNvbW1hbmRzIjogWworICAgICAgICB7CisgICAgICAg
ICAgICAibmFtZSI6ICJwcm9jZXNzUG9pbnRzIiwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjog
WworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicG9pbnQiLCAidHlwZSI6ICJudW1iZXIiIH0s
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwb2ludCIsICJ0eXBlIjogIm51bWJlciIgfQor
ICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJyZXR1cm5zIjogWworICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAicmVzdWx0MSIsICJ0eXBlIjogInN0cmluZyIgfSwKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInJlc3VsdDIiLCAidHlwZSI6ICJzdHJpbmciIH0KKyAgICAgICAgICAgIF0K
KyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWR1cGxpY2F0ZS1jb21tYW5kLXJldHVybi1w
YXJhbWV0ZXItbmFtZXMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9mYWlsLW9uLWR1cGxpY2F0ZS1jb21tYW5kLXJldHVybi1wYXJhbWV0ZXItbmFt
ZXMuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYzhiYjE1YzA0
YjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1yZXR1cm4tcGFyYW1ldGVyLW5h
bWVzLmpzb24KQEAgLTAsMCArMSwxNiBAQAoreworICAgICJkb21haW4iOiAiT3ZlcmxheSIsCisg
ICAgImNvbW1hbmRzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJwcm9jZXNz
UG9pbnRzIiwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAicG9pbnQxIiwgInR5cGUiOiAibnVtYmVyIiB9LAorICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAicG9pbnQyIiwgInR5cGUiOiAibnVtYmVyIiB9CisgICAgICAgICAgICBdLAorICAg
ICAgICAgICAgInJldHVybnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJyZXN1bHQi
LCAidHlwZSI6ICJzdHJpbmciIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJyZXN1bHQi
LCAidHlwZSI6ICJzdHJpbmciIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0KK30K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9mYWlsLW9uLWR1cGxpY2F0ZS1ldmVudC1wYXJhbWV0ZXItbmFtZXMuanNvbiBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWR1cGxpY2F0ZS1l
dmVudC1wYXJhbWV0ZXItbmFtZXMuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMC4uZDNkM2IzY2M2NDIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kdXBsaWNhdGUtZXZlbnQtcGFy
YW1ldGVyLW5hbWVzLmpzb24KQEAgLTAsMCArMSwxMiBAQAoreworICAgICJkb21haW4iOiAiT3Zl
cmxheSIsCisgICAgImV2ZW50cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAi
cHJvY2Vzc2VkUG9pbnRzIiwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAicG9pbnQiLCAidHlwZSI6ICJudW1iZXIiIH0sCisgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJwb2ludCIsICJ0eXBlIjogIm51bWJlciIgfQorICAgICAgICAgICAg
XQorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZHVwbGljYXRlLXR5cGUtZGVjbGFyYXRp
b25zLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1kZWNsYXJhdGlvbnMuanNvbgpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNzAyZmM2YTMyNzAKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kdXBs
aWNhdGUtdHlwZS1kZWNsYXJhdGlvbnMuanNvbgpAQCAtMCwwICsxLDE1IEBACit7CisgICAgImRv
bWFpbiI6ICJSdW50aW1lIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAg
ICJpZCI6ICJSZW1vdGVPYmplY3RJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAor
ICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4iCisg
ICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJSZW1vdGVPYmplY3RJZCIs
CisgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgImRlc2NyaXB0aW9u
IjogIlVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4iCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFp
bC1vbi1kdXBsaWNhdGUtdHlwZS1tZW1iZXItbmFtZXMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLW1lbWJl
ci1uYW1lcy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hZWJh
Y2VlOGIyMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLW1lbWJlci1uYW1lcy5qc29u
CkBAIC0wLDAgKzEsMTUgQEAKK1sKK3sKKyAgICAiZG9tYWluIjogIk92ZXJsYXlUeXBlcyIsCisg
ICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiUG9pbnQiLAorICAg
ICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwor
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAieCIsICJ0eXBlIjogImludGVnZXIiIH0sCisgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJ4IiwgInR5cGUiOiAiaW50ZWdlciIgfQorICAgICAgICAg
ICAgXQorICAgICAgICB9CisgICAgXQorfQorXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZW51bS13aXRoLW5vLXZhbHVl
cy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2Zh
aWwtb24tZW51bS13aXRoLW5vLXZhbHVlcy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwLi4yMzJhN2MzMjQ5YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWVudW0td2l0aC1uby12
YWx1ZXMuanNvbgpAQCAtMCwwICsxLDEwIEBACit7CisgICAgImRvbWFpbiI6ICJEYXRhYmFzZSIs
CisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiUHJpbWFyeUNv
bG9ycyIsCisgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgImVudW0i
OiBbXQorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlwZS1tYXRj
aGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmct
ZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAuLjkxMzJjZTA4ODI4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlwZS1t
YXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgpAQCAtMCwwICsxLDggQEAKK1sKK3sK
KyAgICAiZG9tYWluIjogIkRvbWFpbiIsCisgICAgImRlYnVnZ2FibGVUeXBlcyI6IFsiamF2YXNj
cmlwdCJdLAorICAgICJjb21tYW5kcyI6IFt7Im5hbWUiOiAiQ29tbWFuZCJ9XSwKKyAgICAiZXZl
bnRzIjogW3sibmFtZSI6ICJFdmVudCIsICJ0YXJnZXRUeXBlcyI6IFsid29ya2VyIl19XQorfQor
XQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlwZXMtdHlwZS5qc29uIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlwZXMt
dHlwZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5lNTRlZDFm
NWM2YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGVzLXR5cGUuanNvbgpAQCAtMCww
ICsxLDkgQEAKK3sKKyAgICAiZG9tYWluIjogIkRvbWFpbiIsCisgICAgImV2ZW50cyI6IFsKKyAg
ICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiUGFnZU9ubHkiLAorICAgICAgICAgICAgInRh
cmdldFR5cGVzIjogInBhZ2VlIgorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZXZlbnQt
dGFyZ2V0VHlwZXMtdmFsdWUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGVzLXZhbHVlLmpzb24KbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjU4ODRiZmQ3YTZiCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2Zh
aWwtb24tZXZlbnQtdGFyZ2V0VHlwZXMtdmFsdWUuanNvbgpAQCAtMCwwICsxLDkgQEAKK3sKKyAg
ICAiZG9tYWluIjogIkRvbWFpbiIsCisgICAgImV2ZW50cyI6IFsKKyAgICAgICAgeworICAgICAg
ICAgICAgIm5hbWUiOiAiUGFnZU9ubHkiLAorICAgICAgICAgICAgInRhcmdldFR5cGVzIjogWyJw
YWdlZSJdCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9u
YWwtcGFyYW1ldGVyLWZsYWcuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxh
Zy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi43MzA4ZGI5OTJk
NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxhZy5q
c29uCkBAIC0wLDAgKzEsMTggQEAKK3sKKyAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKKyAgICAi
dHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJEYXRhYmFzZUlkIiwKKyAg
ICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAi
VW5pcXVlIGlkZW50aWZpZXIgb2YgRGF0YWJhc2Ugb2JqZWN0LiIKKyAgICAgICAgfQorICAgIF0s
CisgICAgImV2ZW50cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiZGlkRXhl
Y3V0ZU9wdGlvbmFsUGFyYW1ldGVycyIsCisgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAic3RyaW5nIiwg
Im9wdGlvbmFsIjogMCB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFp
bC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNvbiBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLW51bWJlci10eXBlZC1v
cHRpb25hbC10eXBlLW1lbWJlci5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwLi5hZmVhNTU1ZWM0ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRpb25h
bC10eXBlLW1lbWJlci5qc29uCkBAIC0wLDAgKzEsMTYgQEAKK1sKK3sKKyAgICAiZG9tYWluIjog
IkRhdGFiYXNlIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6
ICJFcnJvciIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgImRl
c2NyaXB0aW9uIjogIkRhdGFiYXNlIGVycm9yLiIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6
IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm1lc3NhZ2UiLCAidHlwZSI6ICJzdHJpbmci
LCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgbWVzc2FnZS4iIH0sCisgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJjb2RlIiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBj
b2RlLiIsICJvcHRpb25hbCI6IDAgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXQor
fQorXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24g
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1z
dHJpbmctdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbgpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNDAxMmM3OWI2YjMKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1zdHJp
bmctdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbgpAQCAtMCwwICsxLDE4IEBACit7
CisgICAgImRvbWFpbiI6ICJEYXRhYmFzZSIsCisgICAgInR5cGVzIjogWworICAgICAgICB7Cisg
ICAgICAgICAgICAiaWQiOiAiRGF0YWJhc2VJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJzdHJp
bmciLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBpZGVudGlmaWVyIG9mIERh
dGFiYXNlIG9iamVjdC4iCisgICAgICAgIH0KKyAgICBdLAorICAgICJldmVudHMiOiBbCisgICAg
ICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMi
LAorICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6ICJ0cnVlIiB9Cisg
ICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1zdHJpbmctdHlwZWQt
b3B0aW9uYWwtdHlwZS1tZW1iZXIuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXN0cmluZy10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJl
ci5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jYTNlZjI4YThm
OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9mYWlsLW9uLXN0cmluZy10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29u
CkBAIC0wLDAgKzEsMTYgQEAKK1sKK3sKKyAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKKyAgICAi
dHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJFcnJvciIsCisgICAgICAg
ICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkRhdGFi
YXNlIGVycm9yLiIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogIm1lc3NhZ2UiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAi
RXJyb3IgbWVzc2FnZS4iIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2RlIiwgInR5
cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBjb2RlLiIsICJvcHRpb25hbCI6
ICJmYWxzZSIgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXQorfQorXQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwt
b24tdHlwZS1kZWNsYXJhdGlvbi11c2luZy10eXBlLXJlZmVyZW5jZS5qc29uIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdHlwZS1kZWNsYXJh
dGlvbi11c2luZy10eXBlLXJlZmVyZW5jZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwLi4xOWI3NTkwY2NjNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXR5cGUtZGVjbGFyYXRp
b24tdXNpbmctdHlwZS1yZWZlcmVuY2UuanNvbgpAQCAtMCwwICsxLDEzIEBACitbCit7CisgICAg
ImRvbWFpbiI6ICJSdW50aW1lIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAg
ICAgICJpZCI6ICJSZW1vdGVPYmplY3RJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3Qi
LAorICAgICAgICAgICAgIiRyZWYiOiAiU29tZVR5cGUiLAorICAgICAgICAgICAgImRlc2NyaXB0
aW9uIjogIlVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4iCisgICAgICAgIH0KKyAgICBdCit9Citd
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZmFpbC1vbi10eXBlLXJlZmVyZW5jZS1hcy1wcmltaXRpdmUtdHlwZS5qc29uIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdHlwZS1yZWZl
cmVuY2UtYXMtcHJpbWl0aXZlLXR5cGUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMC4uOGM4M2JiZmNlNDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi10eXBlLXJlZmVyZW5jZS1h
cy1wcmltaXRpdmUtdHlwZS5qc29uCkBAIC0wLDAgKzEsMTggQEAKK3sKKyAgICAiZG9tYWluIjog
IkRhdGFiYXNlIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6
ICJEYXRhYmFzZUlkIiwKKyAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAg
ICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIGlkZW50aWZpZXIgb2YgRGF0YWJhc2Ugb2JqZWN0LiIK
KyAgICAgICAgfQorICAgIF0sCisgICAgImV2ZW50cyI6IFsKKyAgICAgICAgeworICAgICAgICAg
ICAgIm5hbWUiOiAiZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyIsCisgICAgICAgICAgICAi
cGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwg
InR5cGUiOiAiRGF0YWJhc2VJZCIgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXQor
fQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2ZhaWwtb24tdHlwZS13aXRoLWxvd2VyY2FzZS1uYW1lLmpzb24gYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi10eXBlLXdpdGgtbG93ZXJj
YXNlLW5hbWUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNTMx
OTAxZTRhOWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi10eXBlLXdpdGgtbG93ZXJjYXNlLW5hbWUuanNvbgpA
QCAtMCwwICsxLDEwIEBACit7CisgICAgImRvbWFpbiI6ICJEYXRhYmFzZSIsCisgICAgInR5cGVz
IjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiZGF0YWJhc2VJZCIsCisgICAgICAg
ICAgICAidHlwZSI6ICJpbnRlZ2VyIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlx
dWUgaWRlbnRpZmllciBvZiBEYXRhYmFzZSBvYmplY3QuIgorICAgICAgICB9CisgICAgXQorfQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLWRlY2xhcmF0aW9uLmpzb24g
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi11
bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtZGVjbGFyYXRpb24uanNvbgpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZDY4ODdhMjc0MTEKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1v
bi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtZGVjbGFyYXRpb24uanNvbgpAQCAtMCww
ICsxLDEyIEBACitbCit7CisgICAgImRvbWFpbiI6ICJSdW50aW1lIiwKKyAgICAidHlwZXMiOiBb
CisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJSZW1vdGVPYmplY3RJZCIsCisgICAgICAg
ICAgICAidHlwZSI6ICJkcmFnb24iLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1
ZSBvYmplY3QgaWRlbnRpZmllci4iCisgICAgICAgIH0KKyAgICBdCit9CitdCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi11
bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtbWVtYmVyLmpzb24gYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi11bmtub3duLXR5cGUtcmVm
ZXJlbmNlLWluLXR5cGUtbWVtYmVyLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAuLmI4MTdkYjUwNDRkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVy
ZW5jZS1pbi10eXBlLW1lbWJlci5qc29uCkBAIC0wLDAgKzEsMTUgQEAKK1sKK3sKKyAgICAiZG9t
YWluIjogIkZhbnRhc3kiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAg
ImlkIjogIkRyYWdvbkVnZyIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAg
ICAgICAgImRlc2NyaXB0aW9uIjogIkEgZHJhZ29uIGVnZy4iLAorICAgICAgICAgICAgInByb3Bl
cnRpZXMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2xvciIsICIkcmVmIjogIkNv
bG9yIiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdCit9CitdCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJhdGUt
ZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3Vh
cmRzLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjY3Y2Y4ZTU4
MmY2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCkBA
IC0wLDAgKzEsMzYgQEAKK1sKK3sKKyAgICAiZG9tYWluIjogIk5ldHdvcmsxIiwKKyAgICAiZmVh
dHVyZUd1YXJkIjogIlBMQVRGT1JNKFdFQl9DT01NQU5EUykiLAorICAgICJjb21tYW5kcyI6IFsK
KyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAibG9hZFJlc291cmNlIiwKKyAgICAgICAg
ICAgICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBhIHJlc291cmNlIGluIHRoZSBjb250ZXh0IG9mIGEg
ZnJhbWUgb24gdGhlIGluc3BlY3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNoZWNrcy4i
CisgICAgICAgIH0KKyAgICBdCit9LAoreworICAgICJkb21haW4iOiAiTmV0d29yazIiLAorICAg
ICJmZWF0dXJlR3VhcmQiOiAiUExBVEZPUk0oV0VCX1RZUEVTKSIsCisgICAgInR5cGVzIjogWwor
ICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiTmV0d29ya0Vycm9yIiwKKyAgICAgICAgICAg
ICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKKyAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogIm1lc3NhZ2UiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRp
b24iOiAiRXJyb3IgbWVzc2FnZS4iIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2Rl
IiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBjb2RlLiIgfQorICAg
ICAgICAgICAgXQorICAgICAgICB9CisgICAgXQorfSwKK3sKKyAgICAiZG9tYWluIjogIk5ldHdv
cmszIiwKKyAgICAiZmVhdHVyZUd1YXJkIjogIlBMQVRGT1JNKFdFQl9FVkVOVFMpIiwKKyAgICAi
ZXZlbnRzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJyZXNvdXJjZUxvYWRl
ZCIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQSByZXNvdXJjZSB3YXMgbG9hZGVkLiIK
KyAgICAgICAgfQorICAgIF0KK30KK10KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2NvbW1hbmQtdGFyZ2V0VHlwZS1tYXRj
aGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2NvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGlu
Zy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggZDI3YWI2NWI5MmEuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2NvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGlu
Zy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBA
QAotWwotewotICAgICJkb21haW4iOiAiRG9tYWluIiwKLSAgICAiZGVidWdnYWJsZVR5cGVzIjog
WyJwYWdlIl0sCi0gICAgInRhcmdldFR5cGVzIjogWyJwYWdlIiwgIndvcmtlciJdLAotICAgICJj
b21tYW5kcyI6IFt7Im5hbWUiOiAiQ29tbWFuZCJ9XSwKLSAgICAiZXZlbnRzIjogW3sibmFtZSI6
ICJFdmVudCJ9XQotfQotXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUu
anNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmljL2NvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDExMjYyZTg4OWZhLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9jb21tYW5kcy13aXRoLWFz
eW5jLWF0dHJpYnV0ZS5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsMTA5ICswLDAgQEAKLXsKLSAg
ICAiZG9tYWluIjogIkRhdGFiYXNlIiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAg
ICAgICAgICJpZCI6ICJEYXRhYmFzZUlkIiwKLSAgICAgICAgICAgICJ0eXBlIjogImludGVnZXIi
LAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBpZGVudGlmaWVyIG9mIERhdGFi
YXNlIG9iamVjdC4iCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJQ
cmltYXJ5Q29sb3JzIiwKLSAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCi0gICAgICAgICAg
ICAiZW51bSI6IFsicmVkIiwgImdyZWVuIiwgImJsdWUiXQotICAgICAgICB9LAotICAgICAgICB7
Ci0gICAgICAgICAgICAiaWQiOiAiQ29sb3JMaXN0IiwKLSAgICAgICAgICAgICJ0eXBlIjogImFy
cmF5IiwKLSAgICAgICAgICAgICJpdGVtcyI6IHsgIiRyZWYiOiAiUHJpbWFyeUNvbG9ycyIgfQot
ICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiRXJyb3IiLAotICAgICAg
ICAgICAgInR5cGUiOiAib2JqZWN0IiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJEYXRh
YmFzZSBlcnJvci4iLAotICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCi0gICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJtZXNzYWdlIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjog
IkVycm9yIG1lc3NhZ2UuIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29kZSIsICJ0
eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgY29kZS4iIH0KLSAgICAgICAg
ICAgIF0KLSAgICAgICAgfQotICAgIF0sCi0gICAgImNvbW1hbmRzIjogWwotICAgICAgICB7Ci0g
ICAgICAgICAgICAibmFtZSI6ICJleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzIiwK
LSAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
ZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiIH0sCi0gICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJxdWVyeSIsICJ0eXBlIjogInN0cmluZyIgfQotICAgICAgICAgICAgXSwKLSAgICAg
ICAgICAgICJyZXR1cm5zIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFt
ZXMiLCAidHlwZSI6ICJhcnJheSIsICJvcHRpb25hbCI6IHRydWUsICJpdGVtcyI6IHsgInR5cGUi
OiAic3RyaW5nIiB9IH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBl
IjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1l
IjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRp
b25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlw
ZSI6ICJhbnkiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIsICJvcHRpb25hbCI6IHRydWUgfSwK
LSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiLCAi
b3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5Db2xv
ciIsICIkcmVmIjogIlByaW1hcnlDb2xvcnMiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJhbHRlcm5hdGVDb2xvcnMiLCAiJHJlZiI6ICJDb2xvckxpc3Qi
LCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcmludENv
bG9yIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxs
b3ciLCAiYmxhY2siXSwgIm9wdGlvbmFsIjogdHJ1ZSB9Ci0gICAgICAgICAgICBdCi0gICAgICAg
IH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImV4ZWN1dGVTUUxBc3luY09wdGlv
bmFsUmV0dXJuVmFsdWVzIiwKLSAgICAgICAgICAgICJhc3luYyI6IHRydWUsCi0gICAgICAgICAg
ICAicGFyYW1ldGVycyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRhdGFiYXNlSWQi
LCAiJHJlZiI6ICJEYXRhYmFzZUlkIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicXVl
cnkiLCAidHlwZSI6ICJzdHJpbmciIH0KLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAicmV0
dXJucyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUi
OiAiYXJyYXkiLCAib3B0aW9uYWwiOiB0cnVlLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIg
fSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmci
LCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3Rh
bXAiLCAidHlwZSI6ICJudW1iZXIiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0cnVl
IH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55Iiwg
Im9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJ
ZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVycm9yIiwgIm9wdGlvbmFsIjog
dHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6
ICJQcmltYXJ5Q29sb3JzIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwgIiRyZWYiOiAiQ29sb3JMaXN0IiwgIm9wdGlvbmFs
IjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBl
IjogInN0cmluZyIsICJlbnVtIjogWyJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93IiwgImJsYWNr
Il0sICJvcHRpb25hbCI6IHRydWUgfQotICAgICAgICAgICAgXQotICAgICAgICB9LAotICAgICAg
ICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJleGVjdXRlU1FMU3luYyIsCi0gICAgICAgICAgICAi
cGFyYW1ldGVycyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRhdGFiYXNlSWQiLCAi
JHJlZiI6ICJEYXRhYmFzZUlkIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicXVlcnki
LCAidHlwZSI6ICJzdHJpbmciIH0KLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAicmV0dXJu
cyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAi
YXJyYXkiLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAotICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciIH0sCi0gICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiIH0sCi0gICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiIH0sCi0gICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiB9LAotICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiIH0sCi0gICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVycm9yIiB9LAotICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwgIiRyZWYiOiAiQ29sb3JMaXN0
IiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6ICJQ
cmltYXJ5Q29sb3JzIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJpbnRDb2xvciIs
ICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93Iiwg
ImJsYWNrIl0gfQotICAgICAgICAgICAgXQotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAg
ICAgICAibmFtZSI6ICJleGVjdXRlU1FMQXN5bmMiLAotICAgICAgICAgICAgImFzeW5jIjogdHJ1
ZSwKLSAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiIH0sCi0gICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJxdWVyeSIsICJ0eXBlIjogInN0cmluZyIgfQotICAgICAgICAgICAgXSwKLSAg
ICAgICAgICAgICJyZXR1cm5zIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1u
TmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0s
Ci0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIgfSwK
LSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIg
fSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIg
fSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiIH0s
Ci0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJh
c2VJZCIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAi
RXJyb3IiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVm
IjogIlByaW1hcnlDb2xvcnMiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJhbHRlcm5h
dGVDb2xvcnMiLCAiJHJlZiI6ICJDb2xvckxpc3QiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbImN5YW4iLCAibWFn
ZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0KLSAg
ICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFt
ZXRlcnMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9nZW5lcmljL2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5q
c29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNjFkNTdkODIwZC4uMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24K
KysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBACi17Ci0gICAgImRvbWFpbiI6ICJEYXRhYmFz
ZSIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiRGF0YWJh
c2VJZCIsCi0gICAgICAgICAgICAidHlwZSI6ICJpbnRlZ2VyIiwKLSAgICAgICAgICAgICJkZXNj
cmlwdGlvbiI6ICJVbmlxdWUgaWRlbnRpZmllciBvZiBEYXRhYmFzZSBvYmplY3QuIgotICAgICAg
ICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiUHJpbWFyeUNvbG9ycyIsCi0gICAg
ICAgICAgICAidHlwZSI6ICJzdHJpbmciLAotICAgICAgICAgICAgImVudW0iOiBbInJlZCIsICJn
cmVlbiIsICJibHVlIl0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjog
IkNvbG9yTGlzdCIsCi0gICAgICAgICAgICAidHlwZSI6ICJhcnJheSIsCi0gICAgICAgICAgICAi
aXRlbXMiOiB7ICIkcmVmIjogIlByaW1hcnlDb2xvcnMiIH0KLSAgICAgICAgfSwKLSAgICAgICAg
ewotICAgICAgICAgICAgImlkIjogIkVycm9yIiwKLSAgICAgICAgICAgICJ0eXBlIjogIm9iamVj
dCIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRGF0YWJhc2UgZXJyb3IuIiwKLSAgICAg
ICAgICAgICJwcm9wZXJ0aWVzIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibWVzc2Fn
ZSIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBtZXNzYWdlLiIgfSwK
LSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvZGUiLCAidHlwZSI6ICJpbnRlZ2VyIiwgImRl
c2NyaXB0aW9uIjogIkVycm9yIGNvZGUuIiB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0KLSAg
ICBdLAotICAgICJjb21tYW5kcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAi
ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyIsCi0gICAgICAgICAgICAicGFyYW1ldGVycyI6
IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJy
YXkiLCAib3B0aW9uYWwiOiB0cnVlLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAot
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0
aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAi
dHlwZSI6ICJudW1iZXIiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0g
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiwgIm9wdGlv
bmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIk
cmVmIjogIkRhdGFiYXNlSWQiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVycm9yIiwgIm9wdGlvbmFsIjogdHJ1ZSB9
LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6ICJQcmlt
YXJ5Q29sb3JzIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAiYWx0ZXJuYXRlQ29sb3JzIiwgIiRyZWYiOiAiQ29sb3JMaXN0IiwgIm9wdGlvbmFsIjogdHJ1
ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0
cmluZyIsICJlbnVtIjogWyJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93IiwgImJsYWNrIl0sICJv
cHRpb25hbCI6IHRydWUgfQotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJyZXR1cm5zIjog
WwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJh
eSIsICJvcHRpb25hbCI6IHRydWUsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCi0g
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRp
b25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0
eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJu
YW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiLCAib3B0aW9u
YWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRy
ZWYiOiAiRGF0YWJhc2VJZCIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7
ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiLCAib3B0aW9uYWwiOiB0cnVlIH0s
Ci0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVmIjogIlByaW1h
cnlDb2xvcnMiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJhbHRlcm5hdGVDb2xvcnMiLCAiJHJlZiI6ICJDb2xvckxpc3QiLCAib3B0aW9uYWwiOiB0cnVl
IH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3Ry
aW5nIiwgImVudW0iOiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSwgIm9w
dGlvbmFsIjogdHJ1ZSB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAg
ICAgICAgICAgICJuYW1lIjogImV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyIsCi0gICAgICAg
ICAgICAicGFyYW1ldGVycyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5h
bWVzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAot
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciIH0sCi0g
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiIH0s
Ci0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiIH0s
Ci0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiB9LAot
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNl
SWQiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVy
cm9yIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6
ICJQcmltYXJ5Q29sb3JzIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYWx0ZXJuYXRl
Q29sb3JzIiwgIiRyZWYiOiAiQ29sb3JMaXN0IiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJjeWFuIiwgIm1hZ2Vu
dGEiLCAieWVsbG93IiwgImJsYWNrIl0gfQotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJy
ZXR1cm5zIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlw
ZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCi0gICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIgfSwKLSAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIgfSwKLSAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIgfSwKLSAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiIH0sCi0gICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIgfSwKLSAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiIH0sCi0g
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlD
b2xvcnMiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJhbHRlcm5hdGVDb2xvcnMiLCAi
JHJlZiI6ICJDb2xvckxpc3QiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcmludENv
bG9yIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxs
b3ciLCAiYmxhY2siXSB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0KLSAgICBdCi19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2Vu
ZXJpYy9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZGVmaW5pdGlvbnMtd2l0aC1t
YWMtcGxhdGZvcm0uanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODE3ZjEzNWVl
NWEuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKysr
IC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi17Ci0gICAgImRvbWFpbiI6ICJOZXR3b3JrIiwK
LSAgICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJOZXR3b3JrRXJy
b3IiLAotICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKLSAgICAgICAgICAgICJwbGF0Zm9y
bSI6ICJtYWNvcyIsCi0gICAgICAgICAgICAicHJvcGVydGllcyI6IFsKLSAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogIm1lc3NhZ2UiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAi
RXJyb3IgbWVzc2FnZS4iIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2RlIiwgInR5
cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBjb2RlLiIgfQotICAgICAgICAg
ICAgXQotICAgICAgICB9Ci0gICAgXSwKLSAgICAiY29tbWFuZHMiOiBbCi0gICAgICAgIHsKLSAg
ICAgICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJjZSIsCi0gICAgICAgICAgICAicGxhdGZvcm0i
OiAibWFjb3MiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2Ug
aW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBj
cm9zcyBvcmlnaW4gY2hlY2tzLiIKLSAgICAgICAgfQotICAgIF0sCi0gICAgImV2ZW50cyI6IFsK
LSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAicmVzb3VyY2VMb2FkZWQiLAotICAgICAg
ICAgICAgInBsYXRmb3JtIjogIm1hY29zIiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJB
IHJlc291cmNlIHdhcyBsb2FkZWQuIgotICAgICAgICB9Ci0gICAgXQotfQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZG9t
YWluLWRlYnVnZ2FibGVUeXBlcy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZmViMGM5YTI3ZS4uMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZG9t
YWluLWRlYnVnZ2FibGVUeXBlcy5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1b
Ci17Ci0gICAgImRvbWFpbiI6ICJEb21haW4iLAotICAgICJkZWJ1Z2dhYmxlVHlwZXMiOiBbIndl
Yi1wYWdlIl0sCi0gICAgImNvbW1hbmRzIjogW3sibmFtZSI6ICJDb21tYW5kIn1dLAotICAgICJl
dmVudHMiOiBbeyJuYW1lIjogIkV2ZW50In1dCi19Ci1dCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9kb21haW4tdGFyZ2V0
VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbiBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2RvbWFpbi10YXJnZXRUeXBl
LW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBmNjJmYjM4YmE3OC4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZG9tYWluLXRhcmdldFR5cGUt
bWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw4
ICswLDAgQEAKLVsKLXsKLSAgICAiZG9tYWluIjogIkRvbWFpbiIsCi0gICAgImRlYnVnZ2FibGVU
eXBlcyI6IFsicGFnZSJdLAotICAgICJjb21tYW5kcyI6IFt7Im5hbWUiOiAiQ29tbWFuZCIsICJ0
YXJnZXRUeXBlcyI6IFsicGFnZSIsICJ3b3JrZXIiXX1dLAotICAgICJldmVudHMiOiBbeyJuYW1l
IjogIkV2ZW50In1dCi19Ci1dCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9kb21haW4tdGFyZ2V0VHlwZXMuanNvbiBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2RvbWFp
bi10YXJnZXRUeXBlcy5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YTZlNDBk
NjBhZC4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZG9tYWluLXRhcmdldFR5cGVzLmpzb24KKysrIC9kZXYvbnVs
bApAQCAtMSw4ICswLDAgQEAKLVsKLXsKLSAgICAiZG9tYWluIjogIkRvbWFpbiIsCi0gICAgInRh
cmdldFR5cGVzIjogWyJwYWdlIl0sCi0gICAgImNvbW1hbmRzIjogW3sibmFtZSI6ICJDb21tYW5k
IiwgInRhcmdldFR5cGVzIjogWyJwYWdlIl19XSwKLSAgICAiZXZlbnRzIjogW3sibmFtZSI6ICJF
dmVudCIsICJ0YXJnZXRUeXBlcyI6IFsicGFnZSJdfV0KLX0KLV0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2RvbWFpbnMt
d2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1h
bmQtc2l6ZXMuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTRhOGVjYjE3NmQu
LjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgor
KysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLVsKLXsKLSAgICAiZG9tYWluIjogIk5ldHdv
cmsxIiwKLSAgICAiY29tbWFuZHMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjog
ImxvYWRSZXNvdXJjZTEiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVz
b3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0
aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKLSAgICAgICAgfQotICAgIF0KLX0sCi17Ci0gICAg
ImRvbWFpbiI6ICJOZXR3b3JrMiIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7Ci0gICAgICAg
ICAgICAiaWQiOiAiTG9hZGVySWQiLAotICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKLSAg
ICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgbG9hZGVyIGlkZW50aWZpZXIuIgotICAg
ICAgICB9Ci0gICAgXQotfSwKLXsKLSAgICAiZG9tYWluIjogIk5ldHdvcmszIiwKLSAgICAiY29t
bWFuZHMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJjZTEi
LAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNv
bnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmln
aW4gY2hlY2tzLiIKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAi
bG9hZFJlc291cmNlMiIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9hZHMgYSByZXNv
dXJjZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFnZSB3aXRo
b3V0IGNyb3NzIG9yaWdpbiBjaGVja3MuIgotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAg
ICAgICAibmFtZSI6ICJsb2FkUmVzb3VyY2UzIiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6
ICJMb2FkcyBhIHJlc291cmNlIGluIHRoZSBjb250ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGluc3Bl
Y3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNoZWNrcy4iCi0gICAgICAgIH0sCi0gICAg
ICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJjZTQiLAotICAgICAgICAgICAg
ImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFt
ZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKLSAg
ICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAibG9hZFJlc291cmNlNSIs
Ci0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9hZHMgYSByZXNvdXJjZSBpbiB0aGUgY29u
dGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFnZSB3aXRob3V0IGNyb3NzIG9yaWdp
biBjaGVja3MuIgotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJs
b2FkUmVzb3VyY2U2IiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBhIHJlc291
cmNlIGluIHRoZSBjb250ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGluc3BlY3RlZCBwYWdlIHdpdGhv
dXQgY3Jvc3Mgb3JpZ2luIGNoZWNrcy4iCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAg
ICAgICJuYW1lIjogImxvYWRSZXNvdXJjZTciLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjog
IkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVj
dGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKLSAgICAgICAgfQotICAgIF0K
LX0KLV0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL2VudW0tdmFsdWVzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9lbnVtLXZhbHVlcy5qc29uCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZGFkNjFkZjdjOS4uMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZW51bS12
YWx1ZXMuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLXsiZG9tYWlucyI6Wwot
ewotICAgICJkb21haW4iOiAiVHlwZURvbWFpbiIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7
Ci0gICAgICAgICAgICAiaWQiOiAiVHlwZURvbWFpbkVudW0iLAotICAgICAgICAgICAgInR5cGUi
OiAic3RyaW5nIiwKLSAgICAgICAgICAgICJlbnVtIjogWyJzaGFyZWQiLCAicmVkIiwgImdyZWVu
IiwgImJsdWUiXQotICAgICAgICB9Ci0gICAgXQotfSwKLXsKLSAgICAiZG9tYWluIjogIkNvbW1h
bmREb21haW4iLAotICAgICJjb21tYW5kcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgIm5h
bWUiOiAiY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUiLAotICAgICAgICAgICAgInBhcmFtZXRl
cnMiOiBbXSwKLSAgICAgICAgICAgICJyZXR1cm5zIjogWwotICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAicmV0dXJuVmFsdWUiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsic2hhcmVkIiwg
ImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciXSB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0K
LSAgICBdCi19LAotewotICAgICJkb21haW4iOiAiRXZlbnREb21haW4iLAotICAgICJldmVudHMi
OiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImV2ZW50V2l0aEVudW1QYXJhbWV0
ZXIiLAotICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJwYXJhbWV0ZXIiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsic2hhcmVkIiwgImJs
YWNrIiwgIndoaXRlIl0gfQotICAgICAgICAgICAgXQotICAgICAgICB9Ci0gICAgXQotfQotXX0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9nZW5lcmljL2V2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBl
Lmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2Vu
ZXJpYy9ldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29u
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZGZlZDQxZWQyMS4uMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVy
aWMvZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgor
KysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotWwotewotICAgICJkb21haW4iOiAiRG9tYWlu
IiwKLSAgICAiZGVidWdnYWJsZVR5cGVzIjogWyJwYWdlIl0sCi0gICAgImNvbW1hbmRzIjogW3si
bmFtZSI6ICJDb21tYW5kIn1dLAotICAgICJldmVudHMiOiBbeyJuYW1lIjogIkV2ZW50IiwgInRh
cmdldFR5cGVzIjogWyJwYWdlIiwgIndvcmtlciJdfV0KLX0KLV0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V2ZW50cy13
aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRl
cnMuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2FiYmYxMGI4MzYuLjAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9nZW5lcmljL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgorKysgL2Rldi9u
dWxsCkBAIC0xLDU5ICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKLSAgICAi
dHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJEYXRhYmFzZUlkIiwKLSAg
ICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAi
VW5pcXVlIGlkZW50aWZpZXIgb2YgRGF0YWJhc2Ugb2JqZWN0LiIKLSAgICAgICAgfSwKLSAgICAg
ICAgewotICAgICAgICAgICAgImlkIjogIlByaW1hcnlDb2xvcnMiLAotICAgICAgICAgICAgInR5
cGUiOiAic3RyaW5nIiwKLSAgICAgICAgICAgICJ2YWx1ZXMiOiBbInJlZCIsICJncmVlbiIsICJi
bHVlIl0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIkNvbG9yTGlz
dCIsCi0gICAgICAgICAgICAidHlwZSI6ICJhcnJheSIsCi0gICAgICAgICAgICAiaXRlbXMiOiB7
ICIkcmVmIjogIlByaW1hcnlDb2xvcnMiIH0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAg
ICAgICAgImlkIjogIkVycm9yIiwKLSAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCi0gICAg
ICAgICAgICAiZGVzY3JpcHRpb24iOiAiRGF0YWJhc2UgZXJyb3IuIiwKLSAgICAgICAgICAgICJw
cm9wZXJ0aWVzIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibWVzc2FnZSIsICJ0eXBl
IjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBtZXNzYWdlLiIgfSwKLSAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogImNvZGUiLCAidHlwZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9u
IjogIkVycm9yIGNvZGUuIiB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0KLSAgICBdLAotICAg
ICJldmVudHMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImRpZEV4ZWN1dGVP
cHRpb25hbFBhcmFtZXRlcnMiLAotICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCi0gICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIm9wdGlv
bmFsIjogdHJ1ZSwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwKLSAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1
ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVt
YmVyIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFs
dWVzIiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIsICJvcHRpb25hbCI6IHRydWUg
fSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAiRXJyb3Ii
LCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5D
b2xvciIsICIkcmVmIjogIlByaW1hcnlDb2xvcnMiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJhbHRlcm5hdGVDb2xvcnMiLCAiJHJlZiI6ICJDb2xvckxp
c3QiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcmlu
dENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgInZhbHVlcyI6IFsiY3lhbiIsICJtYWdlbnRhIiwg
InllbGxvdyIsICJibGFjayJdLCAib3B0aW9uYWwiOiB0cnVlIH0KLSAgICAgICAgICAgIF0KLSAg
ICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiZGlkRXhlY3V0ZU5vT3B0
aW9uYWxQYXJhbWV0ZXJzIiwKLSAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwotICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6
IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3Rl
cyIsICJ0eXBlIjogInN0cmluZyIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVz
dGFtcCIsICJ0eXBlIjogIm51bWJlciIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZh
bHVlcyIsICJ0eXBlIjogIm9iamVjdCIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBh
eWxvYWQiLCAidHlwZSI6ICJhbnkiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzcWxF
cnJvciIsICIkcmVmIjogIkVycm9yIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2Ny
ZWVuQ29sb3IiLCAiJHJlZiI6ICJQcmltYXJ5Q29sb3JzIiB9LAotICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwgIiRyZWYiOiAiQ29sb3JMaXN0IiB9LAotICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmluZyIsICJ2YWx1
ZXMiOiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSB9Ci0gICAgICAgICAg
ICBdCi0gICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9jb21tYW5kLXRhcmdl
dFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tcmVzdWx0IGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQv
Y29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJl
c3VsdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDMxM2ZhOTE1MWUuLjAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL2V4cGVjdGVkL2NvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdn
YWJsZVR5cGUuanNvbi1yZXN1bHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMDYzICswLDAgQEAKLSMj
IyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRl
YnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotLy8gRG9tYWluCi1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJEb21haW4i
LCBbInBhZ2UiLCAid29ya2VyIl0pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQo
IkRvbWFpbi5Db21tYW5kIiwgbnVsbCwgW10sIFtdKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0
ZXJFdmVudCgiRG9tYWluLkV2ZW50IiwgbnVsbCwgW10pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdp
c3RlckRvbWFpbkRpc3BhdGNoZXIgPSBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRGlzcGF0Y2hl
ci5iaW5kKEluc3BlY3RvckJhY2tlbmQsICJEb21haW4iKTsKLUluc3BlY3RvckJhY2tlbmQuYWN0
aXZhdGVEb21haW4oIkRvbWFpbiIsIFsicGFnZSJdKTsKLSMjIyBFbmQgRmlsZTogSW5zcGVjdG9y
QmFja2VuZENvbW1hbmRzLmpzCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2Vu
ZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5k
LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQotI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbFR5cGVzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVu
ZFJvdXRlci5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgQWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIo
UmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0
Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KLSAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFj
a2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgp
OyB9Ci1wcml2YXRlOgotICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlz
cGF0Y2hlcjsKLX07Ci0KLQotY2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIg
OiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZpcnR1
YWwgfkFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKCkgeyB9Ci0gICAgdmlydHVhbCB2
b2lkIENvbW1hbmQobG9uZyBjYWxsSWQpID0gMDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgotCi0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
Ci0jIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dh
YmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10eXBl
ZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQotY2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXI7Ci0j
ZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0KLWNsYXNz
IERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB2
b2lkIENvbW1hbmQoRXJyb3JTdHJpbmcmKSA9IDA7Ci1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB+
RG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7Ci19OwotCi1jbGFzcyBEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hl
ciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gY3Jl
YXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7
Ci0gICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2Qs
IFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkgZmluYWw7Ci1wcml2YXRlOgotICAgIHZvaWQg
Q29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJz
KTsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLXB1YmxpYzoK
LSAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlRG9tYWluQmFja2VuZERp
c3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0g
YWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQotcHJpdmF0ZToKLSAgICBBbHRlcm5hdGVEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlciogbV9hbHRlcm5hdGVEaXNwYXRjaGVyIHsgbnVsbHB0ciB9OwotI2VuZGlm
Ci1wcml2YXRlOgotICAgIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVy
JiwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgRG9tYWluQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50IHsgbnVsbHB0ciB9OwotfTsKLQotfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRl
YnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hl
cnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVy
Lmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0
cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNpZiBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXJzLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLURv
bWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6fkRvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlcigpIHsgfQotCi1SZWY8RG9tYWluQmFja2VuZERpc3BhdGNoZXI+IERvbWFpbkJhY2tlbmRE
aXNwYXRjaGVyOjpjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBE
b21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQotewotICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2Vu
dCkpOwotfQotCi1Eb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6RG9tYWluQmFja2VuZERpc3BhdGNo
ZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBEb21haW5CYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXIqIGFnZW50KQotICAgIDogU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNo
ZXIoYmFja2VuZERpc3BhdGNoZXIpCi0gICAgLCBtX2FnZW50KGFnZW50KQotewotICAgIG1fYmFj
a2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbigiRG9tYWluIl9zLCB0
aGlzKTsKLX0KLQotdm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBy
ZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3Nh
Z2UpCi17Ci0gICAgUmVmPERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsK
LQotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0
T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRlcnMpOwotCi0gICAgaWYgKG1ldGhvZCA9PSAiQ29t
bWFuZCIpCi0gICAgICAgIENvbW1hbmQocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsK
LSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJy
b3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi4iICsgbWV0aG9k
ICsgIicgd2FzIG5vdCBmb3VuZCIpOwotfQotCi12b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVy
OjpDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQotewotI2lm
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotICAgIGlmIChtX2FsdGVy
bmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5Db21tYW5k
KHJlcXVlc3RJZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIEVycm9y
U3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVj
dDo6Y3JlYXRlKCk7Ci0gICAgbV9hZ2VudC0+Q29tbWFuZChlcnJvcik7Ci0KLSAgICBpZiAoIWVy
cm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2Uo
cmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1f
YmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6
OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dh
YmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1
ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0K
LW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBGcm9udGVuZFJvdXRlcjsKLQotY2xhc3Mg
RG9tYWluRnJvbnRlbmREaXNwYXRjaGVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
LXB1YmxpYzoKLSAgICBEb21haW5Gcm9udGVuZERpc3BhdGNoZXIoRnJvbnRlbmRSb3V0ZXImIGZy
b250ZW5kUm91dGVyKSA6IG1fZnJvbnRlbmRSb3V0ZXIoZnJvbnRlbmRSb3V0ZXIpIHsgfQotICAg
IHZvaWQgRXZlbnQoKTsKLXByaXZhdGU6Ci0gICAgRnJvbnRlbmRSb3V0ZXImIG1fZnJvbnRlbmRS
b3V0ZXI7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVz
dEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlz
cGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZC10
YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi12b2lkIERvbWFpbkZyb250ZW5kRGlz
cGF0Y2hlcjo6RXZlbnQoKQotewotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0g
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRo
b2QiX3MsICJEb21haW4uRXZlbnQiX3MpOwotCi0gICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZl
bnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2Fi
bGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2Nv
bFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFtZXNwYWNlIEluc3Bl
Y3RvciB7Ci0KLQotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotCi0KLQotCi0KLQotfSAv
LyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sT2JqZWN0cy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5k
LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLQotI2luY2x1ZGUgPHd0Zi9PcHRpb25h
bC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3Rv
ciB7Ci0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2Nv
bAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xPYmplY3RzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3Bh
dGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdl
dFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRh
aW5QdHIuaD4KLQotQHByb3RvY29sIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI7Ci0K
LW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLWNsYXNzIE9iakNJbnNwZWN0b3JEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0
Y2hlciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgT2JqQ0lu
c3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFp
bkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KLSAgICB2b2lkIENv
bW1hbmQobG9uZyByZXF1ZXN0SWQpIGZpbmFsOwotcHJpdmF0ZToKLSAgICBSZXRhaW5QdHI8aWQ8
VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7Ci19OwotCi19IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5k
RGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3Bh
dGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZC10YXJn
ZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9y
dCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlICJUZXN0UHJv
dG9jb2xJbnRlcm5hbC5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5o
IgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Igewot
Ci12b2lkIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25n
IHJlcXVlc3RJZCkKLXsKLSAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpA
c2VsZWN0b3IoQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgewot
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJ
ZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi5Db21tYW5kJyB3
YXMgbm90IGZvdW5kIl9zKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRp
bmdFcnJvcnMoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlkIGVycm9yQ2FsbGJh
Y2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5y
ZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVy
cm9yLCBlcnJvcik7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJy
b3JzKCk7Ci0gICAgfTsKLQotICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57Ci0gICAgICAgIGJh
Y2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpTT046Ok9iamVjdDo6
Y3JlYXRlKCksIGZhbHNlKTsKLSAgICB9OwotCi0gICAgW21fZGVsZWdhdGUgQ29tbWFuZFdpdGhF
cnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFj
a107Ci19Ci0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xDb25maWd1cmF0aW9uLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBj
b21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8V2ViSW5z
cGVjdG9yL1Rlc3RQcm90b2NvbC5oPgotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVm
YXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0
Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluLCBzZXR0ZXI9c2V0RG9tYWluSGFuZGxlcjop
IGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IGRvbWFpbkhhbmRsZXI7Ci1AcHJv
cGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50
RGlzcGF0Y2hlciAqZG9tYWluRXZlbnREaXNwYXRjaGVyOwotQGVuZAotCi0KLSMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xDb25maWd1cmF0aW9uLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
Y29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24uaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwu
aCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KLSNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0j
aW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLQot
dXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24KLXsKLSAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9j
b250cm9sbGVyOwotICAgIGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IF9kb21h
aW5IYW5kbGVyOwotICAgIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAq
X2RvbWFpbkV2ZW50RGlzcGF0Y2hlcjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29u
dHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCi17Ci0g
ICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBu
aWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIpOwotICAgIF9jb250cm9sbGVyID0gY29udHJvbGxl
cjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgW19kb21h
aW5IYW5kbGVyIHJlbGVhc2VdOwotICAgIFtfZG9tYWluRXZlbnREaXNwYXRjaGVyIHJlbGVhc2Vd
OwotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAodm9pZClzZXREb21haW5IYW5kbGVyOihp
ZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiloYW5kbGVyCi17Ci0gICAgaWYgKGhh
bmRsZXIgPT0gX2RvbWFpbkhhbmRsZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIFtfZG9tYWlu
SGFuZGxlciByZWxlYXNlXTsKLSAgICBfZG9tYWluSGFuZGxlciA9IFtoYW5kbGVyIHJldGFpbl07
Ci0KLSAgICBhdXRvIGFsdGVybmF0ZURpc3BhdGNoZXIgPSBtYWtlVW5pcXVlPE9iakNJbnNwZWN0
b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7Ci0gICAgYXV0byBhbHRlcm5hdGVB
Z2VudCA9IG1ha2VVbmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8RG9tYWluQmFja2Vu
ZERpc3BhdGNoZXIsIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyPj4oIkRvbWFpbiJf
cywgKl9jb250cm9sbGVyLCBXVEZNb3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIpKTsKLSAgICBfY29u
dHJvbGxlci0+YXBwZW5kRXh0cmFBZ2VudChXVEZNb3ZlKGFsdGVybmF0ZUFnZW50KSk7Ci19Ci0K
LS0gKGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+KWRvbWFpbkhhbmRsZXIKLXsK
LSAgICByZXR1cm4gX2RvbWFpbkhhbmRsZXI7Ci19Ci0KLS0gKFRlc3RQcm90b2NvbERvbWFpbkRv
bWFpbkV2ZW50RGlzcGF0Y2hlciAqKWRvbWFpbkV2ZW50RGlzcGF0Y2hlcgotewotICAgIGlmICgh
X2RvbWFpbkV2ZW50RGlzcGF0Y2hlcikKLSAgICAgICAgX2RvbWFpbkV2ZW50RGlzcGF0Y2hlciA9
IFtbVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyIGFsbG9jXSBpbml0V2l0
aENvbnRyb2xsZXI6X2NvbnRyb2xsZXJdOwotICAgIHJldHVybiBfZG9tYWluRXZlbnREaXNwYXRj
aGVyOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0
aW9uLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1t
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZC10YXJnZXRUeXBlLW1h
dGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0K
LSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8d3RmL0pT
T05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGltcGxlbWVudGF0
aW9uIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlcgotewotICAgIEF1Z21l
bnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci19Ci0KLS0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciop
Y29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQot
ICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBfY29udHJv
bGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpRXZlbnQK
LXsKLSAgICBjb25zdCBGcm9udGVuZFJvdXRlciYgcm91dGVyID0gX2NvbnRyb2xsZXItPmZyb250
ZW5kUm91dGVyKCk7Ci0KLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9z
LCAiRG9tYWluLkV2ZW50Il9zKTsKLSAgICByb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50
b0pTT05TdHJpbmcoKSk7Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bEV2ZW50RGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZC10YXJnZXRUeXBlLW1hdGNo
aW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotCi0j
aW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+Ci0KLQotCi0KLXR5
cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbFBsYXRmb3JtKSB7Ci0gICAgVGVz
dFByb3RvY29sUGxhdGZvcm1BbGwsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljLAot
ICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFj
T1MsCi19OwotCi0KLQotCi0KLUBwcm90b2NvbCBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5k
bGVyIDxOU09iamVjdD4KLUBvcHRpb25hbAotLSAodm9pZClDb21tYW5kV2l0aEVycm9yQ2FsbGJh
Y2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFj
azoodm9pZCheKSh2b2lkKSlzdWNjZXNzQ2FsbGJhY2s7Ci1AZW5kCi0KLV9fYXR0cmlidXRlX18o
KHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xEb21haW5E
b21haW5FdmVudERpc3BhdGNoZXIgOiBOU09iamVjdAotLSAodm9pZClFdmVudDsKLUBlbmQKLQot
Ci0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmpl
Y3RzLmg+Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbEludGVybmFsLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVz
dFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgot
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+
Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbERv
bWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAoUHJpdmF0ZSkKLS0gKGluc3RhbmNldHlwZSlpbml0
V2l0aENvbnRyb2xsZXI6KEluc3BlY3Rvcjo6QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVy
Kiljb250cm9sbGVyOwotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJu
YWwuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hp
bmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0IDxXZWJJ
bnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNw
ZWN0b3IgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+Ci1PcHRpb25hbDxPYmpD
RW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKLQotaW5s
aW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFBsYXRmb3JtIHZhbHVlKQot
ewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1BbGw6
Ci0gICAgICAgIHJldHVybiAiYWxsIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1H
ZW5lcmljOgotICAgICAgICByZXR1cm4gImdlbmVyaWMiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9j
b2xQbGF0Zm9ybUlPUzoKLSAgICAgICAgcmV0dXJuICJpb3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJv
dG9jb2xQbGF0Zm9ybU1hY09TOgotICAgICAgICByZXR1cm4gIm1hY29zIl9zOwotICAgIH0KLX0K
LQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFBsYXRmb3JtPiBmcm9t
UHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0g
ImFsbCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDsKLSAgICBpZiAo
dmFsdWUgPT0gImdlbmVyaWMiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1H
ZW5lcmljOwotICAgIGlmICh2YWx1ZSA9PSAiaW9zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90
b2NvbFBsYXRmb3JtSU9TOwotICAgIGlmICh2YWx1ZSA9PSAibWFjb3MiKQotICAgICAgICByZXR1
cm4gVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0Owot
fQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZC10
YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucy5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRl
c3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2Nv
bEpTT05PYmplY3RQcml2YXRlLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQot
Ci0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2Fi
bGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09O
T2JqZWN0UHJpdmF0ZS5oPgotI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQgPHd0
Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvY29tbWFuZHMt
d2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9jb21tYW5kcy13aXRoLWFz
eW5jLWF0dHJpYnV0ZS5qc29uLXJlc3VsdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ZmM1YzQxZGI1M2EuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtYXN5bmMt
YXR0cmlidXRlLmpzb24tcmVzdWx0CisrKyAvZGV2L251bGwKQEAgLTEsMTgwOSArMCwwIEBACi0j
IyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0vLyBEYXRhYmFzZQot
SW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiRGF0YWJhc2UiLCBudWxsKTsKLUluc3Bl
Y3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJEYXRhYmFzZS5QcmltYXJ5Q29sb3JzIiwge1JlZDog
InJlZCIsIEdyZWVuOiAiZ3JlZW4iLCBCbHVlOiAiYmx1ZSJ9KTsKLUluc3BlY3RvckJhY2tlbmQu
cmVnaXN0ZXJDb21tYW5kKCJEYXRhYmFzZS5leGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFs
dWVzIiwgbnVsbCwgW3sibmFtZSI6ICJkYXRhYmFzZUlkIiwgInR5cGUiOiAibnVtYmVyIn0sIHsi
bmFtZSI6ICJxdWVyeSIsICJ0eXBlIjogInN0cmluZyJ9XSwgWyJjb2x1bW5OYW1lcyIsICJub3Rl
cyIsICJ0aW1lc3RhbXAiLCAidmFsdWVzIiwgInBheWxvYWQiLCAiZGF0YWJhc2VJZCIsICJzcWxF
cnJvciIsICJzY3JlZW5Db2xvciIsICJhbHRlcm5hdGVDb2xvcnMiLCAicHJpbnRDb2xvciJdKTsK
LUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJEYXRhYmFzZS5leGVjdXRlU1FMQXN5
bmNPcHRpb25hbFJldHVyblZhbHVlcyIsIG51bGwsIFt7Im5hbWUiOiAiZGF0YWJhc2VJZCIsICJ0
eXBlIjogIm51bWJlciJ9LCB7Im5hbWUiOiAicXVlcnkiLCAidHlwZSI6ICJzdHJpbmcifV0sIFsi
Y29sdW1uTmFtZXMiLCAibm90ZXMiLCAidGltZXN0YW1wIiwgInZhbHVlcyIsICJwYXlsb2FkIiwg
ImRhdGFiYXNlSWQiLCAic3FsRXJyb3IiLCAic2NyZWVuQ29sb3IiLCAiYWx0ZXJuYXRlQ29sb3Jz
IiwgInByaW50Q29sb3IiXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiRGF0
YWJhc2UuZXhlY3V0ZVNRTFN5bmMiLCBudWxsLCBbeyJuYW1lIjogImRhdGFiYXNlSWQiLCAidHlw
ZSI6ICJudW1iZXIifSwgeyJuYW1lIjogInF1ZXJ5IiwgInR5cGUiOiAic3RyaW5nIn1dLCBbImNv
bHVtbk5hbWVzIiwgIm5vdGVzIiwgInRpbWVzdGFtcCIsICJ2YWx1ZXMiLCAicGF5bG9hZCIsICJk
YXRhYmFzZUlkIiwgInNxbEVycm9yIiwgImFsdGVybmF0ZUNvbG9ycyIsICJzY3JlZW5Db2xvciIs
ICJwcmludENvbG9yIl0pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIkRhdGFi
YXNlLmV4ZWN1dGVTUUxBc3luYyIsIG51bGwsIFt7Im5hbWUiOiAiZGF0YWJhc2VJZCIsICJ0eXBl
IjogIm51bWJlciJ9LCB7Im5hbWUiOiAicXVlcnkiLCAidHlwZSI6ICJzdHJpbmcifV0sIFsiY29s
dW1uTmFtZXMiLCAibm90ZXMiLCAidGltZXN0YW1wIiwgInZhbHVlcyIsICJwYXlsb2FkIiwgImRh
dGFiYXNlSWQiLCAic3FsRXJyb3IiLCAic2NyZWVuQ29sb3IiLCAiYWx0ZXJuYXRlQ29sb3JzIiwg
InByaW50Q29sb3IiXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRGF0YWJhc2VEaXNwYXRj
aGVyID0gSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRpc3BhdGNoZXIuYmluZChJbnNwZWN0b3JC
YWNrZW5kLCAiRGF0YWJhc2UiKTsKLUluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkRh
dGFiYXNlIiwgbnVsbCk7Ci0jIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5q
cwotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRy
aWJ1dGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0j
cHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Igewot
Ci1jbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBz
ZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hl
cikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQotICAgIEJh
Y2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFj
a2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPEJhY2tlbmREaXNw
YXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwotfTsKLQotCi1jbGFzcyBBbHRlcm5hdGVEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVy
IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5BbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVyKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXMobG9uZyBjYWxsSWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1
ZXJ5KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJu
VmFsdWVzKGxvbmcgY2FsbElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9x
dWVyeSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMU3luYyhsb25nIGNhbGxJZCwg
aW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgZXhlY3V0ZVNRTEFzeW5jKGxvbmcgY2FsbElkLCBpbnQgaW5fZGF0YWJhc2VJZCwg
Y29uc3QgU3RyaW5nJiBpbl9xdWVyeSkgPSAwOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
LSMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5j
bHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmlu
ZzsKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotY2xhc3Mg
QWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjsKLSNlbmRpZiAvLyBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQotY2xhc3MgRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXIgewotcHVibGljOgotICAgIC8vIE5hbWVkIGFmdGVyIHBhcmFtZXRlciAn
cHJpbnRDb2xvcicgd2hpbGUgZ2VuZXJhdGluZyBjb21tYW5kL2V2ZW50IGV4ZWN1dGVTUUxTeW5j
T3B0aW9uYWxSZXR1cm5WYWx1ZXMuCi0gICAgZW51bSBjbGFzcyBQcmludENvbG9yIHsKLSAgICAg
ICAgQ3lhbiA9IDMsCi0gICAgICAgIE1hZ2VudGEgPSA0LAotICAgICAgICBZZWxsb3cgPSA1LAot
ICAgICAgICBCbGFjayA9IDYsCi0gICAgfTsgLy8gZW51bSBjbGFzcyBQcmludENvbG9yCi0gICAg
dmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMoRXJyb3JTdHJp
bmcmLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSwgUmVmUHRyPEpT
T046OkFycmF5T2Y8U3RyaW5nPj4mIG9wdF9vdXRfY29sdW1uTmFtZXMsIE9wdGlvbmFsPFN0cmlu
Zz4mIG9wdF9vdXRfbm90ZXMsIE9wdGlvbmFsPGRvdWJsZT4mIG9wdF9vdXRfdGltZXN0YW1wLCBP
cHRpb25hbDxKU09OOjpPYmplY3Q+JiBvcHRfb3V0X3ZhbHVlcywgT3B0aW9uYWw8SlNPTjo6VmFs
dWU+JiBvcHRfb3V0X3BheWxvYWQsIE9wdGlvbmFsPGludD4mIG9wdF9vdXRfZGF0YWJhc2VJZCwg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mIG9wdF9vdXRfc3Fs
RXJyb3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzKiBvcHRf
b3V0X3NjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNv
bG9yTGlzdD4mIG9wdF9vdXRfYWx0ZXJuYXRlQ29sb3JzLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVySGFuZGxlcjo6UHJpbnRDb2xvciogb3B0X291dF9wcmludENvbG9yKSA9IDA7Ci0gICAgY2xh
c3MgRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjayA6IHB1YmxpYyBC
YWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEV4
ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2soUmVmPEJhY2tlbmREaXNw
YXRjaGVyPiYmLCBpbnQgaWQpOwotICAgICAgICB2b2lkIHNlbmRTdWNjZXNzKFJlZlB0cjxKU09O
OjpBcnJheU9mPFN0cmluZz4+JiYgY29sdW1uTmFtZXMsIE9wdGlvbmFsPFN0cmluZz4mIG5vdGVz
LCBPcHRpb25hbDxkb3VibGU+JiB0aW1lc3RhbXAsIE9wdGlvbmFsPEpTT046Ok9iamVjdD4mIHZh
bHVlcywgT3B0aW9uYWw8SlNPTjo6VmFsdWU+JiBwYXlsb2FkLCBPcHRpb25hbDxpbnQ+JiBkYXRh
YmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYmIHNx
bEVycm9yLCBPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNv
bG9ycz4gc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6
Q29sb3JMaXN0PiYmIGFsdGVybmF0ZUNvbG9ycywgT3B0aW9uYWw8RGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3I+IHByaW50Q29sb3IpOwotICAgIH07Ci0gICAgdmly
dHVhbCB2b2lkIGV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGludCBpbl9kYXRh
YmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5LCBSZWY8RXhlY3V0ZVNRTEFzeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXNDYWxsYmFjaz4mJiBjYWxsYmFjaykgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBleGVjdXRlU1FMU3luYyhFcnJvclN0cmluZyYsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBT
dHJpbmcmIGluX3F1ZXJ5LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYgb3V0X2NvbHVt
bk5hbWVzLCBTdHJpbmcqIG91dF9ub3RlcywgZG91YmxlKiBvdXRfdGltZXN0YW1wLCBKU09OOjpP
YmplY3QqIG91dF92YWx1ZXMsIEpTT046OlZhbHVlKiBvdXRfcGF5bG9hZCwgaW50KiBvdXRfZGF0
YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mIG91
dF9zcWxFcnJvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxp
c3Q+JiBvdXRfYWx0ZXJuYXRlQ29sb3JzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6
UHJpbWFyeUNvbG9ycyogb3V0X3NjcmVlbkNvbG9yLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlcjo6UHJpbnRDb2xvciogb3V0X3ByaW50Q29sb3IpID0gMDsKLSAgICBjbGFzcyBFeGVj
dXRlU1FMQXN5bmNDYWxsYmFjayA6IHB1YmxpYyBCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tC
YXNlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrKFJlZjxC
YWNrZW5kRGlzcGF0Y2hlcj4mJiwgaW50IGlkKTsKLSAgICAgICAgdm9pZCBzZW5kU3VjY2VzcyhS
ZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYmIGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcm
IG5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBKU09OOjpPYmplY3QgdmFsdWVzLCBKU09OOjpWYWx1
ZSBwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpFcnJvcj4mJiBzcWxFcnJvciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6
OlByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpE
YXRhYmFzZTo6Q29sb3JMaXN0PiYmIGFsdGVybmF0ZUNvbG9ycywgRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3IgcHJpbnRDb2xvcik7Ci0gICAgfTsKLSAgICB2aXJ0
dWFsIHZvaWQgZXhlY3V0ZVNRTEFzeW5jKGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcm
IGluX3F1ZXJ5LCBSZWY8RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2s+JiYgY2FsbGJhY2spID0gMDsK
LXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIH5EYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxl
cigpOwotfTsKLQotY2xhc3MgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1Ymxp
YyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJl
ZjxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIHZvaWQgZGlzcGF0Y2gobG9u
ZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1l
c3NhZ2UpIGZpbmFsOwotcHJpdmF0ZToKLSAgICB2b2lkIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxS
ZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1l
dGVycyk7Ci0gICAgdm9pZCBleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25n
IHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKLSAgICB2b2lk
IGV4ZWN1dGVTUUxTeW5jKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBh
cmFtZXRlcnMpOwotICAgIHZvaWQgZXhlY3V0ZVNRTEFzeW5jKGxvbmcgcmVxdWVzdElkLCBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQotcHVibGljOgotICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0
Y2hlcihBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRj
aGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KLXBy
aXZhdGU6Ci0gICAgQWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciogbV9hbHRlcm5h
dGVEaXNwYXRjaGVyIHsgbnVsbHB0ciB9OwotI2VuZGlmCi1wcml2YXRlOgotICAgIERhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImLCBEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVySGFuZGxlciopOwotICAgIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBt
X2FnZW50IHsgbnVsbHB0ciB9OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMg
RW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJU
ZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5j
bHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jaW5jbHVk
ZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgotI2VuZGlmCi0KLW5hbWVzcGFj
ZSBJbnNwZWN0b3IgewotCi1EYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6fkRhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9Ci0KLVJlZjxEYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVyPiBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoQmFja2VuZERpc3Bh
dGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxl
ciogYWdlbnQpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKLX0KLQotRGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlcjo6RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYg
YmFja2VuZERpc3BhdGNoZXIsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2Vu
dCkKLSAgICA6IFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVy
KQotICAgICwgbV9hZ2VudChhZ2VudCkKLXsKLSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdp
c3RlckRpc3BhdGNoZXJGb3JEb21haW4oIkRhdGFiYXNlIl9zLCB0aGlzKTsKLX0KLQotdm9pZCBE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3Qg
U3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKLXsKLSAgICBSZWY8
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7Ci0KLSAgICBSZWZQdHI8
SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOwotICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1z
Il9zLCBwYXJhbWV0ZXJzKTsKLQotICAgIGlmIChtZXRob2QgPT0gImV4ZWN1dGVTUUxTeW5jT3B0
aW9uYWxSZXR1cm5WYWx1ZXMiKQotICAgICAgICBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJu
VmFsdWVzKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7Ci0gICAgZWxzZSBpZiAobWV0
aG9kID09ICJleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyIpCi0gICAgICAgIGV4
ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJh
bWV0ZXJzKSk7Ci0gICAgZWxzZSBpZiAobWV0aG9kID09ICJleGVjdXRlU1FMU3luYyIpCi0gICAg
ICAgIGV4ZWN1dGVTUUxTeW5jKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7Ci0gICAg
ZWxzZSBpZiAobWV0aG9kID09ICJleGVjdXRlU1FMQXN5bmMiKQotICAgICAgICBleGVjdXRlU1FM
QXN5bmMocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKLSAgICBlbHNlCi0gICAgICAg
IG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNo
ZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RhdGFiYXNlLiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZv
dW5kIik7Ci19Ci0KLXZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTFN5
bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBwYXJhbWV0ZXJzKQotewotICAgIGludCBpbl9kYXRhYmFzZUlkID0gbV9iYWNrZW5kRGlz
cGF0Y2hlci0+Z2V0SW50ZWdlcihwYXJhbWV0ZXJzLmdldCgpLCAiZGF0YWJhc2VJZCJfcywgbnVs
bHB0cik7Ci0gICAgU3RyaW5nIGluX3F1ZXJ5ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3Ry
aW5nKHBhcmFtZXRlcnMuZ2V0KCksICJxdWVyeSJfcywgbnVsbHB0cik7Ci0gICAgaWYgKG1fYmFj
a2VuZERpc3BhdGNoZXItPmhhc1Byb3RvY29sRXJyb3JzKCkpIHsKLSAgICAgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxp
ZFBhcmFtcywgIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnRGF0YWJhc2UuZXhlY3V0ZVNRTFN5
bmNPcHRpb25hbFJldHVyblZhbHVlcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIl9zKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENI
RVJTKQotICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5h
dGVEaXNwYXRjaGVyLT5leGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKHJlcXVlc3RJ
ZCwgaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2Vu
ZGlmCi0KLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1
bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0
cmluZz4+IG91dF9jb2x1bW5OYW1lczsKLSAgICBPcHRpb25hbDxTdHJpbmc+IG91dF9ub3RlczsK
LSAgICBPcHRpb25hbDxkb3VibGU+IG91dF90aW1lc3RhbXA7Ci0gICAgT3B0aW9uYWw8SlNPTjo6
T2JqZWN0PiBvdXRfdmFsdWVzOwotICAgIE9wdGlvbmFsPEpTT046OlZhbHVlPiBvdXRfcGF5bG9h
ZDsKLSAgICBPcHRpb25hbDxpbnQ+IG91dF9kYXRhYmFzZUlkOwotICAgIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IG91dF9zcWxFcnJvcjsKLSAgICBJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyBvdXRfc2NyZWVuQ29sb3I7Ci0g
ICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IG91dF9h
bHRlcm5hdGVDb2xvcnM7Ci0gICAgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlBy
aW50Q29sb3Igb3V0X3ByaW50Q29sb3I7Ci0gICAgbV9hZ2VudC0+ZXhlY3V0ZVNRTFN5bmNPcHRp
b25hbFJldHVyblZhbHVlcyhlcnJvciwgaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnksIG91dF9jb2x1
bW5OYW1lcywgb3V0X25vdGVzLCBvdXRfdGltZXN0YW1wLCBvdXRfdmFsdWVzLCBvdXRfcGF5bG9h
ZCwgb3V0X2RhdGFiYXNlSWQsIG91dF9zcWxFcnJvciwgb3V0X3NjcmVlbkNvbG9yLCBvdXRfYWx0
ZXJuYXRlQ29sb3JzLCBvdXRfcHJpbnRDb2xvcik7Ci0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgp
KSB7Ci0gICAgICAgIGlmIChvdXRfY29sdW1uTmFtZXMpCi0gICAgICAgICAgICByZXN1bHQtPnNl
dEFycmF5KCJjb2x1bW5OYW1lcyJfcywgb3V0X2NvbHVtbk5hbWVzKTsKLSAgICAgICAgaWYgKG91
dF9ub3Rlcy5oYXNWYWx1ZSgpKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoIm5vdGVz
Il9zLCAqb3V0X25vdGVzKTsKLSAgICAgICAgaWYgKG91dF90aW1lc3RhbXAuaGFzVmFsdWUoKSkK
LSAgICAgICAgICAgIHJlc3VsdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICpvdXRfdGltZXN0
YW1wKTsKLSAgICAgICAgaWYgKG91dF92YWx1ZXMuaGFzVmFsdWUoKSkKLSAgICAgICAgICAgIHJl
c3VsdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsICpvdXRfdmFsdWVzKTsKLSAgICAgICAgaWYgKG91
dF9wYXlsb2FkLmhhc1ZhbHVlKCkpCi0gICAgICAgICAgICByZXN1bHQtPnNldFZhbHVlKCJwYXls
b2FkIl9zLCAqb3V0X3BheWxvYWQpOwotICAgICAgICBpZiAob3V0X2RhdGFiYXNlSWQuaGFzVmFs
dWUoKSkKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgKm91
dF9kYXRhYmFzZUlkKTsKLSAgICAgICAgaWYgKG91dF9zcWxFcnJvcikKLSAgICAgICAgICAgIHJl
c3VsdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgb3V0X3NxbEVycm9yKTsKLSAgICAgICAgaWYg
KG91dF9zY3JlZW5Db2xvci5oYXNWYWx1ZSgpKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJp
bmcoInNjcmVlbkNvbG9yIl9zLCAqb3V0X3NjcmVlbkNvbG9yKTsKLSAgICAgICAgaWYgKG91dF9h
bHRlcm5hdGVDb2xvcnMpCi0gICAgICAgICAgICByZXN1bHQtPnNldEFycmF5KCJhbHRlcm5hdGVD
b2xvcnMiX3MsIG91dF9hbHRlcm5hdGVDb2xvcnMpOwotICAgICAgICBpZiAob3V0X3ByaW50Q29s
b3IuaGFzVmFsdWUoKSkKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJwcmludENvbG9y
Il9zLCAqb3V0X3ByaW50Q29sb3IpOwotICAgIH0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQot
ICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZN
b3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBX
VEZNb3ZlKGVycm9yKSk7Ci19Ci0KLURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpF
eGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrOjpFeGVjdXRlU1FMQXN5
bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrKFJlZjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBi
YWNrZW5kRGlzcGF0Y2hlciwgaW50IGlkKSA6IEJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jh
c2UoV1RGTW92ZShiYWNrZW5kRGlzcGF0Y2hlciksIGlkKSB7IH0KLQotdm9pZCBEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1
ZXNDYWxsYmFjazo6c2VuZFN1Y2Nlc3MoUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mJiBj
b2x1bW5OYW1lcywgT3B0aW9uYWw8U3RyaW5nPiYgbm90ZXMsIE9wdGlvbmFsPGRvdWJsZT4mIHRp
bWVzdGFtcCwgT3B0aW9uYWw8SlNPTjo6T2JqZWN0PiYgdmFsdWVzLCBPcHRpb25hbDxKU09OOjpW
YWx1ZT4mIHBheWxvYWQsIE9wdGlvbmFsPGludD4mIGRhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiYgc3FsRXJyb3IsIE9wdGlvbmFsPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiBzY3JlZW5Db2xvciwgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiYgYWx0ZXJuYXRl
Q29sb3JzLCBPcHRpb25hbDxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRD
b2xvcj4gcHJpbnRDb2xvcikKLXsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9
IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgaWYgKGNvbHVtbk5hbWVzKQotICAgICAgICBq
c29uTWVzc2FnZS0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBjb2x1bW5OYW1lcyk7Ci0gICAg
aWYgKG5vdGVzLmhhc1ZhbHVlKCkpCi0gICAgICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm5v
dGVzIl9zLCAqbm90ZXMpOwotICAgIGlmICh0aW1lc3RhbXAuaGFzVmFsdWUoKSkKLSAgICAgICAg
anNvbk1lc3NhZ2UtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCAqdGltZXN0YW1wKTsKLSAgICBp
ZiAodmFsdWVzLmhhc1ZhbHVlKCkpCi0gICAgICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoInZh
bHVlcyJfcywgKnZhbHVlcyk7Ci0gICAgaWYgKHBheWxvYWQuaGFzVmFsdWUoKSkKLSAgICAgICAg
anNvbk1lc3NhZ2UtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCAqcGF5bG9hZCk7Ci0gICAgaWYgKGRh
dGFiYXNlSWQuaGFzVmFsdWUoKSkKLSAgICAgICAganNvbk1lc3NhZ2UtPnNldEludGVnZXIoImRh
dGFiYXNlSWQiX3MsICpkYXRhYmFzZUlkKTsKLSAgICBpZiAoc3FsRXJyb3IpCi0gICAgICAgIGpz
b25NZXNzYWdlLT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBzcWxFcnJvcik7Ci0gICAgaWYgKHNj
cmVlbkNvbG9yLmhhc1ZhbHVlKCkpCi0gICAgICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoInNj
cmVlbkNvbG9yIl9zLCAqc2NyZWVuQ29sb3IpOwotICAgIGlmIChhbHRlcm5hdGVDb2xvcnMpCi0g
ICAgICAgIGpzb25NZXNzYWdlLT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCBhbHRlcm5h
dGVDb2xvcnMpOwotICAgIGlmIChwcmludENvbG9yLmhhc1ZhbHVlKCkpCi0gICAgICAgIGpzb25N
ZXNzYWdlLT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsICpwcmludENvbG9yKTsKLSAgICBDYWxs
YmFja0Jhc2U6OnNlbmRTdWNjZXNzKFdURk1vdmUoanNvbk1lc3NhZ2UpKTsKLX0KLQotdm9pZCBE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZh
bHVlcyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKQot
ewotICAgIGludCBpbl9kYXRhYmFzZUlkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0SW50ZWdl
cihwYXJhbWV0ZXJzLmdldCgpLCAiZGF0YWJhc2VJZCJfcywgbnVsbHB0cik7Ci0gICAgU3RyaW5n
IGluX3F1ZXJ5ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0
KCksICJxdWVyeSJfcywgbnVsbHB0cik7Ci0gICAgaWYgKG1fYmFja2VuZERpc3BhdGNoZXItPmhh
c1Byb3RvY29sRXJyb3JzKCkpIHsKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0
UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgIlNvbWUgYXJn
dW1lbnRzIG9mIG1ldGhvZCAnRGF0YWJhc2UuZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXMnIGNhbid0IGJlIHByb2Nlc3NlZCJfcyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSAgICBpZiAobV9h
bHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhl
Y3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMocmVxdWVzdElkLCBpbl9kYXRhYmFzZUlk
LCBpbl9xdWVyeSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIFJlZjxE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxS
ZXR1cm5WYWx1ZXNDYWxsYmFjaz4gY2FsbGJhY2sgPSBhZG9wdFJlZigqbmV3IERhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVl
c0NhbGxiYWNrKG1fYmFja2VuZERpc3BhdGNoZXIuY29weVJlZigpLCByZXF1ZXN0SWQpKTsKLSAg
ICBtX2FnZW50LT5leGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhpbl9kYXRhYmFz
ZUlkLCBpbl9xdWVyeSwgY2FsbGJhY2suY29weVJlZigpKTsKLQotfQotCi12b2lkIERhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5jKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8
SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpCi17Ci0gICAgaW50IGluX2RhdGFiYXNlSWQgPSBt
X2JhY2tlbmREaXNwYXRjaGVyLT5nZXRJbnRlZ2VyKHBhcmFtZXRlcnMuZ2V0KCksICJkYXRhYmFz
ZUlkIl9zLCBudWxscHRyKTsKLSAgICBTdHJpbmcgaW5fcXVlcnkgPSBtX2JhY2tlbmREaXNwYXRj
aGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgInF1ZXJ5Il9zLCBudWxscHRyKTsKLSAg
ICBpZiAobV9iYWNrZW5kRGlzcGF0Y2hlci0+aGFzUHJvdG9jb2xFcnJvcnMoKSkgewotICAgICAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRj
aGVyOjpJbnZhbGlkUGFyYW1zLCAiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICdEYXRhYmFzZS5l
eGVjdXRlU1FMU3luYycgY2FuJ3QgYmUgcHJvY2Vzc2VkIl9zKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotICAg
IGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRj
aGVyLT5leGVjdXRlU1FMU3luYyhyZXF1ZXN0SWQsIGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5KTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7
Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
LSAgICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiBvdXRfY29sdW1uTmFtZXM7Ci0gICAg
U3RyaW5nIG91dF9ub3RlczsKLSAgICBkb3VibGUgb3V0X3RpbWVzdGFtcDsKLSAgICBKU09OOjpP
YmplY3Qgb3V0X3ZhbHVlczsKLSAgICBKU09OOjpWYWx1ZSBvdXRfcGF5bG9hZDsKLSAgICBpbnQg
b3V0X2RhdGFiYXNlSWQ7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNl
OjpFcnJvcj4gb3V0X3NxbEVycm9yOwotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpE
YXRhYmFzZTo6Q29sb3JMaXN0PiBvdXRfYWx0ZXJuYXRlQ29sb3JzOwotICAgIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzIG91dF9zY3JlZW5Db2xvcjsKLSAgICBE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciBvdXRfcHJpbnRDb2xv
cjsKLSAgICBtX2FnZW50LT5leGVjdXRlU1FMU3luYyhlcnJvciwgaW5fZGF0YWJhc2VJZCwgaW5f
cXVlcnksIG91dF9jb2x1bW5OYW1lcywgJm91dF9ub3RlcywgJm91dF90aW1lc3RhbXAsIG91dF92
YWx1ZXMsICZvdXRfcGF5bG9hZCwgJm91dF9kYXRhYmFzZUlkLCBvdXRfc3FsRXJyb3IsIG91dF9h
bHRlcm5hdGVDb2xvcnMsICZvdXRfc2NyZWVuQ29sb3IsICZvdXRfcHJpbnRDb2xvcik7Ci0KLSAg
ICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7Ci0gICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoImNvbHVt
bk5hbWVzIl9zLCBvdXRfY29sdW1uTmFtZXMpOwotICAgICAgICByZXN1bHQtPnNldFN0cmluZygi
bm90ZXMiX3MsIG91dF9ub3Rlcyk7Ci0gICAgICAgIHJlc3VsdC0+c2V0RG91YmxlKCJ0aW1lc3Rh
bXAiX3MsIG91dF90aW1lc3RhbXApOwotICAgICAgICByZXN1bHQtPnNldE9iamVjdCgidmFsdWVz
Il9zLCBvdXRfdmFsdWVzKTsKLSAgICAgICAgcmVzdWx0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywg
b3V0X3BheWxvYWQpOwotICAgICAgICByZXN1bHQtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3Ms
IG91dF9kYXRhYmFzZUlkKTsKLSAgICAgICAgcmVzdWx0LT5zZXRPYmplY3QoInNxbEVycm9yIl9z
LCBvdXRfc3FsRXJyb3IpOwotICAgICAgICByZXN1bHQtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xv
cnMiX3MsIG91dF9hbHRlcm5hdGVDb2xvcnMpOwotICAgICAgICByZXN1bHQtPnNldFN0cmluZygi
c2NyZWVuQ29sb3IiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVt
Q29uc3RhbnRWYWx1ZShvdXRfc2NyZWVuQ29sb3IpKTsKLSAgICAgICAgcmVzdWx0LT5zZXRTdHJp
bmcoInByaW50Q29sb3IiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRF
bnVtQ29uc3RhbnRWYWx1ZShvdXRfcHJpbnRDb2xvcikpOwotICAgIH0KLSAgICBpZiAoIWVycm9y
Lmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVx
dWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFj
a2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNl
cnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Ci19Ci0KLURhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNDYWxsYmFjazo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJh
Y2soUmVmPEJhY2tlbmREaXNwYXRjaGVyPiYmIGJhY2tlbmREaXNwYXRjaGVyLCBpbnQgaWQpIDog
QmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZShXVEZNb3ZlKGJhY2tlbmREaXNwYXRjaGVy
KSwgaWQpIHsgfQotCi12b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVj
dXRlU1FMQXN5bmNDYWxsYmFjazo6c2VuZFN1Y2Nlc3MoUmVmUHRyPEpTT046OkFycmF5T2Y8U3Ry
aW5nPj4mJiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFt
cCwgSlNPTjo6T2JqZWN0IHZhbHVlcywgSlNPTjo6VmFsdWUgcGF5bG9hZCwgaW50IGRhdGFiYXNl
SWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiYgc3FsRXJy
b3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzIHNjcmVlbkNv
bG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4mJiBh
bHRlcm5hdGVDb2xvcnMsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENv
bG9yIHByaW50Q29sb3IpCi17Ci0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBK
U09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRBcnJheSgiY29sdW1u
TmFtZXMiX3MsIGNvbHVtbk5hbWVzKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJub3Rl
cyJfcywgbm90ZXMpOwotICAgIGpzb25NZXNzYWdlLT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywg
dGltZXN0YW1wKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIHZhbHVl
cyk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBwYXlsb2FkKTsKLSAg
ICBqc29uTWVzc2FnZS0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgZGF0YWJhc2VJZCk7Ci0g
ICAganNvbk1lc3NhZ2UtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIHNxbEVycm9yKTsKLSAgICBq
c29uTWVzc2FnZS0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKHNjcmVlbkNvbG9yKSk7Ci0gICAg
anNvbk1lc3NhZ2UtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIGFsdGVybmF0ZUNvbG9y
cyk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgSW5zcGVjdG9y
OjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKHByaW50Q29sb3Ip
KTsKLSAgICBDYWxsYmFja0Jhc2U6OnNlbmRTdWNjZXNzKFdURk1vdmUoanNvbk1lc3NhZ2UpKTsK
LX0KLQotdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMQXN5bmMobG9u
ZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycykKLXsKLSAgICBp
bnQgaW5fZGF0YWJhc2VJZCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEludGVnZXIocGFyYW1l
dGVycy5nZXQoKSwgImRhdGFiYXNlSWQiX3MsIG51bGxwdHIpOwotICAgIFN0cmluZyBpbl9xdWVy
eSA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwYXJhbWV0ZXJzLmdldCgpLCAicXVl
cnkiX3MsIG51bGxwdHIpOwotICAgIGlmIChtX2JhY2tlbmREaXNwYXRjaGVyLT5oYXNQcm90b2Nv
bEVycm9ycygpKSB7Ci0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29s
RXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsICJTb21lIGFyZ3VtZW50cyBv
ZiBtZXRob2QgJ0RhdGFiYXNlLmV4ZWN1dGVTUUxBc3luYycgY2FuJ3QgYmUgcHJvY2Vzc2VkIl9z
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQotICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAg
ICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5leGVjdXRlU1FMQXN5bmMocmVxdWVzdElkLCBpbl9k
YXRhYmFzZUlkLCBpbl9xdWVyeSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQot
ICAgIFJlZjxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5j
Q2FsbGJhY2s+IGNhbGxiYWNrID0gYWRvcHRSZWYoKm5ldyBEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2sobV9iYWNrZW5kRGlzcGF0Y2hlci5j
b3B5UmVmKCksIHJlcXVlc3RJZCkpOwotICAgIG1fYWdlbnQtPmV4ZWN1dGVTUUxBc3luYyhpbl9k
YXRhYmFzZUlkLCBpbl9xdWVyeSwgY2FsbGJhY2suY29weVJlZigpKTsKLQotfQotCi19IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJz
LmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRl
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdt
YSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8d3Rm
L0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNw
YWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEZyb250ZW5kUm91dGVyOwotCi19IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3Bw
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQot
Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2lu
Y2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQot
bmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLS8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgotbmFt
ZXNwYWNlIERhdGFiYXNlIHsKLWNsYXNzIEVycm9yOwotZW51bSBjbGFzcyBQcmltYXJ5Q29sb3Jz
OwotfSAvLyBEYXRhYmFzZQotLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgotCi0KLS8v
IFR5cGVkZWZzLgotbmFtZXNwYWNlIERhdGFiYXNlIHsKLS8qIFVuaXF1ZSBpZGVudGlmaWVyIG9m
IERhdGFiYXNlIG9iamVjdC4gKi8KLXR5cGVkZWYgaW50IERhdGFiYXNlSWQ7Ci10eXBlZGVmIEpT
T046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+
IENvbG9yTGlzdDsKLX0gLy8gRGF0YWJhc2UKLS8vIEVuZCBvZiB0eXBlZGVmcy4KLQotbmFtZXNw
YWNlIFRlc3RIZWxwZXJzIHsKLQotU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2Rl
KTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKFQg
ZW51bVZhbHVlKQotewotICAgIHJldHVybiBnZXRFbnVtQ29uc3RhbnRWYWx1ZShzdGF0aWNfY2Fz
dDxpbnQ+KGVudW1WYWx1ZSkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwotCi1u
YW1lc3BhY2UgRGF0YWJhc2UgewotLyogICovCi1lbnVtIGNsYXNzIFByaW1hcnlDb2xvcnMgewot
ICAgIFJlZCA9IDAsCi0gICAgR3JlZW4gPSAxLAotICAgIEJsdWUgPSAyLAotfTsgLy8gZW51bSBj
bGFzcyBQcmltYXJ5Q29sb3JzCi0vKiBEYXRhYmFzZSBlcnJvci4gKi8KLWNsYXNzIEVycm9yIDog
cHVibGljIEpTT046Ok9iamVjdEJhc2UgewotcHVibGljOgotICAgIGVudW0gewotICAgICAgICBO
b0ZpZWxkc1NldCA9IDAsCi0gICAgICAgIE1lc3NhZ2VTZXQgPSAxIDw8IDAsCi0gICAgICAgIENv
ZGVTZXQgPSAxIDw8IDEsCi0gICAgICAgIEFsbEZpZWxkc1NldCA9IChNZXNzYWdlU2V0IHwgQ29k
ZVNldCkKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8aW50IFNUQVRFPgotICAgIGNsYXNzIEJ1aWxk
ZXIgewotICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVzdWx0
OwotCi0gICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNh
c3RTdGF0ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2Fz
dDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1
aWxkZXIoUmVmPC8qRXJyb3IqL0pTT046Ok9iamVjdD4mJiBvYmplY3QpCi0gICAgICAgICAgICA6
IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5p
dF9zdGF0ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZnJpZW5kIGNsYXNzIEVycm9yOwotICAgIHB1
YmxpYzoKLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTWVzc2FnZVNldD4mIHNldE1lc3NhZ2Uo
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIE1lc3NhZ2VTZXQpLCBwcm9wZXJ0eV9tZXNzYWdlX2FscmVhZHlfc2V0KTsK
LSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1lc3NhZ2UiX3MsIHZhbHVlKTsKLSAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TWVzc2FnZVNldD4oKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2RlU2V0PiYgc2V0Q29kZShpbnQgdmFsdWUpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2RlU2V0KSwgcHJv
cGVydHlfY29kZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdl
cigiY29kZSJfcywgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb2RlU2V0
PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgUmVmPEVycm9yPiByZWxlYXNlKCkKLSAgICAgICAg
ewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1
bHRfaXNfbm90X3JlYWR5KTsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihFcnJv
cikgPT0gc2l6ZW9mKEpTT046Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsKLQotICAgICAgICAgICAg
UmVmPEpTT046Ok9iamVjdD4ganNvblJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7
Ci0gICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVm
PEVycm9yPio+KCZqc29uUmVzdWx0KSk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAg
ICAgICB9Ci0gICAgfTsKLQotICAgIC8qCi0gICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgot
ICAgICAqIFJlZjxFcnJvcj4gcmVzdWx0ID0gRXJyb3I6OmNyZWF0ZSgpCi0gICAgICogICAgIC5z
ZXRNZXNzYWdlKC4uLikKLSAgICAgKiAgICAgLnNldENvZGUoLi4uKQotICAgICAqICAgICAucmVs
ZWFzZSgpOwotICAgICAqLwotICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUo
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVj
dDo6Y3JlYXRlKCkpOwotICAgIH0KLX07Ci0KLX0gLy8gRGF0YWJhc2UKLQotCi0KLW5hbWVzcGFj
ZSBUZXN0SGVscGVycyB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFByb3RvY29sRW51bVR5cGU+Ci1P
cHRpb25hbDxQcm90b2NvbEVudW1UeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmcoY29uc3Qg
U3RyaW5nJik7Ci0KLS8vIEVudW1zIGluIHRoZSAnRGF0YWJhc2UnIERvbWFpbgotdGVtcGxhdGU8
PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+
IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6
UHJpbWFyeUNvbG9ycz4oY29uc3QgU3RyaW5nJik7Ci0KLX0gLy8gbmFtZXNwYWNlIFRlc3RIZWxw
ZXJzCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgotCi1uYW1lc3BhY2UgV1RGIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1
bHRIYXNoOwotCi0vLyBIYXNoIGRlY2xhcmF0aW9ucyBpbiB0aGUgJ0RhdGFiYXNlJyBEb21haW4K
LXRlbXBsYXRlPD4KLXN0cnVjdCBEZWZhdWx0SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6UHJpbWFyeUNvbG9ycz4gewotICAgIHR5cGVkZWYgSW50SGFzaDxJbnNwZWN0b3I6OlBy
b3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gSGFzaDsKLX07Ci0KLX0gLy8gbmFtZXNw
YWNlIFdURgotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsK
LQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKLQotc3Rh
dGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFsdWVzW10gPSB7Ci0gICAgInJl
ZCIsCi0gICAgImdyZWVuIiwKLSAgICAiYmx1ZSIsCi0gICAgImN5YW4iLAotICAgICJtYWdlbnRh
IiwKLSAgICAieWVsbG93IiwKLSAgICAiYmxhY2siLAotfTsKLQotU3RyaW5nIGdldEVudW1Db25z
dGFudFZhbHVlKGludCBjb2RlKSB7Ci0gICAgcmV0dXJuIGVudW1fY29uc3RhbnRfdmFsdWVzW2Nv
ZGVdOwotfQotCi0vLyBFbnVtcyBpbiB0aGUgJ0RhdGFiYXNlJyBEb21haW4KLXRlbXBsYXRlPD4K
LU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiBw
YXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlBy
aW1hcnlDb2xvcnM+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCi17Ci0gICAgc3RhdGlj
IGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0gewotICAgICAgICAoc2l6ZV90KUluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzOjpSZWQsCi0gICAgICAgIChz
aXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM6OkdyZWVu
LAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5
Q29sb3JzOjpCbHVlLAotICAgIH07Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAzOyArK2kp
Ci0gICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25z
dGFudFZhbHVlc1tpXV0pCi0gICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzKWNvbnN0YW50VmFsdWVzW2ldOwotCi0gICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKLX0KLQotCi19IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwotCi0KLQot
fSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW5jbHVkZSA8d3RmL1Jl
dGFpblB0ci5oPgotCi1AcHJvdG9jb2wgVGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVy
OwotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi1jbGFzcyBPYmpDSW5zcGVjdG9yRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVEYXRhYmFzZUJhY2tl
bmREaXNwYXRjaGVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAg
ICBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xE
YXRhYmFzZURvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0K
LSAgICB2b2lkIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0
SWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KSBmaW5hbDsKLSAg
ICB2b2lkIGV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVzdElk
LCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkgZmluYWw7Ci0gICAg
dm9pZCBleGVjdXRlU1FMU3luYyhsb25nIHJlcXVlc3RJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNv
bnN0IFN0cmluZyYgaW5fcXVlcnkpIGZpbmFsOwotICAgIHZvaWQgZXhlY3V0ZVNRTEFzeW5jKGxv
bmcgcmVxdWVzdElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkg
ZmluYWw7Ci1wcml2YXRlOgotICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURv
bWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAi
Y29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQot
I2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLQotbmFtZXNw
YWNlIEluc3BlY3RvciB7Ci0KLXZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3Bh
dGNoZXI6OmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0SWQs
IGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KQotewotICAgIGlmICgh
W21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihleGVjdXRlU1FMU3luY09w
dGlvbmFsUmV0dXJuVmFsdWVzV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOmRhdGFi
YXNlSWQ6cXVlcnk6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJv
dG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwg
IidEYXRhYmFzZS5leGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzJyB3YXMgbm90IGZv
dW5kIl9zKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMo
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5T
U3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90
b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJv
cik7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0g
ICAgfTsKLQotICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiov
ICoqY29sdW1uTmFtZXMsIE5TU3RyaW5nICoqbm90ZXMsIGRvdWJsZSAqdGltZXN0YW1wLCBSV0lQ
cm90b2NvbEpTT05PYmplY3QgKip2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnBheWxv
YWQsIGludCAqZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKnNxbEVycm9y
LCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgKnNjcmVlbkNvbG9yLCBOU0FycmF5
Lyo8TlNTdHJpbmc+Ki8gKiphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhl
Y3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3IgKnByaW50Q29sb3IpIHsK
LSAgICAgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1F
VEVSKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihub3RlcywgQCJub3RlcyIpOwotICAgICAgICBU
SFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIodmFsdWVzLCBAInZhbHVl
cyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIo
cGF5bG9hZCwgQCJwYXlsb2FkIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09Q
VElPTkFMX1BBUkFNRVRFUihzcWxFcnJvciwgQCJzcWxFcnJvciIpOwotICAgICAgICBUSFJPV19F
WENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoYWx0ZXJuYXRlQ29sb3JzLCBAImFs
dGVybmF0ZUNvbG9ycyIpOwotICAgICAgICBpZiAoY29sdW1uTmFtZXMpCi0gICAgICAgICAgICBy
ZXN1bHRPYmplY3QtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgdG9KU09OU3RyaW5nQXJyYXko
KmNvbHVtbk5hbWVzKSk7Ci0gICAgICAgIGlmIChub3RlcykKLSAgICAgICAgICAgIHJlc3VsdE9i
amVjdC0+c2V0U3RyaW5nKCJub3RlcyJfcywgKm5vdGVzKTsKLSAgICAgICAgaWYgKHRpbWVzdGFt
cCkKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICp0
aW1lc3RhbXApOwotICAgICAgICBpZiAodmFsdWVzKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0
LT5zZXRPYmplY3QoInZhbHVlcyJfcywgWyp2YWx1ZXMgdG9KU09OT2JqZWN0XSk7Ci0gICAgICAg
IGlmIChwYXlsb2FkKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRWYWx1ZSgicGF5bG9h
ZCJfcywgWypwYXlsb2FkIHRvSlNPTk9iamVjdF0pOwotICAgICAgICBpZiAoZGF0YWJhc2VJZCkK
LSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgKmRh
dGFiYXNlSWQpOwotICAgICAgICBpZiAoc3FsRXJyb3IpCi0gICAgICAgICAgICByZXN1bHRPYmpl
Y3QtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIFsqc3FsRXJyb3IgdG9KU09OT2JqZWN0XSk7Ci0g
ICAgICAgIGlmIChzY3JlZW5Db2xvcikKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3Ry
aW5nKCJzY3JlZW5Db2xvciJfcywgdG9Qcm90b2NvbFN0cmluZygqc2NyZWVuQ29sb3IpKTsKLSAg
ICAgICAgaWYgKGFsdGVybmF0ZUNvbG9ycykKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0
QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5nQXJyYXkoKmFsdGVybmF0ZUNv
bG9ycykpOwotICAgICAgICBpZiAocHJpbnRDb2xvcikKLSAgICAgICAgICAgIHJlc3VsdE9iamVj
dC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKCpwcmludENvbG9y
KSk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQs
IFdURk1vdmUocmVzdWx0T2JqZWN0KSwgZmFsc2UpOwotICAgIH07Ci0KLSAgICBpbnQgb19pbl9k
YXRhYmFzZUlkID0gaW5fZGF0YWJhc2VJZDsKLSAgICBOU1N0cmluZyAqb19pbl9xdWVyeSA9IGlu
X3F1ZXJ5OwotCi0gICAgW21fZGVsZWdhdGUgZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZh
bHVlc1dpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nl
c3NDYWxsYmFjayBkYXRhYmFzZUlkOm9faW5fZGF0YWJhc2VJZCBxdWVyeTpvX2luX3F1ZXJ5XTsK
LX0KLQotdm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0
ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0SWQsIGludCBpbl9kYXRh
YmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KQotewotICAgIGlmICghW21fZGVsZWdhdGUg
cmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVy
blZhbHVlc1dpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazpkYXRhYmFzZUlkOnF1ZXJ5
OildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3Io
cmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRGF0YWJhc2Uu
ZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMnIHdhcyBub3QgZm91bmQiX3MpOwot
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVy
cm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3Io
cmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKLSAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICB9OwotCi0g
ICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKipjb2x1bW5O
YW1lcywgTlNTdHJpbmcgKipub3RlcywgZG91YmxlICp0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNP
Tk9iamVjdCAqKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqcGF5bG9hZCwgaW50ICpk
YXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqc3FsRXJyb3IsIFRlc3RQcm90
b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0cmlu
Zz4qLyAqKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5
bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3IgKnByaW50Q29sb3IpIHsKLSAgICAgICAg
UmVmPEpTT046Ok9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
LSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKGNvbHVt
bk5hbWVzLCBAImNvbHVtbk5hbWVzIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFE
X09QVElPTkFMX1BBUkFNRVRFUihub3RlcywgQCJub3RlcyIpOwotICAgICAgICBUSFJPV19FWENF
UFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIodmFsdWVzLCBAInZhbHVlcyIpOwotICAg
ICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIocGF5bG9hZCwg
QCJwYXlsb2FkIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BB
UkFNRVRFUihzcWxFcnJvciwgQCJzcWxFcnJvciIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05f
Rk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoYWx0ZXJuYXRlQ29sb3JzLCBAImFsdGVybmF0ZUNv
bG9ycyIpOwotICAgICAgICBpZiAoY29sdW1uTmFtZXMpCi0gICAgICAgICAgICByZXN1bHRPYmpl
Y3QtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgdG9KU09OU3RyaW5nQXJyYXkoKmNvbHVtbk5h
bWVzKSk7Ci0gICAgICAgIGlmIChub3RlcykKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0
U3RyaW5nKCJub3RlcyJfcywgKm5vdGVzKTsKLSAgICAgICAgaWYgKHRpbWVzdGFtcCkKLSAgICAg
ICAgICAgIHJlc3VsdE9iamVjdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICp0aW1lc3RhbXAp
OwotICAgICAgICBpZiAodmFsdWVzKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmpl
Y3QoInZhbHVlcyJfcywgWyp2YWx1ZXMgdG9KU09OT2JqZWN0XSk7Ci0gICAgICAgIGlmIChwYXls
b2FkKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgWypw
YXlsb2FkIHRvSlNPTk9iamVjdF0pOwotICAgICAgICBpZiAoZGF0YWJhc2VJZCkKLSAgICAgICAg
ICAgIHJlc3VsdE9iamVjdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgKmRhdGFiYXNlSWQp
OwotICAgICAgICBpZiAoc3FsRXJyb3IpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldE9i
amVjdCgic3FsRXJyb3IiX3MsIFsqc3FsRXJyb3IgdG9KU09OT2JqZWN0XSk7Ci0gICAgICAgIGlm
IChzY3JlZW5Db2xvcikKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJzY3Jl
ZW5Db2xvciJfcywgdG9Qcm90b2NvbFN0cmluZygqc2NyZWVuQ29sb3IpKTsKLSAgICAgICAgaWYg
KGFsdGVybmF0ZUNvbG9ycykKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoImFs
dGVybmF0ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5nQXJyYXkoKmFsdGVybmF0ZUNvbG9ycykpOwot
ICAgICAgICBpZiAocHJpbnRDb2xvcikKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3Ry
aW5nKCJwcmludENvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKCpwcmludENvbG9yKSk7Ci0gICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUo
cmVzdWx0T2JqZWN0KSwgZmFsc2UpOwotICAgIH07Ci0KLSAgICBpbnQgb19pbl9kYXRhYmFzZUlk
ID0gaW5fZGF0YWJhc2VJZDsKLSAgICBOU1N0cmluZyAqb19pbl9xdWVyeSA9IGluX3F1ZXJ5Owot
Ci0gICAgW21fZGVsZWdhdGUgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNXaXRo
RXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJh
Y2sgZGF0YWJhc2VJZDpvX2luX2RhdGFiYXNlSWQgcXVlcnk6b19pbl9xdWVyeV07Ci19Ci0KLXZv
aWQgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5j
KGxvbmcgcmVxdWVzdElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVy
eSkKLXsKLSAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Io
ZXhlY3V0ZVNRTFN5bmNXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6ZGF0YWJhc2VJ
ZDpxdWVyeTopXSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2Nv
bEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0Rh
dGFiYXNlLmV4ZWN1dGVTUUxTeW5jJyB3YXMgbm90IGZvdW5kIl9zKTsKLSAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAg
ICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFj
a2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7Ci0gICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgfTsKLQotICAgIGlkIHN1Y2Nlc3ND
YWxsYmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiovICpjb2x1bW5OYW1lcywgTlNTdHJpbmcg
Km5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnZhbHVlcywg
UldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgVGVzdFByb3Rv
Y29sRGF0YWJhc2VFcnJvciAqc3FsRXJyb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqYWx0ZXJu
YXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3Is
IFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yIHByaW50Q29sb3Ip
IHsKLSAgICAgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVU
RVIoY29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIobm90ZXMsIEAibm90ZXMiKTsKLSAgICAgICAgVEhST1df
RVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIodmFsdWVzLCBAInZhbHVlcyIpOwotICAg
ICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihwYXlsb2FkLCBAInBh
eWxvYWQiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIo
c3FsRXJyb3IsIEAic3FsRXJyb3IiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFV
SVJFRF9QQVJBTUVURVIoYWx0ZXJuYXRlQ29sb3JzLCBAImFsdGVybmF0ZUNvbG9ycyIpOwotICAg
ICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgdG9KU09OU3RyaW5n
QXJyYXkoY29sdW1uTmFtZXMpKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoIm5v
dGVzIl9zLCBub3Rlcyk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0RG91YmxlKCJ0aW1lc3Rh
bXAiX3MsIHRpbWVzdGFtcCk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KCJ2YWx1
ZXMiX3MsIFt2YWx1ZXMgdG9KU09OT2JqZWN0XSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0
VmFsdWUoInBheWxvYWQiX3MsIFtwYXlsb2FkIHRvSlNPTk9iamVjdF0pOwotICAgICAgICByZXN1
bHRPYmplY3QtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsIGRhdGFiYXNlSWQpOwotICAgICAg
ICByZXN1bHRPYmplY3QtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIFtzcWxFcnJvciB0b0pTT05P
YmplY3RdKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3Jz
Il9zLCB0b0pTT05TdHJpbmdBcnJheShhbHRlcm5hdGVDb2xvcnMpKTsKLSAgICAgICAgcmVzdWx0
T2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKHNjcmVl
bkNvbG9yKSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9z
LCB0b1Byb3RvY29sU3RyaW5nKHByaW50Q29sb3IpKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHRPYmplY3QpLCBmYWxz
ZSk7Ci0gICAgfTsKLQotICAgIGludCBvX2luX2RhdGFiYXNlSWQgPSBpbl9kYXRhYmFzZUlkOwot
ICAgIE5TU3RyaW5nICpvX2luX3F1ZXJ5ID0gaW5fcXVlcnk7Ci0KLSAgICBbbV9kZWxlZ2F0ZSBl
eGVjdXRlU1FMU3luY1dpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxi
YWNrOnN1Y2Nlc3NDYWxsYmFjayBkYXRhYmFzZUlkOm9faW5fZGF0YWJhc2VJZCBxdWVyeTpvX2lu
X3F1ZXJ5XTsKLX0KLQotdm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
cjo6ZXhlY3V0ZVNRTEFzeW5jKGxvbmcgcmVxdWVzdElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29u
c3QgU3RyaW5nJiBpbl9xdWVyeSkKLXsKLSAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9T
ZWxlY3RvcjpAc2VsZWN0b3IoZXhlY3V0ZVNRTEFzeW5jV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vz
c0NhbGxiYWNrOmRhdGFiYXNlSWQ6cXVlcnk6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpN
ZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS5leGVjdXRlU1FMQXN5bmMnIHdhcyBub3QgZm91bmQi
X3MpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJp
bmcgKmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29s
RXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsK
LSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICB9
OwotCi0gICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmNv
bHVtbk5hbWVzLCBOU1N0cmluZyAqbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJXSVByb3RvY29s
SlNPTk9iamVjdCAqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnBheWxvYWQsIGludCBk
YXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpzcWxFcnJvciwgVGVzdFByb3Rv
Y29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzIHNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+
Ki8gKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQ
cmludENvbG9yIHByaW50Q29sb3IpIHsKLSAgICAgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0
T2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoY29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsKLSAg
ICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIobm90ZXMsIEAibm90
ZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIodmFs
dWVzLCBAInZhbHVlcyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BB
UkFNRVRFUihwYXlsb2FkLCBAInBheWxvYWQiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9SRVFVSVJFRF9QQVJBTUVURVIoc3FsRXJyb3IsIEAic3FsRXJyb3IiKTsKLSAgICAgICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoYWx0ZXJuYXRlQ29sb3JzLCBAImFs
dGVybmF0ZUNvbG9ycyIpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJjb2x1bW5O
YW1lcyJfcywgdG9KU09OU3RyaW5nQXJyYXkoY29sdW1uTmFtZXMpKTsKLSAgICAgICAgcmVzdWx0
T2JqZWN0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBub3Rlcyk7Ci0gICAgICAgIHJlc3VsdE9iamVj
dC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIHRpbWVzdGFtcCk7Ci0gICAgICAgIHJlc3VsdE9i
amVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFt2YWx1ZXMgdG9KU09OT2JqZWN0XSk7Ci0gICAg
ICAgIHJlc3VsdE9iamVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFtwYXlsb2FkIHRvSlNPTk9i
amVjdF0pOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3Ms
IGRhdGFiYXNlSWQpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdCgic3FsRXJyb3Ii
X3MsIFtzcWxFcnJvciB0b0pTT05PYmplY3RdKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRT
dHJpbmcoInNjcmVlbkNvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKHNjcmVlbkNvbG9yKSk7Ci0g
ICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgdG9KU09O
U3RyaW5nQXJyYXkoYWx0ZXJuYXRlQ29sb3JzKSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0
U3RyaW5nKCJwcmludENvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKHByaW50Q29sb3IpKTsKLSAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92
ZShyZXN1bHRPYmplY3QpLCBmYWxzZSk7Ci0gICAgfTsKLQotICAgIGludCBvX2luX2RhdGFiYXNl
SWQgPSBpbl9kYXRhYmFzZUlkOwotICAgIE5TU3RyaW5nICpvX2luX3F1ZXJ5ID0gaW5fcXVlcnk7
Ci0KLSAgICBbbV9kZWxlZ2F0ZSBleGVjdXRlU1FMQXN5bmNXaXRoRXJyb3JDYWxsYmFjazplcnJv
ckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDpvX2lu
X2RhdGFiYXNlSWQgcXVlcnk6b19pbl9xdWVyeV07Ci19Ci0KLQotfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1t
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQg
PFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0
eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBO
U09iamVjdAotQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNldERhdGFiYXNl
SGFuZGxlcjopIGlkPFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4gZGF0YWJhc2VI
YW5kbGVyOwotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
bi5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1
dGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1w
b3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2Nv
bEludGVybmFsLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIK
LSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+Ci0j
aW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4K
LSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVycy5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXJzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBU
ZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCi17Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250
cm9sbGVyKiBfY29udHJvbGxlcjsKLSAgICBpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhh
bmRsZXI+IF9kYXRhYmFzZUhhbmRsZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENv
bnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgotewot
ICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4g
bmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xs
ZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAgIFtfZGF0
YWJhc2VIYW5kbGVyIHJlbGVhc2VdOwotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAodm9p
ZClzZXREYXRhYmFzZUhhbmRsZXI6KGlkPFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxl
cj4paGFuZGxlcgotewotICAgIGlmIChoYW5kbGVyID09IF9kYXRhYmFzZUhhbmRsZXIpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIFtfZGF0YWJhc2VIYW5kbGVyIHJlbGVhc2VdOwotICAgIF9kYXRh
YmFzZUhhbmRsZXIgPSBbaGFuZGxlciByZXRhaW5dOwotCi0gICAgYXV0byBhbHRlcm5hdGVEaXNw
YXRjaGVyID0gbWFrZVVuaXF1ZTxPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
cj4oaGFuZGxlcik7Ci0gICAgYXV0byBhbHRlcm5hdGVBZ2VudCA9IG1ha2VVbmlxdWU8QWx0ZXJu
YXRlRGlzcGF0Y2hhYmxlQWdlbnQ8RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciwgQWx0ZXJuYXRl
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4+KCJEYXRhYmFzZSJfcywgKl9jb250cm9sbGVyLCBX
VEZNb3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIpKTsKLSAgICBfY29udHJvbGxlci0+YXBwZW5kRXh0
cmFBZ2VudChXVEZNb3ZlKGFsdGVybmF0ZUFnZW50KSk7Ci19Ci0KLS0gKGlkPFRlc3RQcm90b2Nv
bERhdGFiYXNlRG9tYWluSGFuZGxlcj4pZGF0YWJhc2VIYW5kbGVyCi17Ci0gICAgcmV0dXJuIF9k
YXRhYmFzZUhhbmRsZXI7Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24ubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlz
cGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13
aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQg
IlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMu
aD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3lu
Yy1hdHRyaWJ1dGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2ltcG9ydCA8V2ViSW5z
cGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgotCi0KLUBjbGFzcyBUZXN0UHJvdG9jb2xE
YXRhYmFzZUVycm9yOwotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xQ
bGF0Zm9ybSkgewotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsLAotICAgIFRlc3RQcm90b2Nv
bFBsYXRmb3JtR2VuZXJpYywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUywKLSAgICBUZXN0
UHJvdG9jb2xQbGF0Zm9ybU1hY09TLAotfTsKLQotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2Vy
LCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMpIHsKLSAgICBUZXN0UHJvdG9jb2xE
YXRhYmFzZVByaW1hcnlDb2xvcnNSZWQsCi0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5
Q29sb3JzR3JlZW4sCi0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzQmx1ZSwK
LX07Ci0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhl
Y3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3IpIHsKLSAgICBUZXN0UHJv
dG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9y
Q3lhbiwKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1
cm5WYWx1ZXNQcmludENvbG9yTWFnZW50YSwKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yWWVsbG93LAotICAgIFRlc3RQ
cm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29s
b3JCbGFjaywKLX07Ci0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbERh
dGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yKSB7Ci0g
ICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVl
c1ByaW50Q29sb3JDeWFuLAotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5j
T3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yTWFnZW50YSwKLSAgICBUZXN0UHJvdG9jb2xE
YXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvclllbGxv
dywKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJu
VmFsdWVzUHJpbnRDb2xvckJsYWNrLAotfTsKLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwg
VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3IpIHsKLSAgICBUZXN0
UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvckN5YW4sCi0gICAgVGVzdFBy
b3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3JNYWdlbnRhLAotICAgIFRlc3RQ
cm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yWWVsbG93LAotICAgIFRlc3RQ
cm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yQmxhY2ssCi19OwotCi10eXBl
ZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3lu
Y1ByaW50Q29sb3IpIHsKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1By
aW50Q29sb3JDeWFuLAotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJp
bnRDb2xvck1hZ2VudGEsCi0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQ
cmludENvbG9yWWVsbG93LAotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5j
UHJpbnRDb2xvckJsYWNrLAotfTsKLQotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVm
YXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciA6IFJXSVByb3Rv
Y29sSlNPTk9iamVjdAotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9u
YXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQ7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQ
cm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKLS0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBjb2RlOihpbnQp
Y29kZTsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmlu
ZyAqbWVzc2FnZTsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24p
IGludCBjb2RlOwotQGVuZAotCi1AcHJvdG9jb2wgVGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5I
YW5kbGVyIDxOU09iamVjdD4KLUBvcHRpb25hbAotLSAodm9pZClleGVjdXRlU1FMU3luY09wdGlv
bmFsUmV0dXJuVmFsdWVzV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9y
KSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKShOU0FycmF5Lyo8TlNTdHJp
bmc+Ki8gKipjb2x1bW5OYW1lcywgTlNTdHJpbmcgKipub3RlcywgZG91YmxlICp0aW1lc3RhbXAs
IFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoq
cGF5bG9hZCwgaW50ICpkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqc3Fs
RXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqc2NyZWVuQ29sb3IsIE5T
QXJyYXkvKjxOU1N0cmluZz4qLyAqKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJh
c2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvciAqcHJpbnRDb2xv
cikpc3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNlSWQ6KGludClkYXRhYmFzZUlkIHF1ZXJ5OihOU1N0
cmluZyAqKXF1ZXJ5OwotLSAodm9pZClleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVl
c1dpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFj
ayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoTlNBcnJheS8qPE5TU3RyaW5nPiovICoqY29sdW1u
TmFtZXMsIE5TU3RyaW5nICoqbm90ZXMsIGRvdWJsZSAqdGltZXN0YW1wLCBSV0lQcm90b2NvbEpT
T05PYmplY3QgKip2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnBheWxvYWQsIGludCAq
ZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKnNxbEVycm9yLCBUZXN0UHJv
dG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgKnNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJp
bmc+Ki8gKiphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFz
eW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yICpwcmludENvbG9yKSlzdWNjZXNzQ2Fs
bGJhY2sgZGF0YWJhc2VJZDooaW50KWRhdGFiYXNlSWQgcXVlcnk6KE5TU3RyaW5nICopcXVlcnk7
Ci0tICh2b2lkKWV4ZWN1dGVTUUxTeW5jV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJp
bmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKShOU0FycmF5
Lyo8TlNTdHJpbmc+Ki8gKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqbm90ZXMsIGRvdWJsZSB0aW1l
c3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmpl
Y3QgKnBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpz
cWxFcnJvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90
b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyBzY3JlZW5Db2xvciwgVGVzdFByb3RvY29sRGF0YWJh
c2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3IgcHJpbnRDb2xvcikpc3VjY2Vzc0NhbGxiYWNrIGRh
dGFiYXNlSWQ6KGludClkYXRhYmFzZUlkIHF1ZXJ5OihOU1N0cmluZyAqKXF1ZXJ5OwotLSAodm9p
ZClleGVjdXRlU1FMQXN5bmNXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJy
b3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0
cmluZz4qLyAqY29sdW1uTmFtZXMsIE5TU3RyaW5nICpub3RlcywgZG91YmxlIHRpbWVzdGFtcCwg
UldJUHJvdG9jb2xKU09OT2JqZWN0ICp2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5
bG9hZCwgaW50IGRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKnNxbEVycm9y
LCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIE5TQXJyYXkv
KjxOU1N0cmluZz4qLyAqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVTUUxBc3luY1ByaW50Q29sb3IgcHJpbnRDb2xvcikpc3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNl
SWQ6KGludClkYXRhYmFzZUlkIHF1ZXJ5OihOU1N0cmluZyAqKXF1ZXJ5OwotQGVuZAotCi0KLQot
Ci0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmpl
Y3RzLmg+Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbEludGVybmFsLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9y
dCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRD
b3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8d3RmL0pTT05W
YWx1ZXMuaD4KLQotCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAi
VGVzdFByb3RvY29sLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNv
bnZlcnNpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBPYmpDRW51bVR5cGU+Ci1PcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmlu
Zyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5n
KFRlc3RQcm90b2NvbFBsYXRmb3JtIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAg
IGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1BbGw6Ci0gICAgICAgIHJldHVybiAiYWxsIl9zOwot
ICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOgotICAgICAgICByZXR1cm4gImdl
bmVyaWMiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzoKLSAgICAgICAgcmV0
dXJuICJpb3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOgotICAgICAg
ICByZXR1cm4gIm1hY29zIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlv
bmFsPFRlc3RQcm90b2NvbFBsYXRmb3JtPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5n
JiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gImFsbCIpCi0gICAgICAgIHJldHVybiBUZXN0
UHJvdG9jb2xQbGF0Zm9ybUFsbDsKLSAgICBpZiAodmFsdWUgPT0gImdlbmVyaWMiKQotICAgICAg
ICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOwotICAgIGlmICh2YWx1ZSA9PSAi
aW9zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOwotICAgIGlmICh2
YWx1ZSA9PSAibWFjb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1NYWNP
UzsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi0KLWlubGluZSBTdHJpbmcgdG9Qcm90
b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgdmFsdWUpCi17Ci0g
ICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlD
b2xvcnNSZWQ6Ci0gICAgICAgIHJldHVybiAicmVkIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29s
RGF0YWJhc2VQcmltYXJ5Q29sb3JzR3JlZW46Ci0gICAgICAgIHJldHVybiAiZ3JlZW4iX3M7Ci0g
ICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNCbHVlOgotICAgICAgICBy
ZXR1cm4gImJsdWUiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8
VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gInJlZCIpCi0gICAgICAgIHJl
dHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNSZWQ7Ci0gICAgaWYgKHZhbHVl
ID09ICJncmVlbiIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlD
b2xvcnNHcmVlbjsKLSAgICBpZiAodmFsdWUgPT0gImJsdWUiKQotICAgICAgICByZXR1cm4gVGVz
dFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzQmx1ZTsKLSAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwotfQotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sRGF0
YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvciB2YWx1ZSkK
LXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhl
Y3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JDeWFuOgotICAgICAgICBy
ZXR1cm4gImN5YW4iX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxT
eW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yTWFnZW50YToKLSAgICAgICAgcmV0dXJu
ICJtYWdlbnRhIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3lu
Y09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvclllbGxvdzoKLSAgICAgICAgcmV0dXJuICJ5
ZWxsb3ciX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0
aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yQmxhY2s6Ci0gICAgICAgIHJldHVybiAiYmxhY2si
X3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29s
RGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvcj4gZnJv
bVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09
ICJjeWFuIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5
bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JDeWFuOwotICAgIGlmICh2YWx1ZSA9PSAi
bWFnZW50YSIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxT
eW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yTWFnZW50YTsKLSAgICBpZiAodmFsdWUg
PT0gInllbGxvdyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVT
UUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yWWVsbG93OwotICAgIGlmICh2YWx1
ZSA9PSAiYmxhY2siKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRl
U1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvckJsYWNrOwotICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7Ci19Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJv
dG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xv
ciB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERh
dGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yQ3lhbjoK
LSAgICAgICAgcmV0dXJuICJjeWFuIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VF
eGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JNYWdlbnRhOgotICAg
ICAgICByZXR1cm4gIm1hZ2VudGEiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvclllbGxvdzoKLSAgICAg
ICAgcmV0dXJuICJ5ZWxsb3ciX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvckJsYWNrOgotICAgICAgICBy
ZXR1cm4gImJsYWNrIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFs
PFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQ
cmludENvbG9yPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAg
ICBpZiAodmFsdWUgPT0gImN5YW4iKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJh
c2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JDeWFuOwotICAg
IGlmICh2YWx1ZSA9PSAibWFnZW50YSIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRh
YmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvck1hZ2VudGE7
Ci0gICAgaWYgKHZhbHVlID09ICJ5ZWxsb3ciKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29s
RGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JZZWxs
b3c7Ci0gICAgaWYgKHZhbHVlID09ICJibGFjayIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9j
b2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvckJs
YWNrOwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90
b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvciB2
YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFi
YXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yQ3lhbjoKLSAgICAgICAgcmV0dXJuICJjeWFuIl9z
OwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3JN
YWdlbnRhOgotICAgICAgICByZXR1cm4gIm1hZ2VudGEiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9j
b2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvclllbGxvdzoKLSAgICAgICAgcmV0dXJu
ICJ5ZWxsb3ciX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5j
UHJpbnRDb2xvckJsYWNrOgotICAgICAgICByZXR1cm4gImJsYWNrIl9zOwotICAgIH0KLX0KLQot
dGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNR
TFN5bmNQcmludENvbG9yPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkK
LXsKLSAgICBpZiAodmFsdWUgPT0gImN5YW4iKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29s
RGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3JDeWFuOwotICAgIGlmICh2YWx1ZSA9PSAi
bWFnZW50YSIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxT
eW5jUHJpbnRDb2xvck1hZ2VudGE7Ci0gICAgaWYgKHZhbHVlID09ICJ5ZWxsb3ciKQotICAgICAg
ICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3JZZWxs
b3c7Ci0gICAgaWYgKHZhbHVlID09ICJibGFjayIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9j
b2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvckJsYWNrOwotICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7Ci19Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9j
b2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3IgdmFsdWUpCi17Ci0gICAgc3dpdGNo
KHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1By
aW50Q29sb3JDeWFuOgotICAgICAgICByZXR1cm4gImN5YW4iX3M7Ci0gICAgY2FzZSBUZXN0UHJv
dG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JNYWdlbnRhOgotICAgICAgICBy
ZXR1cm4gIm1hZ2VudGEiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVT
UUxBc3luY1ByaW50Q29sb3JZZWxsb3c6Ci0gICAgICAgIHJldHVybiAieWVsbG93Il9zOwotICAg
IGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yQmxhY2s6
Ci0gICAgICAgIHJldHVybiAiYmxhY2siX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxp
bmUgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9y
PiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFs
dWUgPT0gImN5YW4iKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRl
U1FMQXN5bmNQcmludENvbG9yQ3lhbjsKLSAgICBpZiAodmFsdWUgPT0gIm1hZ2VudGEiKQotICAg
ICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9y
TWFnZW50YTsKLSAgICBpZiAodmFsdWUgPT0gInllbGxvdyIpCi0gICAgICAgIHJldHVybiBUZXN0
UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JZZWxsb3c7Ci0gICAgaWYg
KHZhbHVlID09ICJibGFjayIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JCbGFjazsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0Owot
fQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMt
d2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLQot
I2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2Vy
LmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5o
PgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW50ZXJmYWNlIFRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucyAoRGF0YWJhc2VEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlRGF0YWJh
c2VJZDooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2
b2lkKV9wYXJzZVByaW1hcnlDb2xvcnM6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2Fk
OihpZClwYXlsb2FkOwotKyAodm9pZClfcGFyc2VDb2xvckxpc3Q6KE5TQXJyYXkvKjxOU1N0cmlu
Zz4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLSsgKHZvaWQpX3BhcnNl
RXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6
KGlkKXBheWxvYWQ7Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucyAoRGF0YWJhc2VEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlRGF0YWJhc2VJZDoo
TlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJP
V19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU051bWJlciBjbGFzc10pOwotICAg
ICpvdXRWYWx1ZSA9IChOU051bWJlciAqKXBheWxvYWQ7Ci19Ci0KLSsgKHZvaWQpX3BhcnNlUHJp
bWFyeUNvbG9yczooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQK
LXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBj
bGFzc10pOwotICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycz4g
cmVzdWx0ID0gSW5zcGVjdG9yOjpmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sRGF0YWJh
c2VQcmltYXJ5Q29sb3JzPihwYXlsb2FkKTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9F
TlVNX1ZBTFVFKHJlc3VsdCwgQCJQcmltYXJ5Q29sb3JzIik7Ci0gICAgKm91dFZhbHVlID0gQChy
ZXN1bHQudmFsdWUoKSk7Ci19Ci0KLSsgKHZvaWQpX3BhcnNlQ29sb3JMaXN0OihOU0FycmF5Lyo8
TlNTdHJpbmc+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBU
SFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0FycmF5Lyo8TlNTdHJpbmc+
Ki8gY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSAoTlNBcnJheS8qPE5TU3RyaW5nPiovICopcGF5
bG9hZDsKLX0KLQotKyAodm9pZClfcGFyc2VFcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJv
ciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOwotICAgICpv
dXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBhbGxvY10gaW5pdFdpdGhQYXls
b2FkOnBheWxvYWRdOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1t
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1h
dHRyaWJ1dGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpT
T05PYmplY3RQcml2YXRlLmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8
d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi1AaW1w
bGVtZW50YXRpb24gVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcgotCi0tIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilw
YXlsb2FkCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJldHVy
biBuaWw7Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxv
YWRbQCJtZXNzYWdlIl0sIEAibWVzc2FnZSIpOwotICAgIHNlbGYubWVzc2FnZSA9IHBheWxvYWRb
QCJtZXNzYWdlIl07Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZ
KHBheWxvYWRbQCJjb2RlIl0sIEAiY29kZSIpOwotICAgIHNlbGYuY29kZSA9IFtwYXlsb2FkW0Ai
Y29kZSJdIGludGVnZXJWYWx1ZV07Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLS0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilvYmpl
Y3QKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoSlNPTk9iamVjdDpbb2JqZWN0
IHRvSlNPTk9iamVjdF0uZ2V0KCldKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIHJldHVy
biBzZWxmOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAq
KW1lc3NhZ2UgY29kZTooaW50KWNvZGUKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRd
KSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlS
RURfUFJPUEVSVFkobWVzc2FnZSwgQCJtZXNzYWdlIik7Ci0KLSAgICBzZWxmLm1lc3NhZ2UgPSBt
ZXNzYWdlOwotICAgIHNlbGYuY29kZSA9IGNvZGU7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQot
LSAodm9pZClzZXRNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UKLXsKLSAgICBbc3VwZXIgc2V0
U3RyaW5nOm1lc3NhZ2UgZm9yS2V5OkAibWVzc2FnZSJdOwotfQotCi0tIChOU1N0cmluZyAqKW1l
c3NhZ2UKLXsKLSAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAIm1lc3NhZ2UiXTsKLX0K
LQotLSAodm9pZClzZXRDb2RlOihpbnQpY29kZQotewotICAgIFtzdXBlciBzZXRJbnRlZ2VyOmNv
ZGUgZm9yS2V5OkAiY29kZSJdOwotfQotCi0tIChpbnQpY29kZQotewotICAgIHJldHVybiBbc3Vw
ZXIgaW50ZWdlckZvcktleTpAImNvZGUiXTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtb3B0
aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2NvbW1hbmRz
LXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uLXJlc3VsdApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODU5NDFlZDUxZjEuLjAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVj
dGVkL2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uLXJl
c3VsdAorKysgL2Rldi9udWxsCkBAIC0xLDE2NzQgKzAsMCBAQAotIyMjIEJlZ2luIEZpbGU6IElu
c3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLS8vIERhdGFiYXNlCi1J
bnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJEYXRhYmFzZSIsIG51bGwpOwotSW5zcGVj
dG9yQmFja2VuZC5yZWdpc3RlckVudW0oIkRhdGFiYXNlLlByaW1hcnlDb2xvcnMiLCB7UmVkOiAi
cmVkIiwgR3JlZW46ICJncmVlbiIsIEJsdWU6ICJibHVlIn0pOwotSW5zcGVjdG9yQmFja2VuZC5y
ZWdpc3RlckNvbW1hbmQoIkRhdGFiYXNlLmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMiLCBu
dWxsLCBbeyJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFs
IjogdHJ1ZX0sIHsibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6
IHRydWV9LCB7Im5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFs
IjogdHJ1ZX0sIHsibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwi
OiB0cnVlfSwgeyJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwi
OiB0cnVlfSwgeyJuYW1lIjogImRhdGFiYXNlSWQiLCAidHlwZSI6ICJudW1iZXIiLCAib3B0aW9u
YWwiOiB0cnVlfSwgeyJuYW1lIjogInNxbEVycm9yIiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlv
bmFsIjogdHJ1ZX0sIHsibmFtZSI6ICJzY3JlZW5Db2xvciIsICJ0eXBlIjogInN0cmluZyIsICJv
cHRpb25hbCI6IHRydWV9LCB7Im5hbWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwgInR5cGUiOiAib2Jq
ZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZX0sIHsibmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAi
c3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZX1dLCBbImNvbHVtbk5hbWVzIiwgIm5vdGVzIiwgInRp
bWVzdGFtcCIsICJ2YWx1ZXMiLCAicGF5bG9hZCIsICJkYXRhYmFzZUlkIiwgInNxbEVycm9yIiwg
InNjcmVlbkNvbG9yIiwgImFsdGVybmF0ZUNvbG9ycyIsICJwcmludENvbG9yIl0pOwotSW5zcGVj
dG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIkRhdGFiYXNlLmV4ZWN1dGVOb09wdGlvbmFsUGFy
YW1ldGVycyIsIG51bGwsIFt7Im5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJvYmplY3Qi
fSwgeyJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIn0sIHsibmFtZSI6ICJ0aW1lc3Rh
bXAiLCAidHlwZSI6ICJudW1iZXIifSwgeyJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVj
dCJ9LCB7Im5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogIm9iamVjdCJ9LCB7Im5hbWUiOiAiZGF0
YWJhc2VJZCIsICJ0eXBlIjogIm51bWJlciJ9LCB7Im5hbWUiOiAic3FsRXJyb3IiLCAidHlwZSI6
ICJvYmplY3QifSwgeyJuYW1lIjogInNjcmVlbkNvbG9yIiwgInR5cGUiOiAic3RyaW5nIn0sIHsi
bmFtZSI6ICJhbHRlcm5hdGVDb2xvcnMiLCAidHlwZSI6ICJvYmplY3QifSwgeyJuYW1lIjogInBy
aW50Q29sb3IiLCAidHlwZSI6ICJzdHJpbmcifV0sIFsiY29sdW1uTmFtZXMiLCAibm90ZXMiLCAi
dGltZXN0YW1wIiwgInZhbHVlcyIsICJwYXlsb2FkIiwgImRhdGFiYXNlSWQiLCAic3FsRXJyb3Ii
LCAic2NyZWVuQ29sb3IiLCAiYWx0ZXJuYXRlQ29sb3JzIiwgInByaW50Q29sb3IiXSk7Ci1JbnNw
ZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJEYXRhYmFzZSIsIG51bGwpOwotIyMjIEVuZCBG
aWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25j
ZQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0KLSNpbmNs
dWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yRnJvbnRlbmRSb3V0ZXIuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2b2lkIHNldEJhY2tlbmRE
aXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFj
a2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9Ci0gICAgQmFja2VuZERpc3Bh
dGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0
Y2hlci5nZXQoKTsgfQotcHJpdmF0ZToKLSAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1f
YmFja2VuZERpc3BhdGNoZXI7Ci19OwotCi0KLWNsYXNzIEFsdGVybmF0ZURhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGlj
OgotICAgIHZpcnR1YWwgfkFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoKSB7IH0K
LSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhsb25nIGNhbGxJ
ZCwgY29uc3QgSlNPTjo6QXJyYXkqIGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIGluX25v
dGVzLCBjb25zdCBkb3VibGUqIGluX3RpbWVzdGFtcCwgY29uc3QgSlNPTjo6T2JqZWN0KiBpbl92
YWx1ZXMsIGNvbnN0IEpTT046OlZhbHVlKiBpbl9wYXlsb2FkLCBjb25zdCBpbnQqIGluX2RhdGFi
YXNlSWQsIGNvbnN0IEpTT046Ok9iamVjdCogaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyogaW5f
c2NyZWVuQ29sb3IsIGNvbnN0IEpTT046OkFycmF5KiBpbl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0
IFN0cmluZyogaW5fcHJpbnRDb2xvcikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlTm9P
cHRpb25hbFBhcmFtZXRlcnMobG9uZyBjYWxsSWQsIGNvbnN0IEpTT046OkFycmF5JiBpbl9jb2x1
bW5OYW1lcywgY29uc3QgU3RyaW5nJiBpbl9ub3RlcywgZG91YmxlIGluX3RpbWVzdGFtcCwgY29u
c3QgSlNPTjo6T2JqZWN0JiBpbl92YWx1ZXMsIEpTT046OlZhbHVlIGluX3BheWxvYWQsIGludCBp
bl9kYXRhYmFzZUlkLCBjb25zdCBKU09OOjpPYmplY3QmIGluX3NxbEVycm9yLCBjb25zdCBTdHJp
bmcmIGluX3NjcmVlbkNvbG9yLCBjb25zdCBKU09OOjpBcnJheSYgaW5fYWx0ZXJuYXRlQ29sb3Jz
LCBjb25zdCBTdHJpbmcmIGluX3ByaW50Q29sb3IpID0gMDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgotCi0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCi0jIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAot
Ci0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1w
YXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXR5
cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCi1jbGFzcyBBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
OwotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi1j
bGFzcyBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7Ci1wdWJsaWM6Ci0gICAgLy8g
TmFtZWQgYWZ0ZXIgcGFyYW1ldGVyICdwcmludENvbG9yJyB3aGlsZSBnZW5lcmF0aW5nIGNvbW1h
bmQvZXZlbnQgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycy4KLSAgICBlbnVtIGNsYXNzIFBy
aW50Q29sb3IgewotICAgICAgICBDeWFuID0gMywKLSAgICAgICAgTWFnZW50YSA9IDQsCi0gICAg
ICAgIFllbGxvdyA9IDUsCi0gICAgICAgIEJsYWNrID0gNiwKLSAgICB9OyAvLyBlbnVtIGNsYXNz
IFByaW50Q29sb3IKLSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVy
cyhFcnJvclN0cmluZyYsIGNvbnN0IEpTT046OkFycmF5KiBvcHRfaW5fY29sdW1uTmFtZXMsIGNv
bnN0IFN0cmluZyogb3B0X2luX25vdGVzLCBjb25zdCBkb3VibGUqIG9wdF9pbl90aW1lc3RhbXAs
IGNvbnN0IEpTT046Ok9iamVjdCogb3B0X2luX3ZhbHVlcywgY29uc3QgSlNPTjo6VmFsdWUqIG9w
dF9pbl9wYXlsb2FkLCBjb25zdCBpbnQqIG9wdF9pbl9kYXRhYmFzZUlkLCBjb25zdCBKU09OOjpP
YmplY3QqIG9wdF9pbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nKiBvcHRfaW5fc2NyZWVuQ29sb3Is
IGNvbnN0IEpTT046OkFycmF5KiBvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcq
IG9wdF9pbl9wcmludENvbG9yLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYgb3B0X291
dF9jb2x1bW5OYW1lcywgT3B0aW9uYWw8U3RyaW5nPiYgb3B0X291dF9ub3RlcywgT3B0aW9uYWw8
ZG91YmxlPiYgb3B0X291dF90aW1lc3RhbXAsIE9wdGlvbmFsPEpTT046Ok9iamVjdD4mIG9wdF9v
dXRfdmFsdWVzLCBPcHRpb25hbDxKU09OOjpWYWx1ZT4mIG9wdF9vdXRfcGF5bG9hZCwgT3B0aW9u
YWw8aW50PiYgb3B0X291dF9kYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6OkVycm9yPiYgb3B0X291dF9zcWxFcnJvciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMqIG9wdF9vdXRfc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYgb3B0X291dF9hbHRlcm5hdGVD
b2xvcnMsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yKiBvcHRf
b3V0X3ByaW50Q29sb3IpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZU5vT3B0aW9uYWxQ
YXJhbWV0ZXJzKEVycm9yU3RyaW5nJiwgY29uc3QgSlNPTjo6QXJyYXkmIGluX2NvbHVtbk5hbWVz
LCBjb25zdCBTdHJpbmcmIGluX25vdGVzLCBkb3VibGUgaW5fdGltZXN0YW1wLCBjb25zdCBKU09O
OjpPYmplY3QmIGluX3ZhbHVlcywgSlNPTjo6VmFsdWUgaW5fcGF5bG9hZCwgaW50IGluX2RhdGFi
YXNlSWQsIGNvbnN0IEpTT046Ok9iamVjdCYgaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgaW5f
c2NyZWVuQ29sb3IsIGNvbnN0IEpTT046OkFycmF5JiBpbl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0
IFN0cmluZyYgaW5fcHJpbnRDb2xvciwgUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mIG91
dF9jb2x1bW5OYW1lcywgU3RyaW5nKiBvdXRfbm90ZXMsIGRvdWJsZSogb3V0X3RpbWVzdGFtcCwg
SlNPTjo6T2JqZWN0KiBvdXRfdmFsdWVzLCBKU09OOjpWYWx1ZSogb3V0X3BheWxvYWQsIGludCog
b3V0X2RhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJy
b3I+JiBvdXRfc3FsRXJyb3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5
Q29sb3JzKiBvdXRfc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6Q29sb3JMaXN0PiYgb3V0X2FsdGVybmF0ZUNvbG9ycywgRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3IqIG91dF9wcmludENvbG9yKSA9IDA7Ci1wcm90ZWN0
ZWQ6Ci0gICAgdmlydHVhbCB+RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKLX07
Ci0KLWNsYXNzIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxl
bWVudGFsQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8RGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgRGF0YWJhc2VC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVz
dElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBm
aW5hbDsKLXByaXZhdGU6Ci0gICAgdm9pZCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxv
bmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwotICAgIHZv
aWQgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQotcHVibGljOgotICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0Y2hlcihB
bHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7
IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KLXByaXZhdGU6
Ci0gICAgQWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciogbV9hbHRlcm5hdGVEaXNw
YXRjaGVyIHsgbnVsbHB0ciB9OwotI2VuZGlmCi1wcml2YXRlOgotICAgIERhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlciopOwotICAgIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50
IHsgbnVsbHB0ciB9OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZp
bGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tl
bmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21t
YW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVl
cy5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQotI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNlbmRpZgot
Ci1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXI6On5EYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQotCi1SZWY8RGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlcj4gRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEJh
Y2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXIqIGFnZW50KQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIsIGFnZW50KSk7Ci19Ci0KLURhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXI6OkRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERp
c3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlciogYWdlbnQpCi0gICAgOiBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5k
RGlzcGF0Y2hlcikKLSAgICAsIG1fYWdlbnQoYWdlbnQpCi17Ci0gICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKCJEYXRhYmFzZSJfcywgdGhpcyk7Ci19
Ci0KLXZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0
SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCi17
Ci0gICAgUmVmPERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwotCi0g
ICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVyczsKLSAgICBtZXNzYWdlLT5nZXRPYmpl
Y3QoInBhcmFtcyJfcywgcGFyYW1ldGVycyk7Ci0KLSAgICBpZiAobWV0aG9kID09ICJleGVjdXRl
QWxsT3B0aW9uYWxQYXJhbWV0ZXJzIikKLSAgICAgICAgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1l
dGVycyhyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOwotICAgIGVsc2UgaWYgKG1ldGhv
ZCA9PSAiZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIikKLSAgICAgICAgZXhlY3V0ZU5vT3B0
aW9uYWxQYXJhbWV0ZXJzKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7Ci0gICAgZWxz
ZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tl
bmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS4iICsgbWV0aG9kICsgIicg
d2FzIG5vdCBmb3VuZCIpOwotfQotCi12b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4
ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpP
YmplY3Q+JiYgcGFyYW1ldGVycykKLXsKLSAgICBib29sIG9wdF9pbl9jb2x1bW5OYW1lc192YWx1
ZUZvdW5kID0gZmFsc2U7Ci0gICAgUmVmUHRyPEpTT046OkFycmF5PiBvcHRfaW5fY29sdW1uTmFt
ZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRBcnJheShwYXJhbWV0ZXJzLmdldCgpLCAiY29s
dW1uTmFtZXMiX3MsICZvcHRfaW5fY29sdW1uTmFtZXNfdmFsdWVGb3VuZCk7Ci0gICAgYm9vbCBv
cHRfaW5fbm90ZXNfdmFsdWVGb3VuZCA9IGZhbHNlOwotICAgIFN0cmluZyBvcHRfaW5fbm90ZXMg
PSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgIm5vdGVz
Il9zLCAmb3B0X2luX25vdGVzX3ZhbHVlRm91bmQpOwotICAgIGJvb2wgb3B0X2luX3RpbWVzdGFt
cF92YWx1ZUZvdW5kID0gZmFsc2U7Ci0gICAgZG91YmxlIG9wdF9pbl90aW1lc3RhbXAgPSBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5nZXREb3VibGUocGFyYW1ldGVycy5nZXQoKSwgInRpbWVzdGFtcCJf
cywgJm9wdF9pbl90aW1lc3RhbXBfdmFsdWVGb3VuZCk7Ci0gICAgYm9vbCBvcHRfaW5fdmFsdWVz
X3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBvcHRfaW5fdmFs
dWVzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0T2JqZWN0KHBhcmFtZXRlcnMuZ2V0KCksICJ2
YWx1ZXMiX3MsICZvcHRfaW5fdmFsdWVzX3ZhbHVlRm91bmQpOwotICAgIGJvb2wgb3B0X2luX3Bh
eWxvYWRfdmFsdWVGb3VuZCA9IGZhbHNlOwotICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gb3B0X2lu
X3BheWxvYWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRWYWx1ZShwYXJhbWV0ZXJzLmdldCgp
LCAicGF5bG9hZCJfcywgJm9wdF9pbl9wYXlsb2FkX3ZhbHVlRm91bmQpOwotICAgIGJvb2wgb3B0
X2luX2RhdGFiYXNlSWRfdmFsdWVGb3VuZCA9IGZhbHNlOwotICAgIGludCBvcHRfaW5fZGF0YWJh
c2VJZCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEludGVnZXIocGFyYW1ldGVycy5nZXQoKSwg
ImRhdGFiYXNlSWQiX3MsICZvcHRfaW5fZGF0YWJhc2VJZF92YWx1ZUZvdW5kKTsKLSAgICBib29s
IG9wdF9pbl9zcWxFcnJvcl92YWx1ZUZvdW5kID0gZmFsc2U7Ci0gICAgUmVmUHRyPEpTT046Ok9i
amVjdD4gb3B0X2luX3NxbEVycm9yID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0T2JqZWN0KHBh
cmFtZXRlcnMuZ2V0KCksICJzcWxFcnJvciJfcywgJm9wdF9pbl9zcWxFcnJvcl92YWx1ZUZvdW5k
KTsKLSAgICBib29sIG9wdF9pbl9zY3JlZW5Db2xvcl92YWx1ZUZvdW5kID0gZmFsc2U7Ci0gICAg
U3RyaW5nIG9wdF9pbl9zY3JlZW5Db2xvciA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmlu
ZyhwYXJhbWV0ZXJzLmdldCgpLCAic2NyZWVuQ29sb3IiX3MsICZvcHRfaW5fc2NyZWVuQ29sb3Jf
dmFsdWVGb3VuZCk7Ci0gICAgYm9vbCBvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzX3ZhbHVlRm91bmQg
PSBmYWxzZTsKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IG9wdF9pbl9hbHRlcm5hdGVDb2xvcnMg
PSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRBcnJheShwYXJhbWV0ZXJzLmdldCgpLCAiYWx0ZXJu
YXRlQ29sb3JzIl9zLCAmb3B0X2luX2FsdGVybmF0ZUNvbG9yc192YWx1ZUZvdW5kKTsKLSAgICBi
b29sIG9wdF9pbl9wcmludENvbG9yX3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAgICBTdHJpbmcgb3B0
X2luX3ByaW50Q29sb3IgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVy
cy5nZXQoKSwgInByaW50Q29sb3IiX3MsICZvcHRfaW5fcHJpbnRDb2xvcl92YWx1ZUZvdW5kKTsK
LSAgICBpZiAobV9iYWNrZW5kRGlzcGF0Y2hlci0+aGFzUHJvdG9jb2xFcnJvcnMoKSkgewotICAg
ICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNw
YXRjaGVyOjpJbnZhbGlkUGFyYW1zLCAiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICdEYXRhYmFz
ZS5leGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzJyBjYW4ndCBiZSBwcm9jZXNzZWQiX3MpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCi0gICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBt
X2FsdGVybmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMocmVxdWVz
dElkLCBvcHRfaW5fY29sdW1uTmFtZXNfdmFsdWVGb3VuZCA/IG9wdF9pbl9jb2x1bW5OYW1lcy5n
ZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9ub3Rlc192YWx1ZUZvdW5kID8gJm9wdF9pbl9ub3RlcyA6
IG51bGxwdHIsIG9wdF9pbl90aW1lc3RhbXBfdmFsdWVGb3VuZCA/ICZvcHRfaW5fdGltZXN0YW1w
IDogbnVsbHB0ciwgb3B0X2luX3ZhbHVlc192YWx1ZUZvdW5kID8gb3B0X2luX3ZhbHVlcy5nZXQo
KSA6IG51bGxwdHIsIG9wdF9pbl9wYXlsb2FkX3ZhbHVlRm91bmQgPyBvcHRfaW5fcGF5bG9hZC5n
ZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9kYXRhYmFzZUlkX3ZhbHVlRm91bmQgPyAmb3B0X2luX2Rh
dGFiYXNlSWQgOiBudWxscHRyLCBvcHRfaW5fc3FsRXJyb3JfdmFsdWVGb3VuZCA/IG9wdF9pbl9z
cWxFcnJvci5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9zY3JlZW5Db2xvcl92YWx1ZUZvdW5kID8g
Jm9wdF9pbl9zY3JlZW5Db2xvciA6IG51bGxwdHIsIG9wdF9pbl9hbHRlcm5hdGVDb2xvcnNfdmFs
dWVGb3VuZCA/IG9wdF9pbl9hbHRlcm5hdGVDb2xvcnMuZ2V0KCkgOiBudWxscHRyLCBvcHRfaW5f
cHJpbnRDb2xvcl92YWx1ZUZvdW5kID8gJm9wdF9pbl9wcmludENvbG9yIDogbnVsbHB0cik7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIEVycm9yU3RyaW5nIGVycm9yOwot
ICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0g
ICAgUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gb3V0X2NvbHVtbk5hbWVzOwotICAgIE9w
dGlvbmFsPFN0cmluZz4gb3V0X25vdGVzOwotICAgIE9wdGlvbmFsPGRvdWJsZT4gb3V0X3RpbWVz
dGFtcDsKLSAgICBPcHRpb25hbDxKU09OOjpPYmplY3Q+IG91dF92YWx1ZXM7Ci0gICAgT3B0aW9u
YWw8SlNPTjo6VmFsdWU+IG91dF9wYXlsb2FkOwotICAgIE9wdGlvbmFsPGludD4gb3V0X2RhdGFi
YXNlSWQ7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4g
b3V0X3NxbEVycm9yOwotICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5
Q29sb3JzIG91dF9zY3JlZW5Db2xvcjsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6OkNvbG9yTGlzdD4gb3V0X2FsdGVybmF0ZUNvbG9yczsKLSAgICBEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciBvdXRfcHJpbnRDb2xvcjsKLSAgICBt
X2FnZW50LT5leGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGVycm9yLCBvcHRfaW5fY29sdW1u
TmFtZXNfdmFsdWVGb3VuZCA/IG9wdF9pbl9jb2x1bW5OYW1lcy5nZXQoKSA6IG51bGxwdHIsIG9w
dF9pbl9ub3Rlc192YWx1ZUZvdW5kID8gJm9wdF9pbl9ub3RlcyA6IG51bGxwdHIsIG9wdF9pbl90
aW1lc3RhbXBfdmFsdWVGb3VuZCA/ICZvcHRfaW5fdGltZXN0YW1wIDogbnVsbHB0ciwgb3B0X2lu
X3ZhbHVlc192YWx1ZUZvdW5kID8gb3B0X2luX3ZhbHVlcy5nZXQoKSA6IG51bGxwdHIsIG9wdF9p
bl9wYXlsb2FkX3ZhbHVlRm91bmQgPyBvcHRfaW5fcGF5bG9hZC5nZXQoKSA6IG51bGxwdHIsIG9w
dF9pbl9kYXRhYmFzZUlkX3ZhbHVlRm91bmQgPyAmb3B0X2luX2RhdGFiYXNlSWQgOiBudWxscHRy
LCBvcHRfaW5fc3FsRXJyb3JfdmFsdWVGb3VuZCA/IG9wdF9pbl9zcWxFcnJvci5nZXQoKSA6IG51
bGxwdHIsIG9wdF9pbl9zY3JlZW5Db2xvcl92YWx1ZUZvdW5kID8gJm9wdF9pbl9zY3JlZW5Db2xv
ciA6IG51bGxwdHIsIG9wdF9pbl9hbHRlcm5hdGVDb2xvcnNfdmFsdWVGb3VuZCA/IG9wdF9pbl9h
bHRlcm5hdGVDb2xvcnMuZ2V0KCkgOiBudWxscHRyLCBvcHRfaW5fcHJpbnRDb2xvcl92YWx1ZUZv
dW5kID8gJm9wdF9pbl9wcmludENvbG9yIDogbnVsbHB0ciwgb3V0X2NvbHVtbk5hbWVzLCBvdXRf
bm90ZXMsIG91dF90aW1lc3RhbXAsIG91dF92YWx1ZXMsIG91dF9wYXlsb2FkLCBvdXRfZGF0YWJh
c2VJZCwgb3V0X3NxbEVycm9yLCBvdXRfc2NyZWVuQ29sb3IsIG91dF9hbHRlcm5hdGVDb2xvcnMs
IG91dF9wcmludENvbG9yKTsKLQotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIHsKLSAgICAgICAg
aWYgKG91dF9jb2x1bW5OYW1lcykKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoImNvbHVt
bk5hbWVzIl9zLCBvdXRfY29sdW1uTmFtZXMpOwotICAgICAgICBpZiAob3V0X25vdGVzLmhhc1Zh
bHVlKCkpCi0gICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZygibm90ZXMiX3MsICpvdXRfbm90
ZXMpOwotICAgICAgICBpZiAob3V0X3RpbWVzdGFtcC5oYXNWYWx1ZSgpKQotICAgICAgICAgICAg
cmVzdWx0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgKm91dF90aW1lc3RhbXApOwotICAgICAg
ICBpZiAob3V0X3ZhbHVlcy5oYXNWYWx1ZSgpKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRPYmpl
Y3QoInZhbHVlcyJfcywgKm91dF92YWx1ZXMpOwotICAgICAgICBpZiAob3V0X3BheWxvYWQuaGFz
VmFsdWUoKSkKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsICpvdXRf
cGF5bG9hZCk7Ci0gICAgICAgIGlmIChvdXRfZGF0YWJhc2VJZC5oYXNWYWx1ZSgpKQotICAgICAg
ICAgICAgcmVzdWx0LT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCAqb3V0X2RhdGFiYXNlSWQp
OwotICAgICAgICBpZiAob3V0X3NxbEVycm9yKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRPYmpl
Y3QoInNxbEVycm9yIl9zLCBvdXRfc3FsRXJyb3IpOwotICAgICAgICBpZiAob3V0X3NjcmVlbkNv
bG9yLmhhc1ZhbHVlKCkpCi0gICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZygic2NyZWVuQ29s
b3IiX3MsICpvdXRfc2NyZWVuQ29sb3IpOwotICAgICAgICBpZiAob3V0X2FsdGVybmF0ZUNvbG9y
cykKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgb3V0
X2FsdGVybmF0ZUNvbG9ycyk7Ci0gICAgICAgIGlmIChvdXRfcHJpbnRDb2xvci5oYXNWYWx1ZSgp
KQotICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsICpvdXRfcHJp
bnRDb2xvcik7Ci0gICAgfQotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0gICAgICAgIG1fYmFj
a2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwg
ZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJv
dG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3Ip
KTsKLX0KLQotdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlTm9PcHRpb25h
bFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1l
dGVycykKLXsKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGluX2NvbHVtbk5hbWVzID0gbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+Z2V0QXJyYXkocGFyYW1ldGVycy5nZXQoKSwgImNvbHVtbk5hbWVzIl9z
LCBudWxscHRyKTsKLSAgICBTdHJpbmcgaW5fbm90ZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5n
ZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgIm5vdGVzIl9zLCBudWxscHRyKTsKLSAgICBkb3Vi
bGUgaW5fdGltZXN0YW1wID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0RG91YmxlKHBhcmFtZXRl
cnMuZ2V0KCksICJ0aW1lc3RhbXAiX3MsIG51bGxwdHIpOwotICAgIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+IGluX3ZhbHVlcyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldE9iamVjdChwYXJhbWV0ZXJz
LmdldCgpLCAidmFsdWVzIl9zLCBudWxscHRyKTsKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IGlu
X3BheWxvYWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRWYWx1ZShwYXJhbWV0ZXJzLmdldCgp
LCAicGF5bG9hZCJfcywgbnVsbHB0cik7Ci0gICAgaW50IGluX2RhdGFiYXNlSWQgPSBtX2JhY2tl
bmREaXNwYXRjaGVyLT5nZXRJbnRlZ2VyKHBhcmFtZXRlcnMuZ2V0KCksICJkYXRhYmFzZUlkIl9z
LCBudWxscHRyKTsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBpbl9zcWxFcnJvciA9IG1fYmFj
a2VuZERpc3BhdGNoZXItPmdldE9iamVjdChwYXJhbWV0ZXJzLmdldCgpLCAic3FsRXJyb3IiX3Ms
IG51bGxwdHIpOwotICAgIFN0cmluZyBpbl9zY3JlZW5Db2xvciA9IG1fYmFja2VuZERpc3BhdGNo
ZXItPmdldFN0cmluZyhwYXJhbWV0ZXJzLmdldCgpLCAic2NyZWVuQ29sb3IiX3MsIG51bGxwdHIp
OwotICAgIFJlZlB0cjxKU09OOjpBcnJheT4gaW5fYWx0ZXJuYXRlQ29sb3JzID0gbV9iYWNrZW5k
RGlzcGF0Y2hlci0+Z2V0QXJyYXkocGFyYW1ldGVycy5nZXQoKSwgImFsdGVybmF0ZUNvbG9ycyJf
cywgbnVsbHB0cik7Ci0gICAgU3RyaW5nIGluX3ByaW50Q29sb3IgPSBtX2JhY2tlbmREaXNwYXRj
aGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgInByaW50Q29sb3IiX3MsIG51bGxwdHIp
OwotICAgIGlmIChtX2JhY2tlbmREaXNwYXRjaGVyLT5oYXNQcm90b2NvbEVycm9ycygpKSB7Ci0g
ICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERp
c3BhdGNoZXI6OkludmFsaWRQYXJhbXMsICJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJ0RhdGFi
YXNlLmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycycgY2FuJ3QgYmUgcHJvY2Vzc2VkIl9zKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQotICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAg
bV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5leGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMocmVxdWVz
dElkLCAqaW5fY29sdW1uTmFtZXMsIGluX25vdGVzLCBpbl90aW1lc3RhbXAsICppbl92YWx1ZXMs
ICppbl9wYXlsb2FkLCBpbl9kYXRhYmFzZUlkLCAqaW5fc3FsRXJyb3IsIGluX3NjcmVlbkNvbG9y
LCAqaW5fYWx0ZXJuYXRlQ29sb3JzLCBpbl9wcmludENvbG9yKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSNlbmRpZgotCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9i
amVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8SlNPTjo6
QXJyYXlPZjxTdHJpbmc+PiBvdXRfY29sdW1uTmFtZXM7Ci0gICAgU3RyaW5nIG91dF9ub3RlczsK
LSAgICBkb3VibGUgb3V0X3RpbWVzdGFtcDsKLSAgICBKU09OOjpPYmplY3Qgb3V0X3ZhbHVlczsK
LSAgICBKU09OOjpWYWx1ZSBvdXRfcGF5bG9hZDsKLSAgICBpbnQgb3V0X2RhdGFiYXNlSWQ7Ci0g
ICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gb3V0X3NxbEVy
cm9yOwotICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzIG91
dF9zY3JlZW5Db2xvcjsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6
OkNvbG9yTGlzdD4gb3V0X2FsdGVybmF0ZUNvbG9yczsKLSAgICBEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciBvdXRfcHJpbnRDb2xvcjsKLSAgICBtX2FnZW50LT5l
eGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMoZXJyb3IsICppbl9jb2x1bW5OYW1lcywgaW5fbm90
ZXMsIGluX3RpbWVzdGFtcCwgKmluX3ZhbHVlcywgKmluX3BheWxvYWQsIGluX2RhdGFiYXNlSWQs
ICppbl9zcWxFcnJvciwgaW5fc2NyZWVuQ29sb3IsICppbl9hbHRlcm5hdGVDb2xvcnMsIGluX3By
aW50Q29sb3IsIG91dF9jb2x1bW5OYW1lcywgJm91dF9ub3RlcywgJm91dF90aW1lc3RhbXAsIG91
dF92YWx1ZXMsICZvdXRfcGF5bG9hZCwgJm91dF9kYXRhYmFzZUlkLCBvdXRfc3FsRXJyb3IsICZv
dXRfc2NyZWVuQ29sb3IsIG91dF9hbHRlcm5hdGVDb2xvcnMsICZvdXRfcHJpbnRDb2xvcik7Ci0K
LSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7Ci0gICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoImNv
bHVtbk5hbWVzIl9zLCBvdXRfY29sdW1uTmFtZXMpOwotICAgICAgICByZXN1bHQtPnNldFN0cmlu
Zygibm90ZXMiX3MsIG91dF9ub3Rlcyk7Ci0gICAgICAgIHJlc3VsdC0+c2V0RG91YmxlKCJ0aW1l
c3RhbXAiX3MsIG91dF90aW1lc3RhbXApOwotICAgICAgICByZXN1bHQtPnNldE9iamVjdCgidmFs
dWVzIl9zLCBvdXRfdmFsdWVzKTsKLSAgICAgICAgcmVzdWx0LT5zZXRWYWx1ZSgicGF5bG9hZCJf
cywgb3V0X3BheWxvYWQpOwotICAgICAgICByZXN1bHQtPnNldEludGVnZXIoImRhdGFiYXNlSWQi
X3MsIG91dF9kYXRhYmFzZUlkKTsKLSAgICAgICAgcmVzdWx0LT5zZXRPYmplY3QoInNxbEVycm9y
Il9zLCBvdXRfc3FsRXJyb3IpOwotICAgICAgICByZXN1bHQtPnNldFN0cmluZygic2NyZWVuQ29s
b3IiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRW
YWx1ZShvdXRfc2NyZWVuQ29sb3IpKTsKLSAgICAgICAgcmVzdWx0LT5zZXRBcnJheSgiYWx0ZXJu
YXRlQ29sb3JzIl9zLCBvdXRfYWx0ZXJuYXRlQ29sb3JzKTsKLSAgICAgICAgcmVzdWx0LT5zZXRT
dHJpbmcoInByaW50Q29sb3IiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpn
ZXRFbnVtQ29uc3RhbnRWYWx1ZShvdXRfcHJpbnRDb2xvcikpOwotICAgIH0KLSAgICBpZiAoIWVy
cm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2Uo
cmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1f
YmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6
OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0
ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3By
YWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8
d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFt
ZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEZyb250ZW5kUm91dGVyOwotCi19IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAot
Ci0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVy
bi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNo
ZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRl
ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3Rv
ciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9u
dGVuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0
cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRp
b25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMu
aD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewot
Ci0KLQotLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCi1uYW1lc3BhY2UgRGF0YWJhc2UgewotY2xh
c3MgRXJyb3I7Ci1lbnVtIGNsYXNzIFByaW1hcnlDb2xvcnM7Ci19IC8vIERhdGFiYXNlCi0vLyBF
bmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCi0KLQotLy8gVHlwZWRlZnMuCi1uYW1lc3BhY2Ug
RGF0YWJhc2UgewotLyogVW5pcXVlIGlkZW50aWZpZXIgb2YgRGF0YWJhc2Ugb2JqZWN0LiAqLwot
dHlwZWRlZiBpbnQgRGF0YWJhc2VJZDsKLXR5cGVkZWYgSlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6
OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gQ29sb3JMaXN0OwotfSAvLyBEYXRh
YmFzZQotLy8gRW5kIG9mIHR5cGVkZWZzLgotCi1uYW1lc3BhY2UgVGVzdEhlbHBlcnMgewotCi1T
dHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpOwotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFsdWUpCi17Ci0gICAgcmV0
dXJuIGdldEVudW1Db25zdGFudFZhbHVlKHN0YXRpY19jYXN0PGludD4oZW51bVZhbHVlKSk7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCi0KLW5hbWVzcGFjZSBEYXRhYmFzZSB7Ci0v
KiAgKi8KLWVudW0gY2xhc3MgUHJpbWFyeUNvbG9ycyB7Ci0gICAgUmVkID0gMCwKLSAgICBHcmVl
biA9IDEsCi0gICAgQmx1ZSA9IDIsCi19OyAvLyBlbnVtIGNsYXNzIFByaW1hcnlDb2xvcnMKLS8q
IERhdGFiYXNlIGVycm9yLiAqLwotY2xhc3MgRXJyb3IgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFz
ZSB7Ci1wdWJsaWM6Ci0gICAgZW51bSB7Ci0gICAgICAgIE5vRmllbGRzU2V0ID0gMCwKLSAgICAg
ICAgTWVzc2FnZVNldCA9IDEgPDwgMCwKLSAgICAgICAgQ29kZVNldCA9IDEgPDwgMSwKLSAgICAg
ICAgQWxsRmllbGRzU2V0ID0gKE1lc3NhZ2VTZXQgfCBDb2RlU2V0KQotICAgIH07Ci0KLSAgICB0
ZW1wbGF0ZTxpbnQgU1RBVEU+Ci0gICAgY2xhc3MgQnVpbGRlciB7Ci0gICAgcHJpdmF0ZToKLSAg
ICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7Ci0KLSAgICAgICAgdGVtcGxhdGU8
aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQ
Pio+KHRoaXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcihSZWY8LypFcnJvciovSlNP
Tjo6T2JqZWN0PiYmIG9iamVjdCkKLSAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmpl
Y3QpKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0Zp
ZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKLSAgICAgICAgfQot
ICAgICAgICBmcmllbmQgY2xhc3MgRXJyb3I7Ci0gICAgcHVibGljOgotCi0gICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIHZhbHVlKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTWVzc2FnZVNl
dCksIHByb3BlcnR5X21lc3NhZ2VfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQt
PnNldFN0cmluZygibWVzc2FnZSJfcywgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxNZXNzYWdlU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8
IENvZGVTZXQ+JiBzZXRDb2RlKGludCB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIENvZGVTZXQpLCBwcm9wZXJ0eV9jb2RlX2FscmVhZHlfc2V0
KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2VyKCJjb2RlIl9zLCB2YWx1ZSk7Ci0g
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvZGVTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBSZWY8RXJyb3I+IHJlbGVhc2UoKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxF
X0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwotICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEVycm9yKSA9PSBzaXplb2YoSlNPTjo6T2Jq
ZWN0KSwgY2Fubm90X2Nhc3QpOwotCi0gICAgICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29u
UmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKLSAgICAgICAgICAgIGF1dG8gcmVz
dWx0ID0gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8RXJyb3I+Kj4oJmpzb25SZXN1bHQp
KTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAg
LyoKLSAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6Ci0gICAgICogUmVmPEVycm9yPiByZXN1
bHQgPSBFcnJvcjo6Y3JlYXRlKCkKLSAgICAgKiAgICAgLnNldE1lc3NhZ2UoLi4uKQotICAgICAq
ICAgICAuc2V0Q29kZSguLi4pCi0gICAgICogICAgIC5yZWxlYXNlKCk7Ci0gICAgICovCi0gICAg
c3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1
cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7Ci0gICAgfQot
fTsKLQotfSAvLyBEYXRhYmFzZQotCi0KLQotbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKLQotdGVt
cGxhdGU8dHlwZW5hbWUgUHJvdG9jb2xFbnVtVHlwZT4KLU9wdGlvbmFsPFByb3RvY29sRW51bVR5
cGU+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZyhjb25zdCBTdHJpbmcmKTsKLQotLy8gRW51bXMg
aW4gdGhlICdEYXRhYmFzZScgRG9tYWluCi10ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6
OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gcGFyc2VFbnVtVmFsdWVGcm9tU3Ry
aW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPihjb25zdCBT
dHJpbmcmKTsKLQotfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKLQotfSAvLyBuYW1lc3BhY2Ug
UHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLW5hbWVzcGFjZSBXVEYgewot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Ci0KLS8vIEhhc2ggZGVj
bGFyYXRpb25zIGluIHRoZSAnRGF0YWJhc2UnIERvbWFpbgotdGVtcGxhdGU8Pgotc3RydWN0IERl
ZmF1bHRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiB7
Ci0gICAgdHlwZWRlZiBJbnRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmlt
YXJ5Q29sb3JzPiBIYXNoOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0jIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbE9iamVjdHMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2Jq
ZWN0cy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRo
LW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
VGVzdFByb3RvY29sT2JqZWN0cy5oIgotCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotbmFt
ZXNwYWNlIFByb3RvY29sIHsKLQotbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKLQotc3RhdGljIGNv
bnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFsdWVzW10gPSB7Ci0gICAgInJlZCIsCi0g
ICAgImdyZWVuIiwKLSAgICAiYmx1ZSIsCi0gICAgImN5YW4iLAotICAgICJtYWdlbnRhIiwKLSAg
ICAieWVsbG93IiwKLSAgICAiYmxhY2siLAotfTsKLQotU3RyaW5nIGdldEVudW1Db25zdGFudFZh
bHVlKGludCBjb2RlKSB7Ci0gICAgcmV0dXJuIGVudW1fY29uc3RhbnRfdmFsdWVzW2NvZGVdOwot
fQotCi0vLyBFbnVtcyBpbiB0aGUgJ0RhdGFiYXNlJyBEb21haW4KLXRlbXBsYXRlPD4KLU9wdGlv
bmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiBwYXJzZUVu
dW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlD
b2xvcnM+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCi17Ci0gICAgc3RhdGljIGNvbnN0
IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0gewotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzOjpSZWQsCi0gICAgICAgIChzaXplX3Qp
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM6OkdyZWVuLAotICAg
ICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3Jz
OjpCbHVlLAotICAgIH07Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAzOyArK2kpCi0gICAg
ICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZh
bHVlc1tpXV0pCi0gICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFi
YXNlOjpQcmltYXJ5Q29sb3JzKWNvbnN0YW50VmFsdWVzW2ldOwotCi0gICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKLX0KLQotCi19IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwotCi0KLQotfSAvLyBu
YW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2luY2x1
ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQotQHByb3RvY29sIFRlc3RQcm90b2NvbERhdGFiYXNlRG9t
YWluSGFuZGxlcjsKLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotY2xhc3MgT2JqQ0luc3Bl
Y3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJuYXRlRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1w
dWJsaWM6Ci0gICAgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoaWQ8VGVz
dFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBo
YW5kbGVyOyB9Ci0gICAgdm9pZCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVx
dWVzdElkLCBjb25zdCBKU09OOjpBcnJheSogaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyog
aW5fbm90ZXMsIGNvbnN0IGRvdWJsZSogaW5fdGltZXN0YW1wLCBjb25zdCBKU09OOjpPYmplY3Qq
IGluX3ZhbHVlcywgY29uc3QgSlNPTjo6VmFsdWUqIGluX3BheWxvYWQsIGNvbnN0IGludCogaW5f
ZGF0YWJhc2VJZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5n
KiBpbl9zY3JlZW5Db2xvciwgY29uc3QgSlNPTjo6QXJyYXkqIGluX2FsdGVybmF0ZUNvbG9ycywg
Y29uc3QgU3RyaW5nKiBpbl9wcmludENvbG9yKSBmaW5hbDsKLSAgICB2b2lkIGV4ZWN1dGVOb09w
dGlvbmFsUGFyYW1ldGVycyhsb25nIHJlcXVlc3RJZCwgY29uc3QgSlNPTjo6QXJyYXkmIGluX2Nv
bHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIGluX25vdGVzLCBkb3VibGUgaW5fdGltZXN0YW1wLCBj
b25zdCBKU09OOjpPYmplY3QmIGluX3ZhbHVlcywgSlNPTjo6VmFsdWUgaW5fcGF5bG9hZCwgaW50
IGluX2RhdGFiYXNlSWQsIGNvbnN0IEpTT046Ok9iamVjdCYgaW5fc3FsRXJyb3IsIGNvbnN0IFN0
cmluZyYgaW5fc2NyZWVuQ29sb3IsIGNvbnN0IEpTT046OkFycmF5JiBpbl9hbHRlcm5hdGVDb2xv
cnMsIGNvbnN0IFN0cmluZyYgaW5fcHJpbnRDb2xvcikgZmluYWw7Ci1wcml2YXRlOgotICAgIFJl
dGFpblB0cjxpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRl
OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bEJhY2tlbmREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5o
IgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRl
ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLW5hbWVzcGFjZSBJbnNw
ZWN0b3IgewotCi12b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpl
eGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBjb25zdCBKU09OOjpB
cnJheSogaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyogaW5fbm90ZXMsIGNvbnN0IGRvdWJs
ZSogaW5fdGltZXN0YW1wLCBjb25zdCBKU09OOjpPYmplY3QqIGluX3ZhbHVlcywgY29uc3QgSlNP
Tjo6VmFsdWUqIGluX3BheWxvYWQsIGNvbnN0IGludCogaW5fZGF0YWJhc2VJZCwgY29uc3QgSlNP
Tjo6T2JqZWN0KiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nKiBpbl9zY3JlZW5Db2xvciwgY29u
c3QgSlNPTjo6QXJyYXkqIGluX2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nKiBpbl9wcmlu
dENvbG9yKQotewotICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxl
Y3RvcihleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vz
c0NhbGxiYWNrOmNvbHVtbk5hbWVzOm5vdGVzOnRpbWVzdGFtcDp2YWx1ZXM6cGF5bG9hZDpkYXRh
YmFzZUlkOnNxbEVycm9yOnNjcmVlbkNvbG9yOmFsdGVybmF0ZUNvbG9yczpwcmludENvbG9yOild
KSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVx
dWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRGF0YWJhc2UuZXhl
Y3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycycgd2FzIG5vdCBmb3VuZCJfcyk7Ci0gICAgICAgIGJh
Y2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQs
IEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwotICAgICAgICBiYWNrZW5k
RGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgIH07Ci0KLSAgICBpZCBzdWNj
ZXNzQ2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmNvbHVtbk5hbWVzLCBOU1N0
cmluZyAqKm5vdGVzLCBkb3VibGUgKnRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoq
dmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipwYXlsb2FkLCBpbnQgKmRhdGFiYXNlSWQs
IFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJh
c2VQcmltYXJ5Q29sb3JzICpzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICoqYWx0
ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFt
ZXRlcnNQcmludENvbG9yICpwcmludENvbG9yKSB7Ci0gICAgICAgIFJlZjxKU09OOjpPYmplY3Q+
IHJlc3VsdE9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihjb2x1bW5OYW1lcywgQCJjb2x1bW5O
YW1lcyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVU
RVIobm90ZXMsIEAibm90ZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BU
SU9OQUxfUEFSQU1FVEVSKHZhbHVlcywgQCJ2YWx1ZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHBheWxvYWQsIEAicGF5bG9hZCIpOwotICAg
ICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoc3FsRXJyb3Is
IEAic3FsRXJyb3IiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxf
UEFSQU1FVEVSKGFsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsKLSAgICAgICAg
aWYgKGNvbHVtbk5hbWVzKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheSgiY29s
dW1uTmFtZXMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KCpjb2x1bW5OYW1lcykpOwotICAgICAgICBp
ZiAobm90ZXMpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygibm90ZXMiX3Ms
ICpub3Rlcyk7Ci0gICAgICAgIGlmICh0aW1lc3RhbXApCi0gICAgICAgICAgICByZXN1bHRPYmpl
Y3QtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCAqdGltZXN0YW1wKTsKLSAgICAgICAgaWYgKHZh
bHVlcykKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFsq
dmFsdWVzIHRvSlNPTk9iamVjdF0pOwotICAgICAgICBpZiAocGF5bG9hZCkKLSAgICAgICAgICAg
IHJlc3VsdE9iamVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFsqcGF5bG9hZCB0b0pTT05PYmpl
Y3RdKTsKLSAgICAgICAgaWYgKGRhdGFiYXNlSWQpCi0gICAgICAgICAgICByZXN1bHRPYmplY3Qt
PnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsICpkYXRhYmFzZUlkKTsKLSAgICAgICAgaWYgKHNx
bEVycm9yKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9z
LCBbKnNxbEVycm9yIHRvSlNPTk9iamVjdF0pOwotICAgICAgICBpZiAoc2NyZWVuQ29sb3IpCi0g
ICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsIHRvUHJv
dG9jb2xTdHJpbmcoKnNjcmVlbkNvbG9yKSk7Ci0gICAgICAgIGlmIChhbHRlcm5hdGVDb2xvcnMp
Ci0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3Ms
IHRvSlNPTlN0cmluZ0FycmF5KCphbHRlcm5hdGVDb2xvcnMpKTsKLSAgICAgICAgaWYgKHByaW50
Q29sb3IpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygicHJpbnRDb2xvciJf
cywgdG9Qcm90b2NvbFN0cmluZygqcHJpbnRDb2xvcikpOwotICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdE9iamVjdCksIGZh
bHNlKTsKLSAgICB9OwotCi0gICAgTlNBcnJheS8qPE5TU3RyaW5nPiovICpvX2luX2NvbHVtbk5h
bWVzOwotICAgIGlmIChpbl9jb2x1bW5OYW1lcykKLSAgICAgICAgb19pbl9jb2x1bW5OYW1lcyA9
IHRvT2JqQ1N0cmluZ0FycmF5KGluX2NvbHVtbk5hbWVzKTsKLSAgICBOU1N0cmluZyAqb19pbl9u
b3RlczsKLSAgICBpZiAoaW5fbm90ZXMpCi0gICAgICAgIG9faW5fbm90ZXMgPSAqaW5fbm90ZXM7
Ci0gICAgZG91YmxlIG9faW5fdGltZXN0YW1wOwotICAgIGlmIChpbl90aW1lc3RhbXApCi0gICAg
ICAgIG9faW5fdGltZXN0YW1wID0gKmluX3RpbWVzdGFtcDsKLSAgICBSV0lQcm90b2NvbEpTT05P
YmplY3QgKm9faW5fdmFsdWVzOwotICAgIGlmIChpbl92YWx1ZXMpCi0gICAgICAgIG9faW5fdmFs
dWVzID0gW1tbUldJUHJvdG9jb2xKU09OT2JqZWN0IGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6
aW5fdmFsdWVzXSBhdXRvcmVsZWFzZV07Ci0gICAgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvX2lu
X3BheWxvYWQ7Ci0gICAgaWYgKGluX3BheWxvYWQpCi0gICAgICAgIG9faW5fcGF5bG9hZCA9IFtb
W1JXSVByb3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0OmluX3BheWxv
YWRdIGF1dG9yZWxlYXNlXTsKLSAgICBpbnQgb19pbl9kYXRhYmFzZUlkOwotICAgIGlmIChpbl9k
YXRhYmFzZUlkKQotICAgICAgICBvX2luX2RhdGFiYXNlSWQgPSAqaW5fZGF0YWJhc2VJZDsKLSAg
ICBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpvX2luX3NxbEVycm9yOwotICAgIGlmIChpbl9z
cWxFcnJvcikKLSAgICAgICAgb19pbl9zcWxFcnJvciA9IFtbW1Rlc3RQcm90b2NvbERhdGFiYXNl
RXJyb3IgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDppbl9zcWxFcnJvcl0gYXV0b3JlbGVhc2Vd
OwotICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycz4gb19pbl9z
Y3JlZW5Db2xvcjsKLSAgICBpZiAoaW5fc2NyZWVuQ29sb3IpCi0gICAgICAgIG9faW5fc2NyZWVu
Q29sb3IgPSBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29s
b3JzPigqaW5fc2NyZWVuQ29sb3IpOwotICAgIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqb19pbl9h
bHRlcm5hdGVDb2xvcnM7Ci0gICAgaWYgKGluX2FsdGVybmF0ZUNvbG9ycykKLSAgICAgICAgb19p
bl9hbHRlcm5hdGVDb2xvcnMgPSB0b09iakNTdHJpbmdBcnJheShpbl9hbHRlcm5hdGVDb2xvcnMp
OwotICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFy
YW1ldGVyc1ByaW50Q29sb3I+IG9faW5fcHJpbnRDb2xvcjsKLSAgICBpZiAoaW5fcHJpbnRDb2xv
cikKLSAgICAgICAgb19pbl9wcmludENvbG9yID0gZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90
b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3I+KCppbl9w
cmludENvbG9yKTsKLQotICAgIFttX2RlbGVnYXRlIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRl
cnNXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNz
Q2FsbGJhY2sgY29sdW1uTmFtZXM6KGluX2NvbHVtbk5hbWVzID8gJm9faW5fY29sdW1uTmFtZXMg
OiBuaWwpIG5vdGVzOihpbl9ub3RlcyA/ICZvX2luX25vdGVzIDogbmlsKSB0aW1lc3RhbXA6KGlu
X3RpbWVzdGFtcCA/ICZvX2luX3RpbWVzdGFtcCA6IG5pbCkgdmFsdWVzOihpbl92YWx1ZXMgPyAm
b19pbl92YWx1ZXMgOiBuaWwpIHBheWxvYWQ6KGluX3BheWxvYWQgPyAmb19pbl9wYXlsb2FkIDog
bmlsKSBkYXRhYmFzZUlkOihpbl9kYXRhYmFzZUlkID8gJm9faW5fZGF0YWJhc2VJZCA6IG5pbCkg
c3FsRXJyb3I6KGluX3NxbEVycm9yID8gJm9faW5fc3FsRXJyb3IgOiBuaWwpIHNjcmVlbkNvbG9y
Oihpbl9zY3JlZW5Db2xvciA/ICZvX2luX3NjcmVlbkNvbG9yLnZhbHVlKCkgOiBuaWwpIGFsdGVy
bmF0ZUNvbG9yczooaW5fYWx0ZXJuYXRlQ29sb3JzID8gJm9faW5fYWx0ZXJuYXRlQ29sb3JzIDog
bmlsKSBwcmludENvbG9yOihpbl9wcmludENvbG9yID8gJm9faW5fcHJpbnRDb2xvci52YWx1ZSgp
IDogbmlsKV07Ci19Ci0KLXZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXI6OmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhsb25nIHJlcXVlc3RJZCwgY29uc3QgSlNP
Tjo6QXJyYXkmIGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIGluX25vdGVzLCBkb3VibGUg
aW5fdGltZXN0YW1wLCBjb25zdCBKU09OOjpPYmplY3QmIGluX3ZhbHVlcywgSlNPTjo6VmFsdWUg
aW5fcGF5bG9hZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IEpTT046Ok9iamVjdCYgaW5fc3Fs
RXJyb3IsIGNvbnN0IFN0cmluZyYgaW5fc2NyZWVuQ29sb3IsIGNvbnN0IEpTT046OkFycmF5JiBp
bl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgaW5fcHJpbnRDb2xvcikKLXsKLSAgICBp
ZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoZXhlY3V0ZU5vT3B0
aW9uYWxQYXJhbWV0ZXJzV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOmNvbHVtbk5h
bWVzOm5vdGVzOnRpbWVzdGFtcDp2YWx1ZXM6cGF5bG9hZDpkYXRhYmFzZUlkOnNxbEVycm9yOnNj
cmVlbkNvbG9yOmFsdGVybmF0ZUNvbG9yczpwcmludENvbG9yOildKSB7Ci0gICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlz
cGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRGF0YWJhc2UuZXhlY3V0ZU5vT3B0aW9uYWxQYXJh
bWV0ZXJzJyB3YXMgbm90IGZvdW5kIl9zKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlkIGVy
cm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6
OlNlcnZlckVycm9yLCBlcnJvcik7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQ
ZW5kaW5nRXJyb3JzKCk7Ci0gICAgfTsKLQotICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oTlNB
cnJheS8qPE5TU3RyaW5nPiovICpjb2x1bW5OYW1lcywgTlNTdHJpbmcgKm5vdGVzLCBkb3VibGUg
dGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnZhbHVlcywgUldJUHJvdG9jb2xKU09O
T2JqZWN0ICpwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJv
ciAqc3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyBzY3JlZW5Db2xv
ciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERh
dGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvciBwcmludENvbG9yKSB7
Ci0gICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdE9iamVjdCA9IEpTT046Ok9iamVjdDo6
Y3JlYXRlKCk7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVS
KGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfUkVRVUlSRURfUEFSQU1FVEVSKG5vdGVzLCBAIm5vdGVzIik7Ci0gICAgICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHZhbHVlcywgQCJ2YWx1ZXMiKTsKLSAgICAg
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIocGF5bG9hZCwgQCJwYXls
b2FkIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHNx
bEVycm9yLCBAInNxbEVycm9yIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlS
RURfUEFSQU1FVEVSKGFsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsKLSAgICAg
ICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0cmluZ0Fy
cmF5KGNvbHVtbk5hbWVzKSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJub3Rl
cyJfcywgbm90ZXMpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldERvdWJsZSgidGltZXN0YW1w
Il9zLCB0aW1lc3RhbXApOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdCgidmFsdWVz
Il9zLCBbdmFsdWVzIHRvSlNPTk9iamVjdF0pOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldFZh
bHVlKCJwYXlsb2FkIl9zLCBbcGF5bG9hZCB0b0pTT05PYmplY3RdKTsKLSAgICAgICAgcmVzdWx0
T2JqZWN0LT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCBkYXRhYmFzZUlkKTsKLSAgICAgICAg
cmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBbc3FsRXJyb3IgdG9KU09OT2Jq
ZWN0XSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywg
dG9Qcm90b2NvbFN0cmluZyhzY3JlZW5Db2xvcikpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNl
dEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KGFsdGVybmF0ZUNv
bG9ycykpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywg
dG9Qcm90b2NvbFN0cmluZyhwcmludENvbG9yKSk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVy
KCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0T2JqZWN0KSwgZmFsc2Up
OwotICAgIH07Ci0KLSAgICBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKm9faW5fY29sdW1uTmFtZXMg
PSB0b09iakNTdHJpbmdBcnJheSgmaW5fY29sdW1uTmFtZXMpOwotICAgIE5TU3RyaW5nICpvX2lu
X25vdGVzID0gaW5fbm90ZXM7Ci0gICAgZG91YmxlIG9faW5fdGltZXN0YW1wID0gaW5fdGltZXN0
YW1wOwotICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb19pbl92YWx1ZXMgPSBbW1tSV0lQcm90
b2NvbEpTT05PYmplY3QgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDomaW5fdmFsdWVzXSBhdXRv
cmVsZWFzZV07Ci0gICAgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvX2luX3BheWxvYWQgPSBbW1tS
V0lQcm90b2NvbEpTT05PYmplY3QgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDomaW5fcGF5bG9h
ZF0gYXV0b3JlbGVhc2VdOwotICAgIGludCBvX2luX2RhdGFiYXNlSWQgPSBpbl9kYXRhYmFzZUlk
OwotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKm9faW5fc3FsRXJyb3IgPSBbW1tUZXN0
UHJvdG9jb2xEYXRhYmFzZUVycm9yIGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6JmluX3NxbEVy
cm9yXSBhdXRvcmVsZWFzZV07Ci0gICAgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VQcmlt
YXJ5Q29sb3JzPiBvX2luX3NjcmVlbkNvbG9yID0gZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90
b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycz4oaW5fc2NyZWVuQ29sb3IpOwotICAgIGlmICghb19p
bl9zY3JlZW5Db2xvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90
b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCAiUGFyYW1ldGVyICdz
Y3JlZW5Db2xvcicgb2YgbWV0aG9kICdEYXRhYmFzZS5leGVjdXRlTm9PcHRpb25hbFBhcmFtZXRl
cnMnIGNhbm5vdCBiZSBwcm9jZXNzZWQiX3MpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAg
IE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqb19pbl9hbHRlcm5hdGVDb2xvcnMgPSB0b09iakNTdHJp
bmdBcnJheSgmaW5fYWx0ZXJuYXRlQ29sb3JzKTsKLSAgICBPcHRpb25hbDxUZXN0UHJvdG9jb2xE
YXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3I+IG9faW5fcHJpbnRD
b2xvciA9IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09w
dGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3I+KGluX3ByaW50Q29sb3IpOwotICAgIGlmICghb19p
bl9wcmludENvbG9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3Rv
Y29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsICJQYXJhbWV0ZXIgJ3By
aW50Q29sb3InIG9mIG1ldGhvZCAnRGF0YWJhc2UuZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJz
JyBjYW5ub3QgYmUgcHJvY2Vzc2VkIl9zKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IFttX2RlbGVnYXRlIGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1dpdGhFcnJvckNhbGxiYWNr
OmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjayBjb2x1bW5OYW1l
czpvX2luX2NvbHVtbk5hbWVzIG5vdGVzOm9faW5fbm90ZXMgdGltZXN0YW1wOm9faW5fdGltZXN0
YW1wIHZhbHVlczpvX2luX3ZhbHVlcyBwYXlsb2FkOm9faW5fcGF5bG9hZCBkYXRhYmFzZUlkOm9f
aW5fZGF0YWJhc2VJZCBzcWxFcnJvcjpvX2luX3NxbEVycm9yIHNjcmVlbkNvbG9yOm9faW5fc2Ny
ZWVuQ29sb3IudmFsdWUoKSBhbHRlcm5hdGVDb2xvcnM6b19pbl9hbHRlcm5hdGVDb2xvcnMgcHJp
bnRDb2xvcjpvX2luX3ByaW50Q29sb3IudmFsdWUoKV07Ci19Ci0KLQotfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJz
Lm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwt
cmV0dXJuLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+Ci0KLV9fYXR0
cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9j
b2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4s
IHNldHRlcj1zZXREYXRhYmFzZUhhbmRsZXI6KSBpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFp
bkhhbmRsZXI+IGRhdGFiYXNlSGFuZGxlcjsKLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24uaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29u
ZmlndXJhdGlvbi5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRz
LXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZp
Z3VyYXRpb24uaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbXBvcnQg
IlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENv
cmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLQotdXNpbmcgbmFtZXNw
YWNlIEluc3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRp
b24KLXsKLSAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwot
ICAgIGlkPFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4gX2RhdGFiYXNlSGFuZGxl
cjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJ
bnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0
XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJUKGNvbnRy
b2xsZXIpOwotICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1cm4gc2VsZjsK
LX0KLQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgW19kYXRhYmFzZUhhbmRsZXIgcmVsZWFzZV07
Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi0tICh2b2lkKXNldERhdGFiYXNlSGFuZGxlcjoo
aWQ8VGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyPiloYW5kbGVyCi17Ci0gICAgaWYg
KGhhbmRsZXIgPT0gX2RhdGFiYXNlSGFuZGxlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgW19k
YXRhYmFzZUhhbmRsZXIgcmVsZWFzZV07Ci0gICAgX2RhdGFiYXNlSGFuZGxlciA9IFtoYW5kbGVy
IHJldGFpbl07Ci0KLSAgICBhdXRvIGFsdGVybmF0ZURpc3BhdGNoZXIgPSBtYWtlVW5pcXVlPE9i
akNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPihoYW5kbGVyKTsKLSAgICBhdXRv
IGFsdGVybmF0ZUFnZW50ID0gbWFrZVVuaXF1ZTxBbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudDxE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyLCBBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVyPj4oIkRhdGFiYXNlIl9zLCAqX2NvbnRyb2xsZXIsIFdURk1vdmUoYWx0ZXJuYXRlRGlzcGF0
Y2hlcikpOwotICAgIF9jb250cm9sbGVyLT5hcHBlbmRFeHRyYUFnZW50KFdURk1vdmUoYWx0ZXJu
YXRlQWdlbnQpKTsKLX0KLQotLSAoaWQ8VGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVy
PilkYXRhYmFzZUhhbmRsZXIKLXsKLSAgICByZXR1cm4gX2RhdGFiYXNlSGFuZGxlcjsKLX0KLQot
QGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1
cm4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQot
dXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bEV2ZW50RGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1j
YWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLSNpbXBv
cnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KLQotCi1AY2xhc3MgVGVz
dFByb3RvY29sRGF0YWJhc2VFcnJvcjsKLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVz
dFByb3RvY29sUGxhdGZvcm0pIHsKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbCwKLSAgICBU
ZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWMsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1JT1Ms
Ci0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUywKLX07Ci0KLQotdHlwZWRlZiBOU19FTlVN
KE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzKSB7Ci0gICAgVGVz
dFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzUmVkLAotICAgIFRlc3RQcm90b2NvbERhdGFi
YXNlUHJpbWFyeUNvbG9yc0dyZWVuLAotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNv
bG9yc0JsdWUsCi19OwotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xE
YXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yKSB7Ci0gICAgVGVz
dFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckN5
YW4sCi0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJz
UHJpbnRDb2xvck1hZ2VudGEsCi0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0
aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvclllbGxvdywKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFz
ZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQmxhY2ssCi19OwotCi10eXBl
ZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRp
b25hbFBhcmFtZXRlcnNQcmludENvbG9yKSB7Ci0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVj
dXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckN5YW4sCi0gICAgVGVzdFByb3RvY29s
RGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvck1hZ2VudGEsCi0g
ICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRD
b2xvclllbGxvdywKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBh
cmFtZXRlcnNQcmludENvbG9yQmxhY2ssCi19OwotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2Vy
LCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29s
b3IpIHsKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVy
c1ByaW50Q29sb3JDeWFuLAotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9u
YWxQYXJhbWV0ZXJzUHJpbnRDb2xvck1hZ2VudGEsCi0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VF
eGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yWWVsbG93LAotICAgIFRlc3RQcm90
b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckJsYWNrLAot
fTsKLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVj
dXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yKSB7Ci0gICAgVGVzdFByb3RvY29sRGF0
YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQ3lhbiwKLSAgICBUZXN0
UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JNYWdl
bnRhLAotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJz
UHJpbnRDb2xvclllbGxvdywKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlv
bmFsUGFyYW1ldGVyc1ByaW50Q29sb3JCbGFjaywKLX07Ci0KLQotX19hdHRyaWJ1dGVfXygodmlz
aWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXJy
b3IgOiBSV0lQcm90b2NvbEpTT05PYmplY3QKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxv
YWQ6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkOwotLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25P
YmplY3Q7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3Nh
Z2UgY29kZTooaW50KWNvZGU7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywg
Y29weSkgTlNTdHJpbmcgKm1lc3NhZ2U7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0
b21pYywgYXNzaWduKSBpbnQgY29kZTsKLUBlbmQKLQotQHByb3RvY29sIFRlc3RQcm90b2NvbERh
dGFiYXNlRG9tYWluSGFuZGxlciA8TlNPYmplY3Q+Ci1Ab3B0aW9uYWwKLS0gKHZvaWQpZXhlY3V0
ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1dpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5n
ICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoTlNBcnJheS8q
PE5TU3RyaW5nPiovICoqY29sdW1uTmFtZXMsIE5TU3RyaW5nICoqbm90ZXMsIGRvdWJsZSAqdGlt
ZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKip2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9i
amVjdCAqKnBheWxvYWQsIGludCAqZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJv
ciAqKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgKnNjcmVlbkNv
bG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2Nv
bERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IgKnByaW50Q29s
b3IpKXN1Y2Nlc3NDYWxsYmFjayBjb2x1bW5OYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICoq
KWNvbHVtbk5hbWVzIG5vdGVzOihOU1N0cmluZyAqKilub3RlcyB0aW1lc3RhbXA6KGRvdWJsZSAq
KXRpbWVzdGFtcCB2YWx1ZXM6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKil2YWx1ZXMgcGF5bG9h
ZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqKXBheWxvYWQgZGF0YWJhc2VJZDooaW50ICopZGF0
YWJhc2VJZCBzcWxFcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKilzcWxFcnJvciBz
Y3JlZW5Db2xvcjooVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzICopc2NyZWVuQ29s
b3IgYWx0ZXJuYXRlQ29sb3JzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopYWx0ZXJuYXRlQ29s
b3JzIHByaW50Q29sb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFy
YW1ldGVyc1ByaW50Q29sb3IgKilwcmludENvbG9yOwotLSAodm9pZClleGVjdXRlTm9PcHRpb25h
bFBhcmFtZXRlcnNXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVy
cm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0cmluZz4q
LyAqY29sdW1uTmFtZXMsIE5TU3RyaW5nICpub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUldJUHJv
dG9jb2xKU09OT2JqZWN0ICp2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5bG9hZCwg
aW50IGRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKnNxbEVycm9yLCBUZXN0
UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0
cmluZz4qLyAqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09w
dGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IgcHJpbnRDb2xvcikpc3VjY2Vzc0NhbGxiYWNrIGNv
bHVtbk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcyBub3RlczooTlNT
dHJpbmcgKilub3RlcyB0aW1lc3RhbXA6KGRvdWJsZSl0aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90
b2NvbEpTT05PYmplY3QgKil2YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICop
cGF5bG9hZCBkYXRhYmFzZUlkOihpbnQpZGF0YWJhc2VJZCBzcWxFcnJvcjooVGVzdFByb3RvY29s
RGF0YWJhc2VFcnJvciAqKXNxbEVycm9yIHNjcmVlbkNvbG9yOihUZXN0UHJvdG9jb2xEYXRhYmFz
ZVByaW1hcnlDb2xvcnMpc2NyZWVuQ29sb3IgYWx0ZXJuYXRlQ29sb3JzOihOU0FycmF5Lyo8TlNT
dHJpbmc+Ki8gKilhbHRlcm5hdGVDb2xvcnMgcHJpbnRDb2xvcjooVGVzdFByb3RvY29sRGF0YWJh
c2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yKXByaW50Q29sb3I7Ci1AZW5k
Ci0KLQotCi0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJp
bGl0eU9iamVjdHMuaD4KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQg
IlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUu
aCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxl
ci5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotCi0KLQotIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRz
LXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgot
I2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgotCi1u
YW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgot
T3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2
YWx1ZSk7Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xQbGF0
Zm9ybSB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQcm90b2Nv
bFBsYXRmb3JtQWxsOgotICAgICAgICByZXR1cm4gImFsbCJfczsKLSAgICBjYXNlIFRlc3RQcm90
b2NvbFBsYXRmb3JtR2VuZXJpYzoKLSAgICAgICAgcmV0dXJuICJnZW5lcmljIl9zOwotICAgIGNh
c2UgVGVzdFByb3RvY29sUGxhdGZvcm1JT1M6Ci0gICAgICAgIHJldHVybiAiaW9zIl9zOwotICAg
IGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzoKLSAgICAgICAgcmV0dXJuICJtYWNvcyJf
czsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xQ
bGF0Zm9ybT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAg
aWYgKHZhbHVlID09ICJhbGwiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1B
bGw7Ci0gICAgaWYgKHZhbHVlID09ICJnZW5lcmljIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90
b2NvbFBsYXRmb3JtR2VuZXJpYzsKLSAgICBpZiAodmFsdWUgPT0gImlvcyIpCi0gICAgICAgIHJl
dHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzsKLSAgICBpZiAodmFsdWUgPT0gIm1hY29zIikK
LSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M7Ci0gICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKLX0KLQotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFBy
b3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkg
ewotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzUmVkOgotICAgICAg
ICByZXR1cm4gInJlZCJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNv
bG9yc0dyZWVuOgotICAgICAgICByZXR1cm4gImdyZWVuIl9zOwotICAgIGNhc2UgVGVzdFByb3Rv
Y29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzQmx1ZToKLSAgICAgICAgcmV0dXJuICJibHVlIl9zOwot
ICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFi
YXNlUHJpbWFyeUNvbG9ycz4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUp
Ci17Ci0gICAgaWYgKHZhbHVlID09ICJyZWQiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29s
RGF0YWJhc2VQcmltYXJ5Q29sb3JzUmVkOwotICAgIGlmICh2YWx1ZSA9PSAiZ3JlZW4iKQotICAg
ICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzR3JlZW47Ci0gICAg
aWYgKHZhbHVlID09ICJibHVlIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNl
UHJpbWFyeUNvbG9yc0JsdWU7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotaW5saW5l
IFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9w
dGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IgdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7
Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRl
cnNQcmludENvbG9yQ3lhbjoKLSAgICAgICAgcmV0dXJuICJjeWFuIl9zOwotICAgIGNhc2UgVGVz
dFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvck1h
Z2VudGE6Ci0gICAgICAgIHJldHVybiAibWFnZW50YSJfczsKLSAgICBjYXNlIFRlc3RQcm90b2Nv
bERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JZZWxsb3c6Ci0g
ICAgICAgIHJldHVybiAieWVsbG93Il9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VF
eGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckJsYWNrOgotICAgICAgICByZXR1
cm4gImJsYWNrIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRl
c3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3I+
IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1
ZSA9PSAiY3lhbiIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVB
bGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQ3lhbjsKLSAgICBpZiAodmFsdWUgPT0gIm1h
Z2VudGEiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0
aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvck1hZ2VudGE7Ci0gICAgaWYgKHZhbHVlID09ICJ5ZWxs
b3ciKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9u
YWxQYXJhbWV0ZXJzUHJpbnRDb2xvclllbGxvdzsKLSAgICBpZiAodmFsdWUgPT0gImJsYWNrIikK
LSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFy
YW1ldGVyc1ByaW50Q29sb3JCbGFjazsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi1p
bmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRl
QWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvciB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFs
dWUpIHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFy
YW1ldGVyc1ByaW50Q29sb3JDeWFuOgotICAgICAgICByZXR1cm4gImN5YW4iX3M7Ci0gICAgY2Fz
ZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENv
bG9yTWFnZW50YToKLSAgICAgICAgcmV0dXJuICJtYWdlbnRhIl9zOwotICAgIGNhc2UgVGVzdFBy
b3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvclllbGxv
dzoKLSAgICAgICAgcmV0dXJuICJ5ZWxsb3ciX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRh
YmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQmxhY2s6Ci0gICAgICAg
IHJldHVybiAiYmxhY2siX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9u
YWw8VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRD
b2xvcj4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYg
KHZhbHVlID09ICJjeWFuIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhl
Y3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JDeWFuOwotICAgIGlmICh2YWx1ZSA9
PSAibWFnZW50YSIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVB
bGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yTWFnZW50YTsKLSAgICBpZiAodmFsdWUgPT0g
InllbGxvdyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxP
cHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yWWVsbG93OwotICAgIGlmICh2YWx1ZSA9PSAiYmxh
Y2siKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9u
YWxQYXJhbWV0ZXJzUHJpbnRDb2xvckJsYWNrOwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19
Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IgdmFsdWUpCi17Ci0gICAgc3dpdGNo
KHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFs
UGFyYW1ldGVyc1ByaW50Q29sb3JDeWFuOgotICAgICAgICByZXR1cm4gImN5YW4iX3M7Ci0gICAg
Y2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50
Q29sb3JNYWdlbnRhOgotICAgICAgICByZXR1cm4gIm1hZ2VudGEiX3M7Ci0gICAgY2FzZSBUZXN0
UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JZZWxs
b3c6Ci0gICAgICAgIHJldHVybiAieWVsbG93Il9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0
YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQmxhY2s6Ci0gICAgICAg
IHJldHVybiAiYmxhY2siX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9u
YWw8VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENv
bG9yPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAo
dmFsdWUgPT0gImN5YW4iKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVj
dXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQ3lhbjsKLSAgICBpZiAodmFsdWUgPT0g
Im1hZ2VudGEiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9P
cHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yTWFnZW50YTsKLSAgICBpZiAodmFsdWUgPT0gInll
bGxvdyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlv
bmFsUGFyYW1ldGVyc1ByaW50Q29sb3JZZWxsb3c7Ci0gICAgaWYgKHZhbHVlID09ICJibGFjayIp
Ci0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFy
YW1ldGVyc1ByaW50Q29sb3JCbGFjazsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi1p
bmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRl
Tm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1
ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFt
ZXRlcnNQcmludENvbG9yQ3lhbjoKLSAgICAgICAgcmV0dXJuICJjeWFuIl9zOwotICAgIGNhc2Ug
VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9y
TWFnZW50YToKLSAgICAgICAgcmV0dXJuICJtYWdlbnRhIl9zOwotICAgIGNhc2UgVGVzdFByb3Rv
Y29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yWWVsbG93Ogot
ICAgICAgICByZXR1cm4gInllbGxvdyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNl
RXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckJsYWNrOgotICAgICAgICByZXR1
cm4gImJsYWNrIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRl
c3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvcj4g
ZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVl
ID09ICJjeWFuIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5v
T3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckN5YW47Ci0gICAgaWYgKHZhbHVlID09ICJtYWdl
bnRhIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9u
YWxQYXJhbWV0ZXJzUHJpbnRDb2xvck1hZ2VudGE7Ci0gICAgaWYgKHZhbHVlID09ICJ5ZWxsb3ci
KQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBh
cmFtZXRlcnNQcmludENvbG9yWWVsbG93OwotICAgIGlmICh2YWx1ZSA9PSAiYmxhY2siKQotICAg
ICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRl
cnNQcmludENvbG9yQmxhY2s7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5t
bQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9u
YWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5o
IgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQ
YXJzZXIuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2
YXRlLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbnRlcmZhY2UgVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zIChEYXRhYmFzZURvbWFpbikKLQotKyAodm9pZClfcGFyc2VE
YXRhYmFzZUlkOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsK
LSsgKHZvaWQpX3BhcnNlUHJpbWFyeUNvbG9yczooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBh
eWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZUNvbG9yTGlzdDooTlNBcnJheS8qPE5T
U3RyaW5nPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotKyAodm9pZClf
cGFyc2VFcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKilvdXRWYWx1ZSBmcm9tUGF5
bG9hZDooaWQpcGF5bG9hZDsKLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zIChEYXRhYmFzZURvbWFpbikKLQotKyAodm9pZClfcGFyc2VEYXRhYmFz
ZUlkOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TTnVtYmVyIGNsYXNzXSk7
Ci0gICAgKm91dFZhbHVlID0gKE5TTnVtYmVyICopcGF5bG9hZDsKLX0KLQotKyAodm9pZClfcGFy
c2VQcmltYXJ5Q29sb3JzOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5
bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TU3Ry
aW5nIGNsYXNzXSk7Ci0gICAgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29s
b3JzPiByZXN1bHQgPSBJbnNwZWN0b3I6OmZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xE
YXRhYmFzZVByaW1hcnlDb2xvcnM+KHBheWxvYWQpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
QkFEX0VOVU1fVkFMVUUocmVzdWx0LCBAIlByaW1hcnlDb2xvcnMiKTsKLSAgICAqb3V0VmFsdWUg
PSBAKHJlc3VsdC52YWx1ZSgpKTsKLX0KLQotKyAodm9pZClfcGFyc2VDb2xvckxpc3Q6KE5TQXJy
YXkvKjxOU1N0cmluZz4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewot
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TQXJyYXkvKjxOU1N0
cmluZz4qLyBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IChOU0FycmF5Lyo8TlNTdHJpbmc+Ki8g
KilwYXlsb2FkOwotfQotCi0rICh2b2lkKV9wYXJzZUVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFz
ZUVycm9yICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1df
RVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7Ci0g
ICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGFsbG9jXSBpbml0V2l0
aFBheWxvYWQ6cGF5bG9hZF07Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlw
ZXMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9w
dGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgot
Ci0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPFdlYklu
c3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0jaW1wb3J0IDx3dGYvQXNz
ZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNl
IEluc3BlY3RvcjsKLQotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sRGF0YWJhc2VFcnJv
cgotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFy
eTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBp
bml0XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JF
UVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJtZXNzYWdlIl0sIEAibWVzc2FnZSIpOwotICAgIHNl
bGYubWVzc2FnZSA9IHBheWxvYWRbQCJtZXNzYWdlIl07Ci0KLSAgICBUSFJPV19FWENFUFRJT05f
Rk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJjb2RlIl0sIEAiY29kZSIpOwotICAgIHNl
bGYuY29kZSA9IFtwYXlsb2FkW0AiY29kZSJdIGludGVnZXJWYWx1ZV07Ci0KLSAgICByZXR1cm4g
c2VsZjsKLX0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90
b2NvbEpTT05PYmplY3QgKilvYmplY3QKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRX
aXRoSlNPTk9iamVjdDpbb2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0KCldKSkKLSAgICAgICAgcmV0
dXJuIG5pbDsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZTooaW50KWNvZGUKLXsKLSAgICBpZiAo
IShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkobWVzc2FnZSwgQCJtZXNzYWdlIik7Ci0K
LSAgICBzZWxmLm1lc3NhZ2UgPSBtZXNzYWdlOwotICAgIHNlbGYuY29kZSA9IGNvZGU7Ci0KLSAg
ICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClzZXRNZXNzYWdlOihOU1N0cmluZyAqKW1lc3Nh
Z2UKLXsKLSAgICBbc3VwZXIgc2V0U3RyaW5nOm1lc3NhZ2UgZm9yS2V5OkAibWVzc2FnZSJdOwot
fQotCi0tIChOU1N0cmluZyAqKW1lc3NhZ2UKLXsKLSAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0Zv
cktleTpAIm1lc3NhZ2UiXTsKLX0KLQotLSAodm9pZClzZXRDb2RlOihpbnQpY29kZQotewotICAg
IFtzdXBlciBzZXRJbnRlZ2VyOmNvZGUgZm9yS2V5OkAiY29kZSJdOwotfQotCi0tIChpbnQpY29k
ZQotewotICAgIHJldHVybiBbc3VwZXIgaW50ZWdlckZvcktleTpAImNvZGUiXTsKLX0KLQotQGVu
ZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVj
dGVkL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24tcmVzdWx0IGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZGVm
aW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbi1yZXN1bHQKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGQ0YzBmZTNmZTNjLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9kZWZpbml0
aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uLXJlc3VsdAorKysgL2Rldi9udWxsCkBAIC0xLDg3
MCArMCwwIEBACi0jIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxh
dGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotIyMj
IEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQotI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbFR5cGVzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVu
ZFJvdXRlci5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgQWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIo
UmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0
Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KLSAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFj
a2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgp
OyB9Ci1wcml2YXRlOgotICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlz
cGF0Y2hlcjsKLX07Ci0KLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jZW5kaWYg
Ly8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jIyMgRW5kIEZpbGU6
IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
ZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90
b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKLQotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KLQotCi19IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVy
cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3Jt
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVk
ZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVS
TkFURV9ESVNQQVRDSEVSUykKLSNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXJzLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi19IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNw
cAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBv
bmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8d3RmL0pT
T05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNl
IEluc3BlY3RvciB7Ci0KLWNsYXNzIEZyb250ZW5kUm91dGVyOwotCi19IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0j
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1
ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotbmFt
ZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLQotCi0KLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3Rv
Y29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xPYmplY3RzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxh
dGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotCi0j
aW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgot
Ci1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLX0g
Ly8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRh
aW5QdHIuaD4KLQotCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLX0gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVy
cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0K
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1w
bGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNo
ZXJzLmgiCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2luY2x1ZGUgIlRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+
Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQot
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8V2ViSW5zcGVj
dG9yL1Rlc3RQcm90b2NvbC5oPgotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVs
dCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0Ci1A
ZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24uaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwu
aCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KLSNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0j
aW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLQot
dXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24KLXsKLSAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9j
b250cm9sbGVyOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdt
ZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBzZWxmID0gW3N1
cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NF
UlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVy
biBzZWxmOwotfQotCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19
Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0K
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9y
bS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBv
cnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucy5oIgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNw
YWNlIEluc3BlY3RvcjsKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0
Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxGb3Vu
ZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29s
SlNPTk9iamVjdC5oPgotCi0KLQotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJv
dG9jb2xQbGF0Zm9ybSkgewotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsLAotICAgIFRlc3RQ
cm90b2NvbFBsYXRmb3JtR2VuZXJpYywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUywKLSAg
ICBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TLAotfTsKLQotCi0KLQotCi0KLQotCi0KLQotI2lt
cG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5o
PgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xJbnRlcm5hbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVm
aW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRl
c3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9B
dWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVz
Lmg+Ci0KLQotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbC5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJz
aW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgT2Jq
Q0VudW1UeXBlPgotT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29u
c3QgU3RyaW5nJiB2YWx1ZSk7Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0
UHJvdG9jb2xQbGF0Zm9ybSB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBjYXNl
IFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOgotICAgICAgICByZXR1cm4gImFsbCJfczsKLSAgICBj
YXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzoKLSAgICAgICAgcmV0dXJuICJnZW5lcmlj
Il9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1JT1M6Ci0gICAgICAgIHJldHVybiAi
aW9zIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzoKLSAgICAgICAgcmV0
dXJuICJtYWNvcyJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxU
ZXN0UHJvdG9jb2xQbGF0Zm9ybT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFs
dWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJhbGwiKQotICAgICAgICByZXR1cm4gVGVzdFByb3Rv
Y29sUGxhdGZvcm1BbGw7Ci0gICAgaWYgKHZhbHVlID09ICJnZW5lcmljIikKLSAgICAgICAgcmV0
dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzsKLSAgICBpZiAodmFsdWUgPT0gImlvcyIp
Ci0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzsKLSAgICBpZiAodmFsdWUg
PT0gIm1hY29zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M7Ci0g
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0K
LSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9y
dCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVBy
b3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsK
LQotCi0KLQotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1t
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFBy
b3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
LmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5o
PgotI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+
Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5q
c29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9nZW5lcmljL2V4cGVjdGVkL2RvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbi1yZXN1bHQKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1YjU5MTdhYTBiLi4wMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9l
eHBlY3RlZC9kb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24tcmVzdWx0CisrKyAvZGV2L251bGwK
QEAgLTEsMTA2MyArMCwwIEBACi0jIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1h
bmRzLmpzCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLWRlYnVnZ2Fi
bGVUeXBlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LS8vIERvbWFpbgotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiRG9tYWluIiwgbnVs
bCk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiRG9tYWluLkNvbW1hbmQiLCBu
dWxsLCBbXSwgW10pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckV2ZW50KCJEb21haW4uRXZl
bnQiLCBudWxsLCBbXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluRGlzcGF0Y2hl
ciA9IEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEaXNwYXRjaGVyLmJpbmQoSW5zcGVjdG9yQmFj
a2VuZCwgIkRvbWFpbiIpOwotSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiRG9tYWlu
IiwgWyJ3ZWItcGFnZSJdKTsKLSMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRz
LmpzCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJsZVR5cGVz
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdt
YSBvbmNlCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQot
I2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xh
c3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZvaWQgc2V0QmFj
a2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsg
bV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KLSAgICBCYWNrZW5k
RGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmRE
aXNwYXRjaGVyLmdldCgpOyB9Ci1wcml2YXRlOgotICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hl
cj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKLX07Ci0KLQotY2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFj
a2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVi
bGljOgotICAgIHZpcnR1YWwgfkFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKCkgeyB9
Ci0gICAgdmlydHVhbCB2b2lkIENvbW1hbmQobG9uZyBjYWxsSWQpID0gMDsKLX07Ci0KLX0gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgotCi0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCi0jIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0
Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25j
ZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10eXBlZGVmIFN0cmluZyBF
cnJvclN0cmluZzsKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQotY2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXI7Ci0jZW5kaWYgLy8gRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0KLWNsYXNzIERvbWFpbkJhY2tl
bmREaXNwYXRjaGVySGFuZGxlciB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIENvbW1hbmQo
RXJyb3JTdHJpbmcmKSA9IDA7Ci1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB+RG9tYWluQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyKCk7Ci19OwotCi1jbGFzcyBEb21haW5CYWNrZW5kRGlzcGF0Y2hl
ciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6
Ci0gICAgc3RhdGljIFJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmRE
aXNwYXRjaGVyJiwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdm9pZCBk
aXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpP
YmplY3Q+JiYgbWVzc2FnZSkgZmluYWw7Ci1wcml2YXRlOgotICAgIHZvaWQgQ29tbWFuZChsb25n
IHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKLSNpZiBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLXB1YmxpYzoKLSAgICB2b2lkIHNl
dEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIqIGFs
dGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlz
cGF0Y2hlcjsgfQotcHJpdmF0ZToKLSAgICBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hl
ciogbV9hbHRlcm5hdGVEaXNwYXRjaGVyIHsgbnVsbHB0ciB9OwotI2VuZGlmCi1wcml2YXRlOgot
ICAgIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiwgRG9tYWluQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyKiBtX2FnZW50IHsgbnVsbHB0ciB9OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
Ci0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBkb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRl
c3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNs
dWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSNpbmNsdWRl
ICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNl
IEluc3BlY3RvciB7Ci0KLURvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6fkRvbWFpbkJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQotCi1SZWY8RG9tYWluQmFja2VuZERpc3BhdGNo
ZXI+IERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImIGJh
Y2tlbmREaXNwYXRjaGVyLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQot
ewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKGJhY2tl
bmREaXNwYXRjaGVyLCBhZ2VudCkpOwotfQotCi1Eb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6RG9t
YWluQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVy
LCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQotICAgIDogU3VwcGxlbWVu
dGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCi0gICAgLCBtX2FnZW50KGFn
ZW50KQotewotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRv
bWFpbigiRG9tYWluIl9zLCB0aGlzKTsKLX0KLQotdm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hl
cjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNP
Tjo6T2JqZWN0PiYmIG1lc3NhZ2UpCi17Ci0gICAgUmVmPERvbWFpbkJhY2tlbmREaXNwYXRjaGVy
PiBwcm90ZWN0KCp0aGlzKTsKLQotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7
Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRlcnMpOwotCi0gICAg
aWYgKG1ldGhvZCA9PSAiQ29tbWFuZCIpCi0gICAgICAgIENvbW1hbmQocmVxdWVzdElkLCBXVEZN
b3ZlKHBhcmFtZXRlcnMpKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAi
J0RvbWFpbi4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOwotfQotCi12b2lkIERvbWFp
bkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6
T2JqZWN0PiYmKQotewotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQotICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVE
aXNwYXRjaGVyLT5Db21tYW5kKHJlcXVlc3RJZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0j
ZW5kaWYKLQotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJl
c3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgbV9hZ2VudC0+Q29tbWFuZChlcnJv
cik7Ci0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAg
ICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3Io
QmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0
Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEg
b25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPHd0Zi9K
U09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFj
ZSBJbnNwZWN0b3IgewotCi1jbGFzcyBGcm9udGVuZFJvdXRlcjsKLQotY2xhc3MgRG9tYWluRnJv
bnRlbmREaXNwYXRjaGVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoK
LSAgICBEb21haW5Gcm9udGVuZERpc3BhdGNoZXIoRnJvbnRlbmRSb3V0ZXImIGZyb250ZW5kUm91
dGVyKSA6IG1fZnJvbnRlbmRSb3V0ZXIoZnJvbnRlbmRSb3V0ZXIpIHsgfQotICAgIHZvaWQgRXZl
bnQoKTsKLXByaXZhdGU6Ci0gICAgRnJvbnRlbmRSb3V0ZXImIG1fZnJvbnRlbmRSb3V0ZXI7Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5k
RGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMu
Y3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLWRlYnVnZ2FibGVU
eXBlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgot
Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi12
b2lkIERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcjo6RXZlbnQoKQotewotICAgIFJlZjxKU09OOjpP
YmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVz
c2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOwotCi0gICAgbV9m
cm9udGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5k
RGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJsZVR5cGVz
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdt
YSBvbmNlCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVz
Lmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7
Ci0KLQotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotCi0KLQotCi0KLQotfSAvLyBuYW1l
c3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbE9iamVjdHMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2Jq
ZWN0cy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdn
YWJsZVR5cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIK
LQotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLQot
Ci19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQot
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5Q
dHIuaD4KLQotQHByb3RvY29sIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI7Ci0KLW5h
bWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLWNsYXNzIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5k
RGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hl
ciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgT2JqQ0luc3Bl
Y3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhh
bmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KLSAgICB2b2lkIENvbW1h
bmQobG9uZyByZXF1ZXN0SWQpIGZpbmFsOwotcHJpdmF0ZToKLSAgICBSZXRhaW5QdHI8aWQ8VGVz
dFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7Ci19OwotCi19IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlz
cGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNo
ZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLWRlYnVnZ2Fi
bGVUeXBlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNo
ZXJzLmgiCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2luY2x1ZGUgIlRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+
Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi12b2lkIE9iakNJbnNwZWN0b3JEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVlc3RJZCkKLXsKLSAgICBpZiAoIVttX2Rl
bGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoQ29tbWFuZFdpdGhFcnJvckNhbGxi
YWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5y
ZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5v
dEZvdW5kLCAiJ0RvbWFpbi5Db21tYW5kJyB3YXMgbm90IGZvdW5kIl9zKTsKLSAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwg
QmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7Ci0gICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgfTsKLQotICAgIGlkIHN1Y2Nl
c3NDYWxsYmFjayA9IF57Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25z
ZShyZXF1ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKLSAgICB9OwotCi0g
ICAgW21fZGVsZWdhdGUgQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3Vj
Y2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107Ci19Ci0KLQotfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1t
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8V2ViSW5z
cGVjdG9yL1Rlc3RQcm90b2NvbC5oPgotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVm
YXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0
Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluLCBzZXR0ZXI9c2V0RG9tYWluSGFuZGxlcjop
IGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IGRvbWFpbkhhbmRsZXI7Ci1AcHJv
cGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50
RGlzcGF0Y2hlciAqZG9tYWluRXZlbnREaXNwYXRjaGVyOwotQGVuZAotCi0KLSMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xDb25maWd1cmF0aW9uLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
ZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKLQot
I2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJh
Y2tlbmREaXNwYXRjaGVycy5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlz
cGF0Y2hhYmxlQWdlbnQuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5z
cGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0
ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsK
LQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KLXsKLSAgICBBdWdt
ZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotICAgIGlkPFRlc3RQcm90
b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IF9kb21haW5IYW5kbGVyOwotICAgIFRlc3RQcm90b2Nv
bERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqX2RvbWFpbkV2ZW50RGlzcGF0Y2hlcjsKLX0K
LQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0
b3JDb250cm9sbGVyKiljb250cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAg
ICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIp
OwotICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQot
LSAodm9pZClkZWFsbG9jCi17Ci0gICAgW19kb21haW5IYW5kbGVyIHJlbGVhc2VdOwotICAgIFtf
ZG9tYWluRXZlbnREaXNwYXRjaGVyIHJlbGVhc2VdOwotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0K
LQotLSAodm9pZClzZXREb21haW5IYW5kbGVyOihpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5I
YW5kbGVyPiloYW5kbGVyCi17Ci0gICAgaWYgKGhhbmRsZXIgPT0gX2RvbWFpbkhhbmRsZXIpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIFtfZG9tYWluSGFuZGxlciByZWxlYXNlXTsKLSAgICBfZG9t
YWluSGFuZGxlciA9IFtoYW5kbGVyIHJldGFpbl07Ci0KLSAgICBhdXRvIGFsdGVybmF0ZURpc3Bh
dGNoZXIgPSBtYWtlVW5pcXVlPE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4o
aGFuZGxlcik7Ci0gICAgYXV0byBhbHRlcm5hdGVBZ2VudCA9IG1ha2VVbmlxdWU8QWx0ZXJuYXRl
RGlzcGF0Y2hhYmxlQWdlbnQ8RG9tYWluQmFja2VuZERpc3BhdGNoZXIsIEFsdGVybmF0ZURvbWFp
bkJhY2tlbmREaXNwYXRjaGVyPj4oIkRvbWFpbiJfcywgKl9jb250cm9sbGVyLCBXVEZNb3ZlKGFs
dGVybmF0ZURpc3BhdGNoZXIpKTsKLSAgICBfY29udHJvbGxlci0+YXBwZW5kRXh0cmFBZ2VudChX
VEZNb3ZlKGFsdGVybmF0ZUFnZW50KSk7Ci19Ci0KLS0gKGlkPFRlc3RQcm90b2NvbERvbWFpbkRv
bWFpbkhhbmRsZXI+KWRvbWFpbkhhbmRsZXIKLXsKLSAgICByZXR1cm4gX2RvbWFpbkhhbmRsZXI7
Ci19Ci0KLS0gKFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqKWRvbWFp
bkV2ZW50RGlzcGF0Y2hlcgotewotICAgIGlmICghX2RvbWFpbkV2ZW50RGlzcGF0Y2hlcikKLSAg
ICAgICAgX2RvbWFpbkV2ZW50RGlzcGF0Y2hlciA9IFtbVGVzdFByb3RvY29sRG9tYWluRG9tYWlu
RXZlbnREaXNwYXRjaGVyIGFsbG9jXSBpbml0V2l0aENvbnRyb2xsZXI6X2NvbnRyb2xsZXJdOwot
ICAgIHJldHVybiBfZG9tYWluRXZlbnREaXNwYXRjaGVyOwotfQotCi1AZW5kCi0KLQotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgi
Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8d3Rm
L0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGltcGxlbWVu
dGF0aW9uIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlcgotewotICAgIEF1
Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci19Ci0KLS0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxl
ciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxm
KQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBfY29u
dHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpRXZl
bnQKLXsKLSAgICBjb25zdCBGcm9udGVuZFJvdXRlciYgcm91dGVyID0gX2NvbnRyb2xsZXItPmZy
b250ZW5kUm91dGVyKCk7Ci0KLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpT
T046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9k
Il9zLCAiRG9tYWluLkV2ZW50Il9zKTsKLSAgICByb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdl
LT50b0pTT05TdHJpbmcoKSk7Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5o
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLWRlYnVnZ2FibGVUeXBl
cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBv
cnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJ
UHJvdG9jb2xKU09OT2JqZWN0Lmg+Ci0KLQotCi0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIs
IFRlc3RQcm90b2NvbFBsYXRmb3JtKSB7Ci0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1BbGwsCi0g
ICAgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3Jt
SU9TLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1MsCi19OwotCi0KLQotCi0KLUBwcm90
b2NvbCBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyIDxOU09iamVjdD4KLUBvcHRpb25h
bAotLSAodm9pZClDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVy
cm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKSh2b2lkKSlzdWNjZXNz
Q2FsbGJhY2s7Ci1AZW5kCi0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0Iikp
KQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgOiBO
U09iamVjdAotLSAodm9pZClFdmVudDsKLUBlbmQKLQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3Iv
UldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+Ci0KLSMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJsZVR5cGVz
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9y
dCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0
ZS5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9s
bGVyLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi1AaW50ZXJmYWNlIFRlc3RQcm90
b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAoUHJpdmF0ZSkKLS0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aENvbnRyb2xsZXI6KEluc3BlY3Rvcjo6QXVnbWVudGFibGVJbnNwZWN0b3JDb250
cm9sbGVyKiljb250cm9sbGVyOwotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
SW50ZXJuYWwuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
LmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJsZVR5
cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2lt
cG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xB
cnJheUNvbnZlcnNpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBPYmpDRW51bVR5cGU+Ci1PcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2Nv
bFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29s
U3RyaW5nKFRlc3RQcm90b2NvbFBsYXRmb3JtIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkg
ewotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1BbGw6Ci0gICAgICAgIHJldHVybiAiYWxs
Il9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOgotICAgICAgICByZXR1
cm4gImdlbmVyaWMiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzoKLSAgICAg
ICAgcmV0dXJuICJpb3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOgot
ICAgICAgICByZXR1cm4gIm1hY29zIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5l
IE9wdGlvbmFsPFRlc3RQcm90b2NvbFBsYXRmb3JtPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gImFsbCIpCi0gICAgICAgIHJldHVy
biBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDsKLSAgICBpZiAodmFsdWUgPT0gImdlbmVyaWMiKQot
ICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOwotICAgIGlmICh2YWx1
ZSA9PSAiaW9zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOwotICAg
IGlmICh2YWx1ZSA9PSAibWFjb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZv
cm1NYWNPUzsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi19IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAot
Ci0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNp
bXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9S
V0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0
b3I7Ci0KLQotCi0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgi
Ci0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgot
I2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0K
LXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmct
ZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZG9tYWluLXRhcmdldFR5
cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tcmVzdWx0CmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBkMzBmMjRiNWMzNS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQv
ZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tcmVz
dWx0CisrKyAvZGV2L251bGwKQEAgLTEsMTA2MyArMCwwIEBACi0jIyMgQmVnaW4gRmlsZTogSW5z
cGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotLy8gRG9tYWluCi1J
bnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJEb21haW4iLCBudWxsKTsKLUluc3BlY3Rv
ckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJEb21haW4uQ29tbWFuZCIsIFsicGFnZSIsICJ3b3Jr
ZXIiXSwgW10sIFtdKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudCgiRG9tYWluLkV2
ZW50IiwgbnVsbCwgW10pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbkRpc3BhdGNo
ZXIgPSBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRGlzcGF0Y2hlci5iaW5kKEluc3BlY3RvckJh
Y2tlbmQsICJEb21haW4iKTsKLUluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkRvbWFp
biIsIFsicGFnZSJdKTsKLSMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpz
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZS1tYXRjaGlu
Zy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKLSNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0KLW5hbWVz
cGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1w
dWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3Bh
dGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNw
YXRjaGVyKTsgfQotICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNv
bnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KLXByaXZhdGU6Ci0gICAg
UmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwotfTsKLQotCi1j
bGFzcyBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+QWx0ZXJuYXRlRG9tYWlu
QmFja2VuZERpc3BhdGNoZXIoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChsb25nIGNh
bGxJZCkgPSAwOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSNlbmRpZiAvLyBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSMjIyBFbmQgRmlsZTogVGVz
dEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFj
a2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21h
aW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJp
bmc7Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLWNsYXNz
IEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyOwotI2VuZGlmIC8vIEVOQUJMRShJTlNQ
RUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi1jbGFzcyBEb21haW5CYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXIgewotcHVibGljOgotICAgIHZpcnR1YWwgdm9pZCBDb21tYW5kKEVycm9yU3Ry
aW5nJikgPSAwOwotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgfkRvbWFpbkJhY2tlbmREaXNwYXRj
aGVySGFuZGxlcigpOwotfTsKLQotY2xhc3MgRG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwg
OiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHN0
YXRpYyBSZWY8RG9tYWluQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hl
ciYsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIHZvaWQgZGlzcGF0Y2go
bG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYm
IG1lc3NhZ2UpIGZpbmFsOwotcHJpdmF0ZToKLSAgICB2b2lkIENvbW1hbmQobG9uZyByZXF1ZXN0
SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0jaWYgRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi1wdWJsaWM6Ci0gICAgdm9pZCBzZXRBbHRlcm5h
dGVEaXNwYXRjaGVyKEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVE
aXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7
IH0KLXByaXZhdGU6Ci0gICAgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIqIG1fYWx0
ZXJuYXRlRGlzcGF0Y2hlciB7IG51bGxwdHIgfTsKLSNlbmRpZgotcHJpdmF0ZToKLSAgICBEb21h
aW5CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYsIERvbWFpbkJhY2tlbmREaXNw
YXRjaGVySGFuZGxlciopOwotICAgIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9h
Z2VudCB7IG51bGxwdHIgfTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVu
ZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
ZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pT
T05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKLSNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCi0j
ZW5kaWYKLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLURvbWFpbkJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlcjo6fkRvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQotCi1SZWY8RG9t
YWluQmFja2VuZERpc3BhdGNoZXI+IERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoQmFj
a2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIqIGFnZW50KQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERvbWFpbkJhY2tl
bmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOwotfQotCi1Eb21haW5CYWNr
ZW5kRGlzcGF0Y2hlcjo6RG9tYWluQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXIm
IGJhY2tlbmREaXNwYXRjaGVyLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50
KQotICAgIDogU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIp
Ci0gICAgLCBtX2FnZW50KGFnZW50KQotewotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lz
dGVyRGlzcGF0Y2hlckZvckRvbWFpbigiRG9tYWluIl9zLCB0aGlzKTsKLX0KLQotdm9pZCBEb21h
aW5CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmlu
ZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCi17Ci0gICAgUmVmPERvbWFp
bkJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKLQotICAgIFJlZlB0cjxKU09OOjpP
YmplY3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBh
cmFtZXRlcnMpOwotCi0gICAgaWYgKG1ldGhvZCA9PSAiQ29tbWFuZCIpCi0gICAgICAgIENvbW1h
bmQocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKLSAgICBlbHNlCi0gICAgICAgIG1f
YmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6
Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIp
OwotfQotCi12b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVz
dElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQotewotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQotICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAg
ICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5Db21tYW5kKHJlcXVlc3RJZCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJl
ZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgbV9h
Z2VudC0+Q29tbWFuZChlcnJvcik7Ci0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJl
c3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJl
cG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3Zl
KGVycm9yKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6
IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlu
LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNs
dWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7
Ci0KLWNsYXNzIEZyb250ZW5kUm91dGVyOwotCi1jbGFzcyBEb21haW5Gcm9udGVuZERpc3BhdGNo
ZXIgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIERvbWFpbkZy
b250ZW5kRGlzcGF0Y2hlcihGcm9udGVuZFJvdXRlciYgZnJvbnRlbmRSb3V0ZXIpIDogbV9mcm9u
dGVuZFJvdXRlcihmcm9udGVuZFJvdXRlcikgeyB9Ci0gICAgdm9pZCBFdmVudCgpOwotcHJpdmF0
ZToKLSAgICBGcm9udGVuZFJvdXRlciYgbV9mcm9udGVuZFJvdXRlcjsKLX07Ci0KLX0gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5o
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21h
aW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlz
cGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5k
Um91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5z
cGVjdG9yIHsKLQotdm9pZCBEb21haW5Gcm9udGVuZERpc3BhdGNoZXI6OkV2ZW50KCkKLXsKLSAg
ICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9z
KTsKLQotICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05T
dHJpbmcoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6
IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sT2JqZWN0cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRh
cmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi1uYW1lc3BhY2Ug
UHJvdG9jb2wgewotCi0KLQotCi0KLQotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQot
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVj
dHMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21h
aW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2Jq
ZWN0cy5oIgotCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotbmFtZXNwYWNlIFByb3RvY29s
IHsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1
Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlz
cGF0Y2hlcnMuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLUBwcm90b2NvbCBUZXN0
UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyOwotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQot
Ci1jbGFzcyBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJs
aWMgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIgewotICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwotcHVibGljOgotICAgIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0
Y2hlcihpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVs
ZWdhdGUgPSBoYW5kbGVyOyB9Ci0gICAgdm9pZCBDb21tYW5kKGxvbmcgcmVxdWVzdElkKSBmaW5h
bDsKLXByaXZhdGU6Ci0gICAgUmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhh
bmRsZXI+PiBtX2RlbGVnYXRlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1
Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3Bh
dGNoZXJzLmgiCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2luY2x1ZGUg
IlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVz
Lmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi12b2lkIE9iakNJbnNwZWN0b3JEb21haW5C
YWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVlc3RJZCkKLXsKLSAgICBpZiAoIVtt
X2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoQ29tbWFuZFdpdGhFcnJvckNh
bGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigp
LT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhv
ZE5vdEZvdW5kLCAiJ0RvbWFpbi5Db21tYW5kJyB3YXMgbm90IGZvdW5kIl9zKTsKLSAgICAgICAg
YmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewot
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJ
ZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7Ci0gICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgfTsKLQotICAgIGlkIHN1
Y2Nlc3NDYWxsYmFjayA9IF57Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNw
b25zZShyZXF1ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKLSAgICB9Owot
Ci0gICAgW21fZGVsZWdhdGUgQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sg
c3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107Ci19Ci0KLQotfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJz
Lm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1k
b21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+Ci0KLV9f
YXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJv
dG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRh
aW4sIHNldHRlcj1zZXREb21haW5IYW5kbGVyOikgaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWlu
SGFuZGxlcj4gZG9tYWluSGFuZGxlcjsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkg
VGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyICpkb21haW5FdmVudERpc3Bh
dGNoZXI7Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9u
LmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1k
b21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCi0KLSNp
bXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNr
ZW5kRGlzcGF0Y2hlcnMuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3Bh
dGNoYWJsZUFnZW50Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3Bl
Y3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVy
bmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0K
LUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCi17Ci0gICAgQXVnbWVu
dGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKLSAgICBpZDxUZXN0UHJvdG9j
b2xEb21haW5Eb21haW5IYW5kbGVyPiBfZG9tYWluSGFuZGxlcjsKLSAgICBUZXN0UHJvdG9jb2xE
b21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKl9kb21haW5FdmVudERpc3BhdGNoZXI7Ci19Ci0K
LS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9y
Q29udHJvbGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAg
aWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsK
LSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0g
KHZvaWQpZGVhbGxvYwotewotICAgIFtfZG9tYWluSGFuZGxlciByZWxlYXNlXTsKLSAgICBbX2Rv
bWFpbkV2ZW50RGlzcGF0Y2hlciByZWxlYXNlXTsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0K
LS0gKHZvaWQpc2V0RG9tYWluSGFuZGxlcjooaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFu
ZGxlcj4paGFuZGxlcgotewotICAgIGlmIChoYW5kbGVyID09IF9kb21haW5IYW5kbGVyKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBbX2RvbWFpbkhhbmRsZXIgcmVsZWFzZV07Ci0gICAgX2RvbWFp
bkhhbmRsZXIgPSBbaGFuZGxlciByZXRhaW5dOwotCi0gICAgYXV0byBhbHRlcm5hdGVEaXNwYXRj
aGVyID0gbWFrZVVuaXF1ZTxPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXI+KGhh
bmRsZXIpOwotICAgIGF1dG8gYWx0ZXJuYXRlQWdlbnQgPSBtYWtlVW5pcXVlPEFsdGVybmF0ZURp
c3BhdGNoYWJsZUFnZW50PERvbWFpbkJhY2tlbmREaXNwYXRjaGVyLCBBbHRlcm5hdGVEb21haW5C
YWNrZW5kRGlzcGF0Y2hlcj4+KCJEb21haW4iX3MsICpfY29udHJvbGxlciwgV1RGTW92ZShhbHRl
cm5hdGVEaXNwYXRjaGVyKSk7Ci0gICAgX2NvbnRyb2xsZXItPmFwcGVuZEV4dHJhQWdlbnQoV1RG
TW92ZShhbHRlcm5hdGVBZ2VudCkpOwotfQotCi0tIChpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21h
aW5IYW5kbGVyPilkb21haW5IYW5kbGVyCi17Ci0gICAgcmV0dXJuIF9kb21haW5IYW5kbGVyOwot
fQotCi0tIChUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKilkb21haW5F
dmVudERpc3BhdGNoZXIKLXsKLSAgICBpZiAoIV9kb21haW5FdmVudERpc3BhdGNoZXIpCi0gICAg
ICAgIF9kb21haW5FdmVudERpc3BhdGNoZXIgPSBbW1Rlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2
ZW50RGlzcGF0Y2hlciBhbGxvY10gaW5pdFdpdGhDb250cm9sbGVyOl9jb250cm9sbGVyXTsKLSAg
ICByZXR1cm4gX2RvbWFpbkV2ZW50RGlzcGF0Y2hlcjsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQg
IlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5oIgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNl
IEluc3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2
ZW50RGlzcGF0Y2hlcgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2Nv
bnRyb2xsZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21l
bnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3Vw
ZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VS
VChjb250cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJu
IHNlbGY7Ci19Ci0KLS0gKHZvaWQpRXZlbnQKLXsKLSAgICBjb25zdCBGcm9udGVuZFJvdXRlciYg
cm91dGVyID0gX2NvbnRyb2xsZXItPmZyb250ZW5kUm91dGVyKCk7Ci0KLSAgICBSZWY8SlNPTjo6
T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1l
c3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9zKTsKLSAgICByb3V0
ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Ci19Ci0KLUBlbmQKLQot
Ci0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8Rm91
bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2Nv
bEpTT05PYmplY3QuaD4KLQotCi0KLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFBy
b3RvY29sUGxhdGZvcm0pIHsKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbCwKLSAgICBUZXN0
UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWMsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1JT1MsCi0g
ICAgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUywKLX07Ci0KLQotCi0KLQotQHByb3RvY29sIFRl
c3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXIgPE5TT2JqZWN0PgotQG9wdGlvbmFsCi0tICh2
b2lkKUNvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVy
cm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKHZvaWQpKXN1Y2Nlc3NDYWxsYmFj
azsKLUBlbmQKLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50
ZXJmYWNlIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciA6IE5TT2JqZWN0
Ci0tICh2b2lkKUV2ZW50OwotQGVuZAotCi0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90
b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2wuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRv
bWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3Rv
Y29sSlNPTk9iamVjdFByaXZhdGUuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRh
YmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQot
QGludGVyZmFjZSBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKFByaXZh
dGUpCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihJbnNwZWN0b3I6OkF1Z21l
bnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcjsKLUBlbmQKLQotCi0jIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
ZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFBy
b3RvY29sLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNp
b25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPYmpD
RW51bVR5cGU+Ci1PcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25z
dCBTdHJpbmcmIHZhbHVlKTsKLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQ
cm90b2NvbFBsYXRmb3JtIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2Ug
VGVzdFByb3RvY29sUGxhdGZvcm1BbGw6Ci0gICAgICAgIHJldHVybiAiYWxsIl9zOwotICAgIGNh
c2UgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOgotICAgICAgICByZXR1cm4gImdlbmVyaWMi
X3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzoKLSAgICAgICAgcmV0dXJuICJp
b3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOgotICAgICAgICByZXR1
cm4gIm1hY29zIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRl
c3RQcm90b2NvbFBsYXRmb3JtPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1
ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gImFsbCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9j
b2xQbGF0Zm9ybUFsbDsKLSAgICBpZiAodmFsdWUgPT0gImdlbmVyaWMiKQotICAgICAgICByZXR1
cm4gVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOwotICAgIGlmICh2YWx1ZSA9PSAiaW9zIikK
LSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOwotICAgIGlmICh2YWx1ZSA9
PSAibWFjb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzsKLSAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQot
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2Fi
bGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0KLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgotI2ltcG9ydCA8
V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLQotdXNpbmcgbmFt
ZXNwYWNlIEluc3BlY3RvcjsKLQotCi0KLQotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5t
bQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlLW1h
dGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0K
LSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8V2ViSW5z
cGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLSNpbXBvcnQgPHd0Zi9Bc3Nl
cnRpb25zLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2Ug
SW5zcGVjdG9yOwotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmljL2V4cGVjdGVkL2RvbWFpbi10YXJnZXRUeXBlcy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2RvbWFp
bi10YXJnZXRUeXBlcy5qc29uLXJlc3VsdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
Zjg5NDhhMmY3NDcuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2RvbWFpbi10YXJnZXRUeXBlcy5q
c29uLXJlc3VsdAorKysgL2Rldi9udWxsCkBAIC0xLDEwNjMgKzAsMCBAQAotIyMjIEJlZ2luIEZp
bGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLS8vIERvbWFpbgotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rl
ckRvbWFpbigiRG9tYWluIiwgWyJwYWdlIl0pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNv
bW1hbmQoIkRvbWFpbi5Db21tYW5kIiwgWyJwYWdlIl0sIFtdLCBbXSk7Ci1JbnNwZWN0b3JCYWNr
ZW5kLnJlZ2lzdGVyRXZlbnQoIkRvbWFpbi5FdmVudCIsIFsicGFnZSJdLCBbXSk7Ci1JbnNwZWN0
b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluRGlzcGF0Y2hlciA9IEluc3BlY3RvckJhY2tlbmQucmVn
aXN0ZXJEaXNwYXRjaGVyLmJpbmQoSW5zcGVjdG9yQmFja2VuZCwgIkRvbWFpbiIpOwotSW5zcGVj
dG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiRG9tYWluIiwgbnVsbCk7Ci0jIyMgRW5kIEZpbGU6
IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVy
bmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZG9tYWluLXRhcmdldFR5cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVS
TkFURV9ESVNQQVRDSEVSUykKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCi0jaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotCi1uYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVi
bGljOgotICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRj
aGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0
Y2hlcik7IH0KLSAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25z
dCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Ci1wcml2YXRlOgotICAgIFJl
ZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKLX07Ci0KLQotY2xh
c3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZpcnR1YWwgfkFsdGVybmF0ZURvbWFpbkJh
Y2tlbmREaXNwYXRjaGVyKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIENvbW1hbmQobG9uZyBjYWxs
SWQpID0gMDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jZW5kaWYgLy8gRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jIyMgRW5kIEZpbGU6IFRlc3RB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tl
bmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlu
LXRhcmdldFR5cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0j
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0K
LXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCi1jbGFzcyBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hl
cjsKLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQot
Y2xhc3MgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKLXB1YmxpYzoKLSAgICB2aXJ0
dWFsIHZvaWQgQ29tbWFuZChFcnJvclN0cmluZyYpID0gMDsKLXByb3RlY3RlZDoKLSAgICB2aXJ0
dWFsIH5Eb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKLX07Ci0KLWNsYXNzIERvbWFp
bkJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNw
YXRjaGVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPERvbWFpbkJhY2tlbmREaXNwYXRjaGVy
PiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIqKTsKLSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1l
dGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5hbDsKLXByaXZhdGU6Ci0gICAg
dm9pZCBDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFt
ZXRlcnMpOwotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotcHVi
bGljOgotICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0Y2hlcihBbHRlcm5hdGVEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVybmF0ZURpc3BhdGNo
ZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9Ci1wcml2YXRlOgotICAgIEFsdGVybmF0ZURvbWFp
bkJhY2tlbmREaXNwYXRjaGVyKiBtX2FsdGVybmF0ZURpc3BhdGNoZXIgeyBudWxscHRyIH07Ci0j
ZW5kaWYKLXByaXZhdGU6Ci0gICAgRG9tYWluQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3Bh
dGNoZXImLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICBEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQgeyBudWxscHRyIH07Ci19OwotCi19IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5o
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlcy5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFs
dWVzLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCi0jaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgotI2VuZGlm
Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1Eb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXI6On5Eb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KLQotUmVmPERvbWFpbkJh
Y2tlbmREaXNwYXRjaGVyPiBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEJhY2tlbmRE
aXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyKiBhZ2VudCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEb21haW5CYWNrZW5kRGlz
cGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKLX0KLQotRG9tYWluQmFja2VuZERp
c3BhdGNoZXI6OkRvbWFpbkJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNr
ZW5kRGlzcGF0Y2hlciwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKLSAg
ICA6IFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQotICAg
ICwgbV9hZ2VudChhZ2VudCkKLXsKLSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRp
c3BhdGNoZXJGb3JEb21haW4oIkRvbWFpbiJfcywgdGhpcyk7Ci19Ci0KLXZvaWQgRG9tYWluQmFj
a2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1l
dGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQotewotICAgIFJlZjxEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7Ci0KLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0
PiBwYXJhbWV0ZXJzOwotICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0
ZXJzKTsKLQotICAgIGlmIChtZXRob2QgPT0gIkNvbW1hbmQiKQotICAgICAgICBDb21tYW5kKHJl
cXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRo
b2ROb3RGb3VuZCwgIidEb21haW4uIiArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKLX0K
LQotdm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVlc3RJZCwg
UmVmUHRyPEpTT046Ok9iamVjdD4mJikKLXsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKLSAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAg
IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+Q29tbWFuZChyZXF1ZXN0SWQpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNP
Tjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIG1fYWdlbnQt
PkNvbW1hbmQoZXJyb3IpOwotCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQp
LCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQ
cm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJv
cikpOwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0
QmFja2VuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlz
cGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJn
ZXRUeXBlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1
ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0K
LW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBGcm9udGVuZFJvdXRlcjsKLQotY2xhc3Mg
RG9tYWluRnJvbnRlbmREaXNwYXRjaGVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
LXB1YmxpYzoKLSAgICBEb21haW5Gcm9udGVuZERpc3BhdGNoZXIoRnJvbnRlbmRSb3V0ZXImIGZy
b250ZW5kUm91dGVyKSA6IG1fZnJvbnRlbmRSb3V0ZXIoZnJvbnRlbmRSb3V0ZXIpIHsgfQotICAg
IHZvaWQgRXZlbnQoKTsKLXByaXZhdGU6Ci0gICAgRnJvbnRlbmRSb3V0ZXImIG1fZnJvbnRlbmRS
b3V0ZXI7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVz
dEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlz
cGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRh
cmdldFR5cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJz
LmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7
Ci0KLXZvaWQgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVyOjpFdmVudCgpCi17Ci0gICAgUmVmPEpT
T046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpz
b25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7Ci0KLSAg
ICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkp
OwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0RnJv
bnRlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVj
dHMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBl
cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFn
bWEgb25jZQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBl
cy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewotCi0KLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLQotCi0KLQotCi0KLX0gLy8gbmFt
ZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9i
amVjdHMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdl
dFR5cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLQot
I2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
LQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLQotCi19
IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0
ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgot
Ci1AcHJvdG9jb2wgVGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcjsKLQotbmFtZXNwYWNl
IEluc3BlY3RvciB7Ci0KLQotY2xhc3MgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRj
aGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyIHsKLSAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBPYmpDSW5zcGVjdG9yRG9t
YWluQmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4g
aGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQotICAgIHZvaWQgQ29tbWFuZChsb25n
IHJlcXVlc3RJZCkgZmluYWw7Ci1wcml2YXRlOgotICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9j
b2xEb21haW5Eb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVy
cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0K
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZXMuanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJj
b25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0j
aW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotCi1uYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKLQotdm9pZCBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNo
ZXI6OkNvbW1hbmQobG9uZyByZXF1ZXN0SWQpCi17Ci0gICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNw
b25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKENvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNz
Q2FsbGJhY2s6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9j
b2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidE
b21haW4uQ29tbWFuZCcgd2FzIG5vdCBmb3VuZCJfcyk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNw
YXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigp
LT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgIH07Ci0KLSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sg
PSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElk
LCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7Ci0gICAgfTsKLQotICAgIFttX2RlbGVn
YXRlIENvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFj
azpzdWNjZXNzQ2FsbGJhY2tdOwotfQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0j
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90
b2NvbC5oPgotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRl
cmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0Ci1AcHJvcGVydHkgKG5v
bmF0b21pYywgcmV0YWluLCBzZXR0ZXI9c2V0RG9tYWluSGFuZGxlcjopIGlkPFRlc3RQcm90b2Nv
bERvbWFpbkRvbWFpbkhhbmRsZXI+IGRvbWFpbkhhbmRsZXI7Ci1AcHJvcGVydHkgKG5vbmF0b21p
YywgcmVhZG9ubHkpIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqZG9t
YWluRXZlbnREaXNwYXRjaGVyOwotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbi5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0
aW9uLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5
cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2lt
cG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2xJbnRlcm5hbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgi
Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgot
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+
Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0
Y2hlcnMuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVycy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW1wbGVtZW50YXRpb24g
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29u
dHJvbGxlciogX2NvbnRyb2xsZXI7Ci0gICAgaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFu
ZGxlcj4gX2RvbWFpbkhhbmRsZXI7Ci0gICAgVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnRE
aXNwYXRjaGVyICpfZG9tYWluRXZlbnREaXNwYXRjaGVyOwotfQotCi0tIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRy
b2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAg
ICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRyb2xsZXIg
PSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWRlYWxsb2MKLXsK
LSAgICBbX2RvbWFpbkhhbmRsZXIgcmVsZWFzZV07Ci0gICAgW19kb21haW5FdmVudERpc3BhdGNo
ZXIgcmVsZWFzZV07Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi0tICh2b2lkKXNldERvbWFp
bkhhbmRsZXI6KGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+KWhhbmRsZXIKLXsK
LSAgICBpZiAoaGFuZGxlciA9PSBfZG9tYWluSGFuZGxlcikKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgW19kb21haW5IYW5kbGVyIHJlbGVhc2VdOwotICAgIF9kb21haW5IYW5kbGVyID0gW2hhbmRs
ZXIgcmV0YWluXTsKLQotICAgIGF1dG8gYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IG1ha2VVbmlxdWU8
T2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyPihoYW5kbGVyKTsKLSAgICBhdXRv
IGFsdGVybmF0ZUFnZW50ID0gbWFrZVVuaXF1ZTxBbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudDxE
b21haW5CYWNrZW5kRGlzcGF0Y2hlciwgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXI+
PigiRG9tYWluIl9zLCAqX2NvbnRyb2xsZXIsIFdURk1vdmUoYWx0ZXJuYXRlRGlzcGF0Y2hlcikp
OwotICAgIF9jb250cm9sbGVyLT5hcHBlbmRFeHRyYUFnZW50KFdURk1vdmUoYWx0ZXJuYXRlQWdl
bnQpKTsKLX0KLQotLSAoaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4pZG9tYWlu
SGFuZGxlcgotewotICAgIHJldHVybiBfZG9tYWluSGFuZGxlcjsKLX0KLQotLSAoVGVzdFByb3Rv
Y29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyICopZG9tYWluRXZlbnREaXNwYXRjaGVyCi17
Ci0gICAgaWYgKCFfZG9tYWluRXZlbnREaXNwYXRjaGVyKQotICAgICAgICBfZG9tYWluRXZlbnRE
aXNwYXRjaGVyID0gW1tUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgYWxs
b2NdIGluaXRXaXRoQ29udHJvbGxlcjpfY29udHJvbGxlcl07Ci0gICAgcmV0dXJuIF9kb21haW5F
dmVudERpc3BhdGNoZXI7Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24ubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlz
cGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFy
Z2V0VHlwZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5n
IG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xEb21h
aW5Eb21haW5FdmVudERpc3BhdGNoZXIKLXsKLSAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRy
b2xsZXIqIF9jb250cm9sbGVyOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9s
bGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBz
ZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsK
LSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwot
ICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKUV2ZW50Ci17Ci0gICAgY29uc3QgRnJvbnRl
bmRSb3V0ZXImIHJvdXRlciA9IF9jb250cm9sbGVyLT5mcm9udGVuZFJvdXRlcigpOwotCi0gICAg
UmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwot
ICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7
Ci0gICAgcm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwotfQot
Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1t
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5o
PgotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+Ci0KLQot
Ci0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbFBsYXRmb3JtKSB7Ci0g
ICAgVGVzdFByb3RvY29sUGxhdGZvcm1BbGwsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5l
cmljLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TLAotICAgIFRlc3RQcm90b2NvbFBsYXRm
b3JtTWFjT1MsCi19OwotCi0KLQotCi0KLUBwcm90b2NvbCBUZXN0UHJvdG9jb2xEb21haW5Eb21h
aW5IYW5kbGVyIDxOU09iamVjdD4KLUBvcHRpb25hbAotLSAodm9pZClDb21tYW5kV2l0aEVycm9y
Q2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3ND
YWxsYmFjazoodm9pZCheKSh2b2lkKSlzdWNjZXNzQ2FsbGJhY2s7Ci1AZW5kCi0KLV9fYXR0cmli
dXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xE
b21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgOiBOU09iamVjdAotLSAodm9pZClFdmVudDsKLUBl
bmQKLQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxp
dHlPYmplY3RzLmg+Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRl
c3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9B
dWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVz
Lmg+Ci0KLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVy
IChQcml2YXRlKQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooSW5zcGVjdG9y
OjpBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXI7Ci1AZW5kCi0KLQot
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCA8V2Vi
SW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgotCi1uYW1lc3BhY2UgSW5z
cGVjdG9yIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgotT3B0aW9uYWw8T2Jq
Q0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0KLWlu
bGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xQbGF0Zm9ybSB2YWx1ZSkK
LXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxs
OgotICAgICAgICByZXR1cm4gImFsbCJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3Jt
R2VuZXJpYzoKLSAgICAgICAgcmV0dXJuICJnZW5lcmljIl9zOwotICAgIGNhc2UgVGVzdFByb3Rv
Y29sUGxhdGZvcm1JT1M6Ci0gICAgICAgIHJldHVybiAiaW9zIl9zOwotICAgIGNhc2UgVGVzdFBy
b3RvY29sUGxhdGZvcm1NYWNPUzoKLSAgICAgICAgcmV0dXJuICJtYWNvcyJfczsKLSAgICB9Ci19
Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xQbGF0Zm9ybT4gZnJv
bVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09
ICJhbGwiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1BbGw7Ci0gICAgaWYg
KHZhbHVlID09ICJnZW5lcmljIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3Jt
R2VuZXJpYzsKLSAgICBpZiAodmFsdWUgPT0gImlvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJv
dG9jb2xQbGF0Zm9ybUlPUzsKLSAgICBpZiAodmFsdWUgPT0gIm1hY29zIikKLSAgICAgICAgcmV0
dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10
YXJnZXRUeXBlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotCi0jaW1wb3J0ICJU
ZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKLSNpbXBv
cnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0KLXVzaW5n
IG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotCi0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlw
ZXMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlw
ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1w
b3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmpl
Y3RQcml2YXRlLmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3RmL0pT
T05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0jIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9kb21haW5zLXdpdGgt
dmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZG9tYWlucy13aXRoLXZh
cnlpbmctY29tbWFuZC1zaXplcy5qc29uLXJlc3VsdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMmMwN2NiMTM0N2YuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2RvbWFpbnMtd2l0aC12
YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbi1yZXN1bHQKKysrIC9kZXYvbnVsbApAQCAtMSwxNDU1
ICswLDAgQEAKLSMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21t
YW5kLXNpemVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotLy8gTmV0d29yazEKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIk5ldHdvcmsx
IiwgbnVsbCk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiTmV0d29yazEubG9h
ZFJlc291cmNlMSIsIG51bGwsIFtdLCBbXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9t
YWluKCJOZXR3b3JrMSIsIG51bGwpOwotCi0vLyBOZXR3b3JrMwotSW5zcGVjdG9yQmFja2VuZC5y
ZWdpc3RlckRvbWFpbigiTmV0d29yazMiLCBudWxsKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0
ZXJDb21tYW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2UxIiwgbnVsbCwgW10sIFtdKTsKLUluc3Bl
Y3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2UyIiwgbnVs
bCwgW10sIFtdKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMy5s
b2FkUmVzb3VyY2UzIiwgbnVsbCwgW10sIFtdKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJD
b21tYW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2U0IiwgbnVsbCwgW10sIFtdKTsKLUluc3BlY3Rv
ckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2U1IiwgbnVsbCwg
W10sIFtdKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMy5sb2Fk
UmVzb3VyY2U2IiwgbnVsbCwgW10sIFtdKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21t
YW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2U3IiwgbnVsbCwgW10sIFtdKTsKLUluc3BlY3RvckJh
Y2tlbmQuYWN0aXZhdGVEb21haW4oIk5ldHdvcmszIiwgbnVsbCk7Ci0jIyMgRW5kIEZpbGU6IElu
c3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
ZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xU
eXBlcy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIu
aD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNw
YXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxC
YWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBX
VEZNb3ZlKGRpc3BhdGNoZXIpOyB9Ci0gICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNw
YXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQotcHJp
dmF0ZToKLSAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7
Ci19OwotCi0KLWNsYXNzIEFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIgOiBwdWJs
aWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZpcnR1YWwgfkFs
dGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQg
bG9hZFJlc291cmNlMShsb25nIGNhbGxJZCkgPSAwOwotfTsKLWNsYXNzIEFsdGVybmF0ZU5ldHdv
cmszQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIg
ewotcHVibGljOgotICAgIHZpcnR1YWwgfkFsdGVybmF0ZU5ldHdvcmszQmFja2VuZERpc3BhdGNo
ZXIoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMShsb25nIGNhbGxJZCkgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UyKGxvbmcgY2FsbElkKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTMobG9uZyBjYWxsSWQpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgbG9hZFJlc291cmNlNChsb25nIGNhbGxJZCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBs
b2FkUmVzb3VyY2U1KGxvbmcgY2FsbElkKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNv
dXJjZTYobG9uZyBjYWxsSWQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlNyhs
b25nIGNhbGxJZCkgPSAwOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSNlbmRp
ZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSMjIyBFbmQgRmls
ZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQot
bmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCi0j
aWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi1jbGFzcyBBbHRlcm5h
dGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOwotY2xhc3MgQWx0ZXJuYXRlTmV0d29yazNCYWNr
ZW5kRGlzcGF0Y2hlcjsKLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKLQotY2xhc3MgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewotcHVi
bGljOgotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UxKEVycm9yU3RyaW5nJikgPSAwOwot
cHJvdGVjdGVkOgotICAgIHZpcnR1YWwgfk5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
KCk7Ci19OwotCi1jbGFzcyBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7Ci1wdWJs
aWM6Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTEoRXJyb3JTdHJpbmcmKSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTIoRXJyb3JTdHJpbmcmKSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIGxvYWRSZXNvdXJjZTMoRXJyb3JTdHJpbmcmKSA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIGxvYWRSZXNvdXJjZTQoRXJyb3JTdHJpbmcmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxv
YWRSZXNvdXJjZTUoRXJyb3JTdHJpbmcmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNv
dXJjZTYoRXJyb3JTdHJpbmcmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTco
RXJyb3JTdHJpbmcmKSA9IDA7Ci1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB+TmV0d29yazNCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKLX07Ci0KLWNsYXNzIE5ldHdvcmsxQmFja2VuZERpc3Bh
dGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewotcHVi
bGljOgotICAgIHN0YXRpYyBSZWY8TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJh
Y2tlbmREaXNwYXRjaGVyJiwgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAg
ICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVm
PEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5hbDsKLXByaXZhdGU6Ci0gICAgdm9pZCBsb2Fk
UmVzb3VyY2UxKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRl
cnMpOwotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotcHVibGlj
OgotICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0Y2hlcihBbHRlcm5hdGVOZXR3b3JrMUJhY2tl
bmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hl
ciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KLXByaXZhdGU6Ci0gICAgQWx0ZXJuYXRlTmV0d29y
azFCYWNrZW5kRGlzcGF0Y2hlciogbV9hbHRlcm5hdGVEaXNwYXRjaGVyIHsgbnVsbHB0ciB9Owot
I2VuZGlmCi1wcml2YXRlOgotICAgIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERp
c3BhdGNoZXImLCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIE5ldHdv
cmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50IHsgbnVsbHB0ciB9OwotfTsKLQot
Y2xhc3MgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50
YWxCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxOZXR3b3JrM0Jh
Y2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBOZXR3b3JrM0JhY2tl
bmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQs
IGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFs
OwotcHJpdmF0ZToKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTEobG9uZyByZXF1ZXN0SWQsIFJlZlB0
cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2UyKGxv
bmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwotICAgIHZv
aWQgbG9hZFJlc291cmNlMyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBw
YXJhbWV0ZXJzKTsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTQobG9uZyByZXF1ZXN0SWQsIFJlZlB0
cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2U1KGxv
bmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwotICAgIHZv
aWQgbG9hZFJlc291cmNlNihsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBw
YXJhbWV0ZXJzKTsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTcobG9uZyByZXF1ZXN0SWQsIFJlZlB0
cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCi1wdWJsaWM6Ci0gICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRj
aGVyKEFsdGVybmF0ZU5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNo
ZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQotcHJp
dmF0ZToKLSAgICBBbHRlcm5hdGVOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyKiBtX2FsdGVybmF0
ZURpc3BhdGNoZXIgeyBudWxscHRyIH07Ci0jZW5kaWYKLXByaXZhdGU6Ci0gICAgTmV0d29yazNC
YWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYsIE5ldHdvcmszQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyKik7Ci0gICAgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1f
YWdlbnQgeyBudWxscHRyIH07Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBF
bmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
QmFja2VuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgot
I2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotI2lu
Y2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNlbmRpZgotCi1uYW1l
c3BhY2UgSW5zcGVjdG9yIHsKLQotTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5O
ZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQotTmV0d29yazNCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXI6On5OZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQot
Ci1SZWY8TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4gTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hl
cjo6Y3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgTmV0d29yazFC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQotewotICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIsIGFnZW50KSk7
Ci19Ci0KLU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6Ok5ldHdvcmsxQmFja2VuZERpc3BhdGNo
ZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBOZXR3b3JrMUJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlciogYWdlbnQpCi0gICAgOiBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0
Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKLSAgICAsIG1fYWdlbnQoYWdlbnQpCi17Ci0gICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKCJOZXR3b3JrMSJf
cywgdGhpcyk7Ci19Ci0KLXZvaWQgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2go
bG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYm
IG1lc3NhZ2UpCi17Ci0gICAgUmVmPE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3Qo
KnRoaXMpOwotCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVyczsKLSAgICBtZXNz
YWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFyYW1ldGVycyk7Ci0KLSAgICBpZiAobWV0aG9k
ID09ICJsb2FkUmVzb3VyY2UxIikKLSAgICAgICAgbG9hZFJlc291cmNlMShyZXF1ZXN0SWQsIFdU
Rk1vdmUocGFyYW1ldGVycykpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQs
ICInTmV0d29yazEuIiArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKLX0KLQotdm9pZCBO
ZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UxKGxvbmcgcmVxdWVzdElkLCBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQotewotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQotICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAg
bV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2UxKHJlcXVlc3RJZCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJl
ZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgbV9h
Z2VudC0+bG9hZFJlc291cmNlMShlcnJvcik7Ci0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQot
ICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZN
b3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBX
VEZNb3ZlKGVycm9yKSk7Ci19Ci0KLVJlZjxOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyPiBOZXR3
b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmRE
aXNwYXRjaGVyLCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCi17Ci0g
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5k
RGlzcGF0Y2hlciwgYWdlbnQpKTsKLX0KLQotTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6TmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNo
ZXIsIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKLSAgICA6IFN1cHBs
ZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQotICAgICwgbV9hZ2Vu
dChhZ2VudCkKLXsKLSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJG
b3JEb21haW4oIk5ldHdvcmszIl9zLCB0aGlzKTsKLX0KLQotdm9pZCBOZXR3b3JrM0JhY2tlbmRE
aXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2Qs
IFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKLXsKLSAgICBSZWY8TmV0d29yazNCYWNrZW5k
RGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7Ci0KLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBw
YXJhbWV0ZXJzOwotICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJz
KTsKLQotICAgIHR5cGVkZWYgdm9pZCAoTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6KkNhbGxI
YW5kbGVyKShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKTsK
LSAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxlcj4gRGlzcGF0Y2hNYXA7Ci0g
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPERpc3BhdGNoTWFwPiBkaXNwYXRjaE1hcDsKLSAgICBp
ZiAoZGlzcGF0Y2hNYXAuZ2V0KCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBz
dHJ1Y3QgTWV0aG9kVGFibGUgewotICAgICAgICAgICAgY29uc3QgY2hhciogbmFtZTsKLSAgICAg
ICAgICAgIENhbGxIYW5kbGVyIGhhbmRsZXI7Ci0gICAgICAgIH0gY29tbWFuZHNbXSA9IHsKLSAg
ICAgICAgICAgIHsgImxvYWRSZXNvdXJjZTEiLCAmTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6
bG9hZFJlc291cmNlMSB9LAotICAgICAgICAgICAgeyAibG9hZFJlc291cmNlMiIsICZOZXR3b3Jr
M0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UyIH0sCi0gICAgICAgICAgICB7ICJsb2Fk
UmVzb3VyY2UzIiwgJk5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTMgfSwK
LSAgICAgICAgICAgIHsgImxvYWRSZXNvdXJjZTQiLCAmTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hl
cjo6bG9hZFJlc291cmNlNCB9LAotICAgICAgICAgICAgeyAibG9hZFJlc291cmNlNSIsICZOZXR3
b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U1IH0sCi0gICAgICAgICAgICB7ICJs
b2FkUmVzb3VyY2U2IiwgJk5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTYg
fSwKLSAgICAgICAgICAgIHsgImxvYWRSZXNvdXJjZTciLCAmTmV0d29yazNCYWNrZW5kRGlzcGF0
Y2hlcjo6bG9hZFJlc291cmNlNyB9LAotICAgICAgICB9OwotICAgICAgICBzaXplX3QgbGVuZ3Ro
ID0gV1RGX0FSUkFZX0xFTkdUSChjb21tYW5kcyk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAgICAgICBkaXNwYXRjaE1hcC5nZXQoKS5hZGQoY29t
bWFuZHNbaV0ubmFtZSwgY29tbWFuZHNbaV0uaGFuZGxlcik7Ci0gICAgfQotCi0gICAgYXV0byBm
aW5kUmVzdWx0ID0gZGlzcGF0Y2hNYXAuZ2V0KCkuZmluZChtZXRob2QpOwotICAgIGlmIChmaW5k
UmVzdWx0ID09IGRpc3BhdGNoTWFwLmdldCgpLmVuZCgpKSB7Ci0gICAgICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5v
dEZvdW5kLCAiJ05ldHdvcmszLiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAoKCp0aGlzKS4qZmluZFJlc3VsdC0+dmFsdWUpKHJl
cXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7Ci19Ci0KLXZvaWQgTmV0d29yazNCYWNrZW5k
RGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9i
amVjdD4mJikKLXsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
LSAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlz
cGF0Y2hlci0+bG9hZFJlc291cmNlMShyZXF1ZXN0SWQpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotI2VuZGlmCi0KLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0
PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIG1fYWdlbnQtPmxvYWRSZXNv
dXJjZTEoZXJyb3IpOwotCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBm
YWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90
b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikp
OwotfQotCi12b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTIobG9u
ZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCi17Ci0jaWYgRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0gICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hl
cikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZTIocmVxdWVz
dElkKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAgRXJyb3JTdHJpbmcg
ZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKLSAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2UyKGVycm9yKTsKLQotICAgIGlmICghZXJy
b3IubGVuZ3RoKCkpCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShy
ZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6
U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKLX0KLQotdm9pZCBOZXR3b3JrM0JhY2tlbmRE
aXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmKQotewotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQot
ICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNw
YXRjaGVyLT5sb2FkUmVzb3VyY2UzKHJlcXVlc3RJZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0jZW5kaWYKLQotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+
IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgbV9hZ2VudC0+bG9hZFJlc291
cmNlMyhlcnJvcik7Ci0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZh
bHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3Rv
Y29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7
Ci19Ci0KLXZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNChsb25n
IHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKLXsKLSNpZiBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVy
KSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlNChyZXF1ZXN0
SWQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBFcnJvclN0cmluZyBl
cnJvcjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpOwotICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTQoZXJyb3IpOwotCi0gICAgaWYgKCFlcnJv
ci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJl
cXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpT
ZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOwotfQotCi12b2lkIE5ldHdvcmszQmFja2VuZERp
c3BhdGNoZXI6OmxvYWRSZXNvdXJjZTUobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+JiYpCi17Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0g
ICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3Bh
dGNoZXItPmxvYWRSZXNvdXJjZTUocmVxdWVzdElkKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSNlbmRpZgotCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4g
cmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtX2FnZW50LT5sb2FkUmVzb3Vy
Y2U1KGVycm9yKTsKLQotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0gICAgICAgIG1fYmFja2Vu
ZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFs
c2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9j
b2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsK
LX0KLQotdm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U2KGxvbmcg
cmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQotewotI2lmIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIp
IHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2U2KHJlcXVlc3RJ
ZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIEVycm9yU3RyaW5nIGVy
cm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRl
KCk7Ci0gICAgbV9hZ2VudC0+bG9hZFJlc291cmNlNihlcnJvcik7Ci0KLSAgICBpZiAoIWVycm9y
Lmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVx
dWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFj
a2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNl
cnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Ci19Ci0KLXZvaWQgTmV0d29yazNCYWNrZW5kRGlz
cGF0Y2hlcjo6bG9hZFJlc291cmNlNyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJikKLXsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSAg
ICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0
Y2hlci0+bG9hZFJlc291cmNlNyhyZXF1ZXN0SWQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
I2VuZGlmCi0KLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBy
ZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJj
ZTcoZXJyb3IpOwotCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxz
ZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2Nv
bEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOwot
fQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2Vu
ZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hl
cnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5
aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMu
aCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgRnJvbnRlbmRSb3V0ZXI7
Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmRE
aXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5j
cHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWlu
Zy1jb21tYW5kLXNpemVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3Bh
dGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJv
dXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3Bl
Y3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RG
cm9udGVuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2Jq
ZWN0cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZh
cnlpbmctY29tbWFuZC1zaXplcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5h
bWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLQot
Ci0vLyBUeXBlZGVmcy4KLW5hbWVzcGFjZSBOZXR3b3JrMiB7Ci0vKiBVbmlxdWUgbG9hZGVyIGlk
ZW50aWZpZXIuICovCi10eXBlZGVmIFN0cmluZyBMb2FkZXJJZDsKLX0gLy8gTmV0d29yazIKLS8v
IEVuZCBvZiB0eXBlZGVmcy4KLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgK
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0KLSNpbmNsdWRl
IDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVz
cGFjZSBJbnNwZWN0b3IgewotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotfSAvLyBuYW1l
c3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
ZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWlu
UHRyLmg+Ci0KLUBwcm90b2NvbCBUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI7Ci1A
cHJvdG9jb2wgVGVzdFByb3RvY29sTmV0d29yazNEb21haW5IYW5kbGVyOwotCi1uYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKLQotCi1jbGFzcyBPYmpDSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0
Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyIHsK
LSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBPYmpDSW5zcGVjdG9y
TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhh
bmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KLSAgICB2b2lkIGxvYWRS
ZXNvdXJjZTEobG9uZyByZXF1ZXN0SWQpIGZpbmFsOwotcHJpdmF0ZToKLSAgICBSZXRhaW5QdHI8
aWQ8VGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKLX07Ci0K
LWNsYXNzIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVi
bGljIEFsdGVybmF0ZU5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIgewotICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmRE
aXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbE5ldHdvcmszRG9tYWluSGFuZGxlcj4gaGFuZGxlcikg
eyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQotICAgIHZvaWQgbG9hZFJlc291cmNlMShsb25nIHJl
cXVlc3RJZCkgZmluYWw7Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2UyKGxvbmcgcmVxdWVzdElkKSBm
aW5hbDsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTMobG9uZyByZXF1ZXN0SWQpIGZpbmFsOwotICAg
IHZvaWQgbG9hZFJlc291cmNlNChsb25nIHJlcXVlc3RJZCkgZmluYWw7Ci0gICAgdm9pZCBsb2Fk
UmVzb3VyY2U1KGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTYo
bG9uZyByZXF1ZXN0SWQpIGZpbmFsOwotICAgIHZvaWQgbG9hZFJlc291cmNlNyhsb25nIHJlcXVl
c3RJZCkgZmluYWw7Ci1wcml2YXRlOgotICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xOZXR3
b3JrM0RvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgK
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1h
bmQtc2l6ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRj
aGVycy5oIgotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5o
PgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdm9pZCBPYmpDSW5zcGVjdG9yTmV0d29yazFC
YWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMShsb25nIHJlcXVlc3RJZCkKLXsKLSAgICBp
ZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IobG9hZFJlc291cmNl
MVdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgewotICAgICAgICBiYWNrZW5k
RGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3Bh
dGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmsxLmxvYWRSZXNvdXJjZTEnIHdhcyBub3Qg
Zm91bmQiX3MpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9y
cygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWQgZXJyb3JDYWxsYmFjayA9IF4o
TlNTdHJpbmcgKmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFBy
b3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVy
cm9yKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsK
LSAgICB9OwotCi0gICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KSwgZmFsc2UpOwotICAgIH07Ci0KLSAgICBbbV9kZWxlZ2F0ZSBsb2FkUmVzb3VyY2UxV2l0aEVy
cm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNr
XTsKLX0KLQotCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjps
b2FkUmVzb3VyY2UxKGxvbmcgcmVxdWVzdElkKQotewotICAgIGlmICghW21fZGVsZWdhdGUgcmVz
cG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2UxV2l0aEVycm9yQ2FsbGJhY2s6
c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9y
dFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91
bmQsICInTmV0d29yazMubG9hZFJlc291cmNlMScgd2FzIG5vdCBmb3VuZCJfcyk7Ci0gICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsK
LSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0
SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwotICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgIH07Ci0KLSAgICBpZCBz
dWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVz
cG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7Ci0gICAgfTsK
LQotICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZTFXaXRoRXJyb3JDYWxsYmFjazplcnJvckNh
bGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOwotfQotCi12b2lkIE9iakNJ
bnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UyKGxvbmcgcmVx
dWVzdElkKQotewotICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxl
Y3Rvcihsb2FkUmVzb3VyY2UyV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7
Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVz
dElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMubG9hZFJl
c291cmNlMicgd2FzIG5vdCBmb3VuZCJfcyk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCkt
PnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZCBl
cnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3Bh
dGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVy
OjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5k
UGVuZGluZ0Vycm9ycygpOwotICAgIH07Ci0KLSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeewot
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7Ci0gICAgfTsKLQotICAgIFttX2RlbGVnYXRlIGxv
YWRSZXNvdXJjZTJXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFj
azpzdWNjZXNzQ2FsbGJhY2tdOwotfQotCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tl
bmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UzKGxvbmcgcmVxdWVzdElkKQotewotICAgIGlmICgh
W21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2UzV2l0
aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hl
cjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMubG9hZFJlc291cmNlMycgd2FzIG5vdCBmb3Vu
ZCJfcyk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0
cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9j
b2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3Ip
OwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAg
IH07Ci0KLSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBm
YWxzZSk7Ci0gICAgfTsKLQotICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZTNXaXRoRXJyb3JD
YWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOwot
fQotCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVz
b3VyY2U0KGxvbmcgcmVxdWVzdElkKQotewotICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNU
b1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2U0V2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vz
c0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3Rv
Y29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICIn
TmV0d29yazMubG9hZFJlc291cmNlNCcgd2FzIG5vdCBmb3VuZCJfcyk7Ci0gICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJh
Y2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwotICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgIH07Ci0KLSAgICBpZCBzdWNjZXNz
Q2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2Uo
cmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7Ci0gICAgfTsKLQotICAg
IFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZTRXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNr
IHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOwotfQotCi12b2lkIE9iakNJbnNwZWN0
b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U1KGxvbmcgcmVxdWVzdElk
KQotewotICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihs
b2FkUmVzb3VyY2U1V2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0gICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBC
YWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMubG9hZFJlc291cmNl
NScgd2FzIG5vdCBmb3VuZCJfcyk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQ
ZW5kaW5nRXJyb3JzKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZCBlcnJvckNh
bGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2
ZXJFcnJvciwgZXJyb3IpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGlu
Z0Vycm9ycygpOwotICAgIH07Ci0KLSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAg
ICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmpl
Y3Q6OmNyZWF0ZSgpLCBmYWxzZSk7Ci0gICAgfTsKLQotICAgIFttX2RlbGVnYXRlIGxvYWRSZXNv
dXJjZTVXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNj
ZXNzQ2FsbGJhY2tdOwotfQotCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNw
YXRjaGVyOjpsb2FkUmVzb3VyY2U2KGxvbmcgcmVxdWVzdElkKQotewotICAgIGlmICghW21fZGVs
ZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2U2V2l0aEVycm9y
Q2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVy
KCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0
aG9kTm90Rm91bmQsICInTmV0d29yazMubG9hZFJlc291cmNlNicgd2FzIG5vdCBmb3VuZCJfcyk7
Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAq
ZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJv
cihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwotICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgIH07Ci0K
LSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigp
LT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7
Ci0gICAgfTsKLQotICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZTZXaXRoRXJyb3JDYWxsYmFj
azplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOwotfQotCi12
b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U3
KGxvbmcgcmVxdWVzdElkKQotewotICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVj
dG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2U3V2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxi
YWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJy
b3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29y
azMubG9hZFJlc291cmNlNycgd2FzIG5vdCBmb3VuZCJfcyk7Ci0gICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmRE
aXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgIH07Ci0KLSAgICBpZCBzdWNjZXNzQ2FsbGJh
Y2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVz
dElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7Ci0gICAgfTsKLQotICAgIFttX2Rl
bGVnYXRlIGxvYWRSZXNvdXJjZTdXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nl
c3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOwotfQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQot
Ci0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXpl
cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBv
cnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KLQotX19hdHRyaWJ1dGVfXygodmlzaWJp
bGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24g
OiBOU09iamVjdAotQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNldE5ldHdv
cmsxSGFuZGxlcjopIGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4gbmV0d29y
azFIYW5kbGVyOwotQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNldE5ldHdv
cmszSGFuZGxlcjopIGlkPFRlc3RQcm90b2NvbE5ldHdvcmszRG9tYWluSGFuZGxlcj4gbmV0d29y
azNIYW5kbGVyOwotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJh
dGlvbi5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29t
bWFuZC1zaXplcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKLQotI2ltcG9ydCAiVGVz
dFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRj
aGVycy5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdl
bnQuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJv
bGxlci5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2Vu
ZERpc3BhdGNoZXJzLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcnMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGltcGxlbWVu
dGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KLXsKLSAgICBBdWdtZW50YWJsZUluc3Bl
Y3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotICAgIGlkPFRlc3RQcm90b2NvbE5ldHdvcmsx
RG9tYWluSGFuZGxlcj4gX25ldHdvcmsxSGFuZGxlcjsKLSAgICBpZDxUZXN0UHJvdG9jb2xOZXR3
b3JrM0RvbWFpbkhhbmRsZXI+IF9uZXR3b3JrM0hhbmRsZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29u
dHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAg
ICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBfY29udHJvbGxl
ciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwot
ewotICAgIFtfbmV0d29yazFIYW5kbGVyIHJlbGVhc2VdOwotICAgIFtfbmV0d29yazNIYW5kbGVy
IHJlbGVhc2VdOwotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAodm9pZClzZXROZXR3b3Jr
MUhhbmRsZXI6KGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4paGFuZGxlcgot
ewotICAgIGlmIChoYW5kbGVyID09IF9uZXR3b3JrMUhhbmRsZXIpCi0gICAgICAgIHJldHVybjsK
LQotICAgIFtfbmV0d29yazFIYW5kbGVyIHJlbGVhc2VdOwotICAgIF9uZXR3b3JrMUhhbmRsZXIg
PSBbaGFuZGxlciByZXRhaW5dOwotCi0gICAgYXV0byBhbHRlcm5hdGVEaXNwYXRjaGVyID0gbWFr
ZVVuaXF1ZTxPYmpDSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7
Ci0gICAgYXV0byBhbHRlcm5hdGVBZ2VudCA9IG1ha2VVbmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hh
YmxlQWdlbnQ8TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciwgQWx0ZXJuYXRlTmV0d29yazFCYWNr
ZW5kRGlzcGF0Y2hlcj4+KCJOZXR3b3JrMSJfcywgKl9jb250cm9sbGVyLCBXVEZNb3ZlKGFsdGVy
bmF0ZURpc3BhdGNoZXIpKTsKLSAgICBfY29udHJvbGxlci0+YXBwZW5kRXh0cmFBZ2VudChXVEZN
b3ZlKGFsdGVybmF0ZUFnZW50KSk7Ci19Ci0KLS0gKGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9t
YWluSGFuZGxlcj4pbmV0d29yazFIYW5kbGVyCi17Ci0gICAgcmV0dXJuIF9uZXR3b3JrMUhhbmRs
ZXI7Ci19Ci0KLS0gKHZvaWQpc2V0TmV0d29yazNIYW5kbGVyOihpZDxUZXN0UHJvdG9jb2xOZXR3
b3JrM0RvbWFpbkhhbmRsZXI+KWhhbmRsZXIKLXsKLSAgICBpZiAoaGFuZGxlciA9PSBfbmV0d29y
azNIYW5kbGVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBbX25ldHdvcmszSGFuZGxlciByZWxl
YXNlXTsKLSAgICBfbmV0d29yazNIYW5kbGVyID0gW2hhbmRsZXIgcmV0YWluXTsKLQotICAgIGF1
dG8gYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IG1ha2VVbmlxdWU8T2JqQ0luc3BlY3Rvck5ldHdvcmsz
QmFja2VuZERpc3BhdGNoZXI+KGhhbmRsZXIpOwotICAgIGF1dG8gYWx0ZXJuYXRlQWdlbnQgPSBt
YWtlVW5pcXVlPEFsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50PE5ldHdvcmszQmFja2VuZERpc3Bh
dGNoZXIsIEFsdGVybmF0ZU5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI+PigiTmV0d29yazMiX3Ms
ICpfY29udHJvbGxlciwgV1RGTW92ZShhbHRlcm5hdGVEaXNwYXRjaGVyKSk7Ci0gICAgX2NvbnRy
b2xsZXItPmFwcGVuZEV4dHJhQWdlbnQoV1RGTW92ZShhbHRlcm5hdGVBZ2VudCkpOwotfQotCi0t
IChpZDxUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkhhbmRsZXI+KW5ldHdvcmszSGFuZGxlcgot
ewotICAgIHJldHVybiBfbmV0d29yazNIYW5kbGVyOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbElu
dGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2lt
cG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQot
Ci0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRh
dGlvbi5oPgotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+
Ci0KLQotCi0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbFBsYXRmb3Jt
KSB7Ci0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1BbGwsCi0gICAgVGVzdFByb3RvY29sUGxhdGZv
cm1HZW5lcmljLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TLAotICAgIFRlc3RQcm90b2Nv
bFBsYXRmb3JtTWFjT1MsCi19OwotCi0KLQotCi0KLUBwcm90b2NvbCBUZXN0UHJvdG9jb2xOZXR3
b3JrMURvbWFpbkhhbmRsZXIgPE5TT2JqZWN0PgotQG9wdGlvbmFsCi0tICh2b2lkKWxvYWRSZXNv
dXJjZTFXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2Fs
bGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKHZvaWQpKXN1Y2Nlc3NDYWxsYmFjazsKLUBl
bmQKLQotQHByb3RvY29sIFRlc3RQcm90b2NvbE5ldHdvcmszRG9tYWluSGFuZGxlciA8TlNPYmpl
Y3Q+Ci1Ab3B0aW9uYWwKLS0gKHZvaWQpbG9hZFJlc291cmNlMVdpdGhFcnJvckNhbGxiYWNrOih2
b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZv
aWQoXikodm9pZCkpc3VjY2Vzc0NhbGxiYWNrOwotLSAodm9pZClsb2FkUmVzb3VyY2UyV2l0aEVy
cm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nl
c3NDYWxsYmFjazoodm9pZCheKSh2b2lkKSlzdWNjZXNzQ2FsbGJhY2s7Ci0tICh2b2lkKWxvYWRS
ZXNvdXJjZTNXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9y
Q2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKHZvaWQpKXN1Y2Nlc3NDYWxsYmFjazsK
LS0gKHZvaWQpbG9hZFJlc291cmNlNFdpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5n
ICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikodm9pZCkpc3Vj
Y2Vzc0NhbGxiYWNrOwotLSAodm9pZClsb2FkUmVzb3VyY2U1V2l0aEVycm9yQ2FsbGJhY2s6KHZv
aWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9p
ZCheKSh2b2lkKSlzdWNjZXNzQ2FsbGJhY2s7Ci0tICh2b2lkKWxvYWRSZXNvdXJjZTZXaXRoRXJy
b3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vz
c0NhbGxiYWNrOih2b2lkKF4pKHZvaWQpKXN1Y2Nlc3NDYWxsYmFjazsKLS0gKHZvaWQpbG9hZFJl
c291cmNlN1dpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JD
YWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikodm9pZCkpc3VjY2Vzc0NhbGxiYWNrOwot
QGVuZAotCi0KLQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBh
dGliaWxpdHlPYmplY3RzLmg+Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFBy
b3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgotI2lt
cG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0j
aW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbEludGVybmFsLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZh
cnlpbmctY29tbWFuZC1zaXplcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCA8V2ViSW5zcGVj
dG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9y
IHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgotT3B0aW9uYWw8T2JqQ0VudW1U
eXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0KLWlubGluZSBT
dHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xQbGF0Zm9ybSB2YWx1ZSkKLXsKLSAg
ICBzd2l0Y2godmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOgotICAg
ICAgICByZXR1cm4gImFsbCJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJp
YzoKLSAgICAgICAgcmV0dXJuICJnZW5lcmljIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxh
dGZvcm1JT1M6Ci0gICAgICAgIHJldHVybiAiaW9zIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29s
UGxhdGZvcm1NYWNPUzoKLSAgICAgICAgcmV0dXJuICJtYWNvcyJfczsKLSAgICB9Ci19Ci0KLXRl
bXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xQbGF0Zm9ybT4gZnJvbVByb3Rv
Y29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJhbGwi
KQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1BbGw7Ci0gICAgaWYgKHZhbHVl
ID09ICJnZW5lcmljIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJp
YzsKLSAgICBpZiAodmFsdWUgPT0gImlvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQ
bGF0Zm9ybUlPUzsKLSAgICBpZiAodmFsdWUgPT0gIm1hY29zIikKLSAgICAgICAgcmV0dXJuIFRl
c3RQcm90b2NvbFBsYXRmb3JtTWFjT1M7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQot
Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdp
dGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgi
Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBh
cnNlci5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZh
dGUuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGludGVyZmFjZSBUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMgKE5ldHdvcmsyRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZUxv
YWRlcklkOihOU1N0cmluZyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLQot
QGVuZAotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChOZXR3
b3JrMkRvbWFpbikKLQotKyAodm9pZClfcGFyc2VMb2FkZXJJZDooTlNTdHJpbmcgKiopb3V0VmFs
dWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JB
RF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IChOU1N0
cmluZyAqKXBheWxvYWQ7Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMu
bW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWlu
Zy1jb21tYW5kLXNpemVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJv
dG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNp
bXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0K
LQotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVj
dGVkL2VudW0tdmFsdWVzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZW51bS12YWx1ZXMuanNvbi1yZXN1
bHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwNmZlYmI3OGQ3Li4wMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2Vu
ZXJpYy9leHBlY3RlZC9lbnVtLXZhbHVlcy5qc29uLXJlc3VsdAorKysgL2Rldi9udWxsCkBAIC0x
LDEyMzYgKzAsMCBAQAotIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5q
cwotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotLy8gVHlwZURvbWFpbgot
SW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiVHlwZURvbWFpbiIsIG51bGwpOwotSW5z
cGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIlR5cGVEb21haW4uVHlwZURvbWFpbkVudW0iLCB7
U2hhcmVkOiAic2hhcmVkIiwgUmVkOiAicmVkIiwgR3JlZW46ICJncmVlbiIsIEJsdWU6ICJibHVl
In0pOwotSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiVHlwZURvbWFpbiIsIG51bGwp
OwotCi0vLyBDb21tYW5kRG9tYWluCi1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJD
b21tYW5kRG9tYWluIiwgbnVsbCk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgi
Q29tbWFuZERvbWFpbi5jb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZSIsIG51bGwsIFtdLCBbInJl
dHVyblZhbHVlIl0pOwotSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiQ29tbWFuZERv
bWFpbiIsIG51bGwpOwotCi0vLyBFdmVudERvbWFpbgotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rl
ckRvbWFpbigiRXZlbnREb21haW4iLCBudWxsKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJF
bnVtKCJFdmVudERvbWFpbi5FdmVudFdpdGhFbnVtUGFyYW1ldGVyUGFyYW1ldGVyIiwge1NoYXJl
ZDogInNoYXJlZCIsIEJsYWNrOiAiYmxhY2siLCBXaGl0ZTogIndoaXRlIn0pOwotSW5zcGVjdG9y
QmFja2VuZC5yZWdpc3RlckV2ZW50KCJFdmVudERvbWFpbi5ldmVudFdpdGhFbnVtUGFyYW1ldGVy
IiwgbnVsbCwgWyJwYXJhbWV0ZXIiXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnRE
b21haW5EaXNwYXRjaGVyID0gSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRpc3BhdGNoZXIuYmlu
ZChJbnNwZWN0b3JCYWNrZW5kLCAiRXZlbnREb21haW4iKTsKLUluc3BlY3RvckJhY2tlbmQuYWN0
aXZhdGVEb21haW4oIkV2ZW50RG9tYWluIiwgbnVsbCk7Ci0jIyMgRW5kIEZpbGU6IEluc3BlY3Rv
ckJhY2tlbmRDb21tYW5kcy5qcwotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tl
bmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12
YWx1ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0j
cHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Igewot
Ci1jbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBz
ZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hl
cikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQotICAgIEJh
Y2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFj
a2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPEJhY2tlbmREaXNw
YXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwotfTsKLQotCi1jbGFzcyBBbHRlcm5hdGVDb21t
YW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXIgewotcHVibGljOgotICAgIHZpcnR1YWwgfkFsdGVybmF0ZUNvbW1hbmREb21haW5CYWNr
ZW5kRGlzcGF0Y2hlcigpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBjb21tYW5kV2l0aEVudW1SZXR1
cm5WYWx1ZShsb25nIGNhbGxJZCkgPSAwOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
Ci0KLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSMj
IyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2Jq
ZWN0cy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNw
ZWN0b3IgewotCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQotI2lmIEVOQUJMRShJTlNQ
RUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotY2xhc3MgQWx0ZXJuYXRlQ29tbWFuZERvbWFp
bkJhY2tlbmREaXNwYXRjaGVyOwotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQotCi1jbGFzcyBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyIHsKLXB1YmxpYzoKLSAgICAvLyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIgJ3JldHVyblZhbHVl
JyB3aGlsZSBnZW5lcmF0aW5nIGNvbW1hbmQvZXZlbnQgY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFs
dWUuCi0gICAgZW51bSBjbGFzcyBSZXR1cm5WYWx1ZSB7Ci0gICAgICAgIFNoYXJlZCA9IDAsCi0g
ICAgICAgIEN5YW4gPSA2LAotICAgICAgICBNYWdlbnRhID0gNywKLSAgICAgICAgWWVsbG93ID0g
OCwKLSAgICB9OyAvLyBlbnVtIGNsYXNzIFJldHVyblZhbHVlCi0gICAgdmlydHVhbCB2b2lkIGNv
bW1hbmRXaXRoRW51bVJldHVyblZhbHVlKEVycm9yU3RyaW5nJiwgQ29tbWFuZERvbWFpbkJhY2tl
bmREaXNwYXRjaGVySGFuZGxlcjo6UmV0dXJuVmFsdWUqIG91dF9yZXR1cm5WYWx1ZSkgPSAwOwot
cHJvdGVjdGVkOgotICAgIHZpcnR1YWwgfkNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXIoKTsKLX07Ci0KLWNsYXNzIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5h
bCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAg
c3RhdGljIFJlZjxDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5k
RGlzcGF0Y2hlciYsIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAg
ICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVm
PEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5hbDsKLXByaXZhdGU6Ci0gICAgdm9pZCBjb21t
YW5kV2l0aEVudW1SZXR1cm5WYWx1ZShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBwYXJhbWV0ZXJzKTsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKLXB1YmxpYzoKLSAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRl
Q29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1f
YWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KLXByaXZhdGU6Ci0g
ICAgQWx0ZXJuYXRlQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKiBtX2FsdGVybmF0ZURp
c3BhdGNoZXIgeyBudWxscHRyIH07Ci0jZW5kaWYKLXByaXZhdGU6Ci0gICAgQ29tbWFuZERvbWFp
bkJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiwgQ29tbWFuZERvbWFpbkJhY2tl
bmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIqIG1fYWdlbnQgeyBudWxscHRyIH07Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RCYWNr
ZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZy
b250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3
dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNp
ZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSNpbmNsdWRlICJUZXN0
QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIEluc3Bl
Y3RvciB7Ci0KLUNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5Db21tYW5k
RG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9Ci0KLVJlZjxDb21tYW5kRG9tYWlu
QmFja2VuZERpc3BhdGNoZXI+IENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRl
KEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgQ29tbWFuZERvbWFpbkJhY2tl
bmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
Q29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkp
OwotfQotCi1Db21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmREb21haW5CYWNr
ZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIENvbW1h
bmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQotICAgIDogU3VwcGxlbWVu
dGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCi0gICAgLCBtX2FnZW50KGFn
ZW50KQotewotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRv
bWFpbigiQ29tbWFuZERvbWFpbiJfcywgdGhpcyk7Ci19Ci0KLXZvaWQgQ29tbWFuZERvbWFpbkJh
Y2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBt
ZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKLXsKLSAgICBSZWY8Q29tbWFuZERv
bWFpbkJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKLQotICAgIFJlZlB0cjxKU09O
OjpPYmplY3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3Ms
IHBhcmFtZXRlcnMpOwotCi0gICAgaWYgKG1ldGhvZCA9PSAiY29tbWFuZFdpdGhFbnVtUmV0dXJu
VmFsdWUiKQotICAgICAgICBjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShyZXF1ZXN0SWQsIFdU
Rk1vdmUocGFyYW1ldGVycykpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQs
ICInQ29tbWFuZERvbWFpbi4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOwotfQotCi12
b2lkIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Y29tbWFuZFdpdGhFbnVtUmV0dXJu
VmFsdWUobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCi17Ci0jaWYgRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0gICAgaWYgKG1fYWx0ZXJuYXRl
RGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmNvbW1hbmRXaXRo
RW51bVJldHVyblZhbHVlKHJlcXVlc3RJZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5k
aWYKLQotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3Vs
dCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNw
YXRjaGVySGFuZGxlcjo6UmV0dXJuVmFsdWUgb3V0X3JldHVyblZhbHVlOwotICAgIG1fYWdlbnQt
PmNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlKGVycm9yLCAmb3V0X3JldHVyblZhbHVlKTsKLQot
ICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0gICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJyZXR1
cm5WYWx1ZSJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25z
dGFudFZhbHVlKG91dF9yZXR1cm5WYWx1ZSkpOwotCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkK
LSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RG
TW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwg
V1RGTW92ZShlcnJvcikpOwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVu
ZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGVudW0tdmFsdWVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0j
aW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEZyb250ZW5kUm91dGVyOwotCi1j
bGFzcyBFdmVudERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlciB7Ci0gICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgRXZlbnREb21haW5Gcm9udGVuZERpc3BhdGNoZXIoRnJv
bnRlbmRSb3V0ZXImIGZyb250ZW5kUm91dGVyKSA6IG1fZnJvbnRlbmRSb3V0ZXIoZnJvbnRlbmRS
b3V0ZXIpIHsgfQotICAgICAgICAvLyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIgJ3BhcmFtZXRlcicg
d2hpbGUgZ2VuZXJhdGluZyBjb21tYW5kL2V2ZW50IGV2ZW50V2l0aEVudW1QYXJhbWV0ZXIuCi0g
ICAgICAgIGVudW0gY2xhc3MgUGFyYW1ldGVyIHsKLSAgICAgICAgICAgIFNoYXJlZCA9IDAsCi0g
ICAgICAgICAgICBCbGFjayA9IDQsCi0gICAgICAgICAgICBXaGl0ZSA9IDUsCi0gICAgICAgIH07
IC8vIGVudW0gY2xhc3MgUGFyYW1ldGVyCi0gICAgdm9pZCBldmVudFdpdGhFbnVtUGFyYW1ldGVy
KFBhcmFtZXRlciBwYXJhbWV0ZXIpOwotcHJpdmF0ZToKLSAgICBGcm9udGVuZFJvdXRlciYgbV9m
cm9udGVuZFJvdXRlcjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBG
aWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJv
bnRlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBl
bnVtLXZhbHVlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVy
cy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewotCi12b2lkIEV2ZW50RG9tYWluRnJvbnRlbmREaXNwYXRjaGVyOjpldmVudFdpdGhFbnVtUGFy
YW1ldGVyKFBhcmFtZXRlciBwYXJhbWV0ZXIpCi17Ci0gICAgUmVmPEpTT046Ok9iamVjdD4ganNv
bk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRT
dHJpbmcoIm1ldGhvZCJfcywgIkV2ZW50RG9tYWluLmV2ZW50V2l0aEVudW1QYXJhbWV0ZXIiX3Mp
OwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHBhcmFtc09iamVjdCA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInBhcmFtZXRlciJfcywgSW5zcGVj
dG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKHBhcmFtZXRl
cikpOwotICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyJfcywgV1RGTW92ZShwYXJh
bXNPYmplY3QpKTsKLQotICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdl
LT50b0pTT05TdHJpbmcoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMg
RW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sT2JqZWN0cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
ZW51bS12YWx1ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclBy
b3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotCi1uYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKLQotCi0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLQotCi0vLyBGb3J3YXJk
IGRlY2xhcmF0aW9ucy4KLW5hbWVzcGFjZSBUeXBlRG9tYWluIHsKLWVudW0gY2xhc3MgVHlwZURv
bWFpbkVudW07Ci19IC8vIFR5cGVEb21haW4KLS8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9u
cy4KLQotCi0KLQotbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKLQotU3RyaW5nIGdldEVudW1Db25z
dGFudFZhbHVlKGludCBjb2RlKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdldEVu
dW1Db25zdGFudFZhbHVlKFQgZW51bVZhbHVlKQotewotICAgIHJldHVybiBnZXRFbnVtQ29uc3Rh
bnRWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KGVudW1WYWx1ZSkpOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBUZXN0SGVscGVycwotCi1uYW1lc3BhY2UgVHlwZURvbWFpbiB7Ci0vKiAgKi8KLWVudW0gY2xh
c3MgVHlwZURvbWFpbkVudW0gewotICAgIFNoYXJlZCA9IDAsCi0gICAgUmVkID0gMSwKLSAgICBH
cmVlbiA9IDIsCi0gICAgQmx1ZSA9IDMsCi19OyAvLyBlbnVtIGNsYXNzIFR5cGVEb21haW5FbnVt
Ci19IC8vIFR5cGVEb21haW4KLQotCi0KLW5hbWVzcGFjZSBUZXN0SGVscGVycyB7Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIFByb3RvY29sRW51bVR5cGU+Ci1PcHRpb25hbDxQcm90b2NvbEVudW1UeXBl
PiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJik7Ci0KLS8vIEVudW1zIGlu
IHRoZSAnVHlwZURvbWFpbicgRG9tYWluCi10ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6
OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51bT4gcGFyc2VFbnVtVmFsdWVGcm9t
U3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46OlR5cGVEb21haW5FbnVtPihj
b25zdCBTdHJpbmcmKTsKLQotfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKLQotfSAvLyBuYW1l
c3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLW5hbWVzcGFjZSBX
VEYgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Ci0KLS8vIEhh
c2ggZGVjbGFyYXRpb25zIGluIHRoZSAnVHlwZURvbWFpbicgRG9tYWluCi10ZW1wbGF0ZTw+Ci1z
dHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURv
bWFpbkVudW0+IHsKLSAgICB0eXBlZGVmIEludEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6VHlw
ZURvbWFpbjo6VHlwZURvbWFpbkVudW0+IEhhc2g7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXVEYK
LSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGVudW0tdmFsdWVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMu
aCIKLQotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0K
LW5hbWVzcGFjZSBUZXN0SGVscGVycyB7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBlbnVt
X2NvbnN0YW50X3ZhbHVlc1tdID0gewotICAgICJzaGFyZWQiLAotICAgICJyZWQiLAotICAgICJn
cmVlbiIsCi0gICAgImJsdWUiLAotICAgICJibGFjayIsCi0gICAgIndoaXRlIiwKLSAgICAiY3lh
biIsCi0gICAgIm1hZ2VudGEiLAotICAgICJ5ZWxsb3ciLAotfTsKLQotU3RyaW5nIGdldEVudW1D
b25zdGFudFZhbHVlKGludCBjb2RlKSB7Ci0gICAgcmV0dXJuIGVudW1fY29uc3RhbnRfdmFsdWVz
W2NvZGVdOwotfQotCi0vLyBFbnVtcyBpbiB0aGUgJ1R5cGVEb21haW4nIERvbWFpbgotdGVtcGxh
dGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFp
bkVudW0+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpUeXBl
RG9tYWluOjpUeXBlRG9tYWluRW51bT4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKLXsK
LSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7Ci0gICAgICAgIChz
aXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW06OlNo
YXJlZCwKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpU
eXBlRG9tYWluRW51bTo6UmVkLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6
OlR5cGVEb21haW46OlR5cGVEb21haW5FbnVtOjpHcmVlbiwKLSAgICAgICAgKHNpemVfdClJbnNw
ZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51bTo6Qmx1ZSwKLSAgICB9
OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgNDsgKytpKQotICAgICAgICBpZiAocHJvdG9j
b2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNbaV1dKQotICAg
ICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9t
YWluRW51bSljb25zdGFudFZhbHVlc1tpXTsKLQotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19
Ci0KLQotfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKLQotCi0KLX0gLy8gbmFtZXNwYWNlIFBy
b3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbE9iamVjdHMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5k
RGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFs
dWVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVy
cy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQotQHByb3RvY29sIFRlc3RQcm90b2Nv
bENvbW1hbmREb21haW5Eb21haW5IYW5kbGVyOwotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQot
Ci1jbGFzcyBPYmpDSW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyIGZpbmFs
IDogcHVibGljIEFsdGVybmF0ZUNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlciB7Ci0gICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgT2JqQ0luc3BlY3RvckNvbW1h
bmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluRG9t
YWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQotICAgIHZvaWQg
Y29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUobG9uZyByZXF1ZXN0SWQpIGZpbmFsOwotcHJpdmF0
ZToKLSAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sQ29tbWFuZERvbWFpbkRvbWFpbkhhbmRs
ZXI+PiBtX2RlbGVnYXRlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJv
dG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVy
bmFsLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW5jbHVk
ZSA8d3RmL0pTT05WYWx1ZXMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXZvaWQgT2Jq
Q0luc3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Y29tbWFuZFdpdGhFbnVt
UmV0dXJuVmFsdWUobG9uZyByZXF1ZXN0SWQpCi17Ci0gICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNw
b25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlV2l0aEVy
cm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6
TWV0aG9kTm90Rm91bmQsICInQ29tbWFuZERvbWFpbi5jb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1
ZScgd2FzIG5vdCBmb3VuZCJfcyk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQ
ZW5kaW5nRXJyb3JzKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZCBlcnJvckNh
bGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2
ZXJFcnJvciwgZXJyb3IpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGlu
Z0Vycm9ycygpOwotICAgIH07Ci0KLSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKFRlc3RQcm90
b2NvbENvbW1hbmREb21haW5Db21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZVJldHVyblZhbHVlIHJl
dHVyblZhbHVlKSB7Ci0gICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdE9iamVjdCA9IEpT
T046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJy
ZXR1cm5WYWx1ZSJfcywgdG9Qcm90b2NvbFN0cmluZyhyZXR1cm5WYWx1ZSkpOwotICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3Vs
dE9iamVjdCksIGZhbHNlKTsKLSAgICB9OwotCi0gICAgW21fZGVsZWdhdGUgY29tbWFuZFdpdGhF
bnVtUmV0dXJuVmFsdWVXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxs
YmFjazpzdWNjZXNzQ2FsbGJhY2tdOwotfQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgot
Ci0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29s
Lmg+Ci0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFj
ZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKLUBwcm9wZXJ0eSAobm9uYXRv
bWljLCByZXRhaW4sIHNldHRlcj1zZXRDb21tYW5kRG9tYWluSGFuZGxlcjopIGlkPFRlc3RQcm90
b2NvbENvbW1hbmREb21haW5Eb21haW5IYW5kbGVyPiBjb21tYW5kRG9tYWluSGFuZGxlcjsKLUBw
cm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgVGVzdFByb3RvY29sRXZlbnREb21haW5Eb21h
aW5FdmVudERpc3BhdGNoZXIgKmV2ZW50RG9tYWluRXZlbnREaXNwYXRjaGVyOwotQGVuZAotCi0K
LSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCi0K
LSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xC
YWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURp
c3BhdGNoYWJsZUFnZW50Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUlu
c3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7
Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCi17Ci0gICAgQXVn
bWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKLSAgICBpZDxUZXN0UHJv
dG9jb2xDb21tYW5kRG9tYWluRG9tYWluSGFuZGxlcj4gX2NvbW1hbmREb21haW5IYW5kbGVyOwot
ICAgIFRlc3RQcm90b2NvbEV2ZW50RG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyICpfZXZlbnRE
b21haW5FdmVudERpc3BhdGNoZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRy
b2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgotewotICAg
IHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmls
OwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7
Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAgIFtfY29tbWFu
ZERvbWFpbkhhbmRsZXIgcmVsZWFzZV07Ci0gICAgW19ldmVudERvbWFpbkV2ZW50RGlzcGF0Y2hl
ciByZWxlYXNlXTsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLS0gKHZvaWQpc2V0Q29tbWFu
ZERvbWFpbkhhbmRsZXI6KGlkPFRlc3RQcm90b2NvbENvbW1hbmREb21haW5Eb21haW5IYW5kbGVy
PiloYW5kbGVyCi17Ci0gICAgaWYgKGhhbmRsZXIgPT0gX2NvbW1hbmREb21haW5IYW5kbGVyKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBbX2NvbW1hbmREb21haW5IYW5kbGVyIHJlbGVhc2VdOwot
ICAgIF9jb21tYW5kRG9tYWluSGFuZGxlciA9IFtoYW5kbGVyIHJldGFpbl07Ci0KLSAgICBhdXRv
IGFsdGVybmF0ZURpc3BhdGNoZXIgPSBtYWtlVW5pcXVlPE9iakNJbnNwZWN0b3JDb21tYW5kRG9t
YWluQmFja2VuZERpc3BhdGNoZXI+KGhhbmRsZXIpOwotICAgIGF1dG8gYWx0ZXJuYXRlQWdlbnQg
PSBtYWtlVW5pcXVlPEFsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50PENvbW1hbmREb21haW5CYWNr
ZW5kRGlzcGF0Y2hlciwgQWx0ZXJuYXRlQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPj4o
IkNvbW1hbmREb21haW4iX3MsICpfY29udHJvbGxlciwgV1RGTW92ZShhbHRlcm5hdGVEaXNwYXRj
aGVyKSk7Ci0gICAgX2NvbnRyb2xsZXItPmFwcGVuZEV4dHJhQWdlbnQoV1RGTW92ZShhbHRlcm5h
dGVBZ2VudCkpOwotfQotCi0tIChpZDxUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluRG9tYWluSGFu
ZGxlcj4pY29tbWFuZERvbWFpbkhhbmRsZXIKLXsKLSAgICByZXR1cm4gX2NvbW1hbmREb21haW5I
YW5kbGVyOwotfQotCi0tIChUZXN0UHJvdG9jb2xFdmVudERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0
Y2hlciAqKWV2ZW50RG9tYWluRXZlbnREaXNwYXRjaGVyCi17Ci0gICAgaWYgKCFfZXZlbnREb21h
aW5FdmVudERpc3BhdGNoZXIpCi0gICAgICAgIF9ldmVudERvbWFpbkV2ZW50RGlzcGF0Y2hlciA9
IFtbVGVzdFByb3RvY29sRXZlbnREb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgYWxsb2NdIGlu
aXRXaXRoQ29udHJvbGxlcjpfY29udHJvbGxlcl07Ci0gICAgcmV0dXJuIF9ldmVudERvbWFpbkV2
ZW50RGlzcGF0Y2hlcjsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbi5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNw
YXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVz
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9y
dCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLmgiCi0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yOwotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sRXZlbnREb21haW5E
b21haW5FdmVudERpc3BhdGNoZXIKLXsKLSAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xs
ZXIqIF9jb250cm9sbGVyOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVy
OihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBzZWxm
ID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAg
ICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAg
IHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWV2ZW50V2l0aEVudW1QYXJhbWV0ZXJXaXRoUGFy
YW1ldGVyOihUZXN0UHJvdG9jb2xFdmVudERvbWFpbkV2ZW50V2l0aEVudW1QYXJhbWV0ZXJQYXJh
bWV0ZXIpcGFyYW1ldGVyCi17Ci0gICAgY29uc3QgRnJvbnRlbmRSb3V0ZXImIHJvdXRlciA9IF9j
b250cm9sbGVyLT5mcm9udGVuZFJvdXRlcigpOwotCi0gICAgUmVmPEpTT046Ok9iamVjdD4ganNv
bk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRT
dHJpbmcoIm1ldGhvZCJfcywgIkV2ZW50RG9tYWluLmV2ZW50V2l0aEVudW1QYXJhbWV0ZXIiX3Mp
OwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHBhcmFtc09iamVjdCA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInBhcmFtZXRlciJfcywgdG9Qcm90
b2NvbFN0cmluZyhwYXJhbWV0ZXIpKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJh
bXMiX3MsIFdURk1vdmUocGFyYW1zT2JqZWN0KSk7Ci0gICAgcm91dGVyLnNlbmRFdmVudChqc29u
TWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2wuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8
Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90
b2NvbEpTT05PYmplY3QuaD4KLQotCi0KLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVz
dFByb3RvY29sUGxhdGZvcm0pIHsKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbCwKLSAgICBU
ZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWMsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1JT1Ms
Ci0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUywKLX07Ci0KLQotdHlwZWRlZiBOU19FTlVN
KE5TSW50ZWdlciwgVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0pIHsKLSAgICBUZXN0UHJvdG9j
b2xUeXBlRG9tYWluRW51bVNoYXJlZCwKLSAgICBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bVJl
ZCwKLSAgICBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bUdyZWVuLAotICAgIFRlc3RQcm90b2Nv
bFR5cGVEb21haW5FbnVtQmx1ZSwKLX07Ci0KLQotCi1AcHJvdG9jb2wgVGVzdFByb3RvY29sQ29t
bWFuZERvbWFpbkRvbWFpbkhhbmRsZXIgPE5TT2JqZWN0PgotQG9wdGlvbmFsCi0tICh2b2lkKWNv
bW1hbmRXaXRoRW51bVJldHVyblZhbHVlV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJp
bmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKShUZXN0UHJv
dG9jb2xDb21tYW5kRG9tYWluQ29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWVSZXR1cm5WYWx1ZSBy
ZXR1cm5WYWx1ZSkpc3VjY2Vzc0NhbGxiYWNrOwotQGVuZAotCi1fX2F0dHJpYnV0ZV9fKCh2aXNp
YmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sRXZlbnREb21haW5E
b21haW5FdmVudERpc3BhdGNoZXIgOiBOU09iamVjdAotLSAodm9pZClldmVudFdpdGhFbnVtUGFy
YW1ldGVyV2l0aFBhcmFtZXRlcjooVGVzdFByb3RvY29sRXZlbnREb21haW5FdmVudFdpdGhFbnVt
UGFyYW1ldGVyUGFyYW1ldGVyKXBhcmFtZXRlcjsKLUBlbmQKLQotCi0jaW1wb3J0IDxXZWJJbnNw
ZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+Ci0KLSMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVy
bmFsLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRl
c3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIK
LSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5o
PgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xF
dmVudERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAoUHJpdmF0ZSkKLS0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aENvbnRyb2xsZXI6KEluc3BlY3Rvcjo6QXVnbWVudGFibGVJbnNwZWN0b3JDb250
cm9sbGVyKiljb250cm9sbGVyOwotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
SW50ZXJuYWwuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
LmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbC5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJz
aW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgT2Jq
Q0VudW1UeXBlPgotT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29u
c3QgU3RyaW5nJiB2YWx1ZSk7Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0
UHJvdG9jb2xQbGF0Zm9ybSB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBjYXNl
IFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOgotICAgICAgICByZXR1cm4gImFsbCJfczsKLSAgICBj
YXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzoKLSAgICAgICAgcmV0dXJuICJnZW5lcmlj
Il9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1JT1M6Ci0gICAgICAgIHJldHVybiAi
aW9zIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzoKLSAgICAgICAgcmV0
dXJuICJtYWNvcyJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxU
ZXN0UHJvdG9jb2xQbGF0Zm9ybT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFs
dWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJhbGwiKQotICAgICAgICByZXR1cm4gVGVzdFByb3Rv
Y29sUGxhdGZvcm1BbGw7Ci0gICAgaWYgKHZhbHVlID09ICJnZW5lcmljIikKLSAgICAgICAgcmV0
dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzsKLSAgICBpZiAodmFsdWUgPT0gImlvcyIp
Ci0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzsKLSAgICBpZiAodmFsdWUg
PT0gIm1hY29zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M7Ci0g
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xT
dHJpbmcoVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0gdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZh
bHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bVNoYXJlZDoKLSAgICAg
ICAgcmV0dXJuICJzaGFyZWQiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51
bVJlZDoKLSAgICAgICAgcmV0dXJuICJyZWQiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xUeXBl
RG9tYWluRW51bUdyZWVuOgotICAgICAgICByZXR1cm4gImdyZWVuIl9zOwotICAgIGNhc2UgVGVz
dFByb3RvY29sVHlwZURvbWFpbkVudW1CbHVlOgotICAgICAgICByZXR1cm4gImJsdWUiX3M7Ci0g
ICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sVHlwZURv
bWFpbkVudW0+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAg
IGlmICh2YWx1ZSA9PSAic2hhcmVkIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFR5cGVE
b21haW5FbnVtU2hhcmVkOwotICAgIGlmICh2YWx1ZSA9PSAicmVkIikKLSAgICAgICAgcmV0dXJu
IFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtUmVkOwotICAgIGlmICh2YWx1ZSA9PSAiZ3JlZW4i
KQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1HcmVlbjsKLSAgICBp
ZiAodmFsdWUgPT0gImJsdWUiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sVHlwZURvbWFp
bkVudW1CbHVlOwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5o
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucy5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRl
c3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2Nv
bEpTT05PYmplY3RQcml2YXRlLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBp
bnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChUeXBlRG9tYWluRG9tYWluKQot
Ci0rICh2b2lkKV9wYXJzZVR5cGVEb21haW5FbnVtOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9t
UGF5bG9hZDooaWQpcGF5bG9hZDsKLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zIChUeXBlRG9tYWluRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZVR5
cGVEb21haW5FbnVtOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9h
ZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TU3RyaW5n
IGNsYXNzXSk7Ci0gICAgT3B0aW9uYWw8VGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0+IHJlc3Vs
dCA9IEluc3BlY3Rvcjo6ZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbFR5cGVEb21haW5F
bnVtPihwYXlsb2FkKTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9FTlVNX1ZBTFVFKHJl
c3VsdCwgQCJUeXBlRG9tYWluRW51bSIpOwotICAgICpvdXRWYWx1ZSA9IEAocmVzdWx0LnZhbHVl
KCkpOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRl
cm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBv
cnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0jaW1wb3J0
IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcg
bmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xU
eXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21h
aW4tZGVidWdnYWJsZVR5cGUuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9ldmVudC10YXJnZXRUeXBlLW1h
dGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJlc3VsdApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggZDg5YTk3ZmY1NWQuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2V2ZW50
LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tcmVzdWx0Cisr
KyAvZGV2L251bGwKQEAgLTEsMTA2MyArMCwwIEBACi0jIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9y
QmFja2VuZENvbW1hbmRzLmpzCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZl
bnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0vLyBEb21haW4KLUluc3BlY3Rv
ckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIkRvbWFpbiIsIG51bGwpOwotSW5zcGVjdG9yQmFja2Vu
ZC5yZWdpc3RlckNvbW1hbmQoIkRvbWFpbi5Db21tYW5kIiwgbnVsbCwgW10sIFtdKTsKLUluc3Bl
Y3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudCgiRG9tYWluLkV2ZW50IiwgWyJwYWdlIiwgIndvcmtl
ciJdLCBbXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluRGlzcGF0Y2hlciA9IElu
c3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEaXNwYXRjaGVyLmJpbmQoSW5zcGVjdG9yQmFja2VuZCwg
IkRvbWFpbiIpOwotSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiRG9tYWluIiwgWyJw
YWdlIl0pOwotIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWlu
LWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCi0jaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotCi1uYW1lc3BhY2UgSW5z
cGVjdG9yIHsKLQotY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgot
ICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYm
IGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7
IH0KLSAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJl
dHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Ci1wcml2YXRlOgotICAgIFJlZlB0cjxC
YWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKLX07Ci0KLQotY2xhc3MgQWx0
ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERp
c3BhdGNoZXIgewotcHVibGljOgotICAgIHZpcnR1YWwgfkFsdGVybmF0ZURvbWFpbkJhY2tlbmRE
aXNwYXRjaGVyKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIENvbW1hbmQobG9uZyBjYWxsSWQpID0g
MDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jZW5kaWYgLy8gRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5h
dGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNw
YXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0
VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRl
c3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1u
YW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KLSNp
ZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLWNsYXNzIEFsdGVybmF0
ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyOwotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQotCi1jbGFzcyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIgewotcHVibGljOgotICAgIHZpcnR1YWwgdm9pZCBDb21tYW5kKEVycm9yU3RyaW5nJikgPSAw
OwotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgfkRvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxl
cigpOwotfTsKLQotY2xhc3MgRG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMg
U3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8
RG9tYWluQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIERvbWFp
bkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1
ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2Up
IGZpbmFsOwotcHJpdmF0ZToKLSAgICB2b2lkIENvbW1hbmQobG9uZyByZXF1ZXN0SWQsIFJlZlB0
cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCi1wdWJsaWM6Ci0gICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRj
aGVyKEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVy
KSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KLXByaXZh
dGU6Ci0gICAgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIqIG1fYWx0ZXJuYXRlRGlz
cGF0Y2hlciB7IG51bGxwdHIgfTsKLSNlbmRpZgotcHJpdmF0ZToKLSAgICBEb21haW5CYWNrZW5k
RGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlciopOwotICAgIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2VudCB7IG51
bGxwdHIgfTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBU
ZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlz
cGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnQtdGFy
Z2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5o
PgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQot
I2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNlbmRpZgotCi1u
YW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+
RG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9Ci0KLVJlZjxEb21haW5CYWNrZW5k
RGlzcGF0Y2hlcj4gRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShCYWNrZW5kRGlzcGF0
Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciog
YWdlbnQpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRG9tYWluQmFja2VuZERpc3BhdGNo
ZXIoYmFja2VuZERpc3BhdGNoZXIsIGFnZW50KSk7Ci19Ci0KLURvbWFpbkJhY2tlbmREaXNwYXRj
aGVyOjpEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERp
c3BhdGNoZXIsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCi0gICAgOiBT
dXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKLSAgICAsIG1f
YWdlbnQoYWdlbnQpCi17Ci0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRj
aGVyRm9yRG9tYWluKCJEb21haW4iX3MsIHRoaXMpOwotfQotCi12b2lkIERvbWFpbkJhY2tlbmRE
aXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2Qs
IFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKLXsKLSAgICBSZWY8RG9tYWluQmFja2VuZERp
c3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwotCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFy
YW1ldGVyczsKLSAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFyYW1ldGVycyk7
Ci0KLSAgICBpZiAobWV0aG9kID09ICJDb21tYW5kIikKLSAgICAgICAgQ29tbWFuZChyZXF1ZXN0
SWQsIFdURk1vdmUocGFyYW1ldGVycykpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90
Rm91bmQsICInRG9tYWluLiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7Ci19Ci0KLXZv
aWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9uZyByZXF1ZXN0SWQsIFJlZlB0
cjxKU09OOjpPYmplY3Q+JiYpCi17Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCi0gICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2Fs
dGVybmF0ZURpc3BhdGNoZXItPkNvbW1hbmQocmVxdWVzdElkKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSNlbmRpZgotCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9i
amVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtX2FnZW50LT5Db21t
YW5kKGVycm9yKTsKLQotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0gICAgICAgIG1fYmFja2Vu
ZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFs
c2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9j
b2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tl
bmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNo
ZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudC10YXJnZXRUeXBl
LW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFBy
b3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBG
cm9udGVuZFJvdXRlcjsKLQotY2xhc3MgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVyIHsKLSAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBEb21haW5Gcm9udGVuZERpc3Bh
dGNoZXIoRnJvbnRlbmRSb3V0ZXImIGZyb250ZW5kUm91dGVyKSA6IG1fZnJvbnRlbmRSb3V0ZXIo
ZnJvbnRlbmRSb3V0ZXIpIHsgfQotICAgIHZvaWQgRXZlbnQoKTsKLXByaXZhdGU6Ci0gICAgRnJv
bnRlbmRSb3V0ZXImIG1fZnJvbnRlbmRSb3V0ZXI7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJs
ZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIK
LQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQot
dm9pZCBEb21haW5Gcm9udGVuZERpc3BhdGNoZXI6OkV2ZW50KCkKLXsKLSAgICBSZWY8SlNPTjo6
T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1l
c3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9zKTsKLQotICAgIG1f
ZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVu
ZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5o
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRj
aGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5o
PgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0K
LQotCi0KLQotCi0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVU
eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLQotI2lu
Y2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQot
bmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLQotCi19IC8v
IG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNp
bmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLUBwcm90b2NvbCBUZXN0UHJvdG9jb2xEb21haW5E
b21haW5IYW5kbGVyOwotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi1jbGFzcyBPYmpDSW5z
cGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJuYXRlRG9t
YWluQmFja2VuZERpc3BhdGNoZXIgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVi
bGljOgotICAgIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJv
dG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVy
OyB9Ci0gICAgdm9pZCBDb21tYW5kKGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKLXByaXZhdGU6Ci0g
ICAgUmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+PiBtX2RlbGVn
YXRlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29u
ZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLQotbmFtZXNwYWNl
IEluc3BlY3RvciB7Ci0KLXZvaWQgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVy
OjpDb21tYW5kKGxvbmcgcmVxdWVzdElkKQotewotICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9u
ZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0Nh
bGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29s
RXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRG9t
YWluLkNvbW1hbmQnIHdhcyBub3QgZm91bmQiX3MpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
aWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0
Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICB9OwotCi0gICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0g
XnsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwg
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2UpOwotICAgIH07Ci0KLSAgICBbbV9kZWxlZ2F0
ZSBDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6
c3VjY2Vzc0NhbGxiYWNrXTsKLX0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVU
eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2lt
cG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgotCi1fX2F0dHJpYnV0ZV9fKCh2aXNp
YmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
biA6IE5TT2JqZWN0Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluLCBzZXR0ZXI9c2V0RG9t
YWluSGFuZGxlcjopIGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IGRvbWFpbkhh
bmRsZXI7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFRlc3RQcm90b2NvbERvbWFp
bkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqZG9tYWluRXZlbnREaXNwYXRjaGVyOwotQGVuZAotCi0K
LSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5
cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1w
b3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2Nv
bEludGVybmFsLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIK
LSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+Ci0j
aW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4K
LSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVycy5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXJzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBU
ZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCi17Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250
cm9sbGVyKiBfY29udHJvbGxlcjsKLSAgICBpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5k
bGVyPiBfZG9tYWluSGFuZGxlcjsKLSAgICBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERp
c3BhdGNoZXIgKl9kb21haW5FdmVudERpc3BhdGNoZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlp
bml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJv
bGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAg
ICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9
IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwotewot
ICAgIFtfZG9tYWluSGFuZGxlciByZWxlYXNlXTsKLSAgICBbX2RvbWFpbkV2ZW50RGlzcGF0Y2hl
ciByZWxlYXNlXTsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLS0gKHZvaWQpc2V0RG9tYWlu
SGFuZGxlcjooaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4paGFuZGxlcgotewot
ICAgIGlmIChoYW5kbGVyID09IF9kb21haW5IYW5kbGVyKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBbX2RvbWFpbkhhbmRsZXIgcmVsZWFzZV07Ci0gICAgX2RvbWFpbkhhbmRsZXIgPSBbaGFuZGxl
ciByZXRhaW5dOwotCi0gICAgYXV0byBhbHRlcm5hdGVEaXNwYXRjaGVyID0gbWFrZVVuaXF1ZTxP
YmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXI+KGhhbmRsZXIpOwotICAgIGF1dG8g
YWx0ZXJuYXRlQWdlbnQgPSBtYWtlVW5pcXVlPEFsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50PERv
bWFpbkJhY2tlbmREaXNwYXRjaGVyLCBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4+
KCJEb21haW4iX3MsICpfY29udHJvbGxlciwgV1RGTW92ZShhbHRlcm5hdGVEaXNwYXRjaGVyKSk7
Ci0gICAgX2NvbnRyb2xsZXItPmFwcGVuZEV4dHJhQWdlbnQoV1RGTW92ZShhbHRlcm5hdGVBZ2Vu
dCkpOwotfQotCi0tIChpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPilkb21haW5I
YW5kbGVyCi17Ci0gICAgcmV0dXJuIF9kb21haW5IYW5kbGVyOwotfQotCi0tIChUZXN0UHJvdG9j
b2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKilkb21haW5FdmVudERpc3BhdGNoZXIKLXsK
LSAgICBpZiAoIV9kb21haW5FdmVudERpc3BhdGNoZXIpCi0gICAgICAgIF9kb21haW5FdmVudERp
c3BhdGNoZXIgPSBbW1Rlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciBhbGxv
Y10gaW5pdFdpdGhDb250cm9sbGVyOl9jb250cm9sbGVyXTsKLSAgICByZXR1cm4gX2RvbWFpbkV2
ZW50RGlzcGF0Y2hlcjsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbi5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNw
YXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRhcmdl
dFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJu
YWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0
IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW1w
bGVtZW50YXRpb24gVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyCi17Ci0g
ICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKLX0KLQotLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250
cm9sbGVyKiljb250cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAo
IXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIpOwotICAg
IF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9p
ZClFdmVudAotewotICAgIGNvbnN0IEZyb250ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29udHJvbGxl
ci0+ZnJvbnRlbmRSb3V0ZXIoKTsKLQotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdl
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJt
ZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOwotICAgIHJvdXRlci5zZW5kRXZlbnQoanNvbk1l
c3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudC10YXJnZXRUeXBl
LW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5o
PgotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+Ci0KLQot
Ci0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbFBsYXRmb3JtKSB7Ci0g
ICAgVGVzdFByb3RvY29sUGxhdGZvcm1BbGwsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5l
cmljLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TLAotICAgIFRlc3RQcm90b2NvbFBsYXRm
b3JtTWFjT1MsCi19OwotCi0KLQotCi0KLUBwcm90b2NvbCBUZXN0UHJvdG9jb2xEb21haW5Eb21h
aW5IYW5kbGVyIDxOU09iamVjdD4KLUBvcHRpb25hbAotLSAodm9pZClDb21tYW5kV2l0aEVycm9y
Q2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3ND
YWxsYmFjazoodm9pZCheKSh2b2lkKSlzdWNjZXNzQ2FsbGJhY2s7Ci1AZW5kCi0KLV9fYXR0cmli
dXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xE
b21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgOiBOU09iamVjdAotLSAodm9pZClFdmVudDsKLUBl
bmQKLQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxp
dHlPYmplY3RzLmg+Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQg
IlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUu
aCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxl
ci5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotQGludGVyZmFjZSBUZXN0UHJvdG9j
b2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKFByaXZhdGUpCi0tIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhDb250cm9sbGVyOihJbnNwZWN0b3I6OkF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJv
bGxlciopY29udHJvbGxlcjsKLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbElu
dGVybmFsLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5o
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRj
aGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgPFdl
Ykluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KLQotbmFtZXNwYWNlIElu
c3BlY3RvciB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KLU9wdGlvbmFsPE9i
akNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOwotCi1p
bmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sUGxhdGZvcm0gdmFsdWUp
Ci17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFs
bDoKLSAgICAgICAgcmV0dXJuICJhbGwiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9y
bUdlbmVyaWM6Ci0gICAgICAgIHJldHVybiAiZ2VuZXJpYyJfczsKLSAgICBjYXNlIFRlc3RQcm90
b2NvbFBsYXRmb3JtSU9TOgotICAgICAgICByZXR1cm4gImlvcyJfczsKLSAgICBjYXNlIFRlc3RQ
cm90b2NvbFBsYXRmb3JtTWFjT1M6Ci0gICAgICAgIHJldHVybiAibWFjb3MiX3M7Ci0gICAgfQot
fQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sUGxhdGZvcm0+IGZy
b21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9
PSAiYWxsIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOwotICAgIGlm
ICh2YWx1ZSA9PSAiZ2VuZXJpYyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9y
bUdlbmVyaWM7Ci0gICAgaWYgKHZhbHVlID09ICJpb3MiKQotICAgICAgICByZXR1cm4gVGVzdFBy
b3RvY29sUGxhdGZvcm1JT1M7Ci0gICAgaWYgKHZhbHVlID09ICJtYWNvcyIpCi0gICAgICAgIHJl
dHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudC10
YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucy5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRl
c3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2Nv
bEpTT05PYmplY3RQcml2YXRlLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQot
Ci0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxl
VHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNp
bXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9i
amVjdFByaXZhdGUuaD4KLSNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW1wb3J0IDx3dGYv
SlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLSMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2V2ZW50cy13aXRo
LW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9ldmVudHMtd2l0aC1vcHRp
b25hbC1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA4YTk1YmE1NThjZi4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZXZlbnRzLXdpdGgtb3B0aW9u
YWwtcGFyYW1ldGVycy5qc29uLXJlc3VsdAorKysgL2Rldi9udWxsCkBAIC0xLDEyMTcgKzAsMCBA
QAotIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMu
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0vLyBEYXRh
YmFzZQotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiRGF0YWJhc2UiLCBudWxsKTsK
LUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudCgiRGF0YWJhc2UuZGlkRXhlY3V0ZU9wdGlv
bmFsUGFyYW1ldGVycyIsIG51bGwsIFsiY29sdW1uTmFtZXMiLCAibm90ZXMiLCAidGltZXN0YW1w
IiwgInZhbHVlcyIsICJwYXlsb2FkIiwgInNxbEVycm9yIiwgInNjcmVlbkNvbG9yIiwgImFsdGVy
bmF0ZUNvbG9ycyIsICJwcmludENvbG9yIl0pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckV2
ZW50KCJEYXRhYmFzZS5kaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMiLCBudWxsLCBbImNv
bHVtbk5hbWVzIiwgIm5vdGVzIiwgInRpbWVzdGFtcCIsICJ2YWx1ZXMiLCAicGF5bG9hZCIsICJz
cWxFcnJvciIsICJzY3JlZW5Db2xvciIsICJhbHRlcm5hdGVDb2xvcnMiLCAicHJpbnRDb2xvciJd
KTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEYXRhYmFzZURpc3BhdGNoZXIgPSBJbnNwZWN0
b3JCYWNrZW5kLnJlZ2lzdGVyRGlzcGF0Y2hlci5iaW5kKEluc3BlY3RvckJhY2tlbmQsICJEYXRh
YmFzZSIpOwotSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiRGF0YWJhc2UiLCBudWxs
KTsKLSMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNl
Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQotI2luY2x1
ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JGcm9udGVuZFJvdXRlci5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgQWx0
ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZvaWQgc2V0QmFja2VuZERp
c3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNr
ZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KLSAgICBCYWNrZW5kRGlzcGF0
Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRj
aGVyLmdldCgpOyB9Ci1wcml2YXRlOgotICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9i
YWNrZW5kRGlzcGF0Y2hlcjsKLX07Ci0KLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgot
Ci0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jIyMg
RW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVk
ZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsK
LQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2Vu
ZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMu
Y3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9u
YWwtcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNo
ZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRl
ci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVz
dHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jaWYgRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVycy5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0K
LQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmRE
aXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJz
LmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25h
bC1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0j
aW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEZyb250ZW5kUm91dGVyOwotCi1j
bGFzcyBEYXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hlciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7Ci1wdWJsaWM6Ci0gICAgRGF0YWJhc2VGcm9udGVuZERpc3BhdGNoZXIoRnJvbnRlbmRS
b3V0ZXImIGZyb250ZW5kUm91dGVyKSA6IG1fZnJvbnRlbmRSb3V0ZXIoZnJvbnRlbmRSb3V0ZXIp
IHsgfQotICAgIHZvaWQgZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyhSZWZQdHI8SlNPTjo6
QXJyYXlPZjxTdHJpbmc+PiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nKiBub3RlcywgY29uc3Qg
ZG91YmxlKiB0aW1lc3RhbXAsIFJlZlB0cjxKU09OOjpPYmplY3Q+IHZhbHVlcywgUmVmUHRyPEpT
T046OlZhbHVlPiBwYXlsb2FkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6
OkVycm9yPiBzcWxFcnJvciwgY29uc3QgU3RyaW5nKiBzY3JlZW5Db2xvciwgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IGFsdGVybmF0ZUNvbG9ycywgY29u
c3QgU3RyaW5nKiBwcmludENvbG9yKTsKLSAgICB2b2lkIGRpZEV4ZWN1dGVOb09wdGlvbmFsUGFy
YW1ldGVycyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiBjb2x1bW5OYW1lcywgY29uc3Qg
U3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUmVmUHRyPEpTT046Ok9iamVjdD4gdmFs
dWVzLCBSZWZQdHI8SlNPTjo6VmFsdWU+IHBheWxvYWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVycm9yLCBjb25zdCBTdHJpbmcmIHNjcmVlbkNvbG9y
LCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4gYWx0ZXJu
YXRlQ29sb3JzLCBjb25zdCBTdHJpbmcmIHByaW50Q29sb3IpOwotcHJpdmF0ZToKLSAgICBGcm9u
dGVuZFJvdXRlciYgbV9mcm9udGVuZFJvdXRlcjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXZvaWQgRGF0YWJhc2VGcm9u
dGVuZERpc3BhdGNoZXI6OmRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMoUmVmUHRyPEpTT046
OkFycmF5T2Y8U3RyaW5nPj4gY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyogbm90ZXMsIGNvbnN0
IGRvdWJsZSogdGltZXN0YW1wLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiB2YWx1ZXMsIFJlZlB0cjxK
U09OOjpWYWx1ZT4gcGF5bG9hZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNl
OjpFcnJvcj4gc3FsRXJyb3IsIGNvbnN0IFN0cmluZyogc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiBhbHRlcm5hdGVDb2xvcnMsIGNv
bnN0IFN0cmluZyogcHJpbnRDb2xvcikKLXsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVz
c2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmlu
ZygibWV0aG9kIl9zLCAiRGF0YWJhc2UuZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyJfcyk7
Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKLSAgICBpZiAoY29sdW1uTmFtZXMpCi0gICAgICAgIHBhcmFtc09iamVjdC0+c2V0QXJy
YXkoImNvbHVtbk5hbWVzIl9zLCBjb2x1bW5OYW1lcyk7Ci0gICAgaWYgKG5vdGVzKQotICAgICAg
ICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygibm90ZXMiX3MsICpub3Rlcyk7Ci0gICAgaWYgKHRp
bWVzdGFtcCkKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywg
KnRpbWVzdGFtcCk7Ci0gICAgaWYgKHZhbHVlcykKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRP
YmplY3QoInZhbHVlcyJfcywgdmFsdWVzKTsKLSAgICBpZiAocGF5bG9hZCkKLSAgICAgICAgcGFy
YW1zT2JqZWN0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgKnBheWxvYWQpOwotICAgIGlmIChzcWxF
cnJvcikKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBzcWxF
cnJvcik7Ci0gICAgaWYgKHNjcmVlbkNvbG9yKQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldFN0
cmluZygic2NyZWVuQ29sb3IiX3MsICpzY3JlZW5Db2xvcik7Ci0gICAgaWYgKGFsdGVybmF0ZUNv
bG9ycykKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9z
LCBhbHRlcm5hdGVDb2xvcnMpOwotICAgIGlmIChwcmludENvbG9yKQotICAgICAgICBwYXJhbXNP
YmplY3QtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgKnByaW50Q29sb3IpOwotICAgIGpzb25N
ZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyJfcywgV1RGTW92ZShwYXJhbXNPYmplY3QpKTsKLQot
ICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmco
KSk7Ci19Ci0KLXZvaWQgRGF0YWJhc2VGcm9udGVuZERpc3BhdGNoZXI6OmRpZEV4ZWN1dGVOb09w
dGlvbmFsUGFyYW1ldGVycyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiBjb2x1bW5OYW1l
cywgY29uc3QgU3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUmVmUHRyPEpTT046Ok9i
amVjdD4gdmFsdWVzLCBSZWZQdHI8SlNPTjo6VmFsdWU+IHBheWxvYWQsIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVycm9yLCBjb25zdCBTdHJpbmcmIHNj
cmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlz
dD4gYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcmIHByaW50Q29sb3IpCi17Ci0gICAgUmVm
PEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAg
IGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRhdGFiYXNlLmRpZEV4ZWN1dGVO
b09wdGlvbmFsUGFyYW1ldGVycyJfcyk7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcGFyYW1zT2Jq
ZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldEFycmF5
KCJjb2x1bW5OYW1lcyJfcywgY29sdW1uTmFtZXMpOwotICAgIHBhcmFtc09iamVjdC0+c2V0U3Ry
aW5nKCJub3RlcyJfcywgbm90ZXMpOwotICAgIHBhcmFtc09iamVjdC0+c2V0RG91YmxlKCJ0aW1l
c3RhbXAiX3MsIHRpbWVzdGFtcCk7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoInZhbHVl
cyJfcywgdmFsdWVzKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBw
YXlsb2FkKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIHNxbEVy
cm9yKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsIHNjcmVl
bkNvbG9yKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3Ms
IGFsdGVybmF0ZUNvbG9ycyk7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInByaW50Q29s
b3IiX3MsIHByaW50Q29sb3IpOwotICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyJf
cywgV1RGTW92ZShwYXJhbXNPYmplY3QpKTsKLQotICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2
ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0j
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1
ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotbmFt
ZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLS8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgotbmFtZXNw
YWNlIERhdGFiYXNlIHsKLWNsYXNzIEVycm9yOwotfSAvLyBEYXRhYmFzZQotLy8gRW5kIG9mIGZv
cndhcmQgZGVjbGFyYXRpb25zLgotCi0KLS8vIFR5cGVkZWZzLgotbmFtZXNwYWNlIERhdGFiYXNl
IHsKLS8qIFVuaXF1ZSBpZGVudGlmaWVyIG9mIERhdGFiYXNlIG9iamVjdC4gKi8KLXR5cGVkZWYg
U3RyaW5nIERhdGFiYXNlSWQ7Ci10eXBlZGVmIFN0cmluZyBQcmltYXJ5Q29sb3JzOwotdHlwZWRl
ZiBKU09OOjpBcnJheU9mPFN0cmluZz4gQ29sb3JMaXN0OwotfSAvLyBEYXRhYmFzZQotLy8gRW5k
IG9mIHR5cGVkZWZzLgotCi1uYW1lc3BhY2UgRGF0YWJhc2UgewotLyogRGF0YWJhc2UgZXJyb3Iu
ICovCi1jbGFzcyBFcnJvciA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKLXB1YmxpYzoKLSAg
ICBlbnVtIHsKLSAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAotICAgICAgICBNZXNzYWdlU2V0ID0g
MSA8PCAwLAotICAgICAgICBDb2RlU2V0ID0gMSA8PCAxLAotICAgICAgICBBbGxGaWVsZHNTZXQg
PSAoTWVzc2FnZVNldCB8IENvZGVTZXQpCi0gICAgfTsKLQotICAgIHRlbXBsYXRlPGludCBTVEFU
RT4KLSAgICBjbGFzcyBCdWlsZGVyIHsKLSAgICBwcml2YXRlOgotICAgICAgICBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiBtX3Jlc3VsdDsKLQotICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRl
cjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBCdWlsZGVyKFJlZjwvKkVycm9yKi9KU09OOjpPYmplY3Q+JiYgb2Jq
ZWN0KQotICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVy
X2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwotICAgICAgICB9Ci0gICAgICAgIGZyaWVuZCBj
bGFzcyBFcnJvcjsKLSAgICBwdWJsaWM6Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1lc3Nh
Z2VTZXQ+JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNZXNzYWdlU2V0KSwgcHJvcGVydHlfbWVz
c2FnZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJtZXNz
YWdlIl9zLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1lc3NhZ2VTZXQ+
KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29kZVNldD4mIHNldENv
ZGUoaW50IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgQ29kZVNldCksIHByb3BlcnR5X2NvZGVfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAg
bV9yZXN1bHQtPnNldEludGVnZXIoImNvZGUiX3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVy
biBjYXN0U3RhdGU8Q29kZVNldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIFJlZjxFcnJvcj4g
cmVsZWFzZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09
IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7Ci0gICAgICAgICAgICBDT01QSUxF
X0FTU0VSVChzaXplb2YoRXJyb3IpID09IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5ub3RfY2Fz
dCk7Ci0KLSAgICAgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25SZXN1bHQgPSBtX3Jlc3Vs
dC5yZWxlYXNlTm9uTnVsbCgpOwotICAgICAgICAgICAgYXV0byByZXN1bHQgPSBXVEZNb3ZlKCpy
ZWludGVycHJldF9jYXN0PFJlZjxFcnJvcj4qPigmanNvblJlc3VsdCkpOwotICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICAvKgotICAgICAqIFN5bnRo
ZXRpYyBjb25zdHJ1Y3RvcjoKLSAgICAgKiBSZWY8RXJyb3I+IHJlc3VsdCA9IEVycm9yOjpjcmVh
dGUoKQotICAgICAqICAgICAuc2V0TWVzc2FnZSguLi4pCi0gICAgICogICAgIC5zZXRDb2RlKC4u
LikKLSAgICAgKiAgICAgLnJlbGVhc2UoKTsKLSAgICAgKi8KLSAgICBzdGF0aWMgQnVpbGRlcjxO
b0ZpZWxkc1NldD4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmll
bGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKLSAgICB9Ci19OwotCi19IC8vIERhdGFi
YXNlCi0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsK
LQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0K
LX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9i
amVjdHMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hl
cnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlv
bmFsLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2Vu
ZERpc3BhdGNoZXJzLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi0KLQotbmFtZXNw
YWNlIEluc3BlY3RvciB7Ci0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIK
LSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSAi
VGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotCi1uYW1lc3BhY2UgSW5zcGVj
dG9yIHsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xDb25maWd1cmF0aW9uLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVu
dHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5o
PgotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2Ug
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0Ci1AcHJvcGVydHkgKG5vbmF0b21p
YywgcmVhZG9ubHkpIFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluRXZlbnREaXNwYXRjaGVyICpk
YXRhYmFzZUV2ZW50RGlzcGF0Y2hlcjsKLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbENvbmZpZ3VyYXRpb24uaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbi5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRo
LW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCi0KLSNp
bXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNr
ZW5kRGlzcGF0Y2hlcnMuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3Bh
dGNoYWJsZUFnZW50Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3Bl
Y3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVy
bmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0K
LUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCi17Ci0gICAgQXVnbWVu
dGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKLSAgICBUZXN0UHJvdG9jb2xE
YXRhYmFzZURvbWFpbkV2ZW50RGlzcGF0Y2hlciAqX2RhdGFiYXNlRXZlbnREaXNwYXRjaGVyOwot
fQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3Bl
Y3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwot
ICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxl
cik7Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQot
Ci0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBbX2RhdGFiYXNlRXZlbnREaXNwYXRjaGVyIHJlbGVh
c2VdOwotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAoVGVzdFByb3RvY29sRGF0YWJhc2VE
b21haW5FdmVudERpc3BhdGNoZXIgKilkYXRhYmFzZUV2ZW50RGlzcGF0Y2hlcgotewotICAgIGlm
ICghX2RhdGFiYXNlRXZlbnREaXNwYXRjaGVyKQotICAgICAgICBfZGF0YWJhc2VFdmVudERpc3Bh
dGNoZXIgPSBbW1Rlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluRXZlbnREaXNwYXRjaGVyIGFsbG9j
XSBpbml0V2l0aENvbnRyb2xsZXI6X2NvbnRyb2xsZXJdOwotICAgIHJldHVybiBfZGF0YWJhc2VF
dmVudERpc3BhdGNoZXI7Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24ubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlz
cGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0
aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9y
dCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDx3dGYvSlNPTlZhbHVl
cy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW1wbGVtZW50YXRpb24gVGVz
dFByb3RvY29sRGF0YWJhc2VEb21haW5FdmVudERpc3BhdGNoZXIKLXsKLSAgICBBdWdtZW50YWJs
ZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotfQotCi0tIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRy
b2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAg
ICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRyb2xsZXIg
PSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWRpZEV4ZWN1dGVP
cHRpb25hbFBhcmFtZXRlcnNXaXRoQ29sdW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAq
Kiljb2x1bW5OYW1lcyBub3RlczooTlNTdHJpbmcgKiopbm90ZXMgdGltZXN0YW1wOihkb3VibGUg
Kil0aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKiopdmFsdWVzIHBheWxv
YWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKilwYXlsb2FkIHNxbEVycm9yOihUZXN0UHJvdG9j
b2xEYXRhYmFzZUVycm9yICoqKXNxbEVycm9yIHNjcmVlbkNvbG9yOihOU1N0cmluZyAqKilzY3Jl
ZW5Db2xvciBhbHRlcm5hdGVDb2xvcnM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKilhbHRlcm5h
dGVDb2xvcnMgcHJpbnRDb2xvcjooTlNTdHJpbmcgKiopcHJpbnRDb2xvcgotewotICAgIGNvbnN0
IEZyb250ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29udHJvbGxlci0+ZnJvbnRlbmRSb3V0ZXIoKTsK
LQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihjb2x1bW5O
YW1lcywgQCJjb2x1bW5OYW1lcyIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElP
TkFMX1BBUkFNRVRFUihub3RlcywgQCJub3RlcyIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
QkFEX09QVElPTkFMX1BBUkFNRVRFUih2YWx1ZXMsIEAidmFsdWVzIik7Ci0gICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHBheWxvYWQsIEAicGF5bG9hZCIpOwot
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihzcWxFcnJvciwg
QCJzcWxFcnJvciIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFN
RVRFUihzY3JlZW5Db2xvciwgQCJzY3JlZW5Db2xvciIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihhbHRlcm5hdGVDb2xvcnMsIEAiYWx0ZXJuYXRlQ29s
b3JzIik7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHBy
aW50Q29sb3IsIEAicHJpbnRDb2xvciIpOwotCi0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1l
c3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJp
bmcoIm1ldGhvZCJfcywgIkRhdGFiYXNlLmRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMiX3Mp
OwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHBhcmFtc09iamVjdCA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7Ci0gICAgaWYgKGNvbHVtbk5hbWVzKQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldEFy
cmF5KCJjb2x1bW5OYW1lcyJfcywgdG9KU09OU3RyaW5nQXJyYXkoKCpjb2x1bW5OYW1lcykpKTsK
LSAgICBpZiAobm90ZXMpCi0gICAgICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJub3RlcyJf
cywgKCpub3RlcykpOwotICAgIGlmICh0aW1lc3RhbXApCi0gICAgICAgIHBhcmFtc09iamVjdC0+
c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICgqdGltZXN0YW1wKSk7Ci0gICAgaWYgKHZhbHVlcykK
LSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgWygqdmFsdWVzKSB0
b0pTT05PYmplY3RdKTsKLSAgICBpZiAocGF5bG9hZCkKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5z
ZXRWYWx1ZSgicGF5bG9hZCJfcywgWygqcGF5bG9hZCkgdG9KU09OT2JqZWN0XSk7Ci0gICAgaWYg
KHNxbEVycm9yKQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgic3FsRXJyb3IiX3Ms
IFsoKnNxbEVycm9yKSB0b0pTT05PYmplY3RdKTsKLSAgICBpZiAoc2NyZWVuQ29sb3IpCi0gICAg
ICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgKCpzY3JlZW5Db2xv
cikpOwotICAgIGlmIChhbHRlcm5hdGVDb2xvcnMpCi0gICAgICAgIHBhcmFtc09iamVjdC0+c2V0
QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5nQXJyYXkoKCphbHRlcm5hdGVD
b2xvcnMpKSk7Ci0gICAgaWYgKHByaW50Q29sb3IpCi0gICAgICAgIHBhcmFtc09iamVjdC0+c2V0
U3RyaW5nKCJwcmludENvbG9yIl9zLCAoKnByaW50Q29sb3IpKTsKLSAgICBqc29uTWVzc2FnZS0+
c2V0T2JqZWN0KCJwYXJhbXMiX3MsIFdURk1vdmUocGFyYW1zT2JqZWN0KSk7Ci0gICAgcm91dGVy
LnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwotfQotCi0tICh2b2lkKWRp
ZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1dpdGhDb2x1bW5OYW1lczooTlNBcnJheS8qPE5T
U3RyaW5nPiovICopY29sdW1uTmFtZXMgbm90ZXM6KE5TU3RyaW5nICopbm90ZXMgdGltZXN0YW1w
Oihkb3VibGUpdGltZXN0YW1wIHZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopdmFsdWVz
IHBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQgc3FsRXJyb3I6KFRlc3RQ
cm90b2NvbERhdGFiYXNlRXJyb3IgKilzcWxFcnJvciBzY3JlZW5Db2xvcjooTlNTdHJpbmcgKilz
Y3JlZW5Db2xvciBhbHRlcm5hdGVDb2xvcnM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWFsdGVy
bmF0ZUNvbG9ycyBwcmludENvbG9yOihOU1N0cmluZyAqKXByaW50Q29sb3IKLXsKLSAgICBjb25z
dCBGcm9udGVuZFJvdXRlciYgcm91dGVyID0gX2NvbnRyb2xsZXItPmZyb250ZW5kUm91dGVyKCk7
Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihjb2x1bW5OYW1l
cywgQCJjb2x1bW5OYW1lcyIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFS
QU1FVEVSKG5vdGVzLCBAIm5vdGVzIik7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJF
RF9QQVJBTUVURVIodmFsdWVzLCBAInZhbHVlcyIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
UkVRVUlSRURfUEFSQU1FVEVSKHBheWxvYWQsIEAicGF5bG9hZCIpOwotICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHNxbEVycm9yLCBAInNxbEVycm9yIik7Ci0gICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoc2NyZWVuQ29sb3IsIEAic2Ny
ZWVuQ29sb3IiKTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihh
bHRlcm5hdGVDb2xvcnMsIEAiYWx0ZXJuYXRlQ29sb3JzIik7Ci0gICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIocHJpbnRDb2xvciwgQCJwcmludENvbG9yIik7Ci0KLSAg
ICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRGF0YWJhc2UuZGlkRXhl
Y3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIl9zKTsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBwYXJh
bXNPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIHBhcmFtc09iamVjdC0+c2V0
QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB0b0pTT05TdHJpbmdBcnJheShjb2x1bW5OYW1lcykpOwot
ICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJub3RlcyJfcywgbm90ZXMpOwotICAgIHBhcmFt
c09iamVjdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIHRpbWVzdGFtcCk7Ci0gICAgcGFyYW1z
T2JqZWN0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgW3ZhbHVlcyB0b0pTT05PYmplY3RdKTsKLSAg
ICBwYXJhbXNPYmplY3QtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBbcGF5bG9hZCB0b0pTT05PYmpl
Y3RdKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIFtzcWxFcnJv
ciB0b0pTT05PYmplY3RdKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygic2NyZWVuQ29s
b3IiX3MsIHNjcmVlbkNvbG9yKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldEFycmF5KCJhbHRlcm5h
dGVDb2xvcnMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KGFsdGVybmF0ZUNvbG9ycykpOwotICAgIHBh
cmFtc09iamVjdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCBwcmludENvbG9yKTsKLSAgICBq
c29uTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiX3MsIFdURk1vdmUocGFyYW1zT2JqZWN0KSk7
Ci0gICAgcm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwotfQot
Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1t
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxGb3VuZGF0aW9u
L0ZvdW5kYXRpb24uaD4KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9i
amVjdC5oPgotCi0KLUBjbGFzcyBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yOwotCi10eXBlZGVm
IE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xQbGF0Zm9ybSkgewotICAgIFRlc3RQcm90
b2NvbFBsYXRmb3JtQWxsLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYywKLSAgICBU
ZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TLAot
fTsKLQotCi0KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50
ZXJmYWNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgOiBSV0lQcm90b2NvbEpTT05PYmplY3QK
LS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAq
LCBpZD4gKilwYXlsb2FkOwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6
KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7Ci0tIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZTooaW50KWNvZGU7Ci0vKiByZXF1
aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKm1lc3NhZ2U7Ci0v
KiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQgY29kZTsKLUBl
bmQKLQotCi0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVy
ZmFjZSBUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkV2ZW50RGlzcGF0Y2hlciA6IE5TT2JqZWN0
Ci0tICh2b2lkKWRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnNXaXRoQ29sdW1uTmFtZXM6KE5T
QXJyYXkvKjxOU1N0cmluZz4qLyAqKiljb2x1bW5OYW1lcyBub3RlczooTlNTdHJpbmcgKiopbm90
ZXMgdGltZXN0YW1wOihkb3VibGUgKil0aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90b2NvbEpTT05P
YmplY3QgKiopdmFsdWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKilwYXlsb2Fk
IHNxbEVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqKXNxbEVycm9yIHNjcmVlbkNv
bG9yOihOU1N0cmluZyAqKilzY3JlZW5Db2xvciBhbHRlcm5hdGVDb2xvcnM6KE5TQXJyYXkvKjxO
U1N0cmluZz4qLyAqKilhbHRlcm5hdGVDb2xvcnMgcHJpbnRDb2xvcjooTlNTdHJpbmcgKiopcHJp
bnRDb2xvcjsKLS0gKHZvaWQpZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzV2l0aENvbHVt
bk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcyBub3RlczooTlNTdHJp
bmcgKilub3RlcyB0aW1lc3RhbXA6KGRvdWJsZSl0aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90b2Nv
bEpTT05PYmplY3QgKil2YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5
bG9hZCBzcWxFcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKXNxbEVycm9yIHNjcmVl
bkNvbG9yOihOU1N0cmluZyAqKXNjcmVlbkNvbG9yIGFsdGVybmF0ZUNvbG9yczooTlNBcnJheS8q
PE5TU3RyaW5nPiovICopYWx0ZXJuYXRlQ29sb3JzIHByaW50Q29sb3I6KE5TU3RyaW5nICopcHJp
bnRDb2xvcjsKLUBlbmQKLQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWls
ZENvbXBhdGliaWxpdHlPYmplY3RzLmg+Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgK
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVz
dFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgot
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+
Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbERh
dGFiYXNlRG9tYWluRXZlbnREaXNwYXRjaGVyIChQcml2YXRlKQotLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoQ29udHJvbGxlcjooSW5zcGVjdG9yOjpBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xs
ZXIqKWNvbnRyb2xsZXI7Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRl
cm5hbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBh
cmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90
b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KLU9wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVBy
b3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOwotCi1pbmxpbmUgU3RyaW5nIHRvUHJv
dG9jb2xTdHJpbmcoVGVzdFByb3RvY29sUGxhdGZvcm0gdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZh
bHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDoKLSAgICAgICAgcmV0dXJu
ICJhbGwiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM6Ci0gICAgICAg
IHJldHVybiAiZ2VuZXJpYyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOgot
ICAgICAgICByZXR1cm4gImlvcyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFj
T1M6Ci0gICAgICAgIHJldHVybiAibWFjb3MiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1p
bmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sUGxhdGZvcm0+IGZyb21Qcm90b2NvbFN0cmluZyhj
b25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiYWxsIikKLSAgICAgICAg
cmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOwotICAgIGlmICh2YWx1ZSA9PSAiZ2VuZXJp
YyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM7Ci0gICAgaWYg
KHZhbHVlID09ICJpb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1JT1M7
Ci0gICAgaWYgKHZhbHVlID09ICJtYWNvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQ
bGF0Zm9ybU1hY09TOwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLQotCi19IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1t
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwt
cGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotCi0jaW1wb3J0ICJU
ZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKLSNpbXBv
cnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0KLXVzaW5n
IG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zIChEYXRhYmFzZURvbWFpbikKLQotKyAodm9pZClfcGFyc2VEYXRhYmFzZUlkOihOU1N0
cmluZyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLSsgKHZvaWQpX3BhcnNl
UHJpbWFyeUNvbG9yczooTlNTdHJpbmcgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxv
YWQ7Ci0rICh2b2lkKV9wYXJzZUNvbG9yTGlzdDooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKW91
dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotKyAodm9pZClfcGFyc2VFcnJvcjooVGVz
dFByb3RvY29sRGF0YWJhc2VFcnJvciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9h
ZDsKLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
IChEYXRhYmFzZURvbWFpbikKLQotKyAodm9pZClfcGFyc2VEYXRhYmFzZUlkOihOU1N0cmluZyAq
KilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TU3RyaW5nIGNsYXNzXSk7Ci0gICAgKm91dFZhbHVl
ID0gKE5TU3RyaW5nICopcGF5bG9hZDsKLX0KLQotKyAodm9pZClfcGFyc2VQcmltYXJ5Q29sb3Jz
OihOU1N0cmluZyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TU3RyaW5nIGNsYXNzXSk7Ci0g
ICAgKm91dFZhbHVlID0gKE5TU3RyaW5nICopcGF5bG9hZDsKLX0KLQotKyAodm9pZClfcGFyc2VD
b2xvckxpc3Q6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDoo
aWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwg
W05TQXJyYXkvKjxOU1N0cmluZz4qLyBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IChOU0FycmF5
Lyo8TlNTdHJpbmc+Ki8gKilwYXlsb2FkOwotfQotCi0rICh2b2lkKV9wYXJzZUVycm9yOihUZXN0
UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2Fk
Ci17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNEaWN0aW9u
YXJ5IGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9y
IGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sVHlwZXMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBl
dmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIK
LQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDxXZWJJ
bnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotI2ltcG9ydCA8d3RmL0Fz
c2VydGlvbnMuaD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFj
ZSBJbnNwZWN0b3I7Ci0KLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbERhdGFiYXNlRXJy
b3IKLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25h
cnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIg
aW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9S
RVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AibWVzc2FnZSJdLCBAIm1lc3NhZ2UiKTsKLSAgICBz
ZWxmLm1lc3NhZ2UgPSBwYXlsb2FkW0AibWVzc2FnZSJdOwotCi0gICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiY29kZSJdLCBAImNvZGUiKTsKLSAgICBz
ZWxmLmNvZGUgPSBbcGF5bG9hZFtAImNvZGUiXSBpbnRlZ2VyVmFsdWVdOwotCi0gICAgcmV0dXJu
IHNlbGY7Ci19Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJv
dG9jb2xKU09OT2JqZWN0ICopb2JqZWN0Ci17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0
V2l0aEpTT05PYmplY3Q6W29iamVjdCB0b0pTT05PYmplY3RdLmdldCgpXSkpCi0gICAgICAgIHJl
dHVybiBuaWw7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlIGNvZGU6KGludCljb2RlCi17Ci0gICAgaWYg
KCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBUSFJP
V19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKG1lc3NhZ2UsIEAibWVzc2FnZSIpOwot
Ci0gICAgc2VsZi5tZXNzYWdlID0gbWVzc2FnZTsKLSAgICBzZWxmLmNvZGUgPSBjb2RlOwotCi0g
ICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpc2V0TWVzc2FnZTooTlNTdHJpbmcgKiltZXNz
YWdlCi17Ci0gICAgW3N1cGVyIHNldFN0cmluZzptZXNzYWdlIGZvcktleTpAIm1lc3NhZ2UiXTsK
LX0KLQotLSAoTlNTdHJpbmcgKiltZXNzYWdlCi17Ci0gICAgcmV0dXJuIFtzdXBlciBzdHJpbmdG
b3JLZXk6QCJtZXNzYWdlIl07Ci19Ci0KLS0gKHZvaWQpc2V0Q29kZTooaW50KWNvZGUKLXsKLSAg
ICBbc3VwZXIgc2V0SW50ZWdlcjpjb2RlIGZvcktleTpAImNvZGUiXTsKLX0KLQotLSAoaW50KWNv
ZGUKLXsKLSAgICByZXR1cm4gW3N1cGVyIGludGVnZXJGb3JLZXk6QCJjb2RlIl07Ci19Ci0KLUBl
bmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBl
Y3RlZC9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJs
ZVR5cGUuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tY29tbWFuZC10YXJnZXRUeXBlLW1hdGNo
aW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLWVycm9yCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBhMTMwYWQ3MGM0MC4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1j
b21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tZXJy
b3IKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1FUlJPUjogTWFsZm9ybWVkIGRvbWFpbiBz
cGVjaWZpY2F0aW9uOiBkb21haW4gRG9tYWluIGhhcyBhbiBpdGVtIGluIHRhcmdldFR5cGVzICJb
dSd3b3JrZXInXSIgdGhhdCBpcyBub3Qgc3VwcG9ydGVkIGJ5IGFueSB2YWx1ZSBpbiBkZWJ1Z2dh
YmxlVHlwZXMgIlt1J2phdmFzY3JpcHQnXSIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWNv
bW1hbmQtdGFyZ2V0VHlwZXMtdHlwZS5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1jb21tYW5k
LXRhcmdldFR5cGVzLXR5cGUuanNvbi1lcnJvcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggOTlmNWUxYTRhOGUuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tY29tbWFuZC10
YXJnZXRUeXBlcy10eXBlLmpzb24tZXJyb3IKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1F
UlJPUjogTWFsZm9ybWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9uOiB0YXJnZXRUeXBlcyBsaXN0IGZv
ciBjb21tYW5kIFBhZ2VPbmx5IGlzIG5vdCBhbiBhcnJheQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFp
bC1vbi1jb21tYW5kLXRhcmdldFR5cGVzLXZhbHVlLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9u
LWNvbW1hbmQtdGFyZ2V0VHlwZXMtdmFsdWUuanNvbi1lcnJvcgpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMjFhMzY1Njk5MjYuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24t
Y29tbWFuZC10YXJnZXRUeXBlcy12YWx1ZS5qc29uLWVycm9yCisrKyAvZGV2L251bGwKQEAgLTEg
KzAsMCBAQAotRVJST1I6IE1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjogdGFyZ2V0VHlw
ZXMgbGlzdCBmb3IgY29tbWFuZCBQYWdlT25seSBpcyBhbiB1bnN1cHBvcnRlZCBzdHJpbmcuIFdh
czogIlt1J3BhZ2VlJ10iLCBBbGxvd2VkIHZhbHVlczogc2VydmljZS13b3JrZXIsIGphdmFzY3Jp
cHQsIHdvcmtlciwgcGFnZSwgd2ViLXBhZ2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tY29t
bWFuZC13aXRoLWludmFsaWQtcGxhdGZvcm0uanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tY29t
bWFuZC13aXRoLWludmFsaWQtcGxhdGZvcm0uanNvbi1lcnJvcgpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggZWM2MzZjNTRiN2MuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24t
Y29tbWFuZC13aXRoLWludmFsaWQtcGxhdGZvcm0uanNvbi1lcnJvcgorKysgL2Rldi9udWxsCkBA
IC0xICswLDAgQEAKLUVSUk9SOiBVbmtub3duIHBsYXRmb3JtOiBpbnZhbGlkCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9l
eHBlY3RlZC9mYWlsLW9uLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMtdHlwZS5qc29uLWVycm9yIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhw
ZWN0ZWQvZmFpbC1vbi1kb21haW4tZGVidWdnYWJsZVR5cGVzLXR5cGUuanNvbi1lcnJvcgpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmI4OThiYTdiZTcuLjAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4
cGVjdGVkL2ZhaWwtb24tZG9tYWluLWRlYnVnZ2FibGVUeXBlcy10eXBlLmpzb24tZXJyb3IKKysr
IC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1FUlJPUjogTWFsZm9ybWVkIGRvbWFpbiBzcGVjaWZp
Y2F0aW9uOiBkZWJ1Z2dhYmxlVHlwZXMgZm9yIGRvbWFpbiBXZWJPbmx5IGlzIG5vdCBhbiBhcnJh
eQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4tZGVidWdnYWJsZVR5cGVzLXZhbHVl
Lmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMtdmFsdWUu
anNvbi1lcnJvcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmY3MWQ0NzBjYmQuLjAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZG9tYWluLWRlYnVnZ2FibGVUeXBlcy12YWx1
ZS5qc29uLWVycm9yCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotRVJST1I6IE1hbGZvcm1l
ZCBkb21haW4gc3BlY2lmaWNhdGlvbjogZGVidWdnYWJsZVR5cGVzIGZvciBkb21haW4gV2ViT25s
eSBpcyBhbiB1bnN1cHBvcnRlZCBzdHJpbmcuIFdhczogIlt1J3dlYmInXSIsIEFsbG93ZWQgdmFs
dWVzOiBzZXJ2aWNlLXdvcmtlciwgamF2YXNjcmlwdCwgcGFnZSwgd2ViLXBhZ2UKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2V4cGVjdGVkL2ZhaWwtb24tZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVn
Z2FibGVUeXBlLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWRvbWFpbi10YXJnZXRUeXBlLW1h
dGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLWVycm9yCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA4NjdlMzUwMDg5OC4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1v
bi1kb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1l
cnJvcgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUVSUk9SOiBNYWxmb3JtZWQgZG9tYWlu
IHNwZWNpZmljYXRpb246IGNvbW1hbmQgQ29tbWFuZCBoYXMgYW4gaXRlbSBpbiB0YXJnZXRUeXBl
cyAiW3Und29ya2VyJ10iIHRoYXQgaXMgbm90IHN1cHBvcnRlZCBieSBhbnkgdmFsdWUgaW4gZGVi
dWdnYWJsZVR5cGVzICJbdSdqYXZhc2NyaXB0J10iLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1v
bi1kb21haW4tdGFyZ2V0VHlwZXMtdHlwZS5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1kb21h
aW4tdGFyZ2V0VHlwZXMtdHlwZS5qc29uLWVycm9yCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBlOWEzNTkzM2EzNS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4t
dGFyZ2V0VHlwZXMtdHlwZS5qc29uLWVycm9yCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAot
RVJST1I6IE1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjogdGFyZ2V0VHlwZXMgZm9yIGRv
bWFpbiBQYWdlT25seSBpcyBub3QgYW4gYXJyYXkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24t
ZG9tYWluLXRhcmdldFR5cGVzLXZhbHVlLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWRvbWFp
bi10YXJnZXRUeXBlcy12YWx1ZS5qc29uLWVycm9yCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA0NjgwN2Y3MmZjNC4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4t
dGFyZ2V0VHlwZXMtdmFsdWUuanNvbi1lcnJvcgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAK
LUVSUk9SOiBNYWxmb3JtZWQgZG9tYWluIHNwZWNpZmljYXRpb246IHRhcmdldFR5cGVzIGZvciBk
b21haW4gUGFnZU9ubHkgaXMgYW4gdW5zdXBwb3J0ZWQgc3RyaW5nLiBXYXM6ICJbdSdwYWdlZSdd
IiwgQWxsb3dlZCB2YWx1ZXM6IHNlcnZpY2Utd29ya2VyLCBqYXZhc2NyaXB0LCB3b3JrZXIsIHBh
Z2UsIHdlYi1wYWdlCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS1jb21tYW5k
LWNhbGwtcGFyYW1ldGVyLW5hbWVzLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0
ZS1jb21tYW5kLWNhbGwtcGFyYW1ldGVyLW5hbWVzLmpzb24tZXJyb3IKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDNmNzU2ZGUzMjUwLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWls
LW9uLWR1cGxpY2F0ZS1jb21tYW5kLWNhbGwtcGFyYW1ldGVyLW5hbWVzLmpzb24tZXJyb3IKKysr
IC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1FUlJPUjogTWFsZm9ybWVkIGRvbWFpbiBzcGVjaWZp
Y2F0aW9uOiBjYWxsIHBhcmFtZXRlciBsaXN0IGZvciBjb21tYW5kIHByb2Nlc3NQb2ludHMgaGFz
IGR1cGxpY2F0ZSBwYXJhbWV0ZXIgbmFtZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZHVw
bGljYXRlLWNvbW1hbmQtcmV0dXJuLXBhcmFtZXRlci1uYW1lcy5qc29uLWVycm9yIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQv
ZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1yZXR1cm4tcGFyYW1ldGVyLW5hbWVzLmpzb24tZXJy
b3IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhMTQ4ZmY2N2M5Li4wMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2Vu
ZXJpYy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS1jb21tYW5kLXJldHVybi1wYXJhbWV0ZXIt
bmFtZXMuanNvbi1lcnJvcgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUVSUk9SOiBNYWxm
b3JtZWQgZG9tYWluIHNwZWNpZmljYXRpb246IHJldHVybiBwYXJhbWV0ZXIgbGlzdCBmb3IgY29t
bWFuZCBwcm9jZXNzUG9pbnRzIGhhcyBkdXBsaWNhdGUgcGFyYW1ldGVyIG5hbWVzCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJp
Yy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS1ldmVudC1wYXJhbWV0ZXItbmFtZXMuanNvbi1l
cnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmljL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLWV2ZW50LXBhcmFtZXRlci1uYW1lcy5qc29u
LWVycm9yCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNzFiYmQyMWMyYy4uMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtZXZlbnQtcGFyYW1ldGVyLW5hbWVz
Lmpzb24tZXJyb3IKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1FUlJPUjogTWFsZm9ybWVk
IGRvbWFpbiBzcGVjaWZpY2F0aW9uOiBwYXJhbWV0ZXIgbGlzdCBmb3IgZXZlbnQgcHJvY2Vzc2Vk
UG9pbnRzIGhhcyBkdXBsaWNhdGUgcGFyYW1ldGVyIG5hbWVzCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9m
YWlsLW9uLWR1cGxpY2F0ZS10eXBlLWRlY2xhcmF0aW9ucy5qc29uLWVycm9yIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFp
bC1vbi1kdXBsaWNhdGUtdHlwZS1kZWNsYXJhdGlvbnMuanNvbi1lcnJvcgpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggNDQ3Y2RmOGUyOGUuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2Zh
aWwtb24tZHVwbGljYXRlLXR5cGUtZGVjbGFyYXRpb25zLmpzb24tZXJyb3IKKysrIC9kZXYvbnVs
bApAQCAtMSArMCwwIEBACi1FUlJPUjogRHVwbGljYXRlIHR5cGUgZGVjbGFyYXRpb246IFJ1bnRp
bWUuUmVtb3RlT2JqZWN0SWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLXR5
cGUtbWVtYmVyLW5hbWVzLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS10eXBl
LW1lbWJlci1uYW1lcy5qc29uLWVycm9yCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBk
NTM3NmE3N2E0NS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtdHlw
ZS1tZW1iZXItbmFtZXMuanNvbi1lcnJvcgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUVS
Uk9SOiBNYWxmb3JtZWQgZG9tYWluIHNwZWNpZmljYXRpb246IHR5cGUgZGVjbGFyYXRpb24gZm9y
IFBvaW50IGhhcyBkdXBsaWNhdGUgbWVtYmVyIG5hbWVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWls
LW9uLWVudW0td2l0aC1uby12YWx1ZXMuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZW51bS13
aXRoLW5vLXZhbHVlcy5qc29uLWVycm9yCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAy
NjU1YzJiOTA3ZS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1lbnVtLXdpdGgtbm8t
dmFsdWVzLmpzb24tZXJyb3IKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1FUlJPUjogVHlw
ZSByZWZlcmVuY2Ugd2l0aCBlbnVtIHZhbHVlcyBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIGVudW0g
dmFsdWUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGUtbWF0Y2hp
bmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWV2ZW50
LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tZXJyb3IKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2NWQ3YTBkMTk2Li4wMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9l
eHBlY3RlZC9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2Fi
bGVUeXBlLmpzb24tZXJyb3IKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1FUlJPUjogTWFs
Zm9ybWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9uOiBldmVudCBFdmVudCBoYXMgYW4gaXRlbSBpbiB0
YXJnZXRUeXBlcyAiW3Und29ya2VyJ10iIHRoYXQgaXMgbm90IHN1cHBvcnRlZCBieSBhbnkgdmFs
dWUgaW4gZGVidWdnYWJsZVR5cGVzICJbdSdqYXZhc2NyaXB0J10iLgpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0
ZWQvZmFpbC1vbi1ldmVudC10YXJnZXRUeXBlcy10eXBlLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWls
LW9uLWV2ZW50LXRhcmdldFR5cGVzLXR5cGUuanNvbi1lcnJvcgpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNzQwM2UxM2E4MDkuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24t
ZXZlbnQtdGFyZ2V0VHlwZXMtdHlwZS5qc29uLWVycm9yCisrKyAvZGV2L251bGwKQEAgLTEgKzAs
MCBAQAotRVJST1I6IE1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjogdGFyZ2V0VHlwZXMg
Zm9yIGV2ZW50IFBhZ2VPbmx5IGlzIG5vdCBhbiBhcnJheQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFp
bC1vbi1ldmVudC10YXJnZXRUeXBlcy12YWx1ZS5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1l
dmVudC10YXJnZXRUeXBlcy12YWx1ZS5qc29uLWVycm9yCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA4MzAxMmE5ZmU0ZS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1ldmVu
dC10YXJnZXRUeXBlcy12YWx1ZS5qc29uLWVycm9yCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBA
QAotRVJST1I6IE1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjogdGFyZ2V0VHlwZXMgZm9y
IGV2ZW50IFBhZ2VPbmx5IGlzIGFuIHVuc3VwcG9ydGVkIHN0cmluZy4gV2FzOiAiW3UncGFnZWUn
XSIsIEFsbG93ZWQgdmFsdWVzOiBzZXJ2aWNlLXdvcmtlciwgamF2YXNjcmlwdCwgd29ya2VyLCBw
YWdlLCB3ZWItcGFnZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0
aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tbnVtYmVyLXR5
cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24tZXJyb3IKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDk3YjJhZjBlNDdlLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9u
LW51bWJlci10eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29uLWVycm9yCisrKyAvZGV2
L251bGwKQEAgLTEgKzAsMCBAQAotRVJST1I6IFRoZSAnb3B0aW9uYWwnIGZsYWcgZm9yIGEgcGFy
YW1ldGVyIG11c3QgYmUgYSBib29sZWFuIGxpdGVyYWwuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWls
LW9uLW51bWJlci10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29uLWVycm9yIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQv
ZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNvbi1lcnJvcgpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODZkZjM3NTBjMWEuLjAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4
cGVjdGVkL2ZhaWwtb24tbnVtYmVyLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24tZXJy
b3IKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1FUlJPUjogVGhlICdvcHRpb25hbCcgZmxh
ZyBmb3IgYSB0eXBlIG1lbWJlciBtdXN0IGJlIGEgYm9vbGVhbiBsaXRlcmFsLgpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMv
ZXhwZWN0ZWQvZmFpbC1vbi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNv
bi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1m
bGFnLmpzb24tZXJyb3IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3YjJhZjBlNDdl
Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXN0cmluZy10eXBlZC1vcHRpb25hbC1w
YXJhbWV0ZXItZmxhZy5qc29uLWVycm9yCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotRVJS
T1I6IFRoZSAnb3B0aW9uYWwnIGZsYWcgZm9yIGEgcGFyYW1ldGVyIG11c3QgYmUgYSBib29sZWFu
IGxpdGVyYWwuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXN0cmluZy10eXBlZC1vcHRpb25h
bC10eXBlLW1lbWJlci5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1zdHJpbmctdHlwZWQtb3B0
aW9uYWwtdHlwZS1tZW1iZXIuanNvbi1lcnJvcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggODZkZjM3NTBjMWEuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tc3RyaW5nLXR5
cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24tZXJyb3IKKysrIC9kZXYvbnVsbApAQCAtMSAr
MCwwIEBACi1FUlJPUjogVGhlICdvcHRpb25hbCcgZmxhZyBmb3IgYSB0eXBlIG1lbWJlciBtdXN0
IGJlIGEgYm9vbGVhbiBsaXRlcmFsLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi10eXBlLWRl
Y2xhcmF0aW9uLXVzaW5nLXR5cGUtcmVmZXJlbmNlLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9u
LXR5cGUtZGVjbGFyYXRpb24tdXNpbmctdHlwZS1yZWZlcmVuY2UuanNvbi1lcnJvcgpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDJmNTc1M2E0MzkuLjAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVj
dGVkL2ZhaWwtb24tdHlwZS1kZWNsYXJhdGlvbi11c2luZy10eXBlLXJlZmVyZW5jZS5qc29uLWVy
cm9yCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotRVJST1I6IFR5cGUgcmVmZXJlbmNlIGNh
bm5vdCBoYXZlIGJvdGggJ3R5cGUnIGFuZCAnJHJlZicga2V5cy4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVk
L2ZhaWwtb24tdHlwZS1yZWZlcmVuY2UtYXMtcHJpbWl0aXZlLXR5cGUuanNvbi1lcnJvciBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVj
dGVkL2ZhaWwtb24tdHlwZS1yZWZlcmVuY2UtYXMtcHJpbWl0aXZlLXR5cGUuanNvbi1lcnJvcgpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDc2YmMxYzc3NzMuLjAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2V4cGVjdGVkL2ZhaWwtb24tdHlwZS1yZWZlcmVuY2UtYXMtcHJpbWl0aXZlLXR5cGUuanNvbi1l
cnJvcgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUVSUk9SOiBUeXBlIHJlZmVyZW5jZSAn
RGF0YWJhc2VJZCcgaXMgbm90IGEgcHJpbWl0aXZlIHR5cGUuIEFsbG93ZWQgdmFsdWVzOiBpbnRl
Z2VyLCBudW1iZXIsIHN0cmluZywgYm9vbGVhbiwgZW51bSwgb2JqZWN0LCBhcnJheSwgYW55CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXR5cGUtd2l0aC1pbnZhbGlkLXBsYXRmb3JtLmpzb24t
ZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2Vu
ZXJpYy9leHBlY3RlZC9mYWlsLW9uLXR5cGUtd2l0aC1pbnZhbGlkLXBsYXRmb3JtLmpzb24tZXJy
b3IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjNjM2YzU0YjdjLi4wMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2Vu
ZXJpYy9leHBlY3RlZC9mYWlsLW9uLXR5cGUtd2l0aC1pbnZhbGlkLXBsYXRmb3JtLmpzb24tZXJy
b3IKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1FUlJPUjogVW5rbm93biBwbGF0Zm9ybTog
aW52YWxpZApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi10eXBlLXdpdGgtbG93ZXJjYXNlLW5h
bWUuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS13aXRoLWxvd2VyY2FzZS1uYW1lLmpz
b24tZXJyb3IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlNDYyMjUwYzBhLi4wMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXR5cGUtd2l0aC1sb3dlcmNhc2UtbmFtZS5qc29u
LWVycm9yCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotRVJST1I6IFR5cGVzIG11c3QgYmVn
aW4gd2l0aCBhbiB1cHBlcmNhc2UgY2hhcmFjdGVyLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1v
bi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtZGVjbGFyYXRpb24uanNvbi1lcnJvciBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4
cGVjdGVkL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLWRlY2xhcmF0aW9u
Lmpzb24tZXJyb3IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkMzhlNjQ2NzVkLi4w
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4t
dHlwZS1kZWNsYXJhdGlvbi5qc29uLWVycm9yCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAot
RVJST1I6IFR5cGUgcmVmZXJlbmNlICdkcmFnb24nIGlzIG5vdCBhIHByaW1pdGl2ZSB0eXBlLiBB
bGxvd2VkIHZhbHVlczogaW50ZWdlciwgbnVtYmVyLCBzdHJpbmcsIGJvb2xlYW4sIGVudW0sIG9i
amVjdCwgYXJyYXksIGFueQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi11bmtub3duLXR5cGUt
cmVmZXJlbmNlLWluLXR5cGUtbWVtYmVyLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXVua25v
d24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1tZW1iZXIuanNvbi1lcnJvcgpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggZmFmNjY3MmNiZWYuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2Zh
aWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLW1lbWJlci5qc29uLWVycm9yCisr
KyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotRVJST1I6IExvb2t1cCBmYWlsZWQgZm9yIHR5cGUg
cmVmZXJlbmNlOiBDb2xvciAocmVmZXJlbmNlZCBmcm9tIGRvbWFpbjogRmFudGFzeSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmljL2V4cGVjdGVkL2dlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uLXJl
c3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmljL2V4cGVjdGVkL2dlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uLXJl
c3VsdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDk0NmI1M2UzZjguLjAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL2V4cGVjdGVkL2dlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29u
LXJlc3VsdAorKysgL2Rldi9udWxsCkBAIC0xLDEyNDUgKzAsMCBAQAotIyMjIEJlZ2luIEZpbGU6
IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLS8vIE5ldHdvcmsxCi1JbnNwZWN0
b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJOZXR3b3JrMSIsIG51bGwpOwotSW5zcGVjdG9yQmFj
a2VuZC5yZWdpc3RlckNvbW1hbmQoIk5ldHdvcmsxLmxvYWRSZXNvdXJjZSIsIG51bGwsIFtdLCBb
XSk7Ci1JbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJOZXR3b3JrMSIsIG51bGwpOwot
Ci0vLyBOZXR3b3JrMwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiTmV0d29yazMi
LCBudWxsKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudCgiTmV0d29yazMucmVzb3Vy
Y2VMb2FkZWQiLCBudWxsLCBbXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyTmV0d29yazNE
aXNwYXRjaGVyID0gSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRpc3BhdGNoZXIuYmluZChJbnNw
ZWN0b3JCYWNrZW5kLCAiTmV0d29yazMiKTsKLUluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21h
aW4oIk5ldHdvcmszIiwgbnVsbCk7Ci0jIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21t
YW5kcy5qcwotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVy
cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13
aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCi0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotCi1uYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKLQotY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGlj
OgotICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVy
PiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hl
cik7IH0KLSAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7
IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Ci1wcml2YXRlOgotICAgIFJlZlB0
cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKLX07Ci0KLQotI2lmIFBM
QVRGT1JNKFdFQl9DT01NQU5EUykKLWNsYXNzIEFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3Bh
dGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAg
IHZpcnR1YWwgfkFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoKSB7IH0KLSAgICB2
aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgY2FsbElkKSA9IDA7Ci19OwotI2VuZGlmIC8v
IFBMQVRGT1JNKFdFQl9DT01NQU5EUykKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSNl
bmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSMjIyBFbmQg
RmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgotLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1
ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7
Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSNpZiBQTEFU
Rk9STShXRUJfQ09NTUFORFMpCi1jbGFzcyBBbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRj
aGVyOwotI2VuZGlmIC8vIFBMQVRGT1JNKFdFQl9DT01NQU5EUykKLSNlbmRpZiAvLyBFTkFCTEUo
SU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQotI2lmIFBMQVRGT1JNKFdFQl9DT01N
QU5EUykKLWNsYXNzIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKLXB1YmxpYzoK
LSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlKEVycm9yU3RyaW5nJikgPSAwOwotcHJvdGVj
dGVkOgotICAgIHZpcnR1YWwgfk5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7Ci19
OwotI2VuZGlmIC8vIFBMQVRGT1JNKFdFQl9DT01NQU5EUykKLQotI2lmIFBMQVRGT1JNKFdFQl9D
T01NQU5EUykKLWNsYXNzIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMg
U3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8
TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgTmV0
d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICB2b2lkIGRpc3BhdGNoKGxvbmcg
cmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNz
YWdlKSBmaW5hbDsKLXByaXZhdGU6Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0
SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0jaWYgRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi1wdWJsaWM6Ci0gICAgdm9pZCBzZXRBbHRlcm5h
dGVEaXNwYXRjaGVyKEFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0
ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hl
cjsgfQotcHJpdmF0ZToKLSAgICBBbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKiBt
X2FsdGVybmF0ZURpc3BhdGNoZXIgeyBudWxscHRyIH07Ci0jZW5kaWYKLXByaXZhdGU6Ci0gICAg
TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYsIE5ldHdvcmsxQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXIqIG1fYWdlbnQgeyBudWxscHRyIH07Ci19OwotI2VuZGlmIC8vIFBMQVRGT1JNKFdFQl9D
T01NQU5EUykKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21h
aW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEJhY2tl
bmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJv
bnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0
Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2lm
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotI2luY2x1ZGUgIlRlc3RB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgSW5zcGVj
dG9yIHsKLQotI2lmIFBMQVRGT1JNKFdFQl9DT01NQU5EUykKLU5ldHdvcmsxQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyOjp+TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KLSNl
bmRpZiAvLyBQTEFURk9STShXRUJfQ09NTUFORFMpCi0KLSNpZiBQTEFURk9STShXRUJfQ09NTUFO
RFMpCi1SZWY8TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4gTmV0d29yazFCYWNrZW5kRGlzcGF0
Y2hlcjo6Y3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgTmV0d29y
azFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQotewotICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIsIGFnZW50
KSk7Ci19Ci0KLU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6Ok5ldHdvcmsxQmFja2VuZERpc3Bh
dGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBOZXR3b3JrMUJhY2tl
bmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCi0gICAgOiBTdXBwbGVtZW50YWxCYWNrZW5kRGlz
cGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKLSAgICAsIG1fYWdlbnQoYWdlbnQpCi17Ci0gICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKCJOZXR3b3Jr
MSJfcywgdGhpcyk7Ci19Ci0KLXZvaWQgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0
Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0
PiYmIG1lc3NhZ2UpCi17Ci0gICAgUmVmPE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI+IHByb3Rl
Y3QoKnRoaXMpOwotCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVyczsKLSAgICBt
ZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFyYW1ldGVycyk7Ci0KLSAgICBpZiAobWV0
aG9kID09ICJsb2FkUmVzb3VyY2UiKQotICAgICAgICBsb2FkUmVzb3VyY2UocmVxdWVzdElkLCBX
VEZNb3ZlKHBhcmFtZXRlcnMpKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5k
LCAiJ05ldHdvcmsxLiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7Ci19Ci0KLXZvaWQg
TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkLCBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQotewotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQotICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAg
bV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2UocmVxdWVzdElkKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVm
PEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtX2Fn
ZW50LT5sb2FkUmVzb3VyY2UoZXJyb3IpOwotCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAg
ICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92
ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RG
TW92ZShlcnJvcikpOwotfQotI2VuZGlmIC8vIFBMQVRGT1JNKFdFQl9DT01NQU5EUykKLQotfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVh
dHVyZS1ndWFyZHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNp
bmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgRnJvbnRlbmRSb3V0ZXI7Ci0KLSNp
ZiBQTEFURk9STShXRUJfRVZFTlRTKQotY2xhc3MgTmV0d29yazNGcm9udGVuZERpc3BhdGNoZXIg
ewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIE5ldHdvcmszRnJv
bnRlbmREaXNwYXRjaGVyKEZyb250ZW5kUm91dGVyJiBmcm9udGVuZFJvdXRlcikgOiBtX2Zyb250
ZW5kUm91dGVyKGZyb250ZW5kUm91dGVyKSB7IH0KLSAgICB2b2lkIHJlc291cmNlTG9hZGVkKCk7
Ci1wcml2YXRlOgotICAgIEZyb250ZW5kUm91dGVyJiBtX2Zyb250ZW5kUm91dGVyOwotfTsKLSNl
bmRpZiAvLyBQTEFURk9STShXRUJfRVZFTlRTKQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
LSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLSNpZiBQTEFURk9STShXRUJf
RVZFTlRTKQotdm9pZCBOZXR3b3JrM0Zyb250ZW5kRGlzcGF0Y2hlcjo6cmVzb3VyY2VMb2FkZWQo
KQotewotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJOZXR3b3Jr
My5yZXNvdXJjZUxvYWRlZCJfcyk7Ci0KLSAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChq
c29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwotfQotI2VuZGlmIC8vIFBMQVRGT1JNKFdFQl9F
VkVOVFMpCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RG
cm9udGVuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2Jq
ZWN0cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlu
cy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQot
bmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQot
Ly8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCi0jaWYgUExBVEZPUk0oV0VCX1RZUEVTKQotbmFtZXNw
YWNlIE5ldHdvcmsyIHsKLWNsYXNzIE5ldHdvcmtFcnJvcjsKLX0gLy8gTmV0d29yazIKLSNlbmRp
ZiAvLyBQTEFURk9STShXRUJfVFlQRVMpCi0vLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMu
Ci0KLQotCi0KLSNpZiBQTEFURk9STShXRUJfVFlQRVMpCi1uYW1lc3BhY2UgTmV0d29yazIgewot
Y2xhc3MgTmV0d29ya0Vycm9yIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewotcHVibGljOgot
ICAgIGVudW0gewotICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCi0gICAgICAgIE1lc3NhZ2VTZXQg
PSAxIDw8IDAsCi0gICAgICAgIENvZGVTZXQgPSAxIDw8IDEsCi0gICAgICAgIEFsbEZpZWxkc1Nl
dCA9IChNZXNzYWdlU2V0IHwgQ29kZVNldCkKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8aW50IFNU
QVRFPgotICAgIGNsYXNzIEJ1aWxkZXIgewotICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0cjxK
U09OOjpPYmplY3Q+IG1fcmVzdWx0OwotCi0gICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWls
ZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXIoUmVmPC8qTmV0d29ya0Vycm9yKi9KU09OOjpPYmpl
Y3Q+JiYgb2JqZWN0KQotICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0
LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwotICAgICAgICB9Ci0gICAgICAg
IGZyaWVuZCBjbGFzcyBOZXR3b3JrRXJyb3I7Ci0gICAgcHVibGljOgotCi0gICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIHZhbHVlKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTWVzc2FnZVNl
dCksIHByb3BlcnR5X21lc3NhZ2VfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQt
PnNldFN0cmluZygibWVzc2FnZSJfcywgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxNZXNzYWdlU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8
IENvZGVTZXQ+JiBzZXRDb2RlKGludCB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIENvZGVTZXQpLCBwcm9wZXJ0eV9jb2RlX2FscmVhZHlfc2V0
KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2VyKCJjb2RlIl9zLCB2YWx1ZSk7Ci0g
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvZGVTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBSZWY8TmV0d29ya0Vycm9yPiByZWxlYXNlKCkKLSAgICAgICAgewotICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5
KTsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihOZXR3b3JrRXJyb3IpID09IHNp
emVvZihKU09OOjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7Ci0KLSAgICAgICAgICAgIFJlZjxKU09O
OjpPYmplY3Q+IGpzb25SZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOwotICAgICAg
ICAgICAgYXV0byByZXN1bHQgPSBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxOZXR3b3Jr
RXJyb3I+Kj4oJmpzb25SZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAg
ICAgIH0KLSAgICB9OwotCi0gICAgLyoKLSAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6Ci0g
ICAgICogUmVmPE5ldHdvcmtFcnJvcj4gcmVzdWx0ID0gTmV0d29ya0Vycm9yOjpjcmVhdGUoKQot
ICAgICAqICAgICAuc2V0TWVzc2FnZSguLi4pCi0gICAgICogICAgIC5zZXRDb2RlKC4uLikKLSAg
ICAgKiAgICAgLnJlbGVhc2UoKTsKLSAgICAgKi8KLSAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxk
c1NldD4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0
PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKLSAgICB9Ci19OwotCi19IC8vIE5ldHdvcmsyCi0j
ZW5kaWYgLy8gUExBVEZPUk0oV0VCX1RZUEVTKQotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9j
b2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bE9iamVjdHMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVh
dHVyZS1ndWFyZHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5o
IgotCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQot
Ci0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgot
Ci0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbmNs
dWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLUBwcm90b2NvbCBUZXN0UHJvdG9jb2xOZXR3b3JrMURv
bWFpbkhhbmRsZXI7Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLSNpZiBQTEFURk9STShX
RUJfQ09NTUFORFMpCi1jbGFzcyBPYmpDSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hl
ciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyIHsKLSAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBPYmpDSW5zcGVjdG9yTmV0
d29yazFCYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRs
ZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KLSAgICB2b2lkIGxvYWRSZXNv
dXJjZShsb25nIHJlcXVlc3RJZCkgZmluYWw7Ci1wcml2YXRlOgotICAgIFJldGFpblB0cjxpZDxU
ZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwotfTsKLSNlbmRp
ZiAvLyBQTEFURk9STShXRUJfQ09NTUFORFMpCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgot
Ci0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFy
ZHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1w
b3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5o
IgotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotCi1u
YW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotI2lmIFBMQVRGT1JNKFdFQl9DT01NQU5EUykKLXZvaWQg
T2JqQ0luc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZShsb25n
IHJlcXVlc3RJZCkKLXsKLSAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpA
c2VsZWN0b3IobG9hZFJlc291cmNlV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOild
KSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVx
dWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazEubG9h
ZFJlc291cmNlJyB3YXMgbm90IGZvdW5kIl9zKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlk
IGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNo
ZXI6OlNlcnZlckVycm9yLCBlcnJvcik7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNl
bmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgfTsKLQotICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57
Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpT
T046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKLSAgICB9OwotCi0gICAgW21fZGVsZWdhdGUg
bG9hZFJlc291cmNlV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJh
Y2s6c3VjY2Vzc0NhbGxiYWNrXTsKLX0KLQotI2VuZGlmIC8vIFBMQVRGT1JNKFdFQl9DT01NQU5E
UykKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xD
b25maWd1cmF0aW9uLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0
ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29s
Lmg+Ci0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFj
ZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKLUBwcm9wZXJ0eSAobm9uYXRv
bWljLCByZXRhaW4sIHNldHRlcj1zZXROZXR3b3JrMUhhbmRsZXI6KSBpZDxUZXN0UHJvdG9jb2xO
ZXR3b3JrMURvbWFpbkhhbmRsZXI+IG5ldHdvcmsxSGFuZGxlcjsKLUBwcm9wZXJ0eSAobm9uYXRv
bWljLCByZWFkb25seSkgVGVzdFByb3RvY29sTmV0d29yazNEb21haW5FdmVudERpc3BhdGNoZXIg
Km5ldHdvcmszRXZlbnREaXNwYXRjaGVyOwotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbi5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25m
aWd1cmF0aW9uLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUt
ZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5o
IgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2ltcG9ydCAiVGVzdFByb3Rv
Y29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5h
dGVEaXNwYXRjaGFibGVBZ2VudC5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFi
bGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVj
dG9yOwotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgotewotICAg
IEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci0gICAgaWQ8VGVz
dFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyPiBfbmV0d29yazFIYW5kbGVyOwotICAgIFRl
c3RQcm90b2NvbE5ldHdvcmszRG9tYWluRXZlbnREaXNwYXRjaGVyICpfbmV0d29yazNFdmVudERp
c3BhdGNoZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21l
bnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3Vw
ZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VS
VChjb250cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJu
IHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAgIFtfbmV0d29yazFIYW5kbGVyIHJl
bGVhc2VdOwotICAgIFtfbmV0d29yazNFdmVudERpc3BhdGNoZXIgcmVsZWFzZV07Ci0gICAgW3N1
cGVyIGRlYWxsb2NdOwotfQotCi0tICh2b2lkKXNldE5ldHdvcmsxSGFuZGxlcjooaWQ8VGVzdFBy
b3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyPiloYW5kbGVyCi17Ci0gICAgaWYgKGhhbmRsZXIg
PT0gX25ldHdvcmsxSGFuZGxlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgW19uZXR3b3JrMUhh
bmRsZXIgcmVsZWFzZV07Ci0gICAgX25ldHdvcmsxSGFuZGxlciA9IFtoYW5kbGVyIHJldGFpbl07
Ci0KLSAgICBhdXRvIGFsdGVybmF0ZURpc3BhdGNoZXIgPSBtYWtlVW5pcXVlPE9iakNJbnNwZWN0
b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPihoYW5kbGVyKTsKLSAgICBhdXRvIGFsdGVybmF0
ZUFnZW50ID0gbWFrZVVuaXF1ZTxBbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudDxOZXR3b3JrMUJh
Y2tlbmREaXNwYXRjaGVyLCBBbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPj4oIk5l
dHdvcmsxIl9zLCAqX2NvbnRyb2xsZXIsIFdURk1vdmUoYWx0ZXJuYXRlRGlzcGF0Y2hlcikpOwot
ICAgIF9jb250cm9sbGVyLT5hcHBlbmRFeHRyYUFnZW50KFdURk1vdmUoYWx0ZXJuYXRlQWdlbnQp
KTsKLX0KLQotLSAoaWQ8VGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyPiluZXR3b3Jr
MUhhbmRsZXIKLXsKLSAgICByZXR1cm4gX25ldHdvcmsxSGFuZGxlcjsKLX0KLQotLSAoVGVzdFBy
b3RvY29sTmV0d29yazNEb21haW5FdmVudERpc3BhdGNoZXIgKiluZXR3b3JrM0V2ZW50RGlzcGF0
Y2hlcgotewotICAgIGlmICghX25ldHdvcmszRXZlbnREaXNwYXRjaGVyKQotICAgICAgICBfbmV0
d29yazNFdmVudERpc3BhdGNoZXIgPSBbW1Rlc3RQcm90b2NvbE5ldHdvcmszRG9tYWluRXZlbnRE
aXNwYXRjaGVyIGFsbG9jXSBpbml0V2l0aENvbnRyb2xsZXI6X2NvbnRyb2xsZXJdOwotICAgIHJl
dHVybiBfbmV0d29yazNFdmVudERpc3BhdGNoZXI7Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgotLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJ
bnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNp
bXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0K
LUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkV2ZW50RGlzcGF0Y2hl
cgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci19
Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVj
dG9yQ29udHJvbGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0g
ICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVy
KTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0K
LS0gKHZvaWQpcmVzb3VyY2VMb2FkZWQKLXsKLSAgICBjb25zdCBGcm9udGVuZFJvdXRlciYgcm91
dGVyID0gX2NvbnRyb2xsZXItPmZyb250ZW5kUm91dGVyKCk7Ci0KLSAgICBSZWY8SlNPTjo6T2Jq
ZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3Nh
Z2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiTmV0d29yazMucmVzb3VyY2VMb2FkZWQiX3MpOwot
ICAgIHJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKLX0KLQot
QGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQot
Ci0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxGb3VuZGF0
aW9uL0ZvdW5kYXRpb24uaD4KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNP
Tk9iamVjdC5oPgotCi0KLUBjbGFzcyBUZXN0UHJvdG9jb2xOZXR3b3JrMk5ldHdvcmtFcnJvcjsK
LQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sUGxhdGZvcm0pIHsKLSAg
ICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbCwKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVy
aWMsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1JT1MsCi0gICAgVGVzdFByb3RvY29sUGxhdGZv
cm1NYWNPUywKLX07Ci0KLQotCi0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0
IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xOZXR3b3JrMk5ldHdvcmtFcnJvciA6IFJXSVBy
b3RvY29sSlNPTk9iamVjdAotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0
aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQ7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKLS0g
KGluc3RhbmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBjb2RlOihp
bnQpY29kZTsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0
cmluZyAqbWVzc2FnZTsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3Np
Z24pIGludCBjb2RlOwotQGVuZAotCi1AcHJvdG9jb2wgVGVzdFByb3RvY29sTmV0d29yazFEb21h
aW5IYW5kbGVyIDxOU09iamVjdD4KLUBvcHRpb25hbAotLSAodm9pZClsb2FkUmVzb3VyY2VXaXRo
RXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3Vj
Y2Vzc0NhbGxiYWNrOih2b2lkKF4pKHZvaWQpKXN1Y2Nlc3NDYWxsYmFjazsKLUBlbmQKLQotX19h
dHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90
b2NvbE5ldHdvcmszRG9tYWluRXZlbnREaXNwYXRjaGVyIDogTlNPYmplY3QKLS0gKHZvaWQpcmVz
b3VyY2VMb2FkZWQ7Ci1AZW5kCi0KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29s
QnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3Vh
cmRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2lt
cG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJp
dmF0ZS5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250
cm9sbGVyLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi1AaW50ZXJmYWNlIFRlc3RQ
cm90b2NvbE5ldHdvcmszRG9tYWluRXZlbnREaXNwYXRjaGVyIChQcml2YXRlKQotLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooSW5zcGVjdG9yOjpBdWdtZW50YWJsZUluc3BlY3Rv
ckNvbnRyb2xsZXIqKWNvbnRyb2xsZXI7Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xJbnRlcm5hbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFp
bnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCA8V2ViSW5z
cGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVj
dG9yIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgotT3B0aW9uYWw8T2JqQ0Vu
dW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0KLWlubGlu
ZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xQbGF0Zm9ybSB2YWx1ZSkKLXsK
LSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOgot
ICAgICAgICByZXR1cm4gImFsbCJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtR2Vu
ZXJpYzoKLSAgICAgICAgcmV0dXJuICJnZW5lcmljIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29s
UGxhdGZvcm1JT1M6Ci0gICAgICAgIHJldHVybiAiaW9zIl9zOwotICAgIGNhc2UgVGVzdFByb3Rv
Y29sUGxhdGZvcm1NYWNPUzoKLSAgICAgICAgcmV0dXJuICJtYWNvcyJfczsKLSAgICB9Ci19Ci0K
LXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xQbGF0Zm9ybT4gZnJvbVBy
b3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJh
bGwiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1BbGw7Ci0gICAgaWYgKHZh
bHVlID09ICJnZW5lcmljIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtR2Vu
ZXJpYzsKLSAgICBpZiAodmFsdWUgPT0gImlvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9j
b2xQbGF0Zm9ybUlPUzsKLSAgICBpZiAodmFsdWUgPT0gIm1hY29zIikKLSAgICAgICAgcmV0dXJu
IFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0K
LQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0
ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xU
eXBlUGFyc2VyLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0
UHJpdmF0ZS5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW50ZXJmYWNlIFRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoTmV0d29yazJEb21haW4pCi0KLSsgKHZvaWQpX3Bh
cnNlTmV0d29ya0Vycm9yOihUZXN0UHJvdG9jb2xOZXR3b3JrMk5ldHdvcmtFcnJvciAqKilvdXRW
YWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24g
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChOZXR3b3JrMkRvbWFpbikKLQotKyAodm9pZClf
cGFyc2VOZXR3b3JrRXJyb3I6KFRlc3RQcm90b2NvbE5ldHdvcmsyTmV0d29ya0Vycm9yICoqKW91
dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9CQURfVFlQRShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7Ci0gICAgKm91dFZhbHVl
ID0gW1tUZXN0UHJvdG9jb2xOZXR3b3JrMk5ldHdvcmtFcnJvciBhbGxvY10gaW5pdFdpdGhQYXls
b2FkOnBheWxvYWRdOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1t
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRo
LWZlYXR1cmUtZ3VhcmRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJv
dG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNp
bXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0K
LQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbE5ldHdvcmsyTmV0d29ya0Vycm9yCi0KLS0g
KGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3Ry
aW5nICosIGlkPiAqKXBheWxvYWQKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkK
LSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURf
UFJPUEVSVFkocGF5bG9hZFtAIm1lc3NhZ2UiXSwgQCJtZXNzYWdlIik7Ci0gICAgc2VsZi5tZXNz
YWdlID0gcGF5bG9hZFtAIm1lc3NhZ2UiXTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVR
VUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImNvZGUiXSwgQCJjb2RlIik7Ci0gICAgc2VsZi5jb2Rl
ID0gW3BheWxvYWRbQCJjb2RlIl0gaW50ZWdlclZhbHVlXTsKLQotICAgIHJldHVybiBzZWxmOwot
fQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNP
Tk9iamVjdCAqKW9iamVjdAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09O
T2JqZWN0OltvYmplY3QgdG9KU09OT2JqZWN0XS5nZXQoKV0pKQotICAgICAgICByZXR1cm4gbmls
OwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aE1lc3Nh
Z2U6KE5TU3RyaW5nICopbWVzc2FnZSBjb2RlOihpbnQpY29kZQotewotICAgIGlmICghKHNlbGYg
PSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShtZXNzYWdlLCBAIm1lc3NhZ2UiKTsKLQotICAgIHNl
bGYubWVzc2FnZSA9IG1lc3NhZ2U7Ci0gICAgc2VsZi5jb2RlID0gY29kZTsKLQotICAgIHJldHVy
biBzZWxmOwotfQotCi0tICh2b2lkKXNldE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZQotewot
ICAgIFtzdXBlciBzZXRTdHJpbmc6bWVzc2FnZSBmb3JLZXk6QCJtZXNzYWdlIl07Ci19Ci0KLS0g
KE5TU3RyaW5nICopbWVzc2FnZQotewotICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAi
bWVzc2FnZSJdOwotfQotCi0tICh2b2lkKXNldENvZGU6KGludCljb2RlCi17Ci0gICAgW3N1cGVy
IHNldEludGVnZXI6Y29kZSBmb3JLZXk6QCJjb2RlIl07Ci19Ci0KLS0gKGludCljb2RlCi17Ci0g
ICAgcmV0dXJuIFtzdXBlciBpbnRlZ2VyRm9yS2V5OkAiY29kZSJdOwotfQotCi1AZW5kCi0KLQot
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvc2Ft
ZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9zYW1lLXR5cGUt
aWQtZGlmZmVyZW50LWRvbWFpbi5qc29uLXJlc3VsdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggZTk0MDIxMTEzODIuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3NhbWUtdHlwZS1pZC1k
aWZmZXJlbnQtZG9tYWluLmpzb24tcmVzdWx0CisrKyAvZGV2L251bGwKQEAgLTEsOTE0ICswLDAg
QEAKLSMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0jIyMgRW5kIEZp
bGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29s
VHlwZXMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVy
Lmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlz
cGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8
QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0g
V1RGTW92ZShkaXNwYXRjaGVyKTsgfQotICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlz
cGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KLXBy
aXZhdGU6Ci0gICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVy
OwotfTsKLQotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSNlbmRpZiAvLyBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSMjIyBFbmQgRmlsZTogVGVzdEFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2Vu
ZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5
cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2Jq
ZWN0cy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNw
ZWN0b3IgewotCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQotCi0KLX0gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLQot
IyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYv
SlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQotI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIK
LSNlbmRpZgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMj
IyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQot
I2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVl
cy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVj
dG9yIHsKLQotY2xhc3MgRnJvbnRlbmRSb3V0ZXI7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi1uYW1lc3BhY2Ug
UHJvdG9jb2wgewotCi0KLQotCi0KLS8vIFR5cGVkZWZzLgotbmFtZXNwYWNlIFJ1bnRpbWUgewot
LyogVW5pcXVlIG9iamVjdCBpZGVudGlmaWVyLiAqLwotdHlwZWRlZiBTdHJpbmcgUmVtb3RlT2Jq
ZWN0SWQ7Ci19IC8vIFJ1bnRpbWUKLQotbmFtZXNwYWNlIFJ1bnRpbWUyIHsKLS8qIFVuaXF1ZSBv
YmplY3QgaWRlbnRpZmllci4gKi8KLXR5cGVkZWYgU3RyaW5nIFJlbW90ZU9iamVjdElkOwotfSAv
LyBSdW50aW1lMgotLy8gRW5kIG9mIHR5cGVkZWZzLgotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJv
dG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbE9iamVjdHMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50
LWRvbWFpbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0K
LSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQot
fSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW5jbHVkZSA8d3RmL1Jl
dGFpblB0ci5oPgotCi0KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNo
ZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5t
bQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJl
bnQtZG9tYWluLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0
Y2hlcnMuaCIKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW5jbHVkZSAi
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMu
aD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgot
Ci0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxXZWJJbnNw
ZWN0b3IvVGVzdFByb3RvY29sLmg+Ci0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZh
dWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QK
LUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVz
dFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5h
bC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgotI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4K
LSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgot
Ci11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3Rv
Y29sQ29uZmlndXJhdGlvbgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciog
X2NvbnRyb2xsZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1
Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBb
c3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFT
U0VSVChjb250cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0
dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAgIFtzdXBlciBkZWFsbG9jXTsK
LX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5t
bQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9t
YWluLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2lt
cG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1l
c3BhY2UgSW5zcGVjdG9yOwotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNw
YXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPEZv
dW5kYXRpb24vRm91bmRhdGlvbi5oPgotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9j
b2xKU09OT2JqZWN0Lmg+Ci0KLQotCi0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQ
cm90b2NvbFBsYXRmb3JtKSB7Ci0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1BbGwsCi0gICAgVGVz
dFByb3RvY29sUGxhdGZvcm1HZW5lcmljLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TLAot
ICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1MsCi19OwotCi0KLQotCi0KLQotCi0KLQotCi0j
aW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3Rz
Lmg+Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbEludGVybmFsLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBz
YW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAi
VGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1
ZXMuaD4KLQotCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0KLSMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVz
dFByb3RvY29sLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZl
cnNpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBP
YmpDRW51bVR5cGU+Ci1PcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhj
b25zdCBTdHJpbmcmIHZhbHVlKTsKLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRl
c3RQcm90b2NvbFBsYXRmb3JtIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNh
c2UgVGVzdFByb3RvY29sUGxhdGZvcm1BbGw6Ci0gICAgICAgIHJldHVybiAiYWxsIl9zOwotICAg
IGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOgotICAgICAgICByZXR1cm4gImdlbmVy
aWMiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzoKLSAgICAgICAgcmV0dXJu
ICJpb3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOgotICAgICAgICBy
ZXR1cm4gIm1hY29zIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFs
PFRlc3RQcm90b2NvbFBsYXRmb3JtPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2
YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gImFsbCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJv
dG9jb2xQbGF0Zm9ybUFsbDsKLSAgICBpZiAodmFsdWUgPT0gImdlbmVyaWMiKQotICAgICAgICBy
ZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOwotICAgIGlmICh2YWx1ZSA9PSAiaW9z
IikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOwotICAgIGlmICh2YWx1
ZSA9PSAibWFjb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzsK
LSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi0KLQotCi0KLX0gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQg
IlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wu
aCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKLSNpbXBvcnQgPFdlYkluc3Bl
Y3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJ
bnNwZWN0b3I7Ci0KLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChSdW50
aW1lRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZVJlbW90ZU9iamVjdElkOihOU1N0cmluZyAqKilv
dXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLQotQGVuZAotQGludGVyZmFjZSBUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFJ1bnRpbWUyRG9tYWluKQotCi0rICh2b2lkKV9wYXJz
ZVJlbW90ZU9iamVjdElkOihOU1N0cmluZyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5
bG9hZDsKLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zIChSdW50aW1lRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZVJlbW90ZU9iamVjdElkOihOU1N0
cmluZyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TU3RyaW5nIGNsYXNzXSk7Ci0gICAgKm91
dFZhbHVlID0gKE5TU3RyaW5nICopcGF5bG9hZDsKLX0KLQotQGVuZAotQGltcGxlbWVudGF0aW9u
IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoUnVudGltZTJEb21haW4pCi0KLSsgKHZvaWQp
X3BhcnNlUmVtb3RlT2JqZWN0SWQ6KE5TU3RyaW5nICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihp
ZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBb
TlNTdHJpbmcgY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSAoTlNTdHJpbmcgKilwYXlsb2FkOwot
fQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMu
bW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0
UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRl
Lmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMu
aD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0KLQotCi0KLSMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3NoYWRvd2VkLW9wdGlv
bmFsLXR5cGUtc2V0dGVycy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3NoYWRvd2VkLW9wdGlvbmFsLXR5
cGUtc2V0dGVycy5qc29uLXJlc3VsdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGJk
YjJkNDExOWYuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUt
c2V0dGVycy5qc29uLXJlc3VsdAorKysgL2Rldi9udWxsCkBAIC0xLDExMjQgKzAsMCBAQAotIyMj
IEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0jIyMgRW5kIEZpbGU6IElu
c3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
c2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVz
LmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIu
aD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgot
Ci1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXIgewotcHVibGljOgotICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tl
bmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1v
dmUoZGlzcGF0Y2hlcik7IH0KLSAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNo
ZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Ci1wcml2YXRl
OgotICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKLX07
Ci0KLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jZW5kaWYgLy8gRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5h
dGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNw
YXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0
aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3Rz
LmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3Rv
ciB7Ci0KLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCi0KLQotfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNP
TlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQotI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNl
bmRpZgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNp
bmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3Rv
ciB7Ci0KLWNsYXNzIEZyb250ZW5kUm91dGVyOwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
LSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgotCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi1uYW1lc3BhY2Ug
UHJvdG9jb2wgewotCi0KLQotLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCi1uYW1lc3BhY2UgUnVu
dGltZSB7Ci1jbGFzcyBLZXlQYXRoOwotfSAvLyBSdW50aW1lCi0vLyBFbmQgb2YgZm9yd2FyZCBk
ZWNsYXJhdGlvbnMuCi0KLQotCi0KLW5hbWVzcGFjZSBUZXN0SGVscGVycyB7Ci0KLVN0cmluZyBn
ZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSk7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0
cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkKLXsKLSAgICByZXR1cm4gZ2V0
RW51bUNvbnN0YW50VmFsdWUoc3RhdGljX2Nhc3Q8aW50PihlbnVtVmFsdWUpKTsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKLQotbmFtZXNwYWNlIFJ1bnRpbWUgewotLyogS2V5IHBh
dGguICovCi1jbGFzcyBLZXlQYXRoIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewotcHVibGlj
OgotICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ3R5cGUnIHdoaWxlIGdlbmVyYXRp
bmcgS2V5UGF0aC4KLSAgICBlbnVtIGNsYXNzIFR5cGUgewotICAgICAgICBOdWxsID0gMCwKLSAg
ICAgICAgU3RyaW5nID0gMSwKLSAgICAgICAgQXJyYXkgPSAyLAotICAgIH07IC8vIGVudW0gY2xh
c3MgVHlwZQotICAgIGVudW0gewotICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCi0gICAgICAgIFR5
cGVTZXQgPSAxIDw8IDAsCi0gICAgICAgIEFsbEZpZWxkc1NldCA9IChUeXBlU2V0KQotICAgIH07
Ci0KLSAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+Ci0gICAgY2xhc3MgQnVpbGRlciB7Ci0gICAgcHJp
dmF0ZToKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7Ci0KLSAgICAgICAg
dGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RB
VEUgfCBTVEVQPio+KHRoaXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcihSZWY8LypL
ZXlQYXRoKi9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQotICAgICAgICAgICAgOiBtX3Jlc3VsdChX
VEZNb3ZlKG9iamVjdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNU
QVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwot
ICAgICAgICB9Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBLZXlQYXRoOwotICAgIHB1YmxpYzoKLQot
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVHlwZVNldD4mIHNldFR5cGUoVHlwZSB2YWx1ZSkKLSAg
ICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFR5cGVTZXQpLCBw
cm9wZXJ0eV90eXBlX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJp
bmcoInR5cGUiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29u
c3RhbnRWYWx1ZSh2YWx1ZSkpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUeXBlU2V0
PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgUmVmPEtleVBhdGg+IHJlbGVhc2UoKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJl
c3VsdF9pc19ub3RfcmVhZHkpOwotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEtl
eVBhdGgpID09IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7Ci0KLSAgICAgICAg
ICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25SZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVs
bCgpOwotICAgICAgICAgICAgYXV0byByZXN1bHQgPSBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0
PFJlZjxLZXlQYXRoPio+KCZqc29uUmVzdWx0KSk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0
OwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIC8qCi0gICAgICogU3ludGhldGljIGNvbnN0cnVj
dG9yOgotICAgICAqIFJlZjxLZXlQYXRoPiByZXN1bHQgPSBLZXlQYXRoOjpjcmVhdGUoKQotICAg
ICAqICAgICAuc2V0VHlwZSguLi4pCi0gICAgICogICAgIC5yZWxlYXNlKCk7Ci0gICAgICovCi0g
ICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICBy
ZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7Ci0gICAg
fQotCi0gICAgdm9pZCBzZXRTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIEpTT046Ok9iamVjdEJhc2U6OnNldFN0cmluZygic3RyaW5nIl9zLCB2YWx1ZSk7Ci0gICAg
fQotCi0gICAgdm9pZCBzZXRBcnJheShSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiB2YWx1
ZSkKLSAgICB7Ci0gICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldEFycmF5KCJhcnJheSJfcywg
V1RGTW92ZSh2YWx1ZSkpOwotICAgIH0KLX07Ci0KLX0gLy8gUnVudGltZQotCi0KLQotbmFtZXNw
YWNlIFRlc3RIZWxwZXJzIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgUHJvdG9jb2xFbnVtVHlwZT4K
LU9wdGlvbmFsPFByb3RvY29sRW51bVR5cGU+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZyhjb25z
dCBTdHJpbmcmKTsKLQotLy8gRW51bXMgaW4gdGhlICdSdW50aW1lJyBEb21haW4KLXRlbXBsYXRl
PD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6OlR5cGU+
IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpL
ZXlQYXRoOjpUeXBlPihjb25zdCBTdHJpbmcmKTsKLQotfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBl
cnMKLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
Ci0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBzaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
VGVzdFByb3RvY29sT2JqZWN0cy5oIgotCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotbmFt
ZXNwYWNlIFByb3RvY29sIHsKLQotbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKLQotc3RhdGljIGNv
bnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFsdWVzW10gPSB7Ci0gICAgIm51bGwiLAot
ICAgICJzdHJpbmciLAotICAgICJhcnJheSIsCi19OwotCi1TdHJpbmcgZ2V0RW51bUNvbnN0YW50
VmFsdWUoaW50IGNvZGUpIHsKLSAgICByZXR1cm4gZW51bV9jb25zdGFudF92YWx1ZXNbY29kZV07
Ci19Ci0KLS8vIEVudW1zIGluIHRoZSAnUnVudGltZScgRG9tYWluCi10ZW1wbGF0ZTw+Ci1PcHRp
b25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlPiBwYXJzZUVu
dW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6
VHlwZT4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKLXsKLSAgICBzdGF0aWMgY29uc3Qg
c2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7Ci0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQ
cm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZTo6TnVsbCwKLSAgICAgICAgKHNpemVfdClJ
bnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlOjpTdHJpbmcsCi0gICAg
ICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZTo6
QXJyYXksCi0gICAgfTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDM7ICsraSkKLSAgICAg
ICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFs
dWVzW2ldXSkKLSAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGlt
ZTo6S2V5UGF0aDo6VHlwZSljb25zdGFudFZhbHVlc1tpXTsKLQotICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7Ci19Ci0KLQotfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKLQotCi0KLX0gLy8gbmFt
ZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRy
Lmg+Ci0KLQotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi19IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAot
Ci0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0
ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2lt
cG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMu
aCIKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW5jbHVkZSAiVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLQot
bmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9y
L1Rlc3RQcm90b2NvbC5oPgotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIp
KSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0Ci1AZW5k
Ci0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJv
dG9jb2xDb25maWd1cmF0aW9uLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgi
Ci0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+Ci0jaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2lt
cG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0KLXVz
aW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xD
b25maWd1cmF0aW9uCi17Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29u
dHJvbGxlcjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVu
dGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtzdXBl
ciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJU
KGNvbnRyb2xsZXIpOwotICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1cm4g
c2VsZjsKLX0KLQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQot
Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJz
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9y
dCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLmgiCi0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yOwotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRj
aGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxGb3Vu
ZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29s
SlNPTk9iamVjdC5oPgotCi0KLUBjbGFzcyBUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aDsKLQot
dHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sUGxhdGZvcm0pIHsKLSAgICBU
ZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbCwKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWMs
Ci0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1JT1MsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1N
YWNPUywKLX07Ci0KLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sUnVu
dGltZUtleVBhdGhUeXBlKSB7Ci0gICAgVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlTnVs
bCwKLSAgICBUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGVTdHJpbmcsCi0gICAgVGVzdFBy
b3RvY29sUnVudGltZUtleVBhdGhUeXBlQXJyYXksCi19OwotCi0KLV9fYXR0cmlidXRlX18oKHZp
c2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xSdW50aW1lS2V5
UGF0aCA6IFJXSVByb3RvY29sSlNPTk9iamVjdAotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5
bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQ7Ci0tIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNv
bk9iamVjdDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFR5cGU6KFRlc3RQcm90b2NvbFJ1bnRp
bWVLZXlQYXRoVHlwZSl0eXBlOwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMs
IGFzc2lnbikgVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlIHR5cGU7Ci0vKiBvcHRpb25h
bCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKnN0cmluZzsKLS8qIG9w
dGlvbmFsICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU0FycmF5Lyo8TlNTdHJpbmc+
Ki8gKmFycmF5OwotQGVuZAotCi0KLQotCi0KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVBy
b3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0
ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2lt
cG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJp
dmF0ZS5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250
cm9sbGVyLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi0KLQotCi0jIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hh
ZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0IDxX
ZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+Ci0KLW5hbWVzcGFjZSBJ
bnNwZWN0b3IgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+Ci1PcHRpb25hbDxP
YmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKLQot
aW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFBsYXRmb3JtIHZhbHVl
KQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1B
bGw6Ci0gICAgICAgIHJldHVybiAiYWxsIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZv
cm1HZW5lcmljOgotICAgICAgICByZXR1cm4gImdlbmVyaWMiX3M7Ci0gICAgY2FzZSBUZXN0UHJv
dG9jb2xQbGF0Zm9ybUlPUzoKLSAgICAgICAgcmV0dXJuICJpb3MiX3M7Ci0gICAgY2FzZSBUZXN0
UHJvdG9jb2xQbGF0Zm9ybU1hY09TOgotICAgICAgICByZXR1cm4gIm1hY29zIl9zOwotICAgIH0K
LX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFBsYXRmb3JtPiBm
cm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUg
PT0gImFsbCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDsKLSAgICBp
ZiAodmFsdWUgPT0gImdlbmVyaWMiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZv
cm1HZW5lcmljOwotICAgIGlmICh2YWx1ZSA9PSAiaW9zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQ
cm90b2NvbFBsYXRmb3JtSU9TOwotICAgIGlmICh2YWx1ZSA9PSAibWFjb3MiKQotICAgICAgICBy
ZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwotfQotCi0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xSdW50
aW1lS2V5UGF0aFR5cGUgdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBU
ZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGVOdWxsOgotICAgICAgICByZXR1cm4gIm51bGwi
X3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGVTdHJpbmc6Ci0gICAg
ICAgIHJldHVybiAic3RyaW5nIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUnVudGltZUtleVBh
dGhUeXBlQXJyYXk6Ci0gICAgICAgIHJldHVybiAiYXJyYXkiX3M7Ci0gICAgfQotfQotCi10ZW1w
bGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlPiBm
cm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUg
PT0gIm51bGwiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBl
TnVsbDsKLSAgICBpZiAodmFsdWUgPT0gInN0cmluZyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJv
dG9jb2xSdW50aW1lS2V5UGF0aFR5cGVTdHJpbmc7Ci0gICAgaWYgKHZhbHVlID09ICJhcnJheSIp
Ci0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGVBcnJheTsKLSAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQot
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9y
dCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVBy
b3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsK
LQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFJ1bnRpbWVEb21haW4p
Ci0KLSsgKHZvaWQpX3BhcnNlS2V5UGF0aDooVGVzdFByb3RvY29sUnVudGltZUtleVBhdGggKiop
b3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0
aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoUnVudGltZURvbWFpbikKLQotKyAodm9p
ZClfcGFyc2VLZXlQYXRoOihUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aCAqKilvdXRWYWx1ZSBm
cm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZ
UEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IFtbVGVz
dFByb3RvY29sUnVudGltZUtleVBhdGggYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsK
LX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
Lm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRl
c3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucy5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZh
dGUuaD4KLSNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVl
cy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLUBpbXBsZW1lbnRhdGlvbiBU
ZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aAotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXls
b2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCi17Ci0g
ICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAg
ICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJ0eXBlIl0s
IEAidHlwZSIpOwotICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZT4g
dHlwZSA9IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGU+
KHBheWxvYWRbQCJ0eXBlIl0pOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX0VOVU1fVkFM
VUUodHlwZSwgQCJ0eXBlIik7Ci0gICAgc2VsZi50eXBlID0gdHlwZS52YWx1ZSgpOwotCi0gICAg
c2VsZi5zdHJpbmcgPSBwYXlsb2FkW0Aic3RyaW5nIl07Ci0KLSAgICBzZWxmLmFycmF5ID0gcGF5
bG9hZFtAImFycmF5Il07Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLS0gKGluc3RhbmNldHlwZSlp
bml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilvYmplY3QKLXsK
LSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoSlNPTk9iamVjdDpbb2JqZWN0IHRvSlNP
Tk9iamVjdF0uZ2V0KCldKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIHJldHVybiBzZWxm
OwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhUeXBlOihUZXN0UHJvdG9jb2xSdW50aW1l
S2V5UGF0aFR5cGUpdHlwZQotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAg
ICAgICByZXR1cm4gbmlsOwotCi0gICAgc2VsZi50eXBlID0gdHlwZTsKLQotICAgIHJldHVybiBz
ZWxmOwotfQotCi0tICh2b2lkKXNldFR5cGU6KFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlw
ZSl0eXBlCi17Ci0gICAgW3N1cGVyIHNldFN0cmluZzp0b1Byb3RvY29sU3RyaW5nKHR5cGUpIGZv
cktleTpAInR5cGUiXTsKLX0KLQotLSAoVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlKXR5
cGUKLXsKLSAgICByZXR1cm4gZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbFJ1bnRpbWVL
ZXlQYXRoVHlwZT4oW3N1cGVyIHN0cmluZ0ZvcktleTpAInR5cGUiXSkudmFsdWUoKTsKLX0KLQot
LSAodm9pZClzZXRTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nCi17Ci0gICAgW3N1cGVyIHNldFN0
cmluZzpzdHJpbmcgZm9yS2V5OkAic3RyaW5nIl07Ci19Ci0KLS0gKE5TU3RyaW5nICopc3RyaW5n
Ci17Ci0gICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJzdHJpbmciXTsKLX0KLQotLSAo
dm9pZClzZXRBcnJheTooTlNBcnJheS8qPE5TU3RyaW5nPiovICopYXJyYXkKLXsKLSAgICBbc3Vw
ZXIgc2V0SlNPTkFycmF5OnRvSlNPTlN0cmluZ0FycmF5KGFycmF5KSBmb3JLZXk6QCJhcnJheSJd
OwotfQotCi0tIChOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilhcnJheQotewotICAgIHJldHVybiB0
b09iakNTdHJpbmdBcnJheShbc3VwZXIgSlNPTkFycmF5Rm9yS2V5OkAiYXJyYXkiXSk7Ci19Ci0K
LUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9l
eHBlY3RlZC9zaG91bGQtc3RyaXAtY29tbWVudHMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9zaG91bGQt
c3RyaXAtY29tbWVudHMuanNvbi1yZXN1bHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDZhMWZiN2Q0ZjlkLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9zaG91bGQtc3RyaXAtY29tbWVu
dHMuanNvbi1yZXN1bHQKKysrIC9kZXYvbnVsbApAQCAtMSw4NzAgKzAsMCBAQAotIyMjIEJlZ2lu
IEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHNob3VsZC1zdHJpcC1jb21tZW50cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0jIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRD
b21tYW5kcy5qcwotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlwLWNv
bW1lbnRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsK
LQotY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZvaWQg
c2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNo
ZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KLSAgICBC
YWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2Jh
Y2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Ci1wcml2YXRlOgotICAgIFJlZlB0cjxCYWNrZW5kRGlz
cGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKLX07Ci0KLQotCi0KLX0gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgotCi0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCi0jIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAot
Ci0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNs
dWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5n
OwotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNr
ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVy
cy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaG91bGQtc3RyaXAtY29t
bWVudHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgot
Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNp
bmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2lmIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQotI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlz
cGF0Y2hlcnMuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLX0gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hl
cnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNl
Ci0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05W
YWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIElu
c3BlY3RvciB7Ci0KLWNsYXNzIEZyb250ZW5kUm91dGVyOwotCi19IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgot
Ci0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMu
aD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewot
Ci0KLQotCi0KLQotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBzaG91bGQtc3RyaXAtY29tbWVudHMuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQot
bmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVj
dHMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMu
aAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNob3VsZC1zdHJpcC1jb21tZW50
cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMu
aD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLQotCi1uYW1lc3BhY2UgSW5zcGVjdG9y
IHsKLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
QmFja2VuZERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
c2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xC
YWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgi
Ci0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW5jbHVkZSA8d3Rm
L0pTT05WYWx1ZXMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVy
cy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8V2Vi
SW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgi
ZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2Jq
ZWN0Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgK
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaG91bGQtc3RyaXAtY29tbWVudHMuanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJv
dG9jb2xDb25maWd1cmF0aW9uLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgi
Ci0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+Ci0jaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2lt
cG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0KLXVz
aW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xD
b25maWd1cmF0aW9uCi17Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29u
dHJvbGxlcjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVu
dGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtzdXBl
ciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJU
KGNvbnRyb2xsZXIpOwotICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1cm4g
c2VsZjsKLX0KLQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQot
Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFBy
b3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
LmgiCi0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVj
dG9yOwotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQot
Ci0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBzaG91bGQtc3RyaXAtY29tbWVudHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24u
aD4KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgotCi0K
LQotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xQbGF0Zm9ybSkgewot
ICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtR2Vu
ZXJpYywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUywKLSAgICBUZXN0UHJvdG9jb2xQbGF0
Zm9ybU1hY09TLAotfTsKLQotCi0KLQotCi0KLQotCi0KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9y
L1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgotCi0jIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5o
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlwLWNvbW1lbnRz
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9y
dCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0
ZS5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9s
bGVyLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi0KLQotCi0jIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbEludGVybmFsLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxk
LXN0cmlwLWNvbW1lbnRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3Iv
UldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Igewot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+Ci1PcHRpb25hbDxPYmpDRW51bVR5cGU+
IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKLQotaW5saW5lIFN0cmlu
ZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFBsYXRmb3JtIHZhbHVlKQotewotICAgIHN3
aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1BbGw6Ci0gICAgICAg
IHJldHVybiAiYWxsIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOgot
ICAgICAgICByZXR1cm4gImdlbmVyaWMiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9y
bUlPUzoKLSAgICAgICAgcmV0dXJuICJpb3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0
Zm9ybU1hY09TOgotICAgICAgICByZXR1cm4gIm1hY29zIl9zOwotICAgIH0KLX0KLQotdGVtcGxh
dGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFBsYXRmb3JtPiBmcm9tUHJvdG9jb2xT
dHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gImFsbCIpCi0g
ICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDsKLSAgICBpZiAodmFsdWUgPT0g
ImdlbmVyaWMiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOwot
ICAgIGlmICh2YWx1ZSA9PSAiaW9zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRm
b3JtSU9TOwotICAgIGlmICh2YWx1ZSA9PSAibWFjb3MiKQotICAgICAgICByZXR1cm4gVGVzdFBy
b3RvY29sUGxhdGZvcm1NYWNPUzsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi19IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
Lm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlwLWNvbW1l
bnRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2lt
cG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90
b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgotI2ltcG9ydCA8V2Vi
SW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLQotdXNpbmcgbmFtZXNw
YWNlIEluc3BlY3RvcjsKLQotCi0KLQotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNob3VsZC1zdHJpcC1jb21tZW50cy5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQg
IlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFBy
aXZhdGUuaD4KLSNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZh
bHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLSMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24t
YWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRp
b24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uLXJlc3VsdApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggZjU2NjYzNzljYTcuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtZGVj
bGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uLXJlc3VsdAorKysgL2Rldi9udWxs
CkBAIC0xLDg5MSArMCwwIEBACi0jIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1h
bmRzLmpzCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlv
bi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLSMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpz
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQt
cHJpbWl0aXZlLXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKLSNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0KLW5hbWVzcGFjZSBJbnNw
ZWN0b3IgewotCi1jbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0g
ICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYg
ZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsg
fQotICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0
dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPEJh
Y2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwotfTsKLQotCi0KLQotfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKLSMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJp
bWl0aXZlLXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQot
dHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9K
U09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCi0jaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgot
I2VuZGlmCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUu
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21h
IG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDx3dGYv
SlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgRnJvbnRlbmRSb3V0ZXI7Ci0KLX0gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0KLSMj
IyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5
cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKLQot
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0
Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJp
bWl0aXZlLXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclBy
b3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotCi1uYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKLQotCi0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLQotCi0KLQotLy8gVHlw
ZWRlZnMuCi1uYW1lc3BhY2UgUnVudGltZSB7Ci0vKiBVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIu
ICovCi10eXBlZGVmIGludCBSZW1vdGVPYmplY3RJZDsKLX0gLy8gUnVudGltZQotLy8gRW5kIG9m
IHR5cGVkZWZzLgotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotCi0jaW5jbHVkZSA8
d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLX0gLy8gbmFtZXNw
YWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xC
YWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5
cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbmNsdWRlIDx3dGYvUmV0
YWluUHRyLmg+Ci0KLQotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi19IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hl
cnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1t
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlh
c2VkLXByaW1pdGl2ZS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNr
ZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0j
aW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW5jbHVkZSA8d3RmL0pT
T05WYWx1ZXMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5t
bQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1p
dGl2ZS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgotCi1fX2F0dHJpYnV0ZV9f
KCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbiA6IE5TT2JqZWN0Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xD
b25maWd1cmF0aW9uLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRp
b24ubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9u
LWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCi0K
LSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xC
YWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURp
c3BhdGNoYWJsZUFnZW50Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUlu
c3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7
Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCi17Ci0gICAgQXVn
bWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKLX0KLQotLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVy
Kiljb250cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYp
Ci0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIpOwotICAgIF9jb250
cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClkZWFs
bG9jCi17Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29s
SW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0j
aW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwot
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxGb3VuZGF0aW9u
L0ZvdW5kYXRpb24uaD4KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9i
amVjdC5oPgotCi0KLQotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xQ
bGF0Zm9ybSkgewotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsLAotICAgIFRlc3RQcm90b2Nv
bFBsYXRmb3JtR2VuZXJpYywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUywKLSAgICBUZXN0
UHJvdG9jb2xQbGF0Zm9ybU1hY09TLAotfTsKLQotCi0KLQotCi0KLQotCi0KLQotI2ltcG9ydCA8
V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgotCi0j
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xJbnRlcm5hbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNs
YXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0
ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENv
cmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZh
bHVlcy5oPgotCi0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLQot
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2
ZS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9j
b2xBcnJheUNvbnZlcnNpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+Ci1PcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90
b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKLQotaW5saW5lIFN0cmluZyB0b1Byb3Rv
Y29sU3RyaW5nKFRlc3RQcm90b2NvbFBsYXRmb3JtIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1
ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1BbGw6Ci0gICAgICAgIHJldHVybiAi
YWxsIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOgotICAgICAgICBy
ZXR1cm4gImdlbmVyaWMiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzoKLSAg
ICAgICAgcmV0dXJuICJpb3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09T
OgotICAgICAgICByZXR1cm4gIm1hY29zIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5s
aW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFBsYXRmb3JtPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gImFsbCIpCi0gICAgICAgIHJl
dHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDsKLSAgICBpZiAodmFsdWUgPT0gImdlbmVyaWMi
KQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOwotICAgIGlmICh2
YWx1ZSA9PSAiaW9zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOwot
ICAgIGlmICh2YWx1ZSA9PSAibWFjb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxh
dGZvcm1NYWNPUzsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi0KLQotfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNl
ZC1wcmltaXRpdmUtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotCi0jaW1w
b3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIK
LSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0K
LXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zIChSdW50aW1lRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZVJlbW90ZU9iamVj
dElkOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLQotQGVu
ZAotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChSdW50aW1l
RG9tYWluKQotCi0rICh2b2lkKV9wYXJzZVJlbW90ZU9iamVjdElkOihOU051bWJlciAqKilvdXRW
YWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
QkFEX1RZUEUocGF5bG9hZCwgW05TTnVtYmVyIGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gKE5T
TnVtYmVyICopcGF5bG9hZDsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBl
cy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24t
YWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBv
cnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9y
L1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLSNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25z
Lmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVj
dG9yOwotCi0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJp
Yy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbi1yZXN1bHQgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3Rl
ZC90eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbi1yZXN1bHQKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGE0ZTVjN2U0MDkxLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC90eXBl
LWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbi1yZXN1bHQKKysrIC9kZXYvbnVsbApAQCAtMSwx
MDczICswLDAgQEAKLSMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5
LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0v
LyBEZWJ1Z2dlcgotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiRGVidWdnZXIiLCBu
dWxsKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJEZWJ1Z2dlci5SZWFzb24iLCB7
RGllZDogIkRpZWQiLCBGYWludGVkOiAiRmFpbnRlZCIsIEh1bmdyeTogIkh1bmdyeSJ9KTsKLUlu
c3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkRlYnVnZ2VyIiwgbnVsbCk7Ci0jIyMgRW5k
IEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUo
SU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQotI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bFR5cGVzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRl
ci5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERp
c3BhdGNoZXIgewotcHVibGljOgotICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRy
PEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9
IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KLSAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERp
c3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Ci1w
cml2YXRlOgotICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hl
cjsKLX07Ci0KLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jZW5kaWYgLy8gRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jIyMgRW5kIEZpbGU6IFRlc3RB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tl
bmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1k
ZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmpl
Y3RzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3Bl
Y3RvciB7Ci0KLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCi0KLQotfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNP
TlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQotI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNl
bmRpZgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNs
dWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7
Ci0KLWNsYXNzIEZyb250ZW5kUm91dGVyOwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMj
IyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
LQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0j
IyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi1uYW1lc3BhY2UgUHJvdG9jb2wg
ewotCi0KLQotLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCi1uYW1lc3BhY2UgRGVidWdnZXIgewot
ZW51bSBjbGFzcyBSZWFzb247Ci19IC8vIERlYnVnZ2VyCi0vLyBFbmQgb2YgZm9yd2FyZCBkZWNs
YXJhdGlvbnMuCi0KLQotLy8gVHlwZWRlZnMuCi1uYW1lc3BhY2UgRGVidWdnZXIgewotdHlwZWRl
ZiBpbnQgQnJlYWtwb2ludElkOwotfSAvLyBEZWJ1Z2dlcgotCi1uYW1lc3BhY2UgUnVudGltZSB7
Ci10eXBlZGVmIGludCBPYmplY3RJZDsKLXR5cGVkZWYgSlNPTjo6QXJyYXlPZjxpbnQ+IEx1Y2t5
TnVtYmVyczsKLXR5cGVkZWYgSlNPTjo6QXJyYXlPZjxTdHJpbmc+IEJhYnlOYW1lczsKLXR5cGVk
ZWYgSlNPTjo6QXJyYXlPZjxpbnQ+IE5ld09iamVjdHM7Ci10eXBlZGVmIEpTT046OkFycmF5T2Y8
aW50PiBPbGRPYmplY3RzOwotdHlwZWRlZiBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRlYnVnZ2VyOjpSZWFzb24+IFN0b3BSZWFzb25zOwotfSAvLyBSdW50aW1lCi0vLyBFbmQg
b2YgdHlwZWRlZnMuCi0KLW5hbWVzcGFjZSBUZXN0SGVscGVycyB7Ci0KLVN0cmluZyBnZXRFbnVt
Q29uc3RhbnRWYWx1ZShpbnQgY29kZSk7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBn
ZXRFbnVtQ29uc3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkKLXsKLSAgICByZXR1cm4gZ2V0RW51bUNv
bnN0YW50VmFsdWUoc3RhdGljX2Nhc3Q8aW50PihlbnVtVmFsdWUpKTsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgVGVzdEhlbHBlcnMKLQotbmFtZXNwYWNlIERlYnVnZ2VyIHsKLS8qICAqLwotZW51bSBj
bGFzcyBSZWFzb24gewotICAgIERpZWQgPSAwLAotICAgIEZhaW50ZWQgPSAxLAotICAgIEh1bmdy
eSA9IDIsCi19OyAvLyBlbnVtIGNsYXNzIFJlYXNvbgotfSAvLyBEZWJ1Z2dlcgotCi0KLQotbmFt
ZXNwYWNlIFRlc3RIZWxwZXJzIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgUHJvdG9jb2xFbnVtVHlw
ZT4KLU9wdGlvbmFsPFByb3RvY29sRW51bVR5cGU+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZyhj
b25zdCBTdHJpbmcmKTsKLQotLy8gRW51bXMgaW4gdGhlICdEZWJ1Z2dlcicgRG9tYWluCi10ZW1w
bGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uPiBw
YXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OlJl
YXNvbj4oY29uc3QgU3RyaW5nJik7Ci0KLX0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCi0KLX0g
Ly8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi1uYW1l
c3BhY2UgV1RGIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwot
Ci0vLyBIYXNoIGRlY2xhcmF0aW9ucyBpbiB0aGUgJ0RlYnVnZ2VyJyBEb21haW4KLXRlbXBsYXRl
PD4KLXN0cnVjdCBEZWZhdWx0SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVh
c29uPiB7Ci0gICAgdHlwZWRlZiBJbnRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2Vy
OjpSZWFzb24+IEhhc2g7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXVEYKLSMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sT2JqZWN0cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmpl
Y3RzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRp
b24tYXJyYXktdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3Rz
LmgiCi0KLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewot
Ci1uYW1lc3BhY2UgVGVzdEhlbHBlcnMgewotCi1zdGF0aWMgY29uc3QgY2hhciogY29uc3QgZW51
bV9jb25zdGFudF92YWx1ZXNbXSA9IHsKLSAgICAiRGllZCIsCi0gICAgIkZhaW50ZWQiLAotICAg
ICJIdW5ncnkiLAotfTsKLQotU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7
Ci0gICAgcmV0dXJuIGVudW1fY29uc3RhbnRfdmFsdWVzW2NvZGVdOwotfQotCi0vLyBFbnVtcyBp
biB0aGUgJ0RlYnVnZ2VyJyBEb21haW4KLXRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb24+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNw
ZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uPihjb25zdCBTdHJpbmcmIHByb3RvY29s
U3RyaW5nKQotewotICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsK
LSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uOjpE
aWVkLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFz
b246OkZhaW50ZWQsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdn
ZXI6OlJlYXNvbjo6SHVuZ3J5LAotICAgIH07Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAz
OyArK2kpCi0gICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVl
c1tjb25zdGFudFZhbHVlc1tpXV0pCi0gICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRlYnVnZ2VyOjpSZWFzb24pY29uc3RhbnRWYWx1ZXNbaV07Ci0KLSAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwotfQotCi0KLX0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCi0KLQotCi19
IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFp
blB0ci5oPgotCi0KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJz
LmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXkt
dHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNp
bXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJz
LmgiCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0K
LW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9U
ZXN0UHJvdG9jb2wuaD4KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkp
Ci1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAotQGVuZAot
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbi5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2lt
cG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgotI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgotCi11c2luZyBu
YW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xs
ZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxl
SW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5p
dF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250
cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7
Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotQGVu
ZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5oIgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3Bl
Y3RvcjsKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0K
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3Vu
ZGF0aW9uLmg+Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3Qu
aD4KLQotCi0KLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sUGxhdGZv
cm0pIHsKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbCwKLSAgICBUZXN0UHJvdG9jb2xQbGF0
Zm9ybUdlbmVyaWMsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1JT1MsCi0gICAgVGVzdFByb3Rv
Y29sUGxhdGZvcm1NYWNPUywKLX07Ci0KLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVz
dFByb3RvY29sRGVidWdnZXJSZWFzb24pIHsKLSAgICBUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNv
bkRpZWQsCi0gICAgVGVzdFByb3RvY29sRGVidWdnZXJSZWFzb25GYWludGVkLAotICAgIFRlc3RQ
cm90b2NvbERlYnVnZ2VyUmVhc29uSHVuZ3J5LAotfTsKLQotCi0KLQotCi0KLQotCi0jaW1wb3J0
IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+Ci0K
LSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbEludGVybmFsLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRl
Y2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90
b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50
YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0K
LQotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgotLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wu
aCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4K
LQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlw
ZT4KLU9wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpOwotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29s
UGxhdGZvcm0gdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJv
dG9jb2xQbGF0Zm9ybUFsbDoKLSAgICAgICAgcmV0dXJuICJhbGwiX3M7Ci0gICAgY2FzZSBUZXN0
UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM6Ci0gICAgICAgIHJldHVybiAiZ2VuZXJpYyJfczsKLSAg
ICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOgotICAgICAgICByZXR1cm4gImlvcyJfczsK
LSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M6Ci0gICAgICAgIHJldHVybiAibWFj
b3MiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3Rv
Y29sUGxhdGZvcm0+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewot
ICAgIGlmICh2YWx1ZSA9PSAiYWxsIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRm
b3JtQWxsOwotICAgIGlmICh2YWx1ZSA9PSAiZ2VuZXJpYyIpCi0gICAgICAgIHJldHVybiBUZXN0
UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM7Ci0gICAgaWYgKHZhbHVlID09ICJpb3MiKQotICAgICAg
ICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1JT1M7Ci0gICAgaWYgKHZhbHVlID09ICJtYWNv
cyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOwotICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7Ci19Ci0KLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRl
c3RQcm90b2NvbERlYnVnZ2VyUmVhc29uIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewot
ICAgIGNhc2UgVGVzdFByb3RvY29sRGVidWdnZXJSZWFzb25EaWVkOgotICAgICAgICByZXR1cm4g
IkRpZWQiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbkZhaW50ZWQ6Ci0g
ICAgICAgIHJldHVybiAiRmFpbnRlZCJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERlYnVnZ2Vy
UmVhc29uSHVuZ3J5OgotICAgICAgICByZXR1cm4gIkh1bmdyeSJfczsKLSAgICB9Ci19Ci0KLXRl
bXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbj4gZnJv
bVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09
ICJEaWVkIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERlYnVnZ2VyUmVhc29uRGllZDsK
LSAgICBpZiAodmFsdWUgPT0gIkZhaW50ZWQiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29s
RGVidWdnZXJSZWFzb25GYWludGVkOwotICAgIGlmICh2YWx1ZSA9PSAiSHVuZ3J5IikKLSAgICAg
ICAgcmV0dXJuIFRlc3RQcm90b2NvbERlYnVnZ2VyUmVhc29uSHVuZ3J5OwotICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7Ci19Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFBy
b3RvY29sVHlwZVBhcnNlci5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNP
Tk9iamVjdFByaXZhdGUuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGludGVy
ZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKERlYnVnZ2VyRG9tYWluKQotCi0rICh2
b2lkKV9wYXJzZUJyZWFrcG9pbnRJZDooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6
KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZVJlYXNvbjooTlNOdW1iZXIgKiopb3V0VmFsdWUg
ZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0KLUBlbmQKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zIChSdW50aW1lRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZU9iamVjdElk
OihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLSsgKHZvaWQp
X3BhcnNlTHVja3lOdW1iZXJzOihOU0FycmF5Lyo8TlNOdW1iZXI+Ki8gKiopb3V0VmFsdWUgZnJv
bVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZUJhYnlOYW1lczooTlNBcnJheS8q
PE5TU3RyaW5nPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotKyAodm9p
ZClfcGFyc2VOZXdPYmplY3RzOihOU0FycmF5Lyo8TlNOdW1iZXI+Ki8gKiopb3V0VmFsdWUgZnJv
bVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZU9sZE9iamVjdHM6KE5TQXJyYXkv
KjxOU051bWJlcj4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLSsgKHZv
aWQpX3BhcnNlU3RvcFJlYXNvbnM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKilvdXRWYWx1ZSBm
cm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zIChEZWJ1Z2dlckRvbWFpbikKLQotKyAodm9pZClfcGFyc2VC
cmVha3BvaW50SWQ6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2Fk
Ci17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNOdW1iZXIg
Y2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSAoTlNOdW1iZXIgKilwYXlsb2FkOwotfQotCi0rICh2
b2lkKV9wYXJzZVJlYXNvbjooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBh
eWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0
cmluZyBjbGFzc10pOwotICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbERlYnVnZ2VyUmVhc29uPiBy
ZXN1bHQgPSBJbnNwZWN0b3I6OmZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xEZWJ1Z2dl
clJlYXNvbj4ocGF5bG9hZCk7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfRU5VTV9WQUxV
RShyZXN1bHQsIEAiUmVhc29uIik7Ci0gICAgKm91dFZhbHVlID0gQChyZXN1bHQudmFsdWUoKSk7
Ci19Ci0KLUBlbmQKLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMg
KFJ1bnRpbWVEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlT2JqZWN0SWQ6KE5TTnVtYmVyICoqKW91
dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9CQURfVFlQRShwYXlsb2FkLCBbTlNOdW1iZXIgY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSAo
TlNOdW1iZXIgKilwYXlsb2FkOwotfQotCi0rICh2b2lkKV9wYXJzZUx1Y2t5TnVtYmVyczooTlNB
cnJheS8qPE5TTnVtYmVyPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17
Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNBcnJheS8qPE5T
TnVtYmVyPiovIGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gKE5TQXJyYXkvKjxOU051bWJlcj4q
LyAqKXBheWxvYWQ7Ci19Ci0KLSsgKHZvaWQpX3BhcnNlQmFieU5hbWVzOihOU0FycmF5Lyo8TlNT
dHJpbmc+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJP
V19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0FycmF5Lyo8TlNTdHJpbmc+Ki8g
Y2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSAoTlNBcnJheS8qPE5TU3RyaW5nPiovICopcGF5bG9h
ZDsKLX0KLQotKyAodm9pZClfcGFyc2VOZXdPYmplY3RzOihOU0FycmF5Lyo8TlNOdW1iZXI+Ki8g
Kiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJ
T05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0FycmF5Lyo8TlNOdW1iZXI+Ki8gY2xhc3NdKTsK
LSAgICAqb3V0VmFsdWUgPSAoTlNBcnJheS8qPE5TTnVtYmVyPiovICopcGF5bG9hZDsKLX0KLQot
KyAodm9pZClfcGFyc2VPbGRPYmplY3RzOihOU0FycmF5Lyo8TlNOdW1iZXI+Ki8gKiopb3V0VmFs
dWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JB
RF9UWVBFKHBheWxvYWQsIFtOU0FycmF5Lyo8TlNOdW1iZXI+Ki8gY2xhc3NdKTsKLSAgICAqb3V0
VmFsdWUgPSAoTlNBcnJheS8qPE5TTnVtYmVyPiovICopcGF5bG9hZDsKLX0KLQotKyAodm9pZClf
cGFyc2VTdG9wUmVhc29uczooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKW91dFZhbHVlIGZyb21Q
YXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShw
YXlsb2FkLCBbTlNBcnJheS8qPE5TU3RyaW5nPiovIGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0g
KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKXBheWxvYWQ7Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sVHlwZXMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0
eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0j
aW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPFdlYkluc3Bl
Y3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0
aW9ucy5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIElu
c3BlY3RvcjsKLQotCi0KLQotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24tcmVzdWx0
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMv
ZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbi1yZXN1bHQKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5NzllOGRiZTJmLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3Rl
ZC90eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uLXJlc3VsdAorKysgL2Rldi9udWxsCkBA
IC0xLDEwODYgKzAsMCBAQAotIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5k
cy5qcwotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24t
ZW51bS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotLy8gUnVudGltZQotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiUnVudGltZSIs
IG51bGwpOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIlJ1bnRpbWUuRmFybUFuaW1h
bHMiLCB7UGlnczogIlBpZ3MiLCBDb3dzOiAiQ293cyIsIENhdHM6ICJDYXRzIiwgSGVuczogIkhl
bnMifSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiUnVudGltZS5Ud29MZWdnZWRB
bmltYWxzIiwge0R1Y2tzOiAiRHVja3MiLCBIZW5zOiAiSGVucyIsIENyb3dzOiAiQ3Jvd3MiLCBG
bGFtaW5nb3M6ICJGbGFtaW5nb3MifSk7Ci1JbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWlu
KCJSdW50aW1lIiwgbnVsbCk7Ci0jIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5k
cy5qcwotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5o
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVt
LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0j
cHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Igewot
Ci1jbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBz
ZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hl
cikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQotICAgIEJh
Y2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFj
a2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPEJhY2tlbmREaXNw
YXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwotfTsKLQotCi0KLQotfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKLSMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0j
aW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10eXBlZGVmIFN0cmluZyBFcnJvclN0
cmluZzsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0
QmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0
Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJh
dGlvbi1lbnVtLXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0
ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRl
c3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2lmIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQot
Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5k
RGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVy
cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1l
bnVtLXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNs
dWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgot
Ci1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgRnJvbnRlbmRSb3V0ZXI7Ci0KLX0gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVy
cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgotCi0jaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi19IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVy
cy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNl
Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0j
aW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQot
Ci1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCi1u
YW1lc3BhY2UgUnVudGltZSB7Ci1lbnVtIGNsYXNzIEZhcm1BbmltYWxzOwotZW51bSBjbGFzcyBU
d29MZWdnZWRBbmltYWxzOwotfSAvLyBSdW50aW1lCi0vLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJh
dGlvbnMuCi0KLQotCi0KLW5hbWVzcGFjZSBUZXN0SGVscGVycyB7Ci0KLVN0cmluZyBnZXRFbnVt
Q29uc3RhbnRWYWx1ZShpbnQgY29kZSk7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBn
ZXRFbnVtQ29uc3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkKLXsKLSAgICByZXR1cm4gZ2V0RW51bUNv
bnN0YW50VmFsdWUoc3RhdGljX2Nhc3Q8aW50PihlbnVtVmFsdWUpKTsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgVGVzdEhlbHBlcnMKLQotbmFtZXNwYWNlIFJ1bnRpbWUgewotLyogICovCi1lbnVtIGNs
YXNzIEZhcm1BbmltYWxzIHsKLSAgICBQaWdzID0gMCwKLSAgICBDb3dzID0gMSwKLSAgICBDYXRz
ID0gMiwKLSAgICBIZW5zID0gMywKLX07IC8vIGVudW0gY2xhc3MgRmFybUFuaW1hbHMKLS8qICAq
LwotZW51bSBjbGFzcyBUd29MZWdnZWRBbmltYWxzIHsKLSAgICBEdWNrcyA9IDQsCi0gICAgSGVu
cyA9IDMsCi0gICAgQ3Jvd3MgPSA1LAotICAgIEZsYW1pbmdvcyA9IDYsCi19OyAvLyBlbnVtIGNs
YXNzIFR3b0xlZ2dlZEFuaW1hbHMKLX0gLy8gUnVudGltZQotCi0KLQotbmFtZXNwYWNlIFRlc3RI
ZWxwZXJzIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgUHJvdG9jb2xFbnVtVHlwZT4KLU9wdGlvbmFs
PFByb3RvY29sRW51bVR5cGU+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZyhjb25zdCBTdHJpbmcm
KTsKLQotLy8gRW51bXMgaW4gdGhlICdSdW50aW1lJyBEb21haW4KLXRlbXBsYXRlPD4KLU9wdGlv
bmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzPiBwYXJzZUVudW1W
YWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM+
KGNvbnN0IFN0cmluZyYpOwotdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM+KGNvbnN0IFN0cmlu
ZyYpOwotCi19IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwotCi19IC8vIG5hbWVzcGFjZSBQcm90
b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotbmFtZXNwYWNlIFdURiB7Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKLQotLy8gSGFzaCBkZWNsYXJh
dGlvbnMgaW4gdGhlICdSdW50aW1lJyBEb21haW4KLXRlbXBsYXRlPD4KLXN0cnVjdCBEZWZhdWx0
SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpGYXJtQW5pbWFscz4gewotICAgIHR5
cGVkZWYgSW50SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpGYXJtQW5pbWFscz4g
SGFzaDsKLX07Ci10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90
b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFscz4gewotICAgIHR5cGVkZWYgSW50SGFzaDxJ
bnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxzPiBIYXNoOwotfTsK
LQotfSAvLyBuYW1lc3BhY2UgV1RGCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMu
aAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0KLSNpbmNsdWRlIDx3dGYv
T3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJ
bnNwZWN0b3IgewotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi1uYW1lc3BhY2UgVGVzdEhlbHBl
cnMgewotCi1zdGF0aWMgY29uc3QgY2hhciogY29uc3QgZW51bV9jb25zdGFudF92YWx1ZXNbXSA9
IHsKLSAgICAiUGlncyIsCi0gICAgIkNvd3MiLAotICAgICJDYXRzIiwKLSAgICAiSGVucyIsCi0g
ICAgIkR1Y2tzIiwKLSAgICAiQ3Jvd3MiLAotICAgICJGbGFtaW5nb3MiLAotfTsKLQotU3RyaW5n
IGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7Ci0gICAgcmV0dXJuIGVudW1fY29uc3Rh
bnRfdmFsdWVzW2NvZGVdOwotfQotCi0vLyBFbnVtcyBpbiB0aGUgJ1J1bnRpbWUnIERvbWFpbgot
dGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFu
aW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50
aW1lOjpGYXJtQW5pbWFscz4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKLXsKLSAgICBz
dGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7Ci0gICAgICAgIChzaXplX3Qp
SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM6OlBpZ3MsCi0gICAgICAg
IChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM6OkNvd3Ms
Ci0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1h
bHM6OkNhdHMsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6
RmFybUFuaW1hbHM6OkhlbnMsCi0gICAgfTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDQ7
ICsraSkKLSAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVz
W2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90
b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHMpY29uc3RhbnRWYWx1ZXNbaV07Ci0KLSAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwotfQotCi10ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlBy
b3RvY29sOjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJp
bmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFscz4oY29uc3Qg
U3RyaW5nJiBwcm90b2NvbFN0cmluZykKLXsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0
YW50VmFsdWVzW10gPSB7Ci0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVu
dGltZTo6VHdvTGVnZ2VkQW5pbWFsczo6RHVja3MsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9y
OjpQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFsczo6SGVucywKLSAgICAgICAgKHNp
emVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxzOjpDcm93
cywKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUd29MZWdn
ZWRBbmltYWxzOjpGbGFtaW5nb3MsCi0gICAgfTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IDQ7ICsraSkKLSAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFs
dWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQ
cm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFscyljb25zdGFudFZhbHVlc1tpXTsKLQot
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLQotfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBl
cnMKLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2luY2x1ZGUg
PHd0Zi9SZXRhaW5QdHIuaD4KLQotCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLX0gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmRE
aXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0
Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0
aW9uLWVudW0tdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERp
c3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2luY2x1
ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFs
dWVzLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLQot
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8V2ViSW5z
cGVjdG9yL1Rlc3RQcm90b2NvbC5oPgotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVm
YXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0
Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLQot
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24uaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwu
aCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KLSNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0j
aW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLQot
dXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24KLXsKLSAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9j
b250cm9sbGVyOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdt
ZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBzZWxmID0gW3N1
cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NF
UlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVy
biBzZWxmOwotfQotCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19
Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0K
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQg
IlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5oIgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNl
IEluc3BlY3RvcjsKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hl
cnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxGb3VuZGF0aW9u
L0ZvdW5kYXRpb24uaD4KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9i
amVjdC5oPgotCi0KLQotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xQ
bGF0Zm9ybSkgewotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsLAotICAgIFRlc3RQcm90b2Nv
bFBsYXRmb3JtR2VuZXJpYywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUywKLSAgICBUZXN0
UHJvdG9jb2xQbGF0Zm9ybU1hY09TLAotfTsKLQotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2Vy
LCBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHMpIHsKLSAgICBUZXN0UHJvdG9jb2xSdW50
aW1lRmFybUFuaW1hbHNQaWdzLAotICAgIFRlc3RQcm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFsc0Nv
d3MsCi0gICAgVGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzQ2F0cywKLSAgICBUZXN0UHJv
dG9jb2xSdW50aW1lRmFybUFuaW1hbHNIZW5zLAotfTsKLQotdHlwZWRlZiBOU19FTlVNKE5TSW50
ZWdlciwgVGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHMpIHsKLSAgICBUZXN0UHJv
dG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFsc0R1Y2tzLAotICAgIFRlc3RQcm90b2NvbFJ1bnRp
bWVUd29MZWdnZWRBbmltYWxzSGVucywKLSAgICBUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2Vk
QW5pbWFsc0Nyb3dzLAotICAgIFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzRmxh
bWluZ29zLAotfTsKLQotCi0KLQotCi0KLQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJv
dG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQg
IlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUu
aCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxl
ci5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotCi0KLQotIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVj
bGFyYXRpb24tZW51bS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0
b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+Ci1PcHRpb25hbDxPYmpDRW51bVR5
cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKLQotaW5saW5lIFN0
cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFBsYXRmb3JtIHZhbHVlKQotewotICAg
IHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1BbGw6Ci0gICAg
ICAgIHJldHVybiAiYWxsIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmlj
OgotICAgICAgICByZXR1cm4gImdlbmVyaWMiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0
Zm9ybUlPUzoKLSAgICAgICAgcmV0dXJuICJpb3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQ
bGF0Zm9ybU1hY09TOgotICAgICAgICByZXR1cm4gIm1hY29zIl9zOwotICAgIH0KLX0KLQotdGVt
cGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFBsYXRmb3JtPiBmcm9tUHJvdG9j
b2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gImFsbCIp
Ci0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDsKLSAgICBpZiAodmFsdWUg
PT0gImdlbmVyaWMiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmlj
OwotICAgIGlmICh2YWx1ZSA9PSAiaW9zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBs
YXRmb3JtSU9TOwotICAgIGlmICh2YWx1ZSA9PSAibWFjb3MiKQotICAgICAgICByZXR1cm4gVGVz
dFByb3RvY29sUGxhdGZvcm1NYWNPUzsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi0K
LWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFu
aW1hbHMgdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9j
b2xSdW50aW1lRmFybUFuaW1hbHNQaWdzOgotICAgICAgICByZXR1cm4gIlBpZ3MiX3M7Ci0gICAg
Y2FzZSBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHNDb3dzOgotICAgICAgICByZXR1cm4g
IkNvd3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHNDYXRzOgot
ICAgICAgICByZXR1cm4gIkNhdHMiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xSdW50aW1lRmFy
bUFuaW1hbHNIZW5zOgotICAgICAgICByZXR1cm4gIkhlbnMiX3M7Ci0gICAgfQotfQotCi10ZW1w
bGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzPiBm
cm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUg
PT0gIlBpZ3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxz
UGlnczsKLSAgICBpZiAodmFsdWUgPT0gIkNvd3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3Rv
Y29sUnVudGltZUZhcm1BbmltYWxzQ293czsKLSAgICBpZiAodmFsdWUgPT0gIkNhdHMiKQotICAg
ICAgICByZXR1cm4gVGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzQ2F0czsKLSAgICBpZiAo
dmFsdWUgPT0gIkhlbnMiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUnVudGltZUZhcm1B
bmltYWxzSGVuczsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi1pbmxpbmUgU3RyaW5n
IHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHMgdmFs
dWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xSdW50aW1l
VHdvTGVnZ2VkQW5pbWFsc0R1Y2tzOgotICAgICAgICByZXR1cm4gIkR1Y2tzIl9zOwotICAgIGNh
c2UgVGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHNIZW5zOgotICAgICAgICByZXR1
cm4gIkhlbnMiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFs
c0Nyb3dzOgotICAgICAgICByZXR1cm4gIkNyb3dzIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29s
UnVudGltZVR3b0xlZ2dlZEFuaW1hbHNGbGFtaW5nb3M6Ci0gICAgICAgIHJldHVybiAiRmxhbWlu
Z29zIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90
b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gIkR1Y2tzIikKLSAgICAgICAgcmV0dXJu
IFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzRHVja3M7Ci0gICAgaWYgKHZhbHVl
ID09ICJIZW5zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRB
bmltYWxzSGVuczsKLSAgICBpZiAodmFsdWUgPT0gIkNyb3dzIikKLSAgICAgICAgcmV0dXJuIFRl
c3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzQ3Jvd3M7Ci0gICAgaWYgKHZhbHVlID09
ICJGbGFtaW5nb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dl
ZEFuaW1hbHNGbGFtaW5nb3M7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5t
bQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51
bS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0KLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgotI2ltcG9ydCA8
V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLQotdXNpbmcgbmFt
ZXNwYWNlIEluc3BlY3RvcjsKLQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMgKFJ1bnRpbWVEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlRmFybUFuaW1hbHM6KE5TTnVtYmVy
ICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotKyAodm9pZClfcGFyc2VUd29M
ZWdnZWRBbmltYWxzOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9h
ZDsKLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
IChSdW50aW1lRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZUZhcm1BbmltYWxzOihOU051bWJlciAq
KilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TU3RyaW5nIGNsYXNzXSk7Ci0gICAgT3B0aW9uYWw8
VGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzPiByZXN1bHQgPSBJbnNwZWN0b3I6OmZyb21Q
cm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHM+KHBheWxvYWQpOwot
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX0VOVU1fVkFMVUUocmVzdWx0LCBAIkZhcm1Bbmlt
YWxzIik7Ci0gICAgKm91dFZhbHVlID0gQChyZXN1bHQudmFsdWUoKSk7Ci19Ci0KLSsgKHZvaWQp
X3BhcnNlVHdvTGVnZ2VkQW5pbWFsczooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6
KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQs
IFtOU1N0cmluZyBjbGFzc10pOwotICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbFJ1bnRpbWVUd29M
ZWdnZWRBbmltYWxzPiByZXN1bHQgPSBJbnNwZWN0b3I6OmZyb21Qcm90b2NvbFN0cmluZzxUZXN0
UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFscz4ocGF5bG9hZCk7Ci0gICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9CQURfRU5VTV9WQUxVRShyZXN1bHQsIEAiVHdvTGVnZ2VkQW5pbWFscyIpOwot
ICAgICpvdXRWYWx1ZSA9IEAocmVzdWx0LnZhbHVlKCkpOwotfQotCi1AZW5kCi0KLQotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbFR5cGVzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
dHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0j
aW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPFdlYkluc3Bl
Y3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0
aW9ucy5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIElu
c3BlY3RvcjsKLQotCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uLXJlc3VsdCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4
cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbi1yZXN1bHQKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyZTZkYTJiYmM4Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3Rl
ZC90eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24tcmVzdWx0CisrKyAvZGV2L251bGwK
QEAgLTEsMjQ1NSArMCwwIEBACi0jIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1h
bmRzLmpzCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlv
bi1vYmplY3QtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0KLS8vIERhdGFiYXNlCi1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJEYXRh
YmFzZSIsIG51bGwpOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIkRhdGFiYXNlLk1v
dXNlQnV0dG9uIiwge05vbmU6ICJOb25lIiwgTGVmdDogIkxlZnQiLCBNaWRkbGU6ICJNaWRkbGUi
LCBSaWdodDogIlJpZ2h0In0pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIkRhdGFi
YXNlLk9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHkiLCB7TFRSOiAiTFRSIiwg
UlRMOiAiUlRMIn0pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIkRhdGFiYXNlLlBh
cmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5Iiwge0xUUjogIkxUUiIsIFJUTDogIlJUTCJ9KTsK
LUluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkRhdGFiYXNlIiwgbnVsbCk7Ci0jIyMg
RW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0KLSNpbmNsdWRlICJUZXN0UHJv
dG9jb2xUeXBlcy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRS
b3V0ZXIuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEFsdGVybmF0ZUJhY2tl
bmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJl
ZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNo
ZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9Ci0gICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tl
bmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsg
fQotcHJpdmF0ZToKLSAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3Bh
dGNoZXI7Ci19OwotCi0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotI2VuZGlmIC8v
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotIyMjIEVuZCBGaWxlOiBU
ZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5
cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bE9iamVjdHMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKLQotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KLQotCi19IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5o
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3
dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQotI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMu
aCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLX0gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQot
Ci0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFs
dWVzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNw
ZWN0b3IgewotCi1jbGFzcyBGcm9udGVuZFJvdXRlcjsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgotLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi1uYW1lc3BhY2Ug
UHJvdG9jb2wgewotCi0KLQotLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCi1uYW1lc3BhY2UgRGF0
YWJhc2UgewotY2xhc3MgRXJyb3I7Ci1jbGFzcyBPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTsKLWNs
YXNzIFBhcmFtZXRlckJ1bmRsZTsKLWNsYXNzIE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGlj
dHM7Ci1jbGFzcyBEdW1teU9iamVjdDsKLWVudW0gY2xhc3MgTW91c2VCdXR0b247Ci19IC8vIERh
dGFiYXNlCi0KLW5hbWVzcGFjZSBUZXN0IHsKLWNsYXNzIFBhcmFtZXRlckJ1bmRsZTsKLX0gLy8g
VGVzdAotLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgotCi0KLS8vIFR5cGVkZWZzLgot
bmFtZXNwYWNlIERhdGFiYXNlIHsKLXR5cGVkZWYgSlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IEVycm9yTGlzdDsKLX0gLy8gRGF0YWJhc2UKLS8vIEVu
ZCBvZiB0eXBlZGVmcy4KLQotbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKLQotU3RyaW5nIGdldEVu
dW1Db25zdGFudFZhbHVlKGludCBjb2RlKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5n
IGdldEVudW1Db25zdGFudFZhbHVlKFQgZW51bVZhbHVlKQotewotICAgIHJldHVybiBnZXRFbnVt
Q29uc3RhbnRWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KGVudW1WYWx1ZSkpOwotfQotCi19IC8vIG5h
bWVzcGFjZSBUZXN0SGVscGVycwotCi1uYW1lc3BhY2UgRGF0YWJhc2UgewotLyogRGF0YWJhc2Ug
ZXJyb3IuICovCi1jbGFzcyBFcnJvciA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKLXB1Ymxp
YzoKLSAgICBlbnVtIHsKLSAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAotICAgICAgICBNZXNzYWdl
U2V0ID0gMSA8PCAwLAotICAgICAgICBDb2RlU2V0ID0gMSA8PCAxLAotICAgICAgICBBbGxGaWVs
ZHNTZXQgPSAoTWVzc2FnZVNldCB8IENvZGVTZXQpCi0gICAgfTsKLQotICAgIHRlbXBsYXRlPGlu
dCBTVEFURT4KLSAgICBjbGFzcyBCdWlsZGVyIHsKLSAgICBwcml2YXRlOgotICAgICAgICBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiBtX3Jlc3VsdDsKLQotICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4g
QnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7
Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyKFJlZjwvKkVycm9yKi9KU09OOjpPYmplY3Q+
JiYgb2JqZWN0KQotICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBi
dWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwotICAgICAgICB9Ci0gICAgICAgIGZy
aWVuZCBjbGFzcyBFcnJvcjsKLSAgICBwdWJsaWM6Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8
IE1lc3NhZ2VTZXQ+JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNZXNzYWdlU2V0KSwgcHJvcGVy
dHlfbWVzc2FnZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5n
KCJtZXNzYWdlIl9zLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1lc3Nh
Z2VTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29kZVNldD4m
IHNldENvZGUoaW50IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgQ29kZVNldCksIHByb3BlcnR5X2NvZGVfYWxyZWFkeV9zZXQpOwotICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldEludGVnZXIoImNvZGUiX3MsIHZhbHVlKTsKLSAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8Q29kZVNldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIFJlZjxF
cnJvcj4gcmVsZWFzZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNU
QVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7Ci0gICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChzaXplb2YoRXJyb3IpID09IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5u
b3RfY2FzdCk7Ci0KLSAgICAgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25SZXN1bHQgPSBt
X3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOwotICAgICAgICAgICAgYXV0byByZXN1bHQgPSBXVEZN
b3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxFcnJvcj4qPigmanNvblJlc3VsdCkpOwotICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICAvKgotICAgICAq
IFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKLSAgICAgKiBSZWY8RXJyb3I+IHJlc3VsdCA9IEVycm9y
OjpjcmVhdGUoKQotICAgICAqICAgICAuc2V0TWVzc2FnZSguLi4pCi0gICAgICogICAgIC5zZXRD
b2RlKC4uLikKLSAgICAgKiAgICAgLnJlbGVhc2UoKTsKLSAgICAgKi8KLSAgICBzdGF0aWMgQnVp
bGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBCdWlsZGVy
PE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKLSAgICB9Ci19OwotCi0vKiBF
bnVtZXJhdGVzIGRpZmZlcmVudCBtb3VzZSBidXR0b25zIHRoYXQgY2FuIGJlIHVzZWQuICovCi1l
bnVtIGNsYXNzIE1vdXNlQnV0dG9uIHsKLSAgICBOb25lID0gMCwKLSAgICBMZWZ0ID0gMSwKLSAg
ICBNaWRkbGUgPSAyLAotICAgIFJpZ2h0ID0gMywKLX07IC8vIGVudW0gY2xhc3MgTW91c2VCdXR0
b24KLWNsYXNzIE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlIDogcHVibGljIEpTT046Ok9iamVjdEJh
c2UgewotcHVibGljOgotICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ2RpcmVjdGlv
bmFsaXR5JyB3aGlsZSBnZW5lcmF0aW5nIE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlLgotICAgIGVu
dW0gY2xhc3MgRGlyZWN0aW9uYWxpdHkgewotICAgICAgICBMVFIgPSA0LAotICAgICAgICBSVEwg
PSA1LAotICAgIH07IC8vIGVudW0gY2xhc3MgRGlyZWN0aW9uYWxpdHkKLSAgICBlbnVtIHsKLSAg
ICAgICAgTm9GaWVsZHNTZXQgPSAwLAotICAgICAgICBBbGxGaWVsZHNTZXQgPSAwCi0gICAgfTsK
LQotICAgIHRlbXBsYXRlPGludCBTVEFURT4KLSAgICBjbGFzcyBCdWlsZGVyIHsKLSAgICBwcml2
YXRlOgotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBtX3Jlc3VsdDsKLQotICAgICAgICB0
ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFU
RSB8IFNURVA+Kj4odGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyKFJlZjwvKk9w
dGlvbmFsUGFyYW1ldGVyQnVuZGxlKi9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQotICAgICAgICAg
ICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9u
X2luaXRfc3RhdGUpOwotICAgICAgICB9Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBPcHRpb25hbFBh
cmFtZXRlckJ1bmRsZTsKLSAgICBwdWJsaWM6Ci0KLSAgICAgICAgUmVmPE9wdGlvbmFsUGFyYW1l
dGVyQnVuZGxlPiByZWxlYXNlKCkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKLSAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihPcHRpb25hbFBhcmFtZXRlckJ1bmRsZSkgPT0gc2l6
ZW9mKEpTT046Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsKLQotICAgICAgICAgICAgUmVmPEpTT046
Ok9iamVjdD4ganNvblJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7Ci0gICAgICAg
ICAgICBhdXRvIHJlc3VsdCA9IFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPE9wdGlvbmFs
UGFyYW1ldGVyQnVuZGxlPio+KCZqc29uUmVzdWx0KSk7Ci0gICAgICAgICAgICByZXR1cm4gcmVz
dWx0OwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIC8qCi0gICAgICogU3ludGhldGljIGNvbnN0
cnVjdG9yOgotICAgICAqIFJlZjxPcHRpb25hbFBhcmFtZXRlckJ1bmRsZT4gcmVzdWx0ID0gT3B0
aW9uYWxQYXJhbWV0ZXJCdW5kbGU6OmNyZWF0ZSgpCi0gICAgICogICAgIC5yZWxlYXNlKCk7Ci0g
ICAgICovCi0gICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCi0gICAgewot
ICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KSk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRDb2x1bW5OYW1lcyhSZWZQdHI8SlNPTjo6QXJyYXlP
ZjxTdHJpbmc+PiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldEFy
cmF5KCJjb2x1bW5OYW1lcyJfcywgV1RGTW92ZSh2YWx1ZSkpOwotICAgIH0KLQotICAgIHZvaWQg
c2V0QnV0dG9ucyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6TW91c2VCdXR0b24+PiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEpTT046Ok9iamVjdEJh
c2U6OnNldEFycmF5KCJidXR0b25zIl9zLCBXVEZNb3ZlKHZhbHVlKSk7Ci0gICAgfQotCi0gICAg
dm9pZCBzZXREaXJlY3Rpb25hbGl0eShEaXJlY3Rpb25hbGl0eSB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIEpTT046Ok9iamVjdEJhc2U6OnNldFN0cmluZygiZGlyZWN0aW9uYWxpdHkiX3MsIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSh2YWx1ZSkp
OwotICAgIH0KLQotICAgIHZvaWQgc2V0Tm90ZXMoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICB7
Ci0gICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldFN0cmluZygibm90ZXMiX3MsIHZhbHVlKTsK
LSAgICB9Ci0KLSAgICB2b2lkIHNldFRpbWVzdGFtcChkb3VibGUgdmFsdWUpCi0gICAgewotICAg
ICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXREb3VibGUoInRpbWVzdGFtcCJfcywgdmFsdWUpOwot
ICAgIH0KLQotICAgIHZvaWQgc2V0VmFsdWVzKFJlZlB0cjxKU09OOjpPYmplY3Q+IHZhbHVlKQot
ICAgIHsKLSAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFdU
Rk1vdmUodmFsdWUpKTsKLSAgICB9Ci0KLSAgICB2b2lkIHNldFBheWxvYWQoUmVmUHRyPEpTT046
OlZhbHVlPiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldFZhbHVl
KCJwYXlsb2FkIl9zLCBXVEZNb3ZlKHZhbHVlKSk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRFcnJv
cihSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiB2YWx1ZSkKLSAg
ICB7Ci0gICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldE9iamVjdCgiZXJyb3IiX3MsIFdURk1v
dmUodmFsdWUpKTsKLSAgICB9Ci0KLSAgICB2b2lkIHNldEVycm9yTGlzdChSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yTGlzdD4gdmFsdWUpCi0gICAgewotICAgICAg
ICBKU09OOjpPYmplY3RCYXNlOjpzZXRBcnJheSgiZXJyb3JMaXN0Il9zLCBXVEZNb3ZlKHZhbHVl
KSk7Ci0gICAgfQotfTsKLQotY2xhc3MgUGFyYW1ldGVyQnVuZGxlIDogcHVibGljIEpTT046Ok9i
amVjdEJhc2UgewotcHVibGljOgotICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ2Rp
cmVjdGlvbmFsaXR5JyB3aGlsZSBnZW5lcmF0aW5nIFBhcmFtZXRlckJ1bmRsZS4KLSAgICBlbnVt
IGNsYXNzIERpcmVjdGlvbmFsaXR5IHsKLSAgICAgICAgTFRSID0gNCwKLSAgICAgICAgUlRMID0g
NSwKLSAgICB9OyAvLyBlbnVtIGNsYXNzIERpcmVjdGlvbmFsaXR5Ci0gICAgZW51bSB7Ci0gICAg
ICAgIE5vRmllbGRzU2V0ID0gMCwKLSAgICAgICAgQ29sdW1uTmFtZXNTZXQgPSAxIDw8IDAsCi0g
ICAgICAgIEJ1dHRvbnNTZXQgPSAxIDw8IDEsCi0gICAgICAgIERpcmVjdGlvbmFsaXR5U2V0ID0g
MSA8PCAyLAotICAgICAgICBOb3Rlc1NldCA9IDEgPDwgMywKLSAgICAgICAgVGltZXN0YW1wU2V0
ID0gMSA8PCA0LAotICAgICAgICBWYWx1ZXNTZXQgPSAxIDw8IDUsCi0gICAgICAgIFBheWxvYWRT
ZXQgPSAxIDw8IDYsCi0gICAgICAgIEVycm9yU2V0ID0gMSA8PCA3LAotICAgICAgICBFcnJvckxp
c3RTZXQgPSAxIDw8IDgsCi0gICAgICAgIEFsbEZpZWxkc1NldCA9IChDb2x1bW5OYW1lc1NldCB8
IEJ1dHRvbnNTZXQgfCBEaXJlY3Rpb25hbGl0eVNldCB8IE5vdGVzU2V0IHwgVGltZXN0YW1wU2V0
IHwgVmFsdWVzU2V0IHwgUGF5bG9hZFNldCB8IEVycm9yU2V0IHwgRXJyb3JMaXN0U2V0KQotICAg
IH07Ci0KLSAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+Ci0gICAgY2xhc3MgQnVpbGRlciB7Ci0gICAg
cHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7Ci0KLSAgICAg
ICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8
U1RBVEUgfCBTVEVQPio+KHRoaXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcihSZWY8
LypQYXJhbWV0ZXJCdW5kbGUqL0pTT046Ok9iamVjdD4mJiBvYmplY3QpCi0gICAgICAgICAgICA6
IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5p
dF9zdGF0ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZnJpZW5kIGNsYXNzIFBhcmFtZXRlckJ1bmRs
ZTsKLSAgICBwdWJsaWM6Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvbHVtbk5hbWVzU2V0
PiYgc2V0Q29sdW1uTmFtZXMoUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gdmFsdWUpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2x1bW5OYW1l
c1NldCksIHByb3BlcnR5X2NvbHVtbk5hbWVzX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJl
dHVybiBjYXN0U3RhdGU8Q29sdW1uTmFtZXNTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgQnV0dG9uc1NldD4mIHNldEJ1dHRvbnMoUmVmUHRyPEpTT046OkFycmF5
T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPj4gdmFsdWUpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBCdXR0b25zU2V0
KSwgcHJvcGVydHlfYnV0dG9uc19hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0QXJyYXkoImJ1dHRvbnMiX3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3Rh
dGU8QnV0dG9uc1NldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBE
aXJlY3Rpb25hbGl0eVNldD4mIHNldERpcmVjdGlvbmFsaXR5KERpcmVjdGlvbmFsaXR5IHZhbHVl
KQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRGlyZWN0
aW9uYWxpdHlTZXQpLCBwcm9wZXJ0eV9kaXJlY3Rpb25hbGl0eV9hbHJlYWR5X3NldCk7Ci0gICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJkaXJlY3Rpb25hbGl0eSJfcywgSW5zcGVjdG9y
OjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKHZhbHVlKSk7Ci0g
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPERpcmVjdGlvbmFsaXR5U2V0PigpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IE5vdGVzU2V0PiYgc2V0Tm90ZXMoY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIE5vdGVzU2V0KSwgcHJvcGVydHlfbm90ZXNfYWxyZWFkeV9zZXQpOwotICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldFN0cmluZygibm90ZXMiX3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJl
dHVybiBjYXN0U3RhdGU8Tm90ZXNTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgVGltZXN0YW1wU2V0PiYgc2V0VGltZXN0YW1wKGRvdWJsZSB2YWx1ZSkKLSAgICAg
ICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFRpbWVzdGFtcFNldCks
IHByb3BlcnR5X3RpbWVzdGFtcF9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0
U3RhdGU8VGltZXN0YW1wU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IFZhbHVlc1NldD4mIHNldFZhbHVlcyhSZWZQdHI8SlNPTjo6T2JqZWN0PiB2YWx1ZSkKLSAg
ICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFZhbHVlc1NldCks
IHByb3BlcnR5X3ZhbHVlc19hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
T2JqZWN0KCJ2YWx1ZXMiX3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8
VmFsdWVzU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IFBheWxv
YWRTZXQ+JiBzZXRQYXlsb2FkKFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWUpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBQYXlsb2FkU2V0KSwgcHJvcGVy
dHlfcGF5bG9hZF9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0VmFsdWUo
InBheWxvYWQiX3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8UGF5bG9h
ZFNldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBFcnJvclNldD4m
IHNldEVycm9yKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHZh
bHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRXJy
b3JTZXQpLCBwcm9wZXJ0eV9lcnJvcl9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0T2JqZWN0KCJlcnJvciJfcywgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxFcnJvclNldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBF
cnJvckxpc3RTZXQ+JiBzZXRFcnJvckxpc3QoUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpFcnJvckxpc3Q+IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxF
X0FTU0VSVCghKFNUQVRFICYgRXJyb3JMaXN0U2V0KSwgcHJvcGVydHlfZXJyb3JMaXN0X2FscmVh
ZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheSgiZXJyb3JMaXN0Il9zLCB2
YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEVycm9yTGlzdFNldD4oKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIFJlZjxQYXJhbWV0ZXJCdW5kbGU+IHJlbGVhc2UoKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJl
c3VsdF9pc19ub3RfcmVhZHkpOwotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFBh
cmFtZXRlckJ1bmRsZSkgPT0gc2l6ZW9mKEpTT046Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsKLQot
ICAgICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4ganNvblJlc3VsdCA9IG1fcmVzdWx0LnJlbGVh
c2VOb25OdWxsKCk7Ci0gICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFdURk1vdmUoKnJlaW50ZXJw
cmV0X2Nhc3Q8UmVmPFBhcmFtZXRlckJ1bmRsZT4qPigmanNvblJlc3VsdCkpOwotICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICAvKgotICAgICAqIFN5
bnRoZXRpYyBjb25zdHJ1Y3RvcjoKLSAgICAgKiBSZWY8UGFyYW1ldGVyQnVuZGxlPiByZXN1bHQg
PSBQYXJhbWV0ZXJCdW5kbGU6OmNyZWF0ZSgpCi0gICAgICogICAgIC5zZXRDb2x1bW5OYW1lcygu
Li4pCi0gICAgICogICAgIC5zZXRCdXR0b25zKC4uLikKLSAgICAgKiAgICAgLnNldERpcmVjdGlv
bmFsaXR5KC4uLikKLSAgICAgKiAgICAgLnNldE5vdGVzKC4uLikKLSAgICAgKiAgICAgLnNldFRp
bWVzdGFtcCguLi4pCi0gICAgICogICAgIC5zZXRWYWx1ZXMoLi4uKQotICAgICAqICAgICAuc2V0
UGF5bG9hZCguLi4pCi0gICAgICogICAgIC5zZXRFcnJvciguLi4pCi0gICAgICogICAgIC5zZXRF
cnJvckxpc3QoLi4uKQotICAgICAqICAgICAucmVsZWFzZSgpOwotICAgICAqLwotICAgIHN0YXRp
YyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEJ1
aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOwotICAgIH0KLX07Ci0K
LS8qIENvbmZsaWN0ZWQgbmFtZXMgbWF5IGNhdXNlIGdlbmVyYXRlZCBnZXR0ZXJzL3NldHRlcnMg
dG8gY2xhc2ggd2l0aCBidWlsdC1pbiBJbnNwZWN0b3JPYmplY3QgbWV0aG9kcy4gKi8KLWNsYXNz
IE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHMgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFz
ZSB7Ci1wdWJsaWM6Ci0gICAgZW51bSB7Ci0gICAgICAgIE5vRmllbGRzU2V0ID0gMCwKLSAgICAg
ICAgSW50ZWdlclNldCA9IDEgPDwgMCwKLSAgICAgICAgQXJyYXlTZXQgPSAxIDw8IDEsCi0gICAg
ICAgIFN0cmluZ1NldCA9IDEgPDwgMiwKLSAgICAgICAgVmFsdWVTZXQgPSAxIDw8IDMsCi0gICAg
ICAgIE9iamVjdFNldCA9IDEgPDwgNCwKLSAgICAgICAgQWxsRmllbGRzU2V0ID0gKEludGVnZXJT
ZXQgfCBBcnJheVNldCB8IFN0cmluZ1NldCB8IFZhbHVlU2V0IHwgT2JqZWN0U2V0KQotICAgIH07
Ci0KLSAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+Ci0gICAgY2xhc3MgQnVpbGRlciB7Ci0gICAgcHJp
dmF0ZToKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7Ci0KLSAgICAgICAg
dGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RB
VEUgfCBTVEVQPio+KHRoaXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcihSZWY8LypP
YmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzKi9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQot
ICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0
ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwotICAgICAgICB9Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBP
YmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzOwotICAgIHB1YmxpYzoKLQotICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgSW50ZWdlclNldD4mIHNldEludGVnZXIoY29uc3QgU3RyaW5nJiB2YWx1
ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEludGVn
ZXJTZXQpLCBwcm9wZXJ0eV9pbnRlZ2VyX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXRTdHJpbmcoImludGVnZXIiX3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8SW50ZWdlclNldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBBcnJheVNldD4mIHNldEFycmF5KGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBBcnJheVNldCksIHByb3BlcnR5
X2FycmF5X2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImFy
cmF5Il9zLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEFycmF5U2V0Pigp
OwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IFN0cmluZ1NldD4mIHNldFN0
cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxF
X0FTU0VSVCghKFNUQVRFICYgU3RyaW5nU2V0KSwgcHJvcGVydHlfc3RyaW5nX2FscmVhZHlfc2V0
KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInN0cmluZyJfcywgdmFsdWUpOwot
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTdHJpbmdTZXQ+KCk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVmFsdWVTZXQ+JiBzZXRWYWx1ZShjb25zdCBTdHJpbmcm
IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
VmFsdWVTZXQpLCBwcm9wZXJ0eV92YWx1ZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0U3RyaW5nKCJ2YWx1ZSJfcywgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNh
c3RTdGF0ZTxWYWx1ZVNldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBPYmplY3RTZXQ+JiBzZXRPYmplY3QoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICAgICAgewot
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE9iamVjdFNldCksIHByb3BlcnR5
X29iamVjdF9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJv
YmplY3QiX3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8T2JqZWN0U2V0
PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgUmVmPE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25m
bGljdHM+IHJlbGVhc2UoKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChT
VEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwotICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoc2l6ZW9mKE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHMpID09
IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7Ci0KLSAgICAgICAgICAgIFJlZjxK
U09OOjpPYmplY3Q+IGpzb25SZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOwotICAg
ICAgICAgICAgYXV0byByZXN1bHQgPSBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxPYmpl
Y3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzPio+KCZqc29uUmVzdWx0KSk7Ci0gICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIC8qCi0gICAgICogU3lu
dGhldGljIGNvbnN0cnVjdG9yOgotICAgICAqIFJlZjxPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29u
ZmxpY3RzPiByZXN1bHQgPSBPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzOjpjcmVhdGUo
KQotICAgICAqICAgICAuc2V0SW50ZWdlciguLi4pCi0gICAgICogICAgIC5zZXRBcnJheSguLi4p
Ci0gICAgICogICAgIC5zZXRTdHJpbmcoLi4uKQotICAgICAqICAgICAuc2V0VmFsdWUoLi4uKQot
ICAgICAqICAgICAuc2V0T2JqZWN0KC4uLikKLSAgICAgKiAgICAgLnJlbGVhc2UoKTsKLSAgICAg
Ki8KLSAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsK
LSAgICB9Ci19OwotCi19IC8vIERhdGFiYXNlCi0KLW5hbWVzcGFjZSBUZXN0IHsKLWNsYXNzIFBh
cmFtZXRlckJ1bmRsZSA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKLXB1YmxpYzoKLSAgICAv
LyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdkaXJlY3Rpb25hbGl0eScgd2hpbGUgZ2VuZXJh
dGluZyBQYXJhbWV0ZXJCdW5kbGUuCi0gICAgZW51bSBjbGFzcyBEaXJlY3Rpb25hbGl0eSB7Ci0g
ICAgICAgIExUUiA9IDQsCi0gICAgICAgIFJUTCA9IDUsCi0gICAgfTsgLy8gZW51bSBjbGFzcyBE
aXJlY3Rpb25hbGl0eQotICAgIGVudW0gewotICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCi0gICAg
ICAgIERpcmVjdGlvbmFsaXR5U2V0ID0gMSA8PCAwLAotICAgICAgICBCdXR0b25zU2V0ID0gMSA8
PCAxLAotICAgICAgICBDb2x1bW5OYW1lc1NldCA9IDEgPDwgMiwKLSAgICAgICAgTm90ZXNTZXQg
PSAxIDw8IDMsCi0gICAgICAgIFRpbWVzdGFtcFNldCA9IDEgPDwgNCwKLSAgICAgICAgVmFsdWVz
U2V0ID0gMSA8PCA1LAotICAgICAgICBQYXlsb2FkU2V0ID0gMSA8PCA2LAotICAgICAgICBFcnJv
clNldCA9IDEgPDwgNywKLSAgICAgICAgQWxsRmllbGRzU2V0ID0gKERpcmVjdGlvbmFsaXR5U2V0
IHwgQnV0dG9uc1NldCB8IENvbHVtbk5hbWVzU2V0IHwgTm90ZXNTZXQgfCBUaW1lc3RhbXBTZXQg
fCBWYWx1ZXNTZXQgfCBQYXlsb2FkU2V0IHwgRXJyb3JTZXQpCi0gICAgfTsKLQotICAgIHRlbXBs
YXRlPGludCBTVEFURT4KLSAgICBjbGFzcyBCdWlsZGVyIHsKLSAgICBwcml2YXRlOgotICAgICAg
ICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBtX3Jlc3VsdDsKLQotICAgICAgICB0ZW1wbGF0ZTxpbnQg
U1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4o
dGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyKFJlZjwvKlBhcmFtZXRlckJ1bmRs
ZSovSlNPTjo6T2JqZWN0PiYmIG9iamVjdCkKLSAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92
ZShvYmplY3QpKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9
PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKLSAgICAg
ICAgfQotICAgICAgICBmcmllbmQgY2xhc3MgUGFyYW1ldGVyQnVuZGxlOwotICAgIHB1YmxpYzoK
LQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRGlyZWN0aW9uYWxpdHlTZXQ+JiBzZXREaXJlY3Rp
b25hbGl0eShEaXJlY3Rpb25hbGl0eSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIERpcmVjdGlvbmFsaXR5U2V0KSwgcHJvcGVydHlfZGlyZWN0
aW9uYWxpdHlfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygi
ZGlyZWN0aW9uYWxpdHkiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRF
bnVtQ29uc3RhbnRWYWx1ZSh2YWx1ZSkpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxE
aXJlY3Rpb25hbGl0eVNldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBCdXR0b25zU2V0PiYgc2V0QnV0dG9ucyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6
OlByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b24+PiB2YWx1ZSkKLSAgICAgICAgewotICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEJ1dHRvbnNTZXQpLCBwcm9wZXJ0eV9i
dXR0b25zX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheSgiYnV0
dG9ucyJfcywgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxCdXR0b25zU2V0
PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvbHVtbk5hbWVzU2V0
PiYgc2V0Q29sdW1uTmFtZXMoUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gdmFsdWUpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2x1bW5OYW1l
c1NldCksIHByb3BlcnR5X2NvbHVtbk5hbWVzX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJl
dHVybiBjYXN0U3RhdGU8Q29sdW1uTmFtZXNTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgTm90ZXNTZXQ+JiBzZXROb3Rlcyhjb25zdCBTdHJpbmcmIHZhbHVlKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTm90ZXNTZXQp
LCBwcm9wZXJ0eV9ub3Rlc19hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
U3RyaW5nKCJub3RlcyJfcywgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxO
b3Rlc1NldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUaW1lc3Rh
bXBTZXQ+JiBzZXRUaW1lc3RhbXAoZG91YmxlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVGltZXN0YW1wU2V0KSwgcHJvcGVydHlfdGltZXN0
YW1wX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXREb3VibGUoInRpbWVz
dGFtcCJfcywgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUaW1lc3RhbXBT
ZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVmFsdWVzU2V0PiYg
c2V0VmFsdWVzKFJlZlB0cjxKU09OOjpPYmplY3Q+IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVmFsdWVzU2V0KSwgcHJvcGVydHlfdmFsdWVz
X2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoInZhbHVlcyJf
cywgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxWYWx1ZXNTZXQ+KCk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgUGF5bG9hZFNldD4mIHNldFBheWxv
YWQoUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIFBheWxvYWRTZXQpLCBwcm9wZXJ0eV9wYXlsb2FkX2FscmVh
ZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgdmFs
dWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxQYXlsb2FkU2V0PigpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IEVycm9yU2V0PiYgc2V0RXJyb3IoUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gdmFsdWUpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBFcnJvclNldCksIHByb3BlcnR5
X2Vycm9yX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoImVy
cm9yIl9zLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEVycm9yU2V0Pigp
OwotICAgICAgICB9Ci0KLSAgICAgICAgUmVmPFBhcmFtZXRlckJ1bmRsZT4gcmVsZWFzZSgpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1Nl
dCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXpl
b2YoUGFyYW1ldGVyQnVuZGxlKSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0KSwgY2Fubm90X2Nhc3Qp
OwotCi0gICAgICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uUmVzdWx0ID0gbV9yZXN1bHQu
cmVsZWFzZU5vbk51bGwoKTsKLSAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gV1RGTW92ZSgqcmVp
bnRlcnByZXRfY2FzdDxSZWY8UGFyYW1ldGVyQnVuZGxlPio+KCZqc29uUmVzdWx0KSk7Ci0gICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIC8qCi0gICAg
ICogU3ludGhldGljIGNvbnN0cnVjdG9yOgotICAgICAqIFJlZjxQYXJhbWV0ZXJCdW5kbGU+IHJl
c3VsdCA9IFBhcmFtZXRlckJ1bmRsZTo6Y3JlYXRlKCkKLSAgICAgKiAgICAgLnNldERpcmVjdGlv
bmFsaXR5KC4uLikKLSAgICAgKiAgICAgLnNldEJ1dHRvbnMoLi4uKQotICAgICAqICAgICAuc2V0
Q29sdW1uTmFtZXMoLi4uKQotICAgICAqICAgICAuc2V0Tm90ZXMoLi4uKQotICAgICAqICAgICAu
c2V0VGltZXN0YW1wKC4uLikKLSAgICAgKiAgICAgLnNldFZhbHVlcyguLi4pCi0gICAgICogICAg
IC5zZXRQYXlsb2FkKC4uLikKLSAgICAgKiAgICAgLnNldEVycm9yKC4uLikKLSAgICAgKiAgICAg
LnJlbGVhc2UoKTsKLSAgICAgKi8KLSAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3Jl
YXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpKTsKLSAgICB9Ci19OwotCi19IC8vIFRlc3QKLQotCi0KLW5hbWVzcGFj
ZSBUZXN0SGVscGVycyB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFByb3RvY29sRW51bVR5cGU+Ci1P
cHRpb25hbDxQcm90b2NvbEVudW1UeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmcoY29uc3Qg
U3RyaW5nJik7Ci0KLS8vIEVudW1zIGluIHRoZSAnRGF0YWJhc2UnIERvbWFpbgotdGVtcGxhdGU8
PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPiBw
YXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1v
dXNlQnV0dG9uPihjb25zdCBTdHJpbmcmKTsKLXRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9u
YWxpdHk+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5Pihjb25zdCBTdHJp
bmcmKTsKLXRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNl
OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5PiBwYXJzZUVudW1WYWx1ZUZyb21TdHJp
bmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0
aW9uYWxpdHk+KGNvbnN0IFN0cmluZyYpOwotCi0vLyBFbnVtcyBpbiB0aGUgJ1Rlc3QnIERvbWFp
bgotdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UGFyYW1l
dGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+KGNv
bnN0IFN0cmluZyYpOwotCi19IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwotCi19IC8vIG5hbWVz
cGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotbmFtZXNwYWNlIFdU
RiB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKLQotLy8gSGFz
aCBkZWNsYXJhdGlvbnMgaW4gdGhlICdEYXRhYmFzZScgRG9tYWluCi10ZW1wbGF0ZTw+Ci1zdHJ1
Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9u
PiB7Ci0gICAgdHlwZWRlZiBJbnRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpN
b3VzZUJ1dHRvbj4gSGFzaDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgotIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9i
amVjdHMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJh
dGlvbi1vYmplY3QtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmpl
Y3RzLmgiCi0KLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1uYW1lc3BhY2UgUHJvdG9jb2wg
ewotCi1uYW1lc3BhY2UgVGVzdEhlbHBlcnMgewotCi1zdGF0aWMgY29uc3QgY2hhciogY29uc3Qg
ZW51bV9jb25zdGFudF92YWx1ZXNbXSA9IHsKLSAgICAiTm9uZSIsCi0gICAgIkxlZnQiLAotICAg
ICJNaWRkbGUiLAotICAgICJSaWdodCIsCi0gICAgIkxUUiIsCi0gICAgIlJUTCIsCi19OwotCi1T
dHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsKLSAgICByZXR1cm4gZW51bV9j
b25zdGFudF92YWx1ZXNbY29kZV07Ci19Ci0KLS8vIEVudW1zIGluIHRoZSAnRGF0YWJhc2UnIERv
bWFpbgotdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6
Ok1vdXNlQnV0dG9uPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQot
ewotICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsKLSAgICAgICAg
KHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b246Ok5vbmUs
Ci0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0
dG9uOjpMZWZ0LAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNl
OjpNb3VzZUJ1dHRvbjo6TWlkZGxlLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbjo6UmlnaHQsCi0gICAgfTsKLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IDQ7ICsraSkKLSAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1f
Y29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAgICAgICAgIHJldHVybiAo
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uKWNvbnN0YW50VmFsdWVz
W2ldOwotCi0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotdGVtcGxhdGU8PgotT3B0aW9u
YWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok9wdGlvbmFsUGFyYW1ldGVyQnVuZGxl
OjpEaXJlY3Rpb25hbGl0eT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+
KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCi17Ci0gICAgc3RhdGljIGNvbnN0IHNpemVf
dCBjb25zdGFudFZhbHVlc1tdID0gewotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRhdGFiYXNlOjpPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk6OkxU
UiwKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6T3B0aW9u
YWxQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5OjpSVEwsCi0gICAgfTsKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IDI7ICsraSkKLSAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09
IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAgICAgICAgIHJl
dHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok9wdGlvbmFsUGFyYW1ldGVyQnVu
ZGxlOjpEaXJlY3Rpb25hbGl0eSljb25zdGFudFZhbHVlc1tpXTsKLQotICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7Ci19Ci0KLXRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5PiBwYXJzZUVudW1WYWx1
ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlBhcmFtZXRlckJ1bmRs
ZTo6RGlyZWN0aW9uYWxpdHk+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCi17Ci0gICAg
c3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0gewotICAgICAgICAoc2l6ZV90
KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlv
bmFsaXR5OjpMVFIsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk6OlJUTCwKLSAgICB9OwotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgMjsgKytpKQotICAgICAgICBpZiAocHJvdG9jb2xTdHJpbmcg
PT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNbaV1dKQotICAgICAgICAgICAg
cmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UGFyYW1ldGVyQnVuZGxlOjpE
aXJlY3Rpb25hbGl0eSljb25zdGFudFZhbHVlc1tpXTsKLQotICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7Ci19Ci0KLQotLy8gRW51bXMgaW4gdGhlICdUZXN0JyBEb21haW4KLXRlbXBsYXRlPD4KLU9w
dGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0
aW9uYWxpdHk+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpU
ZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5Pihjb25zdCBTdHJpbmcmIHByb3Rv
Y29sU3RyaW5nKQotewotICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9
IHsKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpQYXJhbWV0ZXJC
dW5kbGU6OkRpcmVjdGlvbmFsaXR5OjpMVFIsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQ
cm90b2NvbDo6VGVzdDo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eTo6UlRMLAotICAg
IH07Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAyOyArK2kpCi0gICAgICAgIGlmIChwcm90
b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCi0g
ICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlBhcmFtZXRlckJ1
bmRsZTo6RGlyZWN0aW9uYWxpdHkpY29uc3RhbnRWYWx1ZXNbaV07Ci0KLSAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwotfQotCi0KLX0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCi0KLQotCi19IC8v
IG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5Q
dHIuaD4KLQotCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLX0gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5o
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10
eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2lt
cG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMu
aCIKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW5jbHVkZSAiVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLQot
bmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9U
ZXN0UHJvdG9jb2wuaD4KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkp
Ci1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAotQGVuZAot
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24uaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNp
bXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotI2ltcG9ydCA8SmF2YVNj
cmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KLSNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLQotdXNpbmcg
bmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZp
Z3VyYXRpb24KLXsKLSAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9s
bGVyOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJs
ZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGlu
aXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29u
dHJvbGxlcik7Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxm
OwotfQotCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLUBl
bmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVz
dFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zLmgiCi0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5z
cGVjdG9yOwotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5t
bQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9G
b3VuZGF0aW9uLmg+Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmpl
Y3QuaD4KLQotCi1AY2xhc3MgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcjsKLUBjbGFzcyBUZXN0
UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOwotQGNsYXNzIFRlc3RQcm90
b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlOwotQGNsYXNzIFRlc3RQcm90b2NvbERhdGFiYXNl
T2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0czsKLUBjbGFzcyBUZXN0UHJvdG9jb2xEYXRh
YmFzZUR1bW15T2JqZWN0OwotQGNsYXNzIFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGU7
Ci0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbFBsYXRmb3JtKSB7Ci0g
ICAgVGVzdFByb3RvY29sUGxhdGZvcm1BbGwsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5l
cmljLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TLAotICAgIFRlc3RQcm90b2NvbFBsYXRm
b3JtTWFjT1MsCi19OwotCi0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2Nv
bERhdGFiYXNlTW91c2VCdXR0b24pIHsKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0
dG9uTm9uZSwKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9uTGVmdCwKLSAgICBU
ZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9uTWlkZGxlLAotICAgIFRlc3RQcm90b2NvbERh
dGFiYXNlTW91c2VCdXR0b25SaWdodCwKLX07Ci0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIs
IFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0
eSkgewotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGVEaXJl
Y3Rpb25hbGl0eUxUUiwKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVy
QnVuZGxlRGlyZWN0aW9uYWxpdHlSVEwsCi19OwotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2Vy
LCBUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5KSB7Ci0g
ICAgVGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eUxUUiwK
LSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5UlRM
LAotfTsKLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sVGVzdFBhcmFt
ZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5KSB7Ci0gICAgVGVzdFByb3RvY29sVGVzdFBhcmFtZXRl
ckJ1bmRsZURpcmVjdGlvbmFsaXR5TFRSLAotICAgIFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJC
dW5kbGVEaXJlY3Rpb25hbGl0eVJUTCwKLX07Ci0KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0
eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgOiBS
V0lQcm90b2NvbEpTT05PYmplY3QKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5T
RGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkOwotLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7
Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29k
ZTooaW50KWNvZGU7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkg
TlNTdHJpbmcgKm1lc3NhZ2U7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywg
YXNzaWduKSBpbnQgY29kZTsKLUBlbmQKLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRl
ZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0
ZXJCdW5kbGUgOiBSV0lQcm90b2NvbEpTT05PYmplY3QKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0
aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkOwotLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAq
KWpzb25PYmplY3Q7Ci0vKiBvcHRpb25hbCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkg
TlNBcnJheS8qPE5TU3RyaW5nPiovICpjb2x1bW5OYW1lczsKLS8qIG9wdGlvbmFsICovIEBwcm9w
ZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmJ1dHRvbnM7Ci0v
KiBvcHRpb25hbCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBUZXN0UHJvdG9jb2xE
YXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHkgZGlyZWN0aW9uYWxp
dHk7Ci0vKiBvcHRpb25hbCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcg
Km5vdGVzOwotLyogb3B0aW9uYWwgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgZG91
YmxlIHRpbWVzdGFtcDsKLS8qIG9wdGlvbmFsICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRh
aW4pIFJXSVByb3RvY29sSlNPTk9iamVjdCAqdmFsdWVzOwotLyogb3B0aW9uYWwgKi8gQHByb3Bl
cnR5IChub25hdG9taWMsIHJldGFpbikgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkOwot
Lyogb3B0aW9uYWwgKi8gQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgVGVzdFByb3RvY29s
RGF0YWJhc2VFcnJvciAqZXJyb3I7Ci0vKiBvcHRpb25hbCAqLyBAcHJvcGVydHkgKG5vbmF0b21p
YywgY29weSkgTlNBcnJheS8qPFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I+Ki8gKmVycm9yTGlz
dDsKLUBlbmQKLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50
ZXJmYWNlIFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlIDogUldJUHJvdG9jb2xK
U09OT2JqZWN0Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8
TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3Rv
Y29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OwotLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoQ29sdW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWNvbHVt
bk5hbWVzIGJ1dHRvbnM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWJ1dHRvbnMgZGlyZWN0aW9u
YWxpdHk6KFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHkp
ZGlyZWN0aW9uYWxpdHkgbm90ZXM6KE5TU3RyaW5nICopbm90ZXMgdGltZXN0YW1wOihkb3VibGUp
dGltZXN0YW1wIHZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopdmFsdWVzIHBheWxvYWQ6
KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQgZXJyb3I6KFRlc3RQcm90b2NvbERhdGFi
YXNlRXJyb3IgKillcnJvciBlcnJvckxpc3Q6KE5TQXJyYXkvKjxUZXN0UHJvdG9jb2xEYXRhYmFz
ZUVycm9yPiovICopZXJyb3JMaXN0OwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9t
aWMsIGNvcHkpIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqY29sdW1uTmFtZXM7Ci0vKiByZXF1aXJl
ZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNBcnJheS8qPE5TU3RyaW5nPiovICpi
dXR0b25zOwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgVGVz
dFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSBkaXJlY3Rpb25h
bGl0eTsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmlu
ZyAqbm90ZXM7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBk
b3VibGUgdGltZXN0YW1wOwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIHJl
dGFpbikgUldJUHJvdG9jb2xKU09OT2JqZWN0ICp2YWx1ZXM7Ci0vKiByZXF1aXJlZCAqLyBAcHJv
cGVydHkgKG5vbmF0b21pYywgcmV0YWluKSBSV0lQcm90b2NvbEpTT05PYmplY3QgKnBheWxvYWQ7
Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluKSBUZXN0UHJvdG9j
b2xEYXRhYmFzZUVycm9yICplcnJvcjsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRv
bWljLCBjb3B5KSBOU0FycmF5Lyo8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4qLyAqZXJyb3JM
aXN0OwotQGVuZAotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBp
bnRlcmZhY2UgVGVzdFByb3RvY29sRGF0YWJhc2VPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxp
Y3RzIDogUldJUHJvdG9jb2xKU09OT2JqZWN0Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXls
b2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKLS0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29u
T2JqZWN0OwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSW50ZWdlcjooTlNTdHJpbmcgKilpbnRl
Z2VyIGFycmF5OihOU1N0cmluZyAqKWFycmF5IHN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcgdmFs
dWU6KE5TU3RyaW5nICopdmFsdWUgb2JqZWN0OihOU1N0cmluZyAqKW9iamVjdDsKLS8qIHJlcXVp
cmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqaW50ZWdlcjsKLS8q
IHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqYXJyYXk7
Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKnN0
cmluZzsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmlu
ZyAqdmFsdWU7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNT
dHJpbmcgKm9iamVjdDsKLUBlbmQKLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1
bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbERhdGFiYXNlRHVtbXlPYmplY3QgOiBSV0lQ
cm90b2NvbEpTT05PYmplY3QKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGlj
dGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkOwotLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7Ci1A
ZW5kCi0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFj
ZSBUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlIDogUldJUHJvdG9jb2xKU09OT2JqZWN0
Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcg
KiwgaWQ+ICopcGF5bG9hZDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0
OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OwotLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoRGlyZWN0aW9uYWxpdHk6KFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJl
Y3Rpb25hbGl0eSlkaXJlY3Rpb25hbGl0eSBidXR0b25zOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8g
KilidXR0b25zIGNvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1l
cyBub3RlczooTlNTdHJpbmcgKilub3RlcyB0aW1lc3RhbXA6KGRvdWJsZSl0aW1lc3RhbXAgdmFs
dWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKil2YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xK
U09OT2JqZWN0ICopcGF5bG9hZCBlcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKWVy
cm9yOwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgVGVzdFBy
b3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5IGRpcmVjdGlvbmFsaXR5Owot
LyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TQXJyYXkvKjxOU1N0
cmluZz4qLyAqYnV0dG9uczsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBj
b3B5KSBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmNvbHVtbk5hbWVzOwotLyogcmVxdWlyZWQgKi8g
QHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICpub3RlczsKLS8qIHJlcXVpcmVk
ICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGRvdWJsZSB0aW1lc3RhbXA7Ci0vKiBy
ZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluKSBSV0lQcm90b2NvbEpTT05P
YmplY3QgKnZhbHVlczsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRh
aW4pIFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5bG9hZDsKLS8qIHJlcXVpcmVkICovIEBwcm9w
ZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKmVycm9y
OwotQGVuZAotCi0KLQotCi0KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVp
bGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5o
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKLSNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgot
I2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xJbnRlcm5hbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRp
b24tb2JqZWN0LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9S
V0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KLU9wdGlvbmFsPE9iakNFbnVtVHlwZT4g
ZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOwotCi1pbmxpbmUgU3RyaW5n
IHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sUGxhdGZvcm0gdmFsdWUpCi17Ci0gICAgc3dp
dGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDoKLSAgICAgICAg
cmV0dXJuICJhbGwiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM6Ci0g
ICAgICAgIHJldHVybiAiZ2VuZXJpYyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3Jt
SU9TOgotICAgICAgICByZXR1cm4gImlvcyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRm
b3JtTWFjT1M6Ci0gICAgICAgIHJldHVybiAibWFjb3MiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0
ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sUGxhdGZvcm0+IGZyb21Qcm90b2NvbFN0
cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiYWxsIikKLSAg
ICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOwotICAgIGlmICh2YWx1ZSA9PSAi
Z2VuZXJpYyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM7Ci0g
ICAgaWYgKHZhbHVlID09ICJpb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZv
cm1JT1M7Ci0gICAgaWYgKHZhbHVlID09ICJtYWNvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJv
dG9jb2xQbGF0Zm9ybU1hY09TOwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLQotaW5s
aW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VCdXR0
b24gdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xE
YXRhYmFzZU1vdXNlQnV0dG9uTm9uZToKLSAgICAgICAgcmV0dXJuICJOb25lIl9zOwotICAgIGNh
c2UgVGVzdFByb3RvY29sRGF0YWJhc2VNb3VzZUJ1dHRvbkxlZnQ6Ci0gICAgICAgIHJldHVybiAi
TGVmdCJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VCdXR0b25NaWRkbGU6
Ci0gICAgICAgIHJldHVybiAiTWlkZGxlIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJh
c2VNb3VzZUJ1dHRvblJpZ2h0OgotICAgICAgICByZXR1cm4gIlJpZ2h0Il9zOwotICAgIH0KLX0K
LQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VC
dXR0b24+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlm
ICh2YWx1ZSA9PSAiTm9uZSIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZU1v
dXNlQnV0dG9uTm9uZTsKLSAgICBpZiAodmFsdWUgPT0gIkxlZnQiKQotICAgICAgICByZXR1cm4g
VGVzdFByb3RvY29sRGF0YWJhc2VNb3VzZUJ1dHRvbkxlZnQ7Ci0gICAgaWYgKHZhbHVlID09ICJN
aWRkbGUiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VNb3VzZUJ1dHRvbk1p
ZGRsZTsKLSAgICBpZiAodmFsdWUgPT0gIlJpZ2h0IikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90
b2NvbERhdGFiYXNlTW91c2VCdXR0b25SaWdodDsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0Owot
fQotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sRGF0YWJhc2VP
cHRpb25hbFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5IHZhbHVlKQotewotICAgIHN3aXRj
aCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFtZXRl
ckJ1bmRsZURpcmVjdGlvbmFsaXR5TFRSOgotICAgICAgICByZXR1cm4gIkxUUiJfczsKLSAgICBj
YXNlIFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25h
bGl0eVJUTDoKLSAgICAgICAgcmV0dXJuICJSVEwiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+
Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1
bmRsZURpcmVjdGlvbmFsaXR5PiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1
ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gIkxUUiIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9j
b2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHlMVFI7Ci0gICAg
aWYgKHZhbHVlID09ICJSVEwiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VP
cHRpb25hbFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5UlRMOwotICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7Ci19Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9j
b2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5IHZhbHVlKQotewotICAgIHN3
aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5k
bGVEaXJlY3Rpb25hbGl0eUxUUjoKLSAgICAgICAgcmV0dXJuICJMVFIiX3M7Ci0gICAgY2FzZSBU
ZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5UlRMOgotICAg
ICAgICByZXR1cm4gIlJUTCJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRp
b25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5PiBm
cm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUg
PT0gIkxUUiIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1
bmRsZURpcmVjdGlvbmFsaXR5TFRSOwotICAgIGlmICh2YWx1ZSA9PSAiUlRMIikKLSAgICAgICAg
cmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHlS
VEw7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotCi1pbmxpbmUgU3RyaW5nIHRvUHJv
dG9jb2xTdHJpbmcoVGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5
IHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sVGVz
dFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5TFRSOgotICAgICAgICByZXR1cm4gIkxUUiJf
czsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0
eVJUTDoKLSAgICAgICAgcmV0dXJuICJSVEwiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1p
bmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFs
aXR5PiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAo
dmFsdWUgPT0gIkxUUiIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVy
QnVuZGxlRGlyZWN0aW9uYWxpdHlMVFI7Ci0gICAgaWYgKHZhbHVlID09ICJSVEwiKQotICAgICAg
ICByZXR1cm4gVGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5UlRM
OwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2lt
cG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JX
SVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3Rv
cjsKLQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKERhdGFiYXNlRG9t
YWluKQotCi0rICh2b2lkKV9wYXJzZUVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoq
KW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotKyAodm9pZClfcGFyc2VFcnJvckxp
c3Q6KE5TQXJyYXkvKjxUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yPiovICoqKW91dFZhbHVlIGZy
b21QYXlsb2FkOihpZClwYXlsb2FkOwotKyAodm9pZClfcGFyc2VNb3VzZUJ1dHRvbjooTlNOdW1i
ZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZU9w
dGlvbmFsUGFyYW1ldGVyQnVuZGxlOihUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1l
dGVyQnVuZGxlICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotKyAodm9pZClf
cGFyc2VQYXJhbWV0ZXJCdW5kbGU6KFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxl
ICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotKyAodm9pZClfcGFyc2VPYmpl
Y3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzOihUZXN0UHJvdG9jb2xEYXRhYmFzZU9iamVjdFdp
dGhQcm9wZXJ0eU5hbWVDb25mbGljdHMgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxv
YWQ7Ci0rICh2b2lkKV9wYXJzZUR1bW15T2JqZWN0OihUZXN0UHJvdG9jb2xEYXRhYmFzZUR1bW15
T2JqZWN0ICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotCi1AZW5kCi1AaW50
ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoVGVzdERvbWFpbikKLQotKyAodm9p
ZClfcGFyc2VQYXJhbWV0ZXJCdW5kbGU6KFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGUg
Kiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0KLUBlbmQKLQotQGltcGxlbWVu
dGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoRGF0YWJhc2VEb21haW4pCi0KLSsg
KHZvaWQpX3BhcnNlRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKiopb3V0VmFsdWUg
ZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9U
WVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSBbW1Rl
c3RQcm90b2NvbERhdGFiYXNlRXJyb3IgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsK
LX0KLQotKyAodm9pZClfcGFyc2VFcnJvckxpc3Q6KE5TQXJyYXkvKjxUZXN0UHJvdG9jb2xEYXRh
YmFzZUVycm9yPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNBcnJheS8qPFRlc3RQcm90
b2NvbERhdGFiYXNlRXJyb3I+Ki8gY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSAoTlNBcnJheS8q
PFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I+Ki8gKilwYXlsb2FkOwotfQotCi0rICh2b2lkKV9w
YXJzZU1vdXNlQnV0dG9uOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5
bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TU3Ry
aW5nIGNsYXNzXSk7Ci0gICAgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VNb3VzZUJ1dHRv
bj4gcmVzdWx0ID0gSW5zcGVjdG9yOjpmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sRGF0
YWJhc2VNb3VzZUJ1dHRvbj4ocGF5bG9hZCk7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURf
RU5VTV9WQUxVRShyZXN1bHQsIEAiTW91c2VCdXR0b24iKTsKLSAgICAqb3V0VmFsdWUgPSBAKHJl
c3VsdC52YWx1ZSgpKTsKLX0KLQotKyAodm9pZClfcGFyc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRs
ZTooVGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZSAqKilvdXRWYWx1
ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFE
X1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IFtb
VGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZSBhbGxvY10gaW5pdFdp
dGhQYXlsb2FkOnBheWxvYWRdOwotfQotCi0rICh2b2lkKV9wYXJzZVBhcmFtZXRlckJ1bmRsZToo
VGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGUgKiopb3V0VmFsdWUgZnJvbVBheWxv
YWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxv
YWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2Nv
bERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07
Ci19Ci0KLSsgKHZvaWQpX3BhcnNlT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0czooVGVz
dFByb3RvY29sRGF0YWJhc2VPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzICoqKW91dFZh
bHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9C
QURfVFlQRShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0g
W1tUZXN0UHJvdG9jb2xEYXRhYmFzZU9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHMgYWxs
b2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKLX0KLQotKyAodm9pZClfcGFyc2VEdW1teU9i
amVjdDooVGVzdFByb3RvY29sRGF0YWJhc2VEdW1teU9iamVjdCAqKilvdXRWYWx1ZSBmcm9tUGF5
bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5
bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IFtbVGVzdFByb3Rv
Y29sRGF0YWJhc2VEdW1teU9iamVjdCBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOwot
fQotCi1AZW5kCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChU
ZXN0RG9tYWluKQotCi0rICh2b2lkKV9wYXJzZVBhcmFtZXRlckJ1bmRsZTooVGVzdFByb3RvY29s
VGVzdFBhcmFtZXRlckJ1bmRsZSAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAot
ewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFy
eSBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1
bmRsZSBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOwotfQotCi1AZW5kCi0KLQotIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgi
Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8V2Vi
SW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLSNpbXBvcnQgPHd0Zi9B
c3NlcnRpb25zLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yOwotCi0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xEYXRhYmFzZUVy
cm9yCi0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9u
YXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVy
IGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
UkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAIm1lc3NhZ2UiXSwgQCJtZXNzYWdlIik7Ci0gICAg
c2VsZi5tZXNzYWdlID0gcGF5bG9hZFtAIm1lc3NhZ2UiXTsKLQotICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImNvZGUiXSwgQCJjb2RlIik7Ci0gICAg
c2VsZi5jb2RlID0gW3BheWxvYWRbQCJjb2RlIl0gaW50ZWdlclZhbHVlXTsKLQotICAgIHJldHVy
biBzZWxmOwotfQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVBy
b3RvY29sSlNPTk9iamVjdCAqKW9iamVjdAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5p
dFdpdGhKU09OT2JqZWN0OltvYmplY3QgdG9KU09OT2JqZWN0XS5nZXQoKV0pKQotICAgICAgICBy
ZXR1cm4gbmlsOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0
V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBjb2RlOihpbnQpY29kZQotewotICAgIGlm
ICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShtZXNzYWdlLCBAIm1lc3NhZ2UiKTsK
LQotICAgIHNlbGYubWVzc2FnZSA9IG1lc3NhZ2U7Ci0gICAgc2VsZi5jb2RlID0gY29kZTsKLQot
ICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKXNldE1lc3NhZ2U6KE5TU3RyaW5nICopbWVz
c2FnZQotewotICAgIFtzdXBlciBzZXRTdHJpbmc6bWVzc2FnZSBmb3JLZXk6QCJtZXNzYWdlIl07
Ci19Ci0KLS0gKE5TU3RyaW5nICopbWVzc2FnZQotewotICAgIHJldHVybiBbc3VwZXIgc3RyaW5n
Rm9yS2V5OkAibWVzc2FnZSJdOwotfQotCi0tICh2b2lkKXNldENvZGU6KGludCljb2RlCi17Ci0g
ICAgW3N1cGVyIHNldEludGVnZXI6Y29kZSBmb3JLZXk6QCJjb2RlIl07Ci19Ci0KLS0gKGludClj
b2RlCi17Ci0gICAgcmV0dXJuIFtzdXBlciBpbnRlZ2VyRm9yS2V5OkAiY29kZSJdOwotfQotCi1A
ZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1l
dGVyQnVuZGxlCi0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNE
aWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQKLXsKLSAgICBpZiAoIShzZWxmID0g
W3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIHNlbGYuY29sdW1uTmFt
ZXMgPSBwYXlsb2FkW0AiY29sdW1uTmFtZXMiXTsKLQotICAgIHNlbGYuYnV0dG9ucyA9IHBheWxv
YWRbQCJidXR0b25zIl07Ci0KLSAgICBPcHRpb25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlv
bmFsUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHk+IGRpcmVjdGlvbmFsaXR5ID0gZnJvbVBy
b3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGVE
aXJlY3Rpb25hbGl0eT4ocGF5bG9hZFtAImRpcmVjdGlvbmFsaXR5Il0pOwotICAgIGlmIChkaXJl
Y3Rpb25hbGl0eSkKLSAgICAgICAgc2VsZi5kaXJlY3Rpb25hbGl0eSA9IGRpcmVjdGlvbmFsaXR5
LnZhbHVlKCk7Ci0KLSAgICBzZWxmLm5vdGVzID0gcGF5bG9hZFtAIm5vdGVzIl07Ci0KLSAgICBz
ZWxmLnRpbWVzdGFtcCA9IFtwYXlsb2FkW0AidGltZXN0YW1wIl0gZG91YmxlVmFsdWVdOwotCi0g
ICAgc2VsZi52YWx1ZXMgPSBwYXlsb2FkW0AidmFsdWVzIl07Ci0KLSAgICBzZWxmLnBheWxvYWQg
PSBwYXlsb2FkW0AicGF5bG9hZCJdOwotCi0gICAgc2VsZi5lcnJvciA9IFtbVGVzdFByb3RvY29s
RGF0YWJhc2VFcnJvciBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRbQCJlcnJvciJdXTsK
LQotICAgIHNlbGYuZXJyb3JMaXN0ID0gb2JqY0FycmF5RnJvbVBheWxvYWQ8VGVzdFByb3RvY29s
RGF0YWJhc2VFcnJvcj4ocGF5bG9hZFtAImVycm9yTGlzdCJdKTsKLQotICAgIHJldHVybiBzZWxm
OwotfQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29s
SlNPTk9iamVjdCAqKW9iamVjdAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhK
U09OT2JqZWN0OltvYmplY3QgdG9KU09OT2JqZWN0XS5nZXQoKV0pKQotICAgICAgICByZXR1cm4g
bmlsOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpc2V0Q29sdW1uTmFtZXM6KE5T
QXJyYXkvKjxOU1N0cmluZz4qLyAqKWNvbHVtbk5hbWVzCi17Ci0gICAgW3N1cGVyIHNldEpTT05B
cnJheTp0b0pTT05TdHJpbmdBcnJheShjb2x1bW5OYW1lcykgZm9yS2V5OkAiY29sdW1uTmFtZXMi
XTsKLX0KLQotLSAoTlNBcnJheS8qPE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMKLXsKLSAgICBy
ZXR1cm4gdG9PYmpDU3RyaW5nQXJyYXkoW3N1cGVyIEpTT05BcnJheUZvcktleTpAImNvbHVtbk5h
bWVzIl0pOwotfQotCi0tICh2b2lkKXNldEJ1dHRvbnM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAq
KWJ1dHRvbnMKLXsKLSAgICBbc3VwZXIgc2V0SlNPTkFycmF5OnRvSlNPTlN0cmluZ0FycmF5KGJ1
dHRvbnMpIGZvcktleTpAImJ1dHRvbnMiXTsKLX0KLQotLSAoTlNBcnJheS8qPE5TU3RyaW5nPiov
ICopYnV0dG9ucwotewotICAgIHJldHVybiB0b09iakNTdHJpbmdBcnJheShbc3VwZXIgSlNPTkFy
cmF5Rm9yS2V5OkAiYnV0dG9ucyJdKTsKLX0KLQotLSAodm9pZClzZXREaXJlY3Rpb25hbGl0eToo
VGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5
KWRpcmVjdGlvbmFsaXR5Ci17Ci0gICAgW3N1cGVyIHNldFN0cmluZzp0b1Byb3RvY29sU3RyaW5n
KGRpcmVjdGlvbmFsaXR5KSBmb3JLZXk6QCJkaXJlY3Rpb25hbGl0eSJdOwotfQotCi0tIChUZXN0
UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHkpZGly
ZWN0aW9uYWxpdHkKLXsKLSAgICByZXR1cm4gZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2Nv
bERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eT4oW3N1cGVyIHN0
cmluZ0ZvcktleTpAImRpcmVjdGlvbmFsaXR5Il0pLnZhbHVlKCk7Ci19Ci0KLS0gKHZvaWQpc2V0
Tm90ZXM6KE5TU3RyaW5nICopbm90ZXMKLXsKLSAgICBbc3VwZXIgc2V0U3RyaW5nOm5vdGVzIGZv
cktleTpAIm5vdGVzIl07Ci19Ci0KLS0gKE5TU3RyaW5nICopbm90ZXMKLXsKLSAgICByZXR1cm4g
W3N1cGVyIHN0cmluZ0ZvcktleTpAIm5vdGVzIl07Ci19Ci0KLS0gKHZvaWQpc2V0VGltZXN0YW1w
Oihkb3VibGUpdGltZXN0YW1wCi17Ci0gICAgW3N1cGVyIHNldERvdWJsZTp0aW1lc3RhbXAgZm9y
S2V5OkAidGltZXN0YW1wIl07Ci19Ci0KLS0gKGRvdWJsZSl0aW1lc3RhbXAKLXsKLSAgICByZXR1
cm4gW3N1cGVyIGRvdWJsZUZvcktleTpAInRpbWVzdGFtcCJdOwotfQotCi0tICh2b2lkKXNldFZh
bHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopdmFsdWVzCi17Ci0gICAgW3N1cGVyIHNldE9i
amVjdDp2YWx1ZXMgZm9yS2V5OkAidmFsdWVzIl07Ci19Ci0KLS0gKFJXSVByb3RvY29sSlNPTk9i
amVjdCAqKXZhbHVlcwotewotICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb2JqZWN0ID0gW3N1
cGVyIG9iamVjdEZvcktleTpAInZhbHVlcyJdOwotICAgIGlmICghb2JqZWN0KQotICAgICAgICBy
ZXR1cm4gbmlsOwotICAgIHJldHVybiBbW1JXSVByb3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5p
dFdpdGhKU09OT2JqZWN0Oltbc3VwZXIgb2JqZWN0Rm9yS2V5OkAidmFsdWVzIl0gdG9KU09OT2Jq
ZWN0XS5nZXQoKV07Ci19Ci0KLS0gKHZvaWQpc2V0UGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2Jq
ZWN0ICopcGF5bG9hZAotewotICAgIFtzdXBlciBzZXRPYmplY3Q6cGF5bG9hZCBmb3JLZXk6QCJw
YXlsb2FkIl07Ci19Ci0KLS0gKFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQKLXsKLSAg
ICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9iamVjdCA9IFtzdXBlciBvYmplY3RGb3JLZXk6QCJw
YXlsb2FkIl07Ci0gICAgaWYgKCFvYmplY3QpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgcmV0
dXJuIFtbUldJUHJvdG9jb2xKU09OT2JqZWN0IGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6W1tz
dXBlciBvYmplY3RGb3JLZXk6QCJwYXlsb2FkIl0gdG9KU09OT2JqZWN0XS5nZXQoKV07Ci19Ci0K
LS0gKHZvaWQpc2V0RXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKillcnJvcgotewot
ICAgIFtzdXBlciBzZXRPYmplY3Q6ZXJyb3IgZm9yS2V5OkAiZXJyb3IiXTsKLX0KLQotLSAoVGVz
dFByb3RvY29sRGF0YWJhc2VFcnJvciAqKWVycm9yCi17Ci0gICAgUldJUHJvdG9jb2xKU09OT2Jq
ZWN0ICpvYmplY3QgPSBbc3VwZXIgb2JqZWN0Rm9yS2V5OkAiZXJyb3IiXTsKLSAgICBpZiAoIW9i
amVjdCkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4gW1tUZXN0UHJvdG9jb2xEYXRh
YmFzZUVycm9yIGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6W1tzdXBlciBvYmplY3RGb3JLZXk6
QCJlcnJvciJdIHRvSlNPTk9iamVjdF0uZ2V0KCldOwotfQotCi0tICh2b2lkKXNldEVycm9yTGlz
dDooTlNBcnJheS8qPFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I+Ki8gKillcnJvckxpc3QKLXsK
LSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFX0lOX0FSUkFZKGVycm9yTGlzdCwgW1Rl
c3RQcm90b2NvbERhdGFiYXNlRXJyb3IgY2xhc3NdKTsKLSAgICBbc3VwZXIgc2V0SlNPTkFycmF5
OnRvSlNPTk9iamVjdEFycmF5KGVycm9yTGlzdCkgZm9yS2V5OkAiZXJyb3JMaXN0Il07Ci19Ci0K
LS0gKE5TQXJyYXkvKjxUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yPiovICopZXJyb3JMaXN0Ci17
Ci0gICAgcmV0dXJuIHRvT2JqQ0FycmF5PFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I+KFtzdXBl
ciBKU09OQXJyYXlGb3JLZXk6QCJlcnJvckxpc3QiXSk7Ci19Ci0KLUBlbmQKLQotQGltcGxlbWVu
dGF0aW9uIFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlCi0KLS0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlk
PiAqKXBheWxvYWQKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAg
cmV0dXJuIG5pbDsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFko
cGF5bG9hZFtAImNvbHVtbk5hbWVzIl0sIEAiY29sdW1uTmFtZXMiKTsKLSAgICBzZWxmLmNvbHVt
bk5hbWVzID0gcGF5bG9hZFtAImNvbHVtbk5hbWVzIl07Ci0KLSAgICBUSFJPV19FWENFUFRJT05f
Rk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJidXR0b25zIl0sIEAiYnV0dG9ucyIpOwot
ICAgIHNlbGYuYnV0dG9ucyA9IHBheWxvYWRbQCJidXR0b25zIl07Ci0KLSAgICBUSFJPV19FWENF
UFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJkaXJlY3Rpb25hbGl0eSJdLCBA
ImRpcmVjdGlvbmFsaXR5Iik7Ci0gICAgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VQYXJh
bWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eT4gZGlyZWN0aW9uYWxpdHkgPSBmcm9tUHJvdG9jb2xT
dHJpbmc8VGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eT4o
cGF5bG9hZFtAImRpcmVjdGlvbmFsaXR5Il0pOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFE
X0VOVU1fVkFMVUUoZGlyZWN0aW9uYWxpdHksIEAiZGlyZWN0aW9uYWxpdHkiKTsKLSAgICBzZWxm
LmRpcmVjdGlvbmFsaXR5ID0gZGlyZWN0aW9uYWxpdHkudmFsdWUoKTsKLQotICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAIm5vdGVzIl0sIEAibm90ZXMi
KTsKLSAgICBzZWxmLm5vdGVzID0gcGF5bG9hZFtAIm5vdGVzIl07Ci0KLSAgICBUSFJPV19FWENF
UFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJ0aW1lc3RhbXAiXSwgQCJ0aW1l
c3RhbXAiKTsKLSAgICBzZWxmLnRpbWVzdGFtcCA9IFtwYXlsb2FkW0AidGltZXN0YW1wIl0gZG91
YmxlVmFsdWVdOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShw
YXlsb2FkW0AidmFsdWVzIl0sIEAidmFsdWVzIik7Ci0gICAgc2VsZi52YWx1ZXMgPSBwYXlsb2Fk
W0AidmFsdWVzIl07Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZ
KHBheWxvYWRbQCJwYXlsb2FkIl0sIEAicGF5bG9hZCIpOwotICAgIHNlbGYucGF5bG9hZCA9IHBh
eWxvYWRbQCJwYXlsb2FkIl07Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BS
T1BFUlRZKHBheWxvYWRbQCJlcnJvciJdLCBAImVycm9yIik7Ci0gICAgc2VsZi5lcnJvciA9IFtb
VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRb
QCJlcnJvciJdXTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFko
cGF5bG9hZFtAImVycm9yTGlzdCJdLCBAImVycm9yTGlzdCIpOwotICAgIHNlbGYuZXJyb3JMaXN0
ID0gb2JqY0FycmF5RnJvbVBheWxvYWQ8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4ocGF5bG9h
ZFtAImVycm9yTGlzdCJdKTsKLQotICAgIHJldHVybiBzZWxmOwotfQotLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9iamVjdAot
ewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmplY3QgdG9K
U09OT2JqZWN0XS5nZXQoKV0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgcmV0dXJuIHNl
bGY7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbHVtbk5hbWVzOihOU0FycmF5Lyo8
TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcyBidXR0b25zOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8g
KilidXR0b25zIGRpcmVjdGlvbmFsaXR5OihUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1
bmRsZURpcmVjdGlvbmFsaXR5KWRpcmVjdGlvbmFsaXR5IG5vdGVzOihOU1N0cmluZyAqKW5vdGVz
IHRpbWVzdGFtcDooZG91YmxlKXRpbWVzdGFtcCB2YWx1ZXM6KFJXSVByb3RvY29sSlNPTk9iamVj
dCAqKXZhbHVlcyBwYXlsb2FkOihSV0lQcm90b2NvbEpTT05PYmplY3QgKilwYXlsb2FkIGVycm9y
OihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICopZXJyb3IgZXJyb3JMaXN0OihOU0FycmF5Lyo8
VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4qLyAqKWVycm9yTGlzdAotewotICAgIGlmICghKHNl
bGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShjb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIp
OwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkoYnV0dG9ucywgQCJi
dXR0b25zIik7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShub3Rl
cywgQCJub3RlcyIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFko
dmFsdWVzLCBAInZhbHVlcyIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJP
UEVSVFkocGF5bG9hZCwgQCJwYXlsb2FkIik7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFV
SVJFRF9QUk9QRVJUWShlcnJvciwgQCJlcnJvciIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
UkVRVUlSRURfUFJPUEVSVFkoZXJyb3JMaXN0LCBAImVycm9yTGlzdCIpOwotICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfQkFEX1RZUEVfSU5fQVJSQVkoZXJyb3JMaXN0LCBbVGVzdFByb3RvY29sRGF0
YWJhc2VFcnJvciBjbGFzc10pOwotCi0gICAgc2VsZi5jb2x1bW5OYW1lcyA9IGNvbHVtbk5hbWVz
OwotICAgIHNlbGYuYnV0dG9ucyA9IGJ1dHRvbnM7Ci0gICAgc2VsZi5kaXJlY3Rpb25hbGl0eSA9
IGRpcmVjdGlvbmFsaXR5OwotICAgIHNlbGYubm90ZXMgPSBub3RlczsKLSAgICBzZWxmLnRpbWVz
dGFtcCA9IHRpbWVzdGFtcDsKLSAgICBzZWxmLnZhbHVlcyA9IHZhbHVlczsKLSAgICBzZWxmLnBh
eWxvYWQgPSBwYXlsb2FkOwotICAgIHNlbGYuZXJyb3IgPSBlcnJvcjsKLSAgICBzZWxmLmVycm9y
TGlzdCA9IGVycm9yTGlzdDsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKXNldENv
bHVtbk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcwotewotICAgIFtz
dXBlciBzZXRKU09OQXJyYXk6dG9KU09OU3RyaW5nQXJyYXkoY29sdW1uTmFtZXMpIGZvcktleTpA
ImNvbHVtbk5hbWVzIl07Ci19Ci0KLS0gKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWNvbHVtbk5h
bWVzCi17Ci0gICAgcmV0dXJuIHRvT2JqQ1N0cmluZ0FycmF5KFtzdXBlciBKU09OQXJyYXlGb3JL
ZXk6QCJjb2x1bW5OYW1lcyJdKTsKLX0KLQotLSAodm9pZClzZXRCdXR0b25zOihOU0FycmF5Lyo8
TlNTdHJpbmc+Ki8gKilidXR0b25zCi17Ci0gICAgW3N1cGVyIHNldEpTT05BcnJheTp0b0pTT05T
dHJpbmdBcnJheShidXR0b25zKSBmb3JLZXk6QCJidXR0b25zIl07Ci19Ci0KLS0gKE5TQXJyYXkv
KjxOU1N0cmluZz4qLyAqKWJ1dHRvbnMKLXsKLSAgICByZXR1cm4gdG9PYmpDU3RyaW5nQXJyYXko
W3N1cGVyIEpTT05BcnJheUZvcktleTpAImJ1dHRvbnMiXSk7Ci19Ci0KLS0gKHZvaWQpc2V0RGly
ZWN0aW9uYWxpdHk6KFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9u
YWxpdHkpZGlyZWN0aW9uYWxpdHkKLXsKLSAgICBbc3VwZXIgc2V0U3RyaW5nOnRvUHJvdG9jb2xT
dHJpbmcoZGlyZWN0aW9uYWxpdHkpIGZvcktleTpAImRpcmVjdGlvbmFsaXR5Il07Ci19Ci0KLS0g
KFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHkpZGlyZWN0
aW9uYWxpdHkKLXsKLSAgICByZXR1cm4gZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERh
dGFiYXNlUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHk+KFtzdXBlciBzdHJpbmdGb3JLZXk6
QCJkaXJlY3Rpb25hbGl0eSJdKS52YWx1ZSgpOwotfQotCi0tICh2b2lkKXNldE5vdGVzOihOU1N0
cmluZyAqKW5vdGVzCi17Ci0gICAgW3N1cGVyIHNldFN0cmluZzpub3RlcyBmb3JLZXk6QCJub3Rl
cyJdOwotfQotCi0tIChOU1N0cmluZyAqKW5vdGVzCi17Ci0gICAgcmV0dXJuIFtzdXBlciBzdHJp
bmdGb3JLZXk6QCJub3RlcyJdOwotfQotCi0tICh2b2lkKXNldFRpbWVzdGFtcDooZG91YmxlKXRp
bWVzdGFtcAotewotICAgIFtzdXBlciBzZXREb3VibGU6dGltZXN0YW1wIGZvcktleTpAInRpbWVz
dGFtcCJdOwotfQotCi0tIChkb3VibGUpdGltZXN0YW1wCi17Ci0gICAgcmV0dXJuIFtzdXBlciBk
b3VibGVGb3JLZXk6QCJ0aW1lc3RhbXAiXTsKLX0KLQotLSAodm9pZClzZXRWYWx1ZXM6KFJXSVBy
b3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcwotewotICAgIFtzdXBlciBzZXRPYmplY3Q6dmFsdWVz
IGZvcktleTpAInZhbHVlcyJdOwotfQotCi0tIChSV0lQcm90b2NvbEpTT05PYmplY3QgKil2YWx1
ZXMKLXsKLSAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9iamVjdCA9IFtzdXBlciBvYmplY3RG
b3JLZXk6QCJ2YWx1ZXMiXTsKLSAgICBpZiAoIW9iamVjdCkKLSAgICAgICAgcmV0dXJuIG5pbDsK
LSAgICByZXR1cm4gW1tSV0lQcm90b2NvbEpTT05PYmplY3QgYWxsb2NdIGluaXRXaXRoSlNPTk9i
amVjdDpbW3N1cGVyIG9iamVjdEZvcktleTpAInZhbHVlcyJdIHRvSlNPTk9iamVjdF0uZ2V0KCld
OwotfQotCi0tICh2b2lkKXNldFBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxv
YWQKLXsKLSAgICBbc3VwZXIgc2V0T2JqZWN0OnBheWxvYWQgZm9yS2V5OkAicGF5bG9hZCJdOwot
fQotCi0tIChSV0lQcm90b2NvbEpTT05PYmplY3QgKilwYXlsb2FkCi17Ci0gICAgUldJUHJvdG9j
b2xKU09OT2JqZWN0ICpvYmplY3QgPSBbc3VwZXIgb2JqZWN0Rm9yS2V5OkAicGF5bG9hZCJdOwot
ICAgIGlmICghb2JqZWN0KQotICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiBbW1JXSVBy
b3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0Oltbc3VwZXIgb2JqZWN0
Rm9yS2V5OkAicGF5bG9hZCJdIHRvSlNPTk9iamVjdF0uZ2V0KCldOwotfQotCi0tICh2b2lkKXNl
dEVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICopZXJyb3IKLXsKLSAgICBbc3VwZXIg
c2V0T2JqZWN0OmVycm9yIGZvcktleTpAImVycm9yIl07Ci19Ci0KLS0gKFRlc3RQcm90b2NvbERh
dGFiYXNlRXJyb3IgKillcnJvcgotewotICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb2JqZWN0
ID0gW3N1cGVyIG9iamVjdEZvcktleTpAImVycm9yIl07Ci0gICAgaWYgKCFvYmplY3QpCi0gICAg
ICAgIHJldHVybiBuaWw7Ci0gICAgcmV0dXJuIFtbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBh
bGxvY10gaW5pdFdpdGhKU09OT2JqZWN0Oltbc3VwZXIgb2JqZWN0Rm9yS2V5OkAiZXJyb3IiXSB0
b0pTT05PYmplY3RdLmdldCgpXTsKLX0KLQotLSAodm9pZClzZXRFcnJvckxpc3Q6KE5TQXJyYXkv
KjxUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yPiovICopZXJyb3JMaXN0Ci17Ci0gICAgVEhST1df
RVhDRVBUSU9OX0ZPUl9CQURfVFlQRV9JTl9BUlJBWShlcnJvckxpc3QsIFtUZXN0UHJvdG9jb2xE
YXRhYmFzZUVycm9yIGNsYXNzXSk7Ci0gICAgW3N1cGVyIHNldEpTT05BcnJheTp0b0pTT05PYmpl
Y3RBcnJheShlcnJvckxpc3QpIGZvcktleTpAImVycm9yTGlzdCJdOwotfQotCi0tIChOU0FycmF5
Lyo8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4qLyAqKWVycm9yTGlzdAotewotICAgIHJldHVy
biB0b09iakNBcnJheTxUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yPihbc3VwZXIgSlNPTkFycmF5
Rm9yS2V5OkAiZXJyb3JMaXN0Il0pOwotfQotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0
UHJvdG9jb2xEYXRhYmFzZU9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHMKLQotLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcg
KiwgaWQ+ICopcGF5bG9hZAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAg
ICAgICByZXR1cm4gbmlsOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9Q
RVJUWShwYXlsb2FkW0AiaW50ZWdlciJdLCBAImludGVnZXIiKTsKLSAgICBzZWxmLmludGVnZXIg
PSBwYXlsb2FkW0AiaW50ZWdlciJdOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJF
RF9QUk9QRVJUWShwYXlsb2FkW0AiYXJyYXkiXSwgQCJhcnJheSIpOwotICAgIHNlbGYuYXJyYXkg
PSBwYXlsb2FkW0AiYXJyYXkiXTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURf
UFJPUEVSVFkocGF5bG9hZFtAInN0cmluZyJdLCBAInN0cmluZyIpOwotICAgIHNlbGYuc3RyaW5n
ID0gcGF5bG9hZFtAInN0cmluZyJdOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJF
RF9QUk9QRVJUWShwYXlsb2FkW0AidmFsdWUiXSwgQCJ2YWx1ZSIpOwotICAgIHNlbGYudmFsdWUg
PSBwYXlsb2FkW0AidmFsdWUiXTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURf
UFJPUEVSVFkocGF5bG9hZFtAIm9iamVjdCJdLCBAIm9iamVjdCIpOwotICAgIHNlbGYub2JqZWN0
ID0gcGF5bG9hZFtAIm9iamVjdCJdOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0tIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopb2Jq
ZWN0Ci17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEpTT05PYmplY3Q6W29iamVj
dCB0b0pTT05PYmplY3RdLmdldCgpXSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICByZXR1
cm4gc2VsZjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSW50ZWdlcjooTlNTdHJpbmcg
KilpbnRlZ2VyIGFycmF5OihOU1N0cmluZyAqKWFycmF5IHN0cmluZzooTlNTdHJpbmcgKilzdHJp
bmcgdmFsdWU6KE5TU3RyaW5nICopdmFsdWUgb2JqZWN0OihOU1N0cmluZyAqKW9iamVjdAotewot
ICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0g
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShpbnRlZ2VyLCBAImludGVn
ZXIiKTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKGFycmF5LCBA
ImFycmF5Iik7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShzdHJp
bmcsIEAic3RyaW5nIik7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJU
WSh2YWx1ZSwgQCJ2YWx1ZSIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJP
UEVSVFkob2JqZWN0LCBAIm9iamVjdCIpOwotCi0gICAgc2VsZi5pbnRlZ2VyID0gaW50ZWdlcjsK
LSAgICBzZWxmLmFycmF5ID0gYXJyYXk7Ci0gICAgc2VsZi5zdHJpbmcgPSBzdHJpbmc7Ci0gICAg
c2VsZi52YWx1ZSA9IHZhbHVlOwotICAgIHNlbGYub2JqZWN0ID0gb2JqZWN0OwotCi0gICAgcmV0
dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpc2V0SW50ZWdlcjooTlNTdHJpbmcgKilpbnRlZ2VyCi17
Ci0gICAgW3N1cGVyIHNldFN0cmluZzppbnRlZ2VyIGZvcktleTpAImludGVnZXIiXTsKLX0KLQot
LSAoTlNTdHJpbmcgKilpbnRlZ2VyCi17Ci0gICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6
QCJpbnRlZ2VyIl07Ci19Ci0KLS0gKHZvaWQpc2V0QXJyYXk6KE5TU3RyaW5nICopYXJyYXkKLXsK
LSAgICBbc3VwZXIgc2V0U3RyaW5nOmFycmF5IGZvcktleTpAImFycmF5Il07Ci19Ci0KLS0gKE5T
U3RyaW5nICopYXJyYXkKLXsKLSAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAImFycmF5
Il07Ci19Ci0KLS0gKHZvaWQpc2V0U3RyaW5nOihOU1N0cmluZyAqKXN0cmluZwotewotICAgIFtz
dXBlciBzZXRTdHJpbmc6c3RyaW5nIGZvcktleTpAInN0cmluZyJdOwotfQotCi0tIChOU1N0cmlu
ZyAqKXN0cmluZwotewotICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAic3RyaW5nIl07
Ci19Ci0KLS0gKHZvaWQpc2V0VmFsdWU6KE5TU3RyaW5nICopdmFsdWUKLXsKLSAgICBbc3VwZXIg
c2V0U3RyaW5nOnZhbHVlIGZvcktleTpAInZhbHVlIl07Ci19Ci0KLS0gKE5TU3RyaW5nICopdmFs
dWUKLXsKLSAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAInZhbHVlIl07Ci19Ci0KLS0g
KHZvaWQpc2V0T2JqZWN0OihOU1N0cmluZyAqKW9iamVjdAotewotICAgIFtzdXBlciBzZXRTdHJp
bmc6b2JqZWN0IGZvcktleTpAIm9iamVjdCJdOwotfQotCi0tIChOU1N0cmluZyAqKW9iamVjdAot
ewotICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAib2JqZWN0Il07Ci19Ci0KLUBlbmQK
LQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbERhdGFiYXNlRHVtbXlPYmplY3QKLQotLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJp
bmcgKiwgaWQ+ICopcGF5bG9hZAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQot
ICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0tIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopb2JqZWN0
Ci17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEpTT05PYmplY3Q6W29iamVjdCB0
b0pTT05PYmplY3RdLmdldCgpXSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICByZXR1cm4g
c2VsZjsKLX0KLQotQGVuZAotCi0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUZXN0UGFy
YW1ldGVyQnVuZGxlCi0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwg
TlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQKLXsKLSAgICBpZiAoIShzZWxm
ID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImRpcmVjdGlvbmFsaXR5Il0sIEAi
ZGlyZWN0aW9uYWxpdHkiKTsKLSAgICBPcHRpb25hbDxUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVy
QnVuZGxlRGlyZWN0aW9uYWxpdHk+IGRpcmVjdGlvbmFsaXR5ID0gZnJvbVByb3RvY29sU3RyaW5n
PFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eT4ocGF5bG9hZFtA
ImRpcmVjdGlvbmFsaXR5Il0pOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX0VOVU1fVkFM
VUUoZGlyZWN0aW9uYWxpdHksIEAiZGlyZWN0aW9uYWxpdHkiKTsKLSAgICBzZWxmLmRpcmVjdGlv
bmFsaXR5ID0gZGlyZWN0aW9uYWxpdHkudmFsdWUoKTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImJ1dHRvbnMiXSwgQCJidXR0b25zIik7Ci0g
ICAgc2VsZi5idXR0b25zID0gcGF5bG9hZFtAImJ1dHRvbnMiXTsKLQotICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImNvbHVtbk5hbWVzIl0sIEAiY29s
dW1uTmFtZXMiKTsKLSAgICBzZWxmLmNvbHVtbk5hbWVzID0gcGF5bG9hZFtAImNvbHVtbk5hbWVz
Il07Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRb
QCJub3RlcyJdLCBAIm5vdGVzIik7Ci0gICAgc2VsZi5ub3RlcyA9IHBheWxvYWRbQCJub3RlcyJd
OwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0Ai
dGltZXN0YW1wIl0sIEAidGltZXN0YW1wIik7Ci0gICAgc2VsZi50aW1lc3RhbXAgPSBbcGF5bG9h
ZFtAInRpbWVzdGFtcCJdIGRvdWJsZVZhbHVlXTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
UkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAInZhbHVlcyJdLCBAInZhbHVlcyIpOwotICAgIHNl
bGYudmFsdWVzID0gcGF5bG9hZFtAInZhbHVlcyJdOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AicGF5bG9hZCJdLCBAInBheWxvYWQiKTsKLSAg
ICBzZWxmLnBheWxvYWQgPSBwYXlsb2FkW0AicGF5bG9hZCJdOwotCi0gICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiZXJyb3IiXSwgQCJlcnJvciIpOwot
ICAgIHNlbGYuZXJyb3IgPSBbW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgYWxsb2NdIGluaXRX
aXRoUGF5bG9hZDpwYXlsb2FkW0AiZXJyb3IiXV07Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLS0g
KGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmpl
Y3QgKilvYmplY3QKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoSlNPTk9iamVj
dDpbb2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0KCldKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQot
ICAgIHJldHVybiBzZWxmOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhEaXJlY3Rpb25h
bGl0eTooVGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5KWRpcmVj
dGlvbmFsaXR5IGJ1dHRvbnM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWJ1dHRvbnMgY29sdW1u
TmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWNvbHVtbk5hbWVzIG5vdGVzOihOU1N0cmlu
ZyAqKW5vdGVzIHRpbWVzdGFtcDooZG91YmxlKXRpbWVzdGFtcCB2YWx1ZXM6KFJXSVByb3RvY29s
SlNPTk9iamVjdCAqKXZhbHVlcyBwYXlsb2FkOihSV0lQcm90b2NvbEpTT05PYmplY3QgKilwYXls
b2FkIGVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICopZXJyb3IKLXsKLSAgICBpZiAo
IShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkoYnV0dG9ucywgQCJidXR0b25zIik7Ci0g
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShjb2x1bW5OYW1lcywgQCJj
b2x1bW5OYW1lcyIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFko
bm90ZXMsIEAibm90ZXMiKTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BF
UlRZKHZhbHVlcywgQCJ2YWx1ZXMiKTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVE
X1BST1BFUlRZKHBheWxvYWQsIEAicGF5bG9hZCIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
UkVRVUlSRURfUFJPUEVSVFkoZXJyb3IsIEAiZXJyb3IiKTsKLQotICAgIHNlbGYuZGlyZWN0aW9u
YWxpdHkgPSBkaXJlY3Rpb25hbGl0eTsKLSAgICBzZWxmLmJ1dHRvbnMgPSBidXR0b25zOwotICAg
IHNlbGYuY29sdW1uTmFtZXMgPSBjb2x1bW5OYW1lczsKLSAgICBzZWxmLm5vdGVzID0gbm90ZXM7
Ci0gICAgc2VsZi50aW1lc3RhbXAgPSB0aW1lc3RhbXA7Ci0gICAgc2VsZi52YWx1ZXMgPSB2YWx1
ZXM7Ci0gICAgc2VsZi5wYXlsb2FkID0gcGF5bG9hZDsKLSAgICBzZWxmLmVycm9yID0gZXJyb3I7
Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClzZXREaXJlY3Rpb25hbGl0eTooVGVz
dFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5KWRpcmVjdGlvbmFsaXR5
Ci17Ci0gICAgW3N1cGVyIHNldFN0cmluZzp0b1Byb3RvY29sU3RyaW5nKGRpcmVjdGlvbmFsaXR5
KSBmb3JLZXk6QCJkaXJlY3Rpb25hbGl0eSJdOwotfQotCi0tIChUZXN0UHJvdG9jb2xUZXN0UGFy
YW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHkpZGlyZWN0aW9uYWxpdHkKLXsKLSAgICByZXR1cm4g
ZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rp
b25hbGl0eT4oW3N1cGVyIHN0cmluZ0ZvcktleTpAImRpcmVjdGlvbmFsaXR5Il0pLnZhbHVlKCk7
Ci19Ci0KLS0gKHZvaWQpc2V0QnV0dG9uczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopYnV0dG9u
cwotewotICAgIFtzdXBlciBzZXRKU09OQXJyYXk6dG9KU09OU3RyaW5nQXJyYXkoYnV0dG9ucykg
Zm9yS2V5OkAiYnV0dG9ucyJdOwotfQotCi0tIChOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilidXR0
b25zCi17Ci0gICAgcmV0dXJuIHRvT2JqQ1N0cmluZ0FycmF5KFtzdXBlciBKU09OQXJyYXlGb3JL
ZXk6QCJidXR0b25zIl0pOwotfQotCi0tICh2b2lkKXNldENvbHVtbk5hbWVzOihOU0FycmF5Lyo8
TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcwotewotICAgIFtzdXBlciBzZXRKU09OQXJyYXk6dG9K
U09OU3RyaW5nQXJyYXkoY29sdW1uTmFtZXMpIGZvcktleTpAImNvbHVtbk5hbWVzIl07Ci19Ci0K
LS0gKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWNvbHVtbk5hbWVzCi17Ci0gICAgcmV0dXJuIHRv
T2JqQ1N0cmluZ0FycmF5KFtzdXBlciBKU09OQXJyYXlGb3JLZXk6QCJjb2x1bW5OYW1lcyJdKTsK
LX0KLQotLSAodm9pZClzZXROb3RlczooTlNTdHJpbmcgKilub3RlcwotewotICAgIFtzdXBlciBz
ZXRTdHJpbmc6bm90ZXMgZm9yS2V5OkAibm90ZXMiXTsKLX0KLQotLSAoTlNTdHJpbmcgKilub3Rl
cwotewotICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAibm90ZXMiXTsKLX0KLQotLSAo
dm9pZClzZXRUaW1lc3RhbXA6KGRvdWJsZSl0aW1lc3RhbXAKLXsKLSAgICBbc3VwZXIgc2V0RG91
YmxlOnRpbWVzdGFtcCBmb3JLZXk6QCJ0aW1lc3RhbXAiXTsKLX0KLQotLSAoZG91YmxlKXRpbWVz
dGFtcAotewotICAgIHJldHVybiBbc3VwZXIgZG91YmxlRm9yS2V5OkAidGltZXN0YW1wIl07Ci19
Ci0KLS0gKHZvaWQpc2V0VmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKil2YWx1ZXMKLXsK
LSAgICBbc3VwZXIgc2V0T2JqZWN0OnZhbHVlcyBmb3JLZXk6QCJ2YWx1ZXMiXTsKLX0KLQotLSAo
UldJUHJvdG9jb2xKU09OT2JqZWN0ICopdmFsdWVzCi17Ci0gICAgUldJUHJvdG9jb2xKU09OT2Jq
ZWN0ICpvYmplY3QgPSBbc3VwZXIgb2JqZWN0Rm9yS2V5OkAidmFsdWVzIl07Ci0gICAgaWYgKCFv
YmplY3QpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgcmV0dXJuIFtbUldJUHJvdG9jb2xKU09O
T2JqZWN0IGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6W1tzdXBlciBvYmplY3RGb3JLZXk6QCJ2
YWx1ZXMiXSB0b0pTT05PYmplY3RdLmdldCgpXTsKLX0KLQotLSAodm9pZClzZXRQYXlsb2FkOihS
V0lQcm90b2NvbEpTT05PYmplY3QgKilwYXlsb2FkCi17Ci0gICAgW3N1cGVyIHNldE9iamVjdDpw
YXlsb2FkIGZvcktleTpAInBheWxvYWQiXTsKLX0KLQotLSAoUldJUHJvdG9jb2xKU09OT2JqZWN0
ICopcGF5bG9hZAotewotICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb2JqZWN0ID0gW3N1cGVy
IG9iamVjdEZvcktleTpAInBheWxvYWQiXTsKLSAgICBpZiAoIW9iamVjdCkKLSAgICAgICAgcmV0
dXJuIG5pbDsKLSAgICByZXR1cm4gW1tSV0lQcm90b2NvbEpTT05PYmplY3QgYWxsb2NdIGluaXRX
aXRoSlNPTk9iamVjdDpbW3N1cGVyIG9iamVjdEZvcktleTpAInBheWxvYWQiXSB0b0pTT05PYmpl
Y3RdLmdldCgpXTsKLX0KLQotLSAodm9pZClzZXRFcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VF
cnJvciAqKWVycm9yCi17Ci0gICAgW3N1cGVyIHNldE9iamVjdDplcnJvciBmb3JLZXk6QCJlcnJv
ciJdOwotfQotCi0tIChUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICopZXJyb3IKLXsKLSAgICBS
V0lQcm90b2NvbEpTT05PYmplY3QgKm9iamVjdCA9IFtzdXBlciBvYmplY3RGb3JLZXk6QCJlcnJv
ciJdOwotICAgIGlmICghb2JqZWN0KQotICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiBb
W1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDpbW3N1
cGVyIG9iamVjdEZvcktleTpAImVycm9yIl0gdG9KU09OT2JqZWN0XS5nZXQoKV07Ci19Ci0KLUBl
bmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBl
Y3RlZC90eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24tcmVzdWx0IGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvdHlw
ZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uLXJlc3VsdApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggZTg0ZGFjZGNhZjcuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtcmVx
dWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbi1yZXN1bHQKKysrIC9kZXYvbnVsbApAQCAtMSwxNjQ5
ICswLDAgQEAKLSMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNh
c3RzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotLy8g
VGVzdAotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiVGVzdCIsIG51bGwpOwotSW5z
cGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIlRlc3QuVW5jYXN0ZWRBbmltYWxzIiwge1BpZ3M6
ICJQaWdzIiwgQ293czogIkNvd3MiLCBDYXRzOiAiQ2F0cyIsIEhlbnM6ICJIZW5zIn0pOwotSW5z
cGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIlRlc3QuQ2FzdGVkQW5pbWFscyIsIHtEdWNrczog
IkR1Y2tzIiwgSGVuczogIkhlbnMiLCBDcm93czogIkNyb3dzIiwgRmxhbWluZ29zOiAiRmxhbWlu
Z29zIn0pOwotSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiVGVzdCIsIG51bGwpOwot
IyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2lm
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi0jaW5jbHVkZSAiVGVz
dFByb3RvY29sVHlwZXMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250
ZW5kUm91dGVyLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hl
cihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNw
YXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQotICAgIEJhY2tlbmREaXNwYXRjaGVyKiBi
YWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0
KCk7IH0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmRE
aXNwYXRjaGVyOwotfTsKLQotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSNlbmRp
ZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSMjIyBFbmQgRmls
ZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJv
dG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNw
YWNlIEluc3BlY3RvciB7Ci0KLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCi0KLQotfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hl
cnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3Rz
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVk
ZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVS
TkFURV9ESVNQQVRDSEVSUykKLSNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXJzLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi19IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNw
cAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9u
Y2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDx3dGYvSlNP
TlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKLQotY2xhc3MgRnJvbnRlbmRSb3V0ZXI7Ci0KLX0gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUg
PHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotbmFtZXNw
YWNlIFByb3RvY29sIHsKLQotCi0KLS8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgotbmFtZXNwYWNl
IFRlc3QgewotY2xhc3MgVHlwZU5lZWRpbmdDYXN0OwotY2xhc3MgUmVjdXJzaXZlT2JqZWN0MTsK
LWNsYXNzIFJlY3Vyc2l2ZU9iamVjdDI7Ci1lbnVtIGNsYXNzIFVuY2FzdGVkQW5pbWFsczsKLWVu
dW0gY2xhc3MgQ2FzdGVkQW5pbWFsczsKLX0gLy8gVGVzdAotLy8gRW5kIG9mIGZvcndhcmQgZGVj
bGFyYXRpb25zLgotCi0KLS8vIFR5cGVkZWZzLgotbmFtZXNwYWNlIFRlc3QgewotdHlwZWRlZiBp
bnQgQ2FzdGVkT2JqZWN0SWQ7Ci10eXBlZGVmIGludCBVbmNhc3RlZE9iamVjdElkOwotfSAvLyBU
ZXN0Ci0vLyBFbmQgb2YgdHlwZWRlZnMuCi0KLW5hbWVzcGFjZSBUZXN0SGVscGVycyB7Ci0KLVN0
cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSk7Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+IFN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkKLXsKLSAgICByZXR1
cm4gZ2V0RW51bUNvbnN0YW50VmFsdWUoc3RhdGljX2Nhc3Q8aW50PihlbnVtVmFsdWUpKTsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKLQotbmFtZXNwYWNlIFRlc3QgewotLyogQSBk
dW1teSB0eXBlIHRoYXQgcmVxdWlyZXMgcnVudGltZSBjYXN0cywgYW5kIGZvcmNlcyBub24tcHJp
bWl0aXZlIHJlZmVyZW5jZWQgdHlwZXMgdG8gYWxzbyBlbWl0IHJ1bnRpbWUgY2FzdCBoZWxwZXJz
LiAqLwotY2xhc3MgVHlwZU5lZWRpbmdDYXN0IDogcHVibGljIEpTT046Ok9iamVjdEJhc2Ugewot
cHVibGljOgotICAgIGVudW0gewotICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCi0gICAgICAgIFN0
cmluZ1NldCA9IDEgPDwgMCwKLSAgICAgICAgTnVtYmVyU2V0ID0gMSA8PCAxLAotICAgICAgICBB
bmltYWxzU2V0ID0gMSA8PCAyLAotICAgICAgICBJZFNldCA9IDEgPDwgMywKLSAgICAgICAgVHJl
ZVNldCA9IDEgPDwgNCwKLSAgICAgICAgQWxsRmllbGRzU2V0ID0gKFN0cmluZ1NldCB8IE51bWJl
clNldCB8IEFuaW1hbHNTZXQgfCBJZFNldCB8IFRyZWVTZXQpCi0gICAgfTsKLQotICAgIHRlbXBs
YXRlPGludCBTVEFURT4KLSAgICBjbGFzcyBCdWlsZGVyIHsKLSAgICBwcml2YXRlOgotICAgICAg
ICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBtX3Jlc3VsdDsKLQotICAgICAgICB0ZW1wbGF0ZTxpbnQg
U1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4o
dGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyKFJlZjwvKlR5cGVOZWVkaW5nQ2Fz
dCovSlNPTjo6T2JqZWN0PiYmIG9iamVjdCkKLSAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92
ZShvYmplY3QpKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9
PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKLSAgICAg
ICAgfQotICAgICAgICBmcmllbmQgY2xhc3MgVHlwZU5lZWRpbmdDYXN0OwotICAgIHB1YmxpYzoK
LQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU3RyaW5nU2V0PiYgc2V0U3RyaW5nKGNvbnN0IFN0
cmluZyYgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBTdHJpbmdTZXQpLCBwcm9wZXJ0eV9zdHJpbmdfYWxyZWFkeV9zZXQpOwotICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldFN0cmluZygic3RyaW5nIl9zLCB2YWx1ZSk7Ci0gICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPFN0cmluZ1NldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBOdW1iZXJTZXQ+JiBzZXROdW1iZXIoaW50IHZhbHVlKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTnVtYmVyU2V0KSwgcHJvcGVydHlf
bnVtYmVyX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2VyKCJu
dW1iZXIiX3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TnVtYmVyU2V0
PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IEFuaW1hbHNTZXQ+JiBz
ZXRBbmltYWxzKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHMgdmFsdWUp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBBbmltYWxz
U2V0KSwgcHJvcGVydHlfYW5pbWFsc19hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0U3RyaW5nKCJhbmltYWxzIl9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVy
czo6Z2V0RW51bUNvbnN0YW50VmFsdWUodmFsdWUpKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0
U3RhdGU8QW5pbWFsc1NldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBJZFNldD4mIHNldElkKGludCB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoIShTVEFURSAmIElkU2V0KSwgcHJvcGVydHlfaWRfYWxyZWFkeV9zZXQpOwotICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldEludGVnZXIoImlkIl9zLCB2YWx1ZSk7Ci0gICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPElkU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRl
cjxTVEFURSB8IFRyZWVTZXQ+JiBzZXRUcmVlKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpU
ZXN0OjpSZWN1cnNpdmVPYmplY3QxPiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIFRyZWVTZXQpLCBwcm9wZXJ0eV90cmVlX2FscmVhZHlfc2V0
KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoInRyZWUiX3MsIHZhbHVlKTsKLSAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VHJlZVNldD4oKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIFJlZjxUeXBlTmVlZGluZ0Nhc3Q+IHJlbGVhc2UoKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVh
ZHkpOwotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFR5cGVOZWVkaW5nQ2FzdCkg
PT0gc2l6ZW9mKEpTT046Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsKLQotICAgICAgICAgICAgUmVm
PEpTT046Ok9iamVjdD4ganNvblJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7Ci0g
ICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPFR5
cGVOZWVkaW5nQ2FzdD4qPigmanNvblJlc3VsdCkpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICAvKgotICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1
Y3RvcjoKLSAgICAgKiBSZWY8VHlwZU5lZWRpbmdDYXN0PiByZXN1bHQgPSBUeXBlTmVlZGluZ0Nh
c3Q6OmNyZWF0ZSgpCi0gICAgICogICAgIC5zZXRTdHJpbmcoLi4uKQotICAgICAqICAgICAuc2V0
TnVtYmVyKC4uLikKLSAgICAgKiAgICAgLnNldEFuaW1hbHMoLi4uKQotICAgICAqICAgICAuc2V0
SWQoLi4uKQotICAgICAqICAgICAuc2V0VHJlZSguLi4pCi0gICAgICogICAgIC5yZWxlYXNlKCk7
Ci0gICAgICovCi0gICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCi0gICAg
ewotICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKSk7Ci0gICAgfQotfTsKLQotLyogICovCi1lbnVtIGNsYXNzIFVuY2FzdGVkQW5pbWFscyB7
Ci0gICAgUGlncyA9IDQsCi0gICAgQ293cyA9IDUsCi0gICAgQ2F0cyA9IDYsCi0gICAgSGVucyA9
IDEsCi19OyAvLyBlbnVtIGNsYXNzIFVuY2FzdGVkQW5pbWFscwotLyogICovCi1lbnVtIGNsYXNz
IENhc3RlZEFuaW1hbHMgewotICAgIER1Y2tzID0gMCwKLSAgICBIZW5zID0gMSwKLSAgICBDcm93
cyA9IDIsCi0gICAgRmxhbWluZ29zID0gMywKLX07IC8vIGVudW0gY2xhc3MgQ2FzdGVkQW5pbWFs
cwotY2xhc3MgUmVjdXJzaXZlT2JqZWN0MSA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKLXB1
YmxpYzoKLSAgICBlbnVtIHsKLSAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAotICAgICAgICBBbGxG
aWVsZHNTZXQgPSAwCi0gICAgfTsKLQotICAgIHRlbXBsYXRlPGludCBTVEFURT4KLSAgICBjbGFz
cyBCdWlsZGVyIHsKLSAgICBwcml2YXRlOgotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBt
X3Jlc3VsdDsKLQotICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNU
RVA+JiBjYXN0U3RhdGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJw
cmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBCdWlsZGVyKFJlZjwvKlJlY3Vyc2l2ZU9iamVjdDEqL0pTT046Ok9iamVjdD4mJiBvYmpl
Y3QpCi0gICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKLSAgICAgICAgewot
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJf
Y3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZnJpZW5kIGNs
YXNzIFJlY3Vyc2l2ZU9iamVjdDE7Ci0gICAgcHVibGljOgotCi0gICAgICAgIFJlZjxSZWN1cnNp
dmVPYmplY3QxPiByZWxlYXNlKCkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKLSAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihSZWN1cnNpdmVPYmplY3QxKSA9PSBzaXplb2YoSlNP
Tjo6T2JqZWN0KSwgY2Fubm90X2Nhc3QpOwotCi0gICAgICAgICAgICBSZWY8SlNPTjo6T2JqZWN0
PiBqc29uUmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKLSAgICAgICAgICAgIGF1
dG8gcmVzdWx0ID0gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8UmVjdXJzaXZlT2JqZWN0
MT4qPigmanNvblJlc3VsdCkpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAg
fQotICAgIH07Ci0KLSAgICAvKgotICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKLSAgICAg
KiBSZWY8UmVjdXJzaXZlT2JqZWN0MT4gcmVzdWx0ID0gUmVjdXJzaXZlT2JqZWN0MTo6Y3JlYXRl
KCkKLSAgICAgKiAgICAgLnJlbGVhc2UoKTsKLSAgICAgKi8KLSAgICBzdGF0aWMgQnVpbGRlcjxO
b0ZpZWxkc1NldD4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmll
bGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKLSAgICB9Ci0KLSAgICB2b2lkIHNldE9i
aihSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0Mj4gdmFs
dWUpCi0gICAgewotICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRPYmplY3QoIm9iaiJfcywg
V1RGTW92ZSh2YWx1ZSkpOwotICAgIH0KLX07Ci0KLWNsYXNzIFJlY3Vyc2l2ZU9iamVjdDIgOiBw
dWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7Ci1wdWJsaWM6Ci0gICAgZW51bSB7Ci0gICAgICAgIE5v
RmllbGRzU2V0ID0gMCwKLSAgICAgICAgQWxsRmllbGRzU2V0ID0gMAotICAgIH07Ci0KLSAgICB0
ZW1wbGF0ZTxpbnQgU1RBVEU+Ci0gICAgY2xhc3MgQnVpbGRlciB7Ci0gICAgcHJpdmF0ZToKLSAg
ICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7Ci0KLSAgICAgICAgdGVtcGxhdGU8
aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQ
Pio+KHRoaXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcihSZWY8LypSZWN1cnNpdmVP
YmplY3QyKi9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQotICAgICAgICAgICAgOiBtX3Jlc3VsdChX
VEZNb3ZlKG9iamVjdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNU
QVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwot
ICAgICAgICB9Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBSZWN1cnNpdmVPYmplY3QyOwotICAgIHB1
YmxpYzoKLQotICAgICAgICBSZWY8UmVjdXJzaXZlT2JqZWN0Mj4gcmVsZWFzZSgpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVz
dWx0X2lzX25vdF9yZWFkeSk7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoUmVj
dXJzaXZlT2JqZWN0MikgPT0gc2l6ZW9mKEpTT046Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsKLQot
ICAgICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4ganNvblJlc3VsdCA9IG1fcmVzdWx0LnJlbGVh
c2VOb25OdWxsKCk7Ci0gICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFdURk1vdmUoKnJlaW50ZXJw
cmV0X2Nhc3Q8UmVmPFJlY3Vyc2l2ZU9iamVjdDI+Kj4oJmpzb25SZXN1bHQpKTsKLSAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgLyoKLSAgICAgKiBT
eW50aGV0aWMgY29uc3RydWN0b3I6Ci0gICAgICogUmVmPFJlY3Vyc2l2ZU9iamVjdDI+IHJlc3Vs
dCA9IFJlY3Vyc2l2ZU9iamVjdDI6OmNyZWF0ZSgpCi0gICAgICogICAgIC5yZWxlYXNlKCk7Ci0g
ICAgICovCi0gICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCi0gICAgewot
ICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KSk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRPYmooUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+IHZhbHVlKQotICAgIHsKLSAgICAgICAgSlNPTjo6T2Jq
ZWN0QmFzZTo6c2V0T2JqZWN0KCJvYmoiX3MsIFdURk1vdmUodmFsdWUpKTsKLSAgICB9Ci19Owot
Ci19IC8vIFRlc3QKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6
OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPiB7Ci1zdGF0aWMgdm9pZCBhc3NlcnRWYWx1
ZUhhc0V4cGVjdGVkVHlwZShKU09OOjpWYWx1ZSopOwotfTsKLXRlbXBsYXRlPD4gc3RydWN0IEJp
bmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0PiB7
Ci1zdGF0aWMgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2Fz
dD4gcnVudGltZUNhc3QoUmVmUHRyPEpTT046OlZhbHVlPiYmIHZhbHVlKTsKLXN0YXRpYyB2b2lk
IGFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEpTT046OlZhbHVlKik7Ci19OwotdGVtcGxhdGU8
PiBzdHJ1Y3QgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNp
dmVPYmplY3QxPiB7Ci1zdGF0aWMgdm9pZCBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShKU09O
OjpWYWx1ZSopOwotfTsKLXRlbXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9y
OjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0Mj4gewotc3RhdGljIHZvaWQgYXNzZXJ0
VmFsdWVIYXNFeHBlY3RlZFR5cGUoSlNPTjo6VmFsdWUqKTsKLX07Ci0KLW5hbWVzcGFjZSBUZXN0
SGVscGVycyB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFByb3RvY29sRW51bVR5cGU+Ci1PcHRpb25h
bDxQcm90b2NvbEVudW1UeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5n
Jik7Ci0KLS8vIEVudW1zIGluIHRoZSAnVGVzdCcgRG9tYWluCi10ZW1wbGF0ZTw+Ci1PcHRpb25h
bDxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM+IHBhcnNlRW51bVZh
bHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM+
KGNvbnN0IFN0cmluZyYpOwotdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6VGVzdDo6Q2FzdGVkQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+KGNvbnN0IFN0cmluZyYpOwotCi19IC8v
IG5hbWVzcGFjZSBUZXN0SGVscGVycwotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotbmFtZXNwYWNlIFdURiB7Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKLQotLy8gSGFzaCBkZWNsYXJhdGlvbnMgaW4gdGhl
ICdUZXN0JyBEb21haW4KLXRlbXBsYXRlPD4KLXN0cnVjdCBEZWZhdWx0SGFzaDxJbnNwZWN0b3I6
OlByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM+IHsKLSAgICB0eXBlZGVmIEludEhhc2g8
SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzPiBIYXNoOwotfTsKLXRl
bXBsYXRlPD4KLXN0cnVjdCBEZWZhdWx0SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpD
YXN0ZWRBbmltYWxzPiB7Ci0gICAgdHlwZWRlZiBJbnRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlRlc3Q6OkNhc3RlZEFuaW1hbHM+IEhhc2g7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXVEYKLSMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xPYmplY3RzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5
cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdFBy
b3RvY29sT2JqZWN0cy5oIgotCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotbmFtZXNwYWNl
IFByb3RvY29sIHsKLQotbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKLQotc3RhdGljIGNvbnN0IGNo
YXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFsdWVzW10gPSB7Ci0gICAgIkR1Y2tzIiwKLSAgICAi
SGVucyIsCi0gICAgIkNyb3dzIiwKLSAgICAiRmxhbWluZ29zIiwKLSAgICAiUGlncyIsCi0gICAg
IkNvd3MiLAotICAgICJDYXRzIiwKLX07Ci0KLVN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShp
bnQgY29kZSkgewotICAgIHJldHVybiBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb2RlXTsKLX0KLQot
Ly8gRW51bXMgaW4gdGhlICdUZXN0JyBEb21haW4KLXRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9t
U3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFscz4oY29uc3Qg
U3RyaW5nJiBwcm90b2NvbFN0cmluZykKLXsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0
YW50VmFsdWVzW10gPSB7Ci0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVz
dDo6VW5jYXN0ZWRBbmltYWxzOjpQaWdzLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJv
dG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFsczo6Q293cywKLSAgICAgICAgKHNpemVfdClJbnNw
ZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM6OkNhdHMsCi0gICAgICAgIChz
aXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzOjpIZW5zLAot
ICAgIH07Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCA0OyArK2kpCi0gICAgICAgIGlmIChw
cm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0p
Ci0gICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVk
QW5pbWFscyljb25zdGFudFZhbHVlc1tpXTsKLQotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19
Ci0KLXRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3Rl
ZEFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpU
ZXN0OjpDYXN0ZWRBbmltYWxzPihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQotewotICAg
IHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsKLSAgICAgICAgKHNpemVf
dClJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzOjpEdWNrcywKLSAgICAg
ICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzOjpIZW5z
LAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1h
bHM6OkNyb3dzLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNh
c3RlZEFuaW1hbHM6OkZsYW1pbmdvcywKLSAgICB9OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgNDsgKytpKQotICAgICAgICBpZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92
YWx1ZXNbY29uc3RhbnRWYWx1ZXNbaV1dKQotICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6
OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzKWNvbnN0YW50VmFsdWVzW2ldOwotCi0gICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotCi19IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwot
Ci0KLQotdm9pZCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3Rl
ZEFuaW1hbHM+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShKU09OOjpWYWx1ZSogdmFsdWUp
Ci17Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBBU1NFUlRfQVJHKHZhbHVlLCB2YWx1ZSk7Ci0g
ICAgU3RyaW5nIHJlc3VsdDsKLSAgICBib29sIGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNTdHJp
bmcocmVzdWx0KTsKLSAgICBBU1NFUlQoY2FzdFN1Y2NlZWRlZCk7Ci0gICAgQVNTRVJUKHJlc3Vs
dCA9PSAiRHVja3MiIHx8IHJlc3VsdCA9PSAiSGVucyIgfHwgcmVzdWx0ID09ICJDcm93cyIgfHwg
cmVzdWx0ID09ICJGbGFtaW5nb3MiKTsKLSNlbHNlIC8vIEFTU0VSVF9FTkFCTEVECi0gICAgVU5V
U0VEX1BBUkFNKHZhbHVlKTsKLSNlbmRpZiAvLyBBU1NFUlRfRU5BQkxFRAotfQotCi12b2lkIEJp
bmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0Pjo6
YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSlNPTjo6VmFsdWUqIHZhbHVlKQotewotI2lmIEFT
U0VSVF9FTkFCTEVECi0gICAgQVNTRVJUX0FSRyh2YWx1ZSwgdmFsdWUpOwotICAgIFJlZlB0cjxK
U09OOjpPYmplY3Q+IG9iamVjdDsKLSAgICBib29sIGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNP
YmplY3Qob2JqZWN0KTsKLSAgICBBU1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVkZWQsIGNhc3RTdWNj
ZWVkZWQpOwotICAgIHsKLSAgICAgICAgYXV0byBzdHJpbmdQb3MgPSBvYmplY3QtPmZpbmQoInN0
cmluZyJfcyk7Ci0gICAgICAgIEFTU0VSVChzdHJpbmdQb3MgIT0gb2JqZWN0LT5lbmQoKSk7Ci0g
ICAgICAgIEJpbmRpbmdUcmFpdHM8U3RyaW5nPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUo
c3RyaW5nUG9zLT52YWx1ZS5nZXQoKSk7Ci0gICAgfQotICAgIHsKLSAgICAgICAgYXV0byBudW1i
ZXJQb3MgPSBvYmplY3QtPmZpbmQoIm51bWJlciJfcyk7Ci0gICAgICAgIEFTU0VSVChudW1iZXJQ
b3MgIT0gb2JqZWN0LT5lbmQoKSk7Ci0gICAgICAgIEJpbmRpbmdUcmFpdHM8aW50Pjo6YXNzZXJ0
VmFsdWVIYXNFeHBlY3RlZFR5cGUobnVtYmVyUG9zLT52YWx1ZS5nZXQoKSk7Ci0gICAgfQotICAg
IHsKLSAgICAgICAgYXV0byBhbmltYWxzUG9zID0gb2JqZWN0LT5maW5kKCJhbmltYWxzIl9zKTsK
LSAgICAgICAgQVNTRVJUKGFuaW1hbHNQb3MgIT0gb2JqZWN0LT5lbmQoKSk7Ci0gICAgICAgIEJp
bmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz46OmFz
c2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKGFuaW1hbHNQb3MtPnZhbHVlLmdldCgpKTsKLSAgICB9
Ci0gICAgewotICAgICAgICBhdXRvIGlkUG9zID0gb2JqZWN0LT5maW5kKCJpZCJfcyk7Ci0gICAg
ICAgIEFTU0VSVChpZFBvcyAhPSBvYmplY3QtPmVuZCgpKTsKLSAgICAgICAgQmluZGluZ1RyYWl0
czxpbnQ+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShpZFBvcy0+dmFsdWUuZ2V0KCkpOwot
ICAgIH0KLSAgICB7Ci0gICAgICAgIGF1dG8gdHJlZVBvcyA9IG9iamVjdC0+ZmluZCgidHJlZSJf
cyk7Ci0gICAgICAgIEFTU0VSVCh0cmVlUG9zICE9IG9iamVjdC0+ZW5kKCkpOwotICAgICAgICBC
aW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+
Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZSh0cmVlUG9zLT52YWx1ZS5nZXQoKSk7Ci0gICAg
fQotCi0gICAgaW50IGZvdW5kUHJvcGVydGllc0NvdW50ID0gNTsKLSAgICBpZiAoZm91bmRQcm9w
ZXJ0aWVzQ291bnQgIT0gb2JqZWN0LT5zaXplKCkpCi0gICAgICAgIEZBVEFMKCJVbmV4cGVjdGVk
IHByb3BlcnRpZXMgaW4gb2JqZWN0OiAlc1xuIiwgb2JqZWN0LT50b0pTT05TdHJpbmcoKS5hc2Np
aSgpLmRhdGEoKSk7Ci0jZWxzZSAvLyBBU1NFUlRfRU5BQkxFRAotICAgIFVOVVNFRF9QQVJBTSh2
YWx1ZSk7Ci0jZW5kaWYgLy8gQVNTRVJUX0VOQUJMRUQKLX0KLQotUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD4gQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6
OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+OjpydW50aW1lQ2FzdChSZWZQdHI8SlNP
Tjo6VmFsdWU+JiYgdmFsdWUpCi17Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcmVzdWx0Owot
ICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9IHZhbHVlLT5hc09iamVjdChyZXN1bHQpOwotICAgIEFT
U0VSVF9VTlVTRUQoY2FzdFN1Y2NlZWRlZCwgY2FzdFN1Y2NlZWRlZCk7Ci0gICAgQmluZGluZ1Ry
YWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+Ojphc3NlcnRW
YWx1ZUhhc0V4cGVjdGVkVHlwZShyZXN1bHQuZ2V0KCkpOwotICAgIENPTVBJTEVfQVNTRVJUKHNp
emVvZihJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3QpID09IHNpemVv
ZihKU09OOjpPYmplY3RCYXNlKSwgdHlwZV9jYXN0X3Byb2JsZW0pOwotICAgIHJldHVybiBzdGF0
aWNfY2FzdDxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3QqPihzdGF0
aWNfY2FzdDxKU09OOjpPYmplY3RCYXNlKj4ocmVzdWx0LmdldCgpKSk7Ci19Ci0KLQotdm9pZCBC
aW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+
Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShKU09OOjpWYWx1ZSogdmFsdWUpCi17Ci0jaWYg
QVNTRVJUX0VOQUJMRUQKLSAgICBBU1NFUlRfQVJHKHZhbHVlLCB2YWx1ZSk7Ci0gICAgUmVmUHRy
PEpTT046Ok9iamVjdD4gb2JqZWN0OwotICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9IHZhbHVlLT5h
c09iamVjdChvYmplY3QpOwotICAgIEFTU0VSVF9VTlVTRUQoY2FzdFN1Y2NlZWRlZCwgY2FzdFN1
Y2NlZWRlZCk7Ci0KLSAgICBpbnQgZm91bmRQcm9wZXJ0aWVzQ291bnQgPSAwOwotICAgIHsKLSAg
ICAgICAgYXV0byBvYmpQb3MgPSBvYmplY3QtPmZpbmQoIm9iaiJfcyk7Ci0gICAgICAgIGlmIChv
YmpQb3MgIT0gb2JqZWN0LT5lbmQoKSkgewotICAgICAgICAgICAgQmluZGluZ1RyYWl0czxJbnNw
ZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QyPjo6YXNzZXJ0VmFsdWVIYXNF
eHBlY3RlZFR5cGUob2JqUG9zLT52YWx1ZS5nZXQoKSk7Ci0gICAgICAgICAgICArK2ZvdW5kUHJv
cGVydGllc0NvdW50OwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChmb3VuZFByb3BlcnRpZXND
b3VudCAhPSBvYmplY3QtPnNpemUoKSkKLSAgICAgICAgRkFUQUwoIlVuZXhwZWN0ZWQgcHJvcGVy
dGllcyBpbiBvYmplY3Q6ICVzXG4iLCBvYmplY3QtPnRvSlNPTlN0cmluZygpLmFzY2lpKCkuZGF0
YSgpKTsKLSNlbHNlIC8vIEFTU0VSVF9FTkFCTEVECi0gICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsK
LSNlbmRpZiAvLyBBU1NFUlRfRU5BQkxFRAotfQotCi12b2lkIEJpbmRpbmdUcmFpdHM8SW5zcGVj
dG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0Mj46OmFzc2VydFZhbHVlSGFzRXhw
ZWN0ZWRUeXBlKEpTT046OlZhbHVlKiB2YWx1ZSkKLXsKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAg
IEFTU0VSVF9BUkcodmFsdWUsIHZhbHVlKTsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBvYmpl
Y3Q7Ci0gICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdmFsdWUtPmFzT2JqZWN0KG9iamVjdCk7Ci0g
ICAgQVNTRVJUX1VOVVNFRChjYXN0U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsKLQotICAgIGlu
dCBmb3VuZFByb3BlcnRpZXNDb3VudCA9IDA7Ci0gICAgewotICAgICAgICBhdXRvIG9ialBvcyA9
IG9iamVjdC0+ZmluZCgib2JqIl9zKTsKLSAgICAgICAgaWYgKG9ialBvcyAhPSBvYmplY3QtPmVu
ZCgpKSB7Ci0gICAgICAgICAgICBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRl
c3Q6OlJlY3Vyc2l2ZU9iamVjdDE+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShvYmpQb3Mt
PnZhbHVlLmdldCgpKTsKLSAgICAgICAgICAgICsrZm91bmRQcm9wZXJ0aWVzQ291bnQ7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgaWYgKGZvdW5kUHJvcGVydGllc0NvdW50ICE9IG9iamVjdC0+c2l6
ZSgpKQotICAgICAgICBGQVRBTCgiVW5leHBlY3RlZCBwcm9wZXJ0aWVzIGluIG9iamVjdDogJXNc
biIsIG9iamVjdC0+dG9KU09OU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOwotI2Vsc2UgLy8gQVNT
RVJUX0VOQUJMRUQKLSAgICBVTlVTRURfUEFSQU0odmFsdWUpOwotI2VuZGlmIC8vIEFTU0VSVF9F
TkFCTEVECi19Ci0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW5j
bHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi0KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQot
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFj
a2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmRE
aXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVx
dWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJh
Y2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIK
LSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbmNsdWRlIDx3dGYv
SlNPTlZhbHVlcy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJz
Lm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3Rz
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9y
dCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmls
aXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6
IE5TT2JqZWN0Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0
aW9uLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNh
c3RzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2lt
cG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2xJbnRlcm5hbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgi
Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgot
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+
Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0
Y2hlcnMuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVycy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW1wbGVtZW50YXRpb24g
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29u
dHJvbGxlciogX2NvbnRyb2xsZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRy
b2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgotewotICAg
IHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmls
OwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7
Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAgIFtzdXBlciBk
ZWFsbG9jXTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbi5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVy
cy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1
bnRpbWUtY2FzdHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVz
aW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xF
dmVudERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2Fz
dHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1w
b3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JX
SVByb3RvY29sSlNPTk9iamVjdC5oPgotCi0KLUBjbGFzcyBUZXN0UHJvdG9jb2xUZXN0VHlwZU5l
ZWRpbmdDYXN0OwotQGNsYXNzIFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxOwotQGNs
YXNzIFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QyOwotCi10eXBlZGVmIE5TX0VOVU0o
TlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xQbGF0Zm9ybSkgewotICAgIFRlc3RQcm90b2NvbFBsYXRm
b3JtQWxsLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYywKLSAgICBUZXN0UHJvdG9j
b2xQbGF0Zm9ybUlPUywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TLAotfTsKLQotCi10
eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxz
KSB7Ci0gICAgVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc1BpZ3MsCi0gICAgVGVzdFBy
b3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc0Nvd3MsCi0gICAgVGVzdFByb3RvY29sVGVzdFVuY2Fz
dGVkQW5pbWFsc0NhdHMsCi0gICAgVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc0hlbnMs
Ci19OwotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVk
QW5pbWFscykgewotICAgIFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzRHVja3MsCi0gICAg
VGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHNIZW5zLAotICAgIFRlc3RQcm90b2NvbFRlc3RD
YXN0ZWRBbmltYWxzQ3Jvd3MsCi0gICAgVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHNGbGFt
aW5nb3MsCi19OwotCi0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQot
QGludGVyZmFjZSBUZXN0UHJvdG9jb2xUZXN0VHlwZU5lZWRpbmdDYXN0IDogUldJUHJvdG9jb2xK
U09OT2JqZWN0Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8
TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3Rv
Y29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OwotLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZyBudW1iZXI6KGludCludW1i
ZXIgYW5pbWFsczooVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHMpYW5pbWFscyBpZGVudGlm
aWVyOihpbnQpaWRlbnRpZmllciB0cmVlOihUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0
MSAqKXRyZWU7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNT
dHJpbmcgKnN0cmluZzsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3Np
Z24pIGludCBudW1iZXI7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNz
aWduKSBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFscyBhbmltYWxzOwotLyogcmVxdWlyZWQg
Ki8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgaW50IGlkZW50aWZpZXI7Ci0vKiByZXF1
aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluKSBUZXN0UHJvdG9jb2xUZXN0UmVj
dXJzaXZlT2JqZWN0MSAqdHJlZTsKLUBlbmQKLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAo
ImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3Qx
IDogUldJUHJvdG9jb2xKU09OT2JqZWN0Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2Fk
OihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKLS0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2Jq
ZWN0OwotLyogb3B0aW9uYWwgKi8gQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgVGVzdFBy
b3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDIgKm9iajsKLUBlbmQKLQotX19hdHRyaWJ1dGVfXygo
dmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbFRlc3RSZWN1
cnNpdmVPYmplY3QyIDogUldJUHJvdG9jb2xKU09OT2JqZWN0Ci0tIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKLS0g
KGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmpl
Y3QgKilqc29uT2JqZWN0OwotLyogb3B0aW9uYWwgKi8gQHByb3BlcnR5IChub25hdG9taWMsIHJl
dGFpbikgVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgKm9iajsKLUBlbmQKLQotCi0K
LQotCi0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0
eU9iamVjdHMuaD4KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNp
bXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCi0jaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPHd0Zi9K
U09OVmFsdWVzLmg+Ci0KLQotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwu
aAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3Rz
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9y
dCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJh
eUNvbnZlcnNpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBPYmpDRW51bVR5cGU+Ci1PcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0
cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3Ry
aW5nKFRlc3RQcm90b2NvbFBsYXRmb3JtIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewot
ICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1BbGw6Ci0gICAgICAgIHJldHVybiAiYWxsIl9z
OwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOgotICAgICAgICByZXR1cm4g
ImdlbmVyaWMiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzoKLSAgICAgICAg
cmV0dXJuICJpb3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOgotICAg
ICAgICByZXR1cm4gIm1hY29zIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9w
dGlvbmFsPFRlc3RQcm90b2NvbFBsYXRmb3JtPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gImFsbCIpCi0gICAgICAgIHJldHVybiBU
ZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDsKLSAgICBpZiAodmFsdWUgPT0gImdlbmVyaWMiKQotICAg
ICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOwotICAgIGlmICh2YWx1ZSA9
PSAiaW9zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOwotICAgIGlm
ICh2YWx1ZSA9PSAibWFjb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1N
YWNPUzsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi0KLWlubGluZSBTdHJpbmcgdG9Q
cm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzIHZhbHVlKQotewot
ICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5p
bWFsc1BpZ3M6Ci0gICAgICAgIHJldHVybiAiUGlncyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2Nv
bFRlc3RVbmNhc3RlZEFuaW1hbHNDb3dzOgotICAgICAgICByZXR1cm4gIkNvd3MiX3M7Ci0gICAg
Y2FzZSBUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzQ2F0czoKLSAgICAgICAgcmV0dXJu
ICJDYXRzIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc0hlbnM6
Ci0gICAgICAgIHJldHVybiAiSGVucyJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGlu
ZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzPiBmcm9tUHJvdG9jb2xT
dHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gIlBpZ3MiKQot
ICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc1BpZ3M7Ci0gICAg
aWYgKHZhbHVlID09ICJDb3dzIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFRlc3RVbmNh
c3RlZEFuaW1hbHNDb3dzOwotICAgIGlmICh2YWx1ZSA9PSAiQ2F0cyIpCi0gICAgICAgIHJldHVy
biBUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzQ2F0czsKLSAgICBpZiAodmFsdWUgPT0g
IkhlbnMiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc0hl
bnM7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotaW5saW5lIFN0cmluZyB0b1Byb3Rv
Y29sU3RyaW5nKFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzIHZhbHVlKQotewotICAgIHN3
aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHNEdWNr
czoKLSAgICAgICAgcmV0dXJuICJEdWNrcyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFRlc3RD
YXN0ZWRBbmltYWxzSGVuczoKLSAgICAgICAgcmV0dXJuICJIZW5zIl9zOwotICAgIGNhc2UgVGVz
dFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHNDcm93czoKLSAgICAgICAgcmV0dXJuICJDcm93cyJf
czsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzRmxhbWluZ29zOgotICAg
ICAgICByZXR1cm4gIkZsYW1pbmdvcyJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGlu
ZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFscz4gZnJvbVByb3RvY29sU3Ry
aW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJEdWNrcyIpCi0g
ICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFsc0R1Y2tzOwotICAgIGlm
ICh2YWx1ZSA9PSAiSGVucyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVk
QW5pbWFsc0hlbnM7Ci0gICAgaWYgKHZhbHVlID09ICJDcm93cyIpCi0gICAgICAgIHJldHVybiBU
ZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFsc0Nyb3dzOwotICAgIGlmICh2YWx1ZSA9PSAiRmxh
bWluZ29zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzRmxh
bWluZ29zOwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAi
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5o
IgotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgotI2ltcG9ydCA8V2ViSW5zcGVj
dG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLQotdXNpbmcgbmFtZXNwYWNlIElu
c3BlY3RvcjsKLQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFRlc3RE
b21haW4pCi0KLSsgKHZvaWQpX3BhcnNlVHlwZU5lZWRpbmdDYXN0OihUZXN0UHJvdG9jb2xUZXN0
VHlwZU5lZWRpbmdDYXN0ICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotKyAo
dm9pZClfcGFyc2VDYXN0ZWRPYmplY3RJZDooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxv
YWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZVVuY2FzdGVkT2JqZWN0SWQ6KE5TTnVtYmVy
ICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotKyAodm9pZClfcGFyc2VVbmNh
c3RlZEFuaW1hbHM6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2Fk
OwotKyAodm9pZClfcGFyc2VDYXN0ZWRBbmltYWxzOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9t
UGF5bG9hZDooaWQpcGF5bG9hZDsKLSsgKHZvaWQpX3BhcnNlUmVjdXJzaXZlT2JqZWN0MTooVGVz
dFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlk
KXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZVJlY3Vyc2l2ZU9iamVjdDI6KFRlc3RQcm90b2NvbFRl
c3RSZWN1cnNpdmVPYmplY3QyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwot
Ci1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFRl
c3REb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlVHlwZU5lZWRpbmdDYXN0OihUZXN0UHJvdG9jb2xU
ZXN0VHlwZU5lZWRpbmdDYXN0ICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17
Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5
IGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xUZXN0VHlwZU5lZWRpbmdD
YXN0IGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07Ci19Ci0KLSsgKHZvaWQpX3BhcnNl
Q2FzdGVkT2JqZWN0SWQ6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXls
b2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNOdW1i
ZXIgY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSAoTlNOdW1iZXIgKilwYXlsb2FkOwotfQotCi0r
ICh2b2lkKV9wYXJzZVVuY2FzdGVkT2JqZWN0SWQ6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21Q
YXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShw
YXlsb2FkLCBbTlNOdW1iZXIgY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSAoTlNOdW1iZXIgKilw
YXlsb2FkOwotfQotCi0rICh2b2lkKV9wYXJzZVVuY2FzdGVkQW5pbWFsczooTlNOdW1iZXIgKiop
b3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05f
Rk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBjbGFzc10pOwotICAgIE9wdGlvbmFsPFRl
c3RQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHM+IHJlc3VsdCA9IEluc3BlY3Rvcjo6ZnJvbVBy
b3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHM+KHBheWxvYWQpOwot
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX0VOVU1fVkFMVUUocmVzdWx0LCBAIlVuY2FzdGVk
QW5pbWFscyIpOwotICAgICpvdXRWYWx1ZSA9IEAocmVzdWx0LnZhbHVlKCkpOwotfQotCi0rICh2
b2lkKV9wYXJzZUNhc3RlZEFuaW1hbHM6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2Fk
OihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2Fk
LCBbTlNTdHJpbmcgY2xhc3NdKTsKLSAgICBPcHRpb25hbDxUZXN0UHJvdG9jb2xUZXN0Q2FzdGVk
QW5pbWFscz4gcmVzdWx0ID0gSW5zcGVjdG9yOjpmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3Rv
Y29sVGVzdENhc3RlZEFuaW1hbHM+KHBheWxvYWQpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
QkFEX0VOVU1fVkFMVUUocmVzdWx0LCBAIkNhc3RlZEFuaW1hbHMiKTsKLSAgICAqb3V0VmFsdWUg
PSBAKHJlc3VsdC52YWx1ZSgpKTsKLX0KLQotKyAodm9pZClfcGFyc2VSZWN1cnNpdmVPYmplY3Qx
OihUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSAqKilvdXRWYWx1ZSBmcm9tUGF5bG9h
ZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9h
ZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29s
VGVzdFJlY3Vyc2l2ZU9iamVjdDEgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKLX0K
LQotKyAodm9pZClfcGFyc2VSZWN1cnNpdmVPYmplY3QyOihUZXN0UHJvdG9jb2xUZXN0UmVjdXJz
aXZlT2JqZWN0MiAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10p
OwotICAgICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDIgYWxs
b2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xUeXBlcy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUt
cmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1w
b3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rv
ci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9u
cy5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3Bl
Y3RvcjsKLQotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVGVzdFR5cGVOZWVkaW5nQ2Fz
dAotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFy
eTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBp
bml0XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JF
UVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJzdHJpbmciXSwgQCJzdHJpbmciKTsKLSAgICBzZWxm
LnN0cmluZyA9IHBheWxvYWRbQCJzdHJpbmciXTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
UkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAIm51bWJlciJdLCBAIm51bWJlciIpOwotICAgIHNl
bGYubnVtYmVyID0gW3BheWxvYWRbQCJudW1iZXIiXSBpbnRlZ2VyVmFsdWVdOwotCi0gICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiYW5pbWFscyJdLCBA
ImFuaW1hbHMiKTsKLSAgICBPcHRpb25hbDxUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFscz4g
YW5pbWFscyA9IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFs
cz4ocGF5bG9hZFtAImFuaW1hbHMiXSk7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfRU5V
TV9WQUxVRShhbmltYWxzLCBAImFuaW1hbHMiKTsKLSAgICBzZWxmLmFuaW1hbHMgPSBhbmltYWxz
LnZhbHVlKCk7Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBh
eWxvYWRbQCJpZCJdLCBAImlkIik7Ci0gICAgc2VsZi5pZGVudGlmaWVyID0gW3BheWxvYWRbQCJp
ZCJdIGludGVnZXJWYWx1ZV07Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BS
T1BFUlRZKHBheWxvYWRbQCJ0cmVlIl0sIEAidHJlZSIpOwotICAgIHNlbGYudHJlZSA9IFtbVGVz
dFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXls
b2FkW0AidHJlZSJdXTsKLQotICAgIHJldHVybiBzZWxmOwotfQotLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9iamVjdAotewot
ICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmplY3QgdG9KU09O
T2JqZWN0XS5nZXQoKV0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgcmV0dXJuIHNlbGY7
Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcg
bnVtYmVyOihpbnQpbnVtYmVyIGFuaW1hbHM6KFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxz
KWFuaW1hbHMgaWRlbnRpZmllcjooaW50KWlkZW50aWZpZXIgdHJlZTooVGVzdFByb3RvY29sVGVz
dFJlY3Vyc2l2ZU9iamVjdDEgKil0cmVlCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0
XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJ
UkVEX1BST1BFUlRZKHN0cmluZywgQCJzdHJpbmciKTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9S
X1JFUVVJUkVEX1BST1BFUlRZKHRyZWUsIEAidHJlZSIpOwotCi0gICAgc2VsZi5zdHJpbmcgPSBz
dHJpbmc7Ci0gICAgc2VsZi5udW1iZXIgPSBudW1iZXI7Ci0gICAgc2VsZi5hbmltYWxzID0gYW5p
bWFsczsKLSAgICBzZWxmLmlkZW50aWZpZXIgPSBpZGVudGlmaWVyOwotICAgIHNlbGYudHJlZSA9
IHRyZWU7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClzZXRTdHJpbmc6KE5TU3Ry
aW5nICopc3RyaW5nCi17Ci0gICAgW3N1cGVyIHNldFN0cmluZzpzdHJpbmcgZm9yS2V5OkAic3Ry
aW5nIl07Ci19Ci0KLS0gKE5TU3RyaW5nICopc3RyaW5nCi17Ci0gICAgcmV0dXJuIFtzdXBlciBz
dHJpbmdGb3JLZXk6QCJzdHJpbmciXTsKLX0KLQotLSAodm9pZClzZXROdW1iZXI6KGludCludW1i
ZXIKLXsKLSAgICBbc3VwZXIgc2V0SW50ZWdlcjpudW1iZXIgZm9yS2V5OkAibnVtYmVyIl07Ci19
Ci0KLS0gKGludCludW1iZXIKLXsKLSAgICByZXR1cm4gW3N1cGVyIGludGVnZXJGb3JLZXk6QCJu
dW1iZXIiXTsKLX0KLQotLSAodm9pZClzZXRBbmltYWxzOihUZXN0UHJvdG9jb2xUZXN0Q2FzdGVk
QW5pbWFscylhbmltYWxzCi17Ci0gICAgW3N1cGVyIHNldFN0cmluZzp0b1Byb3RvY29sU3RyaW5n
KGFuaW1hbHMpIGZvcktleTpAImFuaW1hbHMiXTsKLX0KLQotLSAoVGVzdFByb3RvY29sVGVzdENh
c3RlZEFuaW1hbHMpYW5pbWFscwotewotICAgIHJldHVybiBmcm9tUHJvdG9jb2xTdHJpbmc8VGVz
dFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHM+KFtzdXBlciBzdHJpbmdGb3JLZXk6QCJhbmltYWxz
Il0pLnZhbHVlKCk7Ci19Ci0KLS0gKHZvaWQpc2V0SWRlbnRpZmllcjooaW50KWlkZW50aWZpZXIK
LXsKLSAgICBbc3VwZXIgc2V0SW50ZWdlcjppZGVudGlmaWVyIGZvcktleTpAImlkIl07Ci19Ci0K
LS0gKGludClpZGVudGlmaWVyCi17Ci0gICAgcmV0dXJuIFtzdXBlciBpbnRlZ2VyRm9yS2V5OkAi
aWQiXTsKLX0KLQotLSAodm9pZClzZXRUcmVlOihUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2Jq
ZWN0MSAqKXRyZWUKLXsKLSAgICBbc3VwZXIgc2V0T2JqZWN0OnRyZWUgZm9yS2V5OkAidHJlZSJd
OwotfQotCi0tIChUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSAqKXRyZWUKLXsKLSAg
ICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9iamVjdCA9IFtzdXBlciBvYmplY3RGb3JLZXk6QCJ0
cmVlIl07Ci0gICAgaWYgKCFvYmplY3QpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgcmV0dXJu
IFtbVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgYWxsb2NdIGluaXRXaXRoSlNPTk9i
amVjdDpbW3N1cGVyIG9iamVjdEZvcktleTpAInRyZWUiXSB0b0pTT05PYmplY3RdLmdldCgpXTsK
LX0KLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9i
amVjdDEKLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rp
b25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZAotewotICAgIGlmICghKHNlbGYgPSBbc3Vw
ZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgc2VsZi5vYmogPSBbW1Rlc3RQ
cm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QyIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9h
ZFtAIm9iaiJdXTsKLQotICAgIHJldHVybiBzZWxmOwotfQotLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9iamVjdAotewotICAg
IGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmplY3QgdG9KU09OT2Jq
ZWN0XS5nZXQoKV0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19
Ci0KLS0gKHZvaWQpc2V0T2JqOihUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MiAqKW9i
agotewotICAgIFtzdXBlciBzZXRPYmplY3Q6b2JqIGZvcktleTpAIm9iaiJdOwotfQotCi0tIChU
ZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MiAqKW9iagotewotICAgIFJXSVByb3RvY29s
SlNPTk9iamVjdCAqb2JqZWN0ID0gW3N1cGVyIG9iamVjdEZvcktleTpAIm9iaiJdOwotICAgIGlm
ICghb2JqZWN0KQotICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiBbW1Rlc3RQcm90b2Nv
bFRlc3RSZWN1cnNpdmVPYmplY3QyIGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6W1tzdXBlciBv
YmplY3RGb3JLZXk6QCJvYmoiXSB0b0pTT05PYmplY3RdLmdldCgpXTsKLX0KLQotQGVuZAotCi1A
aW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDIKLQotLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcg
KiwgaWQ+ICopcGF5bG9hZAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAg
ICAgICByZXR1cm4gbmlsOwotCi0gICAgc2VsZi5vYmogPSBbW1Rlc3RQcm90b2NvbFRlc3RSZWN1
cnNpdmVPYmplY3QxIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZFtAIm9iaiJdXTsKLQot
ICAgIHJldHVybiBzZWxmOwotfQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmpl
Y3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9iamVjdAotewotICAgIGlmICghKHNlbGYgPSBb
c3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmplY3QgdG9KU09OT2JqZWN0XS5nZXQoKV0pKQot
ICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpc2V0
T2JqOihUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSAqKW9iagotewotICAgIFtzdXBl
ciBzZXRPYmplY3Q6b2JqIGZvcktleTpAIm9iaiJdOwotfQotCi0tIChUZXN0UHJvdG9jb2xUZXN0
UmVjdXJzaXZlT2JqZWN0MSAqKW9iagotewotICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb2Jq
ZWN0ID0gW3N1cGVyIG9iamVjdEZvcktleTpAIm9iaiJdOwotICAgIGlmICghb2JqZWN0KQotICAg
ICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiBbW1Rlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVP
YmplY3QxIGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6W1tzdXBlciBvYmplY3RGb3JLZXk6QCJv
YmoiXSB0b0pTT05PYmplY3RdLmdldCgpXTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtd2l0aC1vcGVuLXBh
cmFtZXRlcnMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC90eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpz
b24tcmVzdWx0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNDMwZWRlNTA4Yi4uMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2dlbmVyaWMvZXhwZWN0ZWQvdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uLXJlc3Vs
dAorKysgL2Rldi9udWxsCkBAIC0xLDExNjQgKzAsMCBAQAotIyMjIEJlZ2luIEZpbGU6IEluc3Bl
Y3RvckJhY2tlbmRDb21tYW5kcy5qcwotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMu
anMKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRl
cnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJh
Z21hIG9uY2UKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQot
Ci0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1j
bGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBzZXRC
YWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikg
eyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQotICAgIEJhY2tl
bmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2Vu
ZERpc3BhdGNoZXIuZ2V0KCk7IH0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPEJhY2tlbmREaXNwYXRj
aGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwotfTsKLQotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKLSMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMj
IyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNs
dWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5n
OwotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNr
ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVy
cy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXdpdGgtb3Blbi1w
YXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMu
aCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+
Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95
ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNpZiBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2Vu
ZERpc3BhdGNoZXJzLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi19
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3Bh
dGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRl
cnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJh
Z21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDx3
dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1l
c3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgRnJvbnRlbmRSb3V0ZXI7Ci0KLX0gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAot
Ci0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUg
PHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotbmFtZXNw
YWNlIFByb3RvY29sIHsKLQotCi0KLS8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgotbmFtZXNwYWNl
IFRlc3QgewotY2xhc3MgTm9PcGVuUGFyYW1ldGVyczsKLWNsYXNzIE9wZW5QYXJhbWV0ZXJzOwot
fSAvLyBUZXN0Ci0vLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCi0KLQotCi0KLW5hbWVz
cGFjZSBUZXN0IHsKLWNsYXNzIE5vT3BlblBhcmFtZXRlcnMgOiBwdWJsaWMgSlNPTjo6T2JqZWN0
QmFzZSB7Ci1wdWJsaWM6Ci0gICAgZW51bSB7Ci0gICAgICAgIE5vRmllbGRzU2V0ID0gMCwKLSAg
ICAgICAgT25lU2V0ID0gMSA8PCAwLAotICAgICAgICBUd29TZXQgPSAxIDw8IDEsCi0gICAgICAg
IEFsbEZpZWxkc1NldCA9IChPbmVTZXQgfCBUd29TZXQpCi0gICAgfTsKLQotICAgIHRlbXBsYXRl
PGludCBTVEFURT4KLSAgICBjbGFzcyBCdWlsZGVyIHsKLSAgICBwcml2YXRlOgotICAgICAgICBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiBtX3Jlc3VsdDsKLQotICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RF
UD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhp
cyk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyKFJlZjwvKk5vT3BlblBhcmFtZXRlcnMq
L0pTT046Ok9iamVjdD4mJiBvYmplY3QpCi0gICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUo
b2JqZWN0KSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0g
Tm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7Ci0gICAgICAg
IH0KLSAgICAgICAgZnJpZW5kIGNsYXNzIE5vT3BlblBhcmFtZXRlcnM7Ci0gICAgcHVibGljOgot
Ci0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBPbmVTZXQ+JiBzZXRPbmUoZG91YmxlIHZhbHVlKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgT25lU2V0KSwg
cHJvcGVydHlfb25lX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXREb3Vi
bGUoIm9uZSJfcywgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxPbmVTZXQ+
KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVHdvU2V0PiYgc2V0VHdv
KGRvdWJsZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIFR3b1NldCksIHByb3BlcnR5X3R3b19hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0RG91YmxlKCJ0d28iX3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8VHdvU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgUmVmPE5vT3BlblBhcmFt
ZXRlcnM+IHJlbGVhc2UoKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChT
VEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwotICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoc2l6ZW9mKE5vT3BlblBhcmFtZXRlcnMpID09IHNpemVvZihKU09OOjpP
YmplY3QpLCBjYW5ub3RfY2FzdCk7Ci0KLSAgICAgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IGpz
b25SZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOwotICAgICAgICAgICAgYXV0byBy
ZXN1bHQgPSBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxOb09wZW5QYXJhbWV0ZXJzPio+
KCZqc29uUmVzdWx0KSk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0g
ICAgfTsKLQotICAgIC8qCi0gICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgotICAgICAqIFJl
ZjxOb09wZW5QYXJhbWV0ZXJzPiByZXN1bHQgPSBOb09wZW5QYXJhbWV0ZXJzOjpjcmVhdGUoKQot
ICAgICAqICAgICAuc2V0T25lKC4uLikKLSAgICAgKiAgICAgLnNldFR3byguLi4pCi0gICAgICog
ICAgIC5yZWxlYXNlKCk7Ci0gICAgICovCi0gICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+
IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKSk7Ci0gICAgfQotfTsKLQotY2xhc3MgT3BlblBhcmFtZXRlcnMg
OiBwdWJsaWMgSlNPTjo6T2JqZWN0IHsKLXB1YmxpYzoKLSAgICBlbnVtIHsKLSAgICAgICAgTm9G
aWVsZHNTZXQgPSAwLAotICAgICAgICBBbHBoYVNldCA9IDEgPDwgMCwKLSAgICAgICAgQmV0YVNl
dCA9IDEgPDwgMSwKLSAgICAgICAgQWxsRmllbGRzU2V0ID0gKEFscGhhU2V0IHwgQmV0YVNldCkK
LSAgICB9OwotCi0gICAgdGVtcGxhdGU8aW50IFNUQVRFPgotICAgIGNsYXNzIEJ1aWxkZXIgewot
ICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVzdWx0OwotCi0g
ICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0
ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWls
ZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXIo
UmVmPC8qT3BlblBhcmFtZXRlcnMqL0pTT046Ok9iamVjdD4mJiBvYmplY3QpCi0gICAgICAgICAg
ICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25f
aW5pdF9zdGF0ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZnJpZW5kIGNsYXNzIE9wZW5QYXJhbWV0
ZXJzOwotICAgIHB1YmxpYzoKLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQWxwaGFTZXQ+JiBz
ZXRBbHBoYShkb3VibGUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBBbHBoYVNldCksIHByb3BlcnR5X2FscGhhX2FscmVhZHlfc2V0KTsKLSAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXREb3VibGUoImFscGhhIl9zLCB2YWx1ZSk7Ci0gICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPEFscGhhU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAg
QnVpbGRlcjxTVEFURSB8IEJldGFTZXQ+JiBzZXRCZXRhKGRvdWJsZSB2YWx1ZSkKLSAgICAgICAg
ewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEJldGFTZXQpLCBwcm9wZXJ0
eV9iZXRhX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXREb3VibGUoImJl
dGEiX3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8QmV0YVNldD4oKTsK
LSAgICAgICAgfQotCi0gICAgICAgIFJlZjxPcGVuUGFyYW1ldGVycz4gcmVsZWFzZSgpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwg
cmVzdWx0X2lzX25vdF9yZWFkeSk7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2Yo
T3BlblBhcmFtZXRlcnMpID09IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7Ci0K
LSAgICAgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25SZXN1bHQgPSBtX3Jlc3VsdC5yZWxl
YXNlTm9uTnVsbCgpOwotICAgICAgICAgICAgYXV0byByZXN1bHQgPSBXVEZNb3ZlKCpyZWludGVy
cHJldF9jYXN0PFJlZjxPcGVuUGFyYW1ldGVycz4qPigmanNvblJlc3VsdCkpOwotICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICAvKgotICAgICAqIFN5
bnRoZXRpYyBjb25zdHJ1Y3RvcjoKLSAgICAgKiBSZWY8T3BlblBhcmFtZXRlcnM+IHJlc3VsdCA9
IE9wZW5QYXJhbWV0ZXJzOjpjcmVhdGUoKQotICAgICAqICAgICAuc2V0QWxwaGEoLi4uKQotICAg
ICAqICAgICAuc2V0QmV0YSguLi4pCi0gICAgICogICAgIC5yZWxlYXNlKCk7Ci0gICAgICovCi0g
ICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICBy
ZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7Ci0gICAg
fQotCi0gICAgLy8gUHJvcGVydHkgbmFtZXMgZm9yIHR5cGUgZ2VuZXJhdGVkIGFzIG9wZW4uCi0g
ICAgTm9uZSBzdGF0aWMgY29uc3QgY2hhciogQWxwaGE7Ci19OwotCi19IC8vIFRlc3QKLQotCi0K
LX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbE9iamVjdHMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlw
ZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9j
b2xPYmplY3RzLmgiCi0KLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1uYW1lc3BhY2UgUHJv
dG9jb2wgewotCi1jb25zdCBjaGFyKiBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpPcGVuUGFy
YW1ldGVyczo6QWxwaGEgPSAiYWxwaGEiOwotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmpl
Y3RzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJz
LmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXdpdGgtb3Blbi1wYXJh
bWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVycy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQotCi0KLW5hbWVzcGFjZSBJbnNw
ZWN0b3IgewotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSB0eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0
UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbElu
dGVybmFsLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW5j
bHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLX0gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmRE
aXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
bi5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRoLW9wZW4tcGFy
YW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KLQotX19hdHRyaWJ1dGVfXygo
dmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3Vy
YXRpb24gOiBOU09iamVjdAotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29u
ZmlndXJhdGlvbi5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9u
Lm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRoLW9wZW4tcGFy
YW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKLQotI2ltcG9ydCAiVGVzdFBy
b3RvY29sSW50ZXJuYWwuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVy
cy5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQu
aD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxl
ci5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERp
c3BhdGNoZXJzLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcnMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGltcGxlbWVudGF0
aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KLXsKLSAgICBBdWdtZW50YWJsZUluc3BlY3Rv
ckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhD
b250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsK
LSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJu
IG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250cm9s
bGVyOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBbc3Vw
ZXIgZGVhbGxvY107Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENv
bmZpZ3VyYXRpb24ubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0
Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXdpdGgtb3Bl
bi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11
c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
RXZlbnREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJz
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9y
dCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQ
cm90b2NvbEpTT05PYmplY3QuaD4KLQotCi1AY2xhc3MgVGVzdFByb3RvY29sVGVzdE5vT3BlblBh
cmFtZXRlcnM7Ci1AY2xhc3MgVGVzdFByb3RvY29sVGVzdE9wZW5QYXJhbWV0ZXJzOwotCi10eXBl
ZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xQbGF0Zm9ybSkgewotICAgIFRlc3RQ
cm90b2NvbFBsYXRmb3JtQWxsLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYywKLSAg
ICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09T
LAotfTsKLQotCi0KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1A
aW50ZXJmYWNlIFRlc3RQcm90b2NvbFRlc3ROb09wZW5QYXJhbWV0ZXJzIDogUldJUHJvdG9jb2xK
U09OT2JqZWN0Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8
TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3Rv
Y29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OwotLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoT25lOihkb3VibGUpb25lIHR3bzooZG91YmxlKXR3bzsKLS8qIHJlcXVp
cmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGRvdWJsZSBvbmU7Ci0vKiByZXF1
aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBkb3VibGUgdHdvOwotQGVuZAot
Ci1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVz
dFByb3RvY29sVGVzdE9wZW5QYXJhbWV0ZXJzIDogUldJUHJvdG9jb2xKU09OT2JqZWN0Ci0tIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+
ICopcGF5bG9hZDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQ
cm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
QWxwaGE6KGRvdWJsZSlhbHBoYSBiZXRhOihkb3VibGUpYmV0YTsKLS8qIHJlcXVpcmVkICovIEBw
cm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGRvdWJsZSBhbHBoYTsKLS8qIHJlcXVpcmVkICov
IEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGRvdWJsZSBiZXRhOwotQGVuZAotCi0KLQot
Ci0KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5
T2JqZWN0cy5oPgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9y
dCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRD
b3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8d3RmL0pTT05W
YWx1ZXMuaD4KLQotCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0
UHJvdG9jb2wuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVy
c2lvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9i
akNFbnVtVHlwZT4KLU9wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNv
bnN0IFN0cmluZyYgdmFsdWUpOwotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVz
dFByb3RvY29sUGxhdGZvcm0gdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2Fz
ZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDoKLSAgICAgICAgcmV0dXJuICJhbGwiX3M7Ci0gICAg
Y2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM6Ci0gICAgICAgIHJldHVybiAiZ2VuZXJp
YyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOgotICAgICAgICByZXR1cm4g
ImlvcyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M6Ci0gICAgICAgIHJl
dHVybiAibWFjb3MiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8
VGVzdFByb3RvY29sUGxhdGZvcm0+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZh
bHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiYWxsIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90
b2NvbFBsYXRmb3JtQWxsOwotICAgIGlmICh2YWx1ZSA9PSAiZ2VuZXJpYyIpCi0gICAgICAgIHJl
dHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM7Ci0gICAgaWYgKHZhbHVlID09ICJpb3Mi
KQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1JT1M7Ci0gICAgaWYgKHZhbHVl
ID09ICJtYWNvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOwot
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBv
cnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQ
cm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7
Ci0KLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChUZXN0RG9tYWluKQot
Ci0rICh2b2lkKV9wYXJzZU5vT3BlblBhcmFtZXRlcnM6KFRlc3RQcm90b2NvbFRlc3ROb09wZW5Q
YXJhbWV0ZXJzICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotKyAodm9pZClf
cGFyc2VPcGVuUGFyYW1ldGVyczooVGVzdFByb3RvY29sVGVzdE9wZW5QYXJhbWV0ZXJzICoqKW91
dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlv
biBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFRlc3REb21haW4pCi0KLSsgKHZvaWQpX3Bh
cnNlTm9PcGVuUGFyYW1ldGVyczooVGVzdFByb3RvY29sVGVzdE5vT3BlblBhcmFtZXRlcnMgKiop
b3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05f
Rk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKLSAgICAqb3V0VmFs
dWUgPSBbW1Rlc3RQcm90b2NvbFRlc3ROb09wZW5QYXJhbWV0ZXJzIGFsbG9jXSBpbml0V2l0aFBh
eWxvYWQ6cGF5bG9hZF07Ci19Ci0KLSsgKHZvaWQpX3BhcnNlT3BlblBhcmFtZXRlcnM6KFRlc3RQ
cm90b2NvbFRlc3RPcGVuUGFyYW1ldGVycyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5
bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGlj
dGlvbmFyeSBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sVGVzdE9wZW5Q
YXJhbWV0ZXJzIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07Ci19Ci0KLUBlbmQKLQot
Ci0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSB0eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwu
aCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDxX
ZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotI2ltcG9ydCA8d3Rm
L0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVz
cGFjZSBJbnNwZWN0b3I7Ci0KLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFRlc3ROb09w
ZW5QYXJhbWV0ZXJzCi0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwg
TlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQKLXsKLSAgICBpZiAoIShzZWxm
ID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAIm9uZSJdLCBAIm9uZSIpOwotICAg
IHNlbGYub25lID0gW3BheWxvYWRbQCJvbmUiXSBkb3VibGVWYWx1ZV07Ci0KLSAgICBUSFJPV19F
WENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJ0d28iXSwgQCJ0d28iKTsK
LSAgICBzZWxmLnR3byA9IFtwYXlsb2FkW0AidHdvIl0gZG91YmxlVmFsdWVdOwotCi0gICAgcmV0
dXJuIHNlbGY7Ci19Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICopb2JqZWN0Ci17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBp
bml0V2l0aEpTT05PYmplY3Q6W29iamVjdCB0b0pTT05PYmplY3RdLmdldCgpXSkpCi0gICAgICAg
IHJldHVybiBuaWw7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoT25lOihkb3VibGUpb25lIHR3bzooZG91YmxlKXR3bwotewotICAgIGlmICghKHNlbGYg
PSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgc2VsZi5vbmUgPSBv
bmU7Ci0gICAgc2VsZi50d28gPSB0d287Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9p
ZClzZXRPbmU6KGRvdWJsZSlvbmUKLXsKLSAgICBbc3VwZXIgc2V0RG91YmxlOm9uZSBmb3JLZXk6
QCJvbmUiXTsKLX0KLQotLSAoZG91YmxlKW9uZQotewotICAgIHJldHVybiBbc3VwZXIgZG91Ymxl
Rm9yS2V5OkAib25lIl07Ci19Ci0KLS0gKHZvaWQpc2V0VHdvOihkb3VibGUpdHdvCi17Ci0gICAg
W3N1cGVyIHNldERvdWJsZTp0d28gZm9yS2V5OkAidHdvIl07Ci19Ci0KLS0gKGRvdWJsZSl0d28K
LXsKLSAgICByZXR1cm4gW3N1cGVyIGRvdWJsZUZvcktleTpAInR3byJdOwotfQotCi1AZW5kCi0K
LUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUZXN0T3BlblBhcmFtZXRlcnMKLQotLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcg
KiwgaWQ+ICopcGF5bG9hZAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAg
ICAgICByZXR1cm4gbmlsOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9Q
RVJUWShwYXlsb2FkW0AiYWxwaGEiXSwgQCJhbHBoYSIpOwotICAgIHNlbGYuYWxwaGEgPSBbcGF5
bG9hZFtAImFscGhhIl0gZG91YmxlVmFsdWVdOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9S
RVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiYmV0YSJdLCBAImJldGEiKTsKLSAgICBzZWxmLmJl
dGEgPSBbcGF5bG9hZFtAImJldGEiXSBkb3VibGVWYWx1ZV07Ci0KLSAgICByZXR1cm4gc2VsZjsK
LX0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpT
T05PYmplY3QgKilvYmplY3QKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoSlNP
Tk9iamVjdDpbb2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0KCldKSkKLSAgICAgICAgcmV0dXJuIG5p
bDsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhBbHBo
YTooZG91YmxlKWFscGhhIGJldGE6KGRvdWJsZSliZXRhCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtz
dXBlciBpbml0XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBzZWxmLmFscGhhID0gYWxw
aGE7Ci0gICAgc2VsZi5iZXRhID0gYmV0YTsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2
b2lkKXNldEFscGhhOihkb3VibGUpYWxwaGEKLXsKLSAgICBbc3VwZXIgc2V0RG91YmxlOmFscGhh
IGZvcktleTpAImFscGhhIl07Ci19Ci0KLS0gKGRvdWJsZSlhbHBoYQotewotICAgIHJldHVybiBb
c3VwZXIgZG91YmxlRm9yS2V5OkAiYWxwaGEiXTsKLX0KLQotLSAodm9pZClzZXRCZXRhOihkb3Vi
bGUpYmV0YQotewotICAgIFtzdXBlciBzZXREb3VibGU6YmV0YSBmb3JLZXk6QCJiZXRhIl07Ci19
Ci0KLS0gKGRvdWJsZSliZXRhCi17Ci0gICAgcmV0dXJuIFtzdXBlciBkb3VibGVGb3JLZXk6QCJi
ZXRhIl07Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1t
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZ2VuZXJpYy9leHBlY3RlZC92ZXJzaW9uLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvdmVyc2lvbi5q
c29uLXJlc3VsdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDRlODdkYzQ3MzkuLjAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3ZlcnNpb24uanNvbi1yZXN1bHQKKysrIC9kZXYvbnVsbApA
QCAtMSw4ODAgKzAsMCBAQAotIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5k
cy5qcwotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHZlcnNpb24uanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0vLyBWZXJzaW9uRG9tYWlu
Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJWZXJzaW9uRG9tYWluIiwgbnVsbCk7
Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyVmVyc2lvbigiVmVyc2lvbkRvbWFpbiIsIDQyKTsK
LUluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIlZlcnNpb25Eb21haW4iLCBudWxsKTsK
LSMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCi0j
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotCi1uYW1l
c3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewot
cHVibGljOgotICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNw
YXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlz
cGF0Y2hlcik7IH0KLSAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBj
b25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Ci1wcml2YXRlOgotICAg
IFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKLX07Ci0KLQot
Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVy
cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lvbi5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0j
aW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10eXBlZGVmIFN0cmluZyBFcnJvclN0
cmluZzsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0
QmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0
Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lvbi5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0
Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCi0jaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5o
IgotI2VuZGlmCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLQot
IyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9j
b2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEZyb250
ZW5kUm91dGVyOwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVz
dEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlz
cGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lvbi5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgotCi0jaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi19IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVy
cy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHZlcnNpb24uanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0
aW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLW5hbWVzcGFjZSBQcm90b2Nv
bCB7Ci0KLS8vIFZlcnNpb25zLgotbmFtZXNwYWNlIFZlcnNpb25Eb21haW4gewotc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBWRVJTSU9OID0gNDI7Ci19IC8vIFZlcnNpb25Eb21haW4KLS8vIEVu
ZCBvZiB2ZXJzaW9ucy4KLQotCi0KLQotCi0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAot
Ci19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2Jq
ZWN0cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHZlcnNpb24uanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQot
bmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVj
dHMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMu
aAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHZlcnNpb24uanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW5jbHVkZSA8
d3RmL1JldGFpblB0ci5oPgotCi0KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERp
c3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRj
aGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHZlcnNpb24uanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25m
aWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5j
bHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotCi1uYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSB2ZXJzaW9uLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgotCi1fX2F0dHJpYnV0ZV9f
KCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbiA6IE5TT2JqZWN0Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xD
b25maWd1cmF0aW9uLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRp
b24ubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbi5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5o
IgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jaW1wb3J0IDxK
YXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgotI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgotCi11
c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2Nv
bnRyb2xsZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21l
bnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3Vw
ZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VS
VChjb250cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJu
IHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0K
LQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQot
Ci0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHZlcnNpb24uanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5h
bC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQg
PHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2wuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHZl
cnNpb24uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0j
aW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9y
L1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgotCi0KLQotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRl
Z2VyLCBUZXN0UHJvdG9jb2xQbGF0Zm9ybSkgewotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxs
LAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYywKLSAgICBUZXN0UHJvdG9jb2xQbGF0
Zm9ybUlPUywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TLAotfTsKLQotCi0KLQotCi0K
LQotCi0KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmls
aXR5T2JqZWN0cy5oPgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gdmVyc2lvbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29s
SlNPTk9iamVjdFByaXZhdGUuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxl
SW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotCi0K
LQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHZlcnNpb24uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rv
ci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KLU9wdGlvbmFsPE9iakNFbnVtVHlw
ZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOwotCi1pbmxpbmUgU3Ry
aW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sUGxhdGZvcm0gdmFsdWUpCi17Ci0gICAg
c3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDoKLSAgICAg
ICAgcmV0dXJuICJhbGwiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM6
Ci0gICAgICAgIHJldHVybiAiZ2VuZXJpYyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRm
b3JtSU9TOgotICAgICAgICByZXR1cm4gImlvcyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBs
YXRmb3JtTWFjT1M6Ci0gICAgICAgIHJldHVybiAibWFjb3MiX3M7Ci0gICAgfQotfQotCi10ZW1w
bGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sUGxhdGZvcm0+IGZyb21Qcm90b2Nv
bFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiYWxsIikK
LSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOwotICAgIGlmICh2YWx1ZSA9
PSAiZ2VuZXJpYyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM7
Ci0gICAgaWYgKHZhbHVlID09ICJpb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxh
dGZvcm1JT1M7Ci0gICAgaWYgKHZhbHVlID09ICJtYWNvcyIpCi0gICAgICAgIHJldHVybiBUZXN0
UHJvdG9jb2xQbGF0Zm9ybU1hY09TOwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2lt
cG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JX
SVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3Rv
cjsKLQotCi0KLQotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
Lm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHZlcnNpb24uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgot
Ci0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPFdlYklu
c3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0jaW1wb3J0IDx3dGYvQXNz
ZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNl
IEluc3BlY3RvcjsKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2Vu
ZXJpYy9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJs
ZVR5cGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9nZW5lcmljL2ZhaWwtb24tY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1
Z2dhYmxlVHlwZS5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNmRmOWU0YmQ5
Yy4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1jb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9t
YWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLVsK
LXsKLSAgICAiZG9tYWluIjogIkRvbWFpbiIsCi0gICAgImRlYnVnZ2FibGVUeXBlcyI6IFsiamF2
YXNjcmlwdCJdLAotICAgICJ0YXJnZXRUeXBlcyI6IFsid29ya2VyIl0sCi0gICAgImNvbW1hbmRz
IjogW3sibmFtZSI6ICJDb21tYW5kIn1dLAotICAgICJldmVudHMiOiBbeyJuYW1lIjogIkV2ZW50
In1dCi19Ci1dCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlwZXMtdHlwZS5qc29u
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMv
ZmFpbC1vbi1jb21tYW5kLXRhcmdldFR5cGVzLXR5cGUuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNjQwNTlmODRiY2YuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tY29tbWFuZC10
YXJnZXRUeXBlcy10eXBlLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLXsKLSAg
ICAiZG9tYWluIjogIkRvbWFpbiIsCi0gICAgImNvbW1hbmRzIjogWwotICAgICAgICB7Ci0gICAg
ICAgICAgICAibmFtZSI6ICJQYWdlT25seSIsCi0gICAgICAgICAgICAidGFyZ2V0VHlwZXMiOiAi
cGFnZWUiCi0gICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWNvbW1hbmQtdGFy
Z2V0VHlwZXMtdmFsdWUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tY29tbWFuZC10YXJnZXRUeXBlcy12YWx1ZS5qc29u
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MDIwNDQ3MmVjOC4uMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVy
aWMvZmFpbC1vbi1jb21tYW5kLXRhcmdldFR5cGVzLXZhbHVlLmpzb24KKysrIC9kZXYvbnVsbApA
QCAtMSw5ICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIkRvbWFpbiIsCi0gICAgImNvbW1hbmRz
IjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJQYWdlT25seSIsCi0gICAgICAg
ICAgICAidGFyZ2V0VHlwZXMiOiBbInBhZ2VlIl0KLSAgICAgICAgfQotICAgIF0KLX0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmljL2ZhaWwtb24tY29tbWFuZC13aXRoLWludmFsaWQtcGxhdGZvcm0uanNvbiBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tY29t
bWFuZC13aXRoLWludmFsaWQtcGxhdGZvcm0uanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggYTE4MGNhZTliZmYuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tY29tbWFuZC13aXRoLWlu
dmFsaWQtcGxhdGZvcm0uanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLXsKLSAg
ICAiZG9tYWluIjogIk92ZXJsYXkiLAotICAgICJjb21tYW5kcyI6IFsKLSAgICAgICAgewotICAg
ICAgICAgICAgIm5hbWUiOiAicHJvY2Vzc1BvaW50cyIsCi0gICAgICAgICAgICAicGxhdGZvcm0i
OiAiaW52YWxpZCIsCi0gICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKLSAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInBvaW50MSIsICJ0eXBlIjogIm51bWJlciIgfSwKLSAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInBvaW50MiIsICJ0eXBlIjogIm51bWJlciIgfQotICAgICAgICAgICAgXSwK
LSAgICAgICAgICAgICJyZXR1cm5zIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicmVz
dWx0IiwgInR5cGUiOiAic3RyaW5nIiB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0KLSAgICBd
Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMtdHlwZS5qc29uIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFp
bC1vbi1kb21haW4tZGVidWdnYWJsZVR5cGVzLXR5cGUuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggOTc0OGY0MjM0NzMuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZG9tYWluLWRl
YnVnZ2FibGVUeXBlcy10eXBlLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLXsK
LSAgICAiZG9tYWluIjogIldlYk9ubHkiLAotICAgICJkZWJ1Z2dhYmxlVHlwZXMiOiAid2ViYiIs
Ci0gICAgImNvbW1hbmRzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJlbmFi
bGUiCi0gICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWRvbWFpbi1kZWJ1Z2dh
YmxlVHlwZXMtdmFsdWUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZG9tYWluLWRlYnVnZ2FibGVUeXBlcy12YWx1ZS5q
c29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMjUyZGRiZDgzZC4uMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvZmFpbC1vbi1kb21haW4tZGVidWdnYWJsZVR5cGVzLXZhbHVlLmpzb24KKysrIC9kZXYv
bnVsbApAQCAtMSw5ICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIldlYk9ubHkiLAotICAgICJk
ZWJ1Z2dhYmxlVHlwZXMiOiBbIndlYmIiXSwKLSAgICAiY29tbWFuZHMiOiBbCi0gICAgICAgIHsK
LSAgICAgICAgICAgICJuYW1lIjogImVuYWJsZSIKLSAgICAgICAgfQotICAgIF0KLX0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmljL2ZhaWwtb24tZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVU
eXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJpYy9mYWlsLW9uLWRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dh
YmxlVHlwZS5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YWEwMjgwNDY1Ny4u
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4t
ZGVidWdnYWJsZVR5cGUuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotWwotewot
ICAgICJkb21haW4iOiAiRG9tYWluIiwKLSAgICAiZGVidWdnYWJsZVR5cGVzIjogWyJqYXZhc2Ny
aXB0Il0sCi0gICAgImNvbW1hbmRzIjogW3sibmFtZSI6ICJDb21tYW5kIiwgInRhcmdldFR5cGVz
IjogWyJ3b3JrZXIiXX1dLAotICAgICJldmVudHMiOiBbeyJuYW1lIjogIkV2ZW50In1dCi19Ci1d
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZ2VuZXJpYy9mYWlsLW9uLWRvbWFpbi10YXJnZXRUeXBlcy10eXBlLmpzb24gYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWRv
bWFpbi10YXJnZXRUeXBlcy10eXBlLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGQ4MjIyNjc0MTQ2Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWRvbWFpbi10YXJnZXRUeXBlcy10
eXBlLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjog
IlBhZ2VPbmx5IiwKLSAgICAidGFyZ2V0VHlwZXMiOiAicGFnZWUiLAotICAgICJjb21tYW5kcyI6
IFsKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiZW5hYmxlIgotICAgICAgICB9Ci0g
ICAgXQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZXMtdmFsdWUuanNvbiBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2Zh
aWwtb24tZG9tYWluLXRhcmdldFR5cGVzLXZhbHVlLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGU3YjEwZDdmMTU0Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWRvbWFpbi10YXJn
ZXRUeXBlcy12YWx1ZS5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi17Ci0gICAg
ImRvbWFpbiI6ICJQYWdlT25seSIsCi0gICAgInRhcmdldFR5cGVzIjogWyJwYWdlZSJdLAotICAg
ICJjb21tYW5kcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiZW5hYmxlIgot
ICAgICAgICB9Ci0gICAgXQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1j
YWxsLXBhcmFtZXRlci1uYW1lcy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1jYWxsLXBh
cmFtZXRlci1uYW1lcy5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYWI3NmNh
NjI3OS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1jYWxsLXBhcmFt
ZXRlci1uYW1lcy5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotewotICAgICJk
b21haW4iOiAiT3ZlcmxheSIsCi0gICAgImNvbW1hbmRzIjogWwotICAgICAgICB7Ci0gICAgICAg
ICAgICAibmFtZSI6ICJwcm9jZXNzUG9pbnRzIiwKLSAgICAgICAgICAgICJwYXJhbWV0ZXJzIjog
WwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicG9pbnQiLCAidHlwZSI6ICJudW1iZXIiIH0s
Ci0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwb2ludCIsICJ0eXBlIjogIm51bWJlciIgfQot
ICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJyZXR1cm5zIjogWwotICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAicmVzdWx0MSIsICJ0eXBlIjogInN0cmluZyIgfSwKLSAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInJlc3VsdDIiLCAidHlwZSI6ICJzdHJpbmciIH0KLSAgICAgICAgICAgIF0K
LSAgICAgICAgfQotICAgIF0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZHVwbGljYXRlLWNvbW1hbmQt
cmV0dXJuLXBhcmFtZXRlci1uYW1lcy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1yZXR1
cm4tcGFyYW1ldGVyLW5hbWVzLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4
YmIxNWMwNGI2Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWR1cGxpY2F0ZS1jb21tYW5kLXJldHVy
bi1wYXJhbWV0ZXItbmFtZXMuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLXsK
LSAgICAiZG9tYWluIjogIk92ZXJsYXkiLAotICAgICJjb21tYW5kcyI6IFsKLSAgICAgICAgewot
ICAgICAgICAgICAgIm5hbWUiOiAicHJvY2Vzc1BvaW50cyIsCi0gICAgICAgICAgICAicGFyYW1l
dGVycyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBvaW50MSIsICJ0eXBlIjogIm51
bWJlciIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBvaW50MiIsICJ0eXBlIjogIm51
bWJlciIgfQotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJyZXR1cm5zIjogWwotICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAicmVzdWx0IiwgInR5cGUiOiAic3RyaW5nIiB9LAotICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAicmVzdWx0IiwgInR5cGUiOiAic3RyaW5nIiB9Ci0gICAgICAg
ICAgICBdCi0gICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWR1cGxpY2F0ZS1l
dmVudC1wYXJhbWV0ZXItbmFtZXMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZHVwbGljYXRlLWV2ZW50LXBhcmFtZXRl
ci1uYW1lcy5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkM2QzYjNjYzY0Mi4u
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kdXBsaWNhdGUtZXZlbnQtcGFyYW1ldGVyLW5hbWVzLmpz
b24KKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi17Ci0gICAgImRvbWFpbiI6ICJPdmVy
bGF5IiwKLSAgICAiZXZlbnRzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJw
cm9jZXNzZWRQb2ludHMiLAotICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCi0gICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJwb2ludCIsICJ0eXBlIjogIm51bWJlciIgfSwKLSAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInBvaW50IiwgInR5cGUiOiAibnVtYmVyIiB9Ci0gICAgICAgICAgICBd
Ci0gICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLWRl
Y2xhcmF0aW9ucy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1kZWNsYXJhdGlvbnMuanNvbgpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzAyZmM2YTMyNzAuLjAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2ZhaWwtb24tZHVwbGljYXRlLXR5cGUtZGVjbGFyYXRpb25zLmpzb24KKysrIC9kZXYvbnVsbApA
QCAtMSwxNSArMCwwIEBACi17Ci0gICAgImRvbWFpbiI6ICJSdW50aW1lIiwKLSAgICAidHlwZXMi
OiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJSZW1vdGVPYmplY3RJZCIsCi0gICAg
ICAgICAgICAidHlwZSI6ICJzdHJpbmciLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVu
aXF1ZSBvYmplY3QgaWRlbnRpZmllci4iCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAg
ICAgICJpZCI6ICJSZW1vdGVPYmplY3RJZCIsCi0gICAgICAgICAgICAidHlwZSI6ICJzdHJpbmci
LAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4i
Ci0gICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLW1l
bWJlci1uYW1lcy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1tZW1iZXItbmFtZXMuanNvbgpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWViYWNlZThiMjMuLjAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2ZhaWwtb24tZHVwbGljYXRlLXR5cGUtbWVtYmVyLW5hbWVzLmpzb24KKysrIC9kZXYvbnVsbApA
QCAtMSwxNSArMCwwIEBACi1bCi17Ci0gICAgImRvbWFpbiI6ICJPdmVybGF5VHlwZXMiLAotICAg
ICJ0eXBlcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIlBvaW50IiwKLSAgICAg
ICAgICAgICJ0eXBlIjogIm9iamVjdCIsCi0gICAgICAgICAgICAicHJvcGVydGllcyI6IFsKLSAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogIngiLCAidHlwZSI6ICJpbnRlZ2VyIiB9LAotICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAieCIsICJ0eXBlIjogImludGVnZXIiIH0KLSAgICAgICAgICAg
IF0KLSAgICAgICAgfQotICAgIF0KLX0KLV0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZW51bS13aXRoLW5v
LXZhbHVlcy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2dlbmVyaWMvZmFpbC1vbi1lbnVtLXdpdGgtbm8tdmFsdWVzLmpzb24KZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDIzMmE3YzMyNDlhLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWVu
dW0td2l0aC1uby12YWx1ZXMuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLXsK
LSAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAg
ICAgICAgICAgICJpZCI6ICJQcmltYXJ5Q29sb3JzIiwKLSAgICAgICAgICAgICJ0eXBlIjogInN0
cmluZyIsCi0gICAgICAgICAgICAiZW51bSI6IFtdCi0gICAgICAgIH0KLSAgICBdCi19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2Vu
ZXJpYy9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVU
eXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJpYy9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2Fi
bGVUeXBlLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxMzJjZTA4ODI4Li4w
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRl
YnVnZ2FibGVUeXBlLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLVsKLXsKLSAg
ICAiZG9tYWluIjogIkRvbWFpbiIsCi0gICAgImRlYnVnZ2FibGVUeXBlcyI6IFsiamF2YXNjcmlw
dCJdLAotICAgICJjb21tYW5kcyI6IFt7Im5hbWUiOiAiQ29tbWFuZCJ9XSwKLSAgICAiZXZlbnRz
IjogW3sibmFtZSI6ICJFdmVudCIsICJ0YXJnZXRUeXBlcyI6IFsid29ya2VyIl19XQotfQotXQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvZmFpbC1vbi1ldmVudC10YXJnZXRUeXBlcy10eXBlLmpzb24gYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWV2ZW50
LXRhcmdldFR5cGVzLXR5cGUuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTU0
ZWQxZjVjNmIuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlwZXMtdHlwZS5q
c29uCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi17Ci0gICAgImRvbWFpbiI6ICJEb21h
aW4iLAotICAgICJldmVudHMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogIlBh
Z2VPbmx5IiwKLSAgICAgICAgICAgICJ0YXJnZXRUeXBlcyI6ICJwYWdlZSIKLSAgICAgICAgfQot
ICAgIF0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlwZXMtdmFsdWUuanNvbiBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2Zh
aWwtb24tZXZlbnQtdGFyZ2V0VHlwZXMtdmFsdWUuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNTg4NGJmZDdhNmIuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZXZlbnQtdGFyZ2V0
VHlwZXMtdmFsdWUuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotewotICAgICJk
b21haW4iOiAiRG9tYWluIiwKLSAgICAiZXZlbnRzIjogWwotICAgICAgICB7Ci0gICAgICAgICAg
ICAibmFtZSI6ICJQYWdlT25seSIsCi0gICAgICAgICAgICAidGFyZ2V0VHlwZXMiOiBbInBhZ2Vl
Il0KLSAgICAgICAgfQotICAgIF0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tbnVtYmVyLXR5cGVkLW9w
dGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRpb25hbC1w
YXJhbWV0ZXItZmxhZy5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MzA4ZGI5
OTJkNi4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtcGFyYW1l
dGVyLWZsYWcuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLXsKLSAgICAiZG9t
YWluIjogIkRhdGFiYXNlIiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAg
ICJpZCI6ICJEYXRhYmFzZUlkIiwKLSAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCi0gICAg
ICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIGlkZW50aWZpZXIgb2YgRGF0YWJhc2Ugb2Jq
ZWN0LiIKLSAgICAgICAgfQotICAgIF0sCi0gICAgImV2ZW50cyI6IFsKLSAgICAgICAgewotICAg
ICAgICAgICAgIm5hbWUiOiAiZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyIsCi0gICAgICAg
ICAgICAicGFyYW1ldGVycyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5h
bWVzIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogMCB9Ci0gICAgICAgICAgICBdCi0g
ICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRpb25h
bC10eXBlLW1lbWJlci5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1i
ZXIuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWZlYTU1NWVjNGYuLjAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9nZW5lcmljL2ZhaWwtb24tbnVtYmVyLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24K
KysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi1bCi17Ci0gICAgImRvbWFpbiI6ICJEYXRh
YmFzZSIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiRXJy
b3IiLAotICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKLSAgICAgICAgICAgICJkZXNjcmlw
dGlvbiI6ICJEYXRhYmFzZSBlcnJvci4iLAotICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCi0g
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJtZXNzYWdlIiwgInR5cGUiOiAic3RyaW5nIiwgImRl
c2NyaXB0aW9uIjogIkVycm9yIG1lc3NhZ2UuIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAiY29kZSIsICJ0eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgY29kZS4i
LCAib3B0aW9uYWwiOiAwIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfQotICAgIF0KLX0KLV0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9nZW5lcmljL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1mbGFnLmpz
b24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJp
Yy9mYWlsLW9uLXN0cmluZy10eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29uCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MDEyYzc5YjZiMy4uMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFp
bC1vbi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbgorKysgL2Rldi9u
dWxsCkBAIC0xLDE4ICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKLSAgICAi
dHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJEYXRhYmFzZUlkIiwKLSAg
ICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAi
VW5pcXVlIGlkZW50aWZpZXIgb2YgRGF0YWJhc2Ugb2JqZWN0LiIKLSAgICAgICAgfQotICAgIF0s
Ci0gICAgImV2ZW50cyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiZGlkRXhl
Y3V0ZU9wdGlvbmFsUGFyYW1ldGVycyIsCi0gICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKLSAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAic3RyaW5nIiwg
Im9wdGlvbmFsIjogInRydWUiIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfQotICAgIF0KLX0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9nZW5lcmljL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24g
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9m
YWlsLW9uLXN0cmluZy10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29uCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBjYTNlZjI4YThmOC4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1z
dHJpbmctdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNvbgorKysgL2Rldi9udWxsCkBAIC0x
LDE2ICswLDAgQEAKLVsKLXsKLSAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKLSAgICAidHlwZXMi
OiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJFcnJvciIsCi0gICAgICAgICAgICAi
dHlwZSI6ICJvYmplY3QiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkRhdGFiYXNlIGVy
cm9yLiIsCi0gICAgICAgICAgICAicHJvcGVydGllcyI6IFsKLSAgICAgICAgICAgICAgICB7ICJu
YW1lIjogIm1lc3NhZ2UiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiRXJyb3Ig
bWVzc2FnZS4iIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2RlIiwgInR5cGUiOiAi
aW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBjb2RlLiIsICJvcHRpb25hbCI6ICJmYWxz
ZSIgfQotICAgICAgICAgICAgXQotICAgICAgICB9Ci0gICAgXQotfQotXQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFp
bC1vbi10eXBlLWRlY2xhcmF0aW9uLXVzaW5nLXR5cGUtcmVmZXJlbmNlLmpzb24gYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLXR5
cGUtZGVjbGFyYXRpb24tdXNpbmctdHlwZS1yZWZlcmVuY2UuanNvbgpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMTliNzU5MGNjYzYuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tdHlwZS1k
ZWNsYXJhdGlvbi11c2luZy10eXBlLXJlZmVyZW5jZS5qc29uCisrKyAvZGV2L251bGwKQEAgLTEs
MTMgKzAsMCBAQAotWwotewotICAgICJkb21haW4iOiAiUnVudGltZSIsCi0gICAgInR5cGVzIjog
WwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiUmVtb3RlT2JqZWN0SWQiLAotICAgICAg
ICAgICAgInR5cGUiOiAib2JqZWN0IiwKLSAgICAgICAgICAgICIkcmVmIjogIlNvbWVUeXBlIiwK
LSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIuIgot
ICAgICAgICB9Ci0gICAgXQotfQotXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi10eXBlLXJlZmVyZW5jZS1h
cy1wcmltaXRpdmUtdHlwZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi10eXBlLXJlZmVyZW5jZS1hcy1wcmltaXRpdmUt
dHlwZS5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YzgzYmJmY2U0MS4uMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2dlbmVyaWMvZmFpbC1vbi10eXBlLXJlZmVyZW5jZS1hcy1wcmltaXRpdmUtdHlwZS5qc29u
CisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotewotICAgICJkb21haW4iOiAiRGF0YWJh
c2UiLAotICAgICJ0eXBlcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIkRhdGFi
YXNlSWQiLAotICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKLSAgICAgICAgICAgICJkZXNj
cmlwdGlvbiI6ICJVbmlxdWUgaWRlbnRpZmllciBvZiBEYXRhYmFzZSBvYmplY3QuIgotICAgICAg
ICB9Ci0gICAgXSwKLSAgICAiZXZlbnRzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAibmFt
ZSI6ICJkaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzIiwKLSAgICAgICAgICAgICJwYXJhbWV0
ZXJzIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6
ICJEYXRhYmFzZUlkIiB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0KLSAgICBdCi19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2Vu
ZXJpYy9mYWlsLW9uLXR5cGUtd2l0aC1pbnZhbGlkLXBsYXRmb3JtLmpzb24gYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLXR5cGUt
d2l0aC1pbnZhbGlkLXBsYXRmb3JtLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGE5ZmQyZTk5NTYxLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLXR5cGUtd2l0aC1pbnZhbGlkLXBs
YXRmb3JtLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi17Ci0gICAgImRvbWFp
biI6ICJSdW50aW1lIiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJp
ZCI6ICJSZW1vdGVPYmplY3RJZCIsCi0gICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAotICAg
ICAgICAgICAgInBsYXRmb3JtIjogImludmFsaWQiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9u
IjogIlVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4iCi0gICAgICAgIH0KLSAgICBdCi19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2Vu
ZXJpYy9mYWlsLW9uLXR5cGUtd2l0aC1sb3dlcmNhc2UtbmFtZS5qc29uIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi10eXBlLXdp
dGgtbG93ZXJjYXNlLW5hbWUuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTMx
OTAxZTRhOWEuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tdHlwZS13aXRoLWxvd2VyY2FzZS1uYW1l
Lmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi17Ci0gICAgImRvbWFpbiI6ICJE
YXRhYmFzZSIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAi
ZGF0YWJhc2VJZCIsCi0gICAgICAgICAgICAidHlwZSI6ICJpbnRlZ2VyIiwKLSAgICAgICAgICAg
ICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgaWRlbnRpZmllciBvZiBEYXRhYmFzZSBvYmplY3QuIgot
ICAgICAgICB9Ci0gICAgXQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJl
bmNlLWluLXR5cGUtZGVjbGFyYXRpb24uanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5j
ZS1pbi10eXBlLWRlY2xhcmF0aW9uLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGQ2ODg3YTI3NDExLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVu
Y2UtaW4tdHlwZS1kZWNsYXJhdGlvbi5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBA
QAotWwotewotICAgICJkb21haW4iOiAiUnVudGltZSIsCi0gICAgInR5cGVzIjogWwotICAgICAg
ICB7Ci0gICAgICAgICAgICAiaWQiOiAiUmVtb3RlT2JqZWN0SWQiLAotICAgICAgICAgICAgInR5
cGUiOiAiZHJhZ29uIiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgb2JqZWN0
IGlkZW50aWZpZXIuIgotICAgICAgICB9Ci0gICAgXQotfQotXQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi11
bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtbWVtYmVyLmpzb24gYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLXVua25vd24t
dHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1tZW1iZXIuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggYjgxN2RiNTA0NGQuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tdW5rbm93bi10eXBl
LXJlZmVyZW5jZS1pbi10eXBlLW1lbWJlci5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAs
MCBAQAotWwotewotICAgICJkb21haW4iOiAiRmFudGFzeSIsCi0gICAgInR5cGVzIjogWwotICAg
ICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiRHJhZ29uRWdnIiwKLSAgICAgICAgICAgICJ0eXBl
IjogIm9iamVjdCIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQSBkcmFnb24gZWdnLiIs
Ci0gICAgICAgICAgICAicHJvcGVydGllcyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjog
ImNvbG9yIiwgIiRyZWYiOiAiQ29sb3IiIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfQotICAg
IF0KLX0KLV0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL2dlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5q
c29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVy
aWMvZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDY3Y2Y4ZTU4MmY2Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9nZW5lcmF0ZS1k
b21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDM2ICsw
LDAgQEAKLVsKLXsKLSAgICAiZG9tYWluIjogIk5ldHdvcmsxIiwKLSAgICAiZmVhdHVyZUd1YXJk
IjogIlBMQVRGT1JNKFdFQl9DT01NQU5EUykiLAotICAgICJjb21tYW5kcyI6IFsKLSAgICAgICAg
ewotICAgICAgICAgICAgIm5hbWUiOiAibG9hZFJlc291cmNlIiwKLSAgICAgICAgICAgICJkZXNj
cmlwdGlvbiI6ICJMb2FkcyBhIHJlc291cmNlIGluIHRoZSBjb250ZXh0IG9mIGEgZnJhbWUgb24g
dGhlIGluc3BlY3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNoZWNrcy4iCi0gICAgICAg
IH0KLSAgICBdCi19LAotewotICAgICJkb21haW4iOiAiTmV0d29yazIiLAotICAgICJmZWF0dXJl
R3VhcmQiOiAiUExBVEZPUk0oV0VCX1RZUEVTKSIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7
Ci0gICAgICAgICAgICAiaWQiOiAiTmV0d29ya0Vycm9yIiwKLSAgICAgICAgICAgICJ0eXBlIjog
Im9iamVjdCIsCi0gICAgICAgICAgICAicHJvcGVydGllcyI6IFsKLSAgICAgICAgICAgICAgICB7
ICJuYW1lIjogIm1lc3NhZ2UiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiRXJy
b3IgbWVzc2FnZS4iIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2RlIiwgInR5cGUi
OiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBjb2RlLiIgfQotICAgICAgICAgICAg
XQotICAgICAgICB9Ci0gICAgXQotfSwKLXsKLSAgICAiZG9tYWluIjogIk5ldHdvcmszIiwKLSAg
ICAiZmVhdHVyZUd1YXJkIjogIlBMQVRGT1JNKFdFQl9FVkVOVFMpIiwKLSAgICAiZXZlbnRzIjog
WwotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJyZXNvdXJjZUxvYWRlZCIsCi0gICAg
ICAgICAgICAiZGVzY3JpcHRpb24iOiAiQSByZXNvdXJjZSB3YXMgbG9hZGVkLiIKLSAgICAgICAg
fQotICAgIF0KLX0KLV0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL3NhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpz
b24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJp
Yy9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAzYmY0ZGZmNWNjYy4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvc2FtZS10eXBlLWlkLWRpZmZl
cmVudC1kb21haW4uanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLVsKLXsKLSAg
ICAiZG9tYWluIjogIlJ1bnRpbWUiLAotICAgICJ0eXBlcyI6IFsKLSAgICAgICAgewotICAgICAg
ICAgICAgImlkIjogIlJlbW90ZU9iamVjdElkIiwKLSAgICAgICAgICAgICJ0eXBlIjogInN0cmlu
ZyIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIG9iamVjdCBpZGVudGlmaWVy
LiIKLSAgICAgICAgfQotICAgIF0KLX0sCi17Ci0gICAgImRvbWFpbiI6ICJSdW50aW1lMiIsCi0g
ICAgInR5cGVzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiUmVtb3RlT2JqZWN0
SWQiLAotICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKLSAgICAgICAgICAgICJkZXNjcmlw
dGlvbiI6ICJVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIuIgotICAgICAgICB9Ci0gICAgXQotfQot
XQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2dlbmVyaWMvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24gYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9zaGFkb3dlZC1v
cHRpb25hbC10eXBlLXNldHRlcnMuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MjBhMGMxNTUyNzUuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVy
cy5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotewotICAgICJkb21haW4iOiAi
UnVudGltZSIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAi
S2V5UGF0aCIsCi0gICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAotICAgICAgICAgICAgImRl
c2NyaXB0aW9uIjogIktleSBwYXRoLiIsCi0gICAgICAgICAgICAicHJvcGVydGllcyI6IFsKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogInR5cGUiLAotICAg
ICAgICAgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAotICAgICAgICAgICAgICAgICAgICAi
ZW51bSI6IFsibnVsbCIsICJzdHJpbmciLCAiYXJyYXkiXSwKLSAgICAgICAgICAgICAgICAgICAg
ImRlc2NyaXB0aW9uIjogIktleSBwYXRoIHR5cGUuIgotICAgICAgICAgICAgICAgIH0sCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJzdHJpbmciLAotICAg
ICAgICAgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAotICAgICAgICAgICAgICAgICAgICAi
b3B0aW9uYWwiOiB0cnVlLAotICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiU3Ry
aW5nIHZhbHVlLiIKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgIm5hbWUiOiAiYXJyYXkiLAotICAgICAgICAgICAgICAgICAgICAidHlw
ZSI6ICJhcnJheSIsCi0gICAgICAgICAgICAgICAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAg
ICAgICAgICAgICAgICAgICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9LAotICAgICAgICAg
ICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQXJyYXkgdmFsdWUuIgotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfQotICAgIF0KLX0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL3Nob3VsZC1z
dHJpcC1jb21tZW50cy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2dlbmVyaWMvc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGVjZTFkY2ZjNjFjLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9zaG91bGQtc3Ry
aXAtY29tbWVudHMuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotewotICAgIC8q
IGFib3ZlICovCi0gICAgLyogYmVmb3JlICovICJkb21haW4iIC8qIGluICovIDogLyogaW4gKi8g
IkNvbW1lbnQiIC8qIGFmdGVyICovCi0gICAgLyogYmVsb3cgKi8KLX0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL3R5cGUt
ZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvdHlwZS1kZWNsYXJhdGlvbi1h
bGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGNiYzlkNTM5NDc4Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy90eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJp
bWl0aXZlLXR5cGUuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLXsKLSAgICAi
ZG9tYWluIjogIlJ1bnRpbWUiLAotICAgICJ0eXBlcyI6IFsKLSAgICAgICAgewotICAgICAgICAg
ICAgImlkIjogIlJlbW90ZU9iamVjdElkIiwKLSAgICAgICAgICAgICJ0eXBlIjogImludGVnZXIi
LAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4i
Ci0gICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy90eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5
cGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL3R5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBjZmIwOGJkOTQwYi4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvdHlwZS1kZWNsYXJhdGlv
bi1hcnJheS10eXBlLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi1bCi17Ci0g
ICAgImRvbWFpbiI6ICJEZWJ1Z2dlciIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7Ci0gICAg
ICAgICAgICAiaWQiOiAiQnJlYWtwb2ludElkIiwKLSAgICAgICAgICAgICJ0eXBlIjogImludGVn
ZXIiCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJSZWFzb24iLAot
ICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKLSAgICAgICAgICAgICJlbnVtIjogWyJEaWVk
IiwgIkZhaW50ZWQiLCAiSHVuZ3J5Il0KLSAgICAgICAgfQotICAgIF0KLX0sCi17Ci0gICAgImRv
bWFpbiI6ICJSdW50aW1lIiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAg
ICJpZCI6ICJPYmplY3RJZCIsCi0gICAgICAgICAgICAidHlwZSI6ICJpbnRlZ2VyIgotICAgICAg
ICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiTHVja3lOdW1iZXJzIiwKLSAgICAg
ICAgICAgICJ0eXBlIjogImFycmF5IiwKLSAgICAgICAgICAgICJpdGVtcyI6IHsgInR5cGUiOiAi
aW50ZWdlciIgfQotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiQmFi
eU5hbWVzIiwKLSAgICAgICAgICAgICJ0eXBlIjogImFycmF5IiwKLSAgICAgICAgICAgICJpdGVt
cyI6IHsgInR5cGUiOiAic3RyaW5nIiB9Ci0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAg
ICAgICJpZCI6ICJOZXdPYmplY3RzIiwKLSAgICAgICAgICAgICJ0eXBlIjogImFycmF5IiwKLSAg
ICAgICAgICAgICJpdGVtcyI6IHsgIiRyZWYiOiAiT2JqZWN0SWQiIH0KLSAgICAgICAgfSwKLSAg
ICAgICAgewotICAgICAgICAgICAgImlkIjogIk9sZE9iamVjdHMiLAotICAgICAgICAgICAgInR5
cGUiOiAiYXJyYXkiLAotICAgICAgICAgICAgIml0ZW1zIjogeyAiJHJlZiI6ICJEZWJ1Z2dlci5C
cmVha3BvaW50SWQiIH0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjog
IlN0b3BSZWFzb25zIiwKLSAgICAgICAgICAgICJ0eXBlIjogImFycmF5IiwKLSAgICAgICAgICAg
ICJpdGVtcyI6IHsgIiRyZWYiOiAiRGVidWdnZXIuUmVhc29uIiB9Ci0gICAgICAgIH0KLSAgICBd
Ci19Ci1dCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy90eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvdHlwZS1kZWNs
YXJhdGlvbi1lbnVtLXR5cGUuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWYw
YWVlOWM5MWIuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24K
KysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi17Ci0gICAgImRvbWFpbiI6ICJSdW50aW1l
IiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJGYXJtQW5p
bWFscyIsCi0gICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAotICAgICAgICAgICAgImVudW0i
OiBbIlBpZ3MiLCAiQ293cyIsICJDYXRzIiwgIkhlbnMiXQotICAgICAgICB9LAotICAgICAgICB7
Ci0gICAgICAgICAgICAiaWQiOiAiVHdvTGVnZ2VkQW5pbWFscyIsCi0gICAgICAgICAgICAidHlw
ZSI6ICJzdHJpbmciLAotICAgICAgICAgICAgImVudW0iOiBbIkR1Y2tzIiwgIkhlbnMiLCAiQ3Jv
d3MiLCAiRmxhbWluZ29zIl0KLSAgICAgICAgfQotICAgIF0KLX0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL3R5cGUtZGVj
bGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNv
bgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmM0M2MzMzA5OTIuLjAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmljL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgorKysgL2Rldi9udWxsCkBAIC0x
LDEwMCArMCwwIEBACi1bCi17Ci0gICAgImRvbWFpbiI6ICJEYXRhYmFzZSIsCi0gICAgImRlc2Ny
aXB0aW9uIjogIlRlc3QgdHlwZSBidWlsZGVyIGdlbmVyYXRpb24gb2YgdmFyaW91cyBvYmplY3Qg
dHlwZXMuIiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJF
cnJvciIsCi0gICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAotICAgICAgICAgICAgImRlc2Ny
aXB0aW9uIjogIkRhdGFiYXNlIGVycm9yLiIsCi0gICAgICAgICAgICAicHJvcGVydGllcyI6IFsK
LSAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm1lc3NhZ2UiLCAidHlwZSI6ICJzdHJpbmciLCAi
ZGVzY3JpcHRpb24iOiAiRXJyb3IgbWVzc2FnZS4iIH0sCi0gICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJjb2RlIiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBjb2Rl
LiIgfQotICAgICAgICAgICAgXQotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAi
aWQiOiAiRXJyb3JMaXN0IiwKLSAgICAgICAgICAgICJ0eXBlIjogImFycmF5IiwKLSAgICAgICAg
ICAgICJpdGVtcyI6IHsgIiRyZWYiOiAiRXJyb3IiIH0KLSAgICAgICAgfSwKLSAgICAgICAgewot
ICAgICAgICAgICAgImlkIjogIk1vdXNlQnV0dG9uIiwKLSAgICAgICAgICAgICJ0eXBlIjogInN0
cmluZyIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRW51bWVyYXRlcyBkaWZmZXJlbnQg
bW91c2UgYnV0dG9ucyB0aGF0IGNhbiBiZSB1c2VkLiIsCi0gICAgICAgICAgICAiZW51bSI6IFsK
LSAgICAgICAgICAgICAgICAiTm9uZSIsCi0gICAgICAgICAgICAgICAgIkxlZnQiLAotICAgICAg
ICAgICAgICAgICJNaWRkbGUiLAotICAgICAgICAgICAgICAgICJSaWdodCIKLSAgICAgICAgICAg
IF0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIk9wdGlvbmFsUGFy
YW1ldGVyQnVuZGxlIiwKLSAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCi0gICAgICAgICAg
ICAicHJvcGVydGllcyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVz
IiwgInR5cGUiOiAiYXJyYXkiLCAib3B0aW9uYWwiOiB0cnVlLCAiaXRlbXMiOiB7ICJ0eXBlIjog
InN0cmluZyIgfSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYnV0dG9ucyIsICJ0eXBl
IjogImFycmF5IiwgIm9wdGlvbmFsIjogdHJ1ZSwgIml0ZW1zIjogeyAiJHJlZiI6ICJNb3VzZUJ1
dHRvbiIgfSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGlyZWN0aW9uYWxpdHkiLCAi
dHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsiTFRSIiwgIlJUTCJdLCAib3B0aW9uYWwiOiB0cnVl
IH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIs
ICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFt
cCIsICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRydWUg
fSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiLCAi
b3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJlcnJvciIsICIk
cmVmIjogIkVycm9yIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAiZXJyb3JMaXN0IiwgIiRyZWYiOiAiRXJyb3JMaXN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9
Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6
ICJQYXJhbWV0ZXJCdW5kbGUiLAotICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKLSAgICAg
ICAgICAgICJwcm9wZXJ0aWVzIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1u
TmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0s
Ci0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJidXR0b25zIiwgInR5cGUiOiAiYXJyYXkiLCAi
aXRlbXMiOiB7ICIkcmVmIjogIk1vdXNlQnV0dG9uIiB9IH0sCi0gICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJkaXJlY3Rpb25hbGl0eSIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJMVFIi
LCAiUlRMIl0gfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAi
c3RyaW5nIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUi
OiAibnVtYmVyIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVzIiwgInR5cGUi
OiAib2JqZWN0IiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBl
IjogImFueSIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImVycm9yIiwgIiRyZWYiOiAi
RXJyb3IiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJlcnJvckxpc3QiLCAiJHJlZiI6
ICJFcnJvckxpc3QiIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAg
ICAgICAgICAgImlkIjogIk9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHMiLAotICAgICAg
ICAgICAgImRlc2NyaXB0aW9uIjogIkNvbmZsaWN0ZWQgbmFtZXMgbWF5IGNhdXNlIGdlbmVyYXRl
ZCBnZXR0ZXJzL3NldHRlcnMgdG8gY2xhc2ggd2l0aCBidWlsdC1pbiBJbnNwZWN0b3JPYmplY3Qg
bWV0aG9kcy4iLAotICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKLSAgICAgICAgICAgICJw
cm9wZXJ0aWVzIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiaW50ZWdlciIsICJ0eXBl
IjogInN0cmluZyIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImFycmF5IiwgInR5cGUi
OiAic3RyaW5nIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic3RyaW5nIiwgInR5cGUi
OiAic3RyaW5nIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWUiLCAidHlwZSI6
ICJzdHJpbmciIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJvYmplY3QiLCAidHlwZSI6
ICJzdHJpbmciIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAg
ICAgICAgImlkIjogIkR1bW15T2JqZWN0IiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJB
biBvcGVuIG9iamVjdCB0aGF0IGRvZXNuJ3QgaGF2ZSBhbnkgcHJlZGVmaW5lZCBmaWVsZHMuIiwK
LSAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIKLSAgICAgICAgfQotICAgIF0KLX0sCi17Ci0g
ICAgImRvbWFpbiI6ICJUZXN0IiwKLSAgICAiZGVzY3JpcHRpb24iOiAiVGVzdCB0aGUgZ2VuZXJh
dGlvbiBvZiBzcGVjaWFsIGJlaGF2aW9ycyB0aGF0IG9ubHkgYXBwbHkgdG8gc3BlY2lmaWMgY2xh
c3Nlcy4iLAotICAgICJ0eXBlcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIlBh
cmFtZXRlckJ1bmRsZSIsCi0gICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAotICAgICAgICAg
ICAgInByb3BlcnRpZXMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkaXJlY3Rpb25h
bGl0eSIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJMVFIiLCAiUlRMIl0gfSwKLSAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogImJ1dHRvbnMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6
IHsgIiRyZWYiOiAiRGF0YWJhc2UuTW91c2VCdXR0b24iIH0gfSwKLSAgICAgICAgICAgICAgICB7
ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICJ0eXBl
IjogInN0cmluZyIgfSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAidHlw
ZSI6ICJzdHJpbmciIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAi
dHlwZSI6ICJudW1iZXIiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAi
dHlwZSI6ICJvYmplY3QiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2FkIiwg
InR5cGUiOiAiYW55IiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZXJyb3IiLCAiJHJl
ZiI6ICJEYXRhYmFzZS5FcnJvciIgfQotICAgICAgICAgICAgXQotICAgICAgICB9Ci0gICAgXQot
fQotXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvdHlwZS1yZXF1
aXJpbmctcnVudGltZS1jYXN0cy5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4
M2Q5NGJlODk3ZC4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5q
c29uCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotWwotewotICAgICJkb21haW4iOiAi
VGVzdCIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiVHlw
ZU5lZWRpbmdDYXN0IiwKLSAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCi0gICAgICAgICAg
ICAiZGVzY3JpcHRpb24iOiAiQSBkdW1teSB0eXBlIHRoYXQgcmVxdWlyZXMgcnVudGltZSBjYXN0
cywgYW5kIGZvcmNlcyBub24tcHJpbWl0aXZlIHJlZmVyZW5jZWQgdHlwZXMgdG8gYWxzbyBlbWl0
IHJ1bnRpbWUgY2FzdCBoZWxwZXJzLiIsCi0gICAgICAgICAgICAicHJvcGVydGllcyI6IFsKLSAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogInN0cmluZyIsICJ0eXBlIjogInN0cmluZyIsICJkZXNj
cmlwdGlvbiI6ICJTdHJpbmcgbWVtYmVyLiIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjog
Im51bWJlciIsICJ0eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAiTnVtYmVyIG1lbWJl
ci4iIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJhbmltYWxzIiwgIiRyZWYiOiAiQ2Fz
dGVkQW5pbWFscyIsICJkZXNjcmlwdGlvbiI6ICJFbnVtIG1lbWJlci4iIH0sCi0gICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJpZCIsICIkcmVmIjogIkNhc3RlZE9iamVjdElkIiwgImRlc2NyaXB0
aW9uIjogIkFsaWFzZWQgbWVtYmVyLiIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRy
ZWUiLCAiJHJlZiI6ICJSZWN1cnNpdmVPYmplY3QxIiwgImRlc2NyaXB0aW9uIjogIlJlY3Vyc2l2
ZSBvYmplY3QgbWVtYmVyLiIgfQotICAgICAgICAgICAgXQotICAgICAgICB9LAotICAgICAgICB7
Ci0gICAgICAgICAgICAiaWQiOiAiQ2FzdGVkT2JqZWN0SWQiLAotICAgICAgICAgICAgInR5cGUi
OiAiaW50ZWdlciIKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIlVu
Y2FzdGVkT2JqZWN0SWQiLAotICAgICAgICAgICAgInR5cGUiOiAiaW50ZWdlciIKLSAgICAgICAg
fSwKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIlVuY2FzdGVkQW5pbWFscyIsCi0gICAg
ICAgICAgICAidHlwZSI6ICJzdHJpbmciLAotICAgICAgICAgICAgImVudW0iOiBbIlBpZ3MiLCAi
Q293cyIsICJDYXRzIiwgIkhlbnMiXQotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAg
ICAiaWQiOiAiQ2FzdGVkQW5pbWFscyIsCi0gICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAot
ICAgICAgICAgICAgImVudW0iOiBbIkR1Y2tzIiwgIkhlbnMiLCAiQ3Jvd3MiLCAiRmxhbWluZ29z
Il0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIlJlY3Vyc2l2ZU9i
amVjdDEiLAotICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKLSAgICAgICAgICAgICJwcm9w
ZXJ0aWVzIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAib2JqIiwgIiRyZWYiOiAiUmVj
dXJzaXZlT2JqZWN0MiIsICJvcHRpb25hbCI6IHRydWUgfQotICAgICAgICAgICAgXQotICAgICAg
ICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiUmVjdXJzaXZlT2JqZWN0MiIsCi0g
ICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAotICAgICAgICAgICAgInByb3BlcnRpZXMiOiBb
Ci0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJvYmoiLCAiJHJlZiI6ICJSZWN1cnNpdmVPYmpl
Y3QxIiwgIm9wdGlvbmFsIjogdHJ1ZSB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0KLSAgICBd
Ci19Ci1dCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy90eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24gYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy90eXBlLXdpdGgt
b3Blbi1wYXJhbWV0ZXJzLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk5YjAy
MjBkMzEyLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy90eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24KKysr
IC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi17Ci0gICAgImRvbWFpbiI6ICJUZXN0IiwKLSAg
ICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJOb09wZW5QYXJhbWV0
ZXJzIiwKLSAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCi0gICAgICAgICAgICAicHJvcGVy
dGllcyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm9uZSIsICJ0eXBlIjogIm51bWJl
ciIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInR3byIsICJ0eXBlIjogIm51bWJlciIg
fQotICAgICAgICAgICAgXQotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQi
OiAiT3BlblBhcmFtZXRlcnMiLAotICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKLSAgICAg
ICAgICAgICJwcm9wZXJ0aWVzIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYWxwaGEi
LCAidHlwZSI6ICJudW1iZXIiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJiZXRhIiwg
InR5cGUiOiAibnVtYmVyIiB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0KLSAgICBdCi19CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJpYy92ZXJzaW9uLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZ2VuZXJpYy92ZXJzaW9uLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDUwN2E1ZDkwMTc2Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy92ZXJzaW9uLmpzb24KKysrIC9kZXYv
bnVsbApAQCAtMSw2ICswLDAgQEAKLXsiZG9tYWlucyI6WwotewotICAgICJkb21haW4iOiAiVmVy
c2lvbkRvbWFpbiIsCi0gICAgInZlcnNpb24iOiA0MgotfQotXX0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9pb3MvZGVmaW5pdGlvbnMt
d2l0aC1tYWMtcGxhdGZvcm0uanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9pb3MvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODE3ZjEzNWVlNWEuLjAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9pb3MvZGVmaW5p
dGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAg
QEAKLXsKLSAgICAiZG9tYWluIjogIk5ldHdvcmsiLAotICAgICJ0eXBlcyI6IFsKLSAgICAgICAg
ewotICAgICAgICAgICAgImlkIjogIk5ldHdvcmtFcnJvciIsCi0gICAgICAgICAgICAidHlwZSI6
ICJvYmplY3QiLAotICAgICAgICAgICAgInBsYXRmb3JtIjogIm1hY29zIiwKLSAgICAgICAgICAg
ICJwcm9wZXJ0aWVzIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibWVzc2FnZSIsICJ0
eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBtZXNzYWdlLiIgfSwKLSAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogImNvZGUiLCAidHlwZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0
aW9uIjogIkVycm9yIGNvZGUuIiB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0KLSAgICBdLAot
ICAgICJjb21tYW5kcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAibG9hZFJl
c291cmNlIiwKLSAgICAgICAgICAgICJwbGF0Zm9ybSI6ICJtYWNvcyIsCi0gICAgICAgICAgICAi
ZGVzY3JpcHRpb24iOiAiTG9hZHMgYSByZXNvdXJjZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1l
IG9uIHRoZSBpbnNwZWN0ZWQgcGFnZSB3aXRob3V0IGNyb3NzIG9yaWdpbiBjaGVja3MuIgotICAg
ICAgICB9Ci0gICAgXSwKLSAgICAiZXZlbnRzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAi
bmFtZSI6ICJyZXNvdXJjZUxvYWRlZCIsCi0gICAgICAgICAgICAicGxhdGZvcm0iOiAibWFjb3Mi
LAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkEgcmVzb3VyY2Ugd2FzIGxvYWRlZC4iCi0g
ICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvaW9zL2V4cGVjdGVkL2RlZmluaXRpb25zLXdpdGgtbWFjLXBs
YXRmb3JtLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2lvcy9leHBlY3RlZC9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29u
LXJlc3VsdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDRjMGZlM2ZlM2MuLjAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9pb3MvZXhwZWN0ZWQvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbi1yZXN1bHQK
KysrIC9kZXYvbnVsbApAQCAtMSw4NzAgKzAsMCBAQAotIyMjIEJlZ2luIEZpbGU6IEluc3BlY3Rv
ckJhY2tlbmRDb21tYW5kcy5qcwotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRl
ZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLSMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRz
LmpzCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1w
bGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgotI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7
Ci0KLWNsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2b2lk
IHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRj
aGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9Ci0gICAg
QmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9i
YWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQotcHJpdmF0ZToKLSAgICBSZWZQdHI8QmFja2VuZERp
c3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Ci19OwotCi0KLQotCi19IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKLQotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQotIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgK
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNl
Ci0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXR5cGVkZWYgU3RyaW5nIEVy
cm9yU3RyaW5nOwotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6
IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmRE
aXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0
aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0QmFja2Vu
ZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9u
dGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3Rm
L05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jaWYg
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jaW5jbHVkZSAiVGVzdEFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBJbnNwZWN0
b3IgewotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVz
dEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERp
c3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9u
cy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0
cy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBGcm9udGVuZFJvdXRl
cjsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVu
ZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJz
LmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgt
bWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNo
ZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRl
ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3Rv
ciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9u
dGVuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0
cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1t
YWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclBy
b3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotCi1uYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKLQotCi0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLQotCi0KLQotCi0KLQot
Ci19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xPYmplY3RzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRl
ZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbE9iamVjdHMuaCIKLQotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLW5hbWVzcGFj
ZSBQcm90b2NvbCB7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAot
Ci0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9y
bS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMu
aD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLQotCi1uYW1lc3BhY2UgSW5zcGVjdG9y
IHsKLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
QmFja2VuZERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
ZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sSW50
ZXJuYWwuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbmNs
dWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERp
c3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9u
LmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1h
Yy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KLQotX19hdHRyaWJ1dGVf
XygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZp
Z3VyYXRpb24gOiBOU09iamVjdAotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbi5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0
aW9uLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0
aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCi0KLSNpbXBvcnQg
IlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlz
cGF0Y2hlcnMuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJs
ZUFnZW50Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNv
bnRyb2xsZXIuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVycy5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXJzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBs
ZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCi17Ci0gICAgQXVnbWVudGFibGVJ
bnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9s
bGVyCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAg
IHJldHVybiBuaWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIpOwotICAgIF9jb250cm9sbGVyID0g
Y29udHJvbGxlcjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClkZWFsbG9jCi17Ci0g
ICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xDb25maWd1cmF0aW9uLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVu
dERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5p
dGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1w
b3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPHd0Zi9KU09OVmFs
dWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2wuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdp
dGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLSNpbXBvcnQgPFdl
Ykluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KLQotCi0KLQotdHlwZWRlZiBOU19F
TlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sUGxhdGZvcm0pIHsKLSAgICBUZXN0UHJvdG9jb2xQ
bGF0Zm9ybUFsbCwKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWMsCi0gICAgVGVzdFBy
b3RvY29sUGxhdGZvcm1JT1MsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUywKLX07Ci0K
LQotCi0KLQotCi0KLQotCi0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxk
Q29tcGF0aWJpbGl0eU9iamVjdHMuaD4KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAot
Ci0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFBy
b3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgotI2lt
cG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0j
aW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbEludGVybmFsLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0
aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9S
V0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KLU9wdGlvbmFsPE9iakNFbnVtVHlwZT4g
ZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOwotCi1pbmxpbmUgU3RyaW5n
IHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sUGxhdGZvcm0gdmFsdWUpCi17Ci0gICAgc3dp
dGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDoKLSAgICAgICAg
cmV0dXJuICJhbGwiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM6Ci0g
ICAgICAgIHJldHVybiAiZ2VuZXJpYyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3Jt
SU9TOgotICAgICAgICByZXR1cm4gImlvcyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRm
b3JtTWFjT1M6Ci0gICAgICAgIHJldHVybiAibWFjb3MiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0
ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sUGxhdGZvcm0+IGZyb21Qcm90b2NvbFN0
cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiYWxsIikKLSAg
ICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOwotICAgIGlmICh2YWx1ZSA9PSAi
Z2VuZXJpYyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM7Ci0g
ICAgaWYgKHZhbHVlID09ICJpb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZv
cm1JT1M7Ci0gICAgaWYgKHZhbHVlID09ICJtYWNvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJv
dG9jb2xQbGF0Zm9ybU1hY09TOwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMu
bW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1h
Yy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotCi0jaW1wb3J0ICJU
ZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKLSNpbXBv
cnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0KLXVzaW5n
IG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotCi0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlw
ZXMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRo
LW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3Rv
Y29sSlNPTk9iamVjdFByaXZhdGUuaD4KLSNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW1w
b3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0K
LSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9tYWMvZGVmaW5pdGlvbnMtd2l0
aC1tYWMtcGxhdGZvcm0uanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9tYWMvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODE3ZjEzNWVlNWEuLjAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9tYWMvZGVmaW5pdGlv
bnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAK
LXsKLSAgICAiZG9tYWluIjogIk5ldHdvcmsiLAotICAgICJ0eXBlcyI6IFsKLSAgICAgICAgewot
ICAgICAgICAgICAgImlkIjogIk5ldHdvcmtFcnJvciIsCi0gICAgICAgICAgICAidHlwZSI6ICJv
YmplY3QiLAotICAgICAgICAgICAgInBsYXRmb3JtIjogIm1hY29zIiwKLSAgICAgICAgICAgICJw
cm9wZXJ0aWVzIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibWVzc2FnZSIsICJ0eXBl
IjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBtZXNzYWdlLiIgfSwKLSAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogImNvZGUiLCAidHlwZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9u
IjogIkVycm9yIGNvZGUuIiB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0KLSAgICBdLAotICAg
ICJjb21tYW5kcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAibG9hZFJlc291
cmNlIiwKLSAgICAgICAgICAgICJwbGF0Zm9ybSI6ICJtYWNvcyIsCi0gICAgICAgICAgICAiZGVz
Y3JpcHRpb24iOiAiTG9hZHMgYSByZXNvdXJjZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1lIG9u
IHRoZSBpbnNwZWN0ZWQgcGFnZSB3aXRob3V0IGNyb3NzIG9yaWdpbiBjaGVja3MuIgotICAgICAg
ICB9Ci0gICAgXSwKLSAgICAiZXZlbnRzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAibmFt
ZSI6ICJyZXNvdXJjZUxvYWRlZCIsCi0gICAgICAgICAgICAicGxhdGZvcm0iOiAibWFjb3MiLAot
ICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkEgcmVzb3VyY2Ugd2FzIGxvYWRlZC4iCi0gICAg
ICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvbWFjL2V4cGVjdGVkL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRm
b3JtLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL21hYy9leHBlY3RlZC9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uLXJl
c3VsdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzZlNjhmNGE5YWUuLjAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9t
YWMvZXhwZWN0ZWQvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbi1yZXN1bHQKKysr
IC9kZXYvbnVsbApAQCAtMSwxMjE3ICswLDAgQEAKLSMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JC
YWNrZW5kQ29tbWFuZHMuanMKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZp
bml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLS8vIE5ldHdvcmsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJE
b21haW4oIk5ldHdvcmsiLCBudWxsKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5k
KCJOZXR3b3JrLmxvYWRSZXNvdXJjZSIsIG51bGwsIFtdLCBbXSk7Ci1JbnNwZWN0b3JCYWNrZW5k
LnJlZ2lzdGVyRXZlbnQoIk5ldHdvcmsucmVzb3VyY2VMb2FkZWQiLCBudWxsLCBbXSk7Ci1JbnNw
ZWN0b3JCYWNrZW5kLnJlZ2lzdGVyTmV0d29ya0Rpc3BhdGNoZXIgPSBJbnNwZWN0b3JCYWNrZW5k
LnJlZ2lzdGVyRGlzcGF0Y2hlci5iaW5kKEluc3BlY3RvckJhY2tlbmQsICJOZXR3b3JrIik7Ci1J
bnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJOZXR3b3JrIiwgbnVsbCk7Ci0jIyMgRW5k
IEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi0jaW5jbHVkZSAiVGVzdFByb3Rv
Y29sVHlwZXMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91
dGVyLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBBbHRlcm5hdGVCYWNrZW5k
RGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQ
dHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVy
ID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQotICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5k
RGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0K
LXByaXZhdGU6Ci0gICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRj
aGVyOwotfTsKLQotCi1jbGFzcyBBbHRlcm5hdGVOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIgOiBw
dWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZpcnR1YWwg
fkFsdGVybmF0ZU5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQotICAgIHZpcnR1YWwgdm9p
ZCBsb2FkUmVzb3VyY2UobG9uZyBjYWxsSWQpID0gMDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgotCi0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCi0jIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQot
I2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdHlwZWRlZiBTdHJpbmcgRXJyb3JT
dHJpbmc7Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLWNs
YXNzIEFsdGVybmF0ZU5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjsKLSNlbmRpZiAvLyBFTkFCTEUo
SU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQotY2xhc3MgTmV0d29ya0JhY2tlbmRE
aXNwYXRjaGVySGFuZGxlciB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJj
ZShFcnJvclN0cmluZyYpID0gMDsKLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIH5OZXR3b3JrQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7Ci19OwotCi1jbGFzcyBOZXR3b3JrQmFja2VuZERpc3Bh
dGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewotcHVi
bGljOgotICAgIHN0YXRpYyBSZWY8TmV0d29ya0JhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFj
a2VuZERpc3BhdGNoZXImLCBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAg
dm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxK
U09OOjpPYmplY3Q+JiYgbWVzc2FnZSkgZmluYWw7Ci1wcml2YXRlOgotICAgIHZvaWQgbG9hZFJl
c291cmNlKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMp
OwotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotcHVibGljOgot
ICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0Y2hlcihBbHRlcm5hdGVOZXR3b3JrQmFja2VuZERp
c3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0g
YWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQotcHJpdmF0ZToKLSAgICBBbHRlcm5hdGVOZXR3b3JrQmFj
a2VuZERpc3BhdGNoZXIqIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciB7IG51bGxwdHIgfTsKLSNlbmRp
ZgotcHJpdmF0ZToKLSAgICBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNo
ZXImLCBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgTmV0d29ya0JhY2tl
bmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2VudCB7IG51bGxwdHIgfTsKLX07Ci0KLX0gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgK
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3
dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQotI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMu
aCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotTmV0d29ya0JhY2tlbmREaXNw
YXRjaGVySGFuZGxlcjo6fk5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KLQot
UmVmPE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcj4gTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyOjpj
cmVhdGUoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBOZXR3b3JrQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBO
ZXR3b3JrQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIsIGFnZW50KSk7Ci19Ci0K
LU5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjo6TmV0d29ya0JhY2tlbmREaXNwYXRjaGVyKEJhY2tl
bmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVy
SGFuZGxlciogYWdlbnQpCi0gICAgOiBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNr
ZW5kRGlzcGF0Y2hlcikKLSAgICAsIG1fYWdlbnQoYWdlbnQpCi17Ci0gICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKCJOZXR3b3JrIl9zLCB0aGlzKTsK
LX0KLQotdm9pZCBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVz
dElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQot
ewotICAgIFJlZjxOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwotCi0g
ICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVyczsKLSAgICBtZXNzYWdlLT5nZXRPYmpl
Y3QoInBhcmFtcyJfcywgcGFyYW1ldGVycyk7Ci0KLSAgICBpZiAobWV0aG9kID09ICJsb2FkUmVz
b3VyY2UiKQotICAgICAgICBsb2FkUmVzb3VyY2UocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRl
cnMpKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3Rv
Y29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmsuIiAr
IG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKLX0KLQotdm9pZCBOZXR3b3JrQmFja2VuZERp
c3BhdGNoZXI6OmxvYWRSZXNvdXJjZShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJikKLXsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSAg
ICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0
Y2hlci0+bG9hZFJlc291cmNlKHJlcXVlc3RJZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0j
ZW5kaWYKLQotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJl
c3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgbV9hZ2VudC0+bG9hZFJlc291cmNl
KGVycm9yKTsKLQotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0gICAgICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2Up
OwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xF
cnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmRE
aXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJz
LmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1h
Yy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2lu
Y2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBGcm9udGVuZFJvdXRlcjsKLQotY2xh
c3MgTmV0d29ya0Zyb250ZW5kRGlzcGF0Y2hlciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7Ci1wdWJsaWM6Ci0gICAgTmV0d29ya0Zyb250ZW5kRGlzcGF0Y2hlcihGcm9udGVuZFJvdXRl
ciYgZnJvbnRlbmRSb3V0ZXIpIDogbV9mcm9udGVuZFJvdXRlcihmcm9udGVuZFJvdXRlcikgeyB9
Ci0gICAgdm9pZCByZXNvdXJjZUxvYWRlZCgpOwotcHJpdmF0ZToKLSAgICBGcm9udGVuZFJvdXRl
ciYgbV9mcm9udGVuZFJvdXRlcjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMj
IEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi12b2lkIE5ldHdvcmtGcm9udGVuZERpc3BhdGNo
ZXI6OnJlc291cmNlTG9hZGVkKCkKLXsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2Fn
ZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygi
bWV0aG9kIl9zLCAiTmV0d29yay5yZXNvdXJjZUxvYWRlZCJfcyk7Ci0KLSAgICBtX2Zyb250ZW5k
Um91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwotfQotCi19IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRj
aGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3Jt
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdt
YSBvbmNlCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVz
Lmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7
Ci0KLQotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotLy8gRm9yd2FyZCBkZWNsYXJhdGlv
bnMuCi1uYW1lc3BhY2UgTmV0d29yayB7Ci1jbGFzcyBOZXR3b3JrRXJyb3I7Ci19IC8vIE5ldHdv
cmsKLS8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KLQotCi0KLQotbmFtZXNwYWNlIE5l
dHdvcmsgewotY2xhc3MgTmV0d29ya0Vycm9yIDogcHVibGljIEpTT046Ok9iamVjdEJhc2Ugewot
cHVibGljOgotICAgIGVudW0gewotICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCi0gICAgICAgIE1l
c3NhZ2VTZXQgPSAxIDw8IDAsCi0gICAgICAgIENvZGVTZXQgPSAxIDw8IDEsCi0gICAgICAgIEFs
bEZpZWxkc1NldCA9IChNZXNzYWdlU2V0IHwgQ29kZVNldCkKLSAgICB9OwotCi0gICAgdGVtcGxh
dGU8aW50IFNUQVRFPgotICAgIGNsYXNzIEJ1aWxkZXIgewotICAgIHByaXZhdGU6Ci0gICAgICAg
IFJlZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVzdWx0OwotCi0gICAgICAgIHRlbXBsYXRlPGludCBT
VEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0
aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXIoUmVmPC8qTmV0d29ya0Vycm9yKi9K
U09OOjpPYmplY3Q+JiYgb2JqZWN0KQotICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9i
amVjdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5v
RmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwotICAgICAgICB9
Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBOZXR3b3JrRXJyb3I7Ci0gICAgcHVibGljOgotCi0gICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2FnZShjb25zdCBTdHJpbmcm
IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
TWVzc2FnZVNldCksIHByb3BlcnR5X21lc3NhZ2VfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAg
bV9yZXN1bHQtPnNldFN0cmluZygibWVzc2FnZSJfcywgdmFsdWUpOwotICAgICAgICAgICAgcmV0
dXJuIGNhc3RTdGF0ZTxNZXNzYWdlU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRl
cjxTVEFURSB8IENvZGVTZXQ+JiBzZXRDb2RlKGludCB2YWx1ZSkKLSAgICAgICAgewotICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENvZGVTZXQpLCBwcm9wZXJ0eV9jb2RlX2Fs
cmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2VyKCJjb2RlIl9zLCB2
YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvZGVTZXQ+KCk7Ci0gICAgICAg
IH0KLQotICAgICAgICBSZWY8TmV0d29ya0Vycm9yPiByZWxlYXNlKCkKLSAgICAgICAgewotICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNf
bm90X3JlYWR5KTsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihOZXR3b3JrRXJy
b3IpID09IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7Ci0KLSAgICAgICAgICAg
IFJlZjxKU09OOjpPYmplY3Q+IGpzb25SZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgp
OwotICAgICAgICAgICAgYXV0byByZXN1bHQgPSBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJl
ZjxOZXR3b3JrRXJyb3I+Kj4oJmpzb25SZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVybiByZXN1
bHQ7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgLyoKLSAgICAgKiBTeW50aGV0aWMgY29uc3Ry
dWN0b3I6Ci0gICAgICogUmVmPE5ldHdvcmtFcnJvcj4gcmVzdWx0ID0gTmV0d29ya0Vycm9yOjpj
cmVhdGUoKQotICAgICAqICAgICAuc2V0TWVzc2FnZSguLi4pCi0gICAgICogICAgIC5zZXRDb2Rl
KC4uLikKLSAgICAgKiAgICAgLnJlbGVhc2UoKTsKLSAgICAgKi8KLSAgICBzdGF0aWMgQnVpbGRl
cjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBCdWlsZGVyPE5v
RmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKLSAgICB9Ci19OwotCi19IC8vIE5l
dHdvcmsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsK
LQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0K
LX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9i
amVjdHMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hl
cnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgt
bWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmRE
aXNwYXRjaGVycy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQotQHByb3RvY29sIFRl
c3RQcm90b2NvbE5ldHdvcmtEb21haW5IYW5kbGVyOwotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsK
LQotCi1jbGFzcyBPYmpDSW5zcGVjdG9yTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDog
cHVibGljIEFsdGVybmF0ZU5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlciB7Ci0gICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgT2JqQ0luc3BlY3Rvck5ldHdvcmtCYWNrZW5k
RGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluSGFuZGxlcj4gaGFuZGxlcikg
eyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQotICAgIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgcmVx
dWVzdElkKSBmaW5hbDsKLXByaXZhdGU6Ci0gICAgUmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbE5l
dHdvcmtEb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5o
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0
Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNp
bXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJz
LmgiCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0K
LW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrQmFja2Vu
ZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZShsb25nIHJlcXVlc3RJZCkKLXsKLSAgICBpZiAoIVtt
X2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IobG9hZFJlc291cmNlV2l0aEVy
cm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6
TWV0aG9kTm90Rm91bmQsICInTmV0d29yay5sb2FkUmVzb3VyY2UnIHdhcyBub3QgZm91bmQiX3Mp
OwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcg
KmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJy
b3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKLSAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICB9Owot
Ci0gICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2Up
OwotICAgIH07Ci0KLSAgICBbbV9kZWxlZ2F0ZSBsb2FkUmVzb3VyY2VXaXRoRXJyb3JDYWxsYmFj
azplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOwotfQotCi0K
LX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJh
Y2tlbmREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbi5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMt
d2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+Ci0KLV9fYXR0
cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9j
b2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4s
IHNldHRlcj1zZXROZXR3b3JrSGFuZGxlcjopIGlkPFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5I
YW5kbGVyPiBuZXR3b3JrSGFuZGxlcjsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkg
VGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkV2ZW50RGlzcGF0Y2hlciAqbmV0d29ya0V2ZW50RGlz
cGF0Y2hlcjsKLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRp
b24uaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRm
b3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2lt
cG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2xJbnRlcm5hbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgi
Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgot
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+
Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0
Y2hlcnMuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVycy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW1wbGVtZW50YXRpb24g
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29u
dHJvbGxlciogX2NvbnRyb2xsZXI7Ci0gICAgaWQ8VGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkhh
bmRsZXI+IF9uZXR3b3JrSGFuZGxlcjsKLSAgICBUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluRXZl
bnREaXNwYXRjaGVyICpfbmV0d29ya0V2ZW50RGlzcGF0Y2hlcjsKLX0KLQotLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKilj
b250cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0g
ICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIpOwotICAgIF9jb250cm9s
bGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClkZWFsbG9j
Ci17Ci0gICAgW19uZXR3b3JrSGFuZGxlciByZWxlYXNlXTsKLSAgICBbX25ldHdvcmtFdmVudERp
c3BhdGNoZXIgcmVsZWFzZV07Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi0tICh2b2lkKXNl
dE5ldHdvcmtIYW5kbGVyOihpZDxUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluSGFuZGxlcj4paGFu
ZGxlcgotewotICAgIGlmIChoYW5kbGVyID09IF9uZXR3b3JrSGFuZGxlcikKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgW19uZXR3b3JrSGFuZGxlciByZWxlYXNlXTsKLSAgICBfbmV0d29ya0hhbmRs
ZXIgPSBbaGFuZGxlciByZXRhaW5dOwotCi0gICAgYXV0byBhbHRlcm5hdGVEaXNwYXRjaGVyID0g
bWFrZVVuaXF1ZTxPYmpDSW5zcGVjdG9yTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyPihoYW5kbGVy
KTsKLSAgICBhdXRvIGFsdGVybmF0ZUFnZW50ID0gbWFrZVVuaXF1ZTxBbHRlcm5hdGVEaXNwYXRj
aGFibGVBZ2VudDxOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIsIEFsdGVybmF0ZU5ldHdvcmtCYWNr
ZW5kRGlzcGF0Y2hlcj4+KCJOZXR3b3JrIl9zLCAqX2NvbnRyb2xsZXIsIFdURk1vdmUoYWx0ZXJu
YXRlRGlzcGF0Y2hlcikpOwotICAgIF9jb250cm9sbGVyLT5hcHBlbmRFeHRyYUFnZW50KFdURk1v
dmUoYWx0ZXJuYXRlQWdlbnQpKTsKLX0KLQotLSAoaWQ8VGVzdFByb3RvY29sTmV0d29ya0RvbWFp
bkhhbmRsZXI+KW5ldHdvcmtIYW5kbGVyCi17Ci0gICAgcmV0dXJuIF9uZXR3b3JrSGFuZGxlcjsK
LX0KLQotLSAoVGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkV2ZW50RGlzcGF0Y2hlciAqKW5ldHdv
cmtFdmVudERpc3BhdGNoZXIKLXsKLSAgICBpZiAoIV9uZXR3b3JrRXZlbnREaXNwYXRjaGVyKQot
ICAgICAgICBfbmV0d29ya0V2ZW50RGlzcGF0Y2hlciA9IFtbVGVzdFByb3RvY29sTmV0d29ya0Rv
bWFpbkV2ZW50RGlzcGF0Y2hlciBhbGxvY10gaW5pdFdpdGhDb250cm9sbGVyOl9jb250cm9sbGVy
XTsKLSAgICByZXR1cm4gX25ldHdvcmtFdmVudERpc3BhdGNoZXI7Ci19Ci0KLUBlbmQKLQotCi0j
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2Nv
bEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgot
I2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsK
LQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5FdmVudERpc3BhdGNo
ZXIKLXsKLSAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwot
fQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3Bl
Y3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwot
ICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxl
cik7Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQot
Ci0tICh2b2lkKXJlc291cmNlTG9hZGVkCi17Ci0gICAgY29uc3QgRnJvbnRlbmRSb3V0ZXImIHJv
dXRlciA9IF9jb250cm9sbGVyLT5mcm9udGVuZFJvdXRlcigpOwotCi0gICAgUmVmPEpTT046Ok9i
amVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNz
YWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIk5ldHdvcmsucmVzb3VyY2VMb2FkZWQiX3MpOwot
ICAgIHJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKLX0KLQot
QGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQot
Ci0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91
bmRhdGlvbi5oPgotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0
Lmg+Ci0KLQotQGNsYXNzIFRlc3RQcm90b2NvbE5ldHdvcmtFcnJvcjsKLQotdHlwZWRlZiBOU19F
TlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sUGxhdGZvcm0pIHsKLSAgICBUZXN0UHJvdG9jb2xQ
bGF0Zm9ybUFsbCwKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWMsCi0gICAgVGVzdFBy
b3RvY29sUGxhdGZvcm1JT1MsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUywKLX07Ci0K
LQotCi0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFj
ZSBUZXN0UHJvdG9jb2xOZXR3b3JrRXJyb3IgOiBSV0lQcm90b2NvbEpTT05PYmplY3QKLS0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4g
KilwYXlsb2FkOwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVBy
b3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhN
ZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZTooaW50KWNvZGU7Ci0vKiByZXF1aXJlZCAq
LyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKm1lc3NhZ2U7Ci0vKiByZXF1
aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQgY29kZTsKLUBlbmQKLQot
QHByb3RvY29sIFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5IYW5kbGVyIDxOU09iamVjdD4KLUBv
cHRpb25hbAotLSAodm9pZClsb2FkUmVzb3VyY2VXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShO
U1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKHZv
aWQpKXN1Y2Nlc3NDYWxsYmFjazsKLUBlbmQKLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAo
ImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5FdmVudERp
c3BhdGNoZXIgOiBOU09iamVjdAotLSAodm9pZClyZXNvdXJjZUxvYWRlZDsKLUBlbmQKLQotCi0j
aW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3Rz
Lmg+Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbEludGVybmFsLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBk
ZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAi
VGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1
ZXMuaD4KLQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluRXZlbnREaXNwYXRj
aGVyIChQcml2YXRlKQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooSW5zcGVj
dG9yOjpBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXI7Ci1AZW5kCi0K
LQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgi
Ci0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+Ci0K
LW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+
Ci1PcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcm
IHZhbHVlKTsKLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFBs
YXRmb3JtIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3Rv
Y29sUGxhdGZvcm1BbGw6Ci0gICAgICAgIHJldHVybiAiYWxsIl9zOwotICAgIGNhc2UgVGVzdFBy
b3RvY29sUGxhdGZvcm1HZW5lcmljOgotICAgICAgICByZXR1cm4gImdlbmVyaWMiX3M7Ci0gICAg
Y2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzoKLSAgICAgICAgcmV0dXJuICJpb3MiX3M7Ci0g
ICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOgotICAgICAgICByZXR1cm4gIm1hY29z
Il9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2Nv
bFBsYXRmb3JtPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAg
ICBpZiAodmFsdWUgPT0gImFsbCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9y
bUFsbDsKLSAgICBpZiAodmFsdWUgPT0gImdlbmVyaWMiKQotICAgICAgICByZXR1cm4gVGVzdFBy
b3RvY29sUGxhdGZvcm1HZW5lcmljOwotICAgIGlmICh2YWx1ZSA9PSAiaW9zIikKLSAgICAgICAg
cmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOwotICAgIGlmICh2YWx1ZSA9PSAibWFjb3Mi
KQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzsKLSAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwotfQotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVz
dFByb3RvY29sVHlwZVBhcnNlci5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29s
SlNPTk9iamVjdFByaXZhdGUuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGlu
dGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKE5ldHdvcmtEb21haW4pCi0KLSsg
KHZvaWQpX3BhcnNlTmV0d29ya0Vycm9yOihUZXN0UHJvdG9jb2xOZXR3b3JrRXJyb3IgKiopb3V0
VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9u
IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoTmV0d29ya0RvbWFpbikKLQotKyAodm9pZClf
cGFyc2VOZXR3b3JrRXJyb3I6KFRlc3RQcm90b2NvbE5ldHdvcmtFcnJvciAqKilvdXRWYWx1ZSBm
cm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZ
UEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IFtbVGVz
dFByb3RvY29sTmV0d29ya0Vycm9yIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07Ci19
Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5t
bQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUu
aD4KLSNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5o
PgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0
UHJvdG9jb2xOZXR3b3JrRXJyb3IKLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoo
bm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZAotewotICAgIGlm
ICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AibWVzc2FnZSJdLCBA
Im1lc3NhZ2UiKTsKLSAgICBzZWxmLm1lc3NhZ2UgPSBwYXlsb2FkW0AibWVzc2FnZSJdOwotCi0g
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiY29kZSJd
LCBAImNvZGUiKTsKLSAgICBzZWxmLmNvZGUgPSBbcGF5bG9hZFtAImNvZGUiXSBpbnRlZ2VyVmFs
dWVdOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90
b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopb2JqZWN0Ci17Ci0gICAgaWYgKCEo
c2VsZiA9IFtzdXBlciBpbml0V2l0aEpTT05PYmplY3Q6W29iamVjdCB0b0pTT05PYmplY3RdLmdl
dCgpXSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlIGNvZGU6KGlu
dCljb2RlCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJldHVy
biBuaWw7Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKG1lc3Nh
Z2UsIEAibWVzc2FnZSIpOwotCi0gICAgc2VsZi5tZXNzYWdlID0gbWVzc2FnZTsKLSAgICBzZWxm
LmNvZGUgPSBjb2RlOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpc2V0TWVzc2Fn
ZTooTlNTdHJpbmcgKiltZXNzYWdlCi17Ci0gICAgW3N1cGVyIHNldFN0cmluZzptZXNzYWdlIGZv
cktleTpAIm1lc3NhZ2UiXTsKLX0KLQotLSAoTlNTdHJpbmcgKiltZXNzYWdlCi17Ci0gICAgcmV0
dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJtZXNzYWdlIl07Ci19Ci0KLS0gKHZvaWQpc2V0Q29k
ZTooaW50KWNvZGUKLXsKLSAgICBbc3VwZXIgc2V0SW50ZWdlcjpjb2RlIGZvcktleTpAImNvZGUi
XTsKLX0KLQotLSAoaW50KWNvZGUKLXsKLSAgICByZXR1cm4gW3N1cGVyIGludGVnZXJGb3JLZXk6
QCJjb2RlIl07Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVz
Lm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbiBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRv
bWFpbi5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4zYmY0ZGZm
NWNjYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCkBAIC0wLDAg
KzEsMjIgQEAKK1sKK3sKKyAgICAiZG9tYWluIjogIlJ1bnRpbWUiLAorICAgICJ0eXBlcyI6IFsK
KyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlJlbW90ZU9iamVjdElkIiwKKyAgICAgICAg
ICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVl
IG9iamVjdCBpZGVudGlmaWVyLiIKKyAgICAgICAgfQorICAgIF0KK30sCit7CisgICAgImRvbWFp
biI6ICJSdW50aW1lMiIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAi
aWQiOiAiUmVtb3RlT2JqZWN0SWQiLAorICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAg
ICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIuIgorICAg
ICAgICB9CisgICAgXQorfQorXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29u
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3NoYWRvd2Vk
LW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwLi4yMGEwYzE1NTI3NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9zaGFkb3dlZC1vcHRpb25hbC10eXBlLXNl
dHRlcnMuanNvbgpAQCAtMCwwICsxLDMxIEBACit7CisgICAgImRvbWFpbiI6ICJSdW50aW1lIiwK
KyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJLZXlQYXRoIiwK
KyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24i
OiAiS2V5IHBhdGguIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAidHlwZSIsCisgICAgICAgICAgICAg
ICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAgICAgICAgICJlbnVtIjogWyJu
dWxsIiwgInN0cmluZyIsICJhcnJheSJdLAorICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRp
b24iOiAiS2V5IHBhdGggdHlwZS4iCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICJuYW1lIjogInN0cmluZyIsCisgICAgICAgICAgICAg
ICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAgICAgICAgICJvcHRpb25hbCI6
IHRydWUsCisgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJTdHJpbmcgdmFsdWUu
IgorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAibmFtZSI6ICJhcnJheSIsCisgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImFycmF5
IiwKKyAgICAgICAgICAgICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICAgICAgICAg
ICAgICAgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0sCisgICAgICAgICAgICAgICAgICAg
ICJkZXNjcmlwdGlvbiI6ICJBcnJheSB2YWx1ZS4iCisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgXQorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3Nob3VsZC1zdHJpcC1jb21tZW50cy5qc29u
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3Nob3VsZC1z
dHJpcC1jb21tZW50cy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
Li5lY2UxZGNmYzYxYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9zaG91bGQtc3RyaXAtY29tbWVudHMuanNvbgpAQCAtMCww
ICsxLDUgQEAKK3sKKyAgICAvKiBhYm92ZSAqLworICAgIC8qIGJlZm9yZSAqLyAiZG9tYWluIiAv
KiBpbiAqLyA6IC8qIGluICovICJDb21tZW50IiAvKiBhZnRlciAqLworICAgIC8qIGJlbG93ICov
Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24gYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1kZWNsYXJhdGlv
bi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAuLmNiYzlkNTM5NDc4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNl
ZC1wcmltaXRpdmUtdHlwZS5qc29uCkBAIC0wLDAgKzEsMTAgQEAKK3sKKyAgICAiZG9tYWluIjog
IlJ1bnRpbWUiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjog
IlJlbW90ZU9iamVjdElkIiwKKyAgICAgICAgICAgICJ0eXBlIjogImludGVnZXIiLAorICAgICAg
ICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4iCisgICAgICAg
IH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24gYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1kZWNsYXJhdGlvbi1h
cnJheS10eXBlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmNm
YjA4YmQ5NDBiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCkBAIC0w
LDAgKzEsNTAgQEAKK1sKK3sKKyAgICAiZG9tYWluIjogIkRlYnVnZ2VyIiwKKyAgICAidHlwZXMi
OiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJCcmVha3BvaW50SWQiLAorICAgICAg
ICAgICAgInR5cGUiOiAiaW50ZWdlciIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAg
ICAgImlkIjogIlJlYXNvbiIsCisgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAg
ICAgICAgImVudW0iOiBbIkRpZWQiLCAiRmFpbnRlZCIsICJIdW5ncnkiXQorICAgICAgICB9Cisg
ICAgXQorfSwKK3sKKyAgICAiZG9tYWluIjogIlJ1bnRpbWUiLAorICAgICJ0eXBlcyI6IFsKKyAg
ICAgICAgeworICAgICAgICAgICAgImlkIjogIk9iamVjdElkIiwKKyAgICAgICAgICAgICJ0eXBl
IjogImludGVnZXIiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJM
dWNreU51bWJlcnMiLAorICAgICAgICAgICAgInR5cGUiOiAiYXJyYXkiLAorICAgICAgICAgICAg
Iml0ZW1zIjogeyAidHlwZSI6ICJpbnRlZ2VyIiB9CisgICAgICAgIH0sCisgICAgICAgIHsKKyAg
ICAgICAgICAgICJpZCI6ICJCYWJ5TmFtZXMiLAorICAgICAgICAgICAgInR5cGUiOiAiYXJyYXki
LAorICAgICAgICAgICAgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0KKyAgICAgICAgfSwK
KyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIk5ld09iamVjdHMiLAorICAgICAgICAgICAg
InR5cGUiOiAiYXJyYXkiLAorICAgICAgICAgICAgIml0ZW1zIjogeyAiJHJlZiI6ICJPYmplY3RJ
ZCIgfQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiT2xkT2JqZWN0
cyIsCisgICAgICAgICAgICAidHlwZSI6ICJhcnJheSIsCisgICAgICAgICAgICAiaXRlbXMiOiB7
ICIkcmVmIjogIkRlYnVnZ2VyLkJyZWFrcG9pbnRJZCIgfQorICAgICAgICB9LAorICAgICAgICB7
CisgICAgICAgICAgICAiaWQiOiAiU3RvcFJlYXNvbnMiLAorICAgICAgICAgICAgInR5cGUiOiAi
YXJyYXkiLAorICAgICAgICAgICAgIml0ZW1zIjogeyAiJHJlZiI6ICJEZWJ1Z2dlci5SZWFzb24i
IH0KKyAgICAgICAgfQorICAgIF0KK30KK10KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5q
c29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUt
ZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAuLjlmMGFlZTljOTFiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBl
Lmpzb24KQEAgLTAsMCArMSwxNSBAQAoreworICAgICJkb21haW4iOiAiUnVudGltZSIsCisgICAg
InR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiRmFybUFuaW1hbHMiLAor
ICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICJlbnVtIjogWyJQaWdz
IiwgIkNvd3MiLCAiQ2F0cyIsICJIZW5zIl0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAg
ICAgICAgImlkIjogIlR3b0xlZ2dlZEFuaW1hbHMiLAorICAgICAgICAgICAgInR5cGUiOiAic3Ry
aW5nIiwKKyAgICAgICAgICAgICJlbnVtIjogWyJEdWNrcyIsICJIZW5zIiwgIkNyb3dzIiwgIkZs
YW1pbmdvcyJdCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1kZWNsYXJhdGlvbi1vYmplY3Qt
dHlwZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMC4uMmM0M2MzMzA5OTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1kZWNsYXJhdGlvbi1v
YmplY3QtdHlwZS5qc29uCkBAIC0wLDAgKzEsMTAwIEBACitbCit7CisgICAgImRvbWFpbiI6ICJE
YXRhYmFzZSIsCisgICAgImRlc2NyaXB0aW9uIjogIlRlc3QgdHlwZSBidWlsZGVyIGdlbmVyYXRp
b24gb2YgdmFyaW91cyBvYmplY3QgdHlwZXMuIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsK
KyAgICAgICAgICAgICJpZCI6ICJFcnJvciIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3Qi
LAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkRhdGFiYXNlIGVycm9yLiIsCisgICAgICAg
ICAgICAicHJvcGVydGllcyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm1lc3NhZ2Ui
LCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgbWVzc2FnZS4iIH0sCisg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2RlIiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNj
cmlwdGlvbiI6ICJFcnJvciBjb2RlLiIgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAg
ICAgICB7CisgICAgICAgICAgICAiaWQiOiAiRXJyb3JMaXN0IiwKKyAgICAgICAgICAgICJ0eXBl
IjogImFycmF5IiwKKyAgICAgICAgICAgICJpdGVtcyI6IHsgIiRyZWYiOiAiRXJyb3IiIH0KKyAg
ICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIk1vdXNlQnV0dG9uIiwKKyAg
ICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAi
RW51bWVyYXRlcyBkaWZmZXJlbnQgbW91c2UgYnV0dG9ucyB0aGF0IGNhbiBiZSB1c2VkLiIsCisg
ICAgICAgICAgICAiZW51bSI6IFsKKyAgICAgICAgICAgICAgICAiTm9uZSIsCisgICAgICAgICAg
ICAgICAgIkxlZnQiLAorICAgICAgICAgICAgICAgICJNaWRkbGUiLAorICAgICAgICAgICAgICAg
ICJSaWdodCIKKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAg
ICAgImlkIjogIk9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlIiwKKyAgICAgICAgICAgICJ0eXBlIjog
Im9iamVjdCIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKKyAgICAgICAgICAgICAgICB7
ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAib3B0aW9uYWwiOiB0cnVl
LCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAorICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAiYnV0dG9ucyIsICJ0eXBlIjogImFycmF5IiwgIm9wdGlvbmFsIjogdHJ1ZSwgIml0ZW1z
IjogeyAiJHJlZiI6ICJNb3VzZUJ1dHRvbiIgfSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAiZGlyZWN0aW9uYWxpdHkiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsiTFRSIiwgIlJU
TCJdLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3Rl
cyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6IHRy
dWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVj
dCIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxv
YWQiLCAidHlwZSI6ICJhbnkiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJlcnJvciIsICIkcmVmIjogIkVycm9yIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAor
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZXJyb3JMaXN0IiwgIiRyZWYiOiAiRXJyb3JMaXN0
IiwgIm9wdGlvbmFsIjogdHJ1ZSB9CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAg
IHsKKyAgICAgICAgICAgICJpZCI6ICJQYXJhbWV0ZXJCdW5kbGUiLAorICAgICAgICAgICAgInR5
cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsg
InR5cGUiOiAic3RyaW5nIiB9IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJidXR0b25z
IiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICIkcmVmIjogIk1vdXNlQnV0dG9uIiB9IH0s
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkaXJlY3Rpb25hbGl0eSIsICJ0eXBlIjogInN0
cmluZyIsICJlbnVtIjogWyJMVFIiLCAiUlRMIl0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiB9LAorICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiB9LAorICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogImVycm9yIiwgIiRyZWYiOiAiRXJyb3IiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJlcnJvckxpc3QiLCAiJHJlZiI6ICJFcnJvckxpc3QiIH0KKyAgICAgICAgICAgIF0KKyAgICAg
ICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIk9iamVjdFdpdGhQcm9wZXJ0eU5h
bWVDb25mbGljdHMiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkNvbmZsaWN0ZWQgbmFt
ZXMgbWF5IGNhdXNlIGdlbmVyYXRlZCBnZXR0ZXJzL3NldHRlcnMgdG8gY2xhc2ggd2l0aCBidWls
dC1pbiBJbnNwZWN0b3JPYmplY3QgbWV0aG9kcy4iLAorICAgICAgICAgICAgInR5cGUiOiAib2Jq
ZWN0IiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAiaW50ZWdlciIsICJ0eXBlIjogInN0cmluZyIgfSwKKyAgICAgICAgICAgICAgICB7ICJu
YW1lIjogImFycmF5IiwgInR5cGUiOiAic3RyaW5nIiB9LAorICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAic3RyaW5nIiwgInR5cGUiOiAic3RyaW5nIiB9LAorICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAidmFsdWUiLCAidHlwZSI6ICJzdHJpbmciIH0sCisgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJvYmplY3QiLCAidHlwZSI6ICJzdHJpbmciIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAg
fSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkR1bW15T2JqZWN0IiwKKyAgICAgICAg
ICAgICJkZXNjcmlwdGlvbiI6ICJBbiBvcGVuIG9iamVjdCB0aGF0IGRvZXNuJ3QgaGF2ZSBhbnkg
cHJlZGVmaW5lZCBmaWVsZHMuIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIKKyAgICAg
ICAgfQorICAgIF0KK30sCit7CisgICAgImRvbWFpbiI6ICJUZXN0IiwKKyAgICAiZGVzY3JpcHRp
b24iOiAiVGVzdCB0aGUgZ2VuZXJhdGlvbiBvZiBzcGVjaWFsIGJlaGF2aW9ycyB0aGF0IG9ubHkg
YXBwbHkgdG8gc3BlY2lmaWMgY2xhc3Nlcy4iLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgewor
ICAgICAgICAgICAgImlkIjogIlBhcmFtZXRlckJ1bmRsZSIsCisgICAgICAgICAgICAidHlwZSI6
ICJvYmplY3QiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJkaXJlY3Rpb25hbGl0eSIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJM
VFIiLCAiUlRMIl0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImJ1dHRvbnMiLCAidHlw
ZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgIiRyZWYiOiAiRGF0YWJhc2UuTW91c2VCdXR0b24iIH0g
fSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJy
YXkiLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAorICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciIH0sCisgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiIH0sCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiIH0sCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiB9LAorICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAiZXJyb3IiLCAiJHJlZiI6ICJEYXRhYmFzZS5FcnJvciIgfQorICAgICAgICAgICAg
XQorICAgICAgICB9CisgICAgXQorfQorXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMu
anNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBl
LXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAuLjgzZDk0YmU4OTdkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUt
Y2FzdHMuanNvbgpAQCAtMCwwICsxLDUxIEBACitbCit7CisgICAgImRvbWFpbiI6ICJUZXN0IiwK
KyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJUeXBlTmVlZGlu
Z0Nhc3QiLAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAgICJkZXNj
cmlwdGlvbiI6ICJBIGR1bW15IHR5cGUgdGhhdCByZXF1aXJlcyBydW50aW1lIGNhc3RzLCBhbmQg
Zm9yY2VzIG5vbi1wcmltaXRpdmUgcmVmZXJlbmNlZCB0eXBlcyB0byBhbHNvIGVtaXQgcnVudGlt
ZSBjYXN0IGhlbHBlcnMuIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAic3RyaW5nIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9u
IjogIlN0cmluZyBtZW1iZXIuIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibnVtYmVy
IiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJOdW1iZXIgbWVtYmVyLiIgfSwK
KyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImFuaW1hbHMiLCAiJHJlZiI6ICJDYXN0ZWRBbmlt
YWxzIiwgImRlc2NyaXB0aW9uIjogIkVudW0gbWVtYmVyLiIgfSwKKyAgICAgICAgICAgICAgICB7
ICJuYW1lIjogImlkIiwgIiRyZWYiOiAiQ2FzdGVkT2JqZWN0SWQiLCAiZGVzY3JpcHRpb24iOiAi
QWxpYXNlZCBtZW1iZXIuIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidHJlZSIsICIk
cmVmIjogIlJlY3Vyc2l2ZU9iamVjdDEiLCAiZGVzY3JpcHRpb24iOiAiUmVjdXJzaXZlIG9iamVj
dCBtZW1iZXIuIiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAg
ICAgICAgICJpZCI6ICJDYXN0ZWRPYmplY3RJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJpbnRl
Z2VyIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiVW5jYXN0ZWRP
YmplY3RJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJpbnRlZ2VyIgorICAgICAgICB9LAorICAg
ICAgICB7CisgICAgICAgICAgICAiaWQiOiAiVW5jYXN0ZWRBbmltYWxzIiwKKyAgICAgICAgICAg
ICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAiZW51bSI6IFsiUGlncyIsICJDb3dzIiwg
IkNhdHMiLCAiSGVucyJdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6
ICJDYXN0ZWRBbmltYWxzIiwKKyAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAg
ICAgICAiZW51bSI6IFsiRHVja3MiLCAiSGVucyIsICJDcm93cyIsICJGbGFtaW5nb3MiXQorICAg
ICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiUmVjdXJzaXZlT2JqZWN0MSIs
CisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgInByb3BlcnRpZXMi
OiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJvYmoiLCAiJHJlZiI6ICJSZWN1cnNpdmVP
YmplY3QyIiwgIm9wdGlvbmFsIjogdHJ1ZSB9CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisg
ICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJSZWN1cnNpdmVPYmplY3QyIiwKKyAgICAgICAg
ICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKKyAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogIm9iaiIsICIkcmVmIjogIlJlY3Vyc2l2ZU9iamVjdDEiLCAi
b3B0aW9uYWwiOiB0cnVlIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0KK30KK10K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy90eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45OWIwMjIwZDMxMgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy90eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24KQEAgLTAsMCArMSwyMSBAQAoreworICAg
ICJkb21haW4iOiAiVGVzdCIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAg
ICAiaWQiOiAiTm9PcGVuUGFyYW1ldGVycyIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3Qi
LAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJvbmUiLCAidHlwZSI6ICJudW1iZXIiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0
d28iLCAidHlwZSI6ICJudW1iZXIiIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAg
ICAgeworICAgICAgICAgICAgImlkIjogIk9wZW5QYXJhbWV0ZXJzIiwKKyAgICAgICAgICAgICJ0
eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKKyAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogImFscGhhIiwgInR5cGUiOiAibnVtYmVyIiB9LAorICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAiYmV0YSIsICJ0eXBlIjogIm51bWJlciIgfQorICAgICAgICAgICAgXQor
ICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3ZlcnNpb24uanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy92ZXJzaW9uLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAuLjUwN2E1ZDkwMTc2Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3ZlcnNpb24uanNvbgpA
QCAtMCwwICsxLDYgQEAKK3siZG9tYWlucyI6WworeworICAgICJkb21haW4iOiAiVmVyc2lvbkRv
bWFpbiIsCisgICAgInZlcnNpb24iOiA0MgorfQorXX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuaWRsIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5pZGwKaW5kZXggZTc4YzE4OTE5NjIuLjJj
Y2ExYjcwMzJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
RnJvbnRlbmRIb3N0LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
RnJvbnRlbmRIb3N0LmlkbApAQCAtOTMsOSArOTMsNyBAQAogICAgIGJvb2xlYW4gaXNCZWluZ0lu
c3BlY3RlZCgpOwogCiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGJvb2xlYW4gc3VwcG9ydHNEaWFn
bm9zdGljTG9nZ2luZzsKLSNpZiBFTkFCTEVfSU5TUEVDVE9SX1RFTEVNRVRSWQotICAgIHZvaWQg
bG9nRGlhZ25vc3RpY0V2ZW50KERPTVN0cmluZyBldmVudE5hbWUsIERPTVN0cmluZyBjb250ZW50
KTsKLSNlbmRpZgorICAgIFtDb25kaXRpb25hbD1JTlNQRUNUT1JfVEVMRU1FVFJZXSB2b2lkIGxv
Z0RpYWdub3N0aWNFdmVudChET01TdHJpbmcgZXZlbnROYW1lLCBET01TdHJpbmcgY29udGVudCk7
CiB9OwogCiBkaWN0aW9uYXJ5IENvbnRleHRNZW51SXRlbSB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwCmluZGV4IDBjNDQy
ZWU5MDg4Li5hY2E5MzI4NmFhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAKQEAgLTc5MywxMSArNzkzLDEzIEBAIHZv
aWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpmcmFtZUNsZWFyZWRTY2hlZHVsZWROYXZpZ2F0
aW9uSW1wbChJbnN0cnVtZW50aW5nCiAgICAgICAgIGluc3BlY3RvclBhZ2VBZ2VudC0+ZnJhbWVD
bGVhcmVkU2NoZWR1bGVkTmF2aWdhdGlvbihmcmFtZSk7CiB9CiAKKyNpZiBFTkFCTEUoREFSS19N
T0RFX0NTUykgfHwgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKIHZvaWQgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpkZWZhdWx0QXBwZWFyYW5jZURpZENoYW5nZUltcGwoSW5zdHJ1bWVudGlu
Z0FnZW50cyYgaW5zdHJ1bWVudGluZ0FnZW50cywgYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSkKIHsK
ICAgICBpZiAoSW5zcGVjdG9yUGFnZUFnZW50KiBpbnNwZWN0b3JQYWdlQWdlbnQgPSBpbnN0cnVt
ZW50aW5nQWdlbnRzLmluc3BlY3RvclBhZ2VBZ2VudCgpKQogICAgICAgICBpbnNwZWN0b3JQYWdl
QWdlbnQtPmRlZmF1bHRBcHBlYXJhbmNlRGlkQ2hhbmdlKHVzZURhcmtBcHBlYXJhbmNlKTsKIH0K
KyNlbmRpZgogCiB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbERlc3Ryb3lDYWNo
ZWRSZXNvdXJjZUltcGwoQ2FjaGVkUmVzb3VyY2UmIGNhY2hlZFJlc291cmNlKQogewpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5o
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oCmlu
ZGV4IDAzYmRkNTVjYzkzLi4xODg5NTY0NzhlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaApAQCAtMjI5LDcgKzIyOSw5IEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBmcmFtZVN0b3BwZWRMb2FkaW5nKEZyYW1lJik7CiAg
ICAgc3RhdGljIHZvaWQgZnJhbWVTY2hlZHVsZWROYXZpZ2F0aW9uKEZyYW1lJiwgU2Vjb25kcyBk
ZWxheSk7CiAgICAgc3RhdGljIHZvaWQgZnJhbWVDbGVhcmVkU2NoZWR1bGVkTmF2aWdhdGlvbihG
cmFtZSYpOworI2lmIEVOQUJMRShEQVJLX01PREVfQ1NTKSB8fCBIQVZFKE9TX0RBUktfTU9ERV9T
VVBQT1JUKQogICAgIHN0YXRpYyB2b2lkIGRlZmF1bHRBcHBlYXJhbmNlRGlkQ2hhbmdlKFBhZ2Um
LCBib29sIHVzZURhcmtBcHBlYXJhbmNlKTsKKyNlbmRpZgogICAgIHN0YXRpYyB2b2lkIHdpbGxE
ZXN0cm95Q2FjaGVkUmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2UmKTsKIAogICAgIHN0YXRpYyBib29s
IHdpbGxJbnRlcmNlcHRSZXF1ZXN0KGNvbnN0IEZyYW1lKiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0
Jik7CkBAIC00MzQsNyArNDM2LDkgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCBmcmFtZVN0
b3BwZWRMb2FkaW5nSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiwgRnJhbWUmKTsKICAgICBzdGF0
aWMgdm9pZCBmcmFtZVNjaGVkdWxlZE5hdmlnYXRpb25JbXBsKEluc3RydW1lbnRpbmdBZ2VudHMm
LCBGcmFtZSYsIFNlY29uZHMgZGVsYXkpOwogICAgIHN0YXRpYyB2b2lkIGZyYW1lQ2xlYXJlZFNj
aGVkdWxlZE5hdmlnYXRpb25JbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmLCBGcmFtZSYpOworI2lm
IEVOQUJMRShEQVJLX01PREVfQ1NTKSB8fCBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQogICAg
IHN0YXRpYyB2b2lkIGRlZmF1bHRBcHBlYXJhbmNlRGlkQ2hhbmdlSW1wbChJbnN0cnVtZW50aW5n
QWdlbnRzJiwgYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSk7CisjZW5kaWYKICAgICBzdGF0aWMgdm9p
ZCB3aWxsRGVzdHJveUNhY2hlZFJlc291cmNlSW1wbChDYWNoZWRSZXNvdXJjZSYpOwogCiAgICAg
c3RhdGljIGJvb2wgd2lsbEludGVyY2VwdFJlcXVlc3RJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMm
LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmKTsKQEAgLTEyMzcsMTEgKzEyNDEsMTMgQEAgaW5saW5l
IHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpmcmFtZUNsZWFyZWRTY2hlZHVsZWROYXZp
Z2F0aW9uKEZyYW1lJiBmcmEKICAgICAgICAgZnJhbWVDbGVhcmVkU2NoZWR1bGVkTmF2aWdhdGlv
bkltcGwoKmluc3RydW1lbnRpbmdBZ2VudHMsIGZyYW1lKTsKIH0KIAorI2lmIEVOQUJMRShEQVJL
X01PREVfQ1NTKSB8fCBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQogaW5saW5lIHZvaWQgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkZWZhdWx0QXBwZWFyYW5jZURpZENoYW5nZShQYWdlJiBw
YWdlLCBib29sIHVzZURhcmtBcHBlYXJhbmNlKQogewogICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZS
T05URU5EUyh2b2lkKCkpOwogICAgIGRlZmF1bHRBcHBlYXJhbmNlRGlkQ2hhbmdlSW1wbChpbnN0
cnVtZW50aW5nQWdlbnRzRm9yUGFnZShwYWdlKSwgdXNlRGFya0FwcGVhcmFuY2UpOwogfQorI2Vu
ZGlmCiAKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbERlc3Ryb3lD
YWNoZWRSZXNvdXJjZShDYWNoZWRSZXNvdXJjZSYgY2FjaGVkUmVzb3VyY2UpCiB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU2hhZGVyUHJvZ3JhbS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU2hhZGVyUHJvZ3JhbS5jcHAKaW5k
ZXggMjkxYmQyNGIwNmYuLmY4MTZiYjZmNDM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yU2hhZGVyUHJvZ3JhbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvclNoYWRlclByb2dyYW0uY3BwCkBAIC0yNiw2ICsyNiw4IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yU2hhZGVyUHJvZ3JhbS5oIgog
CisjaWYgRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKQorCiAjaW5jbHVkZSAiSW5zcGVj
dG9yQ2FudmFzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSWRlbnRpZmllcnNGYWN0b3J5
Lmg+CiAjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CkBAIC0xNTIsMTAgKzE1NCw2IEBAIHN0YXRp
YyBSZWZQdHI8V2ViR1BVU2hhZGVyTW9kdWxlPiBzaGFkZXJGb3JUeXBlKFdlYkdQVVBpcGVsaW5l
JiBwaXBlbGluZSwgSW5zcGVjCiAKIFN0cmluZyBJbnNwZWN0b3JTaGFkZXJQcm9ncmFtOjpyZXF1
ZXN0U2hhZGVyU291cmNlKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6U2hhZGVyVHlwZSBz
aGFkZXJUeXBlKQogewotI2lmICFFTkFCTEUoV0VCR0wpICYmICFFTkFCTEUoV0VCR1BVKQotICAg
IFVOVVNFRF9QQVJBTShzaGFkZXJUeXBlKTsKLSNlbmRpZgotCiAgICAgcmV0dXJuIFdURjo6c3dp
dGNoT24obV9wcm9ncmFtLAogI2lmIEVOQUJMRShXRUJHTCkKICAgICAgICAgWyZdIChzdGQ6OnJl
ZmVyZW5jZV93cmFwcGVyPFdlYkdMUHJvZ3JhbT4gcHJvZ3JhbVdyYXBwZXIpIHsKQEAgLTE4NCwx
MSArMTgyLDYgQEAgU3RyaW5nIEluc3BlY3RvclNoYWRlclByb2dyYW06OnJlcXVlc3RTaGFkZXJT
b3VyY2UoSW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjoKIAogYm9vbCBJbnNwZWN0b3JTaGFk
ZXJQcm9ncmFtOjp1cGRhdGVTaGFkZXIoSW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpTaGFk
ZXJUeXBlIHNoYWRlclR5cGUsIGNvbnN0IFN0cmluZyYgc291cmNlKQogewotI2lmICFFTkFCTEUo
V0VCR0wpICYmICFFTkFCTEUoV0VCR1BVKQotICAgIFVOVVNFRF9QQVJBTShzaGFkZXJUeXBlKTsK
LSAgICBVTlVTRURfUEFSQU0oc291cmNlKTsKLSNlbmRpZgotCiAgICAgcmV0dXJuIFdURjo6c3dp
dGNoT24obV9wcm9ncmFtLAogI2lmIEVOQUJMRShXRUJHTCkKICAgICAgICAgWyZdIChzdGQ6OnJl
ZmVyZW5jZV93cmFwcGVyPFdlYkdMUHJvZ3JhbT4gcHJvZ3JhbVdyYXBwZXIpIHsKQEAgLTI4MSwz
ICsyNzQsNSBAQCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpTaGFkZXJQcm9ncmFt
PiBJbnNwZWN0b3JTaGFkZXJQcm9ncmFtOjpidWlsZE9iagogfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU2hhZGVyUHJvZ3JhbS5o
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclNoYWRlclByb2dyYW0uaAppbmRl
eCA2ZGYxM2RmZmRlYi4uY2NjNzNjZWYzNzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JTaGFkZXJQcm9ncmFtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclNoYWRlclByb2dyYW0uaApAQCAtMjUsNiArMjUsOCBAQAogCiAjcHJh
Z21hIG9uY2UKIAorI2lmIEVOQUJMRShXRUJHTCkgfHwgRU5BQkxFKFdFQkdQVSkKKwogI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sT2JqZWN0cy5oPgogI2luY2x1ZGUg
PHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KQEAgLTk5LDMgKzEw
MSw1IEBAIHByaXZhdGU6CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNhbnZhc0FnZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ2FudmFzQWdlbnQuY3BwCmluZGV4IDFk
Mzk4YzU0N2NjLi41ZmZmMjk4NjMzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JDYW52YXNBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDYW52YXNBZ2VudC5jcHAKQEAgLTg4LDcgKzg4LDkg
QEAgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6Okluc3BlY3RvckNhbnZhc0FnZW50KFBhZ2VBZ2VudENv
bnRleHQmIGNvbnRleHQpCiAgICAgLCBtX2luamVjdGVkU2NyaXB0TWFuYWdlcihjb250ZXh0Lmlu
amVjdGVkU2NyaXB0TWFuYWdlcikKICAgICAsIG1faW5zcGVjdGVkUGFnZShjb250ZXh0Lmluc3Bl
Y3RlZFBhZ2UpCiAgICAgLCBtX2NhbnZhc0Rlc3Ryb3llZFRpbWVyKCp0aGlzLCAmSW5zcGVjdG9y
Q2FudmFzQWdlbnQ6OmNhbnZhc0Rlc3Ryb3llZFRpbWVyRmlyZWQpCisjaWYgRU5BQkxFKFdFQkdM
KSB8fCBFTkFCTEUoV0VCR1BVKQogICAgICwgbV9wcm9ncmFtRGVzdHJveWVkVGltZXIoKnRoaXMs
ICZJbnNwZWN0b3JDYW52YXNBZ2VudDo6cHJvZ3JhbURlc3Ryb3llZFRpbWVyRmlyZWQpCisjZW5k
aWYgLy8gRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKQogewogfQogCkBAIC0xMzIsNyAr
MTM0LDcgQEAgdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nJikK
ICAgICAgICAgICAgIC8vIFRoZSBhY3R1YWwgImNvbnRleHQiIGZvciBXZWJHUFUgaXMgdGhlIGBX
ZWJHUFVEZXZpY2VgLCBub3QgdGhlIDxjYW52YXM+LgogICAgICAgICAgICAgaWYgKGlzPEdQVUNh
bnZhc0NvbnRleHQ+KGNvbnRleHQpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotI2VuZGlm
CisjZW5kaWYgLy8gRU5BQkxFKFdFQkdQVSkKIAogICAgICAgICAgICAgaWYgKGV4aXN0c0luQ3Vy
cmVudFBhZ2UoY29udGV4dC0+Y2FudmFzQmFzZSgpLnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkp
CiAgICAgICAgICAgICAgICAgYmluZENhbnZhcygqY29udGV4dCwgZmFsc2UpOwpAQCAtMTQ3LDcg
KzE0OSw3IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYp
CiAgICAgICAgICAgICAgICAgYmluZENhbnZhcygqZGV2aWNlLCBmYWxzZSk7CiAgICAgICAgIH0K
ICAgICB9Ci0jZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR1BVKQogCiAjaWYgRU5BQkxFKFdF
QkdMKQogICAgIHsKQEAgLTE1Nyw3ICsxNTksNyBAQCB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50
OjplbmFibGUoRXJyb3JTdHJpbmcmKQogICAgICAgICAgICAgICAgIGRpZENyZWF0ZVdlYkdMUHJv
Z3JhbSgqY29udGV4dFdlYkdMQmFzZSwgKnByb2dyYW0pOwogICAgICAgICB9CiAgICAgfQotI2Vu
ZGlmCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQogCiAjaWYgRU5BQkxFKFdFQkdQVSkKICAgICB7
CkBAIC0xNjcsNyArMTY5LDcgQEAgdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZW5hYmxlKEVy
cm9yU3RyaW5nJikKICAgICAgICAgICAgICAgICBkaWRDcmVhdGVXZWJHUFVQaXBlbGluZSgqZGV2
aWNlLCAqcGlwZWxpbmUpOwogICAgICAgICB9CiAgICAgfQotI2VuZGlmCisjZW5kaWYgLy8gRU5B
QkxFKFdFQkdQVSkKIH0KIAogdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZGlzYWJsZShFcnJv
clN0cmluZyYpCkBAIC0zMDMsNiArMzA1LDcgQEAgdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6
c3RvcFJlY29yZGluZyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYKICAg
ICBkaWRGaW5pc2hSZWNvcmRpbmdDYW52YXNGcmFtZSgqY29udGV4dCwgdHJ1ZSk7CiB9CiAKKyNp
ZiBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpCiB2b2lkIEluc3BlY3RvckNhbnZhc0Fn
ZW50OjpyZXF1ZXN0U2hhZGVyU291cmNlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3Qg
U3RyaW5nJiBwcm9ncmFtSWQsIGNvbnN0IFN0cmluZyYgc2hhZGVyVHlwZVN0cmluZywgU3RyaW5n
KiBvdXRTb3VyY2UpCiB7CiAgICAgYXV0byBpbnNwZWN0b3JQcm9ncmFtID0gYXNzZXJ0SW5zcGVj
dG9yUHJvZ3JhbShlcnJvclN0cmluZywgcHJvZ3JhbUlkKTsKQEAgLTM0MCw2ICszNDMsNyBAQCB2
b2lkIEluc3BlY3RvckNhbnZhc0FnZW50Ojp1cGRhdGVTaGFkZXIoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBjb25zdCBTdHJpbmcmCiAgICAgICAgIGVycm9yU3RyaW5nID0gIkZhaWxlZCB0byB1
cGRhdGUgc2hhZGVyIG9mIGdpdmVuIHNoYWRlclR5cGUgZm9yIGdpdmVuIHByb2dyYW1JZCJfczsK
IH0KIAorI2lmIEVOQUJMRShXRUJHTCkKIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnNldFNo
YWRlclByb2dyYW1EaXNhYmxlZChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmlu
ZyYgcHJvZ3JhbUlkLCBib29sIGRpc2FibGVkKQogewogICAgIGF1dG8gaW5zcGVjdG9yUHJvZ3Jh
bSA9IGFzc2VydEluc3BlY3RvclByb2dyYW0oZXJyb3JTdHJpbmcsIHByb2dyYW1JZCk7CkBAIC0z
NTcsNiArMzYxLDggQEAgdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6c2V0U2hhZGVyUHJvZ3Jh
bUhpZ2hsaWdodGVkKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywKIAogICAgIGluc3BlY3RvclBy
b2dyYW0tPnNldEhpZ2hsaWdodGVkKGhpZ2hsaWdodGVkKTsKIH0KKyNlbmRpZiAvLyBFTkFCTEUo
V0VCR0wpCisjZW5kaWYgLy8jaWYgRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKQogCiB2
b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpmcmFtZU5hdmlnYXRlZChGcmFtZSYgZnJhbWUpCiB7
CkBAIC02MjUsNyArNjMxLDcgQEAgYm9vbCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6aXNXZWJHTFBy
b2dyYW1IaWdobGlnaHRlZChXZWJHTFByb2dyYW0mIHByb2dyYW0pCiAKICAgICByZXR1cm4gaW5z
cGVjdG9yUHJvZ3JhbS0+aGlnaGxpZ2h0ZWQoKTsKIH0KLSNlbmRpZgorI2VuZGlmIC8vIEVOQUJM
RShXRUJHTCkKIAogI2lmIEVOQUJMRShXRUJHUFUpCiB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50
OjpkaWRDcmVhdGVXZWJHUFVEZXZpY2UoV2ViR1BVRGV2aWNlJiBkZXZpY2UpCkBAIC02ODgsNyAr
Njk0LDcgQEAgdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6d2lsbERlc3Ryb3lXZWJHUFVQaXBl
bGluZShXZWJHUFVQaXBlbGluZSYgcGlwZWxpbmUpCiAKICAgICB1bmJpbmRQcm9ncmFtKCppbnNw
ZWN0b3JQcm9ncmFtKTsKIH0KLSNlbmRpZgorI2VuZGlmIC8vIEVOQUJMRShXRUJHUFUpCiAKIHZv
aWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnN0YXJ0UmVjb3JkaW5nKEluc3BlY3RvckNhbnZhcyYg
aW5zcGVjdG9yQ2FudmFzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpSZWNvcmRpbmc6OkluaXRpYXRv
ciBpbml0aWF0b3IsIFJlY29yZGluZ09wdGlvbnMmJiByZWNvcmRpbmdPcHRpb25zKQogewpAQCAt
NzAwLDEwICs3MDYsMTAgQEAgdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6c3RhcnRSZWNvcmRp
bmcoSW5zcGVjdG9yQ2FudmFzJiBpbnNwZWN0b3JDYW52YXMsIEluc3AKICAgICAgICAgJiYgIWlz
PEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dD4oY29udGV4dCkKICNpZiBFTkFCTEUoV0VCR0wp
CiAgICAgICAgICYmICFpczxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+KGNvbnRleHQpCi0jZW5kaWYK
KyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCiAjaWYgRU5BQkxFKFdFQkdMMikKICAgICAgICAgJiYg
IWlzPFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ+KGNvbnRleHQpCi0jZW5kaWYKKyNlbmRpZiAvLyBF
TkFCTEUoV0VCR0wyKQogICAgICkKICAgICAgICAgcmV0dXJuOwogCkBAIC03MzMsNiArNzM5LDcg
QEAgdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6Y2FudmFzRGVzdHJveWVkVGltZXJGaXJlZCgp
CiAgICAgbV9yZW1vdmVkQ2FudmFzSWRlbnRpZmllcnMuY2xlYXIoKTsKIH0KIAorI2lmIEVOQUJM
RShXRUJHTCkgfHwgRU5BQkxFKFdFQkdQVSkKIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnBy
b2dyYW1EZXN0cm95ZWRUaW1lckZpcmVkKCkKIHsKICAgICBpZiAoIW1fcmVtb3ZlZFByb2dyYW1J
ZGVudGlmaWVycy5zaXplKCkpCkBAIC03NDMsNiArNzUwLDcgQEAgdm9pZCBJbnNwZWN0b3JDYW52
YXNBZ2VudDo6cHJvZ3JhbURlc3Ryb3llZFRpbWVyRmlyZWQoKQogCiAgICAgbV9yZW1vdmVkUHJv
Z3JhbUlkZW50aWZpZXJzLmNsZWFyKCk7CiB9CisjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKSB8fCBF
TkFCTEUoV0VCR1BVKQogCiB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpyZXNldCgpCiB7CkBA
IC03NTYsMTAgKzc2NCwxMiBAQCB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpyZXNldCgpCiAg
ICAgaWYgKG1fY2FudmFzRGVzdHJveWVkVGltZXIuaXNBY3RpdmUoKSkKICAgICAgICAgbV9jYW52
YXNEZXN0cm95ZWRUaW1lci5zdG9wKCk7CiAKKyNpZiBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShX
RUJHUFUpCiAgICAgbV9pZGVudGlmaWVyVG9JbnNwZWN0b3JQcm9ncmFtLmNsZWFyKCk7CiAgICAg
bV9yZW1vdmVkUHJvZ3JhbUlkZW50aWZpZXJzLmNsZWFyKCk7CiAgICAgaWYgKG1fcHJvZ3JhbURl
c3Ryb3llZFRpbWVyLmlzQWN0aXZlKCkpCiAgICAgICAgIG1fcHJvZ3JhbURlc3Ryb3llZFRpbWVy
LnN0b3AoKTsKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpCiAKICAg
ICBtX3JlY29yZGluZ0NhbnZhc0lkZW50aWZpZXJzLmNsZWFyKCk7CiB9CkBAIC03OTgsNyArODA4
LDcgQEAgSW5zcGVjdG9yQ2FudmFzJiBJbnNwZWN0b3JDYW52YXNBZ2VudDo6YmluZENhbnZhcyhX
ZWJHUFVEZXZpY2UmIGRldmljZSwgYm9vbCBjYXAKIAogICAgIHJldHVybiBpbnNwZWN0b3JDYW52
YXM7CiB9Ci0jZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR1BVKQogCiB2b2lkIEluc3BlY3Rv
ckNhbnZhc0FnZW50Ojp1bmJpbmRDYW52YXMoSW5zcGVjdG9yQ2FudmFzJiBpbnNwZWN0b3JDYW52
YXMpCiB7CkBAIC04MTEsNyArODIxLDcgQEAgdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6dW5i
aW5kQ2FudmFzKEluc3BlY3RvckNhbnZhcyYgaW5zcGVjdG9yQ2FudmFzKQogCiAgICAgZm9yIChh
dXRvKiBpbnNwZWN0b3JQcm9ncmFtIDogcHJvZ3JhbXNUb1JlbW92ZSkKICAgICAgICAgdW5iaW5k
UHJvZ3JhbSgqaW5zcGVjdG9yUHJvZ3JhbSk7Ci0jZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUoV0VC
R0wpCiAKICAgICBpZiAoYXV0byogY29udGV4dCA9IGluc3BlY3RvckNhbnZhcy5jYW52YXNDb250
ZXh0KCkpCiAgICAgICAgIGNvbnRleHQtPmNhbnZhc0Jhc2UoKS5yZW1vdmVPYnNlcnZlcigqdGhp
cyk7CkBAIC04NTYsOCArODY2LDkgQEAgUmVmUHRyPEluc3BlY3RvckNhbnZhcz4gSW5zcGVjdG9y
Q2FudmFzQWdlbnQ6OmZpbmRJbnNwZWN0b3JDYW52YXMoV2ViR1BVRGV2aWNlJgogICAgIH0KICAg
ICByZXR1cm4gbnVsbHB0cjsKIH0KLSNlbmRpZgorI2VuZGlmIC8vIEVOQUJMRShXRUJHUFUpCiAK
KyNpZiBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpCiB2b2lkIEluc3BlY3RvckNhbnZh
c0FnZW50Ojp1bmJpbmRQcm9ncmFtKEluc3BlY3RvclNoYWRlclByb2dyYW0mIGluc3BlY3RvclBy
b2dyYW0pCiB7CiAgICAgU3RyaW5nIGlkZW50aWZpZXIgPSBpbnNwZWN0b3JQcm9ncmFtLmlkZW50
aWZpZXIoKTsKQEAgLTg5MSw3ICs5MDIsNyBAQCBSZWZQdHI8SW5zcGVjdG9yU2hhZGVyUHJvZ3Jh
bT4gSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmZpbmRJbnNwZWN0b3JQcm9ncmFtKFdlYkdMUAogICAg
IH0KICAgICByZXR1cm4gbnVsbHB0cjsKIH0KLSNlbmRpZgorI2VuZGlmIC8vIEVOQUJMRShXRUJH
TCkKIAogI2lmIEVOQUJMRShXRUJHUFUpCiBSZWZQdHI8SW5zcGVjdG9yU2hhZGVyUHJvZ3JhbT4g
SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmZpbmRJbnNwZWN0b3JQcm9ncmFtKFdlYkdQVVBpcGVsaW5l
JiBwaXBlbGluZSkKQEAgLTkwMiw2ICs5MTMsNyBAQCBSZWZQdHI8SW5zcGVjdG9yU2hhZGVyUHJv
Z3JhbT4gSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmZpbmRJbnNwZWN0b3JQcm9ncmFtKFdlYkdQVQog
ICAgIH0KICAgICByZXR1cm4gbnVsbHB0cjsKIH0KLSNlbmRpZgorI2VuZGlmIC8vIEVOQUJMRShX
RUJHUFUpCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
YWdlbnRzL0luc3BlY3RvckNhbnZhc0FnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
YWdlbnRzL0luc3BlY3RvckNhbnZhc0FnZW50LmgKaW5kZXggZmY5YTUzM2UwNDguLjBlZjFhZWZi
NjQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rv
ckNhbnZhc0FnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JDYW52YXNBZ2VudC5oCkBAIC00MywxNyArNDMsMTkgQEAgY2xhc3MgSW5qZWN0ZWRTY3Jp
cHRNYW5hZ2VyOwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDYW52YXNSZW5kZXJpbmdD
b250ZXh0OworI2lmIEVOQUJMRShXRUJHTCkgfHwgRU5BQkxFKFdFQkdQVSkKIGNsYXNzIEluc3Bl
Y3RvclNoYWRlclByb2dyYW07CiAjaWYgRU5BQkxFKFdFQkdMKQogY2xhc3MgV2ViR0xQcm9ncmFt
OwogY2xhc3MgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTsKLSNlbmRpZgorI2VuZGlmIC8vIEVO
QUJMRShXRUJHTCkKICNpZiBFTkFCTEUoV0VCR1BVKQogY2xhc3MgR1BVQ2FudmFzQ29udGV4dDsK
IGNsYXNzIFdlYkdQVURldmljZTsKIGNsYXNzIFdlYkdQVVBpcGVsaW5lOwogY2xhc3MgV2ViR1BV
U3dhcENoYWluOwotI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdQVSkKKyNlbmRpZiAvLyBF
TkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpCiAKIHR5cGVkZWYgU3RyaW5nIEVycm9yU3Ry
aW5nOwogCkBAIC03OSwxMCArODEsMTQgQEAgcHVibGljOgogICAgIHZvaWQgc2V0UmVjb3JkaW5n
QXV0b0NhcHR1cmVGcmFtZUNvdW50KEVycm9yU3RyaW5nJiwgaW50IGNvdW50KSBvdmVycmlkZTsK
ICAgICB2b2lkIHN0YXJ0UmVjb3JkaW5nKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBjYW52
YXNJZCwgY29uc3QgaW50KiBmcmFtZUNvdW50LCBjb25zdCBpbnQqIG1lbW9yeUxpbWl0KSBvdmVy
cmlkZTsKICAgICB2b2lkIHN0b3BSZWNvcmRpbmcoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcm
IGNhbnZhc0lkKSBvdmVycmlkZTsKKyNpZiBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUp
CiAgICAgdm9pZCByZXF1ZXN0U2hhZGVyU291cmNlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5n
JiBwcm9ncmFtSWQsIGNvbnN0IFN0cmluZyYgc2hhZGVyVHlwZSwgU3RyaW5nKiBzb3VyY2UpIG92
ZXJyaWRlOwogICAgIHZvaWQgdXBkYXRlU2hhZGVyKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5n
JiBwcm9ncmFtSWQsIGNvbnN0IFN0cmluZyYgc2hhZGVyVHlwZSwgY29uc3QgU3RyaW5nJiBzb3Vy
Y2UpIG92ZXJyaWRlOworI2lmIEVOQUJMRShXRUJHTCkKICAgICB2b2lkIHNldFNoYWRlclByb2dy
YW1EaXNhYmxlZChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgcHJvZ3JhbUlkLCBib29sIGRp
c2FibGVkKSBvdmVycmlkZTsKICAgICB2b2lkIHNldFNoYWRlclByb2dyYW1IaWdobGlnaHRlZChF
cnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgcHJvZ3JhbUlkLCBib29sIGhpZ2hsaWdodGVkKSBv
dmVycmlkZTsKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdM
KSB8fCBFTkFCTEUoV0VCR1BVKQogCiAgICAgLy8gQ2FudmFzT2JzZXJ2ZXIKICAgICB2b2lkIGNh
bnZhc0NoYW5nZWQoQ2FudmFzQmFzZSYsIGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwpAQCAt
MTA0LDE0ICsxMTAsMTQgQEAgcHVibGljOgogICAgIHZvaWQgd2lsbERlc3Ryb3lXZWJHTFByb2dy
YW0oV2ViR0xQcm9ncmFtJik7CiAgICAgYm9vbCBpc1dlYkdMUHJvZ3JhbURpc2FibGVkKFdlYkdM
UHJvZ3JhbSYpOwogICAgIGJvb2wgaXNXZWJHTFByb2dyYW1IaWdobGlnaHRlZChXZWJHTFByb2dy
YW0mKTsKLSNlbmRpZgorI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKICNpZiBFTkFCTEUoV0VCR1BV
KQogICAgIHZvaWQgZGlkQ3JlYXRlV2ViR1BVRGV2aWNlKFdlYkdQVURldmljZSYpOwogICAgIHZv
aWQgd2lsbERlc3Ryb3lXZWJHUFVEZXZpY2UoV2ViR1BVRGV2aWNlJik7CiAgICAgdm9pZCB3aWxs
Q29uZmlndXJlU3dhcENoYWluKEdQVUNhbnZhc0NvbnRleHQmLCBXZWJHUFVTd2FwQ2hhaW4mKTsK
ICAgICB2b2lkIGRpZENyZWF0ZVdlYkdQVVBpcGVsaW5lKFdlYkdQVURldmljZSYsIFdlYkdQVVBp
cGVsaW5lJik7CiAgICAgdm9pZCB3aWxsRGVzdHJveVdlYkdQVVBpcGVsaW5lKFdlYkdQVVBpcGVs
aW5lJik7Ci0jZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR1BVKQogCiBwcml2YXRlOgogICAg
IHN0cnVjdCBSZWNvcmRpbmdPcHRpb25zIHsKQEAgLTEyMiwyOCArMTI4LDMyIEBAIHByaXZhdGU6
CiAgICAgdm9pZCBzdGFydFJlY29yZGluZyhJbnNwZWN0b3JDYW52YXMmLCBJbnNwZWN0b3I6OlBy
b3RvY29sOjpSZWNvcmRpbmc6OkluaXRpYXRvciwgUmVjb3JkaW5nT3B0aW9ucyYmID0geyB9KTsK
IAogICAgIHZvaWQgY2FudmFzRGVzdHJveWVkVGltZXJGaXJlZCgpOworI2lmIEVOQUJMRShXRUJH
TCkgfHwgRU5BQkxFKFdFQkdQVSkKICAgICB2b2lkIHByb2dyYW1EZXN0cm95ZWRUaW1lckZpcmVk
KCk7CisjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKQogICAgIHZvaWQg
cmVzZXQoKTsKIAogICAgIEluc3BlY3RvckNhbnZhcyYgYmluZENhbnZhcyhDYW52YXNSZW5kZXJp
bmdDb250ZXh0JiwgYm9vbCBjYXB0dXJlQmFja3RyYWNlKTsKICNpZiBFTkFCTEUoV0VCR1BVKQog
ICAgIEluc3BlY3RvckNhbnZhcyYgYmluZENhbnZhcyhXZWJHUFVEZXZpY2UmLCBib29sIGNhcHR1
cmVCYWNrdHJhY2UpOwotI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdQVSkKICAgICB2b2lk
IHVuYmluZENhbnZhcyhJbnNwZWN0b3JDYW52YXMmKTsKICAgICBSZWZQdHI8SW5zcGVjdG9yQ2Fu
dmFzPiBhc3NlcnRJbnNwZWN0b3JDYW52YXMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGNh
bnZhc0lkKTsKICAgICBSZWZQdHI8SW5zcGVjdG9yQ2FudmFzPiBmaW5kSW5zcGVjdG9yQ2FudmFz
KENhbnZhc1JlbmRlcmluZ0NvbnRleHQmKTsKICNpZiBFTkFCTEUoV0VCR1BVKQogICAgIFJlZlB0
cjxJbnNwZWN0b3JDYW52YXM+IGZpbmRJbnNwZWN0b3JDYW52YXMoV2ViR1BVRGV2aWNlJik7Ci0j
ZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR1BVKQogCisjaWYgRU5BQkxFKFdFQkdMKSB8fCBF
TkFCTEUoV0VCR1BVKQogICAgIHZvaWQgdW5iaW5kUHJvZ3JhbShJbnNwZWN0b3JTaGFkZXJQcm9n
cmFtJik7CiAgICAgUmVmUHRyPEluc3BlY3RvclNoYWRlclByb2dyYW0+IGFzc2VydEluc3BlY3Rv
clByb2dyYW0oRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHByb2dyYW1JZCk7CiAjaWYgRU5B
QkxFKFdFQkdMKQogICAgIFJlZlB0cjxJbnNwZWN0b3JTaGFkZXJQcm9ncmFtPiBmaW5kSW5zcGVj
dG9yUHJvZ3JhbShXZWJHTFByb2dyYW0mKTsKLSNlbmRpZgorI2VuZGlmIC8vIEVOQUJMRShXRUJH
TCkKICNpZiBFTkFCTEUoV0VCR1BVKQogICAgIFJlZlB0cjxJbnNwZWN0b3JTaGFkZXJQcm9ncmFt
PiBmaW5kSW5zcGVjdG9yUHJvZ3JhbShXZWJHUFVQaXBlbGluZSYpOwotI2VuZGlmCisjZW5kaWYg
Ly8gRU5BQkxFKFdFQkdQVSkKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJH
UFUpCiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yOjpDYW52YXNGcm9udGVuZERpc3Bh
dGNoZXI+IG1fZnJvbnRlbmREaXNwYXRjaGVyOwogICAgIFJlZlB0cjxJbnNwZWN0b3I6OkNhbnZh
c0JhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwpAQCAtMTU1LDkgKzE2NSwx
MSBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxTdHJpbmc+IG1fcmVtb3ZlZENhbnZhc0lkZW50aWZp
ZXJzOwogICAgIFRpbWVyIG1fY2FudmFzRGVzdHJveWVkVGltZXI7CiAKKyNpZiBFTkFCTEUoV0VC
R0wpIHx8IEVOQUJMRShXRUJHUFUpCiAgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxJbnNwZWN0
b3JTaGFkZXJQcm9ncmFtPj4gbV9pZGVudGlmaWVyVG9JbnNwZWN0b3JQcm9ncmFtOwogICAgIFZl
Y3RvcjxTdHJpbmc+IG1fcmVtb3ZlZFByb2dyYW1JZGVudGlmaWVyczsKICAgICBUaW1lciBtX3By
b2dyYW1EZXN0cm95ZWRUaW1lcjsKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShX
RUJHUFUpCiAKICAgICBIYXNoU2V0PFN0cmluZz4gbV9yZWNvcmRpbmdDYW52YXNJZGVudGlmaWVy
czsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0
b3JET01BZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rv
ckRPTUFnZW50LmNwcAppbmRleCBhMmY4ZGZhMTYyNC4uYzM1YTA1OGI5NGEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuY3Bw
CkBAIC0xMjA3LDEwICsxMjA3LDE3IEBAIHN0ZDo6dW5pcXVlX3B0cjxIaWdobGlnaHRDb25maWc+
IEluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHRDb25maWdGcm9tSW5zcGVjdG9yCiAgICAgcmV0
dXJuIGhpZ2hsaWdodENvbmZpZzsKIH0KIAorI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCit2b2lk
IEluc3BlY3RvckRPTUFnZW50OjpzZXRJbnNwZWN0TW9kZUVuYWJsZWQoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBib29sIGVuYWJsZWQsIGNvbnN0IEpTT046Ok9iamVjdCogaGlnaGxpZ2h0Q29u
ZmlnKQoreworICAgIHNldFNlYXJjaGluZ0Zvck5vZGUoZXJyb3JTdHJpbmcsIGVuYWJsZWQsIGhp
Z2hsaWdodENvbmZpZyA/IGhpZ2hsaWdodENvbmZpZyA6IG51bGxwdHIsIGZhbHNlKTsKK30KKyNl
bHNlCiB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRJbnNwZWN0TW9kZUVuYWJsZWQoRXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBib29sIGVuYWJsZWQsIGNvbnN0IEpTT046Ok9iamVjdCogaGln
aGxpZ2h0Q29uZmlnLCBjb25zdCBib29sKiBzaG93UnVsZXJzKQogewogICAgIHNldFNlYXJjaGlu
Z0Zvck5vZGUoZXJyb3JTdHJpbmcsIGVuYWJsZWQsIGhpZ2hsaWdodENvbmZpZyA/IGhpZ2hsaWdo
dENvbmZpZyA6IG51bGxwdHIsIHNob3dSdWxlcnMgJiYgKnNob3dSdWxlcnMpOwogfQorI2VuZGlm
CiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodFJlY3QoRXJyb3JTdHJpbmcmLCBp
bnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwgY29uc3QgSlNPTjo6T2JqZWN0KiBj
b2xvciwgY29uc3QgSlNPTjo6T2JqZWN0KiBvdXRsaW5lQ29sb3IsIGNvbnN0IGJvb2wqIHVzZVBh
Z2VDb29yZGluYXRlcykKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9h
Z2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvSW5zcGVjdG9yRE9NQWdlbnQuaAppbmRleCA3ZGYwZTgzZWI1My4uZThhNzRmNmQwMDcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdl
bnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFn
ZW50LmgKQEAgLTEzMSw3ICsxMzEsMTEgQEAgcHVibGljOgogICAgIHZvaWQgZGlzY2FyZFNlYXJj
aFJlc3VsdHMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHNlYXJjaElkKSBvdmVycmlkZTsK
ICAgICB2b2lkIHJlc29sdmVOb2RlKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCwgY29uc3QgU3Ry
aW5nKiBvYmplY3RHcm91cCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJl
bW90ZU9iamVjdD4mIHJlc3VsdCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBnZXRBdHRyaWJ1dGVzKEVy
cm9yU3RyaW5nJiwgaW50IG5vZGVJZCwgUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mIHJl
c3VsdCkgb3ZlcnJpZGU7CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICB2b2lkIHNldElu
c3BlY3RNb2RlRW5hYmxlZChFcnJvclN0cmluZyYsIGJvb2wgZW5hYmxlZCwgY29uc3QgSlNPTjo6
T2JqZWN0KiBoaWdobGlnaHRDb25maWcpIG92ZXJyaWRlOworI2Vsc2UKICAgICB2b2lkIHNldElu
c3BlY3RNb2RlRW5hYmxlZChFcnJvclN0cmluZyYsIGJvb2wgZW5hYmxlZCwgY29uc3QgSlNPTjo6
T2JqZWN0KiBoaWdobGlnaHRDb25maWcsIGNvbnN0IGJvb2wqIHNob3dSdWxlcnMpIG92ZXJyaWRl
OworI2VuZGlmCiAgICAgdm9pZCByZXF1ZXN0Tm9kZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmlu
ZyYgb2JqZWN0SWQsIGludCogbm9kZUlkKSBvdmVycmlkZTsKICAgICB2b2lkIHB1c2hOb2RlQnlQ
YXRoVG9Gcm9udGVuZChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgcGF0aCwgaW50KiBub2Rl
SWQpIG92ZXJyaWRlOwogICAgIHZvaWQgaGlkZUhpZ2hsaWdodChFcnJvclN0cmluZyYpIG92ZXJy
aWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0
b3JQYWdlQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0
b3JQYWdlQWdlbnQuY3BwCmluZGV4IDAyZWRkNDM4NTk2Li40MzUyMjg5NGUwZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JQYWdlQWdlbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUGFnZUFnZW50
LmNwcApAQCAtMzU2LDcgKzM1Niw3IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjplbmFibGUo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQogICAgIHN0b3B3YXRjaC5yZXNldCgpOwogICAgIHN0
b3B3YXRjaC5zdGFydCgpOwogCi0jaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKKyNpZiBF
TkFCTEUoREFSS19NT0RFX0NTUykgfHwgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKICAgICBk
ZWZhdWx0QXBwZWFyYW5jZURpZENoYW5nZShtX2luc3BlY3RlZFBhZ2UuZGVmYXVsdFVzZURhcmtB
cHBlYXJhbmNlKCkpOwogI2VuZGlmCiB9CkBAIC0zNjcsMTAgKzM2NywxNCBAQCB2b2lkIEluc3Bl
Y3RvclBhZ2VBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYpCiAKICAgICBFcnJvclN0cmluZyB1
bnVzZWQ7CiAgICAgc2V0U2hvd1BhaW50UmVjdHModW51c2VkLCBmYWxzZSk7CisjaWYgIVBMQVRG
T1JNKElPU19GQU1JTFkpCiAgICAgc2V0U2hvd1J1bGVycyh1bnVzZWQsIGZhbHNlKTsKKyNlbmRp
ZgogICAgIG92ZXJyaWRlVXNlckFnZW50KHVudXNlZCwgbnVsbHB0cik7CiAgICAgc2V0RW11bGF0
ZWRNZWRpYSh1bnVzZWQsIGVtcHR5U3RyaW5nKCkpOworI2lmIEVOQUJMRShEQVJLX01PREVfQ1NT
KSB8fCBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQogICAgIHNldEZvcmNlZEFwcGVhcmFuY2Uo
dW51c2VkLCBlbXB0eVN0cmluZygpKTsKKyNlbmRpZgogCiAgICAgYXV0byYgaW5zcGVjdGVkUGFn
ZVNldHRpbmdzID0gbV9pbnNwZWN0ZWRQYWdlLnNldHRpbmdzKCk7CiAgICAgaW5zcGVjdGVkUGFn
ZVNldHRpbmdzLnNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkSW5zcGVjdG9yT3ZlcnJpZGUo
V1RGOjpudWxsb3B0KTsKQEAgLTc3MCwxMCArNzc0LDEyIEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFn
ZW50OjpzZWFyY2hJblJlc291cmNlcyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgdGV4dCwg
Y29uCiAgICAgICAgIG5ldHdvcmtBZ2VudC0+c2VhcmNoT3RoZXJSZXF1ZXN0cyhyZWdleCwgcmVz
dWx0KTsKIH0KIAorI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQogdm9pZCBJbnNwZWN0b3JQYWdl
QWdlbnQ6OnNldFNob3dSdWxlcnMoRXJyb3JTdHJpbmcmLCBib29sIHNob3dSdWxlcnMpCiB7CiAg
ICAgbV9vdmVybGF5LT5zZXRTaG93UnVsZXJzKHNob3dSdWxlcnMpOwogfQorI2VuZGlmCiAKIHZv
aWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzZXRTaG93UGFpbnRSZWN0cyhFcnJvclN0cmluZyYsIGJv
b2wgc2hvdykKIHsKQEAgLTg2OSwxMCArODc1LDEyIEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50
OjpmcmFtZUNsZWFyZWRTY2hlZHVsZWROYXZpZ2F0aW9uKEZyYW1lJiBmcmFtZSkKICAgICBtX2Zy
b250ZW5kRGlzcGF0Y2hlci0+ZnJhbWVDbGVhcmVkU2NoZWR1bGVkTmF2aWdhdGlvbihmcmFtZUlk
KCZmcmFtZSkpOwogfQogCisjaWYgRU5BQkxFKERBUktfTU9ERV9DU1MpIHx8IEhBVkUoT1NfREFS
S19NT0RFX1NVUFBPUlQpCiB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6ZGVmYXVsdEFwcGVhcmFu
Y2VEaWRDaGFuZ2UoYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSkKIHsKICAgICBtX2Zyb250ZW5kRGlz
cGF0Y2hlci0+ZGVmYXVsdEFwcGVhcmFuY2VEaWRDaGFuZ2UodXNlRGFya0FwcGVhcmFuY2UgPyBJ
bnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpBcHBlYXJhbmNlOjpEYXJrIDogSW5zcGVjdG9yOjpQ
cm90b2NvbDo6UGFnZTo6QXBwZWFyYW5jZTo6TGlnaHQpOwogfQorI2VuZGlmCiAKIHZvaWQgSW5z
cGVjdG9yUGFnZUFnZW50OjpkaWRDbGVhcldpbmRvd09iamVjdEluV29ybGQoRnJhbWUmIGZyYW1l
LCBET01XcmFwcGVyV29ybGQmIHdvcmxkKQogewpAQCAtMTAwOCwxMyArMTAxNiw5IEBAIHZvaWQg
SW5zcGVjdG9yUGFnZUFnZW50OjpzZXRFbXVsYXRlZE1lZGlhKEVycm9yU3RyaW5nJiwgY29uc3Qg
U3RyaW5nJiBtZWRpYSkKICAgICBkb2N1bWVudC0+ZXZhbHVhdGVNZWRpYVF1ZXJpZXNBbmRSZXBv
cnRDaGFuZ2VzKCk7CiB9CiAKKyNpZiBFTkFCTEUoREFSS19NT0RFX0NTUykgfHwgSEFWRShPU19E
QVJLX01PREVfU1VQUE9SVCkKIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzZXRGb3JjZWRBcHBl
YXJhbmNlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBhcHBlYXJhbmNlKQogewotICAgIGlm
IChhcHBlYXJhbmNlID09IG1fZm9yY2VkQXBwZWFyYW5jZSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgbV9mb3JjZWRBcHBlYXJhbmNlID0gYXBwZWFyYW5jZTsKLQogICAgIGlmIChhcHBlYXJhbmNl
ID09ICJMaWdodCJfcykKICAgICAgICAgbV9pbnNwZWN0ZWRQYWdlLnNldFVzZURhcmtBcHBlYXJh
bmNlT3ZlcnJpZGUoZmFsc2UpOwogICAgIGVsc2UgaWYgKGFwcGVhcmFuY2UgPT0gIkRhcmsiX3Mp
CkBAIC0xMDIyLDYgKzEwMjYsNyBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6c2V0Rm9yY2Vk
QXBwZWFyYW5jZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgYXBwZWFyYQogICAgIGVsc2UK
ICAgICAgICAgbV9pbnNwZWN0ZWRQYWdlLnNldFVzZURhcmtBcHBlYXJhbmNlT3ZlcnJpZGUoV1RG
OjpudWxsb3B0KTsKIH0KKyNlbmRpZgogCiB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6YXBwbHlV
c2VyQWdlbnRPdmVycmlkZShTdHJpbmcmIHVzZXJBZ2VudCkKIHsKQEAgLTEwNjksOSArMTA3NCw5
IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzbmFwc2hvdFJlY3QoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBpbnQgeCwgaW50IHksIGluCiAgICAgKm91dERhdGFVUkwgPSBzbmFwc2hvdC0+
dG9EYXRhVVJMKCJpbWFnZS9wbmciX3MsIFdURjo6bnVsbG9wdCwgUHJlc2VydmVSZXNvbHV0aW9u
OjpZZXMpOwogfQogCisjaWYgRU5BQkxFKFdFQl9BUkNISVZFKSAmJiBVU0UoQ0YpCiB2b2lkIElu
c3BlY3RvclBhZ2VBZ2VudDo6YXJjaGl2ZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFN0cmlu
ZyogZGF0YSkKIHsKLSNpZiBFTkFCTEUoV0VCX0FSQ0hJVkUpICYmIFVTRShDRikKICAgICBhdXRv
IGFyY2hpdmUgPSBMZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGUobV9pbnNwZWN0ZWRQYWdlLm1haW5G
cmFtZSgpKTsKICAgICBpZiAoIWFyY2hpdmUpIHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSAiQ291
bGQgbm90IGNyZWF0ZSB3ZWIgYXJjaGl2ZSBmb3IgbWFpbiBmcmFtZSJfczsKQEAgLTEwODAsMTAg
KzEwODUsNyBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6YXJjaGl2ZShFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIFN0cmluZyogZGF0YSkKIAogICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGJ1
ZmZlciA9IGFyY2hpdmUtPnJhd0RhdGFSZXByZXNlbnRhdGlvbigpOwogICAgICpkYXRhID0gYmFz
ZTY0RW5jb2RlKENGRGF0YUdldEJ5dGVQdHIoYnVmZmVyLmdldCgpKSwgQ0ZEYXRhR2V0TGVuZ3Ro
KGJ1ZmZlci5nZXQoKSkpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oZGF0YSk7Ci0gICAgZXJy
b3JTdHJpbmcgPSAiTm90IHN1cHBvcnRlZCJfczsKLSNlbmRpZgogfQorI2VuZGlmCiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9h
Z2VudHMvSW5zcGVjdG9yUGFnZUFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdl
bnRzL0luc3BlY3RvclBhZ2VBZ2VudC5oCmluZGV4IDZjNzU4Mjk1MDIzLi4zYmNkMDQ4N2NmYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JQYWdl
QWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclBh
Z2VBZ2VudC5oCkBAIC0xMDgsMTMgKzEwOCwxOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRCb290
c3RyYXBTY3JpcHQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsU291cmNlKSBm
aW5hbDsKICAgICB2b2lkIHNlYXJjaEluUmVzb3VyY2UoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJp
bmcmIGZyYW1lSWQsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBjb25z
dCBib29sKiBvcHRpb25hbENhc2VTZW5zaXRpdmUsIGNvbnN0IGJvb2wqIG9wdGlvbmFsSXNSZWdl
eCwgY29uc3QgU3RyaW5nKiBvcHRpb25hbFJlcXVlc3RJZCwgUmVmUHRyPEpTT046OkFycmF5T2Y8
SW5zcGVjdG9yOjpQcm90b2NvbDo6R2VuZXJpY1R5cGVzOjpTZWFyY2hNYXRjaD4+Jikgb3ZlcnJp
ZGU7CiAgICAgdm9pZCBzZWFyY2hJblJlc291cmNlcyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmlu
ZyYsIGNvbnN0IGJvb2wqIGNhc2VTZW5zaXRpdmUsIGNvbnN0IGJvb2wqIGlzUmVnZXgsIFJlZlB0
cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlNlYXJjaFJlc3VsdD4+
Jikgb3ZlcnJpZGU7CisjaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgdm9pZCBzZXRTaG93
UnVsZXJzKEVycm9yU3RyaW5nJiwgYm9vbCkgb3ZlcnJpZGU7CisjZW5kaWYKICAgICB2b2lkIHNl
dFNob3dQYWludFJlY3RzKEVycm9yU3RyaW5nJiwgYm9vbCBzaG93KSBvdmVycmlkZTsKICAgICB2
b2lkIHNldEVtdWxhdGVkTWVkaWEoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmKSBvdmVycmlk
ZTsKKyNpZiBFTkFCTEUoREFSS19NT0RFX0NTUykgfHwgSEFWRShPU19EQVJLX01PREVfU1VQUE9S
VCkKICAgICB2b2lkIHNldEZvcmNlZEFwcGVhcmFuY2UoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJp
bmcmKSBvdmVycmlkZTsKKyNlbmRpZgogICAgIHZvaWQgc25hcHNob3ROb2RlKEVycm9yU3RyaW5n
JiwgaW50IG5vZGVJZCwgU3RyaW5nKiBvdXREYXRhVVJMKSBvdmVycmlkZTsKICAgICB2b2lkIHNu
YXBzaG90UmVjdChFcnJvclN0cmluZyYsIGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVp
Z2h0LCBjb25zdCBTdHJpbmcmIGNvb3JkaW5hdGVTeXN0ZW0sIFN0cmluZyogb3V0RGF0YVVSTCkg
b3ZlcnJpZGU7CisjaWYgRU5BQkxFKFdFQl9BUkNISVZFKSAmJiBVU0UoQ0YpCiAgICAgdm9pZCBh
cmNoaXZlKEVycm9yU3RyaW5nJiwgU3RyaW5nKiBkYXRhKSBvdmVycmlkZTsKKyNlbmRpZgogCiAg
ICAgLy8gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uCiAgICAgdm9pZCBkb21Db250ZW50RXZlbnRG
aXJlZCgpOwpAQCAtMTI2LDcgKzEzMiw5IEBAIHB1YmxpYzoKICAgICB2b2lkIGZyYW1lU3RvcHBl
ZExvYWRpbmcoRnJhbWUmKTsKICAgICB2b2lkIGZyYW1lU2NoZWR1bGVkTmF2aWdhdGlvbihGcmFt
ZSYsIFNlY29uZHMgZGVsYXkpOwogICAgIHZvaWQgZnJhbWVDbGVhcmVkU2NoZWR1bGVkTmF2aWdh
dGlvbihGcmFtZSYpOworI2lmIEVOQUJMRShEQVJLX01PREVfQ1NTKSB8fCBIQVZFKE9TX0RBUktf
TU9ERV9TVVBQT1JUKQogICAgIHZvaWQgZGVmYXVsdEFwcGVhcmFuY2VEaWRDaGFuZ2UoYm9vbCB1
c2VEYXJrQXBwZWFyYW5jZSk7CisjZW5kaWYKICAgICB2b2lkIGFwcGx5VXNlckFnZW50T3ZlcnJp
ZGUoU3RyaW5nJik7CiAgICAgdm9pZCBhcHBseUVtdWxhdGVkTWVkaWEoU3RyaW5nJik7CiAgICAg
dm9pZCBkaWRDbGVhcldpbmRvd09iamVjdEluV29ybGQoRnJhbWUmLCBET01XcmFwcGVyV29ybGQm
KTsKQEAgLTE2MSw3ICsxNjksNiBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8RG9jdW1lbnRMb2Fk
ZXIqLCBTdHJpbmc+IG1fbG9hZGVyVG9JZGVudGlmaWVyOwogICAgIFN0cmluZyBtX3VzZXJBZ2Vu
dE92ZXJyaWRlOwogICAgIFN0cmluZyBtX2VtdWxhdGVkTWVkaWE7Ci0gICAgU3RyaW5nIG1fZm9y
Y2VkQXBwZWFyYW5jZTsKICAgICBTdHJpbmcgbV9ib290c3RyYXBTY3JpcHQ7CiAgICAgYm9vbCBt
X2lzRmlyc3RMYXlvdXRBZnRlck9uTG9hZCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX3Nob3dQYWlu
dFJlY3RzIHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL0Jhc2UvTWFpbi5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL0Jhc2UvTWFpbi5qcwppbmRleCBlNWI0MzJjMmNiOC4uMzU0MzkxOGMxNzIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Jhc2UvTWFpbi5qcworKysg
Yi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9CYXNlL01haW4uanMKQEAgLTIz
OTMsNyArMjM5Myw3IEBAIFdJLl91cGRhdGVEb3dubG9hZFRhYkJhckJ1dHRvbiA9IGZ1bmN0aW9u
KCkKICAgICBpZiAoIVdJLl9yZWxvYWRUYWJCYXJCdXR0b24pCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGlmICghSW5zcGVjdG9yQmFja2VuZC5oYXNEb21haW4oIlBhZ2UiKSkgeworICAgIGlmICgh
SW5zcGVjdG9yQmFja2VuZC5oYXNDb21tYW5kKCJQYWdlLmFyY2hpdmUiKSkgewogICAgICAgICBX
SS5fZG93bmxvYWRUYWJCYXJCdXR0b24uaGlkZGVuID0gdHJ1ZTsKICAgICAgICAgV0kuX3VwZGF0
ZVRhYkJhckRpdmlkZXJzKCk7CiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvRGVyaXZlZFNvdXJjZXMubWFrZSBiL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMu
bWFrZQppbmRleCBhMTJiNzg2M2M5Mi4uOGM1OGE1NzcxNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvRGVyaXZlZFNvdXJjZXMubWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3Vy
Y2VzLm1ha2UKQEAgLTMxNywxNyArMzE3LDkgQEAgQVVUT01BVElPTl9QUk9UT0NPTF9PVVRQVVRf
RklMRVMgPSBcCiAjCiBBVVRPTUFUSU9OX1BST1RPQ09MX09VVFBVVF9QQVRURVJOUyA9ICQoc3Vi
c3QgLiwlLCQoQVVUT01BVElPTl9QUk9UT0NPTF9PVVRQVVRfRklMRVMpKQogCi1pZmVxICgkKE9T
KSxNQUNPUykKLWlmZXEgKCQoc2hlbGwgJChDQykgLXN0ZD1nbnUrKzF6IC14IGMrKyAtRSAtUCAt
ZE0gJChTREtfRkxBR1MpICQoVEFSR0VUX1RSSVBMRV9GTEFHUykgJChGUkFNRVdPUktfRkxBR1Mp
ICQoSEVBREVSX0ZMQUdTKSAtaW5jbHVkZSAid3RmL1BsYXRmb3JtLmgiIC9kZXYvbnVsbCB8IGdy
ZXAgJyBXVEZfUExBVEZPUk1fSU9TX0ZBTUlMWSAnIHwgY3V0IC1kJyAnIC1mMyksIDEpCi0JQVVU
T01BVElPTl9CQUNLRU5EX1BMQVRGT1JNX0FSR1VNRU5UUyA9IC0tcGxhdGZvcm0gaU9TCi1lbHNl
Ci0JQVVUT01BVElPTl9CQUNLRU5EX1BMQVRGT1JNX0FSR1VNRU5UUyA9IC0tcGxhdGZvcm0gbWFj
T1MKLWVuZGlmCi1lbmRpZiAjIE1BQ09TCi0KICMgSlNPTi1SUEMgRnJvbnRlbmQgRGlzcGF0Y2hl
cnMsIEJhY2tlbmQgRGlzcGF0Y2hlcnMsIFR5cGUgQnVpbGRlcnMKICQoQVVUT01BVElPTl9QUk9U
T0NPTF9PVVRQVVRfUEFUVEVSTlMpIDogJChBVVRPTUFUSU9OX1BST1RPQ09MX0lOUFVUX0ZJTEVT
KSAkKEFVVE9NQVRJT05fUFJPVE9DT0xfR0VORVJBVE9SX1NDUklQVFMpCi0JJChQWVRIT04pICQo
SmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVIpL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weSAtLWZyYW1ld29yayBXZWJLaXQgJChBVVRPTUFUSU9OX0JBQ0tFTkRfUExBVEZP
Uk1fQVJHVU1FTlRTKSAtLWJhY2tlbmQgLS1vdXRwdXREaXIgLiAkKEFVVE9NQVRJT05fUFJPVE9D
T0xfSU5QVVRfRklMRVMpCisJJChQWVRIT04pICQoSmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVIp
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weSAtLWZyYW1ld29yayBXZWJL
aXQgLS1iYWNrZW5kIC0tb3V0cHV0RGlyIC4gJChBVVRPTUFUSU9OX1BST1RPQ09MX0lOUFVUX0ZJ
TEVTKQogCiBhbGwgOiAkKEFVVE9NQVRJT05fUFJPVE9DT0xfT1VUUFVUX0ZJTEVTKQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtTWFjLmNtYWtlIGIvU291cmNlL1dlYktpdC9Q
bGF0Zm9ybU1hYy5jbWFrZQppbmRleCA0OGUxNjAxM2RjYi4uNGMyZDMwYmViZjcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1NYWMuY21ha2UKKysrIGIvU291cmNlL1dlYktpdC9Q
bGF0Zm9ybU1hYy5jbWFrZQpAQCAtNDgwLDEwICs0ODAsNiBAQCBmb3JlYWNoIChfZmlsZSAke09i
akNGb3J3YXJkaW5nSGVhZGVyc30pCiAgICAgZmlsZShXUklURSAke0ZPUldBUkRJTkdfSEVBREVS
U19ESVJ9L1dlYktpdC8ke19maWxlfSAiI2ltcG9ydCA8V2ViS2l0TGVnYWN5LyR7X2ZpbGV9PiIp
CiBlbmRmb3JlYWNoICgpCiAKLWxpc3QoQVBQRU5EIFdlYktpdF9BVVRPTUFUSU9OX1BST1RPQ09M
X0dFTkVSQVRPUl9FWFRSQV9GTEFHUwotICAgIC0tcGxhdGZvcm09bWFjT1MKLSkKLQogc2V0KFNl
Y0l0ZW1TaGltRGlyZWN0b3J5ICR7Q01BS0VfTElCUkFSWV9PVVRQVVRfRElSRUNUT1JZfS9XZWJL
aXQuZnJhbWV3b3JrL1ZlcnNpb25zL0EvRnJhbWV3b3JrcykKIGFkZF9saWJyYXJ5KFNlY0l0ZW1T
aGltIFNIQVJFRCBXZWJQcm9jZXNzL21hYy9TZWNJdGVtU2hpbUxpYnJhcnkubW0pCiBXRUJLSVRf
Q1JFQVRFX1NZTUxJTksoU2VjSXRlbVNoaW0gJHtTZWNJdGVtU2hpbURpcmVjdG9yeX0gJHtDTUFL
RV9MSUJSQVJZX09VVFBVVF9ESVJFQ1RPUll9L1dlYktpdC5mcmFtZXdvcmsvRnJhbWV3b3JrcykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vQXV0b21hdGlv
bi5qc29uIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9BdXRvbWF0aW9uLmpz
b24KaW5kZXggN2Y1NTI1NzA1ZWYuLmY1NmU2Y2Y5ODAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL0F1dG9tYXRpb24uanNvbgorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL0F1dG9tYXRpb24uanNvbgpAQCAtNDM3LDcgKzQzNyw3
IEBACiAgICAgICAgIHsKICAgICAgICAgICAgICJuYW1lIjogImluc3BlY3RCcm93c2luZ0NvbnRl
eHQiLAogICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkluc3BlY3QgdGhlIHNwZWNpZmllZCBi
cm93c2luZyBjb250ZXh0IHVzaW5nIFdlYiBJbnNwZWN0b3IuIiwKLSAgICAgICAgICAgICJwbGF0
Zm9ybSI6ICJtYWNvcyIsCisgICAgICAgICAgICAiY29uZGl0aW9uIjogIlBMQVRGT1JNKE1BQyki
LAogICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCiAgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJoYW5kbGUiLCAiJHJlZiI6ICJCcm93c2luZ0NvbnRleHRIYW5kbGUiLCAiZGVzY3JpcHRpb24i
OiAiVGhlIGhhbmRsZSBmb3IgdGhlIGJyb3dzaW5nIGNvbnRleHQgdGhhdCBzaG91bGQgYmUgaW5z
cGVjdGVkLiIgfSwKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImVuYWJsZUF1dG9DYXB0dXJp
bmciLCAidHlwZSI6ICJib29sZWFuIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjog
IklmIHRoaXMgb3B0aW9uIGlzIHByZXNlbnQgYW5kIHNldCB0byB0cnVlLCB0aGUgV2ViIEluc3Bl
Y3RvciB3aWxsIGF1dG9tYXRpY2FsbHkgc3RhcnQgYSB0aW1lbGluZSByZWNvcmRpbmcgb2YgdGhl
IHNwZWNpZmllZCBicm93c2luZyBjb250ZXh0IG9uY2UgaXQgaXMgYXR0YWNoZWQuIE5vdGUgdGhh
dCB0aGlzIGRpc2FibGVzIHRoZSBkZWJ1Z2dlciBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSByZWNv
cmRpbmcuIiB9CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2luc3BlY3Rvci9t
YWluLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9pbnNwZWN0b3IvbWFpbi5weQppbmRleCAx
NDYyZDgwMTlkOS4uOWUwOTA0YzIwZmYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvaW5zcGVjdG9yL21haW4ucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9pbnNwZWN0
b3IvbWFpbi5weQpAQCAtMzgsMTQgKzM4LDEzIEBAIGNsYXNzIEluc3BlY3RvckdlbmVyYXRvclRl
c3RzOgogICAgICAgICBzZWxmLnJlc2V0X3Jlc3VsdHMgPSByZXNldF9yZXN1bHRzCiAgICAgICAg
IHNlbGYuZXhlY3V0aXZlID0gZXhlY3V0aXZlCiAKLSAgICBkZWYgZ2VuZXJhdGVfZnJvbV9qc29u
KHNlbGYsIGpzb25fZmlsZSwgcGxhdGZvcm0sIG91dHB1dF9kaXJlY3RvcnkpOgorICAgIGRlZiBn
ZW5lcmF0ZV9mcm9tX2pzb24oc2VsZiwganNvbl9maWxlLCBvdXRwdXRfZGlyZWN0b3J5KToKICAg
ICAgICAgY21kID0gWydweXRob24nLAogICAgICAgICAgICAgICAgJ0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weScs
CiAgICAgICAgICAgICAgICAnLS1vdXRwdXREaXInLCBvdXRwdXRfZGlyZWN0b3J5LAogICAgICAg
ICAgICAgICAgJy0tZm9yY2UnLAogICAgICAgICAgICAgICAgJy0tZnJhbWV3b3JrJywgJ1Rlc3Qn
LAogICAgICAgICAgICAgICAgJy0tdGVzdCcsCi0gICAgICAgICAgICAgICAnLS1wbGF0Zm9ybScs
IHBsYXRmb3JtLAogICAgICAgICAgICAgICAganNvbl9maWxlXQogCiAgICAgICAgIGV4aXRfY29k
ZSA9IDAKQEAgLTg4LDcgKzg3LDcgQEAgY2xhc3MgSW5zcGVjdG9yR2VuZXJhdG9yVGVzdHM6CiAg
ICAgICAgICAgICAgICAgcHJpbnQoJ1BBU1M6ICVzJyAlIG91dHB1dF9maWxlKQogICAgICAgICBy
ZXR1cm4gY2hhbmdlc19mb3VuZAogCi0gICAgZGVmIHJ1bl90ZXN0cyhzZWxmLCBwbGF0Zm9ybSwg
aW5wdXRfZGlyZWN0b3J5LCByZWZlcmVuY2VfZGlyZWN0b3J5KToKKyAgICBkZWYgcnVuX3Rlc3Rz
KHNlbGYsIGlucHV0X2RpcmVjdG9yeSwgcmVmZXJlbmNlX2RpcmVjdG9yeSk6CiAgICAgICAgIHdv
cmtfZGlyZWN0b3J5ID0gcmVmZXJlbmNlX2RpcmVjdG9yeQogCiAgICAgICAgIHBhc3NlZCA9IFRy
dWUKQEAgLTEwMSw3ICsxMDAsNyBAQCBjbGFzcyBJbnNwZWN0b3JHZW5lcmF0b3JUZXN0czoKICAg
ICAgICAgICAgIGlmIG5vdCBzZWxmLnJlc2V0X3Jlc3VsdHM6CiAgICAgICAgICAgICAgICAgd29y
a19kaXJlY3RvcnkgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKIAotICAgICAgICAgICAgaWYgc2VsZi5n
ZW5lcmF0ZV9mcm9tX2pzb24ob3MucGF0aC5qb2luKGlucHV0X2RpcmVjdG9yeSwgaW5wdXRfZmls
ZSksIHBsYXRmb3JtLCB3b3JrX2RpcmVjdG9yeSk6CisgICAgICAgICAgICBpZiBzZWxmLmdlbmVy
YXRlX2Zyb21fanNvbihvcy5wYXRoLmpvaW4oaW5wdXRfZGlyZWN0b3J5LCBpbnB1dF9maWxlKSwg
d29ya19kaXJlY3RvcnkpOgogICAgICAgICAgICAgICAgIHBhc3NlZCA9IEZhbHNlCiAKICAgICAg
ICAgICAgIGlmIHNlbGYucmVzZXRfcmVzdWx0czoKQEAgLTEyMiwyMSArMTIxLDEwIEBAIGNsYXNz
IEluc3BlY3RvckdlbmVyYXRvclRlc3RzOgogICAgICAgICBhbGxfdGVzdHNfcGFzc2VkID0gVHJ1
ZQogCiAgICAgICAgIGJhc2VfZGlyZWN0b3J5ID0gb3MucGF0aC5qb2luKCdKYXZhU2NyaXB0Q29y
ZScsICdpbnNwZWN0b3InLCAnc2NyaXB0cycsICd0ZXN0cycpCi0KLSAgICAgICAgcGxhdGZvcm1f
ZGlyZWN0b3JpZXMgPSB7Ci0gICAgICAgICAgICAnbWFjb3MnOiAnbWFjJywKLSAgICAgICAgICAg
ICdpb3MnOiAnaW9zJywKLSAgICAgICAgICAgICdnZW5lcmljJzogJ2dlbmVyaWMnLAotICAgICAg
ICAgICAgJ2FsbCc6ICdhbGwnLAotICAgICAgICB9Ci0KLSAgICAgICAgZm9yIHBsYXRmb3JtX25h
bWUsIHBsYXRmb3JtX2RpcmVjdG9yeSBpbiBwbGF0Zm9ybV9kaXJlY3Rvcmllcy5pdGVyaXRlbXMo
KToKLSAgICAgICAgICAgIGlucHV0X2RpcmVjdG9yeSA9IG9zLnBhdGguam9pbihiYXNlX2RpcmVj
dG9yeSwgcGxhdGZvcm1fZGlyZWN0b3J5KQotICAgICAgICAgICAgcmVmZXJlbmNlX2RpcmVjdG9y
eSA9IG9zLnBhdGguam9pbihpbnB1dF9kaXJlY3RvcnksICdleHBlY3RlZCcpCi0gICAgICAgICAg
ICBpZiBub3Qgb3MucGF0aC5pc2RpcihpbnB1dF9kaXJlY3RvcnkpIG9yIG5vdCBvcy5wYXRoLmlz
ZGlyKHJlZmVyZW5jZV9kaXJlY3RvcnkpOgotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0KLSAg
ICAgICAgICAgIGFsbF90ZXN0c19wYXNzZWQgPSBhbGxfdGVzdHNfcGFzc2VkIGFuZCBzZWxmLnJ1
bl90ZXN0cyhwbGF0Zm9ybV9uYW1lLCBpbnB1dF9kaXJlY3RvcnksIHJlZmVyZW5jZV9kaXJlY3Rv
cnkpCisgICAgICAgIGlucHV0X2RpcmVjdG9yeSA9IGJhc2VfZGlyZWN0b3J5CisgICAgICAgIHJl
ZmVyZW5jZV9kaXJlY3RvcnkgPSBvcy5wYXRoLmpvaW4oaW5wdXRfZGlyZWN0b3J5LCAnZXhwZWN0
ZWQnKQorICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGlucHV0X2RpcmVjdG9yeSkgYW5kIG9zLnBh
dGguaXNkaXIocmVmZXJlbmNlX2RpcmVjdG9yeSk6CisgICAgICAgICAgICBhbGxfdGVzdHNfcGFz
c2VkID0gc2VsZi5ydW5fdGVzdHMoaW5wdXRfZGlyZWN0b3J5LCByZWZlcmVuY2VfZGlyZWN0b3J5
KQogCiAgICAgICAgIHByaW50KCcnKQogICAgICAgICBpZiBhbGxfdGVzdHNfcGFzc2VkOgo=
</data>
<flag name="commit-queue"
          id="414951"
          type_id="3"
          status="-"
          setter="hi"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>399563</attachid>
            <date>2020-05-16 13:39:07 -0700</date>
            <delta_ts>2020-05-21 12:41:03 -0700</delta_ts>
            <desc>[Patch] WIP</desc>
            <filename>210014.diff</filename>
            <type>text/plain</type>
            <size>2704458</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCAwZDFmZTMwMDBhYi4uMTIzNTJl
N2NiOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTExNTcsNiArMTE1
Nyw4IEBAIHNldChKYXZhU2NyaXB0Q29yZV9JTlNQRUNUT1JfRE9NQUlOUwogICAgICR7SkFWQVND
UklQVENPUkVfRElSfS9pbnNwZWN0b3IvcHJvdG9jb2wvQW5pbWF0aW9uLmpzb24KICAgICAke0pB
VkFTQ1JJUFRDT1JFX0RJUn0vaW5zcGVjdG9yL3Byb3RvY29sL0FwcGxpY2F0aW9uQ2FjaGUuanNv
bgogICAgICR7SkFWQVNDUklQVENPUkVfRElSfS9pbnNwZWN0b3IvcHJvdG9jb2wvQXVkaXQuanNv
bgorICAgICR7SkFWQVNDUklQVENPUkVfRElSfS9pbnNwZWN0b3IvcHJvdG9jb2wvQnJvd3Nlci5q
c29uCisgICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2luc3BlY3Rvci9wcm90b2NvbC9DUFVQcm9m
aWxlci5qc29uCiAgICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2luc3BlY3Rvci9wcm90b2NvbC9D
U1MuanNvbgogICAgICR7SkFWQVNDUklQVENPUkVfRElSfS9pbnNwZWN0b3IvcHJvdG9jb2wvQ2Fu
dmFzLmpzb24KICAgICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vaW5zcGVjdG9yL3Byb3RvY29sL0Nv
bnNvbGUuanNvbgpAQCAtMTE2NSw0MSArMTE2NywyNCBAQCBzZXQoSmF2YVNjcmlwdENvcmVfSU5T
UEVDVE9SX0RPTUFJTlMKICAgICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vaW5zcGVjdG9yL3Byb3Rv
Y29sL0RPTVN0b3JhZ2UuanNvbgogICAgICR7SkFWQVNDUklQVENPUkVfRElSfS9pbnNwZWN0b3Iv
cHJvdG9jb2wvRGF0YWJhc2UuanNvbgogICAgICR7SkFWQVNDUklQVENPUkVfRElSfS9pbnNwZWN0
b3IvcHJvdG9jb2wvRGVidWdnZXIuanNvbgotICAgICR7SkFWQVNDUklQVENPUkVfRElSfS9pbnNw
ZWN0b3IvcHJvdG9jb2wvQnJvd3Nlci5qc29uCiAgICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2lu
c3BlY3Rvci9wcm90b2NvbC9HZW5lcmljVHlwZXMuanNvbgogICAgICR7SkFWQVNDUklQVENPUkVf
RElSfS9pbnNwZWN0b3IvcHJvdG9jb2wvSGVhcC5qc29uCisgICAgJHtKQVZBU0NSSVBUQ09SRV9E
SVJ9L2luc3BlY3Rvci9wcm90b2NvbC9JbmRleGVkREIuanNvbgogICAgICR7SkFWQVNDUklQVENP
UkVfRElSfS9pbnNwZWN0b3IvcHJvdG9jb2wvSW5zcGVjdG9yLmpzb24KICAgICAke0pBVkFTQ1JJ
UFRDT1JFX0RJUn0vaW5zcGVjdG9yL3Byb3RvY29sL0xheWVyVHJlZS5qc29uCisgICAgJHtKQVZB
U0NSSVBUQ09SRV9ESVJ9L2luc3BlY3Rvci9wcm90b2NvbC9NZW1vcnkuanNvbgogICAgICR7SkFW
QVNDUklQVENPUkVfRElSfS9pbnNwZWN0b3IvcHJvdG9jb2wvTmV0d29yay5qc29uCiAgICAgJHtK
QVZBU0NSSVBUQ09SRV9ESVJ9L2luc3BlY3Rvci9wcm90b2NvbC9QYWdlLmpzb24KICAgICAke0pB
VkFTQ1JJUFRDT1JFX0RJUn0vaW5zcGVjdG9yL3Byb3RvY29sL1JlY29yZGluZy5qc29uCiAgICAg
JHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2luc3BlY3Rvci9wcm90b2NvbC9SdW50aW1lLmpzb24KICAg
ICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vaW5zcGVjdG9yL3Byb3RvY29sL1NjcmlwdFByb2ZpbGVy
Lmpzb24KICAgICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vaW5zcGVjdG9yL3Byb3RvY29sL1NlY3Vy
aXR5Lmpzb24KKyAgICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vaW5zcGVjdG9yL3Byb3RvY29sL1Nl
cnZpY2VXb3JrZXIuanNvbgogICAgICR7SkFWQVNDUklQVENPUkVfRElSfS9pbnNwZWN0b3IvcHJv
dG9jb2wvVGFyZ2V0Lmpzb24KICAgICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vaW5zcGVjdG9yL3By
b3RvY29sL1RpbWVsaW5lLmpzb24KICAgICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vaW5zcGVjdG9y
L3Byb3RvY29sL1dvcmtlci5qc29uCiApCiAKLWlmIChFTkFCTEVfSU5ERVhFRF9EQVRBQkFTRSkK
LSAgICBsaXN0KEFQUEVORCBKYXZhU2NyaXB0Q29yZV9JTlNQRUNUT1JfRE9NQUlOUwotICAgICAg
ICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vaW5zcGVjdG9yL3Byb3RvY29sL0luZGV4ZWREQi5qc29u
Ci0gICAgKQotZW5kaWYgKCkKLQotaWYgKEVOQUJMRV9SRVNPVVJDRV9VU0FHRSkKLSAgICBsaXN0
KEFQUEVORCBKYXZhU2NyaXB0Q29yZV9JTlNQRUNUT1JfRE9NQUlOUwotICAgICAgICAke0pBVkFT
Q1JJUFRDT1JFX0RJUn0vaW5zcGVjdG9yL3Byb3RvY29sL0NQVVByb2ZpbGVyLmpzb24KLSAgICAg
ICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2luc3BlY3Rvci9wcm90b2NvbC9NZW1vcnkuanNvbgot
ICAgICkKLWVuZGlmICgpCi0KLWlmIChFTkFCTEVfU0VSVklDRV9XT1JLRVIpCi0gICAgbGlzdChB
UFBFTkQgSmF2YVNjcmlwdENvcmVfSU5TUEVDVE9SX0RPTUFJTlMKLSAgICAgICAgJHtKQVZBU0NS
SVBUQ09SRV9ESVJ9L2luc3BlY3Rvci9wcm90b2NvbC9TZXJ2aWNlV29ya2VyLmpzb24KLSAgICAp
Ci1lbmRpZiAoKQotCiBhZGRfY3VzdG9tX2NvbW1hbmQoCiAgICAgT1VUUFVUICR7SmF2YVNjcmlw
dENvcmVfREVSSVZFRF9TT1VSQ0VTX0RJUn0vQ29tYmluZWREb21haW5zLmpzb24KICAgICBNQUlO
X0RFUEVOREVOQ1kgJHtKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUn0vZ2VuZXJhdGUtY29tYmlu
ZWQtaW5zcGVjdG9yLWpzb24ucHkKQEAgLTEyMjEsNiArMTIwNiwxNSBAQCBhZGRfY3VzdG9tX2Nv
bW1hbmQoCiAgICAgTUFJTl9ERVBFTkRFTkNZICR7SmF2YVNjcmlwdENvcmVfREVSSVZFRF9TT1VS
Q0VTX0RJUn0vQ29tYmluZWREb21haW5zLmpzb24KICAgICBERVBFTkRTICR7SmF2YVNjcmlwdENv
cmVfSU5TUEVDVE9SX1BST1RPQ09MX1NDUklQVFN9CiAgICAgQ09NTUFORCAke1BZVEhPTl9FWEVD
VVRBQkxFfSAke0phdmFTY3JpcHRDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0vZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5IC0tb3V0cHV0RGlyICIke0phdmFTY3JpcHRD
b3JlX0RFUklWRURfU09VUkNFU19ESVJ9L2luc3BlY3RvciIgLS1mcmFtZXdvcmsgSmF2YVNjcmlw
dENvcmUgJHtKYXZhU2NyaXB0Q29yZV9ERVJJVkVEX1NPVVJDRVNfRElSfS9Db21iaW5lZERvbWFp
bnMuanNvbgorICAgIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSBlY2hvICIvLyMgc291cmNl
VVJMPV9fSW5qZWN0ZWRTY3JpcHRfSW5qZWN0ZWRTY3JpcHRTb3VyY2UuanMiID4gJHtKYXZhU2Ny
aXB0Q29yZV9ERVJJVkVEX1NPVVJDRVNfRElSfS9JbmplY3RlZFNjcmlwdFNvdXJjZS5taW4uanMK
KyAgICBWRVJCQVRJTSkKK2FkZF9jdXN0b21fY29tbWFuZCgKKyAgICBPVVRQVVQgJHtKYXZhU2Ny
aXB0Q29yZV9ERVJJVkVEX1NPVVJDRVNfRElSfS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZENv
bW1hbmRzLmpzCisgICAgICAgICAgICR7SmF2YVNjcmlwdENvcmVfREVSSVZFRF9TT1VSQ0VTX0RJ
Un0vaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcy5pbgorICAgIE1BSU5fREVQ
RU5ERU5DWSAke0phdmFTY3JpcHRDb3JlX0RFUklWRURfU09VUkNFU19ESVJ9L0NvbWJpbmVkRG9t
YWlucy5qc29uCisgICAgREVQRU5EUyAke0phdmFTY3JpcHRDb3JlX0lOU1BFQ1RPUl9QUk9UT0NP
TF9TQ1JJUFRTfQorICAgIENPTU1BTkQgJHtQWVRIT05fRVhFQ1VUQUJMRX0gJHtKYXZhU2NyaXB0
Q29yZV9JTlNQRUNUT1JfU0NSSVBUU19ESVJ9L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weSAtLW91dHB1dERpciAke0phdmFTY3JpcHRDb3JlX0RFUklWRURfU09VUkNFU19E
SVJ9L2luc3BlY3RvciAtLWZyYW1ld29yayBXZWJJbnNwZWN0b3JVSSAke0phdmFTY3JpcHRDb3Jl
X0RFUklWRURfU09VUkNFU19ESVJ9L0NvbWJpbmVkRG9tYWlucy5qc29uCisgICAgQ09NTUFORCAk
e0NNQUtFX0NPTU1BTkR9IC1FICR7Q09ERV9HRU5FUkFUT1JfUFJFUFJPQ0VTU09SfSAke0ZFQVRV
UkVfREVGSU5FU19BU19BUkdVTUVOVFN9IC1pbmNsdWRlICJ3dGYvUGxhdGZvcm0uaCIgLSA8ICR7
SmF2YVNjcmlwdENvcmVfREVSSVZFRF9TT1VSQ0VTX0RJUn0vaW5zcGVjdG9yL0luc3BlY3RvckJh
Y2tlbmRDb21tYW5kcy5qcy5pbiA+ICR7SmF2YVNjcmlwdENvcmVfREVSSVZFRF9TT1VSQ0VTX0RJ
Un0vaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwogICAgIFZFUkJBVElNKQog
CiAjIEpTQ0J1aWx0aW5zCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZl
ZFNvdXJjZXMubWFrZSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtl
CmluZGV4IDAwZDJhNTdiM2VkLi5kYjUzZDllYWM1MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0Rlcml2ZWRTb3VyY2VzLm1ha2UKQEAgLTQ2LDYgKzQ2LDIzIEBAIGVsc2UKICAgICBERUxFVEUg
PSBybSAtZgogZW5kaWYKIAoraWZuZXEgKCQoU0RLUk9PVCksKQorICAgIFNES19GTEFHUz0taXN5
c3Jvb3QgJChTREtST09UKQorZW5kaWYKKworaWZlcSAoJChVU0VfTExWTV9UQVJHRVRfVFJJUExF
U19GT1JfQ0xBTkcpLFlFUykKKyAgICBXS19DVVJSRU5UX0FSQ0g9JCh3b3JkIDEsICQoQVJDSFMp
KQorICAgIFRBUkdFVF9UUklQTEVfRkxBR1M9LXRhcmdldCAkKFdLX0NVUlJFTlRfQVJDSCktJChM
TFZNX1RBUkdFVF9UUklQTEVfVkVORE9SKS0kKExMVk1fVEFSR0VUX1RSSVBMRV9PU19WRVJTSU9O
KSQoTExWTV9UQVJHRVRfVFJJUExFX1NVRkZJWCkKK2VuZGlmCisKK1RFWFRfUFJFUFJPQ0VTU09S
X0ZMQUdTPS1FIC1QIC13CisKK0FMTF9QUkVQUk9DRVNTT1JfREVGSU5JVElPTlM9JChmaWx0ZXIt
b3V0IE5ERUJVRywkKEdDQ19QUkVQUk9DRVNTT1JfREVGSU5JVElPTlMpKSAkKEZFQVRVUkVfREVG
SU5FUykKK1BSRVBST0NFU1NPUl9ERUZJTkVTPSQocGF0c3Vic3QgJSwtRCUsJChBTExfUFJFUFJP
Q0VTU09SX0RFRklOSVRJT05TKSkKKworRlJBTUVXT1JLX0ZMQUdTID0gJChzaGVsbCBlY2hvICQo
QlVJTFRfUFJPRFVDVFNfRElSKSAkKEZSQU1FV09SS19TRUFSQ0hfUEFUSFMpICQoU1lTVEVNX0ZS
QU1FV09SS19TRUFSQ0hfUEFUSFMpIHwgcGVybCAtZSAncHJpbnQgIi1GICIgLiBqb2luKCIgLUYg
Iiwgc3BsaXQoIiAiLCA8PikpOycpCitIRUFERVJfRkxBR1MgPSAkKHNoZWxsIGVjaG8gJChCVUlM
VF9QUk9EVUNUU19ESVIpICQoSEVBREVSX1NFQVJDSF9QQVRIUykgJChTWVNURU1fSEVBREVSX1NF
QVJDSF9QQVRIUykgfCBwZXJsIC1lICdwcmludCAiLUkiIC4gam9pbigiIC1JIiwgc3BsaXQoIiAi
LCA8PikpOycpCisKICMgLS0tLS0tLS0KIAogLlBIT05ZIDogYWxsCkBAIC0yNDMsNiArMjYwLDgg
QEAgSU5TUEVDVE9SX0RPTUFJTlMgOj0gXAogICAgICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rv
ci9wcm90b2NvbC9BbmltYXRpb24uanNvbiBcCiAgICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVj
dG9yL3Byb3RvY29sL0FwcGxpY2F0aW9uQ2FjaGUuanNvbiBcCiAgICAgJChKYXZhU2NyaXB0Q29y
ZSkvaW5zcGVjdG9yL3Byb3RvY29sL0F1ZGl0Lmpzb24gXAorICAgICQoSmF2YVNjcmlwdENvcmUp
L2luc3BlY3Rvci9wcm90b2NvbC9Ccm93c2VyLmpzb24gXAorICAgICQoSmF2YVNjcmlwdENvcmUp
L2luc3BlY3Rvci9wcm90b2NvbC9DUFVQcm9maWxlci5qc29uIFwKICAgICAkKEphdmFTY3JpcHRD
b3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvQ1NTLmpzb24gXAogICAgICQoSmF2YVNjcmlwdENvcmUp
L2luc3BlY3Rvci9wcm90b2NvbC9DYW52YXMuanNvbiBcCiAgICAgJChKYXZhU2NyaXB0Q29yZSkv
aW5zcGVjdG9yL3Byb3RvY29sL0NvbnNvbGUuanNvbiBcCkBAIC0yNTEsMzUgKzI3MCwyNCBAQCBJ
TlNQRUNUT1JfRE9NQUlOUyA6PSBcCiAgICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3By
b3RvY29sL0RPTVN0b3JhZ2UuanNvbiBcCiAgICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9y
L3Byb3RvY29sL0RhdGFiYXNlLmpzb24gXAogICAgICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rv
ci9wcm90b2NvbC9EZWJ1Z2dlci5qc29uIFwKLSAgICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0
b3IvcHJvdG9jb2wvQnJvd3Nlci5qc29uIFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0
b3IvcHJvdG9jb2wvR2VuZXJpY1R5cGVzLmpzb24gXAogICAgICQoSmF2YVNjcmlwdENvcmUpL2lu
c3BlY3Rvci9wcm90b2NvbC9IZWFwLmpzb24gXAorICAgICQoSmF2YVNjcmlwdENvcmUpL2luc3Bl
Y3Rvci9wcm90b2NvbC9JbmRleGVkREIuanNvbiBcCiAgICAgJChKYXZhU2NyaXB0Q29yZSkvaW5z
cGVjdG9yL3Byb3RvY29sL0luc3BlY3Rvci5qc29uIFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9p
bnNwZWN0b3IvcHJvdG9jb2wvTGF5ZXJUcmVlLmpzb24gXAorICAgICQoSmF2YVNjcmlwdENvcmUp
L2luc3BlY3Rvci9wcm90b2NvbC9NZW1vcnkuanNvbiBcCiAgICAgJChKYXZhU2NyaXB0Q29yZSkv
aW5zcGVjdG9yL3Byb3RvY29sL05ldHdvcmsuanNvbiBcCiAgICAgJChKYXZhU2NyaXB0Q29yZSkv
aW5zcGVjdG9yL3Byb3RvY29sL1BhZ2UuanNvbiBcCiAgICAgJChKYXZhU2NyaXB0Q29yZSkvaW5z
cGVjdG9yL3Byb3RvY29sL1JlY29yZGluZy5qc29uIFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9p
bnNwZWN0b3IvcHJvdG9jb2wvUnVudGltZS5qc29uIFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9p
bnNwZWN0b3IvcHJvdG9jb2wvU2NyaXB0UHJvZmlsZXIuanNvbiBcCiAgICAgJChKYXZhU2NyaXB0
Q29yZSkvaW5zcGVjdG9yL3Byb3RvY29sL1NlY3VyaXR5Lmpzb24gXAorICAgICQoSmF2YVNjcmlw
dENvcmUpL2luc3BlY3Rvci9wcm90b2NvbC9TZXJ2aWNlV29ya2VyLmpzb24gXAogICAgICQoSmF2
YVNjcmlwdENvcmUpL2luc3BlY3Rvci9wcm90b2NvbC9UYXJnZXQuanNvbiBcCiAgICAgJChKYXZh
U2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3RvY29sL1RpbWVsaW5lLmpzb24gXAogICAgICQoSmF2
YVNjcmlwdENvcmUpL2luc3BlY3Rvci9wcm90b2NvbC9Xb3JrZXIuanNvbiBcCiAjCiAKLWlmZXEg
KCQoZmluZHN0cmluZyBFTkFCTEVfSU5ERVhFRF9EQVRBQkFTRSwkKEZFQVRVUkVfREVGSU5FUykp
LCBFTkFCTEVfSU5ERVhFRF9EQVRBQkFTRSkKLSAgICBJTlNQRUNUT1JfRE9NQUlOUyA6PSAkKElO
U1BFQ1RPUl9ET01BSU5TKSAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvSW5k
ZXhlZERCLmpzb24KLWVuZGlmCi0KLWlmZXEgKCQoZmluZHN0cmluZyBFTkFCTEVfUkVTT1VSQ0Vf
VVNBR0UsJChGRUFUVVJFX0RFRklORVMpKSwgRU5BQkxFX1JFU09VUkNFX1VTQUdFKQotICAgIElO
U1BFQ1RPUl9ET01BSU5TIDo9ICQoSU5TUEVDVE9SX0RPTUFJTlMpICQoSmF2YVNjcmlwdENvcmUp
L2luc3BlY3Rvci9wcm90b2NvbC9DUFVQcm9maWxlci5qc29uCi0gICAgSU5TUEVDVE9SX0RPTUFJ
TlMgOj0gJChJTlNQRUNUT1JfRE9NQUlOUykgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3By
b3RvY29sL01lbW9yeS5qc29uCi1lbmRpZgotCi1pZmVxICgkKGZpbmRzdHJpbmcgRU5BQkxFX1NF
UlZJQ0VfV09SS0VSLCQoRkVBVFVSRV9ERUZJTkVTKSksIEVOQUJMRV9TRVJWSUNFX1dPUktFUikK
LSAgICBJTlNQRUNUT1JfRE9NQUlOUyA6PSAkKElOU1BFQ1RPUl9ET01BSU5TKSAkKEphdmFTY3Jp
cHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvU2VydmljZVdvcmtlci5qc29uCi1lbmRpZgotCiBJ
TlNQRUNUT1JfR0VORVJBVE9SX1NDUklQVFMgPSBcCiAJJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9fX2luaXRfXy5weSBcCiAJJChKYXZhU2NyaXB0Q29yZSkvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSBcCkBAIC0z
MDIsNyArMzEwLDYgQEAgSU5TUEVDVE9SX0dFTkVSQVRPUl9TQ1JJUFRTID0gXAogIyBnZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkgYW5kIC4vQ29tYmluZWREb21haW5zLmpz
b24/CiBJTlNQRUNUT1JfRElTUEFUQ0hFUl9GSUxFUyA9IFwKICAgICBpbnNwZWN0b3IvSW5zcGVj
dG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmggXAotICAgIGluc3BlY3Rvci9JbnNwZWN0
b3JCYWNrZW5kQ29tbWFuZHMuanMgXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcnMuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJz
LmggXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZERpc3BhdGNoZXJzLmNwcCBcCkBA
IC0zMTIsNyArMzE5LDcgQEAgSU5TUEVDVE9SX0RJU1BBVENIRVJfRklMRVMgPSBcCiAjCiBJTlNQ
RUNUT1JfRElTUEFUQ0hFUl9GSUxFU19QQVRURVJOUyA9ICQoc3Vic3QgLiwlLCQoSU5TUEVDVE9S
X0RJU1BBVENIRVJfRklMRVMpKQogCi1hbGwgOiAkKElOU1BFQ1RPUl9ESVNQQVRDSEVSX0ZJTEVT
KQorYWxsIDogJChJTlNQRUNUT1JfRElTUEFUQ0hFUl9GSUxFUykgaW5zcGVjdG9yL0luc3BlY3Rv
ckJhY2tlbmRDb21tYW5kcy5qcwogCiAjIFRoZSBjb21iaW5lZCBKU09OIGZpbGUgZGVwZW5kcyBv
biB0aGUgYWN0dWFsIHNldCBvZiBkb21haW5zIGFuZCB0aGVpciBmaWxlIGNvbnRlbnRzLCBzbyB0
aGF0CiAjIGFkZGluZywgbW9kaWZ5aW5nLCBvciByZW1vdmluZyBkb21haW5zIHdpbGwgdHJpZ2dl
ciByZWdlbmVyYXRpb24gb2YgaW5zcGVjdG9yIGZpbGVzLgpAQCAtMzI4LDYgKzMzNSwxNCBAQCBD
b21iaW5lZERvbWFpbnMuanNvbiA6ICQoSmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVIpL2dlbmVy
YXRlLWNvbWJpbmVkLWluc3BlY3RvcgogJChJTlNQRUNUT1JfRElTUEFUQ0hFUl9GSUxFU19QQVRU
RVJOUykgOiBDb21iaW5lZERvbWFpbnMuanNvbiAkKElOU1BFQ1RPUl9HRU5FUkFUT1JfU0NSSVBU
UykKIAkkKFBZVEhPTikgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5IC0tZnJhbWV3b3JrIEphdmFTY3JpcHRD
b3JlIC0tb3V0cHV0RGlyIGluc3BlY3RvciAuL0NvbWJpbmVkRG9tYWlucy5qc29uCiAKK2luc3Bl
Y3Rvci9JbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMgOiBDb21iaW5lZERvbWFpbnMuanNvbiAk
KElOU1BFQ1RPUl9HRU5FUkFUT1JfU0NSSVBUUykKKwkkKFBZVEhPTikgJChKYXZhU2NyaXB0Q29y
ZSkvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5IC0tZnJhbWV3b3JrIFdlYkluc3BlY3RvclVJIC0tb3V0cHV0RGlyIGluc3BlY3RvciAuL0Nv
bWJpbmVkRG9tYWlucy5qc29uCisJQGVjaG8gUHJlLXByb2Nlc3NpbmcgSW5zcGVjdG9yQmFja2Vu
ZENvbW1hbmRzLi4uCisJJChDQykgJChTREtfRkxBR1MpICQoVEFSR0VUX1RSSVBMRV9GTEFHUykg
JChURVhUX1BSRVBST0NFU1NPUl9GTEFHUykgJChQUkVQUk9DRVNTT1JfREVGSU5FUykgJChGUkFN
RVdPUktfRkxBR1MpICQoSEVBREVSX0ZMQUdTKSAtaW5jbHVkZSAid3RmL1BsYXRmb3JtLmgiIC0g
PCBpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzLmluID4gaW5zcGVjdG9yL0lu
c3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcy5vdXQKKwl0ciAtcyAiXG4iIDwgaW5zcGVjdG9yL0lu
c3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcy5vdXQgPiBpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2Vu
ZENvbW1hbmRzLmpzCisJJChERUxFVEUpIGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kQ29tbWFu
ZHMuanMuaW4KKwkkKERFTEVURSkgaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmRDb21tYW5kcy5q
cy5vdXQKKwogSW5qZWN0ZWRTY3JpcHRTb3VyY2UuaCA6IGluc3BlY3Rvci9JbmplY3RlZFNjcmlw
dFNvdXJjZS5qcyAkKEphdmFTY3JpcHRDb3JlX1NDUklQVFNfRElSKS9qc21pbi5weSAkKEphdmFT
Y3JpcHRDb3JlX1NDUklQVFNfRElSKS94eGQucGwKIAllY2hvICIvLyMgc291cmNlVVJMPV9fSW5q
ZWN0ZWRTY3JpcHRfSW5qZWN0ZWRTY3JpcHRTb3VyY2UuanMiID4gLi9JbmplY3RlZFNjcmlwdFNv
dXJjZS5taW4uanMKIAkkKFBZVEhPTikgJChKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUikvanNt
aW4ucHkgPCAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRTb3VyY2Uu
anMgPj4gLi9JbmplY3RlZFNjcmlwdFNvdXJjZS5taW4uanMKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9TY3JpcHRzL2dlbmVyYXRlLWRlcml2ZWQtc291cmNlcy5zaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL2dlbmVyYXRlLWRlcml2ZWQtc291cmNlcy5zaAppbmRl
eCA5MzYxZjU4ZWM0Zi4uMjQxNDc2NTQzMWQgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9TY3JpcHRzL2dlbmVyYXRlLWRlcml2ZWQtc291cmNlcy5zaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0ZS1kZXJpdmVkLXNvdXJjZXMuc2gKQEAgLTExLDQg
KzExLDggQEAgY2QgIiR7QlVJTFRfUFJPRFVDVFNfRElSfS9EZXJpdmVkU291cmNlcy9KYXZhU2Ny
aXB0Q29yZSIKIGV4cG9ydCBKYXZhU2NyaXB0Q29yZT0iSmF2YVNjcmlwdENvcmUiCiBleHBvcnQg
QlVJTFRfUFJPRFVDVFNfRElSPSIuLi8uLiIKIAoraWYgWyAhICRDQyBdOyB0aGVuCisgICAgZXhw
b3J0IENDPSJgeGNydW4gLWZpbmQgY2xhbmdgIgorZmkKKwogbWFrZSAtLW5vLWJ1aWx0aW4tcnVs
ZXMgLWYgIkphdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UiIC1qIGAvdXNyL3NiaW4v
c3lzY3RsIC1uIGh3Lm5jcHVgICIke0FSR1NbQF19IgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9DUFVQcm9maWxlci5qc29uIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9DUFVQcm9maWxlci5qc29uCmluZGV4IGNm
YWNkMDFkYjczLi5lMTc5MjIyMDc5NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9wcm90b2NvbC9DUFVQcm9maWxlci5qc29uCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvQ1BVUHJvZmlsZXIuanNvbgpAQCAtMSw3ICsxLDcg
QEAKIHsKICAgICAiZG9tYWluIjogIkNQVVByb2ZpbGVyIiwKICAgICAiZGVzY3JpcHRpb24iOiAi
Q1BVUHJvZmlsZXIgZG9tYWluIGV4cG9zZXMgY3B1IHVzYWdlIHRyYWNraW5nLiIsCi0gICAgImZl
YXR1cmVHdWFyZCI6ICJFTkFCTEUoUkVTT1VSQ0VfVVNBR0UpIiwKKyAgICAiY29uZGl0aW9uIjog
IkVOQUJMRShSRVNPVVJDRV9VU0FHRSkiLAogICAgICJkZWJ1Z2dhYmxlVHlwZXMiOiBbInBhZ2Ui
LCAid2ViLXBhZ2UiXSwKICAgICAidGFyZ2V0VHlwZXMiOiBbInBhZ2UiXSwKICAgICAidHlwZXMi
OiBbCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29s
L0NhbnZhcy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9D
YW52YXMuanNvbgppbmRleCBhYjU0NDQwZjA0YS4uNjA0NjAyZTUzNmIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvQ2FudmFzLmpzb24KKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9DYW52YXMuanNvbgpAQCAt
MTEsNiArMTEsNyBAQAogICAgICAgICB9LAogICAgICAgICB7CiAgICAgICAgICAgICAiaWQiOiAi
UHJvZ3JhbUlkIiwKKyAgICAgICAgICAgICJjb25kaXRpb24iOiAiRU5BQkxFKFdFQkdMKSB8fCBF
TkFCTEUoV0VCR1BVKSIsCiAgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAogICAgICAgICAg
ICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBzaGFkZXIgcHJvZ3JhbSBpZGVudGlmaWVyLiIKICAg
ICAgICAgfSwKQEAgLTIyLDExICsyMywxMyBAQAogICAgICAgICB9LAogICAgICAgICB7CiAgICAg
ICAgICAgICAiaWQiOiAiUHJvZ3JhbVR5cGUiLAorICAgICAgICAgICAgImNvbmRpdGlvbiI6ICJF
TkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpIiwKICAgICAgICAgICAgICJ0eXBlIjogInN0
cmluZyIsCiAgICAgICAgICAgICAiZW51bSI6IFsiY29tcHV0ZSIsICJyZW5kZXIiXQogICAgICAg
ICB9LAogICAgICAgICB7CiAgICAgICAgICAgICAiaWQiOiAiU2hhZGVyVHlwZSIsCisgICAgICAg
ICAgICAiY29uZGl0aW9uIjogIkVOQUJMRShXRUJHTCkgfHwgRU5BQkxFKFdFQkdQVSkiLAogICAg
ICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKICAgICAgICAgICAgICJlbnVtIjogWyJjb21wdXRl
IiwgImZyYWdtZW50IiwgInZlcnRleCJdCiAgICAgICAgIH0sCkBAIC02MSw4ICs2NCw5IEBACiAg
ICAgICAgIH0sCiAgICAgICAgIHsKICAgICAgICAgICAgICJpZCI6ICJTaGFkZXJQcm9ncmFtIiwK
LSAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCiAgICAgICAgICAgICAiZGVzY3JpcHRpb24i
OiAiSW5mb3JtYXRpb24gYWJvdXQgYSBXZWJHTC9XZWJHTDIgc2hhZGVyIHByb2dyYW0gb3IgV2Vi
R1BVIHNoYWRlciBwaXBlbGluZS4iLAorICAgICAgICAgICAgImNvbmRpdGlvbiI6ICJFTkFCTEUo
V0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIs
CiAgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKICAgICAgICAgICAgICAgICB7ICJuYW1lIjog
InByb2dyYW1JZCIsICIkcmVmIjogIlByb2dyYW1JZCIgfSwKICAgICAgICAgICAgICAgICB7ICJu
YW1lIjogInByb2dyYW1UeXBlIiwgIiRyZWYiOiAiUHJvZ3JhbVR5cGUiIH0sCkBAIC0xNDcsNiAr
MTUxLDcgQEAKICAgICAgICAgewogICAgICAgICAgICAgIm5hbWUiOiAicmVxdWVzdFNoYWRlclNv
dXJjZSIsCiAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiUmVxdWVzdHMgdGhlIHNvdXJjZSBv
ZiB0aGUgc2hhZGVyIG9mIHRoZSBnaXZlbiB0eXBlIGZyb20gdGhlIHByb2dyYW0gd2l0aCB0aGUg
Z2l2ZW4gaWQuIiwKKyAgICAgICAgICAgICJjb25kaXRpb24iOiAiRU5BQkxFKFdFQkdMKSB8fCBF
TkFCTEUoV0VCR1BVKSIsCiAgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKICAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInByb2dyYW1JZCIsICIkcmVmIjogIlByb2dyYW1JZCIgfSwKICAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogInNoYWRlclR5cGUiLCAiJHJlZiI6ICJTaGFkZXJUeXBlIiB9
CkBAIC0xNTgsNiArMTYzLDcgQEAKICAgICAgICAgewogICAgICAgICAgICAgIm5hbWUiOiAidXBk
YXRlU2hhZGVyIiwKICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJDb21waWxlcyBhbmQgbGlu
a3MgdGhlIHNoYWRlciB3aXRoIGlkZW50aWZpZXIgYW5kIHR5cGUgd2l0aCB0aGUgZ2l2ZW4gc291
cmNlIGNvZGUuIiwKKyAgICAgICAgICAgICJjb25kaXRpb24iOiAiRU5BQkxFKFdFQkdMKSB8fCBF
TkFCTEUoV0VCR1BVKSIsCiAgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKICAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInByb2dyYW1JZCIsICIkcmVmIjogIlByb2dyYW1JZCIgfSwKICAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogInNoYWRlclR5cGUiLCAiJHJlZiI6ICJTaGFkZXJUeXBlIiB9
LApAQCAtMTY3LDYgKzE3Myw3IEBACiAgICAgICAgIHsKICAgICAgICAgICAgICJuYW1lIjogInNl
dFNoYWRlclByb2dyYW1EaXNhYmxlZCIsCiAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRW5h
YmxlL2Rpc2FibGUgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGdpdmVuIHNoYWRlciBwcm9ncmFtLiIs
CisgICAgICAgICAgICAiY29uZGl0aW9uIjogIkVOQUJMRShXRUJHTCkiLAogICAgICAgICAgICAg
InBhcmFtZXRlcnMiOiBbCiAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcm9ncmFtSWQiLCAi
JHJlZiI6ICJQcm9ncmFtSWQiIH0sCiAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkaXNhYmxl
ZCIsICJ0eXBlIjogImJvb2xlYW4iIH0KQEAgLTE3NSw2ICsxODIsNyBAQAogICAgICAgICB7CiAg
ICAgICAgICAgICAibmFtZSI6ICJzZXRTaGFkZXJQcm9ncmFtSGlnaGxpZ2h0ZWQiLAogICAgICAg
ICAgICAgImRlc2NyaXB0aW9uIjogIkVuYWJsZS9kaXNhYmxlIGhpZ2hsaWdodGluZyBvZiB0aGUg
Z2l2ZW4gc2hhZGVyIHByb2dyYW0uIiwKKyAgICAgICAgICAgICJjb25kaXRpb24iOiAiRU5BQkxF
KFdFQkdMKSIsCiAgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKICAgICAgICAgICAgICAgICB7
ICJuYW1lIjogInByb2dyYW1JZCIsICIkcmVmIjogIlByb2dyYW1JZCIgfSwKICAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogImhpZ2hsaWdodGVkIiwgInR5cGUiOiAiYm9vbGVhbiIgfQpAQCAtMjM4
LDEyICsyNDYsMTQgQEAKICAgICAgICAgfSwKICAgICAgICAgewogICAgICAgICAgICAgIm5hbWUi
OiAicHJvZ3JhbUNyZWF0ZWQiLAorICAgICAgICAgICAgImNvbmRpdGlvbiI6ICJFTkFCTEUoV0VC
R0wpIHx8IEVOQUJMRShXRUJHUFUpIiwKICAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwogICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAic2hhZGVyUHJvZ3JhbSIsICIkcmVmIjogIlNoYWRlclBy
b2dyYW0iIH0KICAgICAgICAgICAgIF0KICAgICAgICAgfSwKICAgICAgICAgewogICAgICAgICAg
ICAgIm5hbWUiOiAicHJvZ3JhbURlbGV0ZWQiLAorICAgICAgICAgICAgImNvbmRpdGlvbiI6ICJF
TkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpIiwKICAgICAgICAgICAgICJwYXJhbWV0ZXJz
IjogWwogICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJvZ3JhbUlkIiwgIiRyZWYiOiAiUHJv
Z3JhbUlkIiB9CiAgICAgICAgICAgICBdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3Byb3RvY29sL0RPTS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9wcm90b2NvbC9ET00uanNvbgppbmRleCAzOGNiNDhiZWRmMi4uM2FhNGEyOGNjMmQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvRE9N
Lmpzb24KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9ET00u
anNvbgpAQCAtMzk5LDYgKzM5OSwxNiBAQAogICAgICAgICB7CiAgICAgICAgICAgICAibmFtZSI6
ICJzZXRJbnNwZWN0TW9kZUVuYWJsZWQiLAogICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkVu
dGVycyB0aGUgJ2luc3BlY3QnIG1vZGUuIEluIHRoaXMgbW9kZSwgZWxlbWVudHMgdGhhdCB1c2Vy
IGlzIGhvdmVyaW5nIG92ZXIgYXJlIGhpZ2hsaWdodGVkLiBCYWNrZW5kIHRoZW4gZ2VuZXJhdGVz
ICdpbnNwZWN0JyBjb21tYW5kIHVwb24gZWxlbWVudCBzZWxlY3Rpb24uIiwKKyAgICAgICAgICAg
ICJjb25kaXRpb24iOiAiUExBVEZPUk0oSU9TX0ZBTUlMWSkiLAorICAgICAgICAgICAgInBhcmFt
ZXRlcnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJlbmFibGVkIiwgInR5cGUiOiAi
Ym9vbGVhbiIsICJkZXNjcmlwdGlvbiI6ICJUcnVlIHRvIGVuYWJsZSBpbnNwZWN0aW9uIG1vZGUs
IGZhbHNlIHRvIGRpc2FibGUgaXQuIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiaGln
aGxpZ2h0Q29uZmlnIiwgIiRyZWYiOiAiSGlnaGxpZ2h0Q29uZmlnIiwgIm9wdGlvbmFsIjogdHJ1
ZSwgImRlc2NyaXB0aW9uIjogIkEgZGVzY3JpcHRvciBmb3IgdGhlIGhpZ2hsaWdodCBhcHBlYXJh
bmNlIG9mIGhvdmVyZWQtb3ZlciBub2Rlcy4gTWF5IGJlIG9taXR0ZWQgaWYgPGNvZGU+ZW5hYmxl
ZCA9PSBmYWxzZTwvY29kZT4uIiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAg
IHsKKyAgICAgICAgICAgICJuYW1lIjogInNldEluc3BlY3RNb2RlRW5hYmxlZCIsCisgICAgICAg
ICAgICAiZGVzY3JpcHRpb24iOiAiRW50ZXJzIHRoZSAnaW5zcGVjdCcgbW9kZS4gSW4gdGhpcyBt
b2RlLCBlbGVtZW50cyB0aGF0IHVzZXIgaXMgaG92ZXJpbmcgb3ZlciBhcmUgaGlnaGxpZ2h0ZWQu
IEJhY2tlbmQgdGhlbiBnZW5lcmF0ZXMgJ2luc3BlY3QnIGNvbW1hbmQgdXBvbiBlbGVtZW50IHNl
bGVjdGlvbi4iLAorICAgICAgICAgICAgImNvbmRpdGlvbiI6ICIhUExBVEZPUk0oSU9TX0ZBTUlM
WSkiLAogICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCiAgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJlbmFibGVkIiwgInR5cGUiOiAiYm9vbGVhbiIsICJkZXNjcmlwdGlvbiI6ICJUcnVlIHRv
IGVuYWJsZSBpbnNwZWN0aW9uIG1vZGUsIGZhbHNlIHRvIGRpc2FibGUgaXQuIiB9LAogICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAiaGlnaGxpZ2h0Q29uZmlnIiwgIiRyZWYiOiAiSGlnaGxpZ2h0
Q29uZmlnIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIkEgZGVzY3JpcHRvciBm
b3IgdGhlIGhpZ2hsaWdodCBhcHBlYXJhbmNlIG9mIGhvdmVyZWQtb3ZlciBub2Rlcy4gTWF5IGJl
IG9taXR0ZWQgaWYgPGNvZGU+ZW5hYmxlZCA9PSBmYWxzZTwvY29kZT4uIiB9LApAQCAtNjg4LDYg
KzY5OCw3IEBACiAgICAgICAgIHsKICAgICAgICAgICAgICJuYW1lIjogInBvd2VyRWZmaWNpZW50
UGxheWJhY2tTdGF0ZUNoYW5nZWQiLAogICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkNhbGxl
ZCB3aGVuIGFuIGVsZW1lbnQgZW50ZXJzL2V4aXRzIGEgcG93ZXIgZWZmaWNpZW50IHBsYXliYWNr
IHN0YXRlLiIsCisgICAgICAgICAgICAiY29uZGl0aW9uIjogIkVOQUJMRShWSURFTykiLAogICAg
ICAgICAgICAgInBhcmFtZXRlcnMiOiBbCiAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub2Rl
SWQiLCAiJHJlZiI6ICJOb2RlSWQiIH0sCiAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1l
c3RhbXAiLCAiJHJlZiI6ICJOZXR3b3JrLlRpbWVzdGFtcCIgfSwKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvSW5kZXhlZERCLmpzb24gYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL0luZGV4ZWREQi5qc29uCmluZGV4
IDlkMjMwMDg5MzA3Li44NDNkMWE2ZGNiNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9wcm90b2NvbC9JbmRleGVkREIuanNvbgorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL0luZGV4ZWREQi5qc29uCkBAIC0xLDYgKzEsNiBA
QAogewogICAgICJkb21haW4iOiAiSW5kZXhlZERCIiwKLSAgICAiZmVhdHVyZUd1YXJkIjogIkVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKSIsCisgICAgImNvbmRpdGlvbiI6ICJFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkiLAogICAgICJkZWJ1Z2dhYmxlVHlwZXMiOiBbInBhZ2UiLCAid2ViLXBhZ2Ui
XSwKICAgICAidGFyZ2V0VHlwZXMiOiBbInBhZ2UiXSwKICAgICAidHlwZXMiOiBbCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL0luc3BlY3Rvci5q
c29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9JbnNwZWN0b3Iu
anNvbgppbmRleCAyYmI4ZDYyODU1YS4uZmY5MmYzZTcwYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvSW5zcGVjdG9yLmpzb24KKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9JbnNwZWN0b3IuanNvbgpAQCAt
MzMsNiArMzMsNyBAQAogICAgICAgICB7CiAgICAgICAgICAgICAibmFtZSI6ICJhY3RpdmF0ZUV4
dHJhRG9tYWlucyIsCiAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRmlyZWQgd2hlbiB0aGUg
YmFja2VuZCBoYXMgYWx0ZXJuYXRlIGRvbWFpbnMgdGhhdCBuZWVkIHRvIGJlIGFjdGl2YXRlZC4i
LAorICAgICAgICAgICAgImNvbmRpdGlvbiI6ICJFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykiLAogICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCiAgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJkb21haW5zIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICJ0eXBl
IjogInN0cmluZyIgfSwgImRlc2NyaXB0aW9uIjogIkRvbWFpbiBuYW1lcyB0aGF0IG5lZWQgYWN0
aXZhdGlvbiIgfQogICAgICAgICAgICAgXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9wcm90b2NvbC9NZW1vcnkuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvcHJvdG9jb2wvTWVtb3J5Lmpzb24KaW5kZXggMGMzZDkxNDM4NzEuLmY1Yzlk
YTFiMGYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3Rv
Y29sL01lbW9yeS5qc29uCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJv
dG9jb2wvTWVtb3J5Lmpzb24KQEAgLTEsNyArMSw3IEBACiB7CiAgICAgImRvbWFpbiI6ICJNZW1v
cnkiLAogICAgICJkZXNjcmlwdGlvbiI6ICJNZW1vcnkgZG9tYWluIGV4cG9zZXMgcGFnZSBtZW1v
cnkgdHJhY2tpbmcuIiwKLSAgICAiZmVhdHVyZUd1YXJkIjogIkVOQUJMRShSRVNPVVJDRV9VU0FH
RSkiLAorICAgICJjb25kaXRpb24iOiAiRU5BQkxFKFJFU09VUkNFX1VTQUdFKSIsCiAgICAgImRl
YnVnZ2FibGVUeXBlcyI6IFsicGFnZSIsICJ3ZWItcGFnZSJdLAogICAgICJ0YXJnZXRUeXBlcyI6
IFsicGFnZSJdLAogICAgICJ0eXBlcyI6IFsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvUGFnZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9wcm90b2NvbC9QYWdlLmpzb24KaW5kZXggZDI3NTEyYTRmMDAuLjVhYmZjOTQw
NjVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29s
L1BhZ2UuanNvbgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29s
L1BhZ2UuanNvbgpAQCAtNDUsNiArNDUsNyBAQAogICAgICAgICB7CiAgICAgICAgICAgICAiaWQi
OiAiQXBwZWFyYW5jZSIsCiAgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAg
ICAgImNvbmRpdGlvbiI6ICJFTkFCTEUoREFSS19NT0RFX0NTUykgfHwgSEFWRShPU19EQVJLX01P
REVfU1VQUE9SVCkiLAogICAgICAgICAgICAgImVudW0iOiBbIkxpZ2h0IiwgIkRhcmsiXSwKICAg
ICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJQYWdlIGFwcGVhcmFuY2UgbmFtZS4iCiAgICAgICAg
IH0sCkBAIC0yMjksNiArMjMwLDcgQEAKICAgICAgICAgewogICAgICAgICAgICAgIm5hbWUiOiAi
c2V0U2hvd1J1bGVycyIsCiAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiUmVxdWVzdHMgdGhh
dCBiYWNrZW5kIGRyYXcgcnVsZXJzIGluIHRoZSBpbnNwZWN0b3Igb3ZlcmxheSIsCisgICAgICAg
ICAgICAiY29uZGl0aW9uIjogIiFQTEFURk9STShJT1NfRkFNSUxZKSIsCiAgICAgICAgICAgICAi
cGFyYW1ldGVycyI6IFsKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInJlc3VsdCIsICJ0eXBl
IjogImJvb2xlYW4iLCAiZGVzY3JpcHRpb24iOiAiVHJ1ZSBmb3Igc2hvd2luZyBydWxlcnMiIH0K
ICAgICAgICAgICAgIF0KQEAgLTI1MCw2ICsyNTIsNyBAQAogICAgICAgICB7CiAgICAgICAgICAg
ICAibmFtZSI6ICJzZXRGb3JjZWRBcHBlYXJhbmNlIiwKICAgICAgICAgICAgICJkZXNjcmlwdGlv
biI6ICJGb3JjZXMgdGhlIGdpdmVuIGFwcGVhcmFuY2UgZm9yIHRoZSBwYWdlLiIsCisgICAgICAg
ICAgICAiY29uZGl0aW9uIjogIkVOQUJMRShEQVJLX01PREVfQ1NTKSB8fCBIQVZFKE9TX0RBUktf
TU9ERV9TVVBQT1JUKSIsCiAgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKICAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogImFwcGVhcmFuY2UiLCAiJHJlZiI6ICJBcHBlYXJhbmNlIiwgImRlc2Ny
aXB0aW9uIjogIkFwcGVhcmFuY2UgbmFtZSB0byBmb3JjZS4gRW1wdHkgc3RyaW5nIGRpc2FibGVz
IHRoZSBvdmVycmlkZS4iIH0KICAgICAgICAgICAgIF0KQEAgLTI4MSw2ICsyODQsNyBAQAogICAg
ICAgICB7CiAgICAgICAgICAgICAibmFtZSI6ICJhcmNoaXZlIiwKICAgICAgICAgICAgICJkZXNj
cmlwdGlvbiI6ICJHcmFiIGFuIGFyY2hpdmUgb2YgdGhlIHBhZ2UuIiwKKyAgICAgICAgICAgICJj
b25kaXRpb24iOiAiRU5BQkxFKFdFQl9BUkNISVZFKSAmJiBVU0UoQ0YpIiwKICAgICAgICAgICAg
ICJyZXR1cm5zIjogWwogICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YSIsICJ0eXBlIjog
InN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJCYXNlNjQtZW5jb2RlZCB3ZWIgYXJjaGl2ZS4iIH0K
ICAgICAgICAgICAgIF0KQEAgLTM0NSw2ICszNDksNyBAQAogICAgICAgICB7CiAgICAgICAgICAg
ICAibmFtZSI6ICJkZWZhdWx0QXBwZWFyYW5jZURpZENoYW5nZSIsCiAgICAgICAgICAgICAiZGVz
Y3JpcHRpb24iOiAiRmlyZWQgd2hlbiBwYWdlJ3MgZGVmYXVsdCBhcHBlYXJhbmNlIGNoYW5nZXMs
IGV2ZW4gaWYgdGhlcmUgaXMgYSBmb3JjZWQgYXBwZWFyYW5jZS4iLAorICAgICAgICAgICAgImNv
bmRpdGlvbiI6ICJFTkFCTEUoREFSS19NT0RFX0NTUykgfHwgSEFWRShPU19EQVJLX01PREVfU1VQ
UE9SVCkiLAogICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCiAgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJhcHBlYXJhbmNlIiwgIiRyZWYiOiAiQXBwZWFyYW5jZSIsICJkZXNjcmlwdGlvbiI6
ICJOYW1lIG9mIHRoZSBhcHBlYXJhbmNlIHRoYXQgaXMgYWN0aXZlIChub3QgY29uc2lkZXJpbmcg
YW55IGZvcmNlZCBhcHBlYXJhbmNlLikiIH0KICAgICAgICAgICAgIF0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvU2VydmljZVdvcmtlci5qc29u
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9TZXJ2aWNlV29ya2Vy
Lmpzb24KaW5kZXggOGFjM2Q0ZjdkNmIuLjBjNTAzMGZiNjg2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL1NlcnZpY2VXb3JrZXIuanNvbgorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL1NlcnZpY2VXb3JrZXIu
anNvbgpAQCAtMSw2ICsxLDcgQEAKIHsKICAgICAiZG9tYWluIjogIlNlcnZpY2VXb3JrZXIiLAog
ICAgICJkZXNjcmlwdGlvbiI6ICJBY3Rpb25zIGFuZCBldmVudHMgcmVsYXRlZCB0byB0aGUgaW5z
cGVjdGVkIHNlcnZpY2Ugd29ya2VyLiIsCisgICAgImNvbmRpdGlvbiI6ICJFTkFCTEUoU0VSVklD
RV9XT1JLRVIpIiwKICAgICAiZGVidWdnYWJsZVR5cGVzIjogWyJzZXJ2aWNlLXdvcmtlciJdLAog
ICAgICJ0YXJnZXRUeXBlcyI6IFsic2VydmljZS13b3JrZXIiXSwKICAgICAidHlwZXMiOiBbCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9jcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5CmluZGV4IDk2
YjU1ZTQxNjJjLi45OTgzZWVkOGQ1OCAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vY3BwX2dl
bmVyYXRvcl90ZW1wbGF0ZXMucHkKQEAgLTMyLDYgKzMyLDggQEAgY2xhc3MgQ3BwR2VuZXJhdG9y
VGVtcGxhdGVzOgogICAgIEhlYWRlclByZWx1ZGUgPSAoCiAgICAgIiIiI3ByYWdtYSBvbmNlCiAK
KyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKwogJHtpbmNsdWRlc30KIAogbmFtZXNwYWNlIElu
c3BlY3RvciB7CkBAIC01Niw2ICs1OCw4IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgeyIiIikKICAg
ICBBbHRlcm5hdGVEaXNwYXRjaGVyc0hlYWRlclByZWx1ZGUgPSAoCiAgICAgIiIiI3ByYWdtYSBv
bmNlCiAKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKwogI2lmIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQogCiAke2luY2x1ZGVzfQpAQCAtMTA4LDcgKzExMiw3IEBA
IHB1YmxpYzoKICAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlJHtkb21h
aW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJu
YXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KIHByaXZhdGU6CiAgICAgQWx0
ZXJuYXRlJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyKiBtX2FsdGVybmF0ZURpc3BhdGNo
ZXIgeyBudWxscHRyIH07Ci0jZW5kaWYiIiIpCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpIiIiKQogCiAgICAgQmFja2VuZERpc3BhdGNoZXJIZWFkZXJB
c3luY0NvbW1hbmREZWNsYXJhdGlvbiA9ICgKICAgICAiIiIgICAgJHtjbGFzc0FuZEV4cG9ydE1h
Y3JvfSAke2NhbGxiYWNrTmFtZX0gOiBwdWJsaWMgQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNr
QmFzZSB7CkBAIC0xMjcsOCArMTMxLDggQEAgcHJpdmF0ZToKICAgICBtZXNzYWdlLT5nZXRPYmpl
Y3QoInBhcmFtcyJfcywgcGFyYW1ldGVycyk7CiAKICR7ZGlzcGF0Y2hDYXNlc30KLSAgICBlbHNl
Ci0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2Vu
ZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJyR7ZG9tYWluTmFtZX0uIiArIG1ldGhvZCAr
ICInIHdhcyBub3QgZm91bmQiKTsKKworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFBy
b3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJyR7ZG9tYWlu
TmFtZX0uIiArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKIH0iIiIpCiAKICAgICBCYWNr
ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uTGFyZ2VTd2l0Y2ggPSAoCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9j
cHBfYWx0ZXJuYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYWx0ZXJuYXRl
X2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKaW5kZXggZTYyNzg4MGUxMzMuLmUxYTY2MWJh
Mzc5IDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9nZW5lcmF0ZV9jcHBfYWx0ZXJuYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIu
cHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGVfY3BwX2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CkBAIC01
Niw3ICs1Niw3IEBAIGNsYXNzIENwcEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2Vu
ZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgIHNlY3Rpb25zID0gW10KICAgICAgICAgc2Vj
dGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgpKQogICAgICAgICBzZWN0aW9ucy5h
cHBlbmQoVGVtcGxhdGUoQ3BwVGVtcGxhdGVzLkFsdGVybmF0ZURpc3BhdGNoZXJzSGVhZGVyUHJl
bHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKnRlbXBsYXRlX2FyZ3MpKQotICAgICAgICBzZWN0aW9u
cy5hcHBlbmQoJ1xuJy5qb2luKFtfZiBmb3IgX2YgaW4gbWFwKHNlbGYuX2dlbmVyYXRlX2hhbmRs
ZXJfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4sIGRvbWFpbnMpIGlmIF9mXSkpCisgICAgICAgIHNl
Y3Rpb25zLmFwcGVuZCgnXG5cbicuam9pbihbX2YgZm9yIF9mIGluIG1hcChzZWxmLl9nZW5lcmF0
ZV9oYW5kbGVyX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluLCBkb21haW5zKSBpZiBfZl0pKQogICAg
ICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoQ3BwVGVtcGxhdGVzLkFsdGVybmF0ZURpc3Bh
dGNoZXJzSGVhZGVyUG9zdGx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKip0ZW1wbGF0ZV9hcmdzKSkK
ICAgICAgICAgcmV0dXJuICdcblxuJy5qb2luKHNlY3Rpb25zKQogCkBAIC04Nyw3ICs4Nyw3IEBA
IGNsYXNzIENwcEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKENwcEdl
bmVyYXRvcik6CiAgICAgICAgICAgICAnY29tbWFuZERlY2xhcmF0aW9ucyc6ICdcbicuam9pbihj
b21tYW5kX2RlY2xhcmF0aW9ucyksCiAgICAgICAgIH0KIAotICAgICAgICByZXR1cm4gc2VsZi53
cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4sIFRlbXBsYXRlKENwcFRlbXBsYXRlcy5B
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckRvbWFpbkhhbmRsZXJJbnRlcmZhY2VEZWNs
YXJhdGlvbikuc3Vic3RpdHV0ZShOb25lLCAqKmhhbmRsZXJfYXJncykpCisgICAgICAgIHJldHVy
biBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRvbWFpbi5jb25kaXRpb24sIFRl
bXBsYXRlKENwcFRlbXBsYXRlcy5BbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckRvbWFp
bkhhbmRsZXJJbnRlcmZhY2VEZWNsYXJhdGlvbikuc3Vic3RpdHV0ZShOb25lLCAqKmhhbmRsZXJf
YXJncykpCiAKICAgICBkZWYgX2dlbmVyYXRlX2hhbmRsZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1h
bmQoc2VsZiwgY29tbWFuZCk6CiAgICAgICAgIGxpbmVzID0gW10KQEAgLTEwMCw0ICsxMDAsNCBA
QCBjbGFzcyBDcHBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihDcHBH
ZW5lcmF0b3IpOgogICAgICAgICAgICAgJ3BhcmFtZXRlcnMnOiAnLCAnLmpvaW4ocGFyYW1ldGVy
cyksCiAgICAgICAgIH0KICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgdmlydHVhbCB2b2lkICUo
Y29tbWFuZE5hbWUpcyglKHBhcmFtZXRlcnMpcykgPSAwOycgJSBjb21tYW5kX2FyZ3MpCi0gICAg
ICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0
aF9ndWFyZF9mb3JfY29uZGl0aW9uKGNvbW1hbmQuY29uZGl0aW9uLCAnXG4nLmpvaW4obGluZXMp
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFj
a2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQppbmRleCBlM2ZlNGUxMDA0Mi4uMTBkOGYxNGJkNWYg
MTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9i
YWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CkBAIC05MSw3ICs5MSw3IEBAIGNsYXNzIENwcEJh
Y2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgIGxp
bmVzID0gW10KICAgICAgICAgbGluZXMuYXBwZW5kKCcjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpJykKICAgICAgICAgZm9yIGRvbWFpbiBpbiBkb21haW5zOgotICAg
ICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9t
YWluLCAnY2xhc3MgQWx0ZXJuYXRlJXNCYWNrZW5kRGlzcGF0Y2hlcjsnICUgZG9tYWluLmRvbWFp
bl9uYW1lKSkKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9m
b3JfY29uZGl0aW9uKGRvbWFpbi5jb25kaXRpb24sICdjbGFzcyBBbHRlcm5hdGUlc0JhY2tlbmRE
aXNwYXRjaGVyOycgJSBkb21haW4uZG9tYWluX25hbWUpKQogICAgICAgICBsaW5lcy5hcHBlbmQo
JyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUyknKQogICAg
ICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQogCkBAIC0xMTMsNyArMTEzLDcgQEAgY2xhc3Mg
Q3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAg
ICAgICAgICdjb21tYW5kRGVjbGFyYXRpb25zJzogIlxuIi5qb2luKGNvbW1hbmRfZGVjbGFyYXRp
b25zKQogICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zv
cl9kb21haW4oZG9tYWluLCBUZW1wbGF0ZShDcHBUZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNoZXJI
ZWFkZXJEb21haW5IYW5kbGVyRGVjbGFyYXRpb24pLnN1YnN0aXR1dGUoTm9uZSwgKipoYW5kbGVy
X2FyZ3MpKQorICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlv
bihkb21haW4uY29uZGl0aW9uLCBUZW1wbGF0ZShDcHBUZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNo
ZXJIZWFkZXJEb21haW5IYW5kbGVyRGVjbGFyYXRpb24pLnN1YnN0aXR1dGUoTm9uZSwgKipoYW5k
bGVyX2FyZ3MpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfcGFyYW1l
dGVyKHNlbGYsIHBhcmFtZXRlciwgY29tbWFuZCk6CiAgICAgICAgIGVudW1fYXJncyA9IHsKQEAg
LTE2MSw3ICsxNjEsNyBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRv
cihDcHBHZW5lcmF0b3IpOgogICAgICAgICAgICAgJ3BhcmFtZXRlcnMnOiAiLCAiLmpvaW4ocGFy
YW1ldGVycykKICAgICAgICAgfQogICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICB2aXJ0dWFsIHZv
aWQgJShjb21tYW5kTmFtZSlzKCUocGFyYW1ldGVycylzKSA9IDA7JyAlIGNvbW1hbmRfYXJncykK
LSAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKyAgICAgICAgcmV0dXJuIHNlbGYud3Jh
cF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oY29tbWFuZC5jb25kaXRpb24sICdcbicuam9pbihs
aW5lcykpCiAKICAgICBkZWYgX2dlbmVyYXRlX2FzeW5jX2hhbmRsZXJfZGVjbGFyYXRpb25fZm9y
X2NvbW1hbmQoc2VsZiwgY29tbWFuZCk6CiAgICAgICAgIGNhbGxiYWNrTmFtZSA9ICIlc0NhbGxi
YWNrIiAlIHVjZmlyc3QoY29tbWFuZC5jb21tYW5kX25hbWUpCkBAIC0xOTIsNyArMTkyLDcgQEAg
Y2xhc3MgQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToK
ICAgICAgICAgICAgICdvdXRQYXJhbWV0ZXJzJzogIiwgIi5qb2luKG91dF9wYXJhbWV0ZXJzKSwK
ICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiBUZW1wbGF0ZShDcHBUZW1wbGF0ZXMuQmFja2Vu
ZERpc3BhdGNoZXJIZWFkZXJBc3luY0NvbW1hbmREZWNsYXJhdGlvbikuc3Vic3RpdHV0ZShOb25l
LCAqKmNvbW1hbmRfYXJncykKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zv
cl9jb25kaXRpb24oY29tbWFuZC5jb25kaXRpb24sIFRlbXBsYXRlKENwcFRlbXBsYXRlcy5CYWNr
ZW5kRGlzcGF0Y2hlckhlYWRlckFzeW5jQ29tbWFuZERlY2xhcmF0aW9uKS5zdWJzdGl0dXRlKE5v
bmUsICoqY29tbWFuZF9hcmdzKSkKIAogICAgIGRlZiBfZ2VuZXJhdGVfZGlzcGF0Y2hlcl9kZWNs
YXJhdGlvbnNfZm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgogICAgICAgICBjbGFzc0NvbXBvbmVu
dHMgPSBbJ2NsYXNzJ10KQEAgLTIyMCw3ICsyMjAsNyBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0
Y2hlckhlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICAgICAgJ2NvbW1hbmRE
ZWNsYXJhdGlvbnMnOiAiXG4iLmpvaW4oZGVjbGFyYXRpb25zKQogICAgICAgICB9CiAKLSAgICAg
ICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCBUZW1wbGF0
ZShDcHBUZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNoZXJIZWFkZXJEb21haW5EaXNwYXRjaGVyRGVj
bGFyYXRpb24pLnN1YnN0aXR1dGUoTm9uZSwgKipoYW5kbGVyX2FyZ3MpKQorICAgICAgICByZXR1
cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9uLCBU
ZW1wbGF0ZShDcHBUZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNoZXJIZWFkZXJEb21haW5EaXNwYXRj
aGVyRGVjbGFyYXRpb24pLnN1YnN0aXR1dGUoTm9uZSwgKipoYW5kbGVyX2FyZ3MpKQogCiAgICAg
ZGVmIF9nZW5lcmF0ZV9kaXNwYXRjaGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKHNlbGYsIGNv
bW1hbmQpOgotICAgICAgICByZXR1cm4gIiAgICB2b2lkICVzKGxvbmcgcmVxdWVzdElkLCBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOyIgJSBjb21tYW5kLmNvbW1hbmRfbmFtZQor
ICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihjb21tYW5k
LmNvbmRpdGlvbiwgIiAgICB2b2lkICVzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmIHBhcmFtZXRlcnMpOyIgJSBjb21tYW5kLmNvbW1hbmRfbmFtZSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9k
aXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CmluZGV4IGExNTk2MWE2NDc0Li5kYWYxOWM5NTBm
YiAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CkBAIC02MCw3ICs2
MCw3IEBAIGNsYXNzIENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3Io
Q3BwR2VuZXJhdG9yKToKICAgICAgICAgICAgIHNlY29uZGFyeV9pbmNsdWRlcy5hcHBlbmQoJycp
CiAgICAgICAgICAgICBzZWNvbmRhcnlfaW5jbHVkZXMuYXBwZW5kKCcjaWYgRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpJykKICAgICAgICAgICAgIHNlY29uZGFyeV9pbmNs
dWRlcy5hcHBlbmQoJyNpbmNsdWRlICIlc0FsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIicg
JSBzZWxmLnByb3RvY29sX25hbWUoKSkKLSAgICAgICAgICAgIHNlY29uZGFyeV9pbmNsdWRlcy5h
cHBlbmQoJyNlbmRpZicpCisgICAgICAgICAgICBzZWNvbmRhcnlfaW5jbHVkZXMuYXBwZW5kKCcj
ZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpJykKIAogICAg
ICAgICBoZWFkZXJfYXJncyA9IHsKICAgICAgICAgICAgICdwcmltYXJ5SW5jbHVkZSc6ICciJXNC
YWNrZW5kRGlzcGF0Y2hlcnMuaCInICUgc2VsZi5wcm90b2NvbF9uYW1lKCksCkBAIC05Myw3ICs5
Myw3IEBAIGNsYXNzIENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3Io
Q3BwR2VuZXJhdG9yKToKICAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9u
YW1lCiAgICAgICAgIH0KICAgICAgICAgZGVzdHJ1Y3RvciA9ICclKGRvbWFpbk5hbWUpc0JhY2tl
bmREaXNwYXRjaGVySGFuZGxlcjo6fiUoZG9tYWluTmFtZSlzQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyKCkgeyB9JyAlIGRlc3RydWN0b3JfYXJncwotICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dp
dGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4sIGRlc3RydWN0b3IpCisgICAgICAgIHJldHVybiBz
ZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRvbWFpbi5jb25kaXRpb24sIGRlc3Ry
dWN0b3IpCiAKICAgICBkZWYgX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25zX2Zv
cl9kb21haW4oc2VsZiwgZG9tYWluKToKICAgICAgICAgaW1wbGVtZW50YXRpb25zID0gW10KQEAg
LTExNSwxNyArMTE1LDI5IEBAIGNsYXNzIENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRp
b25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgICAgICAgICBpbXBsZW1lbnRhdGlv
bnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2FzeW5jX2Rpc3BhdGNoZXJfY2xhc3NfZm9yX2RvbWFp
bihjb21tYW5kLCBkb21haW4pKQogICAgICAgICAgICAgaW1wbGVtZW50YXRpb25zLmFwcGVuZChz
ZWxmLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uX2Zvcl9jb21tYW5kKGNvbW1h
bmQsIGRvbWFpbikpCiAKLSAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9k
b21haW4oZG9tYWluLCAnXG5cbicuam9pbihpbXBsZW1lbnRhdGlvbnMpKQorICAgICAgICByZXR1
cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9uLCAn
XG5cbicuam9pbihpbXBsZW1lbnRhdGlvbnMpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9zbWFsbF9k
aXNwYXRjaGVyX3N3aXRjaF9pbXBsZW1lbnRhdGlvbl9mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6
CiAgICAgICAgIGNvbW1hbmRzID0gc2VsZi5jb21tYW5kc19mb3JfZG9tYWluKGRvbWFpbikKIAog
ICAgICAgICBjYXNlcyA9IFtdCi0gICAgICAgIGNhc2VzLmFwcGVuZCgnICAgIGlmIChtZXRob2Qg
PT0gIiVzIiknICUgY29tbWFuZHNbMF0uY29tbWFuZF9uYW1lKQotICAgICAgICBjYXNlcy5hcHBl
bmQoJyAgICAgICAgJXMocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsnICUgY29tbWFu
ZHNbMF0uY29tbWFuZF9uYW1lKQorCisgICAgICAgIGZpcnN0X2NvbW1hbmRfc3RyaW5nID0gIlxu
Ii5qb2luKFsKKyAgICAgICAgICAgICcgICAgaWYgKG1ldGhvZCA9PSAiJXMiKSB7JyAlIGNvbW1h
bmRzWzBdLmNvbW1hbmRfbmFtZSwKKyAgICAgICAgICAgICcgICAgICAgICVzKHJlcXVlc3RJZCwg
V1RGTW92ZShwYXJhbWV0ZXJzKSk7JyAlIGNvbW1hbmRzWzBdLmNvbW1hbmRfbmFtZSwKKyAgICAg
ICAgICAgICcgICAgICAgIHJldHVybjsnLAorICAgICAgICAgICAgJyAgICB9JywKKyAgICAgICAg
XSkKKyAgICAgICAgY2FzZXMuYXBwZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRp
b24oY29tbWFuZHNbMF0uY29uZGl0aW9uLCBmaXJzdF9jb21tYW5kX3N0cmluZykpCisKICAgICAg
ICAgZm9yIGNvbW1hbmQgaW4gY29tbWFuZHNbMTpdOgotICAgICAgICAgICAgY2FzZXMuYXBwZW5k
KCcgICAgZWxzZSBpZiAobWV0aG9kID09ICIlcyIpJyAlIGNvbW1hbmQuY29tbWFuZF9uYW1lKQot
ICAgICAgICAgICAgY2FzZXMuYXBwZW5kKCcgICAgICAgICVzKHJlcXVlc3RJZCwgV1RGTW92ZShw
YXJhbWV0ZXJzKSk7JyAlIGNvbW1hbmQuY29tbWFuZF9uYW1lKQorICAgICAgICAgICAgYWRkaXRp
b25hbF9jb21tYW5kX3N0cmluZyA9ICJcbiIuam9pbihbCisgICAgICAgICAgICAgICAgJyAgICBp
ZiAobWV0aG9kID09ICIlcyIpIHsnICUgY29tbWFuZC5jb21tYW5kX25hbWUsCisgICAgICAgICAg
ICAgICAgJyAgICAgICAgJXMocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsnICUgY29t
bWFuZC5jb21tYW5kX25hbWUsCisgICAgICAgICAgICAgICAgJyAgICAgICAgcmV0dXJuOycsCisg
ICAgICAgICAgICAgICAgJyAgICB9JywKKyAgICAgICAgICAgIF0pCisgICAgICAgICAgICBjYXNl
cy5hcHBlbmQoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihjb21tYW5kLmNvbmRp
dGlvbiwgYWRkaXRpb25hbF9jb21tYW5kX3N0cmluZykpCiAKICAgICAgICAgc3dpdGNoX2FyZ3Mg
PSB7CiAgICAgICAgICAgICAnZG9tYWluTmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZSwKQEAgLTE0
Myw3ICsxNTUsNyBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2Vu
ZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgICAgICAgICAgJ2RvbWFpbk5hbWUnOiBkb21h
aW4uZG9tYWluX25hbWUsCiAgICAgICAgICAgICAgICAgJ2NvbW1hbmROYW1lJzogY29tbWFuZC5j
b21tYW5kX25hbWUKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2VzLmFwcGVuZCgnICAg
ICAgICAgICAgeyAiJShjb21tYW5kTmFtZSlzIiwgJiUoZG9tYWluTmFtZSlzQmFja2VuZERpc3Bh
dGNoZXI6OiUoY29tbWFuZE5hbWUpcyB9LCcgJSBhcmdzKQorICAgICAgICAgICAgY2FzZXMuYXBw
ZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oY29tbWFuZC5jb25kaXRpb24s
ICcgICAgICAgICAgICB7ICIlKGNvbW1hbmROYW1lKXMiLCAmJShkb21haW5OYW1lKXNCYWNrZW5k
RGlzcGF0Y2hlcjo6JShjb21tYW5kTmFtZSlzIH0sJyAlIGFyZ3MpKQogCiAgICAgICAgIHN3aXRj
aF9hcmdzID0gewogICAgICAgICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUs
CkBAIC0xODUsNyArMTk3LDcgQEAgY2xhc3MgQ3BwQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRh
dGlvbkdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICAgICAgJ2Zvcm1hbFBhcmFtZXRl
cnMnOiAiLCAiLmpvaW4oZm9ybWFsX3BhcmFtZXRlcnMpLAogICAgICAgICAgICAgJ291dFBhcmFt
ZXRlckFzc2lnbm1lbnRzJzogIlxuIi5qb2luKG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMpCiAg
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFRlbXBsYXRlKENwcFRlbXBsYXRlcy5CYWNrZW5kRGlz
cGF0Y2hlckltcGxlbWVudGF0aW9uQXN5bmNDb21tYW5kKS5zdWJzdGl0dXRlKE5vbmUsICoqYXN5
bmNfYXJncykKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRp
b24oY29tbWFuZC5jb25kaXRpb24sIFRlbXBsYXRlKENwcFRlbXBsYXRlcy5CYWNrZW5kRGlzcGF0
Y2hlckltcGxlbWVudGF0aW9uQXN5bmNDb21tYW5kKS5zdWJzdGl0dXRlKE5vbmUsICoqYXN5bmNf
YXJncykpCiAKICAgICBkZWYgX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25fZm9y
X2NvbW1hbmQoc2VsZiwgY29tbWFuZCwgZG9tYWluKToKICAgICAgICAgaW5fcGFyYW1ldGVyX2Rl
Y2xhcmF0aW9ucyA9IFtdCkBAIC0zMDQsNyArMzE2LDcgQEAgY2xhc3MgQ3BwQmFja2VuZERpc3Bh
dGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICAgICAg
bGluZXMuYXBwZW5kKCcgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+JShjb21tYW5kTmFt
ZSlzKCUoYWx0ZXJuYXRlSW52b2NhdGlvblBhcmFtZXRlcnMpcyk7JyAlIGNvbW1hbmRfYXJncykK
ICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICByZXR1cm47JykKICAgICAgICAgICAg
IGxpbmVzLmFwcGVuZCgnICAgIH0nKQotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcjZW5kaWYn
KQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpJykKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKIAog
ICAgICAgICBpZiBjb21tYW5kLmlzX2FzeW5jOgpAQCAtMzM0LDQgKzM0Niw0IEBAIGNsYXNzIENw
cEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToK
ICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5y
ZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92
ZShlcnJvcikpOycpCiAKICAgICAgICAgbGluZXMuYXBwZW5kKCd9JykKLSAgICAgICAgcmV0dXJu
ICJcbiIuam9pbihsaW5lcykKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zv
cl9jb25kaXRpb24oY29tbWFuZC5jb25kaXRpb24sICJcbiIuam9pbihsaW5lcykpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlz
cGF0Y2hlcl9oZWFkZXIucHkKaW5kZXggNWNmNzQ3ODU0MzMuLjExOWQyM2MzOGNkIDEwMDc1NQot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5k
X2Rpc3BhdGNoZXJfaGVhZGVyLnB5CkBAIC0xMTEsNyArMTExLDcgQEAgY2xhc3MgQ3BwRnJvbnRl
bmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgICAgICAn
ZXZlbnREZWNsYXJhdGlvbnMnOiAiXG4iLmpvaW4oZXZlbnRfZGVjbGFyYXRpb25zKQogICAgICAg
ICB9CiAKLSAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9t
YWluLCBUZW1wbGF0ZShDcHBUZW1wbGF0ZXMuRnJvbnRlbmREaXNwYXRjaGVyRG9tYWluRGlzcGF0
Y2hlckRlY2xhcmF0aW9uKS5zdWJzdGl0dXRlKE5vbmUsICoqaGFuZGxlcl9hcmdzKSkKKyAgICAg
ICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZG9tYWluLmNvbmRp
dGlvbiwgVGVtcGxhdGUoQ3BwVGVtcGxhdGVzLkZyb250ZW5kRGlzcGF0Y2hlckRvbWFpbkRpc3Bh
dGNoZXJEZWNsYXJhdGlvbikuc3Vic3RpdHV0ZShOb25lLCAqKmhhbmRsZXJfYXJncykpCiAKICAg
ICBkZWYgX2dlbmVyYXRlX2Rpc3BhdGNoZXJfZGVjbGFyYXRpb25fZm9yX2V2ZW50KHNlbGYsIGV2
ZW50LCBkb21haW4sIHVzZWRfZW51bV9uYW1lcyk6CiAgICAgICAgIGZvcm1hbF9wYXJhbWV0ZXJz
ID0gW10KQEAgLTEyMyw0ICsxMjMsNCBAQCBjbGFzcyBDcHBGcm9udGVuZERpc3BhdGNoZXJIZWFk
ZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgICAgICAgICB1c2VkX2VudW1fbmFt
ZXMuYWRkKHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkKIAogICAgICAgICBsaW5lcy5hcHBlbmQo
IiAgICB2b2lkICVzKCVzKTsiICUgKGV2ZW50LmV2ZW50X25hbWUsICIsICIuam9pbihmb3JtYWxf
cGFyYW1ldGVycykpKQotICAgICAgICByZXR1cm4gIlxuIi5qb2luKGxpbmVzKQorICAgICAgICBy
ZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihldmVudC5jb25kaXRpb24s
ICJcbiIuam9pbihsaW5lcykpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9p
bXBsZW1lbnRhdGlvbi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9u
LnB5CmluZGV4IDkwNGQyMjdhNmU5Li42NmRjNmUxODVjZiAxMDA3NTUKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Zyb250
ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3Bh
dGNoZXJfaW1wbGVtZW50YXRpb24ucHkKQEAgLTgyLDcgKzgyLDcgQEAgY2xhc3MgQ3BwRnJvbnRl
bmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAg
ICAgZm9yIGV2ZW50IGluIGV2ZW50czoKICAgICAgICAgICAgIGltcGxlbWVudGF0aW9ucy5hcHBl
bmQoc2VsZi5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbl9mb3JfZXZlbnQoZXZl
bnQsIGRvbWFpbikpCiAKLSAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9k
b21haW4oZG9tYWluLCAnXG5cbicuam9pbihpbXBsZW1lbnRhdGlvbnMpKQorICAgICAgICByZXR1
cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9uLCAn
XG5cbicuam9pbihpbXBsZW1lbnRhdGlvbnMpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9kaXNwYXRj
aGVyX2ltcGxlbWVudGF0aW9uX2Zvcl9ldmVudChzZWxmLCBldmVudCwgZG9tYWluKToKICAgICAg
ICAgbGluZXMgPSBbXQpAQCAtMTMxLDQgKzEzMSw0IEBAIGNsYXNzIENwcEZyb250ZW5kRGlzcGF0
Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgIGxpbmVz
LmFwcGVuZCgnJykKICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgbV9mcm9udGVuZFJvdXRlci5z
ZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsnKQogICAgICAgICBsaW5lcy5h
cHBlbmQoJ30nKQotICAgICAgICByZXR1cm4gIlxuIi5qb2luKGxpbmVzKQorICAgICAgICByZXR1
cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihldmVudC5jb25kaXRpb24sICJc
biIuam9pbihsaW5lcykpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaGVhZGVyLnB5
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJh
dGVfY3BwX3Byb3RvY29sX3R5cGVzX2hlYWRlci5weQppbmRleCA0MjNkN2EyMzAwOC4uOTlmNjAx
YTdkOTIgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19oZWFkZXIucHkKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3Bw
X3Byb3RvY29sX3R5cGVzX2hlYWRlci5weQpAQCAtMTA1LDcgKzEwNSw3IEBAIGNsYXNzIENwcFBy
b3RvY29sVHlwZXNIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgICAgICAg
ICBkb21haW5fbGluZXMuYXBwZW5kKCdzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFZFUlNJT04g
PSAlczsnICUgdmVyc2lvbikKIAogICAgICAgICAgICAgZG9tYWluX2xpbmVzLmFwcGVuZCgnfSAv
LyAlcycgJSBkb21haW4uZG9tYWluX25hbWUpCi0gICAgICAgICAgICBzZWN0aW9ucy5hcHBlbmQo
c2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4sICdcbicuam9pbihkb21haW5f
bGluZXMpKSkKKyAgICAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFy
ZF9mb3JfY29uZGl0aW9uKGRvbWFpbi5jb25kaXRpb24sICdcbicuam9pbihkb21haW5fbGluZXMp
KSkKIAogICAgICAgICBpZiBsZW4oc2VjdGlvbnMpID09IDA6CiAgICAgICAgICAgICByZXR1cm4g
JycKQEAgLTEzMiwxMCArMTMyLDEwIEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNIZWFkZXJHZW5l
cmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgICAgIGRvbWFpbl9saW5lcy5hcHBlbmQoJ25h
bWVzcGFjZSAlcyB7JyAlIGRvbWFpbi5kb21haW5fbmFtZSkKIAogICAgICAgICAgICAgIyBGb3J3
YXJkLWRlY2xhcmUgYWxsIGNsYXNzZXMgc28gdGhlIHR5cGUgYnVpbGRlcnMgd29uJ3QgYnJlYWsg
aWYgcmVhcnJhbmdlZC4KLSAgICAgICAgICAgIGRvbWFpbl9saW5lcy5leHRlbmQoJ2NsYXNzICVz
OycgJSBvYmplY3RfdHlwZS5yYXdfbmFtZSgpIGZvciBvYmplY3RfdHlwZSBpbiBvYmplY3RfdHlw
ZXMpCi0gICAgICAgICAgICBkb21haW5fbGluZXMuZXh0ZW5kKCdlbnVtIGNsYXNzICVzOycgJSBl
bnVtX3R5cGUucmF3X25hbWUoKSBmb3IgZW51bV90eXBlIGluIGVudW1fdHlwZXMpCisgICAgICAg
ICAgICBkb21haW5fbGluZXMuZXh0ZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRp
b24ob2JqZWN0X3R5cGUuZGVjbGFyYXRpb24oKS5jb25kaXRpb24sICdjbGFzcyAlczsnICUgb2Jq
ZWN0X3R5cGUucmF3X25hbWUoKSkgZm9yIG9iamVjdF90eXBlIGluIG9iamVjdF90eXBlcykKKyAg
ICAgICAgICAgIGRvbWFpbl9saW5lcy5leHRlbmQoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2Nv
bmRpdGlvbihlbnVtX3R5cGUuZGVjbGFyYXRpb24oKS5jb25kaXRpb24sICdlbnVtIGNsYXNzICVz
OycgJSBlbnVtX3R5cGUucmF3X25hbWUoKSkgZm9yIGVudW1fdHlwZSBpbiBlbnVtX3R5cGVzKQog
ICAgICAgICAgICAgZG9tYWluX2xpbmVzLmFwcGVuZCgnfSAvLyAlcycgJSBkb21haW4uZG9tYWlu
X25hbWUpCi0gICAgICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi53cmFwX3dpdGhfZ3VhcmRf
Zm9yX2RvbWFpbihkb21haW4sICdcbicuam9pbihkb21haW5fbGluZXMpKSkKKyAgICAgICAgICAg
IHNlY3Rpb25zLmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRvbWFp
bi5jb25kaXRpb24sICdcbicuam9pbihkb21haW5fbGluZXMpKSkKIAogICAgICAgICBpZiBsZW4o
c2VjdGlvbnMpID09IDA6CiAgICAgICAgICAgICByZXR1cm4gJycKQEAgLTE3MCw3ICsxNzAsNyBA
QCBjbGFzcyBDcHBQcm90b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAg
ICAgICAgICAgICBpZiBsZW4oZGVjbGFyYXRpb24uZGVzY3JpcHRpb24pID4gMDoKICAgICAgICAg
ICAgICAgICB0eXBlZGVmX2xpbmVzLmFwcGVuZCgnLyogJXMgKi8nICUgZGVjbGFyYXRpb24uZGVz
Y3JpcHRpb24pCiAgICAgICAgICAgICB0eXBlZGVmX2xpbmVzLmFwcGVuZCgndHlwZWRlZiAlcyAl
czsnICUgKHByaW1pdGl2ZV9uYW1lLCBkZWNsYXJhdGlvbi50eXBlX25hbWUpKQotICAgICAgICAg
ICAgc2VjdGlvbnMuYXBwZW5kKCdcbicuam9pbih0eXBlZGVmX2xpbmVzKSkKKyAgICAgICAgICAg
IHNlY3Rpb25zLmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRlY2xh
cmF0aW9uLmNvbmRpdGlvbiwgJ1xuJy5qb2luKHR5cGVkZWZfbGluZXMpKSkKIAogICAgICAgICBm
b3IgZGVjbGFyYXRpb24gaW4gYXJyYXlfZGVjbGFyYXRpb25zOgogICAgICAgICAgICAgZWxlbWVu
dF90eXBlID0gQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKGRlY2xhcmF0
aW9uLnR5cGUuZWxlbWVudF90eXBlKQpAQCAtMTc4LDEzICsxNzgsMTMgQEAgY2xhc3MgQ3BwUHJv
dG9jb2xUeXBlc0hlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICAgICAgaWYg
bGVuKGRlY2xhcmF0aW9uLmRlc2NyaXB0aW9uKSA+IDA6CiAgICAgICAgICAgICAgICAgdHlwZWRl
Zl9saW5lcy5hcHBlbmQoJy8qICVzICovJyAlIGRlY2xhcmF0aW9uLmRlc2NyaXB0aW9uKQogICAg
ICAgICAgICAgdHlwZWRlZl9saW5lcy5hcHBlbmQoJ3R5cGVkZWYgSlNPTjo6QXJyYXlPZjwlcz4g
JXM7JyAlIChlbGVtZW50X3R5cGUsIGRlY2xhcmF0aW9uLnR5cGVfbmFtZSkpCi0gICAgICAgICAg
ICBzZWN0aW9ucy5hcHBlbmQoJ1xuJy5qb2luKHR5cGVkZWZfbGluZXMpKQorICAgICAgICAgICAg
c2VjdGlvbnMuYXBwZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZGVjbGFy
YXRpb24uY29uZGl0aW9uLCAnXG4nLmpvaW4odHlwZWRlZl9saW5lcykpKQogCiAgICAgICAgIGxp
bmVzID0gW10KICAgICAgICAgbGluZXMuYXBwZW5kKCduYW1lc3BhY2UgJXMgeycgJSBkb21haW4u
ZG9tYWluX25hbWUpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnXG4nLmpvaW4oc2VjdGlvbnMpKQog
ICAgICAgICBsaW5lcy5hcHBlbmQoJ30gLy8gJXMnICUgZG9tYWluLmRvbWFpbl9uYW1lKQotICAg
ICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4sICdcbicu
am9pbihsaW5lcykpCisgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29u
ZGl0aW9uKGRvbWFpbi5jb25kaXRpb24sICdcbicuam9pbihsaW5lcykpCiAKICAgICBkZWYgX2dl
bmVyYXRlX2VudW1fY29uc3RhbnRfdmFsdWVfY29udmVyc2lvbl9tZXRob2RzKHNlbGYpOgogICAg
ICAgICBpZiBub3Qgc2VsZi5hc3NpZ25lZF9lbnVtX3ZhbHVlcygpOgpAQCAtMjI1LDkgKzIyNSwx
MSBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6
CiAKICAgICAgICAgbGluZXMgPSBbXQogICAgICAgICBsaW5lcy5hcHBlbmQoJ25hbWVzcGFjZSAl
cyB7JyAlIGRvbWFpbi5kb21haW5fbmFtZSkKLSAgICAgICAgbGluZXMuYXBwZW5kKCdcbicuam9p
bihzZWN0aW9ucykpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKKyAgICAgICAgbGluZXMuYXBw
ZW5kKCdcblxuJy5qb2luKHNlY3Rpb25zKSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCcnKQogICAg
ICAgICBsaW5lcy5hcHBlbmQoJ30gLy8gJXMnICUgZG9tYWluLmRvbWFpbl9uYW1lKQotICAgICAg
ICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4sICdcbicuam9p
bihsaW5lcykpCisgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0
aW9uKGRvbWFpbi5jb25kaXRpb24sICdcbicuam9pbihsaW5lcykpCiAKICAgICBkZWYgX2dlbmVy
YXRlX2NsYXNzX2Zvcl9vYmplY3RfZGVjbGFyYXRpb24oc2VsZiwgdHlwZV9kZWNsYXJhdGlvbiwg
ZG9tYWluKToKICAgICAgICAgaWYgbGVuKHR5cGVfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzKSA9
PSAwOgpAQCAtMjc4LDE0ICsyODAsMTQgQEAgY2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0hlYWRlckdl
bmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAg
ICVzIHN0YXRpYyBjb25zdCBjaGFyKiAlczsnICUgKGV4cG9ydF9tYWNybywgdWNmaXJzdCh0eXBl
X21lbWJlci5tZW1iZXJfbmFtZSkpKQogCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnfTsnKQotICAg
ICAgICBsaW5lcy5hcHBlbmQoJycpCi0gICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisg
ICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKHR5cGVfZGVj
bGFyYXRpb24uY29uZGl0aW9uLCAnXG4nLmpvaW4obGluZXMpKQogCiAgICAgZGVmIF9nZW5lcmF0
ZV9zdHJ1Y3RfZm9yX2VudW1fZGVjbGFyYXRpb24oc2VsZiwgZW51bV9kZWNsYXJhdGlvbik6CiAg
ICAgICAgIGxpbmVzID0gW10KLSAgICAgICAgbGluZXMuYXBwZW5kKCcvKiAlcyAqLycgJSBlbnVt
X2RlY2xhcmF0aW9uLmRlc2NyaXB0aW9uKQorICAgICAgICBpZiBsZW4oZW51bV9kZWNsYXJhdGlv
bi5kZXNjcmlwdGlvbik6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJy8qICVzICovJyAlIGVu
dW1fZGVjbGFyYXRpb24uZGVzY3JpcHRpb24pCiAgICAgICAgIGxpbmVzLmV4dGVuZChzZWxmLl9n
ZW5lcmF0ZV9zdHJ1Y3RfZm9yX2VudW1fdHlwZShlbnVtX2RlY2xhcmF0aW9uLnR5cGVfbmFtZSwg
ZW51bV9kZWNsYXJhdGlvbi50eXBlKSkKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykK
KyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZW51bV9k
ZWNsYXJhdGlvbi5jb25kaXRpb24sICdcbicuam9pbihsaW5lcykpCiAKICAgICBkZWYgX2dlbmVy
YXRlX3N0cnVjdF9mb3JfYW5vbnltb3VzX2VudW1fbWVtYmVyKHNlbGYsIGVudW1fbWVtYmVyKToK
ICAgICAgICAgZGVmIGFwcGx5X2luZGVudGF0aW9uKGxpbmUpOgpAQCAtMzgxLDEwICszODMsMTAg
QEAgY2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0hlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgog
ICAgICAgICAgICAgZm9yIHR5cGVfZGVjbGFyYXRpb24gaW4gZGVjbGFyYXRpb25zX3RvX2dlbmVy
YXRlOgogICAgICAgICAgICAgICAgIGZvciB0eXBlX21lbWJlciBpbiB0eXBlX2RlY2xhcmF0aW9u
LnR5cGVfbWVtYmVyczoKICAgICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh0eXBlX21l
bWJlci50eXBlLCBFbnVtVHlwZSk6Ci0gICAgICAgICAgICAgICAgICAgICAgICB0eXBlX2FyZ3Vt
ZW50cy5hcHBlbmQoKENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZV9tZW1i
ZXIodHlwZV9tZW1iZXIsIHR5cGVfZGVjbGFyYXRpb24pLCBGYWxzZSkpCisgICAgICAgICAgICAg
ICAgICAgICAgICB0eXBlX2FyZ3VtZW50cy5hcHBlbmQoKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zv
cl9jb25kaXRpb24odHlwZV9kZWNsYXJhdGlvbi5jb25kaXRpb24sIENwcEdlbmVyYXRvci5jcHBf
cHJvdG9jb2xfdHlwZV9mb3JfdHlwZV9tZW1iZXIodHlwZV9tZW1iZXIsIHR5cGVfZGVjbGFyYXRp
b24pKSwgRmFsc2UpKQogCiAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh0eXBlX2RlY2xh
cmF0aW9uLnR5cGUsIE9iamVjdFR5cGUpOgotICAgICAgICAgICAgICAgICAgICB0eXBlX2FyZ3Vt
ZW50cy5hcHBlbmQoKENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZSh0eXBl
X2RlY2xhcmF0aW9uLnR5cGUpLCBHZW5lcmF0b3IudHlwZV9uZWVkc19ydW50aW1lX2Nhc3RzKHR5
cGVfZGVjbGFyYXRpb24udHlwZSkpKQorICAgICAgICAgICAgICAgICAgICB0eXBlX2FyZ3VtZW50
cy5hcHBlbmQoKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24odHlwZV9kZWNsYXJh
dGlvbi5jb25kaXRpb24sIENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZSh0
eXBlX2RlY2xhcmF0aW9uLnR5cGUpKSwgR2VuZXJhdG9yLnR5cGVfbmVlZHNfcnVudGltZV9jYXN0
cyh0eXBlX2RlY2xhcmF0aW9uLnR5cGUpKSkKIAogICAgICAgICBzdHJ1Y3Rfa2V5d29yZHMgPSBb
J3N0cnVjdCddCiAgICAgICAgIGZ1bmN0aW9uX2tleXdvcmRzID0gWydzdGF0aWMgdm9pZCddCkBA
IC00MzcsMTkgKzQzOSwyMCBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9y
KENwcEdlbmVyYXRvcik6CiAgICAgICAgICAgICBkb21haW5fbGluZXMuYXBwZW5kKCIvLyBFbnVt
cyBpbiB0aGUgJyVzJyBEb21haW4iICUgZG9tYWluLmRvbWFpbl9uYW1lKQogICAgICAgICAgICAg
Zm9yIGVudW1fdHlwZSBpbiBlbnVtX3R5cGVzOgogICAgICAgICAgICAgICAgIGNwcF9wcm90b2Nv
bF90eXBlID0gQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKGVudW1fdHlw
ZSkKLSAgICAgICAgICAgICAgICBkb21haW5fbGluZXMuYXBwZW5kKCd0ZW1wbGF0ZTw+JykKLSAg
ICAgICAgICAgICAgICBkb21haW5fbGluZXMuYXBwZW5kKCclcyBwYXJzZUVudW1WYWx1ZUZyb21T
dHJpbmc8JXM+KGNvbnN0IFN0cmluZyYpOycgJSAocmV0dXJuX3R5cGVfd2l0aF9leHBvcnRfbWFj
cm8oY3BwX3Byb3RvY29sX3R5cGUpLCBjcHBfcHJvdG9jb2xfdHlwZSkpCisgICAgICAgICAgICAg
ICAgZG9tYWluX2xpbmVzLmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9u
KGVudW1fdHlwZS5kZWNsYXJhdGlvbigpLmNvbmRpdGlvbiwgJ3RlbXBsYXRlPD5cbiVzIHBhcnNl
RW51bVZhbHVlRnJvbVN0cmluZzwlcz4oY29uc3QgU3RyaW5nJik7JyAlIChyZXR1cm5fdHlwZV93
aXRoX2V4cG9ydF9tYWNybyhjcHBfcHJvdG9jb2xfdHlwZSksIGNwcF9wcm90b2NvbF90eXBlKSkp
CiAKICAgICAgICAgICAgIGZvciBvYmplY3RfdHlwZSBpbiBvYmplY3RfdHlwZXM6CisgICAgICAg
ICAgICAgICAgb2JqZWN0X2xpbmVzID0gW10KICAgICAgICAgICAgICAgICBmb3IgZW51bV9tZW1i
ZXIgaW4gZmlsdGVyKHR5cGVfbWVtYmVyX2lzX2Fub255bW91c19lbnVtX3R5cGUsIG9iamVjdF90
eXBlLm1lbWJlcnMpOgogICAgICAgICAgICAgICAgICAgICBjcHBfcHJvdG9jb2xfdHlwZSA9IENw
cEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZV9tZW1iZXIoZW51bV9tZW1iZXIs
IG9iamVjdF90eXBlLmRlY2xhcmF0aW9uKCkpCi0gICAgICAgICAgICAgICAgICAgIGRvbWFpbl9s
aW5lcy5hcHBlbmQoJ3RlbXBsYXRlPD4nKQotICAgICAgICAgICAgICAgICAgICBkb21haW5fbGlu
ZXMuYXBwZW5kKCclcyBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8JXM+KGNvbnN0IFN0cmluZyYp
OycgJSAocmV0dXJuX3R5cGVfd2l0aF9leHBvcnRfbWFjcm8oY3BwX3Byb3RvY29sX3R5cGUpLCBj
cHBfcHJvdG9jb2xfdHlwZSkpCisgICAgICAgICAgICAgICAgICAgIG9iamVjdF9saW5lcy5hcHBl
bmQoJ3RlbXBsYXRlPD5cbiVzIHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzwlcz4oY29uc3QgU3Ry
aW5nJik7JyAlIChyZXR1cm5fdHlwZV93aXRoX2V4cG9ydF9tYWNybyhjcHBfcHJvdG9jb2xfdHlw
ZSksIGNwcF9wcm90b2NvbF90eXBlKSkKKyAgICAgICAgICAgICAgICBpZiBsZW4ob2JqZWN0X2xp
bmVzKToKKyAgICAgICAgICAgICAgICAgICAgZG9tYWluX2xpbmVzLmFwcGVuZChzZWxmLndyYXBf
d2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKG9iamVjdF90eXBlLmRlY2xhcmF0aW9uKCkuY29uZGl0
aW9uLCAnXG4nLmpvaW4ob2JqZWN0X2xpbmVzKSkpCiAKICAgICAgICAgICAgIGlmIGxlbihkb21h
aW5fbGluZXMpID09IDE6CiAgICAgICAgICAgICAgICAgY29udGludWUgICMgTm8gcmVhbCBkZWNs
YXJhdGlvbnMgdG8gZW1pdCwganVzdCB0aGUgZG9tYWluIGNvbW1lbnQuIFNraXAuCiAKLSAgICAg
ICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRv
bWFpbiwgJ1xuJy5qb2luKGRvbWFpbl9saW5lcykpKQorICAgICAgICAgICAgc2VjdGlvbnMuYXBw
ZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZG9tYWluLmNvbmRpdGlvbiwg
J1xuJy5qb2luKGRvbWFpbl9saW5lcykpKQogCiAgICAgICAgIGlmIGxlbihzZWN0aW9ucykgPT0g
MToKICAgICAgICAgICAgIHJldHVybiBbXSAjIE5vIHJlYWwgc2VjdGlvbnMgdG8gZW1pdCwganVz
dCB0aGUgbmFtZXNwYWNlIGFuZCB0ZW1wbGF0ZSBkZWNsYXJhdGlvbi4gU2tpcC4KQEAgLTQ3NCwx
NCArNDc3LDIwIEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNIZWFkZXJHZW5lcmF0b3IoQ3BwR2Vu
ZXJhdG9yKToKICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycpCiAgICAgICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKCd0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7
JykKIAotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQotICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKCIvLyBIYXNoIGRlY2xhcmF0aW9ucyBpbiB0aGUgJyVzJyBEb21haW4iICUgZG9tYWluLmRv
bWFpbl9uYW1lKQorICAgICAgICAgICAgZG9tYWluX2xpbmVzID0gW10KKworICAgICAgICAgICAg
ZG9tYWluX2xpbmVzLmFwcGVuZCgnJykKKyAgICAgICAgICAgIGRvbWFpbl9saW5lcy5hcHBlbmQo
Ii8vIEhhc2ggZGVjbGFyYXRpb25zIGluIHRoZSAnJXMnIERvbWFpbiIgJSBkb21haW4uZG9tYWlu
X25hbWUpCiAKICAgICAgICAgICAgIGZvciBlbnVtX3R5cGUgaW4gZW51bV90eXBlczoKLSAgICAg
ICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ3RlbXBsYXRlPD4nKQotICAgICAgICAgICAgICAgIGxp
bmVzLmFwcGVuZCgnc3RydWN0IERlZmF1bHRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OiVzOjol
cz4geycgJSAoZG9tYWluLmRvbWFpbl9uYW1lLCBlbnVtX3R5cGUucmF3X25hbWUoKSkpCi0gICAg
ICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgdHlwZWRlZiBJbnRIYXNoPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OiVzOjolcz4gSGFzaDsnICUgKGRvbWFpbi5kb21haW5fbmFtZSwgZW51bV90eXBl
LnJhd19uYW1lKCkpKQotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnfTsnKQorICAgICAg
ICAgICAgICAgIGVudW1fbGluZXMgPSBbXQorICAgICAgICAgICAgICAgIGVudW1fbGluZXMuYXBw
ZW5kKCd0ZW1wbGF0ZTw+JykKKyAgICAgICAgICAgICAgICBlbnVtX2xpbmVzLmFwcGVuZCgnc3Ry
dWN0IERlZmF1bHRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OiVzOjolcz4geycgJSAoZG9tYWlu
LmRvbWFpbl9uYW1lLCBlbnVtX3R5cGUucmF3X25hbWUoKSkpCisgICAgICAgICAgICAgICAgZW51
bV9saW5lcy5hcHBlbmQoJyAgICB0eXBlZGVmIEludEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6
JXM6OiVzPiBIYXNoOycgJSAoZG9tYWluLmRvbWFpbl9uYW1lLCBlbnVtX3R5cGUucmF3X25hbWUo
KSkpCisgICAgICAgICAgICAgICAgZW51bV9saW5lcy5hcHBlbmQoJ307JykKKyAgICAgICAgICAg
ICAgICBkb21haW5fbGluZXMuYXBwZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRp
b24oZW51bV90eXBlLmRlY2xhcmF0aW9uKCkuY29uZGl0aW9uLCAnXG4nLmpvaW4oZW51bV9saW5l
cykpKQorCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9y
X2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9uLCAnXG4nLmpvaW4oZG9tYWluX2xpbmVzKSkpCiAK
ICAgICAgICAgaWYgbGVuKGxpbmVzKSA9PSAwOgogICAgICAgICAgICAgcmV0dXJuIFtdCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9n
ZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9j
b2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkKaW5kZXggNjVjZWJmNTgzZWUuLjRkODVhZmI5MzFh
IDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVf
Y3BwX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5CkBAIC0xMjgsOSArMTI4LDggQEAg
Y2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKENwcEdlbmVyYXRv
cik6CiAgICAgICAgICAgICAgICAgJycsCiAgICAgICAgICAgICAgICAgJyAgICByZXR1cm4gV1RG
OjpudWxsb3B0OycsCiAgICAgICAgICAgICAgICAgJ30nLAotICAgICAgICAgICAgICAgICcnLAog
ICAgICAgICAgICAgXSkKLSAgICAgICAgICAgIHJldHVybiBib2R5X2xpbmVzCisgICAgICAgICAg
ICByZXR1cm4gJ1xuJy5qb2luKGJvZHlfbGluZXMpCiAKICAgICAgICAgdHlwZV9kZWNsYXJhdGlv
bnMgPSBzZWxmLnR5cGVfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4oZG9tYWluKQogICAgICAgICBk
ZWNsYXJhdGlvbl90eXBlcyA9IFtkZWNsLnR5cGUgZm9yIGRlY2wgaW4gdHlwZV9kZWNsYXJhdGlv
bnNdCkBAIC0xNDYsMTcgKzE0NSwyMyBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVzSW1wbGVtZW50
YXRpb25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgbGluZXMuYXBwZW5kKCIvLyBF
bnVtcyBpbiB0aGUgJyVzJyBEb21haW4iICUgZG9tYWluLmRvbWFpbl9uYW1lKQogICAgICAgICBm
b3IgZW51bV90eXBlIGluIGVudW1fdHlwZXM6CiAgICAgICAgICAgICBjcHBfcHJvdG9jb2xfdHlw
ZSA9IENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShlbnVtX3R5cGUpCi0g
ICAgICAgICAgICBsaW5lcy5leHRlbmQoZ2VuZXJhdGVfY29udmVyc2lvbl9tZXRob2RfYm9keShl
bnVtX3R5cGUsIGNwcF9wcm90b2NvbF90eXBlKSkKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgn
JykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29u
ZGl0aW9uKGVudW1fdHlwZS5kZWNsYXJhdGlvbigpLmNvbmRpdGlvbiwgZ2VuZXJhdGVfY29udmVy
c2lvbl9tZXRob2RfYm9keShlbnVtX3R5cGUsIGNwcF9wcm90b2NvbF90eXBlKSkpCiAKICAgICAg
ICAgZm9yIG9iamVjdF90eXBlIGluIG9iamVjdF90eXBlczoKKyAgICAgICAgICAgIG9iamVjdF9s
aW5lcyA9IFtdCiAgICAgICAgICAgICBmb3IgZW51bV9tZW1iZXIgaW4gZmlsdGVyKHR5cGVfbWVt
YmVyX2lzX2Fub255bW91c19lbnVtX3R5cGUsIG9iamVjdF90eXBlLm1lbWJlcnMpOgogICAgICAg
ICAgICAgICAgIGNwcF9wcm90b2NvbF90eXBlID0gQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90
eXBlX2Zvcl90eXBlX21lbWJlcihlbnVtX21lbWJlciwgb2JqZWN0X3R5cGUuZGVjbGFyYXRpb24o
KSkKLSAgICAgICAgICAgICAgICBsaW5lcy5leHRlbmQoZ2VuZXJhdGVfY29udmVyc2lvbl9tZXRo
b2RfYm9keShlbnVtX21lbWJlci50eXBlLCBjcHBfcHJvdG9jb2xfdHlwZSkpCisgICAgICAgICAg
ICAgICAgb2JqZWN0X2xpbmVzLmFwcGVuZChnZW5lcmF0ZV9jb252ZXJzaW9uX21ldGhvZF9ib2R5
KGVudW1fbWVtYmVyLnR5cGUsIGNwcF9wcm90b2NvbF90eXBlKSkKKyAgICAgICAgICAgIGlmIGxl
bihvYmplY3RfbGluZXMpOgorICAgICAgICAgICAgICAgIGlmIGxlbihsaW5lcyk6CisgICAgICAg
ICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBl
bmQoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihvYmplY3RfdHlwZS5kZWNsYXJh
dGlvbigpLmNvbmRpdGlvbiwgJ1xuJy5qb2luKG9iamVjdF9saW5lcykpKQogCiAgICAgICAgIGlm
IGxlbihsaW5lcykgPT0gMToKICAgICAgICAgICAgIHJldHVybiAnJyAgIyBObyByZWFsIGRlY2xh
cmF0aW9ucyB0byBlbWl0LCBqdXN0IHRoZSBkb21haW4gY29tbWVudC4KIAotICAgICAgICByZXR1
cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4sICdcbicuam9pbihsaW5l
cykpCisgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRv
bWFpbi5jb25kaXRpb24sICdcbicuam9pbihsaW5lcykpCiAKICAgICBkZWYgX2dlbmVyYXRlX2Vu
dW1fbWFwcGluZ19hbmRfY29udmVyc2lvbl9tZXRob2RzKHNlbGYsIGRvbWFpbnMpOgogICAgICAg
ICBzZWN0aW9ucyA9IFtdCkBAIC0xNzMsMTIgKzE3OCwxNSBAQCBjbGFzcyBDcHBQcm90b2NvbFR5
cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICBkZWYgX2dlbmVy
YXRlX29wZW5fZmllbGRfbmFtZXMoc2VsZik6CiAgICAgICAgIGxpbmVzID0gW10KICAgICAgICAg
Zm9yIGRvbWFpbiBpbiBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKToKKyAgICAgICAgICAgIGRv
bWFpbl9saW5lcyA9IFtdCiAgICAgICAgICAgICB0eXBlX2RlY2xhcmF0aW9ucyA9IHNlbGYudHlw
ZV9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbihkb21haW4pCiAgICAgICAgICAgICBmb3IgdHlwZV9k
ZWNsYXJhdGlvbiBpbiBbZGVjbCBmb3IgZGVjbCBpbiB0eXBlX2RlY2xhcmF0aW9ucyBpZiBHZW5l
cmF0b3IudHlwZV9oYXNfb3Blbl9maWVsZHMoZGVjbC50eXBlKV06CiAgICAgICAgICAgICAgICAg
b3Blbl9tZW1iZXJzID0gR2VuZXJhdG9yLm9wZW5fZmllbGRzKHR5cGVfZGVjbGFyYXRpb24pCiAg
ICAgICAgICAgICAgICAgZm9yIHR5cGVfbWVtYmVyIGluIHNvcnRlZChvcGVuX21lbWJlcnMsIGtl
eT1sYW1iZGEgbWVtYmVyOiBtZW1iZXIubWVtYmVyX25hbWUpOgogICAgICAgICAgICAgICAgICAg
ICBmaWVsZF9uYW1lID0gJzo6Jy5qb2luKFsnSW5zcGVjdG9yJywgJ1Byb3RvY29sJywgZG9tYWlu
LmRvbWFpbl9uYW1lLCB1Y2ZpcnN0KHR5cGVfZGVjbGFyYXRpb24udHlwZV9uYW1lKSwgdWNmaXJz
dCh0eXBlX21lbWJlci5tZW1iZXJfbmFtZSldKQotICAgICAgICAgICAgICAgICAgICBsaW5lcy5h
cHBlbmQoJ2NvbnN0IGNoYXIqICVzID0gIiVzIjsnICUgKGZpZWxkX25hbWUsIHR5cGVfbWVtYmVy
Lm1lbWJlcl9uYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgZG9tYWluX2xpbmVzLmFwcGVuZCgn
Y29uc3QgY2hhciogJXMgPSAiJXMiOycgJSAoZmllbGRfbmFtZSwgdHlwZV9tZW1iZXIubWVtYmVy
X25hbWUpKQorICAgICAgICAgICAgaWYgbGVuKGRvbWFpbl9saW5lcyk6CisgICAgICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZG9tYWlu
LmNvbmRpdGlvbiwgJ1xuJy5qb2luKGRvbWFpbl9saW5lcykpKQogCiAgICAgICAgIHJldHVybiAn
XG4nLmpvaW4obGluZXMpCiAKQEAgLTE4OCwxNiArMTk2LDIyIEBAIGNsYXNzIENwcFByb3RvY29s
VHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICBkZWNs
YXJhdGlvbnNfdG9fZ2VuZXJhdGUgPSBbZGVjbCBmb3IgZGVjbCBpbiB0eXBlX2RlY2xhcmF0aW9u
cyBpZiBzZWxmLnR5cGVfbmVlZHNfc2hhcGVfYXNzZXJ0aW9ucyhkZWNsLnR5cGUpXQogCiAgICAg
ICAgIGZvciB0eXBlX2RlY2xhcmF0aW9uIGluIGRlY2xhcmF0aW9uc190b19nZW5lcmF0ZToKKyAg
ICAgICAgICAgIHR5cGVfbGluZXMgPSBbXQogICAgICAgICAgICAgZm9yIHR5cGVfbWVtYmVyIGlu
IHR5cGVfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzOgogICAgICAgICAgICAgICAgIGlmIGlzaW5z
dGFuY2UodHlwZV9tZW1iZXIudHlwZSwgRW51bVR5cGUpOgotICAgICAgICAgICAgICAgICAgICBz
ZWN0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYXNzZXJ0aW9uX2Zvcl9lbnVtKHR5cGVfbWVt
YmVyLCB0eXBlX2RlY2xhcmF0aW9uKSkKKyAgICAgICAgICAgICAgICAgICAgdHlwZV9saW5lcy5h
cHBlbmQoc2VsZi5fZ2VuZXJhdGVfYXNzZXJ0aW9uX2Zvcl9lbnVtKHR5cGVfbWVtYmVyLCB0eXBl
X2RlY2xhcmF0aW9uKSkKIAogICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh0eXBlX2RlY2xhcmF0
aW9uLnR5cGUsIE9iamVjdFR5cGUpOgotICAgICAgICAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChz
ZWxmLl9nZW5lcmF0ZV9hc3NlcnRpb25fZm9yX29iamVjdF9kZWNsYXJhdGlvbih0eXBlX2RlY2xh
cmF0aW9uKSkKKyAgICAgICAgICAgICAgICB0eXBlX2xpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0
ZV9hc3NlcnRpb25fZm9yX29iamVjdF9kZWNsYXJhdGlvbih0eXBlX2RlY2xhcmF0aW9uKSkKICAg
ICAgICAgICAgICAgICBpZiBHZW5lcmF0b3IudHlwZV9uZWVkc19ydW50aW1lX2Nhc3RzKHR5cGVf
ZGVjbGFyYXRpb24udHlwZSk6Ci0gICAgICAgICAgICAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChz
ZWxmLl9nZW5lcmF0ZV9ydW50aW1lX2Nhc3RfZm9yX29iamVjdF9kZWNsYXJhdGlvbih0eXBlX2Rl
Y2xhcmF0aW9uKSkKKyAgICAgICAgICAgICAgICAgICAgdHlwZV9saW5lcy5hcHBlbmQoc2VsZi5f
Z2VuZXJhdGVfcnVudGltZV9jYXN0X2Zvcl9vYmplY3RfZGVjbGFyYXRpb24odHlwZV9kZWNsYXJh
dGlvbikpCisgICAgICAgICAgICBpZiBsZW4odHlwZV9saW5lcyk6CisgICAgICAgICAgICAgICAg
c2VjdGlvbnMuYXBwZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24odHlwZV9k
ZWNsYXJhdGlvbi5jb25kaXRpb24sICdcblxuJy5qb2luKHR5cGVfbGluZXMpKSkKIAotICAgICAg
ICByZXR1cm4gJ1xuXG4nLmpvaW4oc2VjdGlvbnMpCisgICAgICAgIGlmIG5vdCBsZW4oc2VjdGlv
bnMpOgorICAgICAgICAgICAgcmV0dXJuICcnOworCisgICAgICAgIHJldHVybiBzZWxmLndyYXBf
d2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRvbWFpbi5jb25kaXRpb24sICdcblxuJy5qb2luKHNl
Y3Rpb25zKSkKIAogICAgIGRlZiBfZ2VuZXJhdGVfcnVudGltZV9jYXN0X2Zvcl9vYmplY3RfZGVj
bGFyYXRpb24oc2VsZiwgb2JqZWN0X2RlY2xhcmF0aW9uKToKICAgICAgICAgYXJncyA9IHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L2dlbmVyYXRlX2pzX2JhY2tlbmRfY29tbWFuZHMucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9qc19iYWNrZW5kX2NvbW1hbmRzLnB5
CmluZGV4IGJiZjc2ZjkyOTExLi5lYTZmZmZiMjIzOCAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfanNfYmFja2VuZF9j
b21tYW5kcy5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9nZW5lcmF0ZV9qc19iYWNrZW5kX2NvbW1hbmRzLnB5CkBAIC00Nyw3ICs0Nyw3IEBA
IGNsYXNzIEpTQmFja2VuZENvbW1hbmRzR2VuZXJhdG9yKEdlbmVyYXRvcik6CiAgICAgICAgIEdl
bmVyYXRvci5fX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpCiAKICAgICBkZWYgb3V0cHV0
X2ZpbGVuYW1lKHNlbGYpOgotICAgICAgICByZXR1cm4gIkluc3BlY3RvckJhY2tlbmRDb21tYW5k
cy5qcyIKKyAgICAgICAgcmV0dXJuICJJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMuaW4iCiAK
ICAgICBkZWYgc2hvdWxkX2dlbmVyYXRlX2RvbWFpbihzZWxmLCBkb21haW4pOgogICAgICAgICB0
eXBlX2RlY2xhcmF0aW9ucyA9IHNlbGYudHlwZV9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbihkb21h
aW4pCkBAIC05Niw3ICs5Niw3IEBAIGNsYXNzIEpTQmFja2VuZENvbW1hbmRzR2VuZXJhdG9yKEdl
bmVyYXRvcik6CiAgICAgICAgICAgICAgICAgICAgICdlbnVtTmFtZSc6IGRlY2xhcmF0aW9uLnR5
cGVfbmFtZSwKICAgICAgICAgICAgICAgICAgICAgJ2VudW1NYXAnOiAiLCAiLmpvaW4oWyclczog
IiVzIicgJSAoR2VuZXJhdG9yLnN0eWxpemVkX25hbWVfZm9yX2VudW1fdmFsdWUoZW51bV92YWx1
ZSksIGVudW1fdmFsdWUpIGZvciBlbnVtX3ZhbHVlIGluIGRlY2xhcmF0aW9uLnR5cGUuZW51bV92
YWx1ZXMoKV0pCiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVu
ZCgnSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIiUoZG9tYWluTmFtZSlzLiUoZW51bU5h
bWUpcyIsIHslKGVudW1NYXApc30pOycgJSBlbnVtX2FyZ3MpCisgICAgICAgICAgICAgICAgbGlu
ZXMuYXBwZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZGVjbGFyYXRpb24u
Y29uZGl0aW9uLCAnSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIiUoZG9tYWluTmFtZSlz
LiUoZW51bU5hbWUpcyIsIHslKGVudW1NYXApc30pOycgJSBlbnVtX2FyZ3MpKQogCiAgICAgICAg
ICAgICBkZWYgaXNfYW5vbnltb3VzX2VudW1fbWVtYmVyKHR5cGVfbWVtYmVyKToKICAgICAgICAg
ICAgICAgICByZXR1cm4gaXNpbnN0YW5jZSh0eXBlX21lbWJlci50eXBlLCBFbnVtVHlwZSkgYW5k
IHR5cGVfbWVtYmVyLnR5cGUuaXNfYW5vbnltb3VzCkBAIC0xMjgsMTYgKzEyOCwxOCBAQCBjbGFz
cyBKU0JhY2tlbmRDb21tYW5kc0dlbmVyYXRvcihHZW5lcmF0b3IpOgogICAgICAgICAgICAgICAg
ICdjYWxsUGFyYW1zJzogIiwgIi5qb2luKFtnZW5lcmF0ZV9wYXJhbWV0ZXJfb2JqZWN0KHBhcmFt
ZXRlcikgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLmNhbGxfcGFyYW1ldGVyc10pLAogICAgICAg
ICAgICAgICAgICdyZXR1cm5QYXJhbXMnOiAiLCAiLmpvaW4oWyciJXMiJyAlIHBhcmFtZXRlci5w
YXJhbWV0ZXJfbmFtZSBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnNd
KSwKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnSW5zcGVjdG9yQmFj
a2VuZC5yZWdpc3RlckNvbW1hbmQoIiUoZG9tYWluTmFtZSlzLiUoY29tbWFuZE5hbWUpcyIsICUo
dGFyZ2V0VHlwZXMpcywgWyUoY2FsbFBhcmFtcylzXSwgWyUocmV0dXJuUGFyYW1zKXNdKTsnICUg
Y29tbWFuZF9hcmdzKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYud3JhcF93aXRoX2d1
YXJkX2Zvcl9jb25kaXRpb24oY29tbWFuZC5jb25kaXRpb24sICdJbnNwZWN0b3JCYWNrZW5kLnJl
Z2lzdGVyQ29tbWFuZCgiJShkb21haW5OYW1lKXMuJShjb21tYW5kTmFtZSlzIiwgJSh0YXJnZXRU
eXBlcylzLCBbJShjYWxsUGFyYW1zKXNdLCBbJShyZXR1cm5QYXJhbXMpc10pOycgJSBjb21tYW5k
X2FyZ3MpKQogCiAgICAgICAgIGZvciBldmVudCBpbiBldmVudHM6CisgICAgICAgICAgICBldmVu
dF9saW5lcyA9IFtdCisKICAgICAgICAgICAgIGZvciBwYXJhbSBpbiBmaWx0ZXIoaXNfYW5vbnlt
b3VzX2VudW1fcGFyYW0sIGV2ZW50LmV2ZW50X3BhcmFtZXRlcnMpOgogICAgICAgICAgICAgICAg
IGVudW1fYXJncyA9IHsKICAgICAgICAgICAgICAgICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4u
ZG9tYWluX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICdlbnVtTmFtZSc6ICclcyVzJyAlICh1
Y2ZpcnN0KGV2ZW50LmV2ZW50X25hbWUpLCB1Y2ZpcnN0KHBhcmFtLnBhcmFtZXRlcl9uYW1lKSks
CiAgICAgICAgICAgICAgICAgICAgICdlbnVtTWFwJzogIiwgIi5qb2luKFsnJXM6ICIlcyInICUg
KEdlbmVyYXRvci5zdHlsaXplZF9uYW1lX2Zvcl9lbnVtX3ZhbHVlKGVudW1fdmFsdWUpLCBlbnVt
X3ZhbHVlKSBmb3IgZW51bV92YWx1ZSBpbiBwYXJhbS50eXBlLmVudW1fdmFsdWVzKCldKSwKICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdJbnNwZWN0b3JC
YWNrZW5kLnJlZ2lzdGVyRW51bSgiJShkb21haW5OYW1lKXMuJShlbnVtTmFtZSlzIiwgeyUoZW51
bU1hcClzfSk7JyAlIGVudW1fYXJncykKKyAgICAgICAgICAgICAgICBldmVudF9saW5lcy5hcHBl
bmQoJ0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCIlKGRvbWFpbk5hbWUpcy4lKGVudW1O
YW1lKXMiLCB7JShlbnVtTWFwKXN9KTsnICUgZW51bV9hcmdzKQogCiAgICAgICAgICAgICBldmVu
dF9hcmdzID0gewogICAgICAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9u
YW1lLApAQCAtMTQ1LDcgKzE0Nyw5IEBAIGNsYXNzIEpTQmFja2VuZENvbW1hbmRzR2VuZXJhdG9y
KEdlbmVyYXRvcik6CiAgICAgICAgICAgICAgICAgJ3RhcmdldFR5cGVzJzoganNvbi5kdW1wcyhl
dmVudC50YXJnZXRfdHlwZXMpLAogICAgICAgICAgICAgICAgICdwYXJhbXMnOiAiLCAiLmpvaW4o
WyciJXMiJyAlIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSBmb3IgcGFyYW1ldGVyIGluIGV2ZW50
LmV2ZW50X3BhcmFtZXRlcnNdKSwKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxpbmVzLmFw
cGVuZCgnSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckV2ZW50KCIlKGRvbWFpbk5hbWUpcy4lKGV2
ZW50TmFtZSlzIiwgJSh0YXJnZXRUeXBlcylzLCBbJShwYXJhbXMpc10pOycgJSBldmVudF9hcmdz
KQorICAgICAgICAgICAgZXZlbnRfbGluZXMuYXBwZW5kKCdJbnNwZWN0b3JCYWNrZW5kLnJlZ2lz
dGVyRXZlbnQoIiUoZG9tYWluTmFtZSlzLiUoZXZlbnROYW1lKXMiLCAlKHRhcmdldFR5cGVzKXMs
IFslKHBhcmFtcylzXSk7JyAlIGV2ZW50X2FyZ3MpCisKKyAgICAgICAgICAgIGxpbmVzLmFwcGVu
ZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGV2ZW50LmNvbmRpdGlvbiwgJ1xu
Jy5qb2luKGV2ZW50X2xpbmVzKSkpCiAKICAgICAgICAgaGFzX2FzeW5jX2NvbW1hbmRzID0gYW55
KFtjb21tYW5kLmlzX2FzeW5jIGZvciBjb21tYW5kIGluIGNvbW1hbmRzXSkKICAgICAgICAgaWYg
bGVuKGV2ZW50cykgPiAwIG9yIGhhc19hc3luY19jb21tYW5kczoKQEAgLTE2MCw0ICsxNjQsNCBA
QCBjbGFzcyBKU0JhY2tlbmRDb21tYW5kc0dlbmVyYXRvcihHZW5lcmF0b3IpOgogICAgICAgICB9
CiAgICAgICAgIGxpbmVzLmFwcGVuZCgnSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigi
JShkb21haW5OYW1lKXMiLCAlKGRlYnVnZ2FibGVUeXBlcylzKTsnICUgYWN0aXZhdGVfYXJncykK
IAotICAgICAgICByZXR1cm4gIlxuIi5qb2luKGxpbmVzKQorICAgICAgICByZXR1cm4gc2VsZi53
cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9uLCAiXG4iLmpvaW4o
bGluZXMpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVf
b2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CmluZGV4IGVkOGNjNTk2ZDMxLi5lYTJm
YzExMjc0ZSAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5Cisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRlX29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQpAQCAtOTksNyArOTksNyBAQCBj
bGFzcyBPYmpDQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6
CiAgICAgICAgICAgICAnb2JqY1ByZWZpeCc6IHNlbGYub2JqY19wcmVmaXgoKSwKICAgICAgICAg
fQogCi0gICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFp
biwgVGVtcGxhdGUoT2JqQ1RlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hlckhlYWRlckRvbWFpbkhh
bmRsZXJPYmpDRGVjbGFyYXRpb24pLnN1YnN0aXR1dGUoTm9uZSwgKipoYW5kbGVyX2FyZ3MpKQor
ICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihkb21haW4u
Y29uZGl0aW9uLCBUZW1wbGF0ZShPYmpDVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVySGVhZGVy
RG9tYWluSGFuZGxlck9iakNEZWNsYXJhdGlvbikuc3Vic3RpdHV0ZShOb25lLCAqKmhhbmRsZXJf
YXJncykpCiAKICAgICBkZWYgX2dlbmVyYXRlX29iamNfaGFuZGxlcl9kZWNsYXJhdGlvbl9mb3Jf
Y29tbWFuZChzZWxmLCBjb21tYW5kKToKICAgICAgICAgbGluZXMgPSBbXQpAQCAtMTEyLDQgKzEx
Miw0IEBAIGNsYXNzIE9iakNCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihPYmpDR2Vu
ZXJhdG9yKToKICAgICAgICAgICAgICdwYXJhbWV0ZXJzJzogJywgJy5qb2luKHBhcmFtZXRlcnMp
LAogICAgICAgICB9CiAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHZvaWQgJShjb21tYW5kTmFt
ZSlzKCUocGFyYW1ldGVycylzKSBmaW5hbDsnICUgY29tbWFuZF9hcmdzKQotICAgICAgICByZXR1
cm4gJ1xuJy5qb2luKGxpbmVzKQorICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRf
Zm9yX2NvbmRpdGlvbihjb21tYW5kLmNvbmRpdGlvbiwgJ1xuJy5qb2luKGxpbmVzKSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dl
bmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5IGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19i
YWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKaW5kZXggYTFiOWUxNzk3MDUuLmY1
ZWU4ZTU4Mzk4IDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRh
dGlvbi5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQpA
QCAtODYsNyArODYsNyBAQCBjbGFzcyBPYmpDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlv
bkdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKICAgICAgICAgZm9yIGNvbW1hbmQgaW4gY29tbWFu
ZHM6CiAgICAgICAgICAgICBjb21tYW5kX2RlY2xhcmF0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJh
dGVfaGFuZGxlcl9pbXBsZW1lbnRhdGlvbl9mb3JfY29tbWFuZChkb21haW4sIGNvbW1hbmQpKQog
Ci0gICAgICAgIHJldHVybiAnXG4nLmpvaW4oY29tbWFuZF9kZWNsYXJhdGlvbnMpCisgICAgICAg
IHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRvbWFpbi5jb25kaXRp
b24sICdcblxuJy5qb2luKGNvbW1hbmRfZGVjbGFyYXRpb25zKSkKIAogICAgIGRlZiBfZ2VuZXJh
dGVfaGFuZGxlcl9pbXBsZW1lbnRhdGlvbl9mb3JfY29tbWFuZChzZWxmLCBkb21haW4sIGNvbW1h
bmQpOgogICAgICAgICBsaW5lcyA9IFtdCkBAIC0xMDQsNyArMTA0LDcgQEAgY2xhc3MgT2JqQ0Jh
Y2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAg
ICAgICAgICAgICAnaW52b2NhdGlvbic6IHNlbGYuX2dlbmVyYXRlX2ludm9jYXRpb25fZm9yX2Nv
bW1hbmQoZG9tYWluLCBjb21tYW5kKSwKICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiBzZWxm
LndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgVGVtcGxhdGUoT2JqQ1RlbXBsYXRl
cy5CYWNrZW5kRGlzcGF0Y2hlckhlYWRlckRvbWFpbkhhbmRsZXJJbXBsZW1lbnRhdGlvbikuc3Vi
c3RpdHV0ZShOb25lLCAqKmNvbW1hbmRfYXJncykpCisgICAgICAgIHJldHVybiBzZWxmLndyYXBf
d2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGNvbW1hbmQuY29uZGl0aW9uLCBUZW1wbGF0ZShPYmpD
VGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVySGVhZGVyRG9tYWluSGFuZGxlckltcGxlbWVudGF0
aW9uKS5zdWJzdGl0dXRlKE5vbmUsICoqY29tbWFuZF9hcmdzKSkKIAogICAgIGRlZiBfZ2VuZXJh
dGVfcmVzcG9uZHNfdG9fc2VsZWN0b3JfZm9yX2NvbW1hbmQoc2VsZiwgZG9tYWluLCBjb21tYW5k
KToKICAgICAgICAgcmV0dXJuICdbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVj
dG9yKCVzV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOiVzKV0nICUgKGNvbW1hbmQu
Y29tbWFuZF9uYW1lLCAnJy5qb2luKG1hcChsYW1iZGEgcGFyYW1ldGVyOiAnJXM6JyAlIHBhcmFt
ZXRlci5wYXJhbWV0ZXJfbmFtZSwgY29tbWFuZC5jYWxsX3BhcmFtZXRlcnMpKSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRlX29iamNfaGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19oZWFkZXIucHkKaW5kZXggMTVmYjc0YmU4YmYuLjE1
YmY2MWQyZDQ1IDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2hlYWRlci5weQorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2hlYWRlci5w
eQpAQCAtMzEsMTIgKzMxLDEyIEBAIGZyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQogCiB0cnk6
CiAgICAgZnJvbSAuZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKLSAgICBmcm9t
IC5tb2RlbHMgaW1wb3J0IE9iamVjdFR5cGUsIEVudW1UeXBlLCBQbGF0Zm9ybXMKKyAgICBmcm9t
IC5tb2RlbHMgaW1wb3J0IE9iamVjdFR5cGUsIEVudW1UeXBlCiAgICAgZnJvbSAub2JqY19nZW5l
cmF0b3IgaW1wb3J0IE9iakNHZW5lcmF0b3IsIGpvaW5fdHlwZV9hbmRfbmFtZQogICAgIGZyb20g
Lm9iamNfZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgT2JqQ0dlbmVyYXRvclRlbXBsYXRlcyBh
cyBPYmpDVGVtcGxhdGVzCiBleGNlcHQgVmFsdWVFcnJvcjoKICAgICBmcm9tIGdlbmVyYXRvciBp
bXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0Ci0gICAgZnJvbSBtb2RlbHMgaW1wb3J0IE9iamVjdFR5
cGUsIEVudW1UeXBlLCBQbGF0Zm9ybXMKKyAgICBmcm9tIG1vZGVscyBpbXBvcnQgT2JqZWN0VHlw
ZSwgRW51bVR5cGUKICAgICBmcm9tIG9iamNfZ2VuZXJhdG9yIGltcG9ydCBPYmpDR2VuZXJhdG9y
LCBqb2luX3R5cGVfYW5kX25hbWUKICAgICBmcm9tIG9iamNfZ2VuZXJhdG9yX3RlbXBsYXRlcyBp
bXBvcnQgT2JqQ0dlbmVyYXRvclRlbXBsYXRlcyBhcyBPYmpDVGVtcGxhdGVzCiAKQEAgLTQ0LDcg
KzQ0LDcgQEAgbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCiAKIAogZGVmIGFkZF9u
ZXdsaW5lKGxpbmVzKToKLSAgICBpZiBsaW5lcyBhbmQgbGluZXNbLTFdID09ICcnOgorICAgIGlm
IG5vdCBsZW4obGluZXMpIG9yIGxpbmVzWy0xXSA9PSAnJzoKICAgICAgICAgcmV0dXJuCiAgICAg
bGluZXMuYXBwZW5kKCcnKQogCkBAIC04Nyw3ICs4Nyw2IEBAIGNsYXNzIE9iakNIZWFkZXJHZW5l
cmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVy
YXRlX2xpY2Vuc2UoKSkKICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKE9iakNUZW1w
bGF0ZXMuSGVhZGVyUHJlbHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlclByZWx1ZGVfYXJn
cykpCiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZCgnXG4nLmpvaW4oW19mIGZvciBfZiBpbiBtYXAo
c2VsZi5fZ2VuZXJhdGVfZm9yd2FyZF9kZWNsYXJhdGlvbnMsIHR5cGVfZG9tYWlucykgaWYgX2Zd
KSkKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2VudW1fZm9yX3BsYXRm
b3JtcygpKQogICAgICAgICBzZWN0aW9ucy5hcHBlbmQoJ1xuJy5qb2luKFtfZiBmb3IgX2YgaW4g
bWFwKHNlbGYuX2dlbmVyYXRlX2VudW1zLCB0eXBlX2RvbWFpbnMpIGlmIF9mXSkpCiAgICAgICAg
IHNlY3Rpb25zLmFwcGVuZCgnXG4nLmpvaW4oW19mIGZvciBfZiBpbiBtYXAoc2VsZi5fZ2VuZXJh
dGVfdHlwZXMsIHR5cGVfZG9tYWlucykgaWYgX2ZdKSkKIApAQCAtMTAzLDQyICsxMDIsNTEgQEAg
Y2xhc3MgT2JqQ0hlYWRlckdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKICAgICAgICAgZm9yIGRl
Y2xhcmF0aW9uIGluIHNlbGYudHlwZV9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbihkb21haW4pOgog
ICAgICAgICAgICAgaWYgKGlzaW5zdGFuY2UoZGVjbGFyYXRpb24udHlwZSwgT2JqZWN0VHlwZSkp
OgogICAgICAgICAgICAgICAgIG9iamNfbmFtZSA9IHNlbGYub2JqY19uYW1lX2Zvcl90eXBlKGRl
Y2xhcmF0aW9uLnR5cGUpCi0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdAY2xhc3MgJXM7
JyAlIG9iamNfbmFtZSkKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKyAgICAgICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihk
ZWNsYXJhdGlvbi5jb25kaXRpb24sICdAY2xhc3MgJXM7JyAlIG9iamNfbmFtZSkpCisgICAgICAg
IHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRvbWFpbi5jb25kaXRp
b24sICdcbicuam9pbihsaW5lcykpCiAKICAgICBkZWYgX2dlbmVyYXRlX2VudW1zKHNlbGYsIGRv
bWFpbik6CiAgICAgICAgIGxpbmVzID0gW10KIAogICAgICAgICAjIFR5cGUgZW51bXMgYW5kIG1l
bWJlciBlbnVtcy4KICAgICAgICAgZm9yIGRlY2xhcmF0aW9uIGluIHNlbGYudHlwZV9kZWNsYXJh
dGlvbnNfZm9yX2RvbWFpbihkb21haW4pOgorICAgICAgICAgICAgZGVjbGFyYXRpb25fbGluZXMg
PSBbXQogICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShkZWNsYXJhdGlvbi50eXBlLCBFbnVtVHlw
ZSk6Ci0gICAgICAgICAgICAgICAgYWRkX25ld2xpbmUobGluZXMpCi0gICAgICAgICAgICAgICAg
bGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2Zvcl9kZWNsYXJhdGlv
bihkb21haW4sIGRlY2xhcmF0aW9uKSkKKyAgICAgICAgICAgICAgICBhZGRfbmV3bGluZShkZWNs
YXJhdGlvbl9saW5lcykKKyAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbl9saW5lcy5hcHBlbmQo
c2VsZi5fZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX2RlY2xhcmF0aW9uKGRvbWFpbiwgZGVj
bGFyYXRpb24pKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBmb3IgbWVtYmVy
IGluIGRlY2xhcmF0aW9uLnR5cGVfbWVtYmVyczoKICAgICAgICAgICAgICAgICAgICAgaWYgaXNp
bnN0YW5jZShtZW1iZXIudHlwZSwgRW51bVR5cGUpIGFuZCBtZW1iZXIudHlwZS5pc19hbm9ueW1v
dXM6Ci0gICAgICAgICAgICAgICAgICAgICAgICBhZGRfbmV3bGluZShsaW5lcykKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51
bV9mb3JfbWVtYmVyKGRvbWFpbiwgZGVjbGFyYXRpb24sIG1lbWJlcikpCisgICAgICAgICAgICAg
ICAgICAgICAgICBhZGRfbmV3bGluZShkZWNsYXJhdGlvbl9saW5lcykKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGRlY2xhcmF0aW9uX2xpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1v
dXNfZW51bV9mb3JfbWVtYmVyKGRvbWFpbiwgZGVjbGFyYXRpb24sIG1lbWJlcikpCisgICAgICAg
ICAgICBpZiBsZW4oZGVjbGFyYXRpb25fbGluZXMpOgorICAgICAgICAgICAgICAgIGxpbmVzLmFw
cGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRlY2xhcmF0aW9uLmNvbmRp
dGlvbiwgJ1xuXG4nLmpvaW4oZGVjbGFyYXRpb25fbGluZXMpKSkKIAogICAgICAgICAjIEFub255
bW91cyBjb21tYW5kIGVudW1zLgogICAgICAgICBmb3IgY29tbWFuZCBpbiBzZWxmLmNvbW1hbmRz
X2Zvcl9kb21haW4oZG9tYWluKToKKyAgICAgICAgICAgIGNvbW1hbmRfbGluZXMgPSBbXQogICAg
ICAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLmNhbGxfcGFyYW1ldGVyczoKICAgICAg
ICAgICAgICAgICBpZiBpc2luc3RhbmNlKHBhcmFtZXRlci50eXBlLCBFbnVtVHlwZSkgYW5kIHBh
cmFtZXRlci50eXBlLmlzX2Fub255bW91czoKLSAgICAgICAgICAgICAgICAgICAgYWRkX25ld2xp
bmUobGluZXMpCi0gICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0
ZV9hbm9ueW1vdXNfZW51bV9mb3JfcGFyYW1ldGVyKGRvbWFpbiwgY29tbWFuZC5jb21tYW5kX25h
bWUsIHBhcmFtZXRlcikpCisgICAgICAgICAgICAgICAgICAgIGFkZF9uZXdsaW5lKGNvbW1hbmRf
bGluZXMpCisgICAgICAgICAgICAgICAgICAgIGNvbW1hbmRfbGluZXMuYXBwZW5kKHNlbGYuX2dl
bmVyYXRlX2Fub255bW91c19lbnVtX2Zvcl9wYXJhbWV0ZXIoZG9tYWluLCBjb21tYW5kLmNvbW1h
bmRfbmFtZSwgcGFyYW1ldGVyKSkKICAgICAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFu
ZC5yZXR1cm5fcGFyYW1ldGVyczoKICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHBhcmFt
ZXRlci50eXBlLCBFbnVtVHlwZSkgYW5kIHBhcmFtZXRlci50eXBlLmlzX2Fub255bW91czoKLSAg
ICAgICAgICAgICAgICAgICAgYWRkX25ld2xpbmUobGluZXMpCi0gICAgICAgICAgICAgICAgICAg
IGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfcGFyYW1ldGVy
KGRvbWFpbiwgY29tbWFuZC5jb21tYW5kX25hbWUsIHBhcmFtZXRlcikpCisgICAgICAgICAgICAg
ICAgICAgIGFkZF9uZXdsaW5lKGNvbW1hbmRfbGluZXMpCisgICAgICAgICAgICAgICAgICAgIGNv
bW1hbmRfbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2Zvcl9wYXJh
bWV0ZXIoZG9tYWluLCBjb21tYW5kLmNvbW1hbmRfbmFtZSwgcGFyYW1ldGVyKSkKKyAgICAgICAg
ICAgIGlmIGxlbihjb21tYW5kX2xpbmVzKToKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQo
c2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihjb21tYW5kLmNvbmRpdGlvbiwgJ1xu
XG4nLmpvaW4oY29tbWFuZF9saW5lcykpKQogCiAgICAgICAgICMgQW5vbnltb3VzIGV2ZW50IGVu
dW1zLgogICAgICAgICBmb3IgZXZlbnQgaW4gc2VsZi5ldmVudHNfZm9yX2RvbWFpbihkb21haW4p
OgorICAgICAgICAgICAgZXZlbnRfbGluZXMgPSBbXQogICAgICAgICAgICAgZm9yIHBhcmFtZXRl
ciBpbiBldmVudC5ldmVudF9wYXJhbWV0ZXJzOgogICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFu
Y2UocGFyYW1ldGVyLnR5cGUsIEVudW1UeXBlKSBhbmQgcGFyYW1ldGVyLnR5cGUuaXNfYW5vbnlt
b3VzOgotICAgICAgICAgICAgICAgICAgICBhZGRfbmV3bGluZShsaW5lcykKLSAgICAgICAgICAg
ICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2Zvcl9w
YXJhbWV0ZXIoZG9tYWluLCBldmVudC5ldmVudF9uYW1lLCBwYXJhbWV0ZXIpKQorICAgICAgICAg
ICAgICAgICAgICBhZGRfbmV3bGluZShldmVudF9saW5lcykKKyAgICAgICAgICAgICAgICAgICAg
ZXZlbnRfbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2Zvcl9wYXJh
bWV0ZXIoZG9tYWluLCBldmVudC5ldmVudF9uYW1lLCBwYXJhbWV0ZXIpKQorICAgICAgICAgICAg
aWYgbGVuKGV2ZW50X2xpbmVzKToKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi53
cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihldmVudC5jb25kaXRpb24sICdcblxuJy5qb2lu
KGV2ZW50X2xpbmVzKSkpCiAKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKyAgICAg
ICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZG9tYWluLmNvbmRp
dGlvbiwgJ1xuXG4nLmpvaW4obGluZXMpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV90eXBlcyhzZWxm
LCBkb21haW4pOgogICAgICAgICBsaW5lcyA9IFtdCkBAIC0xNDcsMTIgKzE1NSw3IEBAIGNsYXNz
IE9iakNIZWFkZXJHZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgICAgICAgICBpZiBpc2lu
c3RhbmNlKGRlY2xhcmF0aW9uLnR5cGUsIE9iamVjdFR5cGUpOgogICAgICAgICAgICAgICAgIGFk
ZF9uZXdsaW5lKGxpbmVzKQogICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5l
cmF0ZV90eXBlX2ludGVyZmFjZShkb21haW4sIGRlY2xhcmF0aW9uKSkKLSAgICAgICAgcmV0dXJu
ICdcbicuam9pbihsaW5lcykKLQotICAgIGRlZiBfZ2VuZXJhdGVfZW51bV9mb3JfcGxhdGZvcm1z
KHNlbGYpOgotICAgICAgICBvYmpjX2VudW1fbmFtZSA9ICclc1BsYXRmb3JtJyAlIHNlbGYub2Jq
Y19wcmVmaXgoKQotICAgICAgICBlbnVtX3ZhbHVlcyA9IFtwbGF0Zm9ybS5uYW1lIGZvciBwbGF0
Zm9ybSBpbiBQbGF0Zm9ybXNdCi0gICAgICAgIHJldHVybiBzZWxmLl9nZW5lcmF0ZV9lbnVtKG9i
amNfZW51bV9uYW1lLCBlbnVtX3ZhbHVlcykKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRo
X2d1YXJkX2Zvcl9jb25kaXRpb24oZG9tYWluLmNvbmRpdGlvbiwgJ1xuJy5qb2luKGxpbmVzKSkK
IAogICAgIGRlZiBfZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX2RlY2xhcmF0aW9uKHNlbGYs
IGRvbWFpbiwgZGVjbGFyYXRpb24pOgogICAgICAgICBvYmpjX2VudW1fbmFtZSA9IHNlbGYub2Jq
Y19lbnVtX25hbWVfZm9yX2Fub255bW91c19lbnVtX2RlY2xhcmF0aW9uKGRlY2xhcmF0aW9uKQpA
QCAtMTk0LDcgKzE5Nyw3IEBAIGNsYXNzIE9iakNIZWFkZXJHZW5lcmF0b3IoT2JqQ0dlbmVyYXRv
cik6CiAgICAgICAgIGZvciBtZW1iZXIgaW4gb3B0aW9uYWxfbWVtYmVyczoKICAgICAgICAgICAg
IGxpbmVzLmFwcGVuZCgnLyogb3B0aW9uYWwgKi8gJyArIHNlbGYuX2dlbmVyYXRlX21lbWJlcl9w
cm9wZXJ0eShkZWNsYXJhdGlvbiwgbWVtYmVyKSkKICAgICAgICAgbGluZXMuYXBwZW5kKCdAZW5k
JykKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKyAgICAgICAgcmV0dXJuIHNlbGYu
d3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZGVjbGFyYXRpb24uY29uZGl0aW9uLCAnXG4n
LmpvaW4obGluZXMpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9pbml0X21ldGhvZF9mb3JfcmVxdWly
ZWRfbWVtYmVycyhzZWxmLCBkb21haW4sIGRlY2xhcmF0aW9uLCByZXF1aXJlZF9tZW1iZXJzKToK
ICAgICAgICAgcGFpcnMgPSBbXQpAQCAtMjE5LDcgKzIyMiw3IEBAIGNsYXNzIE9iakNIZWFkZXJH
ZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgICAgICAgICBmb3IgY29tbWFuZCBpbiBzZWxm
LmNvbW1hbmRzX2Zvcl9kb21haW4oZG9tYWluKToKICAgICAgICAgICAgICAgICBsaW5lcy5hcHBl
bmQoc2VsZi5fZ2VuZXJhdGVfc2luZ2xlX2NvbW1hbmRfcHJvdG9jb2woZG9tYWluLCBjb21tYW5k
KSkKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnQGVuZCcpCi0gICAgICAgIHJldHVybiAnXG4n
LmpvaW4obGluZXMpCisgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29u
ZGl0aW9uKGRvbWFpbi5jb25kaXRpb24sICdcbicuam9pbihsaW5lcykpCiAKICAgICBkZWYgX2dl
bmVyYXRlX3NpbmdsZV9jb21tYW5kX3Byb3RvY29sKHNlbGYsIGRvbWFpbiwgY29tbWFuZCk6CiAg
ICAgICAgIHBhaXJzID0gW10KQEAgLTIyOCw3ICsyMzEsNyBAQCBjbGFzcyBPYmpDSGVhZGVyR2Vu
ZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQu
Y2FsbF9wYXJhbWV0ZXJzOgogICAgICAgICAgICAgcGFyYW1fbmFtZSA9IHBhcmFtZXRlci5wYXJh
bWV0ZXJfbmFtZQogICAgICAgICAgICAgcGFpcnMuYXBwZW5kKCclczooJXMpJXMnICUgKHBhcmFt
X25hbWUsIHNlbGYub2JqY190eXBlX2Zvcl9wYXJhbShkb21haW4sIGNvbW1hbmQuY29tbWFuZF9u
YW1lLCBwYXJhbWV0ZXIpLCBwYXJhbV9uYW1lKSkKLSAgICAgICAgcmV0dXJuICctICh2b2lkKSVz
V2l0aCVzOycgJSAoY29tbWFuZC5jb21tYW5kX25hbWUsICcgJy5qb2luKHBhaXJzKSkKKyAgICAg
ICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oY29tbWFuZC5jb25k
aXRpb24sICctICh2b2lkKSVzV2l0aCVzOycgJSAoY29tbWFuZC5jb21tYW5kX25hbWUsICcgJy5q
b2luKHBhaXJzKSkpCiAKICAgICBkZWYgX2NhbGxiYWNrX2Jsb2NrX2Zvcl9jb21tYW5kKHNlbGYs
IGRvbWFpbiwgY29tbWFuZCk6CiAgICAgICAgIHBhaXJzID0gW10KQEAgLTI0OSw3ICsyNTIsNyBA
QCBjbGFzcyBPYmpDSGVhZGVyR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogICAgICAgICAgICAg
Zm9yIGV2ZW50IGluIGV2ZW50czoKICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5f
Z2VuZXJhdGVfc2luZ2xlX2V2ZW50X2ludGVyZmFjZShkb21haW4sIGV2ZW50KSkKICAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZCgnQGVuZCcpCi0gICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMp
CisgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRvbWFp
bi5jb25kaXRpb24sICdcbicuam9pbihsaW5lcykpCiAKICAgICBkZWYgX2dlbmVyYXRlX3Npbmds
ZV9ldmVudF9pbnRlcmZhY2Uoc2VsZiwgZG9tYWluLCBldmVudCk6CiAgICAgICAgIGlmIG5vdCBl
dmVudC5ldmVudF9wYXJhbWV0ZXJzOgpAQCAtMjU5LDQgKzI2Miw0IEBAIGNsYXNzIE9iakNIZWFk
ZXJHZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgICAgICAgICBwYXJhbV9uYW1lID0gcGFy
YW1ldGVyLnBhcmFtZXRlcl9uYW1lCiAgICAgICAgICAgICBwYWlycy5hcHBlbmQoJyVzOiglcykl
cycgJSAocGFyYW1fbmFtZSwgc2VsZi5vYmpjX3R5cGVfZm9yX3BhcmFtKGRvbWFpbiwgZXZlbnQu
ZXZlbnRfbmFtZSwgcGFyYW1ldGVyKSwgcGFyYW1fbmFtZSkpCiAgICAgICAgIHBhaXJzWzBdID0g
dWNmaXJzdChwYWlyc1swXSkKLSAgICAgICAgcmV0dXJuICctICh2b2lkKSVzV2l0aCVzOycgJSAo
ZXZlbnQuZXZlbnRfbmFtZSwgJyAnLmpvaW4ocGFpcnMpKQorICAgICAgICByZXR1cm4gc2VsZi53
cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihldmVudC5jb25kaXRpb24sICctICh2b2lkKSVz
V2l0aCVzOycgJSAoZXZlbnQuZXZlbnRfbmFtZSwgJyAnLmpvaW4ocGFpcnMpKSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRlX29iamNfcHJvdG9jb2xfdHlwZV9jb252ZXJzaW9uc19oZWFkZXIucHkgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX3Byb3Rv
Y29sX3R5cGVfY29udmVyc2lvbnNfaGVhZGVyLnB5CmluZGV4IDI1NzFmNGIyMmE4Li41YzUyY2Rl
YTliMyAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBlX2NvbnZlcnNpb25zX2hlYWRlci5w
eQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9n
ZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVfY29udmVyc2lvbnNfaGVhZGVyLnB5CkBAIC0zMSwx
MiArMzEsMTIgQEAgZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCiAKIHRyeToKICAgICBmcm9t
IC5nZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvcgotICAgIGZyb20gLm1vZGVscyBpbXBvcnQgRW51
bVR5cGUsIEZyYW1ld29ya3MsIFBsYXRmb3JtcworICAgIGZyb20gLm1vZGVscyBpbXBvcnQgRW51
bVR5cGUsIEZyYW1ld29ya3MKICAgICBmcm9tIC5vYmpjX2dlbmVyYXRvciBpbXBvcnQgT2JqQ0dl
bmVyYXRvcgogICAgIGZyb20gLm9iamNfZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgT2JqQ0dl
bmVyYXRvclRlbXBsYXRlcyBhcyBPYmpDVGVtcGxhdGVzCiBleGNlcHQgVmFsdWVFcnJvcjoKICAg
ICBmcm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yCi0gICAgZnJvbSBtb2RlbHMgaW1wb3J0
IEVudW1UeXBlLCBGcmFtZXdvcmtzLCBQbGF0Zm9ybXMKKyAgICBmcm9tIG1vZGVscyBpbXBvcnQg
RW51bVR5cGUsIEZyYW1ld29ya3MKICAgICBmcm9tIG9iamNfZ2VuZXJhdG9yIGltcG9ydCBPYmpD
R2VuZXJhdG9yCiAgICAgZnJvbSBvYmpjX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IE9iakNH
ZW5lcmF0b3JUZW1wbGF0ZXMgYXMgT2JqQ1RlbXBsYXRlcwogCkBAIC00NCw3ICs0NCw3IEBAIGxv
ZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQogCiAKIGRlZiBhZGRfbmV3bGluZShsaW5l
cyk6Ci0gICAgaWYgbGluZXMgYW5kIGxpbmVzWy0xXSA9PSAnJzoKKyAgICBpZiBub3QgbGVuKGxp
bmVzKSBvciBsaW5lc1stMV0gPT0gJyc6CiAgICAgICAgIHJldHVybgogICAgIGxpbmVzLmFwcGVu
ZCgnJykKIApAQCAtNzUsNyArNzUsNiBAQCBjbGFzcyBPYmpDUHJvdG9jb2xUeXBlQ29udmVyc2lv
bnNIZWFkZXJHZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgICAgIHNlY3Rpb25zLmFwcGVu
ZChzZWxmLmdlbmVyYXRlX2xpY2Vuc2UoKSkKICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBs
YXRlKE9iakNUZW1wbGF0ZXMuVHlwZUNvbnZlcnNpb25zSGVhZGVyUHJlbHVkZSkuc3Vic3RpdHV0
ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRl
KE9iakNUZW1wbGF0ZXMuVHlwZUNvbnZlcnNpb25zSGVhZGVyU3RhbmRhcmQpLnN1YnN0aXR1dGUo
Tm9uZSkpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9lbnVtX2NvbnZl
cnNpb25fZm9yX3BsYXRmb3JtcygpKQogICAgICAgICBzZWN0aW9ucy5leHRlbmQobGlzdChtYXAo
c2VsZi5fZ2VuZXJhdGVfZW51bV9jb252ZXJzaW9uX2Z1bmN0aW9ucywgZG9tYWlucykpKQogICAg
ICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoT2JqQ1RlbXBsYXRlcy5UeXBlQ29udmVyc2lv
bnNIZWFkZXJQb3N0bHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKICAgICAg
ICAgcmV0dXJuICdcblxuJy5qb2luKHNlY3Rpb25zKQpAQCAtODUsNDIgKzg0LDQzIEBAIGNsYXNz
IE9iakNQcm90b2NvbFR5cGVDb252ZXJzaW9uc0hlYWRlckdlbmVyYXRvcihPYmpDR2VuZXJhdG9y
KToKIAogICAgICAgICAjIFR5cGUgZW51bXMgYW5kIG1lbWJlciBlbnVtcy4KICAgICAgICAgZm9y
IGRlY2xhcmF0aW9uIGluIHNlbGYudHlwZV9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbihkb21haW4p
OgorICAgICAgICAgICAgZGVjbGFyYXRpb25fbGluZXMgPSBbXQogICAgICAgICAgICAgaWYgaXNp
bnN0YW5jZShkZWNsYXJhdGlvbi50eXBlLCBFbnVtVHlwZSk6Ci0gICAgICAgICAgICAgICAgYWRk
X25ld2xpbmUobGluZXMpCi0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVy
YXRlX2Fub255bW91c19lbnVtX2NvbnZlcnNpb25fZm9yX2RlY2xhcmF0aW9uKGRvbWFpbiwgZGVj
bGFyYXRpb24pKQorICAgICAgICAgICAgICAgIGFkZF9uZXdsaW5lKGRlY2xhcmF0aW9uX2xpbmVz
KQorICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uX2xpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0
ZV9hbm9ueW1vdXNfZW51bV9jb252ZXJzaW9uX2Zvcl9kZWNsYXJhdGlvbihkb21haW4sIGRlY2xh
cmF0aW9uKSkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgZm9yIG1lbWJlciBp
biBkZWNsYXJhdGlvbi50eXBlX21lbWJlcnM6CiAgICAgICAgICAgICAgICAgICAgIGlmIChpc2lu
c3RhbmNlKG1lbWJlci50eXBlLCBFbnVtVHlwZSkgYW5kIG1lbWJlci50eXBlLmlzX2Fub255bW91
cyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBhZGRfbmV3bGluZShsaW5lcykKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51
bV9jb252ZXJzaW9uX2Zvcl9tZW1iZXIoZG9tYWluLCBkZWNsYXJhdGlvbiwgbWVtYmVyKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGFkZF9uZXdsaW5lKGRlY2xhcmF0aW9uX2xpbmVzKQorICAg
ICAgICAgICAgICAgICAgICAgICAgZGVjbGFyYXRpb25fbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVy
YXRlX2Fub255bW91c19lbnVtX2NvbnZlcnNpb25fZm9yX21lbWJlcihkb21haW4sIGRlY2xhcmF0
aW9uLCBtZW1iZXIpKQorICAgICAgICAgICAgaWYgbGVuKGRlY2xhcmF0aW9uX2xpbmVzKToKKyAg
ICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRp
dGlvbihkZWNsYXJhdGlvbi5jb25kaXRpb24sICdcblxuJy5qb2luKGRlY2xhcmF0aW9uX2xpbmVz
KSkpCiAKICAgICAgICAgIyBBbm9ueW1vdXMgY29tbWFuZCBlbnVtcy4KICAgICAgICAgZm9yIGNv
bW1hbmQgaW4gc2VsZi5jb21tYW5kc19mb3JfZG9tYWluKGRvbWFpbik6CisgICAgICAgICAgICBj
b21tYW5kX2xpbmVzID0gW10KICAgICAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5j
YWxsX3BhcmFtZXRlcnM6CiAgICAgICAgICAgICAgICAgaWYgKGlzaW5zdGFuY2UocGFyYW1ldGVy
LnR5cGUsIEVudW1UeXBlKSBhbmQgcGFyYW1ldGVyLnR5cGUuaXNfYW5vbnltb3VzKToKLSAgICAg
ICAgICAgICAgICAgICAgYWRkX25ld2xpbmUobGluZXMpCi0gICAgICAgICAgICAgICAgICAgIGxp
bmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9jb252ZXJzaW9uX2Zvcl9w
YXJhbWV0ZXIoZG9tYWluLCBjb21tYW5kLmNvbW1hbmRfbmFtZSwgcGFyYW1ldGVyKSkKKyAgICAg
ICAgICAgICAgICAgICAgYWRkX25ld2xpbmUoY29tbWFuZF9saW5lcykKKyAgICAgICAgICAgICAg
ICAgICAgY29tbWFuZF9saW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1f
Y29udmVyc2lvbl9mb3JfcGFyYW1ldGVyKGRvbWFpbiwgY29tbWFuZC5jb21tYW5kX25hbWUsIHBh
cmFtZXRlcikpCiAgICAgICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQucmV0dXJuX3Bh
cmFtZXRlcnM6CiAgICAgICAgICAgICAgICAgaWYgKGlzaW5zdGFuY2UocGFyYW1ldGVyLnR5cGUs
IEVudW1UeXBlKSBhbmQgcGFyYW1ldGVyLnR5cGUuaXNfYW5vbnltb3VzKToKLSAgICAgICAgICAg
ICAgICAgICAgYWRkX25ld2xpbmUobGluZXMpCi0gICAgICAgICAgICAgICAgICAgIGxpbmVzLmFw
cGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9jb252ZXJzaW9uX2Zvcl9wYXJhbWV0
ZXIoZG9tYWluLCBjb21tYW5kLmNvbW1hbmRfbmFtZSwgcGFyYW1ldGVyKSkKKyAgICAgICAgICAg
ICAgICAgICAgYWRkX25ld2xpbmUoY29tbWFuZF9saW5lcykKKyAgICAgICAgICAgICAgICAgICAg
Y29tbWFuZF9saW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fY29udmVy
c2lvbl9mb3JfcGFyYW1ldGVyKGRvbWFpbiwgY29tbWFuZC5jb21tYW5kX25hbWUsIHBhcmFtZXRl
cikpCisgICAgICAgICAgICBpZiBsZW4oY29tbWFuZF9saW5lcyk6CisgICAgICAgICAgICAgICAg
bGluZXMuYXBwZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oY29tbWFuZC5j
b25kaXRpb24sICdcblxuJy5qb2luKGNvbW1hbmRfbGluZXMpKSkKIAogICAgICAgICAjIEFub255
bW91cyBldmVudCBlbnVtcy4KICAgICAgICAgZm9yIGV2ZW50IGluIHNlbGYuZXZlbnRzX2Zvcl9k
b21haW4oZG9tYWluKToKKyAgICAgICAgICAgIGV2ZW50X2xpbmVzID0gW10KICAgICAgICAgICAg
IGZvciBwYXJhbWV0ZXIgaW4gZXZlbnQuZXZlbnRfcGFyYW1ldGVyczoKICAgICAgICAgICAgICAg
ICBpZiAoaXNpbnN0YW5jZShwYXJhbWV0ZXIudHlwZSwgRW51bVR5cGUpIGFuZCBwYXJhbWV0ZXIu
dHlwZS5pc19hbm9ueW1vdXMpOgotICAgICAgICAgICAgICAgICAgICBhZGRfbmV3bGluZShsaW5l
cykKLSAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255
bW91c19lbnVtX2NvbnZlcnNpb25fZm9yX3BhcmFtZXRlcihkb21haW4sIGV2ZW50LmV2ZW50X25h
bWUsIHBhcmFtZXRlcikpCisgICAgICAgICAgICAgICAgICAgIGFkZF9uZXdsaW5lKGV2ZW50X2xp
bmVzKQorICAgICAgICAgICAgICAgICAgICBldmVudF9saW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJh
dGVfYW5vbnltb3VzX2VudW1fY29udmVyc2lvbl9mb3JfcGFyYW1ldGVyKGRvbWFpbiwgZXZlbnQu
ZXZlbnRfbmFtZSwgcGFyYW1ldGVyKSkKKyAgICAgICAgICAgIGlmIGxlbihldmVudF9saW5lcyk6
CisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9j
b25kaXRpb24oZXZlbnQuY29uZGl0aW9uLCAnXG5cbicuam9pbihldmVudF9saW5lcykpKQogCi0g
ICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCi0KLSAgICBkZWYgX2dlbmVyYXRlX2VudW1f
Y29udmVyc2lvbl9mb3JfcGxhdGZvcm1zKHNlbGYpOgotICAgICAgICBvYmpjX2VudW1fbmFtZSA9
ICclc1BsYXRmb3JtJyAlIHNlbGYub2JqY19wcmVmaXgoKQotICAgICAgICBlbnVtX3ZhbHVlcyA9
IFtwbGF0Zm9ybS5uYW1lIGZvciBwbGF0Zm9ybSBpbiBQbGF0Zm9ybXNdCi0gICAgICAgIGxpbmVz
ID0gW10KLSAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2VudW1fb2JqY190b19w
cm90b2NvbF9zdHJpbmcob2JqY19lbnVtX25hbWUsIGVudW1fdmFsdWVzKSkKLSAgICAgICAgbGlu
ZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2VudW1fZnJvbV9wcm90b2NvbF9zdHJpbmcob2JqY19l
bnVtX25hbWUsIGVudW1fdmFsdWVzKSkKLSAgICAgICAgcmV0dXJuICdcblxuJy5qb2luKGxpbmVz
KQorICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihkb21h
aW4uY29uZGl0aW9uLCAnXG5cbicuam9pbihsaW5lcykpCiAKICAgICBkZWYgX2dlbmVyYXRlX2Fu
b255bW91c19lbnVtX2NvbnZlcnNpb25fZm9yX2RlY2xhcmF0aW9uKHNlbGYsIGRvbWFpbiwgZGVj
bGFyYXRpb24pOgogICAgICAgICBvYmpjX2VudW1fbmFtZSA9IHNlbGYub2JqY19lbnVtX25hbWVf
Zm9yX2Fub255bW91c19lbnVtX2RlY2xhcmF0aW9uKGRlY2xhcmF0aW9uKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVf
b2JqY19wcm90b2NvbF90eXBlX2NvbnZlcnNpb25zX2ltcGxlbWVudGF0aW9uLnB5IGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19w
cm90b2NvbF90eXBlX2NvbnZlcnNpb25zX2ltcGxlbWVudGF0aW9uLnB5CmluZGV4IGEzNmQ4MTNl
Y2VlLi44YzEwNzcwOWNiMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBlX2NvbnZlcnNp
b25zX2ltcGxlbWVudGF0aW9uLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfcHJvdG9jb2xfdHlwZV9jb252ZXJzaW9u
c19pbXBsZW1lbnRhdGlvbi5weQpAQCAtNDMsNyArNDMsNyBAQCBsb2cgPSBsb2dnaW5nLmdldExv
Z2dlcignZ2xvYmFsJykKIAogCiBkZWYgYWRkX25ld2xpbmUobGluZXMpOgotICAgIGlmIGxpbmVz
IGFuZCBsaW5lc1stMV0gPT0gJyc6CisgICAgaWYgbm90IGxlbihsaW5lcykgb3IgbGluZXNbLTFd
ID09ICcnOgogICAgICAgICByZXR1cm4KICAgICBsaW5lcy5hcHBlbmQoJycpCiAKQEAgLTgzLDE1
ICs4MywxNiBAQCBjbGFzcyBPYmpDUHJvdG9jb2xUeXBlQ29udmVyc2lvbnNJbXBsZW1lbnRhdGlv
bkdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKICAgICBkZWYgX2dlbmVyYXRlX3R5cGVfZmFjdG9y
eV9jYXRlZ29yeV9pbnRlcmZhY2Uoc2VsZiwgZG9tYWlucyk6CiAgICAgICAgIGxpbmVzID0gW10K
ICAgICAgICAgZm9yIGRvbWFpbiBpbiBkb21haW5zOgotICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCdAaW50ZXJmYWNlICVzVHlwZUNvbnZlcnNpb25zICglc0RvbWFpbiknICUgKHNlbGYucHJvdG9j
b2xfbmFtZSgpLCBkb21haW4uZG9tYWluX25hbWUpKQotICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCcnKQorICAgICAgICAgICAgZG9tYWluX2xpbmVzID0gW10KKyAgICAgICAgICAgIGRvbWFpbl9s
aW5lcy5hcHBlbmQoJ0BpbnRlcmZhY2UgJXNUeXBlQ29udmVyc2lvbnMgKCVzRG9tYWluKScgJSAo
c2VsZi5wcm90b2NvbF9uYW1lKCksIGRvbWFpbi5kb21haW5fbmFtZSkpCisgICAgICAgICAgICBh
ZGRfbmV3bGluZShkb21haW5fbGluZXMpCiAKICAgICAgICAgICAgIGZvciBkZWNsYXJhdGlvbiBp
biBzZWxmLnR5cGVfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4oZG9tYWluKToKLSAgICAgICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfdHlwZV9mYWN0b3J5X21ldGhvZF9kZWNs
YXJhdGlvbihkb21haW4sIGRlY2xhcmF0aW9uKSkKLQotICAgICAgICAgICAgYWRkX25ld2xpbmUo
bGluZXMpCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0BlbmQnKQorICAgICAgICAgICAgICAg
IGRvbWFpbl9saW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfdHlwZV9mYWN0b3J5X21ldGhvZF9k
ZWNsYXJhdGlvbihkb21haW4sIGRlY2xhcmF0aW9uKSkKIAorICAgICAgICAgICAgYWRkX25ld2xp
bmUoZG9tYWluX2xpbmVzKQorICAgICAgICAgICAgZG9tYWluX2xpbmVzLmFwcGVuZCgnQGVuZCcp
CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRp
dGlvbihkb21haW4uY29uZGl0aW9uLCAnXG4nLmpvaW4oZG9tYWluX2xpbmVzKSkpCiAgICAgICAg
IHJldHVybiAnXG4nLmpvaW4obGluZXMpCiAKICAgICBkZWYgX2dlbmVyYXRlX3R5cGVfZmFjdG9y
eV9tZXRob2RfZGVjbGFyYXRpb24oc2VsZiwgZG9tYWluLCBkZWNsYXJhdGlvbik6CkBAIC0xMDAs
MjAgKzEwMSwyMyBAQCBjbGFzcyBPYmpDUHJvdG9jb2xUeXBlQ29udmVyc2lvbnNJbXBsZW1lbnRh
dGlvbkdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKICAgICAgICAgICAgIHJlc29sdmVkX3R5cGUg
PSByZXNvbHZlZF90eXBlLmFsaWFzZWRfdHlwZQogICAgICAgICBpZiBpc2luc3RhbmNlKHJlc29s
dmVkX3R5cGUsIChPYmplY3RUeXBlLCBBcnJheVR5cGUsIFByaW1pdGl2ZVR5cGUpKToKICAgICAg
ICAgICAgIG9iamNfdHlwZSA9IHNlbGYub2JqY19jbGFzc19mb3JfdHlwZShyZXNvbHZlZF90eXBl
KQotICAgICAgICAgICAgcmV0dXJuICcrICh2b2lkKV9wYXJzZSVzOiglcyAqKilvdXRWYWx1ZSBm
cm9tUGF5bG9hZDooaWQpcGF5bG9hZDsnICUgKGRlY2xhcmF0aW9uLnR5cGUucmF3X25hbWUoKSwg
b2JqY190eXBlKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9j
b25kaXRpb24oZGVjbGFyYXRpb24uY29uZGl0aW9uLCAnKyAodm9pZClfcGFyc2UlczooJXMgKiop
b3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7JyAlIChkZWNsYXJhdGlvbi50eXBlLnJh
d19uYW1lKCksIG9iamNfdHlwZSkpCiAgICAgICAgIGlmIGlzaW5zdGFuY2UocmVzb2x2ZWRfdHlw
ZSwgRW51bVR5cGUpOgotICAgICAgICAgICAgcmV0dXJuICcrICh2b2lkKV9wYXJzZSVzOihOU051
bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsnICUgZGVjbGFyYXRpb24u
dHlwZS5yYXdfbmFtZSgpCisgICAgICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRf
Zm9yX2NvbmRpdGlvbihkZWNsYXJhdGlvbi5jb25kaXRpb24sICcrICh2b2lkKV9wYXJzZSVzOihO
U051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsnICUgZGVjbGFyYXRp
b24udHlwZS5yYXdfbmFtZSgpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV90eXBlX2ZhY3RvcnlfY2F0
ZWdvcnlfaW1wbGVtZW50YXRpb24oc2VsZiwgZG9tYWlucyk6CiAgICAgICAgIGxpbmVzID0gW10K
ICAgICAgICAgZm9yIGRvbWFpbiBpbiBkb21haW5zOgotICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCdAaW1wbGVtZW50YXRpb24gJXNUeXBlQ29udmVyc2lvbnMgKCVzRG9tYWluKScgJSAoc2VsZi5w
cm90b2NvbF9uYW1lKCksIGRvbWFpbi5kb21haW5fbmFtZSkpCi0gICAgICAgICAgICBsaW5lcy5h
cHBlbmQoJycpCisgICAgICAgICAgICBkb21haW5fbGluZXMgPSBbXQorICAgICAgICAgICAgZG9t
YWluX2xpbmVzLmFwcGVuZCgnQGltcGxlbWVudGF0aW9uICVzVHlwZUNvbnZlcnNpb25zICglc0Rv
bWFpbiknICUgKHNlbGYucHJvdG9jb2xfbmFtZSgpLCBkb21haW4uZG9tYWluX25hbWUpKQorICAg
ICAgICAgICAgYWRkX25ld2xpbmUoZG9tYWluX2xpbmVzKQogCiAgICAgICAgICAgICBmb3IgZGVj
bGFyYXRpb24gaW4gc2VsZi50eXBlX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluKGRvbWFpbik6Ci0g
ICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX3R5cGVfZmFjdG9yeV9t
ZXRob2RfaW1wbGVtZW50YXRpb24oZG9tYWluLCBkZWNsYXJhdGlvbikpCi0gICAgICAgICAgICAg
ICAgYWRkX25ld2xpbmUobGluZXMpCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0BlbmQnKQor
ICAgICAgICAgICAgICAgIGRvbWFpbl9saW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfdHlwZV9m
YWN0b3J5X21ldGhvZF9pbXBsZW1lbnRhdGlvbihkb21haW4sIGRlY2xhcmF0aW9uKSkKKyAgICAg
ICAgICAgICAgICBhZGRfbmV3bGluZShkb21haW5fbGluZXMpCisKKyAgICAgICAgICAgIGRvbWFp
bl9saW5lcy5hcHBlbmQoJ0BlbmQnKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYud3Jh
cF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZG9tYWluLmNvbmRpdGlvbiwgJ1xuJy5qb2luKGRv
bWFpbl9saW5lcykpKQogICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQogCiAgICAgZGVm
IF9nZW5lcmF0ZV90eXBlX2ZhY3RvcnlfbWV0aG9kX2ltcGxlbWVudGF0aW9uKHNlbGYsIGRvbWFp
biwgZGVjbGFyYXRpb24pOgpAQCAtMTQxLDQgKzE0NSw0IEBAIGNsYXNzIE9iakNQcm90b2NvbFR5
cGVDb252ZXJzaW9uc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogICAg
ICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShw
YXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7JykKICAgICAgICAgICAgIGxpbmVzLmFwcGVu
ZCgnICAgICpvdXRWYWx1ZSA9IFtbJXMgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsn
ICUgKG9iamNfY2xhc3MpKQogICAgICAgICBsaW5lcy5hcHBlbmQoJ30nKQotICAgICAgICByZXR1
cm4gJ1xuJy5qb2luKGxpbmVzKQorICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRf
Zm9yX2NvbmRpdGlvbihkZWNsYXJhdGlvbi5jb25kaXRpb24sICdcbicuam9pbihsaW5lcykpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5IGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19w
cm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weQppbmRleCBjODcwODgxYWJkOC4uYTBlN2I5
MDA0NDUgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2Vu
ZXJhdGVfb2JqY19wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weQpAQCAtNDQsNyArNDQs
NyBAQCBsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKIAogCiBkZWYgYWRkX25ld2xp
bmUobGluZXMpOgotICAgIGlmIGxpbmVzIGFuZCBsaW5lc1stMV0gPT0gJyc6CisgICAgaWYgbm90
IGxlbihsaW5lcykgb3IgbGluZXNbLTFdID09ICcnOgogICAgICAgICByZXR1cm4KICAgICBsaW5l
cy5hcHBlbmQoJycpCiAKQEAgLTkxLDcgKzkxLDcgQEAgY2xhc3MgT2JqQ1Byb3RvY29sVHlwZXNJ
bXBsZW1lbnRhdGlvbkdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKICAgICAgICAgICAgIGlmIChp
c2luc3RhbmNlKGRlY2xhcmF0aW9uLnR5cGUsIE9iamVjdFR5cGUpKToKICAgICAgICAgICAgICAg
ICBhZGRfbmV3bGluZShsaW5lcykKICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5n
ZW5lcmF0ZV90eXBlX2ltcGxlbWVudGF0aW9uKGRvbWFpbiwgZGVjbGFyYXRpb24pKQotICAgICAg
ICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhf
Z3VhcmRfZm9yX2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9uLCAnXG4nLmpvaW4obGluZXMpKQog
CiAgICAgZGVmIGdlbmVyYXRlX3R5cGVfaW1wbGVtZW50YXRpb24oc2VsZiwgZG9tYWluLCBkZWNs
YXJhdGlvbik6CiAgICAgICAgIGxpbmVzID0gW10KQEAgLTExMiw3ICsxMTIsNyBAQCBjbGFzcyBP
YmpDUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgog
ICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2dldHRlcl9mb3JfbWVtYmVy
KGRvbWFpbiwgZGVjbGFyYXRpb24sIG1lbWJlcikpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykK
ICAgICAgICAgbGluZXMuYXBwZW5kKCdAZW5kJykKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihs
aW5lcykKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24o
ZGVjbGFyYXRpb24uY29uZGl0aW9uLCAnXG4nLmpvaW4obGluZXMpKQogCiAgICAgZGVmIF9nZW5l
cmF0ZV9pbml0X21ldGhvZF9mb3JfcHJvdG9jb2xfb2JqZWN0KHNlbGYsIGRvbWFpbiwgZGVjbGFy
YXRpb24pOgogICAgICAgICBsaW5lcyA9IFtdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3IucHkgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3IucHkKaW5kZXgg
OGMyZmJiOGJjNTIuLjk0ZDE4ZDlkNjYxIDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3IucHkKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yLnB5CkBAIC0z
MSwxMCArMzEsMTAgQEAgZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCiAKIHRyeToKICAgICBm
cm9tIC5nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgVGVt
cGxhdGVzCi0gICAgZnJvbSAubW9kZWxzIGltcG9ydCBQcmltaXRpdmVUeXBlLCBPYmplY3RUeXBl
LCBBcnJheVR5cGUsIEVudW1UeXBlLCBBbGlhc2VkVHlwZSwgRnJhbWV3b3JrcywgUGxhdGZvcm1z
CisgICAgZnJvbSAubW9kZWxzIGltcG9ydCBQcmltaXRpdmVUeXBlLCBPYmplY3RUeXBlLCBBcnJh
eVR5cGUsIEVudW1UeXBlLCBBbGlhc2VkVHlwZSwgRnJhbWV3b3JrcwogZXhjZXB0IFZhbHVlRXJy
b3I6CiAgICAgZnJvbSBnZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBHZW5lcmF0b3JUZW1wbGF0
ZXMgYXMgVGVtcGxhdGVzCi0gICAgZnJvbSBtb2RlbHMgaW1wb3J0IFByaW1pdGl2ZVR5cGUsIE9i
amVjdFR5cGUsIEFycmF5VHlwZSwgRW51bVR5cGUsIEFsaWFzZWRUeXBlLCBGcmFtZXdvcmtzLCBQ
bGF0Zm9ybXMKKyAgICBmcm9tIG1vZGVscyBpbXBvcnQgUHJpbWl0aXZlVHlwZSwgT2JqZWN0VHlw
ZSwgQXJyYXlUeXBlLCBFbnVtVHlwZSwgQWxpYXNlZFR5cGUsIEZyYW1ld29ya3MKIAogbG9nID0g
bG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCiAKQEAgLTk0LDM1ICs5NCwyOCBAQCBfVFlQRVNf
V0lUSF9PUEVOX0ZJRUxEUyA9IHsKIH0KIAogY2xhc3MgR2VuZXJhdG9yOgotICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCBtb2RlbCwgcGxhdGZvcm0sIGlucHV0X2ZpbGVwYXRoKToKKyAgICBkZWYgX19p
bml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKToKICAgICAgICAgc2VsZi5fbW9kZWwg
PSBtb2RlbAotICAgICAgICBzZWxmLl9wbGF0Zm9ybSA9IHBsYXRmb3JtCiAgICAgICAgIHNlbGYu
X2lucHV0X2ZpbGVwYXRoID0gaW5wdXRfZmlsZXBhdGgKICAgICAgICAgc2VsZi5fc2V0dGluZ3Mg
PSB7fQogCiAgICAgZGVmIG1vZGVsKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5fbW9kZWwK
IAotICAgIGRlZiBwbGF0Zm9ybShzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX3BsYXRmb3Jt
Ci0KICAgICBkZWYgc2V0X2dlbmVyYXRvcl9zZXR0aW5nKHNlbGYsIGtleSwgdmFsdWUpOgogICAg
ICAgICBzZWxmLl9zZXR0aW5nc1trZXldID0gdmFsdWUKIAotICAgIGRlZiBjYW5fZ2VuZXJhdGVf
cGxhdGZvcm0oc2VsZiwgbW9kZWxfcGxhdGZvcm0pOgotICAgICAgICByZXR1cm4gbW9kZWxfcGxh
dGZvcm0gaXMgUGxhdGZvcm1zLkdlbmVyaWMgb3Igc2VsZi5fcGxhdGZvcm0gaXMgUGxhdGZvcm1z
LkFsbCBvciBtb2RlbF9wbGF0Zm9ybSBpcyBzZWxmLl9wbGF0Zm9ybQotCiAgICAgZGVmIHZlcnNp
b25fZm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgogICAgICAgICByZXR1cm4gZG9tYWluLnZlcnNp
b24oKQogCiAgICAgZGVmIHR5cGVfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4oc2VsZiwgZG9tYWlu
KToKLSAgICAgICAgcmV0dXJuIFt0eXBlX2RlY2xhcmF0aW9uIGZvciB0eXBlX2RlY2xhcmF0aW9u
IGluIGRvbWFpbi5hbGxfdHlwZV9kZWNsYXJhdGlvbnMoKSBpZiBzZWxmLmNhbl9nZW5lcmF0ZV9w
bGF0Zm9ybSh0eXBlX2RlY2xhcmF0aW9uLnBsYXRmb3JtKV0KKyAgICAgICAgcmV0dXJuIGRvbWFp
bi5hbGxfdHlwZV9kZWNsYXJhdGlvbnMoKQogCiAgICAgZGVmIGNvbW1hbmRzX2Zvcl9kb21haW4o
c2VsZiwgZG9tYWluKToKLSAgICAgICAgcmV0dXJuIFtjb21tYW5kIGZvciBjb21tYW5kIGluIGRv
bWFpbi5hbGxfY29tbWFuZHMoKSBpZiBzZWxmLmNhbl9nZW5lcmF0ZV9wbGF0Zm9ybShjb21tYW5k
LnBsYXRmb3JtKV0KKyAgICAgICAgcmV0dXJuIGRvbWFpbi5hbGxfY29tbWFuZHMoKQogCiAgICAg
ZGVmIGV2ZW50c19mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6Ci0gICAgICAgIHJldHVybiBbZXZl
bnQgZm9yIGV2ZW50IGluIGRvbWFpbi5hbGxfZXZlbnRzKCkgaWYgc2VsZi5jYW5fZ2VuZXJhdGVf
cGxhdGZvcm0oZXZlbnQucGxhdGZvcm0pXQorICAgICAgICByZXR1cm4gZG9tYWluLmFsbF9ldmVu
dHMoKQogCiAgICAgIyBUaGUgZ29vZnkgbmFtZSBpcyB0byBkaXNhbWJpZ3VhdGUgZ2VuZXJhdG9y
IHNldHRpbmdzIGZyb20gZnJhbWV3b3JrIHNldHRpbmdzLgogICAgIGRlZiBnZXRfZ2VuZXJhdG9y
X3NldHRpbmcoc2VsZiwga2V5LCBkZWZhdWx0PU5vbmUpOgpAQCAtMjY3LDIyICsyNjAsMTUgQEAg
Y2xhc3MgR2VuZXJhdG9yOgogICAgICAgICBzZWxmLl9hc3NpZ25lZF9lbnVtX3ZhbHVlcy5hcHBl
bmQoZW51bV92YWx1ZSkKIAogICAgICMgTWlzY2VsbGFuZW91cyB0ZXh0IG1hbmlwdWxhdGlvbiBy
b3V0aW5lcy4KLSAgICBkZWYgd3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oc2VsZiwgZG9tYWlu
LCB0ZXh0KToKLSAgICAgICAgaWYgc2VsZi5tb2RlbCgpLmZyYW1ld29yayBpcyBGcmFtZXdvcmtz
LldlYkluc3BlY3RvcjoKLSAgICAgICAgICAgIHJldHVybiB0ZXh0Ci0gICAgICAgIGd1YXJkID0g
ZG9tYWluLmZlYXR1cmVfZ3VhcmQKLSAgICAgICAgaWYgZ3VhcmQ6Ci0gICAgICAgICAgICByZXR1
cm4gR2VuZXJhdG9yLndyYXBfd2l0aF9ndWFyZChndWFyZCwgdGV4dCkKKyAgICBkZWYgd3JhcF93
aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oc2VsZiwgY29uZGl0aW9uLCB0ZXh0KToKKyAgICAgICAg
aWYgY29uZGl0aW9uOgorICAgICAgICAgICAgcmV0dXJuICdcbicuam9pbihbCisgICAgICAgICAg
ICAgICAgJyNpZiAlcycgJSBjb25kaXRpb24sCisgICAgICAgICAgICAgICAgdGV4dCwKKyAgICAg
ICAgICAgICAgICAnI2VuZGlmIC8vICVzJyAlIGNvbmRpdGlvbiwKKyAgICAgICAgICAgIF0pCiAg
ICAgICAgIHJldHVybiB0ZXh0CiAKLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIHdyYXBfd2l0
aF9ndWFyZChndWFyZCwgdGV4dCk6Ci0gICAgICAgIHJldHVybiAnXG4nLmpvaW4oWwotICAgICAg
ICAgICAgJyNpZiAlcycgJSBndWFyZCwKLSAgICAgICAgICAgIHRleHQsCi0gICAgICAgICAgICAn
I2VuZGlmIC8vICVzJyAlIGd1YXJkLAotICAgICAgICBdKQotCiAgICAgQHN0YXRpY21ldGhvZAog
ICAgIGRlZiBzdHlsaXplZF9uYW1lX2Zvcl9lbnVtX3ZhbHVlKGVudW1fdmFsdWUpOgogICAgICAg
ICByZWdleCA9ICcoJXMpJyAlICJ8Ii5qb2luKF9BTFdBWVNfU1BFQ0lBTENBU0VEX0VOVU1fVkFM
VUVfU1VCU1RSSU5HUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL21vZGVscy5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL21vZGVscy5weQppbmRleCA2ZDk3YTA5M2MzNC4uMWRmMmJk
ZjY2NWEgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL21vZGVscy5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9tb2RlbHMucHkKQEAgLTEzNiw0MSArMTM2LDYgQEAgY2xhc3MgRnJh
bWV3b3JrczoKICAgICBUZXN0ID0gRnJhbWV3b3JrKCJUZXN0IikKIAogCi1jbGFzcyBQbGF0Zm9y
bToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSk6Ci0gICAgICAgIHNlbGYubmFtZSA9IG5h
bWUKLQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgZnJvbVN0cmluZyhwbGF0Zm9ybVN0cmlu
Zyk6Ci0gICAgICAgIHBsYXRmb3JtU3RyaW5nID0gcGxhdGZvcm1TdHJpbmcubG93ZXIoKQotICAg
ICAgICBpZiBwbGF0Zm9ybVN0cmluZyA9PSAiaW9zIjoKLSAgICAgICAgICAgIHJldHVybiBQbGF0
Zm9ybXMuaU9TCi0KLSAgICAgICAgaWYgcGxhdGZvcm1TdHJpbmcgPT0gIm1hY29zIjoKLSAgICAg
ICAgICAgIHJldHVybiBQbGF0Zm9ybXMubWFjT1MKLQotICAgICAgICBpZiBwbGF0Zm9ybVN0cmlu
ZyA9PSAiYWxsIjoKLSAgICAgICAgICAgIHJldHVybiBQbGF0Zm9ybXMuQWxsCi0KLSAgICAgICAg
aWYgcGxhdGZvcm1TdHJpbmcgPT0gImdlbmVyaWMiIG9yIG5vdCBwbGF0Zm9ybVN0cmluZzoKLSAg
ICAgICAgICAgIHJldHVybiBQbGF0Zm9ybXMuR2VuZXJpYwotCi0gICAgICAgIHJhaXNlIFBhcnNl
RXhjZXB0aW9uKCJVbmtub3duIHBsYXRmb3JtOiAlcyIgJSBwbGF0Zm9ybVN0cmluZykKLQotCi1j
bGFzcyBQbGF0Zm9ybXM6Ci0gICAgQWxsID0gUGxhdGZvcm0oImFsbCIpCi0gICAgR2VuZXJpYyA9
IFBsYXRmb3JtKCJnZW5lcmljIikKLSAgICBpT1MgPSBQbGF0Zm9ybSgiaW9zIikKLSAgICBtYWNP
UyA9IFBsYXRmb3JtKCJtYWNvcyIpCi0KLSAgICAjIEFsbG93IGl0ZXJhdGlvbiBvdmVyIGFsbCBw
bGF0Zm9ybXMuIFNlZSA8aHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy81NDM0NDAw
Lz4uCi0gICAgY2xhc3MgX19tZXRhY2xhc3NfXyh0eXBlKToKLSAgICAgICAgZGVmIF9faXRlcl9f
KHNlbGYpOgotICAgICAgICAgICAgZm9yIGF0dHIgaW4gZGlyKFBsYXRmb3Jtcyk6Ci0gICAgICAg
ICAgICAgICAgaWYgbm90IGF0dHIuc3RhcnRzd2l0aCgiX18iKToKLSAgICAgICAgICAgICAgICAg
ICAgeWllbGQgZ2V0YXR0cihQbGF0Zm9ybXMsIGF0dHIpCi0KIGNsYXNzIFR5cGVSZWZlcmVuY2U6
CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHR5cGVfa2luZCwgcmVmZXJlbmNlZF90eXBlX25hbWUs
IGVudW1fdmFsdWVzLCBhcnJheV9pdGVtcyk6CiAgICAgICAgIHNlbGYudHlwZV9raW5kID0gdHlw
ZV9raW5kCkBAIC00MzksNyArNDA0LDcgQEAgY2xhc3MgUHJvdG9jb2w6CiAgICAgICAgICAgICAg
ICAgcmFpc2UgUGFyc2VFeGNlcHRpb24oIk1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjog
ZXZlbnRzIGlzIG5vdCBhbiBhcnJheSIpCiAgICAgICAgICAgICBldmVudHMuZXh0ZW5kKFtzZWxm
LnBhcnNlX2V2ZW50KGV2ZW50LCBkZWJ1Z2dhYmxlX3R5cGVzKSBmb3IgZXZlbnQgaW4ganNvblsn
ZXZlbnRzJ11dKQogCi0gICAgICAgIHNlbGYuZG9tYWlucy5hcHBlbmQoRG9tYWluKGpzb25bJ2Rv
bWFpbiddLCBqc29uLmdldCgnZGVzY3JpcHRpb24nLCAnJyksIGpzb24uZ2V0KCdmZWF0dXJlR3Vh
cmQnKSwgZGVidWdnYWJsZV90eXBlcywgdGFyZ2V0X3R5cGVzLCBpc1N1cHBsZW1lbnRhbCwgdmVy
c2lvbiwgdHlwZXMsIGNvbW1hbmRzLCBldmVudHMpKQorICAgICAgICBzZWxmLmRvbWFpbnMuYXBw
ZW5kKERvbWFpbihqc29uWydkb21haW4nXSwganNvbi5nZXQoJ2Rlc2NyaXB0aW9uJywgJycpLCBq
c29uLmdldCgnY29uZGl0aW9uJyksIGRlYnVnZ2FibGVfdHlwZXMsIHRhcmdldF90eXBlcywgaXNT
dXBwbGVtZW50YWwsIHZlcnNpb24sIHR5cGVzLCBjb21tYW5kcywgZXZlbnRzKSkKIAogICAgIGRl
ZiBwYXJzZV90eXBlX2RlY2xhcmF0aW9uKHNlbGYsIGpzb24pOgogICAgICAgICBjaGVja19mb3Jf
cmVxdWlyZWRfcHJvcGVydGllcyhbJ2lkJywgJ3R5cGUnXSwganNvbiwgInR5cGUiKQpAQCAtNDU3
LDggKzQyMiw3IEBAIGNsYXNzIFByb3RvY29sOgogICAgICAgICAgICAgcmFpc2UgUGFyc2VFeGNl
cHRpb24oIk1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjogdHlwZSBkZWNsYXJhdGlvbiBm
b3IgJXMgaGFzIGR1cGxpY2F0ZSBtZW1iZXIgbmFtZXMiICUganNvblsnaWQnXSkKIAogICAgICAg
ICB0eXBlX3JlZiA9IFR5cGVSZWZlcmVuY2UoanNvblsndHlwZSddLCBqc29uLmdldCgnJHJlZicp
LCBqc29uLmdldCgnZW51bScpLCBqc29uLmdldCgnaXRlbXMnKSkKLSAgICAgICAgcGxhdGZvcm0g
PSBQbGF0Zm9ybS5mcm9tU3RyaW5nKGpzb24uZ2V0KCdwbGF0Zm9ybScsICdnZW5lcmljJykpCi0g
ICAgICAgIHJldHVybiBUeXBlRGVjbGFyYXRpb24oanNvblsnaWQnXSwgdHlwZV9yZWYsIGpzb24u
Z2V0KCJkZXNjcmlwdGlvbiIsICIiKSwgcGxhdGZvcm0sIHR5cGVfbWVtYmVycykKKyAgICAgICAg
cmV0dXJuIFR5cGVEZWNsYXJhdGlvbihqc29uWydpZCddLCB0eXBlX3JlZiwganNvbi5nZXQoImRl
c2NyaXB0aW9uIiwgIiIpLCBqc29uLmdldCgnY29uZGl0aW9uJyksIHR5cGVfbWVtYmVycykKIAog
ICAgIGRlZiBwYXJzZV90eXBlX21lbWJlcihzZWxmLCBqc29uKToKICAgICAgICAgY2hlY2tfZm9y
X3JlcXVpcmVkX3Byb3BlcnRpZXMoWyduYW1lJ10sIGpzb24sICJ0eXBlIG1lbWJlciIpCkBAIC01
MDksOCArNDczLDcgQEAgY2xhc3MgUHJvdG9jb2w6CiAgICAgICAgICAgICBpZiBsZW4oZHVwbGlj
YXRlX25hbWVzKSA+IDA6CiAgICAgICAgICAgICAgICAgcmFpc2UgUGFyc2VFeGNlcHRpb24oIk1h
bGZvcm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjogcmV0dXJuIHBhcmFtZXRlciBsaXN0IGZvciBj
b21tYW5kICVzIGhhcyBkdXBsaWNhdGUgcGFyYW1ldGVyIG5hbWVzIiAlIGpzb25bJ25hbWUnXSkK
IAotICAgICAgICBwbGF0Zm9ybSA9IFBsYXRmb3JtLmZyb21TdHJpbmcoanNvbi5nZXQoJ3BsYXRm
b3JtJywgJ2dlbmVyaWMnKSkKLSAgICAgICAgcmV0dXJuIENvbW1hbmQoanNvblsnbmFtZSddLCB0
YXJnZXRfdHlwZXMsIGNhbGxfcGFyYW1ldGVycywgcmV0dXJuX3BhcmFtZXRlcnMsIGpzb24uZ2V0
KCdkZXNjcmlwdGlvbicsICIiKSwgcGxhdGZvcm0sIGpzb24uZ2V0KCdhc3luYycsIEZhbHNlKSkK
KyAgICAgICAgcmV0dXJuIENvbW1hbmQoanNvblsnbmFtZSddLCB0YXJnZXRfdHlwZXMsIGNhbGxf
cGFyYW1ldGVycywgcmV0dXJuX3BhcmFtZXRlcnMsIGpzb24uZ2V0KCdkZXNjcmlwdGlvbicsICIi
KSwganNvbi5nZXQoJ2NvbmRpdGlvbicpLCBqc29uLmdldCgnYXN5bmMnLCBGYWxzZSkpCiAKICAg
ICBkZWYgcGFyc2VfZXZlbnQoc2VsZiwganNvbiwgZGVidWdnYWJsZV90eXBlcyk6CiAgICAgICAg
IGNoZWNrX2Zvcl9yZXF1aXJlZF9wcm9wZXJ0aWVzKFsnbmFtZSddLCBqc29uLCAiZXZlbnQiKQpA
QCAtNTQ0LDggKzUwNyw3IEBAIGNsYXNzIFByb3RvY29sOgogICAgICAgICAgICAgaWYgbGVuKGR1
cGxpY2F0ZV9uYW1lcykgPiAwOgogICAgICAgICAgICAgICAgIHJhaXNlIFBhcnNlRXhjZXB0aW9u
KCJNYWxmb3JtZWQgZG9tYWluIHNwZWNpZmljYXRpb246IHBhcmFtZXRlciBsaXN0IGZvciBldmVu
dCAlcyBoYXMgZHVwbGljYXRlIHBhcmFtZXRlciBuYW1lcyIgJSBqc29uWyduYW1lJ10pCiAKLSAg
ICAgICAgcGxhdGZvcm0gPSBQbGF0Zm9ybS5mcm9tU3RyaW5nKGpzb24uZ2V0KCdwbGF0Zm9ybScs
ICdnZW5lcmljJykpCi0gICAgICAgIHJldHVybiBFdmVudChqc29uWyduYW1lJ10sIHRhcmdldF90
eXBlcywgZXZlbnRfcGFyYW1ldGVycywganNvbi5nZXQoJ2Rlc2NyaXB0aW9uJywgIiIpLCBwbGF0
Zm9ybSkKKyAgICAgICAgcmV0dXJuIEV2ZW50KGpzb25bJ25hbWUnXSwgdGFyZ2V0X3R5cGVzLCBl
dmVudF9wYXJhbWV0ZXJzLCBqc29uLmdldCgnZGVzY3JpcHRpb24nLCAiIiksIGpzb24uZ2V0KCdj
b25kaXRpb24nKSkKIAogICAgIGRlZiBwYXJzZV9jYWxsX29yX3JldHVybl9wYXJhbWV0ZXIoc2Vs
ZiwganNvbik6CiAgICAgICAgIGNoZWNrX2Zvcl9yZXF1aXJlZF9wcm9wZXJ0aWVzKFsnbmFtZSdd
LCBqc29uLCAicGFyYW1ldGVyIikKQEAgLTY0MywxMCArNjA1LDEwIEBAIGNsYXNzIFByb3RvY29s
OgogCiAKIGNsYXNzIERvbWFpbjoKLSAgICBkZWYgX19pbml0X18oc2VsZiwgZG9tYWluX25hbWUs
IGRlc2NyaXB0aW9uLCBmZWF0dXJlX2d1YXJkLCBkZWJ1Z2dhYmxlX3R5cGVzLCB0YXJnZXRfdHlw
ZXMsIGlzU3VwcGxlbWVudGFsLCB2ZXJzaW9uLCB0eXBlX2RlY2xhcmF0aW9ucywgY29tbWFuZHMs
IGV2ZW50cyk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRvbWFpbl9uYW1lLCBkZXNjcmlwdGlv
biwgY29uZGl0aW9uLCBkZWJ1Z2dhYmxlX3R5cGVzLCB0YXJnZXRfdHlwZXMsIGlzU3VwcGxlbWVu
dGFsLCB2ZXJzaW9uLCB0eXBlX2RlY2xhcmF0aW9ucywgY29tbWFuZHMsIGV2ZW50cyk6CiAgICAg
ICAgIHNlbGYuZG9tYWluX25hbWUgPSBkb21haW5fbmFtZQogICAgICAgICBzZWxmLmRlc2NyaXB0
aW9uID0gZGVzY3JpcHRpb24KLSAgICAgICAgc2VsZi5mZWF0dXJlX2d1YXJkID0gZmVhdHVyZV9n
dWFyZAorICAgICAgICBzZWxmLmNvbmRpdGlvbiA9IGNvbmRpdGlvbgogICAgICAgICBzZWxmLmRl
YnVnZ2FibGVfdHlwZXMgPSBkZWJ1Z2dhYmxlX3R5cGVzCiAgICAgICAgIHNlbGYudGFyZ2V0X3R5
cGVzID0gdGFyZ2V0X3R5cGVzCiAgICAgICAgIHNlbGYuaXNfc3VwcGxlbWVudGFsID0gaXNTdXBw
bGVtZW50YWwKQEAgLTY4NiwxMSArNjQ4LDExIEBAIGNsYXNzIERvbWFpbnM6CiAKIAogY2xhc3Mg
VHlwZURlY2xhcmF0aW9uOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0eXBlX25hbWUsIHR5cGVf
cmVmLCBkZXNjcmlwdGlvbiwgcGxhdGZvcm0sIHR5cGVfbWVtYmVycyk6CisgICAgZGVmIF9faW5p
dF9fKHNlbGYsIHR5cGVfbmFtZSwgdHlwZV9yZWYsIGRlc2NyaXB0aW9uLCBjb25kaXRpb24sIHR5
cGVfbWVtYmVycyk6CiAgICAgICAgIHNlbGYudHlwZV9uYW1lID0gdHlwZV9uYW1lCiAgICAgICAg
IHNlbGYudHlwZV9yZWYgPSB0eXBlX3JlZgogICAgICAgICBzZWxmLmRlc2NyaXB0aW9uID0gZGVz
Y3JpcHRpb24KLSAgICAgICAgc2VsZi5wbGF0Zm9ybSA9IHBsYXRmb3JtCisgICAgICAgIHNlbGYu
Y29uZGl0aW9uID0gY29uZGl0aW9uCiAgICAgICAgIHNlbGYudHlwZV9tZW1iZXJzID0gdHlwZV9t
ZW1iZXJzCiAKICAgICAgICAgaWYgc2VsZi50eXBlX25hbWUgIT0gdWNmaXJzdChzZWxmLnR5cGVf
bmFtZSk6CkBAIC03MzQsMTMgKzY5NiwxMyBAQCBjbGFzcyBQYXJhbWV0ZXI6CiAKIAogY2xhc3Mg
Q29tbWFuZDoKLSAgICBkZWYgX19pbml0X18oc2VsZiwgY29tbWFuZF9uYW1lLCB0YXJnZXRfdHlw
ZXMsIGNhbGxfcGFyYW1ldGVycywgcmV0dXJuX3BhcmFtZXRlcnMsIGRlc2NyaXB0aW9uLCBwbGF0
Zm9ybSwgaXNfYXN5bmMpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb21tYW5kX25hbWUsIHRh
cmdldF90eXBlcywgY2FsbF9wYXJhbWV0ZXJzLCByZXR1cm5fcGFyYW1ldGVycywgZGVzY3JpcHRp
b24sIGNvbmRpdGlvbiwgaXNfYXN5bmMpOgogICAgICAgICBzZWxmLmNvbW1hbmRfbmFtZSA9IGNv
bW1hbmRfbmFtZQogICAgICAgICBzZWxmLnRhcmdldF90eXBlcyA9IHRhcmdldF90eXBlcwogICAg
ICAgICBzZWxmLmNhbGxfcGFyYW1ldGVycyA9IGNhbGxfcGFyYW1ldGVycwogICAgICAgICBzZWxm
LnJldHVybl9wYXJhbWV0ZXJzID0gcmV0dXJuX3BhcmFtZXRlcnMKICAgICAgICAgc2VsZi5kZXNj
cmlwdGlvbiA9IGRlc2NyaXB0aW9uCi0gICAgICAgIHNlbGYucGxhdGZvcm0gPSBwbGF0Zm9ybQor
ICAgICAgICBzZWxmLmNvbmRpdGlvbiA9IGNvbmRpdGlvbgogICAgICAgICBzZWxmLmlzX2FzeW5j
ID0gaXNfYXN5bmMKIAogICAgIGRlZiByZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyhzZWxmLCBwcm90
b2NvbCwgZG9tYWluKToKQEAgLTc1NCwxMiArNzE2LDEyIEBAIGNsYXNzIENvbW1hbmQ6CiAKIAog
Y2xhc3MgRXZlbnQ6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGV2ZW50X25hbWUsIHRhcmdldF90
eXBlcywgZXZlbnRfcGFyYW1ldGVycywgZGVzY3JpcHRpb24sIHBsYXRmb3JtKToKKyAgICBkZWYg
X19pbml0X18oc2VsZiwgZXZlbnRfbmFtZSwgdGFyZ2V0X3R5cGVzLCBldmVudF9wYXJhbWV0ZXJz
LCBkZXNjcmlwdGlvbiwgY29uZGl0aW9uKToKICAgICAgICAgc2VsZi5ldmVudF9uYW1lID0gZXZl
bnRfbmFtZQogICAgICAgICBzZWxmLnRhcmdldF90eXBlcyA9IHRhcmdldF90eXBlcwogICAgICAg
ICBzZWxmLmV2ZW50X3BhcmFtZXRlcnMgPSBldmVudF9wYXJhbWV0ZXJzCiAgICAgICAgIHNlbGYu
ZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbgotICAgICAgICBzZWxmLnBsYXRmb3JtID0gcGxhdGZv
cm0KKyAgICAgICAgc2VsZi5jb25kaXRpb24gPSBjb25kaXRpb24KIAogICAgIGRlZiByZXNvbHZl
X3R5cGVfcmVmZXJlbmNlcyhzZWxmLCBwcm90b2NvbCwgZG9tYWluKToKICAgICAgICAgbG9nLmRl
YnVnKCI+PiBSZXNvbHZpbmcgdHlwZSByZWZlcmVuY2VzIGZvciBwYXJhbWV0ZXJzIGluIGV2ZW50
OiAlcyIgJSBzZWxmLmV2ZW50X25hbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9vYmpjX2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9vYmpjX2dl
bmVyYXRvcl90ZW1wbGF0ZXMucHkKaW5kZXggMjI3NDIxNTE5OTQuLjA4OTk1OGJkOTg5IDEwMDc1
NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9v
YmpjX2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vb2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzLnB5CkBAIC0z
MSw2ICszMSw3IEBAIGNsYXNzIE9iakNHZW5lcmF0b3JUZW1wbGF0ZXM6CiAKICAgICBIZWFkZXJQ
cmVsdWRlID0gKAogICAgICIiIiNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorI2lt
cG9ydCA8d3RmL1BsYXRmb3JtLmg+CiAKICR7aW5jbHVkZXN9CiAiIiIpCkBAIC00MSw3ICs0Miw5
IEBAICR7aW5jbHVkZXN9CiAiIiIpCiAKICAgICBUeXBlQ29udmVyc2lvbnNIZWFkZXJQcmVsdWRl
ID0gKAotICAgICIiIiR7aW5jbHVkZXN9CisgICAgIiIiI2ltcG9ydCA8d3RmL1BsYXRmb3JtLmg+
CisKKyR7aW5jbHVkZXN9CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgeyIiIikKIApAQCAtNTAsNyAr
NTMsOSBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsiIiIpCiAiIiIpCiAKICAgICBHZW5lcmljSGVh
ZGVyUHJlbHVkZSA9ICgKLSAgICAiIiIke2luY2x1ZGVzfSIiIikKKyAgICAiIiIjaW1wb3J0IDx3
dGYvUGxhdGZvcm0uaD4KKworJHtpbmNsdWRlc30iIiIpCiAKICAgICBHZW5lcmljSGVhZGVyUG9z
dGx1ZGUgPSAoCiAgICAgIiIiIiIiKQpAQCAtNjAsNyArNjUsOSBAQCBuYW1lc3BhY2UgSW5zcGVj
dG9yIHsiIiIpCiBPcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25z
dCBTdHJpbmcmIHZhbHVlKTsiIiIpCiAKICAgICBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlclByZWx1
ZGUgPSAoCi0gICAgIiIiJHtpbmNsdWRlc30KKyAgICAiIiIjaW1wb3J0IDx3dGYvUGxhdGZvcm0u
aD4KKworJHtpbmNsdWRlc30KIAogJHtmb3J3YXJkRGVjbGFyYXRpb25zfQogCkBAIC0xMjcsOCAr
MTM0LDcgQEAgcHJpdmF0ZToKICR7c3VjY2Vzc0NhbGxiYWNrfQogJHtjb252ZXJzaW9uc30KICR7
aW52b2NhdGlvbn0KLX0KLSIiIikKK30iIiIpCiAKICAgICBDb25maWd1cmF0aW9uQ29tbWFuZFBy
b3BlcnR5ID0gKAogICAgICIiIkBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4sIHNldHRlcj1z
ZXQke2RvbWFpbk5hbWV9SGFuZGxlcjopIGlkPCR7b2JqY1ByZWZpeH0ke2RvbWFpbk5hbWV9RG9t
YWluSGFuZGxlcj4gJHt2YXJpYWJsZU5hbWVQcmVmaXh9SGFuZGxlcjsiIiIpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQppbmRleCAy
YjFkODc4MmNiMi4uOGNlZjAwOTVmN2UgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQpAQCAtMTE3LDcgKzExNyw2IEBAIGRlZiBn
ZW5lcmF0ZV9mcm9tX3NwZWNpZmljYXRpb24ocHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRo
PU5vbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9kaXJwYXRoPU5v
bmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmNlX291dHB1dD1GYWxzZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWV3b3JrX25hbWU9IiIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtX25hbWU9IiIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlX2Zyb250ZW5kPVRydWUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlX2JhY2tlbmQ9VHJ1ZSk6CiAKQEAgLTEzMCw3
ICsxMjksNiBAQCBkZWYgZ2VuZXJhdGVfZnJvbV9zcGVjaWZpY2F0aW9uKHByaW1hcnlfc3BlY2lm
aWNhdGlvbl9maWxlcGF0aD1Ob25lLAogICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBlOgog
ICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJFcnJvciBwYXJzaW5nIHZhbGlkIEpTT04gaW4g
ZmlsZTogIiArIGZpbGVwYXRoICsgIlxuUGFyc2UgZXJyb3I6ICIgKyBzdHIoZSkpCiAKLSAgICBw
bGF0Zm9ybSA9IFBsYXRmb3JtLmZyb21TdHJpbmcocGxhdGZvcm1fbmFtZSkKICAgICBwcm90b2Nv
bCA9IG1vZGVscy5Qcm90b2NvbChmcmFtZXdvcmtfbmFtZSkKICAgICBmb3Igc3BlY2lmaWNhdGlv
biBpbiBzdXBwbGVtZW50YWxfc3BlY2lmaWNhdGlvbl9maWxlcGF0aHM6CiAgICAgICAgIGxvYWRf
c3BlY2lmaWNhdGlvbihwcm90b2NvbCwgc3BlY2lmaWNhdGlvbiwgaXNTdXBwbGVtZW50YWw9VHJ1
ZSkKQEAgLTEzOCw3ICsxMzYsNyBAQCBkZWYgZ2VuZXJhdGVfZnJvbV9zcGVjaWZpY2F0aW9uKHBy
aW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aD1Ob25lLAogCiAgICAgcHJvdG9jb2wucmVzb2x2
ZV90eXBlcygpCiAKLSAgICBnZW5lcmF0b3JfYXJndW1lbnRzID0gW3Byb3RvY29sLCBwbGF0Zm9y
bSwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoXQorICAgIGdlbmVyYXRvcl9hcmd1bWVu
dHMgPSBbcHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aF0KICAgICBnZW5l
cmF0b3JzID0gW10KIAogICAgIGlmIHByb3RvY29sLmZyYW1ld29yayBpcyBGcmFtZXdvcmtzLlRl
c3Q6CkBAIC0xNjIsNyArMTYwLDYgQEAgZGVmIGdlbmVyYXRlX2Zyb21fc3BlY2lmaWNhdGlvbihw
cmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGg9Tm9uZSwKICAgICAgICAgZ2VuZXJhdG9ycy5h
cHBlbmQoT2JqQ1Byb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcigqZ2VuZXJhdG9y
X2FyZ3VtZW50cykpCiAKICAgICBlbGlmIHByb3RvY29sLmZyYW1ld29yayBpcyBGcmFtZXdvcmtz
LkphdmFTY3JpcHRDb3JlOgotICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChKU0JhY2tlbmRDb21t
YW5kc0dlbmVyYXRvcigqZ2VuZXJhdG9yX2FyZ3VtZW50cykpCiAgICAgICAgIGdlbmVyYXRvcnMu
YXBwZW5kKENwcEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKCpnZW5l
cmF0b3JfYXJndW1lbnRzKSkKICAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoQ3BwQmFja2VuZERp
c3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IoKmdlbmVyYXRvcl9hcmd1bWVudHMpKQogICAgICAgICBn
ZW5lcmF0b3JzLmFwcGVuZChDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJh
dG9yKCpnZW5lcmF0b3JfYXJndW1lbnRzKSkKQEAgLTIyOSw3ICsyMjYsNiBAQCBkZWYgZ2VuZXJh
dGVfZnJvbV9zcGVjaWZpY2F0aW9uKHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aD1Ob25l
LAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIGFsbG93ZWRfZnJhbWV3b3JrX25h
bWVzID0gWydKYXZhU2NyaXB0Q29yZScsICdXZWJJbnNwZWN0b3InLCAnV2ViSW5zcGVjdG9yVUkn
LCAnV2ViS2l0JywgJ1Rlc3QnXQotICAgIGFsbG93ZWRfcGxhdGZvcm1fbmFtZXMgPSBbJ2lPUycs
ICdtYWNPUycsICdhbGwnLCAnZ2VuZXJpYyddCiAgICAgY2xpX3BhcnNlciA9IG9wdHBhcnNlLk9w
dGlvblBhcnNlcih1c2FnZT0idXNhZ2U6ICVwcm9nIFtvcHRpb25zXSBQcmltYXJ5UHJvdG9jb2wu
anNvbiBbU3VwcGxlbWVudGFsUHJvdG9jb2wuanNvbiAuLi5dIikKICAgICBjbGlfcGFyc2VyLmFk
ZF9vcHRpb24oIi1vIiwgIi0tb3V0cHV0RGlyIiwgaGVscD0iRGlyZWN0b3J5IHdoZXJlIGdlbmVy
YXRlZCBmaWxlcyBzaG91bGQgYmUgd3JpdHRlbi4iKQogICAgIGNsaV9wYXJzZXIuYWRkX29wdGlv
bigiLS1mcmFtZXdvcmsiLCB0eXBlPSJjaG9pY2UiLCBjaG9pY2VzPWFsbG93ZWRfZnJhbWV3b3Jr
X25hbWVzLCBoZWxwPSJUaGUgZnJhbWV3b3JrIHRoYXQgdGhlIHByaW1hcnkgc3BlY2lmaWNhdGlv
biBiZWxvbmdzIHRvLiIpCkBAIC0yMzgsNyArMjM0LDYgQEAgaWYgX19uYW1lX18gPT0gJ19fbWFp
bl9fJzoKICAgICBjbGlfcGFyc2VyLmFkZF9vcHRpb24oIi10IiwgIi0tdGVzdCIsIGFjdGlvbj0i
c3RvcmVfdHJ1ZSIsIGhlbHA9IkVuYWJsZSB0ZXN0IG1vZGUuIFVzZSB1bmlxdWUgb3V0cHV0IGZp
bGVuYW1lcyBjcmVhdGVkIGJ5IHByZXBlbmRpbmcgdGhlIGlucHV0IGZpbGVuYW1lLiIpCiAgICAg
Y2xpX3BhcnNlci5hZGRfb3B0aW9uKCItLWZyb250ZW5kIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwg
aGVscD0iR2VuZXJhdGUgY29kZSBmb3IgdGhlIGZyb250ZW5kLXNpZGUgb2YgdGhlIHByb3RvY29s
IG9ubHkuIikKICAgICBjbGlfcGFyc2VyLmFkZF9vcHRpb24oIi0tYmFja2VuZCIsIGFjdGlvbj0i
c3RvcmVfdHJ1ZSIsIGhlbHA9IkdlbmVyYXRlIGNvZGUgZm9yIHRoZSBiYWNrZW5kLXNpZGUgb2Yg
dGhlIHByb3RvY29sIG9ubHkuIikKLSAgICBjbGlfcGFyc2VyLmFkZF9vcHRpb24oIi0tcGxhdGZv
cm0iLCBkZWZhdWx0PSJnZW5lcmljIiwgaGVscD0iVGhlIHBsYXRmb3JtIG9mIHRoZSBiYWNrZW5k
IGJlaW5nIGdlbmVyYXRlZC4gRm9yIGV4YW1wbGUsIHdlIGNvbXBpbGUgV2ViS2l0MiBmb3IgZWl0
aGVyIG1hY09TIG9yIGlPUy4gVGhpcyB2YWx1ZSBpcyBjYXNlLWluc2Vuc2l0aXZlLiBBbGxvd2Vk
IHZhbHVlczogJXMiICUgIiwgIi5qb2luKGFsbG93ZWRfcGxhdGZvcm1fbmFtZXMpKQogICAgIG9w
dGlvbnMgPSBOb25lCiAKICAgICBhcmdfb3B0aW9ucywgYXJnX3ZhbHVlcyA9IGNsaV9wYXJzZXIu
cGFyc2VfYXJncygpCkBAIC0yNjQsNyArMjU5LDYgQEAgaWYgX19uYW1lX18gPT0gJ19fbWFpbl9f
JzoKICAgICAgICAgJ291dHB1dF9kaXJwYXRoJzogYXJnX29wdGlvbnMub3V0cHV0RGlyLAogICAg
ICAgICAnY29uY2F0ZW5hdGVfb3V0cHV0JzogYXJnX29wdGlvbnMudGVzdCwKICAgICAgICAgJ2Zy
YW1ld29ya19uYW1lJzogYXJnX29wdGlvbnMuZnJhbWV3b3JrLAotICAgICAgICAncGxhdGZvcm1f
bmFtZSc6IGFyZ19vcHRpb25zLnBsYXRmb3JtLAogICAgICAgICAnZm9yY2Vfb3V0cHV0JzogYXJn
X29wdGlvbnMuZm9yY2UsCiAgICAgICAgICdnZW5lcmF0ZV9iYWNrZW5kJzogZ2VuZXJhdGVfYmFj
a2VuZCwKICAgICAgICAgJ2dlbmVyYXRlX2Zyb250ZW5kJzogZ2VuZXJhdGVfZnJvbnRlbmQsCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
YWxsL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvYWxsL2RlZmluaXRpb25zLXdpdGgtbWFjLXBs
YXRmb3JtLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxN2YxMzVlZTVhLi4w
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvYWxsL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKysrIC9kZXYvbnVs
bApAQCAtMSwyOCArMCwwIEBACi17Ci0gICAgImRvbWFpbiI6ICJOZXR3b3JrIiwKLSAgICAidHlw
ZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJOZXR3b3JrRXJyb3IiLAotICAg
ICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKLSAgICAgICAgICAgICJwbGF0Zm9ybSI6ICJtYWNv
cyIsCi0gICAgICAgICAgICAicHJvcGVydGllcyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1l
IjogIm1lc3NhZ2UiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgbWVz
c2FnZS4iIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2RlIiwgInR5cGUiOiAiaW50
ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBjb2RlLiIgfQotICAgICAgICAgICAgXQotICAg
ICAgICB9Ci0gICAgXSwKLSAgICAiY29tbWFuZHMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAg
ICJuYW1lIjogImxvYWRSZXNvdXJjZSIsCi0gICAgICAgICAgICAicGxhdGZvcm0iOiAibWFjb3Mi
LAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNv
bnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmln
aW4gY2hlY2tzLiIKLSAgICAgICAgfQotICAgIF0sCi0gICAgImV2ZW50cyI6IFsKLSAgICAgICAg
ewotICAgICAgICAgICAgIm5hbWUiOiAicmVzb3VyY2VMb2FkZWQiLAotICAgICAgICAgICAgInBs
YXRmb3JtIjogIm1hY29zIiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJBIHJlc291cmNl
IHdhcyBsb2FkZWQuIgotICAgICAgICB9Ci0gICAgXQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2FsbC9leHBlY3RlZC9kZWZpbml0
aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9hbGwvZXhwZWN0ZWQvZGVmaW5pdGlvbnMtd2l0aC1t
YWMtcGxhdGZvcm0uanNvbi1yZXN1bHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2
ZTY4ZjRhOWFlLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvYWxsL2V4cGVjdGVkL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRm
b3JtLmpzb24tcmVzdWx0CisrKyAvZGV2L251bGwKQEAgLTEsMTIxNyArMCwwIEBACi0jIyMgQmVn
aW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0vLyBOZXR3b3JrCi1JbnNwZWN0
b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJOZXR3b3JrIiwgbnVsbCk7Ci1JbnNwZWN0b3JCYWNr
ZW5kLnJlZ2lzdGVyQ29tbWFuZCgiTmV0d29yay5sb2FkUmVzb3VyY2UiLCBudWxsLCBbXSwgW10p
OwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckV2ZW50KCJOZXR3b3JrLnJlc291cmNlTG9hZGVk
IiwgbnVsbCwgW10pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rlck5ldHdvcmtEaXNwYXRjaGVy
ID0gSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRpc3BhdGNoZXIuYmluZChJbnNwZWN0b3JCYWNr
ZW5kLCAiTmV0d29yayIpOwotSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiTmV0d29y
ayIsIG51bGwpOwotIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLQot
IyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3Jt
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdt
YSBvbmNlCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQot
I2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xh
c3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZvaWQgc2V0QmFj
a2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsg
bV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KLSAgICBCYWNrZW5k
RGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmRE
aXNwYXRjaGVyLmdldCgpOyB9Ci1wcml2YXRlOgotICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hl
cj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKLX07Ci0KLQotY2xhc3MgQWx0ZXJuYXRlTmV0d29ya0Jh
Y2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1
YmxpYzoKLSAgICB2aXJ0dWFsIH5BbHRlcm5hdGVOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIoKSB7
IH0KLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgY2FsbElkKSA9IDA7Ci19Owot
Ci19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQotIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2Vu
ZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMu
aAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFj
LXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXR5
cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCi1jbGFzcyBBbHRlcm5hdGVOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI7
Ci0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0KLWNs
YXNzIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewotcHVibGljOgotICAgIHZpcnR1
YWwgdm9pZCBsb2FkUmVzb3VyY2UoRXJyb3JTdHJpbmcmKSA9IDA7Ci1wcm90ZWN0ZWQ6Ci0gICAg
dmlydHVhbCB+TmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOwotfTsKLQotY2xhc3Mg
TmV0d29ya0JhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tl
bmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE5ldHdvcmtCYWNrZW5kRGlz
cGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgTmV0d29ya0JhY2tlbmREaXNwYXRj
aGVySGFuZGxlciopOwotICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0
cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOwotcHJpdmF0
ZToKLSAgICB2b2lkIGxvYWRSZXNvdXJjZShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9i
amVjdD4mJiBwYXJhbWV0ZXJzKTsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKLXB1YmxpYzoKLSAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJu
YXRlTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0
ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KLXByaXZhdGU6Ci0gICAg
QWx0ZXJuYXRlTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyKiBtX2FsdGVybmF0ZURpc3BhdGNoZXIg
eyBudWxscHRyIH07Ci0jZW5kaWYKLXByaXZhdGU6Ci0gICAgTmV0d29ya0JhY2tlbmREaXNwYXRj
aGVyKEJhY2tlbmREaXNwYXRjaGVyJiwgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciop
OwotICAgIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQgeyBudWxscHRy
IH07Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEJh
Y2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNo
ZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdp
dGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0
Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91
dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJE
ZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNpZiBFTkFCTEUo
SU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSNpbmNsdWRlICJUZXN0QWx0ZXJuYXRl
QmFja2VuZERpc3BhdGNoZXJzLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0K
LU5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5OZXR3b3JrQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyKCkgeyB9Ci0KLVJlZjxOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI+IE5ldHdvcmtC
YWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0
Y2hlciwgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCi17Ci0gICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRj
aGVyLCBhZ2VudCkpOwotfQotCi1OZXR3b3JrQmFja2VuZERpc3BhdGNoZXI6Ok5ldHdvcmtCYWNr
ZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIE5ldHdv
cmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQotICAgIDogU3VwcGxlbWVudGFsQmFj
a2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCi0gICAgLCBtX2FnZW50KGFnZW50KQot
ewotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbigi
TmV0d29yayJfcywgdGhpcyk7Ci19Ci0KLXZvaWQgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyOjpk
aXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpP
YmplY3Q+JiYgbWVzc2FnZSkKLXsKLSAgICBSZWY8TmV0d29ya0JhY2tlbmREaXNwYXRjaGVyPiBw
cm90ZWN0KCp0aGlzKTsKLQotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7Ci0g
ICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRlcnMpOwotCi0gICAgaWYg
KG1ldGhvZCA9PSAibG9hZFJlc291cmNlIikKLSAgICAgICAgbG9hZFJlc291cmNlKHJlcXVlc3RJ
ZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNw
YXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RG
b3VuZCwgIidOZXR3b3JrLiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7Ci19Ci0KLXZv
aWQgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0SWQs
IFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCi17Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCi0gICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAg
ICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZShyZXF1ZXN0SWQpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBS
ZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIG1f
YWdlbnQtPmxvYWRSZXNvdXJjZShlcnJvcik7Ci0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQot
ICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZN
b3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBX
VEZNb3ZlKGVycm9yKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5k
IEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
RnJvbnRlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
ZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90
b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgRnJv
bnRlbmRSb3V0ZXI7Ci0KLWNsYXNzIE5ldHdvcmtGcm9udGVuZERpc3BhdGNoZXIgewotICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIE5ldHdvcmtGcm9udGVuZERpc3Bh
dGNoZXIoRnJvbnRlbmRSb3V0ZXImIGZyb250ZW5kUm91dGVyKSA6IG1fZnJvbnRlbmRSb3V0ZXIo
ZnJvbnRlbmRSb3V0ZXIpIHsgfQotICAgIHZvaWQgcmVzb3VyY2VMb2FkZWQoKTsKLXByaXZhdGU6
Ci0gICAgRnJvbnRlbmRSb3V0ZXImIG1fZnJvbnRlbmRSb3V0ZXI7Ci19OwotCi19IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAot
Ci0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdm9pZCBOZXR3
b3JrRnJvbnRlbmREaXNwYXRjaGVyOjpyZXNvdXJjZUxvYWRlZCgpCi17Ci0gICAgUmVmPEpTT046
Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25N
ZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIk5ldHdvcmsucmVzb3VyY2VMb2FkZWQiX3Mp
OwotCi0gICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0
cmluZygpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTog
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xPYmplY3RzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9u
cy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5h
bWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLS8v
IEZvcndhcmQgZGVjbGFyYXRpb25zLgotbmFtZXNwYWNlIE5ldHdvcmsgewotY2xhc3MgTmV0d29y
a0Vycm9yOwotfSAvLyBOZXR3b3JrCi0vLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCi0K
LQotCi0KLW5hbWVzcGFjZSBOZXR3b3JrIHsKLWNsYXNzIE5ldHdvcmtFcnJvciA6IHB1YmxpYyBK
U09OOjpPYmplY3RCYXNlIHsKLXB1YmxpYzoKLSAgICBlbnVtIHsKLSAgICAgICAgTm9GaWVsZHNT
ZXQgPSAwLAotICAgICAgICBNZXNzYWdlU2V0ID0gMSA8PCAwLAotICAgICAgICBDb2RlU2V0ID0g
MSA8PCAxLAotICAgICAgICBBbGxGaWVsZHNTZXQgPSAoTWVzc2FnZVNldCB8IENvZGVTZXQpCi0g
ICAgfTsKLQotICAgIHRlbXBsYXRlPGludCBTVEFURT4KLSAgICBjbGFzcyBCdWlsZGVyIHsKLSAg
ICBwcml2YXRlOgotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBtX3Jlc3VsdDsKLQotICAg
ICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUo
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRl
cjxTVEFURSB8IFNURVA+Kj4odGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyKFJl
ZjwvKk5ldHdvcmtFcnJvciovSlNPTjo6T2JqZWN0PiYmIG9iamVjdCkKLSAgICAgICAgICAgIDog
bV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxF
X0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0
X3N0YXRlKTsKLSAgICAgICAgfQotICAgICAgICBmcmllbmQgY2xhc3MgTmV0d29ya0Vycm9yOwot
ICAgIHB1YmxpYzoKLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTWVzc2FnZVNldD4mIHNldE1l
c3NhZ2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoIShTVEFURSAmIE1lc3NhZ2VTZXQpLCBwcm9wZXJ0eV9tZXNzYWdlX2FscmVhZHlf
c2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1lc3NhZ2UiX3MsIHZhbHVl
KTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TWVzc2FnZVNldD4oKTsKLSAgICAgICAg
fQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2RlU2V0PiYgc2V0Q29kZShpbnQgdmFsdWUp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2RlU2V0
KSwgcHJvcGVydHlfY29kZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
SW50ZWdlcigiY29kZSJfcywgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxD
b2RlU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgUmVmPE5ldHdvcmtFcnJvcj4gcmVsZWFz
ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZp
ZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VS
VChzaXplb2YoTmV0d29ya0Vycm9yKSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0KSwgY2Fubm90X2Nh
c3QpOwotCi0gICAgICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uUmVzdWx0ID0gbV9yZXN1
bHQucmVsZWFzZU5vbk51bGwoKTsKLSAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gV1RGTW92ZSgq
cmVpbnRlcnByZXRfY2FzdDxSZWY8TmV0d29ya0Vycm9yPio+KCZqc29uUmVzdWx0KSk7Ci0gICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIC8qCi0gICAg
ICogU3ludGhldGljIGNvbnN0cnVjdG9yOgotICAgICAqIFJlZjxOZXR3b3JrRXJyb3I+IHJlc3Vs
dCA9IE5ldHdvcmtFcnJvcjo6Y3JlYXRlKCkKLSAgICAgKiAgICAgLnNldE1lc3NhZ2UoLi4uKQot
ICAgICAqICAgICAuc2V0Q29kZSguLi4pCi0gICAgICogICAgIC5yZWxlYXNlKCk7Ci0gICAgICov
Ci0gICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCi0gICAgewotICAgICAg
ICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7Ci0g
ICAgfQotfTsKLQotfSAvLyBOZXR3b3JrCi0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAot
Ci19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2Jq
ZWN0cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3Jt
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLQotI2luY2x1
ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFt
ZXNwYWNlIEluc3BlY3RvciB7Ci0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLQotCi19IC8vIG5h
bWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRy
Lmg+Ci0KLUBwcm90b2NvbCBUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluSGFuZGxlcjsKLQotbmFt
ZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotY2xhc3MgT2JqQ0luc3BlY3Rvck5ldHdvcmtCYWNrZW5k
RGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVOZXR3b3JrQmFja2VuZERpc3BhdGNo
ZXIgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIE9iakNJbnNw
ZWN0b3JOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sTmV0d29ya0RvbWFp
bkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KLSAgICB2b2lkIGxv
YWRSZXNvdXJjZShsb25nIHJlcXVlc3RJZCkgZmluYWw7Ci1wcml2YXRlOgotICAgIFJldGFpblB0
cjxpZDxUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7Ci19Owot
Ci19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xC
YWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2Vu
ZERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5p
dGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2Nv
bEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwu
aCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbmNsdWRlIDx3
dGYvSlNPTlZhbHVlcy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdm9pZCBPYmpDSW5z
cGVjdG9yTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0
SWQpCi17Ci0gICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9y
KGxvYWRSZXNvdXJjZVdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgewotICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwg
QmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmsubG9hZFJlc291cmNl
JyB3YXMgbm90IGZvdW5kIl9zKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBl
bmRpbmdFcnJvcnMoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlkIGVycm9yQ2Fs
bGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigp
LT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZl
ckVycm9yLCBlcnJvcik7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5n
RXJyb3JzKCk7Ci0gICAgfTsKLQotICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57Ci0gICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpTT046Ok9iamVj
dDo6Y3JlYXRlKCksIGZhbHNlKTsKLSAgICB9OwotCi0gICAgW21fZGVsZWdhdGUgbG9hZFJlc291
cmNlV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vz
c0NhbGxiYWNrXTsKLX0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQ
cm90b2NvbC5oPgotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBp
bnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0Ci1AcHJvcGVydHkg
KG5vbmF0b21pYywgcmV0YWluLCBzZXR0ZXI9c2V0TmV0d29ya0hhbmRsZXI6KSBpZDxUZXN0UHJv
dG9jb2xOZXR3b3JrRG9tYWluSGFuZGxlcj4gbmV0d29ya0hhbmRsZXI7Ci1AcHJvcGVydHkgKG5v
bmF0b21pYywgcmVhZG9ubHkpIFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5FdmVudERpc3BhdGNo
ZXIgKm5ldHdvcmtFdmVudERpc3BhdGNoZXI7Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENv
bmZpZ3VyYXRpb24ubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0
aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKLQot
I2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJh
Y2tlbmREaXNwYXRjaGVycy5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlz
cGF0Y2hhYmxlQWdlbnQuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5z
cGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0
ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsK
LQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KLXsKLSAgICBBdWdt
ZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotICAgIGlkPFRlc3RQcm90
b2NvbE5ldHdvcmtEb21haW5IYW5kbGVyPiBfbmV0d29ya0hhbmRsZXI7Ci0gICAgVGVzdFByb3Rv
Y29sTmV0d29ya0RvbWFpbkV2ZW50RGlzcGF0Y2hlciAqX25ldHdvcmtFdmVudERpc3BhdGNoZXI7
Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5z
cGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07
Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9s
bGVyKTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19
Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAgIFtfbmV0d29ya0hhbmRsZXIgcmVsZWFzZV07Ci0g
ICAgW19uZXR3b3JrRXZlbnREaXNwYXRjaGVyIHJlbGVhc2VdOwotICAgIFtzdXBlciBkZWFsbG9j
XTsKLX0KLQotLSAodm9pZClzZXROZXR3b3JrSGFuZGxlcjooaWQ8VGVzdFByb3RvY29sTmV0d29y
a0RvbWFpbkhhbmRsZXI+KWhhbmRsZXIKLXsKLSAgICBpZiAoaGFuZGxlciA9PSBfbmV0d29ya0hh
bmRsZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIFtfbmV0d29ya0hhbmRsZXIgcmVsZWFzZV07
Ci0gICAgX25ldHdvcmtIYW5kbGVyID0gW2hhbmRsZXIgcmV0YWluXTsKLQotICAgIGF1dG8gYWx0
ZXJuYXRlRGlzcGF0Y2hlciA9IG1ha2VVbmlxdWU8T2JqQ0luc3BlY3Rvck5ldHdvcmtCYWNrZW5k
RGlzcGF0Y2hlcj4oaGFuZGxlcik7Ci0gICAgYXV0byBhbHRlcm5hdGVBZ2VudCA9IG1ha2VVbmlx
dWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8TmV0d29ya0JhY2tlbmREaXNwYXRjaGVyLCBB
bHRlcm5hdGVOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI+PigiTmV0d29yayJfcywgKl9jb250cm9s
bGVyLCBXVEZNb3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIpKTsKLSAgICBfY29udHJvbGxlci0+YXBw
ZW5kRXh0cmFBZ2VudChXVEZNb3ZlKGFsdGVybmF0ZUFnZW50KSk7Ci19Ci0KLS0gKGlkPFRlc3RQ
cm90b2NvbE5ldHdvcmtEb21haW5IYW5kbGVyPiluZXR3b3JrSGFuZGxlcgotewotICAgIHJldHVy
biBfbmV0d29ya0hhbmRsZXI7Ci19Ci0KLS0gKFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5FdmVu
dERpc3BhdGNoZXIgKiluZXR3b3JrRXZlbnREaXNwYXRjaGVyCi17Ci0gICAgaWYgKCFfbmV0d29y
a0V2ZW50RGlzcGF0Y2hlcikKLSAgICAgICAgX25ldHdvcmtFdmVudERpc3BhdGNoZXIgPSBbW1Rl
c3RQcm90b2NvbE5ldHdvcmtEb21haW5FdmVudERpc3BhdGNoZXIgYWxsb2NdIGluaXRXaXRoQ29u
dHJvbGxlcjpfY29udHJvbGxlcl07Ci0gICAgcmV0dXJuIF9uZXR3b3JrRXZlbnREaXNwYXRjaGVy
OwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9u
Lm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxh
dGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0j
aW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5h
bWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xOZXR3b3Jr
RG9tYWluRXZlbnREaXNwYXRjaGVyCi17Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9s
bGVyKiBfY29udHJvbGxlcjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxl
cjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCi17Ci0gICAgc2Vs
ZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0g
ICAgQVNTRVJUKGNvbnRyb2xsZXIpOwotICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKLSAg
ICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClyZXNvdXJjZUxvYWRlZAotewotICAgIGNvbnN0
IEZyb250ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29udHJvbGxlci0+ZnJvbnRlbmRSb3V0ZXIoKTsK
LQotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJOZXR3b3JrLnJl
c291cmNlTG9hZGVkIl9zKTsKLSAgICByb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pT
T05TdHJpbmcoKSk7Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2
ZW50RGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZv
cm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1w
b3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JX
SVByb3RvY29sSlNPTk9iamVjdC5oPgotCi0KLUBjbGFzcyBUZXN0UHJvdG9jb2xOZXR3b3JrRXJy
b3I7Ci0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbFBsYXRmb3JtKSB7
Ci0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1BbGwsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1H
ZW5lcmljLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TLAotICAgIFRlc3RQcm90b2NvbFBs
YXRmb3JtTWFjT1MsCi19OwotCi0KLQotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVm
YXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sTmV0d29ya0Vycm9yIDogUldJUHJvdG9j
b2xKU09OT2JqZWN0Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25h
cnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBy
b3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OwotLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlIGNvZGU6KGludClj
b2RlOwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5n
ICptZXNzYWdlOwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikg
aW50IGNvZGU7Ci1AZW5kCi0KLUBwcm90b2NvbCBUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluSGFu
ZGxlciA8TlNPYmplY3Q+Ci1Ab3B0aW9uYWwKLS0gKHZvaWQpbG9hZFJlc291cmNlV2l0aEVycm9y
Q2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3ND
YWxsYmFjazoodm9pZCheKSh2b2lkKSlzdWNjZXNzQ2FsbGJhY2s7Ci1AZW5kCi0KLV9fYXR0cmli
dXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xO
ZXR3b3JrRG9tYWluRXZlbnREaXNwYXRjaGVyIDogTlNPYmplY3QKLS0gKHZvaWQpcmVzb3VyY2VM
b2FkZWQ7Ci1AZW5kCi0KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRD
b21wYXRpYmlsaXR5T2JqZWN0cy5oPgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJv
dG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCi0jaW1w
b3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNp
bXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sTmV0d29y
a0RvbWFpbkV2ZW50RGlzcGF0Y2hlciAoUHJpdmF0ZSkKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0
aENvbnRyb2xsZXI6KEluc3BlY3Rvcjo6QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKilj
b250cm9sbGVyOwotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwu
aAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9y
bS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBv
cnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJy
YXlDb252ZXJzaW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdGVtcGxhdGU8dHlw
ZW5hbWUgT2JqQ0VudW1UeXBlPgotT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xT
dHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0
cmluZyhUZXN0UHJvdG9jb2xQbGF0Zm9ybSB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsK
LSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOgotICAgICAgICByZXR1cm4gImFsbCJf
czsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzoKLSAgICAgICAgcmV0dXJu
ICJnZW5lcmljIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1JT1M6Ci0gICAgICAg
IHJldHVybiAiaW9zIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzoKLSAg
ICAgICAgcmV0dXJuICJtYWNvcyJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBP
cHRpb25hbDxUZXN0UHJvdG9jb2xQbGF0Zm9ybT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0
cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJhbGwiKQotICAgICAgICByZXR1cm4g
VGVzdFByb3RvY29sUGxhdGZvcm1BbGw7Ci0gICAgaWYgKHZhbHVlID09ICJnZW5lcmljIikKLSAg
ICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzsKLSAgICBpZiAodmFsdWUg
PT0gImlvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzsKLSAgICBp
ZiAodmFsdWUgPT0gIm1hY29zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3Jt
TWFjT1M7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotCi0KLX0gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5o
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9y
bS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBv
cnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKLSNpbXBvcnQgPFdlYklu
c3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0KLXVzaW5nIG5hbWVzcGFj
ZSBJbnNwZWN0b3I7Ci0KLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChO
ZXR3b3JrRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZU5ldHdvcmtFcnJvcjooVGVzdFByb3RvY29s
TmV0d29ya0Vycm9yICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotCi1AZW5k
Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKE5ldHdvcmtE
b21haW4pCi0KLSsgKHZvaWQpX3BhcnNlTmV0d29ya0Vycm9yOihUZXN0UHJvdG9jb2xOZXR3b3Jr
RXJyb3IgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19F
WENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKLSAg
ICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbE5ldHdvcmtFcnJvciBhbGxvY10gaW5pdFdpdGhQ
YXlsb2FkOnBheWxvYWRdOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVz
Lm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1t
YWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2Nv
bEpTT05PYmplY3RQcml2YXRlLmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9y
dCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi1A
aW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sTmV0d29ya0Vycm9yCi0KLS0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAq
KXBheWxvYWQKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0
dXJuIG5pbDsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5
bG9hZFtAIm1lc3NhZ2UiXSwgQCJtZXNzYWdlIik7Ci0gICAgc2VsZi5tZXNzYWdlID0gcGF5bG9h
ZFtAIm1lc3NhZ2UiXTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVS
VFkocGF5bG9hZFtAImNvZGUiXSwgQCJjb2RlIik7Ci0gICAgc2VsZi5jb2RlID0gW3BheWxvYWRb
QCJjb2RlIl0gaW50ZWdlclZhbHVlXTsKLQotICAgIHJldHVybiBzZWxmOwotfQotLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9i
amVjdAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmpl
Y3QgdG9KU09OT2JqZWN0XS5nZXQoKV0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgcmV0
dXJuIHNlbGY7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3RyaW5n
ICopbWVzc2FnZSBjb2RlOihpbnQpY29kZQotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5p
dF0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFV
SVJFRF9QUk9QRVJUWShtZXNzYWdlLCBAIm1lc3NhZ2UiKTsKLQotICAgIHNlbGYubWVzc2FnZSA9
IG1lc3NhZ2U7Ci0gICAgc2VsZi5jb2RlID0gY29kZTsKLQotICAgIHJldHVybiBzZWxmOwotfQot
Ci0tICh2b2lkKXNldE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZQotewotICAgIFtzdXBlciBz
ZXRTdHJpbmc6bWVzc2FnZSBmb3JLZXk6QCJtZXNzYWdlIl07Ci19Ci0KLS0gKE5TU3RyaW5nICop
bWVzc2FnZQotewotICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAibWVzc2FnZSJdOwot
fQotCi0tICh2b2lkKXNldENvZGU6KGludCljb2RlCi17Ci0gICAgW3N1cGVyIHNldEludGVnZXI6
Y29kZSBmb3JLZXk6QCJjb2RlIl07Ci19Ci0KLS0gKGludCljb2RlCi17Ci0gICAgcmV0dXJuIFtz
dXBlciBpbnRlZ2VyRm9yS2V5OkAiY29kZSJdOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2NvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21h
aW4tZGVidWdnYWJsZVR5cGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9jb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2Fi
bGVUeXBlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmQyN2Fi
NjViOTJhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2NvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdn
YWJsZVR5cGUuanNvbgpAQCAtMCwwICsxLDkgQEAKK1sKK3sKKyAgICAiZG9tYWluIjogIkRvbWFp
biIsCisgICAgImRlYnVnZ2FibGVUeXBlcyI6IFsicGFnZSJdLAorICAgICJ0YXJnZXRUeXBlcyI6
IFsicGFnZSIsICJ3b3JrZXIiXSwKKyAgICAiY29tbWFuZHMiOiBbeyJuYW1lIjogIkNvbW1hbmQi
fV0sCisgICAgImV2ZW50cyI6IFt7Im5hbWUiOiAiRXZlbnQifV0KK30KK10KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9jb21tYW5kcy13
aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2NvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjExMjYyZTg4OWZhCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2Nv
bW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KQEAgLTAsMCArMSwxMDkgQEAKK3sKKyAg
ICAiZG9tYWluIjogIkRhdGFiYXNlIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAg
ICAgICAgICJpZCI6ICJEYXRhYmFzZUlkIiwKKyAgICAgICAgICAgICJ0eXBlIjogImludGVnZXIi
LAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBpZGVudGlmaWVyIG9mIERhdGFi
YXNlIG9iamVjdC4iCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJQ
cmltYXJ5Q29sb3JzIiwKKyAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAg
ICAiZW51bSI6IFsicmVkIiwgImdyZWVuIiwgImJsdWUiXQorICAgICAgICB9LAorICAgICAgICB7
CisgICAgICAgICAgICAiaWQiOiAiQ29sb3JMaXN0IiwKKyAgICAgICAgICAgICJ0eXBlIjogImFy
cmF5IiwKKyAgICAgICAgICAgICJpdGVtcyI6IHsgIiRyZWYiOiAiUHJpbWFyeUNvbG9ycyIgfQor
ICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiRXJyb3IiLAorICAgICAg
ICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJEYXRh
YmFzZSBlcnJvci4iLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJtZXNzYWdlIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjog
IkVycm9yIG1lc3NhZ2UuIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29kZSIsICJ0
eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgY29kZS4iIH0KKyAgICAgICAg
ICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgImNvbW1hbmRzIjogWworICAgICAgICB7Cisg
ICAgICAgICAgICAibmFtZSI6ICJleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzIiwK
KyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
ZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiIH0sCisgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJxdWVyeSIsICJ0eXBlIjogInN0cmluZyIgfQorICAgICAgICAgICAgXSwKKyAgICAg
ICAgICAgICJyZXR1cm5zIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFt
ZXMiLCAidHlwZSI6ICJhcnJheSIsICJvcHRpb25hbCI6IHRydWUsICJpdGVtcyI6IHsgInR5cGUi
OiAic3RyaW5nIiB9IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBl
IjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRp
b25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlw
ZSI6ICJhbnkiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIsICJvcHRpb25hbCI6IHRydWUgfSwK
KyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiLCAi
b3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5Db2xv
ciIsICIkcmVmIjogIlByaW1hcnlDb2xvcnMiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJhbHRlcm5hdGVDb2xvcnMiLCAiJHJlZiI6ICJDb2xvckxpc3Qi
LCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcmludENv
bG9yIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxs
b3ciLCAiYmxhY2siXSwgIm9wdGlvbmFsIjogdHJ1ZSB9CisgICAgICAgICAgICBdCisgICAgICAg
IH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImV4ZWN1dGVTUUxBc3luY09wdGlv
bmFsUmV0dXJuVmFsdWVzIiwKKyAgICAgICAgICAgICJhc3luYyI6IHRydWUsCisgICAgICAgICAg
ICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRhdGFiYXNlSWQi
LCAiJHJlZiI6ICJEYXRhYmFzZUlkIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicXVl
cnkiLCAidHlwZSI6ICJzdHJpbmciIH0KKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAicmV0
dXJucyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUi
OiAiYXJyYXkiLCAib3B0aW9uYWwiOiB0cnVlLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIg
fSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmci
LCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3Rh
bXAiLCAidHlwZSI6ICJudW1iZXIiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0cnVl
IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55Iiwg
Im9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJ
ZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVycm9yIiwgIm9wdGlvbmFsIjog
dHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6
ICJQcmltYXJ5Q29sb3JzIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwgIiRyZWYiOiAiQ29sb3JMaXN0IiwgIm9wdGlvbmFs
IjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBl
IjogInN0cmluZyIsICJlbnVtIjogWyJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93IiwgImJsYWNr
Il0sICJvcHRpb25hbCI6IHRydWUgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAg
ICB7CisgICAgICAgICAgICAibmFtZSI6ICJleGVjdXRlU1FMU3luYyIsCisgICAgICAgICAgICAi
cGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRhdGFiYXNlSWQiLCAi
JHJlZiI6ICJEYXRhYmFzZUlkIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicXVlcnki
LCAidHlwZSI6ICJzdHJpbmciIH0KKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAicmV0dXJu
cyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAi
YXJyYXkiLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAorICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciIH0sCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiIH0sCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiIH0sCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiB9LAorICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiIH0sCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVycm9yIiB9LAorICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwgIiRyZWYiOiAiQ29sb3JMaXN0
IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6ICJQ
cmltYXJ5Q29sb3JzIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJpbnRDb2xvciIs
ICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93Iiwg
ImJsYWNrIl0gfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAg
ICAgICAibmFtZSI6ICJleGVjdXRlU1FMQXN5bmMiLAorICAgICAgICAgICAgImFzeW5jIjogdHJ1
ZSwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiIH0sCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJxdWVyeSIsICJ0eXBlIjogInN0cmluZyIgfQorICAgICAgICAgICAgXSwKKyAg
ICAgICAgICAgICJyZXR1cm5zIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1u
TmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0s
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIgfSwK
KyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIg
fSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIg
fSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiIH0s
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJh
c2VJZCIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAi
RXJyb3IiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVm
IjogIlByaW1hcnlDb2xvcnMiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJhbHRlcm5h
dGVDb2xvcnMiLCAiJHJlZiI6ICJDb2xvckxpc3QiIH0sCisgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbImN5YW4iLCAibWFn
ZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAg
ICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpz
b24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvY29tbWFu
ZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjM2MWQ1N2Q4MjBkCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2NvbW1hbmRz
LXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCkBAIC0wLDAgKzEsODUg
QEAKK3sKKyAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAg
IHsKKyAgICAgICAgICAgICJpZCI6ICJEYXRhYmFzZUlkIiwKKyAgICAgICAgICAgICJ0eXBlIjog
ImludGVnZXIiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBpZGVudGlmaWVy
IG9mIERhdGFiYXNlIG9iamVjdC4iCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAg
ICJpZCI6ICJQcmltYXJ5Q29sb3JzIiwKKyAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisg
ICAgICAgICAgICAiZW51bSI6IFsicmVkIiwgImdyZWVuIiwgImJsdWUiXQorICAgICAgICB9LAor
ICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiQ29sb3JMaXN0IiwKKyAgICAgICAgICAgICJ0
eXBlIjogImFycmF5IiwKKyAgICAgICAgICAgICJpdGVtcyI6IHsgIiRyZWYiOiAiUHJpbWFyeUNv
bG9ycyIgfQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiRXJyb3Ii
LAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlv
biI6ICJEYXRhYmFzZSBlcnJvci4iLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJtZXNzYWdlIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2Ny
aXB0aW9uIjogIkVycm9yIG1lc3NhZ2UuIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
Y29kZSIsICJ0eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgY29kZS4iIH0K
KyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgImNvbW1hbmRzIjogWworICAg
ICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJz
IiwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJvcHRpb25hbCI6IHRydWUsICJpdGVt
cyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJu
b3RlcyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6
IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9i
amVjdCIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBh
eWxvYWQiLCAidHlwZSI6ICJhbnkiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIsICJvcHRpb25h
bCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYi
OiAiRXJyb3IiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJzY3JlZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlDb2xvcnMiLCAib3B0aW9uYWwiOiB0cnVl
IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJhbHRlcm5hdGVDb2xvcnMiLCAiJHJlZiI6
ICJDb2xvckxpc3QiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbImN5YW4iLCAibWFn
ZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSwgIm9wdGlvbmFsIjogdHJ1ZSB9CisgICAgICAgICAg
ICBdLAorICAgICAgICAgICAgInJldHVybnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIm9wdGlvbmFsIjogdHJ1ZSwgIml0ZW1z
IjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5v
dGVzIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFsIjog
dHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2Jq
ZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5
bG9hZCIsICJ0eXBlIjogImFueSIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogImRhdGFiYXNlSWQiLCAiJHJlZiI6ICJEYXRhYmFzZUlkIiwgIm9wdGlvbmFs
IjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic3FsRXJyb3IiLCAiJHJlZiI6
ICJFcnJvciIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjog
InNjcmVlbkNvbG9yIiwgIiRyZWYiOiAiUHJpbWFyeUNvbG9ycyIsICJvcHRpb25hbCI6IHRydWUg
fSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImFsdGVybmF0ZUNvbG9ycyIsICIkcmVmIjog
IkNvbG9yTGlzdCIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogInByaW50Q29sb3IiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsiY3lhbiIsICJtYWdl
bnRhIiwgInllbGxvdyIsICJibGFjayJdLCAib3B0aW9uYWwiOiB0cnVlIH0KKyAgICAgICAgICAg
IF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiZXhlY3V0ZU5v
T3B0aW9uYWxQYXJhbWV0ZXJzIiwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVt
cyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJu
b3RlcyIsICJ0eXBlIjogInN0cmluZyIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRp
bWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjog
InZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjog
InBheWxvYWQiLCAidHlwZSI6ICJhbnkiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJk
YXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIgfSwKKyAgICAgICAgICAgICAgICB7ICJu
YW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiIH0sCisgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlDb2xvcnMiIH0sCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJhbHRlcm5hdGVDb2xvcnMiLCAiJHJlZiI6ICJDb2xvckxpc3Qi
IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3Ry
aW5nIiwgImVudW0iOiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSB9Cisg
ICAgICAgICAgICBdLAorICAgICAgICAgICAgInJldHVybnMiOiBbCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAidHlw
ZSI6ICJzdHJpbmciIH0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vdGVzIiwgInR5
cGUiOiAic3RyaW5nIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwg
InR5cGUiOiAibnVtYmVyIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVzIiwg
InR5cGUiOiAib2JqZWN0IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5bG9hZCIs
ICJ0eXBlIjogImFueSIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRhdGFiYXNlSWQi
LCAiJHJlZiI6ICJEYXRhYmFzZUlkIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic3Fs
RXJyb3IiLCAiJHJlZiI6ICJFcnJvciIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNj
cmVlbkNvbG9yIiwgIiRyZWYiOiAiUHJpbWFyeUNvbG9ycyIgfSwKKyAgICAgICAgICAgICAgICB7
ICJuYW1lIjogImFsdGVybmF0ZUNvbG9ycyIsICIkcmVmIjogIkNvbG9yTGlzdCIgfSwKKyAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogInByaW50Q29sb3IiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51
bSI6IFsiY3lhbiIsICJtYWdlbnRhIiwgInllbGxvdyIsICJibGFjayJdIH0KKyAgICAgICAgICAg
IF0KKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5q
c29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2RlZmlu
aXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAuLjliZTQ2YTE3YWQxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2RlZmluaXRpb25zLXdpdGgtbWFjLXBs
YXRmb3JtLmpzb24KQEAgLTAsMCArMSwyOCBAQAoreworICAgICJkb21haW4iOiAiTmV0d29yayIs
CisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiTmV0d29ya0Vy
cm9yIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAiY29uZGl0
aW9uIjogIlBMQVRGT1JNKE1BQykiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJtZXNzYWdlIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2Ny
aXB0aW9uIjogIkVycm9yIG1lc3NhZ2UuIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
Y29kZSIsICJ0eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgY29kZS4iIH0K
KyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgImNvbW1hbmRzIjogWworICAg
ICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJsb2FkUmVzb3VyY2UiLAorICAgICAgICAgICAg
ImNvbmRpdGlvbiI6ICJQTEFURk9STShNQUMpIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6
ICJMb2FkcyBhIHJlc291cmNlIGluIHRoZSBjb250ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGluc3Bl
Y3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNoZWNrcy4iCisgICAgICAgIH0KKyAgICBd
LAorICAgICJldmVudHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogInJlc291
cmNlTG9hZGVkIiwKKyAgICAgICAgICAgICJjb25kaXRpb24iOiAiUExBVEZPUk0oTUFDKSIsCisg
ICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQSByZXNvdXJjZSB3YXMgbG9hZGVkLiIKKyAgICAg
ICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9kb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24gYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZG9tYWluLWRlYnVnZ2FibGVUeXBl
cy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xZmViMGM5YTI3
ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9kb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24KQEAgLTAsMCArMSw4IEBACitb
Cit7CisgICAgImRvbWFpbiI6ICJEb21haW4iLAorICAgICJkZWJ1Z2dhYmxlVHlwZXMiOiBbIndl
Yi1wYWdlIl0sCisgICAgImNvbW1hbmRzIjogW3sibmFtZSI6ICJDb21tYW5kIn1dLAorICAgICJl
dmVudHMiOiBbeyJuYW1lIjogIkV2ZW50In1dCit9CitdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZG9tYWluLXRhcmdldFR5cGUtbWF0
Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWlu
LWRlYnVnZ2FibGVUeXBlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAuLmY2MmZiMzhiYTc4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2RvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFp
bi1kZWJ1Z2dhYmxlVHlwZS5qc29uCkBAIC0wLDAgKzEsOCBAQAorWworeworICAgICJkb21haW4i
OiAiRG9tYWluIiwKKyAgICAiZGVidWdnYWJsZVR5cGVzIjogWyJwYWdlIl0sCisgICAgImNvbW1h
bmRzIjogW3sibmFtZSI6ICJDb21tYW5kIiwgInRhcmdldFR5cGVzIjogWyJwYWdlIiwgIndvcmtl
ciJdfV0sCisgICAgImV2ZW50cyI6IFt7Im5hbWUiOiAiRXZlbnQifV0KK30KK10KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9kb21haW4t
dGFyZ2V0VHlwZXMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9kb21haW4tdGFyZ2V0VHlwZXMuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMC4uNmE2ZTQwZDYwYWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZG9tYWluLXRhcmdldFR5cGVzLmpz
b24KQEAgLTAsMCArMSw4IEBACitbCit7CisgICAgImRvbWFpbiI6ICJEb21haW4iLAorICAgICJ0
YXJnZXRUeXBlcyI6IFsicGFnZSJdLAorICAgICJjb21tYW5kcyI6IFt7Im5hbWUiOiAiQ29tbWFu
ZCIsICJ0YXJnZXRUeXBlcyI6IFsicGFnZSJdfV0sCisgICAgImV2ZW50cyI6IFt7Im5hbWUiOiAi
RXZlbnQiLCAidGFyZ2V0VHlwZXMiOiBbInBhZ2UiXX1dCit9CitdCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZG9tYWlucy13aXRoLXZh
cnlpbmctY29tbWFuZC1zaXplcy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOTRhOGVjYjE3NmQKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCkBAIC0wLDAgKzEsNTQg
QEAKK1sKK3sKKyAgICAiZG9tYWluIjogIk5ldHdvcmsxIiwKKyAgICAiY29tbWFuZHMiOiBbCisg
ICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJjZTEiLAorICAgICAgICAg
ICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBm
cmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIK
KyAgICAgICAgfQorICAgIF0KK30sCit7CisgICAgImRvbWFpbiI6ICJOZXR3b3JrMiIsCisgICAg
InR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiTG9hZGVySWQiLAorICAg
ICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJV
bmlxdWUgbG9hZGVyIGlkZW50aWZpZXIuIgorICAgICAgICB9CisgICAgXQorfSwKK3sKKyAgICAi
ZG9tYWluIjogIk5ldHdvcmszIiwKKyAgICAiY29tbWFuZHMiOiBbCisgICAgICAgIHsKKyAgICAg
ICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJjZTEiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9u
IjogIkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5z
cGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKKyAgICAgICAgfSwKKyAg
ICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAibG9hZFJlc291cmNlMiIsCisgICAgICAgICAg
ICAiZGVzY3JpcHRpb24iOiAiTG9hZHMgYSByZXNvdXJjZSBpbiB0aGUgY29udGV4dCBvZiBhIGZy
YW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFnZSB3aXRob3V0IGNyb3NzIG9yaWdpbiBjaGVja3MuIgor
ICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJsb2FkUmVzb3VyY2Uz
IiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBhIHJlc291cmNlIGluIHRoZSBj
b250ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGluc3BlY3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3Jp
Z2luIGNoZWNrcy4iCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjog
ImxvYWRSZXNvdXJjZTQiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVz
b3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0
aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAg
ICAgICAgIm5hbWUiOiAibG9hZFJlc291cmNlNSIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24i
OiAiTG9hZHMgYSByZXNvdXJjZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNw
ZWN0ZWQgcGFnZSB3aXRob3V0IGNyb3NzIG9yaWdpbiBjaGVja3MuIgorICAgICAgICB9LAorICAg
ICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJsb2FkUmVzb3VyY2U2IiwKKyAgICAgICAgICAg
ICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBhIHJlc291cmNlIGluIHRoZSBjb250ZXh0IG9mIGEgZnJh
bWUgb24gdGhlIGluc3BlY3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNoZWNrcy4iCisg
ICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJjZTci
LAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNv
bnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmln
aW4gY2hlY2tzLiIKKyAgICAgICAgfQorICAgIF0KK30KK10KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9lbnVtLXZhbHVlcy5qc29uIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2VudW0tdmFsdWVz
Lmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmNkYWQ2MWRmN2M5
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2VudW0tdmFsdWVzLmpzb24KQEAgLTAsMCArMSwzNSBAQAoreyJkb21haW5zIjpb
Cit7CisgICAgImRvbWFpbiI6ICJUeXBlRG9tYWluIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAg
IHsKKyAgICAgICAgICAgICJpZCI6ICJUeXBlRG9tYWluRW51bSIsCisgICAgICAgICAgICAidHlw
ZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgImVudW0iOiBbInNoYXJlZCIsICJyZWQiLCAiZ3Jl
ZW4iLCAiYmx1ZSJdCisgICAgICAgIH0KKyAgICBdCit9LAoreworICAgICJkb21haW4iOiAiQ29t
bWFuZERvbWFpbiIsCisgICAgImNvbW1hbmRzIjogWworICAgICAgICB7CisgICAgICAgICAgICAi
bmFtZSI6ICJjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZSIsCisgICAgICAgICAgICAicGFyYW1l
dGVycyI6IFtdLAorICAgICAgICAgICAgInJldHVybnMiOiBbCisgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJyZXR1cm5WYWx1ZSIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJzaGFyZWQi
LCAiY3lhbiIsICJtYWdlbnRhIiwgInllbGxvdyJdIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAg
fQorICAgIF0KK30sCit7CisgICAgImRvbWFpbiI6ICJFdmVudERvbWFpbiIsCisgICAgImV2ZW50
cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiZXZlbnRXaXRoRW51bVBhcmFt
ZXRlciIsCisgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAgICB7ICJu
YW1lIjogInBhcmFtZXRlciIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJzaGFyZWQiLCAi
YmxhY2siLCAid2hpdGUiXSB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdCit9Citd
fQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24g
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXZlbnQtdGFy
Z2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNGRmZWQ0MWVkMjEKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXZlbnQtdGFy
Z2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgpAQCAtMCwwICsxLDgg
QEAKK1sKK3sKKyAgICAiZG9tYWluIjogIkRvbWFpbiIsCisgICAgImRlYnVnZ2FibGVUeXBlcyI6
IFsicGFnZSJdLAorICAgICJjb21tYW5kcyI6IFt7Im5hbWUiOiAiQ29tbWFuZCJ9XSwKKyAgICAi
ZXZlbnRzIjogW3sibmFtZSI6ICJFdmVudCIsICJ0YXJnZXRUeXBlcyI6IFsicGFnZSIsICJ3b3Jr
ZXIiXX1dCit9CitdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V2ZW50cy13aXRoLW9w
dGlvbmFsLXBhcmFtZXRlcnMuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMC4uY2FiYmYxMGI4MzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVy
cy5qc29uCkBAIC0wLDAgKzEsNTkgQEAKK3sKKyAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKKyAg
ICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJEYXRhYmFzZUlkIiwK
KyAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24i
OiAiVW5pcXVlIGlkZW50aWZpZXIgb2YgRGF0YWJhc2Ugb2JqZWN0LiIKKyAgICAgICAgfSwKKyAg
ICAgICAgeworICAgICAgICAgICAgImlkIjogIlByaW1hcnlDb2xvcnMiLAorICAgICAgICAgICAg
InR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICJ2YWx1ZXMiOiBbInJlZCIsICJncmVlbiIs
ICJibHVlIl0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkNvbG9y
TGlzdCIsCisgICAgICAgICAgICAidHlwZSI6ICJhcnJheSIsCisgICAgICAgICAgICAiaXRlbXMi
OiB7ICIkcmVmIjogIlByaW1hcnlDb2xvcnMiIH0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAg
ICAgICAgICAgImlkIjogIkVycm9yIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisg
ICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRGF0YWJhc2UgZXJyb3IuIiwKKyAgICAgICAgICAg
ICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibWVzc2FnZSIsICJ0
eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBtZXNzYWdlLiIgfSwKKyAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogImNvZGUiLCAidHlwZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0
aW9uIjogIkVycm9yIGNvZGUuIiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAor
ICAgICJldmVudHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImRpZEV4ZWN1
dGVPcHRpb25hbFBhcmFtZXRlcnMiLAorICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIm9w
dGlvbmFsIjogdHJ1ZSwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwKKyAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjog
dHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAi
bnVtYmVyIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
dmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIsICJvcHRpb25hbCI6IHRy
dWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAiRXJy
b3IiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzY3Jl
ZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlDb2xvcnMiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJhbHRlcm5hdGVDb2xvcnMiLCAiJHJlZiI6ICJDb2xv
ckxpc3QiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJw
cmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgInZhbHVlcyI6IFsiY3lhbiIsICJtYWdlbnRh
IiwgInllbGxvdyIsICJibGFjayJdLCAib3B0aW9uYWwiOiB0cnVlIH0KKyAgICAgICAgICAgIF0K
KyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiZGlkRXhlY3V0ZU5v
T3B0aW9uYWxQYXJhbWV0ZXJzIiwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVt
cyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJu
b3RlcyIsICJ0eXBlIjogInN0cmluZyIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRp
bWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjog
InZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjog
InBheWxvYWQiLCAidHlwZSI6ICJhbnkiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJz
cWxFcnJvciIsICIkcmVmIjogIkVycm9yIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
c2NyZWVuQ29sb3IiLCAiJHJlZiI6ICJQcmltYXJ5Q29sb3JzIiB9LAorICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwgIiRyZWYiOiAiQ29sb3JMaXN0IiB9LAorICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmluZyIsICJ2
YWx1ZXMiOiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSB9CisgICAgICAg
ICAgICBdCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZC10YXJnZXRUeXBl
LW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kLXRhcmdl
dFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tcmVzdWx0Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5iYmVlYWI5ZGFkNgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC9jb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpz
b24tcmVzdWx0CkBAIC0wLDAgKzEsMTA0NiBAQAorIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJh
Y2tlbmRDb21tYW5kcy5qcy5pbgorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNv
bW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisvLyBEb21haW4KK0luc3Bl
Y3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIkRvbWFpbiIsIFsicGFnZSIsICJ3b3JrZXIiXSk7
CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiRG9tYWluLkNvbW1hbmQiLCBudWxs
LCBbXSwgW10pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckV2ZW50KCJEb21haW4uRXZlbnQi
LCBudWxsLCBbXSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluRGlzcGF0Y2hlciA9
IEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEaXNwYXRjaGVyLmJpbmQoSW5zcGVjdG9yQmFja2Vu
ZCwgIkRvbWFpbiIpOworSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiRG9tYWluIiwg
WyJwYWdlIl0pOworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMuaW4K
KworIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGlu
Zy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5o
PgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyNpbmNs
dWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yRnJvbnRlbmRSb3V0ZXIuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldEJhY2tlbmRE
aXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFj
a2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9CisgICAgQmFja2VuZERpc3Bh
dGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0
Y2hlci5nZXQoKTsgfQorcHJpdmF0ZToKKyAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1f
YmFja2VuZERpc3BhdGNoZXI7Cit9OworCisKK2NsYXNzIEFsdGVybmF0ZURvbWFpbkJhY2tlbmRE
aXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoK
KyAgICB2aXJ0dWFsIH5BbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQorICAg
IHZpcnR1YWwgdm9pZCBDb21tYW5kKGxvbmcgY2FsbElkKSA9IDA7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQorIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJz
LmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21h
aW4tZGVidWdnYWJsZVR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisj
aW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0eXBlZGVmIFN0cmluZyBFcnJvclN0
cmluZzsKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorY2xh
c3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXI7CisjZW5kaWYgLy8gRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKK2NsYXNzIERvbWFpbkJhY2tlbmREaXNw
YXRjaGVySGFuZGxlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIENvbW1hbmQoRXJyb3JT
dHJpbmcmKSA9IDA7Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+RG9tYWluQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyKCk7Cit9OworCitjbGFzcyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5h
bCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAg
c3RhdGljIFJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRj
aGVyJiwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgdm9pZCBkaXNwYXRj
aChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+
JiYgbWVzc2FnZSkgZmluYWw7Citwcml2YXRlOgorICAgIHZvaWQgQ29tbWFuZChsb25nIHJlcXVl
c3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyNpZiBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK3B1YmxpYzoKKyAgICB2b2lkIHNldEFsdGVy
bmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0
ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hl
cjsgfQorcHJpdmF0ZToKKyAgICBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciogbV9h
bHRlcm5hdGVEaXNwYXRjaGVyIHsgbnVsbHB0ciB9OworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorcHJpdmF0ZToKKyAgICBEb21haW5CYWNrZW5kRGlz
cGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxl
ciopOworICAgIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2VudCB7IG51bGxw
dHIgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0
QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0
Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZC10YXJn
ZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+
CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisj
aW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgorI2VuZGlmIC8vIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCituYW1lc3BhY2UgSW5zcGVj
dG9yIHsKKworRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+RG9tYWluQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyKCkgeyB9CisKK1JlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gRG9t
YWluQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERp
c3BhdGNoZXIsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCit7CisgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgRG9tYWluQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3Bh
dGNoZXIsIGFnZW50KSk7Cit9CisKK0RvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIERvbWFp
bkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCisgICAgOiBTdXBwbGVtZW50YWxCYWNr
ZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKKyAgICAsIG1fYWdlbnQoYWdlbnQpCit7
CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKCJE
b21haW4iX3MsIHRoaXMpOworfQorCit2b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpkaXNw
YXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmpl
Y3Q+JiYgbWVzc2FnZSkKK3sKKyAgICBSZWY8RG9tYWluQmFja2VuZERpc3BhdGNoZXI+IHByb3Rl
Y3QoKnRoaXMpOworCisgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVyczsKKyAgICBt
ZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFyYW1ldGVycyk7CisKKyAgICBpZiAobWV0
aG9kID09ICJDb21tYW5kIikgeworICAgICAgICBDb21tYW5kKHJlcXVlc3RJZCwgV1RGTW92ZShw
YXJhbWV0ZXJzKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2JhY2tlbmREaXNw
YXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RG
b3VuZCwgIidEb21haW4uIiArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKK30KKwordm9p
ZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVmUHRy
PEpTT046Ok9iamVjdD4mJikKK3sKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKKyAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7CisgICAgICAgIG1fYWx0
ZXJuYXRlRGlzcGF0Y2hlci0+Q29tbWFuZChyZXF1ZXN0SWQpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQor
CisgICAgRXJyb3JTdHJpbmcgZXJyb3I7CisgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0g
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBtX2FnZW50LT5Db21tYW5kKGVycm9yKTsKKwor
ICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNl
bmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOworICAgIGVsc2UK
KyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5k
RGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5j
cHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9t
YWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKwor
I2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVl
cy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVj
dG9yIHsKKworY2xhc3MgRnJvbnRlbmRSb3V0ZXI7CisKK2NsYXNzIERvbWFpbkZyb250ZW5kRGlz
cGF0Y2hlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgRG9t
YWluRnJvbnRlbmREaXNwYXRjaGVyKEZyb250ZW5kUm91dGVyJiBmcm9udGVuZFJvdXRlcikgOiBt
X2Zyb250ZW5kUm91dGVyKGZyb250ZW5kUm91dGVyKSB7IH0KKyAgICB2b2lkIEV2ZW50KCk7Citw
cml2YXRlOgorICAgIEZyb250ZW5kUm91dGVyJiBtX2Zyb250ZW5kUm91dGVyOworfTsKKworfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNo
ZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGlu
Zy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEZyb250
ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZy
b250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKKwordm9pZCBEb21haW5Gcm9udGVuZERpc3BhdGNoZXI6OkV2ZW50KCkK
K3sKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7CisgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2
ZW50Il9zKTsKKworICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50
b0pTT05TdHJpbmcoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5k
IEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sT2JqZWN0cy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29t
bWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JQcm90b2NvbFR5cGVzLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKKworCituYW1lc3BhY2UgUHJvdG9jb2wgeworCisKKworCisK
KworCisKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorCisjIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKworI2luY2x1ZGUg
PHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNw
YWNlIEluc3BlY3RvciB7CisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKworCit9IC8vIG5hbWVz
cGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBj
b21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8d3RmL1Bs
YXRmb3JtLmg+CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKK0Bwcm90
b2NvbCBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyOworCituYW1lc3BhY2UgSW5zcGVj
dG9yIHsKKworCitjbGFzcyBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmlu
YWwgOiBwdWJsaWMgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIgeworICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIE9iakNJbnNwZWN0b3JEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiBoYW5kbGVy
KSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9CisgICAgdm9pZCBDb21tYW5kKGxvbmcgcmVxdWVz
dElkKSBmaW5hbDsKK3ByaXZhdGU6CisgICAgUmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbERvbWFp
bkRvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKwor
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1k
b21haW4tZGVidWdnYWJsZVR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJh
Y2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIK
KyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbmNsdWRlIDx3dGYv
SlNPTlZhbHVlcy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordm9pZCBPYmpDSW5zcGVj
dG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9uZyByZXF1ZXN0SWQpCit7Cisg
ICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKENvbW1hbmRX
aXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsKKyAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRj
aGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uQ29tbWFuZCcgd2FzIG5vdCBmb3VuZCJfcyk7
CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAq
ZXJyb3IpIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJv
cihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgIH07CisK
KyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigp
LT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7
CisgICAgfTsKKworICAgIFttX2RlbGVnYXRlIENvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazplcnJv
ckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOworfQorCit9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlz
cGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24u
aAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmQtdGFyZ2V0VHlwZS1t
YXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDx3dGYvUGxhdGZvcm0uaD4KKworI2ltcG9y
dCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmls
aXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6
IE5TT2JqZWN0CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluLCBzZXR0ZXI9c2V0RG9tYWlu
SGFuZGxlcjopIGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IGRvbWFpbkhhbmRs
ZXI7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFRlc3RQcm90b2NvbERvbWFpbkRv
bWFpbkV2ZW50RGlzcGF0Y2hlciAqZG9tYWluRXZlbnREaXNwYXRjaGVyOworQGVuZAorCisKKyMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlw
ZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBv
cnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29s
SW50ZXJuYWwuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgor
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgor
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXJzLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRl
c3RQcm90b2NvbENvbmZpZ3VyYXRpb24KK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRy
b2xsZXIqIF9jb250cm9sbGVyOworICAgIGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRs
ZXI+IF9kb21haW5IYW5kbGVyOworICAgIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlz
cGF0Y2hlciAqX2RvbWFpbkV2ZW50RGlzcGF0Y2hlcjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9s
bGVyCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAg
IHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250cm9sbGVyID0g
Y29udHJvbGxlcjsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7Cisg
ICAgW19kb21haW5IYW5kbGVyIHJlbGVhc2VdOworICAgIFtfZG9tYWluRXZlbnREaXNwYXRjaGVy
IHJlbGVhc2VdOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAodm9pZClzZXREb21haW5I
YW5kbGVyOihpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiloYW5kbGVyCit7Cisg
ICAgaWYgKGhhbmRsZXIgPT0gX2RvbWFpbkhhbmRsZXIpCisgICAgICAgIHJldHVybjsKKworICAg
IFtfZG9tYWluSGFuZGxlciByZWxlYXNlXTsKKyAgICBfZG9tYWluSGFuZGxlciA9IFtoYW5kbGVy
IHJldGFpbl07CisKKyAgICBhdXRvIGFsdGVybmF0ZURpc3BhdGNoZXIgPSBtYWtlVW5pcXVlPE9i
akNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7CisgICAgYXV0byBh
bHRlcm5hdGVBZ2VudCA9IG1ha2VVbmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8RG9t
YWluQmFja2VuZERpc3BhdGNoZXIsIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyPj4o
IkRvbWFpbiJfcywgKl9jb250cm9sbGVyLCBXVEZNb3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIpKTsK
KyAgICBfY29udHJvbGxlci0+YXBwZW5kRXh0cmFBZ2VudChXVEZNb3ZlKGFsdGVybmF0ZUFnZW50
KSk7Cit9CisKKy0gKGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+KWRvbWFpbkhh
bmRsZXIKK3sKKyAgICByZXR1cm4gX2RvbWFpbkhhbmRsZXI7Cit9CisKKy0gKFRlc3RQcm90b2Nv
bERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqKWRvbWFpbkV2ZW50RGlzcGF0Y2hlcgorewor
ICAgIGlmICghX2RvbWFpbkV2ZW50RGlzcGF0Y2hlcikKKyAgICAgICAgX2RvbWFpbkV2ZW50RGlz
cGF0Y2hlciA9IFtbVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyIGFsbG9j
XSBpbml0V2l0aENvbnRyb2xsZXI6X2NvbnRyb2xsZXJdOworICAgIHJldHVybiBfZG9tYWluRXZl
bnREaXNwYXRjaGVyOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xD
b25maWd1cmF0aW9uLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3Bh
dGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZC10YXJn
ZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVy
bmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9y
dCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGlt
cGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlcgorewor
ICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Cit9CisKKy0g
KGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29u
dHJvbGxlciopY29udHJvbGxlcgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYg
KCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAg
ICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZv
aWQpRXZlbnQKK3sKKyAgICBjb25zdCBGcm9udGVuZFJvdXRlciYgcm91dGVyID0gX2NvbnRyb2xs
ZXItPmZyb250ZW5kUm91dGVyKCk7CisKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2Fn
ZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygi
bWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9zKTsKKyAgICByb3V0ZXIuc2VuZEV2ZW50KGpzb25N
ZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZC10YXJnZXRU
eXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlv
bi5oPgorI2ltcG9ydCA8d3RmL1BsYXRmb3JtLmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9S
V0lQcm90b2NvbEpTT05PYmplY3QuaD4KKworCisKKworCisKKworCitAcHJvdG9jb2wgVGVzdFBy
b3RvY29sRG9tYWluRG9tYWluSGFuZGxlciA8TlNPYmplY3Q+CitAb3B0aW9uYWwKKy0gKHZvaWQp
Q29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JD
YWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikodm9pZCkpc3VjY2Vzc0NhbGxiYWNrOwor
QGVuZAorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZh
Y2UgVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyIDogTlNPYmplY3QKKy0g
KHZvaWQpRXZlbnQ7CitAZW5kCisKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29s
QnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFp
bi1kZWJ1Z2dhYmxlVHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNpbXBvcnQgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaW1wb3J0ICJUZXN0UHJvdG9j
b2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCisjaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBv
cnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sRG9tYWluRG9t
YWluRXZlbnREaXNwYXRjaGVyIChQcml2YXRlKQorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29u
dHJvbGxlcjooSW5zcGVjdG9yOjpBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRy
b2xsZXI7CitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisK
KyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21h
aW4tZGVidWdnYWJsZVR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjaW1wb3J0IDx3dGYvUGxhdGZvcm0uaD4KKworI2ltcG9ydCAiVGVzdFByb3Rv
Y29sLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25z
Lmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51
bVR5cGU+CitPcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBT
dHJpbmcmIHZhbHVlKTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgi
CisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0
b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5z
cGVjdG9yOworCisKKworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRv
bWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JX
SVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKyNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+
CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9y
OworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21t
YW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLWFzeW5j
LWF0dHJpYnV0ZS5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMC4uNDBkODUxZmYyMzgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1hc3luYy1h
dHRyaWJ1dGUuanNvbi1yZXN1bHQKQEAgLTAsMCArMSwxNzk1IEBACisjIyMgQmVnaW4gRmlsZTog
SW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzLmluCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgorLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisvLyBEYXRhYmFzZQorSW5zcGVjdG9yQmFj
a2VuZC5yZWdpc3RlckRvbWFpbigiRGF0YWJhc2UiLCBudWxsKTsKK0luc3BlY3RvckJhY2tlbmQu
cmVnaXN0ZXJFbnVtKCJEYXRhYmFzZS5QcmltYXJ5Q29sb3JzIiwge1JlZDogInJlZCIsIEdyZWVu
OiAiZ3JlZW4iLCBCbHVlOiAiYmx1ZSJ9KTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21t
YW5kKCJEYXRhYmFzZS5leGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzIiwgbnVsbCwg
W3sibmFtZSI6ICJkYXRhYmFzZUlkIiwgInR5cGUiOiAibnVtYmVyIn0sIHsibmFtZSI6ICJxdWVy
eSIsICJ0eXBlIjogInN0cmluZyJ9XSwgWyJjb2x1bW5OYW1lcyIsICJub3RlcyIsICJ0aW1lc3Rh
bXAiLCAidmFsdWVzIiwgInBheWxvYWQiLCAiZGF0YWJhc2VJZCIsICJzcWxFcnJvciIsICJzY3Jl
ZW5Db2xvciIsICJhbHRlcm5hdGVDb2xvcnMiLCAicHJpbnRDb2xvciJdKTsKK0luc3BlY3RvckJh
Y2tlbmQucmVnaXN0ZXJDb21tYW5kKCJEYXRhYmFzZS5leGVjdXRlU1FMQXN5bmNPcHRpb25hbFJl
dHVyblZhbHVlcyIsIG51bGwsIFt7Im5hbWUiOiAiZGF0YWJhc2VJZCIsICJ0eXBlIjogIm51bWJl
ciJ9LCB7Im5hbWUiOiAicXVlcnkiLCAidHlwZSI6ICJzdHJpbmcifV0sIFsiY29sdW1uTmFtZXMi
LCAibm90ZXMiLCAidGltZXN0YW1wIiwgInZhbHVlcyIsICJwYXlsb2FkIiwgImRhdGFiYXNlSWQi
LCAic3FsRXJyb3IiLCAic2NyZWVuQ29sb3IiLCAiYWx0ZXJuYXRlQ29sb3JzIiwgInByaW50Q29s
b3IiXSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiRGF0YWJhc2UuZXhlY3V0
ZVNRTFN5bmMiLCBudWxsLCBbeyJuYW1lIjogImRhdGFiYXNlSWQiLCAidHlwZSI6ICJudW1iZXIi
fSwgeyJuYW1lIjogInF1ZXJ5IiwgInR5cGUiOiAic3RyaW5nIn1dLCBbImNvbHVtbk5hbWVzIiwg
Im5vdGVzIiwgInRpbWVzdGFtcCIsICJ2YWx1ZXMiLCAicGF5bG9hZCIsICJkYXRhYmFzZUlkIiwg
InNxbEVycm9yIiwgImFsdGVybmF0ZUNvbG9ycyIsICJzY3JlZW5Db2xvciIsICJwcmludENvbG9y
Il0pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIkRhdGFiYXNlLmV4ZWN1dGVT
UUxBc3luYyIsIG51bGwsIFt7Im5hbWUiOiAiZGF0YWJhc2VJZCIsICJ0eXBlIjogIm51bWJlciJ9
LCB7Im5hbWUiOiAicXVlcnkiLCAidHlwZSI6ICJzdHJpbmcifV0sIFsiY29sdW1uTmFtZXMiLCAi
bm90ZXMiLCAidGltZXN0YW1wIiwgInZhbHVlcyIsICJwYXlsb2FkIiwgImRhdGFiYXNlSWQiLCAi
c3FsRXJyb3IiLCAic2NyZWVuQ29sb3IiLCAiYWx0ZXJuYXRlQ29sb3JzIiwgInByaW50Q29sb3Ii
XSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRGF0YWJhc2VEaXNwYXRjaGVyID0gSW5zcGVj
dG9yQmFja2VuZC5yZWdpc3RlckRpc3BhdGNoZXIuYmluZChJbnNwZWN0b3JCYWNrZW5kLCAiRGF0
YWJhc2UiKTsKK0luc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkRhdGFiYXNlIiwgbnVs
bCk7CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcy5pbgorCisjIyMg
QmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Cisj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsK
K3B1YmxpYzoKKyAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlz
cGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRp
c3BhdGNoZXIpOyB9CisgICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkg
Y29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQorcHJpdmF0ZToKKyAg
ICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Cit9OworCisK
K2NsYXNzIEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJu
YXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgfkFsdGVybmF0ZURh
dGFiYXNlQmFja2VuZERpc3BhdGNoZXIoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNR
TFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIGNhbGxJZCwgaW50IGluX2RhdGFiYXNlSWQs
IGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNR
TEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyBjYWxsSWQsIGludCBpbl9kYXRhYmFzZUlk
LCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVT
UUxTeW5jKGxvbmcgY2FsbElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9x
dWVyeSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMQXN5bmMobG9uZyBjYWxsSWQs
IGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KSA9IDA7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQorIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERp
c3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0
cmlidXRlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2luY2x1ZGUgIlRl
c3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCitu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKKyNp
ZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK2NsYXNzIEFsdGVybmF0
ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI7CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKK2NsYXNzIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyIHsKK3B1YmxpYzoKKyAgICAvLyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIgJ3ByaW50Q29s
b3InIHdoaWxlIGdlbmVyYXRpbmcgY29tbWFuZC9ldmVudCBleGVjdXRlU1FMU3luY09wdGlvbmFs
UmV0dXJuVmFsdWVzLgorICAgIGVudW0gY2xhc3MgUHJpbnRDb2xvciB7CisgICAgICAgIEN5YW4g
PSAzLAorICAgICAgICBNYWdlbnRhID0gNCwKKyAgICAgICAgWWVsbG93ID0gNSwKKyAgICAgICAg
QmxhY2sgPSA2LAorICAgIH07IC8vIGVudW0gY2xhc3MgUHJpbnRDb2xvcgorICAgIHZpcnR1YWwg
dm9pZCBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKEVycm9yU3RyaW5nJiwgaW50
IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnksIFJlZlB0cjxKU09OOjpBcnJh
eU9mPFN0cmluZz4+JiBvcHRfb3V0X2NvbHVtbk5hbWVzLCBPcHRpb25hbDxTdHJpbmc+JiBvcHRf
b3V0X25vdGVzLCBPcHRpb25hbDxkb3VibGU+JiBvcHRfb3V0X3RpbWVzdGFtcCwgT3B0aW9uYWw8
SlNPTjo6T2JqZWN0PiYgb3B0X291dF92YWx1ZXMsIE9wdGlvbmFsPEpTT046OlZhbHVlPiYgb3B0
X291dF9wYXlsb2FkLCBPcHRpb25hbDxpbnQ+JiBvcHRfb3V0X2RhdGFiYXNlSWQsIFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiBvcHRfb3V0X3NxbEVycm9yLCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyogb3B0X291dF9zY3Jl
ZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+
JiBvcHRfb3V0X2FsdGVybmF0ZUNvbG9ycywgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXI6OlByaW50Q29sb3IqIG9wdF9vdXRfcHJpbnRDb2xvcikgPSAwOworICAgIGNsYXNzIEV4ZWN1
dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2sgOiBwdWJsaWMgQmFja2VuZERp
c3BhdGNoZXI6OkNhbGxiYWNrQmFzZSB7CisgICAgcHVibGljOgorICAgICAgICBFeGVjdXRlU1FM
QXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrKFJlZjxCYWNrZW5kRGlzcGF0Y2hlcj4m
JiwgaW50IGlkKTsKKyAgICAgICAgdm9pZCBzZW5kU3VjY2VzcyhSZWZQdHI8SlNPTjo6QXJyYXlP
ZjxTdHJpbmc+PiYmIGNvbHVtbk5hbWVzLCBPcHRpb25hbDxTdHJpbmc+JiBub3RlcywgT3B0aW9u
YWw8ZG91YmxlPiYgdGltZXN0YW1wLCBPcHRpb25hbDxKU09OOjpPYmplY3Q+JiB2YWx1ZXMsIE9w
dGlvbmFsPEpTT046OlZhbHVlPiYgcGF5bG9hZCwgT3B0aW9uYWw8aW50PiYgZGF0YWJhc2VJZCwg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mJiBzcWxFcnJvciwg
T3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IHNj
cmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlz
dD4mJiBhbHRlcm5hdGVDb2xvcnMsIE9wdGlvbmFsPERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyOjpQcmludENvbG9yPiBwcmludENvbG9yKTsKKyAgICB9OworICAgIHZpcnR1YWwgdm9p
ZCBleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhpbnQgaW5fZGF0YWJhc2VJZCwg
Y29uc3QgU3RyaW5nJiBpbl9xdWVyeSwgUmVmPEV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJu
VmFsdWVzQ2FsbGJhY2s+JiYgY2FsbGJhY2spID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0
ZVNRTFN5bmMoRXJyb3JTdHJpbmcmLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBp
bl9xdWVyeSwgUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mIG91dF9jb2x1bW5OYW1lcywg
U3RyaW5nKiBvdXRfbm90ZXMsIGRvdWJsZSogb3V0X3RpbWVzdGFtcCwgSlNPTjo6T2JqZWN0KiBv
dXRfdmFsdWVzLCBKU09OOjpWYWx1ZSogb3V0X3BheWxvYWQsIGludCogb3V0X2RhdGFiYXNlSWQs
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiBvdXRfc3FsRXJy
b3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYgb3V0
X2FsdGVybmF0ZUNvbG9ycywgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlD
b2xvcnMqIG91dF9zY3JlZW5Db2xvciwgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6
OlByaW50Q29sb3IqIG91dF9wcmludENvbG9yKSA9IDA7CisgICAgY2xhc3MgRXhlY3V0ZVNRTEFz
eW5jQ2FsbGJhY2sgOiBwdWJsaWMgQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZSB7Cisg
ICAgcHVibGljOgorICAgICAgICBFeGVjdXRlU1FMQXN5bmNDYWxsYmFjayhSZWY8QmFja2VuZERp
c3BhdGNoZXI+JiYsIGludCBpZCk7CisgICAgICAgIHZvaWQgc2VuZFN1Y2Nlc3MoUmVmUHRyPEpT
T046OkFycmF5T2Y8U3RyaW5nPj4mJiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBub3Rlcywg
ZG91YmxlIHRpbWVzdGFtcCwgSlNPTjo6T2JqZWN0IHZhbHVlcywgSlNPTjo6VmFsdWUgcGF5bG9h
ZCwgaW50IGRhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6
RXJyb3I+JiYgc3FsRXJyb3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5
Q29sb3JzIHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6
OkNvbG9yTGlzdD4mJiBhbHRlcm5hdGVDb2xvcnMsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyOjpQcmludENvbG9yIHByaW50Q29sb3IpOworICAgIH07CisgICAgdmlydHVhbCB2b2lk
IGV4ZWN1dGVTUUxBc3luYyhpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVy
eSwgUmVmPEV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrPiYmIGNhbGxiYWNrKSA9IDA7Citwcm90ZWN0
ZWQ6CisgICAgdmlydHVhbCB+RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKK307
CisKK2NsYXNzIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxl
bWVudGFsQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8RGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgRGF0YWJhc2VC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVz
dElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBm
aW5hbDsKK3ByaXZhdGU6CisgICAgdm9pZCBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFs
dWVzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwor
ICAgIHZvaWQgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0
SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisgICAgdm9pZCBleGVjdXRl
U1FMU3luYyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJz
KTsKKyAgICB2b2lkIGV4ZWN1dGVTUUxBc3luYyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046
Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKK3B1YmxpYzoKKyAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0
ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBt
X2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9Citwcml2YXRlOgor
ICAgIEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIqIG1fYWx0ZXJuYXRlRGlzcGF0
Y2hlciB7IG51bGxwdHIgfTsKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKK3ByaXZhdGU6CisgICAgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihCYWNr
ZW5kRGlzcGF0Y2hlciYsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAg
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQgeyBudWxscHRyIH07Cit9
OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmRE
aXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNw
cAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMt
YXR0cmlidXRlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMu
aCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+
CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95
ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2Vu
ZERpc3BhdGNoZXJzLmgiCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVySGFuZGxlcjo6fkRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9CisK
K1JlZjxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
OjpjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsK
K30KKworRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
cihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIERhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKKyAgICA6IFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRj
aGVyKGJhY2tlbmREaXNwYXRjaGVyKQorICAgICwgbV9hZ2VudChhZ2VudCkKK3sKKyAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oIkRhdGFiYXNlIl9z
LCB0aGlzKTsKK30KKwordm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChs
b25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYg
bWVzc2FnZSkKK3sKKyAgICBSZWY8RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgq
dGhpcyk7CisKKyAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOworICAgIG1lc3Nh
Z2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsKKworICAgIGlmIChtZXRob2Qg
PT0gImV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMiKSB7CisgICAgICAgIGV4ZWN1
dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRl
cnMpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAobWV0aG9kID09ICJleGVjdXRl
U1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyIpIHsKKyAgICAgICAgZXhlY3V0ZVNRTEFzeW5j
T3B0aW9uYWxSZXR1cm5WYWx1ZXMocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAobWV0aG9kID09ICJleGVjdXRlU1FMU3luYyIp
IHsKKyAgICAgICAgZXhlY3V0ZVNRTFN5bmMocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAobWV0aG9kID09ICJleGVjdXRlU1FM
QXN5bmMiKSB7CisgICAgICAgIGV4ZWN1dGVTUUxBc3luYyhyZXF1ZXN0SWQsIFdURk1vdmUocGFy
YW1ldGVycykpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91
bmQsICInRGF0YWJhc2UuIiArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKK30KKwordm9p
ZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJu
VmFsdWVzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMp
Cit7CisgICAgaW50IGluX2RhdGFiYXNlSWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRJbnRl
Z2VyKHBhcmFtZXRlcnMuZ2V0KCksICJkYXRhYmFzZUlkIl9zLCBudWxscHRyKTsKKyAgICBTdHJp
bmcgaW5fcXVlcnkgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5n
ZXQoKSwgInF1ZXJ5Il9zLCBudWxscHRyKTsKKyAgICBpZiAobV9iYWNrZW5kRGlzcGF0Y2hlci0+
aGFzUHJvdG9jb2xFcnJvcnMoKSkgeworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBv
cnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCAiU29tZSBh
cmd1bWVudHMgb2YgbWV0aG9kICdEYXRhYmFzZS5leGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJu
VmFsdWVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiX3MpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisgICAgaWYgKG1f
YWx0ZXJuYXRlRGlzcGF0Y2hlcikgeworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmV4
ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMocmVxdWVzdElkLCBpbl9kYXRhYmFzZUlk
LCBpbl9xdWVyeSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyAgICBFcnJvclN0cmluZyBlcnJvcjsK
KyAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwor
ICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IG91dF9jb2x1bW5OYW1lczsKKyAgICBP
cHRpb25hbDxTdHJpbmc+IG91dF9ub3RlczsKKyAgICBPcHRpb25hbDxkb3VibGU+IG91dF90aW1l
c3RhbXA7CisgICAgT3B0aW9uYWw8SlNPTjo6T2JqZWN0PiBvdXRfdmFsdWVzOworICAgIE9wdGlv
bmFsPEpTT046OlZhbHVlPiBvdXRfcGF5bG9hZDsKKyAgICBPcHRpb25hbDxpbnQ+IG91dF9kYXRh
YmFzZUlkOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+
IG91dF9zcWxFcnJvcjsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFy
eUNvbG9ycyBvdXRfc2NyZWVuQ29sb3I7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpDb2xvckxpc3Q+IG91dF9hbHRlcm5hdGVDb2xvcnM7CisgICAgRGF0YWJhc2VC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3Igb3V0X3ByaW50Q29sb3I7CisgICAg
bV9hZ2VudC0+ZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhlcnJvciwgaW5fZGF0
YWJhc2VJZCwgaW5fcXVlcnksIG91dF9jb2x1bW5OYW1lcywgb3V0X25vdGVzLCBvdXRfdGltZXN0
YW1wLCBvdXRfdmFsdWVzLCBvdXRfcGF5bG9hZCwgb3V0X2RhdGFiYXNlSWQsIG91dF9zcWxFcnJv
ciwgb3V0X3NjcmVlbkNvbG9yLCBvdXRfYWx0ZXJuYXRlQ29sb3JzLCBvdXRfcHJpbnRDb2xvcik7
CisKKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7CisgICAgICAgIGlmIChvdXRfY29sdW1uTmFt
ZXMpCisgICAgICAgICAgICByZXN1bHQtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgb3V0X2Nv
bHVtbk5hbWVzKTsKKyAgICAgICAgaWYgKG91dF9ub3Rlcy5oYXNWYWx1ZSgpKQorICAgICAgICAg
ICAgcmVzdWx0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCAqb3V0X25vdGVzKTsKKyAgICAgICAgaWYg
KG91dF90aW1lc3RhbXAuaGFzVmFsdWUoKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0RG91Ymxl
KCJ0aW1lc3RhbXAiX3MsICpvdXRfdGltZXN0YW1wKTsKKyAgICAgICAgaWYgKG91dF92YWx1ZXMu
aGFzVmFsdWUoKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsICpv
dXRfdmFsdWVzKTsKKyAgICAgICAgaWYgKG91dF9wYXlsb2FkLmhhc1ZhbHVlKCkpCisgICAgICAg
ICAgICByZXN1bHQtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCAqb3V0X3BheWxvYWQpOworICAgICAg
ICBpZiAob3V0X2RhdGFiYXNlSWQuaGFzVmFsdWUoKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0
SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgKm91dF9kYXRhYmFzZUlkKTsKKyAgICAgICAgaWYgKG91
dF9zcWxFcnJvcikKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywg
b3V0X3NxbEVycm9yKTsKKyAgICAgICAgaWYgKG91dF9zY3JlZW5Db2xvci5oYXNWYWx1ZSgpKQor
ICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCAqb3V0X3NjcmVl
bkNvbG9yKTsKKyAgICAgICAgaWYgKG91dF9hbHRlcm5hdGVDb2xvcnMpCisgICAgICAgICAgICBy
ZXN1bHQtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIG91dF9hbHRlcm5hdGVDb2xvcnMp
OworICAgICAgICBpZiAob3V0X3ByaW50Q29sb3IuaGFzVmFsdWUoKSkKKyAgICAgICAgICAgIHJl
c3VsdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCAqb3V0X3ByaW50Q29sb3IpOworICAgIH0K
KyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5z
ZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKKyAgICBlbHNl
CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2Vu
ZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Cit9CisKK0RhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZh
bHVlc0NhbGxiYWNrOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNr
KFJlZjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBiYWNrZW5kRGlzcGF0Y2hlciwgaW50IGlkKSA6IEJh
Y2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UoV1RGTW92ZShiYWNrZW5kRGlzcGF0Y2hlciks
IGlkKSB7IH0KKwordm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0
ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjazo6c2VuZFN1Y2Nlc3MoUmVmUHRy
PEpTT046OkFycmF5T2Y8U3RyaW5nPj4mJiBjb2x1bW5OYW1lcywgT3B0aW9uYWw8U3RyaW5nPiYg
bm90ZXMsIE9wdGlvbmFsPGRvdWJsZT4mIHRpbWVzdGFtcCwgT3B0aW9uYWw8SlNPTjo6T2JqZWN0
PiYgdmFsdWVzLCBPcHRpb25hbDxKU09OOjpWYWx1ZT4mIHBheWxvYWQsIE9wdGlvbmFsPGludD4m
IGRhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+
JiYgc3FsRXJyb3IsIE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmlt
YXJ5Q29sb3JzPiBzY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFi
YXNlOjpDb2xvckxpc3Q+JiYgYWx0ZXJuYXRlQ29sb3JzLCBPcHRpb25hbDxEYXRhYmFzZUJhY2tl
bmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvcj4gcHJpbnRDb2xvcikKK3sKKyAgICBSZWY8
SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAg
aWYgKGNvbHVtbk5hbWVzKQorICAgICAgICBqc29uTWVzc2FnZS0+c2V0QXJyYXkoImNvbHVtbk5h
bWVzIl9zLCBjb2x1bW5OYW1lcyk7CisgICAgaWYgKG5vdGVzLmhhc1ZhbHVlKCkpCisgICAgICAg
IGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm5vdGVzIl9zLCAqbm90ZXMpOworICAgIGlmICh0aW1l
c3RhbXAuaGFzVmFsdWUoKSkKKyAgICAgICAganNvbk1lc3NhZ2UtPnNldERvdWJsZSgidGltZXN0
YW1wIl9zLCAqdGltZXN0YW1wKTsKKyAgICBpZiAodmFsdWVzLmhhc1ZhbHVlKCkpCisgICAgICAg
IGpzb25NZXNzYWdlLT5zZXRPYmplY3QoInZhbHVlcyJfcywgKnZhbHVlcyk7CisgICAgaWYgKHBh
eWxvYWQuaGFzVmFsdWUoKSkKKyAgICAgICAganNvbk1lc3NhZ2UtPnNldFZhbHVlKCJwYXlsb2Fk
Il9zLCAqcGF5bG9hZCk7CisgICAgaWYgKGRhdGFiYXNlSWQuaGFzVmFsdWUoKSkKKyAgICAgICAg
anNvbk1lc3NhZ2UtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsICpkYXRhYmFzZUlkKTsKKyAg
ICBpZiAoc3FsRXJyb3IpCisgICAgICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoInNxbEVycm9y
Il9zLCBzcWxFcnJvcik7CisgICAgaWYgKHNjcmVlbkNvbG9yLmhhc1ZhbHVlKCkpCisgICAgICAg
IGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCAqc2NyZWVuQ29sb3IpOwor
ICAgIGlmIChhbHRlcm5hdGVDb2xvcnMpCisgICAgICAgIGpzb25NZXNzYWdlLT5zZXRBcnJheSgi
YWx0ZXJuYXRlQ29sb3JzIl9zLCBhbHRlcm5hdGVDb2xvcnMpOworICAgIGlmIChwcmludENvbG9y
Lmhhc1ZhbHVlKCkpCisgICAgICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoInByaW50Q29sb3Ii
X3MsICpwcmludENvbG9yKTsKKyAgICBDYWxsYmFja0Jhc2U6OnNlbmRTdWNjZXNzKFdURk1vdmUo
anNvbk1lc3NhZ2UpKTsKK30KKwordm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVj
dXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpT
T046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKQoreworICAgIGludCBpbl9kYXRhYmFzZUlkID0gbV9i
YWNrZW5kRGlzcGF0Y2hlci0+Z2V0SW50ZWdlcihwYXJhbWV0ZXJzLmdldCgpLCAiZGF0YWJhc2VJ
ZCJfcywgbnVsbHB0cik7CisgICAgU3RyaW5nIGluX3F1ZXJ5ID0gbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksICJxdWVyeSJfcywgbnVsbHB0cik7CisgICAg
aWYgKG1fYmFja2VuZERpc3BhdGNoZXItPmhhc1Byb3RvY29sRXJyb3JzKCkpIHsKKyAgICAgICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hl
cjo6SW52YWxpZFBhcmFtcywgIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnRGF0YWJhc2UuZXhl
Y3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMnIGNhbid0IGJlIHByb2Nlc3NlZCJfcyk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKKyAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7CisgICAgICAg
IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1
ZXMocmVxdWVzdElkLCBpbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
CisKKyAgICBSZWY8RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxB
c3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2s+IGNhbGxiYWNrID0gYWRvcHRSZWYoKm5l
dyBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXNDYWxsYmFjayhtX2JhY2tlbmREaXNwYXRjaGVyLmNvcHlSZWYoKSwgcmVx
dWVzdElkKSk7CisgICAgbV9hZ2VudC0+ZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1
ZXMoaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnksIGNhbGxiYWNrLmNvcHlSZWYoKSk7CisKK30KKwor
dm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMU3luYyhsb25nIHJlcXVl
c3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKQoreworICAgIGludCBpbl9k
YXRhYmFzZUlkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0SW50ZWdlcihwYXJhbWV0ZXJzLmdl
dCgpLCAiZGF0YWJhc2VJZCJfcywgbnVsbHB0cik7CisgICAgU3RyaW5nIGluX3F1ZXJ5ID0gbV9i
YWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksICJxdWVyeSJfcywg
bnVsbHB0cik7CisgICAgaWYgKG1fYmFja2VuZERpc3BhdGNoZXItPmhhc1Byb3RvY29sRXJyb3Jz
KCkpIHsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihC
YWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhv
ZCAnRGF0YWJhc2UuZXhlY3V0ZVNRTFN5bmMnIGNhbid0IGJlIHByb2Nlc3NlZCJfcyk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKKyAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7CisgICAgICAgIG1fYWx0
ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZVNRTFN5bmMocmVxdWVzdElkLCBpbl9kYXRhYmFzZUlk
LCBpbl9xdWVyeSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyAgICBFcnJvclN0cmluZyBlcnJvcjsK
KyAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwor
ICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IG91dF9jb2x1bW5OYW1lczsKKyAgICBT
dHJpbmcgb3V0X25vdGVzOworICAgIGRvdWJsZSBvdXRfdGltZXN0YW1wOworICAgIEpTT046Ok9i
amVjdCBvdXRfdmFsdWVzOworICAgIEpTT046OlZhbHVlIG91dF9wYXlsb2FkOworICAgIGludCBv
dXRfZGF0YWJhc2VJZDsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6
OkVycm9yPiBvdXRfc3FsRXJyb3I7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpDb2xvckxpc3Q+IG91dF9hbHRlcm5hdGVDb2xvcnM7CisgICAgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgb3V0X3NjcmVlbkNvbG9yOworICAgIERh
dGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yIG91dF9wcmludENvbG9y
OworICAgIG1fYWdlbnQtPmV4ZWN1dGVTUUxTeW5jKGVycm9yLCBpbl9kYXRhYmFzZUlkLCBpbl9x
dWVyeSwgb3V0X2NvbHVtbk5hbWVzLCAmb3V0X25vdGVzLCAmb3V0X3RpbWVzdGFtcCwgb3V0X3Zh
bHVlcywgJm91dF9wYXlsb2FkLCAmb3V0X2RhdGFiYXNlSWQsIG91dF9zcWxFcnJvciwgb3V0X2Fs
dGVybmF0ZUNvbG9ycywgJm91dF9zY3JlZW5Db2xvciwgJm91dF9wcmludENvbG9yKTsKKworICAg
IGlmICghZXJyb3IubGVuZ3RoKCkpIHsKKyAgICAgICAgcmVzdWx0LT5zZXRBcnJheSgiY29sdW1u
TmFtZXMiX3MsIG91dF9jb2x1bW5OYW1lcyk7CisgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJu
b3RlcyJfcywgb3V0X25vdGVzKTsKKyAgICAgICAgcmVzdWx0LT5zZXREb3VibGUoInRpbWVzdGFt
cCJfcywgb3V0X3RpbWVzdGFtcCk7CisgICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJ2YWx1ZXMi
X3MsIG91dF92YWx1ZXMpOworICAgICAgICByZXN1bHQtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBv
dXRfcGF5bG9hZCk7CisgICAgICAgIHJlc3VsdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywg
b3V0X2RhdGFiYXNlSWQpOworICAgICAgICByZXN1bHQtPnNldE9iamVjdCgic3FsRXJyb3IiX3Ms
IG91dF9zcWxFcnJvcik7CisgICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9y
cyJfcywgb3V0X2FsdGVybmF0ZUNvbG9ycyk7CisgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJz
Y3JlZW5Db2xvciJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1D
b25zdGFudFZhbHVlKG91dF9zY3JlZW5Db2xvcikpOworICAgICAgICByZXN1bHQtPnNldFN0cmlu
ZygicHJpbnRDb2xvciJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVu
dW1Db25zdGFudFZhbHVlKG91dF9wcmludENvbG9yKSk7CisgICAgfQorICAgIGlmICghZXJyb3Iu
bGVuZ3RoKCkpCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1
ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOworICAgIGVsc2UKKyAgICAgICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2Vy
dmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKK30KKworRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrOjpFeGVjdXRlU1FMQXN5bmNDYWxsYmFj
ayhSZWY8QmFja2VuZERpc3BhdGNoZXI+JiYgYmFja2VuZERpc3BhdGNoZXIsIGludCBpZCkgOiBC
YWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlKFdURk1vdmUoYmFja2VuZERpc3BhdGNoZXIp
LCBpZCkgeyB9CisKK3ZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1
dGVTUUxBc3luY0NhbGxiYWNrOjpzZW5kU3VjY2VzcyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJp
bmc+PiYmIGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG5vdGVzLCBkb3VibGUgdGltZXN0YW1w
LCBKU09OOjpPYmplY3QgdmFsdWVzLCBKU09OOjpWYWx1ZSBwYXlsb2FkLCBpbnQgZGF0YWJhc2VJ
ZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mJiBzcWxFcnJv
ciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgc2NyZWVuQ29s
b3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYmIGFs
dGVybmF0ZUNvbG9ycywgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29s
b3IgcHJpbnRDb2xvcikKK3sKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpT
T046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAganNvbk1lc3NhZ2UtPnNldEFycmF5KCJjb2x1bW5O
YW1lcyJfcywgY29sdW1uTmFtZXMpOworICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm5vdGVz
Il9zLCBub3Rlcyk7CisgICAganNvbk1lc3NhZ2UtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCB0
aW1lc3RhbXApOworICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoInZhbHVlcyJfcywgdmFsdWVz
KTsKKyAgICBqc29uTWVzc2FnZS0+c2V0VmFsdWUoInBheWxvYWQiX3MsIHBheWxvYWQpOworICAg
IGpzb25NZXNzYWdlLT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCBkYXRhYmFzZUlkKTsKKyAg
ICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgc3FsRXJyb3IpOworICAgIGpz
b25NZXNzYWdlLT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCBJbnNwZWN0b3I6OlByb3RvY29s
OjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoc2NyZWVuQ29sb3IpKTsKKyAgICBq
c29uTWVzc2FnZS0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgYWx0ZXJuYXRlQ29sb3Jz
KTsKKyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCBJbnNwZWN0b3I6
OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUocHJpbnRDb2xvcikp
OworICAgIENhbGxiYWNrQmFzZTo6c2VuZFN1Y2Nlc3MoV1RGTW92ZShqc29uTWVzc2FnZSkpOwor
fQorCit2b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxBc3luYyhsb25n
IHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKQoreworICAgIGlu
dCBpbl9kYXRhYmFzZUlkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0SW50ZWdlcihwYXJhbWV0
ZXJzLmdldCgpLCAiZGF0YWJhc2VJZCJfcywgbnVsbHB0cik7CisgICAgU3RyaW5nIGluX3F1ZXJ5
ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksICJxdWVy
eSJfcywgbnVsbHB0cik7CisgICAgaWYgKG1fYmFja2VuZERpc3BhdGNoZXItPmhhc1Byb3RvY29s
RXJyb3JzKCkpIHsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xF
cnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgIlNvbWUgYXJndW1lbnRzIG9m
IG1ldGhvZCAnRGF0YWJhc2UuZXhlY3V0ZVNRTEFzeW5jJyBjYW4ndCBiZSBwcm9jZXNzZWQiX3Mp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCisgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeworICAgICAg
ICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVTUUxBc3luYyhyZXF1ZXN0SWQsIGluX2Rh
dGFiYXNlSWQsIGluX3F1ZXJ5KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZiAvLyBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworICAgIFJlZjxEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2s+IGNhbGxi
YWNrID0gYWRvcHRSZWYoKm5ldyBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhl
Y3V0ZVNRTEFzeW5jQ2FsbGJhY2sobV9iYWNrZW5kRGlzcGF0Y2hlci5jb3B5UmVmKCksIHJlcXVl
c3RJZCkpOworICAgIG1fYWdlbnQtPmV4ZWN1dGVTUUxBc3luYyhpbl9kYXRhYmFzZUlkLCBpbl9x
dWVyeSwgY2FsbGJhY2suY29weVJlZigpKTsKKworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVn
aW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIK
KyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgRnJvbnRlbmRSb3V0ZXI7CisK
K30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNw
YXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0
dHJpYnV0ZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5o
IgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Igewor
Cit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmRE
aXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0
cmlidXRlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KKyNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK25hbWVzcGFjZSBQcm90
b2NvbCB7CisKKworCisvLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KK25hbWVzcGFjZSBEYXRhYmFz
ZSB7CitjbGFzcyBFcnJvcjsKK2VudW0gY2xhc3MgUHJpbWFyeUNvbG9yczsKK30gLy8gRGF0YWJh
c2UKKy8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KKworCisvLyBUeXBlZGVmcy4KK25h
bWVzcGFjZSBEYXRhYmFzZSB7CisvKiBVbmlxdWUgaWRlbnRpZmllciBvZiBEYXRhYmFzZSBvYmpl
Y3QuICovCit0eXBlZGVmIGludCBEYXRhYmFzZUlkOwordHlwZWRlZiBKU09OOjpBcnJheU9mPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiBDb2xvckxpc3Q7Cit9
IC8vIERhdGFiYXNlCisvLyBFbmQgb2YgdHlwZWRlZnMuCisKK25hbWVzcGFjZSBUZXN0SGVscGVy
cyB7CisKK1N0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSk7CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkKK3sK
KyAgICByZXR1cm4gZ2V0RW51bUNvbnN0YW50VmFsdWUoc3RhdGljX2Nhc3Q8aW50PihlbnVtVmFs
dWUpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKKworbmFtZXNwYWNlIERhdGFi
YXNlIHsKKworZW51bSBjbGFzcyBQcmltYXJ5Q29sb3JzIHsKKyAgICBSZWQgPSAwLAorICAgIEdy
ZWVuID0gMSwKKyAgICBCbHVlID0gMiwKK307IC8vIGVudW0gY2xhc3MgUHJpbWFyeUNvbG9ycwor
CisvKiBEYXRhYmFzZSBlcnJvci4gKi8KK2NsYXNzIEVycm9yIDogcHVibGljIEpTT046Ok9iamVj
dEJhc2UgeworcHVibGljOgorICAgIGVudW0geworICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCisg
ICAgICAgIE1lc3NhZ2VTZXQgPSAxIDw8IDAsCisgICAgICAgIENvZGVTZXQgPSAxIDw8IDEsCisg
ICAgICAgIEFsbEZpZWxkc1NldCA9IChNZXNzYWdlU2V0IHwgQ29kZVNldCkKKyAgICB9OworCisg
ICAgdGVtcGxhdGU8aW50IFNUQVRFPgorICAgIGNsYXNzIEJ1aWxkZXIgeworICAgIHByaXZhdGU6
CisgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVzdWx0OworCisgICAgICAgIHRlbXBs
YXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwg
U1RFUD4qPih0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXIoUmVmPC8qRXJyb3Iq
L0pTT046Ok9iamVjdD4mJiBvYmplY3QpCisgICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUo
b2JqZWN0KSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0g
Tm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CisgICAgICAg
IH0KKyAgICAgICAgZnJpZW5kIGNsYXNzIEVycm9yOworICAgIHB1YmxpYzoKKworICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgTWVzc2FnZVNldD4mIHNldE1lc3NhZ2UoY29uc3QgU3RyaW5nJiB2YWx1
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE1lc3Nh
Z2VTZXQpLCBwcm9wZXJ0eV9tZXNzYWdlX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXRTdHJpbmcoIm1lc3NhZ2UiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8TWVzc2FnZVNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBDb2RlU2V0PiYgc2V0Q29kZShpbnQgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2RlU2V0KSwgcHJvcGVydHlfY29kZV9hbHJlYWR5
X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcigiY29kZSJfcywgdmFsdWUp
OworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb2RlU2V0PigpOworICAgICAgICB9CisK
KyAgICAgICAgUmVmPEVycm9yPiByZWxlYXNlKCkKKyAgICAgICAgeworICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsK
KyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihFcnJvcikgPT0gc2l6ZW9mKEpTT046
Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsKKworICAgICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4g
anNvblJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgICAgICBhdXRv
IHJlc3VsdCA9IFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPEVycm9yPio+KCZqc29uUmVz
dWx0KSk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgfTsKKwor
ICAgIC8qCisgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgorICAgICAqIFJlZjxFcnJvcj4g
cmVzdWx0ID0gRXJyb3I6OmNyZWF0ZSgpCisgICAgICogICAgIC5zZXRNZXNzYWdlKC4uLikKKyAg
ICAgKiAgICAgLnNldENvZGUoLi4uKQorICAgICAqICAgICAucmVsZWFzZSgpOworICAgICAqLwor
ICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOworICAg
IH0KK307CisKK30gLy8gRGF0YWJhc2UKKworCisKK25hbWVzcGFjZSBUZXN0SGVscGVycyB7CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFByb3RvY29sRW51bVR5cGU+CitPcHRpb25hbDxQcm90b2NvbEVu
dW1UeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJik7CisKKy8vIEVu
dW1zIGluIHRoZSAnRGF0YWJhc2UnIERvbWFpbgordGVtcGxhdGU8PgorT3B0aW9uYWw8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IHBhcnNlRW51bVZhbHVlRnJv
bVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4oY29u
c3QgU3RyaW5nJik7CisKK30gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCisKK30gLy8gbmFtZXNw
YWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCituYW1lc3BhY2UgV1RG
IHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOworCisvLyBIYXNo
IGRlY2xhcmF0aW9ucyBpbiB0aGUgJ0RhdGFiYXNlJyBEb21haW4KK3RlbXBsYXRlPD4KK3N0cnVj
dCBEZWZhdWx0SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9y
cz4geworICAgIHR5cGVkZWYgSW50SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6
UHJpbWFyeUNvbG9ycz4gSGFzaDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bE9iamVjdHMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMt
d2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29s
T2JqZWN0cy5oIgorCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFByb3Rv
Y29sIHsKKworbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKKworc3RhdGljIGNvbnN0IGNoYXIqIGNv
bnN0IGVudW1fY29uc3RhbnRfdmFsdWVzW10gPSB7CisgICAgInJlZCIsCisgICAgImdyZWVuIiwK
KyAgICAiYmx1ZSIsCisgICAgImN5YW4iLAorICAgICJtYWdlbnRhIiwKKyAgICAieWVsbG93IiwK
KyAgICAiYmxhY2siLAorfTsKKworU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2Rl
KSB7CisgICAgcmV0dXJuIGVudW1fY29uc3RhbnRfdmFsdWVzW2NvZGVdOworfQorCisvLyBFbnVt
cyBpbiB0aGUgJ0RhdGFiYXNlJyBEb21haW4KKwordGVtcGxhdGU8PgorT3B0aW9uYWw8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IHBhcnNlRW51bVZhbHVlRnJv
bVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4oY29u
c3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKK3sKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNv
bnN0YW50VmFsdWVzW10gPSB7CisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM6OlJlZCwKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6
OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9yczo6R3JlZW4sCisgICAgICAgIChzaXpl
X3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM6OkJsdWUsCisg
ICAgfTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDM7ICsraSkKKyAgICAgICAgaWYgKHBy
b3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkK
KyAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1h
cnlDb2xvcnMpY29uc3RhbnRWYWx1ZXNbaV07CisKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
fQorCit9IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycworCisKKworfSAvLyBuYW1lc3BhY2UgUHJv
dG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sT2JqZWN0cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmRE
aXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMt
d2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaW1wb3J0IDx3dGYvUGxhdGZvcm0uaD4KKworI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2luY2x1
ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworQHByb3RvY29sIFRlc3RQcm90b2NvbERhdGFiYXNlRG9t
YWluSGFuZGxlcjsKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworY2xhc3MgT2JqQ0luc3Bl
Y3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJuYXRlRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Citw
dWJsaWM6CisgICAgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoaWQ8VGVz
dFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBo
YW5kbGVyOyB9CisgICAgdm9pZCBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxv
bmcgcmVxdWVzdElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkg
ZmluYWw7CisgICAgdm9pZCBleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25n
IHJlcXVlc3RJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpIGZp
bmFsOworICAgIHZvaWQgZXhlY3V0ZVNRTFN5bmMobG9uZyByZXF1ZXN0SWQsIGludCBpbl9kYXRh
YmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KSBmaW5hbDsKKyAgICB2b2lkIGV4ZWN1dGVT
UUxBc3luYyhsb25nIHJlcXVlc3RJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYg
aW5fcXVlcnkpIGZpbmFsOworcHJpdmF0ZToKKyAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29s
RGF0YWJhc2VEb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKK307CisKK30gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVy
cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0K
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0
dHJpYnV0ZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
KyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNo
ZXJzLmgiCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2luY2x1ZGUgIlRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+
CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit2b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcg
cmVxdWVzdElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkKK3sK
KyAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoZXhlY3V0
ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1dpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxs
YmFjazpkYXRhYmFzZUlkOnF1ZXJ5OildKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCkt
PnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9k
Tm90Rm91bmQsICInRGF0YWJhc2UuZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcycg
d2FzIG5vdCBmb3VuZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5k
aW5nRXJyb3JzKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZCBlcnJvckNhbGxi
YWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJF
cnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vy
cm9ycygpOworICAgIH07CisKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxO
U1N0cmluZz4qLyAqKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqKm5vdGVzLCBkb3VibGUgKnRpbWVz
dGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmpl
Y3QgKipwYXlsb2FkLCBpbnQgKmRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3Ig
KipzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzICpzY3JlZW5Db2xv
ciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICoqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xE
YXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yICpwcmlu
dENvbG9yKSB7CisgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdE9iamVjdCA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElP
TkFMX1BBUkFNRVRFUihjb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOworICAgICAgICBUSFJP
V19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIobm90ZXMsIEAibm90ZXMiKTsK
KyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHZhbHVl
cywgQCJ2YWx1ZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxf
UEFSQU1FVEVSKHBheWxvYWQsIEAicGF5bG9hZCIpOworICAgICAgICBUSFJPV19FWENFUFRJT05f
Rk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoc3FsRXJyb3IsIEAic3FsRXJyb3IiKTsKKyAgICAg
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKGFsdGVybmF0ZUNv
bG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsKKyAgICAgICAgaWYgKGNvbHVtbk5hbWVzKQorICAg
ICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0
cmluZ0FycmF5KCpjb2x1bW5OYW1lcykpOworICAgICAgICBpZiAobm90ZXMpCisgICAgICAgICAg
ICByZXN1bHRPYmplY3QtPnNldFN0cmluZygibm90ZXMiX3MsICpub3Rlcyk7CisgICAgICAgIGlm
ICh0aW1lc3RhbXApCisgICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldERvdWJsZSgidGltZXN0
YW1wIl9zLCAqdGltZXN0YW1wKTsKKyAgICAgICAgaWYgKHZhbHVlcykKKyAgICAgICAgICAgIHJl
c3VsdE9iamVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFsqdmFsdWVzIHRvSlNPTk9iamVjdF0p
OworICAgICAgICBpZiAocGF5bG9hZCkKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0VmFs
dWUoInBheWxvYWQiX3MsIFsqcGF5bG9hZCB0b0pTT05PYmplY3RdKTsKKyAgICAgICAgaWYgKGRh
dGFiYXNlSWQpCisgICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldEludGVnZXIoImRhdGFiYXNl
SWQiX3MsICpkYXRhYmFzZUlkKTsKKyAgICAgICAgaWYgKHNxbEVycm9yKQorICAgICAgICAgICAg
cmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBbKnNxbEVycm9yIHRvSlNPTk9i
amVjdF0pOworICAgICAgICBpZiAoc2NyZWVuQ29sb3IpCisgICAgICAgICAgICByZXN1bHRPYmpl
Y3QtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcoKnNjcmVlbkNv
bG9yKSk7CisgICAgICAgIGlmIChhbHRlcm5hdGVDb2xvcnMpCisgICAgICAgICAgICByZXN1bHRP
YmplY3QtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KCph
bHRlcm5hdGVDb2xvcnMpKTsKKyAgICAgICAgaWYgKHByaW50Q29sb3IpCisgICAgICAgICAgICBy
ZXN1bHRPYmplY3QtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgdG9Qcm90b2NvbFN0cmluZygq
cHJpbnRDb2xvcikpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2Uo
cmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdE9iamVjdCksIGZhbHNlKTsKKyAgICB9OworCisgICAg
aW50IG9faW5fZGF0YWJhc2VJZCA9IGluX2RhdGFiYXNlSWQ7CisgICAgTlNTdHJpbmcgKm9faW5f
cXVlcnkgPSBpbl9xdWVyeTsKKworICAgIFttX2RlbGVnYXRlIGV4ZWN1dGVTUUxTeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXNXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxs
YmFjazpzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDpvX2luX2RhdGFiYXNlSWQgcXVlcnk6b19p
bl9xdWVyeV07Cit9CisKK3ZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXI6OmV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVzdElkLCBp
bnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkKK3sKKyAgICBpZiAoIVtt
X2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoZXhlY3V0ZVNRTEFzeW5jT3B0
aW9uYWxSZXR1cm5WYWx1ZXNXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6ZGF0YWJh
c2VJZDpxdWVyeTopXSkgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90
b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAi
J0RhdGFiYXNlLmV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzJyB3YXMgbm90IGZv
dW5kIl9zKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMo
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5T
U3RyaW5nICplcnJvcikgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90
b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJv
cik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Cisg
ICAgfTsKKworICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiov
ICoqY29sdW1uTmFtZXMsIE5TU3RyaW5nICoqbm90ZXMsIGRvdWJsZSAqdGltZXN0YW1wLCBSV0lQ
cm90b2NvbEpTT05PYmplY3QgKip2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnBheWxv
YWQsIGludCAqZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKnNxbEVycm9y
LCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgKnNjcmVlbkNvbG9yLCBOU0FycmF5
Lyo8TlNTdHJpbmc+Ki8gKiphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhl
Y3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yICpwcmludENvbG9yKSB7
CisgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdE9iamVjdCA9IEpTT046Ok9iamVjdDo6
Y3JlYXRlKCk7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFN
RVRFUihjb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOworICAgICAgICBUSFJPV19FWENFUFRJ
T05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIobm90ZXMsIEAibm90ZXMiKTsKKyAgICAgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHZhbHVlcywgQCJ2YWx1
ZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVS
KHBheWxvYWQsIEAicGF5bG9hZCIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9P
UFRJT05BTF9QQVJBTUVURVIoc3FsRXJyb3IsIEAic3FsRXJyb3IiKTsKKyAgICAgICAgVEhST1df
RVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKGFsdGVybmF0ZUNvbG9ycywgQCJh
bHRlcm5hdGVDb2xvcnMiKTsKKyAgICAgICAgaWYgKGNvbHVtbk5hbWVzKQorICAgICAgICAgICAg
cmVzdWx0T2JqZWN0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0cmluZ0FycmF5
KCpjb2x1bW5OYW1lcykpOworICAgICAgICBpZiAobm90ZXMpCisgICAgICAgICAgICByZXN1bHRP
YmplY3QtPnNldFN0cmluZygibm90ZXMiX3MsICpub3Rlcyk7CisgICAgICAgIGlmICh0aW1lc3Rh
bXApCisgICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCAq
dGltZXN0YW1wKTsKKyAgICAgICAgaWYgKHZhbHVlcykKKyAgICAgICAgICAgIHJlc3VsdE9iamVj
dC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFsqdmFsdWVzIHRvSlNPTk9iamVjdF0pOworICAgICAg
ICBpZiAocGF5bG9hZCkKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0VmFsdWUoInBheWxv
YWQiX3MsIFsqcGF5bG9hZCB0b0pTT05PYmplY3RdKTsKKyAgICAgICAgaWYgKGRhdGFiYXNlSWQp
CisgICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsICpk
YXRhYmFzZUlkKTsKKyAgICAgICAgaWYgKHNxbEVycm9yKQorICAgICAgICAgICAgcmVzdWx0T2Jq
ZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBbKnNxbEVycm9yIHRvSlNPTk9iamVjdF0pOwor
ICAgICAgICBpZiAoc2NyZWVuQ29sb3IpCisgICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0
cmluZygic2NyZWVuQ29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcoKnNjcmVlbkNvbG9yKSk7Cisg
ICAgICAgIGlmIChhbHRlcm5hdGVDb2xvcnMpCisgICAgICAgICAgICByZXN1bHRPYmplY3QtPnNl
dEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KCphbHRlcm5hdGVD
b2xvcnMpKTsKKyAgICAgICAgaWYgKHByaW50Q29sb3IpCisgICAgICAgICAgICByZXN1bHRPYmpl
Y3QtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgdG9Qcm90b2NvbFN0cmluZygqcHJpbnRDb2xv
cikpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElk
LCBXVEZNb3ZlKHJlc3VsdE9iamVjdCksIGZhbHNlKTsKKyAgICB9OworCisgICAgaW50IG9faW5f
ZGF0YWJhc2VJZCA9IGluX2RhdGFiYXNlSWQ7CisgICAgTlNTdHJpbmcgKm9faW5fcXVlcnkgPSBp
bl9xdWVyeTsKKworICAgIFttX2RlbGVnYXRlIGV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJu
VmFsdWVzV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3Vj
Y2Vzc0NhbGxiYWNrIGRhdGFiYXNlSWQ6b19pbl9kYXRhYmFzZUlkIHF1ZXJ5Om9faW5fcXVlcnld
OworfQorCit2b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVj
dXRlU1FMU3luYyhsb25nIHJlcXVlc3RJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmlu
ZyYgaW5fcXVlcnkpCit7CisgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6
QHNlbGVjdG9yKGV4ZWN1dGVTUUxTeW5jV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNr
OmRhdGFiYXNlSWQ6cXVlcnk6KV0pIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVw
b3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RG
b3VuZCwgIidEYXRhYmFzZS5leGVjdXRlU1FMU3luYycgd2FzIG5vdCBmb3VuZCJfcyk7CisgICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3Ip
IHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1
ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgIH07CisKKyAgICBp
ZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqY29sdW1uTmFtZXMs
IE5TU3RyaW5nICpub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0
ICp2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQs
IFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKnNxbEVycm9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+
Ki8gKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzIHNj
cmVlbkNvbG9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvciBw
cmludENvbG9yKSB7CisgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdE9iamVjdCA9IEpT
T046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlS
RURfUEFSQU1FVEVSKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7CisgICAgICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG5vdGVzLCBAIm5vdGVzIik7CisgICAg
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHZhbHVlcywgQCJ2YWx1
ZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIocGF5
bG9hZCwgQCJwYXlsb2FkIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURf
UEFSQU1FVEVSKHNxbEVycm9yLCBAInNxbEVycm9yIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKGFsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xv
cnMiKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIHRv
SlNPTlN0cmluZ0FycmF5KGNvbHVtbk5hbWVzKSk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0
U3RyaW5nKCJub3RlcyJfcywgbm90ZXMpOworICAgICAgICByZXN1bHRPYmplY3QtPnNldERvdWJs
ZSgidGltZXN0YW1wIl9zLCB0aW1lc3RhbXApOworICAgICAgICByZXN1bHRPYmplY3QtPnNldE9i
amVjdCgidmFsdWVzIl9zLCBbdmFsdWVzIHRvSlNPTk9iamVjdF0pOworICAgICAgICByZXN1bHRP
YmplY3QtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBbcGF5bG9hZCB0b0pTT05PYmplY3RdKTsKKyAg
ICAgICAgcmVzdWx0T2JqZWN0LT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCBkYXRhYmFzZUlk
KTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBbc3FsRXJy
b3IgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoImFsdGVy
bmF0ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5nQXJyYXkoYWx0ZXJuYXRlQ29sb3JzKSk7CisgICAg
ICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgdG9Qcm90b2NvbFN0
cmluZyhzY3JlZW5Db2xvcikpOworICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygicHJp
bnRDb2xvciJfcywgdG9Qcm90b2NvbFN0cmluZyhwcmludENvbG9yKSk7CisgICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0T2Jq
ZWN0KSwgZmFsc2UpOworICAgIH07CisKKyAgICBpbnQgb19pbl9kYXRhYmFzZUlkID0gaW5fZGF0
YWJhc2VJZDsKKyAgICBOU1N0cmluZyAqb19pbl9xdWVyeSA9IGluX3F1ZXJ5OworCisgICAgW21f
ZGVsZWdhdGUgZXhlY3V0ZVNRTFN5bmNXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1
Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDpvX2luX2RhdGFiYXNlSWQg
cXVlcnk6b19pbl9xdWVyeV07Cit9CisKK3ZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxBc3luYyhsb25nIHJlcXVlc3RJZCwgaW50IGluX2RhdGFi
YXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpCit7CisgICAgaWYgKCFbbV9kZWxlZ2F0ZSBy
ZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGV4ZWN1dGVTUUxBc3luY1dpdGhFcnJvckNhbGxi
YWNrOnN1Y2Nlc3NDYWxsYmFjazpkYXRhYmFzZUlkOnF1ZXJ5OildKSB7CisgICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlz
cGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRGF0YWJhc2UuZXhlY3V0ZVNRTEFzeW5jJyB3YXMg
bm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdF
cnJvcnMoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlkIGVycm9yQ2FsbGJhY2sg
PSBeKE5TU3RyaW5nICplcnJvcikgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBv
cnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9y
LCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3Jz
KCk7CisgICAgfTsKKworICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oTlNBcnJheS8qPE5TU3Ry
aW5nPiovICpjb2x1bW5OYW1lcywgTlNTdHJpbmcgKm5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBS
V0lQcm90b2NvbEpTT05PYmplY3QgKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXls
b2FkLCBpbnQgZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqc3FsRXJyb3Is
IFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyBzY3JlZW5Db2xvciwgTlNBcnJheS8q
PE5TU3RyaW5nPiovICphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0
ZVNRTEFzeW5jUHJpbnRDb2xvciBwcmludENvbG9yKSB7CisgICAgICAgIFJlZjxKU09OOjpPYmpl
Y3Q+IHJlc3VsdE9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5h
bWVzIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG5v
dGVzLCBAIm5vdGVzIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFS
QU1FVEVSKHZhbHVlcywgQCJ2YWx1ZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9S
RVFVSVJFRF9QQVJBTUVURVIocGF5bG9hZCwgQCJwYXlsb2FkIik7CisgICAgICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHNxbEVycm9yLCBAInNxbEVycm9yIik7Cisg
ICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKGFsdGVybmF0ZUNv
bG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJh
eSgiY29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KGNvbHVtbk5hbWVzKSk7CisgICAg
ICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJub3RlcyJfcywgbm90ZXMpOworICAgICAgICBy
ZXN1bHRPYmplY3QtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCB0aW1lc3RhbXApOworICAgICAg
ICByZXN1bHRPYmplY3QtPnNldE9iamVjdCgidmFsdWVzIl9zLCBbdmFsdWVzIHRvSlNPTk9iamVj
dF0pOworICAgICAgICByZXN1bHRPYmplY3QtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBbcGF5bG9h
ZCB0b0pTT05PYmplY3RdKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRJbnRlZ2VyKCJkYXRh
YmFzZUlkIl9zLCBkYXRhYmFzZUlkKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3Qo
InNxbEVycm9yIl9zLCBbc3FsRXJyb3IgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIHJlc3VsdE9i
amVjdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgdG9Qcm90b2NvbFN0cmluZyhzY3JlZW5D
b2xvcikpOworICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMi
X3MsIHRvSlNPTlN0cmluZ0FycmF5KGFsdGVybmF0ZUNvbG9ycykpOworICAgICAgICByZXN1bHRP
YmplY3QtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgdG9Qcm90b2NvbFN0cmluZyhwcmludENv
bG9yKSk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0
SWQsIFdURk1vdmUocmVzdWx0T2JqZWN0KSwgZmFsc2UpOworICAgIH07CisKKyAgICBpbnQgb19p
bl9kYXRhYmFzZUlkID0gaW5fZGF0YWJhc2VJZDsKKyAgICBOU1N0cmluZyAqb19pbl9xdWVyeSA9
IGluX3F1ZXJ5OworCisgICAgW21fZGVsZWdhdGUgZXhlY3V0ZVNRTEFzeW5jV2l0aEVycm9yQ2Fs
bGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrIGRhdGFi
YXNlSWQ6b19pbl9kYXRhYmFzZUlkIHF1ZXJ5Om9faW5fcXVlcnldOworfQorCit9IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0
Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0
cmlidXRlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I2ltcG9ydCA8d3RmL1BsYXRmb3JtLmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJv
dG9jb2wuaD4KKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50
ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAorQHByb3BlcnR5IChu
b25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNldERhdGFiYXNlSGFuZGxlcjopIGlkPFRlc3RQcm90
b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4gZGF0YWJhc2VIYW5kbGVyOworQGVuZAorCisKKyMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgorLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25m
aWd1cmF0aW9uLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW1wb3J0
ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRD
b3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+CisKK3VzaW5nIG5hbWVz
cGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0
aW9uCit7CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsK
KyAgICBpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+IF9kYXRhYmFzZUhhbmRs
ZXI7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxl
SW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5p
dF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIEFTU0VSVChjb250
cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAgcmV0dXJuIHNlbGY7
Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIFtfZGF0YWJhc2VIYW5kbGVyIHJlbGVhc2Vd
OworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAodm9pZClzZXREYXRhYmFzZUhhbmRsZXI6
KGlkPFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4paGFuZGxlcgoreworICAgIGlm
IChoYW5kbGVyID09IF9kYXRhYmFzZUhhbmRsZXIpCisgICAgICAgIHJldHVybjsKKworICAgIFtf
ZGF0YWJhc2VIYW5kbGVyIHJlbGVhc2VdOworICAgIF9kYXRhYmFzZUhhbmRsZXIgPSBbaGFuZGxl
ciByZXRhaW5dOworCisgICAgYXV0byBhbHRlcm5hdGVEaXNwYXRjaGVyID0gbWFrZVVuaXF1ZTxP
YmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7CisgICAgYXV0
byBhbHRlcm5hdGVBZ2VudCA9IG1ha2VVbmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciwgQWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlcj4+KCJEYXRhYmFzZSJfcywgKl9jb250cm9sbGVyLCBXVEZNb3ZlKGFsdGVybmF0ZURpc3Bh
dGNoZXIpKTsKKyAgICBfY29udHJvbGxlci0+YXBwZW5kRXh0cmFBZ2VudChXVEZNb3ZlKGFsdGVy
bmF0ZUFnZW50KSk7Cit9CisKKy0gKGlkPFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxl
cj4pZGF0YWJhc2VIYW5kbGVyCit7CisgICAgcmV0dXJuIF9kYXRhYmFzZUhhbmRsZXI7Cit9CisK
K0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKwor
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5q
c29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5oIgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNl
IEluc3BlY3RvcjsKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hl
cnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxGb3VuZGF0
aW9uL0ZvdW5kYXRpb24uaD4KKyNpbXBvcnQgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaW1wb3J0IDxX
ZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+CisKKworQGNsYXNzIFRlc3RQcm90
b2NvbERhdGFiYXNlRXJyb3I7CisKK3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90
b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycykgeworICAgIFRlc3RQcm90b2NvbERhdGFiYXNlUHJp
bWFyeUNvbG9yc1JlZCwKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNHcmVl
biwKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNCbHVlLAorfTsKKwordHlw
ZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3lu
Y09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvcikgeworICAgIFRlc3RQcm90b2NvbERhdGFi
YXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JDeWFuLAorICAg
IFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1By
aW50Q29sb3JNYWdlbnRhLAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNP
cHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JZZWxsb3csCisgICAgVGVzdFByb3RvY29sRGF0
YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvckJsYWNrLAor
fTsKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVj
dXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3IpIHsKKyAgICBUZXN0UHJv
dG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xv
ckN5YW4sCisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJl
dHVyblZhbHVlc1ByaW50Q29sb3JNYWdlbnRhLAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhl
Y3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yWWVsbG93LAorICAgIFRl
c3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmlu
dENvbG9yQmxhY2ssCit9OworCit0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9j
b2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvcikgeworICAgIFRlc3RQcm90b2NvbERh
dGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yQ3lhbiwKKyAgICBUZXN0UHJvdG9jb2xEYXRh
YmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvck1hZ2VudGEsCisgICAgVGVzdFByb3RvY29sRGF0
YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3JZZWxsb3csCisgICAgVGVzdFByb3RvY29sRGF0
YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3JCbGFjaywKK307CisKK3R5cGVkZWYgTlNfRU5V
TShOU0ludGVnZXIsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xv
cikgeworICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvckN5
YW4sCisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yTWFn
ZW50YSwKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JZ
ZWxsb3csCisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9y
QmxhY2ssCit9OworCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0Bp
bnRlcmZhY2UgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciA6IFJXSVByb3RvY29sSlNPTk9iamVj
dAorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3RyaW5n
ICosIGlkPiAqKXBheWxvYWQ7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVj
dDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKKy0gKGluc3RhbmNldHlwZSlp
bml0V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBjb2RlOihpbnQpY29kZTsKKy8qIHJl
cXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqbWVzc2FnZTsK
Ky8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCBjb2RlOwor
QGVuZAorCitAcHJvdG9jb2wgVGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyIDxOU09i
amVjdD4KK0BvcHRpb25hbAorLSAodm9pZClleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFs
dWVzV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxi
YWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKShOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKipjb2x1
bW5OYW1lcywgTlNTdHJpbmcgKipub3RlcywgZG91YmxlICp0aW1lc3RhbXAsIFJXSVByb3RvY29s
SlNPTk9iamVjdCAqKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqcGF5bG9hZCwgaW50
ICpkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqc3FsRXJyb3IsIFRlc3RQ
cm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0
cmluZz4qLyAqKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FM
U3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvciAqcHJpbnRDb2xvcikpc3VjY2Vzc0Nh
bGxiYWNrIGRhdGFiYXNlSWQ6KGludClkYXRhYmFzZUlkIHF1ZXJ5OihOU1N0cmluZyAqKXF1ZXJ5
OworLSAodm9pZClleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1dpdGhFcnJvckNh
bGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2Fs
bGJhY2s6KHZvaWQoXikoTlNBcnJheS8qPE5TU3RyaW5nPiovICoqY29sdW1uTmFtZXMsIE5TU3Ry
aW5nICoqbm90ZXMsIGRvdWJsZSAqdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKip2
YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnBheWxvYWQsIGludCAqZGF0YWJhc2VJZCwg
VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFz
ZVByaW1hcnlDb2xvcnMgKnNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiphbHRl
cm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxS
ZXR1cm5WYWx1ZXNQcmludENvbG9yICpwcmludENvbG9yKSlzdWNjZXNzQ2FsbGJhY2sgZGF0YWJh
c2VJZDooaW50KWRhdGFiYXNlSWQgcXVlcnk6KE5TU3RyaW5nICopcXVlcnk7CistICh2b2lkKWV4
ZWN1dGVTUUxTeW5jV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSll
cnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKShOU0FycmF5Lyo8TlNTdHJpbmc+
Ki8gKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJXSVBy
b3RvY29sSlNPTk9iamVjdCAqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnBheWxvYWQs
IGludCBkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpzcWxFcnJvciwgTlNB
cnJheS8qPE5TU3RyaW5nPiovICphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNl
UHJpbWFyeUNvbG9ycyBzY3JlZW5Db2xvciwgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FM
U3luY1ByaW50Q29sb3IgcHJpbnRDb2xvcikpc3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNlSWQ6KGlu
dClkYXRhYmFzZUlkIHF1ZXJ5OihOU1N0cmluZyAqKXF1ZXJ5OworLSAodm9pZClleGVjdXRlU1FM
QXN5bmNXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2Fs
bGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqY29s
dW1uTmFtZXMsIE5TU3RyaW5nICpub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUldJUHJvdG9jb2xK
U09OT2JqZWN0ICp2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5bG9hZCwgaW50IGRh
dGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKnNxbEVycm9yLCBUZXN0UHJvdG9j
b2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4q
LyAqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1By
aW50Q29sb3IgcHJpbnRDb2xvcikpc3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNlSWQ6KGludClkYXRh
YmFzZUlkIHF1ZXJ5OihOU1N0cmluZyAqKXF1ZXJ5OworQGVuZAorCisKKworCisjaW1wb3J0IDxX
ZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+CisKKyMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bEludGVybmFsLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13
aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNpbXBvcnQgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaW1wb3J0ICJUZXN0UHJv
dG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCisjaW1w
b3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNp
bXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKKworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFz
eW5jLWF0dHJpYnV0ZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKyNpbXBvcnQgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wu
aCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4K
KworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlw
ZT4KK09wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpOworCitpbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29s
RGF0YWJhc2VQcmltYXJ5Q29sb3JzIHZhbHVlKQoreworICAgIHN3aXRjaCh2YWx1ZSkgeworICAg
IGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzUmVkOgorICAgICAgICByZXR1
cm4gInJlZCJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc0dy
ZWVuOgorICAgICAgICByZXR1cm4gImdyZWVuIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0
YWJhc2VQcmltYXJ5Q29sb3JzQmx1ZToKKyAgICAgICAgcmV0dXJuICJibHVlIl9zOworICAgIH0K
K30KKwordGVtcGxhdGU8PgoraW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlUHJp
bWFyeUNvbG9ycz4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7Cisg
ICAgaWYgKHZhbHVlID09ICJyZWQiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJh
c2VQcmltYXJ5Q29sb3JzUmVkOworICAgIGlmICh2YWx1ZSA9PSAiZ3JlZW4iKQorICAgICAgICBy
ZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzR3JlZW47CisgICAgaWYgKHZh
bHVlID09ICJibHVlIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFy
eUNvbG9yc0JsdWU7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKworaW5saW5lIFN0cmlu
ZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRp
b25hbFJldHVyblZhbHVlc1ByaW50Q29sb3IgdmFsdWUpCit7CisgICAgc3dpdGNoKHZhbHVlKSB7
CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1
cm5WYWx1ZXNQcmludENvbG9yQ3lhbjoKKyAgICAgICAgcmV0dXJuICJjeWFuIl9zOworICAgIGNh
c2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVz
UHJpbnRDb2xvck1hZ2VudGE6CisgICAgICAgIHJldHVybiAibWFnZW50YSJfczsKKyAgICBjYXNl
IFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1By
aW50Q29sb3JZZWxsb3c6CisgICAgICAgIHJldHVybiAieWVsbG93Il9zOworICAgIGNhc2UgVGVz
dFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRD
b2xvckJsYWNrOgorICAgICAgICByZXR1cm4gImJsYWNrIl9zOworICAgIH0KK30KKwordGVtcGxh
dGU8PgoraW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNP
cHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3I+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBT
dHJpbmcmIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSAiY3lhbiIpCisgICAgICAgIHJldHVy
biBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQ
cmludENvbG9yQ3lhbjsKKyAgICBpZiAodmFsdWUgPT0gIm1hZ2VudGEiKQorICAgICAgICByZXR1
cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVz
UHJpbnRDb2xvck1hZ2VudGE7CisgICAgaWYgKHZhbHVlID09ICJ5ZWxsb3ciKQorICAgICAgICBy
ZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFs
dWVzUHJpbnRDb2xvclllbGxvdzsKKyAgICBpZiAodmFsdWUgPT0gImJsYWNrIikKKyAgICAgICAg
cmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZh
bHVlc1ByaW50Q29sb3JCbGFjazsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCitpbmxp
bmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FM
QXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3IgdmFsdWUpCit7CisgICAgc3dpdGNo
KHZhbHVlKSB7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09w
dGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvckN5YW46CisgICAgICAgIHJldHVybiAiY3lhbiJf
czsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxS
ZXR1cm5WYWx1ZXNQcmludENvbG9yTWFnZW50YToKKyAgICAgICAgcmV0dXJuICJtYWdlbnRhIl9z
OworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJl
dHVyblZhbHVlc1ByaW50Q29sb3JZZWxsb3c6CisgICAgICAgIHJldHVybiAieWVsbG93Il9zOwor
ICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVy
blZhbHVlc1ByaW50Q29sb3JCbGFjazoKKyAgICAgICAgcmV0dXJuICJibGFjayJfczsKKyAgICB9
Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvcj4gZnJvbVByb3RvY29s
U3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09ICJjeWFuIikK
KyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXNQcmludENvbG9yQ3lhbjsKKyAgICBpZiAodmFsdWUgPT0gIm1hZ2VudGEi
KQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRp
b25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JNYWdlbnRhOworICAgIGlmICh2YWx1ZSA9PSAieWVs
bG93IikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5j
T3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yWWVsbG93OworICAgIGlmICh2YWx1ZSA9PSAi
YmxhY2siKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5
bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JCbGFjazsKKyAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworfQorCitpbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29s
RGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3IgdmFsdWUpCit7CisgICAgc3dpdGNoKHZh
bHVlKSB7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRD
b2xvckN5YW46CisgICAgICAgIHJldHVybiAiY3lhbiJfczsKKyAgICBjYXNlIFRlc3RQcm90b2Nv
bERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yTWFnZW50YToKKyAgICAgICAgcmV0dXJu
ICJtYWdlbnRhIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3lu
Y1ByaW50Q29sb3JZZWxsb3c6CisgICAgICAgIHJldHVybiAieWVsbG93Il9zOworICAgIGNhc2Ug
VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3JCbGFjazoKKyAgICAg
ICAgcmV0dXJuICJibGFjayJfczsKKyAgICB9Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBPcHRp
b25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvcj4gZnJvbVBy
b3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09ICJj
eWFuIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQ
cmludENvbG9yQ3lhbjsKKyAgICBpZiAodmFsdWUgPT0gIm1hZ2VudGEiKQorICAgICAgICByZXR1
cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3JNYWdlbnRhOwor
ICAgIGlmICh2YWx1ZSA9PSAieWVsbG93IikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERh
dGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yWWVsbG93OworICAgIGlmICh2YWx1ZSA9PSAi
YmxhY2siKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3lu
Y1ByaW50Q29sb3JCbGFjazsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCitpbmxpbmUg
U3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5
bmNQcmludENvbG9yIHZhbHVlKQoreworICAgIHN3aXRjaCh2YWx1ZSkgeworICAgIGNhc2UgVGVz
dFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yQ3lhbjoKKyAgICAgICAg
cmV0dXJuICJjeWFuIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FM
QXN5bmNQcmludENvbG9yTWFnZW50YToKKyAgICAgICAgcmV0dXJuICJtYWdlbnRhIl9zOworICAg
IGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yWWVsbG93
OgorICAgICAgICByZXR1cm4gInllbGxvdyJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFi
YXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvckJsYWNrOgorICAgICAgICByZXR1cm4gImJsYWNr
Il9zOworICAgIH0KK30KKwordGVtcGxhdGU8PgoraW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2Nv
bERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvcj4gZnJvbVByb3RvY29sU3RyaW5nKGNv
bnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09ICJjeWFuIikKKyAgICAgICAg
cmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvckN5YW47
CisgICAgaWYgKHZhbHVlID09ICJtYWdlbnRhIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2Nv
bERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvck1hZ2VudGE7CisgICAgaWYgKHZhbHVl
ID09ICJ5ZWxsb3ciKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRl
U1FMQXN5bmNQcmludENvbG9yWWVsbG93OworICAgIGlmICh2YWx1ZSA9PSAiYmxhY2siKQorICAg
ICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9y
QmxhY2s7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKworfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKwor
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAi
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5o
IgorI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgorI2ltcG9ydCA8V2ViSW5zcGVj
dG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKwordXNpbmcgbmFtZXNwYWNlIElu
c3BlY3RvcjsKKworQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKERhdGFi
YXNlRG9tYWluKQorCisrICh2b2lkKV9wYXJzZURhdGFiYXNlSWQ6KE5TTnVtYmVyICoqKW91dFZh
bHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworKyAodm9pZClfcGFyc2VQcmltYXJ5Q29sb3Jz
OihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQp
X3BhcnNlQ29sb3JMaXN0OihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopb3V0VmFsdWUgZnJvbVBh
eWxvYWQ6KGlkKXBheWxvYWQ7CisrICh2b2lkKV9wYXJzZUVycm9yOihUZXN0UHJvdG9jb2xEYXRh
YmFzZUVycm9yICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworCitAZW5kCisK
K0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKERhdGFiYXNlRG9t
YWluKQorCisrICh2b2lkKV9wYXJzZURhdGFiYXNlSWQ6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZy
b21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQ
RShwYXlsb2FkLCBbTlNOdW1iZXIgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSAoTlNOdW1iZXIg
KilwYXlsb2FkOworfQorCisrICh2b2lkKV9wYXJzZVByaW1hcnlDb2xvcnM6KE5TTnVtYmVyICoq
KW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKKyAgICBPcHRpb25hbDxU
ZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnM+IHJlc3VsdCA9IEluc3BlY3Rvcjo6ZnJv
bVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycz4ocGF5bG9h
ZCk7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfRU5VTV9WQUxVRShyZXN1bHQsIEAiUHJp
bWFyeUNvbG9ycyIpOworICAgICpvdXRWYWx1ZSA9IEAocmVzdWx0LnZhbHVlKCkpOworfQorCisr
ICh2b2lkKV9wYXJzZUNvbG9yTGlzdDooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKW91dFZhbHVl
IGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURf
VFlQRShwYXlsb2FkLCBbTlNBcnJheS8qPE5TU3RyaW5nPiovIGNsYXNzXSk7CisgICAgKm91dFZh
bHVlID0gKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKXBheWxvYWQ7Cit9CisKKysgKHZvaWQpX3Bh
cnNlRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKiopb3V0VmFsdWUgZnJvbVBheWxv
YWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxv
YWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2Nv
bERhdGFiYXNlRXJyb3IgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKK30KKworQGVu
ZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisKKyMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29s
SW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisj
aW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorI2lt
cG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3Vz
aW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xE
YXRhYmFzZUVycm9yCisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwg
TlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQKK3sKKyAgICBpZiAoIShzZWxm
ID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAIm1lc3NhZ2UiXSwgQCJtZXNzYWdl
Iik7CisgICAgc2VsZi5tZXNzYWdlID0gcGF5bG9hZFtAIm1lc3NhZ2UiXTsKKworICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImNvZGUiXSwgQCJjb2Rl
Iik7CisgICAgc2VsZi5jb2RlID0gW3BheWxvYWRbQCJjb2RlIl0gaW50ZWdlclZhbHVlXTsKKwor
ICAgIHJldHVybiBzZWxmOworfQorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmpl
Y3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9iamVjdAoreworICAgIGlmICghKHNlbGYgPSBb
c3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmplY3QgdG9KU09OT2JqZWN0XS5nZXQoKV0pKQor
ICAgICAgICByZXR1cm4gbmlsOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBjb2RlOihpbnQpY29kZQor
eworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOwor
CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShtZXNzYWdlLCBAIm1l
c3NhZ2UiKTsKKworICAgIHNlbGYubWVzc2FnZSA9IG1lc3NhZ2U7CisgICAgc2VsZi5jb2RlID0g
Y29kZTsKKworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXNldE1lc3NhZ2U6KE5TU3Ry
aW5nICopbWVzc2FnZQoreworICAgIFtzdXBlciBzZXRTdHJpbmc6bWVzc2FnZSBmb3JLZXk6QCJt
ZXNzYWdlIl07Cit9CisKKy0gKE5TU3RyaW5nICopbWVzc2FnZQoreworICAgIHJldHVybiBbc3Vw
ZXIgc3RyaW5nRm9yS2V5OkAibWVzc2FnZSJdOworfQorCistICh2b2lkKXNldENvZGU6KGludClj
b2RlCit7CisgICAgW3N1cGVyIHNldEludGVnZXI6Y29kZSBmb3JLZXk6QCJjb2RlIl07Cit9CisK
Ky0gKGludCljb2RlCit7CisgICAgcmV0dXJuIFtzdXBlciBpbnRlZ2VyRm9yS2V5OkAiY29kZSJd
OworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4
cGVjdGVkL2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29u
LXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNv
bi1yZXN1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjI5MWRiZTA4
YzJjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4t
cGFyYW1ldGVycy5qc29uLXJlc3VsdApAQCAtMCwwICsxLDE2NjQgQEAKKyMjIyBCZWdpbiBGaWxl
OiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMuaW4KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMu
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisvLyBEYXRh
YmFzZQorSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiRGF0YWJhc2UiLCBudWxsKTsK
K0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJEYXRhYmFzZS5QcmltYXJ5Q29sb3JzIiwg
e1JlZDogInJlZCIsIEdyZWVuOiAiZ3JlZW4iLCBCbHVlOiAiYmx1ZSJ9KTsKK0luc3BlY3RvckJh
Y2tlbmQucmVnaXN0ZXJDb21tYW5kKCJEYXRhYmFzZS5leGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0
ZXJzIiwgbnVsbCwgW3sibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogIm9iamVjdCIsICJv
cHRpb25hbCI6IHRydWV9LCB7Im5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0
aW9uYWwiOiB0cnVlfSwgeyJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIsICJv
cHRpb25hbCI6IHRydWV9LCB7Im5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiwgIm9w
dGlvbmFsIjogdHJ1ZX0sIHsibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAib2JqZWN0IiwgIm9w
dGlvbmFsIjogdHJ1ZX0sIHsibmFtZSI6ICJkYXRhYmFzZUlkIiwgInR5cGUiOiAibnVtYmVyIiwg
Im9wdGlvbmFsIjogdHJ1ZX0sIHsibmFtZSI6ICJzcWxFcnJvciIsICJ0eXBlIjogIm9iamVjdCIs
ICJvcHRpb25hbCI6IHRydWV9LCB7Im5hbWUiOiAic2NyZWVuQ29sb3IiLCAidHlwZSI6ICJzdHJp
bmciLCAib3B0aW9uYWwiOiB0cnVlfSwgeyJuYW1lIjogImFsdGVybmF0ZUNvbG9ycyIsICJ0eXBl
IjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRydWV9LCB7Im5hbWUiOiAicHJpbnRDb2xvciIsICJ0
eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWV9XSwgWyJjb2x1bW5OYW1lcyIsICJub3Rl
cyIsICJ0aW1lc3RhbXAiLCAidmFsdWVzIiwgInBheWxvYWQiLCAiZGF0YWJhc2VJZCIsICJzcWxF
cnJvciIsICJzY3JlZW5Db2xvciIsICJhbHRlcm5hdGVDb2xvcnMiLCAicHJpbnRDb2xvciJdKTsK
K0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJEYXRhYmFzZS5leGVjdXRlTm9PcHRp
b25hbFBhcmFtZXRlcnMiLCBudWxsLCBbeyJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAi
b2JqZWN0In0sIHsibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyJ9LCB7Im5hbWUiOiAi
dGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIn0sIHsibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6
ICJvYmplY3QifSwgeyJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJvYmplY3QifSwgeyJuYW1l
IjogImRhdGFiYXNlSWQiLCAidHlwZSI6ICJudW1iZXIifSwgeyJuYW1lIjogInNxbEVycm9yIiwg
InR5cGUiOiAib2JqZWN0In0sIHsibmFtZSI6ICJzY3JlZW5Db2xvciIsICJ0eXBlIjogInN0cmlu
ZyJ9LCB7Im5hbWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwgInR5cGUiOiAib2JqZWN0In0sIHsibmFt
ZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIn1dLCBbImNvbHVtbk5hbWVzIiwgIm5v
dGVzIiwgInRpbWVzdGFtcCIsICJ2YWx1ZXMiLCAicGF5bG9hZCIsICJkYXRhYmFzZUlkIiwgInNx
bEVycm9yIiwgInNjcmVlbkNvbG9yIiwgImFsdGVybmF0ZUNvbG9ycyIsICJwcmludENvbG9yIl0p
OworSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiRGF0YWJhc2UiLCBudWxsKTsKKyMj
IyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzLmluCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFt
ZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xU
eXBlcy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIu
aD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNw
YXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxC
YWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBX
VEZNb3ZlKGRpc3BhdGNoZXIpOyB9CisgICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNw
YXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQorcHJp
dmF0ZToKKyAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7
Cit9OworCisKK2NsYXNzIEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIgOiBwdWJs
aWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgfkFs
dGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhsb25nIGNhbGxJZCwgY29uc3QgSlNPTjo6QXJy
YXkqIGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIGluX25vdGVzLCBjb25zdCBkb3VibGUq
IGluX3RpbWVzdGFtcCwgY29uc3QgSlNPTjo6T2JqZWN0KiBpbl92YWx1ZXMsIGNvbnN0IEpTT046
OlZhbHVlKiBpbl9wYXlsb2FkLCBjb25zdCBpbnQqIGluX2RhdGFiYXNlSWQsIGNvbnN0IEpTT046
Ok9iamVjdCogaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyogaW5fc2NyZWVuQ29sb3IsIGNvbnN0
IEpTT046OkFycmF5KiBpbl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyogaW5fcHJpbnRD
b2xvcikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMo
bG9uZyBjYWxsSWQsIGNvbnN0IEpTT046OkFycmF5JiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3Ry
aW5nJiBpbl9ub3RlcywgZG91YmxlIGluX3RpbWVzdGFtcCwgY29uc3QgSlNPTjo6T2JqZWN0JiBp
bl92YWx1ZXMsIEpTT046OlZhbHVlIGluX3BheWxvYWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25z
dCBKU09OOjpPYmplY3QmIGluX3NxbEVycm9yLCBjb25zdCBTdHJpbmcmIGluX3NjcmVlbkNvbG9y
LCBjb25zdCBKU09OOjpBcnJheSYgaW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcmIGlu
X3ByaW50Q29sb3IpID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5k
aWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjIyMgRW5kIEZp
bGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTog
VGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVj
dHMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVj
dG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKKyNpZiBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK2NsYXNzIEFsdGVybmF0ZURhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXI7CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCisKK2NsYXNzIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKK3B1Ymxp
YzoKKyAgICAvLyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIgJ3ByaW50Q29sb3InIHdoaWxlIGdlbmVy
YXRpbmcgY29tbWFuZC9ldmVudCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzLgorICAgIGVu
dW0gY2xhc3MgUHJpbnRDb2xvciB7CisgICAgICAgIEN5YW4gPSAzLAorICAgICAgICBNYWdlbnRh
ID0gNCwKKyAgICAgICAgWWVsbG93ID0gNSwKKyAgICAgICAgQmxhY2sgPSA2LAorICAgIH07IC8v
IGVudW0gY2xhc3MgUHJpbnRDb2xvcgorICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlQWxsT3B0aW9u
YWxQYXJhbWV0ZXJzKEVycm9yU3RyaW5nJiwgY29uc3QgSlNPTjo6QXJyYXkqIG9wdF9pbl9jb2x1
bW5OYW1lcywgY29uc3QgU3RyaW5nKiBvcHRfaW5fbm90ZXMsIGNvbnN0IGRvdWJsZSogb3B0X2lu
X3RpbWVzdGFtcCwgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRfaW5fdmFsdWVzLCBjb25zdCBKU09O
OjpWYWx1ZSogb3B0X2luX3BheWxvYWQsIGNvbnN0IGludCogb3B0X2luX2RhdGFiYXNlSWQsIGNv
bnN0IEpTT046Ok9iamVjdCogb3B0X2luX3NxbEVycm9yLCBjb25zdCBTdHJpbmcqIG9wdF9pbl9z
Y3JlZW5Db2xvciwgY29uc3QgSlNPTjo6QXJyYXkqIG9wdF9pbl9hbHRlcm5hdGVDb2xvcnMsIGNv
bnN0IFN0cmluZyogb3B0X2luX3ByaW50Q29sb3IsIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmlu
Zz4+JiBvcHRfb3V0X2NvbHVtbk5hbWVzLCBPcHRpb25hbDxTdHJpbmc+JiBvcHRfb3V0X25vdGVz
LCBPcHRpb25hbDxkb3VibGU+JiBvcHRfb3V0X3RpbWVzdGFtcCwgT3B0aW9uYWw8SlNPTjo6T2Jq
ZWN0PiYgb3B0X291dF92YWx1ZXMsIE9wdGlvbmFsPEpTT046OlZhbHVlPiYgb3B0X291dF9wYXls
b2FkLCBPcHRpb25hbDxpbnQ+JiBvcHRfb3V0X2RhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiBvcHRfb3V0X3NxbEVycm9yLCBJbnNwZWN0b3I6
OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyogb3B0X291dF9zY3JlZW5Db2xvciwg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiBvcHRfb3V0
X2FsdGVybmF0ZUNvbG9ycywgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50
Q29sb3IqIG9wdF9vdXRfcHJpbnRDb2xvcikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRl
Tm9PcHRpb25hbFBhcmFtZXRlcnMoRXJyb3JTdHJpbmcmLCBjb25zdCBKU09OOjpBcnJheSYgaW5f
Y29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgaW5fbm90ZXMsIGRvdWJsZSBpbl90aW1lc3RhbXAs
IGNvbnN0IEpTT046Ok9iamVjdCYgaW5fdmFsdWVzLCBKU09OOjpWYWx1ZSBpbl9wYXlsb2FkLCBp
bnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgSlNPTjo6T2JqZWN0JiBpbl9zcWxFcnJvciwgY29uc3Qg
U3RyaW5nJiBpbl9zY3JlZW5Db2xvciwgY29uc3QgSlNPTjo6QXJyYXkmIGluX2FsdGVybmF0ZUNv
bG9ycywgY29uc3QgU3RyaW5nJiBpbl9wcmludENvbG9yLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxT
dHJpbmc+PiYgb3V0X2NvbHVtbk5hbWVzLCBTdHJpbmcqIG91dF9ub3RlcywgZG91YmxlKiBvdXRf
dGltZXN0YW1wLCBKU09OOjpPYmplY3QqIG91dF92YWx1ZXMsIEpTT046OlZhbHVlKiBvdXRfcGF5
bG9hZCwgaW50KiBvdXRfZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpFcnJvcj4mIG91dF9zcWxFcnJvciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6OlByaW1hcnlDb2xvcnMqIG91dF9zY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiBvdXRfYWx0ZXJuYXRlQ29sb3JzLCBEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciogb3V0X3ByaW50Q29sb3IpID0g
MDsKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5EYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlcigpOworfTsKKworY2xhc3MgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1
YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFJlZjxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXIm
LCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIHZvaWQgZGlzcGF0Y2go
bG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYm
IG1lc3NhZ2UpIGZpbmFsOworcHJpdmF0ZToKKyAgICB2b2lkIGV4ZWN1dGVBbGxPcHRpb25hbFBh
cmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVy
cyk7CisgICAgdm9pZCBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQs
IFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisjaWYgRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCitwdWJsaWM6CisgICAgdm9pZCBzZXRBbHRlcm5hdGVE
aXNwYXRjaGVyKEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURp
c3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsg
fQorcHJpdmF0ZToKKyAgICBBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKiBtX2Fs
dGVybmF0ZURpc3BhdGNoZXIgeyBudWxscHRyIH07CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCitwcml2YXRlOgorICAgIERhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlciopOworICAgIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50IHsg
bnVsbHB0ciB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6
IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmRE
aXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5k
cy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5o
PgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQor
I2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNlbmRpZiAvLyBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CisKK0RhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+RGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KKworUmVmPERhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXI+IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYg
YmFja2VuZERpc3BhdGNoZXIsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2Vu
dCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
KGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOworfQorCitEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVyOjpEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5k
RGlzcGF0Y2hlciwgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQorICAg
IDogU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCisgICAg
LCBtX2FnZW50KGFnZW50KQoreworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlz
cGF0Y2hlckZvckRvbWFpbigiRGF0YWJhc2UiX3MsIHRoaXMpOworfQorCit2b2lkIERhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcm
IG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQoreworICAgIFJlZjxEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKKworICAgIFJlZlB0cjxKU09OOjpP
YmplY3Q+IHBhcmFtZXRlcnM7CisgICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBh
cmFtZXRlcnMpOworCisgICAgaWYgKG1ldGhvZCA9PSAiZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1l
dGVycyIpIHsKKyAgICAgICAgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhyZXF1ZXN0SWQs
IFdURk1vdmUocGFyYW1ldGVycykpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICht
ZXRob2QgPT0gImV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyIpIHsKKyAgICAgICAgZXhlY3V0
ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQ
cm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEYXRhYmFz
ZS4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOworfQorCit2b2lkIERhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0
SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycykKK3sKKyAgICBib29sIG9wdF9p
bl9jb2x1bW5OYW1lc192YWx1ZUZvdW5kID0gZmFsc2U7CisgICAgUmVmUHRyPEpTT046OkFycmF5
PiBvcHRfaW5fY29sdW1uTmFtZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRBcnJheShwYXJh
bWV0ZXJzLmdldCgpLCAiY29sdW1uTmFtZXMiX3MsICZvcHRfaW5fY29sdW1uTmFtZXNfdmFsdWVG
b3VuZCk7CisgICAgYm9vbCBvcHRfaW5fbm90ZXNfdmFsdWVGb3VuZCA9IGZhbHNlOworICAgIFN0
cmluZyBvcHRfaW5fbm90ZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1l
dGVycy5nZXQoKSwgIm5vdGVzIl9zLCAmb3B0X2luX25vdGVzX3ZhbHVlRm91bmQpOworICAgIGJv
b2wgb3B0X2luX3RpbWVzdGFtcF92YWx1ZUZvdW5kID0gZmFsc2U7CisgICAgZG91YmxlIG9wdF9p
bl90aW1lc3RhbXAgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXREb3VibGUocGFyYW1ldGVycy5n
ZXQoKSwgInRpbWVzdGFtcCJfcywgJm9wdF9pbl90aW1lc3RhbXBfdmFsdWVGb3VuZCk7CisgICAg
Ym9vbCBvcHRfaW5fdmFsdWVzX3ZhbHVlRm91bmQgPSBmYWxzZTsKKyAgICBSZWZQdHI8SlNPTjo6
T2JqZWN0PiBvcHRfaW5fdmFsdWVzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0T2JqZWN0KHBh
cmFtZXRlcnMuZ2V0KCksICJ2YWx1ZXMiX3MsICZvcHRfaW5fdmFsdWVzX3ZhbHVlRm91bmQpOwor
ICAgIGJvb2wgb3B0X2luX3BheWxvYWRfdmFsdWVGb3VuZCA9IGZhbHNlOworICAgIFJlZlB0cjxK
U09OOjpWYWx1ZT4gb3B0X2luX3BheWxvYWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRWYWx1
ZShwYXJhbWV0ZXJzLmdldCgpLCAicGF5bG9hZCJfcywgJm9wdF9pbl9wYXlsb2FkX3ZhbHVlRm91
bmQpOworICAgIGJvb2wgb3B0X2luX2RhdGFiYXNlSWRfdmFsdWVGb3VuZCA9IGZhbHNlOworICAg
IGludCBvcHRfaW5fZGF0YWJhc2VJZCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEludGVnZXIo
cGFyYW1ldGVycy5nZXQoKSwgImRhdGFiYXNlSWQiX3MsICZvcHRfaW5fZGF0YWJhc2VJZF92YWx1
ZUZvdW5kKTsKKyAgICBib29sIG9wdF9pbl9zcWxFcnJvcl92YWx1ZUZvdW5kID0gZmFsc2U7Cisg
ICAgUmVmUHRyPEpTT046Ok9iamVjdD4gb3B0X2luX3NxbEVycm9yID0gbV9iYWNrZW5kRGlzcGF0
Y2hlci0+Z2V0T2JqZWN0KHBhcmFtZXRlcnMuZ2V0KCksICJzcWxFcnJvciJfcywgJm9wdF9pbl9z
cWxFcnJvcl92YWx1ZUZvdW5kKTsKKyAgICBib29sIG9wdF9pbl9zY3JlZW5Db2xvcl92YWx1ZUZv
dW5kID0gZmFsc2U7CisgICAgU3RyaW5nIG9wdF9pbl9zY3JlZW5Db2xvciA9IG1fYmFja2VuZERp
c3BhdGNoZXItPmdldFN0cmluZyhwYXJhbWV0ZXJzLmdldCgpLCAic2NyZWVuQ29sb3IiX3MsICZv
cHRfaW5fc2NyZWVuQ29sb3JfdmFsdWVGb3VuZCk7CisgICAgYm9vbCBvcHRfaW5fYWx0ZXJuYXRl
Q29sb3JzX3ZhbHVlRm91bmQgPSBmYWxzZTsKKyAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IG9wdF9p
bl9hbHRlcm5hdGVDb2xvcnMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRBcnJheShwYXJhbWV0
ZXJzLmdldCgpLCAiYWx0ZXJuYXRlQ29sb3JzIl9zLCAmb3B0X2luX2FsdGVybmF0ZUNvbG9yc192
YWx1ZUZvdW5kKTsKKyAgICBib29sIG9wdF9pbl9wcmludENvbG9yX3ZhbHVlRm91bmQgPSBmYWxz
ZTsKKyAgICBTdHJpbmcgb3B0X2luX3ByaW50Q29sb3IgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5n
ZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgInByaW50Q29sb3IiX3MsICZvcHRfaW5fcHJpbnRD
b2xvcl92YWx1ZUZvdW5kKTsKKyAgICBpZiAobV9iYWNrZW5kRGlzcGF0Y2hlci0+aGFzUHJvdG9j
b2xFcnJvcnMoKSkgeworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2Nv
bEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCAiU29tZSBhcmd1bWVudHMg
b2YgbWV0aG9kICdEYXRhYmFzZS5leGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzJyBjYW4ndCBi
ZSBwcm9jZXNzZWQiX3MpOworICAgICAgICByZXR1cm47CisgICAgfQorCisjaWYgRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0
Y2hlcikgeworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVBbGxPcHRpb25h
bFBhcmFtZXRlcnMocmVxdWVzdElkLCBvcHRfaW5fY29sdW1uTmFtZXNfdmFsdWVGb3VuZCA/IG9w
dF9pbl9jb2x1bW5OYW1lcy5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9ub3Rlc192YWx1ZUZvdW5k
ID8gJm9wdF9pbl9ub3RlcyA6IG51bGxwdHIsIG9wdF9pbl90aW1lc3RhbXBfdmFsdWVGb3VuZCA/
ICZvcHRfaW5fdGltZXN0YW1wIDogbnVsbHB0ciwgb3B0X2luX3ZhbHVlc192YWx1ZUZvdW5kID8g
b3B0X2luX3ZhbHVlcy5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9wYXlsb2FkX3ZhbHVlRm91bmQg
PyBvcHRfaW5fcGF5bG9hZC5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9kYXRhYmFzZUlkX3ZhbHVl
Rm91bmQgPyAmb3B0X2luX2RhdGFiYXNlSWQgOiBudWxscHRyLCBvcHRfaW5fc3FsRXJyb3JfdmFs
dWVGb3VuZCA/IG9wdF9pbl9zcWxFcnJvci5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9zY3JlZW5D
b2xvcl92YWx1ZUZvdW5kID8gJm9wdF9pbl9zY3JlZW5Db2xvciA6IG51bGxwdHIsIG9wdF9pbl9h
bHRlcm5hdGVDb2xvcnNfdmFsdWVGb3VuZCA/IG9wdF9pbl9hbHRlcm5hdGVDb2xvcnMuZ2V0KCkg
OiBudWxscHRyLCBvcHRfaW5fcHJpbnRDb2xvcl92YWx1ZUZvdW5kID8gJm9wdF9pbl9wcmludENv
bG9yIDogbnVsbHB0cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYgLy8gRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyAgICBFcnJvclN0cmluZyBlcnJv
cjsKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OworICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IG91dF9jb2x1bW5OYW1lczsKKyAg
ICBPcHRpb25hbDxTdHJpbmc+IG91dF9ub3RlczsKKyAgICBPcHRpb25hbDxkb3VibGU+IG91dF90
aW1lc3RhbXA7CisgICAgT3B0aW9uYWw8SlNPTjo6T2JqZWN0PiBvdXRfdmFsdWVzOworICAgIE9w
dGlvbmFsPEpTT046OlZhbHVlPiBvdXRfcGF5bG9hZDsKKyAgICBPcHRpb25hbDxpbnQ+IG91dF9k
YXRhYmFzZUlkOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJy
b3I+IG91dF9zcWxFcnJvcjsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJp
bWFyeUNvbG9ycyBvdXRfc2NyZWVuQ29sb3I7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IG91dF9hbHRlcm5hdGVDb2xvcnM7CisgICAgRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3Igb3V0X3ByaW50Q29sb3I7Cisg
ICAgbV9hZ2VudC0+ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhlcnJvciwgb3B0X2luX2Nv
bHVtbk5hbWVzX3ZhbHVlRm91bmQgPyBvcHRfaW5fY29sdW1uTmFtZXMuZ2V0KCkgOiBudWxscHRy
LCBvcHRfaW5fbm90ZXNfdmFsdWVGb3VuZCA/ICZvcHRfaW5fbm90ZXMgOiBudWxscHRyLCBvcHRf
aW5fdGltZXN0YW1wX3ZhbHVlRm91bmQgPyAmb3B0X2luX3RpbWVzdGFtcCA6IG51bGxwdHIsIG9w
dF9pbl92YWx1ZXNfdmFsdWVGb3VuZCA/IG9wdF9pbl92YWx1ZXMuZ2V0KCkgOiBudWxscHRyLCBv
cHRfaW5fcGF5bG9hZF92YWx1ZUZvdW5kID8gb3B0X2luX3BheWxvYWQuZ2V0KCkgOiBudWxscHRy
LCBvcHRfaW5fZGF0YWJhc2VJZF92YWx1ZUZvdW5kID8gJm9wdF9pbl9kYXRhYmFzZUlkIDogbnVs
bHB0ciwgb3B0X2luX3NxbEVycm9yX3ZhbHVlRm91bmQgPyBvcHRfaW5fc3FsRXJyb3IuZ2V0KCkg
OiBudWxscHRyLCBvcHRfaW5fc2NyZWVuQ29sb3JfdmFsdWVGb3VuZCA/ICZvcHRfaW5fc2NyZWVu
Q29sb3IgOiBudWxscHRyLCBvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzX3ZhbHVlRm91bmQgPyBvcHRf
aW5fYWx0ZXJuYXRlQ29sb3JzLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX3ByaW50Q29sb3JfdmFs
dWVGb3VuZCA/ICZvcHRfaW5fcHJpbnRDb2xvciA6IG51bGxwdHIsIG91dF9jb2x1bW5OYW1lcywg
b3V0X25vdGVzLCBvdXRfdGltZXN0YW1wLCBvdXRfdmFsdWVzLCBvdXRfcGF5bG9hZCwgb3V0X2Rh
dGFiYXNlSWQsIG91dF9zcWxFcnJvciwgb3V0X3NjcmVlbkNvbG9yLCBvdXRfYWx0ZXJuYXRlQ29s
b3JzLCBvdXRfcHJpbnRDb2xvcik7CisKKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7CisgICAg
ICAgIGlmIChvdXRfY29sdW1uTmFtZXMpCisgICAgICAgICAgICByZXN1bHQtPnNldEFycmF5KCJj
b2x1bW5OYW1lcyJfcywgb3V0X2NvbHVtbk5hbWVzKTsKKyAgICAgICAgaWYgKG91dF9ub3Rlcy5o
YXNWYWx1ZSgpKQorICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCAqb3V0
X25vdGVzKTsKKyAgICAgICAgaWYgKG91dF90aW1lc3RhbXAuaGFzVmFsdWUoKSkKKyAgICAgICAg
ICAgIHJlc3VsdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICpvdXRfdGltZXN0YW1wKTsKKyAg
ICAgICAgaWYgKG91dF92YWx1ZXMuaGFzVmFsdWUoKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0
T2JqZWN0KCJ2YWx1ZXMiX3MsICpvdXRfdmFsdWVzKTsKKyAgICAgICAgaWYgKG91dF9wYXlsb2Fk
Lmhhc1ZhbHVlKCkpCisgICAgICAgICAgICByZXN1bHQtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCAq
b3V0X3BheWxvYWQpOworICAgICAgICBpZiAob3V0X2RhdGFiYXNlSWQuaGFzVmFsdWUoKSkKKyAg
ICAgICAgICAgIHJlc3VsdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgKm91dF9kYXRhYmFz
ZUlkKTsKKyAgICAgICAgaWYgKG91dF9zcWxFcnJvcikKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0
T2JqZWN0KCJzcWxFcnJvciJfcywgb3V0X3NxbEVycm9yKTsKKyAgICAgICAgaWYgKG91dF9zY3Jl
ZW5Db2xvci5oYXNWYWx1ZSgpKQorICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInNjcmVl
bkNvbG9yIl9zLCAqb3V0X3NjcmVlbkNvbG9yKTsKKyAgICAgICAgaWYgKG91dF9hbHRlcm5hdGVD
b2xvcnMpCisgICAgICAgICAgICByZXN1bHQtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3Ms
IG91dF9hbHRlcm5hdGVDb2xvcnMpOworICAgICAgICBpZiAob3V0X3ByaW50Q29sb3IuaGFzVmFs
dWUoKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCAqb3V0
X3ByaW50Q29sb3IpOworICAgIH0KKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQorICAgICAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3Vs
dCksIGZhbHNlKTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9y
dFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVy
cm9yKSk7Cit9CisKK3ZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZU5vT3B0
aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBh
cmFtZXRlcnMpCit7CisgICAgUmVmUHRyPEpTT046OkFycmF5PiBpbl9jb2x1bW5OYW1lcyA9IG1f
YmFja2VuZERpc3BhdGNoZXItPmdldEFycmF5KHBhcmFtZXRlcnMuZ2V0KCksICJjb2x1bW5OYW1l
cyJfcywgbnVsbHB0cik7CisgICAgU3RyaW5nIGluX25vdGVzID0gbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksICJub3RlcyJfcywgbnVsbHB0cik7CisgICAg
ZG91YmxlIGluX3RpbWVzdGFtcCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldERvdWJsZShwYXJh
bWV0ZXJzLmdldCgpLCAidGltZXN0YW1wIl9zLCBudWxscHRyKTsKKyAgICBSZWZQdHI8SlNPTjo6
T2JqZWN0PiBpbl92YWx1ZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRPYmplY3QocGFyYW1l
dGVycy5nZXQoKSwgInZhbHVlcyJfcywgbnVsbHB0cik7CisgICAgUmVmUHRyPEpTT046OlZhbHVl
PiBpbl9wYXlsb2FkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0VmFsdWUocGFyYW1ldGVycy5n
ZXQoKSwgInBheWxvYWQiX3MsIG51bGxwdHIpOworICAgIGludCBpbl9kYXRhYmFzZUlkID0gbV9i
YWNrZW5kRGlzcGF0Y2hlci0+Z2V0SW50ZWdlcihwYXJhbWV0ZXJzLmdldCgpLCAiZGF0YWJhc2VJ
ZCJfcywgbnVsbHB0cik7CisgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gaW5fc3FsRXJyb3IgPSBt
X2JhY2tlbmREaXNwYXRjaGVyLT5nZXRPYmplY3QocGFyYW1ldGVycy5nZXQoKSwgInNxbEVycm9y
Il9zLCBudWxscHRyKTsKKyAgICBTdHJpbmcgaW5fc2NyZWVuQ29sb3IgPSBtX2JhY2tlbmREaXNw
YXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgInNjcmVlbkNvbG9yIl9zLCBudWxs
cHRyKTsKKyAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGluX2FsdGVybmF0ZUNvbG9ycyA9IG1fYmFj
a2VuZERpc3BhdGNoZXItPmdldEFycmF5KHBhcmFtZXRlcnMuZ2V0KCksICJhbHRlcm5hdGVDb2xv
cnMiX3MsIG51bGxwdHIpOworICAgIFN0cmluZyBpbl9wcmludENvbG9yID0gbV9iYWNrZW5kRGlz
cGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksICJwcmludENvbG9yIl9zLCBudWxs
cHRyKTsKKyAgICBpZiAobV9iYWNrZW5kRGlzcGF0Y2hlci0+aGFzUHJvdG9jb2xFcnJvcnMoKSkg
eworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tl
bmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCAiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICdE
YXRhYmFzZS5leGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMnIGNhbid0IGJlIHByb2Nlc3NlZCJf
cyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVS
TkFURV9ESVNQQVRDSEVSUykKKyAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7CisgICAg
ICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKHJl
cXVlc3RJZCwgKmluX2NvbHVtbk5hbWVzLCBpbl9ub3RlcywgaW5fdGltZXN0YW1wLCAqaW5fdmFs
dWVzLCAqaW5fcGF5bG9hZCwgaW5fZGF0YWJhc2VJZCwgKmluX3NxbEVycm9yLCBpbl9zY3JlZW5D
b2xvciwgKmluX2FsdGVybmF0ZUNvbG9ycywgaW5fcHJpbnRDb2xvcik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCisKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1
bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0
cmluZz4+IG91dF9jb2x1bW5OYW1lczsKKyAgICBTdHJpbmcgb3V0X25vdGVzOworICAgIGRvdWJs
ZSBvdXRfdGltZXN0YW1wOworICAgIEpTT046Ok9iamVjdCBvdXRfdmFsdWVzOworICAgIEpTT046
OlZhbHVlIG91dF9wYXlsb2FkOworICAgIGludCBvdXRfZGF0YWJhc2VJZDsKKyAgICBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBvdXRfc3FsRXJyb3I7CisgICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgb3V0X3NjcmVlbkNv
bG9yOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0
PiBvdXRfYWx0ZXJuYXRlQ29sb3JzOworICAgIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyOjpQcmludENvbG9yIG91dF9wcmludENvbG9yOworICAgIG1fYWdlbnQtPmV4ZWN1dGVOb09w
dGlvbmFsUGFyYW1ldGVycyhlcnJvciwgKmluX2NvbHVtbk5hbWVzLCBpbl9ub3RlcywgaW5fdGlt
ZXN0YW1wLCAqaW5fdmFsdWVzLCAqaW5fcGF5bG9hZCwgaW5fZGF0YWJhc2VJZCwgKmluX3NxbEVy
cm9yLCBpbl9zY3JlZW5Db2xvciwgKmluX2FsdGVybmF0ZUNvbG9ycywgaW5fcHJpbnRDb2xvciwg
b3V0X2NvbHVtbk5hbWVzLCAmb3V0X25vdGVzLCAmb3V0X3RpbWVzdGFtcCwgb3V0X3ZhbHVlcywg
Jm91dF9wYXlsb2FkLCAmb3V0X2RhdGFiYXNlSWQsIG91dF9zcWxFcnJvciwgJm91dF9zY3JlZW5D
b2xvciwgb3V0X2FsdGVybmF0ZUNvbG9ycywgJm91dF9wcmludENvbG9yKTsKKworICAgIGlmICgh
ZXJyb3IubGVuZ3RoKCkpIHsKKyAgICAgICAgcmVzdWx0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMi
X3MsIG91dF9jb2x1bW5OYW1lcyk7CisgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJub3RlcyJf
cywgb3V0X25vdGVzKTsKKyAgICAgICAgcmVzdWx0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywg
b3V0X3RpbWVzdGFtcCk7CisgICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIG91
dF92YWx1ZXMpOworICAgICAgICByZXN1bHQtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBvdXRfcGF5
bG9hZCk7CisgICAgICAgIHJlc3VsdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgb3V0X2Rh
dGFiYXNlSWQpOworICAgICAgICByZXN1bHQtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIG91dF9z
cWxFcnJvcik7CisgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgSW5z
cGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKG91dF9z
Y3JlZW5Db2xvcikpOworICAgICAgICByZXN1bHQtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMi
X3MsIG91dF9hbHRlcm5hdGVDb2xvcnMpOworICAgICAgICByZXN1bHQtPnNldFN0cmluZygicHJp
bnRDb2xvciJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25z
dGFudFZhbHVlKG91dF9wcmludENvbG9yKSk7CisgICAgfQorICAgIGlmICghZXJyb3IubGVuZ3Ro
KCkpCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQs
IFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOworICAgIGVsc2UKKyAgICAgICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJy
b3IsIFdURk1vdmUoZXJyb3IpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMj
IyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6
IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2Jq
ZWN0cy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBGcm9udGVuZFJv
dXRlcjsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9u
dGVuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNo
ZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgt
b3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJU
ZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisK
K25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMj
IEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbE9iamVjdHMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JQcm90b2NvbFR5cGVzLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKKworCituYW1lc3BhY2UgUHJvdG9jb2wgeworCisKKworLy8g
Rm9yd2FyZCBkZWNsYXJhdGlvbnMuCituYW1lc3BhY2UgRGF0YWJhc2UgeworY2xhc3MgRXJyb3I7
CitlbnVtIGNsYXNzIFByaW1hcnlDb2xvcnM7Cit9IC8vIERhdGFiYXNlCisvLyBFbmQgb2YgZm9y
d2FyZCBkZWNsYXJhdGlvbnMuCisKKworLy8gVHlwZWRlZnMuCituYW1lc3BhY2UgRGF0YWJhc2Ug
eworLyogVW5pcXVlIGlkZW50aWZpZXIgb2YgRGF0YWJhc2Ugb2JqZWN0LiAqLwordHlwZWRlZiBp
bnQgRGF0YWJhc2VJZDsKK3R5cGVkZWYgSlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29s
OjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gQ29sb3JMaXN0OworfSAvLyBEYXRhYmFzZQorLy8g
RW5kIG9mIHR5cGVkZWZzLgorCituYW1lc3BhY2UgVGVzdEhlbHBlcnMgeworCitTdHJpbmcgZ2V0
RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJp
bmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFsdWUpCit7CisgICAgcmV0dXJuIGdldEVu
dW1Db25zdGFudFZhbHVlKHN0YXRpY19jYXN0PGludD4oZW51bVZhbHVlKSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFRlc3RIZWxwZXJzCisKK25hbWVzcGFjZSBEYXRhYmFzZSB7CisKK2VudW0gY2xh
c3MgUHJpbWFyeUNvbG9ycyB7CisgICAgUmVkID0gMCwKKyAgICBHcmVlbiA9IDEsCisgICAgQmx1
ZSA9IDIsCit9OyAvLyBlbnVtIGNsYXNzIFByaW1hcnlDb2xvcnMKKworLyogRGF0YWJhc2UgZXJy
b3IuICovCitjbGFzcyBFcnJvciA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKK3B1YmxpYzoK
KyAgICBlbnVtIHsKKyAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAorICAgICAgICBNZXNzYWdlU2V0
ID0gMSA8PCAwLAorICAgICAgICBDb2RlU2V0ID0gMSA8PCAxLAorICAgICAgICBBbGxGaWVsZHNT
ZXQgPSAoTWVzc2FnZVNldCB8IENvZGVTZXQpCisgICAgfTsKKworICAgIHRlbXBsYXRlPGludCBT
VEFURT4KKyAgICBjbGFzcyBCdWlsZGVyIHsKKyAgICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8
SlNPTjo6T2JqZWN0PiBtX3Jlc3VsdDsKKworICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVp
bGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7Cisg
ICAgICAgIH0KKworICAgICAgICBCdWlsZGVyKFJlZjwvKkVycm9yKi9KU09OOjpPYmplY3Q+JiYg
b2JqZWN0KQorICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCisgICAgICAg
IHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWls
ZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAgICAgICB9CisgICAgICAgIGZyaWVu
ZCBjbGFzcyBFcnJvcjsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1l
c3NhZ2VTZXQ+JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNZXNzYWdlU2V0KSwgcHJvcGVydHlf
bWVzc2FnZV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJt
ZXNzYWdlIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1lc3NhZ2VT
ZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29kZVNldD4mIHNl
dENvZGUoaW50IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgQ29kZVNldCksIHByb3BlcnR5X2NvZGVfYWxyZWFkeV9zZXQpOworICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldEludGVnZXIoImNvZGUiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIHJl
dHVybiBjYXN0U3RhdGU8Q29kZVNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIFJlZjxFcnJv
cj4gcmVsZWFzZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRF
ID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CisgICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVChzaXplb2YoRXJyb3IpID09IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5ub3Rf
Y2FzdCk7CisKKyAgICAgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25SZXN1bHQgPSBtX3Jl
c3VsdC5yZWxlYXNlTm9uTnVsbCgpOworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBXVEZNb3Zl
KCpyZWludGVycHJldF9jYXN0PFJlZjxFcnJvcj4qPigmanNvblJlc3VsdCkpOworICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvKgorICAgICAqIFN5
bnRoZXRpYyBjb25zdHJ1Y3RvcjoKKyAgICAgKiBSZWY8RXJyb3I+IHJlc3VsdCA9IEVycm9yOjpj
cmVhdGUoKQorICAgICAqICAgICAuc2V0TWVzc2FnZSguLi4pCisgICAgICogICAgIC5zZXRDb2Rl
KC4uLikKKyAgICAgKiAgICAgLnJlbGVhc2UoKTsKKyAgICAgKi8KKyAgICBzdGF0aWMgQnVpbGRl
cjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBCdWlsZGVyPE5v
RmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICB9Cit9OworCit9IC8vIERh
dGFiYXNlCisKKworCituYW1lc3BhY2UgVGVzdEhlbHBlcnMgeworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBQcm90b2NvbEVudW1UeXBlPgorT3B0aW9uYWw8UHJvdG9jb2xFbnVtVHlwZT4gcGFyc2VFbnVt
VmFsdWVGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYpOworCisvLyBFbnVtcyBpbiB0aGUgJ0RhdGFi
YXNlJyBEb21haW4KK3RlbXBsYXRlPD4KK09wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpQcmltYXJ5Q29sb3JzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+KGNvbnN0IFN0cmluZyYpOworCit9
IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKKworLy8gSGFzaCBkZWNsYXJhdGlvbnMgaW4g
dGhlICdEYXRhYmFzZScgRG9tYWluCit0ZW1wbGF0ZTw+CitzdHJ1Y3QgRGVmYXVsdEhhc2g8SW5z
cGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IHsKKyAgICB0eXBlZGVm
IEludEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IEhh
c2g7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
T2JqZWN0cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2Fs
bC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xP
YmplY3RzLmgiCisKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCituYW1lc3BhY2UgUHJvdG9j
b2wgeworCituYW1lc3BhY2UgVGVzdEhlbHBlcnMgeworCitzdGF0aWMgY29uc3QgY2hhciogY29u
c3QgZW51bV9jb25zdGFudF92YWx1ZXNbXSA9IHsKKyAgICAicmVkIiwKKyAgICAiZ3JlZW4iLAor
ICAgICJibHVlIiwKKyAgICAiY3lhbiIsCisgICAgIm1hZ2VudGEiLAorICAgICJ5ZWxsb3ciLAor
ICAgICJibGFjayIsCit9OworCitTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUp
IHsKKyAgICByZXR1cm4gZW51bV9jb25zdGFudF92YWx1ZXNbY29kZV07Cit9CisKKy8vIEVudW1z
IGluIHRoZSAnRGF0YWJhc2UnIERvbWFpbgorCit0ZW1wbGF0ZTw+CitPcHRpb25hbDxJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gcGFyc2VFbnVtVmFsdWVGcm9t
U3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPihjb25z
dCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQoreworICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29u
c3RhbnRWYWx1ZXNbXSA9IHsKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpE
YXRhYmFzZTo6UHJpbWFyeUNvbG9yczo6UmVkLAorICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzOjpHcmVlbiwKKyAgICAgICAgKHNpemVf
dClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9yczo6Qmx1ZSwKKyAg
ICB9OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMzsgKytpKQorICAgICAgICBpZiAocHJv
dG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNbaV1dKQor
ICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFy
eUNvbG9ycyljb25zdGFudFZhbHVlc1tpXTsKKworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90
b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xPYmplY3RzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERp
c3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13
aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDx3dGYvUGxhdGZvcm0uaD4KKwor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVycy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworQHByb3RvY29sIFRlc3RQcm90
b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcjsKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKwor
Y2xhc3MgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJs
aWMgQWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciB7CisgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyPiBoYW5kbGVyKSB7
IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9CisgICAgdm9pZCBleGVjdXRlQWxsT3B0aW9uYWxQYXJh
bWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBjb25zdCBKU09OOjpBcnJheSogaW5fY29sdW1uTmFtZXMs
IGNvbnN0IFN0cmluZyogaW5fbm90ZXMsIGNvbnN0IGRvdWJsZSogaW5fdGltZXN0YW1wLCBjb25z
dCBKU09OOjpPYmplY3QqIGluX3ZhbHVlcywgY29uc3QgSlNPTjo6VmFsdWUqIGluX3BheWxvYWQs
IGNvbnN0IGludCogaW5fZGF0YWJhc2VJZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBpbl9zcWxFcnJv
ciwgY29uc3QgU3RyaW5nKiBpbl9zY3JlZW5Db2xvciwgY29uc3QgSlNPTjo6QXJyYXkqIGluX2Fs
dGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nKiBpbl9wcmludENvbG9yKSBmaW5hbDsKKyAgICB2
b2lkIGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhsb25nIHJlcXVlc3RJZCwgY29uc3QgSlNP
Tjo6QXJyYXkmIGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIGluX25vdGVzLCBkb3VibGUg
aW5fdGltZXN0YW1wLCBjb25zdCBKU09OOjpPYmplY3QmIGluX3ZhbHVlcywgSlNPTjo6VmFsdWUg
aW5fcGF5bG9hZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IEpTT046Ok9iamVjdCYgaW5fc3Fs
RXJyb3IsIGNvbnN0IFN0cmluZyYgaW5fc2NyZWVuQ29sb3IsIGNvbnN0IEpTT046OkFycmF5JiBp
bl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgaW5fcHJpbnRDb2xvcikgZmluYWw7Citw
cml2YXRlOgorICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRs
ZXI+PiBtX2RlbGVnYXRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1l
dGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNp
bXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJz
LmgiCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisK
K25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit2b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tl
bmREaXNwYXRjaGVyOjpleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElk
LCBjb25zdCBKU09OOjpBcnJheSogaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyogaW5fbm90
ZXMsIGNvbnN0IGRvdWJsZSogaW5fdGltZXN0YW1wLCBjb25zdCBKU09OOjpPYmplY3QqIGluX3Zh
bHVlcywgY29uc3QgSlNPTjo6VmFsdWUqIGluX3BheWxvYWQsIGNvbnN0IGludCogaW5fZGF0YWJh
c2VJZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nKiBpbl9z
Y3JlZW5Db2xvciwgY29uc3QgSlNPTjo6QXJyYXkqIGluX2FsdGVybmF0ZUNvbG9ycywgY29uc3Qg
U3RyaW5nKiBpbl9wcmludENvbG9yKQoreworICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNU
b1NlbGVjdG9yOkBzZWxlY3RvcihleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzV2l0aEVycm9y
Q2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOmNvbHVtbk5hbWVzOm5vdGVzOnRpbWVzdGFtcDp2YWx1
ZXM6cGF5bG9hZDpkYXRhYmFzZUlkOnNxbEVycm9yOnNjcmVlbkNvbG9yOmFsdGVybmF0ZUNvbG9y
czpwcmludENvbG9yOildKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFBy
b3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQs
ICInRGF0YWJhc2UuZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycycgd2FzIG5vdCBmb3VuZCJf
cyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmlu
ZyAqZXJyb3IpIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xF
cnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwor
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgIH07
CisKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmNv
bHVtbk5hbWVzLCBOU1N0cmluZyAqKm5vdGVzLCBkb3VibGUgKnRpbWVzdGFtcCwgUldJUHJvdG9j
b2xKU09OT2JqZWN0ICoqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipwYXlsb2FkLCBp
bnQgKmRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipzcWxFcnJvciwgVGVz
dFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzICpzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5T
U3RyaW5nPiovICoqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVB
bGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yICpwcmludENvbG9yKSB7CisgICAgICAgIFJl
ZjxKU09OOjpPYmplY3Q+IHJlc3VsdE9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Cisg
ICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihjb2x1bW5O
YW1lcywgQCJjb2x1bW5OYW1lcyIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9P
UFRJT05BTF9QQVJBTUVURVIobm90ZXMsIEAibm90ZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHZhbHVlcywgQCJ2YWx1ZXMiKTsKKyAgICAg
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHBheWxvYWQsIEAi
cGF5bG9hZCIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJB
TUVURVIoc3FsRXJyb3IsIEAic3FsRXJyb3IiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKGFsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xv
cnMiKTsKKyAgICAgICAgaWYgKGNvbHVtbk5hbWVzKQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0
LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KCpjb2x1bW5OYW1l
cykpOworICAgICAgICBpZiAobm90ZXMpCisgICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0
cmluZygibm90ZXMiX3MsICpub3Rlcyk7CisgICAgICAgIGlmICh0aW1lc3RhbXApCisgICAgICAg
ICAgICByZXN1bHRPYmplY3QtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCAqdGltZXN0YW1wKTsK
KyAgICAgICAgaWYgKHZhbHVlcykKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0
KCJ2YWx1ZXMiX3MsIFsqdmFsdWVzIHRvSlNPTk9iamVjdF0pOworICAgICAgICBpZiAocGF5bG9h
ZCkKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFsqcGF5
bG9hZCB0b0pTT05PYmplY3RdKTsKKyAgICAgICAgaWYgKGRhdGFiYXNlSWQpCisgICAgICAgICAg
ICByZXN1bHRPYmplY3QtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsICpkYXRhYmFzZUlkKTsK
KyAgICAgICAgaWYgKHNxbEVycm9yKQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmpl
Y3QoInNxbEVycm9yIl9zLCBbKnNxbEVycm9yIHRvSlNPTk9iamVjdF0pOworICAgICAgICBpZiAo
c2NyZWVuQ29sb3IpCisgICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygic2NyZWVu
Q29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcoKnNjcmVlbkNvbG9yKSk7CisgICAgICAgIGlmIChh
bHRlcm5hdGVDb2xvcnMpCisgICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJhbHRl
cm5hdGVDb2xvcnMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KCphbHRlcm5hdGVDb2xvcnMpKTsKKyAg
ICAgICAgaWYgKHByaW50Q29sb3IpCisgICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmlu
ZygicHJpbnRDb2xvciJfcywgdG9Qcm90b2NvbFN0cmluZygqcHJpbnRDb2xvcikpOworICAgICAg
ICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJl
c3VsdE9iamVjdCksIGZhbHNlKTsKKyAgICB9OworCisgICAgTlNBcnJheS8qPE5TU3RyaW5nPiov
ICpvX2luX2NvbHVtbk5hbWVzOworICAgIGlmIChpbl9jb2x1bW5OYW1lcykKKyAgICAgICAgb19p
bl9jb2x1bW5OYW1lcyA9IHRvT2JqQ1N0cmluZ0FycmF5KGluX2NvbHVtbk5hbWVzKTsKKyAgICBO
U1N0cmluZyAqb19pbl9ub3RlczsKKyAgICBpZiAoaW5fbm90ZXMpCisgICAgICAgIG9faW5fbm90
ZXMgPSAqaW5fbm90ZXM7CisgICAgZG91YmxlIG9faW5fdGltZXN0YW1wOworICAgIGlmIChpbl90
aW1lc3RhbXApCisgICAgICAgIG9faW5fdGltZXN0YW1wID0gKmluX3RpbWVzdGFtcDsKKyAgICBS
V0lQcm90b2NvbEpTT05PYmplY3QgKm9faW5fdmFsdWVzOworICAgIGlmIChpbl92YWx1ZXMpCisg
ICAgICAgIG9faW5fdmFsdWVzID0gW1tbUldJUHJvdG9jb2xKU09OT2JqZWN0IGFsbG9jXSBpbml0
V2l0aEpTT05PYmplY3Q6aW5fdmFsdWVzXSBhdXRvcmVsZWFzZV07CisgICAgUldJUHJvdG9jb2xK
U09OT2JqZWN0ICpvX2luX3BheWxvYWQ7CisgICAgaWYgKGluX3BheWxvYWQpCisgICAgICAgIG9f
aW5fcGF5bG9hZCA9IFtbW1JXSVByb3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5pdFdpdGhKU09O
T2JqZWN0OmluX3BheWxvYWRdIGF1dG9yZWxlYXNlXTsKKyAgICBpbnQgb19pbl9kYXRhYmFzZUlk
OworICAgIGlmIChpbl9kYXRhYmFzZUlkKQorICAgICAgICBvX2luX2RhdGFiYXNlSWQgPSAqaW5f
ZGF0YWJhc2VJZDsKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpvX2luX3NxbEVycm9y
OworICAgIGlmIChpbl9zcWxFcnJvcikKKyAgICAgICAgb19pbl9zcWxFcnJvciA9IFtbW1Rlc3RQ
cm90b2NvbERhdGFiYXNlRXJyb3IgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDppbl9zcWxFcnJv
cl0gYXV0b3JlbGVhc2VdOworICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFy
eUNvbG9ycz4gb19pbl9zY3JlZW5Db2xvcjsKKyAgICBpZiAoaW5fc2NyZWVuQ29sb3IpCisgICAg
ICAgIG9faW5fc2NyZWVuQ29sb3IgPSBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sRGF0
YWJhc2VQcmltYXJ5Q29sb3JzPigqaW5fc2NyZWVuQ29sb3IpOworICAgIE5TQXJyYXkvKjxOU1N0
cmluZz4qLyAqb19pbl9hbHRlcm5hdGVDb2xvcnM7CisgICAgaWYgKGluX2FsdGVybmF0ZUNvbG9y
cykKKyAgICAgICAgb19pbl9hbHRlcm5hdGVDb2xvcnMgPSB0b09iakNTdHJpbmdBcnJheShpbl9h
bHRlcm5hdGVDb2xvcnMpOworICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0
ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3I+IG9faW5fcHJpbnRDb2xvcjsKKyAgICBp
ZiAoaW5fcHJpbnRDb2xvcikKKyAgICAgICAgb19pbl9wcmludENvbG9yID0gZnJvbVByb3RvY29s
U3RyaW5nPFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1By
aW50Q29sb3I+KCppbl9wcmludENvbG9yKTsKKworICAgIFttX2RlbGVnYXRlIGV4ZWN1dGVBbGxP
cHRpb25hbFBhcmFtZXRlcnNXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3ND
YWxsYmFjazpzdWNjZXNzQ2FsbGJhY2sgY29sdW1uTmFtZXM6KGluX2NvbHVtbk5hbWVzID8gJm9f
aW5fY29sdW1uTmFtZXMgOiBuaWwpIG5vdGVzOihpbl9ub3RlcyA/ICZvX2luX25vdGVzIDogbmls
KSB0aW1lc3RhbXA6KGluX3RpbWVzdGFtcCA/ICZvX2luX3RpbWVzdGFtcCA6IG5pbCkgdmFsdWVz
Oihpbl92YWx1ZXMgPyAmb19pbl92YWx1ZXMgOiBuaWwpIHBheWxvYWQ6KGluX3BheWxvYWQgPyAm
b19pbl9wYXlsb2FkIDogbmlsKSBkYXRhYmFzZUlkOihpbl9kYXRhYmFzZUlkID8gJm9faW5fZGF0
YWJhc2VJZCA6IG5pbCkgc3FsRXJyb3I6KGluX3NxbEVycm9yID8gJm9faW5fc3FsRXJyb3IgOiBu
aWwpIHNjcmVlbkNvbG9yOihpbl9zY3JlZW5Db2xvciA/ICZvX2luX3NjcmVlbkNvbG9yLnZhbHVl
KCkgOiBuaWwpIGFsdGVybmF0ZUNvbG9yczooaW5fYWx0ZXJuYXRlQ29sb3JzID8gJm9faW5fYWx0
ZXJuYXRlQ29sb3JzIDogbmlsKSBwcmludENvbG9yOihpbl9wcmludENvbG9yID8gJm9faW5fcHJp
bnRDb2xvci52YWx1ZSgpIDogbmlsKV07Cit9CisKK3ZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhsb25nIHJlcXVl
c3RJZCwgY29uc3QgSlNPTjo6QXJyYXkmIGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIGlu
X25vdGVzLCBkb3VibGUgaW5fdGltZXN0YW1wLCBjb25zdCBKU09OOjpPYmplY3QmIGluX3ZhbHVl
cywgSlNPTjo6VmFsdWUgaW5fcGF5bG9hZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IEpTT046
Ok9iamVjdCYgaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgaW5fc2NyZWVuQ29sb3IsIGNvbnN0
IEpTT046OkFycmF5JiBpbl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgaW5fcHJpbnRD
b2xvcikKK3sKKyAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0
b3IoZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0Nh
bGxiYWNrOmNvbHVtbk5hbWVzOm5vdGVzOnRpbWVzdGFtcDp2YWx1ZXM6cGF5bG9hZDpkYXRhYmFz
ZUlkOnNxbEVycm9yOnNjcmVlbkNvbG9yOmFsdGVybmF0ZUNvbG9yczpwcmludENvbG9yOildKSB7
CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVz
dElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRGF0YWJhc2UuZXhlY3V0
ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgeworICAgICAg
ICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFj
a2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgfTsKKworICAgIGlkIHN1Y2Nlc3ND
YWxsYmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiovICpjb2x1bW5OYW1lcywgTlNTdHJpbmcg
Km5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnZhbHVlcywg
UldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgVGVzdFByb3Rv
Y29sRGF0YWJhc2VFcnJvciAqc3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNv
bG9ycyBzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICphbHRlcm5hdGVDb2xvcnMs
IFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xv
ciBwcmludENvbG9yKSB7CisgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdE9iamVjdCA9
IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVR
VUlSRURfUEFSQU1FVEVSKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7CisgICAgICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG5vdGVzLCBAIm5vdGVzIik7Cisg
ICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHZhbHVlcywgQCJ2
YWx1ZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIo
cGF5bG9hZCwgQCJwYXlsb2FkIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlS
RURfUEFSQU1FVEVSKHNxbEVycm9yLCBAInNxbEVycm9yIik7CisgICAgICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKGFsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVD
b2xvcnMiKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3Ms
IHRvSlNPTlN0cmluZ0FycmF5KGNvbHVtbk5hbWVzKSk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+
c2V0U3RyaW5nKCJub3RlcyJfcywgbm90ZXMpOworICAgICAgICByZXN1bHRPYmplY3QtPnNldERv
dWJsZSgidGltZXN0YW1wIl9zLCB0aW1lc3RhbXApOworICAgICAgICByZXN1bHRPYmplY3QtPnNl
dE9iamVjdCgidmFsdWVzIl9zLCBbdmFsdWVzIHRvSlNPTk9iamVjdF0pOworICAgICAgICByZXN1
bHRPYmplY3QtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBbcGF5bG9hZCB0b0pTT05PYmplY3RdKTsK
KyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCBkYXRhYmFz
ZUlkKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBbc3Fs
RXJyb3IgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJz
Y3JlZW5Db2xvciJfcywgdG9Qcm90b2NvbFN0cmluZyhzY3JlZW5Db2xvcikpOworICAgICAgICBy
ZXN1bHRPYmplY3QtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIHRvSlNPTlN0cmluZ0Fy
cmF5KGFsdGVybmF0ZUNvbG9ycykpOworICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygi
cHJpbnRDb2xvciJfcywgdG9Qcm90b2NvbFN0cmluZyhwcmludENvbG9yKSk7CisgICAgICAgIGJh
Y2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0
T2JqZWN0KSwgZmFsc2UpOworICAgIH07CisKKyAgICBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKm9f
aW5fY29sdW1uTmFtZXMgPSB0b09iakNTdHJpbmdBcnJheSgmaW5fY29sdW1uTmFtZXMpOworICAg
IE5TU3RyaW5nICpvX2luX25vdGVzID0gaW5fbm90ZXM7CisgICAgZG91YmxlIG9faW5fdGltZXN0
YW1wID0gaW5fdGltZXN0YW1wOworICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb19pbl92YWx1
ZXMgPSBbW1tSV0lQcm90b2NvbEpTT05PYmplY3QgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDom
aW5fdmFsdWVzXSBhdXRvcmVsZWFzZV07CisgICAgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvX2lu
X3BheWxvYWQgPSBbW1tSV0lQcm90b2NvbEpTT05PYmplY3QgYWxsb2NdIGluaXRXaXRoSlNPTk9i
amVjdDomaW5fcGF5bG9hZF0gYXV0b3JlbGVhc2VdOworICAgIGludCBvX2luX2RhdGFiYXNlSWQg
PSBpbl9kYXRhYmFzZUlkOworICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKm9faW5fc3Fs
RXJyb3IgPSBbW1tUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGFsbG9jXSBpbml0V2l0aEpTT05P
YmplY3Q6JmluX3NxbEVycm9yXSBhdXRvcmVsZWFzZV07CisgICAgT3B0aW9uYWw8VGVzdFByb3Rv
Y29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzPiBvX2luX3NjcmVlbkNvbG9yID0gZnJvbVByb3RvY29s
U3RyaW5nPFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycz4oaW5fc2NyZWVuQ29sb3Ip
OworICAgIGlmICghb19pbl9zY3JlZW5Db2xvcikgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1z
LCAiUGFyYW1ldGVyICdzY3JlZW5Db2xvcicgb2YgbWV0aG9kICdEYXRhYmFzZS5leGVjdXRlTm9P
cHRpb25hbFBhcmFtZXRlcnMnIGNhbm5vdCBiZSBwcm9jZXNzZWQiX3MpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqb19pbl9hbHRlcm5hdGVDb2xv
cnMgPSB0b09iakNTdHJpbmdBcnJheSgmaW5fYWx0ZXJuYXRlQ29sb3JzKTsKKyAgICBPcHRpb25h
bDxUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29s
b3I+IG9faW5fcHJpbnRDb2xvciA9IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xEYXRh
YmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3I+KGluX3ByaW50Q29sb3Ip
OworICAgIGlmICghb19pbl9wcmludENvbG9yKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVy
KCktPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMs
ICJQYXJhbWV0ZXIgJ3ByaW50Q29sb3InIG9mIG1ldGhvZCAnRGF0YWJhc2UuZXhlY3V0ZU5vT3B0
aW9uYWxQYXJhbWV0ZXJzJyBjYW5ub3QgYmUgcHJvY2Vzc2VkIl9zKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIFttX2RlbGVnYXRlIGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1dp
dGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxs
YmFjayBjb2x1bW5OYW1lczpvX2luX2NvbHVtbk5hbWVzIG5vdGVzOm9faW5fbm90ZXMgdGltZXN0
YW1wOm9faW5fdGltZXN0YW1wIHZhbHVlczpvX2luX3ZhbHVlcyBwYXlsb2FkOm9faW5fcGF5bG9h
ZCBkYXRhYmFzZUlkOm9faW5fZGF0YWJhc2VJZCBzcWxFcnJvcjpvX2luX3NxbEVycm9yIHNjcmVl
bkNvbG9yOm9faW5fc2NyZWVuQ29sb3IudmFsdWUoKSBhbHRlcm5hdGVDb2xvcnM6b19pbl9hbHRl
cm5hdGVDb2xvcnMgcHJpbnRDb2xvcjpvX2luX3ByaW50Q29sb3IudmFsdWUoKV07Cit9CisKK30g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tl
bmREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJh
dGlvbi5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1v
cHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8d3RmL1BsYXRmb3JtLmg+CisKKyNpbXBv
cnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KKworX19hdHRyaWJ1dGVfXygodmlzaWJp
bGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24g
OiBOU09iamVjdAorQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNldERhdGFi
YXNlSGFuZGxlcjopIGlkPFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4gZGF0YWJh
c2VIYW5kbGVyOworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJh
dGlvbi5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1j
YWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgorCisj
aW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFj
a2VuZERpc3BhdGNoZXJzLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNw
YXRjaGFibGVBZ2VudC5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNw
ZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwor
CitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgoreworICAgIEF1Z21l
bnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7CisgICAgaWQ8VGVzdFByb3Rv
Y29sRGF0YWJhc2VEb21haW5IYW5kbGVyPiBfZGF0YWJhc2VIYW5kbGVyOworfQorCistIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xs
ZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2Vs
ZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2Nv
bnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRl
YWxsb2MKK3sKKyAgICBbX2RhdGFiYXNlSGFuZGxlciByZWxlYXNlXTsKKyAgICBbc3VwZXIgZGVh
bGxvY107Cit9CisKKy0gKHZvaWQpc2V0RGF0YWJhc2VIYW5kbGVyOihpZDxUZXN0UHJvdG9jb2xE
YXRhYmFzZURvbWFpbkhhbmRsZXI+KWhhbmRsZXIKK3sKKyAgICBpZiAoaGFuZGxlciA9PSBfZGF0
YWJhc2VIYW5kbGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBbX2RhdGFiYXNlSGFuZGxlciBy
ZWxlYXNlXTsKKyAgICBfZGF0YWJhc2VIYW5kbGVyID0gW2hhbmRsZXIgcmV0YWluXTsKKworICAg
IGF1dG8gYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IG1ha2VVbmlxdWU8T2JqQ0luc3BlY3RvckRhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXI+KGhhbmRsZXIpOworICAgIGF1dG8gYWx0ZXJuYXRlQWdlbnQg
PSBtYWtlVW5pcXVlPEFsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50PERhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXIsIEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+PigiRGF0YWJhc2Ui
X3MsICpfY29udHJvbGxlciwgV1RGTW92ZShhbHRlcm5hdGVEaXNwYXRjaGVyKSk7CisgICAgX2Nv
bnRyb2xsZXItPmFwcGVuZEV4dHJhQWdlbnQoV1RGTW92ZShhbHRlcm5hdGVBZ2VudCkpOworfQor
CistIChpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+KWRhdGFiYXNlSGFuZGxl
cgoreworICAgIHJldHVybiBfZGF0YWJhc2VIYW5kbGVyOworfQorCitAZW5kCisKKworIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAi
VGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLmgiCisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2Ug
SW5zcGVjdG9yOworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVy
cy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFt
ZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisj
aW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKyNpbXBvcnQgPHd0Zi9QbGF0Zm9ybS5o
PgorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+CisKKwor
QGNsYXNzIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I7CisKK3R5cGVkZWYgTlNfRU5VTShOU0lu
dGVnZXIsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycykgeworICAgIFRlc3RQcm90
b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc1JlZCwKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZVBy
aW1hcnlDb2xvcnNHcmVlbiwKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNC
bHVlLAorfTsKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGF0YWJh
c2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvcikgeworICAgIFRlc3RQcm90
b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JDeWFuLAor
ICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50
Q29sb3JNYWdlbnRhLAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFs
UGFyYW1ldGVyc1ByaW50Q29sb3JZZWxsb3csCisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVj
dXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckJsYWNrLAorfTsKKworCisKK3R5cGVk
ZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlv
bmFsUGFyYW1ldGVyc1ByaW50Q29sb3IpIHsKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQ3lhbiwKKyAgICBUZXN0UHJvdG9jb2xE
YXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yTWFnZW50YSwKKyAg
ICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENv
bG9yWWVsbG93LAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFy
YW1ldGVyc1ByaW50Q29sb3JCbGFjaywKK307CisKK3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIs
IFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xv
cikgeworICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJz
UHJpbnRDb2xvckN5YW4sCisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25h
bFBhcmFtZXRlcnNQcmludENvbG9yTWFnZW50YSwKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JZZWxsb3csCisgICAgVGVzdFByb3Rv
Y29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQmxhY2ssCit9
OworCisKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGF0YWJhc2VF
eGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yKSB7CisgICAgVGVzdFByb3RvY29s
RGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQ3lhbiwKKyAgICBU
ZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JN
YWdlbnRhLAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0
ZXJzUHJpbnRDb2xvclllbGxvdywKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09w
dGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JCbGFjaywKK307CisKK19fYXR0cmlidXRlX18oKHZp
c2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUVy
cm9yIDogUldJUHJvdG9jb2xKU09OT2JqZWN0CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXls
b2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKKy0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29u
T2JqZWN0OworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNz
YWdlIGNvZGU6KGludCljb2RlOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMs
IGNvcHkpIE5TU3RyaW5nICptZXNzYWdlOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25h
dG9taWMsIGFzc2lnbikgaW50IGNvZGU7CitAZW5kCisKK0Bwcm90b2NvbCBUZXN0UHJvdG9jb2xE
YXRhYmFzZURvbWFpbkhhbmRsZXIgPE5TT2JqZWN0PgorQG9wdGlvbmFsCistICh2b2lkKWV4ZWN1
dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmlu
ZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKE5TQXJyYXkv
KjxOU1N0cmluZz4qLyAqKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqKm5vdGVzLCBkb3VibGUgKnRp
bWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05P
YmplY3QgKipwYXlsb2FkLCBpbnQgKmRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJy
b3IgKipzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzICpzY3JlZW5D
b2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICoqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9j
b2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yICpwcmludENv
bG9yKSlzdWNjZXNzQ2FsbGJhY2sgY29sdW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAq
Kiljb2x1bW5OYW1lcyBub3RlczooTlNTdHJpbmcgKiopbm90ZXMgdGltZXN0YW1wOihkb3VibGUg
Kil0aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKiopdmFsdWVzIHBheWxv
YWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKilwYXlsb2FkIGRhdGFiYXNlSWQ6KGludCAqKWRh
dGFiYXNlSWQgc3FsRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKiopc3FsRXJyb3Ig
c2NyZWVuQ29sb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqKXNjcmVlbkNv
bG9yIGFsdGVybmF0ZUNvbG9yczooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKWFsdGVybmF0ZUNv
bG9ycyBwcmludENvbG9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBh
cmFtZXRlcnNQcmludENvbG9yICopcHJpbnRDb2xvcjsKKy0gKHZvaWQpZXhlY3V0ZU5vT3B0aW9u
YWxQYXJhbWV0ZXJzV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSll
cnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKShOU0FycmF5Lyo8TlNTdHJpbmc+
Ki8gKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJXSVBy
b3RvY29sSlNPTk9iamVjdCAqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnBheWxvYWQs
IGludCBkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpzcWxFcnJvciwgVGVz
dFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzIHNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNT
dHJpbmc+Ki8gKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9P
cHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yIHByaW50Q29sb3IpKXN1Y2Nlc3NDYWxsYmFjayBj
b2x1bW5OYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMgbm90ZXM6KE5T
U3RyaW5nICopbm90ZXMgdGltZXN0YW1wOihkb3VibGUpdGltZXN0YW1wIHZhbHVlczooUldJUHJv
dG9jb2xKU09OT2JqZWN0ICopdmFsdWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAq
KXBheWxvYWQgZGF0YWJhc2VJZDooaW50KWRhdGFiYXNlSWQgc3FsRXJyb3I6KFRlc3RQcm90b2Nv
bERhdGFiYXNlRXJyb3IgKilzcWxFcnJvciBzY3JlZW5Db2xvcjooVGVzdFByb3RvY29sRGF0YWJh
c2VQcmltYXJ5Q29sb3JzKXNjcmVlbkNvbG9yIGFsdGVybmF0ZUNvbG9yczooTlNBcnJheS8qPE5T
U3RyaW5nPiovICopYWx0ZXJuYXRlQ29sb3JzIHByaW50Q29sb3I6KFRlc3RQcm90b2NvbERhdGFi
YXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvcilwcmludENvbG9yOworQGVu
ZAorCisKKworCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGli
aWxpdHlPYmplY3RzLmg+CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMu
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0
IDx3dGYvUGxhdGZvcm0uaD4KKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJU
ZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVl
cy5oPgorCisKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1w
YXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI2ltcG9ydCA8d3RmL1BsYXRmb3JtLmg+CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgor
I2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgorCitu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgor
T3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2
YWx1ZSk7CisKK2lubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEYXRh
YmFzZVByaW1hcnlDb2xvcnMgdmFsdWUpCit7CisgICAgc3dpdGNoKHZhbHVlKSB7CisgICAgY2Fz
ZSBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNSZWQ6CisgICAgICAgIHJldHVybiAi
cmVkIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzR3JlZW46
CisgICAgICAgIHJldHVybiAiZ3JlZW4iX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFz
ZVByaW1hcnlDb2xvcnNCbHVlOgorICAgICAgICByZXR1cm4gImJsdWUiX3M7CisgICAgfQorfQor
Cit0ZW1wbGF0ZTw+CitpbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5
Q29sb3JzPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBp
ZiAodmFsdWUgPT0gInJlZCIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZVBy
aW1hcnlDb2xvcnNSZWQ7CisgICAgaWYgKHZhbHVlID09ICJncmVlbiIpCisgICAgICAgIHJldHVy
biBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNHcmVlbjsKKyAgICBpZiAodmFsdWUg
PT0gImJsdWUiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29s
b3JzQmx1ZTsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCitpbmxpbmUgU3RyaW5nIHRv
UHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJh
bWV0ZXJzUHJpbnRDb2xvciB2YWx1ZSkKK3sKKyAgICBzd2l0Y2godmFsdWUpIHsKKyAgICBjYXNl
IFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29s
b3JDeWFuOgorICAgICAgICByZXR1cm4gImN5YW4iX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xE
YXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yTWFnZW50YToKKyAg
ICAgICAgcmV0dXJuICJtYWdlbnRhIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VF
eGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvclllbGxvdzoKKyAgICAgICAgcmV0
dXJuICJ5ZWxsb3ciX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxP
cHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQmxhY2s6CisgICAgICAgIHJldHVybiAiYmxhY2si
X3M7CisgICAgfQorfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29s
RGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvcj4gZnJvbVByb3Rv
Y29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09ICJjeWFu
IikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFs
UGFyYW1ldGVyc1ByaW50Q29sb3JDeWFuOworICAgIGlmICh2YWx1ZSA9PSAibWFnZW50YSIpCisg
ICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFt
ZXRlcnNQcmludENvbG9yTWFnZW50YTsKKyAgICBpZiAodmFsdWUgPT0gInllbGxvdyIpCisgICAg
ICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRl
cnNQcmludENvbG9yWWVsbG93OworICAgIGlmICh2YWx1ZSA9PSAiYmxhY2siKQorICAgICAgICBy
ZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJp
bnRDb2xvckJsYWNrOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKKworCitpbmxpbmUg
U3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0
aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvciB2YWx1ZSkKK3sKKyAgICBzd2l0Y2godmFsdWUpIHsK
KyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVy
c1ByaW50Q29sb3JDeWFuOgorICAgICAgICByZXR1cm4gImN5YW4iX3M7CisgICAgY2FzZSBUZXN0
UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yTWFn
ZW50YToKKyAgICAgICAgcmV0dXJuICJtYWdlbnRhIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29s
RGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvclllbGxvdzoKKyAg
ICAgICAgcmV0dXJuICJ5ZWxsb3ciX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQmxhY2s6CisgICAgICAgIHJldHVy
biAiYmxhY2siX3M7CisgICAgfQorfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgT3B0aW9uYWw8VGVz
dFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvcj4g
ZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVl
ID09ICJjeWFuIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFs
bE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JDeWFuOworICAgIGlmICh2YWx1ZSA9PSAibWFn
ZW50YSIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRp
b25hbFBhcmFtZXRlcnNQcmludENvbG9yTWFnZW50YTsKKyAgICBpZiAodmFsdWUgPT0gInllbGxv
dyIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25h
bFBhcmFtZXRlcnNQcmludENvbG9yWWVsbG93OworICAgIGlmICh2YWx1ZSA9PSAiYmxhY2siKQor
ICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJh
bWV0ZXJzUHJpbnRDb2xvckJsYWNrOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK2lu
bGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVO
b09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IgdmFsdWUpCit7CisgICAgc3dpdGNoKHZhbHVl
KSB7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1l
dGVyc1ByaW50Q29sb3JDeWFuOgorICAgICAgICByZXR1cm4gImN5YW4iX3M7CisgICAgY2FzZSBU
ZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JN
YWdlbnRhOgorICAgICAgICByZXR1cm4gIm1hZ2VudGEiX3M7CisgICAgY2FzZSBUZXN0UHJvdG9j
b2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JZZWxsb3c6Cisg
ICAgICAgIHJldHVybiAieWVsbG93Il9zOworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VF
eGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQmxhY2s6CisgICAgICAgIHJldHVy
biAiYmxhY2siX3M7CisgICAgfQorfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgT3B0aW9uYWw8VGVz
dFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yPiBm
cm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUg
PT0gImN5YW4iKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9P
cHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQ3lhbjsKKyAgICBpZiAodmFsdWUgPT0gIm1hZ2Vu
dGEiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25h
bFBhcmFtZXRlcnNQcmludENvbG9yTWFnZW50YTsKKyAgICBpZiAodmFsdWUgPT0gInllbGxvdyIp
CisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFy
YW1ldGVyc1ByaW50Q29sb3JZZWxsb3c7CisgICAgaWYgKHZhbHVlID09ICJibGFjayIpCisgICAg
ICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVy
c1ByaW50Q29sb3JCbGFjazsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCisKKworaW5s
aW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5v
T3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvciB2YWx1ZSkKK3sKKyAgICBzd2l0Y2godmFsdWUp
IHsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0
ZXJzUHJpbnRDb2xvckN5YW46CisgICAgICAgIHJldHVybiAiY3lhbiJfczsKKyAgICBjYXNlIFRl
c3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvck1h
Z2VudGE6CisgICAgICAgIHJldHVybiAibWFnZW50YSJfczsKKyAgICBjYXNlIFRlc3RQcm90b2Nv
bERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvclllbGxvdzoKKyAg
ICAgICAgcmV0dXJuICJ5ZWxsb3ciX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JCbGFjazoKKyAgICAgICAgcmV0dXJu
ICJibGFjayJfczsKKyAgICB9Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBPcHRpb25hbDxUZXN0
UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3I+IGZy
b21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9
PSAiY3lhbiIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09w
dGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JDeWFuOworICAgIGlmICh2YWx1ZSA9PSAibWFnZW50
YSIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFs
UGFyYW1ldGVyc1ByaW50Q29sb3JNYWdlbnRhOworICAgIGlmICh2YWx1ZSA9PSAieWVsbG93IikK
KyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJh
bWV0ZXJzUHJpbnRDb2xvclllbGxvdzsKKyAgICBpZiAodmFsdWUgPT0gImJsYWNrIikKKyAgICAg
ICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJz
UHJpbnRDb2xvckJsYWNrOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0K
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFs
LWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIK
KworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFy
c2VyLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0
ZS5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW50ZXJmYWNlIFRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucyAoRGF0YWJhc2VEb21haW4pCisKKysgKHZvaWQpX3BhcnNlRGF0
YWJhc2VJZDooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Cisr
ICh2b2lkKV9wYXJzZVByaW1hcnlDb2xvcnM6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXls
b2FkOihpZClwYXlsb2FkOworKyAodm9pZClfcGFyc2VDb2xvckxpc3Q6KE5TQXJyYXkvKjxOU1N0
cmluZz4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3Bh
cnNlRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKiopb3V0VmFsdWUgZnJvbVBheWxv
YWQ6KGlkKXBheWxvYWQ7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucyAoRGF0YWJhc2VEb21haW4pCisKKysgKHZvaWQpX3BhcnNlRGF0YWJhc2VJ
ZDooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBU
SFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU051bWJlciBjbGFzc10pOwor
ICAgICpvdXRWYWx1ZSA9IChOU051bWJlciAqKXBheWxvYWQ7Cit9CisKKysgKHZvaWQpX3BhcnNl
UHJpbWFyeUNvbG9yczooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxv
YWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmlu
ZyBjbGFzc10pOworICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9y
cz4gcmVzdWx0ID0gSW5zcGVjdG9yOjpmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sRGF0
YWJhc2VQcmltYXJ5Q29sb3JzPihwYXlsb2FkKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JB
RF9FTlVNX1ZBTFVFKHJlc3VsdCwgQCJQcmltYXJ5Q29sb3JzIik7CisgICAgKm91dFZhbHVlID0g
QChyZXN1bHQudmFsdWUoKSk7Cit9CisKKysgKHZvaWQpX3BhcnNlQ29sb3JMaXN0OihOU0FycmF5
Lyo8TlNTdHJpbmc+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAg
ICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0FycmF5Lyo8TlNTdHJp
bmc+Ki8gY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSAoTlNBcnJheS8qPE5TU3RyaW5nPiovICop
cGF5bG9hZDsKK30KKworKyAodm9pZClfcGFyc2VFcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VF
cnJvciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOworICAg
ICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBhbGxvY10gaW5pdFdpdGhQ
YXlsb2FkOnBheWxvYWRdOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVz
Lm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRp
b25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKwor
I2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDxXZWJJbnNw
ZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorI2ltcG9ydCA8d3RmL0Fzc2Vy
dGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJ
bnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yCisK
Ky0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5T
U3RyaW5nICosIGlkPiAqKXBheWxvYWQKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRd
KSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlS
RURfUFJPUEVSVFkocGF5bG9hZFtAIm1lc3NhZ2UiXSwgQCJtZXNzYWdlIik7CisgICAgc2VsZi5t
ZXNzYWdlID0gcGF5bG9hZFtAIm1lc3NhZ2UiXTsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
UkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImNvZGUiXSwgQCJjb2RlIik7CisgICAgc2VsZi5j
b2RlID0gW3BheWxvYWRbQCJjb2RlIl0gaW50ZWdlclZhbHVlXTsKKworICAgIHJldHVybiBzZWxm
OworfQorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29s
SlNPTk9iamVjdCAqKW9iamVjdAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhK
U09OT2JqZWN0OltvYmplY3QgdG9KU09OT2JqZWN0XS5nZXQoKV0pKQorICAgICAgICByZXR1cm4g
bmlsOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aE1l
c3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBjb2RlOihpbnQpY29kZQoreworICAgIGlmICghKHNl
bGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShtZXNzYWdlLCBAIm1lc3NhZ2UiKTsKKworICAg
IHNlbGYubWVzc2FnZSA9IG1lc3NhZ2U7CisgICAgc2VsZi5jb2RlID0gY29kZTsKKworICAgIHJl
dHVybiBzZWxmOworfQorCistICh2b2lkKXNldE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZQor
eworICAgIFtzdXBlciBzZXRTdHJpbmc6bWVzc2FnZSBmb3JLZXk6QCJtZXNzYWdlIl07Cit9CisK
Ky0gKE5TU3RyaW5nICopbWVzc2FnZQoreworICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5
OkAibWVzc2FnZSJdOworfQorCistICh2b2lkKXNldENvZGU6KGludCljb2RlCit7CisgICAgW3N1
cGVyIHNldEludGVnZXI6Y29kZSBmb3JLZXk6QCJjb2RlIl07Cit9CisKKy0gKGludCljb2RlCit7
CisgICAgcmV0dXJuIFtzdXBlciBpbnRlZ2VyRm9yS2V5OkAiY29kZSJdOworfQorCitAZW5kCisK
KworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RlZmluaXRp
b25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RlZmluaXRpb25zLXdpdGgtbWFjLXBs
YXRmb3JtLmpzb24tcmVzdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
Li43NzBlYWIwMTljYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0
Zm9ybS5qc29uLXJlc3VsdApAQCAtMCwwICsxLDEyMzcgQEAKKyMjIyBCZWdpbiBGaWxlOiBJbnNw
ZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMuaW4KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKy8vIE5ldHdvcmsKK0luc3BlY3RvckJhY2tlbmQu
cmVnaXN0ZXJEb21haW4oIk5ldHdvcmsiLCBudWxsKTsKKyNpZiBQTEFURk9STShNQUMpCitJbnNw
ZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiTmV0d29yay5sb2FkUmVzb3VyY2UiLCBudWxs
LCBbXSwgW10pOworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKKyNpZiBQTEFURk9STShNQUMpCitJ
bnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnQoIk5ldHdvcmsucmVzb3VyY2VMb2FkZWQiLCBu
dWxsLCBbXSk7CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorSW5zcGVjdG9yQmFja2VuZC5yZWdp
c3Rlck5ldHdvcmtEaXNwYXRjaGVyID0gSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRpc3BhdGNo
ZXIuYmluZChJbnNwZWN0b3JCYWNrZW5kLCAiTmV0d29yayIpOworSW5zcGVjdG9yQmFja2VuZC5h
Y3RpdmF0ZURvbWFpbigiTmV0d29yayIsIG51bGwpOworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JC
YWNrZW5kQ29tbWFuZHMuanMuaW4KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmlu
aXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0u
aD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCisjaW5j
bHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckZyb250ZW5kUm91dGVyLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdm9pZCBzZXRCYWNrZW5k
RGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2Jh
Y2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQorICAgIEJhY2tlbmREaXNw
YXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3Bh
dGNoZXIuZ2V0KCk7IH0KK3ByaXZhdGU6CisgICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBt
X2JhY2tlbmREaXNwYXRjaGVyOworfTsKKworCitjbGFzcyBBbHRlcm5hdGVOZXR3b3JrQmFja2Vu
ZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVibGlj
OgorICAgIHZpcnR1YWwgfkFsdGVybmF0ZU5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQor
I2lmIFBMQVRGT1JNKE1BQykKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgY2Fs
bElkKSA9IDA7CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorfTsKKworfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKKyMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisK
KyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmpl
Y3RzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCisjaWYgRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCitjbGFzcyBBbHRlcm5hdGVOZXR3b3JrQmFja2Vu
ZERpc3BhdGNoZXI7CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCisKK2NsYXNzIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgeworcHVibGlj
OgorI2lmIFBMQVRGT1JNKE1BQykKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlKEVycm9y
U3RyaW5nJikgPSAwOworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKK3Byb3RlY3RlZDoKKyAgICB2
aXJ0dWFsIH5OZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7Cit9OworCitjbGFzcyBO
ZXR3b3JrQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2Vu
ZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8TmV0d29ya0JhY2tlbmREaXNw
YXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBOZXR3b3JrQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyKik7CisgICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3Ry
aW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkgZmluYWw7Citwcml2YXRl
OgorI2lmIFBMQVRGT1JNKE1BQykKKyAgICB2b2lkIGxvYWRSZXNvdXJjZShsb25nIHJlcXVlc3RJ
ZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyNlbmRpZiAvLyBQTEFURk9S
TShNQUMpCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCitwdWJs
aWM6CisgICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZU5ldHdvcmtCYWNr
ZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVybmF0ZURpc3BhdGNo
ZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9Citwcml2YXRlOgorICAgIEFsdGVybmF0ZU5ldHdv
cmtCYWNrZW5kRGlzcGF0Y2hlciogbV9hbHRlcm5hdGVEaXNwYXRjaGVyIHsgbnVsbHB0ciB9Owor
I2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorcHJpdmF0
ZToKKyAgICBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImLCBOZXR3
b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgTmV0d29ya0JhY2tlbmREaXNwYXRj
aGVySGFuZGxlciogbV9hZ2VudCB7IG51bGxwdHIgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZh
bHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENI
RVJTKQorI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNlbmRp
ZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworbmFtZXNwYWNl
IEluc3BlY3RvciB7CisKK05ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5OZXR3b3Jr
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9CisKK1JlZjxOZXR3b3JrQmFja2VuZERpc3Bh
dGNoZXI+IE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEJhY2tlbmREaXNwYXRjaGVy
JiBiYWNrZW5kRGlzcGF0Y2hlciwgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdl
bnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVy
KGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOworfQorCitOZXR3b3JrQmFja2VuZERpc3BhdGNo
ZXI6Ok5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERp
c3BhdGNoZXIsIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQorICAgIDog
U3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCisgICAgLCBt
X2FnZW50KGFnZW50KQoreworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0
Y2hlckZvckRvbWFpbigiTmV0d29yayJfcywgdGhpcyk7Cit9CisKK3ZvaWQgTmV0d29ya0JhY2tl
bmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRo
b2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKK3sKKyAgICBSZWY8TmV0d29ya0JhY2tl
bmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKKworICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+
IHBhcmFtZXRlcnM7CisgICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRl
cnMpOworCisjaWYgUExBVEZPUk0oTUFDKQorICAgIGlmIChtZXRob2QgPT0gImxvYWRSZXNvdXJj
ZSIpIHsKKyAgICAgICAgbG9hZFJlc291cmNlKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJz
KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorCisg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0
Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yay4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBm
b3VuZCIpOworfQorCisjaWYgUExBVEZPUk0oTUFDKQordm9pZCBOZXR3b3JrQmFja2VuZERpc3Bh
dGNoZXI6OmxvYWRSZXNvdXJjZShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4m
JikKK3sKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyAgICBp
ZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hl
ci0+bG9hZFJlc291cmNlKHJlcXVlc3RJZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5k
aWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyAgICBFcnJv
clN0cmluZyBlcnJvcjsKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmpl
Y3Q6OmNyZWF0ZSgpOworICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZShlcnJvcik7CisKKyAgICBp
ZiAoIWVycm9yLmxlbmd0aCgpKQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVz
cG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKKyAgICBlbHNlCisgICAg
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3Bh
dGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Cit9CisjZW5kaWYgLy8gUExBVEZP
Uk0oTUFDKQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0
QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlz
cGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25z
LXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKwor
I2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVl
cy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVj
dG9yIHsKKworY2xhc3MgRnJvbnRlbmRSb3V0ZXI7CisKK2NsYXNzIE5ldHdvcmtGcm9udGVuZERp
c3BhdGNoZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIE5l
dHdvcmtGcm9udGVuZERpc3BhdGNoZXIoRnJvbnRlbmRSb3V0ZXImIGZyb250ZW5kUm91dGVyKSA6
IG1fZnJvbnRlbmRSb3V0ZXIoZnJvbnRlbmRSb3V0ZXIpIHsgfQorI2lmIFBMQVRGT1JNKE1BQykK
KyAgICB2b2lkIHJlc291cmNlTG9hZGVkKCk7CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorcHJp
dmF0ZToKKyAgICBGcm9udGVuZFJvdXRlciYgbV9mcm9udGVuZFJvdXRlcjsKK307CisKK30gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVy
cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9y
bS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisjaWYg
UExBVEZPUk0oTUFDKQordm9pZCBOZXR3b3JrRnJvbnRlbmREaXNwYXRjaGVyOjpyZXNvdXJjZUxv
YWRlZCgpCit7CisgICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmpl
Y3Q6OmNyZWF0ZSgpOworICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIk5l
dHdvcmsucmVzb3VyY2VMb2FkZWQiX3MpOworCisgICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZl
bnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKK30KKyNlbmRpZiAvLyBQTEFURk9STShN
QUMpCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9u
dGVuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0
cy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1t
YWMtcGxhdGZvcm0uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgorI2luY2x1ZGUgPHd0
Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNl
IFByb3RvY29sIHsKKworCisKKy8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgorbmFtZXNwYWNlIE5l
dHdvcmsgeworI2lmIFBMQVRGT1JNKE1BQykKK2NsYXNzIE5ldHdvcmtFcnJvcjsKKyNlbmRpZiAv
LyBQTEFURk9STShNQUMpCit9IC8vIE5ldHdvcmsKKy8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0
aW9ucy4KKworCisKKworbmFtZXNwYWNlIE5ldHdvcmsgeworCisjaWYgUExBVEZPUk0oTUFDKQor
Y2xhc3MgTmV0d29ya0Vycm9yIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgeworcHVibGljOgor
ICAgIGVudW0geworICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCisgICAgICAgIE1lc3NhZ2VTZXQg
PSAxIDw8IDAsCisgICAgICAgIENvZGVTZXQgPSAxIDw8IDEsCisgICAgICAgIEFsbEZpZWxkc1Nl
dCA9IChNZXNzYWdlU2V0IHwgQ29kZVNldCkKKyAgICB9OworCisgICAgdGVtcGxhdGU8aW50IFNU
QVRFPgorICAgIGNsYXNzIEJ1aWxkZXIgeworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxK
U09OOjpPYmplY3Q+IG1fcmVzdWx0OworCisgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWls
ZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKKyAg
ICAgICAgfQorCisgICAgICAgIEJ1aWxkZXIoUmVmPC8qTmV0d29ya0Vycm9yKi9KU09OOjpPYmpl
Y3Q+JiYgb2JqZWN0KQorICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0
LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAgICAgICB9CisgICAgICAg
IGZyaWVuZCBjbGFzcyBOZXR3b3JrRXJyb3I7CisgICAgcHVibGljOgorCisgICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIHZhbHVlKQor
ICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTWVzc2FnZVNl
dCksIHByb3BlcnR5X21lc3NhZ2VfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQt
PnNldFN0cmluZygibWVzc2FnZSJfcywgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxNZXNzYWdlU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8
IENvZGVTZXQ+JiBzZXRDb2RlKGludCB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIENvZGVTZXQpLCBwcm9wZXJ0eV9jb2RlX2FscmVhZHlfc2V0
KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2VyKCJjb2RlIl9zLCB2YWx1ZSk7Cisg
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvZGVTZXQ+KCk7CisgICAgICAgIH0KKworICAg
ICAgICBSZWY8TmV0d29ya0Vycm9yPiByZWxlYXNlKCkKKyAgICAgICAgeworICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5
KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihOZXR3b3JrRXJyb3IpID09IHNp
emVvZihKU09OOjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7CisKKyAgICAgICAgICAgIFJlZjxKU09O
OjpPYmplY3Q+IGpzb25SZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOworICAgICAg
ICAgICAgYXV0byByZXN1bHQgPSBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxOZXR3b3Jr
RXJyb3I+Kj4oJmpzb25SZXN1bHQpKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
ICAgIH0KKyAgICB9OworCisgICAgLyoKKyAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6Cisg
ICAgICogUmVmPE5ldHdvcmtFcnJvcj4gcmVzdWx0ID0gTmV0d29ya0Vycm9yOjpjcmVhdGUoKQor
ICAgICAqICAgICAuc2V0TWVzc2FnZSguLi4pCisgICAgICogICAgIC5zZXRDb2RlKC4uLikKKyAg
ICAgKiAgICAgLnJlbGVhc2UoKTsKKyAgICAgKi8KKyAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxk
c1NldD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0
PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICB9Cit9OworI2VuZGlmIC8vIFBMQVRGT1JN
KE1BQykKKworfSAvLyBOZXR3b3JrCisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0
cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKworI2luY2x1ZGUg
PHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNw
YWNlIEluc3BlY3RvciB7CisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKworCit9IC8vIG5hbWVz
cGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBk
ZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+
CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCitAcHJvdG9jb2wgVGVzdFByb3RvY29sTmV0
d29ya0RvbWFpbkhhbmRsZXI7CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKK2NsYXNzIE9i
akNJbnNwZWN0b3JOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJu
YXRlTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKK3B1YmxpYzoKKyAgICBPYmpDSW5zcGVjdG9yTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyKGlk
PFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdhdGUg
PSBoYW5kbGVyOyB9CisjaWYgUExBVEZPUk0oTUFDKQorICAgIHZvaWQgbG9hZFJlc291cmNlKGxv
bmcgcmVxdWVzdElkKSBmaW5hbDsKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCitwcml2YXRlOgor
ICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluSGFuZGxlcj4+IG1fZGVs
ZWdhdGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgorLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSAiVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIK
KyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwor
I2lmIFBMQVRGT1JNKE1BQykKK3ZvaWQgT2JqQ0luc3BlY3Rvck5ldHdvcmtCYWNrZW5kRGlzcGF0
Y2hlcjo6bG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkKQoreworICAgIGlmICghW21fZGVsZWdh
dGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2VXaXRoRXJyb3JDYWxs
YmFjazpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2RO
b3RGb3VuZCwgIidOZXR3b3JrLmxvYWRSZXNvdXJjZScgd2FzIG5vdCBmb3VuZCJfcyk7CisgICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3Ip
IHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1
ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgIH07CisKKyAgICBp
ZCBzdWNjZXNzQ2FsbGJhY2sgPSBeeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5k
UmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAg
fTsKKworICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZVdpdGhFcnJvckNhbGxiYWNrOmVycm9y
Q2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107Cit9CisjZW5kaWYgLy8g
UExBVEZPUk0oTUFDKQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8d3RmL1BsYXRmb3JtLmg+CisKKyNp
bXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KKworX19hdHRyaWJ1dGVfXygodmlz
aWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRp
b24gOiBOU09iamVjdAorQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNldE5l
dHdvcmtIYW5kbGVyOikgaWQ8VGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkhhbmRsZXI+IG5ldHdv
cmtIYW5kbGVyOworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBUZXN0UHJvdG9jb2xO
ZXR3b3JrRG9tYWluRXZlbnREaXNwYXRjaGVyICpuZXR3b3JrRXZlbnREaXNwYXRjaGVyOworQGVu
ZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJv
dG9jb2xDb25maWd1cmF0aW9uLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgi
CisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+CisjaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2lt
cG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+CisKK3Vz
aW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xD
b25maWd1cmF0aW9uCit7CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29u
dHJvbGxlcjsKKyAgICBpZDxUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluSGFuZGxlcj4gX25ldHdv
cmtIYW5kbGVyOworICAgIFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5FdmVudERpc3BhdGNoZXIg
Kl9uZXR3b3JrRXZlbnREaXNwYXRjaGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhD
b250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sK
KyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJu
IG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9s
bGVyOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbX25l
dHdvcmtIYW5kbGVyIHJlbGVhc2VdOworICAgIFtfbmV0d29ya0V2ZW50RGlzcGF0Y2hlciByZWxl
YXNlXTsKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0gKHZvaWQpc2V0TmV0d29ya0hhbmRs
ZXI6KGlkPFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5IYW5kbGVyPiloYW5kbGVyCit7CisgICAg
aWYgKGhhbmRsZXIgPT0gX25ldHdvcmtIYW5kbGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBb
X25ldHdvcmtIYW5kbGVyIHJlbGVhc2VdOworICAgIF9uZXR3b3JrSGFuZGxlciA9IFtoYW5kbGVy
IHJldGFpbl07CisKKyAgICBhdXRvIGFsdGVybmF0ZURpc3BhdGNoZXIgPSBtYWtlVW5pcXVlPE9i
akNJbnNwZWN0b3JOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI+KGhhbmRsZXIpOworICAgIGF1dG8g
YWx0ZXJuYXRlQWdlbnQgPSBtYWtlVW5pcXVlPEFsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50PE5l
dHdvcmtCYWNrZW5kRGlzcGF0Y2hlciwgQWx0ZXJuYXRlTmV0d29ya0JhY2tlbmREaXNwYXRjaGVy
Pj4oIk5ldHdvcmsiX3MsICpfY29udHJvbGxlciwgV1RGTW92ZShhbHRlcm5hdGVEaXNwYXRjaGVy
KSk7CisgICAgX2NvbnRyb2xsZXItPmFwcGVuZEV4dHJhQWdlbnQoV1RGTW92ZShhbHRlcm5hdGVB
Z2VudCkpOworfQorCistIChpZDxUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluSGFuZGxlcj4pbmV0
d29ya0hhbmRsZXIKK3sKKyAgICByZXR1cm4gX25ldHdvcmtIYW5kbGVyOworfQorCistIChUZXN0
UHJvdG9jb2xOZXR3b3JrRG9tYWluRXZlbnREaXNwYXRjaGVyICopbmV0d29ya0V2ZW50RGlzcGF0
Y2hlcgoreworICAgIGlmICghX25ldHdvcmtFdmVudERpc3BhdGNoZXIpCisgICAgICAgIF9uZXR3
b3JrRXZlbnREaXNwYXRjaGVyID0gW1tUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluRXZlbnREaXNw
YXRjaGVyIGFsbG9jXSBpbml0V2l0aENvbnRyb2xsZXI6X2NvbnRyb2xsZXJdOworICAgIHJldHVy
biBfbmV0d29ya0V2ZW50RGlzcGF0Y2hlcjsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sRXZlbnREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIK
KworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDx3dGYv
SlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50
YXRpb24gVGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkV2ZW50RGlzcGF0Y2hlcgoreworICAgIEF1
Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Cit9CisKKy0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxl
ciopY29udHJvbGxlcgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxm
KQorICAgICAgICByZXR1cm4gbmlsOworICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBfY29u
dHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpcmVz
b3VyY2VMb2FkZWQKK3sKKyAgICBjb25zdCBGcm9udGVuZFJvdXRlciYgcm91dGVyID0gX2NvbnRy
b2xsZXItPmZyb250ZW5kUm91dGVyKCk7CisKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVz
c2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAganNvbk1lc3NhZ2UtPnNldFN0cmlu
ZygibWV0aG9kIl9zLCAiTmV0d29yay5yZXNvdXJjZUxvYWRlZCJfcyk7CisgICAgcm91dGVyLnNl
bmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworfQorCitAZW5kCisKKworIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2wuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRl
ZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Cisj
aW1wb3J0IDx3dGYvUGxhdGZvcm0uaD4KKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3Rv
Y29sSlNPTk9iamVjdC5oPgorCisKKyNpZiBQTEFURk9STShNQUMpCitAY2xhc3MgVGVzdFByb3Rv
Y29sTmV0d29ya0Vycm9yOworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKKworCisKKyNpZiBQTEFU
Rk9STShNQUMpCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRl
cmZhY2UgVGVzdFByb3RvY29sTmV0d29ya0Vycm9yIDogUldJUHJvdG9jb2xKU09OT2JqZWN0Cist
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwg
aWQ+ICopcGF5bG9hZDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihS
V0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OworLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlIGNvZGU6KGludCljb2RlOworLyogcmVxdWly
ZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICptZXNzYWdlOworLyog
cmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgaW50IGNvZGU7CitAZW5k
CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorCitAcHJvdG9jb2wgVGVzdFByb3RvY29sTmV0d29y
a0RvbWFpbkhhbmRsZXIgPE5TT2JqZWN0PgorQG9wdGlvbmFsCisjaWYgUExBVEZPUk0oTUFDKQor
LSAodm9pZClsb2FkUmVzb3VyY2VXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAq
ZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKHZvaWQpKXN1Y2Nl
c3NDYWxsYmFjazsKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCitAZW5kCisKK19fYXR0cmlidXRl
X18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xOZXR3
b3JrRG9tYWluRXZlbnREaXNwYXRjaGVyIDogTlNPYmplY3QKKy0gKHZvaWQpcmVzb3VyY2VMb2Fk
ZWQ7CitAZW5kCisKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21w
YXRpYmlsaXR5T2JqZWN0cy5oPgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCisKKyMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDx3dGYvUGxhdGZv
cm0uaD4KKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xK
U09OT2JqZWN0UHJpdmF0ZS5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJ
bnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCitAaW50
ZXJmYWNlIFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5FdmVudERpc3BhdGNoZXIgKFByaXZhdGUp
CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihJbnNwZWN0b3I6OkF1Z21lbnRh
YmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcjsKK0BlbmQKKworCisjIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVm
aW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDx3dGYvUGxhdGZvcm0uaD4KKworI2ltcG9ydCAi
VGVzdFByb3RvY29sLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNv
bnZlcnNpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBPYmpDRW51bVR5cGU+CitPcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmlu
Zyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgor
CisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBv
cnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQ
cm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7
CisKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChOZXR3b3JrRG9tYWlu
KQorCisjaWYgUExBVEZPUk0oTUFDKQorKyAodm9pZClfcGFyc2VOZXR3b3JrRXJyb3I6KFRlc3RQ
cm90b2NvbE5ldHdvcmtFcnJvciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsK
KyNlbmRpZiAvLyBQTEFURk9STShNQUMpCisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucyAoTmV0d29ya0RvbWFpbikKKworI2lmIFBMQVRGT1JNKE1B
QykKKysgKHZvaWQpX3BhcnNlTmV0d29ya0Vycm9yOihUZXN0UHJvdG9jb2xOZXR3b3JrRXJyb3Ig
Kiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJ
T05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKKyAgICAqb3V0
VmFsdWUgPSBbW1Rlc3RQcm90b2NvbE5ldHdvcmtFcnJvciBhbGxvY10gaW5pdFdpdGhQYXlsb2Fk
OnBheWxvYWRdOworfQorI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKKworQGVuZAorCisKKyMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisKKyMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xUeXBlcy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIK
KworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDxXZWJJ
bnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorI2ltcG9ydCA8d3RmL0Fz
c2VydGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFj
ZSBJbnNwZWN0b3I7CisKKyNpZiBQTEFURk9STShNQUMpCitAaW1wbGVtZW50YXRpb24gVGVzdFBy
b3RvY29sTmV0d29ya0Vycm9yCisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5v
bm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQKK3sKKyAgICBpZiAo
IShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAIm1lc3NhZ2UiXSwgQCJt
ZXNzYWdlIik7CisgICAgc2VsZi5tZXNzYWdlID0gcGF5bG9hZFtAIm1lc3NhZ2UiXTsKKworICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImNvZGUiXSwg
QCJjb2RlIik7CisgICAgc2VsZi5jb2RlID0gW3BheWxvYWRbQCJjb2RlIl0gaW50ZWdlclZhbHVl
XTsKKworICAgIHJldHVybiBzZWxmOworfQorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9j
b2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9iamVjdAoreworICAgIGlmICghKHNl
bGYgPSBbc3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmplY3QgdG9KU09OT2JqZWN0XS5nZXQo
KV0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBjb2RlOihpbnQp
Y29kZQoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4g
bmlsOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShtZXNzYWdl
LCBAIm1lc3NhZ2UiKTsKKworICAgIHNlbGYubWVzc2FnZSA9IG1lc3NhZ2U7CisgICAgc2VsZi5j
b2RlID0gY29kZTsKKworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXNldE1lc3NhZ2U6
KE5TU3RyaW5nICopbWVzc2FnZQoreworICAgIFtzdXBlciBzZXRTdHJpbmc6bWVzc2FnZSBmb3JL
ZXk6QCJtZXNzYWdlIl07Cit9CisKKy0gKE5TU3RyaW5nICopbWVzc2FnZQoreworICAgIHJldHVy
biBbc3VwZXIgc3RyaW5nRm9yS2V5OkAibWVzc2FnZSJdOworfQorCistICh2b2lkKXNldENvZGU6
KGludCljb2RlCit7CisgICAgW3N1cGVyIHNldEludGVnZXI6Y29kZSBmb3JLZXk6QCJjb2RlIl07
Cit9CisKKy0gKGludCljb2RlCit7CisgICAgcmV0dXJuIFtzdXBlciBpbnRlZ2VyRm9yS2V5OkAi
Y29kZSJdOworfQorCitAZW5kCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorCisKKyMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW4tZGVidWdnYWJsZVR5
cGVzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL2RvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbi1yZXN1bHQKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmIzNWY0ODg2MTI0Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4
cGVjdGVkL2RvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbi1yZXN1bHQKQEAgLTAsMCArMSwxMDQ2
IEBACisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzLmluCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKy8vIERvbWFpbgor
SW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiRG9tYWluIiwgbnVsbCk7CitJbnNwZWN0
b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiRG9tYWluLkNvbW1hbmQiLCBudWxsLCBbXSwgW10p
OworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckV2ZW50KCJEb21haW4uRXZlbnQiLCBudWxsLCBb
XSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluRGlzcGF0Y2hlciA9IEluc3BlY3Rv
ckJhY2tlbmQucmVnaXN0ZXJEaXNwYXRjaGVyLmJpbmQoSW5zcGVjdG9yQmFja2VuZCwgIkRvbWFp
biIpOworSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiRG9tYWluIiwgWyJ3ZWItcGFn
ZSJdKTsKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzLmluCisKKyMj
IyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisKK25hbWVzcGFj
ZSBJbnNwZWN0b3IgeworCitjbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJs
aWM6CisgICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNo
ZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRj
aGVyKTsgfQorICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0
IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KK3ByaXZhdGU6CisgICAgUmVm
UHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOworfTsKKworCitjbGFz
cyBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+QWx0ZXJuYXRlRG9tYWluQmFj
a2VuZERpc3BhdGNoZXIoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChsb25nIGNhbGxJ
ZCkgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyMjIyBFbmQgRmlsZTogVGVzdEFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2Vu
ZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4t
ZGVidWdnYWJsZVR5cGVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJp
bmc7CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK2NsYXNz
IEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyOworI2VuZGlmIC8vIEVOQUJMRShJTlNQ
RUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCitjbGFzcyBEb21haW5CYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBDb21tYW5kKEVycm9yU3Ry
aW5nJikgPSAwOworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgfkRvbWFpbkJhY2tlbmREaXNwYXRj
aGVySGFuZGxlcigpOworfTsKKworY2xhc3MgRG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwg
OiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHN0
YXRpYyBSZWY8RG9tYWluQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hl
ciYsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIHZvaWQgZGlzcGF0Y2go
bG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYm
IG1lc3NhZ2UpIGZpbmFsOworcHJpdmF0ZToKKyAgICB2b2lkIENvbW1hbmQobG9uZyByZXF1ZXN0
SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisjaWYgRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCitwdWJsaWM6CisgICAgdm9pZCBzZXRBbHRlcm5h
dGVEaXNwYXRjaGVyKEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVE
aXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7
IH0KK3ByaXZhdGU6CisgICAgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIqIG1fYWx0
ZXJuYXRlRGlzcGF0Y2hlciB7IG51bGxwdHIgfTsKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK3ByaXZhdGU6CisgICAgRG9tYWluQmFja2VuZERpc3Bh
dGNoZXIoQmFja2VuZERpc3BhdGNoZXImLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIq
KTsKKyAgICBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQgeyBudWxscHRy
IH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEJh
Y2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNo
ZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dh
YmxlVHlwZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5o
IgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4K
KyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3ll
ZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5k
RGlzcGF0Y2hlcnMuaCIKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK0RvbWFpbkJhY2tlbmREaXNwYXRj
aGVySGFuZGxlcjo6fkRvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQorCitSZWY8
RG9tYWluQmFja2VuZERpc3BhdGNoZXI+IERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUo
QmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBEb21haW5CYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXIqIGFnZW50KQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERvbWFpbkJh
Y2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOworfQorCitEb21haW5C
YWNrZW5kRGlzcGF0Y2hlcjo6RG9tYWluQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNo
ZXImIGJhY2tlbmREaXNwYXRjaGVyLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFn
ZW50KQorICAgIDogU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNo
ZXIpCisgICAgLCBtX2FnZW50KGFnZW50KQoreworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJl
Z2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbigiRG9tYWluIl9zLCB0aGlzKTsKK30KKwordm9pZCBE
b21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0
cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCit7CisgICAgUmVmPERv
bWFpbkJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKKworICAgIFJlZlB0cjxKU09O
OjpPYmplY3Q+IHBhcmFtZXRlcnM7CisgICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3Ms
IHBhcmFtZXRlcnMpOworCisgICAgaWYgKG1ldGhvZCA9PSAiQ29tbWFuZCIpIHsKKyAgICAgICAg
Q29tbWFuZChyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihC
YWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRG9tYWluLiIgKyBtZXRob2QgKyAi
JyB3YXMgbm90IGZvdW5kIik7Cit9CisKK3ZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNv
bW1hbmQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCit7CisjaWYgRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisgICAgaWYgKG1fYWx0ZXJuYXRl
RGlzcGF0Y2hlcikgeworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPkNvbW1hbmQocmVx
dWVzdElkKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAg
IFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAg
bV9hZ2VudC0+Q29tbWFuZChlcnJvcik7CisKKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQorICAg
ICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3Zl
KHJlc3VsdCksIGZhbHNlKTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZN
b3ZlKGVycm9yKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZp
bGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJv
bnRlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9t
YWluLWRlYnVnZ2FibGVUeXBlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisK
KyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1
ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CisKK2NsYXNzIEZyb250ZW5kUm91dGVyOworCitjbGFzcyBEb21haW5Gcm9udGVuZERp
c3BhdGNoZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIERv
bWFpbkZyb250ZW5kRGlzcGF0Y2hlcihGcm9udGVuZFJvdXRlciYgZnJvbnRlbmRSb3V0ZXIpIDog
bV9mcm9udGVuZFJvdXRlcihmcm9udGVuZFJvdXRlcikgeyB9CisgICAgdm9pZCBFdmVudCgpOwor
cHJpdmF0ZToKKyAgICBGcm9udGVuZFJvdXRlciYgbV9mcm9udGVuZFJvdXRlcjsKK307CisKK30g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRj
aGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJsZVR5cGVzLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3ZvaWQgRG9t
YWluRnJvbnRlbmREaXNwYXRjaGVyOjpFdmVudCgpCit7CisgICAgUmVmPEpTT046Ok9iamVjdD4g
anNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGpzb25NZXNzYWdlLT5z
ZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7CisKKyAgICBtX2Zyb250ZW5k
Um91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworfQorCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRj
aGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisK
K25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworCisK
KworCisKKworCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xPYmplY3RzLmgiCisKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCituYW1l
c3BhY2UgUHJvdG9jb2wgeworCisKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5j
cHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5q
c29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQg
PHd0Zi9QbGF0Zm9ybS5oPgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0
ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgor
CitAcHJvdG9jb2wgVGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcjsKKworbmFtZXNwYWNl
IEluc3BlY3RvciB7CisKKworY2xhc3MgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRj
aGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyIHsKKyAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBPYmpDSW5zcGVjdG9yRG9t
YWluQmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4g
aGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQorICAgIHZvaWQgQ29tbWFuZChsb25n
IHJlcXVlc3RJZCkgZmluYWw7Citwcml2YXRlOgorICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9j
b2xEb21haW5Eb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKK307CisKK30gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVy
cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0K
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJsZVR5cGVz
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9y
dCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIK
KworI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW5jbHVkZSAiVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKK3ZvaWQgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNw
YXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElkKQoreworICAgIGlmICghW21fZGVsZWdhdGUg
cmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6c3Vj
Y2Vzc0NhbGxiYWNrOildKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFBy
b3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQs
ICInRG9tYWluLkNvbW1hbmQnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7CisgICAgICAgIGJh
Y2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5k
RGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICB9OworCisgICAgaWQgc3VjY2Vzc0NhbGxi
YWNrID0gXnsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVl
c3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2UpOworICAgIH07CisKKyAgICBbbV9k
ZWxlZ2F0ZSBDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2Fs
bGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKK30KKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisK
KyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24KKy8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8d3RmL1BsYXRmb3JtLmg+
CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KKworX19hdHRyaWJ1dGVf
XygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZp
Z3VyYXRpb24gOiBOU09iamVjdAorQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVy
PXNldERvbWFpbkhhbmRsZXI6KSBpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiBk
b21haW5IYW5kbGVyOworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBUZXN0UHJvdG9j
b2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKmRvbWFpbkV2ZW50RGlzcGF0Y2hlcjsKK0Bl
bmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorCisjIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xD
b25maWd1cmF0aW9uLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW1w
b3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0
Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+CisKK3VzaW5nIG5h
bWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1
cmF0aW9uCit7CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxl
cjsKKyAgICBpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiBfZG9tYWluSGFuZGxl
cjsKKyAgICBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKl9kb21haW5F
dmVudERpc3BhdGNoZXI7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6
KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgoreworICAgIHNlbGYg
PSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAg
IEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAg
cmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIFtfZG9tYWluSGFuZGxl
ciByZWxlYXNlXTsKKyAgICBbX2RvbWFpbkV2ZW50RGlzcGF0Y2hlciByZWxlYXNlXTsKKyAgICBb
c3VwZXIgZGVhbGxvY107Cit9CisKKy0gKHZvaWQpc2V0RG9tYWluSGFuZGxlcjooaWQ8VGVzdFBy
b3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4paGFuZGxlcgoreworICAgIGlmIChoYW5kbGVyID09
IF9kb21haW5IYW5kbGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBbX2RvbWFpbkhhbmRsZXIg
cmVsZWFzZV07CisgICAgX2RvbWFpbkhhbmRsZXIgPSBbaGFuZGxlciByZXRhaW5dOworCisgICAg
YXV0byBhbHRlcm5hdGVEaXNwYXRjaGVyID0gbWFrZVVuaXF1ZTxPYmpDSW5zcGVjdG9yRG9tYWlu
QmFja2VuZERpc3BhdGNoZXI+KGhhbmRsZXIpOworICAgIGF1dG8gYWx0ZXJuYXRlQWdlbnQgPSBt
YWtlVW5pcXVlPEFsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50PERvbWFpbkJhY2tlbmREaXNwYXRj
aGVyLCBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4+KCJEb21haW4iX3MsICpfY29u
dHJvbGxlciwgV1RGTW92ZShhbHRlcm5hdGVEaXNwYXRjaGVyKSk7CisgICAgX2NvbnRyb2xsZXIt
PmFwcGVuZEV4dHJhQWdlbnQoV1RGTW92ZShhbHRlcm5hdGVBZ2VudCkpOworfQorCistIChpZDxU
ZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPilkb21haW5IYW5kbGVyCit7CisgICAgcmV0
dXJuIF9kb21haW5IYW5kbGVyOworfQorCistIChUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVu
dERpc3BhdGNoZXIgKilkb21haW5FdmVudERpc3BhdGNoZXIKK3sKKyAgICBpZiAoIV9kb21haW5F
dmVudERpc3BhdGNoZXIpCisgICAgICAgIF9kb21haW5FdmVudERpc3BhdGNoZXIgPSBbW1Rlc3RQ
cm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciBhbGxvY10gaW5pdFdpdGhDb250cm9s
bGVyOl9jb250cm9sbGVyXTsKKyAgICByZXR1cm4gX2RvbWFpbkV2ZW50RGlzcGF0Y2hlcjsKK30K
KworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQor
CisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0
UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMuaCIKKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNw
ZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERp
c3BhdGNoZXIKK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9s
bGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJs
ZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGlu
aXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29u
dHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVybiBzZWxm
OworfQorCistICh2b2lkKUV2ZW50Cit7CisgICAgY29uc3QgRnJvbnRlbmRSb3V0ZXImIHJvdXRl
ciA9IF9jb250cm9sbGVyLT5mcm9udGVuZFJvdXRlcigpOworCisgICAgUmVmPEpTT046Ok9iamVj
dD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGpzb25NZXNzYWdl
LT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7CisgICAgcm91dGVyLnNl
bmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworfQorCitAZW5kCisKKworIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2wuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRv
bWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKyNpbXBvcnQg
PHd0Zi9QbGF0Zm9ybS5oPgorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09O
T2JqZWN0Lmg+CisKKworCisKKworCisKKworQHByb3RvY29sIFRlc3RQcm90b2NvbERvbWFpbkRv
bWFpbkhhbmRsZXIgPE5TT2JqZWN0PgorQG9wdGlvbmFsCistICh2b2lkKUNvbW1hbmRXaXRoRXJy
b3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vz
c0NhbGxiYWNrOih2b2lkKF4pKHZvaWQpKXN1Y2Nlc3NDYWxsYmFjazsKK0BlbmQKKworX19hdHRy
aWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2Nv
bERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciA6IE5TT2JqZWN0CistICh2b2lkKUV2ZW50Owor
QGVuZAorCisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJp
bGl0eU9iamVjdHMuaD4KKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAorCisjIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDx3dGYvUGxhdGZvcm0uaD4KKworI2lt
cG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJp
dmF0ZS5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250
cm9sbGVyLmg+CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCitAaW50ZXJmYWNlIFRlc3RQ
cm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAoUHJpdmF0ZSkKKy0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEluc3BlY3Rvcjo6QXVnbWVudGFibGVJbnNwZWN0b3JD
b250cm9sbGVyKiljb250cm9sbGVyOworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJs
ZVR5cGVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I2ltcG9ydCA8d3RmL1BsYXRmb3JtLmg+CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2lt
cG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgorCituYW1l
c3BhY2UgSW5zcGVjdG9yIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgorT3B0
aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1
ZSk7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4t
ZGVidWdnYWJsZVR5cGVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisKKyNpbXBv
cnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgor
I2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKwor
dXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisKKworCisKKyMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xUeXBlcy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1
Z2dhYmxlVHlwZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2Nv
bEpTT05PYmplY3RQcml2YXRlLmg+CisjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2ltcG9y
dCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisj
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWluLXRhcmdl
dFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tcmVzdWx0IGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RvbWFpbi10
YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJlc3VsdApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNDQxOWI2MTljZDcKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBl
Lmpzb24tcmVzdWx0CkBAIC0wLDAgKzEsMTA0NiBAQAorIyMjIEJlZ2luIEZpbGU6IEluc3BlY3Rv
ckJhY2tlbmRDb21tYW5kcy5qcy5pbgorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKy8vIERvbWFpbgorSW5z
cGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiRG9tYWluIiwgbnVsbCk7CitJbnNwZWN0b3JC
YWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiRG9tYWluLkNvbW1hbmQiLCBbInBhZ2UiLCAid29ya2Vy
Il0sIFtdLCBbXSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnQoIkRvbWFpbi5FdmVu
dCIsIG51bGwsIFtdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW5EaXNwYXRjaGVy
ID0gSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRpc3BhdGNoZXIuYmluZChJbnNwZWN0b3JCYWNr
ZW5kLCAiRG9tYWluIik7CitJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJEb21haW4i
LCBbInBhZ2UiXSk7CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcy5p
bgorCisjIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hp
bmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0u
aD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCisjaW5j
bHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckZyb250ZW5kUm91dGVyLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdm9pZCBzZXRCYWNrZW5k
RGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2Jh
Y2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQorICAgIEJhY2tlbmREaXNw
YXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3Bh
dGNoZXIuZ2V0KCk7IH0KK3ByaXZhdGU6CisgICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBt
X2JhY2tlbmREaXNwYXRjaGVyOworfTsKKworCitjbGFzcyBBbHRlcm5hdGVEb21haW5CYWNrZW5k
RGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6
CisgICAgdmlydHVhbCB+QWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIoKSB7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChsb25nIGNhbGxJZCkgPSAwOworfTsKKworfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKKyMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVy
cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21h
aW4tZGVidWdnYWJsZVR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisj
aW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0eXBlZGVmIFN0cmluZyBFcnJvclN0
cmluZzsKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorY2xh
c3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXI7CisjZW5kaWYgLy8gRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKK2NsYXNzIERvbWFpbkJhY2tlbmREaXNw
YXRjaGVySGFuZGxlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIENvbW1hbmQoRXJyb3JT
dHJpbmcmKSA9IDA7Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+RG9tYWluQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyKCk7Cit9OworCitjbGFzcyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5h
bCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAg
c3RhdGljIFJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRj
aGVyJiwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgdm9pZCBkaXNwYXRj
aChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+
JiYgbWVzc2FnZSkgZmluYWw7Citwcml2YXRlOgorICAgIHZvaWQgQ29tbWFuZChsb25nIHJlcXVl
c3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyNpZiBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK3B1YmxpYzoKKyAgICB2b2lkIHNldEFsdGVy
bmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0
ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hl
cjsgfQorcHJpdmF0ZToKKyAgICBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciogbV9h
bHRlcm5hdGVEaXNwYXRjaGVyIHsgbnVsbHB0ciB9OworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorcHJpdmF0ZToKKyAgICBEb21haW5CYWNrZW5kRGlz
cGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxl
ciopOworICAgIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2VudCB7IG51bGxw
dHIgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0
QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0
Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdl
dFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4K
KyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyNp
bmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCisjZW5kaWYgLy8gRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKK25hbWVzcGFjZSBJbnNwZWN0
b3IgeworCitEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5Eb21haW5CYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXIoKSB7IH0KKworUmVmPERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBEb21h
aW5CYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlz
cGF0Y2hlciwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKK3sKKyAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0
Y2hlciwgYWdlbnQpKTsKK30KKworRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkRvbWFpbkJhY2tl
bmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgRG9tYWlu
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKKyAgICA6IFN1cHBsZW1lbnRhbEJhY2tl
bmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQorICAgICwgbV9hZ2VudChhZ2VudCkKK3sK
KyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oIkRv
bWFpbiJfcywgdGhpcyk7Cit9CisKK3ZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmRpc3Bh
dGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVj
dD4mJiBtZXNzYWdlKQoreworICAgIFJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVj
dCgqdGhpcyk7CisKKyAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOworICAgIG1l
c3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsKKworICAgIGlmIChtZXRo
b2QgPT0gIkNvbW1hbmQiKSB7CisgICAgICAgIENvbW1hbmQocmVxdWVzdElkLCBXVEZNb3ZlKHBh
cmFtZXRlcnMpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fYmFja2VuZERpc3Bh
dGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZv
dW5kLCAiJ0RvbWFpbi4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOworfQorCit2b2lk
IERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8
SlNPTjo6T2JqZWN0PiYmKQoreworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQorICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKKyAgICAgICAgbV9hbHRl
cm5hdGVEaXNwYXRjaGVyLT5Db21tYW5kKHJlcXVlc3RJZCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisK
KyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBK
U09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYWdlbnQtPkNvbW1hbmQoZXJyb3IpOworCisg
ICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2Vu
ZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7CisgICAgZWxzZQor
ICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmRE
aXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOworfQorCit9IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNw
cAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFp
bi1kZWJ1Z2dhYmxlVHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNp
bmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CisKK2NsYXNzIEZyb250ZW5kUm91dGVyOworCitjbGFzcyBEb21haW5Gcm9udGVuZERpc3Bh
dGNoZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIERvbWFp
bkZyb250ZW5kRGlzcGF0Y2hlcihGcm9udGVuZFJvdXRlciYgZnJvbnRlbmRSb3V0ZXIpIDogbV9m
cm9udGVuZFJvdXRlcihmcm9udGVuZFJvdXRlcikgeyB9CisgICAgdm9pZCBFdmVudCgpOworcHJp
dmF0ZToKKyAgICBGcm9udGVuZFJvdXRlciYgbV9mcm9udGVuZFJvdXRlcjsKK307CisKK30gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVy
cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1k
b21haW4tZGVidWdnYWJsZVR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEZyb250ZW5k
RGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250
ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKKwordm9pZCBEb21haW5Gcm9udGVuZERpc3BhdGNoZXI6OkV2ZW50KCkKK3sK
KyAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRl
KCk7CisgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50
Il9zKTsKKworICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pT
T05TdHJpbmcoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZp
bGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sT2JqZWN0cy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlu
LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
clByb3RvY29sVHlwZXMuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKKworCisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKworCisKKworCisK
KworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
KyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisKKyNpbmNsdWRlIDx3dGYv
T3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJ
bnNwZWN0b3IgeworCituYW1lc3BhY2UgUHJvdG9jb2wgeworCisKKworfSAvLyBuYW1lc3BhY2Ug
UHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sT2JqZWN0cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tl
bmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlu
LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8d3RmL1BsYXRmb3Jt
Lmg+CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5k
RGlzcGF0Y2hlcnMuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKK0Bwcm90b2NvbCBU
ZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyOworCituYW1lc3BhY2UgSW5zcGVjdG9yIHsK
KworCitjbGFzcyBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBw
dWJsaWMgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIgeworICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlz
cGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1f
ZGVsZWdhdGUgPSBoYW5kbGVyOyB9CisgICAgdm9pZCBDb21tYW5kKGxvbmcgcmVxdWVzdElkKSBm
aW5hbDsKK3ByaXZhdGU6CisgICAgUmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFp
bkhhbmRsZXI+PiBtX2RlbGVnYXRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisK
KyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1k
ZWJ1Z2dhYmxlVHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERp
c3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2luY2x1
ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFs
dWVzLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit2b2lkIE9iakNJbnNwZWN0b3JEb21h
aW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVlc3RJZCkKK3sKKyAgICBpZiAo
IVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoQ29tbWFuZFdpdGhFcnJv
ckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1l
dGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi5Db21tYW5kJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikg
eworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVl
c3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJh
Y2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgfTsKKworICAgIGlk
IHN1Y2Nlc3NDYWxsYmFjayA9IF57CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRS
ZXNwb25zZShyZXF1ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKKyAgICB9
OworCisgICAgW21fZGVsZWdhdGUgQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJh
Y2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107Cit9CisKK30gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVy
cy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmct
ZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2ltcG9ydCA8d3RmL1BsYXRmb3JtLmg+CisKKyNpbXBvcnQgPFdlYklu
c3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRl
ZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVj
dAorQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNldERvbWFpbkhhbmRsZXI6
KSBpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiBkb21haW5IYW5kbGVyOworQHBy
b3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVu
dERpc3BhdGNoZXIgKmRvbWFpbkV2ZW50RGlzcGF0Y2hlcjsKK0BlbmQKKworCisjIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbi5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24uaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwu
aCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Cisj
aW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKwor
dXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24KK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9j
b250cm9sbGVyOworICAgIGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IF9kb21h
aW5IYW5kbGVyOworICAgIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAq
X2RvbWFpbkV2ZW50RGlzcGF0Y2hlcjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29u
dHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCit7Cisg
ICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBu
aWw7CisgICAgQVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250cm9sbGVyID0gY29udHJvbGxl
cjsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgW19kb21h
aW5IYW5kbGVyIHJlbGVhc2VdOworICAgIFtfZG9tYWluRXZlbnREaXNwYXRjaGVyIHJlbGVhc2Vd
OworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAodm9pZClzZXREb21haW5IYW5kbGVyOihp
ZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiloYW5kbGVyCit7CisgICAgaWYgKGhh
bmRsZXIgPT0gX2RvbWFpbkhhbmRsZXIpCisgICAgICAgIHJldHVybjsKKworICAgIFtfZG9tYWlu
SGFuZGxlciByZWxlYXNlXTsKKyAgICBfZG9tYWluSGFuZGxlciA9IFtoYW5kbGVyIHJldGFpbl07
CisKKyAgICBhdXRvIGFsdGVybmF0ZURpc3BhdGNoZXIgPSBtYWtlVW5pcXVlPE9iakNJbnNwZWN0
b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7CisgICAgYXV0byBhbHRlcm5hdGVB
Z2VudCA9IG1ha2VVbmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8RG9tYWluQmFja2Vu
ZERpc3BhdGNoZXIsIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyPj4oIkRvbWFpbiJf
cywgKl9jb250cm9sbGVyLCBXVEZNb3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIpKTsKKyAgICBfY29u
dHJvbGxlci0+YXBwZW5kRXh0cmFBZ2VudChXVEZNb3ZlKGFsdGVybmF0ZUFnZW50KSk7Cit9CisK
Ky0gKGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+KWRvbWFpbkhhbmRsZXIKK3sK
KyAgICByZXR1cm4gX2RvbWFpbkhhbmRsZXI7Cit9CisKKy0gKFRlc3RQcm90b2NvbERvbWFpbkRv
bWFpbkV2ZW50RGlzcGF0Y2hlciAqKWRvbWFpbkV2ZW50RGlzcGF0Y2hlcgoreworICAgIGlmICgh
X2RvbWFpbkV2ZW50RGlzcGF0Y2hlcikKKyAgICAgICAgX2RvbWFpbkV2ZW50RGlzcGF0Y2hlciA9
IFtbVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyIGFsbG9jXSBpbml0V2l0
aENvbnRyb2xsZXI6X2NvbnRyb2xsZXJdOworICAgIHJldHVybiBfZG9tYWluRXZlbnREaXNwYXRj
aGVyOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0
aW9uLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1t
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGUtbWF0
Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKwor
I2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDx3dGYvSlNP
TlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRp
b24gVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyCit7CisgICAgQXVnbWVu
dGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKK30KKworLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKilj
b250cm9sbGVyCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisg
ICAgICAgIHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250cm9s
bGVyID0gY29udHJvbGxlcjsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClFdmVudAor
eworICAgIGNvbnN0IEZyb250ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29udHJvbGxlci0+ZnJvbnRl
bmRSb3V0ZXIoKTsKKworICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3Ms
ICJEb21haW4uRXZlbnQiX3MpOworICAgIHJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRv
SlNPTlN0cmluZygpKTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
RXZlbnREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZS1tYXRjaGlu
Zy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKyNpbXBv
cnQgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xK
U09OT2JqZWN0Lmg+CisKKworCisKKworCisKKworQHByb3RvY29sIFRlc3RQcm90b2NvbERvbWFp
bkRvbWFpbkhhbmRsZXIgPE5TT2JqZWN0PgorQG9wdGlvbmFsCistICh2b2lkKUNvbW1hbmRXaXRo
RXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3Vj
Y2Vzc0NhbGxiYWNrOih2b2lkKF4pKHZvaWQpKXN1Y2Nlc3NDYWxsYmFjazsKK0BlbmQKKworX19h
dHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90
b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciA6IE5TT2JqZWN0CistICh2b2lkKUV2ZW50
OworQGVuZAorCisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0
aWJpbGl0eU9iamVjdHMuaD4KKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAorCisjIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxl
VHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNp
bXBvcnQgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBv
cnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0
Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPHd0Zi9KU09O
VmFsdWVzLmg+CisKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNw
YXRjaGVyIChQcml2YXRlKQorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooSW5z
cGVjdG9yOjpBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXI7CitAZW5k
CisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxl
VHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNp
bXBvcnQgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBv
cnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KKworbmFtZXNw
YWNlIEluc3BlY3RvciB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KK09wdGlv
bmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUp
OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRh
cmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVz
dFByb3RvY29sVHlwZVBhcnNlci5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29s
SlNPTk9iamVjdFByaXZhdGUuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisK
KworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisKKyMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxl
VHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNp
bXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9i
amVjdFByaXZhdGUuaD4KKyNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW1wb3J0IDx3dGYv
SlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisKKyMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW4tdGFyZ2V0VHlwZXMu
anNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZXhwZWN0ZWQvZG9tYWluLXRhcmdldFR5cGVzLmpzb24tcmVzdWx0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kMWMwZjk4NjZjMQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9k
b21haW4tdGFyZ2V0VHlwZXMuanNvbi1yZXN1bHQKQEAgLTAsMCArMSwxMDQ2IEBACisjIyMgQmVn
aW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzLmluCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVzLmpzb24KKy8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworLy8gRG9tYWluCitJbnNwZWN0b3JCYWNrZW5k
LnJlZ2lzdGVyRG9tYWluKCJEb21haW4iLCBbInBhZ2UiXSk7CitJbnNwZWN0b3JCYWNrZW5kLnJl
Z2lzdGVyQ29tbWFuZCgiRG9tYWluLkNvbW1hbmQiLCBbInBhZ2UiXSwgW10sIFtdKTsKK0luc3Bl
Y3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudCgiRG9tYWluLkV2ZW50IiwgWyJwYWdlIl0sIFtdKTsK
K0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW5EaXNwYXRjaGVyID0gSW5zcGVjdG9yQmFj
a2VuZC5yZWdpc3RlckRpc3BhdGNoZXIuYmluZChJbnNwZWN0b3JCYWNrZW5kLCAiRG9tYWluIik7
CitJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJEb21haW4iLCBudWxsKTsKKyMjIyBF
bmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzLmluCisKKyMjIyBCZWdpbiBGaWxl
OiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9Q
bGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
CisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisK
K2NsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIHNl
dEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVy
KSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9CisgICAgQmFj
a2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNr
ZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQorcHJpdmF0ZToKKyAgICBSZWZQdHI8QmFja2VuZERpc3Bh
dGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Cit9OworCisKK2NsYXNzIEFsdGVybmF0ZURvbWFp
bkJhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsK
K3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5BbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlcigp
IHsgfQorICAgIHZpcnR1YWwgdm9pZCBDb21tYW5kKGxvbmcgY2FsbElkKSA9IDA7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQorIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERp
c3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlcy5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xP
YmplY3RzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIElu
c3BlY3RvciB7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCisjaWYgRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCitjbGFzcyBBbHRlcm5hdGVEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlcjsKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKKworY2xhc3MgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKK3B1Ymxp
YzoKKyAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChFcnJvclN0cmluZyYpID0gMDsKK3Byb3RlY3Rl
ZDoKKyAgICB2aXJ0dWFsIH5Eb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKK307CisK
K2NsYXNzIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRh
bEJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPERvbWFpbkJhY2tl
bmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBEb21haW5CYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXIqKTsKKyAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25z
dCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5hbDsKK3By
aXZhdGU6CisgICAgdm9pZCBDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmIHBhcmFtZXRlcnMpOworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQorcHVibGljOgorICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0Y2hlcihBbHRlcm5h
dGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVy
bmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9Citwcml2YXRlOgorICAgIEFs
dGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKiBtX2FsdGVybmF0ZURpc3BhdGNoZXIgeyBu
dWxscHRyIH07CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCitwcml2YXRlOgorICAgIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRj
aGVyJiwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgRG9tYWluQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50IHsgbnVsbHB0ciB9OworfTsKKworfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAor
CisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZXMuanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVl
cy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQorI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNlbmRpZiAv
LyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworbmFtZXNwYWNlIElu
c3BlY3RvciB7CisKK0RvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6fkRvbWFpbkJhY2tl
bmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQorCitSZWY8RG9tYWluQmFja2VuZERpc3BhdGNoZXI+
IERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImIGJhY2tl
bmREaXNwYXRjaGVyLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQorewor
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmRE
aXNwYXRjaGVyLCBhZ2VudCkpOworfQorCitEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6RG9tYWlu
QmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBE
b21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQorICAgIDogU3VwcGxlbWVudGFs
QmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCisgICAgLCBtX2FnZW50KGFnZW50
KQoreworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFp
bigiRG9tYWluIl9zLCB0aGlzKTsKK30KKwordm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6
ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6
T2JqZWN0PiYmIG1lc3NhZ2UpCit7CisgICAgUmVmPERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBw
cm90ZWN0KCp0aGlzKTsKKworICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7Cisg
ICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRlcnMpOworCisgICAgaWYg
KG1ldGhvZCA9PSAiQ29tbWFuZCIpIHsKKyAgICAgICAgQ29tbWFuZChyZXF1ZXN0SWQsIFdURk1v
dmUocGFyYW1ldGVycykpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9k
Tm90Rm91bmQsICInRG9tYWluLiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7Cit9CisK
K3ZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9uZyByZXF1ZXN0SWQsIFJl
ZlB0cjxKU09OOjpPYmplY3Q+JiYpCit7CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCisgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeworICAgICAgICBt
X2FsdGVybmF0ZURpc3BhdGNoZXItPkNvbW1hbmQocmVxdWVzdElkKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKKworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3Vs
dCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9hZ2VudC0+Q29tbWFuZChlcnJvcik7
CisKKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKKyAgICBl
bHNlCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFj
a2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hl
cnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVzLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVj
dHMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgRnJvbnRlbmRSb3V0
ZXI7CisKK2NsYXNzIERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlciB7CisgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVyKEZyb250
ZW5kUm91dGVyJiBmcm9udGVuZFJvdXRlcikgOiBtX2Zyb250ZW5kUm91dGVyKGZyb250ZW5kUm91
dGVyKSB7IH0KKyAgICB2b2lkIEV2ZW50KCk7Citwcml2YXRlOgorICAgIEZyb250ZW5kUm91dGVy
JiBtX2Zyb250ZW5kUm91dGVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMg
RW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRl
c3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGRvbWFpbi10YXJnZXRUeXBlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJv
bnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFj
ZSBJbnNwZWN0b3IgeworCit2b2lkIERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcjo6RXZlbnQoKQor
eworICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4uRXZl
bnQiX3MpOworCisgICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRv
SlNPTlN0cmluZygpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQg
RmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xPYmplY3RzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21h
aW4tdGFyZ2V0VHlwZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgorI2luY2x1ZGUg
PHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNw
YWNlIFByb3RvY29sIHsKKworCisKKworCisKKworCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29s
CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xP
YmplY3RzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVzLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKworI2luY2x1ZGUgPHd0Zi9P
cHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIElu
c3BlY3RvciB7CisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKworCit9IC8vIG5hbWVzcGFjZSBQ
cm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xPYmplY3RzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2Vu
ZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4t
dGFyZ2V0VHlwZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjaW1wb3J0IDx3dGYvUGxhdGZvcm0uaD4KKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2luY2x1ZGUgPHd0Zi9S
ZXRhaW5QdHIuaD4KKworQHByb3RvY29sIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI7
CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKK2NsYXNzIE9iakNJbnNwZWN0b3JEb21haW5C
YWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlz
cGF0Y2hlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgT2Jq
Q0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbERvbWFpbkRv
bWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KKyAgICB2b2lk
IENvbW1hbmQobG9uZyByZXF1ZXN0SWQpIGZpbmFsOworcHJpdmF0ZToKKyAgICBSZXRhaW5QdHI8
aWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNr
ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERp
c3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRh
cmdldFR5cGVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0
Y2hlcnMuaCIKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW5jbHVkZSAi
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMu
aD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3ZvaWQgT2JqQ0luc3BlY3RvckRvbWFpbkJh
Y2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElkKQoreworICAgIGlmICghW21f
ZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihDb21tYW5kV2l0aEVycm9yQ2Fs
bGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCkt
PnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9k
Tm90Rm91bmQsICInRG9tYWluLkNvbW1hbmQnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Cisg
ICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElk
LCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICB9OworCisgICAgaWQgc3Vj
Y2Vzc0NhbGxiYWNrID0gXnsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3Bv
bnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2UpOworICAgIH07CisK
KyAgICBbbV9kZWxlZ2F0ZSBDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBz
dWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKK30KKworfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1t
CisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZXMuanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDx3dGYvUGxhdGZv
cm0uaD4KKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgorCitfX2F0dHJp
YnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbiA6IE5TT2JqZWN0CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluLCBz
ZXR0ZXI9c2V0RG9tYWluSGFuZGxlcjopIGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRs
ZXI+IGRvbWFpbkhhbmRsZXI7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFRlc3RQ
cm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqZG9tYWluRXZlbnREaXNwYXRjaGVy
OworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisK
KyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVzLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbi5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2lt
cG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisjaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgorI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgorCit1c2luZyBu
YW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xs
ZXI7CisgICAgaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4gX2RvbWFpbkhhbmRs
ZXI7CisgICAgVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyICpfZG9tYWlu
RXZlbnREaXNwYXRjaGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVy
OihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxm
ID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAg
ICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAg
IHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbX2RvbWFpbkhhbmRs
ZXIgcmVsZWFzZV07CisgICAgW19kb21haW5FdmVudERpc3BhdGNoZXIgcmVsZWFzZV07CisgICAg
W3N1cGVyIGRlYWxsb2NdOworfQorCistICh2b2lkKXNldERvbWFpbkhhbmRsZXI6KGlkPFRlc3RQ
cm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+KWhhbmRsZXIKK3sKKyAgICBpZiAoaGFuZGxlciA9
PSBfZG9tYWluSGFuZGxlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgW19kb21haW5IYW5kbGVy
IHJlbGVhc2VdOworICAgIF9kb21haW5IYW5kbGVyID0gW2hhbmRsZXIgcmV0YWluXTsKKworICAg
IGF1dG8gYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IG1ha2VVbmlxdWU8T2JqQ0luc3BlY3RvckRvbWFp
bkJhY2tlbmREaXNwYXRjaGVyPihoYW5kbGVyKTsKKyAgICBhdXRvIGFsdGVybmF0ZUFnZW50ID0g
bWFrZVVuaXF1ZTxBbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudDxEb21haW5CYWNrZW5kRGlzcGF0
Y2hlciwgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXI+PigiRG9tYWluIl9zLCAqX2Nv
bnRyb2xsZXIsIFdURk1vdmUoYWx0ZXJuYXRlRGlzcGF0Y2hlcikpOworICAgIF9jb250cm9sbGVy
LT5hcHBlbmRFeHRyYUFnZW50KFdURk1vdmUoYWx0ZXJuYXRlQWdlbnQpKTsKK30KKworLSAoaWQ8
VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4pZG9tYWluSGFuZGxlcgoreworICAgIHJl
dHVybiBfZG9tYWluSGFuZGxlcjsKK30KKworLSAoVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZl
bnREaXNwYXRjaGVyICopZG9tYWluRXZlbnREaXNwYXRjaGVyCit7CisgICAgaWYgKCFfZG9tYWlu
RXZlbnREaXNwYXRjaGVyKQorICAgICAgICBfZG9tYWluRXZlbnREaXNwYXRjaGVyID0gW1tUZXN0
UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgYWxsb2NdIGluaXRXaXRoQ29udHJv
bGxlcjpfY29udHJvbGxlcl07CisgICAgcmV0dXJuIF9kb21haW5FdmVudERpc3BhdGNoZXI7Cit9
CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0K
KworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZXMuanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJv
dG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMu
aCIKKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0
b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3Bh
dGNoZXIKK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVy
OworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUlu
c3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRd
OworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJv
bGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVybiBzZWxmOwor
fQorCistICh2b2lkKUV2ZW50Cit7CisgICAgY29uc3QgRnJvbnRlbmRSb3V0ZXImIHJvdXRlciA9
IF9jb250cm9sbGVyLT5mcm9udGVuZFJvdXRlcigpOworCisgICAgUmVmPEpTT046Ok9iamVjdD4g
anNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGpzb25NZXNzYWdlLT5z
ZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7CisgICAgcm91dGVyLnNlbmRF
dmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworfQorCitAZW5kCisKKworIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2wuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFp
bi10YXJnZXRUeXBlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorI2ltcG9ydCA8d3RmL1Bs
YXRmb3JtLmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3Qu
aD4KKworCisKKworCisKKworCitAcHJvdG9jb2wgVGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFu
ZGxlciA8TlNPYmplY3Q+CitAb3B0aW9uYWwKKy0gKHZvaWQpQ29tbWFuZFdpdGhFcnJvckNhbGxi
YWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJh
Y2s6KHZvaWQoXikodm9pZCkpc3VjY2Vzc0NhbGxiYWNrOworQGVuZAorCitfX2F0dHJpYnV0ZV9f
KCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sRG9tYWlu
RG9tYWluRXZlbnREaXNwYXRjaGVyIDogTlNPYmplY3QKKy0gKHZvaWQpRXZlbnQ7CitAZW5kCisK
KworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2Jq
ZWN0cy5oPgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCisKKyMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZG9tYWluLXRhcmdldFR5cGVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2ltcG9ydCA8d3RmL1BsYXRmb3JtLmg+CisKKyNpbXBvcnQgIlRlc3RQ
cm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKKyNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgor
I2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKworQGludGVyZmFjZSBUZXN0UHJvdG9jb2xEb21h
aW5Eb21haW5FdmVudERpc3BhdGNoZXIgKFByaXZhdGUpCistIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhDb250cm9sbGVyOihJbnNwZWN0b3I6OkF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciop
Y29udHJvbGxlcjsKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFs
LmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVzLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8d3RmL1Bs
YXRmb3JtLmg+CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCA8V2ViSW5zcGVj
dG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9y
IHsKKwordGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgorT3B0aW9uYWw8T2JqQ0VudW1U
eXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7CisKK30gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0K
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZXMuanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgi
CisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0
b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5z
cGVjdG9yOworCisKKworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVzLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgi
CisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgor
I2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisK
K3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMu
anNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZXhwZWN0ZWQvZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uLXJlc3Vs
dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMTQ3NzViM2Y3YzYKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uLXJl
c3VsdApAQCAtMCwwICsxLDE0MzggQEAKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5k
Q29tbWFuZHMuanMuaW4KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5z
LXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworLy8gTmV0d29yazEKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0
ZXJEb21haW4oIk5ldHdvcmsxIiwgbnVsbCk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29t
bWFuZCgiTmV0d29yazEubG9hZFJlc291cmNlMSIsIG51bGwsIFtdLCBbXSk7CitJbnNwZWN0b3JC
YWNrZW5kLmFjdGl2YXRlRG9tYWluKCJOZXR3b3JrMSIsIG51bGwpOworCisvLyBOZXR3b3JrMwor
SW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiTmV0d29yazMiLCBudWxsKTsKK0luc3Bl
Y3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2UxIiwgbnVs
bCwgW10sIFtdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMy5s
b2FkUmVzb3VyY2UyIiwgbnVsbCwgW10sIFtdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJD
b21tYW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2UzIiwgbnVsbCwgW10sIFtdKTsKK0luc3BlY3Rv
ckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2U0IiwgbnVsbCwg
W10sIFtdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMy5sb2Fk
UmVzb3VyY2U1IiwgbnVsbCwgW10sIFtdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21t
YW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2U2IiwgbnVsbCwgW10sIFtdKTsKK0luc3BlY3RvckJh
Y2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2U3IiwgbnVsbCwgW10s
IFtdKTsKK0luc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIk5ldHdvcmszIiwgbnVsbCk7
CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcy5pbgorCisjIyMgQmVn
aW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5q
c29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgi
CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4K
KyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorCitu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIg
eworcHVibGljOgorICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmRE
aXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUo
ZGlzcGF0Y2hlcik7IH0KKyAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIo
KSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Citwcml2YXRlOgor
ICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKK307CisK
KworY2xhc3MgQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+QWx0ZXJuYXRl
TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVz
b3VyY2UxKGxvbmcgY2FsbElkKSA9IDA7Cit9OworCitjbGFzcyBBbHRlcm5hdGVOZXR3b3JrM0Jh
Y2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1
YmxpYzoKKyAgICB2aXJ0dWFsIH5BbHRlcm5hdGVOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyKCkg
eyB9CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTEobG9uZyBjYWxsSWQpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMihsb25nIGNhbGxJZCkgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBsb2FkUmVzb3VyY2UzKGxvbmcgY2FsbElkKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGxvYWRSZXNvdXJjZTQobG9uZyBjYWxsSWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJl
c291cmNlNShsb25nIGNhbGxJZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2U2
KGxvbmcgY2FsbElkKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTcobG9uZyBj
YWxsSWQpID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8g
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjIyMgRW5kIEZpbGU6IFRl
c3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJh
Y2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9t
YWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL1Bs
YXRmb3JtLmg+CisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3R5cGVkZWYg
U3RyaW5nIEVycm9yU3RyaW5nOworCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCitjbGFzcyBBbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOworY2xh
c3MgQWx0ZXJuYXRlTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjsKKyNlbmRpZiAvLyBFTkFCTEUo
SU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworY2xhc3MgTmV0d29yazFCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3Vy
Y2UxKEVycm9yU3RyaW5nJikgPSAwOworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgfk5ldHdvcmsx
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7Cit9OworCitjbGFzcyBOZXR3b3JrM0JhY2tlbmRE
aXNwYXRjaGVySGFuZGxlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJj
ZTEoRXJyb3JTdHJpbmcmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTIoRXJy
b3JTdHJpbmcmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTMoRXJyb3JTdHJp
bmcmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTQoRXJyb3JTdHJpbmcmKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTUoRXJyb3JTdHJpbmcmKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTYoRXJyb3JTdHJpbmcmKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGxvYWRSZXNvdXJjZTcoRXJyb3JTdHJpbmcmKSA9IDA7Citwcm90ZWN0ZWQ6Cisg
ICAgdmlydHVhbCB+TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKK307CisKK2Ns
YXNzIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFs
QmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8TmV0d29yazFCYWNr
ZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgTmV0d29yazFCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBj
b25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5hbDsK
K3ByaXZhdGU6CisgICAgdm9pZCBsb2FkUmVzb3VyY2UxKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8
SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQorcHVibGljOgorICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0Y2hl
cihBbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVy
KSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KK3ByaXZh
dGU6CisgICAgQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciogbV9hbHRlcm5hdGVE
aXNwYXRjaGVyIHsgbnVsbHB0ciB9OworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQorcHJpdmF0ZToKKyAgICBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVy
KEJhY2tlbmREaXNwYXRjaGVyJiwgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsK
KyAgICBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2VudCB7IG51bGxwdHIg
fTsKK307CisKK2NsYXNzIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMg
U3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8
TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgTmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICB2b2lkIGRpc3BhdGNoKGxvbmcg
cmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNz
YWdlKSBmaW5hbDsKK3ByaXZhdGU6CisgICAgdm9pZCBsb2FkUmVzb3VyY2UxKGxvbmcgcmVxdWVz
dElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOworICAgIHZvaWQgbG9hZFJl
c291cmNlMihsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJz
KTsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpP
YmplY3Q+JiYgcGFyYW1ldGVycyk7CisgICAgdm9pZCBsb2FkUmVzb3VyY2U0KGxvbmcgcmVxdWVz
dElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOworICAgIHZvaWQgbG9hZFJl
c291cmNlNShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJz
KTsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTYobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpP
YmplY3Q+JiYgcGFyYW1ldGVycyk7CisgICAgdm9pZCBsb2FkUmVzb3VyY2U3KGxvbmcgcmVxdWVz
dElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOworI2lmIEVOQUJMRShJTlNQ
RUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorcHVibGljOgorICAgIHZvaWQgc2V0QWx0ZXJu
YXRlRGlzcGF0Y2hlcihBbHRlcm5hdGVOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyKiBhbHRlcm5h
dGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNo
ZXI7IH0KK3ByaXZhdGU6CisgICAgQWx0ZXJuYXRlTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlciog
bV9hbHRlcm5hdGVEaXNwYXRjaGVyIHsgbnVsbHB0ciB9OworI2VuZGlmIC8vIEVOQUJMRShJTlNQ
RUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorcHJpdmF0ZToKKyAgICBOZXR3b3JrM0JhY2tl
bmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiwgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIqKTsKKyAgICBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2Vu
dCB7IG51bGxwdHIgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBG
aWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNr
ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9t
YWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJU
ZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5j
bHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjaW5jbHVk
ZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgorI2VuZGlmIC8vIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsK
KworTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5OZXR3b3JrMUJhY2tlbmREaXNw
YXRjaGVySGFuZGxlcigpIHsgfQorTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5O
ZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQorCitSZWY8TmV0d29yazFCYWNr
ZW5kRGlzcGF0Y2hlcj4gTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEJhY2tlbmRE
aXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXIqIGFnZW50KQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE5ldHdvcmsxQmFja2Vu
ZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIsIGFnZW50KSk7Cit9CisKK05ldHdvcmsxQmFj
a2VuZERpc3BhdGNoZXI6Ok5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNo
ZXImIGJhY2tlbmREaXNwYXRjaGVyLCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciog
YWdlbnQpCisgICAgOiBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0
Y2hlcikKKyAgICAsIG1fYWdlbnQoYWdlbnQpCit7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+
cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKCJOZXR3b3JrMSJfcywgdGhpcyk7Cit9CisKK3Zv
aWQgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNv
bnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCit7CisgICAg
UmVmPE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOworCisgICAgUmVm
UHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVyczsKKyAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBh
cmFtcyJfcywgcGFyYW1ldGVycyk7CisKKyAgICBpZiAobWV0aG9kID09ICJsb2FkUmVzb3VyY2Ux
IikgeworICAgICAgICBsb2FkUmVzb3VyY2UxKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJz
KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5y
ZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidO
ZXR3b3JrMS4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOworfQorCit2b2lkIE5ldHdv
cmsxQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTEobG9uZyByZXF1ZXN0SWQsIFJlZlB0
cjxKU09OOjpPYmplY3Q+JiYpCit7CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCisgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeworICAgICAgICBtX2Fs
dGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZTEocmVxdWVzdElkKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKKworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgIFJlZjxKU09OOjpPYmplY3Q+IHJl
c3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9hZ2VudC0+bG9hZFJlc291cmNl
MShlcnJvcik7CisKKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQorICAgICAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNl
KTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29s
RXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Cit9
CisKK1JlZjxOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyPiBOZXR3b3JrM0JhY2tlbmREaXNwYXRj
aGVyOjpjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBOZXR3b3Jr
M0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQp
KTsKK30KKworTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6TmV0d29yazNCYWNrZW5kRGlzcGF0
Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIE5ldHdvcmszQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKKyAgICA6IFN1cHBsZW1lbnRhbEJhY2tlbmREaXNw
YXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQorICAgICwgbV9hZ2VudChhZ2VudCkKK3sKKyAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oIk5ldHdvcmsz
Il9zLCB0aGlzKTsKK30KKwordm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRj
aChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+
JiYgbWVzc2FnZSkKK3sKKyAgICBSZWY8TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVj
dCgqdGhpcyk7CisKKyAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOworICAgIG1l
c3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsKKworICAgIHR5cGVkZWYg
dm9pZCAoTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6KkNhbGxIYW5kbGVyKShsb25nIHJlcXVl
c3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKTsKKyAgICB0eXBlZGVmIEhhc2hN
YXA8U3RyaW5nLCBDYWxsSGFuZGxlcj4gRGlzcGF0Y2hNYXA7CisgICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPERpc3BhdGNoTWFwPiBkaXNwYXRjaE1hcDsKKyAgICBpZiAoZGlzcGF0Y2hNYXAuZ2V0
KCkuaXNFbXB0eSgpKSB7CisgICAgICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgTWV0aG9kVGFibGUg
eworICAgICAgICAgICAgY29uc3QgY2hhciogbmFtZTsKKyAgICAgICAgICAgIENhbGxIYW5kbGVy
IGhhbmRsZXI7CisgICAgICAgIH0gY29tbWFuZHNbXSA9IHsKKyAgICAgICAgICAgIHsgImxvYWRS
ZXNvdXJjZTEiLCAmTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMSB9LAor
ICAgICAgICAgICAgeyAibG9hZFJlc291cmNlMiIsICZOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVy
Ojpsb2FkUmVzb3VyY2UyIH0sCisgICAgICAgICAgICB7ICJsb2FkUmVzb3VyY2UzIiwgJk5ldHdv
cmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTMgfSwKKyAgICAgICAgICAgIHsgImxv
YWRSZXNvdXJjZTQiLCAmTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNCB9
LAorICAgICAgICAgICAgeyAibG9hZFJlc291cmNlNSIsICZOZXR3b3JrM0JhY2tlbmREaXNwYXRj
aGVyOjpsb2FkUmVzb3VyY2U1IH0sCisgICAgICAgICAgICB7ICJsb2FkUmVzb3VyY2U2IiwgJk5l
dHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTYgfSwKKyAgICAgICAgICAgIHsg
ImxvYWRSZXNvdXJjZTciLCAmTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNl
NyB9LAorICAgICAgICB9OworICAgICAgICBzaXplX3QgbGVuZ3RoID0gV1RGX0FSUkFZX0xFTkdU
SChjb21tYW5kcyk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kp
CisgICAgICAgICAgICBkaXNwYXRjaE1hcC5nZXQoKS5hZGQoY29tbWFuZHNbaV0ubmFtZSwgY29t
bWFuZHNbaV0uaGFuZGxlcik7CisgICAgfQorCisgICAgYXV0byBmaW5kUmVzdWx0ID0gZGlzcGF0
Y2hNYXAuZ2V0KCkuZmluZChtZXRob2QpOworICAgIGlmIChmaW5kUmVzdWx0ID09IGRpc3BhdGNo
TWFwLmdldCgpLmVuZCgpKSB7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFBy
b3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmsz
LiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICAoKCp0aGlzKS4qZmluZFJlc3VsdC0+dmFsdWUpKHJlcXVlc3RJZCwgV1RGTW92ZShw
YXJhbWV0ZXJzKSk7Cit9CisKK3ZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJl
c291cmNlMShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKK3sKKyNpZiBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyAgICBpZiAobV9hbHRlcm5h
dGVEaXNwYXRjaGVyKSB7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291
cmNlMShyZXF1ZXN0SWQpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmIC8vIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCisgICAgRXJyb3JTdHJpbmcgZXJy
b3I7CisgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KTsKKyAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2UxKGVycm9yKTsKKworICAgIGlmICghZXJyb3Iu
bGVuZ3RoKCkpCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1
ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOworICAgIGVsc2UKKyAgICAgICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2Vy
dmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKK30KKwordm9pZCBOZXR3b3JrM0JhY2tlbmREaXNw
YXRjaGVyOjpsb2FkUmVzb3VyY2UyKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0
PiYmKQoreworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorICAg
IGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRj
aGVyLT5sb2FkUmVzb3VyY2UyKHJlcXVlc3RJZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisj
ZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyAgICBF
cnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTIoZXJyb3IpOworCisg
ICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2Vu
ZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7CisgICAgZWxzZQor
ICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmRE
aXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOworfQorCit2b2lkIE5ldHdv
cmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTMobG9uZyByZXF1ZXN0SWQsIFJlZlB0
cjxKU09OOjpPYmplY3Q+JiYpCit7CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCisgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeworICAgICAgICBtX2Fs
dGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZTMocmVxdWVzdElkKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKKworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgIFJlZjxKU09OOjpPYmplY3Q+IHJl
c3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9hZ2VudC0+bG9hZFJlc291cmNl
MyhlcnJvcik7CisKKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQorICAgICAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNl
KTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29s
RXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Cit9
CisKK3ZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNChsb25nIHJl
cXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKK3sKKyNpZiBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7
CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlNChyZXF1ZXN0SWQp
OworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQorCisgICAgRXJyb3JTdHJpbmcgZXJyb3I7CisgICAgUmVmPEpT
T046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBtX2FnZW50
LT5sb2FkUmVzb3VyY2U0KGVycm9yKTsKKworICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCisgICAg
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUo
cmVzdWx0KSwgZmFsc2UpOworICAgIGVsc2UKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+
cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1v
dmUoZXJyb3IpKTsKK30KKwordm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVz
b3VyY2U1KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQoreworI2lmIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorICAgIGlmIChtX2FsdGVybmF0
ZURpc3BhdGNoZXIpIHsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3Vy
Y2U1KHJlcXVlc3RJZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYgLy8gRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyAgICBFcnJvclN0cmluZyBlcnJv
cjsKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OworICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTUoZXJyb3IpOworCisgICAgaWYgKCFlcnJvci5s
ZW5ndGgoKSkKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVl
c3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7CisgICAgZWxzZQorICAgICAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2
ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOworfQorCit2b2lkIE5ldHdvcmszQmFja2VuZERpc3Bh
dGNoZXI6OmxvYWRSZXNvdXJjZTYobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+
JiYpCit7CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisgICAg
aWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNo
ZXItPmxvYWRSZXNvdXJjZTYocmVxdWVzdElkKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNl
bmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworICAgIEVy
cm9yU3RyaW5nIGVycm9yOworICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9i
amVjdDo6Y3JlYXRlKCk7CisgICAgbV9hZ2VudC0+bG9hZFJlc291cmNlNihlcnJvcik7CisKKyAg
ICBpZiAoIWVycm9yLmxlbmd0aCgpKQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5k
UmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKKyAgICBlbHNlCisg
ICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERp
c3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Cit9CisKK3ZvaWQgTmV0d29y
azNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNyhsb25nIHJlcXVlc3RJZCwgUmVmUHRy
PEpTT046Ok9iamVjdD4mJikKK3sKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKKyAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7CisgICAgICAgIG1fYWx0
ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlNyhyZXF1ZXN0SWQpOworICAgICAgICByZXR1
cm47CisgICAgfQorI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENI
RVJTKQorCisgICAgRXJyb3JTdHJpbmcgZXJyb3I7CisgICAgUmVmPEpTT046Ok9iamVjdD4gcmVz
dWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2U3
KGVycm9yKTsKKworICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCisgICAgICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2Up
OworICAgIGVsc2UKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xF
cnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmRE
aXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJz
LmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWlu
Zy1jb21tYW5kLXNpemVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9y
IHsKKworY2xhc3MgRnJvbnRlbmRSb3V0ZXI7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgor
IyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxl
OiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK30gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorCisjIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JQcm90b2NvbFR5cGVzLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKKworCituYW1lc3BhY2UgUHJvdG9jb2wgeworCisKKworCisK
Ky8vIFR5cGVkZWZzLgorbmFtZXNwYWNlIE5ldHdvcmsyIHsKKy8qIFVuaXF1ZSBsb2FkZXIgaWRl
bnRpZmllci4gKi8KK3R5cGVkZWYgU3RyaW5nIExvYWRlcklkOworfSAvLyBOZXR3b3JrMgorLy8g
RW5kIG9mIHR5cGVkZWZzLgorCisKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAor
CisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKworI2luY2x1ZGUg
PHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNw
YWNlIEluc3BlY3RvciB7CisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKworCit9IC8vIG5hbWVz
cGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBk
b21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8d3RmL1BsYXRmb3JtLmg+CisKKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hl
cnMuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKK0Bwcm90b2NvbCBUZXN0UHJvdG9j
b2xOZXR3b3JrMURvbWFpbkhhbmRsZXI7CitAcHJvdG9jb2wgVGVzdFByb3RvY29sTmV0d29yazNE
b21haW5IYW5kbGVyOworCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCitjbGFzcyBPYmpDSW5z
cGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVO
ZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
K3B1YmxpYzoKKyAgICBPYmpDSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihpZDxU
ZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9
IGhhbmRsZXI7IH0KKyAgICB2b2lkIGxvYWRSZXNvdXJjZTEobG9uZyByZXF1ZXN0SWQpIGZpbmFs
OworcHJpdmF0ZToKKyAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sTmV0d29yazFEb21haW5I
YW5kbGVyPj4gbV9kZWxlZ2F0ZTsKK307CisKK2NsYXNzIE9iakNJbnNwZWN0b3JOZXR3b3JrM0Jh
Y2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZU5ldHdvcmszQmFja2VuZERp
c3BhdGNoZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIE9i
akNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbE5ldHdv
cmszRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQorICAg
IHZvaWQgbG9hZFJlc291cmNlMShsb25nIHJlcXVlc3RJZCkgZmluYWw7CisgICAgdm9pZCBsb2Fk
UmVzb3VyY2UyKGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTMo
bG9uZyByZXF1ZXN0SWQpIGZpbmFsOworICAgIHZvaWQgbG9hZFJlc291cmNlNChsb25nIHJlcXVl
c3RJZCkgZmluYWw7CisgICAgdm9pZCBsb2FkUmVzb3VyY2U1KGxvbmcgcmVxdWVzdElkKSBmaW5h
bDsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTYobG9uZyByZXF1ZXN0SWQpIGZpbmFsOworICAgIHZv
aWQgbG9hZFJlc291cmNlNyhsb25nIHJlcXVlc3RJZCkgZmluYWw7Citwcml2YXRlOgorICAgIFJl
dGFpblB0cjxpZDxUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRl
OworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bEJhY2tlbmREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSAiVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIK
KyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwor
dm9pZCBPYmpDSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNl
MShsb25nIHJlcXVlc3RJZCkKK3sKKyAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxl
Y3RvcjpAc2VsZWN0b3IobG9hZFJlc291cmNlMVdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxs
YmFjazopXSkgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVy
cm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdv
cmsxLmxvYWRSZXNvdXJjZTEnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7CisgICAgICAgIGJh
Y2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5k
RGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICB9OworCisgICAgaWQgc3VjY2Vzc0NhbGxi
YWNrID0gXnsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVl
c3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2UpOworICAgIH07CisKKyAgICBbbV9k
ZWxlZ2F0ZSBsb2FkUmVzb3VyY2UxV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNj
ZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKK30KKwordm9pZCBPYmpDSW5zcGVjdG9yTmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMShsb25nIHJlcXVlc3RJZCkKK3sK
KyAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IobG9hZFJl
c291cmNlMVdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgeworICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2Vu
ZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmszLmxvYWRSZXNvdXJjZTEnIHdh
cyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGlu
Z0Vycm9ycygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWQgZXJyb3JDYWxsYmFj
ayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJl
cG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJy
b3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJv
cnMoKTsKKyAgICB9OworCisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKKyAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKSwgZmFsc2UpOworICAgIH07CisKKyAgICBbbV9kZWxlZ2F0ZSBsb2FkUmVzb3VyY2Ux
V2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0Nh
bGxiYWNrXTsKK30KKwordm9pZCBPYmpDSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hl
cjo6bG9hZFJlc291cmNlMihsb25nIHJlcXVlc3RJZCkKK3sKKyAgICBpZiAoIVttX2RlbGVnYXRl
IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IobG9hZFJlc291cmNlMldpdGhFcnJvckNhbGxi
YWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5y
ZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5v
dEZvdW5kLCAiJ05ldHdvcmszLmxvYWRSZXNvdXJjZTInIHdhcyBub3QgZm91bmQiX3MpOworICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9y
KSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVx
dWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAg
YmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICB9OworCisgICAg
aWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2Vu
ZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2UpOworICAg
IH07CisKKyAgICBbbV9kZWxlZ2F0ZSBsb2FkUmVzb3VyY2UyV2l0aEVycm9yQ2FsbGJhY2s6ZXJy
b3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKK30KKwordm9pZCBP
YmpDSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMyhsb25n
IHJlcXVlc3RJZCkKK3sKKyAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpA
c2VsZWN0b3IobG9hZFJlc291cmNlM1dpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazop
XSkgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJl
cXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmszLmxv
YWRSZXNvdXJjZTMnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7CisgICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0
Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICB9OworCisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0g
XnsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwg
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2UpOworICAgIH07CisKKyAgICBbbV9kZWxlZ2F0
ZSBsb2FkUmVzb3VyY2UzV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2Fs
bGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKK30KKwordm9pZCBPYmpDSW5zcGVjdG9yTmV0d29yazNC
YWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNChsb25nIHJlcXVlc3RJZCkKK3sKKyAgICBp
ZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IobG9hZFJlc291cmNl
NFdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgeworICAgICAgICBiYWNrZW5k
RGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3Bh
dGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmszLmxvYWRSZXNvdXJjZTQnIHdhcyBub3Qg
Zm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9y
cygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4o
TlNTdHJpbmcgKmVycm9yKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFBy
b3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVy
cm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsK
KyAgICB9OworCisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKKyAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KSwgZmFsc2UpOworICAgIH07CisKKyAgICBbbV9kZWxlZ2F0ZSBsb2FkUmVzb3VyY2U0V2l0aEVy
cm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNr
XTsKK30KKwordm9pZCBPYmpDSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9h
ZFJlc291cmNlNShsb25nIHJlcXVlc3RJZCkKK3sKKyAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3Bv
bmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IobG9hZFJlc291cmNlNVdpdGhFcnJvckNhbGxiYWNrOnN1
Y2Nlc3NDYWxsYmFjazopXSkgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQ
cm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5k
LCAiJ05ldHdvcmszLmxvYWRSZXNvdXJjZTUnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Cisg
ICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElk
LCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICB9OworCisgICAgaWQgc3Vj
Y2Vzc0NhbGxiYWNrID0gXnsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3Bv
bnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2UpOworICAgIH07CisK
KyAgICBbbV9kZWxlZ2F0ZSBsb2FkUmVzb3VyY2U1V2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxs
YmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKK30KKwordm9pZCBPYmpDSW5z
cGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNihsb25nIHJlcXVl
c3RJZCkKK3sKKyAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0
b3IobG9hZFJlc291cmNlNldpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgewor
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJ
ZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmszLmxvYWRSZXNv
dXJjZTYnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5z
ZW5kUGVuZGluZ0Vycm9ycygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWQgZXJy
b3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6
U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBl
bmRpbmdFcnJvcnMoKTsKKyAgICB9OworCisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKKyAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2UpOworICAgIH07CisKKyAgICBbbV9kZWxlZ2F0ZSBsb2Fk
UmVzb3VyY2U2V2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6
c3VjY2Vzc0NhbGxiYWNrXTsKK30KKwordm9pZCBPYmpDSW5zcGVjdG9yTmV0d29yazNCYWNrZW5k
RGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNyhsb25nIHJlcXVlc3RJZCkKK3sKKyAgICBpZiAoIVtt
X2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IobG9hZFJlc291cmNlN1dpdGhF
cnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgeworICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6
Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmszLmxvYWRSZXNvdXJjZTcnIHdhcyBub3QgZm91bmQi
X3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJp
bmcgKmVycm9yKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29s
RXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsK
KyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICB9
OworCisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKKyAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFs
c2UpOworICAgIH07CisKKyAgICBbbV9kZWxlZ2F0ZSBsb2FkUmVzb3VyY2U3V2l0aEVycm9yQ2Fs
bGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKK30K
KworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
QmFja2VuZERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25m
aWd1cmF0aW9uLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdp
dGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8d3RmL1BsYXRmb3JtLmg+CisKKyNpbXBvcnQgPFdl
Ykluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAo
ImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09i
amVjdAorQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNldE5ldHdvcmsxSGFu
ZGxlcjopIGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4gbmV0d29yazFIYW5k
bGVyOworQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNldE5ldHdvcmszSGFu
ZGxlcjopIGlkPFRlc3RQcm90b2NvbE5ldHdvcmszRG9tYWluSGFuZGxlcj4gbmV0d29yazNIYW5k
bGVyOworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5o
CisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1z
aXplcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNp
bXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKKworI2ltcG9ydCAiVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5o
IgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4K
KyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5o
PgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXJzLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9u
IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNv
bnRyb2xsZXIqIF9jb250cm9sbGVyOworICAgIGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWlu
SGFuZGxlcj4gX25ldHdvcmsxSGFuZGxlcjsKKyAgICBpZDxUZXN0UHJvdG9jb2xOZXR3b3JrM0Rv
bWFpbkhhbmRsZXI+IF9uZXR3b3JrM0hhbmRsZXI7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0
V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxl
cgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICBy
ZXR1cm4gbmlsOworICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNv
bnRyb2xsZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAg
IFtfbmV0d29yazFIYW5kbGVyIHJlbGVhc2VdOworICAgIFtfbmV0d29yazNIYW5kbGVyIHJlbGVh
c2VdOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAodm9pZClzZXROZXR3b3JrMUhhbmRs
ZXI6KGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4paGFuZGxlcgoreworICAg
IGlmIChoYW5kbGVyID09IF9uZXR3b3JrMUhhbmRsZXIpCisgICAgICAgIHJldHVybjsKKworICAg
IFtfbmV0d29yazFIYW5kbGVyIHJlbGVhc2VdOworICAgIF9uZXR3b3JrMUhhbmRsZXIgPSBbaGFu
ZGxlciByZXRhaW5dOworCisgICAgYXV0byBhbHRlcm5hdGVEaXNwYXRjaGVyID0gbWFrZVVuaXF1
ZTxPYmpDSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7CisgICAg
YXV0byBhbHRlcm5hdGVBZ2VudCA9IG1ha2VVbmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdl
bnQ8TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciwgQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlz
cGF0Y2hlcj4+KCJOZXR3b3JrMSJfcywgKl9jb250cm9sbGVyLCBXVEZNb3ZlKGFsdGVybmF0ZURp
c3BhdGNoZXIpKTsKKyAgICBfY29udHJvbGxlci0+YXBwZW5kRXh0cmFBZ2VudChXVEZNb3ZlKGFs
dGVybmF0ZUFnZW50KSk7Cit9CisKKy0gKGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFu
ZGxlcj4pbmV0d29yazFIYW5kbGVyCit7CisgICAgcmV0dXJuIF9uZXR3b3JrMUhhbmRsZXI7Cit9
CisKKy0gKHZvaWQpc2V0TmV0d29yazNIYW5kbGVyOihpZDxUZXN0UHJvdG9jb2xOZXR3b3JrM0Rv
bWFpbkhhbmRsZXI+KWhhbmRsZXIKK3sKKyAgICBpZiAoaGFuZGxlciA9PSBfbmV0d29yazNIYW5k
bGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBbX25ldHdvcmszSGFuZGxlciByZWxlYXNlXTsK
KyAgICBfbmV0d29yazNIYW5kbGVyID0gW2hhbmRsZXIgcmV0YWluXTsKKworICAgIGF1dG8gYWx0
ZXJuYXRlRGlzcGF0Y2hlciA9IG1ha2VVbmlxdWU8T2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2Vu
ZERpc3BhdGNoZXI+KGhhbmRsZXIpOworICAgIGF1dG8gYWx0ZXJuYXRlQWdlbnQgPSBtYWtlVW5p
cXVlPEFsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50PE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIs
IEFsdGVybmF0ZU5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI+PigiTmV0d29yazMiX3MsICpfY29u
dHJvbGxlciwgV1RGTW92ZShhbHRlcm5hdGVEaXNwYXRjaGVyKSk7CisgICAgX2NvbnRyb2xsZXIt
PmFwcGVuZEV4dHJhQWdlbnQoV1RGTW92ZShhbHRlcm5hdGVBZ2VudCkpOworfQorCistIChpZDxU
ZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkhhbmRsZXI+KW5ldHdvcmszSGFuZGxlcgoreworICAg
IHJldHVybiBfbmV0d29yazNIYW5kbGVyOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xFdmVudERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
ZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFs
LmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8
d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisjIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9t
YWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5o
PgorI2ltcG9ydCA8d3RmL1BsYXRmb3JtLmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQ
cm90b2NvbEpTT05PYmplY3QuaD4KKworCisKKworCisKKworCitAcHJvdG9jb2wgVGVzdFByb3Rv
Y29sTmV0d29yazFEb21haW5IYW5kbGVyIDxOU09iamVjdD4KK0BvcHRpb25hbAorLSAodm9pZCls
b2FkUmVzb3VyY2UxV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSll
cnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKSh2b2lkKSlzdWNjZXNzQ2FsbGJh
Y2s7CitAZW5kCisKK0Bwcm90b2NvbCBUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkhhbmRsZXIg
PE5TT2JqZWN0PgorQG9wdGlvbmFsCistICh2b2lkKWxvYWRSZXNvdXJjZTFXaXRoRXJyb3JDYWxs
YmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxi
YWNrOih2b2lkKF4pKHZvaWQpKXN1Y2Nlc3NDYWxsYmFjazsKKy0gKHZvaWQpbG9hZFJlc291cmNl
MldpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFj
ayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikodm9pZCkpc3VjY2Vzc0NhbGxiYWNrOworLSAodm9p
ZClsb2FkUmVzb3VyY2UzV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9y
KSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKSh2b2lkKSlzdWNjZXNzQ2Fs
bGJhY2s7CistICh2b2lkKWxvYWRSZXNvdXJjZTRXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShO
U1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKHZv
aWQpKXN1Y2Nlc3NDYWxsYmFjazsKKy0gKHZvaWQpbG9hZFJlc291cmNlNVdpdGhFcnJvckNhbGxi
YWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJh
Y2s6KHZvaWQoXikodm9pZCkpc3VjY2Vzc0NhbGxiYWNrOworLSAodm9pZClsb2FkUmVzb3VyY2U2
V2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNr
IHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKSh2b2lkKSlzdWNjZXNzQ2FsbGJhY2s7CistICh2b2lk
KWxvYWRSZXNvdXJjZTdXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3Ip
KWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKHZvaWQpKXN1Y2Nlc3NDYWxs
YmFjazsKK0BlbmQKKworCisKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVp
bGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5o
CisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5q
c29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQg
PHd0Zi9QbGF0Zm9ybS5oPgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRl
c3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9B
dWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVz
Lmg+CisKKworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorCisjIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8
d3RmL1BsYXRmb3JtLmg+CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCA8V2Vi
SW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgorCituYW1lc3BhY2UgSW5z
cGVjdG9yIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgorT3B0aW9uYWw8T2Jq
Q0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7CisKKwor
Cit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRo
LXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgor
CisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJz
ZXIuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRl
Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbnRlcmZhY2UgVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zIChOZXR3b3JrMkRvbWFpbikKKworKyAodm9pZClfcGFyc2VMb2Fk
ZXJJZDooTlNTdHJpbmcgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisKK0Bl
bmQKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoTmV0d29y
azJEb21haW4pCisKKysgKHZvaWQpX3BhcnNlTG9hZGVySWQ6KE5TU3RyaW5nICoqKW91dFZhbHVl
IGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURf
VFlQRShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSAoTlNTdHJp
bmcgKilwYXlsb2FkOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1t
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmct
Y29tbWFuZC1zaXplcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3Rv
Y29sSlNPTk9iamVjdFByaXZhdGUuaD4KKyNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW1w
b3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisK
KworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZW51bS12
YWx1ZXMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvZW51bS12YWx1ZXMuanNvbi1yZXN1bHQKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjhjYjU4MzMyMzM1Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2Vu
dW0tdmFsdWVzLmpzb24tcmVzdWx0CkBAIC0wLDAgKzEsMTIxOCBAQAorIyMjIEJlZ2luIEZpbGU6
IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcy5pbgorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworLy8gVHlwZURvbWFpbgorSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRv
bWFpbigiVHlwZURvbWFpbiIsIG51bGwpOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0o
IlR5cGVEb21haW4uVHlwZURvbWFpbkVudW0iLCB7U2hhcmVkOiAic2hhcmVkIiwgUmVkOiAicmVk
IiwgR3JlZW46ICJncmVlbiIsIEJsdWU6ICJibHVlIn0pOworSW5zcGVjdG9yQmFja2VuZC5hY3Rp
dmF0ZURvbWFpbigiVHlwZURvbWFpbiIsIG51bGwpOworCisvLyBDb21tYW5kRG9tYWluCitJbnNw
ZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJDb21tYW5kRG9tYWluIiwgbnVsbCk7CitJbnNw
ZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiQ29tbWFuZERvbWFpbi5jb21tYW5kV2l0aEVu
dW1SZXR1cm5WYWx1ZSIsIG51bGwsIFtdLCBbInJldHVyblZhbHVlIl0pOworSW5zcGVjdG9yQmFj
a2VuZC5hY3RpdmF0ZURvbWFpbigiQ29tbWFuZERvbWFpbiIsIG51bGwpOworCisvLyBFdmVudERv
bWFpbgorSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiRXZlbnREb21haW4iLCBudWxs
KTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJFdmVudERvbWFpbi5FdmVudFdpdGhF
bnVtUGFyYW1ldGVyUGFyYW1ldGVyIiwge1NoYXJlZDogInNoYXJlZCIsIEJsYWNrOiAiYmxhY2si
LCBXaGl0ZTogIndoaXRlIn0pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckV2ZW50KCJFdmVu
dERvbWFpbi5ldmVudFdpdGhFbnVtUGFyYW1ldGVyIiwgbnVsbCwgWyJwYXJhbWV0ZXIiXSk7CitJ
bnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnREb21haW5EaXNwYXRjaGVyID0gSW5zcGVjdG9y
QmFja2VuZC5yZWdpc3RlckRpc3BhdGNoZXIuYmluZChJbnNwZWN0b3JCYWNrZW5kLCAiRXZlbnRE
b21haW4iKTsKK0luc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkV2ZW50RG9tYWluIiwg
bnVsbCk7CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcy5pbgorCisj
IyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbgorLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
PHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKworbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CisKK2NsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2
b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNw
YXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9Cisg
ICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4g
bV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQorcHJpdmF0ZToKKyAgICBSZWZQdHI8QmFja2Vu
ZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Cit9OworCisKK2NsYXNzIEFsdGVybmF0
ZUNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5k
RGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+QWx0ZXJuYXRlQ29tbWFuZERvbWFp
bkJhY2tlbmREaXNwYXRjaGVyKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGNvbW1hbmRXaXRoRW51
bVJldHVyblZhbHVlKGxvbmcgY2FsbElkKSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQorIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZv
cm0uaD4KKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJp
bmcgRXJyb3JTdHJpbmc7CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKK2NsYXNzIEFsdGVybmF0ZUNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcjsKKyNl
bmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworY2xhc3Mg
Q29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CitwdWJsaWM6CisgICAgLy8g
TmFtZWQgYWZ0ZXIgcGFyYW1ldGVyICdyZXR1cm5WYWx1ZScgd2hpbGUgZ2VuZXJhdGluZyBjb21t
YW5kL2V2ZW50IGNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlLgorICAgIGVudW0gY2xhc3MgUmV0
dXJuVmFsdWUgeworICAgICAgICBTaGFyZWQgPSAwLAorICAgICAgICBDeWFuID0gNiwKKyAgICAg
ICAgTWFnZW50YSA9IDcsCisgICAgICAgIFllbGxvdyA9IDgsCisgICAgfTsgLy8gZW51bSBjbGFz
cyBSZXR1cm5WYWx1ZQorICAgIHZpcnR1YWwgdm9pZCBjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1
ZShFcnJvclN0cmluZyYsIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlJl
dHVyblZhbHVlKiBvdXRfcmV0dXJuVmFsdWUpID0gMDsKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFs
IH5Db21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7Cit9OworCitjbGFzcyBD
b21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFs
QmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8Q29tbWFuZERvbWFp
bkJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBDb21tYW5kRG9t
YWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgdm9pZCBkaXNwYXRjaChsb25nIHJl
cXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2Fn
ZSkgZmluYWw7Citwcml2YXRlOgorICAgIHZvaWQgY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUo
bG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisjaWYg
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCitwdWJsaWM6CisgICAgdm9p
ZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZUNvbW1hbmREb21haW5CYWNrZW5kRGlz
cGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVybmF0ZURpc3BhdGNoZXIgPSBh
bHRlcm5hdGVEaXNwYXRjaGVyOyB9Citwcml2YXRlOgorICAgIEFsdGVybmF0ZUNvbW1hbmREb21h
aW5CYWNrZW5kRGlzcGF0Y2hlciogbV9hbHRlcm5hdGVEaXNwYXRjaGVyIHsgbnVsbHB0ciB9Owor
I2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorcHJpdmF0
ZToKKyAgICBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXIm
LCBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgQ29tbWFuZERv
bWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2VudCB7IG51bGxwdHIgfTsKK307CisK
K30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3Bh
dGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZh
bHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENI
RVJTKQorI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNlbmRp
ZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworbmFtZXNwYWNl
IEluc3BlY3RvciB7CisKK0NvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5D
b21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9CisKK1JlZjxDb21tYW5k
RG9tYWluQmFja2VuZERpc3BhdGNoZXI+IENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6
Y3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgQ29tbWFuZERvbWFp
bkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBh
Z2VudCkpOworfQorCitDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmREb21h
aW5CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIs
IENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQorICAgIDogU3Vw
cGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCisgICAgLCBtX2Fn
ZW50KGFnZW50KQoreworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hl
ckZvckRvbWFpbigiQ29tbWFuZERvbWFpbiJfcywgdGhpcyk7Cit9CisKK3ZvaWQgQ29tbWFuZERv
bWFpbkJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3Ry
aW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKK3sKKyAgICBSZWY8Q29t
bWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKKworICAgIFJlZlB0
cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7CisgICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJh
bXMiX3MsIHBhcmFtZXRlcnMpOworCisgICAgaWYgKG1ldGhvZCA9PSAiY29tbWFuZFdpdGhFbnVt
UmV0dXJuVmFsdWUiKSB7CisgICAgICAgIGNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlKHJlcXVl
c3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRj
aGVyOjpNZXRob2ROb3RGb3VuZCwgIidDb21tYW5kRG9tYWluLiIgKyBtZXRob2QgKyAiJyB3YXMg
bm90IGZvdW5kIik7Cit9CisKK3ZvaWQgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpj
b21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9i
amVjdD4mJikKK3sKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
KyAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlz
cGF0Y2hlci0+Y29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUocmVxdWVzdElkKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKKworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgIFJlZjxKU09OOjpPYmplY3Q+
IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgQ29tbWFuZERvbWFpbkJhY2tl
bmREaXNwYXRjaGVySGFuZGxlcjo6UmV0dXJuVmFsdWUgb3V0X3JldHVyblZhbHVlOworICAgIG1f
YWdlbnQtPmNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlKGVycm9yLCAmb3V0X3JldHVyblZhbHVl
KTsKKworICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCisgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5n
KCJyZXR1cm5WYWx1ZSJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVu
dW1Db25zdGFudFZhbHVlKG91dF9yZXR1cm5WYWx1ZSkpOworCisgICAgaWYgKCFlcnJvci5sZW5n
dGgoKSkKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJ
ZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7CisgICAgZWxzZQorICAgICAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJF
cnJvciwgV1RGTW92ZShlcnJvcikpOworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKwor
IyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmls
ZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKwor
I2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVl
cy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVj
dG9yIHsKKworY2xhc3MgRnJvbnRlbmRSb3V0ZXI7CisKK2NsYXNzIEV2ZW50RG9tYWluRnJvbnRl
bmREaXNwYXRjaGVyIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAg
ICBFdmVudERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcihGcm9udGVuZFJvdXRlciYgZnJvbnRlbmRS
b3V0ZXIpIDogbV9mcm9udGVuZFJvdXRlcihmcm9udGVuZFJvdXRlcikgeyB9CisgICAgICAgIC8v
IE5hbWVkIGFmdGVyIHBhcmFtZXRlciAncGFyYW1ldGVyJyB3aGlsZSBnZW5lcmF0aW5nIGNvbW1h
bmQvZXZlbnQgZXZlbnRXaXRoRW51bVBhcmFtZXRlci4KKyAgICAgICAgZW51bSBjbGFzcyBQYXJh
bWV0ZXIgeworICAgICAgICAgICAgU2hhcmVkID0gMCwKKyAgICAgICAgICAgIEJsYWNrID0gNCwK
KyAgICAgICAgICAgIFdoaXRlID0gNSwKKyAgICAgICAgfTsgLy8gZW51bSBjbGFzcyBQYXJhbWV0
ZXIKKyAgICB2b2lkIGV2ZW50V2l0aEVudW1QYXJhbWV0ZXIoUGFyYW1ldGVyIHBhcmFtZXRlcik7
Citwcml2YXRlOgorICAgIEZyb250ZW5kUm91dGVyJiBtX2Zyb250ZW5kUm91dGVyOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3Bh
dGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3ZvaWQgRXZlbnREb21haW5G
cm9udGVuZERpc3BhdGNoZXI6OmV2ZW50V2l0aEVudW1QYXJhbWV0ZXIoUGFyYW1ldGVyIHBhcmFt
ZXRlcikKK3sKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVj
dDo6Y3JlYXRlKCk7CisgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRXZl
bnREb21haW4uZXZlbnRXaXRoRW51bVBhcmFtZXRlciJfcyk7CisgICAgUmVmPEpTT046Ok9iamVj
dD4gcGFyYW1zT2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwYXJhbXNPYmpl
Y3QtPnNldFN0cmluZygicGFyYW1ldGVyIl9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVs
cGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUocGFyYW1ldGVyKSk7CisgICAganNvbk1lc3NhZ2Ut
PnNldE9iamVjdCgicGFyYW1zIl9zLCBXVEZNb3ZlKHBhcmFtc09iamVjdCkpOworCisgICAgbV9m
cm9udGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5k
RGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JQcm90b2NvbFR5cGVzLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKKworCituYW1lc3BhY2UgUHJvdG9jb2wgeworCisKKworLy8g
Rm9yd2FyZCBkZWNsYXJhdGlvbnMuCituYW1lc3BhY2UgVHlwZURvbWFpbiB7CitlbnVtIGNsYXNz
IFR5cGVEb21haW5FbnVtOworfSAvLyBUeXBlRG9tYWluCisvLyBFbmQgb2YgZm9yd2FyZCBkZWNs
YXJhdGlvbnMuCisKKworCisKK25hbWVzcGFjZSBUZXN0SGVscGVycyB7CisKK1N0cmluZyBnZXRF
bnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmlu
ZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkKK3sKKyAgICByZXR1cm4gZ2V0RW51
bUNvbnN0YW50VmFsdWUoc3RhdGljX2Nhc3Q8aW50PihlbnVtVmFsdWUpKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgVGVzdEhlbHBlcnMKKworbmFtZXNwYWNlIFR5cGVEb21haW4geworCitlbnVtIGNs
YXNzIFR5cGVEb21haW5FbnVtIHsKKyAgICBTaGFyZWQgPSAwLAorICAgIFJlZCA9IDEsCisgICAg
R3JlZW4gPSAyLAorICAgIEJsdWUgPSAzLAorfTsgLy8gZW51bSBjbGFzcyBUeXBlRG9tYWluRW51
bQorCit9IC8vIFR5cGVEb21haW4KKworCisKK25hbWVzcGFjZSBUZXN0SGVscGVycyB7CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFByb3RvY29sRW51bVR5cGU+CitPcHRpb25hbDxQcm90b2NvbEVudW1U
eXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJik7CisKKy8vIEVudW1z
IGluIHRoZSAnVHlwZURvbWFpbicgRG9tYWluCit0ZW1wbGF0ZTw+CitPcHRpb25hbDxJbnNwZWN0
b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51bT4gcGFyc2VFbnVtVmFsdWVG
cm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46OlR5cGVEb21haW5FbnVt
Pihjb25zdCBTdHJpbmcmKTsKKworfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKKworfSAvLyBu
YW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKK25hbWVzcGFj
ZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7CisKKy8v
IEhhc2ggZGVjbGFyYXRpb25zIGluIHRoZSAnVHlwZURvbWFpbicgRG9tYWluCit0ZW1wbGF0ZTw+
CitzdHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlw
ZURvbWFpbkVudW0+IHsKKyAgICB0eXBlZGVmIEludEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6
VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW0+IEhhc2g7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
VEYKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisKKyMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGVudW0tdmFsdWVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVj
dHMuaCIKKworI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK25hbWVzcGFjZSBQcm90b2NvbCB7
CisKK25hbWVzcGFjZSBUZXN0SGVscGVycyB7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBl
bnVtX2NvbnN0YW50X3ZhbHVlc1tdID0geworICAgICJzaGFyZWQiLAorICAgICJyZWQiLAorICAg
ICJncmVlbiIsCisgICAgImJsdWUiLAorICAgICJibGFjayIsCisgICAgIndoaXRlIiwKKyAgICAi
Y3lhbiIsCisgICAgIm1hZ2VudGEiLAorICAgICJ5ZWxsb3ciLAorfTsKKworU3RyaW5nIGdldEVu
dW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CisgICAgcmV0dXJuIGVudW1fY29uc3RhbnRfdmFs
dWVzW2NvZGVdOworfQorCisvLyBFbnVtcyBpbiB0aGUgJ1R5cGVEb21haW4nIERvbWFpbgorCit0
ZW1wbGF0ZTw+CitPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBl
RG9tYWluRW51bT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlR5cGVEb21haW46OlR5cGVEb21haW5FbnVtPihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5n
KQoreworICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsKKyAgICAg
ICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51
bTo6U2hhcmVkLAorICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21h
aW46OlR5cGVEb21haW5FbnVtOjpSZWQsCisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90
b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW06OkdyZWVuLAorICAgICAgICAoc2l6ZV90
KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46OlR5cGVEb21haW5FbnVtOjpCbHVlLAor
ICAgIH07CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCA0OyArK2kpCisgICAgICAgIGlmIChw
cm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0p
CisgICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46OlR5
cGVEb21haW5FbnVtKWNvbnN0YW50VmFsdWVzW2ldOworCisgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKK30KKworfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKKworCisKK30gLy8gbmFtZXNwYWNl
IFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbE9iamVjdHMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNr
ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0t
dmFsdWVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I2ltcG9ydCA8d3RmL1BsYXRmb3JtLmg+CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWlu
UHRyLmg+CisKK0Bwcm90b2NvbCBUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluRG9tYWluSGFuZGxl
cjsKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworY2xhc3MgT2JqQ0luc3BlY3RvckNvbW1h
bmREb21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVDb21tYW5k
RG9tYWluQmFja2VuZERpc3BhdGNoZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwor
cHVibGljOgorICAgIE9iakNJbnNwZWN0b3JDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIo
aWQ8VGVzdFByb3RvY29sQ29tbWFuZERvbWFpbkRvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9k
ZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KKyAgICB2b2lkIGNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVl
KGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKK3ByaXZhdGU6CisgICAgUmV0YWluUHRyPGlkPFRlc3RQ
cm90b2NvbENvbW1hbmREb21haW5Eb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKK307CisKK30g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tl
bmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlz
cGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVl
cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBv
cnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgi
CisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2luY2x1ZGUgIlRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisKK25h
bWVzcGFjZSBJbnNwZWN0b3IgeworCit2b2lkIE9iakNJbnNwZWN0b3JDb21tYW5kRG9tYWluQmFj
a2VuZERpc3BhdGNoZXI6OmNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlKGxvbmcgcmVxdWVzdElk
KQoreworICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihj
b21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZVdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFj
azopXSkgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9y
KHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0NvbW1hbmRE
b21haW4uY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUnIHdhcyBub3QgZm91bmQiX3MpOworICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9y
KSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVx
dWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAg
YmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICB9OworCisgICAg
aWQgc3VjY2Vzc0NhbGxiYWNrID0gXihUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluQ29tbWFuZFdp
dGhFbnVtUmV0dXJuVmFsdWVSZXR1cm5WYWx1ZSByZXR1cm5WYWx1ZSkgeworICAgICAgICBSZWY8
SlNPTjo6T2JqZWN0PiByZXN1bHRPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAg
ICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygicmV0dXJuVmFsdWUiX3MsIHRvUHJvdG9jb2xT
dHJpbmcocmV0dXJuVmFsdWUpKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJl
c3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHRPYmplY3QpLCBmYWxzZSk7CisgICAgfTsK
KworICAgIFttX2RlbGVnYXRlIGNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlV2l0aEVycm9yQ2Fs
bGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKK30K
KworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
QmFja2VuZERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25m
aWd1cmF0aW9uLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVl
cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBv
cnQgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29s
Lmg+CisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFj
ZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKK0Bwcm9wZXJ0eSAobm9uYXRv
bWljLCByZXRhaW4sIHNldHRlcj1zZXRDb21tYW5kRG9tYWluSGFuZGxlcjopIGlkPFRlc3RQcm90
b2NvbENvbW1hbmREb21haW5Eb21haW5IYW5kbGVyPiBjb21tYW5kRG9tYWluSGFuZGxlcjsKK0Bw
cm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgVGVzdFByb3RvY29sRXZlbnREb21haW5Eb21h
aW5FdmVudERpc3BhdGNoZXIgKmV2ZW50RG9tYWluRXZlbnREaXNwYXRjaGVyOworQGVuZAorCisK
KyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCisK
KyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xC
YWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURp
c3BhdGNoYWJsZUFnZW50Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUlu
c3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7
CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCit7CisgICAgQXVn
bWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKKyAgICBpZDxUZXN0UHJv
dG9jb2xDb21tYW5kRG9tYWluRG9tYWluSGFuZGxlcj4gX2NvbW1hbmREb21haW5IYW5kbGVyOwor
ICAgIFRlc3RQcm90b2NvbEV2ZW50RG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyICpfZXZlbnRE
b21haW5FdmVudERpc3BhdGNoZXI7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRy
b2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgoreworICAg
IHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmls
OworICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7
CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIFtfY29tbWFu
ZERvbWFpbkhhbmRsZXIgcmVsZWFzZV07CisgICAgW19ldmVudERvbWFpbkV2ZW50RGlzcGF0Y2hl
ciByZWxlYXNlXTsKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0gKHZvaWQpc2V0Q29tbWFu
ZERvbWFpbkhhbmRsZXI6KGlkPFRlc3RQcm90b2NvbENvbW1hbmREb21haW5Eb21haW5IYW5kbGVy
PiloYW5kbGVyCit7CisgICAgaWYgKGhhbmRsZXIgPT0gX2NvbW1hbmREb21haW5IYW5kbGVyKQor
ICAgICAgICByZXR1cm47CisKKyAgICBbX2NvbW1hbmREb21haW5IYW5kbGVyIHJlbGVhc2VdOwor
ICAgIF9jb21tYW5kRG9tYWluSGFuZGxlciA9IFtoYW5kbGVyIHJldGFpbl07CisKKyAgICBhdXRv
IGFsdGVybmF0ZURpc3BhdGNoZXIgPSBtYWtlVW5pcXVlPE9iakNJbnNwZWN0b3JDb21tYW5kRG9t
YWluQmFja2VuZERpc3BhdGNoZXI+KGhhbmRsZXIpOworICAgIGF1dG8gYWx0ZXJuYXRlQWdlbnQg
PSBtYWtlVW5pcXVlPEFsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50PENvbW1hbmREb21haW5CYWNr
ZW5kRGlzcGF0Y2hlciwgQWx0ZXJuYXRlQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPj4o
IkNvbW1hbmREb21haW4iX3MsICpfY29udHJvbGxlciwgV1RGTW92ZShhbHRlcm5hdGVEaXNwYXRj
aGVyKSk7CisgICAgX2NvbnRyb2xsZXItPmFwcGVuZEV4dHJhQWdlbnQoV1RGTW92ZShhbHRlcm5h
dGVBZ2VudCkpOworfQorCistIChpZDxUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluRG9tYWluSGFu
ZGxlcj4pY29tbWFuZERvbWFpbkhhbmRsZXIKK3sKKyAgICByZXR1cm4gX2NvbW1hbmREb21haW5I
YW5kbGVyOworfQorCistIChUZXN0UHJvdG9jb2xFdmVudERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0
Y2hlciAqKWV2ZW50RG9tYWluRXZlbnREaXNwYXRjaGVyCit7CisgICAgaWYgKCFfZXZlbnREb21h
aW5FdmVudERpc3BhdGNoZXIpCisgICAgICAgIF9ldmVudERvbWFpbkV2ZW50RGlzcGF0Y2hlciA9
IFtbVGVzdFByb3RvY29sRXZlbnREb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgYWxsb2NdIGlu
aXRXaXRoQ29udHJvbGxlcjpfY29udHJvbGxlcl07CisgICAgcmV0dXJuIF9ldmVudERvbWFpbkV2
ZW50RGlzcGF0Y2hlcjsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbi5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNw
YXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVz
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9y
dCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLmgiCisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sRXZlbnREb21haW5E
b21haW5FdmVudERpc3BhdGNoZXIKK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xs
ZXIqIF9jb250cm9sbGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVy
OihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxm
ID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAg
ICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAg
IHJldHVybiBzZWxmOworfQorCistICh2b2lkKWV2ZW50V2l0aEVudW1QYXJhbWV0ZXJXaXRoUGFy
YW1ldGVyOihUZXN0UHJvdG9jb2xFdmVudERvbWFpbkV2ZW50V2l0aEVudW1QYXJhbWV0ZXJQYXJh
bWV0ZXIpcGFyYW1ldGVyCit7CisgICAgY29uc3QgRnJvbnRlbmRSb3V0ZXImIHJvdXRlciA9IF9j
b250cm9sbGVyLT5mcm9udGVuZFJvdXRlcigpOworCisgICAgUmVmPEpTT046Ok9iamVjdD4ganNv
bk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGpzb25NZXNzYWdlLT5zZXRT
dHJpbmcoIm1ldGhvZCJfcywgIkV2ZW50RG9tYWluLmV2ZW50V2l0aEVudW1QYXJhbWV0ZXIiX3Mp
OworICAgIFJlZjxKU09OOjpPYmplY3Q+IHBhcmFtc09iamVjdCA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7CisgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInBhcmFtZXRlciJfcywgdG9Qcm90
b2NvbFN0cmluZyhwYXJhbWV0ZXIpKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJh
bXMiX3MsIFdURk1vdmUocGFyYW1zT2JqZWN0KSk7CisgICAgcm91dGVyLnNlbmRFdmVudChqc29u
TWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2wuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8
Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisjaW1wb3J0IDx3dGYvUGxhdGZvcm0uaD4KKworI2lt
cG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgorCisKKworCit0eXBl
ZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bSkgeworICAg
IFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtU2hhcmVkLAorICAgIFRlc3RQcm90b2NvbFR5cGVE
b21haW5FbnVtUmVkLAorICAgIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtR3JlZW4sCisgICAg
VGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1CbHVlLAorfTsKKworCisKK0Bwcm90b2NvbCBUZXN0
UHJvdG9jb2xDb21tYW5kRG9tYWluRG9tYWluSGFuZGxlciA8TlNPYmplY3Q+CitAb3B0aW9uYWwK
Ky0gKHZvaWQpY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWVXaXRoRXJyb3JDYWxsYmFjazoodm9p
ZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lk
KF4pKFRlc3RQcm90b2NvbENvbW1hbmREb21haW5Db21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZVJl
dHVyblZhbHVlIHJldHVyblZhbHVlKSlzdWNjZXNzQ2FsbGJhY2s7CitAZW5kCisKK19fYXR0cmli
dXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xF
dmVudERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciA6IE5TT2JqZWN0CistICh2b2lkKWV2ZW50
V2l0aEVudW1QYXJhbWV0ZXJXaXRoUGFyYW1ldGVyOihUZXN0UHJvdG9jb2xFdmVudERvbWFpbkV2
ZW50V2l0aEVudW1QYXJhbWV0ZXJQYXJhbWV0ZXIpcGFyYW1ldGVyOworQGVuZAorCisKKyNpbXBv
cnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4K
KworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sSW50ZXJuYWwuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0t
dmFsdWVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I2ltcG9ydCA8d3RmL1BsYXRmb3JtLmg+CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2lt
cG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKKyNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8d3RmL0pT
T05WYWx1ZXMuaD4KKworQGludGVyZmFjZSBUZXN0UHJvdG9jb2xFdmVudERvbWFpbkRvbWFpbkV2
ZW50RGlzcGF0Y2hlciAoUHJpdmF0ZSkKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xs
ZXI6KEluc3BlY3Rvcjo6QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVy
OworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorCisjIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaW1w
b3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFy
cmF5Q29udmVyc2lvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3RlbXBsYXRlPHR5
cGVuYW1lIE9iakNFbnVtVHlwZT4KK09wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29s
U3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOworCitpbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xT
dHJpbmcoVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0gdmFsdWUpCit7CisgICAgc3dpdGNoKHZh
bHVlKSB7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bVNoYXJlZDoKKyAgICAg
ICAgcmV0dXJuICJzaGFyZWQiX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51
bVJlZDoKKyAgICAgICAgcmV0dXJuICJyZWQiX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xUeXBl
RG9tYWluRW51bUdyZWVuOgorICAgICAgICByZXR1cm4gImdyZWVuIl9zOworICAgIGNhc2UgVGVz
dFByb3RvY29sVHlwZURvbWFpbkVudW1CbHVlOgorICAgICAgICByZXR1cm4gImJsdWUiX3M7Cisg
ICAgfQorfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sVHlwZURv
bWFpbkVudW0+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAg
IGlmICh2YWx1ZSA9PSAic2hhcmVkIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFR5cGVE
b21haW5FbnVtU2hhcmVkOworICAgIGlmICh2YWx1ZSA9PSAicmVkIikKKyAgICAgICAgcmV0dXJu
IFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtUmVkOworICAgIGlmICh2YWx1ZSA9PSAiZ3JlZW4i
KQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1HcmVlbjsKKyAgICBp
ZiAodmFsdWUgPT0gImJsdWUiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sVHlwZURvbWFp
bkVudW1CbHVlOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK30gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5o
CisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCisvLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucy5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRl
c3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2Nv
bEpTT05PYmplY3RQcml2YXRlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0Bp
bnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChUeXBlRG9tYWluRG9tYWluKQor
CisrICh2b2lkKV9wYXJzZVR5cGVEb21haW5FbnVtOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9t
UGF5bG9hZDooaWQpcGF5bG9hZDsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zIChUeXBlRG9tYWluRG9tYWluKQorCisrICh2b2lkKV9wYXJzZVR5
cGVEb21haW5FbnVtOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9h
ZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TU3RyaW5n
IGNsYXNzXSk7CisgICAgT3B0aW9uYWw8VGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0+IHJlc3Vs
dCA9IEluc3BlY3Rvcjo6ZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbFR5cGVEb21haW5F
bnVtPihwYXlsb2FkKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9FTlVNX1ZBTFVFKHJl
c3VsdCwgQCJUeXBlRG9tYWluRW51bSIpOworICAgICpvdXRWYWx1ZSA9IEAocmVzdWx0LnZhbHVl
KCkpOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbgorLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRl
cm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBv
cnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisjaW1wb3J0
IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcg
bmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xU
eXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL2V2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVn
Z2FibGVUeXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2V2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRl
YnVnZ2FibGVUeXBlLmpzb24tcmVzdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwLi40OTUzMWZiMzc0YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9ldmVudC10YXJnZXRUeXBlLW1h
dGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJlc3VsdApAQCAtMCwwICsxLDEwNDYg
QEAKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMuaW4KKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRv
bWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKy8vIERvbWFpbgorSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigi
RG9tYWluIiwgbnVsbCk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiRG9tYWlu
LkNvbW1hbmQiLCBudWxsLCBbXSwgW10pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckV2ZW50
KCJEb21haW4uRXZlbnQiLCBbInBhZ2UiLCAid29ya2VyIl0sIFtdKTsKK0luc3BlY3RvckJhY2tl
bmQucmVnaXN0ZXJEb21haW5EaXNwYXRjaGVyID0gSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRp
c3BhdGNoZXIuYmluZChJbnNwZWN0b3JCYWNrZW5kLCAiRG9tYWluIik7CitJbnNwZWN0b3JCYWNr
ZW5kLmFjdGl2YXRlRG9tYWluKCJEb21haW4iLCBbInBhZ2UiXSk7CisjIyMgRW5kIEZpbGU6IElu
c3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcy5pbgorCisjIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVy
bmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgorI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKworbmFtZXNw
YWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1
YmxpYzoKKyAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0
Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3Bh
dGNoZXIpOyB9CisgICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29u
c3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQorcHJpdmF0ZToKKyAgICBS
ZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Cit9OworCisKK2Ns
YXNzIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5BbHRlcm5hdGVEb21haW5C
YWNrZW5kRGlzcGF0Y2hlcigpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBDb21tYW5kKGxvbmcgY2Fs
bElkKSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorIyMjIEVuZCBGaWxlOiBUZXN0
QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNr
ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50
LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIK
KyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsK
KwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKK2NsYXNzIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRj
aGVyOworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQor
CitjbGFzcyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgeworcHVibGljOgorICAgIHZp
cnR1YWwgdm9pZCBDb21tYW5kKEVycm9yU3RyaW5nJikgPSAwOworcHJvdGVjdGVkOgorICAgIHZp
cnR1YWwgfkRvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOworfTsKKworY2xhc3MgRG9t
YWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERp
c3BhdGNoZXIgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8RG9tYWluQmFja2VuZERpc3BhdGNo
ZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlciopOworICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYg
bWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOworcHJpdmF0ZToKKyAg
ICB2b2lkIENvbW1hbmQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFy
YW1ldGVycyk7CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCitw
dWJsaWM6CisgICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZURvbWFpbkJh
Y2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0
Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KK3ByaXZhdGU6CisgICAgQWx0ZXJuYXRlRG9t
YWluQmFja2VuZERpc3BhdGNoZXIqIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciB7IG51bGxwdHIgfTsK
KyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK3ByaXZh
dGU6CisgICAgRG9tYWluQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImLCBEb21h
aW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICBEb21haW5CYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIqIG1fYWdlbnQgeyBudWxscHRyIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVU
eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKwor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5j
bHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKKyNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXJzLmgiCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXI6On5Eb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KKworUmVmPERvbWFp
bkJhY2tlbmREaXNwYXRjaGVyPiBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEJhY2tl
bmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyKiBhZ2VudCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEb21haW5CYWNrZW5k
RGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKK30KKworRG9tYWluQmFja2Vu
ZERpc3BhdGNoZXI6OkRvbWFpbkJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBi
YWNrZW5kRGlzcGF0Y2hlciwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkK
KyAgICA6IFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQor
ICAgICwgbV9hZ2VudChhZ2VudCkKK3sKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3Rl
ckRpc3BhdGNoZXJGb3JEb21haW4oIkRvbWFpbiJfcywgdGhpcyk7Cit9CisKK3ZvaWQgRG9tYWlu
QmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcm
IG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQoreworICAgIFJlZjxEb21haW5C
YWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CisKKyAgICBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiBwYXJhbWV0ZXJzOworICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJh
bWV0ZXJzKTsKKworICAgIGlmIChtZXRob2QgPT0gIkNvbW1hbmQiKSB7CisgICAgICAgIENvbW1h
bmQocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2Vu
ZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi4iICsgbWV0aG9kICsgIicgd2Fz
IG5vdCBmb3VuZCIpOworfQorCit2b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5k
KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQoreworI2lmIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorICAgIGlmIChtX2FsdGVybmF0ZURpc3Bh
dGNoZXIpIHsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5Db21tYW5kKHJlcXVlc3RJ
ZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWY8
SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYWdl
bnQtPkNvbW1hbmQoZXJyb3IpOworCisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKKyAgICAgICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1
bHQpLCBmYWxzZSk7CisgICAgZWxzZQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBv
cnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShl
cnJvcikpOworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBU
ZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5k
RGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRh
cmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
IDx3dGYvUGxhdGZvcm0uaD4KKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNp
bmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgRnJvbnRlbmRSb3V0ZXI7CisKK2Ns
YXNzIERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CitwdWJsaWM6CisgICAgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVyKEZyb250ZW5kUm91dGVy
JiBmcm9udGVuZFJvdXRlcikgOiBtX2Zyb250ZW5kUm91dGVyKGZyb250ZW5kUm91dGVyKSB7IH0K
KyAgICB2b2lkIEV2ZW50KCk7Citwcml2YXRlOgorICAgIEZyb250ZW5kUm91dGVyJiBtX2Zyb250
ZW5kUm91dGVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6
IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVu
ZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50
LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3ZvaWQgRG9tYWluRnJvbnRlbmRE
aXNwYXRjaGVyOjpFdmVudCgpCit7CisgICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2Ug
PSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1l
dGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7CisKKyAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRF
dmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKwor
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2Fi
bGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KKyNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK25hbWVzcGFjZSBQcm90
b2NvbCB7CisKKworCisKKworCisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5o
CisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRl
YnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMu
aCIKKworI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisK
KworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
KworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorCisjIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxl
VHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNp
bXBvcnQgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0
ci5oPgorCitAcHJvdG9jb2wgVGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcjsKKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKKworY2xhc3MgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmRE
aXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVy
IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBPYmpDSW5zcGVj
dG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFu
ZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQorICAgIHZvaWQgQ29tbWFu
ZChsb25nIHJlcXVlc3RJZCkgZmluYWw7Citwcml2YXRlOgorICAgIFJldGFpblB0cjxpZDxUZXN0
UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNw
YXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hl
cnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudC10YXJnZXRUeXBl
LW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVz
dFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xJ
bnRlcm5hbC5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2lu
Y2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit2b2lk
IE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVl
c3RJZCkKK3sKKyAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0
b3IoQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgeworICAgICAg
ICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFj
a2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi5Db21tYW5kJyB3YXMgbm90
IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJv
cnMoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBe
KE5TU3RyaW5nICplcnJvcikgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQ
cm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBl
cnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7
CisgICAgfTsKKworICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57CisgICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRl
KCksIGZhbHNlKTsKKyAgICB9OworCisgICAgW21fZGVsZWdhdGUgQ29tbWFuZFdpdGhFcnJvckNh
bGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107Cit9
CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bEJhY2tlbmREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29u
ZmlndXJhdGlvbi5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnQtdGFy
Z2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgorLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDx3dGYvUGxhdGZvcm0uaD4K
KworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgorCitfX2F0dHJpYnV0ZV9f
KCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbiA6IE5TT2JqZWN0CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluLCBzZXR0ZXI9
c2V0RG9tYWluSGFuZGxlcjopIGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IGRv
bWFpbkhhbmRsZXI7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFRlc3RQcm90b2Nv
bERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqZG9tYWluRXZlbnREaXNwYXRjaGVyOworQGVu
ZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdn
YWJsZVR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCisKKyNpbXBvcnQgIlRlc3RQ
cm90b2NvbEludGVybmFsLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hl
cnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50
Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xs
ZXIuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmRE
aXNwYXRjaGVycy5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXJzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRh
dGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCit7CisgICAgQXVnbWVudGFibGVJbnNwZWN0
b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKKyAgICBpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21h
aW5IYW5kbGVyPiBfZG9tYWluSGFuZGxlcjsKKyAgICBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5F
dmVudERpc3BhdGNoZXIgKl9kb21haW5FdmVudERpc3BhdGNoZXI7Cit9CisKKy0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciop
Y29udHJvbGxlcgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQor
ICAgICAgICByZXR1cm4gbmlsOworICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBfY29udHJv
bGxlciA9IGNvbnRyb2xsZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxv
YworeworICAgIFtfZG9tYWluSGFuZGxlciByZWxlYXNlXTsKKyAgICBbX2RvbWFpbkV2ZW50RGlz
cGF0Y2hlciByZWxlYXNlXTsKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0gKHZvaWQpc2V0
RG9tYWluSGFuZGxlcjooaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4paGFuZGxl
cgoreworICAgIGlmIChoYW5kbGVyID09IF9kb21haW5IYW5kbGVyKQorICAgICAgICByZXR1cm47
CisKKyAgICBbX2RvbWFpbkhhbmRsZXIgcmVsZWFzZV07CisgICAgX2RvbWFpbkhhbmRsZXIgPSBb
aGFuZGxlciByZXRhaW5dOworCisgICAgYXV0byBhbHRlcm5hdGVEaXNwYXRjaGVyID0gbWFrZVVu
aXF1ZTxPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXI+KGhhbmRsZXIpOworICAg
IGF1dG8gYWx0ZXJuYXRlQWdlbnQgPSBtYWtlVW5pcXVlPEFsdGVybmF0ZURpc3BhdGNoYWJsZUFn
ZW50PERvbWFpbkJhY2tlbmREaXNwYXRjaGVyLCBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0
Y2hlcj4+KCJEb21haW4iX3MsICpfY29udHJvbGxlciwgV1RGTW92ZShhbHRlcm5hdGVEaXNwYXRj
aGVyKSk7CisgICAgX2NvbnRyb2xsZXItPmFwcGVuZEV4dHJhQWdlbnQoV1RGTW92ZShhbHRlcm5h
dGVBZ2VudCkpOworfQorCistIChpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPilk
b21haW5IYW5kbGVyCit7CisgICAgcmV0dXJuIF9kb21haW5IYW5kbGVyOworfQorCistIChUZXN0
UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKilkb21haW5FdmVudERpc3BhdGNo
ZXIKK3sKKyAgICBpZiAoIV9kb21haW5FdmVudERpc3BhdGNoZXIpCisgICAgICAgIF9kb21haW5F
dmVudERpc3BhdGNoZXIgPSBbW1Rlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hl
ciBhbGxvY10gaW5pdFdpdGhDb250cm9sbGVyOl9jb250cm9sbGVyXTsKKyAgICByZXR1cm4gX2Rv
bWFpbkV2ZW50RGlzcGF0Y2hlcjsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbi5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZl
bnREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50
LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29s
SW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisj
aW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwor
CitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVy
Cit7CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKK30K
KworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0
b3JDb250cm9sbGVyKiljb250cm9sbGVyCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAg
ICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNvbnRyb2xsZXIp
OworICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKKyAgICByZXR1cm4gc2VsZjsKK30KKwor
LSAodm9pZClFdmVudAoreworICAgIGNvbnN0IEZyb250ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29u
dHJvbGxlci0+ZnJvbnRlbmRSb3V0ZXIoKTsKKworICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25N
ZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0U3Ry
aW5nKCJtZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOworICAgIHJvdXRlci5zZW5kRXZlbnQo
anNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudC10YXJn
ZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRh
dGlvbi5oPgorI2ltcG9ydCA8d3RmL1BsYXRmb3JtLmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rv
ci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KKworCisKKworCisKKworCitAcHJvdG9jb2wgVGVz
dFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlciA8TlNPYmplY3Q+CitAb3B0aW9uYWwKKy0gKHZv
aWQpQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJy
b3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikodm9pZCkpc3VjY2Vzc0NhbGxiYWNr
OworQGVuZAorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRl
cmZhY2UgVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyIDogTlNPYmplY3QK
Ky0gKHZvaWQpRXZlbnQ7CitAZW5kCisKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3Rv
Y29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21h
aW4tZGVidWdnYWJsZVR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjaW1wb3J0IDx3dGYvUGxhdGZvcm0uaD4KKworI2ltcG9ydCAiVGVzdFByb3Rv
Y29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgorI2ltcG9y
dCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1w
b3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbERvbWFpbkRv
bWFpbkV2ZW50RGlzcGF0Y2hlciAoUHJpdmF0ZSkKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENv
bnRyb2xsZXI6KEluc3BlY3Rvcjo6QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250
cm9sbGVyOworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAor
CisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFp
bi1kZWJ1Z2dhYmxlVHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNpbXBvcnQgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaW1wb3J0ICJUZXN0UHJvdG9j
b2wuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMu
aD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVt
VHlwZT4KK09wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0
cmluZyYgdmFsdWUpOworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisj
aW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3Iv
UldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVj
dG9yOworCisKKworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4t
ZGVidWdnYWJsZVR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90
b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2lt
cG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKwor
CisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnRzLXdp
dGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9ldmVudHMtd2l0aC1vcHRpb25hbC1w
YXJhbWV0ZXJzLmpzb24tcmVzdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwLi4zM2ExNTQzYTQyMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9ldmVudHMtd2l0aC1vcHRpb25hbC1w
YXJhbWV0ZXJzLmpzb24tcmVzdWx0CkBAIC0wLDAgKzEsMTE5OCBAQAorIyMjIEJlZ2luIEZpbGU6
IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcy5pbgorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisvLyBEYXRhYmFzZQorSW5zcGVjdG9y
QmFja2VuZC5yZWdpc3RlckRvbWFpbigiRGF0YWJhc2UiLCBudWxsKTsKK0luc3BlY3RvckJhY2tl
bmQucmVnaXN0ZXJFdmVudCgiRGF0YWJhc2UuZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyIs
IG51bGwsIFsiY29sdW1uTmFtZXMiLCAibm90ZXMiLCAidGltZXN0YW1wIiwgInZhbHVlcyIsICJw
YXlsb2FkIiwgInNxbEVycm9yIiwgInNjcmVlbkNvbG9yIiwgImFsdGVybmF0ZUNvbG9ycyIsICJw
cmludENvbG9yIl0pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckV2ZW50KCJEYXRhYmFzZS5k
aWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMiLCBudWxsLCBbImNvbHVtbk5hbWVzIiwgIm5v
dGVzIiwgInRpbWVzdGFtcCIsICJ2YWx1ZXMiLCAicGF5bG9hZCIsICJzcWxFcnJvciIsICJzY3Jl
ZW5Db2xvciIsICJhbHRlcm5hdGVDb2xvcnMiLCAicHJpbnRDb2xvciJdKTsKK0luc3BlY3RvckJh
Y2tlbmQucmVnaXN0ZXJEYXRhYmFzZURpc3BhdGNoZXIgPSBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lz
dGVyRGlzcGF0Y2hlci5iaW5kKEluc3BlY3RvckJhY2tlbmQsICJEYXRhYmFzZSIpOworSW5zcGVj
dG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiRGF0YWJhc2UiLCBudWxsKTsKKyMjIyBFbmQgRmls
ZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzLmluCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0
QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
IDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0
b3IgeworCitjbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAg
dm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlz
cGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQor
ICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJu
IG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KK3ByaXZhdGU6CisgICAgUmVmUHRyPEJhY2tl
bmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOworfTsKKworCisKKworfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKKyMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVy
cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJz
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2luY2x1ZGUgIlRlc3RQcm90
b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKKworCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVy
cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRl
cnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNs
dWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQorI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0
Y2hlcnMuaCIKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVn
aW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5o
IgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBGcm9udGVuZFJvdXRlcjsK
KworY2xhc3MgRGF0YWJhc2VGcm9udGVuZERpc3BhdGNoZXIgeworICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOworcHVibGljOgorICAgIERhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyKEZyb250
ZW5kUm91dGVyJiBmcm9udGVuZFJvdXRlcikgOiBtX2Zyb250ZW5kUm91dGVyKGZyb250ZW5kUm91
dGVyKSB7IH0KKyAgICB2b2lkIGRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMoUmVmUHRyPEpT
T046OkFycmF5T2Y8U3RyaW5nPj4gY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyogbm90ZXMsIGNv
bnN0IGRvdWJsZSogdGltZXN0YW1wLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiB2YWx1ZXMsIFJlZlB0
cjxKU09OOjpWYWx1ZT4gcGF5bG9hZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFi
YXNlOjpFcnJvcj4gc3FsRXJyb3IsIGNvbnN0IFN0cmluZyogc2NyZWVuQ29sb3IsIFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiBhbHRlcm5hdGVDb2xvcnMs
IGNvbnN0IFN0cmluZyogcHJpbnRDb2xvcik7CisgICAgdm9pZCBkaWRFeGVjdXRlTm9PcHRpb25h
bFBhcmFtZXRlcnMoUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gY29sdW1uTmFtZXMsIGNv
bnN0IFN0cmluZyYgbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJlZlB0cjxKU09OOjpPYmplY3Q+
IHZhbHVlcywgUmVmUHRyPEpTT046OlZhbHVlPiBwYXlsb2FkLCBSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBzcWxFcnJvciwgY29uc3QgU3RyaW5nJiBzY3JlZW5D
b2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IGFs
dGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBwcmludENvbG9yKTsKK3ByaXZhdGU6CisgICAg
RnJvbnRlbmRSb3V0ZXImIG1fZnJvbnRlbmRSb3V0ZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMg
QmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit2b2lkIERhdGFiYXNl
RnJvbnRlbmREaXNwYXRjaGVyOjpkaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzKFJlZlB0cjxK
U09OOjpBcnJheU9mPFN0cmluZz4+IGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIG5vdGVzLCBj
b25zdCBkb3VibGUqIHRpbWVzdGFtcCwgUmVmUHRyPEpTT046Ok9iamVjdD4gdmFsdWVzLCBSZWZQ
dHI8SlNPTjo6VmFsdWU+IHBheWxvYWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6RXJyb3I+IHNxbEVycm9yLCBjb25zdCBTdHJpbmcqIHNjcmVlbkNvbG9yLCBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4gYWx0ZXJuYXRlQ29sb3Jz
LCBjb25zdCBTdHJpbmcqIHByaW50Q29sb3IpCit7CisgICAgUmVmPEpTT046Ok9iamVjdD4ganNv
bk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGpzb25NZXNzYWdlLT5zZXRT
dHJpbmcoIm1ldGhvZCJfcywgIkRhdGFiYXNlLmRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMi
X3MpOworICAgIFJlZjxKU09OOjpPYmplY3Q+IHBhcmFtc09iamVjdCA9IEpTT046Ok9iamVjdDo6
Y3JlYXRlKCk7CisgICAgaWYgKGNvbHVtbk5hbWVzKQorICAgICAgICBwYXJhbXNPYmplY3QtPnNl
dEFycmF5KCJjb2x1bW5OYW1lcyJfcywgY29sdW1uTmFtZXMpOworICAgIGlmIChub3RlcykKKyAg
ICAgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCAqbm90ZXMpOworICAgIGlm
ICh0aW1lc3RhbXApCisgICAgICAgIHBhcmFtc09iamVjdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAi
X3MsICp0aW1lc3RhbXApOworICAgIGlmICh2YWx1ZXMpCisgICAgICAgIHBhcmFtc09iamVjdC0+
c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIHZhbHVlcyk7CisgICAgaWYgKHBheWxvYWQpCisgICAgICAg
IHBhcmFtc09iamVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsICpwYXlsb2FkKTsKKyAgICBpZiAo
c3FsRXJyb3IpCisgICAgICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywg
c3FsRXJyb3IpOworICAgIGlmIChzY3JlZW5Db2xvcikKKyAgICAgICAgcGFyYW1zT2JqZWN0LT5z
ZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCAqc2NyZWVuQ29sb3IpOworICAgIGlmIChhbHRlcm5h
dGVDb2xvcnMpCisgICAgICAgIHBhcmFtc09iamVjdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9y
cyJfcywgYWx0ZXJuYXRlQ29sb3JzKTsKKyAgICBpZiAocHJpbnRDb2xvcikKKyAgICAgICAgcGFy
YW1zT2JqZWN0LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsICpwcmludENvbG9yKTsKKyAgICBq
c29uTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiX3MsIFdURk1vdmUocGFyYW1zT2JqZWN0KSk7
CisKKyAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3Ry
aW5nKCkpOworfQorCit2b2lkIERhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyOjpkaWRFeGVjdXRl
Tm9PcHRpb25hbFBhcmFtZXRlcnMoUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gY29sdW1u
TmFtZXMsIGNvbnN0IFN0cmluZyYgbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJlZlB0cjxKU09O
OjpPYmplY3Q+IHZhbHVlcywgUmVmUHRyPEpTT046OlZhbHVlPiBwYXlsb2FkLCBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBzcWxFcnJvciwgY29uc3QgU3RyaW5n
JiBzY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xv
ckxpc3Q+IGFsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBwcmludENvbG9yKQoreworICAg
IFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
KyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEYXRhYmFzZS5kaWRFeGVj
dXRlTm9PcHRpb25hbFBhcmFtZXRlcnMiX3MpOworICAgIFJlZjxKU09OOjpPYmplY3Q+IHBhcmFt
c09iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgcGFyYW1zT2JqZWN0LT5zZXRB
cnJheSgiY29sdW1uTmFtZXMiX3MsIGNvbHVtbk5hbWVzKTsKKyAgICBwYXJhbXNPYmplY3QtPnNl
dFN0cmluZygibm90ZXMiX3MsIG5vdGVzKTsKKyAgICBwYXJhbXNPYmplY3QtPnNldERvdWJsZSgi
dGltZXN0YW1wIl9zLCB0aW1lc3RhbXApOworICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJ2
YWx1ZXMiX3MsIHZhbHVlcyk7CisgICAgcGFyYW1zT2JqZWN0LT5zZXRWYWx1ZSgicGF5bG9hZCJf
cywgcGF5bG9hZCk7CisgICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBz
cWxFcnJvcik7CisgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCBz
Y3JlZW5Db2xvcik7CisgICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3Jz
Il9zLCBhbHRlcm5hdGVDb2xvcnMpOworICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJwcmlu
dENvbG9yIl9zLCBwcmludENvbG9yKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJh
bXMiX3MsIFdURk1vdmUocGFyYW1zT2JqZWN0KSk7CisKKyAgICBtX2Zyb250ZW5kUm91dGVyLnNl
bmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAK
KworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisK
K25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworCisK
Ky8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgorbmFtZXNwYWNlIERhdGFiYXNlIHsKK2NsYXNzIEVy
cm9yOworfSAvLyBEYXRhYmFzZQorLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgorCisK
Ky8vIFR5cGVkZWZzLgorbmFtZXNwYWNlIERhdGFiYXNlIHsKKy8qIFVuaXF1ZSBpZGVudGlmaWVy
IG9mIERhdGFiYXNlIG9iamVjdC4gKi8KK3R5cGVkZWYgU3RyaW5nIERhdGFiYXNlSWQ7Cit0eXBl
ZGVmIFN0cmluZyBQcmltYXJ5Q29sb3JzOwordHlwZWRlZiBKU09OOjpBcnJheU9mPFN0cmluZz4g
Q29sb3JMaXN0OworfSAvLyBEYXRhYmFzZQorLy8gRW5kIG9mIHR5cGVkZWZzLgorCituYW1lc3Bh
Y2UgRGF0YWJhc2UgeworCisvKiBEYXRhYmFzZSBlcnJvci4gKi8KK2NsYXNzIEVycm9yIDogcHVi
bGljIEpTT046Ok9iamVjdEJhc2UgeworcHVibGljOgorICAgIGVudW0geworICAgICAgICBOb0Zp
ZWxkc1NldCA9IDAsCisgICAgICAgIE1lc3NhZ2VTZXQgPSAxIDw8IDAsCisgICAgICAgIENvZGVT
ZXQgPSAxIDw8IDEsCisgICAgICAgIEFsbEZpZWxkc1NldCA9IChNZXNzYWdlU2V0IHwgQ29kZVNl
dCkKKyAgICB9OworCisgICAgdGVtcGxhdGU8aW50IFNUQVRFPgorICAgIGNsYXNzIEJ1aWxkZXIg
eworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVzdWx0Owor
CisgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RT
dGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxC
dWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxk
ZXIoUmVmPC8qRXJyb3IqL0pTT046Ok9iamVjdD4mJiBvYmplY3QpCisgICAgICAgICAgICA6IG1f
cmVzdWx0KFdURk1vdmUob2JqZWN0KSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9z
dGF0ZSk7CisgICAgICAgIH0KKyAgICAgICAgZnJpZW5kIGNsYXNzIEVycm9yOworICAgIHB1Ymxp
YzoKKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTWVzc2FnZVNldD4mIHNldE1lc3NhZ2UoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
IShTVEFURSAmIE1lc3NhZ2VTZXQpLCBwcm9wZXJ0eV9tZXNzYWdlX2FscmVhZHlfc2V0KTsKKyAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1lc3NhZ2UiX3MsIHZhbHVlKTsKKyAgICAg
ICAgICAgIHJldHVybiBjYXN0U3RhdGU8TWVzc2FnZVNldD4oKTsKKyAgICAgICAgfQorCisgICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2RlU2V0PiYgc2V0Q29kZShpbnQgdmFsdWUpCisgICAgICAg
IHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2RlU2V0KSwgcHJvcGVy
dHlfY29kZV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcigi
Y29kZSJfcywgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb2RlU2V0Pigp
OworICAgICAgICB9CisKKyAgICAgICAgUmVmPEVycm9yPiByZWxlYXNlKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRf
aXNfbm90X3JlYWR5KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihFcnJvcikg
PT0gc2l6ZW9mKEpTT046Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsKKworICAgICAgICAgICAgUmVm
PEpTT046Ok9iamVjdD4ganNvblJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7Cisg
ICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPEVy
cm9yPio+KCZqc29uUmVzdWx0KSk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAg
ICB9CisgICAgfTsKKworICAgIC8qCisgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgorICAg
ICAqIFJlZjxFcnJvcj4gcmVzdWx0ID0gRXJyb3I6OmNyZWF0ZSgpCisgICAgICogICAgIC5zZXRN
ZXNzYWdlKC4uLikKKyAgICAgKiAgICAgLnNldENvZGUoLi4uKQorICAgICAqICAgICAucmVsZWFz
ZSgpOworICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6
Y3JlYXRlKCkpOworICAgIH0KK307CisKK30gLy8gRGF0YWJhc2UKKworCisKK30gLy8gbmFtZXNw
YWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xPYmplY3RzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVj
dHMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0
aW9uYWwtcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmpl
Y3RzLmgiCisKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCituYW1lc3BhY2UgUHJvdG9jb2wg
eworCisKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPHd0Zi9Q
bGF0Zm9ybS5oPgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRl
QmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCisKKwor
bmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25m
aWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5j
bHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorCituYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8d3RmL1BsYXRmb3JtLmg+CisKKyNp
bXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KKworX19hdHRyaWJ1dGVfXygodmlz
aWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRp
b24gOiBOU09iamVjdAorQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBUZXN0UHJvdG9j
b2xEYXRhYmFzZURvbWFpbkV2ZW50RGlzcGF0Y2hlciAqZGF0YWJhc2VFdmVudERpc3BhdGNoZXI7
CitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKwor
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAi
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRl
cm5hbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisjaW1w
b3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgorI2ltcG9y
dCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1w
b3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMu
aD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5o
PgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxl
ciogX2NvbnRyb2xsZXI7CisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5FdmVudERpc3Bh
dGNoZXIgKl9kYXRhYmFzZUV2ZW50RGlzcGF0Y2hlcjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9s
bGVyCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAg
IHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250cm9sbGVyID0g
Y29udHJvbGxlcjsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7Cisg
ICAgW19kYXRhYmFzZUV2ZW50RGlzcGF0Y2hlciByZWxlYXNlXTsKKyAgICBbc3VwZXIgZGVhbGxv
Y107Cit9CisKKy0gKFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluRXZlbnREaXNwYXRjaGVyICop
ZGF0YWJhc2VFdmVudERpc3BhdGNoZXIKK3sKKyAgICBpZiAoIV9kYXRhYmFzZUV2ZW50RGlzcGF0
Y2hlcikKKyAgICAgICAgX2RhdGFiYXNlRXZlbnREaXNwYXRjaGVyID0gW1tUZXN0UHJvdG9jb2xE
YXRhYmFzZURvbWFpbkV2ZW50RGlzcGF0Y2hlciBhbGxvY10gaW5pdFdpdGhDb250cm9sbGVyOl9j
b250cm9sbGVyXTsKKyAgICByZXR1cm4gX2RhdGFiYXNlRXZlbnREaXNwYXRjaGVyOworfQorCitA
ZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisKKyMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5q
c29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5oIgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNl
IEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWlu
RXZlbnREaXNwYXRjaGVyCit7CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBf
Y29udHJvbGxlcjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVn
bWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCit7CisgICAgc2VsZiA9IFtz
dXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgQVNT
RVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKKyAgICByZXR1
cm4gc2VsZjsKK30KKworLSAodm9pZClkaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzV2l0aENv
bHVtbk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopY29sdW1uTmFtZXMgbm90ZXM6KE5T
U3RyaW5nICoqKW5vdGVzIHRpbWVzdGFtcDooZG91YmxlICopdGltZXN0YW1wIHZhbHVlczooUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICoqKXZhbHVlcyBwYXlsb2FkOihSV0lQcm90b2NvbEpTT05PYmpl
Y3QgKiopcGF5bG9hZCBzcWxFcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKilzcWxF
cnJvciBzY3JlZW5Db2xvcjooTlNTdHJpbmcgKiopc2NyZWVuQ29sb3IgYWx0ZXJuYXRlQ29sb3Jz
OihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopYWx0ZXJuYXRlQ29sb3JzIHByaW50Q29sb3I6KE5T
U3RyaW5nICoqKXByaW50Q29sb3IKK3sKKyAgICBjb25zdCBGcm9udGVuZFJvdXRlciYgcm91dGVy
ID0gX2NvbnRyb2xsZXItPmZyb250ZW5kUm91dGVyKCk7CisKKyAgICBUSFJPV19FWENFUFRJT05f
Rk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoY29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsK
KyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIobm90ZXMsIEAi
bm90ZXMiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIo
dmFsdWVzLCBAInZhbHVlcyIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFM
X1BBUkFNRVRFUihwYXlsb2FkLCBAInBheWxvYWQiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9S
X0JBRF9PUFRJT05BTF9QQVJBTUVURVIoc3FsRXJyb3IsIEAic3FsRXJyb3IiKTsKKyAgICBUSFJP
V19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoc2NyZWVuQ29sb3IsIEAic2Ny
ZWVuQ29sb3IiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVU
RVIoYWx0ZXJuYXRlQ29sb3JzLCBAImFsdGVybmF0ZUNvbG9ycyIpOworICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihwcmludENvbG9yLCBAInByaW50Q29sb3Ii
KTsKKworICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEYXRhYmFz
ZS5kaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzIl9zKTsKKyAgICBSZWY8SlNPTjo6T2JqZWN0
PiBwYXJhbXNPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGlmIChjb2x1bW5O
YW1lcykKKyAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIHRv
SlNPTlN0cmluZ0FycmF5KCgqY29sdW1uTmFtZXMpKSk7CisgICAgaWYgKG5vdGVzKQorICAgICAg
ICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygibm90ZXMiX3MsICgqbm90ZXMpKTsKKyAgICBpZiAo
dGltZXN0YW1wKQorICAgICAgICBwYXJhbXNPYmplY3QtPnNldERvdWJsZSgidGltZXN0YW1wIl9z
LCAoKnRpbWVzdGFtcCkpOworICAgIGlmICh2YWx1ZXMpCisgICAgICAgIHBhcmFtc09iamVjdC0+
c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFsoKnZhbHVlcykgdG9KU09OT2JqZWN0XSk7CisgICAgaWYg
KHBheWxvYWQpCisgICAgICAgIHBhcmFtc09iamVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFso
KnBheWxvYWQpIHRvSlNPTk9iamVjdF0pOworICAgIGlmIChzcWxFcnJvcikKKyAgICAgICAgcGFy
YW1zT2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBbKCpzcWxFcnJvcikgdG9KU09OT2Jq
ZWN0XSk7CisgICAgaWYgKHNjcmVlbkNvbG9yKQorICAgICAgICBwYXJhbXNPYmplY3QtPnNldFN0
cmluZygic2NyZWVuQ29sb3IiX3MsICgqc2NyZWVuQ29sb3IpKTsKKyAgICBpZiAoYWx0ZXJuYXRl
Q29sb3JzKQorICAgICAgICBwYXJhbXNPYmplY3QtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMi
X3MsIHRvSlNPTlN0cmluZ0FycmF5KCgqYWx0ZXJuYXRlQ29sb3JzKSkpOworICAgIGlmIChwcmlu
dENvbG9yKQorICAgICAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywg
KCpwcmludENvbG9yKSk7CisgICAganNvbk1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIl9zLCBX
VEZNb3ZlKHBhcmFtc09iamVjdCkpOworICAgIHJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2Ut
PnRvSlNPTlN0cmluZygpKTsKK30KKworLSAodm9pZClkaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFt
ZXRlcnNXaXRoQ29sdW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWNvbHVtbk5hbWVz
IG5vdGVzOihOU1N0cmluZyAqKW5vdGVzIHRpbWVzdGFtcDooZG91YmxlKXRpbWVzdGFtcCB2YWx1
ZXM6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcyBwYXlsb2FkOihSV0lQcm90b2NvbEpT
T05PYmplY3QgKilwYXlsb2FkIHNxbEVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICop
c3FsRXJyb3Igc2NyZWVuQ29sb3I6KE5TU3RyaW5nICopc2NyZWVuQ29sb3IgYWx0ZXJuYXRlQ29s
b3JzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilhbHRlcm5hdGVDb2xvcnMgcHJpbnRDb2xvcjoo
TlNTdHJpbmcgKilwcmludENvbG9yCit7CisgICAgY29uc3QgRnJvbnRlbmRSb3V0ZXImIHJvdXRl
ciA9IF9jb250cm9sbGVyLT5mcm9udGVuZFJvdXRlcigpOworCisgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoY29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsKKyAg
ICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihub3RlcywgQCJub3RlcyIp
OworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHZhbHVlcywgQCJ2
YWx1ZXMiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihwYXls
b2FkLCBAInBheWxvYWQiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFN
RVRFUihzcWxFcnJvciwgQCJzcWxFcnJvciIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVR
VUlSRURfUEFSQU1FVEVSKHNjcmVlbkNvbG9yLCBAInNjcmVlbkNvbG9yIik7CisgICAgVEhST1df
RVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoYWx0ZXJuYXRlQ29sb3JzLCBAImFsdGVy
bmF0ZUNvbG9ycyIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVS
KHByaW50Q29sb3IsIEAicHJpbnRDb2xvciIpOworCisgICAgUmVmPEpTT046Ok9iamVjdD4ganNv
bk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGpzb25NZXNzYWdlLT5zZXRT
dHJpbmcoIm1ldGhvZCJfcywgIkRhdGFiYXNlLmRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVy
cyJfcyk7CisgICAgUmVmPEpTT046Ok9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKTsKKyAgICBwYXJhbXNPYmplY3QtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywg
dG9KU09OU3RyaW5nQXJyYXkoY29sdW1uTmFtZXMpKTsKKyAgICBwYXJhbXNPYmplY3QtPnNldFN0
cmluZygibm90ZXMiX3MsIG5vdGVzKTsKKyAgICBwYXJhbXNPYmplY3QtPnNldERvdWJsZSgidGlt
ZXN0YW1wIl9zLCB0aW1lc3RhbXApOworICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJ2YWx1
ZXMiX3MsIFt2YWx1ZXMgdG9KU09OT2JqZWN0XSk7CisgICAgcGFyYW1zT2JqZWN0LT5zZXRWYWx1
ZSgicGF5bG9hZCJfcywgW3BheWxvYWQgdG9KU09OT2JqZWN0XSk7CisgICAgcGFyYW1zT2JqZWN0
LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBbc3FsRXJyb3IgdG9KU09OT2JqZWN0XSk7CisgICAg
cGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCBzY3JlZW5Db2xvcik7Cisg
ICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCB0b0pTT05TdHJp
bmdBcnJheShhbHRlcm5hdGVDb2xvcnMpKTsKKyAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygi
cHJpbnRDb2xvciJfcywgcHJpbnRDb2xvcik7CisgICAganNvbk1lc3NhZ2UtPnNldE9iamVjdCgi
cGFyYW1zIl9zLCBXVEZNb3ZlKHBhcmFtc09iamVjdCkpOworICAgIHJvdXRlci5zZW5kRXZlbnQo
anNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0
aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisjaW1wb3J0
IDx3dGYvUGxhdGZvcm0uaD4KKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNP
Tk9iamVjdC5oPgorCisKK0BjbGFzcyBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yOworCisKKwor
X19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQ
cm90b2NvbERhdGFiYXNlRXJyb3IgOiBSV0lQcm90b2NvbEpTT05PYmplY3QKKy0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXls
b2FkOworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29s
SlNPTk9iamVjdCAqKWpzb25PYmplY3Q7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhNZXNzYWdl
OihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZTooaW50KWNvZGU7CisvKiByZXF1aXJlZCAqLyBAcHJv
cGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKm1lc3NhZ2U7CisvKiByZXF1aXJlZCAq
LyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQgY29kZTsKK0BlbmQKKworCisKK19f
YXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJv
dG9jb2xEYXRhYmFzZURvbWFpbkV2ZW50RGlzcGF0Y2hlciA6IE5TT2JqZWN0CistICh2b2lkKWRp
ZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnNXaXRoQ29sdW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0
cmluZz4qLyAqKiljb2x1bW5OYW1lcyBub3RlczooTlNTdHJpbmcgKiopbm90ZXMgdGltZXN0YW1w
Oihkb3VibGUgKil0aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKiopdmFs
dWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKilwYXlsb2FkIHNxbEVycm9yOihU
ZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqKXNxbEVycm9yIHNjcmVlbkNvbG9yOihOU1N0cmlu
ZyAqKilzY3JlZW5Db2xvciBhbHRlcm5hdGVDb2xvcnM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAq
KilhbHRlcm5hdGVDb2xvcnMgcHJpbnRDb2xvcjooTlNTdHJpbmcgKiopcHJpbnRDb2xvcjsKKy0g
KHZvaWQpZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzV2l0aENvbHVtbk5hbWVzOihOU0Fy
cmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcyBub3RlczooTlNTdHJpbmcgKilub3RlcyB0
aW1lc3RhbXA6KGRvdWJsZSl0aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3Qg
Kil2YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZCBzcWxFcnJv
cjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKXNxbEVycm9yIHNjcmVlbkNvbG9yOihOU1N0
cmluZyAqKXNjcmVlbkNvbG9yIGFsdGVybmF0ZUNvbG9yczooTlNBcnJheS8qPE5TU3RyaW5nPiov
ICopYWx0ZXJuYXRlQ29sb3JzIHByaW50Q29sb3I6KE5TU3RyaW5nICopcHJpbnRDb2xvcjsKK0Bl
bmQKKworCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxp
dHlPYmplY3RzLmg+CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8d3RmL1BsYXRmb3JtLmg+
CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9i
amVjdFByaXZhdGUuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVj
dG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKworQGludGVyZmFj
ZSBUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkV2ZW50RGlzcGF0Y2hlciAoUHJpdmF0ZSkKKy0g
KGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEluc3BlY3Rvcjo6QXVnbWVudGFibGVJ
bnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyOworQGVuZAorCisKKyMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sSW50ZXJuYWwuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMt
d2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8d3RmL1BsYXRmb3JtLmg+CisKKyNpbXBvcnQgIlRl
c3RQcm90b2NvbC5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252
ZXJzaW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordGVtcGxhdGU8dHlwZW5hbWUg
T2JqQ0VudW1UeXBlPgorT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmco
Y29uc3QgU3RyaW5nJiB2YWx1ZSk7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKwor
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorCisjIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBv
cnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQ
cm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7
CisKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChEYXRhYmFzZURvbWFp
bikKKworKyAodm9pZClfcGFyc2VEYXRhYmFzZUlkOihOU1N0cmluZyAqKilvdXRWYWx1ZSBmcm9t
UGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNlUHJpbWFyeUNvbG9yczooTlNTdHJp
bmcgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisrICh2b2lkKV9wYXJzZUNv
bG9yTGlzdDooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihp
ZClwYXlsb2FkOworKyAodm9pZClfcGFyc2VFcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJv
ciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKworQGVuZAorCitAaW1wbGVt
ZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChEYXRhYmFzZURvbWFpbikKKwor
KyAodm9pZClfcGFyc2VEYXRhYmFzZUlkOihOU1N0cmluZyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9h
ZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9h
ZCwgW05TU3RyaW5nIGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gKE5TU3RyaW5nICopcGF5bG9h
ZDsKK30KKworKyAodm9pZClfcGFyc2VQcmltYXJ5Q29sb3JzOihOU1N0cmluZyAqKilvdXRWYWx1
ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFE
X1RZUEUocGF5bG9hZCwgW05TU3RyaW5nIGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gKE5TU3Ry
aW5nICopcGF5bG9hZDsKK30KKworKyAodm9pZClfcGFyc2VDb2xvckxpc3Q6KE5TQXJyYXkvKjxO
U1N0cmluZz4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TQXJyYXkvKjxOU1N0cmluZz4q
LyBjbGFzc10pOworICAgICpvdXRWYWx1ZSA9IChOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilwYXls
b2FkOworfQorCisrICh2b2lkKV9wYXJzZUVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9y
ICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7CisgICAgKm91
dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGFsbG9jXSBpbml0V2l0aFBheWxv
YWQ6cGF5bG9hZF07Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0K
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1w
YXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xK
U09OT2JqZWN0UHJpdmF0ZS5oPgorI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbXBvcnQg
PHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBs
ZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yCisKKy0gKGluc3RhbmNldHlwZSlp
bml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBh
eWxvYWQKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJu
IG5pbDsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9h
ZFtAIm1lc3NhZ2UiXSwgQCJtZXNzYWdlIik7CisgICAgc2VsZi5tZXNzYWdlID0gcGF5bG9hZFtA
Im1lc3NhZ2UiXTsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFko
cGF5bG9hZFtAImNvZGUiXSwgQCJjb2RlIik7CisgICAgc2VsZi5jb2RlID0gW3BheWxvYWRbQCJj
b2RlIl0gaW50ZWdlclZhbHVlXTsKKworICAgIHJldHVybiBzZWxmOworfQorLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9iamVj
dAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmplY3Qg
dG9KU09OT2JqZWN0XS5nZXQoKV0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgcmV0dXJu
IHNlbGY7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICop
bWVzc2FnZSBjb2RlOihpbnQpY29kZQoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0p
KQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJF
RF9QUk9QRVJUWShtZXNzYWdlLCBAIm1lc3NhZ2UiKTsKKworICAgIHNlbGYubWVzc2FnZSA9IG1l
c3NhZ2U7CisgICAgc2VsZi5jb2RlID0gY29kZTsKKworICAgIHJldHVybiBzZWxmOworfQorCist
ICh2b2lkKXNldE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZQoreworICAgIFtzdXBlciBzZXRT
dHJpbmc6bWVzc2FnZSBmb3JLZXk6QCJtZXNzYWdlIl07Cit9CisKKy0gKE5TU3RyaW5nICopbWVz
c2FnZQoreworICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAibWVzc2FnZSJdOworfQor
CistICh2b2lkKXNldENvZGU6KGludCljb2RlCit7CisgICAgW3N1cGVyIHNldEludGVnZXI6Y29k
ZSBmb3JLZXk6QCJjb2RlIl07Cit9CisKKy0gKGludCljb2RlCit7CisgICAgcmV0dXJuIFtzdXBl
ciBpbnRlZ2VyRm9yS2V5OkAiY29kZSJdOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tY29tbWFuZC10YXJnZXRUeXBl
LW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLWVycm9yIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tY29tbWFu
ZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLWVycm9yCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hMTMwYWQ3MGM0MAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9leHBlY3RlZC9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVi
dWdnYWJsZVR5cGUuanNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjogTWFsZm9ybWVkIGRv
bWFpbiBzcGVjaWZpY2F0aW9uOiBkb21haW4gRG9tYWluIGhhcyBhbiBpdGVtIGluIHRhcmdldFR5
cGVzICJbdSd3b3JrZXInXSIgdGhhdCBpcyBub3Qgc3VwcG9ydGVkIGJ5IGFueSB2YWx1ZSBpbiBk
ZWJ1Z2dhYmxlVHlwZXMgIlt1J2phdmFzY3JpcHQnXSIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1jb21t
YW5kLXRhcmdldFR5cGVzLXR5cGUuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlw
ZXMtdHlwZS5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
Li45OWY1ZTFhNGE4ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlw
ZXMtdHlwZS5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBNYWxmb3JtZWQgZG9tYWlu
IHNwZWNpZmljYXRpb246IHRhcmdldFR5cGVzIGxpc3QgZm9yIGNvbW1hbmQgUGFnZU9ubHkgaXMg
bm90IGFuIGFycmF5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1jb21tYW5kLXRhcmdldFR5cGVzLXZhbHVl
Lmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZXhwZWN0ZWQvZmFpbC1vbi1jb21tYW5kLXRhcmdldFR5cGVzLXZhbHVlLmpzb24tZXJyb3IK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjIxYTM2NTY5OTI2Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V4cGVjdGVkL2ZhaWwtb24tY29tbWFuZC10YXJnZXRUeXBlcy12YWx1ZS5qc29uLWVycm9y
CkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBNYWxmb3JtZWQgZG9tYWluIHNwZWNpZmljYXRpb246IHRh
cmdldFR5cGVzIGxpc3QgZm9yIGNvbW1hbmQgUGFnZU9ubHkgaXMgYW4gdW5zdXBwb3J0ZWQgc3Ry
aW5nLiBXYXM6ICJbdSdwYWdlZSddIiwgQWxsb3dlZCB2YWx1ZXM6IHNlcnZpY2Utd29ya2VyLCBq
YXZhc2NyaXB0LCB3b3JrZXIsIHBhZ2UsIHdlYi1wYWdlCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kb21h
aW4tZGVidWdnYWJsZVR5cGVzLXR5cGUuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWRvbWFpbi1kZWJ1Z2dh
YmxlVHlwZXMtdHlwZS5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwLi4yYjg5OGJhN2JlNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWRvbWFpbi1kZWJ1
Z2dhYmxlVHlwZXMtdHlwZS5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBNYWxmb3Jt
ZWQgZG9tYWluIHNwZWNpZmljYXRpb246IGRlYnVnZ2FibGVUeXBlcyBmb3IgZG9tYWluIFdlYk9u
bHkgaXMgbm90IGFuIGFycmF5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4tZGVidWdnYWJsZVR5
cGVzLXZhbHVlLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4tZGVidWdnYWJsZVR5cGVzLXZhbHVl
Lmpzb24tZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmJmNzFk
NDcwY2JkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZG9tYWluLWRlYnVnZ2FibGVUeXBlcy12
YWx1ZS5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBNYWxmb3JtZWQgZG9tYWluIHNw
ZWNpZmljYXRpb246IGRlYnVnZ2FibGVUeXBlcyBmb3IgZG9tYWluIFdlYk9ubHkgaXMgYW4gdW5z
dXBwb3J0ZWQgc3RyaW5nLiBXYXM6ICJbdSd3ZWJiJ10iLCBBbGxvd2VkIHZhbHVlczogc2Vydmlj
ZS13b3JrZXIsIGphdmFzY3JpcHQsIHBhZ2UsIHdlYi1wYWdlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1k
b21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1lcnJv
ciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC9mYWlsLW9uLWRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlw
ZS5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44Njdl
MzUwMDg5OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWRvbWFpbi10YXJnZXRUeXBlLW1hdGNo
aW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9S
OiBNYWxmb3JtZWQgZG9tYWluIHNwZWNpZmljYXRpb246IGNvbW1hbmQgQ29tbWFuZCBoYXMgYW4g
aXRlbSBpbiB0YXJnZXRUeXBlcyAiW3Und29ya2VyJ10iIHRoYXQgaXMgbm90IHN1cHBvcnRlZCBi
eSBhbnkgdmFsdWUgaW4gZGVidWdnYWJsZVR5cGVzICJbdSdqYXZhc2NyaXB0J10iLgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVj
dGVkL2ZhaWwtb24tZG9tYWluLXRhcmdldFR5cGVzLXR5cGUuanNvbi1lcnJvciBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWRv
bWFpbi10YXJnZXRUeXBlcy10eXBlLmpzb24tZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAuLmU5YTM1OTMzYTM1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZG9t
YWluLXRhcmdldFR5cGVzLXR5cGUuanNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjogTWFs
Zm9ybWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9uOiB0YXJnZXRUeXBlcyBmb3IgZG9tYWluIFBhZ2VP
bmx5IGlzIG5vdCBhbiBhcnJheQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZG9tYWluLXRhcmdldFR5cGVz
LXZhbHVlLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZXMtdmFsdWUuanNvbi1l
cnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNDY4MDdmNzJmYzQK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZXMtdmFsdWUuanNvbi1l
cnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjogTWFsZm9ybWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9u
OiB0YXJnZXRUeXBlcyBmb3IgZG9tYWluIFBhZ2VPbmx5IGlzIGFuIHVuc3VwcG9ydGVkIHN0cmlu
Zy4gV2FzOiAiW3UncGFnZWUnXSIsIEFsbG93ZWQgdmFsdWVzOiBzZXJ2aWNlLXdvcmtlciwgamF2
YXNjcmlwdCwgd29ya2VyLCBwYWdlLCB3ZWItcGFnZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGlj
YXRlLWNvbW1hbmQtY2FsbC1wYXJhbWV0ZXItbmFtZXMuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWR1cGxp
Y2F0ZS1jb21tYW5kLWNhbGwtcGFyYW1ldGVyLW5hbWVzLmpzb24tZXJyb3IKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjNmNzU2ZGUzMjUwCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVk
L2ZhaWwtb24tZHVwbGljYXRlLWNvbW1hbmQtY2FsbC1wYXJhbWV0ZXItbmFtZXMuanNvbi1lcnJv
cgpAQCAtMCwwICsxIEBACitFUlJPUjogTWFsZm9ybWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9uOiBj
YWxsIHBhcmFtZXRlciBsaXN0IGZvciBjb21tYW5kIHByb2Nlc3NQb2ludHMgaGFzIGR1cGxpY2F0
ZSBwYXJhbWV0ZXIgbmFtZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS1jb21tYW5kLXJl
dHVybi1wYXJhbWV0ZXItbmFtZXMuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS1jb21tYW5k
LXJldHVybi1wYXJhbWV0ZXItbmFtZXMuanNvbi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMC4uZWExNDhmZjY3YzkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1k
dXBsaWNhdGUtY29tbWFuZC1yZXR1cm4tcGFyYW1ldGVyLW5hbWVzLmpzb24tZXJyb3IKQEAgLTAs
MCArMSBAQAorRVJST1I6IE1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjogcmV0dXJuIHBh
cmFtZXRlciBsaXN0IGZvciBjb21tYW5kIHByb2Nlc3NQb2ludHMgaGFzIGR1cGxpY2F0ZSBwYXJh
bWV0ZXIgbmFtZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS1ldmVudC1wYXJhbWV0ZXIt
bmFtZXMuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS1ldmVudC1wYXJhbWV0ZXItbmFtZXMu
anNvbi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYzcxYmJk
MjFjMmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtZXZlbnQtcGFyYW1ldGVy
LW5hbWVzLmpzb24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6IE1hbGZvcm1lZCBkb21haW4g
c3BlY2lmaWNhdGlvbjogcGFyYW1ldGVyIGxpc3QgZm9yIGV2ZW50IHByb2Nlc3NlZFBvaW50cyBo
YXMgZHVwbGljYXRlIHBhcmFtZXRlciBuYW1lcwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRl
LXR5cGUtZGVjbGFyYXRpb25zLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1kZWNs
YXJhdGlvbnMuanNvbi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MC4uNDQ3Y2RmOGUyOGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1k
ZWNsYXJhdGlvbnMuanNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjogRHVwbGljYXRlIHR5
cGUgZGVjbGFyYXRpb246IFJ1bnRpbWUuUmVtb3RlT2JqZWN0SWQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9u
LWR1cGxpY2F0ZS10eXBlLW1lbWJlci1uYW1lcy5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRl
LXR5cGUtbWVtYmVyLW5hbWVzLmpzb24tZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAuLmQ1Mzc2YTc3YTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGlj
YXRlLXR5cGUtbWVtYmVyLW5hbWVzLmpzb24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6IE1h
bGZvcm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjogdHlwZSBkZWNsYXJhdGlvbiBmb3IgUG9pbnQg
aGFzIGR1cGxpY2F0ZSBtZW1iZXIgbmFtZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWVudW0td2l0aC1u
by12YWx1ZXMuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWVudW0td2l0aC1uby12YWx1ZXMuanNvbi1lcnJv
cgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMjY1NWMyYjkwN2UKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1lbnVtLXdpdGgtbm8tdmFsdWVzLmpzb24tZXJyb3IKQEAg
LTAsMCArMSBAQAorRVJST1I6IFR5cGUgcmVmZXJlbmNlIHdpdGggZW51bSB2YWx1ZXMgbXVzdCBo
YXZlIGF0IGxlYXN0IG9uZSBlbnVtIHZhbHVlLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZXZlbnQtdGFy
Z2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1lcnJvciBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9u
LWV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tZXJy
b3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmI2NWQ3YTBkMTk2Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4t
ZGVidWdnYWJsZVR5cGUuanNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjogTWFsZm9ybWVk
IGRvbWFpbiBzcGVjaWZpY2F0aW9uOiBldmVudCBFdmVudCBoYXMgYW4gaXRlbSBpbiB0YXJnZXRU
eXBlcyAiW3Und29ya2VyJ10iIHRoYXQgaXMgbm90IHN1cHBvcnRlZCBieSBhbnkgdmFsdWUgaW4g
ZGVidWdnYWJsZVR5cGVzICJbdSdqYXZhc2NyaXB0J10iLgpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZXZl
bnQtdGFyZ2V0VHlwZXMtdHlwZS5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlwZXMt
dHlwZS5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi43
NDAzZTEzYTgwOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGVzLXR5
cGUuanNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjogTWFsZm9ybWVkIGRvbWFpbiBzcGVj
aWZpY2F0aW9uOiB0YXJnZXRUeXBlcyBmb3IgZXZlbnQgUGFnZU9ubHkgaXMgbm90IGFuIGFycmF5
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZXhwZWN0ZWQvZmFpbC1vbi1ldmVudC10YXJnZXRUeXBlcy12YWx1ZS5qc29uLWVycm9yIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2Zh
aWwtb24tZXZlbnQtdGFyZ2V0VHlwZXMtdmFsdWUuanNvbi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uODMwMTJhOWZlNGUKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFp
bC1vbi1ldmVudC10YXJnZXRUeXBlcy12YWx1ZS5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VS
Uk9SOiBNYWxmb3JtZWQgZG9tYWluIHNwZWNpZmljYXRpb246IHRhcmdldFR5cGVzIGZvciBldmVu
dCBQYWdlT25seSBpcyBhbiB1bnN1cHBvcnRlZCBzdHJpbmcuIFdhczogIlt1J3BhZ2VlJ10iLCBB
bGxvd2VkIHZhbHVlczogc2VydmljZS13b3JrZXIsIGphdmFzY3JpcHQsIHdvcmtlciwgcGFnZSwg
d2ViLXBhZ2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRpb25hbC1wYXJhbWV0
ZXItZmxhZy5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tbnVtYmVyLXR5cGVkLW9wdGlvbmFsLXBhcmFtZXRl
ci1mbGFnLmpzb24tZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu
Ljk3YjJhZjBlNDdlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tbnVtYmVyLXR5cGVkLW9wdGlv
bmFsLXBhcmFtZXRlci1mbGFnLmpzb24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6IFRoZSAn
b3B0aW9uYWwnIGZsYWcgZm9yIGEgcGFyYW1ldGVyIG11c3QgYmUgYSBib29sZWFuIGxpdGVyYWwu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZXhwZWN0ZWQvZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNv
bi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29uLWVy
cm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44NmRmMzc1MGMxYQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJl
ci5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBUaGUgJ29wdGlvbmFsJyBmbGFnIGZv
ciBhIHR5cGUgbWVtYmVyIG11c3QgYmUgYSBib29sZWFuIGxpdGVyYWwuCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFp
bC1vbi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbi1lcnJvciBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWls
LW9uLXN0cmluZy10eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29uLWVycm9yCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45N2IyYWYwZTQ3ZQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC9mYWlsLW9uLXN0cmluZy10eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29u
LWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBUaGUgJ29wdGlvbmFsJyBmbGFnIGZvciBhIHBh
cmFtZXRlciBtdXN0IGJlIGEgYm9vbGVhbiBsaXRlcmFsLgpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tc3Ry
aW5nLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1zdHJpbmct
dHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNvbi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMC4uODZkZjM3NTBjMWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1v
bi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNvbi1lcnJvcgpAQCAtMCwwICsx
IEBACitFUlJPUjogVGhlICdvcHRpb25hbCcgZmxhZyBmb3IgYSB0eXBlIG1lbWJlciBtdXN0IGJl
IGEgYm9vbGVhbiBsaXRlcmFsLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS1kZWNsYXJhdGlvbi11
c2luZy10eXBlLXJlZmVyZW5jZS5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS1kZWNsYXJhdGlvbi11
c2luZy10eXBlLXJlZmVyZW5jZS5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwLi40MmY1NzUzYTQzOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXR5cGUt
ZGVjbGFyYXRpb24tdXNpbmctdHlwZS1yZWZlcmVuY2UuanNvbi1lcnJvcgpAQCAtMCwwICsxIEBA
CitFUlJPUjogVHlwZSByZWZlcmVuY2UgY2Fubm90IGhhdmUgYm90aCAndHlwZScgYW5kICckcmVm
JyBrZXlzLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS1yZWZlcmVuY2UtYXMtcHJpbWl0aXZlLXR5
cGUuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXR5cGUtcmVmZXJlbmNlLWFzLXByaW1pdGl2ZS10eXBlLmpz
b24tZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmQ3NmJjMWM3
NzczCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS1yZWZlcmVuY2UtYXMtcHJpbWl0aXZl
LXR5cGUuanNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjogVHlwZSByZWZlcmVuY2UgJ0Rh
dGFiYXNlSWQnIGlzIG5vdCBhIHByaW1pdGl2ZSB0eXBlLiBBbGxvd2VkIHZhbHVlczogaW50ZWdl
ciwgbnVtYmVyLCBzdHJpbmcsIGJvb2xlYW4sIGVudW0sIG9iamVjdCwgYXJyYXksIGFueQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4
cGVjdGVkL2ZhaWwtb24tdHlwZS13aXRoLWxvd2VyY2FzZS1uYW1lLmpzb24tZXJyb3IgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1v
bi10eXBlLXdpdGgtbG93ZXJjYXNlLW5hbWUuanNvbi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMC4uNGU0NjIyNTBjMGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1v
bi10eXBlLXdpdGgtbG93ZXJjYXNlLW5hbWUuanNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJP
UjogVHlwZXMgbXVzdCBiZWdpbiB3aXRoIGFuIHVwcGVyY2FzZSBjaGFyYWN0ZXIuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtZGVjbGFyYXRpb24uanNv
bi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1kZWNsYXJhdGlv
bi5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yZDM4
ZTY0Njc1ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2Ut
aW4tdHlwZS1kZWNsYXJhdGlvbi5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBUeXBl
IHJlZmVyZW5jZSAnZHJhZ29uJyBpcyBub3QgYSBwcmltaXRpdmUgdHlwZS4gQWxsb3dlZCB2YWx1
ZXM6IGludGVnZXIsIG51bWJlciwgc3RyaW5nLCBib29sZWFuLCBlbnVtLCBvYmplY3QsIGFycmF5
LCBhbnkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1t
ZW1iZXIuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1t
ZW1iZXIuanNvbi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u
ZmFmNjY3MmNiZWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJl
bmNlLWluLXR5cGUtbWVtYmVyLmpzb24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6IExvb2t1
cCBmYWlsZWQgZm9yIHR5cGUgcmVmZXJlbmNlOiBDb2xvciAocmVmZXJlbmNlZCBmcm9tIGRvbWFp
bjogRmFudGFzeSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC9nZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFy
ZHMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24t
cmVzdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kMDM3Yzc4Mjhi
NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC9nZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMu
anNvbi1yZXN1bHQKQEAgLTAsMCArMSwxMjAzIEBACisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9y
QmFja2VuZENvbW1hbmRzLmpzLmluCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
Z2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KKy8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworLy8gTmV0d29yazEKK0luc3BlY3RvckJhY2tl
bmQucmVnaXN0ZXJEb21haW4oIk5ldHdvcmsxIiwgbnVsbCk7CitJbnNwZWN0b3JCYWNrZW5kLnJl
Z2lzdGVyQ29tbWFuZCgiTmV0d29yazEubG9hZFJlc291cmNlIiwgbnVsbCwgW10sIFtdKTsKK0lu
c3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIk5ldHdvcmsxIiwgbnVsbCk7CisKKy8vIE5l
dHdvcmszCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJOZXR3b3JrMyIsIG51bGwp
OworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckV2ZW50KCJOZXR3b3JrMy5yZXNvdXJjZUxvYWRl
ZCIsIG51bGwsIFtdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJOZXR3b3JrM0Rpc3BhdGNo
ZXIgPSBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRGlzcGF0Y2hlci5iaW5kKEluc3BlY3RvckJh
Y2tlbmQsICJOZXR3b3JrMyIpOworSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiTmV0
d29yazMiLCBudWxsKTsKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpz
LmluCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgt
ZmVhdHVyZS1ndWFyZHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYg
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyNpbmNsdWRlICJUZXN0
UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRl
bmRSb3V0ZXIuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVy
KFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3Bh
dGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9CisgICAgQmFja2VuZERpc3BhdGNoZXIqIGJh
Y2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQo
KTsgfQorcHJpdmF0ZToKKyAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERp
c3BhdGNoZXI7Cit9OworCisKK2NsYXNzIEFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNo
ZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHZp
cnR1YWwgfkFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoKSB7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgY2FsbElkKSA9IDA7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQorIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJz
LmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1
YXJkcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpbmNsdWRlICJUZXN0
UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCisjaWYg
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCitjbGFzcyBBbHRlcm5hdGVO
ZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQorCitjbGFzcyBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZShFcnJvclN0cmlu
ZyYpID0gMDsKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5OZXR3b3JrMUJhY2tlbmREaXNwYXRj
aGVySGFuZGxlcigpOworfTsKKworY2xhc3MgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciBmaW5h
bCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAg
c3RhdGljIFJlZjxOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3Bh
dGNoZXImLCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIHZvaWQgZGlz
cGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2Jq
ZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOworcHJpdmF0ZToKKyAgICB2b2lkIGxvYWRSZXNvdXJjZShs
b25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyNpZiBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK3B1YmxpYzoKKyAgICB2b2lk
IHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hl
ciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5h
dGVEaXNwYXRjaGVyOyB9Citwcml2YXRlOgorICAgIEFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERp
c3BhdGNoZXIqIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciB7IG51bGxwdHIgfTsKKyNlbmRpZiAvLyBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK3ByaXZhdGU6CisgICAgTmV0
d29yazFCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYsIE5ldHdvcmsxQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIqIG1fYWdlbnQgeyBudWxscHRyIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
KyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxl
OiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFs
dWVzLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCisjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgorI2VuZGlm
IC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCituYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKKworTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5OZXR3b3Jr
MUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQorCitSZWY8TmV0d29yazFCYWNrZW5kRGlz
cGF0Y2hlcj4gTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEJhY2tlbmREaXNwYXRj
aGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIq
IGFnZW50KQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE5ldHdvcmsxQmFja2VuZERpc3Bh
dGNoZXIoYmFja2VuZERpc3BhdGNoZXIsIGFnZW50KSk7Cit9CisKK05ldHdvcmsxQmFja2VuZERp
c3BhdGNoZXI6Ok5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJh
Y2tlbmREaXNwYXRjaGVyLCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQp
CisgICAgOiBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikK
KyAgICAsIG1fYWdlbnQoYWdlbnQpCit7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0
ZXJEaXNwYXRjaGVyRm9yRG9tYWluKCJOZXR3b3JrMSJfcywgdGhpcyk7Cit9CisKK3ZvaWQgTmV0
d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0
cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCit7CisgICAgUmVmPE5l
dHdvcmsxQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOworCisgICAgUmVmUHRyPEpT
T046Ok9iamVjdD4gcGFyYW1ldGVyczsKKyAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJf
cywgcGFyYW1ldGVycyk7CisKKyAgICBpZiAobWV0aG9kID09ICJsb2FkUmVzb3VyY2UiKSB7Cisg
ICAgICAgIGxvYWRSZXNvdXJjZShyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJv
dG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazEu
IiArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKK30KKwordm9pZCBOZXR3b3JrMUJhY2tl
bmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpP
YmplY3Q+JiYpCit7CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
CisgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeworICAgICAgICBtX2FsdGVybmF0ZURp
c3BhdGNoZXItPmxvYWRSZXNvdXJjZShyZXF1ZXN0SWQpOworICAgICAgICByZXR1cm47CisgICAg
fQorI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCisg
ICAgRXJyb3JTdHJpbmcgZXJyb3I7CisgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2UoZXJyb3IpOwor
CisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+
c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7CisgICAgZWxz
ZQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tl
bmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOworfQorCit9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJz
LmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJl
LWd1YXJkcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2Ns
YXNzIEZyb250ZW5kUm91dGVyOworCitjbGFzcyBOZXR3b3JrM0Zyb250ZW5kRGlzcGF0Y2hlciB7
CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgTmV0d29yazNGcm9u
dGVuZERpc3BhdGNoZXIoRnJvbnRlbmRSb3V0ZXImIGZyb250ZW5kUm91dGVyKSA6IG1fZnJvbnRl
bmRSb3V0ZXIoZnJvbnRlbmRSb3V0ZXIpIHsgfQorICAgIHZvaWQgcmVzb3VyY2VMb2FkZWQoKTsK
K3ByaXZhdGU6CisgICAgRnJvbnRlbmRSb3V0ZXImIG1fZnJvbnRlbmRSb3V0ZXI7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0
Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZl
YXR1cmUtZ3VhcmRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNo
ZXJzLmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRl
ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CisKK3ZvaWQgTmV0d29yazNGcm9udGVuZERpc3BhdGNoZXI6OnJlc291cmNlTG9hZGVkKCkK
K3sKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7CisgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiTmV0d29yazMu
cmVzb3VyY2VMb2FkZWQiX3MpOworCisgICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQoanNv
bk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
CisKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yUHJvdG9jb2xUeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVz
cGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworCisKKy8vIEZv
cndhcmQgZGVjbGFyYXRpb25zLgorbmFtZXNwYWNlIE5ldHdvcmsyIHsKK2NsYXNzIE5ldHdvcmtF
cnJvcjsKK30gLy8gTmV0d29yazIKKy8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KKwor
CisKKworbmFtZXNwYWNlIE5ldHdvcmsyIHsKKworY2xhc3MgTmV0d29ya0Vycm9yIDogcHVibGlj
IEpTT046Ok9iamVjdEJhc2UgeworcHVibGljOgorICAgIGVudW0geworICAgICAgICBOb0ZpZWxk
c1NldCA9IDAsCisgICAgICAgIE1lc3NhZ2VTZXQgPSAxIDw8IDAsCisgICAgICAgIENvZGVTZXQg
PSAxIDw8IDEsCisgICAgICAgIEFsbEZpZWxkc1NldCA9IChNZXNzYWdlU2V0IHwgQ29kZVNldCkK
KyAgICB9OworCisgICAgdGVtcGxhdGU8aW50IFNUQVRFPgorICAgIGNsYXNzIEJ1aWxkZXIgewor
ICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVzdWx0OworCisg
ICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0
ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWls
ZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXIo
UmVmPC8qTmV0d29ya0Vycm9yKi9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQorICAgICAgICAgICAg
OiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2lu
aXRfc3RhdGUpOworICAgICAgICB9CisgICAgICAgIGZyaWVuZCBjbGFzcyBOZXR3b3JrRXJyb3I7
CisgICAgcHVibGljOgorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNZXNzYWdlU2V0PiYgc2V0
TWVzc2FnZShjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVCghKFNUQVRFICYgTWVzc2FnZVNldCksIHByb3BlcnR5X21lc3NhZ2VfYWxyZWFk
eV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibWVzc2FnZSJfcywgdmFs
dWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNZXNzYWdlU2V0PigpOworICAgICAg
ICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvZGVTZXQ+JiBzZXRDb2RlKGludCB2YWx1
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENvZGVT
ZXQpLCBwcm9wZXJ0eV9jb2RlX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXRJbnRlZ2VyKCJjb2RlIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PENvZGVTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBSZWY8TmV0d29ya0Vycm9yPiByZWxl
YXNlKCkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxs
RmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKHNpemVvZihOZXR3b3JrRXJyb3IpID09IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5ub3Rf
Y2FzdCk7CisKKyAgICAgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25SZXN1bHQgPSBtX3Jl
c3VsdC5yZWxlYXNlTm9uTnVsbCgpOworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBXVEZNb3Zl
KCpyZWludGVycHJldF9jYXN0PFJlZjxOZXR3b3JrRXJyb3I+Kj4oJmpzb25SZXN1bHQpKTsKKyAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyoKKyAg
ICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CisgICAgICogUmVmPE5ldHdvcmtFcnJvcj4gcmVz
dWx0ID0gTmV0d29ya0Vycm9yOjpjcmVhdGUoKQorICAgICAqICAgICAuc2V0TWVzc2FnZSguLi4p
CisgICAgICogICAgIC5zZXRDb2RlKC4uLikKKyAgICAgKiAgICAgLnJlbGVhc2UoKTsKKyAgICAg
Ki8KKyAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsK
KyAgICB9Cit9OworCit9IC8vIE5ldHdvcmsyCisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90b2Nv
bAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
T2JqZWN0cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0
dXJlLWd1YXJkcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgi
CisKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCituYW1lc3BhY2UgUHJvdG9jb2wgeworCisK
KworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisK
KyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8d3RmL1Bs
YXRmb3JtLmg+CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKK0Bwcm90
b2NvbCBUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI7CisKK25hbWVzcGFjZSBJbnNw
ZWN0b3IgeworCisKK2NsYXNzIE9iakNJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVy
IGZpbmFsIDogcHVibGljIEFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIgeworICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIE9iakNJbnNwZWN0b3JOZXR3
b3JrMUJhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxl
cj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQorICAgIHZvaWQgbG9hZFJlc291
cmNlKGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKK3ByaXZhdGU6CisgICAgUmV0YWluUHRyPGlkPFRl
c3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5k
RGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3Bh
dGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9t
YWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9j
b2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFs
LmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW5jbHVkZSA8
d3RmL0pTT05WYWx1ZXMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3ZvaWQgT2JqQ0lu
c3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZShsb25nIHJlcXVl
c3RJZCkKK3sKKyAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0
b3IobG9hZFJlc291cmNlV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Cisg
ICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElk
LCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazEubG9hZFJlc291
cmNlJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2Vu
ZFBlbmRpbmdFcnJvcnMoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlkIGVycm9y
Q2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNl
cnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5k
aW5nRXJyb3JzKCk7CisgICAgfTsKKworICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57CisgICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpTT046Ok9i
amVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKKyAgICB9OworCisgICAgW21fZGVsZWdhdGUgbG9hZFJl
c291cmNlV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3Vj
Y2Vzc0NhbGxiYWNrXTsKK30KKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDx3dGYvUGxhdGZv
cm0uaD4KKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgorCitfX2F0dHJp
YnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbiA6IE5TT2JqZWN0CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluLCBz
ZXR0ZXI9c2V0TmV0d29yazFIYW5kbGVyOikgaWQ8VGVzdFByb3RvY29sTmV0d29yazFEb21haW5I
YW5kbGVyPiBuZXR3b3JrMUhhbmRsZXI7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkp
IFRlc3RQcm90b2NvbE5ldHdvcmszRG9tYWluRXZlbnREaXNwYXRjaGVyICpuZXR3b3JrM0V2ZW50
RGlzcGF0Y2hlcjsKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3Vy
YXRpb24uaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1m
ZWF0dXJlLWd1YXJkcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKKworI2ltcG9ydCAi
VGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNw
YXRjaGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxl
QWdlbnQuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29u
dHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXJzLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxl
bWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KK3sKKyAgICBBdWdtZW50YWJsZUlu
c3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworICAgIGlkPFRlc3RQcm90b2NvbE5ldHdv
cmsxRG9tYWluSGFuZGxlcj4gX25ldHdvcmsxSGFuZGxlcjsKKyAgICBUZXN0UHJvdG9jb2xOZXR3
b3JrM0RvbWFpbkV2ZW50RGlzcGF0Y2hlciAqX25ldHdvcmszRXZlbnREaXNwYXRjaGVyOworfQor
CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3Rv
ckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAg
IGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7
CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQorCist
ICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbX25ldHdvcmsxSGFuZGxlciByZWxlYXNlXTsKKyAgICBb
X25ldHdvcmszRXZlbnREaXNwYXRjaGVyIHJlbGVhc2VdOworICAgIFtzdXBlciBkZWFsbG9jXTsK
K30KKworLSAodm9pZClzZXROZXR3b3JrMUhhbmRsZXI6KGlkPFRlc3RQcm90b2NvbE5ldHdvcmsx
RG9tYWluSGFuZGxlcj4paGFuZGxlcgoreworICAgIGlmIChoYW5kbGVyID09IF9uZXR3b3JrMUhh
bmRsZXIpCisgICAgICAgIHJldHVybjsKKworICAgIFtfbmV0d29yazFIYW5kbGVyIHJlbGVhc2Vd
OworICAgIF9uZXR3b3JrMUhhbmRsZXIgPSBbaGFuZGxlciByZXRhaW5dOworCisgICAgYXV0byBh
bHRlcm5hdGVEaXNwYXRjaGVyID0gbWFrZVVuaXF1ZTxPYmpDSW5zcGVjdG9yTmV0d29yazFCYWNr
ZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7CisgICAgYXV0byBhbHRlcm5hdGVBZ2VudCA9IG1ha2VV
bmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hl
ciwgQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4+KCJOZXR3b3JrMSJfcywgKl9j
b250cm9sbGVyLCBXVEZNb3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIpKTsKKyAgICBfY29udHJvbGxl
ci0+YXBwZW5kRXh0cmFBZ2VudChXVEZNb3ZlKGFsdGVybmF0ZUFnZW50KSk7Cit9CisKKy0gKGlk
PFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4pbmV0d29yazFIYW5kbGVyCit7Cisg
ICAgcmV0dXJuIF9uZXR3b3JrMUhhbmRsZXI7Cit9CisKKy0gKFRlc3RQcm90b2NvbE5ldHdvcmsz
RG9tYWluRXZlbnREaXNwYXRjaGVyICopbmV0d29yazNFdmVudERpc3BhdGNoZXIKK3sKKyAgICBp
ZiAoIV9uZXR3b3JrM0V2ZW50RGlzcGF0Y2hlcikKKyAgICAgICAgX25ldHdvcmszRXZlbnREaXNw
YXRjaGVyID0gW1tUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkV2ZW50RGlzcGF0Y2hlciBhbGxv
Y10gaW5pdFdpdGhDb250cm9sbGVyOl9jb250cm9sbGVyXTsKKyAgICByZXR1cm4gX25ldHdvcmsz
RXZlbnREaXNwYXRjaGVyOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xDb25maWd1cmF0aW9uLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERp
c3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUt
ZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKwor
I2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDx3dGYvSlNP
TlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRp
b24gVGVzdFByb3RvY29sTmV0d29yazNEb21haW5FdmVudERpc3BhdGNoZXIKK3sKKyAgICBBdWdt
ZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworfQorCistIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIq
KWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikK
KyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRy
b2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXJlc291
cmNlTG9hZGVkCit7CisgICAgY29uc3QgRnJvbnRlbmRSb3V0ZXImIHJvdXRlciA9IF9jb250cm9s
bGVyLT5mcm9udGVuZFJvdXRlcigpOworCisgICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3Nh
Z2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmco
Im1ldGhvZCJfcywgIk5ldHdvcmszLnJlc291cmNlTG9hZGVkIl9zKTsKKyAgICByb3V0ZXIuc2Vu
ZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cit9CisKK0BlbmQKKworCisjIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2Vu
ZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9u
Lmg+CisjaW1wb3J0IDx3dGYvUGxhdGZvcm0uaD4KKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JX
SVByb3RvY29sSlNPTk9iamVjdC5oPgorCisKK0BjbGFzcyBUZXN0UHJvdG9jb2xOZXR3b3JrMk5l
dHdvcmtFcnJvcjsKKworCisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0Iikp
KQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xOZXR3b3JrMk5ldHdvcmtFcnJvciA6IFJXSVByb3Rv
Y29sSlNPTk9iamVjdAorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9u
YXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQ7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQ
cm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKKy0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBjb2RlOihpbnQp
Y29kZTsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmlu
ZyAqbWVzc2FnZTsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24p
IGludCBjb2RlOworQGVuZAorCitAcHJvdG9jb2wgVGVzdFByb3RvY29sTmV0d29yazFEb21haW5I
YW5kbGVyIDxOU09iamVjdD4KK0BvcHRpb25hbAorLSAodm9pZClsb2FkUmVzb3VyY2VXaXRoRXJy
b3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vz
c0NhbGxiYWNrOih2b2lkKF4pKHZvaWQpKXN1Y2Nlc3NDYWxsYmFjazsKK0BlbmQKKworX19hdHRy
aWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2Nv
bE5ldHdvcmszRG9tYWluRXZlbnREaXNwYXRjaGVyIDogTlNPYmplY3QKKy0gKHZvaWQpcmVzb3Vy
Y2VMb2FkZWQ7CitAZW5kCisKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVp
bGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5o
CisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRz
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9y
dCA8d3RmL1BsYXRmb3JtLmg+CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAi
VGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1
ZXMuaD4KKworQGludGVyZmFjZSBUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkV2ZW50RGlzcGF0
Y2hlciAoUHJpdmF0ZSkKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEluc3Bl
Y3Rvcjo6QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyOworQGVuZAor
CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorCisjIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDx3dGYvUGxh
dGZvcm0uaD4KKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0
b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Ig
eworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+CitPcHRpb25hbDxPYmpDRW51bVR5
cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKKworCisKK30gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMu
bW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdp
dGgtZmVhdHVyZS1ndWFyZHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKworI2lt
cG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgi
CisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgor
Cit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucyAoTmV0d29yazJEb21haW4pCisKKysgKHZvaWQpX3BhcnNlTmV0d29ya0Vy
cm9yOihUZXN0UHJvdG9jb2xOZXR3b3JrMk5ldHdvcmtFcnJvciAqKilvdXRWYWx1ZSBmcm9tUGF5
bG9hZDooaWQpcGF5bG9hZDsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zIChOZXR3b3JrMkRvbWFpbikKKworKyAodm9pZClfcGFyc2VOZXR3b3Jr
RXJyb3I6KFRlc3RQcm90b2NvbE5ldHdvcmsyTmV0d29ya0Vycm9yICoqKW91dFZhbHVlIGZyb21Q
YXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShw
YXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gW1tUZXN0UHJv
dG9jb2xOZXR3b3JrMk5ldHdvcmtFcnJvciBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRd
OworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3Vh
cmRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lt
cG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2Jq
ZWN0UHJpdmF0ZS5oPgorI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9K
U09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRh
dGlvbiBUZXN0UHJvdG9jb2xOZXR3b3JrMk5ldHdvcmtFcnJvcgorCistIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilw
YXlsb2FkCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVy
biBuaWw7CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxv
YWRbQCJtZXNzYWdlIl0sIEAibWVzc2FnZSIpOworICAgIHNlbGYubWVzc2FnZSA9IHBheWxvYWRb
QCJtZXNzYWdlIl07CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZ
KHBheWxvYWRbQCJjb2RlIl0sIEAiY29kZSIpOworICAgIHNlbGYuY29kZSA9IFtwYXlsb2FkW0Ai
Y29kZSJdIGludGVnZXJWYWx1ZV07CisKKyAgICByZXR1cm4gc2VsZjsKK30KKy0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilvYmpl
Y3QKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoSlNPTk9iamVjdDpbb2JqZWN0
IHRvSlNPTk9iamVjdF0uZ2V0KCldKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHJldHVy
biBzZWxmOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAq
KW1lc3NhZ2UgY29kZTooaW50KWNvZGUKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRd
KSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlS
RURfUFJPUEVSVFkobWVzc2FnZSwgQCJtZXNzYWdlIik7CisKKyAgICBzZWxmLm1lc3NhZ2UgPSBt
ZXNzYWdlOworICAgIHNlbGYuY29kZSA9IGNvZGU7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKwor
LSAodm9pZClzZXRNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UKK3sKKyAgICBbc3VwZXIgc2V0
U3RyaW5nOm1lc3NhZ2UgZm9yS2V5OkAibWVzc2FnZSJdOworfQorCistIChOU1N0cmluZyAqKW1l
c3NhZ2UKK3sKKyAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAIm1lc3NhZ2UiXTsKK30K
KworLSAodm9pZClzZXRDb2RlOihpbnQpY29kZQoreworICAgIFtzdXBlciBzZXRJbnRlZ2VyOmNv
ZGUgZm9yS2V5OkAiY29kZSJdOworfQorCistIChpbnQpY29kZQoreworICAgIHJldHVybiBbc3Vw
ZXIgaW50ZWdlckZvcktleTpAImNvZGUiXTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRv
bWFpbi5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9leHBlY3RlZC9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uLXJlc3Vs
dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMDMwYmYxMjlmMGUKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbi1yZXN1bHQK
QEAgLTAsMCArMSw4OTYgQEAKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFu
ZHMuanMuaW4KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQt
ZGlmZmVyZW50LWRvbWFpbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcy5pbgorCisj
IyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4u
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5o
IgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+
CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKwor
bmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVy
IHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5k
RGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3Zl
KGRpc3BhdGNoZXIpOyB9CisgICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVy
KCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQorcHJpdmF0ZToK
KyAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Cit9Owor
CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQ
RUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRl
QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0
Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1k
aWZmZXJlbnQtZG9tYWluLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJp
bmc7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEJh
Y2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNo
ZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1k
aWZmZXJlbnQtZG9tYWluLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0
Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91
dGVyLmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJE
ZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUo
SU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyNpbmNsdWRlICJUZXN0QWx0ZXJuYXRl
QmFja2VuZERpc3BhdGNoZXJzLmgiCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5j
cHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5q
c29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpbmNsdWRlICJUZXN0UHJvdG9j
b2xPYmplY3RzLmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEZyb250
ZW5kUm91dGVyOworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVz
dEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlz
cGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBl
LWlkLWRpZmZlcmVudC1kb21haW4uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEZyb250ZW5k
RGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250
ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTog
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xPYmplY3RzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUt
aWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisK
KyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+CisjaW5j
bHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCitu
YW1lc3BhY2UgUHJvdG9jb2wgeworCisKKworCisKKy8vIFR5cGVkZWZzLgorbmFtZXNwYWNlIFJ1
bnRpbWUgeworLyogVW5pcXVlIG9iamVjdCBpZGVudGlmaWVyLiAqLwordHlwZWRlZiBTdHJpbmcg
UmVtb3RlT2JqZWN0SWQ7Cit9IC8vIFJ1bnRpbWUKKworbmFtZXNwYWNlIFJ1bnRpbWUyIHsKKy8q
IFVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4gKi8KK3R5cGVkZWYgU3RyaW5nIFJlbW90ZU9iamVj
dElkOworfSAvLyBSdW50aW1lMgorLy8gRW5kIG9mIHR5cGVkZWZzLgorCisKKworfSAvLyBuYW1l
c3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbE9iamVjdHMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2Jq
ZWN0cy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQt
ZGlmZmVyZW50LWRvbWFpbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmpl
Y3RzLmgiCisKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCituYW1lc3BhY2UgUHJvdG9jb2wg
eworCisKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDx3dGYvUGxh
dGZvcm0uaD4KKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVycy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworCisKK25h
bWVzcGFjZSBJbnNwZWN0b3IgeworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5o
IgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRl
ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisKK25hbWVzcGFjZSBJbnNw
ZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbENvbmZpZ3VyYXRpb24uaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNh
bWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8d3RmL1BsYXRmb3JtLmg+CisKKyNpbXBvcnQg
PFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0
eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBO
U09iamVjdAorQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
bi5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21h
aW4uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1w
b3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2Nv
bEludGVybmFsLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIK
KyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+Cisj
aW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4K
KyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVycy5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXJzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBU
ZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCit7CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250
cm9sbGVyKiBfY29udHJvbGxlcjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJv
bGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCit7CisgICAg
c2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7
CisgICAgQVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsK
KyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgW3N1cGVyIGRl
YWxsb2NdOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1
cmF0aW9uLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJz
Lm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZl
cmVudC1kb21haW4uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3Vz
aW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xF
dmVudERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9t
YWluLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lt
cG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisjaW1wb3J0IDx3dGYvUGxhdGZvcm0uaD4K
KworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgorCisKKwor
CisKKworCisKKworCisKKworCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWls
ZENvbXBhdGliaWxpdHlPYmplY3RzLmg+CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgK
KworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPHd0Zi9Q
bGF0Zm9ybS5oPgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90
b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50
YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisK
KworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorCisjIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPHd0Zi9QbGF0Zm9y
bS5oPgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9S
V0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisK
K3RlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KK09wdGlvbmFsPE9iakNFbnVtVHlwZT4g
ZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOworCisKKworCisKK30gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMu
bW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVy
ZW50LWRvbWFpbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorCisjaW1wb3J0ICJU
ZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKKyNpbXBv
cnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisKK3VzaW5n
IG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zIChSdW50aW1lRG9tYWluKQorCisrICh2b2lkKV9wYXJzZVJlbW90ZU9iamVjdElkOihO
U1N0cmluZyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKworQGVuZAorQGlu
dGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFJ1bnRpbWUyRG9tYWluKQorCisr
ICh2b2lkKV9wYXJzZVJlbW90ZU9iamVjdElkOihOU1N0cmluZyAqKilvdXRWYWx1ZSBmcm9tUGF5
bG9hZDooaWQpcGF5bG9hZDsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zIChSdW50aW1lRG9tYWluKQorCisrICh2b2lkKV9wYXJzZVJlbW90ZU9i
amVjdElkOihOU1N0cmluZyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAorewor
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TU3RyaW5nIGNsYXNz
XSk7CisgICAgKm91dFZhbHVlID0gKE5TU3RyaW5nICopcGF5bG9hZDsKK30KKworQGVuZAorQGlt
cGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoUnVudGltZTJEb21haW4p
CisKKysgKHZvaWQpX3BhcnNlUmVtb3RlT2JqZWN0SWQ6KE5TU3RyaW5nICoqKW91dFZhbHVlIGZy
b21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQ
RShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSAoTlNTdHJpbmcg
KilwYXlsb2FkOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1k
b21haW4uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisj
aW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05P
YmplY3RQcml2YXRlLmg+CisjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2ltcG9ydCA8d3Rm
L0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisKKworCisK
KyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zaGFkb3dlZC1v
cHRpb25hbC10eXBlLXNldHRlcnMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1z
ZXR0ZXJzLmpzb24tcmVzdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
Li5hYmU4YTc5ZGQxMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zaGFkb3dlZC1vcHRpb25hbC10eXBlLXNl
dHRlcnMuanNvbi1yZXN1bHQKQEAgLTAsMCArMSwxMTAzIEBACisjIyMgQmVnaW4gRmlsZTogSW5z
cGVjdG9yQmFja2VuZENvbW1hbmRzLmpzLmluCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2Vu
ZENvbW1hbmRzLmpzLmluCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERp
c3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1v
cHRpb25hbC10eXBlLXNldHRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgor
CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyNpbmNsdWRl
ICJUZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
RnJvbnRlbmRSb3V0ZXIuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEFsdGVy
bmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldEJhY2tlbmREaXNw
YXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2Vu
ZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9CisgICAgQmFja2VuZERpc3BhdGNo
ZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hl
ci5nZXQoKTsgfQorcHJpdmF0ZToKKyAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFj
a2VuZERpc3BhdGNoZXI7Cit9OworCisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKwor
I2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorIyMjIEVu
ZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZp
bGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8
d3RmL1BsYXRmb3JtLmg+CisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3R5
cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
CisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmls
ZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgorLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5o
PgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQor
I2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNlbmRpZiAvLyBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBU
ZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5k
RGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2Vk
LW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+
CisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8d3RmL0pTT05W
YWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIElu
c3BlY3RvciB7CisKK2NsYXNzIEZyb250ZW5kUm91dGVyOworCit9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVn
aW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK30gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorCisj
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvclByb3RvY29sVHlwZXMuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1l
c3BhY2UgSW5zcGVjdG9yIHsKKworCisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKworCisvLyBG
b3J3YXJkIGRlY2xhcmF0aW9ucy4KK25hbWVzcGFjZSBSdW50aW1lIHsKK2NsYXNzIEtleVBhdGg7
Cit9IC8vIFJ1bnRpbWUKKy8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KKworCisKKwor
bmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKKworU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGlu
dCBjb2RlKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdldEVudW1Db25zdGFudFZh
bHVlKFQgZW51bVZhbHVlKQoreworICAgIHJldHVybiBnZXRFbnVtQ29uc3RhbnRWYWx1ZShzdGF0
aWNfY2FzdDxpbnQ+KGVudW1WYWx1ZSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVy
cworCituYW1lc3BhY2UgUnVudGltZSB7CisKKy8qIEtleSBwYXRoLiAqLworY2xhc3MgS2V5UGF0
aCA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKK3B1YmxpYzoKKyAgICAvLyBOYW1lZCBhZnRl
ciBwcm9wZXJ0eSBuYW1lICd0eXBlJyB3aGlsZSBnZW5lcmF0aW5nIEtleVBhdGguCisgICAgZW51
bSBjbGFzcyBUeXBlIHsKKyAgICAgICAgTnVsbCA9IDAsCisgICAgICAgIFN0cmluZyA9IDEsCisg
ICAgICAgIEFycmF5ID0gMiwKKyAgICB9OyAvLyBlbnVtIGNsYXNzIFR5cGUKKyAgICBlbnVtIHsK
KyAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAorICAgICAgICBUeXBlU2V0ID0gMSA8PCAwLAorICAg
ICAgICBBbGxGaWVsZHNTZXQgPSAoVHlwZVNldCkKKyAgICB9OworCisgICAgdGVtcGxhdGU8aW50
IFNUQVRFPgorICAgIGNsYXNzIEJ1aWxkZXIgeworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0
cjxKU09OOjpPYmplY3Q+IG1fcmVzdWx0OworCisgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBC
dWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsK
KyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXIoUmVmPC8qS2V5UGF0aCovSlNPTjo6T2JqZWN0
PiYmIG9iamVjdCkKKyAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQorICAg
ICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwg
YnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKKyAgICAgICAgfQorICAgICAgICBm
cmllbmQgY2xhc3MgS2V5UGF0aDsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IFR5cGVTZXQ+JiBzZXRUeXBlKFR5cGUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUeXBlU2V0KSwgcHJvcGVydHlfdHlwZV9hbHJlYWR5
X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ0eXBlIl9zLCBJbnNwZWN0
b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUodmFsdWUpKTsK
KyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VHlwZVNldD4oKTsKKyAgICAgICAgfQorCisg
ICAgICAgIFJlZjxLZXlQYXRoPiByZWxlYXNlKCkKKyAgICAgICAgeworICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsK
KyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihLZXlQYXRoKSA9PSBzaXplb2YoSlNP
Tjo6T2JqZWN0KSwgY2Fubm90X2Nhc3QpOworCisgICAgICAgICAgICBSZWY8SlNPTjo6T2JqZWN0
PiBqc29uUmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKKyAgICAgICAgICAgIGF1
dG8gcmVzdWx0ID0gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8S2V5UGF0aD4qPigmanNv
blJlc3VsdCkpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgIH07
CisKKyAgICAvKgorICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKKyAgICAgKiBSZWY8S2V5
UGF0aD4gcmVzdWx0ID0gS2V5UGF0aDo6Y3JlYXRlKCkKKyAgICAgKiAgICAgLnNldFR5cGUoLi4u
KQorICAgICAqICAgICAucmVsZWFzZSgpOworICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVyPE5v
RmllbGRzU2V0PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVs
ZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOworICAgIH0KKworICAgIHZvaWQgc2V0U3Ry
aW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgeworICAgICAgICBKU09OOjpPYmplY3RCYXNl
OjpzZXRTdHJpbmcoInN0cmluZyJfcywgdmFsdWUpOworICAgIH0KKworICAgIHZvaWQgc2V0QXJy
YXkoUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gdmFsdWUpCisgICAgeworICAgICAgICBK
U09OOjpPYmplY3RCYXNlOjpzZXRBcnJheSgiYXJyYXkiX3MsIFdURk1vdmUodmFsdWUpKTsKKyAg
ICB9Cit9OworCit9IC8vIFJ1bnRpbWUKKworCisKK25hbWVzcGFjZSBUZXN0SGVscGVycyB7CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFByb3RvY29sRW51bVR5cGU+CitPcHRpb25hbDxQcm90b2NvbEVu
dW1UeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJik7CisKKy8vIEVu
dW1zIGluIHRoZSAnUnVudGltZScgRG9tYWluCit0ZW1wbGF0ZTw+CitPcHRpb25hbDxJbnNwZWN0
b3I6OlByb3RvY29sOjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21T
dHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZT4oY29uc3Qg
U3RyaW5nJik7CisKK30gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCisKK30gLy8gbmFtZXNwYWNl
IFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xPYmplY3RzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMu
Y3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwt
dHlwZS1zZXR0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMu
aCIKKworI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisK
K25hbWVzcGFjZSBUZXN0SGVscGVycyB7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBlbnVt
X2NvbnN0YW50X3ZhbHVlc1tdID0geworICAgICJudWxsIiwKKyAgICAic3RyaW5nIiwKKyAgICAi
YXJyYXkiLAorfTsKKworU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7Cisg
ICAgcmV0dXJuIGVudW1fY29uc3RhbnRfdmFsdWVzW2NvZGVdOworfQorCisvLyBFbnVtcyBpbiB0
aGUgJ1J1bnRpbWUnIERvbWFpbgorCit0ZW1wbGF0ZTw+CitPcHRpb25hbDxJbnNwZWN0b3I6OlBy
b3RvY29sOjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8
SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZT4oY29uc3QgU3RyaW5n
JiBwcm90b2NvbFN0cmluZykKK3sKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFs
dWVzW10gPSB7CisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6
S2V5UGF0aDo6VHlwZTo6TnVsbCwKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29s
OjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlOjpTdHJpbmcsCisgICAgICAgIChzaXplX3QpSW5zcGVj
dG9yOjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZTo6QXJyYXksCisgICAgfTsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDM7ICsraSkKKyAgICAgICAgaWYgKHByb3RvY29sU3Ry
aW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKKyAgICAgICAg
ICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZSlj
b25zdGFudFZhbHVlc1tpXTsKKworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFRlc3RIZWxwZXJzCisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmpl
Y3RzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJz
LmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25hbC10
eXBlLXNldHRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjaW1wb3J0IDx3dGYvUGxhdGZvcm0uaD4KKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2luY2x1ZGUgPHd0Zi9S
ZXRhaW5QdHIuaD4KKworCisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKK30gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRj
aGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMu
bW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25hbC10
eXBlLXNldHRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNw
YXRjaGVycy5oIgorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbmNsdWRl
ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVl
cy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisKKyMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDx3dGYv
UGxhdGZvcm0uaD4KKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgorCitf
X2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0CitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24ubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFk
b3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgi
CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9j
b2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0
ZURpc3BhdGNoYWJsZUFnZW50Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJs
ZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0
b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCit7CisgICAg
QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKK30KKworLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9s
bGVyKiljb250cm9sbGVyCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNl
bGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9j
b250cm9sbGVyID0gY29udHJvbGxlcjsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClk
ZWFsbG9jCit7CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCitAZW5kCisKKworIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJu
YWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0
IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisKKyMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBz
aGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4K
KyNpbXBvcnQgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJv
dG9jb2xKU09OT2JqZWN0Lmg+CisKKworQGNsYXNzIFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRo
OworCit0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0
aFR5cGUpIHsKKyAgICBUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGVOdWxsLAorICAgIFRl
c3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZVN0cmluZywKKyAgICBUZXN0UHJvdG9jb2xSdW50
aW1lS2V5UGF0aFR5cGVBcnJheSwKK307CisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJk
ZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aCA6IFJXSVBy
b3RvY29sSlNPTk9iamVjdAorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0
aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQ7CistIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKKy0g
KGluc3RhbmNldHlwZSlpbml0V2l0aFR5cGU6KFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlw
ZSl0eXBlOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgVGVz
dFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlIHR5cGU7CisvKiBvcHRpb25hbCAqLyBAcHJvcGVy
dHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKnN0cmluZzsKKy8qIG9wdGlvbmFsICovIEBw
cm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmFycmF5Owor
QGVuZAorCisKKworCisKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRD
b21wYXRpYmlsaXR5T2JqZWN0cy5oPgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCisK
KyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8d3RmL1Bs
YXRmb3JtLmg+CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3Rv
Y29sSlNPTk9iamVjdFByaXZhdGUuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRh
YmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwor
CisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPHd0Zi9QbGF0Zm9y
bS5oPgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9S
V0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisK
K3RlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KK09wdGlvbmFsPE9iakNFbnVtVHlwZT4g
ZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOworCitpbmxpbmUgU3RyaW5n
IHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlIHZhbHVlKQor
eworICAgIHN3aXRjaCh2YWx1ZSkgeworICAgIGNhc2UgVGVzdFByb3RvY29sUnVudGltZUtleVBh
dGhUeXBlTnVsbDoKKyAgICAgICAgcmV0dXJuICJudWxsIl9zOworICAgIGNhc2UgVGVzdFByb3Rv
Y29sUnVudGltZUtleVBhdGhUeXBlU3RyaW5nOgorICAgICAgICByZXR1cm4gInN0cmluZyJfczsK
KyAgICBjYXNlIFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZUFycmF5OgorICAgICAgICBy
ZXR1cm4gImFycmF5Il9zOworICAgIH0KK30KKwordGVtcGxhdGU8PgoraW5saW5lIE9wdGlvbmFs
PFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0
IFN0cmluZyYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09ICJudWxsIikKKyAgICAgICAgcmV0
dXJuIFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZU51bGw7CisgICAgaWYgKHZhbHVlID09
ICJzdHJpbmciKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBl
U3RyaW5nOworICAgIGlmICh2YWx1ZSA9PSAiYXJyYXkiKQorICAgICAgICByZXR1cm4gVGVzdFBy
b3RvY29sUnVudGltZUtleVBhdGhUeXBlQXJyYXk7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
K30KKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2Vk
LW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgor
CisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJz
ZXIuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRl
Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbnRlcmZhY2UgVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zIChSdW50aW1lRG9tYWluKQorCisrICh2b2lkKV9wYXJzZUtleVBh
dGg6KFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihp
ZClwYXlsb2FkOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMgKFJ1bnRpbWVEb21haW4pCisKKysgKHZvaWQpX3BhcnNlS2V5UGF0aDooVGVzdFBy
b3RvY29sUnVudGltZUtleVBhdGggKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQK
K3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25h
cnkgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRo
IGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07Cit9CisKK0BlbmQKKworCisjIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorCisjIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sVHlwZXMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBz
aGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgor
CisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPFdlYklu
c3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisjaW1wb3J0IDx3dGYvQXNz
ZXJ0aW9ucy5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNl
IEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRo
CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5
PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGlu
aXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVR
VUlSRURfUFJPUEVSVFkocGF5bG9hZFtAInR5cGUiXSwgQCJ0eXBlIik7CisgICAgT3B0aW9uYWw8
VGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlPiB0eXBlID0gZnJvbVByb3RvY29sU3RyaW5n
PFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZT4ocGF5bG9hZFtAInR5cGUiXSk7CisgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfRU5VTV9WQUxVRSh0eXBlLCBAInR5cGUiKTsKKyAgICBz
ZWxmLnR5cGUgPSB0eXBlLnZhbHVlKCk7CisKKyAgICBzZWxmLnN0cmluZyA9IHBheWxvYWRbQCJz
dHJpbmciXTsKKworICAgIHNlbGYuYXJyYXkgPSBwYXlsb2FkW0AiYXJyYXkiXTsKKworICAgIHJl
dHVybiBzZWxmOworfQorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJX
SVByb3RvY29sSlNPTk9iamVjdCAqKW9iamVjdAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIg
aW5pdFdpdGhKU09OT2JqZWN0OltvYmplY3QgdG9KU09OT2JqZWN0XS5nZXQoKV0pKQorICAgICAg
ICByZXR1cm4gbmlsOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKGluc3RhbmNldHlwZSlp
bml0V2l0aFR5cGU6KFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZSl0eXBlCit7CisgICAg
aWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBz
ZWxmLnR5cGUgPSB0eXBlOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpc2V0VHlw
ZTooVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlKXR5cGUKK3sKKyAgICBbc3VwZXIgc2V0
U3RyaW5nOnRvUHJvdG9jb2xTdHJpbmcodHlwZSkgZm9yS2V5OkAidHlwZSJdOworfQorCistIChU
ZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGUpdHlwZQoreworICAgIHJldHVybiBmcm9tUHJv
dG9jb2xTdHJpbmc8VGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlPihbc3VwZXIgc3RyaW5n
Rm9yS2V5OkAidHlwZSJdKS52YWx1ZSgpOworfQorCistICh2b2lkKXNldFN0cmluZzooTlNTdHJp
bmcgKilzdHJpbmcKK3sKKyAgICBbc3VwZXIgc2V0U3RyaW5nOnN0cmluZyBmb3JLZXk6QCJzdHJp
bmciXTsKK30KKworLSAoTlNTdHJpbmcgKilzdHJpbmcKK3sKKyAgICByZXR1cm4gW3N1cGVyIHN0
cmluZ0ZvcktleTpAInN0cmluZyJdOworfQorCistICh2b2lkKXNldEFycmF5OihOU0FycmF5Lyo8
TlNTdHJpbmc+Ki8gKilhcnJheQoreworICAgIFtzdXBlciBzZXRKU09OQXJyYXk6dG9KU09OU3Ry
aW5nQXJyYXkoYXJyYXkpIGZvcktleTpAImFycmF5Il07Cit9CisKKy0gKE5TQXJyYXkvKjxOU1N0
cmluZz4qLyAqKWFycmF5Cit7CisgICAgcmV0dXJuIHRvT2JqQ1N0cmluZ0FycmF5KFtzdXBlciBK
U09OQXJyYXlGb3JLZXk6QCJhcnJheSJdKTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zaG91bGQtc3RyaXAtY29tbWVudHMuanNv
bi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24tcmVzdWx0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5lYmIyMTQyZDJkZgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9z
aG91bGQtc3RyaXAtY29tbWVudHMuanNvbi1yZXN1bHQKQEAgLTAsMCArMSw4NTIgQEAKKyMjIyBC
ZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMuaW4KKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBzaG91bGQtc3RyaXAtY29tbWVudHMuanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JC
YWNrZW5kQ29tbWFuZHMuanMuaW4KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNob3Vs
ZC1zdHJpcC1jb21tZW50cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNp
ZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworI2luY2x1ZGUgIlRl
c3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9u
dGVuZFJvdXRlci5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgQWx0ZXJuYXRl
QmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNo
ZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlz
cGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KKyAgICBCYWNrZW5kRGlzcGF0Y2hlciog
YmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdl
dCgpOyB9Citwcml2YXRlOgorICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5k
RGlzcGF0Y2hlcjsKK307CisKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5k
aWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjIyMgRW5kIEZp
bGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTog
VGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0u
aD4KKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcg
RXJyb3JTdHJpbmc7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmls
ZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2Vu
ZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNob3Vs
ZC1zdHJpcC1jb21tZW50cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0QmFja2VuZERpc3Bh
dGNoZXJzLmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJv
dXRlci5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL05ldmVy
RGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCisjaWYgRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjaW5jbHVkZSAiVGVzdEFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVycy5oIgorI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK30gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMu
Y3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVj
dHMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgRnJvbnRlbmRSb3V0
ZXI7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVy
cy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaG91bGQtc3RyaXAtY29t
bWVudHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIK
KworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwor
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlz
cGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaG91bGQtc3RyaXAtY29tbWVudHMuanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+
CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKwor
CisKKworCisKKworCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKworI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK25h
bWVzcGFjZSBQcm90b2NvbCB7CisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3Rz
LmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaG91bGQtc3RyaXAtY29tbWVudHMu
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0
IDx3dGYvUGxhdGZvcm0uaD4KKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4K
KworCisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaG91bGQtc3RyaXAtY29tbWVudHMuanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcu
aCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVk
ZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorCituYW1lc3BhY2UgSW5z
cGVjdG9yIHsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xDb25maWd1cmF0aW9uLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBz
aG91bGQtc3RyaXAtY29tbWVudHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaW1wb3J0IDx3dGYvUGxhdGZvcm0uaD4KKworI2ltcG9ydCA8V2ViSW5z
cGVjdG9yL1Rlc3RQcm90b2NvbC5oPgorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVm
YXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0
CitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKwor
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaG91bGQtc3RyaXAtY29tbWVudHMuanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9j
b2xDb25maWd1cmF0aW9uLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisj
aW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+CisjaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2ltcG9y
dCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+CisKK3VzaW5n
IG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25m
aWd1cmF0aW9uCit7CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJv
bGxlcjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFi
bGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCit7CisgICAgc2VsZiA9IFtzdXBlciBp
bml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNv
bnRyb2xsZXIpOworICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKKyAgICByZXR1cm4gc2Vs
ZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCitA
ZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisKKyMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgi
CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9y
OworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorCisj
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBzaG91bGQtc3RyaXAtY29tbWVudHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4K
KyNpbXBvcnQgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJv
dG9jb2xKU09OT2JqZWN0Lmg+CisKKworCisKKworCisKKworCisKKworCisKKyNpbXBvcnQgPFdl
Ykluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4KKworIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
SW50ZXJuYWwuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNob3VsZC1zdHJp
cC1jb21tZW50cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbXBvcnQgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIK
KyNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCisjaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPHd0
Zi9KU09OVmFsdWVzLmg+CisKKworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJu
YWwuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaG91bGQtc3RyaXAtY29tbWVudHMuanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDx3
dGYvUGxhdGZvcm0uaD4KKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0IDxXZWJJ
bnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+CisKK25hbWVzcGFjZSBJbnNw
ZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+CitPcHRpb25hbDxPYmpD
RW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKKworfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNob3VsZC1zdHJpcC1jb21t
ZW50cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNp
bXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorCisjaW1wb3J0ICJUZXN0UHJv
dG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKKyNpbXBvcnQgPFdl
Ykluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisKK3VzaW5nIG5hbWVz
cGFjZSBJbnNwZWN0b3I7CisKKworCisKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0K
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaG91bGQtc3RyaXAtY29tbWVudHMu
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0
ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQ
cml2YXRlLmg+CisjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2ltcG9ydCA8d3RmL0pTT05W
YWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisjIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2Vk
LXByaW1pdGl2ZS10eXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmlt
aXRpdmUtdHlwZS5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMC4uM2Q5YTBiZjVkMDIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hbGlh
c2VkLXByaW1pdGl2ZS10eXBlLmpzb24tcmVzdWx0CkBAIC0wLDAgKzEsODczIEBACisjIyMgQmVn
aW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzLmluCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBl
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKyMjIyBFbmQg
RmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzLmluCisKKyMjIyBCZWdpbiBGaWxlOiBU
ZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgorI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKworbmFtZXNw
YWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1
YmxpYzoKKyAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0
Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3Bh
dGNoZXIpOyB9CisgICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29u
c3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQorcHJpdmF0ZToKKyAgICBS
ZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Cit9OworCisKKwor
Cit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQorIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2Vu
ZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMu
aAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxp
YXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisK
KyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9y
U3RyaW5nOworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRl
c3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNw
YXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xh
cmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVz
dEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1
ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
KworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorI2luY2x1ZGUg
IlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNlbmRpZiAvLyBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisK
KworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0QmFja2Vu
ZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hl
cnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24t
YWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+
CisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8d3RmL0pTT05W
YWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIElu
c3BlY3RvciB7CisKK2NsYXNzIEZyb250ZW5kUm91dGVyOworCit9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVn
aW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK30gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJz
LmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2
ZS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KKyNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK25hbWVzcGFjZSBQcm90
b2NvbCB7CisKKworCisKKworLy8gVHlwZWRlZnMuCituYW1lc3BhY2UgUnVudGltZSB7CisvKiBV
bmlxdWUgb2JqZWN0IGlkZW50aWZpZXIuICovCit0eXBlZGVmIGludCBSZW1vdGVPYmplY3RJZDsK
K30gLy8gUnVudGltZQorLy8gRW5kIG9mIHR5cGVkZWZzLgorCisKKworfSAvLyBuYW1lc3BhY2Ug
UHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbE9iamVjdHMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5j
cHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFs
aWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29s
T2JqZWN0cy5oIgorCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFByb3Rv
Y29sIHsKKworCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUt
dHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNp
bXBvcnQgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0
ci5oPgorCisKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgK
KworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1w
cmltaXRpdmUtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERp
c3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2luY2x1
ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFs
dWVzLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKwor
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUt
dHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNp
bXBvcnQgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3Rv
Y29sLmg+CisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVy
ZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKK0BlbmQKKworCisjIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorCisjIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90
b2NvbENvbmZpZ3VyYXRpb24uaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIK
KyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW1w
b3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKwordXNp
bmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENv
bmZpZ3VyYXRpb24KK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250
cm9sbGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50
YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVy
IGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQo
Y29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVybiBz
ZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisK
K0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKwor
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0
aXZlLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5n
IG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVu
dERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmlt
aXRpdmUtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorI2ltcG9ydCA8d3RmL1BsYXRm
b3JtLmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4K
KworCisKKworCisKKworCisKKworCisKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3Rv
Y29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1p
dGl2ZS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI2ltcG9ydCA8d3RmL1BsYXRmb3JtLmg+CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgor
I2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKKyNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8d3Rm
L0pTT05WYWx1ZXMuaD4KKworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5h
bC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1w
cmltaXRpdmUtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKyNpbXBvcnQgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wu
aCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4K
KworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlw
ZT4KK09wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpOworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90
b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisK
K0BpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChSdW50aW1lRG9tYWluKQor
CisrICh2b2lkKV9wYXJzZVJlbW90ZU9iamVjdElkOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9t
UGF5bG9hZDooaWQpcGF5bG9hZDsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zIChSdW50aW1lRG9tYWluKQorCisrICh2b2lkKV9wYXJzZVJlbW90
ZU9iamVjdElkOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAor
eworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TTnVtYmVyIGNs
YXNzXSk7CisgICAgKm91dFZhbHVlID0gKE5TTnVtYmVyICopcGF5bG9hZDsKK30KKworQGVuZAor
CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQ
cm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUu
aD4KKyNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5o
PgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisKKworCisjIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBl
Lmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uLXJlc3VsdApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYTQ2NjhlNTE4YzEKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24tcmVzdWx0CkBAIC0wLDAg
KzEsMTA1NCBAQAorIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcy5p
bgorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJy
YXktdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
Ky8vIERlYnVnZ2VyCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJEZWJ1Z2dlciIs
IG51bGwpOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIkRlYnVnZ2VyLlJlYXNvbiIs
IHtEaWVkOiAiRGllZCIsIEZhaW50ZWQ6ICJGYWludGVkIiwgSHVuZ3J5OiAiSHVuZ3J5In0pOwor
SW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiRGVidWdnZXIiLCBudWxsKTsKKyMjIyBF
bmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzLmluCisKKyMjIyBCZWdpbiBGaWxl
OiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1
ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKworbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CisKK2NsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAg
ICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBk
aXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9
CisgICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1
cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQorcHJpdmF0ZToKKyAgICBSZWZQdHI8QmFj
a2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Cit9OworCisKKworCit9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQorIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5q
c29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpbmNsdWRlICJUZXN0UHJvdG9j
b2xPYmplY3RzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNl
IEluc3BlY3RvciB7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCisKKworfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMu
aAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3
dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQorI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMu
aCIKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKwor
bmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKwor
IyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmls
ZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3Rm
L1BsYXRmb3JtLmg+CisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVk
ZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwor
bmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEZyb250ZW5kUm91dGVyOworCit9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMu
aAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK30gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJz
LmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgor
CituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKwor
CisvLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KK25hbWVzcGFjZSBEZWJ1Z2dlciB7CitlbnVtIGNs
YXNzIFJlYXNvbjsKK30gLy8gRGVidWdnZXIKKy8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9u
cy4KKworCisvLyBUeXBlZGVmcy4KK25hbWVzcGFjZSBEZWJ1Z2dlciB7Cit0eXBlZGVmIGludCBC
cmVha3BvaW50SWQ7Cit9IC8vIERlYnVnZ2VyCisKK25hbWVzcGFjZSBSdW50aW1lIHsKK3R5cGVk
ZWYgaW50IE9iamVjdElkOwordHlwZWRlZiBKU09OOjpBcnJheU9mPGludD4gTHVja3lOdW1iZXJz
OwordHlwZWRlZiBKU09OOjpBcnJheU9mPFN0cmluZz4gQmFieU5hbWVzOwordHlwZWRlZiBKU09O
OjpBcnJheU9mPGludD4gTmV3T2JqZWN0czsKK3R5cGVkZWYgSlNPTjo6QXJyYXlPZjxpbnQ+IE9s
ZE9iamVjdHM7Cit0eXBlZGVmIEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVi
dWdnZXI6OlJlYXNvbj4gU3RvcFJlYXNvbnM7Cit9IC8vIFJ1bnRpbWUKKy8vIEVuZCBvZiB0eXBl
ZGVmcy4KKworbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKKworU3RyaW5nIGdldEVudW1Db25zdGFu
dFZhbHVlKGludCBjb2RlKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdldEVudW1D
b25zdGFudFZhbHVlKFQgZW51bVZhbHVlKQoreworICAgIHJldHVybiBnZXRFbnVtQ29uc3RhbnRW
YWx1ZShzdGF0aWNfY2FzdDxpbnQ+KGVudW1WYWx1ZSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBU
ZXN0SGVscGVycworCituYW1lc3BhY2UgRGVidWdnZXIgeworCitlbnVtIGNsYXNzIFJlYXNvbiB7
CisgICAgRGllZCA9IDAsCisgICAgRmFpbnRlZCA9IDEsCisgICAgSHVuZ3J5ID0gMiwKK307IC8v
IGVudW0gY2xhc3MgUmVhc29uCisKK30gLy8gRGVidWdnZXIKKworCisKK25hbWVzcGFjZSBUZXN0
SGVscGVycyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFByb3RvY29sRW51bVR5cGU+CitPcHRpb25h
bDxQcm90b2NvbEVudW1UeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5n
Jik7CisKKy8vIEVudW1zIGluIHRoZSAnRGVidWdnZXInIERvbWFpbgordGVtcGxhdGU8PgorT3B0
aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbj4gcGFyc2VFbnVtVmFs
dWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb24+KGNvbnN0
IFN0cmluZyYpOworCit9IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycworCit9IC8vIG5hbWVzcGFj
ZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworbmFtZXNwYWNlIFdURiB7
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKKworLy8gSGFzaCBk
ZWNsYXJhdGlvbnMgaW4gdGhlICdEZWJ1Z2dlcicgRG9tYWluCit0ZW1wbGF0ZTw+CitzdHJ1Y3Qg
RGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbj4geworICAg
IHR5cGVkZWYgSW50SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uPiBI
YXNoOworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bE9iamVjdHMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5
cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorCisjaW5j
bHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCitu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworbmFtZXNwYWNl
IFRlc3RIZWxwZXJzIHsKKworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRf
dmFsdWVzW10gPSB7CisgICAgIkRpZWQiLAorICAgICJGYWludGVkIiwKKyAgICAiSHVuZ3J5IiwK
K307CisKK1N0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgeworICAgIHJldHVy
biBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb2RlXTsKK30KKworLy8gRW51bXMgaW4gdGhlICdEZWJ1
Z2dlcicgRG9tYWluCisKK3RlbXBsYXRlPD4KK09wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRlYnVnZ2VyOjpSZWFzb24+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlBy
b3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uPihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQor
eworICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsKKyAgICAgICAg
KHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uOjpEaWVkLAorICAg
ICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb246OkZhaW50
ZWQsCisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNv
bjo6SHVuZ3J5LAorICAgIH07CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAzOyArK2kpCisg
ICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFu
dFZhbHVlc1tpXV0pCisgICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRl
YnVnZ2VyOjpSZWFzb24pY29uc3RhbnRWYWx1ZXNbaV07CisKKyAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycworCisKKworfSAvLyBuYW1lc3Bh
Y2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJh
Y2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlw
ZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8d3RmL1BsYXRmb3JtLmg+CisKKyNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNp
bmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKKworCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwor
Cit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xC
YWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2Vu
ZERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1k
ZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xC
YWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgi
CisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW5jbHVkZSA8d3Rm
L0pTT05WYWx1ZXMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK30gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVy
cy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBl
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9y
dCA8d3RmL1BsYXRmb3JtLmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wu
aD4KKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNl
IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAorQGVuZAorCisKKyMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
bi5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2ltcG9ydCAiVGVzdFBy
b3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRl
cm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVu
dGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5z
cGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgorewor
ICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Cit9CisKKy0g
KGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29u
dHJvbGxlciopY29udHJvbGxlcgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYg
KCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAg
ICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZv
aWQpZGVhbGxvYworeworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworQGVuZAorCisKKyMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorCisjIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVy
bmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9y
dCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisj
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
dHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Cisj
aW1wb3J0IDx3dGYvUGxhdGZvcm0uaD4KKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3Rv
Y29sSlNPTk9iamVjdC5oPgorCisKKworCit0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0
UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbikgeworICAgIFRlc3RQcm90b2NvbERlYnVnZ2VyUmVhc29u
RGllZCwKKyAgICBUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbkZhaW50ZWQsCisgICAgVGVzdFBy
b3RvY29sRGVidWdnZXJSZWFzb25IdW5ncnksCit9OworCisKKworCisKKworCisKKyNpbXBvcnQg
PFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4KKwor
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVj
bGFyYXRpb24tYXJyYXktdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNpbXBvcnQgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaW1wb3J0ICJUZXN0UHJv
dG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCisjaW1w
b3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNp
bXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKKworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9u
LWFycmF5LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjaW1wb3J0IDx3dGYvUGxhdGZvcm0uaD4KKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgi
CisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+CisK
K25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+
CitPcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcm
IHZhbHVlKTsKKworaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbERl
YnVnZ2VyUmVhc29uIHZhbHVlKQoreworICAgIHN3aXRjaCh2YWx1ZSkgeworICAgIGNhc2UgVGVz
dFByb3RvY29sRGVidWdnZXJSZWFzb25EaWVkOgorICAgICAgICByZXR1cm4gIkRpZWQiX3M7Cisg
ICAgY2FzZSBUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbkZhaW50ZWQ6CisgICAgICAgIHJldHVy
biAiRmFpbnRlZCJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERlYnVnZ2VyUmVhc29uSHVuZ3J5
OgorICAgICAgICByZXR1cm4gIkh1bmdyeSJfczsKKyAgICB9Cit9CisKK3RlbXBsYXRlPD4KK2lu
bGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbj4gZnJvbVByb3RvY29sU3Ry
aW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09ICJEaWVkIikKKyAg
ICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERlYnVnZ2VyUmVhc29uRGllZDsKKyAgICBpZiAodmFs
dWUgPT0gIkZhaW50ZWQiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGVidWdnZXJSZWFz
b25GYWludGVkOworICAgIGlmICh2YWx1ZSA9PSAiSHVuZ3J5IikKKyAgICAgICAgcmV0dXJuIFRl
c3RQcm90b2NvbERlYnVnZ2VyUmVhc29uSHVuZ3J5OworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
Cit9CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlw
ZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgi
CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBh
cnNlci5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZh
dGUuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGludGVyZmFjZSBUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMgKERlYnVnZ2VyRG9tYWluKQorCisrICh2b2lkKV9wYXJzZUJy
ZWFrcG9pbnRJZDooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7
CisrICh2b2lkKV9wYXJzZVJlYXNvbjooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6
KGlkKXBheWxvYWQ7CisKK0BlbmQKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zIChSdW50aW1lRG9tYWluKQorCisrICh2b2lkKV9wYXJzZU9iamVjdElkOihOU051bWJlciAq
KilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNlTHVja3lO
dW1iZXJzOihOU0FycmF5Lyo8TlNOdW1iZXI+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlk
KXBheWxvYWQ7CisrICh2b2lkKV9wYXJzZUJhYnlOYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiov
ICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworKyAodm9pZClfcGFyc2VOZXdP
YmplY3RzOihOU0FycmF5Lyo8TlNOdW1iZXI+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlk
KXBheWxvYWQ7CisrICh2b2lkKV9wYXJzZU9sZE9iamVjdHM6KE5TQXJyYXkvKjxOU051bWJlcj4q
LyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNlU3Rv
cFJlYXNvbnM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDoo
aWQpcGF5bG9hZDsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zIChEZWJ1Z2dlckRvbWFpbikKKworKyAodm9pZClfcGFyc2VCcmVha3BvaW50SWQ6
KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNOdW1iZXIgY2xhc3NdKTsKKyAg
ICAqb3V0VmFsdWUgPSAoTlNOdW1iZXIgKilwYXlsb2FkOworfQorCisrICh2b2lkKV9wYXJzZVJl
YXNvbjooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAg
ICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBjbGFzc10p
OworICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbERlYnVnZ2VyUmVhc29uPiByZXN1bHQgPSBJbnNw
ZWN0b3I6OmZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbj4ocGF5
bG9hZCk7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfRU5VTV9WQUxVRShyZXN1bHQsIEAi
UmVhc29uIik7CisgICAgKm91dFZhbHVlID0gQChyZXN1bHQudmFsdWUoKSk7Cit9CisKK0BlbmQK
K0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFJ1bnRpbWVEb21h
aW4pCisKKysgKHZvaWQpX3BhcnNlT2JqZWN0SWQ6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21Q
YXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShw
YXlsb2FkLCBbTlNOdW1iZXIgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSAoTlNOdW1iZXIgKilw
YXlsb2FkOworfQorCisrICh2b2lkKV9wYXJzZUx1Y2t5TnVtYmVyczooTlNBcnJheS8qPE5TTnVt
YmVyPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1df
RVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNBcnJheS8qPE5TTnVtYmVyPiovIGNs
YXNzXSk7CisgICAgKm91dFZhbHVlID0gKE5TQXJyYXkvKjxOU051bWJlcj4qLyAqKXBheWxvYWQ7
Cit9CisKKysgKHZvaWQpX3BhcnNlQmFieU5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiop
b3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05f
Rk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gY2xhc3NdKTsKKyAg
ICAqb3V0VmFsdWUgPSAoTlNBcnJheS8qPE5TU3RyaW5nPiovICopcGF5bG9hZDsKK30KKworKyAo
dm9pZClfcGFyc2VOZXdPYmplY3RzOihOU0FycmF5Lyo8TlNOdW1iZXI+Ki8gKiopb3V0VmFsdWUg
ZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9U
WVBFKHBheWxvYWQsIFtOU0FycmF5Lyo8TlNOdW1iZXI+Ki8gY2xhc3NdKTsKKyAgICAqb3V0VmFs
dWUgPSAoTlNBcnJheS8qPE5TTnVtYmVyPiovICopcGF5bG9hZDsKK30KKworKyAodm9pZClfcGFy
c2VPbGRPYmplY3RzOihOU0FycmF5Lyo8TlNOdW1iZXI+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxv
YWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxv
YWQsIFtOU0FycmF5Lyo8TlNOdW1iZXI+Ki8gY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSAoTlNB
cnJheS8qPE5TTnVtYmVyPiovICopcGF5bG9hZDsKK30KKworKyAodm9pZClfcGFyc2VTdG9wUmVh
c29uczooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClw
YXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNB
cnJheS8qPE5TU3RyaW5nPiovIGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gKE5TQXJyYXkvKjxO
U1N0cmluZz4qLyAqKXBheWxvYWQ7Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
VHlwZXMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0
aW9uLWFycmF5LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90
b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2lt
cG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKwor
CisKKworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90
eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWVu
dW0tdHlwZS5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MC4uOTY2OWNmNjJhODIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5
cGUuanNvbi1yZXN1bHQKQEAgLTAsMCArMSwxMDY3IEBACisjIyMgQmVnaW4gRmlsZTogSW5zcGVj
dG9yQmFja2VuZENvbW1hbmRzLmpzLmluCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQorCisvLyBSdW50aW1lCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lz
dGVyRG9tYWluKCJSdW50aW1lIiwgbnVsbCk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51
bSgiUnVudGltZS5GYXJtQW5pbWFscyIsIHtQaWdzOiAiUGlncyIsIENvd3M6ICJDb3dzIiwgQ2F0
czogIkNhdHMiLCBIZW5zOiAiSGVucyJ9KTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVt
KCJSdW50aW1lLlR3b0xlZ2dlZEFuaW1hbHMiLCB7RHVja3M6ICJEdWNrcyIsIEhlbnM6ICJIZW5z
IiwgQ3Jvd3M6ICJDcm93cyIsIEZsYW1pbmdvczogIkZsYW1pbmdvcyJ9KTsKK0luc3BlY3RvckJh
Y2tlbmQuYWN0aXZhdGVEb21haW4oIlJ1bnRpbWUiLCBudWxsKTsKKyMjIyBFbmQgRmlsZTogSW5z
cGVjdG9yQmFja2VuZENvbW1hbmRzLmpzLmluCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJu
YXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL1BsYXRm
b3JtLmg+CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKwor
I2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xh
c3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHZvaWQgc2V0QmFj
a2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsg
bV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KKyAgICBCYWNrZW5k
RGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmRE
aXNwYXRjaGVyLmdldCgpOyB9Citwcml2YXRlOgorICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hl
cj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKK307CisKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
CisjIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMg
QmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1
ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Igewor
Cit0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgorLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5o
PgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQor
I2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNlbmRpZiAvLyBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBU
ZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5k
RGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVj
bGFyYXRpb24tZW51bS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKwor
I2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVl
cy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVj
dG9yIHsKKworY2xhc3MgRnJvbnRlbmRSb3V0ZXI7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgorIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
KworIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYv
UGxhdGZvcm0uaD4KKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29s
VHlwZXMuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVj
dG9yIHsKKworCisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKworCisvLyBGb3J3YXJkIGRlY2xh
cmF0aW9ucy4KK25hbWVzcGFjZSBSdW50aW1lIHsKK2VudW0gY2xhc3MgRmFybUFuaW1hbHM7Citl
bnVtIGNsYXNzIFR3b0xlZ2dlZEFuaW1hbHM7Cit9IC8vIFJ1bnRpbWUKKy8vIEVuZCBvZiBmb3J3
YXJkIGRlY2xhcmF0aW9ucy4KKworCisKKworbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKKworU3Ry
aW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKTsKKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4gU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKFQgZW51bVZhbHVlKQoreworICAgIHJldHVy
biBnZXRFbnVtQ29uc3RhbnRWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KGVudW1WYWx1ZSkpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycworCituYW1lc3BhY2UgUnVudGltZSB7CisKK2Vu
dW0gY2xhc3MgRmFybUFuaW1hbHMgeworICAgIFBpZ3MgPSAwLAorICAgIENvd3MgPSAxLAorICAg
IENhdHMgPSAyLAorICAgIEhlbnMgPSAzLAorfTsgLy8gZW51bSBjbGFzcyBGYXJtQW5pbWFscwor
CitlbnVtIGNsYXNzIFR3b0xlZ2dlZEFuaW1hbHMgeworICAgIER1Y2tzID0gNCwKKyAgICBIZW5z
ID0gMywKKyAgICBDcm93cyA9IDUsCisgICAgRmxhbWluZ29zID0gNiwKK307IC8vIGVudW0gY2xh
c3MgVHdvTGVnZ2VkQW5pbWFscworCit9IC8vIFJ1bnRpbWUKKworCisKK25hbWVzcGFjZSBUZXN0
SGVscGVycyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFByb3RvY29sRW51bVR5cGU+CitPcHRpb25h
bDxQcm90b2NvbEVudW1UeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5n
Jik7CisKKy8vIEVudW1zIGluIHRoZSAnUnVudGltZScgRG9tYWluCit0ZW1wbGF0ZTw+CitPcHRp
b25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpGYXJtQW5pbWFscz4gcGFyc2VFbnVt
VmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxz
Pihjb25zdCBTdHJpbmcmKTsKK3RlbXBsYXRlPD4KK09wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJ
bnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxzPihjb25zdCBTdHJp
bmcmKTsKKworfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKKworfSAvLyBuYW1lc3BhY2UgUHJv
dG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKK25hbWVzcGFjZSBXVEYgeworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7CisKKy8vIEhhc2ggZGVjbGFy
YXRpb25zIGluIHRoZSAnUnVudGltZScgRG9tYWluCit0ZW1wbGF0ZTw+CitzdHJ1Y3QgRGVmYXVs
dEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM+IHsKKyAgICB0
eXBlZGVmIEludEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM+
IEhhc2g7Cit9OwordGVtcGxhdGU8Pgorc3RydWN0IERlZmF1bHRIYXNoPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM+IHsKKyAgICB0eXBlZGVmIEludEhhc2g8
SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFscz4gSGFzaDsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdURgorIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3Rz
LmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorCisjaW5jbHVkZSA8d3Rm
L09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworbmFtZXNwYWNlIFRlc3RIZWxw
ZXJzIHsKKworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFsdWVzW10g
PSB7CisgICAgIlBpZ3MiLAorICAgICJDb3dzIiwKKyAgICAiQ2F0cyIsCisgICAgIkhlbnMiLAor
ICAgICJEdWNrcyIsCisgICAgIkNyb3dzIiwKKyAgICAiRmxhbWluZ29zIiwKK307CisKK1N0cmlu
ZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgeworICAgIHJldHVybiBlbnVtX2NvbnN0
YW50X3ZhbHVlc1tjb2RlXTsKK30KKworLy8gRW51bXMgaW4gdGhlICdSdW50aW1lJyBEb21haW4K
KwordGVtcGxhdGU8PgorT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFy
bUFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpS
dW50aW1lOjpGYXJtQW5pbWFscz4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKK3sKKyAg
ICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7CisgICAgICAgIChzaXpl
X3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM6OlBpZ3MsCisgICAg
ICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM6OkNv
d3MsCisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFu
aW1hbHM6OkNhdHMsCisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGlt
ZTo6RmFybUFuaW1hbHM6OkhlbnMsCisgICAgfTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IDQ7ICsraSkKKyAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFs
dWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKKyAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQ
cm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHMpY29uc3RhbnRWYWx1ZXNbaV07CisKKyAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworfQorCit0ZW1wbGF0ZTw+CitPcHRpb25hbDxJbnNwZWN0b3I6
OlByb3RvY29sOjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxzPiBwYXJzZUVudW1WYWx1ZUZyb21T
dHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFscz4oY29u
c3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKK3sKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNv
bnN0YW50VmFsdWVzW10gPSB7CisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6
UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFsczo6RHVja3MsCisgICAgICAgIChzaXplX3QpSW5zcGVj
dG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFsczo6SGVucywKKyAgICAgICAg
KHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxzOjpD
cm93cywKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUd29M
ZWdnZWRBbmltYWxzOjpGbGFtaW5nb3MsCisgICAgfTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IDQ7ICsraSkKKyAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRf
dmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKKyAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9y
OjpQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFscyljb25zdGFudFZhbHVlc1tpXTsK
KworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RIZWxw
ZXJzCisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorCisjIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPHd0Zi9QbGF0
Zm9ybS5oPgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCisKKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisj
aW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgIlRl
c3RQcm90b2NvbEludGVybmFsLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zLmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKworbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbi5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1k
ZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaW1wb3J0IDx3dGYvUGxhdGZvcm0uaD4KKworI2ltcG9ydCA8V2ViSW5z
cGVjdG9yL1Rlc3RQcm90b2NvbC5oPgorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVm
YXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0
CitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKwor
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24uaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwu
aCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Cisj
aW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKwor
dXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24KK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9j
b250cm9sbGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdt
ZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1
cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NF
UlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVy
biBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9
CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0K
KworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5q
c29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5oIgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNl
IEluc3BlY3RvcjsKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hl
cnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxGb3VuZGF0aW9u
L0ZvdW5kYXRpb24uaD4KKyNpbXBvcnQgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaW1wb3J0IDxXZWJJ
bnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+CisKKworCisKK3R5cGVkZWYgTlNfRU5V
TShOU0ludGVnZXIsIFRlc3RQcm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFscykgeworICAgIFRlc3RQ
cm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFsc1BpZ3MsCisgICAgVGVzdFByb3RvY29sUnVudGltZUZh
cm1BbmltYWxzQ293cywKKyAgICBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHNDYXRzLAor
ICAgIFRlc3RQcm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFsc0hlbnMsCit9OworCit0eXBlZGVmIE5T
X0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFscykgewor
ICAgIFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzRHVja3MsCisgICAgVGVzdFBy
b3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHNIZW5zLAorICAgIFRlc3RQcm90b2NvbFJ1bnRp
bWVUd29MZWdnZWRBbmltYWxzQ3Jvd3MsCisgICAgVGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dl
ZEFuaW1hbHNGbGFtaW5nb3MsCit9OworCisKKworCisKKworCisKKyNpbXBvcnQgPFdlYkluc3Bl
Y3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4KKworIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2wuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJu
YWwuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24t
ZW51bS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI2ltcG9ydCA8d3RmL1BsYXRmb3JtLmg+CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgor
I2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKKyNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8d3Rm
L0pTT05WYWx1ZXMuaD4KKworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5h
bC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBl
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9y
dCA8d3RmL1BsYXRmb3JtLmg+CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCA8
V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgorCituYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgorT3B0aW9uYWw8
T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7CisK
K2lubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFu
aW1hbHMgdmFsdWUpCit7CisgICAgc3dpdGNoKHZhbHVlKSB7CisgICAgY2FzZSBUZXN0UHJvdG9j
b2xSdW50aW1lRmFybUFuaW1hbHNQaWdzOgorICAgICAgICByZXR1cm4gIlBpZ3MiX3M7CisgICAg
Y2FzZSBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHNDb3dzOgorICAgICAgICByZXR1cm4g
IkNvd3MiX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHNDYXRzOgor
ICAgICAgICByZXR1cm4gIkNhdHMiX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xSdW50aW1lRmFy
bUFuaW1hbHNIZW5zOgorICAgICAgICByZXR1cm4gIkhlbnMiX3M7CisgICAgfQorfQorCit0ZW1w
bGF0ZTw+CitpbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzPiBm
cm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUg
PT0gIlBpZ3MiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxz
UGlnczsKKyAgICBpZiAodmFsdWUgPT0gIkNvd3MiKQorICAgICAgICByZXR1cm4gVGVzdFByb3Rv
Y29sUnVudGltZUZhcm1BbmltYWxzQ293czsKKyAgICBpZiAodmFsdWUgPT0gIkNhdHMiKQorICAg
ICAgICByZXR1cm4gVGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzQ2F0czsKKyAgICBpZiAo
dmFsdWUgPT0gIkhlbnMiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUnVudGltZUZhcm1B
bmltYWxzSGVuczsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCitpbmxpbmUgU3RyaW5n
IHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHMgdmFs
dWUpCit7CisgICAgc3dpdGNoKHZhbHVlKSB7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xSdW50aW1l
VHdvTGVnZ2VkQW5pbWFsc0R1Y2tzOgorICAgICAgICByZXR1cm4gIkR1Y2tzIl9zOworICAgIGNh
c2UgVGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHNIZW5zOgorICAgICAgICByZXR1
cm4gIkhlbnMiX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFs
c0Nyb3dzOgorICAgICAgICByZXR1cm4gIkNyb3dzIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29s
UnVudGltZVR3b0xlZ2dlZEFuaW1hbHNGbGFtaW5nb3M6CisgICAgICAgIHJldHVybiAiRmxhbWlu
Z29zIl9zOworICAgIH0KK30KKwordGVtcGxhdGU8PgoraW5saW5lIE9wdGlvbmFsPFRlc3RQcm90
b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gIkR1Y2tzIikKKyAgICAgICAgcmV0dXJu
IFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzRHVja3M7CisgICAgaWYgKHZhbHVl
ID09ICJIZW5zIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRB
bmltYWxzSGVuczsKKyAgICBpZiAodmFsdWUgPT0gIkNyb3dzIikKKyAgICAgICAgcmV0dXJuIFRl
c3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzQ3Jvd3M7CisgICAgaWYgKHZhbHVlID09
ICJGbGFtaW5nb3MiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dl
ZEFuaW1hbHNGbGFtaW5nb3M7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKworfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5t
bQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51
bS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisKKyNpbXBvcnQgIlRlc3RQ
cm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgorI2ltcG9ydCA8
V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKwordXNpbmcgbmFt
ZXNwYWNlIEluc3BlY3RvcjsKKworQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMgKFJ1bnRpbWVEb21haW4pCisKKysgKHZvaWQpX3BhcnNlRmFybUFuaW1hbHM6KE5TTnVtYmVy
ICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworKyAodm9pZClfcGFyc2VUd29M
ZWdnZWRBbmltYWxzOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9h
ZDsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
IChSdW50aW1lRG9tYWluKQorCisrICh2b2lkKV9wYXJzZUZhcm1BbmltYWxzOihOU051bWJlciAq
KilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TU3RyaW5nIGNsYXNzXSk7CisgICAgT3B0aW9uYWw8
VGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzPiByZXN1bHQgPSBJbnNwZWN0b3I6OmZyb21Q
cm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHM+KHBheWxvYWQpOwor
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX0VOVU1fVkFMVUUocmVzdWx0LCBAIkZhcm1Bbmlt
YWxzIik7CisgICAgKm91dFZhbHVlID0gQChyZXN1bHQudmFsdWUoKSk7Cit9CisKKysgKHZvaWQp
X3BhcnNlVHdvTGVnZ2VkQW5pbWFsczooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6
KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQs
IFtOU1N0cmluZyBjbGFzc10pOworICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbFJ1bnRpbWVUd29M
ZWdnZWRBbmltYWxzPiByZXN1bHQgPSBJbnNwZWN0b3I6OmZyb21Qcm90b2NvbFN0cmluZzxUZXN0
UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFscz4ocGF5bG9hZCk7CisgICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9CQURfRU5VTV9WQUxVRShyZXN1bHQsIEAiVHdvTGVnZ2VkQW5pbWFscyIpOwor
ICAgICpvdXRWYWx1ZSA9IEAocmVzdWx0LnZhbHVlKCkpOworfQorCitAZW5kCisKKworIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKworIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbFR5cGVzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
dHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisj
aW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPFdlYkluc3Bl
Y3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisjaW1wb3J0IDx3dGYvQXNzZXJ0
aW9ucy5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIElu
c3BlY3RvcjsKKworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4
cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbi1yZXN1bHQgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNs
YXJhdGlvbi1vYmplY3QtdHlwZS5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMC4uNjk0NDgwMmVkN2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJh
dGlvbi1vYmplY3QtdHlwZS5qc29uLXJlc3VsdApAQCAtMCwwICsxLDI0MzIgQEAKKyMjIyBCZWdp
biBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMuaW4KKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworLy8gRGF0YWJhc2UKK0luc3Bl
Y3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIkRhdGFiYXNlIiwgbnVsbCk7CitJbnNwZWN0b3JC
YWNrZW5kLnJlZ2lzdGVyRW51bSgiRGF0YWJhc2UuTW91c2VCdXR0b24iLCB7Tm9uZTogIk5vbmUi
LCBMZWZ0OiAiTGVmdCIsIE1pZGRsZTogIk1pZGRsZSIsIFJpZ2h0OiAiUmlnaHQifSk7CitJbnNw
ZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiRGF0YWJhc2UuT3B0aW9uYWxQYXJhbWV0ZXJCdW5k
bGVEaXJlY3Rpb25hbGl0eSIsIHtMVFI6ICJMVFIiLCBSVEw6ICJSVEwifSk7CitJbnNwZWN0b3JC
YWNrZW5kLnJlZ2lzdGVyRW51bSgiRGF0YWJhc2UuUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxp
dHkiLCB7TFRSOiAiTFRSIiwgUlRMOiAiUlRMIn0pOworSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0
ZURvbWFpbigiRGF0YWJhc2UiLCBudWxsKTsKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2Vu
ZENvbW1hbmRzLmpzLmluCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERp
c3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xh
cmF0aW9uLW9iamVjdC10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKwor
I2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCisjaW5jbHVkZSAi
VGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZy
b250ZW5kUm91dGVyLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBBbHRlcm5h
dGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0
Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmRE
aXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQorICAgIEJhY2tlbmREaXNwYXRjaGVy
KiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIu
Z2V0KCk7IH0KK3ByaXZhdGU6CisgICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tl
bmREaXNwYXRjaGVyOworfTsKKworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNl
bmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyMjIyBFbmQg
RmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxl
OiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYv
UGxhdGZvcm0uaD4KKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRl
ZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMj
IyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBU
ZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
VGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2lu
Y2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorI2luY2x1
ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNlbmRpZiAvLyBFTkFCTEUo
SU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworbmFtZXNwYWNlIEluc3BlY3RvciB7
CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0QmFj
a2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0
Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRp
b24tb2JqZWN0LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaW5j
bHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Ig
eworCitjbGFzcyBGcm9udGVuZFJvdXRlcjsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisj
IyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6
IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisK
KyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYv
UGxhdGZvcm0uaD4KKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29s
VHlwZXMuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVj
dG9yIHsKKworCisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKworCisvLyBGb3J3YXJkIGRlY2xh
cmF0aW9ucy4KK25hbWVzcGFjZSBEYXRhYmFzZSB7CitjbGFzcyBFcnJvcjsKK2NsYXNzIE9wdGlv
bmFsUGFyYW1ldGVyQnVuZGxlOworY2xhc3MgUGFyYW1ldGVyQnVuZGxlOworY2xhc3MgT2JqZWN0
V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0czsKK2NsYXNzIER1bW15T2JqZWN0OworZW51bSBjbGFz
cyBNb3VzZUJ1dHRvbjsKK30gLy8gRGF0YWJhc2UKKworbmFtZXNwYWNlIFRlc3QgeworY2xhc3Mg
UGFyYW1ldGVyQnVuZGxlOworfSAvLyBUZXN0CisvLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlv
bnMuCisKKworLy8gVHlwZWRlZnMuCituYW1lc3BhY2UgRGF0YWJhc2UgewordHlwZWRlZiBKU09O
OjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gRXJyb3JMaXN0
OworfSAvLyBEYXRhYmFzZQorLy8gRW5kIG9mIHR5cGVkZWZzLgorCituYW1lc3BhY2UgVGVzdEhl
bHBlcnMgeworCitTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpOworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFsdWUp
Cit7CisgICAgcmV0dXJuIGdldEVudW1Db25zdGFudFZhbHVlKHN0YXRpY19jYXN0PGludD4oZW51
bVZhbHVlKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCisKK25hbWVzcGFjZSBE
YXRhYmFzZSB7CisKKy8qIERhdGFiYXNlIGVycm9yLiAqLworY2xhc3MgRXJyb3IgOiBwdWJsaWMg
SlNPTjo6T2JqZWN0QmFzZSB7CitwdWJsaWM6CisgICAgZW51bSB7CisgICAgICAgIE5vRmllbGRz
U2V0ID0gMCwKKyAgICAgICAgTWVzc2FnZVNldCA9IDEgPDwgMCwKKyAgICAgICAgQ29kZVNldCA9
IDEgPDwgMSwKKyAgICAgICAgQWxsRmllbGRzU2V0ID0gKE1lc3NhZ2VTZXQgfCBDb2RlU2V0KQor
ICAgIH07CisKKyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CisgICAgY2xhc3MgQnVpbGRlciB7Cisg
ICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7CisKKyAg
ICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRl
KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxk
ZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcihS
ZWY8LypFcnJvciovSlNPTjo6T2JqZWN0PiYmIG9iamVjdCkKKyAgICAgICAgICAgIDogbV9yZXN1
bHQoV1RGTW92ZShvYmplY3QpKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VS
VChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRl
KTsKKyAgICAgICAgfQorICAgICAgICBmcmllbmQgY2xhc3MgRXJyb3I7CisgICAgcHVibGljOgor
CisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2FnZShjb25zdCBT
dHJpbmcmIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgTWVzc2FnZVNldCksIHByb3BlcnR5X21lc3NhZ2VfYWxyZWFkeV9zZXQpOworICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibWVzc2FnZSJfcywgdmFsdWUpOworICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxNZXNzYWdlU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAg
QnVpbGRlcjxTVEFURSB8IENvZGVTZXQ+JiBzZXRDb2RlKGludCB2YWx1ZSkKKyAgICAgICAgewor
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENvZGVTZXQpLCBwcm9wZXJ0eV9j
b2RlX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2VyKCJjb2Rl
Il9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvZGVTZXQ+KCk7Cisg
ICAgICAgIH0KKworICAgICAgICBSZWY8RXJyb3I+IHJlbGVhc2UoKQorICAgICAgICB7CisgICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19u
b3RfcmVhZHkpOworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEVycm9yKSA9PSBz
aXplb2YoSlNPTjo6T2JqZWN0KSwgY2Fubm90X2Nhc3QpOworCisgICAgICAgICAgICBSZWY8SlNP
Tjo6T2JqZWN0PiBqc29uUmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKKyAgICAg
ICAgICAgIGF1dG8gcmVzdWx0ID0gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8RXJyb3I+
Kj4oJmpzb25SZXN1bHQpKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0K
KyAgICB9OworCisgICAgLyoKKyAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CisgICAgICog
UmVmPEVycm9yPiByZXN1bHQgPSBFcnJvcjo6Y3JlYXRlKCkKKyAgICAgKiAgICAgLnNldE1lc3Nh
Z2UoLi4uKQorICAgICAqICAgICAuc2V0Q29kZSguLi4pCisgICAgICogICAgIC5yZWxlYXNlKCk7
CisgICAgICovCisgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCisgICAg
eworICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKSk7CisgICAgfQorfTsKKworLyogRW51bWVyYXRlcyBkaWZmZXJlbnQgbW91c2UgYnV0dG9u
cyB0aGF0IGNhbiBiZSB1c2VkLiAqLworZW51bSBjbGFzcyBNb3VzZUJ1dHRvbiB7CisgICAgTm9u
ZSA9IDAsCisgICAgTGVmdCA9IDEsCisgICAgTWlkZGxlID0gMiwKKyAgICBSaWdodCA9IDMsCit9
OyAvLyBlbnVtIGNsYXNzIE1vdXNlQnV0dG9uCisKK2NsYXNzIE9wdGlvbmFsUGFyYW1ldGVyQnVu
ZGxlIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgeworcHVibGljOgorICAgIC8vIE5hbWVkIGFm
dGVyIHByb3BlcnR5IG5hbWUgJ2RpcmVjdGlvbmFsaXR5JyB3aGlsZSBnZW5lcmF0aW5nIE9wdGlv
bmFsUGFyYW1ldGVyQnVuZGxlLgorICAgIGVudW0gY2xhc3MgRGlyZWN0aW9uYWxpdHkgeworICAg
ICAgICBMVFIgPSA0LAorICAgICAgICBSVEwgPSA1LAorICAgIH07IC8vIGVudW0gY2xhc3MgRGly
ZWN0aW9uYWxpdHkKKyAgICBlbnVtIHsKKyAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAorICAgICAg
ICBBbGxGaWVsZHNTZXQgPSAwCisgICAgfTsKKworICAgIHRlbXBsYXRlPGludCBTVEFURT4KKyAg
ICBjbGFzcyBCdWlsZGVyIHsKKyAgICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiBtX3Jlc3VsdDsKKworICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFU
RSB8IFNURVA+JiBjYXN0U3RhdGUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKnJl
aW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CisgICAgICAgIH0K
KworICAgICAgICBCdWlsZGVyKFJlZjwvKk9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlKi9KU09OOjpP
YmplY3Q+JiYgb2JqZWN0KQorICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkp
CisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRz
U2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAgICAgICB9CisgICAg
ICAgIGZyaWVuZCBjbGFzcyBPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTsKKyAgICBwdWJsaWM6CisK
KyAgICAgICAgUmVmPE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlPiByZWxlYXNlKCkKKyAgICAgICAg
eworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1
bHRfaXNfbm90X3JlYWR5KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihPcHRp
b25hbFBhcmFtZXRlckJ1bmRsZSkgPT0gc2l6ZW9mKEpTT046Ok9iamVjdCksIGNhbm5vdF9jYXN0
KTsKKworICAgICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4ganNvblJlc3VsdCA9IG1fcmVzdWx0
LnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFdURk1vdmUoKnJl
aW50ZXJwcmV0X2Nhc3Q8UmVmPE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlPio+KCZqc29uUmVzdWx0
KSk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgfTsKKworICAg
IC8qCisgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgorICAgICAqIFJlZjxPcHRpb25hbFBh
cmFtZXRlckJ1bmRsZT4gcmVzdWx0ID0gT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU6OmNyZWF0ZSgp
CisgICAgICogICAgIC5yZWxlYXNlKCk7CisgICAgICovCisgICAgc3RhdGljIEJ1aWxkZXI8Tm9G
aWVsZHNTZXQ+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxk
c1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7CisgICAgfQorCisgICAgdm9pZCBzZXRDb2x1
bW5OYW1lcyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIEpTT046Ok9iamVjdEJhc2U6OnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgV1RGTW92ZSh2
YWx1ZSkpOworICAgIH0KKworICAgIHZvaWQgc2V0QnV0dG9ucyhSZWZQdHI8SlNPTjo6QXJyYXlP
ZjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b24+PiB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldEFycmF5KCJidXR0b25zIl9zLCBXVEZN
b3ZlKHZhbHVlKSk7CisgICAgfQorCisgICAgdm9pZCBzZXREaXJlY3Rpb25hbGl0eShEaXJlY3Rp
b25hbGl0eSB2YWx1ZSkKKyAgICB7CisgICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldFN0cmlu
ZygiZGlyZWN0aW9uYWxpdHkiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpn
ZXRFbnVtQ29uc3RhbnRWYWx1ZSh2YWx1ZSkpOworICAgIH0KKworICAgIHZvaWQgc2V0Tm90ZXMo
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNl
dFN0cmluZygibm90ZXMiX3MsIHZhbHVlKTsKKyAgICB9CisKKyAgICB2b2lkIHNldFRpbWVzdGFt
cChkb3VibGUgdmFsdWUpCisgICAgeworICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXREb3Vi
bGUoInRpbWVzdGFtcCJfcywgdmFsdWUpOworICAgIH0KKworICAgIHZvaWQgc2V0VmFsdWVzKFJl
ZlB0cjxKU09OOjpPYmplY3Q+IHZhbHVlKQorICAgIHsKKyAgICAgICAgSlNPTjo6T2JqZWN0QmFz
ZTo6c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFdURk1vdmUodmFsdWUpKTsKKyAgICB9CisKKyAgICB2
b2lkIHNldFBheWxvYWQoUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZSkKKyAgICB7CisgICAgICAg
IEpTT046Ok9iamVjdEJhc2U6OnNldFZhbHVlKCJwYXlsb2FkIl9zLCBXVEZNb3ZlKHZhbHVlKSk7
CisgICAgfQorCisgICAgdm9pZCBzZXRFcnJvcihSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6OkVycm9yPiB2YWx1ZSkKKyAgICB7CisgICAgICAgIEpTT046Ok9iamVjdEJhc2U6
OnNldE9iamVjdCgiZXJyb3IiX3MsIFdURk1vdmUodmFsdWUpKTsKKyAgICB9CisKKyAgICB2b2lk
IHNldEVycm9yTGlzdChSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9y
TGlzdD4gdmFsdWUpCisgICAgeworICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRBcnJheSgi
ZXJyb3JMaXN0Il9zLCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgfQorfTsKKworY2xhc3MgUGFyYW1l
dGVyQnVuZGxlIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgeworcHVibGljOgorICAgIC8vIE5h
bWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ2RpcmVjdGlvbmFsaXR5JyB3aGlsZSBnZW5lcmF0aW5n
IFBhcmFtZXRlckJ1bmRsZS4KKyAgICBlbnVtIGNsYXNzIERpcmVjdGlvbmFsaXR5IHsKKyAgICAg
ICAgTFRSID0gNCwKKyAgICAgICAgUlRMID0gNSwKKyAgICB9OyAvLyBlbnVtIGNsYXNzIERpcmVj
dGlvbmFsaXR5CisgICAgZW51bSB7CisgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKKyAgICAgICAg
Q29sdW1uTmFtZXNTZXQgPSAxIDw8IDAsCisgICAgICAgIEJ1dHRvbnNTZXQgPSAxIDw8IDEsCisg
ICAgICAgIERpcmVjdGlvbmFsaXR5U2V0ID0gMSA8PCAyLAorICAgICAgICBOb3Rlc1NldCA9IDEg
PDwgMywKKyAgICAgICAgVGltZXN0YW1wU2V0ID0gMSA8PCA0LAorICAgICAgICBWYWx1ZXNTZXQg
PSAxIDw8IDUsCisgICAgICAgIFBheWxvYWRTZXQgPSAxIDw8IDYsCisgICAgICAgIEVycm9yU2V0
ID0gMSA8PCA3LAorICAgICAgICBFcnJvckxpc3RTZXQgPSAxIDw8IDgsCisgICAgICAgIEFsbEZp
ZWxkc1NldCA9IChDb2x1bW5OYW1lc1NldCB8IEJ1dHRvbnNTZXQgfCBEaXJlY3Rpb25hbGl0eVNl
dCB8IE5vdGVzU2V0IHwgVGltZXN0YW1wU2V0IHwgVmFsdWVzU2V0IHwgUGF5bG9hZFNldCB8IEVy
cm9yU2V0IHwgRXJyb3JMaXN0U2V0KQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+
CisgICAgY2xhc3MgQnVpbGRlciB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPEpTT046
Ok9iamVjdD4gbV9yZXN1bHQ7CisKKyAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8
U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
ICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOworICAgICAg
ICB9CisKKyAgICAgICAgQnVpbGRlcihSZWY8LypQYXJhbWV0ZXJCdW5kbGUqL0pTT046Ok9iamVj
dD4mJiBvYmplY3QpCisgICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKKyAg
ICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQs
IGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CisgICAgICAgIH0KKyAgICAgICAg
ZnJpZW5kIGNsYXNzIFBhcmFtZXRlckJ1bmRsZTsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgQnVp
bGRlcjxTVEFURSB8IENvbHVtbk5hbWVzU2V0PiYgc2V0Q29sdW1uTmFtZXMoUmVmUHRyPEpTT046
OkFycmF5T2Y8U3RyaW5nPj4gdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKCEoU1RBVEUgJiBDb2x1bW5OYW1lc1NldCksIHByb3BlcnR5X2NvbHVtbk5hbWVzX2Fs
cmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMi
X3MsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29sdW1uTmFtZXNTZXQ+
KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQnV0dG9uc1NldD4mIHNl
dEJ1dHRvbnMoUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6Ok1vdXNlQnV0dG9uPj4gdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKCEoU1RBVEUgJiBCdXR0b25zU2V0KSwgcHJvcGVydHlfYnV0dG9uc19hbHJlYWR5X3Nl
dCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoImJ1dHRvbnMiX3MsIHZhbHVlKTsK
KyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8QnV0dG9uc1NldD4oKTsKKyAgICAgICAgfQor
CisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBEaXJlY3Rpb25hbGl0eVNldD4mIHNldERpcmVjdGlv
bmFsaXR5KERpcmVjdGlvbmFsaXR5IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVCghKFNUQVRFICYgRGlyZWN0aW9uYWxpdHlTZXQpLCBwcm9wZXJ0eV9kaXJlY3Rp
b25hbGl0eV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJk
aXJlY3Rpb25hbGl0eSJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVu
dW1Db25zdGFudFZhbHVlKHZhbHVlKSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPERp
cmVjdGlvbmFsaXR5U2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8
IE5vdGVzU2V0PiYgc2V0Tm90ZXMoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE5vdGVzU2V0KSwgcHJvcGVydHlfbm90
ZXNfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibm90ZXMi
X3MsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Tm90ZXNTZXQ+KCk7Cisg
ICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVGltZXN0YW1wU2V0PiYgc2V0VGlt
ZXN0YW1wKGRvdWJsZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIFRpbWVzdGFtcFNldCksIHByb3BlcnR5X3RpbWVzdGFtcF9hbHJlYWR5X3Nl
dCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIHZhbHVl
KTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VGltZXN0YW1wU2V0PigpOworICAgICAg
ICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFZhbHVlc1NldD4mIHNldFZhbHVlcyhSZWZQ
dHI8SlNPTjo6T2JqZWN0PiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoIShTVEFURSAmIFZhbHVlc1NldCksIHByb3BlcnR5X3ZhbHVlc19hbHJlYWR5X3NldCk7
CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIHZhbHVlKTsKKyAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VmFsdWVzU2V0PigpOworICAgICAgICB9CisKKyAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IFBheWxvYWRTZXQ+JiBzZXRQYXlsb2FkKFJlZlB0cjxKU09O
OjpWYWx1ZT4gdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBQYXlsb2FkU2V0KSwgcHJvcGVydHlfcGF5bG9hZF9hbHJlYWR5X3NldCk7CisgICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIHZhbHVlKTsKKyAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8UGF5bG9hZFNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAg
IEJ1aWxkZXI8U1RBVEUgfCBFcnJvclNldD4mIHNldEVycm9yKFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBD
T01QSUxFX0FTU0VSVCghKFNUQVRFICYgRXJyb3JTZXQpLCBwcm9wZXJ0eV9lcnJvcl9hbHJlYWR5
X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJlcnJvciJfcywgdmFsdWUp
OworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxFcnJvclNldD4oKTsKKyAgICAgICAgfQor
CisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBFcnJvckxpc3RTZXQ+JiBzZXRFcnJvckxpc3QoUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvckxpc3Q+IHZhbHVlKQorICAg
ICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRXJyb3JMaXN0U2V0
KSwgcHJvcGVydHlfZXJyb3JMaXN0X2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXRBcnJheSgiZXJyb3JMaXN0Il9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2Fz
dFN0YXRlPEVycm9yTGlzdFNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIFJlZjxQYXJhbWV0
ZXJCdW5kbGU+IHJlbGVhc2UoKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VS
VChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOworICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFBhcmFtZXRlckJ1bmRsZSkgPT0gc2l6ZW9mKEpTT046
Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsKKworICAgICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4g
anNvblJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgICAgICBhdXRv
IHJlc3VsdCA9IFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPFBhcmFtZXRlckJ1bmRsZT4q
PigmanNvblJlc3VsdCkpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQor
ICAgIH07CisKKyAgICAvKgorICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKKyAgICAgKiBS
ZWY8UGFyYW1ldGVyQnVuZGxlPiByZXN1bHQgPSBQYXJhbWV0ZXJCdW5kbGU6OmNyZWF0ZSgpCisg
ICAgICogICAgIC5zZXRDb2x1bW5OYW1lcyguLi4pCisgICAgICogICAgIC5zZXRCdXR0b25zKC4u
LikKKyAgICAgKiAgICAgLnNldERpcmVjdGlvbmFsaXR5KC4uLikKKyAgICAgKiAgICAgLnNldE5v
dGVzKC4uLikKKyAgICAgKiAgICAgLnNldFRpbWVzdGFtcCguLi4pCisgICAgICogICAgIC5zZXRW
YWx1ZXMoLi4uKQorICAgICAqICAgICAuc2V0UGF5bG9hZCguLi4pCisgICAgICogICAgIC5zZXRF
cnJvciguLi4pCisgICAgICogICAgIC5zZXRFcnJvckxpc3QoLi4uKQorICAgICAqICAgICAucmVs
ZWFzZSgpOworICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVj
dDo6Y3JlYXRlKCkpOworICAgIH0KK307CisKKy8qIENvbmZsaWN0ZWQgbmFtZXMgbWF5IGNhdXNl
IGdlbmVyYXRlZCBnZXR0ZXJzL3NldHRlcnMgdG8gY2xhc2ggd2l0aCBidWlsdC1pbiBJbnNwZWN0
b3JPYmplY3QgbWV0aG9kcy4gKi8KK2NsYXNzIE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGlj
dHMgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CitwdWJsaWM6CisgICAgZW51bSB7CisgICAg
ICAgIE5vRmllbGRzU2V0ID0gMCwKKyAgICAgICAgSW50ZWdlclNldCA9IDEgPDwgMCwKKyAgICAg
ICAgQXJyYXlTZXQgPSAxIDw8IDEsCisgICAgICAgIFN0cmluZ1NldCA9IDEgPDwgMiwKKyAgICAg
ICAgVmFsdWVTZXQgPSAxIDw8IDMsCisgICAgICAgIE9iamVjdFNldCA9IDEgPDwgNCwKKyAgICAg
ICAgQWxsRmllbGRzU2V0ID0gKEludGVnZXJTZXQgfCBBcnJheVNldCB8IFN0cmluZ1NldCB8IFZh
bHVlU2V0IHwgT2JqZWN0U2V0KQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+Cisg
ICAgY2xhc3MgQnVpbGRlciB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPEpTT046Ok9i
amVjdD4gbV9yZXN1bHQ7CisKKyAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RB
VEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICpy
ZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOworICAgICAgICB9
CisKKyAgICAgICAgQnVpbGRlcihSZWY8LypPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3Rz
Ki9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQorICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3Zl
KG9iamVjdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09
IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAgICAg
ICB9CisgICAgICAgIGZyaWVuZCBjbGFzcyBPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3Rz
OworICAgIHB1YmxpYzoKKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgSW50ZWdlclNldD4mIHNl
dEludGVnZXIoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIEludGVnZXJTZXQpLCBwcm9wZXJ0eV9pbnRlZ2VyX2FscmVh
ZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImludGVnZXIiX3MsIHZh
bHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8SW50ZWdlclNldD4oKTsKKyAgICAg
ICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBBcnJheVNldD4mIHNldEFycmF5KGNvbnN0
IFN0cmluZyYgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBBcnJheVNldCksIHByb3BlcnR5X2FycmF5X2FscmVhZHlfc2V0KTsKKyAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImFycmF5Il9zLCB2YWx1ZSk7CisgICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPEFycmF5U2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRl
cjxTVEFURSB8IFN0cmluZ1NldD4mIHNldFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQorICAg
ICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU3RyaW5nU2V0KSwg
cHJvcGVydHlfc3RyaW5nX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRT
dHJpbmcoInN0cmluZyJfcywgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxT
dHJpbmdTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVmFsdWVT
ZXQ+JiBzZXRWYWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVmFsdWVTZXQpLCBwcm9wZXJ0eV92YWx1ZV9hbHJl
YWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ2YWx1ZSJfcywgdmFs
dWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxWYWx1ZVNldD4oKTsKKyAgICAgICAg
fQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBPYmplY3RTZXQ+JiBzZXRPYmplY3QoY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIE9iamVjdFNldCksIHByb3BlcnR5X29iamVjdF9hbHJlYWR5X3NldCk7CisgICAgICAg
ICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJvYmplY3QiX3MsIHZhbHVlKTsKKyAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8T2JqZWN0U2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgUmVm
PE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHM+IHJlbGVhc2UoKQorICAgICAgICB7Cisg
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9p
c19ub3RfcmVhZHkpOworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKE9iamVjdFdp
dGhQcm9wZXJ0eU5hbWVDb25mbGljdHMpID09IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5ub3Rf
Y2FzdCk7CisKKyAgICAgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25SZXN1bHQgPSBtX3Jl
c3VsdC5yZWxlYXNlTm9uTnVsbCgpOworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBXVEZNb3Zl
KCpyZWludGVycHJldF9jYXN0PFJlZjxPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzPio+
KCZqc29uUmVzdWx0KSk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9Cisg
ICAgfTsKKworICAgIC8qCisgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgorICAgICAqIFJl
ZjxPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzPiByZXN1bHQgPSBPYmplY3RXaXRoUHJv
cGVydHlOYW1lQ29uZmxpY3RzOjpjcmVhdGUoKQorICAgICAqICAgICAuc2V0SW50ZWdlciguLi4p
CisgICAgICogICAgIC5zZXRBcnJheSguLi4pCisgICAgICogICAgIC5zZXRTdHJpbmcoLi4uKQor
ICAgICAqICAgICAuc2V0VmFsdWUoLi4uKQorICAgICAqICAgICAuc2V0T2JqZWN0KC4uLikKKyAg
ICAgKiAgICAgLnJlbGVhc2UoKTsKKyAgICAgKi8KKyAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxk
c1NldD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0
PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICB9Cit9OworCit9IC8vIERhdGFiYXNlCisK
K25hbWVzcGFjZSBUZXN0IHsKKworY2xhc3MgUGFyYW1ldGVyQnVuZGxlIDogcHVibGljIEpTT046
Ok9iamVjdEJhc2UgeworcHVibGljOgorICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUg
J2RpcmVjdGlvbmFsaXR5JyB3aGlsZSBnZW5lcmF0aW5nIFBhcmFtZXRlckJ1bmRsZS4KKyAgICBl
bnVtIGNsYXNzIERpcmVjdGlvbmFsaXR5IHsKKyAgICAgICAgTFRSID0gNCwKKyAgICAgICAgUlRM
ID0gNSwKKyAgICB9OyAvLyBlbnVtIGNsYXNzIERpcmVjdGlvbmFsaXR5CisgICAgZW51bSB7Cisg
ICAgICAgIE5vRmllbGRzU2V0ID0gMCwKKyAgICAgICAgRGlyZWN0aW9uYWxpdHlTZXQgPSAxIDw8
IDAsCisgICAgICAgIEJ1dHRvbnNTZXQgPSAxIDw8IDEsCisgICAgICAgIENvbHVtbk5hbWVzU2V0
ID0gMSA8PCAyLAorICAgICAgICBOb3Rlc1NldCA9IDEgPDwgMywKKyAgICAgICAgVGltZXN0YW1w
U2V0ID0gMSA8PCA0LAorICAgICAgICBWYWx1ZXNTZXQgPSAxIDw8IDUsCisgICAgICAgIFBheWxv
YWRTZXQgPSAxIDw8IDYsCisgICAgICAgIEVycm9yU2V0ID0gMSA8PCA3LAorICAgICAgICBBbGxG
aWVsZHNTZXQgPSAoRGlyZWN0aW9uYWxpdHlTZXQgfCBCdXR0b25zU2V0IHwgQ29sdW1uTmFtZXNT
ZXQgfCBOb3Rlc1NldCB8IFRpbWVzdGFtcFNldCB8IFZhbHVlc1NldCB8IFBheWxvYWRTZXQgfCBF
cnJvclNldCkKKyAgICB9OworCisgICAgdGVtcGxhdGU8aW50IFNUQVRFPgorICAgIGNsYXNzIEJ1
aWxkZXIgeworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVz
dWx0OworCisgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4m
IGNhc3RTdGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRf
Y2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAg
IEJ1aWxkZXIoUmVmPC8qUGFyYW1ldGVyQnVuZGxlKi9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQor
ICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0
ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAgICAgICB9CisgICAgICAgIGZyaWVuZCBjbGFzcyBQ
YXJhbWV0ZXJCdW5kbGU7CisgICAgcHVibGljOgorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBE
aXJlY3Rpb25hbGl0eVNldD4mIHNldERpcmVjdGlvbmFsaXR5KERpcmVjdGlvbmFsaXR5IHZhbHVl
KQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRGlyZWN0
aW9uYWxpdHlTZXQpLCBwcm9wZXJ0eV9kaXJlY3Rpb25hbGl0eV9hbHJlYWR5X3NldCk7CisgICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJkaXJlY3Rpb25hbGl0eSJfcywgSW5zcGVjdG9y
OjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKHZhbHVlKSk7Cisg
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPERpcmVjdGlvbmFsaXR5U2V0PigpOworICAgICAg
ICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IEJ1dHRvbnNTZXQ+JiBzZXRCdXR0b25zKFJl
ZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1
dHRvbj4+IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgQnV0dG9uc1NldCksIHByb3BlcnR5X2J1dHRvbnNfYWxyZWFkeV9zZXQpOworICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJidXR0b25zIl9zLCB2YWx1ZSk7CisgICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPEJ1dHRvbnNTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgQ29sdW1uTmFtZXNTZXQ+JiBzZXRDb2x1bW5OYW1lcyhSZWZQdHI8SlNP
Tjo6QXJyYXlPZjxTdHJpbmc+PiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoIShTVEFURSAmIENvbHVtbk5hbWVzU2V0KSwgcHJvcGVydHlfY29sdW1uTmFtZXNf
YWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJjb2x1bW5OYW1l
cyJfcywgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb2x1bW5OYW1lc1Nl
dD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBOb3Rlc1NldD4mIHNl
dE5vdGVzKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBOb3Rlc1NldCksIHByb3BlcnR5X25vdGVzX2FscmVhZHlfc2V0
KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCB2YWx1ZSk7Cisg
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE5vdGVzU2V0PigpOworICAgICAgICB9CisKKyAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IFRpbWVzdGFtcFNldD4mIHNldFRpbWVzdGFtcChkb3VibGUg
dmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBU
aW1lc3RhbXBTZXQpLCBwcm9wZXJ0eV90aW1lc3RhbXBfYWxyZWFkeV9zZXQpOworICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCB2YWx1ZSk7CisgICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPFRpbWVzdGFtcFNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAg
IEJ1aWxkZXI8U1RBVEUgfCBWYWx1ZXNTZXQ+JiBzZXRWYWx1ZXMoUmVmUHRyPEpTT046Ok9iamVj
dD4gdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUg
JiBWYWx1ZXNTZXQpLCBwcm9wZXJ0eV92YWx1ZXNfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAg
bV9yZXN1bHQtPnNldE9iamVjdCgidmFsdWVzIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPFZhbHVlc1NldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBQYXlsb2FkU2V0PiYgc2V0UGF5bG9hZChSZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVl
KQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgUGF5bG9h
ZFNldCksIHByb3BlcnR5X3BheWxvYWRfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1
bHQtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2Fz
dFN0YXRlPFBheWxvYWRTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgRXJyb3JTZXQ+JiBzZXRFcnJvcihSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6OkVycm9yPiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
IShTVEFURSAmIEVycm9yU2V0KSwgcHJvcGVydHlfZXJyb3JfYWxyZWFkeV9zZXQpOworICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldE9iamVjdCgiZXJyb3IiX3MsIHZhbHVlKTsKKyAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8RXJyb3JTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBSZWY8
UGFyYW1ldGVyQnVuZGxlPiByZWxlYXNlKCkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihQYXJhbWV0ZXJCdW5kbGUpID09IHNpemVv
ZihKU09OOjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7CisKKyAgICAgICAgICAgIFJlZjxKU09OOjpP
YmplY3Q+IGpzb25SZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOworICAgICAgICAg
ICAgYXV0byByZXN1bHQgPSBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxQYXJhbWV0ZXJC
dW5kbGU+Kj4oJmpzb25SZXN1bHQpKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
ICAgIH0KKyAgICB9OworCisgICAgLyoKKyAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6Cisg
ICAgICogUmVmPFBhcmFtZXRlckJ1bmRsZT4gcmVzdWx0ID0gUGFyYW1ldGVyQnVuZGxlOjpjcmVh
dGUoKQorICAgICAqICAgICAuc2V0RGlyZWN0aW9uYWxpdHkoLi4uKQorICAgICAqICAgICAuc2V0
QnV0dG9ucyguLi4pCisgICAgICogICAgIC5zZXRDb2x1bW5OYW1lcyguLi4pCisgICAgICogICAg
IC5zZXROb3RlcyguLi4pCisgICAgICogICAgIC5zZXRUaW1lc3RhbXAoLi4uKQorICAgICAqICAg
ICAuc2V0VmFsdWVzKC4uLikKKyAgICAgKiAgICAgLnNldFBheWxvYWQoLi4uKQorICAgICAqICAg
ICAuc2V0RXJyb3IoLi4uKQorICAgICAqICAgICAucmVsZWFzZSgpOworICAgICAqLworICAgIHN0
YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOworICAgIH0KK307
CisKK30gLy8gVGVzdAorCisKKworbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKKwordGVtcGxhdGU8
dHlwZW5hbWUgUHJvdG9jb2xFbnVtVHlwZT4KK09wdGlvbmFsPFByb3RvY29sRW51bVR5cGU+IHBh
cnNlRW51bVZhbHVlRnJvbVN0cmluZyhjb25zdCBTdHJpbmcmKTsKKworLy8gRW51bXMgaW4gdGhl
ICdEYXRhYmFzZScgRG9tYWluCit0ZW1wbGF0ZTw+CitPcHRpb25hbDxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b24+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNw
ZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b24+KGNvbnN0IFN0cmluZyYpOwor
dGVtcGxhdGU8PgorT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok9wdGlv
bmFsUGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4gcGFyc2VFbnVtVmFsdWVGcm9tU3Ry
aW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpPcHRpb25hbFBhcmFtZXRlckJ1bmRs
ZTo6RGlyZWN0aW9uYWxpdHk+KGNvbnN0IFN0cmluZyYpOwordGVtcGxhdGU8PgorT3B0aW9uYWw8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9u
YWxpdHk+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4oY29uc3QgU3RyaW5nJik7CisK
Ky8vIEVudW1zIGluIHRoZSAnVGVzdCcgRG9tYWluCit0ZW1wbGF0ZTw+CitPcHRpb25hbDxJbnNw
ZWN0b3I6OlByb3RvY29sOjpUZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5PiBw
YXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UGFyYW1l
dGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4oY29uc3QgU3RyaW5nJik7CisKK30gLy8gbmFtZXNw
YWNlIFRlc3RIZWxwZXJzCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RydWN0IERlZmF1bHRIYXNoOworCisvLyBIYXNoIGRlY2xhcmF0aW9ucyBpbiB0aGUgJ0RhdGFi
YXNlJyBEb21haW4KK3RlbXBsYXRlPD4KK3N0cnVjdCBEZWZhdWx0SGFzaDxJbnNwZWN0b3I6OlBy
b3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b24+IHsKKyAgICB0eXBlZGVmIEludEhhc2g8SW5z
cGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPiBIYXNoOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV1RGCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorCisj
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKworI2luY2x1ZGUgPHd0Zi9PcHRp
b25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKK25hbWVzcGFjZSBUZXN0SGVscGVycyB7
CisKK3N0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBlbnVtX2NvbnN0YW50X3ZhbHVlc1tdID0gewor
ICAgICJOb25lIiwKKyAgICAiTGVmdCIsCisgICAgIk1pZGRsZSIsCisgICAgIlJpZ2h0IiwKKyAg
ICAiTFRSIiwKKyAgICAiUlRMIiwKK307CisKK1N0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShp
bnQgY29kZSkgeworICAgIHJldHVybiBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb2RlXTsKK30KKwor
Ly8gRW51bXMgaW4gdGhlICdEYXRhYmFzZScgRG9tYWluCisKK3RlbXBsYXRlPD4KK09wdGlvbmFs
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4gcGFyc2VFbnVtVmFs
dWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4o
Y29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKK3sKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90
IGNvbnN0YW50VmFsdWVzW10gPSB7CisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uOjpOb25lLAorICAgICAgICAoc2l6ZV90KUluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbjo6TGVmdCwKKyAgICAgICAgKHNpemVf
dClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b246Ok1pZGRsZSwKKyAg
ICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b246
OlJpZ2h0LAorICAgIH07CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCA0OyArK2kpCisgICAg
ICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZh
bHVlc1tpXV0pCisgICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFi
YXNlOjpNb3VzZUJ1dHRvbiljb25zdGFudFZhbHVlc1tpXTsKKworICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7Cit9CisKK3RlbXBsYXRlPD4KK09wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+IHBhcnNlRW51
bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6T3B0aW9uYWxQ
YXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5Pihjb25zdCBTdHJpbmcmIHByb3RvY29sU3Ry
aW5nKQoreworICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsKKyAg
ICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6T3B0aW9uYWxQYXJh
bWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5OjpMVFIsCisgICAgICAgIChzaXplX3QpSW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rp
b25hbGl0eTo6UlRMLAorICAgIH07CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAyOyArK2kp
CisgICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25z
dGFudFZhbHVlc1tpXV0pCisgICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHkpY29uc3Rh
bnRWYWx1ZXNbaV07CisKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCit0ZW1wbGF0ZTw+
CitPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UGFyYW1ldGVyQnVuZGxl
OjpEaXJlY3Rpb25hbGl0eT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5Pihjb25zdCBT
dHJpbmcmIHByb3RvY29sU3RyaW5nKQoreworICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3Rh
bnRWYWx1ZXNbXSA9IHsKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eTo6TFRSLAorICAgICAgICAoc2l6
ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVj
dGlvbmFsaXR5OjpSVEwsCisgICAgfTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDI7ICsr
aSkKKyAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2Nv
bnN0YW50VmFsdWVzW2ldXSkKKyAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGF0YWJhc2U6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHkpY29uc3RhbnRWYWx1
ZXNbaV07CisKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCisvLyBFbnVtcyBpbiB0aGUg
J1Rlc3QnIERvbWFpbgorCit0ZW1wbGF0ZTw+CitPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29s
OjpUZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5PiBwYXJzZUVudW1WYWx1ZUZy
b21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UGFyYW1ldGVyQnVuZGxlOjpEaXJl
Y3Rpb25hbGl0eT4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKK3sKKyAgICBzdGF0aWMg
Y29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7CisgICAgICAgIChzaXplX3QpSW5zcGVj
dG9yOjpQcm90b2NvbDo6VGVzdDo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eTo6TFRS
LAorICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlBhcmFtZXRlckJ1
bmRsZTo6RGlyZWN0aW9uYWxpdHk6OlJUTCwKKyAgICB9OworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgMjsgKytpKQorICAgICAgICBpZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFu
dF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNbaV1dKQorICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0
b3I6OlByb3RvY29sOjpUZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5KWNvbnN0
YW50VmFsdWVzW2ldOworCisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKworfSAvLyBuYW1l
c3BhY2UgVGVzdEhlbHBlcnMKKworCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMu
Y3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0
LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisj
aW1wb3J0IDx3dGYvUGxhdGZvcm0uaD4KKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5Q
dHIuaD4KKworCisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKK30gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5o
CisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10
eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lt
cG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMu
aCIKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW5jbHVkZSAiVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKwor
bmFtZXNwYWNlIEluc3BlY3RvciB7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCisvLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPHd0Zi9QbGF0Zm9ybS5o
PgorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+CisKK19fYXR0cmlidXRl
X18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25m
aWd1cmF0aW9uIDogTlNPYmplY3QKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24uaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJh
dGlvbi5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRp
b24tb2JqZWN0LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCisKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlz
cGF0Y2hlcnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJs
ZUFnZW50Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNv
bnRyb2xsZXIuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVycy5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXJzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBs
ZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCit7CisgICAgQXVnbWVudGFibGVJ
bnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9s
bGVyCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAg
IHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250cm9sbGVyID0g
Y29udHJvbGxlcjsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7Cisg
ICAgW3N1cGVyIGRlYWxsb2NdOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xDb25maWd1cmF0aW9uLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVu
dERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1k
ZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBv
cnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8d3RmL0pTT05WYWx1
ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisjIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlv
bi1vYmplY3QtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorI2ltcG9ydCA8d3RmL1Bs
YXRmb3JtLmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3Qu
aD4KKworCitAY2xhc3MgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcjsKK0BjbGFzcyBUZXN0UHJv
dG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOworQGNsYXNzIFRlc3RQcm90b2Nv
bERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlOworQGNsYXNzIFRlc3RQcm90b2NvbERhdGFiYXNlT2Jq
ZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0czsKK0BjbGFzcyBUZXN0UHJvdG9jb2xEYXRhYmFz
ZUR1bW15T2JqZWN0OworQGNsYXNzIFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGU7CisK
K3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VCdXR0
b24pIHsKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9uTm9uZSwKKyAgICBUZXN0
UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9uTGVmdCwKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFz
ZU1vdXNlQnV0dG9uTWlkZGxlLAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VCdXR0b25S
aWdodCwKK307CisKK3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbERhdGFi
YXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSkgeworICAgIFRlc3RQcm90
b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eUxUUiwKKyAg
ICBUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxp
dHlSVEwsCit9OworCit0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xEYXRh
YmFzZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5KSB7CisgICAgVGVzdFByb3RvY29sRGF0
YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eUxUUiwKKyAgICBUZXN0UHJvdG9jb2xE
YXRhYmFzZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5UlRMLAorfTsKK3R5cGVkZWYgTlNf
RU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25h
bGl0eSkgeworICAgIFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0
eUxUUiwKKyAgICBUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHlS
VEwsCit9OworCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRl
cmZhY2UgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciA6IFJXSVByb3RvY29sSlNPTk9iamVjdAor
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICos
IGlkPiAqKXBheWxvYWQ7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDoo
UldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKKy0gKGluc3RhbmNldHlwZSlpbml0
V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBjb2RlOihpbnQpY29kZTsKKy8qIHJlcXVp
cmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqbWVzc2FnZTsKKy8q
IHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCBjb2RlOworQGVu
ZAorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2Ug
VGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZSA6IFJXSVByb3RvY29s
SlNPTk9iamVjdAorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5
PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQ7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90
b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKKy8qIG9wdGlv
bmFsICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8g
KmNvbHVtbk5hbWVzOworLyogb3B0aW9uYWwgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkp
IE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqYnV0dG9uczsKKy8qIG9wdGlvbmFsICovIEBwcm9wZXJ0
eSAobm9uYXRvbWljLCBhc3NpZ24pIFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0
ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSBkaXJlY3Rpb25hbGl0eTsKKy8qIG9wdGlvbmFsICovIEBw
cm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqbm90ZXM7CisvKiBvcHRpb25hbCAq
LyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBkb3VibGUgdGltZXN0YW1wOworLyogb3B0
aW9uYWwgKi8gQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgUldJUHJvdG9jb2xKU09OT2Jq
ZWN0ICp2YWx1ZXM7CisvKiBvcHRpb25hbCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWlu
KSBSV0lQcm90b2NvbEpTT05PYmplY3QgKnBheWxvYWQ7CisvKiBvcHRpb25hbCAqLyBAcHJvcGVy
dHkgKG5vbmF0b21pYywgcmV0YWluKSBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICplcnJvcjsK
Ky8qIG9wdGlvbmFsICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU0FycmF5Lyo8VGVz
dFByb3RvY29sRGF0YWJhc2VFcnJvcj4qLyAqZXJyb3JMaXN0OworQGVuZAorCitfX2F0dHJpYnV0
ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sRGF0
YWJhc2VQYXJhbWV0ZXJCdW5kbGUgOiBSV0lQcm90b2NvbEpTT05PYmplY3QKKy0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXls
b2FkOworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29s
SlNPTk9iamVjdCAqKWpzb25PYmplY3Q7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb2x1bW5O
YW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMgYnV0dG9uczooTlNBcnJh
eS8qPE5TU3RyaW5nPiovICopYnV0dG9ucyBkaXJlY3Rpb25hbGl0eTooVGVzdFByb3RvY29sRGF0
YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSlkaXJlY3Rpb25hbGl0eSBub3Rlczoo
TlNTdHJpbmcgKilub3RlcyB0aW1lc3RhbXA6KGRvdWJsZSl0aW1lc3RhbXAgdmFsdWVzOihSV0lQ
cm90b2NvbEpTT05PYmplY3QgKil2YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0
ICopcGF5bG9hZCBlcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKWVycm9yIGVycm9y
TGlzdDooTlNBcnJheS8qPFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I+Ki8gKillcnJvckxpc3Q7
CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNBcnJheS8qPE5T
U3RyaW5nPiovICpjb2x1bW5OYW1lczsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRv
bWljLCBjb3B5KSBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmJ1dHRvbnM7CisvKiByZXF1aXJlZCAq
LyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFt
ZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5IGRpcmVjdGlvbmFsaXR5OworLyogcmVxdWlyZWQgKi8g
QHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICpub3RlczsKKy8qIHJlcXVpcmVk
ICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGRvdWJsZSB0aW1lc3RhbXA7CisvKiBy
ZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluKSBSV0lQcm90b2NvbEpTT05P
YmplY3QgKnZhbHVlczsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRh
aW4pIFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5bG9hZDsKKy8qIHJlcXVpcmVkICovIEBwcm9w
ZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKmVycm9y
OworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TQXJyYXkvKjxU
ZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yPiovICplcnJvckxpc3Q7CitAZW5kCisKK19fYXR0cmli
dXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xE
YXRhYmFzZU9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHMgOiBSV0lQcm90b2NvbEpTT05P
YmplY3QKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0
cmluZyAqLCBpZD4gKilwYXlsb2FkOworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xP
YmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7CistIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhJbnRlZ2VyOihOU1N0cmluZyAqKWludGVnZXIgYXJyYXk6KE5TU3RyaW5nICop
YXJyYXkgc3RyaW5nOihOU1N0cmluZyAqKXN0cmluZyB2YWx1ZTooTlNTdHJpbmcgKil2YWx1ZSBv
YmplY3Q6KE5TU3RyaW5nICopb2JqZWN0OworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25h
dG9taWMsIGNvcHkpIE5TU3RyaW5nICppbnRlZ2VyOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5
IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICphcnJheTsKKy8qIHJlcXVpcmVkICovIEBwcm9w
ZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqc3RyaW5nOworLyogcmVxdWlyZWQgKi8g
QHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICp2YWx1ZTsKKy8qIHJlcXVpcmVk
ICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqb2JqZWN0OworQGVuZAor
CitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVz
dFByb3RvY29sRGF0YWJhc2VEdW1teU9iamVjdCA6IFJXSVByb3RvY29sSlNPTk9iamVjdAorLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlk
PiAqKXBheWxvYWQ7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKK0BlbmQKK19fYXR0cmlidXRlX18oKHZp
c2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUZXN0UGFyYW1l
dGVyQnVuZGxlIDogUldJUHJvdG9jb2xKU09OT2JqZWN0CistIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKKy0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3Qg
Kilqc29uT2JqZWN0OworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRGlyZWN0aW9uYWxpdHk6KFRl
c3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSlkaXJlY3Rpb25hbGl0
eSBidXR0b25zOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilidXR0b25zIGNvbHVtbk5hbWVzOihO
U0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcyBub3RlczooTlNTdHJpbmcgKilub3Rl
cyB0aW1lc3RhbXA6KGRvdWJsZSl0aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmpl
Y3QgKil2YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZCBlcnJv
cjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKWVycm9yOworLyogcmVxdWlyZWQgKi8gQHBy
b3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgVGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRs
ZURpcmVjdGlvbmFsaXR5IGRpcmVjdGlvbmFsaXR5OworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5
IChub25hdG9taWMsIGNvcHkpIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqYnV0dG9uczsKKy8qIHJl
cXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU0FycmF5Lyo8TlNTdHJpbmc+
Ki8gKmNvbHVtbk5hbWVzOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNv
cHkpIE5TU3RyaW5nICpub3RlczsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWlj
LCBhc3NpZ24pIGRvdWJsZSB0aW1lc3RhbXA7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5v
bmF0b21pYywgcmV0YWluKSBSV0lQcm90b2NvbEpTT05PYmplY3QgKnZhbHVlczsKKy8qIHJlcXVp
cmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIFJXSVByb3RvY29sSlNPTk9iamVj
dCAqcGF5bG9hZDsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4p
IFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKmVycm9yOworQGVuZAorCisKKworCisKKworI2lt
cG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5o
PgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xJbnRlcm5hbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlw
ZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaW1wb3J0ICJU
ZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgi
CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIu
aD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKKworCisKKyMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sSW50ZXJuYWwuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xh
cmF0aW9uLW9iamVjdC10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworI2ltcG9ydCA8d3RmL1BsYXRmb3JtLmg+CisKKyNpbXBvcnQgIlRlc3RQcm90
b2NvbC5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9u
cy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0Vu
dW1UeXBlPgorT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3Qg
U3RyaW5nJiB2YWx1ZSk7CisKK2lubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJv
dG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9uIHZhbHVlKQoreworICAgIHN3aXRjaCh2YWx1ZSkgewor
ICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VNb3VzZUJ1dHRvbk5vbmU6CisgICAgICAgIHJl
dHVybiAiTm9uZSJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VCdXR0b25M
ZWZ0OgorICAgICAgICByZXR1cm4gIkxlZnQiX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRh
YmFzZU1vdXNlQnV0dG9uTWlkZGxlOgorICAgICAgICByZXR1cm4gIk1pZGRsZSJfczsKKyAgICBj
YXNlIFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VCdXR0b25SaWdodDoKKyAgICAgICAgcmV0dXJu
ICJSaWdodCJfczsKKyAgICB9Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBPcHRpb25hbDxUZXN0
UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9uPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gIk5vbmUiKQorICAgICAgICByZXR1cm4g
VGVzdFByb3RvY29sRGF0YWJhc2VNb3VzZUJ1dHRvbk5vbmU7CisgICAgaWYgKHZhbHVlID09ICJM
ZWZ0IikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VCdXR0b25MZWZ0
OworICAgIGlmICh2YWx1ZSA9PSAiTWlkZGxlIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2Nv
bERhdGFiYXNlTW91c2VCdXR0b25NaWRkbGU7CisgICAgaWYgKHZhbHVlID09ICJSaWdodCIpCisg
ICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9uUmlnaHQ7CisgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKworaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5n
KFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0
eSB2YWx1ZSkKK3sKKyAgICBzd2l0Y2godmFsdWUpIHsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERh
dGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eUxUUjoKKyAgICAgICAg
cmV0dXJuICJMVFIiX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFy
YW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHlSVEw6CisgICAgICAgIHJldHVybiAiUlRMIl9zOwor
ICAgIH0KK30KKwordGVtcGxhdGU8PgoraW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFi
YXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eT4gZnJvbVByb3RvY29sU3Ry
aW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09ICJMVFIiKQorICAg
ICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZURp
cmVjdGlvbmFsaXR5TFRSOworICAgIGlmICh2YWx1ZSA9PSAiUlRMIikKKyAgICAgICAgcmV0dXJu
IFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0
eVJUTDsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCitpbmxpbmUgU3RyaW5nIHRvUHJv
dG9jb2xTdHJpbmcoVGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25h
bGl0eSB2YWx1ZSkKK3sKKyAgICBzd2l0Y2godmFsdWUpIHsKKyAgICBjYXNlIFRlc3RQcm90b2Nv
bERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHlMVFI6CisgICAgICAgIHJldHVy
biAiTFRSIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGVE
aXJlY3Rpb25hbGl0eVJUTDoKKyAgICAgICAgcmV0dXJuICJSVEwiX3M7CisgICAgfQorfQorCit0
ZW1wbGF0ZTw+CitpbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJC
dW5kbGVEaXJlY3Rpb25hbGl0eT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFs
dWUpCit7CisgICAgaWYgKHZhbHVlID09ICJMVFIiKQorICAgICAgICByZXR1cm4gVGVzdFByb3Rv
Y29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eUxUUjsKKyAgICBpZiAodmFs
dWUgPT0gIlJUTCIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRl
ckJ1bmRsZURpcmVjdGlvbmFsaXR5UlRMOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisK
K2lubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVy
QnVuZGxlRGlyZWN0aW9uYWxpdHkgdmFsdWUpCit7CisgICAgc3dpdGNoKHZhbHVlKSB7CisgICAg
Y2FzZSBUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHlMVFI6Cisg
ICAgICAgIHJldHVybiAiTFRSIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sVGVzdFBhcmFtZXRl
ckJ1bmRsZURpcmVjdGlvbmFsaXR5UlRMOgorICAgICAgICByZXR1cm4gIlJUTCJfczsKKyAgICB9
Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xUZXN0UGFyYW1l
dGVyQnVuZGxlRGlyZWN0aW9uYWxpdHk+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcm
IHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSAiTFRSIikKKyAgICAgICAgcmV0dXJuIFRlc3RQ
cm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eUxUUjsKKyAgICBpZiAodmFs
dWUgPT0gIlJUTCIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVu
ZGxlRGlyZWN0aW9uYWxpdHlSVEw7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKworfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24t
b2JqZWN0LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKworI2ltcG9ydCAi
VGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCisjaW1w
b3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorCit1c2lu
ZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucyAoRGF0YWJhc2VEb21haW4pCisKKysgKHZvaWQpX3BhcnNlRXJyb3I6KFRlc3RQcm90
b2NvbERhdGFiYXNlRXJyb3IgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Cisr
ICh2b2lkKV9wYXJzZUVycm9yTGlzdDooTlNBcnJheS8qPFRlc3RQcm90b2NvbERhdGFiYXNlRXJy
b3I+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisrICh2b2lkKV9wYXJz
ZU1vdXNlQnV0dG9uOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9h
ZDsKKysgKHZvaWQpX3BhcnNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU6KFRlc3RQcm90b2NvbERh
dGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlk
KXBheWxvYWQ7CisrICh2b2lkKV9wYXJzZVBhcmFtZXRlckJ1bmRsZTooVGVzdFByb3RvY29sRGF0
YWJhc2VQYXJhbWV0ZXJCdW5kbGUgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7
CisrICh2b2lkKV9wYXJzZU9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHM6KFRlc3RQcm90
b2NvbERhdGFiYXNlT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cyAqKilvdXRWYWx1ZSBm
cm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNlRHVtbXlPYmplY3Q6KFRlc3RQ
cm90b2NvbERhdGFiYXNlRHVtbXlPYmplY3QgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBh
eWxvYWQ7CisKK0BlbmQKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChU
ZXN0RG9tYWluKQorCisrICh2b2lkKV9wYXJzZVBhcmFtZXRlckJ1bmRsZTooVGVzdFByb3RvY29s
VGVzdFBhcmFtZXRlckJ1bmRsZSAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsK
KworQGVuZAorCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChE
YXRhYmFzZURvbWFpbikKKworKyAodm9pZClfcGFyc2VFcnJvcjooVGVzdFByb3RvY29sRGF0YWJh
c2VFcnJvciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOwor
ICAgICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBhbGxvY10gaW5pdFdp
dGhQYXlsb2FkOnBheWxvYWRdOworfQorCisrICh2b2lkKV9wYXJzZUVycm9yTGlzdDooTlNBcnJh
eS8qPFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6
KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQs
IFtOU0FycmF5Lyo8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4qLyBjbGFzc10pOworICAgICpv
dXRWYWx1ZSA9IChOU0FycmF5Lyo8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4qLyAqKXBheWxv
YWQ7Cit9CisKKysgKHZvaWQpX3BhcnNlTW91c2VCdXR0b246KE5TTnVtYmVyICoqKW91dFZhbHVl
IGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURf
VFlQRShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKKyAgICBPcHRpb25hbDxUZXN0UHJvdG9j
b2xEYXRhYmFzZU1vdXNlQnV0dG9uPiByZXN1bHQgPSBJbnNwZWN0b3I6OmZyb21Qcm90b2NvbFN0
cmluZzxUZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9uPihwYXlsb2FkKTsKKyAgICBUSFJP
V19FWENFUFRJT05fRk9SX0JBRF9FTlVNX1ZBTFVFKHJlc3VsdCwgQCJNb3VzZUJ1dHRvbiIpOwor
ICAgICpvdXRWYWx1ZSA9IEAocmVzdWx0LnZhbHVlKCkpOworfQorCisrICh2b2lkKV9wYXJzZU9w
dGlvbmFsUGFyYW1ldGVyQnVuZGxlOihUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1l
dGVyQnVuZGxlICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7
CisgICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVy
QnVuZGxlIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07Cit9CisKKysgKHZvaWQpX3Bh
cnNlUGFyYW1ldGVyQnVuZGxlOihUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZSAq
KilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOworICAgICpvdXRW
YWx1ZSA9IFtbVGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGUgYWxsb2NdIGluaXRX
aXRoUGF5bG9hZDpwYXlsb2FkXTsKK30KKworKyAodm9pZClfcGFyc2VPYmplY3RXaXRoUHJvcGVy
dHlOYW1lQ29uZmxpY3RzOihUZXN0UHJvdG9jb2xEYXRhYmFzZU9iamVjdFdpdGhQcm9wZXJ0eU5h
bWVDb25mbGljdHMgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBU
SFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3Nd
KTsKKyAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbERhdGFiYXNlT2JqZWN0V2l0aFByb3Bl
cnR5TmFtZUNvbmZsaWN0cyBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOworfQorCisr
ICh2b2lkKV9wYXJzZUR1bW15T2JqZWN0OihUZXN0UHJvdG9jb2xEYXRhYmFzZUR1bW15T2JqZWN0
ICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7CisgICAgKm91
dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xEYXRhYmFzZUR1bW15T2JqZWN0IGFsbG9jXSBpbml0V2l0
aFBheWxvYWQ6cGF5bG9hZF07Cit9CisKK0BlbmQKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMgKFRlc3REb21haW4pCisKKysgKHZvaWQpX3BhcnNlUGFyYW1ldGVy
QnVuZGxlOihUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlICoqKW91dFZhbHVlIGZyb21Q
YXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShw
YXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gW1tUZXN0UHJv
dG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07
Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVz
dFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0
ZS5oPgorI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVz
Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0
UHJvdG9jb2xEYXRhYmFzZUVycm9yCisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6
KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQKK3sKKyAgICBp
ZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAIm1lc3NhZ2UiXSwg
QCJtZXNzYWdlIik7CisgICAgc2VsZi5tZXNzYWdlID0gcGF5bG9hZFtAIm1lc3NhZ2UiXTsKKwor
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImNvZGUi
XSwgQCJjb2RlIik7CisgICAgc2VsZi5jb2RlID0gW3BheWxvYWRbQCJjb2RlIl0gaW50ZWdlclZh
bHVlXTsKKworICAgIHJldHVybiBzZWxmOworfQorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJv
dG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9iamVjdAoreworICAgIGlmICgh
KHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmplY3QgdG9KU09OT2JqZWN0XS5n
ZXQoKV0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0g
KGluc3RhbmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBjb2RlOihp
bnQpY29kZQoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1
cm4gbmlsOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShtZXNz
YWdlLCBAIm1lc3NhZ2UiKTsKKworICAgIHNlbGYubWVzc2FnZSA9IG1lc3NhZ2U7CisgICAgc2Vs
Zi5jb2RlID0gY29kZTsKKworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXNldE1lc3Nh
Z2U6KE5TU3RyaW5nICopbWVzc2FnZQoreworICAgIFtzdXBlciBzZXRTdHJpbmc6bWVzc2FnZSBm
b3JLZXk6QCJtZXNzYWdlIl07Cit9CisKKy0gKE5TU3RyaW5nICopbWVzc2FnZQoreworICAgIHJl
dHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAibWVzc2FnZSJdOworfQorCistICh2b2lkKXNldENv
ZGU6KGludCljb2RlCit7CisgICAgW3N1cGVyIHNldEludGVnZXI6Y29kZSBmb3JLZXk6QCJjb2Rl
Il07Cit9CisKKy0gKGludCljb2RlCit7CisgICAgcmV0dXJuIFtzdXBlciBpbnRlZ2VyRm9yS2V5
OkAiY29kZSJdOworfQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xEYXRh
YmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlCisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBh
eWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQKK3sK
KyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKwor
ICAgIHNlbGYuY29sdW1uTmFtZXMgPSBwYXlsb2FkW0AiY29sdW1uTmFtZXMiXTsKKworICAgIHNl
bGYuYnV0dG9ucyA9IHBheWxvYWRbQCJidXR0b25zIl07CisKKyAgICBPcHRpb25hbDxUZXN0UHJv
dG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHk+IGRpcmVj
dGlvbmFsaXR5ID0gZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9u
YWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eT4ocGF5bG9hZFtAImRpcmVjdGlvbmFsaXR5
Il0pOworICAgIGlmIChkaXJlY3Rpb25hbGl0eSkKKyAgICAgICAgc2VsZi5kaXJlY3Rpb25hbGl0
eSA9IGRpcmVjdGlvbmFsaXR5LnZhbHVlKCk7CisKKyAgICBzZWxmLm5vdGVzID0gcGF5bG9hZFtA
Im5vdGVzIl07CisKKyAgICBzZWxmLnRpbWVzdGFtcCA9IFtwYXlsb2FkW0AidGltZXN0YW1wIl0g
ZG91YmxlVmFsdWVdOworCisgICAgc2VsZi52YWx1ZXMgPSBwYXlsb2FkW0AidmFsdWVzIl07CisK
KyAgICBzZWxmLnBheWxvYWQgPSBwYXlsb2FkW0AicGF5bG9hZCJdOworCisgICAgc2VsZi5lcnJv
ciA9IFtbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBh
eWxvYWRbQCJlcnJvciJdXTsKKworICAgIHNlbGYuZXJyb3JMaXN0ID0gb2JqY0FycmF5RnJvbVBh
eWxvYWQ8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4ocGF5bG9hZFtAImVycm9yTGlzdCJdKTsK
KworICAgIHJldHVybiBzZWxmOworfQorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xP
YmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9iamVjdAoreworICAgIGlmICghKHNlbGYg
PSBbc3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmplY3QgdG9KU09OT2JqZWN0XS5nZXQoKV0p
KQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQp
c2V0Q29sdW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWNvbHVtbk5hbWVzCit7Cisg
ICAgW3N1cGVyIHNldEpTT05BcnJheTp0b0pTT05TdHJpbmdBcnJheShjb2x1bW5OYW1lcykgZm9y
S2V5OkAiY29sdW1uTmFtZXMiXTsKK30KKworLSAoTlNBcnJheS8qPE5TU3RyaW5nPiovICopY29s
dW1uTmFtZXMKK3sKKyAgICByZXR1cm4gdG9PYmpDU3RyaW5nQXJyYXkoW3N1cGVyIEpTT05BcnJh
eUZvcktleTpAImNvbHVtbk5hbWVzIl0pOworfQorCistICh2b2lkKXNldEJ1dHRvbnM6KE5TQXJy
YXkvKjxOU1N0cmluZz4qLyAqKWJ1dHRvbnMKK3sKKyAgICBbc3VwZXIgc2V0SlNPTkFycmF5OnRv
SlNPTlN0cmluZ0FycmF5KGJ1dHRvbnMpIGZvcktleTpAImJ1dHRvbnMiXTsKK30KKworLSAoTlNB
cnJheS8qPE5TU3RyaW5nPiovICopYnV0dG9ucworeworICAgIHJldHVybiB0b09iakNTdHJpbmdB
cnJheShbc3VwZXIgSlNPTkFycmF5Rm9yS2V5OkAiYnV0dG9ucyJdKTsKK30KKworLSAodm9pZClz
ZXREaXJlY3Rpb25hbGl0eTooVGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1
bmRsZURpcmVjdGlvbmFsaXR5KWRpcmVjdGlvbmFsaXR5Cit7CisgICAgW3N1cGVyIHNldFN0cmlu
Zzp0b1Byb3RvY29sU3RyaW5nKGRpcmVjdGlvbmFsaXR5KSBmb3JLZXk6QCJkaXJlY3Rpb25hbGl0
eSJdOworfQorCistIChUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxl
RGlyZWN0aW9uYWxpdHkpZGlyZWN0aW9uYWxpdHkKK3sKKyAgICByZXR1cm4gZnJvbVByb3RvY29s
U3RyaW5nPFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rp
b25hbGl0eT4oW3N1cGVyIHN0cmluZ0ZvcktleTpAImRpcmVjdGlvbmFsaXR5Il0pLnZhbHVlKCk7
Cit9CisKKy0gKHZvaWQpc2V0Tm90ZXM6KE5TU3RyaW5nICopbm90ZXMKK3sKKyAgICBbc3VwZXIg
c2V0U3RyaW5nOm5vdGVzIGZvcktleTpAIm5vdGVzIl07Cit9CisKKy0gKE5TU3RyaW5nICopbm90
ZXMKK3sKKyAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAIm5vdGVzIl07Cit9CisKKy0g
KHZvaWQpc2V0VGltZXN0YW1wOihkb3VibGUpdGltZXN0YW1wCit7CisgICAgW3N1cGVyIHNldERv
dWJsZTp0aW1lc3RhbXAgZm9yS2V5OkAidGltZXN0YW1wIl07Cit9CisKKy0gKGRvdWJsZSl0aW1l
c3RhbXAKK3sKKyAgICByZXR1cm4gW3N1cGVyIGRvdWJsZUZvcktleTpAInRpbWVzdGFtcCJdOwor
fQorCistICh2b2lkKXNldFZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopdmFsdWVzCit7
CisgICAgW3N1cGVyIHNldE9iamVjdDp2YWx1ZXMgZm9yS2V5OkAidmFsdWVzIl07Cit9CisKKy0g
KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcworeworICAgIFJXSVByb3RvY29sSlNPTk9i
amVjdCAqb2JqZWN0ID0gW3N1cGVyIG9iamVjdEZvcktleTpAInZhbHVlcyJdOworICAgIGlmICgh
b2JqZWN0KQorICAgICAgICByZXR1cm4gbmlsOworICAgIHJldHVybiBbW1JXSVByb3RvY29sSlNP
Tk9iamVjdCBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0Oltbc3VwZXIgb2JqZWN0Rm9yS2V5OkAi
dmFsdWVzIl0gdG9KU09OT2JqZWN0XS5nZXQoKV07Cit9CisKKy0gKHZvaWQpc2V0UGF5bG9hZDoo
UldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZAoreworICAgIFtzdXBlciBzZXRPYmplY3Q6
cGF5bG9hZCBmb3JLZXk6QCJwYXlsb2FkIl07Cit9CisKKy0gKFJXSVByb3RvY29sSlNPTk9iamVj
dCAqKXBheWxvYWQKK3sKKyAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9iamVjdCA9IFtzdXBl
ciBvYmplY3RGb3JLZXk6QCJwYXlsb2FkIl07CisgICAgaWYgKCFvYmplY3QpCisgICAgICAgIHJl
dHVybiBuaWw7CisgICAgcmV0dXJuIFtbUldJUHJvdG9jb2xKU09OT2JqZWN0IGFsbG9jXSBpbml0
V2l0aEpTT05PYmplY3Q6W1tzdXBlciBvYmplY3RGb3JLZXk6QCJwYXlsb2FkIl0gdG9KU09OT2Jq
ZWN0XS5nZXQoKV07Cit9CisKKy0gKHZvaWQpc2V0RXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNl
RXJyb3IgKillcnJvcgoreworICAgIFtzdXBlciBzZXRPYmplY3Q6ZXJyb3IgZm9yS2V5OkAiZXJy
b3IiXTsKK30KKworLSAoVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKWVycm9yCit7CisgICAg
UldJUHJvdG9jb2xKU09OT2JqZWN0ICpvYmplY3QgPSBbc3VwZXIgb2JqZWN0Rm9yS2V5OkAiZXJy
b3IiXTsKKyAgICBpZiAoIW9iamVjdCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICByZXR1cm4g
W1tUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6W1tz
dXBlciBvYmplY3RGb3JLZXk6QCJlcnJvciJdIHRvSlNPTk9iamVjdF0uZ2V0KCldOworfQorCist
ICh2b2lkKXNldEVycm9yTGlzdDooTlNBcnJheS8qPFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I+
Ki8gKillcnJvckxpc3QKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFX0lOX0FS
UkFZKGVycm9yTGlzdCwgW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgY2xhc3NdKTsKKyAgICBb
c3VwZXIgc2V0SlNPTkFycmF5OnRvSlNPTk9iamVjdEFycmF5KGVycm9yTGlzdCkgZm9yS2V5OkAi
ZXJyb3JMaXN0Il07Cit9CisKKy0gKE5TQXJyYXkvKjxUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9y
PiovICopZXJyb3JMaXN0Cit7CisgICAgcmV0dXJuIHRvT2JqQ0FycmF5PFRlc3RQcm90b2NvbERh
dGFiYXNlRXJyb3I+KFtzdXBlciBKU09OQXJyYXlGb3JLZXk6QCJlcnJvckxpc3QiXSk7Cit9CisK
K0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVu
ZGxlCisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9u
YXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVy
IGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
UkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImNvbHVtbk5hbWVzIl0sIEAiY29sdW1uTmFtZXMi
KTsKKyAgICBzZWxmLmNvbHVtbk5hbWVzID0gcGF5bG9hZFtAImNvbHVtbk5hbWVzIl07CisKKyAg
ICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJidXR0b25z
Il0sIEAiYnV0dG9ucyIpOworICAgIHNlbGYuYnV0dG9ucyA9IHBheWxvYWRbQCJidXR0b25zIl07
CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJk
aXJlY3Rpb25hbGl0eSJdLCBAImRpcmVjdGlvbmFsaXR5Iik7CisgICAgT3B0aW9uYWw8VGVzdFBy
b3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eT4gZGlyZWN0aW9uYWxp
dHkgPSBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5k
bGVEaXJlY3Rpb25hbGl0eT4ocGF5bG9hZFtAImRpcmVjdGlvbmFsaXR5Il0pOworICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfQkFEX0VOVU1fVkFMVUUoZGlyZWN0aW9uYWxpdHksIEAiZGlyZWN0aW9u
YWxpdHkiKTsKKyAgICBzZWxmLmRpcmVjdGlvbmFsaXR5ID0gZGlyZWN0aW9uYWxpdHkudmFsdWUo
KTsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtA
Im5vdGVzIl0sIEAibm90ZXMiKTsKKyAgICBzZWxmLm5vdGVzID0gcGF5bG9hZFtAIm5vdGVzIl07
CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJ0
aW1lc3RhbXAiXSwgQCJ0aW1lc3RhbXAiKTsKKyAgICBzZWxmLnRpbWVzdGFtcCA9IFtwYXlsb2Fk
W0AidGltZXN0YW1wIl0gZG91YmxlVmFsdWVdOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9S
RVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AidmFsdWVzIl0sIEAidmFsdWVzIik7CisgICAgc2Vs
Zi52YWx1ZXMgPSBwYXlsb2FkW0AidmFsdWVzIl07CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9S
X1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJwYXlsb2FkIl0sIEAicGF5bG9hZCIpOworICAg
IHNlbGYucGF5bG9hZCA9IHBheWxvYWRbQCJwYXlsb2FkIl07CisKKyAgICBUSFJPV19FWENFUFRJ
T05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJlcnJvciJdLCBAImVycm9yIik7Cisg
ICAgc2VsZi5lcnJvciA9IFtbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBhbGxvY10gaW5pdFdp
dGhQYXlsb2FkOnBheWxvYWRbQCJlcnJvciJdXTsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
UkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImVycm9yTGlzdCJdLCBAImVycm9yTGlzdCIpOwor
ICAgIHNlbGYuZXJyb3JMaXN0ID0gb2JqY0FycmF5RnJvbVBheWxvYWQ8VGVzdFByb3RvY29sRGF0
YWJhc2VFcnJvcj4ocGF5bG9hZFtAImVycm9yTGlzdCJdKTsKKworICAgIHJldHVybiBzZWxmOwor
fQorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNP
Tk9iamVjdCAqKW9iamVjdAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09O
T2JqZWN0OltvYmplY3QgdG9KU09OT2JqZWN0XS5nZXQoKV0pKQorICAgICAgICByZXR1cm4gbmls
OworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbHVt
bk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcyBidXR0b25zOihOU0Fy
cmF5Lyo8TlNTdHJpbmc+Ki8gKilidXR0b25zIGRpcmVjdGlvbmFsaXR5OihUZXN0UHJvdG9jb2xE
YXRhYmFzZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5KWRpcmVjdGlvbmFsaXR5IG5vdGVz
OihOU1N0cmluZyAqKW5vdGVzIHRpbWVzdGFtcDooZG91YmxlKXRpbWVzdGFtcCB2YWx1ZXM6KFJX
SVByb3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcyBwYXlsb2FkOihSV0lQcm90b2NvbEpTT05PYmpl
Y3QgKilwYXlsb2FkIGVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICopZXJyb3IgZXJy
b3JMaXN0OihOU0FycmF5Lyo8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4qLyAqKWVycm9yTGlz
dAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmls
OworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShjb2x1bW5OYW1l
cywgQCJjb2x1bW5OYW1lcyIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJP
UEVSVFkoYnV0dG9ucywgQCJidXR0b25zIik7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFV
SVJFRF9QUk9QRVJUWShub3RlcywgQCJub3RlcyIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
UkVRVUlSRURfUFJPUEVSVFkodmFsdWVzLCBAInZhbHVlcyIpOworICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZCwgQCJwYXlsb2FkIik7CisgICAgVEhST1df
RVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShlcnJvciwgQCJlcnJvciIpOworICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkoZXJyb3JMaXN0LCBAImVycm9yTGlz
dCIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEVfSU5fQVJSQVkoZXJyb3JMaXN0
LCBbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBjbGFzc10pOworCisgICAgc2VsZi5jb2x1bW5O
YW1lcyA9IGNvbHVtbk5hbWVzOworICAgIHNlbGYuYnV0dG9ucyA9IGJ1dHRvbnM7CisgICAgc2Vs
Zi5kaXJlY3Rpb25hbGl0eSA9IGRpcmVjdGlvbmFsaXR5OworICAgIHNlbGYubm90ZXMgPSBub3Rl
czsKKyAgICBzZWxmLnRpbWVzdGFtcCA9IHRpbWVzdGFtcDsKKyAgICBzZWxmLnZhbHVlcyA9IHZh
bHVlczsKKyAgICBzZWxmLnBheWxvYWQgPSBwYXlsb2FkOworICAgIHNlbGYuZXJyb3IgPSBlcnJv
cjsKKyAgICBzZWxmLmVycm9yTGlzdCA9IGVycm9yTGlzdDsKKworICAgIHJldHVybiBzZWxmOwor
fQorCistICh2b2lkKXNldENvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1
bW5OYW1lcworeworICAgIFtzdXBlciBzZXRKU09OQXJyYXk6dG9KU09OU3RyaW5nQXJyYXkoY29s
dW1uTmFtZXMpIGZvcktleTpAImNvbHVtbk5hbWVzIl07Cit9CisKKy0gKE5TQXJyYXkvKjxOU1N0
cmluZz4qLyAqKWNvbHVtbk5hbWVzCit7CisgICAgcmV0dXJuIHRvT2JqQ1N0cmluZ0FycmF5KFtz
dXBlciBKU09OQXJyYXlGb3JLZXk6QCJjb2x1bW5OYW1lcyJdKTsKK30KKworLSAodm9pZClzZXRC
dXR0b25zOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilidXR0b25zCit7CisgICAgW3N1cGVyIHNl
dEpTT05BcnJheTp0b0pTT05TdHJpbmdBcnJheShidXR0b25zKSBmb3JLZXk6QCJidXR0b25zIl07
Cit9CisKKy0gKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWJ1dHRvbnMKK3sKKyAgICByZXR1cm4g
dG9PYmpDU3RyaW5nQXJyYXkoW3N1cGVyIEpTT05BcnJheUZvcktleTpAImJ1dHRvbnMiXSk7Cit9
CisKKy0gKHZvaWQpc2V0RGlyZWN0aW9uYWxpdHk6KFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1l
dGVyQnVuZGxlRGlyZWN0aW9uYWxpdHkpZGlyZWN0aW9uYWxpdHkKK3sKKyAgICBbc3VwZXIgc2V0
U3RyaW5nOnRvUHJvdG9jb2xTdHJpbmcoZGlyZWN0aW9uYWxpdHkpIGZvcktleTpAImRpcmVjdGlv
bmFsaXR5Il07Cit9CisKKy0gKFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlRGly
ZWN0aW9uYWxpdHkpZGlyZWN0aW9uYWxpdHkKK3sKKyAgICByZXR1cm4gZnJvbVByb3RvY29sU3Ry
aW5nPFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHk+KFtz
dXBlciBzdHJpbmdGb3JLZXk6QCJkaXJlY3Rpb25hbGl0eSJdKS52YWx1ZSgpOworfQorCistICh2
b2lkKXNldE5vdGVzOihOU1N0cmluZyAqKW5vdGVzCit7CisgICAgW3N1cGVyIHNldFN0cmluZzpu
b3RlcyBmb3JLZXk6QCJub3RlcyJdOworfQorCistIChOU1N0cmluZyAqKW5vdGVzCit7CisgICAg
cmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJub3RlcyJdOworfQorCistICh2b2lkKXNldFRp
bWVzdGFtcDooZG91YmxlKXRpbWVzdGFtcAoreworICAgIFtzdXBlciBzZXREb3VibGU6dGltZXN0
YW1wIGZvcktleTpAInRpbWVzdGFtcCJdOworfQorCistIChkb3VibGUpdGltZXN0YW1wCit7Cisg
ICAgcmV0dXJuIFtzdXBlciBkb3VibGVGb3JLZXk6QCJ0aW1lc3RhbXAiXTsKK30KKworLSAodm9p
ZClzZXRWYWx1ZXM6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcworeworICAgIFtzdXBl
ciBzZXRPYmplY3Q6dmFsdWVzIGZvcktleTpAInZhbHVlcyJdOworfQorCistIChSV0lQcm90b2Nv
bEpTT05PYmplY3QgKil2YWx1ZXMKK3sKKyAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9iamVj
dCA9IFtzdXBlciBvYmplY3RGb3JLZXk6QCJ2YWx1ZXMiXTsKKyAgICBpZiAoIW9iamVjdCkKKyAg
ICAgICAgcmV0dXJuIG5pbDsKKyAgICByZXR1cm4gW1tSV0lQcm90b2NvbEpTT05PYmplY3QgYWxs
b2NdIGluaXRXaXRoSlNPTk9iamVjdDpbW3N1cGVyIG9iamVjdEZvcktleTpAInZhbHVlcyJdIHRv
SlNPTk9iamVjdF0uZ2V0KCldOworfQorCistICh2b2lkKXNldFBheWxvYWQ6KFJXSVByb3RvY29s
SlNPTk9iamVjdCAqKXBheWxvYWQKK3sKKyAgICBbc3VwZXIgc2V0T2JqZWN0OnBheWxvYWQgZm9y
S2V5OkAicGF5bG9hZCJdOworfQorCistIChSV0lQcm90b2NvbEpTT05PYmplY3QgKilwYXlsb2Fk
Cit7CisgICAgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvYmplY3QgPSBbc3VwZXIgb2JqZWN0Rm9y
S2V5OkAicGF5bG9hZCJdOworICAgIGlmICghb2JqZWN0KQorICAgICAgICByZXR1cm4gbmlsOwor
ICAgIHJldHVybiBbW1JXSVByb3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5pdFdpdGhKU09OT2Jq
ZWN0Oltbc3VwZXIgb2JqZWN0Rm9yS2V5OkAicGF5bG9hZCJdIHRvSlNPTk9iamVjdF0uZ2V0KCld
OworfQorCistICh2b2lkKXNldEVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICopZXJy
b3IKK3sKKyAgICBbc3VwZXIgc2V0T2JqZWN0OmVycm9yIGZvcktleTpAImVycm9yIl07Cit9CisK
Ky0gKFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKillcnJvcgoreworICAgIFJXSVByb3RvY29s
SlNPTk9iamVjdCAqb2JqZWN0ID0gW3N1cGVyIG9iamVjdEZvcktleTpAImVycm9yIl07CisgICAg
aWYgKCFvYmplY3QpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgcmV0dXJuIFtbVGVzdFByb3Rv
Y29sRGF0YWJhc2VFcnJvciBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0Oltbc3VwZXIgb2JqZWN0
Rm9yS2V5OkAiZXJyb3IiXSB0b0pTT05PYmplY3RdLmdldCgpXTsKK30KKworLSAodm9pZClzZXRF
cnJvckxpc3Q6KE5TQXJyYXkvKjxUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yPiovICopZXJyb3JM
aXN0Cit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRV9JTl9BUlJBWShlcnJvckxp
c3QsIFtUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGNsYXNzXSk7CisgICAgW3N1cGVyIHNldEpT
T05BcnJheTp0b0pTT05PYmplY3RBcnJheShlcnJvckxpc3QpIGZvcktleTpAImVycm9yTGlzdCJd
OworfQorCistIChOU0FycmF5Lyo8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4qLyAqKWVycm9y
TGlzdAoreworICAgIHJldHVybiB0b09iakNBcnJheTxUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9y
Pihbc3VwZXIgSlNPTkFycmF5Rm9yS2V5OkAiZXJyb3JMaXN0Il0pOworfQorCitAZW5kCisKK0Bp
bXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xEYXRhYmFzZU9iamVjdFdpdGhQcm9wZXJ0eU5hbWVD
b25mbGljdHMKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBOU0Rp
Y3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZAoreworICAgIGlmICghKHNlbGYgPSBb
c3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiaW50ZWdlciJdLCBAImludGVnZXIiKTsK
KyAgICBzZWxmLmludGVnZXIgPSBwYXlsb2FkW0AiaW50ZWdlciJdOworCisgICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiYXJyYXkiXSwgQCJhcnJheSIp
OworICAgIHNlbGYuYXJyYXkgPSBwYXlsb2FkW0AiYXJyYXkiXTsKKworICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAInN0cmluZyJdLCBAInN0cmluZyIp
OworICAgIHNlbGYuc3RyaW5nID0gcGF5bG9hZFtAInN0cmluZyJdOworCisgICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AidmFsdWUiXSwgQCJ2YWx1ZSIp
OworICAgIHNlbGYudmFsdWUgPSBwYXlsb2FkW0AidmFsdWUiXTsKKworICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAIm9iamVjdCJdLCBAIm9iamVjdCIp
OworICAgIHNlbGYub2JqZWN0ID0gcGF5bG9hZFtAIm9iamVjdCJdOworCisgICAgcmV0dXJuIHNl
bGY7Cit9CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9j
b2xKU09OT2JqZWN0ICopb2JqZWN0Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0
aEpTT05PYmplY3Q6W29iamVjdCB0b0pTT05PYmplY3RdLmdldCgpXSkpCisgICAgICAgIHJldHVy
biBuaWw7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
SW50ZWdlcjooTlNTdHJpbmcgKilpbnRlZ2VyIGFycmF5OihOU1N0cmluZyAqKWFycmF5IHN0cmlu
ZzooTlNTdHJpbmcgKilzdHJpbmcgdmFsdWU6KE5TU3RyaW5nICopdmFsdWUgb2JqZWN0OihOU1N0
cmluZyAqKW9iamVjdAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAg
ICByZXR1cm4gbmlsOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJU
WShpbnRlZ2VyLCBAImludGVnZXIiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVE
X1BST1BFUlRZKGFycmF5LCBAImFycmF5Iik7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFV
SVJFRF9QUk9QRVJUWShzdHJpbmcsIEAic3RyaW5nIik7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9SRVFVSVJFRF9QUk9QRVJUWSh2YWx1ZSwgQCJ2YWx1ZSIpOworICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfUkVRVUlSRURfUFJPUEVSVFkob2JqZWN0LCBAIm9iamVjdCIpOworCisgICAgc2VsZi5p
bnRlZ2VyID0gaW50ZWdlcjsKKyAgICBzZWxmLmFycmF5ID0gYXJyYXk7CisgICAgc2VsZi5zdHJp
bmcgPSBzdHJpbmc7CisgICAgc2VsZi52YWx1ZSA9IHZhbHVlOworICAgIHNlbGYub2JqZWN0ID0g
b2JqZWN0OworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpc2V0SW50ZWdlcjooTlNT
dHJpbmcgKilpbnRlZ2VyCit7CisgICAgW3N1cGVyIHNldFN0cmluZzppbnRlZ2VyIGZvcktleTpA
ImludGVnZXIiXTsKK30KKworLSAoTlNTdHJpbmcgKilpbnRlZ2VyCit7CisgICAgcmV0dXJuIFtz
dXBlciBzdHJpbmdGb3JLZXk6QCJpbnRlZ2VyIl07Cit9CisKKy0gKHZvaWQpc2V0QXJyYXk6KE5T
U3RyaW5nICopYXJyYXkKK3sKKyAgICBbc3VwZXIgc2V0U3RyaW5nOmFycmF5IGZvcktleTpAImFy
cmF5Il07Cit9CisKKy0gKE5TU3RyaW5nICopYXJyYXkKK3sKKyAgICByZXR1cm4gW3N1cGVyIHN0
cmluZ0ZvcktleTpAImFycmF5Il07Cit9CisKKy0gKHZvaWQpc2V0U3RyaW5nOihOU1N0cmluZyAq
KXN0cmluZworeworICAgIFtzdXBlciBzZXRTdHJpbmc6c3RyaW5nIGZvcktleTpAInN0cmluZyJd
OworfQorCistIChOU1N0cmluZyAqKXN0cmluZworeworICAgIHJldHVybiBbc3VwZXIgc3RyaW5n
Rm9yS2V5OkAic3RyaW5nIl07Cit9CisKKy0gKHZvaWQpc2V0VmFsdWU6KE5TU3RyaW5nICopdmFs
dWUKK3sKKyAgICBbc3VwZXIgc2V0U3RyaW5nOnZhbHVlIGZvcktleTpAInZhbHVlIl07Cit9CisK
Ky0gKE5TU3RyaW5nICopdmFsdWUKK3sKKyAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpA
InZhbHVlIl07Cit9CisKKy0gKHZvaWQpc2V0T2JqZWN0OihOU1N0cmluZyAqKW9iamVjdAorewor
ICAgIFtzdXBlciBzZXRTdHJpbmc6b2JqZWN0IGZvcktleTpAIm9iamVjdCJdOworfQorCistIChO
U1N0cmluZyAqKW9iamVjdAoreworICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAib2Jq
ZWN0Il07Cit9CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbERhdGFiYXNl
RHVtbXlPYmplY3QKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBO
U0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZAoreworICAgIGlmICghKHNlbGYg
PSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgcmV0dXJuIHNlbGY7
Cit9CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xK
U09OT2JqZWN0ICopb2JqZWN0Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEpT
T05PYmplY3Q6W29iamVjdCB0b0pTT05PYmplY3RdLmdldCgpXSkpCisgICAgICAgIHJldHVybiBu
aWw7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gVGVz
dFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQ
YXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCit7
CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisK
KyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJkaXJl
Y3Rpb25hbGl0eSJdLCBAImRpcmVjdGlvbmFsaXR5Iik7CisgICAgT3B0aW9uYWw8VGVzdFByb3Rv
Y29sVGVzdFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5PiBkaXJlY3Rpb25hbGl0eSA9IGZy
b21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9u
YWxpdHk+KHBheWxvYWRbQCJkaXJlY3Rpb25hbGl0eSJdKTsKKyAgICBUSFJPV19FWENFUFRJT05f
Rk9SX0JBRF9FTlVNX1ZBTFVFKGRpcmVjdGlvbmFsaXR5LCBAImRpcmVjdGlvbmFsaXR5Iik7Cisg
ICAgc2VsZi5kaXJlY3Rpb25hbGl0eSA9IGRpcmVjdGlvbmFsaXR5LnZhbHVlKCk7CisKKyAgICBU
SFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJidXR0b25zIl0s
IEAiYnV0dG9ucyIpOworICAgIHNlbGYuYnV0dG9ucyA9IHBheWxvYWRbQCJidXR0b25zIl07CisK
KyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJjb2x1
bW5OYW1lcyJdLCBAImNvbHVtbk5hbWVzIik7CisgICAgc2VsZi5jb2x1bW5OYW1lcyA9IHBheWxv
YWRbQCJjb2x1bW5OYW1lcyJdOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9Q
Uk9QRVJUWShwYXlsb2FkW0Aibm90ZXMiXSwgQCJub3RlcyIpOworICAgIHNlbGYubm90ZXMgPSBw
YXlsb2FkW0Aibm90ZXMiXTsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJP
UEVSVFkocGF5bG9hZFtAInRpbWVzdGFtcCJdLCBAInRpbWVzdGFtcCIpOworICAgIHNlbGYudGlt
ZXN0YW1wID0gW3BheWxvYWRbQCJ0aW1lc3RhbXAiXSBkb3VibGVWYWx1ZV07CisKKyAgICBUSFJP
V19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJ2YWx1ZXMiXSwgQCJ2
YWx1ZXMiKTsKKyAgICBzZWxmLnZhbHVlcyA9IHBheWxvYWRbQCJ2YWx1ZXMiXTsKKworICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAInBheWxvYWQiXSwg
QCJwYXlsb2FkIik7CisgICAgc2VsZi5wYXlsb2FkID0gcGF5bG9hZFtAInBheWxvYWQiXTsKKwor
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImVycm9y
Il0sIEAiZXJyb3IiKTsKKyAgICBzZWxmLmVycm9yID0gW1tUZXN0UHJvdG9jb2xEYXRhYmFzZUVy
cm9yIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZFtAImVycm9yIl1dOworCisgICAgcmV0
dXJuIHNlbGY7Cit9CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICopb2JqZWN0Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBp
bml0V2l0aEpTT05PYmplY3Q6W29iamVjdCB0b0pTT05PYmplY3RdLmdldCgpXSkpCisgICAgICAg
IHJldHVybiBuaWw7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoRGlyZWN0aW9uYWxpdHk6KFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJl
Y3Rpb25hbGl0eSlkaXJlY3Rpb25hbGl0eSBidXR0b25zOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8g
KilidXR0b25zIGNvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1l
cyBub3RlczooTlNTdHJpbmcgKilub3RlcyB0aW1lc3RhbXA6KGRvdWJsZSl0aW1lc3RhbXAgdmFs
dWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKil2YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xK
U09OT2JqZWN0ICopcGF5bG9hZCBlcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKWVy
cm9yCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBu
aWw7CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKGJ1dHRvbnMs
IEAiYnV0dG9ucyIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFko
Y29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JF
UVVJUkVEX1BST1BFUlRZKG5vdGVzLCBAIm5vdGVzIik7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9SRVFVSVJFRF9QUk9QRVJUWSh2YWx1ZXMsIEAidmFsdWVzIik7CisgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkLCBAInBheWxvYWQiKTsKKyAgICBUSFJP
V19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKGVycm9yLCBAImVycm9yIik7CisKKyAg
ICBzZWxmLmRpcmVjdGlvbmFsaXR5ID0gZGlyZWN0aW9uYWxpdHk7CisgICAgc2VsZi5idXR0b25z
ID0gYnV0dG9uczsKKyAgICBzZWxmLmNvbHVtbk5hbWVzID0gY29sdW1uTmFtZXM7CisgICAgc2Vs
Zi5ub3RlcyA9IG5vdGVzOworICAgIHNlbGYudGltZXN0YW1wID0gdGltZXN0YW1wOworICAgIHNl
bGYudmFsdWVzID0gdmFsdWVzOworICAgIHNlbGYucGF5bG9hZCA9IHBheWxvYWQ7CisgICAgc2Vs
Zi5lcnJvciA9IGVycm9yOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpc2V0RGly
ZWN0aW9uYWxpdHk6KFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0
eSlkaXJlY3Rpb25hbGl0eQoreworICAgIFtzdXBlciBzZXRTdHJpbmc6dG9Qcm90b2NvbFN0cmlu
ZyhkaXJlY3Rpb25hbGl0eSkgZm9yS2V5OkAiZGlyZWN0aW9uYWxpdHkiXTsKK30KKworLSAoVGVz
dFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5KWRpcmVjdGlvbmFsaXR5
Cit7CisgICAgcmV0dXJuIGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xUZXN0UGFyYW1l
dGVyQnVuZGxlRGlyZWN0aW9uYWxpdHk+KFtzdXBlciBzdHJpbmdGb3JLZXk6QCJkaXJlY3Rpb25h
bGl0eSJdKS52YWx1ZSgpOworfQorCistICh2b2lkKXNldEJ1dHRvbnM6KE5TQXJyYXkvKjxOU1N0
cmluZz4qLyAqKWJ1dHRvbnMKK3sKKyAgICBbc3VwZXIgc2V0SlNPTkFycmF5OnRvSlNPTlN0cmlu
Z0FycmF5KGJ1dHRvbnMpIGZvcktleTpAImJ1dHRvbnMiXTsKK30KKworLSAoTlNBcnJheS8qPE5T
U3RyaW5nPiovICopYnV0dG9ucworeworICAgIHJldHVybiB0b09iakNTdHJpbmdBcnJheShbc3Vw
ZXIgSlNPTkFycmF5Rm9yS2V5OkAiYnV0dG9ucyJdKTsKK30KKworLSAodm9pZClzZXRDb2x1bW5O
YW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMKK3sKKyAgICBbc3VwZXIg
c2V0SlNPTkFycmF5OnRvSlNPTlN0cmluZ0FycmF5KGNvbHVtbk5hbWVzKSBmb3JLZXk6QCJjb2x1
bW5OYW1lcyJdOworfQorCistIChOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcwor
eworICAgIHJldHVybiB0b09iakNTdHJpbmdBcnJheShbc3VwZXIgSlNPTkFycmF5Rm9yS2V5OkAi
Y29sdW1uTmFtZXMiXSk7Cit9CisKKy0gKHZvaWQpc2V0Tm90ZXM6KE5TU3RyaW5nICopbm90ZXMK
K3sKKyAgICBbc3VwZXIgc2V0U3RyaW5nOm5vdGVzIGZvcktleTpAIm5vdGVzIl07Cit9CisKKy0g
KE5TU3RyaW5nICopbm90ZXMKK3sKKyAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAIm5v
dGVzIl07Cit9CisKKy0gKHZvaWQpc2V0VGltZXN0YW1wOihkb3VibGUpdGltZXN0YW1wCit7Cisg
ICAgW3N1cGVyIHNldERvdWJsZTp0aW1lc3RhbXAgZm9yS2V5OkAidGltZXN0YW1wIl07Cit9CisK
Ky0gKGRvdWJsZSl0aW1lc3RhbXAKK3sKKyAgICByZXR1cm4gW3N1cGVyIGRvdWJsZUZvcktleTpA
InRpbWVzdGFtcCJdOworfQorCistICh2b2lkKXNldFZhbHVlczooUldJUHJvdG9jb2xKU09OT2Jq
ZWN0ICopdmFsdWVzCit7CisgICAgW3N1cGVyIHNldE9iamVjdDp2YWx1ZXMgZm9yS2V5OkAidmFs
dWVzIl07Cit9CisKKy0gKFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcworeworICAgIFJX
SVByb3RvY29sSlNPTk9iamVjdCAqb2JqZWN0ID0gW3N1cGVyIG9iamVjdEZvcktleTpAInZhbHVl
cyJdOworICAgIGlmICghb2JqZWN0KQorICAgICAgICByZXR1cm4gbmlsOworICAgIHJldHVybiBb
W1JXSVByb3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0Oltbc3VwZXIg
b2JqZWN0Rm9yS2V5OkAidmFsdWVzIl0gdG9KU09OT2JqZWN0XS5nZXQoKV07Cit9CisKKy0gKHZv
aWQpc2V0UGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZAoreworICAgIFtz
dXBlciBzZXRPYmplY3Q6cGF5bG9hZCBmb3JLZXk6QCJwYXlsb2FkIl07Cit9CisKKy0gKFJXSVBy
b3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQKK3sKKyAgICBSV0lQcm90b2NvbEpTT05PYmplY3Qg
Km9iamVjdCA9IFtzdXBlciBvYmplY3RGb3JLZXk6QCJwYXlsb2FkIl07CisgICAgaWYgKCFvYmpl
Y3QpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgcmV0dXJuIFtbUldJUHJvdG9jb2xKU09OT2Jq
ZWN0IGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6W1tzdXBlciBvYmplY3RGb3JLZXk6QCJwYXls
b2FkIl0gdG9KU09OT2JqZWN0XS5nZXQoKV07Cit9CisKKy0gKHZvaWQpc2V0RXJyb3I6KFRlc3RQ
cm90b2NvbERhdGFiYXNlRXJyb3IgKillcnJvcgoreworICAgIFtzdXBlciBzZXRPYmplY3Q6ZXJy
b3IgZm9yS2V5OkAiZXJyb3IiXTsKK30KKworLSAoVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAq
KWVycm9yCit7CisgICAgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvYmplY3QgPSBbc3VwZXIgb2Jq
ZWN0Rm9yS2V5OkAiZXJyb3IiXTsKKyAgICBpZiAoIW9iamVjdCkKKyAgICAgICAgcmV0dXJuIG5p
bDsKKyAgICByZXR1cm4gW1tUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGFsbG9jXSBpbml0V2l0
aEpTT05PYmplY3Q6W1tzdXBlciBvYmplY3RGb3JLZXk6QCJlcnJvciJdIHRvSlNPTk9iamVjdF0u
Z2V0KCldOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5t
bQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V4cGVjdGVkL3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbi1yZXN1bHQgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlw
ZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMC4uMmM1OWU5NDM0MjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1y
ZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uLXJlc3VsdApAQCAtMCwwICsxLDE2MjggQEAKKyMj
IyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMuaW4KKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworLy8gVGVzdAorSW5z
cGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiVGVzdCIsIG51bGwpOworSW5zcGVjdG9yQmFj
a2VuZC5yZWdpc3RlckVudW0oIlRlc3QuVW5jYXN0ZWRBbmltYWxzIiwge1BpZ3M6ICJQaWdzIiwg
Q293czogIkNvd3MiLCBDYXRzOiAiQ2F0cyIsIEhlbnM6ICJIZW5zIn0pOworSW5zcGVjdG9yQmFj
a2VuZC5yZWdpc3RlckVudW0oIlRlc3QuQ2FzdGVkQW5pbWFscyIsIHtEdWNrczogIkR1Y2tzIiwg
SGVuczogIkhlbnMiLCBDcm93czogIkNyb3dzIiwgRmxhbWluZ29zOiAiRmxhbWluZ29zIn0pOwor
SW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiVGVzdCIsIG51bGwpOworIyMjIEVuZCBG
aWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMuaW4KKworIyMjIEJlZ2luIEZpbGU6IFRl
c3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgorLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
PHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKworbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CisKK2NsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2
b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNw
YXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9Cisg
ICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4g
bV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQorcHJpdmF0ZToKKyAgICBSZWZQdHI8QmFja2Vu
ZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Cit9OworCisKKworCit9IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQorIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJz
LmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaW5jbHVkZSAiVGVzdFByb3RvY29s
T2JqZWN0cy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJ
bnNwZWN0b3IgeworCit0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKworCisKK30gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgK
KworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0
Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCisjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5o
IgorI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCitu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisj
IyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxl
OiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3Rm
L1BsYXRmb3JtLmg+CisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVk
ZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwor
bmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEZyb250ZW5kUm91dGVyOworCit9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMu
aAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5q
c29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVy
cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+
CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKwor
CisKKy8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgorbmFtZXNwYWNlIFRlc3QgeworY2xhc3MgVHlw
ZU5lZWRpbmdDYXN0OworY2xhc3MgUmVjdXJzaXZlT2JqZWN0MTsKK2NsYXNzIFJlY3Vyc2l2ZU9i
amVjdDI7CitlbnVtIGNsYXNzIFVuY2FzdGVkQW5pbWFsczsKK2VudW0gY2xhc3MgQ2FzdGVkQW5p
bWFsczsKK30gLy8gVGVzdAorLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgorCisKKy8v
IFR5cGVkZWZzLgorbmFtZXNwYWNlIFRlc3QgewordHlwZWRlZiBpbnQgQ2FzdGVkT2JqZWN0SWQ7
Cit0eXBlZGVmIGludCBVbmNhc3RlZE9iamVjdElkOworfSAvLyBUZXN0CisvLyBFbmQgb2YgdHlw
ZWRlZnMuCisKK25hbWVzcGFjZSBUZXN0SGVscGVycyB7CisKK1N0cmluZyBnZXRFbnVtQ29uc3Rh
bnRWYWx1ZShpbnQgY29kZSk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRFbnVt
Q29uc3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkKK3sKKyAgICByZXR1cm4gZ2V0RW51bUNvbnN0YW50
VmFsdWUoc3RhdGljX2Nhc3Q8aW50PihlbnVtVmFsdWUpKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
VGVzdEhlbHBlcnMKKworbmFtZXNwYWNlIFRlc3QgeworCisvKiBBIGR1bW15IHR5cGUgdGhhdCBy
ZXF1aXJlcyBydW50aW1lIGNhc3RzLCBhbmQgZm9yY2VzIG5vbi1wcmltaXRpdmUgcmVmZXJlbmNl
ZCB0eXBlcyB0byBhbHNvIGVtaXQgcnVudGltZSBjYXN0IGhlbHBlcnMuICovCitjbGFzcyBUeXBl
TmVlZGluZ0Nhc3QgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CitwdWJsaWM6CisgICAgZW51
bSB7CisgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKKyAgICAgICAgU3RyaW5nU2V0ID0gMSA8PCAw
LAorICAgICAgICBOdW1iZXJTZXQgPSAxIDw8IDEsCisgICAgICAgIEFuaW1hbHNTZXQgPSAxIDw8
IDIsCisgICAgICAgIElkU2V0ID0gMSA8PCAzLAorICAgICAgICBUcmVlU2V0ID0gMSA8PCA0LAor
ICAgICAgICBBbGxGaWVsZHNTZXQgPSAoU3RyaW5nU2V0IHwgTnVtYmVyU2V0IHwgQW5pbWFsc1Nl
dCB8IElkU2V0IHwgVHJlZVNldCkKKyAgICB9OworCisgICAgdGVtcGxhdGU8aW50IFNUQVRFPgor
ICAgIGNsYXNzIEJ1aWxkZXIgeworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxKU09OOjpP
YmplY3Q+IG1fcmVzdWx0OworCisgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNU
QVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAq
cmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKKyAgICAgICAg
fQorCisgICAgICAgIEJ1aWxkZXIoUmVmPC8qVHlwZU5lZWRpbmdDYXN0Ki9KU09OOjpPYmplY3Q+
JiYgb2JqZWN0KQorICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBi
dWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAgICAgICB9CisgICAgICAgIGZy
aWVuZCBjbGFzcyBUeXBlTmVlZGluZ0Nhc3Q7CisgICAgcHVibGljOgorCisgICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBTdHJpbmdTZXQ+JiBzZXRTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFN0cmluZ1NldCks
IHByb3BlcnR5X3N0cmluZ19hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
U3RyaW5nKCJzdHJpbmciX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8
U3RyaW5nU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IE51bWJl
clNldD4mIHNldE51bWJlcihpbnQgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBOdW1iZXJTZXQpLCBwcm9wZXJ0eV9udW1iZXJfYWxyZWFkeV9z
ZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldEludGVnZXIoIm51bWJlciJfcywgdmFsdWUp
OworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxOdW1iZXJTZXQ+KCk7CisgICAgICAgIH0K
KworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQW5pbWFsc1NldD4mIHNldEFuaW1hbHMoSW5zcGVj
dG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscyB2YWx1ZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEFuaW1hbHNTZXQpLCBwcm9wZXJ0eV9h
bmltYWxzX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImFu
aW1hbHMiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3Rh
bnRWYWx1ZSh2YWx1ZSkpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxBbmltYWxzU2V0
PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IElkU2V0PiYgc2V0SWQo
aW50IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRF
ICYgSWRTZXQpLCBwcm9wZXJ0eV9pZF9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0SW50ZWdlcigiaWQiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3Rh
dGU8SWRTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVHJlZVNl
dD4mIHNldFRyZWUoUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9i
amVjdDE+IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgVHJlZVNldCksIHByb3BlcnR5X3RyZWVfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAg
bV9yZXN1bHQtPnNldE9iamVjdCgidHJlZSJfcywgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxUcmVlU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgUmVmPFR5cGVOZWVk
aW5nQ2FzdD4gcmVsZWFzZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CisgICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVChzaXplb2YoVHlwZU5lZWRpbmdDYXN0KSA9PSBzaXplb2YoSlNPTjo6
T2JqZWN0KSwgY2Fubm90X2Nhc3QpOworCisgICAgICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiBq
c29uUmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKKyAgICAgICAgICAgIGF1dG8g
cmVzdWx0ID0gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8VHlwZU5lZWRpbmdDYXN0Pio+
KCZqc29uUmVzdWx0KSk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9Cisg
ICAgfTsKKworICAgIC8qCisgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgorICAgICAqIFJl
ZjxUeXBlTmVlZGluZ0Nhc3Q+IHJlc3VsdCA9IFR5cGVOZWVkaW5nQ2FzdDo6Y3JlYXRlKCkKKyAg
ICAgKiAgICAgLnNldFN0cmluZyguLi4pCisgICAgICogICAgIC5zZXROdW1iZXIoLi4uKQorICAg
ICAqICAgICAuc2V0QW5pbWFscyguLi4pCisgICAgICogICAgIC5zZXRJZCguLi4pCisgICAgICog
ICAgIC5zZXRUcmVlKC4uLikKKyAgICAgKiAgICAgLnJlbGVhc2UoKTsKKyAgICAgKi8KKyAgICBz
dGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVy
biBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICB9Cit9
OworCitlbnVtIGNsYXNzIFVuY2FzdGVkQW5pbWFscyB7CisgICAgUGlncyA9IDQsCisgICAgQ293
cyA9IDUsCisgICAgQ2F0cyA9IDYsCisgICAgSGVucyA9IDEsCit9OyAvLyBlbnVtIGNsYXNzIFVu
Y2FzdGVkQW5pbWFscworCitlbnVtIGNsYXNzIENhc3RlZEFuaW1hbHMgeworICAgIER1Y2tzID0g
MCwKKyAgICBIZW5zID0gMSwKKyAgICBDcm93cyA9IDIsCisgICAgRmxhbWluZ29zID0gMywKK307
IC8vIGVudW0gY2xhc3MgQ2FzdGVkQW5pbWFscworCitjbGFzcyBSZWN1cnNpdmVPYmplY3QxIDog
cHVibGljIEpTT046Ok9iamVjdEJhc2UgeworcHVibGljOgorICAgIGVudW0geworICAgICAgICBO
b0ZpZWxkc1NldCA9IDAsCisgICAgICAgIEFsbEZpZWxkc1NldCA9IDAKKyAgICB9OworCisgICAg
dGVtcGxhdGU8aW50IFNUQVRFPgorICAgIGNsYXNzIEJ1aWxkZXIgeworICAgIHByaXZhdGU6Cisg
ICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVzdWx0OworCisgICAgICAgIHRlbXBsYXRl
PGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RF
UD4qPih0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXIoUmVmPC8qUmVjdXJzaXZl
T2JqZWN0MSovSlNPTjo6T2JqZWN0PiYmIG9iamVjdCkKKyAgICAgICAgICAgIDogbV9yZXN1bHQo
V1RGTW92ZShvYmplY3QpKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChT
VEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsK
KyAgICAgICAgfQorICAgICAgICBmcmllbmQgY2xhc3MgUmVjdXJzaXZlT2JqZWN0MTsKKyAgICBw
dWJsaWM6CisKKyAgICAgICAgUmVmPFJlY3Vyc2l2ZU9iamVjdDE+IHJlbGVhc2UoKQorICAgICAg
ICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJl
c3VsdF9pc19ub3RfcmVhZHkpOworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFJl
Y3Vyc2l2ZU9iamVjdDEpID09IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7CisK
KyAgICAgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25SZXN1bHQgPSBtX3Jlc3VsdC5yZWxl
YXNlTm9uTnVsbCgpOworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBXVEZNb3ZlKCpyZWludGVy
cHJldF9jYXN0PFJlZjxSZWN1cnNpdmVPYmplY3QxPio+KCZqc29uUmVzdWx0KSk7CisgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgfTsKKworICAgIC8qCisgICAgICog
U3ludGhldGljIGNvbnN0cnVjdG9yOgorICAgICAqIFJlZjxSZWN1cnNpdmVPYmplY3QxPiByZXN1
bHQgPSBSZWN1cnNpdmVPYmplY3QxOjpjcmVhdGUoKQorICAgICAqICAgICAucmVsZWFzZSgpOwor
ICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRl
KCkpOworICAgIH0KKworICAgIHZvaWQgc2V0T2JqKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpUZXN0OjpSZWN1cnNpdmVPYmplY3QyPiB2YWx1ZSkKKyAgICB7CisgICAgICAgIEpTT046Ok9i
amVjdEJhc2U6OnNldE9iamVjdCgib2JqIl9zLCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgfQorfTsK
KworY2xhc3MgUmVjdXJzaXZlT2JqZWN0MiA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKK3B1
YmxpYzoKKyAgICBlbnVtIHsKKyAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAorICAgICAgICBBbGxG
aWVsZHNTZXQgPSAwCisgICAgfTsKKworICAgIHRlbXBsYXRlPGludCBTVEFURT4KKyAgICBjbGFz
cyBCdWlsZGVyIHsKKyAgICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBt
X3Jlc3VsdDsKKworICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNU
RVA+JiBjYXN0U3RhdGUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJw
cmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CisgICAgICAgIH0KKworICAg
ICAgICBCdWlsZGVyKFJlZjwvKlJlY3Vyc2l2ZU9iamVjdDIqL0pTT046Ok9iamVjdD4mJiBvYmpl
Y3QpCisgICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKKyAgICAgICAgewor
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJf
Y3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CisgICAgICAgIH0KKyAgICAgICAgZnJpZW5kIGNs
YXNzIFJlY3Vyc2l2ZU9iamVjdDI7CisgICAgcHVibGljOgorCisgICAgICAgIFJlZjxSZWN1cnNp
dmVPYmplY3QyPiByZWxlYXNlKCkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihSZWN1cnNpdmVPYmplY3QyKSA9PSBzaXplb2YoSlNP
Tjo6T2JqZWN0KSwgY2Fubm90X2Nhc3QpOworCisgICAgICAgICAgICBSZWY8SlNPTjo6T2JqZWN0
PiBqc29uUmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKKyAgICAgICAgICAgIGF1
dG8gcmVzdWx0ID0gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8UmVjdXJzaXZlT2JqZWN0
Mj4qPigmanNvblJlc3VsdCkpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAg
fQorICAgIH07CisKKyAgICAvKgorICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKKyAgICAg
KiBSZWY8UmVjdXJzaXZlT2JqZWN0Mj4gcmVzdWx0ID0gUmVjdXJzaXZlT2JqZWN0Mjo6Y3JlYXRl
KCkKKyAgICAgKiAgICAgLnJlbGVhc2UoKTsKKyAgICAgKi8KKyAgICBzdGF0aWMgQnVpbGRlcjxO
b0ZpZWxkc1NldD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmll
bGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICB9CisKKyAgICB2b2lkIHNldE9i
aihSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT4gdmFs
dWUpCisgICAgeworICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRPYmplY3QoIm9iaiJfcywg
V1RGTW92ZSh2YWx1ZSkpOworICAgIH0KK307CisKK30gLy8gVGVzdAorCit0ZW1wbGF0ZTw+IHN0
cnVjdCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1h
bHM+IHsKK3N0YXRpYyB2b2lkIGFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEpTT046OlZhbHVl
Kik7Cit9OwordGVtcGxhdGU8PiBzdHJ1Y3QgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+IHsKK3N0YXRpYyBSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0PiBydW50aW1lQ2FzdChSZWZQdHI8SlNPTjo6
VmFsdWU+JiYgdmFsdWUpOworc3RhdGljIHZvaWQgYXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUo
SlNPTjo6VmFsdWUqKTsKK307Cit0ZW1wbGF0ZTw+IHN0cnVjdCBCaW5kaW5nVHJhaXRzPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+IHsKK3N0YXRpYyB2b2lkIGFz
c2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEpTT046OlZhbHVlKik7Cit9OwordGVtcGxhdGU8PiBz
dHJ1Y3QgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVP
YmplY3QyPiB7CitzdGF0aWMgdm9pZCBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShKU09OOjpW
YWx1ZSopOworfTsKKworbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKKwordGVtcGxhdGU8dHlwZW5h
bWUgUHJvdG9jb2xFbnVtVHlwZT4KK09wdGlvbmFsPFByb3RvY29sRW51bVR5cGU+IHBhcnNlRW51
bVZhbHVlRnJvbVN0cmluZyhjb25zdCBTdHJpbmcmKTsKKworLy8gRW51bXMgaW4gdGhlICdUZXN0
JyBEb21haW4KK3RlbXBsYXRlPD4KK09wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6
OlVuY2FzdGVkQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFscz4oY29uc3QgU3RyaW5nJik7Cit0ZW1wbGF0ZTw+
CitPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPiBwYXJz
ZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5p
bWFscz4oY29uc3QgU3RyaW5nJik7CisKK30gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCisKK30g
Ly8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCituYW1l
c3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwor
CisvLyBIYXNoIGRlY2xhcmF0aW9ucyBpbiB0aGUgJ1Rlc3QnIERvbWFpbgordGVtcGxhdGU8Pgor
c3RydWN0IERlZmF1bHRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5p
bWFscz4geworICAgIHR5cGVkZWYgSW50SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpV
bmNhc3RlZEFuaW1hbHM+IEhhc2g7Cit9OwordGVtcGxhdGU8Pgorc3RydWN0IERlZmF1bHRIYXNo
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+IHsKKyAgICB0eXBlZGVm
IEludEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz4gSGFzaDsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdURgorIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmpl
Y3RzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5q
c29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisKKyNpbmNsdWRl
IDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVz
cGFjZSBJbnNwZWN0b3IgeworCituYW1lc3BhY2UgUHJvdG9jb2wgeworCituYW1lc3BhY2UgVGVz
dEhlbHBlcnMgeworCitzdGF0aWMgY29uc3QgY2hhciogY29uc3QgZW51bV9jb25zdGFudF92YWx1
ZXNbXSA9IHsKKyAgICAiRHVja3MiLAorICAgICJIZW5zIiwKKyAgICAiQ3Jvd3MiLAorICAgICJG
bGFtaW5nb3MiLAorICAgICJQaWdzIiwKKyAgICAiQ293cyIsCisgICAgIkNhdHMiLAorfTsKKwor
U3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CisgICAgcmV0dXJuIGVudW1f
Y29uc3RhbnRfdmFsdWVzW2NvZGVdOworfQorCisvLyBFbnVtcyBpbiB0aGUgJ1Rlc3QnIERvbWFp
bgorCit0ZW1wbGF0ZTw+CitPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNh
c3RlZEFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29s
OjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCit7
CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0geworICAgICAgICAo
c2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFsczo6UGlncywK
KyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1h
bHM6OkNvd3MsCisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VW5j
YXN0ZWRBbmltYWxzOjpDYXRzLAorICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6
OlRlc3Q6OlVuY2FzdGVkQW5pbWFsczo6SGVucywKKyAgICB9OworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgNDsgKytpKQorICAgICAgICBpZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25z
dGFudF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNbaV1dKQorICAgICAgICAgICAgcmV0dXJuIChJbnNw
ZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHMpY29uc3RhbnRWYWx1ZXNbaV07
CisKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCit0ZW1wbGF0ZTw+CitPcHRpb25hbDxJ
bnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPiBwYXJzZUVudW1WYWx1ZUZy
b21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz4oY29uc3Qg
U3RyaW5nJiBwcm90b2NvbFN0cmluZykKK3sKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0
YW50VmFsdWVzW10gPSB7CisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVz
dDo6Q2FzdGVkQW5pbWFsczo6RHVja3MsCisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90
b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFsczo6SGVucywKKyAgICAgICAgKHNpemVfdClJbnNwZWN0
b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzOjpDcm93cywKKyAgICAgICAgKHNpemVf
dClJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzOjpGbGFtaW5nb3MsCisg
ICAgfTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDQ7ICsraSkKKyAgICAgICAgaWYgKHBy
b3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkK
KyAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5p
bWFscyljb25zdGFudFZhbHVlc1tpXTsKKworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCisKKworCit2b2lkIEJpbmRpbmdUcmFpdHM8SW5z
cGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz46OmFzc2VydFZhbHVlSGFzRXhw
ZWN0ZWRUeXBlKEpTT046OlZhbHVlKiB2YWx1ZSkKK3sKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAg
IEFTU0VSVF9BUkcodmFsdWUsIHZhbHVlKTsKKyAgICBTdHJpbmcgcmVzdWx0OworICAgIGJvb2wg
Y2FzdFN1Y2NlZWRlZCA9IHZhbHVlLT5hc1N0cmluZyhyZXN1bHQpOworICAgIEFTU0VSVChjYXN0
U3VjY2VlZGVkKTsKKyAgICBBU1NFUlQocmVzdWx0ID09ICJEdWNrcyIgfHwgcmVzdWx0ID09ICJI
ZW5zIiB8fCByZXN1bHQgPT0gIkNyb3dzIiB8fCByZXN1bHQgPT0gIkZsYW1pbmdvcyIpOworI2Vs
c2UgLy8gQVNTRVJUX0VOQUJMRUQKKyAgICBVTlVTRURfUEFSQU0odmFsdWUpOworI2VuZGlmIC8v
IEFTU0VSVF9FTkFCTEVECit9CisKK3ZvaWQgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShK
U09OOjpWYWx1ZSogdmFsdWUpCit7CisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICBBU1NFUlRfQVJH
KHZhbHVlLCB2YWx1ZSk7CisgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gb2JqZWN0OworICAgIGJv
b2wgY2FzdFN1Y2NlZWRlZCA9IHZhbHVlLT5hc09iamVjdChvYmplY3QpOworICAgIEFTU0VSVF9V
TlVTRUQoY2FzdFN1Y2NlZWRlZCwgY2FzdFN1Y2NlZWRlZCk7CisgICAgeworICAgICAgICBhdXRv
IHN0cmluZ1BvcyA9IG9iamVjdC0+ZmluZCgic3RyaW5nIl9zKTsKKyAgICAgICAgQVNTRVJUKHN0
cmluZ1BvcyAhPSBvYmplY3QtPmVuZCgpKTsKKyAgICAgICAgQmluZGluZ1RyYWl0czxTdHJpbmc+
Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShzdHJpbmdQb3MtPnZhbHVlLmdldCgpKTsKKyAg
ICB9CisgICAgeworICAgICAgICBhdXRvIG51bWJlclBvcyA9IG9iamVjdC0+ZmluZCgibnVtYmVy
Il9zKTsKKyAgICAgICAgQVNTRVJUKG51bWJlclBvcyAhPSBvYmplY3QtPmVuZCgpKTsKKyAgICAg
ICAgQmluZGluZ1RyYWl0czxpbnQ+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShudW1iZXJQ
b3MtPnZhbHVlLmdldCgpKTsKKyAgICB9CisgICAgeworICAgICAgICBhdXRvIGFuaW1hbHNQb3Mg
PSBvYmplY3QtPmZpbmQoImFuaW1hbHMiX3MpOworICAgICAgICBBU1NFUlQoYW5pbWFsc1BvcyAh
PSBvYmplY3QtPmVuZCgpKTsKKyAgICAgICAgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoYW5p
bWFsc1Bvcy0+dmFsdWUuZ2V0KCkpOworICAgIH0KKyAgICB7CisgICAgICAgIGF1dG8gaWRQb3Mg
PSBvYmplY3QtPmZpbmQoImlkIl9zKTsKKyAgICAgICAgQVNTRVJUKGlkUG9zICE9IG9iamVjdC0+
ZW5kKCkpOworICAgICAgICBCaW5kaW5nVHJhaXRzPGludD46OmFzc2VydFZhbHVlSGFzRXhwZWN0
ZWRUeXBlKGlkUG9zLT52YWx1ZS5nZXQoKSk7CisgICAgfQorICAgIHsKKyAgICAgICAgYXV0byB0
cmVlUG9zID0gb2JqZWN0LT5maW5kKCJ0cmVlIl9zKTsKKyAgICAgICAgQVNTRVJUKHRyZWVQb3Mg
IT0gb2JqZWN0LT5lbmQoKSk7CisgICAgICAgIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90
b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBl
KHRyZWVQb3MtPnZhbHVlLmdldCgpKTsKKyAgICB9CisKKyAgICBpbnQgZm91bmRQcm9wZXJ0aWVz
Q291bnQgPSA1OworICAgIGlmIChmb3VuZFByb3BlcnRpZXNDb3VudCAhPSBvYmplY3QtPnNpemUo
KSkKKyAgICAgICAgRkFUQUwoIlVuZXhwZWN0ZWQgcHJvcGVydGllcyBpbiBvYmplY3Q6ICVzXG4i
LCBvYmplY3QtPnRvSlNPTlN0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKKyNlbHNlIC8vIEFTU0VS
VF9FTkFCTEVECisgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKKyNlbmRpZiAvLyBBU1NFUlRfRU5B
QkxFRAorfQorCitSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdD
YXN0PiBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5n
Q2FzdD46OnJ1bnRpbWVDYXN0KFJlZlB0cjxKU09OOjpWYWx1ZT4mJiB2YWx1ZSkKK3sKKyAgICBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiByZXN1bHQ7CisgICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdmFs
dWUtPmFzT2JqZWN0KHJlc3VsdCk7CisgICAgQVNTRVJUX1VOVVNFRChjYXN0U3VjY2VlZGVkLCBj
YXN0U3VjY2VlZGVkKTsKKyAgICBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRl
c3Q6OlR5cGVOZWVkaW5nQ2FzdD46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKHJlc3VsdC5n
ZXQoKSk7CisgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRl
c3Q6OlR5cGVOZWVkaW5nQ2FzdCkgPT0gc2l6ZW9mKEpTT046Ok9iamVjdEJhc2UpLCB0eXBlX2Nh
c3RfcHJvYmxlbSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdCo+KHN0YXRpY19jYXN0PEpTT046Ok9iamVjdEJhc2UqPihy
ZXN1bHQuZ2V0KCkpKTsKK30KKworCit2b2lkIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90
b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBl
KEpTT046OlZhbHVlKiB2YWx1ZSkKK3sKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgIEFTU0VSVF9B
UkcodmFsdWUsIHZhbHVlKTsKKyAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBvYmplY3Q7CisgICAg
Ym9vbCBjYXN0U3VjY2VlZGVkID0gdmFsdWUtPmFzT2JqZWN0KG9iamVjdCk7CisgICAgQVNTRVJU
X1VOVVNFRChjYXN0U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsKKworICAgIGludCBmb3VuZFBy
b3BlcnRpZXNDb3VudCA9IDA7CisgICAgeworICAgICAgICBhdXRvIG9ialBvcyA9IG9iamVjdC0+
ZmluZCgib2JqIl9zKTsKKyAgICAgICAgaWYgKG9ialBvcyAhPSBvYmplY3QtPmVuZCgpKSB7Cisg
ICAgICAgICAgICBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vy
c2l2ZU9iamVjdDI+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShvYmpQb3MtPnZhbHVlLmdl
dCgpKTsKKyAgICAgICAgICAgICsrZm91bmRQcm9wZXJ0aWVzQ291bnQ7CisgICAgICAgIH0KKyAg
ICB9CisgICAgaWYgKGZvdW5kUHJvcGVydGllc0NvdW50ICE9IG9iamVjdC0+c2l6ZSgpKQorICAg
ICAgICBGQVRBTCgiVW5leHBlY3RlZCBwcm9wZXJ0aWVzIGluIG9iamVjdDogJXNcbiIsIG9iamVj
dC0+dG9KU09OU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOworI2Vsc2UgLy8gQVNTRVJUX0VOQUJM
RUQKKyAgICBVTlVTRURfUEFSQU0odmFsdWUpOworI2VuZGlmIC8vIEFTU0VSVF9FTkFCTEVECit9
CisKK3ZvaWQgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNp
dmVPYmplY3QyPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSlNPTjo6VmFsdWUqIHZhbHVl
KQoreworI2lmIEFTU0VSVF9FTkFCTEVECisgICAgQVNTRVJUX0FSRyh2YWx1ZSwgdmFsdWUpOwor
ICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG9iamVjdDsKKyAgICBib29sIGNhc3RTdWNjZWVkZWQg
PSB2YWx1ZS0+YXNPYmplY3Qob2JqZWN0KTsKKyAgICBBU1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVk
ZWQsIGNhc3RTdWNjZWVkZWQpOworCisgICAgaW50IGZvdW5kUHJvcGVydGllc0NvdW50ID0gMDsK
KyAgICB7CisgICAgICAgIGF1dG8gb2JqUG9zID0gb2JqZWN0LT5maW5kKCJvYmoiX3MpOworICAg
ICAgICBpZiAob2JqUG9zICE9IG9iamVjdC0+ZW5kKCkpIHsKKyAgICAgICAgICAgIEJpbmRpbmdU
cmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT46OmFzc2Vy
dFZhbHVlSGFzRXhwZWN0ZWRUeXBlKG9ialBvcy0+dmFsdWUuZ2V0KCkpOworICAgICAgICAgICAg
Kytmb3VuZFByb3BlcnRpZXNDb3VudDsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoZm91bmRQ
cm9wZXJ0aWVzQ291bnQgIT0gb2JqZWN0LT5zaXplKCkpCisgICAgICAgIEZBVEFMKCJVbmV4cGVj
dGVkIHByb3BlcnRpZXMgaW4gb2JqZWN0OiAlc1xuIiwgb2JqZWN0LT50b0pTT05TdHJpbmcoKS5h
c2NpaSgpLmRhdGEoKSk7CisjZWxzZSAvLyBBU1NFUlRfRU5BQkxFRAorICAgIFVOVVNFRF9QQVJB
TSh2YWx1ZSk7CisjZW5kaWYgLy8gQVNTRVJUX0VOQUJMRUQKK30KKworfSAvLyBuYW1lc3BhY2Ug
UHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sT2JqZWN0cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tl
bmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1y
ZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW5j
bHVkZSA8d3RmL1JldGFpblB0ci5oPgorCisKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKwor
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFj
a2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmRE
aXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVx
dWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJh
Y2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIK
KyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbmNsdWRlIDx3dGYv
SlNPTlZhbHVlcy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJz
Lm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3Rz
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9y
dCA8d3RmL1BsYXRmb3JtLmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wu
aD4KKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNl
IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAorQGVuZAorCisKKyMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRp
b24uaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbXBvcnQgIlRlc3RQ
cm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0
ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21l
bnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIElu
c3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KK3sK
KyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworfQorCist
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNv
bnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlm
ICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7Cisg
ICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQorCistICh2
b2lkKWRlYWxsb2MKK3sKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKK0BlbmQKKworCisjIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKworIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KKy8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50
ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1w
b3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisK
KyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorCisjIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+
CisjaW1wb3J0IDx3dGYvUGxhdGZvcm0uaD4KKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVBy
b3RvY29sSlNPTk9iamVjdC5oPgorCisKK0BjbGFzcyBUZXN0UHJvdG9jb2xUZXN0VHlwZU5lZWRp
bmdDYXN0OworQGNsYXNzIFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxOworQGNsYXNz
IFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QyOworCit0eXBlZGVmIE5TX0VOVU0oTlNJ
bnRlZ2VyLCBUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzKSB7CisgICAgVGVzdFByb3Rv
Y29sVGVzdFVuY2FzdGVkQW5pbWFsc1BpZ3MsCisgICAgVGVzdFByb3RvY29sVGVzdFVuY2FzdGVk
QW5pbWFsc0Nvd3MsCisgICAgVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc0NhdHMsCisg
ICAgVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc0hlbnMsCit9OworCit0eXBlZGVmIE5T
X0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFscykgeworICAgIFRl
c3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzRHVja3MsCisgICAgVGVzdFByb3RvY29sVGVzdENh
c3RlZEFuaW1hbHNIZW5zLAorICAgIFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzQ3Jvd3Ms
CisgICAgVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHNGbGFtaW5nb3MsCit9OworCitfX2F0
dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3Rv
Y29sVGVzdFR5cGVOZWVkaW5nQ2FzdCA6IFJXSVByb3RvY29sSlNPTk9iamVjdAorLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBh
eWxvYWQ7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9j
b2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFN0cmlu
ZzooTlNTdHJpbmcgKilzdHJpbmcgbnVtYmVyOihpbnQpbnVtYmVyIGFuaW1hbHM6KFRlc3RQcm90
b2NvbFRlc3RDYXN0ZWRBbmltYWxzKWFuaW1hbHMgaWRlbnRpZmllcjooaW50KWlkZW50aWZpZXIg
dHJlZTooVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgKil0cmVlOworLyogcmVxdWly
ZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICpzdHJpbmc7CisvKiBy
ZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQgbnVtYmVyOworLyog
cmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgVGVzdFByb3RvY29sVGVz
dENhc3RlZEFuaW1hbHMgYW5pbWFsczsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRv
bWljLCBhc3NpZ24pIGludCBpZGVudGlmaWVyOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChu
b25hdG9taWMsIHJldGFpbikgVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgKnRyZWU7
CitAZW5kCisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVy
ZmFjZSBUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSA6IFJXSVByb3RvY29sSlNPTk9i
amVjdAorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3Ry
aW5nICosIGlkPiAqKXBheWxvYWQ7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9i
amVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKKy8qIG9wdGlvbmFsICov
IEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVP
YmplY3QyICpvYmo7CitAZW5kCisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0
IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MiA6IFJXSVBy
b3RvY29sSlNPTk9iamVjdAorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0
aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQ7CistIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKKy8q
IG9wdGlvbmFsICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIFRlc3RQcm90b2NvbFRl
c3RSZWN1cnNpdmVPYmplY3QxICpvYmo7CitAZW5kCisKKworCisKKworCisjaW1wb3J0IDxXZWJJ
bnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+CisKKyMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbElu
dGVybmFsLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmlu
Zy1ydW50aW1lLWNhc3RzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI2ltcG9ydCA8d3RmL1BsYXRmb3JtLmg+CisKKyNpbXBvcnQgIlRlc3RQcm90b2Nv
bC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKKyNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9y
dCA8d3RmL0pTT05WYWx1ZXMuaD4KKworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJ
bnRlcm5hbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMu
aAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRp
bWUtY2FzdHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjaW1wb3J0IDx3dGYvUGxhdGZvcm0uaD4KKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisj
aW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+CisKK25h
bWVzcGFjZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+CitP
cHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZh
bHVlKTsKKworaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFRlc3RV
bmNhc3RlZEFuaW1hbHMgdmFsdWUpCit7CisgICAgc3dpdGNoKHZhbHVlKSB7CisgICAgY2FzZSBU
ZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzUGlnczoKKyAgICAgICAgcmV0dXJuICJQaWdz
Il9zOworICAgIGNhc2UgVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc0Nvd3M6CisgICAg
ICAgIHJldHVybiAiQ293cyJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbFRlc3RVbmNhc3RlZEFu
aW1hbHNDYXRzOgorICAgICAgICByZXR1cm4gIkNhdHMiX3M7CisgICAgY2FzZSBUZXN0UHJvdG9j
b2xUZXN0VW5jYXN0ZWRBbmltYWxzSGVuczoKKyAgICAgICAgcmV0dXJuICJIZW5zIl9zOworICAg
IH0KK30KKwordGVtcGxhdGU8PgoraW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFRlc3RVbmNh
c3RlZEFuaW1hbHM+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQorewor
ICAgIGlmICh2YWx1ZSA9PSAiUGlncyIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xUZXN0
VW5jYXN0ZWRBbmltYWxzUGlnczsKKyAgICBpZiAodmFsdWUgPT0gIkNvd3MiKQorICAgICAgICBy
ZXR1cm4gVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc0Nvd3M7CisgICAgaWYgKHZhbHVl
ID09ICJDYXRzIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1h
bHNDYXRzOworICAgIGlmICh2YWx1ZSA9PSAiSGVucyIpCisgICAgICAgIHJldHVybiBUZXN0UHJv
dG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzSGVuczsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
fQorCitpbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sVGVzdENhc3Rl
ZEFuaW1hbHMgdmFsdWUpCit7CisgICAgc3dpdGNoKHZhbHVlKSB7CisgICAgY2FzZSBUZXN0UHJv
dG9jb2xUZXN0Q2FzdGVkQW5pbWFsc0R1Y2tzOgorICAgICAgICByZXR1cm4gIkR1Y2tzIl9zOwor
ICAgIGNhc2UgVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHNIZW5zOgorICAgICAgICByZXR1
cm4gIkhlbnMiX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFsc0Nyb3dz
OgorICAgICAgICByZXR1cm4gIkNyb3dzIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sVGVzdENh
c3RlZEFuaW1hbHNGbGFtaW5nb3M6CisgICAgICAgIHJldHVybiAiRmxhbWluZ29zIl9zOworICAg
IH0KK30KKwordGVtcGxhdGU8PgoraW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFRlc3RDYXN0
ZWRBbmltYWxzPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAg
ICBpZiAodmFsdWUgPT0gIkR1Y2tzIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFRlc3RD
YXN0ZWRBbmltYWxzRHVja3M7CisgICAgaWYgKHZhbHVlID09ICJIZW5zIikKKyAgICAgICAgcmV0
dXJuIFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzSGVuczsKKyAgICBpZiAodmFsdWUgPT0g
IkNyb3dzIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzQ3Jv
d3M7CisgICAgaWYgKHZhbHVlID09ICJGbGFtaW5nb3MiKQorICAgICAgICByZXR1cm4gVGVzdFBy
b3RvY29sVGVzdENhc3RlZEFuaW1hbHNGbGFtaW5nb3M7CisgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKK30KKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUt
cmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIK
KworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFy
c2VyLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0
ZS5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW50ZXJmYWNlIFRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucyAoVGVzdERvbWFpbikKKworKyAodm9pZClfcGFyc2VUeXBlTmVl
ZGluZ0Nhc3Q6KFRlc3RQcm90b2NvbFRlc3RUeXBlTmVlZGluZ0Nhc3QgKiopb3V0VmFsdWUgZnJv
bVBheWxvYWQ6KGlkKXBheWxvYWQ7CisrICh2b2lkKV9wYXJzZUNhc3RlZE9iamVjdElkOihOU051
bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNl
VW5jYXN0ZWRPYmplY3RJZDooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBh
eWxvYWQ7CisrICh2b2lkKV9wYXJzZVVuY2FzdGVkQW5pbWFsczooTlNOdW1iZXIgKiopb3V0VmFs
dWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisrICh2b2lkKV9wYXJzZUNhc3RlZEFuaW1hbHM6
KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworKyAodm9pZClf
cGFyc2VSZWN1cnNpdmVPYmplY3QxOihUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSAq
KilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNlUmVjdXJz
aXZlT2JqZWN0MjooVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDIgKiopb3V0VmFsdWUg
ZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucyAoVGVzdERvbWFpbikKKworKyAodm9pZClfcGFyc2VUeXBl
TmVlZGluZ0Nhc3Q6KFRlc3RQcm90b2NvbFRlc3RUeXBlTmVlZGluZ0Nhc3QgKiopb3V0VmFsdWUg
ZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9U
WVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSBbW1Rl
c3RQcm90b2NvbFRlc3RUeXBlTmVlZGluZ0Nhc3QgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXls
b2FkXTsKK30KKworKyAodm9pZClfcGFyc2VDYXN0ZWRPYmplY3RJZDooTlNOdW1iZXIgKiopb3V0
VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9S
X0JBRF9UWVBFKHBheWxvYWQsIFtOU051bWJlciBjbGFzc10pOworICAgICpvdXRWYWx1ZSA9IChO
U051bWJlciAqKXBheWxvYWQ7Cit9CisKKysgKHZvaWQpX3BhcnNlVW5jYXN0ZWRPYmplY3RJZDoo
TlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJP
V19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU051bWJlciBjbGFzc10pOworICAg
ICpvdXRWYWx1ZSA9IChOU051bWJlciAqKXBheWxvYWQ7Cit9CisKKysgKHZvaWQpX3BhcnNlVW5j
YXN0ZWRBbmltYWxzOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9h
ZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TU3RyaW5n
IGNsYXNzXSk7CisgICAgT3B0aW9uYWw8VGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFscz4g
cmVzdWx0ID0gSW5zcGVjdG9yOjpmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sVGVzdFVu
Y2FzdGVkQW5pbWFscz4ocGF5bG9hZCk7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfRU5V
TV9WQUxVRShyZXN1bHQsIEAiVW5jYXN0ZWRBbmltYWxzIik7CisgICAgKm91dFZhbHVlID0gQChy
ZXN1bHQudmFsdWUoKSk7Cit9CisKKysgKHZvaWQpX3BhcnNlQ2FzdGVkQW5pbWFsczooTlNOdW1i
ZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENF
UFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBjbGFzc10pOworICAgIE9wdGlv
bmFsPFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzPiByZXN1bHQgPSBJbnNwZWN0b3I6OmZy
b21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFscz4ocGF5bG9hZCk7
CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfRU5VTV9WQUxVRShyZXN1bHQsIEAiQ2FzdGVk
QW5pbWFscyIpOworICAgICpvdXRWYWx1ZSA9IEAocmVzdWx0LnZhbHVlKCkpOworfQorCisrICh2
b2lkKV9wYXJzZVJlY3Vyc2l2ZU9iamVjdDE6KFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmpl
Y3QxICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7CisgICAg
Km91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSBhbGxvY10gaW5p
dFdpdGhQYXlsb2FkOnBheWxvYWRdOworfQorCisrICh2b2lkKV9wYXJzZVJlY3Vyc2l2ZU9iamVj
dDI6KFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QyICoqKW91dFZhbHVlIGZyb21QYXls
b2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXls
b2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9j
b2xUZXN0UmVjdXJzaXZlT2JqZWN0MiBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOwor
fQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMu
bW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQ
cm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUu
aD4KKyNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5o
PgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFBy
b3RvY29sVGVzdFR5cGVOZWVkaW5nQ2FzdAorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXls
b2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCit7Cisg
ICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAg
ICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJzdHJpbmci
XSwgQCJzdHJpbmciKTsKKyAgICBzZWxmLnN0cmluZyA9IHBheWxvYWRbQCJzdHJpbmciXTsKKwor
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAIm51bWJl
ciJdLCBAIm51bWJlciIpOworICAgIHNlbGYubnVtYmVyID0gW3BheWxvYWRbQCJudW1iZXIiXSBp
bnRlZ2VyVmFsdWVdOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJU
WShwYXlsb2FkW0AiYW5pbWFscyJdLCBAImFuaW1hbHMiKTsKKyAgICBPcHRpb25hbDxUZXN0UHJv
dG9jb2xUZXN0Q2FzdGVkQW5pbWFscz4gYW5pbWFscyA9IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0
UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFscz4ocGF5bG9hZFtAImFuaW1hbHMiXSk7CisgICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9CQURfRU5VTV9WQUxVRShhbmltYWxzLCBAImFuaW1hbHMiKTsKKyAg
ICBzZWxmLmFuaW1hbHMgPSBhbmltYWxzLnZhbHVlKCk7CisKKyAgICBUSFJPV19FWENFUFRJT05f
Rk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJpZCJdLCBAImlkIik7CisgICAgc2VsZi5p
ZGVudGlmaWVyID0gW3BheWxvYWRbQCJpZCJdIGludGVnZXJWYWx1ZV07CisKKyAgICBUSFJPV19F
WENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJ0cmVlIl0sIEAidHJlZSIp
OworICAgIHNlbGYudHJlZSA9IFtbVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgYWxs
b2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkW0AidHJlZSJdXTsKKworICAgIHJldHVybiBzZWxm
OworfQorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29s
SlNPTk9iamVjdCAqKW9iamVjdAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhK
U09OT2JqZWN0OltvYmplY3QgdG9KU09OT2JqZWN0XS5nZXQoKV0pKQorICAgICAgICByZXR1cm4g
bmlsOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFN0
cmluZzooTlNTdHJpbmcgKilzdHJpbmcgbnVtYmVyOihpbnQpbnVtYmVyIGFuaW1hbHM6KFRlc3RQ
cm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzKWFuaW1hbHMgaWRlbnRpZmllcjooaW50KWlkZW50aWZp
ZXIgdHJlZTooVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgKil0cmVlCit7CisgICAg
aWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBU
SFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHN0cmluZywgQCJzdHJpbmciKTsK
KyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHRyZWUsIEAidHJlZSIp
OworCisgICAgc2VsZi5zdHJpbmcgPSBzdHJpbmc7CisgICAgc2VsZi5udW1iZXIgPSBudW1iZXI7
CisgICAgc2VsZi5hbmltYWxzID0gYW5pbWFsczsKKyAgICBzZWxmLmlkZW50aWZpZXIgPSBpZGVu
dGlmaWVyOworICAgIHNlbGYudHJlZSA9IHRyZWU7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKwor
LSAodm9pZClzZXRTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nCit7CisgICAgW3N1cGVyIHNldFN0
cmluZzpzdHJpbmcgZm9yS2V5OkAic3RyaW5nIl07Cit9CisKKy0gKE5TU3RyaW5nICopc3RyaW5n
Cit7CisgICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJzdHJpbmciXTsKK30KKworLSAo
dm9pZClzZXROdW1iZXI6KGludCludW1iZXIKK3sKKyAgICBbc3VwZXIgc2V0SW50ZWdlcjpudW1i
ZXIgZm9yS2V5OkAibnVtYmVyIl07Cit9CisKKy0gKGludCludW1iZXIKK3sKKyAgICByZXR1cm4g
W3N1cGVyIGludGVnZXJGb3JLZXk6QCJudW1iZXIiXTsKK30KKworLSAodm9pZClzZXRBbmltYWxz
OihUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFscylhbmltYWxzCit7CisgICAgW3N1cGVyIHNl
dFN0cmluZzp0b1Byb3RvY29sU3RyaW5nKGFuaW1hbHMpIGZvcktleTpAImFuaW1hbHMiXTsKK30K
KworLSAoVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHMpYW5pbWFscworeworICAgIHJldHVy
biBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHM+KFtzdXBl
ciBzdHJpbmdGb3JLZXk6QCJhbmltYWxzIl0pLnZhbHVlKCk7Cit9CisKKy0gKHZvaWQpc2V0SWRl
bnRpZmllcjooaW50KWlkZW50aWZpZXIKK3sKKyAgICBbc3VwZXIgc2V0SW50ZWdlcjppZGVudGlm
aWVyIGZvcktleTpAImlkIl07Cit9CisKKy0gKGludClpZGVudGlmaWVyCit7CisgICAgcmV0dXJu
IFtzdXBlciBpbnRlZ2VyRm9yS2V5OkAiaWQiXTsKK30KKworLSAodm9pZClzZXRUcmVlOihUZXN0
UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSAqKXRyZWUKK3sKKyAgICBbc3VwZXIgc2V0T2Jq
ZWN0OnRyZWUgZm9yS2V5OkAidHJlZSJdOworfQorCistIChUZXN0UHJvdG9jb2xUZXN0UmVjdXJz
aXZlT2JqZWN0MSAqKXRyZWUKK3sKKyAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9iamVjdCA9
IFtzdXBlciBvYmplY3RGb3JLZXk6QCJ0cmVlIl07CisgICAgaWYgKCFvYmplY3QpCisgICAgICAg
IHJldHVybiBuaWw7CisgICAgcmV0dXJuIFtbVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVj
dDEgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDpbW3N1cGVyIG9iamVjdEZvcktleTpAInRyZWUi
XSB0b0pTT05PYmplY3RdLmdldCgpXTsKK30KKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gVGVz
dFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
UGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZAor
eworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOwor
CisgICAgc2VsZi5vYmogPSBbW1Rlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QyIGFsbG9j
XSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZFtAIm9iaiJdXTsKKworICAgIHJldHVybiBzZWxmOwor
fQorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNP
Tk9iamVjdCAqKW9iamVjdAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09O
T2JqZWN0OltvYmplY3QgdG9KU09OT2JqZWN0XS5nZXQoKV0pKQorICAgICAgICByZXR1cm4gbmls
OworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpc2V0T2JqOihUZXN0UHJvdG9jb2xU
ZXN0UmVjdXJzaXZlT2JqZWN0MiAqKW9iagoreworICAgIFtzdXBlciBzZXRPYmplY3Q6b2JqIGZv
cktleTpAIm9iaiJdOworfQorCistIChUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MiAq
KW9iagoreworICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb2JqZWN0ID0gW3N1cGVyIG9iamVj
dEZvcktleTpAIm9iaiJdOworICAgIGlmICghb2JqZWN0KQorICAgICAgICByZXR1cm4gbmlsOwor
ICAgIHJldHVybiBbW1Rlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QyIGFsbG9jXSBpbml0
V2l0aEpTT05PYmplY3Q6W1tzdXBlciBvYmplY3RGb3JLZXk6QCJvYmoiXSB0b0pTT05PYmplY3Rd
LmdldCgpXTsKK30KKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVGVzdFJl
Y3Vyc2l2ZU9iamVjdDIKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVs
bCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZAoreworICAgIGlmICghKHNl
bGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgc2VsZi5vYmog
PSBbW1Rlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxIGFsbG9jXSBpbml0V2l0aFBheWxv
YWQ6cGF5bG9hZFtAIm9iaiJdXTsKKworICAgIHJldHVybiBzZWxmOworfQorLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9iamVj
dAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmplY3Qg
dG9KU09OT2JqZWN0XS5nZXQoKV0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgcmV0dXJu
IHNlbGY7Cit9CisKKy0gKHZvaWQpc2V0T2JqOihUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2Jq
ZWN0MSAqKW9iagoreworICAgIFtzdXBlciBzZXRPYmplY3Q6b2JqIGZvcktleTpAIm9iaiJdOwor
fQorCistIChUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSAqKW9iagoreworICAgIFJX
SVByb3RvY29sSlNPTk9iamVjdCAqb2JqZWN0ID0gW3N1cGVyIG9iamVjdEZvcktleTpAIm9iaiJd
OworICAgIGlmICghb2JqZWN0KQorICAgICAgICByZXR1cm4gbmlsOworICAgIHJldHVybiBbW1Rl
c3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxIGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6
W1tzdXBlciBvYmplY3RGb3JLZXk6QCJvYmoiXSB0b0pTT05PYmplY3RdLmdldCgpXTsKK30KKwor
QGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90
eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtd2l0aC1vcGVuLXBhcmFt
ZXRlcnMuanNvbi1yZXN1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu
LjYzODIyM2Q3MTkxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMu
anNvbi1yZXN1bHQKQEAgLTAsMCArMSwxMTQ1IEBACisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9y
QmFja2VuZENvbW1hbmRzLmpzLmluCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
dHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5q
cy5pbgorCisjIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5o
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRoLW9wZW4tcGFyYW1l
dGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5
cGVzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5o
PgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXIgeworcHVibGljOgorICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJh
Y2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdU
Rk1vdmUoZGlzcGF0Y2hlcik7IH0KKyAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3Bh
dGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Citwcml2
YXRlOgorICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsK
K307CisKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjIyMgRW5kIEZpbGU6IFRlc3RBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmRE
aXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRo
LW9wZW4tcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNp
bmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3Ry
aW5nOworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXdpdGgtb3Bl
bi1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hl
cnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVy
Lmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0
cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXJzLmgiCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAK
KworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVj
dHMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgRnJvbnRlbmRSb3V0
ZXI7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVy
cy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXdpdGgtb3Blbi1w
YXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJz
LmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7
CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVu
ZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5o
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRoLW9wZW4tcGFyYW1l
dGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2Vy
dGlvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCituYW1lc3BhY2UgUHJvdG9j
b2wgeworCisKKworLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCituYW1lc3BhY2UgVGVzdCB7Citj
bGFzcyBOb09wZW5QYXJhbWV0ZXJzOworY2xhc3MgT3BlblBhcmFtZXRlcnM7Cit9IC8vIFRlc3QK
Ky8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KKworCisKKworbmFtZXNwYWNlIFRlc3Qg
eworCitjbGFzcyBOb09wZW5QYXJhbWV0ZXJzIDogcHVibGljIEpTT046Ok9iamVjdEJhc2Ugewor
cHVibGljOgorICAgIGVudW0geworICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCisgICAgICAgIE9u
ZVNldCA9IDEgPDwgMCwKKyAgICAgICAgVHdvU2V0ID0gMSA8PCAxLAorICAgICAgICBBbGxGaWVs
ZHNTZXQgPSAoT25lU2V0IHwgVHdvU2V0KQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTxpbnQgU1RB
VEU+CisgICAgY2xhc3MgQnVpbGRlciB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPEpT
T046Ok9iamVjdD4gbV9yZXN1bHQ7CisKKyAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxk
ZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOworICAg
ICAgICB9CisKKyAgICAgICAgQnVpbGRlcihSZWY8LypOb09wZW5QYXJhbWV0ZXJzKi9KU09OOjpP
YmplY3Q+JiYgb2JqZWN0KQorICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkp
CisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRz
U2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAgICAgICB9CisgICAg
ICAgIGZyaWVuZCBjbGFzcyBOb09wZW5QYXJhbWV0ZXJzOworICAgIHB1YmxpYzoKKworICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgT25lU2V0PiYgc2V0T25lKGRvdWJsZSB2YWx1ZSkKKyAgICAgICAg
eworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE9uZVNldCksIHByb3BlcnR5
X29uZV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0RG91YmxlKCJvbmUi
X3MsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8T25lU2V0PigpOworICAg
ICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFR3b1NldD4mIHNldFR3byhkb3VibGUg
dmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBU
d29TZXQpLCBwcm9wZXJ0eV90d29fYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQt
PnNldERvdWJsZSgidHdvIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PFR3b1NldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIFJlZjxOb09wZW5QYXJhbWV0ZXJzPiBy
ZWxlYXNlKCkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0g
QWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKHNpemVvZihOb09wZW5QYXJhbWV0ZXJzKSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0KSwg
Y2Fubm90X2Nhc3QpOworCisgICAgICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uUmVzdWx0
ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0g
V1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8Tm9PcGVuUGFyYW1ldGVycz4qPigmanNvblJl
c3VsdCkpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgIH07CisK
KyAgICAvKgorICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKKyAgICAgKiBSZWY8Tm9PcGVu
UGFyYW1ldGVycz4gcmVzdWx0ID0gTm9PcGVuUGFyYW1ldGVyczo6Y3JlYXRlKCkKKyAgICAgKiAg
ICAgLnNldE9uZSguLi4pCisgICAgICogICAgIC5zZXRUd28oLi4uKQorICAgICAqICAgICAucmVs
ZWFzZSgpOworICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVj
dDo6Y3JlYXRlKCkpOworICAgIH0KK307CisKK2NsYXNzIE9wZW5QYXJhbWV0ZXJzIDogcHVibGlj
IEpTT046Ok9iamVjdCB7CitwdWJsaWM6CisgICAgZW51bSB7CisgICAgICAgIE5vRmllbGRzU2V0
ID0gMCwKKyAgICAgICAgQWxwaGFTZXQgPSAxIDw8IDAsCisgICAgICAgIEJldGFTZXQgPSAxIDw8
IDEsCisgICAgICAgIEFsbEZpZWxkc1NldCA9IChBbHBoYVNldCB8IEJldGFTZXQpCisgICAgfTsK
KworICAgIHRlbXBsYXRlPGludCBTVEFURT4KKyAgICBjbGFzcyBCdWlsZGVyIHsKKyAgICBwcml2
YXRlOgorICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBtX3Jlc3VsdDsKKworICAgICAgICB0
ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFU
RSB8IFNURVA+Kj4odGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyKFJlZjwvKk9w
ZW5QYXJhbWV0ZXJzKi9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQorICAgICAgICAgICAgOiBtX3Jl
c3VsdChXVEZNb3ZlKG9iamVjdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3Rh
dGUpOworICAgICAgICB9CisgICAgICAgIGZyaWVuZCBjbGFzcyBPcGVuUGFyYW1ldGVyczsKKyAg
ICBwdWJsaWM6CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IEFscGhhU2V0PiYgc2V0QWxwaGEo
ZG91YmxlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgQWxwaGFTZXQpLCBwcm9wZXJ0eV9hbHBoYV9hbHJlYWR5X3NldCk7CisgICAgICAgICAg
ICBtX3Jlc3VsdC0+c2V0RG91YmxlKCJhbHBoYSJfcywgdmFsdWUpOworICAgICAgICAgICAgcmV0
dXJuIGNhc3RTdGF0ZTxBbHBoYVNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBCZXRhU2V0PiYgc2V0QmV0YShkb3VibGUgdmFsdWUpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBCZXRhU2V0KSwgcHJvcGVydHlfYmV0YV9h
bHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0RG91YmxlKCJiZXRhIl9zLCB2
YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEJldGFTZXQ+KCk7CisgICAgICAg
IH0KKworICAgICAgICBSZWY8T3BlblBhcmFtZXRlcnM+IHJlbGVhc2UoKQorICAgICAgICB7Cisg
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9p
c19ub3RfcmVhZHkpOworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKE9wZW5QYXJh
bWV0ZXJzKSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0KSwgY2Fubm90X2Nhc3QpOworCisgICAgICAg
ICAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uUmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51
bGwoKTsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2Fz
dDxSZWY8T3BlblBhcmFtZXRlcnM+Kj4oJmpzb25SZXN1bHQpKTsKKyAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyoKKyAgICAgKiBTeW50aGV0aWMg
Y29uc3RydWN0b3I6CisgICAgICogUmVmPE9wZW5QYXJhbWV0ZXJzPiByZXN1bHQgPSBPcGVuUGFy
YW1ldGVyczo6Y3JlYXRlKCkKKyAgICAgKiAgICAgLnNldEFscGhhKC4uLikKKyAgICAgKiAgICAg
LnNldEJldGEoLi4uKQorICAgICAqICAgICAucmVsZWFzZSgpOworICAgICAqLworICAgIHN0YXRp
YyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1
aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOworICAgIH0KKworICAg
IC8vIFByb3BlcnR5IG5hbWVzIGZvciB0eXBlIGdlbmVyYXRlZCBhcyBvcGVuLgorICAgIE5vbmUg
c3RhdGljIGNvbnN0IGNoYXIqIEFscGhhOworfTsKKworfSAvLyBUZXN0CisKKworCit9IC8vIG5h
bWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xP
YmplY3RzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtd2l0aC1v
cGVuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0
cy5oIgorCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFByb3RvY29sIHsK
KworY29uc3QgY2hhciogSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6T3BlblBhcmFtZXRlcnM6
OkFscGhhID0gImFscGhhIjsKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAK
KworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5q
c29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQg
PHd0Zi9QbGF0Zm9ybS5oPgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0
ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgor
CisKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25m
aWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5j
bHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorCituYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSB0eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8d3RmL1BsYXRmb3JtLmg+CisKKyNpbXBvcnQg
PFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0
eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBO
U09iamVjdAorQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
bi5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5q
c29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50
ZXJuYWwuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorI2lt
cG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2lt
cG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJz
Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMu
aD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24KK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xs
ZXIqIF9jb250cm9sbGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVy
OihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxm
ID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAg
ICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAg
IHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbc3VwZXIgZGVhbGxv
Y107Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRp
b24ubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0K
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXdpdGgtb3Blbi1wYXJhbWV0
ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lt
cG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1l
c3BhY2UgSW5zcGVjdG9yOworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNw
YXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8Rm91bmRh
dGlvbi9Gb3VuZGF0aW9uLmg+CisjaW1wb3J0IDx3dGYvUGxhdGZvcm0uaD4KKworI2ltcG9ydCA8
V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgorCisKK0BjbGFzcyBUZXN0UHJv
dG9jb2xUZXN0Tm9PcGVuUGFyYW1ldGVyczsKK0BjbGFzcyBUZXN0UHJvdG9jb2xUZXN0T3BlblBh
cmFtZXRlcnM7CisKKworCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkK
K0BpbnRlcmZhY2UgVGVzdFByb3RvY29sVGVzdE5vT3BlblBhcmFtZXRlcnMgOiBSV0lQcm90b2Nv
bEpTT05PYmplY3QKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFy
eTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkOworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJv
dG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7CistIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhPbmU6KGRvdWJsZSlvbmUgdHdvOihkb3VibGUpdHdvOworLyogcmVx
dWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgZG91YmxlIG9uZTsKKy8qIHJl
cXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGRvdWJsZSB0d287CitAZW5k
CisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBU
ZXN0UHJvdG9jb2xUZXN0T3BlblBhcmFtZXRlcnMgOiBSV0lQcm90b2NvbEpTT05PYmplY3QKKy0g
KGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBp
ZD4gKilwYXlsb2FkOworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJX
SVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7CistIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhBbHBoYTooZG91YmxlKWFscGhhIGJldGE6KGRvdWJsZSliZXRhOworLyogcmVxdWlyZWQgKi8g
QHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgZG91YmxlIGFscGhhOworLyogcmVxdWlyZWQg
Ki8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgZG91YmxlIGJldGE7CitAZW5kCisKKwor
CisKKworCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxp
dHlPYmplY3RzLmg+CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSB0eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8d3RmL1BsYXRmb3JtLmg+CisKKyNp
bXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFBy
aXZhdGUuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29u
dHJvbGxlci5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKworCisKKworIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5
cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDx3dGYvUGxhdGZvcm0uaD4KKworI2ltcG9ydCAiVGVz
dFByb3RvY29sLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZl
cnNpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBP
YmpDRW51bVR5cGU+CitPcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhj
b25zdCBTdHJpbmcmIHZhbHVlKTsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisj
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSB0eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVz
dFByb3RvY29sVHlwZVBhcnNlci5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29s
SlNPTk9iamVjdFByaXZhdGUuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGlu
dGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFRlc3REb21haW4pCisKKysgKHZv
aWQpX3BhcnNlTm9PcGVuUGFyYW1ldGVyczooVGVzdFByb3RvY29sVGVzdE5vT3BlblBhcmFtZXRl
cnMgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisrICh2b2lkKV9wYXJzZU9w
ZW5QYXJhbWV0ZXJzOihUZXN0UHJvdG9jb2xUZXN0T3BlblBhcmFtZXRlcnMgKiopb3V0VmFsdWUg
ZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucyAoVGVzdERvbWFpbikKKworKyAodm9pZClfcGFyc2VOb09w
ZW5QYXJhbWV0ZXJzOihUZXN0UHJvdG9jb2xUZXN0Tm9PcGVuUGFyYW1ldGVycyAqKilvdXRWYWx1
ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFE
X1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOworICAgICpvdXRWYWx1ZSA9IFtb
VGVzdFByb3RvY29sVGVzdE5vT3BlblBhcmFtZXRlcnMgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpw
YXlsb2FkXTsKK30KKworKyAodm9pZClfcGFyc2VPcGVuUGFyYW1ldGVyczooVGVzdFByb3RvY29s
VGVzdE9wZW5QYXJhbWV0ZXJzICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7
CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5
IGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xUZXN0T3BlblBhcmFtZXRl
cnMgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKK30KKworQGVuZAorCisKKyMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisKKyMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xUeXBlcy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisj
aW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPFdlYkluc3Bl
Y3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisjaW1wb3J0IDx3dGYvQXNzZXJ0
aW9ucy5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIElu
c3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFRlc3ROb09wZW5QYXJhbWV0
ZXJzCisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9u
YXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVy
IGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
UkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAIm9uZSJdLCBAIm9uZSIpOworICAgIHNlbGYub25l
ID0gW3BheWxvYWRbQCJvbmUiXSBkb3VibGVWYWx1ZV07CisKKyAgICBUSFJPV19FWENFUFRJT05f
Rk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJ0d28iXSwgQCJ0d28iKTsKKyAgICBzZWxm
LnR3byA9IFtwYXlsb2FkW0AidHdvIl0gZG91YmxlVmFsdWVdOworCisgICAgcmV0dXJuIHNlbGY7
Cit9CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xK
U09OT2JqZWN0ICopb2JqZWN0Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEpT
T05PYmplY3Q6W29iamVjdCB0b0pTT05PYmplY3RdLmdldCgpXSkpCisgICAgICAgIHJldHVybiBu
aWw7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoT25l
Oihkb3VibGUpb25lIHR3bzooZG91YmxlKXR3bworeworICAgIGlmICghKHNlbGYgPSBbc3VwZXIg
aW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgc2VsZi5vbmUgPSBvbmU7CisgICAg
c2VsZi50d28gPSB0d287CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClzZXRPbmU6
KGRvdWJsZSlvbmUKK3sKKyAgICBbc3VwZXIgc2V0RG91YmxlOm9uZSBmb3JLZXk6QCJvbmUiXTsK
K30KKworLSAoZG91YmxlKW9uZQoreworICAgIHJldHVybiBbc3VwZXIgZG91YmxlRm9yS2V5OkAi
b25lIl07Cit9CisKKy0gKHZvaWQpc2V0VHdvOihkb3VibGUpdHdvCit7CisgICAgW3N1cGVyIHNl
dERvdWJsZTp0d28gZm9yS2V5OkAidHdvIl07Cit9CisKKy0gKGRvdWJsZSl0d28KK3sKKyAgICBy
ZXR1cm4gW3N1cGVyIGRvdWJsZUZvcktleTpAInR3byJdOworfQorCitAZW5kCisKK0BpbXBsZW1l
bnRhdGlvbiBUZXN0UHJvdG9jb2xUZXN0T3BlblBhcmFtZXRlcnMKKworLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICop
cGF5bG9hZAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1
cm4gbmlsOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXls
b2FkW0AiYWxwaGEiXSwgQCJhbHBoYSIpOworICAgIHNlbGYuYWxwaGEgPSBbcGF5bG9hZFtAImFs
cGhhIl0gZG91YmxlVmFsdWVdOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9Q
Uk9QRVJUWShwYXlsb2FkW0AiYmV0YSJdLCBAImJldGEiKTsKKyAgICBzZWxmLmJldGEgPSBbcGF5
bG9hZFtAImJldGEiXSBkb3VibGVWYWx1ZV07CisKKyAgICByZXR1cm4gc2VsZjsKK30KKy0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3Qg
KilvYmplY3QKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoSlNPTk9iamVjdDpb
b2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0KCldKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAg
IHJldHVybiBzZWxmOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhBbHBoYTooZG91Ymxl
KWFscGhhIGJldGE6KGRvdWJsZSliZXRhCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0
XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBzZWxmLmFscGhhID0gYWxwaGE7CisgICAg
c2VsZi5iZXRhID0gYmV0YTsKKworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXNldEFs
cGhhOihkb3VibGUpYWxwaGEKK3sKKyAgICBbc3VwZXIgc2V0RG91YmxlOmFscGhhIGZvcktleTpA
ImFscGhhIl07Cit9CisKKy0gKGRvdWJsZSlhbHBoYQoreworICAgIHJldHVybiBbc3VwZXIgZG91
YmxlRm9yS2V5OkAiYWxwaGEiXTsKK30KKworLSAodm9pZClzZXRCZXRhOihkb3VibGUpYmV0YQor
eworICAgIFtzdXBlciBzZXREb3VibGU6YmV0YSBmb3JLZXk6QCJiZXRhIl07Cit9CisKKy0gKGRv
dWJsZSliZXRhCit7CisgICAgcmV0dXJuIFtzdXBlciBkb3VibGVGb3JLZXk6QCJiZXRhIl07Cit9
CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvdmVyc2lvbi5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC92ZXJzaW9uLmpzb24tcmVzdWx0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kM2I2MWNjYmIzNQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC92
ZXJzaW9uLmpzb24tcmVzdWx0CkBAIC0wLDAgKzEsODYyIEBACisjIyMgQmVnaW4gRmlsZTogSW5z
cGVjdG9yQmFja2VuZENvbW1hbmRzLmpzLmluCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gdmVyc2lvbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKy8vIFZlcnNpb25Eb21haW4KK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4o
IlZlcnNpb25Eb21haW4iLCBudWxsKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJWZXJzaW9u
KCJWZXJzaW9uRG9tYWluIiwgNDIpOworSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigi
VmVyc2lvbkRvbWFpbiIsIG51bGwpOworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29t
bWFuZHMuanMuaW4KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0
Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHZlcnNpb24uanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgorI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKworbmFtZXNw
YWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1
YmxpYzoKKyAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0
Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3Bh
dGNoZXIpOyB9CisgICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29u
c3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQorcHJpdmF0ZToKKyAgICBS
ZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Cit9OworCisKKwor
Cit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQorIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2Vu
ZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMu
aAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHZlcnNpb24uanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5o
IgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Ig
eworCit0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKworCisKK30gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gdmVyc2lvbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0QmFja2Vu
ZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9u
dGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3Rm
L05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCisjaWYg
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjaW5jbHVkZSAiVGVzdEFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgorI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK30g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0
Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lvbi5qc29uCisvLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisj
aW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEZyb250ZW5kUm91dGVyOworCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0
Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lvbi5qc29uCisvLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHZlcnNpb24uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgorI2luY2x1
ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFt
ZXNwYWNlIFByb3RvY29sIHsKKworLy8gVmVyc2lvbnMuCituYW1lc3BhY2UgVmVyc2lvbkRvbWFp
biB7CitzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFZFUlNJT04gPSA0MjsKK30gLy8gVmVyc2lv
bkRvbWFpbgorLy8gRW5kIG9mIHZlcnNpb25zLgorCisKKworCisKKworCisKK30gLy8gbmFtZXNw
YWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xPYmplY3RzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVj
dHMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lvbi5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisKKyNpbmNsdWRlIDx3dGYv
T3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJ
bnNwZWN0b3IgeworCituYW1lc3BhY2UgUHJvdG9jb2wgeworCisKKworfSAvLyBuYW1lc3BhY2Ug
UHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sT2JqZWN0cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tl
bmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lv
bi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBv
cnQgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5o
PgorCisKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKwor
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHZlcnNpb24uanNvbgorLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSAiVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIK
KyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwor
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFj
a2VuZERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1
cmF0aW9uLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8d3Rm
L1BsYXRmb3JtLmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KKwor
X19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAorQGVuZAorCisKKyMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xDb25maWd1cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVy
c2lvbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNp
bXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKKworI2ltcG9ydCAiVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5o
IgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4K
KyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5o
PgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXJzLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9u
IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNv
bnRyb2xsZXIqIF9jb250cm9sbGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250
cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAg
ICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5p
bDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVy
OworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbc3VwZXIg
ZGVhbGxvY107Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZp
Z3VyYXRpb24ubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hl
cnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFBy
b3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
LmgiCisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVj
dG9yOworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQor
CisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisjaW1wb3J0IDx3
dGYvUGxhdGZvcm0uaD4KKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9i
amVjdC5oPgorCisKKworCisKKworCisKKworCisKKworCisjaW1wb3J0IDxXZWJJbnNwZWN0b3Iv
UldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+CisKKyMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8d3RmL1BsYXRmb3Jt
Lmg+CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sSlNP
Tk9iamVjdFByaXZhdGUuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5z
cGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKworCisKKwor
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIHZlcnNpb24uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW1wb3J0IDx3dGYvUGxhdGZvcm0uaD4KKworI2ltcG9ydCAiVGVzdFByb3RvY29s
LmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+
CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5
cGU+CitPcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJp
bmcmIHZhbHVlKTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHZlcnNpb24uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKworI2ltcG9ydCAiVGVz
dFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCisjaW1wb3J0
IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorCit1c2luZyBu
YW1lc3BhY2UgSW5zcGVjdG9yOworCisKKworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVz
Lm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lvbi5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90
b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5o
IgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4K
KyNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgor
Cit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4t
ZGVidWdnYWJsZVR5cGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVi
dWdnYWJsZVR5cGUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u
ZDZkZjllNGJkOWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1jb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmct
ZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KQEAgLTAsMCArMSw5IEBACitbCit7CisgICAgImRv
bWFpbiI6ICJEb21haW4iLAorICAgICJkZWJ1Z2dhYmxlVHlwZXMiOiBbImphdmFzY3JpcHQiXSwK
KyAgICAidGFyZ2V0VHlwZXMiOiBbIndvcmtlciJdLAorICAgICJjb21tYW5kcyI6IFt7Im5hbWUi
OiAiQ29tbWFuZCJ9XSwKKyAgICAiZXZlbnRzIjogW3sibmFtZSI6ICJFdmVudCJ9XQorfQorXQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2ZhaWwtb24tY29tbWFuZC10YXJnZXRUeXBlcy10eXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1jb21tYW5kLXRhcmdldFR5cGVz
LXR5cGUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNjQwNTlm
ODRiY2YKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1jb21tYW5kLXRhcmdldFR5cGVzLXR5cGUuanNvbgpAQCAt
MCwwICsxLDkgQEAKK3sKKyAgICAiZG9tYWluIjogIkRvbWFpbiIsCisgICAgImNvbW1hbmRzIjog
WworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJQYWdlT25seSIsCisgICAgICAgICAg
ICAidGFyZ2V0VHlwZXMiOiAicGFnZWUiCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1j
b21tYW5kLXRhcmdldFR5cGVzLXZhbHVlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1jb21tYW5kLXRhcmdldFR5cGVzLXZhbHVlLmpz
b24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjUwMjA0NDcyZWM4Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2ZhaWwtb24tY29tbWFuZC10YXJnZXRUeXBlcy12YWx1ZS5qc29uCkBAIC0wLDAgKzEs
OSBAQAoreworICAgICJkb21haW4iOiAiRG9tYWluIiwKKyAgICAiY29tbWFuZHMiOiBbCisgICAg
ICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIlBhZ2VPbmx5IiwKKyAgICAgICAgICAgICJ0YXJn
ZXRUeXBlcyI6IFsicGFnZWUiXQorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZG9tYWlu
LWRlYnVnZ2FibGVUeXBlcy10eXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kb21haW4tZGVidWdnYWJsZVR5cGVzLXR5cGUuanNv
bgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOTc0OGY0MjM0NzMKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZmFpbC1vbi1kb21haW4tZGVidWdnYWJsZVR5cGVzLXR5cGUuanNvbgpAQCAtMCwwICsx
LDkgQEAKK3sKKyAgICAiZG9tYWluIjogIldlYk9ubHkiLAorICAgICJkZWJ1Z2dhYmxlVHlwZXMi
OiAid2ViYiIsCisgICAgImNvbW1hbmRzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFt
ZSI6ICJlbmFibGUiCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kb21haW4tZGVidWdn
YWJsZVR5cGVzLXZhbHVlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZmFpbC1vbi1kb21haW4tZGVidWdnYWJsZVR5cGVzLXZhbHVlLmpzb24KbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmIyNTJkZGJkODNkCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2ZhaWwtb24tZG9tYWluLWRlYnVnZ2FibGVUeXBlcy12YWx1ZS5qc29uCkBAIC0wLDAgKzEsOSBA
QAoreworICAgICJkb21haW4iOiAiV2ViT25seSIsCisgICAgImRlYnVnZ2FibGVUeXBlcyI6IFsi
d2ViYiJdLAorICAgICJjb21tYW5kcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUi
OiAiZW5hYmxlIgorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZG9tYWluLXRhcmdldFR5
cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZS1t
YXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMC4uN2FhMDI4MDQ2NTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kb21haW4tdGFy
Z2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgpAQCAtMCwwICsxLDgg
QEAKK1sKK3sKKyAgICAiZG9tYWluIjogIkRvbWFpbiIsCisgICAgImRlYnVnZ2FibGVUeXBlcyI6
IFsiamF2YXNjcmlwdCJdLAorICAgICJjb21tYW5kcyI6IFt7Im5hbWUiOiAiQ29tbWFuZCIsICJ0
YXJnZXRUeXBlcyI6IFsid29ya2VyIl19XSwKKyAgICAiZXZlbnRzIjogW3sibmFtZSI6ICJFdmVu
dCJ9XQorfQorXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2ZhaWwtb24tZG9tYWluLXRhcmdldFR5cGVzLXR5cGUuanNvbiBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWRvbWFpbi10
YXJnZXRUeXBlcy10eXBlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAuLmQ4MjIyNjc0MTQ2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZG9tYWluLXRhcmdldFR5cGVzLXR5cGUu
anNvbgpAQCAtMCwwICsxLDkgQEAKK3sKKyAgICAiZG9tYWluIjogIlBhZ2VPbmx5IiwKKyAgICAi
dGFyZ2V0VHlwZXMiOiAicGFnZWUiLAorICAgICJjb21tYW5kcyI6IFsKKyAgICAgICAgeworICAg
ICAgICAgICAgIm5hbWUiOiAiZW5hYmxlIgorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24t
ZG9tYWluLXRhcmdldFR5cGVzLXZhbHVlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZXMtdmFsdWUuanNv
bgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZTdiMTBkN2YxNTQKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZXMtdmFsdWUuanNvbgpAQCAtMCwwICsxLDkg
QEAKK3sKKyAgICAiZG9tYWluIjogIlBhZ2VPbmx5IiwKKyAgICAidGFyZ2V0VHlwZXMiOiBbInBh
Z2VlIl0sCisgICAgImNvbW1hbmRzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6
ICJlbmFibGUiCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFu
ZC1jYWxsLXBhcmFtZXRlci1uYW1lcy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZHVwbGljYXRlLWNvbW1hbmQtY2FsbC1wYXJhbWV0
ZXItbmFtZXMuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYmFi
NzZjYTYyNzkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1jYWxsLXBhcmFtZXRl
ci1uYW1lcy5qc29uCkBAIC0wLDAgKzEsMTYgQEAKK3sKKyAgICAiZG9tYWluIjogIk92ZXJsYXki
LAorICAgICJjb21tYW5kcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAicHJv
Y2Vzc1BvaW50cyIsCisgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInBvaW50IiwgInR5cGUiOiAibnVtYmVyIiB9LAorICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAicG9pbnQiLCAidHlwZSI6ICJudW1iZXIiIH0KKyAgICAgICAgICAgIF0sCisg
ICAgICAgICAgICAicmV0dXJucyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInJlc3Vs
dDEiLCAidHlwZSI6ICJzdHJpbmciIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJyZXN1
bHQyIiwgInR5cGUiOiAic3RyaW5nIiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBd
Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1yZXR1cm4tcGFyYW1ldGVyLW5hbWVzLmpz
b24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1v
bi1kdXBsaWNhdGUtY29tbWFuZC1yZXR1cm4tcGFyYW1ldGVyLW5hbWVzLmpzb24KbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmM4YmIxNWMwNGI2Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwt
b24tZHVwbGljYXRlLWNvbW1hbmQtcmV0dXJuLXBhcmFtZXRlci1uYW1lcy5qc29uCkBAIC0wLDAg
KzEsMTYgQEAKK3sKKyAgICAiZG9tYWluIjogIk92ZXJsYXkiLAorICAgICJjb21tYW5kcyI6IFsK
KyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAicHJvY2Vzc1BvaW50cyIsCisgICAgICAg
ICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBvaW50MSIs
ICJ0eXBlIjogIm51bWJlciIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBvaW50MiIs
ICJ0eXBlIjogIm51bWJlciIgfQorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJyZXR1cm5z
IjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicmVzdWx0IiwgInR5cGUiOiAic3RyaW5n
IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicmVzdWx0IiwgInR5cGUiOiAic3RyaW5n
IiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kdXBsaWNh
dGUtZXZlbnQtcGFyYW1ldGVyLW5hbWVzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kdXBsaWNhdGUtZXZlbnQtcGFyYW1ldGVyLW5h
bWVzLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmQzZDNiM2Nj
NjQyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2ZhaWwtb24tZHVwbGljYXRlLWV2ZW50LXBhcmFtZXRlci1uYW1lcy5qc29u
CkBAIC0wLDAgKzEsMTIgQEAKK3sKKyAgICAiZG9tYWluIjogIk92ZXJsYXkiLAorICAgICJldmVu
dHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogInByb2Nlc3NlZFBvaW50cyIs
CisgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjog
InBvaW50IiwgInR5cGUiOiAibnVtYmVyIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
cG9pbnQiLCAidHlwZSI6ICJudW1iZXIiIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAg
IF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLWRlY2xhcmF0aW9ucy5qc29uIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZHVwbGljYXRl
LXR5cGUtZGVjbGFyYXRpb25zLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAuLjcwMmZjNmEzMjcwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZHVwbGljYXRlLXR5cGUtZGVjbGFy
YXRpb25zLmpzb24KQEAgLTAsMCArMSwxNSBAQAoreworICAgICJkb21haW4iOiAiUnVudGltZSIs
CisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiUmVtb3RlT2Jq
ZWN0SWQiLAorICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICJkZXNj
cmlwdGlvbiI6ICJVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIuIgorICAgICAgICB9LAorICAgICAg
ICB7CisgICAgICAgICAgICAiaWQiOiAiUmVtb3RlT2JqZWN0SWQiLAorICAgICAgICAgICAgInR5
cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgb2JqZWN0
IGlkZW50aWZpZXIuIgorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZHVwbGljYXRlLXR5
cGUtbWVtYmVyLW5hbWVzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1tZW1iZXItbmFtZXMuanNvbgpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYWViYWNlZThiMjMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1tZW1iZXItbmFtZXMuanNvbgpAQCAtMCwwICsxLDE1IEBA
CitbCit7CisgICAgImRvbWFpbiI6ICJPdmVybGF5VHlwZXMiLAorICAgICJ0eXBlcyI6IFsKKyAg
ICAgICAgeworICAgICAgICAgICAgImlkIjogIlBvaW50IiwKKyAgICAgICAgICAgICJ0eXBlIjog
Im9iamVjdCIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKKyAgICAgICAgICAgICAgICB7
ICJuYW1lIjogIngiLCAidHlwZSI6ICJpbnRlZ2VyIiB9LAorICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAieCIsICJ0eXBlIjogImludGVnZXIiIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQor
ICAgIF0KK30KK10KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9mYWlsLW9uLWVudW0td2l0aC1uby12YWx1ZXMuanNvbiBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWVudW0td2l0aC1u
by12YWx1ZXMuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMjMy
YTdjMzI0OWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1lbnVtLXdpdGgtbm8tdmFsdWVzLmpzb24KQEAgLTAs
MCArMSwxMCBAQAoreworICAgICJkb21haW4iOiAiRGF0YWJhc2UiLAorICAgICJ0eXBlcyI6IFsK
KyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlByaW1hcnlDb2xvcnMiLAorICAgICAgICAg
ICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICJlbnVtIjogW10KKyAgICAgICAgfQor
ICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVn
Z2FibGVUeXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZmFpbC1vbi1ldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxl
VHlwZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45MTMyY2Uw
ODgyOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRl
YnVnZ2FibGVUeXBlLmpzb24KQEAgLTAsMCArMSw4IEBACitbCit7CisgICAgImRvbWFpbiI6ICJE
b21haW4iLAorICAgICJkZWJ1Z2dhYmxlVHlwZXMiOiBbImphdmFzY3JpcHQiXSwKKyAgICAiY29t
bWFuZHMiOiBbeyJuYW1lIjogIkNvbW1hbmQifV0sCisgICAgImV2ZW50cyI6IFt7Im5hbWUiOiAi
RXZlbnQiLCAidGFyZ2V0VHlwZXMiOiBbIndvcmtlciJdfV0KK30KK10KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWV2ZW50
LXRhcmdldFR5cGVzLXR5cGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGVzLXR5cGUuanNvbgpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZTU0ZWQxZjVjNmIKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFp
bC1vbi1ldmVudC10YXJnZXRUeXBlcy10eXBlLmpzb24KQEAgLTAsMCArMSw5IEBACit7CisgICAg
ImRvbWFpbiI6ICJEb21haW4iLAorICAgICJldmVudHMiOiBbCisgICAgICAgIHsKKyAgICAgICAg
ICAgICJuYW1lIjogIlBhZ2VPbmx5IiwKKyAgICAgICAgICAgICJ0YXJnZXRUeXBlcyI6ICJwYWdl
ZSIKKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGVzLXZhbHVl
Lmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFp
bC1vbi1ldmVudC10YXJnZXRUeXBlcy12YWx1ZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwLi41ODg0YmZkN2E2YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWV2ZW50LXRhcmdl
dFR5cGVzLXZhbHVlLmpzb24KQEAgLTAsMCArMSw5IEBACit7CisgICAgImRvbWFpbiI6ICJEb21h
aW4iLAorICAgICJldmVudHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIlBh
Z2VPbmx5IiwKKyAgICAgICAgICAgICJ0YXJnZXRUeXBlcyI6IFsicGFnZWUiXQorICAgICAgICB9
CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2ZhaWwtb24tbnVtYmVyLXR5cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1mbGFn
Lmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFp
bC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbgpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNzMwOGRiOTkyZDYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1v
bi1udW1iZXItdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbgpAQCAtMCwwICsxLDE4
IEBACit7CisgICAgImRvbWFpbiI6ICJEYXRhYmFzZSIsCisgICAgInR5cGVzIjogWworICAgICAg
ICB7CisgICAgICAgICAgICAiaWQiOiAiRGF0YWJhc2VJZCIsCisgICAgICAgICAgICAidHlwZSI6
ICJzdHJpbmciLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBpZGVudGlmaWVy
IG9mIERhdGFiYXNlIG9iamVjdC4iCisgICAgICAgIH0KKyAgICBdLAorICAgICJldmVudHMiOiBb
CisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImRpZEV4ZWN1dGVPcHRpb25hbFBhcmFt
ZXRlcnMiLAorICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IDAgfQor
ICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tbnVtYmVyLXR5cGVk
LW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1i
ZXIuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYWZlYTU1NWVj
NGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNv
bgpAQCAtMCwwICsxLDE2IEBACitbCit7CisgICAgImRvbWFpbiI6ICJEYXRhYmFzZSIsCisgICAg
InR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiRXJyb3IiLAorICAgICAg
ICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJEYXRh
YmFzZSBlcnJvci4iLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJtZXNzYWdlIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjog
IkVycm9yIG1lc3NhZ2UuIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29kZSIsICJ0
eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgY29kZS4iLCAib3B0aW9uYWwi
OiAwIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0KK30KK10KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXN0
cmluZy10eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29uIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlv
bmFsLXBhcmFtZXRlci1mbGFnLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAuLjQwMTJjNzliNmIzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFs
LXBhcmFtZXRlci1mbGFnLmpzb24KQEAgLTAsMCArMSwxOCBAQAoreworICAgICJkb21haW4iOiAi
RGF0YWJhc2UiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjog
IkRhdGFiYXNlSWQiLAorICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAg
ICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgaWRlbnRpZmllciBvZiBEYXRhYmFzZSBvYmplY3QuIgor
ICAgICAgICB9CisgICAgXSwKKyAgICAiZXZlbnRzIjogWworICAgICAgICB7CisgICAgICAgICAg
ICAibmFtZSI6ICJkaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzIiwKKyAgICAgICAgICAgICJw
YXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAi
dHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiAidHJ1ZSIgfQorICAgICAgICAgICAgXQorICAg
ICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVt
YmVyLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZmFpbC1vbi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNvbgpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uY2EzZWYyOGE4ZjgKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1v
bi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNvbgpAQCAtMCwwICsxLDE2IEBA
CitbCit7CisgICAgImRvbWFpbiI6ICJEYXRhYmFzZSIsCisgICAgInR5cGVzIjogWworICAgICAg
ICB7CisgICAgICAgICAgICAiaWQiOiAiRXJyb3IiLAorICAgICAgICAgICAgInR5cGUiOiAib2Jq
ZWN0IiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJEYXRhYmFzZSBlcnJvci4iLAorICAg
ICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJtZXNz
YWdlIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIG1lc3NhZ2UuIiB9
LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29kZSIsICJ0eXBlIjogImludGVnZXIiLCAi
ZGVzY3JpcHRpb24iOiAiRXJyb3IgY29kZS4iLCAib3B0aW9uYWwiOiAiZmFsc2UiIH0KKyAgICAg
ICAgICAgIF0KKyAgICAgICAgfQorICAgIF0KK30KK10KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXR5cGUtZGVjbGFyYXRp
b24tdXNpbmctdHlwZS1yZWZlcmVuY2UuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXR5cGUtZGVjbGFyYXRpb24tdXNpbmctdHlwZS1y
ZWZlcmVuY2UuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMTli
NzU5MGNjYzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi10eXBlLWRlY2xhcmF0aW9uLXVzaW5nLXR5cGUtcmVm
ZXJlbmNlLmpzb24KQEAgLTAsMCArMSwxMyBAQAorWworeworICAgICJkb21haW4iOiAiUnVudGlt
ZSIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiUmVtb3Rl
T2JqZWN0SWQiLAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAgICIk
cmVmIjogIlNvbWVUeXBlIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgb2Jq
ZWN0IGlkZW50aWZpZXIuIgorICAgICAgICB9CisgICAgXQorfQorXQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdHlwZS1y
ZWZlcmVuY2UtYXMtcHJpbWl0aXZlLXR5cGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXR5cGUtcmVmZXJlbmNlLWFzLXByaW1pdGl2
ZS10eXBlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjhjODNi
YmZjZTQxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdHlwZS1yZWZlcmVuY2UtYXMtcHJpbWl0aXZlLXR5cGUu
anNvbgpAQCAtMCwwICsxLDE4IEBACit7CisgICAgImRvbWFpbiI6ICJEYXRhYmFzZSIsCisgICAg
InR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiRGF0YWJhc2VJZCIsCisg
ICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjog
IlVuaXF1ZSBpZGVudGlmaWVyIG9mIERhdGFiYXNlIG9iamVjdC4iCisgICAgICAgIH0KKyAgICBd
LAorICAgICJldmVudHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImRpZEV4
ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMiLAorICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogIkRhdGFiYXNl
SWQiIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXR5cGUt
d2l0aC1sb3dlcmNhc2UtbmFtZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdHlwZS13aXRoLWxvd2VyY2FzZS1uYW1lLmpzb24KbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjUzMTkwMWU0YTlhCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2ZhaWwtb24tdHlwZS13aXRoLWxvd2VyY2FzZS1uYW1lLmpzb24KQEAgLTAsMCArMSwxMCBAQAor
eworICAgICJkb21haW4iOiAiRGF0YWJhc2UiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgewor
ICAgICAgICAgICAgImlkIjogImRhdGFiYXNlSWQiLAorICAgICAgICAgICAgInR5cGUiOiAiaW50
ZWdlciIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIGlkZW50aWZpZXIgb2Yg
RGF0YWJhc2Ugb2JqZWN0LiIKKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXVua25vd24t
dHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1kZWNsYXJhdGlvbi5qc29uIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVy
ZW5jZS1pbi10eXBlLWRlY2xhcmF0aW9uLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAuLmQ2ODg3YTI3NDExCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdW5rbm93bi10eXBlLXJl
ZmVyZW5jZS1pbi10eXBlLWRlY2xhcmF0aW9uLmpzb24KQEAgLTAsMCArMSwxMiBAQAorWworewor
ICAgICJkb21haW4iOiAiUnVudGltZSIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAg
ICAgICAgICAiaWQiOiAiUmVtb3RlT2JqZWN0SWQiLAorICAgICAgICAgICAgInR5cGUiOiAiZHJh
Z29uIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgb2JqZWN0IGlkZW50aWZp
ZXIuIgorICAgICAgICB9CisgICAgXQorfQorXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVy
ZW5jZS1pbi10eXBlLW1lbWJlci5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLW1l
bWJlci5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5iODE3ZGI1
MDQ0ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1tZW1i
ZXIuanNvbgpAQCAtMCwwICsxLDE1IEBACitbCit7CisgICAgImRvbWFpbiI6ICJGYW50YXN5IiwK
KyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJEcmFnb25FZ2ci
LAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlv
biI6ICJBIGRyYWdvbiBlZ2cuIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAiY29sb3IiLCAiJHJlZiI6ICJDb2xvciIgfQorICAgICAgICAg
ICAgXQorICAgICAgICB9CisgICAgXQorfQorXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0
dXJlLWd1YXJkcy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42N2NmOGU1ODJmNgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgpAQCAtMCwwICsxLDM2IEBACitb
Cit7CisgICAgImRvbWFpbiI6ICJOZXR3b3JrMSIsCisgICAgImZlYXR1cmVHdWFyZCI6ICJQTEFU
Rk9STShXRUJfQ09NTUFORFMpIiwKKyAgICAiY29tbWFuZHMiOiBbCisgICAgICAgIHsKKyAgICAg
ICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJjZSIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24i
OiAiTG9hZHMgYSByZXNvdXJjZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNw
ZWN0ZWQgcGFnZSB3aXRob3V0IGNyb3NzIG9yaWdpbiBjaGVja3MuIgorICAgICAgICB9CisgICAg
XQorfSwKK3sKKyAgICAiZG9tYWluIjogIk5ldHdvcmsyIiwKKyAgICAiZmVhdHVyZUd1YXJkIjog
IlBMQVRGT1JNKFdFQl9UWVBFUykiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAg
ICAgICAgImlkIjogIk5ldHdvcmtFcnJvciIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3Qi
LAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJtZXNzYWdlIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIG1lc3Nh
Z2UuIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29kZSIsICJ0eXBlIjogImludGVn
ZXIiLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgY29kZS4iIH0KKyAgICAgICAgICAgIF0KKyAgICAg
ICAgfQorICAgIF0KK30sCit7CisgICAgImRvbWFpbiI6ICJOZXR3b3JrMyIsCisgICAgImZlYXR1
cmVHdWFyZCI6ICJQTEFURk9STShXRUJfRVZFTlRTKSIsCisgICAgImV2ZW50cyI6IFsKKyAgICAg
ICAgeworICAgICAgICAgICAgIm5hbWUiOiAicmVzb3VyY2VMb2FkZWQiLAorICAgICAgICAgICAg
ImRlc2NyaXB0aW9uIjogIkEgcmVzb3VyY2Ugd2FzIGxvYWRlZC4iCisgICAgICAgIH0KKyAgICBd
Cit9CitdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy9jb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVn
Z2FibGVUeXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy9jb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2Fi
bGVUeXBlLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyN2FiNjViOTJhLi4w
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy9jb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2Fi
bGVUeXBlLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLVsKLXsKLSAgICAiZG9t
YWluIjogIkRvbWFpbiIsCi0gICAgImRlYnVnZ2FibGVUeXBlcyI6IFsicGFnZSJdLAotICAgICJ0
YXJnZXRUeXBlcyI6IFsicGFnZSIsICJ3b3JrZXIiXSwKLSAgICAiY29tbWFuZHMiOiBbeyJuYW1l
IjogIkNvbW1hbmQifV0sCi0gICAgImV2ZW50cyI6IFt7Im5hbWUiOiAiRXZlbnQifV0KLX0KLV0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9nZW5lcmljL2NvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24gYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9jb21tYW5kcy13aXRo
LWFzeW5jLWF0dHJpYnV0ZS5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMTI2
MmU4ODlmYS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNv
bgorKysgL2Rldi9udWxsCkBAIC0xLDEwOSArMCwwIEBACi17Ci0gICAgImRvbWFpbiI6ICJEYXRh
YmFzZSIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiRGF0
YWJhc2VJZCIsCi0gICAgICAgICAgICAidHlwZSI6ICJpbnRlZ2VyIiwKLSAgICAgICAgICAgICJk
ZXNjcmlwdGlvbiI6ICJVbmlxdWUgaWRlbnRpZmllciBvZiBEYXRhYmFzZSBvYmplY3QuIgotICAg
ICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiUHJpbWFyeUNvbG9ycyIsCi0g
ICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAotICAgICAgICAgICAgImVudW0iOiBbInJlZCIs
ICJncmVlbiIsICJibHVlIl0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgImlk
IjogIkNvbG9yTGlzdCIsCi0gICAgICAgICAgICAidHlwZSI6ICJhcnJheSIsCi0gICAgICAgICAg
ICAiaXRlbXMiOiB7ICIkcmVmIjogIlByaW1hcnlDb2xvcnMiIH0KLSAgICAgICAgfSwKLSAgICAg
ICAgewotICAgICAgICAgICAgImlkIjogIkVycm9yIiwKLSAgICAgICAgICAgICJ0eXBlIjogIm9i
amVjdCIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRGF0YWJhc2UgZXJyb3IuIiwKLSAg
ICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibWVz
c2FnZSIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBtZXNzYWdlLiIg
fSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvZGUiLCAidHlwZSI6ICJpbnRlZ2VyIiwg
ImRlc2NyaXB0aW9uIjogIkVycm9yIGNvZGUuIiB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0K
LSAgICBdLAotICAgICJjb21tYW5kcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUi
OiAiZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyIsCi0gICAgICAgICAgICAicGFy
YW1ldGVycyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRhdGFiYXNlSWQiLCAiJHJl
ZiI6ICJEYXRhYmFzZUlkIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicXVlcnkiLCAi
dHlwZSI6ICJzdHJpbmciIH0KLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAicmV0dXJucyI6
IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJy
YXkiLCAib3B0aW9uYWwiOiB0cnVlLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAot
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0
aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAi
dHlwZSI6ICJudW1iZXIiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0g
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiwgIm9wdGlv
bmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIk
cmVmIjogIkRhdGFiYXNlSWQiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVycm9yIiwgIm9wdGlvbmFsIjogdHJ1ZSB9
LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6ICJQcmlt
YXJ5Q29sb3JzIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAiYWx0ZXJuYXRlQ29sb3JzIiwgIiRyZWYiOiAiQ29sb3JMaXN0IiwgIm9wdGlvbmFsIjogdHJ1
ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0
cmluZyIsICJlbnVtIjogWyJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93IiwgImJsYWNrIl0sICJv
cHRpb25hbCI6IHRydWUgfQotICAgICAgICAgICAgXQotICAgICAgICB9LAotICAgICAgICB7Ci0g
ICAgICAgICAgICAibmFtZSI6ICJleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyIs
Ci0gICAgICAgICAgICAiYXN5bmMiOiB0cnVlLAotICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBb
Ci0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJh
c2VJZCIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInF1ZXJ5IiwgInR5cGUiOiAic3Ry
aW5nIiB9Ci0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInJldHVybnMiOiBbCi0gICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIm9wdGlv
bmFsIjogdHJ1ZSwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwKLSAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1
ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVt
YmVyIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFs
dWVzIiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIsICJvcHRpb25hbCI6IHRydWUg
fSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRhdGFiYXNlSWQiLCAiJHJlZiI6ICJEYXRh
YmFzZUlkIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
c3FsRXJyb3IiLCAiJHJlZiI6ICJFcnJvciIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInNjcmVlbkNvbG9yIiwgIiRyZWYiOiAiUHJpbWFyeUNvbG9ycyIs
ICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImFsdGVybmF0
ZUNvbG9ycyIsICIkcmVmIjogIkNvbG9yTGlzdCIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogInByaW50Q29sb3IiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51
bSI6IFsiY3lhbiIsICJtYWdlbnRhIiwgInllbGxvdyIsICJibGFjayJdLCAib3B0aW9uYWwiOiB0
cnVlIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAg
Im5hbWUiOiAiZXhlY3V0ZVNRTFN5bmMiLAotICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCi0g
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJ
ZCIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInF1ZXJ5IiwgInR5cGUiOiAic3RyaW5n
IiB9Ci0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInJldHVybnMiOiBbCi0gICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjog
eyAidHlwZSI6ICJzdHJpbmciIH0gfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vdGVz
IiwgInR5cGUiOiAic3RyaW5nIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0
YW1wIiwgInR5cGUiOiAibnVtYmVyIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFs
dWVzIiwgInR5cGUiOiAib2JqZWN0IiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5
bG9hZCIsICJ0eXBlIjogImFueSIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRhdGFi
YXNlSWQiLCAiJHJlZiI6ICJEYXRhYmFzZUlkIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAic3FsRXJyb3IiLCAiJHJlZiI6ICJFcnJvciIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1l
IjogImFsdGVybmF0ZUNvbG9ycyIsICIkcmVmIjogIkNvbG9yTGlzdCIgfSwKLSAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInNjcmVlbkNvbG9yIiwgIiRyZWYiOiAiUHJpbWFyeUNvbG9ycyIgfSwK
LSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInByaW50Q29sb3IiLCAidHlwZSI6ICJzdHJpbmci
LCAiZW51bSI6IFsiY3lhbiIsICJtYWdlbnRhIiwgInllbGxvdyIsICJibGFjayJdIH0KLSAgICAg
ICAgICAgIF0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiZXhl
Y3V0ZVNRTEFzeW5jIiwKLSAgICAgICAgICAgICJhc3luYyI6IHRydWUsCi0gICAgICAgICAgICAi
cGFyYW1ldGVycyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRhdGFiYXNlSWQiLCAi
JHJlZiI6ICJEYXRhYmFzZUlkIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicXVlcnki
LCAidHlwZSI6ICJzdHJpbmciIH0KLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAicmV0dXJu
cyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAi
YXJyYXkiLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAotICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciIH0sCi0gICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiIH0sCi0gICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiIH0sCi0gICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiB9LAotICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiIH0sCi0gICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVycm9yIiB9LAotICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6ICJQcmltYXJ5Q29sb3Jz
IiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwgIiRyZWYi
OiAiQ29sb3JMaXN0IiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJpbnRDb2xvciIs
ICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93Iiwg
ImJsYWNrIl0gfQotICAgICAgICAgICAgXQotICAgICAgICB9Ci0gICAgXQotfQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMv
Y29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24gYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9jb21tYW5k
cy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMzYxZDU3ZDgyMGQuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2NvbW1hbmRzLXdp
dGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCisrKyAvZGV2L251bGwKQEAg
LTEsODUgKzAsMCBAQAotewotICAgICJkb21haW4iOiAiRGF0YWJhc2UiLAotICAgICJ0eXBlcyI6
IFsKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIkRhdGFiYXNlSWQiLAotICAgICAgICAg
ICAgInR5cGUiOiAiaW50ZWdlciIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVl
IGlkZW50aWZpZXIgb2YgRGF0YWJhc2Ugb2JqZWN0LiIKLSAgICAgICAgfSwKLSAgICAgICAgewot
ICAgICAgICAgICAgImlkIjogIlByaW1hcnlDb2xvcnMiLAotICAgICAgICAgICAgInR5cGUiOiAi
c3RyaW5nIiwKLSAgICAgICAgICAgICJlbnVtIjogWyJyZWQiLCAiZ3JlZW4iLCAiYmx1ZSJdCi0g
ICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJDb2xvckxpc3QiLAotICAg
ICAgICAgICAgInR5cGUiOiAiYXJyYXkiLAotICAgICAgICAgICAgIml0ZW1zIjogeyAiJHJlZiI6
ICJQcmltYXJ5Q29sb3JzIiB9Ci0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJp
ZCI6ICJFcnJvciIsCi0gICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAotICAgICAgICAgICAg
ImRlc2NyaXB0aW9uIjogIkRhdGFiYXNlIGVycm9yLiIsCi0gICAgICAgICAgICAicHJvcGVydGll
cyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm1lc3NhZ2UiLCAidHlwZSI6ICJzdHJp
bmciLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgbWVzc2FnZS4iIH0sCi0gICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJjb2RlIiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJFcnJv
ciBjb2RlLiIgfQotICAgICAgICAgICAgXQotICAgICAgICB9Ci0gICAgXSwKLSAgICAiY29tbWFu
ZHMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImV4ZWN1dGVBbGxPcHRpb25h
bFBhcmFtZXRlcnMiLAotICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCi0gICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIm9wdGlvbmFsIjog
dHJ1ZSwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwKLSAgICAgICAgICAgICAgICB7
ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAot
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiwg
Im9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVzIiwg
InR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogImRhdGFiYXNlSWQiLCAiJHJlZiI6ICJEYXRhYmFzZUlk
IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic3FsRXJy
b3IiLCAiJHJlZiI6ICJFcnJvciIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInNjcmVlbkNvbG9yIiwgIiRyZWYiOiAiUHJpbWFyeUNvbG9ycyIsICJvcHRp
b25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImFsdGVybmF0ZUNvbG9y
cyIsICIkcmVmIjogIkNvbG9yTGlzdCIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInByaW50Q29sb3IiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsi
Y3lhbiIsICJtYWdlbnRhIiwgInllbGxvdyIsICJibGFjayJdLCAib3B0aW9uYWwiOiB0cnVlIH0K
LSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAicmV0dXJucyI6IFsKLSAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAib3B0aW9uYWwiOiB0
cnVlLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAotICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0g
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiLCAi
b3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAi
dHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQi
LCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzcWxFcnJv
ciIsICIkcmVmIjogIkVycm9yIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6ICJQcmltYXJ5Q29sb3JzIiwgIm9wdGlv
bmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYWx0ZXJuYXRlQ29sb3Jz
IiwgIiRyZWYiOiAiQ29sb3JMaXN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJj
eWFuIiwgIm1hZ2VudGEiLCAieWVsbG93IiwgImJsYWNrIl0sICJvcHRpb25hbCI6IHRydWUgfQot
ICAgICAgICAgICAgXQotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6
ICJleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMiLAotICAgICAgICAgICAgInBhcmFtZXRlcnMi
OiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFy
cmF5IiwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwKLSAgICAgICAgICAgICAgICB7
ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiB9LAotICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiB9LAotICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiB9LAotICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIgfSwKLSAgICAgICAgICAgICAgICB7
ICJuYW1lIjogImRhdGFiYXNlSWQiLCAiJHJlZiI6ICJEYXRhYmFzZUlkIiB9LAotICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAic3FsRXJyb3IiLCAiJHJlZiI6ICJFcnJvciIgfSwKLSAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInNjcmVlbkNvbG9yIiwgIiRyZWYiOiAiUHJpbWFyeUNvbG9ycyIg
fSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImFsdGVybmF0ZUNvbG9ycyIsICIkcmVmIjog
IkNvbG9yTGlzdCIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInByaW50Q29sb3IiLCAi
dHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsiY3lhbiIsICJtYWdlbnRhIiwgInllbGxvdyIsICJi
bGFjayJdIH0KLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAicmV0dXJucyI6IFsKLSAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRl
bXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
bm90ZXMiLCAidHlwZSI6ICJzdHJpbmciIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0
aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
ZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiIH0sCi0gICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVycm9yIiB9LAotICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6ICJQcmltYXJ5Q29sb3JzIiB9LAotICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwgIiRyZWYiOiAiQ29sb3JMaXN0
IiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0
cmluZyIsICJlbnVtIjogWyJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93IiwgImJsYWNrIl0gfQot
ICAgICAgICAgICAgXQotICAgICAgICB9Ci0gICAgXQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZGVmaW5pdGlvbnMt
d2l0aC1tYWMtcGxhdGZvcm0uanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9nZW5lcmljL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24K
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxN2YxMzVlZTVhLi4wMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJp
Yy9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCisrKyAvZGV2L251bGwKQEAgLTEs
MjggKzAsMCBAQAotewotICAgICJkb21haW4iOiAiTmV0d29yayIsCi0gICAgInR5cGVzIjogWwot
ICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiTmV0d29ya0Vycm9yIiwKLSAgICAgICAgICAg
ICJ0eXBlIjogIm9iamVjdCIsCi0gICAgICAgICAgICAicGxhdGZvcm0iOiAibWFjb3MiLAotICAg
ICAgICAgICAgInByb3BlcnRpZXMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJtZXNz
YWdlIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIG1lc3NhZ2UuIiB9
LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29kZSIsICJ0eXBlIjogImludGVnZXIiLCAi
ZGVzY3JpcHRpb24iOiAiRXJyb3IgY29kZS4iIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfQot
ICAgIF0sCi0gICAgImNvbW1hbmRzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6
ICJsb2FkUmVzb3VyY2UiLAotICAgICAgICAgICAgInBsYXRmb3JtIjogIm1hY29zIiwKLSAgICAg
ICAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBhIHJlc291cmNlIGluIHRoZSBjb250ZXh0IG9m
IGEgZnJhbWUgb24gdGhlIGluc3BlY3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNoZWNr
cy4iCi0gICAgICAgIH0KLSAgICBdLAotICAgICJldmVudHMiOiBbCi0gICAgICAgIHsKLSAgICAg
ICAgICAgICJuYW1lIjogInJlc291cmNlTG9hZGVkIiwKLSAgICAgICAgICAgICJwbGF0Zm9ybSI6
ICJtYWNvcyIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQSByZXNvdXJjZSB3YXMgbG9h
ZGVkLiIKLSAgICAgICAgfQotICAgIF0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2RvbWFpbi1kZWJ1Z2dhYmxlVHlw
ZXMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL2RvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMWZlYjBjOWEyN2UuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2RvbWFpbi1kZWJ1Z2dhYmxlVHlw
ZXMuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotWwotewotICAgICJkb21haW4i
OiAiRG9tYWluIiwKLSAgICAiZGVidWdnYWJsZVR5cGVzIjogWyJ3ZWItcGFnZSJdLAotICAgICJj
b21tYW5kcyI6IFt7Im5hbWUiOiAiQ29tbWFuZCJ9XSwKLSAgICAiZXZlbnRzIjogW3sibmFtZSI6
ICJFdmVudCJ9XQotfQotXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9t
YWluLWRlYnVnZ2FibGVUeXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9kb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4t
ZGVidWdnYWJsZVR5cGUuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjYyZmIz
OGJhNzguLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9nZW5lcmljL2RvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1k
ZWJ1Z2dhYmxlVHlwZS5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1bCi17Ci0g
ICAgImRvbWFpbiI6ICJEb21haW4iLAotICAgICJkZWJ1Z2dhYmxlVHlwZXMiOiBbInBhZ2UiXSwK
LSAgICAiY29tbWFuZHMiOiBbeyJuYW1lIjogIkNvbW1hbmQiLCAidGFyZ2V0VHlwZXMiOiBbInBh
Z2UiLCAid29ya2VyIl19XSwKLSAgICAiZXZlbnRzIjogW3sibmFtZSI6ICJFdmVudCJ9XQotfQot
XQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2dlbmVyaWMvZG9tYWluLXRhcmdldFR5cGVzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9kb21haW4tdGFyZ2V0VHlwZXMuanNv
bgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmE2ZTQwZDYwYWQuLjAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmljL2RvbWFpbi10YXJnZXRUeXBlcy5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBA
Ci1bCi17Ci0gICAgImRvbWFpbiI6ICJEb21haW4iLAotICAgICJ0YXJnZXRUeXBlcyI6IFsicGFn
ZSJdLAotICAgICJjb21tYW5kcyI6IFt7Im5hbWUiOiAiQ29tbWFuZCIsICJ0YXJnZXRUeXBlcyI6
IFsicGFnZSJdfV0sCi0gICAgImV2ZW50cyI6IFt7Im5hbWUiOiAiRXZlbnQiLCAidGFyZ2V0VHlw
ZXMiOiBbInBhZ2UiXX1dCi19Ci1dCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9kb21haW5zLXdpdGgtdmFyeWluZy1jb21t
YW5kLXNpemVzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy9kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0YThlY2IxNzZkLi4wMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9k
b21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KKysrIC9kZXYvbnVsbApAQCAt
MSw1NCArMCwwIEBACi1bCi17Ci0gICAgImRvbWFpbiI6ICJOZXR3b3JrMSIsCi0gICAgImNvbW1h
bmRzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJsb2FkUmVzb3VyY2UxIiwK
LSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBhIHJlc291cmNlIGluIHRoZSBjb250
ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGluc3BlY3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3JpZ2lu
IGNoZWNrcy4iCi0gICAgICAgIH0KLSAgICBdCi19LAotewotICAgICJkb21haW4iOiAiTmV0d29y
azIiLAotICAgICJ0eXBlcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIkxvYWRl
cklkIiwKLSAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCi0gICAgICAgICAgICAiZGVzY3Jp
cHRpb24iOiAiVW5pcXVlIGxvYWRlciBpZGVudGlmaWVyLiIKLSAgICAgICAgfQotICAgIF0KLX0s
Ci17Ci0gICAgImRvbWFpbiI6ICJOZXR3b3JrMyIsCi0gICAgImNvbW1hbmRzIjogWwotICAgICAg
ICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJsb2FkUmVzb3VyY2UxIiwKLSAgICAgICAgICAgICJk
ZXNjcmlwdGlvbiI6ICJMb2FkcyBhIHJlc291cmNlIGluIHRoZSBjb250ZXh0IG9mIGEgZnJhbWUg
b24gdGhlIGluc3BlY3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNoZWNrcy4iCi0gICAg
ICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJjZTIiLAot
ICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRl
eHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4g
Y2hlY2tzLiIKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAibG9h
ZFJlc291cmNlMyIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9hZHMgYSByZXNvdXJj
ZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFnZSB3aXRob3V0
IGNyb3NzIG9yaWdpbiBjaGVja3MuIgotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAg
ICAibmFtZSI6ICJsb2FkUmVzb3VyY2U0IiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJM
b2FkcyBhIHJlc291cmNlIGluIHRoZSBjb250ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGluc3BlY3Rl
ZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNoZWNrcy4iCi0gICAgICAgIH0sCi0gICAgICAg
IHsKLSAgICAgICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJjZTUiLAotICAgICAgICAgICAgImRl
c2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBv
biB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKLSAgICAg
ICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAibG9hZFJlc291cmNlNiIsCi0g
ICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9hZHMgYSByZXNvdXJjZSBpbiB0aGUgY29udGV4
dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFnZSB3aXRob3V0IGNyb3NzIG9yaWdpbiBj
aGVja3MuIgotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJsb2Fk
UmVzb3VyY2U3IiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBhIHJlc291cmNl
IGluIHRoZSBjb250ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGluc3BlY3RlZCBwYWdlIHdpdGhvdXQg
Y3Jvc3Mgb3JpZ2luIGNoZWNrcy4iCi0gICAgICAgIH0KLSAgICBdCi19Ci1dCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9l
bnVtLXZhbHVlcy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvZW51bS12YWx1ZXMuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggY2RhZDYxZGY3YzkuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2VudW0tdmFsdWVzLmpzb24KKysrIC9k
ZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi17ImRvbWFpbnMiOlsKLXsKLSAgICAiZG9tYWluIjog
IlR5cGVEb21haW4iLAotICAgICJ0eXBlcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgImlk
IjogIlR5cGVEb21haW5FbnVtIiwKLSAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCi0gICAg
ICAgICAgICAiZW51bSI6IFsic2hhcmVkIiwgInJlZCIsICJncmVlbiIsICJibHVlIl0KLSAgICAg
ICAgfQotICAgIF0KLX0sCi17Ci0gICAgImRvbWFpbiI6ICJDb21tYW5kRG9tYWluIiwKLSAgICAi
Y29tbWFuZHMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImNvbW1hbmRXaXRo
RW51bVJldHVyblZhbHVlIiwKLSAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogW10sCi0gICAgICAg
ICAgICAicmV0dXJucyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInJldHVyblZhbHVl
IiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbInNoYXJlZCIsICJjeWFuIiwgIm1hZ2VudGEi
LCAieWVsbG93Il0gfQotICAgICAgICAgICAgXQotICAgICAgICB9Ci0gICAgXQotfSwKLXsKLSAg
ICAiZG9tYWluIjogIkV2ZW50RG9tYWluIiwKLSAgICAiZXZlbnRzIjogWwotICAgICAgICB7Ci0g
ICAgICAgICAgICAibmFtZSI6ICJldmVudFdpdGhFbnVtUGFyYW1ldGVyIiwKLSAgICAgICAgICAg
ICJwYXJhbWV0ZXJzIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGFyYW1ldGVyIiwg
InR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbInNoYXJlZCIsICJibGFjayIsICJ3aGl0ZSJdIH0K
LSAgICAgICAgICAgIF0KLSAgICAgICAgfQotICAgIF0KLX0KLV19CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9ldmVudC10
YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXZlbnQtdGFyZ2V0
VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNGRmZWQ0MWVkMjEuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V2ZW50LXRhcmdldFR5
cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKysrIC9kZXYvbnVsbApAQCAt
MSw4ICswLDAgQEAKLVsKLXsKLSAgICAiZG9tYWluIjogIkRvbWFpbiIsCi0gICAgImRlYnVnZ2Fi
bGVUeXBlcyI6IFsicGFnZSJdLAotICAgICJjb21tYW5kcyI6IFt7Im5hbWUiOiAiQ29tbWFuZCJ9
XSwKLSAgICAiZXZlbnRzIjogW3sibmFtZSI6ICJFdmVudCIsICJ0YXJnZXRUeXBlcyI6IFsicGFn
ZSIsICJ3b3JrZXIiXX1dCi19Ci1dCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9ldmVudHMtd2l0aC1vcHRpb25hbC1wYXJh
bWV0ZXJzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZ2VuZXJpYy9ldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhYmJmMTBiODM2Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9ldmVudHMt
d2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCww
IEBACi17Ci0gICAgImRvbWFpbiI6ICJEYXRhYmFzZSIsCi0gICAgInR5cGVzIjogWwotICAgICAg
ICB7Ci0gICAgICAgICAgICAiaWQiOiAiRGF0YWJhc2VJZCIsCi0gICAgICAgICAgICAidHlwZSI6
ICJzdHJpbmciLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBpZGVudGlmaWVy
IG9mIERhdGFiYXNlIG9iamVjdC4iCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAg
ICJpZCI6ICJQcmltYXJ5Q29sb3JzIiwKLSAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCi0g
ICAgICAgICAgICAidmFsdWVzIjogWyJyZWQiLCAiZ3JlZW4iLCAiYmx1ZSJdCi0gICAgICAgIH0s
Ci0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJDb2xvckxpc3QiLAotICAgICAgICAgICAg
InR5cGUiOiAiYXJyYXkiLAotICAgICAgICAgICAgIml0ZW1zIjogeyAiJHJlZiI6ICJQcmltYXJ5
Q29sb3JzIiB9Ci0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJFcnJv
ciIsCi0gICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAotICAgICAgICAgICAgImRlc2NyaXB0
aW9uIjogIkRhdGFiYXNlIGVycm9yLiIsCi0gICAgICAgICAgICAicHJvcGVydGllcyI6IFsKLSAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogIm1lc3NhZ2UiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVz
Y3JpcHRpb24iOiAiRXJyb3IgbWVzc2FnZS4iIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJjb2RlIiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBjb2RlLiIg
fQotICAgICAgICAgICAgXQotICAgICAgICB9Ci0gICAgXSwKLSAgICAiZXZlbnRzIjogWwotICAg
ICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJkaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJz
IiwKLSAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJvcHRpb25hbCI6IHRydWUsICJpdGVt
cyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJu
b3RlcyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6
IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9i
amVjdCIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBh
eWxvYWQiLCAidHlwZSI6ICJhbnkiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVycm9yIiwgIm9wdGlvbmFsIjogdHJ1
ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6ICJQ
cmltYXJ5Q29sb3JzIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwgIiRyZWYiOiAiQ29sb3JMaXN0IiwgIm9wdGlvbmFsIjog
dHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjog
InN0cmluZyIsICJ2YWx1ZXMiOiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2si
XSwgIm9wdGlvbmFsIjogdHJ1ZSB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0sCi0gICAgICAg
IHsKLSAgICAgICAgICAgICJuYW1lIjogImRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyIs
Ci0gICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjog
ImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmlu
ZyIgfSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJp
bmciIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJu
dW1iZXIiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJv
YmplY3QiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAi
YW55IiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic3FsRXJyb3IiLCAiJHJlZiI6ICJF
cnJvciIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNjcmVlbkNvbG9yIiwgIiRyZWYi
OiAiUHJpbWFyeUNvbG9ycyIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImFsdGVybmF0
ZUNvbG9ycyIsICIkcmVmIjogIkNvbG9yTGlzdCIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1l
IjogInByaW50Q29sb3IiLCAidHlwZSI6ICJzdHJpbmciLCAidmFsdWVzIjogWyJjeWFuIiwgIm1h
Z2VudGEiLCAieWVsbG93IiwgImJsYWNrIl0gfQotICAgICAgICAgICAgXQotICAgICAgICB9Ci0g
ICAgXQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRv
bWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2NvbW1hbmQtdGFyZ2V0VHlw
ZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1yZXN1bHQKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDQzMTNmYTkxNTFlLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9j
b21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tcmVz
dWx0CisrKyAvZGV2L251bGwKQEAgLTEsMTA2MyArMCwwIEBACi0jIyMgQmVnaW4gRmlsZTogSW5z
cGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLS8vIERvbWFpbgot
SW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiRG9tYWluIiwgWyJwYWdlIiwgIndvcmtl
ciJdKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJEb21haW4uQ29tbWFuZCIs
IG51bGwsIFtdLCBbXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnQoIkRvbWFpbi5F
dmVudCIsIG51bGwsIFtdKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW5EaXNwYXRj
aGVyID0gSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRpc3BhdGNoZXIuYmluZChJbnNwZWN0b3JC
YWNrZW5kLCAiRG9tYWluIik7Ci1JbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJEb21h
aW4iLCBbInBhZ2UiXSk7Ci0jIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5q
cwotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZC10YXJnZXRUeXBlLW1hdGNo
aW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgot
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0j
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLQotbmFt
ZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsK
LXB1YmxpYzoKLSAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlz
cGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRp
c3BhdGNoZXIpOyB9Ci0gICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkg
Y29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQotcHJpdmF0ZToKLSAg
ICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Ci19OwotCi0K
LWNsYXNzIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5BbHRlcm5hdGVEb21h
aW5CYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBDb21tYW5kKGxvbmcg
Y2FsbElkKSA9IDA7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotI2VuZGlmIC8v
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotIyMjIEVuZCBGaWxlOiBU
ZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNv
bW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQot
I2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdHlwZWRlZiBTdHJpbmcgRXJyb3JT
dHJpbmc7Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLWNs
YXNzIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyOwotI2VuZGlmIC8vIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi1jbGFzcyBEb21haW5CYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXIgewotcHVibGljOgotICAgIHZpcnR1YWwgdm9pZCBDb21tYW5kKEVycm9y
U3RyaW5nJikgPSAwOwotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgfkRvbWFpbkJhY2tlbmREaXNw
YXRjaGVySGFuZGxlcigpOwotfTsKLQotY2xhc3MgRG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmlu
YWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAg
IHN0YXRpYyBSZWY8RG9tYWluQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0
Y2hlciYsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIHZvaWQgZGlzcGF0
Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0
PiYmIG1lc3NhZ2UpIGZpbmFsOwotcHJpdmF0ZToKLSAgICB2b2lkIENvbW1hbmQobG9uZyByZXF1
ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0jaWYgRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi1wdWJsaWM6Ci0gICAgdm9pZCBzZXRBbHRl
cm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKiBhbHRlcm5h
dGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNo
ZXI7IH0KLXByaXZhdGU6Ci0gICAgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIqIG1f
YWx0ZXJuYXRlRGlzcGF0Y2hlciB7IG51bGxwdHIgfTsKLSNlbmRpZgotcHJpdmF0ZToKLSAgICBE
b21haW5CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYsIERvbWFpbkJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlciopOwotICAgIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciog
bV9hZ2VudCB7IG51bGxwdHIgfTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMj
IEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRl
c3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0
Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCi0jaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5o
IgotI2VuZGlmCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1Eb21haW5CYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXI6On5Eb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KLQotUmVm
PERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRl
KEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgRG9tYWluQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyKiBhZ2VudCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEb21haW5C
YWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKLX0KLQotRG9tYWlu
QmFja2VuZERpc3BhdGNoZXI6OkRvbWFpbkJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRj
aGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBh
Z2VudCkKLSAgICA6IFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRj
aGVyKQotICAgICwgbV9hZ2VudChhZ2VudCkKLXsKLSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5y
ZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oIkRvbWFpbiJfcywgdGhpcyk7Ci19Ci0KLXZvaWQg
RG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBT
dHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQotewotICAgIFJlZjxE
b21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7Ci0KLSAgICBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiBwYXJhbWV0ZXJzOwotICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9z
LCBwYXJhbWV0ZXJzKTsKLQotICAgIGlmIChtZXRob2QgPT0gIkNvbW1hbmQiKQotICAgICAgICBD
b21tYW5kKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7Ci0gICAgZWxzZQotICAgICAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRj
aGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uIiArIG1ldGhvZCArICInIHdhcyBub3QgZm91
bmQiKTsKLX0KLQotdm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJl
cXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKLXsKLSNpZiBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7
Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+Q29tbWFuZChyZXF1ZXN0SWQpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAg
ICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAg
IG1fYWdlbnQtPkNvbW1hbmQoZXJyb3IpOwotCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAg
ICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92
ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RG
TW92ZShlcnJvcikpOwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBG
aWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZy
b250ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNv
bW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQot
I2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVl
cy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVj
dG9yIHsKLQotY2xhc3MgRnJvbnRlbmRSb3V0ZXI7Ci0KLWNsYXNzIERvbWFpbkZyb250ZW5kRGlz
cGF0Y2hlciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgRG9t
YWluRnJvbnRlbmREaXNwYXRjaGVyKEZyb250ZW5kUm91dGVyJiBmcm9udGVuZFJvdXRlcikgOiBt
X2Zyb250ZW5kUm91dGVyKGZyb250ZW5kUm91dGVyKSB7IH0KLSAgICB2b2lkIEV2ZW50KCk7Ci1w
cml2YXRlOgotICAgIEZyb250ZW5kUm91dGVyJiBtX2Zyb250ZW5kUm91dGVyOwotfTsKLQotfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNo
ZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGlu
Zy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEZyb250
ZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZy
b250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKLQotdm9pZCBEb21haW5Gcm9udGVuZERpc3BhdGNoZXI6OkV2ZW50KCkK
LXsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2
ZW50Il9zKTsKLQotICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50
b0pTT05TdHJpbmcoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5k
IEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sT2JqZWN0cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29t
bWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0j
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1
ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotbmFt
ZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLQotCi0KLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3Rv
Y29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xPYmplY3RzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZC10YXJnZXRUeXBlLW1hdGNo
aW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0UHJv
dG9jb2xPYmplY3RzLmgiCi0KLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1uYW1lc3BhY2Ug
UHJvdG9jb2wgewotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLQot
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRv
bWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLUBwcm90
b2NvbCBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyOwotCi1uYW1lc3BhY2UgSW5zcGVj
dG9yIHsKLQotCi1jbGFzcyBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmlu
YWwgOiBwdWJsaWMgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIgewotICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIE9iakNJbnNwZWN0b3JEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiBoYW5kbGVy
KSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9Ci0gICAgdm9pZCBDb21tYW5kKGxvbmcgcmVxdWVz
dElkKSBmaW5hbDsKLXByaXZhdGU6Ci0gICAgUmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbERvbWFp
bkRvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLQot
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1k
b21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJh
Y2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIK
LSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbmNsdWRlIDx3dGYv
SlNPTlZhbHVlcy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdm9pZCBPYmpDSW5zcGVj
dG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9uZyByZXF1ZXN0SWQpCi17Ci0g
ICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKENvbW1hbmRX
aXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsKLSAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRj
aGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uQ29tbWFuZCcgd2FzIG5vdCBmb3VuZCJfcyk7
Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAq
ZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJv
cihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwotICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgIH07Ci0K
LSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigp
LT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7
Ci0gICAgfTsKLQotICAgIFttX2RlbGVnYXRlIENvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazplcnJv
ckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOwotfQotCi0KLX0gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmRE
aXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
bi5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZC10YXJnZXRUeXBl
LW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9j
b2wuaD4KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJm
YWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAotQHByb3BlcnR5IChub25h
dG9taWMsIHJldGFpbiwgc2V0dGVyPXNldERvbWFpbkhhbmRsZXI6KSBpZDxUZXN0UHJvdG9jb2xE
b21haW5Eb21haW5IYW5kbGVyPiBkb21haW5IYW5kbGVyOwotQHByb3BlcnR5IChub25hdG9taWMs
IHJlYWRvbmx5KSBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKmRvbWFp
bkV2ZW50RGlzcGF0Y2hlcjsKLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENv
bmZpZ3VyYXRpb24uaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
bi5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmQtdGFyZ2V0VHlw
ZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0
aW9uLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW1wb3J0ICJUZXN0
UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0Fs
dGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdt
ZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJ
bnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCi17
Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKLSAgICBp
ZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiBfZG9tYWluSGFuZGxlcjsKLSAgICBU
ZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKl9kb21haW5FdmVudERpc3Bh
dGNoZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRh
YmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIg
aW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChj
b250cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNl
bGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAgIFtfZG9tYWluSGFuZGxlciByZWxlYXNl
XTsKLSAgICBbX2RvbWFpbkV2ZW50RGlzcGF0Y2hlciByZWxlYXNlXTsKLSAgICBbc3VwZXIgZGVh
bGxvY107Ci19Ci0KLS0gKHZvaWQpc2V0RG9tYWluSGFuZGxlcjooaWQ8VGVzdFByb3RvY29sRG9t
YWluRG9tYWluSGFuZGxlcj4paGFuZGxlcgotewotICAgIGlmIChoYW5kbGVyID09IF9kb21haW5I
YW5kbGVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBbX2RvbWFpbkhhbmRsZXIgcmVsZWFzZV07
Ci0gICAgX2RvbWFpbkhhbmRsZXIgPSBbaGFuZGxlciByZXRhaW5dOwotCi0gICAgYXV0byBhbHRl
cm5hdGVEaXNwYXRjaGVyID0gbWFrZVVuaXF1ZTxPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERp
c3BhdGNoZXI+KGhhbmRsZXIpOwotICAgIGF1dG8gYWx0ZXJuYXRlQWdlbnQgPSBtYWtlVW5pcXVl
PEFsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50PERvbWFpbkJhY2tlbmREaXNwYXRjaGVyLCBBbHRl
cm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4+KCJEb21haW4iX3MsICpfY29udHJvbGxlciwg
V1RGTW92ZShhbHRlcm5hdGVEaXNwYXRjaGVyKSk7Ci0gICAgX2NvbnRyb2xsZXItPmFwcGVuZEV4
dHJhQWdlbnQoV1RGTW92ZShhbHRlcm5hdGVBZ2VudCkpOwotfQotCi0tIChpZDxUZXN0UHJvdG9j
b2xEb21haW5Eb21haW5IYW5kbGVyPilkb21haW5IYW5kbGVyCi17Ci0gICAgcmV0dXJuIF9kb21h
aW5IYW5kbGVyOwotfQotCi0tIChUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNo
ZXIgKilkb21haW5FdmVudERpc3BhdGNoZXIKLXsKLSAgICBpZiAoIV9kb21haW5FdmVudERpc3Bh
dGNoZXIpCi0gICAgICAgIF9kb21haW5FdmVudERpc3BhdGNoZXIgPSBbW1Rlc3RQcm90b2NvbERv
bWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciBhbGxvY10gaW5pdFdpdGhDb250cm9sbGVyOl9jb250
cm9sbGVyXTsKLSAgICByZXR1cm4gX2RvbWFpbkV2ZW50RGlzcGF0Y2hlcjsKLX0KLQotQGVuZAot
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVi
dWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVz
aW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xE
b21haW5Eb21haW5FdmVudERpc3BhdGNoZXIKLXsKLSAgICBBdWdtZW50YWJsZUluc3BlY3RvckNv
bnRyb2xsZXIqIF9jb250cm9sbGVyOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250
cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAg
ICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5p
bDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVy
OwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKUV2ZW50Ci17Ci0gICAgY29uc3QgRnJv
bnRlbmRSb3V0ZXImIHJvdXRlciA9IF9jb250cm9sbGVyLT5mcm9udGVuZFJvdXRlcigpOwotCi0g
ICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJf
cyk7Ci0gICAgcm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwot
fQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJz
Lm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdn
YWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2ltcG9ydCA8V2ViSW5zcGVj
dG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgotCi0KLQotCi10eXBlZGVmIE5TX0VOVU0oTlNJ
bnRlZ2VyLCBUZXN0UHJvdG9jb2xQbGF0Zm9ybSkgewotICAgIFRlc3RQcm90b2NvbFBsYXRmb3Jt
QWxsLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYywKLSAgICBUZXN0UHJvdG9jb2xQ
bGF0Zm9ybUlPUywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TLAotfTsKLQotCi0KLQot
Ci1AcHJvdG9jb2wgVGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlciA8TlNPYmplY3Q+Ci1A
b3B0aW9uYWwKLS0gKHZvaWQpQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3Ry
aW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikodm9pZCkp
c3VjY2Vzc0NhbGxiYWNrOwotQGVuZAotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVm
YXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRj
aGVyIDogTlNPYmplY3QKLS0gKHZvaWQpRXZlbnQ7Ci1AZW5kCi0KLQotI2ltcG9ydCA8V2ViSW5z
cGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgotCi0jIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRl
cm5hbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZC10YXJnZXRU
eXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2lt
cG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKLSNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8d3RmL0pT
T05WYWx1ZXMuaD4KLQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERp
c3BhdGNoZXIgKFByaXZhdGUpCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihJ
bnNwZWN0b3I6OkF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcjsKLUBl
bmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dh
YmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3Rv
Y29sQXJyYXlDb252ZXJzaW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdGVtcGxh
dGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgotT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJv
dG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90
b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xQbGF0Zm9ybSB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFs
dWUpIHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOgotICAgICAgICByZXR1cm4g
ImFsbCJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzoKLSAgICAgICAg
cmV0dXJuICJnZW5lcmljIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1JT1M6Ci0g
ICAgICAgIHJldHVybiAiaW9zIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNP
UzoKLSAgICAgICAgcmV0dXJuICJtYWNvcyJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlu
bGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xQbGF0Zm9ybT4gZnJvbVByb3RvY29sU3RyaW5nKGNv
bnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJhbGwiKQotICAgICAgICBy
ZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1BbGw7Ci0gICAgaWYgKHZhbHVlID09ICJnZW5lcmlj
IikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzsKLSAgICBpZiAo
dmFsdWUgPT0gImlvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzsK
LSAgICBpZiAodmFsdWUgPT0gIm1hY29zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBs
YXRmb3JtTWFjT1M7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
LmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGlu
Zy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIK
LQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFy
c2VyLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0
ZS5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLQotCi0KLQotIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbFR5cGVzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29t
bWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90
b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5o
IgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4K
LSNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgot
Ci11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmli
dXRlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNv
bi1yZXN1bHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjNWM0MWRiNTNhLi4wMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZ2VuZXJpYy9leHBlY3RlZC9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uLXJl
c3VsdAorKysgL2Rldi9udWxsCkBAIC0xLDE4MDkgKzAsMCBAQAotIyMjIEJlZ2luIEZpbGU6IElu
c3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotLy8gRGF0YWJhc2UKLUluc3BlY3RvckJhY2tlbmQu
cmVnaXN0ZXJEb21haW4oIkRhdGFiYXNlIiwgbnVsbCk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lz
dGVyRW51bSgiRGF0YWJhc2UuUHJpbWFyeUNvbG9ycyIsIHtSZWQ6ICJyZWQiLCBHcmVlbjogImdy
ZWVuIiwgQmx1ZTogImJsdWUifSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgi
RGF0YWJhc2UuZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyIsIG51bGwsIFt7Im5h
bWUiOiAiZGF0YWJhc2VJZCIsICJ0eXBlIjogIm51bWJlciJ9LCB7Im5hbWUiOiAicXVlcnkiLCAi
dHlwZSI6ICJzdHJpbmcifV0sIFsiY29sdW1uTmFtZXMiLCAibm90ZXMiLCAidGltZXN0YW1wIiwg
InZhbHVlcyIsICJwYXlsb2FkIiwgImRhdGFiYXNlSWQiLCAic3FsRXJyb3IiLCAic2NyZWVuQ29s
b3IiLCAiYWx0ZXJuYXRlQ29sb3JzIiwgInByaW50Q29sb3IiXSk7Ci1JbnNwZWN0b3JCYWNrZW5k
LnJlZ2lzdGVyQ29tbWFuZCgiRGF0YWJhc2UuZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXMiLCBudWxsLCBbeyJuYW1lIjogImRhdGFiYXNlSWQiLCAidHlwZSI6ICJudW1iZXIifSwg
eyJuYW1lIjogInF1ZXJ5IiwgInR5cGUiOiAic3RyaW5nIn1dLCBbImNvbHVtbk5hbWVzIiwgIm5v
dGVzIiwgInRpbWVzdGFtcCIsICJ2YWx1ZXMiLCAicGF5bG9hZCIsICJkYXRhYmFzZUlkIiwgInNx
bEVycm9yIiwgInNjcmVlbkNvbG9yIiwgImFsdGVybmF0ZUNvbG9ycyIsICJwcmludENvbG9yIl0p
OwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIkRhdGFiYXNlLmV4ZWN1dGVTUUxT
eW5jIiwgbnVsbCwgW3sibmFtZSI6ICJkYXRhYmFzZUlkIiwgInR5cGUiOiAibnVtYmVyIn0sIHsi
bmFtZSI6ICJxdWVyeSIsICJ0eXBlIjogInN0cmluZyJ9XSwgWyJjb2x1bW5OYW1lcyIsICJub3Rl
cyIsICJ0aW1lc3RhbXAiLCAidmFsdWVzIiwgInBheWxvYWQiLCAiZGF0YWJhc2VJZCIsICJzcWxF
cnJvciIsICJhbHRlcm5hdGVDb2xvcnMiLCAic2NyZWVuQ29sb3IiLCAicHJpbnRDb2xvciJdKTsK
LUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJEYXRhYmFzZS5leGVjdXRlU1FMQXN5
bmMiLCBudWxsLCBbeyJuYW1lIjogImRhdGFiYXNlSWQiLCAidHlwZSI6ICJudW1iZXIifSwgeyJu
YW1lIjogInF1ZXJ5IiwgInR5cGUiOiAic3RyaW5nIn1dLCBbImNvbHVtbk5hbWVzIiwgIm5vdGVz
IiwgInRpbWVzdGFtcCIsICJ2YWx1ZXMiLCAicGF5bG9hZCIsICJkYXRhYmFzZUlkIiwgInNxbEVy
cm9yIiwgInNjcmVlbkNvbG9yIiwgImFsdGVybmF0ZUNvbG9ycyIsICJwcmludENvbG9yIl0pOwot
SW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRhdGFiYXNlRGlzcGF0Y2hlciA9IEluc3BlY3RvckJh
Y2tlbmQucmVnaXN0ZXJEaXNwYXRjaGVyLmJpbmQoSW5zcGVjdG9yQmFja2VuZCwgIkRhdGFiYXNl
Iik7Ci1JbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJEYXRhYmFzZSIsIG51bGwpOwot
IyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNp
ZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQotI2luY2x1ZGUgIlRl
c3RQcm90b2NvbFR5cGVzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9u
dGVuZFJvdXRlci5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgQWx0ZXJuYXRl
QmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNo
ZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlz
cGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KLSAgICBCYWNrZW5kRGlzcGF0Y2hlciog
YmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdl
dCgpOyB9Ci1wcml2YXRlOgotICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5k
RGlzcGF0Y2hlcjsKLX07Ci0KLQotY2xhc3MgQWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAg
dmlydHVhbCB+QWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQotICAgIHZp
cnR1YWwgdm9pZCBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgY2FsbElk
LCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCBleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIGNhbGxJ
ZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTFN5bmMobG9uZyBjYWxsSWQsIGludCBpbl9kYXRhYmFzZUlk
LCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVT
UUxBc3luYyhsb25nIGNhbGxJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5f
cXVlcnkpID0gMDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jZW5kaWYgLy8g
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jIyMgRW5kIEZpbGU6IFRl
c3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJh
Y2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29t
bWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bE9iamVjdHMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKLQotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KLSNpZiBFTkFCTEUo
SU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLWNsYXNzIEFsdGVybmF0ZURhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXI7Ci0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCi0KLWNsYXNzIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsK
LXB1YmxpYzoKLSAgICAvLyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIgJ3ByaW50Q29sb3InIHdoaWxl
IGdlbmVyYXRpbmcgY29tbWFuZC9ldmVudCBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFs
dWVzLgotICAgIGVudW0gY2xhc3MgUHJpbnRDb2xvciB7Ci0gICAgICAgIEN5YW4gPSAzLAotICAg
ICAgICBNYWdlbnRhID0gNCwKLSAgICAgICAgWWVsbG93ID0gNSwKLSAgICAgICAgQmxhY2sgPSA2
LAotICAgIH07IC8vIGVudW0gY2xhc3MgUHJpbnRDb2xvcgotICAgIHZpcnR1YWwgdm9pZCBleGVj
dXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKEVycm9yU3RyaW5nJiwgaW50IGluX2RhdGFi
YXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnksIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmlu
Zz4+JiBvcHRfb3V0X2NvbHVtbk5hbWVzLCBPcHRpb25hbDxTdHJpbmc+JiBvcHRfb3V0X25vdGVz
LCBPcHRpb25hbDxkb3VibGU+JiBvcHRfb3V0X3RpbWVzdGFtcCwgT3B0aW9uYWw8SlNPTjo6T2Jq
ZWN0PiYgb3B0X291dF92YWx1ZXMsIE9wdGlvbmFsPEpTT046OlZhbHVlPiYgb3B0X291dF9wYXls
b2FkLCBPcHRpb25hbDxpbnQ+JiBvcHRfb3V0X2RhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiBvcHRfb3V0X3NxbEVycm9yLCBJbnNwZWN0b3I6
OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyogb3B0X291dF9zY3JlZW5Db2xvciwg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiBvcHRfb3V0
X2FsdGVybmF0ZUNvbG9ycywgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50
Q29sb3IqIG9wdF9vdXRfcHJpbnRDb2xvcikgPSAwOwotICAgIGNsYXNzIEV4ZWN1dGVTUUxBc3lu
Y09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2sgOiBwdWJsaWMgQmFja2VuZERpc3BhdGNoZXI6
OkNhbGxiYWNrQmFzZSB7Ci0gICAgcHVibGljOgotICAgICAgICBFeGVjdXRlU1FMQXN5bmNPcHRp
b25hbFJldHVyblZhbHVlc0NhbGxiYWNrKFJlZjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiwgaW50IGlk
KTsKLSAgICAgICAgdm9pZCBzZW5kU3VjY2VzcyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+
PiYmIGNvbHVtbk5hbWVzLCBPcHRpb25hbDxTdHJpbmc+JiBub3RlcywgT3B0aW9uYWw8ZG91Ymxl
PiYgdGltZXN0YW1wLCBPcHRpb25hbDxKU09OOjpPYmplY3Q+JiB2YWx1ZXMsIE9wdGlvbmFsPEpT
T046OlZhbHVlPiYgcGF5bG9hZCwgT3B0aW9uYWw8aW50PiYgZGF0YWJhc2VJZCwgUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mJiBzcWxFcnJvciwgT3B0aW9uYWw8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IHNjcmVlbkNvbG9y
LCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4mJiBhbHRl
cm5hdGVDb2xvcnMsIE9wdGlvbmFsPERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQ
cmludENvbG9yPiBwcmludENvbG9yKTsKLSAgICB9OwotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRl
U1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3Ry
aW5nJiBpbl9xdWVyeSwgUmVmPEV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2Fs
bGJhY2s+JiYgY2FsbGJhY2spID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTFN5bmMo
RXJyb3JTdHJpbmcmLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSwg
UmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mIG91dF9jb2x1bW5OYW1lcywgU3RyaW5nKiBv
dXRfbm90ZXMsIGRvdWJsZSogb3V0X3RpbWVzdGFtcCwgSlNPTjo6T2JqZWN0KiBvdXRfdmFsdWVz
LCBKU09OOjpWYWx1ZSogb3V0X3BheWxvYWQsIGludCogb3V0X2RhdGFiYXNlSWQsIFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiBvdXRfc3FsRXJyb3IsIFJlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYgb3V0X2FsdGVybmF0
ZUNvbG9ycywgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMqIG91
dF9zY3JlZW5Db2xvciwgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29s
b3IqIG91dF9wcmludENvbG9yKSA9IDA7Ci0gICAgY2xhc3MgRXhlY3V0ZVNRTEFzeW5jQ2FsbGJh
Y2sgOiBwdWJsaWMgQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZSB7Ci0gICAgcHVibGlj
OgotICAgICAgICBFeGVjdXRlU1FMQXN5bmNDYWxsYmFjayhSZWY8QmFja2VuZERpc3BhdGNoZXI+
JiYsIGludCBpZCk7Ci0gICAgICAgIHZvaWQgc2VuZFN1Y2Nlc3MoUmVmUHRyPEpTT046OkFycmF5
T2Y8U3RyaW5nPj4mJiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBub3RlcywgZG91YmxlIHRp
bWVzdGFtcCwgSlNPTjo6T2JqZWN0IHZhbHVlcywgSlNPTjo6VmFsdWUgcGF5bG9hZCwgaW50IGRh
dGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiYg
c3FsRXJyb3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzIHNj
cmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlz
dD4mJiBhbHRlcm5hdGVDb2xvcnMsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQ
cmludENvbG9yIHByaW50Q29sb3IpOwotICAgIH07Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVT
UUxBc3luYyhpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSwgUmVmPEV4
ZWN1dGVTUUxBc3luY0NhbGxiYWNrPiYmIGNhbGxiYWNrKSA9IDA7Ci1wcm90ZWN0ZWQ6Ci0gICAg
dmlydHVhbCB+RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKLX07Ci0KLWNsYXNz
IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFj
a2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8RGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXIqKTsKLSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25z
dCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5hbDsKLXBy
aXZhdGU6Ci0gICAgdm9pZCBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcg
cmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwotICAgIHZvaWQg
ZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0SWQsIFJlZlB0
cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0gICAgdm9pZCBleGVjdXRlU1FMU3luYyhs
b25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKLSAgICB2
b2lkIGV4ZWN1dGVTUUxBc3luYyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4m
JiBwYXJhbWV0ZXJzKTsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKLXB1YmxpYzoKLSAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVybmF0
ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9Ci1wcml2YXRlOgotICAgIEFsdGVy
bmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIqIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciB7IG51
bGxwdHIgfTsKLSNlbmRpZgotcHJpdmF0ZToKLSAgICBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
KEJhY2tlbmREaXNwYXRjaGVyJiwgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsK
LSAgICBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2VudCB7IG51bGxwdHIg
fTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0QmFj
a2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hl
cnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1h
c3luYy1hdHRyaWJ1dGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0
ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRl
c3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2lmIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQot
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5EYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVySGFuZGxlcigpIHsgfQotCi1SZWY8RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4gRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlz
cGF0Y2hlciwgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQotewotICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERp
c3BhdGNoZXIsIGFnZW50KSk7Ci19Ci0KLURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OkRhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVy
LCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCi0gICAgOiBTdXBwbGVt
ZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKLSAgICAsIG1fYWdlbnQo
YWdlbnQpCi17Ci0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9y
RG9tYWluKCJEYXRhYmFzZSJfcywgdGhpcyk7Ci19Ci0KLXZvaWQgRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBS
ZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCi17Ci0gICAgUmVmPERhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwotCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFy
YW1ldGVyczsKLSAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFyYW1ldGVycyk7
Ci0KLSAgICBpZiAobWV0aG9kID09ICJleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVz
IikKLSAgICAgICAgZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhyZXF1ZXN0SWQs
IFdURk1vdmUocGFyYW1ldGVycykpOwotICAgIGVsc2UgaWYgKG1ldGhvZCA9PSAiZXhlY3V0ZVNR
TEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMiKQotICAgICAgICBleGVjdXRlU1FMQXN5bmNPcHRp
b25hbFJldHVyblZhbHVlcyhyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOwotICAgIGVs
c2UgaWYgKG1ldGhvZCA9PSAiZXhlY3V0ZVNRTFN5bmMiKQotICAgICAgICBleGVjdXRlU1FMU3lu
YyhyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOwotICAgIGVsc2UgaWYgKG1ldGhvZCA9
PSAiZXhlY3V0ZVNRTEFzeW5jIikKLSAgICAgICAgZXhlY3V0ZVNRTEFzeW5jKHJlcXVlc3RJZCwg
V1RGTW92ZShwYXJhbWV0ZXJzKSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3Vu
ZCwgIidEYXRhYmFzZS4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOwotfQotCi12b2lk
IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycykK
LXsKLSAgICBpbnQgaW5fZGF0YWJhc2VJZCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEludGVn
ZXIocGFyYW1ldGVycy5nZXQoKSwgImRhdGFiYXNlSWQiX3MsIG51bGxwdHIpOwotICAgIFN0cmlu
ZyBpbl9xdWVyeSA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwYXJhbWV0ZXJzLmdl
dCgpLCAicXVlcnkiX3MsIG51bGxwdHIpOwotICAgIGlmIChtX2JhY2tlbmREaXNwYXRjaGVyLT5o
YXNQcm90b2NvbEVycm9ycygpKSB7Ci0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9y
dFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsICJTb21lIGFy
Z3VtZW50cyBvZiBtZXRob2QgJ0RhdGFiYXNlLmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXMnIGNhbid0IGJlIHByb2Nlc3NlZCJfcyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSAgICBpZiAobV9h
bHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhl
Y3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhyZXF1ZXN0SWQsIGluX2RhdGFiYXNlSWQs
IGluX3F1ZXJ5KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAgRXJyb3JT
dHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiBvdXRfY29sdW1u
TmFtZXM7Ci0gICAgT3B0aW9uYWw8U3RyaW5nPiBvdXRfbm90ZXM7Ci0gICAgT3B0aW9uYWw8ZG91
YmxlPiBvdXRfdGltZXN0YW1wOwotICAgIE9wdGlvbmFsPEpTT046Ok9iamVjdD4gb3V0X3ZhbHVl
czsKLSAgICBPcHRpb25hbDxKU09OOjpWYWx1ZT4gb3V0X3BheWxvYWQ7Ci0gICAgT3B0aW9uYWw8
aW50PiBvdXRfZGF0YWJhc2VJZDsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0
YWJhc2U6OkVycm9yPiBvdXRfc3FsRXJyb3I7Ci0gICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0
YWJhc2U6OlByaW1hcnlDb2xvcnMgb3V0X3NjcmVlbkNvbG9yOwotICAgIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiBvdXRfYWx0ZXJuYXRlQ29sb3JzOwot
ICAgIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yIG91dF9wcmlu
dENvbG9yOwotICAgIG1fYWdlbnQtPmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMo
ZXJyb3IsIGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5LCBvdXRfY29sdW1uTmFtZXMsIG91dF9ub3Rl
cywgb3V0X3RpbWVzdGFtcCwgb3V0X3ZhbHVlcywgb3V0X3BheWxvYWQsIG91dF9kYXRhYmFzZUlk
LCBvdXRfc3FsRXJyb3IsIG91dF9zY3JlZW5Db2xvciwgb3V0X2FsdGVybmF0ZUNvbG9ycywgb3V0
X3ByaW50Q29sb3IpOwotCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkgewotICAgICAgICBpZiAo
b3V0X2NvbHVtbk5hbWVzKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRBcnJheSgiY29sdW1uTmFt
ZXMiX3MsIG91dF9jb2x1bW5OYW1lcyk7Ci0gICAgICAgIGlmIChvdXRfbm90ZXMuaGFzVmFsdWUo
KSkKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJub3RlcyJfcywgKm91dF9ub3Rlcyk7
Ci0gICAgICAgIGlmIChvdXRfdGltZXN0YW1wLmhhc1ZhbHVlKCkpCi0gICAgICAgICAgICByZXN1
bHQtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCAqb3V0X3RpbWVzdGFtcCk7Ci0gICAgICAgIGlm
IChvdXRfdmFsdWVzLmhhc1ZhbHVlKCkpCi0gICAgICAgICAgICByZXN1bHQtPnNldE9iamVjdCgi
dmFsdWVzIl9zLCAqb3V0X3ZhbHVlcyk7Ci0gICAgICAgIGlmIChvdXRfcGF5bG9hZC5oYXNWYWx1
ZSgpKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgKm91dF9wYXls
b2FkKTsKLSAgICAgICAgaWYgKG91dF9kYXRhYmFzZUlkLmhhc1ZhbHVlKCkpCi0gICAgICAgICAg
ICByZXN1bHQtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsICpvdXRfZGF0YWJhc2VJZCk7Ci0g
ICAgICAgIGlmIChvdXRfc3FsRXJyb3IpCi0gICAgICAgICAgICByZXN1bHQtPnNldE9iamVjdCgi
c3FsRXJyb3IiX3MsIG91dF9zcWxFcnJvcik7Ci0gICAgICAgIGlmIChvdXRfc2NyZWVuQ29sb3Iu
aGFzVmFsdWUoKSkKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJf
cywgKm91dF9zY3JlZW5Db2xvcik7Ci0gICAgICAgIGlmIChvdXRfYWx0ZXJuYXRlQ29sb3JzKQot
ICAgICAgICAgICAgcmVzdWx0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCBvdXRfYWx0
ZXJuYXRlQ29sb3JzKTsKLSAgICAgICAgaWYgKG91dF9wcmludENvbG9yLmhhc1ZhbHVlKCkpCi0g
ICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgKm91dF9wcmludENv
bG9yKTsKLSAgICB9Ci0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxz
ZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2Nv
bEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOwot
fQotCi1EYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jT3B0
aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjazo6RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXNDYWxsYmFjayhSZWY8QmFja2VuZERpc3BhdGNoZXI+JiYgYmFja2VuZERpc3BhdGNoZXIs
IGludCBpZCkgOiBCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlKFdURk1vdmUoYmFja2Vu
ZERpc3BhdGNoZXIpLCBpZCkgeyB9Ci0KLXZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXI6OkV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2s6OnNlbmRT
dWNjZXNzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiYgY29sdW1uTmFtZXMsIE9wdGlv
bmFsPFN0cmluZz4mIG5vdGVzLCBPcHRpb25hbDxkb3VibGU+JiB0aW1lc3RhbXAsIE9wdGlvbmFs
PEpTT046Ok9iamVjdD4mIHZhbHVlcywgT3B0aW9uYWw8SlNPTjo6VmFsdWU+JiBwYXlsb2FkLCBP
cHRpb25hbDxpbnQ+JiBkYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0
YWJhc2U6OkVycm9yPiYmIHNxbEVycm9yLCBPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpE
YXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYmIGFsdGVybmF0ZUNvbG9ycywgT3B0aW9uYWw8
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3I+IHByaW50Q29sb3Ip
Ci17Ci0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOwotICAgIGlmIChjb2x1bW5OYW1lcykKLSAgICAgICAganNvbk1lc3NhZ2UtPnNldEFy
cmF5KCJjb2x1bW5OYW1lcyJfcywgY29sdW1uTmFtZXMpOwotICAgIGlmIChub3Rlcy5oYXNWYWx1
ZSgpKQotICAgICAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJub3RlcyJfcywgKm5vdGVzKTsK
LSAgICBpZiAodGltZXN0YW1wLmhhc1ZhbHVlKCkpCi0gICAgICAgIGpzb25NZXNzYWdlLT5zZXRE
b3VibGUoInRpbWVzdGFtcCJfcywgKnRpbWVzdGFtcCk7Ci0gICAgaWYgKHZhbHVlcy5oYXNWYWx1
ZSgpKQotICAgICAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsICp2YWx1ZXMp
OwotICAgIGlmIChwYXlsb2FkLmhhc1ZhbHVlKCkpCi0gICAgICAgIGpzb25NZXNzYWdlLT5zZXRW
YWx1ZSgicGF5bG9hZCJfcywgKnBheWxvYWQpOwotICAgIGlmIChkYXRhYmFzZUlkLmhhc1ZhbHVl
KCkpCi0gICAgICAgIGpzb25NZXNzYWdlLT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCAqZGF0
YWJhc2VJZCk7Ci0gICAgaWYgKHNxbEVycm9yKQotICAgICAgICBqc29uTWVzc2FnZS0+c2V0T2Jq
ZWN0KCJzcWxFcnJvciJfcywgc3FsRXJyb3IpOwotICAgIGlmIChzY3JlZW5Db2xvci5oYXNWYWx1
ZSgpKQotICAgICAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgKnNj
cmVlbkNvbG9yKTsKLSAgICBpZiAoYWx0ZXJuYXRlQ29sb3JzKQotICAgICAgICBqc29uTWVzc2Fn
ZS0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgYWx0ZXJuYXRlQ29sb3JzKTsKLSAgICBp
ZiAocHJpbnRDb2xvci5oYXNWYWx1ZSgpKQotICAgICAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5n
KCJwcmludENvbG9yIl9zLCAqcHJpbnRDb2xvcik7Ci0gICAgQ2FsbGJhY2tCYXNlOjpzZW5kU3Vj
Y2VzcyhXVEZNb3ZlKGpzb25NZXNzYWdlKSk7Ci19Ci0KLXZvaWQgRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlcjo6ZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0
SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycykKLXsKLSAgICBpbnQgaW5fZGF0
YWJhc2VJZCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEludGVnZXIocGFyYW1ldGVycy5nZXQo
KSwgImRhdGFiYXNlSWQiX3MsIG51bGxwdHIpOwotICAgIFN0cmluZyBpbl9xdWVyeSA9IG1fYmFj
a2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwYXJhbWV0ZXJzLmdldCgpLCAicXVlcnkiX3MsIG51
bGxwdHIpOwotICAgIGlmIChtX2JhY2tlbmREaXNwYXRjaGVyLT5oYXNQcm90b2NvbEVycm9ycygp
KSB7Ci0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFj
a2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsICJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2Qg
J0RhdGFiYXNlLmV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzJyBjYW4ndCBiZSBw
cm9jZXNzZWQiX3MpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0jaWYgRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0gICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hl
cikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVTUUxBc3luY09wdGlv
bmFsUmV0dXJuVmFsdWVzKHJlcXVlc3RJZCwgaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnkpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBSZWY8RGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJh
Y2s+IGNhbGxiYWNrID0gYWRvcHRSZWYoKm5ldyBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlcjo6RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjayhtX2JhY2tl
bmREaXNwYXRjaGVyLmNvcHlSZWYoKSwgcmVxdWVzdElkKSk7Ci0gICAgbV9hZ2VudC0+ZXhlY3V0
ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMoaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnksIGNh
bGxiYWNrLmNvcHlSZWYoKSk7Ci0KLX0KLQotdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
OjpleGVjdXRlU1FMU3luYyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBw
YXJhbWV0ZXJzKQotewotICAgIGludCBpbl9kYXRhYmFzZUlkID0gbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+Z2V0SW50ZWdlcihwYXJhbWV0ZXJzLmdldCgpLCAiZGF0YWJhc2VJZCJfcywgbnVsbHB0cik7
Ci0gICAgU3RyaW5nIGluX3F1ZXJ5ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBh
cmFtZXRlcnMuZ2V0KCksICJxdWVyeSJfcywgbnVsbHB0cik7Ci0gICAgaWYgKG1fYmFja2VuZERp
c3BhdGNoZXItPmhhc1Byb3RvY29sRXJyb3JzKCkpIHsKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFt
cywgIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnRGF0YWJhc2UuZXhlY3V0ZVNRTFN5bmMnIGNh
bid0IGJlIHByb2Nlc3NlZCJfcyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSNpZiBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSAgICBpZiAobV9hbHRlcm5hdGVE
aXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZVNRTFN5
bmMocmVxdWVzdElkLCBpbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0jZW5kaWYKLQotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpP
YmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgUmVmUHRyPEpTT046
OkFycmF5T2Y8U3RyaW5nPj4gb3V0X2NvbHVtbk5hbWVzOwotICAgIFN0cmluZyBvdXRfbm90ZXM7
Ci0gICAgZG91YmxlIG91dF90aW1lc3RhbXA7Ci0gICAgSlNPTjo6T2JqZWN0IG91dF92YWx1ZXM7
Ci0gICAgSlNPTjo6VmFsdWUgb3V0X3BheWxvYWQ7Ci0gICAgaW50IG91dF9kYXRhYmFzZUlkOwot
ICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IG91dF9zcWxF
cnJvcjsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlz
dD4gb3V0X2FsdGVybmF0ZUNvbG9yczsKLSAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFz
ZTo6UHJpbWFyeUNvbG9ycyBvdXRfc2NyZWVuQ29sb3I7Ci0gICAgRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3Igb3V0X3ByaW50Q29sb3I7Ci0gICAgbV9hZ2VudC0+
ZXhlY3V0ZVNRTFN5bmMoZXJyb3IsIGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5LCBvdXRfY29sdW1u
TmFtZXMsICZvdXRfbm90ZXMsICZvdXRfdGltZXN0YW1wLCBvdXRfdmFsdWVzLCAmb3V0X3BheWxv
YWQsICZvdXRfZGF0YWJhc2VJZCwgb3V0X3NxbEVycm9yLCBvdXRfYWx0ZXJuYXRlQ29sb3JzLCAm
b3V0X3NjcmVlbkNvbG9yLCAmb3V0X3ByaW50Q29sb3IpOwotCi0gICAgaWYgKCFlcnJvci5sZW5n
dGgoKSkgewotICAgICAgICByZXN1bHQtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgb3V0X2Nv
bHVtbk5hbWVzKTsKLSAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBvdXRfbm90
ZXMpOwotICAgICAgICByZXN1bHQtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCBvdXRfdGltZXN0
YW1wKTsKLSAgICAgICAgcmVzdWx0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgb3V0X3ZhbHVlcyk7
Ci0gICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIG91dF9wYXlsb2FkKTsKLSAg
ICAgICAgcmVzdWx0LT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCBvdXRfZGF0YWJhc2VJZCk7
Ci0gICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgb3V0X3NxbEVycm9yKTsK
LSAgICAgICAgcmVzdWx0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCBvdXRfYWx0ZXJu
YXRlQ29sb3JzKTsKLSAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUob3V0
X3NjcmVlbkNvbG9yKSk7Ci0gICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9z
LCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUo
b3V0X3ByaW50Q29sb3IpKTsKLSAgICB9Ci0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShy
ZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5y
ZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92
ZShlcnJvcikpOwotfQotCi1EYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0
ZVNRTEFzeW5jQ2FsbGJhY2s6OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrKFJlZjxCYWNrZW5kRGlz
cGF0Y2hlcj4mJiBiYWNrZW5kRGlzcGF0Y2hlciwgaW50IGlkKSA6IEJhY2tlbmREaXNwYXRjaGVy
OjpDYWxsYmFja0Jhc2UoV1RGTW92ZShiYWNrZW5kRGlzcGF0Y2hlciksIGlkKSB7IH0KLQotdm9p
ZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJh
Y2s6OnNlbmRTdWNjZXNzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiYgY29sdW1uTmFt
ZXMsIGNvbnN0IFN0cmluZyYgbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIEpTT046Ok9iamVjdCB2
YWx1ZXMsIEpTT046OlZhbHVlIHBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYmIHNxbEVycm9yLCBJbnNwZWN0b3I6OlBy
b3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyBzY3JlZW5Db2xvciwgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiYgYWx0ZXJuYXRlQ29sb3JzLCBE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciBwcmludENvbG9yKQot
ewotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBjb2x1bW5O
YW1lcyk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibm90ZXMiX3MsIG5vdGVzKTsKLSAg
ICBqc29uTWVzc2FnZS0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIHRpbWVzdGFtcCk7Ci0gICAg
anNvbk1lc3NhZ2UtPnNldE9iamVjdCgidmFsdWVzIl9zLCB2YWx1ZXMpOwotICAgIGpzb25NZXNz
YWdlLT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgcGF5bG9hZCk7Ci0gICAganNvbk1lc3NhZ2UtPnNl
dEludGVnZXIoImRhdGFiYXNlSWQiX3MsIGRhdGFiYXNlSWQpOwotICAgIGpzb25NZXNzYWdlLT5z
ZXRPYmplY3QoInNxbEVycm9yIl9zLCBzcWxFcnJvcik7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0
cmluZygic2NyZWVuQ29sb3IiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpn
ZXRFbnVtQ29uc3RhbnRWYWx1ZShzY3JlZW5Db2xvcikpOwotICAgIGpzb25NZXNzYWdlLT5zZXRB
cnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCBhbHRlcm5hdGVDb2xvcnMpOwotICAgIGpzb25NZXNz
YWdlLT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RI
ZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShwcmludENvbG9yKSk7Ci0gICAgQ2FsbGJhY2tC
YXNlOjpzZW5kU3VjY2VzcyhXVEZNb3ZlKGpzb25NZXNzYWdlKSk7Ci19Ci0KLXZvaWQgRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTEFzeW5jKGxvbmcgcmVxdWVzdElkLCBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpCi17Ci0gICAgaW50IGluX2RhdGFiYXNlSWQg
PSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRJbnRlZ2VyKHBhcmFtZXRlcnMuZ2V0KCksICJkYXRh
YmFzZUlkIl9zLCBudWxscHRyKTsKLSAgICBTdHJpbmcgaW5fcXVlcnkgPSBtX2JhY2tlbmREaXNw
YXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgInF1ZXJ5Il9zLCBudWxscHRyKTsK
LSAgICBpZiAobV9iYWNrZW5kRGlzcGF0Y2hlci0+aGFzUHJvdG9jb2xFcnJvcnMoKSkgewotICAg
ICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNw
YXRjaGVyOjpJbnZhbGlkUGFyYW1zLCAiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICdEYXRhYmFz
ZS5leGVjdXRlU1FMQXN5bmMnIGNhbid0IGJlIHByb2Nlc3NlZCJfcyk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
LSAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlz
cGF0Y2hlci0+ZXhlY3V0ZVNRTEFzeW5jKHJlcXVlc3RJZCwgaW5fZGF0YWJhc2VJZCwgaW5fcXVl
cnkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBSZWY8RGF0YWJhc2VC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrPiBjYWxsYmFj
ayA9IGFkb3B0UmVmKCpuZXcgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1
dGVTUUxBc3luY0NhbGxiYWNrKG1fYmFja2VuZERpc3BhdGNoZXIuY29weVJlZigpLCByZXF1ZXN0
SWQpKTsKLSAgICBtX2FnZW50LT5leGVjdXRlU1FMQXN5bmMoaW5fZGF0YWJhc2VJZCwgaW5fcXVl
cnksIGNhbGxiYWNrLmNvcHlSZWYoKSk7Ci0KLX0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVk
ZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Igewot
Ci1jbGFzcyBGcm9udGVuZFJvdXRlcjsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMg
RW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRl
c3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
LQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0j
IyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0
aW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLW5hbWVzcGFjZSBQcm90b2Nv
bCB7Ci0KLQotCi0vLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KLW5hbWVzcGFjZSBEYXRhYmFzZSB7
Ci1jbGFzcyBFcnJvcjsKLWVudW0gY2xhc3MgUHJpbWFyeUNvbG9yczsKLX0gLy8gRGF0YWJhc2UK
LS8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KLQotCi0vLyBUeXBlZGVmcy4KLW5hbWVz
cGFjZSBEYXRhYmFzZSB7Ci0vKiBVbmlxdWUgaWRlbnRpZmllciBvZiBEYXRhYmFzZSBvYmplY3Qu
ICovCi10eXBlZGVmIGludCBEYXRhYmFzZUlkOwotdHlwZWRlZiBKU09OOjpBcnJheU9mPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiBDb2xvckxpc3Q7Ci19IC8v
IERhdGFiYXNlCi0vLyBFbmQgb2YgdHlwZWRlZnMuCi0KLW5hbWVzcGFjZSBUZXN0SGVscGVycyB7
Ci0KLVN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSk7Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+IFN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkKLXsKLSAg
ICByZXR1cm4gZ2V0RW51bUNvbnN0YW50VmFsdWUoc3RhdGljX2Nhc3Q8aW50PihlbnVtVmFsdWUp
KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKLQotbmFtZXNwYWNlIERhdGFiYXNl
IHsKLS8qICAqLwotZW51bSBjbGFzcyBQcmltYXJ5Q29sb3JzIHsKLSAgICBSZWQgPSAwLAotICAg
IEdyZWVuID0gMSwKLSAgICBCbHVlID0gMiwKLX07IC8vIGVudW0gY2xhc3MgUHJpbWFyeUNvbG9y
cwotLyogRGF0YWJhc2UgZXJyb3IuICovCi1jbGFzcyBFcnJvciA6IHB1YmxpYyBKU09OOjpPYmpl
Y3RCYXNlIHsKLXB1YmxpYzoKLSAgICBlbnVtIHsKLSAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAot
ICAgICAgICBNZXNzYWdlU2V0ID0gMSA8PCAwLAotICAgICAgICBDb2RlU2V0ID0gMSA8PCAxLAot
ICAgICAgICBBbGxGaWVsZHNTZXQgPSAoTWVzc2FnZVNldCB8IENvZGVTZXQpCi0gICAgfTsKLQot
ICAgIHRlbXBsYXRlPGludCBTVEFURT4KLSAgICBjbGFzcyBCdWlsZGVyIHsKLSAgICBwcml2YXRl
OgotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBtX3Jlc3VsdDsKLQotICAgICAgICB0ZW1w
bGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8
IFNURVA+Kj4odGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyKFJlZjwvKkVycm9y
Ki9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQotICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3Zl
KG9iamVjdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09
IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwotICAgICAg
ICB9Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBFcnJvcjsKLSAgICBwdWJsaWM6Ci0KLSAgICAgICAg
QnVpbGRlcjxTVEFURSB8IE1lc3NhZ2VTZXQ+JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYgdmFs
dWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNZXNz
YWdlU2V0KSwgcHJvcGVydHlfbWVzc2FnZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0U3RyaW5nKCJtZXNzYWdlIl9zLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPE1lc3NhZ2VTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgQ29kZVNldD4mIHNldENvZGUoaW50IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29kZVNldCksIHByb3BlcnR5X2NvZGVfYWxyZWFk
eV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldEludGVnZXIoImNvZGUiX3MsIHZhbHVl
KTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29kZVNldD4oKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIFJlZjxFcnJvcj4gcmVsZWFzZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7
Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoRXJyb3IpID09IHNpemVvZihKU09O
OjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7Ci0KLSAgICAgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+
IGpzb25SZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOwotICAgICAgICAgICAgYXV0
byByZXN1bHQgPSBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxFcnJvcj4qPigmanNvblJl
c3VsdCkpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgIH07Ci0K
LSAgICAvKgotICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKLSAgICAgKiBSZWY8RXJyb3I+
IHJlc3VsdCA9IEVycm9yOjpjcmVhdGUoKQotICAgICAqICAgICAuc2V0TWVzc2FnZSguLi4pCi0g
ICAgICogICAgIC5zZXRDb2RlKC4uLikKLSAgICAgKiAgICAgLnJlbGVhc2UoKTsKLSAgICAgKi8K
LSAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKLSAg
ICB9Ci19OwotCi19IC8vIERhdGFiYXNlCi0KLQotCi1uYW1lc3BhY2UgVGVzdEhlbHBlcnMgewot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBQcm90b2NvbEVudW1UeXBlPgotT3B0aW9uYWw8UHJvdG9jb2xF
bnVtVHlwZT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYpOwotCi0vLyBF
bnVtcyBpbiB0aGUgJ0RhdGFiYXNlJyBEb21haW4KLXRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiBwYXJzZUVudW1WYWx1ZUZy
b21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+KGNv
bnN0IFN0cmluZyYpOwotCi19IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwotCi19IC8vIG5hbWVz
cGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotbmFtZXNwYWNlIFdU
RiB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKLQotLy8gSGFz
aCBkZWNsYXJhdGlvbnMgaW4gdGhlICdEYXRhYmFzZScgRG9tYWluCi10ZW1wbGF0ZTw+Ci1zdHJ1
Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xv
cnM+IHsKLSAgICB0eXBlZGVmIEludEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6
OlByaW1hcnlDb2xvcnM+IEhhc2g7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXVEYKLSMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xPYmplY3RzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRz
LXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bE9iamVjdHMuaCIKLQotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLW5hbWVzcGFjZSBQcm90
b2NvbCB7Ci0KLW5hbWVzcGFjZSBUZXN0SGVscGVycyB7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBj
b25zdCBlbnVtX2NvbnN0YW50X3ZhbHVlc1tdID0gewotICAgICJyZWQiLAotICAgICJncmVlbiIs
Ci0gICAgImJsdWUiLAotICAgICJjeWFuIiwKLSAgICAibWFnZW50YSIsCi0gICAgInllbGxvdyIs
Ci0gICAgImJsYWNrIiwKLX07Ci0KLVN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29k
ZSkgewotICAgIHJldHVybiBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb2RlXTsKLX0KLQotLy8gRW51
bXMgaW4gdGhlICdEYXRhYmFzZScgRG9tYWluCi10ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gcGFyc2VFbnVtVmFsdWVGcm9t
U3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPihjb25z
dCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQotewotICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29u
c3RhbnRWYWx1ZXNbXSA9IHsKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpE
YXRhYmFzZTo6UHJpbWFyeUNvbG9yczo6UmVkLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzOjpHcmVlbiwKLSAgICAgICAgKHNpemVf
dClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9yczo6Qmx1ZSwKLSAg
ICB9OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMzsgKytpKQotICAgICAgICBpZiAocHJv
dG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNbaV1dKQot
ICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFy
eUNvbG9ycyljb25zdGFudFZhbHVlc1tpXTsKLQotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19
Ci0KLQotfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKLQotCi0KLX0gLy8gbmFtZXNwYWNlIFBy
b3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbE9iamVjdHMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5k
RGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRz
LXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQotQHBy
b3RvY29sIFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcjsKLQotbmFtZXNwYWNlIElu
c3BlY3RvciB7Ci0KLQotY2xhc3MgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciB7Ci0g
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgT2JqQ0luc3BlY3RvckRh
dGFiYXNlQmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5k
bGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9Ci0gICAgdm9pZCBleGVjdXRl
U1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVzdElkLCBpbnQgaW5fZGF0YWJh
c2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkgZmluYWw7Ci0gICAgdm9pZCBleGVjdXRlU1FM
QXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHJlcXVlc3RJZCwgaW50IGluX2RhdGFiYXNl
SWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpIGZpbmFsOwotICAgIHZvaWQgZXhlY3V0ZVNRTFN5
bmMobG9uZyByZXF1ZXN0SWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1
ZXJ5KSBmaW5hbDsKLSAgICB2b2lkIGV4ZWN1dGVTUUxBc3luYyhsb25nIHJlcXVlc3RJZCwgaW50
IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpIGZpbmFsOwotcHJpdmF0ZToK
LSAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyPj4gbV9k
ZWxlZ2F0ZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9y
dCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlICJUZXN0UHJv
dG9jb2xJbnRlcm5hbC5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5o
IgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Igewot
Ci12b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FM
U3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVzdElkLCBpbnQgaW5fZGF0YWJhc2VJ
ZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkKLXsKLSAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3Bv
bmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVl
c1dpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazpkYXRhYmFzZUlkOnF1ZXJ5OildKSB7
Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVz
dElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRGF0YWJhc2UuZXhlY3V0
ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcycgd2FzIG5vdCBmb3VuZCJfcyk7Ci0gICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsK
LSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0
SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwotICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgIH07Ci0KLSAgICBpZCBz
dWNjZXNzQ2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmNvbHVtbk5hbWVzLCBO
U1N0cmluZyAqKm5vdGVzLCBkb3VibGUgKnRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0
ICoqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipwYXlsb2FkLCBpbnQgKmRhdGFiYXNl
SWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0
YWJhc2VQcmltYXJ5Q29sb3JzICpzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICoq
YWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXNQcmludENvbG9yICpwcmludENvbG9yKSB7Ci0gICAgICAgIFJlZjxKU09O
OjpPYmplY3Q+IHJlc3VsdE9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihjb2x1bW5OYW1lcywg
QCJjb2x1bW5OYW1lcyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05B
TF9QQVJBTUVURVIobm90ZXMsIEAibm90ZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHZhbHVlcywgQCJ2YWx1ZXMiKTsKLSAgICAgICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHBheWxvYWQsIEAicGF5bG9h
ZCIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIo
c3FsRXJyb3IsIEAic3FsRXJyb3IiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURf
T1BUSU9OQUxfUEFSQU1FVEVSKGFsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsK
LSAgICAgICAgaWYgKGNvbHVtbk5hbWVzKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRB
cnJheSgiY29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KCpjb2x1bW5OYW1lcykpOwot
ICAgICAgICBpZiAobm90ZXMpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygi
bm90ZXMiX3MsICpub3Rlcyk7Ci0gICAgICAgIGlmICh0aW1lc3RhbXApCi0gICAgICAgICAgICBy
ZXN1bHRPYmplY3QtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCAqdGltZXN0YW1wKTsKLSAgICAg
ICAgaWYgKHZhbHVlcykKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KCJ2YWx1
ZXMiX3MsIFsqdmFsdWVzIHRvSlNPTk9iamVjdF0pOwotICAgICAgICBpZiAocGF5bG9hZCkKLSAg
ICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFsqcGF5bG9hZCB0
b0pTT05PYmplY3RdKTsKLSAgICAgICAgaWYgKGRhdGFiYXNlSWQpCi0gICAgICAgICAgICByZXN1
bHRPYmplY3QtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsICpkYXRhYmFzZUlkKTsKLSAgICAg
ICAgaWYgKHNxbEVycm9yKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInNx
bEVycm9yIl9zLCBbKnNxbEVycm9yIHRvSlNPTk9iamVjdF0pOwotICAgICAgICBpZiAoc2NyZWVu
Q29sb3IpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygic2NyZWVuQ29sb3Ii
X3MsIHRvUHJvdG9jb2xTdHJpbmcoKnNjcmVlbkNvbG9yKSk7Ci0gICAgICAgIGlmIChhbHRlcm5h
dGVDb2xvcnMpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJhbHRlcm5hdGVD
b2xvcnMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KCphbHRlcm5hdGVDb2xvcnMpKTsKLSAgICAgICAg
aWYgKHByaW50Q29sb3IpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygicHJp
bnRDb2xvciJfcywgdG9Qcm90b2NvbFN0cmluZygqcHJpbnRDb2xvcikpOwotICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdE9i
amVjdCksIGZhbHNlKTsKLSAgICB9OwotCi0gICAgaW50IG9faW5fZGF0YWJhc2VJZCA9IGluX2Rh
dGFiYXNlSWQ7Ci0gICAgTlNTdHJpbmcgKm9faW5fcXVlcnkgPSBpbl9xdWVyeTsKLQotICAgIFtt
X2RlbGVnYXRlIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNXaXRoRXJyb3JDYWxs
YmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2sgZGF0YWJh
c2VJZDpvX2luX2RhdGFiYXNlSWQgcXVlcnk6b19pbl9xdWVyeV07Ci19Ci0KLXZvaWQgT2JqQ0lu
c3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxBc3luY09wdGlvbmFs
UmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVzdElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3Ry
aW5nJiBpbl9xdWVyeSkKLXsKLSAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3Rv
cjpAc2VsZWN0b3IoZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNXaXRoRXJyb3JD
YWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6ZGF0YWJhc2VJZDpxdWVyeTopXSkgewotICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2Vu
ZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RhdGFiYXNlLmV4ZWN1dGVTUUxBc3luY09w
dGlvbmFsUmV0dXJuVmFsdWVzJyB3YXMgbm90IGZvdW5kIl9zKTsKLSAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2Vu
ZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgfTsKLQotICAgIGlkIHN1Y2Nlc3NDYWxs
YmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiovICoqY29sdW1uTmFtZXMsIE5TU3RyaW5nICoq
bm90ZXMsIGRvdWJsZSAqdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKip2YWx1ZXMs
IFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnBheWxvYWQsIGludCAqZGF0YWJhc2VJZCwgVGVzdFBy
b3RvY29sRGF0YWJhc2VFcnJvciAqKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1h
cnlDb2xvcnMgKnNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiphbHRlcm5hdGVD
b2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXNQcmludENvbG9yICpwcmludENvbG9yKSB7Ci0gICAgICAgIFJlZjxKU09OOjpPYmplY3Q+
IHJlc3VsdE9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihjb2x1bW5OYW1lcywgQCJjb2x1bW5O
YW1lcyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVU
RVIobm90ZXMsIEAibm90ZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BU
SU9OQUxfUEFSQU1FVEVSKHZhbHVlcywgQCJ2YWx1ZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHBheWxvYWQsIEAicGF5bG9hZCIpOwotICAg
ICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoc3FsRXJyb3Is
IEAic3FsRXJyb3IiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxf
UEFSQU1FVEVSKGFsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsKLSAgICAgICAg
aWYgKGNvbHVtbk5hbWVzKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheSgiY29s
dW1uTmFtZXMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KCpjb2x1bW5OYW1lcykpOwotICAgICAgICBp
ZiAobm90ZXMpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygibm90ZXMiX3Ms
ICpub3Rlcyk7Ci0gICAgICAgIGlmICh0aW1lc3RhbXApCi0gICAgICAgICAgICByZXN1bHRPYmpl
Y3QtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCAqdGltZXN0YW1wKTsKLSAgICAgICAgaWYgKHZh
bHVlcykKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFsq
dmFsdWVzIHRvSlNPTk9iamVjdF0pOwotICAgICAgICBpZiAocGF5bG9hZCkKLSAgICAgICAgICAg
IHJlc3VsdE9iamVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFsqcGF5bG9hZCB0b0pTT05PYmpl
Y3RdKTsKLSAgICAgICAgaWYgKGRhdGFiYXNlSWQpCi0gICAgICAgICAgICByZXN1bHRPYmplY3Qt
PnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsICpkYXRhYmFzZUlkKTsKLSAgICAgICAgaWYgKHNx
bEVycm9yKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9z
LCBbKnNxbEVycm9yIHRvSlNPTk9iamVjdF0pOwotICAgICAgICBpZiAoc2NyZWVuQ29sb3IpCi0g
ICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsIHRvUHJv
dG9jb2xTdHJpbmcoKnNjcmVlbkNvbG9yKSk7Ci0gICAgICAgIGlmIChhbHRlcm5hdGVDb2xvcnMp
Ci0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3Ms
IHRvSlNPTlN0cmluZ0FycmF5KCphbHRlcm5hdGVDb2xvcnMpKTsKLSAgICAgICAgaWYgKHByaW50
Q29sb3IpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygicHJpbnRDb2xvciJf
cywgdG9Qcm90b2NvbFN0cmluZygqcHJpbnRDb2xvcikpOwotICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdE9iamVjdCksIGZh
bHNlKTsKLSAgICB9OwotCi0gICAgaW50IG9faW5fZGF0YWJhc2VJZCA9IGluX2RhdGFiYXNlSWQ7
Ci0gICAgTlNTdHJpbmcgKm9faW5fcXVlcnkgPSBpbl9xdWVyeTsKLQotICAgIFttX2RlbGVnYXRl
IGV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzV2l0aEVycm9yQ2FsbGJhY2s6ZXJy
b3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNlSWQ6b19p
bl9kYXRhYmFzZUlkIHF1ZXJ5Om9faW5fcXVlcnldOwotfQotCi12b2lkIE9iakNJbnNwZWN0b3JE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMU3luYyhsb25nIHJlcXVlc3RJZCwg
aW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpCi17Ci0gICAgaWYgKCFb
bV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGV4ZWN1dGVTUUxTeW5jV2l0
aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOmRhdGFiYXNlSWQ6cXVlcnk6KV0pIHsKLSAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQs
IEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS5leGVjdXRlU1FM
U3luYycgd2FzIG5vdCBmb3VuZCJfcyk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNl
bmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZCBlcnJv
ckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpT
ZXJ2ZXJFcnJvciwgZXJyb3IpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVu
ZGluZ0Vycm9ycygpOwotICAgIH07Ci0KLSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKE5TQXJy
YXkvKjxOU1N0cmluZz4qLyAqY29sdW1uTmFtZXMsIE5TU3RyaW5nICpub3RlcywgZG91YmxlIHRp
bWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICp2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9i
amVjdCAqcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3Ig
KnNxbEVycm9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmFsdGVybmF0ZUNvbG9ycywgVGVzdFBy
b3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzIHNjcmVlbkNvbG9yLCBUZXN0UHJvdG9jb2xEYXRh
YmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvciBwcmludENvbG9yKSB7Ci0gICAgICAgIFJlZjxK
U09OOjpPYmplY3Q+IHJlc3VsdE9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAg
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKGNvbHVtbk5hbWVzLCBA
ImNvbHVtbk5hbWVzIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFS
QU1FVEVSKG5vdGVzLCBAIm5vdGVzIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVR
VUlSRURfUEFSQU1FVEVSKHZhbHVlcywgQCJ2YWx1ZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIocGF5bG9hZCwgQCJwYXlsb2FkIik7Ci0gICAgICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHNxbEVycm9yLCBAInNxbEVy
cm9yIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKGFs
dGVybmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0
LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KGNvbHVtbk5hbWVz
KSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJub3RlcyJfcywgbm90ZXMpOwot
ICAgICAgICByZXN1bHRPYmplY3QtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCB0aW1lc3RhbXAp
OwotICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdCgidmFsdWVzIl9zLCBbdmFsdWVzIHRv
SlNPTk9iamVjdF0pOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldFZhbHVlKCJwYXlsb2FkIl9z
LCBbcGF5bG9hZCB0b0pTT05PYmplY3RdKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRJbnRl
Z2VyKCJkYXRhYmFzZUlkIl9zLCBkYXRhYmFzZUlkKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5z
ZXRPYmplY3QoInNxbEVycm9yIl9zLCBbc3FsRXJyb3IgdG9KU09OT2JqZWN0XSk7Ci0gICAgICAg
IHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5n
QXJyYXkoYWx0ZXJuYXRlQ29sb3JzKSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5n
KCJzY3JlZW5Db2xvciJfcywgdG9Qcm90b2NvbFN0cmluZyhzY3JlZW5Db2xvcikpOwotICAgICAg
ICByZXN1bHRPYmplY3QtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgdG9Qcm90b2NvbFN0cmlu
ZyhwcmludENvbG9yKSk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25z
ZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0T2JqZWN0KSwgZmFsc2UpOwotICAgIH07Ci0KLSAg
ICBpbnQgb19pbl9kYXRhYmFzZUlkID0gaW5fZGF0YWJhc2VJZDsKLSAgICBOU1N0cmluZyAqb19p
bl9xdWVyeSA9IGluX3F1ZXJ5OwotCi0gICAgW21fZGVsZWdhdGUgZXhlY3V0ZVNRTFN5bmNXaXRo
RXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJh
Y2sgZGF0YWJhc2VJZDpvX2luX2RhdGFiYXNlSWQgcXVlcnk6b19pbl9xdWVyeV07Ci19Ci0KLXZv
aWQgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxBc3lu
Yyhsb25nIHJlcXVlc3RJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVl
cnkpCi17Ci0gICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9y
KGV4ZWN1dGVTUUxBc3luY1dpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazpkYXRhYmFz
ZUlkOnF1ZXJ5OildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3Rv
Y29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICIn
RGF0YWJhc2UuZXhlY3V0ZVNRTEFzeW5jJyB3YXMgbm90IGZvdW5kIl9zKTsKLSAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwg
QmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7Ci0gICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgfTsKLQotICAgIGlkIHN1Y2Nl
c3NDYWxsYmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiovICpjb2x1bW5OYW1lcywgTlNTdHJp
bmcgKm5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnZhbHVl
cywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgVGVzdFBy
b3RvY29sRGF0YWJhc2VFcnJvciAqc3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFy
eUNvbG9ycyBzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICphbHRlcm5hdGVDb2xv
cnMsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvciBwcmludENv
bG9yKSB7Ci0gICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdE9iamVjdCA9IEpTT046Ok9i
amVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFS
QU1FVEVSKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG5vdGVzLCBAIm5vdGVzIik7Ci0gICAgICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHZhbHVlcywgQCJ2YWx1ZXMiKTsK
LSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIocGF5bG9hZCwg
QCJwYXlsb2FkIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1F
VEVSKHNxbEVycm9yLCBAInNxbEVycm9yIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
UkVRVUlSRURfUEFSQU1FVEVSKGFsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsK
LSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0
cmluZ0FycmF5KGNvbHVtbk5hbWVzKSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5n
KCJub3RlcyJfcywgbm90ZXMpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldERvdWJsZSgidGlt
ZXN0YW1wIl9zLCB0aW1lc3RhbXApOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdCgi
dmFsdWVzIl9zLCBbdmFsdWVzIHRvSlNPTk9iamVjdF0pOwotICAgICAgICByZXN1bHRPYmplY3Qt
PnNldFZhbHVlKCJwYXlsb2FkIl9zLCBbcGF5bG9hZCB0b0pTT05PYmplY3RdKTsKLSAgICAgICAg
cmVzdWx0T2JqZWN0LT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCBkYXRhYmFzZUlkKTsKLSAg
ICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBbc3FsRXJyb3IgdG9K
U09OT2JqZWN0XSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xv
ciJfcywgdG9Qcm90b2NvbFN0cmluZyhzY3JlZW5Db2xvcikpOwotICAgICAgICByZXN1bHRPYmpl
Y3QtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KGFsdGVy
bmF0ZUNvbG9ycykpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygicHJpbnRDb2xv
ciJfcywgdG9Qcm90b2NvbFN0cmluZyhwcmludENvbG9yKSk7Ci0gICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0T2JqZWN0KSwg
ZmFsc2UpOwotICAgIH07Ci0KLSAgICBpbnQgb19pbl9kYXRhYmFzZUlkID0gaW5fZGF0YWJhc2VJ
ZDsKLSAgICBOU1N0cmluZyAqb19pbl9xdWVyeSA9IGluX3F1ZXJ5OwotCi0gICAgW21fZGVsZWdh
dGUgZXhlY3V0ZVNRTEFzeW5jV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNz
Q2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNlSWQ6b19pbl9kYXRhYmFzZUlkIHF1ZXJ5
Om9faW5fcXVlcnldOwotfQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVz
dFByb3RvY29sLmg+Ci0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQot
QGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKLUBwcm9wZXJ0
eSAobm9uYXRvbWljLCByZXRhaW4sIHNldHRlcj1zZXREYXRhYmFzZUhhbmRsZXI6KSBpZDxUZXN0
UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+IGRhdGFiYXNlSGFuZGxlcjsKLUBlbmQKLQot
Ci0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbi5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2lt
cG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgotI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgotCi11c2luZyBu
YW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xs
ZXI7Ci0gICAgaWQ8VGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyPiBfZGF0YWJhc2VI
YW5kbGVyOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50
YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVy
IGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQo
Y29udHJvbGxlcik7Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVybiBz
ZWxmOwotfQotCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBbX2RhdGFiYXNlSGFuZGxlciByZWxl
YXNlXTsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLS0gKHZvaWQpc2V0RGF0YWJhc2VIYW5k
bGVyOihpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+KWhhbmRsZXIKLXsKLSAg
ICBpZiAoaGFuZGxlciA9PSBfZGF0YWJhc2VIYW5kbGVyKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBbX2RhdGFiYXNlSGFuZGxlciByZWxlYXNlXTsKLSAgICBfZGF0YWJhc2VIYW5kbGVyID0gW2hh
bmRsZXIgcmV0YWluXTsKLQotICAgIGF1dG8gYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IG1ha2VVbmlx
dWU8T2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+KGhhbmRsZXIpOwotICAg
IGF1dG8gYWx0ZXJuYXRlQWdlbnQgPSBtYWtlVW5pcXVlPEFsdGVybmF0ZURpc3BhdGNoYWJsZUFn
ZW50PERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIsIEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXI+PigiRGF0YWJhc2UiX3MsICpfY29udHJvbGxlciwgV1RGTW92ZShhbHRlcm5hdGVE
aXNwYXRjaGVyKSk7Ci0gICAgX2NvbnRyb2xsZXItPmFwcGVuZEV4dHJhQWdlbnQoV1RGTW92ZShh
bHRlcm5hdGVBZ2VudCkpOwotfQotCi0tIChpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhh
bmRsZXI+KWRhdGFiYXNlSGFuZGxlcgotewotICAgIHJldHVybiBfZGF0YWJhc2VIYW5kbGVyOwot
fQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1t
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1
dGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1w
b3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVz
cGFjZSBJbnNwZWN0b3I7Ci0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3Bh
dGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8Rm91
bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2Nv
bEpTT05PYmplY3QuaD4KLQotCi1AY2xhc3MgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcjsKLQot
dHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sUGxhdGZvcm0pIHsKLSAgICBU
ZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbCwKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWMs
Ci0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1JT1MsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1N
YWNPUywKLX07Ci0KLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGF0
YWJhc2VQcmltYXJ5Q29sb3JzKSB7Ci0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29s
b3JzUmVkLAotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc0dyZWVuLAotICAg
IFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc0JsdWUsCi19OwotCi10eXBlZGVmIE5T
X0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXNQcmludENvbG9yKSB7Ci0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVj
dXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvckN5YW4sCi0gICAgVGVzdFBy
b3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xv
ck1hZ2VudGEsCi0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFs
UmV0dXJuVmFsdWVzUHJpbnRDb2xvclllbGxvdywKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yQmxhY2ssCi19OwotCi10
eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxB
c3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvcikgewotICAgIFRlc3RQcm90b2NvbERh
dGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yQ3lhbiwK
LSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFs
dWVzUHJpbnRDb2xvck1hZ2VudGEsCi0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FM
QXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JZZWxsb3csCi0gICAgVGVzdFByb3Rv
Y29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JC
bGFjaywKLX07Ci0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbERhdGFi
YXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yKSB7Ci0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VF
eGVjdXRlU1FMU3luY1ByaW50Q29sb3JDeWFuLAotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhl
Y3V0ZVNRTFN5bmNQcmludENvbG9yTWFnZW50YSwKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVTUUxTeW5jUHJpbnRDb2xvclllbGxvdywKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVTUUxTeW5jUHJpbnRDb2xvckJsYWNrLAotfTsKLQotdHlwZWRlZiBOU19FTlVNKE5TSW50
ZWdlciwgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yKSB7Ci0g
ICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yQ3lhbiwKLSAg
ICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JNYWdlbnRhLAot
ICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvclllbGxvdywK
LSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JCbGFjaywK
LX07Ci0KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJm
YWNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgOiBSV0lQcm90b2NvbEpTT05PYmplY3QKLS0g
KGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBp
ZD4gKilwYXlsb2FkOwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJX
SVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZTooaW50KWNvZGU7Ci0vKiByZXF1aXJl
ZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKm1lc3NhZ2U7Ci0vKiBy
ZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQgY29kZTsKLUBlbmQK
LQotQHByb3RvY29sIFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlciA8TlNPYmplY3Q+
Ci1Ab3B0aW9uYWwKLS0gKHZvaWQpZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1dp
dGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBz
dWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoTlNBcnJheS8qPE5TU3RyaW5nPiovICoqY29sdW1uTmFt
ZXMsIE5TU3RyaW5nICoqbm90ZXMsIGRvdWJsZSAqdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05P
YmplY3QgKip2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnBheWxvYWQsIGludCAqZGF0
YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKnNxbEVycm9yLCBUZXN0UHJvdG9j
b2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgKnNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+
Ki8gKiphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNP
cHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3IgKnByaW50Q29sb3IpKXN1Y2Nlc3NDYWxsYmFj
ayBkYXRhYmFzZUlkOihpbnQpZGF0YWJhc2VJZCBxdWVyeTooTlNTdHJpbmcgKilxdWVyeTsKLS0g
KHZvaWQpZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNXaXRoRXJyb3JDYWxsYmFj
azoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNr
Oih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAq
Km5vdGVzLCBkb3VibGUgKnRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqdmFsdWVz
LCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipwYXlsb2FkLCBpbnQgKmRhdGFiYXNlSWQsIFRlc3RQ
cm90b2NvbERhdGFiYXNlRXJyb3IgKipzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmlt
YXJ5Q29sb3JzICpzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICoqYWx0ZXJuYXRl
Q29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJu
VmFsdWVzUHJpbnRDb2xvciAqcHJpbnRDb2xvcikpc3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNlSWQ6
KGludClkYXRhYmFzZUlkIHF1ZXJ5OihOU1N0cmluZyAqKXF1ZXJ5OwotLSAodm9pZClleGVjdXRl
U1FMU3luY1dpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JD
YWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoTlNBcnJheS8qPE5TU3RyaW5nPiovICpj
b2x1bW5OYW1lcywgTlNTdHJpbmcgKm5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSV0lQcm90b2Nv
bEpTT05PYmplY3QgKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkLCBpbnQg
ZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqc3FsRXJyb3IsIE5TQXJyYXkv
KjxOU1N0cmluZz4qLyAqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1h
cnlDb2xvcnMgc2NyZWVuQ29sb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQ
cmludENvbG9yIHByaW50Q29sb3IpKXN1Y2Nlc3NDYWxsYmFjayBkYXRhYmFzZUlkOihpbnQpZGF0
YWJhc2VJZCBxdWVyeTooTlNTdHJpbmcgKilxdWVyeTsKLS0gKHZvaWQpZXhlY3V0ZVNRTEFzeW5j
V2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNr
IHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKShOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmNvbHVtbk5h
bWVzLCBOU1N0cmluZyAqbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9i
amVjdCAqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnBheWxvYWQsIGludCBkYXRhYmFz
ZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0
YWJhc2VQcmltYXJ5Q29sb3JzIHNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmFs
dGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENv
bG9yIHByaW50Q29sb3IpKXN1Y2Nlc3NDYWxsYmFjayBkYXRhYmFzZUlkOihpbnQpZGF0YWJhc2VJ
ZCBxdWVyeTooTlNTdHJpbmcgKilxdWVyeTsKLUBlbmQKLQotCi0KLQotI2ltcG9ydCA8V2ViSW5z
cGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgotCi0jIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRl
cm5hbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1h
c3luYy1hdHRyaWJ1dGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEpT
T05PYmplY3RQcml2YXRlLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUlu
c3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLQotCi0K
LSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgot
I2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgotCi1u
YW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgot
T3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2
YWx1ZSk7Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xQbGF0
Zm9ybSB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQcm90b2Nv
bFBsYXRmb3JtQWxsOgotICAgICAgICByZXR1cm4gImFsbCJfczsKLSAgICBjYXNlIFRlc3RQcm90
b2NvbFBsYXRmb3JtR2VuZXJpYzoKLSAgICAgICAgcmV0dXJuICJnZW5lcmljIl9zOwotICAgIGNh
c2UgVGVzdFByb3RvY29sUGxhdGZvcm1JT1M6Ci0gICAgICAgIHJldHVybiAiaW9zIl9zOwotICAg
IGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzoKLSAgICAgICAgcmV0dXJuICJtYWNvcyJf
czsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xQ
bGF0Zm9ybT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAg
aWYgKHZhbHVlID09ICJhbGwiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1B
bGw7Ci0gICAgaWYgKHZhbHVlID09ICJnZW5lcmljIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90
b2NvbFBsYXRmb3JtR2VuZXJpYzsKLSAgICBpZiAodmFsdWUgPT0gImlvcyIpCi0gICAgICAgIHJl
dHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzsKLSAgICBpZiAodmFsdWUgPT0gIm1hY29zIikK
LSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M7Ci0gICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKLX0KLQotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFBy
b3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkg
ewotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzUmVkOgotICAgICAg
ICByZXR1cm4gInJlZCJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNv
bG9yc0dyZWVuOgotICAgICAgICByZXR1cm4gImdyZWVuIl9zOwotICAgIGNhc2UgVGVzdFByb3Rv
Y29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzQmx1ZToKLSAgICAgICAgcmV0dXJuICJibHVlIl9zOwot
ICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFi
YXNlUHJpbWFyeUNvbG9ycz4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUp
Ci17Ci0gICAgaWYgKHZhbHVlID09ICJyZWQiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29s
RGF0YWJhc2VQcmltYXJ5Q29sb3JzUmVkOwotICAgIGlmICh2YWx1ZSA9PSAiZ3JlZW4iKQotICAg
ICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzR3JlZW47Ci0gICAg
aWYgKHZhbHVlID09ICJibHVlIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNl
UHJpbWFyeUNvbG9yc0JsdWU7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotaW5saW5l
IFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5
bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3IgdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZh
bHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXNQcmludENvbG9yQ3lhbjoKLSAgICAgICAgcmV0dXJuICJjeWFuIl9zOwot
ICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJu
VmFsdWVzUHJpbnRDb2xvck1hZ2VudGE6Ci0gICAgICAgIHJldHVybiAibWFnZW50YSJfczsKLSAg
ICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZh
bHVlc1ByaW50Q29sb3JZZWxsb3c6Ci0gICAgICAgIHJldHVybiAieWVsbG93Il9zOwotICAgIGNh
c2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVz
UHJpbnRDb2xvckJsYWNrOgotICAgICAgICByZXR1cm4gImJsYWNrIl9zOwotICAgIH0KLX0KLQot
dGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNR
TFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3I+IGZyb21Qcm90b2NvbFN0cmluZyhj
b25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiY3lhbiIpCi0gICAgICAg
IHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXNQcmludENvbG9yQ3lhbjsKLSAgICBpZiAodmFsdWUgPT0gIm1hZ2VudGEiKQotICAgICAg
ICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJu
VmFsdWVzUHJpbnRDb2xvck1hZ2VudGE7Ci0gICAgaWYgKHZhbHVlID09ICJ5ZWxsb3ciKQotICAg
ICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0
dXJuVmFsdWVzUHJpbnRDb2xvclllbGxvdzsKLSAgICBpZiAodmFsdWUgPT0gImJsYWNrIikKLSAg
ICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJl
dHVyblZhbHVlc1ByaW50Q29sb3JCbGFjazsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQot
Ci1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sRGF0YWJhc2VFeGVj
dXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3IgdmFsdWUpCi17Ci0gICAg
c3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxB
c3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvckN5YW46Ci0gICAgICAgIHJldHVybiAi
Y3lhbiJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0
aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yTWFnZW50YToKLSAgICAgICAgcmV0dXJuICJtYWdl
bnRhIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRp
b25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JZZWxsb3c6Ci0gICAgICAgIHJldHVybiAieWVsbG93
Il9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25h
bFJldHVyblZhbHVlc1ByaW50Q29sb3JCbGFjazoKLSAgICAgICAgcmV0dXJuICJibGFjayJfczsK
LSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xEYXRh
YmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvcj4gZnJvbVBy
b3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJj
eWFuIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5j
T3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yQ3lhbjsKLSAgICBpZiAodmFsdWUgPT0gIm1h
Z2VudGEiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5
bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JNYWdlbnRhOwotICAgIGlmICh2YWx1ZSA9
PSAieWVsbG93IikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNR
TEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yWWVsbG93OwotICAgIGlmICh2YWx1
ZSA9PSAiYmxhY2siKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRl
U1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JCbGFjazsKLSAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwotfQotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFBy
b3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3IgdmFsdWUpCi17Ci0gICAgc3dp
dGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5j
UHJpbnRDb2xvckN5YW46Ci0gICAgICAgIHJldHVybiAiY3lhbiJfczsKLSAgICBjYXNlIFRlc3RQ
cm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yTWFnZW50YToKLSAgICAgICAg
cmV0dXJuICJtYWdlbnRhIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRl
U1FMU3luY1ByaW50Q29sb3JZZWxsb3c6Ci0gICAgICAgIHJldHVybiAieWVsbG93Il9zOwotICAg
IGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3JCbGFjazoK
LSAgICAgICAgcmV0dXJuICJibGFjayJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGlu
ZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvcj4g
ZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVl
ID09ICJjeWFuIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNR
TFN5bmNQcmludENvbG9yQ3lhbjsKLSAgICBpZiAodmFsdWUgPT0gIm1hZ2VudGEiKQotICAgICAg
ICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3JNYWdl
bnRhOwotICAgIGlmICh2YWx1ZSA9PSAieWVsbG93IikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90
b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yWWVsbG93OwotICAgIGlmICh2YWx1
ZSA9PSAiYmxhY2siKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRl
U1FMU3luY1ByaW50Q29sb3JCbGFjazsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi1p
bmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRl
U1FMQXN5bmNQcmludENvbG9yIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNh
c2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yQ3lhbjoKLSAg
ICAgICAgcmV0dXJuICJjeWFuIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVj
dXRlU1FMQXN5bmNQcmludENvbG9yTWFnZW50YToKLSAgICAgICAgcmV0dXJuICJtYWdlbnRhIl9z
OwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9y
WWVsbG93OgotICAgICAgICByZXR1cm4gInllbGxvdyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2Nv
bERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvckJsYWNrOgotICAgICAgICByZXR1cm4g
ImJsYWNrIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQ
cm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvcj4gZnJvbVByb3RvY29sU3Ry
aW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJjeWFuIikKLSAg
ICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xv
ckN5YW47Ci0gICAgaWYgKHZhbHVlID09ICJtYWdlbnRhIikKLSAgICAgICAgcmV0dXJuIFRlc3RQ
cm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvck1hZ2VudGE7Ci0gICAgaWYg
KHZhbHVlID09ICJ5ZWxsb3ciKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VF
eGVjdXRlU1FMQXN5bmNQcmludENvbG9yWWVsbG93OwotICAgIGlmICh2YWx1ZSA9PSAiYmxhY2si
KQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmlu
dENvbG9yQmxhY2s7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
LmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmli
dXRlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2lt
cG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90
b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgotI2ltcG9ydCA8V2Vi
SW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLQotdXNpbmcgbmFtZXNw
YWNlIEluc3BlY3RvcjsKLQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMg
KERhdGFiYXNlRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZURhdGFiYXNlSWQ6KE5TTnVtYmVyICoq
KW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotKyAodm9pZClfcGFyc2VQcmltYXJ5
Q29sb3JzOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLSsg
KHZvaWQpX3BhcnNlQ29sb3JMaXN0OihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopb3V0VmFsdWUg
ZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZUVycm9yOihUZXN0UHJvdG9j
b2xEYXRhYmFzZUVycm9yICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotCi1A
ZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKERhdGFi
YXNlRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZURhdGFiYXNlSWQ6KE5TTnVtYmVyICoqKW91dFZh
bHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9C
QURfVFlQRShwYXlsb2FkLCBbTlNOdW1iZXIgY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSAoTlNO
dW1iZXIgKilwYXlsb2FkOwotfQotCi0rICh2b2lkKV9wYXJzZVByaW1hcnlDb2xvcnM6KE5TTnVt
YmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKLSAgICBPcHRp
b25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnM+IHJlc3VsdCA9IEluc3BlY3Rv
cjo6ZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycz4o
cGF5bG9hZCk7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfRU5VTV9WQUxVRShyZXN1bHQs
IEAiUHJpbWFyeUNvbG9ycyIpOwotICAgICpvdXRWYWx1ZSA9IEAocmVzdWx0LnZhbHVlKCkpOwot
fQotCi0rICh2b2lkKV9wYXJzZUNvbG9yTGlzdDooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKW91
dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9CQURfVFlQRShwYXlsb2FkLCBbTlNBcnJheS8qPE5TU3RyaW5nPiovIGNsYXNzXSk7Ci0gICAg
Km91dFZhbHVlID0gKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKXBheWxvYWQ7Ci19Ci0KLSsgKHZv
aWQpX3BhcnNlRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKiopb3V0VmFsdWUgZnJv
bVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBF
KHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQ
cm90b2NvbERhdGFiYXNlRXJyb3IgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKLX0K
LQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1t
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFBy
b3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
LmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5o
PgotI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+
Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotQGltcGxlbWVudGF0aW9uIFRlc3RQ
cm90b2NvbERhdGFiYXNlRXJyb3IKLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoo
bm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZAotewotICAgIGlm
ICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AibWVzc2FnZSJdLCBA
Im1lc3NhZ2UiKTsKLSAgICBzZWxmLm1lc3NhZ2UgPSBwYXlsb2FkW0AibWVzc2FnZSJdOwotCi0g
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiY29kZSJd
LCBAImNvZGUiKTsKLSAgICBzZWxmLmNvZGUgPSBbcGF5bG9hZFtAImNvZGUiXSBpbnRlZ2VyVmFs
dWVdOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90
b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopb2JqZWN0Ci17Ci0gICAgaWYgKCEo
c2VsZiA9IFtzdXBlciBpbml0V2l0aEpTT05PYmplY3Q6W29iamVjdCB0b0pTT05PYmplY3RdLmdl
dCgpXSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlIGNvZGU6KGlu
dCljb2RlCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJldHVy
biBuaWw7Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKG1lc3Nh
Z2UsIEAibWVzc2FnZSIpOwotCi0gICAgc2VsZi5tZXNzYWdlID0gbWVzc2FnZTsKLSAgICBzZWxm
LmNvZGUgPSBjb2RlOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpc2V0TWVzc2Fn
ZTooTlNTdHJpbmcgKiltZXNzYWdlCi17Ci0gICAgW3N1cGVyIHNldFN0cmluZzptZXNzYWdlIGZv
cktleTpAIm1lc3NhZ2UiXTsKLX0KLQotLSAoTlNTdHJpbmcgKiltZXNzYWdlCi17Ci0gICAgcmV0
dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJtZXNzYWdlIl07Ci19Ci0KLS0gKHZvaWQpc2V0Q29k
ZTooaW50KWNvZGUKLXsKLSAgICBbc3VwZXIgc2V0SW50ZWdlcjpjb2RlIGZvcktleTpAImNvZGUi
XTsKLX0KLQotLSAoaW50KWNvZGUKLXsKLSAgICByZXR1cm4gW3N1cGVyIGludGVnZXJGb3JLZXk6
QCJjb2RlIl07Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVz
Lm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJu
LXBhcmFtZXRlcnMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNh
bGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDg1OTQxZWQ1MWYxLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9jb21tYW5kcy13aXRo
LW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQKKysrIC9kZXYvbnVs
bApAQCAtMSwxNjc0ICswLDAgQEAKLSMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29t
bWFuZHMuanMKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRo
LW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0vLyBEYXRhYmFzZQotSW5zcGVjdG9yQmFja2VuZC5y
ZWdpc3RlckRvbWFpbigiRGF0YWJhc2UiLCBudWxsKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0
ZXJFbnVtKCJEYXRhYmFzZS5QcmltYXJ5Q29sb3JzIiwge1JlZDogInJlZCIsIEdyZWVuOiAiZ3Jl
ZW4iLCBCbHVlOiAiYmx1ZSJ9KTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJE
YXRhYmFzZS5leGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzIiwgbnVsbCwgW3sibmFtZSI6ICJj
b2x1bW5OYW1lcyIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRydWV9LCB7Im5hbWUi
OiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVlfSwgeyJuYW1lIjog
InRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6IHRydWV9LCB7Im5hbWUi
OiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZX0sIHsibmFtZSI6
ICJwYXlsb2FkIiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZX0sIHsibmFtZSI6
ICJkYXRhYmFzZUlkIiwgInR5cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFsIjogdHJ1ZX0sIHsibmFt
ZSI6ICJzcWxFcnJvciIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRydWV9LCB7Im5h
bWUiOiAic2NyZWVuQ29sb3IiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVlfSwg
eyJuYW1lIjogImFsdGVybmF0ZUNvbG9ycyIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6
IHRydWV9LCB7Im5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25h
bCI6IHRydWV9XSwgWyJjb2x1bW5OYW1lcyIsICJub3RlcyIsICJ0aW1lc3RhbXAiLCAidmFsdWVz
IiwgInBheWxvYWQiLCAiZGF0YWJhc2VJZCIsICJzcWxFcnJvciIsICJzY3JlZW5Db2xvciIsICJh
bHRlcm5hdGVDb2xvcnMiLCAicHJpbnRDb2xvciJdKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0
ZXJDb21tYW5kKCJEYXRhYmFzZS5leGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMiLCBudWxsLCBb
eyJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAib2JqZWN0In0sIHsibmFtZSI6ICJub3Rl
cyIsICJ0eXBlIjogInN0cmluZyJ9LCB7Im5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVt
YmVyIn0sIHsibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QifSwgeyJuYW1lIjogInBh
eWxvYWQiLCAidHlwZSI6ICJvYmplY3QifSwgeyJuYW1lIjogImRhdGFiYXNlSWQiLCAidHlwZSI6
ICJudW1iZXIifSwgeyJuYW1lIjogInNxbEVycm9yIiwgInR5cGUiOiAib2JqZWN0In0sIHsibmFt
ZSI6ICJzY3JlZW5Db2xvciIsICJ0eXBlIjogInN0cmluZyJ9LCB7Im5hbWUiOiAiYWx0ZXJuYXRl
Q29sb3JzIiwgInR5cGUiOiAib2JqZWN0In0sIHsibmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUi
OiAic3RyaW5nIn1dLCBbImNvbHVtbk5hbWVzIiwgIm5vdGVzIiwgInRpbWVzdGFtcCIsICJ2YWx1
ZXMiLCAicGF5bG9hZCIsICJkYXRhYmFzZUlkIiwgInNxbEVycm9yIiwgInNjcmVlbkNvbG9yIiwg
ImFsdGVybmF0ZUNvbG9ycyIsICJwcmludENvbG9yIl0pOwotSW5zcGVjdG9yQmFja2VuZC5hY3Rp
dmF0ZURvbWFpbigiRGF0YWJhc2UiLCBudWxsKTsKLSMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFj
a2VuZENvbW1hbmRzLmpzCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERp
c3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13
aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29s
VHlwZXMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVy
Lmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlz
cGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8
QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0g
V1RGTW92ZShkaXNwYXRjaGVyKTsgfQotICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlz
cGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KLXBy
aXZhdGU6Ci0gICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVy
OwotfTsKLQotCi1jbGFzcyBBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyIDogcHVi
bGljIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5B
bHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lk
IGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyBjYWxsSWQsIGNvbnN0IEpTT046OkFy
cmF5KiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nKiBpbl9ub3RlcywgY29uc3QgZG91Ymxl
KiBpbl90aW1lc3RhbXAsIGNvbnN0IEpTT046Ok9iamVjdCogaW5fdmFsdWVzLCBjb25zdCBKU09O
OjpWYWx1ZSogaW5fcGF5bG9hZCwgY29uc3QgaW50KiBpbl9kYXRhYmFzZUlkLCBjb25zdCBKU09O
OjpPYmplY3QqIGluX3NxbEVycm9yLCBjb25zdCBTdHJpbmcqIGluX3NjcmVlbkNvbG9yLCBjb25z
dCBKU09OOjpBcnJheSogaW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcqIGluX3ByaW50
Q29sb3IpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJz
KGxvbmcgY2FsbElkLCBjb25zdCBKU09OOjpBcnJheSYgaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0
cmluZyYgaW5fbm90ZXMsIGRvdWJsZSBpbl90aW1lc3RhbXAsIGNvbnN0IEpTT046Ok9iamVjdCYg
aW5fdmFsdWVzLCBKU09OOjpWYWx1ZSBpbl9wYXlsb2FkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29u
c3QgSlNPTjo6T2JqZWN0JiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nJiBpbl9zY3JlZW5Db2xv
ciwgY29uc3QgSlNPTjo6QXJyYXkmIGluX2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBp
bl9wcmludENvbG9yKSA9IDA7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotI2Vu
ZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotIyMjIEVuZCBG
aWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQot
Ci0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10eXBlZGVmIFN0cmluZyBFcnJv
clN0cmluZzsKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQot
Y2xhc3MgQWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjsKLSNlbmRpZiAvLyBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQotY2xhc3MgRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIgewotcHVibGljOgotICAgIC8vIE5hbWVkIGFmdGVyIHBhcmFt
ZXRlciAncHJpbnRDb2xvcicgd2hpbGUgZ2VuZXJhdGluZyBjb21tYW5kL2V2ZW50IGV4ZWN1dGVB
bGxPcHRpb25hbFBhcmFtZXRlcnMuCi0gICAgZW51bSBjbGFzcyBQcmludENvbG9yIHsKLSAgICAg
ICAgQ3lhbiA9IDMsCi0gICAgICAgIE1hZ2VudGEgPSA0LAotICAgICAgICBZZWxsb3cgPSA1LAot
ICAgICAgICBCbGFjayA9IDYsCi0gICAgfTsgLy8gZW51bSBjbGFzcyBQcmludENvbG9yCi0gICAg
dmlydHVhbCB2b2lkIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMoRXJyb3JTdHJpbmcmLCBj
b25zdCBKU09OOjpBcnJheSogb3B0X2luX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIG9wdF9p
bl9ub3RlcywgY29uc3QgZG91YmxlKiBvcHRfaW5fdGltZXN0YW1wLCBjb25zdCBKU09OOjpPYmpl
Y3QqIG9wdF9pbl92YWx1ZXMsIGNvbnN0IEpTT046OlZhbHVlKiBvcHRfaW5fcGF5bG9hZCwgY29u
c3QgaW50KiBvcHRfaW5fZGF0YWJhc2VJZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRfaW5fc3Fs
RXJyb3IsIGNvbnN0IFN0cmluZyogb3B0X2luX3NjcmVlbkNvbG9yLCBjb25zdCBKU09OOjpBcnJh
eSogb3B0X2luX2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nKiBvcHRfaW5fcHJpbnRDb2xv
ciwgUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mIG9wdF9vdXRfY29sdW1uTmFtZXMsIE9w
dGlvbmFsPFN0cmluZz4mIG9wdF9vdXRfbm90ZXMsIE9wdGlvbmFsPGRvdWJsZT4mIG9wdF9vdXRf
dGltZXN0YW1wLCBPcHRpb25hbDxKU09OOjpPYmplY3Q+JiBvcHRfb3V0X3ZhbHVlcywgT3B0aW9u
YWw8SlNPTjo6VmFsdWU+JiBvcHRfb3V0X3BheWxvYWQsIE9wdGlvbmFsPGludD4mIG9wdF9vdXRf
ZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4m
IG9wdF9vdXRfc3FsRXJyb3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5
Q29sb3JzKiBvcHRfb3V0X3NjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6OkNvbG9yTGlzdD4mIG9wdF9vdXRfYWx0ZXJuYXRlQ29sb3JzLCBEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciogb3B0X291dF9wcmludENvbG9yKSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhFcnJvclN0
cmluZyYsIGNvbnN0IEpTT046OkFycmF5JiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBp
bl9ub3RlcywgZG91YmxlIGluX3RpbWVzdGFtcCwgY29uc3QgSlNPTjo6T2JqZWN0JiBpbl92YWx1
ZXMsIEpTT046OlZhbHVlIGluX3BheWxvYWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBKU09O
OjpPYmplY3QmIGluX3NxbEVycm9yLCBjb25zdCBTdHJpbmcmIGluX3NjcmVlbkNvbG9yLCBjb25z
dCBKU09OOjpBcnJheSYgaW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcmIGluX3ByaW50
Q29sb3IsIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiBvdXRfY29sdW1uTmFtZXMsIFN0
cmluZyogb3V0X25vdGVzLCBkb3VibGUqIG91dF90aW1lc3RhbXAsIEpTT046Ok9iamVjdCogb3V0
X3ZhbHVlcywgSlNPTjo6VmFsdWUqIG91dF9wYXlsb2FkLCBpbnQqIG91dF9kYXRhYmFzZUlkLCBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYgb3V0X3NxbEVycm9y
LCBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyogb3V0X3NjcmVl
bkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4m
IG91dF9hbHRlcm5hdGVDb2xvcnMsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQ
cmludENvbG9yKiBvdXRfcHJpbnRDb2xvcikgPSAwOwotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwg
fkRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7Ci19OwotCi1jbGFzcyBEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNw
YXRjaGVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPERhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyKik7Ci0gICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5n
JiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkgZmluYWw7Ci1wcml2YXRlOgot
ICAgIHZvaWQgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhsb25nIHJlcXVlc3RJZCwgUmVm
UHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKLSAgICB2b2lkIGV4ZWN1dGVOb09wdGlv
bmFsUGFyYW1ldGVycyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJh
bWV0ZXJzKTsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLXB1
YmxpYzoKLSAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlRGF0YWJhc2VC
YWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVybmF0ZURpc3Bh
dGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9Ci1wcml2YXRlOgotICAgIEFsdGVybmF0ZURh
dGFiYXNlQmFja2VuZERpc3BhdGNoZXIqIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciB7IG51bGxwdHIg
fTsKLSNlbmRpZgotcHJpdmF0ZToKLSAgICBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKEJhY2tl
bmREaXNwYXRjaGVyJiwgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICBE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2VudCB7IG51bGxwdHIgfTsKLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERp
c3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3Bw
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25h
bC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RCYWNr
ZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZy
b250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3
dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNp
ZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSNpbmNsdWRlICJUZXN0
QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIEluc3Bl
Y3RvciB7Ci0KLURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+RGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KLQotUmVmPERhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXI+IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYg
YmFja2VuZERpc3BhdGNoZXIsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2Vu
dCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
KGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOwotfQotCi1EYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVyOjpEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5k
RGlzcGF0Y2hlciwgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQotICAg
IDogU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCi0gICAg
LCBtX2FnZW50KGFnZW50KQotewotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlz
cGF0Y2hlckZvckRvbWFpbigiRGF0YWJhc2UiX3MsIHRoaXMpOwotfQotCi12b2lkIERhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcm
IG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQotewotICAgIFJlZjxEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKLQotICAgIFJlZlB0cjxKU09OOjpP
YmplY3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBh
cmFtZXRlcnMpOwotCi0gICAgaWYgKG1ldGhvZCA9PSAiZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1l
dGVycyIpCi0gICAgICAgIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMocmVxdWVzdElkLCBX
VEZNb3ZlKHBhcmFtZXRlcnMpKTsKLSAgICBlbHNlIGlmIChtZXRob2QgPT0gImV4ZWN1dGVOb09w
dGlvbmFsUGFyYW1ldGVycyIpCi0gICAgICAgIGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhy
ZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0
aG9kTm90Rm91bmQsICInRGF0YWJhc2UuIiArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsK
LX0KLQotdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlQWxsT3B0aW9uYWxQ
YXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRl
cnMpCi17Ci0gICAgYm9vbCBvcHRfaW5fY29sdW1uTmFtZXNfdmFsdWVGb3VuZCA9IGZhbHNlOwot
ICAgIFJlZlB0cjxKU09OOjpBcnJheT4gb3B0X2luX2NvbHVtbk5hbWVzID0gbV9iYWNrZW5kRGlz
cGF0Y2hlci0+Z2V0QXJyYXkocGFyYW1ldGVycy5nZXQoKSwgImNvbHVtbk5hbWVzIl9zLCAmb3B0
X2luX2NvbHVtbk5hbWVzX3ZhbHVlRm91bmQpOwotICAgIGJvb2wgb3B0X2luX25vdGVzX3ZhbHVl
Rm91bmQgPSBmYWxzZTsKLSAgICBTdHJpbmcgb3B0X2luX25vdGVzID0gbV9iYWNrZW5kRGlzcGF0
Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksICJub3RlcyJfcywgJm9wdF9pbl9ub3Rl
c192YWx1ZUZvdW5kKTsKLSAgICBib29sIG9wdF9pbl90aW1lc3RhbXBfdmFsdWVGb3VuZCA9IGZh
bHNlOwotICAgIGRvdWJsZSBvcHRfaW5fdGltZXN0YW1wID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+
Z2V0RG91YmxlKHBhcmFtZXRlcnMuZ2V0KCksICJ0aW1lc3RhbXAiX3MsICZvcHRfaW5fdGltZXN0
YW1wX3ZhbHVlRm91bmQpOwotICAgIGJvb2wgb3B0X2luX3ZhbHVlc192YWx1ZUZvdW5kID0gZmFs
c2U7Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gb3B0X2luX3ZhbHVlcyA9IG1fYmFja2VuZERp
c3BhdGNoZXItPmdldE9iamVjdChwYXJhbWV0ZXJzLmdldCgpLCAidmFsdWVzIl9zLCAmb3B0X2lu
X3ZhbHVlc192YWx1ZUZvdW5kKTsKLSAgICBib29sIG9wdF9pbl9wYXlsb2FkX3ZhbHVlRm91bmQg
PSBmYWxzZTsKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IG9wdF9pbl9wYXlsb2FkID0gbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+Z2V0VmFsdWUocGFyYW1ldGVycy5nZXQoKSwgInBheWxvYWQiX3MsICZv
cHRfaW5fcGF5bG9hZF92YWx1ZUZvdW5kKTsKLSAgICBib29sIG9wdF9pbl9kYXRhYmFzZUlkX3Zh
bHVlRm91bmQgPSBmYWxzZTsKLSAgICBpbnQgb3B0X2luX2RhdGFiYXNlSWQgPSBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5nZXRJbnRlZ2VyKHBhcmFtZXRlcnMuZ2V0KCksICJkYXRhYmFzZUlkIl9zLCAm
b3B0X2luX2RhdGFiYXNlSWRfdmFsdWVGb3VuZCk7Ci0gICAgYm9vbCBvcHRfaW5fc3FsRXJyb3Jf
dmFsdWVGb3VuZCA9IGZhbHNlOwotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG9wdF9pbl9zcWxF
cnJvciA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldE9iamVjdChwYXJhbWV0ZXJzLmdldCgpLCAi
c3FsRXJyb3IiX3MsICZvcHRfaW5fc3FsRXJyb3JfdmFsdWVGb3VuZCk7Ci0gICAgYm9vbCBvcHRf
aW5fc2NyZWVuQ29sb3JfdmFsdWVGb3VuZCA9IGZhbHNlOwotICAgIFN0cmluZyBvcHRfaW5fc2Ny
ZWVuQ29sb3IgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQo
KSwgInNjcmVlbkNvbG9yIl9zLCAmb3B0X2luX3NjcmVlbkNvbG9yX3ZhbHVlRm91bmQpOwotICAg
IGJvb2wgb3B0X2luX2FsdGVybmF0ZUNvbG9yc192YWx1ZUZvdW5kID0gZmFsc2U7Ci0gICAgUmVm
UHRyPEpTT046OkFycmF5PiBvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzID0gbV9iYWNrZW5kRGlzcGF0
Y2hlci0+Z2V0QXJyYXkocGFyYW1ldGVycy5nZXQoKSwgImFsdGVybmF0ZUNvbG9ycyJfcywgJm9w
dF9pbl9hbHRlcm5hdGVDb2xvcnNfdmFsdWVGb3VuZCk7Ci0gICAgYm9vbCBvcHRfaW5fcHJpbnRD
b2xvcl92YWx1ZUZvdW5kID0gZmFsc2U7Ci0gICAgU3RyaW5nIG9wdF9pbl9wcmludENvbG9yID0g
bV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksICJwcmludENv
bG9yIl9zLCAmb3B0X2luX3ByaW50Q29sb3JfdmFsdWVGb3VuZCk7Ci0gICAgaWYgKG1fYmFja2Vu
ZERpc3BhdGNoZXItPmhhc1Byb3RvY29sRXJyb3JzKCkpIHsKLSAgICAgICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBh
cmFtcywgIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnRGF0YWJhc2UuZXhlY3V0ZUFsbE9wdGlv
bmFsUGFyYW1ldGVycycgY2FuJ3QgYmUgcHJvY2Vzc2VkIl9zKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotICAg
IGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRj
aGVyLT5leGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKHJlcXVlc3RJZCwgb3B0X2luX2NvbHVt
bk5hbWVzX3ZhbHVlRm91bmQgPyBvcHRfaW5fY29sdW1uTmFtZXMuZ2V0KCkgOiBudWxscHRyLCBv
cHRfaW5fbm90ZXNfdmFsdWVGb3VuZCA/ICZvcHRfaW5fbm90ZXMgOiBudWxscHRyLCBvcHRfaW5f
dGltZXN0YW1wX3ZhbHVlRm91bmQgPyAmb3B0X2luX3RpbWVzdGFtcCA6IG51bGxwdHIsIG9wdF9p
bl92YWx1ZXNfdmFsdWVGb3VuZCA/IG9wdF9pbl92YWx1ZXMuZ2V0KCkgOiBudWxscHRyLCBvcHRf
aW5fcGF5bG9hZF92YWx1ZUZvdW5kID8gb3B0X2luX3BheWxvYWQuZ2V0KCkgOiBudWxscHRyLCBv
cHRfaW5fZGF0YWJhc2VJZF92YWx1ZUZvdW5kID8gJm9wdF9pbl9kYXRhYmFzZUlkIDogbnVsbHB0
ciwgb3B0X2luX3NxbEVycm9yX3ZhbHVlRm91bmQgPyBvcHRfaW5fc3FsRXJyb3IuZ2V0KCkgOiBu
dWxscHRyLCBvcHRfaW5fc2NyZWVuQ29sb3JfdmFsdWVGb3VuZCA/ICZvcHRfaW5fc2NyZWVuQ29s
b3IgOiBudWxscHRyLCBvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzX3ZhbHVlRm91bmQgPyBvcHRfaW5f
YWx0ZXJuYXRlQ29sb3JzLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX3ByaW50Q29sb3JfdmFsdWVG
b3VuZCA/ICZvcHRfaW5fcHJpbnRDb2xvciA6IG51bGxwdHIpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotI2VuZGlmCi0KLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2Jq
ZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIFJlZlB0cjxKU09OOjpB
cnJheU9mPFN0cmluZz4+IG91dF9jb2x1bW5OYW1lczsKLSAgICBPcHRpb25hbDxTdHJpbmc+IG91
dF9ub3RlczsKLSAgICBPcHRpb25hbDxkb3VibGU+IG91dF90aW1lc3RhbXA7Ci0gICAgT3B0aW9u
YWw8SlNPTjo6T2JqZWN0PiBvdXRfdmFsdWVzOwotICAgIE9wdGlvbmFsPEpTT046OlZhbHVlPiBv
dXRfcGF5bG9hZDsKLSAgICBPcHRpb25hbDxpbnQ+IG91dF9kYXRhYmFzZUlkOwotICAgIFJlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IG91dF9zcWxFcnJvcjsKLSAg
ICBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyBvdXRfc2NyZWVu
Q29sb3I7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxp
c3Q+IG91dF9hbHRlcm5hdGVDb2xvcnM7Ci0gICAgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXI6OlByaW50Q29sb3Igb3V0X3ByaW50Q29sb3I7Ci0gICAgbV9hZ2VudC0+ZXhlY3V0ZUFs
bE9wdGlvbmFsUGFyYW1ldGVycyhlcnJvciwgb3B0X2luX2NvbHVtbk5hbWVzX3ZhbHVlRm91bmQg
PyBvcHRfaW5fY29sdW1uTmFtZXMuZ2V0KCkgOiBudWxscHRyLCBvcHRfaW5fbm90ZXNfdmFsdWVG
b3VuZCA/ICZvcHRfaW5fbm90ZXMgOiBudWxscHRyLCBvcHRfaW5fdGltZXN0YW1wX3ZhbHVlRm91
bmQgPyAmb3B0X2luX3RpbWVzdGFtcCA6IG51bGxwdHIsIG9wdF9pbl92YWx1ZXNfdmFsdWVGb3Vu
ZCA/IG9wdF9pbl92YWx1ZXMuZ2V0KCkgOiBudWxscHRyLCBvcHRfaW5fcGF5bG9hZF92YWx1ZUZv
dW5kID8gb3B0X2luX3BheWxvYWQuZ2V0KCkgOiBudWxscHRyLCBvcHRfaW5fZGF0YWJhc2VJZF92
YWx1ZUZvdW5kID8gJm9wdF9pbl9kYXRhYmFzZUlkIDogbnVsbHB0ciwgb3B0X2luX3NxbEVycm9y
X3ZhbHVlRm91bmQgPyBvcHRfaW5fc3FsRXJyb3IuZ2V0KCkgOiBudWxscHRyLCBvcHRfaW5fc2Ny
ZWVuQ29sb3JfdmFsdWVGb3VuZCA/ICZvcHRfaW5fc2NyZWVuQ29sb3IgOiBudWxscHRyLCBvcHRf
aW5fYWx0ZXJuYXRlQ29sb3JzX3ZhbHVlRm91bmQgPyBvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzLmdl
dCgpIDogbnVsbHB0ciwgb3B0X2luX3ByaW50Q29sb3JfdmFsdWVGb3VuZCA/ICZvcHRfaW5fcHJp
bnRDb2xvciA6IG51bGxwdHIsIG91dF9jb2x1bW5OYW1lcywgb3V0X25vdGVzLCBvdXRfdGltZXN0
YW1wLCBvdXRfdmFsdWVzLCBvdXRfcGF5bG9hZCwgb3V0X2RhdGFiYXNlSWQsIG91dF9zcWxFcnJv
ciwgb3V0X3NjcmVlbkNvbG9yLCBvdXRfYWx0ZXJuYXRlQ29sb3JzLCBvdXRfcHJpbnRDb2xvcik7
Ci0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7Ci0gICAgICAgIGlmIChvdXRfY29sdW1uTmFt
ZXMpCi0gICAgICAgICAgICByZXN1bHQtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgb3V0X2Nv
bHVtbk5hbWVzKTsKLSAgICAgICAgaWYgKG91dF9ub3Rlcy5oYXNWYWx1ZSgpKQotICAgICAgICAg
ICAgcmVzdWx0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCAqb3V0X25vdGVzKTsKLSAgICAgICAgaWYg
KG91dF90aW1lc3RhbXAuaGFzVmFsdWUoKSkKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0RG91Ymxl
KCJ0aW1lc3RhbXAiX3MsICpvdXRfdGltZXN0YW1wKTsKLSAgICAgICAgaWYgKG91dF92YWx1ZXMu
aGFzVmFsdWUoKSkKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsICpv
dXRfdmFsdWVzKTsKLSAgICAgICAgaWYgKG91dF9wYXlsb2FkLmhhc1ZhbHVlKCkpCi0gICAgICAg
ICAgICByZXN1bHQtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCAqb3V0X3BheWxvYWQpOwotICAgICAg
ICBpZiAob3V0X2RhdGFiYXNlSWQuaGFzVmFsdWUoKSkKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0
SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgKm91dF9kYXRhYmFzZUlkKTsKLSAgICAgICAgaWYgKG91
dF9zcWxFcnJvcikKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywg
b3V0X3NxbEVycm9yKTsKLSAgICAgICAgaWYgKG91dF9zY3JlZW5Db2xvci5oYXNWYWx1ZSgpKQot
ICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCAqb3V0X3NjcmVl
bkNvbG9yKTsKLSAgICAgICAgaWYgKG91dF9hbHRlcm5hdGVDb2xvcnMpCi0gICAgICAgICAgICBy
ZXN1bHQtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIG91dF9hbHRlcm5hdGVDb2xvcnMp
OwotICAgICAgICBpZiAob3V0X3ByaW50Q29sb3IuaGFzVmFsdWUoKSkKLSAgICAgICAgICAgIHJl
c3VsdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCAqb3V0X3ByaW50Q29sb3IpOwotICAgIH0K
LSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5z
ZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNl
Ci0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2Vu
ZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Ci19Ci0KLXZvaWQgRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcg
cmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpCi17Ci0gICAgUmVm
UHRyPEpTT046OkFycmF5PiBpbl9jb2x1bW5OYW1lcyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdl
dEFycmF5KHBhcmFtZXRlcnMuZ2V0KCksICJjb2x1bW5OYW1lcyJfcywgbnVsbHB0cik7Ci0gICAg
U3RyaW5nIGluX25vdGVzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRl
cnMuZ2V0KCksICJub3RlcyJfcywgbnVsbHB0cik7Ci0gICAgZG91YmxlIGluX3RpbWVzdGFtcCA9
IG1fYmFja2VuZERpc3BhdGNoZXItPmdldERvdWJsZShwYXJhbWV0ZXJzLmdldCgpLCAidGltZXN0
YW1wIl9zLCBudWxscHRyKTsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBpbl92YWx1ZXMgPSBt
X2JhY2tlbmREaXNwYXRjaGVyLT5nZXRPYmplY3QocGFyYW1ldGVycy5nZXQoKSwgInZhbHVlcyJf
cywgbnVsbHB0cik7Ci0gICAgUmVmUHRyPEpTT046OlZhbHVlPiBpbl9wYXlsb2FkID0gbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+Z2V0VmFsdWUocGFyYW1ldGVycy5nZXQoKSwgInBheWxvYWQiX3MsIG51
bGxwdHIpOwotICAgIGludCBpbl9kYXRhYmFzZUlkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0
SW50ZWdlcihwYXJhbWV0ZXJzLmdldCgpLCAiZGF0YWJhc2VJZCJfcywgbnVsbHB0cik7Ci0gICAg
UmVmUHRyPEpTT046Ok9iamVjdD4gaW5fc3FsRXJyb3IgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5n
ZXRPYmplY3QocGFyYW1ldGVycy5nZXQoKSwgInNxbEVycm9yIl9zLCBudWxscHRyKTsKLSAgICBT
dHJpbmcgaW5fc2NyZWVuQ29sb3IgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFy
YW1ldGVycy5nZXQoKSwgInNjcmVlbkNvbG9yIl9zLCBudWxscHRyKTsKLSAgICBSZWZQdHI8SlNP
Tjo6QXJyYXk+IGluX2FsdGVybmF0ZUNvbG9ycyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEFy
cmF5KHBhcmFtZXRlcnMuZ2V0KCksICJhbHRlcm5hdGVDb2xvcnMiX3MsIG51bGxwdHIpOwotICAg
IFN0cmluZyBpbl9wcmludENvbG9yID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBh
cmFtZXRlcnMuZ2V0KCksICJwcmludENvbG9yIl9zLCBudWxscHRyKTsKLSAgICBpZiAobV9iYWNr
ZW5kRGlzcGF0Y2hlci0+aGFzUHJvdG9jb2xFcnJvcnMoKSkgewotICAgICAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlk
UGFyYW1zLCAiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICdEYXRhYmFzZS5leGVjdXRlTm9PcHRp
b25hbFBhcmFtZXRlcnMnIGNhbid0IGJlIHByb2Nlc3NlZCJfcyk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSAg
ICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0
Y2hlci0+ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKHJlcXVlc3RJZCwgKmluX2NvbHVtbk5h
bWVzLCBpbl9ub3RlcywgaW5fdGltZXN0YW1wLCAqaW5fdmFsdWVzLCAqaW5fcGF5bG9hZCwgaW5f
ZGF0YWJhc2VJZCwgKmluX3NxbEVycm9yLCBpbl9zY3JlZW5Db2xvciwgKmluX2FsdGVybmF0ZUNv
bG9ycywgaW5fcHJpbnRDb2xvcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQot
ICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpT
T046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4g
b3V0X2NvbHVtbk5hbWVzOwotICAgIFN0cmluZyBvdXRfbm90ZXM7Ci0gICAgZG91YmxlIG91dF90
aW1lc3RhbXA7Ci0gICAgSlNPTjo6T2JqZWN0IG91dF92YWx1ZXM7Ci0gICAgSlNPTjo6VmFsdWUg
b3V0X3BheWxvYWQ7Ci0gICAgaW50IG91dF9kYXRhYmFzZUlkOwotICAgIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IG91dF9zcWxFcnJvcjsKLSAgICBJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyBvdXRfc2NyZWVuQ29sb3I7Ci0g
ICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IG91dF9h
bHRlcm5hdGVDb2xvcnM7Ci0gICAgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlBy
aW50Q29sb3Igb3V0X3ByaW50Q29sb3I7Ci0gICAgbV9hZ2VudC0+ZXhlY3V0ZU5vT3B0aW9uYWxQ
YXJhbWV0ZXJzKGVycm9yLCAqaW5fY29sdW1uTmFtZXMsIGluX25vdGVzLCBpbl90aW1lc3RhbXAs
ICppbl92YWx1ZXMsICppbl9wYXlsb2FkLCBpbl9kYXRhYmFzZUlkLCAqaW5fc3FsRXJyb3IsIGlu
X3NjcmVlbkNvbG9yLCAqaW5fYWx0ZXJuYXRlQ29sb3JzLCBpbl9wcmludENvbG9yLCBvdXRfY29s
dW1uTmFtZXMsICZvdXRfbm90ZXMsICZvdXRfdGltZXN0YW1wLCBvdXRfdmFsdWVzLCAmb3V0X3Bh
eWxvYWQsICZvdXRfZGF0YWJhc2VJZCwgb3V0X3NxbEVycm9yLCAmb3V0X3NjcmVlbkNvbG9yLCBv
dXRfYWx0ZXJuYXRlQ29sb3JzLCAmb3V0X3ByaW50Q29sb3IpOwotCi0gICAgaWYgKCFlcnJvci5s
ZW5ndGgoKSkgewotICAgICAgICByZXN1bHQtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgb3V0
X2NvbHVtbk5hbWVzKTsKLSAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBvdXRf
bm90ZXMpOwotICAgICAgICByZXN1bHQtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCBvdXRfdGlt
ZXN0YW1wKTsKLSAgICAgICAgcmVzdWx0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgb3V0X3ZhbHVl
cyk7Ci0gICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIG91dF9wYXlsb2FkKTsK
LSAgICAgICAgcmVzdWx0LT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCBvdXRfZGF0YWJhc2VJ
ZCk7Ci0gICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgb3V0X3NxbEVycm9y
KTsKLSAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCBJbnNwZWN0b3I6
OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUob3V0X3NjcmVlbkNv
bG9yKSk7Ci0gICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgb3V0
X2FsdGVybmF0ZUNvbG9ycyk7Ci0gICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJwcmludENvbG9y
Il9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFs
dWUob3V0X3ByaW50Q29sb3IpKTsKLSAgICB9Ci0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAg
ICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92
ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RG
TW92ZShlcnJvcikpOwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBG
aWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZy
b250ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNv
bW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5j
bHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewotCi1jbGFzcyBGcm9udGVuZFJvdXRlcjsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0j
IyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi19IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5j
cHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4t
cGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJv
dG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5hbWVzcGFjZSBJ
bnNwZWN0b3IgewotCi0KLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLS8vIEZvcndhcmQg
ZGVjbGFyYXRpb25zLgotbmFtZXNwYWNlIERhdGFiYXNlIHsKLWNsYXNzIEVycm9yOwotZW51bSBj
bGFzcyBQcmltYXJ5Q29sb3JzOwotfSAvLyBEYXRhYmFzZQotLy8gRW5kIG9mIGZvcndhcmQgZGVj
bGFyYXRpb25zLgotCi0KLS8vIFR5cGVkZWZzLgotbmFtZXNwYWNlIERhdGFiYXNlIHsKLS8qIFVu
aXF1ZSBpZGVudGlmaWVyIG9mIERhdGFiYXNlIG9iamVjdC4gKi8KLXR5cGVkZWYgaW50IERhdGFi
YXNlSWQ7Ci10eXBlZGVmIEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6OlByaW1hcnlDb2xvcnM+IENvbG9yTGlzdDsKLX0gLy8gRGF0YWJhc2UKLS8vIEVuZCBvZiB0
eXBlZGVmcy4KLQotbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKLQotU3RyaW5nIGdldEVudW1Db25z
dGFudFZhbHVlKGludCBjb2RlKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdldEVu
dW1Db25zdGFudFZhbHVlKFQgZW51bVZhbHVlKQotewotICAgIHJldHVybiBnZXRFbnVtQ29uc3Rh
bnRWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KGVudW1WYWx1ZSkpOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBUZXN0SGVscGVycwotCi1uYW1lc3BhY2UgRGF0YWJhc2UgewotLyogICovCi1lbnVtIGNsYXNz
IFByaW1hcnlDb2xvcnMgewotICAgIFJlZCA9IDAsCi0gICAgR3JlZW4gPSAxLAotICAgIEJsdWUg
PSAyLAotfTsgLy8gZW51bSBjbGFzcyBQcmltYXJ5Q29sb3JzCi0vKiBEYXRhYmFzZSBlcnJvci4g
Ki8KLWNsYXNzIEVycm9yIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewotcHVibGljOgotICAg
IGVudW0gewotICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCi0gICAgICAgIE1lc3NhZ2VTZXQgPSAx
IDw8IDAsCi0gICAgICAgIENvZGVTZXQgPSAxIDw8IDEsCi0gICAgICAgIEFsbEZpZWxkc1NldCA9
IChNZXNzYWdlU2V0IHwgQ29kZVNldCkKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8aW50IFNUQVRF
PgotICAgIGNsYXNzIEJ1aWxkZXIgewotICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0cjxKU09O
OjpPYmplY3Q+IG1fcmVzdWx0OwotCi0gICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVy
PFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIEJ1aWxkZXIoUmVmPC8qRXJyb3IqL0pTT046Ok9iamVjdD4mJiBvYmpl
Y3QpCi0gICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKLSAgICAgICAgewot
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJf
Y3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZnJpZW5kIGNs
YXNzIEVycm9yOwotICAgIHB1YmxpYzoKLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTWVzc2Fn
ZVNldD4mIHNldE1lc3NhZ2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICAgICAgewotICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE1lc3NhZ2VTZXQpLCBwcm9wZXJ0eV9tZXNz
YWdlX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1lc3Nh
Z2UiX3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TWVzc2FnZVNldD4o
KTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2RlU2V0PiYgc2V0Q29k
ZShpbnQgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBDb2RlU2V0KSwgcHJvcGVydHlfY29kZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0SW50ZWdlcigiY29kZSJfcywgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxDb2RlU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgUmVmPEVycm9yPiBy
ZWxlYXNlKCkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0g
QWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKLSAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKHNpemVvZihFcnJvcikgPT0gc2l6ZW9mKEpTT046Ok9iamVjdCksIGNhbm5vdF9jYXN0
KTsKLQotICAgICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4ganNvblJlc3VsdCA9IG1fcmVzdWx0
LnJlbGVhc2VOb25OdWxsKCk7Ci0gICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFdURk1vdmUoKnJl
aW50ZXJwcmV0X2Nhc3Q8UmVmPEVycm9yPio+KCZqc29uUmVzdWx0KSk7Ci0gICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIC8qCi0gICAgICogU3ludGhl
dGljIGNvbnN0cnVjdG9yOgotICAgICAqIFJlZjxFcnJvcj4gcmVzdWx0ID0gRXJyb3I6OmNyZWF0
ZSgpCi0gICAgICogICAgIC5zZXRNZXNzYWdlKC4uLikKLSAgICAgKiAgICAgLnNldENvZGUoLi4u
KQotICAgICAqICAgICAucmVsZWFzZSgpOwotICAgICAqLwotICAgIHN0YXRpYyBCdWlsZGVyPE5v
RmllbGRzU2V0PiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVs
ZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOwotICAgIH0KLX07Ci0KLX0gLy8gRGF0YWJh
c2UKLQotCi0KLW5hbWVzcGFjZSBUZXN0SGVscGVycyB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFBy
b3RvY29sRW51bVR5cGU+Ci1PcHRpb25hbDxQcm90b2NvbEVudW1UeXBlPiBwYXJzZUVudW1WYWx1
ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJik7Ci0KLS8vIEVudW1zIGluIHRoZSAnRGF0YWJhc2Un
IERvbWFpbgotdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6OlByaW1hcnlDb2xvcnM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlBy
b3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4oY29uc3QgU3RyaW5nJik7Ci0KLX0gLy8g
bmFtZXNwYWNlIFRlc3RIZWxwZXJzCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgotCi1uYW1lc3BhY2UgV1RGIHsKLQotdGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwotCi0vLyBIYXNoIGRlY2xhcmF0aW9ucyBpbiB0aGUg
J0RhdGFiYXNlJyBEb21haW4KLXRlbXBsYXRlPD4KLXN0cnVjdCBEZWZhdWx0SGFzaDxJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gewotICAgIHR5cGVkZWYgSW50
SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gSGFzaDsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmpl
Y3RzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJl
dHVybi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVj
dHMuaCIKLQotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLW5hbWVzcGFjZSBQcm90b2NvbCB7
Ci0KLW5hbWVzcGFjZSBUZXN0SGVscGVycyB7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBl
bnVtX2NvbnN0YW50X3ZhbHVlc1tdID0gewotICAgICJyZWQiLAotICAgICJncmVlbiIsCi0gICAg
ImJsdWUiLAotICAgICJjeWFuIiwKLSAgICAibWFnZW50YSIsCi0gICAgInllbGxvdyIsCi0gICAg
ImJsYWNrIiwKLX07Ci0KLVN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgewot
ICAgIHJldHVybiBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb2RlXTsKLX0KLQotLy8gRW51bXMgaW4g
dGhlICdEYXRhYmFzZScgRG9tYWluCi10ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlBy
b3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5n
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPihjb25zdCBTdHJp
bmcmIHByb3RvY29sU3RyaW5nKQotewotICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3RhbnRW
YWx1ZXNbXSA9IHsKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFz
ZTo6UHJpbWFyeUNvbG9yczo6UmVkLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzOjpHcmVlbiwKLSAgICAgICAgKHNpemVfdClJbnNw
ZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9yczo6Qmx1ZSwKLSAgICB9Owot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMzsgKytpKQotICAgICAgICBpZiAocHJvdG9jb2xT
dHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNbaV1dKQotICAgICAg
ICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9y
cyljb25zdGFudFZhbHVlc1tpXTsKLQotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLQot
fSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29s
Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bE9iamVjdHMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0
Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgt
b3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRy
Lmg+Ci0KLUBwcm90b2NvbCBUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI7Ci0KLW5h
bWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLWNsYXNzIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tl
bmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3Bh
dGNoZXIgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIE9iakNJ
bnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbERhdGFiYXNl
RG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQotICAgIHZv
aWQgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhsb25nIHJlcXVlc3RJZCwgY29uc3QgSlNP
Tjo6QXJyYXkqIGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIGluX25vdGVzLCBjb25zdCBk
b3VibGUqIGluX3RpbWVzdGFtcCwgY29uc3QgSlNPTjo6T2JqZWN0KiBpbl92YWx1ZXMsIGNvbnN0
IEpTT046OlZhbHVlKiBpbl9wYXlsb2FkLCBjb25zdCBpbnQqIGluX2RhdGFiYXNlSWQsIGNvbnN0
IEpTT046Ok9iamVjdCogaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyogaW5fc2NyZWVuQ29sb3Is
IGNvbnN0IEpTT046OkFycmF5KiBpbl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyogaW5f
cHJpbnRDb2xvcikgZmluYWw7Ci0gICAgdm9pZCBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMo
bG9uZyByZXF1ZXN0SWQsIGNvbnN0IEpTT046OkFycmF5JiBpbl9jb2x1bW5OYW1lcywgY29uc3Qg
U3RyaW5nJiBpbl9ub3RlcywgZG91YmxlIGluX3RpbWVzdGFtcCwgY29uc3QgSlNPTjo6T2JqZWN0
JiBpbl92YWx1ZXMsIEpTT046OlZhbHVlIGluX3BheWxvYWQsIGludCBpbl9kYXRhYmFzZUlkLCBj
b25zdCBKU09OOjpPYmplY3QmIGluX3NxbEVycm9yLCBjb25zdCBTdHJpbmcmIGluX3NjcmVlbkNv
bG9yLCBjb25zdCBKU09OOjpBcnJheSYgaW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcm
IGluX3ByaW50Q29sb3IpIGZpbmFsOwotcHJpdmF0ZToKLSAgICBSZXRhaW5QdHI8aWQ8VGVzdFBy
b3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKLX07Ci0KLX0gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNw
YXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hl
cnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9w
dGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sSW50
ZXJuYWwuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbmNs
dWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdm9pZCBP
YmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZUFsbE9wdGlvbmFs
UGFyYW1ldGVycyhsb25nIHJlcXVlc3RJZCwgY29uc3QgSlNPTjo6QXJyYXkqIGluX2NvbHVtbk5h
bWVzLCBjb25zdCBTdHJpbmcqIGluX25vdGVzLCBjb25zdCBkb3VibGUqIGluX3RpbWVzdGFtcCwg
Y29uc3QgSlNPTjo6T2JqZWN0KiBpbl92YWx1ZXMsIGNvbnN0IEpTT046OlZhbHVlKiBpbl9wYXls
b2FkLCBjb25zdCBpbnQqIGluX2RhdGFiYXNlSWQsIGNvbnN0IEpTT046Ok9iamVjdCogaW5fc3Fs
RXJyb3IsIGNvbnN0IFN0cmluZyogaW5fc2NyZWVuQ29sb3IsIGNvbnN0IEpTT046OkFycmF5KiBp
bl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyogaW5fcHJpbnRDb2xvcikKLXsKLSAgICBp
ZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoZXhlY3V0ZUFsbE9w
dGlvbmFsUGFyYW1ldGVyc1dpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazpjb2x1bW5O
YW1lczpub3Rlczp0aW1lc3RhbXA6dmFsdWVzOnBheWxvYWQ6ZGF0YWJhc2VJZDpzcWxFcnJvcjpz
Y3JlZW5Db2xvcjphbHRlcm5hdGVDb2xvcnM6cHJpbnRDb2xvcjopXSkgewotICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERp
c3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RhdGFiYXNlLmV4ZWN1dGVBbGxPcHRpb25hbFBh
cmFtZXRlcnMnIHdhcyBub3QgZm91bmQiX3MpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigp
LT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWQg
ZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hl
cjo6U2VydmVyRXJyb3IsIGVycm9yKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2Vu
ZFBlbmRpbmdFcnJvcnMoKTsKLSAgICB9OwotCi0gICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihO
U0FycmF5Lyo8TlNTdHJpbmc+Ki8gKipjb2x1bW5OYW1lcywgTlNTdHJpbmcgKipub3RlcywgZG91
YmxlICp0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnZhbHVlcywgUldJUHJvdG9j
b2xKU09OT2JqZWN0ICoqcGF5bG9hZCwgaW50ICpkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRh
YmFzZUVycm9yICoqc3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyAq
c2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmFsdGVybmF0ZUNvbG9ycywgVGVz
dFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvciAq
cHJpbnRDb2xvcikgewotICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHRPYmplY3QgPSBK
U09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9P
UFRJT05BTF9QQVJBTUVURVIoY29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsKLSAgICAgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKG5vdGVzLCBAIm5vdGVz
Iik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUih2
YWx1ZXMsIEAidmFsdWVzIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElP
TkFMX1BBUkFNRVRFUihwYXlsb2FkLCBAInBheWxvYWQiKTsKLSAgICAgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHNxbEVycm9yLCBAInNxbEVycm9yIik7Ci0g
ICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihhbHRlcm5h
dGVDb2xvcnMsIEAiYWx0ZXJuYXRlQ29sb3JzIik7Ci0gICAgICAgIGlmIChjb2x1bW5OYW1lcykK
LSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB0b0pT
T05TdHJpbmdBcnJheSgqY29sdW1uTmFtZXMpKTsKLSAgICAgICAgaWYgKG5vdGVzKQotICAgICAg
ICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCAqbm90ZXMpOwotICAgICAg
ICBpZiAodGltZXN0YW1wKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXREb3VibGUoInRp
bWVzdGFtcCJfcywgKnRpbWVzdGFtcCk7Ci0gICAgICAgIGlmICh2YWx1ZXMpCi0gICAgICAgICAg
ICByZXN1bHRPYmplY3QtPnNldE9iamVjdCgidmFsdWVzIl9zLCBbKnZhbHVlcyB0b0pTT05PYmpl
Y3RdKTsKLSAgICAgICAgaWYgKHBheWxvYWQpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNl
dFZhbHVlKCJwYXlsb2FkIl9zLCBbKnBheWxvYWQgdG9KU09OT2JqZWN0XSk7Ci0gICAgICAgIGlm
IChkYXRhYmFzZUlkKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRJbnRlZ2VyKCJkYXRh
YmFzZUlkIl9zLCAqZGF0YWJhc2VJZCk7Ci0gICAgICAgIGlmIChzcWxFcnJvcikKLSAgICAgICAg
ICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgWypzcWxFcnJvciB0b0pT
T05PYmplY3RdKTsKLSAgICAgICAgaWYgKHNjcmVlbkNvbG9yKQotICAgICAgICAgICAgcmVzdWx0
T2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKCpzY3Jl
ZW5Db2xvcikpOwotICAgICAgICBpZiAoYWx0ZXJuYXRlQ29sb3JzKQotICAgICAgICAgICAgcmVz
dWx0T2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCB0b0pTT05TdHJpbmdBcnJh
eSgqYWx0ZXJuYXRlQ29sb3JzKSk7Ci0gICAgICAgIGlmIChwcmludENvbG9yKQotICAgICAgICAg
ICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsIHRvUHJvdG9jb2xTdHJp
bmcoKnByaW50Q29sb3IpKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3Bv
bnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHRPYmplY3QpLCBmYWxzZSk7Ci0gICAgfTsKLQot
ICAgIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqb19pbl9jb2x1bW5OYW1lczsKLSAgICBpZiAoaW5f
Y29sdW1uTmFtZXMpCi0gICAgICAgIG9faW5fY29sdW1uTmFtZXMgPSB0b09iakNTdHJpbmdBcnJh
eShpbl9jb2x1bW5OYW1lcyk7Ci0gICAgTlNTdHJpbmcgKm9faW5fbm90ZXM7Ci0gICAgaWYgKGlu
X25vdGVzKQotICAgICAgICBvX2luX25vdGVzID0gKmluX25vdGVzOwotICAgIGRvdWJsZSBvX2lu
X3RpbWVzdGFtcDsKLSAgICBpZiAoaW5fdGltZXN0YW1wKQotICAgICAgICBvX2luX3RpbWVzdGFt
cCA9ICppbl90aW1lc3RhbXA7Ci0gICAgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvX2luX3ZhbHVl
czsKLSAgICBpZiAoaW5fdmFsdWVzKQotICAgICAgICBvX2luX3ZhbHVlcyA9IFtbW1JXSVByb3Rv
Y29sSlNPTk9iamVjdCBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0OmluX3ZhbHVlc10gYXV0b3Jl
bGVhc2VdOwotICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb19pbl9wYXlsb2FkOwotICAgIGlm
IChpbl9wYXlsb2FkKQotICAgICAgICBvX2luX3BheWxvYWQgPSBbW1tSV0lQcm90b2NvbEpTT05P
YmplY3QgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDppbl9wYXlsb2FkXSBhdXRvcmVsZWFzZV07
Ci0gICAgaW50IG9faW5fZGF0YWJhc2VJZDsKLSAgICBpZiAoaW5fZGF0YWJhc2VJZCkKLSAgICAg
ICAgb19pbl9kYXRhYmFzZUlkID0gKmluX2RhdGFiYXNlSWQ7Ci0gICAgVGVzdFByb3RvY29sRGF0
YWJhc2VFcnJvciAqb19pbl9zcWxFcnJvcjsKLSAgICBpZiAoaW5fc3FsRXJyb3IpCi0gICAgICAg
IG9faW5fc3FsRXJyb3IgPSBbW1tUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGFsbG9jXSBpbml0
V2l0aEpTT05PYmplY3Q6aW5fc3FsRXJyb3JdIGF1dG9yZWxlYXNlXTsKLSAgICBPcHRpb25hbDxU
ZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnM+IG9faW5fc2NyZWVuQ29sb3I7Ci0gICAg
aWYgKGluX3NjcmVlbkNvbG9yKQotICAgICAgICBvX2luX3NjcmVlbkNvbG9yID0gZnJvbVByb3Rv
Y29sU3RyaW5nPFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycz4oKmluX3NjcmVlbkNv
bG9yKTsKLSAgICBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKm9faW5fYWx0ZXJuYXRlQ29sb3JzOwot
ICAgIGlmIChpbl9hbHRlcm5hdGVDb2xvcnMpCi0gICAgICAgIG9faW5fYWx0ZXJuYXRlQ29sb3Jz
ID0gdG9PYmpDU3RyaW5nQXJyYXkoaW5fYWx0ZXJuYXRlQ29sb3JzKTsKLSAgICBPcHRpb25hbDxU
ZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9y
PiBvX2luX3ByaW50Q29sb3I7Ci0gICAgaWYgKGluX3ByaW50Q29sb3IpCi0gICAgICAgIG9faW5f
cHJpbnRDb2xvciA9IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yPigqaW5fcHJpbnRDb2xvcik7Ci0KLSAg
ICBbbV9kZWxlZ2F0ZSBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzV2l0aEVycm9yQ2FsbGJh
Y2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrIGNvbHVtbk5h
bWVzOihpbl9jb2x1bW5OYW1lcyA/ICZvX2luX2NvbHVtbk5hbWVzIDogbmlsKSBub3RlczooaW5f
bm90ZXMgPyAmb19pbl9ub3RlcyA6IG5pbCkgdGltZXN0YW1wOihpbl90aW1lc3RhbXAgPyAmb19p
bl90aW1lc3RhbXAgOiBuaWwpIHZhbHVlczooaW5fdmFsdWVzID8gJm9faW5fdmFsdWVzIDogbmls
KSBwYXlsb2FkOihpbl9wYXlsb2FkID8gJm9faW5fcGF5bG9hZCA6IG5pbCkgZGF0YWJhc2VJZDoo
aW5fZGF0YWJhc2VJZCA/ICZvX2luX2RhdGFiYXNlSWQgOiBuaWwpIHNxbEVycm9yOihpbl9zcWxF
cnJvciA/ICZvX2luX3NxbEVycm9yIDogbmlsKSBzY3JlZW5Db2xvcjooaW5fc2NyZWVuQ29sb3Ig
PyAmb19pbl9zY3JlZW5Db2xvci52YWx1ZSgpIDogbmlsKSBhbHRlcm5hdGVDb2xvcnM6KGluX2Fs
dGVybmF0ZUNvbG9ycyA/ICZvX2luX2FsdGVybmF0ZUNvbG9ycyA6IG5pbCkgcHJpbnRDb2xvcjoo
aW5fcHJpbnRDb2xvciA/ICZvX2luX3ByaW50Q29sb3IudmFsdWUoKSA6IG5pbCldOwotfQotCi12
b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlTm9PcHRp
b25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIGNvbnN0IEpTT046OkFycmF5JiBpbl9jb2x1
bW5OYW1lcywgY29uc3QgU3RyaW5nJiBpbl9ub3RlcywgZG91YmxlIGluX3RpbWVzdGFtcCwgY29u
c3QgSlNPTjo6T2JqZWN0JiBpbl92YWx1ZXMsIEpTT046OlZhbHVlIGluX3BheWxvYWQsIGludCBp
bl9kYXRhYmFzZUlkLCBjb25zdCBKU09OOjpPYmplY3QmIGluX3NxbEVycm9yLCBjb25zdCBTdHJp
bmcmIGluX3NjcmVlbkNvbG9yLCBjb25zdCBKU09OOjpBcnJheSYgaW5fYWx0ZXJuYXRlQ29sb3Jz
LCBjb25zdCBTdHJpbmcmIGluX3ByaW50Q29sb3IpCi17Ci0gICAgaWYgKCFbbV9kZWxlZ2F0ZSBy
ZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1dp
dGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazpjb2x1bW5OYW1lczpub3Rlczp0aW1lc3Rh
bXA6dmFsdWVzOnBheWxvYWQ6ZGF0YWJhc2VJZDpzcWxFcnJvcjpzY3JlZW5Db2xvcjphbHRlcm5h
dGVDb2xvcnM6cHJpbnRDb2xvcjopXSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5y
ZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5v
dEZvdW5kLCAiJ0RhdGFiYXNlLmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycycgd2FzIG5vdCBm
b3VuZCJfcyk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3Jz
KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZCBlcnJvckNhbGxiYWNrID0gXihO
U1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJv
dG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJy
b3IpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwot
ICAgIH07Ci0KLSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0cmluZz4q
LyAqY29sdW1uTmFtZXMsIE5TU3RyaW5nICpub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUldJUHJv
dG9jb2xKU09OT2JqZWN0ICp2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5bG9hZCwg
aW50IGRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKnNxbEVycm9yLCBUZXN0
UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0
cmluZz4qLyAqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09w
dGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IgcHJpbnRDb2xvcikgewotICAgICAgICBSZWY8SlNP
Tjo6T2JqZWN0PiByZXN1bHRPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgICAg
ICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihjb2x1bW5OYW1lcywgQCJj
b2x1bW5OYW1lcyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFN
RVRFUihub3RlcywgQCJub3RlcyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJ
UkVEX1BBUkFNRVRFUih2YWx1ZXMsIEAidmFsdWVzIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHBheWxvYWQsIEAicGF5bG9hZCIpOwotICAgICAgICBU
SFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihzcWxFcnJvciwgQCJzcWxFcnJv
ciIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihhbHRl
cm5hdGVDb2xvcnMsIEAiYWx0ZXJuYXRlQ29sb3JzIik7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+
c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB0b0pTT05TdHJpbmdBcnJheShjb2x1bW5OYW1lcykp
OwotICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygibm90ZXMiX3MsIG5vdGVzKTsKLSAg
ICAgICAgcmVzdWx0T2JqZWN0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgdGltZXN0YW1wKTsK
LSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgW3ZhbHVlcyB0b0pT
T05PYmplY3RdKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywg
W3BheWxvYWQgdG9KU09OT2JqZWN0XSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0SW50ZWdl
cigiZGF0YWJhc2VJZCJfcywgZGF0YWJhc2VJZCk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0
T2JqZWN0KCJzcWxFcnJvciJfcywgW3NxbEVycm9yIHRvSlNPTk9iamVjdF0pOwotICAgICAgICBy
ZXN1bHRPYmplY3QtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmco
c2NyZWVuQ29sb3IpKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJuYXRl
Q29sb3JzIl9zLCB0b0pTT05TdHJpbmdBcnJheShhbHRlcm5hdGVDb2xvcnMpKTsKLSAgICAgICAg
cmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmco
cHJpbnRDb2xvcikpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2Uo
cmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdE9iamVjdCksIGZhbHNlKTsKLSAgICB9OwotCi0gICAg
TlNBcnJheS8qPE5TU3RyaW5nPiovICpvX2luX2NvbHVtbk5hbWVzID0gdG9PYmpDU3RyaW5nQXJy
YXkoJmluX2NvbHVtbk5hbWVzKTsKLSAgICBOU1N0cmluZyAqb19pbl9ub3RlcyA9IGluX25vdGVz
OwotICAgIGRvdWJsZSBvX2luX3RpbWVzdGFtcCA9IGluX3RpbWVzdGFtcDsKLSAgICBSV0lQcm90
b2NvbEpTT05PYmplY3QgKm9faW5fdmFsdWVzID0gW1tbUldJUHJvdG9jb2xKU09OT2JqZWN0IGFs
bG9jXSBpbml0V2l0aEpTT05PYmplY3Q6JmluX3ZhbHVlc10gYXV0b3JlbGVhc2VdOwotICAgIFJX
SVByb3RvY29sSlNPTk9iamVjdCAqb19pbl9wYXlsb2FkID0gW1tbUldJUHJvdG9jb2xKU09OT2Jq
ZWN0IGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6JmluX3BheWxvYWRdIGF1dG9yZWxlYXNlXTsK
LSAgICBpbnQgb19pbl9kYXRhYmFzZUlkID0gaW5fZGF0YWJhc2VJZDsKLSAgICBUZXN0UHJvdG9j
b2xEYXRhYmFzZUVycm9yICpvX2luX3NxbEVycm9yID0gW1tbVGVzdFByb3RvY29sRGF0YWJhc2VF
cnJvciBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0OiZpbl9zcWxFcnJvcl0gYXV0b3JlbGVhc2Vd
OwotICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycz4gb19pbl9z
Y3JlZW5Db2xvciA9IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1h
cnlDb2xvcnM+KGluX3NjcmVlbkNvbG9yKTsKLSAgICBpZiAoIW9faW5fc2NyZWVuQ29sb3IpIHsK
LSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5k
RGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgIlBhcmFtZXRlciAnc2NyZWVuQ29sb3InIG9mIG1l
dGhvZCAnRGF0YWJhc2UuZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzJyBjYW5ub3QgYmUgcHJv
Y2Vzc2VkIl9zKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBOU0FycmF5Lyo8TlNTdHJp
bmc+Ki8gKm9faW5fYWx0ZXJuYXRlQ29sb3JzID0gdG9PYmpDU3RyaW5nQXJyYXkoJmluX2FsdGVy
bmF0ZUNvbG9ycyk7Ci0gICAgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9P
cHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yPiBvX2luX3ByaW50Q29sb3IgPSBmcm9tUHJvdG9j
b2xTdHJpbmc8VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQ
cmludENvbG9yPihpbl9wcmludENvbG9yKTsKLSAgICBpZiAoIW9faW5fcHJpbnRDb2xvcikgewot
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmRE
aXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCAiUGFyYW1ldGVyICdwcmludENvbG9yJyBvZiBtZXRo
b2QgJ0RhdGFiYXNlLmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycycgY2Fubm90IGJlIHByb2Nl
c3NlZCJfcyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBbbV9kZWxlZ2F0ZSBleGVj
dXRlTm9PcHRpb25hbFBhcmFtZXRlcnNXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1
Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2sgY29sdW1uTmFtZXM6b19pbl9jb2x1bW5OYW1l
cyBub3RlczpvX2luX25vdGVzIHRpbWVzdGFtcDpvX2luX3RpbWVzdGFtcCB2YWx1ZXM6b19pbl92
YWx1ZXMgcGF5bG9hZDpvX2luX3BheWxvYWQgZGF0YWJhc2VJZDpvX2luX2RhdGFiYXNlSWQgc3Fs
RXJyb3I6b19pbl9zcWxFcnJvciBzY3JlZW5Db2xvcjpvX2luX3NjcmVlbkNvbG9yLnZhbHVlKCkg
YWx0ZXJuYXRlQ29sb3JzOm9faW5fYWx0ZXJuYXRlQ29sb3JzIHByaW50Q29sb3I6b19pbl9wcmlu
dENvbG9yLnZhbHVlKCldOwotfQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJz
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9y
dCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmls
aXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6
IE5TT2JqZWN0Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluLCBzZXR0ZXI9c2V0RGF0YWJh
c2VIYW5kbGVyOikgaWQ8VGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyPiBkYXRhYmFz
ZUhhbmRsZXI7Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0
aW9uLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNh
bGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCi0KLSNp
bXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNr
ZW5kRGlzcGF0Y2hlcnMuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3Bh
dGNoYWJsZUFnZW50Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3Bl
Y3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVy
bmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0K
LUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCi17Ci0gICAgQXVnbWVu
dGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKLSAgICBpZDxUZXN0UHJvdG9j
b2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+IF9kYXRhYmFzZUhhbmRsZXI7Ci19Ci0KLS0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxl
ciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxm
KQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBfY29u
dHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVh
bGxvYwotewotICAgIFtfZGF0YWJhc2VIYW5kbGVyIHJlbGVhc2VdOwotICAgIFtzdXBlciBkZWFs
bG9jXTsKLX0KLQotLSAodm9pZClzZXREYXRhYmFzZUhhbmRsZXI6KGlkPFRlc3RQcm90b2NvbERh
dGFiYXNlRG9tYWluSGFuZGxlcj4paGFuZGxlcgotewotICAgIGlmIChoYW5kbGVyID09IF9kYXRh
YmFzZUhhbmRsZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIFtfZGF0YWJhc2VIYW5kbGVyIHJl
bGVhc2VdOwotICAgIF9kYXRhYmFzZUhhbmRsZXIgPSBbaGFuZGxlciByZXRhaW5dOwotCi0gICAg
YXV0byBhbHRlcm5hdGVEaXNwYXRjaGVyID0gbWFrZVVuaXF1ZTxPYmpDSW5zcGVjdG9yRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7Ci0gICAgYXV0byBhbHRlcm5hdGVBZ2VudCA9
IG1ha2VVbmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8RGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlciwgQWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4+KCJEYXRhYmFzZSJf
cywgKl9jb250cm9sbGVyLCBXVEZNb3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIpKTsKLSAgICBfY29u
dHJvbGxlci0+YXBwZW5kRXh0cmFBZ2VudChXVEZNb3ZlKGFsdGVybmF0ZUFnZW50KSk7Ci19Ci0K
LS0gKGlkPFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4pZGF0YWJhc2VIYW5kbGVy
Ci17Ci0gICAgcmV0dXJuIF9kYXRhYmFzZUhhbmRsZXI7Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJU
ZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMuaCIKLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJ
bnNwZWN0b3I7Ci0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJz
Lm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1l
dGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNp
bXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3Iv
UldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+Ci0KLQotQGNsYXNzIFRlc3RQcm90b2NvbERhdGFiYXNl
RXJyb3I7Ci0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbFBsYXRmb3Jt
KSB7Ci0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1BbGwsCi0gICAgVGVzdFByb3RvY29sUGxhdGZv
cm1HZW5lcmljLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TLAotICAgIFRlc3RQcm90b2Nv
bFBsYXRmb3JtTWFjT1MsCi19OwotCi0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQ
cm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycykgewotICAgIFRlc3RQcm90b2NvbERhdGFiYXNl
UHJpbWFyeUNvbG9yc1JlZCwKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNH
cmVlbiwKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNCbHVlLAotfTsKLQot
dHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxs
T3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvcikgewotICAgIFRlc3RQcm90b2NvbERhdGFiYXNl
RXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JDeWFuLAotICAgIFRlc3RQcm90
b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JNYWdlbnRh
LAotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1By
aW50Q29sb3JZZWxsb3csCi0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9u
YWxQYXJhbWV0ZXJzUHJpbnRDb2xvckJsYWNrLAotfTsKLQotdHlwZWRlZiBOU19FTlVNKE5TSW50
ZWdlciwgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJp
bnRDb2xvcikgewotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFy
YW1ldGVyc1ByaW50Q29sb3JDeWFuLAotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFs
bE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JNYWdlbnRhLAotICAgIFRlc3RQcm90b2NvbERh
dGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JZZWxsb3csCi0gICAg
VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xv
ckJsYWNrLAotfTsKLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGF0
YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yKSB7Ci0gICAgVGVzdFBy
b3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQ3lhbiwK
LSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50
Q29sb3JNYWdlbnRhLAotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQ
YXJhbWV0ZXJzUHJpbnRDb2xvclllbGxvdywKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JCbGFjaywKLX07Ci0KLXR5cGVkZWYgTlNf
RU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJh
bWV0ZXJzUHJpbnRDb2xvcikgewotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0
aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckN5YW4sCi0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VF
eGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yTWFnZW50YSwKLSAgICBUZXN0UHJv
dG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JZZWxsb3cs
Ci0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmlu
dENvbG9yQmxhY2ssCi19OwotCi0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0
IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIDogUldJUHJvdG9jb2xK
U09OT2JqZWN0Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8
TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3Rv
Y29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OwotLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlIGNvZGU6KGludCljb2Rl
OwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICpt
ZXNzYWdlOwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgaW50
IGNvZGU7Ci1AZW5kCi0KLUBwcm90b2NvbCBUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRs
ZXIgPE5TT2JqZWN0PgotQG9wdGlvbmFsCi0tICh2b2lkKWV4ZWN1dGVBbGxPcHRpb25hbFBhcmFt
ZXRlcnNXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2Fs
bGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmNv
bHVtbk5hbWVzLCBOU1N0cmluZyAqKm5vdGVzLCBkb3VibGUgKnRpbWVzdGFtcCwgUldJUHJvdG9j
b2xKU09OT2JqZWN0ICoqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipwYXlsb2FkLCBp
bnQgKmRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipzcWxFcnJvciwgVGVz
dFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzICpzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5T
U3RyaW5nPiovICoqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVB
bGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yICpwcmludENvbG9yKSlzdWNjZXNzQ2FsbGJh
Y2sgY29sdW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKiljb2x1bW5OYW1lcyBub3Rl
czooTlNTdHJpbmcgKiopbm90ZXMgdGltZXN0YW1wOihkb3VibGUgKil0aW1lc3RhbXAgdmFsdWVz
OihSV0lQcm90b2NvbEpTT05PYmplY3QgKiopdmFsdWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNP
Tk9iamVjdCAqKilwYXlsb2FkIGRhdGFiYXNlSWQ6KGludCAqKWRhdGFiYXNlSWQgc3FsRXJyb3I6
KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKiopc3FsRXJyb3Igc2NyZWVuQ29sb3I6KFRlc3RQ
cm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqKXNjcmVlbkNvbG9yIGFsdGVybmF0ZUNvbG9y
czooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKWFsdGVybmF0ZUNvbG9ycyBwcmludENvbG9yOihU
ZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9y
ICopcHJpbnRDb2xvcjsKLS0gKHZvaWQpZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzV2l0aEVy
cm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nl
c3NDYWxsYmFjazoodm9pZCheKShOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmNvbHVtbk5hbWVzLCBO
U1N0cmluZyAqbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAq
dmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBU
ZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQ
cmltYXJ5Q29sb3JzIHNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmFsdGVybmF0
ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQ
cmludENvbG9yIHByaW50Q29sb3IpKXN1Y2Nlc3NDYWxsYmFjayBjb2x1bW5OYW1lczooTlNBcnJh
eS8qPE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMgbm90ZXM6KE5TU3RyaW5nICopbm90ZXMgdGlt
ZXN0YW1wOihkb3VibGUpdGltZXN0YW1wIHZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0ICop
dmFsdWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQgZGF0YWJhc2VJ
ZDooaW50KWRhdGFiYXNlSWQgc3FsRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKilz
cWxFcnJvciBzY3JlZW5Db2xvcjooVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzKXNj
cmVlbkNvbG9yIGFsdGVybmF0ZUNvbG9yczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopYWx0ZXJu
YXRlQ29sb3JzIHByaW50Q29sb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9u
YWxQYXJhbWV0ZXJzUHJpbnRDb2xvcilwcmludENvbG9yOwotQGVuZAotCi0KLQotCi0jaW1wb3J0
IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+Ci0K
LSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbEludGVybmFsLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5k
cy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIK
LSNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCi0jaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPHd0
Zi9KU09OVmFsdWVzLmg+Ci0KLQotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJu
YWwuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNh
bGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgPFdlYkluc3Bl
Y3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3Rv
ciB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KLU9wdGlvbmFsPE9iakNFbnVt
VHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOwotCi1pbmxpbmUg
U3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sUGxhdGZvcm0gdmFsdWUpCi17Ci0g
ICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDoKLSAg
ICAgICAgcmV0dXJuICJhbGwiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVy
aWM6Ci0gICAgICAgIHJldHVybiAiZ2VuZXJpYyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBs
YXRmb3JtSU9TOgotICAgICAgICByZXR1cm4gImlvcyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2Nv
bFBsYXRmb3JtTWFjT1M6Ci0gICAgICAgIHJldHVybiAibWFjb3MiX3M7Ci0gICAgfQotfQotCi10
ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sUGxhdGZvcm0+IGZyb21Qcm90
b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiYWxs
IikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOwotICAgIGlmICh2YWx1
ZSA9PSAiZ2VuZXJpYyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVy
aWM7Ci0gICAgaWYgKHZhbHVlID09ICJpb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29s
UGxhdGZvcm1JT1M7Ci0gICAgaWYgKHZhbHVlID09ICJtYWNvcyIpCi0gICAgICAgIHJldHVybiBU
ZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0K
LQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbERhdGFiYXNlUHJp
bWFyeUNvbG9ycyB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQ
cm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc1JlZDoKLSAgICAgICAgcmV0dXJuICJyZWQiX3M7
Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNHcmVlbjoKLSAgICAg
ICAgcmV0dXJuICJncmVlbiJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFy
eUNvbG9yc0JsdWU6Ci0gICAgICAgIHJldHVybiAiYmx1ZSJfczsKLSAgICB9Ci19Ci0KLXRlbXBs
YXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnM+
IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1
ZSA9PSAicmVkIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNv
bG9yc1JlZDsKLSAgICBpZiAodmFsdWUgPT0gImdyZWVuIikKLSAgICAgICAgcmV0dXJuIFRlc3RQ
cm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc0dyZWVuOwotICAgIGlmICh2YWx1ZSA9PSAiYmx1
ZSIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNCbHVl
OwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2Nv
bFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQ
cmludENvbG9yIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFBy
b3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckN5YW46
Ci0gICAgICAgIHJldHVybiAiY3lhbiJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNl
RXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JNYWdlbnRhOgotICAgICAgICBy
ZXR1cm4gIm1hZ2VudGEiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVB
bGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yWWVsbG93OgotICAgICAgICByZXR1cm4gInll
bGxvdyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFs
UGFyYW1ldGVyc1ByaW50Q29sb3JCbGFjazoKLSAgICAgICAgcmV0dXJuICJibGFjayJfczsKLSAg
ICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xEYXRhYmFz
ZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yPiBmcm9tUHJvdG9jb2xTdHJp
bmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gImN5YW4iKQotICAg
ICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0
ZXJzUHJpbnRDb2xvckN5YW47Ci0gICAgaWYgKHZhbHVlID09ICJtYWdlbnRhIikKLSAgICAgICAg
cmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1By
aW50Q29sb3JNYWdlbnRhOwotICAgIGlmICh2YWx1ZSA9PSAieWVsbG93IikKLSAgICAgICAgcmV0
dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50
Q29sb3JZZWxsb3c7Ci0gICAgaWYgKHZhbHVlID09ICJibGFjayIpCi0gICAgICAgIHJldHVybiBU
ZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9y
QmxhY2s7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotaW5saW5lIFN0cmluZyB0b1By
b3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1l
dGVyc1ByaW50Q29sb3IgdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBU
ZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9y
Q3lhbjoKLSAgICAgICAgcmV0dXJuICJjeWFuIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0
YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvck1hZ2VudGE6Ci0gICAg
ICAgIHJldHVybiAibWFnZW50YSJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhl
Y3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JZZWxsb3c6Ci0gICAgICAgIHJldHVy
biAieWVsbG93Il9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0
aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckJsYWNrOgotICAgICAgICByZXR1cm4gImJsYWNrIl9z
OwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbERh
dGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3I+IGZyb21Qcm90b2Nv
bFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiY3lhbiIp
Ci0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBh
cmFtZXRlcnNQcmludENvbG9yQ3lhbjsKLSAgICBpZiAodmFsdWUgPT0gIm1hZ2VudGEiKQotICAg
ICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0
ZXJzUHJpbnRDb2xvck1hZ2VudGE7Ci0gICAgaWYgKHZhbHVlID09ICJ5ZWxsb3ciKQotICAgICAg
ICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJz
UHJpbnRDb2xvclllbGxvdzsKLSAgICBpZiAodmFsdWUgPT0gImJsYWNrIikKLSAgICAgICAgcmV0
dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50
Q29sb3JCbGFjazsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi1pbmxpbmUgU3RyaW5n
IHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBh
cmFtZXRlcnNQcmludENvbG9yIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNh
c2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENv
bG9yQ3lhbjoKLSAgICAgICAgcmV0dXJuICJjeWFuIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29s
RGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yTWFnZW50YToKLSAg
ICAgICAgcmV0dXJuICJtYWdlbnRhIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VF
eGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yWWVsbG93OgotICAgICAgICByZXR1
cm4gInllbGxvdyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0
aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckJsYWNrOgotICAgICAgICByZXR1cm4gImJsYWNrIl9z
OwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbERh
dGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvcj4gZnJvbVByb3RvY29s
U3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJjeWFuIikK
LSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJh
bWV0ZXJzUHJpbnRDb2xvckN5YW47Ci0gICAgaWYgKHZhbHVlID09ICJtYWdlbnRhIikKLSAgICAg
ICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJz
UHJpbnRDb2xvck1hZ2VudGE7Ci0gICAgaWYgKHZhbHVlID09ICJ5ZWxsb3ciKQotICAgICAgICBy
ZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmlu
dENvbG9yWWVsbG93OwotICAgIGlmICh2YWx1ZSA9PSAiYmxhY2siKQotICAgICAgICByZXR1cm4g
VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9y
QmxhY2s7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotaW5saW5lIFN0cmluZyB0b1By
b3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0
ZXJzUHJpbnRDb2xvciB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBjYXNlIFRl
c3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckN5
YW46Ci0gICAgICAgIHJldHVybiAiY3lhbiJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFi
YXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvck1hZ2VudGE6Ci0gICAgICAg
IHJldHVybiAibWFnZW50YSJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0
ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvclllbGxvdzoKLSAgICAgICAgcmV0dXJuICJ5
ZWxsb3ciX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFs
UGFyYW1ldGVyc1ByaW50Q29sb3JCbGFjazoKLSAgICAgICAgcmV0dXJuICJibGFjayJfczsKLSAg
ICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xEYXRhYmFz
ZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3I+IGZyb21Qcm90b2NvbFN0cmlu
Zyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiY3lhbiIpCi0gICAg
ICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVy
c1ByaW50Q29sb3JDeWFuOwotICAgIGlmICh2YWx1ZSA9PSAibWFnZW50YSIpCi0gICAgICAgIHJl
dHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50
Q29sb3JNYWdlbnRhOwotICAgIGlmICh2YWx1ZSA9PSAieWVsbG93IikKLSAgICAgICAgcmV0dXJu
IFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xv
clllbGxvdzsKLSAgICBpZiAodmFsdWUgPT0gImJsYWNrIikKLSAgICAgICAgcmV0dXJuIFRlc3RQ
cm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckJsYWNr
OwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBh
cmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLQotI2ltcG9ydCAiVGVz
dFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCi0jaW1wb3J0
IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotCi11c2luZyBu
YW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucyAoRGF0YWJhc2VEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlRGF0YWJhc2VJZDooTlNOdW1i
ZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZVBy
aW1hcnlDb2xvcnM6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2Fk
OwotKyAodm9pZClfcGFyc2VDb2xvckxpc3Q6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKilvdXRW
YWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLSsgKHZvaWQpX3BhcnNlRXJyb3I6KFRlc3RQ
cm90b2NvbERhdGFiYXNlRXJyb3IgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7
Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAo
RGF0YWJhc2VEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlRGF0YWJhc2VJZDooTlNOdW1iZXIgKiop
b3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05f
Rk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU051bWJlciBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9
IChOU051bWJlciAqKXBheWxvYWQ7Ci19Ci0KLSsgKHZvaWQpX3BhcnNlUHJpbWFyeUNvbG9yczoo
TlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJP
V19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBjbGFzc10pOwotICAg
IE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycz4gcmVzdWx0ID0gSW5z
cGVjdG9yOjpmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29s
b3JzPihwYXlsb2FkKTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9FTlVNX1ZBTFVFKHJl
c3VsdCwgQCJQcmltYXJ5Q29sb3JzIik7Ci0gICAgKm91dFZhbHVlID0gQChyZXN1bHQudmFsdWUo
KSk7Ci19Ci0KLSsgKHZvaWQpX3BhcnNlQ29sb3JMaXN0OihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8g
Kiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJ
T05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gY2xhc3NdKTsK
LSAgICAqb3V0VmFsdWUgPSAoTlNBcnJheS8qPE5TU3RyaW5nPiovICopcGF5bG9hZDsKLX0KLQot
KyAodm9pZClfcGFyc2VFcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKilvdXRWYWx1
ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFE
X1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IFtb
VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRd
OwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVy
bi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9j
b2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbXBv
cnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQot
QGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IKLQotLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+
ICopcGF5bG9hZAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICBy
ZXR1cm4gbmlsOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShw
YXlsb2FkW0AibWVzc2FnZSJdLCBAIm1lc3NhZ2UiKTsKLSAgICBzZWxmLm1lc3NhZ2UgPSBwYXls
b2FkW0AibWVzc2FnZSJdOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9Q
RVJUWShwYXlsb2FkW0AiY29kZSJdLCBAImNvZGUiKTsKLSAgICBzZWxmLmNvZGUgPSBbcGF5bG9h
ZFtAImNvZGUiXSBpbnRlZ2VyVmFsdWVdOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0tIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICop
b2JqZWN0Ci17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEpTT05PYmplY3Q6W29i
amVjdCB0b0pTT05PYmplY3RdLmdldCgpXSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBy
ZXR1cm4gc2VsZjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTWVzc2FnZTooTlNTdHJp
bmcgKiltZXNzYWdlIGNvZGU6KGludCljb2RlCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBp
bml0XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JF
UVVJUkVEX1BST1BFUlRZKG1lc3NhZ2UsIEAibWVzc2FnZSIpOwotCi0gICAgc2VsZi5tZXNzYWdl
ID0gbWVzc2FnZTsKLSAgICBzZWxmLmNvZGUgPSBjb2RlOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19
Ci0KLS0gKHZvaWQpc2V0TWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlCi17Ci0gICAgW3N1cGVy
IHNldFN0cmluZzptZXNzYWdlIGZvcktleTpAIm1lc3NhZ2UiXTsKLX0KLQotLSAoTlNTdHJpbmcg
KiltZXNzYWdlCi17Ci0gICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJtZXNzYWdlIl07
Ci19Ci0KLS0gKHZvaWQpc2V0Q29kZTooaW50KWNvZGUKLXsKLSAgICBbc3VwZXIgc2V0SW50ZWdl
cjpjb2RlIGZvcktleTpAImNvZGUiXTsKLX0KLQotLSAoaW50KWNvZGUKLXsKLSAgICByZXR1cm4g
W3N1cGVyIGludGVnZXJGb3JLZXk6QCJjb2RlIl07Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9kZWZpbml0aW9ucy13
aXRoLW1hYy1wbGF0Zm9ybS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2RlZmluaXRpb25zLXdpdGgtbWFj
LXBsYXRmb3JtLmpzb24tcmVzdWx0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNGMw
ZmUzZmUzYy4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxh
dGZvcm0uanNvbi1yZXN1bHQKKysrIC9kZXYvbnVsbApAQCAtMSw4NzAgKzAsMCBAQAotIyMjIEJl
Z2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLSMjIyBFbmQgRmlsZTogSW5zcGVj
dG9yQmFja2VuZENvbW1hbmRzLmpzCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZp
bml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgot
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0j
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLQotbmFt
ZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsK
LXB1YmxpYzoKLSAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlz
cGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRp
c3BhdGNoZXIpOyB9Ci0gICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkg
Y29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQotcHJpdmF0ZToKLSAg
ICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Ci19OwotCi0K
LQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hl
cnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgt
bWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0j
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0K
LXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVz
Lmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
Ci0jaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgotI2VuZGlmCi0K
LW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0K
LSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAi
VGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1j
bGFzcyBGcm9udGVuZFJvdXRlcjsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5k
IEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RG
cm9udGVuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRl
c3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQot
bmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMg
RW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sT2JqZWN0cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
ZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9u
cy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLW5hbWVzcGFjZSBQcm90b2NvbCB7
Ci0KLQotCi0KLQotCi0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0KLSMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLQotI2luY2x1ZGUgPHd0Zi9PcHRp
b25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3Bl
Y3RvciB7Ci0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90
b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xPYmplY3RzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERp
c3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9u
cy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLQotCi1u
YW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcu
aCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVk
ZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotCi1uYW1lc3BhY2UgSW5z
cGVjdG9yIHsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xDb25maWd1cmF0aW9uLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBk
ZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wu
aD4KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNl
IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAotQGVuZAotCi0KLSMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0
aW9uLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW1wb3J0ICJUZXN0
UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0Fs
dGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdt
ZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJ
bnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCi17
Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKLX0KLQot
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JD
b250cm9sbGVyKiljb250cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBp
ZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIpOwot
ICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAo
dm9pZClkZWFsbG9jCi17Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi1AZW5kCi0KLQotIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJ
bnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNp
bXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0K
LQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9u
Lmg+Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KLQot
Ci0KLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sUGxhdGZvcm0pIHsK
LSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbCwKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdl
bmVyaWMsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1JT1MsCi0gICAgVGVzdFByb3RvY29sUGxh
dGZvcm1NYWNPUywKLX07Ci0KLQotCi0KLQotCi0KLQotCi0KLSNpbXBvcnQgPFdlYkluc3BlY3Rv
ci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4KLQotIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2wuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwu
aAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFj
LXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2Jq
ZWN0UHJpdmF0ZS5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0
b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi0KLQotCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBv
cnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KLQotbmFtZXNw
YWNlIEluc3BlY3RvciB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KLU9wdGlv
bmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUp
OwotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sUGxhdGZvcm0g
dmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0
Zm9ybUFsbDoKLSAgICAgICAgcmV0dXJuICJhbGwiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQ
bGF0Zm9ybUdlbmVyaWM6Ci0gICAgICAgIHJldHVybiAiZ2VuZXJpYyJfczsKLSAgICBjYXNlIFRl
c3RQcm90b2NvbFBsYXRmb3JtSU9TOgotICAgICAgICByZXR1cm4gImlvcyJfczsKLSAgICBjYXNl
IFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M6Ci0gICAgICAgIHJldHVybiAibWFjb3MiX3M7Ci0g
ICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sUGxhdGZv
cm0+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2
YWx1ZSA9PSAiYWxsIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOwot
ICAgIGlmICh2YWx1ZSA9PSAiZ2VuZXJpYyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQ
bGF0Zm9ybUdlbmVyaWM7Ci0gICAgaWYgKHZhbHVlID09ICJpb3MiKQotICAgICAgICByZXR1cm4g
VGVzdFByb3RvY29sUGxhdGZvcm1JT1M7Ci0gICAgaWYgKHZhbHVlID09ICJtYWNvcyIpCi0gICAg
ICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOwotICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBk
ZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5
cGVQYXJzZXIuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQ
cml2YXRlLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotCi0KLQotCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sVHlwZXMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgi
Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8V2Vi
SW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLSNpbXBvcnQgPHd0Zi9B
c3NlcnRpb25zLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yOwotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL2V4cGVjdGVkL2RvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbi1yZXN1bHQgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3Rl
ZC9kb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24tcmVzdWx0CmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBmNWI1OTE3YWEwYi4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZG9tYWluLWRl
YnVnZ2FibGVUeXBlcy5qc29uLXJlc3VsdAorKysgL2Rldi9udWxsCkBAIC0xLDEwNjMgKzAsMCBA
QAotIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0vLyBEb21haW4KLUluc3Bl
Y3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIkRvbWFpbiIsIG51bGwpOwotSW5zcGVjdG9yQmFj
a2VuZC5yZWdpc3RlckNvbW1hbmQoIkRvbWFpbi5Db21tYW5kIiwgbnVsbCwgW10sIFtdKTsKLUlu
c3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudCgiRG9tYWluLkV2ZW50IiwgbnVsbCwgW10pOwot
SW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbkRpc3BhdGNoZXIgPSBJbnNwZWN0b3JCYWNr
ZW5kLnJlZ2lzdGVyRGlzcGF0Y2hlci5iaW5kKEluc3BlY3RvckJhY2tlbmQsICJEb21haW4iKTsK
LUluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkRvbWFpbiIsIFsid2ViLXBhZ2UiXSk7
Ci0jIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0KLSNpbmNsdWRlICJUZXN0UHJv
dG9jb2xUeXBlcy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRS
b3V0ZXIuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEFsdGVybmF0ZUJhY2tl
bmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJl
ZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNo
ZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9Ci0gICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tl
bmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsg
fQotcHJpdmF0ZToKLSAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3Bh
dGNoZXI7Ci19OwotCi0KLWNsYXNzIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyIDog
cHVibGljIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFs
IH5BbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQotICAgIHZpcnR1YWwgdm9p
ZCBDb21tYW5kKGxvbmcgY2FsbElkKSA9IDA7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKLQotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQot
IyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRl
c3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1u
YW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KLSNp
ZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLWNsYXNzIEFsdGVybmF0
ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyOwotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQotCi1jbGFzcyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIgewotcHVibGljOgotICAgIHZpcnR1YWwgdm9pZCBDb21tYW5kKEVycm9yU3RyaW5nJikgPSAw
OwotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgfkRvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxl
cigpOwotfTsKLQotY2xhc3MgRG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMg
U3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8
RG9tYWluQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIERvbWFp
bkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1
ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2Up
IGZpbmFsOwotcHJpdmF0ZToKLSAgICB2b2lkIENvbW1hbmQobG9uZyByZXF1ZXN0SWQsIFJlZlB0
cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCi1wdWJsaWM6Ci0gICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRj
aGVyKEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVy
KSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KLXByaXZh
dGU6Ci0gICAgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIqIG1fYWx0ZXJuYXRlRGlz
cGF0Y2hlciB7IG51bGxwdHIgfTsKLSNlbmRpZgotcHJpdmF0ZToKLSAgICBEb21haW5CYWNrZW5k
RGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlciopOwotICAgIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2VudCB7IG51
bGxwdHIgfTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBU
ZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlz
cGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLWRl
YnVnZ2FibGVUeXBlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNo
ZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRl
ci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVz
dHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jaWYgRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVycy5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1E
b21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5Eb21haW5CYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXIoKSB7IH0KLQotUmVmPERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBEb21haW5CYWNrZW5k
RGlzcGF0Y2hlcjo6Y3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwg
RG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKLXsKLSAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdl
bnQpKTsKLX0KLQotRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkRvbWFpbkJhY2tlbmREaXNwYXRj
aGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgRG9tYWluQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKLSAgICA6IFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRj
aGVyKGJhY2tlbmREaXNwYXRjaGVyKQotICAgICwgbV9hZ2VudChhZ2VudCkKLXsKLSAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oIkRvbWFpbiJfcywg
dGhpcyk7Ci19Ci0KLXZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcg
cmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNz
YWdlKQotewotICAgIFJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7
Ci0KLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOwotICAgIG1lc3NhZ2UtPmdl
dE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsKLQotICAgIGlmIChtZXRob2QgPT0gIkNv
bW1hbmQiKQotICAgICAgICBDb21tYW5kKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7
Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVy
cm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uIiArIG1ldGhv
ZCArICInIHdhcyBub3QgZm91bmQiKTsKLX0KLQotdm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hl
cjo6Q29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKLXsKLSNp
ZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSAgICBpZiAobV9hbHRl
cm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+Q29tbWFu
ZChyZXF1ZXN0SWQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBFcnJv
clN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmpl
Y3Q6OmNyZWF0ZSgpOwotICAgIG1fYWdlbnQtPkNvbW1hbmQoZXJyb3IpOwotCi0gICAgaWYgKCFl
cnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNl
KHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVy
OjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUg
IlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQot
Y2xhc3MgRnJvbnRlbmRSb3V0ZXI7Ci0KLWNsYXNzIERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlciB7
Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgRG9tYWluRnJvbnRl
bmREaXNwYXRjaGVyKEZyb250ZW5kUm91dGVyJiBmcm9udGVuZFJvdXRlcikgOiBtX2Zyb250ZW5k
Um91dGVyKGZyb250ZW5kUm91dGVyKSB7IH0KLSAgICB2b2lkIEV2ZW50KCk7Ci1wcml2YXRlOgot
ICAgIEZyb250ZW5kUm91dGVyJiBtX2Zyb250ZW5kUm91dGVyOwotfTsKLQotfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLQot
IyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdm9pZCBEb21haW5Gcm9udGVu
ZERpc3BhdGNoZXI6OkV2ZW50KCkKLXsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2Fn
ZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygi
bWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9zKTsKLQotICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2Vu
ZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAot
Ci0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0
Zi9Bc3NlcnRpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotbmFtZXNwYWNl
IFByb3RvY29sIHsKLQotCi0KLQotCi0KLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0K
LX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmpl
Y3RzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0KLSNpbmNsdWRlIDx3dGYv
T3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJ
bnNwZWN0b3IgewotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotfSAvLyBuYW1lc3BhY2Ug
UHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sT2JqZWN0cy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tl
bmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlu
LWRlYnVnZ2FibGVUeXBlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLUBwcm90b2Nv
bCBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyOwotCi1uYW1lc3BhY2UgSW5zcGVjdG9y
IHsKLQotCi1jbGFzcyBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwg
OiBwdWJsaWMgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIgewotICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5k
RGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiBoYW5kbGVyKSB7
IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9Ci0gICAgdm9pZCBDb21tYW5kKGxvbmcgcmVxdWVzdElk
KSBmaW5hbDsKLXByaXZhdGU6Ci0gICAgUmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbERvbWFpbkRv
bWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcu
aCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVk
ZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotCi1uYW1lc3BhY2UgSW5z
cGVjdG9yIHsKLQotdm9pZCBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNv
bW1hbmQobG9uZyByZXF1ZXN0SWQpCi17Ci0gICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1Rv
U2VsZWN0b3I6QHNlbGVjdG9yKENvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJh
Y2s6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJv
cihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4u
Q29tbWFuZCcgd2FzIG5vdCBmb3VuZCJfcyk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCkt
PnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZCBl
cnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3Bh
dGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVy
OjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5k
UGVuZGluZ0Vycm9ycygpOwotICAgIH07Ci0KLSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeewot
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7Ci0gICAgfTsKLQotICAgIFttX2RlbGVnYXRlIENv
bW1hbmRXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNj
ZXNzQ2FsbGJhY2tdOwotfQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9j
b2wuaD4KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJm
YWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAotQHByb3BlcnR5IChub25h
dG9taWMsIHJldGFpbiwgc2V0dGVyPXNldERvbWFpbkhhbmRsZXI6KSBpZDxUZXN0UHJvdG9jb2xE
b21haW5Eb21haW5IYW5kbGVyPiBkb21haW5IYW5kbGVyOwotQHByb3BlcnR5IChub25hdG9taWMs
IHJlYWRvbmx5KSBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKmRvbWFp
bkV2ZW50RGlzcGF0Y2hlcjsKLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENv
bmZpZ3VyYXRpb24uaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
bi5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxl
VHlwZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0j
aW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90
b2NvbEludGVybmFsLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMu
aCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+
Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIu
aD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNw
YXRjaGVycy5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXJzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlv
biBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCi17Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JD
b250cm9sbGVyKiBfY29udHJvbGxlcjsKLSAgICBpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5I
YW5kbGVyPiBfZG9tYWluSGFuZGxlcjsKLSAgICBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVu
dERpc3BhdGNoZXIgKl9kb21haW5FdmVudERpc3BhdGNoZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29u
dHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAg
ICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBfY29udHJvbGxl
ciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwot
ewotICAgIFtfZG9tYWluSGFuZGxlciByZWxlYXNlXTsKLSAgICBbX2RvbWFpbkV2ZW50RGlzcGF0
Y2hlciByZWxlYXNlXTsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLS0gKHZvaWQpc2V0RG9t
YWluSGFuZGxlcjooaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4paGFuZGxlcgot
ewotICAgIGlmIChoYW5kbGVyID09IF9kb21haW5IYW5kbGVyKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBbX2RvbWFpbkhhbmRsZXIgcmVsZWFzZV07Ci0gICAgX2RvbWFpbkhhbmRsZXIgPSBbaGFu
ZGxlciByZXRhaW5dOwotCi0gICAgYXV0byBhbHRlcm5hdGVEaXNwYXRjaGVyID0gbWFrZVVuaXF1
ZTxPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXI+KGhhbmRsZXIpOwotICAgIGF1
dG8gYWx0ZXJuYXRlQWdlbnQgPSBtYWtlVW5pcXVlPEFsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50
PERvbWFpbkJhY2tlbmREaXNwYXRjaGVyLCBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hl
cj4+KCJEb21haW4iX3MsICpfY29udHJvbGxlciwgV1RGTW92ZShhbHRlcm5hdGVEaXNwYXRjaGVy
KSk7Ci0gICAgX2NvbnRyb2xsZXItPmFwcGVuZEV4dHJhQWdlbnQoV1RGTW92ZShhbHRlcm5hdGVB
Z2VudCkpOwotfQotCi0tIChpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPilkb21h
aW5IYW5kbGVyCi17Ci0gICAgcmV0dXJuIF9kb21haW5IYW5kbGVyOwotfQotCi0tIChUZXN0UHJv
dG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKilkb21haW5FdmVudERpc3BhdGNoZXIK
LXsKLSAgICBpZiAoIV9kb21haW5FdmVudERpc3BhdGNoZXIpCi0gICAgICAgIF9kb21haW5FdmVu
dERpc3BhdGNoZXIgPSBbW1Rlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciBh
bGxvY10gaW5pdFdpdGhDb250cm9sbGVyOl9jb250cm9sbGVyXTsKLSAgICByZXR1cm4gX2RvbWFp
bkV2ZW50RGlzcGF0Y2hlcjsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sQ29uZmlndXJhdGlvbi5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnRE
aXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1k
ZWJ1Z2dhYmxlVHlwZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0K
LXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9j
b2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIKLXsKLSAgICBBdWdtZW50YWJsZUluc3BlY3Rv
ckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhD
b250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsK
LSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJu
IG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250cm9s
bGVyOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKUV2ZW50Ci17Ci0gICAgY29uc3Qg
RnJvbnRlbmRSb3V0ZXImIHJvdXRlciA9IF9jb250cm9sbGVyLT5mcm9udGVuZFJvdXRlcigpOwot
Ci0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVu
dCJfcyk7Ci0gICAgcm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkp
OwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNo
ZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbgotLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0Zv
dW5kYXRpb24uaD4KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVj
dC5oPgotCi0KLQotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xQbGF0
Zm9ybSkgewotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsLAotICAgIFRlc3RQcm90b2NvbFBs
YXRmb3JtR2VuZXJpYywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUywKLSAgICBUZXN0UHJv
dG9jb2xQbGF0Zm9ybU1hY09TLAotfTsKLQotCi0KLQotCi1AcHJvdG9jb2wgVGVzdFByb3RvY29s
RG9tYWluRG9tYWluSGFuZGxlciA8TlNPYmplY3Q+Ci1Ab3B0aW9uYWwKLS0gKHZvaWQpQ29tbWFu
ZFdpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFj
ayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikodm9pZCkpc3VjY2Vzc0NhbGxiYWNrOwotQGVuZAot
Ci1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVz
dFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyIDogTlNPYmplY3QKLS0gKHZvaWQp
RXZlbnQ7Ci1AZW5kCi0KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRD
b21wYXRpYmlsaXR5T2JqZWN0cy5oPgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5o
IgotI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKLSNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8
d3RmL0pTT05WYWx1ZXMuaD4KLQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5F
dmVudERpc3BhdGNoZXIgKFByaXZhdGUpCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9s
bGVyOihJbnNwZWN0b3I6OkF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxl
cjsKLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2Nv
bC5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5o
PgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1U
eXBlPgotT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3Ry
aW5nJiB2YWx1ZSk7Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9j
b2xQbGF0Zm9ybSB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQ
cm90b2NvbFBsYXRmb3JtQWxsOgotICAgICAgICByZXR1cm4gImFsbCJfczsKLSAgICBjYXNlIFRl
c3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzoKLSAgICAgICAgcmV0dXJuICJnZW5lcmljIl9zOwot
ICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1JT1M6Ci0gICAgICAgIHJldHVybiAiaW9zIl9z
OwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzoKLSAgICAgICAgcmV0dXJuICJt
YWNvcyJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJv
dG9jb2xQbGF0Zm9ybT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17
Ci0gICAgaWYgKHZhbHVlID09ICJhbGwiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxh
dGZvcm1BbGw7Ci0gICAgaWYgKHZhbHVlID09ICJnZW5lcmljIikKLSAgICAgICAgcmV0dXJuIFRl
c3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzsKLSAgICBpZiAodmFsdWUgPT0gImlvcyIpCi0gICAg
ICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzsKLSAgICBpZiAodmFsdWUgPT0gIm1h
Y29zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M7Ci0gICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2xUeXBlUGFyc2VyLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2Jq
ZWN0UHJpdmF0ZS5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLQotCi0KLQot
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0K
LSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8V2ViSW5z
cGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLSNpbXBvcnQgPHd0Zi9Bc3Nl
cnRpb25zLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2Ug
SW5zcGVjdG9yOwotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmljL2V4cGVjdGVkL2RvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxl
VHlwZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2RvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFp
bi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJlc3VsdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggZDMwZjI0YjVjMzUuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2RvbWFpbi10YXJnZXRUeXBl
LW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJlc3VsdAorKysgL2Rldi9udWxs
CkBAIC0xLDEwNjMgKzAsMCBAQAotIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21t
YW5kcy5qcwotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRU
eXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLS8vIERvbWFpbgotSW5zcGVjdG9yQmFja2VuZC5y
ZWdpc3RlckRvbWFpbigiRG9tYWluIiwgbnVsbCk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVy
Q29tbWFuZCgiRG9tYWluLkNvbW1hbmQiLCBbInBhZ2UiLCAid29ya2VyIl0sIFtdLCBbXSk7Ci1J
bnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnQoIkRvbWFpbi5FdmVudCIsIG51bGwsIFtdKTsK
LUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW5EaXNwYXRjaGVyID0gSW5zcGVjdG9yQmFj
a2VuZC5yZWdpc3RlckRpc3BhdGNoZXIuYmluZChJbnNwZWN0b3JCYWNrZW5kLCAiRG9tYWluIik7
Ci1JbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJEb21haW4iLCBbInBhZ2UiXSk7Ci0j
IyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2Fi
bGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsK
LQotY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZvaWQg
c2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNo
ZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KLSAgICBC
YWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2Jh
Y2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Ci1wcml2YXRlOgotICAgIFJlZlB0cjxCYWNrZW5kRGlz
cGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKLX07Ci0KLQotY2xhc3MgQWx0ZXJuYXRlRG9t
YWluQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIg
ewotcHVibGljOgotICAgIHZpcnR1YWwgfkFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVy
KCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIENvbW1hbmQobG9uZyBjYWxsSWQpID0gMDsKLX07Ci0K
LX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5k
RGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5o
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGUtbWF0
Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9j
b2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNl
IEluc3BlY3RvciB7Ci0KLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCi0jaWYgRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi1jbGFzcyBBbHRlcm5hdGVEb21haW5C
YWNrZW5kRGlzcGF0Y2hlcjsKLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKLQotY2xhc3MgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKLXB1
YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChFcnJvclN0cmluZyYpID0gMDsKLXByb3Rl
Y3RlZDoKLSAgICB2aXJ0dWFsIH5Eb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKLX07
Ci0KLWNsYXNzIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1l
bnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPERvbWFpbkJh
Y2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBEb21haW5CYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBj
b25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5hbDsK
LXByaXZhdGU6Ci0gICAgdm9pZCBDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6
T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQotcHVibGljOgotICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0Y2hlcihBbHRl
cm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2Fs
dGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9Ci1wcml2YXRlOgotICAg
IEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKiBtX2FsdGVybmF0ZURpc3BhdGNoZXIg
eyBudWxscHRyIH07Ci0jZW5kaWYKLXByaXZhdGU6Ci0gICAgRG9tYWluQmFja2VuZERpc3BhdGNo
ZXIoQmFja2VuZERpc3BhdGNoZXImLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsK
LSAgICBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQgeyBudWxscHRyIH07
Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tl
bmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJz
LmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBl
LW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJU
ZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5j
bHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jaW5jbHVk
ZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgotI2VuZGlmCi0KLW5hbWVzcGFj
ZSBJbnNwZWN0b3IgewotCi1Eb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5Eb21haW5C
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KLQotUmVmPERvbWFpbkJhY2tlbmREaXNwYXRj
aGVyPiBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiBi
YWNrZW5kRGlzcGF0Y2hlciwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkK
LXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihiYWNr
ZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKLX0KLQotRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkRv
bWFpbkJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hl
ciwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKLSAgICA6IFN1cHBsZW1l
bnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQotICAgICwgbV9hZ2VudChh
Z2VudCkKLXsKLSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JE
b21haW4oIkRvbWFpbiJfcywgdGhpcyk7Ci19Ci0KLXZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNo
ZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpT
T046Ok9iamVjdD4mJiBtZXNzYWdlKQotewotICAgIFJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hl
cj4gcHJvdGVjdCgqdGhpcyk7Ci0KLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJz
OwotICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsKLQotICAg
IGlmIChtZXRob2QgPT0gIkNvbW1hbmQiKQotICAgICAgICBDb21tYW5kKHJlcXVlc3RJZCwgV1RG
TW92ZShwYXJhbWV0ZXJzKSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwg
IidEb21haW4uIiArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKLX0KLQotdm9pZCBEb21h
aW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046
Ok9iamVjdD4mJikKLXsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKLSAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRl
RGlzcGF0Y2hlci0+Q29tbWFuZChyZXF1ZXN0SWQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
I2VuZGlmCi0KLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBy
ZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIG1fYWdlbnQtPkNvbW1hbmQoZXJy
b3IpOwotCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0g
ICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9y
KEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOwotfQotCi19
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3Bh
dGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlLW1hdGNo
aW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29s
T2JqZWN0cy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBGcm9udGVu
ZFJvdXRlcjsKLQotY2xhc3MgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVyIHsKLSAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBEb21haW5Gcm9udGVuZERpc3BhdGNoZXIo
RnJvbnRlbmRSb3V0ZXImIGZyb250ZW5kUm91dGVyKSA6IG1fZnJvbnRlbmRSb3V0ZXIoZnJvbnRl
bmRSb3V0ZXIpIHsgfQotICAgIHZvaWQgRXZlbnQoKTsKLXByaXZhdGU6Ci0gICAgRnJvbnRlbmRS
b3V0ZXImIG1fZnJvbnRlbmRSb3V0ZXI7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
LSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBl
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCi0KLSNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXZvaWQg
RG9tYWluRnJvbnRlbmREaXNwYXRjaGVyOjpFdmVudCgpCi17Ci0gICAgUmVmPEpTT046Ok9iamVj
dD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdl
LT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7Ci0KLSAgICBtX2Zyb250
ZW5kUm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwotfQotCi19
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNw
YXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5n
LWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0K
LW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0K
LQotCi0KLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBl
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLQotI2luY2x1
ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFt
ZXNwYWNlIEluc3BlY3RvciB7Ci0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLQotCi19IC8vIG5h
bWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBkb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW5j
bHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi1AcHJvdG9jb2wgVGVzdFByb3RvY29sRG9tYWluRG9t
YWluSGFuZGxlcjsKLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotY2xhc3MgT2JqQ0luc3Bl
Y3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZURvbWFp
bkJhY2tlbmREaXNwYXRjaGVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1Ymxp
YzoKLSAgICBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3Rv
Y29sRG9tYWluRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsg
fQotICAgIHZvaWQgQ29tbWFuZChsb25nIHJlcXVlc3RJZCkgZmluYWw7Ci1wcml2YXRlOgotICAg
IFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0
ZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBkb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25m
aWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5j
bHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotCi1uYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKLQotdm9pZCBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXI6
OkNvbW1hbmQobG9uZyByZXF1ZXN0SWQpCi17Ci0gICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25k
c1RvU2VsZWN0b3I6QHNlbGVjdG9yKENvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2Fs
bGJhY2s6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xF
cnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21h
aW4uQ29tbWFuZCcgd2FzIG5vdCBmb3VuZCJfcyk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVy
KCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBp
ZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRj
aGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5z
ZW5kUGVuZGluZ0Vycm9ycygpOwotICAgIH07Ci0KLSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBe
ewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBK
U09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7Ci0gICAgfTsKLQotICAgIFttX2RlbGVnYXRl
IENvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpz
dWNjZXNzQ2FsbGJhY2tdOwotfQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVU
eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2lt
cG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgotCi1fX2F0dHJpYnV0ZV9fKCh2aXNp
YmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
biA6IE5TT2JqZWN0Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluLCBzZXR0ZXI9c2V0RG9t
YWluSGFuZGxlcjopIGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IGRvbWFpbkhh
bmRsZXI7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFRlc3RQcm90b2NvbERvbWFp
bkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqZG9tYWluRXZlbnREaXNwYXRjaGVyOwotQGVuZAotCi0K
LSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVU
eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2lt
cG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2xJbnRlcm5hbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgi
Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgot
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+
Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0
Y2hlcnMuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVycy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW1wbGVtZW50YXRpb24g
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29u
dHJvbGxlciogX2NvbnRyb2xsZXI7Ci0gICAgaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFu
ZGxlcj4gX2RvbWFpbkhhbmRsZXI7Ci0gICAgVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnRE
aXNwYXRjaGVyICpfZG9tYWluRXZlbnREaXNwYXRjaGVyOwotfQotCi0tIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRy
b2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAg
ICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRyb2xsZXIg
PSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWRlYWxsb2MKLXsK
LSAgICBbX2RvbWFpbkhhbmRsZXIgcmVsZWFzZV07Ci0gICAgW19kb21haW5FdmVudERpc3BhdGNo
ZXIgcmVsZWFzZV07Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi0tICh2b2lkKXNldERvbWFp
bkhhbmRsZXI6KGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+KWhhbmRsZXIKLXsK
LSAgICBpZiAoaGFuZGxlciA9PSBfZG9tYWluSGFuZGxlcikKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgW19kb21haW5IYW5kbGVyIHJlbGVhc2VdOwotICAgIF9kb21haW5IYW5kbGVyID0gW2hhbmRs
ZXIgcmV0YWluXTsKLQotICAgIGF1dG8gYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IG1ha2VVbmlxdWU8
T2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyPihoYW5kbGVyKTsKLSAgICBhdXRv
IGFsdGVybmF0ZUFnZW50ID0gbWFrZVVuaXF1ZTxBbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudDxE
b21haW5CYWNrZW5kRGlzcGF0Y2hlciwgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXI+
PigiRG9tYWluIl9zLCAqX2NvbnRyb2xsZXIsIFdURk1vdmUoYWx0ZXJuYXRlRGlzcGF0Y2hlcikp
OwotICAgIF9jb250cm9sbGVyLT5hcHBlbmRFeHRyYUFnZW50KFdURk1vdmUoYWx0ZXJuYXRlQWdl
bnQpKTsKLX0KLQotLSAoaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4pZG9tYWlu
SGFuZGxlcgotewotICAgIHJldHVybiBfZG9tYWluSGFuZGxlcjsKLX0KLQotLSAoVGVzdFByb3Rv
Y29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyICopZG9tYWluRXZlbnREaXNwYXRjaGVyCi17
Ci0gICAgaWYgKCFfZG9tYWluRXZlbnREaXNwYXRjaGVyKQotICAgICAgICBfZG9tYWluRXZlbnRE
aXNwYXRjaGVyID0gW1tUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgYWxs
b2NdIGluaXRXaXRoQ29udHJvbGxlcjpfY29udHJvbGxlcl07Ci0gICAgcmV0dXJuIF9kb21haW5F
dmVudERpc3BhdGNoZXI7Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24ubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlz
cGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFy
Z2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRl
cm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBv
cnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBp
bXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIKLXsK
LSAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotfQotCi0t
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNv
bnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlm
ICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0g
ICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2
b2lkKUV2ZW50Ci17Ci0gICAgY29uc3QgRnJvbnRlbmRSb3V0ZXImIHJvdXRlciA9IF9jb250cm9s
bGVyLT5mcm9udGVuZFJvdXRlcigpOwotCi0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3Nh
Z2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmco
Im1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7Ci0gICAgcm91dGVyLnNlbmRFdmVudChqc29u
TWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2wuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRU
eXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlv
bi5oPgotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+Ci0K
LQotCi0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbFBsYXRmb3JtKSB7
Ci0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1BbGwsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1H
ZW5lcmljLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TLAotICAgIFRlc3RQcm90b2NvbFBs
YXRmb3JtTWFjT1MsCi19OwotCi0KLQotCi0KLUBwcm90b2NvbCBUZXN0UHJvdG9jb2xEb21haW5E
b21haW5IYW5kbGVyIDxOU09iamVjdD4KLUBvcHRpb25hbAotLSAodm9pZClDb21tYW5kV2l0aEVy
cm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nl
c3NDYWxsYmFjazoodm9pZCheKSh2b2lkKSlzdWNjZXNzQ2FsbGJhY2s7Ci1AZW5kCi0KLV9fYXR0
cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9j
b2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgOiBOU09iamVjdAotLSAodm9pZClFdmVudDsK
LUBlbmQKLQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGli
aWxpdHlPYmplY3RzLmg+Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5
cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1w
b3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2
YXRlLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRy
b2xsZXIuaD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLUBpbnRlcmZhY2UgVGVzdFBy
b3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyIChQcml2YXRlKQotLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoQ29udHJvbGxlcjooSW5zcGVjdG9yOjpBdWdtZW50YWJsZUluc3BlY3RvckNv
bnRyb2xsZXIqKWNvbnRyb2xsZXI7Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xJbnRlcm5hbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBl
LW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9y
dCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgotCi1uYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgotT3B0aW9u
YWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7
Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xQbGF0Zm9ybSB2
YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRm
b3JtQWxsOgotICAgICAgICByZXR1cm4gImFsbCJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBs
YXRmb3JtR2VuZXJpYzoKLSAgICAgICAgcmV0dXJuICJnZW5lcmljIl9zOwotICAgIGNhc2UgVGVz
dFByb3RvY29sUGxhdGZvcm1JT1M6Ci0gICAgICAgIHJldHVybiAiaW9zIl9zOwotICAgIGNhc2Ug
VGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzoKLSAgICAgICAgcmV0dXJuICJtYWNvcyJfczsKLSAg
ICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xQbGF0Zm9y
bT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZh
bHVlID09ICJhbGwiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1BbGw7Ci0g
ICAgaWYgKHZhbHVlID09ICJnZW5lcmljIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBs
YXRmb3JtR2VuZXJpYzsKLSAgICBpZiAodmFsdWUgPT0gImlvcyIpCi0gICAgICAgIHJldHVybiBU
ZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzsKLSAgICBpZiAodmFsdWUgPT0gIm1hY29zIikKLSAgICAg
ICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M7Ci0gICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRv
bWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBv
cnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQ
cm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7
Ci0KLQotCi0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5t
bQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVi
dWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2Nv
bEpTT05PYmplY3RQcml2YXRlLmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9y
dCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0j
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9kb21h
aW4tdGFyZ2V0VHlwZXMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9kb21haW4tdGFyZ2V0VHlwZXMuanNv
bi1yZXN1bHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4OTQ4YTJmNzQ3Li4wMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZ2VuZXJpYy9leHBlY3RlZC9kb21haW4tdGFyZ2V0VHlwZXMuanNvbi1yZXN1bHQKKysrIC9k
ZXYvbnVsbApAQCAtMSwxMDYzICswLDAgQEAKLSMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNr
ZW5kQ29tbWFuZHMuanMKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4t
dGFyZ2V0VHlwZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0vLyBEb21haW4KLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIkRvbWFpbiIs
IFsicGFnZSJdKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJEb21haW4uQ29t
bWFuZCIsIFsicGFnZSJdLCBbXSwgW10pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckV2ZW50
KCJEb21haW4uRXZlbnQiLCBbInBhZ2UiXSwgW10pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rl
ckRvbWFpbkRpc3BhdGNoZXIgPSBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRGlzcGF0Y2hlci5i
aW5kKEluc3BlY3RvckJhY2tlbmQsICJEb21haW4iKTsKLUluc3BlY3RvckJhY2tlbmQuYWN0aXZh
dGVEb21haW4oIkRvbWFpbiIsIG51bGwpOwotIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5k
Q29tbWFuZHMuanMKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0
Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRU
eXBlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNw
cmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
Ci0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0K
LWNsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2b2lkIHNl
dEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVy
KSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9Ci0gICAgQmFj
a2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNr
ZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQotcHJpdmF0ZToKLSAgICBSZWZQdHI8QmFja2VuZERpc3Bh
dGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Ci19OwotCi0KLWNsYXNzIEFsdGVybmF0ZURvbWFp
bkJhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsK
LXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5BbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlcigp
IHsgfQotICAgIHZpcnR1YWwgdm9pZCBDb21tYW5kKGxvbmcgY2FsbElkKSA9IDA7Ci19OwotCi19
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQotIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERp
c3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlcy5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25j
ZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10eXBlZGVmIFN0cmluZyBF
cnJvclN0cmluZzsKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQotY2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXI7Ci0jZW5kaWYgLy8gRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0KLWNsYXNzIERvbWFpbkJhY2tl
bmREaXNwYXRjaGVySGFuZGxlciB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIENvbW1hbmQo
RXJyb3JTdHJpbmcmKSA9IDA7Ci1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB+RG9tYWluQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyKCk7Ci19OwotCi1jbGFzcyBEb21haW5CYWNrZW5kRGlzcGF0Y2hl
ciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6
Ci0gICAgc3RhdGljIFJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmRE
aXNwYXRjaGVyJiwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdm9pZCBk
aXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpP
YmplY3Q+JiYgbWVzc2FnZSkgZmluYWw7Ci1wcml2YXRlOgotICAgIHZvaWQgQ29tbWFuZChsb25n
IHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKLSNpZiBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLXB1YmxpYzoKLSAgICB2b2lkIHNl
dEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIqIGFs
dGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlz
cGF0Y2hlcjsgfQotcHJpdmF0ZToKLSAgICBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hl
ciogbV9hbHRlcm5hdGVEaXNwYXRjaGVyIHsgbnVsbHB0ciB9OwotI2VuZGlmCi1wcml2YXRlOgot
ICAgIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiwgRG9tYWluQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyKiBtX2FnZW50IHsgbnVsbHB0ciB9OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
Ci0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEJh
Y2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
RnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUg
PHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQot
I2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotI2luY2x1ZGUgIlRl
c3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgSW5z
cGVjdG9yIHsKLQotRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+RG9tYWluQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9Ci0KLVJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4g
RG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2Vu
ZERpc3BhdGNoZXIsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCi17Ci0g
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRG9tYWluQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERp
c3BhdGNoZXIsIGFnZW50KSk7Ci19Ci0KLURvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpEb21haW5C
YWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIERv
bWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCi0gICAgOiBTdXBwbGVtZW50YWxC
YWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKLSAgICAsIG1fYWdlbnQoYWdlbnQp
Ci17Ci0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWlu
KCJEb21haW4iX3MsIHRoaXMpOwotfQotCi12b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpk
aXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpP
YmplY3Q+JiYgbWVzc2FnZSkKLXsKLSAgICBSZWY8RG9tYWluQmFja2VuZERpc3BhdGNoZXI+IHBy
b3RlY3QoKnRoaXMpOwotCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVyczsKLSAg
ICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFyYW1ldGVycyk7Ci0KLSAgICBpZiAo
bWV0aG9kID09ICJDb21tYW5kIikKLSAgICAgICAgQ29tbWFuZChyZXF1ZXN0SWQsIFdURk1vdmUo
cGFyYW1ldGVycykpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVw
b3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRG9t
YWluLiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7Ci19Ci0KLXZvaWQgRG9tYWluQmFj
a2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+JiYpCi17Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0g
ICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3Bh
dGNoZXItPkNvbW1hbmQocmVxdWVzdElkKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRp
ZgotCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtX2FnZW50LT5Db21tYW5kKGVycm9yKTsK
LQotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOwotICAgIGVs
c2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNr
ZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVy
cy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZXMuanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQot
I2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVl
cy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVj
dG9yIHsKLQotY2xhc3MgRnJvbnRlbmRSb3V0ZXI7Ci0KLWNsYXNzIERvbWFpbkZyb250ZW5kRGlz
cGF0Y2hlciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgRG9t
YWluRnJvbnRlbmREaXNwYXRjaGVyKEZyb250ZW5kUm91dGVyJiBmcm9udGVuZFJvdXRlcikgOiBt
X2Zyb250ZW5kUm91dGVyKGZyb250ZW5kUm91dGVyKSB7IH0KLSAgICB2b2lkIEV2ZW50KCk7Ci1w
cml2YXRlOgotICAgIEZyb250ZW5kUm91dGVyJiBtX2Zyb250ZW5kUm91dGVyOwotfTsKLQotfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNo
ZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlcy5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi12b2lkIERvbWFpbkZy
b250ZW5kRGlzcGF0Y2hlcjo6RXZlbnQoKQotewotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25N
ZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3Ry
aW5nKCJtZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOwotCi0gICAgbV9mcm9udGVuZFJvdXRl
ci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMu
Y3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZXMuanNvbgotLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLW5hbWVzcGFj
ZSBQcm90b2NvbCB7Ci0KLQotCi0KLQotCi0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAot
Ci19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2Jq
ZWN0cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlcy5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0KLSNpbmNsdWRlIDx3dGYvT3B0
aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNw
ZWN0b3IgewotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJv
dG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sT2JqZWN0cy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmRE
aXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRh
cmdldFR5cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNw
YXRjaGVycy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQotQHByb3RvY29sIFRlc3RQ
cm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI7Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0K
LWNsYXNzIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1Ymxp
YyBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciB7Ci0gICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRj
aGVyKGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxl
Z2F0ZSA9IGhhbmRsZXI7IH0KLSAgICB2b2lkIENvbW1hbmQobG9uZyByZXF1ZXN0SWQpIGZpbmFs
OwotcHJpdmF0ZToKLSAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFu
ZGxlcj4+IG1fZGVsZWdhdGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0
ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgIlRlc3RQcm90
b2NvbEludGVybmFsLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgi
Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0K
LXZvaWQgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcg
cmVxdWVzdElkKQotewotICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBz
ZWxlY3RvcihDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0g
ICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElk
LCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRG9tYWluLkNvbW1hbmQnIHdh
cyBub3QgZm91bmQiX3MpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGlu
Z0Vycm9ycygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWQgZXJyb3JDYWxsYmFj
ayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJl
cG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJy
b3IsIGVycm9yKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJv
cnMoKTsKLSAgICB9OwotCi0gICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKSwgZmFsc2UpOwotICAgIH07Ci0KLSAgICBbbV9kZWxlZ2F0ZSBDb21tYW5kV2l0aEVy
cm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNr
XTsKLX0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbENvbmZpZ3VyYXRpb24uaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRv
bWFpbi10YXJnZXRUeXBlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KLQotX19hdHRy
aWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAotQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbiwg
c2V0dGVyPXNldERvbWFpbkhhbmRsZXI6KSBpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5k
bGVyPiBkb21haW5IYW5kbGVyOwotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBUZXN0
UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKmRvbWFpbkV2ZW50RGlzcGF0Y2hl
cjsKLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAot
Ci0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlcy5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24uaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNp
bXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotI2ltcG9ydCA8SmF2YVNj
cmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KLSNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLQotdXNpbmcg
bmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZp
Z3VyYXRpb24KLXsKLSAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9s
bGVyOwotICAgIGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IF9kb21haW5IYW5k
bGVyOwotICAgIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqX2RvbWFp
bkV2ZW50RGlzcGF0Y2hlcjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxl
cjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCi17Ci0gICAgc2Vs
ZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0g
ICAgQVNTRVJUKGNvbnRyb2xsZXIpOwotICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKLSAg
ICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgW19kb21haW5IYW5k
bGVyIHJlbGVhc2VdOwotICAgIFtfZG9tYWluRXZlbnREaXNwYXRjaGVyIHJlbGVhc2VdOwotICAg
IFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAodm9pZClzZXREb21haW5IYW5kbGVyOihpZDxUZXN0
UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiloYW5kbGVyCi17Ci0gICAgaWYgKGhhbmRsZXIg
PT0gX2RvbWFpbkhhbmRsZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIFtfZG9tYWluSGFuZGxl
ciByZWxlYXNlXTsKLSAgICBfZG9tYWluSGFuZGxlciA9IFtoYW5kbGVyIHJldGFpbl07Ci0KLSAg
ICBhdXRvIGFsdGVybmF0ZURpc3BhdGNoZXIgPSBtYWtlVW5pcXVlPE9iakNJbnNwZWN0b3JEb21h
aW5CYWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7Ci0gICAgYXV0byBhbHRlcm5hdGVBZ2VudCA9
IG1ha2VVbmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8RG9tYWluQmFja2VuZERpc3Bh
dGNoZXIsIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyPj4oIkRvbWFpbiJfcywgKl9j
b250cm9sbGVyLCBXVEZNb3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIpKTsKLSAgICBfY29udHJvbGxl
ci0+YXBwZW5kRXh0cmFBZ2VudChXVEZNb3ZlKGFsdGVybmF0ZUFnZW50KSk7Ci19Ci0KLS0gKGlk
PFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+KWRvbWFpbkhhbmRsZXIKLXsKLSAgICBy
ZXR1cm4gX2RvbWFpbkhhbmRsZXI7Ci19Ci0KLS0gKFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2
ZW50RGlzcGF0Y2hlciAqKWRvbWFpbkV2ZW50RGlzcGF0Y2hlcgotewotICAgIGlmICghX2RvbWFp
bkV2ZW50RGlzcGF0Y2hlcikKLSAgICAgICAgX2RvbWFpbkV2ZW50RGlzcGF0Y2hlciA9IFtbVGVz
dFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyIGFsbG9jXSBpbml0V2l0aENvbnRy
b2xsZXI6X2NvbnRyb2xsZXJdOwotICAgIHJldHVybiBfZG9tYWluRXZlbnREaXNwYXRjaGVyOwot
fQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1t
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVzLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFBy
b3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
LmgiCi0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVj
dG9yOwotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNw
YXRjaGVyCi17Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxl
cjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJ
bnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0
XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJUKGNvbnRy
b2xsZXIpOwotICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1cm4gc2VsZjsK
LX0KLQotLSAodm9pZClFdmVudAotewotICAgIGNvbnN0IEZyb250ZW5kUm91dGVyJiByb3V0ZXIg
PSBfY29udHJvbGxlci0+ZnJvbnRlbmRSb3V0ZXIoKTsKLQotICAgIFJlZjxKU09OOjpPYmplY3Q+
IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+
c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOwotICAgIHJvdXRlci5zZW5k
RXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKLX0KLQotQGVuZAotCi0KLSMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21h
aW4tdGFyZ2V0VHlwZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2ltcG9ydCA8V2Vi
SW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgotCi0KLQotCi10eXBlZGVmIE5TX0VO
VU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xQbGF0Zm9ybSkgewotICAgIFRlc3RQcm90b2NvbFBs
YXRmb3JtQWxsLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYywKLSAgICBUZXN0UHJv
dG9jb2xQbGF0Zm9ybUlPUywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TLAotfTsKLQot
Ci0KLQotCi1AcHJvdG9jb2wgVGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlciA8TlNPYmpl
Y3Q+Ci1Ab3B0aW9uYWwKLS0gKHZvaWQpQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4p
KE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXiko
dm9pZCkpc3VjY2Vzc0NhbGxiYWNrOwotQGVuZAotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5
ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnRE
aXNwYXRjaGVyIDogTlNPYmplY3QKLS0gKHZvaWQpRXZlbnQ7Ci1AZW5kCi0KLQotI2ltcG9ydCA8
V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgotCi0j
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xJbnRlcm5hbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRh
cmdldFR5cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2Jq
ZWN0UHJpdmF0ZS5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0
b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi1AaW50ZXJmYWNl
IFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAoUHJpdmF0ZSkKLS0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEluc3BlY3Rvcjo6QXVnbWVudGFibGVJbnNw
ZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyOwotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sSW50ZXJuYWwuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFy
Z2V0VHlwZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90
b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KLU9wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVBy
b3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOwotCi1pbmxpbmUgU3RyaW5nIHRvUHJv
dG9jb2xTdHJpbmcoVGVzdFByb3RvY29sUGxhdGZvcm0gdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZh
bHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDoKLSAgICAgICAgcmV0dXJu
ICJhbGwiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM6Ci0gICAgICAg
IHJldHVybiAiZ2VuZXJpYyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOgot
ICAgICAgICByZXR1cm4gImlvcyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFj
T1M6Ci0gICAgICAgIHJldHVybiAibWFjb3MiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1p
bmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sUGxhdGZvcm0+IGZyb21Qcm90b2NvbFN0cmluZyhj
b25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiYWxsIikKLSAgICAgICAg
cmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOwotICAgIGlmICh2YWx1ZSA9PSAiZ2VuZXJp
YyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM7Ci0gICAgaWYg
KHZhbHVlID09ICJpb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1JT1M7
Ci0gICAgaWYgKHZhbHVlID09ICJtYWNvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQ
bGF0Zm9ybU1hY09TOwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZXMuanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0j
aW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3Iv
UldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVj
dG9yOwotCi0KLQotCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVzLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29s
SW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0j
aW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotI2lt
cG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVz
aW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xU
eXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1z
aXplcy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6
ZXMuanNvbi1yZXN1bHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjMDdjYjEzNDdm
Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNp
emVzLmpzb24tcmVzdWx0CisrKyAvZGV2L251bGwKQEAgLTEsMTQ1NSArMCwwIEBACi0jIyMgQmVn
aW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLS8vIE5ldHdvcmsxCi1J
bnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJOZXR3b3JrMSIsIG51bGwpOwotSW5zcGVj
dG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIk5ldHdvcmsxLmxvYWRSZXNvdXJjZTEiLCBudWxs
LCBbXSwgW10pOwotSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiTmV0d29yazEiLCBu
dWxsKTsKLQotLy8gTmV0d29yazMKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIk5l
dHdvcmszIiwgbnVsbCk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiTmV0d29y
azMubG9hZFJlc291cmNlMSIsIG51bGwsIFtdLCBbXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lz
dGVyQ29tbWFuZCgiTmV0d29yazMubG9hZFJlc291cmNlMiIsIG51bGwsIFtdLCBbXSk7Ci1JbnNw
ZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiTmV0d29yazMubG9hZFJlc291cmNlMyIsIG51
bGwsIFtdLCBbXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiTmV0d29yazMu
bG9hZFJlc291cmNlNCIsIG51bGwsIFtdLCBbXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVy
Q29tbWFuZCgiTmV0d29yazMubG9hZFJlc291cmNlNSIsIG51bGwsIFtdLCBbXSk7Ci1JbnNwZWN0
b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiTmV0d29yazMubG9hZFJlc291cmNlNiIsIG51bGws
IFtdLCBbXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiTmV0d29yazMubG9h
ZFJlc291cmNlNyIsIG51bGwsIFtdLCBbXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9t
YWluKCJOZXR3b3JrMyIsIG51bGwpOwotIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29t
bWFuZHMuanMKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hl
cnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5
aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKLSNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0KLW5hbWVzcGFjZSBJ
bnNwZWN0b3IgewotCi1jbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6
Ci0gICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+
JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVy
KTsgfQotICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsg
cmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KLXByaXZhdGU6Ci0gICAgUmVmUHRy
PEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwotfTsKLQotCi1jbGFzcyBB
bHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJhY2tl
bmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5BbHRlcm5hdGVOZXR3b3JrMUJh
Y2tlbmREaXNwYXRjaGVyKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTEobG9u
ZyBjYWxsSWQpID0gMDsKLX07Ci1jbGFzcyBBbHRlcm5hdGVOZXR3b3JrM0JhY2tlbmREaXNwYXRj
aGVyIDogcHVibGljIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2
aXJ0dWFsIH5BbHRlcm5hdGVOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyKCkgeyB9Ci0gICAgdmly
dHVhbCB2b2lkIGxvYWRSZXNvdXJjZTEobG9uZyBjYWxsSWQpID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgbG9hZFJlc291cmNlMihsb25nIGNhbGxJZCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBsb2Fk
UmVzb3VyY2UzKGxvbmcgY2FsbElkKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJj
ZTQobG9uZyBjYWxsSWQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlNShsb25n
IGNhbGxJZCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2U2KGxvbmcgY2FsbElk
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTcobG9uZyBjYWxsSWQpID0gMDsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jZW5kaWYgLy8gRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZh
cnlpbmctY29tbWFuZC1zaXplcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0
cy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0
b3IgewotCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQotI2lmIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotY2xhc3MgQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5k
RGlzcGF0Y2hlcjsKLWNsYXNzIEFsdGVybmF0ZU5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI7Ci0j
ZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0KLWNsYXNz
IE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFs
IHZvaWQgbG9hZFJlc291cmNlMShFcnJvclN0cmluZyYpID0gMDsKLXByb3RlY3RlZDoKLSAgICB2
aXJ0dWFsIH5OZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOwotfTsKLQotY2xhc3Mg
TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewotcHVibGljOgotICAgIHZpcnR1YWwg
dm9pZCBsb2FkUmVzb3VyY2UxKEVycm9yU3RyaW5nJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBs
b2FkUmVzb3VyY2UyKEVycm9yU3RyaW5nJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVz
b3VyY2UzKEVycm9yU3RyaW5nJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2U0
KEVycm9yU3RyaW5nJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2U1KEVycm9y
U3RyaW5nJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2U2KEVycm9yU3RyaW5n
JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2U3KEVycm9yU3RyaW5nJikgPSAw
OwotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgfk5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyKCk7Ci19OwotCi1jbGFzcyBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVi
bGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMg
UmVmPE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYs
IE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdm9pZCBkaXNwYXRjaChs
b25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYg
bWVzc2FnZSkgZmluYWw7Ci1wcml2YXRlOgotICAgIHZvaWQgbG9hZFJlc291cmNlMShsb25nIHJl
cXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKLSNpZiBFTkFCTEUo
SU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLXB1YmxpYzoKLSAgICB2b2lkIHNldEFs
dGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciogYWx0
ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNw
YXRjaGVyOyB9Ci1wcml2YXRlOgotICAgIEFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNo
ZXIqIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciB7IG51bGxwdHIgfTsKLSNlbmRpZgotcHJpdmF0ZToK
LSAgICBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiwgTmV0d29y
azFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICBOZXR3b3JrMUJhY2tlbmREaXNwYXRj
aGVySGFuZGxlciogbV9hZ2VudCB7IG51bGxwdHIgfTsKLX07Ci0KLWNsYXNzIE5ldHdvcmszQmFj
a2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNo
ZXIgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcj4g
Y3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIqKTsKLSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1l
dGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5hbDsKLXByaXZhdGU6Ci0gICAg
dm9pZCBsb2FkUmVzb3VyY2UxKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYm
IHBhcmFtZXRlcnMpOwotICAgIHZvaWQgbG9hZFJlc291cmNlMihsb25nIHJlcXVlc3RJZCwgUmVm
UHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTMo
bG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0gICAg
dm9pZCBsb2FkUmVzb3VyY2U0KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYm
IHBhcmFtZXRlcnMpOwotICAgIHZvaWQgbG9hZFJlc291cmNlNShsb25nIHJlcXVlc3RJZCwgUmVm
UHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTYo
bG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0gICAg
dm9pZCBsb2FkUmVzb3VyY2U3KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYm
IHBhcmFtZXRlcnMpOwotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQotcHVibGljOgotICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0Y2hlcihBbHRlcm5hdGVOZXR3
b3JrM0JhY2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRl
RGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KLXByaXZhdGU6Ci0gICAgQWx0ZXJu
YXRlTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlciogbV9hbHRlcm5hdGVEaXNwYXRjaGVyIHsgbnVs
bHB0ciB9OwotI2VuZGlmCi1wcml2YXRlOgotICAgIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIo
QmFja2VuZERpc3BhdGNoZXImLCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwot
ICAgIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50IHsgbnVsbHB0ciB9
OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNr
ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVy
cy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFy
eWluZy1jb21tYW5kLXNpemVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlz
cGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5k
Um91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvTmV2
ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNpZiBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSNpbmNsdWRlICJUZXN0QWx0ZXJu
YXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIEluc3BlY3RvciB7
Ci0KLU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+TmV0d29yazFCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXIoKSB7IH0KLU5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+
TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KLQotUmVmPE5ldHdvcmsxQmFj
a2VuZERpc3BhdGNoZXI+IE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShCYWNrZW5k
RGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyKiBhZ2VudCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBOZXR3b3JrMUJhY2tl
bmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOwotfQotCi1OZXR3b3JrMUJh
Y2tlbmREaXNwYXRjaGVyOjpOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRj
aGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIq
IGFnZW50KQotICAgIDogU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3Bh
dGNoZXIpCi0gICAgLCBtX2FnZW50KGFnZW50KQotewotICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbigiTmV0d29yazEiX3MsIHRoaXMpOwotfQotCi12
b2lkIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBj
b25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQotewotICAg
IFJlZjxOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKLQotICAgIFJl
ZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJw
YXJhbXMiX3MsIHBhcmFtZXRlcnMpOwotCi0gICAgaWYgKG1ldGhvZCA9PSAibG9hZFJlc291cmNl
MSIpCi0gICAgICAgIGxvYWRSZXNvdXJjZTEocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMp
KTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29s
RXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmsxLiIgKyBt
ZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7Ci19Ci0KLXZvaWQgTmV0d29yazFCYWNrZW5kRGlz
cGF0Y2hlcjo6bG9hZFJlc291cmNlMShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJikKLXsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSAg
ICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0
Y2hlci0+bG9hZFJlc291cmNlMShyZXF1ZXN0SWQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
I2VuZGlmCi0KLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBy
ZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJj
ZTEoZXJyb3IpOwotCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxz
ZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2Nv
bEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOwot
fQotCi1SZWY8TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcj4gTmV0d29yazNCYWNrZW5kRGlzcGF0
Y2hlcjo6Y3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgTmV0d29y
azNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQotewotICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIsIGFnZW50
KSk7Ci19Ci0KLU5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6Ok5ldHdvcmszQmFja2VuZERpc3Bh
dGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBOZXR3b3JrM0JhY2tl
bmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCi0gICAgOiBTdXBwbGVtZW50YWxCYWNrZW5kRGlz
cGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKLSAgICAsIG1fYWdlbnQoYWdlbnQpCi17Ci0gICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKCJOZXR3b3Jr
MyJfcywgdGhpcyk7Ci19Ci0KLXZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0
Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0
PiYmIG1lc3NhZ2UpCi17Ci0gICAgUmVmPE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI+IHByb3Rl
Y3QoKnRoaXMpOwotCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVyczsKLSAgICBt
ZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFyYW1ldGVycyk7Ci0KLSAgICB0eXBlZGVm
IHZvaWQgKE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OipDYWxsSGFuZGxlcikobG9uZyByZXF1
ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSk7Ci0gICAgdHlwZWRlZiBIYXNo
TWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+IERpc3BhdGNoTWFwOwotICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxEaXNwYXRjaE1hcD4gZGlzcGF0Y2hNYXA7Ci0gICAgaWYgKGRpc3BhdGNoTWFwLmdl
dCgpLmlzRW1wdHkoKSkgewotICAgICAgICBzdGF0aWMgY29uc3Qgc3RydWN0IE1ldGhvZFRhYmxl
IHsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIqIG5hbWU7Ci0gICAgICAgICAgICBDYWxsSGFuZGxl
ciBoYW5kbGVyOwotICAgICAgICB9IGNvbW1hbmRzW10gPSB7Ci0gICAgICAgICAgICB7ICJsb2Fk
UmVzb3VyY2UxIiwgJk5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTEgfSwK
LSAgICAgICAgICAgIHsgImxvYWRSZXNvdXJjZTIiLCAmTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hl
cjo6bG9hZFJlc291cmNlMiB9LAotICAgICAgICAgICAgeyAibG9hZFJlc291cmNlMyIsICZOZXR3
b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UzIH0sCi0gICAgICAgICAgICB7ICJs
b2FkUmVzb3VyY2U0IiwgJk5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTQg
fSwKLSAgICAgICAgICAgIHsgImxvYWRSZXNvdXJjZTUiLCAmTmV0d29yazNCYWNrZW5kRGlzcGF0
Y2hlcjo6bG9hZFJlc291cmNlNSB9LAotICAgICAgICAgICAgeyAibG9hZFJlc291cmNlNiIsICZO
ZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U2IH0sCi0gICAgICAgICAgICB7
ICJsb2FkUmVzb3VyY2U3IiwgJk5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJj
ZTcgfSwKLSAgICAgICAgfTsKLSAgICAgICAgc2l6ZV90IGxlbmd0aCA9IFdURl9BUlJBWV9MRU5H
VEgoY29tbWFuZHMpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytp
KQotICAgICAgICAgICAgZGlzcGF0Y2hNYXAuZ2V0KCkuYWRkKGNvbW1hbmRzW2ldLm5hbWUsIGNv
bW1hbmRzW2ldLmhhbmRsZXIpOwotICAgIH0KLQotICAgIGF1dG8gZmluZFJlc3VsdCA9IGRpc3Bh
dGNoTWFwLmdldCgpLmZpbmQobWV0aG9kKTsKLSAgICBpZiAoZmluZFJlc3VsdCA9PSBkaXNwYXRj
aE1hcC5nZXQoKS5lbmQoKSkgewotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQ
cm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3Jr
My4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgKCgqdGhpcykuKmZpbmRSZXN1bHQtPnZhbHVlKShyZXF1ZXN0SWQsIFdURk1vdmUo
cGFyYW1ldGVycykpOwotfQotCi12b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRS
ZXNvdXJjZTEobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCi17Ci0jaWYg
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0gICAgaWYgKG1fYWx0ZXJu
YXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNv
dXJjZTEocmVxdWVzdElkKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAg
RXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2UxKGVycm9yKTsKLQot
ICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNl
bmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UK
LSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5k
RGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKLX0KLQotdm9pZCBOZXR3
b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UyKGxvbmcgcmVxdWVzdElkLCBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiYmKQotewotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQotICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9h
bHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2UyKHJlcXVlc3RJZCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxK
U09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgbV9hZ2Vu
dC0+bG9hZFJlc291cmNlMihlcnJvcik7Ci0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAg
ICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3Zl
KHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZN
b3ZlKGVycm9yKSk7Ci19Ci0KLXZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJl
c291cmNlMyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKLXsKLSNpZiBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSAgICBpZiAobV9hbHRlcm5h
dGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291
cmNlMyhyZXF1ZXN0SWQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBF
cnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpOwotICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTMoZXJyb3IpOwotCi0g
ICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2Vu
ZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQot
ICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmRE
aXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOwotfQotCi12b2lkIE5ldHdv
cmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTQobG9uZyByZXF1ZXN0SWQsIFJlZlB0
cjxKU09OOjpPYmplY3Q+JiYpCi17Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCi0gICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2Fs
dGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZTQocmVxdWVzdElkKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpT
T046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtX2FnZW50
LT5sb2FkUmVzb3VyY2U0KGVycm9yKTsKLQotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0gICAg
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUo
cmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+
cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1v
dmUoZXJyb3IpKTsKLX0KLQotdm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVz
b3VyY2U1KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQotewotI2lmIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotICAgIGlmIChtX2FsdGVybmF0
ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3Vy
Y2U1KHJlcXVlc3RJZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIEVy
cm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9i
amVjdDo6Y3JlYXRlKCk7Ci0gICAgbV9hZ2VudC0+bG9hZFJlc291cmNlNShlcnJvcik7Ci0KLSAg
ICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5k
UmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0g
ICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERp
c3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Ci19Ci0KLXZvaWQgTmV0d29y
azNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNihsb25nIHJlcXVlc3RJZCwgUmVmUHRy
PEpTT046Ok9iamVjdD4mJikKLXsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKLSAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0
ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlNihyZXF1ZXN0SWQpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNP
Tjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIG1fYWdlbnQt
PmxvYWRSZXNvdXJjZTYoZXJyb3IpOwotCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShy
ZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5y
ZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92
ZShlcnJvcikpOwotfQotCi12b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNv
dXJjZTcobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCi17Ci0jaWYgRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0gICAgaWYgKG1fYWx0ZXJuYXRl
RGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJj
ZTcocmVxdWVzdElkKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAgRXJy
b3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKLSAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2U3KGVycm9yKTsKLQotICAg
IGlmICghZXJyb3IubGVuZ3RoKCkpCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRS
ZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAg
ICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlz
cGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAK
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVz
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdt
YSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8d3Rm
L0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNw
YWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEZyb250ZW5kUm91dGVyOwotCi19IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgotCi0jaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi19IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVy
cy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6
ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJh
Z21hIG9uY2UKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlw
ZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9y
IHsKLQotCi0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLQotCi0KLQotLy8gVHlwZWRlZnMuCi1u
YW1lc3BhY2UgTmV0d29yazIgewotLyogVW5pcXVlIGxvYWRlciBpZGVudGlmaWVyLiAqLwotdHlw
ZWRlZiBTdHJpbmcgTG9hZGVySWQ7Ci19IC8vIE5ldHdvcmsyCi0vLyBFbmQgb2YgdHlwZWRlZnMu
Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsK
LQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0K
LX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9i
amVjdHMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hl
cnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5
aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXJzLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi1AcHJvdG9j
b2wgVGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyOwotQHByb3RvY29sIFRlc3RQcm90
b2NvbE5ldHdvcmszRG9tYWluSGFuZGxlcjsKLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQot
Y2xhc3MgT2JqQ0luc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJs
aWMgQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciB7Ci0gICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgT2JqQ0luc3BlY3Rvck5ldHdvcmsxQmFja2VuZERp
c3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyPiBoYW5kbGVyKSB7
IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2UxKGxvbmcgcmVx
dWVzdElkKSBmaW5hbDsKLXByaXZhdGU6Ci0gICAgUmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbE5l
dHdvcmsxRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7Ci19OwotCi1jbGFzcyBPYmpDSW5zcGVj
dG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVOZXR3
b3JrM0JhY2tlbmREaXNwYXRjaGVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1
YmxpYzoKLSAgICBPYmpDSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0
UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhh
bmRsZXI7IH0KLSAgICB2b2lkIGxvYWRSZXNvdXJjZTEobG9uZyByZXF1ZXN0SWQpIGZpbmFsOwot
ICAgIHZvaWQgbG9hZFJlc291cmNlMihsb25nIHJlcXVlc3RJZCkgZmluYWw7Ci0gICAgdm9pZCBs
b2FkUmVzb3VyY2UzKGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKLSAgICB2b2lkIGxvYWRSZXNvdXJj
ZTQobG9uZyByZXF1ZXN0SWQpIGZpbmFsOwotICAgIHZvaWQgbG9hZFJlc291cmNlNShsb25nIHJl
cXVlc3RJZCkgZmluYWw7Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2U2KGxvbmcgcmVxdWVzdElkKSBm
aW5hbDsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTcobG9uZyByZXF1ZXN0SWQpIGZpbmFsOwotcHJp
dmF0ZToKLSAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sTmV0d29yazNEb21haW5IYW5kbGVy
Pj4gbV9kZWxlZ2F0ZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmln
LmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1
ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLQotbmFtZXNwYWNlIElu
c3BlY3RvciB7Ci0KLXZvaWQgT2JqQ0luc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6
OmxvYWRSZXNvdXJjZTEobG9uZyByZXF1ZXN0SWQpCi17Ci0gICAgaWYgKCFbbV9kZWxlZ2F0ZSBy
ZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGxvYWRSZXNvdXJjZTFXaXRoRXJyb3JDYWxsYmFj
azpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVw
b3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RG
b3VuZCwgIidOZXR3b3JrMS5sb2FkUmVzb3VyY2UxJyB3YXMgbm90IGZvdW5kIl9zKTsKLSAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikg
ewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVl
c3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7Ci0gICAgICAgIGJh
Y2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgfTsKLQotICAgIGlk
IHN1Y2Nlc3NDYWxsYmFjayA9IF57Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRS
ZXNwb25zZShyZXF1ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKLSAgICB9
OwotCi0gICAgW21fZGVsZWdhdGUgbG9hZFJlc291cmNlMVdpdGhFcnJvckNhbGxiYWNrOmVycm9y
Q2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107Ci19Ci0KLQotdm9pZCBP
YmpDSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMShsb25n
IHJlcXVlc3RJZCkKLXsKLSAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpA
c2VsZWN0b3IobG9hZFJlc291cmNlMVdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazop
XSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJl
cXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmszLmxv
YWRSZXNvdXJjZTEnIHdhcyBub3QgZm91bmQiX3MpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
aWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0
Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICB9OwotCi0gICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0g
XnsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwg
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2UpOwotICAgIH07Ci0KLSAgICBbbV9kZWxlZ2F0
ZSBsb2FkUmVzb3VyY2UxV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2Fs
bGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKLX0KLQotdm9pZCBPYmpDSW5zcGVjdG9yTmV0d29yazNC
YWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMihsb25nIHJlcXVlc3RJZCkKLXsKLSAgICBp
ZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IobG9hZFJlc291cmNl
MldpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgewotICAgICAgICBiYWNrZW5k
RGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3Bh
dGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmszLmxvYWRSZXNvdXJjZTInIHdhcyBub3Qg
Zm91bmQiX3MpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9y
cygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWQgZXJyb3JDYWxsYmFjayA9IF4o
TlNTdHJpbmcgKmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFBy
b3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVy
cm9yKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsK
LSAgICB9OwotCi0gICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KSwgZmFsc2UpOwotICAgIH07Ci0KLSAgICBbbV9kZWxlZ2F0ZSBsb2FkUmVzb3VyY2UyV2l0aEVy
cm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNr
XTsKLX0KLQotdm9pZCBPYmpDSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9h
ZFJlc291cmNlMyhsb25nIHJlcXVlc3RJZCkKLXsKLSAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3Bv
bmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IobG9hZFJlc291cmNlM1dpdGhFcnJvckNhbGxiYWNrOnN1
Y2Nlc3NDYWxsYmFjazopXSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQ
cm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5k
LCAiJ05ldHdvcmszLmxvYWRSZXNvdXJjZTMnIHdhcyBub3QgZm91bmQiX3MpOwotICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0g
ICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElk
LCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKLSAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICB9OwotCi0gICAgaWQgc3Vj
Y2Vzc0NhbGxiYWNrID0gXnsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3Bv
bnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2UpOwotICAgIH07Ci0K
LSAgICBbbV9kZWxlZ2F0ZSBsb2FkUmVzb3VyY2UzV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxs
YmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKLX0KLQotdm9pZCBPYmpDSW5z
cGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNChsb25nIHJlcXVl
c3RJZCkKLXsKLSAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0
b3IobG9hZFJlc291cmNlNFdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgewot
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJ
ZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmszLmxvYWRSZXNv
dXJjZTQnIHdhcyBub3QgZm91bmQiX3MpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5z
ZW5kUGVuZGluZ0Vycm9ycygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWQgZXJy
b3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6
U2VydmVyRXJyb3IsIGVycm9yKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBl
bmRpbmdFcnJvcnMoKTsKLSAgICB9OwotCi0gICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2UpOwotICAgIH07Ci0KLSAgICBbbV9kZWxlZ2F0ZSBsb2Fk
UmVzb3VyY2U0V2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6
c3VjY2Vzc0NhbGxiYWNrXTsKLX0KLQotdm9pZCBPYmpDSW5zcGVjdG9yTmV0d29yazNCYWNrZW5k
RGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNShsb25nIHJlcXVlc3RJZCkKLXsKLSAgICBpZiAoIVtt
X2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IobG9hZFJlc291cmNlNVdpdGhF
cnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6
Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmszLmxvYWRSZXNvdXJjZTUnIHdhcyBub3QgZm91bmQi
X3MpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJp
bmcgKmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29s
RXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsK
LSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICB9
OwotCi0gICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFs
c2UpOwotICAgIH07Ci0KLSAgICBbbV9kZWxlZ2F0ZSBsb2FkUmVzb3VyY2U1V2l0aEVycm9yQ2Fs
bGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKLX0K
LQotdm9pZCBPYmpDSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291
cmNlNihsb25nIHJlcXVlc3RJZCkKLXsKLSAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9T
ZWxlY3RvcjpAc2VsZWN0b3IobG9hZFJlc291cmNlNldpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3ND
YWxsYmFjazopXSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2Nv
bEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05l
dHdvcmszLmxvYWRSZXNvdXJjZTYnIHdhcyBub3QgZm91bmQiX3MpOwotICAgICAgICBiYWNrZW5k
RGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNr
ZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKLSAgICAgICAgYmFja2VuZERpc3Bh
dGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICB9OwotCi0gICAgaWQgc3VjY2Vzc0Nh
bGxiYWNrID0gXnsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJl
cXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2UpOwotICAgIH07Ci0KLSAgICBb
bV9kZWxlZ2F0ZSBsb2FkUmVzb3VyY2U2V2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBz
dWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKLX0KLQotdm9pZCBPYmpDSW5zcGVjdG9y
TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNyhsb25nIHJlcXVlc3RJZCkK
LXsKLSAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IobG9h
ZFJlc291cmNlN1dpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgewotICAgICAg
ICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFj
a2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmszLmxvYWRSZXNvdXJjZTcn
IHdhcyBub3QgZm91bmQiX3MpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVu
ZGluZ0Vycm9ycygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWQgZXJyb3JDYWxs
YmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCkt
PnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVy
RXJyb3IsIGVycm9yKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdF
cnJvcnMoKTsKLSAgICB9OwotCi0gICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAgICAgICAg
YmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKSwgZmFsc2UpOwotICAgIH07Ci0KLSAgICBbbV9kZWxlZ2F0ZSBsb2FkUmVzb3Vy
Y2U3V2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vz
c0NhbGxiYWNrXTsKLX0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgotLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3Iv
VGVzdFByb3RvY29sLmg+Ci0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0Iikp
KQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKLUBwcm9w
ZXJ0eSAobm9uYXRvbWljLCByZXRhaW4sIHNldHRlcj1zZXROZXR3b3JrMUhhbmRsZXI6KSBpZDxU
ZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+IG5ldHdvcmsxSGFuZGxlcjsKLUBwcm9w
ZXJ0eSAobm9uYXRvbWljLCByZXRhaW4sIHNldHRlcj1zZXROZXR3b3JrM0hhbmRsZXI6KSBpZDxU
ZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkhhbmRsZXI+IG5ldHdvcmszSGFuZGxlcjsKLUBlbmQK
LQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0
UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFs
LmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+Ci0jaW1wb3J0IDxK
YXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgot
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0K
LXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9j
b2xDb25maWd1cmF0aW9uCi17Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBf
Y29udHJvbGxlcjsKLSAgICBpZDxUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+IF9u
ZXR3b3JrMUhhbmRsZXI7Ci0gICAgaWQ8VGVzdFByb3RvY29sTmV0d29yazNEb21haW5IYW5kbGVy
PiBfbmV0d29yazNIYW5kbGVyOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9s
bGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBz
ZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsK
LSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwot
ICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBbX25ldHdvcmsx
SGFuZGxlciByZWxlYXNlXTsKLSAgICBbX25ldHdvcmszSGFuZGxlciByZWxlYXNlXTsKLSAgICBb
c3VwZXIgZGVhbGxvY107Ci19Ci0KLS0gKHZvaWQpc2V0TmV0d29yazFIYW5kbGVyOihpZDxUZXN0
UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+KWhhbmRsZXIKLXsKLSAgICBpZiAoaGFuZGxl
ciA9PSBfbmV0d29yazFIYW5kbGVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBbX25ldHdvcmsx
SGFuZGxlciByZWxlYXNlXTsKLSAgICBfbmV0d29yazFIYW5kbGVyID0gW2hhbmRsZXIgcmV0YWlu
XTsKLQotICAgIGF1dG8gYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IG1ha2VVbmlxdWU8T2JqQ0luc3Bl
Y3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI+KGhhbmRsZXIpOwotICAgIGF1dG8gYWx0ZXJu
YXRlQWdlbnQgPSBtYWtlVW5pcXVlPEFsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50PE5ldHdvcmsx
QmFja2VuZERpc3BhdGNoZXIsIEFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI+Pigi
TmV0d29yazEiX3MsICpfY29udHJvbGxlciwgV1RGTW92ZShhbHRlcm5hdGVEaXNwYXRjaGVyKSk7
Ci0gICAgX2NvbnRyb2xsZXItPmFwcGVuZEV4dHJhQWdlbnQoV1RGTW92ZShhbHRlcm5hdGVBZ2Vu
dCkpOwotfQotCi0tIChpZDxUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+KW5ldHdv
cmsxSGFuZGxlcgotewotICAgIHJldHVybiBfbmV0d29yazFIYW5kbGVyOwotfQotCi0tICh2b2lk
KXNldE5ldHdvcmszSGFuZGxlcjooaWQ8VGVzdFByb3RvY29sTmV0d29yazNEb21haW5IYW5kbGVy
PiloYW5kbGVyCi17Ci0gICAgaWYgKGhhbmRsZXIgPT0gX25ldHdvcmszSGFuZGxlcikKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgW19uZXR3b3JrM0hhbmRsZXIgcmVsZWFzZV07Ci0gICAgX25ldHdv
cmszSGFuZGxlciA9IFtoYW5kbGVyIHJldGFpbl07Ci0KLSAgICBhdXRvIGFsdGVybmF0ZURpc3Bh
dGNoZXIgPSBtYWtlVW5pcXVlPE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVy
PihoYW5kbGVyKTsKLSAgICBhdXRvIGFsdGVybmF0ZUFnZW50ID0gbWFrZVVuaXF1ZTxBbHRlcm5h
dGVEaXNwYXRjaGFibGVBZ2VudDxOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyLCBBbHRlcm5hdGVO
ZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyPj4oIk5ldHdvcmszIl9zLCAqX2NvbnRyb2xsZXIsIFdU
Rk1vdmUoYWx0ZXJuYXRlRGlzcGF0Y2hlcikpOwotICAgIF9jb250cm9sbGVyLT5hcHBlbmRFeHRy
YUFnZW50KFdURk1vdmUoYWx0ZXJuYXRlQWdlbnQpKTsKLX0KLQotLSAoaWQ8VGVzdFByb3RvY29s
TmV0d29yazNEb21haW5IYW5kbGVyPiluZXR3b3JrM0hhbmRsZXIKLXsKLSAgICByZXR1cm4gX25l
dHdvcmszSGFuZGxlcjsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbi5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNw
YXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0
aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1w
b3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPHd0Zi9KU09OVmFs
dWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2wuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12
YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2ltcG9y
dCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgotCi0KLQotCi10eXBlZGVm
IE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xQbGF0Zm9ybSkgewotICAgIFRlc3RQcm90
b2NvbFBsYXRmb3JtQWxsLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYywKLSAgICBU
ZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TLAot
fTsKLQotCi0KLQotCi1AcHJvdG9jb2wgVGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVy
IDxOU09iamVjdD4KLUBvcHRpb25hbAotLSAodm9pZClsb2FkUmVzb3VyY2UxV2l0aEVycm9yQ2Fs
bGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxs
YmFjazoodm9pZCheKSh2b2lkKSlzdWNjZXNzQ2FsbGJhY2s7Ci1AZW5kCi0KLUBwcm90b2NvbCBU
ZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkhhbmRsZXIgPE5TT2JqZWN0PgotQG9wdGlvbmFsCi0t
ICh2b2lkKWxvYWRSZXNvdXJjZTFXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAq
ZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKHZvaWQpKXN1Y2Nl
c3NDYWxsYmFjazsKLS0gKHZvaWQpbG9hZFJlc291cmNlMldpdGhFcnJvckNhbGxiYWNrOih2b2lk
KF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQo
Xikodm9pZCkpc3VjY2Vzc0NhbGxiYWNrOwotLSAodm9pZClsb2FkUmVzb3VyY2UzV2l0aEVycm9y
Q2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3ND
YWxsYmFjazoodm9pZCheKSh2b2lkKSlzdWNjZXNzQ2FsbGJhY2s7Ci0tICh2b2lkKWxvYWRSZXNv
dXJjZTRXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2Fs
bGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKHZvaWQpKXN1Y2Nlc3NDYWxsYmFjazsKLS0g
KHZvaWQpbG9hZFJlc291cmNlNVdpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICpl
cnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikodm9pZCkpc3VjY2Vz
c0NhbGxiYWNrOwotLSAodm9pZClsb2FkUmVzb3VyY2U2V2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQo
XikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZChe
KSh2b2lkKSlzdWNjZXNzQ2FsbGJhY2s7Ci0tICh2b2lkKWxvYWRSZXNvdXJjZTdXaXRoRXJyb3JD
YWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0Nh
bGxiYWNrOih2b2lkKF4pKHZvaWQpKXN1Y2Nlc3NDYWxsYmFjazsKLUBlbmQKLQotCi0KLQotI2lt
cG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5o
PgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xJbnRlcm5hbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9t
YWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9y
dCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRD
b3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8d3RmL0pTT05W
YWx1ZXMuaD4KLQotCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6
ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1w
b3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFy
cmF5Q29udmVyc2lvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIE9iakNFbnVtVHlwZT4KLU9wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29s
U3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOwotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xT
dHJpbmcoVGVzdFByb3RvY29sUGxhdGZvcm0gdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7
Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDoKLSAgICAgICAgcmV0dXJuICJhbGwi
X3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM6Ci0gICAgICAgIHJldHVy
biAiZ2VuZXJpYyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOgotICAgICAg
ICByZXR1cm4gImlvcyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M6Ci0g
ICAgICAgIHJldHVybiAibWFjb3MiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUg
T3B0aW9uYWw8VGVzdFByb3RvY29sUGxhdGZvcm0+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBT
dHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiYWxsIikKLSAgICAgICAgcmV0dXJu
IFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOwotICAgIGlmICh2YWx1ZSA9PSAiZ2VuZXJpYyIpCi0g
ICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM7Ci0gICAgaWYgKHZhbHVl
ID09ICJpb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1JT1M7Ci0gICAg
aWYgKHZhbHVlID09ICJtYWNvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9y
bU1hY09TOwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLQotCi19IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMu
aAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFu
ZC1zaXplcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotCi0jaW1wb3J0ICJUZXN0
UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKLSNpbXBvcnQg
PFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0KLXVzaW5nIG5h
bWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zIChOZXR3b3JrMkRvbWFpbikKLQotKyAodm9pZClfcGFyc2VMb2FkZXJJZDooTlNTdHJpbmcg
Kiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0KLUBlbmQKLQotQGltcGxlbWVu
dGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoTmV0d29yazJEb21haW4pCi0KLSsg
KHZvaWQpX3BhcnNlTG9hZGVySWQ6KE5TU3RyaW5nICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihp
ZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBb
TlNTdHJpbmcgY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSAoTlNTdHJpbmcgKilwYXlsb2FkOwot
fQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMu
bW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQg
IlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFBy
aXZhdGUuaD4KLSNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZh
bHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLQotCi0jIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9lbnVtLXZhbHVlcy5q
c29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9nZW5lcmljL2V4cGVjdGVkL2VudW0tdmFsdWVzLmpzb24tcmVzdWx0CmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBmMDZmZWJiNzhkNy4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZW51
bS12YWx1ZXMuanNvbi1yZXN1bHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMjM2ICswLDAgQEAKLSMj
IyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLS8vIFR5cGVEb21haW4KLUluc3BlY3RvckJhY2tlbmQu
cmVnaXN0ZXJEb21haW4oIlR5cGVEb21haW4iLCBudWxsKTsKLUluc3BlY3RvckJhY2tlbmQucmVn
aXN0ZXJFbnVtKCJUeXBlRG9tYWluLlR5cGVEb21haW5FbnVtIiwge1NoYXJlZDogInNoYXJlZCIs
IFJlZDogInJlZCIsIEdyZWVuOiAiZ3JlZW4iLCBCbHVlOiAiYmx1ZSJ9KTsKLUluc3BlY3RvckJh
Y2tlbmQuYWN0aXZhdGVEb21haW4oIlR5cGVEb21haW4iLCBudWxsKTsKLQotLy8gQ29tbWFuZERv
bWFpbgotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiQ29tbWFuZERvbWFpbiIsIG51
bGwpOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIkNvbW1hbmREb21haW4uY29t
bWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUiLCBudWxsLCBbXSwgWyJyZXR1cm5WYWx1ZSJdKTsKLUlu
c3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkNvbW1hbmREb21haW4iLCBudWxsKTsKLQot
Ly8gRXZlbnREb21haW4KLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIkV2ZW50RG9t
YWluIiwgbnVsbCk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiRXZlbnREb21haW4u
RXZlbnRXaXRoRW51bVBhcmFtZXRlclBhcmFtZXRlciIsIHtTaGFyZWQ6ICJzaGFyZWQiLCBCbGFj
azogImJsYWNrIiwgV2hpdGU6ICJ3aGl0ZSJ9KTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJF
dmVudCgiRXZlbnREb21haW4uZXZlbnRXaXRoRW51bVBhcmFtZXRlciIsIG51bGwsIFsicGFyYW1l
dGVyIl0pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckV2ZW50RG9tYWluRGlzcGF0Y2hlciA9
IEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEaXNwYXRjaGVyLmJpbmQoSW5zcGVjdG9yQmFja2Vu
ZCwgIkV2ZW50RG9tYWluIik7Ci1JbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJFdmVu
dERvbWFpbiIsIG51bGwpOwotIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMu
anMKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNp
ZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQotI2luY2x1ZGUgIlRl
c3RQcm90b2NvbFR5cGVzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9u
dGVuZFJvdXRlci5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgQWx0ZXJuYXRl
QmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNo
ZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlz
cGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KLSAgICBCYWNrZW5kRGlzcGF0Y2hlciog
YmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdl
dCgpOyB9Ci1wcml2YXRlOgotICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5k
RGlzcGF0Y2hlcjsKLX07Ci0KLQotY2xhc3MgQWx0ZXJuYXRlQ29tbWFuZERvbWFpbkJhY2tlbmRE
aXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoK
LSAgICB2aXJ0dWFsIH5BbHRlcm5hdGVDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIoKSB7
IH0KLSAgICB2aXJ0dWFsIHZvaWQgY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUobG9uZyBjYWxs
SWQpID0gMDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jZW5kaWYgLy8gRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jIyMgRW5kIEZpbGU6IFRlc3RB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tl
bmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12
YWx1ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0j
cHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdHlwZWRl
ZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKLWNsYXNzIEFsdGVybmF0ZUNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hl
cjsKLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQot
Y2xhc3MgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7Ci1wdWJsaWM6Ci0g
ICAgLy8gTmFtZWQgYWZ0ZXIgcGFyYW1ldGVyICdyZXR1cm5WYWx1ZScgd2hpbGUgZ2VuZXJhdGlu
ZyBjb21tYW5kL2V2ZW50IGNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlLgotICAgIGVudW0gY2xh
c3MgUmV0dXJuVmFsdWUgewotICAgICAgICBTaGFyZWQgPSAwLAotICAgICAgICBDeWFuID0gNiwK
LSAgICAgICAgTWFnZW50YSA9IDcsCi0gICAgICAgIFllbGxvdyA9IDgsCi0gICAgfTsgLy8gZW51
bSBjbGFzcyBSZXR1cm5WYWx1ZQotICAgIHZpcnR1YWwgdm9pZCBjb21tYW5kV2l0aEVudW1SZXR1
cm5WYWx1ZShFcnJvclN0cmluZyYsIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXI6OlJldHVyblZhbHVlKiBvdXRfcmV0dXJuVmFsdWUpID0gMDsKLXByb3RlY3RlZDoKLSAgICB2
aXJ0dWFsIH5Db21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7Ci19OwotCi1j
bGFzcyBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxl
bWVudGFsQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8Q29tbWFu
ZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBDb21t
YW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdm9pZCBkaXNwYXRjaChs
b25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYg
bWVzc2FnZSkgZmluYWw7Ci1wcml2YXRlOgotICAgIHZvaWQgY29tbWFuZFdpdGhFbnVtUmV0dXJu
VmFsdWUobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7
Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi1wdWJsaWM6Ci0g
ICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZUNvbW1hbmREb21haW5CYWNr
ZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVybmF0ZURpc3BhdGNo
ZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9Ci1wcml2YXRlOgotICAgIEFsdGVybmF0ZUNvbW1h
bmREb21haW5CYWNrZW5kRGlzcGF0Y2hlciogbV9hbHRlcm5hdGVEaXNwYXRjaGVyIHsgbnVsbHB0
ciB9OwotI2VuZGlmCi1wcml2YXRlOgotICAgIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hl
cihCYWNrZW5kRGlzcGF0Y2hlciYsIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIqKTsKLSAgICBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50
IHsgbnVsbHB0ciB9OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZp
bGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tl
bmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVt
LXZhbHVlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgi
Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgot
I2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVk
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jaWYgRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmRE
aXNwYXRjaGVycy5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1Db21tYW5k
RG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+Q29tbWFuZERvbWFpbkJhY2tlbmREaXNw
YXRjaGVySGFuZGxlcigpIHsgfQotCi1SZWY8Q29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVy
PiBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hl
ciYgYmFja2VuZERpc3BhdGNoZXIsIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIqIGFnZW50KQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENvbW1hbmREb21haW5CYWNr
ZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKLX0KLQotQ29tbWFuZERv
bWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIoQmFj
a2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBDb21tYW5kRG9tYWluQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKLSAgICA6IFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRj
aGVyKGJhY2tlbmREaXNwYXRjaGVyKQotICAgICwgbV9hZ2VudChhZ2VudCkKLXsKLSAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oIkNvbW1hbmREb21h
aW4iX3MsIHRoaXMpOwotfQotCi12b2lkIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6
ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6
T2JqZWN0PiYmIG1lc3NhZ2UpCi17Ci0gICAgUmVmPENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0
Y2hlcj4gcHJvdGVjdCgqdGhpcyk7Ci0KLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0
ZXJzOwotICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsKLQot
ICAgIGlmIChtZXRob2QgPT0gImNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlIikKLSAgICAgICAg
Y29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMp
KTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29s
RXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0NvbW1hbmREb21haW4u
IiArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKLX0KLQotdm9pZCBDb21tYW5kRG9tYWlu
QmFja2VuZERpc3BhdGNoZXI6OmNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlKGxvbmcgcmVxdWVz
dElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQotewotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQotICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAg
ICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5jb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShy
ZXF1ZXN0SWQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBFcnJvclN0
cmluZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOwotICAgIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlJl
dHVyblZhbHVlIG91dF9yZXR1cm5WYWx1ZTsKLSAgICBtX2FnZW50LT5jb21tYW5kV2l0aEVudW1S
ZXR1cm5WYWx1ZShlcnJvciwgJm91dF9yZXR1cm5WYWx1ZSk7Ci0KLSAgICBpZiAoIWVycm9yLmxl
bmd0aCgpKQotICAgICAgICByZXN1bHQtPnNldFN0cmluZygicmV0dXJuVmFsdWUiX3MsIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShvdXRfcmV0
dXJuVmFsdWUpKTsKLQotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0gICAgICAgIG1fYmFja2Vu
ZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFs
c2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9j
b2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tl
bmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNo
ZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25j
ZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPHd0Zi9KU09O
VmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJ
bnNwZWN0b3IgewotCi1jbGFzcyBGcm9udGVuZFJvdXRlcjsKLQotY2xhc3MgRXZlbnREb21haW5G
cm9udGVuZERpc3BhdGNoZXIgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGlj
OgotICAgIEV2ZW50RG9tYWluRnJvbnRlbmREaXNwYXRjaGVyKEZyb250ZW5kUm91dGVyJiBmcm9u
dGVuZFJvdXRlcikgOiBtX2Zyb250ZW5kUm91dGVyKGZyb250ZW5kUm91dGVyKSB7IH0KLSAgICAg
ICAgLy8gTmFtZWQgYWZ0ZXIgcGFyYW1ldGVyICdwYXJhbWV0ZXInIHdoaWxlIGdlbmVyYXRpbmcg
Y29tbWFuZC9ldmVudCBldmVudFdpdGhFbnVtUGFyYW1ldGVyLgotICAgICAgICBlbnVtIGNsYXNz
IFBhcmFtZXRlciB7Ci0gICAgICAgICAgICBTaGFyZWQgPSAwLAotICAgICAgICAgICAgQmxhY2sg
PSA0LAotICAgICAgICAgICAgV2hpdGUgPSA1LAotICAgICAgICB9OyAvLyBlbnVtIGNsYXNzIFBh
cmFtZXRlcgotICAgIHZvaWQgZXZlbnRXaXRoRW51bVBhcmFtZXRlcihQYXJhbWV0ZXIgcGFyYW1l
dGVyKTsKLXByaXZhdGU6Ci0gICAgRnJvbnRlbmRSb3V0ZXImIG1fZnJvbnRlbmRSb3V0ZXI7Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5k
RGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMu
Y3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdm9pZCBFdmVudERv
bWFpbkZyb250ZW5kRGlzcGF0Y2hlcjo6ZXZlbnRXaXRoRW51bVBhcmFtZXRlcihQYXJhbWV0ZXIg
cGFyYW1ldGVyKQotewotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3Ms
ICJFdmVudERvbWFpbi5ldmVudFdpdGhFbnVtUGFyYW1ldGVyIl9zKTsKLSAgICBSZWY8SlNPTjo6
T2JqZWN0PiBwYXJhbXNPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIHBhcmFt
c09iamVjdC0+c2V0U3RyaW5nKCJwYXJhbWV0ZXIiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRl
c3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShwYXJhbWV0ZXIpKTsKLSAgICBqc29uTWVz
c2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiX3MsIFdURk1vdmUocGFyYW1zT2JqZWN0KSk7Ci0KLSAg
ICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkp
OwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0RnJv
bnRlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVj
dHMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNl
Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0j
aW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQot
Ci1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCi1u
YW1lc3BhY2UgVHlwZURvbWFpbiB7Ci1lbnVtIGNsYXNzIFR5cGVEb21haW5FbnVtOwotfSAvLyBU
eXBlRG9tYWluCi0vLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCi0KLQotCi0KLW5hbWVz
cGFjZSBUZXN0SGVscGVycyB7Ci0KLVN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29k
ZSk7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShU
IGVudW1WYWx1ZSkKLXsKLSAgICByZXR1cm4gZ2V0RW51bUNvbnN0YW50VmFsdWUoc3RhdGljX2Nh
c3Q8aW50PihlbnVtVmFsdWUpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKLQot
bmFtZXNwYWNlIFR5cGVEb21haW4gewotLyogICovCi1lbnVtIGNsYXNzIFR5cGVEb21haW5FbnVt
IHsKLSAgICBTaGFyZWQgPSAwLAotICAgIFJlZCA9IDEsCi0gICAgR3JlZW4gPSAyLAotICAgIEJs
dWUgPSAzLAotfTsgLy8gZW51bSBjbGFzcyBUeXBlRG9tYWluRW51bQotfSAvLyBUeXBlRG9tYWlu
Ci0KLQotCi1uYW1lc3BhY2UgVGVzdEhlbHBlcnMgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBQcm90
b2NvbEVudW1UeXBlPgotT3B0aW9uYWw8UHJvdG9jb2xFbnVtVHlwZT4gcGFyc2VFbnVtVmFsdWVG
cm9tU3RyaW5nKGNvbnN0IFN0cmluZyYpOwotCi0vLyBFbnVtcyBpbiB0aGUgJ1R5cGVEb21haW4n
IERvbWFpbgotdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURv
bWFpbjo6VHlwZURvbWFpbkVudW0+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6
OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51bT4oY29uc3QgU3RyaW5nJik7Ci0K
LX0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0K
LX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi1uYW1lc3BhY2UgV1RGIHsKLQotdGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwotCi0vLyBIYXNoIGRlY2xhcmF0aW9ucyBp
biB0aGUgJ1R5cGVEb21haW4nIERvbWFpbgotdGVtcGxhdGU8Pgotc3RydWN0IERlZmF1bHRIYXNo
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46OlR5cGVEb21haW5FbnVtPiB7Ci0gICAg
dHlwZWRlZiBJbnRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46OlR5cGVEb21h
aW5FbnVtPiBIYXNoOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0jIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbE9iamVjdHMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0
cy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0KLSNpbmNsdWRlIDx3
dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFj
ZSBJbnNwZWN0b3IgewotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi1uYW1lc3BhY2UgVGVzdEhl
bHBlcnMgewotCi1zdGF0aWMgY29uc3QgY2hhciogY29uc3QgZW51bV9jb25zdGFudF92YWx1ZXNb
XSA9IHsKLSAgICAic2hhcmVkIiwKLSAgICAicmVkIiwKLSAgICAiZ3JlZW4iLAotICAgICJibHVl
IiwKLSAgICAiYmxhY2siLAotICAgICJ3aGl0ZSIsCi0gICAgImN5YW4iLAotICAgICJtYWdlbnRh
IiwKLSAgICAieWVsbG93IiwKLX07Ci0KLVN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQg
Y29kZSkgewotICAgIHJldHVybiBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb2RlXTsKLX0KLQotLy8g
RW51bXMgaW4gdGhlICdUeXBlRG9tYWluJyBEb21haW4KLXRlbXBsYXRlPD4KLU9wdGlvbmFsPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46OlR5cGVEb21haW5FbnVtPiBwYXJzZUVudW1W
YWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFp
bkVudW0+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCi17Ci0gICAgc3RhdGljIGNvbnN0
IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0gewotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6
UHJvdG9jb2w6OlR5cGVEb21haW46OlR5cGVEb21haW5FbnVtOjpTaGFyZWQsCi0gICAgICAgIChz
aXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW06OlJl
ZCwKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBl
RG9tYWluRW51bTo6R3JlZW4sCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6
VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW06OkJsdWUsCi0gICAgfTsKLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IDQ7ICsraSkKLSAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1f
Y29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAgICAgICAgIHJldHVybiAo
SW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW0pY29uc3RhbnRW
YWx1ZXNbaV07Ci0KLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi0KLX0gLy8gbmFtZXNw
YWNlIFRlc3RIZWxwZXJzCi0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNw
cAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbmNsdWRlIDx3
dGYvUmV0YWluUHRyLmg+Ci0KLUBwcm90b2NvbCBUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluRG9t
YWluSGFuZGxlcjsKLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotY2xhc3MgT2JqQ0luc3Bl
Y3RvckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5h
dGVDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIgewotICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwotcHVibGljOgotICAgIE9iakNJbnNwZWN0b3JDb21tYW5kRG9tYWluQmFja2VuZERp
c3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sQ29tbWFuZERvbWFpbkRvbWFpbkhhbmRsZXI+IGhhbmRs
ZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KLSAgICB2b2lkIGNvbW1hbmRXaXRoRW51bVJl
dHVyblZhbHVlKGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKLXByaXZhdGU6Ci0gICAgUmV0YWluUHRy
PGlkPFRlc3RQcm90b2NvbENvbW1hbmREb21haW5Eb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xC
YWNrZW5kRGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBl
bnVtLXZhbHVlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3Bh
dGNoZXJzLmgiCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2luY2x1ZGUg
IlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVz
Lmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi12b2lkIE9iakNJbnNwZWN0b3JDb21tYW5k
RG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlKGxvbmcg
cmVxdWVzdElkKQotewotICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBz
ZWxlY3Rvcihjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZVdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nl
c3NDYWxsYmFjazopXSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90
b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAi
J0NvbW1hbmREb21haW4uY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUnIHdhcyBub3QgZm91bmQi
X3MpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJp
bmcgKmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29s
RXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsK
LSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICB9
OwotCi0gICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWlu
Q29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWVSZXR1cm5WYWx1ZSByZXR1cm5WYWx1ZSkgewotICAg
ICAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHRPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygicmV0dXJuVmFsdWUiX3MsIHRv
UHJvdG9jb2xTdHJpbmcocmV0dXJuVmFsdWUpKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHRPYmplY3QpLCBmYWxzZSk7
Ci0gICAgfTsKLQotICAgIFttX2RlbGVnYXRlIGNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlV2l0
aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxi
YWNrXTsKLX0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24uaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGVudW0tdmFsdWVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgotCi1fX2F0dHJpYnV0
ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29u
ZmlndXJhdGlvbiA6IE5TT2JqZWN0Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluLCBzZXR0
ZXI9c2V0Q29tbWFuZERvbWFpbkhhbmRsZXI6KSBpZDxUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWlu
RG9tYWluSGFuZGxlcj4gY29tbWFuZERvbWFpbkhhbmRsZXI7Ci1AcHJvcGVydHkgKG5vbmF0b21p
YywgcmVhZG9ubHkpIFRlc3RQcm90b2NvbEV2ZW50RG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVy
ICpldmVudERvbWFpbkV2ZW50RGlzcGF0Y2hlcjsKLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbi5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0t
dmFsdWVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgotCi0jaW1wb3J0ICJUZXN0UHJv
dG9jb2xJbnRlcm5hbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJz
LmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5o
PgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVy
Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlz
cGF0Y2hlcnMuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVycy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW1wbGVtZW50YXRp
b24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9y
Q29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci0gICAgaWQ8VGVzdFByb3RvY29sQ29tbWFuZERvbWFp
bkRvbWFpbkhhbmRsZXI+IF9jb21tYW5kRG9tYWluSGFuZGxlcjsKLSAgICBUZXN0UHJvdG9jb2xF
dmVudERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqX2V2ZW50RG9tYWluRXZlbnREaXNwYXRj
aGVyOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJs
ZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGlu
aXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29u
dHJvbGxlcik7Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxm
OwotfQotCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBbX2NvbW1hbmREb21haW5IYW5kbGVyIHJl
bGVhc2VdOwotICAgIFtfZXZlbnREb21haW5FdmVudERpc3BhdGNoZXIgcmVsZWFzZV07Ci0gICAg
W3N1cGVyIGRlYWxsb2NdOwotfQotCi0tICh2b2lkKXNldENvbW1hbmREb21haW5IYW5kbGVyOihp
ZDxUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluRG9tYWluSGFuZGxlcj4paGFuZGxlcgotewotICAg
IGlmIChoYW5kbGVyID09IF9jb21tYW5kRG9tYWluSGFuZGxlcikKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgW19jb21tYW5kRG9tYWluSGFuZGxlciByZWxlYXNlXTsKLSAgICBfY29tbWFuZERvbWFp
bkhhbmRsZXIgPSBbaGFuZGxlciByZXRhaW5dOwotCi0gICAgYXV0byBhbHRlcm5hdGVEaXNwYXRj
aGVyID0gbWFrZVVuaXF1ZTxPYmpDSW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRj
aGVyPihoYW5kbGVyKTsKLSAgICBhdXRvIGFsdGVybmF0ZUFnZW50ID0gbWFrZVVuaXF1ZTxBbHRl
cm5hdGVEaXNwYXRjaGFibGVBZ2VudDxDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIsIEFs
dGVybmF0ZUNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4+KCJDb21tYW5kRG9tYWluIl9z
LCAqX2NvbnRyb2xsZXIsIFdURk1vdmUoYWx0ZXJuYXRlRGlzcGF0Y2hlcikpOwotICAgIF9jb250
cm9sbGVyLT5hcHBlbmRFeHRyYUFnZW50KFdURk1vdmUoYWx0ZXJuYXRlQWdlbnQpKTsKLX0KLQot
LSAoaWQ8VGVzdFByb3RvY29sQ29tbWFuZERvbWFpbkRvbWFpbkhhbmRsZXI+KWNvbW1hbmREb21h
aW5IYW5kbGVyCi17Ci0gICAgcmV0dXJuIF9jb21tYW5kRG9tYWluSGFuZGxlcjsKLX0KLQotLSAo
VGVzdFByb3RvY29sRXZlbnREb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKilldmVudERvbWFp
bkV2ZW50RGlzcGF0Y2hlcgotewotICAgIGlmICghX2V2ZW50RG9tYWluRXZlbnREaXNwYXRjaGVy
KQotICAgICAgICBfZXZlbnREb21haW5FdmVudERpc3BhdGNoZXIgPSBbW1Rlc3RQcm90b2NvbEV2
ZW50RG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyIGFsbG9jXSBpbml0V2l0aENvbnRyb2xsZXI6
X2NvbnRyb2xsZXJdOwotICAgIHJldHVybiBfZXZlbnREb21haW5FdmVudERpc3BhdGNoZXI7Ci19
Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0K
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbElu
dGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2lt
cG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQot
QGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbEV2ZW50RG9tYWluRG9tYWluRXZlbnREaXNwYXRj
aGVyCi17Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsK
LX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNw
ZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsK
LSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xs
ZXIpOwotICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1cm4gc2VsZjsKLX0K
LQotLSAodm9pZClldmVudFdpdGhFbnVtUGFyYW1ldGVyV2l0aFBhcmFtZXRlcjooVGVzdFByb3Rv
Y29sRXZlbnREb21haW5FdmVudFdpdGhFbnVtUGFyYW1ldGVyUGFyYW1ldGVyKXBhcmFtZXRlcgot
ewotICAgIGNvbnN0IEZyb250ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29udHJvbGxlci0+ZnJvbnRl
bmRSb3V0ZXIoKTsKLQotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3Ms
ICJFdmVudERvbWFpbi5ldmVudFdpdGhFbnVtUGFyYW1ldGVyIl9zKTsKLSAgICBSZWY8SlNPTjo6
T2JqZWN0PiBwYXJhbXNPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIHBhcmFt
c09iamVjdC0+c2V0U3RyaW5nKCJwYXJhbWV0ZXIiX3MsIHRvUHJvdG9jb2xTdHJpbmcocGFyYW1l
dGVyKSk7Ci0gICAganNvbk1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIl9zLCBXVEZNb3ZlKHBh
cmFtc09iamVjdCkpOwotICAgIHJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0
cmluZygpKTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnRE
aXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRh
dGlvbi5oPgotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+
Ci0KLQotCi0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbFBsYXRmb3Jt
KSB7Ci0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1BbGwsCi0gICAgVGVzdFByb3RvY29sUGxhdGZv
cm1HZW5lcmljLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TLAotICAgIFRlc3RQcm90b2Nv
bFBsYXRmb3JtTWFjT1MsCi19OwotCi0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQ
cm90b2NvbFR5cGVEb21haW5FbnVtKSB7Ci0gICAgVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1T
aGFyZWQsCi0gICAgVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1SZWQsCi0gICAgVGVzdFByb3Rv
Y29sVHlwZURvbWFpbkVudW1HcmVlbiwKLSAgICBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bUJs
dWUsCi19OwotCi0KLQotQHByb3RvY29sIFRlc3RQcm90b2NvbENvbW1hbmREb21haW5Eb21haW5I
YW5kbGVyIDxOU09iamVjdD4KLUBvcHRpb25hbAotLSAodm9pZCljb21tYW5kV2l0aEVudW1SZXR1
cm5WYWx1ZVdpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JD
YWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoVGVzdFByb3RvY29sQ29tbWFuZERvbWFp
bkNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlUmV0dXJuVmFsdWUgcmV0dXJuVmFsdWUpKXN1Y2Nl
c3NDYWxsYmFjazsKLUBlbmQKLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQi
KSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbEV2ZW50RG9tYWluRG9tYWluRXZlbnREaXNwYXRj
aGVyIDogTlNPYmplY3QKLS0gKHZvaWQpZXZlbnRXaXRoRW51bVBhcmFtZXRlcldpdGhQYXJhbWV0
ZXI6KFRlc3RQcm90b2NvbEV2ZW50RG9tYWluRXZlbnRXaXRoRW51bVBhcmFtZXRlclBhcmFtZXRl
cilwYXJhbWV0ZXI7Ci1AZW5kCi0KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29s
QnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNp
bXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCi0jaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPHd0Zi9K
U09OVmFsdWVzLmg+Ci0KLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sRXZlbnREb21haW5Eb21haW5F
dmVudERpc3BhdGNoZXIgKFByaXZhdGUpCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9s
bGVyOihJbnNwZWN0b3I6OkF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxl
cjsKLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBv
cnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KLQotbmFtZXNw
YWNlIEluc3BlY3RvciB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KLU9wdGlv
bmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUp
OwotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sUGxhdGZvcm0g
dmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0
Zm9ybUFsbDoKLSAgICAgICAgcmV0dXJuICJhbGwiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQ
bGF0Zm9ybUdlbmVyaWM6Ci0gICAgICAgIHJldHVybiAiZ2VuZXJpYyJfczsKLSAgICBjYXNlIFRl
c3RQcm90b2NvbFBsYXRmb3JtSU9TOgotICAgICAgICByZXR1cm4gImlvcyJfczsKLSAgICBjYXNl
IFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M6Ci0gICAgICAgIHJldHVybiAibWFjb3MiX3M7Ci0g
ICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sUGxhdGZv
cm0+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2
YWx1ZSA9PSAiYWxsIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOwot
ICAgIGlmICh2YWx1ZSA9PSAiZ2VuZXJpYyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQ
bGF0Zm9ybUdlbmVyaWM7Ci0gICAgaWYgKHZhbHVlID09ICJpb3MiKQotICAgICAgICByZXR1cm4g
VGVzdFByb3RvY29sUGxhdGZvcm1JT1M7Ci0gICAgaWYgKHZhbHVlID09ICJtYWNvcyIpCi0gICAg
ICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOwotICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7Ci19Ci0KLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2Nv
bFR5cGVEb21haW5FbnVtIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2Ug
VGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1TaGFyZWQ6Ci0gICAgICAgIHJldHVybiAic2hhcmVk
Il9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1SZWQ6Ci0gICAgICAgIHJl
dHVybiAicmVkIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1HcmVlbjoK
LSAgICAgICAgcmV0dXJuICJncmVlbiJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFR5cGVEb21h
aW5FbnVtQmx1ZToKLSAgICAgICAgcmV0dXJuICJibHVlIl9zOwotICAgIH0KLX0KLQotdGVtcGxh
dGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtPiBmcm9tUHJv
dG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gInNo
YXJlZCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bVNoYXJlZDsK
LSAgICBpZiAodmFsdWUgPT0gInJlZCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xUeXBl
RG9tYWluRW51bVJlZDsKLSAgICBpZiAodmFsdWUgPT0gImdyZWVuIikKLSAgICAgICAgcmV0dXJu
IFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtR3JlZW47Ci0gICAgaWYgKHZhbHVlID09ICJibHVl
IikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtQmx1ZTsKLSAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIK
LQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFy
c2VyLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0
ZS5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW50ZXJmYWNlIFRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucyAoVHlwZURvbWFpbkRvbWFpbikKLQotKyAodm9pZClfcGFyc2VU
eXBlRG9tYWluRW51bTooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxv
YWQ7Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cyAoVHlwZURvbWFpbkRvbWFpbikKLQotKyAodm9pZClfcGFyc2VUeXBlRG9tYWluRW51bTooTlNO
dW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19F
WENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBjbGFzc10pOwotICAgIE9w
dGlvbmFsPFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtPiByZXN1bHQgPSBJbnNwZWN0b3I6OmZy
b21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bT4ocGF5bG9hZCk7Ci0g
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfRU5VTV9WQUxVRShyZXN1bHQsIEAiVHlwZURvbWFp
bkVudW0iKTsKLSAgICAqb3V0VmFsdWUgPSBAKHJlc3VsdC52YWx1ZSgpKTsKLX0KLQotQGVuZAot
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9y
dCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3Iv
UldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMu
aD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0
b3I7Ci0KLQotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2V4cGVjdGVkL2V2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBl
Lmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2dlbmVyaWMvZXhwZWN0ZWQvZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVi
dWdnYWJsZVR5cGUuanNvbi1yZXN1bHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4
OWE5N2ZmNTVkLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9ldmVudC10YXJnZXRUeXBlLW1hdGNo
aW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJlc3VsdAorKysgL2Rldi9udWxsCkBAIC0x
LDEwNjMgKzAsMCBAQAotIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5q
cwotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRhcmdldFR5cGUtbWF0
Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotLy8gRG9tYWluCi1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVy
RG9tYWluKCJEb21haW4iLCBudWxsKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5k
KCJEb21haW4uQ29tbWFuZCIsIG51bGwsIFtdLCBbXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lz
dGVyRXZlbnQoIkRvbWFpbi5FdmVudCIsIFsicGFnZSIsICJ3b3JrZXIiXSwgW10pOwotSW5zcGVj
dG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbkRpc3BhdGNoZXIgPSBJbnNwZWN0b3JCYWNrZW5kLnJl
Z2lzdGVyRGlzcGF0Y2hlci5iaW5kKEluc3BlY3RvckJhY2tlbmQsICJEb21haW4iKTsKLUluc3Bl
Y3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkRvbWFpbiIsIFsicGFnZSJdKTsKLSMjIyBFbmQg
RmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEg
b25jZQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0KLSNp
bmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNz
IEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2b2lkIHNldEJhY2tl
bmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1f
YmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9Ci0gICAgQmFja2VuZERp
c3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlz
cGF0Y2hlci5nZXQoKTsgfQotcHJpdmF0ZToKLSAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+
IG1fYmFja2VuZERpc3BhdGNoZXI7Ci19OwotCi0KLWNsYXNzIEFsdGVybmF0ZURvbWFpbkJhY2tl
bmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1Ymxp
YzoKLSAgICB2aXJ0dWFsIH5BbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQot
ICAgIHZpcnR1YWwgdm9pZCBDb21tYW5kKGxvbmcgY2FsbElkKSA9IDA7Ci19OwotCi19IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKLQotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQotIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9t
YWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3Rz
LmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3Rv
ciB7Ci0KLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCi0jaWYgRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi1jbGFzcyBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlz
cGF0Y2hlcjsKLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKLQotY2xhc3MgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKLXB1YmxpYzoKLSAg
ICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChFcnJvclN0cmluZyYpID0gMDsKLXByb3RlY3RlZDoKLSAg
ICB2aXJ0dWFsIH5Eb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKLX07Ci0KLWNsYXNz
IERvbWFpbkJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tl
bmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPERvbWFpbkJhY2tlbmREaXNw
YXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIqKTsKLSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJp
bmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5hbDsKLXByaXZhdGU6
Ci0gICAgdm9pZCBDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYm
IHBhcmFtZXRlcnMpOwotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQotcHVibGljOgotICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0Y2hlcihBbHRlcm5hdGVEb21h
aW5CYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVybmF0ZURp
c3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9Ci1wcml2YXRlOgotICAgIEFsdGVybmF0
ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKiBtX2FsdGVybmF0ZURpc3BhdGNoZXIgeyBudWxscHRy
IH07Ci0jZW5kaWYKLXByaXZhdGU6Ci0gICAgRG9tYWluQmFja2VuZERpc3BhdGNoZXIoQmFja2Vu
ZERpc3BhdGNoZXImLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICBEb21h
aW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQgeyBudWxscHRyIH07Ci19OwotCi19
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmct
ZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RCYWNrZW5k
RGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250
ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYv
TmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNpZiBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSNpbmNsdWRlICJUZXN0QWx0
ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIEluc3BlY3Rv
ciB7Ci0KLURvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6fkRvbWFpbkJhY2tlbmREaXNw
YXRjaGVySGFuZGxlcigpIHsgfQotCi1SZWY8RG9tYWluQmFja2VuZERpc3BhdGNoZXI+IERvbWFp
bkJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNw
YXRjaGVyLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQotewotICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRj
aGVyLCBhZ2VudCkpOwotfQotCi1Eb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6RG9tYWluQmFja2Vu
ZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBEb21haW5C
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQotICAgIDogU3VwcGxlbWVudGFsQmFja2Vu
ZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCi0gICAgLCBtX2FnZW50KGFnZW50KQotewot
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbigiRG9t
YWluIl9zLCB0aGlzKTsKLX0KLQotdm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0
Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0
PiYmIG1lc3NhZ2UpCi17Ci0gICAgUmVmPERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0
KCp0aGlzKTsKLQotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVz
c2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRlcnMpOwotCi0gICAgaWYgKG1ldGhv
ZCA9PSAiQ29tbWFuZCIpCi0gICAgICAgIENvbW1hbmQocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFt
ZXRlcnMpKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFBy
b3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi4i
ICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOwotfQotCi12b2lkIERvbWFpbkJhY2tlbmRE
aXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYm
KQotewotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotICAgIGlm
IChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVy
LT5Db21tYW5kKHJlcXVlc3RJZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQot
ICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpT
T046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgbV9hZ2VudC0+Q29tbWFuZChlcnJvcik7Ci0KLSAg
ICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5k
UmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0g
ICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERp
c3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3Bw
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4t
ZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIK
LSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgRnJvbnRlbmRSb3V0ZXI7Ci0K
LWNsYXNzIERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7Ci1wdWJsaWM6Ci0gICAgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVyKEZyb250ZW5kUm91
dGVyJiBmcm9udGVuZFJvdXRlcikgOiBtX2Zyb250ZW5kUm91dGVyKGZyb250ZW5kUm91dGVyKSB7
IH0KLSAgICB2b2lkIEV2ZW50KCk7Ci1wcml2YXRlOgotICAgIEZyb250ZW5kUm91dGVyJiBtX2Zy
b250ZW5kUm91dGVyOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZp
bGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9u
dGVuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2
ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXZvaWQgRG9tYWluRnJvbnRl
bmREaXNwYXRjaGVyOjpFdmVudCgpCi17Ci0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3Nh
Z2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmco
Im1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7Ci0KLSAgICBtX2Zyb250ZW5kUm91dGVyLnNl
bmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAK
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVn
Z2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90
b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFtZXNwYWNlIElu
c3BlY3RvciB7Ci0KLQotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotCi0KLQotCi0KLQot
fSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sT2JqZWN0cy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVu
dC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0KLSNpbmNsdWRlIDx3dGYvT3B0aW9u
YWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0
b3IgewotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9j
b2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sT2JqZWN0cy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNw
YXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0
VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFp
blB0ci5oPgotCi1AcHJvdG9jb2wgVGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcjsKLQot
bmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotY2xhc3MgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tl
bmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRj
aGVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBPYmpDSW5z
cGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWlu
SGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQotICAgIHZvaWQgQ29t
bWFuZChsb25nIHJlcXVlc3RJZCkgZmluYWw7Ci1wcml2YXRlOgotICAgIFJldGFpblB0cjxpZDxU
ZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKLX07Ci0KLX0gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmRE
aXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0
Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudC10YXJnZXRU
eXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAi
VGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9j
b2xJbnRlcm5hbC5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgot
I2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi12
b2lkIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJl
cXVlc3RJZCkKLXsKLSAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2Vs
ZWN0b3IoQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgewotICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwg
QmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi5Db21tYW5kJyB3YXMg
bm90IGZvdW5kIl9zKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdF
cnJvcnMoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlkIGVycm9yQ2FsbGJhY2sg
PSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBv
cnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9y
LCBlcnJvcik7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3Jz
KCk7Ci0gICAgfTsKLQotICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57Ci0gICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCksIGZhbHNlKTsKLSAgICB9OwotCi0gICAgW21fZGVsZWdhdGUgQ29tbWFuZFdpdGhFcnJv
ckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107
Ci19Ci0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xDb25maWd1cmF0aW9uLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVu
dC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rv
ci9UZXN0UHJvdG9jb2wuaD4KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQi
KSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAotQHBy
b3BlcnR5IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNldERvbWFpbkhhbmRsZXI6KSBpZDxU
ZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiBkb21haW5IYW5kbGVyOwotQHByb3BlcnR5
IChub25hdG9taWMsIHJlYWRvbmx5KSBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3Bh
dGNoZXIgKmRvbWFpbkV2ZW50RGlzcGF0Y2hlcjsKLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbi5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50
LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbi5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2lt
cG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgotI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgotCi11c2luZyBu
YW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xs
ZXI7Ci0gICAgaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4gX2RvbWFpbkhhbmRs
ZXI7Ci0gICAgVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyICpfZG9tYWlu
RXZlbnREaXNwYXRjaGVyOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVy
OihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBzZWxm
ID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAg
ICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAg
IHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBbX2RvbWFpbkhhbmRs
ZXIgcmVsZWFzZV07Ci0gICAgW19kb21haW5FdmVudERpc3BhdGNoZXIgcmVsZWFzZV07Ci0gICAg
W3N1cGVyIGRlYWxsb2NdOwotfQotCi0tICh2b2lkKXNldERvbWFpbkhhbmRsZXI6KGlkPFRlc3RQ
cm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+KWhhbmRsZXIKLXsKLSAgICBpZiAoaGFuZGxlciA9
PSBfZG9tYWluSGFuZGxlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgW19kb21haW5IYW5kbGVy
IHJlbGVhc2VdOwotICAgIF9kb21haW5IYW5kbGVyID0gW2hhbmRsZXIgcmV0YWluXTsKLQotICAg
IGF1dG8gYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IG1ha2VVbmlxdWU8T2JqQ0luc3BlY3RvckRvbWFp
bkJhY2tlbmREaXNwYXRjaGVyPihoYW5kbGVyKTsKLSAgICBhdXRvIGFsdGVybmF0ZUFnZW50ID0g
bWFrZVVuaXF1ZTxBbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudDxEb21haW5CYWNrZW5kRGlzcGF0
Y2hlciwgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXI+PigiRG9tYWluIl9zLCAqX2Nv
bnRyb2xsZXIsIFdURk1vdmUoYWx0ZXJuYXRlRGlzcGF0Y2hlcikpOwotICAgIF9jb250cm9sbGVy
LT5hcHBlbmRFeHRyYUFnZW50KFdURk1vdmUoYWx0ZXJuYXRlQWdlbnQpKTsKLX0KLQotLSAoaWQ8
VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4pZG9tYWluSGFuZGxlcgotewotICAgIHJl
dHVybiBfZG9tYWluSGFuZGxlcjsKLX0KLQotLSAoVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZl
bnREaXNwYXRjaGVyICopZG9tYWluRXZlbnREaXNwYXRjaGVyCi17Ci0gICAgaWYgKCFfZG9tYWlu
RXZlbnREaXNwYXRjaGVyKQotICAgICAgICBfZG9tYWluRXZlbnREaXNwYXRjaGVyID0gW1tUZXN0
UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgYWxsb2NdIGluaXRXaXRoQ29udHJv
bGxlcjpfY29udHJvbGxlcl07Ci0gICAgcmV0dXJuIF9kb21haW5FdmVudERpc3BhdGNoZXI7Ci19
Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0K
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRv
bWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQg
IlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMu
aD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQ
cm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlcgotewotICAgIEF1Z21lbnRhYmxlSW5z
cGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0
V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxl
cgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICBy
ZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9IGNv
bnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpRXZlbnQKLXsKLSAgICBj
b25zdCBGcm9udGVuZFJvdXRlciYgcm91dGVyID0gX2NvbnRyb2xsZXItPmZyb250ZW5kUm91dGVy
KCk7Ci0KLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6
Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9tYWlu
LkV2ZW50Il9zKTsKLSAgICByb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJp
bmcoKSk7Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlz
cGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4t
ZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2ltcG9ydCA8V2Vi
SW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgotCi0KLQotCi10eXBlZGVmIE5TX0VO
VU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xQbGF0Zm9ybSkgewotICAgIFRlc3RQcm90b2NvbFBs
YXRmb3JtQWxsLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYywKLSAgICBUZXN0UHJv
dG9jb2xQbGF0Zm9ybUlPUywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TLAotfTsKLQot
Ci0KLQotCi1AcHJvdG9jb2wgVGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlciA8TlNPYmpl
Y3Q+Ci1Ab3B0aW9uYWwKLS0gKHZvaWQpQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4p
KE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXiko
dm9pZCkpc3VjY2Vzc0NhbGxiYWNrOwotQGVuZAotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5
ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnRE
aXNwYXRjaGVyIDogTlNPYmplY3QKLS0gKHZvaWQpRXZlbnQ7Ci1AZW5kCi0KLQotI2ltcG9ydCA8
V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgotCi0j
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xJbnRlcm5hbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnQtdGFy
Z2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIK
LSNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCi0jaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPHd0
Zi9KU09OVmFsdWVzLmg+Ci0KLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZl
bnREaXNwYXRjaGVyIChQcml2YXRlKQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxl
cjooSW5zcGVjdG9yOjpBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXI7
Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVn
Z2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJv
dG9jb2xBcnJheUNvbnZlcnNpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+Ci1PcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Q
cm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKLQotaW5saW5lIFN0cmluZyB0b1By
b3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFBsYXRmb3JtIHZhbHVlKQotewotICAgIHN3aXRjaCh2
YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1BbGw6Ci0gICAgICAgIHJldHVy
biAiYWxsIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOgotICAgICAg
ICByZXR1cm4gImdlbmVyaWMiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzoK
LSAgICAgICAgcmV0dXJuICJpb3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1h
Y09TOgotICAgICAgICByZXR1cm4gIm1hY29zIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8Pgot
aW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFBsYXRmb3JtPiBmcm9tUHJvdG9jb2xTdHJpbmco
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gImFsbCIpCi0gICAgICAg
IHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDsKLSAgICBpZiAodmFsdWUgPT0gImdlbmVy
aWMiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOwotICAgIGlm
ICh2YWx1ZSA9PSAiaW9zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9T
OwotICAgIGlmICh2YWx1ZSA9PSAibWFjb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29s
UGxhdGZvcm1NYWNPUzsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi19IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGlu
Zy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIK
LQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFy
c2VyLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0
ZS5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLQotCi0KLQotIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbFR5cGVzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZl
bnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIK
LSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0j
aW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQot
dXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9ldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0
ZXJzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5q
c29uLXJlc3VsdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGE5NWJhNTU4Y2YuLjAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNv
bi1yZXN1bHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMjE3ICswLDAgQEAKLSMjIyBCZWdpbiBGaWxl
OiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotLy8gRGF0YWJhc2UKLUluc3BlY3RvckJh
Y2tlbmQucmVnaXN0ZXJEb21haW4oIkRhdGFiYXNlIiwgbnVsbCk7Ci1JbnNwZWN0b3JCYWNrZW5k
LnJlZ2lzdGVyRXZlbnQoIkRhdGFiYXNlLmRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMiLCBu
dWxsLCBbImNvbHVtbk5hbWVzIiwgIm5vdGVzIiwgInRpbWVzdGFtcCIsICJ2YWx1ZXMiLCAicGF5
bG9hZCIsICJzcWxFcnJvciIsICJzY3JlZW5Db2xvciIsICJhbHRlcm5hdGVDb2xvcnMiLCAicHJp
bnRDb2xvciJdKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudCgiRGF0YWJhc2UuZGlk
RXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIiwgbnVsbCwgWyJjb2x1bW5OYW1lcyIsICJub3Rl
cyIsICJ0aW1lc3RhbXAiLCAidmFsdWVzIiwgInBheWxvYWQiLCAic3FsRXJyb3IiLCAic2NyZWVu
Q29sb3IiLCAiYWx0ZXJuYXRlQ29sb3JzIiwgInByaW50Q29sb3IiXSk7Ci1JbnNwZWN0b3JCYWNr
ZW5kLnJlZ2lzdGVyRGF0YWJhc2VEaXNwYXRjaGVyID0gSW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rl
ckRpc3BhdGNoZXIuYmluZChJbnNwZWN0b3JCYWNrZW5kLCAiRGF0YWJhc2UiKTsKLUluc3BlY3Rv
ckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkRhdGFiYXNlIiwgbnVsbCk7Ci0jIyMgRW5kIEZpbGU6
IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVy
bmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xU
eXBlcy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIu
aD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNw
YXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxC
YWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBX
VEZNb3ZlKGRpc3BhdGNoZXIpOyB9Ci0gICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNw
YXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQotcHJp
dmF0ZToKLSAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7
Ci19OwotCi0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotI2VuZGlmIC8vIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotIyMjIEVuZCBGaWxlOiBUZXN0QWx0
ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5k
RGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13
aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9i
amVjdHMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5z
cGVjdG9yIHsKLQotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KLQotCi19IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3
dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQotI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMu
aCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLX0gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25j
ZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPHd0Zi9KU09O
VmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJ
bnNwZWN0b3IgewotCi1jbGFzcyBGcm9udGVuZFJvdXRlcjsKLQotY2xhc3MgRGF0YWJhc2VGcm9u
dGVuZERpc3BhdGNoZXIgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgot
ICAgIERhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyKEZyb250ZW5kUm91dGVyJiBmcm9udGVuZFJv
dXRlcikgOiBtX2Zyb250ZW5kUm91dGVyKGZyb250ZW5kUm91dGVyKSB7IH0KLSAgICB2b2lkIGRp
ZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMoUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4g
Y29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyogbm90ZXMsIGNvbnN0IGRvdWJsZSogdGltZXN0YW1w
LCBSZWZQdHI8SlNPTjo6T2JqZWN0PiB2YWx1ZXMsIFJlZlB0cjxKU09OOjpWYWx1ZT4gcGF5bG9h
ZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gc3FsRXJyb3Is
IGNvbnN0IFN0cmluZyogc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpE
YXRhYmFzZTo6Q29sb3JMaXN0PiBhbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyogcHJpbnRD
b2xvcik7Ci0gICAgdm9pZCBkaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMoUmVmUHRyPEpT
T046OkFycmF5T2Y8U3RyaW5nPj4gY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgbm90ZXMsIGRv
dWJsZSB0aW1lc3RhbXAsIFJlZlB0cjxKU09OOjpPYmplY3Q+IHZhbHVlcywgUmVmUHRyPEpTT046
OlZhbHVlPiBwYXlsb2FkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVy
cm9yPiBzcWxFcnJvciwgY29uc3QgU3RyaW5nJiBzY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IGFsdGVybmF0ZUNvbG9ycywgY29uc3Qg
U3RyaW5nJiBwcmludENvbG9yKTsKLXByaXZhdGU6Ci0gICAgRnJvbnRlbmRSb3V0ZXImIG1fZnJv
bnRlbmRSb3V0ZXI7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmls
ZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250
ZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZl
bnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0
RnJvbnRlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5h
bWVzcGFjZSBJbnNwZWN0b3IgewotCi12b2lkIERhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyOjpk
aWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+
IGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIG5vdGVzLCBjb25zdCBkb3VibGUqIHRpbWVzdGFt
cCwgUmVmUHRyPEpTT046Ok9iamVjdD4gdmFsdWVzLCBSZWZQdHI8SlNPTjo6VmFsdWU+IHBheWxv
YWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVycm9y
LCBjb25zdCBTdHJpbmcqIHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6OkNvbG9yTGlzdD4gYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcqIHByaW50
Q29sb3IpCi17Ci0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmpl
Y3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRh
dGFiYXNlLmRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMiX3MpOwotICAgIFJlZjxKU09OOjpP
YmplY3Q+IHBhcmFtc09iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgaWYgKGNv
bHVtbk5hbWVzKQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJf
cywgY29sdW1uTmFtZXMpOwotICAgIGlmIChub3RlcykKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5z
ZXRTdHJpbmcoIm5vdGVzIl9zLCAqbm90ZXMpOwotICAgIGlmICh0aW1lc3RhbXApCi0gICAgICAg
IHBhcmFtc09iamVjdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICp0aW1lc3RhbXApOwotICAg
IGlmICh2YWx1ZXMpCi0gICAgICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3Ms
IHZhbHVlcyk7Ci0gICAgaWYgKHBheWxvYWQpCi0gICAgICAgIHBhcmFtc09iamVjdC0+c2V0VmFs
dWUoInBheWxvYWQiX3MsICpwYXlsb2FkKTsKLSAgICBpZiAoc3FsRXJyb3IpCi0gICAgICAgIHBh
cmFtc09iamVjdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgc3FsRXJyb3IpOwotICAgIGlmIChz
Y3JlZW5Db2xvcikKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9y
Il9zLCAqc2NyZWVuQ29sb3IpOwotICAgIGlmIChhbHRlcm5hdGVDb2xvcnMpCi0gICAgICAgIHBh
cmFtc09iamVjdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgYWx0ZXJuYXRlQ29sb3Jz
KTsKLSAgICBpZiAocHJpbnRDb2xvcikKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmco
InByaW50Q29sb3IiX3MsICpwcmludENvbG9yKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0
KCJwYXJhbXMiX3MsIFdURk1vdmUocGFyYW1zT2JqZWN0KSk7Ci0KLSAgICBtX2Zyb250ZW5kUm91
dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwotfQotCi12b2lkIERh
dGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyOjpkaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMo
UmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYg
bm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJlZlB0cjxKU09OOjpPYmplY3Q+IHZhbHVlcywgUmVm
UHRyPEpTT046OlZhbHVlPiBwYXlsb2FkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0
YWJhc2U6OkVycm9yPiBzcWxFcnJvciwgY29uc3QgU3RyaW5nJiBzY3JlZW5Db2xvciwgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IGFsdGVybmF0ZUNvbG9y
cywgY29uc3QgU3RyaW5nJiBwcmludENvbG9yKQotewotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpz
b25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0
U3RyaW5nKCJtZXRob2QiX3MsICJEYXRhYmFzZS5kaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRl
cnMiX3MpOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHBhcmFtc09iamVjdCA9IEpTT046Ok9iamVj
dDo6Y3JlYXRlKCk7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3Ms
IGNvbHVtbk5hbWVzKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygibm90ZXMiX3MsIG5v
dGVzKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCB0aW1lc3Rh
bXApOwotICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIHZhbHVlcyk7Ci0g
ICAgcGFyYW1zT2JqZWN0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgcGF5bG9hZCk7Ci0gICAgcGFy
YW1zT2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBzcWxFcnJvcik7Ci0gICAgcGFyYW1z
T2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCBzY3JlZW5Db2xvcik7Ci0gICAgcGFy
YW1zT2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCBhbHRlcm5hdGVDb2xvcnMp
OwotICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCBwcmludENvbG9y
KTsKLSAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiX3MsIFdURk1vdmUocGFyYW1z
T2JqZWN0KSk7Ci0KLSAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+
dG9KU09OU3RyaW5nKCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVu
ZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbE9iamVjdHMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2
ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9u
cy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLW5hbWVzcGFjZSBQcm90b2NvbCB7
Ci0KLQotCi0vLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KLW5hbWVzcGFjZSBEYXRhYmFzZSB7Ci1j
bGFzcyBFcnJvcjsKLX0gLy8gRGF0YWJhc2UKLS8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9u
cy4KLQotCi0vLyBUeXBlZGVmcy4KLW5hbWVzcGFjZSBEYXRhYmFzZSB7Ci0vKiBVbmlxdWUgaWRl
bnRpZmllciBvZiBEYXRhYmFzZSBvYmplY3QuICovCi10eXBlZGVmIFN0cmluZyBEYXRhYmFzZUlk
OwotdHlwZWRlZiBTdHJpbmcgUHJpbWFyeUNvbG9yczsKLXR5cGVkZWYgSlNPTjo6QXJyYXlPZjxT
dHJpbmc+IENvbG9yTGlzdDsKLX0gLy8gRGF0YWJhc2UKLS8vIEVuZCBvZiB0eXBlZGVmcy4KLQot
bmFtZXNwYWNlIERhdGFiYXNlIHsKLS8qIERhdGFiYXNlIGVycm9yLiAqLwotY2xhc3MgRXJyb3Ig
OiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7Ci1wdWJsaWM6Ci0gICAgZW51bSB7Ci0gICAgICAg
IE5vRmllbGRzU2V0ID0gMCwKLSAgICAgICAgTWVzc2FnZVNldCA9IDEgPDwgMCwKLSAgICAgICAg
Q29kZVNldCA9IDEgPDwgMSwKLSAgICAgICAgQWxsRmllbGRzU2V0ID0gKE1lc3NhZ2VTZXQgfCBD
b2RlU2V0KQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+Ci0gICAgY2xhc3MgQnVp
bGRlciB7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbV9yZXN1
bHQ7Ci0KLSAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYg
Y2FzdFN0YXRlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9j
YXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwotICAgICAgICB9Ci0KLSAgICAgICAg
QnVpbGRlcihSZWY8LypFcnJvciovSlNPTjo6T2JqZWN0PiYmIG9iamVjdCkKLSAgICAgICAgICAg
IDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9p
bml0X3N0YXRlKTsKLSAgICAgICAgfQotICAgICAgICBmcmllbmQgY2xhc3MgRXJyb3I7Ci0gICAg
cHVibGljOgotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2Fn
ZShjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgTWVzc2FnZVNldCksIHByb3BlcnR5X21lc3NhZ2VfYWxyZWFkeV9zZXQp
OwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibWVzc2FnZSJfcywgdmFsdWUpOwot
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNZXNzYWdlU2V0PigpOwotICAgICAgICB9Ci0K
LSAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvZGVTZXQ+JiBzZXRDb2RlKGludCB2YWx1ZSkKLSAg
ICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENvZGVTZXQpLCBw
cm9wZXJ0eV9jb2RlX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJbnRl
Z2VyKCJjb2RlIl9zLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvZGVT
ZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBSZWY8RXJyb3I+IHJlbGVhc2UoKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJl
c3VsdF9pc19ub3RfcmVhZHkpOwotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEVy
cm9yKSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0KSwgY2Fubm90X2Nhc3QpOwotCi0gICAgICAgICAg
ICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uUmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwo
KTsKLSAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxS
ZWY8RXJyb3I+Kj4oJmpzb25SZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0g
ICAgICAgIH0KLSAgICB9OwotCi0gICAgLyoKLSAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6
Ci0gICAgICogUmVmPEVycm9yPiByZXN1bHQgPSBFcnJvcjo6Y3JlYXRlKCkKLSAgICAgKiAgICAg
LnNldE1lc3NhZ2UoLi4uKQotICAgICAqICAgICAuc2V0Q29kZSguLi4pCi0gICAgICogICAgIC5y
ZWxlYXNlKCk7Ci0gICAgICovCi0gICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0
ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKSk7Ci0gICAgfQotfTsKLQotfSAvLyBEYXRhYmFzZQotCi0KLQotfSAvLyBu
YW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
T2JqZWN0cy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0
aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bE9iamVjdHMuaCIKLQotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLW5hbWVzcGFjZSBQcm90
b2NvbCB7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgot
I2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQotCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3Igewot
Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNr
ZW5kRGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVu
dHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJv
dG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVy
bmFsLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW5jbHVk
ZSA8d3RmL0pTT05WYWx1ZXMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLX0gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNw
YXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5o
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwt
cGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KLQotX19hdHRyaWJ1dGVf
XygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZp
Z3VyYXRpb24gOiBOU09iamVjdAotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBUZXN0
UHJvdG9jb2xEYXRhYmFzZURvbWFpbkV2ZW50RGlzcGF0Y2hlciAqZGF0YWJhc2VFdmVudERpc3Bh
dGNoZXI7Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9u
LmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0
ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2lt
cG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2xJbnRlcm5hbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgi
Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgot
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+
Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0
Y2hlcnMuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVycy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW1wbGVtZW50YXRpb24g
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29u
dHJvbGxlciogX2NvbnRyb2xsZXI7Ci0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5FdmVu
dERpc3BhdGNoZXIgKl9kYXRhYmFzZUV2ZW50RGlzcGF0Y2hlcjsKLX0KLQotLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKilj
b250cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0g
ICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIpOwotICAgIF9jb250cm9s
bGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClkZWFsbG9j
Ci17Ci0gICAgW19kYXRhYmFzZUV2ZW50RGlzcGF0Y2hlciByZWxlYXNlXTsKLSAgICBbc3VwZXIg
ZGVhbGxvY107Ci19Ci0KLS0gKFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluRXZlbnREaXNwYXRj
aGVyICopZGF0YWJhc2VFdmVudERpc3BhdGNoZXIKLXsKLSAgICBpZiAoIV9kYXRhYmFzZUV2ZW50
RGlzcGF0Y2hlcikKLSAgICAgICAgX2RhdGFiYXNlRXZlbnREaXNwYXRjaGVyID0gW1tUZXN0UHJv
dG9jb2xEYXRhYmFzZURvbWFpbkV2ZW50RGlzcGF0Y2hlciBhbGxvY10gaW5pdFdpdGhDb250cm9s
bGVyOl9jb250cm9sbGVyXTsKLSAgICByZXR1cm4gX2RhdGFiYXNlRXZlbnREaXNwYXRjaGVyOwot
fQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1t
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1l
dGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNp
bXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFt
ZXNwYWNlIEluc3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbERhdGFiYXNl
RG9tYWluRXZlbnREaXNwYXRjaGVyCi17Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9s
bGVyKiBfY29udHJvbGxlcjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxl
cjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCi17Ci0gICAgc2Vs
ZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0g
ICAgQVNTRVJUKGNvbnRyb2xsZXIpOwotICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKLSAg
ICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClkaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJz
V2l0aENvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopY29sdW1uTmFtZXMgbm90
ZXM6KE5TU3RyaW5nICoqKW5vdGVzIHRpbWVzdGFtcDooZG91YmxlICopdGltZXN0YW1wIHZhbHVl
czooUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqKXZhbHVlcyBwYXlsb2FkOihSV0lQcm90b2NvbEpT
T05PYmplY3QgKiopcGF5bG9hZCBzcWxFcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAq
KilzcWxFcnJvciBzY3JlZW5Db2xvcjooTlNTdHJpbmcgKiopc2NyZWVuQ29sb3IgYWx0ZXJuYXRl
Q29sb3JzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopYWx0ZXJuYXRlQ29sb3JzIHByaW50Q29s
b3I6KE5TU3RyaW5nICoqKXByaW50Q29sb3IKLXsKLSAgICBjb25zdCBGcm9udGVuZFJvdXRlciYg
cm91dGVyID0gX2NvbnRyb2xsZXItPmZyb250ZW5kUm91dGVyKCk7Ci0KLSAgICBUSFJPV19FWENF
UFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoY29sdW1uTmFtZXMsIEAiY29sdW1uTmFt
ZXMiKTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIobm90
ZXMsIEAibm90ZXMiKTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJB
TUVURVIodmFsdWVzLCBAInZhbHVlcyIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09Q
VElPTkFMX1BBUkFNRVRFUihwYXlsb2FkLCBAInBheWxvYWQiKTsKLSAgICBUSFJPV19FWENFUFRJ
T05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoc3FsRXJyb3IsIEAic3FsRXJyb3IiKTsKLSAg
ICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoc2NyZWVuQ29sb3Is
IEAic2NyZWVuQ29sb3IiKTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9Q
QVJBTUVURVIoYWx0ZXJuYXRlQ29sb3JzLCBAImFsdGVybmF0ZUNvbG9ycyIpOwotICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihwcmludENvbG9yLCBAInByaW50
Q29sb3IiKTsKLQotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJE
YXRhYmFzZS5kaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzIl9zKTsKLSAgICBSZWY8SlNPTjo6
T2JqZWN0PiBwYXJhbXNPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGlmIChj
b2x1bW5OYW1lcykKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMi
X3MsIHRvSlNPTlN0cmluZ0FycmF5KCgqY29sdW1uTmFtZXMpKSk7Ci0gICAgaWYgKG5vdGVzKQot
ICAgICAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygibm90ZXMiX3MsICgqbm90ZXMpKTsKLSAg
ICBpZiAodGltZXN0YW1wKQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldERvdWJsZSgidGltZXN0
YW1wIl9zLCAoKnRpbWVzdGFtcCkpOwotICAgIGlmICh2YWx1ZXMpCi0gICAgICAgIHBhcmFtc09i
amVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFsoKnZhbHVlcykgdG9KU09OT2JqZWN0XSk7Ci0g
ICAgaWYgKHBheWxvYWQpCi0gICAgICAgIHBhcmFtc09iamVjdC0+c2V0VmFsdWUoInBheWxvYWQi
X3MsIFsoKnBheWxvYWQpIHRvSlNPTk9iamVjdF0pOwotICAgIGlmIChzcWxFcnJvcikKLSAgICAg
ICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBbKCpzcWxFcnJvcikgdG9K
U09OT2JqZWN0XSk7Ci0gICAgaWYgKHNjcmVlbkNvbG9yKQotICAgICAgICBwYXJhbXNPYmplY3Qt
PnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsICgqc2NyZWVuQ29sb3IpKTsKLSAgICBpZiAoYWx0
ZXJuYXRlQ29sb3JzKQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldEFycmF5KCJhbHRlcm5hdGVD
b2xvcnMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KCgqYWx0ZXJuYXRlQ29sb3JzKSkpOwotICAgIGlm
IChwcmludENvbG9yKQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygicHJpbnRDb2xv
ciJfcywgKCpwcmludENvbG9yKSk7Ci0gICAganNvbk1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1z
Il9zLCBXVEZNb3ZlKHBhcmFtc09iamVjdCkpOwotICAgIHJvdXRlci5zZW5kRXZlbnQoanNvbk1l
c3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKLX0KLQotLSAodm9pZClkaWRFeGVjdXRlTm9PcHRpb25h
bFBhcmFtZXRlcnNXaXRoQ29sdW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWNvbHVt
bk5hbWVzIG5vdGVzOihOU1N0cmluZyAqKW5vdGVzIHRpbWVzdGFtcDooZG91YmxlKXRpbWVzdGFt
cCB2YWx1ZXM6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcyBwYXlsb2FkOihSV0lQcm90
b2NvbEpTT05PYmplY3QgKilwYXlsb2FkIHNxbEVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVy
cm9yICopc3FsRXJyb3Igc2NyZWVuQ29sb3I6KE5TU3RyaW5nICopc2NyZWVuQ29sb3IgYWx0ZXJu
YXRlQ29sb3JzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilhbHRlcm5hdGVDb2xvcnMgcHJpbnRD
b2xvcjooTlNTdHJpbmcgKilwcmludENvbG9yCi17Ci0gICAgY29uc3QgRnJvbnRlbmRSb3V0ZXIm
IHJvdXRlciA9IF9jb250cm9sbGVyLT5mcm9udGVuZFJvdXRlcigpOwotCi0gICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoY29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMi
KTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihub3RlcywgQCJu
b3RlcyIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHZhbHVl
cywgQCJ2YWx1ZXMiKTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRF
UihwYXlsb2FkLCBAInBheWxvYWQiKTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVE
X1BBUkFNRVRFUihzcWxFcnJvciwgQCJzcWxFcnJvciIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfUkVRVUlSRURfUEFSQU1FVEVSKHNjcmVlbkNvbG9yLCBAInNjcmVlbkNvbG9yIik7Ci0gICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoYWx0ZXJuYXRlQ29sb3JzLCBA
ImFsdGVybmF0ZUNvbG9ycyIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFS
QU1FVEVSKHByaW50Q29sb3IsIEAicHJpbnRDb2xvciIpOwotCi0gICAgUmVmPEpTT046Ok9iamVj
dD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdl
LT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRhdGFiYXNlLmRpZEV4ZWN1dGVOb09wdGlvbmFsUGFy
YW1ldGVycyJfcyk7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldEFycmF5KCJjb2x1bW5OYW1l
cyJfcywgdG9KU09OU3RyaW5nQXJyYXkoY29sdW1uTmFtZXMpKTsKLSAgICBwYXJhbXNPYmplY3Qt
PnNldFN0cmluZygibm90ZXMiX3MsIG5vdGVzKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldERvdWJs
ZSgidGltZXN0YW1wIl9zLCB0aW1lc3RhbXApOwotICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0
KCJ2YWx1ZXMiX3MsIFt2YWx1ZXMgdG9KU09OT2JqZWN0XSk7Ci0gICAgcGFyYW1zT2JqZWN0LT5z
ZXRWYWx1ZSgicGF5bG9hZCJfcywgW3BheWxvYWQgdG9KU09OT2JqZWN0XSk7Ci0gICAgcGFyYW1z
T2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBbc3FsRXJyb3IgdG9KU09OT2JqZWN0XSk7
Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCBzY3JlZW5Db2xv
cik7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCB0b0pT
T05TdHJpbmdBcnJheShhbHRlcm5hdGVDb2xvcnMpKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldFN0
cmluZygicHJpbnRDb2xvciJfcywgcHJpbnRDb2xvcik7Ci0gICAganNvbk1lc3NhZ2UtPnNldE9i
amVjdCgicGFyYW1zIl9zLCBXVEZNb3ZlKHBhcmFtc09iamVjdCkpOwotICAgIHJvdXRlci5zZW5k
RXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKLX0KLQotQGVuZAotCi0KLSMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVu
dHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0K
LSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KLQotCi1AY2xh
c3MgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcjsKLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdl
ciwgVGVzdFByb3RvY29sUGxhdGZvcm0pIHsKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbCwK
LSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWMsCi0gICAgVGVzdFByb3RvY29sUGxhdGZv
cm1JT1MsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUywKLX07Ci0KLQotCi0KLV9fYXR0
cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9j
b2xEYXRhYmFzZUVycm9yIDogUldJUHJvdG9jb2xKU09OT2JqZWN0Ci0tIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsK
LS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05P
YmplY3QgKilqc29uT2JqZWN0OwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTWVzc2FnZTooTlNT
dHJpbmcgKiltZXNzYWdlIGNvZGU6KGludCljb2RlOwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5
IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICptZXNzYWdlOwotLyogcmVxdWlyZWQgKi8gQHBy
b3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgaW50IGNvZGU7Ci1AZW5kCi0KLQotCi1fX2F0dHJp
YnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29s
RGF0YWJhc2VEb21haW5FdmVudERpc3BhdGNoZXIgOiBOU09iamVjdAotLSAodm9pZClkaWRFeGVj
dXRlT3B0aW9uYWxQYXJhbWV0ZXJzV2l0aENvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+
Ki8gKiopY29sdW1uTmFtZXMgbm90ZXM6KE5TU3RyaW5nICoqKW5vdGVzIHRpbWVzdGFtcDooZG91
YmxlICopdGltZXN0YW1wIHZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqKXZhbHVlcyBw
YXlsb2FkOihSV0lQcm90b2NvbEpTT05PYmplY3QgKiopcGF5bG9hZCBzcWxFcnJvcjooVGVzdFBy
b3RvY29sRGF0YWJhc2VFcnJvciAqKilzcWxFcnJvciBzY3JlZW5Db2xvcjooTlNTdHJpbmcgKiop
c2NyZWVuQ29sb3IgYWx0ZXJuYXRlQ29sb3JzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopYWx0
ZXJuYXRlQ29sb3JzIHByaW50Q29sb3I6KE5TU3RyaW5nICoqKXByaW50Q29sb3I7Ci0tICh2b2lk
KWRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1dpdGhDb2x1bW5OYW1lczooTlNBcnJheS8q
PE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMgbm90ZXM6KE5TU3RyaW5nICopbm90ZXMgdGltZXN0
YW1wOihkb3VibGUpdGltZXN0YW1wIHZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopdmFs
dWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQgc3FsRXJyb3I6KFRl
c3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKilzcWxFcnJvciBzY3JlZW5Db2xvcjooTlNTdHJpbmcg
KilzY3JlZW5Db2xvciBhbHRlcm5hdGVDb2xvcnM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWFs
dGVybmF0ZUNvbG9ycyBwcmludENvbG9yOihOU1N0cmluZyAqKXByaW50Q29sb3I7Ci1AZW5kCi0K
LQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2Jq
ZWN0cy5oPgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2lt
cG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKLSNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8d3RmL0pT
T05WYWx1ZXMuaD4KLQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkV2ZW50
RGlzcGF0Y2hlciAoUHJpdmF0ZSkKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6
KEluc3BlY3Rvcjo6QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyOwot
QGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFBy
b3RvY29sLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNp
b25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPYmpD
RW51bVR5cGU+Ci1PcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25z
dCBTdHJpbmcmIHZhbHVlKTsKLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQ
cm90b2NvbFBsYXRmb3JtIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2Ug
VGVzdFByb3RvY29sUGxhdGZvcm1BbGw6Ci0gICAgICAgIHJldHVybiAiYWxsIl9zOwotICAgIGNh
c2UgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOgotICAgICAgICByZXR1cm4gImdlbmVyaWMi
X3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzoKLSAgICAgICAgcmV0dXJuICJp
b3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOgotICAgICAgICByZXR1
cm4gIm1hY29zIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRl
c3RQcm90b2NvbFBsYXRmb3JtPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1
ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gImFsbCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9j
b2xQbGF0Zm9ybUFsbDsKLSAgICBpZiAodmFsdWUgPT0gImdlbmVyaWMiKQotICAgICAgICByZXR1
cm4gVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOwotICAgIGlmICh2YWx1ZSA9PSAiaW9zIikK
LSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOwotICAgIGlmICh2YWx1ZSA9
PSAibWFjb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzsKLSAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0j
aW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3Iv
UldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVj
dG9yOwotCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoRGF0YWJhc2VE
b21haW4pCi0KLSsgKHZvaWQpX3BhcnNlRGF0YWJhc2VJZDooTlNTdHJpbmcgKiopb3V0VmFsdWUg
ZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZVByaW1hcnlDb2xvcnM6KE5T
U3RyaW5nICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotKyAodm9pZClfcGFy
c2VDb2xvckxpc3Q6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9h
ZDooaWQpcGF5bG9hZDsKLSsgKHZvaWQpX3BhcnNlRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNl
RXJyb3IgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0KLUBlbmQKLQotQGlt
cGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoRGF0YWJhc2VEb21haW4p
Ci0KLSsgKHZvaWQpX3BhcnNlRGF0YWJhc2VJZDooTlNTdHJpbmcgKiopb3V0VmFsdWUgZnJvbVBh
eWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBh
eWxvYWQsIFtOU1N0cmluZyBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IChOU1N0cmluZyAqKXBh
eWxvYWQ7Ci19Ci0KLSsgKHZvaWQpX3BhcnNlUHJpbWFyeUNvbG9yczooTlNTdHJpbmcgKiopb3V0
VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9S
X0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IChO
U1N0cmluZyAqKXBheWxvYWQ7Ci19Ci0KLSsgKHZvaWQpX3BhcnNlQ29sb3JMaXN0OihOU0FycmF5
Lyo8TlNTdHJpbmc+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAg
ICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0FycmF5Lyo8TlNTdHJp
bmc+Ki8gY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSAoTlNBcnJheS8qPE5TU3RyaW5nPiovICop
cGF5bG9hZDsKLX0KLQotKyAodm9pZClfcGFyc2VFcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VF
cnJvciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOwotICAg
ICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBhbGxvY10gaW5pdFdpdGhQ
YXlsb2FkOnBheWxvYWRdOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVz
Lm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9u
YWwtcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3Rv
Y29sSlNPTk9iamVjdFByaXZhdGUuaD4KLSNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW1w
b3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0K
LUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yCi0KLS0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlk
PiAqKXBheWxvYWQKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAg
cmV0dXJuIG5pbDsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFko
cGF5bG9hZFtAIm1lc3NhZ2UiXSwgQCJtZXNzYWdlIik7Ci0gICAgc2VsZi5tZXNzYWdlID0gcGF5
bG9hZFtAIm1lc3NhZ2UiXTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJP
UEVSVFkocGF5bG9hZFtAImNvZGUiXSwgQCJjb2RlIik7Ci0gICAgc2VsZi5jb2RlID0gW3BheWxv
YWRbQCJjb2RlIl0gaW50ZWdlclZhbHVlXTsKLQotICAgIHJldHVybiBzZWxmOwotfQotLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAq
KW9iamVjdAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0Oltv
YmplY3QgdG9KU09OT2JqZWN0XS5nZXQoKV0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAg
cmV0dXJuIHNlbGY7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3Ry
aW5nICopbWVzc2FnZSBjb2RlOihpbnQpY29kZQotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIg
aW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9S
RVFVSVJFRF9QUk9QRVJUWShtZXNzYWdlLCBAIm1lc3NhZ2UiKTsKLQotICAgIHNlbGYubWVzc2Fn
ZSA9IG1lc3NhZ2U7Ci0gICAgc2VsZi5jb2RlID0gY29kZTsKLQotICAgIHJldHVybiBzZWxmOwot
fQotCi0tICh2b2lkKXNldE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZQotewotICAgIFtzdXBl
ciBzZXRTdHJpbmc6bWVzc2FnZSBmb3JLZXk6QCJtZXNzYWdlIl07Ci19Ci0KLS0gKE5TU3RyaW5n
ICopbWVzc2FnZQotewotICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAibWVzc2FnZSJd
OwotfQotCi0tICh2b2lkKXNldENvZGU6KGludCljb2RlCi17Ci0gICAgW3N1cGVyIHNldEludGVn
ZXI6Y29kZSBmb3JLZXk6QCJjb2RlIl07Ci19Ci0KLS0gKGludCljb2RlCi17Ci0gICAgcmV0dXJu
IFtzdXBlciBpbnRlZ2VyRm9yS2V5OkAiY29kZSJdOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1jb21t
YW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tZXJyb3Ig
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9l
eHBlY3RlZC9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdn
YWJsZVR5cGUuanNvbi1lcnJvcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTEzMGFk
NzBjNDAuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tY29tbWFuZC10YXJnZXRUeXBl
LW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLWVycm9yCisrKyAvZGV2L251bGwK
QEAgLTEgKzAsMCBAQAotRVJST1I6IE1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjogZG9t
YWluIERvbWFpbiBoYXMgYW4gaXRlbSBpbiB0YXJnZXRUeXBlcyAiW3Und29ya2VyJ10iIHRoYXQg
aXMgbm90IHN1cHBvcnRlZCBieSBhbnkgdmFsdWUgaW4gZGVidWdnYWJsZVR5cGVzICJbdSdqYXZh
c2NyaXB0J10iLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1jb21tYW5kLXRhcmdldFR5cGVz
LXR5cGUuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tY29tbWFuZC10YXJnZXRUeXBlcy10eXBl
Lmpzb24tZXJyb3IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk5ZjVlMWE0YThlLi4w
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlwZXMtdHlwZS5q
c29uLWVycm9yCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotRVJST1I6IE1hbGZvcm1lZCBk
b21haW4gc3BlY2lmaWNhdGlvbjogdGFyZ2V0VHlwZXMgbGlzdCBmb3IgY29tbWFuZCBQYWdlT25s
eSBpcyBub3QgYW4gYXJyYXkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tY29tbWFuZC10YXJn
ZXRUeXBlcy12YWx1ZS5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1jb21tYW5kLXRhcmdldFR5
cGVzLXZhbHVlLmpzb24tZXJyb3IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxYTM2
NTY5OTI2Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlw
ZXMtdmFsdWUuanNvbi1lcnJvcgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUVSUk9SOiBN
YWxmb3JtZWQgZG9tYWluIHNwZWNpZmljYXRpb246IHRhcmdldFR5cGVzIGxpc3QgZm9yIGNvbW1h
bmQgUGFnZU9ubHkgaXMgYW4gdW5zdXBwb3J0ZWQgc3RyaW5nLiBXYXM6ICJbdSdwYWdlZSddIiwg
QWxsb3dlZCB2YWx1ZXM6IHNlcnZpY2Utd29ya2VyLCBqYXZhc2NyaXB0LCB3b3JrZXIsIHBhZ2Us
IHdlYi1wYWdlCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWNvbW1hbmQtd2l0aC1pbnZhbGlk
LXBsYXRmb3JtLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWNvbW1hbmQtd2l0aC1pbnZhbGlk
LXBsYXRmb3JtLmpzb24tZXJyb3IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjNjM2
YzU0YjdjLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWNvbW1hbmQtd2l0aC1pbnZh
bGlkLXBsYXRmb3JtLmpzb24tZXJyb3IKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1FUlJP
UjogVW5rbm93biBwbGF0Zm9ybTogaW52YWxpZApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1k
b21haW4tZGVidWdnYWJsZVR5cGVzLXR5cGUuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZG9t
YWluLWRlYnVnZ2FibGVUeXBlcy10eXBlLmpzb24tZXJyb3IKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDJiODk4YmE3YmU3Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWRv
bWFpbi1kZWJ1Z2dhYmxlVHlwZXMtdHlwZS5qc29uLWVycm9yCisrKyAvZGV2L251bGwKQEAgLTEg
KzAsMCBAQAotRVJST1I6IE1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjogZGVidWdnYWJs
ZVR5cGVzIGZvciBkb21haW4gV2ViT25seSBpcyBub3QgYW4gYXJyYXkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVj
dGVkL2ZhaWwtb24tZG9tYWluLWRlYnVnZ2FibGVUeXBlcy12YWx1ZS5qc29uLWVycm9yIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0
ZWQvZmFpbC1vbi1kb21haW4tZGVidWdnYWJsZVR5cGVzLXZhbHVlLmpzb24tZXJyb3IKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmNzFkNDcwY2JkLi4wMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBl
Y3RlZC9mYWlsLW9uLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMtdmFsdWUuanNvbi1lcnJvcgorKysg
L2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUVSUk9SOiBNYWxmb3JtZWQgZG9tYWluIHNwZWNpZmlj
YXRpb246IGRlYnVnZ2FibGVUeXBlcyBmb3IgZG9tYWluIFdlYk9ubHkgaXMgYW4gdW5zdXBwb3J0
ZWQgc3RyaW5nLiBXYXM6ICJbdSd3ZWJiJ10iLCBBbGxvd2VkIHZhbHVlczogc2VydmljZS13b3Jr
ZXIsIGphdmFzY3JpcHQsIHBhZ2UsIHdlYi1wYWdlCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9u
LWRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLWVy
cm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVy
aWMvZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVi
dWdnYWJsZVR5cGUuanNvbi1lcnJvcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODY3
ZTM1MDA4OTguLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZG9tYWluLXRhcmdldFR5
cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tZXJyb3IKKysrIC9kZXYvbnVs
bApAQCAtMSArMCwwIEBACi1FUlJPUjogTWFsZm9ybWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9uOiBj
b21tYW5kIENvbW1hbmQgaGFzIGFuIGl0ZW0gaW4gdGFyZ2V0VHlwZXMgIlt1J3dvcmtlciddIiB0
aGF0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgYW55IHZhbHVlIGluIGRlYnVnZ2FibGVUeXBlcyAiW3Un
amF2YXNjcmlwdCddIi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZG9tYWluLXRhcmdldFR5
cGVzLXR5cGUuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZG9tYWluLXRhcmdldFR5cGVzLXR5
cGUuanNvbi1lcnJvcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTlhMzU5MzNhMzUu
LjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZG9tYWluLXRhcmdldFR5cGVzLXR5cGUu
anNvbi1lcnJvcgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUVSUk9SOiBNYWxmb3JtZWQg
ZG9tYWluIHNwZWNpZmljYXRpb246IHRhcmdldFR5cGVzIGZvciBkb21haW4gUGFnZU9ubHkgaXMg
bm90IGFuIGFycmF5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWRvbWFpbi10YXJnZXRUeXBl
cy12YWx1ZS5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZXMtdmFs
dWUuanNvbi1lcnJvcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDY4MDdmNzJmYzQu
LjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZG9tYWluLXRhcmdldFR5cGVzLXZhbHVl
Lmpzb24tZXJyb3IKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1FUlJPUjogTWFsZm9ybWVk
IGRvbWFpbiBzcGVjaWZpY2F0aW9uOiB0YXJnZXRUeXBlcyBmb3IgZG9tYWluIFBhZ2VPbmx5IGlz
IGFuIHVuc3VwcG9ydGVkIHN0cmluZy4gV2FzOiAiW3UncGFnZWUnXSIsIEFsbG93ZWQgdmFsdWVz
OiBzZXJ2aWNlLXdvcmtlciwgamF2YXNjcmlwdCwgd29ya2VyLCBwYWdlLCB3ZWItcGFnZQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1jYWxsLXBhcmFtZXRlci1u
YW1lcy5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1jYWxsLXBh
cmFtZXRlci1uYW1lcy5qc29uLWVycm9yCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAz
Zjc1NmRlMzI1MC4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtY29t
bWFuZC1jYWxsLXBhcmFtZXRlci1uYW1lcy5qc29uLWVycm9yCisrKyAvZGV2L251bGwKQEAgLTEg
KzAsMCBAQAotRVJST1I6IE1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjogY2FsbCBwYXJh
bWV0ZXIgbGlzdCBmb3IgY29tbWFuZCBwcm9jZXNzUG9pbnRzIGhhcyBkdXBsaWNhdGUgcGFyYW1l
dGVyIG5hbWVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS1jb21tYW5kLXJl
dHVybi1wYXJhbWV0ZXItbmFtZXMuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRl
LWNvbW1hbmQtcmV0dXJuLXBhcmFtZXRlci1uYW1lcy5qc29uLWVycm9yCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBlYTE0OGZmNjdjOS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFp
bC1vbi1kdXBsaWNhdGUtY29tbWFuZC1yZXR1cm4tcGFyYW1ldGVyLW5hbWVzLmpzb24tZXJyb3IK
KysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1FUlJPUjogTWFsZm9ybWVkIGRvbWFpbiBzcGVj
aWZpY2F0aW9uOiByZXR1cm4gcGFyYW1ldGVyIGxpc3QgZm9yIGNvbW1hbmQgcHJvY2Vzc1BvaW50
cyBoYXMgZHVwbGljYXRlIHBhcmFtZXRlciBuYW1lcwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1v
bi1kdXBsaWNhdGUtZXZlbnQtcGFyYW1ldGVyLW5hbWVzLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWls
LW9uLWR1cGxpY2F0ZS1ldmVudC1wYXJhbWV0ZXItbmFtZXMuanNvbi1lcnJvcgpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggYzcxYmJkMjFjMmMuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVk
L2ZhaWwtb24tZHVwbGljYXRlLWV2ZW50LXBhcmFtZXRlci1uYW1lcy5qc29uLWVycm9yCisrKyAv
ZGV2L251bGwKQEAgLTEgKzAsMCBAQAotRVJST1I6IE1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNh
dGlvbjogcGFyYW1ldGVyIGxpc3QgZm9yIGV2ZW50IHByb2Nlc3NlZFBvaW50cyBoYXMgZHVwbGlj
YXRlIHBhcmFtZXRlciBuYW1lcwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUt
dHlwZS1kZWNsYXJhdGlvbnMuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLXR5
cGUtZGVjbGFyYXRpb25zLmpzb24tZXJyb3IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDQ0N2NkZjhlMjhlLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS10
eXBlLWRlY2xhcmF0aW9ucy5qc29uLWVycm9yCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAot
RVJST1I6IER1cGxpY2F0ZSB0eXBlIGRlY2xhcmF0aW9uOiBSdW50aW1lLlJlbW90ZU9iamVjdElk
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLW1lbWJlci1uYW1lcy5q
c29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1tZW1iZXItbmFtZXMuanNv
bi1lcnJvcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDUzNzZhNzdhNDUuLjAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLXR5cGUtbWVtYmVyLW5hbWVzLmpz
b24tZXJyb3IKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1FUlJPUjogTWFsZm9ybWVkIGRv
bWFpbiBzcGVjaWZpY2F0aW9uOiB0eXBlIGRlY2xhcmF0aW9uIGZvciBQb2ludCBoYXMgZHVwbGlj
YXRlIG1lbWJlciBuYW1lcwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1lbnVtLXdpdGgtbm8t
dmFsdWVzLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWVudW0td2l0aC1uby12YWx1ZXMuanNv
bi1lcnJvcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjY1NWMyYjkwN2UuLjAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZW51bS13aXRoLW5vLXZhbHVlcy5qc29uLWVycm9y
CisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotRVJST1I6IFR5cGUgcmVmZXJlbmNlIHdpdGgg
ZW51bSB2YWx1ZXMgbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBlbnVtIHZhbHVlLgpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMv
ZXhwZWN0ZWQvZmFpbC1vbi1ldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dh
YmxlVHlwZS5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1ldmVudC10YXJnZXRUeXBlLW1hdGNo
aW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLWVycm9yCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBiNjVkN2EwZDE5Ni4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1l
dmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLWVycm9y
CisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotRVJST1I6IE1hbGZvcm1lZCBkb21haW4gc3Bl
Y2lmaWNhdGlvbjogZXZlbnQgRXZlbnQgaGFzIGFuIGl0ZW0gaW4gdGFyZ2V0VHlwZXMgIlt1J3dv
cmtlciddIiB0aGF0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgYW55IHZhbHVlIGluIGRlYnVnZ2FibGVU
eXBlcyAiW3UnamF2YXNjcmlwdCddIi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZXZlbnQt
dGFyZ2V0VHlwZXMtdHlwZS5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1ldmVudC10YXJnZXRU
eXBlcy10eXBlLmpzb24tZXJyb3IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0MDNl
MTNhODA5Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGVz
LXR5cGUuanNvbi1lcnJvcgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUVSUk9SOiBNYWxm
b3JtZWQgZG9tYWluIHNwZWNpZmljYXRpb246IHRhcmdldFR5cGVzIGZvciBldmVudCBQYWdlT25s
eSBpcyBub3QgYW4gYXJyYXkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZXZlbnQtdGFyZ2V0
VHlwZXMtdmFsdWUuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlwZXMt
dmFsdWUuanNvbi1lcnJvcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODMwMTJhOWZl
NGUuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlwZXMtdmFs
dWUuanNvbi1lcnJvcgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUVSUk9SOiBNYWxmb3Jt
ZWQgZG9tYWluIHNwZWNpZmljYXRpb246IHRhcmdldFR5cGVzIGZvciBldmVudCBQYWdlT25seSBp
cyBhbiB1bnN1cHBvcnRlZCBzdHJpbmcuIFdhczogIlt1J3BhZ2VlJ10iLCBBbGxvd2VkIHZhbHVl
czogc2VydmljZS13b3JrZXIsIGphdmFzY3JpcHQsIHdvcmtlciwgcGFnZSwgd2ViLXBhZ2UKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tbnVtYmVyLXR5cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1m
bGFnLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRpb25hbC1wYXJh
bWV0ZXItZmxhZy5qc29uLWVycm9yCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5N2Iy
YWYwZTQ3ZS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0
aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbi1lcnJvcgorKysgL2Rldi9udWxsCkBAIC0xICswLDAg
QEAKLUVSUk9SOiBUaGUgJ29wdGlvbmFsJyBmbGFnIGZvciBhIHBhcmFtZXRlciBtdXN0IGJlIGEg
Ym9vbGVhbiBsaXRlcmFsLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1udW1iZXItdHlwZWQt
b3B0aW9uYWwtdHlwZS1tZW1iZXIuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tbnVtYmVyLXR5
cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24tZXJyb3IKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDg2ZGYzNzUwYzFhLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLW51
bWJlci10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29uLWVycm9yCisrKyAvZGV2L251bGwK
QEAgLTEgKzAsMCBAQAotRVJST1I6IFRoZSAnb3B0aW9uYWwnIGZsYWcgZm9yIGEgdHlwZSBtZW1i
ZXIgbXVzdCBiZSBhIGJvb2xlYW4gbGl0ZXJhbC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24t
c3RyaW5nLXR5cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24tZXJyb3IgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9m
YWlsLW9uLXN0cmluZy10eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29uLWVycm9yCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5N2IyYWYwZTQ3ZS4uMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMv
ZXhwZWN0ZWQvZmFpbC1vbi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNv
bi1lcnJvcgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUVSUk9SOiBUaGUgJ29wdGlvbmFs
JyBmbGFnIGZvciBhIHBhcmFtZXRlciBtdXN0IGJlIGEgYm9vbGVhbiBsaXRlcmFsLgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVy
aWMvZXhwZWN0ZWQvZmFpbC1vbi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNv
bi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVy
Lmpzb24tZXJyb3IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2ZGYzNzUwYzFhLi4w
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXN0cmluZy10eXBlZC1vcHRpb25hbC10eXBl
LW1lbWJlci5qc29uLWVycm9yCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotRVJST1I6IFRo
ZSAnb3B0aW9uYWwnIGZsYWcgZm9yIGEgdHlwZSBtZW1iZXIgbXVzdCBiZSBhIGJvb2xlYW4gbGl0
ZXJhbC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS1kZWNsYXJhdGlvbi11c2luZy10
eXBlLXJlZmVyZW5jZS5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi10eXBlLWRlY2xhcmF0aW9u
LXVzaW5nLXR5cGUtcmVmZXJlbmNlLmpzb24tZXJyb3IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDQyZjU3NTNhNDM5Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXR5cGUt
ZGVjbGFyYXRpb24tdXNpbmctdHlwZS1yZWZlcmVuY2UuanNvbi1lcnJvcgorKysgL2Rldi9udWxs
CkBAIC0xICswLDAgQEAKLUVSUk9SOiBUeXBlIHJlZmVyZW5jZSBjYW5ub3QgaGF2ZSBib3RoICd0
eXBlJyBhbmQgJyRyZWYnIGtleXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXR5cGUtcmVm
ZXJlbmNlLWFzLXByaW1pdGl2ZS10eXBlLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXR5cGUt
cmVmZXJlbmNlLWFzLXByaW1pdGl2ZS10eXBlLmpzb24tZXJyb3IKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGQ3NmJjMWM3NzczLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9u
LXR5cGUtcmVmZXJlbmNlLWFzLXByaW1pdGl2ZS10eXBlLmpzb24tZXJyb3IKKysrIC9kZXYvbnVs
bApAQCAtMSArMCwwIEBACi1FUlJPUjogVHlwZSByZWZlcmVuY2UgJ0RhdGFiYXNlSWQnIGlzIG5v
dCBhIHByaW1pdGl2ZSB0eXBlLiBBbGxvd2VkIHZhbHVlczogaW50ZWdlciwgbnVtYmVyLCBzdHJp
bmcsIGJvb2xlYW4sIGVudW0sIG9iamVjdCwgYXJyYXksIGFueQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQv
ZmFpbC1vbi10eXBlLXdpdGgtaW52YWxpZC1wbGF0Zm9ybS5qc29uLWVycm9yIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFp
bC1vbi10eXBlLXdpdGgtaW52YWxpZC1wbGF0Zm9ybS5qc29uLWVycm9yCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBlYzYzNmM1NGI3Yy4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFp
bC1vbi10eXBlLXdpdGgtaW52YWxpZC1wbGF0Zm9ybS5qc29uLWVycm9yCisrKyAvZGV2L251bGwK
QEAgLTEgKzAsMCBAQAotRVJST1I6IFVua25vd24gcGxhdGZvcm06IGludmFsaWQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2V4cGVjdGVkL2ZhaWwtb24tdHlwZS13aXRoLWxvd2VyY2FzZS1uYW1lLmpzb24tZXJyb3IgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBl
Y3RlZC9mYWlsLW9uLXR5cGUtd2l0aC1sb3dlcmNhc2UtbmFtZS5qc29uLWVycm9yCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZTQ2MjI1MGMwYS4uMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0
ZWQvZmFpbC1vbi10eXBlLXdpdGgtbG93ZXJjYXNlLW5hbWUuanNvbi1lcnJvcgorKysgL2Rldi9u
dWxsCkBAIC0xICswLDAgQEAKLUVSUk9SOiBUeXBlcyBtdXN0IGJlZ2luIHdpdGggYW4gdXBwZXJj
YXNlIGNoYXJhY3Rlci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tdW5rbm93bi10eXBlLXJl
ZmVyZW5jZS1pbi10eXBlLWRlY2xhcmF0aW9uLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXVu
a25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1kZWNsYXJhdGlvbi5qc29uLWVycm9yCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZDM4ZTY0Njc1ZC4uMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhw
ZWN0ZWQvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtZGVjbGFyYXRpb24u
anNvbi1lcnJvcgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUVSUk9SOiBUeXBlIHJlZmVy
ZW5jZSAnZHJhZ29uJyBpcyBub3QgYSBwcmltaXRpdmUgdHlwZS4gQWxsb3dlZCB2YWx1ZXM6IGlu
dGVnZXIsIG51bWJlciwgc3RyaW5nLCBib29sZWFuLCBlbnVtLCBvYmplY3QsIGFycmF5LCBhbnkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBl
LW1lbWJlci5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNl
LWluLXR5cGUtbWVtYmVyLmpzb24tZXJyb3IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGZhZjY2NzJjYmVmLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXVua25vd24tdHlw
ZS1yZWZlcmVuY2UtaW4tdHlwZS1tZW1iZXIuanNvbi1lcnJvcgorKysgL2Rldi9udWxsCkBAIC0x
ICswLDAgQEAKLUVSUk9SOiBMb29rdXAgZmFpbGVkIGZvciB0eXBlIHJlZmVyZW5jZTogQ29sb3Ig
KHJlZmVyZW5jZWQgZnJvbSBkb21haW46IEZhbnRhc3kpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9nZW5l
cmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9nZW5l
cmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbi1yZXN1bHQKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDA5NDZiNTNlM2Y4Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9n
ZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbi1yZXN1bHQKKysrIC9kZXYv
bnVsbApAQCAtMSwxMjQ1ICswLDAgQEAKLSMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5k
Q29tbWFuZHMuanMKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1k
b21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0vLyBOZXR3b3JrMQotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rl
ckRvbWFpbigiTmV0d29yazEiLCBudWxsKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21t
YW5kKCJOZXR3b3JrMS5sb2FkUmVzb3VyY2UiLCBudWxsLCBbXSwgW10pOwotSW5zcGVjdG9yQmFj
a2VuZC5hY3RpdmF0ZURvbWFpbigiTmV0d29yazEiLCBudWxsKTsKLQotLy8gTmV0d29yazMKLUlu
c3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIk5ldHdvcmszIiwgbnVsbCk7Ci1JbnNwZWN0
b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnQoIk5ldHdvcmszLnJlc291cmNlTG9hZGVkIiwgbnVsbCwg
W10pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rlck5ldHdvcmszRGlzcGF0Y2hlciA9IEluc3Bl
Y3RvckJhY2tlbmQucmVnaXN0ZXJEaXNwYXRjaGVyLmJpbmQoSW5zcGVjdG9yQmFja2VuZCwgIk5l
dHdvcmszIik7Ci1JbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJOZXR3b3JrMyIsIG51
bGwpOwotIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJk
cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFn
bWEgb25jZQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0K
LSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNs
YXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2b2lkIHNldEJh
Y2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7
IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9Ci0gICAgQmFja2Vu
ZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5k
RGlzcGF0Y2hlci5nZXQoKTsgfQotcHJpdmF0ZToKLSAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNo
ZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Ci19OwotCi0KLSNpZiBQTEFURk9STShXRUJfQ09NTUFO
RFMpCi1jbGFzcyBBbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5BbHRlcm5h
dGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRS
ZXNvdXJjZShsb25nIGNhbGxJZCkgPSAwOwotfTsKLSNlbmRpZiAvLyBQTEFURk9STShXRUJfQ09N
TUFORFMpCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jZW5kaWYgLy8gRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5h
dGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNw
YXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9t
YWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xP
YmplY3RzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIElu
c3BlY3RvciB7Ci0KLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCi0jaWYgRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jaWYgUExBVEZPUk0oV0VCX0NPTU1BTkRT
KQotY2xhc3MgQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjsKLSNlbmRpZiAvLyBQ
TEFURk9STShXRUJfQ09NTUFORFMpCi0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCi0KLSNpZiBQTEFURk9STShXRUJfQ09NTUFORFMpCi1jbGFzcyBOZXR3
b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lk
IGxvYWRSZXNvdXJjZShFcnJvclN0cmluZyYpID0gMDsKLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFs
IH5OZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOwotfTsKLSNlbmRpZiAvLyBQTEFU
Rk9STShXRUJfQ09NTUFORFMpCi0KLSNpZiBQTEFURk9STShXRUJfQ09NTUFORFMpCi1jbGFzcyBO
ZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tl
bmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE5ldHdvcmsxQmFja2VuZERp
c3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIE5ldHdvcmsxQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyKik7Ci0gICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3Qg
U3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkgZmluYWw7Ci1wcml2
YXRlOgotICAgIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6
T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQotcHVibGljOgotICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0Y2hlcihBbHRl
cm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1f
YWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KLXByaXZhdGU6Ci0g
ICAgQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciogbV9hbHRlcm5hdGVEaXNwYXRj
aGVyIHsgbnVsbHB0ciB9OwotI2VuZGlmCi1wcml2YXRlOgotICAgIE5ldHdvcmsxQmFja2VuZERp
c3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImLCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlciopOwotICAgIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50IHsg
bnVsbHB0ciB9OwotfTsKLSNlbmRpZiAvLyBQTEFURk9STShXRUJfQ09NTUFORFMpCi0KLX0gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJz
LmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUt
Z3VhcmRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIK
LQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0j
aW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERp
c3BhdGNoZXJzLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLSNpZiBQTEFU
Rk9STShXRUJfQ09NTUFORFMpCi1OZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6fk5l
dHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9Ci0jZW5kaWYgLy8gUExBVEZPUk0o
V0VCX0NPTU1BTkRTKQotCi0jaWYgUExBVEZPUk0oV0VCX0NPTU1BTkRTKQotUmVmPE5ldHdvcmsx
QmFja2VuZERpc3BhdGNoZXI+IE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShCYWNr
ZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIE5ldHdvcmsxQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyKiBhZ2VudCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBOZXR3b3JrMUJh
Y2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOwotfQotCi1OZXR3b3Jr
MUJhY2tlbmREaXNwYXRjaGVyOjpOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNw
YXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIqIGFnZW50KQotICAgIDogU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERp
c3BhdGNoZXIpCi0gICAgLCBtX2FnZW50KGFnZW50KQotewotICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbigiTmV0d29yazEiX3MsIHRoaXMpOwotfQot
Ci12b2lkIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElk
LCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQotewot
ICAgIFJlZjxOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKLQotICAg
IFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0
KCJwYXJhbXMiX3MsIHBhcmFtZXRlcnMpOwotCi0gICAgaWYgKG1ldGhvZCA9PSAibG9hZFJlc291
cmNlIikKLSAgICAgICAgbG9hZFJlc291cmNlKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJz
KSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2Nv
bEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMS4iICsg
bWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOwotfQotCi12b2lkIE5ldHdvcmsxQmFja2VuZERp
c3BhdGNoZXI6OmxvYWRSZXNvdXJjZShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJikKLXsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSAg
ICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0
Y2hlci0+bG9hZFJlc291cmNlKHJlcXVlc3RJZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0j
ZW5kaWYKLQotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJl
c3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgbV9hZ2VudC0+bG9hZFJlc291cmNl
KGVycm9yKTsKLQotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0gICAgICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2Up
OwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xF
cnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKLX0K
LSNlbmRpZiAvLyBQTEFURk9STShXRUJfQ09NTUFORFMpCi0KLX0gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNl
Ci0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05W
YWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIElu
c3BlY3RvciB7Ci0KLWNsYXNzIEZyb250ZW5kUm91dGVyOwotCi0jaWYgUExBVEZPUk0oV0VCX0VW
RU5UUykKLWNsYXNzIE5ldHdvcmszRnJvbnRlbmREaXNwYXRjaGVyIHsKLSAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBOZXR3b3JrM0Zyb250ZW5kRGlzcGF0Y2hlcihG
cm9udGVuZFJvdXRlciYgZnJvbnRlbmRSb3V0ZXIpIDogbV9mcm9udGVuZFJvdXRlcihmcm9udGVu
ZFJvdXRlcikgeyB9Ci0gICAgdm9pZCByZXNvdXJjZUxvYWRlZCgpOwotcHJpdmF0ZToKLSAgICBG
cm9udGVuZFJvdXRlciYgbV9mcm9udGVuZFJvdXRlcjsKLX07Ci0jZW5kaWYgLy8gUExBVEZPUk0o
V0VCX0VWRU5UUykKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRl
c3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERp
c3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRl
LWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0
RnJvbnRlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5h
bWVzcGFjZSBJbnNwZWN0b3IgewotCi0jaWYgUExBVEZPUk0oV0VCX0VWRU5UUykKLXZvaWQgTmV0
d29yazNGcm9udGVuZERpc3BhdGNoZXI6OnJlc291cmNlTG9hZGVkKCkKLXsKLSAgICBSZWY8SlNP
Tjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNv
bk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiTmV0d29yazMucmVzb3VyY2VMb2FkZWQi
X3MpOwotCi0gICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNP
TlN0cmluZygpKTsKLX0KLSNlbmRpZiAvLyBQTEFURk9STShXRUJfRVZFTlRTKQotCi19IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVy
cy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1
YXJkcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNw
cmFnbWEgb25jZQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xU
eXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0
b3IgewotCi0KLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLS8vIEZvcndhcmQgZGVjbGFy
YXRpb25zLgotI2lmIFBMQVRGT1JNKFdFQl9UWVBFUykKLW5hbWVzcGFjZSBOZXR3b3JrMiB7Ci1j
bGFzcyBOZXR3b3JrRXJyb3I7Ci19IC8vIE5ldHdvcmsyCi0jZW5kaWYgLy8gUExBVEZPUk0oV0VC
X1RZUEVTKQotLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgotCi0KLQotCi0jaWYgUExB
VEZPUk0oV0VCX1RZUEVTKQotbmFtZXNwYWNlIE5ldHdvcmsyIHsKLWNsYXNzIE5ldHdvcmtFcnJv
ciA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKLXB1YmxpYzoKLSAgICBlbnVtIHsKLSAgICAg
ICAgTm9GaWVsZHNTZXQgPSAwLAotICAgICAgICBNZXNzYWdlU2V0ID0gMSA8PCAwLAotICAgICAg
ICBDb2RlU2V0ID0gMSA8PCAxLAotICAgICAgICBBbGxGaWVsZHNTZXQgPSAoTWVzc2FnZVNldCB8
IENvZGVTZXQpCi0gICAgfTsKLQotICAgIHRlbXBsYXRlPGludCBTVEFURT4KLSAgICBjbGFzcyBC
dWlsZGVyIHsKLSAgICBwcml2YXRlOgotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBtX3Jl
c3VsdDsKLQotICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+
JiBjYXN0U3RhdGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0
X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBCdWlsZGVyKFJlZjwvKk5ldHdvcmtFcnJvciovSlNPTjo6T2JqZWN0PiYmIG9iamVjdCkKLSAg
ICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVk
X2luX25vbl9pbml0X3N0YXRlKTsKLSAgICAgICAgfQotICAgICAgICBmcmllbmQgY2xhc3MgTmV0
d29ya0Vycm9yOwotICAgIHB1YmxpYzoKLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTWVzc2Fn
ZVNldD4mIHNldE1lc3NhZ2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICAgICAgewotICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE1lc3NhZ2VTZXQpLCBwcm9wZXJ0eV9tZXNz
YWdlX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1lc3Nh
Z2UiX3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TWVzc2FnZVNldD4o
KTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2RlU2V0PiYgc2V0Q29k
ZShpbnQgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBDb2RlU2V0KSwgcHJvcGVydHlfY29kZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0SW50ZWdlcigiY29kZSJfcywgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxDb2RlU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgUmVmPE5ldHdvcmtF
cnJvcj4gcmVsZWFzZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNU
QVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7Ci0gICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChzaXplb2YoTmV0d29ya0Vycm9yKSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0
KSwgY2Fubm90X2Nhc3QpOwotCi0gICAgICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uUmVz
dWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKLSAgICAgICAgICAgIGF1dG8gcmVzdWx0
ID0gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8TmV0d29ya0Vycm9yPio+KCZqc29uUmVz
dWx0KSk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgfTsKLQot
ICAgIC8qCi0gICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgotICAgICAqIFJlZjxOZXR3b3Jr
RXJyb3I+IHJlc3VsdCA9IE5ldHdvcmtFcnJvcjo6Y3JlYXRlKCkKLSAgICAgKiAgICAgLnNldE1l
c3NhZ2UoLi4uKQotICAgICAqICAgICAuc2V0Q29kZSguLi4pCi0gICAgICogICAgIC5yZWxlYXNl
KCk7Ci0gICAgICovCi0gICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCi0g
ICAgewotICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKSk7Ci0gICAgfQotfTsKLQotfSAvLyBOZXR3b3JrMgotI2VuZGlmIC8vIFBMQVRGT1JN
KFdFQl9UWVBFUykKLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLQotI2luY2x1ZGUgPHd0
Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNl
IEluc3BlY3RvciB7Ci0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLQotCi19IC8vIG5hbWVzcGFj
ZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFj
a2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5l
cmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0
ci5oPgotCi1AcHJvdG9jb2wgVGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyOwotCi1u
YW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0jaWYgUExBVEZPUk0oV0VCX0NPTU1BTkRTKQotY2xh
c3MgT2JqQ0luc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMg
QWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciB7Ci0gICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgT2JqQ0luc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3Bh
dGNoZXIoaWQ8VGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1f
ZGVsZWdhdGUgPSBoYW5kbGVyOyB9Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0
SWQpIGZpbmFsOwotcHJpdmF0ZToKLSAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sTmV0d29y
azFEb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKLX07Ci0jZW5kaWYgLy8gUExBVEZPUk0oV0VC
X0NPTU1BTkRTKQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmlnLmgiCi0j
aW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgIlRl
c3RQcm90b2NvbEludGVybmFsLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3Rv
ciB7Ci0KLSNpZiBQTEFURk9STShXRUJfQ09NTUFORFMpCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3
b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0SWQpCi17Ci0g
ICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGxvYWRSZXNv
dXJjZVdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgewotICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERp
c3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmsxLmxvYWRSZXNvdXJjZScgd2FzIG5v
dCBmb3VuZCJfcyk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJy
b3JzKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZCBlcnJvckNhbGxiYWNrID0g
XihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0
UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwg
ZXJyb3IpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygp
OwotICAgIH07Ci0KLSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5k
RGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpLCBmYWxzZSk7Ci0gICAgfTsKLQotICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZVdpdGhF
cnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFj
a107Ci19Ci0KLSNlbmRpZiAvLyBQTEFURk9STShXRUJfQ09NTUFORFMpCi0KLX0gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRj
aGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZl
YXR1cmUtZ3VhcmRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgotCi1fX2F0dHJpYnV0
ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29u
ZmlndXJhdGlvbiA6IE5TT2JqZWN0Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluLCBzZXR0
ZXI9c2V0TmV0d29yazFIYW5kbGVyOikgaWQ8VGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5k
bGVyPiBuZXR3b3JrMUhhbmRsZXI7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFRl
c3RQcm90b2NvbE5ldHdvcmszRG9tYWluRXZlbnREaXNwYXRjaGVyICpuZXR3b3JrM0V2ZW50RGlz
cGF0Y2hlcjsKLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRp
b24uaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0
dXJlLWd1YXJkcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKLQotI2ltcG9ydCAiVGVz
dFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRj
aGVycy5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdl
bnQuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJv
bGxlci5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2Vu
ZERpc3BhdGNoZXJzLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcnMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGltcGxlbWVu
dGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KLXsKLSAgICBBdWdtZW50YWJsZUluc3Bl
Y3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotICAgIGlkPFRlc3RQcm90b2NvbE5ldHdvcmsx
RG9tYWluSGFuZGxlcj4gX25ldHdvcmsxSGFuZGxlcjsKLSAgICBUZXN0UHJvdG9jb2xOZXR3b3Jr
M0RvbWFpbkV2ZW50RGlzcGF0Y2hlciAqX25ldHdvcmszRXZlbnREaXNwYXRjaGVyOwotfQotCi0t
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNv
bnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlm
ICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0g
ICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2
b2lkKWRlYWxsb2MKLXsKLSAgICBbX25ldHdvcmsxSGFuZGxlciByZWxlYXNlXTsKLSAgICBbX25l
dHdvcmszRXZlbnREaXNwYXRjaGVyIHJlbGVhc2VdOwotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0K
LQotLSAodm9pZClzZXROZXR3b3JrMUhhbmRsZXI6KGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9t
YWluSGFuZGxlcj4paGFuZGxlcgotewotICAgIGlmIChoYW5kbGVyID09IF9uZXR3b3JrMUhhbmRs
ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIFtfbmV0d29yazFIYW5kbGVyIHJlbGVhc2VdOwot
ICAgIF9uZXR3b3JrMUhhbmRsZXIgPSBbaGFuZGxlciByZXRhaW5dOwotCi0gICAgYXV0byBhbHRl
cm5hdGVEaXNwYXRjaGVyID0gbWFrZVVuaXF1ZTxPYmpDSW5zcGVjdG9yTmV0d29yazFCYWNrZW5k
RGlzcGF0Y2hlcj4oaGFuZGxlcik7Ci0gICAgYXV0byBhbHRlcm5hdGVBZ2VudCA9IG1ha2VVbmlx
dWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciwg
QWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4+KCJOZXR3b3JrMSJfcywgKl9jb250
cm9sbGVyLCBXVEZNb3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIpKTsKLSAgICBfY29udHJvbGxlci0+
YXBwZW5kRXh0cmFBZ2VudChXVEZNb3ZlKGFsdGVybmF0ZUFnZW50KSk7Ci19Ci0KLS0gKGlkPFRl
c3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4pbmV0d29yazFIYW5kbGVyCi17Ci0gICAg
cmV0dXJuIF9uZXR3b3JrMUhhbmRsZXI7Ci19Ci0KLS0gKFRlc3RQcm90b2NvbE5ldHdvcmszRG9t
YWluRXZlbnREaXNwYXRjaGVyICopbmV0d29yazNFdmVudERpc3BhdGNoZXIKLXsKLSAgICBpZiAo
IV9uZXR3b3JrM0V2ZW50RGlzcGF0Y2hlcikKLSAgICAgICAgX25ldHdvcmszRXZlbnREaXNwYXRj
aGVyID0gW1tUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkV2ZW50RGlzcGF0Y2hlciBhbGxvY10g
aW5pdFdpdGhDb250cm9sbGVyOl9jb250cm9sbGVyXTsKLSAgICByZXR1cm4gX25ldHdvcmszRXZl
bnREaXNwYXRjaGVyOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xD
b25maWd1cmF0aW9uLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3Bh
dGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9t
YWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2lt
cG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDx3dGYvSlNPTlZh
bHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW1wbGVtZW50YXRpb24g
VGVzdFByb3RvY29sTmV0d29yazNEb21haW5FdmVudERpc3BhdGNoZXIKLXsKLSAgICBBdWdtZW50
YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotfQotCi0tIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNv
bnRyb2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAg
ICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRyb2xs
ZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKXJlc291cmNl
TG9hZGVkCi17Ci0gICAgY29uc3QgRnJvbnRlbmRSb3V0ZXImIHJvdXRlciA9IF9jb250cm9sbGVy
LT5mcm9udGVuZFJvdXRlcigpOwotCi0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2Ug
PSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1l
dGhvZCJfcywgIk5ldHdvcmszLnJlc291cmNlTG9hZGVkIl9zKTsKLSAgICByb3V0ZXIuc2VuZEV2
ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJh
dGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+
Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KLQotCi1A
Y2xhc3MgVGVzdFByb3RvY29sTmV0d29yazJOZXR3b3JrRXJyb3I7Ci0KLXR5cGVkZWYgTlNfRU5V
TShOU0ludGVnZXIsIFRlc3RQcm90b2NvbFBsYXRmb3JtKSB7Ci0gICAgVGVzdFByb3RvY29sUGxh
dGZvcm1BbGwsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljLAotICAgIFRlc3RQcm90
b2NvbFBsYXRmb3JtSU9TLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1MsCi19OwotCi0K
LQotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2Ug
VGVzdFByb3RvY29sTmV0d29yazJOZXR3b3JrRXJyb3IgOiBSV0lQcm90b2NvbEpTT05PYmplY3QK
LS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAq
LCBpZD4gKilwYXlsb2FkOwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6
KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7Ci0tIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZTooaW50KWNvZGU7Ci0vKiByZXF1
aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKm1lc3NhZ2U7Ci0v
KiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQgY29kZTsKLUBl
bmQKLQotQHByb3RvY29sIFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlciA8TlNPYmpl
Y3Q+Ci1Ab3B0aW9uYWwKLS0gKHZvaWQpbG9hZFJlc291cmNlV2l0aEVycm9yQ2FsbGJhY2s6KHZv
aWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9p
ZCheKSh2b2lkKSlzdWNjZXNzQ2FsbGJhY2s7Ci1AZW5kCi0KLV9fYXR0cmlidXRlX18oKHZpc2li
aWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFp
bkV2ZW50RGlzcGF0Y2hlciA6IE5TT2JqZWN0Ci0tICh2b2lkKXJlc291cmNlTG9hZGVkOwotQGVu
ZAotCi0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0
eU9iamVjdHMuaD4KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2Nv
bC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKLSNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9y
dCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xOZXR3b3JrM0Rv
bWFpbkV2ZW50RGlzcGF0Y2hlciAoUHJpdmF0ZSkKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENv
bnRyb2xsZXI6KEluc3BlY3Rvcjo6QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250
cm9sbGVyOwotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAot
Ci0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1n
dWFyZHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0j
aW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2Nv
bEFycmF5Q29udmVyc2lvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KLU9wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3Rv
Y29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOwotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9j
b2xTdHJpbmcoVGVzdFByb3RvY29sUGxhdGZvcm0gdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVl
KSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDoKLSAgICAgICAgcmV0dXJuICJh
bGwiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM6Ci0gICAgICAgIHJl
dHVybiAiZ2VuZXJpYyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOgotICAg
ICAgICByZXR1cm4gImlvcyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M6
Ci0gICAgICAgIHJldHVybiAibWFjb3MiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxp
bmUgT3B0aW9uYWw8VGVzdFByb3RvY29sUGxhdGZvcm0+IGZyb21Qcm90b2NvbFN0cmluZyhjb25z
dCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiYWxsIikKLSAgICAgICAgcmV0
dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOwotICAgIGlmICh2YWx1ZSA9PSAiZ2VuZXJpYyIp
Ci0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM7Ci0gICAgaWYgKHZh
bHVlID09ICJpb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1JT1M7Ci0g
ICAgaWYgKHZhbHVlID09ICJtYWNvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0
Zm9ybU1hY09TOwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLQotCi19IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZl
YXR1cmUtZ3VhcmRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0KLSNpbXBvcnQg
IlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgotI2lt
cG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLQotdXNp
bmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMgKE5ldHdvcmsyRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZU5ldHdvcmtFcnJvcjoo
VGVzdFByb3RvY29sTmV0d29yazJOZXR3b3JrRXJyb3IgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6
KGlkKXBheWxvYWQ7Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucyAoTmV0d29yazJEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlTmV0d29ya0Vycm9y
OihUZXN0UHJvdG9jb2xOZXR3b3JrMk5ldHdvcmtFcnJvciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9h
ZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9h
ZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29s
TmV0d29yazJOZXR3b3JrRXJyb3IgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKLX0K
LQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1t
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQg
IlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFBy
aXZhdGUuaD4KLSNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZh
bHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLUBpbXBsZW1lbnRhdGlv
biBUZXN0UHJvdG9jb2xOZXR3b3JrMk5ldHdvcmtFcnJvcgotCi0tIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXls
b2FkCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJldHVybiBu
aWw7Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRb
QCJtZXNzYWdlIl0sIEAibWVzc2FnZSIpOwotICAgIHNlbGYubWVzc2FnZSA9IHBheWxvYWRbQCJt
ZXNzYWdlIl07Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBh
eWxvYWRbQCJjb2RlIl0sIEAiY29kZSIpOwotICAgIHNlbGYuY29kZSA9IFtwYXlsb2FkW0AiY29k
ZSJdIGludGVnZXJWYWx1ZV07Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLS0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilvYmplY3QK
LXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoSlNPTk9iamVjdDpbb2JqZWN0IHRv
SlNPTk9iamVjdF0uZ2V0KCldKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIHJldHVybiBz
ZWxmOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1l
c3NhZ2UgY29kZTooaW50KWNvZGUKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkK
LSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURf
UFJPUEVSVFkobWVzc2FnZSwgQCJtZXNzYWdlIik7Ci0KLSAgICBzZWxmLm1lc3NhZ2UgPSBtZXNz
YWdlOwotICAgIHNlbGYuY29kZSA9IGNvZGU7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAo
dm9pZClzZXRNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UKLXsKLSAgICBbc3VwZXIgc2V0U3Ry
aW5nOm1lc3NhZ2UgZm9yS2V5OkAibWVzc2FnZSJdOwotfQotCi0tIChOU1N0cmluZyAqKW1lc3Nh
Z2UKLXsKLSAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAIm1lc3NhZ2UiXTsKLX0KLQot
LSAodm9pZClzZXRDb2RlOihpbnQpY29kZQotewotICAgIFtzdXBlciBzZXRJbnRlZ2VyOmNvZGUg
Zm9yS2V5OkAiY29kZSJdOwotfQotCi0tIChpbnQpY29kZQotewotICAgIHJldHVybiBbc3VwZXIg
aW50ZWdlckZvcktleTpAImNvZGUiXTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3NhbWUtdHlwZS1pZC1kaWZmZXJl
bnQtZG9tYWluLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21h
aW4uanNvbi1yZXN1bHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5NDAyMTExMzgy
Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5q
c29uLXJlc3VsdAorKysgL2Rldi9udWxsCkBAIC0xLDkxNCArMCwwIEBACi0jIyMgQmVnaW4gRmls
ZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNr
ZW5kQ29tbWFuZHMuanMKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlz
cGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1p
ZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCi0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotCi1uYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKLQotY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGlj
OgotICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVy
PiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hl
cik7IH0KLSAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7
IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Ci1wcml2YXRlOgotICAgIFJlZlB0
cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKLX07Ci0KLQotCi0KLX0g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCi0jIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlz
cGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1k
b21haW4uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0j
cHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdHlwZWRl
ZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMj
IyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNp
bmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSNpbmNs
dWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jZW5kaWYKLQotbmFtZXNw
YWNlIEluc3BlY3RvciB7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVu
ZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJv
dG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEZy
b250ZW5kUm91dGVyOwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTog
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5k
RGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10
eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEZyb250
ZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZy
b250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmls
ZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xPYmplY3RzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5
cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0K
LW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0K
LQotCi0vLyBUeXBlZGVmcy4KLW5hbWVzcGFjZSBSdW50aW1lIHsKLS8qIFVuaXF1ZSBvYmplY3Qg
aWRlbnRpZmllci4gKi8KLXR5cGVkZWYgU3RyaW5nIFJlbW90ZU9iamVjdElkOwotfSAvLyBSdW50
aW1lCi0KLW5hbWVzcGFjZSBSdW50aW1lMiB7Ci0vKiBVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIu
ICovCi10eXBlZGVmIFN0cmluZyBSZW1vdGVPYmplY3RJZDsKLX0gLy8gUnVudGltZTIKLS8vIEVu
ZCBvZiB0eXBlZGVmcy4KLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLQot
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotCi0jaW5jbHVkZSA8d3RmL09w
dGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5z
cGVjdG9yIHsKLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIFBy
b3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbE9iamVjdHMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5k
RGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlw
ZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQotCi0K
LW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0j
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZp
Zy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNs
dWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLW5hbWVzcGFjZSBJ
bnNwZWN0b3IgewotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24uaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2Nv
bC5oPgotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZh
Y2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0Ci1AZW5kCi0KLQotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3Vy
YXRpb24uaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbXBvcnQgIlRl
c3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1
Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLQotdXNpbmcgbmFtZXNwYWNl
IEluc3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24K
LXsKLSAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotfQot
Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3Rv
ckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAg
IGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7
Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQotCi0t
ICh2b2lkKWRlYWxsb2MKLXsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLUBlbmQKLQotCi0j
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2Nv
bEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgot
I2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsK
LQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRp
b24uaD4KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgot
Ci0KLQotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xQbGF0Zm9ybSkg
ewotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3Jt
R2VuZXJpYywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUywKLSAgICBUZXN0UHJvdG9jb2xQ
bGF0Zm9ybU1hY09TLAotfTsKLQotCi0KLQotCi0KLQotCi0KLQotI2ltcG9ydCA8V2ViSW5zcGVj
dG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgotCi0jIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5h
bC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZl
cmVudC1kb21haW4uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05P
YmplY3RQcml2YXRlLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3Bl
Y3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLQotCi0KLSMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2lt
cG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgotCi1uYW1l
c3BhY2UgSW5zcGVjdG9yIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgotT3B0
aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1
ZSk7Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xQbGF0Zm9y
bSB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBs
YXRmb3JtQWxsOgotICAgICAgICByZXR1cm4gImFsbCJfczsKLSAgICBjYXNlIFRlc3RQcm90b2Nv
bFBsYXRmb3JtR2VuZXJpYzoKLSAgICAgICAgcmV0dXJuICJnZW5lcmljIl9zOwotICAgIGNhc2Ug
VGVzdFByb3RvY29sUGxhdGZvcm1JT1M6Ci0gICAgICAgIHJldHVybiAiaW9zIl9zOwotICAgIGNh
c2UgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzoKLSAgICAgICAgcmV0dXJuICJtYWNvcyJfczsK
LSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xQbGF0
Zm9ybT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYg
KHZhbHVlID09ICJhbGwiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1BbGw7
Ci0gICAgaWYgKHZhbHVlID09ICJnZW5lcmljIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2Nv
bFBsYXRmb3JtR2VuZXJpYzsKLSAgICBpZiAodmFsdWUgPT0gImlvcyIpCi0gICAgICAgIHJldHVy
biBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzsKLSAgICBpZiAodmFsdWUgPT0gIm1hY29zIikKLSAg
ICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M7Ci0gICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKLX0KLQotCi0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0
UHJvdG9jb2xUeXBlUGFyc2VyLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xK
U09OT2JqZWN0UHJpdmF0ZS5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW50
ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoUnVudGltZURvbWFpbikKLQotKyAo
dm9pZClfcGFyc2VSZW1vdGVPYmplY3RJZDooTlNTdHJpbmcgKiopb3V0VmFsdWUgZnJvbVBheWxv
YWQ6KGlkKXBheWxvYWQ7Ci0KLUBlbmQKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zIChSdW50aW1lMkRvbWFpbikKLQotKyAodm9pZClfcGFyc2VSZW1vdGVPYmplY3RJZDoo
TlNTdHJpbmcgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0KLUBlbmQKLQot
QGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoUnVudGltZURvbWFp
bikKLQotKyAodm9pZClfcGFyc2VSZW1vdGVPYmplY3RJZDooTlNTdHJpbmcgKiopb3V0VmFsdWUg
ZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9U
WVBFKHBheWxvYWQsIFtOU1N0cmluZyBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IChOU1N0cmlu
ZyAqKXBheWxvYWQ7Ci19Ci0KLUBlbmQKLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMgKFJ1bnRpbWUyRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZVJlbW90ZU9iamVj
dElkOihOU1N0cmluZyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TU3RyaW5nIGNsYXNzXSk7
Ci0gICAgKm91dFZhbHVlID0gKE5TU3RyaW5nICopcGF5bG9hZDsKLX0KLQotQGVuZAotCi0KLSMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwu
aCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDxX
ZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotI2ltcG9ydCA8d3Rm
L0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVz
cGFjZSBJbnNwZWN0b3I7Ci0KLQotCi0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5
cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9zaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMu
anNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZ2VuZXJpYy9leHBlY3RlZC9zaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbi1y
ZXN1bHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiZGIyZDQxMTlmLi4wMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJpYy9leHBlY3RlZC9zaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbi1yZXN1
bHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMTI0ICswLDAgQEAKLSMjIyBCZWdpbiBGaWxlOiBJbnNw
ZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBzaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29t
bWFuZHMuanMKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hl
cnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFs
LXR5cGUtc2V0dGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgotI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLQotbmFtZXNwYWNlIEluc3Bl
Y3RvciB7Ci0KLWNsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAg
ICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBk
aXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9
Ci0gICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1
cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQotcHJpdmF0ZToKLSAgICBSZWZQdHI8QmFj
a2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Ci19OwotCi0KLQotCi19IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKLQotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQotIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVy
cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFn
bWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10eXBlZGVmIFN0
cmluZyBFcnJvclN0cmluZzsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVu
ZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
c2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRl
c3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNs
dWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSNpbmNsdWRl
ICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNl
IEluc3BlY3RvciB7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBG
aWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZy
b250ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNo
YWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3Rv
Y29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBGcm9u
dGVuZFJvdXRlcjsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRl
c3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERp
c3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2Vk
LW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJv
bnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFj
ZSBJbnNwZWN0b3IgewotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxl
OiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbE9iamVjdHMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2Vk
LW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0K
LW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0K
LS8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgotbmFtZXNwYWNlIFJ1bnRpbWUgewotY2xhc3MgS2V5
UGF0aDsKLX0gLy8gUnVudGltZQotLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgotCi0K
LQotCi1uYW1lc3BhY2UgVGVzdEhlbHBlcnMgewotCi1TdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFs
dWUoaW50IGNvZGUpOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgZ2V0RW51bUNvbnN0
YW50VmFsdWUoVCBlbnVtVmFsdWUpCi17Ci0gICAgcmV0dXJuIGdldEVudW1Db25zdGFudFZhbHVl
KHN0YXRpY19jYXN0PGludD4oZW51bVZhbHVlKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFRlc3RI
ZWxwZXJzCi0KLW5hbWVzcGFjZSBSdW50aW1lIHsKLS8qIEtleSBwYXRoLiAqLwotY2xhc3MgS2V5
UGF0aCA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKLXB1YmxpYzoKLSAgICAvLyBOYW1lZCBh
ZnRlciBwcm9wZXJ0eSBuYW1lICd0eXBlJyB3aGlsZSBnZW5lcmF0aW5nIEtleVBhdGguCi0gICAg
ZW51bSBjbGFzcyBUeXBlIHsKLSAgICAgICAgTnVsbCA9IDAsCi0gICAgICAgIFN0cmluZyA9IDEs
Ci0gICAgICAgIEFycmF5ID0gMiwKLSAgICB9OyAvLyBlbnVtIGNsYXNzIFR5cGUKLSAgICBlbnVt
IHsKLSAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAotICAgICAgICBUeXBlU2V0ID0gMSA8PCAwLAot
ICAgICAgICBBbGxGaWVsZHNTZXQgPSAoVHlwZVNldCkKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8
aW50IFNUQVRFPgotICAgIGNsYXNzIEJ1aWxkZXIgewotICAgIHByaXZhdGU6Ci0gICAgICAgIFJl
ZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVzdWx0OwotCi0gICAgICAgIHRlbXBsYXRlPGludCBTVEVQ
PiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlz
KTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXIoUmVmPC8qS2V5UGF0aCovSlNPTjo6T2Jq
ZWN0PiYmIG9iamVjdCkKLSAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1Nl
dCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKLSAgICAgICAgfQotICAgICAg
ICBmcmllbmQgY2xhc3MgS2V5UGF0aDsKLSAgICBwdWJsaWM6Ci0KLSAgICAgICAgQnVpbGRlcjxT
VEFURSB8IFR5cGVTZXQ+JiBzZXRUeXBlKFR5cGUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUeXBlU2V0KSwgcHJvcGVydHlfdHlwZV9hbHJl
YWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ0eXBlIl9zLCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUodmFsdWUp
KTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VHlwZVNldD4oKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIFJlZjxLZXlQYXRoPiByZWxlYXNlKCkKLSAgICAgICAgewotICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5
KTsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihLZXlQYXRoKSA9PSBzaXplb2Yo
SlNPTjo6T2JqZWN0KSwgY2Fubm90X2Nhc3QpOwotCi0gICAgICAgICAgICBSZWY8SlNPTjo6T2Jq
ZWN0PiBqc29uUmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKLSAgICAgICAgICAg
IGF1dG8gcmVzdWx0ID0gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8S2V5UGF0aD4qPigm
anNvblJlc3VsdCkpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAg
IH07Ci0KLSAgICAvKgotICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKLSAgICAgKiBSZWY8
S2V5UGF0aD4gcmVzdWx0ID0gS2V5UGF0aDo6Y3JlYXRlKCkKLSAgICAgKiAgICAgLnNldFR5cGUo
Li4uKQotICAgICAqICAgICAucmVsZWFzZSgpOwotICAgICAqLwotICAgIHN0YXRpYyBCdWlsZGVy
PE5vRmllbGRzU2V0PiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9G
aWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOwotICAgIH0KLQotICAgIHZvaWQgc2V0
U3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgewotICAgICAgICBKU09OOjpPYmplY3RC
YXNlOjpzZXRTdHJpbmcoInN0cmluZyJfcywgdmFsdWUpOwotICAgIH0KLQotICAgIHZvaWQgc2V0
QXJyYXkoUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gdmFsdWUpCi0gICAgewotICAgICAg
ICBKU09OOjpPYmplY3RCYXNlOjpzZXRBcnJheSgiYXJyYXkiX3MsIFdURk1vdmUodmFsdWUpKTsK
LSAgICB9Ci19OwotCi19IC8vIFJ1bnRpbWUKLQotCi0KLW5hbWVzcGFjZSBUZXN0SGVscGVycyB7
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFByb3RvY29sRW51bVR5cGU+Ci1PcHRpb25hbDxQcm90b2Nv
bEVudW1UeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJik7Ci0KLS8v
IEVudW1zIGluIHRoZSAnUnVudGltZScgRG9tYWluCi10ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNw
ZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlPiBwYXJzZUVudW1WYWx1ZUZy
b21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZT4oY29u
c3QgU3RyaW5nJik7Ci0KLX0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCi0KLX0gLy8gbmFtZXNw
YWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xPYmplY3RzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVj
dHMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9u
YWwtdHlwZS1zZXR0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVj
dHMuaCIKLQotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLW5hbWVzcGFjZSBQcm90b2NvbCB7
Ci0KLW5hbWVzcGFjZSBUZXN0SGVscGVycyB7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBl
bnVtX2NvbnN0YW50X3ZhbHVlc1tdID0gewotICAgICJudWxsIiwKLSAgICAic3RyaW5nIiwKLSAg
ICAiYXJyYXkiLAotfTsKLQotU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7
Ci0gICAgcmV0dXJuIGVudW1fY29uc3RhbnRfdmFsdWVzW2NvZGVdOwotfQotCi0vLyBFbnVtcyBp
biB0aGUgJ1J1bnRpbWUnIERvbWFpbgotdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5n
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6OlR5cGU+KGNvbnN0IFN0cmlu
ZyYgcHJvdG9jb2xTdHJpbmcpCi17Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZh
bHVlc1tdID0gewotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6
OktleVBhdGg6OlR5cGU6Ok51bGwsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2Nv
bDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZTo6U3RyaW5nLAotICAgICAgICAoc2l6ZV90KUluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6OlR5cGU6OkFycmF5LAotICAgIH07Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAzOyArK2kpCi0gICAgICAgIGlmIChwcm90b2NvbFN0
cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCi0gICAgICAg
ICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6OlR5cGUp
Y29uc3RhbnRWYWx1ZXNbaV07Ci0KLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi0KLX0g
Ly8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCi0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAot
Ci19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xP
YmplY3RzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNo
ZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25h
bC10eXBlLXNldHRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2Vu
ZERpc3BhdGNoZXJzLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi0KLQotbmFtZXNw
YWNlIEluc3BlY3RvciB7Ci0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgot
I2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0
b3IgewotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24uaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRv
d2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4K
LQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRl
c3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAotQGVuZAotCi0KLSMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xDb25maWd1cmF0aW9uLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
c2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
bi5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2ltcG9ydCAiVGVzdFBy
b3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRl
cm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVu
dGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5z
cGVjdG9yOwotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgotewot
ICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci19Ci0KLS0g
KGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29u
dHJvbGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYg
KCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAg
ICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZv
aWQpZGVhbGxvYwotewotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotQGVuZAotCi0KLSMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbElu
dGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2lt
cG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQot
Ci0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9u
Lmg+Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KLQot
Ci1AY2xhc3MgVGVzdFByb3RvY29sUnVudGltZUtleVBhdGg7Ci0KLXR5cGVkZWYgTlNfRU5VTShO
U0ludGVnZXIsIFRlc3RQcm90b2NvbFBsYXRmb3JtKSB7Ci0gICAgVGVzdFByb3RvY29sUGxhdGZv
cm1BbGwsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljLAotICAgIFRlc3RQcm90b2Nv
bFBsYXRmb3JtSU9TLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1MsCi19OwotCi0KLXR5
cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZSkg
ewotICAgIFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZU51bGwsCi0gICAgVGVzdFByb3Rv
Y29sUnVudGltZUtleVBhdGhUeXBlU3RyaW5nLAotICAgIFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQ
YXRoVHlwZUFycmF5LAotfTsKLQotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVs
dCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sUnVudGltZUtleVBhdGggOiBSV0lQcm90b2Nv
bEpTT05PYmplY3QKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFy
eTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkOwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJv
dG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7Ci0tIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhUeXBlOihUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGUpdHlw
ZTsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIFRlc3RQcm90
b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZSB0eXBlOwotLyogb3B0aW9uYWwgKi8gQHByb3BlcnR5IChu
b25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICpzdHJpbmc7Ci0vKiBvcHRpb25hbCAqLyBAcHJvcGVy
dHkgKG5vbmF0b21pYywgY29weSkgTlNBcnJheS8qPE5TU3RyaW5nPiovICphcnJheTsKLUBlbmQK
LQotCi0KLQotCi0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0
aWJpbGl0eU9iamVjdHMuaD4KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2Nv
bC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKLSNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9y
dCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJ
bnRlcm5hbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMu
aAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5
cGUtc2V0dGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVBy
b3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdGVt
cGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgotT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9t
UHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0KLWlubGluZSBTdHJpbmcgdG9Q
cm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xQbGF0Zm9ybSB2YWx1ZSkKLXsKLSAgICBzd2l0Y2go
dmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOgotICAgICAgICByZXR1
cm4gImFsbCJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzoKLSAgICAg
ICAgcmV0dXJuICJnZW5lcmljIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1JT1M6
Ci0gICAgICAgIHJldHVybiAiaW9zIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1N
YWNPUzoKLSAgICAgICAgcmV0dXJuICJtYWNvcyJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4K
LWlubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xQbGF0Zm9ybT4gZnJvbVByb3RvY29sU3RyaW5n
KGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJhbGwiKQotICAgICAg
ICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1BbGw7Ci0gICAgaWYgKHZhbHVlID09ICJnZW5l
cmljIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzsKLSAgICBp
ZiAodmFsdWUgPT0gImlvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlP
UzsKLSAgICBpZiAodmFsdWUgPT0gIm1hY29zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2Nv
bFBsYXRmb3JtTWFjT1M7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotCi1pbmxpbmUg
U3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlIHZh
bHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sUnVudGlt
ZUtleVBhdGhUeXBlTnVsbDoKLSAgICAgICAgcmV0dXJuICJudWxsIl9zOwotICAgIGNhc2UgVGVz
dFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlU3RyaW5nOgotICAgICAgICByZXR1cm4gInN0cmlu
ZyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZUFycmF5OgotICAg
ICAgICByZXR1cm4gImFycmF5Il9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9w
dGlvbmFsPFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZT4gZnJvbVByb3RvY29sU3RyaW5n
KGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJudWxsIikKLSAgICAg
ICAgcmV0dXJuIFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZU51bGw7Ci0gICAgaWYgKHZh
bHVlID09ICJzdHJpbmciKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUnVudGltZUtleVBh
dGhUeXBlU3RyaW5nOwotICAgIGlmICh2YWx1ZSA9PSAiYXJyYXkiKQotICAgICAgICByZXR1cm4g
VGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlQXJyYXk7Ci0gICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNo
YWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5
cGVQYXJzZXIuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQ
cml2YXRlLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbnRlcmZhY2UgVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChSdW50aW1lRG9tYWluKQotCi0rICh2b2lkKV9wYXJz
ZUtleVBhdGg6KFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoICoqKW91dFZhbHVlIGZyb21QYXls
b2FkOihpZClwYXlsb2FkOwotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMgKFJ1bnRpbWVEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlS2V5UGF0aDoo
VGVzdFByb3RvY29sUnVudGltZUtleVBhdGggKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBh
eWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0Rp
Y3Rpb25hcnkgY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbFJ1bnRpbWVL
ZXlQYXRoIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07Ci19Ci0KLUBlbmQKLQotCi0j
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBzaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5h
bC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQg
PFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0jaW1wb3J0IDx3
dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFt
ZXNwYWNlIEluc3BlY3RvcjsKLQotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sUnVudGlt
ZUtleVBhdGgKLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBOU0Rp
Y3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZAotewotICAgIGlmICghKHNlbGYgPSBb
c3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AidHlwZSJdLCBAInR5cGUiKTsKLSAgICBP
cHRpb25hbDxUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGU+IHR5cGUgPSBmcm9tUHJvdG9j
b2xTdHJpbmc8VGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlPihwYXlsb2FkW0AidHlwZSJd
KTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9FTlVNX1ZBTFVFKHR5cGUsIEAidHlwZSIp
OwotICAgIHNlbGYudHlwZSA9IHR5cGUudmFsdWUoKTsKLQotICAgIHNlbGYuc3RyaW5nID0gcGF5
bG9hZFtAInN0cmluZyJdOwotCi0gICAgc2VsZi5hcnJheSA9IHBheWxvYWRbQCJhcnJheSJdOwot
Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9i
amVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopb2JqZWN0Ci17Ci0gICAgaWYgKCEoc2VsZiA9
IFtzdXBlciBpbml0V2l0aEpTT05PYmplY3Q6W29iamVjdCB0b0pTT05PYmplY3RdLmdldCgpXSkp
Ci0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoVHlwZTooVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlKXR5cGUK
LXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsK
LQotICAgIHNlbGYudHlwZSA9IHR5cGU7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9p
ZClzZXRUeXBlOihUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGUpdHlwZQotewotICAgIFtz
dXBlciBzZXRTdHJpbmc6dG9Qcm90b2NvbFN0cmluZyh0eXBlKSBmb3JLZXk6QCJ0eXBlIl07Ci19
Ci0KLS0gKFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZSl0eXBlCi17Ci0gICAgcmV0dXJu
IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGU+KFtzdXBl
ciBzdHJpbmdGb3JLZXk6QCJ0eXBlIl0pLnZhbHVlKCk7Ci19Ci0KLS0gKHZvaWQpc2V0U3RyaW5n
OihOU1N0cmluZyAqKXN0cmluZwotewotICAgIFtzdXBlciBzZXRTdHJpbmc6c3RyaW5nIGZvcktl
eTpAInN0cmluZyJdOwotfQotCi0tIChOU1N0cmluZyAqKXN0cmluZwotewotICAgIHJldHVybiBb
c3VwZXIgc3RyaW5nRm9yS2V5OkAic3RyaW5nIl07Ci19Ci0KLS0gKHZvaWQpc2V0QXJyYXk6KE5T
QXJyYXkvKjxOU1N0cmluZz4qLyAqKWFycmF5Ci17Ci0gICAgW3N1cGVyIHNldEpTT05BcnJheTp0
b0pTT05TdHJpbmdBcnJheShhcnJheSkgZm9yS2V5OkAiYXJyYXkiXTsKLX0KLQotLSAoTlNBcnJh
eS8qPE5TU3RyaW5nPiovICopYXJyYXkKLXsKLSAgICByZXR1cm4gdG9PYmpDU3RyaW5nQXJyYXko
W3N1cGVyIEpTT05BcnJheUZvcktleTpAImFycmF5Il0pOwotfQotCi1AZW5kCi0KLQotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvc2hvdWxkLXN0
cmlwLWNvbW1lbnRzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpz
b24tcmVzdWx0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YTFmYjdkNGY5ZC4uMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2dlbmVyaWMvZXhwZWN0ZWQvc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24tcmVzdWx0Cisr
KyAvZGV2L251bGwKQEAgLTEsODcwICswLDAgQEAKLSMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JC
YWNrZW5kQ29tbWFuZHMuanMKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaG91
bGQtc3RyaXAtY29tbWVudHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNob3VsZC1zdHJpcC1jb21tZW50cy5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0j
aWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0KLSNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xUeXBlcy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJv
bnRlbmRSb3V0ZXIuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRj
aGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERp
c3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9Ci0gICAgQmFja2VuZERpc3BhdGNoZXIq
IGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5n
ZXQoKTsgfQotcHJpdmF0ZToKLSAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2Vu
ZERpc3BhdGNoZXI7Ci19OwotCi0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotI2Vu
ZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotIyMjIEVuZCBG
aWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHNob3VsZC1zdHJpcC1jb21tZW50cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29s
T2JqZWN0cy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJ
bnNwZWN0b3IgewotCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQotCi0KLX0gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgK
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05W
YWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKLSNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jZW5k
aWYKLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHNob3VsZC1zdHJpcC1jb21tZW50cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVz
dFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFz
cyBGcm9udGVuZFJvdXRlcjsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZp
bGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9u
dGVuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNo
b3VsZC1zdHJpcC1jb21tZW50cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0RnJvbnRlbmRE
aXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRl
bmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJ
bnNwZWN0b3IgewotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBU
ZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bE9iamVjdHMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNob3VsZC1zdHJp
cC1jb21tZW50cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJv
dG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5hbWVzcGFjZSBJ
bnNwZWN0b3IgewotCi0KLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLQotCi0KLQotCi0K
LX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbE9iamVjdHMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hv
dWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9i
amVjdHMuaCIKLQotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLW5hbWVzcGFjZSBQcm90b2Nv
bCB7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBzaG91bGQtc3RyaXAtY29tbWVudHMuanNvbgotLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW5jbHVkZSA8d3Rm
L1JldGFpblB0ci5oPgotCi0KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3Bh
dGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVy
cy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNob3VsZC1zdHJpcC1jb21t
ZW50cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNp
bXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJz
LmgiCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0K
LW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHNob3VsZC1zdHJpcC1jb21tZW50cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJv
dG9jb2wuaD4KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50
ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAotQGVuZAotCi0KLSMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
bi5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2ltcG9ydCAiVGVzdFBy
b3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRl
cm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVu
dGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5z
cGVjdG9yOwotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgotewot
ICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci19Ci0KLS0g
KGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29u
dHJvbGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYg
KCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAg
ICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZv
aWQpZGVhbGxvYwotewotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotQGVuZAotCi0KLSMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHNob3VsZC1zdHJpcC1jb21tZW50cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgi
Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8d3Rm
L0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0jIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxk
LXN0cmlwLWNvbW1lbnRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLSNpbXBvcnQgPFdl
Ykluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KLQotCi0KLQotdHlwZWRlZiBOU19F
TlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sUGxhdGZvcm0pIHsKLSAgICBUZXN0UHJvdG9jb2xQ
bGF0Zm9ybUFsbCwKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWMsCi0gICAgVGVzdFBy
b3RvY29sUGxhdGZvcm1JT1MsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUywKLX07Ci0K
LQotCi0KLQotCi0KLQotCi0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxk
Q29tcGF0aWJpbGl0eU9iamVjdHMuaD4KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAot
Ci0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHNob3VsZC1zdHJpcC1jb21tZW50cy5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5o
IgotI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKLSNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8
d3RmL0pTT05WYWx1ZXMuaD4KLQotCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRl
cm5hbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNob3VsZC1zdHJpcC1jb21tZW50cy5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQg
IlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlD
b252ZXJzaW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdGVtcGxhdGU8dHlwZW5h
bWUgT2JqQ0VudW1UeXBlPgotT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJp
bmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmlu
ZyhUZXN0UHJvdG9jb2xQbGF0Zm9ybSB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAg
ICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOgotICAgICAgICByZXR1cm4gImFsbCJfczsK
LSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzoKLSAgICAgICAgcmV0dXJuICJn
ZW5lcmljIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1JT1M6Ci0gICAgICAgIHJl
dHVybiAiaW9zIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzoKLSAgICAg
ICAgcmV0dXJuICJtYWNvcyJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRp
b25hbDxUZXN0UHJvdG9jb2xQbGF0Zm9ybT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJhbGwiKQotICAgICAgICByZXR1cm4gVGVz
dFByb3RvY29sUGxhdGZvcm1BbGw7Ci0gICAgaWYgKHZhbHVlID09ICJnZW5lcmljIikKLSAgICAg
ICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzsKLSAgICBpZiAodmFsdWUgPT0g
ImlvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzsKLSAgICBpZiAo
dmFsdWUgPT0gIm1hY29zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFj
T1M7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNob3VsZC1zdHJpcC1jb21tZW50cy5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQg
IlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90
b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0K
LQotCi0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQot
Ci0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBzaG91bGQtc3RyaXAtY29tbWVudHMuanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRl
cm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBv
cnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0jaW1wb3J0
IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcg
bmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVz
Lm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZl
LXR5cGUuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0
aXZlLXR5cGUuanNvbi1yZXN1bHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1NjY2
Mzc5Y2E3Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQt
cHJpbWl0aXZlLXR5cGUuanNvbi1yZXN1bHQKKysrIC9kZXYvbnVsbApAQCAtMSw4OTEgKzAsMCBA
QAotIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRp
dmUtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0j
IyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBv
bmNlCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQotI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JGcm9udGVuZFJvdXRlci5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3Mg
QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZvaWQgc2V0QmFja2Vu
ZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9i
YWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KLSAgICBCYWNrZW5kRGlz
cGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNw
YXRjaGVyLmdldCgpOyB9Ci1wcml2YXRlOgotICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4g
bV9iYWNrZW5kRGlzcGF0Y2hlcjsKLX07Ci0KLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgotCi0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0j
IyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNl
Ci0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXR5cGVkZWYgU3RyaW5nIEVy
cm9yU3RyaW5nOwotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6
IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmRE
aXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRl
Y2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
VGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2lu
Y2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotI2luY2x1
ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNlbmRpZgotCi1uYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5k
IEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
RnJvbnRlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
dHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRl
ICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0K
LWNsYXNzIEZyb250ZW5kUm91dGVyOwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBF
bmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNl
Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0j
aW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQot
Ci1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotCi0KLS8vIFR5cGVkZWZzLgotbmFtZXNwYWNl
IFJ1bnRpbWUgewotLyogVW5pcXVlIG9iamVjdCBpZGVudGlmaWVyLiAqLwotdHlwZWRlZiBpbnQg
UmVtb3RlT2JqZWN0SWQ7Ci19IC8vIFJ1bnRpbWUKLS8vIEVuZCBvZiB0eXBlZGVmcy4KLQotCi0K
LX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbE9iamVjdHMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlw
ZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLQotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0K
LW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmpl
Y3RzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJz
LmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFs
aWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRl
QmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi0KLQot
bmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlw
ZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBv
cnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgi
Ci0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2luY2x1ZGUgIlRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLW5h
bWVzcGFjZSBJbnNwZWN0b3IgewotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPFdlYklu
c3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRl
ZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVj
dAotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2
ZS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgotCi0jaW1wb3J0ICJUZXN0UHJv
dG9jb2xJbnRlcm5hbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJz
LmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5o
PgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVy
Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlz
cGF0Y2hlcnMuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVycy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW1wbGVtZW50YXRp
b24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9y
Q29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENv
bnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgotewot
ICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4g
bmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xs
ZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAgIFtzdXBl
ciBkZWFsbG9jXTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29u
ZmlndXJhdGlvbi5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRj
aGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRp
b24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNp
bXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8d3RmL0pTT05W
YWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0jIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJh
dGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0K
LSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KLQotCi0KLQot
dHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sUGxhdGZvcm0pIHsKLSAgICBU
ZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbCwKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWMs
Ci0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1JT1MsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1N
YWNPUywKLX07Ci0KLQotCi0KLQotCi0KLQotCi0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQ
cm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4KLQotIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2wuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1w
cmltaXRpdmUtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sSlNP
Tk9iamVjdFByaXZhdGUuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5z
cGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotCi0KLQot
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90
b2NvbC5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9u
cy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0Vu
dW1UeXBlPgotT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3Qg
U3RyaW5nJiB2YWx1ZSk7Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJv
dG9jb2xQbGF0Zm9ybSB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBjYXNlIFRl
c3RQcm90b2NvbFBsYXRmb3JtQWxsOgotICAgICAgICByZXR1cm4gImFsbCJfczsKLSAgICBjYXNl
IFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzoKLSAgICAgICAgcmV0dXJuICJnZW5lcmljIl9z
OwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1JT1M6Ci0gICAgICAgIHJldHVybiAiaW9z
Il9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzoKLSAgICAgICAgcmV0dXJu
ICJtYWNvcyJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0
UHJvdG9jb2xQbGF0Zm9ybT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUp
Ci17Ci0gICAgaWYgKHZhbHVlID09ICJhbGwiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29s
UGxhdGZvcm1BbGw7Ci0gICAgaWYgKHZhbHVlID09ICJnZW5lcmljIikKLSAgICAgICAgcmV0dXJu
IFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzsKLSAgICBpZiAodmFsdWUgPT0gImlvcyIpCi0g
ICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzsKLSAgICBpZiAodmFsdWUgPT0g
Im1hY29zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M7Ci0gICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgot
Ci0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUu
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0
ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29s
LmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCi0jaW1wb3J0IDxXZWJJbnNw
ZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotCi11c2luZyBuYW1lc3BhY2Ug
SW5zcGVjdG9yOwotCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoUnVu
dGltZURvbWFpbikKLQotKyAodm9pZClfcGFyc2VSZW1vdGVPYmplY3RJZDooTlNOdW1iZXIgKiop
b3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0
aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoUnVudGltZURvbWFpbikKLQotKyAodm9p
ZClfcGFyc2VSZW1vdGVPYmplY3RJZDooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6
KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQs
IFtOU051bWJlciBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IChOU051bWJlciAqKXBheWxvYWQ7
Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZl
LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0j
aW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05P
YmplY3RQcml2YXRlLmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3Rm
L0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0KLQotIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvdHlwZS1k
ZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlv
bi1hcnJheS10eXBlLmpzb24tcmVzdWx0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBh
NGU1YzdlNDA5MS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hcnJh
eS10eXBlLmpzb24tcmVzdWx0CisrKyAvZGV2L251bGwKQEAgLTEsMTA3MyArMCwwIEBACi0jIyMg
QmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotLy8gRGVidWdnZXIKLUluc3Bl
Y3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIkRlYnVnZ2VyIiwgbnVsbCk7Ci1JbnNwZWN0b3JC
YWNrZW5kLnJlZ2lzdGVyRW51bSgiRGVidWdnZXIuUmVhc29uIiwge0RpZWQ6ICJEaWVkIiwgRmFp
bnRlZDogIkZhaW50ZWQiLCBIdW5ncnk6ICJIdW5ncnkifSk7Ci1JbnNwZWN0b3JCYWNrZW5kLmFj
dGl2YXRlRG9tYWluKCJEZWJ1Z2dlciIsIG51bGwpOwotIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JC
YWNrZW5kQ29tbWFuZHMuanMKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5k
RGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVj
bGFyYXRpb24tYXJyYXktdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgotI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLQotbmFtZXNwYWNl
IEluc3BlY3RvciB7Ci0KLWNsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1Ymxp
YzoKLSAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hl
cj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNo
ZXIpOyB9Ci0gICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3Qg
eyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQotcHJpdmF0ZToKLSAgICBSZWZQ
dHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Ci19OwotCi0KLQotCi19
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQotIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERp
c3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXkt
dHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNw
cmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10eXBlZGVm
IFN0cmluZyBFcnJvclN0cmluZzsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMj
IEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRl
c3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRl
c3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNs
dWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSNpbmNsdWRl
ICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNl
IEluc3BlY3RvciB7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBG
aWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZy
b250ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5
cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29s
T2JqZWN0cy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBGcm9udGVu
ZFJvdXRlcjsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RG
cm9udGVuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3Bh
dGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFy
YXRpb24tYXJyYXktdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNw
YXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRS
b3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNw
ZWN0b3IgewotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0
RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9i
amVjdHMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRp
b24tYXJyYXktdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
UHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5hbWVzcGFj
ZSBJbnNwZWN0b3IgewotCi0KLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLS8vIEZvcndh
cmQgZGVjbGFyYXRpb25zLgotbmFtZXNwYWNlIERlYnVnZ2VyIHsKLWVudW0gY2xhc3MgUmVhc29u
OwotfSAvLyBEZWJ1Z2dlcgotLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgotCi0KLS8v
IFR5cGVkZWZzLgotbmFtZXNwYWNlIERlYnVnZ2VyIHsKLXR5cGVkZWYgaW50IEJyZWFrcG9pbnRJ
ZDsKLX0gLy8gRGVidWdnZXIKLQotbmFtZXNwYWNlIFJ1bnRpbWUgewotdHlwZWRlZiBpbnQgT2Jq
ZWN0SWQ7Ci10eXBlZGVmIEpTT046OkFycmF5T2Y8aW50PiBMdWNreU51bWJlcnM7Ci10eXBlZGVm
IEpTT046OkFycmF5T2Y8U3RyaW5nPiBCYWJ5TmFtZXM7Ci10eXBlZGVmIEpTT046OkFycmF5T2Y8
aW50PiBOZXdPYmplY3RzOwotdHlwZWRlZiBKU09OOjpBcnJheU9mPGludD4gT2xkT2JqZWN0czsK
LXR5cGVkZWYgSlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVh
c29uPiBTdG9wUmVhc29uczsKLX0gLy8gUnVudGltZQotLy8gRW5kIG9mIHR5cGVkZWZzLgotCi1u
YW1lc3BhY2UgVGVzdEhlbHBlcnMgewotCi1TdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50
IGNvZGUpOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFs
dWUoVCBlbnVtVmFsdWUpCi17Ci0gICAgcmV0dXJuIGdldEVudW1Db25zdGFudFZhbHVlKHN0YXRp
Y19jYXN0PGludD4oZW51bVZhbHVlKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJz
Ci0KLW5hbWVzcGFjZSBEZWJ1Z2dlciB7Ci0vKiAgKi8KLWVudW0gY2xhc3MgUmVhc29uIHsKLSAg
ICBEaWVkID0gMCwKLSAgICBGYWludGVkID0gMSwKLSAgICBIdW5ncnkgPSAyLAotfTsgLy8gZW51
bSBjbGFzcyBSZWFzb24KLX0gLy8gRGVidWdnZXIKLQotCi0KLW5hbWVzcGFjZSBUZXN0SGVscGVy
cyB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFByb3RvY29sRW51bVR5cGU+Ci1PcHRpb25hbDxQcm90
b2NvbEVudW1UeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJik7Ci0K
LS8vIEVudW1zIGluIHRoZSAnRGVidWdnZXInIERvbWFpbgotdGVtcGxhdGU8PgotT3B0aW9uYWw8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbj4gcGFyc2VFbnVtVmFsdWVGcm9t
U3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb24+KGNvbnN0IFN0cmlu
ZyYpOwotCi19IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwotCi19IC8vIG5hbWVzcGFjZSBQcm90
b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotbmFtZXNwYWNlIFdURiB7Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKLQotLy8gSGFzaCBkZWNsYXJh
dGlvbnMgaW4gdGhlICdEZWJ1Z2dlcicgRG9tYWluCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgRGVmYXVs
dEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbj4gewotICAgIHR5cGVk
ZWYgSW50SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uPiBIYXNoOwot
fTsKLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVj
dHMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotCi0jaW5jbHVkZSA8
d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotbmFtZXNwYWNlIFRlc3RI
ZWxwZXJzIHsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFsdWVz
W10gPSB7Ci0gICAgIkRpZWQiLAotICAgICJGYWludGVkIiwKLSAgICAiSHVuZ3J5IiwKLX07Ci0K
LVN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgewotICAgIHJldHVybiBlbnVt
X2NvbnN0YW50X3ZhbHVlc1tjb2RlXTsKLX0KLQotLy8gRW51bXMgaW4gdGhlICdEZWJ1Z2dlcicg
RG9tYWluCi10ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dl
cjo6UmVhc29uPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RGVidWdnZXI6OlJlYXNvbj4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKLXsKLSAgICBz
dGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7Ci0gICAgICAgIChzaXplX3Qp
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbjo6RGllZCwKLSAgICAgICAgKHNp
emVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uOjpGYWludGVkLAotICAg
ICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb246Okh1bmdy
eSwKLSAgICB9OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMzsgKytpKQotICAgICAgICBp
ZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNb
aV1dKQotICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6
UmVhc29uKWNvbnN0YW50VmFsdWVzW2ldOwotCi0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0K
LQotCi19IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJv
dG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sT2JqZWN0cy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmRE
aXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNs
YXJhdGlvbi1hcnJheS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVycy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQotCi0KLW5h
bWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIK
LSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSAi
VGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotCi1uYW1lc3BhY2UgSW5zcGVj
dG9yIHsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xDb25maWd1cmF0aW9uLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBl
LWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+Ci0K
LV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0
UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sQ29uZmlndXJhdGlvbi5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5
cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIK
LQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2Nv
bEJhY2tlbmREaXNwYXRjaGVycy5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRl
RGlzcGF0Y2hhYmxlQWdlbnQuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxl
SW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3Rv
cjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KLXsKLSAgICBB
dWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotfQotCi0tIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xs
ZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2Vs
ZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2Nv
bnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWRl
YWxsb2MKLXsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5o
IgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPHd0
Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2wuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUt
ZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotCi0jaW1w
b3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+Ci0KLQotCi0KLXR5cGVk
ZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbFBsYXRmb3JtKSB7Ci0gICAgVGVzdFBy
b3RvY29sUGxhdGZvcm1BbGwsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljLAotICAg
IFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1Ms
Ci19OwotCi0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbERlYnVnZ2Vy
UmVhc29uKSB7Ci0gICAgVGVzdFByb3RvY29sRGVidWdnZXJSZWFzb25EaWVkLAotICAgIFRlc3RQ
cm90b2NvbERlYnVnZ2VyUmVhc29uRmFpbnRlZCwKLSAgICBUZXN0UHJvdG9jb2xEZWJ1Z2dlclJl
YXNvbkh1bmdyeSwKLX07Ci0KLQotCi0KLQotCi0KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JX
SVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgotCi0jIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10
eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2lt
cG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJp
dmF0ZS5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250
cm9sbGVyLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi0KLQotCi0jIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlw
ZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0IDxXZWJJ
bnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNw
ZWN0b3IgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+Ci1PcHRpb25hbDxPYmpD
RW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKLQotaW5s
aW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFBsYXRmb3JtIHZhbHVlKQot
ewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1BbGw6
Ci0gICAgICAgIHJldHVybiAiYWxsIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1H
ZW5lcmljOgotICAgICAgICByZXR1cm4gImdlbmVyaWMiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9j
b2xQbGF0Zm9ybUlPUzoKLSAgICAgICAgcmV0dXJuICJpb3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJv
dG9jb2xQbGF0Zm9ybU1hY09TOgotICAgICAgICByZXR1cm4gIm1hY29zIl9zOwotICAgIH0KLX0K
LQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFBsYXRmb3JtPiBmcm9t
UHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0g
ImFsbCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDsKLSAgICBpZiAo
dmFsdWUgPT0gImdlbmVyaWMiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1H
ZW5lcmljOwotICAgIGlmICh2YWx1ZSA9PSAiaW9zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90
b2NvbFBsYXRmb3JtSU9TOwotICAgIGlmICh2YWx1ZSA9PSAibWFjb3MiKQotICAgICAgICByZXR1
cm4gVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0Owot
fQotCi0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEZWJ1Z2dl
clJlYXNvbiB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQcm90
b2NvbERlYnVnZ2VyUmVhc29uRGllZDoKLSAgICAgICAgcmV0dXJuICJEaWVkIl9zOwotICAgIGNh
c2UgVGVzdFByb3RvY29sRGVidWdnZXJSZWFzb25GYWludGVkOgotICAgICAgICByZXR1cm4gIkZh
aW50ZWQiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbkh1bmdyeToKLSAg
ICAgICAgcmV0dXJuICJIdW5ncnkiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUg
T3B0aW9uYWw8VGVzdFByb3RvY29sRGVidWdnZXJSZWFzb24+IGZyb21Qcm90b2NvbFN0cmluZyhj
b25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiRGllZCIpCi0gICAgICAg
IHJldHVybiBUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbkRpZWQ7Ci0gICAgaWYgKHZhbHVlID09
ICJGYWludGVkIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERlYnVnZ2VyUmVhc29uRmFp
bnRlZDsKLSAgICBpZiAodmFsdWUgPT0gIkh1bmdyeSIpCi0gICAgICAgIHJldHVybiBUZXN0UHJv
dG9jb2xEZWJ1Z2dlclJlYXNvbkh1bmdyeTsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQot
Ci0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVj
bGFyYXRpb24tYXJyYXktdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotCi0j
aW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIu
aCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+
Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbnRlcmZhY2UgVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zIChEZWJ1Z2dlckRvbWFpbikKLQotKyAodm9pZClfcGFyc2VCcmVha3Bv
aW50SWQ6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotKyAo
dm9pZClfcGFyc2VSZWFzb246KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClw
YXlsb2FkOwotCi1AZW5kCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAo
UnVudGltZURvbWFpbikKLQotKyAodm9pZClfcGFyc2VPYmplY3RJZDooTlNOdW1iZXIgKiopb3V0
VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZUx1Y2t5TnVtYmVy
czooTlNBcnJheS8qPE5TTnVtYmVyPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXls
b2FkOwotKyAodm9pZClfcGFyc2VCYWJ5TmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKilv
dXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLSsgKHZvaWQpX3BhcnNlTmV3T2JqZWN0
czooTlNBcnJheS8qPE5TTnVtYmVyPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXls
b2FkOwotKyAodm9pZClfcGFyc2VPbGRPYmplY3RzOihOU0FycmF5Lyo8TlNOdW1iZXI+Ki8gKiop
b3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZVN0b3BSZWFz
b25zOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBh
eWxvYWQ7Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucyAoRGVidWdnZXJEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlQnJlYWtwb2ludElkOihOU051
bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TTnVtYmVyIGNsYXNzXSk7Ci0gICAgKm91
dFZhbHVlID0gKE5TTnVtYmVyICopcGF5bG9hZDsKLX0KLQotKyAodm9pZClfcGFyc2VSZWFzb246
KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKLSAg
ICBPcHRpb25hbDxUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbj4gcmVzdWx0ID0gSW5zcGVjdG9y
Ojpmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sRGVidWdnZXJSZWFzb24+KHBheWxvYWQp
OwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX0VOVU1fVkFMVUUocmVzdWx0LCBAIlJlYXNv
biIpOwotICAgICpvdXRWYWx1ZSA9IEAocmVzdWx0LnZhbHVlKCkpOwotfQotCi1AZW5kCi1AaW1w
bGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChSdW50aW1lRG9tYWluKQot
Ci0rICh2b2lkKV9wYXJzZU9iamVjdElkOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9h
ZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9h
ZCwgW05TTnVtYmVyIGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gKE5TTnVtYmVyICopcGF5bG9h
ZDsKLX0KLQotKyAodm9pZClfcGFyc2VMdWNreU51bWJlcnM6KE5TQXJyYXkvKjxOU051bWJlcj4q
LyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TQXJyYXkvKjxOU051bWJlcj4qLyBjbGFzc10p
OwotICAgICpvdXRWYWx1ZSA9IChOU0FycmF5Lyo8TlNOdW1iZXI+Ki8gKilwYXlsb2FkOwotfQot
Ci0rICh2b2lkKV9wYXJzZUJhYnlOYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKW91dFZh
bHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9C
QURfVFlQRShwYXlsb2FkLCBbTlNBcnJheS8qPE5TU3RyaW5nPiovIGNsYXNzXSk7Ci0gICAgKm91
dFZhbHVlID0gKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKXBheWxvYWQ7Ci19Ci0KLSsgKHZvaWQp
X3BhcnNlTmV3T2JqZWN0czooTlNBcnJheS8qPE5TTnVtYmVyPiovICoqKW91dFZhbHVlIGZyb21Q
YXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShw
YXlsb2FkLCBbTlNBcnJheS8qPE5TTnVtYmVyPiovIGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0g
KE5TQXJyYXkvKjxOU051bWJlcj4qLyAqKXBheWxvYWQ7Ci19Ci0KLSsgKHZvaWQpX3BhcnNlT2xk
T2JqZWN0czooTlNBcnJheS8qPE5TTnVtYmVyPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihp
ZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBb
TlNBcnJheS8qPE5TTnVtYmVyPiovIGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gKE5TQXJyYXkv
KjxOU051bWJlcj4qLyAqKXBheWxvYWQ7Ci19Ci0KLSsgKHZvaWQpX3BhcnNlU3RvcFJlYXNvbnM6
KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9h
ZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TQXJyYXkv
KjxOU1N0cmluZz4qLyBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IChOU0FycmF5Lyo8TlNTdHJp
bmc+Ki8gKilwYXlsb2FkOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVz
Lm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1h
cnJheS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xK
U09OT2JqZWN0UHJpdmF0ZS5oPgotI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQg
PHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotCi0K
LQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3Rl
ZC90eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtZGVj
bGFyYXRpb24tZW51bS10eXBlLmpzb24tcmVzdWx0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA4OTc5ZThkYmUyZi4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlv
bi1lbnVtLXR5cGUuanNvbi1yZXN1bHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMDg2ICswLDAgQEAK
LSMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLS8vIFJ1bnRpbWUKLUlu
c3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIlJ1bnRpbWUiLCBudWxsKTsKLUluc3BlY3Rv
ckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJSdW50aW1lLkZhcm1BbmltYWxzIiwge1BpZ3M6ICJQaWdz
IiwgQ293czogIkNvd3MiLCBDYXRzOiAiQ2F0cyIsIEhlbnM6ICJIZW5zIn0pOwotSW5zcGVjdG9y
QmFja2VuZC5yZWdpc3RlckVudW0oIlJ1bnRpbWUuVHdvTGVnZ2VkQW5pbWFscyIsIHtEdWNrczog
IkR1Y2tzIiwgSGVuczogIkhlbnMiLCBDcm93czogIkNyb3dzIiwgRmxhbWluZ29zOiAiRmxhbWlu
Z29zIn0pOwotSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiUnVudGltZSIsIG51bGwp
OwotIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNp
ZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQotI2luY2x1ZGUgIlRl
c3RQcm90b2NvbFR5cGVzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9u
dGVuZFJvdXRlci5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgQWx0ZXJuYXRl
QmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNo
ZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlz
cGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KLSAgICBCYWNrZW5kRGlzcGF0Y2hlciog
YmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdl
dCgpOyB9Ci1wcml2YXRlOgotICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5k
RGlzcGF0Y2hlcjsKLX07Ci0KLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jZW5k
aWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jIyMgRW5kIEZp
bGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90
b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKLQotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KLQotCi19IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVy
cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8
d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKLSNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJz
LmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi19IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAot
Ci0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0K
LSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1
ZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3Bl
Y3RvciB7Ci0KLWNsYXNzIEZyb250ZW5kUm91dGVyOwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotbmFtZXNwYWNlIFByb3Rv
Y29sIHsKLQotCi0KLS8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgotbmFtZXNwYWNlIFJ1bnRpbWUg
ewotZW51bSBjbGFzcyBGYXJtQW5pbWFsczsKLWVudW0gY2xhc3MgVHdvTGVnZ2VkQW5pbWFsczsK
LX0gLy8gUnVudGltZQotLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgotCi0KLQotCi1u
YW1lc3BhY2UgVGVzdEhlbHBlcnMgewotCi1TdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50
IGNvZGUpOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFs
dWUoVCBlbnVtVmFsdWUpCi17Ci0gICAgcmV0dXJuIGdldEVudW1Db25zdGFudFZhbHVlKHN0YXRp
Y19jYXN0PGludD4oZW51bVZhbHVlKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJz
Ci0KLW5hbWVzcGFjZSBSdW50aW1lIHsKLS8qICAqLwotZW51bSBjbGFzcyBGYXJtQW5pbWFscyB7
Ci0gICAgUGlncyA9IDAsCi0gICAgQ293cyA9IDEsCi0gICAgQ2F0cyA9IDIsCi0gICAgSGVucyA9
IDMsCi19OyAvLyBlbnVtIGNsYXNzIEZhcm1BbmltYWxzCi0vKiAgKi8KLWVudW0gY2xhc3MgVHdv
TGVnZ2VkQW5pbWFscyB7Ci0gICAgRHVja3MgPSA0LAotICAgIEhlbnMgPSAzLAotICAgIENyb3dz
ID0gNSwKLSAgICBGbGFtaW5nb3MgPSA2LAotfTsgLy8gZW51bSBjbGFzcyBUd29MZWdnZWRBbmlt
YWxzCi19IC8vIFJ1bnRpbWUKLQotCi0KLW5hbWVzcGFjZSBUZXN0SGVscGVycyB7Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIFByb3RvY29sRW51bVR5cGU+Ci1PcHRpb25hbDxQcm90b2NvbEVudW1UeXBl
PiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJik7Ci0KLS8vIEVudW1zIGlu
IHRoZSAnUnVudGltZScgRG9tYWluCi10ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlBy
b3RvY29sOjpSdW50aW1lOjpGYXJtQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzPihjb25zdCBTdHJpbmcmKTsK
LXRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xl
Z2dlZEFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29s
OjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxzPihjb25zdCBTdHJpbmcmKTsKLQotfSAvLyBuYW1l
c3BhY2UgVGVzdEhlbHBlcnMKLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCi0KLW5hbWVzcGFjZSBXVEYgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Ci0KLS8vIEhhc2ggZGVjbGFyYXRpb25zIGluIHRoZSAnUnVu
dGltZScgRG9tYWluCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM+IHsKLSAgICB0eXBlZGVmIEludEhhc2g8SW5z
cGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM+IEhhc2g7Ci19OwotdGVtcGxh
dGU8Pgotc3RydWN0IERlZmF1bHRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3
b0xlZ2dlZEFuaW1hbHM+IHsKLSAgICB0eXBlZGVmIEludEhhc2g8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFscz4gSGFzaDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IFdURgotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
VGVzdFByb3RvY29sT2JqZWN0cy5oIgotCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotbmFt
ZXNwYWNlIFByb3RvY29sIHsKLQotbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKLQotc3RhdGljIGNv
bnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFsdWVzW10gPSB7Ci0gICAgIlBpZ3MiLAot
ICAgICJDb3dzIiwKLSAgICAiQ2F0cyIsCi0gICAgIkhlbnMiLAotICAgICJEdWNrcyIsCi0gICAg
IkNyb3dzIiwKLSAgICAiRmxhbWluZ29zIiwKLX07Ci0KLVN0cmluZyBnZXRFbnVtQ29uc3RhbnRW
YWx1ZShpbnQgY29kZSkgewotICAgIHJldHVybiBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb2RlXTsK
LX0KLQotLy8gRW51bXMgaW4gdGhlICdSdW50aW1lJyBEb21haW4KLXRlbXBsYXRlPD4KLU9wdGlv
bmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzPiBwYXJzZUVudW1W
YWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM+
KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCi17Ci0gICAgc3RhdGljIGNvbnN0IHNpemVf
dCBjb25zdGFudFZhbHVlc1tdID0gewotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9j
b2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzOjpQaWdzLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rv
cjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzOjpDb3dzLAotICAgICAgICAoc2l6ZV90
KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzOjpDYXRzLAotICAgICAg
ICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzOjpIZW5z
LAotICAgIH07Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCA0OyArK2kpCi0gICAgICAgIGlm
IChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tp
XV0pCi0gICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZh
cm1BbmltYWxzKWNvbnN0YW50VmFsdWVzW2ldOwotCi0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
LX0KLQotdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6
VHdvTGVnZ2VkQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xT
dHJpbmcpCi17Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0gewot
ICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFu
aW1hbHM6OkR1Y2tzLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRp
bWU6OlR3b0xlZ2dlZEFuaW1hbHM6OkhlbnMsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQ
cm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFsczo6Q3Jvd3MsCi0gICAgICAgIChzaXpl
X3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFsczo6RmxhbWlu
Z29zLAotICAgIH07Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCA0OyArK2kpCi0gICAgICAg
IGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVl
c1tpXV0pCi0gICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6
OlR3b0xlZ2dlZEFuaW1hbHMpY29uc3RhbnRWYWx1ZXNbaV07Ci0KLSAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwotfQotCi0KLX0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCi0KLQotCi19IC8vIG5h
bWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+
Ci0KLQotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJj
b25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0j
aW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotCi1uYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9j
b2wuaD4KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJm
YWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAotQGVuZAotCi0KLSMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0
aW9uLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW1wb3J0ICJUZXN0
UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0Fs
dGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdt
ZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJ
bnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCi17
Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKLX0KLQot
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JD
b250cm9sbGVyKiljb250cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBp
ZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIpOwot
ICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAo
dm9pZClkZWFsbG9jCi17Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi1AZW5kCi0KLQotIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRl
cm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBv
cnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQot
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2wuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0K
LSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KLQotCi0KLQot
dHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sUGxhdGZvcm0pIHsKLSAgICBU
ZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbCwKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWMs
Ci0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1JT1MsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1N
YWNPUywKLX07Ci0KLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sUnVu
dGltZUZhcm1BbmltYWxzKSB7Ci0gICAgVGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzUGln
cywKLSAgICBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHNDb3dzLAotICAgIFRlc3RQcm90
b2NvbFJ1bnRpbWVGYXJtQW5pbWFsc0NhdHMsCi0gICAgVGVzdFByb3RvY29sUnVudGltZUZhcm1B
bmltYWxzSGVucywKLX07Ci0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2Nv
bFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzKSB7Ci0gICAgVGVzdFByb3RvY29sUnVudGltZVR3b0xl
Z2dlZEFuaW1hbHNEdWNrcywKLSAgICBUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFs
c0hlbnMsCi0gICAgVGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHNDcm93cywKLSAg
ICBUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFsc0ZsYW1pbmdvcywKLX07Ci0KLQot
Ci0KLQotCi0KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRp
YmlsaXR5T2JqZWN0cy5oPgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIK
LSNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCi0jaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPHd0
Zi9KU09OVmFsdWVzLmg+Ci0KLQotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJu
YWwuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlw
ZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBv
cnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJy
YXlDb252ZXJzaW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdGVtcGxhdGU8dHlw
ZW5hbWUgT2JqQ0VudW1UeXBlPgotT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xT
dHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0
cmluZyhUZXN0UHJvdG9jb2xQbGF0Zm9ybSB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsK
LSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOgotICAgICAgICByZXR1cm4gImFsbCJf
czsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzoKLSAgICAgICAgcmV0dXJu
ICJnZW5lcmljIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1JT1M6Ci0gICAgICAg
IHJldHVybiAiaW9zIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzoKLSAg
ICAgICAgcmV0dXJuICJtYWNvcyJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBP
cHRpb25hbDxUZXN0UHJvdG9jb2xQbGF0Zm9ybT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0
cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJhbGwiKQotICAgICAgICByZXR1cm4g
VGVzdFByb3RvY29sUGxhdGZvcm1BbGw7Ci0gICAgaWYgKHZhbHVlID09ICJnZW5lcmljIikKLSAg
ICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzsKLSAgICBpZiAodmFsdWUg
PT0gImlvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzsKLSAgICBp
ZiAodmFsdWUgPT0gIm1hY29zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3Jt
TWFjT1M7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotCi1pbmxpbmUgU3RyaW5nIHRv
UHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzIHZhbHVlKQotewot
ICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sUnVudGltZUZhcm1Bbmlt
YWxzUGlnczoKLSAgICAgICAgcmV0dXJuICJQaWdzIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29s
UnVudGltZUZhcm1BbmltYWxzQ293czoKLSAgICAgICAgcmV0dXJuICJDb3dzIl9zOwotICAgIGNh
c2UgVGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzQ2F0czoKLSAgICAgICAgcmV0dXJuICJD
YXRzIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzSGVuczoKLSAg
ICAgICAgcmV0dXJuICJIZW5zIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9w
dGlvbmFsPFRlc3RQcm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFscz4gZnJvbVByb3RvY29sU3RyaW5n
KGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJQaWdzIikKLSAgICAg
ICAgcmV0dXJuIFRlc3RQcm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFsc1BpZ3M7Ci0gICAgaWYgKHZh
bHVlID09ICJDb3dzIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFJ1bnRpbWVGYXJtQW5p
bWFsc0Nvd3M7Ci0gICAgaWYgKHZhbHVlID09ICJDYXRzIikKLSAgICAgICAgcmV0dXJuIFRlc3RQ
cm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFsc0NhdHM7Ci0gICAgaWYgKHZhbHVlID09ICJIZW5zIikK
LSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFsc0hlbnM7Ci0gICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5n
KFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzIHZhbHVlKQotewotICAgIHN3aXRj
aCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHNE
dWNrczoKLSAgICAgICAgcmV0dXJuICJEdWNrcyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFJ1
bnRpbWVUd29MZWdnZWRBbmltYWxzSGVuczoKLSAgICAgICAgcmV0dXJuICJIZW5zIl9zOwotICAg
IGNhc2UgVGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHNDcm93czoKLSAgICAgICAg
cmV0dXJuICJDcm93cyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRB
bmltYWxzRmxhbWluZ29zOgotICAgICAgICByZXR1cm4gIkZsYW1pbmdvcyJfczsKLSAgICB9Ci19
Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVn
Z2VkQW5pbWFscz4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0g
ICAgaWYgKHZhbHVlID09ICJEdWNrcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xSdW50
aW1lVHdvTGVnZ2VkQW5pbWFsc0R1Y2tzOwotICAgIGlmICh2YWx1ZSA9PSAiSGVucyIpCi0gICAg
ICAgIHJldHVybiBUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFsc0hlbnM7Ci0gICAg
aWYgKHZhbHVlID09ICJDcm93cyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xSdW50aW1l
VHdvTGVnZ2VkQW5pbWFsc0Nyb3dzOwotICAgIGlmICh2YWx1ZSA9PSAiRmxhbWluZ29zIikKLSAg
ICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzRmxhbWluZ29z
OwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBv
cnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQ
cm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7
Ci0KLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChSdW50aW1lRG9tYWlu
KQotCi0rICh2b2lkKV9wYXJzZUZhcm1BbmltYWxzOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9t
UGF5bG9hZDooaWQpcGF5bG9hZDsKLSsgKHZvaWQpX3BhcnNlVHdvTGVnZ2VkQW5pbWFsczooTlNO
dW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0KLUBlbmQKLQotQGlt
cGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoUnVudGltZURvbWFpbikK
LQotKyAodm9pZClfcGFyc2VGYXJtQW5pbWFsczooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBh
eWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBh
eWxvYWQsIFtOU1N0cmluZyBjbGFzc10pOwotICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbFJ1bnRp
bWVGYXJtQW5pbWFscz4gcmVzdWx0ID0gSW5zcGVjdG9yOjpmcm9tUHJvdG9jb2xTdHJpbmc8VGVz
dFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzPihwYXlsb2FkKTsKLSAgICBUSFJPV19FWENFUFRJ
T05fRk9SX0JBRF9FTlVNX1ZBTFVFKHJlc3VsdCwgQCJGYXJtQW5pbWFscyIpOwotICAgICpvdXRW
YWx1ZSA9IEAocmVzdWx0LnZhbHVlKCkpOwotfQotCi0rICh2b2lkKV9wYXJzZVR3b0xlZ2dlZEFu
aW1hbHM6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0g
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3Nd
KTsKLSAgICBPcHRpb25hbDxUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFscz4gcmVz
dWx0ID0gSW5zcGVjdG9yOjpmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sUnVudGltZVR3
b0xlZ2dlZEFuaW1hbHM+KHBheWxvYWQpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX0VO
VU1fVkFMVUUocmVzdWx0LCBAIlR3b0xlZ2dlZEFuaW1hbHMiKTsKLSAgICAqb3V0VmFsdWUgPSBA
KHJlc3VsdC52YWx1ZSgpKTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBl
cy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24t
ZW51bS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xK
U09OT2JqZWN0UHJpdmF0ZS5oPgotI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQg
PHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotCi0K
LSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5
cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC90eXBlLWRlY2xh
cmF0aW9uLW9iamVjdC10eXBlLmpzb24tcmVzdWx0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA0MmU2ZGEyYmJjOC4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlv
bi1vYmplY3QtdHlwZS5qc29uLXJlc3VsdAorKysgL2Rldi9udWxsCkBAIC0xLDI0NTUgKzAsMCBA
QAotIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0vLyBEYXRhYmFz
ZQotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiRGF0YWJhc2UiLCBudWxsKTsKLUlu
c3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJEYXRhYmFzZS5Nb3VzZUJ1dHRvbiIsIHtOb25l
OiAiTm9uZSIsIExlZnQ6ICJMZWZ0IiwgTWlkZGxlOiAiTWlkZGxlIiwgUmlnaHQ6ICJSaWdodCJ9
KTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJEYXRhYmFzZS5PcHRpb25hbFBhcmFt
ZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5Iiwge0xUUjogIkxUUiIsIFJUTDogIlJUTCJ9KTsKLUlu
c3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJEYXRhYmFzZS5QYXJhbWV0ZXJCdW5kbGVEaXJl
Y3Rpb25hbGl0eSIsIHtMVFI6ICJMVFIiLCBSVEw6ICJSVEwifSk7Ci1JbnNwZWN0b3JCYWNrZW5k
LmFjdGl2YXRlRG9tYWluKCJEYXRhYmFzZSIsIG51bGwpOwotIyMjIEVuZCBGaWxlOiBJbnNwZWN0
b3JCYWNrZW5kQ29tbWFuZHMuanMKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUt
ZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKLSNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0KLW5hbWVz
cGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1w
dWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3Bh
dGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNw
YXRjaGVyKTsgfQotICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNv
bnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KLXByaXZhdGU6Ci0gICAg
UmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwotfTsKLQotCi0K
LQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tl
bmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJz
LmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9i
amVjdC10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXR5
cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
Ci0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4K
LSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSNp
bmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jZW5kaWYKLQotbmFt
ZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMj
IEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3Mg
RnJvbnRlbmRSb3V0ZXI7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxl
OiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBl
LWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RGcm9u
dGVuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JG
cm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNw
YWNlIEluc3BlY3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZp
bGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sT2JqZWN0cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1k
ZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0K
LW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0K
LS8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgotbmFtZXNwYWNlIERhdGFiYXNlIHsKLWNsYXNzIEVy
cm9yOwotY2xhc3MgT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU7Ci1jbGFzcyBQYXJhbWV0ZXJCdW5k
bGU7Ci1jbGFzcyBPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzOwotY2xhc3MgRHVtbXlP
YmplY3Q7Ci1lbnVtIGNsYXNzIE1vdXNlQnV0dG9uOwotfSAvLyBEYXRhYmFzZQotCi1uYW1lc3Bh
Y2UgVGVzdCB7Ci1jbGFzcyBQYXJhbWV0ZXJCdW5kbGU7Ci19IC8vIFRlc3QKLS8vIEVuZCBvZiBm
b3J3YXJkIGRlY2xhcmF0aW9ucy4KLQotCi0vLyBUeXBlZGVmcy4KLW5hbWVzcGFjZSBEYXRhYmFz
ZSB7Ci10eXBlZGVmIEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6
OkVycm9yPiBFcnJvckxpc3Q7Ci19IC8vIERhdGFiYXNlCi0vLyBFbmQgb2YgdHlwZWRlZnMuCi0K
LW5hbWVzcGFjZSBUZXN0SGVscGVycyB7Ci0KLVN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShp
bnQgY29kZSk7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRFbnVtQ29uc3RhbnRW
YWx1ZShUIGVudW1WYWx1ZSkKLXsKLSAgICByZXR1cm4gZ2V0RW51bUNvbnN0YW50VmFsdWUoc3Rh
dGljX2Nhc3Q8aW50PihlbnVtVmFsdWUpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBl
cnMKLQotbmFtZXNwYWNlIERhdGFiYXNlIHsKLS8qIERhdGFiYXNlIGVycm9yLiAqLwotY2xhc3Mg
RXJyb3IgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7Ci1wdWJsaWM6Ci0gICAgZW51bSB7Ci0g
ICAgICAgIE5vRmllbGRzU2V0ID0gMCwKLSAgICAgICAgTWVzc2FnZVNldCA9IDEgPDwgMCwKLSAg
ICAgICAgQ29kZVNldCA9IDEgPDwgMSwKLSAgICAgICAgQWxsRmllbGRzU2V0ID0gKE1lc3NhZ2VT
ZXQgfCBDb2RlU2V0KQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+Ci0gICAgY2xh
c3MgQnVpbGRlciB7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4g
bV9yZXN1bHQ7Ci0KLSAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBT
VEVQPiYgY2FzdFN0YXRlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICpyZWludGVy
cHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgQnVpbGRlcihSZWY8LypFcnJvciovSlNPTjo6T2JqZWN0PiYmIG9iamVjdCkKLSAgICAg
ICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2lu
X25vbl9pbml0X3N0YXRlKTsKLSAgICAgICAgfQotICAgICAgICBmcmllbmQgY2xhc3MgRXJyb3I7
Ci0gICAgcHVibGljOgotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNZXNzYWdlU2V0PiYgc2V0
TWVzc2FnZShjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVCghKFNUQVRFICYgTWVzc2FnZVNldCksIHByb3BlcnR5X21lc3NhZ2VfYWxyZWFk
eV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibWVzc2FnZSJfcywgdmFs
dWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNZXNzYWdlU2V0PigpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvZGVTZXQ+JiBzZXRDb2RlKGludCB2YWx1
ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENvZGVT
ZXQpLCBwcm9wZXJ0eV9jb2RlX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXRJbnRlZ2VyKCJjb2RlIl9zLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PENvZGVTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBSZWY8RXJyb3I+IHJlbGVhc2UoKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNT
ZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6
ZW9mKEVycm9yKSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0KSwgY2Fubm90X2Nhc3QpOwotCi0gICAg
ICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uUmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5v
bk51bGwoKTsKLSAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gV1RGTW92ZSgqcmVpbnRlcnByZXRf
Y2FzdDxSZWY8RXJyb3I+Kj4oJmpzb25SZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVybiByZXN1
bHQ7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgLyoKLSAgICAgKiBTeW50aGV0aWMgY29uc3Ry
dWN0b3I6Ci0gICAgICogUmVmPEVycm9yPiByZXN1bHQgPSBFcnJvcjo6Y3JlYXRlKCkKLSAgICAg
KiAgICAgLnNldE1lc3NhZ2UoLi4uKQotICAgICAqICAgICAuc2V0Q29kZSguLi4pCi0gICAgICog
ICAgIC5yZWxlYXNlKCk7Ci0gICAgICovCi0gICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+
IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKSk7Ci0gICAgfQotfTsKLQotLyogRW51bWVyYXRlcyBkaWZmZXJl
bnQgbW91c2UgYnV0dG9ucyB0aGF0IGNhbiBiZSB1c2VkLiAqLwotZW51bSBjbGFzcyBNb3VzZUJ1
dHRvbiB7Ci0gICAgTm9uZSA9IDAsCi0gICAgTGVmdCA9IDEsCi0gICAgTWlkZGxlID0gMiwKLSAg
ICBSaWdodCA9IDMsCi19OyAvLyBlbnVtIGNsYXNzIE1vdXNlQnV0dG9uCi1jbGFzcyBPcHRpb25h
bFBhcmFtZXRlckJ1bmRsZSA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKLXB1YmxpYzoKLSAg
ICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdkaXJlY3Rpb25hbGl0eScgd2hpbGUgZ2Vu
ZXJhdGluZyBPcHRpb25hbFBhcmFtZXRlckJ1bmRsZS4KLSAgICBlbnVtIGNsYXNzIERpcmVjdGlv
bmFsaXR5IHsKLSAgICAgICAgTFRSID0gNCwKLSAgICAgICAgUlRMID0gNSwKLSAgICB9OyAvLyBl
bnVtIGNsYXNzIERpcmVjdGlvbmFsaXR5Ci0gICAgZW51bSB7Ci0gICAgICAgIE5vRmllbGRzU2V0
ID0gMCwKLSAgICAgICAgQWxsRmllbGRzU2V0ID0gMAotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTxp
bnQgU1RBVEU+Ci0gICAgY2xhc3MgQnVpbGRlciB7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVm
UHRyPEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7Ci0KLSAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+
IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMp
OwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcihSZWY8LypPcHRpb25hbFBhcmFtZXRlckJ1
bmRsZSovSlNPTjo6T2JqZWN0PiYmIG9iamVjdCkKLSAgICAgICAgICAgIDogbV9yZXN1bHQoV1RG
TW92ZShvYmplY3QpKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFU
RSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKLSAg
ICAgICAgfQotICAgICAgICBmcmllbmQgY2xhc3MgT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU7Ci0g
ICAgcHVibGljOgotCi0gICAgICAgIFJlZjxPcHRpb25hbFBhcmFtZXRlckJ1bmRsZT4gcmVsZWFz
ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZp
ZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VS
VChzaXplb2YoT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUpID09IHNpemVvZihKU09OOjpPYmplY3Qp
LCBjYW5ub3RfY2FzdCk7Ci0KLSAgICAgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25SZXN1
bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOwotICAgICAgICAgICAgYXV0byByZXN1bHQg
PSBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxPcHRpb25hbFBhcmFtZXRlckJ1bmRsZT4q
PigmanNvblJlc3VsdCkpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQot
ICAgIH07Ci0KLSAgICAvKgotICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKLSAgICAgKiBS
ZWY8T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU+IHJlc3VsdCA9IE9wdGlvbmFsUGFyYW1ldGVyQnVu
ZGxlOjpjcmVhdGUoKQotICAgICAqICAgICAucmVsZWFzZSgpOwotICAgICAqLwotICAgIHN0YXRp
YyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEJ1
aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOwotICAgIH0KLQotICAg
IHZvaWQgc2V0Q29sdW1uTmFtZXMoUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gdmFsdWUp
Ci0gICAgewotICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRBcnJheSgiY29sdW1uTmFtZXMi
X3MsIFdURk1vdmUodmFsdWUpKTsKLSAgICB9Ci0KLSAgICB2b2lkIHNldEJ1dHRvbnMoUmVmUHRy
PEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9u
Pj4gdmFsdWUpCi0gICAgewotICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRBcnJheSgiYnV0
dG9ucyJfcywgV1RGTW92ZSh2YWx1ZSkpOwotICAgIH0KLQotICAgIHZvaWQgc2V0RGlyZWN0aW9u
YWxpdHkoRGlyZWN0aW9uYWxpdHkgdmFsdWUpCi0gICAgewotICAgICAgICBKU09OOjpPYmplY3RC
YXNlOjpzZXRTdHJpbmcoImRpcmVjdGlvbmFsaXR5Il9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpU
ZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUodmFsdWUpKTsKLSAgICB9Ci0KLSAgICB2
b2lkIHNldE5vdGVzKGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgewotICAgICAgICBKU09OOjpP
YmplY3RCYXNlOjpzZXRTdHJpbmcoIm5vdGVzIl9zLCB2YWx1ZSk7Ci0gICAgfQotCi0gICAgdm9p
ZCBzZXRUaW1lc3RhbXAoZG91YmxlIHZhbHVlKQotICAgIHsKLSAgICAgICAgSlNPTjo6T2JqZWN0
QmFzZTo6c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIHZhbHVlKTsKLSAgICB9Ci0KLSAgICB2b2lk
IHNldFZhbHVlcyhSZWZQdHI8SlNPTjo6T2JqZWN0PiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEpT
T046Ok9iamVjdEJhc2U6OnNldE9iamVjdCgidmFsdWVzIl9zLCBXVEZNb3ZlKHZhbHVlKSk7Ci0g
ICAgfQotCi0gICAgdm9pZCBzZXRQYXlsb2FkKFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWUpCi0g
ICAgewotICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRWYWx1ZSgicGF5bG9hZCJfcywgV1RG
TW92ZSh2YWx1ZSkpOwotICAgIH0KLQotICAgIHZvaWQgc2V0RXJyb3IoUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gdmFsdWUpCi0gICAgewotICAgICAgICBKU09O
OjpPYmplY3RCYXNlOjpzZXRPYmplY3QoImVycm9yIl9zLCBXVEZNb3ZlKHZhbHVlKSk7Ci0gICAg
fQotCi0gICAgdm9pZCBzZXRFcnJvckxpc3QoUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpFcnJvckxpc3Q+IHZhbHVlKQotICAgIHsKLSAgICAgICAgSlNPTjo6T2JqZWN0QmFz
ZTo6c2V0QXJyYXkoImVycm9yTGlzdCJfcywgV1RGTW92ZSh2YWx1ZSkpOwotICAgIH0KLX07Ci0K
LWNsYXNzIFBhcmFtZXRlckJ1bmRsZSA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKLXB1Ymxp
YzoKLSAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdkaXJlY3Rpb25hbGl0eScgd2hp
bGUgZ2VuZXJhdGluZyBQYXJhbWV0ZXJCdW5kbGUuCi0gICAgZW51bSBjbGFzcyBEaXJlY3Rpb25h
bGl0eSB7Ci0gICAgICAgIExUUiA9IDQsCi0gICAgICAgIFJUTCA9IDUsCi0gICAgfTsgLy8gZW51
bSBjbGFzcyBEaXJlY3Rpb25hbGl0eQotICAgIGVudW0gewotICAgICAgICBOb0ZpZWxkc1NldCA9
IDAsCi0gICAgICAgIENvbHVtbk5hbWVzU2V0ID0gMSA8PCAwLAotICAgICAgICBCdXR0b25zU2V0
ID0gMSA8PCAxLAotICAgICAgICBEaXJlY3Rpb25hbGl0eVNldCA9IDEgPDwgMiwKLSAgICAgICAg
Tm90ZXNTZXQgPSAxIDw8IDMsCi0gICAgICAgIFRpbWVzdGFtcFNldCA9IDEgPDwgNCwKLSAgICAg
ICAgVmFsdWVzU2V0ID0gMSA8PCA1LAotICAgICAgICBQYXlsb2FkU2V0ID0gMSA8PCA2LAotICAg
ICAgICBFcnJvclNldCA9IDEgPDwgNywKLSAgICAgICAgRXJyb3JMaXN0U2V0ID0gMSA8PCA4LAot
ICAgICAgICBBbGxGaWVsZHNTZXQgPSAoQ29sdW1uTmFtZXNTZXQgfCBCdXR0b25zU2V0IHwgRGly
ZWN0aW9uYWxpdHlTZXQgfCBOb3Rlc1NldCB8IFRpbWVzdGFtcFNldCB8IFZhbHVlc1NldCB8IFBh
eWxvYWRTZXQgfCBFcnJvclNldCB8IEVycm9yTGlzdFNldCkKLSAgICB9OwotCi0gICAgdGVtcGxh
dGU8aW50IFNUQVRFPgotICAgIGNsYXNzIEJ1aWxkZXIgewotICAgIHByaXZhdGU6Ci0gICAgICAg
IFJlZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVzdWx0OwotCi0gICAgICAgIHRlbXBsYXRlPGludCBT
VEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0
aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXIoUmVmPC8qUGFyYW1ldGVyQnVuZGxl
Ki9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQotICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3Zl
KG9iamVjdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09
IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwotICAgICAg
ICB9Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBQYXJhbWV0ZXJCdW5kbGU7Ci0gICAgcHVibGljOgot
Ci0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2x1bW5OYW1lc1NldD4mIHNldENvbHVtbk5hbWVz
KFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29sdW1uTmFtZXNTZXQpLCBwcm9wZXJ0eV9j
b2x1bW5OYW1lc19hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXko
ImNvbHVtbk5hbWVzIl9zLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENv
bHVtbk5hbWVzU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IEJ1
dHRvbnNTZXQ+JiBzZXRCdXR0b25zKFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4+IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQnV0dG9uc1NldCksIHByb3BlcnR5X2J1dHRv
bnNfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJidXR0b25z
Il9zLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEJ1dHRvbnNTZXQ+KCk7
Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRGlyZWN0aW9uYWxpdHlTZXQ+
JiBzZXREaXJlY3Rpb25hbGl0eShEaXJlY3Rpb25hbGl0eSB2YWx1ZSkKLSAgICAgICAgewotICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIERpcmVjdGlvbmFsaXR5U2V0KSwgcHJv
cGVydHlfZGlyZWN0aW9uYWxpdHlfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQt
PnNldFN0cmluZygiZGlyZWN0aW9uYWxpdHkiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RI
ZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSh2YWx1ZSkpOwotICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxEaXJlY3Rpb25hbGl0eVNldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBOb3Rlc1NldD4mIHNldE5vdGVzKGNvbnN0IFN0cmluZyYgdmFsdWUpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBOb3Rlc1NldCks
IHByb3BlcnR5X25vdGVzX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRT
dHJpbmcoIm5vdGVzIl9zLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE5v
dGVzU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IFRpbWVzdGFt
cFNldD4mIHNldFRpbWVzdGFtcChkb3VibGUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUaW1lc3RhbXBTZXQpLCBwcm9wZXJ0eV90aW1lc3Rh
bXBfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldERvdWJsZSgidGltZXN0
YW1wIl9zLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFRpbWVzdGFtcFNl
dD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBWYWx1ZXNTZXQ+JiBz
ZXRWYWx1ZXMoUmVmUHRyPEpTT046Ok9iamVjdD4gdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBWYWx1ZXNTZXQpLCBwcm9wZXJ0eV92YWx1ZXNf
YWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdCgidmFsdWVzIl9z
LCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFZhbHVlc1NldD4oKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBQYXlsb2FkU2V0PiYgc2V0UGF5bG9h
ZChSZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVCghKFNUQVRFICYgUGF5bG9hZFNldCksIHByb3BlcnR5X3BheWxvYWRfYWxyZWFk
eV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCB2YWx1
ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFBheWxvYWRTZXQ+KCk7Ci0gICAgICAg
IH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRXJyb3JTZXQ+JiBzZXRFcnJvcihSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiB2YWx1ZSkKLSAgICAgICAgewot
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEVycm9yU2V0KSwgcHJvcGVydHlf
ZXJyb3JfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdCgiZXJy
b3IiX3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8RXJyb3JTZXQ+KCk7
Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRXJyb3JMaXN0U2V0PiYgc2V0
RXJyb3JMaXN0KFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3JMaXN0
PiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IEVycm9yTGlzdFNldCksIHByb3BlcnR5X2Vycm9yTGlzdF9hbHJlYWR5X3NldCk7Ci0gICAgICAg
ICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoImVycm9yTGlzdCJfcywgdmFsdWUpOwotICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxFcnJvckxpc3RTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBSZWY8UGFyYW1ldGVyQnVuZGxlPiByZWxlYXNlKCkKLSAgICAgICAgewotICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5
KTsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihQYXJhbWV0ZXJCdW5kbGUpID09
IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7Ci0KLSAgICAgICAgICAgIFJlZjxK
U09OOjpPYmplY3Q+IGpzb25SZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOwotICAg
ICAgICAgICAgYXV0byByZXN1bHQgPSBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxQYXJh
bWV0ZXJCdW5kbGU+Kj4oJmpzb25SZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgLyoKLSAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0
b3I6Ci0gICAgICogUmVmPFBhcmFtZXRlckJ1bmRsZT4gcmVzdWx0ID0gUGFyYW1ldGVyQnVuZGxl
OjpjcmVhdGUoKQotICAgICAqICAgICAuc2V0Q29sdW1uTmFtZXMoLi4uKQotICAgICAqICAgICAu
c2V0QnV0dG9ucyguLi4pCi0gICAgICogICAgIC5zZXREaXJlY3Rpb25hbGl0eSguLi4pCi0gICAg
ICogICAgIC5zZXROb3RlcyguLi4pCi0gICAgICogICAgIC5zZXRUaW1lc3RhbXAoLi4uKQotICAg
ICAqICAgICAuc2V0VmFsdWVzKC4uLikKLSAgICAgKiAgICAgLnNldFBheWxvYWQoLi4uKQotICAg
ICAqICAgICAuc2V0RXJyb3IoLi4uKQotICAgICAqICAgICAuc2V0RXJyb3JMaXN0KC4uLikKLSAg
ICAgKiAgICAgLnJlbGVhc2UoKTsKLSAgICAgKi8KLSAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxk
c1NldD4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0
PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKLSAgICB9Ci19OwotCi0vKiBDb25mbGljdGVkIG5h
bWVzIG1heSBjYXVzZSBnZW5lcmF0ZWQgZ2V0dGVycy9zZXR0ZXJzIHRvIGNsYXNoIHdpdGggYnVp
bHQtaW4gSW5zcGVjdG9yT2JqZWN0IG1ldGhvZHMuICovCi1jbGFzcyBPYmplY3RXaXRoUHJvcGVy
dHlOYW1lQ29uZmxpY3RzIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewotcHVibGljOgotICAg
IGVudW0gewotICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCi0gICAgICAgIEludGVnZXJTZXQgPSAx
IDw8IDAsCi0gICAgICAgIEFycmF5U2V0ID0gMSA8PCAxLAotICAgICAgICBTdHJpbmdTZXQgPSAx
IDw8IDIsCi0gICAgICAgIFZhbHVlU2V0ID0gMSA8PCAzLAotICAgICAgICBPYmplY3RTZXQgPSAx
IDw8IDQsCi0gICAgICAgIEFsbEZpZWxkc1NldCA9IChJbnRlZ2VyU2V0IHwgQXJyYXlTZXQgfCBT
dHJpbmdTZXQgfCBWYWx1ZVNldCB8IE9iamVjdFNldCkKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8
aW50IFNUQVRFPgotICAgIGNsYXNzIEJ1aWxkZXIgewotICAgIHByaXZhdGU6Ci0gICAgICAgIFJl
ZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVzdWx0OwotCi0gICAgICAgIHRlbXBsYXRlPGludCBTVEVQ
PiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlz
KTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXIoUmVmPC8qT2JqZWN0V2l0aFByb3BlcnR5
TmFtZUNvbmZsaWN0cyovSlNPTjo6T2JqZWN0PiYmIG9iamVjdCkKLSAgICAgICAgICAgIDogbV9y
ZXN1bHQoV1RGTW92ZShvYmplY3QpKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FT
U0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0
YXRlKTsKLSAgICAgICAgfQotICAgICAgICBmcmllbmQgY2xhc3MgT2JqZWN0V2l0aFByb3BlcnR5
TmFtZUNvbmZsaWN0czsKLSAgICBwdWJsaWM6Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IElu
dGVnZXJTZXQ+JiBzZXRJbnRlZ2VyKGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBJbnRlZ2VyU2V0KSwgcHJvcGVydHlf
aW50ZWdlcl9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJp
bnRlZ2VyIl9zLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEludGVnZXJT
ZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQXJyYXlTZXQ+JiBz
ZXRBcnJheShjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVCghKFNUQVRFICYgQXJyYXlTZXQpLCBwcm9wZXJ0eV9hcnJheV9hbHJlYWR5X3Nl
dCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJhcnJheSJfcywgdmFsdWUpOwot
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxBcnJheVNldD4oKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTdHJpbmdTZXQ+JiBzZXRTdHJpbmcoY29uc3QgU3RyaW5n
JiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IFN0cmluZ1NldCksIHByb3BlcnR5X3N0cmluZ19hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0U3RyaW5nKCJzdHJpbmciX3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVy
biBjYXN0U3RhdGU8U3RyaW5nU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcjxT
VEFURSB8IFZhbHVlU2V0PiYgc2V0VmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICAgICAg
ewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFZhbHVlU2V0KSwgcHJvcGVy
dHlfdmFsdWVfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygi
dmFsdWUiX3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VmFsdWVTZXQ+
KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgT2JqZWN0U2V0PiYgc2V0
T2JqZWN0KGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBPYmplY3RTZXQpLCBwcm9wZXJ0eV9vYmplY3RfYWxyZWFkeV9z
ZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygib2JqZWN0Il9zLCB2YWx1ZSk7
Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE9iamVjdFNldD4oKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIFJlZjxPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzPiByZWxlYXNlKCkK
LSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRz
U2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNp
emVvZihPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzKSA9PSBzaXplb2YoSlNPTjo6T2Jq
ZWN0KSwgY2Fubm90X2Nhc3QpOwotCi0gICAgICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29u
UmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKLSAgICAgICAgICAgIGF1dG8gcmVz
dWx0ID0gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8T2JqZWN0V2l0aFByb3BlcnR5TmFt
ZUNvbmZsaWN0cz4qPigmanNvblJlc3VsdCkpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
LSAgICAgICAgfQotICAgIH07Ci0KLSAgICAvKgotICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3Rv
cjoKLSAgICAgKiBSZWY8T2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cz4gcmVzdWx0ID0g
T2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0czo6Y3JlYXRlKCkKLSAgICAgKiAgICAgLnNl
dEludGVnZXIoLi4uKQotICAgICAqICAgICAuc2V0QXJyYXkoLi4uKQotICAgICAqICAgICAuc2V0
U3RyaW5nKC4uLikKLSAgICAgKiAgICAgLnNldFZhbHVlKC4uLikKLSAgICAgKiAgICAgLnNldE9i
amVjdCguLi4pCi0gICAgICogICAgIC5yZWxlYXNlKCk7Ci0gICAgICovCi0gICAgc3RhdGljIEJ1
aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gQnVpbGRl
cjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7Ci0gICAgfQotfTsKLQotfSAv
LyBEYXRhYmFzZQotCi1uYW1lc3BhY2UgVGVzdCB7Ci1jbGFzcyBQYXJhbWV0ZXJCdW5kbGUgOiBw
dWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7Ci1wdWJsaWM6Ci0gICAgLy8gTmFtZWQgYWZ0ZXIgcHJv
cGVydHkgbmFtZSAnZGlyZWN0aW9uYWxpdHknIHdoaWxlIGdlbmVyYXRpbmcgUGFyYW1ldGVyQnVu
ZGxlLgotICAgIGVudW0gY2xhc3MgRGlyZWN0aW9uYWxpdHkgewotICAgICAgICBMVFIgPSA0LAot
ICAgICAgICBSVEwgPSA1LAotICAgIH07IC8vIGVudW0gY2xhc3MgRGlyZWN0aW9uYWxpdHkKLSAg
ICBlbnVtIHsKLSAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAotICAgICAgICBEaXJlY3Rpb25hbGl0
eVNldCA9IDEgPDwgMCwKLSAgICAgICAgQnV0dG9uc1NldCA9IDEgPDwgMSwKLSAgICAgICAgQ29s
dW1uTmFtZXNTZXQgPSAxIDw8IDIsCi0gICAgICAgIE5vdGVzU2V0ID0gMSA8PCAzLAotICAgICAg
ICBUaW1lc3RhbXBTZXQgPSAxIDw8IDQsCi0gICAgICAgIFZhbHVlc1NldCA9IDEgPDwgNSwKLSAg
ICAgICAgUGF5bG9hZFNldCA9IDEgPDwgNiwKLSAgICAgICAgRXJyb3JTZXQgPSAxIDw8IDcsCi0g
ICAgICAgIEFsbEZpZWxkc1NldCA9IChEaXJlY3Rpb25hbGl0eVNldCB8IEJ1dHRvbnNTZXQgfCBD
b2x1bW5OYW1lc1NldCB8IE5vdGVzU2V0IHwgVGltZXN0YW1wU2V0IHwgVmFsdWVzU2V0IHwgUGF5
bG9hZFNldCB8IEVycm9yU2V0KQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+Ci0g
ICAgY2xhc3MgQnVpbGRlciB7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPEpTT046Ok9i
amVjdD4gbV9yZXN1bHQ7Ci0KLSAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RB
VEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICpy
ZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwotICAgICAgICB9
Ci0KLSAgICAgICAgQnVpbGRlcihSZWY8LypQYXJhbWV0ZXJCdW5kbGUqL0pTT046Ok9iamVjdD4m
JiBvYmplY3QpCi0gICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKLSAgICAg
ICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1
aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZnJp
ZW5kIGNsYXNzIFBhcmFtZXRlckJ1bmRsZTsKLSAgICBwdWJsaWM6Ci0KLSAgICAgICAgQnVpbGRl
cjxTVEFURSB8IERpcmVjdGlvbmFsaXR5U2V0PiYgc2V0RGlyZWN0aW9uYWxpdHkoRGlyZWN0aW9u
YWxpdHkgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBEaXJlY3Rpb25hbGl0eVNldCksIHByb3BlcnR5X2RpcmVjdGlvbmFsaXR5X2FscmVhZHlf
c2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImRpcmVjdGlvbmFsaXR5Il9z
LCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUo
dmFsdWUpKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8RGlyZWN0aW9uYWxpdHlTZXQ+
KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQnV0dG9uc1NldD4mIHNl
dEJ1dHRvbnMoUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6Ok1vdXNlQnV0dG9uPj4gdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKCEoU1RBVEUgJiBCdXR0b25zU2V0KSwgcHJvcGVydHlfYnV0dG9uc19hbHJlYWR5X3Nl
dCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoImJ1dHRvbnMiX3MsIHZhbHVlKTsK
LSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8QnV0dG9uc1NldD4oKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2x1bW5OYW1lc1NldD4mIHNldENvbHVtbk5hbWVz
KFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29sdW1uTmFtZXNTZXQpLCBwcm9wZXJ0eV9j
b2x1bW5OYW1lc19hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXko
ImNvbHVtbk5hbWVzIl9zLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENv
bHVtbk5hbWVzU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IE5v
dGVzU2V0PiYgc2V0Tm90ZXMoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICAgICAgewotICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE5vdGVzU2V0KSwgcHJvcGVydHlfbm90ZXNf
YWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibm90ZXMiX3Ms
IHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Tm90ZXNTZXQ+KCk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVGltZXN0YW1wU2V0PiYgc2V0VGltZXN0
YW1wKGRvdWJsZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
IShTVEFURSAmIFRpbWVzdGFtcFNldCksIHByb3BlcnR5X3RpbWVzdGFtcF9hbHJlYWR5X3NldCk7
Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIHZhbHVlKTsK
LSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VGltZXN0YW1wU2V0PigpOwotICAgICAgICB9
Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IFZhbHVlc1NldD4mIHNldFZhbHVlcyhSZWZQdHI8
SlNPTjo6T2JqZWN0PiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIFZhbHVlc1NldCksIHByb3BlcnR5X3ZhbHVlc19hbHJlYWR5X3NldCk7Ci0g
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIHZhbHVlKTsKLSAgICAg
ICAgICAgIHJldHVybiBjYXN0U3RhdGU8VmFsdWVzU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IFBheWxvYWRTZXQ+JiBzZXRQYXlsb2FkKFJlZlB0cjxKU09OOjpW
YWx1ZT4gdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBQYXlsb2FkU2V0KSwgcHJvcGVydHlfcGF5bG9hZF9hbHJlYWR5X3NldCk7Ci0gICAgICAg
ICAgICBtX3Jlc3VsdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIHZhbHVlKTsKLSAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8UGF5bG9hZFNldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBFcnJvclNldD4mIHNldEVycm9yKFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEYXRhYmFzZTo6RXJyb3I+IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVCghKFNUQVRFICYgRXJyb3JTZXQpLCBwcm9wZXJ0eV9lcnJvcl9hbHJlYWR5X3Nl
dCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJlcnJvciJfcywgdmFsdWUpOwot
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxFcnJvclNldD4oKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIFJlZjxQYXJhbWV0ZXJCdW5kbGU+IHJlbGVhc2UoKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3Rf
cmVhZHkpOwotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFBhcmFtZXRlckJ1bmRs
ZSkgPT0gc2l6ZW9mKEpTT046Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsKLQotICAgICAgICAgICAg
UmVmPEpTT046Ok9iamVjdD4ganNvblJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7
Ci0gICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVm
PFBhcmFtZXRlckJ1bmRsZT4qPigmanNvblJlc3VsdCkpOwotICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICAvKgotICAgICAqIFN5bnRoZXRpYyBjb25z
dHJ1Y3RvcjoKLSAgICAgKiBSZWY8UGFyYW1ldGVyQnVuZGxlPiByZXN1bHQgPSBQYXJhbWV0ZXJC
dW5kbGU6OmNyZWF0ZSgpCi0gICAgICogICAgIC5zZXREaXJlY3Rpb25hbGl0eSguLi4pCi0gICAg
ICogICAgIC5zZXRCdXR0b25zKC4uLikKLSAgICAgKiAgICAgLnNldENvbHVtbk5hbWVzKC4uLikK
LSAgICAgKiAgICAgLnNldE5vdGVzKC4uLikKLSAgICAgKiAgICAgLnNldFRpbWVzdGFtcCguLi4p
Ci0gICAgICogICAgIC5zZXRWYWx1ZXMoLi4uKQotICAgICAqICAgICAuc2V0UGF5bG9hZCguLi4p
Ci0gICAgICogICAgIC5zZXRFcnJvciguLi4pCi0gICAgICogICAgIC5yZWxlYXNlKCk7Ci0gICAg
ICovCi0gICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCi0gICAgewotICAg
ICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7
Ci0gICAgfQotfTsKLQotfSAvLyBUZXN0Ci0KLQotCi1uYW1lc3BhY2UgVGVzdEhlbHBlcnMgewot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBQcm90b2NvbEVudW1UeXBlPgotT3B0aW9uYWw8UHJvdG9jb2xF
bnVtVHlwZT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYpOwotCi0vLyBF
bnVtcyBpbiB0aGUgJ0RhdGFiYXNlJyBEb21haW4KLXRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4gcGFyc2VFbnVtVmFsdWVGcm9t
U3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4oY29uc3Qg
U3RyaW5nJik7Ci10ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5PiBwYXJzZUVudW1W
YWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok9wdGlvbmFsUGFy
YW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4oY29uc3QgU3RyaW5nJik7Ci10ZW1wbGF0ZTw+
Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UGFyYW1ldGVyQnVuZGxl
OjpEaXJlY3Rpb25hbGl0eT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5Pihjb25zdCBT
dHJpbmcmKTsKLQotLy8gRW51bXMgaW4gdGhlICdUZXN0JyBEb21haW4KLXRlbXBsYXRlPD4KLU9w
dGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0
aW9uYWxpdHk+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpU
ZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5Pihjb25zdCBTdHJpbmcmKTsKLQot
fSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQot
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLW5hbWVzcGFjZSBXVEYgewotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Ci0KLS8vIEhhc2ggZGVjbGFyYXRpb25zIGlu
IHRoZSAnRGF0YWJhc2UnIERvbWFpbgotdGVtcGxhdGU8Pgotc3RydWN0IERlZmF1bHRIYXNoPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4gewotICAgIHR5cGVkZWYg
SW50SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b24+IEhhc2g7
Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXVEYKLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2Jq
ZWN0cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUu
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotCi0jaW5jbHVk
ZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1l
c3BhY2UgSW5zcGVjdG9yIHsKLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotbmFtZXNwYWNlIFRl
c3RIZWxwZXJzIHsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFs
dWVzW10gPSB7Ci0gICAgIk5vbmUiLAotICAgICJMZWZ0IiwKLSAgICAiTWlkZGxlIiwKLSAgICAi
UmlnaHQiLAotICAgICJMVFIiLAotICAgICJSVEwiLAotfTsKLQotU3RyaW5nIGdldEVudW1Db25z
dGFudFZhbHVlKGludCBjb2RlKSB7Ci0gICAgcmV0dXJuIGVudW1fY29uc3RhbnRfdmFsdWVzW2Nv
ZGVdOwotfQotCi0vLyBFbnVtcyBpbiB0aGUgJ0RhdGFiYXNlJyBEb21haW4KLXRlbXBsYXRlPD4K
LU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4gcGFy
c2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3Vz
ZUJ1dHRvbj4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKLXsKLSAgICBzdGF0aWMgY29u
c3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7Ci0gICAgICAgIChzaXplX3QpSW5zcGVjdG9y
OjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uOjpOb25lLAotICAgICAgICAoc2l6ZV90
KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbjo6TGVmdCwKLSAgICAg
ICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b246Ok1p
ZGRsZSwKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6TW91
c2VCdXR0b246OlJpZ2h0LAotICAgIH07Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCA0OyAr
K2kpCi0gICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tj
b25zdGFudFZhbHVlc1tpXV0pCi0gICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbiljb25zdGFudFZhbHVlc1tpXTsKLQotICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7Ci19Ci0KLXRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+
IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6
T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5Pihjb25zdCBTdHJpbmcmIHBy
b3RvY29sU3RyaW5nKQotewotICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3RhbnRWYWx1ZXNb
XSA9IHsKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6T3B0
aW9uYWxQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5OjpMVFIsCi0gICAgICAgIChzaXpl
X3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok9wdGlvbmFsUGFyYW1ldGVyQnVuZGxl
OjpEaXJlY3Rpb25hbGl0eTo6UlRMLAotICAgIH07Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCAyOyArK2kpCi0gICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3Zh
bHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCi0gICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRhdGFiYXNlOjpPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxp
dHkpY29uc3RhbnRWYWx1ZXNbaV07Ci0KLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi10
ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UGFyYW1l
dGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5
Pihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQotewotICAgIHN0YXRpYyBjb25zdCBzaXpl
X3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEYXRhYmFzZTo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eTo6TFRSLAotICAg
ICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQYXJhbWV0ZXJCdW5k
bGU6OkRpcmVjdGlvbmFsaXR5OjpSVEwsCi0gICAgfTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IDI7ICsraSkKLSAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRf
dmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9y
OjpQcm90b2NvbDo6RGF0YWJhc2U6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHkpY29u
c3RhbnRWYWx1ZXNbaV07Ci0KLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi0KLS8vIEVu
dW1zIGluIHRoZSAnVGVzdCcgRG9tYWluCi10ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6
OlByb3RvY29sOjpUZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5PiBwYXJzZUVu
dW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UGFyYW1ldGVyQnVu
ZGxlOjpEaXJlY3Rpb25hbGl0eT4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKLXsKLSAg
ICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7Ci0gICAgICAgIChzaXpl
X3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25h
bGl0eTo6TFRSLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlBh
cmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk6OlJUTCwKLSAgICB9OwotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgMjsgKytpKQotICAgICAgICBpZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51
bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNbaV1dKQotICAgICAgICAgICAgcmV0dXJu
IChJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFs
aXR5KWNvbnN0YW50VmFsdWVzW2ldOwotCi0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQot
Ci19IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9j
b2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sT2JqZWN0cy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNw
YXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJh
dGlvbi1vYmplY3QtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLQotCi1uYW1l
c3BhY2UgSW5zcGVjdG9yIHsKLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgot
I2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0
b3IgewotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24uaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUt
ZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+Ci0K
LV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0
UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sQ29uZmlndXJhdGlvbi5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5
cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgi
Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0
ZURpc3BhdGNoYWJsZUFnZW50Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJs
ZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0
b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCi17Ci0gICAg
QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKLX0KLQotLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9s
bGVyKiljb250cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNl
bGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIpOwotICAgIF9j
b250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClk
ZWFsbG9jCi17Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFs
LmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8
d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlw
ZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotCi0j
aW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+Ci0KLQotQGNsYXNz
IFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I7Ci1AY2xhc3MgVGVzdFByb3RvY29sRGF0YWJhc2VP
cHRpb25hbFBhcmFtZXRlckJ1bmRsZTsKLUBjbGFzcyBUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFt
ZXRlckJ1bmRsZTsKLUBjbGFzcyBUZXN0UHJvdG9jb2xEYXRhYmFzZU9iamVjdFdpdGhQcm9wZXJ0
eU5hbWVDb25mbGljdHM7Ci1AY2xhc3MgVGVzdFByb3RvY29sRGF0YWJhc2VEdW1teU9iamVjdDsK
LUBjbGFzcyBUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlOwotCi10eXBlZGVmIE5TX0VO
VU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xQbGF0Zm9ybSkgewotICAgIFRlc3RQcm90b2NvbFBs
YXRmb3JtQWxsLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYywKLSAgICBUZXN0UHJv
dG9jb2xQbGF0Zm9ybUlPUywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TLAotfTsKLQot
Ci10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0
dG9uKSB7Ci0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VNb3VzZUJ1dHRvbk5vbmUsCi0gICAgVGVz
dFByb3RvY29sRGF0YWJhc2VNb3VzZUJ1dHRvbkxlZnQsCi0gICAgVGVzdFByb3RvY29sRGF0YWJh
c2VNb3VzZUJ1dHRvbk1pZGRsZSwKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9u
UmlnaHQsCi19OwotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xEYXRh
YmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHkpIHsKLSAgICBUZXN0UHJv
dG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHlMVFIsCi0g
ICAgVGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFs
aXR5UlRMLAotfTsKLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGF0
YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSkgewotICAgIFRlc3RQcm90b2NvbERh
dGFiYXNlUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHlMVFIsCi0gICAgVGVzdFByb3RvY29s
RGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eVJUTCwKLX07Ci0KLXR5cGVkZWYg
TlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rp
b25hbGl0eSkgewotICAgIFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25h
bGl0eUxUUiwKLSAgICBUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxp
dHlSVEwsCi19OwotCi0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQot
QGludGVyZmFjZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIDogUldJUHJvdG9jb2xKU09OT2Jq
ZWN0Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJp
bmcgKiwgaWQ+ICopcGF5bG9hZDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2Jq
ZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OwotLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlIGNvZGU6KGludCljb2RlOwotLyog
cmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICptZXNzYWdl
OwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgaW50IGNvZGU7
Ci1AZW5kCi0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVy
ZmFjZSBUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlIDogUldJUHJv
dG9jb2xKU09OT2JqZWN0Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rp
b25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0
aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OwotLyog
b3B0aW9uYWwgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TQXJyYXkvKjxOU1N0cmlu
Zz4qLyAqY29sdW1uTmFtZXM7Ci0vKiBvcHRpb25hbCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywg
Y29weSkgTlNBcnJheS8qPE5TU3RyaW5nPiovICpidXR0b25zOwotLyogb3B0aW9uYWwgKi8gQHBy
b3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgVGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBh
cmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5IGRpcmVjdGlvbmFsaXR5OwotLyogb3B0aW9uYWwg
Ki8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICpub3RlczsKLS8qIG9wdGlv
bmFsICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGRvdWJsZSB0aW1lc3RhbXA7Ci0v
KiBvcHRpb25hbCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluKSBSV0lQcm90b2NvbEpT
T05PYmplY3QgKnZhbHVlczsKLS8qIG9wdGlvbmFsICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBy
ZXRhaW4pIFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5bG9hZDsKLS8qIG9wdGlvbmFsICovIEBw
cm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKmVy
cm9yOwotLyogb3B0aW9uYWwgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TQXJyYXkv
KjxUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yPiovICplcnJvckxpc3Q7Ci1AZW5kCi0KLV9fYXR0
cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9j
b2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZSA6IFJXSVByb3RvY29sSlNPTk9iamVjdAotLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAq
KXBheWxvYWQ7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJv
dG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENv
bHVtbk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcyBidXR0b25zOihO
U0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilidXR0b25zIGRpcmVjdGlvbmFsaXR5OihUZXN0UHJvdG9j
b2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5KWRpcmVjdGlvbmFsaXR5IG5v
dGVzOihOU1N0cmluZyAqKW5vdGVzIHRpbWVzdGFtcDooZG91YmxlKXRpbWVzdGFtcCB2YWx1ZXM6
KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcyBwYXlsb2FkOihSV0lQcm90b2NvbEpTT05P
YmplY3QgKilwYXlsb2FkIGVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICopZXJyb3Ig
ZXJyb3JMaXN0OihOU0FycmF5Lyo8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4qLyAqKWVycm9y
TGlzdDsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU0FycmF5
Lyo8TlNTdHJpbmc+Ki8gKmNvbHVtbk5hbWVzOwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChu
b25hdG9taWMsIGNvcHkpIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqYnV0dG9uczsKLS8qIHJlcXVp
cmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIFRlc3RQcm90b2NvbERhdGFiYXNl
UGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHkgZGlyZWN0aW9uYWxpdHk7Ci0vKiByZXF1aXJl
ZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKm5vdGVzOwotLyogcmVx
dWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgZG91YmxlIHRpbWVzdGFtcDsK
LS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIFJXSVByb3RvY29s
SlNPTk9iamVjdCAqdmFsdWVzOwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMs
IHJldGFpbikgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkOwotLyogcmVxdWlyZWQgKi8g
QHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAq
ZXJyb3I7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNBcnJh
eS8qPFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I+Ki8gKmVycm9yTGlzdDsKLUBlbmQKLQotX19h
dHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90
b2NvbERhdGFiYXNlT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cyA6IFJXSVByb3RvY29s
SlNPTk9iamVjdAotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5
PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQ7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90
b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKLS0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aEludGVnZXI6KE5TU3RyaW5nICopaW50ZWdlciBhcnJheTooTlNTdHJp
bmcgKilhcnJheSBzdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nIHZhbHVlOihOU1N0cmluZyAqKXZh
bHVlIG9iamVjdDooTlNTdHJpbmcgKilvYmplY3Q7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkg
KG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKmludGVnZXI7Ci0vKiByZXF1aXJlZCAqLyBAcHJv
cGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKmFycmF5OwotLyogcmVxdWlyZWQgKi8g
QHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICpzdHJpbmc7Ci0vKiByZXF1aXJl
ZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKnZhbHVlOwotLyogcmVx
dWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICpvYmplY3Q7Ci1A
ZW5kCi0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFj
ZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUR1bW15T2JqZWN0IDogUldJUHJvdG9jb2xKU09OT2JqZWN0
Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcg
KiwgaWQ+ICopcGF5bG9hZDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0
OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OwotQGVuZAotCi1fX2F0dHJpYnV0
ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sVGVz
dFBhcmFtZXRlckJ1bmRsZSA6IFJXSVByb3RvY29sSlNPTk9iamVjdAotLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQ7
Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09O
T2JqZWN0ICopanNvbk9iamVjdDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aERpcmVjdGlvbmFs
aXR5OihUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHkpZGlyZWN0
aW9uYWxpdHkgYnV0dG9uczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopYnV0dG9ucyBjb2x1bW5O
YW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMgbm90ZXM6KE5TU3RyaW5n
ICopbm90ZXMgdGltZXN0YW1wOihkb3VibGUpdGltZXN0YW1wIHZhbHVlczooUldJUHJvdG9jb2xK
U09OT2JqZWN0ICopdmFsdWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxv
YWQgZXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKillcnJvcjsKLS8qIHJlcXVpcmVk
ICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0
ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSBkaXJlY3Rpb25hbGl0eTsKLS8qIHJlcXVpcmVkICovIEBw
cm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmJ1dHRvbnM7
Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNBcnJheS8qPE5T
U3RyaW5nPiovICpjb2x1bW5OYW1lczsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRv
bWljLCBjb3B5KSBOU1N0cmluZyAqbm90ZXM7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5v
bmF0b21pYywgYXNzaWduKSBkb3VibGUgdGltZXN0YW1wOwotLyogcmVxdWlyZWQgKi8gQHByb3Bl
cnR5IChub25hdG9taWMsIHJldGFpbikgUldJUHJvdG9jb2xKU09OT2JqZWN0ICp2YWx1ZXM7Ci0v
KiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluKSBSV0lQcm90b2NvbEpT
T05PYmplY3QgKnBheWxvYWQ7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywg
cmV0YWluKSBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICplcnJvcjsKLUBlbmQKLQotCi0KLQot
Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9i
amVjdHMuaD4KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBv
cnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0
Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPHd0Zi9KU09O
VmFsdWVzLmg+Ci0KLQotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAot
Ci0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAi
VGVzdFByb3RvY29sLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNv
bnZlcnNpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBPYmpDRW51bVR5cGU+Ci1PcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmlu
Zyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5n
KFRlc3RQcm90b2NvbFBsYXRmb3JtIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAg
IGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1BbGw6Ci0gICAgICAgIHJldHVybiAiYWxsIl9zOwot
ICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOgotICAgICAgICByZXR1cm4gImdl
bmVyaWMiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzoKLSAgICAgICAgcmV0
dXJuICJpb3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOgotICAgICAg
ICByZXR1cm4gIm1hY29zIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlv
bmFsPFRlc3RQcm90b2NvbFBsYXRmb3JtPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5n
JiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gImFsbCIpCi0gICAgICAgIHJldHVybiBUZXN0
UHJvdG9jb2xQbGF0Zm9ybUFsbDsKLSAgICBpZiAodmFsdWUgPT0gImdlbmVyaWMiKQotICAgICAg
ICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOwotICAgIGlmICh2YWx1ZSA9PSAi
aW9zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOwotICAgIGlmICh2
YWx1ZSA9PSAibWFjb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1NYWNP
UzsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi0KLWlubGluZSBTdHJpbmcgdG9Qcm90
b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9uIHZhbHVlKQotewotICAg
IHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VNb3VzZUJ1dHRv
bk5vbmU6Ci0gICAgICAgIHJldHVybiAiTm9uZSJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERh
dGFiYXNlTW91c2VCdXR0b25MZWZ0OgotICAgICAgICByZXR1cm4gIkxlZnQiX3M7Ci0gICAgY2Fz
ZSBUZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9uTWlkZGxlOgotICAgICAgICByZXR1cm4g
Ik1pZGRsZSJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VCdXR0b25SaWdo
dDoKLSAgICAgICAgcmV0dXJuICJSaWdodCJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlu
bGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9uPiBmcm9tUHJvdG9j
b2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gIk5vbmUi
KQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VNb3VzZUJ1dHRvbk5vbmU7Ci0g
ICAgaWYgKHZhbHVlID09ICJMZWZ0IikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFi
YXNlTW91c2VCdXR0b25MZWZ0OwotICAgIGlmICh2YWx1ZSA9PSAiTWlkZGxlIikKLSAgICAgICAg
cmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VCdXR0b25NaWRkbGU7Ci0gICAgaWYgKHZh
bHVlID09ICJSaWdodCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNl
QnV0dG9uUmlnaHQ7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotaW5saW5lIFN0cmlu
ZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJC
dW5kbGVEaXJlY3Rpb25hbGl0eSB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBj
YXNlIFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25h
bGl0eUxUUjoKLSAgICAgICAgcmV0dXJuICJMVFIiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xE
YXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHlSVEw6Ci0gICAgICAg
IHJldHVybiAiUlRMIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFs
PFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0
eT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZh
bHVlID09ICJMVFIiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25h
bFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5TFRSOwotICAgIGlmICh2YWx1ZSA9PSAiUlRM
IikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJC
dW5kbGVEaXJlY3Rpb25hbGl0eVJUTDsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi1p
bmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0
ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAg
ICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHlM
VFI6Ci0gICAgICAgIHJldHVybiAiTFRSIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJh
c2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eVJUTDoKLSAgICAgICAgcmV0dXJuICJSVEwi
X3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29s
RGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eT4gZnJvbVByb3RvY29sU3RyaW5n
KGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJMVFIiKQotICAgICAg
ICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0
eUxUUjsKLSAgICBpZiAodmFsdWUgPT0gIlJUTCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9j
b2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5UlRMOwotICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7Ci19Ci0KLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQ
cm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSB2YWx1ZSkKLXsKLSAgICBz
d2l0Y2godmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVE
aXJlY3Rpb25hbGl0eUxUUjoKLSAgICAgICAgcmV0dXJuICJMVFIiX3M7Ci0gICAgY2FzZSBUZXN0
UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHlSVEw6Ci0gICAgICAgIHJl
dHVybiAiUlRMIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRl
c3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eT4gZnJvbVByb3RvY29s
U3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJMVFIiKQot
ICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFs
aXR5TFRSOwotICAgIGlmICh2YWx1ZSA9PSAiUlRMIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90
b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eVJUTDsKLSAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucy5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2Nv
bFR5cGVQYXJzZXIuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmpl
Y3RQcml2YXRlLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbnRlcmZhY2Ug
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChEYXRhYmFzZURvbWFpbikKLQotKyAodm9pZClf
cGFyc2VFcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKilvdXRWYWx1ZSBmcm9tUGF5
bG9hZDooaWQpcGF5bG9hZDsKLSsgKHZvaWQpX3BhcnNlRXJyb3JMaXN0OihOU0FycmF5Lyo8VGVz
dFByb3RvY29sRGF0YWJhc2VFcnJvcj4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5
bG9hZDsKLSsgKHZvaWQpX3BhcnNlTW91c2VCdXR0b246KE5TTnVtYmVyICoqKW91dFZhbHVlIGZy
b21QYXlsb2FkOihpZClwYXlsb2FkOwotKyAodm9pZClfcGFyc2VPcHRpb25hbFBhcmFtZXRlckJ1
bmRsZTooVGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZSAqKilvdXRW
YWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLSsgKHZvaWQpX3BhcnNlUGFyYW1ldGVyQnVu
ZGxlOihUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZSAqKilvdXRWYWx1ZSBmcm9t
UGF5bG9hZDooaWQpcGF5bG9hZDsKLSsgKHZvaWQpX3BhcnNlT2JqZWN0V2l0aFByb3BlcnR5TmFt
ZUNvbmZsaWN0czooVGVzdFByb3RvY29sRGF0YWJhc2VPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29u
ZmxpY3RzICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotKyAodm9pZClfcGFy
c2VEdW1teU9iamVjdDooVGVzdFByb3RvY29sRGF0YWJhc2VEdW1teU9iamVjdCAqKilvdXRWYWx1
ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLQotQGVuZAotQGludGVyZmFjZSBUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMgKFRlc3REb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlUGFyYW1ldGVy
QnVuZGxlOihUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlICoqKW91dFZhbHVlIGZyb21Q
YXlsb2FkOihpZClwYXlsb2FkOwotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMgKERhdGFiYXNlRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZUVycm9y
OihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClw
YXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNE
aWN0aW9uYXJ5IGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xEYXRhYmFz
ZUVycm9yIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07Ci19Ci0KLSsgKHZvaWQpX3Bh
cnNlRXJyb3JMaXN0OihOU0FycmF5Lyo8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4qLyAqKilv
dXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfQkFEX1RZUEUocGF5bG9hZCwgW05TQXJyYXkvKjxUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9y
PiovIGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gKE5TQXJyYXkvKjxUZXN0UHJvdG9jb2xEYXRh
YmFzZUVycm9yPiovICopcGF5bG9hZDsKLX0KLQotKyAodm9pZClfcGFyc2VNb3VzZUJ1dHRvbjoo
TlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJP
V19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBjbGFzc10pOwotICAg
IE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VCdXR0b24+IHJlc3VsdCA9IEluc3Bl
Y3Rvcjo6ZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VCdXR0b24+
KHBheWxvYWQpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX0VOVU1fVkFMVUUocmVzdWx0
LCBAIk1vdXNlQnV0dG9uIik7Ci0gICAgKm91dFZhbHVlID0gQChyZXN1bHQudmFsdWUoKSk7Ci19
Ci0KLSsgKHZvaWQpX3BhcnNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU6KFRlc3RQcm90b2NvbERh
dGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlk
KXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtO
U0RpY3Rpb25hcnkgY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbERhdGFi
YXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2Fk
XTsKLX0KLQotKyAodm9pZClfcGFyc2VQYXJhbWV0ZXJCdW5kbGU6KFRlc3RQcm90b2NvbERhdGFi
YXNlUGFyYW1ldGVyQnVuZGxlICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17
Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5
IGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRl
ckJ1bmRsZSBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOwotfQotCi0rICh2b2lkKV9w
YXJzZU9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHM6KFRlc3RQcm90b2NvbERhdGFiYXNl
T2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDoo
aWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwg
W05TRGljdGlvbmFyeSBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sRGF0
YWJhc2VPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzIGFsbG9jXSBpbml0V2l0aFBheWxv
YWQ6cGF5bG9hZF07Ci19Ci0KLSsgKHZvaWQpX3BhcnNlRHVtbXlPYmplY3Q6KFRlc3RQcm90b2Nv
bERhdGFiYXNlRHVtbXlPYmplY3QgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQK
LXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25h
cnkgY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbERhdGFiYXNlRHVtbXlP
YmplY3QgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKLX0KLQotQGVuZAotQGltcGxl
bWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoVGVzdERvbWFpbikKLQotKyAo
dm9pZClfcGFyc2VQYXJhbWV0ZXJCdW5kbGU6KFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5k
bGUgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENF
UFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKLSAgICAq
b3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGUgYWxsb2NdIGluaXRX
aXRoUGF5bG9hZDpwYXlsb2FkXTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xU
eXBlcy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRp
b24tb2JqZWN0LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90
b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2lt
cG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQot
Ci1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcgotCi0tIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBp
ZD4gKilwYXlsb2FkCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAg
IHJldHVybiBuaWw7Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZ
KHBheWxvYWRbQCJtZXNzYWdlIl0sIEAibWVzc2FnZSIpOwotICAgIHNlbGYubWVzc2FnZSA9IHBh
eWxvYWRbQCJtZXNzYWdlIl07Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BS
T1BFUlRZKHBheWxvYWRbQCJjb2RlIl0sIEAiY29kZSIpOwotICAgIHNlbGYuY29kZSA9IFtwYXls
b2FkW0AiY29kZSJdIGludGVnZXJWYWx1ZV07Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLS0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3Qg
KilvYmplY3QKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoSlNPTk9iamVjdDpb
b2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0KCldKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAg
IHJldHVybiBzZWxmOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0
cmluZyAqKW1lc3NhZ2UgY29kZTooaW50KWNvZGUKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVy
IGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
UkVRVUlSRURfUFJPUEVSVFkobWVzc2FnZSwgQCJtZXNzYWdlIik7Ci0KLSAgICBzZWxmLm1lc3Nh
Z2UgPSBtZXNzYWdlOwotICAgIHNlbGYuY29kZSA9IGNvZGU7Ci0KLSAgICByZXR1cm4gc2VsZjsK
LX0KLQotLSAodm9pZClzZXRNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UKLXsKLSAgICBbc3Vw
ZXIgc2V0U3RyaW5nOm1lc3NhZ2UgZm9yS2V5OkAibWVzc2FnZSJdOwotfQotCi0tIChOU1N0cmlu
ZyAqKW1lc3NhZ2UKLXsKLSAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAIm1lc3NhZ2Ui
XTsKLX0KLQotLSAodm9pZClzZXRDb2RlOihpbnQpY29kZQotewotICAgIFtzdXBlciBzZXRJbnRl
Z2VyOmNvZGUgZm9yS2V5OkAiY29kZSJdOwotfQotCi0tIChpbnQpY29kZQotewotICAgIHJldHVy
biBbc3VwZXIgaW50ZWdlckZvcktleTpAImNvZGUiXTsKLX0KLQotQGVuZAotCi1AaW1wbGVtZW50
YXRpb24gVGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZQotCi0tIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmlu
ZyAqLCBpZD4gKilwYXlsb2FkCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0g
ICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBzZWxmLmNvbHVtbk5hbWVzID0gcGF5bG9hZFtAImNv
bHVtbk5hbWVzIl07Ci0KLSAgICBzZWxmLmJ1dHRvbnMgPSBwYXlsb2FkW0AiYnV0dG9ucyJdOwot
Ci0gICAgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRs
ZURpcmVjdGlvbmFsaXR5PiBkaXJlY3Rpb25hbGl0eSA9IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0
UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHk+KHBh
eWxvYWRbQCJkaXJlY3Rpb25hbGl0eSJdKTsKLSAgICBpZiAoZGlyZWN0aW9uYWxpdHkpCi0gICAg
ICAgIHNlbGYuZGlyZWN0aW9uYWxpdHkgPSBkaXJlY3Rpb25hbGl0eS52YWx1ZSgpOwotCi0gICAg
c2VsZi5ub3RlcyA9IHBheWxvYWRbQCJub3RlcyJdOwotCi0gICAgc2VsZi50aW1lc3RhbXAgPSBb
cGF5bG9hZFtAInRpbWVzdGFtcCJdIGRvdWJsZVZhbHVlXTsKLQotICAgIHNlbGYudmFsdWVzID0g
cGF5bG9hZFtAInZhbHVlcyJdOwotCi0gICAgc2VsZi5wYXlsb2FkID0gcGF5bG9hZFtAInBheWxv
YWQiXTsKLQotICAgIHNlbGYuZXJyb3IgPSBbW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgYWxs
b2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkW0AiZXJyb3IiXV07Ci0KLSAgICBzZWxmLmVycm9y
TGlzdCA9IG9iamNBcnJheUZyb21QYXlsb2FkPFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I+KHBh
eWxvYWRbQCJlcnJvckxpc3QiXSk7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLS0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilvYmpl
Y3QKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoSlNPTk9iamVjdDpbb2JqZWN0
IHRvSlNPTk9iamVjdF0uZ2V0KCldKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIHJldHVy
biBzZWxmOwotfQotCi0tICh2b2lkKXNldENvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+
Ki8gKiljb2x1bW5OYW1lcwotewotICAgIFtzdXBlciBzZXRKU09OQXJyYXk6dG9KU09OU3RyaW5n
QXJyYXkoY29sdW1uTmFtZXMpIGZvcktleTpAImNvbHVtbk5hbWVzIl07Ci19Ci0KLS0gKE5TQXJy
YXkvKjxOU1N0cmluZz4qLyAqKWNvbHVtbk5hbWVzCi17Ci0gICAgcmV0dXJuIHRvT2JqQ1N0cmlu
Z0FycmF5KFtzdXBlciBKU09OQXJyYXlGb3JLZXk6QCJjb2x1bW5OYW1lcyJdKTsKLX0KLQotLSAo
dm9pZClzZXRCdXR0b25zOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilidXR0b25zCi17Ci0gICAg
W3N1cGVyIHNldEpTT05BcnJheTp0b0pTT05TdHJpbmdBcnJheShidXR0b25zKSBmb3JLZXk6QCJi
dXR0b25zIl07Ci19Ci0KLS0gKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWJ1dHRvbnMKLXsKLSAg
ICByZXR1cm4gdG9PYmpDU3RyaW5nQXJyYXkoW3N1cGVyIEpTT05BcnJheUZvcktleTpAImJ1dHRv
bnMiXSk7Ci19Ci0KLS0gKHZvaWQpc2V0RGlyZWN0aW9uYWxpdHk6KFRlc3RQcm90b2NvbERhdGFi
YXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSlkaXJlY3Rpb25hbGl0eQot
ewotICAgIFtzdXBlciBzZXRTdHJpbmc6dG9Qcm90b2NvbFN0cmluZyhkaXJlY3Rpb25hbGl0eSkg
Zm9yS2V5OkAiZGlyZWN0aW9uYWxpdHkiXTsKLX0KLQotLSAoVGVzdFByb3RvY29sRGF0YWJhc2VP
cHRpb25hbFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5KWRpcmVjdGlvbmFsaXR5Ci17Ci0g
ICAgcmV0dXJuIGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFs
UGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHk+KFtzdXBlciBzdHJpbmdGb3JLZXk6QCJkaXJl
Y3Rpb25hbGl0eSJdKS52YWx1ZSgpOwotfQotCi0tICh2b2lkKXNldE5vdGVzOihOU1N0cmluZyAq
KW5vdGVzCi17Ci0gICAgW3N1cGVyIHNldFN0cmluZzpub3RlcyBmb3JLZXk6QCJub3RlcyJdOwot
fQotCi0tIChOU1N0cmluZyAqKW5vdGVzCi17Ci0gICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JL
ZXk6QCJub3RlcyJdOwotfQotCi0tICh2b2lkKXNldFRpbWVzdGFtcDooZG91YmxlKXRpbWVzdGFt
cAotewotICAgIFtzdXBlciBzZXREb3VibGU6dGltZXN0YW1wIGZvcktleTpAInRpbWVzdGFtcCJd
OwotfQotCi0tIChkb3VibGUpdGltZXN0YW1wCi17Ci0gICAgcmV0dXJuIFtzdXBlciBkb3VibGVG
b3JLZXk6QCJ0aW1lc3RhbXAiXTsKLX0KLQotLSAodm9pZClzZXRWYWx1ZXM6KFJXSVByb3RvY29s
SlNPTk9iamVjdCAqKXZhbHVlcwotewotICAgIFtzdXBlciBzZXRPYmplY3Q6dmFsdWVzIGZvcktl
eTpAInZhbHVlcyJdOwotfQotCi0tIChSV0lQcm90b2NvbEpTT05PYmplY3QgKil2YWx1ZXMKLXsK
LSAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9iamVjdCA9IFtzdXBlciBvYmplY3RGb3JLZXk6
QCJ2YWx1ZXMiXTsKLSAgICBpZiAoIW9iamVjdCkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBy
ZXR1cm4gW1tSV0lQcm90b2NvbEpTT05PYmplY3QgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDpb
W3N1cGVyIG9iamVjdEZvcktleTpAInZhbHVlcyJdIHRvSlNPTk9iamVjdF0uZ2V0KCldOwotfQot
Ci0tICh2b2lkKXNldFBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQKLXsK
LSAgICBbc3VwZXIgc2V0T2JqZWN0OnBheWxvYWQgZm9yS2V5OkAicGF5bG9hZCJdOwotfQotCi0t
IChSV0lQcm90b2NvbEpTT05PYmplY3QgKilwYXlsb2FkCi17Ci0gICAgUldJUHJvdG9jb2xKU09O
T2JqZWN0ICpvYmplY3QgPSBbc3VwZXIgb2JqZWN0Rm9yS2V5OkAicGF5bG9hZCJdOwotICAgIGlm
ICghb2JqZWN0KQotICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiBbW1JXSVByb3RvY29s
SlNPTk9iamVjdCBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0Oltbc3VwZXIgb2JqZWN0Rm9yS2V5
OkAicGF5bG9hZCJdIHRvSlNPTk9iamVjdF0uZ2V0KCldOwotfQotCi0tICh2b2lkKXNldEVycm9y
OihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICopZXJyb3IKLXsKLSAgICBbc3VwZXIgc2V0T2Jq
ZWN0OmVycm9yIGZvcktleTpAImVycm9yIl07Ci19Ci0KLS0gKFRlc3RQcm90b2NvbERhdGFiYXNl
RXJyb3IgKillcnJvcgotewotICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb2JqZWN0ID0gW3N1
cGVyIG9iamVjdEZvcktleTpAImVycm9yIl07Ci0gICAgaWYgKCFvYmplY3QpCi0gICAgICAgIHJl
dHVybiBuaWw7Ci0gICAgcmV0dXJuIFtbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBhbGxvY10g
aW5pdFdpdGhKU09OT2JqZWN0Oltbc3VwZXIgb2JqZWN0Rm9yS2V5OkAiZXJyb3IiXSB0b0pTT05P
YmplY3RdLmdldCgpXTsKLX0KLQotLSAodm9pZClzZXRFcnJvckxpc3Q6KE5TQXJyYXkvKjxUZXN0
UHJvdG9jb2xEYXRhYmFzZUVycm9yPiovICopZXJyb3JMaXN0Ci17Ci0gICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9CQURfVFlQRV9JTl9BUlJBWShlcnJvckxpc3QsIFtUZXN0UHJvdG9jb2xEYXRhYmFz
ZUVycm9yIGNsYXNzXSk7Ci0gICAgW3N1cGVyIHNldEpTT05BcnJheTp0b0pTT05PYmplY3RBcnJh
eShlcnJvckxpc3QpIGZvcktleTpAImVycm9yTGlzdCJdOwotfQotCi0tIChOU0FycmF5Lyo8VGVz
dFByb3RvY29sRGF0YWJhc2VFcnJvcj4qLyAqKWVycm9yTGlzdAotewotICAgIHJldHVybiB0b09i
akNBcnJheTxUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yPihbc3VwZXIgSlNPTkFycmF5Rm9yS2V5
OkAiZXJyb3JMaXN0Il0pOwotfQotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9j
b2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXls
b2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCi17Ci0g
ICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAg
ICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJjb2x1bW5O
YW1lcyJdLCBAImNvbHVtbk5hbWVzIik7Ci0gICAgc2VsZi5jb2x1bW5OYW1lcyA9IHBheWxvYWRb
QCJjb2x1bW5OYW1lcyJdOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9Q
RVJUWShwYXlsb2FkW0AiYnV0dG9ucyJdLCBAImJ1dHRvbnMiKTsKLSAgICBzZWxmLmJ1dHRvbnMg
PSBwYXlsb2FkW0AiYnV0dG9ucyJdOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJF
RF9QUk9QRVJUWShwYXlsb2FkW0AiZGlyZWN0aW9uYWxpdHkiXSwgQCJkaXJlY3Rpb25hbGl0eSIp
OwotICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlRGlyZWN0
aW9uYWxpdHk+IGRpcmVjdGlvbmFsaXR5ID0gZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2Nv
bERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHk+KHBheWxvYWRbQCJkaXJlY3Rp
b25hbGl0eSJdKTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9FTlVNX1ZBTFVFKGRpcmVj
dGlvbmFsaXR5LCBAImRpcmVjdGlvbmFsaXR5Iik7Ci0gICAgc2VsZi5kaXJlY3Rpb25hbGl0eSA9
IGRpcmVjdGlvbmFsaXR5LnZhbHVlKCk7Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJ
UkVEX1BST1BFUlRZKHBheWxvYWRbQCJub3RlcyJdLCBAIm5vdGVzIik7Ci0gICAgc2VsZi5ub3Rl
cyA9IHBheWxvYWRbQCJub3RlcyJdOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJF
RF9QUk9QRVJUWShwYXlsb2FkW0AidGltZXN0YW1wIl0sIEAidGltZXN0YW1wIik7Ci0gICAgc2Vs
Zi50aW1lc3RhbXAgPSBbcGF5bG9hZFtAInRpbWVzdGFtcCJdIGRvdWJsZVZhbHVlXTsKLQotICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAInZhbHVlcyJd
LCBAInZhbHVlcyIpOwotICAgIHNlbGYudmFsdWVzID0gcGF5bG9hZFtAInZhbHVlcyJdOwotCi0g
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AicGF5bG9h
ZCJdLCBAInBheWxvYWQiKTsKLSAgICBzZWxmLnBheWxvYWQgPSBwYXlsb2FkW0AicGF5bG9hZCJd
OwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0Ai
ZXJyb3IiXSwgQCJlcnJvciIpOwotICAgIHNlbGYuZXJyb3IgPSBbW1Rlc3RQcm90b2NvbERhdGFi
YXNlRXJyb3IgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkW0AiZXJyb3IiXV07Ci0KLSAg
ICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJlcnJvckxp
c3QiXSwgQCJlcnJvckxpc3QiKTsKLSAgICBzZWxmLmVycm9yTGlzdCA9IG9iamNBcnJheUZyb21Q
YXlsb2FkPFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I+KHBheWxvYWRbQCJlcnJvckxpc3QiXSk7
Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29s
T2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilvYmplY3QKLXsKLSAgICBpZiAoIShzZWxm
ID0gW3N1cGVyIGluaXRXaXRoSlNPTk9iamVjdDpbb2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0KCld
KSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhDb2x1bW5OYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopY29s
dW1uTmFtZXMgYnV0dG9uczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopYnV0dG9ucyBkaXJlY3Rp
b25hbGl0eTooVGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0
eSlkaXJlY3Rpb25hbGl0eSBub3RlczooTlNTdHJpbmcgKilub3RlcyB0aW1lc3RhbXA6KGRvdWJs
ZSl0aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKil2YWx1ZXMgcGF5bG9h
ZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZCBlcnJvcjooVGVzdFByb3RvY29sRGF0
YWJhc2VFcnJvciAqKWVycm9yIGVycm9yTGlzdDooTlNBcnJheS8qPFRlc3RQcm90b2NvbERhdGFi
YXNlRXJyb3I+Ki8gKillcnJvckxpc3QKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRd
KSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlS
RURfUFJPUEVSVFkoY29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsKLSAgICBUSFJPV19FWENF
UFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKGJ1dHRvbnMsIEAiYnV0dG9ucyIpOwotICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkobm90ZXMsIEAibm90ZXMiKTsKLSAg
ICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHZhbHVlcywgQCJ2YWx1ZXMi
KTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWQsIEAi
cGF5bG9hZCIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkoZXJy
b3IsIEAiZXJyb3IiKTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZ
KGVycm9yTGlzdCwgQCJlcnJvckxpc3QiKTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9U
WVBFX0lOX0FSUkFZKGVycm9yTGlzdCwgW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgY2xhc3Nd
KTsKLQotICAgIHNlbGYuY29sdW1uTmFtZXMgPSBjb2x1bW5OYW1lczsKLSAgICBzZWxmLmJ1dHRv
bnMgPSBidXR0b25zOwotICAgIHNlbGYuZGlyZWN0aW9uYWxpdHkgPSBkaXJlY3Rpb25hbGl0eTsK
LSAgICBzZWxmLm5vdGVzID0gbm90ZXM7Ci0gICAgc2VsZi50aW1lc3RhbXAgPSB0aW1lc3RhbXA7
Ci0gICAgc2VsZi52YWx1ZXMgPSB2YWx1ZXM7Ci0gICAgc2VsZi5wYXlsb2FkID0gcGF5bG9hZDsK
LSAgICBzZWxmLmVycm9yID0gZXJyb3I7Ci0gICAgc2VsZi5lcnJvckxpc3QgPSBlcnJvckxpc3Q7
Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClzZXRDb2x1bW5OYW1lczooTlNBcnJh
eS8qPE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMKLXsKLSAgICBbc3VwZXIgc2V0SlNPTkFycmF5
OnRvSlNPTlN0cmluZ0FycmF5KGNvbHVtbk5hbWVzKSBmb3JLZXk6QCJjb2x1bW5OYW1lcyJdOwot
fQotCi0tIChOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcwotewotICAgIHJldHVy
biB0b09iakNTdHJpbmdBcnJheShbc3VwZXIgSlNPTkFycmF5Rm9yS2V5OkAiY29sdW1uTmFtZXMi
XSk7Ci19Ci0KLS0gKHZvaWQpc2V0QnV0dG9uczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopYnV0
dG9ucwotewotICAgIFtzdXBlciBzZXRKU09OQXJyYXk6dG9KU09OU3RyaW5nQXJyYXkoYnV0dG9u
cykgZm9yS2V5OkAiYnV0dG9ucyJdOwotfQotCi0tIChOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKili
dXR0b25zCi17Ci0gICAgcmV0dXJuIHRvT2JqQ1N0cmluZ0FycmF5KFtzdXBlciBKU09OQXJyYXlG
b3JLZXk6QCJidXR0b25zIl0pOwotfQotCi0tICh2b2lkKXNldERpcmVjdGlvbmFsaXR5OihUZXN0
UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5KWRpcmVjdGlvbmFs
aXR5Ci17Ci0gICAgW3N1cGVyIHNldFN0cmluZzp0b1Byb3RvY29sU3RyaW5nKGRpcmVjdGlvbmFs
aXR5KSBmb3JLZXk6QCJkaXJlY3Rpb25hbGl0eSJdOwotfQotCi0tIChUZXN0UHJvdG9jb2xEYXRh
YmFzZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5KWRpcmVjdGlvbmFsaXR5Ci17Ci0gICAg
cmV0dXJuIGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1
bmRsZURpcmVjdGlvbmFsaXR5Pihbc3VwZXIgc3RyaW5nRm9yS2V5OkAiZGlyZWN0aW9uYWxpdHki
XSkudmFsdWUoKTsKLX0KLQotLSAodm9pZClzZXROb3RlczooTlNTdHJpbmcgKilub3Rlcwotewot
ICAgIFtzdXBlciBzZXRTdHJpbmc6bm90ZXMgZm9yS2V5OkAibm90ZXMiXTsKLX0KLQotLSAoTlNT
dHJpbmcgKilub3RlcwotewotICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAibm90ZXMi
XTsKLX0KLQotLSAodm9pZClzZXRUaW1lc3RhbXA6KGRvdWJsZSl0aW1lc3RhbXAKLXsKLSAgICBb
c3VwZXIgc2V0RG91YmxlOnRpbWVzdGFtcCBmb3JLZXk6QCJ0aW1lc3RhbXAiXTsKLX0KLQotLSAo
ZG91YmxlKXRpbWVzdGFtcAotewotICAgIHJldHVybiBbc3VwZXIgZG91YmxlRm9yS2V5OkAidGlt
ZXN0YW1wIl07Ci19Ci0KLS0gKHZvaWQpc2V0VmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3Qg
Kil2YWx1ZXMKLXsKLSAgICBbc3VwZXIgc2V0T2JqZWN0OnZhbHVlcyBmb3JLZXk6QCJ2YWx1ZXMi
XTsKLX0KLQotLSAoUldJUHJvdG9jb2xKU09OT2JqZWN0ICopdmFsdWVzCi17Ci0gICAgUldJUHJv
dG9jb2xKU09OT2JqZWN0ICpvYmplY3QgPSBbc3VwZXIgb2JqZWN0Rm9yS2V5OkAidmFsdWVzIl07
Ci0gICAgaWYgKCFvYmplY3QpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgcmV0dXJuIFtbUldJ
UHJvdG9jb2xKU09OT2JqZWN0IGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6W1tzdXBlciBvYmpl
Y3RGb3JLZXk6QCJ2YWx1ZXMiXSB0b0pTT05PYmplY3RdLmdldCgpXTsKLX0KLQotLSAodm9pZClz
ZXRQYXlsb2FkOihSV0lQcm90b2NvbEpTT05PYmplY3QgKilwYXlsb2FkCi17Ci0gICAgW3N1cGVy
IHNldE9iamVjdDpwYXlsb2FkIGZvcktleTpAInBheWxvYWQiXTsKLX0KLQotLSAoUldJUHJvdG9j
b2xKU09OT2JqZWN0ICopcGF5bG9hZAotewotICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb2Jq
ZWN0ID0gW3N1cGVyIG9iamVjdEZvcktleTpAInBheWxvYWQiXTsKLSAgICBpZiAoIW9iamVjdCkK
LSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4gW1tSV0lQcm90b2NvbEpTT05PYmplY3Qg
YWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDpbW3N1cGVyIG9iamVjdEZvcktleTpAInBheWxvYWQi
XSB0b0pTT05PYmplY3RdLmdldCgpXTsKLX0KLQotLSAodm9pZClzZXRFcnJvcjooVGVzdFByb3Rv
Y29sRGF0YWJhc2VFcnJvciAqKWVycm9yCi17Ci0gICAgW3N1cGVyIHNldE9iamVjdDplcnJvciBm
b3JLZXk6QCJlcnJvciJdOwotfQotCi0tIChUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICopZXJy
b3IKLXsKLSAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9iamVjdCA9IFtzdXBlciBvYmplY3RG
b3JLZXk6QCJlcnJvciJdOwotICAgIGlmICghb2JqZWN0KQotICAgICAgICByZXR1cm4gbmlsOwot
ICAgIHJldHVybiBbW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgYWxsb2NdIGluaXRXaXRoSlNP
Tk9iamVjdDpbW3N1cGVyIG9iamVjdEZvcktleTpAImVycm9yIl0gdG9KU09OT2JqZWN0XS5nZXQo
KV07Ci19Ci0KLS0gKHZvaWQpc2V0RXJyb3JMaXN0OihOU0FycmF5Lyo8VGVzdFByb3RvY29sRGF0
YWJhc2VFcnJvcj4qLyAqKWVycm9yTGlzdAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFE
X1RZUEVfSU5fQVJSQVkoZXJyb3JMaXN0LCBbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBjbGFz
c10pOwotICAgIFtzdXBlciBzZXRKU09OQXJyYXk6dG9KU09OT2JqZWN0QXJyYXkoZXJyb3JMaXN0
KSBmb3JLZXk6QCJlcnJvckxpc3QiXTsKLX0KLQotLSAoTlNBcnJheS8qPFRlc3RQcm90b2NvbERh
dGFiYXNlRXJyb3I+Ki8gKillcnJvckxpc3QKLXsKLSAgICByZXR1cm4gdG9PYmpDQXJyYXk8VGVz
dFByb3RvY29sRGF0YWJhc2VFcnJvcj4oW3N1cGVyIEpTT05BcnJheUZvcktleTpAImVycm9yTGlz
dCJdKTsKLX0KLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sRGF0YWJhc2VP
YmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzCi0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0
aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQK
LXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsK
LQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImlu
dGVnZXIiXSwgQCJpbnRlZ2VyIik7Ci0gICAgc2VsZi5pbnRlZ2VyID0gcGF5bG9hZFtAImludGVn
ZXIiXTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9h
ZFtAImFycmF5Il0sIEAiYXJyYXkiKTsKLSAgICBzZWxmLmFycmF5ID0gcGF5bG9hZFtAImFycmF5
Il07Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRb
QCJzdHJpbmciXSwgQCJzdHJpbmciKTsKLSAgICBzZWxmLnN0cmluZyA9IHBheWxvYWRbQCJzdHJp
bmciXTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9h
ZFtAInZhbHVlIl0sIEAidmFsdWUiKTsKLSAgICBzZWxmLnZhbHVlID0gcGF5bG9hZFtAInZhbHVl
Il07Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRb
QCJvYmplY3QiXSwgQCJvYmplY3QiKTsKLSAgICBzZWxmLm9iamVjdCA9IHBheWxvYWRbQCJvYmpl
Y3QiXTsKLQotICAgIHJldHVybiBzZWxmOwotfQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJv
dG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9iamVjdAotewotICAgIGlmICgh
KHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmplY3QgdG9KU09OT2JqZWN0XS5n
ZXQoKV0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0g
KGluc3RhbmNldHlwZSlpbml0V2l0aEludGVnZXI6KE5TU3RyaW5nICopaW50ZWdlciBhcnJheToo
TlNTdHJpbmcgKilhcnJheSBzdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nIHZhbHVlOihOU1N0cmlu
ZyAqKXZhbHVlIG9iamVjdDooTlNTdHJpbmcgKilvYmplY3QKLXsKLSAgICBpZiAoIShzZWxmID0g
W3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfUkVRVUlSRURfUFJPUEVSVFkoaW50ZWdlciwgQCJpbnRlZ2VyIik7Ci0gICAgVEhST1df
RVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShhcnJheSwgQCJhcnJheSIpOwotICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkoc3RyaW5nLCBAInN0cmluZyIpOwot
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkodmFsdWUsIEAidmFsdWUi
KTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKG9iamVjdCwgQCJv
YmplY3QiKTsKLQotICAgIHNlbGYuaW50ZWdlciA9IGludGVnZXI7Ci0gICAgc2VsZi5hcnJheSA9
IGFycmF5OwotICAgIHNlbGYuc3RyaW5nID0gc3RyaW5nOwotICAgIHNlbGYudmFsdWUgPSB2YWx1
ZTsKLSAgICBzZWxmLm9iamVjdCA9IG9iamVjdDsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0t
ICh2b2lkKXNldEludGVnZXI6KE5TU3RyaW5nICopaW50ZWdlcgotewotICAgIFtzdXBlciBzZXRT
dHJpbmc6aW50ZWdlciBmb3JLZXk6QCJpbnRlZ2VyIl07Ci19Ci0KLS0gKE5TU3RyaW5nICopaW50
ZWdlcgotewotICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAiaW50ZWdlciJdOwotfQot
Ci0tICh2b2lkKXNldEFycmF5OihOU1N0cmluZyAqKWFycmF5Ci17Ci0gICAgW3N1cGVyIHNldFN0
cmluZzphcnJheSBmb3JLZXk6QCJhcnJheSJdOwotfQotCi0tIChOU1N0cmluZyAqKWFycmF5Ci17
Ci0gICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJhcnJheSJdOwotfQotCi0tICh2b2lk
KXNldFN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcKLXsKLSAgICBbc3VwZXIgc2V0U3RyaW5nOnN0
cmluZyBmb3JLZXk6QCJzdHJpbmciXTsKLX0KLQotLSAoTlNTdHJpbmcgKilzdHJpbmcKLXsKLSAg
ICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAInN0cmluZyJdOwotfQotCi0tICh2b2lkKXNl
dFZhbHVlOihOU1N0cmluZyAqKXZhbHVlCi17Ci0gICAgW3N1cGVyIHNldFN0cmluZzp2YWx1ZSBm
b3JLZXk6QCJ2YWx1ZSJdOwotfQotCi0tIChOU1N0cmluZyAqKXZhbHVlCi17Ci0gICAgcmV0dXJu
IFtzdXBlciBzdHJpbmdGb3JLZXk6QCJ2YWx1ZSJdOwotfQotCi0tICh2b2lkKXNldE9iamVjdDoo
TlNTdHJpbmcgKilvYmplY3QKLXsKLSAgICBbc3VwZXIgc2V0U3RyaW5nOm9iamVjdCBmb3JLZXk6
QCJvYmplY3QiXTsKLX0KLQotLSAoTlNTdHJpbmcgKilvYmplY3QKLXsKLSAgICByZXR1cm4gW3N1
cGVyIHN0cmluZ0ZvcktleTpAIm9iamVjdCJdOwotfQotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlv
biBUZXN0UHJvdG9jb2xEYXRhYmFzZUR1bW15T2JqZWN0Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0
V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxv
YWQKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5p
bDsKLQotICAgIHJldHVybiBzZWxmOwotfQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9j
b2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9iamVjdAotewotICAgIGlmICghKHNl
bGYgPSBbc3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmplY3QgdG9KU09OT2JqZWN0XS5nZXQo
KV0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLUBlbmQK
LQotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZQotCi0t
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0
cmluZyAqLCBpZD4gKilwYXlsb2FkCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkp
Ci0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVE
X1BST1BFUlRZKHBheWxvYWRbQCJkaXJlY3Rpb25hbGl0eSJdLCBAImRpcmVjdGlvbmFsaXR5Iik7
Ci0gICAgT3B0aW9uYWw8VGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFs
aXR5PiBkaXJlY3Rpb25hbGl0eSA9IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xUZXN0
UGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHk+KHBheWxvYWRbQCJkaXJlY3Rpb25hbGl0eSJd
KTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9FTlVNX1ZBTFVFKGRpcmVjdGlvbmFsaXR5
LCBAImRpcmVjdGlvbmFsaXR5Iik7Ci0gICAgc2VsZi5kaXJlY3Rpb25hbGl0eSA9IGRpcmVjdGlv
bmFsaXR5LnZhbHVlKCk7Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BF
UlRZKHBheWxvYWRbQCJidXR0b25zIl0sIEAiYnV0dG9ucyIpOwotICAgIHNlbGYuYnV0dG9ucyA9
IHBheWxvYWRbQCJidXR0b25zIl07Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVE
X1BST1BFUlRZKHBheWxvYWRbQCJjb2x1bW5OYW1lcyJdLCBAImNvbHVtbk5hbWVzIik7Ci0gICAg
c2VsZi5jb2x1bW5OYW1lcyA9IHBheWxvYWRbQCJjb2x1bW5OYW1lcyJdOwotCi0gICAgVEhST1df
RVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0Aibm90ZXMiXSwgQCJub3Rl
cyIpOwotICAgIHNlbGYubm90ZXMgPSBwYXlsb2FkW0Aibm90ZXMiXTsKLQotICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAInRpbWVzdGFtcCJdLCBAInRp
bWVzdGFtcCIpOwotICAgIHNlbGYudGltZXN0YW1wID0gW3BheWxvYWRbQCJ0aW1lc3RhbXAiXSBk
b3VibGVWYWx1ZV07Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZ
KHBheWxvYWRbQCJ2YWx1ZXMiXSwgQCJ2YWx1ZXMiKTsKLSAgICBzZWxmLnZhbHVlcyA9IHBheWxv
YWRbQCJ2YWx1ZXMiXTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVS
VFkocGF5bG9hZFtAInBheWxvYWQiXSwgQCJwYXlsb2FkIik7Ci0gICAgc2VsZi5wYXlsb2FkID0g
cGF5bG9hZFtAInBheWxvYWQiXTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURf
UFJPUEVSVFkocGF5bG9hZFtAImVycm9yIl0sIEAiZXJyb3IiKTsKLSAgICBzZWxmLmVycm9yID0g
W1tUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9h
ZFtAImVycm9yIl1dOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0tIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopb2JqZWN0Ci17Ci0g
ICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEpTT05PYmplY3Q6W29iamVjdCB0b0pTT05P
YmplY3RdLmdldCgpXSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICByZXR1cm4gc2VsZjsK
LX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRGlyZWN0aW9uYWxpdHk6KFRlc3RQcm90b2Nv
bFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSlkaXJlY3Rpb25hbGl0eSBidXR0b25z
OihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilidXR0b25zIGNvbHVtbk5hbWVzOihOU0FycmF5Lyo8
TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcyBub3RlczooTlNTdHJpbmcgKilub3RlcyB0aW1lc3Rh
bXA6KGRvdWJsZSl0aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKil2YWx1
ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZCBlcnJvcjooVGVzdFBy
b3RvY29sRGF0YWJhc2VFcnJvciAqKWVycm9yCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBp
bml0XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JF
UVVJUkVEX1BST1BFUlRZKGJ1dHRvbnMsIEAiYnV0dG9ucyIpOwotICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfUkVRVUlSRURfUFJPUEVSVFkoY29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsKLSAg
ICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKG5vdGVzLCBAIm5vdGVzIik7
Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWSh2YWx1ZXMsIEAidmFs
dWVzIik7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2Fk
LCBAInBheWxvYWQiKTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZ
KGVycm9yLCBAImVycm9yIik7Ci0KLSAgICBzZWxmLmRpcmVjdGlvbmFsaXR5ID0gZGlyZWN0aW9u
YWxpdHk7Ci0gICAgc2VsZi5idXR0b25zID0gYnV0dG9uczsKLSAgICBzZWxmLmNvbHVtbk5hbWVz
ID0gY29sdW1uTmFtZXM7Ci0gICAgc2VsZi5ub3RlcyA9IG5vdGVzOwotICAgIHNlbGYudGltZXN0
YW1wID0gdGltZXN0YW1wOwotICAgIHNlbGYudmFsdWVzID0gdmFsdWVzOwotICAgIHNlbGYucGF5
bG9hZCA9IHBheWxvYWQ7Ci0gICAgc2VsZi5lcnJvciA9IGVycm9yOwotCi0gICAgcmV0dXJuIHNl
bGY7Ci19Ci0KLS0gKHZvaWQpc2V0RGlyZWN0aW9uYWxpdHk6KFRlc3RQcm90b2NvbFRlc3RQYXJh
bWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSlkaXJlY3Rpb25hbGl0eQotewotICAgIFtzdXBlciBz
ZXRTdHJpbmc6dG9Qcm90b2NvbFN0cmluZyhkaXJlY3Rpb25hbGl0eSkgZm9yS2V5OkAiZGlyZWN0
aW9uYWxpdHkiXTsKLX0KLQotLSAoVGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZURpcmVj
dGlvbmFsaXR5KWRpcmVjdGlvbmFsaXR5Ci17Ci0gICAgcmV0dXJuIGZyb21Qcm90b2NvbFN0cmlu
ZzxUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHk+KFtzdXBlciBz
dHJpbmdGb3JLZXk6QCJkaXJlY3Rpb25hbGl0eSJdKS52YWx1ZSgpOwotfQotCi0tICh2b2lkKXNl
dEJ1dHRvbnM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWJ1dHRvbnMKLXsKLSAgICBbc3VwZXIg
c2V0SlNPTkFycmF5OnRvSlNPTlN0cmluZ0FycmF5KGJ1dHRvbnMpIGZvcktleTpAImJ1dHRvbnMi
XTsKLX0KLQotLSAoTlNBcnJheS8qPE5TU3RyaW5nPiovICopYnV0dG9ucwotewotICAgIHJldHVy
biB0b09iakNTdHJpbmdBcnJheShbc3VwZXIgSlNPTkFycmF5Rm9yS2V5OkAiYnV0dG9ucyJdKTsK
LX0KLQotLSAodm9pZClzZXRDb2x1bW5OYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopY29s
dW1uTmFtZXMKLXsKLSAgICBbc3VwZXIgc2V0SlNPTkFycmF5OnRvSlNPTlN0cmluZ0FycmF5KGNv
bHVtbk5hbWVzKSBmb3JLZXk6QCJjb2x1bW5OYW1lcyJdOwotfQotCi0tIChOU0FycmF5Lyo8TlNT
dHJpbmc+Ki8gKiljb2x1bW5OYW1lcwotewotICAgIHJldHVybiB0b09iakNTdHJpbmdBcnJheShb
c3VwZXIgSlNPTkFycmF5Rm9yS2V5OkAiY29sdW1uTmFtZXMiXSk7Ci19Ci0KLS0gKHZvaWQpc2V0
Tm90ZXM6KE5TU3RyaW5nICopbm90ZXMKLXsKLSAgICBbc3VwZXIgc2V0U3RyaW5nOm5vdGVzIGZv
cktleTpAIm5vdGVzIl07Ci19Ci0KLS0gKE5TU3RyaW5nICopbm90ZXMKLXsKLSAgICByZXR1cm4g
W3N1cGVyIHN0cmluZ0ZvcktleTpAIm5vdGVzIl07Ci19Ci0KLS0gKHZvaWQpc2V0VGltZXN0YW1w
Oihkb3VibGUpdGltZXN0YW1wCi17Ci0gICAgW3N1cGVyIHNldERvdWJsZTp0aW1lc3RhbXAgZm9y
S2V5OkAidGltZXN0YW1wIl07Ci19Ci0KLS0gKGRvdWJsZSl0aW1lc3RhbXAKLXsKLSAgICByZXR1
cm4gW3N1cGVyIGRvdWJsZUZvcktleTpAInRpbWVzdGFtcCJdOwotfQotCi0tICh2b2lkKXNldFZh
bHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopdmFsdWVzCi17Ci0gICAgW3N1cGVyIHNldE9i
amVjdDp2YWx1ZXMgZm9yS2V5OkAidmFsdWVzIl07Ci19Ci0KLS0gKFJXSVByb3RvY29sSlNPTk9i
amVjdCAqKXZhbHVlcwotewotICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb2JqZWN0ID0gW3N1
cGVyIG9iamVjdEZvcktleTpAInZhbHVlcyJdOwotICAgIGlmICghb2JqZWN0KQotICAgICAgICBy
ZXR1cm4gbmlsOwotICAgIHJldHVybiBbW1JXSVByb3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5p
dFdpdGhKU09OT2JqZWN0Oltbc3VwZXIgb2JqZWN0Rm9yS2V5OkAidmFsdWVzIl0gdG9KU09OT2Jq
ZWN0XS5nZXQoKV07Ci19Ci0KLS0gKHZvaWQpc2V0UGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2Jq
ZWN0ICopcGF5bG9hZAotewotICAgIFtzdXBlciBzZXRPYmplY3Q6cGF5bG9hZCBmb3JLZXk6QCJw
YXlsb2FkIl07Ci19Ci0KLS0gKFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQKLXsKLSAg
ICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9iamVjdCA9IFtzdXBlciBvYmplY3RGb3JLZXk6QCJw
YXlsb2FkIl07Ci0gICAgaWYgKCFvYmplY3QpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgcmV0
dXJuIFtbUldJUHJvdG9jb2xKU09OT2JqZWN0IGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6W1tz
dXBlciBvYmplY3RGb3JLZXk6QCJwYXlsb2FkIl0gdG9KU09OT2JqZWN0XS5nZXQoKV07Ci19Ci0K
LS0gKHZvaWQpc2V0RXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKillcnJvcgotewot
ICAgIFtzdXBlciBzZXRPYmplY3Q6ZXJyb3IgZm9yS2V5OkAiZXJyb3IiXTsKLX0KLQotLSAoVGVz
dFByb3RvY29sRGF0YWJhc2VFcnJvciAqKWVycm9yCi17Ci0gICAgUldJUHJvdG9jb2xKU09OT2Jq
ZWN0ICpvYmplY3QgPSBbc3VwZXIgb2JqZWN0Rm9yS2V5OkAiZXJyb3IiXTsKLSAgICBpZiAoIW9i
amVjdCkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4gW1tUZXN0UHJvdG9jb2xEYXRh
YmFzZUVycm9yIGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6W1tzdXBlciBvYmplY3RGb3JLZXk6
QCJlcnJvciJdIHRvSlNPTk9iamVjdF0uZ2V0KCldOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvdHlwZS1yZXF1aXJp
bmctcnVudGltZS1jYXN0cy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtcmVxdWlyaW5nLXJ1bnRp
bWUtY2FzdHMuanNvbi1yZXN1bHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4NGRh
Y2RjYWY3Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC90eXBlLXJlcXVpcmluZy1ydW50aW1lLWNh
c3RzLmpzb24tcmVzdWx0CisrKyAvZGV2L251bGwKQEAgLTEsMTY0OSArMCwwIEBACi0jIyMgQmVn
aW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLS8vIFRlc3QKLUluc3BlY3RvckJh
Y2tlbmQucmVnaXN0ZXJEb21haW4oIlRlc3QiLCBudWxsKTsKLUluc3BlY3RvckJhY2tlbmQucmVn
aXN0ZXJFbnVtKCJUZXN0LlVuY2FzdGVkQW5pbWFscyIsIHtQaWdzOiAiUGlncyIsIENvd3M6ICJD
b3dzIiwgQ2F0czogIkNhdHMiLCBIZW5zOiAiSGVucyJ9KTsKLUluc3BlY3RvckJhY2tlbmQucmVn
aXN0ZXJFbnVtKCJUZXN0LkNhc3RlZEFuaW1hbHMiLCB7RHVja3M6ICJEdWNrcyIsIEhlbnM6ICJI
ZW5zIiwgQ3Jvd3M6ICJDcm93cyIsIEZsYW1pbmdvczogIkZsYW1pbmdvcyJ9KTsKLUluc3BlY3Rv
ckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIlRlc3QiLCBudWxsKTsKLSMjIyBFbmQgRmlsZTogSW5z
cGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRl
QmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0
eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgi
Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4K
LSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotCi1u
YW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIg
ewotcHVibGljOgotICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmRE
aXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUo
ZGlzcGF0Y2hlcik7IH0KLSAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIo
KSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Ci1wcml2YXRlOgot
ICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKLX07Ci0K
LQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jZW5kaWYgLy8gRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmct
cnVudGltZS1jYXN0cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgot
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Igewot
Ci10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVz
Lmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
Ci0jaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgotI2VuZGlmCi0K
LW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0K
LSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNs
YXNzIEZyb250ZW5kUm91dGVyOwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQg
RmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZy
b250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
dHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0
RnJvbnRlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5h
bWVzcGFjZSBJbnNwZWN0b3IgewotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVu
ZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbE9iamVjdHMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5
cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5o
PgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0K
LQotCi0vLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KLW5hbWVzcGFjZSBUZXN0IHsKLWNsYXNzIFR5
cGVOZWVkaW5nQ2FzdDsKLWNsYXNzIFJlY3Vyc2l2ZU9iamVjdDE7Ci1jbGFzcyBSZWN1cnNpdmVP
YmplY3QyOwotZW51bSBjbGFzcyBVbmNhc3RlZEFuaW1hbHM7Ci1lbnVtIGNsYXNzIENhc3RlZEFu
aW1hbHM7Ci19IC8vIFRlc3QKLS8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KLQotCi0v
LyBUeXBlZGVmcy4KLW5hbWVzcGFjZSBUZXN0IHsKLXR5cGVkZWYgaW50IENhc3RlZE9iamVjdElk
OwotdHlwZWRlZiBpbnQgVW5jYXN0ZWRPYmplY3RJZDsKLX0gLy8gVGVzdAotLy8gRW5kIG9mIHR5
cGVkZWZzLgotCi1uYW1lc3BhY2UgVGVzdEhlbHBlcnMgewotCi1TdHJpbmcgZ2V0RW51bUNvbnN0
YW50VmFsdWUoaW50IGNvZGUpOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgZ2V0RW51
bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFsdWUpCi17Ci0gICAgcmV0dXJuIGdldEVudW1Db25zdGFu
dFZhbHVlKHN0YXRpY19jYXN0PGludD4oZW51bVZhbHVlKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IFRlc3RIZWxwZXJzCi0KLW5hbWVzcGFjZSBUZXN0IHsKLS8qIEEgZHVtbXkgdHlwZSB0aGF0IHJl
cXVpcmVzIHJ1bnRpbWUgY2FzdHMsIGFuZCBmb3JjZXMgbm9uLXByaW1pdGl2ZSByZWZlcmVuY2Vk
IHR5cGVzIHRvIGFsc28gZW1pdCBydW50aW1lIGNhc3QgaGVscGVycy4gKi8KLWNsYXNzIFR5cGVO
ZWVkaW5nQ2FzdCA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKLXB1YmxpYzoKLSAgICBlbnVt
IHsKLSAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAotICAgICAgICBTdHJpbmdTZXQgPSAxIDw8IDAs
Ci0gICAgICAgIE51bWJlclNldCA9IDEgPDwgMSwKLSAgICAgICAgQW5pbWFsc1NldCA9IDEgPDwg
MiwKLSAgICAgICAgSWRTZXQgPSAxIDw8IDMsCi0gICAgICAgIFRyZWVTZXQgPSAxIDw8IDQsCi0g
ICAgICAgIEFsbEZpZWxkc1NldCA9IChTdHJpbmdTZXQgfCBOdW1iZXJTZXQgfCBBbmltYWxzU2V0
IHwgSWRTZXQgfCBUcmVlU2V0KQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+Ci0g
ICAgY2xhc3MgQnVpbGRlciB7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPEpTT046Ok9i
amVjdD4gbV9yZXN1bHQ7Ci0KLSAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RB
VEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICpy
ZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwotICAgICAgICB9
Ci0KLSAgICAgICAgQnVpbGRlcihSZWY8LypUeXBlTmVlZGluZ0Nhc3QqL0pTT046Ok9iamVjdD4m
JiBvYmplY3QpCi0gICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKLSAgICAg
ICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1
aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZnJp
ZW5kIGNsYXNzIFR5cGVOZWVkaW5nQ2FzdDsKLSAgICBwdWJsaWM6Ci0KLSAgICAgICAgQnVpbGRl
cjxTVEFURSB8IFN0cmluZ1NldD4mIHNldFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU3RyaW5nU2V0KSwg
cHJvcGVydHlfc3RyaW5nX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRT
dHJpbmcoInN0cmluZyJfcywgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxT
dHJpbmdTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTnVtYmVy
U2V0PiYgc2V0TnVtYmVyKGludCB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoIShTVEFURSAmIE51bWJlclNldCksIHByb3BlcnR5X251bWJlcl9hbHJlYWR5X3Nl
dCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcigibnVtYmVyIl9zLCB2YWx1ZSk7
Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE51bWJlclNldD4oKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBBbmltYWxzU2V0PiYgc2V0QW5pbWFscyhJbnNwZWN0
b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzIHZhbHVlKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQW5pbWFsc1NldCksIHByb3BlcnR5X2Fu
aW1hbHNfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygiYW5p
bWFscyJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFu
dFZhbHVlKHZhbHVlKSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEFuaW1hbHNTZXQ+
KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgSWRTZXQ+JiBzZXRJZChp
bnQgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUg
JiBJZFNldCksIHByb3BlcnR5X2lkX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXRJbnRlZ2VyKCJpZCJfcywgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0
ZTxJZFNldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUcmVlU2V0
PiYgc2V0VHJlZShSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2Jq
ZWN0MT4gdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBUcmVlU2V0KSwgcHJvcGVydHlfdHJlZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0T2JqZWN0KCJ0cmVlIl9zLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPFRyZWVTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBSZWY8VHlwZU5lZWRp
bmdDYXN0PiByZWxlYXNlKCkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
U1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKLSAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKHNpemVvZihUeXBlTmVlZGluZ0Nhc3QpID09IHNpemVvZihKU09OOjpP
YmplY3QpLCBjYW5ub3RfY2FzdCk7Ci0KLSAgICAgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IGpz
b25SZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOwotICAgICAgICAgICAgYXV0byBy
ZXN1bHQgPSBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxUeXBlTmVlZGluZ0Nhc3Q+Kj4o
Jmpzb25SZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAg
ICB9OwotCi0gICAgLyoKLSAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6Ci0gICAgICogUmVm
PFR5cGVOZWVkaW5nQ2FzdD4gcmVzdWx0ID0gVHlwZU5lZWRpbmdDYXN0OjpjcmVhdGUoKQotICAg
ICAqICAgICAuc2V0U3RyaW5nKC4uLikKLSAgICAgKiAgICAgLnNldE51bWJlciguLi4pCi0gICAg
ICogICAgIC5zZXRBbmltYWxzKC4uLikKLSAgICAgKiAgICAgLnNldElkKC4uLikKLSAgICAgKiAg
ICAgLnNldFRyZWUoLi4uKQotICAgICAqICAgICAucmVsZWFzZSgpOwotICAgICAqLwotICAgIHN0
YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOwotICAgIH0KLX07
Ci0KLS8qICAqLwotZW51bSBjbGFzcyBVbmNhc3RlZEFuaW1hbHMgewotICAgIFBpZ3MgPSA0LAot
ICAgIENvd3MgPSA1LAotICAgIENhdHMgPSA2LAotICAgIEhlbnMgPSAxLAotfTsgLy8gZW51bSBj
bGFzcyBVbmNhc3RlZEFuaW1hbHMKLS8qICAqLwotZW51bSBjbGFzcyBDYXN0ZWRBbmltYWxzIHsK
LSAgICBEdWNrcyA9IDAsCi0gICAgSGVucyA9IDEsCi0gICAgQ3Jvd3MgPSAyLAotICAgIEZsYW1p
bmdvcyA9IDMsCi19OyAvLyBlbnVtIGNsYXNzIENhc3RlZEFuaW1hbHMKLWNsYXNzIFJlY3Vyc2l2
ZU9iamVjdDEgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7Ci1wdWJsaWM6Ci0gICAgZW51bSB7
Ci0gICAgICAgIE5vRmllbGRzU2V0ID0gMCwKLSAgICAgICAgQWxsRmllbGRzU2V0ID0gMAotICAg
IH07Ci0KLSAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+Ci0gICAgY2xhc3MgQnVpbGRlciB7Ci0gICAg
cHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7Ci0KLSAgICAg
ICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8
U1RBVEUgfCBTVEVQPio+KHRoaXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcihSZWY8
LypSZWN1cnNpdmVPYmplY3QxKi9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQotICAgICAgICAgICAg
OiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2lu
aXRfc3RhdGUpOwotICAgICAgICB9Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBSZWN1cnNpdmVPYmpl
Y3QxOwotICAgIHB1YmxpYzoKLQotICAgICAgICBSZWY8UmVjdXJzaXZlT2JqZWN0MT4gcmVsZWFz
ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZp
ZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VS
VChzaXplb2YoUmVjdXJzaXZlT2JqZWN0MSkgPT0gc2l6ZW9mKEpTT046Ok9iamVjdCksIGNhbm5v
dF9jYXN0KTsKLQotICAgICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4ganNvblJlc3VsdCA9IG1f
cmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7Ci0gICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFdURk1v
dmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPFJlY3Vyc2l2ZU9iamVjdDE+Kj4oJmpzb25SZXN1bHQp
KTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAg
LyoKLSAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6Ci0gICAgICogUmVmPFJlY3Vyc2l2ZU9i
amVjdDE+IHJlc3VsdCA9IFJlY3Vyc2l2ZU9iamVjdDE6OmNyZWF0ZSgpCi0gICAgICogICAgIC5y
ZWxlYXNlKCk7Ci0gICAgICovCi0gICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0
ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKSk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRPYmooUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDI+IHZhbHVlKQotICAgIHsKLSAgICAg
ICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0T2JqZWN0KCJvYmoiX3MsIFdURk1vdmUodmFsdWUpKTsK
LSAgICB9Ci19OwotCi1jbGFzcyBSZWN1cnNpdmVPYmplY3QyIDogcHVibGljIEpTT046Ok9iamVj
dEJhc2UgewotcHVibGljOgotICAgIGVudW0gewotICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCi0g
ICAgICAgIEFsbEZpZWxkc1NldCA9IDAKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8aW50IFNUQVRF
PgotICAgIGNsYXNzIEJ1aWxkZXIgewotICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0cjxKU09O
OjpPYmplY3Q+IG1fcmVzdWx0OwotCi0gICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVy
PFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIEJ1aWxkZXIoUmVmPC8qUmVjdXJzaXZlT2JqZWN0MiovSlNPTjo6T2Jq
ZWN0PiYmIG9iamVjdCkKLSAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1Nl
dCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKLSAgICAgICAgfQotICAgICAg
ICBmcmllbmQgY2xhc3MgUmVjdXJzaXZlT2JqZWN0MjsKLSAgICBwdWJsaWM6Ci0KLSAgICAgICAg
UmVmPFJlY3Vyc2l2ZU9iamVjdDI+IHJlbGVhc2UoKQotICAgICAgICB7Ci0gICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkp
OwotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFJlY3Vyc2l2ZU9iamVjdDIpID09
IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7Ci0KLSAgICAgICAgICAgIFJlZjxK
U09OOjpPYmplY3Q+IGpzb25SZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOwotICAg
ICAgICAgICAgYXV0byByZXN1bHQgPSBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxSZWN1
cnNpdmVPYmplY3QyPio+KCZqc29uUmVzdWx0KSk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0
OwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIC8qCi0gICAgICogU3ludGhldGljIGNvbnN0cnVj
dG9yOgotICAgICAqIFJlZjxSZWN1cnNpdmVPYmplY3QyPiByZXN1bHQgPSBSZWN1cnNpdmVPYmpl
Y3QyOjpjcmVhdGUoKQotICAgICAqICAgICAucmVsZWFzZSgpOwotICAgICAqLwotICAgIHN0YXRp
YyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEJ1
aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOwotICAgIH0KLQotICAg
IHZvaWQgc2V0T2JqKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVP
YmplY3QxPiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldE9iamVj
dCgib2JqIl9zLCBXVEZNb3ZlKHZhbHVlKSk7Ci0gICAgfQotfTsKLQotfSAvLyBUZXN0Ci0KLXRl
bXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6
Q2FzdGVkQW5pbWFscz4gewotc3RhdGljIHZvaWQgYXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUo
SlNPTjo6VmFsdWUqKTsKLX07Ci10ZW1wbGF0ZTw+IHN0cnVjdCBCaW5kaW5nVHJhaXRzPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD4gewotc3RhdGljIFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+IHJ1bnRpbWVDYXN0KFJl
ZlB0cjxKU09OOjpWYWx1ZT4mJiB2YWx1ZSk7Ci1zdGF0aWMgdm9pZCBhc3NlcnRWYWx1ZUhhc0V4
cGVjdGVkVHlwZShKU09OOjpWYWx1ZSopOwotfTsKLXRlbXBsYXRlPD4gc3RydWN0IEJpbmRpbmdU
cmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT4gewotc3Rh
dGljIHZvaWQgYXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSlNPTjo6VmFsdWUqKTsKLX07Ci10
ZW1wbGF0ZTw+IHN0cnVjdCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6
OlJlY3Vyc2l2ZU9iamVjdDI+IHsKLXN0YXRpYyB2b2lkIGFzc2VydFZhbHVlSGFzRXhwZWN0ZWRU
eXBlKEpTT046OlZhbHVlKik7Ci19OwotCi1uYW1lc3BhY2UgVGVzdEhlbHBlcnMgewotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBQcm90b2NvbEVudW1UeXBlPgotT3B0aW9uYWw8UHJvdG9jb2xFbnVtVHlw
ZT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYpOwotCi0vLyBFbnVtcyBp
biB0aGUgJ1Rlc3QnIERvbWFpbgotdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90
b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5z
cGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzPihjb25zdCBTdHJpbmcmKTsK
LXRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFu
aW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0
OjpDYXN0ZWRBbmltYWxzPihjb25zdCBTdHJpbmcmKTsKLQotfSAvLyBuYW1lc3BhY2UgVGVzdEhl
bHBlcnMKLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCi0KLW5hbWVzcGFjZSBXVEYgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVm
YXVsdEhhc2g7Ci0KLS8vIEhhc2ggZGVjbGFyYXRpb25zIGluIHRoZSAnVGVzdCcgRG9tYWluCi10
ZW1wbGF0ZTw+Ci1zdHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6
VW5jYXN0ZWRBbmltYWxzPiB7Ci0gICAgdHlwZWRlZiBJbnRIYXNoPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFscz4gSGFzaDsKLX07Ci10ZW1wbGF0ZTw+Ci1zdHJ1Y3Qg
RGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz4gewot
ICAgIHR5cGVkZWYgSW50SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmlt
YWxzPiBIYXNoOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0jIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbE9iamVjdHMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5j
cHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50
aW1lLWNhc3RzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIK
LQotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLW5h
bWVzcGFjZSBUZXN0SGVscGVycyB7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBlbnVtX2Nv
bnN0YW50X3ZhbHVlc1tdID0gewotICAgICJEdWNrcyIsCi0gICAgIkhlbnMiLAotICAgICJDcm93
cyIsCi0gICAgIkZsYW1pbmdvcyIsCi0gICAgIlBpZ3MiLAotICAgICJDb3dzIiwKLSAgICAiQ2F0
cyIsCi19OwotCi1TdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsKLSAgICBy
ZXR1cm4gZW51bV9jb25zdGFudF92YWx1ZXNbY29kZV07Ci19Ci0KLS8vIEVudW1zIGluIHRoZSAn
VGVzdCcgRG9tYWluCi10ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpU
ZXN0OjpVbmNhc3RlZEFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6
OlByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xT
dHJpbmcpCi17Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0gewot
ICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFs
czo6UGlncywKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNh
c3RlZEFuaW1hbHM6OkNvd3MsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6
VGVzdDo6VW5jYXN0ZWRBbmltYWxzOjpDYXRzLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6
UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFsczo6SGVucywKLSAgICB9OwotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgNDsgKytpKQotICAgICAgICBpZiAocHJvdG9jb2xTdHJpbmcgPT0g
ZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNbaV1dKQotICAgICAgICAgICAgcmV0
dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHMpY29uc3RhbnRW
YWx1ZXNbaV07Ci0KLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi10ZW1wbGF0ZTw+Ci1P
cHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPiBwYXJzZUVu
dW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFs
cz4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKLXsKLSAgICBzdGF0aWMgY29uc3Qgc2l6
ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7Ci0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90
b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFsczo6RHVja3MsCi0gICAgICAgIChzaXplX3QpSW5zcGVj
dG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFsczo6SGVucywKLSAgICAgICAgKHNpemVf
dClJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzOjpDcm93cywKLSAgICAg
ICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzOjpGbGFt
aW5nb3MsCi0gICAgfTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDQ7ICsraSkKLSAgICAg
ICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFs
dWVzW2ldXSkKLSAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6
Q2FzdGVkQW5pbWFscyljb25zdGFudFZhbHVlc1tpXTsKLQotICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7Ci19Ci0KLQotfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKLQotCi0KLXZvaWQgQmluZGlu
Z1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPjo6YXNzZXJ0
VmFsdWVIYXNFeHBlY3RlZFR5cGUoSlNPTjo6VmFsdWUqIHZhbHVlKQotewotI2lmIEFTU0VSVF9F
TkFCTEVECi0gICAgQVNTRVJUX0FSRyh2YWx1ZSwgdmFsdWUpOwotICAgIFN0cmluZyByZXN1bHQ7
Ci0gICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdmFsdWUtPmFzU3RyaW5nKHJlc3VsdCk7Ci0gICAg
QVNTRVJUKGNhc3RTdWNjZWVkZWQpOwotICAgIEFTU0VSVChyZXN1bHQgPT0gIkR1Y2tzIiB8fCBy
ZXN1bHQgPT0gIkhlbnMiIHx8IHJlc3VsdCA9PSAiQ3Jvd3MiIHx8IHJlc3VsdCA9PSAiRmxhbWlu
Z29zIik7Ci0jZWxzZSAvLyBBU1NFUlRfRU5BQkxFRAotICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7
Ci0jZW5kaWYgLy8gQVNTRVJUX0VOQUJMRUQKLX0KLQotdm9pZCBCaW5kaW5nVHJhaXRzPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD46OmFzc2VydFZhbHVlSGFzRXhw
ZWN0ZWRUeXBlKEpTT046OlZhbHVlKiB2YWx1ZSkKLXsKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAg
IEFTU0VSVF9BUkcodmFsdWUsIHZhbHVlKTsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBvYmpl
Y3Q7Ci0gICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdmFsdWUtPmFzT2JqZWN0KG9iamVjdCk7Ci0g
ICAgQVNTRVJUX1VOVVNFRChjYXN0U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsKLSAgICB7Ci0g
ICAgICAgIGF1dG8gc3RyaW5nUG9zID0gb2JqZWN0LT5maW5kKCJzdHJpbmciX3MpOwotICAgICAg
ICBBU1NFUlQoc3RyaW5nUG9zICE9IG9iamVjdC0+ZW5kKCkpOwotICAgICAgICBCaW5kaW5nVHJh
aXRzPFN0cmluZz46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKHN0cmluZ1Bvcy0+dmFsdWUu
Z2V0KCkpOwotICAgIH0KLSAgICB7Ci0gICAgICAgIGF1dG8gbnVtYmVyUG9zID0gb2JqZWN0LT5m
aW5kKCJudW1iZXIiX3MpOwotICAgICAgICBBU1NFUlQobnVtYmVyUG9zICE9IG9iamVjdC0+ZW5k
KCkpOwotICAgICAgICBCaW5kaW5nVHJhaXRzPGludD46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRU
eXBlKG51bWJlclBvcy0+dmFsdWUuZ2V0KCkpOwotICAgIH0KLSAgICB7Ci0gICAgICAgIGF1dG8g
YW5pbWFsc1BvcyA9IG9iamVjdC0+ZmluZCgiYW5pbWFscyJfcyk7Ci0gICAgICAgIEFTU0VSVChh
bmltYWxzUG9zICE9IG9iamVjdC0+ZW5kKCkpOwotICAgICAgICBCaW5kaW5nVHJhaXRzPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+Ojphc3NlcnRWYWx1ZUhhc0V4cGVj
dGVkVHlwZShhbmltYWxzUG9zLT52YWx1ZS5nZXQoKSk7Ci0gICAgfQotICAgIHsKLSAgICAgICAg
YXV0byBpZFBvcyA9IG9iamVjdC0+ZmluZCgiaWQiX3MpOwotICAgICAgICBBU1NFUlQoaWRQb3Mg
IT0gb2JqZWN0LT5lbmQoKSk7Ci0gICAgICAgIEJpbmRpbmdUcmFpdHM8aW50Pjo6YXNzZXJ0VmFs
dWVIYXNFeHBlY3RlZFR5cGUoaWRQb3MtPnZhbHVlLmdldCgpKTsKLSAgICB9Ci0gICAgewotICAg
ICAgICBhdXRvIHRyZWVQb3MgPSBvYmplY3QtPmZpbmQoInRyZWUiX3MpOwotICAgICAgICBBU1NF
UlQodHJlZVBvcyAhPSBvYmplY3QtPmVuZCgpKTsKLSAgICAgICAgQmluZGluZ1RyYWl0czxJbnNw
ZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QxPjo6YXNzZXJ0VmFsdWVIYXNF
eHBlY3RlZFR5cGUodHJlZVBvcy0+dmFsdWUuZ2V0KCkpOwotICAgIH0KLQotICAgIGludCBmb3Vu
ZFByb3BlcnRpZXNDb3VudCA9IDU7Ci0gICAgaWYgKGZvdW5kUHJvcGVydGllc0NvdW50ICE9IG9i
amVjdC0+c2l6ZSgpKQotICAgICAgICBGQVRBTCgiVW5leHBlY3RlZCBwcm9wZXJ0aWVzIGluIG9i
amVjdDogJXNcbiIsIG9iamVjdC0+dG9KU09OU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOwotI2Vs
c2UgLy8gQVNTRVJUX0VOQUJMRUQKLSAgICBVTlVTRURfUEFSQU0odmFsdWUpOwotI2VuZGlmIC8v
IEFTU0VSVF9FTkFCTEVECi19Ci0KLVJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpU
eXBlTmVlZGluZ0Nhc3Q+IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6
VHlwZU5lZWRpbmdDYXN0Pjo6cnVudGltZUNhc3QoUmVmUHRyPEpTT046OlZhbHVlPiYmIHZhbHVl
KQotewotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHJlc3VsdDsKLSAgICBib29sIGNhc3RTdWNj
ZWVkZWQgPSB2YWx1ZS0+YXNPYmplY3QocmVzdWx0KTsKLSAgICBBU1NFUlRfVU5VU0VEKGNhc3RT
dWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQpOwotICAgIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5
cGUocmVzdWx0LmdldCgpKTsKLSAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoSW5zcGVjdG9yOjpQ
cm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0KSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0QmFz
ZSksIHR5cGVfY2FzdF9wcm9ibGVtKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SW5zcGVjdG9y
OjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0Kj4oc3RhdGljX2Nhc3Q8SlNPTjo6T2Jq
ZWN0QmFzZSo+KHJlc3VsdC5nZXQoKSkpOwotfQotCi0KLXZvaWQgQmluZGluZ1RyYWl0czxJbnNw
ZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QxPjo6YXNzZXJ0VmFsdWVIYXNF
eHBlY3RlZFR5cGUoSlNPTjo6VmFsdWUqIHZhbHVlKQotewotI2lmIEFTU0VSVF9FTkFCTEVECi0g
ICAgQVNTRVJUX0FSRyh2YWx1ZSwgdmFsdWUpOwotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG9i
amVjdDsKLSAgICBib29sIGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNPYmplY3Qob2JqZWN0KTsK
LSAgICBBU1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQpOwotCi0gICAg
aW50IGZvdW5kUHJvcGVydGllc0NvdW50ID0gMDsKLSAgICB7Ci0gICAgICAgIGF1dG8gb2JqUG9z
ID0gb2JqZWN0LT5maW5kKCJvYmoiX3MpOwotICAgICAgICBpZiAob2JqUG9zICE9IG9iamVjdC0+
ZW5kKCkpIHsKLSAgICAgICAgICAgIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6
VGVzdDo6UmVjdXJzaXZlT2JqZWN0Mj46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKG9ialBv
cy0+dmFsdWUuZ2V0KCkpOwotICAgICAgICAgICAgKytmb3VuZFByb3BlcnRpZXNDb3VudDsKLSAg
ICAgICAgfQotICAgIH0KLSAgICBpZiAoZm91bmRQcm9wZXJ0aWVzQ291bnQgIT0gb2JqZWN0LT5z
aXplKCkpCi0gICAgICAgIEZBVEFMKCJVbmV4cGVjdGVkIHByb3BlcnRpZXMgaW4gb2JqZWN0OiAl
c1xuIiwgb2JqZWN0LT50b0pTT05TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7Ci0jZWxzZSAvLyBB
U1NFUlRfRU5BQkxFRAotICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7Ci0jZW5kaWYgLy8gQVNTRVJU
X0VOQUJMRUQKLX0KLQotdm9pZCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRl
c3Q6OlJlY3Vyc2l2ZU9iamVjdDI+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShKU09OOjpW
YWx1ZSogdmFsdWUpCi17Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBBU1NFUlRfQVJHKHZhbHVl
LCB2YWx1ZSk7Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gb2JqZWN0OwotICAgIGJvb2wgY2Fz
dFN1Y2NlZWRlZCA9IHZhbHVlLT5hc09iamVjdChvYmplY3QpOwotICAgIEFTU0VSVF9VTlVTRUQo
Y2FzdFN1Y2NlZWRlZCwgY2FzdFN1Y2NlZWRlZCk7Ci0KLSAgICBpbnQgZm91bmRQcm9wZXJ0aWVz
Q291bnQgPSAwOwotICAgIHsKLSAgICAgICAgYXV0byBvYmpQb3MgPSBvYmplY3QtPmZpbmQoIm9i
aiJfcyk7Ci0gICAgICAgIGlmIChvYmpQb3MgIT0gb2JqZWN0LT5lbmQoKSkgewotICAgICAgICAg
ICAgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmpl
Y3QxPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUob2JqUG9zLT52YWx1ZS5nZXQoKSk7Ci0g
ICAgICAgICAgICArK2ZvdW5kUHJvcGVydGllc0NvdW50OwotICAgICAgICB9Ci0gICAgfQotICAg
IGlmIChmb3VuZFByb3BlcnRpZXNDb3VudCAhPSBvYmplY3QtPnNpemUoKSkKLSAgICAgICAgRkFU
QUwoIlVuZXhwZWN0ZWQgcHJvcGVydGllcyBpbiBvYmplY3Q6ICVzXG4iLCBvYmplY3QtPnRvSlNP
TlN0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKLSNlbHNlIC8vIEFTU0VSVF9FTkFCTEVECi0gICAg
VU5VU0VEX1BBUkFNKHZhbHVlKTsKLSNlbmRpZiAvLyBBU1NFUlRfRU5BQkxFRAotfQotCi19IC8v
IG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5Q
dHIuaD4KLQotCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLX0gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5o
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNh
c3RzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2lt
cG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMu
aCIKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW5jbHVkZSAiVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLQot
bmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9U
ZXN0UHJvdG9jb2wuaD4KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkp
Ci1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAotQGVuZAot
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24uaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNp
bXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotI2ltcG9ydCA8SmF2YVNj
cmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KLSNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLQotdXNpbmcg
bmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZp
Z3VyYXRpb24KLXsKLSAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9s
bGVyOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJs
ZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGlu
aXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29u
dHJvbGxlcik7Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxm
OwotfQotCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLUBl
bmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVz
dFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zLmgiCi0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5z
cGVjdG9yOwotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5t
bQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9G
b3VuZGF0aW9uLmg+Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmpl
Y3QuaD4KLQotCi1AY2xhc3MgVGVzdFByb3RvY29sVGVzdFR5cGVOZWVkaW5nQ2FzdDsKLUBjbGFz
cyBUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MTsKLUBjbGFzcyBUZXN0UHJvdG9jb2xU
ZXN0UmVjdXJzaXZlT2JqZWN0MjsKLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFBy
b3RvY29sUGxhdGZvcm0pIHsKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbCwKLSAgICBUZXN0
UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWMsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1JT1MsCi0g
ICAgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUywKLX07Ci0KLQotdHlwZWRlZiBOU19FTlVNKE5T
SW50ZWdlciwgVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFscykgewotICAgIFRlc3RQcm90
b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHNQaWdzLAotICAgIFRlc3RQcm90b2NvbFRlc3RVbmNhc3Rl
ZEFuaW1hbHNDb3dzLAotICAgIFRlc3RQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHNDYXRzLAot
ICAgIFRlc3RQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHNIZW5zLAotfTsKLQotdHlwZWRlZiBO
U19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHMpIHsKLSAgICBU
ZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFsc0R1Y2tzLAotICAgIFRlc3RQcm90b2NvbFRlc3RD
YXN0ZWRBbmltYWxzSGVucywKLSAgICBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFsc0Nyb3dz
LAotICAgIFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzRmxhbWluZ29zLAotfTsKLQotCi1f
X2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFBy
b3RvY29sVGVzdFR5cGVOZWVkaW5nQ2FzdCA6IFJXSVByb3RvY29sSlNPTk9iamVjdAotLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAq
KXBheWxvYWQ7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJv
dG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFN0
cmluZzooTlNTdHJpbmcgKilzdHJpbmcgbnVtYmVyOihpbnQpbnVtYmVyIGFuaW1hbHM6KFRlc3RQ
cm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzKWFuaW1hbHMgaWRlbnRpZmllcjooaW50KWlkZW50aWZp
ZXIgdHJlZTooVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgKil0cmVlOwotLyogcmVx
dWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICpzdHJpbmc7Ci0v
KiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQgbnVtYmVyOwot
LyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgVGVzdFByb3RvY29s
VGVzdENhc3RlZEFuaW1hbHMgYW5pbWFsczsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9u
YXRvbWljLCBhc3NpZ24pIGludCBpZGVudGlmaWVyOwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5
IChub25hdG9taWMsIHJldGFpbikgVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgKnRy
ZWU7Ci1AZW5kCi0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGlu
dGVyZmFjZSBUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSA6IFJXSVByb3RvY29sSlNP
Tk9iamVjdAotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5T
U3RyaW5nICosIGlkPiAqKXBheWxvYWQ7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2Nv
bE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKLS8qIG9wdGlvbmFs
ICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIFRlc3RQcm90b2NvbFRlc3RSZWN1cnNp
dmVPYmplY3QyICpvYmo7Ci1AZW5kCi0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZh
dWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MiA6IFJX
SVByb3RvY29sSlNPTk9iamVjdAotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNE
aWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQ7Ci0tIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsK
LS8qIG9wdGlvbmFsICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIFRlc3RQcm90b2Nv
bFRlc3RSZWN1cnNpdmVPYmplY3QxICpvYmo7Ci1AZW5kCi0KLQotCi0KLQotCi0jaW1wb3J0IDxX
ZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+Ci0KLSMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bEludGVybmFsLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVp
cmluZy1ydW50aW1lLWNhc3RzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2xKU09OT2JqZWN0UHJpdmF0ZS5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFi
bGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi0K
LQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5o
IgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgot
Ci1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBl
PgotT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5n
JiB2YWx1ZSk7Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xQ
bGF0Zm9ybSB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQcm90
b2NvbFBsYXRmb3JtQWxsOgotICAgICAgICByZXR1cm4gImFsbCJfczsKLSAgICBjYXNlIFRlc3RQ
cm90b2NvbFBsYXRmb3JtR2VuZXJpYzoKLSAgICAgICAgcmV0dXJuICJnZW5lcmljIl9zOwotICAg
IGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1JT1M6Ci0gICAgICAgIHJldHVybiAiaW9zIl9zOwot
ICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzoKLSAgICAgICAgcmV0dXJuICJtYWNv
cyJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJvdG9j
b2xQbGF0Zm9ybT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0g
ICAgaWYgKHZhbHVlID09ICJhbGwiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZv
cm1BbGw7Ci0gICAgaWYgKHZhbHVlID09ICJnZW5lcmljIikKLSAgICAgICAgcmV0dXJuIFRlc3RQ
cm90b2NvbFBsYXRmb3JtR2VuZXJpYzsKLSAgICBpZiAodmFsdWUgPT0gImlvcyIpCi0gICAgICAg
IHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzsKLSAgICBpZiAodmFsdWUgPT0gIm1hY29z
IikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M7Ci0gICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKLX0KLQotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVz
dFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFscyB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUp
IHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHNQaWdzOgotICAgICAg
ICByZXR1cm4gIlBpZ3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmlt
YWxzQ293czoKLSAgICAgICAgcmV0dXJuICJDb3dzIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29s
VGVzdFVuY2FzdGVkQW5pbWFsc0NhdHM6Ci0gICAgICAgIHJldHVybiAiQ2F0cyJfczsKLSAgICBj
YXNlIFRlc3RQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHNIZW5zOgotICAgICAgICByZXR1cm4g
IkhlbnMiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFBy
b3RvY29sVGVzdFVuY2FzdGVkQW5pbWFscz4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJQaWdzIikKLSAgICAgICAgcmV0dXJuIFRl
c3RQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHNQaWdzOwotICAgIGlmICh2YWx1ZSA9PSAiQ293
cyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzQ293czsK
LSAgICBpZiAodmFsdWUgPT0gIkNhdHMiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sVGVz
dFVuY2FzdGVkQW5pbWFsc0NhdHM7Ci0gICAgaWYgKHZhbHVlID09ICJIZW5zIikKLSAgICAgICAg
cmV0dXJuIFRlc3RQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHNIZW5zOwotICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7Ci19Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJv
dG9jb2xUZXN0Q2FzdGVkQW5pbWFscyB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAg
ICBjYXNlIFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzRHVja3M6Ci0gICAgICAgIHJldHVy
biAiRHVja3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFsc0hlbnM6
Ci0gICAgICAgIHJldHVybiAiSGVucyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFRlc3RDYXN0
ZWRBbmltYWxzQ3Jvd3M6Ci0gICAgICAgIHJldHVybiAiQ3Jvd3MiX3M7Ci0gICAgY2FzZSBUZXN0
UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFsc0ZsYW1pbmdvczoKLSAgICAgICAgcmV0dXJuICJGbGFt
aW5nb3MiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFBy
b3RvY29sVGVzdENhc3RlZEFuaW1hbHM+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcm
IHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiRHVja3MiKQotICAgICAgICByZXR1cm4gVGVz
dFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHNEdWNrczsKLSAgICBpZiAodmFsdWUgPT0gIkhlbnMi
KQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHNIZW5zOwotICAg
IGlmICh2YWx1ZSA9PSAiQ3Jvd3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sVGVzdENh
c3RlZEFuaW1hbHNDcm93czsKLSAgICBpZiAodmFsdWUgPT0gIkZsYW1pbmdvcyIpCi0gICAgICAg
IHJldHVybiBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFsc0ZsYW1pbmdvczsKLSAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucy5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbFR5cGVQYXJzZXIuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpT
T05PYmplY3RQcml2YXRlLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbnRl
cmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChUZXN0RG9tYWluKQotCi0rICh2b2lk
KV9wYXJzZVR5cGVOZWVkaW5nQ2FzdDooVGVzdFByb3RvY29sVGVzdFR5cGVOZWVkaW5nQ2FzdCAq
KilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLSsgKHZvaWQpX3BhcnNlQ2FzdGVk
T2JqZWN0SWQ6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwot
KyAodm9pZClfcGFyc2VVbmNhc3RlZE9iamVjdElkOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9t
UGF5bG9hZDooaWQpcGF5bG9hZDsKLSsgKHZvaWQpX3BhcnNlVW5jYXN0ZWRBbmltYWxzOihOU051
bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLSsgKHZvaWQpX3BhcnNl
Q2FzdGVkQW5pbWFsczooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxv
YWQ7Ci0rICh2b2lkKV9wYXJzZVJlY3Vyc2l2ZU9iamVjdDE6KFRlc3RQcm90b2NvbFRlc3RSZWN1
cnNpdmVPYmplY3QxICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotKyAodm9p
ZClfcGFyc2VSZWN1cnNpdmVPYmplY3QyOihUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0
MiAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLQotQGVuZAotCi1AaW1wbGVt
ZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChUZXN0RG9tYWluKQotCi0rICh2
b2lkKV9wYXJzZVR5cGVOZWVkaW5nQ2FzdDooVGVzdFByb3RvY29sVGVzdFR5cGVOZWVkaW5nQ2Fz
dCAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOwotICAgICpv
dXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sVGVzdFR5cGVOZWVkaW5nQ2FzdCBhbGxvY10gaW5pdFdp
dGhQYXlsb2FkOnBheWxvYWRdOwotfQotCi0rICh2b2lkKV9wYXJzZUNhc3RlZE9iamVjdElkOihO
U051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TTnVtYmVyIGNsYXNzXSk7Ci0gICAg
Km91dFZhbHVlID0gKE5TTnVtYmVyICopcGF5bG9hZDsKLX0KLQotKyAodm9pZClfcGFyc2VVbmNh
c3RlZE9iamVjdElkOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9h
ZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TTnVtYmVy
IGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gKE5TTnVtYmVyICopcGF5bG9hZDsKLX0KLQotKyAo
dm9pZClfcGFyc2VVbmNhc3RlZEFuaW1hbHM6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXls
b2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXls
b2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKLSAgICBPcHRpb25hbDxUZXN0UHJvdG9jb2xUZXN0VW5j
YXN0ZWRBbmltYWxzPiByZXN1bHQgPSBJbnNwZWN0b3I6OmZyb21Qcm90b2NvbFN0cmluZzxUZXN0
UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzPihwYXlsb2FkKTsKLSAgICBUSFJPV19FWENFUFRJ
T05fRk9SX0JBRF9FTlVNX1ZBTFVFKHJlc3VsdCwgQCJVbmNhc3RlZEFuaW1hbHMiKTsKLSAgICAq
b3V0VmFsdWUgPSBAKHJlc3VsdC52YWx1ZSgpKTsKLX0KLQotKyAodm9pZClfcGFyc2VDYXN0ZWRB
bmltYWxzOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewot
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TU3RyaW5nIGNsYXNz
XSk7Ci0gICAgT3B0aW9uYWw8VGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHM+IHJlc3VsdCA9
IEluc3BlY3Rvcjo6ZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmlt
YWxzPihwYXlsb2FkKTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9FTlVNX1ZBTFVFKHJl
c3VsdCwgQCJDYXN0ZWRBbmltYWxzIik7Ci0gICAgKm91dFZhbHVlID0gQChyZXN1bHQudmFsdWUo
KSk7Ci19Ci0KLSsgKHZvaWQpX3BhcnNlUmVjdXJzaXZlT2JqZWN0MTooVGVzdFByb3RvY29sVGVz
dFJlY3Vyc2l2ZU9iamVjdDEgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsK
LSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkg
Y2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmpl
Y3QxIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07Ci19Ci0KLSsgKHZvaWQpX3BhcnNl
UmVjdXJzaXZlT2JqZWN0MjooVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDIgKiopb3V0
VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9S
X0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUg
PSBbW1Rlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QyIGFsbG9jXSBpbml0V2l0aFBheWxv
YWQ6cGF5bG9hZF07Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0K
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1l
LWNhc3RzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09O
T2JqZWN0UHJpdmF0ZS5oPgotI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQgPHd0
Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotQGltcGxl
bWVudGF0aW9uIFRlc3RQcm90b2NvbFRlc3RUeXBlTmVlZGluZ0Nhc3QKLQotLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+
ICopcGF5bG9hZAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICBy
ZXR1cm4gbmlsOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShw
YXlsb2FkW0Aic3RyaW5nIl0sIEAic3RyaW5nIik7Ci0gICAgc2VsZi5zdHJpbmcgPSBwYXlsb2Fk
W0Aic3RyaW5nIl07Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZ
KHBheWxvYWRbQCJudW1iZXIiXSwgQCJudW1iZXIiKTsKLSAgICBzZWxmLm51bWJlciA9IFtwYXls
b2FkW0AibnVtYmVyIl0gaW50ZWdlclZhbHVlXTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
UkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImFuaW1hbHMiXSwgQCJhbmltYWxzIik7Ci0gICAg
T3B0aW9uYWw8VGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHM+IGFuaW1hbHMgPSBmcm9tUHJv
dG9jb2xTdHJpbmc8VGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHM+KHBheWxvYWRbQCJhbmlt
YWxzIl0pOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX0VOVU1fVkFMVUUoYW5pbWFscywg
QCJhbmltYWxzIik7Ci0gICAgc2VsZi5hbmltYWxzID0gYW5pbWFscy52YWx1ZSgpOwotCi0gICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiaWQiXSwgQCJp
ZCIpOwotICAgIHNlbGYuaWRlbnRpZmllciA9IFtwYXlsb2FkW0AiaWQiXSBpbnRlZ2VyVmFsdWVd
OwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0Ai
dHJlZSJdLCBAInRyZWUiKTsKLSAgICBzZWxmLnRyZWUgPSBbW1Rlc3RQcm90b2NvbFRlc3RSZWN1
cnNpdmVPYmplY3QxIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZFtAInRyZWUiXV07Ci0K
LSAgICByZXR1cm4gc2VsZjsKLX0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2Jq
ZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilvYmplY3QKLXsKLSAgICBpZiAoIShzZWxmID0g
W3N1cGVyIGluaXRXaXRoSlNPTk9iamVjdDpbb2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0KCldKSkK
LSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nIG51bWJlcjooaW50KW51bWJl
ciBhbmltYWxzOihUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFscylhbmltYWxzIGlkZW50aWZp
ZXI6KGludClpZGVudGlmaWVyIHRyZWU6KFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3Qx
ICopdHJlZQotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1
cm4gbmlsOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShzdHJp
bmcsIEAic3RyaW5nIik7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJU
WSh0cmVlLCBAInRyZWUiKTsKLQotICAgIHNlbGYuc3RyaW5nID0gc3RyaW5nOwotICAgIHNlbGYu
bnVtYmVyID0gbnVtYmVyOwotICAgIHNlbGYuYW5pbWFscyA9IGFuaW1hbHM7Ci0gICAgc2VsZi5p
ZGVudGlmaWVyID0gaWRlbnRpZmllcjsKLSAgICBzZWxmLnRyZWUgPSB0cmVlOwotCi0gICAgcmV0
dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpc2V0U3RyaW5nOihOU1N0cmluZyAqKXN0cmluZwotewot
ICAgIFtzdXBlciBzZXRTdHJpbmc6c3RyaW5nIGZvcktleTpAInN0cmluZyJdOwotfQotCi0tIChO
U1N0cmluZyAqKXN0cmluZwotewotICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAic3Ry
aW5nIl07Ci19Ci0KLS0gKHZvaWQpc2V0TnVtYmVyOihpbnQpbnVtYmVyCi17Ci0gICAgW3N1cGVy
IHNldEludGVnZXI6bnVtYmVyIGZvcktleTpAIm51bWJlciJdOwotfQotCi0tIChpbnQpbnVtYmVy
Ci17Ci0gICAgcmV0dXJuIFtzdXBlciBpbnRlZ2VyRm9yS2V5OkAibnVtYmVyIl07Ci19Ci0KLS0g
KHZvaWQpc2V0QW5pbWFsczooVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHMpYW5pbWFscwot
ewotICAgIFtzdXBlciBzZXRTdHJpbmc6dG9Qcm90b2NvbFN0cmluZyhhbmltYWxzKSBmb3JLZXk6
QCJhbmltYWxzIl07Ci19Ci0KLS0gKFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzKWFuaW1h
bHMKLXsKLSAgICByZXR1cm4gZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbFRlc3RDYXN0
ZWRBbmltYWxzPihbc3VwZXIgc3RyaW5nRm9yS2V5OkAiYW5pbWFscyJdKS52YWx1ZSgpOwotfQot
Ci0tICh2b2lkKXNldElkZW50aWZpZXI6KGludClpZGVudGlmaWVyCi17Ci0gICAgW3N1cGVyIHNl
dEludGVnZXI6aWRlbnRpZmllciBmb3JLZXk6QCJpZCJdOwotfQotCi0tIChpbnQpaWRlbnRpZmll
cgotewotICAgIHJldHVybiBbc3VwZXIgaW50ZWdlckZvcktleTpAImlkIl07Ci19Ci0KLS0gKHZv
aWQpc2V0VHJlZTooVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgKil0cmVlCi17Ci0g
ICAgW3N1cGVyIHNldE9iamVjdDp0cmVlIGZvcktleTpAInRyZWUiXTsKLX0KLQotLSAoVGVzdFBy
b3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgKil0cmVlCi17Ci0gICAgUldJUHJvdG9jb2xKU09O
T2JqZWN0ICpvYmplY3QgPSBbc3VwZXIgb2JqZWN0Rm9yS2V5OkAidHJlZSJdOwotICAgIGlmICgh
b2JqZWN0KQotICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiBbW1Rlc3RQcm90b2NvbFRl
c3RSZWN1cnNpdmVPYmplY3QxIGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6W1tzdXBlciBvYmpl
Y3RGb3JLZXk6QCJ0cmVlIl0gdG9KU09OT2JqZWN0XS5nZXQoKV07Ci19Ci0KLUBlbmQKLQotQGlt
cGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxCi0KLS0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICos
IGlkPiAqKXBheWxvYWQKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAg
ICAgcmV0dXJuIG5pbDsKLQotICAgIHNlbGYub2JqID0gW1tUZXN0UHJvdG9jb2xUZXN0UmVjdXJz
aXZlT2JqZWN0MiBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRbQCJvYmoiXV07Ci0KLSAg
ICByZXR1cm4gc2VsZjsKLX0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0
OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilvYmplY3QKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1
cGVyIGluaXRXaXRoSlNPTk9iamVjdDpbb2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0KCldKSkKLSAg
ICAgICAgcmV0dXJuIG5pbDsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKXNldE9i
ajooVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDIgKilvYmoKLXsKLSAgICBbc3VwZXIg
c2V0T2JqZWN0Om9iaiBmb3JLZXk6QCJvYmoiXTsKLX0KLQotLSAoVGVzdFByb3RvY29sVGVzdFJl
Y3Vyc2l2ZU9iamVjdDIgKilvYmoKLXsKLSAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9iamVj
dCA9IFtzdXBlciBvYmplY3RGb3JLZXk6QCJvYmoiXTsKLSAgICBpZiAoIW9iamVjdCkKLSAgICAg
ICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4gW1tUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2Jq
ZWN0MiBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0Oltbc3VwZXIgb2JqZWN0Rm9yS2V5OkAib2Jq
Il0gdG9KU09OT2JqZWN0XS5nZXQoKV07Ci19Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFRl
c3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QyCi0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0
aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQK
LXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsK
LQotICAgIHNlbGYub2JqID0gW1tUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSBhbGxv
Y10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRbQCJvYmoiXV07Ci0KLSAgICByZXR1cm4gc2VsZjsK
LX0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpT
T05PYmplY3QgKilvYmplY3QKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoSlNP
Tk9iamVjdDpbb2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0KCldKSkKLSAgICAgICAgcmV0dXJuIG5p
bDsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKXNldE9iajooVGVzdFByb3RvY29s
VGVzdFJlY3Vyc2l2ZU9iamVjdDEgKilvYmoKLXsKLSAgICBbc3VwZXIgc2V0T2JqZWN0Om9iaiBm
b3JLZXk6QCJvYmoiXTsKLX0KLQotLSAoVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEg
KilvYmoKLXsKLSAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9iamVjdCA9IFtzdXBlciBvYmpl
Y3RGb3JLZXk6QCJvYmoiXTsKLSAgICBpZiAoIW9iamVjdCkKLSAgICAgICAgcmV0dXJuIG5pbDsK
LSAgICByZXR1cm4gW1tUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSBhbGxvY10gaW5p
dFdpdGhKU09OT2JqZWN0Oltbc3VwZXIgb2JqZWN0Rm9yS2V5OkAib2JqIl0gdG9KU09OT2JqZWN0
XS5nZXQoKV07Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVz
Lm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy9leHBlY3RlZC90eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24tcmVz
dWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVy
aWMvZXhwZWN0ZWQvdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uLXJlc3VsdApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTQzMGVkZTUwOGIuLjAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVj
dGVkL3R5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQKKysrIC9kZXYvbnVsbApA
QCAtMSwxMTY0ICswLDAgQEAKLSMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFu
ZHMuanMKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXdpdGgtb3Blbi1w
YXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LSMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQotI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbFR5cGVzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVu
ZFJvdXRlci5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgQWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIo
UmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0
Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KLSAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFj
a2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgp
OyB9Ci1wcml2YXRlOgotICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlz
cGF0Y2hlcjsKLX07Ci0KLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jZW5kaWYg
Ly8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jIyMgRW5kIEZpbGU6
IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
dHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29s
T2JqZWN0cy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJ
bnNwZWN0b3IgewotCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQotCi0KLX0gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgK
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9K
U09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCi0jaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgot
I2VuZGlmCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNs
dWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7
Ci0KLWNsYXNzIEZyb250ZW5kUm91dGVyOwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMj
IyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJU
ZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0K
LW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMj
IEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbE9iamVjdHMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5o
PgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0K
LQotCi0vLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KLW5hbWVzcGFjZSBUZXN0IHsKLWNsYXNzIE5v
T3BlblBhcmFtZXRlcnM7Ci1jbGFzcyBPcGVuUGFyYW1ldGVyczsKLX0gLy8gVGVzdAotLy8gRW5k
IG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgotCi0KLQotCi1uYW1lc3BhY2UgVGVzdCB7Ci1jbGFz
cyBOb09wZW5QYXJhbWV0ZXJzIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewotcHVibGljOgot
ICAgIGVudW0gewotICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCi0gICAgICAgIE9uZVNldCA9IDEg
PDwgMCwKLSAgICAgICAgVHdvU2V0ID0gMSA8PCAxLAotICAgICAgICBBbGxGaWVsZHNTZXQgPSAo
T25lU2V0IHwgVHdvU2V0KQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+Ci0gICAg
Y2xhc3MgQnVpbGRlciB7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVj
dD4gbV9yZXN1bHQ7Ci0KLSAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUg
fCBTVEVQPiYgY2FzdFN0YXRlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICpyZWlu
dGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwotICAgICAgICB9Ci0K
LSAgICAgICAgQnVpbGRlcihSZWY8LypOb09wZW5QYXJhbWV0ZXJzKi9KU09OOjpPYmplY3Q+JiYg
b2JqZWN0KQotICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWls
ZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwotICAgICAgICB9Ci0gICAgICAgIGZyaWVu
ZCBjbGFzcyBOb09wZW5QYXJhbWV0ZXJzOwotICAgIHB1YmxpYzoKLQotICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgT25lU2V0PiYgc2V0T25lKGRvdWJsZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE9uZVNldCksIHByb3BlcnR5X29uZV9hbHJl
YWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0RG91YmxlKCJvbmUiX3MsIHZhbHVl
KTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8T25lU2V0PigpOwotICAgICAgICB9Ci0K
LSAgICAgICAgQnVpbGRlcjxTVEFURSB8IFR3b1NldD4mIHNldFR3byhkb3VibGUgdmFsdWUpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUd29TZXQpLCBw
cm9wZXJ0eV90d29fYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldERvdWJs
ZSgidHdvIl9zLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFR3b1NldD4o
KTsKLSAgICAgICAgfQotCi0gICAgICAgIFJlZjxOb09wZW5QYXJhbWV0ZXJzPiByZWxlYXNlKCkK
LSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRz
U2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNp
emVvZihOb09wZW5QYXJhbWV0ZXJzKSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0KSwgY2Fubm90X2Nh
c3QpOwotCi0gICAgICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uUmVzdWx0ID0gbV9yZXN1
bHQucmVsZWFzZU5vbk51bGwoKTsKLSAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gV1RGTW92ZSgq
cmVpbnRlcnByZXRfY2FzdDxSZWY8Tm9PcGVuUGFyYW1ldGVycz4qPigmanNvblJlc3VsdCkpOwot
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICAvKgot
ICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKLSAgICAgKiBSZWY8Tm9PcGVuUGFyYW1ldGVy
cz4gcmVzdWx0ID0gTm9PcGVuUGFyYW1ldGVyczo6Y3JlYXRlKCkKLSAgICAgKiAgICAgLnNldE9u
ZSguLi4pCi0gICAgICogICAgIC5zZXRUd28oLi4uKQotICAgICAqICAgICAucmVsZWFzZSgpOwot
ICAgICAqLwotICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRl
KCkpOwotICAgIH0KLX07Ci0KLWNsYXNzIE9wZW5QYXJhbWV0ZXJzIDogcHVibGljIEpTT046Ok9i
amVjdCB7Ci1wdWJsaWM6Ci0gICAgZW51bSB7Ci0gICAgICAgIE5vRmllbGRzU2V0ID0gMCwKLSAg
ICAgICAgQWxwaGFTZXQgPSAxIDw8IDAsCi0gICAgICAgIEJldGFTZXQgPSAxIDw8IDEsCi0gICAg
ICAgIEFsbEZpZWxkc1NldCA9IChBbHBoYVNldCB8IEJldGFTZXQpCi0gICAgfTsKLQotICAgIHRl
bXBsYXRlPGludCBTVEFURT4KLSAgICBjbGFzcyBCdWlsZGVyIHsKLSAgICBwcml2YXRlOgotICAg
ICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBtX3Jlc3VsdDsKLQotICAgICAgICB0ZW1wbGF0ZTxp
bnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+
Kj4odGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyKFJlZjwvKk9wZW5QYXJhbWV0
ZXJzKi9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQotICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZN
b3ZlKG9iamVjdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRF
ID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwotICAg
ICAgICB9Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBPcGVuUGFyYW1ldGVyczsKLSAgICBwdWJsaWM6
Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IEFscGhhU2V0PiYgc2V0QWxwaGEoZG91YmxlIHZh
bHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQWxw
aGFTZXQpLCBwcm9wZXJ0eV9hbHBoYV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0RG91YmxlKCJhbHBoYSJfcywgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxBbHBoYVNldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBC
ZXRhU2V0PiYgc2V0QmV0YShkb3VibGUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBCZXRhU2V0KSwgcHJvcGVydHlfYmV0YV9hbHJlYWR5X3Nl
dCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0RG91YmxlKCJiZXRhIl9zLCB2YWx1ZSk7Ci0g
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEJldGFTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBSZWY8T3BlblBhcmFtZXRlcnM+IHJlbGVhc2UoKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVh
ZHkpOwotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKE9wZW5QYXJhbWV0ZXJzKSA9
PSBzaXplb2YoSlNPTjo6T2JqZWN0KSwgY2Fubm90X2Nhc3QpOwotCi0gICAgICAgICAgICBSZWY8
SlNPTjo6T2JqZWN0PiBqc29uUmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKLSAg
ICAgICAgICAgIGF1dG8gcmVzdWx0ID0gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8T3Bl
blBhcmFtZXRlcnM+Kj4oJmpzb25SZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgLyoKLSAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0
b3I6Ci0gICAgICogUmVmPE9wZW5QYXJhbWV0ZXJzPiByZXN1bHQgPSBPcGVuUGFyYW1ldGVyczo6
Y3JlYXRlKCkKLSAgICAgKiAgICAgLnNldEFscGhhKC4uLikKLSAgICAgKiAgICAgLnNldEJldGEo
Li4uKQotICAgICAqICAgICAucmVsZWFzZSgpOwotICAgICAqLwotICAgIHN0YXRpYyBCdWlsZGVy
PE5vRmllbGRzU2V0PiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9G
aWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOwotICAgIH0KLQotICAgIC8vIFByb3Bl
cnR5IG5hbWVzIGZvciB0eXBlIGdlbmVyYXRlZCBhcyBvcGVuLgotICAgIE5vbmUgc3RhdGljIGNv
bnN0IGNoYXIqIEFscGhhOwotfTsKLQotfSAvLyBUZXN0Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBQ
cm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sT2JqZWN0cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNw
cAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtd2l0aC1vcGVuLXBhcmFt
ZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotCi0j
aW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgot
Ci1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotY29uc3Qg
Y2hhciogSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6T3BlblBhcmFtZXRlcnM6OkFscGhhID0g
ImFscGhhIjsKLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbmNsdWRl
IDx3dGYvUmV0YWluUHRyLmg+Ci0KLQotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi19IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5k
RGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3Bh
dGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRoLW9w
ZW4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERp
c3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2luY2x1
ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFs
dWVzLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLQot
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxXZWJJbnNw
ZWN0b3IvVGVzdFByb3RvY29sLmg+Ci0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZh
dWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QK
LUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJv
dG9jb2xDb25maWd1cmF0aW9uLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgi
Ci0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+Ci0jaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2lt
cG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0KLXVz
aW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xD
b25maWd1cmF0aW9uCi17Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29u
dHJvbGxlcjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVu
dGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtzdXBl
ciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJU
KGNvbnRyb2xsZXIpOwotICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1cm4g
c2VsZjsKLX0KLQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQot
Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRl
c3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucy5oIgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIElu
c3BlY3RvcjsKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMu
bW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91
bmRhdGlvbi5oPgotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0
Lmg+Ci0KLQotQGNsYXNzIFRlc3RQcm90b2NvbFRlc3ROb09wZW5QYXJhbWV0ZXJzOwotQGNsYXNz
IFRlc3RQcm90b2NvbFRlc3RPcGVuUGFyYW1ldGVyczsKLQotdHlwZWRlZiBOU19FTlVNKE5TSW50
ZWdlciwgVGVzdFByb3RvY29sUGxhdGZvcm0pIHsKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFs
bCwKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWMsCi0gICAgVGVzdFByb3RvY29sUGxh
dGZvcm1JT1MsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUywKLX07Ci0KLQotCi0KLV9f
YXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJv
dG9jb2xUZXN0Tm9PcGVuUGFyYW1ldGVycyA6IFJXSVByb3RvY29sSlNPTk9iamVjdAotLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAq
KXBheWxvYWQ7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJv
dG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aE9u
ZTooZG91YmxlKW9uZSB0d286KGRvdWJsZSl0d287Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkg
KG5vbmF0b21pYywgYXNzaWduKSBkb3VibGUgb25lOwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5
IChub25hdG9taWMsIGFzc2lnbikgZG91YmxlIHR3bzsKLUBlbmQKLQotX19hdHRyaWJ1dGVfXygo
dmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbFRlc3RPcGVu
UGFyYW1ldGVycyA6IFJXSVByb3RvY29sSlNPTk9iamVjdAotLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQ7Ci0tIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0
ICopanNvbk9iamVjdDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aEFscGhhOihkb3VibGUpYWxw
aGEgYmV0YTooZG91YmxlKWJldGE7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21p
YywgYXNzaWduKSBkb3VibGUgYWxwaGE7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0
b21pYywgYXNzaWduKSBkb3VibGUgYmV0YTsKLUBlbmQKLQotCi0KLQotCi0KLSNpbXBvcnQgPFdl
Ykluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4KLQotIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
SW50ZXJuYWwuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtd2l0aC1v
cGVuLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEpT
T05PYmplY3RQcml2YXRlLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUlu
c3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLQotCi0K
LSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSB0eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1w
b3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+Ci0KLW5hbWVz
cGFjZSBJbnNwZWN0b3IgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+Ci1PcHRp
b25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVl
KTsKLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFBsYXRmb3Jt
IHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sUGxh
dGZvcm1BbGw6Ci0gICAgICAgIHJldHVybiAiYWxsIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29s
UGxhdGZvcm1HZW5lcmljOgotICAgICAgICByZXR1cm4gImdlbmVyaWMiX3M7Ci0gICAgY2FzZSBU
ZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzoKLSAgICAgICAgcmV0dXJuICJpb3MiX3M7Ci0gICAgY2Fz
ZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOgotICAgICAgICByZXR1cm4gIm1hY29zIl9zOwot
ICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFBsYXRm
b3JtPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAo
dmFsdWUgPT0gImFsbCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDsK
LSAgICBpZiAodmFsdWUgPT0gImdlbmVyaWMiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29s
UGxhdGZvcm1HZW5lcmljOwotICAgIGlmICh2YWx1ZSA9PSAiaW9zIikKLSAgICAgICAgcmV0dXJu
IFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOwotICAgIGlmICh2YWx1ZSA9PSAibWFjb3MiKQotICAg
ICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzsKLSAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwotfQotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xU
eXBlUGFyc2VyLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0
UHJpdmF0ZS5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW50ZXJmYWNlIFRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoVGVzdERvbWFpbikKLQotKyAodm9pZClfcGFyc2VO
b09wZW5QYXJhbWV0ZXJzOihUZXN0UHJvdG9jb2xUZXN0Tm9PcGVuUGFyYW1ldGVycyAqKilvdXRW
YWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLSsgKHZvaWQpX3BhcnNlT3BlblBhcmFtZXRl
cnM6KFRlc3RQcm90b2NvbFRlc3RPcGVuUGFyYW1ldGVycyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9h
ZDooaWQpcGF5bG9hZDsKLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zIChUZXN0RG9tYWluKQotCi0rICh2b2lkKV9wYXJzZU5vT3BlblBhcmFtZXRl
cnM6KFRlc3RQcm90b2NvbFRlc3ROb09wZW5QYXJhbWV0ZXJzICoqKW91dFZhbHVlIGZyb21QYXls
b2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXls
b2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9j
b2xUZXN0Tm9PcGVuUGFyYW1ldGVycyBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOwot
fQotCi0rICh2b2lkKV9wYXJzZU9wZW5QYXJhbWV0ZXJzOihUZXN0UHJvdG9jb2xUZXN0T3BlblBh
cmFtZXRlcnMgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJP
V19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsK
LSAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbFRlc3RPcGVuUGFyYW1ldGVycyBhbGxvY10g
aW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbFR5cGVzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRo
LW9wZW4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVBy
b3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLSNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0j
aW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwot
Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUZXN0Tm9PcGVuUGFyYW1ldGVycwotCi0t
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0
cmluZyAqLCBpZD4gKilwYXlsb2FkCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkp
Ci0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVE
X1BST1BFUlRZKHBheWxvYWRbQCJvbmUiXSwgQCJvbmUiKTsKLSAgICBzZWxmLm9uZSA9IFtwYXls
b2FkW0Aib25lIl0gZG91YmxlVmFsdWVdOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFV
SVJFRF9QUk9QRVJUWShwYXlsb2FkW0AidHdvIl0sIEAidHdvIik7Ci0gICAgc2VsZi50d28gPSBb
cGF5bG9hZFtAInR3byJdIGRvdWJsZVZhbHVlXTsKLQotICAgIHJldHVybiBzZWxmOwotfQotLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVj
dCAqKW9iamVjdAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0
OltvYmplY3QgdG9KU09OT2JqZWN0XS5nZXQoKV0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0g
ICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aE9uZTooZG91Ymxl
KW9uZSB0d286KGRvdWJsZSl0d28KLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkK
LSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIHNlbGYub25lID0gb25lOwotICAgIHNlbGYudHdv
ID0gdHdvOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpc2V0T25lOihkb3VibGUp
b25lCi17Ci0gICAgW3N1cGVyIHNldERvdWJsZTpvbmUgZm9yS2V5OkAib25lIl07Ci19Ci0KLS0g
KGRvdWJsZSlvbmUKLXsKLSAgICByZXR1cm4gW3N1cGVyIGRvdWJsZUZvcktleTpAIm9uZSJdOwot
fQotCi0tICh2b2lkKXNldFR3bzooZG91YmxlKXR3bwotewotICAgIFtzdXBlciBzZXREb3VibGU6
dHdvIGZvcktleTpAInR3byJdOwotfQotCi0tIChkb3VibGUpdHdvCi17Ci0gICAgcmV0dXJuIFtz
dXBlciBkb3VibGVGb3JLZXk6QCJ0d28iXTsKLX0KLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24g
VGVzdFByb3RvY29sVGVzdE9wZW5QYXJhbWV0ZXJzCi0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0
aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQK
LXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsK
LQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImFs
cGhhIl0sIEAiYWxwaGEiKTsKLSAgICBzZWxmLmFscGhhID0gW3BheWxvYWRbQCJhbHBoYSJdIGRv
dWJsZVZhbHVlXTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFko
cGF5bG9hZFtAImJldGEiXSwgQCJiZXRhIik7Ci0gICAgc2VsZi5iZXRhID0gW3BheWxvYWRbQCJi
ZXRhIl0gZG91YmxlVmFsdWVdOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0tIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopb2JqZWN0
Ci17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEpTT05PYmplY3Q6W29iamVjdCB0
b0pTT05PYmplY3RdLmdldCgpXSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICByZXR1cm4g
c2VsZjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQWxwaGE6KGRvdWJsZSlhbHBoYSBi
ZXRhOihkb3VibGUpYmV0YQotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAg
ICAgICByZXR1cm4gbmlsOwotCi0gICAgc2VsZi5hbHBoYSA9IGFscGhhOwotICAgIHNlbGYuYmV0
YSA9IGJldGE7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClzZXRBbHBoYTooZG91
YmxlKWFscGhhCi17Ci0gICAgW3N1cGVyIHNldERvdWJsZTphbHBoYSBmb3JLZXk6QCJhbHBoYSJd
OwotfQotCi0tIChkb3VibGUpYWxwaGEKLXsKLSAgICByZXR1cm4gW3N1cGVyIGRvdWJsZUZvcktl
eTpAImFscGhhIl07Ci19Ci0KLS0gKHZvaWQpc2V0QmV0YTooZG91YmxlKWJldGEKLXsKLSAgICBb
c3VwZXIgc2V0RG91YmxlOmJldGEgZm9yS2V5OkAiYmV0YSJdOwotfQotCi0tIChkb3VibGUpYmV0
YQotewotICAgIHJldHVybiBbc3VwZXIgZG91YmxlRm9yS2V5OkAiYmV0YSJdOwotfQotCi1AZW5k
Ci0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0
ZWQvdmVyc2lvbi5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3ZlcnNpb24uanNvbi1yZXN1bHQKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0ZTg3ZGM0NzM5Li4wMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBl
Y3RlZC92ZXJzaW9uLmpzb24tcmVzdWx0CisrKyAvZGV2L251bGwKQEAgLTEsODgwICswLDAgQEAK
LSMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotLy8gVmVyc2lvbkRvbWFpbgotSW5zcGVjdG9yQmFja2Vu
ZC5yZWdpc3RlckRvbWFpbigiVmVyc2lvbkRvbWFpbiIsIG51bGwpOwotSW5zcGVjdG9yQmFja2Vu
ZC5yZWdpc3RlclZlcnNpb24oIlZlcnNpb25Eb21haW4iLCA0Mik7Ci1JbnNwZWN0b3JCYWNrZW5k
LmFjdGl2YXRlRG9tYWluKCJWZXJzaW9uRG9tYWluIiwgbnVsbCk7Ci0jIyMgRW5kIEZpbGU6IElu
c3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
dmVyc2lvbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgotI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7
Ci0KLWNsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2b2lk
IHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRj
aGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9Ci0gICAg
QmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9i
YWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQotcHJpdmF0ZToKLSAgICBSZWZQdHI8QmFja2VuZERp
c3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Ci19OwotCi0KLQotCi19IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKLQotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQotIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgK
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHZlcnNpb24uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90
b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKLQotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KLQotCi19IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVy
cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHZlcnNpb24uanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgot
I2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotI2lu
Y2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNlbmRpZgotCi1uYW1l
c3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMg
RW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gdmVyc2lvbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2lu
Y2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBGcm9udGVuZFJvdXRlcjsKLQotfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNo
ZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHZlcnNpb24uanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSB2ZXJzaW9uLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFtZXNw
YWNlIEluc3BlY3RvciB7Ci0KLQotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0vLyBWZXJzaW9u
cy4KLW5hbWVzcGFjZSBWZXJzaW9uRG9tYWluIHsKLXN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQg
VkVSU0lPTiA9IDQyOwotfSAvLyBWZXJzaW9uRG9tYWluCi0vLyBFbmQgb2YgdmVyc2lvbnMuCi0K
LQotCi0KLQotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9i
amVjdHMuaCIKLQotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLW5hbWVzcGFjZSBQcm90b2Nv
bCB7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4K
LQotCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJU
ZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bEludGVybmFsLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0j
aW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLX0g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tl
bmREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJh
dGlvbi5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lvbi5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPFdlYklu
c3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRl
ZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVj
dAotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lvbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRp
b24uaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0
ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21l
bnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIElu
c3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KLXsK
LSAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotfQotCi0t
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNv
bnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlm
ICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0g
ICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2
b2lkKWRlYWxsb2MKLXsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLUBlbmQKLQotCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAi
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5o
PgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
LmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8Rm91bmRhdGlv
bi9Gb3VuZGF0aW9uLmg+Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05P
YmplY3QuaD4KLQotCi0KLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29s
UGxhdGZvcm0pIHsKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbCwKLSAgICBUZXN0UHJvdG9j
b2xQbGF0Zm9ybUdlbmVyaWMsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1JT1MsCi0gICAgVGVz
dFByb3RvY29sUGxhdGZvcm1NYWNPUywKLX07Ci0KLQotCi0KLQotCi0KLQotCi0KLSNpbXBvcnQg
PFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4KLQot
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHZlcnNpb24u
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0
ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRl
LmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xs
ZXIuaD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLQotCi0KLSMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sSW50ZXJuYWwuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9u
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9y
dCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJh
eUNvbnZlcnNpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBPYmpDRW51bVR5cGU+Ci1PcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0
cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3Ry
aW5nKFRlc3RQcm90b2NvbFBsYXRmb3JtIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewot
ICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1BbGw6Ci0gICAgICAgIHJldHVybiAiYWxsIl9z
OwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOgotICAgICAgICByZXR1cm4g
ImdlbmVyaWMiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzoKLSAgICAgICAg
cmV0dXJuICJpb3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOgotICAg
ICAgICByZXR1cm4gIm1hY29zIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9w
dGlvbmFsPFRlc3RQcm90b2NvbFBsYXRmb3JtPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gImFsbCIpCi0gICAgICAgIHJldHVybiBU
ZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDsKLSAgICBpZiAodmFsdWUgPT0gImdlbmVyaWMiKQotICAg
ICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOwotICAgIGlmICh2YWx1ZSA9
PSAiaW9zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOwotICAgIGlm
ICh2YWx1ZSA9PSAibWFjb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1N
YWNPUzsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lvbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucy5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2Nv
bFR5cGVQYXJzZXIuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmpl
Y3RQcml2YXRlLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotCi0KLQotCi0j
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSB2ZXJzaW9uLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9j
b2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbXBv
cnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQot
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1jb21t
YW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24gYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9u
LWNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDZkZjllNGJkOWMuLjAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2ZhaWwtb24tY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlw
ZS5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi1bCi17Ci0gICAgImRvbWFpbiI6
ICJEb21haW4iLAotICAgICJkZWJ1Z2dhYmxlVHlwZXMiOiBbImphdmFzY3JpcHQiXSwKLSAgICAi
dGFyZ2V0VHlwZXMiOiBbIndvcmtlciJdLAotICAgICJjb21tYW5kcyI6IFt7Im5hbWUiOiAiQ29t
bWFuZCJ9XSwKLSAgICAiZXZlbnRzIjogW3sibmFtZSI6ICJFdmVudCJ9XQotfQotXQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVy
aWMvZmFpbC1vbi1jb21tYW5kLXRhcmdldFR5cGVzLXR5cGUuanNvbiBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tY29tbWFuZC10
YXJnZXRUeXBlcy10eXBlLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0MDU5
Zjg0YmNmLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlwZXMtdHlwZS5q
c29uCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi17Ci0gICAgImRvbWFpbiI6ICJEb21h
aW4iLAotICAgICJjb21tYW5kcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAi
UGFnZU9ubHkiLAotICAgICAgICAgICAgInRhcmdldFR5cGVzIjogInBhZ2VlIgotICAgICAgICB9
Ci0gICAgXQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1jb21tYW5kLXRhcmdldFR5cGVzLXZhbHVlLmpz
b24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJp
Yy9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlwZXMtdmFsdWUuanNvbgpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNTAyMDQ0NzJlYzguLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tY29tbWFu
ZC10YXJnZXRUeXBlcy12YWx1ZS5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi17
Ci0gICAgImRvbWFpbiI6ICJEb21haW4iLAotICAgICJjb21tYW5kcyI6IFsKLSAgICAgICAgewot
ICAgICAgICAgICAgIm5hbWUiOiAiUGFnZU9ubHkiLAotICAgICAgICAgICAgInRhcmdldFR5cGVz
IjogWyJwYWdlZSJdCi0gICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWNvbW1h
bmQtd2l0aC1pbnZhbGlkLXBsYXRmb3JtLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWNvbW1hbmQtd2l0aC1pbnZhbGlk
LXBsYXRmb3JtLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExODBjYWU5YmZm
Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWNvbW1hbmQtd2l0aC1pbnZhbGlkLXBsYXRmb3JtLmpz
b24KKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi17Ci0gICAgImRvbWFpbiI6ICJPdmVy
bGF5IiwKLSAgICAiY29tbWFuZHMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjog
InByb2Nlc3NQb2ludHMiLAotICAgICAgICAgICAgInBsYXRmb3JtIjogImludmFsaWQiLAotICAg
ICAgICAgICAgInBhcmFtZXRlcnMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwb2lu
dDEiLCAidHlwZSI6ICJudW1iZXIiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwb2lu
dDIiLCAidHlwZSI6ICJudW1iZXIiIH0KLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAicmV0
dXJucyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInJlc3VsdCIsICJ0eXBlIjogInN0
cmluZyIgfQotICAgICAgICAgICAgXQotICAgICAgICB9Ci0gICAgXQotfQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFp
bC1vbi1kb21haW4tZGVidWdnYWJsZVR5cGVzLXR5cGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZG9tYWluLWRlYnVn
Z2FibGVUeXBlcy10eXBlLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3NDhm
NDIzNDczLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMtdHlw
ZS5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi17Ci0gICAgImRvbWFpbiI6ICJX
ZWJPbmx5IiwKLSAgICAiZGVidWdnYWJsZVR5cGVzIjogIndlYmIiLAotICAgICJjb21tYW5kcyI6
IFsKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiZW5hYmxlIgotICAgICAgICB9Ci0g
ICAgXQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kb21haW4tZGVidWdnYWJsZVR5cGVzLXZhbHVlLmpz
b24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJp
Yy9mYWlsLW9uLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMtdmFsdWUuanNvbgpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggYjI1MmRkYmQ4M2QuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZG9t
YWluLWRlYnVnZ2FibGVUeXBlcy12YWx1ZS5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCww
IEBACi17Ci0gICAgImRvbWFpbiI6ICJXZWJPbmx5IiwKLSAgICAiZGVidWdnYWJsZVR5cGVzIjog
WyJ3ZWJiIl0sCi0gICAgImNvbW1hbmRzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAibmFt
ZSI6ICJlbmFibGUiCi0gICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWRvbWFp
bi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1k
b21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2FhMDI4MDQ2NTcuLjAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2Zh
aWwtb24tZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpz
b24KKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLVsKLXsKLSAgICAiZG9tYWluIjogIkRv
bWFpbiIsCi0gICAgImRlYnVnZ2FibGVUeXBlcyI6IFsiamF2YXNjcmlwdCJdLAotICAgICJjb21t
YW5kcyI6IFt7Im5hbWUiOiAiQ29tbWFuZCIsICJ0YXJnZXRUeXBlcyI6IFsid29ya2VyIl19XSwK
LSAgICAiZXZlbnRzIjogW3sibmFtZSI6ICJFdmVudCJ9XQotfQotXQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1v
bi1kb21haW4tdGFyZ2V0VHlwZXMtdHlwZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZXMt
dHlwZS5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkODIyMjY3NDE0Ni4uMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2dlbmVyaWMvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZXMtdHlwZS5qc29uCisrKyAvZGV2
L251bGwKQEAgLTEsOSArMCwwIEBACi17Ci0gICAgImRvbWFpbiI6ICJQYWdlT25seSIsCi0gICAg
InRhcmdldFR5cGVzIjogInBhZ2VlIiwKLSAgICAiY29tbWFuZHMiOiBbCi0gICAgICAgIHsKLSAg
ICAgICAgICAgICJuYW1lIjogImVuYWJsZSIKLSAgICAgICAgfQotICAgIF0KLX0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2ZhaWwtb24tZG9tYWluLXRhcmdldFR5cGVzLXZhbHVlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWRvbWFpbi10YXJn
ZXRUeXBlcy12YWx1ZS5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlN2IxMGQ3
ZjE1NC4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZXMtdmFsdWUuanNv
bgorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotewotICAgICJkb21haW4iOiAiUGFnZU9u
bHkiLAotICAgICJ0YXJnZXRUeXBlcyI6IFsicGFnZWUiXSwKLSAgICAiY29tbWFuZHMiOiBbCi0g
ICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImVuYWJsZSIKLSAgICAgICAgfQotICAgIF0K
LX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9nZW5lcmljL2ZhaWwtb24tZHVwbGljYXRlLWNvbW1hbmQtY2FsbC1wYXJhbWV0ZXItbmFt
ZXMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL2ZhaWwtb24tZHVwbGljYXRlLWNvbW1hbmQtY2FsbC1wYXJhbWV0ZXItbmFtZXMuanNv
bgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmFiNzZjYTYyNzkuLjAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmljL2ZhaWwtb24tZHVwbGljYXRlLWNvbW1hbmQtY2FsbC1wYXJhbWV0ZXItbmFtZXMuanNvbgor
KysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIk92ZXJsYXki
LAotICAgICJjb21tYW5kcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAicHJv
Y2Vzc1BvaW50cyIsCi0gICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKLSAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInBvaW50IiwgInR5cGUiOiAibnVtYmVyIiB9LAotICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAicG9pbnQiLCAidHlwZSI6ICJudW1iZXIiIH0KLSAgICAgICAgICAgIF0sCi0g
ICAgICAgICAgICAicmV0dXJucyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInJlc3Vs
dDEiLCAidHlwZSI6ICJzdHJpbmciIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJyZXN1
bHQyIiwgInR5cGUiOiAic3RyaW5nIiB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0KLSAgICBd
Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWR1cGxpY2F0ZS1jb21tYW5kLXJldHVybi1wYXJhbWV0ZXIt
bmFtZXMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9nZW5lcmljL2ZhaWwtb24tZHVwbGljYXRlLWNvbW1hbmQtcmV0dXJuLXBhcmFtZXRlci1uYW1l
cy5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOGJiMTVjMDRiNi4uMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1yZXR1cm4tcGFyYW1ldGVyLW5hbWVz
Lmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi17Ci0gICAgImRvbWFpbiI6ICJP
dmVybGF5IiwKLSAgICAiY29tbWFuZHMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1l
IjogInByb2Nlc3NQb2ludHMiLAotICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCi0gICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJwb2ludDEiLCAidHlwZSI6ICJudW1iZXIiIH0sCi0gICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJwb2ludDIiLCAidHlwZSI6ICJudW1iZXIiIH0KLSAgICAgICAg
ICAgIF0sCi0gICAgICAgICAgICAicmV0dXJucyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1l
IjogInJlc3VsdCIsICJ0eXBlIjogInN0cmluZyIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1l
IjogInJlc3VsdCIsICJ0eXBlIjogInN0cmluZyIgfQotICAgICAgICAgICAgXQotICAgICAgICB9
Ci0gICAgXQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kdXBsaWNhdGUtZXZlbnQtcGFyYW1ldGVyLW5h
bWVzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJpYy9mYWlsLW9uLWR1cGxpY2F0ZS1ldmVudC1wYXJhbWV0ZXItbmFtZXMuanNvbgpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDNkM2IzY2M2NDIuLjAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2Zh
aWwtb24tZHVwbGljYXRlLWV2ZW50LXBhcmFtZXRlci1uYW1lcy5qc29uCisrKyAvZGV2L251bGwK
QEAgLTEsMTIgKzAsMCBAQAotewotICAgICJkb21haW4iOiAiT3ZlcmxheSIsCi0gICAgImV2ZW50
cyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAicHJvY2Vzc2VkUG9pbnRzIiwK
LSAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
cG9pbnQiLCAidHlwZSI6ICJudW1iZXIiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJw
b2ludCIsICJ0eXBlIjogIm51bWJlciIgfQotICAgICAgICAgICAgXQotICAgICAgICB9Ci0gICAg
XQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1kZWNsYXJhdGlvbnMuanNvbiBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2Zh
aWwtb24tZHVwbGljYXRlLXR5cGUtZGVjbGFyYXRpb25zLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDcwMmZjNmEzMjcwLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWR1cGxpY2F0
ZS10eXBlLWRlY2xhcmF0aW9ucy5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAot
ewotICAgICJkb21haW4iOiAiUnVudGltZSIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7Ci0g
ICAgICAgICAgICAiaWQiOiAiUmVtb3RlT2JqZWN0SWQiLAotICAgICAgICAgICAgInR5cGUiOiAi
c3RyaW5nIiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgb2JqZWN0IGlkZW50
aWZpZXIuIgotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiUmVtb3Rl
T2JqZWN0SWQiLAotICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKLSAgICAgICAgICAgICJk
ZXNjcmlwdGlvbiI6ICJVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIuIgotICAgICAgICB9Ci0gICAg
XQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1tZW1iZXItbmFtZXMuanNvbiBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2Zh
aWwtb24tZHVwbGljYXRlLXR5cGUtbWVtYmVyLW5hbWVzLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGFlYmFjZWU4YjIzLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWR1cGxpY2F0
ZS10eXBlLW1lbWJlci1uYW1lcy5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAot
WwotewotICAgICJkb21haW4iOiAiT3ZlcmxheVR5cGVzIiwKLSAgICAidHlwZXMiOiBbCi0gICAg
ICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJQb2ludCIsCi0gICAgICAgICAgICAidHlwZSI6ICJv
YmplY3QiLAotICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCi0gICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJ4IiwgInR5cGUiOiAiaW50ZWdlciIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1l
IjogIngiLCAidHlwZSI6ICJpbnRlZ2VyIiB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0KLSAg
ICBdCi19Ci1dCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWVudW0td2l0aC1uby12YWx1ZXMuanNvbiBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwt
b24tZW51bS13aXRoLW5vLXZhbHVlcy5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAyMzJhN2MzMjQ5YS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1lbnVtLXdpdGgtbm8tdmFsdWVz
Lmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi17Ci0gICAgImRvbWFpbiI6ICJE
YXRhYmFzZSIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAi
UHJpbWFyeUNvbG9ycyIsCi0gICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAotICAgICAgICAg
ICAgImVudW0iOiBbXQotICAgICAgICB9Ci0gICAgXQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1ldmVu
dC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1l
dmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MTMyY2UwODgyOC4uMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFp
bC1vbi1ldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29u
CisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1bCi17Ci0gICAgImRvbWFpbiI6ICJEb21h
aW4iLAotICAgICJkZWJ1Z2dhYmxlVHlwZXMiOiBbImphdmFzY3JpcHQiXSwKLSAgICAiY29tbWFu
ZHMiOiBbeyJuYW1lIjogIkNvbW1hbmQifV0sCi0gICAgImV2ZW50cyI6IFt7Im5hbWUiOiAiRXZl
bnQiLCAidGFyZ2V0VHlwZXMiOiBbIndvcmtlciJdfV0KLX0KLV0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24t
ZXZlbnQtdGFyZ2V0VHlwZXMtdHlwZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1ldmVudC10YXJnZXRUeXBlcy10eXBl
Lmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1NGVkMWY1YzZiLi4wMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJpYy9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGVzLXR5cGUuanNvbgorKysgL2Rldi9udWxs
CkBAIC0xLDkgKzAsMCBAQAotewotICAgICJkb21haW4iOiAiRG9tYWluIiwKLSAgICAiZXZlbnRz
IjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJQYWdlT25seSIsCi0gICAgICAg
ICAgICAidGFyZ2V0VHlwZXMiOiAicGFnZWUiCi0gICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJp
Yy9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGVzLXZhbHVlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWV2ZW50LXRhcmdl
dFR5cGVzLXZhbHVlLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4ODRiZmQ3
YTZiLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGVzLXZhbHVlLmpzb24K
KysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIkRvbWFpbiIs
Ci0gICAgImV2ZW50cyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiUGFnZU9u
bHkiLAotICAgICAgICAgICAgInRhcmdldFR5cGVzIjogWyJwYWdlZSJdCi0gICAgICAgIH0KLSAg
ICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXIt
ZmxhZy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNv
bgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzMwOGRiOTkyZDYuLjAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmljL2ZhaWwtb24tbnVtYmVyLXR5cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24KKysr
IC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi17Ci0gICAgImRvbWFpbiI6ICJEYXRhYmFzZSIs
Ci0gICAgInR5cGVzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiRGF0YWJhc2VJ
ZCIsCi0gICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAotICAgICAgICAgICAgImRlc2NyaXB0
aW9uIjogIlVuaXF1ZSBpZGVudGlmaWVyIG9mIERhdGFiYXNlIG9iamVjdC4iCi0gICAgICAgIH0K
LSAgICBdLAotICAgICJldmVudHMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjog
ImRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMiLAotICAgICAgICAgICAgInBhcmFtZXRlcnMi
OiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogInN0
cmluZyIsICJvcHRpb25hbCI6IDAgfQotICAgICAgICAgICAgXQotICAgICAgICB9Ci0gICAgXQot
fQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2dlbmVyaWMvZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNv
biBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2ZhaWwtb24tbnVtYmVyLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24KZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmZWE1NTVlYzRmLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9u
LW51bWJlci10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29uCisrKyAvZGV2L251bGwKQEAg
LTEsMTYgKzAsMCBAQAotWwotewotICAgICJkb21haW4iOiAiRGF0YWJhc2UiLAotICAgICJ0eXBl
cyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIkVycm9yIiwKLSAgICAgICAgICAg
ICJ0eXBlIjogIm9iamVjdCIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRGF0YWJhc2Ug
ZXJyb3IuIiwKLSAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwotICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAibWVzc2FnZSIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJFcnJv
ciBtZXNzYWdlLiIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvZGUiLCAidHlwZSI6
ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIGNvZGUuIiwgIm9wdGlvbmFsIjogMCB9
Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0KLSAgICBdCi19Ci1dCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9u
LXN0cmluZy10eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29uIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1zdHJpbmct
dHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNDAxMmM3OWI2YjMuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tc3RyaW5nLXR5cGVk
LW9wdGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCww
IEBACi17Ci0gICAgImRvbWFpbiI6ICJEYXRhYmFzZSIsCi0gICAgInR5cGVzIjogWwotICAgICAg
ICB7Ci0gICAgICAgICAgICAiaWQiOiAiRGF0YWJhc2VJZCIsCi0gICAgICAgICAgICAidHlwZSI6
ICJzdHJpbmciLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBpZGVudGlmaWVy
IG9mIERhdGFiYXNlIG9iamVjdC4iCi0gICAgICAgIH0KLSAgICBdLAotICAgICJldmVudHMiOiBb
Ci0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImRpZEV4ZWN1dGVPcHRpb25hbFBhcmFt
ZXRlcnMiLAotICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCi0gICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6ICJ0cnVl
IiB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9u
LXN0cmluZy10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29uIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1zdHJpbmctdHlw
ZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggY2EzZWYyOGE4ZjguLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlv
bmFsLXR5cGUtbWVtYmVyLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi1bCi17
Ci0gICAgImRvbWFpbiI6ICJEYXRhYmFzZSIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7Ci0g
ICAgICAgICAgICAiaWQiOiAiRXJyb3IiLAotICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwK
LSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJEYXRhYmFzZSBlcnJvci4iLAotICAgICAgICAg
ICAgInByb3BlcnRpZXMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJtZXNzYWdlIiwg
InR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIG1lc3NhZ2UuIiB9LAotICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29kZSIsICJ0eXBlIjogImludGVnZXIiLCAiZGVzY3Jp
cHRpb24iOiAiRXJyb3IgY29kZS4iLCAib3B0aW9uYWwiOiAiZmFsc2UiIH0KLSAgICAgICAgICAg
IF0KLSAgICAgICAgfQotICAgIF0KLX0KLV0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tdHlwZS1kZWNsYXJh
dGlvbi11c2luZy10eXBlLXJlZmVyZW5jZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi10eXBlLWRlY2xhcmF0aW9uLXVz
aW5nLXR5cGUtcmVmZXJlbmNlLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5
Yjc1OTBjY2M2Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLXR5cGUtZGVjbGFyYXRpb24tdXNpbmct
dHlwZS1yZWZlcmVuY2UuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLVsKLXsK
LSAgICAiZG9tYWluIjogIlJ1bnRpbWUiLAotICAgICJ0eXBlcyI6IFsKLSAgICAgICAgewotICAg
ICAgICAgICAgImlkIjogIlJlbW90ZU9iamVjdElkIiwKLSAgICAgICAgICAgICJ0eXBlIjogIm9i
amVjdCIsCi0gICAgICAgICAgICAiJHJlZiI6ICJTb21lVHlwZSIsCi0gICAgICAgICAgICAiZGVz
Y3JpcHRpb24iOiAiVW5pcXVlIG9iamVjdCBpZGVudGlmaWVyLiIKLSAgICAgICAgfQotICAgIF0K
LX0KLV0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tdHlwZS1yZWZlcmVuY2UtYXMtcHJpbWl0aXZlLXR5cGUu
anNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmljL2ZhaWwtb24tdHlwZS1yZWZlcmVuY2UtYXMtcHJpbWl0aXZlLXR5cGUuanNvbgpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGM4M2JiZmNlNDEuLjAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwt
b24tdHlwZS1yZWZlcmVuY2UtYXMtcHJpbWl0aXZlLXR5cGUuanNvbgorKysgL2Rldi9udWxsCkBA
IC0xLDE4ICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKLSAgICAidHlwZXMi
OiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJEYXRhYmFzZUlkIiwKLSAgICAgICAg
ICAgICJ0eXBlIjogInN0cmluZyIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVl
IGlkZW50aWZpZXIgb2YgRGF0YWJhc2Ugb2JqZWN0LiIKLSAgICAgICAgfQotICAgIF0sCi0gICAg
ImV2ZW50cyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiZGlkRXhlY3V0ZU9w
dGlvbmFsUGFyYW1ldGVycyIsCi0gICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKLSAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiRGF0YWJhc2VJZCIgfQot
ICAgICAgICAgICAgXQotICAgICAgICB9Ci0gICAgXQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi10eXBl
LXdpdGgtaW52YWxpZC1wbGF0Zm9ybS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi10eXBlLXdpdGgtaW52YWxpZC1wbGF0
Zm9ybS5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOWZkMmU5OTU2MS4uMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2dlbmVyaWMvZmFpbC1vbi10eXBlLXdpdGgtaW52YWxpZC1wbGF0Zm9ybS5qc29uCisrKyAv
ZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotewotICAgICJkb21haW4iOiAiUnVudGltZSIsCi0g
ICAgInR5cGVzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiUmVtb3RlT2JqZWN0
SWQiLAotICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKLSAgICAgICAgICAgICJwbGF0Zm9y
bSI6ICJpbnZhbGlkIiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgb2JqZWN0
IGlkZW50aWZpZXIuIgotICAgICAgICB9Ci0gICAgXQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi10eXBl
LXdpdGgtbG93ZXJjYXNlLW5hbWUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tdHlwZS13aXRoLWxvd2VyY2FzZS1uYW1l
Lmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzMTkwMWU0YTlhLi4wMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJpYy9mYWlsLW9uLXR5cGUtd2l0aC1sb3dlcmNhc2UtbmFtZS5qc29uCisrKyAvZGV2L251
bGwKQEAgLTEsMTAgKzAsMCBAQAotewotICAgICJkb21haW4iOiAiRGF0YWJhc2UiLAotICAgICJ0
eXBlcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogImRhdGFiYXNlSWQiLAotICAg
ICAgICAgICAgInR5cGUiOiAiaW50ZWdlciIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAi
VW5pcXVlIGlkZW50aWZpZXIgb2YgRGF0YWJhc2Ugb2JqZWN0LiIKLSAgICAgICAgfQotICAgIF0K
LX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9nZW5lcmljL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLWRlY2xh
cmF0aW9uLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZ2VuZXJpYy9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1kZWNsYXJh
dGlvbi5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNjg4N2EyNzQxMS4uMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2dlbmVyaWMvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtZGVjbGFy
YXRpb24uanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLVsKLXsKLSAgICAiZG9t
YWluIjogIlJ1bnRpbWUiLAotICAgICJ0eXBlcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAg
ImlkIjogIlJlbW90ZU9iamVjdElkIiwKLSAgICAgICAgICAgICJ0eXBlIjogImRyYWdvbiIsCi0g
ICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIG9iamVjdCBpZGVudGlmaWVyLiIKLSAg
ICAgICAgfQotICAgIF0KLX0KLV0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVy
ZW5jZS1pbi10eXBlLW1lbWJlci5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWlu
LXR5cGUtbWVtYmVyLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4MTdkYjUw
NDRkLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlw
ZS1tZW1iZXIuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLVsKLXsKLSAgICAi
ZG9tYWluIjogIkZhbnRhc3kiLAotICAgICJ0eXBlcyI6IFsKLSAgICAgICAgewotICAgICAgICAg
ICAgImlkIjogIkRyYWdvbkVnZyIsCi0gICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAotICAg
ICAgICAgICAgImRlc2NyaXB0aW9uIjogIkEgZHJhZ29uIGVnZy4iLAotICAgICAgICAgICAgInBy
b3BlcnRpZXMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2xvciIsICIkcmVmIjog
IkNvbG9yIiB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0KLSAgICBdCi19Ci1dCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJp
Yy9nZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbiBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2dlbmVyYXRlLWRvbWFp
bnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA2N2NmOGU1ODJmNi4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1
cmUtZ3VhcmRzLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi1bCi17Ci0gICAg
ImRvbWFpbiI6ICJOZXR3b3JrMSIsCi0gICAgImZlYXR1cmVHdWFyZCI6ICJQTEFURk9STShXRUJf
Q09NTUFORFMpIiwKLSAgICAiY29tbWFuZHMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJu
YW1lIjogImxvYWRSZXNvdXJjZSIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9hZHMg
YSByZXNvdXJjZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFn
ZSB3aXRob3V0IGNyb3NzIG9yaWdpbiBjaGVja3MuIgotICAgICAgICB9Ci0gICAgXQotfSwKLXsK
LSAgICAiZG9tYWluIjogIk5ldHdvcmsyIiwKLSAgICAiZmVhdHVyZUd1YXJkIjogIlBMQVRGT1JN
KFdFQl9UWVBFUykiLAotICAgICJ0eXBlcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgImlk
IjogIk5ldHdvcmtFcnJvciIsCi0gICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAotICAgICAg
ICAgICAgInByb3BlcnRpZXMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJtZXNzYWdl
IiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIG1lc3NhZ2UuIiB9LAot
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29kZSIsICJ0eXBlIjogImludGVnZXIiLCAiZGVz
Y3JpcHRpb24iOiAiRXJyb3IgY29kZS4iIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfQotICAg
IF0KLX0sCi17Ci0gICAgImRvbWFpbiI6ICJOZXR3b3JrMyIsCi0gICAgImZlYXR1cmVHdWFyZCI6
ICJQTEFURk9STShXRUJfRVZFTlRTKSIsCi0gICAgImV2ZW50cyI6IFsKLSAgICAgICAgewotICAg
ICAgICAgICAgIm5hbWUiOiAicmVzb3VyY2VMb2FkZWQiLAotICAgICAgICAgICAgImRlc2NyaXB0
aW9uIjogIkEgcmVzb3VyY2Ugd2FzIGxvYWRlZC4iCi0gICAgICAgIH0KLSAgICBdCi19Ci1dCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJpYy9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvc2FtZS10eXBlLWlkLWRp
ZmZlcmVudC1kb21haW4uanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2JmNGRm
ZjVjY2MuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9nZW5lcmljL3NhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24K
KysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi1bCi17Ci0gICAgImRvbWFpbiI6ICJSdW50
aW1lIiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJSZW1v
dGVPYmplY3RJZCIsCi0gICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAotICAgICAgICAgICAg
ImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4iCi0gICAgICAgIH0KLSAg
ICBdCi19LAotewotICAgICJkb21haW4iOiAiUnVudGltZTIiLAotICAgICJ0eXBlcyI6IFsKLSAg
ICAgICAgewotICAgICAgICAgICAgImlkIjogIlJlbW90ZU9iamVjdElkIiwKLSAgICAgICAgICAg
ICJ0eXBlIjogInN0cmluZyIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIG9i
amVjdCBpZGVudGlmaWVyLiIKLSAgICAgICAgfQotICAgIF0KLX0KLV0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL3NoYWRv
d2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0
ZXJzLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwYTBjMTU1Mjc1Li4wMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZ2VuZXJpYy9zaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgorKysgL2Rldi9u
dWxsCkBAIC0xLDMxICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIlJ1bnRpbWUiLAotICAgICJ0
eXBlcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIktleVBhdGgiLAotICAgICAg
ICAgICAgInR5cGUiOiAib2JqZWN0IiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJLZXkg
cGF0aC4iLAotICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJ0eXBlIiwKLSAgICAgICAgICAgICAgICAgICAg
InR5cGUiOiAic3RyaW5nIiwKLSAgICAgICAgICAgICAgICAgICAgImVudW0iOiBbIm51bGwiLCAi
c3RyaW5nIiwgImFycmF5Il0sCi0gICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJL
ZXkgcGF0aCB0eXBlLiIKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgIm5hbWUiOiAic3RyaW5nIiwKLSAgICAgICAgICAgICAgICAgICAg
InR5cGUiOiAic3RyaW5nIiwKLSAgICAgICAgICAgICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwK
LSAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlN0cmluZyB2YWx1ZS4iCi0gICAg
ICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJu
YW1lIjogImFycmF5IiwKLSAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiYXJyYXkiLAotICAg
ICAgICAgICAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgICAgICAgICAgICAgICAi
aXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSwKLSAgICAgICAgICAgICAgICAgICAgImRlc2Ny
aXB0aW9uIjogIkFycmF5IHZhbHVlLiIKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBd
Ci0gICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9zaG91bGQtc3RyaXAtY29tbWVudHMuanNv
biBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L3Nob3VsZC1zdHJpcC1jb21tZW50cy5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBlY2UxZGNmYzYxYy4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24K
KysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLXsKLSAgICAvKiBhYm92ZSAqLwotICAgIC8q
IGJlZm9yZSAqLyAiZG9tYWluIiAvKiBpbiAqLyA6IC8qIGluICovICJDb21tZW50IiAvKiBhZnRl
ciAqLwotICAgIC8qIGJlbG93ICovCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy90eXBlLWRlY2xhcmF0aW9uLWFsaWFz
ZWQtcHJpbWl0aXZlLXR5cGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9nZW5lcmljL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUt
dHlwZS5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYmM5ZDUzOTQ3OC4uMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2dlbmVyaWMvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24K
KysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi17Ci0gICAgImRvbWFpbiI6ICJSdW50aW1l
IiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJSZW1vdGVP
YmplY3RJZCIsCi0gICAgICAgICAgICAidHlwZSI6ICJpbnRlZ2VyIiwKLSAgICAgICAgICAgICJk
ZXNjcmlwdGlvbiI6ICJVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIuIgotICAgICAgICB9Ci0gICAg
XQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24gYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy90eXBlLWRlY2xh
cmF0aW9uLWFycmF5LXR5cGUuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2Zi
MDhiZDk0MGIuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL3R5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29u
CisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotWwotewotICAgICJkb21haW4iOiAiRGVi
dWdnZXIiLAotICAgICJ0eXBlcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIkJy
ZWFrcG9pbnRJZCIsCi0gICAgICAgICAgICAidHlwZSI6ICJpbnRlZ2VyIgotICAgICAgICB9LAot
ICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiUmVhc29uIiwKLSAgICAgICAgICAgICJ0eXBl
IjogInN0cmluZyIsCi0gICAgICAgICAgICAiZW51bSI6IFsiRGllZCIsICJGYWludGVkIiwgIkh1
bmdyeSJdCi0gICAgICAgIH0KLSAgICBdCi19LAotewotICAgICJkb21haW4iOiAiUnVudGltZSIs
Ci0gICAgInR5cGVzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiT2JqZWN0SWQi
LAotICAgICAgICAgICAgInR5cGUiOiAiaW50ZWdlciIKLSAgICAgICAgfSwKLSAgICAgICAgewot
ICAgICAgICAgICAgImlkIjogIkx1Y2t5TnVtYmVycyIsCi0gICAgICAgICAgICAidHlwZSI6ICJh
cnJheSIsCi0gICAgICAgICAgICAiaXRlbXMiOiB7ICJ0eXBlIjogImludGVnZXIiIH0KLSAgICAg
ICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIkJhYnlOYW1lcyIsCi0gICAgICAg
ICAgICAidHlwZSI6ICJhcnJheSIsCi0gICAgICAgICAgICAiaXRlbXMiOiB7ICJ0eXBlIjogInN0
cmluZyIgfQotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiTmV3T2Jq
ZWN0cyIsCi0gICAgICAgICAgICAidHlwZSI6ICJhcnJheSIsCi0gICAgICAgICAgICAiaXRlbXMi
OiB7ICIkcmVmIjogIk9iamVjdElkIiB9Ci0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAg
ICAgICJpZCI6ICJPbGRPYmplY3RzIiwKLSAgICAgICAgICAgICJ0eXBlIjogImFycmF5IiwKLSAg
ICAgICAgICAgICJpdGVtcyI6IHsgIiRyZWYiOiAiRGVidWdnZXIuQnJlYWtwb2ludElkIiB9Ci0g
ICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJTdG9wUmVhc29ucyIsCi0g
ICAgICAgICAgICAidHlwZSI6ICJhcnJheSIsCi0gICAgICAgICAgICAiaXRlbXMiOiB7ICIkcmVm
IjogIkRlYnVnZ2VyLlJlYXNvbiIgfQotICAgICAgICB9Ci0gICAgXQotfQotXQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMv
dHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBl
Lmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmMGFlZTljOTFiLi4wMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJpYy90eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCisrKyAvZGV2L251bGwKQEAg
LTEsMTUgKzAsMCBAQAotewotICAgICJkb21haW4iOiAiUnVudGltZSIsCi0gICAgInR5cGVzIjog
WwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiRmFybUFuaW1hbHMiLAotICAgICAgICAg
ICAgInR5cGUiOiAic3RyaW5nIiwKLSAgICAgICAgICAgICJlbnVtIjogWyJQaWdzIiwgIkNvd3Mi
LCAiQ2F0cyIsICJIZW5zIl0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgImlk
IjogIlR3b0xlZ2dlZEFuaW1hbHMiLAotICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKLSAg
ICAgICAgICAgICJlbnVtIjogWyJEdWNrcyIsICJIZW5zIiwgIkNyb3dzIiwgIkZsYW1pbmdvcyJd
Ci0gICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy90eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10
eXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJpYy90eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDJjNDNjMzMwOTkyLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy90eXBlLWRlY2xhcmF0
aW9uLW9iamVjdC10eXBlLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBAQAotWwot
ewotICAgICJkb21haW4iOiAiRGF0YWJhc2UiLAotICAgICJkZXNjcmlwdGlvbiI6ICJUZXN0IHR5
cGUgYnVpbGRlciBnZW5lcmF0aW9uIG9mIHZhcmlvdXMgb2JqZWN0IHR5cGVzLiIsCi0gICAgInR5
cGVzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiRXJyb3IiLAotICAgICAgICAg
ICAgInR5cGUiOiAib2JqZWN0IiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJEYXRhYmFz
ZSBlcnJvci4iLAotICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCi0gICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJtZXNzYWdlIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIkVy
cm9yIG1lc3NhZ2UuIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29kZSIsICJ0eXBl
IjogImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgY29kZS4iIH0KLSAgICAgICAgICAg
IF0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIkVycm9yTGlzdCIs
Ci0gICAgICAgICAgICAidHlwZSI6ICJhcnJheSIsCi0gICAgICAgICAgICAiaXRlbXMiOiB7ICIk
cmVmIjogIkVycm9yIiB9Ci0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6
ICJNb3VzZUJ1dHRvbiIsCi0gICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAotICAgICAgICAg
ICAgImRlc2NyaXB0aW9uIjogIkVudW1lcmF0ZXMgZGlmZmVyZW50IG1vdXNlIGJ1dHRvbnMgdGhh
dCBjYW4gYmUgdXNlZC4iLAotICAgICAgICAgICAgImVudW0iOiBbCi0gICAgICAgICAgICAgICAg
Ik5vbmUiLAotICAgICAgICAgICAgICAgICJMZWZ0IiwKLSAgICAgICAgICAgICAgICAiTWlkZGxl
IiwKLSAgICAgICAgICAgICAgICAiUmlnaHQiCi0gICAgICAgICAgICBdCi0gICAgICAgIH0sCi0g
ICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJPcHRpb25hbFBhcmFtZXRlckJ1bmRsZSIsCi0g
ICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAotICAgICAgICAgICAgInByb3BlcnRpZXMiOiBb
Ci0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5
IiwgIm9wdGlvbmFsIjogdHJ1ZSwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwKLSAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogImJ1dHRvbnMiLCAidHlwZSI6ICJhcnJheSIsICJvcHRp
b25hbCI6IHRydWUsICJpdGVtcyI6IHsgIiRyZWYiOiAiTW91c2VCdXR0b24iIH0gfSwKLSAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogImRpcmVjdGlvbmFsaXR5IiwgInR5cGUiOiAic3RyaW5nIiwg
ImVudW0iOiBbIkxUUiIsICJSVEwiXSwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVl
IH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1i
ZXIiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1
ZXMiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiwgIm9wdGlvbmFsIjogdHJ1ZSB9
LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZXJyb3IiLCAiJHJlZiI6ICJFcnJvciIsICJv
cHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImVycm9yTGlzdCIs
ICIkcmVmIjogIkVycm9yTGlzdCIsICJvcHRpb25hbCI6IHRydWUgfQotICAgICAgICAgICAgXQot
ICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiUGFyYW1ldGVyQnVuZGxl
IiwKLSAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCi0gICAgICAgICAgICAicHJvcGVydGll
cyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAi
YXJyYXkiLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAotICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAiYnV0dG9ucyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAiJHJlZiI6
ICJNb3VzZUJ1dHRvbiIgfSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGlyZWN0aW9u
YWxpdHkiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsiTFRSIiwgIlJUTCJdIH0sCi0gICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIgfSwKLSAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIgfSwKLSAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIgfSwKLSAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiIH0sCi0gICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJlcnJvciIsICIkcmVmIjogIkVycm9yIiB9LAotICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAiZXJyb3JMaXN0IiwgIiRyZWYiOiAiRXJyb3JMaXN0IiB9Ci0g
ICAgICAgICAgICBdCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJP
YmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzIiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlv
biI6ICJDb25mbGljdGVkIG5hbWVzIG1heSBjYXVzZSBnZW5lcmF0ZWQgZ2V0dGVycy9zZXR0ZXJz
IHRvIGNsYXNoIHdpdGggYnVpbHQtaW4gSW5zcGVjdG9yT2JqZWN0IG1ldGhvZHMuIiwKLSAgICAg
ICAgICAgICJ0eXBlIjogIm9iamVjdCIsCi0gICAgICAgICAgICAicHJvcGVydGllcyI6IFsKLSAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogImludGVnZXIiLCAidHlwZSI6ICJzdHJpbmciIH0sCi0g
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJhcnJheSIsICJ0eXBlIjogInN0cmluZyIgfSwKLSAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogInN0cmluZyIsICJ0eXBlIjogInN0cmluZyIgfSwKLSAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlIiwgInR5cGUiOiAic3RyaW5nIiB9LAotICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAib2JqZWN0IiwgInR5cGUiOiAic3RyaW5nIiB9Ci0gICAg
ICAgICAgICBdCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJEdW1t
eU9iamVjdCIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQW4gb3BlbiBvYmplY3QgdGhh
dCBkb2Vzbid0IGhhdmUgYW55IHByZWRlZmluZWQgZmllbGRzLiIsCi0gICAgICAgICAgICAidHlw
ZSI6ICJvYmplY3QiCi0gICAgICAgIH0KLSAgICBdCi19LAotewotICAgICJkb21haW4iOiAiVGVz
dCIsCi0gICAgImRlc2NyaXB0aW9uIjogIlRlc3QgdGhlIGdlbmVyYXRpb24gb2Ygc3BlY2lhbCBi
ZWhhdmlvcnMgdGhhdCBvbmx5IGFwcGx5IHRvIHNwZWNpZmljIGNsYXNzZXMuIiwKLSAgICAidHlw
ZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJQYXJhbWV0ZXJCdW5kbGUiLAot
ICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKLSAgICAgICAgICAgICJwcm9wZXJ0aWVzIjog
WwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGlyZWN0aW9uYWxpdHkiLCAidHlwZSI6ICJz
dHJpbmciLCAiZW51bSI6IFsiTFRSIiwgIlJUTCJdIH0sCi0gICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJidXR0b25zIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICIkcmVmIjogIkRhdGFi
YXNlLk1vdXNlQnV0dG9uIiB9IH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5O
YW1lcyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwK
LSAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiB9LAot
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiB9
LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiB9
LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIgfSwK
LSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImVycm9yIiwgIiRyZWYiOiAiRGF0YWJhc2UuRXJy
b3IiIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfQotICAgIF0KLX0KLV0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL3R5
cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2Fz
dHMuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODNkOTRiZTg5N2QuLjAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9nZW5lcmljL3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgorKysgL2Rldi9udWxs
CkBAIC0xLDUxICswLDAgQEAKLVsKLXsKLSAgICAiZG9tYWluIjogIlRlc3QiLAotICAgICJ0eXBl
cyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIlR5cGVOZWVkaW5nQ2FzdCIsCi0g
ICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjog
IkEgZHVtbXkgdHlwZSB0aGF0IHJlcXVpcmVzIHJ1bnRpbWUgY2FzdHMsIGFuZCBmb3JjZXMgbm9u
LXByaW1pdGl2ZSByZWZlcmVuY2VkIHR5cGVzIHRvIGFsc28gZW1pdCBydW50aW1lIGNhc3QgaGVs
cGVycy4iLAotICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCi0gICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJzdHJpbmciLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiU3RyaW5n
IG1lbWJlci4iIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJudW1iZXIiLCAidHlwZSI6
ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9uIjogIk51bWJlciBtZW1iZXIuIiB9LAotICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAiYW5pbWFscyIsICIkcmVmIjogIkNhc3RlZEFuaW1hbHMiLCAiZGVz
Y3JpcHRpb24iOiAiRW51bSBtZW1iZXIuIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
aWQiLCAiJHJlZiI6ICJDYXN0ZWRPYmplY3RJZCIsICJkZXNjcmlwdGlvbiI6ICJBbGlhc2VkIG1l
bWJlci4iIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0cmVlIiwgIiRyZWYiOiAiUmVj
dXJzaXZlT2JqZWN0MSIsICJkZXNjcmlwdGlvbiI6ICJSZWN1cnNpdmUgb2JqZWN0IG1lbWJlci4i
IH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgImlk
IjogIkNhc3RlZE9iamVjdElkIiwKLSAgICAgICAgICAgICJ0eXBlIjogImludGVnZXIiCi0gICAg
ICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJVbmNhc3RlZE9iamVjdElkIiwK
LSAgICAgICAgICAgICJ0eXBlIjogImludGVnZXIiCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAg
ICAgICAgICAgICJpZCI6ICJVbmNhc3RlZEFuaW1hbHMiLAotICAgICAgICAgICAgInR5cGUiOiAi
c3RyaW5nIiwKLSAgICAgICAgICAgICJlbnVtIjogWyJQaWdzIiwgIkNvd3MiLCAiQ2F0cyIsICJI
ZW5zIl0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIkNhc3RlZEFu
aW1hbHMiLAotICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKLSAgICAgICAgICAgICJlbnVt
IjogWyJEdWNrcyIsICJIZW5zIiwgIkNyb3dzIiwgIkZsYW1pbmdvcyJdCi0gICAgICAgIH0sCi0g
ICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJSZWN1cnNpdmVPYmplY3QxIiwKLSAgICAgICAg
ICAgICJ0eXBlIjogIm9iamVjdCIsCi0gICAgICAgICAgICAicHJvcGVydGllcyI6IFsKLSAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogIm9iaiIsICIkcmVmIjogIlJlY3Vyc2l2ZU9iamVjdDIiLCAi
b3B0aW9uYWwiOiB0cnVlIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfSwKLSAgICAgICAgewot
ICAgICAgICAgICAgImlkIjogIlJlY3Vyc2l2ZU9iamVjdDIiLAotICAgICAgICAgICAgInR5cGUi
OiAib2JqZWN0IiwKLSAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwotICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAib2JqIiwgIiRyZWYiOiAiUmVjdXJzaXZlT2JqZWN0MSIsICJvcHRpb25hbCI6
IHRydWUgfQotICAgICAgICAgICAgXQotICAgICAgICB9Ci0gICAgXQotfQotXQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMv
dHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5q
c29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OWIwMjIwZDMxMi4uMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uCisrKyAvZGV2L251bGwKQEAgLTEs
MjEgKzAsMCBAQAotewotICAgICJkb21haW4iOiAiVGVzdCIsCi0gICAgInR5cGVzIjogWwotICAg
ICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiTm9PcGVuUGFyYW1ldGVycyIsCi0gICAgICAgICAg
ICAidHlwZSI6ICJvYmplY3QiLAotICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCi0gICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJvbmUiLCAidHlwZSI6ICJudW1iZXIiIH0sCi0gICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJ0d28iLCAidHlwZSI6ICJudW1iZXIiIH0KLSAgICAgICAgICAgIF0K
LSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIk9wZW5QYXJhbWV0ZXJz
IiwKLSAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCi0gICAgICAgICAgICAicHJvcGVydGll
cyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImFscGhhIiwgInR5cGUiOiAibnVtYmVy
IiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYmV0YSIsICJ0eXBlIjogIm51bWJlciIg
fQotICAgICAgICAgICAgXQotICAgICAgICB9Ci0gICAgXQotfQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvdmVyc2lvbi5q
c29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVy
aWMvdmVyc2lvbi5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MDdhNWQ5MDE3
Ni4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2dlbmVyaWMvdmVyc2lvbi5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCww
IEBACi17ImRvbWFpbnMiOlsKLXsKLSAgICAiZG9tYWluIjogIlZlcnNpb25Eb21haW4iLAotICAg
ICJ2ZXJzaW9uIjogNDIKLX0KLV19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvaW9zL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3Jt
Lmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvaW9z
L2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDgxN2YxMzVlZTVhLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvaW9zL2RlZmluaXRpb25zLXdpdGgtbWFjLXBs
YXRmb3JtLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi17Ci0gICAgImRvbWFp
biI6ICJOZXR3b3JrIiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJp
ZCI6ICJOZXR3b3JrRXJyb3IiLAotICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKLSAgICAg
ICAgICAgICJwbGF0Zm9ybSI6ICJtYWNvcyIsCi0gICAgICAgICAgICAicHJvcGVydGllcyI6IFsK
LSAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm1lc3NhZ2UiLCAidHlwZSI6ICJzdHJpbmciLCAi
ZGVzY3JpcHRpb24iOiAiRXJyb3IgbWVzc2FnZS4iIH0sCi0gICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJjb2RlIiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBjb2Rl
LiIgfQotICAgICAgICAgICAgXQotICAgICAgICB9Ci0gICAgXSwKLSAgICAiY29tbWFuZHMiOiBb
Ci0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJjZSIsCi0gICAgICAg
ICAgICAicGxhdGZvcm0iOiAibWFjb3MiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxv
YWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVk
IHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKLSAgICAgICAgfQotICAgIF0sCi0g
ICAgImV2ZW50cyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAicmVzb3VyY2VM
b2FkZWQiLAotICAgICAgICAgICAgInBsYXRmb3JtIjogIm1hY29zIiwKLSAgICAgICAgICAgICJk
ZXNjcmlwdGlvbiI6ICJBIHJlc291cmNlIHdhcyBsb2FkZWQuIgotICAgICAgICB9Ci0gICAgXQot
fQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2lvcy9leHBlY3RlZC9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uLXJlc3Vs
dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9pb3MvZXhw
ZWN0ZWQvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbi1yZXN1bHQKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0YzBmZTNmZTNjLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvaW9zL2V4cGVjdGVkL2Rl
ZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24tcmVzdWx0CisrKyAvZGV2L251bGwKQEAg
LTEsODcwICswLDAgQEAKLSMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMu
anMKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1h
Yy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0jIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQot
I2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi0jaW5jbHVkZSAi
VGVzdFByb3RvY29sVHlwZXMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZy
b250ZW5kUm91dGVyLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBBbHRlcm5h
dGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0
Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmRE
aXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQotICAgIEJhY2tlbmREaXNwYXRjaGVy
KiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIu
Z2V0KCk7IH0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tl
bmREaXNwYXRjaGVyOwotfTsKLQotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSNl
bmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSMjIyBFbmQg
RmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVz
dFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5h
bWVzcGFjZSBJbnNwZWN0b3IgewotCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQotCi0K
LX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3Bh
dGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxh
dGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgot
Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNp
bmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2lmIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQotI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlz
cGF0Y2hlcnMuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLX0gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hl
cnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZv
cm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJh
Z21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDx3
dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1l
c3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgRnJvbnRlbmRSb3V0ZXI7Ci0KLX0gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi19IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5j
cHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNl
Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0j
aW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQot
Ci1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotCi0KLQotCi0KLQotfSAvLyBuYW1lc3BhY2Ug
UHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbE9iamVjdHMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5j
cHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1h
Yy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgi
Ci0KLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0K
LQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0K
LSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW5jbHVkZSA8d3Rm
L1JldGFpblB0ci5oPgotCi0KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3Bh
dGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVy
cy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgt
bWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlz
cGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW5jbHVk
ZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1
ZXMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxXZWJJ
bnNwZWN0b3IvVGVzdFByb3RvY29sLmg+Ci0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJk
ZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmpl
Y3QKLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAot
Ci0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAi
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRl
cm5hbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jaW1w
b3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgotI2ltcG9y
dCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1w
b3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMu
aD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5o
PgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW1wbGVtZW50YXRpb24gVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxl
ciogX2NvbnRyb2xsZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6
KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYg
PSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAg
IEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAg
cmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAgIFtzdXBlciBkZWFsbG9j
XTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
bi5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBs
YXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBu
YW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnRE
aXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQg
PEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJv
dG9jb2xKU09OT2JqZWN0Lmg+Ci0KLQotCi0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRl
c3RQcm90b2NvbFBsYXRmb3JtKSB7Ci0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1BbGwsCi0gICAg
VGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9T
LAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1MsCi19OwotCi0KLQotCi0KLQotCi0KLQot
Ci0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmpl
Y3RzLmg+Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbEludGVybmFsLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9y
dCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRD
b3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8d3RmL0pTT05W
YWx1ZXMuaD4KLQotCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAi
VGVzdFByb3RvY29sLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNv
bnZlcnNpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBPYmpDRW51bVR5cGU+Ci1PcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmlu
Zyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5n
KFRlc3RQcm90b2NvbFBsYXRmb3JtIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAg
IGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1BbGw6Ci0gICAgICAgIHJldHVybiAiYWxsIl9zOwot
ICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOgotICAgICAgICByZXR1cm4gImdl
bmVyaWMiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzoKLSAgICAgICAgcmV0
dXJuICJpb3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOgotICAgICAg
ICByZXR1cm4gIm1hY29zIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlv
bmFsPFRlc3RQcm90b2NvbFBsYXRmb3JtPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5n
JiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gImFsbCIpCi0gICAgICAgIHJldHVybiBUZXN0
UHJvdG9jb2xQbGF0Zm9ybUFsbDsKLSAgICBpZiAodmFsdWUgPT0gImdlbmVyaWMiKQotICAgICAg
ICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOwotICAgIGlmICh2YWx1ZSA9PSAi
aW9zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOwotICAgIGlmICh2
YWx1ZSA9PSAibWFjb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1NYWNP
UzsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0j
aW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3Iv
UldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVj
dG9yOwotCi0KLQotCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJU
ZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2
YXRlLmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1
ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0jIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvbWFjL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpz
b24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvbWFjL2Rl
ZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDgxN2YxMzVlZTVhLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvbWFjL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRm
b3JtLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi17Ci0gICAgImRvbWFpbiI6
ICJOZXR3b3JrIiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6
ICJOZXR3b3JrRXJyb3IiLAotICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKLSAgICAgICAg
ICAgICJwbGF0Zm9ybSI6ICJtYWNvcyIsCi0gICAgICAgICAgICAicHJvcGVydGllcyI6IFsKLSAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogIm1lc3NhZ2UiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVz
Y3JpcHRpb24iOiAiRXJyb3IgbWVzc2FnZS4iIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJjb2RlIiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBjb2RlLiIg
fQotICAgICAgICAgICAgXQotICAgICAgICB9Ci0gICAgXSwKLSAgICAiY29tbWFuZHMiOiBbCi0g
ICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJjZSIsCi0gICAgICAgICAg
ICAicGxhdGZvcm0iOiAibWFjb3MiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRz
IGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBh
Z2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKLSAgICAgICAgfQotICAgIF0sCi0gICAg
ImV2ZW50cyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAicmVzb3VyY2VMb2Fk
ZWQiLAotICAgICAgICAgICAgInBsYXRmb3JtIjogIm1hY29zIiwKLSAgICAgICAgICAgICJkZXNj
cmlwdGlvbiI6ICJBIHJlc291cmNlIHdhcyBsb2FkZWQuIgotICAgICAgICB9Ci0gICAgXQotfQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L21hYy9leHBlY3RlZC9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uLXJlc3VsdCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9tYWMvZXhwZWN0
ZWQvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbi1yZXN1bHQKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGM2ZTY4ZjRhOWFlLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvbWFjL2V4cGVjdGVkL2RlZmlu
aXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24tcmVzdWx0CisrKyAvZGV2L251bGwKQEAgLTEs
MTIxNyArMCwwIEBACi0jIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpz
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMt
cGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0vLyBOZXR3b3JrCi1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJOZXR3b3JrIiwg
bnVsbCk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiTmV0d29yay5sb2FkUmVz
b3VyY2UiLCBudWxsLCBbXSwgW10pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckV2ZW50KCJO
ZXR3b3JrLnJlc291cmNlTG9hZGVkIiwgbnVsbCwgW10pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdp
c3Rlck5ldHdvcmtEaXNwYXRjaGVyID0gSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRpc3BhdGNo
ZXIuYmluZChJbnNwZWN0b3JCYWNrZW5kLCAiTmV0d29yayIpOwotSW5zcGVjdG9yQmFja2VuZC5h
Y3RpdmF0ZURvbWFpbigiTmV0d29yayIsIG51bGwpOwotIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JC
YWNrZW5kQ29tbWFuZHMuanMKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5k
RGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRp
b25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVS
TkFURV9ESVNQQVRDSEVSUykKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCi0jaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotCi1uYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVi
bGljOgotICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRj
aGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0
Y2hlcik7IH0KLSAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25z
dCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Ci1wcml2YXRlOgotICAgIFJl
ZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKLX07Ci0KLQotY2xh
c3MgQWx0ZXJuYXRlTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5BbHRlcm5hdGVOZXR3b3Jr
QmFja2VuZERpc3BhdGNoZXIoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlKGxv
bmcgY2FsbElkKSA9IDA7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotI2VuZGlm
IC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotIyMjIEVuZCBGaWxl
OiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRl
c3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJv
dG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNw
YWNlIEluc3BlY3RvciB7Ci0KLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCi0jaWYgRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi1jbGFzcyBBbHRlcm5hdGVOZXR3
b3JrQmFja2VuZERpc3BhdGNoZXI7Ci0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCi0KLWNsYXNzIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIg
ewotcHVibGljOgotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UoRXJyb3JTdHJpbmcmKSA9
IDA7Ci1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB+TmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFu
ZGxlcigpOwotfTsKLQotY2xhc3MgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVi
bGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMg
UmVmPE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwg
TmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIHZvaWQgZGlzcGF0Y2gobG9u
ZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1l
c3NhZ2UpIGZpbmFsOwotcHJpdmF0ZToKLSAgICB2b2lkIGxvYWRSZXNvdXJjZShsb25nIHJlcXVl
c3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKLSNpZiBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLXB1YmxpYzoKLSAgICB2b2lkIHNldEFsdGVy
bmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyKiBhbHRlcm5h
dGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNo
ZXI7IH0KLXByaXZhdGU6Ci0gICAgQWx0ZXJuYXRlTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyKiBt
X2FsdGVybmF0ZURpc3BhdGNoZXIgeyBudWxscHRyIH07Ci0jZW5kaWYKLXByaXZhdGU6Ci0gICAg
TmV0d29ya0JhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiwgTmV0d29ya0JhY2tl
bmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIqIG1fYWdlbnQgeyBudWxscHRyIH07Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
LSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4K
LSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSNp
bmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jZW5kaWYKLQotbmFt
ZXNwYWNlIEluc3BlY3RvciB7Ci0KLU5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5O
ZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9Ci0KLVJlZjxOZXR3b3JrQmFja2Vu
ZERpc3BhdGNoZXI+IE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEJhY2tlbmREaXNw
YXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxl
ciogYWdlbnQpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTmV0d29ya0JhY2tlbmREaXNw
YXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOwotfQotCi1OZXR3b3JrQmFja2VuZERp
c3BhdGNoZXI6Ok5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFj
a2VuZERpc3BhdGNoZXIsIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQot
ICAgIDogU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCi0g
ICAgLCBtX2FnZW50KGFnZW50KQotewotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVy
RGlzcGF0Y2hlckZvckRvbWFpbigiTmV0d29yayJfcywgdGhpcyk7Ci19Ci0KLXZvaWQgTmV0d29y
a0JhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5n
JiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKLXsKLSAgICBSZWY8TmV0d29y
a0JhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKLQotICAgIFJlZlB0cjxKU09OOjpP
YmplY3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBh
cmFtZXRlcnMpOwotCi0gICAgaWYgKG1ldGhvZCA9PSAibG9hZFJlc291cmNlIikKLSAgICAgICAg
bG9hZFJlc291cmNlKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7Ci0gICAgZWxzZQot
ICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmRE
aXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrLiIgKyBtZXRob2QgKyAiJyB3YXMg
bm90IGZvdW5kIik7Ci19Ci0KLXZvaWQgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVz
b3VyY2UobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCi17Ci0jaWYgRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0gICAgaWYgKG1fYWx0ZXJuYXRl
RGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJj
ZShyZXF1ZXN0SWQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBFcnJv
clN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmpl
Y3Q6OmNyZWF0ZSgpOwotICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZShlcnJvcik7Ci0KLSAgICBp
ZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVz
cG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAg
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3Bh
dGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UK
LQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZh
bHVlcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5z
cGVjdG9yIHsKLQotY2xhc3MgRnJvbnRlbmRSb3V0ZXI7Ci0KLWNsYXNzIE5ldHdvcmtGcm9udGVu
ZERpc3BhdGNoZXIgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAg
IE5ldHdvcmtGcm9udGVuZERpc3BhdGNoZXIoRnJvbnRlbmRSb3V0ZXImIGZyb250ZW5kUm91dGVy
KSA6IG1fZnJvbnRlbmRSb3V0ZXIoZnJvbnRlbmRSb3V0ZXIpIHsgfQotICAgIHZvaWQgcmVzb3Vy
Y2VMb2FkZWQoKTsKLXByaXZhdGU6Ci0gICAgRnJvbnRlbmRSb3V0ZXImIG1fZnJvbnRlbmRSb3V0
ZXI7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEZy
b250ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0
Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMt
d2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlz
cGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5k
Um91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5z
cGVjdG9yIHsKLQotdm9pZCBOZXR3b3JrRnJvbnRlbmREaXNwYXRjaGVyOjpyZXNvdXJjZUxvYWRl
ZCgpCi17Ci0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIk5ldHdv
cmsucmVzb3VyY2VMb2FkZWQiX3MpOwotCi0gICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQo
anNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0
Zi9Bc3NlcnRpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotbmFtZXNwYWNl
IFByb3RvY29sIHsKLQotCi0KLS8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgotbmFtZXNwYWNlIE5l
dHdvcmsgewotY2xhc3MgTmV0d29ya0Vycm9yOwotfSAvLyBOZXR3b3JrCi0vLyBFbmQgb2YgZm9y
d2FyZCBkZWNsYXJhdGlvbnMuCi0KLQotCi0KLW5hbWVzcGFjZSBOZXR3b3JrIHsKLWNsYXNzIE5l
dHdvcmtFcnJvciA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKLXB1YmxpYzoKLSAgICBlbnVt
IHsKLSAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAotICAgICAgICBNZXNzYWdlU2V0ID0gMSA8PCAw
LAotICAgICAgICBDb2RlU2V0ID0gMSA8PCAxLAotICAgICAgICBBbGxGaWVsZHNTZXQgPSAoTWVz
c2FnZVNldCB8IENvZGVTZXQpCi0gICAgfTsKLQotICAgIHRlbXBsYXRlPGludCBTVEFURT4KLSAg
ICBjbGFzcyBCdWlsZGVyIHsKLSAgICBwcml2YXRlOgotICAgICAgICBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiBtX3Jlc3VsdDsKLQotICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFU
RSB8IFNURVA+JiBjYXN0U3RhdGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKnJl
aW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7Ci0gICAgICAgIH0K
LQotICAgICAgICBCdWlsZGVyKFJlZjwvKk5ldHdvcmtFcnJvciovSlNPTjo6T2JqZWN0PiYmIG9i
amVjdCkKLSAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQotICAgICAgICB7
Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRl
cl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKLSAgICAgICAgfQotICAgICAgICBmcmllbmQg
Y2xhc3MgTmV0d29ya0Vycm9yOwotICAgIHB1YmxpYzoKLQotICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgTWVzc2FnZVNldD4mIHNldE1lc3NhZ2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICAgICAg
ewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE1lc3NhZ2VTZXQpLCBwcm9w
ZXJ0eV9tZXNzYWdlX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJp
bmcoIm1lc3NhZ2UiX3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TWVz
c2FnZVNldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2RlU2V0
PiYgc2V0Q29kZShpbnQgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBDb2RlU2V0KSwgcHJvcGVydHlfY29kZV9hbHJlYWR5X3NldCk7Ci0gICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcigiY29kZSJfcywgdmFsdWUpOwotICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxDb2RlU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgUmVm
PE5ldHdvcmtFcnJvcj4gcmVsZWFzZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7Ci0gICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoTmV0d29ya0Vycm9yKSA9PSBzaXplb2YoSlNP
Tjo6T2JqZWN0KSwgY2Fubm90X2Nhc3QpOwotCi0gICAgICAgICAgICBSZWY8SlNPTjo6T2JqZWN0
PiBqc29uUmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKLSAgICAgICAgICAgIGF1
dG8gcmVzdWx0ID0gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8TmV0d29ya0Vycm9yPio+
KCZqc29uUmVzdWx0KSk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0g
ICAgfTsKLQotICAgIC8qCi0gICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgotICAgICAqIFJl
ZjxOZXR3b3JrRXJyb3I+IHJlc3VsdCA9IE5ldHdvcmtFcnJvcjo6Y3JlYXRlKCkKLSAgICAgKiAg
ICAgLnNldE1lc3NhZ2UoLi4uKQotICAgICAqICAgICAuc2V0Q29kZSguLi4pCi0gICAgICogICAg
IC5yZWxlYXNlKCk7Ci0gICAgICovCi0gICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNy
ZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKSk7Ci0gICAgfQotfTsKLQotfSAvLyBOZXR3b3JrCi0KLQotCi19IC8v
IG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xPYmplY3RzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRp
b25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bE9iamVjdHMuaCIKLQotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLW5hbWVzcGFjZSBQcm90
b2NvbCB7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNp
bmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLUBwcm90b2NvbCBUZXN0UHJvdG9jb2xOZXR3b3Jr
RG9tYWluSGFuZGxlcjsKLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotY2xhc3MgT2JqQ0lu
c3BlY3Rvck5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVO
ZXR3b3JrQmFja2VuZERpc3BhdGNoZXIgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwot
cHVibGljOgotICAgIE9iakNJbnNwZWN0b3JOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIoaWQ8VGVz
dFByb3RvY29sTmV0d29ya0RvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhh
bmRsZXI7IH0KLSAgICB2b2lkIGxvYWRSZXNvdXJjZShsb25nIHJlcXVlc3RJZCkgZmluYWw7Ci1w
cml2YXRlOgotICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluSGFuZGxl
cj4+IG1fZGVsZWdhdGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIK
LSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSAi
VGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotCi1uYW1lc3BhY2UgSW5zcGVj
dG9yIHsKLQotdm9pZCBPYmpDSW5zcGVjdG9yTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyOjpsb2Fk
UmVzb3VyY2UobG9uZyByZXF1ZXN0SWQpCi17Ci0gICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25k
c1RvU2VsZWN0b3I6QHNlbGVjdG9yKGxvYWRSZXNvdXJjZVdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nl
c3NDYWxsYmFjazopXSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90
b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAi
J05ldHdvcmsubG9hZFJlc291cmNlJyB3YXMgbm90IGZvdW5kIl9zKTsKLSAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAg
ICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFj
a2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7Ci0gICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgfTsKLQotICAgIGlkIHN1Y2Nlc3ND
YWxsYmFjayA9IF57Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShy
ZXF1ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKLSAgICB9OwotCi0gICAg
W21fZGVsZWdhdGUgbG9hZFJlc291cmNlV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBz
dWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKLX0KLQotCi19IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMu
bW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3Jt
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9y
dCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmls
aXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6
IE5TT2JqZWN0Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluLCBzZXR0ZXI9c2V0TmV0d29y
a0hhbmRsZXI6KSBpZDxUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluSGFuZGxlcj4gbmV0d29ya0hh
bmRsZXI7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFRlc3RQcm90b2NvbE5ldHdv
cmtEb21haW5FdmVudERpc3BhdGNoZXIgKm5ldHdvcmtFdmVudERpc3BhdGNoZXI7Ci1AZW5kCi0K
LQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24uaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNp
bXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotI2ltcG9ydCA8SmF2YVNj
cmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KLSNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLQotdXNpbmcg
bmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZp
Z3VyYXRpb24KLXsKLSAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9s
bGVyOwotICAgIGlkPFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5IYW5kbGVyPiBfbmV0d29ya0hh
bmRsZXI7Ci0gICAgVGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkV2ZW50RGlzcGF0Y2hlciAqX25l
dHdvcmtFdmVudERpc3BhdGNoZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRy
b2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgotewotICAg
IHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmls
OwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7
Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAgIFtfbmV0d29y
a0hhbmRsZXIgcmVsZWFzZV07Ci0gICAgW19uZXR3b3JrRXZlbnREaXNwYXRjaGVyIHJlbGVhc2Vd
OwotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAodm9pZClzZXROZXR3b3JrSGFuZGxlcjoo
aWQ8VGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkhhbmRsZXI+KWhhbmRsZXIKLXsKLSAgICBpZiAo
aGFuZGxlciA9PSBfbmV0d29ya0hhbmRsZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIFtfbmV0
d29ya0hhbmRsZXIgcmVsZWFzZV07Ci0gICAgX25ldHdvcmtIYW5kbGVyID0gW2hhbmRsZXIgcmV0
YWluXTsKLQotICAgIGF1dG8gYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IG1ha2VVbmlxdWU8T2JqQ0lu
c3BlY3Rvck5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7Ci0gICAgYXV0byBhbHRl
cm5hdGVBZ2VudCA9IG1ha2VVbmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8TmV0d29y
a0JhY2tlbmREaXNwYXRjaGVyLCBBbHRlcm5hdGVOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI+Pigi
TmV0d29yayJfcywgKl9jb250cm9sbGVyLCBXVEZNb3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIpKTsK
LSAgICBfY29udHJvbGxlci0+YXBwZW5kRXh0cmFBZ2VudChXVEZNb3ZlKGFsdGVybmF0ZUFnZW50
KSk7Ci19Ci0KLS0gKGlkPFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5IYW5kbGVyPiluZXR3b3Jr
SGFuZGxlcgotewotICAgIHJldHVybiBfbmV0d29ya0hhbmRsZXI7Ci19Ci0KLS0gKFRlc3RQcm90
b2NvbE5ldHdvcmtEb21haW5FdmVudERpc3BhdGNoZXIgKiluZXR3b3JrRXZlbnREaXNwYXRjaGVy
Ci17Ci0gICAgaWYgKCFfbmV0d29ya0V2ZW50RGlzcGF0Y2hlcikKLSAgICAgICAgX25ldHdvcmtF
dmVudERpc3BhdGNoZXIgPSBbW1Rlc3RQcm90b2NvbE5ldHdvcmtEb21haW5FdmVudERpc3BhdGNo
ZXIgYWxsb2NdIGluaXRXaXRoQ29udHJvbGxlcjpfY29udHJvbGxlcl07Ci0gICAgcmV0dXJuIF9u
ZXR3b3JrRXZlbnREaXNwYXRjaGVyOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xF
dmVudERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVm
aW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0j
aW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPHd0Zi9KU09O
VmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlv
biBUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluRXZlbnREaXNwYXRjaGVyCi17Ci0gICAgQXVnbWVu
dGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKLX0KLQotLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKilj
b250cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0g
ICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIpOwotICAgIF9jb250cm9s
bGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClyZXNvdXJj
ZUxvYWRlZAotewotICAgIGNvbnN0IEZyb250ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29udHJvbGxl
ci0+ZnJvbnRlbmRSb3V0ZXIoKTsKLQotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdl
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJt
ZXRob2QiX3MsICJOZXR3b3JrLnJlc291cmNlTG9hZGVkIl9zKTsKLSAgICByb3V0ZXIuc2VuZEV2
ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5p
dGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2lt
cG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgotCi0KLUBjbGFzcyBU
ZXN0UHJvdG9jb2xOZXR3b3JrRXJyb3I7Ci0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRl
c3RQcm90b2NvbFBsYXRmb3JtKSB7Ci0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1BbGwsCi0gICAg
VGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9T
LAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1MsCi19OwotCi0KLQotCi1fX2F0dHJpYnV0
ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sTmV0
d29ya0Vycm9yIDogUldJUHJvdG9jb2xKU09OT2JqZWN0Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKLS0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3Qg
Kilqc29uT2JqZWN0OwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTWVzc2FnZTooTlNTdHJpbmcg
KiltZXNzYWdlIGNvZGU6KGludCljb2RlOwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25h
dG9taWMsIGNvcHkpIE5TU3RyaW5nICptZXNzYWdlOwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5
IChub25hdG9taWMsIGFzc2lnbikgaW50IGNvZGU7Ci1AZW5kCi0KLUBwcm90b2NvbCBUZXN0UHJv
dG9jb2xOZXR3b3JrRG9tYWluSGFuZGxlciA8TlNPYmplY3Q+Ci1Ab3B0aW9uYWwKLS0gKHZvaWQp
bG9hZFJlc291cmNlV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSll
cnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKSh2b2lkKSlzdWNjZXNzQ2FsbGJh
Y2s7Ci1AZW5kCi0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGlu
dGVyZmFjZSBUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluRXZlbnREaXNwYXRjaGVyIDogTlNPYmpl
Y3QKLS0gKHZvaWQpcmVzb3VyY2VMb2FkZWQ7Ci1AZW5kCi0KLQotI2ltcG9ydCA8V2ViSW5zcGVj
dG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgotCi0jIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5h
bC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1t
YWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05P
YmplY3RQcml2YXRlLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3Bl
Y3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLUBpbnRlcmZh
Y2UgVGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkV2ZW50RGlzcGF0Y2hlciAoUHJpdmF0ZSkKLS0g
KGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEluc3BlY3Rvcjo6QXVnbWVudGFibGVJ
bnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyOwotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sSW50ZXJuYWwuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0
aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCA8V2ViSW5z
cGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVj
dG9yIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgotT3B0aW9uYWw8T2JqQ0Vu
dW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0KLWlubGlu
ZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xQbGF0Zm9ybSB2YWx1ZSkKLXsK
LSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOgot
ICAgICAgICByZXR1cm4gImFsbCJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtR2Vu
ZXJpYzoKLSAgICAgICAgcmV0dXJuICJnZW5lcmljIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29s
UGxhdGZvcm1JT1M6Ci0gICAgICAgIHJldHVybiAiaW9zIl9zOwotICAgIGNhc2UgVGVzdFByb3Rv
Y29sUGxhdGZvcm1NYWNPUzoKLSAgICAgICAgcmV0dXJuICJtYWNvcyJfczsKLSAgICB9Ci19Ci0K
LXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xQbGF0Zm9ybT4gZnJvbVBy
b3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJh
bGwiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1BbGw7Ci0gICAgaWYgKHZh
bHVlID09ICJnZW5lcmljIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtR2Vu
ZXJpYzsKLSAgICBpZiAodmFsdWUgPT0gImlvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9j
b2xQbGF0Zm9ybUlPUzsKLSAgICBpZiAodmFsdWUgPT0gIm1hY29zIikKLSAgICAgICAgcmV0dXJu
IFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0K
LQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0
aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgot
Ci0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJz
ZXIuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRl
Lmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbnRlcmZhY2UgVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zIChOZXR3b3JrRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZU5ldHdv
cmtFcnJvcjooVGVzdFByb3RvY29sTmV0d29ya0Vycm9yICoqKW91dFZhbHVlIGZyb21QYXlsb2Fk
OihpZClwYXlsb2FkOwotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMgKE5ldHdvcmtEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlTmV0d29ya0Vycm9y
OihUZXN0UHJvdG9jb2xOZXR3b3JrRXJyb3IgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBh
eWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0Rp
Y3Rpb25hcnkgY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbE5ldHdvcmtF
cnJvciBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOwotfQotCi1AZW5kCi0KLQotIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5o
IgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPFdl
Ykluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0jaW1wb3J0IDx3dGYv
QXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNw
YWNlIEluc3BlY3RvcjsKLQotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sTmV0d29ya0Vy
cm9yCi0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9u
YXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVy
IGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
UkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAIm1lc3NhZ2UiXSwgQCJtZXNzYWdlIik7Ci0gICAg
c2VsZi5tZXNzYWdlID0gcGF5bG9hZFtAIm1lc3NhZ2UiXTsKLQotICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImNvZGUiXSwgQCJjb2RlIik7Ci0gICAg
c2VsZi5jb2RlID0gW3BheWxvYWRbQCJjb2RlIl0gaW50ZWdlclZhbHVlXTsKLQotICAgIHJldHVy
biBzZWxmOwotfQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVBy
b3RvY29sSlNPTk9iamVjdCAqKW9iamVjdAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5p
dFdpdGhKU09OT2JqZWN0OltvYmplY3QgdG9KU09OT2JqZWN0XS5nZXQoKV0pKQotICAgICAgICBy
ZXR1cm4gbmlsOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0
V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBjb2RlOihpbnQpY29kZQotewotICAgIGlm
ICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShtZXNzYWdlLCBAIm1lc3NhZ2UiKTsK
LQotICAgIHNlbGYubWVzc2FnZSA9IG1lc3NhZ2U7Ci0gICAgc2VsZi5jb2RlID0gY29kZTsKLQot
ICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKXNldE1lc3NhZ2U6KE5TU3RyaW5nICopbWVz
c2FnZQotewotICAgIFtzdXBlciBzZXRTdHJpbmc6bWVzc2FnZSBmb3JLZXk6QCJtZXNzYWdlIl07
Ci19Ci0KLS0gKE5TU3RyaW5nICopbWVzc2FnZQotewotICAgIHJldHVybiBbc3VwZXIgc3RyaW5n
Rm9yS2V5OkAibWVzc2FnZSJdOwotfQotCi0tICh2b2lkKXNldENvZGU6KGludCljb2RlCi17Ci0g
ICAgW3N1cGVyIHNldEludGVnZXI6Y29kZSBmb3JLZXk6QCJjb2RlIl07Ci19Ci0KLS0gKGludClj
b2RlCi17Ci0gICAgcmV0dXJuIFtzdXBlciBpbnRlZ2VyRm9yS2V5OkAiY29kZSJdOwotfQotCi1A
ZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3NhbWUtdHlwZS1p
ZC1kaWZmZXJlbnQtZG9tYWluLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uM2JmNGRmZjVjY2MKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvc2Ft
ZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgpAQCAtMCwwICsxLDIyIEBACitbCit7Cisg
ICAgImRvbWFpbiI6ICJSdW50aW1lIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAg
ICAgICAgICJpZCI6ICJSZW1vdGVPYmplY3RJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJzdHJp
bmciLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBvYmplY3QgaWRlbnRpZmll
ci4iCisgICAgICAgIH0KKyAgICBdCit9LAoreworICAgICJkb21haW4iOiAiUnVudGltZTIiLAor
ICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlJlbW90ZU9iamVj
dElkIiwKKyAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAiZGVzY3Jp
cHRpb24iOiAiVW5pcXVlIG9iamVjdCBpZGVudGlmaWVyLiIKKyAgICAgICAgfQorICAgIF0KK30K
K10KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9zaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbiBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9zaGFkb3dlZC1vcHRpb25hbC10eXBlLXNl
dHRlcnMuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMjBhMGMx
NTUyNzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KQEAgLTAs
MCArMSwzMSBAQAoreworICAgICJkb21haW4iOiAiUnVudGltZSIsCisgICAgInR5cGVzIjogWwor
ICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiS2V5UGF0aCIsCisgICAgICAgICAgICAidHlw
ZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIktleSBwYXRoLiIsCisg
ICAgICAgICAgICAicHJvcGVydGllcyI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICJuYW1lIjogInR5cGUiLAorICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJz
dHJpbmciLAorICAgICAgICAgICAgICAgICAgICAiZW51bSI6IFsibnVsbCIsICJzdHJpbmciLCAi
YXJyYXkiXSwKKyAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIktleSBwYXRoIHR5
cGUuIgorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAibmFtZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJz
dHJpbmciLAorICAgICAgICAgICAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgICAg
ICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiU3RyaW5nIHZhbHVlLiIKKyAgICAgICAgICAgICAg
ICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiYXJy
YXkiLAorICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJhcnJheSIsCisgICAgICAgICAgICAg
ICAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAgICAgICAgICAgICAgICJpdGVtcyI6IHsg
InR5cGUiOiAic3RyaW5nIiB9LAorICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAi
QXJyYXkgdmFsdWUuIgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAg
fQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9zaG91bGQtc3RyaXAtY29tbWVudHMuanNvbiBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9zaG91bGQtc3RyaXAtY29tbWVudHMuanNv
bgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZWNlMWRjZmM2MWMKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KQEAgLTAsMCArMSw1IEBACit7CisgICAg
LyogYWJvdmUgKi8KKyAgICAvKiBiZWZvcmUgKi8gImRvbWFpbiIgLyogaW4gKi8gOiAvKiBpbiAq
LyAiQ29tbWVudCIgLyogYWZ0ZXIgKi8KKyAgICAvKiBiZWxvdyAqLworfQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtZGVjbGFy
YXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRp
dmUtdHlwZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jYmM5
ZDUzOTQ3OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUu
anNvbgpAQCAtMCwwICsxLDEwIEBACit7CisgICAgImRvbWFpbiI6ICJSdW50aW1lIiwKKyAgICAi
dHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJSZW1vdGVPYmplY3RJZCIs
CisgICAgICAgICAgICAidHlwZSI6ICJpbnRlZ2VyIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlv
biI6ICJVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIuIgorICAgICAgICB9CisgICAgXQorfQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5
cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jZmIwOGJkOTQwYgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy90eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgpAQCAtMCwwICsxLDUwIEBACitbCit7
CisgICAgImRvbWFpbiI6ICJEZWJ1Z2dlciIsCisgICAgInR5cGVzIjogWworICAgICAgICB7Cisg
ICAgICAgICAgICAiaWQiOiAiQnJlYWtwb2ludElkIiwKKyAgICAgICAgICAgICJ0eXBlIjogImlu
dGVnZXIiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJSZWFzb24i
LAorICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICJlbnVtIjogWyJE
aWVkIiwgIkZhaW50ZWQiLCAiSHVuZ3J5Il0KKyAgICAgICAgfQorICAgIF0KK30sCit7CisgICAg
ImRvbWFpbiI6ICJSdW50aW1lIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAg
ICAgICJpZCI6ICJPYmplY3RJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJpbnRlZ2VyIgorICAg
ICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiTHVja3lOdW1iZXJzIiwKKyAg
ICAgICAgICAgICJ0eXBlIjogImFycmF5IiwKKyAgICAgICAgICAgICJpdGVtcyI6IHsgInR5cGUi
OiAiaW50ZWdlciIgfQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAi
QmFieU5hbWVzIiwKKyAgICAgICAgICAgICJ0eXBlIjogImFycmF5IiwKKyAgICAgICAgICAgICJp
dGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9CisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAg
ICAgICAgICJpZCI6ICJOZXdPYmplY3RzIiwKKyAgICAgICAgICAgICJ0eXBlIjogImFycmF5IiwK
KyAgICAgICAgICAgICJpdGVtcyI6IHsgIiRyZWYiOiAiT2JqZWN0SWQiIH0KKyAgICAgICAgfSwK
KyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIk9sZE9iamVjdHMiLAorICAgICAgICAgICAg
InR5cGUiOiAiYXJyYXkiLAorICAgICAgICAgICAgIml0ZW1zIjogeyAiJHJlZiI6ICJEZWJ1Z2dl
ci5CcmVha3BvaW50SWQiIH0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlk
IjogIlN0b3BSZWFzb25zIiwKKyAgICAgICAgICAgICJ0eXBlIjogImFycmF5IiwKKyAgICAgICAg
ICAgICJpdGVtcyI6IHsgIiRyZWYiOiAiRGVidWdnZXIuUmVhc29uIiB9CisgICAgICAgIH0KKyAg
ICBdCit9CitdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbiBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9uLWVudW0t
dHlwZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45ZjBhZWU5
YzkxYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCkBAIC0wLDAgKzEs
MTUgQEAKK3sKKyAgICAiZG9tYWluIjogIlJ1bnRpbWUiLAorICAgICJ0eXBlcyI6IFsKKyAgICAg
ICAgeworICAgICAgICAgICAgImlkIjogIkZhcm1BbmltYWxzIiwKKyAgICAgICAgICAgICJ0eXBl
IjogInN0cmluZyIsCisgICAgICAgICAgICAiZW51bSI6IFsiUGlncyIsICJDb3dzIiwgIkNhdHMi
LCAiSGVucyJdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJUd29M
ZWdnZWRBbmltYWxzIiwKKyAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAg
ICAiZW51bSI6IFsiRHVja3MiLCAiSGVucyIsICJDcm93cyIsICJGbGFtaW5nb3MiXQorICAgICAg
ICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbiBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9u
LW9iamVjdC10eXBlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu
LjJjNDNjMzMwOTkyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgpA
QCAtMCwwICsxLDEwMCBAQAorWworeworICAgICJkb21haW4iOiAiRGF0YWJhc2UiLAorICAgICJk
ZXNjcmlwdGlvbiI6ICJUZXN0IHR5cGUgYnVpbGRlciBnZW5lcmF0aW9uIG9mIHZhcmlvdXMgb2Jq
ZWN0IHR5cGVzLiIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQi
OiAiRXJyb3IiLAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAgICJk
ZXNjcmlwdGlvbiI6ICJEYXRhYmFzZSBlcnJvci4iLAorICAgICAgICAgICAgInByb3BlcnRpZXMi
OiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJtZXNzYWdlIiwgInR5cGUiOiAic3RyaW5n
IiwgImRlc2NyaXB0aW9uIjogIkVycm9yIG1lc3NhZ2UuIiB9LAorICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAiY29kZSIsICJ0eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAiRXJyb3Ig
Y29kZS4iIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAg
ICAgImlkIjogIkVycm9yTGlzdCIsCisgICAgICAgICAgICAidHlwZSI6ICJhcnJheSIsCisgICAg
ICAgICAgICAiaXRlbXMiOiB7ICIkcmVmIjogIkVycm9yIiB9CisgICAgICAgIH0sCisgICAgICAg
IHsKKyAgICAgICAgICAgICJpZCI6ICJNb3VzZUJ1dHRvbiIsCisgICAgICAgICAgICAidHlwZSI6
ICJzdHJpbmciLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkVudW1lcmF0ZXMgZGlmZmVy
ZW50IG1vdXNlIGJ1dHRvbnMgdGhhdCBjYW4gYmUgdXNlZC4iLAorICAgICAgICAgICAgImVudW0i
OiBbCisgICAgICAgICAgICAgICAgIk5vbmUiLAorICAgICAgICAgICAgICAgICJMZWZ0IiwKKyAg
ICAgICAgICAgICAgICAiTWlkZGxlIiwKKyAgICAgICAgICAgICAgICAiUmlnaHQiCisgICAgICAg
ICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJPcHRpb25h
bFBhcmFtZXRlckJ1bmRsZSIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAg
ICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5O
YW1lcyIsICJ0eXBlIjogImFycmF5IiwgIm9wdGlvbmFsIjogdHJ1ZSwgIml0ZW1zIjogeyAidHlw
ZSI6ICJzdHJpbmciIH0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImJ1dHRvbnMiLCAi
dHlwZSI6ICJhcnJheSIsICJvcHRpb25hbCI6IHRydWUsICJpdGVtcyI6IHsgIiRyZWYiOiAiTW91
c2VCdXR0b24iIH0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRpcmVjdGlvbmFsaXR5
IiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbIkxUUiIsICJSVEwiXSwgIm9wdGlvbmFsIjog
dHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJp
bmciLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1l
c3RhbXAiLCAidHlwZSI6ICJudW1iZXIiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0
cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55
IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZXJyb3Ii
LCAiJHJlZiI6ICJFcnJvciIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7
ICJuYW1lIjogImVycm9yTGlzdCIsICIkcmVmIjogIkVycm9yTGlzdCIsICJvcHRpb25hbCI6IHRy
dWUgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAi
aWQiOiAiUGFyYW1ldGVyQnVuZGxlIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisg
ICAgICAgICAgICAicHJvcGVydGllcyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNv
bHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIg
fSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYnV0dG9ucyIsICJ0eXBlIjogImFycmF5
IiwgIml0ZW1zIjogeyAiJHJlZiI6ICJNb3VzZUJ1dHRvbiIgfSB9LAorICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAiZGlyZWN0aW9uYWxpdHkiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsi
TFRSIiwgIlJUTCJdIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBl
IjogInN0cmluZyIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0
eXBlIjogIm51bWJlciIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0
eXBlIjogIm9iamVjdCIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAi
dHlwZSI6ICJhbnkiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJlcnJvciIsICIkcmVm
IjogIkVycm9yIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZXJyb3JMaXN0IiwgIiRy
ZWYiOiAiRXJyb3JMaXN0IiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsK
KyAgICAgICAgICAgICJpZCI6ICJPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzIiwKKyAg
ICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJDb25mbGljdGVkIG5hbWVzIG1heSBjYXVzZSBnZW5l
cmF0ZWQgZ2V0dGVycy9zZXR0ZXJzIHRvIGNsYXNoIHdpdGggYnVpbHQtaW4gSW5zcGVjdG9yT2Jq
ZWN0IG1ldGhvZHMuIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAg
ICAicHJvcGVydGllcyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImludGVnZXIiLCAi
dHlwZSI6ICJzdHJpbmciIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJhcnJheSIsICJ0
eXBlIjogInN0cmluZyIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInN0cmluZyIsICJ0
eXBlIjogInN0cmluZyIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlIiwgInR5
cGUiOiAic3RyaW5nIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAib2JqZWN0IiwgInR5
cGUiOiAic3RyaW5nIiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAg
ICAgICAgICAgICJpZCI6ICJEdW1teU9iamVjdCIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24i
OiAiQW4gb3BlbiBvYmplY3QgdGhhdCBkb2Vzbid0IGhhdmUgYW55IHByZWRlZmluZWQgZmllbGRz
LiIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiCisgICAgICAgIH0KKyAgICBdCit9LAor
eworICAgICJkb21haW4iOiAiVGVzdCIsCisgICAgImRlc2NyaXB0aW9uIjogIlRlc3QgdGhlIGdl
bmVyYXRpb24gb2Ygc3BlY2lhbCBiZWhhdmlvcnMgdGhhdCBvbmx5IGFwcGx5IHRvIHNwZWNpZmlj
IGNsYXNzZXMuIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6
ICJQYXJhbWV0ZXJCdW5kbGUiLAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAg
ICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGlyZWN0
aW9uYWxpdHkiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsiTFRSIiwgIlJUTCJdIH0sCisg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJidXR0b25zIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRl
bXMiOiB7ICIkcmVmIjogIkRhdGFiYXNlLk1vdXNlQnV0dG9uIiB9IH0sCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAi
dHlwZSI6ICJzdHJpbmciIH0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vdGVzIiwg
InR5cGUiOiAic3RyaW5nIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1w
IiwgInR5cGUiOiAibnVtYmVyIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVz
IiwgInR5cGUiOiAib2JqZWN0IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5bG9h
ZCIsICJ0eXBlIjogImFueSIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImVycm9yIiwg
IiRyZWYiOiAiRGF0YWJhc2UuRXJyb3IiIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAg
IF0KK30KK10KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy90eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24gYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1yZXF1aXJpbmctcnVudGlt
ZS1jYXN0cy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44M2Q5
NGJlODk3ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy90eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KQEAgLTAs
MCArMSw1MSBAQAorWworeworICAgICJkb21haW4iOiAiVGVzdCIsCisgICAgInR5cGVzIjogWwor
ICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiVHlwZU5lZWRpbmdDYXN0IiwKKyAgICAgICAg
ICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQSBkdW1t
eSB0eXBlIHRoYXQgcmVxdWlyZXMgcnVudGltZSBjYXN0cywgYW5kIGZvcmNlcyBub24tcHJpbWl0
aXZlIHJlZmVyZW5jZWQgdHlwZXMgdG8gYWxzbyBlbWl0IHJ1bnRpbWUgY2FzdCBoZWxwZXJzLiIs
CisgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjog
InN0cmluZyIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJTdHJpbmcgbWVtYmVy
LiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm51bWJlciIsICJ0eXBlIjogImludGVn
ZXIiLCAiZGVzY3JpcHRpb24iOiAiTnVtYmVyIG1lbWJlci4iIH0sCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJhbmltYWxzIiwgIiRyZWYiOiAiQ2FzdGVkQW5pbWFscyIsICJkZXNjcmlwdGlv
biI6ICJFbnVtIG1lbWJlci4iIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJpZCIsICIk
cmVmIjogIkNhc3RlZE9iamVjdElkIiwgImRlc2NyaXB0aW9uIjogIkFsaWFzZWQgbWVtYmVyLiIg
fSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRyZWUiLCAiJHJlZiI6ICJSZWN1cnNpdmVP
YmplY3QxIiwgImRlc2NyaXB0aW9uIjogIlJlY3Vyc2l2ZSBvYmplY3QgbWVtYmVyLiIgfQorICAg
ICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiQ2Fz
dGVkT2JqZWN0SWQiLAorICAgICAgICAgICAgInR5cGUiOiAiaW50ZWdlciIKKyAgICAgICAgfSwK
KyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlVuY2FzdGVkT2JqZWN0SWQiLAorICAgICAg
ICAgICAgInR5cGUiOiAiaW50ZWdlciIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAg
ICAgImlkIjogIlVuY2FzdGVkQW5pbWFscyIsCisgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmci
LAorICAgICAgICAgICAgImVudW0iOiBbIlBpZ3MiLCAiQ293cyIsICJDYXRzIiwgIkhlbnMiXQor
ICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiQ2FzdGVkQW5pbWFscyIs
CisgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgImVudW0iOiBbIkR1
Y2tzIiwgIkhlbnMiLCAiQ3Jvd3MiLCAiRmxhbWluZ29zIl0KKyAgICAgICAgfSwKKyAgICAgICAg
eworICAgICAgICAgICAgImlkIjogIlJlY3Vyc2l2ZU9iamVjdDEiLAorICAgICAgICAgICAgInR5
cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAib2JqIiwgIiRyZWYiOiAiUmVjdXJzaXZlT2JqZWN0MiIsICJvcHRpb25h
bCI6IHRydWUgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAg
ICAgICAiaWQiOiAiUmVjdXJzaXZlT2JqZWN0MiIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmpl
Y3QiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJvYmoiLCAiJHJlZiI6ICJSZWN1cnNpdmVPYmplY3QxIiwgIm9wdGlvbmFsIjogdHJ1ZSB9
CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdCit9CitdCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS13aXRoLW9wZW4t
cGFyYW1ldGVycy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL3R5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMC4uOTliMDIyMGQzMTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS13aXRoLW9wZW4t
cGFyYW1ldGVycy5qc29uCkBAIC0wLDAgKzEsMjEgQEAKK3sKKyAgICAiZG9tYWluIjogIlRlc3Qi
LAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIk5vT3BlblBh
cmFtZXRlcnMiLAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAgICJw
cm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAib25lIiwgInR5cGUiOiAi
bnVtYmVyIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidHdvIiwgInR5cGUiOiAibnVt
YmVyIiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAg
ICJpZCI6ICJPcGVuUGFyYW1ldGVycyIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAor
ICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJh
bHBoYSIsICJ0eXBlIjogIm51bWJlciIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImJl
dGEiLCAidHlwZSI6ICJudW1iZXIiIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0K
K30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy92ZXJzaW9uLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvdmVyc2lvbi5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwLi41MDdhNWQ5MDE3NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy92ZXJzaW9uLmpzb24KQEAgLTAsMCArMSw2IEBACit7
ImRvbWFpbnMiOlsKK3sKKyAgICAiZG9tYWluIjogIlZlcnNpb25Eb21haW4iLAorICAgICJ2ZXJz
aW9uIjogNDIKK30KK119CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRnJvbnRlbmRIb3N0LmlkbCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JGcm9udGVuZEhvc3QuaWRsCmluZGV4IGU3OGMxODkxOTYyLi4yY2NhMWI3MDMyYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5pZGwK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5pZGwK
QEAgLTkzLDkgKzkzLDcgQEAKICAgICBib29sZWFuIGlzQmVpbmdJbnNwZWN0ZWQoKTsKIAogICAg
IHJlYWRvbmx5IGF0dHJpYnV0ZSBib29sZWFuIHN1cHBvcnRzRGlhZ25vc3RpY0xvZ2dpbmc7Ci0j
aWYgRU5BQkxFX0lOU1BFQ1RPUl9URUxFTUVUUlkKLSAgICB2b2lkIGxvZ0RpYWdub3N0aWNFdmVu
dChET01TdHJpbmcgZXZlbnROYW1lLCBET01TdHJpbmcgY29udGVudCk7Ci0jZW5kaWYKKyAgICBb
Q29uZGl0aW9uYWw9SU5TUEVDVE9SX1RFTEVNRVRSWV0gdm9pZCBsb2dEaWFnbm9zdGljRXZlbnQo
RE9NU3RyaW5nIGV2ZW50TmFtZSwgRE9NU3RyaW5nIGNvbnRlbnQpOwogfTsKIAogZGljdGlvbmFy
eSBDb250ZXh0TWVudUl0ZW0gewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcAppbmRleCAwYzQ0MmVlOTA4OC4uYWNhOTMyODZh
YTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0
cnVtZW50YXRpb24uY3BwCkBAIC03OTMsMTEgKzc5MywxMyBAQCB2b2lkIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6ZnJhbWVDbGVhcmVkU2NoZWR1bGVkTmF2aWdhdGlvbkltcGwoSW5zdHJ1bWVu
dGluZwogICAgICAgICBpbnNwZWN0b3JQYWdlQWdlbnQtPmZyYW1lQ2xlYXJlZFNjaGVkdWxlZE5h
dmlnYXRpb24oZnJhbWUpOwogfQogCisjaWYgRU5BQkxFKERBUktfTU9ERV9DU1MpIHx8IEhBVkUo
T1NfREFSS19NT0RFX1NVUFBPUlQpCiB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGVm
YXVsdEFwcGVhcmFuY2VEaWRDaGFuZ2VJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1l
bnRpbmdBZ2VudHMsIGJvb2wgdXNlRGFya0FwcGVhcmFuY2UpCiB7CiAgICAgaWYgKEluc3BlY3Rv
clBhZ2VBZ2VudCogaW5zcGVjdG9yUGFnZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNw
ZWN0b3JQYWdlQWdlbnQoKSkKICAgICAgICAgaW5zcGVjdG9yUGFnZUFnZW50LT5kZWZhdWx0QXBw
ZWFyYW5jZURpZENoYW5nZSh1c2VEYXJrQXBwZWFyYW5jZSk7CiB9CisjZW5kaWYKIAogdm9pZCBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxEZXN0cm95Q2FjaGVkUmVzb3VyY2VJbXBsKENh
Y2hlZFJlc291cmNlJiBjYWNoZWRSZXNvdXJjZSkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaAppbmRleCAwM2JkZDU1Y2M5My4u
MTg4OTU2NDc4ZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JJbnN0cnVtZW50YXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uLmgKQEAgLTIyOSw3ICsyMjksOSBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIHZvaWQgZnJhbWVTdG9wcGVkTG9hZGluZyhGcmFtZSYpOwogICAgIHN0YXRpYyB2b2lkIGZy
YW1lU2NoZWR1bGVkTmF2aWdhdGlvbihGcmFtZSYsIFNlY29uZHMgZGVsYXkpOwogICAgIHN0YXRp
YyB2b2lkIGZyYW1lQ2xlYXJlZFNjaGVkdWxlZE5hdmlnYXRpb24oRnJhbWUmKTsKKyNpZiBFTkFC
TEUoREFSS19NT0RFX0NTUykgfHwgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKICAgICBzdGF0
aWMgdm9pZCBkZWZhdWx0QXBwZWFyYW5jZURpZENoYW5nZShQYWdlJiwgYm9vbCB1c2VEYXJrQXBw
ZWFyYW5jZSk7CisjZW5kaWYKICAgICBzdGF0aWMgdm9pZCB3aWxsRGVzdHJveUNhY2hlZFJlc291
cmNlKENhY2hlZFJlc291cmNlJik7CiAKICAgICBzdGF0aWMgYm9vbCB3aWxsSW50ZXJjZXB0UmVx
dWVzdChjb25zdCBGcmFtZSosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYpOwpAQCAtNDM0LDcgKzQz
Niw5IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgZnJhbWVTdG9wcGVkTG9hZGluZ0ltcGwo
SW5zdHJ1bWVudGluZ0FnZW50cyYsIEZyYW1lJik7CiAgICAgc3RhdGljIHZvaWQgZnJhbWVTY2hl
ZHVsZWROYXZpZ2F0aW9uSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiwgRnJhbWUmLCBTZWNvbmRz
IGRlbGF5KTsKICAgICBzdGF0aWMgdm9pZCBmcmFtZUNsZWFyZWRTY2hlZHVsZWROYXZpZ2F0aW9u
SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiwgRnJhbWUmKTsKKyNpZiBFTkFCTEUoREFSS19NT0RF
X0NTUykgfHwgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKICAgICBzdGF0aWMgdm9pZCBkZWZh
dWx0QXBwZWFyYW5jZURpZENoYW5nZUltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYsIGJvb2wgdXNl
RGFya0FwcGVhcmFuY2UpOworI2VuZGlmCiAgICAgc3RhdGljIHZvaWQgd2lsbERlc3Ryb3lDYWNo
ZWRSZXNvdXJjZUltcGwoQ2FjaGVkUmVzb3VyY2UmKTsKIAogICAgIHN0YXRpYyBib29sIHdpbGxJ
bnRlcmNlcHRSZXF1ZXN0SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiwgY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0Jik7CkBAIC0xMjM3LDExICsxMjQxLDEzIEBAIGlubGluZSB2b2lkIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6ZnJhbWVDbGVhcmVkU2NoZWR1bGVkTmF2aWdhdGlvbihGcmFtZSYgZnJh
CiAgICAgICAgIGZyYW1lQ2xlYXJlZFNjaGVkdWxlZE5hdmlnYXRpb25JbXBsKCppbnN0cnVtZW50
aW5nQWdlbnRzLCBmcmFtZSk7CiB9CiAKKyNpZiBFTkFCTEUoREFSS19NT0RFX0NTUykgfHwgSEFW
RShPU19EQVJLX01PREVfU1VQUE9SVCkKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6ZGVmYXVsdEFwcGVhcmFuY2VEaWRDaGFuZ2UoUGFnZSYgcGFnZSwgYm9vbCB1c2VEYXJr
QXBwZWFyYW5jZSkKIHsKICAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFModm9pZCgpKTsK
ICAgICBkZWZhdWx0QXBwZWFyYW5jZURpZENoYW5nZUltcGwoaW5zdHJ1bWVudGluZ0FnZW50c0Zv
clBhZ2UocGFnZSksIHVzZURhcmtBcHBlYXJhbmNlKTsKIH0KKyNlbmRpZgogCiBpbmxpbmUgdm9p
ZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxEZXN0cm95Q2FjaGVkUmVzb3VyY2UoQ2Fj
aGVkUmVzb3VyY2UmIGNhY2hlZFJlc291cmNlKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvclNoYWRlclByb2dyYW0uY3BwIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvclNoYWRlclByb2dyYW0uY3BwCmluZGV4IDI5MWJkMjRiMDZmLi5m
ODE2YmI2ZjQzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
clNoYWRlclByb2dyYW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JTaGFkZXJQcm9ncmFtLmNwcApAQCAtMjYsNiArMjYsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIkluc3BlY3RvclNoYWRlclByb2dyYW0uaCIKIAorI2lmIEVOQUJMRShXRUJH
TCkgfHwgRU5BQkxFKFdFQkdQVSkKKwogI2luY2x1ZGUgIkluc3BlY3RvckNhbnZhcy5oIgogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lkZW50aWZpZXJzRmFjdG9yeS5oPgogI2luY2x1ZGUgPHd0
Zi9PcHRpb25hbC5oPgpAQCAtMTUyLDEwICsxNTQsNiBAQCBzdGF0aWMgUmVmUHRyPFdlYkdQVVNo
YWRlck1vZHVsZT4gc2hhZGVyRm9yVHlwZShXZWJHUFVQaXBlbGluZSYgcGlwZWxpbmUsIEluc3Bl
YwogCiBTdHJpbmcgSW5zcGVjdG9yU2hhZGVyUHJvZ3JhbTo6cmVxdWVzdFNoYWRlclNvdXJjZShJ
bnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OlNoYWRlclR5cGUgc2hhZGVyVHlwZSkKIHsKLSNp
ZiAhRU5BQkxFKFdFQkdMKSAmJiAhRU5BQkxFKFdFQkdQVSkKLSAgICBVTlVTRURfUEFSQU0oc2hh
ZGVyVHlwZSk7Ci0jZW5kaWYKLQogICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcHJvZ3JhbSwK
ICNpZiBFTkFCTEUoV0VCR0wpCiAgICAgICAgIFsmXSAoc3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxX
ZWJHTFByb2dyYW0+IHByb2dyYW1XcmFwcGVyKSB7CkBAIC0xODQsMTEgKzE4Miw2IEBAIFN0cmlu
ZyBJbnNwZWN0b3JTaGFkZXJQcm9ncmFtOjpyZXF1ZXN0U2hhZGVyU291cmNlKEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNhbnZhczo6CiAKIGJvb2wgSW5zcGVjdG9yU2hhZGVyUHJvZ3JhbTo6dXBkYXRl
U2hhZGVyKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6U2hhZGVyVHlwZSBzaGFkZXJUeXBl
LCBjb25zdCBTdHJpbmcmIHNvdXJjZSkKIHsKLSNpZiAhRU5BQkxFKFdFQkdMKSAmJiAhRU5BQkxF
KFdFQkdQVSkKLSAgICBVTlVTRURfUEFSQU0oc2hhZGVyVHlwZSk7Ci0gICAgVU5VU0VEX1BBUkFN
KHNvdXJjZSk7Ci0jZW5kaWYKLQogICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcHJvZ3JhbSwK
ICNpZiBFTkFCTEUoV0VCR0wpCiAgICAgICAgIFsmXSAoc3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxX
ZWJHTFByb2dyYW0+IHByb2dyYW1XcmFwcGVyKSB7CkBAIC0yODEsMyArMjc0LDUgQEAgUmVmPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6U2hhZGVyUHJvZ3JhbT4gSW5zcGVjdG9yU2hhZGVy
UHJvZ3JhbTo6YnVpbGRPYmoKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclNoYWRlclByb2dyYW0uaCBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JTaGFkZXJQcm9ncmFtLmgKaW5kZXggNmRmMTNkZmZkZWIuLmNj
YzczY2VmMzc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
U2hhZGVyUHJvZ3JhbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JT
aGFkZXJQcm9ncmFtLmgKQEAgLTI1LDYgKzI1LDggQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpZiBF
TkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpCisKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JQcm90b2NvbE9iamVjdHMuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgog
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CkBAIC05OSwzICsxMDEsNSBAQCBwcml2YXRlOgog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKSB8
fCBFTkFCTEUoV0VCR1BVKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JDYW52YXNBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
YWdlbnRzL0luc3BlY3RvckNhbnZhc0FnZW50LmNwcAppbmRleCAxZDM5OGM1NDdjYy4uNWZmZjI5
ODYzMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVj
dG9yQ2FudmFzQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yQ2FudmFzQWdlbnQuY3BwCkBAIC04OCw3ICs4OCw5IEBAIEluc3BlY3RvckNhbnZh
c0FnZW50OjpJbnNwZWN0b3JDYW52YXNBZ2VudChQYWdlQWdlbnRDb250ZXh0JiBjb250ZXh0KQog
ICAgICwgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIoY29udGV4dC5pbmplY3RlZFNjcmlwdE1hbmFn
ZXIpCiAgICAgLCBtX2luc3BlY3RlZFBhZ2UoY29udGV4dC5pbnNwZWN0ZWRQYWdlKQogICAgICwg
bV9jYW52YXNEZXN0cm95ZWRUaW1lcigqdGhpcywgJkluc3BlY3RvckNhbnZhc0FnZW50OjpjYW52
YXNEZXN0cm95ZWRUaW1lckZpcmVkKQorI2lmIEVOQUJMRShXRUJHTCkgfHwgRU5BQkxFKFdFQkdQ
VSkKICAgICAsIG1fcHJvZ3JhbURlc3Ryb3llZFRpbWVyKCp0aGlzLCAmSW5zcGVjdG9yQ2FudmFz
QWdlbnQ6OnByb2dyYW1EZXN0cm95ZWRUaW1lckZpcmVkKQorI2VuZGlmIC8vIEVOQUJMRShXRUJH
TCkgfHwgRU5BQkxFKFdFQkdQVSkKIHsKIH0KIApAQCAtMTMyLDcgKzEzNCw3IEBAIHZvaWQgSW5z
cGVjdG9yQ2FudmFzQWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYpCiAgICAgICAgICAgICAvLyBU
aGUgYWN0dWFsICJjb250ZXh0IiBmb3IgV2ViR1BVIGlzIHRoZSBgV2ViR1BVRGV2aWNlYCwgbm90
IHRoZSA8Y2FudmFzPi4KICAgICAgICAgICAgIGlmIChpczxHUFVDYW52YXNDb250ZXh0Pihjb250
ZXh0KSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSNlbmRpZgorI2VuZGlmIC8vIEVOQUJM
RShXRUJHUFUpCiAKICAgICAgICAgICAgIGlmIChleGlzdHNJbkN1cnJlbnRQYWdlKGNvbnRleHQt
PmNhbnZhc0Jhc2UoKS5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpKQogICAgICAgICAgICAgICAg
IGJpbmRDYW52YXMoKmNvbnRleHQsIGZhbHNlKTsKQEAgLTE0Nyw3ICsxNDksNyBAQCB2b2lkIElu
c3BlY3RvckNhbnZhc0FnZW50OjplbmFibGUoRXJyb3JTdHJpbmcmKQogICAgICAgICAgICAgICAg
IGJpbmRDYW52YXMoKmRldmljZSwgZmFsc2UpOwogICAgICAgICB9CiAgICAgfQotI2VuZGlmCisj
ZW5kaWYgLy8gRU5BQkxFKFdFQkdQVSkKIAogI2lmIEVOQUJMRShXRUJHTCkKICAgICB7CkBAIC0x
NTcsNyArMTU5LDcgQEAgdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZW5hYmxlKEVycm9yU3Ry
aW5nJikKICAgICAgICAgICAgICAgICBkaWRDcmVhdGVXZWJHTFByb2dyYW0oKmNvbnRleHRXZWJH
TEJhc2UsICpwcm9ncmFtKTsKICAgICAgICAgfQogICAgIH0KLSNlbmRpZgorI2VuZGlmIC8vIEVO
QUJMRShXRUJHTCkKIAogI2lmIEVOQUJMRShXRUJHUFUpCiAgICAgewpAQCAtMTY3LDcgKzE2OSw3
IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYpCiAgICAg
ICAgICAgICAgICAgZGlkQ3JlYXRlV2ViR1BVUGlwZWxpbmUoKmRldmljZSwgKnBpcGVsaW5lKTsK
ICAgICAgICAgfQogICAgIH0KLSNlbmRpZgorI2VuZGlmIC8vIEVOQUJMRShXRUJHUFUpCiB9CiAK
IHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcmKQpAQCAtMzAz
LDYgKzMwNSw3IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnN0b3BSZWNvcmRpbmcoRXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmCiAgICAgZGlkRmluaXNoUmVjb3Jk
aW5nQ2FudmFzRnJhbWUoKmNvbnRleHQsIHRydWUpOwogfQogCisjaWYgRU5BQkxFKFdFQkdMKSB8
fCBFTkFCTEUoV0VCR1BVKQogdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6cmVxdWVzdFNoYWRl
clNvdXJjZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgcHJvZ3JhbUlk
LCBjb25zdCBTdHJpbmcmIHNoYWRlclR5cGVTdHJpbmcsIFN0cmluZyogb3V0U291cmNlKQogewog
ICAgIGF1dG8gaW5zcGVjdG9yUHJvZ3JhbSA9IGFzc2VydEluc3BlY3RvclByb2dyYW0oZXJyb3JT
dHJpbmcsIHByb2dyYW1JZCk7CkBAIC0zNDAsNiArMzQzLDcgQEAgdm9pZCBJbnNwZWN0b3JDYW52
YXNBZ2VudDo6dXBkYXRlU2hhZGVyKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3Ry
aW5nJgogICAgICAgICBlcnJvclN0cmluZyA9ICJGYWlsZWQgdG8gdXBkYXRlIHNoYWRlciBvZiBn
aXZlbiBzaGFkZXJUeXBlIGZvciBnaXZlbiBwcm9ncmFtSWQiX3M7CiB9CiAKKyNpZiBFTkFCTEUo
V0VCR0wpCiB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpzZXRTaGFkZXJQcm9ncmFtRGlzYWJs
ZWQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHByb2dyYW1JZCwgYm9v
bCBkaXNhYmxlZCkKIHsKICAgICBhdXRvIGluc3BlY3RvclByb2dyYW0gPSBhc3NlcnRJbnNwZWN0
b3JQcm9ncmFtKGVycm9yU3RyaW5nLCBwcm9ncmFtSWQpOwpAQCAtMzU3LDYgKzM2MSw4IEBAIHZv
aWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnNldFNoYWRlclByb2dyYW1IaWdobGlnaHRlZChFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsCiAKICAgICBpbnNwZWN0b3JQcm9ncmFtLT5zZXRIaWdobGln
aHRlZChoaWdobGlnaHRlZCk7CiB9CisjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQorI2VuZGlmIC8v
I2lmIEVOQUJMRShXRUJHTCkgfHwgRU5BQkxFKFdFQkdQVSkKIAogdm9pZCBJbnNwZWN0b3JDYW52
YXNBZ2VudDo6ZnJhbWVOYXZpZ2F0ZWQoRnJhbWUmIGZyYW1lKQogewpAQCAtNjI1LDcgKzYzMSw3
IEBAIGJvb2wgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmlzV2ViR0xQcm9ncmFtSGlnaGxpZ2h0ZWQo
V2ViR0xQcm9ncmFtJiBwcm9ncmFtKQogCiAgICAgcmV0dXJuIGluc3BlY3RvclByb2dyYW0tPmhp
Z2hsaWdodGVkKCk7CiB9Ci0jZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCiAKICNpZiBF
TkFCTEUoV0VCR1BVKQogdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZGlkQ3JlYXRlV2ViR1BV
RGV2aWNlKFdlYkdQVURldmljZSYgZGV2aWNlKQpAQCAtNjg4LDcgKzY5NCw3IEBAIHZvaWQgSW5z
cGVjdG9yQ2FudmFzQWdlbnQ6OndpbGxEZXN0cm95V2ViR1BVUGlwZWxpbmUoV2ViR1BVUGlwZWxp
bmUmIHBpcGVsaW5lKQogCiAgICAgdW5iaW5kUHJvZ3JhbSgqaW5zcGVjdG9yUHJvZ3JhbSk7CiB9
Ci0jZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR1BVKQogCiB2b2lkIEluc3BlY3RvckNhbnZh
c0FnZW50OjpzdGFydFJlY29yZGluZyhJbnNwZWN0b3JDYW52YXMmIGluc3BlY3RvckNhbnZhcywg
SW5zcGVjdG9yOjpQcm90b2NvbDo6UmVjb3JkaW5nOjpJbml0aWF0b3IgaW5pdGlhdG9yLCBSZWNv
cmRpbmdPcHRpb25zJiYgcmVjb3JkaW5nT3B0aW9ucykKIHsKQEAgLTcwMCwxMCArNzA2LDEwIEBA
IHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnN0YXJ0UmVjb3JkaW5nKEluc3BlY3RvckNhbnZh
cyYgaW5zcGVjdG9yQ2FudmFzLCBJbnNwCiAgICAgICAgICYmICFpczxJbWFnZUJpdG1hcFJlbmRl
cmluZ0NvbnRleHQ+KGNvbnRleHQpCiAjaWYgRU5BQkxFKFdFQkdMKQogICAgICAgICAmJiAhaXM8
V2ViR0xSZW5kZXJpbmdDb250ZXh0Pihjb250ZXh0KQotI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxF
KFdFQkdMKQogI2lmIEVOQUJMRShXRUJHTDIpCiAgICAgICAgICYmICFpczxXZWJHTDJSZW5kZXJp
bmdDb250ZXh0Pihjb250ZXh0KQotI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdMMikKICAg
ICApCiAgICAgICAgIHJldHVybjsKIApAQCAtNzMzLDYgKzczOSw3IEBAIHZvaWQgSW5zcGVjdG9y
Q2FudmFzQWdlbnQ6OmNhbnZhc0Rlc3Ryb3llZFRpbWVyRmlyZWQoKQogICAgIG1fcmVtb3ZlZENh
bnZhc0lkZW50aWZpZXJzLmNsZWFyKCk7CiB9CiAKKyNpZiBFTkFCTEUoV0VCR0wpIHx8IEVOQUJM
RShXRUJHUFUpCiB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50Ojpwcm9ncmFtRGVzdHJveWVkVGlt
ZXJGaXJlZCgpCiB7CiAgICAgaWYgKCFtX3JlbW92ZWRQcm9ncmFtSWRlbnRpZmllcnMuc2l6ZSgp
KQpAQCAtNzQzLDYgKzc1MCw3IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnByb2dyYW1E
ZXN0cm95ZWRUaW1lckZpcmVkKCkKIAogICAgIG1fcmVtb3ZlZFByb2dyYW1JZGVudGlmaWVycy5j
bGVhcigpOwogfQorI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkgfHwgRU5BQkxFKFdFQkdQVSkKIAog
dm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6cmVzZXQoKQogewpAQCAtNzU2LDEwICs3NjQsMTIg
QEAgdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6cmVzZXQoKQogICAgIGlmIChtX2NhbnZhc0Rl
c3Ryb3llZFRpbWVyLmlzQWN0aXZlKCkpCiAgICAgICAgIG1fY2FudmFzRGVzdHJveWVkVGltZXIu
c3RvcCgpOwogCisjaWYgRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKQogICAgIG1faWRl
bnRpZmllclRvSW5zcGVjdG9yUHJvZ3JhbS5jbGVhcigpOwogICAgIG1fcmVtb3ZlZFByb2dyYW1J
ZGVudGlmaWVycy5jbGVhcigpOwogICAgIGlmIChtX3Byb2dyYW1EZXN0cm95ZWRUaW1lci5pc0Fj
dGl2ZSgpKQogICAgICAgICBtX3Byb2dyYW1EZXN0cm95ZWRUaW1lci5zdG9wKCk7CisjZW5kaWYg
Ly8gRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKQogCiAgICAgbV9yZWNvcmRpbmdDYW52
YXNJZGVudGlmaWVycy5jbGVhcigpOwogfQpAQCAtNzk4LDcgKzgwOCw3IEBAIEluc3BlY3RvckNh
bnZhcyYgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmJpbmRDYW52YXMoV2ViR1BVRGV2aWNlJiBkZXZp
Y2UsIGJvb2wgY2FwCiAKICAgICByZXR1cm4gaW5zcGVjdG9yQ2FudmFzOwogfQotI2VuZGlmCisj
ZW5kaWYgLy8gRU5BQkxFKFdFQkdQVSkKIAogdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6dW5i
aW5kQ2FudmFzKEluc3BlY3RvckNhbnZhcyYgaW5zcGVjdG9yQ2FudmFzKQogewpAQCAtODExLDcg
KzgyMSw3IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnVuYmluZENhbnZhcyhJbnNwZWN0
b3JDYW52YXMmIGluc3BlY3RvckNhbnZhcykKIAogICAgIGZvciAoYXV0byogaW5zcGVjdG9yUHJv
Z3JhbSA6IHByb2dyYW1zVG9SZW1vdmUpCiAgICAgICAgIHVuYmluZFByb2dyYW0oKmluc3BlY3Rv
clByb2dyYW0pOwotI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQogCiAgICAgaWYgKGF1
dG8qIGNvbnRleHQgPSBpbnNwZWN0b3JDYW52YXMuY2FudmFzQ29udGV4dCgpKQogICAgICAgICBj
b250ZXh0LT5jYW52YXNCYXNlKCkucmVtb3ZlT2JzZXJ2ZXIoKnRoaXMpOwpAQCAtODU2LDggKzg2
Niw5IEBAIFJlZlB0cjxJbnNwZWN0b3JDYW52YXM+IEluc3BlY3RvckNhbnZhc0FnZW50OjpmaW5k
SW5zcGVjdG9yQ2FudmFzKFdlYkdQVURldmljZSYKICAgICB9CiAgICAgcmV0dXJuIG51bGxwdHI7
CiB9Ci0jZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR1BVKQogCisjaWYgRU5BQkxFKFdFQkdM
KSB8fCBFTkFCTEUoV0VCR1BVKQogdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6dW5iaW5kUHJv
Z3JhbShJbnNwZWN0b3JTaGFkZXJQcm9ncmFtJiBpbnNwZWN0b3JQcm9ncmFtKQogewogICAgIFN0
cmluZyBpZGVudGlmaWVyID0gaW5zcGVjdG9yUHJvZ3JhbS5pZGVudGlmaWVyKCk7CkBAIC04OTEs
NyArOTAyLDcgQEAgUmVmUHRyPEluc3BlY3RvclNoYWRlclByb2dyYW0+IEluc3BlY3RvckNhbnZh
c0FnZW50OjpmaW5kSW5zcGVjdG9yUHJvZ3JhbShXZWJHTFAKICAgICB9CiAgICAgcmV0dXJuIG51
bGxwdHI7CiB9Ci0jZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCiAKICNpZiBFTkFCTEUo
V0VCR1BVKQogUmVmUHRyPEluc3BlY3RvclNoYWRlclByb2dyYW0+IEluc3BlY3RvckNhbnZhc0Fn
ZW50OjpmaW5kSW5zcGVjdG9yUHJvZ3JhbShXZWJHUFVQaXBlbGluZSYgcGlwZWxpbmUpCkBAIC05
MDIsNiArOTEzLDcgQEAgUmVmUHRyPEluc3BlY3RvclNoYWRlclByb2dyYW0+IEluc3BlY3RvckNh
bnZhc0FnZW50OjpmaW5kSW5zcGVjdG9yUHJvZ3JhbShXZWJHUFUKICAgICB9CiAgICAgcmV0dXJu
IG51bGxwdHI7CiB9Ci0jZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR1BVKQorI2VuZGlmIC8v
IEVOQUJMRShXRUJHTCkgfHwgRU5BQkxFKFdFQkdQVSkKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JD
YW52YXNBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JD
YW52YXNBZ2VudC5oCmluZGV4IGZmOWE1MzNlMDQ4Li4wZWYxYWVmYjY0NyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDYW52YXNBZ2VudC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ2FudmFzQWdlbnQu
aApAQCAtNDMsMTcgKzQzLDE5IEBAIGNsYXNzIEluamVjdGVkU2NyaXB0TWFuYWdlcjsKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDsKKyNpZiBFTkFC
TEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpCiBjbGFzcyBJbnNwZWN0b3JTaGFkZXJQcm9ncmFt
OwogI2lmIEVOQUJMRShXRUJHTCkKIGNsYXNzIFdlYkdMUHJvZ3JhbTsKIGNsYXNzIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U7Ci0jZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCiAjaWYg
RU5BQkxFKFdFQkdQVSkKIGNsYXNzIEdQVUNhbnZhc0NvbnRleHQ7CiBjbGFzcyBXZWJHUFVEZXZp
Y2U7CiBjbGFzcyBXZWJHUFVQaXBlbGluZTsKIGNsYXNzIFdlYkdQVVN3YXBDaGFpbjsKLSNlbmRp
ZgorI2VuZGlmIC8vIEVOQUJMRShXRUJHUFUpCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKSB8fCBF
TkFCTEUoV0VCR1BVKQogCiB0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKIApAQCAtNzksMTAg
KzgxLDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFJlY29yZGluZ0F1dG9DYXB0dXJlRnJhbWVD
b3VudChFcnJvclN0cmluZyYsIGludCBjb3VudCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBzdGFydFJl
Y29yZGluZyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgY2FudmFzSWQsIGNvbnN0IGludCog
ZnJhbWVDb3VudCwgY29uc3QgaW50KiBtZW1vcnlMaW1pdCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBz
dG9wUmVjb3JkaW5nKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBjYW52YXNJZCkgb3ZlcnJp
ZGU7CisjaWYgRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKQogICAgIHZvaWQgcmVxdWVz
dFNoYWRlclNvdXJjZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgcHJvZ3JhbUlkLCBjb25z
dCBTdHJpbmcmIHNoYWRlclR5cGUsIFN0cmluZyogc291cmNlKSBvdmVycmlkZTsKICAgICB2b2lk
IHVwZGF0ZVNoYWRlcihFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgcHJvZ3JhbUlkLCBjb25z
dCBTdHJpbmcmIHNoYWRlclR5cGUsIGNvbnN0IFN0cmluZyYgc291cmNlKSBvdmVycmlkZTsKKyNp
ZiBFTkFCTEUoV0VCR0wpCiAgICAgdm9pZCBzZXRTaGFkZXJQcm9ncmFtRGlzYWJsZWQoRXJyb3JT
dHJpbmcmLCBjb25zdCBTdHJpbmcmIHByb2dyYW1JZCwgYm9vbCBkaXNhYmxlZCkgb3ZlcnJpZGU7
CiAgICAgdm9pZCBzZXRTaGFkZXJQcm9ncmFtSGlnaGxpZ2h0ZWQoRXJyb3JTdHJpbmcmLCBjb25z
dCBTdHJpbmcmIHByb2dyYW1JZCwgYm9vbCBoaWdobGlnaHRlZCkgb3ZlcnJpZGU7CisjZW5kaWYg
Ly8gRU5BQkxFKFdFQkdMKQorI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkgfHwgRU5BQkxFKFdFQkdQ
VSkKIAogICAgIC8vIENhbnZhc09ic2VydmVyCiAgICAgdm9pZCBjYW52YXNDaGFuZ2VkKENhbnZh
c0Jhc2UmLCBjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKQEAgLTEwNCwxNCArMTEwLDE0IEBA
IHB1YmxpYzoKICAgICB2b2lkIHdpbGxEZXN0cm95V2ViR0xQcm9ncmFtKFdlYkdMUHJvZ3JhbSYp
OwogICAgIGJvb2wgaXNXZWJHTFByb2dyYW1EaXNhYmxlZChXZWJHTFByb2dyYW0mKTsKICAgICBi
b29sIGlzV2ViR0xQcm9ncmFtSGlnaGxpZ2h0ZWQoV2ViR0xQcm9ncmFtJik7Ci0jZW5kaWYKKyNl
bmRpZiAvLyBFTkFCTEUoV0VCR0wpCiAjaWYgRU5BQkxFKFdFQkdQVSkKICAgICB2b2lkIGRpZENy
ZWF0ZVdlYkdQVURldmljZShXZWJHUFVEZXZpY2UmKTsKICAgICB2b2lkIHdpbGxEZXN0cm95V2Vi
R1BVRGV2aWNlKFdlYkdQVURldmljZSYpOwogICAgIHZvaWQgd2lsbENvbmZpZ3VyZVN3YXBDaGFp
bihHUFVDYW52YXNDb250ZXh0JiwgV2ViR1BVU3dhcENoYWluJik7CiAgICAgdm9pZCBkaWRDcmVh
dGVXZWJHUFVQaXBlbGluZShXZWJHUFVEZXZpY2UmLCBXZWJHUFVQaXBlbGluZSYpOwogICAgIHZv
aWQgd2lsbERlc3Ryb3lXZWJHUFVQaXBlbGluZShXZWJHUFVQaXBlbGluZSYpOwotI2VuZGlmCisj
ZW5kaWYgLy8gRU5BQkxFKFdFQkdQVSkKIAogcHJpdmF0ZToKICAgICBzdHJ1Y3QgUmVjb3JkaW5n
T3B0aW9ucyB7CkBAIC0xMjIsMjggKzEyOCwzMiBAQCBwcml2YXRlOgogICAgIHZvaWQgc3RhcnRS
ZWNvcmRpbmcoSW5zcGVjdG9yQ2FudmFzJiwgSW5zcGVjdG9yOjpQcm90b2NvbDo6UmVjb3JkaW5n
OjpJbml0aWF0b3IsIFJlY29yZGluZ09wdGlvbnMmJiA9IHsgfSk7CiAKICAgICB2b2lkIGNhbnZh
c0Rlc3Ryb3llZFRpbWVyRmlyZWQoKTsKKyNpZiBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJH
UFUpCiAgICAgdm9pZCBwcm9ncmFtRGVzdHJveWVkVGltZXJGaXJlZCgpOworI2VuZGlmIC8vIEVO
QUJMRShXRUJHTCkgfHwgRU5BQkxFKFdFQkdQVSkKICAgICB2b2lkIHJlc2V0KCk7CiAKICAgICBJ
bnNwZWN0b3JDYW52YXMmIGJpbmRDYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYsIGJvb2wg
Y2FwdHVyZUJhY2t0cmFjZSk7CiAjaWYgRU5BQkxFKFdFQkdQVSkKICAgICBJbnNwZWN0b3JDYW52
YXMmIGJpbmRDYW52YXMoV2ViR1BVRGV2aWNlJiwgYm9vbCBjYXB0dXJlQmFja3RyYWNlKTsKLSNl
bmRpZgorI2VuZGlmIC8vIEVOQUJMRShXRUJHUFUpCiAgICAgdm9pZCB1bmJpbmRDYW52YXMoSW5z
cGVjdG9yQ2FudmFzJik7CiAgICAgUmVmUHRyPEluc3BlY3RvckNhbnZhcz4gYXNzZXJ0SW5zcGVj
dG9yQ2FudmFzKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBjYW52YXNJZCk7CiAgICAgUmVm
UHRyPEluc3BlY3RvckNhbnZhcz4gZmluZEluc3BlY3RvckNhbnZhcyhDYW52YXNSZW5kZXJpbmdD
b250ZXh0Jik7CiAjaWYgRU5BQkxFKFdFQkdQVSkKICAgICBSZWZQdHI8SW5zcGVjdG9yQ2FudmFz
PiBmaW5kSW5zcGVjdG9yQ2FudmFzKFdlYkdQVURldmljZSYpOwotI2VuZGlmCisjZW5kaWYgLy8g
RU5BQkxFKFdFQkdQVSkKIAorI2lmIEVOQUJMRShXRUJHTCkgfHwgRU5BQkxFKFdFQkdQVSkKICAg
ICB2b2lkIHVuYmluZFByb2dyYW0oSW5zcGVjdG9yU2hhZGVyUHJvZ3JhbSYpOwogICAgIFJlZlB0
cjxJbnNwZWN0b3JTaGFkZXJQcm9ncmFtPiBhc3NlcnRJbnNwZWN0b3JQcm9ncmFtKEVycm9yU3Ry
aW5nJiwgY29uc3QgU3RyaW5nJiBwcm9ncmFtSWQpOwogI2lmIEVOQUJMRShXRUJHTCkKICAgICBS
ZWZQdHI8SW5zcGVjdG9yU2hhZGVyUHJvZ3JhbT4gZmluZEluc3BlY3RvclByb2dyYW0oV2ViR0xQ
cm9ncmFtJik7Ci0jZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCiAjaWYgRU5BQkxFKFdF
QkdQVSkKICAgICBSZWZQdHI8SW5zcGVjdG9yU2hhZGVyUHJvZ3JhbT4gZmluZEluc3BlY3RvclBy
b2dyYW0oV2ViR1BVUGlwZWxpbmUmKTsKLSNlbmRpZgorI2VuZGlmIC8vIEVOQUJMRShXRUJHUFUp
CisjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKQogCiAgICAgc3RkOjp1
bmlxdWVfcHRyPEluc3BlY3Rvcjo6Q2FudmFzRnJvbnRlbmREaXNwYXRjaGVyPiBtX2Zyb250ZW5k
RGlzcGF0Y2hlcjsKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpDYW52YXNCYWNrZW5kRGlzcGF0Y2hl
cj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKQEAgLTE1NSw5ICsxNjUsMTEgQEAgcHJpdmF0ZToKICAg
ICBWZWN0b3I8U3RyaW5nPiBtX3JlbW92ZWRDYW52YXNJZGVudGlmaWVyczsKICAgICBUaW1lciBt
X2NhbnZhc0Rlc3Ryb3llZFRpbWVyOwogCisjaWYgRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VC
R1BVKQogICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8SW5zcGVjdG9yU2hhZGVyUHJvZ3JhbT4+
IG1faWRlbnRpZmllclRvSW5zcGVjdG9yUHJvZ3JhbTsKICAgICBWZWN0b3I8U3RyaW5nPiBtX3Jl
bW92ZWRQcm9ncmFtSWRlbnRpZmllcnM7CiAgICAgVGltZXIgbV9wcm9ncmFtRGVzdHJveWVkVGlt
ZXI7CisjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKQogCiAgICAgSGFz
aFNldDxTdHJpbmc+IG1fcmVjb3JkaW5nQ2FudmFzSWRlbnRpZmllcnM7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5jcHAKaW5k
ZXggYTJmOGRmYTE2MjQuLmMzNWEwNThiOTRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcApAQCAtMTIwNywxMCArMTIw
NywxNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8SGlnaGxpZ2h0Q29uZmlnPiBJbnNwZWN0b3JET01BZ2Vu
dDo6aGlnaGxpZ2h0Q29uZmlnRnJvbUluc3BlY3RvcgogICAgIHJldHVybiBoaWdobGlnaHRDb25m
aWc7CiB9CiAKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQordm9pZCBJbnNwZWN0b3JET01BZ2Vu
dDo6c2V0SW5zcGVjdE1vZGVFbmFibGVkKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgYm9vbCBl
bmFibGVkLCBjb25zdCBKU09OOjpPYmplY3QqIGhpZ2hsaWdodENvbmZpZykKK3sKKyAgICBzZXRT
ZWFyY2hpbmdGb3JOb2RlKGVycm9yU3RyaW5nLCBlbmFibGVkLCBoaWdobGlnaHRDb25maWcgPyBo
aWdobGlnaHRDb25maWcgOiBudWxscHRyLCBmYWxzZSk7Cit9CisjZWxzZQogdm9pZCBJbnNwZWN0
b3JET01BZ2VudDo6c2V0SW5zcGVjdE1vZGVFbmFibGVkKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgYm9vbCBlbmFibGVkLCBjb25zdCBKU09OOjpPYmplY3QqIGhpZ2hsaWdodENvbmZpZywgY29u
c3QgYm9vbCogc2hvd1J1bGVycykKIHsKICAgICBzZXRTZWFyY2hpbmdGb3JOb2RlKGVycm9yU3Ry
aW5nLCBlbmFibGVkLCBoaWdobGlnaHRDb25maWcgPyBoaWdobGlnaHRDb25maWcgOiBudWxscHRy
LCBzaG93UnVsZXJzICYmICpzaG93UnVsZXJzKTsKIH0KKyNlbmRpZgogCiB2b2lkIEluc3BlY3Rv
ckRPTUFnZW50OjpoaWdobGlnaHRSZWN0KEVycm9yU3RyaW5nJiwgaW50IHgsIGludCB5LCBpbnQg
d2lkdGgsIGludCBoZWlnaHQsIGNvbnN0IEpTT046Ok9iamVjdCogY29sb3IsIGNvbnN0IEpTT046
Ok9iamVjdCogb3V0bGluZUNvbG9yLCBjb25zdCBib29sKiB1c2VQYWdlQ29vcmRpbmF0ZXMpCiB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRP
TUFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFn
ZW50LmgKaW5kZXggN2RmMGU4M2ViNTMuLmU4YTc0ZjZkMDA3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5oCkBAIC0xMzEsNyAr
MTMxLDExIEBAIHB1YmxpYzoKICAgICB2b2lkIGRpc2NhcmRTZWFyY2hSZXN1bHRzKEVycm9yU3Ry
aW5nJiwgY29uc3QgU3RyaW5nJiBzZWFyY2hJZCkgb3ZlcnJpZGU7CiAgICAgdm9pZCByZXNvbHZl
Tm9kZShFcnJvclN0cmluZyYsIGludCBub2RlSWQsIGNvbnN0IFN0cmluZyogb2JqZWN0R3JvdXAs
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1
bHQpIG92ZXJyaWRlOwogICAgIHZvaWQgZ2V0QXR0cmlidXRlcyhFcnJvclN0cmluZyYsIGludCBu
b2RlSWQsIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiByZXN1bHQpIG92ZXJyaWRlOwor
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgdm9pZCBzZXRJbnNwZWN0TW9kZUVuYWJsZWQo
RXJyb3JTdHJpbmcmLCBib29sIGVuYWJsZWQsIGNvbnN0IEpTT046Ok9iamVjdCogaGlnaGxpZ2h0
Q29uZmlnKSBvdmVycmlkZTsKKyNlbHNlCiAgICAgdm9pZCBzZXRJbnNwZWN0TW9kZUVuYWJsZWQo
RXJyb3JTdHJpbmcmLCBib29sIGVuYWJsZWQsIGNvbnN0IEpTT046Ok9iamVjdCogaGlnaGxpZ2h0
Q29uZmlnLCBjb25zdCBib29sKiBzaG93UnVsZXJzKSBvdmVycmlkZTsKKyNlbmRpZgogICAgIHZv
aWQgcmVxdWVzdE5vZGUoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBpbnQq
IG5vZGVJZCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBwdXNoTm9kZUJ5UGF0aFRvRnJvbnRlbmQoRXJy
b3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHBhdGgsIGludCogbm9kZUlkKSBvdmVycmlkZTsKICAg
ICB2b2lkIGhpZGVIaWdobGlnaHQoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUGFnZUFnZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUGFnZUFnZW50LmNwcApp
bmRleCAwMmVkZDQzODU5Ni4uNDM1MjI4OTRlMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUGFnZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKQEAgLTM1Niw3ICsz
NTYsNyBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nJiBlcnJv
clN0cmluZykKICAgICBzdG9wd2F0Y2gucmVzZXQoKTsKICAgICBzdG9wd2F0Y2guc3RhcnQoKTsK
IAotI2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCisjaWYgRU5BQkxFKERBUktfTU9ERV9D
U1MpIHx8IEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCiAgICAgZGVmYXVsdEFwcGVhcmFuY2VE
aWRDaGFuZ2UobV9pbnNwZWN0ZWRQYWdlLmRlZmF1bHRVc2VEYXJrQXBwZWFyYW5jZSgpKTsKICNl
bmRpZgogfQpAQCAtMzY3LDEwICszNjcsMTQgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmRp
c2FibGUoRXJyb3JTdHJpbmcmKQogCiAgICAgRXJyb3JTdHJpbmcgdW51c2VkOwogICAgIHNldFNo
b3dQYWludFJlY3RzKHVudXNlZCwgZmFsc2UpOworI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQog
ICAgIHNldFNob3dSdWxlcnModW51c2VkLCBmYWxzZSk7CisjZW5kaWYKICAgICBvdmVycmlkZVVz
ZXJBZ2VudCh1bnVzZWQsIG51bGxwdHIpOwogICAgIHNldEVtdWxhdGVkTWVkaWEodW51c2VkLCBl
bXB0eVN0cmluZygpKTsKKyNpZiBFTkFCTEUoREFSS19NT0RFX0NTUykgfHwgSEFWRShPU19EQVJL
X01PREVfU1VQUE9SVCkKICAgICBzZXRGb3JjZWRBcHBlYXJhbmNlKHVudXNlZCwgZW1wdHlTdHJp
bmcoKSk7CisjZW5kaWYKIAogICAgIGF1dG8mIGluc3BlY3RlZFBhZ2VTZXR0aW5ncyA9IG1faW5z
cGVjdGVkUGFnZS5zZXR0aW5ncygpOwogICAgIGluc3BlY3RlZFBhZ2VTZXR0aW5ncy5zZXRBdXRo
b3JBbmRVc2VyU3R5bGVzRW5hYmxlZEluc3BlY3Rvck92ZXJyaWRlKFdURjo6bnVsbG9wdCk7CkBA
IC03NzAsMTAgKzc3NCwxMiBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6c2VhcmNoSW5SZXNv
dXJjZXMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbgogICAgICAgICBuZXR3
b3JrQWdlbnQtPnNlYXJjaE90aGVyUmVxdWVzdHMocmVnZXgsIHJlc3VsdCk7CiB9CiAKKyNpZiAh
UExBVEZPUk0oSU9TX0ZBTUlMWSkKIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzZXRTaG93UnVs
ZXJzKEVycm9yU3RyaW5nJiwgYm9vbCBzaG93UnVsZXJzKQogewogICAgIG1fb3ZlcmxheS0+c2V0
U2hvd1J1bGVycyhzaG93UnVsZXJzKTsKIH0KKyNlbmRpZgogCiB2b2lkIEluc3BlY3RvclBhZ2VB
Z2VudDo6c2V0U2hvd1BhaW50UmVjdHMoRXJyb3JTdHJpbmcmLCBib29sIHNob3cpCiB7CkBAIC04
NjksMTAgKzg3NSwxMiBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6ZnJhbWVDbGVhcmVkU2No
ZWR1bGVkTmF2aWdhdGlvbihGcmFtZSYgZnJhbWUpCiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXIt
PmZyYW1lQ2xlYXJlZFNjaGVkdWxlZE5hdmlnYXRpb24oZnJhbWVJZCgmZnJhbWUpKTsKIH0KIAor
I2lmIEVOQUJMRShEQVJLX01PREVfQ1NTKSB8fCBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQog
dm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmRlZmF1bHRBcHBlYXJhbmNlRGlkQ2hhbmdlKGJvb2wg
dXNlRGFya0FwcGVhcmFuY2UpCiB7CiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmRlZmF1bHRB
cHBlYXJhbmNlRGlkQ2hhbmdlKHVzZURhcmtBcHBlYXJhbmNlID8gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6UGFnZTo6QXBwZWFyYW5jZTo6RGFyayA6IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkFw
cGVhcmFuY2U6OkxpZ2h0KTsKIH0KKyNlbmRpZgogCiB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6
ZGlkQ2xlYXJXaW5kb3dPYmplY3RJbldvcmxkKEZyYW1lJiBmcmFtZSwgRE9NV3JhcHBlcldvcmxk
JiB3b3JsZCkKIHsKQEAgLTEwMDgsMTMgKzEwMTYsOSBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2Vu
dDo6c2V0RW11bGF0ZWRNZWRpYShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgbWVkaWEpCiAg
ICAgZG9jdW1lbnQtPmV2YWx1YXRlTWVkaWFRdWVyaWVzQW5kUmVwb3J0Q2hhbmdlcygpOwogfQog
CisjaWYgRU5BQkxFKERBUktfTU9ERV9DU1MpIHx8IEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQp
CiB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6c2V0Rm9yY2VkQXBwZWFyYW5jZShFcnJvclN0cmlu
ZyYsIGNvbnN0IFN0cmluZyYgYXBwZWFyYW5jZSkKIHsKLSAgICBpZiAoYXBwZWFyYW5jZSA9PSBt
X2ZvcmNlZEFwcGVhcmFuY2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fZm9yY2VkQXBwZWFy
YW5jZSA9IGFwcGVhcmFuY2U7Ci0KICAgICBpZiAoYXBwZWFyYW5jZSA9PSAiTGlnaHQiX3MpCiAg
ICAgICAgIG1faW5zcGVjdGVkUGFnZS5zZXRVc2VEYXJrQXBwZWFyYW5jZU92ZXJyaWRlKGZhbHNl
KTsKICAgICBlbHNlIGlmIChhcHBlYXJhbmNlID09ICJEYXJrIl9zKQpAQCAtMTAyMiw2ICsxMDI2
LDcgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNldEZvcmNlZEFwcGVhcmFuY2UoRXJyb3JT
dHJpbmcmLCBjb25zdCBTdHJpbmcmIGFwcGVhcmEKICAgICBlbHNlCiAgICAgICAgIG1faW5zcGVj
dGVkUGFnZS5zZXRVc2VEYXJrQXBwZWFyYW5jZU92ZXJyaWRlKFdURjo6bnVsbG9wdCk7CiB9Cisj
ZW5kaWYKIAogdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmFwcGx5VXNlckFnZW50T3ZlcnJpZGUo
U3RyaW5nJiB1c2VyQWdlbnQpCiB7CkBAIC0xMDY5LDkgKzEwNzQsOSBAQCB2b2lkIEluc3BlY3Rv
clBhZ2VBZ2VudDo6c25hcHNob3RSZWN0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IHgs
IGludCB5LCBpbgogICAgICpvdXREYXRhVVJMID0gc25hcHNob3QtPnRvRGF0YVVSTCgiaW1hZ2Uv
cG5nIl9zLCBXVEY6Om51bGxvcHQsIFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKTsKIH0KIAorI2lm
IEVOQUJMRShXRUJfQVJDSElWRSkgJiYgVVNFKENGKQogdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6
OmFyY2hpdmUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBTdHJpbmcqIGRhdGEpCiB7Ci0jaWYg
RU5BQkxFKFdFQl9BUkNISVZFKSAmJiBVU0UoQ0YpCiAgICAgYXV0byBhcmNoaXZlID0gTGVnYWN5
V2ViQXJjaGl2ZTo6Y3JlYXRlKG1faW5zcGVjdGVkUGFnZS5tYWluRnJhbWUoKSk7CiAgICAgaWYg
KCFhcmNoaXZlKSB7CiAgICAgICAgIGVycm9yU3RyaW5nID0gIkNvdWxkIG5vdCBjcmVhdGUgd2Vi
IGFyY2hpdmUgZm9yIG1haW4gZnJhbWUiX3M7CkBAIC0xMDgwLDEwICsxMDg1LDcgQEAgdm9pZCBJ
bnNwZWN0b3JQYWdlQWdlbnQ6OmFyY2hpdmUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBTdHJp
bmcqIGRhdGEpCiAKICAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBidWZmZXIgPSBhcmNoaXZlLT5y
YXdEYXRhUmVwcmVzZW50YXRpb24oKTsKICAgICAqZGF0YSA9IGJhc2U2NEVuY29kZShDRkRhdGFH
ZXRCeXRlUHRyKGJ1ZmZlci5nZXQoKSksIENGRGF0YUdldExlbmd0aChidWZmZXIuZ2V0KCkpKTsK
LSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGRhdGEpOwotICAgIGVycm9yU3RyaW5nID0gIk5vdCBz
dXBwb3J0ZWQiX3M7Ci0jZW5kaWYKIH0KKyNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclBh
Z2VBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JQYWdl
QWdlbnQuaAppbmRleCA2Yzc1ODI5NTAyMy4uM2JjZDA0ODdjZmMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUGFnZUFnZW50LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JQYWdlQWdlbnQuaApAQCAtMTA4
LDEzICsxMDgsMTkgQEAgcHVibGljOgogICAgIHZvaWQgc2V0Qm9vdHN0cmFwU2NyaXB0KEVycm9y
U3RyaW5nJiwgY29uc3QgU3RyaW5nKiBvcHRpb25hbFNvdXJjZSkgZmluYWw7CiAgICAgdm9pZCBz
ZWFyY2hJblJlc291cmNlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25z
dCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBxdWVyeSwgY29uc3QgYm9vbCogb3B0aW9uYWxD
YXNlU2Vuc2l0aXZlLCBjb25zdCBib29sKiBvcHRpb25hbElzUmVnZXgsIGNvbnN0IFN0cmluZyog
b3B0aW9uYWxSZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkdlbmVyaWNUeXBlczo6U2VhcmNoTWF0Y2g+PiYpIG92ZXJyaWRlOwogICAgIHZvaWQgc2Vh
cmNoSW5SZXNvdXJjZXMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBib29sKiBj
YXNlU2Vuc2l0aXZlLCBjb25zdCBib29sKiBpc1JlZ2V4LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpTZWFyY2hSZXN1bHQ+PiYpIG92ZXJyaWRlOworI2lm
ICFQTEFURk9STShJT1NfRkFNSUxZKQogICAgIHZvaWQgc2V0U2hvd1J1bGVycyhFcnJvclN0cmlu
ZyYsIGJvb2wpIG92ZXJyaWRlOworI2VuZGlmCiAgICAgdm9pZCBzZXRTaG93UGFpbnRSZWN0cyhF
cnJvclN0cmluZyYsIGJvb2wgc2hvdykgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRFbXVsYXRlZE1l
ZGlhKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7CisjaWYgRU5BQkxFKERB
UktfTU9ERV9DU1MpIHx8IEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCiAgICAgdm9pZCBzZXRG
b3JjZWRBcHBlYXJhbmNlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7Cisj
ZW5kaWYKICAgICB2b2lkIHNuYXBzaG90Tm9kZShFcnJvclN0cmluZyYsIGludCBub2RlSWQsIFN0
cmluZyogb3V0RGF0YVVSTCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBzbmFwc2hvdFJlY3QoRXJyb3JT
dHJpbmcmLCBpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwgY29uc3QgU3RyaW5n
JiBjb29yZGluYXRlU3lzdGVtLCBTdHJpbmcqIG91dERhdGFVUkwpIG92ZXJyaWRlOworI2lmIEVO
QUJMRShXRUJfQVJDSElWRSkgJiYgVVNFKENGKQogICAgIHZvaWQgYXJjaGl2ZShFcnJvclN0cmlu
ZyYsIFN0cmluZyogZGF0YSkgb3ZlcnJpZGU7CisjZW5kaWYKIAogICAgIC8vIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbgogICAgIHZvaWQgZG9tQ29udGVudEV2ZW50RmlyZWQoKTsKQEAgLTEyNiw3
ICsxMzIsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBmcmFtZVN0b3BwZWRMb2FkaW5nKEZyYW1lJik7
CiAgICAgdm9pZCBmcmFtZVNjaGVkdWxlZE5hdmlnYXRpb24oRnJhbWUmLCBTZWNvbmRzIGRlbGF5
KTsKICAgICB2b2lkIGZyYW1lQ2xlYXJlZFNjaGVkdWxlZE5hdmlnYXRpb24oRnJhbWUmKTsKKyNp
ZiBFTkFCTEUoREFSS19NT0RFX0NTUykgfHwgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKICAg
ICB2b2lkIGRlZmF1bHRBcHBlYXJhbmNlRGlkQ2hhbmdlKGJvb2wgdXNlRGFya0FwcGVhcmFuY2Up
OworI2VuZGlmCiAgICAgdm9pZCBhcHBseVVzZXJBZ2VudE92ZXJyaWRlKFN0cmluZyYpOwogICAg
IHZvaWQgYXBwbHlFbXVsYXRlZE1lZGlhKFN0cmluZyYpOwogICAgIHZvaWQgZGlkQ2xlYXJXaW5k
b3dPYmplY3RJbldvcmxkKEZyYW1lJiwgRE9NV3JhcHBlcldvcmxkJik7CkBAIC0xNjEsNyArMTY5
LDYgQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPERvY3VtZW50TG9hZGVyKiwgU3RyaW5nPiBtX2xv
YWRlclRvSWRlbnRpZmllcjsKICAgICBTdHJpbmcgbV91c2VyQWdlbnRPdmVycmlkZTsKICAgICBT
dHJpbmcgbV9lbXVsYXRlZE1lZGlhOwotICAgIFN0cmluZyBtX2ZvcmNlZEFwcGVhcmFuY2U7CiAg
ICAgU3RyaW5nIG1fYm9vdHN0cmFwU2NyaXB0OwogICAgIGJvb2wgbV9pc0ZpcnN0TGF5b3V0QWZ0
ZXJPbkxvYWQgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9zaG93UGFpbnRSZWN0cyB7IGZhbHNlIH07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9CYXNlL01h
aW4uanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9CYXNlL01haW4uanMK
aW5kZXggZTViNDMyYzJjYjguLjM1NDM5MThjMTcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9CYXNlL01haW4uanMKKysrIGIvU291cmNlL1dlYkluc3Bl
Y3RvclVJL1VzZXJJbnRlcmZhY2UvQmFzZS9NYWluLmpzCkBAIC0yMzkzLDcgKzIzOTMsNyBAQCBX
SS5fdXBkYXRlRG93bmxvYWRUYWJCYXJCdXR0b24gPSBmdW5jdGlvbigpCiAgICAgaWYgKCFXSS5f
cmVsb2FkVGFiQmFyQnV0dG9uKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIUluc3BlY3Rv
ckJhY2tlbmQuaGFzRG9tYWluKCJQYWdlIikpIHsKKyAgICBpZiAoIUluc3BlY3RvckJhY2tlbmQu
aGFzQ29tbWFuZCgiUGFnZS5hcmNoaXZlIikpIHsKICAgICAgICAgV0kuX2Rvd25sb2FkVGFiQmFy
QnV0dG9uLmhpZGRlbiA9IHRydWU7CiAgICAgICAgIFdJLl91cGRhdGVUYWJCYXJEaXZpZGVycygp
OwogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3Vy
Y2VzLm1ha2UgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UKaW5kZXggYTEyYjc4
NjNjOTIuLjhjNThhNTc3MTQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3Vy
Y2VzLm1ha2UKKysrIGIvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy5tYWtlCkBAIC0zMTcs
MTcgKzMxNyw5IEBAIEFVVE9NQVRJT05fUFJPVE9DT0xfT1VUUFVUX0ZJTEVTID0gXAogIwogQVVU
T01BVElPTl9QUk9UT0NPTF9PVVRQVVRfUEFUVEVSTlMgPSAkKHN1YnN0IC4sJSwkKEFVVE9NQVRJ
T05fUFJPVE9DT0xfT1VUUFVUX0ZJTEVTKSkKIAotaWZlcSAoJChPUyksTUFDT1MpCi1pZmVxICgk
KHNoZWxsICQoQ0MpIC1zdGQ9Z251KysxeiAteCBjKysgLUUgLVAgLWRNICQoU0RLX0ZMQUdTKSAk
KFRBUkdFVF9UUklQTEVfRkxBR1MpICQoRlJBTUVXT1JLX0ZMQUdTKSAkKEhFQURFUl9GTEFHUykg
LWluY2x1ZGUgInd0Zi9QbGF0Zm9ybS5oIiAvZGV2L251bGwgfCBncmVwICcgV1RGX1BMQVRGT1JN
X0lPU19GQU1JTFkgJyB8IGN1dCAtZCcgJyAtZjMpLCAxKQotCUFVVE9NQVRJT05fQkFDS0VORF9Q
TEFURk9STV9BUkdVTUVOVFMgPSAtLXBsYXRmb3JtIGlPUwotZWxzZQotCUFVVE9NQVRJT05fQkFD
S0VORF9QTEFURk9STV9BUkdVTUVOVFMgPSAtLXBsYXRmb3JtIG1hY09TCi1lbmRpZgotZW5kaWYg
IyBNQUNPUwotCiAjIEpTT04tUlBDIEZyb250ZW5kIERpc3BhdGNoZXJzLCBCYWNrZW5kIERpc3Bh
dGNoZXJzLCBUeXBlIEJ1aWxkZXJzCiAkKEFVVE9NQVRJT05fUFJPVE9DT0xfT1VUUFVUX1BBVFRF
Uk5TKSA6ICQoQVVUT01BVElPTl9QUk9UT0NPTF9JTlBVVF9GSUxFUykgJChBVVRPTUFUSU9OX1BS
T1RPQ09MX0dFTkVSQVRPUl9TQ1JJUFRTKQotCSQoUFlUSE9OKSAkKEphdmFTY3JpcHRDb3JlX1ND
UklQVFNfRElSKS9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkgLS1mcmFt
ZXdvcmsgV2ViS2l0ICQoQVVUT01BVElPTl9CQUNLRU5EX1BMQVRGT1JNX0FSR1VNRU5UUykgLS1i
YWNrZW5kIC0tb3V0cHV0RGlyIC4gJChBVVRPTUFUSU9OX1BST1RPQ09MX0lOUFVUX0ZJTEVTKQor
CSQoUFlUSE9OKSAkKEphdmFTY3JpcHRDb3JlX1NDUklQVFNfRElSKS9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkgLS1mcmFtZXdvcmsgV2ViS2l0IC0tYmFja2VuZCAtLW91
dHB1dERpciAuICQoQVVUT01BVElPTl9QUk9UT0NPTF9JTlBVVF9GSUxFUykKIAogYWxsIDogJChB
VVRPTUFUSU9OX1BST1RPQ09MX09VVFBVVF9GSUxFUykKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9QbGF0Zm9ybU1hYy5jbWFrZSBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1NYWMuY21ha2UK
aW5kZXggNDhlMTYwMTNkY2IuLjRjMmQzMGJlYmY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1BsYXRmb3JtTWFjLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1NYWMuY21ha2UK
QEAgLTQ4MCwxMCArNDgwLDYgQEAgZm9yZWFjaCAoX2ZpbGUgJHtPYmpDRm9yd2FyZGluZ0hlYWRl
cnN9KQogICAgIGZpbGUoV1JJVEUgJHtGT1JXQVJESU5HX0hFQURFUlNfRElSfS9XZWJLaXQvJHtf
ZmlsZX0gIiNpbXBvcnQgPFdlYktpdExlZ2FjeS8ke19maWxlfT4iKQogZW5kZm9yZWFjaCAoKQog
Ci1saXN0KEFQUEVORCBXZWJLaXRfQVVUT01BVElPTl9QUk9UT0NPTF9HRU5FUkFUT1JfRVhUUkFf
RkxBR1MKLSAgICAtLXBsYXRmb3JtPW1hY09TCi0pCi0KIHNldChTZWNJdGVtU2hpbURpcmVjdG9y
eSAke0NNQUtFX0xJQlJBUllfT1VUUFVUX0RJUkVDVE9SWX0vV2ViS2l0LmZyYW1ld29yay9WZXJz
aW9ucy9BL0ZyYW1ld29ya3MpCiBhZGRfbGlicmFyeShTZWNJdGVtU2hpbSBTSEFSRUQgV2ViUHJv
Y2Vzcy9tYWMvU2VjSXRlbVNoaW1MaWJyYXJ5Lm1tKQogV0VCS0lUX0NSRUFURV9TWU1MSU5LKFNl
Y0l0ZW1TaGltICR7U2VjSXRlbVNoaW1EaXJlY3Rvcnl9ICR7Q01BS0VfTElCUkFSWV9PVVRQVVRf
RElSRUNUT1JZfS9XZWJLaXQuZnJhbWV3b3JrL0ZyYW1ld29ya3MpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL0F1dG9tYXRpb24uanNvbiBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vQXV0b21hdGlvbi5qc29uCmluZGV4IDdmNTUyNTcw
NWVmLi5mNTZlNmNmOTgwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0
b21hdGlvbi9BdXRvbWF0aW9uLmpzb24KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0
b21hdGlvbi9BdXRvbWF0aW9uLmpzb24KQEAgLTQzNyw3ICs0MzcsNyBAQAogICAgICAgICB7CiAg
ICAgICAgICAgICAibmFtZSI6ICJpbnNwZWN0QnJvd3NpbmdDb250ZXh0IiwKICAgICAgICAgICAg
ICJkZXNjcmlwdGlvbiI6ICJJbnNwZWN0IHRoZSBzcGVjaWZpZWQgYnJvd3NpbmcgY29udGV4dCB1
c2luZyBXZWIgSW5zcGVjdG9yLiIsCi0gICAgICAgICAgICAicGxhdGZvcm0iOiAibWFjb3MiLAor
ICAgICAgICAgICAgImNvbmRpdGlvbiI6ICJQTEFURk9STShNQUMpIiwKICAgICAgICAgICAgICJw
YXJhbWV0ZXJzIjogWwogICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiaGFuZGxlIiwgIiRyZWYi
OiAiQnJvd3NpbmdDb250ZXh0SGFuZGxlIiwgImRlc2NyaXB0aW9uIjogIlRoZSBoYW5kbGUgZm9y
IHRoZSBicm93c2luZyBjb250ZXh0IHRoYXQgc2hvdWxkIGJlIGluc3BlY3RlZC4iIH0sCiAgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJlbmFibGVBdXRvQ2FwdHVyaW5nIiwgInR5cGUiOiAiYm9v
bGVhbiIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJJZiB0aGlzIG9wdGlvbiBp
cyBwcmVzZW50IGFuZCBzZXQgdG8gdHJ1ZSwgdGhlIFdlYiBJbnNwZWN0b3Igd2lsbCBhdXRvbWF0
aWNhbGx5IHN0YXJ0IGEgdGltZWxpbmUgcmVjb3JkaW5nIG9mIHRoZSBzcGVjaWZpZWQgYnJvd3Np
bmcgY29udGV4dCBvbmNlIGl0IGlzIGF0dGFjaGVkLiBOb3RlIHRoYXQgdGhpcyBkaXNhYmxlcyB0
aGUgZGVidWdnZXIgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgcmVjb3JkaW5nLiIgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL2NtYWtlL1dlYktpdEZlYXR1cmVzLmNtYWtlIGIvU291cmNlL2NtYWtlL1dl
YktpdEZlYXR1cmVzLmNtYWtlCmluZGV4IDliY2RiNWRlNWJmLi5lYzdlYzgxMmZlMiAxMDA2NDQK
LS0tIGEvU291cmNlL2NtYWtlL1dlYktpdEZlYXR1cmVzLmNtYWtlCisrKyBiL1NvdXJjZS9jbWFr
ZS9XZWJLaXRGZWF0dXJlcy5jbWFrZQpAQCAtMzI2LDYgKzMyNiw3IEBAIG1hY3JvKFdFQktJVF9P
UFRJT05fRU5EKQogICAgICAgICBpZiAoJHtfbmFtZX0pCiAgICAgICAgICAgICBsaXN0KEFQUEVO
RCBGRUFUVVJFX0RFRklORVMgJHtfbmFtZX0pCiAgICAgICAgICAgICBzZXQoRkVBVFVSRV9ERUZJ
TkVTX1dJVEhfU1BBQ0VfU0VQQVJBVE9SICIke0ZFQVRVUkVfREVGSU5FU19XSVRIX1NQQUNFX1NF
UEFSQVRPUn0gJHtfbmFtZX0iKQorICAgICAgICAgICAgc2V0KEZFQVRVUkVfREVGSU5FU19BU19B
UkdVTUVOVFMgIiR7RkVBVFVSRV9ERUZJTkVTX0FTX0FSR1VNRU5UU30gLUQke19uYW1lfSIpCiAg
ICAgICAgIGVuZGlmICgpCiAgICAgZW5kZm9yZWFjaCAoKQogZW5kbWFjcm8oKQpkaWZmIC0tZ2l0
IGEvVG9vbHMvU2NyaXB0cy9maWx0ZXItYnVpbGQtd2Via2l0IGIvVG9vbHMvU2NyaXB0cy9maWx0
ZXItYnVpbGQtd2Via2l0CmluZGV4IDJkZmVjYWY5MzZlLi44OTEzYjhjY2FmYiAxMDA3NTUKLS0t
IGEvVG9vbHMvU2NyaXB0cy9maWx0ZXItYnVpbGQtd2Via2l0CisrKyBiL1Rvb2xzL1NjcmlwdHMv
ZmlsdGVyLWJ1aWxkLXdlYmtpdApAQCAtMjgxLDcgKzI4MSw3IEBAIHN1YiBzaG91bGRJZ25vcmVM
aW5lKCQkKQogICAgIHJldHVybiAxIGlmICRsaW5lID1+IC9eXCggKHhjb2RlYnVpbGR8aWYpIC87
CiAgICAgcmV0dXJuIDEgaWYgJGxpbmUgPX4gL153YXJuaW5nXDogZGV0ZWN0ZWQgaW50ZXJuYWwg
aW5zdGFsbCwgcGFzc2luZyBlbnRpdGxlbWVudHMgdG8gc2ltdWxhdG9yIGFueXdheVwuLzsKICAg
ICByZXR1cm4gMSBpZiAkbGluZSA9fiAvbWF5IG5vdCBmdW5jdGlvbiBpbiB0aGUgU2ltdWxhdG9y
IGJlY2F1c2UgQWQgSG9jLzsKLSAgICByZXR1cm4gMSBpZiAkbGluZSA9fiAvXC91c3JcL2Jpblwv
Y2xhbmcgLio/IFw+IFxTKy5zYi87CisgICAgcmV0dXJuIDEgaWYgJGxpbmUgPX4gL1wvdXNyXC9i
aW5cL2NsYW5nIC4qPyBcPiBcUysoXC5zYnxcLmpzKS87CiAgICAgcmV0dXJuIDEgaWYgJGxpbmUg
PX4gLyB4Y29kZWJ1aWxkXFtbMC05XSs6WzAtOWEtZl0rXF1ccytEVlRBc3NlcnRpb25zOiBXYXJu
aW5nIGluIC4qWENDbGFuZ1Jlc3VsdHNQb3N0cHJvY2Vzc29yLm0vOwogICAgIHJldHVybiAxIGlm
ICRsaW5lID1+IC9eKERldGFpbHN8T2JqZWN0fE1ldGhvZHxGdW5jdGlvbnxUaHJlYWQpOi87CiAg
ICAgcmV0dXJuIDEgaWYgJGxpbmUgPX4gL15QbGVhc2UgZmlsZSBhIGJ1ZyBhdCAvOwpAQCAtMzA2
LDcgKzMwNiw3IEBAIHN1YiBzaG91bGRJZ25vcmVMaW5lKCQkKQogICAgICAgICByZXR1cm4gMSBp
ZiAkbGluZSA9fiAvTVNCMzA3MzpccytpZiBub3QgZXhpc3QvOwogICAgICAgICByZXR1cm4gMSBp
ZiAkbGluZSA9fiAvd2hpY2guZXhlIGJhc2gvOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVy
biAxIGlmICRsaW5lID1+IC9eKHRvdWNofHBlcmx8Y2F0fHJtIC1mfHB5dGhvbnxcL3VzclwvYmlu
XC9nXCtcK3xcL2JpblwvbG58Z3BlcmZ8ZWNob3xzZWR8aWYgXFsgXC1mfFdlYkNvcmVcL2dlbmVy
YXRlLWV4cG9ydC1maWxlfHdyaXRlLWZpbGV8Y2htb2QpIC87CisgICAgICAgIHJldHVybiAxIGlm
ICRsaW5lID1+IC9eKHRvdWNofHBlcmx8Y2F0fHJtIC1mfHB5dGhvbnxcL3VzclwvYmluXC9nXCtc
K3xcL2JpblwvbG58Z3BlcmZ8ZWNob3xzZWR8dHJ8aWYgXFsgXC1mfFdlYkNvcmVcL2dlbmVyYXRl
LWV4cG9ydC1maWxlfHdyaXRlLWZpbGV8Y2htb2QpIC87CiAgICAgICAgIHJldHVybiAxIGlmICRs
aW5lID1+IC9eICAgIC8gJiYgIXNob3VsZFNob3dTdWJzZXF1ZW50TGluZSgkcHJldmlvdXNMaW5l
KTsKICAgICAgICAgcmV0dXJuIDEgaWYgJGxpbmUgPX4gL15wcmludGYgLzsKICAgICAgICAgcmV0
dXJuIDEgaWYgJGxpbmUgPX4gL15vZmZsaW5lYXNtOiBOb3RoaW5nIGNoYW5nZWQvOwpkaWZmIC0t
Z2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9pbnNwZWN0b3IvbWFpbi5weSBiL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvaW5zcGVjdG9yL21haW4ucHkKaW5kZXggMTQ2MmQ4MDE5ZDkuLjllMDkw
NGMyMGZmIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2luc3BlY3Rvci9tYWlu
LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvaW5zcGVjdG9yL21haW4ucHkKQEAgLTM4
LDE0ICszOCwxMyBAQCBjbGFzcyBJbnNwZWN0b3JHZW5lcmF0b3JUZXN0czoKICAgICAgICAgc2Vs
Zi5yZXNldF9yZXN1bHRzID0gcmVzZXRfcmVzdWx0cwogICAgICAgICBzZWxmLmV4ZWN1dGl2ZSA9
IGV4ZWN1dGl2ZQogCi0gICAgZGVmIGdlbmVyYXRlX2Zyb21fanNvbihzZWxmLCBqc29uX2ZpbGUs
IHBsYXRmb3JtLCBvdXRwdXRfZGlyZWN0b3J5KToKKyAgICBkZWYgZ2VuZXJhdGVfZnJvbV9qc29u
KHNlbGYsIGpzb25fZmlsZSwgb3V0cHV0X2RpcmVjdG9yeSk6CiAgICAgICAgIGNtZCA9IFsncHl0
aG9uJywKICAgICAgICAgICAgICAgICdKYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHknLAogICAgICAgICAgICAgICAg
Jy0tb3V0cHV0RGlyJywgb3V0cHV0X2RpcmVjdG9yeSwKICAgICAgICAgICAgICAgICctLWZvcmNl
JywKICAgICAgICAgICAgICAgICctLWZyYW1ld29yaycsICdUZXN0JywKICAgICAgICAgICAgICAg
ICctLXRlc3QnLAotICAgICAgICAgICAgICAgJy0tcGxhdGZvcm0nLCBwbGF0Zm9ybSwKICAgICAg
ICAgICAgICAgIGpzb25fZmlsZV0KIAogICAgICAgICBleGl0X2NvZGUgPSAwCkBAIC04OCw3ICs4
Nyw3IEBAIGNsYXNzIEluc3BlY3RvckdlbmVyYXRvclRlc3RzOgogICAgICAgICAgICAgICAgIHBy
aW50KCdQQVNTOiAlcycgJSBvdXRwdXRfZmlsZSkKICAgICAgICAgcmV0dXJuIGNoYW5nZXNfZm91
bmQKIAotICAgIGRlZiBydW5fdGVzdHMoc2VsZiwgcGxhdGZvcm0sIGlucHV0X2RpcmVjdG9yeSwg
cmVmZXJlbmNlX2RpcmVjdG9yeSk6CisgICAgZGVmIHJ1bl90ZXN0cyhzZWxmLCBpbnB1dF9kaXJl
Y3RvcnksIHJlZmVyZW5jZV9kaXJlY3RvcnkpOgogICAgICAgICB3b3JrX2RpcmVjdG9yeSA9IHJl
ZmVyZW5jZV9kaXJlY3RvcnkKIAogICAgICAgICBwYXNzZWQgPSBUcnVlCkBAIC0xMDEsNyArMTAw
LDcgQEAgY2xhc3MgSW5zcGVjdG9yR2VuZXJhdG9yVGVzdHM6CiAgICAgICAgICAgICBpZiBub3Qg
c2VsZi5yZXNldF9yZXN1bHRzOgogICAgICAgICAgICAgICAgIHdvcmtfZGlyZWN0b3J5ID0gdGVt
cGZpbGUubWtkdGVtcCgpCiAKLSAgICAgICAgICAgIGlmIHNlbGYuZ2VuZXJhdGVfZnJvbV9qc29u
KG9zLnBhdGguam9pbihpbnB1dF9kaXJlY3RvcnksIGlucHV0X2ZpbGUpLCBwbGF0Zm9ybSwgd29y
a19kaXJlY3RvcnkpOgorICAgICAgICAgICAgaWYgc2VsZi5nZW5lcmF0ZV9mcm9tX2pzb24ob3Mu
cGF0aC5qb2luKGlucHV0X2RpcmVjdG9yeSwgaW5wdXRfZmlsZSksIHdvcmtfZGlyZWN0b3J5KToK
ICAgICAgICAgICAgICAgICBwYXNzZWQgPSBGYWxzZQogCiAgICAgICAgICAgICBpZiBzZWxmLnJl
c2V0X3Jlc3VsdHM6CkBAIC0xMjIsMjEgKzEyMSwxMCBAQCBjbGFzcyBJbnNwZWN0b3JHZW5lcmF0
b3JUZXN0czoKICAgICAgICAgYWxsX3Rlc3RzX3Bhc3NlZCA9IFRydWUKIAogICAgICAgICBiYXNl
X2RpcmVjdG9yeSA9IG9zLnBhdGguam9pbignSmF2YVNjcmlwdENvcmUnLCAnaW5zcGVjdG9yJywg
J3NjcmlwdHMnLCAndGVzdHMnKQotCi0gICAgICAgIHBsYXRmb3JtX2RpcmVjdG9yaWVzID0gewot
ICAgICAgICAgICAgJ21hY29zJzogJ21hYycsCi0gICAgICAgICAgICAnaW9zJzogJ2lvcycsCi0g
ICAgICAgICAgICAnZ2VuZXJpYyc6ICdnZW5lcmljJywKLSAgICAgICAgICAgICdhbGwnOiAnYWxs
JywKLSAgICAgICAgfQotCi0gICAgICAgIGZvciBwbGF0Zm9ybV9uYW1lLCBwbGF0Zm9ybV9kaXJl
Y3RvcnkgaW4gcGxhdGZvcm1fZGlyZWN0b3JpZXMuaXRlcml0ZW1zKCk6Ci0gICAgICAgICAgICBp
bnB1dF9kaXJlY3RvcnkgPSBvcy5wYXRoLmpvaW4oYmFzZV9kaXJlY3RvcnksIHBsYXRmb3JtX2Rp
cmVjdG9yeSkKLSAgICAgICAgICAgIHJlZmVyZW5jZV9kaXJlY3RvcnkgPSBvcy5wYXRoLmpvaW4o
aW5wdXRfZGlyZWN0b3J5LCAnZXhwZWN0ZWQnKQotICAgICAgICAgICAgaWYgbm90IG9zLnBhdGgu
aXNkaXIoaW5wdXRfZGlyZWN0b3J5KSBvciBub3Qgb3MucGF0aC5pc2RpcihyZWZlcmVuY2VfZGly
ZWN0b3J5KToKLSAgICAgICAgICAgICAgICBjb250aW51ZQotCi0gICAgICAgICAgICBhbGxfdGVz
dHNfcGFzc2VkID0gYWxsX3Rlc3RzX3Bhc3NlZCBhbmQgc2VsZi5ydW5fdGVzdHMocGxhdGZvcm1f
bmFtZSwgaW5wdXRfZGlyZWN0b3J5LCByZWZlcmVuY2VfZGlyZWN0b3J5KQorICAgICAgICBpbnB1
dF9kaXJlY3RvcnkgPSBiYXNlX2RpcmVjdG9yeQorICAgICAgICByZWZlcmVuY2VfZGlyZWN0b3J5
ID0gb3MucGF0aC5qb2luKGlucHV0X2RpcmVjdG9yeSwgJ2V4cGVjdGVkJykKKyAgICAgICAgaWYg
b3MucGF0aC5pc2RpcihpbnB1dF9kaXJlY3RvcnkpIGFuZCBvcy5wYXRoLmlzZGlyKHJlZmVyZW5j
ZV9kaXJlY3RvcnkpOgorICAgICAgICAgICAgYWxsX3Rlc3RzX3Bhc3NlZCA9IHNlbGYucnVuX3Rl
c3RzKGlucHV0X2RpcmVjdG9yeSwgcmVmZXJlbmNlX2RpcmVjdG9yeSkKIAogICAgICAgICBwcmlu
dCgnJykKICAgICAgICAgaWYgYWxsX3Rlc3RzX3Bhc3NlZDoK
</data>
<flag name="commit-queue"
          id="414991"
          type_id="3"
          status="-"
          setter="hi"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>399975</attachid>
            <date>2020-05-21 12:41:03 -0700</date>
            <delta_ts>2020-05-21 16:19:30 -0700</delta_ts>
            <desc>[Patch] WIP</desc>
            <filename>210014.diff</filename>
            <type>text/plain</type>
            <size>2708739</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCAwZDFmZTMwMDBhYi4uNjgzZjgz
Y2ZjOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTExNTcsNiArMTE1
Nyw4IEBAIHNldChKYXZhU2NyaXB0Q29yZV9JTlNQRUNUT1JfRE9NQUlOUwogICAgICR7SkFWQVND
UklQVENPUkVfRElSfS9pbnNwZWN0b3IvcHJvdG9jb2wvQW5pbWF0aW9uLmpzb24KICAgICAke0pB
VkFTQ1JJUFRDT1JFX0RJUn0vaW5zcGVjdG9yL3Byb3RvY29sL0FwcGxpY2F0aW9uQ2FjaGUuanNv
bgogICAgICR7SkFWQVNDUklQVENPUkVfRElSfS9pbnNwZWN0b3IvcHJvdG9jb2wvQXVkaXQuanNv
bgorICAgICR7SkFWQVNDUklQVENPUkVfRElSfS9pbnNwZWN0b3IvcHJvdG9jb2wvQnJvd3Nlci5q
c29uCisgICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2luc3BlY3Rvci9wcm90b2NvbC9DUFVQcm9m
aWxlci5qc29uCiAgICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2luc3BlY3Rvci9wcm90b2NvbC9D
U1MuanNvbgogICAgICR7SkFWQVNDUklQVENPUkVfRElSfS9pbnNwZWN0b3IvcHJvdG9jb2wvQ2Fu
dmFzLmpzb24KICAgICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vaW5zcGVjdG9yL3Byb3RvY29sL0Nv
bnNvbGUuanNvbgpAQCAtMTE2NSw0MSArMTE2NywyNCBAQCBzZXQoSmF2YVNjcmlwdENvcmVfSU5T
UEVDVE9SX0RPTUFJTlMKICAgICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vaW5zcGVjdG9yL3Byb3Rv
Y29sL0RPTVN0b3JhZ2UuanNvbgogICAgICR7SkFWQVNDUklQVENPUkVfRElSfS9pbnNwZWN0b3Iv
cHJvdG9jb2wvRGF0YWJhc2UuanNvbgogICAgICR7SkFWQVNDUklQVENPUkVfRElSfS9pbnNwZWN0
b3IvcHJvdG9jb2wvRGVidWdnZXIuanNvbgotICAgICR7SkFWQVNDUklQVENPUkVfRElSfS9pbnNw
ZWN0b3IvcHJvdG9jb2wvQnJvd3Nlci5qc29uCiAgICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2lu
c3BlY3Rvci9wcm90b2NvbC9HZW5lcmljVHlwZXMuanNvbgogICAgICR7SkFWQVNDUklQVENPUkVf
RElSfS9pbnNwZWN0b3IvcHJvdG9jb2wvSGVhcC5qc29uCisgICAgJHtKQVZBU0NSSVBUQ09SRV9E
SVJ9L2luc3BlY3Rvci9wcm90b2NvbC9JbmRleGVkREIuanNvbgogICAgICR7SkFWQVNDUklQVENP
UkVfRElSfS9pbnNwZWN0b3IvcHJvdG9jb2wvSW5zcGVjdG9yLmpzb24KICAgICAke0pBVkFTQ1JJ
UFRDT1JFX0RJUn0vaW5zcGVjdG9yL3Byb3RvY29sL0xheWVyVHJlZS5qc29uCisgICAgJHtKQVZB
U0NSSVBUQ09SRV9ESVJ9L2luc3BlY3Rvci9wcm90b2NvbC9NZW1vcnkuanNvbgogICAgICR7SkFW
QVNDUklQVENPUkVfRElSfS9pbnNwZWN0b3IvcHJvdG9jb2wvTmV0d29yay5qc29uCiAgICAgJHtK
QVZBU0NSSVBUQ09SRV9ESVJ9L2luc3BlY3Rvci9wcm90b2NvbC9QYWdlLmpzb24KICAgICAke0pB
VkFTQ1JJUFRDT1JFX0RJUn0vaW5zcGVjdG9yL3Byb3RvY29sL1JlY29yZGluZy5qc29uCiAgICAg
JHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2luc3BlY3Rvci9wcm90b2NvbC9SdW50aW1lLmpzb24KICAg
ICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vaW5zcGVjdG9yL3Byb3RvY29sL1NjcmlwdFByb2ZpbGVy
Lmpzb24KICAgICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vaW5zcGVjdG9yL3Byb3RvY29sL1NlY3Vy
aXR5Lmpzb24KKyAgICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vaW5zcGVjdG9yL3Byb3RvY29sL1Nl
cnZpY2VXb3JrZXIuanNvbgogICAgICR7SkFWQVNDUklQVENPUkVfRElSfS9pbnNwZWN0b3IvcHJv
dG9jb2wvVGFyZ2V0Lmpzb24KICAgICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vaW5zcGVjdG9yL3By
b3RvY29sL1RpbWVsaW5lLmpzb24KICAgICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vaW5zcGVjdG9y
L3Byb3RvY29sL1dvcmtlci5qc29uCiApCiAKLWlmIChFTkFCTEVfSU5ERVhFRF9EQVRBQkFTRSkK
LSAgICBsaXN0KEFQUEVORCBKYXZhU2NyaXB0Q29yZV9JTlNQRUNUT1JfRE9NQUlOUwotICAgICAg
ICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vaW5zcGVjdG9yL3Byb3RvY29sL0luZGV4ZWREQi5qc29u
Ci0gICAgKQotZW5kaWYgKCkKLQotaWYgKEVOQUJMRV9SRVNPVVJDRV9VU0FHRSkKLSAgICBsaXN0
KEFQUEVORCBKYXZhU2NyaXB0Q29yZV9JTlNQRUNUT1JfRE9NQUlOUwotICAgICAgICAke0pBVkFT
Q1JJUFRDT1JFX0RJUn0vaW5zcGVjdG9yL3Byb3RvY29sL0NQVVByb2ZpbGVyLmpzb24KLSAgICAg
ICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2luc3BlY3Rvci9wcm90b2NvbC9NZW1vcnkuanNvbgot
ICAgICkKLWVuZGlmICgpCi0KLWlmIChFTkFCTEVfU0VSVklDRV9XT1JLRVIpCi0gICAgbGlzdChB
UFBFTkQgSmF2YVNjcmlwdENvcmVfSU5TUEVDVE9SX0RPTUFJTlMKLSAgICAgICAgJHtKQVZBU0NS
SVBUQ09SRV9ESVJ9L2luc3BlY3Rvci9wcm90b2NvbC9TZXJ2aWNlV29ya2VyLmpzb24KLSAgICAp
Ci1lbmRpZiAoKQotCiBhZGRfY3VzdG9tX2NvbW1hbmQoCiAgICAgT1VUUFVUICR7SmF2YVNjcmlw
dENvcmVfREVSSVZFRF9TT1VSQ0VTX0RJUn0vQ29tYmluZWREb21haW5zLmpzb24KICAgICBNQUlO
X0RFUEVOREVOQ1kgJHtKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUn0vZ2VuZXJhdGUtY29tYmlu
ZWQtaW5zcGVjdG9yLWpzb24ucHkKQEAgLTEyMTcsMTEgKzEyMDIsMTggQEAgYWRkX2N1c3RvbV9j
b21tYW5kKAogICAgICAgICAgICAke0phdmFTY3JpcHRDb3JlX0RFUklWRURfU09VUkNFU19ESVJ9
L2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZERpc3BhdGNoZXJzLmgKICAgICAgICAgICAgJHtK
YXZhU2NyaXB0Q29yZV9ERVJJVkVEX1NPVVJDRVNfRElSfS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJv
dG9jb2xPYmplY3RzLmNwcAogICAgICAgICAgICAke0phdmFTY3JpcHRDb3JlX0RFUklWRURfU09V
UkNFU19ESVJ9L2luc3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbE9iamVjdHMuaAotICAgICAgICAg
ICAke0phdmFTY3JpcHRDb3JlX0RFUklWRURfU09VUkNFU19ESVJ9L2luc3BlY3Rvci9JbnNwZWN0
b3JCYWNrZW5kQ29tbWFuZHMuanMKICAgICBNQUlOX0RFUEVOREVOQ1kgJHtKYXZhU2NyaXB0Q29y
ZV9ERVJJVkVEX1NPVVJDRVNfRElSfS9Db21iaW5lZERvbWFpbnMuanNvbgogICAgIERFUEVORFMg
JHtKYXZhU2NyaXB0Q29yZV9JTlNQRUNUT1JfUFJPVE9DT0xfU0NSSVBUU30KICAgICBDT01NQU5E
ICR7UFlUSE9OX0VYRUNVVEFCTEV9ICR7SmF2YVNjcmlwdENvcmVfSU5TUEVDVE9SX1NDUklQVFNf
RElSfS9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkgLS1vdXRwdXREaXIg
IiR7SmF2YVNjcmlwdENvcmVfREVSSVZFRF9TT1VSQ0VTX0RJUn0vaW5zcGVjdG9yIiAtLWZyYW1l
d29yayBKYXZhU2NyaXB0Q29yZSAke0phdmFTY3JpcHRDb3JlX0RFUklWRURfU09VUkNFU19ESVJ9
L0NvbWJpbmVkRG9tYWlucy5qc29uCiAgICAgVkVSQkFUSU0pCithZGRfY3VzdG9tX2NvbW1hbmQo
CisgICAgT1VUUFVUICR7SmF2YVNjcmlwdENvcmVfREVSSVZFRF9TT1VSQ0VTX0RJUn0vaW5zcGVj
dG9yL0luc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcworICAgICAgICAgICAke0phdmFTY3JpcHRD
b3JlX0RFUklWRURfU09VUkNFU19ESVJ9L2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kQ29tbWFu
ZHMuanMuaW4KKyAgICBNQUlOX0RFUEVOREVOQ1kgJHtKYXZhU2NyaXB0Q29yZV9ERVJJVkVEX1NP
VVJDRVNfRElSfS9Db21iaW5lZERvbWFpbnMuanNvbgorICAgIERFUEVORFMgJHtKYXZhU2NyaXB0
Q29yZV9JTlNQRUNUT1JfUFJPVE9DT0xfU0NSSVBUU30KKyAgICBDT01NQU5EICR7UFlUSE9OX0VY
RUNVVEFCTEV9ICR7SmF2YVNjcmlwdENvcmVfSU5TUEVDVE9SX1NDUklQVFNfRElSfS9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkgLS1vdXRwdXREaXIgJHtKYXZhU2NyaXB0
Q29yZV9ERVJJVkVEX1NPVVJDRVNfRElSfS9pbnNwZWN0b3IgLS1mcmFtZXdvcmsgV2ViSW5zcGVj
dG9yVUkgJHtKYXZhU2NyaXB0Q29yZV9ERVJJVkVEX1NPVVJDRVNfRElSfS9Db21iaW5lZERvbWFp
bnMuanNvbgorICAgIENPTU1BTkQgJHtDT0RFX0dFTkVSQVRPUl9QUkVQUk9DRVNTT1J9ICR7RkVB
VFVSRV9ERUZJTkVTX0FTX0FSR1VNRU5UU30gLWluY2x1ZGUgInd0Zi9QbGF0Zm9ybS5oIiAtIDwg
JHtKYXZhU2NyaXB0Q29yZV9ERVJJVkVEX1NPVVJDRVNfRElSfS9pbnNwZWN0b3IvSW5zcGVjdG9y
QmFja2VuZENvbW1hbmRzLmpzLmluID4gJHtKYXZhU2NyaXB0Q29yZV9ERVJJVkVEX1NPVVJDRVNf
RElSfS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCisgICAgVkVSQkFUSU0p
CiAKICMgSlNDQnVpbHRpbnMKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rl
cml2ZWRTb3VyY2VzLm1ha2UgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMu
bWFrZQppbmRleCAwMGQyYTU3YjNlZC4uZGI1M2Q5ZWFjNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCkBAIC00Niw2ICs0NiwyMyBAQCBlbHNlCiAgICAgREVM
RVRFID0gcm0gLWYKIGVuZGlmCiAKK2lmbmVxICgkKFNES1JPT1QpLCkKKyAgICBTREtfRkxBR1M9
LWlzeXNyb290ICQoU0RLUk9PVCkKK2VuZGlmCisKK2lmZXEgKCQoVVNFX0xMVk1fVEFSR0VUX1RS
SVBMRVNfRk9SX0NMQU5HKSxZRVMpCisgICAgV0tfQ1VSUkVOVF9BUkNIPSQod29yZCAxLCAkKEFS
Q0hTKSkKKyAgICBUQVJHRVRfVFJJUExFX0ZMQUdTPS10YXJnZXQgJChXS19DVVJSRU5UX0FSQ0gp
LSQoTExWTV9UQVJHRVRfVFJJUExFX1ZFTkRPUiktJChMTFZNX1RBUkdFVF9UUklQTEVfT1NfVkVS
U0lPTikkKExMVk1fVEFSR0VUX1RSSVBMRV9TVUZGSVgpCitlbmRpZgorCitURVhUX1BSRVBST0NF
U1NPUl9GTEFHUz0tRSAtUCAtdworCitBTExfUFJFUFJPQ0VTU09SX0RFRklOSVRJT05TPSQoZmls
dGVyLW91dCBOREVCVUcsJChHQ0NfUFJFUFJPQ0VTU09SX0RFRklOSVRJT05TKSkgJChGRUFUVVJF
X0RFRklORVMpCitQUkVQUk9DRVNTT1JfREVGSU5FUz0kKHBhdHN1YnN0ICUsLUQlLCQoQUxMX1BS
RVBST0NFU1NPUl9ERUZJTklUSU9OUykpCisKK0ZSQU1FV09SS19GTEFHUyA9ICQoc2hlbGwgZWNo
byAkKEJVSUxUX1BST0RVQ1RTX0RJUikgJChGUkFNRVdPUktfU0VBUkNIX1BBVEhTKSAkKFNZU1RF
TV9GUkFNRVdPUktfU0VBUkNIX1BBVEhTKSB8IHBlcmwgLWUgJ3ByaW50ICItRiAiIC4gam9pbigi
IC1GICIsIHNwbGl0KCIgIiwgPD4pKTsnKQorSEVBREVSX0ZMQUdTID0gJChzaGVsbCBlY2hvICQo
QlVJTFRfUFJPRFVDVFNfRElSKSAkKEhFQURFUl9TRUFSQ0hfUEFUSFMpICQoU1lTVEVNX0hFQURF
Ul9TRUFSQ0hfUEFUSFMpIHwgcGVybCAtZSAncHJpbnQgIi1JIiAuIGpvaW4oIiAtSSIsIHNwbGl0
KCIgIiwgPD4pKTsnKQorCiAjIC0tLS0tLS0tCiAKIC5QSE9OWSA6IGFsbApAQCAtMjQzLDYgKzI2
MCw4IEBAIElOU1BFQ1RPUl9ET01BSU5TIDo9IFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9pbnNw
ZWN0b3IvcHJvdG9jb2wvQW5pbWF0aW9uLmpzb24gXAogICAgICQoSmF2YVNjcmlwdENvcmUpL2lu
c3BlY3Rvci9wcm90b2NvbC9BcHBsaWNhdGlvbkNhY2hlLmpzb24gXAogICAgICQoSmF2YVNjcmlw
dENvcmUpL2luc3BlY3Rvci9wcm90b2NvbC9BdWRpdC5qc29uIFwKKyAgICAkKEphdmFTY3JpcHRD
b3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvQnJvd3Nlci5qc29uIFwKKyAgICAkKEphdmFTY3JpcHRD
b3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvQ1BVUHJvZmlsZXIuanNvbiBcCiAgICAgJChKYXZhU2Ny
aXB0Q29yZSkvaW5zcGVjdG9yL3Byb3RvY29sL0NTUy5qc29uIFwKICAgICAkKEphdmFTY3JpcHRD
b3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvQ2FudmFzLmpzb24gXAogICAgICQoSmF2YVNjcmlwdENv
cmUpL2luc3BlY3Rvci9wcm90b2NvbC9Db25zb2xlLmpzb24gXApAQCAtMjUxLDM1ICsyNzAsMjQg
QEAgSU5TUEVDVE9SX0RPTUFJTlMgOj0gXAogICAgICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rv
ci9wcm90b2NvbC9ET01TdG9yYWdlLmpzb24gXAogICAgICQoSmF2YVNjcmlwdENvcmUpL2luc3Bl
Y3Rvci9wcm90b2NvbC9EYXRhYmFzZS5qc29uIFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9pbnNw
ZWN0b3IvcHJvdG9jb2wvRGVidWdnZXIuanNvbiBcCi0gICAgJChKYXZhU2NyaXB0Q29yZSkvaW5z
cGVjdG9yL3Byb3RvY29sL0Jyb3dzZXIuanNvbiBcCiAgICAgJChKYXZhU2NyaXB0Q29yZSkvaW5z
cGVjdG9yL3Byb3RvY29sL0dlbmVyaWNUeXBlcy5qc29uIFwKICAgICAkKEphdmFTY3JpcHRDb3Jl
KS9pbnNwZWN0b3IvcHJvdG9jb2wvSGVhcC5qc29uIFwKKyAgICAkKEphdmFTY3JpcHRDb3JlKS9p
bnNwZWN0b3IvcHJvdG9jb2wvSW5kZXhlZERCLmpzb24gXAogICAgICQoSmF2YVNjcmlwdENvcmUp
L2luc3BlY3Rvci9wcm90b2NvbC9JbnNwZWN0b3IuanNvbiBcCiAgICAgJChKYXZhU2NyaXB0Q29y
ZSkvaW5zcGVjdG9yL3Byb3RvY29sL0xheWVyVHJlZS5qc29uIFwKKyAgICAkKEphdmFTY3JpcHRD
b3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvTWVtb3J5Lmpzb24gXAogICAgICQoSmF2YVNjcmlwdENv
cmUpL2luc3BlY3Rvci9wcm90b2NvbC9OZXR3b3JrLmpzb24gXAogICAgICQoSmF2YVNjcmlwdENv
cmUpL2luc3BlY3Rvci9wcm90b2NvbC9QYWdlLmpzb24gXAogICAgICQoSmF2YVNjcmlwdENvcmUp
L2luc3BlY3Rvci9wcm90b2NvbC9SZWNvcmRpbmcuanNvbiBcCiAgICAgJChKYXZhU2NyaXB0Q29y
ZSkvaW5zcGVjdG9yL3Byb3RvY29sL1J1bnRpbWUuanNvbiBcCiAgICAgJChKYXZhU2NyaXB0Q29y
ZSkvaW5zcGVjdG9yL3Byb3RvY29sL1NjcmlwdFByb2ZpbGVyLmpzb24gXAogICAgICQoSmF2YVNj
cmlwdENvcmUpL2luc3BlY3Rvci9wcm90b2NvbC9TZWN1cml0eS5qc29uIFwKKyAgICAkKEphdmFT
Y3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvU2VydmljZVdvcmtlci5qc29uIFwKICAgICAk
KEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvVGFyZ2V0Lmpzb24gXAogICAgICQo
SmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9wcm90b2NvbC9UaW1lbGluZS5qc29uIFwKICAgICAk
KEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvV29ya2VyLmpzb24gXAogIwogCi1p
ZmVxICgkKGZpbmRzdHJpbmcgRU5BQkxFX0lOREVYRURfREFUQUJBU0UsJChGRUFUVVJFX0RFRklO
RVMpKSwgRU5BQkxFX0lOREVYRURfREFUQUJBU0UpCi0gICAgSU5TUEVDVE9SX0RPTUFJTlMgOj0g
JChJTlNQRUNUT1JfRE9NQUlOUykgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3RvY29s
L0luZGV4ZWREQi5qc29uCi1lbmRpZgotCi1pZmVxICgkKGZpbmRzdHJpbmcgRU5BQkxFX1JFU09V
UkNFX1VTQUdFLCQoRkVBVFVSRV9ERUZJTkVTKSksIEVOQUJMRV9SRVNPVVJDRV9VU0FHRSkKLSAg
ICBJTlNQRUNUT1JfRE9NQUlOUyA6PSAkKElOU1BFQ1RPUl9ET01BSU5TKSAkKEphdmFTY3JpcHRD
b3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvQ1BVUHJvZmlsZXIuanNvbgotICAgIElOU1BFQ1RPUl9E
T01BSU5TIDo9ICQoSU5TUEVDVE9SX0RPTUFJTlMpICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rv
ci9wcm90b2NvbC9NZW1vcnkuanNvbgotZW5kaWYKLQotaWZlcSAoJChmaW5kc3RyaW5nIEVOQUJM
RV9TRVJWSUNFX1dPUktFUiwkKEZFQVRVUkVfREVGSU5FUykpLCBFTkFCTEVfU0VSVklDRV9XT1JL
RVIpCi0gICAgSU5TUEVDVE9SX0RPTUFJTlMgOj0gJChJTlNQRUNUT1JfRE9NQUlOUykgJChKYXZh
U2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3RvY29sL1NlcnZpY2VXb3JrZXIuanNvbgotZW5kaWYK
LQogSU5TUEVDVE9SX0dFTkVSQVRPUl9TQ1JJUFRTID0gXAogCSQoSmF2YVNjcmlwdENvcmUpL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vX19pbml0X18ucHkgXAogCSQoSmF2YVNjcmlwdENvcmUp
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkgXApA
QCAtMzAyLDcgKzMxMCw2IEBAIElOU1BFQ1RPUl9HRU5FUkFUT1JfU0NSSVBUUyA9IFwKICMgZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5IGFuZCAuL0NvbWJpbmVkRG9tYWlu
cy5qc29uPwogSU5TUEVDVE9SX0RJU1BBVENIRVJfRklMRVMgPSBcCiAgICAgaW5zcGVjdG9yL0lu
c3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIFwKLSAgICBpbnNwZWN0b3IvSW5z
cGVjdG9yQmFja2VuZENvbW1hbmRzLmpzIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXJzLmNwcCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVycy5oIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmREaXNwYXRjaGVycy5jcHAg
XApAQCAtMzEyLDcgKzMxOSw3IEBAIElOU1BFQ1RPUl9ESVNQQVRDSEVSX0ZJTEVTID0gXAogIwog
SU5TUEVDVE9SX0RJU1BBVENIRVJfRklMRVNfUEFUVEVSTlMgPSAkKHN1YnN0IC4sJSwkKElOU1BF
Q1RPUl9ESVNQQVRDSEVSX0ZJTEVTKSkKIAotYWxsIDogJChJTlNQRUNUT1JfRElTUEFUQ0hFUl9G
SUxFUykKK2FsbCA6ICQoSU5TUEVDVE9SX0RJU1BBVENIRVJfRklMRVMpIGluc3BlY3Rvci9JbnNw
ZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKIAogIyBUaGUgY29tYmluZWQgSlNPTiBmaWxlIGRlcGVu
ZHMgb24gdGhlIGFjdHVhbCBzZXQgb2YgZG9tYWlucyBhbmQgdGhlaXIgZmlsZSBjb250ZW50cywg
c28gdGhhdAogIyBhZGRpbmcsIG1vZGlmeWluZywgb3IgcmVtb3ZpbmcgZG9tYWlucyB3aWxsIHRy
aWdnZXIgcmVnZW5lcmF0aW9uIG9mIGluc3BlY3RvciBmaWxlcy4KQEAgLTMyOCw2ICszMzUsMTQg
QEAgQ29tYmluZWREb21haW5zLmpzb24gOiAkKEphdmFTY3JpcHRDb3JlX1NDUklQVFNfRElSKS9n
ZW5lcmF0ZS1jb21iaW5lZC1pbnNwZWN0b3IKICQoSU5TUEVDVE9SX0RJU1BBVENIRVJfRklMRVNf
UEFUVEVSTlMpIDogQ29tYmluZWREb21haW5zLmpzb24gJChJTlNQRUNUT1JfR0VORVJBVE9SX1ND
UklQVFMpCiAJJChQWVRIT04pICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weSAtLWZyYW1ld29yayBKYXZhU2Ny
aXB0Q29yZSAtLW91dHB1dERpciBpbnNwZWN0b3IgLi9Db21iaW5lZERvbWFpbnMuanNvbgogCitp
bnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzIDogQ29tYmluZWREb21haW5zLmpz
b24gJChJTlNQRUNUT1JfR0VORVJBVE9SX1NDUklQVFMpCisJJChQWVRIT04pICQoSmF2YVNjcmlw
dENvcmUpL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weSAtLWZyYW1ld29yayBXZWJJbnNwZWN0b3JVSSAtLW91dHB1dERpciBpbnNwZWN0b3Ig
Li9Db21iaW5lZERvbWFpbnMuanNvbgorCUBlY2hvIFByZS1wcm9jZXNzaW5nIEluc3BlY3RvckJh
Y2tlbmRDb21tYW5kcy4uLgorCSQoQ0MpICQoU0RLX0ZMQUdTKSAkKFRBUkdFVF9UUklQTEVfRkxB
R1MpICQoVEVYVF9QUkVQUk9DRVNTT1JfRkxBR1MpICQoUFJFUFJPQ0VTU09SX0RFRklORVMpICQo
RlJBTUVXT1JLX0ZMQUdTKSAkKEhFQURFUl9GTEFHUykgLWluY2x1ZGUgInd0Zi9QbGF0Zm9ybS5o
IiAtIDwgaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcy5pbiA+IGluc3BlY3Rv
ci9JbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMub3V0CisJdHIgLXMgIlxuIiA8IGluc3BlY3Rv
ci9JbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMub3V0ID4gaW5zcGVjdG9yL0luc3BlY3RvckJh
Y2tlbmRDb21tYW5kcy5qcworCSQoREVMRVRFKSBpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZENv
bW1hbmRzLmpzLmluCisJJChERUxFVEUpIGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kQ29tbWFu
ZHMuanMub3V0CisKIEluamVjdGVkU2NyaXB0U291cmNlLmggOiBpbnNwZWN0b3IvSW5qZWN0ZWRT
Y3JpcHRTb3VyY2UuanMgJChKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUikvanNtaW4ucHkgJChK
YXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUikveHhkLnBsCiAJZWNobyAiLy8jIHNvdXJjZVVSTD1f
X0luamVjdGVkU2NyaXB0X0luamVjdGVkU2NyaXB0U291cmNlLmpzIiA+IC4vSW5qZWN0ZWRTY3Jp
cHRTb3VyY2UubWluLmpzCiAJJChQWVRIT04pICQoSmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVIp
L2pzbWluLnB5IDwgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0U291
cmNlLmpzID4+IC4vSW5qZWN0ZWRTY3JpcHRTb3VyY2UubWluLmpzCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0ZS1kZXJpdmVkLXNvdXJjZXMuc2ggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0ZS1kZXJpdmVkLXNvdXJjZXMuc2gK
aW5kZXggOTM2MWY1OGVjNGYuLjI0MTQ3NjU0MzFkIDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0ZS1kZXJpdmVkLXNvdXJjZXMuc2gKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvZ2VuZXJhdGUtZGVyaXZlZC1zb3VyY2VzLnNoCkBAIC0x
MSw0ICsxMSw4IEBAIGNkICIke0JVSUxUX1BST0RVQ1RTX0RJUn0vRGVyaXZlZFNvdXJjZXMvSmF2
YVNjcmlwdENvcmUiCiBleHBvcnQgSmF2YVNjcmlwdENvcmU9IkphdmFTY3JpcHRDb3JlIgogZXhw
b3J0IEJVSUxUX1BST0RVQ1RTX0RJUj0iLi4vLi4iCiAKK2lmIFsgISAkQ0MgXTsgdGhlbgorICAg
IGV4cG9ydCBDQz0iYHhjcnVuIC1maW5kIGNsYW5nYCIKK2ZpCisKIG1ha2UgLS1uby1idWlsdGlu
LXJ1bGVzIC1mICJKYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlIiAtaiBgL3Vzci9z
YmluL3N5c2N0bCAtbiBody5uY3B1YCAiJHtBUkdTW0BdfSIKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvQ1BVUHJvZmlsZXIuanNvbiBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvQ1BVUHJvZmlsZXIuanNvbgppbmRl
eCBjZmFjZDAxZGI3My4uZTE3OTIyMjA3OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvQ1BVUHJvZmlsZXIuanNvbgorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL0NQVVByb2ZpbGVyLmpzb24KQEAgLTEsNyAr
MSw3IEBACiB7CiAgICAgImRvbWFpbiI6ICJDUFVQcm9maWxlciIsCiAgICAgImRlc2NyaXB0aW9u
IjogIkNQVVByb2ZpbGVyIGRvbWFpbiBleHBvc2VzIGNwdSB1c2FnZSB0cmFja2luZy4iLAotICAg
ICJmZWF0dXJlR3VhcmQiOiAiRU5BQkxFKFJFU09VUkNFX1VTQUdFKSIsCisgICAgImNvbmRpdGlv
biI6ICJFTkFCTEUoUkVTT1VSQ0VfVVNBR0UpIiwKICAgICAiZGVidWdnYWJsZVR5cGVzIjogWyJw
YWdlIiwgIndlYi1wYWdlIl0sCiAgICAgInRhcmdldFR5cGVzIjogWyJwYWdlIl0sCiAgICAgInR5
cGVzIjogWwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90
b2NvbC9DYW52YXMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9j
b2wvQ2FudmFzLmpzb24KaW5kZXggYWI1NDQ0MGYwNGEuLjYwNDYwMmU1MzZiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL0NhbnZhcy5qc29uCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvQ2FudmFzLmpzb24K
QEAgLTExLDYgKzExLDcgQEAKICAgICAgICAgfSwKICAgICAgICAgewogICAgICAgICAgICAgImlk
IjogIlByb2dyYW1JZCIsCisgICAgICAgICAgICAiY29uZGl0aW9uIjogIkVOQUJMRShXRUJHTCkg
fHwgRU5BQkxFKFdFQkdQVSkiLAogICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKICAgICAg
ICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgc2hhZGVyIHByb2dyYW0gaWRlbnRpZmllci4i
CiAgICAgICAgIH0sCkBAIC0yMiwxMSArMjMsMTMgQEAKICAgICAgICAgfSwKICAgICAgICAgewog
ICAgICAgICAgICAgImlkIjogIlByb2dyYW1UeXBlIiwKKyAgICAgICAgICAgICJjb25kaXRpb24i
OiAiRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKSIsCiAgICAgICAgICAgICAidHlwZSI6
ICJzdHJpbmciLAogICAgICAgICAgICAgImVudW0iOiBbImNvbXB1dGUiLCAicmVuZGVyIl0KICAg
ICAgICAgfSwKICAgICAgICAgewogICAgICAgICAgICAgImlkIjogIlNoYWRlclR5cGUiLAorICAg
ICAgICAgICAgImNvbmRpdGlvbiI6ICJFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpIiwK
ICAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCiAgICAgICAgICAgICAiZW51bSI6IFsiY29t
cHV0ZSIsICJmcmFnbWVudCIsICJ2ZXJ0ZXgiXQogICAgICAgICB9LApAQCAtNjEsOCArNjQsOSBA
QAogICAgICAgICB9LAogICAgICAgICB7CiAgICAgICAgICAgICAiaWQiOiAiU2hhZGVyUHJvZ3Jh
bSIsCi0gICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAogICAgICAgICAgICAgImRlc2NyaXB0
aW9uIjogIkluZm9ybWF0aW9uIGFib3V0IGEgV2ViR0wvV2ViR0wyIHNoYWRlciBwcm9ncmFtIG9y
IFdlYkdQVSBzaGFkZXIgcGlwZWxpbmUuIiwKKyAgICAgICAgICAgICJjb25kaXRpb24iOiAiRU5B
QkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKSIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmpl
Y3QiLAogICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCiAgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJwcm9ncmFtSWQiLCAiJHJlZiI6ICJQcm9ncmFtSWQiIH0sCiAgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJwcm9ncmFtVHlwZSIsICIkcmVmIjogIlByb2dyYW1UeXBlIiB9LApAQCAtMTQ3
LDYgKzE1MSw3IEBACiAgICAgICAgIHsKICAgICAgICAgICAgICJuYW1lIjogInJlcXVlc3RTaGFk
ZXJTb3VyY2UiLAogICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlJlcXVlc3RzIHRoZSBzb3Vy
Y2Ugb2YgdGhlIHNoYWRlciBvZiB0aGUgZ2l2ZW4gdHlwZSBmcm9tIHRoZSBwcm9ncmFtIHdpdGgg
dGhlIGdpdmVuIGlkLiIsCisgICAgICAgICAgICAiY29uZGl0aW9uIjogIkVOQUJMRShXRUJHTCkg
fHwgRU5BQkxFKFdFQkdQVSkiLAogICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCiAgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJwcm9ncmFtSWQiLCAiJHJlZiI6ICJQcm9ncmFtSWQiIH0sCiAg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzaGFkZXJUeXBlIiwgIiRyZWYiOiAiU2hhZGVyVHlw
ZSIgfQpAQCAtMTU4LDYgKzE2Myw3IEBACiAgICAgICAgIHsKICAgICAgICAgICAgICJuYW1lIjog
InVwZGF0ZVNoYWRlciIsCiAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQ29tcGlsZXMgYW5k
IGxpbmtzIHRoZSBzaGFkZXIgd2l0aCBpZGVudGlmaWVyIGFuZCB0eXBlIHdpdGggdGhlIGdpdmVu
IHNvdXJjZSBjb2RlLiIsCisgICAgICAgICAgICAiY29uZGl0aW9uIjogIkVOQUJMRShXRUJHTCkg
fHwgRU5BQkxFKFdFQkdQVSkiLAogICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCiAgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJwcm9ncmFtSWQiLCAiJHJlZiI6ICJQcm9ncmFtSWQiIH0sCiAg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzaGFkZXJUeXBlIiwgIiRyZWYiOiAiU2hhZGVyVHlw
ZSIgfSwKQEAgLTE2Nyw2ICsxNzMsNyBAQAogICAgICAgICB7CiAgICAgICAgICAgICAibmFtZSI6
ICJzZXRTaGFkZXJQcm9ncmFtRGlzYWJsZWQiLAogICAgICAgICAgICAgImRlc2NyaXB0aW9uIjog
IkVuYWJsZS9kaXNhYmxlIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBnaXZlbiBzaGFkZXIgcHJvZ3Jh
bS4iLAorICAgICAgICAgICAgImNvbmRpdGlvbiI6ICJFTkFCTEUoV0VCR0wpIiwKICAgICAgICAg
ICAgICJwYXJhbWV0ZXJzIjogWwogICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJvZ3JhbUlk
IiwgIiRyZWYiOiAiUHJvZ3JhbUlkIiB9LAogICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGlz
YWJsZWQiLCAidHlwZSI6ICJib29sZWFuIiB9CkBAIC0xNzUsNiArMTgyLDcgQEAKICAgICAgICAg
ewogICAgICAgICAgICAgIm5hbWUiOiAic2V0U2hhZGVyUHJvZ3JhbUhpZ2hsaWdodGVkIiwKICAg
ICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJFbmFibGUvZGlzYWJsZSBoaWdobGlnaHRpbmcgb2Yg
dGhlIGdpdmVuIHNoYWRlciBwcm9ncmFtLiIsCisgICAgICAgICAgICAiY29uZGl0aW9uIjogIkVO
QUJMRShXRUJHTCkiLAogICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCiAgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJwcm9ncmFtSWQiLCAiJHJlZiI6ICJQcm9ncmFtSWQiIH0sCiAgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJoaWdobGlnaHRlZCIsICJ0eXBlIjogImJvb2xlYW4iIH0KQEAg
LTIzOCwxMiArMjQ2LDE0IEBACiAgICAgICAgIH0sCiAgICAgICAgIHsKICAgICAgICAgICAgICJu
YW1lIjogInByb2dyYW1DcmVhdGVkIiwKKyAgICAgICAgICAgICJjb25kaXRpb24iOiAiRU5BQkxF
KFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKSIsCiAgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsK
ICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNoYWRlclByb2dyYW0iLCAiJHJlZiI6ICJTaGFk
ZXJQcm9ncmFtIiB9CiAgICAgICAgICAgICBdCiAgICAgICAgIH0sCiAgICAgICAgIHsKICAgICAg
ICAgICAgICJuYW1lIjogInByb2dyYW1EZWxldGVkIiwKKyAgICAgICAgICAgICJjb25kaXRpb24i
OiAiRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKSIsCiAgICAgICAgICAgICAicGFyYW1l
dGVycyI6IFsKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInByb2dyYW1JZCIsICIkcmVmIjog
IlByb2dyYW1JZCIgfQogICAgICAgICAgICAgXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9ET00uanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvcHJvdG9jb2wvRE9NLmpzb24KaW5kZXggMzhjYjQ4YmVkZjIuLjNhYTRhMjhj
YzJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29s
L0RPTS5qc29uCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wv
RE9NLmpzb24KQEAgLTM5OSw2ICszOTksMTYgQEAKICAgICAgICAgewogICAgICAgICAgICAgIm5h
bWUiOiAic2V0SW5zcGVjdE1vZGVFbmFibGVkIiwKICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6
ICJFbnRlcnMgdGhlICdpbnNwZWN0JyBtb2RlLiBJbiB0aGlzIG1vZGUsIGVsZW1lbnRzIHRoYXQg
dXNlciBpcyBob3ZlcmluZyBvdmVyIGFyZSBoaWdobGlnaHRlZC4gQmFja2VuZCB0aGVuIGdlbmVy
YXRlcyAnaW5zcGVjdCcgY29tbWFuZCB1cG9uIGVsZW1lbnQgc2VsZWN0aW9uLiIsCisgICAgICAg
ICAgICAiY29uZGl0aW9uIjogIlBMQVRGT1JNKElPU19GQU1JTFkpIiwKKyAgICAgICAgICAgICJw
YXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZW5hYmxlZCIsICJ0eXBl
IjogImJvb2xlYW4iLCAiZGVzY3JpcHRpb24iOiAiVHJ1ZSB0byBlbmFibGUgaW5zcGVjdGlvbiBt
b2RlLCBmYWxzZSB0byBkaXNhYmxlIGl0LiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjog
ImhpZ2hsaWdodENvbmZpZyIsICIkcmVmIjogIkhpZ2hsaWdodENvbmZpZyIsICJvcHRpb25hbCI6
IHRydWUsICJkZXNjcmlwdGlvbiI6ICJBIGRlc2NyaXB0b3IgZm9yIHRoZSBoaWdobGlnaHQgYXBw
ZWFyYW5jZSBvZiBob3ZlcmVkLW92ZXIgbm9kZXMuIE1heSBiZSBvbWl0dGVkIGlmIDxjb2RlPmVu
YWJsZWQgPT0gZmFsc2U8L2NvZGU+LiIgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAg
ICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJzZXRJbnNwZWN0TW9kZUVuYWJsZWQiLAorICAg
ICAgICAgICAgImRlc2NyaXB0aW9uIjogIkVudGVycyB0aGUgJ2luc3BlY3QnIG1vZGUuIEluIHRo
aXMgbW9kZSwgZWxlbWVudHMgdGhhdCB1c2VyIGlzIGhvdmVyaW5nIG92ZXIgYXJlIGhpZ2hsaWdo
dGVkLiBCYWNrZW5kIHRoZW4gZ2VuZXJhdGVzICdpbnNwZWN0JyBjb21tYW5kIHVwb24gZWxlbWVu
dCBzZWxlY3Rpb24uIiwKKyAgICAgICAgICAgICJjb25kaXRpb24iOiAiIVBMQVRGT1JNKElPU19G
QU1JTFkpIiwKICAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwogICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAiZW5hYmxlZCIsICJ0eXBlIjogImJvb2xlYW4iLCAiZGVzY3JpcHRpb24iOiAiVHJ1
ZSB0byBlbmFibGUgaW5zcGVjdGlvbiBtb2RlLCBmYWxzZSB0byBkaXNhYmxlIGl0LiIgfSwKICAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogImhpZ2hsaWdodENvbmZpZyIsICIkcmVmIjogIkhpZ2hs
aWdodENvbmZpZyIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJBIGRlc2NyaXB0
b3IgZm9yIHRoZSBoaWdobGlnaHQgYXBwZWFyYW5jZSBvZiBob3ZlcmVkLW92ZXIgbm9kZXMuIE1h
eSBiZSBvbWl0dGVkIGlmIDxjb2RlPmVuYWJsZWQgPT0gZmFsc2U8L2NvZGU+LiIgfSwKQEAgLTY4
OCw2ICs2OTgsNyBAQAogICAgICAgICB7CiAgICAgICAgICAgICAibmFtZSI6ICJwb3dlckVmZmlj
aWVudFBsYXliYWNrU3RhdGVDaGFuZ2VkIiwKICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJD
YWxsZWQgd2hlbiBhbiBlbGVtZW50IGVudGVycy9leGl0cyBhIHBvd2VyIGVmZmljaWVudCBwbGF5
YmFjayBzdGF0ZS4iLAorICAgICAgICAgICAgImNvbmRpdGlvbiI6ICJFTkFCTEUoVklERU8pIiwK
ICAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwogICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
bm9kZUlkIiwgIiRyZWYiOiAiTm9kZUlkIiB9LAogICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
dGltZXN0YW1wIiwgIiRyZWYiOiAiTmV0d29yay5UaW1lc3RhbXAiIH0sCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL0luZGV4ZWREQi5qc29uIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9JbmRleGVkREIuanNvbgpp
bmRleCA5ZDIzMDA4OTMwNy4uODQzZDFhNmRjYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvSW5kZXhlZERCLmpzb24KKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9JbmRleGVkREIuanNvbgpAQCAtMSw2ICsx
LDYgQEAKIHsKICAgICAiZG9tYWluIjogIkluZGV4ZWREQiIsCi0gICAgImZlYXR1cmVHdWFyZCI6
ICJFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkiLAorICAgICJjb25kaXRpb24iOiAiRU5BQkxFKElO
REVYRURfREFUQUJBU0UpIiwKICAgICAiZGVidWdnYWJsZVR5cGVzIjogWyJwYWdlIiwgIndlYi1w
YWdlIl0sCiAgICAgInRhcmdldFR5cGVzIjogWyJwYWdlIl0sCiAgICAgInR5cGVzIjogWwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9JbnNwZWN0
b3IuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvSW5zcGVj
dG9yLmpzb24KaW5kZXggMmJiOGQ2Mjg1NWEuLmZmOTJmM2U3MGM4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL0luc3BlY3Rvci5qc29uCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvSW5zcGVjdG9yLmpzb24K
QEAgLTMzLDYgKzMzLDcgQEAKICAgICAgICAgewogICAgICAgICAgICAgIm5hbWUiOiAiYWN0aXZh
dGVFeHRyYURvbWFpbnMiLAogICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkZpcmVkIHdoZW4g
dGhlIGJhY2tlbmQgaGFzIGFsdGVybmF0ZSBkb21haW5zIHRoYXQgbmVlZCB0byBiZSBhY3RpdmF0
ZWQuIiwKKyAgICAgICAgICAgICJjb25kaXRpb24iOiAiRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpIiwKICAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwogICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAiZG9tYWlucyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAi
dHlwZSI6ICJzdHJpbmciIH0sICJkZXNjcmlwdGlvbiI6ICJEb21haW4gbmFtZXMgdGhhdCBuZWVk
IGFjdGl2YXRpb24iIH0KICAgICAgICAgICAgIF0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvTWVtb3J5Lmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL01lbW9yeS5qc29uCmluZGV4IDBjM2Q5MTQzODcxLi5m
NWM5ZGExYjBmMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9w
cm90b2NvbC9NZW1vcnkuanNvbgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3Byb3RvY29sL01lbW9yeS5qc29uCkBAIC0xLDcgKzEsNyBAQAogewogICAgICJkb21haW4iOiAi
TWVtb3J5IiwKICAgICAiZGVzY3JpcHRpb24iOiAiTWVtb3J5IGRvbWFpbiBleHBvc2VzIHBhZ2Ug
bWVtb3J5IHRyYWNraW5nLiIsCi0gICAgImZlYXR1cmVHdWFyZCI6ICJFTkFCTEUoUkVTT1VSQ0Vf
VVNBR0UpIiwKKyAgICAiY29uZGl0aW9uIjogIkVOQUJMRShSRVNPVVJDRV9VU0FHRSkiLAogICAg
ICJkZWJ1Z2dhYmxlVHlwZXMiOiBbInBhZ2UiLCAid2ViLXBhZ2UiXSwKICAgICAidGFyZ2V0VHlw
ZXMiOiBbInBhZ2UiXSwKICAgICAidHlwZXMiOiBbCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL1BhZ2UuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvUGFnZS5qc29uCmluZGV4IGQyNzUxMmE0ZjAwLi41YWJm
Yzk0MDY1ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90
b2NvbC9QYWdlLmpzb24KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90
b2NvbC9QYWdlLmpzb24KQEAgLTQ1LDYgKzQ1LDcgQEAKICAgICAgICAgewogICAgICAgICAgICAg
ImlkIjogIkFwcGVhcmFuY2UiLAogICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAg
ICAgICAgICJjb25kaXRpb24iOiAiRU5BQkxFKERBUktfTU9ERV9DU1MpIHx8IEhBVkUoT1NfREFS
S19NT0RFX1NVUFBPUlQpIiwKICAgICAgICAgICAgICJlbnVtIjogWyJMaWdodCIsICJEYXJrIl0s
CiAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiUGFnZSBhcHBlYXJhbmNlIG5hbWUuIgogICAg
ICAgICB9LApAQCAtMjI5LDYgKzIzMCw3IEBACiAgICAgICAgIHsKICAgICAgICAgICAgICJuYW1l
IjogInNldFNob3dSdWxlcnMiLAogICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlJlcXVlc3Rz
IHRoYXQgYmFja2VuZCBkcmF3IHJ1bGVycyBpbiB0aGUgaW5zcGVjdG9yIG92ZXJsYXkiLAorICAg
ICAgICAgICAgImNvbmRpdGlvbiI6ICIhUExBVEZPUk0oSU9TX0ZBTUlMWSkiLAogICAgICAgICAg
ICAgInBhcmFtZXRlcnMiOiBbCiAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJyZXN1bHQiLCAi
dHlwZSI6ICJib29sZWFuIiwgImRlc2NyaXB0aW9uIjogIlRydWUgZm9yIHNob3dpbmcgcnVsZXJz
IiB9CiAgICAgICAgICAgICBdCkBAIC0yNTAsNiArMjUyLDcgQEAKICAgICAgICAgewogICAgICAg
ICAgICAgIm5hbWUiOiAic2V0Rm9yY2VkQXBwZWFyYW5jZSIsCiAgICAgICAgICAgICAiZGVzY3Jp
cHRpb24iOiAiRm9yY2VzIHRoZSBnaXZlbiBhcHBlYXJhbmNlIGZvciB0aGUgcGFnZS4iLAorICAg
ICAgICAgICAgImNvbmRpdGlvbiI6ICJFTkFCTEUoREFSS19NT0RFX0NTUykgfHwgSEFWRShPU19E
QVJLX01PREVfU1VQUE9SVCkiLAogICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCiAgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJhcHBlYXJhbmNlIiwgIiRyZWYiOiAiQXBwZWFyYW5jZSIsICJk
ZXNjcmlwdGlvbiI6ICJBcHBlYXJhbmNlIG5hbWUgdG8gZm9yY2UuIEVtcHR5IHN0cmluZyBkaXNh
YmxlcyB0aGUgb3ZlcnJpZGUuIiB9CiAgICAgICAgICAgICBdCkBAIC0yODEsNiArMjg0LDcgQEAK
ICAgICAgICAgewogICAgICAgICAgICAgIm5hbWUiOiAiYXJjaGl2ZSIsCiAgICAgICAgICAgICAi
ZGVzY3JpcHRpb24iOiAiR3JhYiBhbiBhcmNoaXZlIG9mIHRoZSBwYWdlLiIsCisgICAgICAgICAg
ICAiY29uZGl0aW9uIjogIkVOQUJMRShXRUJfQVJDSElWRSkgJiYgVVNFKENGKSIsCiAgICAgICAg
ICAgICAicmV0dXJucyI6IFsKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRhdGEiLCAidHlw
ZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiQmFzZTY0LWVuY29kZWQgd2ViIGFyY2hpdmUu
IiB9CiAgICAgICAgICAgICBdCkBAIC0zNDUsNiArMzQ5LDcgQEAKICAgICAgICAgewogICAgICAg
ICAgICAgIm5hbWUiOiAiZGVmYXVsdEFwcGVhcmFuY2VEaWRDaGFuZ2UiLAogICAgICAgICAgICAg
ImRlc2NyaXB0aW9uIjogIkZpcmVkIHdoZW4gcGFnZSdzIGRlZmF1bHQgYXBwZWFyYW5jZSBjaGFu
Z2VzLCBldmVuIGlmIHRoZXJlIGlzIGEgZm9yY2VkIGFwcGVhcmFuY2UuIiwKKyAgICAgICAgICAg
ICJjb25kaXRpb24iOiAiRU5BQkxFKERBUktfTU9ERV9DU1MpIHx8IEhBVkUoT1NfREFSS19NT0RF
X1NVUFBPUlQpIiwKICAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwogICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAiYXBwZWFyYW5jZSIsICIkcmVmIjogIkFwcGVhcmFuY2UiLCAiZGVzY3JpcHRp
b24iOiAiTmFtZSBvZiB0aGUgYXBwZWFyYW5jZSB0aGF0IGlzIGFjdGl2ZSAobm90IGNvbnNpZGVy
aW5nIGFueSBmb3JjZWQgYXBwZWFyYW5jZS4pIiB9CiAgICAgICAgICAgICBdCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL1NlcnZpY2VXb3JrZXIu
anNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvU2VydmljZVdv
cmtlci5qc29uCmluZGV4IDhhYzNkNGY3ZDZiLi4wYzUwMzBmYjY4NiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9TZXJ2aWNlV29ya2VyLmpzb24K
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9TZXJ2aWNlV29y
a2VyLmpzb24KQEAgLTEsNiArMSw3IEBACiB7CiAgICAgImRvbWFpbiI6ICJTZXJ2aWNlV29ya2Vy
IiwKICAgICAiZGVzY3JpcHRpb24iOiAiQWN0aW9ucyBhbmQgZXZlbnRzIHJlbGF0ZWQgdG8gdGhl
IGluc3BlY3RlZCBzZXJ2aWNlIHdvcmtlci4iLAorICAgICJjb25kaXRpb24iOiAiRU5BQkxFKFNF
UlZJQ0VfV09SS0VSKSIsCiAgICAgImRlYnVnZ2FibGVUeXBlcyI6IFsic2VydmljZS13b3JrZXIi
XSwKICAgICAidGFyZ2V0VHlwZXMiOiBbInNlcnZpY2Utd29ya2VyIl0sCiAgICAgInR5cGVzIjog
WwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weQppbmRl
eCA5NmI1NWU0MTYyYy4uOTk4M2VlZDhkNTggMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2Nw
cF9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5CkBAIC0zMiw2ICszMiw4IEBAIGNsYXNzIENwcEdlbmVy
YXRvclRlbXBsYXRlczoKICAgICBIZWFkZXJQcmVsdWRlID0gKAogICAgICIiIiNwcmFnbWEgb25j
ZQogCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKICR7aW5jbHVkZXN9CiAKIG5hbWVzcGFj
ZSBJbnNwZWN0b3IgewpAQCAtNTYsNiArNTgsOCBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsiIiIp
CiAgICAgQWx0ZXJuYXRlRGlzcGF0Y2hlcnNIZWFkZXJQcmVsdWRlID0gKAogICAgICIiIiNwcmFn
bWEgb25jZQogCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKICNpZiBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAogJHtpbmNsdWRlc30KQEAgLTEwOCw3ICsxMTIs
NyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZSR7
ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2Fs
dGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9CiBwcml2YXRlOgogICAg
IEFsdGVybmF0ZSR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlciogbV9hbHRlcm5hdGVEaXNw
YXRjaGVyIHsgbnVsbHB0ciB9OwotI2VuZGlmIiIiKQorI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKSIiIikKIAogICAgIEJhY2tlbmREaXNwYXRjaGVySGVh
ZGVyQXN5bmNDb21tYW5kRGVjbGFyYXRpb24gPSAoCiAgICAgIiIiICAgICR7Y2xhc3NBbmRFeHBv
cnRNYWNyb30gJHtjYWxsYmFja05hbWV9IDogcHVibGljIEJhY2tlbmREaXNwYXRjaGVyOjpDYWxs
YmFja0Jhc2UgewpAQCAtMTI3LDggKzEzMSw4IEBAIHByaXZhdGU6CiAgICAgbWVzc2FnZS0+Z2V0
T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRlcnMpOwogCiAke2Rpc3BhdGNoQ2FzZXN9Ci0gICAg
ZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJh
Y2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIicke2RvbWFpbk5hbWV9LiIgKyBtZXRo
b2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CisKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBv
cnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIicke2Rv
bWFpbk5hbWV9LiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CiB9IiIiKQogCiAgICAg
QmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkxhcmdlU3dpdGNoID0gKApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJh
dGVfY3BwX2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2FsdGVy
bmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CmluZGV4IGU2Mjc4ODBlMTMzLi5lMWE2
NjFiYTM3OSAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVh
ZGVyLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2dlbmVyYXRlX2NwcF9hbHRlcm5hdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQpA
QCAtNTYsNyArNTYsNyBAQCBjbGFzcyBDcHBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlckhlYWRl
ckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICBzZWN0aW9ucyA9IFtdCiAgICAgICAg
IHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX2xpY2Vuc2UoKSkKICAgICAgICAgc2VjdGlv
bnMuYXBwZW5kKFRlbXBsYXRlKENwcFRlbXBsYXRlcy5BbHRlcm5hdGVEaXNwYXRjaGVyc0hlYWRl
clByZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKip0ZW1wbGF0ZV9hcmdzKSkKLSAgICAgICAgc2Vj
dGlvbnMuYXBwZW5kKCdcbicuam9pbihbX2YgZm9yIF9mIGluIG1hcChzZWxmLl9nZW5lcmF0ZV9o
YW5kbGVyX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluLCBkb21haW5zKSBpZiBfZl0pKQorICAgICAg
ICBzZWN0aW9ucy5hcHBlbmQoJ1xuXG4nLmpvaW4oW19mIGZvciBfZiBpbiBtYXAoc2VsZi5fZ2Vu
ZXJhdGVfaGFuZGxlcl9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbiwgZG9tYWlucykgaWYgX2ZdKSkK
ICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKENwcFRlbXBsYXRlcy5BbHRlcm5hdGVE
aXNwYXRjaGVyc0hlYWRlclBvc3RsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqdGVtcGxhdGVfYXJn
cykpCiAgICAgICAgIHJldHVybiAnXG5cbicuam9pbihzZWN0aW9ucykKIApAQCAtODcsNyArODcs
NyBAQCBjbGFzcyBDcHBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihD
cHBHZW5lcmF0b3IpOgogICAgICAgICAgICAgJ2NvbW1hbmREZWNsYXJhdGlvbnMnOiAnXG4nLmpv
aW4oY29tbWFuZF9kZWNsYXJhdGlvbnMpLAogICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuIHNl
bGYud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCBUZW1wbGF0ZShDcHBUZW1wbGF0
ZXMuQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJIZWFkZXJEb21haW5IYW5kbGVySW50ZXJmYWNl
RGVjbGFyYXRpb24pLnN1YnN0aXR1dGUoTm9uZSwgKipoYW5kbGVyX2FyZ3MpKQorICAgICAgICBy
ZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9u
LCBUZW1wbGF0ZShDcHBUZW1wbGF0ZXMuQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJIZWFkZXJE
b21haW5IYW5kbGVySW50ZXJmYWNlRGVjbGFyYXRpb24pLnN1YnN0aXR1dGUoTm9uZSwgKipoYW5k
bGVyX2FyZ3MpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9j
b21tYW5kKHNlbGYsIGNvbW1hbmQpOgogICAgICAgICBsaW5lcyA9IFtdCkBAIC0xMDAsNCArMTAw
LDQgQEAgY2xhc3MgQ3BwQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3Io
Q3BwR2VuZXJhdG9yKToKICAgICAgICAgICAgICdwYXJhbWV0ZXJzJzogJywgJy5qb2luKHBhcmFt
ZXRlcnMpLAogICAgICAgICB9CiAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHZpcnR1YWwgdm9p
ZCAlKGNvbW1hbmROYW1lKXMoJShwYXJhbWV0ZXJzKXMpID0gMDsnICUgY29tbWFuZF9hcmdzKQot
ICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorICAgICAgICByZXR1cm4gc2VsZi53cmFw
X3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihjb21tYW5kLmNvbmRpdGlvbiwgJ1xuJy5qb2luKGxp
bmVzKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3Bw
X2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKaW5kZXggZTNmZTRlMTAwNDIuLjEwZDhmMTRi
ZDVmIDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9j
cHBfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQpAQCAtOTEsNyArOTEsNyBAQCBjbGFzcyBD
cHBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAg
ICBsaW5lcyA9IFtdCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnI2lmIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKScpCiAgICAgICAgIGZvciBkb21haW4gaW4gZG9tYWluczoK
LSAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWlu
KGRvbWFpbiwgJ2NsYXNzIEFsdGVybmF0ZSVzQmFja2VuZERpc3BhdGNoZXI7JyAlIGRvbWFpbi5k
b21haW5fbmFtZSkpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi53cmFwX3dpdGhfZ3Vh
cmRfZm9yX2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9uLCAnY2xhc3MgQWx0ZXJuYXRlJXNCYWNr
ZW5kRGlzcGF0Y2hlcjsnICUgZG9tYWluLmRvbWFpbl9uYW1lKSkKICAgICAgICAgbGluZXMuYXBw
ZW5kKCcjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpJykK
ICAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKIApAQCAtMTEzLDcgKzExMyw3IEBAIGNs
YXNzIENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAg
ICAgICAgICAgICAnY29tbWFuZERlY2xhcmF0aW9ucyc6ICJcbiIuam9pbihjb21tYW5kX2RlY2xh
cmF0aW9ucykKICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFy
ZF9mb3JfZG9tYWluKGRvbWFpbiwgVGVtcGxhdGUoQ3BwVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRj
aGVySGVhZGVyRG9tYWluSGFuZGxlckRlY2xhcmF0aW9uKS5zdWJzdGl0dXRlKE5vbmUsICoqaGFu
ZGxlcl9hcmdzKSkKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25k
aXRpb24oZG9tYWluLmNvbmRpdGlvbiwgVGVtcGxhdGUoQ3BwVGVtcGxhdGVzLkJhY2tlbmREaXNw
YXRjaGVySGVhZGVyRG9tYWluSGFuZGxlckRlY2xhcmF0aW9uKS5zdWJzdGl0dXRlKE5vbmUsICoq
aGFuZGxlcl9hcmdzKSkKIAogICAgIGRlZiBfZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX3Bh
cmFtZXRlcihzZWxmLCBwYXJhbWV0ZXIsIGNvbW1hbmQpOgogICAgICAgICBlbnVtX2FyZ3MgPSB7
CkBAIC0xNjEsNyArMTYxLDcgQEAgY2xhc3MgQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5l
cmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgICAgICdwYXJhbWV0ZXJzJzogIiwgIi5qb2lu
KHBhcmFtZXRlcnMpCiAgICAgICAgIH0KICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgdmlydHVh
bCB2b2lkICUoY29tbWFuZE5hbWUpcyglKHBhcmFtZXRlcnMpcykgPSAwOycgJSBjb21tYW5kX2Fy
Z3MpCi0gICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisgICAgICAgIHJldHVybiBzZWxm
LndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGNvbW1hbmQuY29uZGl0aW9uLCAnXG4nLmpv
aW4obGluZXMpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9hc3luY19oYW5kbGVyX2RlY2xhcmF0aW9u
X2Zvcl9jb21tYW5kKHNlbGYsIGNvbW1hbmQpOgogICAgICAgICBjYWxsYmFja05hbWUgPSAiJXND
YWxsYmFjayIgJSB1Y2ZpcnN0KGNvbW1hbmQuY29tbWFuZF9uYW1lKQpAQCAtMTkyLDcgKzE5Miw3
IEBAIGNsYXNzIENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRv
cik6CiAgICAgICAgICAgICAnb3V0UGFyYW1ldGVycyc6ICIsICIuam9pbihvdXRfcGFyYW1ldGVy
cyksCiAgICAgICAgIH0KIAotICAgICAgICByZXR1cm4gVGVtcGxhdGUoQ3BwVGVtcGxhdGVzLkJh
Y2tlbmREaXNwYXRjaGVySGVhZGVyQXN5bmNDb21tYW5kRGVjbGFyYXRpb24pLnN1YnN0aXR1dGUo
Tm9uZSwgKipjb21tYW5kX2FyZ3MpCisgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFy
ZF9mb3JfY29uZGl0aW9uKGNvbW1hbmQuY29uZGl0aW9uLCBUZW1wbGF0ZShDcHBUZW1wbGF0ZXMu
QmFja2VuZERpc3BhdGNoZXJIZWFkZXJBc3luY0NvbW1hbmREZWNsYXJhdGlvbikuc3Vic3RpdHV0
ZShOb25lLCAqKmNvbW1hbmRfYXJncykpCiAKICAgICBkZWYgX2dlbmVyYXRlX2Rpc3BhdGNoZXJf
ZGVjbGFyYXRpb25zX2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToKICAgICAgICAgY2xhc3NDb21w
b25lbnRzID0gWydjbGFzcyddCkBAIC0yMjAsNyArMjIwLDcgQEAgY2xhc3MgQ3BwQmFja2VuZERp
c3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgICAgICdjb21t
YW5kRGVjbGFyYXRpb25zJzogIlxuIi5qb2luKGRlY2xhcmF0aW9ucykKICAgICAgICAgfQogCi0g
ICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgVGVt
cGxhdGUoQ3BwVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVySGVhZGVyRG9tYWluRGlzcGF0Y2hl
ckRlY2xhcmF0aW9uKS5zdWJzdGl0dXRlKE5vbmUsICoqaGFuZGxlcl9hcmdzKSkKKyAgICAgICAg
cmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZG9tYWluLmNvbmRpdGlv
biwgVGVtcGxhdGUoQ3BwVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVySGVhZGVyRG9tYWluRGlz
cGF0Y2hlckRlY2xhcmF0aW9uKS5zdWJzdGl0dXRlKE5vbmUsICoqaGFuZGxlcl9hcmdzKSkKIAog
ICAgIGRlZiBfZ2VuZXJhdGVfZGlzcGF0Y2hlcl9kZWNsYXJhdGlvbl9mb3JfY29tbWFuZChzZWxm
LCBjb21tYW5kKToKLSAgICAgICAgcmV0dXJuICIgICAgdm9pZCAlcyhsb25nIHJlcXVlc3RJZCwg
UmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsiICUgY29tbWFuZC5jb21tYW5kX25h
bWUKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oY29t
bWFuZC5jb25kaXRpb24sICIgICAgdm9pZCAlcyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046
Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsiICUgY29tbWFuZC5jb21tYW5kX25hbWUpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5IGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tl
bmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQppbmRleCBhMTU5NjFhNjQ3NC4uZGFmMTlj
OTUwZmIgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24u
cHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQpAQCAtNjAs
NyArNjAsNyBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJh
dG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgICAgICBzZWNvbmRhcnlfaW5jbHVkZXMuYXBwZW5k
KCcnKQogICAgICAgICAgICAgc2Vjb25kYXJ5X2luY2x1ZGVzLmFwcGVuZCgnI2lmIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKScpCiAgICAgICAgICAgICBzZWNvbmRhcnlf
aW5jbHVkZXMuYXBwZW5kKCcjaW5jbHVkZSAiJXNBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMu
aCInICUgc2VsZi5wcm90b2NvbF9uYW1lKCkpCi0gICAgICAgICAgICBzZWNvbmRhcnlfaW5jbHVk
ZXMuYXBwZW5kKCcjZW5kaWYnKQorICAgICAgICAgICAgc2Vjb25kYXJ5X2luY2x1ZGVzLmFwcGVu
ZCgnI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKScpCiAK
ICAgICAgICAgaGVhZGVyX2FyZ3MgPSB7CiAgICAgICAgICAgICAncHJpbWFyeUluY2x1ZGUnOiAn
IiVzQmFja2VuZERpc3BhdGNoZXJzLmgiJyAlIHNlbGYucHJvdG9jb2xfbmFtZSgpLApAQCAtOTMs
NyArOTMsNyBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJh
dG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgICAgICAnZG9tYWluTmFtZSc6IGRvbWFpbi5kb21h
aW5fbmFtZQogICAgICAgICB9CiAgICAgICAgIGRlc3RydWN0b3IgPSAnJShkb21haW5OYW1lKXNC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On4lKGRvbWFpbk5hbWUpc0JhY2tlbmREaXNwYXRjaGVy
SGFuZGxlcigpIHsgfScgJSBkZXN0cnVjdG9yX2FyZ3MKLSAgICAgICAgcmV0dXJuIHNlbGYud3Jh
cF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCBkZXN0cnVjdG9yKQorICAgICAgICByZXR1
cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9uLCBk
ZXN0cnVjdG9yKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9u
c19mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6CiAgICAgICAgIGltcGxlbWVudGF0aW9ucyA9IFtd
CkBAIC0xMTUsMTcgKzExNSwyOSBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVu
dGF0aW9uR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgICAgICAgICAgaW1wbGVtZW50
YXRpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hc3luY19kaXNwYXRjaGVyX2NsYXNzX2Zvcl9k
b21haW4oY29tbWFuZCwgZG9tYWluKSkKICAgICAgICAgICAgIGltcGxlbWVudGF0aW9ucy5hcHBl
bmQoc2VsZi5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbl9mb3JfY29tbWFuZChj
b21tYW5kLCBkb21haW4pKQogCi0gICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9m
b3JfZG9tYWluKGRvbWFpbiwgJ1xuXG4nLmpvaW4oaW1wbGVtZW50YXRpb25zKSkKKyAgICAgICAg
cmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZG9tYWluLmNvbmRpdGlv
biwgJ1xuXG4nLmpvaW4oaW1wbGVtZW50YXRpb25zKSkKIAogICAgIGRlZiBfZ2VuZXJhdGVfc21h
bGxfZGlzcGF0Y2hlcl9zd2l0Y2hfaW1wbGVtZW50YXRpb25fZm9yX2RvbWFpbihzZWxmLCBkb21h
aW4pOgogICAgICAgICBjb21tYW5kcyA9IHNlbGYuY29tbWFuZHNfZm9yX2RvbWFpbihkb21haW4p
CiAKICAgICAgICAgY2FzZXMgPSBbXQotICAgICAgICBjYXNlcy5hcHBlbmQoJyAgICBpZiAobWV0
aG9kID09ICIlcyIpJyAlIGNvbW1hbmRzWzBdLmNvbW1hbmRfbmFtZSkKLSAgICAgICAgY2FzZXMu
YXBwZW5kKCcgICAgICAgICVzKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7JyAlIGNv
bW1hbmRzWzBdLmNvbW1hbmRfbmFtZSkKKworICAgICAgICBmaXJzdF9jb21tYW5kX3N0cmluZyA9
ICJcbiIuam9pbihbCisgICAgICAgICAgICAnICAgIGlmIChtZXRob2QgPT0gIiVzIikgeycgJSBj
b21tYW5kc1swXS5jb21tYW5kX25hbWUsCisgICAgICAgICAgICAnICAgICAgICAlcyhyZXF1ZXN0
SWQsIFdURk1vdmUocGFyYW1ldGVycykpOycgJSBjb21tYW5kc1swXS5jb21tYW5kX25hbWUsCisg
ICAgICAgICAgICAnICAgICAgICByZXR1cm47JywKKyAgICAgICAgICAgICcgICAgfScsCisgICAg
ICAgIF0pCisgICAgICAgIGNhc2VzLmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29u
ZGl0aW9uKGNvbW1hbmRzWzBdLmNvbmRpdGlvbiwgZmlyc3RfY29tbWFuZF9zdHJpbmcpKQorCiAg
ICAgICAgIGZvciBjb21tYW5kIGluIGNvbW1hbmRzWzE6XToKLSAgICAgICAgICAgIGNhc2VzLmFw
cGVuZCgnICAgIGVsc2UgaWYgKG1ldGhvZCA9PSAiJXMiKScgJSBjb21tYW5kLmNvbW1hbmRfbmFt
ZSkKLSAgICAgICAgICAgIGNhc2VzLmFwcGVuZCgnICAgICAgICAlcyhyZXF1ZXN0SWQsIFdURk1v
dmUocGFyYW1ldGVycykpOycgJSBjb21tYW5kLmNvbW1hbmRfbmFtZSkKKyAgICAgICAgICAgIGFk
ZGl0aW9uYWxfY29tbWFuZF9zdHJpbmcgPSAiXG4iLmpvaW4oWworICAgICAgICAgICAgICAgICcg
ICAgaWYgKG1ldGhvZCA9PSAiJXMiKSB7JyAlIGNvbW1hbmQuY29tbWFuZF9uYW1lLAorICAgICAg
ICAgICAgICAgICcgICAgICAgICVzKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7JyAl
IGNvbW1hbmQuY29tbWFuZF9uYW1lLAorICAgICAgICAgICAgICAgICcgICAgICAgIHJldHVybjsn
LAorICAgICAgICAgICAgICAgICcgICAgfScsCisgICAgICAgICAgICBdKQorICAgICAgICAgICAg
Y2FzZXMuYXBwZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oY29tbWFuZC5j
b25kaXRpb24sIGFkZGl0aW9uYWxfY29tbWFuZF9zdHJpbmcpKQogCiAgICAgICAgIHN3aXRjaF9h
cmdzID0gewogICAgICAgICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUsCkBA
IC0xNDMsNyArMTU1LDcgQEAgY2xhc3MgQ3BwQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlv
bkdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICAgICAgICAgICdkb21haW5OYW1lJzog
ZG9tYWluLmRvbWFpbl9uYW1lLAogICAgICAgICAgICAgICAgICdjb21tYW5kTmFtZSc6IGNvbW1h
bmQuY29tbWFuZF9uYW1lCiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlcy5hcHBlbmQo
JyAgICAgICAgICAgIHsgIiUoY29tbWFuZE5hbWUpcyIsICYlKGRvbWFpbk5hbWUpc0JhY2tlbmRE
aXNwYXRjaGVyOjolKGNvbW1hbmROYW1lKXMgfSwnICUgYXJncykKKyAgICAgICAgICAgIGNhc2Vz
LmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGNvbW1hbmQuY29uZGl0
aW9uLCAnICAgICAgICAgICAgeyAiJShjb21tYW5kTmFtZSlzIiwgJiUoZG9tYWluTmFtZSlzQmFj
a2VuZERpc3BhdGNoZXI6OiUoY29tbWFuZE5hbWUpcyB9LCcgJSBhcmdzKSkKIAogICAgICAgICBz
d2l0Y2hfYXJncyA9IHsKICAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9u
YW1lLApAQCAtMTg1LDcgKzE5Nyw3IEBAIGNsYXNzIENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVt
ZW50YXRpb25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgICAgICdmb3JtYWxQYXJh
bWV0ZXJzJzogIiwgIi5qb2luKGZvcm1hbF9wYXJhbWV0ZXJzKSwKICAgICAgICAgICAgICdvdXRQ
YXJhbWV0ZXJBc3NpZ25tZW50cyc6ICJcbiIuam9pbihvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRz
KQogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBUZW1wbGF0ZShDcHBUZW1wbGF0ZXMuQmFja2Vu
ZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkFzeW5jQ29tbWFuZCkuc3Vic3RpdHV0ZShOb25lLCAq
KmFzeW5jX2FyZ3MpCisgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29u
ZGl0aW9uKGNvbW1hbmQuY29uZGl0aW9uLCBUZW1wbGF0ZShDcHBUZW1wbGF0ZXMuQmFja2VuZERp
c3BhdGNoZXJJbXBsZW1lbnRhdGlvbkFzeW5jQ29tbWFuZCkuc3Vic3RpdHV0ZShOb25lLCAqKmFz
eW5jX2FyZ3MpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9u
X2Zvcl9jb21tYW5kKHNlbGYsIGNvbW1hbmQsIGRvbWFpbik6CiAgICAgICAgIGluX3BhcmFtZXRl
cl9kZWNsYXJhdGlvbnMgPSBbXQpAQCAtMzA0LDcgKzMxNiw3IEBAIGNsYXNzIENwcEJhY2tlbmRE
aXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPiUoY29tbWFu
ZE5hbWUpcyglKGFsdGVybmF0ZUludm9jYXRpb25QYXJhbWV0ZXJzKXMpOycgJSBjb21tYW5kX2Fy
Z3MpCiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgcmV0dXJuOycpCiAgICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoJyAgICB9JykKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnI2Vu
ZGlmJykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKScpCiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycp
CiAKICAgICAgICAgaWYgY29tbWFuZC5pc19hc3luYzoKQEAgLTMzNCw0ICszNDYsNCBAQCBjbGFz
cyBDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKENwcEdlbmVyYXRv
cik6CiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdU
Rk1vdmUoZXJyb3IpKTsnKQogCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnfScpCi0gICAgICAgIHJl
dHVybiAiXG4iLmpvaW4obGluZXMpCisgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFy
ZF9mb3JfY29uZGl0aW9uKGNvbW1hbmQuY29uZGl0aW9uLCAiXG4iLmpvaW4obGluZXMpKQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5k
X2Rpc3BhdGNoZXJfaGVhZGVyLnB5CmluZGV4IDVjZjc0Nzg1NDMzLi4xMTlkMjNjMzhjZCAxMDA3
NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9u
dGVuZF9kaXNwYXRjaGVyX2hlYWRlci5weQpAQCAtMTExLDcgKzExMSw3IEBAIGNsYXNzIENwcEZy
b250ZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICAg
ICAgJ2V2ZW50RGVjbGFyYXRpb25zJzogIlxuIi5qb2luKGV2ZW50X2RlY2xhcmF0aW9ucykKICAg
ICAgICAgfQogCi0gICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWlu
KGRvbWFpbiwgVGVtcGxhdGUoQ3BwVGVtcGxhdGVzLkZyb250ZW5kRGlzcGF0Y2hlckRvbWFpbkRp
c3BhdGNoZXJEZWNsYXJhdGlvbikuc3Vic3RpdHV0ZShOb25lLCAqKmhhbmRsZXJfYXJncykpCisg
ICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRvbWFpbi5j
b25kaXRpb24sIFRlbXBsYXRlKENwcFRlbXBsYXRlcy5Gcm9udGVuZERpc3BhdGNoZXJEb21haW5E
aXNwYXRjaGVyRGVjbGFyYXRpb24pLnN1YnN0aXR1dGUoTm9uZSwgKipoYW5kbGVyX2FyZ3MpKQog
CiAgICAgZGVmIF9nZW5lcmF0ZV9kaXNwYXRjaGVyX2RlY2xhcmF0aW9uX2Zvcl9ldmVudChzZWxm
LCBldmVudCwgZG9tYWluLCB1c2VkX2VudW1fbmFtZXMpOgogICAgICAgICBmb3JtYWxfcGFyYW1l
dGVycyA9IFtdCkBAIC0xMjMsNCArMTIzLDQgQEAgY2xhc3MgQ3BwRnJvbnRlbmREaXNwYXRjaGVy
SGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgICAgICAgICAgdXNlZF9lbnVt
X25hbWVzLmFkZChwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpCiAKICAgICAgICAgbGluZXMuYXBw
ZW5kKCIgICAgdm9pZCAlcyglcyk7IiAlIChldmVudC5ldmVudF9uYW1lLCAiLCAiLmpvaW4oZm9y
bWFsX3BhcmFtZXRlcnMpKSkKLSAgICAgICAgcmV0dXJuICJcbiIuam9pbihsaW5lcykKKyAgICAg
ICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZXZlbnQuY29uZGl0
aW9uLCAiXG4iLmpvaW4obGluZXMpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNo
ZXJfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRh
dGlvbi5weQppbmRleCA5MDRkMjI3YTZlOS4uNjZkYzZlMTg1Y2YgMTAwNzU1Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9m
cm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9k
aXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CkBAIC04Miw3ICs4Miw3IEBAIGNsYXNzIENwcEZy
b250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAg
ICAgICAgIGZvciBldmVudCBpbiBldmVudHM6CiAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbnMu
YXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25fZm9yX2V2ZW50
KGV2ZW50LCBkb21haW4pKQogCi0gICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9m
b3JfZG9tYWluKGRvbWFpbiwgJ1xuXG4nLmpvaW4oaW1wbGVtZW50YXRpb25zKSkKKyAgICAgICAg
cmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZG9tYWluLmNvbmRpdGlv
biwgJ1xuXG4nLmpvaW4oaW1wbGVtZW50YXRpb25zKSkKIAogICAgIGRlZiBfZ2VuZXJhdGVfZGlz
cGF0Y2hlcl9pbXBsZW1lbnRhdGlvbl9mb3JfZXZlbnQoc2VsZiwgZXZlbnQsIGRvbWFpbik6CiAg
ICAgICAgIGxpbmVzID0gW10KQEAgLTEzMSw0ICsxMzEsNCBAQCBjbGFzcyBDcHBGcm9udGVuZERp
c3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICBs
aW5lcy5hcHBlbmQoJycpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIG1fZnJvbnRlbmRSb3V0
ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7JykKICAgICAgICAgbGlu
ZXMuYXBwZW5kKCd9JykKLSAgICAgICAgcmV0dXJuICJcbiIuam9pbihsaW5lcykKKyAgICAgICAg
cmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZXZlbnQuY29uZGl0aW9u
LCAiXG4iLmpvaW4obGluZXMpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2hlYWRl
ci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dl
bmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19oZWFkZXIucHkKaW5kZXggNDIzZDdhMjMwMDguLjk5
ZjYwMWE3ZDkyIDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaGVhZGVyLnB5CisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X2NwcF9wcm90b2NvbF90eXBlc19oZWFkZXIucHkKQEAgLTEwNSw3ICsxMDUsNyBAQCBjbGFzcyBD
cHBQcm90b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgICAg
ICAgICAgZG9tYWluX2xpbmVzLmFwcGVuZCgnc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBWRVJT
SU9OID0gJXM7JyAlIHZlcnNpb24pCiAKICAgICAgICAgICAgIGRvbWFpbl9saW5lcy5hcHBlbmQo
J30gLy8gJXMnICUgZG9tYWluLmRvbWFpbl9uYW1lKQotICAgICAgICAgICAgc2VjdGlvbnMuYXBw
ZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCAnXG4nLmpvaW4oZG9t
YWluX2xpbmVzKSkpCisgICAgICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi53cmFwX3dpdGhf
Z3VhcmRfZm9yX2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9uLCAnXG4nLmpvaW4oZG9tYWluX2xp
bmVzKSkpCiAKICAgICAgICAgaWYgbGVuKHNlY3Rpb25zKSA9PSAwOgogICAgICAgICAgICAgcmV0
dXJuICcnCkBAIC0xMzIsMTAgKzEzMiwxMCBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVzSGVhZGVy
R2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgICAgICBkb21haW5fbGluZXMuYXBwZW5k
KCduYW1lc3BhY2UgJXMgeycgJSBkb21haW4uZG9tYWluX25hbWUpCiAKICAgICAgICAgICAgICMg
Rm9yd2FyZC1kZWNsYXJlIGFsbCBjbGFzc2VzIHNvIHRoZSB0eXBlIGJ1aWxkZXJzIHdvbid0IGJy
ZWFrIGlmIHJlYXJyYW5nZWQuCi0gICAgICAgICAgICBkb21haW5fbGluZXMuZXh0ZW5kKCdjbGFz
cyAlczsnICUgb2JqZWN0X3R5cGUucmF3X25hbWUoKSBmb3Igb2JqZWN0X3R5cGUgaW4gb2JqZWN0
X3R5cGVzKQotICAgICAgICAgICAgZG9tYWluX2xpbmVzLmV4dGVuZCgnZW51bSBjbGFzcyAlczsn
ICUgZW51bV90eXBlLnJhd19uYW1lKCkgZm9yIGVudW1fdHlwZSBpbiBlbnVtX3R5cGVzKQorICAg
ICAgICAgICAgZG9tYWluX2xpbmVzLmV4dGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29u
ZGl0aW9uKG9iamVjdF90eXBlLmRlY2xhcmF0aW9uKCkuY29uZGl0aW9uLCAnY2xhc3MgJXM7JyAl
IG9iamVjdF90eXBlLnJhd19uYW1lKCkpIGZvciBvYmplY3RfdHlwZSBpbiBvYmplY3RfdHlwZXMp
CisgICAgICAgICAgICBkb21haW5fbGluZXMuZXh0ZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zv
cl9jb25kaXRpb24oZW51bV90eXBlLmRlY2xhcmF0aW9uKCkuY29uZGl0aW9uLCAnZW51bSBjbGFz
cyAlczsnICUgZW51bV90eXBlLnJhd19uYW1lKCkpIGZvciBlbnVtX3R5cGUgaW4gZW51bV90eXBl
cykKICAgICAgICAgICAgIGRvbWFpbl9saW5lcy5hcHBlbmQoJ30gLy8gJXMnICUgZG9tYWluLmRv
bWFpbl9uYW1lKQotICAgICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYud3JhcF93aXRoX2d1
YXJkX2Zvcl9kb21haW4oZG9tYWluLCAnXG4nLmpvaW4oZG9tYWluX2xpbmVzKSkpCisgICAgICAg
ICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihk
b21haW4uY29uZGl0aW9uLCAnXG4nLmpvaW4oZG9tYWluX2xpbmVzKSkpCiAKICAgICAgICAgaWYg
bGVuKHNlY3Rpb25zKSA9PSAwOgogICAgICAgICAgICAgcmV0dXJuICcnCkBAIC0xNzAsNyArMTcw
LDcgQEAgY2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0hlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3Ip
OgogICAgICAgICAgICAgaWYgbGVuKGRlY2xhcmF0aW9uLmRlc2NyaXB0aW9uKSA+IDA6CiAgICAg
ICAgICAgICAgICAgdHlwZWRlZl9saW5lcy5hcHBlbmQoJy8qICVzICovJyAlIGRlY2xhcmF0aW9u
LmRlc2NyaXB0aW9uKQogICAgICAgICAgICAgdHlwZWRlZl9saW5lcy5hcHBlbmQoJ3R5cGVkZWYg
JXMgJXM7JyAlIChwcmltaXRpdmVfbmFtZSwgZGVjbGFyYXRpb24udHlwZV9uYW1lKSkKLSAgICAg
ICAgICAgIHNlY3Rpb25zLmFwcGVuZCgnXG4nLmpvaW4odHlwZWRlZl9saW5lcykpCisgICAgICAg
ICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihk
ZWNsYXJhdGlvbi5jb25kaXRpb24sICdcbicuam9pbih0eXBlZGVmX2xpbmVzKSkpCiAKICAgICAg
ICAgZm9yIGRlY2xhcmF0aW9uIGluIGFycmF5X2RlY2xhcmF0aW9uczoKICAgICAgICAgICAgIGVs
ZW1lbnRfdHlwZSA9IENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShkZWNs
YXJhdGlvbi50eXBlLmVsZW1lbnRfdHlwZSkKQEAgLTE3OCwxMyArMTc4LDEzIEBAIGNsYXNzIENw
cFByb3RvY29sVHlwZXNIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgICAg
IGlmIGxlbihkZWNsYXJhdGlvbi5kZXNjcmlwdGlvbikgPiAwOgogICAgICAgICAgICAgICAgIHR5
cGVkZWZfbGluZXMuYXBwZW5kKCcvKiAlcyAqLycgJSBkZWNsYXJhdGlvbi5kZXNjcmlwdGlvbikK
ICAgICAgICAgICAgIHR5cGVkZWZfbGluZXMuYXBwZW5kKCd0eXBlZGVmIEpTT046OkFycmF5T2Y8
JXM+ICVzOycgJSAoZWxlbWVudF90eXBlLCBkZWNsYXJhdGlvbi50eXBlX25hbWUpKQotICAgICAg
ICAgICAgc2VjdGlvbnMuYXBwZW5kKCdcbicuam9pbih0eXBlZGVmX2xpbmVzKSkKKyAgICAgICAg
ICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRl
Y2xhcmF0aW9uLmNvbmRpdGlvbiwgJ1xuJy5qb2luKHR5cGVkZWZfbGluZXMpKSkKIAogICAgICAg
ICBsaW5lcyA9IFtdCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnbmFtZXNwYWNlICVzIHsnICUgZG9t
YWluLmRvbWFpbl9uYW1lKQogICAgICAgICBsaW5lcy5hcHBlbmQoJ1xuJy5qb2luKHNlY3Rpb25z
KSkKICAgICAgICAgbGluZXMuYXBwZW5kKCd9IC8vICVzJyAlIGRvbWFpbi5kb21haW5fbmFtZSkK
LSAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCAn
XG4nLmpvaW4obGluZXMpKQorICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9y
X2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9uLCAnXG4nLmpvaW4obGluZXMpKQogCiAgICAgZGVm
IF9nZW5lcmF0ZV9lbnVtX2NvbnN0YW50X3ZhbHVlX2NvbnZlcnNpb25fbWV0aG9kcyhzZWxmKToK
ICAgICAgICAgaWYgbm90IHNlbGYuYXNzaWduZWRfZW51bV92YWx1ZXMoKToKQEAgLTIyNSw5ICsy
MjUsMTEgQEAgY2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0hlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0
b3IpOgogCiAgICAgICAgIGxpbmVzID0gW10KICAgICAgICAgbGluZXMuYXBwZW5kKCduYW1lc3Bh
Y2UgJXMgeycgJSBkb21haW4uZG9tYWluX25hbWUpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnXG4n
LmpvaW4oc2VjdGlvbnMpKQorICAgICAgICBsaW5lcy5hcHBlbmQoJycpCisgICAgICAgIGxpbmVz
LmFwcGVuZCgnXG5cbicuam9pbihzZWN0aW9ucykpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnJykK
ICAgICAgICAgbGluZXMuYXBwZW5kKCd9IC8vICVzJyAlIGRvbWFpbi5kb21haW5fbmFtZSkKLSAg
ICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCAnXG4n
LmpvaW4obGluZXMpKQorICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2Nv
bmRpdGlvbihkb21haW4uY29uZGl0aW9uLCAnXG4nLmpvaW4obGluZXMpKQogCiAgICAgZGVmIF9n
ZW5lcmF0ZV9jbGFzc19mb3Jfb2JqZWN0X2RlY2xhcmF0aW9uKHNlbGYsIHR5cGVfZGVjbGFyYXRp
b24sIGRvbWFpbik6CiAgICAgICAgIGlmIGxlbih0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVy
cykgPT0gMDoKQEAgLTI3OCwxNCArMjgwLDE0IEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNIZWFk
ZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQo
JyAgICAlcyBzdGF0aWMgY29uc3QgY2hhciogJXM7JyAlIChleHBvcnRfbWFjcm8sIHVjZmlyc3Qo
dHlwZV9tZW1iZXIubWVtYmVyX25hbWUpKSkKIAogICAgICAgICBsaW5lcy5hcHBlbmQoJ307JykK
LSAgICAgICAgbGluZXMuYXBwZW5kKCcnKQotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVz
KQorICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbih0eXBl
X2RlY2xhcmF0aW9uLmNvbmRpdGlvbiwgJ1xuJy5qb2luKGxpbmVzKSkKIAogICAgIGRlZiBfZ2Vu
ZXJhdGVfc3RydWN0X2Zvcl9lbnVtX2RlY2xhcmF0aW9uKHNlbGYsIGVudW1fZGVjbGFyYXRpb24p
OgogICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnLyogJXMgKi8nICUg
ZW51bV9kZWNsYXJhdGlvbi5kZXNjcmlwdGlvbikKKyAgICAgICAgaWYgbGVuKGVudW1fZGVjbGFy
YXRpb24uZGVzY3JpcHRpb24pOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcvKiAlcyAqLycg
JSBlbnVtX2RlY2xhcmF0aW9uLmRlc2NyaXB0aW9uKQogICAgICAgICBsaW5lcy5leHRlbmQoc2Vs
Zi5fZ2VuZXJhdGVfc3RydWN0X2Zvcl9lbnVtX3R5cGUoZW51bV9kZWNsYXJhdGlvbi50eXBlX25h
bWUsIGVudW1fZGVjbGFyYXRpb24udHlwZSkpCi0gICAgICAgIHJldHVybiAnXG4nLmpvaW4obGlu
ZXMpCisgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGVu
dW1fZGVjbGFyYXRpb24uY29uZGl0aW9uLCAnXG4nLmpvaW4obGluZXMpKQogCiAgICAgZGVmIF9n
ZW5lcmF0ZV9zdHJ1Y3RfZm9yX2Fub255bW91c19lbnVtX21lbWJlcihzZWxmLCBlbnVtX21lbWJl
cik6CiAgICAgICAgIGRlZiBhcHBseV9pbmRlbnRhdGlvbihsaW5lKToKQEAgLTM4MSwxMCArMzgz
LDEwIEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9y
KToKICAgICAgICAgICAgIGZvciB0eXBlX2RlY2xhcmF0aW9uIGluIGRlY2xhcmF0aW9uc190b19n
ZW5lcmF0ZToKICAgICAgICAgICAgICAgICBmb3IgdHlwZV9tZW1iZXIgaW4gdHlwZV9kZWNsYXJh
dGlvbi50eXBlX21lbWJlcnM6CiAgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodHlw
ZV9tZW1iZXIudHlwZSwgRW51bVR5cGUpOgotICAgICAgICAgICAgICAgICAgICAgICAgdHlwZV9h
cmd1bWVudHMuYXBwZW5kKChDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGVf
bWVtYmVyKHR5cGVfbWVtYmVyLCB0eXBlX2RlY2xhcmF0aW9uKSwgRmFsc2UpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgdHlwZV9hcmd1bWVudHMuYXBwZW5kKChzZWxmLndyYXBfd2l0aF9ndWFy
ZF9mb3JfY29uZGl0aW9uKHR5cGVfZGVjbGFyYXRpb24uY29uZGl0aW9uLCBDcHBHZW5lcmF0b3Iu
Y3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGVfbWVtYmVyKHR5cGVfbWVtYmVyLCB0eXBlX2RlY2xh
cmF0aW9uKSksIEZhbHNlKSkKIAogICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodHlwZV9k
ZWNsYXJhdGlvbi50eXBlLCBPYmplY3RUeXBlKToKLSAgICAgICAgICAgICAgICAgICAgdHlwZV9h
cmd1bWVudHMuYXBwZW5kKChDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGUo
dHlwZV9kZWNsYXJhdGlvbi50eXBlKSwgR2VuZXJhdG9yLnR5cGVfbmVlZHNfcnVudGltZV9jYXN0
cyh0eXBlX2RlY2xhcmF0aW9uLnR5cGUpKSkKKyAgICAgICAgICAgICAgICAgICAgdHlwZV9hcmd1
bWVudHMuYXBwZW5kKChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKHR5cGVfZGVj
bGFyYXRpb24uY29uZGl0aW9uLCBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5
cGUodHlwZV9kZWNsYXJhdGlvbi50eXBlKSksIEdlbmVyYXRvci50eXBlX25lZWRzX3J1bnRpbWVf
Y2FzdHModHlwZV9kZWNsYXJhdGlvbi50eXBlKSkpCiAKICAgICAgICAgc3RydWN0X2tleXdvcmRz
ID0gWydzdHJ1Y3QnXQogICAgICAgICBmdW5jdGlvbl9rZXl3b3JkcyA9IFsnc3RhdGljIHZvaWQn
XQpAQCAtNDM3LDE5ICs0MzksMjAgQEAgY2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0hlYWRlckdlbmVy
YXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICAgICAgZG9tYWluX2xpbmVzLmFwcGVuZCgiLy8g
RW51bXMgaW4gdGhlICclcycgRG9tYWluIiAlIGRvbWFpbi5kb21haW5fbmFtZSkKICAgICAgICAg
ICAgIGZvciBlbnVtX3R5cGUgaW4gZW51bV90eXBlczoKICAgICAgICAgICAgICAgICBjcHBfcHJv
dG9jb2xfdHlwZSA9IENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShlbnVt
X3R5cGUpCi0gICAgICAgICAgICAgICAgZG9tYWluX2xpbmVzLmFwcGVuZCgndGVtcGxhdGU8Picp
Ci0gICAgICAgICAgICAgICAgZG9tYWluX2xpbmVzLmFwcGVuZCgnJXMgcGFyc2VFbnVtVmFsdWVG
cm9tU3RyaW5nPCVzPihjb25zdCBTdHJpbmcmKTsnICUgKHJldHVybl90eXBlX3dpdGhfZXhwb3J0
X21hY3JvKGNwcF9wcm90b2NvbF90eXBlKSwgY3BwX3Byb3RvY29sX3R5cGUpKQorICAgICAgICAg
ICAgICAgIGRvbWFpbl9saW5lcy5hcHBlbmQoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRp
dGlvbihlbnVtX3R5cGUuZGVjbGFyYXRpb24oKS5jb25kaXRpb24sICd0ZW1wbGF0ZTw+XG4lcyBw
YXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8JXM+KGNvbnN0IFN0cmluZyYpOycgJSAocmV0dXJuX3R5
cGVfd2l0aF9leHBvcnRfbWFjcm8oY3BwX3Byb3RvY29sX3R5cGUpLCBjcHBfcHJvdG9jb2xfdHlw
ZSkpKQogCiAgICAgICAgICAgICBmb3Igb2JqZWN0X3R5cGUgaW4gb2JqZWN0X3R5cGVzOgorICAg
ICAgICAgICAgICAgIG9iamVjdF9saW5lcyA9IFtdCiAgICAgICAgICAgICAgICAgZm9yIGVudW1f
bWVtYmVyIGluIGZpbHRlcih0eXBlX21lbWJlcl9pc19hbm9ueW1vdXNfZW51bV90eXBlLCBvYmpl
Y3RfdHlwZS5tZW1iZXJzKToKICAgICAgICAgICAgICAgICAgICAgY3BwX3Byb3RvY29sX3R5cGUg
PSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGVfbWVtYmVyKGVudW1fbWVt
YmVyLCBvYmplY3RfdHlwZS5kZWNsYXJhdGlvbigpKQotICAgICAgICAgICAgICAgICAgICBkb21h
aW5fbGluZXMuYXBwZW5kKCd0ZW1wbGF0ZTw+JykKLSAgICAgICAgICAgICAgICAgICAgZG9tYWlu
X2xpbmVzLmFwcGVuZCgnJXMgcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPCVzPihjb25zdCBTdHJp
bmcmKTsnICUgKHJldHVybl90eXBlX3dpdGhfZXhwb3J0X21hY3JvKGNwcF9wcm90b2NvbF90eXBl
KSwgY3BwX3Byb3RvY29sX3R5cGUpKQorICAgICAgICAgICAgICAgICAgICBvYmplY3RfbGluZXMu
YXBwZW5kKCd0ZW1wbGF0ZTw+XG4lcyBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8JXM+KGNvbnN0
IFN0cmluZyYpOycgJSAocmV0dXJuX3R5cGVfd2l0aF9leHBvcnRfbWFjcm8oY3BwX3Byb3RvY29s
X3R5cGUpLCBjcHBfcHJvdG9jb2xfdHlwZSkpCisgICAgICAgICAgICAgICAgaWYgbGVuKG9iamVj
dF9saW5lcyk6CisgICAgICAgICAgICAgICAgICAgIGRvbWFpbl9saW5lcy5hcHBlbmQoc2VsZi53
cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihvYmplY3RfdHlwZS5kZWNsYXJhdGlvbigpLmNv
bmRpdGlvbiwgJ1xuJy5qb2luKG9iamVjdF9saW5lcykpKQogCiAgICAgICAgICAgICBpZiBsZW4o
ZG9tYWluX2xpbmVzKSA9PSAxOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlICAjIE5vIHJlYWwg
ZGVjbGFyYXRpb25zIHRvIGVtaXQsIGp1c3QgdGhlIGRvbWFpbiBjb21tZW50LiBTa2lwLgogCi0g
ICAgICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFp
bihkb21haW4sICdcbicuam9pbihkb21haW5fbGluZXMpKSkKKyAgICAgICAgICAgIHNlY3Rpb25z
LmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRvbWFpbi5jb25kaXRp
b24sICdcbicuam9pbihkb21haW5fbGluZXMpKSkKIAogICAgICAgICBpZiBsZW4oc2VjdGlvbnMp
ID09IDE6CiAgICAgICAgICAgICByZXR1cm4gW10gIyBObyByZWFsIHNlY3Rpb25zIHRvIGVtaXQs
IGp1c3QgdGhlIG5hbWVzcGFjZSBhbmQgdGVtcGxhdGUgZGVjbGFyYXRpb24uIFNraXAuCkBAIC00
NzQsMTQgKzQ3NywyMCBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9yKENw
cEdlbmVyYXRvcik6CiAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQogICAgICAgICAg
ICAgICAgIGxpbmVzLmFwcGVuZCgndGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRI
YXNoOycpCiAKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKLSAgICAgICAgICAgIGxpbmVz
LmFwcGVuZCgiLy8gSGFzaCBkZWNsYXJhdGlvbnMgaW4gdGhlICclcycgRG9tYWluIiAlIGRvbWFp
bi5kb21haW5fbmFtZSkKKyAgICAgICAgICAgIGRvbWFpbl9saW5lcyA9IFtdCisKKyAgICAgICAg
ICAgIGRvbWFpbl9saW5lcy5hcHBlbmQoJycpCisgICAgICAgICAgICBkb21haW5fbGluZXMuYXBw
ZW5kKCIvLyBIYXNoIGRlY2xhcmF0aW9ucyBpbiB0aGUgJyVzJyBEb21haW4iICUgZG9tYWluLmRv
bWFpbl9uYW1lKQogCiAgICAgICAgICAgICBmb3IgZW51bV90eXBlIGluIGVudW1fdHlwZXM6Ci0g
ICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCd0ZW1wbGF0ZTw+JykKLSAgICAgICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoJ3N0cnVjdCBEZWZhdWx0SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjol
czo6JXM+IHsnICUgKGRvbWFpbi5kb21haW5fbmFtZSwgZW51bV90eXBlLnJhd19uYW1lKCkpKQot
ICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHR5cGVkZWYgSW50SGFzaDxJbnNwZWN0
b3I6OlByb3RvY29sOjolczo6JXM+IEhhc2g7JyAlIChkb21haW4uZG9tYWluX25hbWUsIGVudW1f
dHlwZS5yYXdfbmFtZSgpKSkKLSAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ307JykKKyAg
ICAgICAgICAgICAgICBlbnVtX2xpbmVzID0gW10KKyAgICAgICAgICAgICAgICBlbnVtX2xpbmVz
LmFwcGVuZCgndGVtcGxhdGU8PicpCisgICAgICAgICAgICAgICAgZW51bV9saW5lcy5hcHBlbmQo
J3N0cnVjdCBEZWZhdWx0SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjolczo6JXM+IHsnICUgKGRv
bWFpbi5kb21haW5fbmFtZSwgZW51bV90eXBlLnJhd19uYW1lKCkpKQorICAgICAgICAgICAgICAg
IGVudW1fbGluZXMuYXBwZW5kKCcgICAgdHlwZWRlZiBJbnRIYXNoPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OiVzOjolcz4gSGFzaDsnICUgKGRvbWFpbi5kb21haW5fbmFtZSwgZW51bV90eXBlLnJhd19u
YW1lKCkpKQorICAgICAgICAgICAgICAgIGVudW1fbGluZXMuYXBwZW5kKCd9OycpCisgICAgICAg
ICAgICAgICAgZG9tYWluX2xpbmVzLmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29u
ZGl0aW9uKGVudW1fdHlwZS5kZWNsYXJhdGlvbigpLmNvbmRpdGlvbiwgJ1xuJy5qb2luKGVudW1f
bGluZXMpKSkKKworICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYud3JhcF93aXRoX2d1YXJk
X2Zvcl9jb25kaXRpb24oZG9tYWluLmNvbmRpdGlvbiwgJ1xuJy5qb2luKGRvbWFpbl9saW5lcykp
KQogCiAgICAgICAgIGlmIGxlbihsaW5lcykgPT0gMDoKICAgICAgICAgICAgIHJldHVybiBbXQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVn
ZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5IGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3By
b3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5CmluZGV4IDY1Y2ViZjU4M2VlLi40ZDg1YWZi
OTMxYSAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5Cisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRlX2NwcF9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weQpAQCAtMTI4LDkgKzEyOCw4
IEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihDcHBHZW5l
cmF0b3IpOgogICAgICAgICAgICAgICAgICcnLAogICAgICAgICAgICAgICAgICcgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsnLAogICAgICAgICAgICAgICAgICd9JywKLSAgICAgICAgICAgICAgICAn
JywKICAgICAgICAgICAgIF0pCi0gICAgICAgICAgICByZXR1cm4gYm9keV9saW5lcworICAgICAg
ICAgICAgcmV0dXJuICdcbicuam9pbihib2R5X2xpbmVzKQogCiAgICAgICAgIHR5cGVfZGVjbGFy
YXRpb25zID0gc2VsZi50eXBlX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluKGRvbWFpbikKICAgICAg
ICAgZGVjbGFyYXRpb25fdHlwZXMgPSBbZGVjbC50eXBlIGZvciBkZWNsIGluIHR5cGVfZGVjbGFy
YXRpb25zXQpAQCAtMTQ2LDE3ICsxNDUsMjMgQEAgY2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0ltcGxl
bWVudGF0aW9uR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgIGxpbmVzLmFwcGVuZCgi
Ly8gRW51bXMgaW4gdGhlICclcycgRG9tYWluIiAlIGRvbWFpbi5kb21haW5fbmFtZSkKICAgICAg
ICAgZm9yIGVudW1fdHlwZSBpbiBlbnVtX3R5cGVzOgogICAgICAgICAgICAgY3BwX3Byb3RvY29s
X3R5cGUgPSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGUoZW51bV90eXBl
KQotICAgICAgICAgICAgbGluZXMuZXh0ZW5kKGdlbmVyYXRlX2NvbnZlcnNpb25fbWV0aG9kX2Jv
ZHkoZW51bV90eXBlLCBjcHBfcHJvdG9jb2xfdHlwZSkpCisgICAgICAgICAgICBsaW5lcy5hcHBl
bmQoJycpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9y
X2NvbmRpdGlvbihlbnVtX3R5cGUuZGVjbGFyYXRpb24oKS5jb25kaXRpb24sIGdlbmVyYXRlX2Nv
bnZlcnNpb25fbWV0aG9kX2JvZHkoZW51bV90eXBlLCBjcHBfcHJvdG9jb2xfdHlwZSkpKQogCiAg
ICAgICAgIGZvciBvYmplY3RfdHlwZSBpbiBvYmplY3RfdHlwZXM6CisgICAgICAgICAgICBvYmpl
Y3RfbGluZXMgPSBbXQogICAgICAgICAgICAgZm9yIGVudW1fbWVtYmVyIGluIGZpbHRlcih0eXBl
X21lbWJlcl9pc19hbm9ueW1vdXNfZW51bV90eXBlLCBvYmplY3RfdHlwZS5tZW1iZXJzKToKICAg
ICAgICAgICAgICAgICBjcHBfcHJvdG9jb2xfdHlwZSA9IENwcEdlbmVyYXRvci5jcHBfcHJvdG9j
b2xfdHlwZV9mb3JfdHlwZV9tZW1iZXIoZW51bV9tZW1iZXIsIG9iamVjdF90eXBlLmRlY2xhcmF0
aW9uKCkpCi0gICAgICAgICAgICAgICAgbGluZXMuZXh0ZW5kKGdlbmVyYXRlX2NvbnZlcnNpb25f
bWV0aG9kX2JvZHkoZW51bV9tZW1iZXIudHlwZSwgY3BwX3Byb3RvY29sX3R5cGUpKQorICAgICAg
ICAgICAgICAgIG9iamVjdF9saW5lcy5hcHBlbmQoZ2VuZXJhdGVfY29udmVyc2lvbl9tZXRob2Rf
Ym9keShlbnVtX21lbWJlci50eXBlLCBjcHBfcHJvdG9jb2xfdHlwZSkpCisgICAgICAgICAgICBp
ZiBsZW4ob2JqZWN0X2xpbmVzKToKKyAgICAgICAgICAgICAgICBpZiBsZW4obGluZXMpOgorICAg
ICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycpCisgICAgICAgICAgICAgICAgbGluZXMu
YXBwZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24ob2JqZWN0X3R5cGUuZGVj
bGFyYXRpb24oKS5jb25kaXRpb24sICdcbicuam9pbihvYmplY3RfbGluZXMpKSkKIAogICAgICAg
ICBpZiBsZW4obGluZXMpID09IDE6CiAgICAgICAgICAgICByZXR1cm4gJycgICMgTm8gcmVhbCBk
ZWNsYXJhdGlvbnMgdG8gZW1pdCwganVzdCB0aGUgZG9tYWluIGNvbW1lbnQuCiAKLSAgICAgICAg
cmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCAnXG4nLmpvaW4o
bGluZXMpKQorICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlv
bihkb21haW4uY29uZGl0aW9uLCAnXG4nLmpvaW4obGluZXMpKQogCiAgICAgZGVmIF9nZW5lcmF0
ZV9lbnVtX21hcHBpbmdfYW5kX2NvbnZlcnNpb25fbWV0aG9kcyhzZWxmLCBkb21haW5zKToKICAg
ICAgICAgc2VjdGlvbnMgPSBbXQpAQCAtMTczLDEyICsxNzgsMTUgQEAgY2xhc3MgQ3BwUHJvdG9j
b2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgZGVmIF9n
ZW5lcmF0ZV9vcGVuX2ZpZWxkX25hbWVzKHNlbGYpOgogICAgICAgICBsaW5lcyA9IFtdCiAgICAg
ICAgIGZvciBkb21haW4gaW4gc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCk6CisgICAgICAgICAg
ICBkb21haW5fbGluZXMgPSBbXQogICAgICAgICAgICAgdHlwZV9kZWNsYXJhdGlvbnMgPSBzZWxm
LnR5cGVfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4oZG9tYWluKQogICAgICAgICAgICAgZm9yIHR5
cGVfZGVjbGFyYXRpb24gaW4gW2RlY2wgZm9yIGRlY2wgaW4gdHlwZV9kZWNsYXJhdGlvbnMgaWYg
R2VuZXJhdG9yLnR5cGVfaGFzX29wZW5fZmllbGRzKGRlY2wudHlwZSldOgogICAgICAgICAgICAg
ICAgIG9wZW5fbWVtYmVycyA9IEdlbmVyYXRvci5vcGVuX2ZpZWxkcyh0eXBlX2RlY2xhcmF0aW9u
KQogICAgICAgICAgICAgICAgIGZvciB0eXBlX21lbWJlciBpbiBzb3J0ZWQob3Blbl9tZW1iZXJz
LCBrZXk9bGFtYmRhIG1lbWJlcjogbWVtYmVyLm1lbWJlcl9uYW1lKToKICAgICAgICAgICAgICAg
ICAgICAgZmllbGRfbmFtZSA9ICc6Oicuam9pbihbJ0luc3BlY3RvcicsICdQcm90b2NvbCcsIGRv
bWFpbi5kb21haW5fbmFtZSwgdWNmaXJzdCh0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbmFtZSksIHVj
Zmlyc3QodHlwZV9tZW1iZXIubWVtYmVyX25hbWUpXSkKLSAgICAgICAgICAgICAgICAgICAgbGlu
ZXMuYXBwZW5kKCdjb25zdCBjaGFyKiAlcyA9ICIlcyI7JyAlIChmaWVsZF9uYW1lLCB0eXBlX21l
bWJlci5tZW1iZXJfbmFtZSkpCisgICAgICAgICAgICAgICAgICAgIGRvbWFpbl9saW5lcy5hcHBl
bmQoJ2NvbnN0IGNoYXIqICVzID0gIiVzIjsnICUgKGZpZWxkX25hbWUsIHR5cGVfbWVtYmVyLm1l
bWJlcl9uYW1lKSkKKyAgICAgICAgICAgIGlmIGxlbihkb21haW5fbGluZXMpOgorICAgICAgICAg
ICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRv
bWFpbi5jb25kaXRpb24sICdcbicuam9pbihkb21haW5fbGluZXMpKSkKIAogICAgICAgICByZXR1
cm4gJ1xuJy5qb2luKGxpbmVzKQogCkBAIC0xODgsMTYgKzE5NiwyMiBAQCBjbGFzcyBDcHBQcm90
b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAg
ZGVjbGFyYXRpb25zX3RvX2dlbmVyYXRlID0gW2RlY2wgZm9yIGRlY2wgaW4gdHlwZV9kZWNsYXJh
dGlvbnMgaWYgc2VsZi50eXBlX25lZWRzX3NoYXBlX2Fzc2VydGlvbnMoZGVjbC50eXBlKV0KIAog
ICAgICAgICBmb3IgdHlwZV9kZWNsYXJhdGlvbiBpbiBkZWNsYXJhdGlvbnNfdG9fZ2VuZXJhdGU6
CisgICAgICAgICAgICB0eXBlX2xpbmVzID0gW10KICAgICAgICAgICAgIGZvciB0eXBlX21lbWJl
ciBpbiB0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVyczoKICAgICAgICAgICAgICAgICBpZiBp
c2luc3RhbmNlKHR5cGVfbWVtYmVyLnR5cGUsIEVudW1UeXBlKToKLSAgICAgICAgICAgICAgICAg
ICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fzc2VydGlvbl9mb3JfZW51bSh0eXBl
X21lbWJlciwgdHlwZV9kZWNsYXJhdGlvbikpCisgICAgICAgICAgICAgICAgICAgIHR5cGVfbGlu
ZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fzc2VydGlvbl9mb3JfZW51bSh0eXBlX21lbWJlciwg
dHlwZV9kZWNsYXJhdGlvbikpCiAKICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodHlwZV9kZWNs
YXJhdGlvbi50eXBlLCBPYmplY3RUeXBlKToKLSAgICAgICAgICAgICAgICBzZWN0aW9ucy5hcHBl
bmQoc2VsZi5fZ2VuZXJhdGVfYXNzZXJ0aW9uX2Zvcl9vYmplY3RfZGVjbGFyYXRpb24odHlwZV9k
ZWNsYXJhdGlvbikpCisgICAgICAgICAgICAgICAgdHlwZV9saW5lcy5hcHBlbmQoc2VsZi5fZ2Vu
ZXJhdGVfYXNzZXJ0aW9uX2Zvcl9vYmplY3RfZGVjbGFyYXRpb24odHlwZV9kZWNsYXJhdGlvbikp
CiAgICAgICAgICAgICAgICAgaWYgR2VuZXJhdG9yLnR5cGVfbmVlZHNfcnVudGltZV9jYXN0cyh0
eXBlX2RlY2xhcmF0aW9uLnR5cGUpOgotICAgICAgICAgICAgICAgICAgICBzZWN0aW9ucy5hcHBl
bmQoc2VsZi5fZ2VuZXJhdGVfcnVudGltZV9jYXN0X2Zvcl9vYmplY3RfZGVjbGFyYXRpb24odHlw
ZV9kZWNsYXJhdGlvbikpCisgICAgICAgICAgICAgICAgICAgIHR5cGVfbGluZXMuYXBwZW5kKHNl
bGYuX2dlbmVyYXRlX3J1bnRpbWVfY2FzdF9mb3Jfb2JqZWN0X2RlY2xhcmF0aW9uKHR5cGVfZGVj
bGFyYXRpb24pKQorICAgICAgICAgICAgaWYgbGVuKHR5cGVfbGluZXMpOgorICAgICAgICAgICAg
ICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKHR5
cGVfZGVjbGFyYXRpb24uY29uZGl0aW9uLCAnXG5cbicuam9pbih0eXBlX2xpbmVzKSkpCiAKLSAg
ICAgICAgcmV0dXJuICdcblxuJy5qb2luKHNlY3Rpb25zKQorICAgICAgICBpZiBub3QgbGVuKHNl
Y3Rpb25zKToKKyAgICAgICAgICAgIHJldHVybiAnJzsKKworICAgICAgICByZXR1cm4gc2VsZi53
cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9uLCAnXG5cbicuam9p
bihzZWN0aW9ucykpCiAKICAgICBkZWYgX2dlbmVyYXRlX3J1bnRpbWVfY2FzdF9mb3Jfb2JqZWN0
X2RlY2xhcmF0aW9uKHNlbGYsIG9iamVjdF9kZWNsYXJhdGlvbik6CiAgICAgICAgIGFyZ3MgPSB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV9qc19iYWNrZW5kX2NvbW1hbmRzLnB5IGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfanNfYmFja2VuZF9jb21tYW5k
cy5weQppbmRleCBiYmY3NmY5MjkxMS4uZWE2ZmZmYjIyMzggMTAwNzU1Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2pzX2JhY2tl
bmRfY29tbWFuZHMucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vZ2VuZXJhdGVfanNfYmFja2VuZF9jb21tYW5kcy5weQpAQCAtNDcsNyArNDcs
NyBAQCBjbGFzcyBKU0JhY2tlbmRDb21tYW5kc0dlbmVyYXRvcihHZW5lcmF0b3IpOgogICAgICAg
ICBHZW5lcmF0b3IuX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKQogCiAgICAgZGVmIG91
dHB1dF9maWxlbmFtZShzZWxmKToKLSAgICAgICAgcmV0dXJuICJJbnNwZWN0b3JCYWNrZW5kQ29t
bWFuZHMuanMiCisgICAgICAgIHJldHVybiAiSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzLmlu
IgogCiAgICAgZGVmIHNob3VsZF9nZW5lcmF0ZV9kb21haW4oc2VsZiwgZG9tYWluKToKICAgICAg
ICAgdHlwZV9kZWNsYXJhdGlvbnMgPSBzZWxmLnR5cGVfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4o
ZG9tYWluKQpAQCAtOTYsNyArOTYsNyBAQCBjbGFzcyBKU0JhY2tlbmRDb21tYW5kc0dlbmVyYXRv
cihHZW5lcmF0b3IpOgogICAgICAgICAgICAgICAgICAgICAnZW51bU5hbWUnOiBkZWNsYXJhdGlv
bi50eXBlX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICdlbnVtTWFwJzogIiwgIi5qb2luKFsn
JXM6ICIlcyInICUgKEdlbmVyYXRvci5zdHlsaXplZF9uYW1lX2Zvcl9lbnVtX3ZhbHVlKGVudW1f
dmFsdWUpLCBlbnVtX3ZhbHVlKSBmb3IgZW51bV92YWx1ZSBpbiBkZWNsYXJhdGlvbi50eXBlLmVu
dW1fdmFsdWVzKCldKQogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBsaW5lcy5h
cHBlbmQoJ0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCIlKGRvbWFpbk5hbWUpcy4lKGVu
dW1OYW1lKXMiLCB7JShlbnVtTWFwKXN9KTsnICUgZW51bV9hcmdzKQorICAgICAgICAgICAgICAg
IGxpbmVzLmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRlY2xhcmF0
aW9uLmNvbmRpdGlvbiwgJ0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCIlKGRvbWFpbk5h
bWUpcy4lKGVudW1OYW1lKXMiLCB7JShlbnVtTWFwKXN9KTsnICUgZW51bV9hcmdzKSkKIAogICAg
ICAgICAgICAgZGVmIGlzX2Fub255bW91c19lbnVtX21lbWJlcih0eXBlX21lbWJlcik6CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGlzaW5zdGFuY2UodHlwZV9tZW1iZXIudHlwZSwgRW51bVR5cGUp
IGFuZCB0eXBlX21lbWJlci50eXBlLmlzX2Fub255bW91cwpAQCAtMTI4LDE2ICsxMjgsMTggQEAg
Y2xhc3MgSlNCYWNrZW5kQ29tbWFuZHNHZW5lcmF0b3IoR2VuZXJhdG9yKToKICAgICAgICAgICAg
ICAgICAnY2FsbFBhcmFtcyc6ICIsICIuam9pbihbZ2VuZXJhdGVfcGFyYW1ldGVyX29iamVjdChw
YXJhbWV0ZXIpIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnNdKSwKICAg
ICAgICAgICAgICAgICAncmV0dXJuUGFyYW1zJzogIiwgIi5qb2luKFsnIiVzIicgJSBwYXJhbWV0
ZXIucGFyYW1ldGVyX25hbWUgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLnJldHVybl9wYXJhbWV0
ZXJzXSksCiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0luc3BlY3Rv
ckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCIlKGRvbWFpbk5hbWUpcy4lKGNvbW1hbmROYW1lKXMi
LCAlKHRhcmdldFR5cGVzKXMsIFslKGNhbGxQYXJhbXMpc10sIFslKHJldHVyblBhcmFtcylzXSk7
JyAlIGNvbW1hbmRfYXJncykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLndyYXBfd2l0
aF9ndWFyZF9mb3JfY29uZGl0aW9uKGNvbW1hbmQuY29uZGl0aW9uLCAnSW5zcGVjdG9yQmFja2Vu
ZC5yZWdpc3RlckNvbW1hbmQoIiUoZG9tYWluTmFtZSlzLiUoY29tbWFuZE5hbWUpcyIsICUodGFy
Z2V0VHlwZXMpcywgWyUoY2FsbFBhcmFtcylzXSwgWyUocmV0dXJuUGFyYW1zKXNdKTsnICUgY29t
bWFuZF9hcmdzKSkKIAogICAgICAgICBmb3IgZXZlbnQgaW4gZXZlbnRzOgorICAgICAgICAgICAg
ZXZlbnRfbGluZXMgPSBbXQorCiAgICAgICAgICAgICBmb3IgcGFyYW0gaW4gZmlsdGVyKGlzX2Fu
b255bW91c19lbnVtX3BhcmFtLCBldmVudC5ldmVudF9wYXJhbWV0ZXJzKToKICAgICAgICAgICAg
ICAgICBlbnVtX2FyZ3MgPSB7CiAgICAgICAgICAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9t
YWluLmRvbWFpbl9uYW1lLAogICAgICAgICAgICAgICAgICAgICAnZW51bU5hbWUnOiAnJXMlcycg
JSAodWNmaXJzdChldmVudC5ldmVudF9uYW1lKSwgdWNmaXJzdChwYXJhbS5wYXJhbWV0ZXJfbmFt
ZSkpLAogICAgICAgICAgICAgICAgICAgICAnZW51bU1hcCc6ICIsICIuam9pbihbJyVzOiAiJXMi
JyAlIChHZW5lcmF0b3Iuc3R5bGl6ZWRfbmFtZV9mb3JfZW51bV92YWx1ZShlbnVtX3ZhbHVlKSwg
ZW51bV92YWx1ZSkgZm9yIGVudW1fdmFsdWUgaW4gcGFyYW0udHlwZS5lbnVtX3ZhbHVlcygpXSks
CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnSW5zcGVj
dG9yQmFja2VuZC5yZWdpc3RlckVudW0oIiUoZG9tYWluTmFtZSlzLiUoZW51bU5hbWUpcyIsIHsl
KGVudW1NYXApc30pOycgJSBlbnVtX2FyZ3MpCisgICAgICAgICAgICAgICAgZXZlbnRfbGluZXMu
YXBwZW5kKCdJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiJShkb21haW5OYW1lKXMuJShl
bnVtTmFtZSlzIiwgeyUoZW51bU1hcClzfSk7JyAlIGVudW1fYXJncykKIAogICAgICAgICAgICAg
ZXZlbnRfYXJncyA9IHsKICAgICAgICAgICAgICAgICAnZG9tYWluTmFtZSc6IGRvbWFpbi5kb21h
aW5fbmFtZSwKQEAgLTE0NSw3ICsxNDcsOSBAQCBjbGFzcyBKU0JhY2tlbmRDb21tYW5kc0dlbmVy
YXRvcihHZW5lcmF0b3IpOgogICAgICAgICAgICAgICAgICd0YXJnZXRUeXBlcyc6IGpzb24uZHVt
cHMoZXZlbnQudGFyZ2V0X3R5cGVzKSwKICAgICAgICAgICAgICAgICAncGFyYW1zJzogIiwgIi5q
b2luKFsnIiVzIicgJSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUgZm9yIHBhcmFtZXRlciBpbiBl
dmVudC5ldmVudF9wYXJhbWV0ZXJzXSksCiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBsaW5l
cy5hcHBlbmQoJ0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudCgiJShkb21haW5OYW1lKXMu
JShldmVudE5hbWUpcyIsICUodGFyZ2V0VHlwZXMpcywgWyUocGFyYW1zKXNdKTsnICUgZXZlbnRf
YXJncykKKyAgICAgICAgICAgIGV2ZW50X2xpbmVzLmFwcGVuZCgnSW5zcGVjdG9yQmFja2VuZC5y
ZWdpc3RlckV2ZW50KCIlKGRvbWFpbk5hbWUpcy4lKGV2ZW50TmFtZSlzIiwgJSh0YXJnZXRUeXBl
cylzLCBbJShwYXJhbXMpc10pOycgJSBldmVudF9hcmdzKQorCisgICAgICAgICAgICBsaW5lcy5h
cHBlbmQoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihldmVudC5jb25kaXRpb24s
ICdcbicuam9pbihldmVudF9saW5lcykpKQogCiAgICAgICAgIGhhc19hc3luY19jb21tYW5kcyA9
IGFueShbY29tbWFuZC5pc19hc3luYyBmb3IgY29tbWFuZCBpbiBjb21tYW5kc10pCiAgICAgICAg
IGlmIGxlbihldmVudHMpID4gMCBvciBoYXNfYXN5bmNfY29tbWFuZHM6CkBAIC0xNjAsNCArMTY0
LDQgQEAgY2xhc3MgSlNCYWNrZW5kQ29tbWFuZHNHZW5lcmF0b3IoR2VuZXJhdG9yKToKICAgICAg
ICAgfQogICAgICAgICBsaW5lcy5hcHBlbmQoJ0luc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21h
aW4oIiUoZG9tYWluTmFtZSlzIiwgJShkZWJ1Z2dhYmxlVHlwZXMpcyk7JyAlIGFjdGl2YXRlX2Fy
Z3MpCiAKLSAgICAgICAgcmV0dXJuICJcbiIuam9pbihsaW5lcykKKyAgICAgICAgcmV0dXJuIHNl
bGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZG9tYWluLmNvbmRpdGlvbiwgIlxuIi5q
b2luKGxpbmVzKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5w
eSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRlX29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQppbmRleCBlZDhjYzU5NmQzMS4u
ZWEyZmMxMTI3NGUgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5w
eQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9n
ZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKQEAgLTk5LDcgKzk5LDcg
QEAgY2xhc3MgT2JqQ0JhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKE9iakNHZW5lcmF0
b3IpOgogICAgICAgICAgICAgJ29iamNQcmVmaXgnOiBzZWxmLm9iamNfcHJlZml4KCksCiAgICAg
ICAgIH0KIAotICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihk
b21haW4sIFRlbXBsYXRlKE9iakNUZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNoZXJIZWFkZXJEb21h
aW5IYW5kbGVyT2JqQ0RlY2xhcmF0aW9uKS5zdWJzdGl0dXRlKE5vbmUsICoqaGFuZGxlcl9hcmdz
KSkKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZG9t
YWluLmNvbmRpdGlvbiwgVGVtcGxhdGUoT2JqQ1RlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hlckhl
YWRlckRvbWFpbkhhbmRsZXJPYmpDRGVjbGFyYXRpb24pLnN1YnN0aXR1dGUoTm9uZSwgKipoYW5k
bGVyX2FyZ3MpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9vYmpjX2hhbmRsZXJfZGVjbGFyYXRpb25f
Zm9yX2NvbW1hbmQoc2VsZiwgY29tbWFuZCk6CiAgICAgICAgIGxpbmVzID0gW10KQEAgLTExMiw0
ICsxMTIsNCBAQCBjbGFzcyBPYmpDQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IoT2Jq
Q0dlbmVyYXRvcik6CiAgICAgICAgICAgICAncGFyYW1ldGVycyc6ICcsICcuam9pbihwYXJhbWV0
ZXJzKSwKICAgICAgICAgfQogICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICB2b2lkICUoY29tbWFu
ZE5hbWUpcyglKHBhcmFtZXRlcnMpcykgZmluYWw7JyAlIGNvbW1hbmRfYXJncykKLSAgICAgICAg
cmV0dXJuICdcbicuam9pbihsaW5lcykKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1
YXJkX2Zvcl9jb25kaXRpb24oY29tbWFuZC5jb25kaXRpb24sICdcbicuam9pbihsaW5lcykpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29i
amNfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CmluZGV4IGExYjllMTc5NzA1
Li5mNWVlOGU1ODM5OCAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVt
ZW50YXRpb24ucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24u
cHkKQEAgLTg2LDcgKzg2LDcgQEAgY2xhc3MgT2JqQ0JhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50
YXRpb25HZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgICAgIGZvciBjb21tYW5kIGluIGNv
bW1hbmRzOgogICAgICAgICAgICAgY29tbWFuZF9kZWNsYXJhdGlvbnMuYXBwZW5kKHNlbGYuX2dl
bmVyYXRlX2hhbmRsZXJfaW1wbGVtZW50YXRpb25fZm9yX2NvbW1hbmQoZG9tYWluLCBjb21tYW5k
KSkKIAotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGNvbW1hbmRfZGVjbGFyYXRpb25zKQorICAg
ICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihkb21haW4uY29u
ZGl0aW9uLCAnXG5cbicuam9pbihjb21tYW5kX2RlY2xhcmF0aW9ucykpCiAKICAgICBkZWYgX2dl
bmVyYXRlX2hhbmRsZXJfaW1wbGVtZW50YXRpb25fZm9yX2NvbW1hbmQoc2VsZiwgZG9tYWluLCBj
b21tYW5kKToKICAgICAgICAgbGluZXMgPSBbXQpAQCAtMTA0LDcgKzEwNCw3IEBAIGNsYXNzIE9i
akNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKE9iakNHZW5lcmF0b3Ip
OgogICAgICAgICAgICAgJ2ludm9jYXRpb24nOiBzZWxmLl9nZW5lcmF0ZV9pbnZvY2F0aW9uX2Zv
cl9jb21tYW5kKGRvbWFpbiwgY29tbWFuZCksCiAgICAgICAgIH0KIAotICAgICAgICByZXR1cm4g
c2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4sIFRlbXBsYXRlKE9iakNUZW1w
bGF0ZXMuQmFja2VuZERpc3BhdGNoZXJIZWFkZXJEb21haW5IYW5kbGVySW1wbGVtZW50YXRpb24p
LnN1YnN0aXR1dGUoTm9uZSwgKipjb21tYW5kX2FyZ3MpKQorICAgICAgICByZXR1cm4gc2VsZi53
cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihjb21tYW5kLmNvbmRpdGlvbiwgVGVtcGxhdGUo
T2JqQ1RlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hlckhlYWRlckRvbWFpbkhhbmRsZXJJbXBsZW1l
bnRhdGlvbikuc3Vic3RpdHV0ZShOb25lLCAqKmNvbW1hbmRfYXJncykpCiAKICAgICBkZWYgX2dl
bmVyYXRlX3Jlc3BvbmRzX3RvX3NlbGVjdG9yX2Zvcl9jb21tYW5kKHNlbGYsIGRvbWFpbiwgY29t
bWFuZCk6CiAgICAgICAgIHJldHVybiAnW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBz
ZWxlY3Rvciglc1dpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazolcyldJyAlIChjb21t
YW5kLmNvbW1hbmRfbmFtZSwgJycuam9pbihtYXAobGFtYmRhIHBhcmFtZXRlcjogJyVzOicgJSBw
YXJhbWV0ZXIucGFyYW1ldGVyX25hbWUsIGNvbW1hbmQuY2FsbF9wYXJhbWV0ZXJzKSkpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9n
ZW5lcmF0ZV9vYmpjX2hlYWRlci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfaGVhZGVyLnB5CmluZGV4IDE1ZmI3NGJlOGJm
Li4xNWJmNjFkMmQ0NSAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19oZWFkZXIucHkKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19oZWFk
ZXIucHkKQEAgLTMxLDEyICszMSwxMiBAQCBmcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKIAog
dHJ5OgogICAgIGZyb20gLmdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0Ci0gICAg
ZnJvbSAubW9kZWxzIGltcG9ydCBPYmplY3RUeXBlLCBFbnVtVHlwZSwgUGxhdGZvcm1zCisgICAg
ZnJvbSAubW9kZWxzIGltcG9ydCBPYmplY3RUeXBlLCBFbnVtVHlwZQogICAgIGZyb20gLm9iamNf
Z2VuZXJhdG9yIGltcG9ydCBPYmpDR2VuZXJhdG9yLCBqb2luX3R5cGVfYW5kX25hbWUKICAgICBm
cm9tIC5vYmpjX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IE9iakNHZW5lcmF0b3JUZW1wbGF0
ZXMgYXMgT2JqQ1RlbXBsYXRlcwogZXhjZXB0IFZhbHVlRXJyb3I6CiAgICAgZnJvbSBnZW5lcmF0
b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJzdAotICAgIGZyb20gbW9kZWxzIGltcG9ydCBPYmpl
Y3RUeXBlLCBFbnVtVHlwZSwgUGxhdGZvcm1zCisgICAgZnJvbSBtb2RlbHMgaW1wb3J0IE9iamVj
dFR5cGUsIEVudW1UeXBlCiAgICAgZnJvbSBvYmpjX2dlbmVyYXRvciBpbXBvcnQgT2JqQ0dlbmVy
YXRvciwgam9pbl90eXBlX2FuZF9uYW1lCiAgICAgZnJvbSBvYmpjX2dlbmVyYXRvcl90ZW1wbGF0
ZXMgaW1wb3J0IE9iakNHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgT2JqQ1RlbXBsYXRlcwogCkBAIC00
NCw3ICs0NCw3IEBAIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQogCiAKIGRlZiBh
ZGRfbmV3bGluZShsaW5lcyk6Ci0gICAgaWYgbGluZXMgYW5kIGxpbmVzWy0xXSA9PSAnJzoKKyAg
ICBpZiBub3QgbGVuKGxpbmVzKSBvciBsaW5lc1stMV0gPT0gJyc6CiAgICAgICAgIHJldHVybgog
ICAgIGxpbmVzLmFwcGVuZCgnJykKIApAQCAtODcsNyArODcsNiBAQCBjbGFzcyBPYmpDSGVhZGVy
R2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5n
ZW5lcmF0ZV9saWNlbnNlKCkpCiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShPYmpD
VGVtcGxhdGVzLkhlYWRlclByZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJQcmVsdWRl
X2FyZ3MpKQogICAgICAgICBzZWN0aW9ucy5hcHBlbmQoJ1xuJy5qb2luKFtfZiBmb3IgX2YgaW4g
bWFwKHNlbGYuX2dlbmVyYXRlX2ZvcndhcmRfZGVjbGFyYXRpb25zLCB0eXBlX2RvbWFpbnMpIGlm
IF9mXSkpCi0gICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9lbnVtX2Zvcl9w
bGF0Zm9ybXMoKSkKICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCdcbicuam9pbihbX2YgZm9yIF9m
IGluIG1hcChzZWxmLl9nZW5lcmF0ZV9lbnVtcywgdHlwZV9kb21haW5zKSBpZiBfZl0pKQogICAg
ICAgICBzZWN0aW9ucy5hcHBlbmQoJ1xuJy5qb2luKFtfZiBmb3IgX2YgaW4gbWFwKHNlbGYuX2dl
bmVyYXRlX3R5cGVzLCB0eXBlX2RvbWFpbnMpIGlmIF9mXSkpCiAKQEAgLTEwMyw0MiArMTAyLDUx
IEBAIGNsYXNzIE9iakNIZWFkZXJHZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgICAgIGZv
ciBkZWNsYXJhdGlvbiBpbiBzZWxmLnR5cGVfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4oZG9tYWlu
KToKICAgICAgICAgICAgIGlmIChpc2luc3RhbmNlKGRlY2xhcmF0aW9uLnR5cGUsIE9iamVjdFR5
cGUpKToKICAgICAgICAgICAgICAgICBvYmpjX25hbWUgPSBzZWxmLm9iamNfbmFtZV9mb3JfdHlw
ZShkZWNsYXJhdGlvbi50eXBlKQotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnQGNsYXNz
ICVzOycgJSBvYmpjX25hbWUpCi0gICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisgICAg
ICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRp
b24oZGVjbGFyYXRpb24uY29uZGl0aW9uLCAnQGNsYXNzICVzOycgJSBvYmpjX25hbWUpKQorICAg
ICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihkb21haW4uY29u
ZGl0aW9uLCAnXG4nLmpvaW4obGluZXMpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9lbnVtcyhzZWxm
LCBkb21haW4pOgogICAgICAgICBsaW5lcyA9IFtdCiAKICAgICAgICAgIyBUeXBlIGVudW1zIGFu
ZCBtZW1iZXIgZW51bXMuCiAgICAgICAgIGZvciBkZWNsYXJhdGlvbiBpbiBzZWxmLnR5cGVfZGVj
bGFyYXRpb25zX2Zvcl9kb21haW4oZG9tYWluKToKKyAgICAgICAgICAgIGRlY2xhcmF0aW9uX2xp
bmVzID0gW10KICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZGVjbGFyYXRpb24udHlwZSwgRW51
bVR5cGUpOgotICAgICAgICAgICAgICAgIGFkZF9uZXdsaW5lKGxpbmVzKQotICAgICAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfZGVjbGFy
YXRpb24oZG9tYWluLCBkZWNsYXJhdGlvbikpCisgICAgICAgICAgICAgICAgYWRkX25ld2xpbmUo
ZGVjbGFyYXRpb25fbGluZXMpCisgICAgICAgICAgICAgICAgZGVjbGFyYXRpb25fbGluZXMuYXBw
ZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2Zvcl9kZWNsYXJhdGlvbihkb21haW4s
IGRlY2xhcmF0aW9uKSkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgZm9yIG1l
bWJlciBpbiBkZWNsYXJhdGlvbi50eXBlX21lbWJlcnM6CiAgICAgICAgICAgICAgICAgICAgIGlm
IGlzaW5zdGFuY2UobWVtYmVyLnR5cGUsIEVudW1UeXBlKSBhbmQgbWVtYmVyLnR5cGUuaXNfYW5v
bnltb3VzOgotICAgICAgICAgICAgICAgICAgICAgICAgYWRkX25ld2xpbmUobGluZXMpCi0gICAg
ICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnltb3Vz
X2VudW1fZm9yX21lbWJlcihkb21haW4sIGRlY2xhcmF0aW9uLCBtZW1iZXIpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgYWRkX25ld2xpbmUoZGVjbGFyYXRpb25fbGluZXMpCisgICAgICAgICAg
ICAgICAgICAgICAgICBkZWNsYXJhdGlvbl9saW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5v
bnltb3VzX2VudW1fZm9yX21lbWJlcihkb21haW4sIGRlY2xhcmF0aW9uLCBtZW1iZXIpKQorICAg
ICAgICAgICAgaWYgbGVuKGRlY2xhcmF0aW9uX2xpbmVzKToKKyAgICAgICAgICAgICAgICBsaW5l
cy5hcHBlbmQoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihkZWNsYXJhdGlvbi5j
b25kaXRpb24sICdcblxuJy5qb2luKGRlY2xhcmF0aW9uX2xpbmVzKSkpCiAKICAgICAgICAgIyBB
bm9ueW1vdXMgY29tbWFuZCBlbnVtcy4KICAgICAgICAgZm9yIGNvbW1hbmQgaW4gc2VsZi5jb21t
YW5kc19mb3JfZG9tYWluKGRvbWFpbik6CisgICAgICAgICAgICBjb21tYW5kX2xpbmVzID0gW10K
ICAgICAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6CiAg
ICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShwYXJhbWV0ZXIudHlwZSwgRW51bVR5cGUpIGFu
ZCBwYXJhbWV0ZXIudHlwZS5pc19hbm9ueW1vdXM6Ci0gICAgICAgICAgICAgICAgICAgIGFkZF9u
ZXdsaW5lKGxpbmVzKQotICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2Vu
ZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX3BhcmFtZXRlcihkb21haW4sIGNvbW1hbmQuY29tbWFu
ZF9uYW1lLCBwYXJhbWV0ZXIpKQorICAgICAgICAgICAgICAgICAgICBhZGRfbmV3bGluZShjb21t
YW5kX2xpbmVzKQorICAgICAgICAgICAgICAgICAgICBjb21tYW5kX2xpbmVzLmFwcGVuZChzZWxm
Ll9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfcGFyYW1ldGVyKGRvbWFpbiwgY29tbWFuZC5j
b21tYW5kX25hbWUsIHBhcmFtZXRlcikpCiAgICAgICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGNv
bW1hbmQucmV0dXJuX3BhcmFtZXRlcnM6CiAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShw
YXJhbWV0ZXIudHlwZSwgRW51bVR5cGUpIGFuZCBwYXJhbWV0ZXIudHlwZS5pc19hbm9ueW1vdXM6
Ci0gICAgICAgICAgICAgICAgICAgIGFkZF9uZXdsaW5lKGxpbmVzKQotICAgICAgICAgICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX3BhcmFt
ZXRlcihkb21haW4sIGNvbW1hbmQuY29tbWFuZF9uYW1lLCBwYXJhbWV0ZXIpKQorICAgICAgICAg
ICAgICAgICAgICBhZGRfbmV3bGluZShjb21tYW5kX2xpbmVzKQorICAgICAgICAgICAgICAgICAg
ICBjb21tYW5kX2xpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3Jf
cGFyYW1ldGVyKGRvbWFpbiwgY29tbWFuZC5jb21tYW5kX25hbWUsIHBhcmFtZXRlcikpCisgICAg
ICAgICAgICBpZiBsZW4oY29tbWFuZF9saW5lcyk6CisgICAgICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oY29tbWFuZC5jb25kaXRpb24s
ICdcblxuJy5qb2luKGNvbW1hbmRfbGluZXMpKSkKIAogICAgICAgICAjIEFub255bW91cyBldmVu
dCBlbnVtcy4KICAgICAgICAgZm9yIGV2ZW50IGluIHNlbGYuZXZlbnRzX2Zvcl9kb21haW4oZG9t
YWluKToKKyAgICAgICAgICAgIGV2ZW50X2xpbmVzID0gW10KICAgICAgICAgICAgIGZvciBwYXJh
bWV0ZXIgaW4gZXZlbnQuZXZlbnRfcGFyYW1ldGVyczoKICAgICAgICAgICAgICAgICBpZiBpc2lu
c3RhbmNlKHBhcmFtZXRlci50eXBlLCBFbnVtVHlwZSkgYW5kIHBhcmFtZXRlci50eXBlLmlzX2Fu
b255bW91czoKLSAgICAgICAgICAgICAgICAgICAgYWRkX25ld2xpbmUobGluZXMpCi0gICAgICAg
ICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9m
b3JfcGFyYW1ldGVyKGRvbWFpbiwgZXZlbnQuZXZlbnRfbmFtZSwgcGFyYW1ldGVyKSkKKyAgICAg
ICAgICAgICAgICAgICAgYWRkX25ld2xpbmUoZXZlbnRfbGluZXMpCisgICAgICAgICAgICAgICAg
ICAgIGV2ZW50X2xpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3Jf
cGFyYW1ldGVyKGRvbWFpbiwgZXZlbnQuZXZlbnRfbmFtZSwgcGFyYW1ldGVyKSkKKyAgICAgICAg
ICAgIGlmIGxlbihldmVudF9saW5lcyk6CisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNl
bGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZXZlbnQuY29uZGl0aW9uLCAnXG5cbicu
am9pbihldmVudF9saW5lcykpKQogCi0gICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisg
ICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRvbWFpbi5j
b25kaXRpb24sICdcblxuJy5qb2luKGxpbmVzKSkKIAogICAgIGRlZiBfZ2VuZXJhdGVfdHlwZXMo
c2VsZiwgZG9tYWluKToKICAgICAgICAgbGluZXMgPSBbXQpAQCAtMTQ3LDEyICsxNTUsNyBAQCBj
bGFzcyBPYmpDSGVhZGVyR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogICAgICAgICAgICAgaWYg
aXNpbnN0YW5jZShkZWNsYXJhdGlvbi50eXBlLCBPYmplY3RUeXBlKToKICAgICAgICAgICAgICAg
ICBhZGRfbmV3bGluZShsaW5lcykKICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5f
Z2VuZXJhdGVfdHlwZV9pbnRlcmZhY2UoZG9tYWluLCBkZWNsYXJhdGlvbikpCi0gICAgICAgIHJl
dHVybiAnXG4nLmpvaW4obGluZXMpCi0KLSAgICBkZWYgX2dlbmVyYXRlX2VudW1fZm9yX3BsYXRm
b3JtcyhzZWxmKToKLSAgICAgICAgb2JqY19lbnVtX25hbWUgPSAnJXNQbGF0Zm9ybScgJSBzZWxm
Lm9iamNfcHJlZml4KCkKLSAgICAgICAgZW51bV92YWx1ZXMgPSBbcGxhdGZvcm0ubmFtZSBmb3Ig
cGxhdGZvcm0gaW4gUGxhdGZvcm1zXQotICAgICAgICByZXR1cm4gc2VsZi5fZ2VuZXJhdGVfZW51
bShvYmpjX2VudW1fbmFtZSwgZW51bV92YWx1ZXMpCisgICAgICAgIHJldHVybiBzZWxmLndyYXBf
d2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRvbWFpbi5jb25kaXRpb24sICdcbicuam9pbihsaW5l
cykpCiAKICAgICBkZWYgX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2Zvcl9kZWNsYXJhdGlvbihz
ZWxmLCBkb21haW4sIGRlY2xhcmF0aW9uKToKICAgICAgICAgb2JqY19lbnVtX25hbWUgPSBzZWxm
Lm9iamNfZW51bV9uYW1lX2Zvcl9hbm9ueW1vdXNfZW51bV9kZWNsYXJhdGlvbihkZWNsYXJhdGlv
bikKQEAgLTE5NCw3ICsxOTcsNyBAQCBjbGFzcyBPYmpDSGVhZGVyR2VuZXJhdG9yKE9iakNHZW5l
cmF0b3IpOgogICAgICAgICBmb3IgbWVtYmVyIGluIG9wdGlvbmFsX21lbWJlcnM6CiAgICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoJy8qIG9wdGlvbmFsICovICcgKyBzZWxmLl9nZW5lcmF0ZV9tZW1i
ZXJfcHJvcGVydHkoZGVjbGFyYXRpb24sIG1lbWJlcikpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgn
QGVuZCcpCi0gICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisgICAgICAgIHJldHVybiBz
ZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRlY2xhcmF0aW9uLmNvbmRpdGlvbiwg
J1xuJy5qb2luKGxpbmVzKSkKIAogICAgIGRlZiBfZ2VuZXJhdGVfaW5pdF9tZXRob2RfZm9yX3Jl
cXVpcmVkX21lbWJlcnMoc2VsZiwgZG9tYWluLCBkZWNsYXJhdGlvbiwgcmVxdWlyZWRfbWVtYmVy
cyk6CiAgICAgICAgIHBhaXJzID0gW10KQEAgLTIxOSw3ICsyMjIsNyBAQCBjbGFzcyBPYmpDSGVh
ZGVyR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogICAgICAgICAgICAgZm9yIGNvbW1hbmQgaW4g
c2VsZi5jb21tYW5kc19mb3JfZG9tYWluKGRvbWFpbik6CiAgICAgICAgICAgICAgICAgbGluZXMu
YXBwZW5kKHNlbGYuX2dlbmVyYXRlX3NpbmdsZV9jb21tYW5kX3Byb3RvY29sKGRvbWFpbiwgY29t
bWFuZCkpCiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0BlbmQnKQotICAgICAgICByZXR1cm4g
J1xuJy5qb2luKGxpbmVzKQorICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9y
X2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9uLCAnXG4nLmpvaW4obGluZXMpKQogCiAgICAgZGVm
IF9nZW5lcmF0ZV9zaW5nbGVfY29tbWFuZF9wcm90b2NvbChzZWxmLCBkb21haW4sIGNvbW1hbmQp
OgogICAgICAgICBwYWlycyA9IFtdCkBAIC0yMjgsNyArMjMxLDcgQEAgY2xhc3MgT2JqQ0hlYWRl
ckdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKICAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBjb21t
YW5kLmNhbGxfcGFyYW1ldGVyczoKICAgICAgICAgICAgIHBhcmFtX25hbWUgPSBwYXJhbWV0ZXIu
cGFyYW1ldGVyX25hbWUKICAgICAgICAgICAgIHBhaXJzLmFwcGVuZCgnJXM6KCVzKSVzJyAlIChw
YXJhbV9uYW1lLCBzZWxmLm9iamNfdHlwZV9mb3JfcGFyYW0oZG9tYWluLCBjb21tYW5kLmNvbW1h
bmRfbmFtZSwgcGFyYW1ldGVyKSwgcGFyYW1fbmFtZSkpCi0gICAgICAgIHJldHVybiAnLSAodm9p
ZCklc1dpdGglczsnICUgKGNvbW1hbmQuY29tbWFuZF9uYW1lLCAnICcuam9pbihwYWlycykpCisg
ICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGNvbW1hbmQu
Y29uZGl0aW9uLCAnLSAodm9pZCklc1dpdGglczsnICUgKGNvbW1hbmQuY29tbWFuZF9uYW1lLCAn
ICcuam9pbihwYWlycykpKQogCiAgICAgZGVmIF9jYWxsYmFja19ibG9ja19mb3JfY29tbWFuZChz
ZWxmLCBkb21haW4sIGNvbW1hbmQpOgogICAgICAgICBwYWlycyA9IFtdCkBAIC0yNDksNyArMjUy
LDcgQEAgY2xhc3MgT2JqQ0hlYWRlckdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKICAgICAgICAg
ICAgIGZvciBldmVudCBpbiBldmVudHM6CiAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNl
bGYuX2dlbmVyYXRlX3NpbmdsZV9ldmVudF9pbnRlcmZhY2UoZG9tYWluLCBldmVudCkpCiAgICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoJ0BlbmQnKQotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxp
bmVzKQorICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihk
b21haW4uY29uZGl0aW9uLCAnXG4nLmpvaW4obGluZXMpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9z
aW5nbGVfZXZlbnRfaW50ZXJmYWNlKHNlbGYsIGRvbWFpbiwgZXZlbnQpOgogICAgICAgICBpZiBu
b3QgZXZlbnQuZXZlbnRfcGFyYW1ldGVyczoKQEAgLTI1OSw0ICsyNjIsNCBAQCBjbGFzcyBPYmpD
SGVhZGVyR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogICAgICAgICAgICAgcGFyYW1fbmFtZSA9
IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQogICAgICAgICAgICAgcGFpcnMuYXBwZW5kKCclczoo
JXMpJXMnICUgKHBhcmFtX25hbWUsIHNlbGYub2JqY190eXBlX2Zvcl9wYXJhbShkb21haW4sIGV2
ZW50LmV2ZW50X25hbWUsIHBhcmFtZXRlciksIHBhcmFtX25hbWUpKQogICAgICAgICBwYWlyc1sw
XSA9IHVjZmlyc3QocGFpcnNbMF0pCi0gICAgICAgIHJldHVybiAnLSAodm9pZCklc1dpdGglczsn
ICUgKGV2ZW50LmV2ZW50X25hbWUsICcgJy5qb2luKHBhaXJzKSkKKyAgICAgICAgcmV0dXJuIHNl
bGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZXZlbnQuY29uZGl0aW9uLCAnLSAodm9p
ZCklc1dpdGglczsnICUgKGV2ZW50LmV2ZW50X25hbWUsICcgJy5qb2luKHBhaXJzKSkpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9n
ZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVfY29udmVyc2lvbnNfaGVhZGVyLnB5IGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19w
cm90b2NvbF90eXBlX2NvbnZlcnNpb25zX2hlYWRlci5weQppbmRleCAyNTcxZjRiMjJhOC4uNWM1
MmNkZWE5YjMgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfcHJvdG9jb2xfdHlwZV9jb252ZXJzaW9uc19oZWFk
ZXIucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVn
ZW4vZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBlX2NvbnZlcnNpb25zX2hlYWRlci5weQpAQCAt
MzEsMTIgKzMxLDEyIEBAIGZyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQogCiB0cnk6CiAgICAg
ZnJvbSAuZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IKLSAgICBmcm9tIC5tb2RlbHMgaW1wb3J0
IEVudW1UeXBlLCBGcmFtZXdvcmtzLCBQbGF0Zm9ybXMKKyAgICBmcm9tIC5tb2RlbHMgaW1wb3J0
IEVudW1UeXBlLCBGcmFtZXdvcmtzCiAgICAgZnJvbSAub2JqY19nZW5lcmF0b3IgaW1wb3J0IE9i
akNHZW5lcmF0b3IKICAgICBmcm9tIC5vYmpjX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IE9i
akNHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgT2JqQ1RlbXBsYXRlcwogZXhjZXB0IFZhbHVlRXJyb3I6
CiAgICAgZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvcgotICAgIGZyb20gbW9kZWxzIGlt
cG9ydCBFbnVtVHlwZSwgRnJhbWV3b3JrcywgUGxhdGZvcm1zCisgICAgZnJvbSBtb2RlbHMgaW1w
b3J0IEVudW1UeXBlLCBGcmFtZXdvcmtzCiAgICAgZnJvbSBvYmpjX2dlbmVyYXRvciBpbXBvcnQg
T2JqQ0dlbmVyYXRvcgogICAgIGZyb20gb2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBP
YmpDR2VuZXJhdG9yVGVtcGxhdGVzIGFzIE9iakNUZW1wbGF0ZXMKIApAQCAtNDQsNyArNDQsNyBA
QCBsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKIAogCiBkZWYgYWRkX25ld2xpbmUo
bGluZXMpOgotICAgIGlmIGxpbmVzIGFuZCBsaW5lc1stMV0gPT0gJyc6CisgICAgaWYgbm90IGxl
bihsaW5lcykgb3IgbGluZXNbLTFdID09ICcnOgogICAgICAgICByZXR1cm4KICAgICBsaW5lcy5h
cHBlbmQoJycpCiAKQEAgLTc1LDcgKzc1LDYgQEAgY2xhc3MgT2JqQ1Byb3RvY29sVHlwZUNvbnZl
cnNpb25zSGVhZGVyR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogICAgICAgICBzZWN0aW9ucy5h
cHBlbmQoc2VsZi5nZW5lcmF0ZV9saWNlbnNlKCkpCiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChU
ZW1wbGF0ZShPYmpDVGVtcGxhdGVzLlR5cGVDb252ZXJzaW9uc0hlYWRlclByZWx1ZGUpLnN1YnN0
aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1w
bGF0ZShPYmpDVGVtcGxhdGVzLlR5cGVDb252ZXJzaW9uc0hlYWRlclN0YW5kYXJkKS5zdWJzdGl0
dXRlKE5vbmUpKQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfZW51bV9j
b252ZXJzaW9uX2Zvcl9wbGF0Zm9ybXMoKSkKICAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKGxpc3Qo
bWFwKHNlbGYuX2dlbmVyYXRlX2VudW1fY29udmVyc2lvbl9mdW5jdGlvbnMsIGRvbWFpbnMpKSkK
ICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKE9iakNUZW1wbGF0ZXMuVHlwZUNvbnZl
cnNpb25zSGVhZGVyUG9zdGx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCiAg
ICAgICAgIHJldHVybiAnXG5cbicuam9pbihzZWN0aW9ucykKQEAgLTg1LDQyICs4NCw0MyBAQCBj
bGFzcyBPYmpDUHJvdG9jb2xUeXBlQ29udmVyc2lvbnNIZWFkZXJHZW5lcmF0b3IoT2JqQ0dlbmVy
YXRvcik6CiAKICAgICAgICAgIyBUeXBlIGVudW1zIGFuZCBtZW1iZXIgZW51bXMuCiAgICAgICAg
IGZvciBkZWNsYXJhdGlvbiBpbiBzZWxmLnR5cGVfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4oZG9t
YWluKToKKyAgICAgICAgICAgIGRlY2xhcmF0aW9uX2xpbmVzID0gW10KICAgICAgICAgICAgIGlm
IGlzaW5zdGFuY2UoZGVjbGFyYXRpb24udHlwZSwgRW51bVR5cGUpOgotICAgICAgICAgICAgICAg
IGFkZF9uZXdsaW5lKGxpbmVzKQotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9n
ZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9jb252ZXJzaW9uX2Zvcl9kZWNsYXJhdGlvbihkb21haW4s
IGRlY2xhcmF0aW9uKSkKKyAgICAgICAgICAgICAgICBhZGRfbmV3bGluZShkZWNsYXJhdGlvbl9s
aW5lcykKKyAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbl9saW5lcy5hcHBlbmQoc2VsZi5fZ2Vu
ZXJhdGVfYW5vbnltb3VzX2VudW1fY29udmVyc2lvbl9mb3JfZGVjbGFyYXRpb24oZG9tYWluLCBk
ZWNsYXJhdGlvbikpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGZvciBtZW1i
ZXIgaW4gZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzOgogICAgICAgICAgICAgICAgICAgICBpZiAo
aXNpbnN0YW5jZShtZW1iZXIudHlwZSwgRW51bVR5cGUpIGFuZCBtZW1iZXIudHlwZS5pc19hbm9u
eW1vdXMpOgotICAgICAgICAgICAgICAgICAgICAgICAgYWRkX25ld2xpbmUobGluZXMpCi0gICAg
ICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnltb3Vz
X2VudW1fY29udmVyc2lvbl9mb3JfbWVtYmVyKGRvbWFpbiwgZGVjbGFyYXRpb24sIG1lbWJlcikp
CisgICAgICAgICAgICAgICAgICAgICAgICBhZGRfbmV3bGluZShkZWNsYXJhdGlvbl9saW5lcykK
KyAgICAgICAgICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uX2xpbmVzLmFwcGVuZChzZWxmLl9n
ZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9jb252ZXJzaW9uX2Zvcl9tZW1iZXIoZG9tYWluLCBkZWNs
YXJhdGlvbiwgbWVtYmVyKSkKKyAgICAgICAgICAgIGlmIGxlbihkZWNsYXJhdGlvbl9saW5lcyk6
CisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9j
b25kaXRpb24oZGVjbGFyYXRpb24uY29uZGl0aW9uLCAnXG5cbicuam9pbihkZWNsYXJhdGlvbl9s
aW5lcykpKQogCiAgICAgICAgICMgQW5vbnltb3VzIGNvbW1hbmQgZW51bXMuCiAgICAgICAgIGZv
ciBjb21tYW5kIGluIHNlbGYuY29tbWFuZHNfZm9yX2RvbWFpbihkb21haW4pOgorICAgICAgICAg
ICAgY29tbWFuZF9saW5lcyA9IFtdCiAgICAgICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGNvbW1h
bmQuY2FsbF9wYXJhbWV0ZXJzOgogICAgICAgICAgICAgICAgIGlmIChpc2luc3RhbmNlKHBhcmFt
ZXRlci50eXBlLCBFbnVtVHlwZSkgYW5kIHBhcmFtZXRlci50eXBlLmlzX2Fub255bW91cyk6Ci0g
ICAgICAgICAgICAgICAgICAgIGFkZF9uZXdsaW5lKGxpbmVzKQotICAgICAgICAgICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fY29udmVyc2lvbl9m
b3JfcGFyYW1ldGVyKGRvbWFpbiwgY29tbWFuZC5jb21tYW5kX25hbWUsIHBhcmFtZXRlcikpCisg
ICAgICAgICAgICAgICAgICAgIGFkZF9uZXdsaW5lKGNvbW1hbmRfbGluZXMpCisgICAgICAgICAg
ICAgICAgICAgIGNvbW1hbmRfbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19l
bnVtX2NvbnZlcnNpb25fZm9yX3BhcmFtZXRlcihkb21haW4sIGNvbW1hbmQuY29tbWFuZF9uYW1l
LCBwYXJhbWV0ZXIpKQogICAgICAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLnJldHVy
bl9wYXJhbWV0ZXJzOgogICAgICAgICAgICAgICAgIGlmIChpc2luc3RhbmNlKHBhcmFtZXRlci50
eXBlLCBFbnVtVHlwZSkgYW5kIHBhcmFtZXRlci50eXBlLmlzX2Fub255bW91cyk6Ci0gICAgICAg
ICAgICAgICAgICAgIGFkZF9uZXdsaW5lKGxpbmVzKQotICAgICAgICAgICAgICAgICAgICBsaW5l
cy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fY29udmVyc2lvbl9mb3JfcGFy
YW1ldGVyKGRvbWFpbiwgY29tbWFuZC5jb21tYW5kX25hbWUsIHBhcmFtZXRlcikpCisgICAgICAg
ICAgICAgICAgICAgIGFkZF9uZXdsaW5lKGNvbW1hbmRfbGluZXMpCisgICAgICAgICAgICAgICAg
ICAgIGNvbW1hbmRfbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2Nv
bnZlcnNpb25fZm9yX3BhcmFtZXRlcihkb21haW4sIGNvbW1hbmQuY29tbWFuZF9uYW1lLCBwYXJh
bWV0ZXIpKQorICAgICAgICAgICAgaWYgbGVuKGNvbW1hbmRfbGluZXMpOgorICAgICAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGNvbW1h
bmQuY29uZGl0aW9uLCAnXG5cbicuam9pbihjb21tYW5kX2xpbmVzKSkpCiAKICAgICAgICAgIyBB
bm9ueW1vdXMgZXZlbnQgZW51bXMuCiAgICAgICAgIGZvciBldmVudCBpbiBzZWxmLmV2ZW50c19m
b3JfZG9tYWluKGRvbWFpbik6CisgICAgICAgICAgICBldmVudF9saW5lcyA9IFtdCiAgICAgICAg
ICAgICBmb3IgcGFyYW1ldGVyIGluIGV2ZW50LmV2ZW50X3BhcmFtZXRlcnM6CiAgICAgICAgICAg
ICAgICAgaWYgKGlzaW5zdGFuY2UocGFyYW1ldGVyLnR5cGUsIEVudW1UeXBlKSBhbmQgcGFyYW1l
dGVyLnR5cGUuaXNfYW5vbnltb3VzKToKLSAgICAgICAgICAgICAgICAgICAgYWRkX25ld2xpbmUo
bGluZXMpCi0gICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9h
bm9ueW1vdXNfZW51bV9jb252ZXJzaW9uX2Zvcl9wYXJhbWV0ZXIoZG9tYWluLCBldmVudC5ldmVu
dF9uYW1lLCBwYXJhbWV0ZXIpKQorICAgICAgICAgICAgICAgICAgICBhZGRfbmV3bGluZShldmVu
dF9saW5lcykKKyAgICAgICAgICAgICAgICAgICAgZXZlbnRfbGluZXMuYXBwZW5kKHNlbGYuX2dl
bmVyYXRlX2Fub255bW91c19lbnVtX2NvbnZlcnNpb25fZm9yX3BhcmFtZXRlcihkb21haW4sIGV2
ZW50LmV2ZW50X25hbWUsIHBhcmFtZXRlcikpCisgICAgICAgICAgICBpZiBsZW4oZXZlbnRfbGlu
ZXMpOgorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9m
b3JfY29uZGl0aW9uKGV2ZW50LmNvbmRpdGlvbiwgJ1xuXG4nLmpvaW4oZXZlbnRfbGluZXMpKSkK
IAotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQotCi0gICAgZGVmIF9nZW5lcmF0ZV9l
bnVtX2NvbnZlcnNpb25fZm9yX3BsYXRmb3JtcyhzZWxmKToKLSAgICAgICAgb2JqY19lbnVtX25h
bWUgPSAnJXNQbGF0Zm9ybScgJSBzZWxmLm9iamNfcHJlZml4KCkKLSAgICAgICAgZW51bV92YWx1
ZXMgPSBbcGxhdGZvcm0ubmFtZSBmb3IgcGxhdGZvcm0gaW4gUGxhdGZvcm1zXQotICAgICAgICBs
aW5lcyA9IFtdCi0gICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9lbnVtX29iamNf
dG9fcHJvdG9jb2xfc3RyaW5nKG9iamNfZW51bV9uYW1lLCBlbnVtX3ZhbHVlcykpCi0gICAgICAg
IGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9lbnVtX2Zyb21fcHJvdG9jb2xfc3RyaW5nKG9i
amNfZW51bV9uYW1lLCBlbnVtX3ZhbHVlcykpCi0gICAgICAgIHJldHVybiAnXG5cbicuam9pbihs
aW5lcykKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24o
ZG9tYWluLmNvbmRpdGlvbiwgJ1xuXG4nLmpvaW4obGluZXMpKQogCiAgICAgZGVmIF9nZW5lcmF0
ZV9hbm9ueW1vdXNfZW51bV9jb252ZXJzaW9uX2Zvcl9kZWNsYXJhdGlvbihzZWxmLCBkb21haW4s
IGRlY2xhcmF0aW9uKToKICAgICAgICAgb2JqY19lbnVtX25hbWUgPSBzZWxmLm9iamNfZW51bV9u
YW1lX2Zvcl9hbm9ueW1vdXNfZW51bV9kZWNsYXJhdGlvbihkZWNsYXJhdGlvbikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRlX29iamNfcHJvdG9jb2xfdHlwZV9jb252ZXJzaW9uc19pbXBsZW1lbnRhdGlvbi5weSBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29i
amNfcHJvdG9jb2xfdHlwZV9jb252ZXJzaW9uc19pbXBsZW1lbnRhdGlvbi5weQppbmRleCBhMzZk
ODEzZWNlZS4uOGMxMDc3MDljYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfcHJvdG9jb2xfdHlwZV9jb252
ZXJzaW9uc19pbXBsZW1lbnRhdGlvbi5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVfY29udmVy
c2lvbnNfaW1wbGVtZW50YXRpb24ucHkKQEAgLTQzLDcgKzQzLDcgQEAgbG9nID0gbG9nZ2luZy5n
ZXRMb2dnZXIoJ2dsb2JhbCcpCiAKIAogZGVmIGFkZF9uZXdsaW5lKGxpbmVzKToKLSAgICBpZiBs
aW5lcyBhbmQgbGluZXNbLTFdID09ICcnOgorICAgIGlmIG5vdCBsZW4obGluZXMpIG9yIGxpbmVz
Wy0xXSA9PSAnJzoKICAgICAgICAgcmV0dXJuCiAgICAgbGluZXMuYXBwZW5kKCcnKQogCkBAIC04
MywxNSArODMsMTYgQEAgY2xhc3MgT2JqQ1Byb3RvY29sVHlwZUNvbnZlcnNpb25zSW1wbGVtZW50
YXRpb25HZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgZGVmIF9nZW5lcmF0ZV90eXBlX2Zh
Y3RvcnlfY2F0ZWdvcnlfaW50ZXJmYWNlKHNlbGYsIGRvbWFpbnMpOgogICAgICAgICBsaW5lcyA9
IFtdCiAgICAgICAgIGZvciBkb21haW4gaW4gZG9tYWluczoKLSAgICAgICAgICAgIGxpbmVzLmFw
cGVuZCgnQGludGVyZmFjZSAlc1R5cGVDb252ZXJzaW9ucyAoJXNEb21haW4pJyAlIChzZWxmLnBy
b3RvY29sX25hbWUoKSwgZG9tYWluLmRvbWFpbl9uYW1lKSkKLSAgICAgICAgICAgIGxpbmVzLmFw
cGVuZCgnJykKKyAgICAgICAgICAgIGRvbWFpbl9saW5lcyA9IFtdCisgICAgICAgICAgICBkb21h
aW5fbGluZXMuYXBwZW5kKCdAaW50ZXJmYWNlICVzVHlwZUNvbnZlcnNpb25zICglc0RvbWFpbikn
ICUgKHNlbGYucHJvdG9jb2xfbmFtZSgpLCBkb21haW4uZG9tYWluX25hbWUpKQorICAgICAgICAg
ICAgYWRkX25ld2xpbmUoZG9tYWluX2xpbmVzKQogCiAgICAgICAgICAgICBmb3IgZGVjbGFyYXRp
b24gaW4gc2VsZi50eXBlX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluKGRvbWFpbik6Ci0gICAgICAg
ICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX3R5cGVfZmFjdG9yeV9tZXRob2Rf
ZGVjbGFyYXRpb24oZG9tYWluLCBkZWNsYXJhdGlvbikpCi0KLSAgICAgICAgICAgIGFkZF9uZXds
aW5lKGxpbmVzKQotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdAZW5kJykKKyAgICAgICAgICAg
ICAgICBkb21haW5fbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX3R5cGVfZmFjdG9yeV9tZXRo
b2RfZGVjbGFyYXRpb24oZG9tYWluLCBkZWNsYXJhdGlvbikpCiAKKyAgICAgICAgICAgIGFkZF9u
ZXdsaW5lKGRvbWFpbl9saW5lcykKKyAgICAgICAgICAgIGRvbWFpbl9saW5lcy5hcHBlbmQoJ0Bl
bmQnKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9j
b25kaXRpb24oZG9tYWluLmNvbmRpdGlvbiwgJ1xuJy5qb2luKGRvbWFpbl9saW5lcykpKQogICAg
ICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQogCiAgICAgZGVmIF9nZW5lcmF0ZV90eXBlX2Zh
Y3RvcnlfbWV0aG9kX2RlY2xhcmF0aW9uKHNlbGYsIGRvbWFpbiwgZGVjbGFyYXRpb24pOgpAQCAt
MTAwLDIwICsxMDEsMjMgQEAgY2xhc3MgT2JqQ1Byb3RvY29sVHlwZUNvbnZlcnNpb25zSW1wbGVt
ZW50YXRpb25HZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgICAgICAgICByZXNvbHZlZF90
eXBlID0gcmVzb2x2ZWRfdHlwZS5hbGlhc2VkX3R5cGUKICAgICAgICAgaWYgaXNpbnN0YW5jZShy
ZXNvbHZlZF90eXBlLCAoT2JqZWN0VHlwZSwgQXJyYXlUeXBlLCBQcmltaXRpdmVUeXBlKSk6CiAg
ICAgICAgICAgICBvYmpjX3R5cGUgPSBzZWxmLm9iamNfY2xhc3NfZm9yX3R5cGUocmVzb2x2ZWRf
dHlwZSkKLSAgICAgICAgICAgIHJldHVybiAnKyAodm9pZClfcGFyc2UlczooJXMgKiopb3V0VmFs
dWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7JyAlIChkZWNsYXJhdGlvbi50eXBlLnJhd19uYW1l
KCksIG9iamNfdHlwZSkKKyAgICAgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9m
b3JfY29uZGl0aW9uKGRlY2xhcmF0aW9uLmNvbmRpdGlvbiwgJysgKHZvaWQpX3BhcnNlJXM6KCVz
ICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOycgJSAoZGVjbGFyYXRpb24udHlw
ZS5yYXdfbmFtZSgpLCBvYmpjX3R5cGUpKQogICAgICAgICBpZiBpc2luc3RhbmNlKHJlc29sdmVk
X3R5cGUsIEVudW1UeXBlKToKLSAgICAgICAgICAgIHJldHVybiAnKyAodm9pZClfcGFyc2Ulczoo
TlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7JyAlIGRlY2xhcmF0
aW9uLnR5cGUucmF3X25hbWUoKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1
YXJkX2Zvcl9jb25kaXRpb24oZGVjbGFyYXRpb24uY29uZGl0aW9uLCAnKyAodm9pZClfcGFyc2Ul
czooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7JyAlIGRlY2xh
cmF0aW9uLnR5cGUucmF3X25hbWUoKSkKIAogICAgIGRlZiBfZ2VuZXJhdGVfdHlwZV9mYWN0b3J5
X2NhdGVnb3J5X2ltcGxlbWVudGF0aW9uKHNlbGYsIGRvbWFpbnMpOgogICAgICAgICBsaW5lcyA9
IFtdCiAgICAgICAgIGZvciBkb21haW4gaW4gZG9tYWluczoKLSAgICAgICAgICAgIGxpbmVzLmFw
cGVuZCgnQGltcGxlbWVudGF0aW9uICVzVHlwZUNvbnZlcnNpb25zICglc0RvbWFpbiknICUgKHNl
bGYucHJvdG9jb2xfbmFtZSgpLCBkb21haW4uZG9tYWluX25hbWUpKQotICAgICAgICAgICAgbGlu
ZXMuYXBwZW5kKCcnKQorICAgICAgICAgICAgZG9tYWluX2xpbmVzID0gW10KKyAgICAgICAgICAg
IGRvbWFpbl9saW5lcy5hcHBlbmQoJ0BpbXBsZW1lbnRhdGlvbiAlc1R5cGVDb252ZXJzaW9ucyAo
JXNEb21haW4pJyAlIChzZWxmLnByb3RvY29sX25hbWUoKSwgZG9tYWluLmRvbWFpbl9uYW1lKSkK
KyAgICAgICAgICAgIGFkZF9uZXdsaW5lKGRvbWFpbl9saW5lcykKIAogICAgICAgICAgICAgZm9y
IGRlY2xhcmF0aW9uIGluIHNlbGYudHlwZV9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbihkb21haW4p
OgotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV90eXBlX2ZhY3Rv
cnlfbWV0aG9kX2ltcGxlbWVudGF0aW9uKGRvbWFpbiwgZGVjbGFyYXRpb24pKQotICAgICAgICAg
ICAgICAgIGFkZF9uZXdsaW5lKGxpbmVzKQotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdAZW5k
JykKKyAgICAgICAgICAgICAgICBkb21haW5fbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX3R5
cGVfZmFjdG9yeV9tZXRob2RfaW1wbGVtZW50YXRpb24oZG9tYWluLCBkZWNsYXJhdGlvbikpCisg
ICAgICAgICAgICAgICAgYWRkX25ld2xpbmUoZG9tYWluX2xpbmVzKQorCisgICAgICAgICAgICBk
b21haW5fbGluZXMuYXBwZW5kKCdAZW5kJykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxm
LndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRvbWFpbi5jb25kaXRpb24sICdcbicuam9p
bihkb21haW5fbGluZXMpKSkKICAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKIAogICAg
IGRlZiBfZ2VuZXJhdGVfdHlwZV9mYWN0b3J5X21ldGhvZF9pbXBsZW1lbnRhdGlvbihzZWxmLCBk
b21haW4sIGRlY2xhcmF0aW9uKToKQEAgLTE0MSw0ICsxNDUsNCBAQCBjbGFzcyBPYmpDUHJvdG9j
b2xUeXBlQ29udmVyc2lvbnNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToK
ICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZ
UEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOycpCiAgICAgICAgICAgICBsaW5lcy5h
cHBlbmQoJyAgICAqb3V0VmFsdWUgPSBbWyVzIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9h
ZF07JyAlIChvYmpjX2NsYXNzKSkKICAgICAgICAgbGluZXMuYXBwZW5kKCd9JykKLSAgICAgICAg
cmV0dXJuICdcbicuam9pbihsaW5lcykKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1
YXJkX2Zvcl9jb25kaXRpb24oZGVjbGFyYXRpb24uY29uZGl0aW9uLCAnXG4nLmpvaW4obGluZXMp
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weSBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29i
amNfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkKaW5kZXggYzg3MDg4MWFiZDguLmEw
ZTdiOTAwNDQ1IDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9u
LnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L2dlbmVyYXRlX29iamNfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkKQEAgLTQ0LDcg
KzQ0LDcgQEAgbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCiAKIAogZGVmIGFkZF9u
ZXdsaW5lKGxpbmVzKToKLSAgICBpZiBsaW5lcyBhbmQgbGluZXNbLTFdID09ICcnOgorICAgIGlm
IG5vdCBsZW4obGluZXMpIG9yIGxpbmVzWy0xXSA9PSAnJzoKICAgICAgICAgcmV0dXJuCiAgICAg
bGluZXMuYXBwZW5kKCcnKQogCkBAIC05MSw3ICs5MSw3IEBAIGNsYXNzIE9iakNQcm90b2NvbFR5
cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgICAgICAgICBp
ZiAoaXNpbnN0YW5jZShkZWNsYXJhdGlvbi50eXBlLCBPYmplY3RUeXBlKSk6CiAgICAgICAgICAg
ICAgICAgYWRkX25ld2xpbmUobGluZXMpCiAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNl
bGYuZ2VuZXJhdGVfdHlwZV9pbXBsZW1lbnRhdGlvbihkb21haW4sIGRlY2xhcmF0aW9uKSkKLSAg
ICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93
aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZG9tYWluLmNvbmRpdGlvbiwgJ1xuJy5qb2luKGxpbmVz
KSkKIAogICAgIGRlZiBnZW5lcmF0ZV90eXBlX2ltcGxlbWVudGF0aW9uKHNlbGYsIGRvbWFpbiwg
ZGVjbGFyYXRpb24pOgogICAgICAgICBsaW5lcyA9IFtdCkBAIC0xMTIsNyArMTEyLDcgQEAgY2xh
c3MgT2JqQ1Byb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihPYmpDR2VuZXJhdG9y
KToKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9nZXR0ZXJfZm9yX21l
bWJlcihkb21haW4sIGRlY2xhcmF0aW9uLCBtZW1iZXIpKQogICAgICAgICBsaW5lcy5hcHBlbmQo
JycpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnQGVuZCcpCi0gICAgICAgIHJldHVybiAnXG4nLmpv
aW4obGluZXMpCisgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0
aW9uKGRlY2xhcmF0aW9uLmNvbmRpdGlvbiwgJ1xuJy5qb2luKGxpbmVzKSkKIAogICAgIGRlZiBf
Z2VuZXJhdGVfaW5pdF9tZXRob2RfZm9yX3Byb3RvY29sX29iamVjdChzZWxmLCBkb21haW4sIGRl
Y2xhcmF0aW9uKToKICAgICAgICAgbGluZXMgPSBbXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yLnB5IGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yLnB5Cmlu
ZGV4IDhjMmZiYjhiYzUyLi45NGQxOGQ5ZDY2MSAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yLnB5CisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRvci5weQpA
QCAtMzEsMTAgKzMxLDEwIEBAIGZyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQogCiB0cnk6CiAg
ICAgZnJvbSAuZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgR2VuZXJhdG9yVGVtcGxhdGVzIGFz
IFRlbXBsYXRlcwotICAgIGZyb20gLm1vZGVscyBpbXBvcnQgUHJpbWl0aXZlVHlwZSwgT2JqZWN0
VHlwZSwgQXJyYXlUeXBlLCBFbnVtVHlwZSwgQWxpYXNlZFR5cGUsIEZyYW1ld29ya3MsIFBsYXRm
b3JtcworICAgIGZyb20gLm1vZGVscyBpbXBvcnQgUHJpbWl0aXZlVHlwZSwgT2JqZWN0VHlwZSwg
QXJyYXlUeXBlLCBFbnVtVHlwZSwgQWxpYXNlZFR5cGUsIEZyYW1ld29ya3MKIGV4Y2VwdCBWYWx1
ZUVycm9yOgogICAgIGZyb20gZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgR2VuZXJhdG9yVGVt
cGxhdGVzIGFzIFRlbXBsYXRlcwotICAgIGZyb20gbW9kZWxzIGltcG9ydCBQcmltaXRpdmVUeXBl
LCBPYmplY3RUeXBlLCBBcnJheVR5cGUsIEVudW1UeXBlLCBBbGlhc2VkVHlwZSwgRnJhbWV3b3Jr
cywgUGxhdGZvcm1zCisgICAgZnJvbSBtb2RlbHMgaW1wb3J0IFByaW1pdGl2ZVR5cGUsIE9iamVj
dFR5cGUsIEFycmF5VHlwZSwgRW51bVR5cGUsIEFsaWFzZWRUeXBlLCBGcmFtZXdvcmtzCiAKIGxv
ZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQogCkBAIC05NCwzNSArOTQsMjggQEAgX1RZ
UEVTX1dJVEhfT1BFTl9GSUVMRFMgPSB7CiB9CiAKIGNsYXNzIEdlbmVyYXRvcjoKLSAgICBkZWYg
X19pbml0X18oc2VsZiwgbW9kZWwsIHBsYXRmb3JtLCBpbnB1dF9maWxlcGF0aCk6CisgICAgZGVm
IF9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6CiAgICAgICAgIHNlbGYuX21v
ZGVsID0gbW9kZWwKLSAgICAgICAgc2VsZi5fcGxhdGZvcm0gPSBwbGF0Zm9ybQogICAgICAgICBz
ZWxmLl9pbnB1dF9maWxlcGF0aCA9IGlucHV0X2ZpbGVwYXRoCiAgICAgICAgIHNlbGYuX3NldHRp
bmdzID0ge30KIAogICAgIGRlZiBtb2RlbChzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuX21v
ZGVsCiAKLSAgICBkZWYgcGxhdGZvcm0oc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLl9wbGF0
Zm9ybQotCiAgICAgZGVmIHNldF9nZW5lcmF0b3Jfc2V0dGluZyhzZWxmLCBrZXksIHZhbHVlKToK
ICAgICAgICAgc2VsZi5fc2V0dGluZ3Nba2V5XSA9IHZhbHVlCiAKLSAgICBkZWYgY2FuX2dlbmVy
YXRlX3BsYXRmb3JtKHNlbGYsIG1vZGVsX3BsYXRmb3JtKToKLSAgICAgICAgcmV0dXJuIG1vZGVs
X3BsYXRmb3JtIGlzIFBsYXRmb3Jtcy5HZW5lcmljIG9yIHNlbGYuX3BsYXRmb3JtIGlzIFBsYXRm
b3Jtcy5BbGwgb3IgbW9kZWxfcGxhdGZvcm0gaXMgc2VsZi5fcGxhdGZvcm0KLQogICAgIGRlZiB2
ZXJzaW9uX2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToKICAgICAgICAgcmV0dXJuIGRvbWFpbi52
ZXJzaW9uKCkKIAogICAgIGRlZiB0eXBlX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluKHNlbGYsIGRv
bWFpbik6Ci0gICAgICAgIHJldHVybiBbdHlwZV9kZWNsYXJhdGlvbiBmb3IgdHlwZV9kZWNsYXJh
dGlvbiBpbiBkb21haW4uYWxsX3R5cGVfZGVjbGFyYXRpb25zKCkgaWYgc2VsZi5jYW5fZ2VuZXJh
dGVfcGxhdGZvcm0odHlwZV9kZWNsYXJhdGlvbi5wbGF0Zm9ybSldCisgICAgICAgIHJldHVybiBk
b21haW4uYWxsX3R5cGVfZGVjbGFyYXRpb25zKCkKIAogICAgIGRlZiBjb21tYW5kc19mb3JfZG9t
YWluKHNlbGYsIGRvbWFpbik6Ci0gICAgICAgIHJldHVybiBbY29tbWFuZCBmb3IgY29tbWFuZCBp
biBkb21haW4uYWxsX2NvbW1hbmRzKCkgaWYgc2VsZi5jYW5fZ2VuZXJhdGVfcGxhdGZvcm0oY29t
bWFuZC5wbGF0Zm9ybSldCisgICAgICAgIHJldHVybiBkb21haW4uYWxsX2NvbW1hbmRzKCkKIAog
ICAgIGRlZiBldmVudHNfZm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgotICAgICAgICByZXR1cm4g
W2V2ZW50IGZvciBldmVudCBpbiBkb21haW4uYWxsX2V2ZW50cygpIGlmIHNlbGYuY2FuX2dlbmVy
YXRlX3BsYXRmb3JtKGV2ZW50LnBsYXRmb3JtKV0KKyAgICAgICAgcmV0dXJuIGRvbWFpbi5hbGxf
ZXZlbnRzKCkKIAogICAgICMgVGhlIGdvb2Z5IG5hbWUgaXMgdG8gZGlzYW1iaWd1YXRlIGdlbmVy
YXRvciBzZXR0aW5ncyBmcm9tIGZyYW1ld29yayBzZXR0aW5ncy4KICAgICBkZWYgZ2V0X2dlbmVy
YXRvcl9zZXR0aW5nKHNlbGYsIGtleSwgZGVmYXVsdD1Ob25lKToKQEAgLTI2NywyMiArMjYwLDE1
IEBAIGNsYXNzIEdlbmVyYXRvcjoKICAgICAgICAgc2VsZi5fYXNzaWduZWRfZW51bV92YWx1ZXMu
YXBwZW5kKGVudW1fdmFsdWUpCiAKICAgICAjIE1pc2NlbGxhbmVvdXMgdGV4dCBtYW5pcHVsYXRp
b24gcm91dGluZXMuCi0gICAgZGVmIHdyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKHNlbGYsIGRv
bWFpbiwgdGV4dCk6Ci0gICAgICAgIGlmIHNlbGYubW9kZWwoKS5mcmFtZXdvcmsgaXMgRnJhbWV3
b3Jrcy5XZWJJbnNwZWN0b3I6Ci0gICAgICAgICAgICByZXR1cm4gdGV4dAotICAgICAgICBndWFy
ZCA9IGRvbWFpbi5mZWF0dXJlX2d1YXJkCi0gICAgICAgIGlmIGd1YXJkOgotICAgICAgICAgICAg
cmV0dXJuIEdlbmVyYXRvci53cmFwX3dpdGhfZ3VhcmQoZ3VhcmQsIHRleHQpCisgICAgZGVmIHdy
YXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKHNlbGYsIGNvbmRpdGlvbiwgdGV4dCk6CisgICAg
ICAgIGlmIGNvbmRpdGlvbjoKKyAgICAgICAgICAgIHJldHVybiAnXG4nLmpvaW4oWworICAgICAg
ICAgICAgICAgICcjaWYgJXMnICUgY29uZGl0aW9uLAorICAgICAgICAgICAgICAgIHRleHQsCisg
ICAgICAgICAgICAgICAgJyNlbmRpZiAvLyAlcycgJSBjb25kaXRpb24sCisgICAgICAgICAgICBd
KQogICAgICAgICByZXR1cm4gdGV4dAogCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiB3cmFw
X3dpdGhfZ3VhcmQoZ3VhcmQsIHRleHQpOgotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKFsKLSAg
ICAgICAgICAgICcjaWYgJXMnICUgZ3VhcmQsCi0gICAgICAgICAgICB0ZXh0LAotICAgICAgICAg
ICAgJyNlbmRpZiAvLyAlcycgJSBndWFyZCwKLSAgICAgICAgXSkKLQogICAgIEBzdGF0aWNtZXRo
b2QKICAgICBkZWYgc3R5bGl6ZWRfbmFtZV9mb3JfZW51bV92YWx1ZShlbnVtX3ZhbHVlKToKICAg
ICAgICAgcmVnZXggPSAnKCVzKScgJSAifCIuam9pbihfQUxXQVlTX1NQRUNJQUxDQVNFRF9FTlVN
X1ZBTFVFX1NVQlNUUklOR1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9tb2RlbHMucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9tb2RlbHMucHkKaW5kZXggNmQ5N2EwOTNjMzQuLjFk
ZjJiZGY2NjVhIDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9tb2RlbHMucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vbW9kZWxzLnB5CkBAIC0xMzYsNDEgKzEzNiw2IEBAIGNsYXNz
IEZyYW1ld29ya3M6CiAgICAgVGVzdCA9IEZyYW1ld29yaygiVGVzdCIpCiAKIAotY2xhc3MgUGxh
dGZvcm06Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgotICAgICAgICBzZWxmLm5hbWUg
PSBuYW1lCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIGZyb21TdHJpbmcocGxhdGZvcm1T
dHJpbmcpOgotICAgICAgICBwbGF0Zm9ybVN0cmluZyA9IHBsYXRmb3JtU3RyaW5nLmxvd2VyKCkK
LSAgICAgICAgaWYgcGxhdGZvcm1TdHJpbmcgPT0gImlvcyI6Ci0gICAgICAgICAgICByZXR1cm4g
UGxhdGZvcm1zLmlPUwotCi0gICAgICAgIGlmIHBsYXRmb3JtU3RyaW5nID09ICJtYWNvcyI6Ci0g
ICAgICAgICAgICByZXR1cm4gUGxhdGZvcm1zLm1hY09TCi0KLSAgICAgICAgaWYgcGxhdGZvcm1T
dHJpbmcgPT0gImFsbCI6Ci0gICAgICAgICAgICByZXR1cm4gUGxhdGZvcm1zLkFsbAotCi0gICAg
ICAgIGlmIHBsYXRmb3JtU3RyaW5nID09ICJnZW5lcmljIiBvciBub3QgcGxhdGZvcm1TdHJpbmc6
Ci0gICAgICAgICAgICByZXR1cm4gUGxhdGZvcm1zLkdlbmVyaWMKLQotICAgICAgICByYWlzZSBQ
YXJzZUV4Y2VwdGlvbigiVW5rbm93biBwbGF0Zm9ybTogJXMiICUgcGxhdGZvcm1TdHJpbmcpCi0K
LQotY2xhc3MgUGxhdGZvcm1zOgotICAgIEFsbCA9IFBsYXRmb3JtKCJhbGwiKQotICAgIEdlbmVy
aWMgPSBQbGF0Zm9ybSgiZ2VuZXJpYyIpCi0gICAgaU9TID0gUGxhdGZvcm0oImlvcyIpCi0gICAg
bWFjT1MgPSBQbGF0Zm9ybSgibWFjb3MiKQotCi0gICAgIyBBbGxvdyBpdGVyYXRpb24gb3ZlciBh
bGwgcGxhdGZvcm1zLiBTZWUgPGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNTQz
NDQwMC8+LgotICAgIGNsYXNzIF9fbWV0YWNsYXNzX18odHlwZSk6Ci0gICAgICAgIGRlZiBfX2l0
ZXJfXyhzZWxmKToKLSAgICAgICAgICAgIGZvciBhdHRyIGluIGRpcihQbGF0Zm9ybXMpOgotICAg
ICAgICAgICAgICAgIGlmIG5vdCBhdHRyLnN0YXJ0c3dpdGgoIl9fIik6Ci0gICAgICAgICAgICAg
ICAgICAgIHlpZWxkIGdldGF0dHIoUGxhdGZvcm1zLCBhdHRyKQotCiBjbGFzcyBUeXBlUmVmZXJl
bmNlOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0eXBlX2tpbmQsIHJlZmVyZW5jZWRfdHlwZV9u
YW1lLCBlbnVtX3ZhbHVlcywgYXJyYXlfaXRlbXMpOgogICAgICAgICBzZWxmLnR5cGVfa2luZCA9
IHR5cGVfa2luZApAQCAtNDM5LDcgKzQwNCw3IEBAIGNsYXNzIFByb3RvY29sOgogICAgICAgICAg
ICAgICAgIHJhaXNlIFBhcnNlRXhjZXB0aW9uKCJNYWxmb3JtZWQgZG9tYWluIHNwZWNpZmljYXRp
b246IGV2ZW50cyBpcyBub3QgYW4gYXJyYXkiKQogICAgICAgICAgICAgZXZlbnRzLmV4dGVuZChb
c2VsZi5wYXJzZV9ldmVudChldmVudCwgZGVidWdnYWJsZV90eXBlcykgZm9yIGV2ZW50IGluIGpz
b25bJ2V2ZW50cyddXSkKIAotICAgICAgICBzZWxmLmRvbWFpbnMuYXBwZW5kKERvbWFpbihqc29u
Wydkb21haW4nXSwganNvbi5nZXQoJ2Rlc2NyaXB0aW9uJywgJycpLCBqc29uLmdldCgnZmVhdHVy
ZUd1YXJkJyksIGRlYnVnZ2FibGVfdHlwZXMsIHRhcmdldF90eXBlcywgaXNTdXBwbGVtZW50YWws
IHZlcnNpb24sIHR5cGVzLCBjb21tYW5kcywgZXZlbnRzKSkKKyAgICAgICAgc2VsZi5kb21haW5z
LmFwcGVuZChEb21haW4oanNvblsnZG9tYWluJ10sIGpzb24uZ2V0KCdkZXNjcmlwdGlvbicsICcn
KSwganNvbi5nZXQoJ2NvbmRpdGlvbicpLCBkZWJ1Z2dhYmxlX3R5cGVzLCB0YXJnZXRfdHlwZXMs
IGlzU3VwcGxlbWVudGFsLCB2ZXJzaW9uLCB0eXBlcywgY29tbWFuZHMsIGV2ZW50cykpCiAKICAg
ICBkZWYgcGFyc2VfdHlwZV9kZWNsYXJhdGlvbihzZWxmLCBqc29uKToKICAgICAgICAgY2hlY2tf
Zm9yX3JlcXVpcmVkX3Byb3BlcnRpZXMoWydpZCcsICd0eXBlJ10sIGpzb24sICJ0eXBlIikKQEAg
LTQ1Nyw4ICs0MjIsNyBAQCBjbGFzcyBQcm90b2NvbDoKICAgICAgICAgICAgIHJhaXNlIFBhcnNl
RXhjZXB0aW9uKCJNYWxmb3JtZWQgZG9tYWluIHNwZWNpZmljYXRpb246IHR5cGUgZGVjbGFyYXRp
b24gZm9yICVzIGhhcyBkdXBsaWNhdGUgbWVtYmVyIG5hbWVzIiAlIGpzb25bJ2lkJ10pCiAKICAg
ICAgICAgdHlwZV9yZWYgPSBUeXBlUmVmZXJlbmNlKGpzb25bJ3R5cGUnXSwganNvbi5nZXQoJyRy
ZWYnKSwganNvbi5nZXQoJ2VudW0nKSwganNvbi5nZXQoJ2l0ZW1zJykpCi0gICAgICAgIHBsYXRm
b3JtID0gUGxhdGZvcm0uZnJvbVN0cmluZyhqc29uLmdldCgncGxhdGZvcm0nLCAnZ2VuZXJpYycp
KQotICAgICAgICByZXR1cm4gVHlwZURlY2xhcmF0aW9uKGpzb25bJ2lkJ10sIHR5cGVfcmVmLCBq
c29uLmdldCgiZGVzY3JpcHRpb24iLCAiIiksIHBsYXRmb3JtLCB0eXBlX21lbWJlcnMpCisgICAg
ICAgIHJldHVybiBUeXBlRGVjbGFyYXRpb24oanNvblsnaWQnXSwgdHlwZV9yZWYsIGpzb24uZ2V0
KCJkZXNjcmlwdGlvbiIsICIiKSwganNvbi5nZXQoJ2NvbmRpdGlvbicpLCB0eXBlX21lbWJlcnMp
CiAKICAgICBkZWYgcGFyc2VfdHlwZV9tZW1iZXIoc2VsZiwganNvbik6CiAgICAgICAgIGNoZWNr
X2Zvcl9yZXF1aXJlZF9wcm9wZXJ0aWVzKFsnbmFtZSddLCBqc29uLCAidHlwZSBtZW1iZXIiKQpA
QCAtNTA5LDggKzQ3Myw3IEBAIGNsYXNzIFByb3RvY29sOgogICAgICAgICAgICAgaWYgbGVuKGR1
cGxpY2F0ZV9uYW1lcykgPiAwOgogICAgICAgICAgICAgICAgIHJhaXNlIFBhcnNlRXhjZXB0aW9u
KCJNYWxmb3JtZWQgZG9tYWluIHNwZWNpZmljYXRpb246IHJldHVybiBwYXJhbWV0ZXIgbGlzdCBm
b3IgY29tbWFuZCAlcyBoYXMgZHVwbGljYXRlIHBhcmFtZXRlciBuYW1lcyIgJSBqc29uWyduYW1l
J10pCiAKLSAgICAgICAgcGxhdGZvcm0gPSBQbGF0Zm9ybS5mcm9tU3RyaW5nKGpzb24uZ2V0KCdw
bGF0Zm9ybScsICdnZW5lcmljJykpCi0gICAgICAgIHJldHVybiBDb21tYW5kKGpzb25bJ25hbWUn
XSwgdGFyZ2V0X3R5cGVzLCBjYWxsX3BhcmFtZXRlcnMsIHJldHVybl9wYXJhbWV0ZXJzLCBqc29u
LmdldCgnZGVzY3JpcHRpb24nLCAiIiksIHBsYXRmb3JtLCBqc29uLmdldCgnYXN5bmMnLCBGYWxz
ZSkpCisgICAgICAgIHJldHVybiBDb21tYW5kKGpzb25bJ25hbWUnXSwgdGFyZ2V0X3R5cGVzLCBj
YWxsX3BhcmFtZXRlcnMsIHJldHVybl9wYXJhbWV0ZXJzLCBqc29uLmdldCgnZGVzY3JpcHRpb24n
LCAiIiksIGpzb24uZ2V0KCdjb25kaXRpb24nKSwganNvbi5nZXQoJ2FzeW5jJywgRmFsc2UpKQog
CiAgICAgZGVmIHBhcnNlX2V2ZW50KHNlbGYsIGpzb24sIGRlYnVnZ2FibGVfdHlwZXMpOgogICAg
ICAgICBjaGVja19mb3JfcmVxdWlyZWRfcHJvcGVydGllcyhbJ25hbWUnXSwganNvbiwgImV2ZW50
IikKQEAgLTU0NCw4ICs1MDcsNyBAQCBjbGFzcyBQcm90b2NvbDoKICAgICAgICAgICAgIGlmIGxl
bihkdXBsaWNhdGVfbmFtZXMpID4gMDoKICAgICAgICAgICAgICAgICByYWlzZSBQYXJzZUV4Y2Vw
dGlvbigiTWFsZm9ybWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9uOiBwYXJhbWV0ZXIgbGlzdCBmb3Ig
ZXZlbnQgJXMgaGFzIGR1cGxpY2F0ZSBwYXJhbWV0ZXIgbmFtZXMiICUganNvblsnbmFtZSddKQog
Ci0gICAgICAgIHBsYXRmb3JtID0gUGxhdGZvcm0uZnJvbVN0cmluZyhqc29uLmdldCgncGxhdGZv
cm0nLCAnZ2VuZXJpYycpKQotICAgICAgICByZXR1cm4gRXZlbnQoanNvblsnbmFtZSddLCB0YXJn
ZXRfdHlwZXMsIGV2ZW50X3BhcmFtZXRlcnMsIGpzb24uZ2V0KCdkZXNjcmlwdGlvbicsICIiKSwg
cGxhdGZvcm0pCisgICAgICAgIHJldHVybiBFdmVudChqc29uWyduYW1lJ10sIHRhcmdldF90eXBl
cywgZXZlbnRfcGFyYW1ldGVycywganNvbi5nZXQoJ2Rlc2NyaXB0aW9uJywgIiIpLCBqc29uLmdl
dCgnY29uZGl0aW9uJykpCiAKICAgICBkZWYgcGFyc2VfY2FsbF9vcl9yZXR1cm5fcGFyYW1ldGVy
KHNlbGYsIGpzb24pOgogICAgICAgICBjaGVja19mb3JfcmVxdWlyZWRfcHJvcGVydGllcyhbJ25h
bWUnXSwganNvbiwgInBhcmFtZXRlciIpCkBAIC02NDMsMTAgKzYwNSwxMCBAQCBjbGFzcyBQcm90
b2NvbDoKIAogCiBjbGFzcyBEb21haW46Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGRvbWFpbl9u
YW1lLCBkZXNjcmlwdGlvbiwgZmVhdHVyZV9ndWFyZCwgZGVidWdnYWJsZV90eXBlcywgdGFyZ2V0
X3R5cGVzLCBpc1N1cHBsZW1lbnRhbCwgdmVyc2lvbiwgdHlwZV9kZWNsYXJhdGlvbnMsIGNvbW1h
bmRzLCBldmVudHMpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkb21haW5fbmFtZSwgZGVzY3Jp
cHRpb24sIGNvbmRpdGlvbiwgZGVidWdnYWJsZV90eXBlcywgdGFyZ2V0X3R5cGVzLCBpc1N1cHBs
ZW1lbnRhbCwgdmVyc2lvbiwgdHlwZV9kZWNsYXJhdGlvbnMsIGNvbW1hbmRzLCBldmVudHMpOgog
ICAgICAgICBzZWxmLmRvbWFpbl9uYW1lID0gZG9tYWluX25hbWUKICAgICAgICAgc2VsZi5kZXNj
cmlwdGlvbiA9IGRlc2NyaXB0aW9uCi0gICAgICAgIHNlbGYuZmVhdHVyZV9ndWFyZCA9IGZlYXR1
cmVfZ3VhcmQKKyAgICAgICAgc2VsZi5jb25kaXRpb24gPSBjb25kaXRpb24KICAgICAgICAgc2Vs
Zi5kZWJ1Z2dhYmxlX3R5cGVzID0gZGVidWdnYWJsZV90eXBlcwogICAgICAgICBzZWxmLnRhcmdl
dF90eXBlcyA9IHRhcmdldF90eXBlcwogICAgICAgICBzZWxmLmlzX3N1cHBsZW1lbnRhbCA9IGlz
U3VwcGxlbWVudGFsCkBAIC02ODYsMTEgKzY0OCwxMSBAQCBjbGFzcyBEb21haW5zOgogCiAKIGNs
YXNzIFR5cGVEZWNsYXJhdGlvbjoKLSAgICBkZWYgX19pbml0X18oc2VsZiwgdHlwZV9uYW1lLCB0
eXBlX3JlZiwgZGVzY3JpcHRpb24sIHBsYXRmb3JtLCB0eXBlX21lbWJlcnMpOgorICAgIGRlZiBf
X2luaXRfXyhzZWxmLCB0eXBlX25hbWUsIHR5cGVfcmVmLCBkZXNjcmlwdGlvbiwgY29uZGl0aW9u
LCB0eXBlX21lbWJlcnMpOgogICAgICAgICBzZWxmLnR5cGVfbmFtZSA9IHR5cGVfbmFtZQogICAg
ICAgICBzZWxmLnR5cGVfcmVmID0gdHlwZV9yZWYKICAgICAgICAgc2VsZi5kZXNjcmlwdGlvbiA9
IGRlc2NyaXB0aW9uCi0gICAgICAgIHNlbGYucGxhdGZvcm0gPSBwbGF0Zm9ybQorICAgICAgICBz
ZWxmLmNvbmRpdGlvbiA9IGNvbmRpdGlvbgogICAgICAgICBzZWxmLnR5cGVfbWVtYmVycyA9IHR5
cGVfbWVtYmVycwogCiAgICAgICAgIGlmIHNlbGYudHlwZV9uYW1lICE9IHVjZmlyc3Qoc2VsZi50
eXBlX25hbWUpOgpAQCAtNzM0LDEzICs2OTYsMTMgQEAgY2xhc3MgUGFyYW1ldGVyOgogCiAKIGNs
YXNzIENvbW1hbmQ6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbW1hbmRfbmFtZSwgdGFyZ2V0
X3R5cGVzLCBjYWxsX3BhcmFtZXRlcnMsIHJldHVybl9wYXJhbWV0ZXJzLCBkZXNjcmlwdGlvbiwg
cGxhdGZvcm0sIGlzX2FzeW5jKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29tbWFuZF9uYW1l
LCB0YXJnZXRfdHlwZXMsIGNhbGxfcGFyYW1ldGVycywgcmV0dXJuX3BhcmFtZXRlcnMsIGRlc2Ny
aXB0aW9uLCBjb25kaXRpb24sIGlzX2FzeW5jKToKICAgICAgICAgc2VsZi5jb21tYW5kX25hbWUg
PSBjb21tYW5kX25hbWUKICAgICAgICAgc2VsZi50YXJnZXRfdHlwZXMgPSB0YXJnZXRfdHlwZXMK
ICAgICAgICAgc2VsZi5jYWxsX3BhcmFtZXRlcnMgPSBjYWxsX3BhcmFtZXRlcnMKICAgICAgICAg
c2VsZi5yZXR1cm5fcGFyYW1ldGVycyA9IHJldHVybl9wYXJhbWV0ZXJzCiAgICAgICAgIHNlbGYu
ZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbgotICAgICAgICBzZWxmLnBsYXRmb3JtID0gcGxhdGZv
cm0KKyAgICAgICAgc2VsZi5jb25kaXRpb24gPSBjb25kaXRpb24KICAgICAgICAgc2VsZi5pc19h
c3luYyA9IGlzX2FzeW5jCiAKICAgICBkZWYgcmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMoc2VsZiwg
cHJvdG9jb2wsIGRvbWFpbik6CkBAIC03NTQsMTIgKzcxNiwxMiBAQCBjbGFzcyBDb21tYW5kOgog
CiAKIGNsYXNzIEV2ZW50OgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBldmVudF9uYW1lLCB0YXJn
ZXRfdHlwZXMsIGV2ZW50X3BhcmFtZXRlcnMsIGRlc2NyaXB0aW9uLCBwbGF0Zm9ybSk6CisgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIGV2ZW50X25hbWUsIHRhcmdldF90eXBlcywgZXZlbnRfcGFyYW1l
dGVycywgZGVzY3JpcHRpb24sIGNvbmRpdGlvbik6CiAgICAgICAgIHNlbGYuZXZlbnRfbmFtZSA9
IGV2ZW50X25hbWUKICAgICAgICAgc2VsZi50YXJnZXRfdHlwZXMgPSB0YXJnZXRfdHlwZXMKICAg
ICAgICAgc2VsZi5ldmVudF9wYXJhbWV0ZXJzID0gZXZlbnRfcGFyYW1ldGVycwogICAgICAgICBz
ZWxmLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24KLSAgICAgICAgc2VsZi5wbGF0Zm9ybSA9IHBs
YXRmb3JtCisgICAgICAgIHNlbGYuY29uZGl0aW9uID0gY29uZGl0aW9uCiAKICAgICBkZWYgcmVz
b2x2ZV90eXBlX3JlZmVyZW5jZXMoc2VsZiwgcHJvdG9jb2wsIGRvbWFpbik6CiAgICAgICAgIGxv
Zy5kZWJ1ZygiPj4gUmVzb2x2aW5nIHR5cGUgcmVmZXJlbmNlcyBmb3IgcGFyYW1ldGVycyBpbiBl
dmVudDogJXMiICUgc2VsZi5ldmVudF9uYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vb2JqY19nZW5lcmF0b3JfdGVtcGxhdGVz
LnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vb2Jq
Y19nZW5lcmF0b3JfdGVtcGxhdGVzLnB5CmluZGV4IDIyNzQyMTUxOTk0Li4wODk5NThiZDk4OSAx
MDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVn
ZW4vb2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL29iamNfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weQpA
QCAtMzEsNiArMzEsNyBAQCBjbGFzcyBPYmpDR2VuZXJhdG9yVGVtcGxhdGVzOgogCiAgICAgSGVh
ZGVyUHJlbHVkZSA9ICgKICAgICAiIiIjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4K
KyNpbXBvcnQgPHd0Zi9QbGF0Zm9ybS5oPgogCiAke2luY2x1ZGVzfQogIiIiKQpAQCAtNDEsNyAr
NDIsOSBAQCAke2luY2x1ZGVzfQogIiIiKQogCiAgICAgVHlwZUNvbnZlcnNpb25zSGVhZGVyUHJl
bHVkZSA9ICgKLSAgICAiIiIke2luY2x1ZGVzfQorICAgICIiIiNpbXBvcnQgPHd0Zi9QbGF0Zm9y
bS5oPgorCiske2luY2x1ZGVzfQogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsiIiIpCiAKQEAgLTUw
LDcgKzUzLDkgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7IiIiKQogIiIiKQogCiAgICAgR2VuZXJp
Y0hlYWRlclByZWx1ZGUgPSAoCi0gICAgIiIiJHtpbmNsdWRlc30iIiIpCisgICAgIiIiI2ltcG9y
dCA8d3RmL1BsYXRmb3JtLmg+CisKKyR7aW5jbHVkZXN9IiIiKQogCiAgICAgR2VuZXJpY0hlYWRl
clBvc3RsdWRlID0gKAogICAgICIiIiIiIikKQEAgLTYwLDcgKzY1LDkgQEAgbmFtZXNwYWNlIElu
c3BlY3RvciB7IiIiKQogT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmco
Y29uc3QgU3RyaW5nJiB2YWx1ZSk7IiIiKQogCiAgICAgQmFja2VuZERpc3BhdGNoZXJIZWFkZXJQ
cmVsdWRlID0gKAotICAgICIiIiR7aW5jbHVkZXN9CisgICAgIiIiI2ltcG9ydCA8d3RmL1BsYXRm
b3JtLmg+CisKKyR7aW5jbHVkZXN9CiAKICR7Zm9yd2FyZERlY2xhcmF0aW9uc30KIApAQCAtMTI3
LDggKzEzNCw3IEBAIHByaXZhdGU6CiAke3N1Y2Nlc3NDYWxsYmFja30KICR7Y29udmVyc2lvbnN9
CiAke2ludm9jYXRpb259Ci19Ci0iIiIpCit9IiIiKQogCiAgICAgQ29uZmlndXJhdGlvbkNvbW1h
bmRQcm9wZXJ0eSA9ICgKICAgICAiIiJAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluLCBzZXR0
ZXI9c2V0JHtkb21haW5OYW1lfUhhbmRsZXI6KSBpZDwke29iamNQcmVmaXh9JHtkb21haW5OYW1l
fURvbWFpbkhhbmRsZXI+ICR7dmFyaWFibGVOYW1lUHJlZml4fUhhbmRsZXI7IiIiKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vcHJl
cHJvY2Vzcy5wbCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL3ByZXByb2Nlc3MucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu
LjQxNTNmM2RiMjY1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vcHJlcHJvY2Vzcy5wbApAQCAtMCwwICsxLDEwNCBAQAor
IyEgL3Vzci9iaW4vZW52IHBlcmwKKyMKKyMgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2Vi
S2l0IHByb2plY3QKKyMKKyMgICBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorIworIyAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIyAgIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIyAgIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyMKKyMgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyMgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisjICAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjICAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorIyAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisjICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyMgICBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKKwordXNlIENvbmZp
ZzsKK3VzZSBHZXRvcHQ6Okxvbmc7Cit1c2UgSVBDOjpPcGVuMjsKK3VzZSBJUEM6Ok9wZW4zOwor
dXNlIFRleHQ6OlBhcnNlV29yZHM7CisKK215ICRpbnB1dFBhdGg7CitteSAkZGVmaW5lczsKK215
ICRwcmVwcm9jZXNzb3I7CitteSAkb3V0cHV0UGF0aDsKK0dldE9wdGlvbnMoJ2lucHV0PXMnID0+
IFwkaW5wdXRQYXRoLAorICAgICAgICAgICAnZGVmaW5lcz1zJyA9PiBcJGRlZmluZXMsCisgICAg
ICAgICAgICdwcmVwcm9jZXNzb3I9cycgPT4gXCRwcmVwcm9jZXNzb3IsCisgICAgICAgICAgICdv
dXRwdXQ9cycgPT4gXCRvdXRwdXRQYXRoKTsKKworbXkgQGFyZ3MgPSAoKTsKK2lmICghJHByZXBy
b2Nlc3NvcikgeworICAgIGlmICgkQ29uZmlnOjpDb25maWd7Im9zbmFtZSJ9IGVxICJNU1dpbjMy
IikgeworICAgICAgICAkcHJlcHJvY2Vzc29yID0gJEVOVntDQ30gfHwgImNsIjsKKyAgICAgICAg
cHVzaChAYXJncywgcXcoL0VQKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgJHByZXByb2Nlc3Nv
ciA9ICRFTlZ7Q0N9IHx8ICgteCAiL3Vzci9iaW4vY2xhbmciID8gIi91c3IvYmluL2NsYW5nIiA6
ICIvdXNyL2Jpbi9nY2MiKTsKKyAgICAgICAgcHVzaChAYXJncywgcXcoLUUgLVAgLXggYysrKSk7
CisgICAgfQorfQorCitpZiAoJENvbmZpZzo6Q29uZmlneyJvc25hbWUifSBlcSAiZGFyd2luIikg
eworICAgIHB1c2goQGFyZ3MsICItSSIgLiAkRU5We0JVSUxUX1BST0RVQ1RTX0RJUn0gLiAiL3Vz
ci9sb2NhbC9pbmNsdWRlIikgaWYgJEVOVntCVUlMVF9QUk9EVUNUU19ESVJ9OworICAgIHB1c2go
QGFyZ3MsICItaXN5c3Jvb3QiLCAkRU5We1NES1JPT1R9KSBpZiAkRU5We1NES1JPT1R9OworfQor
CisjIFJlbW92ZSBkb3VibGUgcXVvdGF0aW9ucyBmcm9tICRkZWZpbmVzIGFuZCBleHRyYWN0IG1h
Y3Jvcy4KKyMgRm9yIGV4YW1wbGUsIGlmICRkZWZpbmVzIGlzICcgIkE9MSIgIkI9MSIgQz0xICIi
ICAgIEQgICcsCisjIHRoZW4gaXQgaXMgY29udmVydGVkIGludG8gZm91ciBtYWNyb3MgLURBPTEs
IC1EQj0xLCAtREM9MSBhbmQgLURELgorJGRlZmluZXMgPX4gcy9cIi8vZzsKK215IEBtYWNyb3Mg
PSBncmVwIHsgJF8gfSBzcGxpdCgvXHMrLywgJGRlZmluZXMpOyAjIGdyZXAgc2tpcHMgZW1wdHkg
bWFjcm9zLgorQG1hY3JvcyA9IG1hcCB7ICItRCRfIiB9IEBtYWNyb3M7CisKK215ICRwaWQgPSAw
OworaWYgKCRDb25maWd7b3NuYW1lfSBlcSAiY3lnd2luIikgeworICAgICRFTlZ7UEFUSH0gPSAi
JEVOVntQQVRIfTovY3lnZHJpdmUvYy9jeWd3aW4vYmluIjsKKyAgICBteSBAcHJlcHJvY2Vzc29y
QW5kRmxhZ3M7CisgICAgaWYgKCRwcmVwcm9jZXNzb3IgZXEgIi91c3IvYmluL2djYyIpIHsKKyAg
ICAgICAgQHByZXByb2Nlc3NvckFuZEZsYWdzID0gc3BsaXQoJyAnLCAkcHJlcHJvY2Vzc29yKTsK
KyAgICB9IGVsc2UgeyAgICAgICAgCisgICAgICAgICRwcmVwcm9jZXNzb3IgPX4gLyIoLiopIi87
CisgICAgICAgIGNob21wKG15ICRwcmVwcm9jZXNzb3IgPSBgY3lncGF0aCAtdSAnJDEnYCkgaWYg
KGRlZmluZWQgJDEpOworICAgICAgICBjaG9tcCgkaW5wdXRQYXRoID0gYGN5Z3BhdGggLXcgJyRp
bnB1dFBhdGgnYCk7CisgICAgICAgIEBwcmVwcm9jZXNzb3JBbmRGbGFncyA9ICgkcHJlcHJvY2Vz
c29yLCAiL25vbG9nbyIsICIvRVAiKTsKKyAgICB9CisgICAgIyBUaGlzIGNhbGwgY2FuIGZhaWwg
aWYgV2luZG93cyByZWJhc2VzIGN5Z3dpbiwgc28gcmV0cnkgYSBmZXcgdGltZXMgdW50aWwgaXQg
c3VjY2VlZHMuCisgICAgZm9yIChteSAkdHJpZXMgPSAwOyAhJHBpZCAmJiAoJHRyaWVzIDwgMjAp
OyAkdHJpZXMrKykgeworICAgICAgICBldmFsIHsKKyAgICAgICAgICAgICMgU3VwcHJlc3MgU1RE
RVJSIHNvIHRoYXQgaWYgd2UncmUgdXNpbmcgY2wuZXhlLCB0aGUgb3V0cHV0CisgICAgICAgICAg
ICAjIG5hbWUgaXNuJ3QgbmVlZGxlc3NseSBlY2hvZWQuCisgICAgICAgICAgICB1c2UgU3ltYm9s
ICdnZW5zeW0nOyBteSAkZXJyID0gZ2Vuc3ltOworICAgICAgICAgICAgJHBpZCA9IG9wZW4zKFwq
UFBfSU4sIFwqUFBfT1VULCAkZXJyLCBAcHJlcHJvY2Vzc29yQW5kRmxhZ3MsIEBhcmdzLCBAbWFj
cm9zLCAkaW5wdXRQYXRoKTsKKyAgICAgICAgICAgIDE7CisgICAgICAgIH0gb3IgZG8geworICAg
ICAgICAgICAgc2xlZXAgMTsKKyAgICAgICAgfQorICAgIH07Cit9IGVsc2lmICgkQ29uZmlnOjpD
b25maWd7Im9zbmFtZSJ9IGVxICJNU1dpbjMyIikgeworICAgICMgU3VwcHJlc3MgU1RERVJSIHNv
IHRoYXQgaWYgd2UncmUgdXNpbmcgY2wuZXhlLCB0aGUgb3V0cHV0CisgICAgIyBuYW1lIGlzbid0
IG5lZWRsZXNzbHkgZWNob2VkLgorICAgIHVzZSBTeW1ib2wgJ2dlbnN5bSc7IG15ICRlcnIgPSBn
ZW5zeW07CisgICAgJHBpZCA9IG9wZW4zKFwqUFBfSU4sIFwqUFBfT1VULCAkZXJyLCAkcHJlcHJv
Y2Vzc29yLCBAYXJncywgQG1hY3JvcywgJGlucHV0UGF0aCk7Cit9IGVsc2UgeworICAgICRwaWQg
PSBvcGVuMihcKlBQX09VVCwgXCpQUF9JTiwgc2hlbGx3b3JkcygkcHJlcHJvY2Vzc29yKSwgQGFy
Z3MsIEBtYWNyb3MsICRpbnB1dFBhdGgpOworfQorY2xvc2UgUFBfSU47CitteSBAbGluZXMgPSA8
UFBfT1VUPjsKK2Nsb3NlIFBQX09VVDsKK3dhaXRwaWQoJHBpZCwgMCk7CisKK29wZW4gT1VUUFVU
LCAiPiRvdXRwdXRQYXRoIiB8fCBkaWUgIkNvdWxkIG5vdCBvcGVuICRvdXRwdXRQYXRoIGZvciB3
cml0aW5nIjsKK2ZvcmVhY2ggbXkgJGxpbmUgKEBsaW5lcykgeworICAgIHByaW50IE9VVFBVVCAk
bGluZTsKK30KK2Nsb3NlIE9VVFBVVDsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQpp
bmRleCAyYjFkODc4MmNiMi4uOGNlZjAwOTVmN2UgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQpAQCAtMTE3LDcgKzExNyw2IEBA
IGRlZiBnZW5lcmF0ZV9mcm9tX3NwZWNpZmljYXRpb24ocHJpbWFyeV9zcGVjaWZpY2F0aW9uX2Zp
bGVwYXRoPU5vbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9kaXJw
YXRoPU5vbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmNlX291dHB1dD1G
YWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWV3b3JrX25hbWU9IiIs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtX25hbWU9IiIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlX2Zyb250ZW5kPVRydWUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlX2JhY2tlbmQ9VHJ1ZSk6CiAKQEAg
LTEzMCw3ICsxMjksNiBAQCBkZWYgZ2VuZXJhdGVfZnJvbV9zcGVjaWZpY2F0aW9uKHByaW1hcnlf
c3BlY2lmaWNhdGlvbl9maWxlcGF0aD1Ob25lLAogICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBh
cyBlOgogICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJFcnJvciBwYXJzaW5nIHZhbGlkIEpT
T04gaW4gZmlsZTogIiArIGZpbGVwYXRoICsgIlxuUGFyc2UgZXJyb3I6ICIgKyBzdHIoZSkpCiAK
LSAgICBwbGF0Zm9ybSA9IFBsYXRmb3JtLmZyb21TdHJpbmcocGxhdGZvcm1fbmFtZSkKICAgICBw
cm90b2NvbCA9IG1vZGVscy5Qcm90b2NvbChmcmFtZXdvcmtfbmFtZSkKICAgICBmb3Igc3BlY2lm
aWNhdGlvbiBpbiBzdXBwbGVtZW50YWxfc3BlY2lmaWNhdGlvbl9maWxlcGF0aHM6CiAgICAgICAg
IGxvYWRfc3BlY2lmaWNhdGlvbihwcm90b2NvbCwgc3BlY2lmaWNhdGlvbiwgaXNTdXBwbGVtZW50
YWw9VHJ1ZSkKQEAgLTEzOCw3ICsxMzYsNyBAQCBkZWYgZ2VuZXJhdGVfZnJvbV9zcGVjaWZpY2F0
aW9uKHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aD1Ob25lLAogCiAgICAgcHJvdG9jb2wu
cmVzb2x2ZV90eXBlcygpCiAKLSAgICBnZW5lcmF0b3JfYXJndW1lbnRzID0gW3Byb3RvY29sLCBw
bGF0Zm9ybSwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoXQorICAgIGdlbmVyYXRvcl9h
cmd1bWVudHMgPSBbcHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aF0KICAg
ICBnZW5lcmF0b3JzID0gW10KIAogICAgIGlmIHByb3RvY29sLmZyYW1ld29yayBpcyBGcmFtZXdv
cmtzLlRlc3Q6CkBAIC0xNjIsNyArMTYwLDYgQEAgZGVmIGdlbmVyYXRlX2Zyb21fc3BlY2lmaWNh
dGlvbihwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGg9Tm9uZSwKICAgICAgICAgZ2VuZXJh
dG9ycy5hcHBlbmQoT2JqQ1Byb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcigqZ2Vu
ZXJhdG9yX2FyZ3VtZW50cykpCiAKICAgICBlbGlmIHByb3RvY29sLmZyYW1ld29yayBpcyBGcmFt
ZXdvcmtzLkphdmFTY3JpcHRDb3JlOgotICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChKU0JhY2tl
bmRDb21tYW5kc0dlbmVyYXRvcigqZ2VuZXJhdG9yX2FyZ3VtZW50cykpCiAgICAgICAgIGdlbmVy
YXRvcnMuYXBwZW5kKENwcEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9y
KCpnZW5lcmF0b3JfYXJndW1lbnRzKSkKICAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoQ3BwQmFj
a2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IoKmdlbmVyYXRvcl9hcmd1bWVudHMpKQogICAg
ICAgICBnZW5lcmF0b3JzLmFwcGVuZChDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9u
R2VuZXJhdG9yKCpnZW5lcmF0b3JfYXJndW1lbnRzKSkKQEAgLTIyOSw3ICsyMjYsNiBAQCBkZWYg
Z2VuZXJhdGVfZnJvbV9zcGVjaWZpY2F0aW9uKHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0
aD1Ob25lLAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIGFsbG93ZWRfZnJhbWV3
b3JrX25hbWVzID0gWydKYXZhU2NyaXB0Q29yZScsICdXZWJJbnNwZWN0b3InLCAnV2ViSW5zcGVj
dG9yVUknLCAnV2ViS2l0JywgJ1Rlc3QnXQotICAgIGFsbG93ZWRfcGxhdGZvcm1fbmFtZXMgPSBb
J2lPUycsICdtYWNPUycsICdhbGwnLCAnZ2VuZXJpYyddCiAgICAgY2xpX3BhcnNlciA9IG9wdHBh
cnNlLk9wdGlvblBhcnNlcih1c2FnZT0idXNhZ2U6ICVwcm9nIFtvcHRpb25zXSBQcmltYXJ5UHJv
dG9jb2wuanNvbiBbU3VwcGxlbWVudGFsUHJvdG9jb2wuanNvbiAuLi5dIikKICAgICBjbGlfcGFy
c2VyLmFkZF9vcHRpb24oIi1vIiwgIi0tb3V0cHV0RGlyIiwgaGVscD0iRGlyZWN0b3J5IHdoZXJl
IGdlbmVyYXRlZCBmaWxlcyBzaG91bGQgYmUgd3JpdHRlbi4iKQogICAgIGNsaV9wYXJzZXIuYWRk
X29wdGlvbigiLS1mcmFtZXdvcmsiLCB0eXBlPSJjaG9pY2UiLCBjaG9pY2VzPWFsbG93ZWRfZnJh
bWV3b3JrX25hbWVzLCBoZWxwPSJUaGUgZnJhbWV3b3JrIHRoYXQgdGhlIHByaW1hcnkgc3BlY2lm
aWNhdGlvbiBiZWxvbmdzIHRvLiIpCkBAIC0yMzgsNyArMjM0LDYgQEAgaWYgX19uYW1lX18gPT0g
J19fbWFpbl9fJzoKICAgICBjbGlfcGFyc2VyLmFkZF9vcHRpb24oIi10IiwgIi0tdGVzdCIsIGFj
dGlvbj0ic3RvcmVfdHJ1ZSIsIGhlbHA9IkVuYWJsZSB0ZXN0IG1vZGUuIFVzZSB1bmlxdWUgb3V0
cHV0IGZpbGVuYW1lcyBjcmVhdGVkIGJ5IHByZXBlbmRpbmcgdGhlIGlucHV0IGZpbGVuYW1lLiIp
CiAgICAgY2xpX3BhcnNlci5hZGRfb3B0aW9uKCItLWZyb250ZW5kIiwgYWN0aW9uPSJzdG9yZV90
cnVlIiwgaGVscD0iR2VuZXJhdGUgY29kZSBmb3IgdGhlIGZyb250ZW5kLXNpZGUgb2YgdGhlIHBy
b3RvY29sIG9ubHkuIikKICAgICBjbGlfcGFyc2VyLmFkZF9vcHRpb24oIi0tYmFja2VuZCIsIGFj
dGlvbj0ic3RvcmVfdHJ1ZSIsIGhlbHA9IkdlbmVyYXRlIGNvZGUgZm9yIHRoZSBiYWNrZW5kLXNp
ZGUgb2YgdGhlIHByb3RvY29sIG9ubHkuIikKLSAgICBjbGlfcGFyc2VyLmFkZF9vcHRpb24oIi0t
cGxhdGZvcm0iLCBkZWZhdWx0PSJnZW5lcmljIiwgaGVscD0iVGhlIHBsYXRmb3JtIG9mIHRoZSBi
YWNrZW5kIGJlaW5nIGdlbmVyYXRlZC4gRm9yIGV4YW1wbGUsIHdlIGNvbXBpbGUgV2ViS2l0MiBm
b3IgZWl0aGVyIG1hY09TIG9yIGlPUy4gVGhpcyB2YWx1ZSBpcyBjYXNlLWluc2Vuc2l0aXZlLiBB
bGxvd2VkIHZhbHVlczogJXMiICUgIiwgIi5qb2luKGFsbG93ZWRfcGxhdGZvcm1fbmFtZXMpKQog
ICAgIG9wdGlvbnMgPSBOb25lCiAKICAgICBhcmdfb3B0aW9ucywgYXJnX3ZhbHVlcyA9IGNsaV9w
YXJzZXIucGFyc2VfYXJncygpCkBAIC0yNjQsNyArMjU5LDYgQEAgaWYgX19uYW1lX18gPT0gJ19f
bWFpbl9fJzoKICAgICAgICAgJ291dHB1dF9kaXJwYXRoJzogYXJnX29wdGlvbnMub3V0cHV0RGly
LAogICAgICAgICAnY29uY2F0ZW5hdGVfb3V0cHV0JzogYXJnX29wdGlvbnMudGVzdCwKICAgICAg
ICAgJ2ZyYW1ld29ya19uYW1lJzogYXJnX29wdGlvbnMuZnJhbWV3b3JrLAotICAgICAgICAncGxh
dGZvcm1fbmFtZSc6IGFyZ19vcHRpb25zLnBsYXRmb3JtLAogICAgICAgICAnZm9yY2Vfb3V0cHV0
JzogYXJnX29wdGlvbnMuZm9yY2UsCiAgICAgICAgICdnZW5lcmF0ZV9iYWNrZW5kJzogZ2VuZXJh
dGVfYmFja2VuZCwKICAgICAgICAgJ2dlbmVyYXRlX2Zyb250ZW5kJzogZ2VuZXJhdGVfZnJvbnRl
bmQsCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvYWxsL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24gYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvYWxsL2RlZmluaXRpb25zLXdpdGgt
bWFjLXBsYXRmb3JtLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxN2YxMzVl
ZTVhLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvYWxsL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKysrIC9k
ZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi17Ci0gICAgImRvbWFpbiI6ICJOZXR3b3JrIiwKLSAg
ICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJOZXR3b3JrRXJyb3Ii
LAotICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKLSAgICAgICAgICAgICJwbGF0Zm9ybSI6
ICJtYWNvcyIsCi0gICAgICAgICAgICAicHJvcGVydGllcyI6IFsKLSAgICAgICAgICAgICAgICB7
ICJuYW1lIjogIm1lc3NhZ2UiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiRXJy
b3IgbWVzc2FnZS4iIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2RlIiwgInR5cGUi
OiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBjb2RlLiIgfQotICAgICAgICAgICAg
XQotICAgICAgICB9Ci0gICAgXSwKLSAgICAiY29tbWFuZHMiOiBbCi0gICAgICAgIHsKLSAgICAg
ICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJjZSIsCi0gICAgICAgICAgICAicGxhdGZvcm0iOiAi
bWFjb3MiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4g
dGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9z
cyBvcmlnaW4gY2hlY2tzLiIKLSAgICAgICAgfQotICAgIF0sCi0gICAgImV2ZW50cyI6IFsKLSAg
ICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAicmVzb3VyY2VMb2FkZWQiLAotICAgICAgICAg
ICAgInBsYXRmb3JtIjogIm1hY29zIiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJBIHJl
c291cmNlIHdhcyBsb2FkZWQuIgotICAgICAgICB9Ci0gICAgXQotfQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2FsbC9leHBlY3RlZC9k
ZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9hbGwvZXhwZWN0ZWQvZGVmaW5pdGlvbnMt
d2l0aC1tYWMtcGxhdGZvcm0uanNvbi1yZXN1bHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGM2ZTY4ZjRhOWFlLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvYWxsL2V4cGVjdGVkL2RlZmluaXRpb25zLXdpdGgtbWFj
LXBsYXRmb3JtLmpzb24tcmVzdWx0CisrKyAvZGV2L251bGwKQEAgLTEsMTIxNyArMCwwIEBACi0j
IyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0vLyBOZXR3b3JrCi1J
bnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJOZXR3b3JrIiwgbnVsbCk7Ci1JbnNwZWN0
b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiTmV0d29yay5sb2FkUmVzb3VyY2UiLCBudWxsLCBb
XSwgW10pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckV2ZW50KCJOZXR3b3JrLnJlc291cmNl
TG9hZGVkIiwgbnVsbCwgW10pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rlck5ldHdvcmtEaXNw
YXRjaGVyID0gSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRpc3BhdGNoZXIuYmluZChJbnNwZWN0
b3JCYWNrZW5kLCAiTmV0d29yayIpOwotSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigi
TmV0d29yayIsIG51bGwpOwotIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMu
anMKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBs
YXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsK
LQotY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZvaWQg
c2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNo
ZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KLSAgICBC
YWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2Jh
Y2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Ci1wcml2YXRlOgotICAgIFJlZlB0cjxCYWNrZW5kRGlz
cGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKLX07Ci0KLQotY2xhc3MgQWx0ZXJuYXRlTmV0
d29ya0JhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVy
IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5BbHRlcm5hdGVOZXR3b3JrQmFja2VuZERpc3BhdGNo
ZXIoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgY2FsbElkKSA9IDA7
Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotI2VuZGlmIC8vIEVOQUJMRShJTlNQ
RUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRl
QmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0
Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdp
dGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgi
Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7
Ci0KLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCi1jbGFzcyBBbHRlcm5hdGVOZXR3b3JrQmFja2VuZERpc3Bh
dGNoZXI7Ci0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
Ci0KLWNsYXNzIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewotcHVibGljOgotICAg
IHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UoRXJyb3JTdHJpbmcmKSA9IDA7Ci1wcm90ZWN0ZWQ6
Ci0gICAgdmlydHVhbCB+TmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOwotfTsKLQot
Y2xhc3MgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRh
bEJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE5ldHdvcmtCYWNr
ZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgTmV0d29ya0JhY2tlbmRE
aXNwYXRjaGVySGFuZGxlciopOwotICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNv
bnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOwot
cHJpdmF0ZToKLSAgICB2b2lkIGxvYWRSZXNvdXJjZShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpT
T046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKLXB1YmxpYzoKLSAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIo
QWx0ZXJuYXRlTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7
IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KLXByaXZhdGU6
Ci0gICAgQWx0ZXJuYXRlTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyKiBtX2FsdGVybmF0ZURpc3Bh
dGNoZXIgeyBudWxscHRyIH07Ci0jZW5kaWYKLXByaXZhdGU6Ci0gICAgTmV0d29ya0JhY2tlbmRE
aXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiwgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFu
ZGxlciopOwotICAgIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQgeyBu
dWxscHRyIH07Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTog
VGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERp
c3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRp
b25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RCYWNrZW5k
RGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250
ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYv
TmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNpZiBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSNpbmNsdWRlICJUZXN0QWx0
ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIEluc3BlY3Rv
ciB7Ci0KLU5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5OZXR3b3JrQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyKCkgeyB9Ci0KLVJlZjxOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI+IE5l
dHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5k
RGlzcGF0Y2hlciwgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCi17Ci0g
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmRE
aXNwYXRjaGVyLCBhZ2VudCkpOwotfQotCi1OZXR3b3JrQmFja2VuZERpc3BhdGNoZXI6Ok5ldHdv
cmtCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIs
IE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQotICAgIDogU3VwcGxlbWVu
dGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCi0gICAgLCBtX2FnZW50KGFn
ZW50KQotewotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRv
bWFpbigiTmV0d29yayJfcywgdGhpcyk7Ci19Ci0KLXZvaWQgTmV0d29ya0JhY2tlbmREaXNwYXRj
aGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxK
U09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKLXsKLSAgICBSZWY8TmV0d29ya0JhY2tlbmREaXNwYXRj
aGVyPiBwcm90ZWN0KCp0aGlzKTsKLQotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRl
cnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRlcnMpOwotCi0g
ICAgaWYgKG1ldGhvZCA9PSAibG9hZFJlc291cmNlIikKLSAgICAgICAgbG9hZFJlc291cmNlKHJl
cXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRo
b2ROb3RGb3VuZCwgIidOZXR3b3JrLiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7Ci19
Ci0KLXZvaWQgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UobG9uZyByZXF1
ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCi17Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0gICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewot
ICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZShyZXF1ZXN0SWQpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBFcnJvclN0cmluZyBlcnJvcjsK
LSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwot
ICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZShlcnJvcik7Ci0KLSAgICBpZiAoIWVycm9yLmxlbmd0
aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElk
LCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVy
cm9yLCBXVEZNb3ZlKGVycm9yKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0j
IyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRl
c3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xh
c3MgRnJvbnRlbmRSb3V0ZXI7Ci0KLWNsYXNzIE5ldHdvcmtGcm9udGVuZERpc3BhdGNoZXIgewot
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIE5ldHdvcmtGcm9udGVu
ZERpc3BhdGNoZXIoRnJvbnRlbmRSb3V0ZXImIGZyb250ZW5kUm91dGVyKSA6IG1fZnJvbnRlbmRS
b3V0ZXIoZnJvbnRlbmRSb3V0ZXIpIHsgfQotICAgIHZvaWQgcmVzb3VyY2VMb2FkZWQoKTsKLXBy
aXZhdGU6Ci0gICAgRnJvbnRlbmRSb3V0ZXImIG1fZnJvbnRlbmRSb3V0ZXI7Ci19OwotCi19IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hl
cnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZv
cm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKLQot
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdm9p
ZCBOZXR3b3JrRnJvbnRlbmREaXNwYXRjaGVyOjpyZXNvdXJjZUxvYWRlZCgpCi17Ci0gICAgUmVm
PEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAg
IGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIk5ldHdvcmsucmVzb3VyY2VMb2Fk
ZWQiX3MpOwotCi0gICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRv
SlNPTlN0cmluZygpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQg
RmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xPYmplY3RzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZp
bml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+
Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQot
Ci0KLS8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgotbmFtZXNwYWNlIE5ldHdvcmsgewotY2xhc3Mg
TmV0d29ya0Vycm9yOwotfSAvLyBOZXR3b3JrCi0vLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlv
bnMuCi0KLQotCi0KLW5hbWVzcGFjZSBOZXR3b3JrIHsKLWNsYXNzIE5ldHdvcmtFcnJvciA6IHB1
YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKLXB1YmxpYzoKLSAgICBlbnVtIHsKLSAgICAgICAgTm9G
aWVsZHNTZXQgPSAwLAotICAgICAgICBNZXNzYWdlU2V0ID0gMSA8PCAwLAotICAgICAgICBDb2Rl
U2V0ID0gMSA8PCAxLAotICAgICAgICBBbGxGaWVsZHNTZXQgPSAoTWVzc2FnZVNldCB8IENvZGVT
ZXQpCi0gICAgfTsKLQotICAgIHRlbXBsYXRlPGludCBTVEFURT4KLSAgICBjbGFzcyBCdWlsZGVy
IHsKLSAgICBwcml2YXRlOgotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBtX3Jlc3VsdDsK
LQotICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0
U3RhdGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8
QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWls
ZGVyKFJlZjwvKk5ldHdvcmtFcnJvciovSlNPTjo6T2JqZWN0PiYmIG9iamVjdCkKLSAgICAgICAg
ICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQotICAgICAgICB7Ci0gICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25v
bl9pbml0X3N0YXRlKTsKLSAgICAgICAgfQotICAgICAgICBmcmllbmQgY2xhc3MgTmV0d29ya0Vy
cm9yOwotICAgIHB1YmxpYzoKLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTWVzc2FnZVNldD4m
IHNldE1lc3NhZ2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIE1lc3NhZ2VTZXQpLCBwcm9wZXJ0eV9tZXNzYWdlX2Fs
cmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1lc3NhZ2UiX3Ms
IHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TWVzc2FnZVNldD4oKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2RlU2V0PiYgc2V0Q29kZShpbnQg
dmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBD
b2RlU2V0KSwgcHJvcGVydHlfY29kZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0SW50ZWdlcigiY29kZSJfcywgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxDb2RlU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgUmVmPE5ldHdvcmtFcnJvcj4g
cmVsZWFzZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09
IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7Ci0gICAgICAgICAgICBDT01QSUxF
X0FTU0VSVChzaXplb2YoTmV0d29ya0Vycm9yKSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0KSwgY2Fu
bm90X2Nhc3QpOwotCi0gICAgICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uUmVzdWx0ID0g
bV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKLSAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gV1RG
TW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8TmV0d29ya0Vycm9yPio+KCZqc29uUmVzdWx0KSk7
Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIC8q
Ci0gICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgotICAgICAqIFJlZjxOZXR3b3JrRXJyb3I+
IHJlc3VsdCA9IE5ldHdvcmtFcnJvcjo6Y3JlYXRlKCkKLSAgICAgKiAgICAgLnNldE1lc3NhZ2Uo
Li4uKQotICAgICAqICAgICAuc2V0Q29kZSguLi4pCi0gICAgICogICAgIC5yZWxlYXNlKCk7Ci0g
ICAgICovCi0gICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCi0gICAgewot
ICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KSk7Ci0gICAgfQotfTsKLQotfSAvLyBOZXR3b3JrCi0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90
b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sT2JqZWN0cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBs
YXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLQot
I2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
LQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLQotCi19
IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbmNsdWRlIDx3dGYvUmV0
YWluUHRyLmg+Ci0KLUBwcm90b2NvbCBUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluSGFuZGxlcjsK
LQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotY2xhc3MgT2JqQ0luc3BlY3Rvck5ldHdvcmtC
YWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVOZXR3b3JrQmFja2VuZERp
c3BhdGNoZXIgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIE9i
akNJbnNwZWN0b3JOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sTmV0d29y
a0RvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KLSAgICB2
b2lkIGxvYWRSZXNvdXJjZShsb25nIHJlcXVlc3RJZCkgZmluYWw7Ci1wcml2YXRlOgotICAgIFJl
dGFpblB0cjxpZDxUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7
Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
QmFja2VuZERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
ZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sSW50
ZXJuYWwuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbmNs
dWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdm9pZCBP
YmpDSW5zcGVjdG9yTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UobG9uZyBy
ZXF1ZXN0SWQpCi17Ci0gICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNl
bGVjdG9yKGxvYWRSZXNvdXJjZVdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkg
ewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVl
c3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmsubG9hZFJl
c291cmNlJyB3YXMgbm90IGZvdW5kIl9zKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlkIGVy
cm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6
OlNlcnZlckVycm9yLCBlcnJvcik7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQ
ZW5kaW5nRXJyb3JzKCk7Ci0gICAgfTsKLQotICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57Ci0g
ICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpTT046
Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKLSAgICB9OwotCi0gICAgW21fZGVsZWdhdGUgbG9h
ZFJlc291cmNlV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6
c3VjY2Vzc0NhbGxiYWNrXTsKLX0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9y
L1Rlc3RQcm90b2NvbC5oPgotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIp
KSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0Ci1AcHJv
cGVydHkgKG5vbmF0b21pYywgcmV0YWluLCBzZXR0ZXI9c2V0TmV0d29ya0hhbmRsZXI6KSBpZDxU
ZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluSGFuZGxlcj4gbmV0d29ya0hhbmRsZXI7Ci1AcHJvcGVy
dHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5FdmVudERp
c3BhdGNoZXIgKm5ldHdvcmtFdmVudERpc3BhdGNoZXI7Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbENvbmZpZ3VyYXRpb24ubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBk
ZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24u
aCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbXBvcnQgIlRlc3RQcm90
b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJu
YXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRh
YmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3Bl
Y3RvcjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KLXsKLSAg
ICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotICAgIGlkPFRl
c3RQcm90b2NvbE5ldHdvcmtEb21haW5IYW5kbGVyPiBfbmV0d29ya0hhbmRsZXI7Ci0gICAgVGVz
dFByb3RvY29sTmV0d29ya0RvbWFpbkV2ZW50RGlzcGF0Y2hlciAqX25ldHdvcmtFdmVudERpc3Bh
dGNoZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRh
YmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIg
aW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChj
b250cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNl
bGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAgIFtfbmV0d29ya0hhbmRsZXIgcmVsZWFz
ZV07Ci0gICAgW19uZXR3b3JrRXZlbnREaXNwYXRjaGVyIHJlbGVhc2VdOwotICAgIFtzdXBlciBk
ZWFsbG9jXTsKLX0KLQotLSAodm9pZClzZXROZXR3b3JrSGFuZGxlcjooaWQ8VGVzdFByb3RvY29s
TmV0d29ya0RvbWFpbkhhbmRsZXI+KWhhbmRsZXIKLXsKLSAgICBpZiAoaGFuZGxlciA9PSBfbmV0
d29ya0hhbmRsZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIFtfbmV0d29ya0hhbmRsZXIgcmVs
ZWFzZV07Ci0gICAgX25ldHdvcmtIYW5kbGVyID0gW2hhbmRsZXIgcmV0YWluXTsKLQotICAgIGF1
dG8gYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IG1ha2VVbmlxdWU8T2JqQ0luc3BlY3Rvck5ldHdvcmtC
YWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7Ci0gICAgYXV0byBhbHRlcm5hdGVBZ2VudCA9IG1h
a2VVbmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8TmV0d29ya0JhY2tlbmREaXNwYXRj
aGVyLCBBbHRlcm5hdGVOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI+PigiTmV0d29yayJfcywgKl9j
b250cm9sbGVyLCBXVEZNb3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIpKTsKLSAgICBfY29udHJvbGxl
ci0+YXBwZW5kRXh0cmFBZ2VudChXVEZNb3ZlKGFsdGVybmF0ZUFnZW50KSk7Ci19Ci0KLS0gKGlk
PFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5IYW5kbGVyPiluZXR3b3JrSGFuZGxlcgotewotICAg
IHJldHVybiBfbmV0d29ya0hhbmRsZXI7Ci19Ci0KLS0gKFRlc3RQcm90b2NvbE5ldHdvcmtEb21h
aW5FdmVudERpc3BhdGNoZXIgKiluZXR3b3JrRXZlbnREaXNwYXRjaGVyCi17Ci0gICAgaWYgKCFf
bmV0d29ya0V2ZW50RGlzcGF0Y2hlcikKLSAgICAgICAgX25ldHdvcmtFdmVudERpc3BhdGNoZXIg
PSBbW1Rlc3RQcm90b2NvbE5ldHdvcmtEb21haW5FdmVudERpc3BhdGNoZXIgYWxsb2NdIGluaXRX
aXRoQ29udHJvbGxlcjpfY29udHJvbGxlcl07Ci0gICAgcmV0dXJuIF9uZXR3b3JrRXZlbnREaXNw
YXRjaGVyOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1
cmF0aW9uLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJz
Lm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1t
YWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVz
aW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xO
ZXR3b3JrRG9tYWluRXZlbnREaXNwYXRjaGVyCi17Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JD
b250cm9sbGVyKiBfY29udHJvbGxlcjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29u
dHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCi17Ci0g
ICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBu
aWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIpOwotICAgIF9jb250cm9sbGVyID0gY29udHJvbGxl
cjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClyZXNvdXJjZUxvYWRlZAotewotICAg
IGNvbnN0IEZyb250ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29udHJvbGxlci0+ZnJvbnRlbmRSb3V0
ZXIoKTsKLQotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJOZXR3
b3JrLnJlc291cmNlTG9hZGVkIl9zKTsKLSAgICByb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdl
LT50b0pTT05TdHJpbmcoKSk7Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5o
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMt
cGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2ltcG9ydCA8V2ViSW5zcGVj
dG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgotCi0KLUBjbGFzcyBUZXN0UHJvdG9jb2xOZXR3
b3JrRXJyb3I7Ci0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbFBsYXRm
b3JtKSB7Ci0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1BbGwsCi0gICAgVGVzdFByb3RvY29sUGxh
dGZvcm1HZW5lcmljLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TLAotICAgIFRlc3RQcm90
b2NvbFBsYXRmb3JtTWFjT1MsCi19OwotCi0KLQotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5
ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sTmV0d29ya0Vycm9yIDogUldJ
UHJvdG9jb2xKU09OT2JqZWN0Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0Rp
Y3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKLS0gKGluc3RhbmNldHlwZSlpbml0
V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0Owot
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlIGNvZGU6
KGludCljb2RlOwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5T
U3RyaW5nICptZXNzYWdlOwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFz
c2lnbikgaW50IGNvZGU7Ci1AZW5kCi0KLUBwcm90b2NvbCBUZXN0UHJvdG9jb2xOZXR3b3JrRG9t
YWluSGFuZGxlciA8TlNPYmplY3Q+Ci1Ab3B0aW9uYWwKLS0gKHZvaWQpbG9hZFJlc291cmNlV2l0
aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1
Y2Nlc3NDYWxsYmFjazoodm9pZCheKSh2b2lkKSlzdWNjZXNzQ2FsbGJhY2s7Ci1AZW5kCi0KLV9f
YXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJv
dG9jb2xOZXR3b3JrRG9tYWluRXZlbnREaXNwYXRjaGVyIDogTlNPYmplY3QKLS0gKHZvaWQpcmVz
b3VyY2VMb2FkZWQ7Ci1AZW5kCi0KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29s
QnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJU
ZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgi
Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIu
aD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLUBpbnRlcmZhY2UgVGVzdFByb3RvY29s
TmV0d29ya0RvbWFpbkV2ZW50RGlzcGF0Y2hlciAoUHJpdmF0ZSkKLS0gKGluc3RhbmNldHlwZSlp
bml0V2l0aENvbnRyb2xsZXI6KEluc3BlY3Rvcjo6QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9s
bGVyKiljb250cm9sbGVyOwotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50
ZXJuYWwuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1w
bGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3Rv
Y29sQXJyYXlDb252ZXJzaW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdGVtcGxh
dGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgotT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJv
dG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90
b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xQbGF0Zm9ybSB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFs
dWUpIHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOgotICAgICAgICByZXR1cm4g
ImFsbCJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzoKLSAgICAgICAg
cmV0dXJuICJnZW5lcmljIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1JT1M6Ci0g
ICAgICAgIHJldHVybiAiaW9zIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNP
UzoKLSAgICAgICAgcmV0dXJuICJtYWNvcyJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlu
bGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xQbGF0Zm9ybT4gZnJvbVByb3RvY29sU3RyaW5nKGNv
bnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJhbGwiKQotICAgICAgICBy
ZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1BbGw7Ci0gICAgaWYgKHZhbHVlID09ICJnZW5lcmlj
IikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzsKLSAgICBpZiAo
dmFsdWUgPT0gImlvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzsK
LSAgICBpZiAodmFsdWUgPT0gIm1hY29zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBs
YXRmb3JtTWFjT1M7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotCi0KLX0gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0K
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1w
bGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotCi0jaW1wb3J0ICJUZXN0
UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKLSNpbXBvcnQg
PFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0KLXVzaW5nIG5h
bWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zIChOZXR3b3JrRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZU5ldHdvcmtFcnJvcjooVGVzdFBy
b3RvY29sTmV0d29ya0Vycm9yICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwot
Ci1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKE5l
dHdvcmtEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlTmV0d29ya0Vycm9yOihUZXN0UHJvdG9jb2xO
ZXR3b3JrRXJyb3IgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBU
SFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3Nd
KTsKLSAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbE5ldHdvcmtFcnJvciBhbGxvY10gaW5p
dFdpdGhQYXlsb2FkOnBheWxvYWRdOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMt
d2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQ
cm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgot
I2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsK
LQotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sTmV0d29ya0Vycm9yCi0KLS0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICos
IGlkPiAqKXBheWxvYWQKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAg
ICAgcmV0dXJuIG5pbDsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVS
VFkocGF5bG9hZFtAIm1lc3NhZ2UiXSwgQCJtZXNzYWdlIik7Ci0gICAgc2VsZi5tZXNzYWdlID0g
cGF5bG9hZFtAIm1lc3NhZ2UiXTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURf
UFJPUEVSVFkocGF5bG9hZFtAImNvZGUiXSwgQCJjb2RlIik7Ci0gICAgc2VsZi5jb2RlID0gW3Bh
eWxvYWRbQCJjb2RlIl0gaW50ZWdlclZhbHVlXTsKLQotICAgIHJldHVybiBzZWxmOwotfQotLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVj
dCAqKW9iamVjdAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0
OltvYmplY3QgdG9KU09OT2JqZWN0XS5nZXQoKV0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0g
ICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6KE5T
U3RyaW5nICopbWVzc2FnZSBjb2RlOihpbnQpY29kZQotewotICAgIGlmICghKHNlbGYgPSBbc3Vw
ZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9SRVFVSVJFRF9QUk9QRVJUWShtZXNzYWdlLCBAIm1lc3NhZ2UiKTsKLQotICAgIHNlbGYubWVz
c2FnZSA9IG1lc3NhZ2U7Ci0gICAgc2VsZi5jb2RlID0gY29kZTsKLQotICAgIHJldHVybiBzZWxm
OwotfQotCi0tICh2b2lkKXNldE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZQotewotICAgIFtz
dXBlciBzZXRTdHJpbmc6bWVzc2FnZSBmb3JLZXk6QCJtZXNzYWdlIl07Ci19Ci0KLS0gKE5TU3Ry
aW5nICopbWVzc2FnZQotewotICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAibWVzc2Fn
ZSJdOwotfQotCi0tICh2b2lkKXNldENvZGU6KGludCljb2RlCi17Ci0gICAgW3N1cGVyIHNldElu
dGVnZXI6Y29kZSBmb3JLZXk6QCJjb2RlIl07Ci19Ci0KLS0gKGludCljb2RlCi17Ci0gICAgcmV0
dXJuIFtzdXBlciBpbnRlZ2VyRm9yS2V5OkAiY29kZSJdOwotfQotCi1AZW5kCi0KLQotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2NvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGlu
Zy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9jb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRl
YnVnZ2FibGVUeXBlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu
LmQyN2FiNjViOTJhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2NvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4t
ZGVidWdnYWJsZVR5cGUuanNvbgpAQCAtMCwwICsxLDkgQEAKK1sKK3sKKyAgICAiZG9tYWluIjog
IkRvbWFpbiIsCisgICAgImRlYnVnZ2FibGVUeXBlcyI6IFsicGFnZSJdLAorICAgICJ0YXJnZXRU
eXBlcyI6IFsicGFnZSIsICJ3b3JrZXIiXSwKKyAgICAiY29tbWFuZHMiOiBbeyJuYW1lIjogIkNv
bW1hbmQifV0sCisgICAgImV2ZW50cyI6IFt7Im5hbWUiOiAiRXZlbnQifV0KK30KK10KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9jb21t
YW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2NvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24K
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjExMjYyZTg4OWZhCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2NvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KQEAgLTAsMCArMSwxMDkgQEAK
K3sKKyAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsK
KyAgICAgICAgICAgICJpZCI6ICJEYXRhYmFzZUlkIiwKKyAgICAgICAgICAgICJ0eXBlIjogImlu
dGVnZXIiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBpZGVudGlmaWVyIG9m
IERhdGFiYXNlIG9iamVjdC4iCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJp
ZCI6ICJQcmltYXJ5Q29sb3JzIiwKKyAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAg
ICAgICAgICAiZW51bSI6IFsicmVkIiwgImdyZWVuIiwgImJsdWUiXQorICAgICAgICB9LAorICAg
ICAgICB7CisgICAgICAgICAgICAiaWQiOiAiQ29sb3JMaXN0IiwKKyAgICAgICAgICAgICJ0eXBl
IjogImFycmF5IiwKKyAgICAgICAgICAgICJpdGVtcyI6IHsgIiRyZWYiOiAiUHJpbWFyeUNvbG9y
cyIgfQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiRXJyb3IiLAor
ICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6
ICJEYXRhYmFzZSBlcnJvci4iLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJtZXNzYWdlIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0
aW9uIjogIkVycm9yIG1lc3NhZ2UuIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29k
ZSIsICJ0eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgY29kZS4iIH0KKyAg
ICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgImNvbW1hbmRzIjogWworICAgICAg
ICB7CisgICAgICAgICAgICAibmFtZSI6ICJleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFs
dWVzIiwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiIH0sCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJxdWVyeSIsICJ0eXBlIjogInN0cmluZyIgfQorICAgICAgICAgICAgXSwK
KyAgICAgICAgICAgICJyZXR1cm5zIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29s
dW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJvcHRpb25hbCI6IHRydWUsICJpdGVtcyI6IHsg
InR5cGUiOiAic3RyaW5nIiB9IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIs
ICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7
ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6IHRydWUg
fSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIs
ICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxvYWQi
LCAidHlwZSI6ICJhbnkiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIsICJvcHRpb25hbCI6IHRy
dWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAiRXJy
b3IiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzY3Jl
ZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlDb2xvcnMiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJhbHRlcm5hdGVDb2xvcnMiLCAiJHJlZiI6ICJDb2xv
ckxpc3QiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJw
cmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbImN5YW4iLCAibWFnZW50YSIs
ICJ5ZWxsb3ciLCAiYmxhY2siXSwgIm9wdGlvbmFsIjogdHJ1ZSB9CisgICAgICAgICAgICBdCisg
ICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImV4ZWN1dGVTUUxBc3lu
Y09wdGlvbmFsUmV0dXJuVmFsdWVzIiwKKyAgICAgICAgICAgICJhc3luYyI6IHRydWUsCisgICAg
ICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRhdGFi
YXNlSWQiLCAiJHJlZiI6ICJEYXRhYmFzZUlkIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAicXVlcnkiLCAidHlwZSI6ICJzdHJpbmciIH0KKyAgICAgICAgICAgIF0sCisgICAgICAgICAg
ICAicmV0dXJucyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwg
InR5cGUiOiAiYXJyYXkiLCAib3B0aW9uYWwiOiB0cnVlLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0
cmluZyIgfSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJz
dHJpbmciLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0
aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwi
OiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAi
YW55IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0
YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVycm9yIiwgIm9wdGlv
bmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2NyZWVuQ29sb3IiLCAi
JHJlZiI6ICJQcmltYXJ5Q29sb3JzIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwgIiRyZWYiOiAiQ29sb3JMaXN0IiwgIm9w
dGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJpbnRDb2xvciIs
ICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93Iiwg
ImJsYWNrIl0sICJvcHRpb25hbCI6IHRydWUgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAor
ICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJleGVjdXRlU1FMU3luYyIsCisgICAgICAg
ICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRhdGFiYXNl
SWQiLCAiJHJlZiI6ICJEYXRhYmFzZUlkIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
cXVlcnkiLCAidHlwZSI6ICJzdHJpbmciIH0KKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAi
cmV0dXJucyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5
cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAorICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciIH0sCisgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiIH0sCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiIH0sCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiB9LAorICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiIH0sCisg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVycm9yIiB9LAor
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwgIiRyZWYiOiAiQ29s
b3JMaXN0IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2NyZWVuQ29sb3IiLCAiJHJl
ZiI6ICJQcmltYXJ5Q29sb3JzIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJpbnRD
b2xvciIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJjeWFuIiwgIm1hZ2VudGEiLCAieWVs
bG93IiwgImJsYWNrIl0gfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7Cisg
ICAgICAgICAgICAibmFtZSI6ICJleGVjdXRlU1FMQXN5bmMiLAorICAgICAgICAgICAgImFzeW5j
IjogdHJ1ZSwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiIH0sCisgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJxdWVyeSIsICJ0eXBlIjogInN0cmluZyIgfQorICAgICAgICAgICAg
XSwKKyAgICAgICAgICAgICJyZXR1cm5zIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
Y29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5n
IiB9IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmlu
ZyIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51
bWJlciIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9i
amVjdCIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJh
bnkiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAi
RGF0YWJhc2VJZCIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRy
ZWYiOiAiRXJyb3IiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5Db2xvciIs
ICIkcmVmIjogIlByaW1hcnlDb2xvcnMiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJh
bHRlcm5hdGVDb2xvcnMiLCAiJHJlZiI6ICJDb2xvckxpc3QiIH0sCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbImN5YW4i
LCAibWFnZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSB9CisgICAgICAgICAgICBdCisgICAgICAg
IH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0
ZXJzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Y29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjM2MWQ1N2Q4MjBkCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2Nv
bW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCkBAIC0wLDAg
KzEsODUgQEAKK3sKKyAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKKyAgICAidHlwZXMiOiBbCisg
ICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJEYXRhYmFzZUlkIiwKKyAgICAgICAgICAgICJ0
eXBlIjogImludGVnZXIiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBpZGVu
dGlmaWVyIG9mIERhdGFiYXNlIG9iamVjdC4iCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAg
ICAgICAgICJpZCI6ICJQcmltYXJ5Q29sb3JzIiwKKyAgICAgICAgICAgICJ0eXBlIjogInN0cmlu
ZyIsCisgICAgICAgICAgICAiZW51bSI6IFsicmVkIiwgImdyZWVuIiwgImJsdWUiXQorICAgICAg
ICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiQ29sb3JMaXN0IiwKKyAgICAgICAg
ICAgICJ0eXBlIjogImFycmF5IiwKKyAgICAgICAgICAgICJpdGVtcyI6IHsgIiRyZWYiOiAiUHJp
bWFyeUNvbG9ycyIgfQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAi
RXJyb3IiLAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAgICJkZXNj
cmlwdGlvbiI6ICJEYXRhYmFzZSBlcnJvci4iLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiBb
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJtZXNzYWdlIiwgInR5cGUiOiAic3RyaW5nIiwg
ImRlc2NyaXB0aW9uIjogIkVycm9yIG1lc3NhZ2UuIiB9LAorICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAiY29kZSIsICJ0eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgY29k
ZS4iIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgImNvbW1hbmRzIjog
WworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJleGVjdXRlQWxsT3B0aW9uYWxQYXJh
bWV0ZXJzIiwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJvcHRpb25hbCI6IHRydWUs
ICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCisgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIsICJvcHRp
b25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBl
IjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIsICJv
cHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNxbEVycm9yIiwg
IiRyZWYiOiAiRXJyb3IiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlDb2xvcnMiLCAib3B0aW9uYWwi
OiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJhbHRlcm5hdGVDb2xvcnMiLCAi
JHJlZiI6ICJDb2xvckxpc3QiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbImN5YW4i
LCAibWFnZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSwgIm9wdGlvbmFsIjogdHJ1ZSB9CisgICAg
ICAgICAgICBdLAorICAgICAgICAgICAgInJldHVybnMiOiBbCisgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIm9wdGlvbmFsIjogdHJ1ZSwg
Iml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiwgIm9wdGlv
bmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVzIiwgInR5cGUi
OiAib2JqZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogImRhdGFiYXNlSWQiLCAiJHJlZiI6ICJEYXRhYmFzZUlkIiwgIm9w
dGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic3FsRXJyb3IiLCAi
JHJlZiI6ICJFcnJvciIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJu
YW1lIjogInNjcmVlbkNvbG9yIiwgIiRyZWYiOiAiUHJpbWFyeUNvbG9ycyIsICJvcHRpb25hbCI6
IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImFsdGVybmF0ZUNvbG9ycyIsICIk
cmVmIjogIkNvbG9yTGlzdCIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7
ICJuYW1lIjogInByaW50Q29sb3IiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsiY3lhbiIs
ICJtYWdlbnRhIiwgInllbGxvdyIsICJibGFjayJdLCAib3B0aW9uYWwiOiB0cnVlIH0KKyAgICAg
ICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiZXhl
Y3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIiwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwor
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIs
ICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCisgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIgfSwKKyAgICAgICAgICAgICAgICB7ICJu
YW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIgfSwKKyAgICAgICAgICAgICAgICB7ICJu
YW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiIH0sCisgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIgfSwKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiIH0sCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlDb2xvcnMiIH0sCisg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJhbHRlcm5hdGVDb2xvcnMiLCAiJHJlZiI6ICJDb2xv
ckxpc3QiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUi
OiAic3RyaW5nIiwgImVudW0iOiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2si
XSB9CisgICAgICAgICAgICBdLAorICAgICAgICAgICAgInJldHVybnMiOiBbCisgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjog
eyAidHlwZSI6ICJzdHJpbmciIH0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vdGVz
IiwgInR5cGUiOiAic3RyaW5nIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0
YW1wIiwgInR5cGUiOiAibnVtYmVyIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFs
dWVzIiwgInR5cGUiOiAib2JqZWN0IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5
bG9hZCIsICJ0eXBlIjogImFueSIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRhdGFi
YXNlSWQiLCAiJHJlZiI6ICJEYXRhYmFzZUlkIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAic3FsRXJyb3IiLCAiJHJlZiI6ICJFcnJvciIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogInNjcmVlbkNvbG9yIiwgIiRyZWYiOiAiUHJpbWFyeUNvbG9ycyIgfSwKKyAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogImFsdGVybmF0ZUNvbG9ycyIsICIkcmVmIjogIkNvbG9yTGlzdCIgfSwK
KyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInByaW50Q29sb3IiLCAidHlwZSI6ICJzdHJpbmci
LCAiZW51bSI6IFsiY3lhbiIsICJtYWdlbnRhIiwgInllbGxvdyIsICJibGFjayJdIH0KKyAgICAg
ICAgICAgIF0KKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0
Zm9ybS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAuLjliZTQ2YTE3YWQxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2RlZmluaXRpb25zLXdpdGgt
bWFjLXBsYXRmb3JtLmpzb24KQEAgLTAsMCArMSwyOCBAQAoreworICAgICJkb21haW4iOiAiTmV0
d29yayIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiTmV0
d29ya0Vycm9yIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAi
Y29uZGl0aW9uIjogIlBMQVRGT1JNKE1BQykiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiBb
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJtZXNzYWdlIiwgInR5cGUiOiAic3RyaW5nIiwg
ImRlc2NyaXB0aW9uIjogIkVycm9yIG1lc3NhZ2UuIiB9LAorICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAiY29kZSIsICJ0eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgY29k
ZS4iIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgImNvbW1hbmRzIjog
WworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJsb2FkUmVzb3VyY2UiLAorICAgICAg
ICAgICAgImNvbmRpdGlvbiI6ICJQTEFURk9STShNQUMpIiwKKyAgICAgICAgICAgICJkZXNjcmlw
dGlvbiI6ICJMb2FkcyBhIHJlc291cmNlIGluIHRoZSBjb250ZXh0IG9mIGEgZnJhbWUgb24gdGhl
IGluc3BlY3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNoZWNrcy4iCisgICAgICAgIH0K
KyAgICBdLAorICAgICJldmVudHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjog
InJlc291cmNlTG9hZGVkIiwKKyAgICAgICAgICAgICJjb25kaXRpb24iOiAiUExBVEZPUk0oTUFD
KSIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQSByZXNvdXJjZSB3YXMgbG9hZGVkLiIK
KyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9kb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24gYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZG9tYWluLWRlYnVnZ2Fi
bGVUeXBlcy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xZmVi
MGM5YTI3ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9kb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24KQEAgLTAsMCArMSw4
IEBACitbCit7CisgICAgImRvbWFpbiI6ICJEb21haW4iLAorICAgICJkZWJ1Z2dhYmxlVHlwZXMi
OiBbIndlYi1wYWdlIl0sCisgICAgImNvbW1hbmRzIjogW3sibmFtZSI6ICJDb21tYW5kIn1dLAor
ICAgICJldmVudHMiOiBbeyJuYW1lIjogIkV2ZW50In1dCit9CitdCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZG9tYWluLXRhcmdldFR5
cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmct
ZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAuLmY2MmZiMzhiYTc4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2RvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5n
LWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCkBAIC0wLDAgKzEsOCBAQAorWworeworICAgICJk
b21haW4iOiAiRG9tYWluIiwKKyAgICAiZGVidWdnYWJsZVR5cGVzIjogWyJwYWdlIl0sCisgICAg
ImNvbW1hbmRzIjogW3sibmFtZSI6ICJDb21tYW5kIiwgInRhcmdldFR5cGVzIjogWyJwYWdlIiwg
IndvcmtlciJdfV0sCisgICAgImV2ZW50cyI6IFt7Im5hbWUiOiAiRXZlbnQifV0KK30KK10KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9k
b21haW4tdGFyZ2V0VHlwZXMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9kb21haW4tdGFyZ2V0VHlwZXMuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMC4uNmE2ZTQwZDYwYWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZG9tYWluLXRhcmdldFR5
cGVzLmpzb24KQEAgLTAsMCArMSw4IEBACitbCit7CisgICAgImRvbWFpbiI6ICJEb21haW4iLAor
ICAgICJ0YXJnZXRUeXBlcyI6IFsicGFnZSJdLAorICAgICJjb21tYW5kcyI6IFt7Im5hbWUiOiAi
Q29tbWFuZCIsICJ0YXJnZXRUeXBlcyI6IFsicGFnZSJdfV0sCisgICAgImV2ZW50cyI6IFt7Im5h
bWUiOiAiRXZlbnQiLCAidGFyZ2V0VHlwZXMiOiBbInBhZ2UiXX1dCit9CitdCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZG9tYWlucy13
aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMu
anNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOTRhOGVjYjE3NmQK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCkBAIC0wLDAg
KzEsNTQgQEAKK1sKK3sKKyAgICAiZG9tYWluIjogIk5ldHdvcmsxIiwKKyAgICAiY29tbWFuZHMi
OiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJjZTEiLAorICAg
ICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRleHQg
b2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4gY2hl
Y2tzLiIKKyAgICAgICAgfQorICAgIF0KK30sCit7CisgICAgImRvbWFpbiI6ICJOZXR3b3JrMiIs
CisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiTG9hZGVySWQi
LAorICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlv
biI6ICJVbmlxdWUgbG9hZGVyIGlkZW50aWZpZXIuIgorICAgICAgICB9CisgICAgXQorfSwKK3sK
KyAgICAiZG9tYWluIjogIk5ldHdvcmszIiwKKyAgICAiY29tbWFuZHMiOiBbCisgICAgICAgIHsK
KyAgICAgICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJjZTEiLAorICAgICAgICAgICAgImRlc2Ny
aXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0
aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKKyAgICAgICAg
fSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAibG9hZFJlc291cmNlMiIsCisgICAg
ICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9hZHMgYSByZXNvdXJjZSBpbiB0aGUgY29udGV4dCBv
ZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFnZSB3aXRob3V0IGNyb3NzIG9yaWdpbiBjaGVj
a3MuIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJsb2FkUmVz
b3VyY2UzIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBhIHJlc291cmNlIGlu
IHRoZSBjb250ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGluc3BlY3RlZCBwYWdlIHdpdGhvdXQgY3Jv
c3Mgb3JpZ2luIGNoZWNrcy4iCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJu
YW1lIjogImxvYWRSZXNvdXJjZTQiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRz
IGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBh
Z2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKKyAgICAgICAgfSwKKyAgICAgICAgewor
ICAgICAgICAgICAgIm5hbWUiOiAibG9hZFJlc291cmNlNSIsCisgICAgICAgICAgICAiZGVzY3Jp
cHRpb24iOiAiTG9hZHMgYSByZXNvdXJjZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1lIG9uIHRo
ZSBpbnNwZWN0ZWQgcGFnZSB3aXRob3V0IGNyb3NzIG9yaWdpbiBjaGVja3MuIgorICAgICAgICB9
LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJsb2FkUmVzb3VyY2U2IiwKKyAgICAg
ICAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBhIHJlc291cmNlIGluIHRoZSBjb250ZXh0IG9m
IGEgZnJhbWUgb24gdGhlIGluc3BlY3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNoZWNr
cy4iCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImxvYWRSZXNv
dXJjZTciLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4g
dGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9z
cyBvcmlnaW4gY2hlY2tzLiIKKyAgICAgICAgfQorICAgIF0KK30KK10KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9lbnVtLXZhbHVlcy5q
c29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2VudW0t
dmFsdWVzLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmNkYWQ2
MWRmN2M5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2VudW0tdmFsdWVzLmpzb24KQEAgLTAsMCArMSwzNSBAQAoreyJkb21h
aW5zIjpbCit7CisgICAgImRvbWFpbiI6ICJUeXBlRG9tYWluIiwKKyAgICAidHlwZXMiOiBbCisg
ICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJUeXBlRG9tYWluRW51bSIsCisgICAgICAgICAg
ICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgImVudW0iOiBbInNoYXJlZCIsICJyZWQi
LCAiZ3JlZW4iLCAiYmx1ZSJdCisgICAgICAgIH0KKyAgICBdCit9LAoreworICAgICJkb21haW4i
OiAiQ29tbWFuZERvbWFpbiIsCisgICAgImNvbW1hbmRzIjogWworICAgICAgICB7CisgICAgICAg
ICAgICAibmFtZSI6ICJjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZSIsCisgICAgICAgICAgICAi
cGFyYW1ldGVycyI6IFtdLAorICAgICAgICAgICAgInJldHVybnMiOiBbCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJyZXR1cm5WYWx1ZSIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJz
aGFyZWQiLCAiY3lhbiIsICJtYWdlbnRhIiwgInllbGxvdyJdIH0KKyAgICAgICAgICAgIF0KKyAg
ICAgICAgfQorICAgIF0KK30sCit7CisgICAgImRvbWFpbiI6ICJFdmVudERvbWFpbiIsCisgICAg
ImV2ZW50cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiZXZlbnRXaXRoRW51
bVBhcmFtZXRlciIsCisgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInBhcmFtZXRlciIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJzaGFy
ZWQiLCAiYmxhY2siLCAid2hpdGUiXSB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBd
Cit9CitdfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBl
Lmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXZl
bnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNGRmZWQ0MWVkMjEKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXZl
bnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgpAQCAtMCww
ICsxLDggQEAKK1sKK3sKKyAgICAiZG9tYWluIjogIkRvbWFpbiIsCisgICAgImRlYnVnZ2FibGVU
eXBlcyI6IFsicGFnZSJdLAorICAgICJjb21tYW5kcyI6IFt7Im5hbWUiOiAiQ29tbWFuZCJ9XSwK
KyAgICAiZXZlbnRzIjogW3sibmFtZSI6ICJFdmVudCIsICJ0YXJnZXRUeXBlcyI6IFsicGFnZSIs
ICJ3b3JrZXIiXX1dCit9CitdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29u
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V2ZW50cy13
aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMC4uY2FiYmYxMGI4MzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFy
YW1ldGVycy5qc29uCkBAIC0wLDAgKzEsNTkgQEAKK3sKKyAgICAiZG9tYWluIjogIkRhdGFiYXNl
IiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJEYXRhYmFz
ZUlkIiwKKyAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAiZGVzY3Jp
cHRpb24iOiAiVW5pcXVlIGlkZW50aWZpZXIgb2YgRGF0YWJhc2Ugb2JqZWN0LiIKKyAgICAgICAg
fSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlByaW1hcnlDb2xvcnMiLAorICAgICAg
ICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICJ2YWx1ZXMiOiBbInJlZCIsICJn
cmVlbiIsICJibHVlIl0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjog
IkNvbG9yTGlzdCIsCisgICAgICAgICAgICAidHlwZSI6ICJhcnJheSIsCisgICAgICAgICAgICAi
aXRlbXMiOiB7ICIkcmVmIjogIlByaW1hcnlDb2xvcnMiIH0KKyAgICAgICAgfSwKKyAgICAgICAg
eworICAgICAgICAgICAgImlkIjogIkVycm9yIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVj
dCIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRGF0YWJhc2UgZXJyb3IuIiwKKyAgICAg
ICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibWVzc2Fn
ZSIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBtZXNzYWdlLiIgfSwK
KyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvZGUiLCAidHlwZSI6ICJpbnRlZ2VyIiwgImRl
c2NyaXB0aW9uIjogIkVycm9yIGNvZGUuIiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAg
ICBdLAorICAgICJldmVudHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImRp
ZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMiLAorICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBb
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5
IiwgIm9wdGlvbmFsIjogdHJ1ZSwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwKKyAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlv
bmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5
cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIsICJvcHRpb25h
bCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYi
OiAiRXJyb3IiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJzY3JlZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlDb2xvcnMiLCAib3B0aW9uYWwiOiB0cnVl
IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJhbHRlcm5hdGVDb2xvcnMiLCAiJHJlZiI6
ICJDb2xvckxpc3QiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgInZhbHVlcyI6IFsiY3lhbiIsICJt
YWdlbnRhIiwgInllbGxvdyIsICJibGFjayJdLCAib3B0aW9uYWwiOiB0cnVlIH0KKyAgICAgICAg
ICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiZGlkRXhl
Y3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIiwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwor
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIs
ICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCisgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIgfSwKKyAgICAgICAgICAgICAgICB7ICJu
YW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIgfSwKKyAgICAgICAgICAgICAgICB7ICJu
YW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiIH0sCisgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVycm9yIiB9LAorICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6ICJQcmltYXJ5Q29sb3JzIiB9LAorICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwgIiRyZWYiOiAiQ29sb3JMaXN0IiB9
LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmlu
ZyIsICJ2YWx1ZXMiOiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSB9Cisg
ICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZC10YXJn
ZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJlc3VsdCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5k
LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tcmVzdWx0Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5iYmVlYWI5ZGFkNgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9leHBlY3RlZC9jb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVU
eXBlLmpzb24tcmVzdWx0CkBAIC0wLDAgKzEsMTA0NiBAQAorIyMjIEJlZ2luIEZpbGU6IEluc3Bl
Y3RvckJhY2tlbmRDb21tYW5kcy5qcy5pbgorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisvLyBEb21haW4K
K0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIkRvbWFpbiIsIFsicGFnZSIsICJ3b3Jr
ZXIiXSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiRG9tYWluLkNvbW1hbmQi
LCBudWxsLCBbXSwgW10pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckV2ZW50KCJEb21haW4u
RXZlbnQiLCBudWxsLCBbXSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluRGlzcGF0
Y2hlciA9IEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEaXNwYXRjaGVyLmJpbmQoSW5zcGVjdG9y
QmFja2VuZCwgIkRvbWFpbiIpOworSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiRG9t
YWluIiwgWyJwYWdlIl0pOworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMu
anMuaW4KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMu
aAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmQtdGFyZ2V0VHlwZS1t
YXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9QbGF0
Zm9ybS5oPgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisK
KyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2Ns
YXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldEJh
Y2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7
IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9CisgICAgQmFja2Vu
ZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5k
RGlzcGF0Y2hlci5nZXQoKTsgfQorcHJpdmF0ZToKKyAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNo
ZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Cit9OworCisKK2NsYXNzIEFsdGVybmF0ZURvbWFpbkJh
Y2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1
YmxpYzoKKyAgICB2aXJ0dWFsIH5BbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlcigpIHsg
fQorICAgIHZpcnR1YWwgdm9pZCBDb21tYW5kKGxvbmcgY2FsbElkKSA9IDA7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQorIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGlu
Zy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5o
PgorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0eXBlZGVmIFN0cmluZyBF
cnJvclN0cmluZzsKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQorY2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXI7CisjZW5kaWYgLy8gRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKK2NsYXNzIERvbWFpbkJhY2tl
bmREaXNwYXRjaGVySGFuZGxlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIENvbW1hbmQo
RXJyb3JTdHJpbmcmKSA9IDA7Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+RG9tYWluQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyKCk7Cit9OworCitjbGFzcyBEb21haW5CYWNrZW5kRGlzcGF0Y2hl
ciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6
CisgICAgc3RhdGljIFJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmRE
aXNwYXRjaGVyJiwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgdm9pZCBk
aXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpP
YmplY3Q+JiYgbWVzc2FnZSkgZmluYWw7Citwcml2YXRlOgorICAgIHZvaWQgQ29tbWFuZChsb25n
IHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyNpZiBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK3B1YmxpYzoKKyAgICB2b2lkIHNl
dEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIqIGFs
dGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlz
cGF0Y2hlcjsgfQorcHJpdmF0ZToKKyAgICBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hl
ciogbV9hbHRlcm5hdGVEaXNwYXRjaGVyIHsgbnVsbHB0ciB9OworI2VuZGlmIC8vIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorcHJpdmF0ZToKKyAgICBEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlciopOworICAgIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2VudCB7
IG51bGxwdHIgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxl
OiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5k
RGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFu
ZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFs
dWVzLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCisjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgorI2VuZGlm
IC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCituYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKKworRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+RG9tYWluQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9CisKK1JlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hl
cj4gRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYgYmFj
a2VuZERpc3BhdGNoZXIsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCit7
CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRG9tYWluQmFja2VuZERpc3BhdGNoZXIoYmFja2Vu
ZERpc3BhdGNoZXIsIGFnZW50KSk7Cit9CisKK0RvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpEb21h
aW5CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIs
IERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCisgICAgOiBTdXBwbGVtZW50
YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKKyAgICAsIG1fYWdlbnQoYWdl
bnQpCit7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9t
YWluKCJEb21haW4iX3MsIHRoaXMpOworfQorCit2b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVy
OjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09O
OjpPYmplY3Q+JiYgbWVzc2FnZSkKK3sKKyAgICBSZWY8RG9tYWluQmFja2VuZERpc3BhdGNoZXI+
IHByb3RlY3QoKnRoaXMpOworCisgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVyczsK
KyAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFyYW1ldGVycyk7CisKKyAgICBp
ZiAobWV0aG9kID09ICJDb21tYW5kIikgeworICAgICAgICBDb21tYW5kKHJlcXVlc3RJZCwgV1RG
TW92ZShwYXJhbWV0ZXJzKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRo
b2ROb3RGb3VuZCwgIidEb21haW4uIiArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKK30K
Kwordm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVlc3RJZCwg
UmVmUHRyPEpTT046Ok9iamVjdD4mJikKK3sKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKKyAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7CisgICAgICAg
IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+Q29tbWFuZChyZXF1ZXN0SWQpOworICAgICAgICByZXR1
cm47CisgICAgfQorI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENI
RVJTKQorCisgICAgRXJyb3JTdHJpbmcgZXJyb3I7CisgICAgUmVmPEpTT046Ok9iamVjdD4gcmVz
dWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBtX2FnZW50LT5Db21tYW5kKGVycm9y
KTsKKworICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOworICAg
IGVsc2UKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihC
YWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hp
bmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0u
aD4KKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDx3dGYvSlNP
TlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKKworY2xhc3MgRnJvbnRlbmRSb3V0ZXI7CisKK2NsYXNzIERvbWFpbkZyb250
ZW5kRGlzcGF0Y2hlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6Cisg
ICAgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVyKEZyb250ZW5kUm91dGVyJiBmcm9udGVuZFJvdXRl
cikgOiBtX2Zyb250ZW5kUm91dGVyKGZyb250ZW5kUm91dGVyKSB7IH0KKyAgICB2b2lkIEV2ZW50
KCk7Citwcml2YXRlOgorICAgIEZyb250ZW5kUm91dGVyJiBtX2Zyb250ZW5kUm91dGVyOworfTsK
KworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERp
c3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNw
cAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmQtdGFyZ2V0VHlwZS1t
YXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVz
dEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCitu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordm9pZCBEb21haW5Gcm9udGVuZERpc3BhdGNoZXI6OkV2
ZW50KCkKK3sKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVj
dDo6Y3JlYXRlKCk7CisgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9t
YWluLkV2ZW50Il9zKTsKKworICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNz
YWdlLT50b0pTT05TdHJpbmcoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisj
IyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4K
KworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCituYW1lc3BhY2UgUHJvdG9jb2wgeworCisK
KworCisKKworCisKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorCisjIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVU
eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKworI2lu
Y2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwor
bmFtZXNwYWNlIEluc3BlY3RvciB7CisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKworCit9IC8v
IG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8
d3RmL1BsYXRmb3JtLmg+CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisK
K0Bwcm90b2NvbCBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyOworCituYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKKworCitjbGFzcyBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNo
ZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIgeworICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIE9iakNJbnNwZWN0b3JEb21h
aW5CYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiBo
YW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9CisgICAgdm9pZCBDb21tYW5kKGxvbmcg
cmVxdWVzdElkKSBmaW5hbDsKK3ByaXZhdGU6CisgICAgUmV0YWluUHRyPGlkPFRlc3RQcm90b2Nv
bERvbWFpbkRvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJz
LmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRj
aGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90
b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJu
YWwuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbmNsdWRl
IDx3dGYvSlNPTlZhbHVlcy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordm9pZCBPYmpD
SW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9uZyByZXF1ZXN0SWQp
Cit7CisgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKENv
bW1hbmRXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsKKyAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmRE
aXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uQ29tbWFuZCcgd2FzIG5vdCBmb3Vu
ZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0
cmluZyAqZXJyb3IpIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9j
b2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3Ip
OworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAg
IH07CisKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeeworICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBm
YWxzZSk7CisgICAgfTsKKworICAgIFttX2RlbGVnYXRlIENvbW1hbmRXaXRoRXJyb3JDYWxsYmFj
azplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOworfQorCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNr
ZW5kRGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3Vy
YXRpb24uaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmQtdGFyZ2V0
VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDx3dGYvUGxhdGZvcm0uaD4KKwor
I2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgorCitfX2F0dHJpYnV0ZV9fKCh2
aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJh
dGlvbiA6IE5TT2JqZWN0CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluLCBzZXR0ZXI9c2V0
RG9tYWluSGFuZGxlcjopIGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IGRvbWFp
bkhhbmRsZXI7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFRlc3RQcm90b2NvbERv
bWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqZG9tYWluRXZlbnREaXNwYXRjaGVyOworQGVuZAor
CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dh
YmxlVHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
KyNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKKworI2ltcG9ydCAiVGVzdFBy
b3RvY29sSW50ZXJuYWwuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVy
cy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQu
aD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxl
ci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERp
c3BhdGNoZXJzLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0
aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3Rv
ckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworICAgIGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFp
bkhhbmRsZXI+IF9kb21haW5IYW5kbGVyOworICAgIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2
ZW50RGlzcGF0Y2hlciAqX2RvbWFpbkV2ZW50RGlzcGF0Y2hlcjsKK30KKworLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKilj
b250cm9sbGVyCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisg
ICAgICAgIHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250cm9s
bGVyID0gY29udHJvbGxlcjsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9j
Cit7CisgICAgW19kb21haW5IYW5kbGVyIHJlbGVhc2VdOworICAgIFtfZG9tYWluRXZlbnREaXNw
YXRjaGVyIHJlbGVhc2VdOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAodm9pZClzZXRE
b21haW5IYW5kbGVyOihpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiloYW5kbGVy
Cit7CisgICAgaWYgKGhhbmRsZXIgPT0gX2RvbWFpbkhhbmRsZXIpCisgICAgICAgIHJldHVybjsK
KworICAgIFtfZG9tYWluSGFuZGxlciByZWxlYXNlXTsKKyAgICBfZG9tYWluSGFuZGxlciA9IFto
YW5kbGVyIHJldGFpbl07CisKKyAgICBhdXRvIGFsdGVybmF0ZURpc3BhdGNoZXIgPSBtYWtlVW5p
cXVlPE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7CisgICAg
YXV0byBhbHRlcm5hdGVBZ2VudCA9IG1ha2VVbmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdl
bnQ8RG9tYWluQmFja2VuZERpc3BhdGNoZXIsIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRj
aGVyPj4oIkRvbWFpbiJfcywgKl9jb250cm9sbGVyLCBXVEZNb3ZlKGFsdGVybmF0ZURpc3BhdGNo
ZXIpKTsKKyAgICBfY29udHJvbGxlci0+YXBwZW5kRXh0cmFBZ2VudChXVEZNb3ZlKGFsdGVybmF0
ZUFnZW50KSk7Cit9CisKKy0gKGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+KWRv
bWFpbkhhbmRsZXIKK3sKKyAgICByZXR1cm4gX2RvbWFpbkhhbmRsZXI7Cit9CisKKy0gKFRlc3RQ
cm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqKWRvbWFpbkV2ZW50RGlzcGF0Y2hl
cgoreworICAgIGlmICghX2RvbWFpbkV2ZW50RGlzcGF0Y2hlcikKKyAgICAgICAgX2RvbWFpbkV2
ZW50RGlzcGF0Y2hlciA9IFtbVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVy
IGFsbG9jXSBpbml0V2l0aENvbnRyb2xsZXI6X2NvbnRyb2xsZXJdOworICAgIHJldHVybiBfZG9t
YWluRXZlbnREaXNwYXRjaGVyOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xDb25maWd1cmF0aW9uLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVu
dERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFu
ZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2Nv
bEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgor
I2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsK
KworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hl
cgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Cit9
CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVj
dG9yQ29udHJvbGxlciopY29udHJvbGxlcgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Cisg
ICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIEFTU0VSVChjb250cm9sbGVy
KTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9CisK
Ky0gKHZvaWQpRXZlbnQKK3sKKyAgICBjb25zdCBGcm9udGVuZFJvdXRlciYgcm91dGVyID0gX2Nv
bnRyb2xsZXItPmZyb250ZW5kUm91dGVyKCk7CisKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29u
TWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAganNvbk1lc3NhZ2UtPnNldFN0
cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9zKTsKKyAgICByb3V0ZXIuc2VuZEV2ZW50
KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZC10
YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCisvLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91
bmRhdGlvbi5oPgorI2ltcG9ydCA8d3RmL1BsYXRmb3JtLmg+CisKKyNpbXBvcnQgPFdlYkluc3Bl
Y3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KKworCisKKworCisKKworCitAcHJvdG9jb2wg
VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlciA8TlNPYmplY3Q+CitAb3B0aW9uYWwKKy0g
KHZvaWQpQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikp
ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikodm9pZCkpc3VjY2Vzc0NhbGxi
YWNrOworQGVuZAorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0Bp
bnRlcmZhY2UgVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyIDogTlNPYmpl
Y3QKKy0gKHZvaWQpRXZlbnQ7CitAZW5kCisKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVBy
b3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgorCisjIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5n
LWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaW1wb3J0ICJUZXN0
UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCisj
aW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4K
KyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sRG9t
YWluRG9tYWluRXZlbnREaXNwYXRjaGVyIChQcml2YXRlKQorLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoQ29udHJvbGxlcjooSW5zcGVjdG9yOjpBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIq
KWNvbnRyb2xsZXI7CitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5h
bC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGlu
Zy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDx3dGYvUGxhdGZvcm0uaD4KKworI2ltcG9ydCAiVGVz
dFByb3RvY29sLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZl
cnNpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBP
YmpDRW51bVR5cGU+CitPcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhj
b25zdCBTdHJpbmcmIHZhbHVlKTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKworIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5
cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1w
b3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKworI2ltcG9ydCAiVGVzdFByb3Rv
Y29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCisjaW1wb3J0IDxXZWJJ
bnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorCit1c2luZyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yOworCisKKworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZC10YXJnZXRUeXBlLW1hdGNo
aW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNp
bXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8V2ViSW5zcGVj
dG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKyNpbXBvcnQgPHd0Zi9Bc3NlcnRp
b25zLmg+CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5z
cGVjdG9yOworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRo
LWFzeW5jLWF0dHJpYnV0ZS5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMC4uNDBkODUxZmYyMzgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1h
c3luYy1hdHRyaWJ1dGUuanNvbi1yZXN1bHQKQEAgLTAsMCArMSwxNzk1IEBACisjIyMgQmVnaW4g
RmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzLmluCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisvLyBEYXRhYmFzZQorSW5zcGVj
dG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiRGF0YWJhc2UiLCBudWxsKTsKK0luc3BlY3RvckJh
Y2tlbmQucmVnaXN0ZXJFbnVtKCJEYXRhYmFzZS5QcmltYXJ5Q29sb3JzIiwge1JlZDogInJlZCIs
IEdyZWVuOiAiZ3JlZW4iLCBCbHVlOiAiYmx1ZSJ9KTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0
ZXJDb21tYW5kKCJEYXRhYmFzZS5leGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzIiwg
bnVsbCwgW3sibmFtZSI6ICJkYXRhYmFzZUlkIiwgInR5cGUiOiAibnVtYmVyIn0sIHsibmFtZSI6
ICJxdWVyeSIsICJ0eXBlIjogInN0cmluZyJ9XSwgWyJjb2x1bW5OYW1lcyIsICJub3RlcyIsICJ0
aW1lc3RhbXAiLCAidmFsdWVzIiwgInBheWxvYWQiLCAiZGF0YWJhc2VJZCIsICJzcWxFcnJvciIs
ICJzY3JlZW5Db2xvciIsICJhbHRlcm5hdGVDb2xvcnMiLCAicHJpbnRDb2xvciJdKTsKK0luc3Bl
Y3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJEYXRhYmFzZS5leGVjdXRlU1FMQXN5bmNPcHRp
b25hbFJldHVyblZhbHVlcyIsIG51bGwsIFt7Im5hbWUiOiAiZGF0YWJhc2VJZCIsICJ0eXBlIjog
Im51bWJlciJ9LCB7Im5hbWUiOiAicXVlcnkiLCAidHlwZSI6ICJzdHJpbmcifV0sIFsiY29sdW1u
TmFtZXMiLCAibm90ZXMiLCAidGltZXN0YW1wIiwgInZhbHVlcyIsICJwYXlsb2FkIiwgImRhdGFi
YXNlSWQiLCAic3FsRXJyb3IiLCAic2NyZWVuQ29sb3IiLCAiYWx0ZXJuYXRlQ29sb3JzIiwgInBy
aW50Q29sb3IiXSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiRGF0YWJhc2Uu
ZXhlY3V0ZVNRTFN5bmMiLCBudWxsLCBbeyJuYW1lIjogImRhdGFiYXNlSWQiLCAidHlwZSI6ICJu
dW1iZXIifSwgeyJuYW1lIjogInF1ZXJ5IiwgInR5cGUiOiAic3RyaW5nIn1dLCBbImNvbHVtbk5h
bWVzIiwgIm5vdGVzIiwgInRpbWVzdGFtcCIsICJ2YWx1ZXMiLCAicGF5bG9hZCIsICJkYXRhYmFz
ZUlkIiwgInNxbEVycm9yIiwgImFsdGVybmF0ZUNvbG9ycyIsICJzY3JlZW5Db2xvciIsICJwcmlu
dENvbG9yIl0pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIkRhdGFiYXNlLmV4
ZWN1dGVTUUxBc3luYyIsIG51bGwsIFt7Im5hbWUiOiAiZGF0YWJhc2VJZCIsICJ0eXBlIjogIm51
bWJlciJ9LCB7Im5hbWUiOiAicXVlcnkiLCAidHlwZSI6ICJzdHJpbmcifV0sIFsiY29sdW1uTmFt
ZXMiLCAibm90ZXMiLCAidGltZXN0YW1wIiwgInZhbHVlcyIsICJwYXlsb2FkIiwgImRhdGFiYXNl
SWQiLCAic3FsRXJyb3IiLCAic2NyZWVuQ29sb3IiLCAiYWx0ZXJuYXRlQ29sb3JzIiwgInByaW50
Q29sb3IiXSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRGF0YWJhc2VEaXNwYXRjaGVyID0g
SW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRpc3BhdGNoZXIuYmluZChJbnNwZWN0b3JCYWNrZW5k
LCAiRGF0YWJhc2UiKTsKK0luc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkRhdGFiYXNl
IiwgbnVsbCk7CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcy5pbgor
CisjIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1
dGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBl
cy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
Lmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4K
KworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNr
ZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZN
b3ZlKGRpc3BhdGNoZXIpOyB9CisgICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRj
aGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQorcHJpdmF0
ZToKKyAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Cit9
OworCisKK2NsYXNzIEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMg
QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgfkFsdGVy
bmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZXhl
Y3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIGNhbGxJZCwgaW50IGluX2RhdGFi
YXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZXhl
Y3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyBjYWxsSWQsIGludCBpbl9kYXRh
YmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGV4
ZWN1dGVTUUxTeW5jKGxvbmcgY2FsbElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5n
JiBpbl9xdWVyeSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMQXN5bmMobG9uZyBj
YWxsSWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KSA9IDA7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hl
cnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5
bmMtYXR0cmlidXRlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2luY2x1
ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7
CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK2NsYXNzIEFs
dGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI7CisjZW5kaWYgLy8gRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKK2NsYXNzIERhdGFiYXNlQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyIHsKK3B1YmxpYzoKKyAgICAvLyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIgJ3By
aW50Q29sb3InIHdoaWxlIGdlbmVyYXRpbmcgY29tbWFuZC9ldmVudCBleGVjdXRlU1FMU3luY09w
dGlvbmFsUmV0dXJuVmFsdWVzLgorICAgIGVudW0gY2xhc3MgUHJpbnRDb2xvciB7CisgICAgICAg
IEN5YW4gPSAzLAorICAgICAgICBNYWdlbnRhID0gNCwKKyAgICAgICAgWWVsbG93ID0gNSwKKyAg
ICAgICAgQmxhY2sgPSA2LAorICAgIH07IC8vIGVudW0gY2xhc3MgUHJpbnRDb2xvcgorICAgIHZp
cnR1YWwgdm9pZCBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKEVycm9yU3RyaW5n
JiwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnksIFJlZlB0cjxKU09O
OjpBcnJheU9mPFN0cmluZz4+JiBvcHRfb3V0X2NvbHVtbk5hbWVzLCBPcHRpb25hbDxTdHJpbmc+
JiBvcHRfb3V0X25vdGVzLCBPcHRpb25hbDxkb3VibGU+JiBvcHRfb3V0X3RpbWVzdGFtcCwgT3B0
aW9uYWw8SlNPTjo6T2JqZWN0PiYgb3B0X291dF92YWx1ZXMsIE9wdGlvbmFsPEpTT046OlZhbHVl
PiYgb3B0X291dF9wYXlsb2FkLCBPcHRpb25hbDxpbnQ+JiBvcHRfb3V0X2RhdGFiYXNlSWQsIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiBvcHRfb3V0X3NxbEVy
cm9yLCBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyogb3B0X291
dF9zY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xv
ckxpc3Q+JiBvcHRfb3V0X2FsdGVybmF0ZUNvbG9ycywgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXI6OlByaW50Q29sb3IqIG9wdF9vdXRfcHJpbnRDb2xvcikgPSAwOworICAgIGNsYXNz
IEV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2sgOiBwdWJsaWMgQmFj
a2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZSB7CisgICAgcHVibGljOgorICAgICAgICBFeGVj
dXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrKFJlZjxCYWNrZW5kRGlzcGF0
Y2hlcj4mJiwgaW50IGlkKTsKKyAgICAgICAgdm9pZCBzZW5kU3VjY2VzcyhSZWZQdHI8SlNPTjo6
QXJyYXlPZjxTdHJpbmc+PiYmIGNvbHVtbk5hbWVzLCBPcHRpb25hbDxTdHJpbmc+JiBub3Rlcywg
T3B0aW9uYWw8ZG91YmxlPiYgdGltZXN0YW1wLCBPcHRpb25hbDxKU09OOjpPYmplY3Q+JiB2YWx1
ZXMsIE9wdGlvbmFsPEpTT046OlZhbHVlPiYgcGF5bG9hZCwgT3B0aW9uYWw8aW50PiYgZGF0YWJh
c2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mJiBzcWxF
cnJvciwgT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xv
cnM+IHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNv
bG9yTGlzdD4mJiBhbHRlcm5hdGVDb2xvcnMsIE9wdGlvbmFsPERhdGFiYXNlQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyOjpQcmludENvbG9yPiBwcmludENvbG9yKTsKKyAgICB9OworICAgIHZpcnR1
YWwgdm9pZCBleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhpbnQgaW5fZGF0YWJh
c2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSwgUmVmPEV4ZWN1dGVTUUxBc3luY09wdGlvbmFs
UmV0dXJuVmFsdWVzQ2FsbGJhY2s+JiYgY2FsbGJhY2spID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
ZXhlY3V0ZVNRTFN5bmMoRXJyb3JTdHJpbmcmLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3Ry
aW5nJiBpbl9xdWVyeSwgUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mIG91dF9jb2x1bW5O
YW1lcywgU3RyaW5nKiBvdXRfbm90ZXMsIGRvdWJsZSogb3V0X3RpbWVzdGFtcCwgSlNPTjo6T2Jq
ZWN0KiBvdXRfdmFsdWVzLCBKU09OOjpWYWx1ZSogb3V0X3BheWxvYWQsIGludCogb3V0X2RhdGFi
YXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiBvdXRf
c3FsRXJyb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0
PiYgb3V0X2FsdGVybmF0ZUNvbG9ycywgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlBy
aW1hcnlDb2xvcnMqIG91dF9zY3JlZW5Db2xvciwgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXI6OlByaW50Q29sb3IqIG91dF9wcmludENvbG9yKSA9IDA7CisgICAgY2xhc3MgRXhlY3V0
ZVNRTEFzeW5jQ2FsbGJhY2sgOiBwdWJsaWMgQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFz
ZSB7CisgICAgcHVibGljOgorICAgICAgICBFeGVjdXRlU1FMQXN5bmNDYWxsYmFjayhSZWY8QmFj
a2VuZERpc3BhdGNoZXI+JiYsIGludCBpZCk7CisgICAgICAgIHZvaWQgc2VuZFN1Y2Nlc3MoUmVm
UHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mJiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBu
b3RlcywgZG91YmxlIHRpbWVzdGFtcCwgSlNPTjo6T2JqZWN0IHZhbHVlcywgSlNPTjo6VmFsdWUg
cGF5bG9hZCwgaW50IGRhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6RXJyb3I+JiYgc3FsRXJyb3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQ
cmltYXJ5Q29sb3JzIHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0
YWJhc2U6OkNvbG9yTGlzdD4mJiBhbHRlcm5hdGVDb2xvcnMsIERhdGFiYXNlQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyOjpQcmludENvbG9yIHByaW50Q29sb3IpOworICAgIH07CisgICAgdmlydHVh
bCB2b2lkIGV4ZWN1dGVTUUxBc3luYyhpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBp
bl9xdWVyeSwgUmVmPEV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrPiYmIGNhbGxiYWNrKSA9IDA7Citw
cm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIo
KTsKK307CisKK2NsYXNzIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMg
U3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICB2b2lkIGRpc3BhdGNoKGxvbmcg
cmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNz
YWdlKSBmaW5hbDsKK3ByaXZhdGU6CisgICAgdm9pZCBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0
dXJuVmFsdWVzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRl
cnMpOworICAgIHZvaWQgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyBy
ZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisgICAgdm9pZCBl
eGVjdXRlU1FMU3luYyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJh
bWV0ZXJzKTsKKyAgICB2b2lkIGV4ZWN1dGVTUUxBc3luYyhsb25nIHJlcXVlc3RJZCwgUmVmUHRy
PEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVS
TkFURV9ESVNQQVRDSEVSUykKK3B1YmxpYzoKKyAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNo
ZXIoQWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hl
cikgeyBtX2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9Citwcml2
YXRlOgorICAgIEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIqIG1fYWx0ZXJuYXRl
RGlzcGF0Y2hlciB7IG51bGxwdHIgfTsKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVS
TkFURV9ESVNQQVRDSEVSUykKK3ByaXZhdGU6CisgICAgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
cihCYWNrZW5kRGlzcGF0Y2hlciYsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7
CisgICAgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQgeyBudWxscHRy
IH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEJh
Y2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNo
ZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgt
YXN5bmMtYXR0cmlidXRlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0
Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91
dGVyLmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJE
ZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUo
SU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyNpbmNsdWRlICJUZXN0QWx0ZXJuYXRl
QmFja2VuZERpc3BhdGNoZXJzLmgiCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitEYXRhYmFzZUJhY2tl
bmREaXNwYXRjaGVySGFuZGxlcjo6fkRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCkg
eyB9CisKK1JlZjxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVyOjpjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCit7CisgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdl
bnQpKTsKK30KKworRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6RGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIERhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKKyAgICA6IFN1cHBsZW1lbnRhbEJhY2tlbmRE
aXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQorICAgICwgbV9hZ2VudChhZ2VudCkKK3sKKyAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oIkRhdGFi
YXNlIl9zLCB0aGlzKTsKK30KKwordm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpkaXNw
YXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmpl
Y3Q+JiYgbWVzc2FnZSkKK3sKKyAgICBSZWY8RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4gcHJv
dGVjdCgqdGhpcyk7CisKKyAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOworICAg
IG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsKKworICAgIGlmICht
ZXRob2QgPT0gImV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMiKSB7CisgICAgICAg
IGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMocmVxdWVzdElkLCBXVEZNb3ZlKHBh
cmFtZXRlcnMpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAobWV0aG9kID09ICJl
eGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyIpIHsKKyAgICAgICAgZXhlY3V0ZVNR
TEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAobWV0aG9kID09ICJleGVjdXRlU1FM
U3luYyIpIHsKKyAgICAgICAgZXhlY3V0ZVNRTFN5bmMocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFt
ZXRlcnMpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAobWV0aG9kID09ICJleGVj
dXRlU1FMQXN5bmMiKSB7CisgICAgICAgIGV4ZWN1dGVTUUxBc3luYyhyZXF1ZXN0SWQsIFdURk1v
dmUocGFyYW1ldGVycykpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9k
Tm90Rm91bmQsICInRGF0YWJhc2UuIiArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKK30K
Kwordm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMU3luY09wdGlvbmFs
UmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFt
ZXRlcnMpCit7CisgICAgaW50IGluX2RhdGFiYXNlSWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5n
ZXRJbnRlZ2VyKHBhcmFtZXRlcnMuZ2V0KCksICJkYXRhYmFzZUlkIl9zLCBudWxscHRyKTsKKyAg
ICBTdHJpbmcgaW5fcXVlcnkgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1l
dGVycy5nZXQoKSwgInF1ZXJ5Il9zLCBudWxscHRyKTsKKyAgICBpZiAobV9iYWNrZW5kRGlzcGF0
Y2hlci0+aGFzUHJvdG9jb2xFcnJvcnMoKSkgeworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCAi
U29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICdEYXRhYmFzZS5leGVjdXRlU1FMU3luY09wdGlvbmFs
UmV0dXJuVmFsdWVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiX3MpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisgICAg
aWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNo
ZXItPmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMocmVxdWVzdElkLCBpbl9kYXRh
YmFzZUlkLCBpbl9xdWVyeSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYgLy8gRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyAgICBFcnJvclN0cmluZyBl
cnJvcjsKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpOworICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IG91dF9jb2x1bW5OYW1lczsK
KyAgICBPcHRpb25hbDxTdHJpbmc+IG91dF9ub3RlczsKKyAgICBPcHRpb25hbDxkb3VibGU+IG91
dF90aW1lc3RhbXA7CisgICAgT3B0aW9uYWw8SlNPTjo6T2JqZWN0PiBvdXRfdmFsdWVzOworICAg
IE9wdGlvbmFsPEpTT046OlZhbHVlPiBvdXRfcGF5bG9hZDsKKyAgICBPcHRpb25hbDxpbnQ+IG91
dF9kYXRhYmFzZUlkOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6
RXJyb3I+IG91dF9zcWxFcnJvcjsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6
UHJpbWFyeUNvbG9ycyBvdXRfc2NyZWVuQ29sb3I7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IG91dF9hbHRlcm5hdGVDb2xvcnM7CisgICAgRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3Igb3V0X3ByaW50Q29sb3I7
CisgICAgbV9hZ2VudC0+ZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhlcnJvciwg
aW5fZGF0YWJhc2VJZCwgaW5fcXVlcnksIG91dF9jb2x1bW5OYW1lcywgb3V0X25vdGVzLCBvdXRf
dGltZXN0YW1wLCBvdXRfdmFsdWVzLCBvdXRfcGF5bG9hZCwgb3V0X2RhdGFiYXNlSWQsIG91dF9z
cWxFcnJvciwgb3V0X3NjcmVlbkNvbG9yLCBvdXRfYWx0ZXJuYXRlQ29sb3JzLCBvdXRfcHJpbnRD
b2xvcik7CisKKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7CisgICAgICAgIGlmIChvdXRfY29s
dW1uTmFtZXMpCisgICAgICAgICAgICByZXN1bHQtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywg
b3V0X2NvbHVtbk5hbWVzKTsKKyAgICAgICAgaWYgKG91dF9ub3Rlcy5oYXNWYWx1ZSgpKQorICAg
ICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCAqb3V0X25vdGVzKTsKKyAgICAg
ICAgaWYgKG91dF90aW1lc3RhbXAuaGFzVmFsdWUoKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0
RG91YmxlKCJ0aW1lc3RhbXAiX3MsICpvdXRfdGltZXN0YW1wKTsKKyAgICAgICAgaWYgKG91dF92
YWx1ZXMuaGFzVmFsdWUoKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJ2YWx1ZXMi
X3MsICpvdXRfdmFsdWVzKTsKKyAgICAgICAgaWYgKG91dF9wYXlsb2FkLmhhc1ZhbHVlKCkpCisg
ICAgICAgICAgICByZXN1bHQtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCAqb3V0X3BheWxvYWQpOwor
ICAgICAgICBpZiAob3V0X2RhdGFiYXNlSWQuaGFzVmFsdWUoKSkKKyAgICAgICAgICAgIHJlc3Vs
dC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgKm91dF9kYXRhYmFzZUlkKTsKKyAgICAgICAg
aWYgKG91dF9zcWxFcnJvcikKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJzcWxFcnJv
ciJfcywgb3V0X3NxbEVycm9yKTsKKyAgICAgICAgaWYgKG91dF9zY3JlZW5Db2xvci5oYXNWYWx1
ZSgpKQorICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCAqb3V0
X3NjcmVlbkNvbG9yKTsKKyAgICAgICAgaWYgKG91dF9hbHRlcm5hdGVDb2xvcnMpCisgICAgICAg
ICAgICByZXN1bHQtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIG91dF9hbHRlcm5hdGVD
b2xvcnMpOworICAgICAgICBpZiAob3V0X3ByaW50Q29sb3IuaGFzVmFsdWUoKSkKKyAgICAgICAg
ICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCAqb3V0X3ByaW50Q29sb3IpOwor
ICAgIH0KKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQorICAgICAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKKyAg
ICBlbHNlCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3Io
QmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Cit9CisKK0Rh
dGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJl
dHVyblZhbHVlc0NhbGxiYWNrOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0Nh
bGxiYWNrKFJlZjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBiYWNrZW5kRGlzcGF0Y2hlciwgaW50IGlk
KSA6IEJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UoV1RGTW92ZShiYWNrZW5kRGlzcGF0
Y2hlciksIGlkKSB7IH0KKwordm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6
RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjazo6c2VuZFN1Y2Nlc3Mo
UmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mJiBjb2x1bW5OYW1lcywgT3B0aW9uYWw8U3Ry
aW5nPiYgbm90ZXMsIE9wdGlvbmFsPGRvdWJsZT4mIHRpbWVzdGFtcCwgT3B0aW9uYWw8SlNPTjo6
T2JqZWN0PiYgdmFsdWVzLCBPcHRpb25hbDxKU09OOjpWYWx1ZT4mIHBheWxvYWQsIE9wdGlvbmFs
PGludD4mIGRhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6
RXJyb3I+JiYgc3FsRXJyb3IsIE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNl
OjpQcmltYXJ5Q29sb3JzPiBzY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiYgYWx0ZXJuYXRlQ29sb3JzLCBPcHRpb25hbDxEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvcj4gcHJpbnRDb2xvcikKK3sKKyAg
ICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
CisgICAgaWYgKGNvbHVtbk5hbWVzKQorICAgICAgICBqc29uTWVzc2FnZS0+c2V0QXJyYXkoImNv
bHVtbk5hbWVzIl9zLCBjb2x1bW5OYW1lcyk7CisgICAgaWYgKG5vdGVzLmhhc1ZhbHVlKCkpCisg
ICAgICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm5vdGVzIl9zLCAqbm90ZXMpOworICAgIGlm
ICh0aW1lc3RhbXAuaGFzVmFsdWUoKSkKKyAgICAgICAganNvbk1lc3NhZ2UtPnNldERvdWJsZSgi
dGltZXN0YW1wIl9zLCAqdGltZXN0YW1wKTsKKyAgICBpZiAodmFsdWVzLmhhc1ZhbHVlKCkpCisg
ICAgICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoInZhbHVlcyJfcywgKnZhbHVlcyk7CisgICAg
aWYgKHBheWxvYWQuaGFzVmFsdWUoKSkKKyAgICAgICAganNvbk1lc3NhZ2UtPnNldFZhbHVlKCJw
YXlsb2FkIl9zLCAqcGF5bG9hZCk7CisgICAgaWYgKGRhdGFiYXNlSWQuaGFzVmFsdWUoKSkKKyAg
ICAgICAganNvbk1lc3NhZ2UtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsICpkYXRhYmFzZUlk
KTsKKyAgICBpZiAoc3FsRXJyb3IpCisgICAgICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoInNx
bEVycm9yIl9zLCBzcWxFcnJvcik7CisgICAgaWYgKHNjcmVlbkNvbG9yLmhhc1ZhbHVlKCkpCisg
ICAgICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCAqc2NyZWVuQ29s
b3IpOworICAgIGlmIChhbHRlcm5hdGVDb2xvcnMpCisgICAgICAgIGpzb25NZXNzYWdlLT5zZXRB
cnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCBhbHRlcm5hdGVDb2xvcnMpOworICAgIGlmIChwcmlu
dENvbG9yLmhhc1ZhbHVlKCkpCisgICAgICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoInByaW50
Q29sb3IiX3MsICpwcmludENvbG9yKTsKKyAgICBDYWxsYmFja0Jhc2U6OnNlbmRTdWNjZXNzKFdU
Rk1vdmUoanNvbk1lc3NhZ2UpKTsKK30KKwordm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
OjpleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHJlcXVlc3RJZCwgUmVm
UHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKQoreworICAgIGludCBpbl9kYXRhYmFzZUlk
ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0SW50ZWdlcihwYXJhbWV0ZXJzLmdldCgpLCAiZGF0
YWJhc2VJZCJfcywgbnVsbHB0cik7CisgICAgU3RyaW5nIGluX3F1ZXJ5ID0gbV9iYWNrZW5kRGlz
cGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksICJxdWVyeSJfcywgbnVsbHB0cik7
CisgICAgaWYgKG1fYmFja2VuZERpc3BhdGNoZXItPmhhc1Byb3RvY29sRXJyb3JzKCkpIHsKKyAg
ICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlz
cGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnRGF0YWJh
c2UuZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMnIGNhbid0IGJlIHByb2Nlc3Nl
ZCJfcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKKyAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Cisg
ICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1
cm5WYWx1ZXMocmVxdWVzdElkLCBpbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCisKKyAgICBSZWY8RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1
dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2s+IGNhbGxiYWNrID0gYWRvcHRS
ZWYoKm5ldyBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5j
T3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjayhtX2JhY2tlbmREaXNwYXRjaGVyLmNvcHlSZWYo
KSwgcmVxdWVzdElkKSk7CisgICAgbV9hZ2VudC0+ZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1
cm5WYWx1ZXMoaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnksIGNhbGxiYWNrLmNvcHlSZWYoKSk7CisK
K30KKwordm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMU3luYyhsb25n
IHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKQoreworICAgIGlu
dCBpbl9kYXRhYmFzZUlkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0SW50ZWdlcihwYXJhbWV0
ZXJzLmdldCgpLCAiZGF0YWJhc2VJZCJfcywgbnVsbHB0cik7CisgICAgU3RyaW5nIGluX3F1ZXJ5
ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksICJxdWVy
eSJfcywgbnVsbHB0cik7CisgICAgaWYgKG1fYmFja2VuZERpc3BhdGNoZXItPmhhc1Byb3RvY29s
RXJyb3JzKCkpIHsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xF
cnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgIlNvbWUgYXJndW1lbnRzIG9m
IG1ldGhvZCAnRGF0YWJhc2UuZXhlY3V0ZVNRTFN5bmMnIGNhbid0IGJlIHByb2Nlc3NlZCJfcyk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKKyAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7CisgICAgICAg
IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZVNRTFN5bmMocmVxdWVzdElkLCBpbl9kYXRh
YmFzZUlkLCBpbl9xdWVyeSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYgLy8gRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyAgICBFcnJvclN0cmluZyBl
cnJvcjsKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpOworICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IG91dF9jb2x1bW5OYW1lczsK
KyAgICBTdHJpbmcgb3V0X25vdGVzOworICAgIGRvdWJsZSBvdXRfdGltZXN0YW1wOworICAgIEpT
T046Ok9iamVjdCBvdXRfdmFsdWVzOworICAgIEpTT046OlZhbHVlIG91dF9wYXlsb2FkOworICAg
IGludCBvdXRfZGF0YWJhc2VJZDsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0
YWJhc2U6OkVycm9yPiBvdXRfc3FsRXJyb3I7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IG91dF9hbHRlcm5hdGVDb2xvcnM7CisgICAgSW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgb3V0X3NjcmVlbkNvbG9yOwor
ICAgIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yIG91dF9wcmlu
dENvbG9yOworICAgIG1fYWdlbnQtPmV4ZWN1dGVTUUxTeW5jKGVycm9yLCBpbl9kYXRhYmFzZUlk
LCBpbl9xdWVyeSwgb3V0X2NvbHVtbk5hbWVzLCAmb3V0X25vdGVzLCAmb3V0X3RpbWVzdGFtcCwg
b3V0X3ZhbHVlcywgJm91dF9wYXlsb2FkLCAmb3V0X2RhdGFiYXNlSWQsIG91dF9zcWxFcnJvciwg
b3V0X2FsdGVybmF0ZUNvbG9ycywgJm91dF9zY3JlZW5Db2xvciwgJm91dF9wcmludENvbG9yKTsK
KworICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIHsKKyAgICAgICAgcmVzdWx0LT5zZXRBcnJheSgi
Y29sdW1uTmFtZXMiX3MsIG91dF9jb2x1bW5OYW1lcyk7CisgICAgICAgIHJlc3VsdC0+c2V0U3Ry
aW5nKCJub3RlcyJfcywgb3V0X25vdGVzKTsKKyAgICAgICAgcmVzdWx0LT5zZXREb3VibGUoInRp
bWVzdGFtcCJfcywgb3V0X3RpbWVzdGFtcCk7CisgICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJ2
YWx1ZXMiX3MsIG91dF92YWx1ZXMpOworICAgICAgICByZXN1bHQtPnNldFZhbHVlKCJwYXlsb2Fk
Il9zLCBvdXRfcGF5bG9hZCk7CisgICAgICAgIHJlc3VsdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJ
ZCJfcywgb3V0X2RhdGFiYXNlSWQpOworICAgICAgICByZXN1bHQtPnNldE9iamVjdCgic3FsRXJy
b3IiX3MsIG91dF9zcWxFcnJvcik7CisgICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoImFsdGVybmF0
ZUNvbG9ycyJfcywgb3V0X2FsdGVybmF0ZUNvbG9ycyk7CisgICAgICAgIHJlc3VsdC0+c2V0U3Ry
aW5nKCJzY3JlZW5Db2xvciJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6Omdl
dEVudW1Db25zdGFudFZhbHVlKG91dF9zY3JlZW5Db2xvcikpOworICAgICAgICByZXN1bHQtPnNl
dFN0cmluZygicHJpbnRDb2xvciJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6
OmdldEVudW1Db25zdGFudFZhbHVlKG91dF9wcmludENvbG9yKSk7CisgICAgfQorICAgIGlmICgh
ZXJyb3IubGVuZ3RoKCkpCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25z
ZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOworICAgIGVsc2UKKyAgICAgICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hl
cjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKK30KKworRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrOjpFeGVjdXRlU1FMQXN5bmND
YWxsYmFjayhSZWY8QmFja2VuZERpc3BhdGNoZXI+JiYgYmFja2VuZERpc3BhdGNoZXIsIGludCBp
ZCkgOiBCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlKFdURk1vdmUoYmFja2VuZERpc3Bh
dGNoZXIpLCBpZCkgeyB9CisKK3ZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6
OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrOjpzZW5kU3VjY2VzcyhSZWZQdHI8SlNPTjo6QXJyYXlP
ZjxTdHJpbmc+PiYmIGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG5vdGVzLCBkb3VibGUgdGlt
ZXN0YW1wLCBKU09OOjpPYmplY3QgdmFsdWVzLCBKU09OOjpWYWx1ZSBwYXlsb2FkLCBpbnQgZGF0
YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mJiBz
cWxFcnJvciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgc2Ny
ZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0
PiYmIGFsdGVybmF0ZUNvbG9ycywgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlBy
aW50Q29sb3IgcHJpbnRDb2xvcikKK3sKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2Fn
ZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAganNvbk1lc3NhZ2UtPnNldEFycmF5KCJj
b2x1bW5OYW1lcyJfcywgY29sdW1uTmFtZXMpOworICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmco
Im5vdGVzIl9zLCBub3Rlcyk7CisgICAganNvbk1lc3NhZ2UtPnNldERvdWJsZSgidGltZXN0YW1w
Il9zLCB0aW1lc3RhbXApOworICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoInZhbHVlcyJfcywg
dmFsdWVzKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0VmFsdWUoInBheWxvYWQiX3MsIHBheWxvYWQp
OworICAgIGpzb25NZXNzYWdlLT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCBkYXRhYmFzZUlk
KTsKKyAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgc3FsRXJyb3IpOwor
ICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCBJbnNwZWN0b3I6OlBy
b3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoc2NyZWVuQ29sb3IpKTsK
KyAgICBqc29uTWVzc2FnZS0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgYWx0ZXJuYXRl
Q29sb3JzKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUocHJpbnRD
b2xvcikpOworICAgIENhbGxiYWNrQmFzZTo6c2VuZFN1Y2Nlc3MoV1RGTW92ZShqc29uTWVzc2Fn
ZSkpOworfQorCit2b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxBc3lu
Yyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKQorewor
ICAgIGludCBpbl9kYXRhYmFzZUlkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0SW50ZWdlcihw
YXJhbWV0ZXJzLmdldCgpLCAiZGF0YWJhc2VJZCJfcywgbnVsbHB0cik7CisgICAgU3RyaW5nIGlu
X3F1ZXJ5ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCks
ICJxdWVyeSJfcywgbnVsbHB0cik7CisgICAgaWYgKG1fYmFja2VuZERpc3BhdGNoZXItPmhhc1By
b3RvY29sRXJyb3JzKCkpIHsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJv
dG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgIlNvbWUgYXJndW1l
bnRzIG9mIG1ldGhvZCAnRGF0YWJhc2UuZXhlY3V0ZVNRTEFzeW5jJyBjYW4ndCBiZSBwcm9jZXNz
ZWQiX3MpOworICAgICAgICByZXR1cm47CisgICAgfQorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCisgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewor
ICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVTUUxBc3luYyhyZXF1ZXN0SWQs
IGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRp
ZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworICAgIFJlZjxE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2s+
IGNhbGxiYWNrID0gYWRvcHRSZWYoKm5ldyBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxl
cjo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2sobV9iYWNrZW5kRGlzcGF0Y2hlci5jb3B5UmVmKCks
IHJlcXVlc3RJZCkpOworICAgIG1fYWdlbnQtPmV4ZWN1dGVTUUxBc3luYyhpbl9kYXRhYmFzZUlk
LCBpbl9xdWVyeSwgY2FsbGJhY2suY29weVJlZigpKTsKKworfQorCit9IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisj
IyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVj
dHMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgRnJvbnRlbmRSb3V0
ZXI7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVy
cy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFz
eW5jLWF0dHJpYnV0ZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRj
aGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0
ZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0
b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0RnJv
bnRlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVj
dHMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5
bmMtYXR0cmlidXRlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KKyNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK25hbWVzcGFj
ZSBQcm90b2NvbCB7CisKKworCisvLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KK25hbWVzcGFjZSBE
YXRhYmFzZSB7CitjbGFzcyBFcnJvcjsKK2VudW0gY2xhc3MgUHJpbWFyeUNvbG9yczsKK30gLy8g
RGF0YWJhc2UKKy8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KKworCisvLyBUeXBlZGVm
cy4KK25hbWVzcGFjZSBEYXRhYmFzZSB7CisvKiBVbmlxdWUgaWRlbnRpZmllciBvZiBEYXRhYmFz
ZSBvYmplY3QuICovCit0eXBlZGVmIGludCBEYXRhYmFzZUlkOwordHlwZWRlZiBKU09OOjpBcnJh
eU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiBDb2xvckxp
c3Q7Cit9IC8vIERhdGFiYXNlCisvLyBFbmQgb2YgdHlwZWRlZnMuCisKK25hbWVzcGFjZSBUZXN0
SGVscGVycyB7CisKK1N0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSk7CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShUIGVudW1WYWx1
ZSkKK3sKKyAgICByZXR1cm4gZ2V0RW51bUNvbnN0YW50VmFsdWUoc3RhdGljX2Nhc3Q8aW50Pihl
bnVtVmFsdWUpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKKworbmFtZXNwYWNl
IERhdGFiYXNlIHsKKworZW51bSBjbGFzcyBQcmltYXJ5Q29sb3JzIHsKKyAgICBSZWQgPSAwLAor
ICAgIEdyZWVuID0gMSwKKyAgICBCbHVlID0gMiwKK307IC8vIGVudW0gY2xhc3MgUHJpbWFyeUNv
bG9ycworCisvKiBEYXRhYmFzZSBlcnJvci4gKi8KK2NsYXNzIEVycm9yIDogcHVibGljIEpTT046
Ok9iamVjdEJhc2UgeworcHVibGljOgorICAgIGVudW0geworICAgICAgICBOb0ZpZWxkc1NldCA9
IDAsCisgICAgICAgIE1lc3NhZ2VTZXQgPSAxIDw8IDAsCisgICAgICAgIENvZGVTZXQgPSAxIDw8
IDEsCisgICAgICAgIEFsbEZpZWxkc1NldCA9IChNZXNzYWdlU2V0IHwgQ29kZVNldCkKKyAgICB9
OworCisgICAgdGVtcGxhdGU8aW50IFNUQVRFPgorICAgIGNsYXNzIEJ1aWxkZXIgeworICAgIHBy
aXZhdGU6CisgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVzdWx0OworCisgICAgICAg
IHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNU
QVRFIHwgU1RFUD4qPih0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXIoUmVmPC8q
RXJyb3IqL0pTT046Ok9iamVjdD4mJiBvYmplY3QpCisgICAgICAgICAgICA6IG1fcmVzdWx0KFdU
Rk1vdmUob2JqZWN0KSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RB
VEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7Cisg
ICAgICAgIH0KKyAgICAgICAgZnJpZW5kIGNsYXNzIEVycm9yOworICAgIHB1YmxpYzoKKworICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgTWVzc2FnZVNldD4mIHNldE1lc3NhZ2UoY29uc3QgU3RyaW5n
JiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IE1lc3NhZ2VTZXQpLCBwcm9wZXJ0eV9tZXNzYWdlX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1lc3NhZ2UiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIHJl
dHVybiBjYXN0U3RhdGU8TWVzc2FnZVNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBDb2RlU2V0PiYgc2V0Q29kZShpbnQgdmFsdWUpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2RlU2V0KSwgcHJvcGVydHlfY29kZV9h
bHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcigiY29kZSJfcywg
dmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb2RlU2V0PigpOworICAgICAg
ICB9CisKKyAgICAgICAgUmVmPEVycm9yPiByZWxlYXNlKCkKKyAgICAgICAgeworICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3Jl
YWR5KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihFcnJvcikgPT0gc2l6ZW9m
KEpTT046Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsKKworICAgICAgICAgICAgUmVmPEpTT046Ok9i
amVjdD4ganNvblJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgICAg
ICBhdXRvIHJlc3VsdCA9IFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPEVycm9yPio+KCZq
c29uUmVzdWx0KSk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAg
fTsKKworICAgIC8qCisgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgorICAgICAqIFJlZjxF
cnJvcj4gcmVzdWx0ID0gRXJyb3I6OmNyZWF0ZSgpCisgICAgICogICAgIC5zZXRNZXNzYWdlKC4u
LikKKyAgICAgKiAgICAgLnNldENvZGUoLi4uKQorICAgICAqICAgICAucmVsZWFzZSgpOworICAg
ICAqLworICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkp
OworICAgIH0KK307CisKK30gLy8gRGF0YWJhc2UKKworCisKK25hbWVzcGFjZSBUZXN0SGVscGVy
cyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFByb3RvY29sRW51bVR5cGU+CitPcHRpb25hbDxQcm90
b2NvbEVudW1UeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJik7CisK
Ky8vIEVudW1zIGluIHRoZSAnRGF0YWJhc2UnIERvbWFpbgordGVtcGxhdGU8PgorT3B0aW9uYWw8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IHBhcnNlRW51bVZh
bHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9y
cz4oY29uc3QgU3RyaW5nJik7CisKK30gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCisKK30gLy8g
bmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCituYW1lc3Bh
Y2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOworCisv
LyBIYXNoIGRlY2xhcmF0aW9ucyBpbiB0aGUgJ0RhdGFiYXNlJyBEb21haW4KK3RlbXBsYXRlPD4K
K3N0cnVjdCBEZWZhdWx0SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFy
eUNvbG9ycz4geworICAgIHR5cGVkZWYgSW50SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6UHJpbWFyeUNvbG9ycz4gSGFzaDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbE9iamVjdHMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29t
bWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdFBy
b3RvY29sT2JqZWN0cy5oIgorCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNl
IFByb3RvY29sIHsKKworbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKKworc3RhdGljIGNvbnN0IGNo
YXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFsdWVzW10gPSB7CisgICAgInJlZCIsCisgICAgImdy
ZWVuIiwKKyAgICAiYmx1ZSIsCisgICAgImN5YW4iLAorICAgICJtYWdlbnRhIiwKKyAgICAieWVs
bG93IiwKKyAgICAiYmxhY2siLAorfTsKKworU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGlu
dCBjb2RlKSB7CisgICAgcmV0dXJuIGVudW1fY29uc3RhbnRfdmFsdWVzW2NvZGVdOworfQorCisv
LyBFbnVtcyBpbiB0aGUgJ0RhdGFiYXNlJyBEb21haW4KKwordGVtcGxhdGU8PgorT3B0aW9uYWw8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IHBhcnNlRW51bVZh
bHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9y
cz4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKK3sKKyAgICBzdGF0aWMgY29uc3Qgc2l6
ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7CisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90
b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM6OlJlZCwKKyAgICAgICAgKHNpemVfdClJbnNw
ZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9yczo6R3JlZW4sCisgICAgICAg
IChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM6OkJs
dWUsCisgICAgfTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDM7ICsraSkKKyAgICAgICAg
aWYgKHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVz
W2ldXSkKKyAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6
OlByaW1hcnlDb2xvcnMpY29uc3RhbnRWYWx1ZXNbaV07CisKKyAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycworCisKKworfSAvLyBuYW1lc3Bh
Y2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJh
Y2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29t
bWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDx3dGYvUGxhdGZvcm0uaD4KKworI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgor
I2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworQHByb3RvY29sIFRlc3RQcm90b2NvbERhdGFi
YXNlRG9tYWluSGFuZGxlcjsKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworY2xhc3MgT2Jq
Q0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJu
YXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CitwdWJsaWM6CisgICAgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIo
aWQ8VGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdh
dGUgPSBoYW5kbGVyOyB9CisgICAgdm9pZCBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFs
dWVzKGxvbmcgcmVxdWVzdElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9x
dWVyeSkgZmluYWw7CisgICAgdm9pZCBleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVl
cyhsb25nIHJlcXVlc3RJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVl
cnkpIGZpbmFsOworICAgIHZvaWQgZXhlY3V0ZVNRTFN5bmMobG9uZyByZXF1ZXN0SWQsIGludCBp
bl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KSBmaW5hbDsKKyAgICB2b2lkIGV4
ZWN1dGVTUUxBc3luYyhsb25nIHJlcXVlc3RJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0
cmluZyYgaW5fcXVlcnkpIGZpbmFsOworcHJpdmF0ZToKKyAgICBSZXRhaW5QdHI8aWQ8VGVzdFBy
b3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNw
YXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hl
cnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFz
eW5jLWF0dHJpYnV0ZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERp
c3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2luY2x1
ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFs
dWVzLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit2b2lkIE9iakNJbnNwZWN0b3JEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVz
KGxvbmcgcmVxdWVzdElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVy
eSkKK3sKKyAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Io
ZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1dpdGhFcnJvckNhbGxiYWNrOnN1Y2Nl
c3NDYWxsYmFjazpkYXRhYmFzZUlkOnF1ZXJ5OildKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6
TWV0aG9kTm90Rm91bmQsICInRGF0YWJhc2UuZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZh
bHVlcycgd2FzIG5vdCBmb3VuZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNl
bmRQZW5kaW5nRXJyb3JzKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZCBlcnJv
ckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpT
ZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVu
ZGluZ0Vycm9ycygpOworICAgIH07CisKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKE5TQXJy
YXkvKjxOU1N0cmluZz4qLyAqKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqKm5vdGVzLCBkb3VibGUg
KnRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqdmFsdWVzLCBSV0lQcm90b2NvbEpT
T05PYmplY3QgKipwYXlsb2FkLCBpbnQgKmRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNl
RXJyb3IgKipzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzICpzY3Jl
ZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICoqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJv
dG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9y
ICpwcmludENvbG9yKSB7CisgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdE9iamVjdCA9
IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFE
X09QVElPTkFMX1BBUkFNRVRFUihjb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOworICAgICAg
ICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIobm90ZXMsIEAibm90
ZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVS
KHZhbHVlcywgQCJ2YWx1ZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BU
SU9OQUxfUEFSQU1FVEVSKHBheWxvYWQsIEAicGF5bG9hZCIpOworICAgICAgICBUSFJPV19FWENF
UFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoc3FsRXJyb3IsIEAic3FsRXJyb3IiKTsK
KyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKGFsdGVy
bmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsKKyAgICAgICAgaWYgKGNvbHVtbk5hbWVz
KQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIHRv
SlNPTlN0cmluZ0FycmF5KCpjb2x1bW5OYW1lcykpOworICAgICAgICBpZiAobm90ZXMpCisgICAg
ICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygibm90ZXMiX3MsICpub3Rlcyk7CisgICAg
ICAgIGlmICh0aW1lc3RhbXApCisgICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldERvdWJsZSgi
dGltZXN0YW1wIl9zLCAqdGltZXN0YW1wKTsKKyAgICAgICAgaWYgKHZhbHVlcykKKyAgICAgICAg
ICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFsqdmFsdWVzIHRvSlNPTk9i
amVjdF0pOworICAgICAgICBpZiAocGF5bG9hZCkKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+
c2V0VmFsdWUoInBheWxvYWQiX3MsIFsqcGF5bG9hZCB0b0pTT05PYmplY3RdKTsKKyAgICAgICAg
aWYgKGRhdGFiYXNlSWQpCisgICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldEludGVnZXIoImRh
dGFiYXNlSWQiX3MsICpkYXRhYmFzZUlkKTsKKyAgICAgICAgaWYgKHNxbEVycm9yKQorICAgICAg
ICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBbKnNxbEVycm9yIHRv
SlNPTk9iamVjdF0pOworICAgICAgICBpZiAoc2NyZWVuQ29sb3IpCisgICAgICAgICAgICByZXN1
bHRPYmplY3QtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcoKnNj
cmVlbkNvbG9yKSk7CisgICAgICAgIGlmIChhbHRlcm5hdGVDb2xvcnMpCisgICAgICAgICAgICBy
ZXN1bHRPYmplY3QtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIHRvSlNPTlN0cmluZ0Fy
cmF5KCphbHRlcm5hdGVDb2xvcnMpKTsKKyAgICAgICAgaWYgKHByaW50Q29sb3IpCisgICAgICAg
ICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgdG9Qcm90b2NvbFN0
cmluZygqcHJpbnRDb2xvcikpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVz
cG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdE9iamVjdCksIGZhbHNlKTsKKyAgICB9Owor
CisgICAgaW50IG9faW5fZGF0YWJhc2VJZCA9IGluX2RhdGFiYXNlSWQ7CisgICAgTlNTdHJpbmcg
Km9faW5fcXVlcnkgPSBpbl9xdWVyeTsKKworICAgIFttX2RlbGVnYXRlIGV4ZWN1dGVTUUxTeW5j
T3B0aW9uYWxSZXR1cm5WYWx1ZXNXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nl
c3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDpvX2luX2RhdGFiYXNlSWQgcXVl
cnk6b19pbl9xdWVyeV07Cit9CisKK3ZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXI6OmV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVz
dElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkKK3sKKyAgICBp
ZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoZXhlY3V0ZVNRTEFz
eW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6
ZGF0YWJhc2VJZDpxdWVyeTopXSkgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBv
cnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZv
dW5kLCAiJ0RhdGFiYXNlLmV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzJyB3YXMg
bm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdF
cnJvcnMoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlkIGVycm9yQ2FsbGJhY2sg
PSBeKE5TU3RyaW5nICplcnJvcikgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBv
cnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9y
LCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3Jz
KCk7CisgICAgfTsKKworICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oTlNBcnJheS8qPE5TU3Ry
aW5nPiovICoqY29sdW1uTmFtZXMsIE5TU3RyaW5nICoqbm90ZXMsIGRvdWJsZSAqdGltZXN0YW1w
LCBSV0lQcm90b2NvbEpTT05PYmplY3QgKip2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAq
KnBheWxvYWQsIGludCAqZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKnNx
bEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgKnNjcmVlbkNvbG9yLCBO
U0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFi
YXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yICpwcmludENv
bG9yKSB7CisgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdE9iamVjdCA9IEpTT046Ok9i
amVjdDo6Y3JlYXRlKCk7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFM
X1BBUkFNRVRFUihjb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOworICAgICAgICBUSFJPV19F
WENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIobm90ZXMsIEAibm90ZXMiKTsKKyAg
ICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHZhbHVlcywg
QCJ2YWx1ZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFS
QU1FVEVSKHBheWxvYWQsIEAicGF5bG9hZCIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9S
X0JBRF9PUFRJT05BTF9QQVJBTUVURVIoc3FsRXJyb3IsIEAic3FsRXJyb3IiKTsKKyAgICAgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKGFsdGVybmF0ZUNvbG9y
cywgQCJhbHRlcm5hdGVDb2xvcnMiKTsKKyAgICAgICAgaWYgKGNvbHVtbk5hbWVzKQorICAgICAg
ICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0cmlu
Z0FycmF5KCpjb2x1bW5OYW1lcykpOworICAgICAgICBpZiAobm90ZXMpCisgICAgICAgICAgICBy
ZXN1bHRPYmplY3QtPnNldFN0cmluZygibm90ZXMiX3MsICpub3Rlcyk7CisgICAgICAgIGlmICh0
aW1lc3RhbXApCisgICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldERvdWJsZSgidGltZXN0YW1w
Il9zLCAqdGltZXN0YW1wKTsKKyAgICAgICAgaWYgKHZhbHVlcykKKyAgICAgICAgICAgIHJlc3Vs
dE9iamVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFsqdmFsdWVzIHRvSlNPTk9iamVjdF0pOwor
ICAgICAgICBpZiAocGF5bG9hZCkKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0VmFsdWUo
InBheWxvYWQiX3MsIFsqcGF5bG9hZCB0b0pTT05PYmplY3RdKTsKKyAgICAgICAgaWYgKGRhdGFi
YXNlSWQpCisgICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldEludGVnZXIoImRhdGFiYXNlSWQi
X3MsICpkYXRhYmFzZUlkKTsKKyAgICAgICAgaWYgKHNxbEVycm9yKQorICAgICAgICAgICAgcmVz
dWx0T2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBbKnNxbEVycm9yIHRvSlNPTk9iamVj
dF0pOworICAgICAgICBpZiAoc2NyZWVuQ29sb3IpCisgICAgICAgICAgICByZXN1bHRPYmplY3Qt
PnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcoKnNjcmVlbkNvbG9y
KSk7CisgICAgICAgIGlmIChhbHRlcm5hdGVDb2xvcnMpCisgICAgICAgICAgICByZXN1bHRPYmpl
Y3QtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KCphbHRl
cm5hdGVDb2xvcnMpKTsKKyAgICAgICAgaWYgKHByaW50Q29sb3IpCisgICAgICAgICAgICByZXN1
bHRPYmplY3QtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgdG9Qcm90b2NvbFN0cmluZygqcHJp
bnRDb2xvcikpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVx
dWVzdElkLCBXVEZNb3ZlKHJlc3VsdE9iamVjdCksIGZhbHNlKTsKKyAgICB9OworCisgICAgaW50
IG9faW5fZGF0YWJhc2VJZCA9IGluX2RhdGFiYXNlSWQ7CisgICAgTlNTdHJpbmcgKm9faW5fcXVl
cnkgPSBpbl9xdWVyeTsKKworICAgIFttX2RlbGVnYXRlIGV4ZWN1dGVTUUxBc3luY09wdGlvbmFs
UmV0dXJuVmFsdWVzV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJh
Y2s6c3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNlSWQ6b19pbl9kYXRhYmFzZUlkIHF1ZXJ5Om9faW5f
cXVlcnldOworfQorCit2b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
OjpleGVjdXRlU1FMU3luYyhsb25nIHJlcXVlc3RJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0
IFN0cmluZyYgaW5fcXVlcnkpCit7CisgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2Vs
ZWN0b3I6QHNlbGVjdG9yKGV4ZWN1dGVTUUxTeW5jV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0Nh
bGxiYWNrOmRhdGFiYXNlSWQ6cXVlcnk6KV0pIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRo
b2ROb3RGb3VuZCwgIidEYXRhYmFzZS5leGVjdXRlU1FMU3luYycgd2FzIG5vdCBmb3VuZCJfcyk7
CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAq
ZXJyb3IpIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJv
cihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgIH07CisK
KyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqY29sdW1u
TmFtZXMsIE5TU3RyaW5nICpub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09O
T2JqZWN0ICp2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5bG9hZCwgaW50IGRhdGFi
YXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKnNxbEVycm9yLCBOU0FycmF5Lyo8TlNT
dHJpbmc+Ki8gKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29s
b3JzIHNjcmVlbkNvbG9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRD
b2xvciBwcmludENvbG9yKSB7CisgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdE9iamVj
dCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
UkVRVUlSRURfUEFSQU1FVEVSKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7CisgICAgICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG5vdGVzLCBAIm5vdGVzIik7
CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHZhbHVlcywg
QCJ2YWx1ZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVU
RVIocGF5bG9hZCwgQCJwYXlsb2FkIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVR
VUlSRURfUEFSQU1FVEVSKHNxbEVycm9yLCBAInNxbEVycm9yIik7CisgICAgICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKGFsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5h
dGVDb2xvcnMiKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMi
X3MsIHRvSlNPTlN0cmluZ0FycmF5KGNvbHVtbk5hbWVzKSk7CisgICAgICAgIHJlc3VsdE9iamVj
dC0+c2V0U3RyaW5nKCJub3RlcyJfcywgbm90ZXMpOworICAgICAgICByZXN1bHRPYmplY3QtPnNl
dERvdWJsZSgidGltZXN0YW1wIl9zLCB0aW1lc3RhbXApOworICAgICAgICByZXN1bHRPYmplY3Qt
PnNldE9iamVjdCgidmFsdWVzIl9zLCBbdmFsdWVzIHRvSlNPTk9iamVjdF0pOworICAgICAgICBy
ZXN1bHRPYmplY3QtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBbcGF5bG9hZCB0b0pTT05PYmplY3Rd
KTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCBkYXRh
YmFzZUlkKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBb
c3FsRXJyb3IgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXko
ImFsdGVybmF0ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5nQXJyYXkoYWx0ZXJuYXRlQ29sb3JzKSk7
CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgdG9Qcm90
b2NvbFN0cmluZyhzY3JlZW5Db2xvcikpOworICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmlu
ZygicHJpbnRDb2xvciJfcywgdG9Qcm90b2NvbFN0cmluZyhwcmludENvbG9yKSk7CisgICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVz
dWx0T2JqZWN0KSwgZmFsc2UpOworICAgIH07CisKKyAgICBpbnQgb19pbl9kYXRhYmFzZUlkID0g
aW5fZGF0YWJhc2VJZDsKKyAgICBOU1N0cmluZyAqb19pbl9xdWVyeSA9IGluX3F1ZXJ5OworCisg
ICAgW21fZGVsZWdhdGUgZXhlY3V0ZVNRTFN5bmNXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxi
YWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDpvX2luX2RhdGFi
YXNlSWQgcXVlcnk6b19pbl9xdWVyeV07Cit9CisKK3ZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxBc3luYyhsb25nIHJlcXVlc3RJZCwgaW50IGlu
X2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpCit7CisgICAgaWYgKCFbbV9kZWxl
Z2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGV4ZWN1dGVTUUxBc3luY1dpdGhFcnJv
ckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazpkYXRhYmFzZUlkOnF1ZXJ5OildKSB7CisgICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNr
ZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRGF0YWJhc2UuZXhlY3V0ZVNRTEFzeW5j
JyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBl
bmRpbmdFcnJvcnMoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlkIGVycm9yQ2Fs
bGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigp
LT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZl
ckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5n
RXJyb3JzKCk7CisgICAgfTsKKworICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oTlNBcnJheS8q
PE5TU3RyaW5nPiovICpjb2x1bW5OYW1lcywgTlNTdHJpbmcgKm5vdGVzLCBkb3VibGUgdGltZXN0
YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0
ICpwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqc3Fs
RXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyBzY3JlZW5Db2xvciwgTlNB
cnJheS8qPE5TU3RyaW5nPiovICphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNl
RXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvciBwcmludENvbG9yKSB7CisgICAgICAgIFJlZjxKU09O
OjpPYmplY3Q+IHJlc3VsdE9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKGNvbHVtbk5hbWVzLCBAImNv
bHVtbk5hbWVzIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1F
VEVSKG5vdGVzLCBAIm5vdGVzIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlS
RURfUEFSQU1FVEVSKHZhbHVlcywgQCJ2YWx1ZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIocGF5bG9hZCwgQCJwYXlsb2FkIik7CisgICAgICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHNxbEVycm9yLCBAInNxbEVycm9y
Iik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKGFsdGVy
bmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5z
ZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KGNvbHVtbk5hbWVzKSk7
CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJub3RlcyJfcywgbm90ZXMpOworICAg
ICAgICByZXN1bHRPYmplY3QtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCB0aW1lc3RhbXApOwor
ICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdCgidmFsdWVzIl9zLCBbdmFsdWVzIHRvSlNP
Tk9iamVjdF0pOworICAgICAgICByZXN1bHRPYmplY3QtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBb
cGF5bG9hZCB0b0pTT05PYmplY3RdKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRJbnRlZ2Vy
KCJkYXRhYmFzZUlkIl9zLCBkYXRhYmFzZUlkKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRP
YmplY3QoInNxbEVycm9yIl9zLCBbc3FsRXJyb3IgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIHJl
c3VsdE9iamVjdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgdG9Qcm90b2NvbFN0cmluZyhz
Y3JlZW5Db2xvcikpOworICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJhbHRlcm5hdGVD
b2xvcnMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KGFsdGVybmF0ZUNvbG9ycykpOworICAgICAgICBy
ZXN1bHRPYmplY3QtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgdG9Qcm90b2NvbFN0cmluZyhw
cmludENvbG9yKSk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShy
ZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0T2JqZWN0KSwgZmFsc2UpOworICAgIH07CisKKyAgICBp
bnQgb19pbl9kYXRhYmFzZUlkID0gaW5fZGF0YWJhc2VJZDsKKyAgICBOU1N0cmluZyAqb19pbl9x
dWVyeSA9IGluX3F1ZXJ5OworCisgICAgW21fZGVsZWdhdGUgZXhlY3V0ZVNRTEFzeW5jV2l0aEVy
cm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNr
IGRhdGFiYXNlSWQ6b19pbl9kYXRhYmFzZUlkIHF1ZXJ5Om9faW5fcXVlcnldOworfQorCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5k
RGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRp
b24uaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5
bmMtYXR0cmlidXRlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI2ltcG9ydCA8d3RmL1BsYXRmb3JtLmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9U
ZXN0UHJvdG9jb2wuaD4KKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkp
CitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAorQHByb3Bl
cnR5IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNldERhdGFiYXNlSGFuZGxlcjopIGlkPFRl
c3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4gZGF0YWJhc2VIYW5kbGVyOworQGVuZAor
CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9j
b2xDb25maWd1cmF0aW9uLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisj
aW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+CisjaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2ltcG9y
dCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+CisKK3VzaW5n
IG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25m
aWd1cmF0aW9uCit7CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJv
bGxlcjsKKyAgICBpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+IF9kYXRhYmFz
ZUhhbmRsZXI7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21l
bnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgoreworICAgIHNlbGYgPSBbc3Vw
ZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIEFTU0VS
VChjb250cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAgcmV0dXJu
IHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIFtfZGF0YWJhc2VIYW5kbGVyIHJl
bGVhc2VdOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAodm9pZClzZXREYXRhYmFzZUhh
bmRsZXI6KGlkPFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4paGFuZGxlcgorewor
ICAgIGlmIChoYW5kbGVyID09IF9kYXRhYmFzZUhhbmRsZXIpCisgICAgICAgIHJldHVybjsKKwor
ICAgIFtfZGF0YWJhc2VIYW5kbGVyIHJlbGVhc2VdOworICAgIF9kYXRhYmFzZUhhbmRsZXIgPSBb
aGFuZGxlciByZXRhaW5dOworCisgICAgYXV0byBhbHRlcm5hdGVEaXNwYXRjaGVyID0gbWFrZVVu
aXF1ZTxPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7Cisg
ICAgYXV0byBhbHRlcm5hdGVBZ2VudCA9IG1ha2VVbmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxl
QWdlbnQ8RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciwgQWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlcj4+KCJEYXRhYmFzZSJfcywgKl9jb250cm9sbGVyLCBXVEZNb3ZlKGFsdGVybmF0
ZURpc3BhdGNoZXIpKTsKKyAgICBfY29udHJvbGxlci0+YXBwZW5kRXh0cmFBZ2VudChXVEZNb3Zl
KGFsdGVybmF0ZUFnZW50KSk7Cit9CisKKy0gKGlkPFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWlu
SGFuZGxlcj4pZGF0YWJhc2VIYW5kbGVyCit7CisgICAgcmV0dXJuIF9kYXRhYmFzZUhhbmRsZXI7
Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24u
bW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJp
YnV0ZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNp
bXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFt
ZXNwYWNlIEluc3BlY3RvcjsKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlz
cGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxG
b3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKyNpbXBvcnQgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaW1w
b3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+CisKKworQGNsYXNzIFRl
c3RQcm90b2NvbERhdGFiYXNlRXJyb3I7CisKK3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRl
c3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycykgeworICAgIFRlc3RQcm90b2NvbERhdGFi
YXNlUHJpbWFyeUNvbG9yc1JlZCwKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xv
cnNHcmVlbiwKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNCbHVlLAorfTsK
KwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRl
U1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvcikgeworICAgIFRlc3RQcm90b2Nv
bERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JDeWFu
LAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZh
bHVlc1ByaW50Q29sb3JNYWdlbnRhLAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNR
TFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JZZWxsb3csCisgICAgVGVzdFByb3Rv
Y29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvckJs
YWNrLAorfTsKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGF0YWJh
c2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3IpIHsKKyAgICBU
ZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJp
bnRDb2xvckN5YW4sCisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRp
b25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JNYWdlbnRhLAorICAgIFRlc3RQcm90b2NvbERhdGFi
YXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yWWVsbG93LAor
ICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1
ZXNQcmludENvbG9yQmxhY2ssCit9OworCit0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0
UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvcikgeworICAgIFRlc3RQcm90
b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yQ3lhbiwKKyAgICBUZXN0UHJvdG9j
b2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvck1hZ2VudGEsCisgICAgVGVzdFByb3Rv
Y29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3JZZWxsb3csCisgICAgVGVzdFByb3Rv
Y29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3JCbGFjaywKK307CisKK3R5cGVkZWYg
TlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJp
bnRDb2xvcikgeworICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRD
b2xvckN5YW4sCisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENv
bG9yTWFnZW50YSwKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50
Q29sb3JZZWxsb3csCisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmlu
dENvbG9yQmxhY2ssCit9OworCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIp
KSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciA6IFJXSVByb3RvY29sSlNP
Tk9iamVjdAorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5T
U3RyaW5nICosIGlkPiAqKXBheWxvYWQ7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2Nv
bE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKKy0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBjb2RlOihpbnQpY29kZTsK
Ky8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqbWVz
c2FnZTsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCBj
b2RlOworQGVuZAorCitAcHJvdG9jb2wgVGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVy
IDxOU09iamVjdD4KK0BvcHRpb25hbAorLSAodm9pZClleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0
dXJuVmFsdWVzV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJv
ckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKShOU0FycmF5Lyo8TlNTdHJpbmc+Ki8g
Kipjb2x1bW5OYW1lcywgTlNTdHJpbmcgKipub3RlcywgZG91YmxlICp0aW1lc3RhbXAsIFJXSVBy
b3RvY29sSlNPTk9iamVjdCAqKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqcGF5bG9h
ZCwgaW50ICpkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqc3FsRXJyb3Is
IFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqc2NyZWVuQ29sb3IsIE5TQXJyYXkv
KjxOU1N0cmluZz4qLyAqKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVj
dXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvciAqcHJpbnRDb2xvcikpc3Vj
Y2Vzc0NhbGxiYWNrIGRhdGFiYXNlSWQ6KGludClkYXRhYmFzZUlkIHF1ZXJ5OihOU1N0cmluZyAq
KXF1ZXJ5OworLSAodm9pZClleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1dpdGhF
cnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNj
ZXNzQ2FsbGJhY2s6KHZvaWQoXikoTlNBcnJheS8qPE5TU3RyaW5nPiovICoqY29sdW1uTmFtZXMs
IE5TU3RyaW5nICoqbm90ZXMsIGRvdWJsZSAqdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmpl
Y3QgKip2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnBheWxvYWQsIGludCAqZGF0YWJh
c2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xE
YXRhYmFzZVByaW1hcnlDb2xvcnMgKnNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8g
KiphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0
aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yICpwcmludENvbG9yKSlzdWNjZXNzQ2FsbGJhY2sg
ZGF0YWJhc2VJZDooaW50KWRhdGFiYXNlSWQgcXVlcnk6KE5TU3RyaW5nICopcXVlcnk7CistICh2
b2lkKWV4ZWN1dGVTUUxTeW5jV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVy
cm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKShOU0FycmF5Lyo8TlNT
dHJpbmc+Ki8gKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAs
IFJXSVByb3RvY29sSlNPTk9iamVjdCAqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnBh
eWxvYWQsIGludCBkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpzcWxFcnJv
ciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERh
dGFiYXNlUHJpbWFyeUNvbG9ycyBzY3JlZW5Db2xvciwgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVj
dXRlU1FMU3luY1ByaW50Q29sb3IgcHJpbnRDb2xvcikpc3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNl
SWQ6KGludClkYXRhYmFzZUlkIHF1ZXJ5OihOU1N0cmluZyAqKXF1ZXJ5OworLSAodm9pZClleGVj
dXRlU1FMQXN5bmNXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVy
cm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0cmluZz4q
LyAqY29sdW1uTmFtZXMsIE5TU3RyaW5nICpub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUldJUHJv
dG9jb2xKU09OT2JqZWN0ICp2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5bG9hZCwg
aW50IGRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKnNxbEVycm9yLCBUZXN0
UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0
cmluZz4qLyAqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxB
c3luY1ByaW50Q29sb3IgcHJpbnRDb2xvcikpc3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNlSWQ6KGlu
dClkYXRhYmFzZUlkIHF1ZXJ5OihOU1N0cmluZyAqKXF1ZXJ5OworQGVuZAorCisKKworCisjaW1w
b3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+
CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbEludGVybmFsLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21t
YW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaW1wb3J0ICJU
ZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgi
CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIu
aD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKKworCisKKyMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sSW50ZXJuYWwuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13
aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNpbXBvcnQgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaW1wb3J0ICJUZXN0UHJv
dG9jb2wuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lv
bnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIE9iakNF
bnVtVHlwZT4KK09wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0
IFN0cmluZyYgdmFsdWUpOworCitpbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFBy
b3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzIHZhbHVlKQoreworICAgIHN3aXRjaCh2YWx1ZSkg
eworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzUmVkOgorICAgICAg
ICByZXR1cm4gInJlZCJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNv
bG9yc0dyZWVuOgorICAgICAgICByZXR1cm4gImdyZWVuIl9zOworICAgIGNhc2UgVGVzdFByb3Rv
Y29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzQmx1ZToKKyAgICAgICAgcmV0dXJuICJibHVlIl9zOwor
ICAgIH0KK30KKwordGVtcGxhdGU8PgoraW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFi
YXNlUHJpbWFyeUNvbG9ycz4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUp
Cit7CisgICAgaWYgKHZhbHVlID09ICJyZWQiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29s
RGF0YWJhc2VQcmltYXJ5Q29sb3JzUmVkOworICAgIGlmICh2YWx1ZSA9PSAiZ3JlZW4iKQorICAg
ICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzR3JlZW47CisgICAg
aWYgKHZhbHVlID09ICJibHVlIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNl
UHJpbWFyeUNvbG9yc0JsdWU7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKworaW5saW5l
IFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5
bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3IgdmFsdWUpCit7CisgICAgc3dpdGNoKHZh
bHVlKSB7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXNQcmludENvbG9yQ3lhbjoKKyAgICAgICAgcmV0dXJuICJjeWFuIl9zOwor
ICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJu
VmFsdWVzUHJpbnRDb2xvck1hZ2VudGE6CisgICAgICAgIHJldHVybiAibWFnZW50YSJfczsKKyAg
ICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZh
bHVlc1ByaW50Q29sb3JZZWxsb3c6CisgICAgICAgIHJldHVybiAieWVsbG93Il9zOworICAgIGNh
c2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVz
UHJpbnRDb2xvckJsYWNrOgorICAgICAgICByZXR1cm4gImJsYWNrIl9zOworICAgIH0KK30KKwor
dGVtcGxhdGU8PgoraW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNR
TFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3I+IGZyb21Qcm90b2NvbFN0cmluZyhj
b25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSAiY3lhbiIpCisgICAgICAg
IHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXNQcmludENvbG9yQ3lhbjsKKyAgICBpZiAodmFsdWUgPT0gIm1hZ2VudGEiKQorICAgICAg
ICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJu
VmFsdWVzUHJpbnRDb2xvck1hZ2VudGE7CisgICAgaWYgKHZhbHVlID09ICJ5ZWxsb3ciKQorICAg
ICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0
dXJuVmFsdWVzUHJpbnRDb2xvclllbGxvdzsKKyAgICBpZiAodmFsdWUgPT0gImJsYWNrIikKKyAg
ICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJl
dHVyblZhbHVlc1ByaW50Q29sb3JCbGFjazsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQor
CitpbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sRGF0YWJhc2VFeGVj
dXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3IgdmFsdWUpCit7CisgICAg
c3dpdGNoKHZhbHVlKSB7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxB
c3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvckN5YW46CisgICAgICAgIHJldHVybiAi
Y3lhbiJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0
aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yTWFnZW50YToKKyAgICAgICAgcmV0dXJuICJtYWdl
bnRhIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRp
b25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JZZWxsb3c6CisgICAgICAgIHJldHVybiAieWVsbG93
Il9zOworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25h
bFJldHVyblZhbHVlc1ByaW50Q29sb3JCbGFjazoKKyAgICAgICAgcmV0dXJuICJibGFjayJfczsK
KyAgICB9Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xEYXRh
YmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvcj4gZnJvbVBy
b3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09ICJj
eWFuIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5j
T3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yQ3lhbjsKKyAgICBpZiAodmFsdWUgPT0gIm1h
Z2VudGEiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5
bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JNYWdlbnRhOworICAgIGlmICh2YWx1ZSA9
PSAieWVsbG93IikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNR
TEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yWWVsbG93OworICAgIGlmICh2YWx1
ZSA9PSAiYmxhY2siKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRl
U1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JCbGFjazsKKyAgICByZXR1cm4g
V1RGOjpudWxsb3B0OworfQorCitpbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFBy
b3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3IgdmFsdWUpCit7CisgICAgc3dp
dGNoKHZhbHVlKSB7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5j
UHJpbnRDb2xvckN5YW46CisgICAgICAgIHJldHVybiAiY3lhbiJfczsKKyAgICBjYXNlIFRlc3RQ
cm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yTWFnZW50YToKKyAgICAgICAg
cmV0dXJuICJtYWdlbnRhIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRl
U1FMU3luY1ByaW50Q29sb3JZZWxsb3c6CisgICAgICAgIHJldHVybiAieWVsbG93Il9zOworICAg
IGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3JCbGFjazoK
KyAgICAgICAgcmV0dXJuICJibGFjayJfczsKKyAgICB9Cit9CisKK3RlbXBsYXRlPD4KK2lubGlu
ZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvcj4g
ZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVl
ID09ICJjeWFuIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNR
TFN5bmNQcmludENvbG9yQ3lhbjsKKyAgICBpZiAodmFsdWUgPT0gIm1hZ2VudGEiKQorICAgICAg
ICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3JNYWdl
bnRhOworICAgIGlmICh2YWx1ZSA9PSAieWVsbG93IikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90
b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yWWVsbG93OworICAgIGlmICh2YWx1
ZSA9PSAiYmxhY2siKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRl
U1FMU3luY1ByaW50Q29sb3JCbGFjazsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCitp
bmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRl
U1FMQXN5bmNQcmludENvbG9yIHZhbHVlKQoreworICAgIHN3aXRjaCh2YWx1ZSkgeworICAgIGNh
c2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yQ3lhbjoKKyAg
ICAgICAgcmV0dXJuICJjeWFuIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVj
dXRlU1FMQXN5bmNQcmludENvbG9yTWFnZW50YToKKyAgICAgICAgcmV0dXJuICJtYWdlbnRhIl9z
OworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9y
WWVsbG93OgorICAgICAgICByZXR1cm4gInllbGxvdyJfczsKKyAgICBjYXNlIFRlc3RQcm90b2Nv
bERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvckJsYWNrOgorICAgICAgICByZXR1cm4g
ImJsYWNrIl9zOworICAgIH0KK30KKwordGVtcGxhdGU8PgoraW5saW5lIE9wdGlvbmFsPFRlc3RQ
cm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvcj4gZnJvbVByb3RvY29sU3Ry
aW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09ICJjeWFuIikKKyAg
ICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xv
ckN5YW47CisgICAgaWYgKHZhbHVlID09ICJtYWdlbnRhIikKKyAgICAgICAgcmV0dXJuIFRlc3RQ
cm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvck1hZ2VudGE7CisgICAgaWYg
KHZhbHVlID09ICJ5ZWxsb3ciKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VF
eGVjdXRlU1FMQXN5bmNQcmludENvbG9yWWVsbG93OworICAgIGlmICh2YWx1ZSA9PSAiYmxhY2si
KQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmlu
dENvbG9yQmxhY2s7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
LmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmli
dXRlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lt
cG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90
b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgorI2ltcG9ydCA8V2Vi
SW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKwordXNpbmcgbmFtZXNw
YWNlIEluc3BlY3RvcjsKKworQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMg
KERhdGFiYXNlRG9tYWluKQorCisrICh2b2lkKV9wYXJzZURhdGFiYXNlSWQ6KE5TTnVtYmVyICoq
KW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworKyAodm9pZClfcGFyc2VQcmltYXJ5
Q29sb3JzOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysg
KHZvaWQpX3BhcnNlQ29sb3JMaXN0OihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopb3V0VmFsdWUg
ZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisrICh2b2lkKV9wYXJzZUVycm9yOihUZXN0UHJvdG9j
b2xEYXRhYmFzZUVycm9yICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworCitA
ZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKERhdGFi
YXNlRG9tYWluKQorCisrICh2b2lkKV9wYXJzZURhdGFiYXNlSWQ6KE5TTnVtYmVyICoqKW91dFZh
bHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9C
QURfVFlQRShwYXlsb2FkLCBbTlNOdW1iZXIgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSAoTlNO
dW1iZXIgKilwYXlsb2FkOworfQorCisrICh2b2lkKV9wYXJzZVByaW1hcnlDb2xvcnM6KE5TTnVt
YmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKKyAgICBPcHRp
b25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnM+IHJlc3VsdCA9IEluc3BlY3Rv
cjo6ZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycz4o
cGF5bG9hZCk7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfRU5VTV9WQUxVRShyZXN1bHQs
IEAiUHJpbWFyeUNvbG9ycyIpOworICAgICpvdXRWYWx1ZSA9IEAocmVzdWx0LnZhbHVlKCkpOwor
fQorCisrICh2b2lkKV9wYXJzZUNvbG9yTGlzdDooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKW91
dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9CQURfVFlQRShwYXlsb2FkLCBbTlNBcnJheS8qPE5TU3RyaW5nPiovIGNsYXNzXSk7CisgICAg
Km91dFZhbHVlID0gKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKXBheWxvYWQ7Cit9CisKKysgKHZv
aWQpX3BhcnNlRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKiopb3V0VmFsdWUgZnJv
bVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBF
KHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQ
cm90b2NvbERhdGFiYXNlRXJyb3IgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKK30K
KworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1t
CisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFBy
b3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
LmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5o
PgorI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+
CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJv
dG9jb2xEYXRhYmFzZUVycm9yCisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5v
bm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQKK3sKKyAgICBpZiAo
IShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAIm1lc3NhZ2UiXSwgQCJt
ZXNzYWdlIik7CisgICAgc2VsZi5tZXNzYWdlID0gcGF5bG9hZFtAIm1lc3NhZ2UiXTsKKworICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImNvZGUiXSwg
QCJjb2RlIik7CisgICAgc2VsZi5jb2RlID0gW3BheWxvYWRbQCJjb2RlIl0gaW50ZWdlclZhbHVl
XTsKKworICAgIHJldHVybiBzZWxmOworfQorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9j
b2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9iamVjdAoreworICAgIGlmICghKHNl
bGYgPSBbc3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmplY3QgdG9KU09OT2JqZWN0XS5nZXQo
KV0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBjb2RlOihpbnQp
Y29kZQoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4g
bmlsOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShtZXNzYWdl
LCBAIm1lc3NhZ2UiKTsKKworICAgIHNlbGYubWVzc2FnZSA9IG1lc3NhZ2U7CisgICAgc2VsZi5j
b2RlID0gY29kZTsKKworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXNldE1lc3NhZ2U6
KE5TU3RyaW5nICopbWVzc2FnZQoreworICAgIFtzdXBlciBzZXRTdHJpbmc6bWVzc2FnZSBmb3JL
ZXk6QCJtZXNzYWdlIl07Cit9CisKKy0gKE5TU3RyaW5nICopbWVzc2FnZQoreworICAgIHJldHVy
biBbc3VwZXIgc3RyaW5nRm9yS2V5OkAibWVzc2FnZSJdOworfQorCistICh2b2lkKXNldENvZGU6
KGludCljb2RlCit7CisgICAgW3N1cGVyIHNldEludGVnZXI6Y29kZSBmb3JLZXk6QCJjb2RlIl07
Cit9CisKKy0gKGludCljb2RlCit7CisgICAgcmV0dXJuIFtzdXBlciBpbnRlZ2VyRm9yS2V5OkAi
Y29kZSJdOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5t
bQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVy
cy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRl
cnMuanNvbi1yZXN1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjI5
MWRiZTA4YzJjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1y
ZXR1cm4tcGFyYW1ldGVycy5qc29uLXJlc3VsdApAQCAtMCwwICsxLDE2NjQgQEAKKyMjIyBCZWdp
biBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMuaW4KKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFt
ZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisv
LyBEYXRhYmFzZQorSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiRGF0YWJhc2UiLCBu
dWxsKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJEYXRhYmFzZS5QcmltYXJ5Q29s
b3JzIiwge1JlZDogInJlZCIsIEdyZWVuOiAiZ3JlZW4iLCBCbHVlOiAiYmx1ZSJ9KTsKK0luc3Bl
Y3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJEYXRhYmFzZS5leGVjdXRlQWxsT3B0aW9uYWxQ
YXJhbWV0ZXJzIiwgbnVsbCwgW3sibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogIm9iamVj
dCIsICJvcHRpb25hbCI6IHRydWV9LCB7Im5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmci
LCAib3B0aW9uYWwiOiB0cnVlfSwgeyJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJl
ciIsICJvcHRpb25hbCI6IHRydWV9LCB7Im5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0
IiwgIm9wdGlvbmFsIjogdHJ1ZX0sIHsibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAib2JqZWN0
IiwgIm9wdGlvbmFsIjogdHJ1ZX0sIHsibmFtZSI6ICJkYXRhYmFzZUlkIiwgInR5cGUiOiAibnVt
YmVyIiwgIm9wdGlvbmFsIjogdHJ1ZX0sIHsibmFtZSI6ICJzcWxFcnJvciIsICJ0eXBlIjogIm9i
amVjdCIsICJvcHRpb25hbCI6IHRydWV9LCB7Im5hbWUiOiAic2NyZWVuQ29sb3IiLCAidHlwZSI6
ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVlfSwgeyJuYW1lIjogImFsdGVybmF0ZUNvbG9ycyIs
ICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRydWV9LCB7Im5hbWUiOiAicHJpbnRDb2xv
ciIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWV9XSwgWyJjb2x1bW5OYW1lcyIs
ICJub3RlcyIsICJ0aW1lc3RhbXAiLCAidmFsdWVzIiwgInBheWxvYWQiLCAiZGF0YWJhc2VJZCIs
ICJzcWxFcnJvciIsICJzY3JlZW5Db2xvciIsICJhbHRlcm5hdGVDb2xvcnMiLCAicHJpbnRDb2xv
ciJdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJEYXRhYmFzZS5leGVjdXRl
Tm9PcHRpb25hbFBhcmFtZXRlcnMiLCBudWxsLCBbeyJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5
cGUiOiAib2JqZWN0In0sIHsibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyJ9LCB7Im5h
bWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIn0sIHsibmFtZSI6ICJ2YWx1ZXMiLCAi
dHlwZSI6ICJvYmplY3QifSwgeyJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJvYmplY3QifSwg
eyJuYW1lIjogImRhdGFiYXNlSWQiLCAidHlwZSI6ICJudW1iZXIifSwgeyJuYW1lIjogInNxbEVy
cm9yIiwgInR5cGUiOiAib2JqZWN0In0sIHsibmFtZSI6ICJzY3JlZW5Db2xvciIsICJ0eXBlIjog
InN0cmluZyJ9LCB7Im5hbWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwgInR5cGUiOiAib2JqZWN0In0s
IHsibmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIn1dLCBbImNvbHVtbk5hbWVz
IiwgIm5vdGVzIiwgInRpbWVzdGFtcCIsICJ2YWx1ZXMiLCAicGF5bG9hZCIsICJkYXRhYmFzZUlk
IiwgInNxbEVycm9yIiwgInNjcmVlbkNvbG9yIiwgImFsdGVybmF0ZUNvbG9ycyIsICJwcmludENv
bG9yIl0pOworSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiRGF0YWJhc2UiLCBudWxs
KTsKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzLmluCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJu
LXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyNpbmNsdWRlICJUZXN0UHJv
dG9jb2xUeXBlcy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRS
b3V0ZXIuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEFsdGVybmF0ZUJhY2tl
bmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJl
ZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNo
ZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9CisgICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tl
bmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsg
fQorcHJpdmF0ZToKKyAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3Bh
dGNoZXI7Cit9OworCisKK2NsYXNzIEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIg
OiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHZpcnR1
YWwgfkFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoKSB7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhsb25nIGNhbGxJZCwgY29uc3QgSlNP
Tjo6QXJyYXkqIGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIGluX25vdGVzLCBjb25zdCBk
b3VibGUqIGluX3RpbWVzdGFtcCwgY29uc3QgSlNPTjo6T2JqZWN0KiBpbl92YWx1ZXMsIGNvbnN0
IEpTT046OlZhbHVlKiBpbl9wYXlsb2FkLCBjb25zdCBpbnQqIGluX2RhdGFiYXNlSWQsIGNvbnN0
IEpTT046Ok9iamVjdCogaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyogaW5fc2NyZWVuQ29sb3Is
IGNvbnN0IEpTT046OkFycmF5KiBpbl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyogaW5f
cHJpbnRDb2xvcikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlTm9PcHRpb25hbFBhcmFt
ZXRlcnMobG9uZyBjYWxsSWQsIGNvbnN0IEpTT046OkFycmF5JiBpbl9jb2x1bW5OYW1lcywgY29u
c3QgU3RyaW5nJiBpbl9ub3RlcywgZG91YmxlIGluX3RpbWVzdGFtcCwgY29uc3QgSlNPTjo6T2Jq
ZWN0JiBpbl92YWx1ZXMsIEpTT046OlZhbHVlIGluX3BheWxvYWQsIGludCBpbl9kYXRhYmFzZUlk
LCBjb25zdCBKU09OOjpPYmplY3QmIGluX3NxbEVycm9yLCBjb25zdCBTdHJpbmcmIGluX3NjcmVl
bkNvbG9yLCBjb25zdCBKU09OOjpBcnJheSYgaW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJp
bmcmIGluX3ByaW50Q29sb3IpID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgor
CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjIyMg
RW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4g
RmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bE9iamVjdHMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKKyNpZiBFTkFCTEUo
SU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK2NsYXNzIEFsdGVybmF0ZURhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXI7CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCisKK2NsYXNzIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsK
K3B1YmxpYzoKKyAgICAvLyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIgJ3ByaW50Q29sb3InIHdoaWxl
IGdlbmVyYXRpbmcgY29tbWFuZC9ldmVudCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzLgor
ICAgIGVudW0gY2xhc3MgUHJpbnRDb2xvciB7CisgICAgICAgIEN5YW4gPSAzLAorICAgICAgICBN
YWdlbnRhID0gNCwKKyAgICAgICAgWWVsbG93ID0gNSwKKyAgICAgICAgQmxhY2sgPSA2LAorICAg
IH07IC8vIGVudW0gY2xhc3MgUHJpbnRDb2xvcgorICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlQWxs
T3B0aW9uYWxQYXJhbWV0ZXJzKEVycm9yU3RyaW5nJiwgY29uc3QgSlNPTjo6QXJyYXkqIG9wdF9p
bl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nKiBvcHRfaW5fbm90ZXMsIGNvbnN0IGRvdWJsZSog
b3B0X2luX3RpbWVzdGFtcCwgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRfaW5fdmFsdWVzLCBjb25z
dCBKU09OOjpWYWx1ZSogb3B0X2luX3BheWxvYWQsIGNvbnN0IGludCogb3B0X2luX2RhdGFiYXNl
SWQsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0X2luX3NxbEVycm9yLCBjb25zdCBTdHJpbmcqIG9w
dF9pbl9zY3JlZW5Db2xvciwgY29uc3QgSlNPTjo6QXJyYXkqIG9wdF9pbl9hbHRlcm5hdGVDb2xv
cnMsIGNvbnN0IFN0cmluZyogb3B0X2luX3ByaW50Q29sb3IsIFJlZlB0cjxKU09OOjpBcnJheU9m
PFN0cmluZz4+JiBvcHRfb3V0X2NvbHVtbk5hbWVzLCBPcHRpb25hbDxTdHJpbmc+JiBvcHRfb3V0
X25vdGVzLCBPcHRpb25hbDxkb3VibGU+JiBvcHRfb3V0X3RpbWVzdGFtcCwgT3B0aW9uYWw8SlNP
Tjo6T2JqZWN0PiYgb3B0X291dF92YWx1ZXMsIE9wdGlvbmFsPEpTT046OlZhbHVlPiYgb3B0X291
dF9wYXlsb2FkLCBPcHRpb25hbDxpbnQ+JiBvcHRfb3V0X2RhdGFiYXNlSWQsIFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiBvcHRfb3V0X3NxbEVycm9yLCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyogb3B0X291dF9zY3JlZW5D
b2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiBv
cHRfb3V0X2FsdGVybmF0ZUNvbG9ycywgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6
OlByaW50Q29sb3IqIG9wdF9vdXRfcHJpbnRDb2xvcikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBl
eGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMoRXJyb3JTdHJpbmcmLCBjb25zdCBKU09OOjpBcnJh
eSYgaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgaW5fbm90ZXMsIGRvdWJsZSBpbl90aW1l
c3RhbXAsIGNvbnN0IEpTT046Ok9iamVjdCYgaW5fdmFsdWVzLCBKU09OOjpWYWx1ZSBpbl9wYXls
b2FkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgSlNPTjo6T2JqZWN0JiBpbl9zcWxFcnJvciwg
Y29uc3QgU3RyaW5nJiBpbl9zY3JlZW5Db2xvciwgY29uc3QgSlNPTjo6QXJyYXkmIGluX2FsdGVy
bmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBpbl9wcmludENvbG9yLCBSZWZQdHI8SlNPTjo6QXJy
YXlPZjxTdHJpbmc+PiYgb3V0X2NvbHVtbk5hbWVzLCBTdHJpbmcqIG91dF9ub3RlcywgZG91Ymxl
KiBvdXRfdGltZXN0YW1wLCBKU09OOjpPYmplY3QqIG91dF92YWx1ZXMsIEpTT046OlZhbHVlKiBv
dXRfcGF5bG9hZCwgaW50KiBvdXRfZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRhdGFiYXNlOjpFcnJvcj4mIG91dF9zcWxFcnJvciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMqIG91dF9zY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiBvdXRfYWx0ZXJuYXRlQ29sb3JzLCBE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciogb3V0X3ByaW50Q29s
b3IpID0gMDsKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5EYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVySGFuZGxlcigpOworfTsKKworY2xhc3MgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciBmaW5h
bCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAg
c3RhdGljIFJlZjxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3Bh
dGNoZXImLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIHZvaWQgZGlz
cGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2Jq
ZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOworcHJpdmF0ZToKKyAgICB2b2lkIGV4ZWN1dGVBbGxPcHRp
b25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFy
YW1ldGVycyk7CisgICAgdm9pZCBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMobG9uZyByZXF1
ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisjaWYgRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCitwdWJsaWM6CisgICAgdm9pZCBzZXRBbHRl
cm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIqIGFsdGVy
bmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0
Y2hlcjsgfQorcHJpdmF0ZToKKyAgICBBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
KiBtX2FsdGVybmF0ZURpc3BhdGNoZXIgeyBudWxscHRyIH07CisjZW5kaWYgLy8gRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCitwcml2YXRlOgorICAgIERhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVySGFuZGxlciopOworICAgIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2Fn
ZW50IHsgbnVsbHB0ciB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5k
IEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJh
Y2tlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBj
b21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZh
bHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENI
RVJTKQorI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNlbmRp
ZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworbmFtZXNwYWNl
IEluc3BlY3RvciB7CisKK0RhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+RGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KKworUmVmPERhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXI+IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShCYWNrZW5kRGlzcGF0
Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
KiBhZ2VudCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOworfQorCitEYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVyOjpEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBi
YWNrZW5kRGlzcGF0Y2hlciwgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50
KQorICAgIDogU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIp
CisgICAgLCBtX2FnZW50KGFnZW50KQoreworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lz
dGVyRGlzcGF0Y2hlckZvckRvbWFpbigiRGF0YWJhc2UiX3MsIHRoaXMpOworfQorCit2b2lkIERh
dGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBT
dHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQoreworICAgIFJlZjxE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKKworICAgIFJlZlB0cjxK
U09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7CisgICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMi
X3MsIHBhcmFtZXRlcnMpOworCisgICAgaWYgKG1ldGhvZCA9PSAiZXhlY3V0ZUFsbE9wdGlvbmFs
UGFyYW1ldGVycyIpIHsKKyAgICAgICAgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhyZXF1
ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IGlmIChtZXRob2QgPT0gImV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyIpIHsKKyAgICAgICAg
ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJz
KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5y
ZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidE
YXRhYmFzZS4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOworfQorCit2b2lkIERhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyBy
ZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycykKK3sKKyAgICBib29s
IG9wdF9pbl9jb2x1bW5OYW1lc192YWx1ZUZvdW5kID0gZmFsc2U7CisgICAgUmVmUHRyPEpTT046
OkFycmF5PiBvcHRfaW5fY29sdW1uTmFtZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRBcnJh
eShwYXJhbWV0ZXJzLmdldCgpLCAiY29sdW1uTmFtZXMiX3MsICZvcHRfaW5fY29sdW1uTmFtZXNf
dmFsdWVGb3VuZCk7CisgICAgYm9vbCBvcHRfaW5fbm90ZXNfdmFsdWVGb3VuZCA9IGZhbHNlOwor
ICAgIFN0cmluZyBvcHRfaW5fbm90ZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmco
cGFyYW1ldGVycy5nZXQoKSwgIm5vdGVzIl9zLCAmb3B0X2luX25vdGVzX3ZhbHVlRm91bmQpOwor
ICAgIGJvb2wgb3B0X2luX3RpbWVzdGFtcF92YWx1ZUZvdW5kID0gZmFsc2U7CisgICAgZG91Ymxl
IG9wdF9pbl90aW1lc3RhbXAgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXREb3VibGUocGFyYW1l
dGVycy5nZXQoKSwgInRpbWVzdGFtcCJfcywgJm9wdF9pbl90aW1lc3RhbXBfdmFsdWVGb3VuZCk7
CisgICAgYm9vbCBvcHRfaW5fdmFsdWVzX3ZhbHVlRm91bmQgPSBmYWxzZTsKKyAgICBSZWZQdHI8
SlNPTjo6T2JqZWN0PiBvcHRfaW5fdmFsdWVzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0T2Jq
ZWN0KHBhcmFtZXRlcnMuZ2V0KCksICJ2YWx1ZXMiX3MsICZvcHRfaW5fdmFsdWVzX3ZhbHVlRm91
bmQpOworICAgIGJvb2wgb3B0X2luX3BheWxvYWRfdmFsdWVGb3VuZCA9IGZhbHNlOworICAgIFJl
ZlB0cjxKU09OOjpWYWx1ZT4gb3B0X2luX3BheWxvYWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5n
ZXRWYWx1ZShwYXJhbWV0ZXJzLmdldCgpLCAicGF5bG9hZCJfcywgJm9wdF9pbl9wYXlsb2FkX3Zh
bHVlRm91bmQpOworICAgIGJvb2wgb3B0X2luX2RhdGFiYXNlSWRfdmFsdWVGb3VuZCA9IGZhbHNl
OworICAgIGludCBvcHRfaW5fZGF0YWJhc2VJZCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldElu
dGVnZXIocGFyYW1ldGVycy5nZXQoKSwgImRhdGFiYXNlSWQiX3MsICZvcHRfaW5fZGF0YWJhc2VJ
ZF92YWx1ZUZvdW5kKTsKKyAgICBib29sIG9wdF9pbl9zcWxFcnJvcl92YWx1ZUZvdW5kID0gZmFs
c2U7CisgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gb3B0X2luX3NxbEVycm9yID0gbV9iYWNrZW5k
RGlzcGF0Y2hlci0+Z2V0T2JqZWN0KHBhcmFtZXRlcnMuZ2V0KCksICJzcWxFcnJvciJfcywgJm9w
dF9pbl9zcWxFcnJvcl92YWx1ZUZvdW5kKTsKKyAgICBib29sIG9wdF9pbl9zY3JlZW5Db2xvcl92
YWx1ZUZvdW5kID0gZmFsc2U7CisgICAgU3RyaW5nIG9wdF9pbl9zY3JlZW5Db2xvciA9IG1fYmFj
a2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwYXJhbWV0ZXJzLmdldCgpLCAic2NyZWVuQ29sb3Ii
X3MsICZvcHRfaW5fc2NyZWVuQ29sb3JfdmFsdWVGb3VuZCk7CisgICAgYm9vbCBvcHRfaW5fYWx0
ZXJuYXRlQ29sb3JzX3ZhbHVlRm91bmQgPSBmYWxzZTsKKyAgICBSZWZQdHI8SlNPTjo6QXJyYXk+
IG9wdF9pbl9hbHRlcm5hdGVDb2xvcnMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRBcnJheShw
YXJhbWV0ZXJzLmdldCgpLCAiYWx0ZXJuYXRlQ29sb3JzIl9zLCAmb3B0X2luX2FsdGVybmF0ZUNv
bG9yc192YWx1ZUZvdW5kKTsKKyAgICBib29sIG9wdF9pbl9wcmludENvbG9yX3ZhbHVlRm91bmQg
PSBmYWxzZTsKKyAgICBTdHJpbmcgb3B0X2luX3ByaW50Q29sb3IgPSBtX2JhY2tlbmREaXNwYXRj
aGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgInByaW50Q29sb3IiX3MsICZvcHRfaW5f
cHJpbnRDb2xvcl92YWx1ZUZvdW5kKTsKKyAgICBpZiAobV9iYWNrZW5kRGlzcGF0Y2hlci0+aGFz
UHJvdG9jb2xFcnJvcnMoKSkgeworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQ
cm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCAiU29tZSBhcmd1
bWVudHMgb2YgbWV0aG9kICdEYXRhYmFzZS5leGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzJyBj
YW4ndCBiZSBwcm9jZXNzZWQiX3MpOworICAgICAgICByZXR1cm47CisgICAgfQorCisjaWYgRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisgICAgaWYgKG1fYWx0ZXJuYXRl
RGlzcGF0Y2hlcikgeworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVBbGxP
cHRpb25hbFBhcmFtZXRlcnMocmVxdWVzdElkLCBvcHRfaW5fY29sdW1uTmFtZXNfdmFsdWVGb3Vu
ZCA/IG9wdF9pbl9jb2x1bW5OYW1lcy5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9ub3Rlc192YWx1
ZUZvdW5kID8gJm9wdF9pbl9ub3RlcyA6IG51bGxwdHIsIG9wdF9pbl90aW1lc3RhbXBfdmFsdWVG
b3VuZCA/ICZvcHRfaW5fdGltZXN0YW1wIDogbnVsbHB0ciwgb3B0X2luX3ZhbHVlc192YWx1ZUZv
dW5kID8gb3B0X2luX3ZhbHVlcy5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9wYXlsb2FkX3ZhbHVl
Rm91bmQgPyBvcHRfaW5fcGF5bG9hZC5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9kYXRhYmFzZUlk
X3ZhbHVlRm91bmQgPyAmb3B0X2luX2RhdGFiYXNlSWQgOiBudWxscHRyLCBvcHRfaW5fc3FsRXJy
b3JfdmFsdWVGb3VuZCA/IG9wdF9pbl9zcWxFcnJvci5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9z
Y3JlZW5Db2xvcl92YWx1ZUZvdW5kID8gJm9wdF9pbl9zY3JlZW5Db2xvciA6IG51bGxwdHIsIG9w
dF9pbl9hbHRlcm5hdGVDb2xvcnNfdmFsdWVGb3VuZCA/IG9wdF9pbl9hbHRlcm5hdGVDb2xvcnMu
Z2V0KCkgOiBudWxscHRyLCBvcHRfaW5fcHJpbnRDb2xvcl92YWx1ZUZvdW5kID8gJm9wdF9pbl9w
cmludENvbG9yIDogbnVsbHB0cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYgLy8g
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyAgICBFcnJvclN0cmlu
ZyBlcnJvcjsKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOworICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IG91dF9jb2x1bW5OYW1l
czsKKyAgICBPcHRpb25hbDxTdHJpbmc+IG91dF9ub3RlczsKKyAgICBPcHRpb25hbDxkb3VibGU+
IG91dF90aW1lc3RhbXA7CisgICAgT3B0aW9uYWw8SlNPTjo6T2JqZWN0PiBvdXRfdmFsdWVzOwor
ICAgIE9wdGlvbmFsPEpTT046OlZhbHVlPiBvdXRfcGF5bG9hZDsKKyAgICBPcHRpb25hbDxpbnQ+
IG91dF9kYXRhYmFzZUlkOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFz
ZTo6RXJyb3I+IG91dF9zcWxFcnJvcjsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFz
ZTo6UHJpbWFyeUNvbG9ycyBvdXRfc2NyZWVuQ29sb3I7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IG91dF9hbHRlcm5hdGVDb2xvcnM7CisgICAg
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3Igb3V0X3ByaW50Q29s
b3I7CisgICAgbV9hZ2VudC0+ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhlcnJvciwgb3B0
X2luX2NvbHVtbk5hbWVzX3ZhbHVlRm91bmQgPyBvcHRfaW5fY29sdW1uTmFtZXMuZ2V0KCkgOiBu
dWxscHRyLCBvcHRfaW5fbm90ZXNfdmFsdWVGb3VuZCA/ICZvcHRfaW5fbm90ZXMgOiBudWxscHRy
LCBvcHRfaW5fdGltZXN0YW1wX3ZhbHVlRm91bmQgPyAmb3B0X2luX3RpbWVzdGFtcCA6IG51bGxw
dHIsIG9wdF9pbl92YWx1ZXNfdmFsdWVGb3VuZCA/IG9wdF9pbl92YWx1ZXMuZ2V0KCkgOiBudWxs
cHRyLCBvcHRfaW5fcGF5bG9hZF92YWx1ZUZvdW5kID8gb3B0X2luX3BheWxvYWQuZ2V0KCkgOiBu
dWxscHRyLCBvcHRfaW5fZGF0YWJhc2VJZF92YWx1ZUZvdW5kID8gJm9wdF9pbl9kYXRhYmFzZUlk
IDogbnVsbHB0ciwgb3B0X2luX3NxbEVycm9yX3ZhbHVlRm91bmQgPyBvcHRfaW5fc3FsRXJyb3Iu
Z2V0KCkgOiBudWxscHRyLCBvcHRfaW5fc2NyZWVuQ29sb3JfdmFsdWVGb3VuZCA/ICZvcHRfaW5f
c2NyZWVuQ29sb3IgOiBudWxscHRyLCBvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzX3ZhbHVlRm91bmQg
PyBvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX3ByaW50Q29s
b3JfdmFsdWVGb3VuZCA/ICZvcHRfaW5fcHJpbnRDb2xvciA6IG51bGxwdHIsIG91dF9jb2x1bW5O
YW1lcywgb3V0X25vdGVzLCBvdXRfdGltZXN0YW1wLCBvdXRfdmFsdWVzLCBvdXRfcGF5bG9hZCwg
b3V0X2RhdGFiYXNlSWQsIG91dF9zcWxFcnJvciwgb3V0X3NjcmVlbkNvbG9yLCBvdXRfYWx0ZXJu
YXRlQ29sb3JzLCBvdXRfcHJpbnRDb2xvcik7CisKKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7
CisgICAgICAgIGlmIChvdXRfY29sdW1uTmFtZXMpCisgICAgICAgICAgICByZXN1bHQtPnNldEFy
cmF5KCJjb2x1bW5OYW1lcyJfcywgb3V0X2NvbHVtbk5hbWVzKTsKKyAgICAgICAgaWYgKG91dF9u
b3Rlcy5oYXNWYWx1ZSgpKQorICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoIm5vdGVzIl9z
LCAqb3V0X25vdGVzKTsKKyAgICAgICAgaWYgKG91dF90aW1lc3RhbXAuaGFzVmFsdWUoKSkKKyAg
ICAgICAgICAgIHJlc3VsdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICpvdXRfdGltZXN0YW1w
KTsKKyAgICAgICAgaWYgKG91dF92YWx1ZXMuaGFzVmFsdWUoKSkKKyAgICAgICAgICAgIHJlc3Vs
dC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsICpvdXRfdmFsdWVzKTsKKyAgICAgICAgaWYgKG91dF9w
YXlsb2FkLmhhc1ZhbHVlKCkpCisgICAgICAgICAgICByZXN1bHQtPnNldFZhbHVlKCJwYXlsb2Fk
Il9zLCAqb3V0X3BheWxvYWQpOworICAgICAgICBpZiAob3V0X2RhdGFiYXNlSWQuaGFzVmFsdWUo
KSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgKm91dF9k
YXRhYmFzZUlkKTsKKyAgICAgICAgaWYgKG91dF9zcWxFcnJvcikKKyAgICAgICAgICAgIHJlc3Vs
dC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgb3V0X3NxbEVycm9yKTsKKyAgICAgICAgaWYgKG91
dF9zY3JlZW5Db2xvci5oYXNWYWx1ZSgpKQorICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmco
InNjcmVlbkNvbG9yIl9zLCAqb3V0X3NjcmVlbkNvbG9yKTsKKyAgICAgICAgaWYgKG91dF9hbHRl
cm5hdGVDb2xvcnMpCisgICAgICAgICAgICByZXN1bHQtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xv
cnMiX3MsIG91dF9hbHRlcm5hdGVDb2xvcnMpOworICAgICAgICBpZiAob3V0X3ByaW50Q29sb3Iu
aGFzVmFsdWUoKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9z
LCAqb3V0X3ByaW50Q29sb3IpOworICAgIH0KKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQorICAg
ICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3Zl
KHJlc3VsdCksIGZhbHNlKTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZN
b3ZlKGVycm9yKSk7Cit9CisKK3ZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0
ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0
PiYmIHBhcmFtZXRlcnMpCit7CisgICAgUmVmUHRyPEpTT046OkFycmF5PiBpbl9jb2x1bW5OYW1l
cyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEFycmF5KHBhcmFtZXRlcnMuZ2V0KCksICJjb2x1
bW5OYW1lcyJfcywgbnVsbHB0cik7CisgICAgU3RyaW5nIGluX25vdGVzID0gbV9iYWNrZW5kRGlz
cGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksICJub3RlcyJfcywgbnVsbHB0cik7
CisgICAgZG91YmxlIGluX3RpbWVzdGFtcCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldERvdWJs
ZShwYXJhbWV0ZXJzLmdldCgpLCAidGltZXN0YW1wIl9zLCBudWxscHRyKTsKKyAgICBSZWZQdHI8
SlNPTjo6T2JqZWN0PiBpbl92YWx1ZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRPYmplY3Qo
cGFyYW1ldGVycy5nZXQoKSwgInZhbHVlcyJfcywgbnVsbHB0cik7CisgICAgUmVmUHRyPEpTT046
OlZhbHVlPiBpbl9wYXlsb2FkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0VmFsdWUocGFyYW1l
dGVycy5nZXQoKSwgInBheWxvYWQiX3MsIG51bGxwdHIpOworICAgIGludCBpbl9kYXRhYmFzZUlk
ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0SW50ZWdlcihwYXJhbWV0ZXJzLmdldCgpLCAiZGF0
YWJhc2VJZCJfcywgbnVsbHB0cik7CisgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gaW5fc3FsRXJy
b3IgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRPYmplY3QocGFyYW1ldGVycy5nZXQoKSwgInNx
bEVycm9yIl9zLCBudWxscHRyKTsKKyAgICBTdHJpbmcgaW5fc2NyZWVuQ29sb3IgPSBtX2JhY2tl
bmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgInNjcmVlbkNvbG9yIl9z
LCBudWxscHRyKTsKKyAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGluX2FsdGVybmF0ZUNvbG9ycyA9
IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEFycmF5KHBhcmFtZXRlcnMuZ2V0KCksICJhbHRlcm5h
dGVDb2xvcnMiX3MsIG51bGxwdHIpOworICAgIFN0cmluZyBpbl9wcmludENvbG9yID0gbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksICJwcmludENvbG9yIl9z
LCBudWxscHRyKTsKKyAgICBpZiAobV9iYWNrZW5kRGlzcGF0Y2hlci0+aGFzUHJvdG9jb2xFcnJv
cnMoKSkgeworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9y
KEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCAiU29tZSBhcmd1bWVudHMgb2YgbWV0
aG9kICdEYXRhYmFzZS5leGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMnIGNhbid0IGJlIHByb2Nl
c3NlZCJfcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7
CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0
ZXJzKHJlcXVlc3RJZCwgKmluX2NvbHVtbk5hbWVzLCBpbl9ub3RlcywgaW5fdGltZXN0YW1wLCAq
aW5fdmFsdWVzLCAqaW5fcGF5bG9hZCwgaW5fZGF0YWJhc2VJZCwgKmluX3NxbEVycm9yLCBpbl9z
Y3JlZW5Db2xvciwgKmluX2FsdGVybmF0ZUNvbG9ycywgaW5fcHJpbnRDb2xvcik7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCisKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWY8SlNPTjo6T2JqZWN0
PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxKU09OOjpBcnJh
eU9mPFN0cmluZz4+IG91dF9jb2x1bW5OYW1lczsKKyAgICBTdHJpbmcgb3V0X25vdGVzOworICAg
IGRvdWJsZSBvdXRfdGltZXN0YW1wOworICAgIEpTT046Ok9iamVjdCBvdXRfdmFsdWVzOworICAg
IEpTT046OlZhbHVlIG91dF9wYXlsb2FkOworICAgIGludCBvdXRfZGF0YWJhc2VJZDsKKyAgICBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBvdXRfc3FsRXJyb3I7
CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgb3V0X3Nj
cmVlbkNvbG9yOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29s
b3JMaXN0PiBvdXRfYWx0ZXJuYXRlQ29sb3JzOworICAgIERhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyOjpQcmludENvbG9yIG91dF9wcmludENvbG9yOworICAgIG1fYWdlbnQtPmV4ZWN1
dGVOb09wdGlvbmFsUGFyYW1ldGVycyhlcnJvciwgKmluX2NvbHVtbk5hbWVzLCBpbl9ub3Rlcywg
aW5fdGltZXN0YW1wLCAqaW5fdmFsdWVzLCAqaW5fcGF5bG9hZCwgaW5fZGF0YWJhc2VJZCwgKmlu
X3NxbEVycm9yLCBpbl9zY3JlZW5Db2xvciwgKmluX2FsdGVybmF0ZUNvbG9ycywgaW5fcHJpbnRD
b2xvciwgb3V0X2NvbHVtbk5hbWVzLCAmb3V0X25vdGVzLCAmb3V0X3RpbWVzdGFtcCwgb3V0X3Zh
bHVlcywgJm91dF9wYXlsb2FkLCAmb3V0X2RhdGFiYXNlSWQsIG91dF9zcWxFcnJvciwgJm91dF9z
Y3JlZW5Db2xvciwgb3V0X2FsdGVybmF0ZUNvbG9ycywgJm91dF9wcmludENvbG9yKTsKKworICAg
IGlmICghZXJyb3IubGVuZ3RoKCkpIHsKKyAgICAgICAgcmVzdWx0LT5zZXRBcnJheSgiY29sdW1u
TmFtZXMiX3MsIG91dF9jb2x1bW5OYW1lcyk7CisgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJu
b3RlcyJfcywgb3V0X25vdGVzKTsKKyAgICAgICAgcmVzdWx0LT5zZXREb3VibGUoInRpbWVzdGFt
cCJfcywgb3V0X3RpbWVzdGFtcCk7CisgICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJ2YWx1ZXMi
X3MsIG91dF92YWx1ZXMpOworICAgICAgICByZXN1bHQtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBv
dXRfcGF5bG9hZCk7CisgICAgICAgIHJlc3VsdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywg
b3V0X2RhdGFiYXNlSWQpOworICAgICAgICByZXN1bHQtPnNldE9iamVjdCgic3FsRXJyb3IiX3Ms
IG91dF9zcWxFcnJvcik7CisgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJf
cywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVl
KG91dF9zY3JlZW5Db2xvcikpOworICAgICAgICByZXN1bHQtPnNldEFycmF5KCJhbHRlcm5hdGVD
b2xvcnMiX3MsIG91dF9hbHRlcm5hdGVDb2xvcnMpOworICAgICAgICByZXN1bHQtPnNldFN0cmlu
ZygicHJpbnRDb2xvciJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVu
dW1Db25zdGFudFZhbHVlKG91dF9wcmludENvbG9yKSk7CisgICAgfQorICAgIGlmICghZXJyb3Iu
bGVuZ3RoKCkpCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1
ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOworICAgIGVsc2UKKyAgICAgICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2Vy
dmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
CisKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMu
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaW5jbHVkZSAiVGVzdFByb3Rv
Y29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBGcm9u
dGVuZFJvdXRlcjsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRl
c3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERp
c3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRz
LXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
KworIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4K
KworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCituYW1lc3BhY2UgUHJvdG9jb2wgeworCisK
KworLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCituYW1lc3BhY2UgRGF0YWJhc2UgeworY2xhc3Mg
RXJyb3I7CitlbnVtIGNsYXNzIFByaW1hcnlDb2xvcnM7Cit9IC8vIERhdGFiYXNlCisvLyBFbmQg
b2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCisKKworLy8gVHlwZWRlZnMuCituYW1lc3BhY2UgRGF0
YWJhc2UgeworLyogVW5pcXVlIGlkZW50aWZpZXIgb2YgRGF0YWJhc2Ugb2JqZWN0LiAqLwordHlw
ZWRlZiBpbnQgRGF0YWJhc2VJZDsKK3R5cGVkZWYgSlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gQ29sb3JMaXN0OworfSAvLyBEYXRhYmFz
ZQorLy8gRW5kIG9mIHR5cGVkZWZzLgorCituYW1lc3BhY2UgVGVzdEhlbHBlcnMgeworCitTdHJp
bmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFsdWUpCit7CisgICAgcmV0dXJu
IGdldEVudW1Db25zdGFudFZhbHVlKHN0YXRpY19jYXN0PGludD4oZW51bVZhbHVlKSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCisKK25hbWVzcGFjZSBEYXRhYmFzZSB7CisKK2Vu
dW0gY2xhc3MgUHJpbWFyeUNvbG9ycyB7CisgICAgUmVkID0gMCwKKyAgICBHcmVlbiA9IDEsCisg
ICAgQmx1ZSA9IDIsCit9OyAvLyBlbnVtIGNsYXNzIFByaW1hcnlDb2xvcnMKKworLyogRGF0YWJh
c2UgZXJyb3IuICovCitjbGFzcyBFcnJvciA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKK3B1
YmxpYzoKKyAgICBlbnVtIHsKKyAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAorICAgICAgICBNZXNz
YWdlU2V0ID0gMSA8PCAwLAorICAgICAgICBDb2RlU2V0ID0gMSA8PCAxLAorICAgICAgICBBbGxG
aWVsZHNTZXQgPSAoTWVzc2FnZVNldCB8IENvZGVTZXQpCisgICAgfTsKKworICAgIHRlbXBsYXRl
PGludCBTVEFURT4KKyAgICBjbGFzcyBCdWlsZGVyIHsKKyAgICBwcml2YXRlOgorICAgICAgICBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiBtX3Jlc3VsdDsKKworICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RF
UD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhp
cyk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyKFJlZjwvKkVycm9yKi9KU09OOjpPYmpl
Y3Q+JiYgb2JqZWN0KQorICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0
LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAgICAgICB9CisgICAgICAg
IGZyaWVuZCBjbGFzcyBFcnJvcjsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IE1lc3NhZ2VTZXQ+JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAg
IHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNZXNzYWdlU2V0KSwgcHJv
cGVydHlfbWVzc2FnZV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3Ry
aW5nKCJtZXNzYWdlIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1l
c3NhZ2VTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29kZVNl
dD4mIHNldENvZGUoaW50IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgQ29kZVNldCksIHByb3BlcnR5X2NvZGVfYWxyZWFkeV9zZXQpOworICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldEludGVnZXIoImNvZGUiX3MsIHZhbHVlKTsKKyAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8Q29kZVNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIFJl
ZjxFcnJvcj4gcmVsZWFzZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CisgICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVChzaXplb2YoRXJyb3IpID09IHNpemVvZihKU09OOjpPYmplY3QpLCBj
YW5ub3RfY2FzdCk7CisKKyAgICAgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25SZXN1bHQg
PSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBX
VEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxFcnJvcj4qPigmanNvblJlc3VsdCkpOworICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvKgorICAg
ICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKKyAgICAgKiBSZWY8RXJyb3I+IHJlc3VsdCA9IEVy
cm9yOjpjcmVhdGUoKQorICAgICAqICAgICAuc2V0TWVzc2FnZSguLi4pCisgICAgICogICAgIC5z
ZXRDb2RlKC4uLikKKyAgICAgKiAgICAgLnJlbGVhc2UoKTsKKyAgICAgKi8KKyAgICBzdGF0aWMg
QnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBCdWls
ZGVyPE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICB9Cit9OworCit9
IC8vIERhdGFiYXNlCisKKworCituYW1lc3BhY2UgVGVzdEhlbHBlcnMgeworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBQcm90b2NvbEVudW1UeXBlPgorT3B0aW9uYWw8UHJvdG9jb2xFbnVtVHlwZT4gcGFy
c2VFbnVtVmFsdWVGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYpOworCisvLyBFbnVtcyBpbiB0aGUg
J0RhdGFiYXNlJyBEb21haW4KK3RlbXBsYXRlPD4KK09wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5z
cGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+KGNvbnN0IFN0cmluZyYp
OworCit9IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycworCit9IC8vIG5hbWVzcGFjZSBQcm90b2Nv
bAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKKworLy8gSGFzaCBkZWNsYXJhdGlv
bnMgaW4gdGhlICdEYXRhYmFzZScgRG9tYWluCit0ZW1wbGF0ZTw+CitzdHJ1Y3QgRGVmYXVsdEhh
c2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IHsKKyAgICB0
eXBlZGVmIEludEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xv
cnM+IEhhc2g7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKyMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sT2JqZWN0cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNw
cAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9u
YWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0UHJv
dG9jb2xPYmplY3RzLmgiCisKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCituYW1lc3BhY2Ug
UHJvdG9jb2wgeworCituYW1lc3BhY2UgVGVzdEhlbHBlcnMgeworCitzdGF0aWMgY29uc3QgY2hh
ciogY29uc3QgZW51bV9jb25zdGFudF92YWx1ZXNbXSA9IHsKKyAgICAicmVkIiwKKyAgICAiZ3Jl
ZW4iLAorICAgICJibHVlIiwKKyAgICAiY3lhbiIsCisgICAgIm1hZ2VudGEiLAorICAgICJ5ZWxs
b3ciLAorICAgICJibGFjayIsCit9OworCitTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50
IGNvZGUpIHsKKyAgICByZXR1cm4gZW51bV9jb25zdGFudF92YWx1ZXNbY29kZV07Cit9CisKKy8v
IEVudW1zIGluIHRoZSAnRGF0YWJhc2UnIERvbWFpbgorCit0ZW1wbGF0ZTw+CitPcHRpb25hbDxJ
bnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gcGFyc2VFbnVtVmFs
dWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3Jz
Pihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQoreworICAgIHN0YXRpYyBjb25zdCBzaXpl
X3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9yczo6UmVkLAorICAgICAgICAoc2l6ZV90KUluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzOjpHcmVlbiwKKyAgICAgICAg
KHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9yczo6Qmx1
ZSwKKyAgICB9OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMzsgKytpKQorICAgICAgICBp
ZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNb
aV1dKQorICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6
UHJpbWFyeUNvbG9ycyljb25zdGFudFZhbHVlc1tpXTsKKworICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCisKKworCit9IC8vIG5hbWVzcGFj
ZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFj
a2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21t
YW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDx3dGYvUGxhdGZvcm0u
aD4KKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmRE
aXNwYXRjaGVycy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworQHByb3RvY29sIFRl
c3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcjsKKworbmFtZXNwYWNlIEluc3BlY3RvciB7
CisKKworY2xhc3MgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIgZmluYWwg
OiBwdWJsaWMgQWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciB7CisgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyPiBoYW5k
bGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9CisgICAgdm9pZCBleGVjdXRlQWxsT3B0aW9u
YWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBjb25zdCBKU09OOjpBcnJheSogaW5fY29sdW1u
TmFtZXMsIGNvbnN0IFN0cmluZyogaW5fbm90ZXMsIGNvbnN0IGRvdWJsZSogaW5fdGltZXN0YW1w
LCBjb25zdCBKU09OOjpPYmplY3QqIGluX3ZhbHVlcywgY29uc3QgSlNPTjo6VmFsdWUqIGluX3Bh
eWxvYWQsIGNvbnN0IGludCogaW5fZGF0YWJhc2VJZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBpbl9z
cWxFcnJvciwgY29uc3QgU3RyaW5nKiBpbl9zY3JlZW5Db2xvciwgY29uc3QgSlNPTjo6QXJyYXkq
IGluX2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nKiBpbl9wcmludENvbG9yKSBmaW5hbDsK
KyAgICB2b2lkIGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhsb25nIHJlcXVlc3RJZCwgY29u
c3QgSlNPTjo6QXJyYXkmIGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIGluX25vdGVzLCBk
b3VibGUgaW5fdGltZXN0YW1wLCBjb25zdCBKU09OOjpPYmplY3QmIGluX3ZhbHVlcywgSlNPTjo6
VmFsdWUgaW5fcGF5bG9hZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IEpTT046Ok9iamVjdCYg
aW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgaW5fc2NyZWVuQ29sb3IsIGNvbnN0IEpTT046OkFy
cmF5JiBpbl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgaW5fcHJpbnRDb2xvcikgZmlu
YWw7Citwcml2YXRlOgorICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFp
bkhhbmRsZXI+PiBtX2RlbGVnYXRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisK
KyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4t
cGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3Bh
dGNoZXJzLmgiCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2luY2x1ZGUg
IlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVz
Lmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit2b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVx
dWVzdElkLCBjb25zdCBKU09OOjpBcnJheSogaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyog
aW5fbm90ZXMsIGNvbnN0IGRvdWJsZSogaW5fdGltZXN0YW1wLCBjb25zdCBKU09OOjpPYmplY3Qq
IGluX3ZhbHVlcywgY29uc3QgSlNPTjo6VmFsdWUqIGluX3BheWxvYWQsIGNvbnN0IGludCogaW5f
ZGF0YWJhc2VJZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5n
KiBpbl9zY3JlZW5Db2xvciwgY29uc3QgSlNPTjo6QXJyYXkqIGluX2FsdGVybmF0ZUNvbG9ycywg
Y29uc3QgU3RyaW5nKiBpbl9wcmludENvbG9yKQoreworICAgIGlmICghW21fZGVsZWdhdGUgcmVz
cG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzV2l0
aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOmNvbHVtbk5hbWVzOm5vdGVzOnRpbWVzdGFt
cDp2YWx1ZXM6cGF5bG9hZDpkYXRhYmFzZUlkOnNxbEVycm9yOnNjcmVlbkNvbG9yOmFsdGVybmF0
ZUNvbG9yczpwcmludENvbG9yOildKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJl
cG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90
Rm91bmQsICInRGF0YWJhc2UuZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycycgd2FzIG5vdCBm
b3VuZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3Jz
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZCBlcnJvckNhbGxiYWNrID0gXihO
U1N0cmluZyAqZXJyb3IpIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJv
dG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJy
b3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwor
ICAgIH07CisKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0cmluZz4q
LyAqKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqKm5vdGVzLCBkb3VibGUgKnRpbWVzdGFtcCwgUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICoqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipwYXls
b2FkLCBpbnQgKmRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipzcWxFcnJv
ciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzICpzY3JlZW5Db2xvciwgTlNBcnJh
eS8qPE5TU3RyaW5nPiovICoqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yICpwcmludENvbG9yKSB7CisgICAg
ICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdE9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRl
KCk7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihj
b2x1bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9S
X0JBRF9PUFRJT05BTF9QQVJBTUVURVIobm90ZXMsIEAibm90ZXMiKTsKKyAgICAgICAgVEhST1df
RVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHZhbHVlcywgQCJ2YWx1ZXMiKTsK
KyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHBheWxv
YWQsIEAicGF5bG9hZCIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05B
TF9QQVJBTUVURVIoc3FsRXJyb3IsIEAic3FsRXJyb3IiKTsKKyAgICAgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKGFsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5h
dGVDb2xvcnMiKTsKKyAgICAgICAgaWYgKGNvbHVtbk5hbWVzKQorICAgICAgICAgICAgcmVzdWx0
T2JqZWN0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KCpjb2x1
bW5OYW1lcykpOworICAgICAgICBpZiAobm90ZXMpCisgICAgICAgICAgICByZXN1bHRPYmplY3Qt
PnNldFN0cmluZygibm90ZXMiX3MsICpub3Rlcyk7CisgICAgICAgIGlmICh0aW1lc3RhbXApCisg
ICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCAqdGltZXN0
YW1wKTsKKyAgICAgICAgaWYgKHZhbHVlcykKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0
T2JqZWN0KCJ2YWx1ZXMiX3MsIFsqdmFsdWVzIHRvSlNPTk9iamVjdF0pOworICAgICAgICBpZiAo
cGF5bG9hZCkKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3Ms
IFsqcGF5bG9hZCB0b0pTT05PYmplY3RdKTsKKyAgICAgICAgaWYgKGRhdGFiYXNlSWQpCisgICAg
ICAgICAgICByZXN1bHRPYmplY3QtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsICpkYXRhYmFz
ZUlkKTsKKyAgICAgICAgaWYgKHNxbEVycm9yKQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5z
ZXRPYmplY3QoInNxbEVycm9yIl9zLCBbKnNxbEVycm9yIHRvSlNPTk9iamVjdF0pOworICAgICAg
ICBpZiAoc2NyZWVuQ29sb3IpCisgICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygi
c2NyZWVuQ29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcoKnNjcmVlbkNvbG9yKSk7CisgICAgICAg
IGlmIChhbHRlcm5hdGVDb2xvcnMpCisgICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5
KCJhbHRlcm5hdGVDb2xvcnMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KCphbHRlcm5hdGVDb2xvcnMp
KTsKKyAgICAgICAgaWYgKHByaW50Q29sb3IpCisgICAgICAgICAgICByZXN1bHRPYmplY3QtPnNl
dFN0cmluZygicHJpbnRDb2xvciJfcywgdG9Qcm90b2NvbFN0cmluZygqcHJpbnRDb2xvcikpOwor
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZN
b3ZlKHJlc3VsdE9iamVjdCksIGZhbHNlKTsKKyAgICB9OworCisgICAgTlNBcnJheS8qPE5TU3Ry
aW5nPiovICpvX2luX2NvbHVtbk5hbWVzOworICAgIGlmIChpbl9jb2x1bW5OYW1lcykKKyAgICAg
ICAgb19pbl9jb2x1bW5OYW1lcyA9IHRvT2JqQ1N0cmluZ0FycmF5KGluX2NvbHVtbk5hbWVzKTsK
KyAgICBOU1N0cmluZyAqb19pbl9ub3RlczsKKyAgICBpZiAoaW5fbm90ZXMpCisgICAgICAgIG9f
aW5fbm90ZXMgPSAqaW5fbm90ZXM7CisgICAgZG91YmxlIG9faW5fdGltZXN0YW1wOworICAgIGlm
IChpbl90aW1lc3RhbXApCisgICAgICAgIG9faW5fdGltZXN0YW1wID0gKmluX3RpbWVzdGFtcDsK
KyAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9faW5fdmFsdWVzOworICAgIGlmIChpbl92YWx1
ZXMpCisgICAgICAgIG9faW5fdmFsdWVzID0gW1tbUldJUHJvdG9jb2xKU09OT2JqZWN0IGFsbG9j
XSBpbml0V2l0aEpTT05PYmplY3Q6aW5fdmFsdWVzXSBhdXRvcmVsZWFzZV07CisgICAgUldJUHJv
dG9jb2xKU09OT2JqZWN0ICpvX2luX3BheWxvYWQ7CisgICAgaWYgKGluX3BheWxvYWQpCisgICAg
ICAgIG9faW5fcGF5bG9hZCA9IFtbW1JXSVByb3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5pdFdp
dGhKU09OT2JqZWN0OmluX3BheWxvYWRdIGF1dG9yZWxlYXNlXTsKKyAgICBpbnQgb19pbl9kYXRh
YmFzZUlkOworICAgIGlmIChpbl9kYXRhYmFzZUlkKQorICAgICAgICBvX2luX2RhdGFiYXNlSWQg
PSAqaW5fZGF0YWJhc2VJZDsKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpvX2luX3Nx
bEVycm9yOworICAgIGlmIChpbl9zcWxFcnJvcikKKyAgICAgICAgb19pbl9zcWxFcnJvciA9IFtb
W1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDppbl9z
cWxFcnJvcl0gYXV0b3JlbGVhc2VdOworICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNl
UHJpbWFyeUNvbG9ycz4gb19pbl9zY3JlZW5Db2xvcjsKKyAgICBpZiAoaW5fc2NyZWVuQ29sb3Ip
CisgICAgICAgIG9faW5fc2NyZWVuQ29sb3IgPSBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3Rv
Y29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzPigqaW5fc2NyZWVuQ29sb3IpOworICAgIE5TQXJyYXkv
KjxOU1N0cmluZz4qLyAqb19pbl9hbHRlcm5hdGVDb2xvcnM7CisgICAgaWYgKGluX2FsdGVybmF0
ZUNvbG9ycykKKyAgICAgICAgb19pbl9hbHRlcm5hdGVDb2xvcnMgPSB0b09iakNTdHJpbmdBcnJh
eShpbl9hbHRlcm5hdGVDb2xvcnMpOworICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNl
RXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3I+IG9faW5fcHJpbnRDb2xvcjsK
KyAgICBpZiAoaW5fcHJpbnRDb2xvcikKKyAgICAgICAgb19pbl9wcmludENvbG9yID0gZnJvbVBy
b3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1l
dGVyc1ByaW50Q29sb3I+KCppbl9wcmludENvbG9yKTsKKworICAgIFttX2RlbGVnYXRlIGV4ZWN1
dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1
Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2sgY29sdW1uTmFtZXM6KGluX2NvbHVtbk5hbWVz
ID8gJm9faW5fY29sdW1uTmFtZXMgOiBuaWwpIG5vdGVzOihpbl9ub3RlcyA/ICZvX2luX25vdGVz
IDogbmlsKSB0aW1lc3RhbXA6KGluX3RpbWVzdGFtcCA/ICZvX2luX3RpbWVzdGFtcCA6IG5pbCkg
dmFsdWVzOihpbl92YWx1ZXMgPyAmb19pbl92YWx1ZXMgOiBuaWwpIHBheWxvYWQ6KGluX3BheWxv
YWQgPyAmb19pbl9wYXlsb2FkIDogbmlsKSBkYXRhYmFzZUlkOihpbl9kYXRhYmFzZUlkID8gJm9f
aW5fZGF0YWJhc2VJZCA6IG5pbCkgc3FsRXJyb3I6KGluX3NxbEVycm9yID8gJm9faW5fc3FsRXJy
b3IgOiBuaWwpIHNjcmVlbkNvbG9yOihpbl9zY3JlZW5Db2xvciA/ICZvX2luX3NjcmVlbkNvbG9y
LnZhbHVlKCkgOiBuaWwpIGFsdGVybmF0ZUNvbG9yczooaW5fYWx0ZXJuYXRlQ29sb3JzID8gJm9f
aW5fYWx0ZXJuYXRlQ29sb3JzIDogbmlsKSBwcmludENvbG9yOihpbl9wcmludENvbG9yID8gJm9f
aW5fcHJpbnRDb2xvci52YWx1ZSgpIDogbmlsKV07Cit9CisKK3ZvaWQgT2JqQ0luc3BlY3RvckRh
dGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhsb25n
IHJlcXVlc3RJZCwgY29uc3QgSlNPTjo6QXJyYXkmIGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJp
bmcmIGluX25vdGVzLCBkb3VibGUgaW5fdGltZXN0YW1wLCBjb25zdCBKU09OOjpPYmplY3QmIGlu
X3ZhbHVlcywgSlNPTjo6VmFsdWUgaW5fcGF5bG9hZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0
IEpTT046Ok9iamVjdCYgaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgaW5fc2NyZWVuQ29sb3Is
IGNvbnN0IEpTT046OkFycmF5JiBpbl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgaW5f
cHJpbnRDb2xvcikKK3sKKyAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpA
c2VsZWN0b3IoZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzV2l0aEVycm9yQ2FsbGJhY2s6c3Vj
Y2Vzc0NhbGxiYWNrOmNvbHVtbk5hbWVzOm5vdGVzOnRpbWVzdGFtcDp2YWx1ZXM6cGF5bG9hZDpk
YXRhYmFzZUlkOnNxbEVycm9yOnNjcmVlbkNvbG9yOmFsdGVybmF0ZUNvbG9yczpwcmludENvbG9y
OildKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3Io
cmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRGF0YWJhc2Uu
ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAg
YmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewor
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJ
ZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgfTsKKworICAgIGlkIHN1
Y2Nlc3NDYWxsYmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiovICpjb2x1bW5OYW1lcywgTlNT
dHJpbmcgKm5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnZh
bHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgVGVz
dFByb3RvY29sRGF0YWJhc2VFcnJvciAqc3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJp
bWFyeUNvbG9ycyBzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICphbHRlcm5hdGVD
b2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJp
bnRDb2xvciBwcmludENvbG9yKSB7CisgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdE9i
amVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfUkVRVUlSRURfUEFSQU1FVEVSKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7CisgICAg
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG5vdGVzLCBAIm5vdGVz
Iik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHZhbHVl
cywgQCJ2YWx1ZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJB
TUVURVIocGF5bG9hZCwgQCJwYXlsb2FkIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
UkVRVUlSRURfUEFSQU1FVEVSKHNxbEVycm9yLCBAInNxbEVycm9yIik7CisgICAgICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKGFsdGVybmF0ZUNvbG9ycywgQCJhbHRl
cm5hdGVDb2xvcnMiKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheSgiY29sdW1uTmFt
ZXMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KGNvbHVtbk5hbWVzKSk7CisgICAgICAgIHJlc3VsdE9i
amVjdC0+c2V0U3RyaW5nKCJub3RlcyJfcywgbm90ZXMpOworICAgICAgICByZXN1bHRPYmplY3Qt
PnNldERvdWJsZSgidGltZXN0YW1wIl9zLCB0aW1lc3RhbXApOworICAgICAgICByZXN1bHRPYmpl
Y3QtPnNldE9iamVjdCgidmFsdWVzIl9zLCBbdmFsdWVzIHRvSlNPTk9iamVjdF0pOworICAgICAg
ICByZXN1bHRPYmplY3QtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBbcGF5bG9hZCB0b0pTT05PYmpl
Y3RdKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCBk
YXRhYmFzZUlkKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9z
LCBbc3FsRXJyb3IgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3Ry
aW5nKCJzY3JlZW5Db2xvciJfcywgdG9Qcm90b2NvbFN0cmluZyhzY3JlZW5Db2xvcikpOworICAg
ICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIHRvSlNPTlN0
cmluZ0FycmF5KGFsdGVybmF0ZUNvbG9ycykpOworICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0
cmluZygicHJpbnRDb2xvciJfcywgdG9Qcm90b2NvbFN0cmluZyhwcmludENvbG9yKSk7CisgICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUo
cmVzdWx0T2JqZWN0KSwgZmFsc2UpOworICAgIH07CisKKyAgICBOU0FycmF5Lyo8TlNTdHJpbmc+
Ki8gKm9faW5fY29sdW1uTmFtZXMgPSB0b09iakNTdHJpbmdBcnJheSgmaW5fY29sdW1uTmFtZXMp
OworICAgIE5TU3RyaW5nICpvX2luX25vdGVzID0gaW5fbm90ZXM7CisgICAgZG91YmxlIG9faW5f
dGltZXN0YW1wID0gaW5fdGltZXN0YW1wOworICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb19p
bl92YWx1ZXMgPSBbW1tSV0lQcm90b2NvbEpTT05PYmplY3QgYWxsb2NdIGluaXRXaXRoSlNPTk9i
amVjdDomaW5fdmFsdWVzXSBhdXRvcmVsZWFzZV07CisgICAgUldJUHJvdG9jb2xKU09OT2JqZWN0
ICpvX2luX3BheWxvYWQgPSBbW1tSV0lQcm90b2NvbEpTT05PYmplY3QgYWxsb2NdIGluaXRXaXRo
SlNPTk9iamVjdDomaW5fcGF5bG9hZF0gYXV0b3JlbGVhc2VdOworICAgIGludCBvX2luX2RhdGFi
YXNlSWQgPSBpbl9kYXRhYmFzZUlkOworICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKm9f
aW5fc3FsRXJyb3IgPSBbW1tUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGFsbG9jXSBpbml0V2l0
aEpTT05PYmplY3Q6JmluX3NxbEVycm9yXSBhdXRvcmVsZWFzZV07CisgICAgT3B0aW9uYWw8VGVz
dFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzPiBvX2luX3NjcmVlbkNvbG9yID0gZnJvbVBy
b3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycz4oaW5fc2NyZWVu
Q29sb3IpOworICAgIGlmICghb19pbl9zY3JlZW5Db2xvcikgeworICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlk
UGFyYW1zLCAiUGFyYW1ldGVyICdzY3JlZW5Db2xvcicgb2YgbWV0aG9kICdEYXRhYmFzZS5leGVj
dXRlTm9PcHRpb25hbFBhcmFtZXRlcnMnIGNhbm5vdCBiZSBwcm9jZXNzZWQiX3MpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqb19pbl9hbHRlcm5h
dGVDb2xvcnMgPSB0b09iakNTdHJpbmdBcnJheSgmaW5fYWx0ZXJuYXRlQ29sb3JzKTsKKyAgICBP
cHRpb25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1By
aW50Q29sb3I+IG9faW5fcHJpbnRDb2xvciA9IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9j
b2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3I+KGluX3ByaW50
Q29sb3IpOworICAgIGlmICghb19pbl9wcmludENvbG9yKSB7CisgICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQ
YXJhbXMsICJQYXJhbWV0ZXIgJ3ByaW50Q29sb3InIG9mIG1ldGhvZCAnRGF0YWJhc2UuZXhlY3V0
ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzJyBjYW5ub3QgYmUgcHJvY2Vzc2VkIl9zKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIFttX2RlbGVnYXRlIGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1l
dGVyc1dpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nl
c3NDYWxsYmFjayBjb2x1bW5OYW1lczpvX2luX2NvbHVtbk5hbWVzIG5vdGVzOm9faW5fbm90ZXMg
dGltZXN0YW1wOm9faW5fdGltZXN0YW1wIHZhbHVlczpvX2luX3ZhbHVlcyBwYXlsb2FkOm9faW5f
cGF5bG9hZCBkYXRhYmFzZUlkOm9faW5fZGF0YWJhc2VJZCBzcWxFcnJvcjpvX2luX3NxbEVycm9y
IHNjcmVlbkNvbG9yOm9faW5fc2NyZWVuQ29sb3IudmFsdWUoKSBhbHRlcm5hdGVDb2xvcnM6b19p
bl9hbHRlcm5hdGVDb2xvcnMgcHJpbnRDb2xvcjpvX2luX3ByaW50Q29sb3IudmFsdWUoKV07Cit9
CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bEJhY2tlbmREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29u
ZmlndXJhdGlvbi5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMt
d2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8d3RmL1BsYXRmb3JtLmg+CisK
KyNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KKworX19hdHRyaWJ1dGVfXygo
dmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3Vy
YXRpb24gOiBOU09iamVjdAorQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNl
dERhdGFiYXNlSGFuZGxlcjopIGlkPFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4g
ZGF0YWJhc2VIYW5kbGVyOworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29u
ZmlndXJhdGlvbi5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9u
Lm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRp
b25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5o
IgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2ltcG9ydCAiVGVzdFByb3Rv
Y29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5h
dGVEaXNwYXRjaGFibGVBZ2VudC5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFi
bGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVj
dG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgoreworICAg
IEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7CisgICAgaWQ8VGVz
dFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyPiBfZGF0YWJhc2VIYW5kbGVyOworfQorCist
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNv
bnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlm
ICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7Cisg
ICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQorCistICh2
b2lkKWRlYWxsb2MKK3sKKyAgICBbX2RhdGFiYXNlSGFuZGxlciByZWxlYXNlXTsKKyAgICBbc3Vw
ZXIgZGVhbGxvY107Cit9CisKKy0gKHZvaWQpc2V0RGF0YWJhc2VIYW5kbGVyOihpZDxUZXN0UHJv
dG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+KWhhbmRsZXIKK3sKKyAgICBpZiAoaGFuZGxlciA9
PSBfZGF0YWJhc2VIYW5kbGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBbX2RhdGFiYXNlSGFu
ZGxlciByZWxlYXNlXTsKKyAgICBfZGF0YWJhc2VIYW5kbGVyID0gW2hhbmRsZXIgcmV0YWluXTsK
KworICAgIGF1dG8gYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IG1ha2VVbmlxdWU8T2JqQ0luc3BlY3Rv
ckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+KGhhbmRsZXIpOworICAgIGF1dG8gYWx0ZXJuYXRl
QWdlbnQgPSBtYWtlVW5pcXVlPEFsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50PERhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXIsIEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+PigiRGF0
YWJhc2UiX3MsICpfY29udHJvbGxlciwgV1RGTW92ZShhbHRlcm5hdGVEaXNwYXRjaGVyKSk7Cisg
ICAgX2NvbnRyb2xsZXItPmFwcGVuZEV4dHJhQWdlbnQoV1RGTW92ZShhbHRlcm5hdGVBZ2VudCkp
OworfQorCistIChpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+KWRhdGFiYXNl
SGFuZGxlcgoreworICAgIHJldHVybiBfZGF0YWJhc2VIYW5kbGVyOworfQorCitAZW5kCisKKwor
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0
ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lt
cG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1l
c3BhY2UgSW5zcGVjdG9yOworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNw
YXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJu
LXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKyNpbXBvcnQgPHd0Zi9QbGF0
Zm9ybS5oPgorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+
CisKKworQGNsYXNzIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I7CisKK3R5cGVkZWYgTlNfRU5V
TShOU0ludGVnZXIsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycykgeworICAgIFRl
c3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc1JlZCwKKyAgICBUZXN0UHJvdG9jb2xEYXRh
YmFzZVByaW1hcnlDb2xvcnNHcmVlbiwKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlD
b2xvcnNCbHVlLAorfTsKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29s
RGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvcikgeworICAgIFRl
c3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JD
eWFuLAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVy
c1ByaW50Q29sb3JNYWdlbnRhLAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9w
dGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JZZWxsb3csCisgICAgVGVzdFByb3RvY29sRGF0YWJh
c2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckJsYWNrLAorfTsKKworCisK
K3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFs
bE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IpIHsKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFz
ZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQ3lhbiwKKyAgICBUZXN0UHJv
dG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yTWFnZW50
YSwKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQ
cmludENvbG9yWWVsbG93LAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlv
bmFsUGFyYW1ldGVyc1ByaW50Q29sb3JCbGFjaywKK307CisKK3R5cGVkZWYgTlNfRU5VTShOU0lu
dGVnZXIsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJp
bnRDb2xvcikgeworICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJh
bWV0ZXJzUHJpbnRDb2xvckN5YW4sCisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9P
cHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yTWFnZW50YSwKKyAgICBUZXN0UHJvdG9jb2xEYXRh
YmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JZZWxsb3csCisgICAgVGVz
dFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQmxh
Y2ssCit9OworCisKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGF0
YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yKSB7CisgICAgVGVzdFBy
b3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQ3lhbiwK
KyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50
Q29sb3JNYWdlbnRhLAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQ
YXJhbWV0ZXJzUHJpbnRDb2xvclllbGxvdywKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JCbGFjaywKK307CisKK19fYXR0cmlidXRl
X18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xEYXRh
YmFzZUVycm9yIDogUldJUHJvdG9jb2xKU09OT2JqZWN0CistIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKKy0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3Qg
Kilqc29uT2JqZWN0OworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTWVzc2FnZTooTlNTdHJpbmcg
KiltZXNzYWdlIGNvZGU6KGludCljb2RlOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25h
dG9taWMsIGNvcHkpIE5TU3RyaW5nICptZXNzYWdlOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5
IChub25hdG9taWMsIGFzc2lnbikgaW50IGNvZGU7CitAZW5kCisKK0Bwcm90b2NvbCBUZXN0UHJv
dG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXIgPE5TT2JqZWN0PgorQG9wdGlvbmFsCistICh2b2lk
KWV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShO
U1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKE5T
QXJyYXkvKjxOU1N0cmluZz4qLyAqKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqKm5vdGVzLCBkb3Vi
bGUgKnRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqdmFsdWVzLCBSV0lQcm90b2Nv
bEpTT05PYmplY3QgKipwYXlsb2FkLCBpbnQgKmRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFi
YXNlRXJyb3IgKipzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzICpz
Y3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICoqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0
UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yICpw
cmludENvbG9yKSlzdWNjZXNzQ2FsbGJhY2sgY29sdW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmlu
Zz4qLyAqKiljb2x1bW5OYW1lcyBub3RlczooTlNTdHJpbmcgKiopbm90ZXMgdGltZXN0YW1wOihk
b3VibGUgKil0aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKiopdmFsdWVz
IHBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKilwYXlsb2FkIGRhdGFiYXNlSWQ6KGlu
dCAqKWRhdGFiYXNlSWQgc3FsRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKiopc3Fs
RXJyb3Igc2NyZWVuQ29sb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqKXNj
cmVlbkNvbG9yIGFsdGVybmF0ZUNvbG9yczooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKWFsdGVy
bmF0ZUNvbG9ycyBwcmludENvbG9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRp
b25hbFBhcmFtZXRlcnNQcmludENvbG9yICopcHJpbnRDb2xvcjsKKy0gKHZvaWQpZXhlY3V0ZU5v
T3B0aW9uYWxQYXJhbWV0ZXJzV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVy
cm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKShOU0FycmF5Lyo8TlNT
dHJpbmc+Ki8gKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAs
IFJXSVByb3RvY29sSlNPTk9iamVjdCAqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnBh
eWxvYWQsIGludCBkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpzcWxFcnJv
ciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzIHNjcmVlbkNvbG9yLCBOU0FycmF5
Lyo8TlNTdHJpbmc+Ki8gKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVj
dXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yIHByaW50Q29sb3IpKXN1Y2Nlc3NDYWxs
YmFjayBjb2x1bW5OYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMgbm90
ZXM6KE5TU3RyaW5nICopbm90ZXMgdGltZXN0YW1wOihkb3VibGUpdGltZXN0YW1wIHZhbHVlczoo
UldJUHJvdG9jb2xKU09OT2JqZWN0ICopdmFsdWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9i
amVjdCAqKXBheWxvYWQgZGF0YWJhc2VJZDooaW50KWRhdGFiYXNlSWQgc3FsRXJyb3I6KFRlc3RQ
cm90b2NvbERhdGFiYXNlRXJyb3IgKilzcWxFcnJvciBzY3JlZW5Db2xvcjooVGVzdFByb3RvY29s
RGF0YWJhc2VQcmltYXJ5Q29sb3JzKXNjcmVlbkNvbG9yIGFsdGVybmF0ZUNvbG9yczooTlNBcnJh
eS8qPE5TU3RyaW5nPiovICopYWx0ZXJuYXRlQ29sb3JzIHByaW50Q29sb3I6KFRlc3RQcm90b2Nv
bERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvcilwcmludENvbG9y
OworQGVuZAorCisKKworCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENv
bXBhdGliaWxpdHlPYmplY3RzLmg+CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKKwor
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFt
ZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisj
aW1wb3J0IDx3dGYvUGxhdGZvcm0uaD4KKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1w
b3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgorI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDx3dGYvSlNP
TlZhbHVlcy5oPgorCisKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgK
KworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJl
dHVybi1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI2ltcG9ydCA8d3RmL1BsYXRmb3JtLmg+CisKKyNpbXBvcnQgIlRlc3RQcm90b2Nv
bC5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5o
PgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1U
eXBlPgorT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3Ry
aW5nJiB2YWx1ZSk7CisKK2lubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9j
b2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgdmFsdWUpCit7CisgICAgc3dpdGNoKHZhbHVlKSB7Cisg
ICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNSZWQ6CisgICAgICAgIHJl
dHVybiAicmVkIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3Jz
R3JlZW46CisgICAgICAgIHJldHVybiAiZ3JlZW4iX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xE
YXRhYmFzZVByaW1hcnlDb2xvcnNCbHVlOgorICAgICAgICByZXR1cm4gImJsdWUiX3M7CisgICAg
fQorfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VQ
cmltYXJ5Q29sb3JzPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sK
KyAgICBpZiAodmFsdWUgPT0gInJlZCIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRh
YmFzZVByaW1hcnlDb2xvcnNSZWQ7CisgICAgaWYgKHZhbHVlID09ICJncmVlbiIpCisgICAgICAg
IHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNHcmVlbjsKKyAgICBpZiAo
dmFsdWUgPT0gImJsdWUiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VQcmlt
YXJ5Q29sb3JzQmx1ZTsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCitpbmxpbmUgU3Ry
aW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9u
YWxQYXJhbWV0ZXJzUHJpbnRDb2xvciB2YWx1ZSkKK3sKKyAgICBzd2l0Y2godmFsdWUpIHsKKyAg
ICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1By
aW50Q29sb3JDeWFuOgorICAgICAgICByZXR1cm4gImN5YW4iX3M7CisgICAgY2FzZSBUZXN0UHJv
dG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yTWFnZW50
YToKKyAgICAgICAgcmV0dXJuICJtYWdlbnRhIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0
YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvclllbGxvdzoKKyAgICAg
ICAgcmV0dXJuICJ5ZWxsb3ciX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQmxhY2s6CisgICAgICAgIHJldHVybiAi
YmxhY2siX3M7CisgICAgfQorfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgT3B0aW9uYWw8VGVzdFBy
b3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvcj4gZnJv
bVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09
ICJjeWFuIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9w
dGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JDeWFuOworICAgIGlmICh2YWx1ZSA9PSAibWFnZW50
YSIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25h
bFBhcmFtZXRlcnNQcmludENvbG9yTWFnZW50YTsKKyAgICBpZiAodmFsdWUgPT0gInllbGxvdyIp
CisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBh
cmFtZXRlcnNQcmludENvbG9yWWVsbG93OworICAgIGlmICh2YWx1ZSA9PSAiYmxhY2siKQorICAg
ICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0
ZXJzUHJpbnRDb2xvckJsYWNrOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKKworCitp
bmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRl
QWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvciB2YWx1ZSkKK3sKKyAgICBzd2l0Y2godmFs
dWUpIHsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFy
YW1ldGVyc1ByaW50Q29sb3JDeWFuOgorICAgICAgICByZXR1cm4gImN5YW4iX3M7CisgICAgY2Fz
ZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENv
bG9yTWFnZW50YToKKyAgICAgICAgcmV0dXJuICJtYWdlbnRhIl9zOworICAgIGNhc2UgVGVzdFBy
b3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvclllbGxv
dzoKKyAgICAgICAgcmV0dXJuICJ5ZWxsb3ciX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRh
YmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQmxhY2s6CisgICAgICAg
IHJldHVybiAiYmxhY2siX3M7CisgICAgfQorfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgT3B0aW9u
YWw8VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRD
b2xvcj4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgaWYg
KHZhbHVlID09ICJjeWFuIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhl
Y3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JDeWFuOworICAgIGlmICh2YWx1ZSA9
PSAibWFnZW50YSIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVB
bGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yTWFnZW50YTsKKyAgICBpZiAodmFsdWUgPT0g
InllbGxvdyIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxP
cHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yWWVsbG93OworICAgIGlmICh2YWx1ZSA9PSAiYmxh
Y2siKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9u
YWxQYXJhbWV0ZXJzUHJpbnRDb2xvckJsYWNrOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9
CisKK2lubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IgdmFsdWUpCit7CisgICAgc3dpdGNo
KHZhbHVlKSB7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFs
UGFyYW1ldGVyc1ByaW50Q29sb3JDeWFuOgorICAgICAgICByZXR1cm4gImN5YW4iX3M7CisgICAg
Y2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50
Q29sb3JNYWdlbnRhOgorICAgICAgICByZXR1cm4gIm1hZ2VudGEiX3M7CisgICAgY2FzZSBUZXN0
UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JZZWxs
b3c6CisgICAgICAgIHJldHVybiAieWVsbG93Il9zOworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0
YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQmxhY2s6CisgICAgICAg
IHJldHVybiAiYmxhY2siX3M7CisgICAgfQorfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgT3B0aW9u
YWw8VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENv
bG9yPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAo
dmFsdWUgPT0gImN5YW4iKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVj
dXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQ3lhbjsKKyAgICBpZiAodmFsdWUgPT0g
Im1hZ2VudGEiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9P
cHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yTWFnZW50YTsKKyAgICBpZiAodmFsdWUgPT0gInll
bGxvdyIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlv
bmFsUGFyYW1ldGVyc1ByaW50Q29sb3JZZWxsb3c7CisgICAgaWYgKHZhbHVlID09ICJibGFjayIp
CisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFy
YW1ldGVyc1ByaW50Q29sb3JCbGFjazsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCisK
KworaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbERhdGFiYXNlRXhl
Y3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvciB2YWx1ZSkKK3sKKyAgICBzd2l0Y2go
dmFsdWUpIHsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQ
YXJhbWV0ZXJzUHJpbnRDb2xvckN5YW46CisgICAgICAgIHJldHVybiAiY3lhbiJfczsKKyAgICBj
YXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRD
b2xvck1hZ2VudGE6CisgICAgICAgIHJldHVybiAibWFnZW50YSJfczsKKyAgICBjYXNlIFRlc3RQ
cm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvclllbGxv
dzoKKyAgICAgICAgcmV0dXJuICJ5ZWxsb3ciX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRh
YmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JCbGFjazoKKyAgICAgICAg
cmV0dXJuICJibGFjayJfczsKKyAgICB9Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBPcHRpb25h
bDxUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29s
b3I+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIGlmICh2
YWx1ZSA9PSAiY3lhbiIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JDeWFuOworICAgIGlmICh2YWx1ZSA9PSAi
bWFnZW50YSIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09w
dGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JNYWdlbnRhOworICAgIGlmICh2YWx1ZSA9PSAieWVs
bG93IikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9u
YWxQYXJhbWV0ZXJzUHJpbnRDb2xvclllbGxvdzsKKyAgICBpZiAodmFsdWUgPT0gImJsYWNrIikK
KyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJh
bWV0ZXJzUHJpbnRDb2xvckJsYWNrOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9w
dGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xU
eXBlUGFyc2VyLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0
UHJpdmF0ZS5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW50ZXJmYWNlIFRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoRGF0YWJhc2VEb21haW4pCisKKysgKHZvaWQpX3Bh
cnNlRGF0YWJhc2VJZDooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxv
YWQ7CisrICh2b2lkKV9wYXJzZVByaW1hcnlDb2xvcnM6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZy
b21QYXlsb2FkOihpZClwYXlsb2FkOworKyAodm9pZClfcGFyc2VDb2xvckxpc3Q6KE5TQXJyYXkv
KjxOU1N0cmluZz4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZv
aWQpX3BhcnNlRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKiopb3V0VmFsdWUgZnJv
bVBheWxvYWQ6KGlkKXBheWxvYWQ7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucyAoRGF0YWJhc2VEb21haW4pCisKKysgKHZvaWQpX3BhcnNlRGF0
YWJhc2VJZDooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sK
KyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU051bWJlciBjbGFz
c10pOworICAgICpvdXRWYWx1ZSA9IChOU051bWJlciAqKXBheWxvYWQ7Cit9CisKKysgKHZvaWQp
X3BhcnNlUHJpbWFyeUNvbG9yczooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlk
KXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtO
U1N0cmluZyBjbGFzc10pOworICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFy
eUNvbG9ycz4gcmVzdWx0ID0gSW5zcGVjdG9yOjpmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3Rv
Y29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzPihwYXlsb2FkKTsKKyAgICBUSFJPV19FWENFUFRJT05f
Rk9SX0JBRF9FTlVNX1ZBTFVFKHJlc3VsdCwgQCJQcmltYXJ5Q29sb3JzIik7CisgICAgKm91dFZh
bHVlID0gQChyZXN1bHQudmFsdWUoKSk7Cit9CisKKysgKHZvaWQpX3BhcnNlQ29sb3JMaXN0OihO
U0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQK
K3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0FycmF5Lyo8
TlNTdHJpbmc+Ki8gY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSAoTlNBcnJheS8qPE5TU3RyaW5n
PiovICopcGF5bG9hZDsKK30KKworKyAodm9pZClfcGFyc2VFcnJvcjooVGVzdFByb3RvY29sRGF0
YWJhc2VFcnJvciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10p
OworICAgICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBhbGxvY10gaW5p
dFdpdGhQYXlsb2FkOnBheWxvYWRdOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0
aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwu
aCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDxX
ZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorI2ltcG9ydCA8d3Rm
L0Fzc2VydGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVz
cGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xEYXRhYmFzZUVy
cm9yCisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9u
YXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVy
IGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
UkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAIm1lc3NhZ2UiXSwgQCJtZXNzYWdlIik7CisgICAg
c2VsZi5tZXNzYWdlID0gcGF5bG9hZFtAIm1lc3NhZ2UiXTsKKworICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImNvZGUiXSwgQCJjb2RlIik7CisgICAg
c2VsZi5jb2RlID0gW3BheWxvYWRbQCJjb2RlIl0gaW50ZWdlclZhbHVlXTsKKworICAgIHJldHVy
biBzZWxmOworfQorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVBy
b3RvY29sSlNPTk9iamVjdCAqKW9iamVjdAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5p
dFdpdGhKU09OT2JqZWN0OltvYmplY3QgdG9KU09OT2JqZWN0XS5nZXQoKV0pKQorICAgICAgICBy
ZXR1cm4gbmlsOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0
V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBjb2RlOihpbnQpY29kZQoreworICAgIGlm
ICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShtZXNzYWdlLCBAIm1lc3NhZ2UiKTsK
KworICAgIHNlbGYubWVzc2FnZSA9IG1lc3NhZ2U7CisgICAgc2VsZi5jb2RlID0gY29kZTsKKwor
ICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXNldE1lc3NhZ2U6KE5TU3RyaW5nICopbWVz
c2FnZQoreworICAgIFtzdXBlciBzZXRTdHJpbmc6bWVzc2FnZSBmb3JLZXk6QCJtZXNzYWdlIl07
Cit9CisKKy0gKE5TU3RyaW5nICopbWVzc2FnZQoreworICAgIHJldHVybiBbc3VwZXIgc3RyaW5n
Rm9yS2V5OkAibWVzc2FnZSJdOworfQorCistICh2b2lkKXNldENvZGU6KGludCljb2RlCit7Cisg
ICAgW3N1cGVyIHNldEludGVnZXI6Y29kZSBmb3JLZXk6QCJjb2RlIl07Cit9CisKKy0gKGludClj
b2RlCit7CisgICAgcmV0dXJuIFtzdXBlciBpbnRlZ2VyRm9yS2V5OkAiY29kZSJdOworfQorCitA
ZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2Rl
ZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RlZmluaXRpb25zLXdpdGgt
bWFjLXBsYXRmb3JtLmpzb24tcmVzdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwLi43NzBlYWIwMTljYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kZWZpbml0aW9ucy13aXRoLW1h
Yy1wbGF0Zm9ybS5qc29uLXJlc3VsdApAQCAtMCwwICsxLDEyMzcgQEAKKyMjIyBCZWdpbiBGaWxl
OiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMuaW4KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCisvLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKy8vIE5ldHdvcmsKK0luc3BlY3RvckJh
Y2tlbmQucmVnaXN0ZXJEb21haW4oIk5ldHdvcmsiLCBudWxsKTsKKyNpZiBQTEFURk9STShNQUMp
CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiTmV0d29yay5sb2FkUmVzb3VyY2Ui
LCBudWxsLCBbXSwgW10pOworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKKyNpZiBQTEFURk9STShN
QUMpCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnQoIk5ldHdvcmsucmVzb3VyY2VMb2Fk
ZWQiLCBudWxsLCBbXSk7CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorSW5zcGVjdG9yQmFja2Vu
ZC5yZWdpc3Rlck5ldHdvcmtEaXNwYXRjaGVyID0gSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRp
c3BhdGNoZXIuYmluZChJbnNwZWN0b3JCYWNrZW5kLCAiTmV0d29yayIpOworSW5zcGVjdG9yQmFj
a2VuZC5hY3RpdmF0ZURvbWFpbigiTmV0d29yayIsIG51bGwpOworIyMjIEVuZCBGaWxlOiBJbnNw
ZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMuaW4KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5h
dGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvUGxh
dGZvcm0uaD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQor
CisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitj
bGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdm9pZCBzZXRC
YWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikg
eyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQorICAgIEJhY2tl
bmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2Vu
ZERpc3BhdGNoZXIuZ2V0KCk7IH0KK3ByaXZhdGU6CisgICAgUmVmUHRyPEJhY2tlbmREaXNwYXRj
aGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOworfTsKKworCitjbGFzcyBBbHRlcm5hdGVOZXR3b3Jr
QmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewor
cHVibGljOgorICAgIHZpcnR1YWwgfkFsdGVybmF0ZU5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcigp
IHsgfQorI2lmIFBMQVRGT1JNKE1BQykKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlKGxv
bmcgY2FsbElkKSA9IDA7CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorfTsKKworfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKKyMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVy
cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5q
c29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpbmNsdWRlICJUZXN0UHJvdG9j
b2xPYmplY3RzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNl
IEluc3BlY3RvciB7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCisjaWYgRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCitjbGFzcyBBbHRlcm5hdGVOZXR3b3Jr
QmFja2VuZERpc3BhdGNoZXI7CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCisKK2NsYXNzIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewor
cHVibGljOgorI2lmIFBMQVRGT1JNKE1BQykKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNl
KEVycm9yU3RyaW5nJikgPSAwOworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKK3Byb3RlY3RlZDoK
KyAgICB2aXJ0dWFsIH5OZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7Cit9OworCitj
bGFzcyBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFs
QmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8TmV0d29ya0JhY2tl
bmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBOZXR3b3JrQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyKik7CisgICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29u
c3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkgZmluYWw7Citw
cml2YXRlOgorI2lmIFBMQVRGT1JNKE1BQykKKyAgICB2b2lkIGxvYWRSZXNvdXJjZShsb25nIHJl
cXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyNlbmRpZiAvLyBQ
TEFURk9STShNQUMpCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
CitwdWJsaWM6CisgICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZU5ldHdv
cmtCYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVybmF0ZURp
c3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9Citwcml2YXRlOgorICAgIEFsdGVybmF0
ZU5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlciogbV9hbHRlcm5hdGVEaXNwYXRjaGVyIHsgbnVsbHB0
ciB9OworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQor
cHJpdmF0ZToKKyAgICBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXIm
LCBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgTmV0d29ya0JhY2tlbmRE
aXNwYXRjaGVySGFuZGxlciogbV9hZ2VudCB7IG51bGxwdHIgfTsKK307CisKK30gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKwor
IyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYv
SlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQorI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIK
KyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKK05ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5O
ZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9CisKK1JlZjxOZXR3b3JrQmFja2Vu
ZERpc3BhdGNoZXI+IE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEJhY2tlbmREaXNw
YXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxl
ciogYWdlbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTmV0d29ya0JhY2tlbmREaXNw
YXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOworfQorCitOZXR3b3JrQmFja2VuZERp
c3BhdGNoZXI6Ok5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFj
a2VuZERpc3BhdGNoZXIsIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQor
ICAgIDogU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCisg
ICAgLCBtX2FnZW50KGFnZW50KQoreworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVy
RGlzcGF0Y2hlckZvckRvbWFpbigiTmV0d29yayJfcywgdGhpcyk7Cit9CisKK3ZvaWQgTmV0d29y
a0JhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5n
JiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKK3sKKyAgICBSZWY8TmV0d29y
a0JhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKKworICAgIFJlZlB0cjxKU09OOjpP
YmplY3Q+IHBhcmFtZXRlcnM7CisgICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBh
cmFtZXRlcnMpOworCisjaWYgUExBVEZPUk0oTUFDKQorICAgIGlmIChtZXRob2QgPT0gImxvYWRS
ZXNvdXJjZSIpIHsKKyAgICAgICAgbG9hZFJlc291cmNlKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJh
bWV0ZXJzKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYgLy8gUExBVEZPUk0oTUFD
KQorCisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5k
RGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yay4iICsgbWV0aG9kICsgIicgd2Fz
IG5vdCBmb3VuZCIpOworfQorCisjaWYgUExBVEZPUk0oTUFDKQordm9pZCBOZXR3b3JrQmFja2Vu
ZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9i
amVjdD4mJikKK3sKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
KyAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlz
cGF0Y2hlci0+bG9hZFJlc291cmNlKHJlcXVlc3RJZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyAg
ICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZShlcnJvcik7CisK
KyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5z
ZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKKyAgICBlbHNl
CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2Vu
ZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Cit9CisjZW5kaWYgLy8g
UExBVEZPUk0oTUFDKQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxl
OiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250
ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmlu
aXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0u
aD4KKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDx3dGYvSlNP
TlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKKworY2xhc3MgRnJvbnRlbmRSb3V0ZXI7CisKK2NsYXNzIE5ldHdvcmtGcm9u
dGVuZERpc3BhdGNoZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgor
ICAgIE5ldHdvcmtGcm9udGVuZERpc3BhdGNoZXIoRnJvbnRlbmRSb3V0ZXImIGZyb250ZW5kUm91
dGVyKSA6IG1fZnJvbnRlbmRSb3V0ZXIoZnJvbnRlbmRSb3V0ZXIpIHsgfQorI2lmIFBMQVRGT1JN
KE1BQykKKyAgICB2b2lkIHJlc291cmNlTG9hZGVkKCk7CisjZW5kaWYgLy8gUExBVEZPUk0oTUFD
KQorcHJpdmF0ZToKKyAgICBGcm9udGVuZFJvdXRlciYgbV9mcm9udGVuZFJvdXRlcjsKK307CisK
K30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNw
YXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1w
bGF0Zm9ybS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5o
IgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Igewor
CisjaWYgUExBVEZPUk0oTUFDKQordm9pZCBOZXR3b3JrRnJvbnRlbmREaXNwYXRjaGVyOjpyZXNv
dXJjZUxvYWRlZCgpCit7CisgICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJf
cywgIk5ldHdvcmsucmVzb3VyY2VMb2FkZWQiX3MpOworCisgICAgbV9mcm9udGVuZFJvdXRlci5z
ZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKK30KKyNlbmRpZiAvLyBQTEFU
Rk9STShNQUMpCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRl
c3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
T2JqZWN0cy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMt
d2l0aC1tYWMtcGxhdGZvcm0uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgorI2luY2x1
ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFt
ZXNwYWNlIFByb3RvY29sIHsKKworCisKKy8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgorbmFtZXNw
YWNlIE5ldHdvcmsgeworI2lmIFBMQVRGT1JNKE1BQykKK2NsYXNzIE5ldHdvcmtFcnJvcjsKKyNl
bmRpZiAvLyBQTEFURk9STShNQUMpCit9IC8vIE5ldHdvcmsKKy8vIEVuZCBvZiBmb3J3YXJkIGRl
Y2xhcmF0aW9ucy4KKworCisKKworbmFtZXNwYWNlIE5ldHdvcmsgeworCisjaWYgUExBVEZPUk0o
TUFDKQorY2xhc3MgTmV0d29ya0Vycm9yIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgeworcHVi
bGljOgorICAgIGVudW0geworICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCisgICAgICAgIE1lc3Nh
Z2VTZXQgPSAxIDw8IDAsCisgICAgICAgIENvZGVTZXQgPSAxIDw8IDEsCisgICAgICAgIEFsbEZp
ZWxkc1NldCA9IChNZXNzYWdlU2V0IHwgQ29kZVNldCkKKyAgICB9OworCisgICAgdGVtcGxhdGU8
aW50IFNUQVRFPgorICAgIGNsYXNzIEJ1aWxkZXIgeworICAgIHByaXZhdGU6CisgICAgICAgIFJl
ZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVzdWx0OworCisgICAgICAgIHRlbXBsYXRlPGludCBTVEVQ
PiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlz
KTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXIoUmVmPC8qTmV0d29ya0Vycm9yKi9KU09O
OjpPYmplY3Q+JiYgb2JqZWN0KQorICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVj
dCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmll
bGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAgICAgICB9Cisg
ICAgICAgIGZyaWVuZCBjbGFzcyBOZXR3b3JrRXJyb3I7CisgICAgcHVibGljOgorCisgICAgICAg
IEJ1aWxkZXI8U1RBVEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIHZh
bHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTWVz
c2FnZVNldCksIHByb3BlcnR5X21lc3NhZ2VfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldFN0cmluZygibWVzc2FnZSJfcywgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxNZXNzYWdlU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxT
VEFURSB8IENvZGVTZXQ+JiBzZXRDb2RlKGludCB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENvZGVTZXQpLCBwcm9wZXJ0eV9jb2RlX2FscmVh
ZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2VyKCJjb2RlIl9zLCB2YWx1
ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvZGVTZXQ+KCk7CisgICAgICAgIH0K
KworICAgICAgICBSZWY8TmV0d29ya0Vycm9yPiByZWxlYXNlKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90
X3JlYWR5KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihOZXR3b3JrRXJyb3Ip
ID09IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7CisKKyAgICAgICAgICAgIFJl
ZjxKU09OOjpPYmplY3Q+IGpzb25SZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOwor
ICAgICAgICAgICAgYXV0byByZXN1bHQgPSBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxO
ZXR3b3JrRXJyb3I+Kj4oJmpzb25SZXN1bHQpKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyoKKyAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0
b3I6CisgICAgICogUmVmPE5ldHdvcmtFcnJvcj4gcmVzdWx0ID0gTmV0d29ya0Vycm9yOjpjcmVh
dGUoKQorICAgICAqICAgICAuc2V0TWVzc2FnZSguLi4pCisgICAgICogICAgIC5zZXRDb2RlKC4u
LikKKyAgICAgKiAgICAgLnJlbGVhc2UoKTsKKyAgICAgKi8KKyAgICBzdGF0aWMgQnVpbGRlcjxO
b0ZpZWxkc1NldD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmll
bGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICB9Cit9OworI2VuZGlmIC8vIFBM
QVRGT1JNKE1BQykKKworfSAvLyBOZXR3b3JrCisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90b2Nv
bAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
T2JqZWN0cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRm
b3JtLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKworI2lu
Y2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwor
bmFtZXNwYWNlIEluc3BlY3RvciB7CisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKworCit9IC8v
IG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPHd0Zi9QbGF0Zm9ybS5oPgorCisj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXJzLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCitAcHJvdG9jb2wgVGVzdFByb3Rv
Y29sTmV0d29ya0RvbWFpbkhhbmRsZXI7CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKK2Ns
YXNzIE9iakNJbnNwZWN0b3JOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMg
QWx0ZXJuYXRlTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKK3B1YmxpYzoKKyAgICBPYmpDSW5zcGVjdG9yTmV0d29ya0JhY2tlbmREaXNwYXRj
aGVyKGlkPFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVs
ZWdhdGUgPSBoYW5kbGVyOyB9CisjaWYgUExBVEZPUk0oTUFDKQorICAgIHZvaWQgbG9hZFJlc291
cmNlKGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCitwcml2
YXRlOgorICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluSGFuZGxlcj4+
IG1fZGVsZWdhdGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNp
bXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSAiVGVz
dFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9y
IHsKKworI2lmIFBMQVRGT1JNKE1BQykKK3ZvaWQgT2JqQ0luc3BlY3Rvck5ldHdvcmtCYWNrZW5k
RGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkKQoreworICAgIGlmICghW21f
ZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2VXaXRoRXJy
b3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpN
ZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrLmxvYWRSZXNvdXJjZScgd2FzIG5vdCBmb3VuZCJfcyk7
CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAq
ZXJyb3IpIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJv
cihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgIH07CisK
KyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigp
LT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7
CisgICAgfTsKKworICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZVdpdGhFcnJvckNhbGxiYWNr
OmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107Cit9CisjZW5k
aWYgLy8gUExBVEZPUk0oTUFDKQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8d3RmL1BsYXRmb3JtLmg+
CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KKworX19hdHRyaWJ1dGVf
XygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZp
Z3VyYXRpb24gOiBOU09iamVjdAorQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVy
PXNldE5ldHdvcmtIYW5kbGVyOikgaWQ8VGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkhhbmRsZXI+
IG5ldHdvcmtIYW5kbGVyOworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBUZXN0UHJv
dG9jb2xOZXR3b3JrRG9tYWluRXZlbnREaXNwYXRjaGVyICpuZXR3b3JrRXZlbnREaXNwYXRjaGVy
OworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisK
KyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJU
ZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVy
bmFsLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+CisjaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5o
PgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+
CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJv
dG9jb2xDb25maWd1cmF0aW9uCit7CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVy
KiBfY29udHJvbGxlcjsKKyAgICBpZDxUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluSGFuZGxlcj4g
X25ldHdvcmtIYW5kbGVyOworICAgIFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5FdmVudERpc3Bh
dGNoZXIgKl9uZXR3b3JrRXZlbnREaXNwYXRjaGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xs
ZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAg
cmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBj
b250cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAg
ICBbX25ldHdvcmtIYW5kbGVyIHJlbGVhc2VdOworICAgIFtfbmV0d29ya0V2ZW50RGlzcGF0Y2hl
ciByZWxlYXNlXTsKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0gKHZvaWQpc2V0TmV0d29y
a0hhbmRsZXI6KGlkPFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5IYW5kbGVyPiloYW5kbGVyCit7
CisgICAgaWYgKGhhbmRsZXIgPT0gX25ldHdvcmtIYW5kbGVyKQorICAgICAgICByZXR1cm47CisK
KyAgICBbX25ldHdvcmtIYW5kbGVyIHJlbGVhc2VdOworICAgIF9uZXR3b3JrSGFuZGxlciA9IFto
YW5kbGVyIHJldGFpbl07CisKKyAgICBhdXRvIGFsdGVybmF0ZURpc3BhdGNoZXIgPSBtYWtlVW5p
cXVlPE9iakNJbnNwZWN0b3JOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI+KGhhbmRsZXIpOworICAg
IGF1dG8gYWx0ZXJuYXRlQWdlbnQgPSBtYWtlVW5pcXVlPEFsdGVybmF0ZURpc3BhdGNoYWJsZUFn
ZW50PE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlciwgQWx0ZXJuYXRlTmV0d29ya0JhY2tlbmREaXNw
YXRjaGVyPj4oIk5ldHdvcmsiX3MsICpfY29udHJvbGxlciwgV1RGTW92ZShhbHRlcm5hdGVEaXNw
YXRjaGVyKSk7CisgICAgX2NvbnRyb2xsZXItPmFwcGVuZEV4dHJhQWdlbnQoV1RGTW92ZShhbHRl
cm5hdGVBZ2VudCkpOworfQorCistIChpZDxUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluSGFuZGxl
cj4pbmV0d29ya0hhbmRsZXIKK3sKKyAgICByZXR1cm4gX25ldHdvcmtIYW5kbGVyOworfQorCist
IChUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluRXZlbnREaXNwYXRjaGVyICopbmV0d29ya0V2ZW50
RGlzcGF0Y2hlcgoreworICAgIGlmICghX25ldHdvcmtFdmVudERpc3BhdGNoZXIpCisgICAgICAg
IF9uZXR3b3JrRXZlbnREaXNwYXRjaGVyID0gW1tUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluRXZl
bnREaXNwYXRjaGVyIGFsbG9jXSBpbml0V2l0aENvbnRyb2xsZXI6X2NvbnRyb2xsZXJdOworICAg
IHJldHVybiBfbmV0d29ya0V2ZW50RGlzcGF0Y2hlcjsKK30KKworQGVuZAorCisKKyMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJu
YWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0
IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1w
bGVtZW50YXRpb24gVGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkV2ZW50RGlzcGF0Y2hlcgorewor
ICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Cit9CisKKy0g
KGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29u
dHJvbGxlciopY29udHJvbGxlcgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYg
KCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAg
ICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZv
aWQpcmVzb3VyY2VMb2FkZWQKK3sKKyAgICBjb25zdCBGcm9udGVuZFJvdXRlciYgcm91dGVyID0g
X2NvbnRyb2xsZXItPmZyb250ZW5kUm91dGVyKCk7CisKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiBq
c29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAganNvbk1lc3NhZ2UtPnNl
dFN0cmluZygibWV0aG9kIl9zLCAiTmV0d29yay5yZXNvdXJjZUxvYWRlZCJfcyk7CisgICAgcm91
dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworfQorCitAZW5kCisK
KworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9u
Lmg+CisjaW1wb3J0IDx3dGYvUGxhdGZvcm0uaD4KKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JX
SVByb3RvY29sSlNPTk9iamVjdC5oPgorCisKKyNpZiBQTEFURk9STShNQUMpCitAY2xhc3MgVGVz
dFByb3RvY29sTmV0d29ya0Vycm9yOworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKKworCisKKyNp
ZiBQTEFURk9STShNQUMpCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkK
K0BpbnRlcmZhY2UgVGVzdFByb3RvY29sTmV0d29ya0Vycm9yIDogUldJUHJvdG9jb2xKU09OT2Jq
ZWN0CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJp
bmcgKiwgaWQ+ICopcGF5bG9hZDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2Jq
ZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OworLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlIGNvZGU6KGludCljb2RlOworLyog
cmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICptZXNzYWdl
OworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgaW50IGNvZGU7
CitAZW5kCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorCitAcHJvdG9jb2wgVGVzdFByb3RvY29s
TmV0d29ya0RvbWFpbkhhbmRsZXIgPE5TT2JqZWN0PgorQG9wdGlvbmFsCisjaWYgUExBVEZPUk0o
TUFDKQorLSAodm9pZClsb2FkUmVzb3VyY2VXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0
cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKHZvaWQp
KXN1Y2Nlc3NDYWxsYmFjazsKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCitAZW5kCisKK19fYXR0
cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9j
b2xOZXR3b3JrRG9tYWluRXZlbnREaXNwYXRjaGVyIDogTlNPYmplY3QKKy0gKHZvaWQpcmVzb3Vy
Y2VMb2FkZWQ7CitAZW5kCisKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVp
bGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5o
CisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDx3dGYv
UGxhdGZvcm0uaD4KKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJv
dG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVu
dGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgor
CitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5FdmVudERpc3BhdGNoZXIgKFBy
aXZhdGUpCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihJbnNwZWN0b3I6OkF1
Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcjsKK0BlbmQKKworCisjIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgorLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDx3dGYvUGxhdGZvcm0uaD4KKworI2lt
cG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xB
cnJheUNvbnZlcnNpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBPYmpDRW51bVR5cGU+CitPcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2Nv
bFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisKKyMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIK
KyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rv
ci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNw
ZWN0b3I7CisKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChOZXR3b3Jr
RG9tYWluKQorCisjaWYgUExBVEZPUk0oTUFDKQorKyAodm9pZClfcGFyc2VOZXR3b3JrRXJyb3I6
KFRlc3RQcm90b2NvbE5ldHdvcmtFcnJvciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5
bG9hZDsKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCisKK0BlbmQKKworQGltcGxlbWVudGF0aW9u
IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoTmV0d29ya0RvbWFpbikKKworI2lmIFBMQVRG
T1JNKE1BQykKKysgKHZvaWQpX3BhcnNlTmV0d29ya0Vycm9yOihUZXN0UHJvdG9jb2xOZXR3b3Jr
RXJyb3IgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19F
WENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKKyAg
ICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbE5ldHdvcmtFcnJvciBhbGxvY10gaW5pdFdpdGhQ
YXlsb2FkOnBheWxvYWRdOworfQorI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKKworQGVuZAorCisK
KyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJu
YWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0
IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorI2ltcG9ydCA8
d3RmL0Fzc2VydGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5h
bWVzcGFjZSBJbnNwZWN0b3I7CisKKyNpZiBQTEFURk9STShNQUMpCitAaW1wbGVtZW50YXRpb24g
VGVzdFByb3RvY29sTmV0d29ya0Vycm9yCisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxv
YWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQKK3sKKyAg
ICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAIm1lc3NhZ2Ui
XSwgQCJtZXNzYWdlIik7CisgICAgc2VsZi5tZXNzYWdlID0gcGF5bG9hZFtAIm1lc3NhZ2UiXTsK
KworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImNv
ZGUiXSwgQCJjb2RlIik7CisgICAgc2VsZi5jb2RlID0gW3BheWxvYWRbQCJjb2RlIl0gaW50ZWdl
clZhbHVlXTsKKworICAgIHJldHVybiBzZWxmOworfQorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
UHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9iamVjdAoreworICAgIGlm
ICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmplY3QgdG9KU09OT2JqZWN0
XS5nZXQoKV0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisK
Ky0gKGluc3RhbmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBjb2Rl
OihpbnQpY29kZQoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICBy
ZXR1cm4gbmlsOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWSht
ZXNzYWdlLCBAIm1lc3NhZ2UiKTsKKworICAgIHNlbGYubWVzc2FnZSA9IG1lc3NhZ2U7CisgICAg
c2VsZi5jb2RlID0gY29kZTsKKworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXNldE1l
c3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZQoreworICAgIFtzdXBlciBzZXRTdHJpbmc6bWVzc2Fn
ZSBmb3JLZXk6QCJtZXNzYWdlIl07Cit9CisKKy0gKE5TU3RyaW5nICopbWVzc2FnZQoreworICAg
IHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAibWVzc2FnZSJdOworfQorCistICh2b2lkKXNl
dENvZGU6KGludCljb2RlCit7CisgICAgW3N1cGVyIHNldEludGVnZXI6Y29kZSBmb3JLZXk6QCJj
b2RlIl07Cit9CisKKy0gKGludCljb2RlCit7CisgICAgcmV0dXJuIFtzdXBlciBpbnRlZ2VyRm9y
S2V5OkAiY29kZSJdOworfQorCitAZW5kCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorCisKKyMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW4tZGVidWdn
YWJsZVR5cGVzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbi1yZXN1bHQK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmIzNWY0ODg2MTI0Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V4cGVjdGVkL2RvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbi1yZXN1bHQKQEAgLTAsMCAr
MSwxMDQ2IEBACisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzLmlu
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLWRlYnVnZ2FibGVUeXBl
cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKy8vIERv
bWFpbgorSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiRG9tYWluIiwgbnVsbCk7CitJ
bnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiRG9tYWluLkNvbW1hbmQiLCBudWxsLCBb
XSwgW10pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckV2ZW50KCJEb21haW4uRXZlbnQiLCBu
dWxsLCBbXSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluRGlzcGF0Y2hlciA9IElu
c3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEaXNwYXRjaGVyLmJpbmQoSW5zcGVjdG9yQmFja2VuZCwg
IkRvbWFpbiIpOworSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiRG9tYWluIiwgWyJ3
ZWItcGFnZSJdKTsKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzLmlu
CisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJsZVR5cGVzLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIK
KyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisKK25h
bWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7
CitwdWJsaWM6CisgICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERp
c3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShk
aXNwYXRjaGVyKTsgfQorICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigp
IGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KK3ByaXZhdGU6Cisg
ICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOworfTsKKwor
CitjbGFzcyBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5h
dGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+QWx0ZXJuYXRlRG9t
YWluQmFja2VuZERpc3BhdGNoZXIoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChsb25n
IGNhbGxJZCkgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAv
LyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyMjIyBFbmQgRmlsZTog
VGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0
QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBk
b21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4K
KworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJy
b3JTdHJpbmc7CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
K2NsYXNzIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyOworI2VuZGlmIC8vIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCitjbGFzcyBEb21haW5CYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBDb21tYW5kKEVy
cm9yU3RyaW5nJikgPSAwOworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgfkRvbWFpbkJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlcigpOworfTsKKworY2xhc3MgRG9tYWluQmFja2VuZERpc3BhdGNoZXIg
ZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgor
ICAgIHN0YXRpYyBSZWY8RG9tYWluQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlz
cGF0Y2hlciYsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIHZvaWQgZGlz
cGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2Jq
ZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOworcHJpdmF0ZToKKyAgICB2b2lkIENvbW1hbmQobG9uZyBy
ZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisjaWYgRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCitwdWJsaWM6CisgICAgdm9pZCBzZXRB
bHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKiBhbHRl
cm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3Bh
dGNoZXI7IH0KK3ByaXZhdGU6CisgICAgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIq
IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciB7IG51bGxwdHIgfTsKKyNlbmRpZiAvLyBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK3ByaXZhdGU6CisgICAgRG9tYWluQmFja2Vu
ZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXIqKTsKKyAgICBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQgeyBu
dWxscHRyIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTog
VGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERp
c3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1k
ZWJ1Z2dhYmxlVHlwZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0
ZXIuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRl
c3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK0RvbWFpbkJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlcjo6fkRvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQor
CitSZWY8RG9tYWluQmFja2VuZERpc3BhdGNoZXI+IERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpj
cmVhdGUoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBEb21haW5CYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERv
bWFpbkJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOworfQorCitE
b21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6RG9tYWluQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERp
c3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIqIGFnZW50KQorICAgIDogU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERp
c3BhdGNoZXIpCisgICAgLCBtX2FnZW50KGFnZW50KQoreworICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbigiRG9tYWluIl9zLCB0aGlzKTsKK30KKwor
dm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNv
bnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCit7CisgICAg
UmVmPERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKKworICAgIFJlZlB0
cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7CisgICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJh
bXMiX3MsIHBhcmFtZXRlcnMpOworCisgICAgaWYgKG1ldGhvZCA9PSAiQ29tbWFuZCIpIHsKKyAg
ICAgICAgQ29tbWFuZChyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xF
cnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRG9tYWluLiIgKyBtZXRo
b2QgKyAiJyB3YXMgbm90IGZvdW5kIik7Cit9CisKK3ZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNo
ZXI6OkNvbW1hbmQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCit7Cisj
aWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisgICAgaWYgKG1fYWx0
ZXJuYXRlRGlzcGF0Y2hlcikgeworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPkNvbW1h
bmQocmVxdWVzdElkKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUo
SU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworICAgIEVycm9yU3RyaW5nIGVycm9y
OworICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
CisgICAgbV9hZ2VudC0+Q29tbWFuZChlcnJvcik7CisKKyAgICBpZiAoIWVycm9yLmxlbmd0aCgp
KQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBX
VEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2VuZERpc3Bh
dGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9y
LCBXVEZNb3ZlKGVycm9yKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMg
RW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBU
ZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3Jt
Lmg+CisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8d3RmL0pT
T05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNl
IEluc3BlY3RvciB7CisKK2NsYXNzIEZyb250ZW5kUm91dGVyOworCitjbGFzcyBEb21haW5Gcm9u
dGVuZERpc3BhdGNoZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgor
ICAgIERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcihGcm9udGVuZFJvdXRlciYgZnJvbnRlbmRSb3V0
ZXIpIDogbV9mcm9udGVuZFJvdXRlcihmcm9udGVuZFJvdXRlcikgeyB9CisgICAgdm9pZCBFdmVu
dCgpOworcHJpdmF0ZToKKyAgICBGcm9udGVuZFJvdXRlciYgbV9mcm9udGVuZFJvdXRlcjsKK307
CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmRE
aXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5j
cHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJsZVR5
cGVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCisK
KyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3Zv
aWQgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVyOjpFdmVudCgpCit7CisgICAgUmVmPEpTT046Ok9i
amVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGpzb25NZXNz
YWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7CisKKyAgICBtX2Zy
b250ZW5kUm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmRE
aXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMu
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25z
Lmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFByb3RvY29sIHsK
KworCisKKworCisKKworCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Igewor
CituYW1lc3BhY2UgUHJvdG9jb2wgeworCisKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKwor
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2Jq
ZWN0cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVy
cy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLWRlYnVnZ2FibGVU
eXBlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNp
bXBvcnQgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0
ci5oPgorCitAcHJvdG9jb2wgVGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcjsKKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKKworY2xhc3MgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmRE
aXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVy
IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBPYmpDSW5zcGVj
dG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFu
ZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQorICAgIHZvaWQgQ29tbWFu
ZChsb25nIHJlcXVlc3RJZCkgZmluYWw7Citwcml2YXRlOgorICAgIFJldGFpblB0cjxpZDxUZXN0
UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNw
YXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hl
cnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJs
ZVR5cGVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hl
cnMuaCIKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW5jbHVkZSAiVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4K
KworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3ZvaWQgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tl
bmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElkKQoreworICAgIGlmICghW21fZGVs
ZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihDb21tYW5kV2l0aEVycm9yQ2FsbGJh
Y2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJl
cG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90
Rm91bmQsICInRG9tYWluLkNvbW1hbmQnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7CisgICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBC
YWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICB9OworCisgICAgaWQgc3VjY2Vz
c0NhbGxiYWNrID0gXnsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNl
KHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2UpOworICAgIH07CisKKyAg
ICBbbV9kZWxlZ2F0ZSBDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNj
ZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKK30KKworfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisK
KyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8d3RmL1BsYXRm
b3JtLmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KKworX19hdHRy
aWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAorQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbiwg
c2V0dGVyPXNldERvbWFpbkhhbmRsZXI6KSBpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5k
bGVyPiBkb21haW5IYW5kbGVyOworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBUZXN0
UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKmRvbWFpbkV2ZW50RGlzcGF0Y2hl
cjsKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAor
CisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJv
dG9jb2xDb25maWd1cmF0aW9uLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgi
CisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+CisjaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2lt
cG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+CisKK3Vz
aW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xD
b25maWd1cmF0aW9uCit7CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29u
dHJvbGxlcjsKKyAgICBpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiBfZG9tYWlu
SGFuZGxlcjsKKyAgICBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKl9k
b21haW5FdmVudERpc3BhdGNoZXI7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRy
b2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgoreworICAg
IHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmls
OworICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7
CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIFtfZG9tYWlu
SGFuZGxlciByZWxlYXNlXTsKKyAgICBbX2RvbWFpbkV2ZW50RGlzcGF0Y2hlciByZWxlYXNlXTsK
KyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0gKHZvaWQpc2V0RG9tYWluSGFuZGxlcjooaWQ8
VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4paGFuZGxlcgoreworICAgIGlmIChoYW5k
bGVyID09IF9kb21haW5IYW5kbGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBbX2RvbWFpbkhh
bmRsZXIgcmVsZWFzZV07CisgICAgX2RvbWFpbkhhbmRsZXIgPSBbaGFuZGxlciByZXRhaW5dOwor
CisgICAgYXV0byBhbHRlcm5hdGVEaXNwYXRjaGVyID0gbWFrZVVuaXF1ZTxPYmpDSW5zcGVjdG9y
RG9tYWluQmFja2VuZERpc3BhdGNoZXI+KGhhbmRsZXIpOworICAgIGF1dG8gYWx0ZXJuYXRlQWdl
bnQgPSBtYWtlVW5pcXVlPEFsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50PERvbWFpbkJhY2tlbmRE
aXNwYXRjaGVyLCBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4+KCJEb21haW4iX3Ms
ICpfY29udHJvbGxlciwgV1RGTW92ZShhbHRlcm5hdGVEaXNwYXRjaGVyKSk7CisgICAgX2NvbnRy
b2xsZXItPmFwcGVuZEV4dHJhQWdlbnQoV1RGTW92ZShhbHRlcm5hdGVBZ2VudCkpOworfQorCist
IChpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPilkb21haW5IYW5kbGVyCit7Cisg
ICAgcmV0dXJuIF9kb21haW5IYW5kbGVyOworfQorCistIChUZXN0UHJvdG9jb2xEb21haW5Eb21h
aW5FdmVudERpc3BhdGNoZXIgKilkb21haW5FdmVudERpc3BhdGNoZXIKK3sKKyAgICBpZiAoIV9k
b21haW5FdmVudERpc3BhdGNoZXIpCisgICAgICAgIF9kb21haW5FdmVudERpc3BhdGNoZXIgPSBb
W1Rlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciBhbGxvY10gaW5pdFdpdGhD
b250cm9sbGVyOl9jb250cm9sbGVyXTsKKyAgICByZXR1cm4gX2RvbWFpbkV2ZW50RGlzcGF0Y2hl
cjsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
bi5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMu
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0
ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMuaCIKKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFj
ZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5F
dmVudERpc3BhdGNoZXIKK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9j
b250cm9sbGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdt
ZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1
cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NF
UlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVy
biBzZWxmOworfQorCistICh2b2lkKUV2ZW50Cit7CisgICAgY29uc3QgRnJvbnRlbmRSb3V0ZXIm
IHJvdXRlciA9IF9jb250cm9sbGVyLT5mcm9udGVuZFJvdXRlcigpOworCisgICAgUmVmPEpTT046
Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGpzb25N
ZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7CisgICAgcm91
dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworfQorCitAZW5kCisK
KworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKyNp
bXBvcnQgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9j
b2xKU09OT2JqZWN0Lmg+CisKKworCisKKworCisKKworQHByb3RvY29sIFRlc3RQcm90b2NvbERv
bWFpbkRvbWFpbkhhbmRsZXIgPE5TT2JqZWN0PgorQG9wdGlvbmFsCistICh2b2lkKUNvbW1hbmRX
aXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sg
c3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKHZvaWQpKXN1Y2Nlc3NDYWxsYmFjazsKK0BlbmQKKwor
X19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQ
cm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciA6IE5TT2JqZWN0CistICh2b2lkKUV2
ZW50OworQGVuZAorCisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29t
cGF0aWJpbGl0eU9iamVjdHMuaD4KKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAorCisj
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbgorLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDx3dGYvUGxhdGZvcm0uaD4K
KworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2Jq
ZWN0UHJpdmF0ZS5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0
b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCitAaW50ZXJmYWNl
IFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAoUHJpdmF0ZSkKKy0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEluc3BlY3Rvcjo6QXVnbWVudGFibGVJbnNw
ZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyOworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sSW50ZXJuYWwuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVi
dWdnYWJsZVR5cGVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI2ltcG9ydCA8d3RmL1BsYXRmb3JtLmg+CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5o
IgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgor
CituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBl
PgorT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5n
JiB2YWx1ZSk7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBk
b21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisK
KyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNl
ci5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUu
aD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisKKworCisKKyMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xUeXBlcy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFp
bi1kZWJ1Z2dhYmxlVHlwZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQ
cm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgor
I2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsK
KworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWlu
LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tcmVzdWx0IGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2Rv
bWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJlc3Vs
dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNDQxOWI2MTljZDcKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2Fi
bGVUeXBlLmpzb24tcmVzdWx0CkBAIC0wLDAgKzEsMTA0NiBAQAorIyMjIEJlZ2luIEZpbGU6IElu
c3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcy5pbgorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5q
c29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKy8vIERvbWFp
bgorSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiRG9tYWluIiwgbnVsbCk7CitJbnNw
ZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiRG9tYWluLkNvbW1hbmQiLCBbInBhZ2UiLCAi
d29ya2VyIl0sIFtdLCBbXSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnQoIkRvbWFp
bi5FdmVudCIsIG51bGwsIFtdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW5EaXNw
YXRjaGVyID0gSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRpc3BhdGNoZXIuYmluZChJbnNwZWN0
b3JCYWNrZW5kLCAiRG9tYWluIik7CitJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJE
b21haW4iLCBbInBhZ2UiXSk7CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5k
cy5qcy5pbgorCisjIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVy
cy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGUt
bWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvUGxh
dGZvcm0uaD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQor
CisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitj
bGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdm9pZCBzZXRC
YWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikg
eyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQorICAgIEJhY2tl
bmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2Vu
ZERpc3BhdGNoZXIuZ2V0KCk7IH0KK3ByaXZhdGU6CisgICAgUmVmUHRyPEJhY2tlbmREaXNwYXRj
aGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOworfTsKKworCitjbGFzcyBBbHRlcm5hdGVEb21haW5C
YWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Citw
dWJsaWM6CisgICAgdmlydHVhbCB+QWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIoKSB7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChsb25nIGNhbGxJZCkgPSAwOworfTsKKworfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVS
TkFURV9ESVNQQVRDSEVSUykKKyMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNw
YXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZS1tYXRjaGlu
Zy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5o
PgorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0eXBlZGVmIFN0cmluZyBF
cnJvclN0cmluZzsKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQorY2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXI7CisjZW5kaWYgLy8gRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKK2NsYXNzIERvbWFpbkJhY2tl
bmREaXNwYXRjaGVySGFuZGxlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIENvbW1hbmQo
RXJyb3JTdHJpbmcmKSA9IDA7Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+RG9tYWluQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyKCk7Cit9OworCitjbGFzcyBEb21haW5CYWNrZW5kRGlzcGF0Y2hl
ciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6
CisgICAgc3RhdGljIFJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmRE
aXNwYXRjaGVyJiwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgdm9pZCBk
aXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpP
YmplY3Q+JiYgbWVzc2FnZSkgZmluYWw7Citwcml2YXRlOgorICAgIHZvaWQgQ29tbWFuZChsb25n
IHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyNpZiBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK3B1YmxpYzoKKyAgICB2b2lkIHNl
dEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIqIGFs
dGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlz
cGF0Y2hlcjsgfQorcHJpdmF0ZToKKyAgICBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hl
ciogbV9hbHRlcm5hdGVEaXNwYXRjaGVyIHsgbnVsbHB0ciB9OworI2VuZGlmIC8vIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorcHJpdmF0ZToKKyAgICBEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlciopOworICAgIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2VudCB7
IG51bGxwdHIgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxl
OiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5k
RGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlu
LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1
ZXMuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKKyNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCisjZW5kaWYg
Ly8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKK25hbWVzcGFjZSBJ
bnNwZWN0b3IgeworCitEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5Eb21haW5CYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KKworUmVmPERvbWFpbkJhY2tlbmREaXNwYXRjaGVy
PiBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNr
ZW5kRGlzcGF0Y2hlciwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKK3sK
KyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5k
RGlzcGF0Y2hlciwgYWdlbnQpKTsKK30KKworRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkRvbWFp
bkJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwg
RG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKKyAgICA6IFN1cHBsZW1lbnRh
bEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQorICAgICwgbV9hZ2VudChhZ2Vu
dCkKK3sKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21h
aW4oIkRvbWFpbiJfcywgdGhpcyk7Cit9CisKK3ZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6
OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046
Ok9iamVjdD4mJiBtZXNzYWdlKQoreworICAgIFJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4g
cHJvdGVjdCgqdGhpcyk7CisKKyAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOwor
ICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsKKworICAgIGlm
IChtZXRob2QgPT0gIkNvbW1hbmQiKSB7CisgICAgICAgIENvbW1hbmQocmVxdWVzdElkLCBXVEZN
b3ZlKHBhcmFtZXRlcnMpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fYmFja2Vu
ZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhv
ZE5vdEZvdW5kLCAiJ0RvbWFpbi4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOworfQor
Cit2b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQoreworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQorICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKKyAgICAgICAg
bV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5Db21tYW5kKHJlcXVlc3RJZCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCisKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1
bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYWdlbnQtPkNvbW1hbmQoZXJyb3Ip
OworCisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7CisgICAg
ZWxzZQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJh
Y2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOworfQorCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNo
ZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5n
LWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+
CisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8d3RmL0pTT05W
YWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIElu
c3BlY3RvciB7CisKK2NsYXNzIEZyb250ZW5kUm91dGVyOworCitjbGFzcyBEb21haW5Gcm9udGVu
ZERpc3BhdGNoZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAg
IERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcihGcm9udGVuZFJvdXRlciYgZnJvbnRlbmRSb3V0ZXIp
IDogbV9mcm9udGVuZFJvdXRlcihmcm9udGVuZFJvdXRlcikgeyB9CisgICAgdm9pZCBFdmVudCgp
OworcHJpdmF0ZToKKyAgICBGcm9udGVuZFJvdXRlciYgbV9mcm9udGVuZFJvdXRlcjsKK307CisK
K30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNw
YXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZS1tYXRj
aGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEZy
b250ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1l
c3BhY2UgSW5zcGVjdG9yIHsKKwordm9pZCBEb21haW5Gcm9udGVuZERpc3BhdGNoZXI6OkV2ZW50
KCkKK3sKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6
Y3JlYXRlKCk7CisgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9tYWlu
LkV2ZW50Il9zKTsKKworICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdl
LT50b0pTT05TdHJpbmcoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMg
RW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sT2JqZWN0cy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
ZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvclByb3RvY29sVHlwZXMuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCitu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKworCisK
KworCisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5q
c29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisKKyNpbmNsdWRl
IDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVz
cGFjZSBJbnNwZWN0b3IgeworCituYW1lc3BhY2UgUHJvdG9jb2wgeworCisKKworfSAvLyBuYW1l
c3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
ZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8d3RmL1Bs
YXRmb3JtLmg+CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKK0Bwcm90
b2NvbCBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyOworCituYW1lc3BhY2UgSW5zcGVj
dG9yIHsKKworCitjbGFzcyBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmlu
YWwgOiBwdWJsaWMgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIgeworICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIE9iakNJbnNwZWN0b3JEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiBoYW5kbGVy
KSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9CisgICAgdm9pZCBDb21tYW5kKGxvbmcgcmVxdWVz
dElkKSBmaW5hbDsKK3ByaXZhdGU6CisgICAgUmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbERvbWFp
bkRvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKwor
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRv
bWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFj
a2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgor
I2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9K
U09OVmFsdWVzLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit2b2lkIE9iakNJbnNwZWN0
b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVlc3RJZCkKK3sKKyAg
ICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoQ29tbWFuZFdp
dGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgeworICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNo
ZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi5Db21tYW5kJyB3YXMgbm90IGZvdW5kIl9zKTsK
KyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICpl
cnJvcikgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9y
KHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgfTsKKwor
ICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCkt
PnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsK
KyAgICB9OworCisgICAgW21fZGVsZWdhdGUgQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOmVycm9y
Q2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107Cit9CisKK30gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNw
YXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5o
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGUtbWF0
Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8d3RmL1BsYXRmb3JtLmg+CisKKyNpbXBvcnQg
PFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0
eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBO
U09iamVjdAorQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNldERvbWFpbkhh
bmRsZXI6KSBpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiBkb21haW5IYW5kbGVy
OworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBUZXN0UHJvdG9jb2xEb21haW5Eb21h
aW5FdmVudERpc3BhdGNoZXIgKmRvbWFpbkV2ZW50RGlzcGF0Y2hlcjsKK0BlbmQKKworCisjIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorCisjIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5q
c29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50
ZXJuYWwuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorI2lt
cG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2lt
cG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJz
Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMu
aD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24KK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xs
ZXIqIF9jb250cm9sbGVyOworICAgIGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+
IF9kb21haW5IYW5kbGVyOworICAgIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0
Y2hlciAqX2RvbWFpbkV2ZW50RGlzcGF0Y2hlcjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVy
Cit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJl
dHVybiBuaWw7CisgICAgQVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250cm9sbGVyID0gY29u
dHJvbGxlcjsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAg
W19kb21haW5IYW5kbGVyIHJlbGVhc2VdOworICAgIFtfZG9tYWluRXZlbnREaXNwYXRjaGVyIHJl
bGVhc2VdOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAodm9pZClzZXREb21haW5IYW5k
bGVyOihpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiloYW5kbGVyCit7CisgICAg
aWYgKGhhbmRsZXIgPT0gX2RvbWFpbkhhbmRsZXIpCisgICAgICAgIHJldHVybjsKKworICAgIFtf
ZG9tYWluSGFuZGxlciByZWxlYXNlXTsKKyAgICBfZG9tYWluSGFuZGxlciA9IFtoYW5kbGVyIHJl
dGFpbl07CisKKyAgICBhdXRvIGFsdGVybmF0ZURpc3BhdGNoZXIgPSBtYWtlVW5pcXVlPE9iakNJ
bnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7CisgICAgYXV0byBhbHRl
cm5hdGVBZ2VudCA9IG1ha2VVbmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8RG9tYWlu
QmFja2VuZERpc3BhdGNoZXIsIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyPj4oIkRv
bWFpbiJfcywgKl9jb250cm9sbGVyLCBXVEZNb3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIpKTsKKyAg
ICBfY29udHJvbGxlci0+YXBwZW5kRXh0cmFBZ2VudChXVEZNb3ZlKGFsdGVybmF0ZUFnZW50KSk7
Cit9CisKKy0gKGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+KWRvbWFpbkhhbmRs
ZXIKK3sKKyAgICByZXR1cm4gX2RvbWFpbkhhbmRsZXI7Cit9CisKKy0gKFRlc3RQcm90b2NvbERv
bWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqKWRvbWFpbkV2ZW50RGlzcGF0Y2hlcgoreworICAg
IGlmICghX2RvbWFpbkV2ZW50RGlzcGF0Y2hlcikKKyAgICAgICAgX2RvbWFpbkV2ZW50RGlzcGF0
Y2hlciA9IFtbVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyIGFsbG9jXSBp
bml0V2l0aENvbnRyb2xsZXI6X2NvbnRyb2xsZXJdOworICAgIHJldHVybiBfZG9tYWluRXZlbnRE
aXNwYXRjaGVyOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25m
aWd1cmF0aW9uLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNo
ZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5
cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwu
aCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDx3
dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVt
ZW50YXRpb24gVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyCit7CisgICAg
QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKK30KKworLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9s
bGVyKiljb250cm9sbGVyCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNl
bGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9j
b250cm9sbGVyID0gY29udHJvbGxlcjsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClF
dmVudAoreworICAgIGNvbnN0IEZyb250ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29udHJvbGxlci0+
ZnJvbnRlbmRSb3V0ZXIoKTsKKworICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0g
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRo
b2QiX3MsICJEb21haW4uRXZlbnQiX3MpOworICAgIHJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3Nh
Z2UtPnRvSlNPTlN0cmluZygpKTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
LmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZS1t
YXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4K
KyNpbXBvcnQgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJv
dG9jb2xKU09OT2JqZWN0Lmg+CisKKworCisKKworCisKKworQHByb3RvY29sIFRlc3RQcm90b2Nv
bERvbWFpbkRvbWFpbkhhbmRsZXIgPE5TT2JqZWN0PgorQG9wdGlvbmFsCistICh2b2lkKUNvbW1h
bmRXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJh
Y2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKHZvaWQpKXN1Y2Nlc3NDYWxsYmFjazsKK0BlbmQK
KworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRl
c3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciA6IE5TT2JqZWN0CistICh2b2lk
KUV2ZW50OworQGVuZAorCisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxk
Q29tcGF0aWJpbGl0eU9iamVjdHMuaD4KKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAor
CisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1
Z2dhYmxlVHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbXBvcnQgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIK
KyNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCisjaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPHd0
Zi9KU09OVmFsdWVzLmg+CisKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZl
bnREaXNwYXRjaGVyIChQcml2YXRlKQorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxl
cjooSW5zcGVjdG9yOjpBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXI7
CitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1
Z2dhYmxlVHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbXBvcnQgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIK
KyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KKwor
bmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4K
K09wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYg
dmFsdWUpOworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9t
YWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9y
dCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVBy
b3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsK
KworCisKKworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1t
CisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1
Z2dhYmxlVHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29s
SlNPTk9iamVjdFByaXZhdGUuaD4KKyNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW1wb3J0
IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisKKyMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW4tdGFyZ2V0
VHlwZXMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWluLXRhcmdldFR5cGVzLmpzb24tcmVzdWx0Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kMWMwZjk4NjZjMQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC9kb21haW4tdGFyZ2V0VHlwZXMuanNvbi1yZXN1bHQKQEAgLTAsMCArMSwxMDQ2IEBACisj
IyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzLmluCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVzLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworLy8gRG9tYWluCitJbnNwZWN0b3JC
YWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJEb21haW4iLCBbInBhZ2UiXSk7CitJbnNwZWN0b3JCYWNr
ZW5kLnJlZ2lzdGVyQ29tbWFuZCgiRG9tYWluLkNvbW1hbmQiLCBbInBhZ2UiXSwgW10sIFtdKTsK
K0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudCgiRG9tYWluLkV2ZW50IiwgWyJwYWdlIl0s
IFtdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW5EaXNwYXRjaGVyID0gSW5zcGVj
dG9yQmFja2VuZC5yZWdpc3RlckRpc3BhdGNoZXIuYmluZChJbnNwZWN0b3JCYWNrZW5kLCAiRG9t
YWluIik7CitJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJEb21haW4iLCBudWxsKTsK
KyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzLmluCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZXMuanNvbgorLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
PHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKworbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CisKK2NsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2
b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNw
YXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9Cisg
ICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4g
bV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQorcHJpdmF0ZToKKyAgICBSZWZQdHI8QmFja2Vu
ZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Cit9OworCisKK2NsYXNzIEFsdGVybmF0
ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5BbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0
Y2hlcigpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBDb21tYW5kKGxvbmcgY2FsbElkKSA9IDA7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hl
cnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBl
cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpbmNsdWRlICJUZXN0UHJv
dG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNw
YWNlIEluc3BlY3RvciB7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCisjaWYgRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCitjbGFzcyBBbHRlcm5hdGVEb21h
aW5CYWNrZW5kRGlzcGF0Y2hlcjsKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKKworY2xhc3MgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsK
K3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChFcnJvclN0cmluZyYpID0gMDsKK3By
b3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5Eb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsK
K307CisKK2NsYXNzIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBs
ZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPERvbWFp
bkJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElk
LCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5h
bDsKK3ByaXZhdGU6CisgICAgdm9pZCBDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQorcHVibGljOgorICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0Y2hlcihB
bHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBt
X2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9Citwcml2YXRlOgor
ICAgIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKiBtX2FsdGVybmF0ZURpc3BhdGNo
ZXIgeyBudWxscHRyIH07CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCitwcml2YXRlOgorICAgIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmRE
aXNwYXRjaGVyJiwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgRG9tYWlu
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50IHsgbnVsbHB0ciB9OworfTsKKworfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hl
cnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZXMuanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvSlNP
TlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQorI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNl
bmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworbmFtZXNw
YWNlIEluc3BlY3RvciB7CisKK0RvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6fkRvbWFp
bkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQorCitSZWY8RG9tYWluQmFja2VuZERpc3Bh
dGNoZXI+IERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoQmFja2VuZERpc3BhdGNoZXIm
IGJhY2tlbmREaXNwYXRjaGVyLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50
KQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKGJh
Y2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOworfQorCitEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6
RG9tYWluQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRj
aGVyLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQorICAgIDogU3VwcGxl
bWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCisgICAgLCBtX2FnZW50
KGFnZW50KQoreworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZv
ckRvbWFpbigiRG9tYWluIl9zLCB0aGlzKTsKK30KKwordm9pZCBEb21haW5CYWNrZW5kRGlzcGF0
Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8
SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCit7CisgICAgUmVmPERvbWFpbkJhY2tlbmREaXNwYXRj
aGVyPiBwcm90ZWN0KCp0aGlzKTsKKworICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRl
cnM7CisgICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRlcnMpOworCisg
ICAgaWYgKG1ldGhvZCA9PSAiQ29tbWFuZCIpIHsKKyAgICAgICAgQ29tbWFuZChyZXF1ZXN0SWQs
IFdURk1vdmUocGFyYW1ldGVycykpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6
TWV0aG9kTm90Rm91bmQsICInRG9tYWluLiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7
Cit9CisKK3ZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9uZyByZXF1ZXN0
SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCit7CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCisgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeworICAg
ICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPkNvbW1hbmQocmVxdWVzdElkKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKKworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgIFJlZjxKU09OOjpPYmplY3Q+
IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9hZ2VudC0+Q29tbWFuZChl
cnJvcik7CisKKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQorICAgICAgICBtX2JhY2tlbmREaXNw
YXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsK
KyAgICBlbHNlCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJy
b3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlz
cGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5o
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVzLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bE9iamVjdHMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgRnJvbnRl
bmRSb3V0ZXI7CisKK2NsYXNzIERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlciB7CisgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVy
KEZyb250ZW5kUm91dGVyJiBmcm9udGVuZFJvdXRlcikgOiBtX2Zyb250ZW5kUm91dGVyKGZyb250
ZW5kUm91dGVyKSB7IH0KKyAgICB2b2lkIEV2ZW50KCk7Citwcml2YXRlOgorICAgIEZyb250ZW5k
Um91dGVyJiBtX2Zyb250ZW5kUm91dGVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
CisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZp
bGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0
RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25h
bWVzcGFjZSBJbnNwZWN0b3IgeworCit2b2lkIERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcjo6RXZl
bnQoKQoreworICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21h
aW4uRXZlbnQiX3MpOworCisgICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3Nh
Z2UtPnRvSlNPTlN0cmluZygpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMj
IyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBkb21haW4tdGFyZ2V0VHlwZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgor
CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgorI2lu
Y2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKwor
bmFtZXNwYWNlIFByb3RvY29sIHsKKworCisKKworCisKKworCisKK30gLy8gbmFtZXNwYWNlIFBy
b3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xPYmplY3RzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3Bw
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVzLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKworI2luY2x1ZGUg
PHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNw
YWNlIEluc3BlY3RvciB7CisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKworCit9IC8vIG5hbWVz
cGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBk
b21haW4tdGFyZ2V0VHlwZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjaW1wb3J0IDx3dGYvUGxhdGZvcm0uaD4KKworI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2luY2x1ZGUg
PHd0Zi9SZXRhaW5QdHIuaD4KKworQHByb3RvY29sIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhh
bmRsZXI7CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKK2NsYXNzIE9iakNJbnNwZWN0b3JE
b21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6Cisg
ICAgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbERv
bWFpbkRvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KKyAg
ICB2b2lkIENvbW1hbmQobG9uZyByZXF1ZXN0SWQpIGZpbmFsOworcHJpdmF0ZToKKyAgICBSZXRh
aW5QdHI8aWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFj
a2VuZERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9t
YWluLXRhcmdldFR5cGVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5k
RGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW5j
bHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW5jbHVkZSA8d3RmL0pTT05W
YWx1ZXMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3ZvaWQgT2JqQ0luc3BlY3RvckRv
bWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElkKQoreworICAgIGlm
ICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihDb21tYW5kV2l0aEVy
cm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6
TWV0aG9kTm90Rm91bmQsICInRG9tYWluLkNvbW1hbmQnIHdhcyBub3QgZm91bmQiX3MpOworICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9y
KSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVx
dWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAg
YmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICB9OworCisgICAg
aWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2Vu
ZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2UpOworICAg
IH07CisKKyAgICBbbV9kZWxlZ2F0ZSBDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxs
YmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNo
ZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZXMuanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDx3dGYv
UGxhdGZvcm0uaD4KKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgorCitf
X2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0
YWluLCBzZXR0ZXI9c2V0RG9tYWluSGFuZGxlcjopIGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFp
bkhhbmRsZXI+IGRvbWFpbkhhbmRsZXI7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkp
IFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqZG9tYWluRXZlbnREaXNw
YXRjaGVyOworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
bi5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVzLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbi5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5o
IgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisjaW1wb3J0IDxK
YXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgorI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgorCit1
c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2Nv
bnRyb2xsZXI7CisgICAgaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4gX2RvbWFp
bkhhbmRsZXI7CisgICAgVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyICpf
ZG9tYWluRXZlbnREaXNwYXRjaGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250
cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAg
ICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5p
bDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVy
OworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbX2RvbWFp
bkhhbmRsZXIgcmVsZWFzZV07CisgICAgW19kb21haW5FdmVudERpc3BhdGNoZXIgcmVsZWFzZV07
CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistICh2b2lkKXNldERvbWFpbkhhbmRsZXI6KGlk
PFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+KWhhbmRsZXIKK3sKKyAgICBpZiAoaGFu
ZGxlciA9PSBfZG9tYWluSGFuZGxlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgW19kb21haW5I
YW5kbGVyIHJlbGVhc2VdOworICAgIF9kb21haW5IYW5kbGVyID0gW2hhbmRsZXIgcmV0YWluXTsK
KworICAgIGF1dG8gYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IG1ha2VVbmlxdWU8T2JqQ0luc3BlY3Rv
ckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyPihoYW5kbGVyKTsKKyAgICBhdXRvIGFsdGVybmF0ZUFn
ZW50ID0gbWFrZVVuaXF1ZTxBbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudDxEb21haW5CYWNrZW5k
RGlzcGF0Y2hlciwgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXI+PigiRG9tYWluIl9z
LCAqX2NvbnRyb2xsZXIsIFdURk1vdmUoYWx0ZXJuYXRlRGlzcGF0Y2hlcikpOworICAgIF9jb250
cm9sbGVyLT5hcHBlbmRFeHRyYUFnZW50KFdURk1vdmUoYWx0ZXJuYXRlQWdlbnQpKTsKK30KKwor
LSAoaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4pZG9tYWluSGFuZGxlcgorewor
ICAgIHJldHVybiBfZG9tYWluSGFuZGxlcjsKK30KKworLSAoVGVzdFByb3RvY29sRG9tYWluRG9t
YWluRXZlbnREaXNwYXRjaGVyICopZG9tYWluRXZlbnREaXNwYXRjaGVyCit7CisgICAgaWYgKCFf
ZG9tYWluRXZlbnREaXNwYXRjaGVyKQorICAgICAgICBfZG9tYWluRXZlbnREaXNwYXRjaGVyID0g
W1tUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgYWxsb2NdIGluaXRXaXRo
Q29udHJvbGxlcjpfY29udHJvbGxlcl07CisgICAgcmV0dXJuIF9kb21haW5FdmVudERpc3BhdGNo
ZXI7Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRp
b24ubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0K
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZXMuanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJU
ZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMuaCIKKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJ
bnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVu
dERpc3BhdGNoZXIKK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250
cm9sbGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50
YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVy
IGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQo
Y29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVybiBz
ZWxmOworfQorCistICh2b2lkKUV2ZW50Cit7CisgICAgY29uc3QgRnJvbnRlbmRSb3V0ZXImIHJv
dXRlciA9IF9jb250cm9sbGVyLT5mcm9udGVuZFJvdXRlcigpOworCisgICAgUmVmPEpTT046Ok9i
amVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGpzb25NZXNz
YWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7CisgICAgcm91dGVy
LnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworfQorCitAZW5kCisKKwor
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2wuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGRvbWFpbi10YXJnZXRUeXBlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorI2ltcG9ydCA8
d3RmL1BsYXRmb3JtLmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05P
YmplY3QuaD4KKworCisKKworCisKKworCitAcHJvdG9jb2wgVGVzdFByb3RvY29sRG9tYWluRG9t
YWluSGFuZGxlciA8TlNPYmplY3Q+CitAb3B0aW9uYWwKKy0gKHZvaWQpQ29tbWFuZFdpdGhFcnJv
ckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNz
Q2FsbGJhY2s6KHZvaWQoXikodm9pZCkpc3VjY2Vzc0NhbGxiYWNrOworQGVuZAorCitfX2F0dHJp
YnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29s
RG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyIDogTlNPYmplY3QKKy0gKHZvaWQpRXZlbnQ7CitA
ZW5kCisKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmls
aXR5T2JqZWN0cy5oPgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8d3RmL1BsYXRmb3JtLmg+CisKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUu
aCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxl
ci5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKworQGludGVyZmFjZSBUZXN0UHJvdG9j
b2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKFByaXZhdGUpCistIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhDb250cm9sbGVyOihJbnNwZWN0b3I6OkF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJv
bGxlciopY29udHJvbGxlcjsKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbElu
dGVybmFsLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5o
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVzLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8
d3RmL1BsYXRmb3JtLmg+CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCA8V2Vi
SW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgorCituYW1lc3BhY2UgSW5z
cGVjdG9yIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgorT3B0aW9uYWw8T2Jq
Q0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7CisKK30g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlw
ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1w
b3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKworI2ltcG9ydCAiVGVzdFByb3Rv
Y29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCisjaW1wb3J0IDxXZWJJ
bnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorCit1c2luZyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yOworCisKKworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVzLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVz
dFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0
ZS5oPgorI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVz
Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQt
c2l6ZXMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29u
LXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMTQ3NzViM2Y3
YzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5q
c29uLXJlc3VsdApAQCAtMCwwICsxLDE0MzggQEAKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JC
YWNrZW5kQ29tbWFuZHMuanMuaW4KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBk
b21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworLy8gTmV0d29yazEKK0luc3BlY3RvckJhY2tlbmQu
cmVnaXN0ZXJEb21haW4oIk5ldHdvcmsxIiwgbnVsbCk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lz
dGVyQ29tbWFuZCgiTmV0d29yazEubG9hZFJlc291cmNlMSIsIG51bGwsIFtdLCBbXSk7CitJbnNw
ZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJOZXR3b3JrMSIsIG51bGwpOworCisvLyBOZXR3
b3JrMworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiTmV0d29yazMiLCBudWxsKTsK
K0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2Ux
IiwgbnVsbCwgW10sIFtdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3
b3JrMy5sb2FkUmVzb3VyY2UyIiwgbnVsbCwgW10sIFtdKTsKK0luc3BlY3RvckJhY2tlbmQucmVn
aXN0ZXJDb21tYW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2UzIiwgbnVsbCwgW10sIFtdKTsKK0lu
c3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2U0Iiwg
bnVsbCwgW10sIFtdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3Jr
My5sb2FkUmVzb3VyY2U1IiwgbnVsbCwgW10sIFtdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0
ZXJDb21tYW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2U2IiwgbnVsbCwgW10sIFtdKTsKK0luc3Bl
Y3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2U3IiwgbnVs
bCwgW10sIFtdKTsKK0luc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIk5ldHdvcmszIiwg
bnVsbCk7CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcy5pbgorCisj
IyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1z
aXplcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5
cGVzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5o
PgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXIgeworcHVibGljOgorICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJh
Y2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdU
Rk1vdmUoZGlzcGF0Y2hlcik7IH0KKyAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3Bh
dGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Citwcml2
YXRlOgorICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsK
K307CisKKworY2xhc3MgQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciA6IHB1Ymxp
YyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+QWx0
ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBs
b2FkUmVzb3VyY2UxKGxvbmcgY2FsbElkKSA9IDA7Cit9OworCitjbGFzcyBBbHRlcm5hdGVOZXR3
b3JrM0JhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVy
IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5BbHRlcm5hdGVOZXR3b3JrM0JhY2tlbmREaXNwYXRj
aGVyKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTEobG9uZyBjYWxsSWQpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMihsb25nIGNhbGxJZCkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UzKGxvbmcgY2FsbElkKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGxvYWRSZXNvdXJjZTQobG9uZyBjYWxsSWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
bG9hZFJlc291cmNlNShsb25nIGNhbGxJZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVz
b3VyY2U2KGxvbmcgY2FsbElkKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTco
bG9uZyBjYWxsSWQpID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5k
aWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjIyMgRW5kIEZp
bGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTog
VGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8
d3RmL1BsYXRmb3JtLmg+CisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3R5
cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCitjbGFzcyBBbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVy
OworY2xhc3MgQWx0ZXJuYXRlTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjsKKyNlbmRpZiAvLyBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworY2xhc3MgTmV0d29yazFC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBsb2Fk
UmVzb3VyY2UxKEVycm9yU3RyaW5nJikgPSAwOworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgfk5l
dHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7Cit9OworCitjbGFzcyBOZXR3b3JrM0Jh
Y2tlbmREaXNwYXRjaGVySGFuZGxlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIGxvYWRS
ZXNvdXJjZTEoRXJyb3JTdHJpbmcmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJj
ZTIoRXJyb3JTdHJpbmcmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTMoRXJy
b3JTdHJpbmcmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTQoRXJyb3JTdHJp
bmcmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTUoRXJyb3JTdHJpbmcmKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTYoRXJyb3JTdHJpbmcmKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTcoRXJyb3JTdHJpbmcmKSA9IDA7Citwcm90ZWN0
ZWQ6CisgICAgdmlydHVhbCB+TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKK307
CisKK2NsYXNzIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxl
bWVudGFsQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8TmV0d29y
azFCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgTmV0d29yazFC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVz
dElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBm
aW5hbDsKK3ByaXZhdGU6CisgICAgdm9pZCBsb2FkUmVzb3VyY2UxKGxvbmcgcmVxdWVzdElkLCBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOworI2lmIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQorcHVibGljOgorICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlz
cGF0Y2hlcihBbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNw
YXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0K
K3ByaXZhdGU6CisgICAgQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciogbV9hbHRl
cm5hdGVEaXNwYXRjaGVyIHsgbnVsbHB0ciB9OworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQorcHJpdmF0ZToKKyAgICBOZXR3b3JrMUJhY2tlbmREaXNw
YXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiwgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIqKTsKKyAgICBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2VudCB7IG51
bGxwdHIgfTsKK307CisKK2NsYXNzIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBw
dWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHN0YXRp
YyBSZWY8TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVy
JiwgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICB2b2lkIGRpc3BhdGNo
KGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4m
JiBtZXNzYWdlKSBmaW5hbDsKK3ByaXZhdGU6CisgICAgdm9pZCBsb2FkUmVzb3VyY2UxKGxvbmcg
cmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOworICAgIHZvaWQg
bG9hZFJlc291cmNlMihsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJh
bWV0ZXJzKTsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxK
U09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisgICAgdm9pZCBsb2FkUmVzb3VyY2U0KGxvbmcg
cmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOworICAgIHZvaWQg
bG9hZFJlc291cmNlNShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJh
bWV0ZXJzKTsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTYobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxK
U09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisgICAgdm9pZCBsb2FkUmVzb3VyY2U3KGxvbmcg
cmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOworI2lmIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorcHVibGljOgorICAgIHZvaWQgc2V0
QWx0ZXJuYXRlRGlzcGF0Y2hlcihBbHRlcm5hdGVOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyKiBh
bHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURp
c3BhdGNoZXI7IH0KK3ByaXZhdGU6CisgICAgQWx0ZXJuYXRlTmV0d29yazNCYWNrZW5kRGlzcGF0
Y2hlciogbV9hbHRlcm5hdGVEaXNwYXRjaGVyIHsgbnVsbHB0ciB9OworI2VuZGlmIC8vIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorcHJpdmF0ZToKKyAgICBOZXR3b3Jr
M0JhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiwgTmV0d29yazNCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXIqKTsKKyAgICBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciog
bV9hZ2VudCB7IG51bGxwdHIgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMj
IEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRl
c3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+
CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisj
aW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgorI2VuZGlmIC8vIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCituYW1lc3BhY2UgSW5zcGVj
dG9yIHsKKworTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5OZXR3b3JrMUJhY2tl
bmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQorTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXI6On5OZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQorCitSZWY8TmV0d29y
azFCYWNrZW5kRGlzcGF0Y2hlcj4gTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEJh
Y2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgTmV0d29yazFCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXIqIGFnZW50KQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE5ldHdvcmsx
QmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIsIGFnZW50KSk7Cit9CisKK05ldHdv
cmsxQmFja2VuZERpc3BhdGNoZXI6Ok5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERp
c3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlciogYWdlbnQpCisgICAgOiBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5k
RGlzcGF0Y2hlcikKKyAgICAsIG1fYWdlbnQoYWdlbnQpCit7CisgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKCJOZXR3b3JrMSJfcywgdGhpcyk7Cit9
CisKK3ZvaWQgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0
SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCit7
CisgICAgUmVmPE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOworCisg
ICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVyczsKKyAgICBtZXNzYWdlLT5nZXRPYmpl
Y3QoInBhcmFtcyJfcywgcGFyYW1ldGVycyk7CisKKyAgICBpZiAobWV0aG9kID09ICJsb2FkUmVz
b3VyY2UxIikgeworICAgICAgICBsb2FkUmVzb3VyY2UxKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJh
bWV0ZXJzKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3Vu
ZCwgIidOZXR3b3JrMS4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOworfQorCit2b2lk
IE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTEobG9uZyByZXF1ZXN0SWQs
IFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCit7CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCisgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeworICAgICAg
ICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZTEocmVxdWVzdElkKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKKworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgIFJlZjxKU09OOjpPYmpl
Y3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9hZ2VudC0+bG9hZFJl
c291cmNlMShlcnJvcik7CisKKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQorICAgICAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCks
IGZhbHNlKTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFBy
b3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9y
KSk7Cit9CisKK1JlZjxOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyPiBOZXR3b3JrM0JhY2tlbmRE
aXNwYXRjaGVyOjpjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBO
ZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCit7CisgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwg
YWdlbnQpKTsKK30KKworTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6TmV0d29yazNCYWNrZW5k
RGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIE5ldHdvcmsz
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKKyAgICA6IFN1cHBsZW1lbnRhbEJhY2tl
bmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQorICAgICwgbV9hZ2VudChhZ2VudCkKK3sK
KyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oIk5l
dHdvcmszIl9zLCB0aGlzKTsKK30KKwordm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpk
aXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpP
YmplY3Q+JiYgbWVzc2FnZSkKK3sKKyAgICBSZWY8TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcj4g
cHJvdGVjdCgqdGhpcyk7CisKKyAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOwor
ICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsKKworICAgIHR5
cGVkZWYgdm9pZCAoTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6KkNhbGxIYW5kbGVyKShsb25n
IHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKTsKKyAgICB0eXBlZGVm
IEhhc2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxlcj4gRGlzcGF0Y2hNYXA7CisgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPERpc3BhdGNoTWFwPiBkaXNwYXRjaE1hcDsKKyAgICBpZiAoZGlzcGF0Y2hN
YXAuZ2V0KCkuaXNFbXB0eSgpKSB7CisgICAgICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgTWV0aG9k
VGFibGUgeworICAgICAgICAgICAgY29uc3QgY2hhciogbmFtZTsKKyAgICAgICAgICAgIENhbGxI
YW5kbGVyIGhhbmRsZXI7CisgICAgICAgIH0gY29tbWFuZHNbXSA9IHsKKyAgICAgICAgICAgIHsg
ImxvYWRSZXNvdXJjZTEiLCAmTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNl
MSB9LAorICAgICAgICAgICAgeyAibG9hZFJlc291cmNlMiIsICZOZXR3b3JrM0JhY2tlbmREaXNw
YXRjaGVyOjpsb2FkUmVzb3VyY2UyIH0sCisgICAgICAgICAgICB7ICJsb2FkUmVzb3VyY2UzIiwg
Jk5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTMgfSwKKyAgICAgICAgICAg
IHsgImxvYWRSZXNvdXJjZTQiLCAmTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291
cmNlNCB9LAorICAgICAgICAgICAgeyAibG9hZFJlc291cmNlNSIsICZOZXR3b3JrM0JhY2tlbmRE
aXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U1IH0sCisgICAgICAgICAgICB7ICJsb2FkUmVzb3VyY2U2
IiwgJk5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTYgfSwKKyAgICAgICAg
ICAgIHsgImxvYWRSZXNvdXJjZTciLCAmTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJl
c291cmNlNyB9LAorICAgICAgICB9OworICAgICAgICBzaXplX3QgbGVuZ3RoID0gV1RGX0FSUkFZ
X0xFTkdUSChjb21tYW5kcyk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3Ro
OyArK2kpCisgICAgICAgICAgICBkaXNwYXRjaE1hcC5nZXQoKS5hZGQoY29tbWFuZHNbaV0ubmFt
ZSwgY29tbWFuZHNbaV0uaGFuZGxlcik7CisgICAgfQorCisgICAgYXV0byBmaW5kUmVzdWx0ID0g
ZGlzcGF0Y2hNYXAuZ2V0KCkuZmluZChtZXRob2QpOworICAgIGlmIChmaW5kUmVzdWx0ID09IGRp
c3BhdGNoTWFwLmdldCgpLmVuZCgpKSB7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJl
cG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05l
dHdvcmszLiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICAoKCp0aGlzKS4qZmluZFJlc3VsdC0+dmFsdWUpKHJlcXVlc3RJZCwgV1RG
TW92ZShwYXJhbWV0ZXJzKSk7Cit9CisKK3ZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6
bG9hZFJlc291cmNlMShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKK3sK
KyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyAgICBpZiAobV9h
bHRlcm5hdGVEaXNwYXRjaGVyKSB7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9h
ZFJlc291cmNlMShyZXF1ZXN0SWQpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmIC8v
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCisgICAgRXJyb3JTdHJp
bmcgZXJyb3I7CisgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKTsKKyAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2UxKGVycm9yKTsKKworICAgIGlmICgh
ZXJyb3IubGVuZ3RoKCkpCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25z
ZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOworICAgIGVsc2UKKyAgICAgICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hl
cjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKK30KKwordm9pZCBOZXR3b3JrM0JhY2tl
bmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UyKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6
T2JqZWN0PiYmKQoreworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQorICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKKyAgICAgICAgbV9hbHRlcm5hdGVE
aXNwYXRjaGVyLT5sb2FkUmVzb3VyY2UyKHJlcXVlc3RJZCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisK
KyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBK
U09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTIoZXJyb3Ip
OworCisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7CisgICAg
ZWxzZQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJh
Y2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOworfQorCit2b2lk
IE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTMobG9uZyByZXF1ZXN0SWQs
IFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCit7CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCisgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeworICAgICAg
ICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZTMocmVxdWVzdElkKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKKworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgIFJlZjxKU09OOjpPYmpl
Y3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9hZ2VudC0+bG9hZFJl
c291cmNlMyhlcnJvcik7CisKKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQorICAgICAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCks
IGZhbHNlKTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFBy
b3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9y
KSk7Cit9CisKK3ZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNChs
b25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKK3sKKyNpZiBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRj
aGVyKSB7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlNChyZXF1
ZXN0SWQpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCisgICAgRXJyb3JTdHJpbmcgZXJyb3I7CisgICAg
UmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBt
X2FnZW50LT5sb2FkUmVzb3VyY2U0KGVycm9yKTsKKworICAgIGlmICghZXJyb3IubGVuZ3RoKCkp
CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdU
Rk1vdmUocmVzdWx0KSwgZmFsc2UpOworICAgIGVsc2UKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3Is
IFdURk1vdmUoZXJyb3IpKTsKK30KKwordm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjps
b2FkUmVzb3VyY2U1KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQorewor
I2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorICAgIGlmIChtX2Fs
dGVybmF0ZURpc3BhdGNoZXIpIHsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2Fk
UmVzb3VyY2U1KHJlcXVlc3RJZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYgLy8g
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyAgICBFcnJvclN0cmlu
ZyBlcnJvcjsKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOworICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTUoZXJyb3IpOworCisgICAgaWYgKCFl
cnJvci5sZW5ndGgoKSkKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNl
KHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7CisgICAgZWxzZQorICAgICAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVy
OjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOworfQorCit2b2lkIE5ldHdvcmszQmFja2Vu
ZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTYobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpP
YmplY3Q+JiYpCit7CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
CisgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeworICAgICAgICBtX2FsdGVybmF0ZURp
c3BhdGNoZXItPmxvYWRSZXNvdXJjZTYocmVxdWVzdElkKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKwor
ICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpT
T046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9hZ2VudC0+bG9hZFJlc291cmNlNihlcnJvcik7
CisKKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKKyAgICBl
bHNlCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFj
a2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Cit9CisKK3ZvaWQg
TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNyhsb25nIHJlcXVlc3RJZCwg
UmVmUHRyPEpTT046Ok9iamVjdD4mJikKK3sKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKKyAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7CisgICAgICAg
IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlNyhyZXF1ZXN0SWQpOworICAgICAg
ICByZXR1cm47CisgICAgfQorI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQorCisgICAgRXJyb3JTdHJpbmcgZXJyb3I7CisgICAgUmVmPEpTT046Ok9iamVj
dD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBtX2FnZW50LT5sb2FkUmVz
b3VyY2U3KGVycm9yKTsKKworICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCisgICAgICAgIG1fYmFj
a2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwg
ZmFsc2UpOworICAgIGVsc2UKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJv
dG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3Ip
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEJh
Y2tlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3Bh
dGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgt
dmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4K
KworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZh
bHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5z
cGVjdG9yIHsKKworY2xhc3MgRnJvbnRlbmRSb3V0ZXI7CisKK30gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK30gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAor
CisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4K
KworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCituYW1lc3BhY2UgUHJvdG9jb2wgeworCisK
KworCisKKy8vIFR5cGVkZWZzLgorbmFtZXNwYWNlIE5ldHdvcmsyIHsKKy8qIFVuaXF1ZSBsb2Fk
ZXIgaWRlbnRpZmllci4gKi8KK3R5cGVkZWYgU3RyaW5nIExvYWRlcklkOworfSAvLyBOZXR3b3Jr
MgorLy8gRW5kIG9mIHR5cGVkZWZzLgorCisKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKwor
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVj
dHMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNp
emVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKworI2lu
Y2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwor
bmFtZXNwYWNlIEluc3BlY3RvciB7CisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKworCit9IC8v
IG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KKy8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8d3RmL1BsYXRmb3JtLmg+
CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlz
cGF0Y2hlcnMuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKK0Bwcm90b2NvbCBUZXN0
UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI7CitAcHJvdG9jb2wgVGVzdFByb3RvY29sTmV0
d29yazNEb21haW5IYW5kbGVyOworCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCitjbGFzcyBP
YmpDSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRl
cm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKK3B1YmxpYzoKKyAgICBPYmpDSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hl
cihpZDxUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxl
Z2F0ZSA9IGhhbmRsZXI7IH0KKyAgICB2b2lkIGxvYWRSZXNvdXJjZTEobG9uZyByZXF1ZXN0SWQp
IGZpbmFsOworcHJpdmF0ZToKKyAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sTmV0d29yazFE
b21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKK307CisKK2NsYXNzIE9iakNJbnNwZWN0b3JOZXR3
b3JrM0JhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZU5ldHdvcmszQmFj
a2VuZERpc3BhdGNoZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgor
ICAgIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2Nv
bE5ldHdvcmszRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsg
fQorICAgIHZvaWQgbG9hZFJlc291cmNlMShsb25nIHJlcXVlc3RJZCkgZmluYWw7CisgICAgdm9p
ZCBsb2FkUmVzb3VyY2UyKGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKKyAgICB2b2lkIGxvYWRSZXNv
dXJjZTMobG9uZyByZXF1ZXN0SWQpIGZpbmFsOworICAgIHZvaWQgbG9hZFJlc291cmNlNChsb25n
IHJlcXVlc3RJZCkgZmluYWw7CisgICAgdm9pZCBsb2FkUmVzb3VyY2U1KGxvbmcgcmVxdWVzdElk
KSBmaW5hbDsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTYobG9uZyByZXF1ZXN0SWQpIGZpbmFsOwor
ICAgIHZvaWQgbG9hZFJlc291cmNlNyhsb25nIHJlcXVlc3RJZCkgZmluYWw7Citwcml2YXRlOgor
ICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkhhbmRsZXI+PiBtX2Rl
bGVnYXRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNp
bXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSAiVGVz
dFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9y
IHsKKwordm9pZCBPYmpDSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJl
c291cmNlMShsb25nIHJlcXVlc3RJZCkKK3sKKyAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRz
VG9TZWxlY3RvcjpAc2VsZWN0b3IobG9hZFJlc291cmNlMVdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nl
c3NDYWxsYmFjazopXSkgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90
b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAi
J05ldHdvcmsxLmxvYWRSZXNvdXJjZTEnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7CisgICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBC
YWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICB9OworCisgICAgaWQgc3VjY2Vz
c0NhbGxiYWNrID0gXnsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNl
KHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2UpOworICAgIH07CisKKyAg
ICBbbV9kZWxlZ2F0ZSBsb2FkUmVzb3VyY2UxV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFj
ayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKK30KKwordm9pZCBPYmpDSW5zcGVj
dG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMShsb25nIHJlcXVlc3RJ
ZCkKK3sKKyAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Io
bG9hZFJlc291cmNlMVdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgeworICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwg
QmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmszLmxvYWRSZXNvdXJj
ZTEnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5k
UGVuZGluZ0Vycm9ycygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWQgZXJyb3JD
YWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVy
KCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2Vy
dmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRp
bmdFcnJvcnMoKTsKKyAgICB9OworCisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKKyAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKSwgZmFsc2UpOworICAgIH07CisKKyAgICBbbV9kZWxlZ2F0ZSBsb2FkUmVz
b3VyY2UxV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3Vj
Y2Vzc0NhbGxiYWNrXTsKK30KKwordm9pZCBPYmpDSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlz
cGF0Y2hlcjo6bG9hZFJlc291cmNlMihsb25nIHJlcXVlc3RJZCkKK3sKKyAgICBpZiAoIVttX2Rl
bGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IobG9hZFJlc291cmNlMldpdGhFcnJv
ckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1l
dGhvZE5vdEZvdW5kLCAiJ05ldHdvcmszLmxvYWRSZXNvdXJjZTInIHdhcyBub3QgZm91bmQiX3Mp
OworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcg
KmVycm9yKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJy
b3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICB9Owor
CisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2Up
OworICAgIH07CisKKyAgICBbbV9kZWxlZ2F0ZSBsb2FkUmVzb3VyY2UyV2l0aEVycm9yQ2FsbGJh
Y2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKK30KKwor
dm9pZCBPYmpDSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNl
Myhsb25nIHJlcXVlc3RJZCkKK3sKKyAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxl
Y3RvcjpAc2VsZWN0b3IobG9hZFJlc291cmNlM1dpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxs
YmFjazopXSkgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVy
cm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdv
cmszLmxvYWRSZXNvdXJjZTMnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7CisgICAgICAgIGJh
Y2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5k
RGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICB9OworCisgICAgaWQgc3VjY2Vzc0NhbGxi
YWNrID0gXnsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVl
c3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2UpOworICAgIH07CisKKyAgICBbbV9k
ZWxlZ2F0ZSBsb2FkUmVzb3VyY2UzV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNj
ZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKK30KKwordm9pZCBPYmpDSW5zcGVjdG9yTmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNChsb25nIHJlcXVlc3RJZCkKK3sK
KyAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IobG9hZFJl
c291cmNlNFdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgeworICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2Vu
ZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmszLmxvYWRSZXNvdXJjZTQnIHdh
cyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGlu
Z0Vycm9ycygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWQgZXJyb3JDYWxsYmFj
ayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJl
cG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJy
b3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJv
cnMoKTsKKyAgICB9OworCisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKKyAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKSwgZmFsc2UpOworICAgIH07CisKKyAgICBbbV9kZWxlZ2F0ZSBsb2FkUmVzb3VyY2U0
V2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0Nh
bGxiYWNrXTsKK30KKwordm9pZCBPYmpDSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hl
cjo6bG9hZFJlc291cmNlNShsb25nIHJlcXVlc3RJZCkKK3sKKyAgICBpZiAoIVttX2RlbGVnYXRl
IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IobG9hZFJlc291cmNlNVdpdGhFcnJvckNhbGxi
YWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5y
ZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5v
dEZvdW5kLCAiJ05ldHdvcmszLmxvYWRSZXNvdXJjZTUnIHdhcyBub3QgZm91bmQiX3MpOworICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9y
KSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVx
dWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAg
YmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICB9OworCisgICAg
aWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2Vu
ZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2UpOworICAg
IH07CisKKyAgICBbbV9kZWxlZ2F0ZSBsb2FkUmVzb3VyY2U1V2l0aEVycm9yQ2FsbGJhY2s6ZXJy
b3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKK30KKwordm9pZCBP
YmpDSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNihsb25n
IHJlcXVlc3RJZCkKK3sKKyAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpA
c2VsZWN0b3IobG9hZFJlc291cmNlNldpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazop
XSkgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJl
cXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmszLmxv
YWRSZXNvdXJjZTYnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7CisgICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0
Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICB9OworCisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0g
XnsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwg
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2UpOworICAgIH07CisKKyAgICBbbV9kZWxlZ2F0
ZSBsb2FkUmVzb3VyY2U2V2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2Fs
bGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKK30KKwordm9pZCBPYmpDSW5zcGVjdG9yTmV0d29yazNC
YWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNyhsb25nIHJlcXVlc3RJZCkKK3sKKyAgICBp
ZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IobG9hZFJlc291cmNl
N1dpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgeworICAgICAgICBiYWNrZW5k
RGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3Bh
dGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmszLmxvYWRSZXNvdXJjZTcnIHdhcyBub3Qg
Zm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9y
cygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4o
TlNTdHJpbmcgKmVycm9yKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFBy
b3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVy
cm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsK
KyAgICB9OworCisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKKyAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KSwgZmFsc2UpOworICAgIH07CisKKyAgICBbbV9kZWxlZ2F0ZSBsb2FkUmVzb3VyY2U3V2l0aEVy
cm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNr
XTsKK30KKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xDb25maWd1cmF0aW9uLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21h
aW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8d3RmL1BsYXRmb3JtLmg+CisKKyNpbXBv
cnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KKworX19hdHRyaWJ1dGVfXygodmlzaWJp
bGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24g
OiBOU09iamVjdAorQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNldE5ldHdv
cmsxSGFuZGxlcjopIGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4gbmV0d29y
azFIYW5kbGVyOworQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNldE5ldHdv
cmszSGFuZGxlcjopIGlkPFRlc3RQcm90b2NvbE5ldHdvcmszRG9tYWluSGFuZGxlcj4gbmV0d29y
azNIYW5kbGVyOworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJh
dGlvbi5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29t
bWFuZC1zaXplcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKKworI2ltcG9ydCAiVGVz
dFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRj
aGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdl
bnQuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJv
bGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2Vu
ZERpc3BhdGNoZXJzLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVu
dGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KK3sKKyAgICBBdWdtZW50YWJsZUluc3Bl
Y3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworICAgIGlkPFRlc3RQcm90b2NvbE5ldHdvcmsx
RG9tYWluSGFuZGxlcj4gX25ldHdvcmsxSGFuZGxlcjsKKyAgICBpZDxUZXN0UHJvdG9jb2xOZXR3
b3JrM0RvbWFpbkhhbmRsZXI+IF9uZXR3b3JrM0hhbmRsZXI7Cit9CisKKy0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29u
dHJvbGxlcgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAg
ICAgICByZXR1cm4gbmlsOworICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBfY29udHJvbGxl
ciA9IGNvbnRyb2xsZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYwor
eworICAgIFtfbmV0d29yazFIYW5kbGVyIHJlbGVhc2VdOworICAgIFtfbmV0d29yazNIYW5kbGVy
IHJlbGVhc2VdOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAodm9pZClzZXROZXR3b3Jr
MUhhbmRsZXI6KGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4paGFuZGxlcgor
eworICAgIGlmIChoYW5kbGVyID09IF9uZXR3b3JrMUhhbmRsZXIpCisgICAgICAgIHJldHVybjsK
KworICAgIFtfbmV0d29yazFIYW5kbGVyIHJlbGVhc2VdOworICAgIF9uZXR3b3JrMUhhbmRsZXIg
PSBbaGFuZGxlciByZXRhaW5dOworCisgICAgYXV0byBhbHRlcm5hdGVEaXNwYXRjaGVyID0gbWFr
ZVVuaXF1ZTxPYmpDSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7
CisgICAgYXV0byBhbHRlcm5hdGVBZ2VudCA9IG1ha2VVbmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hh
YmxlQWdlbnQ8TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciwgQWx0ZXJuYXRlTmV0d29yazFCYWNr
ZW5kRGlzcGF0Y2hlcj4+KCJOZXR3b3JrMSJfcywgKl9jb250cm9sbGVyLCBXVEZNb3ZlKGFsdGVy
bmF0ZURpc3BhdGNoZXIpKTsKKyAgICBfY29udHJvbGxlci0+YXBwZW5kRXh0cmFBZ2VudChXVEZN
b3ZlKGFsdGVybmF0ZUFnZW50KSk7Cit9CisKKy0gKGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9t
YWluSGFuZGxlcj4pbmV0d29yazFIYW5kbGVyCit7CisgICAgcmV0dXJuIF9uZXR3b3JrMUhhbmRs
ZXI7Cit9CisKKy0gKHZvaWQpc2V0TmV0d29yazNIYW5kbGVyOihpZDxUZXN0UHJvdG9jb2xOZXR3
b3JrM0RvbWFpbkhhbmRsZXI+KWhhbmRsZXIKK3sKKyAgICBpZiAoaGFuZGxlciA9PSBfbmV0d29y
azNIYW5kbGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBbX25ldHdvcmszSGFuZGxlciByZWxl
YXNlXTsKKyAgICBfbmV0d29yazNIYW5kbGVyID0gW2hhbmRsZXIgcmV0YWluXTsKKworICAgIGF1
dG8gYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IG1ha2VVbmlxdWU8T2JqQ0luc3BlY3Rvck5ldHdvcmsz
QmFja2VuZERpc3BhdGNoZXI+KGhhbmRsZXIpOworICAgIGF1dG8gYWx0ZXJuYXRlQWdlbnQgPSBt
YWtlVW5pcXVlPEFsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50PE5ldHdvcmszQmFja2VuZERpc3Bh
dGNoZXIsIEFsdGVybmF0ZU5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI+PigiTmV0d29yazMiX3Ms
ICpfY29udHJvbGxlciwgV1RGTW92ZShhbHRlcm5hdGVEaXNwYXRjaGVyKSk7CisgICAgX2NvbnRy
b2xsZXItPmFwcGVuZEV4dHJhQWdlbnQoV1RGTW92ZShhbHRlcm5hdGVBZ2VudCkpOworfQorCist
IChpZDxUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkhhbmRsZXI+KW5ldHdvcmszSGFuZGxlcgor
eworICAgIHJldHVybiBfbmV0d29yazNIYW5kbGVyOworfQorCitAZW5kCisKKworIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCisvLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbElu
dGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2lt
cG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKwor
CisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRh
dGlvbi5oPgorI2ltcG9ydCA8d3RmL1BsYXRmb3JtLmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rv
ci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KKworCisKKworCisKKworCitAcHJvdG9jb2wgVGVz
dFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyIDxOU09iamVjdD4KK0BvcHRpb25hbAorLSAo
dm9pZClsb2FkUmVzb3VyY2UxV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVy
cm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKSh2b2lkKSlzdWNjZXNz
Q2FsbGJhY2s7CitAZW5kCisKK0Bwcm90b2NvbCBUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkhh
bmRsZXIgPE5TT2JqZWN0PgorQG9wdGlvbmFsCistICh2b2lkKWxvYWRSZXNvdXJjZTFXaXRoRXJy
b3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vz
c0NhbGxiYWNrOih2b2lkKF4pKHZvaWQpKXN1Y2Nlc3NDYWxsYmFjazsKKy0gKHZvaWQpbG9hZFJl
c291cmNlMldpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JD
YWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikodm9pZCkpc3VjY2Vzc0NhbGxiYWNrOwor
LSAodm9pZClsb2FkUmVzb3VyY2UzV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcg
KmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKSh2b2lkKSlzdWNj
ZXNzQ2FsbGJhY2s7CistICh2b2lkKWxvYWRSZXNvdXJjZTRXaXRoRXJyb3JDYWxsYmFjazoodm9p
ZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lk
KF4pKHZvaWQpKXN1Y2Nlc3NDYWxsYmFjazsKKy0gKHZvaWQpbG9hZFJlc291cmNlNVdpdGhFcnJv
ckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNz
Q2FsbGJhY2s6KHZvaWQoXikodm9pZCkpc3VjY2Vzc0NhbGxiYWNrOworLSAodm9pZClsb2FkUmVz
b3VyY2U2V2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNh
bGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKSh2b2lkKSlzdWNjZXNzQ2FsbGJhY2s7Cist
ICh2b2lkKWxvYWRSZXNvdXJjZTdXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAq
ZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKHZvaWQpKXN1Y2Nl
c3NDYWxsYmFjazsKK0BlbmQKKworCisKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3Rv
Y29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1z
aXplcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNp
bXBvcnQgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBv
cnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0
Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPHd0Zi9KU09O
VmFsdWVzLmg+CisKKworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAor
CisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNp
emVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lt
cG9ydCA8d3RmL1BsYXRmb3JtLmg+CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9y
dCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgorCituYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgorT3B0aW9u
YWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7
CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlu
cy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5
cGVQYXJzZXIuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQ
cml2YXRlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbnRlcmZhY2UgVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChOZXR3b3JrMkRvbWFpbikKKworKyAodm9pZClfcGFy
c2VMb2FkZXJJZDooTlNTdHJpbmcgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7
CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAo
TmV0d29yazJEb21haW4pCisKKysgKHZvaWQpX3BhcnNlTG9hZGVySWQ6KE5TU3RyaW5nICoqKW91
dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9CQURfVFlQRShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSAo
TlNTdHJpbmcgKilwYXlsb2FkOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5
cGVzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZh
cnlpbmctY29tbWFuZC1zaXplcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JX
SVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKyNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+
CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9y
OworCisKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
ZW51bS12YWx1ZXMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZW51bS12YWx1ZXMuanNvbi1yZXN1bHQKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjhjYjU4MzMyMzM1Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVj
dGVkL2VudW0tdmFsdWVzLmpzb24tcmVzdWx0CkBAIC0wLDAgKzEsMTIxOCBAQAorIyMjIEJlZ2lu
IEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcy5pbgorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworLy8gVHlwZURvbWFpbgorSW5zcGVjdG9yQmFja2VuZC5yZWdp
c3RlckRvbWFpbigiVHlwZURvbWFpbiIsIG51bGwpOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rl
ckVudW0oIlR5cGVEb21haW4uVHlwZURvbWFpbkVudW0iLCB7U2hhcmVkOiAic2hhcmVkIiwgUmVk
OiAicmVkIiwgR3JlZW46ICJncmVlbiIsIEJsdWU6ICJibHVlIn0pOworSW5zcGVjdG9yQmFja2Vu
ZC5hY3RpdmF0ZURvbWFpbigiVHlwZURvbWFpbiIsIG51bGwpOworCisvLyBDb21tYW5kRG9tYWlu
CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJDb21tYW5kRG9tYWluIiwgbnVsbCk7
CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiQ29tbWFuZERvbWFpbi5jb21tYW5k
V2l0aEVudW1SZXR1cm5WYWx1ZSIsIG51bGwsIFtdLCBbInJldHVyblZhbHVlIl0pOworSW5zcGVj
dG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiQ29tbWFuZERvbWFpbiIsIG51bGwpOworCisvLyBF
dmVudERvbWFpbgorSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiRXZlbnREb21haW4i
LCBudWxsKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJFdmVudERvbWFpbi5FdmVu
dFdpdGhFbnVtUGFyYW1ldGVyUGFyYW1ldGVyIiwge1NoYXJlZDogInNoYXJlZCIsIEJsYWNrOiAi
YmxhY2siLCBXaGl0ZTogIndoaXRlIn0pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckV2ZW50
KCJFdmVudERvbWFpbi5ldmVudFdpdGhFbnVtUGFyYW1ldGVyIiwgbnVsbCwgWyJwYXJhbWV0ZXIi
XSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnREb21haW5EaXNwYXRjaGVyID0gSW5z
cGVjdG9yQmFja2VuZC5yZWdpc3RlckRpc3BhdGNoZXIuYmluZChJbnNwZWN0b3JCYWNrZW5kLCAi
RXZlbnREb21haW4iKTsKK0luc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkV2ZW50RG9t
YWluIiwgbnVsbCk7CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcy5p
bgorCisjIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKworbmFtZXNwYWNlIElu
c3BlY3RvciB7CisKK2NsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoK
KyAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4m
JiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIp
OyB9CisgICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQorcHJpdmF0ZToKKyAgICBSZWZQdHI8
QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Cit9OworCisKK2NsYXNzIEFs
dGVybmF0ZUNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+QWx0ZXJuYXRlQ29tbWFu
ZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGNvbW1hbmRX
aXRoRW51bVJldHVyblZhbHVlKGxvbmcgY2FsbElkKSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQorIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgK
KworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYv
UGxhdGZvcm0uaD4KKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRl
ZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKK2NsYXNzIEFsdGVybmF0ZUNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hl
cjsKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKwor
Y2xhc3MgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CitwdWJsaWM6Cisg
ICAgLy8gTmFtZWQgYWZ0ZXIgcGFyYW1ldGVyICdyZXR1cm5WYWx1ZScgd2hpbGUgZ2VuZXJhdGlu
ZyBjb21tYW5kL2V2ZW50IGNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlLgorICAgIGVudW0gY2xh
c3MgUmV0dXJuVmFsdWUgeworICAgICAgICBTaGFyZWQgPSAwLAorICAgICAgICBDeWFuID0gNiwK
KyAgICAgICAgTWFnZW50YSA9IDcsCisgICAgICAgIFllbGxvdyA9IDgsCisgICAgfTsgLy8gZW51
bSBjbGFzcyBSZXR1cm5WYWx1ZQorICAgIHZpcnR1YWwgdm9pZCBjb21tYW5kV2l0aEVudW1SZXR1
cm5WYWx1ZShFcnJvclN0cmluZyYsIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXI6OlJldHVyblZhbHVlKiBvdXRfcmV0dXJuVmFsdWUpID0gMDsKK3Byb3RlY3RlZDoKKyAgICB2
aXJ0dWFsIH5Db21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7Cit9OworCitj
bGFzcyBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxl
bWVudGFsQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8Q29tbWFu
ZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBDb21t
YW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgdm9pZCBkaXNwYXRjaChs
b25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYg
bWVzc2FnZSkgZmluYWw7Citwcml2YXRlOgorICAgIHZvaWQgY29tbWFuZFdpdGhFbnVtUmV0dXJu
VmFsdWUobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7
CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCitwdWJsaWM6Cisg
ICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZUNvbW1hbmREb21haW5CYWNr
ZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVybmF0ZURpc3BhdGNo
ZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9Citwcml2YXRlOgorICAgIEFsdGVybmF0ZUNvbW1h
bmREb21haW5CYWNrZW5kRGlzcGF0Y2hlciogbV9hbHRlcm5hdGVEaXNwYXRjaGVyIHsgbnVsbHB0
ciB9OworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQor
cHJpdmF0ZToKKyAgICBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3Bh
dGNoZXImLCBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgQ29t
bWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2VudCB7IG51bGxwdHIgfTsK
K307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0QmFja2Vu
ZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMu
Y3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYv
SlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQorI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIK
KyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKK0NvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXI6On5Db21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9CisKK1JlZjxD
b21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI+IENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0
Y2hlcjo6Y3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgQ29tbWFu
ZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCit7CisgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRj
aGVyLCBhZ2VudCkpOworfQorCitDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1h
bmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3Bh
dGNoZXIsIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQorICAg
IDogU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCisgICAg
LCBtX2FnZW50KGFnZW50KQoreworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlz
cGF0Y2hlckZvckRvbWFpbigiQ29tbWFuZERvbWFpbiJfcywgdGhpcyk7Cit9CisKK3ZvaWQgQ29t
bWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29u
c3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKK3sKKyAgICBS
ZWY8Q29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKKworICAg
IFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7CisgICAgbWVzc2FnZS0+Z2V0T2JqZWN0
KCJwYXJhbXMiX3MsIHBhcmFtZXRlcnMpOworCisgICAgaWYgKG1ldGhvZCA9PSAiY29tbWFuZFdp
dGhFbnVtUmV0dXJuVmFsdWUiKSB7CisgICAgICAgIGNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVl
KHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmRE
aXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidDb21tYW5kRG9tYWluLiIgKyBtZXRob2QgKyAi
JyB3YXMgbm90IGZvdW5kIik7Cit9CisKK3ZvaWQgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRj
aGVyOjpjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpT
T046Ok9iamVjdD4mJikKK3sKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKKyAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7CisgICAgICAgIG1fYWx0ZXJu
YXRlRGlzcGF0Y2hlci0+Y29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUocmVxdWVzdElkKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKKworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgIFJlZjxKU09OOjpP
YmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgQ29tbWFuZERvbWFp
bkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UmV0dXJuVmFsdWUgb3V0X3JldHVyblZhbHVlOwor
ICAgIG1fYWdlbnQtPmNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlKGVycm9yLCAmb3V0X3JldHVy
blZhbHVlKTsKKworICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCisgICAgICAgIHJlc3VsdC0+c2V0
U3RyaW5nKCJyZXR1cm5WYWx1ZSJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6
OmdldEVudW1Db25zdGFudFZhbHVlKG91dF9yZXR1cm5WYWx1ZSkpOworCisgICAgaWYgKCFlcnJv
ci5sZW5ndGgoKSkKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJl
cXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7CisgICAgZWxzZQorICAgICAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpT
ZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVn
aW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0u
aD4KKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDx3dGYvSlNP
TlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKKworY2xhc3MgRnJvbnRlbmRSb3V0ZXI7CisKK2NsYXNzIEV2ZW50RG9tYWlu
RnJvbnRlbmREaXNwYXRjaGVyIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1Ymxp
YzoKKyAgICBFdmVudERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcihGcm9udGVuZFJvdXRlciYgZnJv
bnRlbmRSb3V0ZXIpIDogbV9mcm9udGVuZFJvdXRlcihmcm9udGVuZFJvdXRlcikgeyB9CisgICAg
ICAgIC8vIE5hbWVkIGFmdGVyIHBhcmFtZXRlciAncGFyYW1ldGVyJyB3aGlsZSBnZW5lcmF0aW5n
IGNvbW1hbmQvZXZlbnQgZXZlbnRXaXRoRW51bVBhcmFtZXRlci4KKyAgICAgICAgZW51bSBjbGFz
cyBQYXJhbWV0ZXIgeworICAgICAgICAgICAgU2hhcmVkID0gMCwKKyAgICAgICAgICAgIEJsYWNr
ID0gNCwKKyAgICAgICAgICAgIFdoaXRlID0gNSwKKyAgICAgICAgfTsgLy8gZW51bSBjbGFzcyBQ
YXJhbWV0ZXIKKyAgICB2b2lkIGV2ZW50V2l0aEVudW1QYXJhbWV0ZXIoUGFyYW1ldGVyIHBhcmFt
ZXRlcik7Citwcml2YXRlOgorICAgIEZyb250ZW5kUm91dGVyJiBtX2Zyb250ZW5kUm91dGVyOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVu
ZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJz
LmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3ZvaWQgRXZlbnRE
b21haW5Gcm9udGVuZERpc3BhdGNoZXI6OmV2ZW50V2l0aEVudW1QYXJhbWV0ZXIoUGFyYW1ldGVy
IHBhcmFtZXRlcikKK3sKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9z
LCAiRXZlbnREb21haW4uZXZlbnRXaXRoRW51bVBhcmFtZXRlciJfcyk7CisgICAgUmVmPEpTT046
Ok9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwYXJh
bXNPYmplY3QtPnNldFN0cmluZygicGFyYW1ldGVyIl9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpU
ZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUocGFyYW1ldGVyKSk7CisgICAganNvbk1l
c3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIl9zLCBXVEZNb3ZlKHBhcmFtc09iamVjdCkpOworCisg
ICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygp
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEZy
b250ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmpl
Y3RzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4K
KworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCituYW1lc3BhY2UgUHJvdG9jb2wgeworCisK
KworLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCituYW1lc3BhY2UgVHlwZURvbWFpbiB7CitlbnVt
IGNsYXNzIFR5cGVEb21haW5FbnVtOworfSAvLyBUeXBlRG9tYWluCisvLyBFbmQgb2YgZm9yd2Fy
ZCBkZWNsYXJhdGlvbnMuCisKKworCisKK25hbWVzcGFjZSBUZXN0SGVscGVycyB7CisKK1N0cmlu
ZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IFN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkKK3sKKyAgICByZXR1cm4g
Z2V0RW51bUNvbnN0YW50VmFsdWUoc3RhdGljX2Nhc3Q8aW50PihlbnVtVmFsdWUpKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKKworbmFtZXNwYWNlIFR5cGVEb21haW4geworCitl
bnVtIGNsYXNzIFR5cGVEb21haW5FbnVtIHsKKyAgICBTaGFyZWQgPSAwLAorICAgIFJlZCA9IDEs
CisgICAgR3JlZW4gPSAyLAorICAgIEJsdWUgPSAzLAorfTsgLy8gZW51bSBjbGFzcyBUeXBlRG9t
YWluRW51bQorCit9IC8vIFR5cGVEb21haW4KKworCisKK25hbWVzcGFjZSBUZXN0SGVscGVycyB7
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFByb3RvY29sRW51bVR5cGU+CitPcHRpb25hbDxQcm90b2Nv
bEVudW1UeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJik7CisKKy8v
IEVudW1zIGluIHRoZSAnVHlwZURvbWFpbicgRG9tYWluCit0ZW1wbGF0ZTw+CitPcHRpb25hbDxJ
bnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51bT4gcGFyc2VFbnVt
VmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46OlR5cGVEb21h
aW5FbnVtPihjb25zdCBTdHJpbmcmKTsKKworfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKKwor
fSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKK25h
bWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7
CisKKy8vIEhhc2ggZGVjbGFyYXRpb25zIGluIHRoZSAnVHlwZURvbWFpbicgRG9tYWluCit0ZW1w
bGF0ZTw+CitzdHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFp
bjo6VHlwZURvbWFpbkVudW0+IHsKKyAgICB0eXBlZGVmIEludEhhc2g8SW5zcGVjdG9yOjpQcm90
b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW0+IEhhc2g7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXVEYKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bE9iamVjdHMuaCIKKworI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK25hbWVzcGFjZSBQcm90
b2NvbCB7CisKK25hbWVzcGFjZSBUZXN0SGVscGVycyB7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBj
b25zdCBlbnVtX2NvbnN0YW50X3ZhbHVlc1tdID0geworICAgICJzaGFyZWQiLAorICAgICJyZWQi
LAorICAgICJncmVlbiIsCisgICAgImJsdWUiLAorICAgICJibGFjayIsCisgICAgIndoaXRlIiwK
KyAgICAiY3lhbiIsCisgICAgIm1hZ2VudGEiLAorICAgICJ5ZWxsb3ciLAorfTsKKworU3RyaW5n
IGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CisgICAgcmV0dXJuIGVudW1fY29uc3Rh
bnRfdmFsdWVzW2NvZGVdOworfQorCisvLyBFbnVtcyBpbiB0aGUgJ1R5cGVEb21haW4nIERvbWFp
bgorCit0ZW1wbGF0ZTw+CitPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWlu
OjpUeXBlRG9tYWluRW51bT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlR5cGVEb21haW46OlR5cGVEb21haW5FbnVtPihjb25zdCBTdHJpbmcmIHByb3RvY29s
U3RyaW5nKQoreworICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsK
KyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9t
YWluRW51bTo6U2hhcmVkLAorICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5
cGVEb21haW46OlR5cGVEb21haW5FbnVtOjpSZWQsCisgICAgICAgIChzaXplX3QpSW5zcGVjdG9y
OjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW06OkdyZWVuLAorICAgICAgICAo
c2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46OlR5cGVEb21haW5FbnVtOjpC
bHVlLAorICAgIH07CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCA0OyArK2kpCisgICAgICAg
IGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVl
c1tpXV0pCisgICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21h
aW46OlR5cGVEb21haW5FbnVtKWNvbnN0YW50VmFsdWVzW2ldOworCisgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKK30KKworfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKKworCisKK30gLy8gbmFt
ZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGVudW0tdmFsdWVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI2ltcG9ydCA8d3RmL1BsYXRmb3JtLmg+CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbmNsdWRlIDx3dGYv
UmV0YWluUHRyLmg+CisKK0Bwcm90b2NvbCBUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluRG9tYWlu
SGFuZGxlcjsKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworY2xhc3MgT2JqQ0luc3BlY3Rv
ckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVD
b21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOworcHVibGljOgorICAgIE9iakNJbnNwZWN0b3JDb21tYW5kRG9tYWluQmFja2VuZERpc3Bh
dGNoZXIoaWQ8VGVzdFByb3RvY29sQ29tbWFuZERvbWFpbkRvbWFpbkhhbmRsZXI+IGhhbmRsZXIp
IHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KKyAgICB2b2lkIGNvbW1hbmRXaXRoRW51bVJldHVy
blZhbHVlKGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKK3ByaXZhdGU6CisgICAgUmV0YWluUHRyPGlk
PFRlc3RQcm90b2NvbENvbW1hbmREb21haW5Eb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKK307
CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNr
ZW5kRGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVt
LXZhbHVlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
KyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNo
ZXJzLmgiCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2luY2x1ZGUgIlRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+
CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit2b2lkIE9iakNJbnNwZWN0b3JDb21tYW5kRG9t
YWluQmFja2VuZERpc3BhdGNoZXI6OmNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlKGxvbmcgcmVx
dWVzdElkKQoreworICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxl
Y3Rvcihjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZVdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3ND
YWxsYmFjazopXSkgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2Nv
bEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0Nv
bW1hbmREb21haW4uY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUnIHdhcyBub3QgZm91bmQiX3Mp
OworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcg
KmVycm9yKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJy
b3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICB9Owor
CisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluQ29t
bWFuZFdpdGhFbnVtUmV0dXJuVmFsdWVSZXR1cm5WYWx1ZSByZXR1cm5WYWx1ZSkgeworICAgICAg
ICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHRPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OworICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygicmV0dXJuVmFsdWUiX3MsIHRvUHJv
dG9jb2xTdHJpbmcocmV0dXJuVmFsdWUpKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHRPYmplY3QpLCBmYWxzZSk7Cisg
ICAgfTsKKworICAgIFttX2RlbGVnYXRlIGNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlV2l0aEVy
cm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNr
XTsKK30KKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xDb25maWd1cmF0aW9uLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVt
LXZhbHVlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
KyNpbXBvcnQgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFBy
b3RvY29sLmg+CisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGlu
dGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKK0Bwcm9wZXJ0eSAo
bm9uYXRvbWljLCByZXRhaW4sIHNldHRlcj1zZXRDb21tYW5kRG9tYWluSGFuZGxlcjopIGlkPFRl
c3RQcm90b2NvbENvbW1hbmREb21haW5Eb21haW5IYW5kbGVyPiBjb21tYW5kRG9tYWluSGFuZGxl
cjsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgVGVzdFByb3RvY29sRXZlbnREb21h
aW5Eb21haW5FdmVudERpc3BhdGNoZXIgKmV2ZW50RG9tYWluRXZlbnREaXNwYXRjaGVyOworQGVu
ZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9u
LmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW1wb3J0ICJUZXN0UHJv
dG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVy
bmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50
YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNw
ZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCit7Cisg
ICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKKyAgICBpZDxU
ZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluRG9tYWluSGFuZGxlcj4gX2NvbW1hbmREb21haW5IYW5k
bGVyOworICAgIFRlc3RQcm90b2NvbEV2ZW50RG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyICpf
ZXZlbnREb21haW5FdmVudERpc3BhdGNoZXI7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0
aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgor
eworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1
cm4gbmlsOworICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRy
b2xsZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIFtf
Y29tbWFuZERvbWFpbkhhbmRsZXIgcmVsZWFzZV07CisgICAgW19ldmVudERvbWFpbkV2ZW50RGlz
cGF0Y2hlciByZWxlYXNlXTsKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0gKHZvaWQpc2V0
Q29tbWFuZERvbWFpbkhhbmRsZXI6KGlkPFRlc3RQcm90b2NvbENvbW1hbmREb21haW5Eb21haW5I
YW5kbGVyPiloYW5kbGVyCit7CisgICAgaWYgKGhhbmRsZXIgPT0gX2NvbW1hbmREb21haW5IYW5k
bGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBbX2NvbW1hbmREb21haW5IYW5kbGVyIHJlbGVh
c2VdOworICAgIF9jb21tYW5kRG9tYWluSGFuZGxlciA9IFtoYW5kbGVyIHJldGFpbl07CisKKyAg
ICBhdXRvIGFsdGVybmF0ZURpc3BhdGNoZXIgPSBtYWtlVW5pcXVlPE9iakNJbnNwZWN0b3JDb21t
YW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI+KGhhbmRsZXIpOworICAgIGF1dG8gYWx0ZXJuYXRl
QWdlbnQgPSBtYWtlVW5pcXVlPEFsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50PENvbW1hbmREb21h
aW5CYWNrZW5kRGlzcGF0Y2hlciwgQWx0ZXJuYXRlQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRj
aGVyPj4oIkNvbW1hbmREb21haW4iX3MsICpfY29udHJvbGxlciwgV1RGTW92ZShhbHRlcm5hdGVE
aXNwYXRjaGVyKSk7CisgICAgX2NvbnRyb2xsZXItPmFwcGVuZEV4dHJhQWdlbnQoV1RGTW92ZShh
bHRlcm5hdGVBZ2VudCkpOworfQorCistIChpZDxUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluRG9t
YWluSGFuZGxlcj4pY29tbWFuZERvbWFpbkhhbmRsZXIKK3sKKyAgICByZXR1cm4gX2NvbW1hbmRE
b21haW5IYW5kbGVyOworfQorCistIChUZXN0UHJvdG9jb2xFdmVudERvbWFpbkRvbWFpbkV2ZW50
RGlzcGF0Y2hlciAqKWV2ZW50RG9tYWluRXZlbnREaXNwYXRjaGVyCit7CisgICAgaWYgKCFfZXZl
bnREb21haW5FdmVudERpc3BhdGNoZXIpCisgICAgICAgIF9ldmVudERvbWFpbkV2ZW50RGlzcGF0
Y2hlciA9IFtbVGVzdFByb3RvY29sRXZlbnREb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgYWxs
b2NdIGluaXRXaXRoQ29udHJvbGxlcjpfY29udHJvbGxlcl07CisgICAgcmV0dXJuIF9ldmVudERv
bWFpbkV2ZW50RGlzcGF0Y2hlcjsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbi5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZl
bnREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0t
dmFsdWVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBu
YW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sRXZlbnRE
b21haW5Eb21haW5FdmVudERpc3BhdGNoZXIKK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNv
bnRyb2xsZXIqIF9jb250cm9sbGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250
cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAg
ICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5p
bDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVy
OworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWV2ZW50V2l0aEVudW1QYXJhbWV0ZXJX
aXRoUGFyYW1ldGVyOihUZXN0UHJvdG9jb2xFdmVudERvbWFpbkV2ZW50V2l0aEVudW1QYXJhbWV0
ZXJQYXJhbWV0ZXIpcGFyYW1ldGVyCit7CisgICAgY29uc3QgRnJvbnRlbmRSb3V0ZXImIHJvdXRl
ciA9IF9jb250cm9sbGVyLT5mcm9udGVuZFJvdXRlcigpOworCisgICAgUmVmPEpTT046Ok9iamVj
dD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGpzb25NZXNzYWdl
LT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkV2ZW50RG9tYWluLmV2ZW50V2l0aEVudW1QYXJhbWV0
ZXIiX3MpOworICAgIFJlZjxKU09OOjpPYmplY3Q+IHBhcmFtc09iamVjdCA9IEpTT046Ok9iamVj
dDo6Y3JlYXRlKCk7CisgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInBhcmFtZXRlciJfcywg
dG9Qcm90b2NvbFN0cmluZyhwYXJhbWV0ZXIpKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0
KCJwYXJhbXMiX3MsIFdURk1vdmUocGFyYW1zT2JqZWN0KSk7CisgICAgcm91dGVyLnNlbmRFdmVu
dChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworfQorCitAZW5kCisKKworIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2wuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFs
dWVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lt
cG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisjaW1wb3J0IDx3dGYvUGxhdGZvcm0uaD4K
KworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgorCisKKwor
Cit0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bSkg
eworICAgIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtU2hhcmVkLAorICAgIFRlc3RQcm90b2Nv
bFR5cGVEb21haW5FbnVtUmVkLAorICAgIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtR3JlZW4s
CisgICAgVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1CbHVlLAorfTsKKworCisKK0Bwcm90b2Nv
bCBUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluRG9tYWluSGFuZGxlciA8TlNPYmplY3Q+CitAb3B0
aW9uYWwKKy0gKHZvaWQpY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWVXaXRoRXJyb3JDYWxsYmFj
azoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNr
Oih2b2lkKF4pKFRlc3RQcm90b2NvbENvbW1hbmREb21haW5Db21tYW5kV2l0aEVudW1SZXR1cm5W
YWx1ZVJldHVyblZhbHVlIHJldHVyblZhbHVlKSlzdWNjZXNzQ2FsbGJhY2s7CitAZW5kCisKK19f
YXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJv
dG9jb2xFdmVudERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciA6IE5TT2JqZWN0CistICh2b2lk
KWV2ZW50V2l0aEVudW1QYXJhbWV0ZXJXaXRoUGFyYW1ldGVyOihUZXN0UHJvdG9jb2xFdmVudERv
bWFpbkV2ZW50V2l0aEVudW1QYXJhbWV0ZXJQYXJhbWV0ZXIpcGFyYW1ldGVyOworQGVuZAorCisK
KyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVj
dHMuaD4KKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAorCisjIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sSW50ZXJuYWwuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGVudW0tdmFsdWVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI2ltcG9ydCA8d3RmL1BsYXRmb3JtLmg+CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5o
IgorI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKKyNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8
d3RmL0pTT05WYWx1ZXMuaD4KKworQGludGVyZmFjZSBUZXN0UHJvdG9jb2xFdmVudERvbWFpbkRv
bWFpbkV2ZW50RGlzcGF0Y2hlciAoUHJpdmF0ZSkKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENv
bnRyb2xsZXI6KEluc3BlY3Rvcjo6QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250
cm9sbGVyOworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAor
CisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPHd0Zi9QbGF0Zm9ybS5oPgor
CisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90
b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3RlbXBs
YXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KK09wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVBy
b3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOworCitpbmxpbmUgU3RyaW5nIHRvUHJv
dG9jb2xTdHJpbmcoVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0gdmFsdWUpCit7CisgICAgc3dp
dGNoKHZhbHVlKSB7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bVNoYXJlZDoK
KyAgICAgICAgcmV0dXJuICJzaGFyZWQiX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xUeXBlRG9t
YWluRW51bVJlZDoKKyAgICAgICAgcmV0dXJuICJyZWQiX3M7CisgICAgY2FzZSBUZXN0UHJvdG9j
b2xUeXBlRG9tYWluRW51bUdyZWVuOgorICAgICAgICByZXR1cm4gImdyZWVuIl9zOworICAgIGNh
c2UgVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1CbHVlOgorICAgICAgICByZXR1cm4gImJsdWUi
X3M7CisgICAgfQorfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29s
VHlwZURvbWFpbkVudW0+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQor
eworICAgIGlmICh2YWx1ZSA9PSAic2hhcmVkIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2Nv
bFR5cGVEb21haW5FbnVtU2hhcmVkOworICAgIGlmICh2YWx1ZSA9PSAicmVkIikKKyAgICAgICAg
cmV0dXJuIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtUmVkOworICAgIGlmICh2YWx1ZSA9PSAi
Z3JlZW4iKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1HcmVlbjsK
KyAgICBpZiAodmFsdWUgPT0gImJsdWUiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sVHlw
ZURvbWFpbkVudW1CbHVlOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0K
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBv
cnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQ
cm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7
CisKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChUeXBlRG9tYWluRG9t
YWluKQorCisrICh2b2lkKV9wYXJzZVR5cGVEb21haW5FbnVtOihOU051bWJlciAqKilvdXRWYWx1
ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChUeXBlRG9tYWluRG9tYWluKQorCisrICh2b2lkKV9w
YXJzZVR5cGVEb21haW5FbnVtOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQp
cGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05T
U3RyaW5nIGNsYXNzXSk7CisgICAgT3B0aW9uYWw8VGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0+
IHJlc3VsdCA9IEluc3BlY3Rvcjo6ZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbFR5cGVE
b21haW5FbnVtPihwYXlsb2FkKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9FTlVNX1ZB
TFVFKHJlc3VsdCwgQCJUeXBlRG9tYWluRW51bSIpOworICAgICpvdXRWYWx1ZSA9IEAocmVzdWx0
LnZhbHVlKCkpOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9j
b2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIK
KyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Cisj
aW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwor
dXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2V2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWlu
LWRlYnVnZ2FibGVUeXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2V2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9t
YWluLWRlYnVnZ2FibGVUeXBlLmpzb24tcmVzdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwLi40OTUzMWZiMzc0YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9ldmVudC10YXJnZXRU
eXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJlc3VsdApAQCAtMCwwICsx
LDEwNDYgQEAKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMuaW4K
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudC10YXJnZXRUeXBlLW1hdGNo
aW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKy8vIERvbWFpbgorSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRv
bWFpbigiRG9tYWluIiwgbnVsbCk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgi
RG9tYWluLkNvbW1hbmQiLCBudWxsLCBbXSwgW10pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rl
ckV2ZW50KCJEb21haW4uRXZlbnQiLCBbInBhZ2UiLCAid29ya2VyIl0sIFtdKTsKK0luc3BlY3Rv
ckJhY2tlbmQucmVnaXN0ZXJEb21haW5EaXNwYXRjaGVyID0gSW5zcGVjdG9yQmFja2VuZC5yZWdp
c3RlckRpc3BhdGNoZXIuYmluZChJbnNwZWN0b3JCYWNrZW5kLCAiRG9tYWluIik7CitJbnNwZWN0
b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJEb21haW4iLCBbInBhZ2UiXSk7CisjIyMgRW5kIEZp
bGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcy5pbgorCisjIyMgQmVnaW4gRmlsZTogVGVz
dEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUu
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5o
IgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+
CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKwor
bmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVy
IHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5k
RGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3Zl
KGRpc3BhdGNoZXIpOyB9CisgICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVy
KCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQorcHJpdmF0ZToK
KyAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Cit9Owor
CisKK2NsYXNzIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVy
bmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5BbHRlcm5hdGVE
b21haW5CYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBDb21tYW5kKGxv
bmcgY2FsbElkKSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlm
IC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorIyMjIEVuZCBGaWxl
OiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRl
c3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVj
dHMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVj
dG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKKyNpZiBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK2NsYXNzIEFsdGVybmF0ZURvbWFpbkJhY2tlbmRE
aXNwYXRjaGVyOworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENI
RVJTKQorCitjbGFzcyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgeworcHVibGljOgor
ICAgIHZpcnR1YWwgdm9pZCBDb21tYW5kKEVycm9yU3RyaW5nJikgPSAwOworcHJvdGVjdGVkOgor
ICAgIHZpcnR1YWwgfkRvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOworfTsKKworY2xh
c3MgRG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFj
a2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8RG9tYWluQmFja2VuZERp
c3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIERvbWFpbkJhY2tlbmREaXNwYXRj
aGVySGFuZGxlciopOworICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0
cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOworcHJpdmF0
ZToKKyAgICB2b2lkIENvbW1hbmQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+
JiYgcGFyYW1ldGVycyk7CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCitwdWJsaWM6CisgICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZURv
bWFpbkJhY2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRl
RGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KK3ByaXZhdGU6CisgICAgQWx0ZXJu
YXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIqIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciB7IG51bGxw
dHIgfTsKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
K3ByaXZhdGU6CisgICAgRG9tYWluQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXIm
LCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICBEb21haW5CYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQgeyBudWxscHRyIH07Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMj
IyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVn
Z2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMu
aCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+
CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95
ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2Vu
ZERpc3BhdGNoZXJzLmgiCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitEb21haW5CYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXI6On5Eb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KKworUmVm
PERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRl
KEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgRG9tYWluQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyKiBhZ2VudCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEb21haW5C
YWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKK30KKworRG9tYWlu
QmFja2VuZERpc3BhdGNoZXI6OkRvbWFpbkJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRj
aGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBh
Z2VudCkKKyAgICA6IFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRj
aGVyKQorICAgICwgbV9hZ2VudChhZ2VudCkKK3sKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5y
ZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oIkRvbWFpbiJfcywgdGhpcyk7Cit9CisKK3ZvaWQg
RG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBT
dHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQoreworICAgIFJlZjxE
b21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CisKKyAgICBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiBwYXJhbWV0ZXJzOworICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9z
LCBwYXJhbWV0ZXJzKTsKKworICAgIGlmIChtZXRob2QgPT0gIkNvbW1hbmQiKSB7CisgICAgICAg
IENvbW1hbmQocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3Io
QmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi4iICsgbWV0aG9kICsg
Iicgd2FzIG5vdCBmb3VuZCIpOworfQorCit2b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpD
b21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQoreworI2lmIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorICAgIGlmIChtX2FsdGVybmF0
ZURpc3BhdGNoZXIpIHsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5Db21tYW5kKHJl
cXVlc3RJZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAg
ICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAg
IG1fYWdlbnQtPkNvbW1hbmQoZXJyb3IpOworCisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKKyAg
ICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92
ZShyZXN1bHQpLCBmYWxzZSk7CisgICAgZWxzZQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RG
TW92ZShlcnJvcikpOworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBG
aWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZy
b250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2
ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMu
aCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgRnJvbnRlbmRSb3V0ZXI7
CisKK2NsYXNzIERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlciB7CisgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CitwdWJsaWM6CisgICAgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVyKEZyb250ZW5k
Um91dGVyJiBmcm9udGVuZFJvdXRlcikgOiBtX2Zyb250ZW5kUm91dGVyKGZyb250ZW5kUm91dGVy
KSB7IH0KKyAgICB2b2lkIEV2ZW50KCk7Citwcml2YXRlOgorICAgIEZyb250ZW5kUm91dGVyJiBt
X2Zyb250ZW5kUm91dGVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5k
IEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RG
cm9udGVuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3ZvaWQgRG9tYWluRnJv
bnRlbmREaXNwYXRjaGVyOjpFdmVudCgpCit7CisgICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1l
c3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGpzb25NZXNzYWdlLT5zZXRTdHJp
bmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7CisKKyAgICBtX2Zyb250ZW5kUm91dGVy
LnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworfQorCit9IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5j
cHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRl
YnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KKyNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK25hbWVzcGFj
ZSBQcm90b2NvbCB7CisKKworCisKKworCisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAor
Cit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2Jq
ZWN0cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9t
YWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9i
amVjdHMuaCIKKworI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK25hbWVzcGFjZSBQcm90b2Nv
bCB7CisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorCisjIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1
Z2dhYmxlVHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbXBvcnQgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8d3RmL1Jl
dGFpblB0ci5oPgorCitAcHJvdG9jb2wgVGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcjsK
KworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworY2xhc3MgT2JqQ0luc3BlY3RvckRvbWFpbkJh
Y2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNw
YXRjaGVyIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBPYmpD
SW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sRG9tYWluRG9t
YWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQorICAgIHZvaWQg
Q29tbWFuZChsb25nIHJlcXVlc3RJZCkgZmluYWw7Citwcml2YXRlOgorICAgIFJldGFpblB0cjxp
ZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKK307CisKK30g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tl
bmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlz
cGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudC10YXJn
ZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9y
dCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlICJUZXN0UHJv
dG9jb2xJbnRlcm5hbC5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5o
IgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Igewor
Cit2b2lkIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25n
IHJlcXVlc3RJZCkKK3sKKyAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpA
c2VsZWN0b3IoQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgewor
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJ
ZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi5Db21tYW5kJyB3
YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRp
bmdFcnJvcnMoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlkIGVycm9yQ2FsbGJh
Y2sgPSBeKE5TU3RyaW5nICplcnJvcikgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5y
ZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVy
cm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJy
b3JzKCk7CisgICAgfTsKKworICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57CisgICAgICAgIGJh
Y2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpTT046Ok9iamVjdDo6
Y3JlYXRlKCksIGZhbHNlKTsKKyAgICB9OworCisgICAgW21fZGVsZWdhdGUgQ29tbWFuZFdpdGhF
cnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFj
a107Cit9CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sQ29uZmlndXJhdGlvbi5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZl
bnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDx3dGYvUGxhdGZv
cm0uaD4KKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgorCitfX2F0dHJp
YnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbiA6IE5TT2JqZWN0CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluLCBz
ZXR0ZXI9c2V0RG9tYWluSGFuZGxlcjopIGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRs
ZXI+IGRvbWFpbkhhbmRsZXI7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFRlc3RQ
cm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqZG9tYWluRXZlbnREaXNwYXRjaGVy
OworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisK
KyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4t
ZGVidWdnYWJsZVR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCisKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlz
cGF0Y2hlcnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJs
ZUFnZW50Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNv
bnRyb2xsZXIuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVycy5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXJzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBs
ZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCit7CisgICAgQXVnbWVudGFibGVJ
bnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKKyAgICBpZDxUZXN0UHJvdG9jb2xEb21h
aW5Eb21haW5IYW5kbGVyPiBfZG9tYWluSGFuZGxlcjsKKyAgICBUZXN0UHJvdG9jb2xEb21haW5E
b21haW5FdmVudERpc3BhdGNoZXIgKl9kb21haW5FdmVudERpc3BhdGNoZXI7Cit9CisKKy0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJv
bGxlciopY29udHJvbGxlcgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFz
ZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBf
Y29udHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQp
ZGVhbGxvYworeworICAgIFtfZG9tYWluSGFuZGxlciByZWxlYXNlXTsKKyAgICBbX2RvbWFpbkV2
ZW50RGlzcGF0Y2hlciByZWxlYXNlXTsKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0gKHZv
aWQpc2V0RG9tYWluSGFuZGxlcjooaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4p
aGFuZGxlcgoreworICAgIGlmIChoYW5kbGVyID09IF9kb21haW5IYW5kbGVyKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBbX2RvbWFpbkhhbmRsZXIgcmVsZWFzZV07CisgICAgX2RvbWFpbkhhbmRs
ZXIgPSBbaGFuZGxlciByZXRhaW5dOworCisgICAgYXV0byBhbHRlcm5hdGVEaXNwYXRjaGVyID0g
bWFrZVVuaXF1ZTxPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXI+KGhhbmRsZXIp
OworICAgIGF1dG8gYWx0ZXJuYXRlQWdlbnQgPSBtYWtlVW5pcXVlPEFsdGVybmF0ZURpc3BhdGNo
YWJsZUFnZW50PERvbWFpbkJhY2tlbmREaXNwYXRjaGVyLCBBbHRlcm5hdGVEb21haW5CYWNrZW5k
RGlzcGF0Y2hlcj4+KCJEb21haW4iX3MsICpfY29udHJvbGxlciwgV1RGTW92ZShhbHRlcm5hdGVE
aXNwYXRjaGVyKSk7CisgICAgX2NvbnRyb2xsZXItPmFwcGVuZEV4dHJhQWdlbnQoV1RGTW92ZShh
bHRlcm5hdGVBZ2VudCkpOworfQorCistIChpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5k
bGVyPilkb21haW5IYW5kbGVyCit7CisgICAgcmV0dXJuIF9kb21haW5IYW5kbGVyOworfQorCist
IChUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKilkb21haW5FdmVudERp
c3BhdGNoZXIKK3sKKyAgICBpZiAoIV9kb21haW5FdmVudERpc3BhdGNoZXIpCisgICAgICAgIF9k
b21haW5FdmVudERpc3BhdGNoZXIgPSBbW1Rlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlz
cGF0Y2hlciBhbGxvY10gaW5pdFdpdGhDb250cm9sbGVyOl9jb250cm9sbGVyXTsKKyAgICByZXR1
cm4gX2RvbWFpbkV2ZW50RGlzcGF0Y2hlcjsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sRXZlbnREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFBy
b3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
LmgiCisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVj
dG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNw
YXRjaGVyCit7CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxl
cjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJ
bnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0
XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNvbnRy
b2xsZXIpOworICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKKyAgICByZXR1cm4gc2VsZjsK
K30KKworLSAodm9pZClFdmVudAoreworICAgIGNvbnN0IEZyb250ZW5kUm91dGVyJiByb3V0ZXIg
PSBfY29udHJvbGxlci0+ZnJvbnRlbmRSb3V0ZXIoKTsKKworICAgIFJlZjxKU09OOjpPYmplY3Q+
IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBqc29uTWVzc2FnZS0+
c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOworICAgIHJvdXRlci5zZW5k
RXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKK30KKworQGVuZAorCisKKyMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVu
dC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPEZvdW5kYXRpb24v
Rm91bmRhdGlvbi5oPgorI2ltcG9ydCA8d3RmL1BsYXRmb3JtLmg+CisKKyNpbXBvcnQgPFdlYklu
c3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KKworCisKKworCisKKworCitAcHJvdG9j
b2wgVGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlciA8TlNPYmplY3Q+CitAb3B0aW9uYWwK
Ky0gKHZvaWQpQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJv
cikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikodm9pZCkpc3VjY2Vzc0Nh
bGxiYWNrOworQGVuZAorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkK
K0BpbnRlcmZhY2UgVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyIDogTlNP
YmplY3QKKy0gKHZvaWQpRXZlbnQ7CitAZW5kCisKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JX
SVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgorCisjIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGlu
Zy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDx3dGYvUGxhdGZvcm0uaD4KKworI2ltcG9ydCAiVGVz
dFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgor
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+
CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbERv
bWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAoUHJpdmF0ZSkKKy0gKGluc3RhbmNldHlwZSlpbml0
V2l0aENvbnRyb2xsZXI6KEluc3BlY3Rvcjo6QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVy
Kiljb250cm9sbGVyOworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJu
YWwuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudC10YXJnZXRUeXBlLW1hdGNoaW5n
LWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaW1wb3J0ICJUZXN0
UHJvdG9jb2wuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVy
c2lvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIE9i
akNFbnVtVHlwZT4KK09wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNv
bnN0IFN0cmluZyYgdmFsdWUpOworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorCisjIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUu
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0
ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29s
LmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCisjaW1wb3J0IDxXZWJJbnNw
ZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorCit1c2luZyBuYW1lc3BhY2Ug
SW5zcGVjdG9yOworCisKKworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1k
b21haW4tZGVidWdnYWJsZVR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0
ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9S
V0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5o
PgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3Rv
cjsKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZl
bnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9ldmVudHMtd2l0aC1vcHRp
b25hbC1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwLi4zM2ExNTQzYTQyMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9ldmVudHMtd2l0aC1vcHRp
b25hbC1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0CkBAIC0wLDAgKzEsMTE5OCBAQAorIyMjIEJlZ2lu
IEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcy5pbgorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisvLyBEYXRhYmFzZQorSW5z
cGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiRGF0YWJhc2UiLCBudWxsKTsKK0luc3BlY3Rv
ckJhY2tlbmQucmVnaXN0ZXJFdmVudCgiRGF0YWJhc2UuZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1l
dGVycyIsIG51bGwsIFsiY29sdW1uTmFtZXMiLCAibm90ZXMiLCAidGltZXN0YW1wIiwgInZhbHVl
cyIsICJwYXlsb2FkIiwgInNxbEVycm9yIiwgInNjcmVlbkNvbG9yIiwgImFsdGVybmF0ZUNvbG9y
cyIsICJwcmludENvbG9yIl0pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckV2ZW50KCJEYXRh
YmFzZS5kaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMiLCBudWxsLCBbImNvbHVtbk5hbWVz
IiwgIm5vdGVzIiwgInRpbWVzdGFtcCIsICJ2YWx1ZXMiLCAicGF5bG9hZCIsICJzcWxFcnJvciIs
ICJzY3JlZW5Db2xvciIsICJhbHRlcm5hdGVDb2xvcnMiLCAicHJpbnRDb2xvciJdKTsKK0luc3Bl
Y3RvckJhY2tlbmQucmVnaXN0ZXJEYXRhYmFzZURpc3BhdGNoZXIgPSBJbnNwZWN0b3JCYWNrZW5k
LnJlZ2lzdGVyRGlzcGF0Y2hlci5iaW5kKEluc3BlY3RvckJhY2tlbmQsICJEYXRhYmFzZSIpOwor
SW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiRGF0YWJhc2UiLCBudWxsKTsKKyMjIyBF
bmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzLmluCisKKyMjIyBCZWdpbiBGaWxl
OiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisKK25hbWVzcGFjZSBJ
bnNwZWN0b3IgeworCitjbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6
CisgICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+
JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVy
KTsgfQorICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsg
cmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KK3ByaXZhdGU6CisgICAgUmVmUHRy
PEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOworfTsKKworCisKKworfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVS
TkFURV9ESVNQQVRDSEVSUykKKyMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNw
YXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJh
bWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2luY2x1ZGUgIlRl
c3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCitu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKKwor
Cit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNw
YXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBh
cmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5o
IgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4K
KyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3ll
ZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5k
RGlzcGF0Y2hlcnMuaCIKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCit9IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisj
IyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2Jq
ZWN0cy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBGcm9udGVuZFJv
dXRlcjsKKworY2xhc3MgRGF0YWJhc2VGcm9udGVuZERpc3BhdGNoZXIgeworICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIERhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVy
KEZyb250ZW5kUm91dGVyJiBmcm9udGVuZFJvdXRlcikgOiBtX2Zyb250ZW5kUm91dGVyKGZyb250
ZW5kUm91dGVyKSB7IH0KKyAgICB2b2lkIGRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMoUmVm
UHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyogbm90
ZXMsIGNvbnN0IGRvdWJsZSogdGltZXN0YW1wLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiB2YWx1ZXMs
IFJlZlB0cjxKU09OOjpWYWx1ZT4gcGF5bG9hZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpFcnJvcj4gc3FsRXJyb3IsIGNvbnN0IFN0cmluZyogc2NyZWVuQ29sb3IsIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiBhbHRlcm5hdGVD
b2xvcnMsIGNvbnN0IFN0cmluZyogcHJpbnRDb2xvcik7CisgICAgdm9pZCBkaWRFeGVjdXRlTm9P
cHRpb25hbFBhcmFtZXRlcnMoUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gY29sdW1uTmFt
ZXMsIGNvbnN0IFN0cmluZyYgbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJlZlB0cjxKU09OOjpP
YmplY3Q+IHZhbHVlcywgUmVmUHRyPEpTT046OlZhbHVlPiBwYXlsb2FkLCBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBzcWxFcnJvciwgY29uc3QgU3RyaW5nJiBz
Y3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxp
c3Q+IGFsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBwcmludENvbG9yKTsKK3ByaXZhdGU6
CisgICAgRnJvbnRlbmRSb3V0ZXImIG1fZnJvbnRlbmRSb3V0ZXI7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAor
CisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5q
c29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit2b2lkIERh
dGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyOjpkaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzKFJl
ZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIG5v
dGVzLCBjb25zdCBkb3VibGUqIHRpbWVzdGFtcCwgUmVmUHRyPEpTT046Ok9iamVjdD4gdmFsdWVz
LCBSZWZQdHI8SlNPTjo6VmFsdWU+IHBheWxvYWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVycm9yLCBjb25zdCBTdHJpbmcqIHNjcmVlbkNvbG9yLCBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4gYWx0ZXJuYXRl
Q29sb3JzLCBjb25zdCBTdHJpbmcqIHByaW50Q29sb3IpCit7CisgICAgUmVmPEpTT046Ok9iamVj
dD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGpzb25NZXNzYWdl
LT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRhdGFiYXNlLmRpZEV4ZWN1dGVPcHRpb25hbFBhcmFt
ZXRlcnMiX3MpOworICAgIFJlZjxKU09OOjpPYmplY3Q+IHBhcmFtc09iamVjdCA9IEpTT046Ok9i
amVjdDo6Y3JlYXRlKCk7CisgICAgaWYgKGNvbHVtbk5hbWVzKQorICAgICAgICBwYXJhbXNPYmpl
Y3QtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgY29sdW1uTmFtZXMpOworICAgIGlmIChub3Rl
cykKKyAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCAqbm90ZXMpOwor
ICAgIGlmICh0aW1lc3RhbXApCisgICAgICAgIHBhcmFtc09iamVjdC0+c2V0RG91YmxlKCJ0aW1l
c3RhbXAiX3MsICp0aW1lc3RhbXApOworICAgIGlmICh2YWx1ZXMpCisgICAgICAgIHBhcmFtc09i
amVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIHZhbHVlcyk7CisgICAgaWYgKHBheWxvYWQpCisg
ICAgICAgIHBhcmFtc09iamVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsICpwYXlsb2FkKTsKKyAg
ICBpZiAoc3FsRXJyb3IpCisgICAgICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJzcWxFcnJv
ciJfcywgc3FsRXJyb3IpOworICAgIGlmIChzY3JlZW5Db2xvcikKKyAgICAgICAgcGFyYW1zT2Jq
ZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCAqc2NyZWVuQ29sb3IpOworICAgIGlmIChh
bHRlcm5hdGVDb2xvcnMpCisgICAgICAgIHBhcmFtc09iamVjdC0+c2V0QXJyYXkoImFsdGVybmF0
ZUNvbG9ycyJfcywgYWx0ZXJuYXRlQ29sb3JzKTsKKyAgICBpZiAocHJpbnRDb2xvcikKKyAgICAg
ICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsICpwcmludENvbG9yKTsK
KyAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiX3MsIFdURk1vdmUocGFyYW1zT2Jq
ZWN0KSk7CisKKyAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9K
U09OU3RyaW5nKCkpOworfQorCit2b2lkIERhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyOjpkaWRF
eGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMoUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4g
Y29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJlZlB0
cjxKU09OOjpPYmplY3Q+IHZhbHVlcywgUmVmUHRyPEpTT046OlZhbHVlPiBwYXlsb2FkLCBSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBzcWxFcnJvciwgY29uc3Qg
U3RyaW5nJiBzY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNl
OjpDb2xvckxpc3Q+IGFsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBwcmludENvbG9yKQor
eworICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEYXRhYmFzZS5k
aWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMiX3MpOworICAgIFJlZjxKU09OOjpPYmplY3Q+
IHBhcmFtc09iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgcGFyYW1zT2JqZWN0
LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIGNvbHVtbk5hbWVzKTsKKyAgICBwYXJhbXNPYmpl
Y3QtPnNldFN0cmluZygibm90ZXMiX3MsIG5vdGVzKTsKKyAgICBwYXJhbXNPYmplY3QtPnNldERv
dWJsZSgidGltZXN0YW1wIl9zLCB0aW1lc3RhbXApOworICAgIHBhcmFtc09iamVjdC0+c2V0T2Jq
ZWN0KCJ2YWx1ZXMiX3MsIHZhbHVlcyk7CisgICAgcGFyYW1zT2JqZWN0LT5zZXRWYWx1ZSgicGF5
bG9hZCJfcywgcGF5bG9hZCk7CisgICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9y
Il9zLCBzcWxFcnJvcik7CisgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9y
Il9zLCBzY3JlZW5Db2xvcik7CisgICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJuYXRl
Q29sb3JzIl9zLCBhbHRlcm5hdGVDb2xvcnMpOworICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5n
KCJwcmludENvbG9yIl9zLCBwcmludENvbG9yKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0
KCJwYXJhbXMiX3MsIFdURk1vdmUocGFyYW1zT2JqZWN0KSk7CisKKyAgICBtX2Zyb250ZW5kUm91
dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworfQorCit9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVy
cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMu
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25z
Lmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFByb3RvY29sIHsK
KworCisKKy8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgorbmFtZXNwYWNlIERhdGFiYXNlIHsKK2Ns
YXNzIEVycm9yOworfSAvLyBEYXRhYmFzZQorLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25z
LgorCisKKy8vIFR5cGVkZWZzLgorbmFtZXNwYWNlIERhdGFiYXNlIHsKKy8qIFVuaXF1ZSBpZGVu
dGlmaWVyIG9mIERhdGFiYXNlIG9iamVjdC4gKi8KK3R5cGVkZWYgU3RyaW5nIERhdGFiYXNlSWQ7
Cit0eXBlZGVmIFN0cmluZyBQcmltYXJ5Q29sb3JzOwordHlwZWRlZiBKU09OOjpBcnJheU9mPFN0
cmluZz4gQ29sb3JMaXN0OworfSAvLyBEYXRhYmFzZQorLy8gRW5kIG9mIHR5cGVkZWZzLgorCitu
YW1lc3BhY2UgRGF0YWJhc2UgeworCisvKiBEYXRhYmFzZSBlcnJvci4gKi8KK2NsYXNzIEVycm9y
IDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgeworcHVibGljOgorICAgIGVudW0geworICAgICAg
ICBOb0ZpZWxkc1NldCA9IDAsCisgICAgICAgIE1lc3NhZ2VTZXQgPSAxIDw8IDAsCisgICAgICAg
IENvZGVTZXQgPSAxIDw8IDEsCisgICAgICAgIEFsbEZpZWxkc1NldCA9IChNZXNzYWdlU2V0IHwg
Q29kZVNldCkKKyAgICB9OworCisgICAgdGVtcGxhdGU8aW50IFNUQVRFPgorICAgIGNsYXNzIEJ1
aWxkZXIgeworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVz
dWx0OworCisgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4m
IGNhc3RTdGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRf
Y2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAg
IEJ1aWxkZXIoUmVmPC8qRXJyb3IqL0pTT046Ok9iamVjdD4mJiBvYmplY3QpCisgICAgICAgICAg
ICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25f
aW5pdF9zdGF0ZSk7CisgICAgICAgIH0KKyAgICAgICAgZnJpZW5kIGNsYXNzIEVycm9yOworICAg
IHB1YmxpYzoKKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTWVzc2FnZVNldD4mIHNldE1lc3Nh
Z2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoIShTVEFURSAmIE1lc3NhZ2VTZXQpLCBwcm9wZXJ0eV9tZXNzYWdlX2FscmVhZHlfc2V0
KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1lc3NhZ2UiX3MsIHZhbHVlKTsK
KyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TWVzc2FnZVNldD4oKTsKKyAgICAgICAgfQor
CisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2RlU2V0PiYgc2V0Q29kZShpbnQgdmFsdWUpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2RlU2V0KSwg
cHJvcGVydHlfY29kZV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50
ZWdlcigiY29kZSJfcywgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb2Rl
U2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgUmVmPEVycm9yPiByZWxlYXNlKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCBy
ZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihF
cnJvcikgPT0gc2l6ZW9mKEpTT046Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsKKworICAgICAgICAg
ICAgUmVmPEpTT046Ok9iamVjdD4ganNvblJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxs
KCk7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8
UmVmPEVycm9yPio+KCZqc29uUmVzdWx0KSk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgICAgICB9CisgICAgfTsKKworICAgIC8qCisgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9y
OgorICAgICAqIFJlZjxFcnJvcj4gcmVzdWx0ID0gRXJyb3I6OmNyZWF0ZSgpCisgICAgICogICAg
IC5zZXRNZXNzYWdlKC4uLikKKyAgICAgKiAgICAgLnNldENvZGUoLi4uKQorICAgICAqICAgICAu
cmVsZWFzZSgpOworICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVh
dGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9i
amVjdDo6Y3JlYXRlKCkpOworICAgIH0KK307CisKK30gLy8gRGF0YWJhc2UKKworCisKK30gLy8g
bmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bE9iamVjdHMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdp
dGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9j
b2xPYmplY3RzLmgiCisKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCituYW1lc3BhY2UgUHJv
dG9jb2wgeworCisKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5q
c29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQg
PHd0Zi9QbGF0Zm9ybS5oPgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0
ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgor
CisKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMu
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0
ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgor
CisjaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorCituYW1l
c3BhY2UgSW5zcGVjdG9yIHsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8d3RmL1BsYXRmb3JtLmg+
CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KKworX19hdHRyaWJ1dGVf
XygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZp
Z3VyYXRpb24gOiBOU09iamVjdAorQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBUZXN0
UHJvdG9jb2xEYXRhYmFzZURvbWFpbkV2ZW50RGlzcGF0Y2hlciAqZGF0YWJhc2VFdmVudERpc3Bh
dGNoZXI7CitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9u
LmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0
ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lt
cG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9j
b2xJbnRlcm5hbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgi
CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgor
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+
CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0
Y2hlcnMuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVycy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24g
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29u
dHJvbGxlciogX2NvbnRyb2xsZXI7CisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5FdmVu
dERpc3BhdGNoZXIgKl9kYXRhYmFzZUV2ZW50RGlzcGF0Y2hlcjsKK30KKworLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKilj
b250cm9sbGVyCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisg
ICAgICAgIHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250cm9s
bGVyID0gY29udHJvbGxlcjsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9j
Cit7CisgICAgW19kYXRhYmFzZUV2ZW50RGlzcGF0Y2hlciByZWxlYXNlXTsKKyAgICBbc3VwZXIg
ZGVhbGxvY107Cit9CisKKy0gKFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluRXZlbnREaXNwYXRj
aGVyICopZGF0YWJhc2VFdmVudERpc3BhdGNoZXIKK3sKKyAgICBpZiAoIV9kYXRhYmFzZUV2ZW50
RGlzcGF0Y2hlcikKKyAgICAgICAgX2RhdGFiYXNlRXZlbnREaXNwYXRjaGVyID0gW1tUZXN0UHJv
dG9jb2xEYXRhYmFzZURvbWFpbkV2ZW50RGlzcGF0Y2hlciBhbGxvY10gaW5pdFdpdGhDb250cm9s
bGVyOl9jb250cm9sbGVyXTsKKyAgICByZXR1cm4gX2RhdGFiYXNlRXZlbnREaXNwYXRjaGVyOwor
fQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1t
CisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1l
dGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNp
bXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFt
ZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbERhdGFiYXNl
RG9tYWluRXZlbnREaXNwYXRjaGVyCit7CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9s
bGVyKiBfY29udHJvbGxlcjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxl
cjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCit7CisgICAgc2Vs
ZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7Cisg
ICAgQVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKKyAg
ICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJz
V2l0aENvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopY29sdW1uTmFtZXMgbm90
ZXM6KE5TU3RyaW5nICoqKW5vdGVzIHRpbWVzdGFtcDooZG91YmxlICopdGltZXN0YW1wIHZhbHVl
czooUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqKXZhbHVlcyBwYXlsb2FkOihSV0lQcm90b2NvbEpT
T05PYmplY3QgKiopcGF5bG9hZCBzcWxFcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAq
KilzcWxFcnJvciBzY3JlZW5Db2xvcjooTlNTdHJpbmcgKiopc2NyZWVuQ29sb3IgYWx0ZXJuYXRl
Q29sb3JzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopYWx0ZXJuYXRlQ29sb3JzIHByaW50Q29s
b3I6KE5TU3RyaW5nICoqKXByaW50Q29sb3IKK3sKKyAgICBjb25zdCBGcm9udGVuZFJvdXRlciYg
cm91dGVyID0gX2NvbnRyb2xsZXItPmZyb250ZW5kUm91dGVyKCk7CisKKyAgICBUSFJPV19FWENF
UFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoY29sdW1uTmFtZXMsIEAiY29sdW1uTmFt
ZXMiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIobm90
ZXMsIEAibm90ZXMiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJB
TUVURVIodmFsdWVzLCBAInZhbHVlcyIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09Q
VElPTkFMX1BBUkFNRVRFUihwYXlsb2FkLCBAInBheWxvYWQiKTsKKyAgICBUSFJPV19FWENFUFRJ
T05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoc3FsRXJyb3IsIEAic3FsRXJyb3IiKTsKKyAg
ICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoc2NyZWVuQ29sb3Is
IEAic2NyZWVuQ29sb3IiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9Q
QVJBTUVURVIoYWx0ZXJuYXRlQ29sb3JzLCBAImFsdGVybmF0ZUNvbG9ycyIpOworICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihwcmludENvbG9yLCBAInByaW50
Q29sb3IiKTsKKworICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJE
YXRhYmFzZS5kaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzIl9zKTsKKyAgICBSZWY8SlNPTjo6
T2JqZWN0PiBwYXJhbXNPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGlmIChj
b2x1bW5OYW1lcykKKyAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMi
X3MsIHRvSlNPTlN0cmluZ0FycmF5KCgqY29sdW1uTmFtZXMpKSk7CisgICAgaWYgKG5vdGVzKQor
ICAgICAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygibm90ZXMiX3MsICgqbm90ZXMpKTsKKyAg
ICBpZiAodGltZXN0YW1wKQorICAgICAgICBwYXJhbXNPYmplY3QtPnNldERvdWJsZSgidGltZXN0
YW1wIl9zLCAoKnRpbWVzdGFtcCkpOworICAgIGlmICh2YWx1ZXMpCisgICAgICAgIHBhcmFtc09i
amVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFsoKnZhbHVlcykgdG9KU09OT2JqZWN0XSk7Cisg
ICAgaWYgKHBheWxvYWQpCisgICAgICAgIHBhcmFtc09iamVjdC0+c2V0VmFsdWUoInBheWxvYWQi
X3MsIFsoKnBheWxvYWQpIHRvSlNPTk9iamVjdF0pOworICAgIGlmIChzcWxFcnJvcikKKyAgICAg
ICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBbKCpzcWxFcnJvcikgdG9K
U09OT2JqZWN0XSk7CisgICAgaWYgKHNjcmVlbkNvbG9yKQorICAgICAgICBwYXJhbXNPYmplY3Qt
PnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsICgqc2NyZWVuQ29sb3IpKTsKKyAgICBpZiAoYWx0
ZXJuYXRlQ29sb3JzKQorICAgICAgICBwYXJhbXNPYmplY3QtPnNldEFycmF5KCJhbHRlcm5hdGVD
b2xvcnMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KCgqYWx0ZXJuYXRlQ29sb3JzKSkpOworICAgIGlm
IChwcmludENvbG9yKQorICAgICAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygicHJpbnRDb2xv
ciJfcywgKCpwcmludENvbG9yKSk7CisgICAganNvbk1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1z
Il9zLCBXVEZNb3ZlKHBhcmFtc09iamVjdCkpOworICAgIHJvdXRlci5zZW5kRXZlbnQoanNvbk1l
c3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKK30KKworLSAodm9pZClkaWRFeGVjdXRlTm9PcHRpb25h
bFBhcmFtZXRlcnNXaXRoQ29sdW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWNvbHVt
bk5hbWVzIG5vdGVzOihOU1N0cmluZyAqKW5vdGVzIHRpbWVzdGFtcDooZG91YmxlKXRpbWVzdGFt
cCB2YWx1ZXM6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcyBwYXlsb2FkOihSV0lQcm90
b2NvbEpTT05PYmplY3QgKilwYXlsb2FkIHNxbEVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVy
cm9yICopc3FsRXJyb3Igc2NyZWVuQ29sb3I6KE5TU3RyaW5nICopc2NyZWVuQ29sb3IgYWx0ZXJu
YXRlQ29sb3JzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilhbHRlcm5hdGVDb2xvcnMgcHJpbnRD
b2xvcjooTlNTdHJpbmcgKilwcmludENvbG9yCit7CisgICAgY29uc3QgRnJvbnRlbmRSb3V0ZXIm
IHJvdXRlciA9IF9jb250cm9sbGVyLT5mcm9udGVuZFJvdXRlcigpOworCisgICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoY29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMi
KTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihub3RlcywgQCJu
b3RlcyIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHZhbHVl
cywgQCJ2YWx1ZXMiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRF
UihwYXlsb2FkLCBAInBheWxvYWQiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVE
X1BBUkFNRVRFUihzcWxFcnJvciwgQCJzcWxFcnJvciIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfUkVRVUlSRURfUEFSQU1FVEVSKHNjcmVlbkNvbG9yLCBAInNjcmVlbkNvbG9yIik7CisgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoYWx0ZXJuYXRlQ29sb3JzLCBA
ImFsdGVybmF0ZUNvbG9ycyIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFS
QU1FVEVSKHByaW50Q29sb3IsIEAicHJpbnRDb2xvciIpOworCisgICAgUmVmPEpTT046Ok9iamVj
dD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGpzb25NZXNzYWdl
LT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRhdGFiYXNlLmRpZEV4ZWN1dGVOb09wdGlvbmFsUGFy
YW1ldGVycyJfcyk7CisgICAgUmVmPEpTT046Ok9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwYXJhbXNPYmplY3QtPnNldEFycmF5KCJjb2x1bW5OYW1l
cyJfcywgdG9KU09OU3RyaW5nQXJyYXkoY29sdW1uTmFtZXMpKTsKKyAgICBwYXJhbXNPYmplY3Qt
PnNldFN0cmluZygibm90ZXMiX3MsIG5vdGVzKTsKKyAgICBwYXJhbXNPYmplY3QtPnNldERvdWJs
ZSgidGltZXN0YW1wIl9zLCB0aW1lc3RhbXApOworICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0
KCJ2YWx1ZXMiX3MsIFt2YWx1ZXMgdG9KU09OT2JqZWN0XSk7CisgICAgcGFyYW1zT2JqZWN0LT5z
ZXRWYWx1ZSgicGF5bG9hZCJfcywgW3BheWxvYWQgdG9KU09OT2JqZWN0XSk7CisgICAgcGFyYW1z
T2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBbc3FsRXJyb3IgdG9KU09OT2JqZWN0XSk7
CisgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCBzY3JlZW5Db2xv
cik7CisgICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCB0b0pT
T05TdHJpbmdBcnJheShhbHRlcm5hdGVDb2xvcnMpKTsKKyAgICBwYXJhbXNPYmplY3QtPnNldFN0
cmluZygicHJpbnRDb2xvciJfcywgcHJpbnRDb2xvcik7CisgICAganNvbk1lc3NhZ2UtPnNldE9i
amVjdCgicGFyYW1zIl9zLCBXVEZNb3ZlKHBhcmFtc09iamVjdCkpOworICAgIHJvdXRlci5zZW5k
RXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKK30KKworQGVuZAorCisKKyMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVu
dHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Cisj
aW1wb3J0IDx3dGYvUGxhdGZvcm0uaD4KKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3Rv
Y29sSlNPTk9iamVjdC5oPgorCisKK0BjbGFzcyBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yOwor
CisKKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNl
IFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgOiBSV0lQcm90b2NvbEpTT05PYmplY3QKKy0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4g
KilwYXlsb2FkOworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVBy
b3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhN
ZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZTooaW50KWNvZGU7CisvKiByZXF1aXJlZCAq
LyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKm1lc3NhZ2U7CisvKiByZXF1
aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQgY29kZTsKK0BlbmQKKwor
CisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBU
ZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkV2ZW50RGlzcGF0Y2hlciA6IE5TT2JqZWN0CistICh2
b2lkKWRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnNXaXRoQ29sdW1uTmFtZXM6KE5TQXJyYXkv
KjxOU1N0cmluZz4qLyAqKiljb2x1bW5OYW1lcyBub3RlczooTlNTdHJpbmcgKiopbm90ZXMgdGlt
ZXN0YW1wOihkb3VibGUgKil0aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3Qg
KiopdmFsdWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKilwYXlsb2FkIHNxbEVy
cm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqKXNxbEVycm9yIHNjcmVlbkNvbG9yOihO
U1N0cmluZyAqKilzY3JlZW5Db2xvciBhbHRlcm5hdGVDb2xvcnM6KE5TQXJyYXkvKjxOU1N0cmlu
Zz4qLyAqKilhbHRlcm5hdGVDb2xvcnMgcHJpbnRDb2xvcjooTlNTdHJpbmcgKiopcHJpbnRDb2xv
cjsKKy0gKHZvaWQpZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzV2l0aENvbHVtbk5hbWVz
OihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcyBub3RlczooTlNTdHJpbmcgKilu
b3RlcyB0aW1lc3RhbXA6KGRvdWJsZSl0aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90b2NvbEpTT05P
YmplY3QgKil2YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZCBz
cWxFcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKXNxbEVycm9yIHNjcmVlbkNvbG9y
OihOU1N0cmluZyAqKXNjcmVlbkNvbG9yIGFsdGVybmF0ZUNvbG9yczooTlNBcnJheS8qPE5TU3Ry
aW5nPiovICopYWx0ZXJuYXRlQ29sb3JzIHByaW50Q29sb3I6KE5TU3RyaW5nICopcHJpbnRDb2xv
cjsKK0BlbmQKKworCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBh
dGliaWxpdHlPYmplY3RzLmg+CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8d3RmL1BsYXRm
b3JtLmg+CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29s
SlNPTk9iamVjdFByaXZhdGUuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxl
SW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKworQGlu
dGVyZmFjZSBUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkV2ZW50RGlzcGF0Y2hlciAoUHJpdmF0
ZSkKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEluc3BlY3Rvcjo6QXVnbWVu
dGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyOworQGVuZAorCisKKyMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBl
dmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8d3RmL1BsYXRmb3JtLmg+CisKKyNpbXBv
cnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJy
YXlDb252ZXJzaW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgT2JqQ0VudW1UeXBlPgorT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xT
dHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorCisjIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIK
KyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rv
ci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNw
ZWN0b3I7CisKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChEYXRhYmFz
ZURvbWFpbikKKworKyAodm9pZClfcGFyc2VEYXRhYmFzZUlkOihOU1N0cmluZyAqKilvdXRWYWx1
ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNlUHJpbWFyeUNvbG9yczoo
TlNTdHJpbmcgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisrICh2b2lkKV9w
YXJzZUNvbG9yTGlzdDooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKW91dFZhbHVlIGZyb21QYXls
b2FkOihpZClwYXlsb2FkOworKyAodm9pZClfcGFyc2VFcnJvcjooVGVzdFByb3RvY29sRGF0YWJh
c2VFcnJvciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKworQGVuZAorCitA
aW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChEYXRhYmFzZURvbWFp
bikKKworKyAodm9pZClfcGFyc2VEYXRhYmFzZUlkOihOU1N0cmluZyAqKilvdXRWYWx1ZSBmcm9t
UGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUo
cGF5bG9hZCwgW05TU3RyaW5nIGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gKE5TU3RyaW5nICop
cGF5bG9hZDsKK30KKworKyAodm9pZClfcGFyc2VQcmltYXJ5Q29sb3JzOihOU1N0cmluZyAqKilv
dXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfQkFEX1RZUEUocGF5bG9hZCwgW05TU3RyaW5nIGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0g
KE5TU3RyaW5nICopcGF5bG9hZDsKK30KKworKyAodm9pZClfcGFyc2VDb2xvckxpc3Q6KE5TQXJy
YXkvKjxOU1N0cmluZz4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAorewor
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TQXJyYXkvKjxOU1N0
cmluZz4qLyBjbGFzc10pOworICAgICpvdXRWYWx1ZSA9IChOU0FycmF5Lyo8TlNTdHJpbmc+Ki8g
KilwYXlsb2FkOworfQorCisrICh2b2lkKV9wYXJzZUVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFz
ZUVycm9yICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1df
RVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7Cisg
ICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGFsbG9jXSBpbml0V2l0
aFBheWxvYWQ6cGF5bG9hZF07Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlw
ZXMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRp
b25hbC1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJv
dG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKyNp
bXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisK
K0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yCisKKy0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlk
PiAqKXBheWxvYWQKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAg
cmV0dXJuIG5pbDsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFko
cGF5bG9hZFtAIm1lc3NhZ2UiXSwgQCJtZXNzYWdlIik7CisgICAgc2VsZi5tZXNzYWdlID0gcGF5
bG9hZFtAIm1lc3NhZ2UiXTsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJP
UEVSVFkocGF5bG9hZFtAImNvZGUiXSwgQCJjb2RlIik7CisgICAgc2VsZi5jb2RlID0gW3BheWxv
YWRbQCJjb2RlIl0gaW50ZWdlclZhbHVlXTsKKworICAgIHJldHVybiBzZWxmOworfQorLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAq
KW9iamVjdAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0Oltv
YmplY3QgdG9KU09OT2JqZWN0XS5nZXQoKV0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAg
cmV0dXJuIHNlbGY7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3Ry
aW5nICopbWVzc2FnZSBjb2RlOihpbnQpY29kZQoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIg
aW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9S
RVFVSVJFRF9QUk9QRVJUWShtZXNzYWdlLCBAIm1lc3NhZ2UiKTsKKworICAgIHNlbGYubWVzc2Fn
ZSA9IG1lc3NhZ2U7CisgICAgc2VsZi5jb2RlID0gY29kZTsKKworICAgIHJldHVybiBzZWxmOwor
fQorCistICh2b2lkKXNldE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZQoreworICAgIFtzdXBl
ciBzZXRTdHJpbmc6bWVzc2FnZSBmb3JLZXk6QCJtZXNzYWdlIl07Cit9CisKKy0gKE5TU3RyaW5n
ICopbWVzc2FnZQoreworICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAibWVzc2FnZSJd
OworfQorCistICh2b2lkKXNldENvZGU6KGludCljb2RlCit7CisgICAgW3N1cGVyIHNldEludGVn
ZXI6Y29kZSBmb3JLZXk6QCJjb2RlIl07Cit9CisKKy0gKGludCljb2RlCit7CisgICAgcmV0dXJu
IFtzdXBlciBpbnRlZ2VyRm9yS2V5OkAiY29kZSJdOworfQorCitAZW5kCisKKworIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tY29tbWFuZC10YXJn
ZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLWVycm9yIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24t
Y29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLWVy
cm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hMTMwYWQ3MGM0MAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21h
aW4tZGVidWdnYWJsZVR5cGUuanNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjogTWFsZm9y
bWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9uOiBkb21haW4gRG9tYWluIGhhcyBhbiBpdGVtIGluIHRh
cmdldFR5cGVzICJbdSd3b3JrZXInXSIgdGhhdCBpcyBub3Qgc3VwcG9ydGVkIGJ5IGFueSB2YWx1
ZSBpbiBkZWJ1Z2dhYmxlVHlwZXMgIlt1J2phdmFzY3JpcHQnXSIuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1v
bi1jb21tYW5kLXRhcmdldFR5cGVzLXR5cGUuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWNvbW1hbmQtdGFy
Z2V0VHlwZXMtdHlwZS5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwLi45OWY1ZTFhNGE4ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWNvbW1hbmQtdGFy
Z2V0VHlwZXMtdHlwZS5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBNYWxmb3JtZWQg
ZG9tYWluIHNwZWNpZmljYXRpb246IHRhcmdldFR5cGVzIGxpc3QgZm9yIGNvbW1hbmQgUGFnZU9u
bHkgaXMgbm90IGFuIGFycmF5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1jb21tYW5kLXRhcmdldFR5cGVz
LXZhbHVlLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1jb21tYW5kLXRhcmdldFR5cGVzLXZhbHVlLmpzb24t
ZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjIxYTM2NTY5OTI2
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tY29tbWFuZC10YXJnZXRUeXBlcy12YWx1ZS5qc29u
LWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBNYWxmb3JtZWQgZG9tYWluIHNwZWNpZmljYXRp
b246IHRhcmdldFR5cGVzIGxpc3QgZm9yIGNvbW1hbmQgUGFnZU9ubHkgaXMgYW4gdW5zdXBwb3J0
ZWQgc3RyaW5nLiBXYXM6ICJbdSdwYWdlZSddIiwgQWxsb3dlZCB2YWx1ZXM6IHNlcnZpY2Utd29y
a2VyLCBqYXZhc2NyaXB0LCB3b3JrZXIsIHBhZ2UsIHdlYi1wYWdlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1v
bi1kb21haW4tZGVidWdnYWJsZVR5cGVzLXR5cGUuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWRvbWFpbi1k
ZWJ1Z2dhYmxlVHlwZXMtdHlwZS5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwLi4yYjg5OGJhN2JlNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWRvbWFp
bi1kZWJ1Z2dhYmxlVHlwZXMtdHlwZS5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBN
YWxmb3JtZWQgZG9tYWluIHNwZWNpZmljYXRpb246IGRlYnVnZ2FibGVUeXBlcyBmb3IgZG9tYWlu
IFdlYk9ubHkgaXMgbm90IGFuIGFycmF5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4tZGVidWdn
YWJsZVR5cGVzLXZhbHVlLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4tZGVidWdnYWJsZVR5cGVz
LXZhbHVlLmpzb24tZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu
LmJmNzFkNDcwY2JkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZG9tYWluLWRlYnVnZ2FibGVU
eXBlcy12YWx1ZS5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBNYWxmb3JtZWQgZG9t
YWluIHNwZWNpZmljYXRpb246IGRlYnVnZ2FibGVUeXBlcyBmb3IgZG9tYWluIFdlYk9ubHkgaXMg
YW4gdW5zdXBwb3J0ZWQgc3RyaW5nLiBXYXM6ICJbdSd3ZWJiJ10iLCBBbGxvd2VkIHZhbHVlczog
c2VydmljZS13b3JrZXIsIGphdmFzY3JpcHQsIHBhZ2UsIHdlYi1wYWdlCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFp
bC1vbi1kb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNv
bi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC9mYWlsLW9uLWRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dh
YmxlVHlwZS5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
Li44NjdlMzUwMDg5OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWRvbWFpbi10YXJnZXRUeXBl
LW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAK
K0VSUk9SOiBNYWxmb3JtZWQgZG9tYWluIHNwZWNpZmljYXRpb246IGNvbW1hbmQgQ29tbWFuZCBo
YXMgYW4gaXRlbSBpbiB0YXJnZXRUeXBlcyAiW3Und29ya2VyJ10iIHRoYXQgaXMgbm90IHN1cHBv
cnRlZCBieSBhbnkgdmFsdWUgaW4gZGVidWdnYWJsZVR5cGVzICJbdSdqYXZhc2NyaXB0J10iLgpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL2ZhaWwtb24tZG9tYWluLXRhcmdldFR5cGVzLXR5cGUuanNvbi1lcnJvciBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWls
LW9uLWRvbWFpbi10YXJnZXRUeXBlcy10eXBlLmpzb24tZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAuLmU5YTM1OTMzYTM1Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwt
b24tZG9tYWluLXRhcmdldFR5cGVzLXR5cGUuanNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJP
UjogTWFsZm9ybWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9uOiB0YXJnZXRUeXBlcyBmb3IgZG9tYWlu
IFBhZ2VPbmx5IGlzIG5vdCBhbiBhcnJheQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZG9tYWluLXRhcmdl
dFR5cGVzLXZhbHVlLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZXMtdmFsdWUu
anNvbi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNDY4MDdm
NzJmYzQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZXMtdmFsdWUu
anNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjogTWFsZm9ybWVkIGRvbWFpbiBzcGVjaWZp
Y2F0aW9uOiB0YXJnZXRUeXBlcyBmb3IgZG9tYWluIFBhZ2VPbmx5IGlzIGFuIHVuc3VwcG9ydGVk
IHN0cmluZy4gV2FzOiAiW3UncGFnZWUnXSIsIEFsbG93ZWQgdmFsdWVzOiBzZXJ2aWNlLXdvcmtl
ciwgamF2YXNjcmlwdCwgd29ya2VyLCBwYWdlLCB3ZWItcGFnZQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24t
ZHVwbGljYXRlLWNvbW1hbmQtY2FsbC1wYXJhbWV0ZXItbmFtZXMuanNvbi1lcnJvciBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9u
LWR1cGxpY2F0ZS1jb21tYW5kLWNhbGwtcGFyYW1ldGVyLW5hbWVzLmpzb24tZXJyb3IKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjNmNzU2ZGUzMjUwCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4
cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLWNvbW1hbmQtY2FsbC1wYXJhbWV0ZXItbmFtZXMuanNv
bi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjogTWFsZm9ybWVkIGRvbWFpbiBzcGVjaWZpY2F0
aW9uOiBjYWxsIHBhcmFtZXRlciBsaXN0IGZvciBjb21tYW5kIHByb2Nlc3NQb2ludHMgaGFzIGR1
cGxpY2F0ZSBwYXJhbWV0ZXIgbmFtZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS1jb21t
YW5kLXJldHVybi1wYXJhbWV0ZXItbmFtZXMuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS1j
b21tYW5kLXJldHVybi1wYXJhbWV0ZXItbmFtZXMuanNvbi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZWExNDhmZjY3YzkKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFp
bC1vbi1kdXBsaWNhdGUtY29tbWFuZC1yZXR1cm4tcGFyYW1ldGVyLW5hbWVzLmpzb24tZXJyb3IK
QEAgLTAsMCArMSBAQAorRVJST1I6IE1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjogcmV0
dXJuIHBhcmFtZXRlciBsaXN0IGZvciBjb21tYW5kIHByb2Nlc3NQb2ludHMgaGFzIGR1cGxpY2F0
ZSBwYXJhbWV0ZXIgbmFtZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS1ldmVudC1wYXJh
bWV0ZXItbmFtZXMuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS1ldmVudC1wYXJhbWV0ZXIt
bmFtZXMuanNvbi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u
YzcxYmJkMjFjMmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtZXZlbnQtcGFy
YW1ldGVyLW5hbWVzLmpzb24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6IE1hbGZvcm1lZCBk
b21haW4gc3BlY2lmaWNhdGlvbjogcGFyYW1ldGVyIGxpc3QgZm9yIGV2ZW50IHByb2Nlc3NlZFBv
aW50cyBoYXMgZHVwbGljYXRlIHBhcmFtZXRlciBuYW1lcwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZHVw
bGljYXRlLXR5cGUtZGVjbGFyYXRpb25zLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtdHlw
ZS1kZWNsYXJhdGlvbnMuanNvbi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMC4uNDQ3Y2RmOGUyOGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUt
dHlwZS1kZWNsYXJhdGlvbnMuanNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjogRHVwbGlj
YXRlIHR5cGUgZGVjbGFyYXRpb246IFJ1bnRpbWUuUmVtb3RlT2JqZWN0SWQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9m
YWlsLW9uLWR1cGxpY2F0ZS10eXBlLW1lbWJlci1uYW1lcy5qc29uLWVycm9yIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZHVw
bGljYXRlLXR5cGUtbWVtYmVyLW5hbWVzLmpzb24tZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAuLmQ1Mzc2YTc3YTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24t
ZHVwbGljYXRlLXR5cGUtbWVtYmVyLW5hbWVzLmpzb24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJS
T1I6IE1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjogdHlwZSBkZWNsYXJhdGlvbiBmb3Ig
UG9pbnQgaGFzIGR1cGxpY2F0ZSBtZW1iZXIgbmFtZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWVudW0t
d2l0aC1uby12YWx1ZXMuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWVudW0td2l0aC1uby12YWx1ZXMuanNv
bi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMjY1NWMyYjkw
N2UKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1lbnVtLXdpdGgtbm8tdmFsdWVzLmpzb24tZXJy
b3IKQEAgLTAsMCArMSBAQAorRVJST1I6IFR5cGUgcmVmZXJlbmNlIHdpdGggZW51bSB2YWx1ZXMg
bXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBlbnVtIHZhbHVlLgpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZXZl
bnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1lcnJvciBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9m
YWlsLW9uLWV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpz
b24tZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmI2NWQ3YTBk
MTk2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1k
b21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjogTWFs
Zm9ybWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9uOiBldmVudCBFdmVudCBoYXMgYW4gaXRlbSBpbiB0
YXJnZXRUeXBlcyAiW3Und29ya2VyJ10iIHRoYXQgaXMgbm90IHN1cHBvcnRlZCBieSBhbnkgdmFs
dWUgaW4gZGVidWdnYWJsZVR5cGVzICJbdSdqYXZhc2NyaXB0J10iLgpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwt
b24tZXZlbnQtdGFyZ2V0VHlwZXMtdHlwZS5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZXZlbnQtdGFyZ2V0
VHlwZXMtdHlwZS5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwLi43NDAzZTEzYTgwOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWV2ZW50LXRhcmdldFR5
cGVzLXR5cGUuanNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjogTWFsZm9ybWVkIGRvbWFp
biBzcGVjaWZpY2F0aW9uOiB0YXJnZXRUeXBlcyBmb3IgZXZlbnQgUGFnZU9ubHkgaXMgbm90IGFu
IGFycmF5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1ldmVudC10YXJnZXRUeXBlcy12YWx1ZS5qc29uLWVy
cm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVj
dGVkL2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlwZXMtdmFsdWUuanNvbi1lcnJvcgpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uODMwMTJhOWZlNGUKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvZmFpbC1vbi1ldmVudC10YXJnZXRUeXBlcy12YWx1ZS5qc29uLWVycm9yCkBAIC0wLDAgKzEg
QEAKK0VSUk9SOiBNYWxmb3JtZWQgZG9tYWluIHNwZWNpZmljYXRpb246IHRhcmdldFR5cGVzIGZv
ciBldmVudCBQYWdlT25seSBpcyBhbiB1bnN1cHBvcnRlZCBzdHJpbmcuIFdhczogIlt1J3BhZ2Vl
J10iLCBBbGxvd2VkIHZhbHVlczogc2VydmljZS13b3JrZXIsIGphdmFzY3JpcHQsIHdvcmtlciwg
cGFnZSwgd2ViLXBhZ2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRpb25hbC1w
YXJhbWV0ZXItZmxhZy5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tbnVtYmVyLXR5cGVkLW9wdGlvbmFsLXBh
cmFtZXRlci1mbGFnLmpzb24tZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAuLjk3YjJhZjBlNDdlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tbnVtYmVyLXR5cGVk
LW9wdGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6
IFRoZSAnb3B0aW9uYWwnIGZsYWcgZm9yIGEgcGFyYW1ldGVyIG11c3QgYmUgYSBib29sZWFuIGxp
dGVyYWwuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1i
ZXIuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5q
c29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44NmRmMzc1
MGMxYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRpb25hbC10eXBl
LW1lbWJlci5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBUaGUgJ29wdGlvbmFsJyBm
bGFnIGZvciBhIHR5cGUgbWVtYmVyIG11c3QgYmUgYSBib29sZWFuIGxpdGVyYWwuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvZmFpbC1vbi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbi1lcnJv
ciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC9mYWlsLW9uLXN0cmluZy10eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29uLWVycm9y
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45N2IyYWYwZTQ3ZQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXN0cmluZy10eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxh
Zy5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBUaGUgJ29wdGlvbmFsJyBmbGFnIGZv
ciBhIHBhcmFtZXRlciBtdXN0IGJlIGEgYm9vbGVhbiBsaXRlcmFsLgpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwt
b24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24tZXJyb3IgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1z
dHJpbmctdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNvbi1lcnJvcgpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uODZkZjM3NTBjMWEKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
ZmFpbC1vbi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNvbi1lcnJvcgpAQCAt
MCwwICsxIEBACitFUlJPUjogVGhlICdvcHRpb25hbCcgZmxhZyBmb3IgYSB0eXBlIG1lbWJlciBt
dXN0IGJlIGEgYm9vbGVhbiBsaXRlcmFsLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS1kZWNsYXJh
dGlvbi11c2luZy10eXBlLXJlZmVyZW5jZS5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS1kZWNsYXJh
dGlvbi11c2luZy10eXBlLXJlZmVyZW5jZS5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwLi40MmY1NzUzYTQzOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9u
LXR5cGUtZGVjbGFyYXRpb24tdXNpbmctdHlwZS1yZWZlcmVuY2UuanNvbi1lcnJvcgpAQCAtMCww
ICsxIEBACitFUlJPUjogVHlwZSByZWZlcmVuY2UgY2Fubm90IGhhdmUgYm90aCAndHlwZScgYW5k
ICckcmVmJyBrZXlzLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS1yZWZlcmVuY2UtYXMtcHJpbWl0
aXZlLXR5cGUuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXR5cGUtcmVmZXJlbmNlLWFzLXByaW1pdGl2ZS10
eXBlLmpzb24tZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmQ3
NmJjMWM3NzczCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS1yZWZlcmVuY2UtYXMtcHJp
bWl0aXZlLXR5cGUuanNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjogVHlwZSByZWZlcmVu
Y2UgJ0RhdGFiYXNlSWQnIGlzIG5vdCBhIHByaW1pdGl2ZSB0eXBlLiBBbGxvd2VkIHZhbHVlczog
aW50ZWdlciwgbnVtYmVyLCBzdHJpbmcsIGJvb2xlYW4sIGVudW0sIG9iamVjdCwgYXJyYXksIGFu
eQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS13aXRoLWxvd2VyY2FzZS1uYW1lLmpzb24tZXJyb3Ig
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
ZmFpbC1vbi10eXBlLXdpdGgtbG93ZXJjYXNlLW5hbWUuanNvbi1lcnJvcgpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNGU0NjIyNTBjMGEKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
ZmFpbC1vbi10eXBlLXdpdGgtbG93ZXJjYXNlLW5hbWUuanNvbi1lcnJvcgpAQCAtMCwwICsxIEBA
CitFUlJPUjogVHlwZXMgbXVzdCBiZWdpbiB3aXRoIGFuIHVwcGVyY2FzZSBjaGFyYWN0ZXIuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtZGVjbGFyYXRp
b24uanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1kZWNs
YXJhdGlvbi5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
Li4yZDM4ZTY0Njc1ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZl
cmVuY2UtaW4tdHlwZS1kZWNsYXJhdGlvbi5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9S
OiBUeXBlIHJlZmVyZW5jZSAnZHJhZ29uJyBpcyBub3QgYSBwcmltaXRpdmUgdHlwZS4gQWxsb3dl
ZCB2YWx1ZXM6IGludGVnZXIsIG51bWJlciwgc3RyaW5nLCBib29sZWFuLCBlbnVtLCBvYmplY3Qs
IGFycmF5LCBhbnkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4t
dHlwZS1tZW1iZXIuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4t
dHlwZS1tZW1iZXIuanNvbi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMC4uZmFmNjY3MmNiZWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi11bmtub3duLXR5cGUt
cmVmZXJlbmNlLWluLXR5cGUtbWVtYmVyLmpzb24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6
IExvb2t1cCBmYWlsZWQgZm9yIHR5cGUgcmVmZXJlbmNlOiBDb2xvciAocmVmZXJlbmNlZCBmcm9t
IGRvbWFpbjogRmFudGFzeSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9nZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVy
ZS1ndWFyZHMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRz
Lmpzb24tcmVzdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kMDM3
Yzc4MjhiNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9nZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1n
dWFyZHMuanNvbi1yZXN1bHQKQEAgLTAsMCArMSwxMjAzIEBACisjIyMgQmVnaW4gRmlsZTogSW5z
cGVjdG9yQmFja2VuZENvbW1hbmRzLmpzLmluCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworLy8gTmV0d29yazEKK0luc3BlY3Rv
ckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIk5ldHdvcmsxIiwgbnVsbCk7CitJbnNwZWN0b3JCYWNr
ZW5kLnJlZ2lzdGVyQ29tbWFuZCgiTmV0d29yazEubG9hZFJlc291cmNlIiwgbnVsbCwgW10sIFtd
KTsKK0luc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIk5ldHdvcmsxIiwgbnVsbCk7CisK
Ky8vIE5ldHdvcmszCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJOZXR3b3JrMyIs
IG51bGwpOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckV2ZW50KCJOZXR3b3JrMy5yZXNvdXJj
ZUxvYWRlZCIsIG51bGwsIFtdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJOZXR3b3JrM0Rp
c3BhdGNoZXIgPSBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRGlzcGF0Y2hlci5iaW5kKEluc3Bl
Y3RvckJhY2tlbmQsICJOZXR3b3JrMyIpOworSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFp
bigiTmV0d29yazMiLCBudWxsKTsKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1h
bmRzLmpzLmluCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5z
LXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgor
CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyNpbmNsdWRl
ICJUZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
RnJvbnRlbmRSb3V0ZXIuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEFsdGVy
bmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldEJhY2tlbmREaXNw
YXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2Vu
ZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9CisgICAgQmFja2VuZERpc3BhdGNo
ZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hl
ci5nZXQoKTsgfQorcHJpdmF0ZToKKyAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFj
a2VuZERpc3BhdGNoZXI7Cit9OworCisKK2NsYXNzIEFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERp
c3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgor
ICAgIHZpcnR1YWwgfkFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoKSB7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgY2FsbElkKSA9IDA7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQorIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0
dXJlLWd1YXJkcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpbmNsdWRl
ICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
KworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwor
CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCitjbGFzcyBBbHRl
cm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCitjbGFzcyBOZXR3b3JrMUJhY2tlbmREaXNwYXRj
aGVySGFuZGxlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZShFcnJv
clN0cmluZyYpID0gMDsKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5OZXR3b3JrMUJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlcigpOworfTsKKworY2xhc3MgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hl
ciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6
CisgICAgc3RhdGljIFJlZjxOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2Vu
ZERpc3BhdGNoZXImLCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIHZv
aWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNP
Tjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOworcHJpdmF0ZToKKyAgICB2b2lkIGxvYWRSZXNv
dXJjZShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsK
KyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK3B1YmxpYzoKKyAg
ICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlz
cGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVybmF0ZURpc3BhdGNoZXIgPSBh
bHRlcm5hdGVEaXNwYXRjaGVyOyB9Citwcml2YXRlOgorICAgIEFsdGVybmF0ZU5ldHdvcmsxQmFj
a2VuZERpc3BhdGNoZXIqIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciB7IG51bGxwdHIgfTsKKyNlbmRp
ZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK3ByaXZhdGU6Cisg
ICAgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYsIE5ldHdvcmsx
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIqIG1fYWdlbnQgeyBudWxscHRyIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0Zi9K
U09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCisjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgor
I2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCituYW1l
c3BhY2UgSW5zcGVjdG9yIHsKKworTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5O
ZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQorCitSZWY8TmV0d29yazFCYWNr
ZW5kRGlzcGF0Y2hlcj4gTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEJhY2tlbmRE
aXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXIqIGFnZW50KQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE5ldHdvcmsxQmFja2Vu
ZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIsIGFnZW50KSk7Cit9CisKK05ldHdvcmsxQmFj
a2VuZERpc3BhdGNoZXI6Ok5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNo
ZXImIGJhY2tlbmREaXNwYXRjaGVyLCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciog
YWdlbnQpCisgICAgOiBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0
Y2hlcikKKyAgICAsIG1fYWdlbnQoYWdlbnQpCit7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+
cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKCJOZXR3b3JrMSJfcywgdGhpcyk7Cit9CisKK3Zv
aWQgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNv
bnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCit7CisgICAg
UmVmPE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOworCisgICAgUmVm
UHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVyczsKKyAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBh
cmFtcyJfcywgcGFyYW1ldGVycyk7CisKKyAgICBpZiAobWV0aG9kID09ICJsb2FkUmVzb3VyY2Ui
KSB7CisgICAgICAgIGxvYWRSZXNvdXJjZShyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVw
b3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0
d29yazEuIiArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKK30KKwordm9pZCBOZXR3b3Jr
MUJhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxK
U09OOjpPYmplY3Q+JiYpCit7CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCisgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeworICAgICAgICBtX2FsdGVy
bmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZShyZXF1ZXN0SWQpOworICAgICAgICByZXR1cm47
CisgICAgfQorI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQorCisgICAgRXJyb3JTdHJpbmcgZXJyb3I7CisgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2UoZXJy
b3IpOworCisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Cisg
ICAgZWxzZQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9y
KEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOworfQorCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3Bh
dGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1m
ZWF0dXJlLWd1YXJkcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpbmNs
dWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7
CisKK2NsYXNzIEZyb250ZW5kUm91dGVyOworCitjbGFzcyBOZXR3b3JrM0Zyb250ZW5kRGlzcGF0
Y2hlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgTmV0d29y
azNGcm9udGVuZERpc3BhdGNoZXIoRnJvbnRlbmRSb3V0ZXImIGZyb250ZW5kUm91dGVyKSA6IG1f
ZnJvbnRlbmRSb3V0ZXIoZnJvbnRlbmRSb3V0ZXIpIHsgfQorICAgIHZvaWQgcmVzb3VyY2VMb2Fk
ZWQoKTsKK3ByaXZhdGU6CisgICAgRnJvbnRlbmRSb3V0ZXImIG1fZnJvbnRlbmRSb3V0ZXI7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5k
RGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMu
Y3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13
aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RGcm9udGVuZERp
c3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVu
ZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIElu
c3BlY3RvciB7CisKK3ZvaWQgTmV0d29yazNGcm9udGVuZERpc3BhdGNoZXI6OnJlc291cmNlTG9h
ZGVkKCkKK3sKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVj
dDo6Y3JlYXRlKCk7CisgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiTmV0
d29yazMucmVzb3VyY2VMb2FkZWQiX3MpOworCisgICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZl
bnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisK
K25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworCisK
Ky8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgorbmFtZXNwYWNlIE5ldHdvcmsyIHsKK2NsYXNzIE5l
dHdvcmtFcnJvcjsKK30gLy8gTmV0d29yazIKKy8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9u
cy4KKworCisKKworbmFtZXNwYWNlIE5ldHdvcmsyIHsKKworY2xhc3MgTmV0d29ya0Vycm9yIDog
cHVibGljIEpTT046Ok9iamVjdEJhc2UgeworcHVibGljOgorICAgIGVudW0geworICAgICAgICBO
b0ZpZWxkc1NldCA9IDAsCisgICAgICAgIE1lc3NhZ2VTZXQgPSAxIDw8IDAsCisgICAgICAgIENv
ZGVTZXQgPSAxIDw8IDEsCisgICAgICAgIEFsbEZpZWxkc1NldCA9IChNZXNzYWdlU2V0IHwgQ29k
ZVNldCkKKyAgICB9OworCisgICAgdGVtcGxhdGU8aW50IFNUQVRFPgorICAgIGNsYXNzIEJ1aWxk
ZXIgeworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVzdWx0
OworCisgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNh
c3RTdGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2Fz
dDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1
aWxkZXIoUmVmPC8qTmV0d29ya0Vycm9yKi9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQorICAgICAg
ICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5f
bm9uX2luaXRfc3RhdGUpOworICAgICAgICB9CisgICAgICAgIGZyaWVuZCBjbGFzcyBOZXR3b3Jr
RXJyb3I7CisgICAgcHVibGljOgorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNZXNzYWdlU2V0
PiYgc2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTWVzc2FnZVNldCksIHByb3BlcnR5X21lc3NhZ2Vf
YWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibWVzc2FnZSJf
cywgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNZXNzYWdlU2V0PigpOwor
ICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvZGVTZXQ+JiBzZXRDb2RlKGlu
dCB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IENvZGVTZXQpLCBwcm9wZXJ0eV9jb2RlX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXRJbnRlZ2VyKCJjb2RlIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2Fz
dFN0YXRlPENvZGVTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBSZWY8TmV0d29ya0Vycm9y
PiByZWxlYXNlKCkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUg
PT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKHNpemVvZihOZXR3b3JrRXJyb3IpID09IHNpemVvZihKU09OOjpPYmplY3QpLCBj
YW5ub3RfY2FzdCk7CisKKyAgICAgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25SZXN1bHQg
PSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBX
VEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxOZXR3b3JrRXJyb3I+Kj4oJmpzb25SZXN1bHQp
KTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICB9OworCisgICAg
LyoKKyAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CisgICAgICogUmVmPE5ldHdvcmtFcnJv
cj4gcmVzdWx0ID0gTmV0d29ya0Vycm9yOjpjcmVhdGUoKQorICAgICAqICAgICAuc2V0TWVzc2Fn
ZSguLi4pCisgICAgICogICAgIC5zZXRDb2RlKC4uLikKKyAgICAgKiAgICAgLnJlbGVhc2UoKTsK
KyAgICAgKi8KKyAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKKyAgICB7
CisgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpKTsKKyAgICB9Cit9OworCit9IC8vIE5ldHdvcmsyCisKKworCit9IC8vIG5hbWVzcGFjZSBQ
cm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sT2JqZWN0cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNw
cAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0
aC1mZWF0dXJlLWd1YXJkcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmpl
Y3RzLmgiCisKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCituYW1lc3BhY2UgUHJvdG9jb2wg
eworCisKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8
d3RmL1BsYXRmb3JtLmg+CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisK
K0Bwcm90b2NvbCBUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI7CisKK25hbWVzcGFj
ZSBJbnNwZWN0b3IgeworCisKK2NsYXNzIE9iakNJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNw
YXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIg
eworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIE9iakNJbnNwZWN0
b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWlu
SGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQorICAgIHZvaWQgbG9h
ZFJlc291cmNlKGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKK3ByaXZhdGU6CisgICAgUmV0YWluUHRy
PGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xC
YWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2Vu
ZERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJh
dGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0
UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbElu
dGVybmFsLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW5j
bHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3ZvaWQg
T2JqQ0luc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZShsb25n
IHJlcXVlc3RJZCkKK3sKKyAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpA
c2VsZWN0b3IobG9hZFJlc291cmNlV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOild
KSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVx
dWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazEubG9h
ZFJlc291cmNlJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlk
IGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgeworICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNo
ZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNl
bmRQZW5kaW5nRXJyb3JzKCk7CisgICAgfTsKKworICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57
CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpT
T046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKKyAgICB9OworCisgICAgW21fZGVsZWdhdGUg
bG9hZFJlc291cmNlV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJh
Y2s6c3VjY2Vzc0NhbGxiYWNrXTsKK30KKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDx3dGYv
UGxhdGZvcm0uaD4KKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgorCitf
X2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0
YWluLCBzZXR0ZXI9c2V0TmV0d29yazFIYW5kbGVyOikgaWQ8VGVzdFByb3RvY29sTmV0d29yazFE
b21haW5IYW5kbGVyPiBuZXR3b3JrMUhhbmRsZXI7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVh
ZG9ubHkpIFRlc3RQcm90b2NvbE5ldHdvcmszRG9tYWluRXZlbnREaXNwYXRjaGVyICpuZXR3b3Jr
M0V2ZW50RGlzcGF0Y2hlcjsKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENv
bmZpZ3VyYXRpb24uaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
bi5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMt
d2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKKworI2lt
cG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tl
bmREaXNwYXRjaGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0
Y2hhYmxlQWdlbnQuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVj
dG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJu
YXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKwor
QGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KK3sKKyAgICBBdWdtZW50
YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworICAgIGlkPFRlc3RQcm90b2Nv
bE5ldHdvcmsxRG9tYWluSGFuZGxlcj4gX25ldHdvcmsxSGFuZGxlcjsKKyAgICBUZXN0UHJvdG9j
b2xOZXR3b3JrM0RvbWFpbkV2ZW50RGlzcGF0Y2hlciAqX25ldHdvcmszRXZlbnREaXNwYXRjaGVy
OworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUlu
c3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRd
OworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJv
bGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVybiBzZWxmOwor
fQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbX25ldHdvcmsxSGFuZGxlciByZWxlYXNlXTsK
KyAgICBbX25ldHdvcmszRXZlbnREaXNwYXRjaGVyIHJlbGVhc2VdOworICAgIFtzdXBlciBkZWFs
bG9jXTsKK30KKworLSAodm9pZClzZXROZXR3b3JrMUhhbmRsZXI6KGlkPFRlc3RQcm90b2NvbE5l
dHdvcmsxRG9tYWluSGFuZGxlcj4paGFuZGxlcgoreworICAgIGlmIChoYW5kbGVyID09IF9uZXR3
b3JrMUhhbmRsZXIpCisgICAgICAgIHJldHVybjsKKworICAgIFtfbmV0d29yazFIYW5kbGVyIHJl
bGVhc2VdOworICAgIF9uZXR3b3JrMUhhbmRsZXIgPSBbaGFuZGxlciByZXRhaW5dOworCisgICAg
YXV0byBhbHRlcm5hdGVEaXNwYXRjaGVyID0gbWFrZVVuaXF1ZTxPYmpDSW5zcGVjdG9yTmV0d29y
azFCYWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7CisgICAgYXV0byBhbHRlcm5hdGVBZ2VudCA9
IG1ha2VVbmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8TmV0d29yazFCYWNrZW5kRGlz
cGF0Y2hlciwgQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4+KCJOZXR3b3JrMSJf
cywgKl9jb250cm9sbGVyLCBXVEZNb3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIpKTsKKyAgICBfY29u
dHJvbGxlci0+YXBwZW5kRXh0cmFBZ2VudChXVEZNb3ZlKGFsdGVybmF0ZUFnZW50KSk7Cit9CisK
Ky0gKGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4pbmV0d29yazFIYW5kbGVy
Cit7CisgICAgcmV0dXJuIF9uZXR3b3JrMUhhbmRsZXI7Cit9CisKKy0gKFRlc3RQcm90b2NvbE5l
dHdvcmszRG9tYWluRXZlbnREaXNwYXRjaGVyICopbmV0d29yazNFdmVudERpc3BhdGNoZXIKK3sK
KyAgICBpZiAoIV9uZXR3b3JrM0V2ZW50RGlzcGF0Y2hlcikKKyAgICAgICAgX25ldHdvcmszRXZl
bnREaXNwYXRjaGVyID0gW1tUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkV2ZW50RGlzcGF0Y2hl
ciBhbGxvY10gaW5pdFdpdGhDb250cm9sbGVyOl9jb250cm9sbGVyXTsKKyAgICByZXR1cm4gX25l
dHdvcmszRXZlbnREaXNwYXRjaGVyOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xF
dmVudERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2Vu
ZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwu
aCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDx3
dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVt
ZW50YXRpb24gVGVzdFByb3RvY29sTmV0d29yazNEb21haW5FdmVudERpc3BhdGNoZXIKK3sKKyAg
ICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworfQorCistIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRy
b2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICgh
c2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAg
X2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lk
KXJlc291cmNlTG9hZGVkCit7CisgICAgY29uc3QgRnJvbnRlbmRSb3V0ZXImIHJvdXRlciA9IF9j
b250cm9sbGVyLT5mcm9udGVuZFJvdXRlcigpOworCisgICAgUmVmPEpTT046Ok9iamVjdD4ganNv
bk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGpzb25NZXNzYWdlLT5zZXRT
dHJpbmcoIm1ldGhvZCJfcywgIk5ldHdvcmszLnJlc291cmNlTG9hZGVkIl9zKTsKKyAgICByb3V0
ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cit9CisKK0BlbmQKKwor
CisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KKy8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3Vu
ZGF0aW9uLmg+CisjaW1wb3J0IDx3dGYvUGxhdGZvcm0uaD4KKworI2ltcG9ydCA8V2ViSW5zcGVj
dG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgorCisKK0BjbGFzcyBUZXN0UHJvdG9jb2xOZXR3
b3JrMk5ldHdvcmtFcnJvcjsKKworCisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZh
dWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xOZXR3b3JrMk5ldHdvcmtFcnJvciA6IFJX
SVByb3RvY29sSlNPTk9iamVjdAorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNE
aWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQ7CistIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsK
Ky0gKGluc3RhbmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBjb2Rl
OihpbnQpY29kZTsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBO
U1N0cmluZyAqbWVzc2FnZTsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBh
c3NpZ24pIGludCBjb2RlOworQGVuZAorCitAcHJvdG9jb2wgVGVzdFByb3RvY29sTmV0d29yazFE
b21haW5IYW5kbGVyIDxOU09iamVjdD4KK0BvcHRpb25hbAorLSAodm9pZClsb2FkUmVzb3VyY2VX
aXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sg
c3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKHZvaWQpKXN1Y2Nlc3NDYWxsYmFjazsKK0BlbmQKKwor
X19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQ
cm90b2NvbE5ldHdvcmszRG9tYWluRXZlbnREaXNwYXRjaGVyIDogTlNPYmplY3QKKy0gKHZvaWQp
cmVzb3VyY2VMb2FkZWQ7CitAZW5kCisKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3Rv
Y29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUt
Z3VhcmRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I2ltcG9ydCA8d3RmL1BsYXRmb3JtLmg+CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2lt
cG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKKyNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8d3RmL0pT
T05WYWx1ZXMuaD4KKworQGludGVyZmFjZSBUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkV2ZW50
RGlzcGF0Y2hlciAoUHJpdmF0ZSkKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6
KEluc3BlY3Rvcjo6QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyOwor
QGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorCisjIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDx3
dGYvUGxhdGZvcm0uaD4KKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0IDxXZWJJ
bnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+CisKK25hbWVzcGFjZSBJbnNw
ZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+CitPcHRpb25hbDxPYmpD
RW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKKworCisK
K30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21h
aW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIK
KworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFy
c2VyLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0
ZS5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW50ZXJmYWNlIFRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucyAoTmV0d29yazJEb21haW4pCisKKysgKHZvaWQpX3BhcnNlTmV0
d29ya0Vycm9yOihUZXN0UHJvdG9jb2xOZXR3b3JrMk5ldHdvcmtFcnJvciAqKilvdXRWYWx1ZSBm
cm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zIChOZXR3b3JrMkRvbWFpbikKKworKyAodm9pZClfcGFyc2VO
ZXR3b3JrRXJyb3I6KFRlc3RQcm90b2NvbE5ldHdvcmsyTmV0d29ya0Vycm9yICoqKW91dFZhbHVl
IGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURf
VFlQRShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gW1tU
ZXN0UHJvdG9jb2xOZXR3b3JrMk5ldHdvcmtFcnJvciBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBh
eWxvYWRdOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1
cmUtZ3VhcmRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xK
U09OT2JqZWN0UHJpdmF0ZS5oPgorI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbXBvcnQg
PHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBs
ZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xOZXR3b3JrMk5ldHdvcmtFcnJvcgorCistIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBp
ZD4gKilwYXlsb2FkCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAg
IHJldHVybiBuaWw7CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZ
KHBheWxvYWRbQCJtZXNzYWdlIl0sIEAibWVzc2FnZSIpOworICAgIHNlbGYubWVzc2FnZSA9IHBh
eWxvYWRbQCJtZXNzYWdlIl07CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BS
T1BFUlRZKHBheWxvYWRbQCJjb2RlIl0sIEAiY29kZSIpOworICAgIHNlbGYuY29kZSA9IFtwYXls
b2FkW0AiY29kZSJdIGludGVnZXJWYWx1ZV07CisKKyAgICByZXR1cm4gc2VsZjsKK30KKy0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3Qg
KilvYmplY3QKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoSlNPTk9iamVjdDpb
b2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0KCldKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAg
IHJldHVybiBzZWxmOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0
cmluZyAqKW1lc3NhZ2UgY29kZTooaW50KWNvZGUKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVy
IGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
UkVRVUlSRURfUFJPUEVSVFkobWVzc2FnZSwgQCJtZXNzYWdlIik7CisKKyAgICBzZWxmLm1lc3Nh
Z2UgPSBtZXNzYWdlOworICAgIHNlbGYuY29kZSA9IGNvZGU7CisKKyAgICByZXR1cm4gc2VsZjsK
K30KKworLSAodm9pZClzZXRNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UKK3sKKyAgICBbc3Vw
ZXIgc2V0U3RyaW5nOm1lc3NhZ2UgZm9yS2V5OkAibWVzc2FnZSJdOworfQorCistIChOU1N0cmlu
ZyAqKW1lc3NhZ2UKK3sKKyAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAIm1lc3NhZ2Ui
XTsKK30KKworLSAodm9pZClzZXRDb2RlOihpbnQpY29kZQoreworICAgIFtzdXBlciBzZXRJbnRl
Z2VyOmNvZGUgZm9yS2V5OkAiY29kZSJdOworfQorCistIChpbnQpY29kZQoreworICAgIHJldHVy
biBbc3VwZXIgaW50ZWdlckZvcktleTpAImNvZGUiXTsKK30KKworQGVuZAorCisKKyMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zYW1lLXR5cGUtaWQtZGlmZmVy
ZW50LWRvbWFpbi5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29u
LXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMDMwYmYxMjlm
MGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbi1y
ZXN1bHQKQEAgLTAsMCArMSw4OTYgQEAKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5k
Q29tbWFuZHMuanMuaW4KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5
cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcy5p
bgorCisjIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1k
b21haW4uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xU
eXBlcy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIu
aD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNw
YXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxC
YWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBX
VEZNb3ZlKGRpc3BhdGNoZXIpOyB9CisgICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNw
YXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQorcHJp
dmF0ZToKKyAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7
Cit9OworCisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorIyMjIEVuZCBGaWxlOiBUZXN0QWx0
ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5k
RGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlw
ZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4K
KworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJy
b3JTdHJpbmc7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTog
VGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERp
c3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlw
ZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RCYWNrZW5k
RGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250
ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYv
TmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpZiBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyNpbmNsdWRlICJUZXN0QWx0
ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRv
bWFpbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpbmNsdWRlICJUZXN0
UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNz
IEZyb250ZW5kUm91dGVyOworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmls
ZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250
ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2Ft
ZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEZy
b250ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1l
c3BhY2UgSW5zcGVjdG9yIHsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQg
RmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xPYmplY3RzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1l
LXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3Jt
Lmg+CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+
CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisK
KworCituYW1lc3BhY2UgUHJvdG9jb2wgeworCisKKworCisKKy8vIFR5cGVkZWZzLgorbmFtZXNw
YWNlIFJ1bnRpbWUgeworLyogVW5pcXVlIG9iamVjdCBpZGVudGlmaWVyLiAqLwordHlwZWRlZiBT
dHJpbmcgUmVtb3RlT2JqZWN0SWQ7Cit9IC8vIFJ1bnRpbWUKKworbmFtZXNwYWNlIFJ1bnRpbWUy
IHsKKy8qIFVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4gKi8KK3R5cGVkZWYgU3RyaW5nIFJlbW90
ZU9iamVjdElkOworfSAvLyBSdW50aW1lMgorLy8gRW5kIG9mIHR5cGVkZWZzLgorCisKKworfSAv
LyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sT2JqZWN0cy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5
cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9j
b2xPYmplY3RzLmgiCisKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCituYW1lc3BhY2UgUHJv
dG9jb2wgeworCisKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDx3
dGYvUGxhdGZvcm0uaD4KKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVy
bmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKwor
CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgor
CisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNv
bmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNp
bmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisKK25hbWVzcGFj
ZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8d3RmL1BsYXRmb3JtLmg+CisKKyNp
bXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KKworX19hdHRyaWJ1dGVfXygodmlz
aWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRp
b24gOiBOU09iamVjdAorQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbi5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1t
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVu
dC1kb21haW4uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCisKKyNpbXBvcnQgIlRlc3RQ
cm90b2NvbEludGVybmFsLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hl
cnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50
Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xs
ZXIuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmRE
aXNwYXRjaGVycy5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXJzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRh
dGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCit7CisgICAgQXVnbWVudGFibGVJbnNwZWN0
b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
Q29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCit7
CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVy
biBuaWw7CisgICAgQVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250cm9sbGVyID0gY29udHJv
bGxlcjsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgW3N1
cGVyIGRlYWxsb2NdOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xD
b25maWd1cmF0aW9uLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3Bh
dGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlk
LWRpZmZlcmVudC1kb21haW4uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+
CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wu
aAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJl
bnQtZG9tYWluLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisjaW1wb3J0IDx3dGYvUGxhdGZv
cm0uaD4KKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgor
CisKKworCisKKworCisKKworCisKKworCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9j
b2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5q
c29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQg
PHd0Zi9QbGF0Zm9ybS5oPgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRl
c3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9B
dWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVz
Lmg+CisKKworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorCisjIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPHd0Zi9Q
bGF0Zm9ybS5oPgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgPFdlYkluc3Bl
Y3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KK09wdGlvbmFsPE9iakNFbnVt
VHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOworCisKKworCisK
K30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQt
ZGlmZmVyZW50LWRvbWFpbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorCisjaW1w
b3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIK
KyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisK
K3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zIChSdW50aW1lRG9tYWluKQorCisrICh2b2lkKV9wYXJzZVJlbW90ZU9iamVj
dElkOihOU1N0cmluZyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKworQGVu
ZAorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFJ1bnRpbWUyRG9tYWlu
KQorCisrICh2b2lkKV9wYXJzZVJlbW90ZU9iamVjdElkOihOU1N0cmluZyAqKilvdXRWYWx1ZSBm
cm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zIChSdW50aW1lRG9tYWluKQorCisrICh2b2lkKV9wYXJzZVJl
bW90ZU9iamVjdElkOihOU1N0cmluZyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9h
ZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TU3RyaW5n
IGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gKE5TU3RyaW5nICopcGF5bG9hZDsKK30KKworQGVu
ZAorQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoUnVudGltZTJE
b21haW4pCisKKysgKHZvaWQpX3BhcnNlUmVtb3RlT2JqZWN0SWQ6KE5TU3RyaW5nICoqKW91dFZh
bHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9C
QURfVFlQRShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSAoTlNT
dHJpbmcgKilwYXlsb2FkOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVz
Lm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZl
cmVudC1kb21haW4uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2Nv
bEpTT05PYmplY3RQcml2YXRlLmg+CisjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2ltcG9y
dCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisK
KworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zaGFk
b3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2hhZG93ZWQtb3B0aW9uYWwt
dHlwZS1zZXR0ZXJzLmpzb24tcmVzdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwLi5hYmU4YTc5ZGQxMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zaGFkb3dlZC1vcHRpb25hbC10
eXBlLXNldHRlcnMuanNvbi1yZXN1bHQKQEAgLTAsMCArMSwxMTAzIEBACisjIyMgQmVnaW4gRmls
ZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzLmluCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9y
QmFja2VuZENvbW1hbmRzLmpzLmluCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFk
b3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9y
bS5oPgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyNp
bmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNz
IEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldEJhY2tl
bmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1f
YmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9CisgICAgQmFja2VuZERp
c3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlz
cGF0Y2hlci5nZXQoKTsgfQorcHJpdmF0ZToKKyAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+
IG1fYmFja2VuZERpc3BhdGNoZXI7Cit9OworCisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQor
IyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgi
CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7
CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCisKKworfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVn
aW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZh
bHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENI
RVJTKQorI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNlbmRp
ZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworbmFtZXNwYWNl
IEluc3BlY3RvciB7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBG
aWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZy
b250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNo
YWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL1BsYXRm
b3JtLmg+CisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8d3Rm
L0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNw
YWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEZyb250ZW5kUm91dGVyOworCit9IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorCisj
IyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK30gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNw
cAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgor
CituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKwor
CisvLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KK25hbWVzcGFjZSBSdW50aW1lIHsKK2NsYXNzIEtl
eVBhdGg7Cit9IC8vIFJ1bnRpbWUKKy8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KKwor
CisKKworbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKKworU3RyaW5nIGdldEVudW1Db25zdGFudFZh
bHVlKGludCBjb2RlKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdldEVudW1Db25z
dGFudFZhbHVlKFQgZW51bVZhbHVlKQoreworICAgIHJldHVybiBnZXRFbnVtQ29uc3RhbnRWYWx1
ZShzdGF0aWNfY2FzdDxpbnQ+KGVudW1WYWx1ZSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0
SGVscGVycworCituYW1lc3BhY2UgUnVudGltZSB7CisKKy8qIEtleSBwYXRoLiAqLworY2xhc3Mg
S2V5UGF0aCA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKK3B1YmxpYzoKKyAgICAvLyBOYW1l
ZCBhZnRlciBwcm9wZXJ0eSBuYW1lICd0eXBlJyB3aGlsZSBnZW5lcmF0aW5nIEtleVBhdGguCisg
ICAgZW51bSBjbGFzcyBUeXBlIHsKKyAgICAgICAgTnVsbCA9IDAsCisgICAgICAgIFN0cmluZyA9
IDEsCisgICAgICAgIEFycmF5ID0gMiwKKyAgICB9OyAvLyBlbnVtIGNsYXNzIFR5cGUKKyAgICBl
bnVtIHsKKyAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAorICAgICAgICBUeXBlU2V0ID0gMSA8PCAw
LAorICAgICAgICBBbGxGaWVsZHNTZXQgPSAoVHlwZVNldCkKKyAgICB9OworCisgICAgdGVtcGxh
dGU8aW50IFNUQVRFPgorICAgIGNsYXNzIEJ1aWxkZXIgeworICAgIHByaXZhdGU6CisgICAgICAg
IFJlZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVzdWx0OworCisgICAgICAgIHRlbXBsYXRlPGludCBT
VEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0
aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXIoUmVmPC8qS2V5UGF0aCovSlNPTjo6
T2JqZWN0PiYmIG9iamVjdCkKKyAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3Qp
KQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxk
c1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKKyAgICAgICAgfQorICAg
ICAgICBmcmllbmQgY2xhc3MgS2V5UGF0aDsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgQnVpbGRl
cjxTVEFURSB8IFR5cGVTZXQ+JiBzZXRUeXBlKFR5cGUgdmFsdWUpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUeXBlU2V0KSwgcHJvcGVydHlfdHlwZV9h
bHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ0eXBlIl9zLCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUodmFs
dWUpKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VHlwZVNldD4oKTsKKyAgICAgICAg
fQorCisgICAgICAgIFJlZjxLZXlQYXRoPiByZWxlYXNlKCkKKyAgICAgICAgeworICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3Jl
YWR5KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihLZXlQYXRoKSA9PSBzaXpl
b2YoSlNPTjo6T2JqZWN0KSwgY2Fubm90X2Nhc3QpOworCisgICAgICAgICAgICBSZWY8SlNPTjo6
T2JqZWN0PiBqc29uUmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKKyAgICAgICAg
ICAgIGF1dG8gcmVzdWx0ID0gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8S2V5UGF0aD4q
PigmanNvblJlc3VsdCkpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQor
ICAgIH07CisKKyAgICAvKgorICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKKyAgICAgKiBS
ZWY8S2V5UGF0aD4gcmVzdWx0ID0gS2V5UGF0aDo6Y3JlYXRlKCkKKyAgICAgKiAgICAgLnNldFR5
cGUoLi4uKQorICAgICAqICAgICAucmVsZWFzZSgpOworICAgICAqLworICAgIHN0YXRpYyBCdWls
ZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8
Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOworICAgIH0KKworICAgIHZvaWQg
c2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgeworICAgICAgICBKU09OOjpPYmpl
Y3RCYXNlOjpzZXRTdHJpbmcoInN0cmluZyJfcywgdmFsdWUpOworICAgIH0KKworICAgIHZvaWQg
c2V0QXJyYXkoUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gdmFsdWUpCisgICAgeworICAg
ICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRBcnJheSgiYXJyYXkiX3MsIFdURk1vdmUodmFsdWUp
KTsKKyAgICB9Cit9OworCit9IC8vIFJ1bnRpbWUKKworCisKK25hbWVzcGFjZSBUZXN0SGVscGVy
cyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFByb3RvY29sRW51bVR5cGU+CitPcHRpb25hbDxQcm90
b2NvbEVudW1UeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJik7CisK
Ky8vIEVudW1zIGluIHRoZSAnUnVudGltZScgRG9tYWluCit0ZW1wbGF0ZTw+CitPcHRpb25hbDxJ
bnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlPiBwYXJzZUVudW1WYWx1
ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZT4o
Y29uc3QgU3RyaW5nJik7CisKK30gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCisKK30gLy8gbmFt
ZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9i
amVjdHMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0
aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9i
amVjdHMuaCIKKworI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK25hbWVzcGFjZSBQcm90b2Nv
bCB7CisKK25hbWVzcGFjZSBUZXN0SGVscGVycyB7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBjb25z
dCBlbnVtX2NvbnN0YW50X3ZhbHVlc1tdID0geworICAgICJudWxsIiwKKyAgICAic3RyaW5nIiwK
KyAgICAiYXJyYXkiLAorfTsKKworU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2Rl
KSB7CisgICAgcmV0dXJuIGVudW1fY29uc3RhbnRfdmFsdWVzW2NvZGVdOworfQorCisvLyBFbnVt
cyBpbiB0aGUgJ1J1bnRpbWUnIERvbWFpbgorCit0ZW1wbGF0ZTw+CitPcHRpb25hbDxJbnNwZWN0
b3I6OlByb3RvY29sOjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21T
dHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZT4oY29uc3Qg
U3RyaW5nJiBwcm90b2NvbFN0cmluZykKK3sKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0
YW50VmFsdWVzW10gPSB7CisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVu
dGltZTo6S2V5UGF0aDo6VHlwZTo6TnVsbCwKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlBy
b3RvY29sOjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlOjpTdHJpbmcsCisgICAgICAgIChzaXplX3Qp
SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZTo6QXJyYXksCisgICAg
fTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDM7ICsraSkKKyAgICAgICAgaWYgKHByb3Rv
Y29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKKyAg
ICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6
VHlwZSljb25zdGFudFZhbHVlc1tpXTsKKworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90b2Nv
bAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xPYmplY3RzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3Bh
dGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRp
b25hbC10eXBlLXNldHRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjaW1wb3J0IDx3dGYvUGxhdGZvcm0uaD4KKworI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2luY2x1ZGUg
PHd0Zi9SZXRhaW5QdHIuaD4KKworCisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKK30gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmRE
aXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0
Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRp
b25hbC10eXBlLXNldHRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tl
bmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNp
bmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbmNsdWRlIDx3dGYvSlNP
TlZhbHVlcy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1t
CisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMu
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0
IDx3dGYvUGxhdGZvcm0uaD4KKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5o
PgorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2Ug
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0CitAZW5kCisKKworIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBzaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0
aW9uLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW1wb3J0ICJUZXN0
UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0Fs
dGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdt
ZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJ
bnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCit7
CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKK30KKwor
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JD
b250cm9sbGVyKiljb250cm9sbGVyCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBp
ZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNvbnRyb2xsZXIpOwor
ICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAo
dm9pZClkZWFsbG9jCit7CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCitAZW5kCisKKworIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisKKyMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29s
SW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisj
aW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwor
CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorCisjIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBzaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRp
b24uaD4KKyNpbXBvcnQgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3Iv
UldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+CisKKworQGNsYXNzIFRlc3RQcm90b2NvbFJ1bnRpbWVL
ZXlQYXRoOworCit0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xSdW50aW1l
S2V5UGF0aFR5cGUpIHsKKyAgICBUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGVOdWxsLAor
ICAgIFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZVN0cmluZywKKyAgICBUZXN0UHJvdG9j
b2xSdW50aW1lS2V5UGF0aFR5cGVBcnJheSwKK307CisKK19fYXR0cmlidXRlX18oKHZpc2liaWxp
dHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aCA6
IFJXSVByb3RvY29sSlNPTk9iamVjdAorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoo
TlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQ7CistIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVj
dDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFR5cGU6KFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQ
YXRoVHlwZSl0eXBlOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2ln
bikgVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlIHR5cGU7CisvKiBvcHRpb25hbCAqLyBA
cHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKnN0cmluZzsKKy8qIG9wdGlvbmFs
ICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmFy
cmF5OworQGVuZAorCisKKworCisKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29s
QnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8
d3RmL1BsYXRmb3JtLmg+CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVz
dFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1
Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMu
aD4KKworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPHd0Zi9Q
bGF0Zm9ybS5oPgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgPFdlYkluc3Bl
Y3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KK09wdGlvbmFsPE9iakNFbnVt
VHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOworCitpbmxpbmUg
U3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlIHZh
bHVlKQoreworICAgIHN3aXRjaCh2YWx1ZSkgeworICAgIGNhc2UgVGVzdFByb3RvY29sUnVudGlt
ZUtleVBhdGhUeXBlTnVsbDoKKyAgICAgICAgcmV0dXJuICJudWxsIl9zOworICAgIGNhc2UgVGVz
dFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlU3RyaW5nOgorICAgICAgICByZXR1cm4gInN0cmlu
ZyJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZUFycmF5OgorICAg
ICAgICByZXR1cm4gImFycmF5Il9zOworICAgIH0KK30KKwordGVtcGxhdGU8PgoraW5saW5lIE9w
dGlvbmFsPFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZT4gZnJvbVByb3RvY29sU3RyaW5n
KGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09ICJudWxsIikKKyAgICAg
ICAgcmV0dXJuIFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZU51bGw7CisgICAgaWYgKHZh
bHVlID09ICJzdHJpbmciKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUnVudGltZUtleVBh
dGhUeXBlU3RyaW5nOworICAgIGlmICh2YWx1ZSA9PSAiYXJyYXkiKQorICAgICAgICByZXR1cm4g
VGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlQXJyYXk7CisgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKK30KKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNo
YWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5
cGVQYXJzZXIuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQ
cml2YXRlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbnRlcmZhY2UgVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChSdW50aW1lRG9tYWluKQorCisrICh2b2lkKV9wYXJz
ZUtleVBhdGg6KFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoICoqKW91dFZhbHVlIGZyb21QYXls
b2FkOihpZClwYXlsb2FkOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMgKFJ1bnRpbWVEb21haW4pCisKKysgKHZvaWQpX3BhcnNlS2V5UGF0aDoo
VGVzdFByb3RvY29sUnVudGltZUtleVBhdGggKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBh
eWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0Rp
Y3Rpb25hcnkgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbFJ1bnRpbWVL
ZXlQYXRoIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07Cit9CisKK0BlbmQKKworCisj
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorCisjIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBzaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5h
bC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQg
PFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisjaW1wb3J0IDx3
dGYvQXNzZXJ0aW9ucy5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFt
ZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFJ1bnRpbWVL
ZXlQYXRoCisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0
aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1
cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAInR5cGUiXSwgQCJ0eXBlIik7CisgICAgT3B0
aW9uYWw8VGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlPiB0eXBlID0gZnJvbVByb3RvY29s
U3RyaW5nPFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZT4ocGF5bG9hZFtAInR5cGUiXSk7
CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfRU5VTV9WQUxVRSh0eXBlLCBAInR5cGUiKTsK
KyAgICBzZWxmLnR5cGUgPSB0eXBlLnZhbHVlKCk7CisKKyAgICBzZWxmLnN0cmluZyA9IHBheWxv
YWRbQCJzdHJpbmciXTsKKworICAgIHNlbGYuYXJyYXkgPSBwYXlsb2FkW0AiYXJyYXkiXTsKKwor
ICAgIHJldHVybiBzZWxmOworfQorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmpl
Y3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9iamVjdAoreworICAgIGlmICghKHNlbGYgPSBb
c3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmplY3QgdG9KU09OT2JqZWN0XS5nZXQoKV0pKQor
ICAgICAgICByZXR1cm4gbmlsOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aFR5cGU6KFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZSl0eXBlCit7
CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisK
KyAgICBzZWxmLnR5cGUgPSB0eXBlOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQp
c2V0VHlwZTooVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlKXR5cGUKK3sKKyAgICBbc3Vw
ZXIgc2V0U3RyaW5nOnRvUHJvdG9jb2xTdHJpbmcodHlwZSkgZm9yS2V5OkAidHlwZSJdOworfQor
CistIChUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGUpdHlwZQoreworICAgIHJldHVybiBm
cm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlPihbc3VwZXIg
c3RyaW5nRm9yS2V5OkAidHlwZSJdKS52YWx1ZSgpOworfQorCistICh2b2lkKXNldFN0cmluZzoo
TlNTdHJpbmcgKilzdHJpbmcKK3sKKyAgICBbc3VwZXIgc2V0U3RyaW5nOnN0cmluZyBmb3JLZXk6
QCJzdHJpbmciXTsKK30KKworLSAoTlNTdHJpbmcgKilzdHJpbmcKK3sKKyAgICByZXR1cm4gW3N1
cGVyIHN0cmluZ0ZvcktleTpAInN0cmluZyJdOworfQorCistICh2b2lkKXNldEFycmF5OihOU0Fy
cmF5Lyo8TlNTdHJpbmc+Ki8gKilhcnJheQoreworICAgIFtzdXBlciBzZXRKU09OQXJyYXk6dG9K
U09OU3RyaW5nQXJyYXkoYXJyYXkpIGZvcktleTpAImFycmF5Il07Cit9CisKKy0gKE5TQXJyYXkv
KjxOU1N0cmluZz4qLyAqKWFycmF5Cit7CisgICAgcmV0dXJuIHRvT2JqQ1N0cmluZ0FycmF5KFtz
dXBlciBKU09OQXJyYXlGb3JLZXk6QCJhcnJheSJdKTsKK30KKworQGVuZAorCisKKyMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zaG91bGQtc3RyaXAtY29tbWVu
dHMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24tcmVzdWx0Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5lYmIyMTQyZDJkZgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC9zaG91bGQtc3RyaXAtY29tbWVudHMuanNvbi1yZXN1bHQKQEAgLTAsMCArMSw4NTIgQEAK
KyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMuaW4KKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaG91bGQtc3RyaXAtY29tbWVudHMuanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorIyMjIEVuZCBGaWxlOiBJbnNw
ZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMuaW4KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5h
dGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHNob3VsZC1zdHJpcC1jb21tZW50cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+
CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworI2luY2x1
ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JGcm9udGVuZFJvdXRlci5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgQWx0
ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHZvaWQgc2V0QmFja2VuZERp
c3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNr
ZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KKyAgICBCYWNrZW5kRGlzcGF0
Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRj
aGVyLmdldCgpOyB9Citwcml2YXRlOgorICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9i
YWNrZW5kRGlzcGF0Y2hlcjsKK307CisKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgor
CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjIyMg
RW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4g
RmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvUGxh
dGZvcm0uaD4KKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBT
dHJpbmcgRXJyb3JTdHJpbmc7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBF
bmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0
QmFja2VuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHNob3VsZC1zdHJpcC1jb21tZW50cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0QmFja2Vu
ZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9u
dGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3Rm
L05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCisjaWYg
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjaW5jbHVkZSAiVGVzdEFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgorI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK30g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0
Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bE9iamVjdHMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgRnJvbnRl
bmRSb3V0ZXI7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0
RnJvbnRlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNw
YXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaG91bGQtc3Ry
aXAtY29tbWVudHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hl
cnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVy
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9y
IHsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250
ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3Rz
LmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaG91bGQtc3RyaXAtY29tbWVu
dHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRp
b25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFByb3RvY29s
IHsKKworCisKKworCisKKworCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKwor
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KKy8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKworI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7
CisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAor
Cit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xP
YmplY3RzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNo
ZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaG91bGQtc3RyaXAtY29t
bWVudHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisj
aW1wb3J0IDx3dGYvUGxhdGZvcm0uaD4KKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5Q
dHIuaD4KKworCisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKK30gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5o
CisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaG91bGQtc3RyaXAtY29tbWVudHMuanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJj
b25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisj
aW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorCituYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBzaG91bGQtc3RyaXAtY29tbWVudHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDx3dGYvUGxhdGZvcm0uaD4KKworI2ltcG9ydCA8
V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5
ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5T
T2JqZWN0CitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9u
LmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaG91bGQtc3RyaXAtY29tbWVudHMuanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0
UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFs
LmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+CisjaW1wb3J0IDxK
YXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgor
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+CisK
K3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9j
b2xDb25maWd1cmF0aW9uCit7CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBf
Y29udHJvbGxlcjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVn
bWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCit7CisgICAgc2VsZiA9IFtz
dXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgQVNT
RVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKKyAgICByZXR1
cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgW3N1cGVyIGRlYWxsb2NdOwor
fQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1t
CisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVz
dFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zLmgiCisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5z
cGVjdG9yOworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5t
bQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBzaG91bGQtc3RyaXAtY29tbWVudHMuanNvbgorLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRp
b24uaD4KKyNpbXBvcnQgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3Iv
UldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+CisKKworCisKKworCisKKworCisKKworCisKKyNpbXBv
cnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4K
KworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sSW50ZXJuYWwuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNob3Vs
ZC1zdHJpcC1jb21tZW50cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNpbXBvcnQgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaW1wb3J0ICJUZXN0UHJvdG9j
b2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCisjaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBv
cnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKKworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
SW50ZXJuYWwuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
LmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaG91bGQtc3RyaXAtY29tbWVu
dHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1w
b3J0IDx3dGYvUGxhdGZvcm0uaD4KKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0
IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+CisKK25hbWVzcGFj
ZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+CitPcHRpb25h
bDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsK
KworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNob3VsZC1zdHJp
cC1jb21tZW50cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorCisjaW1wb3J0ICJU
ZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKKyNpbXBv
cnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisKK3VzaW5n
IG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworCisKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlw
ZXMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaG91bGQtc3RyaXAtY29t
bWVudHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisj
aW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05P
YmplY3RQcml2YXRlLmg+CisjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2ltcG9ydCA8d3Rm
L0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisjIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1h
bGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNl
ZC1wcmltaXRpdmUtdHlwZS5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMC4uM2Q5YTBiZjVkMDIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlv
bi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24tcmVzdWx0CkBAIC0wLDAgKzEsODczIEBACisj
IyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzLmluCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2
ZS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKyMj
IyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzLmluCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUu
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5o
IgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+
CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKwor
bmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVy
IHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5k
RGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3Zl
KGRpc3BhdGNoZXIpOyB9CisgICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVy
KCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQorcHJpdmF0ZToK
KyAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Cit9Owor
CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQ
RUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRl
QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0
Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRp
b24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3Jt
Lmg+CisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3R5cGVkZWYgU3RyaW5n
IEVycm9yU3RyaW5nOworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZp
bGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tl
bmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBl
LWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgor
I2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorI2lu
Y2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNlbmRpZiAvLyBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0
QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlz
cGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFy
YXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL1BsYXRm
b3JtLmg+CisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8d3Rm
L0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNw
YWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEZyb250ZW5kUm91dGVyOworCit9IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorCisj
IyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10
eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCisK
KyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK30g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3Bh
dGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXBy
aW1pdGl2ZS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KKyNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK25hbWVzcGFj
ZSBQcm90b2NvbCB7CisKKworCisKKworLy8gVHlwZWRlZnMuCituYW1lc3BhY2UgUnVudGltZSB7
CisvKiBVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIuICovCit0eXBlZGVmIGludCBSZW1vdGVPYmpl
Y3RJZDsKK30gLy8gUnVudGltZQorLy8gRW5kIG9mIHR5cGVkZWZzLgorCisKKworfSAvLyBuYW1l
c3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbE9iamVjdHMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2Jq
ZWN0cy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0
aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdFBy
b3RvY29sT2JqZWN0cy5oIgorCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNl
IFByb3RvY29sIHsKKworCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisK
KyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmlt
aXRpdmUtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbXBvcnQgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8d3RmL1Jl
dGFpblB0ci5oPgorCisKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNo
ZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5t
bQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxp
YXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFj
a2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgor
I2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9K
U09OVmFsdWVzLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMu
bW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmlt
aXRpdmUtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbXBvcnQgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVz
dFByb3RvY29sLmg+CisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQor
QGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKK0BlbmQKKwor
CisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorCisjIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRl
c3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJu
YWwuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorI2ltcG9y
dCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9y
dCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+
CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4K
KwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90
b2NvbENvbmZpZ3VyYXRpb24KK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIq
IF9jb250cm9sbGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihB
dWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0g
W3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBB
U1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJl
dHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbc3VwZXIgZGVhbGxvY107
Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24u
bW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQt
cHJpbWl0aXZlLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisK
K3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xFdmVudERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNl
ZC1wcmltaXRpdmUtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorI2ltcG9ydCA8d3Rm
L1BsYXRmb3JtLmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmpl
Y3QuaD4KKworCisKKworCisKKworCisKKworCisKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JX
SVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgorCisjIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2Vk
LXByaW1pdGl2ZS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI2ltcG9ydCA8d3RmL1BsYXRmb3JtLmg+CisKKyNpbXBvcnQgIlRlc3RQcm90b2Nv
bC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKKyNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9y
dCA8d3RmL0pTT05WYWx1ZXMuaD4KKworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJ
bnRlcm5hbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMu
aAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxp
YXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNpbXBvcnQgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaW1wb3J0ICJUZXN0UHJv
dG9jb2wuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lv
bnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIE9iakNF
bnVtVHlwZT4KK09wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0
IFN0cmluZyYgdmFsdWUpOworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKworIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNp
bXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9S
V0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0
b3I7CisKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChSdW50aW1lRG9t
YWluKQorCisrICh2b2lkKV9wYXJzZVJlbW90ZU9iamVjdElkOihOU051bWJlciAqKilvdXRWYWx1
ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChSdW50aW1lRG9tYWluKQorCisrICh2b2lkKV9wYXJz
ZVJlbW90ZU9iamVjdElkOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5
bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TTnVt
YmVyIGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gKE5TTnVtYmVyICopcGF5bG9hZDsKK30KKwor
QGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisK
KyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5q
c29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFBy
aXZhdGUuaD4KKyNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW1wb3J0IDx3dGYvSlNPTlZh
bHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisKKworCisjIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hcnJh
eS10eXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uLXJlc3Vs
dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYTQ2NjhlNTE4YzEKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24tcmVzdWx0CkBA
IC0wLDAgKzEsMTA1NCBAQAorIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5k
cy5qcy5pbgorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRp
b24tYXJyYXktdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKy8vIERlYnVnZ2VyCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJEZWJ1
Z2dlciIsIG51bGwpOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIkRlYnVnZ2VyLlJl
YXNvbiIsIHtEaWVkOiAiRGllZCIsIEZhaW50ZWQ6ICJGYWludGVkIiwgSHVuZ3J5OiAiSHVuZ3J5
In0pOworSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiRGVidWdnZXIiLCBudWxsKTsK
KyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzLmluCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKworbmFtZXNwYWNl
IEluc3BlY3RvciB7CisKK2NsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1Ymxp
YzoKKyAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hl
cj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNo
ZXIpOyB9CisgICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3Qg
eyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQorcHJpdmF0ZToKKyAgICBSZWZQ
dHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Cit9OworCisKKworCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQorIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERp
c3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXkt
dHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpbmNsdWRlICJUZXN0
UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCisKKwor
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0
Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5
cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNs
dWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQorI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0
Y2hlcnMuaCIKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVn
aW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCisvLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisj
aW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEZyb250ZW5kUm91dGVyOworCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0
Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10
eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCisK
KyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK30g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3Bh
dGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBl
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9u
cy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK25hbWVzcGFjZSBQcm90b2NvbCB7
CisKKworCisvLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KK25hbWVzcGFjZSBEZWJ1Z2dlciB7Citl
bnVtIGNsYXNzIFJlYXNvbjsKK30gLy8gRGVidWdnZXIKKy8vIEVuZCBvZiBmb3J3YXJkIGRlY2xh
cmF0aW9ucy4KKworCisvLyBUeXBlZGVmcy4KK25hbWVzcGFjZSBEZWJ1Z2dlciB7Cit0eXBlZGVm
IGludCBCcmVha3BvaW50SWQ7Cit9IC8vIERlYnVnZ2VyCisKK25hbWVzcGFjZSBSdW50aW1lIHsK
K3R5cGVkZWYgaW50IE9iamVjdElkOwordHlwZWRlZiBKU09OOjpBcnJheU9mPGludD4gTHVja3lO
dW1iZXJzOwordHlwZWRlZiBKU09OOjpBcnJheU9mPFN0cmluZz4gQmFieU5hbWVzOwordHlwZWRl
ZiBKU09OOjpBcnJheU9mPGludD4gTmV3T2JqZWN0czsKK3R5cGVkZWYgSlNPTjo6QXJyYXlPZjxp
bnQ+IE9sZE9iamVjdHM7Cit0eXBlZGVmIEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGVidWdnZXI6OlJlYXNvbj4gU3RvcFJlYXNvbnM7Cit9IC8vIFJ1bnRpbWUKKy8vIEVuZCBv
ZiB0eXBlZGVmcy4KKworbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKKworU3RyaW5nIGdldEVudW1D
b25zdGFudFZhbHVlKGludCBjb2RlKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdl
dEVudW1Db25zdGFudFZhbHVlKFQgZW51bVZhbHVlKQoreworICAgIHJldHVybiBnZXRFbnVtQ29u
c3RhbnRWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KGVudW1WYWx1ZSkpOworfQorCit9IC8vIG5hbWVz
cGFjZSBUZXN0SGVscGVycworCituYW1lc3BhY2UgRGVidWdnZXIgeworCitlbnVtIGNsYXNzIFJl
YXNvbiB7CisgICAgRGllZCA9IDAsCisgICAgRmFpbnRlZCA9IDEsCisgICAgSHVuZ3J5ID0gMiwK
K307IC8vIGVudW0gY2xhc3MgUmVhc29uCisKK30gLy8gRGVidWdnZXIKKworCisKK25hbWVzcGFj
ZSBUZXN0SGVscGVycyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFByb3RvY29sRW51bVR5cGU+CitP
cHRpb25hbDxQcm90b2NvbEVudW1UeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmcoY29uc3Qg
U3RyaW5nJik7CisKKy8vIEVudW1zIGluIHRoZSAnRGVidWdnZXInIERvbWFpbgordGVtcGxhdGU8
PgorT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbj4gcGFyc2VF
bnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb24+
KGNvbnN0IFN0cmluZyYpOworCit9IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycworCit9IC8vIG5h
bWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworbmFtZXNwYWNl
IFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKKworLy8g
SGFzaCBkZWNsYXJhdGlvbnMgaW4gdGhlICdEZWJ1Z2dlcicgRG9tYWluCit0ZW1wbGF0ZTw+Citz
dHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbj4g
eworICAgIHR5cGVkZWYgSW50SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVh
c29uPiBIYXNoOworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisjIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbE9iamVjdHMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5j
cHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFy
cmF5LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgor
CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworbmFt
ZXNwYWNlIFRlc3RIZWxwZXJzIHsKKworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29u
c3RhbnRfdmFsdWVzW10gPSB7CisgICAgIkRpZWQiLAorICAgICJGYWludGVkIiwKKyAgICAiSHVu
Z3J5IiwKK307CisKK1N0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgeworICAg
IHJldHVybiBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb2RlXTsKK30KKworLy8gRW51bXMgaW4gdGhl
ICdEZWJ1Z2dlcicgRG9tYWluCisKK3RlbXBsYXRlPD4KK09wdGlvbmFsPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRlYnVnZ2VyOjpSZWFzb24+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0
b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uPihjb25zdCBTdHJpbmcmIHByb3RvY29sU3Ry
aW5nKQoreworICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsKKyAg
ICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uOjpEaWVk
LAorICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb246
OkZhaW50ZWQsCisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6
OlJlYXNvbjo6SHVuZ3J5LAorICAgIH07CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAzOyAr
K2kpCisgICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tj
b25zdGFudFZhbHVlc1tpXV0pCisgICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRlYnVnZ2VyOjpSZWFzb24pY29uc3RhbnRWYWx1ZXNbaV07CisKKyAgICByZXR1cm4gV1RG
OjpudWxsb3B0OworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycworCisKKworfSAvLyBu
YW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8d3RmL1BsYXRmb3JtLmg+CisKKyNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMu
aD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKKworCituYW1lc3BhY2UgSW5zcGVjdG9y
IHsKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
QmFja2VuZERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
dHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJv
dG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVy
bmFsLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW5jbHVk
ZSA8d3RmL0pTT05WYWx1ZXMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK30gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNw
YXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5o
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJh
eS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I2ltcG9ydCA8d3RmL1BsYXRmb3JtLmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJv
dG9jb2wuaD4KKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50
ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAorQGVuZAorCisKKyMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbi5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2ltcG9ydCAi
VGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgorCit1c2luZyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
bgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Cit9
CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVj
dG9yQ29udHJvbGxlciopY29udHJvbGxlcgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Cisg
ICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIEFTU0VSVChjb250cm9sbGVy
KTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9CisK
Ky0gKHZvaWQpZGVhbGxvYworeworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworQGVuZAorCisK
KyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorCisjIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2Nv
bEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgor
I2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsK
KworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9u
Lmg+CisjaW1wb3J0IDx3dGYvUGxhdGZvcm0uaD4KKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JX
SVByb3RvY29sSlNPTk9iamVjdC5oPgorCisKKworCit0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2Vy
LCBUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbikgeworICAgIFRlc3RQcm90b2NvbERlYnVnZ2Vy
UmVhc29uRGllZCwKKyAgICBUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbkZhaW50ZWQsCisgICAg
VGVzdFByb3RvY29sRGVidWdnZXJSZWFzb25IdW5ncnksCit9OworCisKKworCisKKworCisKKyNp
bXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMu
aD4KKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAorCisjIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sSW50ZXJuYWwuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5
cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaW1wb3J0ICJU
ZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgi
CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIu
aD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKKworCisKKyMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sSW50ZXJuYWwuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xh
cmF0aW9uLWFycmF5LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjaW1wb3J0IDx3dGYvUGxhdGZvcm0uaD4KKworI2ltcG9ydCAiVGVzdFByb3Rv
Y29sLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25z
Lmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51
bVR5cGU+CitPcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBT
dHJpbmcmIHZhbHVlKTsKKworaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90
b2NvbERlYnVnZ2VyUmVhc29uIHZhbHVlKQoreworICAgIHN3aXRjaCh2YWx1ZSkgeworICAgIGNh
c2UgVGVzdFByb3RvY29sRGVidWdnZXJSZWFzb25EaWVkOgorICAgICAgICByZXR1cm4gIkRpZWQi
X3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbkZhaW50ZWQ6CisgICAgICAg
IHJldHVybiAiRmFpbnRlZCJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERlYnVnZ2VyUmVhc29u
SHVuZ3J5OgorICAgICAgICByZXR1cm4gIkh1bmdyeSJfczsKKyAgICB9Cit9CisKK3RlbXBsYXRl
PD4KK2lubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbj4gZnJvbVByb3Rv
Y29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09ICJEaWVk
IikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERlYnVnZ2VyUmVhc29uRGllZDsKKyAgICBp
ZiAodmFsdWUgPT0gIkZhaW50ZWQiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGVidWdn
ZXJSZWFzb25GYWludGVkOworICAgIGlmICh2YWx1ZSA9PSAiSHVuZ3J5IikKKyAgICAgICAgcmV0
dXJuIFRlc3RQcm90b2NvbERlYnVnZ2VyUmVhc29uSHVuZ3J5OworICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7Cit9CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29s
VHlwZVBhcnNlci5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVj
dFByaXZhdGUuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGludGVyZmFjZSBU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKERlYnVnZ2VyRG9tYWluKQorCisrICh2b2lkKV9w
YXJzZUJyZWFrcG9pbnRJZDooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBh
eWxvYWQ7CisrICh2b2lkKV9wYXJzZVJlYXNvbjooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBh
eWxvYWQ6KGlkKXBheWxvYWQ7CisKK0BlbmQKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zIChSdW50aW1lRG9tYWluKQorCisrICh2b2lkKV9wYXJzZU9iamVjdElkOihOU051
bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNl
THVja3lOdW1iZXJzOihOU0FycmF5Lyo8TlNOdW1iZXI+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxv
YWQ6KGlkKXBheWxvYWQ7CisrICh2b2lkKV9wYXJzZUJhYnlOYW1lczooTlNBcnJheS8qPE5TU3Ry
aW5nPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworKyAodm9pZClfcGFy
c2VOZXdPYmplY3RzOihOU0FycmF5Lyo8TlNOdW1iZXI+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxv
YWQ6KGlkKXBheWxvYWQ7CisrICh2b2lkKV9wYXJzZU9sZE9iamVjdHM6KE5TQXJyYXkvKjxOU051
bWJlcj4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3Bh
cnNlU3RvcFJlYXNvbnM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5
bG9hZDooaWQpcGF5bG9hZDsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zIChEZWJ1Z2dlckRvbWFpbikKKworKyAodm9pZClfcGFyc2VCcmVha3Bv
aW50SWQ6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7Cisg
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNOdW1iZXIgY2xhc3Nd
KTsKKyAgICAqb3V0VmFsdWUgPSAoTlNOdW1iZXIgKilwYXlsb2FkOworfQorCisrICh2b2lkKV9w
YXJzZVJlYXNvbjooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQK
K3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBj
bGFzc10pOworICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbERlYnVnZ2VyUmVhc29uPiByZXN1bHQg
PSBJbnNwZWN0b3I6OmZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNv
bj4ocGF5bG9hZCk7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfRU5VTV9WQUxVRShyZXN1
bHQsIEAiUmVhc29uIik7CisgICAgKm91dFZhbHVlID0gQChyZXN1bHQudmFsdWUoKSk7Cit9CisK
K0BlbmQKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFJ1bnRp
bWVEb21haW4pCisKKysgKHZvaWQpX3BhcnNlT2JqZWN0SWQ6KE5TTnVtYmVyICoqKW91dFZhbHVl
IGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURf
VFlQRShwYXlsb2FkLCBbTlNOdW1iZXIgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSAoTlNOdW1i
ZXIgKilwYXlsb2FkOworfQorCisrICh2b2lkKV9wYXJzZUx1Y2t5TnVtYmVyczooTlNBcnJheS8q
PE5TTnVtYmVyPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNBcnJheS8qPE5TTnVtYmVy
PiovIGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gKE5TQXJyYXkvKjxOU051bWJlcj4qLyAqKXBh
eWxvYWQ7Cit9CisKKysgKHZvaWQpX3BhcnNlQmFieU5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+
Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENF
UFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gY2xhc3Nd
KTsKKyAgICAqb3V0VmFsdWUgPSAoTlNBcnJheS8qPE5TU3RyaW5nPiovICopcGF5bG9hZDsKK30K
KworKyAodm9pZClfcGFyc2VOZXdPYmplY3RzOihOU0FycmF5Lyo8TlNOdW1iZXI+Ki8gKiopb3V0
VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9S
X0JBRF9UWVBFKHBheWxvYWQsIFtOU0FycmF5Lyo8TlNOdW1iZXI+Ki8gY2xhc3NdKTsKKyAgICAq
b3V0VmFsdWUgPSAoTlNBcnJheS8qPE5TTnVtYmVyPiovICopcGF5bG9hZDsKK30KKworKyAodm9p
ZClfcGFyc2VPbGRPYmplY3RzOihOU0FycmF5Lyo8TlNOdW1iZXI+Ki8gKiopb3V0VmFsdWUgZnJv
bVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBF
KHBheWxvYWQsIFtOU0FycmF5Lyo8TlNOdW1iZXI+Ki8gY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUg
PSAoTlNBcnJheS8qPE5TTnVtYmVyPiovICopcGF5bG9hZDsKK30KKworKyAodm9pZClfcGFyc2VT
dG9wUmVhc29uczooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2Fk
OihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2Fk
LCBbTlNBcnJheS8qPE5TU3RyaW5nPiovIGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gKE5TQXJy
YXkvKjxOU1N0cmluZz4qLyAqKXBheWxvYWQ7Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sVHlwZXMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRl
Y2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0
ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9S
V0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5o
PgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3Rv
cjsKKworCisKKworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC90eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0
aW9uLWVudW0tdHlwZS5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMC4uOTY2OWNmNjJhODIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1l
bnVtLXR5cGUuanNvbi1yZXN1bHQKQEAgLTAsMCArMSwxMDY3IEBACisjIyMgQmVnaW4gRmlsZTog
SW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzLmluCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisvLyBSdW50aW1lCitJbnNwZWN0b3JCYWNrZW5k
LnJlZ2lzdGVyRG9tYWluKCJSdW50aW1lIiwgbnVsbCk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lz
dGVyRW51bSgiUnVudGltZS5GYXJtQW5pbWFscyIsIHtQaWdzOiAiUGlncyIsIENvd3M6ICJDb3dz
IiwgQ2F0czogIkNhdHMiLCBIZW5zOiAiSGVucyJ9KTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0
ZXJFbnVtKCJSdW50aW1lLlR3b0xlZ2dlZEFuaW1hbHMiLCB7RHVja3M6ICJEdWNrcyIsIEhlbnM6
ICJIZW5zIiwgQ3Jvd3M6ICJDcm93cyIsIEZsYW1pbmdvczogIkZsYW1pbmdvcyJ9KTsKK0luc3Bl
Y3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIlJ1bnRpbWUiLCBudWxsKTsKKyMjIyBFbmQgRmls
ZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzLmluCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0
QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3Rm
L1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsK
KworY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHZvaWQg
c2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNo
ZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KKyAgICBC
YWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2Jh
Y2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Citwcml2YXRlOgorICAgIFJlZlB0cjxCYWNrZW5kRGlz
cGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKK307CisKKworCisKK30gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCisjIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAor
CisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0
cy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0
b3IgeworCit0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKworCisKK30gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZh
bHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENI
RVJTKQorI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNlbmRp
ZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworbmFtZXNwYWNl
IEluc3BlY3RvciB7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBG
aWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZy
b250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5
cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0u
aD4KKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDx3dGYvSlNP
TlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKKworY2xhc3MgRnJvbnRlbmRSb3V0ZXI7CisKK30gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KKy8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
IDx3dGYvUGxhdGZvcm0uaD4KKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclBy
b3RvY29sVHlwZXMuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKKworCisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKworCisvLyBGb3J3YXJk
IGRlY2xhcmF0aW9ucy4KK25hbWVzcGFjZSBSdW50aW1lIHsKK2VudW0gY2xhc3MgRmFybUFuaW1h
bHM7CitlbnVtIGNsYXNzIFR3b0xlZ2dlZEFuaW1hbHM7Cit9IC8vIFJ1bnRpbWUKKy8vIEVuZCBv
ZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KKworCisKKworbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsK
KworU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKTsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKFQgZW51bVZhbHVlKQoreworICAg
IHJldHVybiBnZXRFbnVtQ29uc3RhbnRWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KGVudW1WYWx1ZSkp
OworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycworCituYW1lc3BhY2UgUnVudGltZSB7
CisKK2VudW0gY2xhc3MgRmFybUFuaW1hbHMgeworICAgIFBpZ3MgPSAwLAorICAgIENvd3MgPSAx
LAorICAgIENhdHMgPSAyLAorICAgIEhlbnMgPSAzLAorfTsgLy8gZW51bSBjbGFzcyBGYXJtQW5p
bWFscworCitlbnVtIGNsYXNzIFR3b0xlZ2dlZEFuaW1hbHMgeworICAgIER1Y2tzID0gNCwKKyAg
ICBIZW5zID0gMywKKyAgICBDcm93cyA9IDUsCisgICAgRmxhbWluZ29zID0gNiwKK307IC8vIGVu
dW0gY2xhc3MgVHdvTGVnZ2VkQW5pbWFscworCit9IC8vIFJ1bnRpbWUKKworCisKK25hbWVzcGFj
ZSBUZXN0SGVscGVycyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFByb3RvY29sRW51bVR5cGU+CitP
cHRpb25hbDxQcm90b2NvbEVudW1UeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmcoY29uc3Qg
U3RyaW5nJik7CisKKy8vIEVudW1zIGluIHRoZSAnUnVudGltZScgRG9tYWluCit0ZW1wbGF0ZTw+
CitPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpGYXJtQW5pbWFscz4gcGFy
c2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1B
bmltYWxzPihjb25zdCBTdHJpbmcmKTsKK3RlbXBsYXRlPD4KK09wdGlvbmFsPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0
cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxzPihjb25z
dCBTdHJpbmcmKTsKKworfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKKworfSAvLyBuYW1lc3Bh
Y2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKK25hbWVzcGFjZSBXVEYg
eworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7CisKKy8vIEhhc2gg
ZGVjbGFyYXRpb25zIGluIHRoZSAnUnVudGltZScgRG9tYWluCit0ZW1wbGF0ZTw+CitzdHJ1Y3Qg
RGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM+IHsK
KyAgICB0eXBlZGVmIEludEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFu
aW1hbHM+IEhhc2g7Cit9OwordGVtcGxhdGU8Pgorc3RydWN0IERlZmF1bHRIYXNoPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM+IHsKKyAgICB0eXBlZGVmIElu
dEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFscz4gSGFz
aDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xP
YmplY3RzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUu
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorCisjaW5jbHVk
ZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1l
c3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworbmFtZXNwYWNlIFRl
c3RIZWxwZXJzIHsKKworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFs
dWVzW10gPSB7CisgICAgIlBpZ3MiLAorICAgICJDb3dzIiwKKyAgICAiQ2F0cyIsCisgICAgIkhl
bnMiLAorICAgICJEdWNrcyIsCisgICAgIkNyb3dzIiwKKyAgICAiRmxhbWluZ29zIiwKK307CisK
K1N0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgeworICAgIHJldHVybiBlbnVt
X2NvbnN0YW50X3ZhbHVlc1tjb2RlXTsKK30KKworLy8gRW51bXMgaW4gdGhlICdSdW50aW1lJyBE
b21haW4KKwordGVtcGxhdGU8PgorT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGlt
ZTo6RmFybUFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpSdW50aW1lOjpGYXJtQW5pbWFscz4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykK
K3sKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7CisgICAgICAg
IChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM6OlBpZ3Ms
CisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1h
bHM6OkNvd3MsCisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6
RmFybUFuaW1hbHM6OkNhdHMsCisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6
UnVudGltZTo6RmFybUFuaW1hbHM6OkhlbnMsCisgICAgfTsKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IDQ7ICsraSkKKyAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3Rh
bnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKKyAgICAgICAgICAgIHJldHVybiAoSW5zcGVj
dG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHMpY29uc3RhbnRWYWx1ZXNbaV07CisK
KyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCit0ZW1wbGF0ZTw+CitPcHRpb25hbDxJbnNw
ZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxzPiBwYXJzZUVudW1WYWx1
ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFs
cz4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKK3sKKyAgICBzdGF0aWMgY29uc3Qgc2l6
ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7CisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90
b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFsczo6RHVja3MsCisgICAgICAgIChzaXplX3Qp
SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFsczo6SGVucywKKyAg
ICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUd29MZWdnZWRBbmlt
YWxzOjpDcm93cywKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1l
OjpUd29MZWdnZWRBbmltYWxzOjpGbGFtaW5nb3MsCisgICAgfTsKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IDQ7ICsraSkKKyAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1fY29u
c3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKKyAgICAgICAgICAgIHJldHVybiAoSW5z
cGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFscyljb25zdGFudFZhbHVl
c1tpXTsKKworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIFRl
c3RIZWxwZXJzCisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorCisj
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPHd0
Zi9QbGF0Zm9ybS5oPgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJu
YXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCisK
KworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisK
KyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmln
LmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1
ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKworbmFtZXNwYWNlIElu
c3BlY3RvciB7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbi5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
dHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDx3dGYvUGxhdGZvcm0uaD4KKworI2ltcG9ydCA8
V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5
ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5T
T2JqZWN0CitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9u
LmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5q
c29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50
ZXJuYWwuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorI2lt
cG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2lt
cG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJz
Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMu
aD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24KK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xs
ZXIqIF9jb250cm9sbGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVy
OihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxm
ID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAg
ICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAg
IHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbc3VwZXIgZGVhbGxv
Y107Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRp
b24ubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0K
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0t
dHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNp
bXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFt
ZXNwYWNlIEluc3BlY3RvcjsKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlz
cGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxGb3Vu
ZGF0aW9uL0ZvdW5kYXRpb24uaD4KKyNpbXBvcnQgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaW1wb3J0
IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+CisKKworCisKK3R5cGVkZWYg
TlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFscykgeworICAg
IFRlc3RQcm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFsc1BpZ3MsCisgICAgVGVzdFByb3RvY29sUnVu
dGltZUZhcm1BbmltYWxzQ293cywKKyAgICBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHND
YXRzLAorICAgIFRlc3RQcm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFsc0hlbnMsCit9OworCit0eXBl
ZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFs
cykgeworICAgIFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzRHVja3MsCisgICAg
VGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHNIZW5zLAorICAgIFRlc3RQcm90b2Nv
bFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzQ3Jvd3MsCisgICAgVGVzdFByb3RvY29sUnVudGltZVR3
b0xlZ2dlZEFuaW1hbHNGbGFtaW5nb3MsCit9OworCisKKworCisKKworCisKKyNpbXBvcnQgPFdl
Ykluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4KKworIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
SW50ZXJuYWwuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFy
YXRpb24tZW51bS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI2ltcG9ydCA8d3RmL1BsYXRmb3JtLmg+CisKKyNpbXBvcnQgIlRlc3RQcm90b2Nv
bC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKKyNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9y
dCA8d3RmL0pTT05WYWx1ZXMuaD4KKworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJ
bnRlcm5hbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMu
aAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51
bS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I2ltcG9ydCA8d3RmL1BsYXRmb3JtLmg+CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2lt
cG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgorCituYW1l
c3BhY2UgSW5zcGVjdG9yIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgorT3B0
aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1
ZSk7CisKK2lubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xSdW50aW1l
RmFybUFuaW1hbHMgdmFsdWUpCit7CisgICAgc3dpdGNoKHZhbHVlKSB7CisgICAgY2FzZSBUZXN0
UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHNQaWdzOgorICAgICAgICByZXR1cm4gIlBpZ3MiX3M7
CisgICAgY2FzZSBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHNDb3dzOgorICAgICAgICBy
ZXR1cm4gIkNvd3MiX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHND
YXRzOgorICAgICAgICByZXR1cm4gIkNhdHMiX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xSdW50
aW1lRmFybUFuaW1hbHNIZW5zOgorICAgICAgICByZXR1cm4gIkhlbnMiX3M7CisgICAgfQorfQor
Cit0ZW1wbGF0ZTw+CitpbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sUnVudGltZUZhcm1Bbmlt
YWxzPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAo
dmFsdWUgPT0gIlBpZ3MiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUnVudGltZUZhcm1B
bmltYWxzUGlnczsKKyAgICBpZiAodmFsdWUgPT0gIkNvd3MiKQorICAgICAgICByZXR1cm4gVGVz
dFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzQ293czsKKyAgICBpZiAodmFsdWUgPT0gIkNhdHMi
KQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzQ2F0czsKKyAg
ICBpZiAodmFsdWUgPT0gIkhlbnMiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUnVudGlt
ZUZhcm1BbmltYWxzSGVuczsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCitpbmxpbmUg
U3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1h
bHMgdmFsdWUpCit7CisgICAgc3dpdGNoKHZhbHVlKSB7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xS
dW50aW1lVHdvTGVnZ2VkQW5pbWFsc0R1Y2tzOgorICAgICAgICByZXR1cm4gIkR1Y2tzIl9zOwor
ICAgIGNhc2UgVGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHNIZW5zOgorICAgICAg
ICByZXR1cm4gIkhlbnMiX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2Vk
QW5pbWFsc0Nyb3dzOgorICAgICAgICByZXR1cm4gIkNyb3dzIl9zOworICAgIGNhc2UgVGVzdFBy
b3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHNGbGFtaW5nb3M6CisgICAgICAgIHJldHVybiAi
RmxhbWluZ29zIl9zOworICAgIH0KK30KKwordGVtcGxhdGU8PgoraW5saW5lIE9wdGlvbmFsPFRl
c3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gIkR1Y2tzIikKKyAgICAgICAg
cmV0dXJuIFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzRHVja3M7CisgICAgaWYg
KHZhbHVlID09ICJIZW5zIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFJ1bnRpbWVUd29M
ZWdnZWRBbmltYWxzSGVuczsKKyAgICBpZiAodmFsdWUgPT0gIkNyb3dzIikKKyAgICAgICAgcmV0
dXJuIFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzQ3Jvd3M7CisgICAgaWYgKHZh
bHVlID09ICJGbGFtaW5nb3MiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUnVudGltZVR3
b0xlZ2dlZEFuaW1hbHNGbGFtaW5nb3M7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKwor
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRp
b24tZW51bS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgorI2lt
cG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKwordXNp
bmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMgKFJ1bnRpbWVEb21haW4pCisKKysgKHZvaWQpX3BhcnNlRmFybUFuaW1hbHM6KE5T
TnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworKyAodm9pZClfcGFy
c2VUd29MZWdnZWRBbmltYWxzOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQp
cGF5bG9hZDsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zIChSdW50aW1lRG9tYWluKQorCisrICh2b2lkKV9wYXJzZUZhcm1BbmltYWxzOihOU051
bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TU3RyaW5nIGNsYXNzXSk7CisgICAgT3B0
aW9uYWw8VGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzPiByZXN1bHQgPSBJbnNwZWN0b3I6
OmZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHM+KHBheWxv
YWQpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX0VOVU1fVkFMVUUocmVzdWx0LCBAIkZh
cm1BbmltYWxzIik7CisgICAgKm91dFZhbHVlID0gQChyZXN1bHQudmFsdWUoKSk7Cit9CisKKysg
KHZvaWQpX3BhcnNlVHdvTGVnZ2VkQW5pbWFsczooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBh
eWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBh
eWxvYWQsIFtOU1N0cmluZyBjbGFzc10pOworICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbFJ1bnRp
bWVUd29MZWdnZWRBbmltYWxzPiByZXN1bHQgPSBJbnNwZWN0b3I6OmZyb21Qcm90b2NvbFN0cmlu
ZzxUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFscz4ocGF5bG9hZCk7CisgICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9CQURfRU5VTV9WQUxVRShyZXN1bHQsIEAiVHdvTGVnZ2VkQW5pbWFs
cyIpOworICAgICpvdXRWYWx1ZSA9IEAocmVzdWx0LnZhbHVlKCkpOworfQorCitAZW5kCisKKwor
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5o
IgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPFdl
Ykluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisjaW1wb3J0IDx3dGYv
QXNzZXJ0aW9ucy5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNw
YWNlIEluc3BlY3RvcjsKKworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5t
bQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbi1yZXN1bHQgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlw
ZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMC4uNjk0NDgwMmVkN2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1k
ZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uLXJlc3VsdApAQCAtMCwwICsxLDI0MzIgQEAKKyMj
IyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMuaW4KKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworLy8gRGF0YWJhc2UK
K0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIkRhdGFiYXNlIiwgbnVsbCk7CitJbnNw
ZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiRGF0YWJhc2UuTW91c2VCdXR0b24iLCB7Tm9uZTog
Ik5vbmUiLCBMZWZ0OiAiTGVmdCIsIE1pZGRsZTogIk1pZGRsZSIsIFJpZ2h0OiAiUmlnaHQifSk7
CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiRGF0YWJhc2UuT3B0aW9uYWxQYXJhbWV0
ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSIsIHtMVFI6ICJMVFIiLCBSVEw6ICJSVEwifSk7CitJbnNw
ZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiRGF0YWJhc2UuUGFyYW1ldGVyQnVuZGxlRGlyZWN0
aW9uYWxpdHkiLCB7TFRSOiAiTFRSIiwgUlRMOiAiUlRMIn0pOworSW5zcGVjdG9yQmFja2VuZC5h
Y3RpdmF0ZURvbWFpbigiRGF0YWJhc2UiLCBudWxsKTsKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9y
QmFja2VuZENvbW1hbmRzLmpzLmluCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBl
LWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0u
aD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCisjaW5j
bHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckZyb250ZW5kUm91dGVyLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdm9pZCBzZXRCYWNrZW5k
RGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2Jh
Y2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQorICAgIEJhY2tlbmREaXNw
YXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3Bh
dGNoZXIuZ2V0KCk7IH0KK3ByaXZhdGU6CisgICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBt
X2JhY2tlbmREaXNwYXRjaGVyOworfTsKKworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
CisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyMj
IyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KKy8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
IDx3dGYvUGxhdGZvcm0uaD4KKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwor
dHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgorLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5o
PgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQor
I2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNlbmRpZiAvLyBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBU
ZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5k
RGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVj
bGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgor
CisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFs
dWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNw
ZWN0b3IgeworCitjbGFzcyBGcm9udGVuZFJvdXRlcjsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KKy8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
IDx3dGYvUGxhdGZvcm0uaD4KKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclBy
b3RvY29sVHlwZXMuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKKworCisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKworCisvLyBGb3J3YXJk
IGRlY2xhcmF0aW9ucy4KK25hbWVzcGFjZSBEYXRhYmFzZSB7CitjbGFzcyBFcnJvcjsKK2NsYXNz
IE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOworY2xhc3MgUGFyYW1ldGVyQnVuZGxlOworY2xhc3Mg
T2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0czsKK2NsYXNzIER1bW15T2JqZWN0OworZW51
bSBjbGFzcyBNb3VzZUJ1dHRvbjsKK30gLy8gRGF0YWJhc2UKKworbmFtZXNwYWNlIFRlc3Qgewor
Y2xhc3MgUGFyYW1ldGVyQnVuZGxlOworfSAvLyBUZXN0CisvLyBFbmQgb2YgZm9yd2FyZCBkZWNs
YXJhdGlvbnMuCisKKworLy8gVHlwZWRlZnMuCituYW1lc3BhY2UgRGF0YWJhc2UgewordHlwZWRl
ZiBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gRXJy
b3JMaXN0OworfSAvLyBEYXRhYmFzZQorLy8gRW5kIG9mIHR5cGVkZWZzLgorCituYW1lc3BhY2Ug
VGVzdEhlbHBlcnMgeworCitTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpOwor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoVCBlbnVt
VmFsdWUpCit7CisgICAgcmV0dXJuIGdldEVudW1Db25zdGFudFZhbHVlKHN0YXRpY19jYXN0PGlu
dD4oZW51bVZhbHVlKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCisKK25hbWVz
cGFjZSBEYXRhYmFzZSB7CisKKy8qIERhdGFiYXNlIGVycm9yLiAqLworY2xhc3MgRXJyb3IgOiBw
dWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CitwdWJsaWM6CisgICAgZW51bSB7CisgICAgICAgIE5v
RmllbGRzU2V0ID0gMCwKKyAgICAgICAgTWVzc2FnZVNldCA9IDEgPDwgMCwKKyAgICAgICAgQ29k
ZVNldCA9IDEgPDwgMSwKKyAgICAgICAgQWxsRmllbGRzU2V0ID0gKE1lc3NhZ2VTZXQgfCBDb2Rl
U2V0KQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CisgICAgY2xhc3MgQnVpbGRl
ciB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7
CisKKyAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2Fz
dFN0YXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0
PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgQnVp
bGRlcihSZWY8LypFcnJvciovSlNPTjo6T2JqZWN0PiYmIG9iamVjdCkKKyAgICAgICAgICAgIDog
bV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxF
X0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0
X3N0YXRlKTsKKyAgICAgICAgfQorICAgICAgICBmcmllbmQgY2xhc3MgRXJyb3I7CisgICAgcHVi
bGljOgorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2FnZShj
b25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgTWVzc2FnZVNldCksIHByb3BlcnR5X21lc3NhZ2VfYWxyZWFkeV9zZXQpOwor
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibWVzc2FnZSJfcywgdmFsdWUpOworICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNZXNzYWdlU2V0PigpOworICAgICAgICB9CisKKyAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IENvZGVTZXQ+JiBzZXRDb2RlKGludCB2YWx1ZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENvZGVTZXQpLCBwcm9w
ZXJ0eV9jb2RlX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2Vy
KCJjb2RlIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvZGVTZXQ+
KCk7CisgICAgICAgIH0KKworICAgICAgICBSZWY8RXJyb3I+IHJlbGVhc2UoKQorICAgICAgICB7
CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3Vs
dF9pc19ub3RfcmVhZHkpOworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEVycm9y
KSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0KSwgY2Fubm90X2Nhc3QpOworCisgICAgICAgICAgICBS
ZWY8SlNPTjo6T2JqZWN0PiBqc29uUmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsK
KyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8
RXJyb3I+Kj4oJmpzb25SZXN1bHQpKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
ICAgIH0KKyAgICB9OworCisgICAgLyoKKyAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6Cisg
ICAgICogUmVmPEVycm9yPiByZXN1bHQgPSBFcnJvcjo6Y3JlYXRlKCkKKyAgICAgKiAgICAgLnNl
dE1lc3NhZ2UoLi4uKQorICAgICAqICAgICAuc2V0Q29kZSguLi4pCisgICAgICogICAgIC5yZWxl
YXNlKCk7CisgICAgICovCisgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgp
CisgICAgeworICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKSk7CisgICAgfQorfTsKKworLyogRW51bWVyYXRlcyBkaWZmZXJlbnQgbW91c2Ug
YnV0dG9ucyB0aGF0IGNhbiBiZSB1c2VkLiAqLworZW51bSBjbGFzcyBNb3VzZUJ1dHRvbiB7Cisg
ICAgTm9uZSA9IDAsCisgICAgTGVmdCA9IDEsCisgICAgTWlkZGxlID0gMiwKKyAgICBSaWdodCA9
IDMsCit9OyAvLyBlbnVtIGNsYXNzIE1vdXNlQnV0dG9uCisKK2NsYXNzIE9wdGlvbmFsUGFyYW1l
dGVyQnVuZGxlIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgeworcHVibGljOgorICAgIC8vIE5h
bWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ2RpcmVjdGlvbmFsaXR5JyB3aGlsZSBnZW5lcmF0aW5n
IE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlLgorICAgIGVudW0gY2xhc3MgRGlyZWN0aW9uYWxpdHkg
eworICAgICAgICBMVFIgPSA0LAorICAgICAgICBSVEwgPSA1LAorICAgIH07IC8vIGVudW0gY2xh
c3MgRGlyZWN0aW9uYWxpdHkKKyAgICBlbnVtIHsKKyAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAor
ICAgICAgICBBbGxGaWVsZHNTZXQgPSAwCisgICAgfTsKKworICAgIHRlbXBsYXRlPGludCBTVEFU
RT4KKyAgICBjbGFzcyBCdWlsZGVyIHsKKyAgICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiBtX3Jlc3VsdDsKKworICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRl
cjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CisgICAg
ICAgIH0KKworICAgICAgICBCdWlsZGVyKFJlZjwvKk9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlKi9K
U09OOjpPYmplY3Q+JiYgb2JqZWN0KQorICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9i
amVjdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5v
RmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAgICAgICB9
CisgICAgICAgIGZyaWVuZCBjbGFzcyBPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTsKKyAgICBwdWJs
aWM6CisKKyAgICAgICAgUmVmPE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlPiByZWxlYXNlKCkKKyAg
ICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0
LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVv
ZihPcHRpb25hbFBhcmFtZXRlckJ1bmRsZSkgPT0gc2l6ZW9mKEpTT046Ok9iamVjdCksIGNhbm5v
dF9jYXN0KTsKKworICAgICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4ganNvblJlc3VsdCA9IG1f
cmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFdURk1v
dmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlPio+KCZqc29u
UmVzdWx0KSk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgfTsK
KworICAgIC8qCisgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgorICAgICAqIFJlZjxPcHRp
b25hbFBhcmFtZXRlckJ1bmRsZT4gcmVzdWx0ID0gT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU6OmNy
ZWF0ZSgpCisgICAgICogICAgIC5yZWxlYXNlKCk7CisgICAgICovCisgICAgc3RhdGljIEJ1aWxk
ZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gQnVpbGRlcjxO
b0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7CisgICAgfQorCisgICAgdm9pZCBz
ZXRDb2x1bW5OYW1lcyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiB2YWx1ZSkKKyAgICB7
CisgICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgV1RG
TW92ZSh2YWx1ZSkpOworICAgIH0KKworICAgIHZvaWQgc2V0QnV0dG9ucyhSZWZQdHI8SlNPTjo6
QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b24+PiB2YWx1
ZSkKKyAgICB7CisgICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldEFycmF5KCJidXR0b25zIl9z
LCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgfQorCisgICAgdm9pZCBzZXREaXJlY3Rpb25hbGl0eShE
aXJlY3Rpb25hbGl0eSB2YWx1ZSkKKyAgICB7CisgICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNl
dFN0cmluZygiZGlyZWN0aW9uYWxpdHkiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxw
ZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSh2YWx1ZSkpOworICAgIH0KKworICAgIHZvaWQgc2V0
Tm90ZXMoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIEpTT046Ok9iamVjdEJh
c2U6OnNldFN0cmluZygibm90ZXMiX3MsIHZhbHVlKTsKKyAgICB9CisKKyAgICB2b2lkIHNldFRp
bWVzdGFtcChkb3VibGUgdmFsdWUpCisgICAgeworICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpz
ZXREb3VibGUoInRpbWVzdGFtcCJfcywgdmFsdWUpOworICAgIH0KKworICAgIHZvaWQgc2V0VmFs
dWVzKFJlZlB0cjxKU09OOjpPYmplY3Q+IHZhbHVlKQorICAgIHsKKyAgICAgICAgSlNPTjo6T2Jq
ZWN0QmFzZTo6c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFdURk1vdmUodmFsdWUpKTsKKyAgICB9CisK
KyAgICB2b2lkIHNldFBheWxvYWQoUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldFZhbHVlKCJwYXlsb2FkIl9zLCBXVEZNb3ZlKHZh
bHVlKSk7CisgICAgfQorCisgICAgdm9pZCBzZXRFcnJvcihSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6RGF0YWJhc2U6OkVycm9yPiB2YWx1ZSkKKyAgICB7CisgICAgICAgIEpTT046Ok9iamVj
dEJhc2U6OnNldE9iamVjdCgiZXJyb3IiX3MsIFdURk1vdmUodmFsdWUpKTsKKyAgICB9CisKKyAg
ICB2b2lkIHNldEVycm9yTGlzdChSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6
OkVycm9yTGlzdD4gdmFsdWUpCisgICAgeworICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRB
cnJheSgiZXJyb3JMaXN0Il9zLCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgfQorfTsKKworY2xhc3Mg
UGFyYW1ldGVyQnVuZGxlIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgeworcHVibGljOgorICAg
IC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ2RpcmVjdGlvbmFsaXR5JyB3aGlsZSBnZW5l
cmF0aW5nIFBhcmFtZXRlckJ1bmRsZS4KKyAgICBlbnVtIGNsYXNzIERpcmVjdGlvbmFsaXR5IHsK
KyAgICAgICAgTFRSID0gNCwKKyAgICAgICAgUlRMID0gNSwKKyAgICB9OyAvLyBlbnVtIGNsYXNz
IERpcmVjdGlvbmFsaXR5CisgICAgZW51bSB7CisgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKKyAg
ICAgICAgQ29sdW1uTmFtZXNTZXQgPSAxIDw8IDAsCisgICAgICAgIEJ1dHRvbnNTZXQgPSAxIDw8
IDEsCisgICAgICAgIERpcmVjdGlvbmFsaXR5U2V0ID0gMSA8PCAyLAorICAgICAgICBOb3Rlc1Nl
dCA9IDEgPDwgMywKKyAgICAgICAgVGltZXN0YW1wU2V0ID0gMSA8PCA0LAorICAgICAgICBWYWx1
ZXNTZXQgPSAxIDw8IDUsCisgICAgICAgIFBheWxvYWRTZXQgPSAxIDw8IDYsCisgICAgICAgIEVy
cm9yU2V0ID0gMSA8PCA3LAorICAgICAgICBFcnJvckxpc3RTZXQgPSAxIDw8IDgsCisgICAgICAg
IEFsbEZpZWxkc1NldCA9IChDb2x1bW5OYW1lc1NldCB8IEJ1dHRvbnNTZXQgfCBEaXJlY3Rpb25h
bGl0eVNldCB8IE5vdGVzU2V0IHwgVGltZXN0YW1wU2V0IHwgVmFsdWVzU2V0IHwgUGF5bG9hZFNl
dCB8IEVycm9yU2V0IHwgRXJyb3JMaXN0U2V0KQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTxpbnQg
U1RBVEU+CisgICAgY2xhc3MgQnVpbGRlciB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRy
PEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7CisKKyAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1
aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwor
ICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcihSZWY8LypQYXJhbWV0ZXJCdW5kbGUqL0pTT046
Ok9iamVjdD4mJiBvYmplY3QpCisgICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0
KSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVs
ZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CisgICAgICAgIH0KKyAg
ICAgICAgZnJpZW5kIGNsYXNzIFBhcmFtZXRlckJ1bmRsZTsKKyAgICBwdWJsaWM6CisKKyAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IENvbHVtbk5hbWVzU2V0PiYgc2V0Q29sdW1uTmFtZXMoUmVmUHRy
PEpTT046OkFycmF5T2Y8U3RyaW5nPj4gdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2x1bW5OYW1lc1NldCksIHByb3BlcnR5X2NvbHVtbk5h
bWVzX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheSgiY29sdW1u
TmFtZXMiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29sdW1uTmFt
ZXNTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQnV0dG9uc1Nl
dD4mIHNldEJ1dHRvbnMoUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPj4gdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBCdXR0b25zU2V0KSwgcHJvcGVydHlfYnV0dG9uc19hbHJl
YWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoImJ1dHRvbnMiX3MsIHZh
bHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8QnV0dG9uc1NldD4oKTsKKyAgICAg
ICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBEaXJlY3Rpb25hbGl0eVNldD4mIHNldERp
cmVjdGlvbmFsaXR5KERpcmVjdGlvbmFsaXR5IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRGlyZWN0aW9uYWxpdHlTZXQpLCBwcm9wZXJ0eV9k
aXJlY3Rpb25hbGl0eV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3Ry
aW5nKCJkaXJlY3Rpb25hbGl0eSJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6
OmdldEVudW1Db25zdGFudFZhbHVlKHZhbHVlKSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0
YXRlPERpcmVjdGlvbmFsaXR5U2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxT
VEFURSB8IE5vdGVzU2V0PiYgc2V0Tm90ZXMoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAg
eworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE5vdGVzU2V0KSwgcHJvcGVy
dHlfbm90ZXNfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygi
bm90ZXMiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Tm90ZXNTZXQ+
KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVGltZXN0YW1wU2V0PiYg
c2V0VGltZXN0YW1wKGRvdWJsZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoIShTVEFURSAmIFRpbWVzdGFtcFNldCksIHByb3BlcnR5X3RpbWVzdGFtcF9hbHJl
YWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3Ms
IHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VGltZXN0YW1wU2V0PigpOwor
ICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFZhbHVlc1NldD4mIHNldFZhbHVl
cyhSZWZQdHI8SlNPTjo6T2JqZWN0PiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIFZhbHVlc1NldCksIHByb3BlcnR5X3ZhbHVlc19hbHJlYWR5
X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIHZhbHVl
KTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VmFsdWVzU2V0PigpOworICAgICAgICB9
CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFBheWxvYWRTZXQ+JiBzZXRQYXlsb2FkKFJlZlB0
cjxKU09OOjpWYWx1ZT4gdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBQYXlsb2FkU2V0KSwgcHJvcGVydHlfcGF5bG9hZF9hbHJlYWR5X3NldCk7
CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIHZhbHVlKTsKKyAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8UGF5bG9hZFNldD4oKTsKKyAgICAgICAgfQorCisg
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBFcnJvclNldD4mIHNldEVycm9yKFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHZhbHVlKQorICAgICAgICB7CisgICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRXJyb3JTZXQpLCBwcm9wZXJ0eV9lcnJvcl9h
bHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJlcnJvciJfcywg
dmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxFcnJvclNldD4oKTsKKyAgICAg
ICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBFcnJvckxpc3RTZXQ+JiBzZXRFcnJvckxp
c3QoUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvckxpc3Q+IHZhbHVl
KQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRXJyb3JM
aXN0U2V0KSwgcHJvcGVydHlfZXJyb3JMaXN0X2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXRBcnJheSgiZXJyb3JMaXN0Il9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPEVycm9yTGlzdFNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIFJlZjxQ
YXJhbWV0ZXJCdW5kbGU+IHJlbGVhc2UoKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxF
X0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOworICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFBhcmFtZXRlckJ1bmRsZSkgPT0gc2l6ZW9m
KEpTT046Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsKKworICAgICAgICAgICAgUmVmPEpTT046Ok9i
amVjdD4ganNvblJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgICAg
ICBhdXRvIHJlc3VsdCA9IFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPFBhcmFtZXRlckJ1
bmRsZT4qPigmanNvblJlc3VsdCkpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAg
ICAgfQorICAgIH07CisKKyAgICAvKgorICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKKyAg
ICAgKiBSZWY8UGFyYW1ldGVyQnVuZGxlPiByZXN1bHQgPSBQYXJhbWV0ZXJCdW5kbGU6OmNyZWF0
ZSgpCisgICAgICogICAgIC5zZXRDb2x1bW5OYW1lcyguLi4pCisgICAgICogICAgIC5zZXRCdXR0
b25zKC4uLikKKyAgICAgKiAgICAgLnNldERpcmVjdGlvbmFsaXR5KC4uLikKKyAgICAgKiAgICAg
LnNldE5vdGVzKC4uLikKKyAgICAgKiAgICAgLnNldFRpbWVzdGFtcCguLi4pCisgICAgICogICAg
IC5zZXRWYWx1ZXMoLi4uKQorICAgICAqICAgICAuc2V0UGF5bG9hZCguLi4pCisgICAgICogICAg
IC5zZXRFcnJvciguLi4pCisgICAgICogICAgIC5zZXRFcnJvckxpc3QoLi4uKQorICAgICAqICAg
ICAucmVsZWFzZSgpOworICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBj
cmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046
Ok9iamVjdDo6Y3JlYXRlKCkpOworICAgIH0KK307CisKKy8qIENvbmZsaWN0ZWQgbmFtZXMgbWF5
IGNhdXNlIGdlbmVyYXRlZCBnZXR0ZXJzL3NldHRlcnMgdG8gY2xhc2ggd2l0aCBidWlsdC1pbiBJ
bnNwZWN0b3JPYmplY3QgbWV0aG9kcy4gKi8KK2NsYXNzIE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVD
b25mbGljdHMgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CitwdWJsaWM6CisgICAgZW51bSB7
CisgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKKyAgICAgICAgSW50ZWdlclNldCA9IDEgPDwgMCwK
KyAgICAgICAgQXJyYXlTZXQgPSAxIDw8IDEsCisgICAgICAgIFN0cmluZ1NldCA9IDEgPDwgMiwK
KyAgICAgICAgVmFsdWVTZXQgPSAxIDw8IDMsCisgICAgICAgIE9iamVjdFNldCA9IDEgPDwgNCwK
KyAgICAgICAgQWxsRmllbGRzU2V0ID0gKEludGVnZXJTZXQgfCBBcnJheVNldCB8IFN0cmluZ1Nl
dCB8IFZhbHVlU2V0IHwgT2JqZWN0U2V0KQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTxpbnQgU1RB
VEU+CisgICAgY2xhc3MgQnVpbGRlciB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPEpT
T046Ok9iamVjdD4gbV9yZXN1bHQ7CisKKyAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxk
ZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOworICAg
ICAgICB9CisKKyAgICAgICAgQnVpbGRlcihSZWY8LypPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29u
ZmxpY3RzKi9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQorICAgICAgICAgICAgOiBtX3Jlc3VsdChX
VEZNb3ZlKG9iamVjdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNU
QVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwor
ICAgICAgICB9CisgICAgICAgIGZyaWVuZCBjbGFzcyBPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29u
ZmxpY3RzOworICAgIHB1YmxpYzoKKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgSW50ZWdlclNl
dD4mIHNldEludGVnZXIoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEludGVnZXJTZXQpLCBwcm9wZXJ0eV9pbnRlZ2Vy
X2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImludGVnZXIi
X3MsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8SW50ZWdlclNldD4oKTsK
KyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBBcnJheVNldD4mIHNldEFycmF5
KGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBBcnJheVNldCksIHByb3BlcnR5X2FycmF5X2FscmVhZHlfc2V0KTsKKyAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImFycmF5Il9zLCB2YWx1ZSk7CisgICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPEFycmF5U2V0PigpOworICAgICAgICB9CisKKyAgICAgICAg
QnVpbGRlcjxTVEFURSB8IFN0cmluZ1NldD4mIHNldFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVl
KQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU3RyaW5n
U2V0KSwgcHJvcGVydHlfc3RyaW5nX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXRTdHJpbmcoInN0cmluZyJfcywgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxTdHJpbmdTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
VmFsdWVTZXQ+JiBzZXRWYWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAgICB7CisgICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVmFsdWVTZXQpLCBwcm9wZXJ0eV92YWx1
ZV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ2YWx1ZSJf
cywgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxWYWx1ZVNldD4oKTsKKyAg
ICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBPYmplY3RTZXQ+JiBzZXRPYmplY3Qo
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIE9iamVjdFNldCksIHByb3BlcnR5X29iamVjdF9hbHJlYWR5X3NldCk7Cisg
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJvYmplY3QiX3MsIHZhbHVlKTsKKyAgICAg
ICAgICAgIHJldHVybiBjYXN0U3RhdGU8T2JqZWN0U2V0PigpOworICAgICAgICB9CisKKyAgICAg
ICAgUmVmPE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHM+IHJlbGVhc2UoKQorICAgICAg
ICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJl
c3VsdF9pc19ub3RfcmVhZHkpOworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKE9i
amVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHMpID09IHNpemVvZihKU09OOjpPYmplY3QpLCBj
YW5ub3RfY2FzdCk7CisKKyAgICAgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25SZXN1bHQg
PSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBX
VEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxp
Y3RzPio+KCZqc29uUmVzdWx0KSk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAg
ICB9CisgICAgfTsKKworICAgIC8qCisgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgorICAg
ICAqIFJlZjxPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzPiByZXN1bHQgPSBPYmplY3RX
aXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzOjpjcmVhdGUoKQorICAgICAqICAgICAuc2V0SW50ZWdl
ciguLi4pCisgICAgICogICAgIC5zZXRBcnJheSguLi4pCisgICAgICogICAgIC5zZXRTdHJpbmco
Li4uKQorICAgICAqICAgICAuc2V0VmFsdWUoLi4uKQorICAgICAqICAgICAuc2V0T2JqZWN0KC4u
LikKKyAgICAgKiAgICAgLnJlbGVhc2UoKTsKKyAgICAgKi8KKyAgICBzdGF0aWMgQnVpbGRlcjxO
b0ZpZWxkc1NldD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmll
bGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICB9Cit9OworCit9IC8vIERhdGFi
YXNlCisKK25hbWVzcGFjZSBUZXN0IHsKKworY2xhc3MgUGFyYW1ldGVyQnVuZGxlIDogcHVibGlj
IEpTT046Ok9iamVjdEJhc2UgeworcHVibGljOgorICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5
IG5hbWUgJ2RpcmVjdGlvbmFsaXR5JyB3aGlsZSBnZW5lcmF0aW5nIFBhcmFtZXRlckJ1bmRsZS4K
KyAgICBlbnVtIGNsYXNzIERpcmVjdGlvbmFsaXR5IHsKKyAgICAgICAgTFRSID0gNCwKKyAgICAg
ICAgUlRMID0gNSwKKyAgICB9OyAvLyBlbnVtIGNsYXNzIERpcmVjdGlvbmFsaXR5CisgICAgZW51
bSB7CisgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKKyAgICAgICAgRGlyZWN0aW9uYWxpdHlTZXQg
PSAxIDw8IDAsCisgICAgICAgIEJ1dHRvbnNTZXQgPSAxIDw8IDEsCisgICAgICAgIENvbHVtbk5h
bWVzU2V0ID0gMSA8PCAyLAorICAgICAgICBOb3Rlc1NldCA9IDEgPDwgMywKKyAgICAgICAgVGlt
ZXN0YW1wU2V0ID0gMSA8PCA0LAorICAgICAgICBWYWx1ZXNTZXQgPSAxIDw8IDUsCisgICAgICAg
IFBheWxvYWRTZXQgPSAxIDw8IDYsCisgICAgICAgIEVycm9yU2V0ID0gMSA8PCA3LAorICAgICAg
ICBBbGxGaWVsZHNTZXQgPSAoRGlyZWN0aW9uYWxpdHlTZXQgfCBCdXR0b25zU2V0IHwgQ29sdW1u
TmFtZXNTZXQgfCBOb3Rlc1NldCB8IFRpbWVzdGFtcFNldCB8IFZhbHVlc1NldCB8IFBheWxvYWRT
ZXQgfCBFcnJvclNldCkKKyAgICB9OworCisgICAgdGVtcGxhdGU8aW50IFNUQVRFPgorICAgIGNs
YXNzIEJ1aWxkZXIgeworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+
IG1fcmVzdWx0OworCisgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwg
U1RFUD4mIGNhc3RTdGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRl
cnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKKyAgICAgICAgfQorCisg
ICAgICAgIEJ1aWxkZXIoUmVmPC8qUGFyYW1ldGVyQnVuZGxlKi9KU09OOjpPYmplY3Q+JiYgb2Jq
ZWN0KQorICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCisgICAgICAgIHsK
KyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVy
X2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAgICAgICB9CisgICAgICAgIGZyaWVuZCBj
bGFzcyBQYXJhbWV0ZXJCdW5kbGU7CisgICAgcHVibGljOgorCisgICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBEaXJlY3Rpb25hbGl0eVNldD4mIHNldERpcmVjdGlvbmFsaXR5KERpcmVjdGlvbmFsaXR5
IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
RGlyZWN0aW9uYWxpdHlTZXQpLCBwcm9wZXJ0eV9kaXJlY3Rpb25hbGl0eV9hbHJlYWR5X3NldCk7
CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJkaXJlY3Rpb25hbGl0eSJfcywgSW5z
cGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKHZhbHVl
KSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPERpcmVjdGlvbmFsaXR5U2V0PigpOwor
ICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IEJ1dHRvbnNTZXQ+JiBzZXRCdXR0
b25zKFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpN
b3VzZUJ1dHRvbj4+IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgQnV0dG9uc1NldCksIHByb3BlcnR5X2J1dHRvbnNfYWxyZWFkeV9zZXQpOwor
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJidXR0b25zIl9zLCB2YWx1ZSk7CisgICAg
ICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEJ1dHRvbnNTZXQ+KCk7CisgICAgICAgIH0KKworICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgQ29sdW1uTmFtZXNTZXQ+JiBzZXRDb2x1bW5OYW1lcyhSZWZQ
dHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIENvbHVtbk5hbWVzU2V0KSwgcHJvcGVydHlfY29sdW1u
TmFtZXNfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJjb2x1
bW5OYW1lcyJfcywgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb2x1bW5O
YW1lc1NldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBOb3Rlc1Nl
dD4mIHNldE5vdGVzKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBOb3Rlc1NldCksIHByb3BlcnR5X25vdGVzX2FscmVh
ZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCB2YWx1
ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE5vdGVzU2V0PigpOworICAgICAgICB9
CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFRpbWVzdGFtcFNldD4mIHNldFRpbWVzdGFtcChk
b3VibGUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBUaW1lc3RhbXBTZXQpLCBwcm9wZXJ0eV90aW1lc3RhbXBfYWxyZWFkeV9zZXQpOworICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCB2YWx1ZSk7CisgICAg
ICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFRpbWVzdGFtcFNldD4oKTsKKyAgICAgICAgfQorCisg
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBWYWx1ZXNTZXQ+JiBzZXRWYWx1ZXMoUmVmUHRyPEpTT046
Ok9iamVjdD4gdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBWYWx1ZXNTZXQpLCBwcm9wZXJ0eV92YWx1ZXNfYWxyZWFkeV9zZXQpOworICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldE9iamVjdCgidmFsdWVzIl9zLCB2YWx1ZSk7CisgICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPFZhbHVlc1NldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBQYXlsb2FkU2V0PiYgc2V0UGF5bG9hZChSZWZQdHI8SlNPTjo6VmFsdWU+
IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
UGF5bG9hZFNldCksIHByb3BlcnR5X3BheWxvYWRfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAg
bV9yZXN1bHQtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPFBheWxvYWRTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgRXJyb3JTZXQ+JiBzZXRFcnJvcihSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6OkVycm9yPiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoIShTVEFURSAmIEVycm9yU2V0KSwgcHJvcGVydHlfZXJyb3JfYWxyZWFkeV9zZXQpOwor
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdCgiZXJyb3IiX3MsIHZhbHVlKTsKKyAgICAg
ICAgICAgIHJldHVybiBjYXN0U3RhdGU8RXJyb3JTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAg
ICBSZWY8UGFyYW1ldGVyQnVuZGxlPiByZWxlYXNlKCkKKyAgICAgICAgeworICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5
KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihQYXJhbWV0ZXJCdW5kbGUpID09
IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7CisKKyAgICAgICAgICAgIFJlZjxK
U09OOjpPYmplY3Q+IGpzb25SZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOworICAg
ICAgICAgICAgYXV0byByZXN1bHQgPSBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxQYXJh
bWV0ZXJCdW5kbGU+Kj4oJmpzb25SZXN1bHQpKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyoKKyAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0
b3I6CisgICAgICogUmVmPFBhcmFtZXRlckJ1bmRsZT4gcmVzdWx0ID0gUGFyYW1ldGVyQnVuZGxl
OjpjcmVhdGUoKQorICAgICAqICAgICAuc2V0RGlyZWN0aW9uYWxpdHkoLi4uKQorICAgICAqICAg
ICAuc2V0QnV0dG9ucyguLi4pCisgICAgICogICAgIC5zZXRDb2x1bW5OYW1lcyguLi4pCisgICAg
ICogICAgIC5zZXROb3RlcyguLi4pCisgICAgICogICAgIC5zZXRUaW1lc3RhbXAoLi4uKQorICAg
ICAqICAgICAuc2V0VmFsdWVzKC4uLikKKyAgICAgKiAgICAgLnNldFBheWxvYWQoLi4uKQorICAg
ICAqICAgICAuc2V0RXJyb3IoLi4uKQorICAgICAqICAgICAucmVsZWFzZSgpOworICAgICAqLwor
ICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOworICAg
IH0KK307CisKK30gLy8gVGVzdAorCisKKworbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKKwordGVt
cGxhdGU8dHlwZW5hbWUgUHJvdG9jb2xFbnVtVHlwZT4KK09wdGlvbmFsPFByb3RvY29sRW51bVR5
cGU+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZyhjb25zdCBTdHJpbmcmKTsKKworLy8gRW51bXMg
aW4gdGhlICdEYXRhYmFzZScgRG9tYWluCit0ZW1wbGF0ZTw+CitPcHRpb25hbDxJbnNwZWN0b3I6
OlByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b24+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmlu
ZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b24+KGNvbnN0IFN0cmlu
ZyYpOwordGVtcGxhdGU8PgorT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6
Ok9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4gcGFyc2VFbnVtVmFsdWVG
cm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpPcHRpb25hbFBhcmFtZXRl
ckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+KGNvbnN0IFN0cmluZyYpOwordGVtcGxhdGU8PgorT3B0
aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlBhcmFtZXRlckJ1bmRsZTo6RGly
ZWN0aW9uYWxpdHk+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29s
OjpEYXRhYmFzZTo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4oY29uc3QgU3RyaW5n
Jik7CisKKy8vIEVudW1zIGluIHRoZSAnVGVzdCcgRG9tYWluCit0ZW1wbGF0ZTw+CitPcHRpb25h
bDxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFs
aXR5PiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6
UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4oY29uc3QgU3RyaW5nJik7CisKK30gLy8g
bmFtZXNwYWNlIFRlc3RIZWxwZXJzCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOworCisvLyBIYXNoIGRlY2xhcmF0aW9ucyBpbiB0aGUg
J0RhdGFiYXNlJyBEb21haW4KK3RlbXBsYXRlPD4KK3N0cnVjdCBEZWZhdWx0SGFzaDxJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b24+IHsKKyAgICB0eXBlZGVmIEludEhh
c2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPiBIYXNoOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV1RGCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMu
aAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKworI2luY2x1ZGUgPHd0
Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNl
IEluc3BlY3RvciB7CisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKK25hbWVzcGFjZSBUZXN0SGVs
cGVycyB7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBlbnVtX2NvbnN0YW50X3ZhbHVlc1td
ID0geworICAgICJOb25lIiwKKyAgICAiTGVmdCIsCisgICAgIk1pZGRsZSIsCisgICAgIlJpZ2h0
IiwKKyAgICAiTFRSIiwKKyAgICAiUlRMIiwKK307CisKK1N0cmluZyBnZXRFbnVtQ29uc3RhbnRW
YWx1ZShpbnQgY29kZSkgeworICAgIHJldHVybiBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb2RlXTsK
K30KKworLy8gRW51bXMgaW4gdGhlICdEYXRhYmFzZScgRG9tYWluCisKK3RlbXBsYXRlPD4KK09w
dGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4gcGFyc2VF
bnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1
dHRvbj4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKK3sKKyAgICBzdGF0aWMgY29uc3Qg
c2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7CisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uOjpOb25lLAorICAgICAgICAoc2l6ZV90KUlu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbjo6TGVmdCwKKyAgICAgICAg
KHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b246Ok1pZGRs
ZSwKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VC
dXR0b246OlJpZ2h0LAorICAgIH07CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCA0OyArK2kp
CisgICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25z
dGFudFZhbHVlc1tpXV0pCisgICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbiljb25zdGFudFZhbHVlc1tpXTsKKworICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7Cit9CisKK3RlbXBsYXRlPD4KK09wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRhdGFiYXNlOjpPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+IHBh
cnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6T3B0
aW9uYWxQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5Pihjb25zdCBTdHJpbmcmIHByb3Rv
Y29sU3RyaW5nKQoreworICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9
IHsKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6T3B0aW9u
YWxQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5OjpMVFIsCisgICAgICAgIChzaXplX3Qp
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpE
aXJlY3Rpb25hbGl0eTo6UlRMLAorICAgIH07CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAy
OyArK2kpCisgICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVl
c1tjb25zdGFudFZhbHVlc1tpXV0pCisgICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHkp
Y29uc3RhbnRWYWx1ZXNbaV07CisKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCit0ZW1w
bGF0ZTw+CitPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UGFyYW1ldGVy
QnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5Pihj
b25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQoreworICAgIHN0YXRpYyBjb25zdCBzaXplX3Qg
Y29uc3RhbnRWYWx1ZXNbXSA9IHsKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29s
OjpEYXRhYmFzZTo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eTo6TFRSLAorICAgICAg
ICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQYXJhbWV0ZXJCdW5kbGU6
OkRpcmVjdGlvbmFsaXR5OjpSVEwsCisgICAgfTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IDI7ICsraSkKKyAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFs
dWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKKyAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGF0YWJhc2U6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHkpY29uc3Rh
bnRWYWx1ZXNbaV07CisKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCisvLyBFbnVtcyBp
biB0aGUgJ1Rlc3QnIERvbWFpbgorCit0ZW1wbGF0ZTw+CitPcHRpb25hbDxJbnNwZWN0b3I6OlBy
b3RvY29sOjpUZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5PiBwYXJzZUVudW1W
YWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UGFyYW1ldGVyQnVuZGxl
OjpEaXJlY3Rpb25hbGl0eT4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKK3sKKyAgICBz
dGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7CisgICAgICAgIChzaXplX3Qp
SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0
eTo6TFRSLAorICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlBhcmFt
ZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk6OlJUTCwKKyAgICB9OworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgMjsgKytpKQorICAgICAgICBpZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9j
b25zdGFudF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNbaV1dKQorICAgICAgICAgICAgcmV0dXJuIChJ
bnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5
KWNvbnN0YW50VmFsdWVzW2ldOworCisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKworfSAv
LyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKKworCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisK
K30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9i
amVjdHMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hl
cnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24t
b2JqZWN0LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjaW1wb3J0IDx3dGYvUGxhdGZvcm0uaD4KKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2luY2x1ZGUgPHd0Zi9S
ZXRhaW5QdHIuaD4KKworCisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKK30gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRj
aGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMu
bW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9i
amVjdC10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0
Y2hlcnMuaCIKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW5jbHVkZSAi
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMu
aD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgor
CisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorCisjIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPHd0Zi9QbGF0
Zm9ybS5oPgorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+CisKK19fYXR0
cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9j
b2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24uaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29u
ZmlndXJhdGlvbi5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVj
bGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCisKKyNp
bXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNr
ZW5kRGlzcGF0Y2hlcnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3Bh
dGNoYWJsZUFnZW50Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3Bl
Y3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVy
bmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXJzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisK
K0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCit7CisgICAgQXVnbWVu
dGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKK30KKworLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKilj
b250cm9sbGVyCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisg
ICAgICAgIHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250cm9s
bGVyID0gY29udHJvbGxlcjsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9j
Cit7CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xFdmVudERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
dHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisK
KyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8d3RmL0pT
T05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisjIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNs
YXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorI2ltcG9ydCA8
d3RmL1BsYXRmb3JtLmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05P
YmplY3QuaD4KKworCitAY2xhc3MgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcjsKK0BjbGFzcyBU
ZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOworQGNsYXNzIFRlc3RQ
cm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlOworQGNsYXNzIFRlc3RQcm90b2NvbERhdGFi
YXNlT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0czsKK0BjbGFzcyBUZXN0UHJvdG9jb2xE
YXRhYmFzZUR1bW15T2JqZWN0OworQGNsYXNzIFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5k
bGU7CisKK3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbERhdGFiYXNlTW91
c2VCdXR0b24pIHsKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9uTm9uZSwKKyAg
ICBUZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9uTGVmdCwKKyAgICBUZXN0UHJvdG9jb2xE
YXRhYmFzZU1vdXNlQnV0dG9uTWlkZGxlLAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VC
dXR0b25SaWdodCwKK307CisKK3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2Nv
bERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSkgeworICAgIFRl
c3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eUxU
UiwKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlRGlyZWN0
aW9uYWxpdHlSVEwsCit9OworCit0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9j
b2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5KSB7CisgICAgVGVzdFByb3Rv
Y29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eUxUUiwKKyAgICBUZXN0UHJv
dG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5UlRMLAorfTsKK3R5cGVk
ZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJl
Y3Rpb25hbGl0eSkgeworICAgIFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rp
b25hbGl0eUxUUiwKKyAgICBUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9u
YWxpdHlSVEwsCit9OworCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkK
K0BpbnRlcmZhY2UgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciA6IFJXSVByb3RvY29sSlNPTk9i
amVjdAorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3Ry
aW5nICosIGlkPiAqKXBheWxvYWQ7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9i
amVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKKy0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBjb2RlOihpbnQpY29kZTsKKy8q
IHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqbWVzc2Fn
ZTsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCBjb2Rl
OworQGVuZAorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRl
cmZhY2UgVGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZSA6IFJXSVBy
b3RvY29sSlNPTk9iamVjdAorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0
aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQ7CistIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKKy8q
IG9wdGlvbmFsICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU0FycmF5Lyo8TlNTdHJp
bmc+Ki8gKmNvbHVtbk5hbWVzOworLyogb3B0aW9uYWwgKi8gQHByb3BlcnR5IChub25hdG9taWMs
IGNvcHkpIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqYnV0dG9uczsKKy8qIG9wdGlvbmFsICovIEBw
cm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQ
YXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSBkaXJlY3Rpb25hbGl0eTsKKy8qIG9wdGlvbmFs
ICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqbm90ZXM7CisvKiBvcHRp
b25hbCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBkb3VibGUgdGltZXN0YW1wOwor
Lyogb3B0aW9uYWwgKi8gQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgUldJUHJvdG9jb2xK
U09OT2JqZWN0ICp2YWx1ZXM7CisvKiBvcHRpb25hbCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywg
cmV0YWluKSBSV0lQcm90b2NvbEpTT05PYmplY3QgKnBheWxvYWQ7CisvKiBvcHRpb25hbCAqLyBA
cHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluKSBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpl
cnJvcjsKKy8qIG9wdGlvbmFsICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU0FycmF5
Lyo8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4qLyAqZXJyb3JMaXN0OworQGVuZAorCitfX2F0
dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3Rv
Y29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGUgOiBSV0lQcm90b2NvbEpTT05PYmplY3QKKy0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4g
KilwYXlsb2FkOworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVBy
b3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhD
b2x1bW5OYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMgYnV0dG9uczoo
TlNBcnJheS8qPE5TU3RyaW5nPiovICopYnV0dG9ucyBkaXJlY3Rpb25hbGl0eTooVGVzdFByb3Rv
Y29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSlkaXJlY3Rpb25hbGl0eSBu
b3RlczooTlNTdHJpbmcgKilub3RlcyB0aW1lc3RhbXA6KGRvdWJsZSl0aW1lc3RhbXAgdmFsdWVz
OihSV0lQcm90b2NvbEpTT05PYmplY3QgKil2YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xKU09O
T2JqZWN0ICopcGF5bG9hZCBlcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKWVycm9y
IGVycm9yTGlzdDooTlNBcnJheS8qPFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I+Ki8gKillcnJv
ckxpc3Q7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNBcnJh
eS8qPE5TU3RyaW5nPiovICpjb2x1bW5OYW1lczsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAo
bm9uYXRvbWljLCBjb3B5KSBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmJ1dHRvbnM7CisvKiByZXF1
aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBUZXN0UHJvdG9jb2xEYXRhYmFz
ZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5IGRpcmVjdGlvbmFsaXR5OworLyogcmVxdWly
ZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICpub3RlczsKKy8qIHJl
cXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGRvdWJsZSB0aW1lc3RhbXA7
CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluKSBSV0lQcm90b2Nv
bEpTT05PYmplY3QgKnZhbHVlczsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWlj
LCByZXRhaW4pIFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5bG9hZDsKKy8qIHJlcXVpcmVkICov
IEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3Ig
KmVycm9yOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TQXJy
YXkvKjxUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yPiovICplcnJvckxpc3Q7CitAZW5kCisKK19f
YXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJv
dG9jb2xEYXRhYmFzZU9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHMgOiBSV0lQcm90b2Nv
bEpTT05PYmplY3QKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFy
eTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkOworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJv
dG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7CistIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhJbnRlZ2VyOihOU1N0cmluZyAqKWludGVnZXIgYXJyYXk6KE5TU3Ry
aW5nICopYXJyYXkgc3RyaW5nOihOU1N0cmluZyAqKXN0cmluZyB2YWx1ZTooTlNTdHJpbmcgKil2
YWx1ZSBvYmplY3Q6KE5TU3RyaW5nICopb2JqZWN0OworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5
IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICppbnRlZ2VyOworLyogcmVxdWlyZWQgKi8gQHBy
b3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICphcnJheTsKKy8qIHJlcXVpcmVkICov
IEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqc3RyaW5nOworLyogcmVxdWly
ZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICp2YWx1ZTsKKy8qIHJl
cXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqb2JqZWN0Owor
QGVuZAorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZh
Y2UgVGVzdFByb3RvY29sRGF0YWJhc2VEdW1teU9iamVjdCA6IFJXSVByb3RvY29sSlNPTk9iamVj
dAorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3RyaW5n
ICosIGlkPiAqKXBheWxvYWQ7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVj
dDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKK0BlbmQKK19fYXR0cmlidXRl
X18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUZXN0
UGFyYW1ldGVyQnVuZGxlIDogUldJUHJvdG9jb2xKU09OT2JqZWN0CistIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsK
Ky0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05P
YmplY3QgKilqc29uT2JqZWN0OworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRGlyZWN0aW9uYWxp
dHk6KFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSlkaXJlY3Rp
b25hbGl0eSBidXR0b25zOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilidXR0b25zIGNvbHVtbk5h
bWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcyBub3RlczooTlNTdHJpbmcg
Kilub3RlcyB0aW1lc3RhbXA6KGRvdWJsZSl0aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90b2NvbEpT
T05PYmplY3QgKil2YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9h
ZCBlcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKWVycm9yOworLyogcmVxdWlyZWQg
Ki8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgVGVzdFByb3RvY29sVGVzdFBhcmFtZXRl
ckJ1bmRsZURpcmVjdGlvbmFsaXR5IGRpcmVjdGlvbmFsaXR5OworLyogcmVxdWlyZWQgKi8gQHBy
b3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqYnV0dG9uczsK
Ky8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU0FycmF5Lyo8TlNT
dHJpbmc+Ki8gKmNvbHVtbk5hbWVzOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9t
aWMsIGNvcHkpIE5TU3RyaW5nICpub3RlczsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9u
YXRvbWljLCBhc3NpZ24pIGRvdWJsZSB0aW1lc3RhbXA7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVy
dHkgKG5vbmF0b21pYywgcmV0YWluKSBSV0lQcm90b2NvbEpTT05PYmplY3QgKnZhbHVlczsKKy8q
IHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIFJXSVByb3RvY29sSlNP
Tk9iamVjdCAqcGF5bG9hZDsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBy
ZXRhaW4pIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKmVycm9yOworQGVuZAorCisKKworCisK
KworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2Jq
ZWN0cy5oPgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCisKKyMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaW1w
b3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2
YXRlLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRy
b2xsZXIuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKKworCisKKyMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBl
LWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8d3RmL1BsYXRmb3JtLmg+CisKKyNpbXBvcnQgIlRl
c3RQcm90b2NvbC5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252
ZXJzaW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordGVtcGxhdGU8dHlwZW5hbWUg
T2JqQ0VudW1UeXBlPgorT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmco
Y29uc3QgU3RyaW5nJiB2YWx1ZSk7CisKK2lubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhU
ZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9uIHZhbHVlKQoreworICAgIHN3aXRjaCh2YWx1
ZSkgeworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VNb3VzZUJ1dHRvbk5vbmU6CisgICAg
ICAgIHJldHVybiAiTm9uZSJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VC
dXR0b25MZWZ0OgorICAgICAgICByZXR1cm4gIkxlZnQiX3M7CisgICAgY2FzZSBUZXN0UHJvdG9j
b2xEYXRhYmFzZU1vdXNlQnV0dG9uTWlkZGxlOgorICAgICAgICByZXR1cm4gIk1pZGRsZSJfczsK
KyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VCdXR0b25SaWdodDoKKyAgICAgICAg
cmV0dXJuICJSaWdodCJfczsKKyAgICB9Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBPcHRpb25h
bDxUZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9uPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gIk5vbmUiKQorICAgICAgICBy
ZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VNb3VzZUJ1dHRvbk5vbmU7CisgICAgaWYgKHZhbHVl
ID09ICJMZWZ0IikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VCdXR0
b25MZWZ0OworICAgIGlmICh2YWx1ZSA9PSAiTWlkZGxlIikKKyAgICAgICAgcmV0dXJuIFRlc3RQ
cm90b2NvbERhdGFiYXNlTW91c2VCdXR0b25NaWRkbGU7CisgICAgaWYgKHZhbHVlID09ICJSaWdo
dCIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9uUmlnaHQ7
CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKworaW5saW5lIFN0cmluZyB0b1Byb3RvY29s
U3RyaW5nKFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rp
b25hbGl0eSB2YWx1ZSkKK3sKKyAgICBzd2l0Y2godmFsdWUpIHsKKyAgICBjYXNlIFRlc3RQcm90
b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eUxUUjoKKyAg
ICAgICAgcmV0dXJuICJMVFIiX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlv
bmFsUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHlSVEw6CisgICAgICAgIHJldHVybiAiUlRM
Il9zOworICAgIH0KK30KKwordGVtcGxhdGU8PgoraW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2Nv
bERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eT4gZnJvbVByb3Rv
Y29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09ICJMVFIi
KQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1
bmRsZURpcmVjdGlvbmFsaXR5TFRSOworICAgIGlmICh2YWx1ZSA9PSAiUlRMIikKKyAgICAgICAg
cmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rp
b25hbGl0eVJUTDsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCitpbmxpbmUgU3RyaW5n
IHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJl
Y3Rpb25hbGl0eSB2YWx1ZSkKK3sKKyAgICBzd2l0Y2godmFsdWUpIHsKKyAgICBjYXNlIFRlc3RQ
cm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHlMVFI6CisgICAgICAg
IHJldHVybiAiTFRSIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJC
dW5kbGVEaXJlY3Rpb25hbGl0eVJUTDoKKyAgICAgICAgcmV0dXJuICJSVEwiX3M7CisgICAgfQor
fQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VQYXJh
bWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09ICJMVFIiKQorICAgICAgICByZXR1cm4gVGVz
dFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eUxUUjsKKyAgICBp
ZiAodmFsdWUgPT0gIlJUTCIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZVBh
cmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5UlRMOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
Cit9CisKK2lubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xUZXN0UGFy
YW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHkgdmFsdWUpCit7CisgICAgc3dpdGNoKHZhbHVlKSB7
CisgICAgY2FzZSBUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHlM
VFI6CisgICAgICAgIHJldHVybiAiTFRSIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sVGVzdFBh
cmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5UlRMOgorICAgICAgICByZXR1cm4gIlJUTCJfczsK
KyAgICB9Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xUZXN0
UGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHk+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBT
dHJpbmcmIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSAiTFRSIikKKyAgICAgICAgcmV0dXJu
IFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eUxUUjsKKyAgICBp
ZiAodmFsdWUgPT0gIlJUTCIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xUZXN0UGFyYW1l
dGVyQnVuZGxlRGlyZWN0aW9uYWxpdHlSVEw7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30K
KworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFy
YXRpb24tb2JqZWN0LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKworI2lt
cG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgi
CisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgor
Cit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucyAoRGF0YWJhc2VEb21haW4pCisKKysgKHZvaWQpX3BhcnNlRXJyb3I6KFRl
c3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxv
YWQ7CisrICh2b2lkKV9wYXJzZUVycm9yTGlzdDooTlNBcnJheS8qPFRlc3RQcm90b2NvbERhdGFi
YXNlRXJyb3I+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisrICh2b2lk
KV9wYXJzZU1vdXNlQnV0dG9uOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQp
cGF5bG9hZDsKKysgKHZvaWQpX3BhcnNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU6KFRlc3RQcm90
b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUgKiopb3V0VmFsdWUgZnJvbVBheWxv
YWQ6KGlkKXBheWxvYWQ7CisrICh2b2lkKV9wYXJzZVBhcmFtZXRlckJ1bmRsZTooVGVzdFByb3Rv
Y29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGUgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBh
eWxvYWQ7CisrICh2b2lkKV9wYXJzZU9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHM6KFRl
c3RQcm90b2NvbERhdGFiYXNlT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cyAqKilvdXRW
YWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNlRHVtbXlPYmplY3Q6
KFRlc3RQcm90b2NvbERhdGFiYXNlRHVtbXlPYmplY3QgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6
KGlkKXBheWxvYWQ7CisKK0BlbmQKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zIChUZXN0RG9tYWluKQorCisrICh2b2lkKV9wYXJzZVBhcmFtZXRlckJ1bmRsZTooVGVzdFBy
b3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZSAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5
bG9hZDsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zIChEYXRhYmFzZURvbWFpbikKKworKyAodm9pZClfcGFyc2VFcnJvcjooVGVzdFByb3RvY29s
RGF0YWJhc2VFcnJvciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFz
c10pOworICAgICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBhbGxvY10g
aW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOworfQorCisrICh2b2lkKV9wYXJzZUVycm9yTGlzdDoo
TlNBcnJheS8qPFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I+Ki8gKiopb3V0VmFsdWUgZnJvbVBh
eWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBh
eWxvYWQsIFtOU0FycmF5Lyo8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4qLyBjbGFzc10pOwor
ICAgICpvdXRWYWx1ZSA9IChOU0FycmF5Lyo8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4qLyAq
KXBheWxvYWQ7Cit9CisKKysgKHZvaWQpX3BhcnNlTW91c2VCdXR0b246KE5TTnVtYmVyICoqKW91
dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9CQURfVFlQRShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKKyAgICBPcHRpb25hbDxUZXN0
UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9uPiByZXN1bHQgPSBJbnNwZWN0b3I6OmZyb21Qcm90
b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9uPihwYXlsb2FkKTsKKyAg
ICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9FTlVNX1ZBTFVFKHJlc3VsdCwgQCJNb3VzZUJ1dHRv
biIpOworICAgICpvdXRWYWx1ZSA9IEAocmVzdWx0LnZhbHVlKCkpOworfQorCisrICh2b2lkKV9w
YXJzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOihUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFs
UGFyYW1ldGVyQnVuZGxlICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7Cisg
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNs
YXNzXSk7CisgICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFy
YW1ldGVyQnVuZGxlIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07Cit9CisKKysgKHZv
aWQpX3BhcnNlUGFyYW1ldGVyQnVuZGxlOihUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1
bmRsZSAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOworICAg
ICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGUgYWxsb2Nd
IGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKK30KKworKyAodm9pZClfcGFyc2VPYmplY3RXaXRo
UHJvcGVydHlOYW1lQ29uZmxpY3RzOihUZXN0UHJvdG9jb2xEYXRhYmFzZU9iamVjdFdpdGhQcm9w
ZXJ0eU5hbWVDb25mbGljdHMgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sK
KyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkg
Y2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbERhdGFiYXNlT2JqZWN0V2l0
aFByb3BlcnR5TmFtZUNvbmZsaWN0cyBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOwor
fQorCisrICh2b2lkKV9wYXJzZUR1bW15T2JqZWN0OihUZXN0UHJvdG9jb2xEYXRhYmFzZUR1bW15
T2JqZWN0ICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1df
RVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7Cisg
ICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xEYXRhYmFzZUR1bW15T2JqZWN0IGFsbG9jXSBp
bml0V2l0aFBheWxvYWQ6cGF5bG9hZF07Cit9CisKK0BlbmQKK0BpbXBsZW1lbnRhdGlvbiBUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFRlc3REb21haW4pCisKKysgKHZvaWQpX3BhcnNlUGFy
YW1ldGVyQnVuZGxlOihUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlICoqKW91dFZhbHVl
IGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURf
VFlQRShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gW1tU
ZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5
bG9hZF07Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBl
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9y
dCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0
UHJpdmF0ZS5oPgorI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9KU09O
VmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlv
biBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yCisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBh
eWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQKK3sK
KyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKwor
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAIm1lc3Nh
Z2UiXSwgQCJtZXNzYWdlIik7CisgICAgc2VsZi5tZXNzYWdlID0gcGF5bG9hZFtAIm1lc3NhZ2Ui
XTsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtA
ImNvZGUiXSwgQCJjb2RlIik7CisgICAgc2VsZi5jb2RlID0gW3BheWxvYWRbQCJjb2RlIl0gaW50
ZWdlclZhbHVlXTsKKworICAgIHJldHVybiBzZWxmOworfQorLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9iamVjdAoreworICAg
IGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmplY3QgdG9KU09OT2Jq
ZWN0XS5nZXQoKV0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgcmV0dXJuIHNlbGY7Cit9
CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBj
b2RlOihpbnQpY29kZQoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAg
ICByZXR1cm4gbmlsOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJU
WShtZXNzYWdlLCBAIm1lc3NhZ2UiKTsKKworICAgIHNlbGYubWVzc2FnZSA9IG1lc3NhZ2U7Cisg
ICAgc2VsZi5jb2RlID0gY29kZTsKKworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXNl
dE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZQoreworICAgIFtzdXBlciBzZXRTdHJpbmc6bWVz
c2FnZSBmb3JLZXk6QCJtZXNzYWdlIl07Cit9CisKKy0gKE5TU3RyaW5nICopbWVzc2FnZQorewor
ICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAibWVzc2FnZSJdOworfQorCistICh2b2lk
KXNldENvZGU6KGludCljb2RlCit7CisgICAgW3N1cGVyIHNldEludGVnZXI6Y29kZSBmb3JLZXk6
QCJjb2RlIl07Cit9CisKKy0gKGludCljb2RlCit7CisgICAgcmV0dXJuIFtzdXBlciBpbnRlZ2Vy
Rm9yS2V5OkAiY29kZSJdOworfQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9j
b2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlCisKKy0gKGluc3RhbmNldHlwZSlpbml0
V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxv
YWQKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5p
bDsKKworICAgIHNlbGYuY29sdW1uTmFtZXMgPSBwYXlsb2FkW0AiY29sdW1uTmFtZXMiXTsKKwor
ICAgIHNlbGYuYnV0dG9ucyA9IHBheWxvYWRbQCJidXR0b25zIl07CisKKyAgICBPcHRpb25hbDxU
ZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHk+
IGRpcmVjdGlvbmFsaXR5ID0gZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERhdGFiYXNl
T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eT4ocGF5bG9hZFtAImRpcmVjdGlv
bmFsaXR5Il0pOworICAgIGlmIChkaXJlY3Rpb25hbGl0eSkKKyAgICAgICAgc2VsZi5kaXJlY3Rp
b25hbGl0eSA9IGRpcmVjdGlvbmFsaXR5LnZhbHVlKCk7CisKKyAgICBzZWxmLm5vdGVzID0gcGF5
bG9hZFtAIm5vdGVzIl07CisKKyAgICBzZWxmLnRpbWVzdGFtcCA9IFtwYXlsb2FkW0AidGltZXN0
YW1wIl0gZG91YmxlVmFsdWVdOworCisgICAgc2VsZi52YWx1ZXMgPSBwYXlsb2FkW0AidmFsdWVz
Il07CisKKyAgICBzZWxmLnBheWxvYWQgPSBwYXlsb2FkW0AicGF5bG9hZCJdOworCisgICAgc2Vs
Zi5lcnJvciA9IFtbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBhbGxvY10gaW5pdFdpdGhQYXls
b2FkOnBheWxvYWRbQCJlcnJvciJdXTsKKworICAgIHNlbGYuZXJyb3JMaXN0ID0gb2JqY0FycmF5
RnJvbVBheWxvYWQ8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4ocGF5bG9hZFtAImVycm9yTGlz
dCJdKTsKKworICAgIHJldHVybiBzZWxmOworfQorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJv
dG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9iamVjdAoreworICAgIGlmICgh
KHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmplY3QgdG9KU09OT2JqZWN0XS5n
ZXQoKV0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0g
KHZvaWQpc2V0Q29sdW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWNvbHVtbk5hbWVz
Cit7CisgICAgW3N1cGVyIHNldEpTT05BcnJheTp0b0pTT05TdHJpbmdBcnJheShjb2x1bW5OYW1l
cykgZm9yS2V5OkAiY29sdW1uTmFtZXMiXTsKK30KKworLSAoTlNBcnJheS8qPE5TU3RyaW5nPiov
ICopY29sdW1uTmFtZXMKK3sKKyAgICByZXR1cm4gdG9PYmpDU3RyaW5nQXJyYXkoW3N1cGVyIEpT
T05BcnJheUZvcktleTpAImNvbHVtbk5hbWVzIl0pOworfQorCistICh2b2lkKXNldEJ1dHRvbnM6
KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWJ1dHRvbnMKK3sKKyAgICBbc3VwZXIgc2V0SlNPTkFy
cmF5OnRvSlNPTlN0cmluZ0FycmF5KGJ1dHRvbnMpIGZvcktleTpAImJ1dHRvbnMiXTsKK30KKwor
LSAoTlNBcnJheS8qPE5TU3RyaW5nPiovICopYnV0dG9ucworeworICAgIHJldHVybiB0b09iakNT
dHJpbmdBcnJheShbc3VwZXIgSlNPTkFycmF5Rm9yS2V5OkAiYnV0dG9ucyJdKTsKK30KKworLSAo
dm9pZClzZXREaXJlY3Rpb25hbGl0eTooVGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFt
ZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5KWRpcmVjdGlvbmFsaXR5Cit7CisgICAgW3N1cGVyIHNl
dFN0cmluZzp0b1Byb3RvY29sU3RyaW5nKGRpcmVjdGlvbmFsaXR5KSBmb3JLZXk6QCJkaXJlY3Rp
b25hbGl0eSJdOworfQorCistIChUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVy
QnVuZGxlRGlyZWN0aW9uYWxpdHkpZGlyZWN0aW9uYWxpdHkKK3sKKyAgICByZXR1cm4gZnJvbVBy
b3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGVE
aXJlY3Rpb25hbGl0eT4oW3N1cGVyIHN0cmluZ0ZvcktleTpAImRpcmVjdGlvbmFsaXR5Il0pLnZh
bHVlKCk7Cit9CisKKy0gKHZvaWQpc2V0Tm90ZXM6KE5TU3RyaW5nICopbm90ZXMKK3sKKyAgICBb
c3VwZXIgc2V0U3RyaW5nOm5vdGVzIGZvcktleTpAIm5vdGVzIl07Cit9CisKKy0gKE5TU3RyaW5n
ICopbm90ZXMKK3sKKyAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAIm5vdGVzIl07Cit9
CisKKy0gKHZvaWQpc2V0VGltZXN0YW1wOihkb3VibGUpdGltZXN0YW1wCit7CisgICAgW3N1cGVy
IHNldERvdWJsZTp0aW1lc3RhbXAgZm9yS2V5OkAidGltZXN0YW1wIl07Cit9CisKKy0gKGRvdWJs
ZSl0aW1lc3RhbXAKK3sKKyAgICByZXR1cm4gW3N1cGVyIGRvdWJsZUZvcktleTpAInRpbWVzdGFt
cCJdOworfQorCistICh2b2lkKXNldFZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopdmFs
dWVzCit7CisgICAgW3N1cGVyIHNldE9iamVjdDp2YWx1ZXMgZm9yS2V5OkAidmFsdWVzIl07Cit9
CisKKy0gKFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcworeworICAgIFJXSVByb3RvY29s
SlNPTk9iamVjdCAqb2JqZWN0ID0gW3N1cGVyIG9iamVjdEZvcktleTpAInZhbHVlcyJdOworICAg
IGlmICghb2JqZWN0KQorICAgICAgICByZXR1cm4gbmlsOworICAgIHJldHVybiBbW1JXSVByb3Rv
Y29sSlNPTk9iamVjdCBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0Oltbc3VwZXIgb2JqZWN0Rm9y
S2V5OkAidmFsdWVzIl0gdG9KU09OT2JqZWN0XS5nZXQoKV07Cit9CisKKy0gKHZvaWQpc2V0UGF5
bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZAoreworICAgIFtzdXBlciBzZXRP
YmplY3Q6cGF5bG9hZCBmb3JLZXk6QCJwYXlsb2FkIl07Cit9CisKKy0gKFJXSVByb3RvY29sSlNP
Tk9iamVjdCAqKXBheWxvYWQKK3sKKyAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9iamVjdCA9
IFtzdXBlciBvYmplY3RGb3JLZXk6QCJwYXlsb2FkIl07CisgICAgaWYgKCFvYmplY3QpCisgICAg
ICAgIHJldHVybiBuaWw7CisgICAgcmV0dXJuIFtbUldJUHJvdG9jb2xKU09OT2JqZWN0IGFsbG9j
XSBpbml0V2l0aEpTT05PYmplY3Q6W1tzdXBlciBvYmplY3RGb3JLZXk6QCJwYXlsb2FkIl0gdG9K
U09OT2JqZWN0XS5nZXQoKV07Cit9CisKKy0gKHZvaWQpc2V0RXJyb3I6KFRlc3RQcm90b2NvbERh
dGFiYXNlRXJyb3IgKillcnJvcgoreworICAgIFtzdXBlciBzZXRPYmplY3Q6ZXJyb3IgZm9yS2V5
OkAiZXJyb3IiXTsKK30KKworLSAoVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKWVycm9yCit7
CisgICAgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvYmplY3QgPSBbc3VwZXIgb2JqZWN0Rm9yS2V5
OkAiZXJyb3IiXTsKKyAgICBpZiAoIW9iamVjdCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBy
ZXR1cm4gW1tUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGFsbG9jXSBpbml0V2l0aEpTT05PYmpl
Y3Q6W1tzdXBlciBvYmplY3RGb3JLZXk6QCJlcnJvciJdIHRvSlNPTk9iamVjdF0uZ2V0KCldOwor
fQorCistICh2b2lkKXNldEVycm9yTGlzdDooTlNBcnJheS8qPFRlc3RQcm90b2NvbERhdGFiYXNl
RXJyb3I+Ki8gKillcnJvckxpc3QKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBF
X0lOX0FSUkFZKGVycm9yTGlzdCwgW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgY2xhc3NdKTsK
KyAgICBbc3VwZXIgc2V0SlNPTkFycmF5OnRvSlNPTk9iamVjdEFycmF5KGVycm9yTGlzdCkgZm9y
S2V5OkAiZXJyb3JMaXN0Il07Cit9CisKKy0gKE5TQXJyYXkvKjxUZXN0UHJvdG9jb2xEYXRhYmFz
ZUVycm9yPiovICopZXJyb3JMaXN0Cit7CisgICAgcmV0dXJuIHRvT2JqQ0FycmF5PFRlc3RQcm90
b2NvbERhdGFiYXNlRXJyb3I+KFtzdXBlciBKU09OQXJyYXlGb3JLZXk6QCJlcnJvckxpc3QiXSk7
Cit9CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1l
dGVyQnVuZGxlCisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNE
aWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQKK3sKKyAgICBpZiAoIShzZWxmID0g
W3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImNvbHVtbk5hbWVzIl0sIEAiY29sdW1u
TmFtZXMiKTsKKyAgICBzZWxmLmNvbHVtbk5hbWVzID0gcGF5bG9hZFtAImNvbHVtbk5hbWVzIl07
CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJi
dXR0b25zIl0sIEAiYnV0dG9ucyIpOworICAgIHNlbGYuYnV0dG9ucyA9IHBheWxvYWRbQCJidXR0
b25zIl07CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxv
YWRbQCJkaXJlY3Rpb25hbGl0eSJdLCBAImRpcmVjdGlvbmFsaXR5Iik7CisgICAgT3B0aW9uYWw8
VGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eT4gZGlyZWN0
aW9uYWxpdHkgPSBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0
ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eT4ocGF5bG9hZFtAImRpcmVjdGlvbmFsaXR5Il0pOworICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX0VOVU1fVkFMVUUoZGlyZWN0aW9uYWxpdHksIEAiZGly
ZWN0aW9uYWxpdHkiKTsKKyAgICBzZWxmLmRpcmVjdGlvbmFsaXR5ID0gZGlyZWN0aW9uYWxpdHku
dmFsdWUoKTsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5
bG9hZFtAIm5vdGVzIl0sIEAibm90ZXMiKTsKKyAgICBzZWxmLm5vdGVzID0gcGF5bG9hZFtAIm5v
dGVzIl07CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxv
YWRbQCJ0aW1lc3RhbXAiXSwgQCJ0aW1lc3RhbXAiKTsKKyAgICBzZWxmLnRpbWVzdGFtcCA9IFtw
YXlsb2FkW0AidGltZXN0YW1wIl0gZG91YmxlVmFsdWVdOworCisgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AidmFsdWVzIl0sIEAidmFsdWVzIik7Cisg
ICAgc2VsZi52YWx1ZXMgPSBwYXlsb2FkW0AidmFsdWVzIl07CisKKyAgICBUSFJPV19FWENFUFRJ
T05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJwYXlsb2FkIl0sIEAicGF5bG9hZCIp
OworICAgIHNlbGYucGF5bG9hZCA9IHBheWxvYWRbQCJwYXlsb2FkIl07CisKKyAgICBUSFJPV19F
WENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJlcnJvciJdLCBAImVycm9y
Iik7CisgICAgc2VsZi5lcnJvciA9IFtbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBhbGxvY10g
aW5pdFdpdGhQYXlsb2FkOnBheWxvYWRbQCJlcnJvciJdXTsKKworICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImVycm9yTGlzdCJdLCBAImVycm9yTGlz
dCIpOworICAgIHNlbGYuZXJyb3JMaXN0ID0gb2JqY0FycmF5RnJvbVBheWxvYWQ8VGVzdFByb3Rv
Y29sRGF0YWJhc2VFcnJvcj4ocGF5bG9hZFtAImVycm9yTGlzdCJdKTsKKworICAgIHJldHVybiBz
ZWxmOworfQorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3Rv
Y29sSlNPTk9iamVjdCAqKW9iamVjdAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdp
dGhKU09OT2JqZWN0OltvYmplY3QgdG9KU09OT2JqZWN0XS5nZXQoKV0pKQorICAgICAgICByZXR1
cm4gbmlsOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0
aENvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcyBidXR0b25z
OihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilidXR0b25zIGRpcmVjdGlvbmFsaXR5OihUZXN0UHJv
dG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5KWRpcmVjdGlvbmFsaXR5
IG5vdGVzOihOU1N0cmluZyAqKW5vdGVzIHRpbWVzdGFtcDooZG91YmxlKXRpbWVzdGFtcCB2YWx1
ZXM6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcyBwYXlsb2FkOihSV0lQcm90b2NvbEpT
T05PYmplY3QgKilwYXlsb2FkIGVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICopZXJy
b3IgZXJyb3JMaXN0OihOU0FycmF5Lyo8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4qLyAqKWVy
cm9yTGlzdAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1
cm4gbmlsOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShjb2x1
bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlS
RURfUFJPUEVSVFkoYnV0dG9ucywgQCJidXR0b25zIik7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9SRVFVSVJFRF9QUk9QRVJUWShub3RlcywgQCJub3RlcyIpOworICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfUkVRVUlSRURfUFJPUEVSVFkodmFsdWVzLCBAInZhbHVlcyIpOworICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZCwgQCJwYXlsb2FkIik7CisgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShlcnJvciwgQCJlcnJvciIpOwor
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkoZXJyb3JMaXN0LCBAImVy
cm9yTGlzdCIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEVfSU5fQVJSQVkoZXJy
b3JMaXN0LCBbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBjbGFzc10pOworCisgICAgc2VsZi5j
b2x1bW5OYW1lcyA9IGNvbHVtbk5hbWVzOworICAgIHNlbGYuYnV0dG9ucyA9IGJ1dHRvbnM7Cisg
ICAgc2VsZi5kaXJlY3Rpb25hbGl0eSA9IGRpcmVjdGlvbmFsaXR5OworICAgIHNlbGYubm90ZXMg
PSBub3RlczsKKyAgICBzZWxmLnRpbWVzdGFtcCA9IHRpbWVzdGFtcDsKKyAgICBzZWxmLnZhbHVl
cyA9IHZhbHVlczsKKyAgICBzZWxmLnBheWxvYWQgPSBwYXlsb2FkOworICAgIHNlbGYuZXJyb3Ig
PSBlcnJvcjsKKyAgICBzZWxmLmVycm9yTGlzdCA9IGVycm9yTGlzdDsKKworICAgIHJldHVybiBz
ZWxmOworfQorCistICh2b2lkKXNldENvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8g
Kiljb2x1bW5OYW1lcworeworICAgIFtzdXBlciBzZXRKU09OQXJyYXk6dG9KU09OU3RyaW5nQXJy
YXkoY29sdW1uTmFtZXMpIGZvcktleTpAImNvbHVtbk5hbWVzIl07Cit9CisKKy0gKE5TQXJyYXkv
KjxOU1N0cmluZz4qLyAqKWNvbHVtbk5hbWVzCit7CisgICAgcmV0dXJuIHRvT2JqQ1N0cmluZ0Fy
cmF5KFtzdXBlciBKU09OQXJyYXlGb3JLZXk6QCJjb2x1bW5OYW1lcyJdKTsKK30KKworLSAodm9p
ZClzZXRCdXR0b25zOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilidXR0b25zCit7CisgICAgW3N1
cGVyIHNldEpTT05BcnJheTp0b0pTT05TdHJpbmdBcnJheShidXR0b25zKSBmb3JLZXk6QCJidXR0
b25zIl07Cit9CisKKy0gKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWJ1dHRvbnMKK3sKKyAgICBy
ZXR1cm4gdG9PYmpDU3RyaW5nQXJyYXkoW3N1cGVyIEpTT05BcnJheUZvcktleTpAImJ1dHRvbnMi
XSk7Cit9CisKKy0gKHZvaWQpc2V0RGlyZWN0aW9uYWxpdHk6KFRlc3RQcm90b2NvbERhdGFiYXNl
UGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHkpZGlyZWN0aW9uYWxpdHkKK3sKKyAgICBbc3Vw
ZXIgc2V0U3RyaW5nOnRvUHJvdG9jb2xTdHJpbmcoZGlyZWN0aW9uYWxpdHkpIGZvcktleTpAImRp
cmVjdGlvbmFsaXR5Il07Cit9CisKKy0gKFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVu
ZGxlRGlyZWN0aW9uYWxpdHkpZGlyZWN0aW9uYWxpdHkKK3sKKyAgICByZXR1cm4gZnJvbVByb3Rv
Y29sU3RyaW5nPFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxp
dHk+KFtzdXBlciBzdHJpbmdGb3JLZXk6QCJkaXJlY3Rpb25hbGl0eSJdKS52YWx1ZSgpOworfQor
CistICh2b2lkKXNldE5vdGVzOihOU1N0cmluZyAqKW5vdGVzCit7CisgICAgW3N1cGVyIHNldFN0
cmluZzpub3RlcyBmb3JLZXk6QCJub3RlcyJdOworfQorCistIChOU1N0cmluZyAqKW5vdGVzCit7
CisgICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJub3RlcyJdOworfQorCistICh2b2lk
KXNldFRpbWVzdGFtcDooZG91YmxlKXRpbWVzdGFtcAoreworICAgIFtzdXBlciBzZXREb3VibGU6
dGltZXN0YW1wIGZvcktleTpAInRpbWVzdGFtcCJdOworfQorCistIChkb3VibGUpdGltZXN0YW1w
Cit7CisgICAgcmV0dXJuIFtzdXBlciBkb3VibGVGb3JLZXk6QCJ0aW1lc3RhbXAiXTsKK30KKwor
LSAodm9pZClzZXRWYWx1ZXM6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcworeworICAg
IFtzdXBlciBzZXRPYmplY3Q6dmFsdWVzIGZvcktleTpAInZhbHVlcyJdOworfQorCistIChSV0lQ
cm90b2NvbEpTT05PYmplY3QgKil2YWx1ZXMKK3sKKyAgICBSV0lQcm90b2NvbEpTT05PYmplY3Qg
Km9iamVjdCA9IFtzdXBlciBvYmplY3RGb3JLZXk6QCJ2YWx1ZXMiXTsKKyAgICBpZiAoIW9iamVj
dCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICByZXR1cm4gW1tSV0lQcm90b2NvbEpTT05PYmpl
Y3QgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDpbW3N1cGVyIG9iamVjdEZvcktleTpAInZhbHVl
cyJdIHRvSlNPTk9iamVjdF0uZ2V0KCldOworfQorCistICh2b2lkKXNldFBheWxvYWQ6KFJXSVBy
b3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQKK3sKKyAgICBbc3VwZXIgc2V0T2JqZWN0OnBheWxv
YWQgZm9yS2V5OkAicGF5bG9hZCJdOworfQorCistIChSV0lQcm90b2NvbEpTT05PYmplY3QgKilw
YXlsb2FkCit7CisgICAgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvYmplY3QgPSBbc3VwZXIgb2Jq
ZWN0Rm9yS2V5OkAicGF5bG9hZCJdOworICAgIGlmICghb2JqZWN0KQorICAgICAgICByZXR1cm4g
bmlsOworICAgIHJldHVybiBbW1JXSVByb3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5pdFdpdGhK
U09OT2JqZWN0Oltbc3VwZXIgb2JqZWN0Rm9yS2V5OkAicGF5bG9hZCJdIHRvSlNPTk9iamVjdF0u
Z2V0KCldOworfQorCistICh2b2lkKXNldEVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9y
ICopZXJyb3IKK3sKKyAgICBbc3VwZXIgc2V0T2JqZWN0OmVycm9yIGZvcktleTpAImVycm9yIl07
Cit9CisKKy0gKFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKillcnJvcgoreworICAgIFJXSVBy
b3RvY29sSlNPTk9iamVjdCAqb2JqZWN0ID0gW3N1cGVyIG9iamVjdEZvcktleTpAImVycm9yIl07
CisgICAgaWYgKCFvYmplY3QpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgcmV0dXJuIFtbVGVz
dFByb3RvY29sRGF0YWJhc2VFcnJvciBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0Oltbc3VwZXIg
b2JqZWN0Rm9yS2V5OkAiZXJyb3IiXSB0b0pTT05PYmplY3RdLmdldCgpXTsKK30KKworLSAodm9p
ZClzZXRFcnJvckxpc3Q6KE5TQXJyYXkvKjxUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yPiovICop
ZXJyb3JMaXN0Cit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRV9JTl9BUlJBWShl
cnJvckxpc3QsIFtUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGNsYXNzXSk7CisgICAgW3N1cGVy
IHNldEpTT05BcnJheTp0b0pTT05PYmplY3RBcnJheShlcnJvckxpc3QpIGZvcktleTpAImVycm9y
TGlzdCJdOworfQorCistIChOU0FycmF5Lyo8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4qLyAq
KWVycm9yTGlzdAoreworICAgIHJldHVybiB0b09iakNBcnJheTxUZXN0UHJvdG9jb2xEYXRhYmFz
ZUVycm9yPihbc3VwZXIgSlNPTkFycmF5Rm9yS2V5OkAiZXJyb3JMaXN0Il0pOworfQorCitAZW5k
CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xEYXRhYmFzZU9iamVjdFdpdGhQcm9wZXJ0
eU5hbWVDb25mbGljdHMKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVs
bCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZAoreworICAgIGlmICghKHNl
bGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiaW50ZWdlciJdLCBAImludGVn
ZXIiKTsKKyAgICBzZWxmLmludGVnZXIgPSBwYXlsb2FkW0AiaW50ZWdlciJdOworCisgICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiYXJyYXkiXSwgQCJh
cnJheSIpOworICAgIHNlbGYuYXJyYXkgPSBwYXlsb2FkW0AiYXJyYXkiXTsKKworICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAInN0cmluZyJdLCBAInN0
cmluZyIpOworICAgIHNlbGYuc3RyaW5nID0gcGF5bG9hZFtAInN0cmluZyJdOworCisgICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AidmFsdWUiXSwgQCJ2
YWx1ZSIpOworICAgIHNlbGYudmFsdWUgPSBwYXlsb2FkW0AidmFsdWUiXTsKKworICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAIm9iamVjdCJdLCBAIm9i
amVjdCIpOworICAgIHNlbGYub2JqZWN0ID0gcGF5bG9hZFtAIm9iamVjdCJdOworCisgICAgcmV0
dXJuIHNlbGY7Cit9CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICopb2JqZWN0Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBp
bml0V2l0aEpTT05PYmplY3Q6W29iamVjdCB0b0pTT05PYmplY3RdLmdldCgpXSkpCisgICAgICAg
IHJldHVybiBuaWw7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoSW50ZWdlcjooTlNTdHJpbmcgKilpbnRlZ2VyIGFycmF5OihOU1N0cmluZyAqKWFycmF5
IHN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcgdmFsdWU6KE5TU3RyaW5nICopdmFsdWUgb2JqZWN0
OihOU1N0cmluZyAqKW9iamVjdAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQor
ICAgICAgICByZXR1cm4gbmlsOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9Q
Uk9QRVJUWShpbnRlZ2VyLCBAImludGVnZXIiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JF
UVVJUkVEX1BST1BFUlRZKGFycmF5LCBAImFycmF5Iik7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9SRVFVSVJFRF9QUk9QRVJUWShzdHJpbmcsIEAic3RyaW5nIik7CisgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWSh2YWx1ZSwgQCJ2YWx1ZSIpOworICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkob2JqZWN0LCBAIm9iamVjdCIpOworCisgICAg
c2VsZi5pbnRlZ2VyID0gaW50ZWdlcjsKKyAgICBzZWxmLmFycmF5ID0gYXJyYXk7CisgICAgc2Vs
Zi5zdHJpbmcgPSBzdHJpbmc7CisgICAgc2VsZi52YWx1ZSA9IHZhbHVlOworICAgIHNlbGYub2Jq
ZWN0ID0gb2JqZWN0OworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpc2V0SW50ZWdl
cjooTlNTdHJpbmcgKilpbnRlZ2VyCit7CisgICAgW3N1cGVyIHNldFN0cmluZzppbnRlZ2VyIGZv
cktleTpAImludGVnZXIiXTsKK30KKworLSAoTlNTdHJpbmcgKilpbnRlZ2VyCit7CisgICAgcmV0
dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJpbnRlZ2VyIl07Cit9CisKKy0gKHZvaWQpc2V0QXJy
YXk6KE5TU3RyaW5nICopYXJyYXkKK3sKKyAgICBbc3VwZXIgc2V0U3RyaW5nOmFycmF5IGZvcktl
eTpAImFycmF5Il07Cit9CisKKy0gKE5TU3RyaW5nICopYXJyYXkKK3sKKyAgICByZXR1cm4gW3N1
cGVyIHN0cmluZ0ZvcktleTpAImFycmF5Il07Cit9CisKKy0gKHZvaWQpc2V0U3RyaW5nOihOU1N0
cmluZyAqKXN0cmluZworeworICAgIFtzdXBlciBzZXRTdHJpbmc6c3RyaW5nIGZvcktleTpAInN0
cmluZyJdOworfQorCistIChOU1N0cmluZyAqKXN0cmluZworeworICAgIHJldHVybiBbc3VwZXIg
c3RyaW5nRm9yS2V5OkAic3RyaW5nIl07Cit9CisKKy0gKHZvaWQpc2V0VmFsdWU6KE5TU3RyaW5n
ICopdmFsdWUKK3sKKyAgICBbc3VwZXIgc2V0U3RyaW5nOnZhbHVlIGZvcktleTpAInZhbHVlIl07
Cit9CisKKy0gKE5TU3RyaW5nICopdmFsdWUKK3sKKyAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0Zv
cktleTpAInZhbHVlIl07Cit9CisKKy0gKHZvaWQpc2V0T2JqZWN0OihOU1N0cmluZyAqKW9iamVj
dAoreworICAgIFtzdXBlciBzZXRTdHJpbmc6b2JqZWN0IGZvcktleTpAIm9iamVjdCJdOworfQor
CistIChOU1N0cmluZyAqKW9iamVjdAoreworICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5
OkAib2JqZWN0Il07Cit9CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbERh
dGFiYXNlRHVtbXlPYmplY3QKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9u
bnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZAoreworICAgIGlmICgh
KHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgcmV0dXJu
IHNlbGY7Cit9CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJv
dG9jb2xKU09OT2JqZWN0ICopb2JqZWN0Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0
V2l0aEpTT05PYmplY3Q6W29iamVjdCB0b0pTT05PYmplY3RdLmdldCgpXSkpCisgICAgICAgIHJl
dHVybiBuaWw7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworQGVuZAorCitAaW1wbGVtZW50YXRp
b24gVGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZQorCistIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXls
b2FkCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBu
aWw7CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRb
QCJkaXJlY3Rpb25hbGl0eSJdLCBAImRpcmVjdGlvbmFsaXR5Iik7CisgICAgT3B0aW9uYWw8VGVz
dFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5PiBkaXJlY3Rpb25hbGl0
eSA9IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlRGly
ZWN0aW9uYWxpdHk+KHBheWxvYWRbQCJkaXJlY3Rpb25hbGl0eSJdKTsKKyAgICBUSFJPV19FWENF
UFRJT05fRk9SX0JBRF9FTlVNX1ZBTFVFKGRpcmVjdGlvbmFsaXR5LCBAImRpcmVjdGlvbmFsaXR5
Iik7CisgICAgc2VsZi5kaXJlY3Rpb25hbGl0eSA9IGRpcmVjdGlvbmFsaXR5LnZhbHVlKCk7CisK
KyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJidXR0
b25zIl0sIEAiYnV0dG9ucyIpOworICAgIHNlbGYuYnV0dG9ucyA9IHBheWxvYWRbQCJidXR0b25z
Il07CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRb
QCJjb2x1bW5OYW1lcyJdLCBAImNvbHVtbk5hbWVzIik7CisgICAgc2VsZi5jb2x1bW5OYW1lcyA9
IHBheWxvYWRbQCJjb2x1bW5OYW1lcyJdOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFV
SVJFRF9QUk9QRVJUWShwYXlsb2FkW0Aibm90ZXMiXSwgQCJub3RlcyIpOworICAgIHNlbGYubm90
ZXMgPSBwYXlsb2FkW0Aibm90ZXMiXTsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlS
RURfUFJPUEVSVFkocGF5bG9hZFtAInRpbWVzdGFtcCJdLCBAInRpbWVzdGFtcCIpOworICAgIHNl
bGYudGltZXN0YW1wID0gW3BheWxvYWRbQCJ0aW1lc3RhbXAiXSBkb3VibGVWYWx1ZV07CisKKyAg
ICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJ2YWx1ZXMi
XSwgQCJ2YWx1ZXMiKTsKKyAgICBzZWxmLnZhbHVlcyA9IHBheWxvYWRbQCJ2YWx1ZXMiXTsKKwor
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAInBheWxv
YWQiXSwgQCJwYXlsb2FkIik7CisgICAgc2VsZi5wYXlsb2FkID0gcGF5bG9hZFtAInBheWxvYWQi
XTsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtA
ImVycm9yIl0sIEAiZXJyb3IiKTsKKyAgICBzZWxmLmVycm9yID0gW1tUZXN0UHJvdG9jb2xEYXRh
YmFzZUVycm9yIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZFtAImVycm9yIl1dOworCisg
ICAgcmV0dXJuIHNlbGY7Cit9CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVj
dDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopb2JqZWN0Cit7CisgICAgaWYgKCEoc2VsZiA9IFtz
dXBlciBpbml0V2l0aEpTT05PYmplY3Q6W29iamVjdCB0b0pTT05PYmplY3RdLmdldCgpXSkpCisg
ICAgICAgIHJldHVybiBuaWw7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoRGlyZWN0aW9uYWxpdHk6KFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5k
bGVEaXJlY3Rpb25hbGl0eSlkaXJlY3Rpb25hbGl0eSBidXR0b25zOihOU0FycmF5Lyo8TlNTdHJp
bmc+Ki8gKilidXR0b25zIGNvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1
bW5OYW1lcyBub3RlczooTlNTdHJpbmcgKilub3RlcyB0aW1lc3RhbXA6KGRvdWJsZSl0aW1lc3Rh
bXAgdmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKil2YWx1ZXMgcGF5bG9hZDooUldJUHJv
dG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZCBlcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJv
ciAqKWVycm9yCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJl
dHVybiBuaWw7CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKGJ1
dHRvbnMsIEAiYnV0dG9ucyIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJP
UEVSVFkoY29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsKKyAgICBUSFJPV19FWENFUFRJT05f
Rk9SX1JFUVVJUkVEX1BST1BFUlRZKG5vdGVzLCBAIm5vdGVzIik7CisgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWSh2YWx1ZXMsIEAidmFsdWVzIik7CisgICAgVEhST1df
RVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkLCBAInBheWxvYWQiKTsKKyAg
ICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKGVycm9yLCBAImVycm9yIik7
CisKKyAgICBzZWxmLmRpcmVjdGlvbmFsaXR5ID0gZGlyZWN0aW9uYWxpdHk7CisgICAgc2VsZi5i
dXR0b25zID0gYnV0dG9uczsKKyAgICBzZWxmLmNvbHVtbk5hbWVzID0gY29sdW1uTmFtZXM7Cisg
ICAgc2VsZi5ub3RlcyA9IG5vdGVzOworICAgIHNlbGYudGltZXN0YW1wID0gdGltZXN0YW1wOwor
ICAgIHNlbGYudmFsdWVzID0gdmFsdWVzOworICAgIHNlbGYucGF5bG9hZCA9IHBheWxvYWQ7Cisg
ICAgc2VsZi5lcnJvciA9IGVycm9yOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQp
c2V0RGlyZWN0aW9uYWxpdHk6KFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rp
b25hbGl0eSlkaXJlY3Rpb25hbGl0eQoreworICAgIFtzdXBlciBzZXRTdHJpbmc6dG9Qcm90b2Nv
bFN0cmluZyhkaXJlY3Rpb25hbGl0eSkgZm9yS2V5OkAiZGlyZWN0aW9uYWxpdHkiXTsKK30KKwor
LSAoVGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5KWRpcmVjdGlv
bmFsaXR5Cit7CisgICAgcmV0dXJuIGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xUZXN0
UGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHk+KFtzdXBlciBzdHJpbmdGb3JLZXk6QCJkaXJl
Y3Rpb25hbGl0eSJdKS52YWx1ZSgpOworfQorCistICh2b2lkKXNldEJ1dHRvbnM6KE5TQXJyYXkv
KjxOU1N0cmluZz4qLyAqKWJ1dHRvbnMKK3sKKyAgICBbc3VwZXIgc2V0SlNPTkFycmF5OnRvSlNP
TlN0cmluZ0FycmF5KGJ1dHRvbnMpIGZvcktleTpAImJ1dHRvbnMiXTsKK30KKworLSAoTlNBcnJh
eS8qPE5TU3RyaW5nPiovICopYnV0dG9ucworeworICAgIHJldHVybiB0b09iakNTdHJpbmdBcnJh
eShbc3VwZXIgSlNPTkFycmF5Rm9yS2V5OkAiYnV0dG9ucyJdKTsKK30KKworLSAodm9pZClzZXRD
b2x1bW5OYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMKK3sKKyAgICBb
c3VwZXIgc2V0SlNPTkFycmF5OnRvSlNPTlN0cmluZ0FycmF5KGNvbHVtbk5hbWVzKSBmb3JLZXk6
QCJjb2x1bW5OYW1lcyJdOworfQorCistIChOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5O
YW1lcworeworICAgIHJldHVybiB0b09iakNTdHJpbmdBcnJheShbc3VwZXIgSlNPTkFycmF5Rm9y
S2V5OkAiY29sdW1uTmFtZXMiXSk7Cit9CisKKy0gKHZvaWQpc2V0Tm90ZXM6KE5TU3RyaW5nICop
bm90ZXMKK3sKKyAgICBbc3VwZXIgc2V0U3RyaW5nOm5vdGVzIGZvcktleTpAIm5vdGVzIl07Cit9
CisKKy0gKE5TU3RyaW5nICopbm90ZXMKK3sKKyAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0Zvcktl
eTpAIm5vdGVzIl07Cit9CisKKy0gKHZvaWQpc2V0VGltZXN0YW1wOihkb3VibGUpdGltZXN0YW1w
Cit7CisgICAgW3N1cGVyIHNldERvdWJsZTp0aW1lc3RhbXAgZm9yS2V5OkAidGltZXN0YW1wIl07
Cit9CisKKy0gKGRvdWJsZSl0aW1lc3RhbXAKK3sKKyAgICByZXR1cm4gW3N1cGVyIGRvdWJsZUZv
cktleTpAInRpbWVzdGFtcCJdOworfQorCistICh2b2lkKXNldFZhbHVlczooUldJUHJvdG9jb2xK
U09OT2JqZWN0ICopdmFsdWVzCit7CisgICAgW3N1cGVyIHNldE9iamVjdDp2YWx1ZXMgZm9yS2V5
OkAidmFsdWVzIl07Cit9CisKKy0gKFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcworewor
ICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb2JqZWN0ID0gW3N1cGVyIG9iamVjdEZvcktleTpA
InZhbHVlcyJdOworICAgIGlmICghb2JqZWN0KQorICAgICAgICByZXR1cm4gbmlsOworICAgIHJl
dHVybiBbW1JXSVByb3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0Oltb
c3VwZXIgb2JqZWN0Rm9yS2V5OkAidmFsdWVzIl0gdG9KU09OT2JqZWN0XS5nZXQoKV07Cit9CisK
Ky0gKHZvaWQpc2V0UGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZAorewor
ICAgIFtzdXBlciBzZXRPYmplY3Q6cGF5bG9hZCBmb3JLZXk6QCJwYXlsb2FkIl07Cit9CisKKy0g
KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQKK3sKKyAgICBSV0lQcm90b2NvbEpTT05P
YmplY3QgKm9iamVjdCA9IFtzdXBlciBvYmplY3RGb3JLZXk6QCJwYXlsb2FkIl07CisgICAgaWYg
KCFvYmplY3QpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgcmV0dXJuIFtbUldJUHJvdG9jb2xK
U09OT2JqZWN0IGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6W1tzdXBlciBvYmplY3RGb3JLZXk6
QCJwYXlsb2FkIl0gdG9KU09OT2JqZWN0XS5nZXQoKV07Cit9CisKKy0gKHZvaWQpc2V0RXJyb3I6
KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKillcnJvcgoreworICAgIFtzdXBlciBzZXRPYmpl
Y3Q6ZXJyb3IgZm9yS2V5OkAiZXJyb3IiXTsKK30KKworLSAoVGVzdFByb3RvY29sRGF0YWJhc2VF
cnJvciAqKWVycm9yCit7CisgICAgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvYmplY3QgPSBbc3Vw
ZXIgb2JqZWN0Rm9yS2V5OkAiZXJyb3IiXTsKKyAgICBpZiAoIW9iamVjdCkKKyAgICAgICAgcmV0
dXJuIG5pbDsKKyAgICByZXR1cm4gW1tUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGFsbG9jXSBp
bml0V2l0aEpTT05PYmplY3Q6W1tzdXBlciBvYmplY3RGb3JLZXk6QCJlcnJvciJdIHRvSlNPTk9i
amVjdF0uZ2V0KCldOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xU
eXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbi1yZXN1
bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMmM1OWU5NDM0MjYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
dHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uLXJlc3VsdApAQCAtMCwwICsxLDE2Mjgg
QEAKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMuaW4KKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3Rz
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworLy8gVGVz
dAorSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiVGVzdCIsIG51bGwpOworSW5zcGVj
dG9yQmFja2VuZC5yZWdpc3RlckVudW0oIlRlc3QuVW5jYXN0ZWRBbmltYWxzIiwge1BpZ3M6ICJQ
aWdzIiwgQ293czogIkNvd3MiLCBDYXRzOiAiQ2F0cyIsIEhlbnM6ICJIZW5zIn0pOworSW5zcGVj
dG9yQmFja2VuZC5yZWdpc3RlckVudW0oIlRlc3QuQ2FzdGVkQW5pbWFscyIsIHtEdWNrczogIkR1
Y2tzIiwgSGVuczogIkhlbnMiLCBDcm93czogIkNyb3dzIiwgRmxhbWluZ29zOiAiRmxhbWluZ29z
In0pOworSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiVGVzdCIsIG51bGwpOworIyMj
IEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMuaW4KKworIyMjIEJlZ2luIEZp
bGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKworbmFtZXNwYWNlIElu
c3BlY3RvciB7CisKK2NsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoK
KyAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4m
JiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIp
OyB9CisgICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQorcHJpdmF0ZToKKyAgICBSZWZQdHI8
QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Cit9OworCisKKworCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQorIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2Fz
dHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaW5jbHVkZSAiVGVzdFBy
b3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVz
cGFjZSBJbnNwZWN0b3IgeworCit0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKworCisKK30g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNo
ZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0
cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1
ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCisjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVycy5oIgorI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgorCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCisvLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisj
aW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEZyb250ZW5kUm91dGVyOworCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0
Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1j
YXN0cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgor
CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNw
YXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2Fz
dHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRp
b25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFByb3RvY29s
IHsKKworCisKKy8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgorbmFtZXNwYWNlIFRlc3QgeworY2xh
c3MgVHlwZU5lZWRpbmdDYXN0OworY2xhc3MgUmVjdXJzaXZlT2JqZWN0MTsKK2NsYXNzIFJlY3Vy
c2l2ZU9iamVjdDI7CitlbnVtIGNsYXNzIFVuY2FzdGVkQW5pbWFsczsKK2VudW0gY2xhc3MgQ2Fz
dGVkQW5pbWFsczsKK30gLy8gVGVzdAorLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgor
CisKKy8vIFR5cGVkZWZzLgorbmFtZXNwYWNlIFRlc3QgewordHlwZWRlZiBpbnQgQ2FzdGVkT2Jq
ZWN0SWQ7Cit0eXBlZGVmIGludCBVbmNhc3RlZE9iamVjdElkOworfSAvLyBUZXN0CisvLyBFbmQg
b2YgdHlwZWRlZnMuCisKK25hbWVzcGFjZSBUZXN0SGVscGVycyB7CisKK1N0cmluZyBnZXRFbnVt
Q29uc3RhbnRWYWx1ZShpbnQgY29kZSk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBn
ZXRFbnVtQ29uc3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkKK3sKKyAgICByZXR1cm4gZ2V0RW51bUNv
bnN0YW50VmFsdWUoc3RhdGljX2Nhc3Q8aW50PihlbnVtVmFsdWUpKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgVGVzdEhlbHBlcnMKKworbmFtZXNwYWNlIFRlc3QgeworCisvKiBBIGR1bW15IHR5cGUg
dGhhdCByZXF1aXJlcyBydW50aW1lIGNhc3RzLCBhbmQgZm9yY2VzIG5vbi1wcmltaXRpdmUgcmVm
ZXJlbmNlZCB0eXBlcyB0byBhbHNvIGVtaXQgcnVudGltZSBjYXN0IGhlbHBlcnMuICovCitjbGFz
cyBUeXBlTmVlZGluZ0Nhc3QgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CitwdWJsaWM6Cisg
ICAgZW51bSB7CisgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKKyAgICAgICAgU3RyaW5nU2V0ID0g
MSA8PCAwLAorICAgICAgICBOdW1iZXJTZXQgPSAxIDw8IDEsCisgICAgICAgIEFuaW1hbHNTZXQg
PSAxIDw8IDIsCisgICAgICAgIElkU2V0ID0gMSA8PCAzLAorICAgICAgICBUcmVlU2V0ID0gMSA8
PCA0LAorICAgICAgICBBbGxGaWVsZHNTZXQgPSAoU3RyaW5nU2V0IHwgTnVtYmVyU2V0IHwgQW5p
bWFsc1NldCB8IElkU2V0IHwgVHJlZVNldCkKKyAgICB9OworCisgICAgdGVtcGxhdGU8aW50IFNU
QVRFPgorICAgIGNsYXNzIEJ1aWxkZXIgeworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxK
U09OOjpPYmplY3Q+IG1fcmVzdWx0OworCisgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWls
ZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKKyAg
ICAgICAgfQorCisgICAgICAgIEJ1aWxkZXIoUmVmPC8qVHlwZU5lZWRpbmdDYXN0Ki9KU09OOjpP
YmplY3Q+JiYgb2JqZWN0KQorICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkp
CisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRz
U2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAgICAgICB9CisgICAg
ICAgIGZyaWVuZCBjbGFzcyBUeXBlTmVlZGluZ0Nhc3Q7CisgICAgcHVibGljOgorCisgICAgICAg
IEJ1aWxkZXI8U1RBVEUgfCBTdHJpbmdTZXQ+JiBzZXRTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFN0cmlu
Z1NldCksIHByb3BlcnR5X3N0cmluZ19hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0U3RyaW5nKCJzdHJpbmciX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0
U3RhdGU8U3RyaW5nU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8
IE51bWJlclNldD4mIHNldE51bWJlcihpbnQgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBOdW1iZXJTZXQpLCBwcm9wZXJ0eV9udW1iZXJfYWxy
ZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldEludGVnZXIoIm51bWJlciJfcywg
dmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxOdW1iZXJTZXQ+KCk7CisgICAg
ICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQW5pbWFsc1NldD4mIHNldEFuaW1hbHMo
SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscyB2YWx1ZSkKKyAgICAgICAg
eworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEFuaW1hbHNTZXQpLCBwcm9w
ZXJ0eV9hbmltYWxzX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJp
bmcoImFuaW1hbHMiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVt
Q29uc3RhbnRWYWx1ZSh2YWx1ZSkpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxBbmlt
YWxzU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IElkU2V0PiYg
c2V0SWQoaW50IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgSWRTZXQpLCBwcm9wZXJ0eV9pZF9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0SW50ZWdlcigiaWQiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8SWRTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
VHJlZVNldD4mIHNldFRyZWUoUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vy
c2l2ZU9iamVjdDE+IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgVHJlZVNldCksIHByb3BlcnR5X3RyZWVfYWxyZWFkeV9zZXQpOworICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldE9iamVjdCgidHJlZSJfcywgdmFsdWUpOworICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxUcmVlU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgUmVmPFR5
cGVOZWVkaW5nQ2FzdD4gcmVsZWFzZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CisgICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoVHlwZU5lZWRpbmdDYXN0KSA9PSBzaXplb2Yo
SlNPTjo6T2JqZWN0KSwgY2Fubm90X2Nhc3QpOworCisgICAgICAgICAgICBSZWY8SlNPTjo6T2Jq
ZWN0PiBqc29uUmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKKyAgICAgICAgICAg
IGF1dG8gcmVzdWx0ID0gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8VHlwZU5lZWRpbmdD
YXN0Pio+KCZqc29uUmVzdWx0KSk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAg
ICB9CisgICAgfTsKKworICAgIC8qCisgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgorICAg
ICAqIFJlZjxUeXBlTmVlZGluZ0Nhc3Q+IHJlc3VsdCA9IFR5cGVOZWVkaW5nQ2FzdDo6Y3JlYXRl
KCkKKyAgICAgKiAgICAgLnNldFN0cmluZyguLi4pCisgICAgICogICAgIC5zZXROdW1iZXIoLi4u
KQorICAgICAqICAgICAuc2V0QW5pbWFscyguLi4pCisgICAgICogICAgIC5zZXRJZCguLi4pCisg
ICAgICogICAgIC5zZXRUcmVlKC4uLikKKyAgICAgKiAgICAgLnJlbGVhc2UoKTsKKyAgICAgKi8K
KyAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAg
IHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKKyAg
ICB9Cit9OworCitlbnVtIGNsYXNzIFVuY2FzdGVkQW5pbWFscyB7CisgICAgUGlncyA9IDQsCisg
ICAgQ293cyA9IDUsCisgICAgQ2F0cyA9IDYsCisgICAgSGVucyA9IDEsCit9OyAvLyBlbnVtIGNs
YXNzIFVuY2FzdGVkQW5pbWFscworCitlbnVtIGNsYXNzIENhc3RlZEFuaW1hbHMgeworICAgIER1
Y2tzID0gMCwKKyAgICBIZW5zID0gMSwKKyAgICBDcm93cyA9IDIsCisgICAgRmxhbWluZ29zID0g
MywKK307IC8vIGVudW0gY2xhc3MgQ2FzdGVkQW5pbWFscworCitjbGFzcyBSZWN1cnNpdmVPYmpl
Y3QxIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgeworcHVibGljOgorICAgIGVudW0geworICAg
ICAgICBOb0ZpZWxkc1NldCA9IDAsCisgICAgICAgIEFsbEZpZWxkc1NldCA9IDAKKyAgICB9Owor
CisgICAgdGVtcGxhdGU8aW50IFNUQVRFPgorICAgIGNsYXNzIEJ1aWxkZXIgeworICAgIHByaXZh
dGU6CisgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVzdWx0OworCisgICAgICAgIHRl
bXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRF
IHwgU1RFUD4qPih0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXIoUmVmPC8qUmVj
dXJzaXZlT2JqZWN0MSovSlNPTjo6T2JqZWN0PiYmIG9iamVjdCkKKyAgICAgICAgICAgIDogbV9y
ZXN1bHQoV1RGTW92ZShvYmplY3QpKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FT
U0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0
YXRlKTsKKyAgICAgICAgfQorICAgICAgICBmcmllbmQgY2xhc3MgUmVjdXJzaXZlT2JqZWN0MTsK
KyAgICBwdWJsaWM6CisKKyAgICAgICAgUmVmPFJlY3Vyc2l2ZU9iamVjdDE+IHJlbGVhc2UoKQor
ICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNT
ZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6
ZW9mKFJlY3Vyc2l2ZU9iamVjdDEpID09IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5ub3RfY2Fz
dCk7CisKKyAgICAgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25SZXN1bHQgPSBtX3Jlc3Vs
dC5yZWxlYXNlTm9uTnVsbCgpOworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBXVEZNb3ZlKCpy
ZWludGVycHJldF9jYXN0PFJlZjxSZWN1cnNpdmVPYmplY3QxPio+KCZqc29uUmVzdWx0KSk7Cisg
ICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgfTsKKworICAgIC8qCisg
ICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgorICAgICAqIFJlZjxSZWN1cnNpdmVPYmplY3Qx
PiByZXN1bHQgPSBSZWN1cnNpdmVPYmplY3QxOjpjcmVhdGUoKQorICAgICAqICAgICAucmVsZWFz
ZSgpOworICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6
Y3JlYXRlKCkpOworICAgIH0KKworICAgIHZvaWQgc2V0T2JqKFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QyPiB2YWx1ZSkKKyAgICB7CisgICAgICAgIEpT
T046Ok9iamVjdEJhc2U6OnNldE9iamVjdCgib2JqIl9zLCBXVEZNb3ZlKHZhbHVlKSk7CisgICAg
fQorfTsKKworY2xhc3MgUmVjdXJzaXZlT2JqZWN0MiA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNl
IHsKK3B1YmxpYzoKKyAgICBlbnVtIHsKKyAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAorICAgICAg
ICBBbGxGaWVsZHNTZXQgPSAwCisgICAgfTsKKworICAgIHRlbXBsYXRlPGludCBTVEFURT4KKyAg
ICBjbGFzcyBCdWlsZGVyIHsKKyAgICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiBtX3Jlc3VsdDsKKworICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFU
RSB8IFNURVA+JiBjYXN0U3RhdGUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKnJl
aW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CisgICAgICAgIH0K
KworICAgICAgICBCdWlsZGVyKFJlZjwvKlJlY3Vyc2l2ZU9iamVjdDIqL0pTT046Ok9iamVjdD4m
JiBvYmplY3QpCisgICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKKyAgICAg
ICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1
aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CisgICAgICAgIH0KKyAgICAgICAgZnJp
ZW5kIGNsYXNzIFJlY3Vyc2l2ZU9iamVjdDI7CisgICAgcHVibGljOgorCisgICAgICAgIFJlZjxS
ZWN1cnNpdmVPYmplY3QyPiByZWxlYXNlKCkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihSZWN1cnNpdmVPYmplY3QyKSA9PSBzaXpl
b2YoSlNPTjo6T2JqZWN0KSwgY2Fubm90X2Nhc3QpOworCisgICAgICAgICAgICBSZWY8SlNPTjo6
T2JqZWN0PiBqc29uUmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKKyAgICAgICAg
ICAgIGF1dG8gcmVzdWx0ID0gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8UmVjdXJzaXZl
T2JqZWN0Mj4qPigmanNvblJlc3VsdCkpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICAgICAgfQorICAgIH07CisKKyAgICAvKgorICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoK
KyAgICAgKiBSZWY8UmVjdXJzaXZlT2JqZWN0Mj4gcmVzdWx0ID0gUmVjdXJzaXZlT2JqZWN0Mjo6
Y3JlYXRlKCkKKyAgICAgKiAgICAgLnJlbGVhc2UoKTsKKyAgICAgKi8KKyAgICBzdGF0aWMgQnVp
bGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBCdWlsZGVy
PE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICB9CisKKyAgICB2b2lk
IHNldE9iaihSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0
MT4gdmFsdWUpCisgICAgeworICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRPYmplY3QoIm9i
aiJfcywgV1RGTW92ZSh2YWx1ZSkpOworICAgIH0KK307CisKK30gLy8gVGVzdAorCit0ZW1wbGF0
ZTw+IHN0cnVjdCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3Rl
ZEFuaW1hbHM+IHsKK3N0YXRpYyB2b2lkIGFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEpTT046
OlZhbHVlKik7Cit9OwordGVtcGxhdGU8PiBzdHJ1Y3QgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6
OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+IHsKK3N0YXRpYyBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0PiBydW50aW1lQ2FzdChSZWZQdHI8
SlNPTjo6VmFsdWU+JiYgdmFsdWUpOworc3RhdGljIHZvaWQgYXNzZXJ0VmFsdWVIYXNFeHBlY3Rl
ZFR5cGUoSlNPTjo6VmFsdWUqKTsKK307Cit0ZW1wbGF0ZTw+IHN0cnVjdCBCaW5kaW5nVHJhaXRz
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+IHsKK3N0YXRpYyB2
b2lkIGFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEpTT046OlZhbHVlKik7Cit9OwordGVtcGxh
dGU8PiBzdHJ1Y3QgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1
cnNpdmVPYmplY3QyPiB7CitzdGF0aWMgdm9pZCBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShK
U09OOjpWYWx1ZSopOworfTsKKworbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKKwordGVtcGxhdGU8
dHlwZW5hbWUgUHJvdG9jb2xFbnVtVHlwZT4KK09wdGlvbmFsPFByb3RvY29sRW51bVR5cGU+IHBh
cnNlRW51bVZhbHVlRnJvbVN0cmluZyhjb25zdCBTdHJpbmcmKTsKKworLy8gRW51bXMgaW4gdGhl
ICdUZXN0JyBEb21haW4KK3RlbXBsYXRlPD4KK09wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlRlc3Q6OlVuY2FzdGVkQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFscz4oY29uc3QgU3RyaW5nJik7Cit0ZW1w
bGF0ZTw+CitPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxz
PiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2Fz
dGVkQW5pbWFscz4oY29uc3QgU3RyaW5nJik7CisKK30gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJz
CisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgor
CituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRI
YXNoOworCisvLyBIYXNoIGRlY2xhcmF0aW9ucyBpbiB0aGUgJ1Rlc3QnIERvbWFpbgordGVtcGxh
dGU8Pgorc3RydWN0IERlZmF1bHRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlVuY2Fz
dGVkQW5pbWFscz4geworICAgIHR5cGVkZWYgSW50SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpU
ZXN0OjpVbmNhc3RlZEFuaW1hbHM+IEhhc2g7Cit9OwordGVtcGxhdGU8Pgorc3RydWN0IERlZmF1
bHRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+IHsKKyAgICB0
eXBlZGVmIEludEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz4g
SGFzaDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xPYmplY3RzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1j
YXN0cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisKKyNp
bmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisK
K25hbWVzcGFjZSBJbnNwZWN0b3IgeworCituYW1lc3BhY2UgUHJvdG9jb2wgeworCituYW1lc3Bh
Y2UgVGVzdEhlbHBlcnMgeworCitzdGF0aWMgY29uc3QgY2hhciogY29uc3QgZW51bV9jb25zdGFu
dF92YWx1ZXNbXSA9IHsKKyAgICAiRHVja3MiLAorICAgICJIZW5zIiwKKyAgICAiQ3Jvd3MiLAor
ICAgICJGbGFtaW5nb3MiLAorICAgICJQaWdzIiwKKyAgICAiQ293cyIsCisgICAgIkNhdHMiLAor
fTsKKworU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CisgICAgcmV0dXJu
IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvZGVdOworfQorCisvLyBFbnVtcyBpbiB0aGUgJ1Rlc3Qn
IERvbWFpbgorCit0ZW1wbGF0ZTw+CitPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0
OjpVbmNhc3RlZEFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlBy
b3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJp
bmcpCit7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0geworICAg
ICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFsczo6
UGlncywKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNhc3Rl
ZEFuaW1hbHM6OkNvd3MsCisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVz
dDo6VW5jYXN0ZWRBbmltYWxzOjpDYXRzLAorICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJv
dG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFsczo6SGVucywKKyAgICB9OworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgNDsgKytpKQorICAgICAgICBpZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51
bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNbaV1dKQorICAgICAgICAgICAgcmV0dXJu
IChJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHMpY29uc3RhbnRWYWx1
ZXNbaV07CisKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCit0ZW1wbGF0ZTw+CitPcHRp
b25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPiBwYXJzZUVudW1W
YWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz4o
Y29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKK3sKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90
IGNvbnN0YW50VmFsdWVzW10gPSB7CisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2Nv
bDo6VGVzdDo6Q2FzdGVkQW5pbWFsczo6RHVja3MsCisgICAgICAgIChzaXplX3QpSW5zcGVjdG9y
OjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFsczo6SGVucywKKyAgICAgICAgKHNpemVfdClJ
bnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzOjpDcm93cywKKyAgICAgICAg
KHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzOjpGbGFtaW5n
b3MsCisgICAgfTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDQ7ICsraSkKKyAgICAgICAg
aWYgKHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVz
W2ldXSkKKyAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2Fz
dGVkQW5pbWFscyljb25zdGFudFZhbHVlc1tpXTsKKworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCisKKworCit2b2lkIEJpbmRpbmdUcmFp
dHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz46OmFzc2VydFZhbHVl
SGFzRXhwZWN0ZWRUeXBlKEpTT046OlZhbHVlKiB2YWx1ZSkKK3sKKyNpZiBBU1NFUlRfRU5BQkxF
RAorICAgIEFTU0VSVF9BUkcodmFsdWUsIHZhbHVlKTsKKyAgICBTdHJpbmcgcmVzdWx0OworICAg
IGJvb2wgY2FzdFN1Y2NlZWRlZCA9IHZhbHVlLT5hc1N0cmluZyhyZXN1bHQpOworICAgIEFTU0VS
VChjYXN0U3VjY2VlZGVkKTsKKyAgICBBU1NFUlQocmVzdWx0ID09ICJEdWNrcyIgfHwgcmVzdWx0
ID09ICJIZW5zIiB8fCByZXN1bHQgPT0gIkNyb3dzIiB8fCByZXN1bHQgPT0gIkZsYW1pbmdvcyIp
OworI2Vsc2UgLy8gQVNTRVJUX0VOQUJMRUQKKyAgICBVTlVTRURfUEFSQU0odmFsdWUpOworI2Vu
ZGlmIC8vIEFTU0VSVF9FTkFCTEVECit9CisKK3ZvaWQgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6
OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVk
VHlwZShKU09OOjpWYWx1ZSogdmFsdWUpCit7CisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICBBU1NF
UlRfQVJHKHZhbHVlLCB2YWx1ZSk7CisgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gb2JqZWN0Owor
ICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9IHZhbHVlLT5hc09iamVjdChvYmplY3QpOworICAgIEFT
U0VSVF9VTlVTRUQoY2FzdFN1Y2NlZWRlZCwgY2FzdFN1Y2NlZWRlZCk7CisgICAgeworICAgICAg
ICBhdXRvIHN0cmluZ1BvcyA9IG9iamVjdC0+ZmluZCgic3RyaW5nIl9zKTsKKyAgICAgICAgQVNT
RVJUKHN0cmluZ1BvcyAhPSBvYmplY3QtPmVuZCgpKTsKKyAgICAgICAgQmluZGluZ1RyYWl0czxT
dHJpbmc+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShzdHJpbmdQb3MtPnZhbHVlLmdldCgp
KTsKKyAgICB9CisgICAgeworICAgICAgICBhdXRvIG51bWJlclBvcyA9IG9iamVjdC0+ZmluZCgi
bnVtYmVyIl9zKTsKKyAgICAgICAgQVNTRVJUKG51bWJlclBvcyAhPSBvYmplY3QtPmVuZCgpKTsK
KyAgICAgICAgQmluZGluZ1RyYWl0czxpbnQ+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShu
dW1iZXJQb3MtPnZhbHVlLmdldCgpKTsKKyAgICB9CisgICAgeworICAgICAgICBhdXRvIGFuaW1h
bHNQb3MgPSBvYmplY3QtPmZpbmQoImFuaW1hbHMiX3MpOworICAgICAgICBBU1NFUlQoYW5pbWFs
c1BvcyAhPSBvYmplY3QtPmVuZCgpKTsKKyAgICAgICAgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6
OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5
cGUoYW5pbWFsc1Bvcy0+dmFsdWUuZ2V0KCkpOworICAgIH0KKyAgICB7CisgICAgICAgIGF1dG8g
aWRQb3MgPSBvYmplY3QtPmZpbmQoImlkIl9zKTsKKyAgICAgICAgQVNTRVJUKGlkUG9zICE9IG9i
amVjdC0+ZW5kKCkpOworICAgICAgICBCaW5kaW5nVHJhaXRzPGludD46OmFzc2VydFZhbHVlSGFz
RXhwZWN0ZWRUeXBlKGlkUG9zLT52YWx1ZS5nZXQoKSk7CisgICAgfQorICAgIHsKKyAgICAgICAg
YXV0byB0cmVlUG9zID0gb2JqZWN0LT5maW5kKCJ0cmVlIl9zKTsKKyAgICAgICAgQVNTRVJUKHRy
ZWVQb3MgIT0gb2JqZWN0LT5lbmQoKSk7CisgICAgICAgIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9y
OjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT46OmFzc2VydFZhbHVlSGFzRXhwZWN0
ZWRUeXBlKHRyZWVQb3MtPnZhbHVlLmdldCgpKTsKKyAgICB9CisKKyAgICBpbnQgZm91bmRQcm9w
ZXJ0aWVzQ291bnQgPSA1OworICAgIGlmIChmb3VuZFByb3BlcnRpZXNDb3VudCAhPSBvYmplY3Qt
PnNpemUoKSkKKyAgICAgICAgRkFUQUwoIlVuZXhwZWN0ZWQgcHJvcGVydGllcyBpbiBvYmplY3Q6
ICVzXG4iLCBvYmplY3QtPnRvSlNPTlN0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKKyNlbHNlIC8v
IEFTU0VSVF9FTkFCTEVECisgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKKyNlbmRpZiAvLyBBU1NF
UlRfRU5BQkxFRAorfQorCitSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5l
ZWRpbmdDYXN0PiBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVO
ZWVkaW5nQ2FzdD46OnJ1bnRpbWVDYXN0KFJlZlB0cjxKU09OOjpWYWx1ZT4mJiB2YWx1ZSkKK3sK
KyAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiByZXN1bHQ7CisgICAgYm9vbCBjYXN0U3VjY2VlZGVk
ID0gdmFsdWUtPmFzT2JqZWN0KHJlc3VsdCk7CisgICAgQVNTRVJUX1VOVVNFRChjYXN0U3VjY2Vl
ZGVkLCBjYXN0U3VjY2VlZGVkKTsKKyAgICBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKHJl
c3VsdC5nZXQoKSk7CisgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdCkgPT0gc2l6ZW9mKEpTT046Ok9iamVjdEJhc2UpLCB0
eXBlX2Nhc3RfcHJvYmxlbSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdCo+KHN0YXRpY19jYXN0PEpTT046Ok9iamVjdEJh
c2UqPihyZXN1bHQuZ2V0KCkpKTsKK30KKworCit2b2lkIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9y
OjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT46OmFzc2VydFZhbHVlSGFzRXhwZWN0
ZWRUeXBlKEpTT046OlZhbHVlKiB2YWx1ZSkKK3sKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgIEFT
U0VSVF9BUkcodmFsdWUsIHZhbHVlKTsKKyAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBvYmplY3Q7
CisgICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdmFsdWUtPmFzT2JqZWN0KG9iamVjdCk7CisgICAg
QVNTRVJUX1VOVVNFRChjYXN0U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsKKworICAgIGludCBm
b3VuZFByb3BlcnRpZXNDb3VudCA9IDA7CisgICAgeworICAgICAgICBhdXRvIG9ialBvcyA9IG9i
amVjdC0+ZmluZCgib2JqIl9zKTsKKyAgICAgICAgaWYgKG9ialBvcyAhPSBvYmplY3QtPmVuZCgp
KSB7CisgICAgICAgICAgICBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6
OlJlY3Vyc2l2ZU9iamVjdDI+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShvYmpQb3MtPnZh
bHVlLmdldCgpKTsKKyAgICAgICAgICAgICsrZm91bmRQcm9wZXJ0aWVzQ291bnQ7CisgICAgICAg
IH0KKyAgICB9CisgICAgaWYgKGZvdW5kUHJvcGVydGllc0NvdW50ICE9IG9iamVjdC0+c2l6ZSgp
KQorICAgICAgICBGQVRBTCgiVW5leHBlY3RlZCBwcm9wZXJ0aWVzIGluIG9iamVjdDogJXNcbiIs
IG9iamVjdC0+dG9KU09OU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOworI2Vsc2UgLy8gQVNTRVJU
X0VOQUJMRUQKKyAgICBVTlVTRURfUEFSQU0odmFsdWUpOworI2VuZGlmIC8vIEFTU0VSVF9FTkFC
TEVECit9CisKK3ZvaWQgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpS
ZWN1cnNpdmVPYmplY3QyPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSlNPTjo6VmFsdWUq
IHZhbHVlKQoreworI2lmIEFTU0VSVF9FTkFCTEVECisgICAgQVNTRVJUX0FSRyh2YWx1ZSwgdmFs
dWUpOworICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG9iamVjdDsKKyAgICBib29sIGNhc3RTdWNj
ZWVkZWQgPSB2YWx1ZS0+YXNPYmplY3Qob2JqZWN0KTsKKyAgICBBU1NFUlRfVU5VU0VEKGNhc3RT
dWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQpOworCisgICAgaW50IGZvdW5kUHJvcGVydGllc0NvdW50
ID0gMDsKKyAgICB7CisgICAgICAgIGF1dG8gb2JqUG9zID0gb2JqZWN0LT5maW5kKCJvYmoiX3Mp
OworICAgICAgICBpZiAob2JqUG9zICE9IG9iamVjdC0+ZW5kKCkpIHsKKyAgICAgICAgICAgIEJp
bmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT46
OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKG9ialBvcy0+dmFsdWUuZ2V0KCkpOworICAgICAg
ICAgICAgKytmb3VuZFByb3BlcnRpZXNDb3VudDsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAo
Zm91bmRQcm9wZXJ0aWVzQ291bnQgIT0gb2JqZWN0LT5zaXplKCkpCisgICAgICAgIEZBVEFMKCJV
bmV4cGVjdGVkIHByb3BlcnRpZXMgaW4gb2JqZWN0OiAlc1xuIiwgb2JqZWN0LT50b0pTT05TdHJp
bmcoKS5hc2NpaSgpLmRhdGEoKSk7CisjZWxzZSAvLyBBU1NFUlRfRU5BQkxFRAorICAgIFVOVVNF
RF9QQVJBTSh2YWx1ZSk7CisjZW5kaWYgLy8gQVNTRVJUX0VOQUJMRUQKK30KKworfSAvLyBuYW1l
c3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
dHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+
CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCisKKworbmFtZXNwYWNlIEluc3BlY3RvciB7
CisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJh
Y2tlbmREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5
cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90
b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJu
YWwuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbmNsdWRl
IDx3dGYvSlNPTlZhbHVlcy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3Bh
dGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1l
LWNhc3RzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I2ltcG9ydCA8d3RmL1BsYXRmb3JtLmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJv
dG9jb2wuaD4KKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50
ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAorQGVuZAorCisKKyMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZp
Z3VyYXRpb24uaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENv
cmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKwordXNpbmcgbmFtZXNw
YWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRp
b24KK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwor
fQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3Bl
Y3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOwor
ICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxl
cik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQor
CistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKK0BlbmQKKwor
CisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgi
CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9y
OworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorCisj
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KKy8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0
aW9uLmg+CisjaW1wb3J0IDx3dGYvUGxhdGZvcm0uaD4KKworI2ltcG9ydCA8V2ViSW5zcGVjdG9y
L1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgorCisKK0BjbGFzcyBUZXN0UHJvdG9jb2xUZXN0VHlw
ZU5lZWRpbmdDYXN0OworQGNsYXNzIFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxOwor
QGNsYXNzIFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QyOworCit0eXBlZGVmIE5TX0VO
VU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzKSB7CisgICAgVGVz
dFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc1BpZ3MsCisgICAgVGVzdFByb3RvY29sVGVzdFVu
Y2FzdGVkQW5pbWFsc0Nvd3MsCisgICAgVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc0Nh
dHMsCisgICAgVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc0hlbnMsCit9OworCit0eXBl
ZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFscykgewor
ICAgIFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzRHVja3MsCisgICAgVGVzdFByb3RvY29s
VGVzdENhc3RlZEFuaW1hbHNIZW5zLAorICAgIFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxz
Q3Jvd3MsCisgICAgVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHNGbGFtaW5nb3MsCit9Owor
CitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVz
dFByb3RvY29sVGVzdFR5cGVOZWVkaW5nQ2FzdCA6IFJXSVByb3RvY29sSlNPTk9iamVjdAorLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlk
PiAqKXBheWxvYWQ7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0
aFN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcgbnVtYmVyOihpbnQpbnVtYmVyIGFuaW1hbHM6KFRl
c3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzKWFuaW1hbHMgaWRlbnRpZmllcjooaW50KWlkZW50
aWZpZXIgdHJlZTooVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgKil0cmVlOworLyog
cmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICpzdHJpbmc7
CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQgbnVtYmVy
OworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgVGVzdFByb3Rv
Y29sVGVzdENhc3RlZEFuaW1hbHMgYW5pbWFsczsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAo
bm9uYXRvbWljLCBhc3NpZ24pIGludCBpZGVudGlmaWVyOworLyogcmVxdWlyZWQgKi8gQHByb3Bl
cnR5IChub25hdG9taWMsIHJldGFpbikgVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEg
KnRyZWU7CitAZW5kCisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQor
QGludGVyZmFjZSBUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSA6IFJXSVByb3RvY29s
SlNPTk9iamVjdAorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5
PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQ7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90
b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKKy8qIG9wdGlv
bmFsICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIFRlc3RQcm90b2NvbFRlc3RSZWN1
cnNpdmVPYmplY3QyICpvYmo7CitAZW5kCisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJk
ZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MiA6
IFJXSVByb3RvY29sSlNPTk9iamVjdAorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoo
TlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQ7CistIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVj
dDsKKy8qIG9wdGlvbmFsICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIFRlc3RQcm90
b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxICpvYmo7CitAZW5kCisKKworCisKKworCisjaW1wb3J0
IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+CisK
KyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbEludGVybmFsLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJl
cXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2ltcG9ydCA8d3RmL1BsYXRmb3JtLmg+CisKKyNpbXBvcnQgIlRlc3RQ
cm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKKyNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgor
I2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xJbnRlcm5hbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5n
LXJ1bnRpbWUtY2FzdHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW1wb3J0IDx3dGYvUGxhdGZvcm0uaD4KKworI2ltcG9ydCAiVGVzdFByb3RvY29s
LmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+
CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5
cGU+CitPcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJp
bmcmIHZhbHVlKTsKKworaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2Nv
bFRlc3RVbmNhc3RlZEFuaW1hbHMgdmFsdWUpCit7CisgICAgc3dpdGNoKHZhbHVlKSB7CisgICAg
Y2FzZSBUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzUGlnczoKKyAgICAgICAgcmV0dXJu
ICJQaWdzIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc0Nvd3M6
CisgICAgICAgIHJldHVybiAiQ293cyJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbFRlc3RVbmNh
c3RlZEFuaW1hbHNDYXRzOgorICAgICAgICByZXR1cm4gIkNhdHMiX3M7CisgICAgY2FzZSBUZXN0
UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzSGVuczoKKyAgICAgICAgcmV0dXJuICJIZW5zIl9z
OworICAgIH0KK30KKwordGVtcGxhdGU8PgoraW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFRl
c3RVbmNhc3RlZEFuaW1hbHM+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVl
KQoreworICAgIGlmICh2YWx1ZSA9PSAiUGlncyIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9j
b2xUZXN0VW5jYXN0ZWRBbmltYWxzUGlnczsKKyAgICBpZiAodmFsdWUgPT0gIkNvd3MiKQorICAg
ICAgICByZXR1cm4gVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc0Nvd3M7CisgICAgaWYg
KHZhbHVlID09ICJDYXRzIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFRlc3RVbmNhc3Rl
ZEFuaW1hbHNDYXRzOworICAgIGlmICh2YWx1ZSA9PSAiSGVucyIpCisgICAgICAgIHJldHVybiBU
ZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzSGVuczsKKyAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworfQorCitpbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sVGVz
dENhc3RlZEFuaW1hbHMgdmFsdWUpCit7CisgICAgc3dpdGNoKHZhbHVlKSB7CisgICAgY2FzZSBU
ZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFsc0R1Y2tzOgorICAgICAgICByZXR1cm4gIkR1Y2tz
Il9zOworICAgIGNhc2UgVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHNIZW5zOgorICAgICAg
ICByZXR1cm4gIkhlbnMiX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFs
c0Nyb3dzOgorICAgICAgICByZXR1cm4gIkNyb3dzIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29s
VGVzdENhc3RlZEFuaW1hbHNGbGFtaW5nb3M6CisgICAgICAgIHJldHVybiAiRmxhbWluZ29zIl9z
OworICAgIH0KK30KKwordGVtcGxhdGU8PgoraW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFRl
c3RDYXN0ZWRBbmltYWxzPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkK
K3sKKyAgICBpZiAodmFsdWUgPT0gIkR1Y2tzIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2Nv
bFRlc3RDYXN0ZWRBbmltYWxzRHVja3M7CisgICAgaWYgKHZhbHVlID09ICJIZW5zIikKKyAgICAg
ICAgcmV0dXJuIFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzSGVuczsKKyAgICBpZiAodmFs
dWUgPT0gIkNyb3dzIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmlt
YWxzQ3Jvd3M7CisgICAgaWYgKHZhbHVlID09ICJGbGFtaW5nb3MiKQorICAgICAgICByZXR1cm4g
VGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHNGbGFtaW5nb3M7CisgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKK30KKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xU
eXBlUGFyc2VyLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0
UHJpdmF0ZS5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW50ZXJmYWNlIFRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoVGVzdERvbWFpbikKKworKyAodm9pZClfcGFyc2VU
eXBlTmVlZGluZ0Nhc3Q6KFRlc3RQcm90b2NvbFRlc3RUeXBlTmVlZGluZ0Nhc3QgKiopb3V0VmFs
dWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisrICh2b2lkKV9wYXJzZUNhc3RlZE9iamVjdElk
OihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQp
X3BhcnNlVW5jYXN0ZWRPYmplY3RJZDooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6
KGlkKXBheWxvYWQ7CisrICh2b2lkKV9wYXJzZVVuY2FzdGVkQW5pbWFsczooTlNOdW1iZXIgKiop
b3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisrICh2b2lkKV9wYXJzZUNhc3RlZEFu
aW1hbHM6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworKyAo
dm9pZClfcGFyc2VSZWN1cnNpdmVPYmplY3QxOihUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2Jq
ZWN0MSAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNl
UmVjdXJzaXZlT2JqZWN0MjooVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDIgKiopb3V0
VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9u
IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoVGVzdERvbWFpbikKKworKyAodm9pZClfcGFy
c2VUeXBlTmVlZGluZ0Nhc3Q6KFRlc3RQcm90b2NvbFRlc3RUeXBlTmVlZGluZ0Nhc3QgKiopb3V0
VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9S
X0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUg
PSBbW1Rlc3RQcm90b2NvbFRlc3RUeXBlTmVlZGluZ0Nhc3QgYWxsb2NdIGluaXRXaXRoUGF5bG9h
ZDpwYXlsb2FkXTsKK30KKworKyAodm9pZClfcGFyc2VDYXN0ZWRPYmplY3RJZDooTlNOdW1iZXIg
Kiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJ
T05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU051bWJlciBjbGFzc10pOworICAgICpvdXRWYWx1
ZSA9IChOU051bWJlciAqKXBheWxvYWQ7Cit9CisKKysgKHZvaWQpX3BhcnNlVW5jYXN0ZWRPYmpl
Y3RJZDooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAg
ICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU051bWJlciBjbGFzc10p
OworICAgICpvdXRWYWx1ZSA9IChOU051bWJlciAqKXBheWxvYWQ7Cit9CisKKysgKHZvaWQpX3Bh
cnNlVW5jYXN0ZWRBbmltYWxzOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQp
cGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05T
U3RyaW5nIGNsYXNzXSk7CisgICAgT3B0aW9uYWw8VGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5p
bWFscz4gcmVzdWx0ID0gSW5zcGVjdG9yOjpmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29s
VGVzdFVuY2FzdGVkQW5pbWFscz4ocGF5bG9hZCk7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9C
QURfRU5VTV9WQUxVRShyZXN1bHQsIEAiVW5jYXN0ZWRBbmltYWxzIik7CisgICAgKm91dFZhbHVl
ID0gQChyZXN1bHQudmFsdWUoKSk7Cit9CisKKysgKHZvaWQpX3BhcnNlQ2FzdGVkQW5pbWFsczoo
TlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJP
V19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBjbGFzc10pOworICAg
IE9wdGlvbmFsPFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzPiByZXN1bHQgPSBJbnNwZWN0
b3I6OmZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFscz4ocGF5
bG9hZCk7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfRU5VTV9WQUxVRShyZXN1bHQsIEAi
Q2FzdGVkQW5pbWFscyIpOworICAgICpvdXRWYWx1ZSA9IEAocmVzdWx0LnZhbHVlKCkpOworfQor
CisrICh2b2lkKV9wYXJzZVJlY3Vyc2l2ZU9iamVjdDE6KFRlc3RQcm90b2NvbFRlc3RSZWN1cnNp
dmVPYmplY3QxICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7
CisgICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSBhbGxv
Y10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOworfQorCisrICh2b2lkKV9wYXJzZVJlY3Vyc2l2
ZU9iamVjdDI6KFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QyICoqKW91dFZhbHVlIGZy
b21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQ
RShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gW1tUZXN0
UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MiBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxv
YWRdOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5q
c29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFBy
aXZhdGUuaD4KKyNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW1wb3J0IDx3dGYvSlNPTlZh
bHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24g
VGVzdFByb3RvY29sVGVzdFR5cGVOZWVkaW5nQ2FzdAorCistIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2Fk
Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7
CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJz
dHJpbmciXSwgQCJzdHJpbmciKTsKKyAgICBzZWxmLnN0cmluZyA9IHBheWxvYWRbQCJzdHJpbmci
XTsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtA
Im51bWJlciJdLCBAIm51bWJlciIpOworICAgIHNlbGYubnVtYmVyID0gW3BheWxvYWRbQCJudW1i
ZXIiXSBpbnRlZ2VyVmFsdWVdOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9Q
Uk9QRVJUWShwYXlsb2FkW0AiYW5pbWFscyJdLCBAImFuaW1hbHMiKTsKKyAgICBPcHRpb25hbDxU
ZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFscz4gYW5pbWFscyA9IGZyb21Qcm90b2NvbFN0cmlu
ZzxUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFscz4ocGF5bG9hZFtAImFuaW1hbHMiXSk7Cisg
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfRU5VTV9WQUxVRShhbmltYWxzLCBAImFuaW1hbHMi
KTsKKyAgICBzZWxmLmFuaW1hbHMgPSBhbmltYWxzLnZhbHVlKCk7CisKKyAgICBUSFJPV19FWENF
UFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJpZCJdLCBAImlkIik7CisgICAg
c2VsZi5pZGVudGlmaWVyID0gW3BheWxvYWRbQCJpZCJdIGludGVnZXJWYWx1ZV07CisKKyAgICBU
SFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJ0cmVlIl0sIEAi
dHJlZSIpOworICAgIHNlbGYudHJlZSA9IFtbVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVj
dDEgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkW0AidHJlZSJdXTsKKworICAgIHJldHVy
biBzZWxmOworfQorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVBy
b3RvY29sSlNPTk9iamVjdCAqKW9iamVjdAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5p
dFdpdGhKU09OT2JqZWN0OltvYmplY3QgdG9KU09OT2JqZWN0XS5nZXQoKV0pKQorICAgICAgICBy
ZXR1cm4gbmlsOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0
V2l0aFN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcgbnVtYmVyOihpbnQpbnVtYmVyIGFuaW1hbHM6
KFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzKWFuaW1hbHMgaWRlbnRpZmllcjooaW50KWlk
ZW50aWZpZXIgdHJlZTooVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgKil0cmVlCit7
CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisK
KyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHN0cmluZywgQCJzdHJp
bmciKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHRyZWUsIEAi
dHJlZSIpOworCisgICAgc2VsZi5zdHJpbmcgPSBzdHJpbmc7CisgICAgc2VsZi5udW1iZXIgPSBu
dW1iZXI7CisgICAgc2VsZi5hbmltYWxzID0gYW5pbWFsczsKKyAgICBzZWxmLmlkZW50aWZpZXIg
PSBpZGVudGlmaWVyOworICAgIHNlbGYudHJlZSA9IHRyZWU7CisKKyAgICByZXR1cm4gc2VsZjsK
K30KKworLSAodm9pZClzZXRTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nCit7CisgICAgW3N1cGVy
IHNldFN0cmluZzpzdHJpbmcgZm9yS2V5OkAic3RyaW5nIl07Cit9CisKKy0gKE5TU3RyaW5nICop
c3RyaW5nCit7CisgICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJzdHJpbmciXTsKK30K
KworLSAodm9pZClzZXROdW1iZXI6KGludCludW1iZXIKK3sKKyAgICBbc3VwZXIgc2V0SW50ZWdl
cjpudW1iZXIgZm9yS2V5OkAibnVtYmVyIl07Cit9CisKKy0gKGludCludW1iZXIKK3sKKyAgICBy
ZXR1cm4gW3N1cGVyIGludGVnZXJGb3JLZXk6QCJudW1iZXIiXTsKK30KKworLSAodm9pZClzZXRB
bmltYWxzOihUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFscylhbmltYWxzCit7CisgICAgW3N1
cGVyIHNldFN0cmluZzp0b1Byb3RvY29sU3RyaW5nKGFuaW1hbHMpIGZvcktleTpAImFuaW1hbHMi
XTsKK30KKworLSAoVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHMpYW5pbWFscworeworICAg
IHJldHVybiBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHM+
KFtzdXBlciBzdHJpbmdGb3JLZXk6QCJhbmltYWxzIl0pLnZhbHVlKCk7Cit9CisKKy0gKHZvaWQp
c2V0SWRlbnRpZmllcjooaW50KWlkZW50aWZpZXIKK3sKKyAgICBbc3VwZXIgc2V0SW50ZWdlcjpp
ZGVudGlmaWVyIGZvcktleTpAImlkIl07Cit9CisKKy0gKGludClpZGVudGlmaWVyCit7CisgICAg
cmV0dXJuIFtzdXBlciBpbnRlZ2VyRm9yS2V5OkAiaWQiXTsKK30KKworLSAodm9pZClzZXRUcmVl
OihUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSAqKXRyZWUKK3sKKyAgICBbc3VwZXIg
c2V0T2JqZWN0OnRyZWUgZm9yS2V5OkAidHJlZSJdOworfQorCistIChUZXN0UHJvdG9jb2xUZXN0
UmVjdXJzaXZlT2JqZWN0MSAqKXRyZWUKK3sKKyAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9i
amVjdCA9IFtzdXBlciBvYmplY3RGb3JLZXk6QCJ0cmVlIl07CisgICAgaWYgKCFvYmplY3QpCisg
ICAgICAgIHJldHVybiBuaWw7CisgICAgcmV0dXJuIFtbVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2
ZU9iamVjdDEgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDpbW3N1cGVyIG9iamVjdEZvcktleTpA
InRyZWUiXSB0b0pTT05PYmplY3RdLmdldCgpXTsKK30KKworQGVuZAorCitAaW1wbGVtZW50YXRp
b24gVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEKKworLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoUGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5
bG9hZAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4g
bmlsOworCisgICAgc2VsZi5vYmogPSBbW1Rlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3Qy
IGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZFtAIm9iaiJdXTsKKworICAgIHJldHVybiBz
ZWxmOworfQorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3Rv
Y29sSlNPTk9iamVjdCAqKW9iamVjdAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdp
dGhKU09OT2JqZWN0OltvYmplY3QgdG9KU09OT2JqZWN0XS5nZXQoKV0pKQorICAgICAgICByZXR1
cm4gbmlsOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpc2V0T2JqOihUZXN0UHJv
dG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MiAqKW9iagoreworICAgIFtzdXBlciBzZXRPYmplY3Q6
b2JqIGZvcktleTpAIm9iaiJdOworfQorCistIChUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2Jq
ZWN0MiAqKW9iagoreworICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb2JqZWN0ID0gW3N1cGVy
IG9iamVjdEZvcktleTpAIm9iaiJdOworICAgIGlmICghb2JqZWN0KQorICAgICAgICByZXR1cm4g
bmlsOworICAgIHJldHVybiBbW1Rlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QyIGFsbG9j
XSBpbml0V2l0aEpTT05PYmplY3Q6W1tzdXBlciBvYmplY3RGb3JLZXk6QCJvYmoiXSB0b0pTT05P
YmplY3RdLmdldCgpXTsKK30KKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29s
VGVzdFJlY3Vyc2l2ZU9iamVjdDIKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoo
bm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZAoreworICAgIGlm
ICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgc2Vs
Zi5vYmogPSBbW1Rlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxIGFsbG9jXSBpbml0V2l0
aFBheWxvYWQ6cGF5bG9hZFtAIm9iaiJdXTsKKworICAgIHJldHVybiBzZWxmOworfQorLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAq
KW9iamVjdAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0Oltv
YmplY3QgdG9KU09OT2JqZWN0XS5nZXQoKV0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAg
cmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpc2V0T2JqOihUZXN0UHJvdG9jb2xUZXN0UmVjdXJz
aXZlT2JqZWN0MSAqKW9iagoreworICAgIFtzdXBlciBzZXRPYmplY3Q6b2JqIGZvcktleTpAIm9i
aiJdOworfQorCistIChUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSAqKW9iagorewor
ICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb2JqZWN0ID0gW3N1cGVyIG9iamVjdEZvcktleTpA
Im9iaiJdOworICAgIGlmICghb2JqZWN0KQorICAgICAgICByZXR1cm4gbmlsOworICAgIHJldHVy
biBbW1Rlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxIGFsbG9jXSBpbml0V2l0aEpTT05P
YmplY3Q6W1tzdXBlciBvYmplY3RGb3JLZXk6QCJvYmoiXSB0b0pTT05PYmplY3RdLmdldCgpXTsK
K30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC90eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtd2l0aC1vcGVu
LXBhcmFtZXRlcnMuanNvbi1yZXN1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAuLjYzODIyM2Q3MTkxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtd2l0aC1vcGVuLXBhcmFt
ZXRlcnMuanNvbi1yZXN1bHQKQEAgLTAsMCArMSwxMTQ1IEBACisjIyMgQmVnaW4gRmlsZTogSW5z
cGVjdG9yQmFja2VuZENvbW1hbmRzLmpzLmluCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21t
YW5kcy5qcy5pbgorCisjIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRoLW9wZW4t
cGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworI2luY2x1ZGUgIlRlc3RQcm90
b2NvbFR5cGVzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJv
dXRlci5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgQWx0ZXJuYXRlQmFja2Vu
ZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVm
UHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hl
ciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KKyAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2Vu
ZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9
Citwcml2YXRlOgorICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0
Y2hlcjsKK307CisKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8g
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjIyMgRW5kIEZpbGU6IFRl
c3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJh
Y2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlw
ZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+
CisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3R5cGVkZWYgU3RyaW5nIEVy
cm9yU3RyaW5nOworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6
IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmRE
aXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXdp
dGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlz
cGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5k
Um91dGVyLmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvTmV2
ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpZiBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyNpbmNsdWRlICJUZXN0QWx0ZXJu
YXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVy
cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bE9iamVjdHMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgRnJvbnRl
bmRSb3V0ZXI7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0
RnJvbnRlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNw
YXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXdpdGgt
b3Blbi1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3Bh
dGNoZXJzLmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJv
dXRlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RG
cm9udGVuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2Jq
ZWN0cy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRoLW9wZW4t
cGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+CisjaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCituYW1lc3BhY2Ug
UHJvdG9jb2wgeworCisKKworLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCituYW1lc3BhY2UgVGVz
dCB7CitjbGFzcyBOb09wZW5QYXJhbWV0ZXJzOworY2xhc3MgT3BlblBhcmFtZXRlcnM7Cit9IC8v
IFRlc3QKKy8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KKworCisKKworbmFtZXNwYWNl
IFRlc3QgeworCitjbGFzcyBOb09wZW5QYXJhbWV0ZXJzIDogcHVibGljIEpTT046Ok9iamVjdEJh
c2UgeworcHVibGljOgorICAgIGVudW0geworICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCisgICAg
ICAgIE9uZVNldCA9IDEgPDwgMCwKKyAgICAgICAgVHdvU2V0ID0gMSA8PCAxLAorICAgICAgICBB
bGxGaWVsZHNTZXQgPSAoT25lU2V0IHwgVHdvU2V0KQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTxp
bnQgU1RBVEU+CisgICAgY2xhc3MgQnVpbGRlciB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVm
UHRyPEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7CisKKyAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+
IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMp
OworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcihSZWY8LypOb09wZW5QYXJhbWV0ZXJzKi9K
U09OOjpPYmplY3Q+JiYgb2JqZWN0KQorICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9i
amVjdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5v
RmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAgICAgICB9
CisgICAgICAgIGZyaWVuZCBjbGFzcyBOb09wZW5QYXJhbWV0ZXJzOworICAgIHB1YmxpYzoKKwor
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgT25lU2V0PiYgc2V0T25lKGRvdWJsZSB2YWx1ZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE9uZVNldCksIHBy
b3BlcnR5X29uZV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0RG91Ymxl
KCJvbmUiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8T25lU2V0Pigp
OworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFR3b1NldD4mIHNldFR3byhk
b3VibGUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBUd29TZXQpLCBwcm9wZXJ0eV90d29fYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldERvdWJsZSgidHdvIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2Fz
dFN0YXRlPFR3b1NldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIFJlZjxOb09wZW5QYXJhbWV0
ZXJzPiByZWxlYXNlKCkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RB
VEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKHNpemVvZihOb09wZW5QYXJhbWV0ZXJzKSA9PSBzaXplb2YoSlNPTjo6T2Jq
ZWN0KSwgY2Fubm90X2Nhc3QpOworCisgICAgICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29u
UmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKKyAgICAgICAgICAgIGF1dG8gcmVz
dWx0ID0gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8Tm9PcGVuUGFyYW1ldGVycz4qPigm
anNvblJlc3VsdCkpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAg
IH07CisKKyAgICAvKgorICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKKyAgICAgKiBSZWY8
Tm9PcGVuUGFyYW1ldGVycz4gcmVzdWx0ID0gTm9PcGVuUGFyYW1ldGVyczo6Y3JlYXRlKCkKKyAg
ICAgKiAgICAgLnNldE9uZSguLi4pCisgICAgICogICAgIC5zZXRUd28oLi4uKQorICAgICAqICAg
ICAucmVsZWFzZSgpOworICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBj
cmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046
Ok9iamVjdDo6Y3JlYXRlKCkpOworICAgIH0KK307CisKK2NsYXNzIE9wZW5QYXJhbWV0ZXJzIDog
cHVibGljIEpTT046Ok9iamVjdCB7CitwdWJsaWM6CisgICAgZW51bSB7CisgICAgICAgIE5vRmll
bGRzU2V0ID0gMCwKKyAgICAgICAgQWxwaGFTZXQgPSAxIDw8IDAsCisgICAgICAgIEJldGFTZXQg
PSAxIDw8IDEsCisgICAgICAgIEFsbEZpZWxkc1NldCA9IChBbHBoYVNldCB8IEJldGFTZXQpCisg
ICAgfTsKKworICAgIHRlbXBsYXRlPGludCBTVEFURT4KKyAgICBjbGFzcyBCdWlsZGVyIHsKKyAg
ICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBtX3Jlc3VsdDsKKworICAg
ICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUo
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRl
cjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyKFJl
ZjwvKk9wZW5QYXJhbWV0ZXJzKi9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQorICAgICAgICAgICAg
OiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2lu
aXRfc3RhdGUpOworICAgICAgICB9CisgICAgICAgIGZyaWVuZCBjbGFzcyBPcGVuUGFyYW1ldGVy
czsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IEFscGhhU2V0PiYgc2V0
QWxwaGEoZG91YmxlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgQWxwaGFTZXQpLCBwcm9wZXJ0eV9hbHBoYV9hbHJlYWR5X3NldCk7CisgICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0RG91YmxlKCJhbHBoYSJfcywgdmFsdWUpOworICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxBbHBoYVNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBCZXRhU2V0PiYgc2V0QmV0YShkb3VibGUgdmFsdWUpCisgICAgICAgIHsK
KyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBCZXRhU2V0KSwgcHJvcGVydHlf
YmV0YV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0RG91YmxlKCJiZXRh
Il9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEJldGFTZXQ+KCk7Cisg
ICAgICAgIH0KKworICAgICAgICBSZWY8T3BlblBhcmFtZXRlcnM+IHJlbGVhc2UoKQorICAgICAg
ICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJl
c3VsdF9pc19ub3RfcmVhZHkpOworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKE9w
ZW5QYXJhbWV0ZXJzKSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0KSwgY2Fubm90X2Nhc3QpOworCisg
ICAgICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uUmVzdWx0ID0gbV9yZXN1bHQucmVsZWFz
ZU5vbk51bGwoKTsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gV1RGTW92ZSgqcmVpbnRlcnBy
ZXRfY2FzdDxSZWY8T3BlblBhcmFtZXRlcnM+Kj4oJmpzb25SZXN1bHQpKTsKKyAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyoKKyAgICAgKiBTeW50
aGV0aWMgY29uc3RydWN0b3I6CisgICAgICogUmVmPE9wZW5QYXJhbWV0ZXJzPiByZXN1bHQgPSBP
cGVuUGFyYW1ldGVyczo6Y3JlYXRlKCkKKyAgICAgKiAgICAgLnNldEFscGhhKC4uLikKKyAgICAg
KiAgICAgLnNldEJldGEoLi4uKQorICAgICAqICAgICAucmVsZWFzZSgpOworICAgICAqLworICAg
IHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOworICAgIH0K
KworICAgIC8vIFByb3BlcnR5IG5hbWVzIGZvciB0eXBlIGdlbmVyYXRlZCBhcyBvcGVuLgorICAg
IE5vbmUgc3RhdGljIGNvbnN0IGNoYXIqIEFscGhhOworfTsKKworfSAvLyBUZXN0CisKKworCit9
IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xPYmplY3RzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUt
d2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29s
T2JqZWN0cy5oIgorCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFByb3Rv
Y29sIHsKKworY29uc3QgY2hhciogSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6T3BlblBhcmFt
ZXRlcnM6OkFscGhhID0gImFscGhhIjsKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0
cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5o
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRoLW9wZW4tcGFyYW1l
dGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNp
bXBvcnQgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0
ci5oPgorCisKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgK
KworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMu
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0
ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgor
CisjaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorCituYW1l
c3BhY2UgSW5zcGVjdG9yIHsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSB0eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8d3RmL1BsYXRmb3JtLmg+CisKKyNp
bXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KKworX19hdHRyaWJ1dGVfXygodmlz
aWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRp
b24gOiBOU09iamVjdAorQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbi5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1t
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRoLW9wZW4tcGFyYW1l
dGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNp
bXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKKworI2ltcG9ydCAiVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5o
IgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4K
KyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5o
PgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXJzLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9u
IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNv
bnRyb2xsZXIqIF9jb250cm9sbGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250
cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAg
ICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5p
bDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVy
OworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbc3VwZXIg
ZGVhbGxvY107Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZp
Z3VyYXRpb24ubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hl
cnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXdpdGgtb3Blbi1w
YXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2lu
ZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZl
bnREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8
Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisjaW1wb3J0IDx3dGYvUGxhdGZvcm0uaD4KKworI2lt
cG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgorCisKK0BjbGFzcyBU
ZXN0UHJvdG9jb2xUZXN0Tm9PcGVuUGFyYW1ldGVyczsKK0BjbGFzcyBUZXN0UHJvdG9jb2xUZXN0
T3BlblBhcmFtZXRlcnM7CisKKworCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVs
dCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sVGVzdE5vT3BlblBhcmFtZXRlcnMgOiBSV0lQ
cm90b2NvbEpTT05PYmplY3QKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGlj
dGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkOworLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7Cist
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhPbmU6KGRvdWJsZSlvbmUgdHdvOihkb3VibGUpdHdvOwor
LyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgZG91YmxlIG9uZTsK
Ky8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGRvdWJsZSB0d287
CitAZW5kCisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVy
ZmFjZSBUZXN0UHJvdG9jb2xUZXN0T3BlblBhcmFtZXRlcnMgOiBSV0lQcm90b2NvbEpTT05PYmpl
Y3QKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmlu
ZyAqLCBpZD4gKilwYXlsb2FkOworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmpl
Y3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7CistIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhBbHBoYTooZG91YmxlKWFscGhhIGJldGE6KGRvdWJsZSliZXRhOworLyogcmVxdWly
ZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgZG91YmxlIGFscGhhOworLyogcmVx
dWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgZG91YmxlIGJldGE7CitAZW5k
CisKKworCisKKworCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBh
dGliaWxpdHlPYmplY3RzLmg+CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSB0eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8d3RmL1BsYXRmb3JtLmg+
CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9i
amVjdFByaXZhdGUuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVj
dG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKworCisKKworIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDx3dGYvUGxhdGZvcm0uaD4KKworI2ltcG9y
dCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJh
eUNvbnZlcnNpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBPYmpDRW51bVR5cGU+CitPcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0
cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9y
dCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVBy
b3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsK
KworQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFRlc3REb21haW4pCisK
KysgKHZvaWQpX3BhcnNlTm9PcGVuUGFyYW1ldGVyczooVGVzdFByb3RvY29sVGVzdE5vT3BlblBh
cmFtZXRlcnMgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisrICh2b2lkKV9w
YXJzZU9wZW5QYXJhbWV0ZXJzOihUZXN0UHJvdG9jb2xUZXN0T3BlblBhcmFtZXRlcnMgKiopb3V0
VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9u
IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoVGVzdERvbWFpbikKKworKyAodm9pZClfcGFy
c2VOb09wZW5QYXJhbWV0ZXJzOihUZXN0UHJvdG9jb2xUZXN0Tm9PcGVuUGFyYW1ldGVycyAqKilv
dXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOworICAgICpvdXRWYWx1
ZSA9IFtbVGVzdFByb3RvY29sVGVzdE5vT3BlblBhcmFtZXRlcnMgYWxsb2NdIGluaXRXaXRoUGF5
bG9hZDpwYXlsb2FkXTsKK30KKworKyAodm9pZClfcGFyc2VPcGVuUGFyYW1ldGVyczooVGVzdFBy
b3RvY29sVGVzdE9wZW5QYXJhbWV0ZXJzICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXls
b2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNEaWN0
aW9uYXJ5IGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xUZXN0T3BlblBh
cmFtZXRlcnMgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKK30KKworQGVuZAorCisK
KyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5o
IgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPFdl
Ykluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisjaW1wb3J0IDx3dGYv
QXNzZXJ0aW9ucy5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNw
YWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFRlc3ROb09wZW5Q
YXJhbWV0ZXJzCisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNE
aWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQKK3sKKyAgICBpZiAoIShzZWxmID0g
W3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAIm9uZSJdLCBAIm9uZSIpOworICAgIHNl
bGYub25lID0gW3BheWxvYWRbQCJvbmUiXSBkb3VibGVWYWx1ZV07CisKKyAgICBUSFJPV19FWENF
UFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJ0d28iXSwgQCJ0d28iKTsKKyAg
ICBzZWxmLnR3byA9IFtwYXlsb2FkW0AidHdvIl0gZG91YmxlVmFsdWVdOworCisgICAgcmV0dXJu
IHNlbGY7Cit9CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJv
dG9jb2xKU09OT2JqZWN0ICopb2JqZWN0Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0
V2l0aEpTT05PYmplY3Q6W29iamVjdCB0b0pTT05PYmplY3RdLmdldCgpXSkpCisgICAgICAgIHJl
dHVybiBuaWw7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoT25lOihkb3VibGUpb25lIHR3bzooZG91YmxlKXR3bworeworICAgIGlmICghKHNlbGYgPSBb
c3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgc2VsZi5vbmUgPSBvbmU7
CisgICAgc2VsZi50d28gPSB0d287CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClz
ZXRPbmU6KGRvdWJsZSlvbmUKK3sKKyAgICBbc3VwZXIgc2V0RG91YmxlOm9uZSBmb3JLZXk6QCJv
bmUiXTsKK30KKworLSAoZG91YmxlKW9uZQoreworICAgIHJldHVybiBbc3VwZXIgZG91YmxlRm9y
S2V5OkAib25lIl07Cit9CisKKy0gKHZvaWQpc2V0VHdvOihkb3VibGUpdHdvCit7CisgICAgW3N1
cGVyIHNldERvdWJsZTp0d28gZm9yS2V5OkAidHdvIl07Cit9CisKKy0gKGRvdWJsZSl0d28KK3sK
KyAgICByZXR1cm4gW3N1cGVyIGRvdWJsZUZvcktleTpAInR3byJdOworfQorCitAZW5kCisKK0Bp
bXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUZXN0T3BlblBhcmFtZXRlcnMKKworLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwg
aWQ+ICopcGF5bG9hZAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAg
ICByZXR1cm4gbmlsOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJU
WShwYXlsb2FkW0AiYWxwaGEiXSwgQCJhbHBoYSIpOworICAgIHNlbGYuYWxwaGEgPSBbcGF5bG9h
ZFtAImFscGhhIl0gZG91YmxlVmFsdWVdOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFV
SVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiYmV0YSJdLCBAImJldGEiKTsKKyAgICBzZWxmLmJldGEg
PSBbcGF5bG9hZFtAImJldGEiXSBkb3VibGVWYWx1ZV07CisKKyAgICByZXR1cm4gc2VsZjsKK30K
Ky0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05P
YmplY3QgKilvYmplY3QKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoSlNPTk9i
amVjdDpbb2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0KCldKSkKKyAgICAgICAgcmV0dXJuIG5pbDsK
KworICAgIHJldHVybiBzZWxmOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhBbHBoYToo
ZG91YmxlKWFscGhhIGJldGE6KGRvdWJsZSliZXRhCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBl
ciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBzZWxmLmFscGhhID0gYWxwaGE7
CisgICAgc2VsZi5iZXRhID0gYmV0YTsKKworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lk
KXNldEFscGhhOihkb3VibGUpYWxwaGEKK3sKKyAgICBbc3VwZXIgc2V0RG91YmxlOmFscGhhIGZv
cktleTpAImFscGhhIl07Cit9CisKKy0gKGRvdWJsZSlhbHBoYQoreworICAgIHJldHVybiBbc3Vw
ZXIgZG91YmxlRm9yS2V5OkAiYWxwaGEiXTsKK30KKworLSAodm9pZClzZXRCZXRhOihkb3VibGUp
YmV0YQoreworICAgIFtzdXBlciBzZXREb3VibGU6YmV0YSBmb3JLZXk6QCJiZXRhIl07Cit9CisK
Ky0gKGRvdWJsZSliZXRhCit7CisgICAgcmV0dXJuIFtzdXBlciBkb3VibGVGb3JLZXk6QCJiZXRh
Il07Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvdmVyc2lvbi5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC92ZXJzaW9uLmpzb24tcmVzdWx0Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kM2I2MWNjYmIzNQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC92ZXJzaW9uLmpzb24tcmVzdWx0CkBAIC0wLDAgKzEsODYyIEBACisjIyMgQmVnaW4gRmls
ZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzLmluCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gdmVyc2lvbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKy8vIFZlcnNpb25Eb21haW4KK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJE
b21haW4oIlZlcnNpb25Eb21haW4iLCBudWxsKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJW
ZXJzaW9uKCJWZXJzaW9uRG9tYWluIiwgNDIpOworSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURv
bWFpbigiVmVyc2lvbkRvbWFpbiIsIG51bGwpOworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNr
ZW5kQ29tbWFuZHMuanMuaW4KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5k
RGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHZlcnNpb24u
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5o
IgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+
CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKwor
bmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVy
IHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5k
RGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3Zl
KGRpc3BhdGNoZXIpOyB9CisgICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVy
KCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQorcHJpdmF0ZToK
KyAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Cit9Owor
CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQ
RUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRl
QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0
Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHZlcnNpb24uanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2Jq
ZWN0cy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNw
ZWN0b3IgeworCit0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKworCisKK30gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKwor
IyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lvbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0
QmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVk
ZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgor
CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjaW5jbHVkZSAi
VGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgorI2VuZGlmIC8vIEVOQUJMRShJTlNQ
RUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwor
CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5k
RGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVy
cy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lvbi5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3Rz
LmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEZyb250ZW5kUm91dGVy
OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5k
RGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMu
Y3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lvbi5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKwor
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHZlcnNpb24uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5o
PgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgor
I2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisK
KworbmFtZXNwYWNlIFByb3RvY29sIHsKKworLy8gVmVyc2lvbnMuCituYW1lc3BhY2UgVmVyc2lv
bkRvbWFpbiB7CitzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFZFUlNJT04gPSA0MjsKK30gLy8g
VmVyc2lvbkRvbWFpbgorLy8gRW5kIG9mIHZlcnNpb25zLgorCisKKworCisKKworCisKK30gLy8g
bmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bE9iamVjdHMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lvbi5q
c29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisKKyNpbmNsdWRl
IDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVz
cGFjZSBJbnNwZWN0b3IgeworCituYW1lc3BhY2UgUHJvdG9jb2wgeworCisKKworfSAvLyBuYW1l
c3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
dmVyc2lvbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
KyNpbXBvcnQgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8d3RmL1JldGFp
blB0ci5oPgorCisKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJz
LmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHZlcnNpb24uanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNp
bXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSAiVGVz
dFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9y
IHsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xD
b25maWd1cmF0aW9uLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9u
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9y
dCA8d3RmL1BsYXRmb3JtLmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wu
aD4KKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNl
IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAorQGVuZAorCisKKyMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gdmVyc2lvbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKKworI2ltcG9ydCAiVGVz
dFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRj
aGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdl
bnQuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJv
bGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2Vu
ZERpc3BhdGNoZXJzLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVu
dGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KK3sKKyAgICBBdWdtZW50YWJsZUluc3Bl
Y3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIK
K3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0
dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250
cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBb
c3VwZXIgZGVhbGxvY107Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24ubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlz
cGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAi
VGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLmgiCisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2Ug
SW5zcGVjdG9yOworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVy
cy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisjaW1w
b3J0IDx3dGYvUGxhdGZvcm0uaD4KKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29s
SlNPTk9iamVjdC5oPgorCisKKworCisKKworCisKKworCisKKworCisjaW1wb3J0IDxXZWJJbnNw
ZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+CisKKyMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVy
bmFsLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8d3RmL1Bs
YXRmb3JtLmg+CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3Rv
Y29sSlNPTk9iamVjdFByaXZhdGUuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRh
YmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwor
CisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHZlcnNpb24uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaW1wb3J0IDx3dGYvUGxhdGZvcm0uaD4KKworI2ltcG9ydCAiVGVzdFBy
b3RvY29sLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNp
b25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpD
RW51bVR5cGU+CitPcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25z
dCBTdHJpbmcmIHZhbHVlKTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKworIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIHZlcnNpb24uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKworI2ltcG9y
dCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCisj
aW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorCit1
c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisKKworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lvbi5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRl
c3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucy5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZh
dGUuaD4KKyNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVl
cy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisKKyMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1k
b21haW4tZGVidWdnYWJsZVR5cGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21h
aW4tZGVidWdnYWJsZVR5cGUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMC4uZDZkZjllNGJkOWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1jb21tYW5kLXRhcmdldFR5cGUtbWF0
Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KQEAgLTAsMCArMSw5IEBACitbCit7Cisg
ICAgImRvbWFpbiI6ICJEb21haW4iLAorICAgICJkZWJ1Z2dhYmxlVHlwZXMiOiBbImphdmFzY3Jp
cHQiXSwKKyAgICAidGFyZ2V0VHlwZXMiOiBbIndvcmtlciJdLAorICAgICJjb21tYW5kcyI6IFt7
Im5hbWUiOiAiQ29tbWFuZCJ9XSwKKyAgICAiZXZlbnRzIjogW3sibmFtZSI6ICJFdmVudCJ9XQor
fQorXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2ZhaWwtb24tY29tbWFuZC10YXJnZXRUeXBlcy10eXBlLmpzb24gYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1jb21tYW5kLXRhcmdl
dFR5cGVzLXR5cGUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u
NjQwNTlmODRiY2YKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1jb21tYW5kLXRhcmdldFR5cGVzLXR5cGUuanNv
bgpAQCAtMCwwICsxLDkgQEAKK3sKKyAgICAiZG9tYWluIjogIkRvbWFpbiIsCisgICAgImNvbW1h
bmRzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJQYWdlT25seSIsCisgICAg
ICAgICAgICAidGFyZ2V0VHlwZXMiOiAicGFnZWUiCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFp
bC1vbi1jb21tYW5kLXRhcmdldFR5cGVzLXZhbHVlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1jb21tYW5kLXRhcmdldFR5cGVzLXZh
bHVlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjUwMjA0NDcy
ZWM4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2ZhaWwtb24tY29tbWFuZC10YXJnZXRUeXBlcy12YWx1ZS5qc29uCkBAIC0w
LDAgKzEsOSBAQAoreworICAgICJkb21haW4iOiAiRG9tYWluIiwKKyAgICAiY29tbWFuZHMiOiBb
CisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIlBhZ2VPbmx5IiwKKyAgICAgICAgICAg
ICJ0YXJnZXRUeXBlcyI6IFsicGFnZWUiXQorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24t
ZG9tYWluLWRlYnVnZ2FibGVUeXBlcy10eXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kb21haW4tZGVidWdnYWJsZVR5cGVzLXR5
cGUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOTc0OGY0MjM0
NzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZmFpbC1vbi1kb21haW4tZGVidWdnYWJsZVR5cGVzLXR5cGUuanNvbgpAQCAt
MCwwICsxLDkgQEAKK3sKKyAgICAiZG9tYWluIjogIldlYk9ubHkiLAorICAgICJkZWJ1Z2dhYmxl
VHlwZXMiOiAid2ViYiIsCisgICAgImNvbW1hbmRzIjogWworICAgICAgICB7CisgICAgICAgICAg
ICAibmFtZSI6ICJlbmFibGUiCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kb21haW4t
ZGVidWdnYWJsZVR5cGVzLXZhbHVlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kb21haW4tZGVidWdnYWJsZVR5cGVzLXZhbHVlLmpz
b24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmIyNTJkZGJkODNkCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2ZhaWwtb24tZG9tYWluLWRlYnVnZ2FibGVUeXBlcy12YWx1ZS5qc29uCkBAIC0wLDAg
KzEsOSBAQAoreworICAgICJkb21haW4iOiAiV2ViT25seSIsCisgICAgImRlYnVnZ2FibGVUeXBl
cyI6IFsid2ViYiJdLAorICAgICJjb21tYW5kcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAg
Im5hbWUiOiAiZW5hYmxlIgorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZG9tYWluLXRh
cmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24gYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kb21haW4tdGFyZ2V0
VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uN2FhMDI4MDQ2NTcKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kb21h
aW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgpAQCAtMCww
ICsxLDggQEAKK1sKK3sKKyAgICAiZG9tYWluIjogIkRvbWFpbiIsCisgICAgImRlYnVnZ2FibGVU
eXBlcyI6IFsiamF2YXNjcmlwdCJdLAorICAgICJjb21tYW5kcyI6IFt7Im5hbWUiOiAiQ29tbWFu
ZCIsICJ0YXJnZXRUeXBlcyI6IFsid29ya2VyIl19XSwKKyAgICAiZXZlbnRzIjogW3sibmFtZSI6
ICJFdmVudCJ9XQorfQorXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZG9tYWluLXRhcmdldFR5cGVzLXR5cGUuanNvbiBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWRv
bWFpbi10YXJnZXRUeXBlcy10eXBlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAuLmQ4MjIyNjc0MTQ2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZG9tYWluLXRhcmdldFR5cGVz
LXR5cGUuanNvbgpAQCAtMCwwICsxLDkgQEAKK3sKKyAgICAiZG9tYWluIjogIlBhZ2VPbmx5IiwK
KyAgICAidGFyZ2V0VHlwZXMiOiAicGFnZWUiLAorICAgICJjb21tYW5kcyI6IFsKKyAgICAgICAg
eworICAgICAgICAgICAgIm5hbWUiOiAiZW5hYmxlIgorICAgICAgICB9CisgICAgXQorfQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2Zh
aWwtb24tZG9tYWluLXRhcmdldFR5cGVzLXZhbHVlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZXMtdmFs
dWUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZTdiMTBkN2Yx
NTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZXMtdmFsdWUuanNvbgpAQCAtMCww
ICsxLDkgQEAKK3sKKyAgICAiZG9tYWluIjogIlBhZ2VPbmx5IiwKKyAgICAidGFyZ2V0VHlwZXMi
OiBbInBhZ2VlIl0sCisgICAgImNvbW1hbmRzIjogWworICAgICAgICB7CisgICAgICAgICAgICAi
bmFtZSI6ICJlbmFibGUiCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kdXBsaWNhdGUt
Y29tbWFuZC1jYWxsLXBhcmFtZXRlci1uYW1lcy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZHVwbGljYXRlLWNvbW1hbmQtY2FsbC1w
YXJhbWV0ZXItbmFtZXMuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MC4uYmFiNzZjYTYyNzkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1jYWxsLXBh
cmFtZXRlci1uYW1lcy5qc29uCkBAIC0wLDAgKzEsMTYgQEAKK3sKKyAgICAiZG9tYWluIjogIk92
ZXJsYXkiLAorICAgICJjb21tYW5kcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUi
OiAicHJvY2Vzc1BvaW50cyIsCisgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInBvaW50IiwgInR5cGUiOiAibnVtYmVyIiB9LAorICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAicG9pbnQiLCAidHlwZSI6ICJudW1iZXIiIH0KKyAgICAgICAgICAg
IF0sCisgICAgICAgICAgICAicmV0dXJucyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjog
InJlc3VsdDEiLCAidHlwZSI6ICJzdHJpbmciIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJyZXN1bHQyIiwgInR5cGUiOiAic3RyaW5nIiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0K
KyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1yZXR1cm4tcGFyYW1ldGVyLW5h
bWVzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1yZXR1cm4tcGFyYW1ldGVyLW5hbWVzLmpzb24KbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmM4YmIxNWMwNGI2Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2ZhaWwtb24tZHVwbGljYXRlLWNvbW1hbmQtcmV0dXJuLXBhcmFtZXRlci1uYW1lcy5qc29uCkBA
IC0wLDAgKzEsMTYgQEAKK3sKKyAgICAiZG9tYWluIjogIk92ZXJsYXkiLAorICAgICJjb21tYW5k
cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAicHJvY2Vzc1BvaW50cyIsCisg
ICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBv
aW50MSIsICJ0eXBlIjogIm51bWJlciIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBv
aW50MiIsICJ0eXBlIjogIm51bWJlciIgfQorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJy
ZXR1cm5zIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicmVzdWx0IiwgInR5cGUiOiAi
c3RyaW5nIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicmVzdWx0IiwgInR5cGUiOiAi
c3RyaW5nIiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1k
dXBsaWNhdGUtZXZlbnQtcGFyYW1ldGVyLW5hbWVzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kdXBsaWNhdGUtZXZlbnQtcGFyYW1l
dGVyLW5hbWVzLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmQz
ZDNiM2NjNjQyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZHVwbGljYXRlLWV2ZW50LXBhcmFtZXRlci1uYW1l
cy5qc29uCkBAIC0wLDAgKzEsMTIgQEAKK3sKKyAgICAiZG9tYWluIjogIk92ZXJsYXkiLAorICAg
ICJldmVudHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogInByb2Nlc3NlZFBv
aW50cyIsCisgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAgICB7ICJu
YW1lIjogInBvaW50IiwgInR5cGUiOiAibnVtYmVyIiB9LAorICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAicG9pbnQiLCAidHlwZSI6ICJudW1iZXIiIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAg
fQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLWRlY2xhcmF0aW9ucy5qc29uIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZHVw
bGljYXRlLXR5cGUtZGVjbGFyYXRpb25zLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAuLjcwMmZjNmEzMjcwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZHVwbGljYXRlLXR5cGUt
ZGVjbGFyYXRpb25zLmpzb24KQEAgLTAsMCArMSwxNSBAQAoreworICAgICJkb21haW4iOiAiUnVu
dGltZSIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiUmVt
b3RlT2JqZWN0SWQiLAorICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAg
ICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIuIgorICAgICAgICB9LAor
ICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiUmVtb3RlT2JqZWN0SWQiLAorICAgICAgICAg
ICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUg
b2JqZWN0IGlkZW50aWZpZXIuIgorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZHVwbGlj
YXRlLXR5cGUtbWVtYmVyLW5hbWVzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1tZW1iZXItbmFtZXMuanNv
bgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYWViYWNlZThiMjMKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1tZW1iZXItbmFtZXMuanNvbgpAQCAtMCwwICsx
LDE1IEBACitbCit7CisgICAgImRvbWFpbiI6ICJPdmVybGF5VHlwZXMiLAorICAgICJ0eXBlcyI6
IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlBvaW50IiwKKyAgICAgICAgICAgICJ0
eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKKyAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogIngiLCAidHlwZSI6ICJpbnRlZ2VyIiB9LAorICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAieCIsICJ0eXBlIjogImludGVnZXIiIH0KKyAgICAgICAgICAgIF0KKyAgICAg
ICAgfQorICAgIF0KK30KK10KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWVudW0td2l0aC1uby12YWx1ZXMuanNvbiBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWVudW0t
d2l0aC1uby12YWx1ZXMuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MC4uMjMyYTdjMzI0OWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1lbnVtLXdpdGgtbm8tdmFsdWVzLmpzb24K
QEAgLTAsMCArMSwxMCBAQAoreworICAgICJkb21haW4iOiAiRGF0YWJhc2UiLAorICAgICJ0eXBl
cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlByaW1hcnlDb2xvcnMiLAorICAg
ICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICJlbnVtIjogW10KKyAgICAg
ICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWlu
LWRlYnVnZ2FibGVUeXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZmFpbC1vbi1ldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1
Z2dhYmxlVHlwZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45
MTMyY2UwODgyOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9t
YWluLWRlYnVnZ2FibGVUeXBlLmpzb24KQEAgLTAsMCArMSw4IEBACitbCit7CisgICAgImRvbWFp
biI6ICJEb21haW4iLAorICAgICJkZWJ1Z2dhYmxlVHlwZXMiOiBbImphdmFzY3JpcHQiXSwKKyAg
ICAiY29tbWFuZHMiOiBbeyJuYW1lIjogIkNvbW1hbmQifV0sCisgICAgImV2ZW50cyI6IFt7Im5h
bWUiOiAiRXZlbnQiLCAidGFyZ2V0VHlwZXMiOiBbIndvcmtlciJdfV0KK30KK10KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9u
LWV2ZW50LXRhcmdldFR5cGVzLXR5cGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGVzLXR5cGUuanNvbgpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZTU0ZWQxZjVjNmIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZmFpbC1vbi1ldmVudC10YXJnZXRUeXBlcy10eXBlLmpzb24KQEAgLTAsMCArMSw5IEBACit7
CisgICAgImRvbWFpbiI6ICJEb21haW4iLAorICAgICJldmVudHMiOiBbCisgICAgICAgIHsKKyAg
ICAgICAgICAgICJuYW1lIjogIlBhZ2VPbmx5IiwKKyAgICAgICAgICAgICJ0YXJnZXRUeXBlcyI6
ICJwYWdlZSIKKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGVz
LXZhbHVlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZmFpbC1vbi1ldmVudC10YXJnZXRUeXBlcy12YWx1ZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41ODg0YmZkN2E2YgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWV2ZW50
LXRhcmdldFR5cGVzLXZhbHVlLmpzb24KQEAgLTAsMCArMSw5IEBACit7CisgICAgImRvbWFpbiI6
ICJEb21haW4iLAorICAgICJldmVudHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1l
IjogIlBhZ2VPbmx5IiwKKyAgICAgICAgICAgICJ0YXJnZXRUeXBlcyI6IFsicGFnZWUiXQorICAg
ICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tbnVtYmVyLXR5cGVkLW9wdGlvbmFsLXBhcmFtZXRl
ci1mbGFnLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbgpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNzMwOGRiOTkyZDYKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbgpAQCAtMCww
ICsxLDE4IEBACit7CisgICAgImRvbWFpbiI6ICJEYXRhYmFzZSIsCisgICAgInR5cGVzIjogWwor
ICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiRGF0YWJhc2VJZCIsCisgICAgICAgICAgICAi
dHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBpZGVu
dGlmaWVyIG9mIERhdGFiYXNlIG9iamVjdC4iCisgICAgICAgIH0KKyAgICBdLAorICAgICJldmVu
dHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImRpZEV4ZWN1dGVPcHRpb25h
bFBhcmFtZXRlcnMiLAorICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6
IDAgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tbnVtYmVy
LXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtdHlw
ZS1tZW1iZXIuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYWZl
YTU1NWVjNGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1i
ZXIuanNvbgpAQCAtMCwwICsxLDE2IEBACitbCit7CisgICAgImRvbWFpbiI6ICJEYXRhYmFzZSIs
CisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiRXJyb3IiLAor
ICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6
ICJEYXRhYmFzZSBlcnJvci4iLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJtZXNzYWdlIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0
aW9uIjogIkVycm9yIG1lc3NhZ2UuIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29k
ZSIsICJ0eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgY29kZS4iLCAib3B0
aW9uYWwiOiAwIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0KK30KK10KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWls
LW9uLXN0cmluZy10eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29uIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tc3RyaW5nLXR5cGVk
LW9wdGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAuLjQwMTJjNzliNmIzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9w
dGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24KQEAgLTAsMCArMSwxOCBAQAoreworICAgICJkb21h
aW4iOiAiRGF0YWJhc2UiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAg
ImlkIjogIkRhdGFiYXNlSWQiLAorICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAg
ICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgaWRlbnRpZmllciBvZiBEYXRhYmFzZSBvYmpl
Y3QuIgorICAgICAgICB9CisgICAgXSwKKyAgICAiZXZlbnRzIjogWworICAgICAgICB7CisgICAg
ICAgICAgICAibmFtZSI6ICJkaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzIiwKKyAgICAgICAg
ICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFt
ZXMiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiAidHJ1ZSIgfQorICAgICAgICAgICAg
XQorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXR5
cGUtbWVtYmVyLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZmFpbC1vbi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNvbgpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uY2EzZWYyOGE4ZjgKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZmFpbC1vbi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNvbgpAQCAtMCwwICsx
LDE2IEBACitbCit7CisgICAgImRvbWFpbiI6ICJEYXRhYmFzZSIsCisgICAgInR5cGVzIjogWwor
ICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiRXJyb3IiLAorICAgICAgICAgICAgInR5cGUi
OiAib2JqZWN0IiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJEYXRhYmFzZSBlcnJvci4i
LAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJtZXNzYWdlIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIG1lc3Nh
Z2UuIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29kZSIsICJ0eXBlIjogImludGVn
ZXIiLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgY29kZS4iLCAib3B0aW9uYWwiOiAiZmFsc2UiIH0K
KyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0KK30KK10KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXR5cGUtZGVj
bGFyYXRpb24tdXNpbmctdHlwZS1yZWZlcmVuY2UuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXR5cGUtZGVjbGFyYXRpb24tdXNpbmct
dHlwZS1yZWZlcmVuY2UuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MC4uMTliNzU5MGNjYzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi10eXBlLWRlY2xhcmF0aW9uLXVzaW5nLXR5
cGUtcmVmZXJlbmNlLmpzb24KQEAgLTAsMCArMSwxMyBAQAorWworeworICAgICJkb21haW4iOiAi
UnVudGltZSIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAi
UmVtb3RlT2JqZWN0SWQiLAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAg
ICAgICIkcmVmIjogIlNvbWVUeXBlIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlx
dWUgb2JqZWN0IGlkZW50aWZpZXIuIgorICAgICAgICB9CisgICAgXQorfQorXQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24t
dHlwZS1yZWZlcmVuY2UtYXMtcHJpbWl0aXZlLXR5cGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXR5cGUtcmVmZXJlbmNlLWFzLXBy
aW1pdGl2ZS10eXBlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu
LjhjODNiYmZjZTQxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdHlwZS1yZWZlcmVuY2UtYXMtcHJpbWl0aXZl
LXR5cGUuanNvbgpAQCAtMCwwICsxLDE4IEBACit7CisgICAgImRvbWFpbiI6ICJEYXRhYmFzZSIs
CisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiRGF0YWJhc2VJ
ZCIsCisgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgImRlc2NyaXB0
aW9uIjogIlVuaXF1ZSBpZGVudGlmaWVyIG9mIERhdGFiYXNlIG9iamVjdC4iCisgICAgICAgIH0K
KyAgICBdLAorICAgICJldmVudHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjog
ImRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMiLAorICAgICAgICAgICAgInBhcmFtZXRlcnMi
OiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogIkRh
dGFiYXNlSWQiIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9u
LXR5cGUtd2l0aC1sb3dlcmNhc2UtbmFtZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdHlwZS13aXRoLWxvd2VyY2FzZS1uYW1lLmpz
b24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjUzMTkwMWU0YTlhCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2ZhaWwtb24tdHlwZS13aXRoLWxvd2VyY2FzZS1uYW1lLmpzb24KQEAgLTAsMCArMSwx
MCBAQAoreworICAgICJkb21haW4iOiAiRGF0YWJhc2UiLAorICAgICJ0eXBlcyI6IFsKKyAgICAg
ICAgeworICAgICAgICAgICAgImlkIjogImRhdGFiYXNlSWQiLAorICAgICAgICAgICAgInR5cGUi
OiAiaW50ZWdlciIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIGlkZW50aWZp
ZXIgb2YgRGF0YWJhc2Ugb2JqZWN0LiIKKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXVu
a25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1kZWNsYXJhdGlvbi5qc29uIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdW5rbm93bi10eXBl
LXJlZmVyZW5jZS1pbi10eXBlLWRlY2xhcmF0aW9uLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAuLmQ2ODg3YTI3NDExCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdW5rbm93bi10
eXBlLXJlZmVyZW5jZS1pbi10eXBlLWRlY2xhcmF0aW9uLmpzb24KQEAgLTAsMCArMSwxMiBAQAor
WworeworICAgICJkb21haW4iOiAiUnVudGltZSIsCisgICAgInR5cGVzIjogWworICAgICAgICB7
CisgICAgICAgICAgICAiaWQiOiAiUmVtb3RlT2JqZWN0SWQiLAorICAgICAgICAgICAgInR5cGUi
OiAiZHJhZ29uIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgb2JqZWN0IGlk
ZW50aWZpZXIuIgorICAgICAgICB9CisgICAgXQorfQorXQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdW5rbm93bi10eXBl
LXJlZmVyZW5jZS1pbi10eXBlLW1lbWJlci5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10
eXBlLW1lbWJlci5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5i
ODE3ZGI1MDQ0ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlw
ZS1tZW1iZXIuanNvbgpAQCAtMCwwICsxLDE1IEBACitbCit7CisgICAgImRvbWFpbiI6ICJGYW50
YXN5IiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJEcmFn
b25FZ2ciLAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAgICJkZXNj
cmlwdGlvbiI6ICJBIGRyYWdvbiBlZ2cuIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwor
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sb3IiLCAiJHJlZiI6ICJDb2xvciIgfQorICAg
ICAgICAgICAgXQorICAgICAgICB9CisgICAgXQorfQorXQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyYXRlLWRvbWFpbnMtd2l0
aC1mZWF0dXJlLWd1YXJkcy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42N2NmOGU1ODJmNgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9nZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgpAQCAtMCwwICsxLDM2
IEBACitbCit7CisgICAgImRvbWFpbiI6ICJOZXR3b3JrMSIsCisgICAgImZlYXR1cmVHdWFyZCI6
ICJQTEFURk9STShXRUJfQ09NTUFORFMpIiwKKyAgICAiY29tbWFuZHMiOiBbCisgICAgICAgIHsK
KyAgICAgICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJjZSIsCisgICAgICAgICAgICAiZGVzY3Jp
cHRpb24iOiAiTG9hZHMgYSByZXNvdXJjZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1lIG9uIHRo
ZSBpbnNwZWN0ZWQgcGFnZSB3aXRob3V0IGNyb3NzIG9yaWdpbiBjaGVja3MuIgorICAgICAgICB9
CisgICAgXQorfSwKK3sKKyAgICAiZG9tYWluIjogIk5ldHdvcmsyIiwKKyAgICAiZmVhdHVyZUd1
YXJkIjogIlBMQVRGT1JNKFdFQl9UWVBFUykiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgewor
ICAgICAgICAgICAgImlkIjogIk5ldHdvcmtFcnJvciIsCisgICAgICAgICAgICAidHlwZSI6ICJv
YmplY3QiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJtZXNzYWdlIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIkVycm9y
IG1lc3NhZ2UuIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29kZSIsICJ0eXBlIjog
ImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgY29kZS4iIH0KKyAgICAgICAgICAgIF0K
KyAgICAgICAgfQorICAgIF0KK30sCit7CisgICAgImRvbWFpbiI6ICJOZXR3b3JrMyIsCisgICAg
ImZlYXR1cmVHdWFyZCI6ICJQTEFURk9STShXRUJfRVZFTlRTKSIsCisgICAgImV2ZW50cyI6IFsK
KyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAicmVzb3VyY2VMb2FkZWQiLAorICAgICAg
ICAgICAgImRlc2NyaXB0aW9uIjogIkEgcmVzb3VyY2Ugd2FzIGxvYWRlZC4iCisgICAgICAgIH0K
KyAgICBdCit9CitdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9jb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWlu
LWRlYnVnZ2FibGVUeXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZ2VuZXJpYy9jb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRl
YnVnZ2FibGVUeXBlLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyN2FiNjVi
OTJhLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZ2VuZXJpYy9jb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRl
YnVnZ2FibGVUeXBlLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLVsKLXsKLSAg
ICAiZG9tYWluIjogIkRvbWFpbiIsCi0gICAgImRlYnVnZ2FibGVUeXBlcyI6IFsicGFnZSJdLAot
ICAgICJ0YXJnZXRUeXBlcyI6IFsicGFnZSIsICJ3b3JrZXIiXSwKLSAgICAiY29tbWFuZHMiOiBb
eyJuYW1lIjogIkNvbW1hbmQifV0sCi0gICAgImV2ZW50cyI6IFt7Im5hbWUiOiAiRXZlbnQifV0K
LX0KLV0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL2NvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24gYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9jb21tYW5k
cy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAxMTI2MmU4ODlmYS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1
dGUuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDEwOSArMCwwIEBACi17Ci0gICAgImRvbWFpbiI6
ICJEYXRhYmFzZSIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQi
OiAiRGF0YWJhc2VJZCIsCi0gICAgICAgICAgICAidHlwZSI6ICJpbnRlZ2VyIiwKLSAgICAgICAg
ICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgaWRlbnRpZmllciBvZiBEYXRhYmFzZSBvYmplY3Qu
IgotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiUHJpbWFyeUNvbG9y
cyIsCi0gICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAotICAgICAgICAgICAgImVudW0iOiBb
InJlZCIsICJncmVlbiIsICJibHVlIl0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAg
ICAgImlkIjogIkNvbG9yTGlzdCIsCi0gICAgICAgICAgICAidHlwZSI6ICJhcnJheSIsCi0gICAg
ICAgICAgICAiaXRlbXMiOiB7ICIkcmVmIjogIlByaW1hcnlDb2xvcnMiIH0KLSAgICAgICAgfSwK
LSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIkVycm9yIiwKLSAgICAgICAgICAgICJ0eXBl
IjogIm9iamVjdCIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRGF0YWJhc2UgZXJyb3Iu
IiwKLSAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAibWVzc2FnZSIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBtZXNz
YWdlLiIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvZGUiLCAidHlwZSI6ICJpbnRl
Z2VyIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIGNvZGUuIiB9Ci0gICAgICAgICAgICBdCi0gICAg
ICAgIH0KLSAgICBdLAotICAgICJjb21tYW5kcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAg
Im5hbWUiOiAiZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyIsCi0gICAgICAgICAg
ICAicGFyYW1ldGVycyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRhdGFiYXNlSWQi
LCAiJHJlZiI6ICJEYXRhYmFzZUlkIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicXVl
cnkiLCAidHlwZSI6ICJzdHJpbmciIH0KLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAicmV0
dXJucyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUi
OiAiYXJyYXkiLCAib3B0aW9uYWwiOiB0cnVlLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIg
fSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmci
LCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3Rh
bXAiLCAidHlwZSI6ICJudW1iZXIiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0cnVl
IH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55Iiwg
Im9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJ
ZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVycm9yIiwgIm9wdGlvbmFsIjog
dHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6
ICJQcmltYXJ5Q29sb3JzIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwgIiRyZWYiOiAiQ29sb3JMaXN0IiwgIm9wdGlvbmFs
IjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBl
IjogInN0cmluZyIsICJlbnVtIjogWyJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93IiwgImJsYWNr
Il0sICJvcHRpb25hbCI6IHRydWUgfQotICAgICAgICAgICAgXQotICAgICAgICB9LAotICAgICAg
ICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZh
bHVlcyIsCi0gICAgICAgICAgICAiYXN5bmMiOiB0cnVlLAotICAgICAgICAgICAgInBhcmFtZXRl
cnMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAi
RGF0YWJhc2VJZCIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInF1ZXJ5IiwgInR5cGUi
OiAic3RyaW5nIiB9Ci0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInJldHVybnMiOiBbCi0g
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5Iiwg
Im9wdGlvbmFsIjogdHJ1ZSwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwKLSAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFs
IjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUi
OiAibnVtYmVyIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIsICJvcHRpb25hbCI6
IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRhdGFiYXNlSWQiLCAiJHJlZiI6
ICJEYXRhYmFzZUlkIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAic3FsRXJyb3IiLCAiJHJlZiI6ICJFcnJvciIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogInNjcmVlbkNvbG9yIiwgIiRyZWYiOiAiUHJpbWFyeUNv
bG9ycyIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImFs
dGVybmF0ZUNvbG9ycyIsICIkcmVmIjogIkNvbG9yTGlzdCIsICJvcHRpb25hbCI6IHRydWUgfSwK
LSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInByaW50Q29sb3IiLCAidHlwZSI6ICJzdHJpbmci
LCAiZW51bSI6IFsiY3lhbiIsICJtYWdlbnRhIiwgInllbGxvdyIsICJibGFjayJdLCAib3B0aW9u
YWwiOiB0cnVlIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAg
ICAgICAgIm5hbWUiOiAiZXhlY3V0ZVNRTFN5bmMiLAotICAgICAgICAgICAgInBhcmFtZXRlcnMi
OiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0
YWJhc2VJZCIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInF1ZXJ5IiwgInR5cGUiOiAi
c3RyaW5nIiB9Ci0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInJldHVybnMiOiBbCi0gICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIml0
ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjog
Im5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
dGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjog
ImRhdGFiYXNlSWQiLCAiJHJlZiI6ICJEYXRhYmFzZUlkIiB9LAotICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAic3FsRXJyb3IiLCAiJHJlZiI6ICJFcnJvciIgfSwKLSAgICAgICAgICAgICAgICB7
ICJuYW1lIjogImFsdGVybmF0ZUNvbG9ycyIsICIkcmVmIjogIkNvbG9yTGlzdCIgfSwKLSAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogInNjcmVlbkNvbG9yIiwgIiRyZWYiOiAiUHJpbWFyeUNvbG9y
cyIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInByaW50Q29sb3IiLCAidHlwZSI6ICJz
dHJpbmciLCAiZW51bSI6IFsiY3lhbiIsICJtYWdlbnRhIiwgInllbGxvdyIsICJibGFjayJdIH0K
LSAgICAgICAgICAgIF0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUi
OiAiZXhlY3V0ZVNRTEFzeW5jIiwKLSAgICAgICAgICAgICJhc3luYyI6IHRydWUsCi0gICAgICAg
ICAgICAicGFyYW1ldGVycyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRhdGFiYXNl
SWQiLCAiJHJlZiI6ICJEYXRhYmFzZUlkIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
cXVlcnkiLCAidHlwZSI6ICJzdHJpbmciIH0KLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAi
cmV0dXJucyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5
cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAotICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciIH0sCi0gICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiIH0sCi0gICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiIH0sCi0gICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiB9LAotICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiIH0sCi0g
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVycm9yIiB9LAot
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6ICJQcmltYXJ5
Q29sb3JzIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwg
IiRyZWYiOiAiQ29sb3JMaXN0IiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJpbnRD
b2xvciIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJjeWFuIiwgIm1hZ2VudGEiLCAieWVs
bG93IiwgImJsYWNrIl0gfQotICAgICAgICAgICAgXQotICAgICAgICB9Ci0gICAgXQotfQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24g
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9j
b21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzYxZDU3ZDgyMGQuLjAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2NvbW1h
bmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCisrKyAvZGV2L251
bGwKQEAgLTEsODUgKzAsMCBAQAotewotICAgICJkb21haW4iOiAiRGF0YWJhc2UiLAotICAgICJ0
eXBlcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIkRhdGFiYXNlSWQiLAotICAg
ICAgICAgICAgInR5cGUiOiAiaW50ZWdlciIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAi
VW5pcXVlIGlkZW50aWZpZXIgb2YgRGF0YWJhc2Ugb2JqZWN0LiIKLSAgICAgICAgfSwKLSAgICAg
ICAgewotICAgICAgICAgICAgImlkIjogIlByaW1hcnlDb2xvcnMiLAotICAgICAgICAgICAgInR5
cGUiOiAic3RyaW5nIiwKLSAgICAgICAgICAgICJlbnVtIjogWyJyZWQiLCAiZ3JlZW4iLCAiYmx1
ZSJdCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJDb2xvckxpc3Qi
LAotICAgICAgICAgICAgInR5cGUiOiAiYXJyYXkiLAotICAgICAgICAgICAgIml0ZW1zIjogeyAi
JHJlZiI6ICJQcmltYXJ5Q29sb3JzIiB9Ci0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAg
ICAgICJpZCI6ICJFcnJvciIsCi0gICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAotICAgICAg
ICAgICAgImRlc2NyaXB0aW9uIjogIkRhdGFiYXNlIGVycm9yLiIsCi0gICAgICAgICAgICAicHJv
cGVydGllcyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm1lc3NhZ2UiLCAidHlwZSI6
ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgbWVzc2FnZS4iIH0sCi0gICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJjb2RlIiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6
ICJFcnJvciBjb2RlLiIgfQotICAgICAgICAgICAgXQotICAgICAgICB9Ci0gICAgXSwKLSAgICAi
Y29tbWFuZHMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImV4ZWN1dGVBbGxP
cHRpb25hbFBhcmFtZXRlcnMiLAotICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCi0gICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIm9wdGlv
bmFsIjogdHJ1ZSwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwKLSAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1
ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVt
YmVyIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFs
dWVzIiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIsICJvcHRpb25hbCI6IHRydWUg
fSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRhdGFiYXNlSWQiLCAiJHJlZiI6ICJEYXRh
YmFzZUlkIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
c3FsRXJyb3IiLCAiJHJlZiI6ICJFcnJvciIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInNjcmVlbkNvbG9yIiwgIiRyZWYiOiAiUHJpbWFyeUNvbG9ycyIs
ICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImFsdGVybmF0
ZUNvbG9ycyIsICIkcmVmIjogIkNvbG9yTGlzdCIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogInByaW50Q29sb3IiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51
bSI6IFsiY3lhbiIsICJtYWdlbnRhIiwgInllbGxvdyIsICJibGFjayJdLCAib3B0aW9uYWwiOiB0
cnVlIH0KLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAicmV0dXJucyI6IFsKLSAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAib3B0aW9u
YWwiOiB0cnVlLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAotICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVl
IH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1i
ZXIiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1
ZXMiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiwgIm9wdGlvbmFsIjogdHJ1ZSB9
LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFi
YXNlSWQiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJz
cWxFcnJvciIsICIkcmVmIjogIkVycm9yIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6ICJQcmltYXJ5Q29sb3JzIiwg
Im9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYWx0ZXJuYXRl
Q29sb3JzIiwgIiRyZWYiOiAiQ29sb3JMaXN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmluZyIsICJlbnVt
IjogWyJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93IiwgImJsYWNrIl0sICJvcHRpb25hbCI6IHRy
dWUgfQotICAgICAgICAgICAgXQotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAi
bmFtZSI6ICJleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMiLAotICAgICAgICAgICAgInBhcmFt
ZXRlcnMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBl
IjogImFycmF5IiwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwKLSAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiB9LAotICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiB9LAotICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiB9LAotICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIgfSwKLSAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogImRhdGFiYXNlSWQiLCAiJHJlZiI6ICJEYXRhYmFzZUlkIiB9LAotICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAic3FsRXJyb3IiLCAiJHJlZiI6ICJFcnJvciIgfSwKLSAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogInNjcmVlbkNvbG9yIiwgIiRyZWYiOiAiUHJpbWFyeUNv
bG9ycyIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImFsdGVybmF0ZUNvbG9ycyIsICIk
cmVmIjogIkNvbG9yTGlzdCIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInByaW50Q29s
b3IiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsiY3lhbiIsICJtYWdlbnRhIiwgInllbGxv
dyIsICJibGFjayJdIH0KLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAicmV0dXJucyI6IFsK
LSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXki
LCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAotICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciIH0sCi0gICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiIH0sCi0gICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiIH0sCi0gICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiB9LAotICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiIH0sCi0gICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVycm9yIiB9LAotICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6ICJQcmltYXJ5Q29sb3JzIiB9LAot
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwgIiRyZWYiOiAiQ29s
b3JMaXN0IiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBl
IjogInN0cmluZyIsICJlbnVtIjogWyJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93IiwgImJsYWNr
Il0gfQotICAgICAgICAgICAgXQotICAgICAgICB9Ci0gICAgXQotfQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZGVmaW5p
dGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3Jt
Lmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxN2YxMzVlZTVhLi4wMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJpYy9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCisrKyAvZGV2L251bGwK
QEAgLTEsMjggKzAsMCBAQAotewotICAgICJkb21haW4iOiAiTmV0d29yayIsCi0gICAgInR5cGVz
IjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiTmV0d29ya0Vycm9yIiwKLSAgICAg
ICAgICAgICJ0eXBlIjogIm9iamVjdCIsCi0gICAgICAgICAgICAicGxhdGZvcm0iOiAibWFjb3Mi
LAotICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJtZXNzYWdlIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIG1lc3Nh
Z2UuIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29kZSIsICJ0eXBlIjogImludGVn
ZXIiLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgY29kZS4iIH0KLSAgICAgICAgICAgIF0KLSAgICAg
ICAgfQotICAgIF0sCi0gICAgImNvbW1hbmRzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAi
bmFtZSI6ICJsb2FkUmVzb3VyY2UiLAotICAgICAgICAgICAgInBsYXRmb3JtIjogIm1hY29zIiwK
LSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBhIHJlc291cmNlIGluIHRoZSBjb250
ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGluc3BlY3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3JpZ2lu
IGNoZWNrcy4iCi0gICAgICAgIH0KLSAgICBdLAotICAgICJldmVudHMiOiBbCi0gICAgICAgIHsK
LSAgICAgICAgICAgICJuYW1lIjogInJlc291cmNlTG9hZGVkIiwKLSAgICAgICAgICAgICJwbGF0
Zm9ybSI6ICJtYWNvcyIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQSByZXNvdXJjZSB3
YXMgbG9hZGVkLiIKLSAgICAgICAgfQotICAgIF0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2RvbWFpbi1kZWJ1Z2dh
YmxlVHlwZXMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9nZW5lcmljL2RvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbgpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMWZlYjBjOWEyN2UuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2RvbWFpbi1kZWJ1Z2dh
YmxlVHlwZXMuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotWwotewotICAgICJk
b21haW4iOiAiRG9tYWluIiwKLSAgICAiZGVidWdnYWJsZVR5cGVzIjogWyJ3ZWItcGFnZSJdLAot
ICAgICJjb21tYW5kcyI6IFt7Im5hbWUiOiAiQ29tbWFuZCJ9XSwKLSAgICAiZXZlbnRzIjogW3si
bmFtZSI6ICJFdmVudCJ9XQotfQotXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hp
bmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9kb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1k
b21haW4tZGVidWdnYWJsZVR5cGUuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ZjYyZmIzOGJhNzguLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2RvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRv
bWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1b
Ci17Ci0gICAgImRvbWFpbiI6ICJEb21haW4iLAotICAgICJkZWJ1Z2dhYmxlVHlwZXMiOiBbInBh
Z2UiXSwKLSAgICAiY29tbWFuZHMiOiBbeyJuYW1lIjogIkNvbW1hbmQiLCAidGFyZ2V0VHlwZXMi
OiBbInBhZ2UiLCAid29ya2VyIl19XSwKLSAgICAiZXZlbnRzIjogW3sibmFtZSI6ICJFdmVudCJ9
XQotfQotXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2dlbmVyaWMvZG9tYWluLXRhcmdldFR5cGVzLmpzb24gYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9kb21haW4tdGFyZ2V0VHlw
ZXMuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmE2ZTQwZDYwYWQuLjAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9nZW5lcmljL2RvbWFpbi10YXJnZXRUeXBlcy5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsOCAr
MCwwIEBACi1bCi17Ci0gICAgImRvbWFpbiI6ICJEb21haW4iLAotICAgICJ0YXJnZXRUeXBlcyI6
IFsicGFnZSJdLAotICAgICJjb21tYW5kcyI6IFt7Im5hbWUiOiAiQ29tbWFuZCIsICJ0YXJnZXRU
eXBlcyI6IFsicGFnZSJdfV0sCi0gICAgImV2ZW50cyI6IFt7Im5hbWUiOiAiRXZlbnQiLCAidGFy
Z2V0VHlwZXMiOiBbInBhZ2UiXX1dCi19Ci1dCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9kb21haW5zLXdpdGgtdmFyeWlu
Zy1jb21tYW5kLXNpemVzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZ2VuZXJpYy9kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpz
b24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0YThlY2IxNzZkLi4wMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2Vu
ZXJpYy9kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KKysrIC9kZXYvbnVs
bApAQCAtMSw1NCArMCwwIEBACi1bCi17Ci0gICAgImRvbWFpbiI6ICJOZXR3b3JrMSIsCi0gICAg
ImNvbW1hbmRzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJsb2FkUmVzb3Vy
Y2UxIiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBhIHJlc291cmNlIGluIHRo
ZSBjb250ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGluc3BlY3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mg
b3JpZ2luIGNoZWNrcy4iCi0gICAgICAgIH0KLSAgICBdCi19LAotewotICAgICJkb21haW4iOiAi
TmV0d29yazIiLAotICAgICJ0eXBlcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjog
IkxvYWRlcklkIiwKLSAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCi0gICAgICAgICAgICAi
ZGVzY3JpcHRpb24iOiAiVW5pcXVlIGxvYWRlciBpZGVudGlmaWVyLiIKLSAgICAgICAgfQotICAg
IF0KLX0sCi17Ci0gICAgImRvbWFpbiI6ICJOZXR3b3JrMyIsCi0gICAgImNvbW1hbmRzIjogWwot
ICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJsb2FkUmVzb3VyY2UxIiwKLSAgICAgICAg
ICAgICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBhIHJlc291cmNlIGluIHRoZSBjb250ZXh0IG9mIGEg
ZnJhbWUgb24gdGhlIGluc3BlY3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNoZWNrcy4i
Ci0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJj
ZTIiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhl
IGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBv
cmlnaW4gY2hlY2tzLiIKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUi
OiAibG9hZFJlc291cmNlMyIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9hZHMgYSBy
ZXNvdXJjZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFnZSB3
aXRob3V0IGNyb3NzIG9yaWdpbiBjaGVja3MuIgotICAgICAgICB9LAotICAgICAgICB7Ci0gICAg
ICAgICAgICAibmFtZSI6ICJsb2FkUmVzb3VyY2U0IiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlv
biI6ICJMb2FkcyBhIHJlc291cmNlIGluIHRoZSBjb250ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGlu
c3BlY3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNoZWNrcy4iCi0gICAgICAgIH0sCi0g
ICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJjZTUiLAotICAgICAgICAg
ICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBm
cmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIK
LSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAibG9hZFJlc291cmNl
NiIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9hZHMgYSByZXNvdXJjZSBpbiB0aGUg
Y29udGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFnZSB3aXRob3V0IGNyb3NzIG9y
aWdpbiBjaGVja3MuIgotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6
ICJsb2FkUmVzb3VyY2U3IiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBhIHJl
c291cmNlIGluIHRoZSBjb250ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGluc3BlY3RlZCBwYWdlIHdp
dGhvdXQgY3Jvc3Mgb3JpZ2luIGNoZWNrcy4iCi0gICAgICAgIH0KLSAgICBdCi19Ci1dCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2Vu
ZXJpYy9lbnVtLXZhbHVlcy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZW51bS12YWx1ZXMuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggY2RhZDYxZGY3YzkuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2VudW0tdmFsdWVzLmpzb24K
KysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi17ImRvbWFpbnMiOlsKLXsKLSAgICAiZG9t
YWluIjogIlR5cGVEb21haW4iLAotICAgICJ0eXBlcyI6IFsKLSAgICAgICAgewotICAgICAgICAg
ICAgImlkIjogIlR5cGVEb21haW5FbnVtIiwKLSAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIs
Ci0gICAgICAgICAgICAiZW51bSI6IFsic2hhcmVkIiwgInJlZCIsICJncmVlbiIsICJibHVlIl0K
LSAgICAgICAgfQotICAgIF0KLX0sCi17Ci0gICAgImRvbWFpbiI6ICJDb21tYW5kRG9tYWluIiwK
LSAgICAiY29tbWFuZHMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImNvbW1h
bmRXaXRoRW51bVJldHVyblZhbHVlIiwKLSAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogW10sCi0g
ICAgICAgICAgICAicmV0dXJucyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInJldHVy
blZhbHVlIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbInNoYXJlZCIsICJjeWFuIiwgIm1h
Z2VudGEiLCAieWVsbG93Il0gfQotICAgICAgICAgICAgXQotICAgICAgICB9Ci0gICAgXQotfSwK
LXsKLSAgICAiZG9tYWluIjogIkV2ZW50RG9tYWluIiwKLSAgICAiZXZlbnRzIjogWwotICAgICAg
ICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJldmVudFdpdGhFbnVtUGFyYW1ldGVyIiwKLSAgICAg
ICAgICAgICJwYXJhbWV0ZXJzIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGFyYW1l
dGVyIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbInNoYXJlZCIsICJibGFjayIsICJ3aGl0
ZSJdIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfQotICAgIF0KLX0KLV19CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9l
dmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXZlbnQt
dGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNGRmZWQ0MWVkMjEuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V2ZW50LXRh
cmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KKysrIC9kZXYvbnVs
bApAQCAtMSw4ICswLDAgQEAKLVsKLXsKLSAgICAiZG9tYWluIjogIkRvbWFpbiIsCi0gICAgImRl
YnVnZ2FibGVUeXBlcyI6IFsicGFnZSJdLAotICAgICJjb21tYW5kcyI6IFt7Im5hbWUiOiAiQ29t
bWFuZCJ9XSwKLSAgICAiZXZlbnRzIjogW3sibmFtZSI6ICJFdmVudCIsICJ0YXJnZXRUeXBlcyI6
IFsicGFnZSIsICJ3b3JrZXIiXX1dCi19Ci1dCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9ldmVudHMtd2l0aC1vcHRpb25h
bC1wYXJhbWV0ZXJzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy9ldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhYmJmMTBiODM2Li4wMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9l
dmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw1
OSArMCwwIEBACi17Ci0gICAgImRvbWFpbiI6ICJEYXRhYmFzZSIsCi0gICAgInR5cGVzIjogWwot
ICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiRGF0YWJhc2VJZCIsCi0gICAgICAgICAgICAi
dHlwZSI6ICJzdHJpbmciLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBpZGVu
dGlmaWVyIG9mIERhdGFiYXNlIG9iamVjdC4iCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAg
ICAgICAgICJpZCI6ICJQcmltYXJ5Q29sb3JzIiwKLSAgICAgICAgICAgICJ0eXBlIjogInN0cmlu
ZyIsCi0gICAgICAgICAgICAidmFsdWVzIjogWyJyZWQiLCAiZ3JlZW4iLCAiYmx1ZSJdCi0gICAg
ICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJDb2xvckxpc3QiLAotICAgICAg
ICAgICAgInR5cGUiOiAiYXJyYXkiLAotICAgICAgICAgICAgIml0ZW1zIjogeyAiJHJlZiI6ICJQ
cmltYXJ5Q29sb3JzIiB9Ci0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6
ICJFcnJvciIsCi0gICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAotICAgICAgICAgICAgImRl
c2NyaXB0aW9uIjogIkRhdGFiYXNlIGVycm9yLiIsCi0gICAgICAgICAgICAicHJvcGVydGllcyI6
IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm1lc3NhZ2UiLCAidHlwZSI6ICJzdHJpbmci
LCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgbWVzc2FnZS4iIH0sCi0gICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJjb2RlIiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBj
b2RlLiIgfQotICAgICAgICAgICAgXQotICAgICAgICB9Ci0gICAgXSwKLSAgICAiZXZlbnRzIjog
WwotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJkaWRFeGVjdXRlT3B0aW9uYWxQYXJh
bWV0ZXJzIiwKLSAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwotICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJvcHRpb25hbCI6IHRydWUs
ICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCi0gICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIsICJvcHRp
b25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBl
IjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1l
IjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVycm9yIiwgIm9wdGlvbmFs
IjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2NyZWVuQ29sb3IiLCAiJHJl
ZiI6ICJQcmltYXJ5Q29sb3JzIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwgIiRyZWYiOiAiQ29sb3JMaXN0IiwgIm9wdGlv
bmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJpbnRDb2xvciIsICJ0
eXBlIjogInN0cmluZyIsICJ2YWx1ZXMiOiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciLCAi
YmxhY2siXSwgIm9wdGlvbmFsIjogdHJ1ZSB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0sCi0g
ICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1l
dGVycyIsCi0gICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKLSAgICAgICAgICAgICAgICB7ICJu
YW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICJ0eXBlIjog
InN0cmluZyIgfSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6
ICJzdHJpbmciIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlw
ZSI6ICJudW1iZXIiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlw
ZSI6ICJvYmplY3QiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5
cGUiOiAiYW55IiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic3FsRXJyb3IiLCAiJHJl
ZiI6ICJFcnJvciIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNjcmVlbkNvbG9yIiwg
IiRyZWYiOiAiUHJpbWFyeUNvbG9ycyIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImFs
dGVybmF0ZUNvbG9ycyIsICIkcmVmIjogIkNvbG9yTGlzdCIgfSwKLSAgICAgICAgICAgICAgICB7
ICJuYW1lIjogInByaW50Q29sb3IiLCAidHlwZSI6ICJzdHJpbmciLCAidmFsdWVzIjogWyJjeWFu
IiwgIm1hZ2VudGEiLCAieWVsbG93IiwgImJsYWNrIl0gfQotICAgICAgICAgICAgXQotICAgICAg
ICB9Ci0gICAgXQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvY29tbWFuZC10YXJnZXRUeXBlLW1hdGNo
aW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2NvbW1hbmQtdGFy
Z2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1yZXN1bHQKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzMTNmYTkxNTFlLi4wMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBl
Y3RlZC9jb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpz
b24tcmVzdWx0CisrKyAvZGV2L251bGwKQEAgLTEsMTA2MyArMCwwIEBACi0jIyMgQmVnaW4gRmls
ZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlw
ZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLS8vIERv
bWFpbgotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiRG9tYWluIiwgWyJwYWdlIiwg
IndvcmtlciJdKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJEb21haW4uQ29t
bWFuZCIsIG51bGwsIFtdLCBbXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnQoIkRv
bWFpbi5FdmVudCIsIG51bGwsIFtdKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW5E
aXNwYXRjaGVyID0gSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRpc3BhdGNoZXIuYmluZChJbnNw
ZWN0b3JCYWNrZW5kLCAiRG9tYWluIik7Ci1JbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWlu
KCJEb21haW4iLCBbInBhZ2UiXSk7Ci0jIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21t
YW5kcy5qcwotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVy
cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZC10YXJnZXRUeXBl
LW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBl
cy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
Lmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4K
LQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVyIHsKLXB1YmxpYzoKLSAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNr
ZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZN
b3ZlKGRpc3BhdGNoZXIpOyB9Ci0gICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRj
aGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQotcHJpdmF0
ZToKLSAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Ci19
OwotCi0KLWNsYXNzIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5BbHRlcm5h
dGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBDb21tYW5k
KGxvbmcgY2FsbElkKSA9IDA7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotI2Vu
ZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotIyMjIEVuZCBG
aWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9u
Y2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdHlwZWRlZiBTdHJpbmcg
RXJyb3JTdHJpbmc7Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKLWNsYXNzIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyOwotI2VuZGlmIC8vIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi1jbGFzcyBEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIgewotcHVibGljOgotICAgIHZpcnR1YWwgdm9pZCBDb21tYW5k
KEVycm9yU3RyaW5nJikgPSAwOwotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgfkRvbWFpbkJhY2tl
bmREaXNwYXRjaGVySGFuZGxlcigpOwotfTsKLQotY2xhc3MgRG9tYWluQmFja2VuZERpc3BhdGNo
ZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewotcHVibGlj
OgotICAgIHN0YXRpYyBSZWY8RG9tYWluQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5k
RGlzcGF0Y2hlciYsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIHZvaWQg
ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6
T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOwotcHJpdmF0ZToKLSAgICB2b2lkIENvbW1hbmQobG9u
ZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0jaWYgRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi1wdWJsaWM6Ci0gICAgdm9pZCBz
ZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKiBh
bHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURp
c3BhdGNoZXI7IH0KLXByaXZhdGU6Ci0gICAgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNo
ZXIqIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciB7IG51bGxwdHIgfTsKLSNlbmRpZgotcHJpdmF0ZToK
LSAgICBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYsIERvbWFpbkJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlciogbV9hZ2VudCB7IG51bGxwdHIgfTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlw
ZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1
ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCi0jaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVycy5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1Eb21haW5CYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXI6On5Eb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0K
LQotUmVmPERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6
Y3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgRG9tYWluQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBE
b21haW5CYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKLX0KLQot
RG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkRvbWFpbkJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmRE
aXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyKiBhZ2VudCkKLSAgICA6IFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmRE
aXNwYXRjaGVyKQotICAgICwgbV9hZ2VudChhZ2VudCkKLXsKLSAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oIkRvbWFpbiJfcywgdGhpcyk7Ci19Ci0K
LXZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBj
b25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQotewotICAg
IFJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7Ci0KLSAgICBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOwotICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFy
YW1zIl9zLCBwYXJhbWV0ZXJzKTsKLQotICAgIGlmIChtZXRob2QgPT0gIkNvbW1hbmQiKQotICAg
ICAgICBDb21tYW5kKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7Ci0gICAgZWxzZQot
ICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmRE
aXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uIiArIG1ldGhvZCArICInIHdhcyBu
b3QgZm91bmQiKTsKLX0KLQotdm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChs
b25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKLXsKLSNpZiBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRj
aGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+Q29tbWFuZChyZXF1ZXN0SWQp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBFcnJvclN0cmluZyBlcnJv
cjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OwotICAgIG1fYWdlbnQtPkNvbW1hbmQoZXJyb3IpOwotCi0gICAgaWYgKCFlcnJvci5sZW5ndGgo
KSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwg
V1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNw
YXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJv
ciwgV1RGTW92ZShlcnJvcikpOwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMj
IEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9u
Y2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDx3dGYvSlNP
TlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKLQotY2xhc3MgRnJvbnRlbmRSb3V0ZXI7Ci0KLWNsYXNzIERvbWFpbkZyb250
ZW5kRGlzcGF0Y2hlciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0g
ICAgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVyKEZyb250ZW5kUm91dGVyJiBmcm9udGVuZFJvdXRl
cikgOiBtX2Zyb250ZW5kUm91dGVyKGZyb250ZW5kUm91dGVyKSB7IH0KLSAgICB2b2lkIEV2ZW50
KCk7Ci1wcml2YXRlOgotICAgIEZyb250ZW5kUm91dGVyJiBtX2Zyb250ZW5kUm91dGVyOwotfTsK
LQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERp
c3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNw
cAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmQtdGFyZ2V0VHlwZS1t
YXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVz
dEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1u
YW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdm9pZCBEb21haW5Gcm9udGVuZERpc3BhdGNoZXI6OkV2
ZW50KCkKLXsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVj
dDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9t
YWluLkV2ZW50Il9zKTsKLQotICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNz
YWdlLT50b0pTT05TdHJpbmcoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0j
IyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25j
ZQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgot
I2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0K
LQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLQotCi0KLQotCi0KLX0gLy8gbmFtZXNwYWNl
IFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xPYmplY3RzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMu
Y3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZC10YXJnZXRUeXBl
LW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0KLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1uYW1l
c3BhY2UgUHJvdG9jb2wgewotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5j
cHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZC10YXJnZXRUeXBlLW1hdGNo
aW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0K
LUBwcm90b2NvbCBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyOwotCi1uYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKLQotCi1jbGFzcyBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNo
ZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIgewotICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIE9iakNJbnNwZWN0b3JEb21h
aW5CYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiBo
YW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9Ci0gICAgdm9pZCBDb21tYW5kKGxvbmcg
cmVxdWVzdElkKSBmaW5hbDsKLXByaXZhdGU6Ci0gICAgUmV0YWluUHRyPGlkPFRlc3RQcm90b2Nv
bERvbWFpbkRvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwotfTsKLQotfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJz
LmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRj
aGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90
b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJu
YWwuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbmNsdWRl
IDx3dGYvSlNPTlZhbHVlcy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdm9pZCBPYmpD
SW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9uZyByZXF1ZXN0SWQp
Ci17Ci0gICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKENv
bW1hbmRXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsKLSAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmRE
aXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uQ29tbWFuZCcgd2FzIG5vdCBmb3Vu
ZCJfcyk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0
cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9j
b2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3Ip
OwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAg
IH07Ci0KLSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBm
YWxzZSk7Ci0gICAgfTsKLQotICAgIFttX2RlbGVnYXRlIENvbW1hbmRXaXRoRXJyb3JDYWxsYmFj
azplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOwotfQotCi0K
LX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJh
Y2tlbmREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbi5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZC10YXJn
ZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0
UHJvdG9jb2wuaD4KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1A
aW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAotQHByb3BlcnR5
IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNldERvbWFpbkhhbmRsZXI6KSBpZDxUZXN0UHJv
dG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiBkb21haW5IYW5kbGVyOwotQHByb3BlcnR5IChub25h
dG9taWMsIHJlYWRvbmx5KSBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIg
KmRvbWFpbkV2ZW50RGlzcGF0Y2hlcjsKLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbENvbmZpZ3VyYXRpb24uaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbi5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmQtdGFy
Z2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25m
aWd1cmF0aW9uLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW1wb3J0
ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRD
b3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0KLXVzaW5nIG5hbWVz
cGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0
aW9uCi17Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsK
LSAgICBpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiBfZG9tYWluSGFuZGxlcjsK
LSAgICBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKl9kb21haW5FdmVu
dERpc3BhdGNoZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1
Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBb
c3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFT
U0VSVChjb250cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0
dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAgIFtfZG9tYWluSGFuZGxlciBy
ZWxlYXNlXTsKLSAgICBbX2RvbWFpbkV2ZW50RGlzcGF0Y2hlciByZWxlYXNlXTsKLSAgICBbc3Vw
ZXIgZGVhbGxvY107Ci19Ci0KLS0gKHZvaWQpc2V0RG9tYWluSGFuZGxlcjooaWQ8VGVzdFByb3Rv
Y29sRG9tYWluRG9tYWluSGFuZGxlcj4paGFuZGxlcgotewotICAgIGlmIChoYW5kbGVyID09IF9k
b21haW5IYW5kbGVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBbX2RvbWFpbkhhbmRsZXIgcmVs
ZWFzZV07Ci0gICAgX2RvbWFpbkhhbmRsZXIgPSBbaGFuZGxlciByZXRhaW5dOwotCi0gICAgYXV0
byBhbHRlcm5hdGVEaXNwYXRjaGVyID0gbWFrZVVuaXF1ZTxPYmpDSW5zcGVjdG9yRG9tYWluQmFj
a2VuZERpc3BhdGNoZXI+KGhhbmRsZXIpOwotICAgIGF1dG8gYWx0ZXJuYXRlQWdlbnQgPSBtYWtl
VW5pcXVlPEFsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50PERvbWFpbkJhY2tlbmREaXNwYXRjaGVy
LCBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4+KCJEb21haW4iX3MsICpfY29udHJv
bGxlciwgV1RGTW92ZShhbHRlcm5hdGVEaXNwYXRjaGVyKSk7Ci0gICAgX2NvbnRyb2xsZXItPmFw
cGVuZEV4dHJhQWdlbnQoV1RGTW92ZShhbHRlcm5hdGVBZ2VudCkpOwotfQotCi0tIChpZDxUZXN0
UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPilkb21haW5IYW5kbGVyCi17Ci0gICAgcmV0dXJu
IF9kb21haW5IYW5kbGVyOwotfQotCi0tIChUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERp
c3BhdGNoZXIgKilkb21haW5FdmVudERpc3BhdGNoZXIKLXsKLSAgICBpZiAoIV9kb21haW5FdmVu
dERpc3BhdGNoZXIpCi0gICAgICAgIF9kb21haW5FdmVudERpc3BhdGNoZXIgPSBbW1Rlc3RQcm90
b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciBhbGxvY10gaW5pdFdpdGhDb250cm9sbGVy
Ol9jb250cm9sbGVyXTsKLSAgICByZXR1cm4gX2RvbWFpbkV2ZW50RGlzcGF0Y2hlcjsKLX0KLQot
QGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21h
aW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+
Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJv
dG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIKLXsKLSAgICBBdWdtZW50YWJsZUluc3Bl
Y3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIK
LXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0
dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250
cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKUV2ZW50Ci17Ci0gICAgY29u
c3QgRnJvbnRlbmRSb3V0ZXImIHJvdXRlciA9IF9jb250cm9sbGVyLT5mcm9udGVuZFJvdXRlcigp
OwotCi0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5F
dmVudCJfcyk7Ci0gICAgcm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5n
KCkpOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3Bh
dGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4t
ZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2ltcG9ydCA8V2Vi
SW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgotCi0KLQotCi10eXBlZGVmIE5TX0VO
VU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xQbGF0Zm9ybSkgewotICAgIFRlc3RQcm90b2NvbFBs
YXRmb3JtQWxsLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYywKLSAgICBUZXN0UHJv
dG9jb2xQbGF0Zm9ybUlPUywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TLAotfTsKLQot
Ci0KLQotCi1AcHJvdG9jb2wgVGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlciA8TlNPYmpl
Y3Q+Ci1Ab3B0aW9uYWwKLS0gKHZvaWQpQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4p
KE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXiko
dm9pZCkpc3VjY2Vzc0NhbGxiYWNrOwotQGVuZAotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5
ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnRE
aXNwYXRjaGVyIDogTlNPYmplY3QKLS0gKHZvaWQpRXZlbnQ7Ci1AZW5kCi0KLQotI2ltcG9ydCA8
V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgotCi0j
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xJbnRlcm5hbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZC10
YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5o
IgotI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKLSNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8
d3RmL0pTT05WYWx1ZXMuaD4KLQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5F
dmVudERpc3BhdGNoZXIgKFByaXZhdGUpCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9s
bGVyOihJbnNwZWN0b3I6OkF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxl
cjsKLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1k
ZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JX
SVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQot
dGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgotT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBm
cm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0KLWlubGluZSBTdHJpbmcg
dG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xQbGF0Zm9ybSB2YWx1ZSkKLXsKLSAgICBzd2l0
Y2godmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOgotICAgICAgICBy
ZXR1cm4gImFsbCJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzoKLSAg
ICAgICAgcmV0dXJuICJnZW5lcmljIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1J
T1M6Ci0gICAgICAgIHJldHVybiAiaW9zIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZv
cm1NYWNPUzoKLSAgICAgICAgcmV0dXJuICJtYWNvcyJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRl
PD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xQbGF0Zm9ybT4gZnJvbVByb3RvY29sU3Ry
aW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJhbGwiKQotICAg
ICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1BbGw7Ci0gICAgaWYgKHZhbHVlID09ICJn
ZW5lcmljIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzsKLSAg
ICBpZiAodmFsdWUgPT0gImlvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9y
bUlPUzsKLSAgICBpZiAodmFsdWUgPT0gIm1hY29zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90
b2NvbFBsYXRmb3JtTWFjT1M7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5t
bQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmQtdGFyZ2V0VHlwZS1t
YXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xU
eXBlUGFyc2VyLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0
UHJpdmF0ZS5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLQotCi0KLQotIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRl
c3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucy5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZh
dGUuaD4KLSNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVl
cy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLSMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtYXN5bmMt
YXR0cmlidXRlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1
dGUuanNvbi1yZXN1bHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjNWM0MWRiNTNh
Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5q
c29uLXJlc3VsdAorKysgL2Rldi9udWxsCkBAIC0xLDE4MDkgKzAsMCBAQAotIyMjIEJlZ2luIEZp
bGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotLy8gRGF0YWJhc2UKLUluc3BlY3RvckJh
Y2tlbmQucmVnaXN0ZXJEb21haW4oIkRhdGFiYXNlIiwgbnVsbCk7Ci1JbnNwZWN0b3JCYWNrZW5k
LnJlZ2lzdGVyRW51bSgiRGF0YWJhc2UuUHJpbWFyeUNvbG9ycyIsIHtSZWQ6ICJyZWQiLCBHcmVl
bjogImdyZWVuIiwgQmx1ZTogImJsdWUifSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29t
bWFuZCgiRGF0YWJhc2UuZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyIsIG51bGws
IFt7Im5hbWUiOiAiZGF0YWJhc2VJZCIsICJ0eXBlIjogIm51bWJlciJ9LCB7Im5hbWUiOiAicXVl
cnkiLCAidHlwZSI6ICJzdHJpbmcifV0sIFsiY29sdW1uTmFtZXMiLCAibm90ZXMiLCAidGltZXN0
YW1wIiwgInZhbHVlcyIsICJwYXlsb2FkIiwgImRhdGFiYXNlSWQiLCAic3FsRXJyb3IiLCAic2Ny
ZWVuQ29sb3IiLCAiYWx0ZXJuYXRlQ29sb3JzIiwgInByaW50Q29sb3IiXSk7Ci1JbnNwZWN0b3JC
YWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiRGF0YWJhc2UuZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxS
ZXR1cm5WYWx1ZXMiLCBudWxsLCBbeyJuYW1lIjogImRhdGFiYXNlSWQiLCAidHlwZSI6ICJudW1i
ZXIifSwgeyJuYW1lIjogInF1ZXJ5IiwgInR5cGUiOiAic3RyaW5nIn1dLCBbImNvbHVtbk5hbWVz
IiwgIm5vdGVzIiwgInRpbWVzdGFtcCIsICJ2YWx1ZXMiLCAicGF5bG9hZCIsICJkYXRhYmFzZUlk
IiwgInNxbEVycm9yIiwgInNjcmVlbkNvbG9yIiwgImFsdGVybmF0ZUNvbG9ycyIsICJwcmludENv
bG9yIl0pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIkRhdGFiYXNlLmV4ZWN1
dGVTUUxTeW5jIiwgbnVsbCwgW3sibmFtZSI6ICJkYXRhYmFzZUlkIiwgInR5cGUiOiAibnVtYmVy
In0sIHsibmFtZSI6ICJxdWVyeSIsICJ0eXBlIjogInN0cmluZyJ9XSwgWyJjb2x1bW5OYW1lcyIs
ICJub3RlcyIsICJ0aW1lc3RhbXAiLCAidmFsdWVzIiwgInBheWxvYWQiLCAiZGF0YWJhc2VJZCIs
ICJzcWxFcnJvciIsICJhbHRlcm5hdGVDb2xvcnMiLCAic2NyZWVuQ29sb3IiLCAicHJpbnRDb2xv
ciJdKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJEYXRhYmFzZS5leGVjdXRl
U1FMQXN5bmMiLCBudWxsLCBbeyJuYW1lIjogImRhdGFiYXNlSWQiLCAidHlwZSI6ICJudW1iZXIi
fSwgeyJuYW1lIjogInF1ZXJ5IiwgInR5cGUiOiAic3RyaW5nIn1dLCBbImNvbHVtbk5hbWVzIiwg
Im5vdGVzIiwgInRpbWVzdGFtcCIsICJ2YWx1ZXMiLCAicGF5bG9hZCIsICJkYXRhYmFzZUlkIiwg
InNxbEVycm9yIiwgInNjcmVlbkNvbG9yIiwgImFsdGVybmF0ZUNvbG9ycyIsICJwcmludENvbG9y
Il0pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRhdGFiYXNlRGlzcGF0Y2hlciA9IEluc3Bl
Y3RvckJhY2tlbmQucmVnaXN0ZXJEaXNwYXRjaGVyLmJpbmQoSW5zcGVjdG9yQmFja2VuZCwgIkRh
dGFiYXNlIik7Ci1JbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJEYXRhYmFzZSIsIG51
bGwpOwotIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNl
Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQotI2luY2x1
ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JGcm9udGVuZFJvdXRlci5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgQWx0
ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZvaWQgc2V0QmFja2VuZERp
c3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNr
ZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KLSAgICBCYWNrZW5kRGlzcGF0
Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRj
aGVyLmdldCgpOyB9Ci1wcml2YXRlOgotICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9i
YWNrZW5kRGlzcGF0Y2hlcjsKLX07Ci0KLQotY2xhc3MgQWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6
Ci0gICAgdmlydHVhbCB+QWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQot
ICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcg
Y2FsbElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25n
IGNhbGxJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTFN5bmMobG9uZyBjYWxsSWQsIGludCBpbl9kYXRh
YmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGV4
ZWN1dGVTUUxBc3luYyhsb25nIGNhbGxJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmlu
ZyYgaW5fcXVlcnkpID0gMDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jZW5k
aWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jIyMgRW5kIEZp
bGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1l
c3BhY2UgSW5zcGVjdG9yIHsKLQotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KLSNpZiBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLWNsYXNzIEFsdGVybmF0ZURh
dGFiYXNlQmFja2VuZERpc3BhdGNoZXI7Ci0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCi0KLWNsYXNzIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyIHsKLXB1YmxpYzoKLSAgICAvLyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIgJ3ByaW50Q29sb3In
IHdoaWxlIGdlbmVyYXRpbmcgY29tbWFuZC9ldmVudCBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0
dXJuVmFsdWVzLgotICAgIGVudW0gY2xhc3MgUHJpbnRDb2xvciB7Ci0gICAgICAgIEN5YW4gPSAz
LAotICAgICAgICBNYWdlbnRhID0gNCwKLSAgICAgICAgWWVsbG93ID0gNSwKLSAgICAgICAgQmxh
Y2sgPSA2LAotICAgIH07IC8vIGVudW0gY2xhc3MgUHJpbnRDb2xvcgotICAgIHZpcnR1YWwgdm9p
ZCBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKEVycm9yU3RyaW5nJiwgaW50IGlu
X2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnksIFJlZlB0cjxKU09OOjpBcnJheU9m
PFN0cmluZz4+JiBvcHRfb3V0X2NvbHVtbk5hbWVzLCBPcHRpb25hbDxTdHJpbmc+JiBvcHRfb3V0
X25vdGVzLCBPcHRpb25hbDxkb3VibGU+JiBvcHRfb3V0X3RpbWVzdGFtcCwgT3B0aW9uYWw8SlNP
Tjo6T2JqZWN0PiYgb3B0X291dF92YWx1ZXMsIE9wdGlvbmFsPEpTT046OlZhbHVlPiYgb3B0X291
dF9wYXlsb2FkLCBPcHRpb25hbDxpbnQ+JiBvcHRfb3V0X2RhdGFiYXNlSWQsIFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiBvcHRfb3V0X3NxbEVycm9yLCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyogb3B0X291dF9zY3JlZW5D
b2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiBv
cHRfb3V0X2FsdGVybmF0ZUNvbG9ycywgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6
OlByaW50Q29sb3IqIG9wdF9vdXRfcHJpbnRDb2xvcikgPSAwOwotICAgIGNsYXNzIEV4ZWN1dGVT
UUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2sgOiBwdWJsaWMgQmFja2VuZERpc3Bh
dGNoZXI6OkNhbGxiYWNrQmFzZSB7Ci0gICAgcHVibGljOgotICAgICAgICBFeGVjdXRlU1FMQXN5
bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrKFJlZjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiwg
aW50IGlkKTsKLSAgICAgICAgdm9pZCBzZW5kU3VjY2VzcyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxT
dHJpbmc+PiYmIGNvbHVtbk5hbWVzLCBPcHRpb25hbDxTdHJpbmc+JiBub3RlcywgT3B0aW9uYWw8
ZG91YmxlPiYgdGltZXN0YW1wLCBPcHRpb25hbDxKU09OOjpPYmplY3Q+JiB2YWx1ZXMsIE9wdGlv
bmFsPEpTT046OlZhbHVlPiYgcGF5bG9hZCwgT3B0aW9uYWw8aW50PiYgZGF0YWJhc2VJZCwgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mJiBzcWxFcnJvciwgT3B0
aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IHNjcmVl
bkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4m
JiBhbHRlcm5hdGVDb2xvcnMsIE9wdGlvbmFsPERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyOjpQcmludENvbG9yPiBwcmludENvbG9yKTsKLSAgICB9OwotICAgIHZpcnR1YWwgdm9pZCBl
eGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhpbnQgaW5fZGF0YWJhc2VJZCwgY29u
c3QgU3RyaW5nJiBpbl9xdWVyeSwgUmVmPEV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFs
dWVzQ2FsbGJhY2s+JiYgY2FsbGJhY2spID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNR
TFN5bmMoRXJyb3JTdHJpbmcmLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9x
dWVyeSwgUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mIG91dF9jb2x1bW5OYW1lcywgU3Ry
aW5nKiBvdXRfbm90ZXMsIGRvdWJsZSogb3V0X3RpbWVzdGFtcCwgSlNPTjo6T2JqZWN0KiBvdXRf
dmFsdWVzLCBKU09OOjpWYWx1ZSogb3V0X3BheWxvYWQsIGludCogb3V0X2RhdGFiYXNlSWQsIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiBvdXRfc3FsRXJyb3Is
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYgb3V0X2Fs
dGVybmF0ZUNvbG9ycywgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xv
cnMqIG91dF9zY3JlZW5Db2xvciwgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlBy
aW50Q29sb3IqIG91dF9wcmludENvbG9yKSA9IDA7Ci0gICAgY2xhc3MgRXhlY3V0ZVNRTEFzeW5j
Q2FsbGJhY2sgOiBwdWJsaWMgQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZSB7Ci0gICAg
cHVibGljOgotICAgICAgICBFeGVjdXRlU1FMQXN5bmNDYWxsYmFjayhSZWY8QmFja2VuZERpc3Bh
dGNoZXI+JiYsIGludCBpZCk7Ci0gICAgICAgIHZvaWQgc2VuZFN1Y2Nlc3MoUmVmUHRyPEpTT046
OkFycmF5T2Y8U3RyaW5nPj4mJiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBub3RlcywgZG91
YmxlIHRpbWVzdGFtcCwgSlNPTjo6T2JqZWN0IHZhbHVlcywgSlNPTjo6VmFsdWUgcGF5bG9hZCwg
aW50IGRhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJy
b3I+JiYgc3FsRXJyb3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29s
b3JzIHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNv
bG9yTGlzdD4mJiBhbHRlcm5hdGVDb2xvcnMsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyOjpQcmludENvbG9yIHByaW50Q29sb3IpOwotICAgIH07Ci0gICAgdmlydHVhbCB2b2lkIGV4
ZWN1dGVTUUxBc3luYyhpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSwg
UmVmPEV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrPiYmIGNhbGxiYWNrKSA9IDA7Ci1wcm90ZWN0ZWQ6
Ci0gICAgdmlydHVhbCB+RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKLX07Ci0K
LWNsYXNzIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVu
dGFsQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8RGF0YWJhc2VC
YWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElk
LCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5h
bDsKLXByaXZhdGU6Ci0gICAgdm9pZCBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVz
KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwotICAg
IHZvaWQgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0SWQs
IFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0gICAgdm9pZCBleGVjdXRlU1FM
U3luYyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsK
LSAgICB2b2lkIGV4ZWN1dGVTUUxBc3luYyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9i
amVjdD4mJiBwYXJhbWV0ZXJzKTsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKLXB1YmxpYzoKLSAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJu
YXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2Fs
dGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9Ci1wcml2YXRlOgotICAg
IEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIqIG1fYWx0ZXJuYXRlRGlzcGF0Y2hl
ciB7IG51bGxwdHIgfTsKLSNlbmRpZgotcHJpdmF0ZToKLSAgICBEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiwgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIqKTsKLSAgICBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2VudCB7IG51
bGxwdHIgfTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBU
ZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlz
cGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMt
d2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEJhY2tlbmRE
aXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRl
bmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi9O
ZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2lmIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotI2luY2x1ZGUgIlRlc3RBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgSW5zcGVjdG9y
IHsKLQotRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5EYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlcigpIHsgfQotCi1SZWY8RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4g
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNr
ZW5kRGlzcGF0Y2hlciwgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQot
ewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoYmFj
a2VuZERpc3BhdGNoZXIsIGFnZW50KSk7Ci19Ci0KLURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6
OkRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNw
YXRjaGVyLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCi0gICAgOiBT
dXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKLSAgICAsIG1f
YWdlbnQoYWdlbnQpCi17Ci0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRj
aGVyRm9yRG9tYWluKCJEYXRhYmFzZSJfcywgdGhpcyk7Ci19Ci0KLXZvaWQgRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0
aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCi17Ci0gICAgUmVmPERhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwotCi0gICAgUmVmUHRyPEpTT046Ok9iamVj
dD4gcGFyYW1ldGVyczsKLSAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFyYW1l
dGVycyk7Ci0KLSAgICBpZiAobWV0aG9kID09ICJleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJu
VmFsdWVzIikKLSAgICAgICAgZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhyZXF1
ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOwotICAgIGVsc2UgaWYgKG1ldGhvZCA9PSAiZXhl
Y3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMiKQotICAgICAgICBleGVjdXRlU1FMQXN5
bmNPcHRpb25hbFJldHVyblZhbHVlcyhyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOwot
ICAgIGVsc2UgaWYgKG1ldGhvZCA9PSAiZXhlY3V0ZVNRTFN5bmMiKQotICAgICAgICBleGVjdXRl
U1FMU3luYyhyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOwotICAgIGVsc2UgaWYgKG1l
dGhvZCA9PSAiZXhlY3V0ZVNRTEFzeW5jIikKLSAgICAgICAgZXhlY3V0ZVNRTEFzeW5jKHJlcXVl
c3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2RO
b3RGb3VuZCwgIidEYXRhYmFzZS4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOwotfQot
Ci12b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxS
ZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1l
dGVycykKLXsKLSAgICBpbnQgaW5fZGF0YWJhc2VJZCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdl
dEludGVnZXIocGFyYW1ldGVycy5nZXQoKSwgImRhdGFiYXNlSWQiX3MsIG51bGxwdHIpOwotICAg
IFN0cmluZyBpbl9xdWVyeSA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwYXJhbWV0
ZXJzLmdldCgpLCAicXVlcnkiX3MsIG51bGxwdHIpOwotICAgIGlmIChtX2JhY2tlbmREaXNwYXRj
aGVyLT5oYXNQcm90b2NvbEVycm9ycygpKSB7Ci0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsICJT
b21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJ0RhdGFiYXNlLmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxS
ZXR1cm5WYWx1ZXMnIGNhbid0IGJlIHByb2Nlc3NlZCJfcyk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSAgICBp
ZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hl
ci0+ZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhyZXF1ZXN0SWQsIGluX2RhdGFi
YXNlSWQsIGluX3F1ZXJ5KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAg
RXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiBvdXRf
Y29sdW1uTmFtZXM7Ci0gICAgT3B0aW9uYWw8U3RyaW5nPiBvdXRfbm90ZXM7Ci0gICAgT3B0aW9u
YWw8ZG91YmxlPiBvdXRfdGltZXN0YW1wOwotICAgIE9wdGlvbmFsPEpTT046Ok9iamVjdD4gb3V0
X3ZhbHVlczsKLSAgICBPcHRpb25hbDxKU09OOjpWYWx1ZT4gb3V0X3BheWxvYWQ7Ci0gICAgT3B0
aW9uYWw8aW50PiBvdXRfZGF0YWJhc2VJZDsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGF0YWJhc2U6OkVycm9yPiBvdXRfc3FsRXJyb3I7Ci0gICAgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgb3V0X3NjcmVlbkNvbG9yOwotICAgIFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiBvdXRfYWx0ZXJuYXRlQ29s
b3JzOwotICAgIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yIG91
dF9wcmludENvbG9yOwotICAgIG1fYWdlbnQtPmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXMoZXJyb3IsIGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5LCBvdXRfY29sdW1uTmFtZXMsIG91
dF9ub3Rlcywgb3V0X3RpbWVzdGFtcCwgb3V0X3ZhbHVlcywgb3V0X3BheWxvYWQsIG91dF9kYXRh
YmFzZUlkLCBvdXRfc3FsRXJyb3IsIG91dF9zY3JlZW5Db2xvciwgb3V0X2FsdGVybmF0ZUNvbG9y
cywgb3V0X3ByaW50Q29sb3IpOwotCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkgewotICAgICAg
ICBpZiAob3V0X2NvbHVtbk5hbWVzKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRBcnJheSgiY29s
dW1uTmFtZXMiX3MsIG91dF9jb2x1bW5OYW1lcyk7Ci0gICAgICAgIGlmIChvdXRfbm90ZXMuaGFz
VmFsdWUoKSkKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJub3RlcyJfcywgKm91dF9u
b3Rlcyk7Ci0gICAgICAgIGlmIChvdXRfdGltZXN0YW1wLmhhc1ZhbHVlKCkpCi0gICAgICAgICAg
ICByZXN1bHQtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCAqb3V0X3RpbWVzdGFtcCk7Ci0gICAg
ICAgIGlmIChvdXRfdmFsdWVzLmhhc1ZhbHVlKCkpCi0gICAgICAgICAgICByZXN1bHQtPnNldE9i
amVjdCgidmFsdWVzIl9zLCAqb3V0X3ZhbHVlcyk7Ci0gICAgICAgIGlmIChvdXRfcGF5bG9hZC5o
YXNWYWx1ZSgpKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgKm91
dF9wYXlsb2FkKTsKLSAgICAgICAgaWYgKG91dF9kYXRhYmFzZUlkLmhhc1ZhbHVlKCkpCi0gICAg
ICAgICAgICByZXN1bHQtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsICpvdXRfZGF0YWJhc2VJ
ZCk7Ci0gICAgICAgIGlmIChvdXRfc3FsRXJyb3IpCi0gICAgICAgICAgICByZXN1bHQtPnNldE9i
amVjdCgic3FsRXJyb3IiX3MsIG91dF9zcWxFcnJvcik7Ci0gICAgICAgIGlmIChvdXRfc2NyZWVu
Q29sb3IuaGFzVmFsdWUoKSkKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJzY3JlZW5D
b2xvciJfcywgKm91dF9zY3JlZW5Db2xvcik7Ci0gICAgICAgIGlmIChvdXRfYWx0ZXJuYXRlQ29s
b3JzKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCBv
dXRfYWx0ZXJuYXRlQ29sb3JzKTsKLSAgICAgICAgaWYgKG91dF9wcmludENvbG9yLmhhc1ZhbHVl
KCkpCi0gICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgKm91dF9w
cmludENvbG9yKTsKLSAgICB9Ci0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQp
LCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQ
cm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJv
cikpOwotfQotCi1EYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFz
eW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjazo6RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxS
ZXR1cm5WYWx1ZXNDYWxsYmFjayhSZWY8QmFja2VuZERpc3BhdGNoZXI+JiYgYmFja2VuZERpc3Bh
dGNoZXIsIGludCBpZCkgOiBCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlKFdURk1vdmUo
YmFja2VuZERpc3BhdGNoZXIpLCBpZCkgeyB9Ci0KLXZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2s6
OnNlbmRTdWNjZXNzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiYgY29sdW1uTmFtZXMs
IE9wdGlvbmFsPFN0cmluZz4mIG5vdGVzLCBPcHRpb25hbDxkb3VibGU+JiB0aW1lc3RhbXAsIE9w
dGlvbmFsPEpTT046Ok9iamVjdD4mIHZhbHVlcywgT3B0aW9uYWw8SlNPTjo6VmFsdWU+JiBwYXls
b2FkLCBPcHRpb25hbDxpbnQ+JiBkYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGF0YWJhc2U6OkVycm9yPiYmIHNxbEVycm9yLCBPcHRpb25hbDxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYmIGFsdGVybmF0ZUNvbG9ycywgT3B0
aW9uYWw8RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3I+IHByaW50
Q29sb3IpCi17Ci0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmpl
Y3Q6OmNyZWF0ZSgpOwotICAgIGlmIChjb2x1bW5OYW1lcykKLSAgICAgICAganNvbk1lc3NhZ2Ut
PnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgY29sdW1uTmFtZXMpOwotICAgIGlmIChub3Rlcy5o
YXNWYWx1ZSgpKQotICAgICAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJub3RlcyJfcywgKm5v
dGVzKTsKLSAgICBpZiAodGltZXN0YW1wLmhhc1ZhbHVlKCkpCi0gICAgICAgIGpzb25NZXNzYWdl
LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgKnRpbWVzdGFtcCk7Ci0gICAgaWYgKHZhbHVlcy5o
YXNWYWx1ZSgpKQotICAgICAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsICp2
YWx1ZXMpOwotICAgIGlmIChwYXlsb2FkLmhhc1ZhbHVlKCkpCi0gICAgICAgIGpzb25NZXNzYWdl
LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgKnBheWxvYWQpOwotICAgIGlmIChkYXRhYmFzZUlkLmhh
c1ZhbHVlKCkpCi0gICAgICAgIGpzb25NZXNzYWdlLT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9z
LCAqZGF0YWJhc2VJZCk7Ci0gICAgaWYgKHNxbEVycm9yKQotICAgICAgICBqc29uTWVzc2FnZS0+
c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgc3FsRXJyb3IpOwotICAgIGlmIChzY3JlZW5Db2xvci5o
YXNWYWx1ZSgpKQotICAgICAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJf
cywgKnNjcmVlbkNvbG9yKTsKLSAgICBpZiAoYWx0ZXJuYXRlQ29sb3JzKQotICAgICAgICBqc29u
TWVzc2FnZS0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgYWx0ZXJuYXRlQ29sb3JzKTsK
LSAgICBpZiAocHJpbnRDb2xvci5oYXNWYWx1ZSgpKQotICAgICAgICBqc29uTWVzc2FnZS0+c2V0
U3RyaW5nKCJwcmludENvbG9yIl9zLCAqcHJpbnRDb2xvcik7Ci0gICAgQ2FsbGJhY2tCYXNlOjpz
ZW5kU3VjY2VzcyhXVEZNb3ZlKGpzb25NZXNzYWdlKSk7Ci19Ci0KLXZvaWQgRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyBy
ZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycykKLXsKLSAgICBpbnQg
aW5fZGF0YWJhc2VJZCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEludGVnZXIocGFyYW1ldGVy
cy5nZXQoKSwgImRhdGFiYXNlSWQiX3MsIG51bGxwdHIpOwotICAgIFN0cmluZyBpbl9xdWVyeSA9
IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwYXJhbWV0ZXJzLmdldCgpLCAicXVlcnki
X3MsIG51bGxwdHIpOwotICAgIGlmIChtX2JhY2tlbmREaXNwYXRjaGVyLT5oYXNQcm90b2NvbEVy
cm9ycygpKSB7Ci0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJy
b3IoQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsICJTb21lIGFyZ3VtZW50cyBvZiBt
ZXRob2QgJ0RhdGFiYXNlLmV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzJyBjYW4n
dCBiZSBwcm9jZXNzZWQiX3MpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0jaWYgRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0gICAgaWYgKG1fYWx0ZXJuYXRlRGlz
cGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVTUUxBc3lu
Y09wdGlvbmFsUmV0dXJuVmFsdWVzKHJlcXVlc3RJZCwgaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnkp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBSZWY8RGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVz
Q2FsbGJhY2s+IGNhbGxiYWNrID0gYWRvcHRSZWYoKm5ldyBEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjayht
X2JhY2tlbmREaXNwYXRjaGVyLmNvcHlSZWYoKSwgcmVxdWVzdElkKSk7Ci0gICAgbV9hZ2VudC0+
ZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMoaW5fZGF0YWJhc2VJZCwgaW5fcXVl
cnksIGNhbGxiYWNrLmNvcHlSZWYoKSk7Ci0KLX0KLQotdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVyOjpleGVjdXRlU1FMU3luYyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBwYXJhbWV0ZXJzKQotewotICAgIGludCBpbl9kYXRhYmFzZUlkID0gbV9iYWNrZW5kRGlz
cGF0Y2hlci0+Z2V0SW50ZWdlcihwYXJhbWV0ZXJzLmdldCgpLCAiZGF0YWJhc2VJZCJfcywgbnVs
bHB0cik7Ci0gICAgU3RyaW5nIGluX3F1ZXJ5ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3Ry
aW5nKHBhcmFtZXRlcnMuZ2V0KCksICJxdWVyeSJfcywgbnVsbHB0cik7Ci0gICAgaWYgKG1fYmFj
a2VuZERpc3BhdGNoZXItPmhhc1Byb3RvY29sRXJyb3JzKCkpIHsKLSAgICAgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxp
ZFBhcmFtcywgIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnRGF0YWJhc2UuZXhlY3V0ZVNRTFN5
bmMnIGNhbid0IGJlIHByb2Nlc3NlZCJfcyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSNp
ZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSAgICBpZiAobV9hbHRl
cm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0
ZVNRTFN5bmMocmVxdWVzdElkLCBpbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxK
U09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgUmVmUHRy
PEpTT046OkFycmF5T2Y8U3RyaW5nPj4gb3V0X2NvbHVtbk5hbWVzOwotICAgIFN0cmluZyBvdXRf
bm90ZXM7Ci0gICAgZG91YmxlIG91dF90aW1lc3RhbXA7Ci0gICAgSlNPTjo6T2JqZWN0IG91dF92
YWx1ZXM7Ci0gICAgSlNPTjo6VmFsdWUgb3V0X3BheWxvYWQ7Ci0gICAgaW50IG91dF9kYXRhYmFz
ZUlkOwotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IG91
dF9zcWxFcnJvcjsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNv
bG9yTGlzdD4gb3V0X2FsdGVybmF0ZUNvbG9yczsKLSAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpE
YXRhYmFzZTo6UHJpbWFyeUNvbG9ycyBvdXRfc2NyZWVuQ29sb3I7Ci0gICAgRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3Igb3V0X3ByaW50Q29sb3I7Ci0gICAgbV9h
Z2VudC0+ZXhlY3V0ZVNRTFN5bmMoZXJyb3IsIGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5LCBvdXRf
Y29sdW1uTmFtZXMsICZvdXRfbm90ZXMsICZvdXRfdGltZXN0YW1wLCBvdXRfdmFsdWVzLCAmb3V0
X3BheWxvYWQsICZvdXRfZGF0YWJhc2VJZCwgb3V0X3NxbEVycm9yLCBvdXRfYWx0ZXJuYXRlQ29s
b3JzLCAmb3V0X3NjcmVlbkNvbG9yLCAmb3V0X3ByaW50Q29sb3IpOwotCi0gICAgaWYgKCFlcnJv
ci5sZW5ndGgoKSkgewotICAgICAgICByZXN1bHQtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywg
b3V0X2NvbHVtbk5hbWVzKTsKLSAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBv
dXRfbm90ZXMpOwotICAgICAgICByZXN1bHQtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCBvdXRf
dGltZXN0YW1wKTsKLSAgICAgICAgcmVzdWx0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgb3V0X3Zh
bHVlcyk7Ci0gICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIG91dF9wYXlsb2Fk
KTsKLSAgICAgICAgcmVzdWx0LT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCBvdXRfZGF0YWJh
c2VJZCk7Ci0gICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgb3V0X3NxbEVy
cm9yKTsKLSAgICAgICAgcmVzdWx0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCBvdXRf
YWx0ZXJuYXRlQ29sb3JzKTsKLSAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9y
Il9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFs
dWUob3V0X3NjcmVlbkNvbG9yKSk7Ci0gICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJwcmludENv
bG9yIl9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50
VmFsdWUob3V0X3ByaW50Q29sb3IpKTsKLSAgICB9Ci0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkK
LSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RG
TW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwg
V1RGTW92ZShlcnJvcikpOwotfQotCi1EYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6
RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2s6OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrKFJlZjxCYWNr
ZW5kRGlzcGF0Y2hlcj4mJiBiYWNrZW5kRGlzcGF0Y2hlciwgaW50IGlkKSA6IEJhY2tlbmREaXNw
YXRjaGVyOjpDYWxsYmFja0Jhc2UoV1RGTW92ZShiYWNrZW5kRGlzcGF0Y2hlciksIGlkKSB7IH0K
LQotdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5j
Q2FsbGJhY2s6OnNlbmRTdWNjZXNzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiYgY29s
dW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIEpTT046Ok9i
amVjdCB2YWx1ZXMsIEpTT046OlZhbHVlIHBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYmIHNxbEVycm9yLCBJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyBzY3JlZW5Db2xvciwgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiYgYWx0ZXJuYXRlQ29s
b3JzLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciBwcmludENv
bG9yKQotewotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBj
b2x1bW5OYW1lcyk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibm90ZXMiX3MsIG5vdGVz
KTsKLSAgICBqc29uTWVzc2FnZS0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIHRpbWVzdGFtcCk7
Ci0gICAganNvbk1lc3NhZ2UtPnNldE9iamVjdCgidmFsdWVzIl9zLCB2YWx1ZXMpOwotICAgIGpz
b25NZXNzYWdlLT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgcGF5bG9hZCk7Ci0gICAganNvbk1lc3Nh
Z2UtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsIGRhdGFiYXNlSWQpOwotICAgIGpzb25NZXNz
YWdlLT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBzcWxFcnJvcik7Ci0gICAganNvbk1lc3NhZ2Ut
PnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxw
ZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShzY3JlZW5Db2xvcikpOwotICAgIGpzb25NZXNzYWdl
LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCBhbHRlcm5hdGVDb2xvcnMpOwotICAgIGpz
b25NZXNzYWdlLT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShwcmludENvbG9yKSk7Ci0gICAgQ2Fs
bGJhY2tCYXNlOjpzZW5kU3VjY2VzcyhXVEZNb3ZlKGpzb25NZXNzYWdlKSk7Ci19Ci0KLXZvaWQg
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTEFzeW5jKGxvbmcgcmVxdWVzdElk
LCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpCi17Ci0gICAgaW50IGluX2RhdGFi
YXNlSWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRJbnRlZ2VyKHBhcmFtZXRlcnMuZ2V0KCks
ICJkYXRhYmFzZUlkIl9zLCBudWxscHRyKTsKLSAgICBTdHJpbmcgaW5fcXVlcnkgPSBtX2JhY2tl
bmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgInF1ZXJ5Il9zLCBudWxs
cHRyKTsKLSAgICBpZiAobV9iYWNrZW5kRGlzcGF0Y2hlci0+aGFzUHJvdG9jb2xFcnJvcnMoKSkg
ewotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tl
bmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCAiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICdE
YXRhYmFzZS5leGVjdXRlU1FMQXN5bmMnIGNhbid0IGJlIHByb2Nlc3NlZCJfcyk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKLSAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJu
YXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZVNRTEFzeW5jKHJlcXVlc3RJZCwgaW5fZGF0YWJhc2VJZCwg
aW5fcXVlcnkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBSZWY8RGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrPiBj
YWxsYmFjayA9IGFkb3B0UmVmKCpuZXcgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6
OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrKG1fYmFja2VuZERpc3BhdGNoZXIuY29weVJlZigpLCBy
ZXF1ZXN0SWQpKTsKLSAgICBtX2FnZW50LT5leGVjdXRlU1FMQXN5bmMoaW5fZGF0YWJhc2VJZCwg
aW5fcXVlcnksIGNhbGxiYWNrLmNvcHlSZWYoKSk7Ci0KLX0KLQotfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0j
aW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVz
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0
b3IgewotCi1jbGFzcyBGcm9udGVuZFJvdXRlcjsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
Ci0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgotCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYv
QXNzZXJ0aW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLW5hbWVzcGFjZSBQ
cm90b2NvbCB7Ci0KLQotCi0vLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KLW5hbWVzcGFjZSBEYXRh
YmFzZSB7Ci1jbGFzcyBFcnJvcjsKLWVudW0gY2xhc3MgUHJpbWFyeUNvbG9yczsKLX0gLy8gRGF0
YWJhc2UKLS8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KLQotCi0vLyBUeXBlZGVmcy4K
LW5hbWVzcGFjZSBEYXRhYmFzZSB7Ci0vKiBVbmlxdWUgaWRlbnRpZmllciBvZiBEYXRhYmFzZSBv
YmplY3QuICovCi10eXBlZGVmIGludCBEYXRhYmFzZUlkOwotdHlwZWRlZiBKU09OOjpBcnJheU9m
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiBDb2xvckxpc3Q7
Ci19IC8vIERhdGFiYXNlCi0vLyBFbmQgb2YgdHlwZWRlZnMuCi0KLW5hbWVzcGFjZSBUZXN0SGVs
cGVycyB7Ci0KLVN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSk7Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkK
LXsKLSAgICByZXR1cm4gZ2V0RW51bUNvbnN0YW50VmFsdWUoc3RhdGljX2Nhc3Q8aW50PihlbnVt
VmFsdWUpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKLQotbmFtZXNwYWNlIERh
dGFiYXNlIHsKLS8qICAqLwotZW51bSBjbGFzcyBQcmltYXJ5Q29sb3JzIHsKLSAgICBSZWQgPSAw
LAotICAgIEdyZWVuID0gMSwKLSAgICBCbHVlID0gMiwKLX07IC8vIGVudW0gY2xhc3MgUHJpbWFy
eUNvbG9ycwotLyogRGF0YWJhc2UgZXJyb3IuICovCi1jbGFzcyBFcnJvciA6IHB1YmxpYyBKU09O
OjpPYmplY3RCYXNlIHsKLXB1YmxpYzoKLSAgICBlbnVtIHsKLSAgICAgICAgTm9GaWVsZHNTZXQg
PSAwLAotICAgICAgICBNZXNzYWdlU2V0ID0gMSA8PCAwLAotICAgICAgICBDb2RlU2V0ID0gMSA8
PCAxLAotICAgICAgICBBbGxGaWVsZHNTZXQgPSAoTWVzc2FnZVNldCB8IENvZGVTZXQpCi0gICAg
fTsKLQotICAgIHRlbXBsYXRlPGludCBTVEFURT4KLSAgICBjbGFzcyBCdWlsZGVyIHsKLSAgICBw
cml2YXRlOgotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBtX3Jlc3VsdDsKLQotICAgICAg
ICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxT
VEFURSB8IFNURVA+Kj4odGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyKFJlZjwv
KkVycm9yKi9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQotICAgICAgICAgICAgOiBtX3Jlc3VsdChX
VEZNb3ZlKG9iamVjdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNU
QVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwot
ICAgICAgICB9Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBFcnJvcjsKLSAgICBwdWJsaWM6Ci0KLSAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IE1lc3NhZ2VTZXQ+JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUg
JiBNZXNzYWdlU2V0KSwgcHJvcGVydHlfbWVzc2FnZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAg
ICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJtZXNzYWdlIl9zLCB2YWx1ZSk7Ci0gICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPE1lc3NhZ2VTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgQ29kZVNldD4mIHNldENvZGUoaW50IHZhbHVlKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29kZVNldCksIHByb3BlcnR5X2NvZGVf
YWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldEludGVnZXIoImNvZGUiX3Ms
IHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29kZVNldD4oKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIFJlZjxFcnJvcj4gcmVsZWFzZSgpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9y
ZWFkeSk7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoRXJyb3IpID09IHNpemVv
ZihKU09OOjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7Ci0KLSAgICAgICAgICAgIFJlZjxKU09OOjpP
YmplY3Q+IGpzb25SZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOwotICAgICAgICAg
ICAgYXV0byByZXN1bHQgPSBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxFcnJvcj4qPigm
anNvblJlc3VsdCkpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAg
IH07Ci0KLSAgICAvKgotICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKLSAgICAgKiBSZWY8
RXJyb3I+IHJlc3VsdCA9IEVycm9yOjpjcmVhdGUoKQotICAgICAqICAgICAuc2V0TWVzc2FnZSgu
Li4pCi0gICAgICogICAgIC5zZXRDb2RlKC4uLikKLSAgICAgKiAgICAgLnJlbGVhc2UoKTsKLSAg
ICAgKi8KLSAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
KTsKLSAgICB9Ci19OwotCi19IC8vIERhdGFiYXNlCi0KLQotCi1uYW1lc3BhY2UgVGVzdEhlbHBl
cnMgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBQcm90b2NvbEVudW1UeXBlPgotT3B0aW9uYWw8UHJv
dG9jb2xFbnVtVHlwZT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYpOwot
Ci0vLyBFbnVtcyBpbiB0aGUgJ0RhdGFiYXNlJyBEb21haW4KLXRlbXBsYXRlPD4KLU9wdGlvbmFs
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiBwYXJzZUVudW1W
YWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xv
cnM+KGNvbnN0IFN0cmluZyYpOwotCi19IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwotCi19IC8v
IG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotbmFtZXNw
YWNlIFdURiB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKLQot
Ly8gSGFzaCBkZWNsYXJhdGlvbnMgaW4gdGhlICdEYXRhYmFzZScgRG9tYWluCi10ZW1wbGF0ZTw+
Ci1zdHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1h
cnlDb2xvcnM+IHsKLSAgICB0eXBlZGVmIEludEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0
YWJhc2U6OlByaW1hcnlDb2xvcnM+IEhhc2g7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXVEYKLSMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xPYmplY3RzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNv
bW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbE9iamVjdHMuaCIKLQotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLW5hbWVzcGFj
ZSBQcm90b2NvbCB7Ci0KLW5hbWVzcGFjZSBUZXN0SGVscGVycyB7Ci0KLXN0YXRpYyBjb25zdCBj
aGFyKiBjb25zdCBlbnVtX2NvbnN0YW50X3ZhbHVlc1tdID0gewotICAgICJyZWQiLAotICAgICJn
cmVlbiIsCi0gICAgImJsdWUiLAotICAgICJjeWFuIiwKLSAgICAibWFnZW50YSIsCi0gICAgInll
bGxvdyIsCi0gICAgImJsYWNrIiwKLX07Ci0KLVN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShp
bnQgY29kZSkgewotICAgIHJldHVybiBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb2RlXTsKLX0KLQot
Ly8gRW51bXMgaW4gdGhlICdEYXRhYmFzZScgRG9tYWluCi10ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJ
bnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gcGFyc2VFbnVtVmFs
dWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3Jz
Pihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQotewotICAgIHN0YXRpYyBjb25zdCBzaXpl
X3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9yczo6UmVkLAotICAgICAgICAoc2l6ZV90KUluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzOjpHcmVlbiwKLSAgICAgICAg
KHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9yczo6Qmx1
ZSwKLSAgICB9OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMzsgKytpKQotICAgICAgICBp
ZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNb
aV1dKQotICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6
UHJpbWFyeUNvbG9ycyljb25zdGFudFZhbHVlc1tpXTsKLQotICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7Ci19Ci0KLQotfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKLQotCi0KLX0gLy8gbmFtZXNw
YWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xC
YWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNv
bW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4K
LQotQHByb3RvY29sIFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcjsKLQotbmFtZXNw
YWNlIEluc3BlY3RvciB7Ci0KLQotY2xhc3MgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
ciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgT2JqQ0luc3Bl
Y3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sRGF0YWJhc2VEb21h
aW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9Ci0gICAgdm9pZCBl
eGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVzdElkLCBpbnQgaW5f
ZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkgZmluYWw7Ci0gICAgdm9pZCBleGVj
dXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHJlcXVlc3RJZCwgaW50IGluX2Rh
dGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpIGZpbmFsOwotICAgIHZvaWQgZXhlY3V0
ZVNRTFN5bmMobG9uZyByZXF1ZXN0SWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcm
IGluX3F1ZXJ5KSBmaW5hbDsKLSAgICB2b2lkIGV4ZWN1dGVTUUxBc3luYyhsb25nIHJlcXVlc3RJ
ZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpIGZpbmFsOwotcHJp
dmF0ZToKLSAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVy
Pj4gbV9kZWxlZ2F0ZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgot
I2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0
b3IgewotCi12b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVj
dXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVzdElkLCBpbnQgaW5fZGF0
YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkKLXsKLSAgICBpZiAoIVttX2RlbGVnYXRl
IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVy
blZhbHVlc1dpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazpkYXRhYmFzZUlkOnF1ZXJ5
OildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3Io
cmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRGF0YWJhc2Uu
ZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcycgd2FzIG5vdCBmb3VuZCJfcyk7Ci0g
ICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJy
b3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihy
ZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwotICAgICAg
ICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgIH07Ci0KLSAg
ICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmNvbHVtbk5h
bWVzLCBOU1N0cmluZyAqKm5vdGVzLCBkb3VibGUgKnRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09O
T2JqZWN0ICoqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipwYXlsb2FkLCBpbnQgKmRh
dGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipzcWxFcnJvciwgVGVzdFByb3Rv
Y29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzICpzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5n
PiovICoqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5j
T3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yICpwcmludENvbG9yKSB7Ci0gICAgICAgIFJl
ZjxKU09OOjpPYmplY3Q+IHJlc3VsdE9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0g
ICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihjb2x1bW5O
YW1lcywgQCJjb2x1bW5OYW1lcyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9P
UFRJT05BTF9QQVJBTUVURVIobm90ZXMsIEAibm90ZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHZhbHVlcywgQCJ2YWx1ZXMiKTsKLSAgICAg
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHBheWxvYWQsIEAi
cGF5bG9hZCIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJB
TUVURVIoc3FsRXJyb3IsIEAic3FsRXJyb3IiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKGFsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xv
cnMiKTsKLSAgICAgICAgaWYgKGNvbHVtbk5hbWVzKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0
LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KCpjb2x1bW5OYW1l
cykpOwotICAgICAgICBpZiAobm90ZXMpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0
cmluZygibm90ZXMiX3MsICpub3Rlcyk7Ci0gICAgICAgIGlmICh0aW1lc3RhbXApCi0gICAgICAg
ICAgICByZXN1bHRPYmplY3QtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCAqdGltZXN0YW1wKTsK
LSAgICAgICAgaWYgKHZhbHVlcykKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0
KCJ2YWx1ZXMiX3MsIFsqdmFsdWVzIHRvSlNPTk9iamVjdF0pOwotICAgICAgICBpZiAocGF5bG9h
ZCkKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFsqcGF5
bG9hZCB0b0pTT05PYmplY3RdKTsKLSAgICAgICAgaWYgKGRhdGFiYXNlSWQpCi0gICAgICAgICAg
ICByZXN1bHRPYmplY3QtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsICpkYXRhYmFzZUlkKTsK
LSAgICAgICAgaWYgKHNxbEVycm9yKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmpl
Y3QoInNxbEVycm9yIl9zLCBbKnNxbEVycm9yIHRvSlNPTk9iamVjdF0pOwotICAgICAgICBpZiAo
c2NyZWVuQ29sb3IpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygic2NyZWVu
Q29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcoKnNjcmVlbkNvbG9yKSk7Ci0gICAgICAgIGlmIChh
bHRlcm5hdGVDb2xvcnMpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJhbHRl
cm5hdGVDb2xvcnMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KCphbHRlcm5hdGVDb2xvcnMpKTsKLSAg
ICAgICAgaWYgKHByaW50Q29sb3IpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmlu
ZygicHJpbnRDb2xvciJfcywgdG9Qcm90b2NvbFN0cmluZygqcHJpbnRDb2xvcikpOwotICAgICAg
ICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJl
c3VsdE9iamVjdCksIGZhbHNlKTsKLSAgICB9OwotCi0gICAgaW50IG9faW5fZGF0YWJhc2VJZCA9
IGluX2RhdGFiYXNlSWQ7Ci0gICAgTlNTdHJpbmcgKm9faW5fcXVlcnkgPSBpbl9xdWVyeTsKLQot
ICAgIFttX2RlbGVnYXRlIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNXaXRoRXJy
b3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2sg
ZGF0YWJhc2VJZDpvX2luX2RhdGFiYXNlSWQgcXVlcnk6b19pbl9xdWVyeV07Ci19Ci0KLXZvaWQg
T2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxBc3luY09w
dGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVzdElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29u
c3QgU3RyaW5nJiBpbl9xdWVyeSkKLXsKLSAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9T
ZWxlY3RvcjpAc2VsZWN0b3IoZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNXaXRo
RXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6ZGF0YWJhc2VJZDpxdWVyeTopXSkgewotICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwg
QmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RhdGFiYXNlLmV4ZWN1dGVTUUxB
c3luY09wdGlvbmFsUmV0dXJuVmFsdWVzJyB3YXMgbm90IGZvdW5kIl9zKTsKLSAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwg
QmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7Ci0gICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgfTsKLQotICAgIGlkIHN1Y2Nl
c3NDYWxsYmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiovICoqY29sdW1uTmFtZXMsIE5TU3Ry
aW5nICoqbm90ZXMsIGRvdWJsZSAqdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKip2
YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnBheWxvYWQsIGludCAqZGF0YWJhc2VJZCwg
VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFz
ZVByaW1hcnlDb2xvcnMgKnNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiphbHRl
cm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxS
ZXR1cm5WYWx1ZXNQcmludENvbG9yICpwcmludENvbG9yKSB7Ci0gICAgICAgIFJlZjxKU09OOjpP
YmplY3Q+IHJlc3VsdE9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihjb2x1bW5OYW1lcywgQCJj
b2x1bW5OYW1lcyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9Q
QVJBTUVURVIobm90ZXMsIEAibm90ZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9C
QURfT1BUSU9OQUxfUEFSQU1FVEVSKHZhbHVlcywgQCJ2YWx1ZXMiKTsKLSAgICAgICAgVEhST1df
RVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHBheWxvYWQsIEAicGF5bG9hZCIp
OwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoc3Fs
RXJyb3IsIEAic3FsRXJyb3IiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BU
SU9OQUxfUEFSQU1FVEVSKGFsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsKLSAg
ICAgICAgaWYgKGNvbHVtbk5hbWVzKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJh
eSgiY29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KCpjb2x1bW5OYW1lcykpOwotICAg
ICAgICBpZiAobm90ZXMpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygibm90
ZXMiX3MsICpub3Rlcyk7Ci0gICAgICAgIGlmICh0aW1lc3RhbXApCi0gICAgICAgICAgICByZXN1
bHRPYmplY3QtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCAqdGltZXN0YW1wKTsKLSAgICAgICAg
aWYgKHZhbHVlcykKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMi
X3MsIFsqdmFsdWVzIHRvSlNPTk9iamVjdF0pOwotICAgICAgICBpZiAocGF5bG9hZCkKLSAgICAg
ICAgICAgIHJlc3VsdE9iamVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFsqcGF5bG9hZCB0b0pT
T05PYmplY3RdKTsKLSAgICAgICAgaWYgKGRhdGFiYXNlSWQpCi0gICAgICAgICAgICByZXN1bHRP
YmplY3QtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsICpkYXRhYmFzZUlkKTsKLSAgICAgICAg
aWYgKHNxbEVycm9yKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInNxbEVy
cm9yIl9zLCBbKnNxbEVycm9yIHRvSlNPTk9iamVjdF0pOwotICAgICAgICBpZiAoc2NyZWVuQ29s
b3IpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3Ms
IHRvUHJvdG9jb2xTdHJpbmcoKnNjcmVlbkNvbG9yKSk7Ci0gICAgICAgIGlmIChhbHRlcm5hdGVD
b2xvcnMpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xv
cnMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KCphbHRlcm5hdGVDb2xvcnMpKTsKLSAgICAgICAgaWYg
KHByaW50Q29sb3IpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygicHJpbnRD
b2xvciJfcywgdG9Qcm90b2NvbFN0cmluZygqcHJpbnRDb2xvcikpOwotICAgICAgICBiYWNrZW5k
RGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdE9iamVj
dCksIGZhbHNlKTsKLSAgICB9OwotCi0gICAgaW50IG9faW5fZGF0YWJhc2VJZCA9IGluX2RhdGFi
YXNlSWQ7Ci0gICAgTlNTdHJpbmcgKm9faW5fcXVlcnkgPSBpbl9xdWVyeTsKLQotICAgIFttX2Rl
bGVnYXRlIGV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzV2l0aEVycm9yQ2FsbGJh
Y2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNl
SWQ6b19pbl9kYXRhYmFzZUlkIHF1ZXJ5Om9faW5fcXVlcnldOwotfQotCi12b2lkIE9iakNJbnNw
ZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMU3luYyhsb25nIHJlcXVl
c3RJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpCi17Ci0gICAg
aWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGV4ZWN1dGVTUUxT
eW5jV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOmRhdGFiYXNlSWQ6cXVlcnk6KV0p
IHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1
ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS5leGVj
dXRlU1FMU3luYycgd2FzIG5vdCBmb3VuZCJfcyk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVy
KCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBp
ZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRj
aGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5z
ZW5kUGVuZGluZ0Vycm9ycygpOwotICAgIH07Ci0KLSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBe
KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqY29sdW1uTmFtZXMsIE5TU3RyaW5nICpub3RlcywgZG91
YmxlIHRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICp2YWx1ZXMsIFJXSVByb3RvY29s
SlNPTk9iamVjdCAqcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNl
RXJyb3IgKnNxbEVycm9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmFsdGVybmF0ZUNvbG9ycywg
VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzIHNjcmVlbkNvbG9yLCBUZXN0UHJvdG9j
b2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvciBwcmludENvbG9yKSB7Ci0gICAgICAg
IFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdE9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKGNvbHVtbk5h
bWVzLCBAImNvbHVtbk5hbWVzIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlS
RURfUEFSQU1FVEVSKG5vdGVzLCBAIm5vdGVzIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfUkVRVUlSRURfUEFSQU1FVEVSKHZhbHVlcywgQCJ2YWx1ZXMiKTsKLSAgICAgICAgVEhST1df
RVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIocGF5bG9hZCwgQCJwYXlsb2FkIik7Ci0g
ICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHNxbEVycm9yLCBA
InNxbEVycm9yIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1F
VEVSKGFsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsKLSAgICAgICAgcmVzdWx0
T2JqZWN0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KGNvbHVt
bk5hbWVzKSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJub3RlcyJfcywgbm90
ZXMpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCB0aW1l
c3RhbXApOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdCgidmFsdWVzIl9zLCBbdmFs
dWVzIHRvSlNPTk9iamVjdF0pOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldFZhbHVlKCJwYXls
b2FkIl9zLCBbcGF5bG9hZCB0b0pTT05PYmplY3RdKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5z
ZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCBkYXRhYmFzZUlkKTsKLSAgICAgICAgcmVzdWx0T2Jq
ZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBbc3FsRXJyb3IgdG9KU09OT2JqZWN0XSk7Ci0g
ICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgdG9KU09O
U3RyaW5nQXJyYXkoYWx0ZXJuYXRlQ29sb3JzKSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0
U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgdG9Qcm90b2NvbFN0cmluZyhzY3JlZW5Db2xvcikpOwot
ICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgdG9Qcm90b2Nv
bFN0cmluZyhwcmludENvbG9yKSk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRS
ZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0T2JqZWN0KSwgZmFsc2UpOwotICAgIH07
Ci0KLSAgICBpbnQgb19pbl9kYXRhYmFzZUlkID0gaW5fZGF0YWJhc2VJZDsKLSAgICBOU1N0cmlu
ZyAqb19pbl9xdWVyeSA9IGluX3F1ZXJ5OwotCi0gICAgW21fZGVsZWdhdGUgZXhlY3V0ZVNRTFN5
bmNXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNz
Q2FsbGJhY2sgZGF0YWJhc2VJZDpvX2luX2RhdGFiYXNlSWQgcXVlcnk6b19pbl9xdWVyeV07Ci19
Ci0KLXZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVT
UUxBc3luYyhsb25nIHJlcXVlc3RJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYg
aW5fcXVlcnkpCi17Ci0gICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNl
bGVjdG9yKGV4ZWN1dGVTUUxBc3luY1dpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazpk
YXRhYmFzZUlkOnF1ZXJ5OildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9y
dFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91
bmQsICInRGF0YWJhc2UuZXhlY3V0ZVNRTEFzeW5jJyB3YXMgbm90IGZvdW5kIl9zKTsKLSAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikg
ewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVl
c3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7Ci0gICAgICAgIGJh
Y2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgfTsKLQotICAgIGlk
IHN1Y2Nlc3NDYWxsYmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiovICpjb2x1bW5OYW1lcywg
TlNTdHJpbmcgKm5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3Qg
KnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwg
VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqc3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNl
UHJpbWFyeUNvbG9ycyBzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICphbHRlcm5h
dGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvciBw
cmludENvbG9yKSB7Ci0gICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdE9iamVjdCA9IEpT
T046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlS
RURfUEFSQU1FVEVSKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7Ci0gICAgICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG5vdGVzLCBAIm5vdGVzIik7Ci0gICAg
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHZhbHVlcywgQCJ2YWx1
ZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIocGF5
bG9hZCwgQCJwYXlsb2FkIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURf
UEFSQU1FVEVSKHNxbEVycm9yLCBAInNxbEVycm9yIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKGFsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xv
cnMiKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIHRv
SlNPTlN0cmluZ0FycmF5KGNvbHVtbk5hbWVzKSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0
U3RyaW5nKCJub3RlcyJfcywgbm90ZXMpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldERvdWJs
ZSgidGltZXN0YW1wIl9zLCB0aW1lc3RhbXApOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldE9i
amVjdCgidmFsdWVzIl9zLCBbdmFsdWVzIHRvSlNPTk9iamVjdF0pOwotICAgICAgICByZXN1bHRP
YmplY3QtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBbcGF5bG9hZCB0b0pTT05PYmplY3RdKTsKLSAg
ICAgICAgcmVzdWx0T2JqZWN0LT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCBkYXRhYmFzZUlk
KTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBbc3FsRXJy
b3IgdG9KU09OT2JqZWN0XSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJzY3Jl
ZW5Db2xvciJfcywgdG9Qcm90b2NvbFN0cmluZyhzY3JlZW5Db2xvcikpOwotICAgICAgICByZXN1
bHRPYmplY3QtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIHRvSlNPTlN0cmluZ0FycmF5
KGFsdGVybmF0ZUNvbG9ycykpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygicHJp
bnRDb2xvciJfcywgdG9Qcm90b2NvbFN0cmluZyhwcmludENvbG9yKSk7Ci0gICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0T2Jq
ZWN0KSwgZmFsc2UpOwotICAgIH07Ci0KLSAgICBpbnQgb19pbl9kYXRhYmFzZUlkID0gaW5fZGF0
YWJhc2VJZDsKLSAgICBOU1N0cmluZyAqb19pbl9xdWVyeSA9IGluX3F1ZXJ5OwotCi0gICAgW21f
ZGVsZWdhdGUgZXhlY3V0ZVNRTEFzeW5jV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBz
dWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNlSWQ6b19pbl9kYXRhYmFzZUlk
IHF1ZXJ5Om9faW5fcXVlcnldOwotfQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0j
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0
b3IvVGVzdFByb3RvY29sLmg+Ci0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0
IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKLUBw
cm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4sIHNldHRlcj1zZXREYXRhYmFzZUhhbmRsZXI6KSBp
ZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+IGRhdGFiYXNlSGFuZGxlcjsKLUBl
bmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbi5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5o
IgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jaW1wb3J0IDxK
YXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgotI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgotCi11
c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2Nv
bnRyb2xsZXI7Ci0gICAgaWQ8VGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyPiBfZGF0
YWJhc2VIYW5kbGVyOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihB
dWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBzZWxmID0g
W3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBB
U1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAgIHJl
dHVybiBzZWxmOwotfQotCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBbX2RhdGFiYXNlSGFuZGxl
ciByZWxlYXNlXTsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLS0gKHZvaWQpc2V0RGF0YWJh
c2VIYW5kbGVyOihpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+KWhhbmRsZXIK
LXsKLSAgICBpZiAoaGFuZGxlciA9PSBfZGF0YWJhc2VIYW5kbGVyKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBbX2RhdGFiYXNlSGFuZGxlciByZWxlYXNlXTsKLSAgICBfZGF0YWJhc2VIYW5kbGVy
ID0gW2hhbmRsZXIgcmV0YWluXTsKLQotICAgIGF1dG8gYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IG1h
a2VVbmlxdWU8T2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+KGhhbmRsZXIp
OwotICAgIGF1dG8gYWx0ZXJuYXRlQWdlbnQgPSBtYWtlVW5pcXVlPEFsdGVybmF0ZURpc3BhdGNo
YWJsZUFnZW50PERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIsIEFsdGVybmF0ZURhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXI+PigiRGF0YWJhc2UiX3MsICpfY29udHJvbGxlciwgV1RGTW92ZShhbHRl
cm5hdGVEaXNwYXRjaGVyKSk7Ci0gICAgX2NvbnRyb2xsZXItPmFwcGVuZEV4dHJhQWdlbnQoV1RG
TW92ZShhbHRlcm5hdGVBZ2VudCkpOwotfQotCi0tIChpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURv
bWFpbkhhbmRsZXI+KWRhdGFiYXNlSGFuZGxlcgotewotICAgIHJldHVybiBfZGF0YWJhc2VIYW5k
bGVyOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0
aW9uLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1t
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1h
dHRyaWJ1dGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5n
IG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVu
dERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRl
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9y
dCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQ
cm90b2NvbEpTT05PYmplY3QuaD4KLQotCi1AY2xhc3MgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJv
cjsKLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sUGxhdGZvcm0pIHsK
LSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbCwKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdl
bmVyaWMsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1JT1MsCi0gICAgVGVzdFByb3RvY29sUGxh
dGZvcm1NYWNPUywKLX07Ci0KLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3Rv
Y29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzKSB7Ci0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VQcmlt
YXJ5Q29sb3JzUmVkLAotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc0dyZWVu
LAotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc0JsdWUsCi19OwotCi10eXBl
ZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5j
T3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yKSB7Ci0gICAgVGVzdFByb3RvY29sRGF0YWJh
c2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvckN5YW4sCi0gICAg
VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJp
bnRDb2xvck1hZ2VudGEsCi0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09w
dGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvclllbGxvdywKLSAgICBUZXN0UHJvdG9jb2xEYXRh
YmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yQmxhY2ssCi19
OwotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvcikgewotICAgIFRlc3RQcm90
b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9y
Q3lhbiwKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0
dXJuVmFsdWVzUHJpbnRDb2xvck1hZ2VudGEsCi0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVj
dXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JZZWxsb3csCi0gICAgVGVz
dFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50
Q29sb3JCbGFjaywKLX07Ci0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2Nv
bERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yKSB7Ci0gICAgVGVzdFByb3RvY29sRGF0
YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3JDeWFuLAotICAgIFRlc3RQcm90b2NvbERhdGFi
YXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yTWFnZW50YSwKLSAgICBUZXN0UHJvdG9jb2xEYXRh
YmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvclllbGxvdywKLSAgICBUZXN0UHJvdG9jb2xEYXRh
YmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvckJsYWNrLAotfTsKLQotdHlwZWRlZiBOU19FTlVN
KE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9y
KSB7Ci0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yQ3lh
biwKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JNYWdl
bnRhLAotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvclll
bGxvdywKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JC
bGFjaywKLX07Ci0KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1A
aW50ZXJmYWNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgOiBSV0lQcm90b2NvbEpTT05PYmpl
Y3QKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmlu
ZyAqLCBpZD4gKilwYXlsb2FkOwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmpl
Y3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7Ci0tIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZTooaW50KWNvZGU7Ci0vKiBy
ZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKm1lc3NhZ2U7
Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQgY29kZTsK
LUBlbmQKLQotQHByb3RvY29sIFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlciA8TlNP
YmplY3Q+Ci1Ab3B0aW9uYWwKLS0gKHZvaWQpZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZh
bHVlc1dpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxs
YmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoTlNBcnJheS8qPE5TU3RyaW5nPiovICoqY29s
dW1uTmFtZXMsIE5TU3RyaW5nICoqbm90ZXMsIGRvdWJsZSAqdGltZXN0YW1wLCBSV0lQcm90b2Nv
bEpTT05PYmplY3QgKip2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnBheWxvYWQsIGlu
dCAqZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKnNxbEVycm9yLCBUZXN0
UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgKnNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNT
dHJpbmc+Ki8gKiphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNR
TFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3IgKnByaW50Q29sb3IpKXN1Y2Nlc3ND
YWxsYmFjayBkYXRhYmFzZUlkOihpbnQpZGF0YWJhc2VJZCBxdWVyeTooTlNTdHJpbmcgKilxdWVy
eTsKLS0gKHZvaWQpZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNXaXRoRXJyb3JD
YWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0Nh
bGxiYWNrOih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmNvbHVtbk5hbWVzLCBOU1N0
cmluZyAqKm5vdGVzLCBkb3VibGUgKnRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoq
dmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipwYXlsb2FkLCBpbnQgKmRhdGFiYXNlSWQs
IFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJh
c2VQcmltYXJ5Q29sb3JzICpzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICoqYWx0
ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFs
UmV0dXJuVmFsdWVzUHJpbnRDb2xvciAqcHJpbnRDb2xvcikpc3VjY2Vzc0NhbGxiYWNrIGRhdGFi
YXNlSWQ6KGludClkYXRhYmFzZUlkIHF1ZXJ5OihOU1N0cmluZyAqKXF1ZXJ5OwotLSAodm9pZCll
eGVjdXRlU1FMU3luY1dpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikp
ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoTlNBcnJheS8qPE5TU3RyaW5n
PiovICpjb2x1bW5OYW1lcywgTlNTdHJpbmcgKm5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSV0lQ
cm90b2NvbEpTT05PYmplY3QgKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2Fk
LCBpbnQgZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqc3FsRXJyb3IsIE5T
QXJyYXkvKjxOU1N0cmluZz4qLyAqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFz
ZVByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNR
TFN5bmNQcmludENvbG9yIHByaW50Q29sb3IpKXN1Y2Nlc3NDYWxsYmFjayBkYXRhYmFzZUlkOihp
bnQpZGF0YWJhc2VJZCBxdWVyeTooTlNTdHJpbmcgKilxdWVyeTsKLS0gKHZvaWQpZXhlY3V0ZVNR
TEFzeW5jV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNh
bGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKShOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmNv
bHVtbk5hbWVzLCBOU1N0cmluZyAqbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJXSVByb3RvY29s
SlNPTk9iamVjdCAqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnBheWxvYWQsIGludCBk
YXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpzcWxFcnJvciwgVGVzdFByb3Rv
Y29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzIHNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+
Ki8gKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQ
cmludENvbG9yIHByaW50Q29sb3IpKXN1Y2Nlc3NDYWxsYmFjayBkYXRhYmFzZUlkOihpbnQpZGF0
YWJhc2VJZCBxdWVyeTooTlNTdHJpbmcgKilxdWVyeTsKLUBlbmQKLQotCi0KLQotI2ltcG9ydCA8
V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgotCi0j
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xJbnRlcm5hbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMt
d2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90
b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50
YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0K
LQotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2Nv
bC5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5o
PgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1U
eXBlPgotT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3Ry
aW5nJiB2YWx1ZSk7Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9j
b2xQbGF0Zm9ybSB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQ
cm90b2NvbFBsYXRmb3JtQWxsOgotICAgICAgICByZXR1cm4gImFsbCJfczsKLSAgICBjYXNlIFRl
c3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzoKLSAgICAgICAgcmV0dXJuICJnZW5lcmljIl9zOwot
ICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1JT1M6Ci0gICAgICAgIHJldHVybiAiaW9zIl9z
OwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzoKLSAgICAgICAgcmV0dXJuICJt
YWNvcyJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJv
dG9jb2xQbGF0Zm9ybT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17
Ci0gICAgaWYgKHZhbHVlID09ICJhbGwiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxh
dGZvcm1BbGw7Ci0gICAgaWYgKHZhbHVlID09ICJnZW5lcmljIikKLSAgICAgICAgcmV0dXJuIFRl
c3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzsKLSAgICBpZiAodmFsdWUgPT0gImlvcyIpCi0gICAg
ICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzsKLSAgICBpZiAodmFsdWUgPT0gIm1h
Y29zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M7Ci0gICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmco
VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzIHZhbHVlKQotewotICAgIHN3aXRjaCh2
YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzUmVkOgot
ICAgICAgICByZXR1cm4gInJlZCJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlUHJp
bWFyeUNvbG9yc0dyZWVuOgotICAgICAgICByZXR1cm4gImdyZWVuIl9zOwotICAgIGNhc2UgVGVz
dFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzQmx1ZToKLSAgICAgICAgcmV0dXJuICJibHVl
Il9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2Nv
bERhdGFiYXNlUHJpbWFyeUNvbG9ycz4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYg
dmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJyZWQiKQotICAgICAgICByZXR1cm4gVGVzdFBy
b3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzUmVkOwotICAgIGlmICh2YWx1ZSA9PSAiZ3JlZW4i
KQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzR3JlZW47
Ci0gICAgaWYgKHZhbHVlID09ICJibHVlIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERh
dGFiYXNlUHJpbWFyeUNvbG9yc0JsdWU7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQot
aW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0
ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3IgdmFsdWUpCi17Ci0gICAgc3dp
dGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5j
T3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yQ3lhbjoKLSAgICAgICAgcmV0dXJuICJjeWFu
Il9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFs
UmV0dXJuVmFsdWVzUHJpbnRDb2xvck1hZ2VudGE6Ci0gICAgICAgIHJldHVybiAibWFnZW50YSJf
czsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJl
dHVyblZhbHVlc1ByaW50Q29sb3JZZWxsb3c6Ci0gICAgICAgIHJldHVybiAieWVsbG93Il9zOwot
ICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJu
VmFsdWVzUHJpbnRDb2xvckJsYWNrOgotICAgICAgICByZXR1cm4gImJsYWNrIl9zOwotICAgIH0K
LX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlRXhl
Y3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3I+IGZyb21Qcm90b2NvbFN0
cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiY3lhbiIpCi0g
ICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxS
ZXR1cm5WYWx1ZXNQcmludENvbG9yQ3lhbjsKLSAgICBpZiAodmFsdWUgPT0gIm1hZ2VudGEiKQot
ICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFs
UmV0dXJuVmFsdWVzUHJpbnRDb2xvck1hZ2VudGE7Ci0gICAgaWYgKHZhbHVlID09ICJ5ZWxsb3ci
KQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlv
bmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvclllbGxvdzsKLSAgICBpZiAodmFsdWUgPT0gImJsYWNr
IikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRp
b25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JCbGFjazsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwotfQotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sRGF0YWJh
c2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3IgdmFsdWUpCi17
Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvckN5YW46Ci0gICAgICAgIHJl
dHVybiAiY3lhbiJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFz
eW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yTWFnZW50YToKLSAgICAgICAgcmV0dXJu
ICJtYWdlbnRhIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5
bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JZZWxsb3c6Ci0gICAgICAgIHJldHVybiAi
eWVsbG93Il9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNP
cHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JCbGFjazoKLSAgICAgICAgcmV0dXJuICJibGFj
ayJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJvdG9j
b2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvcj4g
ZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVl
ID09ICJjeWFuIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNR
TEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yQ3lhbjsKLSAgICBpZiAodmFsdWUg
PT0gIm1hZ2VudGEiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRl
U1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JNYWdlbnRhOwotICAgIGlmICh2
YWx1ZSA9PSAieWVsbG93IikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhl
Y3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yWWVsbG93OwotICAgIGlm
ICh2YWx1ZSA9PSAiYmxhY2siKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VF
eGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JCbGFjazsKLSAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmco
VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3IgdmFsdWUpCi17Ci0g
ICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVT
UUxTeW5jUHJpbnRDb2xvckN5YW46Ci0gICAgICAgIHJldHVybiAiY3lhbiJfczsKLSAgICBjYXNl
IFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yTWFnZW50YToKLSAg
ICAgICAgcmV0dXJuICJtYWdlbnRhIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VF
eGVjdXRlU1FMU3luY1ByaW50Q29sb3JZZWxsb3c6Ci0gICAgICAgIHJldHVybiAieWVsbG93Il9z
OwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3JC
bGFjazoKLSAgICAgICAgcmV0dXJuICJibGFjayJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4K
LWlubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRD
b2xvcj4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYg
KHZhbHVlID09ICJjeWFuIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhl
Y3V0ZVNRTFN5bmNQcmludENvbG9yQ3lhbjsKLSAgICBpZiAodmFsdWUgPT0gIm1hZ2VudGEiKQot
ICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29s
b3JNYWdlbnRhOwotICAgIGlmICh2YWx1ZSA9PSAieWVsbG93IikKLSAgICAgICAgcmV0dXJuIFRl
c3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yWWVsbG93OwotICAgIGlm
ICh2YWx1ZSA9PSAiYmxhY2siKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VF
eGVjdXRlU1FMU3luY1ByaW50Q29sb3JCbGFjazsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0Owot
fQotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sRGF0YWJhc2VF
eGVjdXRlU1FMQXN5bmNQcmludENvbG9yIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewot
ICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yQ3lh
bjoKLSAgICAgICAgcmV0dXJuICJjeWFuIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJh
c2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yTWFnZW50YToKLSAgICAgICAgcmV0dXJuICJtYWdl
bnRhIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmlu
dENvbG9yWWVsbG93OgotICAgICAgICByZXR1cm4gInllbGxvdyJfczsKLSAgICBjYXNlIFRlc3RQ
cm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvckJsYWNrOgotICAgICAgICBy
ZXR1cm4gImJsYWNrIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFs
PFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvcj4gZnJvbVByb3Rv
Y29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJjeWFu
IikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJp
bnRDb2xvckN5YW47Ci0gICAgaWYgKHZhbHVlID09ICJtYWdlbnRhIikKLSAgICAgICAgcmV0dXJu
IFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvck1hZ2VudGE7Ci0g
ICAgaWYgKHZhbHVlID09ICJ5ZWxsb3ciKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0
YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yWWVsbG93OwotICAgIGlmICh2YWx1ZSA9PSAi
YmxhY2siKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5
bmNQcmludENvbG9yQmxhY2s7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5t
bQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMt
YXR0cmlidXRlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0KLSNpbXBvcnQgIlRl
c3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgotI2ltcG9y
dCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLQotdXNpbmcg
bmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMgKERhdGFiYXNlRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZURhdGFiYXNlSWQ6KE5TTnVt
YmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotKyAodm9pZClfcGFyc2VQ
cmltYXJ5Q29sb3JzOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9h
ZDsKLSsgKHZvaWQpX3BhcnNlQ29sb3JMaXN0OihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopb3V0
VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZUVycm9yOihUZXN0
UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2Fk
OwotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMg
KERhdGFiYXNlRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZURhdGFiYXNlSWQ6KE5TTnVtYmVyICoq
KW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNOdW1iZXIgY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUg
PSAoTlNOdW1iZXIgKilwYXlsb2FkOwotfQotCi0rICh2b2lkKV9wYXJzZVByaW1hcnlDb2xvcnM6
KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKLSAg
ICBPcHRpb25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnM+IHJlc3VsdCA9IElu
c3BlY3Rvcjo6ZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNv
bG9ycz4ocGF5bG9hZCk7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfRU5VTV9WQUxVRShy
ZXN1bHQsIEAiUHJpbWFyeUNvbG9ycyIpOwotICAgICpvdXRWYWx1ZSA9IEAocmVzdWx0LnZhbHVl
KCkpOwotfQotCi0rICh2b2lkKV9wYXJzZUNvbG9yTGlzdDooTlNBcnJheS8qPE5TU3RyaW5nPiov
ICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNBcnJheS8qPE5TU3RyaW5nPiovIGNsYXNzXSk7
Ci0gICAgKm91dFZhbHVlID0gKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKXBheWxvYWQ7Ci19Ci0K
LSsgKHZvaWQpX3BhcnNlRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKiopb3V0VmFs
dWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JB
RF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSBb
W1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2Fk
XTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAi
VGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJp
dmF0ZS5oPgotI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFs
dWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotQGltcGxlbWVudGF0aW9u
IFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IKLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5
bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZAotewot
ICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0g
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AibWVzc2Fn
ZSJdLCBAIm1lc3NhZ2UiKTsKLSAgICBzZWxmLm1lc3NhZ2UgPSBwYXlsb2FkW0AibWVzc2FnZSJd
OwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0Ai
Y29kZSJdLCBAImNvZGUiKTsKLSAgICBzZWxmLmNvZGUgPSBbcGF5bG9hZFtAImNvZGUiXSBpbnRl
Z2VyVmFsdWVdOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopb2JqZWN0Ci17Ci0gICAg
aWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEpTT05PYmplY3Q6W29iamVjdCB0b0pTT05PYmpl
Y3RdLmdldCgpXSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0K
LQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlIGNv
ZGU6KGludCljb2RlCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAg
IHJldHVybiBuaWw7Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZ
KG1lc3NhZ2UsIEAibWVzc2FnZSIpOwotCi0gICAgc2VsZi5tZXNzYWdlID0gbWVzc2FnZTsKLSAg
ICBzZWxmLmNvZGUgPSBjb2RlOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpc2V0
TWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlCi17Ci0gICAgW3N1cGVyIHNldFN0cmluZzptZXNz
YWdlIGZvcktleTpAIm1lc3NhZ2UiXTsKLX0KLQotLSAoTlNTdHJpbmcgKiltZXNzYWdlCi17Ci0g
ICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJtZXNzYWdlIl07Ci19Ci0KLS0gKHZvaWQp
c2V0Q29kZTooaW50KWNvZGUKLXsKLSAgICBbc3VwZXIgc2V0SW50ZWdlcjpjb2RlIGZvcktleTpA
ImNvZGUiXTsKLX0KLQotLSAoaW50KWNvZGUKLXsKLSAgICByZXR1cm4gW3N1cGVyIGludGVnZXJG
b3JLZXk6QCJjb2RlIl07Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwt
cmV0dXJuLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9jb21tYW5kcy13aXRoLW9wdGlv
bmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDg1OTQxZWQ1MWYxLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9jb21tYW5k
cy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQKKysrIC9k
ZXYvbnVsbApAQCAtMSwxNjc0ICswLDAgQEAKLSMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNr
ZW5kQ29tbWFuZHMuanMKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5k
cy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0vLyBEYXRhYmFzZQotSW5zcGVjdG9yQmFj
a2VuZC5yZWdpc3RlckRvbWFpbigiRGF0YWJhc2UiLCBudWxsKTsKLUluc3BlY3RvckJhY2tlbmQu
cmVnaXN0ZXJFbnVtKCJEYXRhYmFzZS5QcmltYXJ5Q29sb3JzIiwge1JlZDogInJlZCIsIEdyZWVu
OiAiZ3JlZW4iLCBCbHVlOiAiYmx1ZSJ9KTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21t
YW5kKCJEYXRhYmFzZS5leGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzIiwgbnVsbCwgW3sibmFt
ZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRydWV9LCB7
Im5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVlfSwgeyJu
YW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6IHRydWV9LCB7
Im5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZX0sIHsi
bmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZX0sIHsi
bmFtZSI6ICJkYXRhYmFzZUlkIiwgInR5cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFsIjogdHJ1ZX0s
IHsibmFtZSI6ICJzcWxFcnJvciIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRydWV9
LCB7Im5hbWUiOiAic2NyZWVuQ29sb3IiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0
cnVlfSwgeyJuYW1lIjogImFsdGVybmF0ZUNvbG9ycyIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRp
b25hbCI6IHRydWV9LCB7Im5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmluZyIsICJv
cHRpb25hbCI6IHRydWV9XSwgWyJjb2x1bW5OYW1lcyIsICJub3RlcyIsICJ0aW1lc3RhbXAiLCAi
dmFsdWVzIiwgInBheWxvYWQiLCAiZGF0YWJhc2VJZCIsICJzcWxFcnJvciIsICJzY3JlZW5Db2xv
ciIsICJhbHRlcm5hdGVDb2xvcnMiLCAicHJpbnRDb2xvciJdKTsKLUluc3BlY3RvckJhY2tlbmQu
cmVnaXN0ZXJDb21tYW5kKCJEYXRhYmFzZS5leGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMiLCBu
dWxsLCBbeyJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAib2JqZWN0In0sIHsibmFtZSI6
ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyJ9LCB7Im5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUi
OiAibnVtYmVyIn0sIHsibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QifSwgeyJuYW1l
IjogInBheWxvYWQiLCAidHlwZSI6ICJvYmplY3QifSwgeyJuYW1lIjogImRhdGFiYXNlSWQiLCAi
dHlwZSI6ICJudW1iZXIifSwgeyJuYW1lIjogInNxbEVycm9yIiwgInR5cGUiOiAib2JqZWN0In0s
IHsibmFtZSI6ICJzY3JlZW5Db2xvciIsICJ0eXBlIjogInN0cmluZyJ9LCB7Im5hbWUiOiAiYWx0
ZXJuYXRlQ29sb3JzIiwgInR5cGUiOiAib2JqZWN0In0sIHsibmFtZSI6ICJwcmludENvbG9yIiwg
InR5cGUiOiAic3RyaW5nIn1dLCBbImNvbHVtbk5hbWVzIiwgIm5vdGVzIiwgInRpbWVzdGFtcCIs
ICJ2YWx1ZXMiLCAicGF5bG9hZCIsICJkYXRhYmFzZUlkIiwgInNxbEVycm9yIiwgInNjcmVlbkNv
bG9yIiwgImFsdGVybmF0ZUNvbG9ycyIsICJwcmludENvbG9yIl0pOwotSW5zcGVjdG9yQmFja2Vu
ZC5hY3RpdmF0ZURvbWFpbigiRGF0YWJhc2UiLCBudWxsKTsKLSMjIyBFbmQgRmlsZTogSW5zcGVj
dG9yQmFja2VuZENvbW1hbmRzLmpzCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21t
YW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi0jaW5jbHVkZSAiVGVzdFBy
b3RvY29sVHlwZXMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5k
Um91dGVyLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihS
ZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRj
aGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQotICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNr
ZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7
IH0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNw
YXRjaGVyOwotfTsKLQotCi1jbGFzcyBBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
IDogcHVibGljIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2aXJ0
dWFsIH5BbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKCkgeyB9Ci0gICAgdmlydHVh
bCB2b2lkIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyBjYWxsSWQsIGNvbnN0IEpT
T046OkFycmF5KiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nKiBpbl9ub3RlcywgY29uc3Qg
ZG91YmxlKiBpbl90aW1lc3RhbXAsIGNvbnN0IEpTT046Ok9iamVjdCogaW5fdmFsdWVzLCBjb25z
dCBKU09OOjpWYWx1ZSogaW5fcGF5bG9hZCwgY29uc3QgaW50KiBpbl9kYXRhYmFzZUlkLCBjb25z
dCBKU09OOjpPYmplY3QqIGluX3NxbEVycm9yLCBjb25zdCBTdHJpbmcqIGluX3NjcmVlbkNvbG9y
LCBjb25zdCBKU09OOjpBcnJheSogaW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcqIGlu
X3ByaW50Q29sb3IpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZU5vT3B0aW9uYWxQYXJh
bWV0ZXJzKGxvbmcgY2FsbElkLCBjb25zdCBKU09OOjpBcnJheSYgaW5fY29sdW1uTmFtZXMsIGNv
bnN0IFN0cmluZyYgaW5fbm90ZXMsIGRvdWJsZSBpbl90aW1lc3RhbXAsIGNvbnN0IEpTT046Ok9i
amVjdCYgaW5fdmFsdWVzLCBKU09OOjpWYWx1ZSBpbl9wYXlsb2FkLCBpbnQgaW5fZGF0YWJhc2VJ
ZCwgY29uc3QgSlNPTjo6T2JqZWN0JiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nJiBpbl9zY3Jl
ZW5Db2xvciwgY29uc3QgSlNPTjo6QXJyYXkmIGluX2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3Ry
aW5nJiBpbl9wcmludENvbG9yKSA9IDA7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
LQotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotIyMj
IEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEg
b25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10eXBlZGVmIFN0cmlu
ZyBFcnJvclN0cmluZzsKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENI
RVJTKQotY2xhc3MgQWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjsKLSNlbmRpZiAv
LyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQotY2xhc3MgRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewotcHVibGljOgotICAgIC8vIE5hbWVkIGFmdGVy
IHBhcmFtZXRlciAncHJpbnRDb2xvcicgd2hpbGUgZ2VuZXJhdGluZyBjb21tYW5kL2V2ZW50IGV4
ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMuCi0gICAgZW51bSBjbGFzcyBQcmludENvbG9yIHsK
LSAgICAgICAgQ3lhbiA9IDMsCi0gICAgICAgIE1hZ2VudGEgPSA0LAotICAgICAgICBZZWxsb3cg
PSA1LAotICAgICAgICBCbGFjayA9IDYsCi0gICAgfTsgLy8gZW51bSBjbGFzcyBQcmludENvbG9y
Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMoRXJyb3JTdHJp
bmcmLCBjb25zdCBKU09OOjpBcnJheSogb3B0X2luX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcq
IG9wdF9pbl9ub3RlcywgY29uc3QgZG91YmxlKiBvcHRfaW5fdGltZXN0YW1wLCBjb25zdCBKU09O
OjpPYmplY3QqIG9wdF9pbl92YWx1ZXMsIGNvbnN0IEpTT046OlZhbHVlKiBvcHRfaW5fcGF5bG9h
ZCwgY29uc3QgaW50KiBvcHRfaW5fZGF0YWJhc2VJZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRf
aW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyogb3B0X2luX3NjcmVlbkNvbG9yLCBjb25zdCBKU09O
OjpBcnJheSogb3B0X2luX2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nKiBvcHRfaW5fcHJp
bnRDb2xvciwgUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mIG9wdF9vdXRfY29sdW1uTmFt
ZXMsIE9wdGlvbmFsPFN0cmluZz4mIG9wdF9vdXRfbm90ZXMsIE9wdGlvbmFsPGRvdWJsZT4mIG9w
dF9vdXRfdGltZXN0YW1wLCBPcHRpb25hbDxKU09OOjpPYmplY3Q+JiBvcHRfb3V0X3ZhbHVlcywg
T3B0aW9uYWw8SlNPTjo6VmFsdWU+JiBvcHRfb3V0X3BheWxvYWQsIE9wdGlvbmFsPGludD4mIG9w
dF9vdXRfZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpF
cnJvcj4mIG9wdF9vdXRfc3FsRXJyb3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQ
cmltYXJ5Q29sb3JzKiBvcHRfb3V0X3NjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4mIG9wdF9vdXRfYWx0ZXJuYXRlQ29sb3JzLCBEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciogb3B0X291dF9wcmludENv
bG9yKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhF
cnJvclN0cmluZyYsIGNvbnN0IEpTT046OkFycmF5JiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3Ry
aW5nJiBpbl9ub3RlcywgZG91YmxlIGluX3RpbWVzdGFtcCwgY29uc3QgSlNPTjo6T2JqZWN0JiBp
bl92YWx1ZXMsIEpTT046OlZhbHVlIGluX3BheWxvYWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25z
dCBKU09OOjpPYmplY3QmIGluX3NxbEVycm9yLCBjb25zdCBTdHJpbmcmIGluX3NjcmVlbkNvbG9y
LCBjb25zdCBKU09OOjpBcnJheSYgaW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcmIGlu
X3ByaW50Q29sb3IsIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiBvdXRfY29sdW1uTmFt
ZXMsIFN0cmluZyogb3V0X25vdGVzLCBkb3VibGUqIG91dF90aW1lc3RhbXAsIEpTT046Ok9iamVj
dCogb3V0X3ZhbHVlcywgSlNPTjo6VmFsdWUqIG91dF9wYXlsb2FkLCBpbnQqIG91dF9kYXRhYmFz
ZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYgb3V0X3Nx
bEVycm9yLCBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyogb3V0
X3NjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9y
TGlzdD4mIG91dF9hbHRlcm5hdGVDb2xvcnMsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyOjpQcmludENvbG9yKiBvdXRfcHJpbnRDb2xvcikgPSAwOwotcHJvdGVjdGVkOgotICAgIHZp
cnR1YWwgfkRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7Ci19OwotCi1jbGFzcyBE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tl
bmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPERhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIERhdGFiYXNlQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyKik7Ci0gICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3Qg
U3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkgZmluYWw7Ci1wcml2
YXRlOgotICAgIHZvaWQgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhsb25nIHJlcXVlc3RJ
ZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKLSAgICB2b2lkIGV4ZWN1dGVO
b09wdGlvbmFsUGFyYW1ldGVycyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4m
JiBwYXJhbWV0ZXJzKTsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKLXB1YmxpYzoKLSAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVybmF0
ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9Ci1wcml2YXRlOgotICAgIEFsdGVy
bmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIqIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciB7IG51
bGxwdHIgfTsKLSNlbmRpZgotcHJpdmF0ZToKLSAgICBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
KEJhY2tlbmREaXNwYXRjaGVyJiwgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsK
LSAgICBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2VudCB7IG51bGxwdHIg
fTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0QmFj
a2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hl
cnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1v
cHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRl
c3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNs
dWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSNpbmNsdWRl
ICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNl
IEluc3BlY3RvciB7Ci0KLURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+RGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KLQotUmVmPERhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXI+IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShCYWNrZW5kRGlzcGF0
Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
KiBhZ2VudCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOwotfQotCi1EYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVyOjpEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBi
YWNrZW5kRGlzcGF0Y2hlciwgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50
KQotICAgIDogU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIp
Ci0gICAgLCBtX2FnZW50KGFnZW50KQotewotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lz
dGVyRGlzcGF0Y2hlckZvckRvbWFpbigiRGF0YWJhc2UiX3MsIHRoaXMpOwotfQotCi12b2lkIERh
dGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBT
dHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQotewotICAgIFJlZjxE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKLQotICAgIFJlZlB0cjxK
U09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMi
X3MsIHBhcmFtZXRlcnMpOwotCi0gICAgaWYgKG1ldGhvZCA9PSAiZXhlY3V0ZUFsbE9wdGlvbmFs
UGFyYW1ldGVycyIpCi0gICAgICAgIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMocmVxdWVz
dElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKLSAgICBlbHNlIGlmIChtZXRob2QgPT0gImV4ZWN1
dGVOb09wdGlvbmFsUGFyYW1ldGVycyIpCi0gICAgICAgIGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1l
dGVycyhyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOwotICAgIGVsc2UKLSAgICAgICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hl
cjo6TWV0aG9kTm90Rm91bmQsICInRGF0YWJhc2UuIiArIG1ldGhvZCArICInIHdhcyBub3QgZm91
bmQiKTsKLX0KLQotdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlQWxsT3B0
aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBh
cmFtZXRlcnMpCi17Ci0gICAgYm9vbCBvcHRfaW5fY29sdW1uTmFtZXNfdmFsdWVGb3VuZCA9IGZh
bHNlOwotICAgIFJlZlB0cjxKU09OOjpBcnJheT4gb3B0X2luX2NvbHVtbk5hbWVzID0gbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+Z2V0QXJyYXkocGFyYW1ldGVycy5nZXQoKSwgImNvbHVtbk5hbWVzIl9z
LCAmb3B0X2luX2NvbHVtbk5hbWVzX3ZhbHVlRm91bmQpOwotICAgIGJvb2wgb3B0X2luX25vdGVz
X3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAgICBTdHJpbmcgb3B0X2luX25vdGVzID0gbV9iYWNrZW5k
RGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksICJub3RlcyJfcywgJm9wdF9p
bl9ub3Rlc192YWx1ZUZvdW5kKTsKLSAgICBib29sIG9wdF9pbl90aW1lc3RhbXBfdmFsdWVGb3Vu
ZCA9IGZhbHNlOwotICAgIGRvdWJsZSBvcHRfaW5fdGltZXN0YW1wID0gbV9iYWNrZW5kRGlzcGF0
Y2hlci0+Z2V0RG91YmxlKHBhcmFtZXRlcnMuZ2V0KCksICJ0aW1lc3RhbXAiX3MsICZvcHRfaW5f
dGltZXN0YW1wX3ZhbHVlRm91bmQpOwotICAgIGJvb2wgb3B0X2luX3ZhbHVlc192YWx1ZUZvdW5k
ID0gZmFsc2U7Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gb3B0X2luX3ZhbHVlcyA9IG1fYmFj
a2VuZERpc3BhdGNoZXItPmdldE9iamVjdChwYXJhbWV0ZXJzLmdldCgpLCAidmFsdWVzIl9zLCAm
b3B0X2luX3ZhbHVlc192YWx1ZUZvdW5kKTsKLSAgICBib29sIG9wdF9pbl9wYXlsb2FkX3ZhbHVl
Rm91bmQgPSBmYWxzZTsKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IG9wdF9pbl9wYXlsb2FkID0g
bV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0VmFsdWUocGFyYW1ldGVycy5nZXQoKSwgInBheWxvYWQi
X3MsICZvcHRfaW5fcGF5bG9hZF92YWx1ZUZvdW5kKTsKLSAgICBib29sIG9wdF9pbl9kYXRhYmFz
ZUlkX3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAgICBpbnQgb3B0X2luX2RhdGFiYXNlSWQgPSBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5nZXRJbnRlZ2VyKHBhcmFtZXRlcnMuZ2V0KCksICJkYXRhYmFzZUlk
Il9zLCAmb3B0X2luX2RhdGFiYXNlSWRfdmFsdWVGb3VuZCk7Ci0gICAgYm9vbCBvcHRfaW5fc3Fs
RXJyb3JfdmFsdWVGb3VuZCA9IGZhbHNlOwotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG9wdF9p
bl9zcWxFcnJvciA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldE9iamVjdChwYXJhbWV0ZXJzLmdl
dCgpLCAic3FsRXJyb3IiX3MsICZvcHRfaW5fc3FsRXJyb3JfdmFsdWVGb3VuZCk7Ci0gICAgYm9v
bCBvcHRfaW5fc2NyZWVuQ29sb3JfdmFsdWVGb3VuZCA9IGZhbHNlOwotICAgIFN0cmluZyBvcHRf
aW5fc2NyZWVuQ29sb3IgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVy
cy5nZXQoKSwgInNjcmVlbkNvbG9yIl9zLCAmb3B0X2luX3NjcmVlbkNvbG9yX3ZhbHVlRm91bmQp
OwotICAgIGJvb2wgb3B0X2luX2FsdGVybmF0ZUNvbG9yc192YWx1ZUZvdW5kID0gZmFsc2U7Ci0g
ICAgUmVmUHRyPEpTT046OkFycmF5PiBvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzID0gbV9iYWNrZW5k
RGlzcGF0Y2hlci0+Z2V0QXJyYXkocGFyYW1ldGVycy5nZXQoKSwgImFsdGVybmF0ZUNvbG9ycyJf
cywgJm9wdF9pbl9hbHRlcm5hdGVDb2xvcnNfdmFsdWVGb3VuZCk7Ci0gICAgYm9vbCBvcHRfaW5f
cHJpbnRDb2xvcl92YWx1ZUZvdW5kID0gZmFsc2U7Ci0gICAgU3RyaW5nIG9wdF9pbl9wcmludENv
bG9yID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksICJw
cmludENvbG9yIl9zLCAmb3B0X2luX3ByaW50Q29sb3JfdmFsdWVGb3VuZCk7Ci0gICAgaWYgKG1f
YmFja2VuZERpc3BhdGNoZXItPmhhc1Byb3RvY29sRXJyb3JzKCkpIHsKLSAgICAgICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52
YWxpZFBhcmFtcywgIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnRGF0YWJhc2UuZXhlY3V0ZUFs
bE9wdGlvbmFsUGFyYW1ldGVycycgY2FuJ3QgYmUgcHJvY2Vzc2VkIl9zKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQotICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVE
aXNwYXRjaGVyLT5leGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKHJlcXVlc3RJZCwgb3B0X2lu
X2NvbHVtbk5hbWVzX3ZhbHVlRm91bmQgPyBvcHRfaW5fY29sdW1uTmFtZXMuZ2V0KCkgOiBudWxs
cHRyLCBvcHRfaW5fbm90ZXNfdmFsdWVGb3VuZCA/ICZvcHRfaW5fbm90ZXMgOiBudWxscHRyLCBv
cHRfaW5fdGltZXN0YW1wX3ZhbHVlRm91bmQgPyAmb3B0X2luX3RpbWVzdGFtcCA6IG51bGxwdHIs
IG9wdF9pbl92YWx1ZXNfdmFsdWVGb3VuZCA/IG9wdF9pbl92YWx1ZXMuZ2V0KCkgOiBudWxscHRy
LCBvcHRfaW5fcGF5bG9hZF92YWx1ZUZvdW5kID8gb3B0X2luX3BheWxvYWQuZ2V0KCkgOiBudWxs
cHRyLCBvcHRfaW5fZGF0YWJhc2VJZF92YWx1ZUZvdW5kID8gJm9wdF9pbl9kYXRhYmFzZUlkIDog
bnVsbHB0ciwgb3B0X2luX3NxbEVycm9yX3ZhbHVlRm91bmQgPyBvcHRfaW5fc3FsRXJyb3IuZ2V0
KCkgOiBudWxscHRyLCBvcHRfaW5fc2NyZWVuQ29sb3JfdmFsdWVGb3VuZCA/ICZvcHRfaW5fc2Ny
ZWVuQ29sb3IgOiBudWxscHRyLCBvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzX3ZhbHVlRm91bmQgPyBv
cHRfaW5fYWx0ZXJuYXRlQ29sb3JzLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX3ByaW50Q29sb3Jf
dmFsdWVGb3VuZCA/ICZvcHRfaW5fcHJpbnRDb2xvciA6IG51bGxwdHIpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNP
Tjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIFJlZlB0cjxK
U09OOjpBcnJheU9mPFN0cmluZz4+IG91dF9jb2x1bW5OYW1lczsKLSAgICBPcHRpb25hbDxTdHJp
bmc+IG91dF9ub3RlczsKLSAgICBPcHRpb25hbDxkb3VibGU+IG91dF90aW1lc3RhbXA7Ci0gICAg
T3B0aW9uYWw8SlNPTjo6T2JqZWN0PiBvdXRfdmFsdWVzOwotICAgIE9wdGlvbmFsPEpTT046OlZh
bHVlPiBvdXRfcGF5bG9hZDsKLSAgICBPcHRpb25hbDxpbnQ+IG91dF9kYXRhYmFzZUlkOwotICAg
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IG91dF9zcWxFcnJv
cjsKLSAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyBvdXRf
c2NyZWVuQ29sb3I7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpD
b2xvckxpc3Q+IG91dF9hbHRlcm5hdGVDb2xvcnM7Ci0gICAgRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXI6OlByaW50Q29sb3Igb3V0X3ByaW50Q29sb3I7Ci0gICAgbV9hZ2VudC0+ZXhl
Y3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhlcnJvciwgb3B0X2luX2NvbHVtbk5hbWVzX3ZhbHVl
Rm91bmQgPyBvcHRfaW5fY29sdW1uTmFtZXMuZ2V0KCkgOiBudWxscHRyLCBvcHRfaW5fbm90ZXNf
dmFsdWVGb3VuZCA/ICZvcHRfaW5fbm90ZXMgOiBudWxscHRyLCBvcHRfaW5fdGltZXN0YW1wX3Zh
bHVlRm91bmQgPyAmb3B0X2luX3RpbWVzdGFtcCA6IG51bGxwdHIsIG9wdF9pbl92YWx1ZXNfdmFs
dWVGb3VuZCA/IG9wdF9pbl92YWx1ZXMuZ2V0KCkgOiBudWxscHRyLCBvcHRfaW5fcGF5bG9hZF92
YWx1ZUZvdW5kID8gb3B0X2luX3BheWxvYWQuZ2V0KCkgOiBudWxscHRyLCBvcHRfaW5fZGF0YWJh
c2VJZF92YWx1ZUZvdW5kID8gJm9wdF9pbl9kYXRhYmFzZUlkIDogbnVsbHB0ciwgb3B0X2luX3Nx
bEVycm9yX3ZhbHVlRm91bmQgPyBvcHRfaW5fc3FsRXJyb3IuZ2V0KCkgOiBudWxscHRyLCBvcHRf
aW5fc2NyZWVuQ29sb3JfdmFsdWVGb3VuZCA/ICZvcHRfaW5fc2NyZWVuQ29sb3IgOiBudWxscHRy
LCBvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzX3ZhbHVlRm91bmQgPyBvcHRfaW5fYWx0ZXJuYXRlQ29s
b3JzLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX3ByaW50Q29sb3JfdmFsdWVGb3VuZCA/ICZvcHRf
aW5fcHJpbnRDb2xvciA6IG51bGxwdHIsIG91dF9jb2x1bW5OYW1lcywgb3V0X25vdGVzLCBvdXRf
dGltZXN0YW1wLCBvdXRfdmFsdWVzLCBvdXRfcGF5bG9hZCwgb3V0X2RhdGFiYXNlSWQsIG91dF9z
cWxFcnJvciwgb3V0X3NjcmVlbkNvbG9yLCBvdXRfYWx0ZXJuYXRlQ29sb3JzLCBvdXRfcHJpbnRD
b2xvcik7Ci0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7Ci0gICAgICAgIGlmIChvdXRfY29s
dW1uTmFtZXMpCi0gICAgICAgICAgICByZXN1bHQtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywg
b3V0X2NvbHVtbk5hbWVzKTsKLSAgICAgICAgaWYgKG91dF9ub3Rlcy5oYXNWYWx1ZSgpKQotICAg
ICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCAqb3V0X25vdGVzKTsKLSAgICAg
ICAgaWYgKG91dF90aW1lc3RhbXAuaGFzVmFsdWUoKSkKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0
RG91YmxlKCJ0aW1lc3RhbXAiX3MsICpvdXRfdGltZXN0YW1wKTsKLSAgICAgICAgaWYgKG91dF92
YWx1ZXMuaGFzVmFsdWUoKSkKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJ2YWx1ZXMi
X3MsICpvdXRfdmFsdWVzKTsKLSAgICAgICAgaWYgKG91dF9wYXlsb2FkLmhhc1ZhbHVlKCkpCi0g
ICAgICAgICAgICByZXN1bHQtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCAqb3V0X3BheWxvYWQpOwot
ICAgICAgICBpZiAob3V0X2RhdGFiYXNlSWQuaGFzVmFsdWUoKSkKLSAgICAgICAgICAgIHJlc3Vs
dC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgKm91dF9kYXRhYmFzZUlkKTsKLSAgICAgICAg
aWYgKG91dF9zcWxFcnJvcikKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJzcWxFcnJv
ciJfcywgb3V0X3NxbEVycm9yKTsKLSAgICAgICAgaWYgKG91dF9zY3JlZW5Db2xvci5oYXNWYWx1
ZSgpKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCAqb3V0
X3NjcmVlbkNvbG9yKTsKLSAgICAgICAgaWYgKG91dF9hbHRlcm5hdGVDb2xvcnMpCi0gICAgICAg
ICAgICByZXN1bHQtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIG91dF9hbHRlcm5hdGVD
b2xvcnMpOwotICAgICAgICBpZiAob3V0X3ByaW50Q29sb3IuaGFzVmFsdWUoKSkKLSAgICAgICAg
ICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCAqb3V0X3ByaW50Q29sb3IpOwot
ICAgIH0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAg
ICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3Io
QmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Ci19Ci0KLXZv
aWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJz
KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpCi17Ci0g
ICAgUmVmUHRyPEpTT046OkFycmF5PiBpbl9jb2x1bW5OYW1lcyA9IG1fYmFja2VuZERpc3BhdGNo
ZXItPmdldEFycmF5KHBhcmFtZXRlcnMuZ2V0KCksICJjb2x1bW5OYW1lcyJfcywgbnVsbHB0cik7
Ci0gICAgU3RyaW5nIGluX25vdGVzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBh
cmFtZXRlcnMuZ2V0KCksICJub3RlcyJfcywgbnVsbHB0cik7Ci0gICAgZG91YmxlIGluX3RpbWVz
dGFtcCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldERvdWJsZShwYXJhbWV0ZXJzLmdldCgpLCAi
dGltZXN0YW1wIl9zLCBudWxscHRyKTsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBpbl92YWx1
ZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRPYmplY3QocGFyYW1ldGVycy5nZXQoKSwgInZh
bHVlcyJfcywgbnVsbHB0cik7Ci0gICAgUmVmUHRyPEpTT046OlZhbHVlPiBpbl9wYXlsb2FkID0g
bV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0VmFsdWUocGFyYW1ldGVycy5nZXQoKSwgInBheWxvYWQi
X3MsIG51bGxwdHIpOwotICAgIGludCBpbl9kYXRhYmFzZUlkID0gbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+Z2V0SW50ZWdlcihwYXJhbWV0ZXJzLmdldCgpLCAiZGF0YWJhc2VJZCJfcywgbnVsbHB0cik7
Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gaW5fc3FsRXJyb3IgPSBtX2JhY2tlbmREaXNwYXRj
aGVyLT5nZXRPYmplY3QocGFyYW1ldGVycy5nZXQoKSwgInNxbEVycm9yIl9zLCBudWxscHRyKTsK
LSAgICBTdHJpbmcgaW5fc2NyZWVuQ29sb3IgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJp
bmcocGFyYW1ldGVycy5nZXQoKSwgInNjcmVlbkNvbG9yIl9zLCBudWxscHRyKTsKLSAgICBSZWZQ
dHI8SlNPTjo6QXJyYXk+IGluX2FsdGVybmF0ZUNvbG9ycyA9IG1fYmFja2VuZERpc3BhdGNoZXIt
PmdldEFycmF5KHBhcmFtZXRlcnMuZ2V0KCksICJhbHRlcm5hdGVDb2xvcnMiX3MsIG51bGxwdHIp
OwotICAgIFN0cmluZyBpbl9wcmludENvbG9yID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3Ry
aW5nKHBhcmFtZXRlcnMuZ2V0KCksICJwcmludENvbG9yIl9zLCBudWxscHRyKTsKLSAgICBpZiAo
bV9iYWNrZW5kRGlzcGF0Y2hlci0+aGFzUHJvdG9jb2xFcnJvcnMoKSkgewotICAgICAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJ
bnZhbGlkUGFyYW1zLCAiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICdEYXRhYmFzZS5leGVjdXRl
Tm9PcHRpb25hbFBhcmFtZXRlcnMnIGNhbid0IGJlIHByb2Nlc3NlZCJfcyk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKLSAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRl
RGlzcGF0Y2hlci0+ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKHJlcXVlc3RJZCwgKmluX2Nv
bHVtbk5hbWVzLCBpbl9ub3RlcywgaW5fdGltZXN0YW1wLCAqaW5fdmFsdWVzLCAqaW5fcGF5bG9h
ZCwgaW5fZGF0YWJhc2VJZCwgKmluX3NxbEVycm9yLCBpbl9zY3JlZW5Db2xvciwgKmluX2FsdGVy
bmF0ZUNvbG9ycywgaW5fcHJpbnRDb2xvcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5k
aWYKLQotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3Vs
dCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgUmVmUHRyPEpTT046OkFycmF5T2Y8U3Ry
aW5nPj4gb3V0X2NvbHVtbk5hbWVzOwotICAgIFN0cmluZyBvdXRfbm90ZXM7Ci0gICAgZG91Ymxl
IG91dF90aW1lc3RhbXA7Ci0gICAgSlNPTjo6T2JqZWN0IG91dF92YWx1ZXM7Ci0gICAgSlNPTjo6
VmFsdWUgb3V0X3BheWxvYWQ7Ci0gICAgaW50IG91dF9kYXRhYmFzZUlkOwotICAgIFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IG91dF9zcWxFcnJvcjsKLSAgICBJ
bnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyBvdXRfc2NyZWVuQ29s
b3I7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+
IG91dF9hbHRlcm5hdGVDb2xvcnM7Ci0gICAgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXI6OlByaW50Q29sb3Igb3V0X3ByaW50Q29sb3I7Ci0gICAgbV9hZ2VudC0+ZXhlY3V0ZU5vT3B0
aW9uYWxQYXJhbWV0ZXJzKGVycm9yLCAqaW5fY29sdW1uTmFtZXMsIGluX25vdGVzLCBpbl90aW1l
c3RhbXAsICppbl92YWx1ZXMsICppbl9wYXlsb2FkLCBpbl9kYXRhYmFzZUlkLCAqaW5fc3FsRXJy
b3IsIGluX3NjcmVlbkNvbG9yLCAqaW5fYWx0ZXJuYXRlQ29sb3JzLCBpbl9wcmludENvbG9yLCBv
dXRfY29sdW1uTmFtZXMsICZvdXRfbm90ZXMsICZvdXRfdGltZXN0YW1wLCBvdXRfdmFsdWVzLCAm
b3V0X3BheWxvYWQsICZvdXRfZGF0YWJhc2VJZCwgb3V0X3NxbEVycm9yLCAmb3V0X3NjcmVlbkNv
bG9yLCBvdXRfYWx0ZXJuYXRlQ29sb3JzLCAmb3V0X3ByaW50Q29sb3IpOwotCi0gICAgaWYgKCFl
cnJvci5sZW5ndGgoKSkgewotICAgICAgICByZXN1bHQtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJf
cywgb3V0X2NvbHVtbk5hbWVzKTsKLSAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoIm5vdGVzIl9z
LCBvdXRfbm90ZXMpOwotICAgICAgICByZXN1bHQtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCBv
dXRfdGltZXN0YW1wKTsKLSAgICAgICAgcmVzdWx0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgb3V0
X3ZhbHVlcyk7Ci0gICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIG91dF9wYXls
b2FkKTsKLSAgICAgICAgcmVzdWx0LT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCBvdXRfZGF0
YWJhc2VJZCk7Ci0gICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgb3V0X3Nx
bEVycm9yKTsKLSAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUob3V0X3Nj
cmVlbkNvbG9yKSk7Ci0gICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJf
cywgb3V0X2FsdGVybmF0ZUNvbG9ycyk7Ci0gICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJwcmlu
dENvbG9yIl9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0
YW50VmFsdWUob3V0X3ByaW50Q29sb3IpKTsKLSAgICB9Ci0gICAgaWYgKCFlcnJvci5sZW5ndGgo
KSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwg
V1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNw
YXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJv
ciwgV1RGTW92ZShlcnJvcikpOwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMj
IEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQot
Ci0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFs
dWVzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNw
ZWN0b3IgewotCi1jbGFzcyBGcm9udGVuZFJvdXRlcjsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVy
cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgotCi0j
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi19IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRj
aGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1y
ZXR1cm4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5hbWVz
cGFjZSBJbnNwZWN0b3IgewotCi0KLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLS8vIEZv
cndhcmQgZGVjbGFyYXRpb25zLgotbmFtZXNwYWNlIERhdGFiYXNlIHsKLWNsYXNzIEVycm9yOwot
ZW51bSBjbGFzcyBQcmltYXJ5Q29sb3JzOwotfSAvLyBEYXRhYmFzZQotLy8gRW5kIG9mIGZvcndh
cmQgZGVjbGFyYXRpb25zLgotCi0KLS8vIFR5cGVkZWZzLgotbmFtZXNwYWNlIERhdGFiYXNlIHsK
LS8qIFVuaXF1ZSBpZGVudGlmaWVyIG9mIERhdGFiYXNlIG9iamVjdC4gKi8KLXR5cGVkZWYgaW50
IERhdGFiYXNlSWQ7Ci10eXBlZGVmIEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IENvbG9yTGlzdDsKLX0gLy8gRGF0YWJhc2UKLS8vIEVu
ZCBvZiB0eXBlZGVmcy4KLQotbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKLQotU3RyaW5nIGdldEVu
dW1Db25zdGFudFZhbHVlKGludCBjb2RlKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5n
IGdldEVudW1Db25zdGFudFZhbHVlKFQgZW51bVZhbHVlKQotewotICAgIHJldHVybiBnZXRFbnVt
Q29uc3RhbnRWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KGVudW1WYWx1ZSkpOwotfQotCi19IC8vIG5h
bWVzcGFjZSBUZXN0SGVscGVycwotCi1uYW1lc3BhY2UgRGF0YWJhc2UgewotLyogICovCi1lbnVt
IGNsYXNzIFByaW1hcnlDb2xvcnMgewotICAgIFJlZCA9IDAsCi0gICAgR3JlZW4gPSAxLAotICAg
IEJsdWUgPSAyLAotfTsgLy8gZW51bSBjbGFzcyBQcmltYXJ5Q29sb3JzCi0vKiBEYXRhYmFzZSBl
cnJvci4gKi8KLWNsYXNzIEVycm9yIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewotcHVibGlj
OgotICAgIGVudW0gewotICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCi0gICAgICAgIE1lc3NhZ2VT
ZXQgPSAxIDw8IDAsCi0gICAgICAgIENvZGVTZXQgPSAxIDw8IDEsCi0gICAgICAgIEFsbEZpZWxk
c1NldCA9IChNZXNzYWdlU2V0IHwgQ29kZVNldCkKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8aW50
IFNUQVRFPgotICAgIGNsYXNzIEJ1aWxkZXIgewotICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0
cjxKU09OOjpPYmplY3Q+IG1fcmVzdWx0OwotCi0gICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBC
dWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsK
LSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXIoUmVmPC8qRXJyb3IqL0pTT046Ok9iamVjdD4m
JiBvYmplY3QpCi0gICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKLSAgICAg
ICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1
aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZnJp
ZW5kIGNsYXNzIEVycm9yOwotICAgIHB1YmxpYzoKLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
TWVzc2FnZVNldD4mIHNldE1lc3NhZ2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICAgICAgewot
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE1lc3NhZ2VTZXQpLCBwcm9wZXJ0
eV9tZXNzYWdlX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmco
Im1lc3NhZ2UiX3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TWVzc2Fn
ZVNldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2RlU2V0PiYg
c2V0Q29kZShpbnQgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBDb2RlU2V0KSwgcHJvcGVydHlfY29kZV9hbHJlYWR5X3NldCk7Ci0gICAgICAg
ICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcigiY29kZSJfcywgdmFsdWUpOwotICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxDb2RlU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgUmVmPEVy
cm9yPiByZWxlYXNlKCkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RB
VEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKLSAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKHNpemVvZihFcnJvcikgPT0gc2l6ZW9mKEpTT046Ok9iamVjdCksIGNhbm5v
dF9jYXN0KTsKLQotICAgICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4ganNvblJlc3VsdCA9IG1f
cmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7Ci0gICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFdURk1v
dmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPEVycm9yPio+KCZqc29uUmVzdWx0KSk7Ci0gICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIC8qCi0gICAgICog
U3ludGhldGljIGNvbnN0cnVjdG9yOgotICAgICAqIFJlZjxFcnJvcj4gcmVzdWx0ID0gRXJyb3I6
OmNyZWF0ZSgpCi0gICAgICogICAgIC5zZXRNZXNzYWdlKC4uLikKLSAgICAgKiAgICAgLnNldENv
ZGUoLi4uKQotICAgICAqICAgICAucmVsZWFzZSgpOwotICAgICAqLwotICAgIHN0YXRpYyBCdWls
ZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEJ1aWxkZXI8
Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOwotICAgIH0KLX07Ci0KLX0gLy8g
RGF0YWJhc2UKLQotCi0KLW5hbWVzcGFjZSBUZXN0SGVscGVycyB7Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIFByb3RvY29sRW51bVR5cGU+Ci1PcHRpb25hbDxQcm90b2NvbEVudW1UeXBlPiBwYXJzZUVu
dW1WYWx1ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJik7Ci0KLS8vIEVudW1zIGluIHRoZSAnRGF0
YWJhc2UnIERvbWFpbgotdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4oY29uc3QgU3RyaW5nJik7Ci0K
LX0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0K
LX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi1uYW1lc3BhY2UgV1RGIHsKLQotdGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwotCi0vLyBIYXNoIGRlY2xhcmF0aW9ucyBp
biB0aGUgJ0RhdGFiYXNlJyBEb21haW4KLXRlbXBsYXRlPD4KLXN0cnVjdCBEZWZhdWx0SGFzaDxJ
bnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gewotICAgIHR5cGVk
ZWYgSW50SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4g
SGFzaDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xPYmplY3RzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1j
YWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bE9iamVjdHMuaCIKLQotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLW5hbWVzcGFjZSBQcm90
b2NvbCB7Ci0KLW5hbWVzcGFjZSBUZXN0SGVscGVycyB7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBj
b25zdCBlbnVtX2NvbnN0YW50X3ZhbHVlc1tdID0gewotICAgICJyZWQiLAotICAgICJncmVlbiIs
Ci0gICAgImJsdWUiLAotICAgICJjeWFuIiwKLSAgICAibWFnZW50YSIsCi0gICAgInllbGxvdyIs
Ci0gICAgImJsYWNrIiwKLX07Ci0KLVN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29k
ZSkgewotICAgIHJldHVybiBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb2RlXTsKLX0KLQotLy8gRW51
bXMgaW4gdGhlICdEYXRhYmFzZScgRG9tYWluCi10ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gcGFyc2VFbnVtVmFsdWVGcm9t
U3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPihjb25z
dCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQotewotICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29u
c3RhbnRWYWx1ZXNbXSA9IHsKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpE
YXRhYmFzZTo6UHJpbWFyeUNvbG9yczo6UmVkLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzOjpHcmVlbiwKLSAgICAgICAgKHNpemVf
dClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9yczo6Qmx1ZSwKLSAg
ICB9OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMzsgKytpKQotICAgICAgICBpZiAocHJv
dG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNbaV1dKQot
ICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFy
eUNvbG9ycyljb25zdGFudFZhbHVlc1tpXTsKLQotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19
Ci0KLQotfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKLQotCi0KLX0gLy8gbmFtZXNwYWNlIFBy
b3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbE9iamVjdHMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5k
RGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRz
LXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbmNsdWRlIDx3dGYvUmV0
YWluUHRyLmg+Ci0KLUBwcm90b2NvbCBUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI7
Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLWNsYXNzIE9iakNJbnNwZWN0b3JEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZURhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXIgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAg
IE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbERh
dGFiYXNlRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQot
ICAgIHZvaWQgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhsb25nIHJlcXVlc3RJZCwgY29u
c3QgSlNPTjo6QXJyYXkqIGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIGluX25vdGVzLCBj
b25zdCBkb3VibGUqIGluX3RpbWVzdGFtcCwgY29uc3QgSlNPTjo6T2JqZWN0KiBpbl92YWx1ZXMs
IGNvbnN0IEpTT046OlZhbHVlKiBpbl9wYXlsb2FkLCBjb25zdCBpbnQqIGluX2RhdGFiYXNlSWQs
IGNvbnN0IEpTT046Ok9iamVjdCogaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyogaW5fc2NyZWVu
Q29sb3IsIGNvbnN0IEpTT046OkFycmF5KiBpbl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmlu
ZyogaW5fcHJpbnRDb2xvcikgZmluYWw7Ci0gICAgdm9pZCBleGVjdXRlTm9PcHRpb25hbFBhcmFt
ZXRlcnMobG9uZyByZXF1ZXN0SWQsIGNvbnN0IEpTT046OkFycmF5JiBpbl9jb2x1bW5OYW1lcywg
Y29uc3QgU3RyaW5nJiBpbl9ub3RlcywgZG91YmxlIGluX3RpbWVzdGFtcCwgY29uc3QgSlNPTjo6
T2JqZWN0JiBpbl92YWx1ZXMsIEpTT046OlZhbHVlIGluX3BheWxvYWQsIGludCBpbl9kYXRhYmFz
ZUlkLCBjb25zdCBKU09OOjpPYmplY3QmIGluX3NxbEVycm9yLCBjb25zdCBTdHJpbmcmIGluX3Nj
cmVlbkNvbG9yLCBjb25zdCBKU09OOjpBcnJheSYgaW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBT
dHJpbmcmIGluX3ByaW50Q29sb3IpIGZpbmFsOwotcHJpdmF0ZToKLSAgICBSZXRhaW5QdHI8aWQ8
VGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKLX07Ci0KLX0g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tl
bmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlz
cGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13
aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQg
IlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSAiVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIK
LSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQot
dm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZUFsbE9w
dGlvbmFsUGFyYW1ldGVycyhsb25nIHJlcXVlc3RJZCwgY29uc3QgSlNPTjo6QXJyYXkqIGluX2Nv
bHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIGluX25vdGVzLCBjb25zdCBkb3VibGUqIGluX3RpbWVz
dGFtcCwgY29uc3QgSlNPTjo6T2JqZWN0KiBpbl92YWx1ZXMsIGNvbnN0IEpTT046OlZhbHVlKiBp
bl9wYXlsb2FkLCBjb25zdCBpbnQqIGluX2RhdGFiYXNlSWQsIGNvbnN0IEpTT046Ok9iamVjdCog
aW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyogaW5fc2NyZWVuQ29sb3IsIGNvbnN0IEpTT046OkFy
cmF5KiBpbl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyogaW5fcHJpbnRDb2xvcikKLXsK
LSAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoZXhlY3V0
ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1dpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazpj
b2x1bW5OYW1lczpub3Rlczp0aW1lc3RhbXA6dmFsdWVzOnBheWxvYWQ6ZGF0YWJhc2VJZDpzcWxF
cnJvcjpzY3JlZW5Db2xvcjphbHRlcm5hdGVDb2xvcnM6cHJpbnRDb2xvcjopXSkgewotICAgICAg
ICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFj
a2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RhdGFiYXNlLmV4ZWN1dGVBbGxPcHRp
b25hbFBhcmFtZXRlcnMnIHdhcyBub3QgZm91bmQiX3MpOwotICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlz
cGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICB9OwotCi0gICAgaWQgc3VjY2Vzc0NhbGxiYWNr
ID0gXihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKipjb2x1bW5OYW1lcywgTlNTdHJpbmcgKipub3Rl
cywgZG91YmxlICp0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnZhbHVlcywgUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICoqcGF5bG9hZCwgaW50ICpkYXRhYmFzZUlkLCBUZXN0UHJvdG9j
b2xEYXRhYmFzZUVycm9yICoqc3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNv
bG9ycyAqc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmFsdGVybmF0ZUNvbG9y
cywgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRD
b2xvciAqcHJpbnRDb2xvcikgewotICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHRPYmpl
Y3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9S
X0JBRF9PUFRJT05BTF9QQVJBTUVURVIoY29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsKLSAg
ICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKG5vdGVzLCBA
Im5vdGVzIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFN
RVRFUih2YWx1ZXMsIEAidmFsdWVzIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFE
X09QVElPTkFMX1BBUkFNRVRFUihwYXlsb2FkLCBAInBheWxvYWQiKTsKLSAgICAgICAgVEhST1df
RVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHNxbEVycm9yLCBAInNxbEVycm9y
Iik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihh
bHRlcm5hdGVDb2xvcnMsIEAiYWx0ZXJuYXRlQ29sb3JzIik7Ci0gICAgICAgIGlmIChjb2x1bW5O
YW1lcykKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9z
LCB0b0pTT05TdHJpbmdBcnJheSgqY29sdW1uTmFtZXMpKTsKLSAgICAgICAgaWYgKG5vdGVzKQot
ICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCAqbm90ZXMpOwot
ICAgICAgICBpZiAodGltZXN0YW1wKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXREb3Vi
bGUoInRpbWVzdGFtcCJfcywgKnRpbWVzdGFtcCk7Ci0gICAgICAgIGlmICh2YWx1ZXMpCi0gICAg
ICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdCgidmFsdWVzIl9zLCBbKnZhbHVlcyB0b0pT
T05PYmplY3RdKTsKLSAgICAgICAgaWYgKHBheWxvYWQpCi0gICAgICAgICAgICByZXN1bHRPYmpl
Y3QtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBbKnBheWxvYWQgdG9KU09OT2JqZWN0XSk7Ci0gICAg
ICAgIGlmIChkYXRhYmFzZUlkKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRJbnRlZ2Vy
KCJkYXRhYmFzZUlkIl9zLCAqZGF0YWJhc2VJZCk7Ci0gICAgICAgIGlmIChzcWxFcnJvcikKLSAg
ICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgWypzcWxFcnJv
ciB0b0pTT05PYmplY3RdKTsKLSAgICAgICAgaWYgKHNjcmVlbkNvbG9yKQotICAgICAgICAgICAg
cmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5n
KCpzY3JlZW5Db2xvcikpOwotICAgICAgICBpZiAoYWx0ZXJuYXRlQ29sb3JzKQotICAgICAgICAg
ICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCB0b0pTT05TdHJp
bmdBcnJheSgqYWx0ZXJuYXRlQ29sb3JzKSk7Ci0gICAgICAgIGlmIChwcmludENvbG9yKQotICAg
ICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsIHRvUHJvdG9j
b2xTdHJpbmcoKnByaW50Q29sb3IpKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2Vu
ZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHRPYmplY3QpLCBmYWxzZSk7Ci0gICAg
fTsKLQotICAgIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqb19pbl9jb2x1bW5OYW1lczsKLSAgICBp
ZiAoaW5fY29sdW1uTmFtZXMpCi0gICAgICAgIG9faW5fY29sdW1uTmFtZXMgPSB0b09iakNTdHJp
bmdBcnJheShpbl9jb2x1bW5OYW1lcyk7Ci0gICAgTlNTdHJpbmcgKm9faW5fbm90ZXM7Ci0gICAg
aWYgKGluX25vdGVzKQotICAgICAgICBvX2luX25vdGVzID0gKmluX25vdGVzOwotICAgIGRvdWJs
ZSBvX2luX3RpbWVzdGFtcDsKLSAgICBpZiAoaW5fdGltZXN0YW1wKQotICAgICAgICBvX2luX3Rp
bWVzdGFtcCA9ICppbl90aW1lc3RhbXA7Ci0gICAgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvX2lu
X3ZhbHVlczsKLSAgICBpZiAoaW5fdmFsdWVzKQotICAgICAgICBvX2luX3ZhbHVlcyA9IFtbW1JX
SVByb3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0OmluX3ZhbHVlc10g
YXV0b3JlbGVhc2VdOwotICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb19pbl9wYXlsb2FkOwot
ICAgIGlmIChpbl9wYXlsb2FkKQotICAgICAgICBvX2luX3BheWxvYWQgPSBbW1tSV0lQcm90b2Nv
bEpTT05PYmplY3QgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDppbl9wYXlsb2FkXSBhdXRvcmVs
ZWFzZV07Ci0gICAgaW50IG9faW5fZGF0YWJhc2VJZDsKLSAgICBpZiAoaW5fZGF0YWJhc2VJZCkK
LSAgICAgICAgb19pbl9kYXRhYmFzZUlkID0gKmluX2RhdGFiYXNlSWQ7Ci0gICAgVGVzdFByb3Rv
Y29sRGF0YWJhc2VFcnJvciAqb19pbl9zcWxFcnJvcjsKLSAgICBpZiAoaW5fc3FsRXJyb3IpCi0g
ICAgICAgIG9faW5fc3FsRXJyb3IgPSBbW1tUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGFsbG9j
XSBpbml0V2l0aEpTT05PYmplY3Q6aW5fc3FsRXJyb3JdIGF1dG9yZWxlYXNlXTsKLSAgICBPcHRp
b25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnM+IG9faW5fc2NyZWVuQ29sb3I7
Ci0gICAgaWYgKGluX3NjcmVlbkNvbG9yKQotICAgICAgICBvX2luX3NjcmVlbkNvbG9yID0gZnJv
bVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycz4oKmluX3Nj
cmVlbkNvbG9yKTsKLSAgICBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKm9faW5fYWx0ZXJuYXRlQ29s
b3JzOwotICAgIGlmIChpbl9hbHRlcm5hdGVDb2xvcnMpCi0gICAgICAgIG9faW5fYWx0ZXJuYXRl
Q29sb3JzID0gdG9PYmpDU3RyaW5nQXJyYXkoaW5fYWx0ZXJuYXRlQ29sb3JzKTsKLSAgICBPcHRp
b25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmlu
dENvbG9yPiBvX2luX3ByaW50Q29sb3I7Ci0gICAgaWYgKGluX3ByaW50Q29sb3IpCi0gICAgICAg
IG9faW5fcHJpbnRDb2xvciA9IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xEYXRhYmFz
ZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yPigqaW5fcHJpbnRDb2xvcik7
Ci0KLSAgICBbbV9kZWxlZ2F0ZSBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzV2l0aEVycm9y
Q2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrIGNv
bHVtbk5hbWVzOihpbl9jb2x1bW5OYW1lcyA/ICZvX2luX2NvbHVtbk5hbWVzIDogbmlsKSBub3Rl
czooaW5fbm90ZXMgPyAmb19pbl9ub3RlcyA6IG5pbCkgdGltZXN0YW1wOihpbl90aW1lc3RhbXAg
PyAmb19pbl90aW1lc3RhbXAgOiBuaWwpIHZhbHVlczooaW5fdmFsdWVzID8gJm9faW5fdmFsdWVz
IDogbmlsKSBwYXlsb2FkOihpbl9wYXlsb2FkID8gJm9faW5fcGF5bG9hZCA6IG5pbCkgZGF0YWJh
c2VJZDooaW5fZGF0YWJhc2VJZCA/ICZvX2luX2RhdGFiYXNlSWQgOiBuaWwpIHNxbEVycm9yOihp
bl9zcWxFcnJvciA/ICZvX2luX3NxbEVycm9yIDogbmlsKSBzY3JlZW5Db2xvcjooaW5fc2NyZWVu
Q29sb3IgPyAmb19pbl9zY3JlZW5Db2xvci52YWx1ZSgpIDogbmlsKSBhbHRlcm5hdGVDb2xvcnM6
KGluX2FsdGVybmF0ZUNvbG9ycyA/ICZvX2luX2FsdGVybmF0ZUNvbG9ycyA6IG5pbCkgcHJpbnRD
b2xvcjooaW5fcHJpbnRDb2xvciA/ICZvX2luX3ByaW50Q29sb3IudmFsdWUoKSA6IG5pbCldOwot
fQotCi12b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRl
Tm9PcHRpb25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIGNvbnN0IEpTT046OkFycmF5JiBp
bl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBpbl9ub3RlcywgZG91YmxlIGluX3RpbWVzdGFt
cCwgY29uc3QgSlNPTjo6T2JqZWN0JiBpbl92YWx1ZXMsIEpTT046OlZhbHVlIGluX3BheWxvYWQs
IGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBKU09OOjpPYmplY3QmIGluX3NxbEVycm9yLCBjb25z
dCBTdHJpbmcmIGluX3NjcmVlbkNvbG9yLCBjb25zdCBKU09OOjpBcnJheSYgaW5fYWx0ZXJuYXRl
Q29sb3JzLCBjb25zdCBTdHJpbmcmIGluX3ByaW50Q29sb3IpCi17Ci0gICAgaWYgKCFbbV9kZWxl
Z2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1l
dGVyc1dpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazpjb2x1bW5OYW1lczpub3Rlczp0
aW1lc3RhbXA6dmFsdWVzOnBheWxvYWQ6ZGF0YWJhc2VJZDpzcWxFcnJvcjpzY3JlZW5Db2xvcjph
bHRlcm5hdGVDb2xvcnM6cHJpbnRDb2xvcjopXSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1l
dGhvZE5vdEZvdW5kLCAiJ0RhdGFiYXNlLmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycycgd2Fz
IG5vdCBmb3VuZCJfcyk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5n
RXJyb3JzKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZCBlcnJvckNhbGxiYWNr
ID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVw
b3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJv
ciwgZXJyb3IpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9y
cygpOwotICAgIH07Ci0KLSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0
cmluZz4qLyAqY29sdW1uTmFtZXMsIE5TU3RyaW5nICpub3RlcywgZG91YmxlIHRpbWVzdGFtcCwg
UldJUHJvdG9jb2xKU09OT2JqZWN0ICp2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5
bG9hZCwgaW50IGRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKnNxbEVycm9y
LCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIE5TQXJyYXkv
KjxOU1N0cmluZz4qLyAqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IgcHJpbnRDb2xvcikgewotICAgICAgICBS
ZWY8SlNPTjo6T2JqZWN0PiByZXN1bHRPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwot
ICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihjb2x1bW5OYW1l
cywgQCJjb2x1bW5OYW1lcyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVE
X1BBUkFNRVRFUihub3RlcywgQCJub3RlcyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9S
X1JFUVVJUkVEX1BBUkFNRVRFUih2YWx1ZXMsIEAidmFsdWVzIik7Ci0gICAgICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHBheWxvYWQsIEAicGF5bG9hZCIpOwotICAg
ICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihzcWxFcnJvciwgQCJz
cWxFcnJvciIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRF
UihhbHRlcm5hdGVDb2xvcnMsIEAiYWx0ZXJuYXRlQ29sb3JzIik7Ci0gICAgICAgIHJlc3VsdE9i
amVjdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB0b0pTT05TdHJpbmdBcnJheShjb2x1bW5O
YW1lcykpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygibm90ZXMiX3MsIG5vdGVz
KTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgdGltZXN0
YW1wKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgW3ZhbHVl
cyB0b0pTT05PYmplY3RdKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRWYWx1ZSgicGF5bG9h
ZCJfcywgW3BheWxvYWQgdG9KU09OT2JqZWN0XSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0
SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgZGF0YWJhc2VJZCk7Ci0gICAgICAgIHJlc3VsdE9iamVj
dC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgW3NxbEVycm9yIHRvSlNPTk9iamVjdF0pOwotICAg
ICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsIHRvUHJvdG9jb2xT
dHJpbmcoc2NyZWVuQ29sb3IpKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheSgiYWx0
ZXJuYXRlQ29sb3JzIl9zLCB0b0pTT05TdHJpbmdBcnJheShhbHRlcm5hdGVDb2xvcnMpKTsKLSAg
ICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsIHRvUHJvdG9jb2xT
dHJpbmcocHJpbnRDb2xvcikpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVz
cG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdE9iamVjdCksIGZhbHNlKTsKLSAgICB9Owot
Ci0gICAgTlNBcnJheS8qPE5TU3RyaW5nPiovICpvX2luX2NvbHVtbk5hbWVzID0gdG9PYmpDU3Ry
aW5nQXJyYXkoJmluX2NvbHVtbk5hbWVzKTsKLSAgICBOU1N0cmluZyAqb19pbl9ub3RlcyA9IGlu
X25vdGVzOwotICAgIGRvdWJsZSBvX2luX3RpbWVzdGFtcCA9IGluX3RpbWVzdGFtcDsKLSAgICBS
V0lQcm90b2NvbEpTT05PYmplY3QgKm9faW5fdmFsdWVzID0gW1tbUldJUHJvdG9jb2xKU09OT2Jq
ZWN0IGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6JmluX3ZhbHVlc10gYXV0b3JlbGVhc2VdOwot
ICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb19pbl9wYXlsb2FkID0gW1tbUldJUHJvdG9jb2xK
U09OT2JqZWN0IGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6JmluX3BheWxvYWRdIGF1dG9yZWxl
YXNlXTsKLSAgICBpbnQgb19pbl9kYXRhYmFzZUlkID0gaW5fZGF0YWJhc2VJZDsKLSAgICBUZXN0
UHJvdG9jb2xEYXRhYmFzZUVycm9yICpvX2luX3NxbEVycm9yID0gW1tbVGVzdFByb3RvY29sRGF0
YWJhc2VFcnJvciBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0OiZpbl9zcWxFcnJvcl0gYXV0b3Jl
bGVhc2VdOwotICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycz4g
b19pbl9zY3JlZW5Db2xvciA9IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xEYXRhYmFz
ZVByaW1hcnlDb2xvcnM+KGluX3NjcmVlbkNvbG9yKTsKLSAgICBpZiAoIW9faW5fc2NyZWVuQ29s
b3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihC
YWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgIlBhcmFtZXRlciAnc2NyZWVuQ29sb3In
IG9mIG1ldGhvZCAnRGF0YWJhc2UuZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzJyBjYW5ub3Qg
YmUgcHJvY2Vzc2VkIl9zKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBOU0FycmF5Lyo8
TlNTdHJpbmc+Ki8gKm9faW5fYWx0ZXJuYXRlQ29sb3JzID0gdG9PYmpDU3RyaW5nQXJyYXkoJmlu
X2FsdGVybmF0ZUNvbG9ycyk7Ci0gICAgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VFeGVj
dXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yPiBvX2luX3ByaW50Q29sb3IgPSBmcm9t
UHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFt
ZXRlcnNQcmludENvbG9yPihpbl9wcmludENvbG9yKTsKLSAgICBpZiAoIW9faW5fcHJpbnRDb2xv
cikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKEJh
Y2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCAiUGFyYW1ldGVyICdwcmludENvbG9yJyBv
ZiBtZXRob2QgJ0RhdGFiYXNlLmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycycgY2Fubm90IGJl
IHByb2Nlc3NlZCJfcyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBbbV9kZWxlZ2F0
ZSBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxi
YWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2sgY29sdW1uTmFtZXM6b19pbl9jb2x1
bW5OYW1lcyBub3RlczpvX2luX25vdGVzIHRpbWVzdGFtcDpvX2luX3RpbWVzdGFtcCB2YWx1ZXM6
b19pbl92YWx1ZXMgcGF5bG9hZDpvX2luX3BheWxvYWQgZGF0YWJhc2VJZDpvX2luX2RhdGFiYXNl
SWQgc3FsRXJyb3I6b19pbl9zcWxFcnJvciBzY3JlZW5Db2xvcjpvX2luX3NjcmVlbkNvbG9yLnZh
bHVlKCkgYWx0ZXJuYXRlQ29sb3JzOm9faW5fYWx0ZXJuYXRlQ29sb3JzIHByaW50Q29sb3I6b19p
bl9wcmludENvbG9yLnZhbHVlKCldOwotfQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgot
Ci0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJh
bWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgotCi1fX2F0dHJpYnV0ZV9fKCh2
aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJh
dGlvbiA6IE5TT2JqZWN0Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluLCBzZXR0ZXI9c2V0
RGF0YWJhc2VIYW5kbGVyOikgaWQ8VGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyPiBk
YXRhYmFzZUhhbmRsZXI7Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25m
aWd1cmF0aW9uLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24u
bW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlv
bmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgi
Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0
ZURpc3BhdGNoYWJsZUFnZW50Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJs
ZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0
b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCi17Ci0gICAg
QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKLSAgICBpZDxUZXN0
UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+IF9kYXRhYmFzZUhhbmRsZXI7Ci19Ci0KLS0g
KGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29u
dHJvbGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYg
KCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAg
ICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZv
aWQpZGVhbGxvYwotewotICAgIFtfZGF0YWJhc2VIYW5kbGVyIHJlbGVhc2VdOwotICAgIFtzdXBl
ciBkZWFsbG9jXTsKLX0KLQotLSAodm9pZClzZXREYXRhYmFzZUhhbmRsZXI6KGlkPFRlc3RQcm90
b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4paGFuZGxlcgotewotICAgIGlmIChoYW5kbGVyID09
IF9kYXRhYmFzZUhhbmRsZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIFtfZGF0YWJhc2VIYW5k
bGVyIHJlbGVhc2VdOwotICAgIF9kYXRhYmFzZUhhbmRsZXIgPSBbaGFuZGxlciByZXRhaW5dOwot
Ci0gICAgYXV0byBhbHRlcm5hdGVEaXNwYXRjaGVyID0gbWFrZVVuaXF1ZTxPYmpDSW5zcGVjdG9y
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7Ci0gICAgYXV0byBhbHRlcm5hdGVB
Z2VudCA9IG1ha2VVbmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8RGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlciwgQWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4+KCJEYXRh
YmFzZSJfcywgKl9jb250cm9sbGVyLCBXVEZNb3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIpKTsKLSAg
ICBfY29udHJvbGxlci0+YXBwZW5kRXh0cmFBZ2VudChXVEZNb3ZlKGFsdGVybmF0ZUFnZW50KSk7
Ci19Ci0KLS0gKGlkPFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4pZGF0YWJhc2VI
YW5kbGVyCi17Ci0gICAgcmV0dXJuIF9kYXRhYmFzZUhhbmRsZXI7Ci19Ci0KLUBlbmQKLQotCi0j
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRl
cnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1w
b3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVz
cGFjZSBJbnNwZWN0b3I7Ci0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3Bh
dGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4t
cGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotCi0jaW1wb3J0IDxXZWJJbnNw
ZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+Ci0KLQotQGNsYXNzIFRlc3RQcm90b2NvbERh
dGFiYXNlRXJyb3I7Ci0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbFBs
YXRmb3JtKSB7Ci0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1BbGwsCi0gICAgVGVzdFByb3RvY29s
UGxhdGZvcm1HZW5lcmljLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TLAotICAgIFRlc3RQ
cm90b2NvbFBsYXRmb3JtTWFjT1MsCi19OwotCi0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIs
IFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycykgewotICAgIFRlc3RQcm90b2NvbERh
dGFiYXNlUHJpbWFyeUNvbG9yc1JlZCwKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlD
b2xvcnNHcmVlbiwKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNCbHVlLAot
fTsKLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVj
dXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvcikgewotICAgIFRlc3RQcm90b2NvbERh
dGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JDeWFuLAotICAgIFRl
c3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JN
YWdlbnRhLAotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1l
dGVyc1ByaW50Q29sb3JZZWxsb3csCi0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxs
T3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckJsYWNrLAotfTsKLQotdHlwZWRlZiBOU19FTlVN
KE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0
ZXJzUHJpbnRDb2xvcikgewotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlv
bmFsUGFyYW1ldGVyc1ByaW50Q29sb3JDeWFuLAotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhl
Y3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JNYWdlbnRhLAotICAgIFRlc3RQcm90
b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JZZWxsb3cs
Ci0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJp
bnRDb2xvckJsYWNrLAotfTsKLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3Rv
Y29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yKSB7Ci0gICAg
VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9y
Q3lhbiwKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVy
c1ByaW50Q29sb3JNYWdlbnRhLAotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0
aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvclllbGxvdywKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFz
ZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JCbGFjaywKLX07Ci0KLXR5cGVk
ZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9u
YWxQYXJhbWV0ZXJzUHJpbnRDb2xvcikgewotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0
ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckN5YW4sCi0gICAgVGVzdFByb3RvY29sRGF0
YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yTWFnZW50YSwKLSAgICBU
ZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JZ
ZWxsb3csCi0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRl
cnNQcmludENvbG9yQmxhY2ssCi19OwotCi0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJk
ZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIDogUldJUHJv
dG9jb2xKU09OT2JqZWN0Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rp
b25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0
aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OwotLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlIGNvZGU6KGlu
dCljb2RlOwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3Ry
aW5nICptZXNzYWdlOwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2ln
bikgaW50IGNvZGU7Ci1AZW5kCi0KLUBwcm90b2NvbCBUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFp
bkhhbmRsZXIgPE5TT2JqZWN0PgotQG9wdGlvbmFsCi0tICh2b2lkKWV4ZWN1dGVBbGxPcHRpb25h
bFBhcmFtZXRlcnNXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVy
cm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0cmluZz4q
LyAqKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqKm5vdGVzLCBkb3VibGUgKnRpbWVzdGFtcCwgUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICoqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipwYXls
b2FkLCBpbnQgKmRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipzcWxFcnJv
ciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzICpzY3JlZW5Db2xvciwgTlNBcnJh
eS8qPE5TU3RyaW5nPiovICoqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yICpwcmludENvbG9yKSlzdWNjZXNz
Q2FsbGJhY2sgY29sdW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKiljb2x1bW5OYW1l
cyBub3RlczooTlNTdHJpbmcgKiopbm90ZXMgdGltZXN0YW1wOihkb3VibGUgKil0aW1lc3RhbXAg
dmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKiopdmFsdWVzIHBheWxvYWQ6KFJXSVByb3Rv
Y29sSlNPTk9iamVjdCAqKilwYXlsb2FkIGRhdGFiYXNlSWQ6KGludCAqKWRhdGFiYXNlSWQgc3Fs
RXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKiopc3FsRXJyb3Igc2NyZWVuQ29sb3I6
KFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqKXNjcmVlbkNvbG9yIGFsdGVybmF0
ZUNvbG9yczooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKWFsdGVybmF0ZUNvbG9ycyBwcmludENv
bG9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmlu
dENvbG9yICopcHJpbnRDb2xvcjsKLS0gKHZvaWQpZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJz
V2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNr
IHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKShOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmNvbHVtbk5h
bWVzLCBOU1N0cmluZyAqbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9i
amVjdCAqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnBheWxvYWQsIGludCBkYXRhYmFz
ZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0
YWJhc2VQcmltYXJ5Q29sb3JzIHNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmFs
dGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFt
ZXRlcnNQcmludENvbG9yIHByaW50Q29sb3IpKXN1Y2Nlc3NDYWxsYmFjayBjb2x1bW5OYW1lczoo
TlNBcnJheS8qPE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMgbm90ZXM6KE5TU3RyaW5nICopbm90
ZXMgdGltZXN0YW1wOihkb3VibGUpdGltZXN0YW1wIHZhbHVlczooUldJUHJvdG9jb2xKU09OT2Jq
ZWN0ICopdmFsdWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQgZGF0
YWJhc2VJZDooaW50KWRhdGFiYXNlSWQgc3FsRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJy
b3IgKilzcWxFcnJvciBzY3JlZW5Db2xvcjooVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29s
b3JzKXNjcmVlbkNvbG9yIGFsdGVybmF0ZUNvbG9yczooTlNBcnJheS8qPE5TU3RyaW5nPiovICop
YWx0ZXJuYXRlQ29sb3JzIHByaW50Q29sb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5v
T3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvcilwcmludENvbG9yOwotQGVuZAotCi0KLQotCi0j
aW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3Rz
Lmg+Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbEludGVybmFsLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBj
b21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCi0jaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBv
cnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLQotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
SW50ZXJuYWwuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
LmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlv
bmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgPFdl
Ykluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KLQotbmFtZXNwYWNlIElu
c3BlY3RvciB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KLU9wdGlvbmFsPE9i
akNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOwotCi1p
bmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sUGxhdGZvcm0gdmFsdWUp
Ci17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFs
bDoKLSAgICAgICAgcmV0dXJuICJhbGwiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9y
bUdlbmVyaWM6Ci0gICAgICAgIHJldHVybiAiZ2VuZXJpYyJfczsKLSAgICBjYXNlIFRlc3RQcm90
b2NvbFBsYXRmb3JtSU9TOgotICAgICAgICByZXR1cm4gImlvcyJfczsKLSAgICBjYXNlIFRlc3RQ
cm90b2NvbFBsYXRmb3JtTWFjT1M6Ci0gICAgICAgIHJldHVybiAibWFjb3MiX3M7Ci0gICAgfQot
fQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sUGxhdGZvcm0+IGZy
b21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9
PSAiYWxsIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOwotICAgIGlm
ICh2YWx1ZSA9PSAiZ2VuZXJpYyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9y
bUdlbmVyaWM7Ci0gICAgaWYgKHZhbHVlID09ICJpb3MiKQotICAgICAgICByZXR1cm4gVGVzdFBy
b3RvY29sUGxhdGZvcm1JT1M7Ci0gICAgaWYgKHZhbHVlID09ICJtYWNvcyIpCi0gICAgICAgIHJl
dHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
Ci19Ci0KLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbERhdGFi
YXNlUHJpbWFyeUNvbG9ycyB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBjYXNl
IFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc1JlZDoKLSAgICAgICAgcmV0dXJuICJy
ZWQiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNHcmVlbjoK
LSAgICAgICAgcmV0dXJuICJncmVlbiJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNl
UHJpbWFyeUNvbG9yc0JsdWU6Ci0gICAgICAgIHJldHVybiAiYmx1ZSJfczsKLSAgICB9Ci19Ci0K
LXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlD
b2xvcnM+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlm
ICh2YWx1ZSA9PSAicmVkIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlUHJp
bWFyeUNvbG9yc1JlZDsKLSAgICBpZiAodmFsdWUgPT0gImdyZWVuIikKLSAgICAgICAgcmV0dXJu
IFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc0dyZWVuOwotICAgIGlmICh2YWx1ZSA9
PSAiYmx1ZSIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xv
cnNCbHVlOwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLWlubGluZSBTdHJpbmcgdG9Q
cm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFt
ZXRlcnNQcmludENvbG9yIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2Ug
VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xv
ckN5YW46Ci0gICAgICAgIHJldHVybiAiY3lhbiJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERh
dGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JNYWdlbnRhOgotICAg
ICAgICByZXR1cm4gIm1hZ2VudGEiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yWWVsbG93OgotICAgICAgICByZXR1
cm4gInllbGxvdyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9w
dGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JCbGFjazoKLSAgICAgICAgcmV0dXJuICJibGFjayJf
czsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xE
YXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yPiBmcm9tUHJvdG9j
b2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gImN5YW4i
KQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQ
YXJhbWV0ZXJzUHJpbnRDb2xvckN5YW47Ci0gICAgaWYgKHZhbHVlID09ICJtYWdlbnRhIikKLSAg
ICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1l
dGVyc1ByaW50Q29sb3JNYWdlbnRhOwotICAgIGlmICh2YWx1ZSA9PSAieWVsbG93IikKLSAgICAg
ICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVy
c1ByaW50Q29sb3JZZWxsb3c7Ci0gICAgaWYgKHZhbHVlID09ICJibGFjayIpCi0gICAgICAgIHJl
dHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmlu
dENvbG9yQmxhY2s7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotaW5saW5lIFN0cmlu
ZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFs
UGFyYW1ldGVyc1ByaW50Q29sb3IgdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAg
Y2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmlu
dENvbG9yQ3lhbjoKLSAgICAgICAgcmV0dXJuICJjeWFuIl9zOwotICAgIGNhc2UgVGVzdFByb3Rv
Y29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvck1hZ2VudGE6
Ci0gICAgICAgIHJldHVybiAibWFnZW50YSJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFi
YXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JZZWxsb3c6Ci0gICAgICAg
IHJldHVybiAieWVsbG93Il9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRl
QWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckJsYWNrOgotICAgICAgICByZXR1cm4gImJs
YWNrIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90
b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3I+IGZyb21Q
cm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAi
Y3lhbiIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRp
b25hbFBhcmFtZXRlcnNQcmludENvbG9yQ3lhbjsKLSAgICBpZiAodmFsdWUgPT0gIm1hZ2VudGEi
KQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQ
YXJhbWV0ZXJzUHJpbnRDb2xvck1hZ2VudGE7Ci0gICAgaWYgKHZhbHVlID09ICJ5ZWxsb3ciKQot
ICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJh
bWV0ZXJzUHJpbnRDb2xvclllbGxvdzsKLSAgICBpZiAodmFsdWUgPT0gImJsYWNrIikKLSAgICAg
ICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVy
c1ByaW50Q29sb3JCbGFjazsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi1pbmxpbmUg
U3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRp
b25hbFBhcmFtZXRlcnNQcmludENvbG9yIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewot
ICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQ
cmludENvbG9yQ3lhbjoKLSAgICAgICAgcmV0dXJuICJjeWFuIl9zOwotICAgIGNhc2UgVGVzdFBy
b3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yTWFnZW50
YToKLSAgICAgICAgcmV0dXJuICJtYWdlbnRhIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0
YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yWWVsbG93OgotICAgICAg
ICByZXR1cm4gInllbGxvdyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0
ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckJsYWNrOgotICAgICAgICByZXR1cm4gImJs
YWNrIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90
b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvcj4gZnJvbVBy
b3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJj
eWFuIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9u
YWxQYXJhbWV0ZXJzUHJpbnRDb2xvckN5YW47Ci0gICAgaWYgKHZhbHVlID09ICJtYWdlbnRhIikK
LSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJh
bWV0ZXJzUHJpbnRDb2xvck1hZ2VudGE7Ci0gICAgaWYgKHZhbHVlID09ICJ5ZWxsb3ciKQotICAg
ICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRl
cnNQcmludENvbG9yWWVsbG93OwotICAgIGlmICh2YWx1ZSA9PSAiYmxhY2siKQotICAgICAgICBy
ZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmlu
dENvbG9yQmxhY2s7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotaW5saW5lIFN0cmlu
ZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQ
YXJhbWV0ZXJzUHJpbnRDb2xvciB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBj
YXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRD
b2xvckN5YW46Ci0gICAgICAgIHJldHVybiAiY3lhbiJfczsKLSAgICBjYXNlIFRlc3RQcm90b2Nv
bERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvck1hZ2VudGE6Ci0g
ICAgICAgIHJldHVybiAibWFnZW50YSJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNl
RXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvclllbGxvdzoKLSAgICAgICAgcmV0
dXJuICJ5ZWxsb3ciX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09w
dGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JCbGFjazoKLSAgICAgICAgcmV0dXJuICJibGFjayJf
czsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xE
YXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3I+IGZyb21Qcm90b2Nv
bFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiY3lhbiIp
Ci0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFy
YW1ldGVyc1ByaW50Q29sb3JDeWFuOwotICAgIGlmICh2YWx1ZSA9PSAibWFnZW50YSIpCi0gICAg
ICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVy
c1ByaW50Q29sb3JNYWdlbnRhOwotICAgIGlmICh2YWx1ZSA9PSAieWVsbG93IikKLSAgICAgICAg
cmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJp
bnRDb2xvclllbGxvdzsKLSAgICBpZiAodmFsdWUgPT0gImJsYWNrIikKLSAgICAgICAgcmV0dXJu
IFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xv
ckJsYWNrOwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0
dXJuLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLQotI2ltcG9y
dCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCi0j
aW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotCi11
c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucyAoRGF0YWJhc2VEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlRGF0YWJhc2VJZDoo
TlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9w
YXJzZVByaW1hcnlDb2xvcnM6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClw
YXlsb2FkOwotKyAodm9pZClfcGFyc2VDb2xvckxpc3Q6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAq
KilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLSsgKHZvaWQpX3BhcnNlRXJyb3I6
KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBh
eWxvYWQ7Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucyAoRGF0YWJhc2VEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlRGF0YWJhc2VJZDooTlNOdW1i
ZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENF
UFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU051bWJlciBjbGFzc10pOwotICAgICpvdXRW
YWx1ZSA9IChOU051bWJlciAqKXBheWxvYWQ7Ci19Ci0KLSsgKHZvaWQpX3BhcnNlUHJpbWFyeUNv
bG9yczooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAg
ICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBjbGFzc10p
OwotICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycz4gcmVzdWx0
ID0gSW5zcGVjdG9yOjpmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sRGF0YWJhc2VQcmlt
YXJ5Q29sb3JzPihwYXlsb2FkKTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9FTlVNX1ZB
TFVFKHJlc3VsdCwgQCJQcmltYXJ5Q29sb3JzIik7Ci0gICAgKm91dFZhbHVlID0gQChyZXN1bHQu
dmFsdWUoKSk7Ci19Ci0KLSsgKHZvaWQpX3BhcnNlQ29sb3JMaXN0OihOU0FycmF5Lyo8TlNTdHJp
bmc+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19F
WENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gY2xh
c3NdKTsKLSAgICAqb3V0VmFsdWUgPSAoTlNBcnJheS8qPE5TU3RyaW5nPiovICopcGF5bG9hZDsK
LX0KLQotKyAodm9pZClfcGFyc2VFcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKilv
dXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOwotICAgICpvdXRWYWx1
ZSA9IFtbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBh
eWxvYWRdOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxs
LXJldHVybi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAi
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJ
UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4K
LSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7
Ci0KLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IKLQotLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcg
KiwgaWQ+ICopcGF5bG9hZAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAg
ICAgICByZXR1cm4gbmlsOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9Q
RVJUWShwYXlsb2FkW0AibWVzc2FnZSJdLCBAIm1lc3NhZ2UiKTsKLSAgICBzZWxmLm1lc3NhZ2Ug
PSBwYXlsb2FkW0AibWVzc2FnZSJdOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJF
RF9QUk9QRVJUWShwYXlsb2FkW0AiY29kZSJdLCBAImNvZGUiKTsKLSAgICBzZWxmLmNvZGUgPSBb
cGF5bG9hZFtAImNvZGUiXSBpbnRlZ2VyVmFsdWVdOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0t
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2Jq
ZWN0ICopb2JqZWN0Ci17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEpTT05PYmpl
Y3Q6W29iamVjdCB0b0pTT05PYmplY3RdLmdldCgpXSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0K
LSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTWVzc2FnZToo
TlNTdHJpbmcgKiltZXNzYWdlIGNvZGU6KGludCljb2RlCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtz
dXBlciBpbml0XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBUSFJPV19FWENFUFRJT05f
Rk9SX1JFUVVJUkVEX1BST1BFUlRZKG1lc3NhZ2UsIEAibWVzc2FnZSIpOwotCi0gICAgc2VsZi5t
ZXNzYWdlID0gbWVzc2FnZTsKLSAgICBzZWxmLmNvZGUgPSBjb2RlOwotCi0gICAgcmV0dXJuIHNl
bGY7Ci19Ci0KLS0gKHZvaWQpc2V0TWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlCi17Ci0gICAg
W3N1cGVyIHNldFN0cmluZzptZXNzYWdlIGZvcktleTpAIm1lc3NhZ2UiXTsKLX0KLQotLSAoTlNT
dHJpbmcgKiltZXNzYWdlCi17Ci0gICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJtZXNz
YWdlIl07Ci19Ci0KLS0gKHZvaWQpc2V0Q29kZTooaW50KWNvZGUKLXsKLSAgICBbc3VwZXIgc2V0
SW50ZWdlcjpjb2RlIGZvcktleTpAImNvZGUiXTsKLX0KLQotLSAoaW50KWNvZGUKLXsKLSAgICBy
ZXR1cm4gW3N1cGVyIGludGVnZXJGb3JLZXk6QCJjb2RlIl07Ci19Ci0KLUBlbmQKLQotCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9kZWZpbml0
aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2RlZmluaXRpb25zLXdp
dGgtbWFjLXBsYXRmb3JtLmpzb24tcmVzdWx0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBkNGMwZmUzZmUzYy4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZGVmaW5pdGlvbnMtd2l0aC1t
YWMtcGxhdGZvcm0uanNvbi1yZXN1bHQKKysrIC9kZXYvbnVsbApAQCAtMSw4NzAgKzAsMCBAQAot
IyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLSMjIyBFbmQgRmlsZTog
SW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJu
YXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBl
cy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
Lmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4K
LQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVyIHsKLXB1YmxpYzoKLSAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNr
ZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZN
b3ZlKGRpc3BhdGNoZXIpOyB9Ci0gICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRj
aGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQotcHJpdmF0
ZToKLSAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Ci19
OwotCi0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotI2VuZGlmIC8vIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJu
YXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlz
cGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25z
LXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3Rz
LmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3Rv
ciB7Ci0KLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCi0KLQotfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09O
VmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCi0jaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgotI2Vu
ZGlmCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5j
bHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewotCi1jbGFzcyBGcm9udGVuZFJvdXRlcjsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0j
IyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgot
Ci0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLW5hbWVzcGFjZSBQcm90
b2NvbCB7Ci0KLQotCi0KLQotCi0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5o
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLQotI2luY2x1ZGUgPHd0
Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNl
IEluc3BlY3RvciB7Ci0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLQotCi19IC8vIG5hbWVzcGFj
ZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFj
a2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZp
bml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0K
LQotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
LQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJj
b25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0j
aW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotCi1uYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJv
dG9jb2wuaD4KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50
ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAotQGVuZAotCi0KLSMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25m
aWd1cmF0aW9uLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW1wb3J0
ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRD
b3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0KLXVzaW5nIG5hbWVz
cGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0
aW9uCi17Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsK
LX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNw
ZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsK
LSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xs
ZXIpOwotICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1cm4gc2VsZjsKLX0K
LQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi1AZW5kCi0K
LQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJv
dG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMu
aCIKLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0
b3I7Ci0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3Vu
ZGF0aW9uLmg+Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3Qu
aD4KLQotCi0KLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sUGxhdGZv
cm0pIHsKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbCwKLSAgICBUZXN0UHJvdG9jb2xQbGF0
Zm9ybUdlbmVyaWMsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1JT1MsCi0gICAgVGVzdFByb3Rv
Y29sUGxhdGZvcm1NYWNPUywKLX07Ci0KLQotCi0KLQotCi0KLQotCi0KLSNpbXBvcnQgPFdlYklu
c3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4KLQotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50
ZXJuYWwuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdp
dGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xK
U09OT2JqZWN0UHJpdmF0ZS5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJ
bnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi0KLQot
Ci0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIK
LSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KLQot
bmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4K
LU9wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYg
dmFsdWUpOwotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sUGxh
dGZvcm0gdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9j
b2xQbGF0Zm9ybUFsbDoKLSAgICAgICAgcmV0dXJuICJhbGwiX3M7Ci0gICAgY2FzZSBUZXN0UHJv
dG9jb2xQbGF0Zm9ybUdlbmVyaWM6Ci0gICAgICAgIHJldHVybiAiZ2VuZXJpYyJfczsKLSAgICBj
YXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOgotICAgICAgICByZXR1cm4gImlvcyJfczsKLSAg
ICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M6Ci0gICAgICAgIHJldHVybiAibWFjb3Mi
X3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29s
UGxhdGZvcm0+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAg
IGlmICh2YWx1ZSA9PSAiYWxsIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3Jt
QWxsOwotICAgIGlmICh2YWx1ZSA9PSAiZ2VuZXJpYyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJv
dG9jb2xQbGF0Zm9ybUdlbmVyaWM7Ci0gICAgaWYgKHZhbHVlID09ICJpb3MiKQotICAgICAgICBy
ZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1JT1M7Ci0gICAgaWYgKHZhbHVlID09ICJtYWNvcyIp
Ci0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOwotICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90
b2NvbFR5cGVQYXJzZXIuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05P
YmplY3RQcml2YXRlLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotCi0KLQot
Ci0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVy
bmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9y
dCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLSNpbXBvcnQg
PHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBu
YW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMu
bW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2RvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbi1yZXN1bHQg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9l
eHBlY3RlZC9kb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24tcmVzdWx0CmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBmNWI1OTE3YWEwYi4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZG9t
YWluLWRlYnVnZ2FibGVUeXBlcy5qc29uLXJlc3VsdAorKysgL2Rldi9udWxsCkBAIC0xLDEwNjMg
KzAsMCBAQAotIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0vLyBEb21haW4K
LUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIkRvbWFpbiIsIG51bGwpOwotSW5zcGVj
dG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIkRvbWFpbi5Db21tYW5kIiwgbnVsbCwgW10sIFtd
KTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudCgiRG9tYWluLkV2ZW50IiwgbnVsbCwg
W10pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbkRpc3BhdGNoZXIgPSBJbnNwZWN0
b3JCYWNrZW5kLnJlZ2lzdGVyRGlzcGF0Y2hlci5iaW5kKEluc3BlY3RvckJhY2tlbmQsICJEb21h
aW4iKTsKLUluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkRvbWFpbiIsIFsid2ViLXBh
Z2UiXSk7Ci0jIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0j
aWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0KLSNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xUeXBlcy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJv
bnRlbmRSb3V0ZXIuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRj
aGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERp
c3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9Ci0gICAgQmFja2VuZERpc3BhdGNoZXIq
IGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5n
ZXQoKTsgfQotcHJpdmF0ZToKLSAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2Vu
ZERpc3BhdGNoZXI7Ci19OwotCi0KLWNsYXNzIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRj
aGVyIDogcHVibGljIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2
aXJ0dWFsIH5BbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQotICAgIHZpcnR1
YWwgdm9pZCBDb21tYW5kKGxvbmcgY2FsbElkKSA9IDA7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKLQotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENI
RVJTKQotIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLQot
IyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbgotLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1
ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7
Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLWNsYXNzIEFs
dGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyOwotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi1jbGFzcyBEb21haW5CYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIgewotcHVibGljOgotICAgIHZpcnR1YWwgdm9pZCBDb21tYW5kKEVycm9yU3RyaW5n
JikgPSAwOwotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgfkRvbWFpbkJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlcigpOwotfTsKLQotY2xhc3MgRG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBw
dWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHN0YXRp
YyBSZWY8RG9tYWluQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYs
IERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIHZvaWQgZGlzcGF0Y2gobG9u
ZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1l
c3NhZ2UpIGZpbmFsOwotcHJpdmF0ZToKLSAgICB2b2lkIENvbW1hbmQobG9uZyByZXF1ZXN0SWQs
IFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0jaWYgRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi1wdWJsaWM6Ci0gICAgdm9pZCBzZXRBbHRlcm5hdGVE
aXNwYXRjaGVyKEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNw
YXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0K
LXByaXZhdGU6Ci0gICAgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIqIG1fYWx0ZXJu
YXRlRGlzcGF0Y2hlciB7IG51bGxwdHIgfTsKLSNlbmRpZgotcHJpdmF0ZToKLSAgICBEb21haW5C
YWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYsIERvbWFpbkJhY2tlbmREaXNwYXRj
aGVySGFuZGxlciopOwotICAgIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2Vu
dCB7IG51bGxwdHIgfTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBG
aWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNr
ZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9t
YWluLWRlYnVnZ2FibGVUeXBlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0QmFja2VuZERp
c3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVu
ZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL05l
dmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jaWYgRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jaW5jbHVkZSAiVGVzdEFsdGVy
bmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewotCi1Eb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5Eb21haW5CYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXIoKSB7IH0KLQotUmVmPERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBEb21haW5C
YWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0
Y2hlciwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKLXsKLSAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hl
ciwgYWdlbnQpKTsKLX0KLQotRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkRvbWFpbkJhY2tlbmRE
aXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgRG9tYWluQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKLSAgICA6IFN1cHBsZW1lbnRhbEJhY2tlbmRE
aXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQotICAgICwgbV9hZ2VudChhZ2VudCkKLXsKLSAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oIkRvbWFp
biJfcywgdGhpcyk7Ci19Ci0KLXZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNo
KGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4m
JiBtZXNzYWdlKQotewotICAgIFJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgq
dGhpcyk7Ci0KLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOwotICAgIG1lc3Nh
Z2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsKLQotICAgIGlmIChtZXRob2Qg
PT0gIkNvbW1hbmQiKQotICAgICAgICBDb21tYW5kKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0
ZXJzKSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90
b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uIiAr
IG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKLX0KLQotdm9pZCBEb21haW5CYWNrZW5kRGlz
cGF0Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikK
LXsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSAgICBpZiAo
bV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+
Q29tbWFuZChyZXF1ZXN0SWQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAg
ICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIG1fYWdlbnQtPkNvbW1hbmQoZXJyb3IpOwotCi0gICAg
aWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJl
c3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQotICAg
ICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNw
YXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAot
Ci0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9y
IHsKLQotY2xhc3MgRnJvbnRlbmRSb3V0ZXI7Ci0KLWNsYXNzIERvbWFpbkZyb250ZW5kRGlzcGF0
Y2hlciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgRG9tYWlu
RnJvbnRlbmREaXNwYXRjaGVyKEZyb250ZW5kUm91dGVyJiBmcm9udGVuZFJvdXRlcikgOiBtX2Zy
b250ZW5kUm91dGVyKGZyb250ZW5kUm91dGVyKSB7IH0KLSAgICB2b2lkIEV2ZW50KCk7Ci1wcml2
YXRlOgotICAgIEZyb250ZW5kUm91dGVyJiBtX2Zyb250ZW5kUm91dGVyOwotfTsKLQotfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJz
LmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdm9pZCBEb21haW5G
cm9udGVuZERpc3BhdGNoZXI6OkV2ZW50KCkKLXsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29u
TWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0
cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9zKTsKLQotICAgIG1fZnJvbnRlbmRSb3V0
ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJz
LmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0j
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1
ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotbmFt
ZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLQotCi0KLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3Rv
Y29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xPYmplY3RzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0KLSNpbmNsdWRl
IDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVz
cGFjZSBJbnNwZWN0b3IgewotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotfSAvLyBuYW1l
c3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
ZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5h
dGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLUBw
cm90b2NvbCBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyOwotCi1uYW1lc3BhY2UgSW5z
cGVjdG9yIHsKLQotCi1jbGFzcyBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXIg
ZmluYWwgOiBwdWJsaWMgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIgewotICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIE9iakNJbnNwZWN0b3JEb21haW5C
YWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiBoYW5k
bGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9Ci0gICAgdm9pZCBDb21tYW5kKGxvbmcgcmVx
dWVzdElkKSBmaW5hbDsKLXByaXZhdGU6Ci0gICAgUmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbERv
bWFpbkRvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgK
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJj
b25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0j
aW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotCi1uYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKLQotdm9pZCBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNo
ZXI6OkNvbW1hbmQobG9uZyByZXF1ZXN0SWQpCi17Ci0gICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNw
b25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKENvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNz
Q2FsbGJhY2s6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9j
b2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidE
b21haW4uQ29tbWFuZCcgd2FzIG5vdCBmb3VuZCJfcyk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNw
YXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigp
LT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgIH07Ci0KLSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sg
PSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElk
LCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7Ci0gICAgfTsKLQotICAgIFttX2RlbGVn
YXRlIENvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFj
azpzdWNjZXNzQ2FsbGJhY2tdOwotfQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0j
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0
UHJvdG9jb2wuaD4KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1A
aW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAotQHByb3BlcnR5
IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNldERvbWFpbkhhbmRsZXI6KSBpZDxUZXN0UHJv
dG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiBkb21haW5IYW5kbGVyOwotQHByb3BlcnR5IChub25h
dG9taWMsIHJlYWRvbmx5KSBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIg
KmRvbWFpbkV2ZW50RGlzcGF0Y2hlcjsKLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbENvbmZpZ3VyYXRpb24uaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbi5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1
Z2dhYmxlVHlwZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCi0KLSNpbXBvcnQgIlRl
c3RQcm90b2NvbEludGVybmFsLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0
Y2hlcnMuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFn
ZW50Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRy
b2xsZXIuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tl
bmREaXNwYXRjaGVycy5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXJzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1l
bnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCi17Ci0gICAgQXVnbWVudGFibGVJbnNw
ZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKLSAgICBpZDxUZXN0UHJvdG9jb2xEb21haW5E
b21haW5IYW5kbGVyPiBfZG9tYWluSGFuZGxlcjsKLSAgICBUZXN0UHJvdG9jb2xEb21haW5Eb21h
aW5FdmVudERpc3BhdGNoZXIgKl9kb21haW5FdmVudERpc3BhdGNoZXI7Ci19Ci0KLS0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxl
ciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxm
KQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBfY29u
dHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVh
bGxvYwotewotICAgIFtfZG9tYWluSGFuZGxlciByZWxlYXNlXTsKLSAgICBbX2RvbWFpbkV2ZW50
RGlzcGF0Y2hlciByZWxlYXNlXTsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLS0gKHZvaWQp
c2V0RG9tYWluSGFuZGxlcjooaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4paGFu
ZGxlcgotewotICAgIGlmIChoYW5kbGVyID09IF9kb21haW5IYW5kbGVyKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBbX2RvbWFpbkhhbmRsZXIgcmVsZWFzZV07Ci0gICAgX2RvbWFpbkhhbmRsZXIg
PSBbaGFuZGxlciByZXRhaW5dOwotCi0gICAgYXV0byBhbHRlcm5hdGVEaXNwYXRjaGVyID0gbWFr
ZVVuaXF1ZTxPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXI+KGhhbmRsZXIpOwot
ICAgIGF1dG8gYWx0ZXJuYXRlQWdlbnQgPSBtYWtlVW5pcXVlPEFsdGVybmF0ZURpc3BhdGNoYWJs
ZUFnZW50PERvbWFpbkJhY2tlbmREaXNwYXRjaGVyLCBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlz
cGF0Y2hlcj4+KCJEb21haW4iX3MsICpfY29udHJvbGxlciwgV1RGTW92ZShhbHRlcm5hdGVEaXNw
YXRjaGVyKSk7Ci0gICAgX2NvbnRyb2xsZXItPmFwcGVuZEV4dHJhQWdlbnQoV1RGTW92ZShhbHRl
cm5hdGVBZ2VudCkpOwotfQotCi0tIChpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVy
Pilkb21haW5IYW5kbGVyCi17Ci0gICAgcmV0dXJuIF9kb21haW5IYW5kbGVyOwotfQotCi0tIChU
ZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKilkb21haW5FdmVudERpc3Bh
dGNoZXIKLXsKLSAgICBpZiAoIV9kb21haW5FdmVudERpc3BhdGNoZXIpCi0gICAgICAgIF9kb21h
aW5FdmVudERpc3BhdGNoZXIgPSBbW1Rlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0
Y2hlciBhbGxvY10gaW5pdFdpdGhDb250cm9sbGVyOl9jb250cm9sbGVyXTsKLSAgICByZXR1cm4g
X2RvbWFpbkV2ZW50RGlzcGF0Y2hlcjsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
RXZlbnREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRv
bWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0
ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVz
Lmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0
UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIKLXsKLSAgICBBdWdtZW50YWJsZUlu
c3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xs
ZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAg
cmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRyb2xsZXIgPSBj
b250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKUV2ZW50Ci17Ci0gICAg
Y29uc3QgRnJvbnRlbmRSb3V0ZXImIHJvdXRlciA9IF9jb250cm9sbGVyLT5mcm9udGVuZFJvdXRl
cigpOwotCi0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFp
bi5FdmVudCJfcyk7Ci0gICAgcm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3Ry
aW5nKCkpOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERp
c3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxGb3VuZGF0
aW9uL0ZvdW5kYXRpb24uaD4KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNP
Tk9iamVjdC5oPgotCi0KLQotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9j
b2xQbGF0Zm9ybSkgewotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsLAotICAgIFRlc3RQcm90
b2NvbFBsYXRmb3JtR2VuZXJpYywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUywKLSAgICBU
ZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TLAotfTsKLQotCi0KLQotCi1AcHJvdG9jb2wgVGVzdFBy
b3RvY29sRG9tYWluRG9tYWluSGFuZGxlciA8TlNPYmplY3Q+Ci1Ab3B0aW9uYWwKLS0gKHZvaWQp
Q29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JD
YWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikodm9pZCkpc3VjY2Vzc0NhbGxiYWNrOwot
QGVuZAotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZh
Y2UgVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyIDogTlNPYmplY3QKLS0g
KHZvaWQpRXZlbnQ7Ci1AZW5kCi0KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29s
QnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90
b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKLSNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2lt
cG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xEb21haW5E
b21haW5FdmVudERpc3BhdGNoZXIgKFByaXZhdGUpCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhD
b250cm9sbGVyOihJbnNwZWN0b3I6OkF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29u
dHJvbGxlcjsKLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgK
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbC5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJz
aW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgT2Jq
Q0VudW1UeXBlPgotT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29u
c3QgU3RyaW5nJiB2YWx1ZSk7Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0
UHJvdG9jb2xQbGF0Zm9ybSB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBjYXNl
IFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOgotICAgICAgICByZXR1cm4gImFsbCJfczsKLSAgICBj
YXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzoKLSAgICAgICAgcmV0dXJuICJnZW5lcmlj
Il9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1JT1M6Ci0gICAgICAgIHJldHVybiAi
aW9zIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzoKLSAgICAgICAgcmV0
dXJuICJtYWNvcyJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxU
ZXN0UHJvdG9jb2xQbGF0Zm9ybT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFs
dWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJhbGwiKQotICAgICAgICByZXR1cm4gVGVzdFByb3Rv
Y29sUGxhdGZvcm1BbGw7Ci0gICAgaWYgKHZhbHVlID09ICJnZW5lcmljIikKLSAgICAgICAgcmV0
dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzsKLSAgICBpZiAodmFsdWUgPT0gImlvcyIp
Ci0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzsKLSAgICBpZiAodmFsdWUg
PT0gIm1hY29zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M7Ci0g
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0K
LSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0
UHJvdG9jb2xUeXBlUGFyc2VyLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xK
U09OT2JqZWN0UHJpdmF0ZS5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLQot
Ci0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFs
LmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8
V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLSNpbXBvcnQgPHd0
Zi9Bc3NlcnRpb25zLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1l
c3BhY2UgSW5zcGVjdG9yOwotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9nZW5lcmljL2V4cGVjdGVkL2RvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1
Z2dhYmxlVHlwZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2RvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5n
LWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJlc3VsdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggZDMwZjI0YjVjMzUuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2RvbWFpbi10YXJn
ZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJlc3VsdAorKysgL2Rl
di9udWxsCkBAIC0xLDEwNjMgKzAsMCBAQAotIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tl
bmRDb21tYW5kcy5qcwotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10
YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLS8vIERvbWFpbgotSW5zcGVjdG9yQmFj
a2VuZC5yZWdpc3RlckRvbWFpbigiRG9tYWluIiwgbnVsbCk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJl
Z2lzdGVyQ29tbWFuZCgiRG9tYWluLkNvbW1hbmQiLCBbInBhZ2UiLCAid29ya2VyIl0sIFtdLCBb
XSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnQoIkRvbWFpbi5FdmVudCIsIG51bGws
IFtdKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW5EaXNwYXRjaGVyID0gSW5zcGVj
dG9yQmFja2VuZC5yZWdpc3RlckRpc3BhdGNoZXIuYmluZChJbnNwZWN0b3JCYWNrZW5kLCAiRG9t
YWluIik7Ci1JbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJEb21haW4iLCBbInBhZ2Ui
XSk7Ci0jIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRl
YnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCi0jaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotCi1uYW1lc3BhY2UgSW5zcGVj
dG9yIHsKLQotY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAg
IHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRp
c3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0K
LSAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVy
biBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Ci1wcml2YXRlOgotICAgIFJlZlB0cjxCYWNr
ZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKLX07Ci0KLQotY2xhc3MgQWx0ZXJu
YXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXIgewotcHVibGljOgotICAgIHZpcnR1YWwgfkFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNw
YXRjaGVyKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIENvbW1hbmQobG9uZyBjYWxsSWQpID0gMDsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jZW5kaWYgLy8gRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5
cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0
UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFt
ZXNwYWNlIEluc3BlY3RvciB7Ci0KLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCi0jaWYg
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi1jbGFzcyBBbHRlcm5hdGVE
b21haW5CYWNrZW5kRGlzcGF0Y2hlcjsKLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVS
TkFURV9ESVNQQVRDSEVSUykKLQotY2xhc3MgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChFcnJvclN0cmluZyYpID0gMDsK
LXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIH5Eb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIo
KTsKLX07Ci0KLWNsYXNzIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1
cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPERv
bWFpbkJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBEb21haW5C
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVz
dElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBm
aW5hbDsKLXByaXZhdGU6Ci0gICAgdm9pZCBDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8
SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQotcHVibGljOgotICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0Y2hl
cihBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikg
eyBtX2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9Ci1wcml2YXRl
OgotICAgIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKiBtX2FsdGVybmF0ZURpc3Bh
dGNoZXIgeyBudWxscHRyIH07Ci0jZW5kaWYKLXByaXZhdGU6Ci0gICAgRG9tYWluQmFja2VuZERp
c3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIqKTsKLSAgICBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQgeyBudWxs
cHRyIH07Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVz
dEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3Bh
dGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJn
ZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+
Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0j
aW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgotI2VuZGlmCi0KLW5h
bWVzcGFjZSBJbnNwZWN0b3IgewotCi1Eb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5E
b21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KLQotUmVmPERvbWFpbkJhY2tlbmRE
aXNwYXRjaGVyPiBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEJhY2tlbmREaXNwYXRj
aGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBh
Z2VudCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEb21haW5CYWNrZW5kRGlzcGF0Y2hl
cihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKLX0KLQotRG9tYWluQmFja2VuZERpc3BhdGNo
ZXI6OkRvbWFpbkJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlz
cGF0Y2hlciwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKLSAgICA6IFN1
cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQotICAgICwgbV9h
Z2VudChhZ2VudCkKLXsKLSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNo
ZXJGb3JEb21haW4oIkRvbWFpbiJfcywgdGhpcyk7Ci19Ci0KLXZvaWQgRG9tYWluQmFja2VuZERp
c3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwg
UmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQotewotICAgIFJlZjxEb21haW5CYWNrZW5kRGlz
cGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7Ci0KLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJh
bWV0ZXJzOwotICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsK
LQotICAgIGlmIChtZXRob2QgPT0gIkNvbW1hbmQiKQotICAgICAgICBDb21tYW5kKHJlcXVlc3RJ
ZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNw
YXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RG
b3VuZCwgIidEb21haW4uIiArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKLX0KLQotdm9p
ZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVmUHRy
PEpTT046Ok9iamVjdD4mJikKLXsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKLSAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0
ZXJuYXRlRGlzcGF0Y2hlci0+Q29tbWFuZChyZXF1ZXN0SWQpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotI2VuZGlmCi0KLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2Jq
ZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIG1fYWdlbnQtPkNvbW1h
bmQoZXJyb3IpOwotCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxz
ZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2Nv
bEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOwot
fQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2Vu
ZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hl
cnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBl
LW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFBy
b3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBG
cm9udGVuZFJvdXRlcjsKLQotY2xhc3MgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVyIHsKLSAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBEb21haW5Gcm9udGVuZERpc3Bh
dGNoZXIoRnJvbnRlbmRSb3V0ZXImIGZyb250ZW5kUm91dGVyKSA6IG1fZnJvbnRlbmRSb3V0ZXIo
ZnJvbnRlbmRSb3V0ZXIpIHsgfQotICAgIHZvaWQgRXZlbnQoKTsKLXByaXZhdGU6Ci0gICAgRnJv
bnRlbmRSb3V0ZXImIG1fZnJvbnRlbmRSb3V0ZXI7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2Fi
bGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgi
Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0K
LXZvaWQgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVyOjpFdmVudCgpCi17Ci0gICAgUmVmPEpTT046
Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25N
ZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7Ci0KLSAgICBt
X2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwot
fQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMu
aAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlLW1h
dGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25z
Lmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotbmFtZXNwYWNlIFByb3RvY29sIHsK
LQotCi0KLQotCi0KLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2Fi
bGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLQot
I2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
LQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLQotCi19
IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUu
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+
Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi1AcHJvdG9jb2wgVGVzdFByb3RvY29sRG9t
YWluRG9tYWluSGFuZGxlcjsKLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotY2xhc3MgT2Jq
Q0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0
ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
LXB1YmxpYzoKLSAgICBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXIoaWQ8VGVz
dFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFu
ZGxlcjsgfQotICAgIHZvaWQgQ29tbWFuZChsb25nIHJlcXVlc3RJZCkgZmluYWw7Ci1wcml2YXRl
OgotICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPj4gbV9k
ZWxlZ2F0ZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUu
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0
ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgot
Ci0jaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotCi1uYW1l
c3BhY2UgSW5zcGVjdG9yIHsKLQotdm9pZCBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3Bh
dGNoZXI6OkNvbW1hbmQobG9uZyByZXF1ZXN0SWQpCi17Ci0gICAgaWYgKCFbbV9kZWxlZ2F0ZSBy
ZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKENvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazpzdWNj
ZXNzQ2FsbGJhY2s6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJv
dG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwg
IidEb21haW4uQ29tbWFuZCcgd2FzIG5vdCBmb3VuZCJfcyk7Ci0gICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmRE
aXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgIH07Ci0KLSAgICBpZCBzdWNjZXNzQ2FsbGJh
Y2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVz
dElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7Ci0gICAgfTsKLQotICAgIFttX2Rl
bGVnYXRlIENvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxs
YmFjazpzdWNjZXNzQ2FsbGJhY2tdOwotfQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgot
Ci0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVn
Z2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgotCi1fX2F0dHJpYnV0ZV9f
KCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbiA6IE5TT2JqZWN0Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluLCBzZXR0ZXI9
c2V0RG9tYWluSGFuZGxlcjopIGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IGRv
bWFpbkhhbmRsZXI7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFRlc3RQcm90b2Nv
bERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqZG9tYWluRXZlbnREaXNwYXRjaGVyOwotQGVu
ZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVn
Z2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgotCi0jaW1wb3J0ICJUZXN0
UHJvdG9jb2xJbnRlcm5hbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNo
ZXJzLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2Vu
dC5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9s
bGVyLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5k
RGlzcGF0Y2hlcnMuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVycy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW1wbGVtZW50
YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVj
dG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci0gICAgaWQ8VGVzdFByb3RvY29sRG9tYWluRG9t
YWluSGFuZGxlcj4gX2RvbWFpbkhhbmRsZXI7Ci0gICAgVGVzdFByb3RvY29sRG9tYWluRG9tYWlu
RXZlbnREaXNwYXRjaGVyICpfZG9tYWluRXZlbnREaXNwYXRjaGVyOwotfQotCi0tIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIq
KWNvbnRyb2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikK
LSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRy
b2xsZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWRlYWxs
b2MKLXsKLSAgICBbX2RvbWFpbkhhbmRsZXIgcmVsZWFzZV07Ci0gICAgW19kb21haW5FdmVudERp
c3BhdGNoZXIgcmVsZWFzZV07Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi0tICh2b2lkKXNl
dERvbWFpbkhhbmRsZXI6KGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+KWhhbmRs
ZXIKLXsKLSAgICBpZiAoaGFuZGxlciA9PSBfZG9tYWluSGFuZGxlcikKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgW19kb21haW5IYW5kbGVyIHJlbGVhc2VdOwotICAgIF9kb21haW5IYW5kbGVyID0g
W2hhbmRsZXIgcmV0YWluXTsKLQotICAgIGF1dG8gYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IG1ha2VV
bmlxdWU8T2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyPihoYW5kbGVyKTsKLSAg
ICBhdXRvIGFsdGVybmF0ZUFnZW50ID0gbWFrZVVuaXF1ZTxBbHRlcm5hdGVEaXNwYXRjaGFibGVB
Z2VudDxEb21haW5CYWNrZW5kRGlzcGF0Y2hlciwgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3Bh
dGNoZXI+PigiRG9tYWluIl9zLCAqX2NvbnRyb2xsZXIsIFdURk1vdmUoYWx0ZXJuYXRlRGlzcGF0
Y2hlcikpOwotICAgIF9jb250cm9sbGVyLT5hcHBlbmRFeHRyYUFnZW50KFdURk1vdmUoYWx0ZXJu
YXRlQWdlbnQpKTsKLX0KLQotLSAoaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4p
ZG9tYWluSGFuZGxlcgotewotICAgIHJldHVybiBfZG9tYWluSGFuZGxlcjsKLX0KLQotLSAoVGVz
dFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyICopZG9tYWluRXZlbnREaXNwYXRj
aGVyCi17Ci0gICAgaWYgKCFfZG9tYWluRXZlbnREaXNwYXRjaGVyKQotICAgICAgICBfZG9tYWlu
RXZlbnREaXNwYXRjaGVyID0gW1tUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNo
ZXIgYWxsb2NdIGluaXRXaXRoQ29udHJvbGxlcjpfY29udHJvbGxlcl07Ci0gICAgcmV0dXJuIF9k
b21haW5FdmVudERpc3BhdGNoZXI7Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2
ZW50RGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21h
aW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIK
LSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7
Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNo
ZXIKLXsKLSAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwot
fQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3Bl
Y3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwot
ICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxl
cik7Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQot
Ci0tICh2b2lkKUV2ZW50Ci17Ci0gICAgY29uc3QgRnJvbnRlbmRSb3V0ZXImIHJvdXRlciA9IF9j
b250cm9sbGVyLT5mcm9udGVuZFJvdXRlcigpOwotCi0gICAgUmVmPEpTT046Ok9iamVjdD4ganNv
bk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRT
dHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7Ci0gICAgcm91dGVyLnNlbmRFdmVu
dChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2wuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10
YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91
bmRhdGlvbi5oPgotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0
Lmg+Ci0KLQotCi0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbFBsYXRm
b3JtKSB7Ci0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1BbGwsCi0gICAgVGVzdFByb3RvY29sUGxh
dGZvcm1HZW5lcmljLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TLAotICAgIFRlc3RQcm90
b2NvbFBsYXRmb3JtTWFjT1MsCi19OwotCi0KLQotCi0KLUBwcm90b2NvbCBUZXN0UHJvdG9jb2xE
b21haW5Eb21haW5IYW5kbGVyIDxOU09iamVjdD4KLUBvcHRpb25hbAotLSAodm9pZClDb21tYW5k
V2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNr
IHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKSh2b2lkKSlzdWNjZXNzQ2FsbGJhY2s7Ci1AZW5kCi0K
LV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0
UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgOiBOU09iamVjdAotLSAodm9pZClF
dmVudDsKLUBlbmQKLQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENv
bXBhdGliaWxpdHlPYmplY3RzLmg+Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKLQot
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdn
YWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmpl
Y3RQcml2YXRlLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3Rv
ckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLUBpbnRlcmZhY2Ug
VGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyIChQcml2YXRlKQotLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooSW5zcGVjdG9yOjpBdWdtZW50YWJsZUluc3Bl
Y3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXI7Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xJbnRlcm5hbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJn
ZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgot
I2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgotCi1u
YW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgot
T3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2
YWx1ZSk7Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xQbGF0
Zm9ybSB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQcm90b2Nv
bFBsYXRmb3JtQWxsOgotICAgICAgICByZXR1cm4gImFsbCJfczsKLSAgICBjYXNlIFRlc3RQcm90
b2NvbFBsYXRmb3JtR2VuZXJpYzoKLSAgICAgICAgcmV0dXJuICJnZW5lcmljIl9zOwotICAgIGNh
c2UgVGVzdFByb3RvY29sUGxhdGZvcm1JT1M6Ci0gICAgICAgIHJldHVybiAiaW9zIl9zOwotICAg
IGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzoKLSAgICAgICAgcmV0dXJuICJtYWNvcyJf
czsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xQ
bGF0Zm9ybT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAg
aWYgKHZhbHVlID09ICJhbGwiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1B
bGw7Ci0gICAgaWYgKHZhbHVlID09ICJnZW5lcmljIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90
b2NvbFBsYXRmb3JtR2VuZXJpYzsKLSAgICBpZiAodmFsdWUgPT0gImlvcyIpCi0gICAgICAgIHJl
dHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzsKLSAgICBpZiAodmFsdWUgPT0gIm1hY29zIikK
LSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M7Ci0gICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIK
LSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rv
ci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNw
ZWN0b3I7Ci0KLQotCi0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21h
aW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQ
cm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgot
I2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsK
LQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3Rl
ZC9kb21haW4tdGFyZ2V0VHlwZXMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9kb21haW4tdGFyZ2V0VHlw
ZXMuanNvbi1yZXN1bHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4OTQ4YTJmNzQ3
Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9kb21haW4tdGFyZ2V0VHlwZXMuanNvbi1yZXN1bHQK
KysrIC9kZXYvbnVsbApAQCAtMSwxMDYzICswLDAgQEAKLSMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0
b3JCYWNrZW5kQ29tbWFuZHMuanMKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBk
b21haW4tdGFyZ2V0VHlwZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0vLyBEb21haW4KLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIkRv
bWFpbiIsIFsicGFnZSJdKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJEb21h
aW4uQ29tbWFuZCIsIFsicGFnZSJdLCBbXSwgW10pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rl
ckV2ZW50KCJEb21haW4uRXZlbnQiLCBbInBhZ2UiXSwgW10pOwotSW5zcGVjdG9yQmFja2VuZC5y
ZWdpc3RlckRvbWFpbkRpc3BhdGNoZXIgPSBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRGlzcGF0
Y2hlci5iaW5kKEluc3BlY3RvckJhY2tlbmQsICJEb21haW4iKTsKLUluc3BlY3RvckJhY2tlbmQu
YWN0aXZhdGVEb21haW4oIkRvbWFpbiIsIG51bGwpOwotIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JC
YWNrZW5kQ29tbWFuZHMuanMKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5k
RGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10
YXJnZXRUeXBlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgotI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLQotbmFtZXNwYWNlIEluc3BlY3Rv
ciB7Ci0KLWNsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2
b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNw
YXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9Ci0g
ICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4g
bV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQotcHJpdmF0ZToKLSAgICBSZWZQdHI8QmFja2Vu
ZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Ci19OwotCi0KLWNsYXNzIEFsdGVybmF0
ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVyIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5BbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0
Y2hlcigpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBDb21tYW5kKGxvbmcgY2FsbElkKSA9IDA7Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hl
cnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBl
cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFn
bWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10eXBlZGVmIFN0
cmluZyBFcnJvclN0cmluZzsKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQotY2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXI7Ci0jZW5kaWYg
Ly8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0KLWNsYXNzIERvbWFp
bkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIENv
bW1hbmQoRXJyb3JTdHJpbmcmKSA9IDA7Ci1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB+RG9tYWlu
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7Ci19OwotCi1jbGFzcyBEb21haW5CYWNrZW5kRGlz
cGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7Ci1w
dWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJh
Y2tlbmREaXNwYXRjaGVyJiwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAg
dm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxK
U09OOjpPYmplY3Q+JiYgbWVzc2FnZSkgZmluYWw7Ci1wcml2YXRlOgotICAgIHZvaWQgQ29tbWFu
ZChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKLSNp
ZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLXB1YmxpYzoKLSAgICB2
b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNo
ZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJu
YXRlRGlzcGF0Y2hlcjsgfQotcHJpdmF0ZToKLSAgICBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlz
cGF0Y2hlciogbV9hbHRlcm5hdGVEaXNwYXRjaGVyIHsgbnVsbHB0ciB9OwotI2VuZGlmCi1wcml2
YXRlOgotICAgIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiwgRG9t
YWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgRG9tYWluQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyKiBtX2FnZW50IHsgbnVsbHB0ciB9OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
VGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2lu
Y2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotI2luY2x1
ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNlbmRpZgotCi1uYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKLQotRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+RG9tYWlu
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9Ci0KLVJlZjxEb21haW5CYWNrZW5kRGlzcGF0
Y2hlcj4gRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYg
YmFja2VuZERpc3BhdGNoZXIsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQp
Ci17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRG9tYWluQmFja2VuZERpc3BhdGNoZXIoYmFj
a2VuZERpc3BhdGNoZXIsIGFnZW50KSk7Ci19Ci0KLURvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpE
b21haW5CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNo
ZXIsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCi0gICAgOiBTdXBwbGVt
ZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKLSAgICAsIG1fYWdlbnQo
YWdlbnQpCi17Ci0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9y
RG9tYWluKCJEb21haW4iX3MsIHRoaXMpOwotfQotCi12b2lkIERvbWFpbkJhY2tlbmREaXNwYXRj
aGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxK
U09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKLXsKLSAgICBSZWY8RG9tYWluQmFja2VuZERpc3BhdGNo
ZXI+IHByb3RlY3QoKnRoaXMpOwotCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVy
czsKLSAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFyYW1ldGVycyk7Ci0KLSAg
ICBpZiAobWV0aG9kID09ICJDb21tYW5kIikKLSAgICAgICAgQ29tbWFuZChyZXF1ZXN0SWQsIFdU
Rk1vdmUocGFyYW1ldGVycykpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQs
ICInRG9tYWluLiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7Ci19Ci0KLXZvaWQgRG9t
YWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09O
OjpPYmplY3Q+JiYpCi17Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCi0gICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0
ZURpc3BhdGNoZXItPkNvbW1hbmQocmVxdWVzdElkKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSNlbmRpZgotCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4g
cmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtX2FnZW50LT5Db21tYW5kKGVy
cm9yKTsKLQotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0gICAgICAgIG1fYmFja2VuZERpc3Bh
dGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOwot
ICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJv
cihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNw
YXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZXMuanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9u
Y2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDx3dGYvSlNP
TlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKLQotY2xhc3MgRnJvbnRlbmRSb3V0ZXI7Ci0KLWNsYXNzIERvbWFpbkZyb250
ZW5kRGlzcGF0Y2hlciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0g
ICAgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVyKEZyb250ZW5kUm91dGVyJiBmcm9udGVuZFJvdXRl
cikgOiBtX2Zyb250ZW5kUm91dGVyKGZyb250ZW5kUm91dGVyKSB7IH0KLSAgICB2b2lkIEV2ZW50
KCk7Ci1wcml2YXRlOgotICAgIEZyb250ZW5kUm91dGVyJiBtX2Zyb250ZW5kUm91dGVyOwotfTsK
LQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERp
c3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNw
cAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlcy5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgotCi0jaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi12b2lkIERv
bWFpbkZyb250ZW5kRGlzcGF0Y2hlcjo6RXZlbnQoKQotewotICAgIFJlZjxKU09OOjpPYmplY3Q+
IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+
c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOwotCi0gICAgbV9mcm9udGVu
ZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0
Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZXMuanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQot
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNs
dWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLW5h
bWVzcGFjZSBQcm90b2NvbCB7Ci0KLQotCi0KLQotCi0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90
b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sT2JqZWN0cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlcy5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0KLSNpbmNsdWRlIDx3
dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFj
ZSBJbnNwZWN0b3IgewotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotfSAvLyBuYW1lc3Bh
Y2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJh
Y2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9t
YWluLXRhcmdldFR5cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tl
bmREaXNwYXRjaGVycy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQotQHByb3RvY29s
IFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI7Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewotCi0KLWNsYXNzIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6
IHB1YmxpYyBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciB7Ci0gICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmRE
aXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsg
bV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KLSAgICB2b2lkIENvbW1hbmQobG9uZyByZXF1ZXN0SWQp
IGZpbmFsOwotcHJpdmF0ZToKLSAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sRG9tYWluRG9t
YWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
LQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVzLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmlnLmgiCi0j
aW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgIlRl
c3RQcm90b2NvbEludGVybmFsLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3Rv
ciB7Ci0KLXZvaWQgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5k
KGxvbmcgcmVxdWVzdElkKQotewotICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVj
dG9yOkBzZWxlY3RvcihDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOild
KSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVx
dWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRG9tYWluLkNvbW1h
bmQnIHdhcyBub3QgZm91bmQiX3MpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5k
UGVuZGluZ0Vycm9ycygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWQgZXJyb3JD
YWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVy
KCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2Vy
dmVyRXJyb3IsIGVycm9yKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRp
bmdFcnJvcnMoKTsKLSAgICB9OwotCi0gICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKSwgZmFsc2UpOwotICAgIH07Ci0KLSAgICBbbV9kZWxlZ2F0ZSBDb21tYW5k
V2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0Nh
bGxiYWNrXTsKLX0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGRvbWFpbi10YXJnZXRUeXBlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KLQot
X19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAotQHByb3BlcnR5IChub25hdG9taWMsIHJl
dGFpbiwgc2V0dGVyPXNldERvbWFpbkhhbmRsZXI6KSBpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21h
aW5IYW5kbGVyPiBkb21haW5IYW5kbGVyOwotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5
KSBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKmRvbWFpbkV2ZW50RGlz
cGF0Y2hlcjsKLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRp
b24uaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlcy5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24uaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwu
aCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KLSNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0j
aW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLQot
dXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24KLXsKLSAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9j
b250cm9sbGVyOwotICAgIGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IF9kb21h
aW5IYW5kbGVyOwotICAgIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAq
X2RvbWFpbkV2ZW50RGlzcGF0Y2hlcjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29u
dHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCi17Ci0g
ICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBu
aWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIpOwotICAgIF9jb250cm9sbGVyID0gY29udHJvbGxl
cjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgW19kb21h
aW5IYW5kbGVyIHJlbGVhc2VdOwotICAgIFtfZG9tYWluRXZlbnREaXNwYXRjaGVyIHJlbGVhc2Vd
OwotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAodm9pZClzZXREb21haW5IYW5kbGVyOihp
ZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiloYW5kbGVyCi17Ci0gICAgaWYgKGhh
bmRsZXIgPT0gX2RvbWFpbkhhbmRsZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIFtfZG9tYWlu
SGFuZGxlciByZWxlYXNlXTsKLSAgICBfZG9tYWluSGFuZGxlciA9IFtoYW5kbGVyIHJldGFpbl07
Ci0KLSAgICBhdXRvIGFsdGVybmF0ZURpc3BhdGNoZXIgPSBtYWtlVW5pcXVlPE9iakNJbnNwZWN0
b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7Ci0gICAgYXV0byBhbHRlcm5hdGVB
Z2VudCA9IG1ha2VVbmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8RG9tYWluQmFja2Vu
ZERpc3BhdGNoZXIsIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyPj4oIkRvbWFpbiJf
cywgKl9jb250cm9sbGVyLCBXVEZNb3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIpKTsKLSAgICBfY29u
dHJvbGxlci0+YXBwZW5kRXh0cmFBZ2VudChXVEZNb3ZlKGFsdGVybmF0ZUFnZW50KSk7Ci19Ci0K
LS0gKGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+KWRvbWFpbkhhbmRsZXIKLXsK
LSAgICByZXR1cm4gX2RvbWFpbkhhbmRsZXI7Ci19Ci0KLS0gKFRlc3RQcm90b2NvbERvbWFpbkRv
bWFpbkV2ZW50RGlzcGF0Y2hlciAqKWRvbWFpbkV2ZW50RGlzcGF0Y2hlcgotewotICAgIGlmICgh
X2RvbWFpbkV2ZW50RGlzcGF0Y2hlcikKLSAgICAgICAgX2RvbWFpbkV2ZW50RGlzcGF0Y2hlciA9
IFtbVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyIGFsbG9jXSBpbml0V2l0
aENvbnRyb2xsZXI6X2NvbnRyb2xsZXJdOwotICAgIHJldHVybiBfZG9tYWluRXZlbnREaXNwYXRj
aGVyOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0
aW9uLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1t
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVzLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAi
VGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLmgiCi0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2Ug
SW5zcGVjdG9yOwotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZl
bnREaXNwYXRjaGVyCi17Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29u
dHJvbGxlcjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVu
dGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtzdXBl
ciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJU
KGNvbnRyb2xsZXIpOwotICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1cm4g
c2VsZjsKLX0KLQotLSAodm9pZClFdmVudAotewotICAgIGNvbnN0IEZyb250ZW5kUm91dGVyJiBy
b3V0ZXIgPSBfY29udHJvbGxlci0+ZnJvbnRlbmRSb3V0ZXIoKTsKLQotICAgIFJlZjxKU09OOjpP
YmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVz
c2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOwotICAgIHJvdXRl
ci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKLX0KLQotQGVuZAotCi0K
LSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBkb21haW4tdGFyZ2V0VHlwZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2ltcG9y
dCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgotCi0KLQotCi10eXBlZGVm
IE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xQbGF0Zm9ybSkgewotICAgIFRlc3RQcm90
b2NvbFBsYXRmb3JtQWxsLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYywKLSAgICBU
ZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TLAot
fTsKLQotCi0KLQotCi1AcHJvdG9jb2wgVGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlciA8
TlNPYmplY3Q+Ci1Ab3B0aW9uYWwKLS0gKHZvaWQpQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOih2
b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZv
aWQoXikodm9pZCkpc3VjY2Vzc0NhbGxiYWNrOwotQGVuZAotCi1fX2F0dHJpYnV0ZV9fKCh2aXNp
YmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sRG9tYWluRG9tYWlu
RXZlbnREaXNwYXRjaGVyIDogTlNPYmplY3QKLS0gKHZvaWQpRXZlbnQ7Ci1AZW5kCi0KLQotI2lt
cG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5o
PgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xJbnRlcm5hbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9t
YWluLXRhcmdldFR5cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xK
U09OT2JqZWN0UHJpdmF0ZS5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJ
bnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi1AaW50
ZXJmYWNlIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAoUHJpdmF0ZSkK
LS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEluc3BlY3Rvcjo6QXVnbWVudGFi
bGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyOwotQGVuZAotCi0KLSMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21h
aW4tdGFyZ2V0VHlwZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9S
V0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KLU9wdGlvbmFsPE9iakNFbnVtVHlwZT4g
ZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOwotCi1pbmxpbmUgU3RyaW5n
IHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sUGxhdGZvcm0gdmFsdWUpCi17Ci0gICAgc3dp
dGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDoKLSAgICAgICAg
cmV0dXJuICJhbGwiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM6Ci0g
ICAgICAgIHJldHVybiAiZ2VuZXJpYyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3Jt
SU9TOgotICAgICAgICByZXR1cm4gImlvcyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRm
b3JtTWFjT1M6Ci0gICAgICAgIHJldHVybiAibWFjb3MiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0
ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sUGxhdGZvcm0+IGZyb21Qcm90b2NvbFN0
cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiYWxsIikKLSAg
ICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOwotICAgIGlmICh2YWx1ZSA9PSAi
Z2VuZXJpYyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM7Ci0g
ICAgaWYgKHZhbHVlID09ICJpb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZv
cm1JT1M7Ci0gICAgaWYgKHZhbHVlID09ICJtYWNvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJv
dG9jb2xQbGF0Zm9ybU1hY09TOwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMu
bW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZXMu
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0
ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29s
LmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCi0jaW1wb3J0IDxXZWJJbnNw
ZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotCi11c2luZyBuYW1lc3BhY2Ug
SW5zcGVjdG9yOwotCi0KLQotCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVzLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFBy
b3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
LmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5o
PgotI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+
Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZG9tYWlucy13aXRoLXZhcnlpbmctY29t
bWFuZC1zaXplcy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1h
bmQtc2l6ZXMuanNvbi1yZXN1bHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjMDdj
YjEzNDdmLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9kb21haW5zLXdpdGgtdmFyeWluZy1jb21t
YW5kLXNpemVzLmpzb24tcmVzdWx0CisrKyAvZGV2L251bGwKQEAgLTEsMTQ1NSArMCwwIEBACi0j
IyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLS8vIE5ldHdv
cmsxCi1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJOZXR3b3JrMSIsIG51bGwpOwot
SW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIk5ldHdvcmsxLmxvYWRSZXNvdXJjZTEi
LCBudWxsLCBbXSwgW10pOwotSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiTmV0d29y
azEiLCBudWxsKTsKLQotLy8gTmV0d29yazMKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21h
aW4oIk5ldHdvcmszIiwgbnVsbCk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgi
TmV0d29yazMubG9hZFJlc291cmNlMSIsIG51bGwsIFtdLCBbXSk7Ci1JbnNwZWN0b3JCYWNrZW5k
LnJlZ2lzdGVyQ29tbWFuZCgiTmV0d29yazMubG9hZFJlc291cmNlMiIsIG51bGwsIFtdLCBbXSk7
Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiTmV0d29yazMubG9hZFJlc291cmNl
MyIsIG51bGwsIFtdLCBbXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiTmV0
d29yazMubG9hZFJlc291cmNlNCIsIG51bGwsIFtdLCBbXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJl
Z2lzdGVyQ29tbWFuZCgiTmV0d29yazMubG9hZFJlc291cmNlNSIsIG51bGwsIFtdLCBbXSk7Ci1J
bnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiTmV0d29yazMubG9hZFJlc291cmNlNiIs
IG51bGwsIFtdLCBbXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiTmV0d29y
azMubG9hZFJlc291cmNlNyIsIG51bGwsIFtdLCBbXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLmFjdGl2
YXRlRG9tYWluKCJOZXR3b3JrMyIsIG51bGwpOwotIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNr
ZW5kQ29tbWFuZHMuanMKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlz
cGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0
aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKLSNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0KLW5hbWVz
cGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1w
dWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3Bh
dGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNw
YXRjaGVyKTsgfQotICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNv
bnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KLXByaXZhdGU6Ci0gICAg
UmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwotfTsKLQotCi1j
bGFzcyBBbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5BbHRlcm5hdGVOZXR3
b3JrMUJhY2tlbmREaXNwYXRjaGVyKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJj
ZTEobG9uZyBjYWxsSWQpID0gMDsKLX07Ci1jbGFzcyBBbHRlcm5hdGVOZXR3b3JrM0JhY2tlbmRE
aXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoK
LSAgICB2aXJ0dWFsIH5BbHRlcm5hdGVOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyKCkgeyB9Ci0g
ICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTEobG9uZyBjYWxsSWQpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgbG9hZFJlc291cmNlMihsb25nIGNhbGxJZCkgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBsb2FkUmVzb3VyY2UzKGxvbmcgY2FsbElkKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRS
ZXNvdXJjZTQobG9uZyBjYWxsSWQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNl
NShsb25nIGNhbGxJZCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2U2KGxvbmcg
Y2FsbElkKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTcobG9uZyBjYWxsSWQp
ID0gMDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jZW5kaWYgLy8gRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jIyMgRW5kIEZpbGU6IFRlc3RBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmRE
aXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13
aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29s
T2JqZWN0cy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJ
bnNwZWN0b3IgewotCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQotI2lmIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotY2xhc3MgQWx0ZXJuYXRlTmV0d29yazFC
YWNrZW5kRGlzcGF0Y2hlcjsKLWNsYXNzIEFsdGVybmF0ZU5ldHdvcmszQmFja2VuZERpc3BhdGNo
ZXI7Ci0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0K
LWNsYXNzIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKLXB1YmxpYzoKLSAgICB2
aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMShFcnJvclN0cmluZyYpID0gMDsKLXByb3RlY3RlZDoK
LSAgICB2aXJ0dWFsIH5OZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOwotfTsKLQot
Y2xhc3MgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewotcHVibGljOgotICAgIHZp
cnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UxKEVycm9yU3RyaW5nJikgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCBsb2FkUmVzb3VyY2UyKEVycm9yU3RyaW5nJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBs
b2FkUmVzb3VyY2UzKEVycm9yU3RyaW5nJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVz
b3VyY2U0KEVycm9yU3RyaW5nJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2U1
KEVycm9yU3RyaW5nJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2U2KEVycm9y
U3RyaW5nJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2U3KEVycm9yU3RyaW5n
JikgPSAwOwotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgfk5ldHdvcmszQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyKCk7Ci19OwotCi1jbGFzcyBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyIGZpbmFs
IDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICBz
dGF0aWMgUmVmPE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0
Y2hlciYsIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdm9pZCBkaXNw
YXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmpl
Y3Q+JiYgbWVzc2FnZSkgZmluYWw7Ci1wcml2YXRlOgotICAgIHZvaWQgbG9hZFJlc291cmNlMShs
b25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKLSNpZiBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLXB1YmxpYzoKLSAgICB2b2lk
IHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hl
ciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5h
dGVEaXNwYXRjaGVyOyB9Ci1wcml2YXRlOgotICAgIEFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERp
c3BhdGNoZXIqIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciB7IG51bGxwdHIgfTsKLSNlbmRpZgotcHJp
dmF0ZToKLSAgICBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiwg
TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICBOZXR3b3JrMUJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlciogbV9hZ2VudCB7IG51bGxwdHIgfTsKLX07Ci0KLWNsYXNzIE5ldHdv
cmszQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERp
c3BhdGNoZXIgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8TmV0d29yazNCYWNrZW5kRGlzcGF0
Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIqKTsKLSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJp
bmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5hbDsKLXByaXZhdGU6
Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2UxKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmIHBhcmFtZXRlcnMpOwotICAgIHZvaWQgbG9hZFJlc291cmNlMihsb25nIHJlcXVlc3RJ
ZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKLSAgICB2b2lkIGxvYWRSZXNv
dXJjZTMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7
Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2U0KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmIHBhcmFtZXRlcnMpOwotICAgIHZvaWQgbG9hZFJlc291cmNlNShsb25nIHJlcXVlc3RJ
ZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKLSAgICB2b2lkIGxvYWRSZXNv
dXJjZTYobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7
Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2U3KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmIHBhcmFtZXRlcnMpOwotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQotcHVibGljOgotICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0Y2hlcihBbHRlcm5h
dGVOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0
ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KLXByaXZhdGU6Ci0gICAg
QWx0ZXJuYXRlTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlciogbV9hbHRlcm5hdGVEaXNwYXRjaGVy
IHsgbnVsbHB0ciB9OwotI2VuZGlmCi1wcml2YXRlOgotICAgIE5ldHdvcmszQmFja2VuZERpc3Bh
dGNoZXIoQmFja2VuZERpc3BhdGNoZXImLCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxl
ciopOwotICAgIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50IHsgbnVs
bHB0ciB9OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRl
c3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNw
YXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdp
dGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RCYWNr
ZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZy
b250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3
dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNp
ZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSNpbmNsdWRlICJUZXN0
QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIEluc3Bl
Y3RvciB7Ci0KLU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+TmV0d29yazFCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KLU5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyOjp+TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KLQotUmVmPE5ldHdv
cmsxQmFja2VuZERpc3BhdGNoZXI+IE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShC
YWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIE5ldHdvcmsxQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyKiBhZ2VudCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBOZXR3b3Jr
MUJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOwotfQotCi1OZXR3
b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmRE
aXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXIqIGFnZW50KQotICAgIDogU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2Vu
ZERpc3BhdGNoZXIpCi0gICAgLCBtX2FnZW50KGFnZW50KQotewotICAgIG1fYmFja2VuZERpc3Bh
dGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbigiTmV0d29yazEiX3MsIHRoaXMpOwot
fQotCi12b2lkIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVz
dElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQot
ewotICAgIFJlZjxOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKLQot
ICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2Jq
ZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRlcnMpOwotCi0gICAgaWYgKG1ldGhvZCA9PSAibG9hZFJl
c291cmNlMSIpCi0gICAgICAgIGxvYWRSZXNvdXJjZTEocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFt
ZXRlcnMpKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFBy
b3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmsx
LiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7Ci19Ci0KLXZvaWQgTmV0d29yazFCYWNr
ZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046
Ok9iamVjdD4mJikKLXsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKLSAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRl
RGlzcGF0Y2hlci0+bG9hZFJlc291cmNlMShyZXF1ZXN0SWQpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotI2VuZGlmCi0KLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2Jq
ZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIG1fYWdlbnQtPmxvYWRS
ZXNvdXJjZTEoZXJyb3IpOwotCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQp
LCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQ
cm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJv
cikpOwotfQotCi1SZWY8TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcj4gTmV0d29yazNCYWNrZW5k
RGlzcGF0Y2hlcjo6Y3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwg
TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQotewotICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIs
IGFnZW50KSk7Ci19Ci0KLU5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6Ok5ldHdvcmszQmFja2Vu
ZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBOZXR3b3Jr
M0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCi0gICAgOiBTdXBwbGVtZW50YWxCYWNr
ZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKLSAgICAsIG1fYWdlbnQoYWdlbnQpCi17
Ci0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKCJO
ZXR3b3JrMyJfcywgdGhpcyk7Ci19Ci0KLXZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6
ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6
T2JqZWN0PiYmIG1lc3NhZ2UpCi17Ci0gICAgUmVmPE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI+
IHByb3RlY3QoKnRoaXMpOwotCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVyczsK
LSAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFyYW1ldGVycyk7Ci0KLSAgICB0
eXBlZGVmIHZvaWQgKE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OipDYWxsSGFuZGxlcikobG9u
ZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSk7Ci0gICAgdHlwZWRl
ZiBIYXNoTWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+IERpc3BhdGNoTWFwOwotICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxEaXNwYXRjaE1hcD4gZGlzcGF0Y2hNYXA7Ci0gICAgaWYgKGRpc3BhdGNo
TWFwLmdldCgpLmlzRW1wdHkoKSkgewotICAgICAgICBzdGF0aWMgY29uc3Qgc3RydWN0IE1ldGhv
ZFRhYmxlIHsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIqIG5hbWU7Ci0gICAgICAgICAgICBDYWxs
SGFuZGxlciBoYW5kbGVyOwotICAgICAgICB9IGNvbW1hbmRzW10gPSB7Ci0gICAgICAgICAgICB7
ICJsb2FkUmVzb3VyY2UxIiwgJk5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJj
ZTEgfSwKLSAgICAgICAgICAgIHsgImxvYWRSZXNvdXJjZTIiLCAmTmV0d29yazNCYWNrZW5kRGlz
cGF0Y2hlcjo6bG9hZFJlc291cmNlMiB9LAotICAgICAgICAgICAgeyAibG9hZFJlc291cmNlMyIs
ICZOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UzIH0sCi0gICAgICAgICAg
ICB7ICJsb2FkUmVzb3VyY2U0IiwgJk5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNv
dXJjZTQgfSwKLSAgICAgICAgICAgIHsgImxvYWRSZXNvdXJjZTUiLCAmTmV0d29yazNCYWNrZW5k
RGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNSB9LAotICAgICAgICAgICAgeyAibG9hZFJlc291cmNl
NiIsICZOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U2IH0sCi0gICAgICAg
ICAgICB7ICJsb2FkUmVzb3VyY2U3IiwgJk5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRS
ZXNvdXJjZTcgfSwKLSAgICAgICAgfTsKLSAgICAgICAgc2l6ZV90IGxlbmd0aCA9IFdURl9BUlJB
WV9MRU5HVEgoY29tbWFuZHMpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0
aDsgKytpKQotICAgICAgICAgICAgZGlzcGF0Y2hNYXAuZ2V0KCkuYWRkKGNvbW1hbmRzW2ldLm5h
bWUsIGNvbW1hbmRzW2ldLmhhbmRsZXIpOwotICAgIH0KLQotICAgIGF1dG8gZmluZFJlc3VsdCA9
IGRpc3BhdGNoTWFwLmdldCgpLmZpbmQobWV0aG9kKTsKLSAgICBpZiAoZmluZFJlc3VsdCA9PSBk
aXNwYXRjaE1hcC5nZXQoKS5lbmQoKSkgewotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5y
ZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidO
ZXR3b3JrMy4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgKCgqdGhpcykuKmZpbmRSZXN1bHQtPnZhbHVlKShyZXF1ZXN0SWQsIFdU
Rk1vdmUocGFyYW1ldGVycykpOwotfQotCi12b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6
OmxvYWRSZXNvdXJjZTEobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCi17
Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0gICAgaWYgKG1f
YWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxv
YWRSZXNvdXJjZTEocmVxdWVzdElkKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgot
Ci0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0g
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2UxKGVycm9y
KTsKLQotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOwotICAg
IGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihC
YWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKLX0KLQotdm9p
ZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UyKGxvbmcgcmVxdWVzdElk
LCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQotewotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQotICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAg
ICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2UyKHJlcXVlc3RJZCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAg
IFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAg
bV9hZ2VudC0+bG9hZFJlc291cmNlMihlcnJvcik7Ci0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgp
KQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBX
VEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3Bh
dGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9y
LCBXVEZNb3ZlKGVycm9yKSk7Ci19Ci0KLXZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6
bG9hZFJlc291cmNlMyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKLXsK
LSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSAgICBpZiAobV9h
bHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9h
ZFJlc291cmNlMyhyZXF1ZXN0SWQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0K
LSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBK
U09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTMoZXJyb3Ip
OwotCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAg
ZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJh
Y2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOwotfQotCi12b2lk
IE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTQobG9uZyByZXF1ZXN0SWQs
IFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCi17Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCi0gICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAg
ICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZTQocmVxdWVzdElkKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAg
UmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBt
X2FnZW50LT5sb2FkUmVzb3VyY2U0KGVycm9yKTsKLQotICAgIGlmICghZXJyb3IubGVuZ3RoKCkp
Ci0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdU
Rk1vdmUocmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3Is
IFdURk1vdmUoZXJyb3IpKTsKLX0KLQotdm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjps
b2FkUmVzb3VyY2U1KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQotewot
I2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotICAgIGlmIChtX2Fs
dGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2Fk
UmVzb3VyY2U1KHJlcXVlc3RJZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQot
ICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpT
T046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgbV9hZ2VudC0+bG9hZFJlc291cmNlNShlcnJvcik7
Ci0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBl
bHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFj
a2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Ci19Ci0KLXZvaWQg
TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNihsb25nIHJlcXVlc3RJZCwg
UmVmUHRyPEpTT046Ok9iamVjdD4mJikKLXsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKLSAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAg
IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlNihyZXF1ZXN0SWQpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBS
ZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIG1f
YWdlbnQtPmxvYWRSZXNvdXJjZTYoZXJyb3IpOwotCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkK
LSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RG
TW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwg
V1RGTW92ZShlcnJvcikpOwotfQotCi12b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6Omxv
YWRSZXNvdXJjZTcobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCi17Ci0j
aWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0gICAgaWYgKG1fYWx0
ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRS
ZXNvdXJjZTcocmVxdWVzdElkKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0g
ICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2U3KGVycm9yKTsK
LQotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOwotICAgIGVs
c2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNr
ZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVy
cy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5k
LXNpemVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVk
ZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQot
bmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEZyb250ZW5kUm91dGVyOwotCi19IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMu
aAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1z
aXplcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgot
Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi19
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNw
YXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1h
bmQtc2l6ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3Rv
Y29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotCi1uYW1lc3BhY2UgSW5z
cGVjdG9yIHsKLQotCi0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLQotCi0KLQotLy8gVHlwZWRl
ZnMuCi1uYW1lc3BhY2UgTmV0d29yazIgewotLyogVW5pcXVlIGxvYWRlciBpZGVudGlmaWVyLiAq
LwotdHlwZWRlZiBTdHJpbmcgTG9hZGVySWQ7Ci19IC8vIE5ldHdvcmsyCi0vLyBFbmQgb2YgdHlw
ZWRlZnMuCi0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotCi0jaW5jbHVkZSA8d3RmL09wdGlv
bmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVj
dG9yIHsKLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3Rv
Y29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbE9iamVjdHMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlz
cGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0
aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJu
YXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi1A
cHJvdG9jb2wgVGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyOwotQHByb3RvY29sIFRl
c3RQcm90b2NvbE5ldHdvcmszRG9tYWluSGFuZGxlcjsKLQotbmFtZXNwYWNlIEluc3BlY3RvciB7
Ci0KLQotY2xhc3MgT2JqQ0luc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIgZmluYWwg
OiBwdWJsaWMgQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciB7Ci0gICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgT2JqQ0luc3BlY3Rvck5ldHdvcmsxQmFj
a2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyPiBoYW5k
bGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2UxKGxv
bmcgcmVxdWVzdElkKSBmaW5hbDsKLXByaXZhdGU6Ci0gICAgUmV0YWluUHRyPGlkPFRlc3RQcm90
b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7Ci19OwotCi1jbGFzcyBPYmpD
SW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5h
dGVOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKLXB1YmxpYzoKLSAgICBPYmpDSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcihp
ZDxUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0
ZSA9IGhhbmRsZXI7IH0KLSAgICB2b2lkIGxvYWRSZXNvdXJjZTEobG9uZyByZXF1ZXN0SWQpIGZp
bmFsOwotICAgIHZvaWQgbG9hZFJlc291cmNlMihsb25nIHJlcXVlc3RJZCkgZmluYWw7Ci0gICAg
dm9pZCBsb2FkUmVzb3VyY2UzKGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKLSAgICB2b2lkIGxvYWRS
ZXNvdXJjZTQobG9uZyByZXF1ZXN0SWQpIGZpbmFsOwotICAgIHZvaWQgbG9hZFJlc291cmNlNShs
b25nIHJlcXVlc3RJZCkgZmluYWw7Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2U2KGxvbmcgcmVxdWVz
dElkKSBmaW5hbDsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTcobG9uZyByZXF1ZXN0SWQpIGZpbmFs
OwotcHJpdmF0ZToKLSAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sTmV0d29yazNEb21haW5I
YW5kbGVyPj4gbV9kZWxlZ2F0ZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0j
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAi
Y29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQot
I2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLQotbmFtZXNw
YWNlIEluc3BlY3RvciB7Ci0KLXZvaWQgT2JqQ0luc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3Bh
dGNoZXI6OmxvYWRSZXNvdXJjZTEobG9uZyByZXF1ZXN0SWQpCi17Ci0gICAgaWYgKCFbbV9kZWxl
Z2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGxvYWRSZXNvdXJjZTFXaXRoRXJyb3JD
YWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRo
b2ROb3RGb3VuZCwgIidOZXR3b3JrMS5sb2FkUmVzb3VyY2UxJyB3YXMgbm90IGZvdW5kIl9zKTsK
LSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICpl
cnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9y
KHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7Ci0gICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgfTsKLQot
ICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCkt
PnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsK
LSAgICB9OwotCi0gICAgW21fZGVsZWdhdGUgbG9hZFJlc291cmNlMVdpdGhFcnJvckNhbGxiYWNr
OmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107Ci19Ci0KLQot
dm9pZCBPYmpDSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNl
MShsb25nIHJlcXVlc3RJZCkKLXsKLSAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxl
Y3RvcjpAc2VsZWN0b3IobG9hZFJlc291cmNlMVdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxs
YmFjazopXSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVy
cm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdv
cmszLmxvYWRSZXNvdXJjZTEnIHdhcyBub3QgZm91bmQiX3MpOwotICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAgICAgIGJh
Y2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5k
RGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICB9OwotCi0gICAgaWQgc3VjY2Vzc0NhbGxi
YWNrID0gXnsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVl
c3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2UpOwotICAgIH07Ci0KLSAgICBbbV9k
ZWxlZ2F0ZSBsb2FkUmVzb3VyY2UxV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNj
ZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKLX0KLQotdm9pZCBPYmpDSW5zcGVjdG9yTmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMihsb25nIHJlcXVlc3RJZCkKLXsK
LSAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IobG9hZFJl
c291cmNlMldpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgewotICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2Vu
ZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmszLmxvYWRSZXNvdXJjZTInIHdh
cyBub3QgZm91bmQiX3MpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGlu
Z0Vycm9ycygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWQgZXJyb3JDYWxsYmFj
ayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJl
cG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJy
b3IsIGVycm9yKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJv
cnMoKTsKLSAgICB9OwotCi0gICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKSwgZmFsc2UpOwotICAgIH07Ci0KLSAgICBbbV9kZWxlZ2F0ZSBsb2FkUmVzb3VyY2Uy
V2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0Nh
bGxiYWNrXTsKLX0KLQotdm9pZCBPYmpDSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hl
cjo6bG9hZFJlc291cmNlMyhsb25nIHJlcXVlc3RJZCkKLXsKLSAgICBpZiAoIVttX2RlbGVnYXRl
IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IobG9hZFJlc291cmNlM1dpdGhFcnJvckNhbGxi
YWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5y
ZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5v
dEZvdW5kLCAiJ05ldHdvcmszLmxvYWRSZXNvdXJjZTMnIHdhcyBub3QgZm91bmQiX3MpOwotICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9y
KSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVx
dWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKLSAgICAgICAg
YmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICB9OwotCi0gICAg
aWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2Vu
ZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2UpOwotICAg
IH07Ci0KLSAgICBbbV9kZWxlZ2F0ZSBsb2FkUmVzb3VyY2UzV2l0aEVycm9yQ2FsbGJhY2s6ZXJy
b3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKLX0KLQotdm9pZCBP
YmpDSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNChsb25n
IHJlcXVlc3RJZCkKLXsKLSAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpA
c2VsZWN0b3IobG9hZFJlc291cmNlNFdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazop
XSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJl
cXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmszLmxv
YWRSZXNvdXJjZTQnIHdhcyBub3QgZm91bmQiX3MpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
aWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0
Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICB9OwotCi0gICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0g
XnsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwg
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2UpOwotICAgIH07Ci0KLSAgICBbbV9kZWxlZ2F0
ZSBsb2FkUmVzb3VyY2U0V2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2Fs
bGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKLX0KLQotdm9pZCBPYmpDSW5zcGVjdG9yTmV0d29yazNC
YWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNShsb25nIHJlcXVlc3RJZCkKLXsKLSAgICBp
ZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IobG9hZFJlc291cmNl
NVdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgewotICAgICAgICBiYWNrZW5k
RGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3Bh
dGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmszLmxvYWRSZXNvdXJjZTUnIHdhcyBub3Qg
Zm91bmQiX3MpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9y
cygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWQgZXJyb3JDYWxsYmFjayA9IF4o
TlNTdHJpbmcgKmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFBy
b3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVy
cm9yKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsK
LSAgICB9OwotCi0gICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KSwgZmFsc2UpOwotICAgIH07Ci0KLSAgICBbbV9kZWxlZ2F0ZSBsb2FkUmVzb3VyY2U1V2l0aEVy
cm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNr
XTsKLX0KLQotdm9pZCBPYmpDSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9h
ZFJlc291cmNlNihsb25nIHJlcXVlc3RJZCkKLXsKLSAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3Bv
bmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IobG9hZFJlc291cmNlNldpdGhFcnJvckNhbGxiYWNrOnN1
Y2Nlc3NDYWxsYmFjazopXSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQ
cm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5k
LCAiJ05ldHdvcmszLmxvYWRSZXNvdXJjZTYnIHdhcyBub3QgZm91bmQiX3MpOwotICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0g
ICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElk
LCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKLSAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICB9OwotCi0gICAgaWQgc3Vj
Y2Vzc0NhbGxiYWNrID0gXnsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3Bv
bnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2UpOwotICAgIH07Ci0K
LSAgICBbbV9kZWxlZ2F0ZSBsb2FkUmVzb3VyY2U2V2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxs
YmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKLX0KLQotdm9pZCBPYmpDSW5z
cGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNyhsb25nIHJlcXVl
c3RJZCkKLXsKLSAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0
b3IobG9hZFJlc291cmNlN1dpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgewot
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJ
ZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmszLmxvYWRSZXNv
dXJjZTcnIHdhcyBub3QgZm91bmQiX3MpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5z
ZW5kUGVuZGluZ0Vycm9ycygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWQgZXJy
b3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6
U2VydmVyRXJyb3IsIGVycm9yKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBl
bmRpbmdFcnJvcnMoKTsKLSAgICB9OwotCi0gICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2UpOwotICAgIH07Ci0KLSAgICBbbV9kZWxlZ2F0ZSBsb2Fk
UmVzb3VyY2U3V2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6
c3VjY2Vzc0NhbGxiYWNrXTsKLX0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxXZWJJbnNw
ZWN0b3IvVGVzdFByb3RvY29sLmg+Ci0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZh
dWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QK
LUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4sIHNldHRlcj1zZXROZXR3b3JrMUhhbmRsZXI6
KSBpZDxUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+IG5ldHdvcmsxSGFuZGxlcjsK
LUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4sIHNldHRlcj1zZXROZXR3b3JrM0hhbmRsZXI6
KSBpZDxUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkhhbmRsZXI+IG5ldHdvcmszSGFuZGxlcjsK
LUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMu
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0
ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbElu
dGVybmFsLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+Ci0jaW1w
b3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVy
cy5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJz
Lmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0
UHJvdG9jb2xDb25maWd1cmF0aW9uCi17Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9s
bGVyKiBfY29udHJvbGxlcjsKLSAgICBpZDxUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRs
ZXI+IF9uZXR3b3JrMUhhbmRsZXI7Ci0gICAgaWQ8VGVzdFByb3RvY29sTmV0d29yazNEb21haW5I
YW5kbGVyPiBfbmV0d29yazNIYW5kbGVyOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhD
b250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsK
LSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJu
IG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250cm9s
bGVyOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBbX25l
dHdvcmsxSGFuZGxlciByZWxlYXNlXTsKLSAgICBbX25ldHdvcmszSGFuZGxlciByZWxlYXNlXTsK
LSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLS0gKHZvaWQpc2V0TmV0d29yazFIYW5kbGVyOihp
ZDxUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+KWhhbmRsZXIKLXsKLSAgICBpZiAo
aGFuZGxlciA9PSBfbmV0d29yazFIYW5kbGVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBbX25l
dHdvcmsxSGFuZGxlciByZWxlYXNlXTsKLSAgICBfbmV0d29yazFIYW5kbGVyID0gW2hhbmRsZXIg
cmV0YWluXTsKLQotICAgIGF1dG8gYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IG1ha2VVbmlxdWU8T2Jq
Q0luc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI+KGhhbmRsZXIpOwotICAgIGF1dG8g
YWx0ZXJuYXRlQWdlbnQgPSBtYWtlVW5pcXVlPEFsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50PE5l
dHdvcmsxQmFja2VuZERpc3BhdGNoZXIsIEFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNo
ZXI+PigiTmV0d29yazEiX3MsICpfY29udHJvbGxlciwgV1RGTW92ZShhbHRlcm5hdGVEaXNwYXRj
aGVyKSk7Ci0gICAgX2NvbnRyb2xsZXItPmFwcGVuZEV4dHJhQWdlbnQoV1RGTW92ZShhbHRlcm5h
dGVBZ2VudCkpOwotfQotCi0tIChpZDxUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+
KW5ldHdvcmsxSGFuZGxlcgotewotICAgIHJldHVybiBfbmV0d29yazFIYW5kbGVyOwotfQotCi0t
ICh2b2lkKXNldE5ldHdvcmszSGFuZGxlcjooaWQ8VGVzdFByb3RvY29sTmV0d29yazNEb21haW5I
YW5kbGVyPiloYW5kbGVyCi17Ci0gICAgaWYgKGhhbmRsZXIgPT0gX25ldHdvcmszSGFuZGxlcikK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgW19uZXR3b3JrM0hhbmRsZXIgcmVsZWFzZV07Ci0gICAg
X25ldHdvcmszSGFuZGxlciA9IFtoYW5kbGVyIHJldGFpbl07Ci0KLSAgICBhdXRvIGFsdGVybmF0
ZURpc3BhdGNoZXIgPSBtYWtlVW5pcXVlPE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNw
YXRjaGVyPihoYW5kbGVyKTsKLSAgICBhdXRvIGFsdGVybmF0ZUFnZW50ID0gbWFrZVVuaXF1ZTxB
bHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudDxOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyLCBBbHRl
cm5hdGVOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyPj4oIk5ldHdvcmszIl9zLCAqX2NvbnRyb2xs
ZXIsIFdURk1vdmUoYWx0ZXJuYXRlRGlzcGF0Y2hlcikpOwotICAgIF9jb250cm9sbGVyLT5hcHBl
bmRFeHRyYUFnZW50KFdURk1vdmUoYWx0ZXJuYXRlQWdlbnQpKTsKLX0KLQotLSAoaWQ8VGVzdFBy
b3RvY29sTmV0d29yazNEb21haW5IYW5kbGVyPiluZXR3b3JrM0hhbmRsZXIKLXsKLSAgICByZXR1
cm4gX25ldHdvcmszSGFuZGxlcjsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbi5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZl
bnREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFp
bnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgot
Ci0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPHd0Zi9K
U09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2wuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMt
d2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQot
I2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgotCi0KLQotCi10
eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xQbGF0Zm9ybSkgewotICAgIFRl
c3RQcm90b2NvbFBsYXRmb3JtQWxsLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYywK
LSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1h
Y09TLAotfTsKLQotCi0KLQotCi1AcHJvdG9jb2wgVGVzdFByb3RvY29sTmV0d29yazFEb21haW5I
YW5kbGVyIDxOU09iamVjdD4KLUBvcHRpb25hbAotLSAodm9pZClsb2FkUmVzb3VyY2UxV2l0aEVy
cm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nl
c3NDYWxsYmFjazoodm9pZCheKSh2b2lkKSlzdWNjZXNzQ2FsbGJhY2s7Ci1AZW5kCi0KLUBwcm90
b2NvbCBUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkhhbmRsZXIgPE5TT2JqZWN0PgotQG9wdGlv
bmFsCi0tICh2b2lkKWxvYWRSZXNvdXJjZTFXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0
cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKHZvaWQp
KXN1Y2Nlc3NDYWxsYmFjazsKLS0gKHZvaWQpbG9hZFJlc291cmNlMldpdGhFcnJvckNhbGxiYWNr
Oih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6
KHZvaWQoXikodm9pZCkpc3VjY2Vzc0NhbGxiYWNrOwotLSAodm9pZClsb2FkUmVzb3VyY2UzV2l0
aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1
Y2Nlc3NDYWxsYmFjazoodm9pZCheKSh2b2lkKSlzdWNjZXNzQ2FsbGJhY2s7Ci0tICh2b2lkKWxv
YWRSZXNvdXJjZTRXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVy
cm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKHZvaWQpKXN1Y2Nlc3NDYWxsYmFj
azsKLS0gKHZvaWQpbG9hZFJlc291cmNlNVdpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3Ry
aW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikodm9pZCkp
c3VjY2Vzc0NhbGxiYWNrOwotLSAodm9pZClsb2FkUmVzb3VyY2U2V2l0aEVycm9yQ2FsbGJhY2s6
KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoo
dm9pZCheKSh2b2lkKSlzdWNjZXNzQ2FsbGJhY2s7Ci0tICh2b2lkKWxvYWRSZXNvdXJjZTdXaXRo
RXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3Vj
Y2Vzc0NhbGxiYWNrOih2b2lkKF4pKHZvaWQpKXN1Y2Nlc3NDYWxsYmFjazsKLUBlbmQKLQotCi0K
LQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2Jq
ZWN0cy5oPgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgot
I2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKLSNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8d3Rm
L0pTT05WYWx1ZXMuaD4KLQotCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5h
bC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1h
bmQtc2l6ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90
b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KLU9wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVBy
b3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOwotCi1pbmxpbmUgU3RyaW5nIHRvUHJv
dG9jb2xTdHJpbmcoVGVzdFByb3RvY29sUGxhdGZvcm0gdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZh
bHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDoKLSAgICAgICAgcmV0dXJu
ICJhbGwiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM6Ci0gICAgICAg
IHJldHVybiAiZ2VuZXJpYyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOgot
ICAgICAgICByZXR1cm4gImlvcyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFj
T1M6Ci0gICAgICAgIHJldHVybiAibWFjb3MiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1p
bmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sUGxhdGZvcm0+IGZyb21Qcm90b2NvbFN0cmluZyhj
b25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiYWxsIikKLSAgICAgICAg
cmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOwotICAgIGlmICh2YWx1ZSA9PSAiZ2VuZXJp
YyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM7Ci0gICAgaWYg
KHZhbHVlID09ICJpb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1JT1M7
Ci0gICAgaWYgKHZhbHVlID09ICJtYWNvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQ
bGF0Zm9ybU1hY09TOwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLQotCi19IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1t
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmct
Y29tbWFuZC1zaXplcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotCi0jaW1wb3J0
ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKLSNp
bXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0KLXVz
aW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zIChOZXR3b3JrMkRvbWFpbikKLQotKyAodm9pZClfcGFyc2VMb2FkZXJJZDooTlNT
dHJpbmcgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0KLUBlbmQKLQotQGlt
cGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoTmV0d29yazJEb21haW4p
Ci0KLSsgKHZvaWQpX3BhcnNlTG9hZGVySWQ6KE5TU3RyaW5nICoqKW91dFZhbHVlIGZyb21QYXls
b2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXls
b2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSAoTlNTdHJpbmcgKilwYXls
b2FkOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1z
aXplcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNp
bXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9i
amVjdFByaXZhdGUuaD4KLSNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW1wb3J0IDx3dGYv
SlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLQotCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9lbnVtLXZh
bHVlcy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2VudW0tdmFsdWVzLmpzb24tcmVzdWx0CmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMDZmZWJiNzhkNy4uMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0
ZWQvZW51bS12YWx1ZXMuanNvbi1yZXN1bHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMjM2ICswLDAg
QEAKLSMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLS8vIFR5cGVEb21haW4KLUluc3BlY3RvckJh
Y2tlbmQucmVnaXN0ZXJEb21haW4oIlR5cGVEb21haW4iLCBudWxsKTsKLUluc3BlY3RvckJhY2tl
bmQucmVnaXN0ZXJFbnVtKCJUeXBlRG9tYWluLlR5cGVEb21haW5FbnVtIiwge1NoYXJlZDogInNo
YXJlZCIsIFJlZDogInJlZCIsIEdyZWVuOiAiZ3JlZW4iLCBCbHVlOiAiYmx1ZSJ9KTsKLUluc3Bl
Y3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIlR5cGVEb21haW4iLCBudWxsKTsKLQotLy8gQ29t
bWFuZERvbWFpbgotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiQ29tbWFuZERvbWFp
biIsIG51bGwpOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIkNvbW1hbmREb21h
aW4uY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUiLCBudWxsLCBbXSwgWyJyZXR1cm5WYWx1ZSJd
KTsKLUluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkNvbW1hbmREb21haW4iLCBudWxs
KTsKLQotLy8gRXZlbnREb21haW4KLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIkV2
ZW50RG9tYWluIiwgbnVsbCk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiRXZlbnRE
b21haW4uRXZlbnRXaXRoRW51bVBhcmFtZXRlclBhcmFtZXRlciIsIHtTaGFyZWQ6ICJzaGFyZWQi
LCBCbGFjazogImJsYWNrIiwgV2hpdGU6ICJ3aGl0ZSJ9KTsKLUluc3BlY3RvckJhY2tlbmQucmVn
aXN0ZXJFdmVudCgiRXZlbnREb21haW4uZXZlbnRXaXRoRW51bVBhcmFtZXRlciIsIG51bGwsIFsi
cGFyYW1ldGVyIl0pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckV2ZW50RG9tYWluRGlzcGF0
Y2hlciA9IEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEaXNwYXRjaGVyLmJpbmQoSW5zcGVjdG9y
QmFja2VuZCwgIkV2ZW50RG9tYWluIik7Ci1JbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWlu
KCJFdmVudERvbWFpbiIsIG51bGwpOwotIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29t
bWFuZHMuanMKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hl
cnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNl
Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQotI2luY2x1
ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JGcm9udGVuZFJvdXRlci5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgQWx0
ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZvaWQgc2V0QmFja2VuZERp
c3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNr
ZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KLSAgICBCYWNrZW5kRGlzcGF0
Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRj
aGVyLmdldCgpOyB9Ci1wcml2YXRlOgotICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9i
YWNrZW5kRGlzcGF0Y2hlcjsKLX07Ci0KLQotY2xhc3MgQWx0ZXJuYXRlQ29tbWFuZERvbWFpbkJh
Y2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1
YmxpYzoKLSAgICB2aXJ0dWFsIH5BbHRlcm5hdGVDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNo
ZXIoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUobG9u
ZyBjYWxsSWQpID0gMDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jZW5kaWYg
Ly8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jIyMgRW5kIEZpbGU6
IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
ZW51bS12YWx1ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQot
dHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVS
TkFURV9ESVNQQVRDSEVSUykKLWNsYXNzIEFsdGVybmF0ZUNvbW1hbmREb21haW5CYWNrZW5kRGlz
cGF0Y2hlcjsKLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKLQotY2xhc3MgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7Ci1wdWJs
aWM6Ci0gICAgLy8gTmFtZWQgYWZ0ZXIgcGFyYW1ldGVyICdyZXR1cm5WYWx1ZScgd2hpbGUgZ2Vu
ZXJhdGluZyBjb21tYW5kL2V2ZW50IGNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlLgotICAgIGVu
dW0gY2xhc3MgUmV0dXJuVmFsdWUgewotICAgICAgICBTaGFyZWQgPSAwLAotICAgICAgICBDeWFu
ID0gNiwKLSAgICAgICAgTWFnZW50YSA9IDcsCi0gICAgICAgIFllbGxvdyA9IDgsCi0gICAgfTsg
Ly8gZW51bSBjbGFzcyBSZXR1cm5WYWx1ZQotICAgIHZpcnR1YWwgdm9pZCBjb21tYW5kV2l0aEVu
dW1SZXR1cm5WYWx1ZShFcnJvclN0cmluZyYsIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXI6OlJldHVyblZhbHVlKiBvdXRfcmV0dXJuVmFsdWUpID0gMDsKLXByb3RlY3RlZDoK
LSAgICB2aXJ0dWFsIH5Db21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7Ci19
OwotCi1jbGFzcyBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMg
U3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8
Q29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXIm
LCBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdm9pZCBkaXNw
YXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmpl
Y3Q+JiYgbWVzc2FnZSkgZmluYWw7Ci1wcml2YXRlOgotICAgIHZvaWQgY29tbWFuZFdpdGhFbnVt
UmV0dXJuVmFsdWUobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1l
dGVycyk7Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi1wdWJs
aWM6Ci0gICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZUNvbW1hbmREb21h
aW5CYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVybmF0ZURp
c3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9Ci1wcml2YXRlOgotICAgIEFsdGVybmF0
ZUNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlciogbV9hbHRlcm5hdGVEaXNwYXRjaGVyIHsg
bnVsbHB0ciB9OwotI2VuZGlmCi1wcml2YXRlOgotICAgIENvbW1hbmREb21haW5CYWNrZW5kRGlz
cGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYsIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIqKTsKLSAgICBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBt
X2FnZW50IHsgbnVsbHB0ciB9OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMg
RW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBlbnVtLXZhbHVlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNo
ZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRl
ci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVz
dHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jaWYgRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVycy5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1D
b21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+Q29tbWFuZERvbWFpbkJhY2tl
bmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQotCi1SZWY8Q29tbWFuZERvbWFpbkJhY2tlbmREaXNw
YXRjaGVyPiBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShCYWNrZW5kRGlz
cGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIqIGFnZW50KQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENvbW1hbmREb21h
aW5CYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKLX0KLQotQ29t
bWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNo
ZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBDb21tYW5kRG9tYWluQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKLSAgICA6IFN1cHBsZW1lbnRhbEJhY2tlbmRE
aXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQotICAgICwgbV9hZ2VudChhZ2VudCkKLXsKLSAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oIkNvbW1h
bmREb21haW4iX3MsIHRoaXMpOwotfQotCi12b2lkIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0
Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8
SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCi17Ci0gICAgUmVmPENvbW1hbmREb21haW5CYWNrZW5k
RGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7Ci0KLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBw
YXJhbWV0ZXJzOwotICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJz
KTsKLQotICAgIGlmIChtZXRob2QgPT0gImNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlIikKLSAg
ICAgICAgY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFt
ZXRlcnMpKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFBy
b3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0NvbW1hbmRE
b21haW4uIiArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKLX0KLQotdm9pZCBDb21tYW5k
RG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlKGxvbmcg
cmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQotewotI2lmIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIp
IHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5jb21tYW5kV2l0aEVudW1SZXR1cm5W
YWx1ZShyZXF1ZXN0SWQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBF
cnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpOwotICAgIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXI6OlJldHVyblZhbHVlIG91dF9yZXR1cm5WYWx1ZTsKLSAgICBtX2FnZW50LT5jb21tYW5kV2l0
aEVudW1SZXR1cm5WYWx1ZShlcnJvciwgJm91dF9yZXR1cm5WYWx1ZSk7Ci0KLSAgICBpZiAoIWVy
cm9yLmxlbmd0aCgpKQotICAgICAgICByZXN1bHQtPnNldFN0cmluZygicmV0dXJuVmFsdWUiX3Ms
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShv
dXRfcmV0dXJuVmFsdWUpKTsKLQotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0gICAgICAgIG1f
YmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0
KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0
UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJy
b3IpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVz
dEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERp
c3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVl
cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFn
bWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPHd0
Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVz
cGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBGcm9udGVuZFJvdXRlcjsKLQotY2xhc3MgRXZlbnRE
b21haW5Gcm9udGVuZERpc3BhdGNoZXIgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwot
cHVibGljOgotICAgIEV2ZW50RG9tYWluRnJvbnRlbmREaXNwYXRjaGVyKEZyb250ZW5kUm91dGVy
JiBmcm9udGVuZFJvdXRlcikgOiBtX2Zyb250ZW5kUm91dGVyKGZyb250ZW5kUm91dGVyKSB7IH0K
LSAgICAgICAgLy8gTmFtZWQgYWZ0ZXIgcGFyYW1ldGVyICdwYXJhbWV0ZXInIHdoaWxlIGdlbmVy
YXRpbmcgY29tbWFuZC9ldmVudCBldmVudFdpdGhFbnVtUGFyYW1ldGVyLgotICAgICAgICBlbnVt
IGNsYXNzIFBhcmFtZXRlciB7Ci0gICAgICAgICAgICBTaGFyZWQgPSAwLAotICAgICAgICAgICAg
QmxhY2sgPSA0LAotICAgICAgICAgICAgV2hpdGUgPSA1LAotICAgICAgICB9OyAvLyBlbnVtIGNs
YXNzIFBhcmFtZXRlcgotICAgIHZvaWQgZXZlbnRXaXRoRW51bVBhcmFtZXRlcihQYXJhbWV0ZXIg
cGFyYW1ldGVyKTsKLXByaXZhdGU6Ci0gICAgRnJvbnRlbmRSb3V0ZXImIG1fZnJvbnRlbmRSb3V0
ZXI7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEZy
b250ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0
Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMu
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdm9pZCBF
dmVudERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcjo6ZXZlbnRXaXRoRW51bVBhcmFtZXRlcihQYXJh
bWV0ZXIgcGFyYW1ldGVyKQotewotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0g
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRo
b2QiX3MsICJFdmVudERvbWFpbi5ldmVudFdpdGhFbnVtUGFyYW1ldGVyIl9zKTsKLSAgICBSZWY8
SlNPTjo6T2JqZWN0PiBwYXJhbXNPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAg
IHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJwYXJhbWV0ZXIiX3MsIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShwYXJhbWV0ZXIpKTsKLSAgICBq
c29uTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiX3MsIFdURk1vdmUocGFyYW1zT2JqZWN0KSk7
Ci0KLSAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3Ry
aW5nKCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBU
ZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bE9iamVjdHMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVz
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdt
YSBvbmNlCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVz
Lmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7
Ci0KLQotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotLy8gRm9yd2FyZCBkZWNsYXJhdGlv
bnMuCi1uYW1lc3BhY2UgVHlwZURvbWFpbiB7Ci1lbnVtIGNsYXNzIFR5cGVEb21haW5FbnVtOwot
fSAvLyBUeXBlRG9tYWluCi0vLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCi0KLQotCi0K
LW5hbWVzcGFjZSBUZXN0SGVscGVycyB7Ci0KLVN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShp
bnQgY29kZSk7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRFbnVtQ29uc3RhbnRW
YWx1ZShUIGVudW1WYWx1ZSkKLXsKLSAgICByZXR1cm4gZ2V0RW51bUNvbnN0YW50VmFsdWUoc3Rh
dGljX2Nhc3Q8aW50PihlbnVtVmFsdWUpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBl
cnMKLQotbmFtZXNwYWNlIFR5cGVEb21haW4gewotLyogICovCi1lbnVtIGNsYXNzIFR5cGVEb21h
aW5FbnVtIHsKLSAgICBTaGFyZWQgPSAwLAotICAgIFJlZCA9IDEsCi0gICAgR3JlZW4gPSAyLAot
ICAgIEJsdWUgPSAzLAotfTsgLy8gZW51bSBjbGFzcyBUeXBlRG9tYWluRW51bQotfSAvLyBUeXBl
RG9tYWluCi0KLQotCi1uYW1lc3BhY2UgVGVzdEhlbHBlcnMgewotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBQcm90b2NvbEVudW1UeXBlPgotT3B0aW9uYWw8UHJvdG9jb2xFbnVtVHlwZT4gcGFyc2VFbnVt
VmFsdWVGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYpOwotCi0vLyBFbnVtcyBpbiB0aGUgJ1R5cGVE
b21haW4nIERvbWFpbgotdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6
VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW0+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNw
ZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51bT4oY29uc3QgU3RyaW5n
Jik7Ci0KLX0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCi0KLX0gLy8gbmFtZXNwYWNlIFByb3Rv
Y29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi1uYW1lc3BhY2UgV1RGIHsKLQotdGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwotCi0vLyBIYXNoIGRlY2xhcmF0
aW9ucyBpbiB0aGUgJ1R5cGVEb21haW4nIERvbWFpbgotdGVtcGxhdGU8Pgotc3RydWN0IERlZmF1
bHRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46OlR5cGVEb21haW5FbnVtPiB7
Ci0gICAgdHlwZWRlZiBJbnRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46OlR5
cGVEb21haW5FbnVtPiBIYXNoOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0jIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
T2JqZWN0cy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVl
cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0KLSNpbmNs
dWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5h
bWVzcGFjZSBJbnNwZWN0b3IgewotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi1uYW1lc3BhY2Ug
VGVzdEhlbHBlcnMgewotCi1zdGF0aWMgY29uc3QgY2hhciogY29uc3QgZW51bV9jb25zdGFudF92
YWx1ZXNbXSA9IHsKLSAgICAic2hhcmVkIiwKLSAgICAicmVkIiwKLSAgICAiZ3JlZW4iLAotICAg
ICJibHVlIiwKLSAgICAiYmxhY2siLAotICAgICJ3aGl0ZSIsCi0gICAgImN5YW4iLAotICAgICJt
YWdlbnRhIiwKLSAgICAieWVsbG93IiwKLX07Ci0KLVN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1
ZShpbnQgY29kZSkgewotICAgIHJldHVybiBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb2RlXTsKLX0K
LQotLy8gRW51bXMgaW4gdGhlICdUeXBlRG9tYWluJyBEb21haW4KLXRlbXBsYXRlPD4KLU9wdGlv
bmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46OlR5cGVEb21haW5FbnVtPiBwYXJz
ZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlw
ZURvbWFpbkVudW0+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCi17Ci0gICAgc3RhdGlj
IGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0gewotICAgICAgICAoc2l6ZV90KUluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46OlR5cGVEb21haW5FbnVtOjpTaGFyZWQsCi0gICAg
ICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVu
dW06OlJlZCwKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWlu
OjpUeXBlRG9tYWluRW51bTo6R3JlZW4sCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90
b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW06OkJsdWUsCi0gICAgfTsKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IDQ7ICsraSkKLSAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09
IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAgICAgICAgIHJl
dHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW0pY29u
c3RhbnRWYWx1ZXNbaV07Ci0KLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi0KLX0gLy8g
bmFtZXNwYWNlIFRlc3RIZWxwZXJzCi0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmpl
Y3RzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJz
LmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbmNs
dWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLUBwcm90b2NvbCBUZXN0UHJvdG9jb2xDb21tYW5kRG9t
YWluRG9tYWluSGFuZGxlcjsKLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotY2xhc3MgT2Jq
Q0luc3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBB
bHRlcm5hdGVDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIgewotICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIE9iakNJbnNwZWN0b3JDb21tYW5kRG9tYWluQmFj
a2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sQ29tbWFuZERvbWFpbkRvbWFpbkhhbmRsZXI+
IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KLSAgICB2b2lkIGNvbW1hbmRXaXRo
RW51bVJldHVyblZhbHVlKGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKLXByaXZhdGU6Ci0gICAgUmV0
YWluUHRyPGlkPFRlc3RQcm90b2NvbENvbW1hbmREb21haW5Eb21haW5IYW5kbGVyPj4gbV9kZWxl
Z2F0ZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBlbnVtLXZhbHVlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2Vu
ZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2luY2x1ZGUgPHd0Zi9KU09O
VmFsdWVzLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi12b2lkIE9iakNJbnNwZWN0b3JD
b21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVl
KGxvbmcgcmVxdWVzdElkKQotewotICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVj
dG9yOkBzZWxlY3Rvcihjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZVdpdGhFcnJvckNhbGxiYWNr
OnN1Y2Nlc3NDYWxsYmFjazopXSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBv
cnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZv
dW5kLCAiJ0NvbW1hbmREb21haW4uY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUnIHdhcyBub3Qg
Zm91bmQiX3MpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9y
cygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWQgZXJyb3JDYWxsYmFjayA9IF4o
TlNTdHJpbmcgKmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFBy
b3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVy
cm9yKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsK
LSAgICB9OwotCi0gICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihUZXN0UHJvdG9jb2xDb21tYW5k
RG9tYWluQ29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWVSZXR1cm5WYWx1ZSByZXR1cm5WYWx1ZSkg
ewotICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHRPYmplY3QgPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygicmV0dXJuVmFsdWUi
X3MsIHRvUHJvdG9jb2xTdHJpbmcocmV0dXJuVmFsdWUpKTsKLSAgICAgICAgYmFja2VuZERpc3Bh
dGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHRPYmplY3QpLCBm
YWxzZSk7Ci0gICAgfTsKLQotICAgIFttX2RlbGVnYXRlIGNvbW1hbmRXaXRoRW51bVJldHVyblZh
bHVlV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vz
c0NhbGxiYWNrXTsKLX0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgotCi1fX2F0
dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3Rv
Y29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWlu
LCBzZXR0ZXI9c2V0Q29tbWFuZERvbWFpbkhhbmRsZXI6KSBpZDxUZXN0UHJvdG9jb2xDb21tYW5k
RG9tYWluRG9tYWluSGFuZGxlcj4gY29tbWFuZERvbWFpbkhhbmRsZXI7Ci1AcHJvcGVydHkgKG5v
bmF0b21pYywgcmVhZG9ubHkpIFRlc3RQcm90b2NvbEV2ZW50RG9tYWluRG9tYWluRXZlbnREaXNw
YXRjaGVyICpldmVudERvbWFpbkV2ZW50RGlzcGF0Y2hlcjsKLUBlbmQKLQotCi0jIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbi5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGVudW0tdmFsdWVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgotCi0jaW1wb3J0ICJU
ZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3Bh
dGNoZXJzLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVB
Z2VudC5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250
cm9sbGVyLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVycy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW1wbGVt
ZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgotewotICAgIEF1Z21lbnRhYmxlSW5z
cGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci0gICAgaWQ8VGVzdFByb3RvY29sQ29tbWFu
ZERvbWFpbkRvbWFpbkhhbmRsZXI+IF9jb21tYW5kRG9tYWluSGFuZGxlcjsKLSAgICBUZXN0UHJv
dG9jb2xFdmVudERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqX2V2ZW50RG9tYWluRXZlbnRE
aXNwYXRjaGVyOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdt
ZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBzZWxmID0gW3N1
cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NF
UlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVy
biBzZWxmOwotfQotCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBbX2NvbW1hbmREb21haW5IYW5k
bGVyIHJlbGVhc2VdOwotICAgIFtfZXZlbnREb21haW5FdmVudERpc3BhdGNoZXIgcmVsZWFzZV07
Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi0tICh2b2lkKXNldENvbW1hbmREb21haW5IYW5k
bGVyOihpZDxUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluRG9tYWluSGFuZGxlcj4paGFuZGxlcgot
ewotICAgIGlmIChoYW5kbGVyID09IF9jb21tYW5kRG9tYWluSGFuZGxlcikKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgW19jb21tYW5kRG9tYWluSGFuZGxlciByZWxlYXNlXTsKLSAgICBfY29tbWFu
ZERvbWFpbkhhbmRsZXIgPSBbaGFuZGxlciByZXRhaW5dOwotCi0gICAgYXV0byBhbHRlcm5hdGVE
aXNwYXRjaGVyID0gbWFrZVVuaXF1ZTxPYmpDSW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tlbmRE
aXNwYXRjaGVyPihoYW5kbGVyKTsKLSAgICBhdXRvIGFsdGVybmF0ZUFnZW50ID0gbWFrZVVuaXF1
ZTxBbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudDxDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNo
ZXIsIEFsdGVybmF0ZUNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4+KCJDb21tYW5kRG9t
YWluIl9zLCAqX2NvbnRyb2xsZXIsIFdURk1vdmUoYWx0ZXJuYXRlRGlzcGF0Y2hlcikpOwotICAg
IF9jb250cm9sbGVyLT5hcHBlbmRFeHRyYUFnZW50KFdURk1vdmUoYWx0ZXJuYXRlQWdlbnQpKTsK
LX0KLQotLSAoaWQ8VGVzdFByb3RvY29sQ29tbWFuZERvbWFpbkRvbWFpbkhhbmRsZXI+KWNvbW1h
bmREb21haW5IYW5kbGVyCi17Ci0gICAgcmV0dXJuIF9jb21tYW5kRG9tYWluSGFuZGxlcjsKLX0K
LQotLSAoVGVzdFByb3RvY29sRXZlbnREb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKilldmVu
dERvbWFpbkV2ZW50RGlzcGF0Y2hlcgotewotICAgIGlmICghX2V2ZW50RG9tYWluRXZlbnREaXNw
YXRjaGVyKQotICAgICAgICBfZXZlbnREb21haW5FdmVudERpc3BhdGNoZXIgPSBbW1Rlc3RQcm90
b2NvbEV2ZW50RG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyIGFsbG9jXSBpbml0V2l0aENvbnRy
b2xsZXI6X2NvbnRyb2xsZXJdOwotICAgIHJldHVybiBfZXZlbnREb21haW5FdmVudERpc3BhdGNo
ZXI7Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRp
b24ubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0K
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90
b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5o
IgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3Rv
cjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbEV2ZW50RG9tYWluRG9tYWluRXZlbnRE
aXNwYXRjaGVyCi17Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJv
bGxlcjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFi
bGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtzdXBlciBp
bml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJUKGNv
bnRyb2xsZXIpOwotICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1cm4gc2Vs
ZjsKLX0KLQotLSAodm9pZClldmVudFdpdGhFbnVtUGFyYW1ldGVyV2l0aFBhcmFtZXRlcjooVGVz
dFByb3RvY29sRXZlbnREb21haW5FdmVudFdpdGhFbnVtUGFyYW1ldGVyUGFyYW1ldGVyKXBhcmFt
ZXRlcgotewotICAgIGNvbnN0IEZyb250ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29udHJvbGxlci0+
ZnJvbnRlbmRSb3V0ZXIoKTsKLQotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0g
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRo
b2QiX3MsICJFdmVudERvbWFpbi5ldmVudFdpdGhFbnVtUGFyYW1ldGVyIl9zKTsKLSAgICBSZWY8
SlNPTjo6T2JqZWN0PiBwYXJhbXNPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAg
IHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJwYXJhbWV0ZXIiX3MsIHRvUHJvdG9jb2xTdHJpbmco
cGFyYW1ldGVyKSk7Ci0gICAganNvbk1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIl9zLCBXVEZN
b3ZlKHBhcmFtc09iamVjdCkpOwotICAgIHJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRv
SlNPTlN0cmluZygpKTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
RXZlbnREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPEZvdW5kYXRpb24v
Rm91bmRhdGlvbi5oPgotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2Jq
ZWN0Lmg+Ci0KLQotCi0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbFBs
YXRmb3JtKSB7Ci0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1BbGwsCi0gICAgVGVzdFByb3RvY29s
UGxhdGZvcm1HZW5lcmljLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TLAotICAgIFRlc3RQ
cm90b2NvbFBsYXRmb3JtTWFjT1MsCi19OwotCi0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIs
IFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtKSB7Ci0gICAgVGVzdFByb3RvY29sVHlwZURvbWFp
bkVudW1TaGFyZWQsCi0gICAgVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1SZWQsCi0gICAgVGVz
dFByb3RvY29sVHlwZURvbWFpbkVudW1HcmVlbiwKLSAgICBUZXN0UHJvdG9jb2xUeXBlRG9tYWlu
RW51bUJsdWUsCi19OwotCi0KLQotQHByb3RvY29sIFRlc3RQcm90b2NvbENvbW1hbmREb21haW5E
b21haW5IYW5kbGVyIDxOU09iamVjdD4KLUBvcHRpb25hbAotLSAodm9pZCljb21tYW5kV2l0aEVu
dW1SZXR1cm5WYWx1ZVdpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikp
ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoVGVzdFByb3RvY29sQ29tbWFu
ZERvbWFpbkNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlUmV0dXJuVmFsdWUgcmV0dXJuVmFsdWUp
KXN1Y2Nlc3NDYWxsYmFjazsKLUBlbmQKLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRl
ZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbEV2ZW50RG9tYWluRG9tYWluRXZlbnRE
aXNwYXRjaGVyIDogTlNPYmplY3QKLS0gKHZvaWQpZXZlbnRXaXRoRW51bVBhcmFtZXRlcldpdGhQ
YXJhbWV0ZXI6KFRlc3RQcm90b2NvbEV2ZW50RG9tYWluRXZlbnRXaXRoRW51bVBhcmFtZXRlclBh
cmFtZXRlcilwYXJhbWV0ZXI7Ci1AZW5kCi0KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVBy
b3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbgotLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wu
aCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCi0jaW1wb3J0IDxK
YXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQg
PHd0Zi9KU09OVmFsdWVzLmg+Ci0KLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sRXZlbnREb21haW5E
b21haW5FdmVudERpc3BhdGNoZXIgKFByaXZhdGUpCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhD
b250cm9sbGVyOihJbnNwZWN0b3I6OkF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29u
dHJvbGxlcjsKLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgK
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIK
LSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KLQot
bmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4K
LU9wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYg
dmFsdWUpOwotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sUGxh
dGZvcm0gdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9j
b2xQbGF0Zm9ybUFsbDoKLSAgICAgICAgcmV0dXJuICJhbGwiX3M7Ci0gICAgY2FzZSBUZXN0UHJv
dG9jb2xQbGF0Zm9ybUdlbmVyaWM6Ci0gICAgICAgIHJldHVybiAiZ2VuZXJpYyJfczsKLSAgICBj
YXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOgotICAgICAgICByZXR1cm4gImlvcyJfczsKLSAg
ICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M6Ci0gICAgICAgIHJldHVybiAibWFjb3Mi
X3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29s
UGxhdGZvcm0+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAg
IGlmICh2YWx1ZSA9PSAiYWxsIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3Jt
QWxsOwotICAgIGlmICh2YWx1ZSA9PSAiZ2VuZXJpYyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJv
dG9jb2xQbGF0Zm9ybUdlbmVyaWM7Ci0gICAgaWYgKHZhbHVlID09ICJpb3MiKQotICAgICAgICBy
ZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1JT1M7Ci0gICAgaWYgKHZhbHVlID09ICJtYWNvcyIp
Ci0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOwotICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7Ci19Ci0KLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQ
cm90b2NvbFR5cGVEb21haW5FbnVtIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAg
IGNhc2UgVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1TaGFyZWQ6Ci0gICAgICAgIHJldHVybiAi
c2hhcmVkIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1SZWQ6Ci0gICAg
ICAgIHJldHVybiAicmVkIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1H
cmVlbjoKLSAgICAgICAgcmV0dXJuICJncmVlbiJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFR5
cGVEb21haW5FbnVtQmx1ZToKLSAgICAgICAgcmV0dXJuICJibHVlIl9zOwotICAgIH0KLX0KLQot
dGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtPiBm
cm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUg
PT0gInNoYXJlZCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bVNo
YXJlZDsKLSAgICBpZiAodmFsdWUgPT0gInJlZCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9j
b2xUeXBlRG9tYWluRW51bVJlZDsKLSAgICBpZiAodmFsdWUgPT0gImdyZWVuIikKLSAgICAgICAg
cmV0dXJuIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtR3JlZW47Ci0gICAgaWYgKHZhbHVlID09
ICJibHVlIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtQmx1ZTsK
LSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
LQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xU
eXBlUGFyc2VyLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0
UHJpdmF0ZS5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW50ZXJmYWNlIFRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoVHlwZURvbWFpbkRvbWFpbikKLQotKyAodm9pZClf
cGFyc2VUeXBlRG9tYWluRW51bTooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlk
KXBheWxvYWQ7Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucyAoVHlwZURvbWFpbkRvbWFpbikKLQotKyAodm9pZClfcGFyc2VUeXBlRG9tYWluRW51
bTooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBU
SFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBjbGFzc10pOwot
ICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtPiByZXN1bHQgPSBJbnNwZWN0
b3I6OmZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bT4ocGF5bG9h
ZCk7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfRU5VTV9WQUxVRShyZXN1bHQsIEAiVHlw
ZURvbWFpbkVudW0iKTsKLSAgICAqb3V0VmFsdWUgPSBAKHJlc3VsdC52YWx1ZSgpKTsKLX0KLQot
QGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQot
I2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDxXZWJJbnNw
ZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotI2ltcG9ydCA8d3RmL0Fzc2Vy
dGlvbnMuaD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJ
bnNwZWN0b3I7Ci0KLQotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL2V4cGVjdGVkL2V2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2Fi
bGVUeXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21h
aW4tZGVidWdnYWJsZVR5cGUuanNvbi1yZXN1bHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGQ4OWE5N2ZmNTVkLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9ldmVudC10YXJnZXRUeXBl
LW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJlc3VsdAorKysgL2Rldi9udWxs
CkBAIC0xLDEwNjMgKzAsMCBAQAotIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21t
YW5kcy5qcwotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRhcmdldFR5
cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotLy8gRG9tYWluCi1JbnNwZWN0b3JCYWNrZW5kLnJl
Z2lzdGVyRG9tYWluKCJEb21haW4iLCBudWxsKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJD
b21tYW5kKCJEb21haW4uQ29tbWFuZCIsIG51bGwsIFtdLCBbXSk7Ci1JbnNwZWN0b3JCYWNrZW5k
LnJlZ2lzdGVyRXZlbnQoIkRvbWFpbi5FdmVudCIsIFsicGFnZSIsICJ3b3JrZXIiXSwgW10pOwot
SW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbkRpc3BhdGNoZXIgPSBJbnNwZWN0b3JCYWNr
ZW5kLnJlZ2lzdGVyRGlzcGF0Y2hlci5iaW5kKEluc3BlY3RvckJhY2tlbmQsICJEb21haW4iKTsK
LUluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkRvbWFpbiIsIFsicGFnZSJdKTsKLSMj
IyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxl
VHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNw
cmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
Ci0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0K
LWNsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2b2lkIHNl
dEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVy
KSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9Ci0gICAgQmFj
a2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNr
ZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQotcHJpdmF0ZToKLSAgICBSZWZQdHI8QmFja2VuZERpc3Bh
dGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Ci19OwotCi0KLWNsYXNzIEFsdGVybmF0ZURvbWFp
bkJhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsK
LXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5BbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlcigp
IHsgfQotICAgIHZpcnR1YWwgdm9pZCBDb21tYW5kKGxvbmcgY2FsbElkKSA9IDA7Ci19OwotCi19
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQotIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERp
c3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRhcmdldFR5cGUtbWF0Y2hp
bmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xP
YmplY3RzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIElu
c3BlY3RvciB7Ci0KLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCi0jaWYgRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi1jbGFzcyBBbHRlcm5hdGVEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlcjsKLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKLQotY2xhc3MgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKLXB1Ymxp
YzoKLSAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChFcnJvclN0cmluZyYpID0gMDsKLXByb3RlY3Rl
ZDoKLSAgICB2aXJ0dWFsIH5Eb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKLX07Ci0K
LWNsYXNzIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRh
bEJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPERvbWFpbkJhY2tl
bmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBEb21haW5CYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXIqKTsKLSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25z
dCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5hbDsKLXBy
aXZhdGU6Ci0gICAgdm9pZCBDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmIHBhcmFtZXRlcnMpOwotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQotcHVibGljOgotICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0Y2hlcihBbHRlcm5h
dGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVy
bmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9Ci1wcml2YXRlOgotICAgIEFs
dGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKiBtX2FsdGVybmF0ZURpc3BhdGNoZXIgeyBu
dWxscHRyIH07Ci0jZW5kaWYKLXByaXZhdGU6Ci0gICAgRG9tYWluQmFja2VuZERpc3BhdGNoZXIo
QmFja2VuZERpc3BhdGNoZXImLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAg
ICBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQgeyBudWxscHRyIH07Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmRE
aXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNw
cAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRhcmdldFR5cGUtbWF0
Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRl
IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0K
LSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSNpbmNsdWRlICJU
ZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIElu
c3BlY3RvciB7Ci0KLURvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6fkRvbWFpbkJhY2tl
bmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQotCi1SZWY8RG9tYWluQmFja2VuZERpc3BhdGNoZXI+
IERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImIGJhY2tl
bmREaXNwYXRjaGVyLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQotewot
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmRE
aXNwYXRjaGVyLCBhZ2VudCkpOwotfQotCi1Eb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6RG9tYWlu
QmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBE
b21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQotICAgIDogU3VwcGxlbWVudGFs
QmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCi0gICAgLCBtX2FnZW50KGFnZW50
KQotewotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFp
bigiRG9tYWluIl9zLCB0aGlzKTsKLX0KLQotdm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6
ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6
T2JqZWN0PiYmIG1lc3NhZ2UpCi17Ci0gICAgUmVmPERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBw
cm90ZWN0KCp0aGlzKTsKLQotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7Ci0g
ICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRlcnMpOwotCi0gICAgaWYg
KG1ldGhvZCA9PSAiQ29tbWFuZCIpCi0gICAgICAgIENvbW1hbmQocmVxdWVzdElkLCBXVEZNb3Zl
KHBhcmFtZXRlcnMpKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJl
cG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0Rv
bWFpbi4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOwotfQotCi12b2lkIERvbWFpbkJh
Y2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmKQotewotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQot
ICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNw
YXRjaGVyLT5Db21tYW5kKHJlcXVlc3RJZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5k
aWYKLQotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3Vs
dCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgbV9hZ2VudC0+Q29tbWFuZChlcnJvcik7
Ci0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBl
bHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFj
a2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hl
cnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1k
b21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVj
dHMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgRnJvbnRlbmRSb3V0
ZXI7Ci0KLWNsYXNzIERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlciB7Ci0gICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVyKEZyb250
ZW5kUm91dGVyJiBmcm9udGVuZFJvdXRlcikgOiBtX2Zyb250ZW5kUm91dGVyKGZyb250ZW5kUm91
dGVyKSB7IH0KLSAgICB2b2lkIEV2ZW50KCk7Ci1wcml2YXRlOgotICAgIEZyb250ZW5kUm91dGVy
JiBtX2Zyb250ZW5kUm91dGVyOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMg
RW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRl
c3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXZvaWQgRG9tYWlu
RnJvbnRlbmREaXNwYXRjaGVyOjpFdmVudCgpCi17Ci0gICAgUmVmPEpTT046Ok9iamVjdD4ganNv
bk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRT
dHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7Ci0KLSAgICBtX2Zyb250ZW5kUm91
dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwotfQotCi19IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVy
cy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWlu
LWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFtZXNw
YWNlIEluc3BlY3RvciB7Ci0KLQotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotCi0KLQot
Ci0KLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
Ci0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0KLSNpbmNsdWRlIDx3dGYv
T3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJ
bnNwZWN0b3IgewotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotfSAvLyBuYW1lc3BhY2Ug
UHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sT2JqZWN0cy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tl
bmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnQt
dGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW5jbHVkZSA8d3Rm
L1JldGFpblB0ci5oPgotCi1AcHJvdG9jb2wgVGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxl
cjsKLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotY2xhc3MgT2JqQ0luc3BlY3RvckRvbWFp
bkJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZURvbWFpbkJhY2tlbmRE
aXNwYXRjaGVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBP
YmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sRG9tYWlu
RG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQotICAgIHZv
aWQgQ29tbWFuZChsb25nIHJlcXVlc3RJZCkgZmluYWw7Ci1wcml2YXRlOgotICAgIFJldGFpblB0
cjxpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKLX07Ci0K
LX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJh
Y2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5k
RGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudC10
YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2lt
cG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlICJUZXN0
UHJvdG9jb2xJbnRlcm5hbC5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewotCi12b2lkIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChs
b25nIHJlcXVlc3RJZCkKLXsKLSAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3Rv
cjpAc2VsZWN0b3IoQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkg
ewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVl
c3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi5Db21tYW5k
JyB3YXMgbm90IGZvdW5kIl9zKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBl
bmRpbmdFcnJvcnMoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlkIGVycm9yQ2Fs
bGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigp
LT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZl
ckVycm9yLCBlcnJvcik7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5n
RXJyb3JzKCk7Ci0gICAgfTsKLQotICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57Ci0gICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpTT046Ok9iamVj
dDo6Y3JlYXRlKCksIGZhbHNlKTsKLSAgICB9OwotCi0gICAgW21fZGVsZWdhdGUgQ29tbWFuZFdp
dGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxs
YmFja107Ci19Ci0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPFdlYklu
c3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRl
ZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVj
dAotQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNldERvbWFpbkhhbmRsZXI6
KSBpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiBkb21haW5IYW5kbGVyOwotQHBy
b3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVu
dERpc3BhdGNoZXIgKmRvbWFpbkV2ZW50RGlzcGF0Y2hlcjsKLUBlbmQKLQotCi0jIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbi5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbi5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5o
IgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jaW1wb3J0IDxK
YXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgotI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgotCi11
c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2Nv
bnRyb2xsZXI7Ci0gICAgaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4gX2RvbWFp
bkhhbmRsZXI7Ci0gICAgVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyICpf
ZG9tYWluRXZlbnREaXNwYXRjaGVyOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250
cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAg
ICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5p
bDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVy
OwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBbX2RvbWFp
bkhhbmRsZXIgcmVsZWFzZV07Ci0gICAgW19kb21haW5FdmVudERpc3BhdGNoZXIgcmVsZWFzZV07
Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi0tICh2b2lkKXNldERvbWFpbkhhbmRsZXI6KGlk
PFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+KWhhbmRsZXIKLXsKLSAgICBpZiAoaGFu
ZGxlciA9PSBfZG9tYWluSGFuZGxlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgW19kb21haW5I
YW5kbGVyIHJlbGVhc2VdOwotICAgIF9kb21haW5IYW5kbGVyID0gW2hhbmRsZXIgcmV0YWluXTsK
LQotICAgIGF1dG8gYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IG1ha2VVbmlxdWU8T2JqQ0luc3BlY3Rv
ckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyPihoYW5kbGVyKTsKLSAgICBhdXRvIGFsdGVybmF0ZUFn
ZW50ID0gbWFrZVVuaXF1ZTxBbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudDxEb21haW5CYWNrZW5k
RGlzcGF0Y2hlciwgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXI+PigiRG9tYWluIl9z
LCAqX2NvbnRyb2xsZXIsIFdURk1vdmUoYWx0ZXJuYXRlRGlzcGF0Y2hlcikpOwotICAgIF9jb250
cm9sbGVyLT5hcHBlbmRFeHRyYUFnZW50KFdURk1vdmUoYWx0ZXJuYXRlQWdlbnQpKTsKLX0KLQot
LSAoaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4pZG9tYWluSGFuZGxlcgotewot
ICAgIHJldHVybiBfZG9tYWluSGFuZGxlcjsKLX0KLQotLSAoVGVzdFByb3RvY29sRG9tYWluRG9t
YWluRXZlbnREaXNwYXRjaGVyICopZG9tYWluRXZlbnREaXNwYXRjaGVyCi17Ci0gICAgaWYgKCFf
ZG9tYWluRXZlbnREaXNwYXRjaGVyKQotICAgICAgICBfZG9tYWluRXZlbnREaXNwYXRjaGVyID0g
W1tUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgYWxsb2NdIGluaXRXaXRo
Q29udHJvbGxlcjpfY29udHJvbGxlcl07Ci0gICAgcmV0dXJuIF9kb21haW5FdmVudERpc3BhdGNo
ZXI7Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRp
b24ubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0K
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudC10YXJnZXRUeXBlLW1hdGNo
aW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNp
bXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8d3RmL0pTT05W
YWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9u
IFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlcgotewotICAgIEF1Z21lbnRh
YmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29u
dHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAg
ICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBfY29udHJvbGxl
ciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpRXZlbnQKLXsK
LSAgICBjb25zdCBGcm9udGVuZFJvdXRlciYgcm91dGVyID0gX2NvbnRyb2xsZXItPmZyb250ZW5k
Um91dGVyKCk7Ci0KLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9i
amVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAi
RG9tYWluLkV2ZW50Il9zKTsKLSAgICByb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pT
T05TdHJpbmcoKSk7Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2
ZW50RGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1k
b21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2ltcG9y
dCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgotCi0KLQotCi10eXBlZGVm
IE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xQbGF0Zm9ybSkgewotICAgIFRlc3RQcm90
b2NvbFBsYXRmb3JtQWxsLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYywKLSAgICBU
ZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TLAot
fTsKLQotCi0KLQotCi1AcHJvdG9jb2wgVGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlciA8
TlNPYmplY3Q+Ci1Ab3B0aW9uYWwKLS0gKHZvaWQpQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOih2
b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZv
aWQoXikodm9pZCkpc3VjY2Vzc0NhbGxiYWNrOwotQGVuZAotCi1fX2F0dHJpYnV0ZV9fKCh2aXNp
YmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sRG9tYWluRG9tYWlu
RXZlbnREaXNwYXRjaGVyIDogTlNPYmplY3QKLS0gKHZvaWQpRXZlbnQ7Ci1AZW5kCi0KLQotI2lt
cG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5o
PgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xJbnRlcm5hbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZl
bnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCi0jaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBv
cnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sRG9tYWluRG9t
YWluRXZlbnREaXNwYXRjaGVyIChQcml2YXRlKQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29u
dHJvbGxlcjooSW5zcGVjdG9yOjpBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRy
b2xsZXI7Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWlu
LWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3Iv
UldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Igewot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+Ci1PcHRpb25hbDxPYmpDRW51bVR5cGU+
IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKLQotaW5saW5lIFN0cmlu
ZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFBsYXRmb3JtIHZhbHVlKQotewotICAgIHN3
aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1BbGw6Ci0gICAgICAg
IHJldHVybiAiYWxsIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOgot
ICAgICAgICByZXR1cm4gImdlbmVyaWMiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9y
bUlPUzoKLSAgICAgICAgcmV0dXJuICJpb3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0
Zm9ybU1hY09TOgotICAgICAgICByZXR1cm4gIm1hY29zIl9zOwotICAgIH0KLX0KLQotdGVtcGxh
dGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFBsYXRmb3JtPiBmcm9tUHJvdG9jb2xT
dHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gImFsbCIpCi0g
ICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDsKLSAgICBpZiAodmFsdWUgPT0g
ImdlbmVyaWMiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOwot
ICAgIGlmICh2YWx1ZSA9PSAiaW9zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRm
b3JtSU9TOwotICAgIGlmICh2YWx1ZSA9PSAibWFjb3MiKQotICAgICAgICByZXR1cm4gVGVzdFBy
b3RvY29sUGxhdGZvcm1NYWNPUzsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi19IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
Lm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1t
YXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xU
eXBlUGFyc2VyLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0
UHJpdmF0ZS5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLQotCi0KLQotIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0
UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRl
Lmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMu
aD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9ldmVudHMtd2l0aC1vcHRpb25hbC1w
YXJhbWV0ZXJzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1l
dGVycy5qc29uLXJlc3VsdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGE5NWJhNTU4
Y2YuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRl
cnMuanNvbi1yZXN1bHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMjE3ICswLDAgQEAKLSMjIyBCZWdp
biBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotLy8gRGF0YWJhc2UKLUluc3Bl
Y3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIkRhdGFiYXNlIiwgbnVsbCk7Ci1JbnNwZWN0b3JC
YWNrZW5kLnJlZ2lzdGVyRXZlbnQoIkRhdGFiYXNlLmRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRl
cnMiLCBudWxsLCBbImNvbHVtbk5hbWVzIiwgIm5vdGVzIiwgInRpbWVzdGFtcCIsICJ2YWx1ZXMi
LCAicGF5bG9hZCIsICJzcWxFcnJvciIsICJzY3JlZW5Db2xvciIsICJhbHRlcm5hdGVDb2xvcnMi
LCAicHJpbnRDb2xvciJdKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudCgiRGF0YWJh
c2UuZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIiwgbnVsbCwgWyJjb2x1bW5OYW1lcyIs
ICJub3RlcyIsICJ0aW1lc3RhbXAiLCAidmFsdWVzIiwgInBheWxvYWQiLCAic3FsRXJyb3IiLCAi
c2NyZWVuQ29sb3IiLCAiYWx0ZXJuYXRlQ29sb3JzIiwgInByaW50Q29sb3IiXSk7Ci1JbnNwZWN0
b3JCYWNrZW5kLnJlZ2lzdGVyRGF0YWJhc2VEaXNwYXRjaGVyID0gSW5zcGVjdG9yQmFja2VuZC5y
ZWdpc3RlckRpc3BhdGNoZXIuYmluZChJbnNwZWN0b3JCYWNrZW5kLCAiRGF0YWJhc2UiKTsKLUlu
c3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkRhdGFiYXNlIiwgbnVsbCk7Ci0jIyMgRW5k
IEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0KLSNpbmNsdWRlICJUZXN0UHJv
dG9jb2xUeXBlcy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRS
b3V0ZXIuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEFsdGVybmF0ZUJhY2tl
bmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJl
ZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNo
ZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9Ci0gICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tl
bmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsg
fQotcHJpdmF0ZToKLSAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3Bh
dGNoZXI7Ci19OwotCi0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotI2VuZGlmIC8v
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotIyMjIEVuZCBGaWxlOiBU
ZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2
ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90
b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKLQotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KLQotCi19IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVy
cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRl
cnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0j
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNs
dWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQotI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0
Y2hlcnMuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLX0gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMu
Y3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVy
cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFn
bWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPHd0
Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVz
cGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBGcm9udGVuZFJvdXRlcjsKLQotY2xhc3MgRGF0YWJh
c2VGcm9udGVuZERpc3BhdGNoZXIgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVi
bGljOgotICAgIERhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyKEZyb250ZW5kUm91dGVyJiBmcm9u
dGVuZFJvdXRlcikgOiBtX2Zyb250ZW5kUm91dGVyKGZyb250ZW5kUm91dGVyKSB7IH0KLSAgICB2
b2lkIGRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMoUmVmUHRyPEpTT046OkFycmF5T2Y8U3Ry
aW5nPj4gY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyogbm90ZXMsIGNvbnN0IGRvdWJsZSogdGlt
ZXN0YW1wLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiB2YWx1ZXMsIFJlZlB0cjxKU09OOjpWYWx1ZT4g
cGF5bG9hZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gc3Fs
RXJyb3IsIGNvbnN0IFN0cmluZyogc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiBhbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyog
cHJpbnRDb2xvcik7Ci0gICAgdm9pZCBkaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMoUmVm
UHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgbm90
ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJlZlB0cjxKU09OOjpPYmplY3Q+IHZhbHVlcywgUmVmUHRy
PEpTT046OlZhbHVlPiBwYXlsb2FkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6OkVycm9yPiBzcWxFcnJvciwgY29uc3QgU3RyaW5nJiBzY3JlZW5Db2xvciwgUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IGFsdGVybmF0ZUNvbG9ycywg
Y29uc3QgU3RyaW5nJiBwcmludENvbG9yKTsKLXByaXZhdGU6Ci0gICAgRnJvbnRlbmRSb3V0ZXIm
IG1fZnJvbnRlbmRSb3V0ZXI7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBF
bmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi12b2lkIERhdGFiYXNlRnJvbnRlbmREaXNwYXRj
aGVyOjpkaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0
cmluZz4+IGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIG5vdGVzLCBjb25zdCBkb3VibGUqIHRp
bWVzdGFtcCwgUmVmUHRyPEpTT046Ok9iamVjdD4gdmFsdWVzLCBSZWZQdHI8SlNPTjo6VmFsdWU+
IHBheWxvYWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHNx
bEVycm9yLCBjb25zdCBTdHJpbmcqIHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4gYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcq
IHByaW50Q29sb3IpCi17Ci0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJf
cywgIkRhdGFiYXNlLmRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMiX3MpOwotICAgIFJlZjxK
U09OOjpPYmplY3Q+IHBhcmFtc09iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAg
aWYgKGNvbHVtbk5hbWVzKQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldEFycmF5KCJjb2x1bW5O
YW1lcyJfcywgY29sdW1uTmFtZXMpOwotICAgIGlmIChub3RlcykKLSAgICAgICAgcGFyYW1zT2Jq
ZWN0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCAqbm90ZXMpOwotICAgIGlmICh0aW1lc3RhbXApCi0g
ICAgICAgIHBhcmFtc09iamVjdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICp0aW1lc3RhbXAp
OwotICAgIGlmICh2YWx1ZXMpCi0gICAgICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJ2YWx1
ZXMiX3MsIHZhbHVlcyk7Ci0gICAgaWYgKHBheWxvYWQpCi0gICAgICAgIHBhcmFtc09iamVjdC0+
c2V0VmFsdWUoInBheWxvYWQiX3MsICpwYXlsb2FkKTsKLSAgICBpZiAoc3FsRXJyb3IpCi0gICAg
ICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgc3FsRXJyb3IpOwotICAg
IGlmIChzY3JlZW5Db2xvcikKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInNjcmVl
bkNvbG9yIl9zLCAqc2NyZWVuQ29sb3IpOwotICAgIGlmIChhbHRlcm5hdGVDb2xvcnMpCi0gICAg
ICAgIHBhcmFtc09iamVjdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgYWx0ZXJuYXRl
Q29sb3JzKTsKLSAgICBpZiAocHJpbnRDb2xvcikKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRT
dHJpbmcoInByaW50Q29sb3IiX3MsICpwcmludENvbG9yKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0
T2JqZWN0KCJwYXJhbXMiX3MsIFdURk1vdmUocGFyYW1zT2JqZWN0KSk7Ci0KLSAgICBtX2Zyb250
ZW5kUm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwotfQotCi12
b2lkIERhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyOjpkaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFt
ZXRlcnMoUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gY29sdW1uTmFtZXMsIGNvbnN0IFN0
cmluZyYgbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJlZlB0cjxKU09OOjpPYmplY3Q+IHZhbHVl
cywgUmVmUHRyPEpTT046OlZhbHVlPiBwYXlsb2FkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGF0YWJhc2U6OkVycm9yPiBzcWxFcnJvciwgY29uc3QgU3RyaW5nJiBzY3JlZW5Db2xvciwg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IGFsdGVybmF0
ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBwcmludENvbG9yKQotewotICAgIFJlZjxKU09OOjpPYmpl
Y3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2Fn
ZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEYXRhYmFzZS5kaWRFeGVjdXRlTm9PcHRpb25hbFBh
cmFtZXRlcnMiX3MpOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHBhcmFtc09iamVjdCA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiY29sdW1uTmFt
ZXMiX3MsIGNvbHVtbk5hbWVzKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygibm90ZXMi
X3MsIG5vdGVzKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCB0
aW1lc3RhbXApOwotICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIHZhbHVl
cyk7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgcGF5bG9hZCk7Ci0g
ICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBzcWxFcnJvcik7Ci0gICAg
cGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCBzY3JlZW5Db2xvcik7Ci0g
ICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCBhbHRlcm5hdGVD
b2xvcnMpOwotICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCBwcmlu
dENvbG9yKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiX3MsIFdURk1vdmUo
cGFyYW1zT2JqZWN0KSk7Ci0KLSAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChqc29uTWVz
c2FnZS0+dG9KU09OU3RyaW5nKCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQot
IyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLW5hbWVzcGFjZSBQcm90
b2NvbCB7Ci0KLQotCi0vLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KLW5hbWVzcGFjZSBEYXRhYmFz
ZSB7Ci1jbGFzcyBFcnJvcjsKLX0gLy8gRGF0YWJhc2UKLS8vIEVuZCBvZiBmb3J3YXJkIGRlY2xh
cmF0aW9ucy4KLQotCi0vLyBUeXBlZGVmcy4KLW5hbWVzcGFjZSBEYXRhYmFzZSB7Ci0vKiBVbmlx
dWUgaWRlbnRpZmllciBvZiBEYXRhYmFzZSBvYmplY3QuICovCi10eXBlZGVmIFN0cmluZyBEYXRh
YmFzZUlkOwotdHlwZWRlZiBTdHJpbmcgUHJpbWFyeUNvbG9yczsKLXR5cGVkZWYgSlNPTjo6QXJy
YXlPZjxTdHJpbmc+IENvbG9yTGlzdDsKLX0gLy8gRGF0YWJhc2UKLS8vIEVuZCBvZiB0eXBlZGVm
cy4KLQotbmFtZXNwYWNlIERhdGFiYXNlIHsKLS8qIERhdGFiYXNlIGVycm9yLiAqLwotY2xhc3Mg
RXJyb3IgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7Ci1wdWJsaWM6Ci0gICAgZW51bSB7Ci0g
ICAgICAgIE5vRmllbGRzU2V0ID0gMCwKLSAgICAgICAgTWVzc2FnZVNldCA9IDEgPDwgMCwKLSAg
ICAgICAgQ29kZVNldCA9IDEgPDwgMSwKLSAgICAgICAgQWxsRmllbGRzU2V0ID0gKE1lc3NhZ2VT
ZXQgfCBDb2RlU2V0KQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+Ci0gICAgY2xh
c3MgQnVpbGRlciB7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4g
bV9yZXN1bHQ7Ci0KLSAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBT
VEVQPiYgY2FzdFN0YXRlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICpyZWludGVy
cHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgQnVpbGRlcihSZWY8LypFcnJvciovSlNPTjo6T2JqZWN0PiYmIG9iamVjdCkKLSAgICAg
ICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2lu
X25vbl9pbml0X3N0YXRlKTsKLSAgICAgICAgfQotICAgICAgICBmcmllbmQgY2xhc3MgRXJyb3I7
Ci0gICAgcHVibGljOgotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNZXNzYWdlU2V0PiYgc2V0
TWVzc2FnZShjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVCghKFNUQVRFICYgTWVzc2FnZVNldCksIHByb3BlcnR5X21lc3NhZ2VfYWxyZWFk
eV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibWVzc2FnZSJfcywgdmFs
dWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNZXNzYWdlU2V0PigpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvZGVTZXQ+JiBzZXRDb2RlKGludCB2YWx1
ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENvZGVT
ZXQpLCBwcm9wZXJ0eV9jb2RlX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXRJbnRlZ2VyKCJjb2RlIl9zLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PENvZGVTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBSZWY8RXJyb3I+IHJlbGVhc2UoKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNT
ZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6
ZW9mKEVycm9yKSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0KSwgY2Fubm90X2Nhc3QpOwotCi0gICAg
ICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uUmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5v
bk51bGwoKTsKLSAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gV1RGTW92ZSgqcmVpbnRlcnByZXRf
Y2FzdDxSZWY8RXJyb3I+Kj4oJmpzb25SZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVybiByZXN1
bHQ7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgLyoKLSAgICAgKiBTeW50aGV0aWMgY29uc3Ry
dWN0b3I6Ci0gICAgICogUmVmPEVycm9yPiByZXN1bHQgPSBFcnJvcjo6Y3JlYXRlKCkKLSAgICAg
KiAgICAgLnNldE1lc3NhZ2UoLi4uKQotICAgICAqICAgICAuc2V0Q29kZSguLi4pCi0gICAgICog
ICAgIC5yZWxlYXNlKCk7Ci0gICAgICovCi0gICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+
IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKSk7Ci0gICAgfQotfTsKLQotfSAvLyBEYXRhYmFzZQotCi0KLQot
fSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sT2JqZWN0cy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVu
dHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbE9iamVjdHMuaCIKLQotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLW5hbWVzcGFj
ZSBQcm90b2NvbCB7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAot
Ci0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0
ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVy
cy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQotCi0KLW5hbWVzcGFjZSBJbnNwZWN0
b3IgewotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJU
ZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bEludGVybmFsLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0j
aW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLX0g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tl
bmREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJh
dGlvbi5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0
aW9uYWwtcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KLQotX19hdHRy
aWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5
KSBUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkV2ZW50RGlzcGF0Y2hlciAqZGF0YWJhc2VFdmVu
dERpc3BhdGNoZXI7Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1
cmF0aW9uLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0K
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1w
YXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgotCi0jaW1wb3J0ICJUZXN0
UHJvdG9jb2xJbnRlcm5hbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNo
ZXJzLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2Vu
dC5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9s
bGVyLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5k
RGlzcGF0Y2hlcnMuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVycy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW1wbGVtZW50
YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVj
dG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VEb21h
aW5FdmVudERpc3BhdGNoZXIgKl9kYXRhYmFzZUV2ZW50RGlzcGF0Y2hlcjsKLX0KLQotLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9s
bGVyKiljb250cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNl
bGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIpOwotICAgIF9j
b250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClk
ZWFsbG9jCi17Ci0gICAgW19kYXRhYmFzZUV2ZW50RGlzcGF0Y2hlciByZWxlYXNlXTsKLSAgICBb
c3VwZXIgZGVhbGxvY107Ci19Ci0KLS0gKFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluRXZlbnRE
aXNwYXRjaGVyICopZGF0YWJhc2VFdmVudERpc3BhdGNoZXIKLXsKLSAgICBpZiAoIV9kYXRhYmFz
ZUV2ZW50RGlzcGF0Y2hlcikKLSAgICAgICAgX2RhdGFiYXNlRXZlbnREaXNwYXRjaGVyID0gW1tU
ZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkV2ZW50RGlzcGF0Y2hlciBhbGxvY10gaW5pdFdpdGhD
b250cm9sbGVyOl9jb250cm9sbGVyXTsKLSAgICByZXR1cm4gX2RhdGFiYXNlRXZlbnREaXNwYXRj
aGVyOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0
aW9uLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1t
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwt
cGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNp
bmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbERh
dGFiYXNlRG9tYWluRXZlbnREaXNwYXRjaGVyCi17Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JD
b250cm9sbGVyKiBfY29udHJvbGxlcjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29u
dHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCi17Ci0g
ICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBu
aWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIpOwotICAgIF9jb250cm9sbGVyID0gY29udHJvbGxl
cjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClkaWRFeGVjdXRlT3B0aW9uYWxQYXJh
bWV0ZXJzV2l0aENvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopY29sdW1uTmFt
ZXMgbm90ZXM6KE5TU3RyaW5nICoqKW5vdGVzIHRpbWVzdGFtcDooZG91YmxlICopdGltZXN0YW1w
IHZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqKXZhbHVlcyBwYXlsb2FkOihSV0lQcm90
b2NvbEpTT05PYmplY3QgKiopcGF5bG9hZCBzcWxFcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VF
cnJvciAqKilzcWxFcnJvciBzY3JlZW5Db2xvcjooTlNTdHJpbmcgKiopc2NyZWVuQ29sb3IgYWx0
ZXJuYXRlQ29sb3JzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopYWx0ZXJuYXRlQ29sb3JzIHBy
aW50Q29sb3I6KE5TU3RyaW5nICoqKXByaW50Q29sb3IKLXsKLSAgICBjb25zdCBGcm9udGVuZFJv
dXRlciYgcm91dGVyID0gX2NvbnRyb2xsZXItPmZyb250ZW5kUm91dGVyKCk7Ci0KLSAgICBUSFJP
V19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoY29sdW1uTmFtZXMsIEAiY29s
dW1uTmFtZXMiKTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVU
RVIobm90ZXMsIEAibm90ZXMiKTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05B
TF9QQVJBTUVURVIodmFsdWVzLCBAInZhbHVlcyIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
QkFEX09QVElPTkFMX1BBUkFNRVRFUihwYXlsb2FkLCBAInBheWxvYWQiKTsKLSAgICBUSFJPV19F
WENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoc3FsRXJyb3IsIEAic3FsRXJyb3Ii
KTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoc2NyZWVu
Q29sb3IsIEAic2NyZWVuQ29sb3IiKTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJ
T05BTF9QQVJBTUVURVIoYWx0ZXJuYXRlQ29sb3JzLCBAImFsdGVybmF0ZUNvbG9ycyIpOwotICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihwcmludENvbG9yLCBA
InByaW50Q29sb3IiKTsKLQotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2Qi
X3MsICJEYXRhYmFzZS5kaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzIl9zKTsKLSAgICBSZWY8
SlNPTjo6T2JqZWN0PiBwYXJhbXNPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAg
IGlmIChjb2x1bW5OYW1lcykKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiY29sdW1u
TmFtZXMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KCgqY29sdW1uTmFtZXMpKSk7Ci0gICAgaWYgKG5v
dGVzKQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygibm90ZXMiX3MsICgqbm90ZXMp
KTsKLSAgICBpZiAodGltZXN0YW1wKQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldERvdWJsZSgi
dGltZXN0YW1wIl9zLCAoKnRpbWVzdGFtcCkpOwotICAgIGlmICh2YWx1ZXMpCi0gICAgICAgIHBh
cmFtc09iamVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFsoKnZhbHVlcykgdG9KU09OT2JqZWN0
XSk7Ci0gICAgaWYgKHBheWxvYWQpCi0gICAgICAgIHBhcmFtc09iamVjdC0+c2V0VmFsdWUoInBh
eWxvYWQiX3MsIFsoKnBheWxvYWQpIHRvSlNPTk9iamVjdF0pOwotICAgIGlmIChzcWxFcnJvcikK
LSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBbKCpzcWxFcnJv
cikgdG9KU09OT2JqZWN0XSk7Ci0gICAgaWYgKHNjcmVlbkNvbG9yKQotICAgICAgICBwYXJhbXNP
YmplY3QtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsICgqc2NyZWVuQ29sb3IpKTsKLSAgICBp
ZiAoYWx0ZXJuYXRlQ29sb3JzKQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldEFycmF5KCJhbHRl
cm5hdGVDb2xvcnMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KCgqYWx0ZXJuYXRlQ29sb3JzKSkpOwot
ICAgIGlmIChwcmludENvbG9yKQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygicHJp
bnRDb2xvciJfcywgKCpwcmludENvbG9yKSk7Ci0gICAganNvbk1lc3NhZ2UtPnNldE9iamVjdCgi
cGFyYW1zIl9zLCBXVEZNb3ZlKHBhcmFtc09iamVjdCkpOwotICAgIHJvdXRlci5zZW5kRXZlbnQo
anNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKLX0KLQotLSAodm9pZClkaWRFeGVjdXRlTm9P
cHRpb25hbFBhcmFtZXRlcnNXaXRoQ29sdW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAq
KWNvbHVtbk5hbWVzIG5vdGVzOihOU1N0cmluZyAqKW5vdGVzIHRpbWVzdGFtcDooZG91YmxlKXRp
bWVzdGFtcCB2YWx1ZXM6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcyBwYXlsb2FkOihS
V0lQcm90b2NvbEpTT05PYmplY3QgKilwYXlsb2FkIHNxbEVycm9yOihUZXN0UHJvdG9jb2xEYXRh
YmFzZUVycm9yICopc3FsRXJyb3Igc2NyZWVuQ29sb3I6KE5TU3RyaW5nICopc2NyZWVuQ29sb3Ig
YWx0ZXJuYXRlQ29sb3JzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilhbHRlcm5hdGVDb2xvcnMg
cHJpbnRDb2xvcjooTlNTdHJpbmcgKilwcmludENvbG9yCi17Ci0gICAgY29uc3QgRnJvbnRlbmRS
b3V0ZXImIHJvdXRlciA9IF9jb250cm9sbGVyLT5mcm9udGVuZFJvdXRlcigpOwotCi0gICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoY29sdW1uTmFtZXMsIEAiY29sdW1u
TmFtZXMiKTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihub3Rl
cywgQCJub3RlcyIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVS
KHZhbHVlcywgQCJ2YWx1ZXMiKTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BB
UkFNRVRFUihwYXlsb2FkLCBAInBheWxvYWQiKTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JF
UVVJUkVEX1BBUkFNRVRFUihzcWxFcnJvciwgQCJzcWxFcnJvciIpOwotICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHNjcmVlbkNvbG9yLCBAInNjcmVlbkNvbG9yIik7
Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoYWx0ZXJuYXRlQ29s
b3JzLCBAImFsdGVybmF0ZUNvbG9ycyIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlS
RURfUEFSQU1FVEVSKHByaW50Q29sb3IsIEAicHJpbnRDb2xvciIpOwotCi0gICAgUmVmPEpTT046
Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25N
ZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRhdGFiYXNlLmRpZEV4ZWN1dGVOb09wdGlv
bmFsUGFyYW1ldGVycyJfcyk7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcGFyYW1zT2JqZWN0ID0g
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldEFycmF5KCJjb2x1
bW5OYW1lcyJfcywgdG9KU09OU3RyaW5nQXJyYXkoY29sdW1uTmFtZXMpKTsKLSAgICBwYXJhbXNP
YmplY3QtPnNldFN0cmluZygibm90ZXMiX3MsIG5vdGVzKTsKLSAgICBwYXJhbXNPYmplY3QtPnNl
dERvdWJsZSgidGltZXN0YW1wIl9zLCB0aW1lc3RhbXApOwotICAgIHBhcmFtc09iamVjdC0+c2V0
T2JqZWN0KCJ2YWx1ZXMiX3MsIFt2YWx1ZXMgdG9KU09OT2JqZWN0XSk7Ci0gICAgcGFyYW1zT2Jq
ZWN0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgW3BheWxvYWQgdG9KU09OT2JqZWN0XSk7Ci0gICAg
cGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBbc3FsRXJyb3IgdG9KU09OT2Jq
ZWN0XSk7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCBzY3Jl
ZW5Db2xvcik7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9z
LCB0b0pTT05TdHJpbmdBcnJheShhbHRlcm5hdGVDb2xvcnMpKTsKLSAgICBwYXJhbXNPYmplY3Qt
PnNldFN0cmluZygicHJpbnRDb2xvciJfcywgcHJpbnRDb2xvcik7Ci0gICAganNvbk1lc3NhZ2Ut
PnNldE9iamVjdCgicGFyYW1zIl9zLCBXVEZNb3ZlKHBhcmFtc09iamVjdCkpOwotICAgIHJvdXRl
ci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKLX0KLQotQGVuZAotCi0K
LSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9u
Lmg+Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KLQot
Ci1AY2xhc3MgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcjsKLQotdHlwZWRlZiBOU19FTlVNKE5T
SW50ZWdlciwgVGVzdFByb3RvY29sUGxhdGZvcm0pIHsKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9y
bUFsbCwKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWMsCi0gICAgVGVzdFByb3RvY29s
UGxhdGZvcm1JT1MsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUywKLX07Ci0KLQotCi0K
LV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0
UHJvdG9jb2xEYXRhYmFzZUVycm9yIDogUldJUHJvdG9jb2xKU09OT2JqZWN0Ci0tIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5
bG9hZDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2Nv
bEpTT05PYmplY3QgKilqc29uT2JqZWN0OwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTWVzc2Fn
ZTooTlNTdHJpbmcgKiltZXNzYWdlIGNvZGU6KGludCljb2RlOwotLyogcmVxdWlyZWQgKi8gQHBy
b3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICptZXNzYWdlOwotLyogcmVxdWlyZWQg
Ki8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgaW50IGNvZGU7Ci1AZW5kCi0KLQotCi1f
X2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFBy
b3RvY29sRGF0YWJhc2VEb21haW5FdmVudERpc3BhdGNoZXIgOiBOU09iamVjdAotLSAodm9pZClk
aWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzV2l0aENvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNT
dHJpbmc+Ki8gKiopY29sdW1uTmFtZXMgbm90ZXM6KE5TU3RyaW5nICoqKW5vdGVzIHRpbWVzdGFt
cDooZG91YmxlICopdGltZXN0YW1wIHZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqKXZh
bHVlcyBwYXlsb2FkOihSV0lQcm90b2NvbEpTT05PYmplY3QgKiopcGF5bG9hZCBzcWxFcnJvcjoo
VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKilzcWxFcnJvciBzY3JlZW5Db2xvcjooTlNTdHJp
bmcgKiopc2NyZWVuQ29sb3IgYWx0ZXJuYXRlQ29sb3JzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8g
KiopYWx0ZXJuYXRlQ29sb3JzIHByaW50Q29sb3I6KE5TU3RyaW5nICoqKXByaW50Q29sb3I7Ci0t
ICh2b2lkKWRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1dpdGhDb2x1bW5OYW1lczooTlNB
cnJheS8qPE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMgbm90ZXM6KE5TU3RyaW5nICopbm90ZXMg
dGltZXN0YW1wOihkb3VibGUpdGltZXN0YW1wIHZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0
ICopdmFsdWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQgc3FsRXJy
b3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKilzcWxFcnJvciBzY3JlZW5Db2xvcjooTlNT
dHJpbmcgKilzY3JlZW5Db2xvciBhbHRlcm5hdGVDb2xvcnM6KE5TQXJyYXkvKjxOU1N0cmluZz4q
LyAqKWFsdGVybmF0ZUNvbG9ycyBwcmludENvbG9yOihOU1N0cmluZyAqKXByaW50Q29sb3I7Ci1A
ZW5kCi0KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmls
aXR5T2JqZWN0cy5oPgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5o
IgotI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKLSNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8
d3RmL0pTT05WYWx1ZXMuaD4KLQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFp
bkV2ZW50RGlzcGF0Y2hlciAoUHJpdmF0ZSkKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRy
b2xsZXI6KEluc3BlY3Rvcjo6QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9s
bGVyOwotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAi
VGVzdFByb3RvY29sLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNv
bnZlcnNpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBPYmpDRW51bVR5cGU+Ci1PcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmlu
Zyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5n
KFRlc3RQcm90b2NvbFBsYXRmb3JtIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAg
IGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1BbGw6Ci0gICAgICAgIHJldHVybiAiYWxsIl9zOwot
ICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOgotICAgICAgICByZXR1cm4gImdl
bmVyaWMiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzoKLSAgICAgICAgcmV0
dXJuICJpb3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOgotICAgICAg
ICByZXR1cm4gIm1hY29zIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlv
bmFsPFRlc3RQcm90b2NvbFBsYXRmb3JtPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5n
JiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gImFsbCIpCi0gICAgICAgIHJldHVybiBUZXN0
UHJvdG9jb2xQbGF0Zm9ybUFsbDsKLSAgICBpZiAodmFsdWUgPT0gImdlbmVyaWMiKQotICAgICAg
ICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOwotICAgIGlmICh2YWx1ZSA9PSAi
aW9zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOwotICAgIGlmICh2
YWx1ZSA9PSAibWFjb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1NYWNP
UzsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLQot
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMu
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0
ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29s
LmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCi0jaW1wb3J0IDxXZWJJbnNw
ZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotCi11c2luZyBuYW1lc3BhY2Ug
SW5zcGVjdG9yOwotCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoRGF0
YWJhc2VEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlRGF0YWJhc2VJZDooTlNTdHJpbmcgKiopb3V0
VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZVByaW1hcnlDb2xv
cnM6KE5TU3RyaW5nICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotKyAodm9p
ZClfcGFyc2VDb2xvckxpc3Q6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKilvdXRWYWx1ZSBmcm9t
UGF5bG9hZDooaWQpcGF5bG9hZDsKLSsgKHZvaWQpX3BhcnNlRXJyb3I6KFRlc3RQcm90b2NvbERh
dGFiYXNlRXJyb3IgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0KLUBlbmQK
LQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoRGF0YWJhc2VE
b21haW4pCi0KLSsgKHZvaWQpX3BhcnNlRGF0YWJhc2VJZDooTlNTdHJpbmcgKiopb3V0VmFsdWUg
ZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9U
WVBFKHBheWxvYWQsIFtOU1N0cmluZyBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IChOU1N0cmlu
ZyAqKXBheWxvYWQ7Ci19Ci0KLSsgKHZvaWQpX3BhcnNlUHJpbWFyeUNvbG9yczooTlNTdHJpbmcg
Kiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJ
T05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBjbGFzc10pOwotICAgICpvdXRWYWx1
ZSA9IChOU1N0cmluZyAqKXBheWxvYWQ7Ci19Ci0KLSsgKHZvaWQpX3BhcnNlQ29sb3JMaXN0OihO
U0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQK
LXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0FycmF5Lyo8
TlNTdHJpbmc+Ki8gY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSAoTlNBcnJheS8qPE5TU3RyaW5n
PiovICopcGF5bG9hZDsKLX0KLQotKyAodm9pZClfcGFyc2VFcnJvcjooVGVzdFByb3RvY29sRGF0
YWJhc2VFcnJvciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10p
OwotICAgICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBhbGxvY10gaW5p
dFdpdGhQYXlsb2FkOnBheWxvYWRdOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgt
b3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQg
IlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JX
SVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLSNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+
Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9y
OwotCi0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yCi0KLS0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5n
ICosIGlkPiAqKXBheWxvYWQKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAg
ICAgICAgcmV0dXJuIG5pbDsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJP
UEVSVFkocGF5bG9hZFtAIm1lc3NhZ2UiXSwgQCJtZXNzYWdlIik7Ci0gICAgc2VsZi5tZXNzYWdl
ID0gcGF5bG9hZFtAIm1lc3NhZ2UiXTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlS
RURfUFJPUEVSVFkocGF5bG9hZFtAImNvZGUiXSwgQCJjb2RlIik7Ci0gICAgc2VsZi5jb2RlID0g
W3BheWxvYWRbQCJjb2RlIl0gaW50ZWdlclZhbHVlXTsKLQotICAgIHJldHVybiBzZWxmOwotfQot
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9i
amVjdCAqKW9iamVjdAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09OT2Jq
ZWN0OltvYmplY3QgdG9KU09OT2JqZWN0XS5nZXQoKV0pKQotICAgICAgICByZXR1cm4gbmlsOwot
Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6
KE5TU3RyaW5nICopbWVzc2FnZSBjb2RlOihpbnQpY29kZQotewotICAgIGlmICghKHNlbGYgPSBb
c3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShtZXNzYWdlLCBAIm1lc3NhZ2UiKTsKLQotICAgIHNlbGYu
bWVzc2FnZSA9IG1lc3NhZ2U7Ci0gICAgc2VsZi5jb2RlID0gY29kZTsKLQotICAgIHJldHVybiBz
ZWxmOwotfQotCi0tICh2b2lkKXNldE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZQotewotICAg
IFtzdXBlciBzZXRTdHJpbmc6bWVzc2FnZSBmb3JLZXk6QCJtZXNzYWdlIl07Ci19Ci0KLS0gKE5T
U3RyaW5nICopbWVzc2FnZQotewotICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAibWVz
c2FnZSJdOwotfQotCi0tICh2b2lkKXNldENvZGU6KGludCljb2RlCi17Ci0gICAgW3N1cGVyIHNl
dEludGVnZXI6Y29kZSBmb3JLZXk6QCJjb2RlIl07Ci19Ci0KLS0gKGludCljb2RlCi17Ci0gICAg
cmV0dXJuIFtzdXBlciBpbnRlZ2VyRm9yS2V5OkAiY29kZSJdOwotfQotCi1AZW5kCi0KLQotIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1v
bi1jb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24t
ZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2Vu
ZXJpYy9leHBlY3RlZC9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4t
ZGVidWdnYWJsZVR5cGUuanNvbi1lcnJvcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
YTEzMGFkNzBjNDAuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tY29tbWFuZC10YXJn
ZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLWVycm9yCisrKyAvZGV2
L251bGwKQEAgLTEgKzAsMCBAQAotRVJST1I6IE1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNhdGlv
bjogZG9tYWluIERvbWFpbiBoYXMgYW4gaXRlbSBpbiB0YXJnZXRUeXBlcyAiW3Und29ya2VyJ10i
IHRoYXQgaXMgbm90IHN1cHBvcnRlZCBieSBhbnkgdmFsdWUgaW4gZGVidWdnYWJsZVR5cGVzICJb
dSdqYXZhc2NyaXB0J10iLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1jb21tYW5kLXRhcmdl
dFR5cGVzLXR5cGUuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tY29tbWFuZC10YXJnZXRUeXBl
cy10eXBlLmpzb24tZXJyb3IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk5ZjVlMWE0
YThlLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlwZXMt
dHlwZS5qc29uLWVycm9yCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotRVJST1I6IE1hbGZv
cm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjogdGFyZ2V0VHlwZXMgbGlzdCBmb3IgY29tbWFuZCBQ
YWdlT25seSBpcyBub3QgYW4gYXJyYXkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tY29tbWFu
ZC10YXJnZXRUeXBlcy12YWx1ZS5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1jb21tYW5kLXRh
cmdldFR5cGVzLXZhbHVlLmpzb24tZXJyb3IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDIxYTM2NTY5OTI2Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWNvbW1hbmQtdGFy
Z2V0VHlwZXMtdmFsdWUuanNvbi1lcnJvcgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUVS
Uk9SOiBNYWxmb3JtZWQgZG9tYWluIHNwZWNpZmljYXRpb246IHRhcmdldFR5cGVzIGxpc3QgZm9y
IGNvbW1hbmQgUGFnZU9ubHkgaXMgYW4gdW5zdXBwb3J0ZWQgc3RyaW5nLiBXYXM6ICJbdSdwYWdl
ZSddIiwgQWxsb3dlZCB2YWx1ZXM6IHNlcnZpY2Utd29ya2VyLCBqYXZhc2NyaXB0LCB3b3JrZXIs
IHBhZ2UsIHdlYi1wYWdlCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWNvbW1hbmQtd2l0aC1p
bnZhbGlkLXBsYXRmb3JtLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWNvbW1hbmQtd2l0aC1p
bnZhbGlkLXBsYXRmb3JtLmpzb24tZXJyb3IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGVjNjM2YzU0YjdjLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWNvbW1hbmQtd2l0
aC1pbnZhbGlkLXBsYXRmb3JtLmpzb24tZXJyb3IKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBA
Ci1FUlJPUjogVW5rbm93biBwbGF0Zm9ybTogaW52YWxpZApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFp
bC1vbi1kb21haW4tZGVidWdnYWJsZVR5cGVzLXR5cGUuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwt
b24tZG9tYWluLWRlYnVnZ2FibGVUeXBlcy10eXBlLmpzb24tZXJyb3IKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDJiODk4YmE3YmU3Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWls
LW9uLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMtdHlwZS5qc29uLWVycm9yCisrKyAvZGV2L251bGwK
QEAgLTEgKzAsMCBAQAotRVJST1I6IE1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjogZGVi
dWdnYWJsZVR5cGVzIGZvciBkb21haW4gV2ViT25seSBpcyBub3QgYW4gYXJyYXkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2V4cGVjdGVkL2ZhaWwtb24tZG9tYWluLWRlYnVnZ2FibGVUeXBlcy12YWx1ZS5qc29uLWVycm9y
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMv
ZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4tZGVidWdnYWJsZVR5cGVzLXZhbHVlLmpzb24tZXJyb3IK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmNzFkNDcwY2JkLi4wMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJp
Yy9leHBlY3RlZC9mYWlsLW9uLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMtdmFsdWUuanNvbi1lcnJv
cgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUVSUk9SOiBNYWxmb3JtZWQgZG9tYWluIHNw
ZWNpZmljYXRpb246IGRlYnVnZ2FibGVUeXBlcyBmb3IgZG9tYWluIFdlYk9ubHkgaXMgYW4gdW5z
dXBwb3J0ZWQgc3RyaW5nLiBXYXM6ICJbdSd3ZWJiJ10iLCBBbGxvd2VkIHZhbHVlczogc2Vydmlj
ZS13b3JrZXIsIGphdmFzY3JpcHQsIHBhZ2UsIHdlYi1wYWdlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9m
YWlsLW9uLWRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5q
c29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21h
aW4tZGVidWdnYWJsZVR5cGUuanNvbi1lcnJvcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggODY3ZTM1MDA4OTguLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZG9tYWluLXRh
cmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tZXJyb3IKKysrIC9k
ZXYvbnVsbApAQCAtMSArMCwwIEBACi1FUlJPUjogTWFsZm9ybWVkIGRvbWFpbiBzcGVjaWZpY2F0
aW9uOiBjb21tYW5kIENvbW1hbmQgaGFzIGFuIGl0ZW0gaW4gdGFyZ2V0VHlwZXMgIlt1J3dvcmtl
ciddIiB0aGF0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgYW55IHZhbHVlIGluIGRlYnVnZ2FibGVUeXBl
cyAiW3UnamF2YXNjcmlwdCddIi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZG9tYWluLXRh
cmdldFR5cGVzLXR5cGUuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZG9tYWluLXRhcmdldFR5
cGVzLXR5cGUuanNvbi1lcnJvcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTlhMzU5
MzNhMzUuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZG9tYWluLXRhcmdldFR5cGVz
LXR5cGUuanNvbi1lcnJvcgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUVSUk9SOiBNYWxm
b3JtZWQgZG9tYWluIHNwZWNpZmljYXRpb246IHRhcmdldFR5cGVzIGZvciBkb21haW4gUGFnZU9u
bHkgaXMgbm90IGFuIGFycmF5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWRvbWFpbi10YXJn
ZXRUeXBlcy12YWx1ZS5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlw
ZXMtdmFsdWUuanNvbi1lcnJvcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDY4MDdm
NzJmYzQuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZG9tYWluLXRhcmdldFR5cGVz
LXZhbHVlLmpzb24tZXJyb3IKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1FUlJPUjogTWFs
Zm9ybWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9uOiB0YXJnZXRUeXBlcyBmb3IgZG9tYWluIFBhZ2VP
bmx5IGlzIGFuIHVuc3VwcG9ydGVkIHN0cmluZy4gV2FzOiAiW3UncGFnZWUnXSIsIEFsbG93ZWQg
dmFsdWVzOiBzZXJ2aWNlLXdvcmtlciwgamF2YXNjcmlwdCwgd29ya2VyLCBwYWdlLCB3ZWItcGFn
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1jYWxsLXBhcmFt
ZXRlci1uYW1lcy5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1j
YWxsLXBhcmFtZXRlci1uYW1lcy5qc29uLWVycm9yCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAzZjc1NmRlMzI1MC4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNh
dGUtY29tbWFuZC1jYWxsLXBhcmFtZXRlci1uYW1lcy5qc29uLWVycm9yCisrKyAvZGV2L251bGwK
QEAgLTEgKzAsMCBAQAotRVJST1I6IE1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjogY2Fs
bCBwYXJhbWV0ZXIgbGlzdCBmb3IgY29tbWFuZCBwcm9jZXNzUG9pbnRzIGhhcyBkdXBsaWNhdGUg
cGFyYW1ldGVyIG5hbWVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS1jb21t
YW5kLXJldHVybi1wYXJhbWV0ZXItbmFtZXMuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZHVw
bGljYXRlLWNvbW1hbmQtcmV0dXJuLXBhcmFtZXRlci1uYW1lcy5qc29uLWVycm9yCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYTE0OGZmNjdjOS4uMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0
ZWQvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1yZXR1cm4tcGFyYW1ldGVyLW5hbWVzLmpzb24t
ZXJyb3IKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1FUlJPUjogTWFsZm9ybWVkIGRvbWFp
biBzcGVjaWZpY2F0aW9uOiByZXR1cm4gcGFyYW1ldGVyIGxpc3QgZm9yIGNvbW1hbmQgcHJvY2Vz
c1BvaW50cyBoYXMgZHVwbGljYXRlIHBhcmFtZXRlciBuYW1lcwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQv
ZmFpbC1vbi1kdXBsaWNhdGUtZXZlbnQtcGFyYW1ldGVyLW5hbWVzLmpzb24tZXJyb3IgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3Rl
ZC9mYWlsLW9uLWR1cGxpY2F0ZS1ldmVudC1wYXJhbWV0ZXItbmFtZXMuanNvbi1lcnJvcgpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzcxYmJkMjFjMmMuLjAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4
cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLWV2ZW50LXBhcmFtZXRlci1uYW1lcy5qc29uLWVycm9y
CisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotRVJST1I6IE1hbGZvcm1lZCBkb21haW4gc3Bl
Y2lmaWNhdGlvbjogcGFyYW1ldGVyIGxpc3QgZm9yIGV2ZW50IHByb2Nlc3NlZFBvaW50cyBoYXMg
ZHVwbGljYXRlIHBhcmFtZXRlciBuYW1lcwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBs
aWNhdGUtdHlwZS1kZWNsYXJhdGlvbnMuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGlj
YXRlLXR5cGUtZGVjbGFyYXRpb25zLmpzb24tZXJyb3IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDQ0N2NkZjhlMjhlLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWR1cGxp
Y2F0ZS10eXBlLWRlY2xhcmF0aW9ucy5qc29uLWVycm9yCisrKyAvZGV2L251bGwKQEAgLTEgKzAs
MCBAQAotRVJST1I6IER1cGxpY2F0ZSB0eXBlIGRlY2xhcmF0aW9uOiBSdW50aW1lLlJlbW90ZU9i
amVjdElkCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLW1lbWJlci1u
YW1lcy5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1tZW1iZXItbmFt
ZXMuanNvbi1lcnJvcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDUzNzZhNzdhNDUu
LjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLXR5cGUtbWVtYmVyLW5h
bWVzLmpzb24tZXJyb3IKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1FUlJPUjogTWFsZm9y
bWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9uOiB0eXBlIGRlY2xhcmF0aW9uIGZvciBQb2ludCBoYXMg
ZHVwbGljYXRlIG1lbWJlciBuYW1lcwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1lbnVtLXdp
dGgtbm8tdmFsdWVzLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWVudW0td2l0aC1uby12YWx1
ZXMuanNvbi1lcnJvcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjY1NWMyYjkwN2Uu
LjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZW51bS13aXRoLW5vLXZhbHVlcy5qc29u
LWVycm9yCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotRVJST1I6IFR5cGUgcmVmZXJlbmNl
IHdpdGggZW51bSB2YWx1ZXMgbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBlbnVtIHZhbHVlLgpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1ldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1k
ZWJ1Z2dhYmxlVHlwZS5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1ldmVudC10YXJnZXRUeXBl
LW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLWVycm9yCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBiNjVkN2EwZDE5Ni4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFp
bC1vbi1ldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29u
LWVycm9yCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotRVJST1I6IE1hbGZvcm1lZCBkb21h
aW4gc3BlY2lmaWNhdGlvbjogZXZlbnQgRXZlbnQgaGFzIGFuIGl0ZW0gaW4gdGFyZ2V0VHlwZXMg
Ilt1J3dvcmtlciddIiB0aGF0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgYW55IHZhbHVlIGluIGRlYnVn
Z2FibGVUeXBlcyAiW3UnamF2YXNjcmlwdCddIi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24t
ZXZlbnQtdGFyZ2V0VHlwZXMtdHlwZS5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1ldmVudC10
YXJnZXRUeXBlcy10eXBlLmpzb24tZXJyb3IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDc0MDNlMTNhODA5Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWV2ZW50LXRhcmdl
dFR5cGVzLXR5cGUuanNvbi1lcnJvcgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUVSUk9S
OiBNYWxmb3JtZWQgZG9tYWluIHNwZWNpZmljYXRpb246IHRhcmdldFR5cGVzIGZvciBldmVudCBQ
YWdlT25seSBpcyBub3QgYW4gYXJyYXkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZXZlbnQt
dGFyZ2V0VHlwZXMtdmFsdWUuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZXZlbnQtdGFyZ2V0
VHlwZXMtdmFsdWUuanNvbi1lcnJvcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODMw
MTJhOWZlNGUuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlw
ZXMtdmFsdWUuanNvbi1lcnJvcgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUVSUk9SOiBN
YWxmb3JtZWQgZG9tYWluIHNwZWNpZmljYXRpb246IHRhcmdldFR5cGVzIGZvciBldmVudCBQYWdl
T25seSBpcyBhbiB1bnN1cHBvcnRlZCBzdHJpbmcuIFdhczogIlt1J3BhZ2VlJ10iLCBBbGxvd2Vk
IHZhbHVlczogc2VydmljZS13b3JrZXIsIGphdmFzY3JpcHQsIHdvcmtlciwgcGFnZSwgd2ViLXBh
Z2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tbnVtYmVyLXR5cGVkLW9wdGlvbmFsLXBhcmFt
ZXRlci1mbGFnLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRpb25h
bC1wYXJhbWV0ZXItZmxhZy5qc29uLWVycm9yCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA5N2IyYWYwZTQ3ZS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1udW1iZXItdHlw
ZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbi1lcnJvcgorKysgL2Rldi9udWxsCkBAIC0x
ICswLDAgQEAKLUVSUk9SOiBUaGUgJ29wdGlvbmFsJyBmbGFnIGZvciBhIHBhcmFtZXRlciBtdXN0
IGJlIGEgYm9vbGVhbiBsaXRlcmFsLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1udW1iZXIt
dHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tbnVt
YmVyLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24tZXJyb3IKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDg2ZGYzNzUwYzFhLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWls
LW9uLW51bWJlci10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29uLWVycm9yCisrKyAvZGV2
L251bGwKQEAgLTEgKzAsMCBAQAotRVJST1I6IFRoZSAnb3B0aW9uYWwnIGZsYWcgZm9yIGEgdHlw
ZSBtZW1iZXIgbXVzdCBiZSBhIGJvb2xlYW4gbGl0ZXJhbC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2Zh
aWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24tZXJyb3IgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBl
Y3RlZC9mYWlsLW9uLXN0cmluZy10eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29uLWVy
cm9yCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5N2IyYWYwZTQ3ZS4uMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZs
YWcuanNvbi1lcnJvcgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUVSUk9SOiBUaGUgJ29w
dGlvbmFsJyBmbGFnIGZvciBhIHBhcmFtZXRlciBtdXN0IGJlIGEgYm9vbGVhbiBsaXRlcmFsLgpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1i
ZXIuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXR5cGUt
bWVtYmVyLmpzb24tZXJyb3IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2ZGYzNzUw
YzFhLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXN0cmluZy10eXBlZC1vcHRpb25h
bC10eXBlLW1lbWJlci5qc29uLWVycm9yCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotRVJS
T1I6IFRoZSAnb3B0aW9uYWwnIGZsYWcgZm9yIGEgdHlwZSBtZW1iZXIgbXVzdCBiZSBhIGJvb2xl
YW4gbGl0ZXJhbC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS1kZWNsYXJhdGlvbi11
c2luZy10eXBlLXJlZmVyZW5jZS5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi10eXBlLWRlY2xh
cmF0aW9uLXVzaW5nLXR5cGUtcmVmZXJlbmNlLmpzb24tZXJyb3IKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDQyZjU3NTNhNDM5Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9u
LXR5cGUtZGVjbGFyYXRpb24tdXNpbmctdHlwZS1yZWZlcmVuY2UuanNvbi1lcnJvcgorKysgL2Rl
di9udWxsCkBAIC0xICswLDAgQEAKLUVSUk9SOiBUeXBlIHJlZmVyZW5jZSBjYW5ub3QgaGF2ZSBi
b3RoICd0eXBlJyBhbmQgJyRyZWYnIGtleXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXR5
cGUtcmVmZXJlbmNlLWFzLXByaW1pdGl2ZS10eXBlLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9u
LXR5cGUtcmVmZXJlbmNlLWFzLXByaW1pdGl2ZS10eXBlLmpzb24tZXJyb3IKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGQ3NmJjMWM3NzczLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9m
YWlsLW9uLXR5cGUtcmVmZXJlbmNlLWFzLXByaW1pdGl2ZS10eXBlLmpzb24tZXJyb3IKKysrIC9k
ZXYvbnVsbApAQCAtMSArMCwwIEBACi1FUlJPUjogVHlwZSByZWZlcmVuY2UgJ0RhdGFiYXNlSWQn
IGlzIG5vdCBhIHByaW1pdGl2ZSB0eXBlLiBBbGxvd2VkIHZhbHVlczogaW50ZWdlciwgbnVtYmVy
LCBzdHJpbmcsIGJvb2xlYW4sIGVudW0sIG9iamVjdCwgYXJyYXksIGFueQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhw
ZWN0ZWQvZmFpbC1vbi10eXBlLXdpdGgtaW52YWxpZC1wbGF0Zm9ybS5qc29uLWVycm9yIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0
ZWQvZmFpbC1vbi10eXBlLXdpdGgtaW52YWxpZC1wbGF0Zm9ybS5qc29uLWVycm9yCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYzYzNmM1NGI3Yy4uMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0
ZWQvZmFpbC1vbi10eXBlLXdpdGgtaW52YWxpZC1wbGF0Zm9ybS5qc29uLWVycm9yCisrKyAvZGV2
L251bGwKQEAgLTEgKzAsMCBAQAotRVJST1I6IFVua25vd24gcGxhdGZvcm06IGludmFsaWQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS13aXRoLWxvd2VyY2FzZS1uYW1lLmpzb24tZXJy
b3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJp
Yy9leHBlY3RlZC9mYWlsLW9uLXR5cGUtd2l0aC1sb3dlcmNhc2UtbmFtZS5qc29uLWVycm9yCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZTQ2MjI1MGMwYS4uMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMv
ZXhwZWN0ZWQvZmFpbC1vbi10eXBlLXdpdGgtbG93ZXJjYXNlLW5hbWUuanNvbi1lcnJvcgorKysg
L2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUVSUk9SOiBUeXBlcyBtdXN0IGJlZ2luIHdpdGggYW4g
dXBwZXJjYXNlIGNoYXJhY3Rlci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tdW5rbm93bi10
eXBlLXJlZmVyZW5jZS1pbi10eXBlLWRlY2xhcmF0aW9uLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWls
LW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1kZWNsYXJhdGlvbi5qc29uLWVycm9y
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZDM4ZTY0Njc1ZC4uMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVy
aWMvZXhwZWN0ZWQvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtZGVjbGFy
YXRpb24uanNvbi1lcnJvcgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUVSUk9SOiBUeXBl
IHJlZmVyZW5jZSAnZHJhZ29uJyBpcyBub3QgYSBwcmltaXRpdmUgdHlwZS4gQWxsb3dlZCB2YWx1
ZXM6IGludGVnZXIsIG51bWJlciwgc3RyaW5nLCBib29sZWFuLCBlbnVtLCBvYmplY3QsIGFycmF5
LCBhbnkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1p
bi10eXBlLW1lbWJlci5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi11bmtub3duLXR5cGUtcmVm
ZXJlbmNlLWluLXR5cGUtbWVtYmVyLmpzb24tZXJyb3IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGZhZjY2NzJjYmVmLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXVua25v
d24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1tZW1iZXIuanNvbi1lcnJvcgorKysgL2Rldi9udWxs
CkBAIC0xICswLDAgQEAKLUVSUk9SOiBMb29rdXAgZmFpbGVkIGZvciB0eXBlIHJlZmVyZW5jZTog
Q29sb3IgKHJlZmVyZW5jZWQgZnJvbSBkb21haW46IEZhbnRhc3kpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3Rl
ZC9nZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbi1yZXN1bHQgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3Rl
ZC9nZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbi1yZXN1bHQKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5NDZiNTNlM2Y4Li4wMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBl
Y3RlZC9nZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbi1yZXN1bHQKKysr
IC9kZXYvbnVsbApAQCAtMSwxMjQ1ICswLDAgQEAKLSMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JC
YWNrZW5kQ29tbWFuZHMuanMKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5l
cmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0vLyBOZXR3b3JrMQotSW5zcGVjdG9yQmFja2VuZC5y
ZWdpc3RlckRvbWFpbigiTmV0d29yazEiLCBudWxsKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0
ZXJDb21tYW5kKCJOZXR3b3JrMS5sb2FkUmVzb3VyY2UiLCBudWxsLCBbXSwgW10pOwotSW5zcGVj
dG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiTmV0d29yazEiLCBudWxsKTsKLQotLy8gTmV0d29y
azMKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIk5ldHdvcmszIiwgbnVsbCk7Ci1J
bnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnQoIk5ldHdvcmszLnJlc291cmNlTG9hZGVkIiwg
bnVsbCwgW10pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rlck5ldHdvcmszRGlzcGF0Y2hlciA9
IEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEaXNwYXRjaGVyLmJpbmQoSW5zcGVjdG9yQmFja2Vu
ZCwgIk5ldHdvcmszIik7Ci1JbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJOZXR3b3Jr
MyIsIG51bGwpOwotIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLQot
IyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJl
LWd1YXJkcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgotI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7
Ci0KLWNsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2b2lk
IHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRj
aGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9Ci0gICAg
QmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9i
YWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQotcHJpdmF0ZToKLSAgICBSZWZQdHI8QmFja2VuZERp
c3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Ci19OwotCi0KLSNpZiBQTEFURk9STShXRUJf
Q09NTUFORFMpCi1jbGFzcyBBbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyIDogcHVi
bGljIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5B
bHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lk
IGxvYWRSZXNvdXJjZShsb25nIGNhbGxJZCkgPSAwOwotfTsKLSNlbmRpZiAvLyBQTEFURk9STShX
RUJfQ09NTUFORFMpCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jZW5kaWYgLy8gRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jIyMgRW5kIEZpbGU6IFRlc3RB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tl
bmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJh
dGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJv
dG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNw
YWNlIEluc3BlY3RvciB7Ci0KLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCi0jaWYgRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jaWYgUExBVEZPUk0oV0VCX0NP
TU1BTkRTKQotY2xhc3MgQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjsKLSNlbmRp
ZiAvLyBQTEFURk9STShXRUJfQ09NTUFORFMpCi0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0KLSNpZiBQTEFURk9STShXRUJfQ09NTUFORFMpCi1jbGFz
cyBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7Ci1wdWJsaWM6Ci0gICAgdmlydHVh
bCB2b2lkIGxvYWRSZXNvdXJjZShFcnJvclN0cmluZyYpID0gMDsKLXByb3RlY3RlZDoKLSAgICB2
aXJ0dWFsIH5OZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOwotfTsKLSNlbmRpZiAv
LyBQTEFURk9STShXRUJfQ09NTUFORFMpCi0KLSNpZiBQTEFURk9STShXRUJfQ09NTUFORFMpCi1j
bGFzcyBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRh
bEJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE5ldHdvcmsxQmFj
a2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIE5ldHdvcmsxQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwg
Y29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkgZmluYWw7
Ci1wcml2YXRlOgotICAgIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8
SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQotcHVibGljOgotICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0Y2hl
cihBbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVy
KSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KLXByaXZh
dGU6Ci0gICAgQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciogbV9hbHRlcm5hdGVE
aXNwYXRjaGVyIHsgbnVsbHB0ciB9OwotI2VuZGlmCi1wcml2YXRlOgotICAgIE5ldHdvcmsxQmFj
a2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImLCBOZXR3b3JrMUJhY2tlbmREaXNwYXRj
aGVySGFuZGxlciopOwotICAgIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2Fn
ZW50IHsgbnVsbHB0ciB9OwotfTsKLSNlbmRpZiAvLyBQTEFURk9STShXRUJfQ09NTUFORFMpCi0K
LX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3Bh
dGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZl
YXR1cmUtZ3VhcmRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hl
cnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVy
Lmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0
cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNpZiBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXJzLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLSNp
ZiBQTEFURk9STShXRUJfQ09NTUFORFMpCi1OZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxl
cjo6fk5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9Ci0jZW5kaWYgLy8gUExB
VEZPUk0oV0VCX0NPTU1BTkRTKQotCi0jaWYgUExBVEZPUk0oV0VCX0NPTU1BTkRTKQotUmVmPE5l
dHdvcmsxQmFja2VuZERpc3BhdGNoZXI+IE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0
ZShCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIE5ldHdvcmsxQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBOZXR3
b3JrMUJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOwotfQotCi1O
ZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKEJhY2tl
bmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIqIGFnZW50KQotICAgIDogU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFj
a2VuZERpc3BhdGNoZXIpCi0gICAgLCBtX2FnZW50KGFnZW50KQotewotICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbigiTmV0d29yazEiX3MsIHRoaXMp
OwotfQotCi12b2lkIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVx
dWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdl
KQotewotICAgIFJlZjxOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsK
LQotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0
T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRlcnMpOwotCi0gICAgaWYgKG1ldGhvZCA9PSAibG9h
ZFJlc291cmNlIikKLSAgICAgICAgbG9hZFJlc291cmNlKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJh
bWV0ZXJzKSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQ
cm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3Jr
MS4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOwotfQotCi12b2lkIE5ldHdvcmsxQmFj
a2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046
Ok9iamVjdD4mJikKLXsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKLSAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRl
RGlzcGF0Y2hlci0+bG9hZFJlc291cmNlKHJlcXVlc3RJZCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0jZW5kaWYKLQotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmpl
Y3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgbV9hZ2VudC0+bG9hZFJl
c291cmNlKGVycm9yKTsKLQotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0gICAgICAgIG1fYmFj
a2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwg
ZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJv
dG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3Ip
KTsKLX0KLSNlbmRpZiAvLyBQTEFURk9STShXRUJfQ09NTUFORFMpCi0KLX0gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRz
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdt
YSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8d3Rm
L0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNw
YWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEZyb250ZW5kUm91dGVyOwotCi0jaWYgUExBVEZPUk0o
V0VCX0VWRU5UUykKLWNsYXNzIE5ldHdvcmszRnJvbnRlbmREaXNwYXRjaGVyIHsKLSAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBOZXR3b3JrM0Zyb250ZW5kRGlzcGF0
Y2hlcihGcm9udGVuZFJvdXRlciYgZnJvbnRlbmRSb3V0ZXIpIDogbV9mcm9udGVuZFJvdXRlcihm
cm9udGVuZFJvdXRlcikgeyB9Ci0gICAgdm9pZCByZXNvdXJjZUxvYWRlZCgpOwotcHJpdmF0ZToK
LSAgICBGcm9udGVuZFJvdXRlciYgbV9mcm9udGVuZFJvdXRlcjsKLX07Ci0jZW5kaWYgLy8gUExB
VEZPUk0oV0VCX0VWRU5UUykKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZp
bGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9u
dGVuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdl
bmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0jaWYgUExBVEZPUk0oV0VCX0VWRU5UUykKLXZv
aWQgTmV0d29yazNGcm9udGVuZERpc3BhdGNoZXI6OnJlc291cmNlTG9hZGVkKCkKLXsKLSAgICBS
ZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0g
ICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiTmV0d29yazMucmVzb3VyY2VM
b2FkZWQiX3MpOwotCi0gICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2Ut
PnRvSlNPTlN0cmluZygpKTsKLX0KLSNlbmRpZiAvLyBQTEFURk9STShXRUJfRVZFTlRTKQotCi19
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNw
YXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0
dXJlLWd1YXJkcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJv
dG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5hbWVzcGFjZSBJ
bnNwZWN0b3IgewotCi0KLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLS8vIEZvcndhcmQg
ZGVjbGFyYXRpb25zLgotI2lmIFBMQVRGT1JNKFdFQl9UWVBFUykKLW5hbWVzcGFjZSBOZXR3b3Jr
MiB7Ci1jbGFzcyBOZXR3b3JrRXJyb3I7Ci19IC8vIE5ldHdvcmsyCi0jZW5kaWYgLy8gUExBVEZP
Uk0oV0VCX1RZUEVTKQotLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgotCi0KLQotCi0j
aWYgUExBVEZPUk0oV0VCX1RZUEVTKQotbmFtZXNwYWNlIE5ldHdvcmsyIHsKLWNsYXNzIE5ldHdv
cmtFcnJvciA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKLXB1YmxpYzoKLSAgICBlbnVtIHsK
LSAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAotICAgICAgICBNZXNzYWdlU2V0ID0gMSA8PCAwLAot
ICAgICAgICBDb2RlU2V0ID0gMSA8PCAxLAotICAgICAgICBBbGxGaWVsZHNTZXQgPSAoTWVzc2Fn
ZVNldCB8IENvZGVTZXQpCi0gICAgfTsKLQotICAgIHRlbXBsYXRlPGludCBTVEFURT4KLSAgICBj
bGFzcyBCdWlsZGVyIHsKLSAgICBwcml2YXRlOgotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0
PiBtX3Jlc3VsdDsKLQotICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8
IFNURVA+JiBjYXN0U3RhdGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKnJlaW50
ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBCdWlsZGVyKFJlZjwvKk5ldHdvcmtFcnJvciovSlNPTjo6T2JqZWN0PiYmIG9iamVj
dCkKLSAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9j
cmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKLSAgICAgICAgfQotICAgICAgICBmcmllbmQgY2xh
c3MgTmV0d29ya0Vycm9yOwotICAgIHB1YmxpYzoKLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
TWVzc2FnZVNldD4mIHNldE1lc3NhZ2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICAgICAgewot
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE1lc3NhZ2VTZXQpLCBwcm9wZXJ0
eV9tZXNzYWdlX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmco
Im1lc3NhZ2UiX3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TWVzc2Fn
ZVNldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2RlU2V0PiYg
c2V0Q29kZShpbnQgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBDb2RlU2V0KSwgcHJvcGVydHlfY29kZV9hbHJlYWR5X3NldCk7Ci0gICAgICAg
ICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcigiY29kZSJfcywgdmFsdWUpOwotICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxDb2RlU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgUmVmPE5l
dHdvcmtFcnJvcj4gcmVsZWFzZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7Ci0gICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoTmV0d29ya0Vycm9yKSA9PSBzaXplb2YoSlNPTjo6
T2JqZWN0KSwgY2Fubm90X2Nhc3QpOwotCi0gICAgICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiBq
c29uUmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKLSAgICAgICAgICAgIGF1dG8g
cmVzdWx0ID0gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8TmV0d29ya0Vycm9yPio+KCZq
c29uUmVzdWx0KSk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAg
fTsKLQotICAgIC8qCi0gICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgotICAgICAqIFJlZjxO
ZXR3b3JrRXJyb3I+IHJlc3VsdCA9IE5ldHdvcmtFcnJvcjo6Y3JlYXRlKCkKLSAgICAgKiAgICAg
LnNldE1lc3NhZ2UoLi4uKQotICAgICAqICAgICAuc2V0Q29kZSguLi4pCi0gICAgICogICAgIC5y
ZWxlYXNlKCk7Ci0gICAgICovCi0gICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0
ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKSk7Ci0gICAgfQotfTsKLQotfSAvLyBOZXR3b3JrMgotI2VuZGlmIC8vIFBM
QVRGT1JNKFdFQl9UWVBFUykKLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgK
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRz
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLQotI2luY2x1
ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFt
ZXNwYWNlIEluc3BlY3RvciB7Ci0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLQotCi19IC8vIG5h
bWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW5jbHVkZSA8d3RmL1Jl
dGFpblB0ci5oPgotCi1AcHJvdG9jb2wgVGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVy
OwotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0jaWYgUExBVEZPUk0oV0VCX0NPTU1BTkRT
KQotY2xhc3MgT2JqQ0luc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBw
dWJsaWMgQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciB7Ci0gICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgT2JqQ0luc3BlY3Rvck5ldHdvcmsxQmFja2Vu
ZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyPiBoYW5kbGVy
KSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2UobG9uZyBy
ZXF1ZXN0SWQpIGZpbmFsOwotcHJpdmF0ZToKLSAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29s
TmV0d29yazFEb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKLX07Ci0jZW5kaWYgLy8gUExBVEZP
Uk0oV0VCX0NPTU1BTkRTKQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmln
LmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1
ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLQotbmFtZXNwYWNlIElu
c3BlY3RvciB7Ci0KLSNpZiBQTEFURk9STShXRUJfQ09NTUFORFMpCi12b2lkIE9iakNJbnNwZWN0
b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0SWQp
Ci17Ci0gICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGxv
YWRSZXNvdXJjZVdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgewotICAgICAg
ICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFj
a2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmsxLmxvYWRSZXNvdXJjZScg
d2FzIG5vdCBmb3VuZCJfcyk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5k
aW5nRXJyb3JzKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZCBlcnJvckNhbGxi
YWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJF
cnJvciwgZXJyb3IpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vy
cm9ycygpOwotICAgIH07Ci0KLSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpLCBmYWxzZSk7Ci0gICAgfTsKLQotICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJj
ZVdpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3ND
YWxsYmFja107Ci19Ci0KLSNlbmRpZiAvLyBQTEFURk9STShXRUJfQ09NTUFORFMpCi0KLX0gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmRE
aXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
bi5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13
aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgotCi1fX2F0
dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3Rv
Y29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWlu
LCBzZXR0ZXI9c2V0TmV0d29yazFIYW5kbGVyOikgaWQ8VGVzdFByb3RvY29sTmV0d29yazFEb21h
aW5IYW5kbGVyPiBuZXR3b3JrMUhhbmRsZXI7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9u
bHkpIFRlc3RQcm90b2NvbE5ldHdvcmszRG9tYWluRXZlbnREaXNwYXRjaGVyICpuZXR3b3JrM0V2
ZW50RGlzcGF0Y2hlcjsKLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZp
Z3VyYXRpb24uaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5t
bQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0
aC1mZWF0dXJlLWd1YXJkcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKLQotI2ltcG9y
dCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmRE
aXNwYXRjaGVycy5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hh
YmxlQWdlbnQuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9y
Q29udHJvbGxlci5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRl
QmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcnMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGlt
cGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KLXsKLSAgICBBdWdtZW50YWJs
ZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotICAgIGlkPFRlc3RQcm90b2NvbE5l
dHdvcmsxRG9tYWluSGFuZGxlcj4gX25ldHdvcmsxSGFuZGxlcjsKLSAgICBUZXN0UHJvdG9jb2xO
ZXR3b3JrM0RvbWFpbkV2ZW50RGlzcGF0Y2hlciAqX25ldHdvcmszRXZlbnREaXNwYXRjaGVyOwot
fQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3Bl
Y3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwot
ICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxl
cik7Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQot
Ci0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBbX25ldHdvcmsxSGFuZGxlciByZWxlYXNlXTsKLSAg
ICBbX25ldHdvcmszRXZlbnREaXNwYXRjaGVyIHJlbGVhc2VdOwotICAgIFtzdXBlciBkZWFsbG9j
XTsKLX0KLQotLSAodm9pZClzZXROZXR3b3JrMUhhbmRsZXI6KGlkPFRlc3RQcm90b2NvbE5ldHdv
cmsxRG9tYWluSGFuZGxlcj4paGFuZGxlcgotewotICAgIGlmIChoYW5kbGVyID09IF9uZXR3b3Jr
MUhhbmRsZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIFtfbmV0d29yazFIYW5kbGVyIHJlbGVh
c2VdOwotICAgIF9uZXR3b3JrMUhhbmRsZXIgPSBbaGFuZGxlciByZXRhaW5dOwotCi0gICAgYXV0
byBhbHRlcm5hdGVEaXNwYXRjaGVyID0gbWFrZVVuaXF1ZTxPYmpDSW5zcGVjdG9yTmV0d29yazFC
YWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7Ci0gICAgYXV0byBhbHRlcm5hdGVBZ2VudCA9IG1h
a2VVbmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8TmV0d29yazFCYWNrZW5kRGlzcGF0
Y2hlciwgQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4+KCJOZXR3b3JrMSJfcywg
Kl9jb250cm9sbGVyLCBXVEZNb3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIpKTsKLSAgICBfY29udHJv
bGxlci0+YXBwZW5kRXh0cmFBZ2VudChXVEZNb3ZlKGFsdGVybmF0ZUFnZW50KSk7Ci19Ci0KLS0g
KGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4pbmV0d29yazFIYW5kbGVyCi17
Ci0gICAgcmV0dXJuIF9uZXR3b3JrMUhhbmRsZXI7Ci19Ci0KLS0gKFRlc3RQcm90b2NvbE5ldHdv
cmszRG9tYWluRXZlbnREaXNwYXRjaGVyICopbmV0d29yazNFdmVudERpc3BhdGNoZXIKLXsKLSAg
ICBpZiAoIV9uZXR3b3JrM0V2ZW50RGlzcGF0Y2hlcikKLSAgICAgICAgX25ldHdvcmszRXZlbnRE
aXNwYXRjaGVyID0gW1tUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkV2ZW50RGlzcGF0Y2hlciBh
bGxvY10gaW5pdFdpdGhDb250cm9sbGVyOl9jb250cm9sbGVyXTsKLSAgICByZXR1cm4gX25ldHdv
cmszRXZlbnREaXNwYXRjaGVyOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xDb25maWd1cmF0aW9uLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVu
dERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJh
dGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIK
LQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDx3dGYv
SlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW1wbGVtZW50
YXRpb24gVGVzdFByb3RvY29sTmV0d29yazNEb21haW5FdmVudERpc3BhdGNoZXIKLXsKLSAgICBB
dWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotfQotCi0tIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xs
ZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2Vs
ZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2Nv
bnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKXJl
c291cmNlTG9hZGVkCi17Ci0gICAgY29uc3QgRnJvbnRlbmRSb3V0ZXImIHJvdXRlciA9IF9jb250
cm9sbGVyLT5mcm9udGVuZFJvdXRlcigpOwotCi0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1l
c3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJp
bmcoIm1ldGhvZCJfcywgIk5ldHdvcmszLnJlc291cmNlTG9hZGVkIl9zKTsKLSAgICByb3V0ZXIu
c2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Ci19Ci0KLUBlbmQKLQotCi0j
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
Z2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0
aW9uLmg+Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4K
LQotCi1AY2xhc3MgVGVzdFByb3RvY29sTmV0d29yazJOZXR3b3JrRXJyb3I7Ci0KLXR5cGVkZWYg
TlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbFBsYXRmb3JtKSB7Ci0gICAgVGVzdFByb3Rv
Y29sUGxhdGZvcm1BbGwsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljLAotICAgIFRl
c3RQcm90b2NvbFBsYXRmb3JtSU9TLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1MsCi19
OwotCi0KLQotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRl
cmZhY2UgVGVzdFByb3RvY29sTmV0d29yazJOZXR3b3JrRXJyb3IgOiBSV0lQcm90b2NvbEpTT05P
YmplY3QKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0
cmluZyAqLCBpZD4gKilwYXlsb2FkOwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xP
YmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7Ci0tIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZTooaW50KWNvZGU7Ci0v
KiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKm1lc3Nh
Z2U7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQgY29k
ZTsKLUBlbmQKLQotQHByb3RvY29sIFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlciA8
TlNPYmplY3Q+Ci1Ab3B0aW9uYWwKLS0gKHZvaWQpbG9hZFJlc291cmNlV2l0aEVycm9yQ2FsbGJh
Y2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFj
azoodm9pZCheKSh2b2lkKSlzdWNjZXNzQ2FsbGJhY2s7Ci1AZW5kCi0KLV9fYXR0cmlidXRlX18o
KHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xOZXR3b3Jr
M0RvbWFpbkV2ZW50RGlzcGF0Y2hlciA6IE5TT2JqZWN0Ci0tICh2b2lkKXJlc291cmNlTG9hZGVk
OwotQGVuZAotCi0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0
aWJpbGl0eU9iamVjdHMuaD4KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKLSNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgot
I2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xOZXR3
b3JrM0RvbWFpbkV2ZW50RGlzcGF0Y2hlciAoUHJpdmF0ZSkKLS0gKGluc3RhbmNldHlwZSlpbml0
V2l0aENvbnRyb2xsZXI6KEluc3BlY3Rvcjo6QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVy
Kiljb250cm9sbGVyOwotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJu
YWwuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVh
dHVyZS1ndWFyZHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQ
cm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KLU9wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJv
bVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOwotCi1pbmxpbmUgU3RyaW5nIHRv
UHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sUGxhdGZvcm0gdmFsdWUpCi17Ci0gICAgc3dpdGNo
KHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDoKLSAgICAgICAgcmV0
dXJuICJhbGwiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM6Ci0gICAg
ICAgIHJldHVybiAiZ2VuZXJpYyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9T
OgotICAgICAgICByZXR1cm4gImlvcyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3Jt
TWFjT1M6Ci0gICAgICAgIHJldHVybiAibWFjb3MiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+
Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sUGxhdGZvcm0+IGZyb21Qcm90b2NvbFN0cmlu
Zyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiYWxsIikKLSAgICAg
ICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOwotICAgIGlmICh2YWx1ZSA9PSAiZ2Vu
ZXJpYyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM7Ci0gICAg
aWYgKHZhbHVlID09ICJpb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1J
T1M7Ci0gICAgaWYgKHZhbHVlID09ICJtYWNvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9j
b2xQbGF0Zm9ybU1hY09TOwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLQotCi19IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
Lm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13
aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0KLSNp
bXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5o
IgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4K
LQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMgKE5ldHdvcmsyRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZU5ldHdvcmtF
cnJvcjooVGVzdFByb3RvY29sTmV0d29yazJOZXR3b3JrRXJyb3IgKiopb3V0VmFsdWUgZnJvbVBh
eWxvYWQ6KGlkKXBheWxvYWQ7Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucyAoTmV0d29yazJEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlTmV0d29y
a0Vycm9yOihUZXN0UHJvdG9jb2xOZXR3b3JrMk5ldHdvcmtFcnJvciAqKilvdXRWYWx1ZSBmcm9t
UGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUo
cGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IFtbVGVzdFBy
b3RvY29sTmV0d29yazJOZXR3b3JrRXJyb3IgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2Fk
XTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1
YXJkcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNp
bXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9i
amVjdFByaXZhdGUuaD4KLSNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW1wb3J0IDx3dGYv
SlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLUBpbXBsZW1l
bnRhdGlvbiBUZXN0UHJvdG9jb2xOZXR3b3JrMk5ldHdvcmtFcnJvcgotCi0tIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4g
KilwYXlsb2FkCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJl
dHVybiBuaWw7Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBh
eWxvYWRbQCJtZXNzYWdlIl0sIEAibWVzc2FnZSIpOwotICAgIHNlbGYubWVzc2FnZSA9IHBheWxv
YWRbQCJtZXNzYWdlIl07Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BF
UlRZKHBheWxvYWRbQCJjb2RlIl0sIEAiY29kZSIpOwotICAgIHNlbGYuY29kZSA9IFtwYXlsb2Fk
W0AiY29kZSJdIGludGVnZXJWYWx1ZV07Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLS0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilv
YmplY3QKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoSlNPTk9iamVjdDpbb2Jq
ZWN0IHRvSlNPTk9iamVjdF0uZ2V0KCldKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIHJl
dHVybiBzZWxmOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0cmlu
ZyAqKW1lc3NhZ2UgY29kZTooaW50KWNvZGUKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGlu
aXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVR
VUlSRURfUFJPUEVSVFkobWVzc2FnZSwgQCJtZXNzYWdlIik7Ci0KLSAgICBzZWxmLm1lc3NhZ2Ug
PSBtZXNzYWdlOwotICAgIHNlbGYuY29kZSA9IGNvZGU7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0K
LQotLSAodm9pZClzZXRNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UKLXsKLSAgICBbc3VwZXIg
c2V0U3RyaW5nOm1lc3NhZ2UgZm9yS2V5OkAibWVzc2FnZSJdOwotfQotCi0tIChOU1N0cmluZyAq
KW1lc3NhZ2UKLXsKLSAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAIm1lc3NhZ2UiXTsK
LX0KLQotLSAodm9pZClzZXRDb2RlOihpbnQpY29kZQotewotICAgIFtzdXBlciBzZXRJbnRlZ2Vy
OmNvZGUgZm9yS2V5OkAiY29kZSJdOwotfQotCi0tIChpbnQpY29kZQotewotICAgIHJldHVybiBb
c3VwZXIgaW50ZWdlckZvcktleTpAImNvZGUiXTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3NhbWUtdHlwZS1pZC1k
aWZmZXJlbnQtZG9tYWluLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvc2FtZS10eXBlLWlkLWRpZmZlcmVu
dC1kb21haW4uanNvbi1yZXN1bHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5NDAy
MTExMzgyLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRv
bWFpbi5qc29uLXJlc3VsdAorKysgL2Rldi9udWxsCkBAIC0xLDkxNCArMCwwIEBACi0jIyMgQmVn
aW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotIyMjIEVuZCBGaWxlOiBJbnNwZWN0
b3JCYWNrZW5kQ29tbWFuZHMuanMKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUt
dHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCi0j
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotCi1uYW1l
c3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewot
cHVibGljOgotICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNw
YXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlz
cGF0Y2hlcik7IH0KLSAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBj
b25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Ci1wcml2YXRlOgotICAg
IFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKLX07Ci0KLQot
Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVy
cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZl
cmVudC1kb21haW4uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQot
dHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMu
aD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
LSNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jZW5kaWYKLQot
bmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQot
IyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNs
YXNzIEZyb250ZW5kUm91dGVyOwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQg
RmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZy
b250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
c2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVz
dEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1u
YW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBF
bmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xPYmplY3RzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBz
YW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25z
Lmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotbmFtZXNwYWNlIFByb3RvY29sIHsK
LQotCi0KLQotCi0vLyBUeXBlZGVmcy4KLW5hbWVzcGFjZSBSdW50aW1lIHsKLS8qIFVuaXF1ZSBv
YmplY3QgaWRlbnRpZmllci4gKi8KLXR5cGVkZWYgU3RyaW5nIFJlbW90ZU9iamVjdElkOwotfSAv
LyBSdW50aW1lCi0KLW5hbWVzcGFjZSBSdW50aW1lMiB7Ci0vKiBVbmlxdWUgb2JqZWN0IGlkZW50
aWZpZXIuICovCi10eXBlZGVmIFN0cmluZyBSZW1vdGVPYmplY3RJZDsKLX0gLy8gUnVudGltZTIK
LS8vIEVuZCBvZiB0eXBlZGVmcy4KLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3Rz
LmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotCi0jaW5jbHVkZSA8
d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLX0gLy8gbmFtZXNw
YWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xC
YWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNh
bWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4K
LQotCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQg
ImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0K
LSNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLW5hbWVz
cGFjZSBJbnNwZWN0b3IgewotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQ
cm90b2NvbC5oPgotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBp
bnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0Ci1AZW5kCi0KLQot
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbENv
bmZpZ3VyYXRpb24uaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbXBv
cnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRD
b3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW1wb3J0IDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLQotdXNpbmcgbmFt
ZXNwYWNlIEluc3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3Vy
YXRpb24KLXsKLSAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVy
OwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUlu
c3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRd
OwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJv
bGxlcik7Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwot
fQotCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLUBlbmQK
LQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5oIgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3Bl
Y3RvcjsKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0K
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgotLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0Zv
dW5kYXRpb24uaD4KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVj
dC5oPgotCi0KLQotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xQbGF0
Zm9ybSkgewotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsLAotICAgIFRlc3RQcm90b2NvbFBs
YXRmb3JtR2VuZXJpYywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUywKLSAgICBUZXN0UHJv
dG9jb2xQbGF0Zm9ybU1hY09TLAotfTsKLQotCi0KLQotCi0KLQotCi0KLQotI2ltcG9ydCA8V2Vi
SW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgotCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJ
bnRlcm5hbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlk
LWRpZmZlcmVudC1kb21haW4uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2Nv
bEpTT05PYmplY3RQcml2YXRlLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJs
ZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLQot
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5o
IgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgot
Ci1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBl
PgotT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5n
JiB2YWx1ZSk7Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xQ
bGF0Zm9ybSB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQcm90
b2NvbFBsYXRmb3JtQWxsOgotICAgICAgICByZXR1cm4gImFsbCJfczsKLSAgICBjYXNlIFRlc3RQ
cm90b2NvbFBsYXRmb3JtR2VuZXJpYzoKLSAgICAgICAgcmV0dXJuICJnZW5lcmljIl9zOwotICAg
IGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1JT1M6Ci0gICAgICAgIHJldHVybiAiaW9zIl9zOwot
ICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzoKLSAgICAgICAgcmV0dXJuICJtYWNv
cyJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJvdG9j
b2xQbGF0Zm9ybT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0g
ICAgaWYgKHZhbHVlID09ICJhbGwiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZv
cm1BbGw7Ci0gICAgaWYgKHZhbHVlID09ICJnZW5lcmljIikKLSAgICAgICAgcmV0dXJuIFRlc3RQ
cm90b2NvbFBsYXRmb3JtR2VuZXJpYzsKLSAgICBpZiAodmFsdWUgPT0gImlvcyIpCi0gICAgICAg
IHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzsKLSAgICBpZiAodmFsdWUgPT0gIm1hY29z
IikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M7Ci0gICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKLX0KLQotCi0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQot
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0
ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJv
dG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwot
Ci1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoUnVudGltZURvbWFpbikK
LQotKyAodm9pZClfcGFyc2VSZW1vdGVPYmplY3RJZDooTlNTdHJpbmcgKiopb3V0VmFsdWUgZnJv
bVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0KLUBlbmQKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zIChSdW50aW1lMkRvbWFpbikKLQotKyAodm9pZClfcGFyc2VSZW1vdGVPYmpl
Y3RJZDooTlNTdHJpbmcgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0KLUBl
bmQKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoUnVudGlt
ZURvbWFpbikKLQotKyAodm9pZClfcGFyc2VSZW1vdGVPYmplY3RJZDooTlNTdHJpbmcgKiopb3V0
VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9S
X0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IChO
U1N0cmluZyAqKXBheWxvYWQ7Ci19Ci0KLUBlbmQKLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMgKFJ1bnRpbWUyRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZVJlbW90
ZU9iamVjdElkOihOU1N0cmluZyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAot
ewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TU3RyaW5nIGNs
YXNzXSk7Ci0gICAgKm91dFZhbHVlID0gKE5TU3RyaW5nICopcGF5bG9hZDsKLX0KLQotQGVuZAot
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50
ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1w
b3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotI2ltcG9y
dCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5n
IG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotCi0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9zaGFkb3dlZC1vcHRpb25hbC10eXBlLXNl
dHRlcnMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9zaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMu
anNvbi1yZXN1bHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiZGIyZDQxMTlmLi4w
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9zaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNv
bi1yZXN1bHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMTI0ICswLDAgQEAKLSMjIyBCZWdpbiBGaWxl
OiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNr
ZW5kQ29tbWFuZHMuanMKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlz
cGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9w
dGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgotI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLQotbmFtZXNwYWNl
IEluc3BlY3RvciB7Ci0KLWNsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1Ymxp
YzoKLSAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hl
cj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNo
ZXIpOyB9Ci0gICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3Qg
eyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQotcHJpdmF0ZToKLSAgICBSZWZQ
dHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Ci19OwotCi0KLQotCi19
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQotIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERp
c3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUt
c2V0dGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10eXBl
ZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgot
IyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4K
LSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSNp
bmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jZW5kaWYKLQotbmFt
ZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMj
IEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVz
dFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFz
cyBGcm9udGVuZFJvdXRlcjsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZp
bGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9u
dGVuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNo
YWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0
RnJvbnRlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5h
bWVzcGFjZSBJbnNwZWN0b3IgewotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVu
ZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbE9iamVjdHMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNo
YWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25z
Lmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotbmFtZXNwYWNlIFByb3RvY29sIHsK
LQotCi0KLS8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgotbmFtZXNwYWNlIFJ1bnRpbWUgewotY2xh
c3MgS2V5UGF0aDsKLX0gLy8gUnVudGltZQotLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25z
LgotCi0KLQotCi1uYW1lc3BhY2UgVGVzdEhlbHBlcnMgewotCi1TdHJpbmcgZ2V0RW51bUNvbnN0
YW50VmFsdWUoaW50IGNvZGUpOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgZ2V0RW51
bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFsdWUpCi17Ci0gICAgcmV0dXJuIGdldEVudW1Db25zdGFu
dFZhbHVlKHN0YXRpY19jYXN0PGludD4oZW51bVZhbHVlKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IFRlc3RIZWxwZXJzCi0KLW5hbWVzcGFjZSBSdW50aW1lIHsKLS8qIEtleSBwYXRoLiAqLwotY2xh
c3MgS2V5UGF0aCA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKLXB1YmxpYzoKLSAgICAvLyBO
YW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICd0eXBlJyB3aGlsZSBnZW5lcmF0aW5nIEtleVBhdGgu
Ci0gICAgZW51bSBjbGFzcyBUeXBlIHsKLSAgICAgICAgTnVsbCA9IDAsCi0gICAgICAgIFN0cmlu
ZyA9IDEsCi0gICAgICAgIEFycmF5ID0gMiwKLSAgICB9OyAvLyBlbnVtIGNsYXNzIFR5cGUKLSAg
ICBlbnVtIHsKLSAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAotICAgICAgICBUeXBlU2V0ID0gMSA8
PCAwLAotICAgICAgICBBbGxGaWVsZHNTZXQgPSAoVHlwZVNldCkKLSAgICB9OwotCi0gICAgdGVt
cGxhdGU8aW50IFNUQVRFPgotICAgIGNsYXNzIEJ1aWxkZXIgewotICAgIHByaXZhdGU6Ci0gICAg
ICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVzdWx0OwotCi0gICAgICAgIHRlbXBsYXRlPGlu
dCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4q
Pih0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXIoUmVmPC8qS2V5UGF0aCovSlNP
Tjo6T2JqZWN0PiYmIG9iamVjdCkKLSAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmpl
Y3QpKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0Zp
ZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKLSAgICAgICAgfQot
ICAgICAgICBmcmllbmQgY2xhc3MgS2V5UGF0aDsKLSAgICBwdWJsaWM6Ci0KLSAgICAgICAgQnVp
bGRlcjxTVEFURSB8IFR5cGVTZXQ+JiBzZXRUeXBlKFR5cGUgdmFsdWUpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUeXBlU2V0KSwgcHJvcGVydHlfdHlw
ZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ0eXBlIl9z
LCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUo
dmFsdWUpKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VHlwZVNldD4oKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIFJlZjxLZXlQYXRoPiByZWxlYXNlKCkKLSAgICAgICAgewotICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90
X3JlYWR5KTsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihLZXlQYXRoKSA9PSBz
aXplb2YoSlNPTjo6T2JqZWN0KSwgY2Fubm90X2Nhc3QpOwotCi0gICAgICAgICAgICBSZWY8SlNP
Tjo6T2JqZWN0PiBqc29uUmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKLSAgICAg
ICAgICAgIGF1dG8gcmVzdWx0ID0gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8S2V5UGF0
aD4qPigmanNvblJlc3VsdCkpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAg
fQotICAgIH07Ci0KLSAgICAvKgotICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKLSAgICAg
KiBSZWY8S2V5UGF0aD4gcmVzdWx0ID0gS2V5UGF0aDo6Y3JlYXRlKCkKLSAgICAgKiAgICAgLnNl
dFR5cGUoLi4uKQotICAgICAqICAgICAucmVsZWFzZSgpOwotICAgICAqLwotICAgIHN0YXRpYyBC
dWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEJ1aWxk
ZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOwotICAgIH0KLQotICAgIHZv
aWQgc2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgewotICAgICAgICBKU09OOjpP
YmplY3RCYXNlOjpzZXRTdHJpbmcoInN0cmluZyJfcywgdmFsdWUpOwotICAgIH0KLQotICAgIHZv
aWQgc2V0QXJyYXkoUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gdmFsdWUpCi0gICAgewot
ICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRBcnJheSgiYXJyYXkiX3MsIFdURk1vdmUodmFs
dWUpKTsKLSAgICB9Ci19OwotCi19IC8vIFJ1bnRpbWUKLQotCi0KLW5hbWVzcGFjZSBUZXN0SGVs
cGVycyB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFByb3RvY29sRW51bVR5cGU+Ci1PcHRpb25hbDxQ
cm90b2NvbEVudW1UeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJik7
Ci0KLS8vIEVudW1zIGluIHRoZSAnUnVudGltZScgRG9tYWluCi10ZW1wbGF0ZTw+Ci1PcHRpb25h
bDxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlPiBwYXJzZUVudW1W
YWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlw
ZT4oY29uc3QgU3RyaW5nJik7Ci0KLX0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCi0KLX0gLy8g
bmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bE9iamVjdHMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQt
b3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bE9iamVjdHMuaCIKLQotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLW5hbWVzcGFjZSBQcm90
b2NvbCB7Ci0KLW5hbWVzcGFjZSBUZXN0SGVscGVycyB7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBj
b25zdCBlbnVtX2NvbnN0YW50X3ZhbHVlc1tdID0gewotICAgICJudWxsIiwKLSAgICAic3RyaW5n
IiwKLSAgICAiYXJyYXkiLAotfTsKLQotU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBj
b2RlKSB7Ci0gICAgcmV0dXJuIGVudW1fY29uc3RhbnRfdmFsdWVzW2NvZGVdOwotfQotCi0vLyBF
bnVtcyBpbiB0aGUgJ1J1bnRpbWUnIERvbWFpbgotdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVj
dG9yOjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZT4gcGFyc2VFbnVtVmFsdWVGcm9t
U3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6OlR5cGU+KGNvbnN0
IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCi17Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25z
dGFudFZhbHVlc1tdID0gewotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1
bnRpbWU6OktleVBhdGg6OlR5cGU6Ok51bGwsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQ
cm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZTo6U3RyaW5nLAotICAgICAgICAoc2l6ZV90
KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6OlR5cGU6OkFycmF5LAotICAg
IH07Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAzOyArK2kpCi0gICAgICAgIGlmIChwcm90
b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCi0g
ICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6
OlR5cGUpY29uc3RhbnRWYWx1ZXNbaV07Ci0KLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQot
Ci0KLX0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCi0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90
b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xPYmplY3RzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERp
c3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1v
cHRpb25hbC10eXBlLXNldHRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRl
QmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi0KLQot
bmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZp
Zy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNs
dWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLW5hbWVzcGFjZSBJ
bnNwZWN0b3IgewotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24uaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9j
b2wuaD4KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJm
YWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAotQGVuZAotCi0KLSMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbi5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2ltcG9ydCAi
VGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgotCi11c2luZyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yOwotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
bgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci19
Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVj
dG9yQ29udHJvbGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0g
ICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVy
KTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0K
LS0gKHZvaWQpZGVhbGxvYwotewotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotQGVuZAotCi0K
LSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90
b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5o
IgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3Rv
cjsKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLQot
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3Vu
ZGF0aW9uLmg+Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3Qu
aD4KLQotCi1AY2xhc3MgVGVzdFByb3RvY29sUnVudGltZUtleVBhdGg7Ci0KLXR5cGVkZWYgTlNf
RU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbFBsYXRmb3JtKSB7Ci0gICAgVGVzdFByb3RvY29s
UGxhdGZvcm1BbGwsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljLAotICAgIFRlc3RQ
cm90b2NvbFBsYXRmb3JtSU9TLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1MsCi19Owot
Ci0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRo
VHlwZSkgewotICAgIFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZU51bGwsCi0gICAgVGVz
dFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlU3RyaW5nLAotICAgIFRlc3RQcm90b2NvbFJ1bnRp
bWVLZXlQYXRoVHlwZUFycmF5LAotfTsKLQotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgi
ZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sUnVudGltZUtleVBhdGggOiBSV0lQ
cm90b2NvbEpTT05PYmplY3QKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGlj
dGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkOwotLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7Ci0t
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhUeXBlOihUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5
cGUpdHlwZTsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIFRl
c3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZSB0eXBlOwotLyogb3B0aW9uYWwgKi8gQHByb3Bl
cnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICpzdHJpbmc7Ci0vKiBvcHRpb25hbCAqLyBA
cHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNBcnJheS8qPE5TU3RyaW5nPiovICphcnJheTsK
LUBlbmQKLQotCi0KLQotCi0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxk
Q29tcGF0aWJpbGl0eU9iamVjdHMuaD4KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAot
Ci0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKLSNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgot
I2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xJbnRlcm5hbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlv
bmFsLXR5cGUtc2V0dGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9y
L1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsK
LQotdGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgotT3B0aW9uYWw8T2JqQ0VudW1UeXBl
PiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0KLWlubGluZSBTdHJp
bmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xQbGF0Zm9ybSB2YWx1ZSkKLXsKLSAgICBz
d2l0Y2godmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOgotICAgICAg
ICByZXR1cm4gImFsbCJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzoK
LSAgICAgICAgcmV0dXJuICJnZW5lcmljIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZv
cm1JT1M6Ci0gICAgICAgIHJldHVybiAiaW9zIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxh
dGZvcm1NYWNPUzoKLSAgICAgICAgcmV0dXJuICJtYWNvcyJfczsKLSAgICB9Ci19Ci0KLXRlbXBs
YXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xQbGF0Zm9ybT4gZnJvbVByb3RvY29s
U3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJhbGwiKQot
ICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1BbGw7Ci0gICAgaWYgKHZhbHVlID09
ICJnZW5lcmljIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzsK
LSAgICBpZiAodmFsdWUgPT0gImlvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0
Zm9ybUlPUzsKLSAgICBpZiAodmFsdWUgPT0gIm1hY29zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQ
cm90b2NvbFBsYXRmb3JtTWFjT1M7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotCi1p
bmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhU
eXBlIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29s
UnVudGltZUtleVBhdGhUeXBlTnVsbDoKLSAgICAgICAgcmV0dXJuICJudWxsIl9zOwotICAgIGNh
c2UgVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlU3RyaW5nOgotICAgICAgICByZXR1cm4g
InN0cmluZyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZUFycmF5
OgotICAgICAgICByZXR1cm4gImFycmF5Il9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5s
aW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZT4gZnJvbVByb3RvY29s
U3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJudWxsIikK
LSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZU51bGw7Ci0gICAg
aWYgKHZhbHVlID09ICJzdHJpbmciKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUnVudGlt
ZUtleVBhdGhUeXBlU3RyaW5nOwotICAgIGlmICh2YWx1ZSA9PSAiYXJyYXkiKQotICAgICAgICBy
ZXR1cm4gVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlQXJyYXk7Ci0gICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90
b2NvbFR5cGVQYXJzZXIuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05P
YmplY3RQcml2YXRlLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbnRlcmZh
Y2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChSdW50aW1lRG9tYWluKQotCi0rICh2b2lk
KV9wYXJzZUtleVBhdGg6KFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoICoqKW91dFZhbHVlIGZy
b21QYXlsb2FkOihpZClwYXlsb2FkOwotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMgKFJ1bnRpbWVEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlS2V5
UGF0aDooVGVzdFByb3RvY29sUnVudGltZUtleVBhdGggKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6
KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQs
IFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbFJ1
bnRpbWVLZXlQYXRoIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07Ci19Ci0KLUBlbmQK
LQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgotLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJ
bnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNp
bXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0jaW1w
b3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNp
bmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29s
UnVudGltZUtleVBhdGgKLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVs
bCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZAotewotICAgIGlmICghKHNl
bGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AidHlwZSJdLCBAInR5cGUiKTsK
LSAgICBPcHRpb25hbDxUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGU+IHR5cGUgPSBmcm9t
UHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlPihwYXlsb2FkW0Ai
dHlwZSJdKTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9FTlVNX1ZBTFVFKHR5cGUsIEAi
dHlwZSIpOwotICAgIHNlbGYudHlwZSA9IHR5cGUudmFsdWUoKTsKLQotICAgIHNlbGYuc3RyaW5n
ID0gcGF5bG9hZFtAInN0cmluZyJdOwotCi0gICAgc2VsZi5hcnJheSA9IHBheWxvYWRbQCJhcnJh
eSJdOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90
b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopb2JqZWN0Ci17Ci0gICAgaWYgKCEo
c2VsZiA9IFtzdXBlciBpbml0V2l0aEpTT05PYmplY3Q6W29iamVjdCB0b0pTT05PYmplY3RdLmdl
dCgpXSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoVHlwZTooVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBl
KXR5cGUKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJu
IG5pbDsKLQotICAgIHNlbGYudHlwZSA9IHR5cGU7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQot
LSAodm9pZClzZXRUeXBlOihUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGUpdHlwZQotewot
ICAgIFtzdXBlciBzZXRTdHJpbmc6dG9Qcm90b2NvbFN0cmluZyh0eXBlKSBmb3JLZXk6QCJ0eXBl
Il07Ci19Ci0KLS0gKFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZSl0eXBlCi17Ci0gICAg
cmV0dXJuIGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGU+
KFtzdXBlciBzdHJpbmdGb3JLZXk6QCJ0eXBlIl0pLnZhbHVlKCk7Ci19Ci0KLS0gKHZvaWQpc2V0
U3RyaW5nOihOU1N0cmluZyAqKXN0cmluZwotewotICAgIFtzdXBlciBzZXRTdHJpbmc6c3RyaW5n
IGZvcktleTpAInN0cmluZyJdOwotfQotCi0tIChOU1N0cmluZyAqKXN0cmluZwotewotICAgIHJl
dHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAic3RyaW5nIl07Ci19Ci0KLS0gKHZvaWQpc2V0QXJy
YXk6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWFycmF5Ci17Ci0gICAgW3N1cGVyIHNldEpTT05B
cnJheTp0b0pTT05TdHJpbmdBcnJheShhcnJheSkgZm9yS2V5OkAiYXJyYXkiXTsKLX0KLQotLSAo
TlNBcnJheS8qPE5TU3RyaW5nPiovICopYXJyYXkKLXsKLSAgICByZXR1cm4gdG9PYmpDU3RyaW5n
QXJyYXkoW3N1cGVyIEpTT05BcnJheUZvcktleTpAImFycmF5Il0pOwotfQotCi1AZW5kCi0KLQot
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvc2hv
dWxkLXN0cmlwLWNvbW1lbnRzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvc2hvdWxkLXN0cmlwLWNvbW1l
bnRzLmpzb24tcmVzdWx0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YTFmYjdkNGY5
ZC4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24tcmVz
dWx0CisrKyAvZGV2L251bGwKQEAgLTEsODcwICswLDAgQEAKLSMjIyBCZWdpbiBGaWxlOiBJbnNw
ZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBzaG91bGQtc3RyaXAtY29tbWVudHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMK
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNob3VsZC1zdHJpcC1jb21tZW50cy5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25j
ZQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0KLSNpbmNs
dWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yRnJvbnRlbmRSb3V0ZXIuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2b2lkIHNldEJhY2tlbmRE
aXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFj
a2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9Ci0gICAgQmFja2VuZERpc3Bh
dGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0
Y2hlci5nZXQoKTsgfQotcHJpdmF0ZToKLSAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1f
YmFja2VuZERpc3BhdGNoZXI7Ci19OwotCi0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
LQotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotIyMj
IEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHNob3VsZC1zdHJpcC1jb21tZW50cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFBy
b3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVz
cGFjZSBJbnNwZWN0b3IgewotCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQotCi0KLX0g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNo
ZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3Rm
L0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKLSNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgi
Ci0jZW5kaWYKLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHNob3VsZC1zdHJpcC1jb21tZW50cy5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVk
ZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Igewot
Ci1jbGFzcyBGcm9udGVuZFJvdXRlcjsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMg
RW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRl
c3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHNob3VsZC1zdHJpcC1jb21tZW50cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0RnJv
bnRlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
RnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVz
cGFjZSBJbnNwZWN0b3IgewotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBG
aWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbE9iamVjdHMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNob3Vs
ZC1zdHJpcC1jb21tZW50cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5hbWVz
cGFjZSBJbnNwZWN0b3IgewotCi0KLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLQotCi0K
LQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RQcm90
b2NvbE9iamVjdHMuaCIKLQotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLW5hbWVzcGFjZSBQ
cm90b2NvbCB7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaG91bGQtc3RyaXAtY29tbWVudHMuanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW5jbHVk
ZSA8d3RmL1JldGFpblB0ci5oPgotCi0KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2Vu
ZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNw
YXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNob3VsZC1zdHJp
cC1jb21tZW50cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3Bh
dGNoZXJzLmgiCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2luY2x1ZGUg
IlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVz
Lmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
LQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHNob3VsZC1zdHJpcC1jb21tZW50cy5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9U
ZXN0UHJvdG9jb2wuaD4KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkp
Ci1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAotQGVuZAot
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbi5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2ltcG9ydCAi
VGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgotCi11c2luZyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yOwotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
bgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci19
Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVj
dG9yQ29udHJvbGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0g
ICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVy
KTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0K
LS0gKHZvaWQpZGVhbGxvYwotewotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotQGVuZAotCi0K
LSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHNob3VsZC1zdHJpcC1jb21tZW50cy5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVy
bmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9y
dCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0j
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
c2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLSNpbXBv
cnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KLQotCi0KLQotdHlwZWRl
ZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sUGxhdGZvcm0pIHsKLSAgICBUZXN0UHJv
dG9jb2xQbGF0Zm9ybUFsbCwKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWMsCi0gICAg
VGVzdFByb3RvY29sUGxhdGZvcm1JT1MsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUywK
LX07Ci0KLQotCi0KLQotCi0KLQotCi0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2Nv
bEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2wuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNob3VsZC1zdHJpcC1jb21tZW50cy5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90
b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKLSNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2lt
cG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xJbnRlcm5hbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNob3VsZC1zdHJpcC1jb21t
ZW50cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNp
bXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29s
QXJyYXlDb252ZXJzaW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdGVtcGxhdGU8
dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgotT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9j
b2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2Nv
bFN0cmluZyhUZXN0UHJvdG9jb2xQbGF0Zm9ybSB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUp
IHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOgotICAgICAgICByZXR1cm4gImFs
bCJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzoKLSAgICAgICAgcmV0
dXJuICJnZW5lcmljIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1JT1M6Ci0gICAg
ICAgIHJldHVybiAiaW9zIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzoK
LSAgICAgICAgcmV0dXJuICJtYWNvcyJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGlu
ZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xQbGF0Zm9ybT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0
IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJhbGwiKQotICAgICAgICByZXR1
cm4gVGVzdFByb3RvY29sUGxhdGZvcm1BbGw7Ci0gICAgaWYgKHZhbHVlID09ICJnZW5lcmljIikK
LSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzsKLSAgICBpZiAodmFs
dWUgPT0gImlvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzsKLSAg
ICBpZiAodmFsdWUgPT0gIm1hY29zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRm
b3JtTWFjT1M7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgK
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNob3VsZC1zdHJpcC1jb21tZW50cy5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNp
bXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9S
V0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0
b3I7Ci0KLQotCi0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaG91bGQtc3RyaXAtY29tbWVudHMuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIK
LSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0j
aW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQot
dXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJp
bWl0aXZlLXR5cGUuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQt
cHJpbWl0aXZlLXR5cGUuanNvbi1yZXN1bHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGY1NjY2Mzc5Y2E3Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFs
aWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbi1yZXN1bHQKKysrIC9kZXYvbnVsbApAQCAtMSw4OTEg
KzAsMCBAQAotIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1w
cmltaXRpdmUtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0jIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10
eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3By
YWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
LQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQot
Y2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZvaWQgc2V0
QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIp
IHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KLSAgICBCYWNr
ZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tl
bmREaXNwYXRjaGVyLmdldCgpOyB9Ci1wcml2YXRlOgotICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0
Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKLX07Ci0KLQotCi0KLX0gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgotCi0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCi0jIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBl
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdt
YSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXR5cGVkZWYgU3Ry
aW5nIEVycm9yU3RyaW5nOwotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5k
IEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJh
Y2tlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0
eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5o
PgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQot
I2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNlbmRpZgotCi1u
YW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0j
IyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNp
bmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3Rv
ciB7Ci0KLWNsYXNzIEZyb250ZW5kUm91dGVyOwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
LSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAot
Ci0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBl
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdt
YSBvbmNlCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVz
Lmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7
Ci0KLQotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotCi0KLS8vIFR5cGVkZWZzLgotbmFt
ZXNwYWNlIFJ1bnRpbWUgewotLyogVW5pcXVlIG9iamVjdCBpZGVudGlmaWVyLiAqLwotdHlwZWRl
ZiBpbnQgUmVtb3RlT2JqZWN0SWQ7Ci19IC8vIFJ1bnRpbWUKLS8vIEVuZCBvZiB0eXBlZGVmcy4K
LQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLQotI2luY2x1ZGUgPHd0Zi9PcHRpb25h
bC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3Rv
ciB7Ci0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2Nv
bAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xPYmplY3RzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3Bh
dGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0
aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0
ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgot
Ci0KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRp
dmUtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNo
ZXJzLmgiCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2luY2x1ZGUgIlRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+
Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQot
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQg
PFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0
eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBO
U09iamVjdAotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
bi5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXBy
aW1pdGl2ZS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgotCi0jaW1wb3J0ICJU
ZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3Bh
dGNoZXJzLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVB
Z2VudC5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250
cm9sbGVyLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVycy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW1wbGVt
ZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgotewotICAgIEF1Z21lbnRhYmxlSW5z
cGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0
V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxl
cgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICBy
ZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9IGNv
bnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAg
IFtzdXBlciBkZWFsbG9jXTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sQ29uZmlndXJhdGlvbi5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnRE
aXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVj
bGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgi
Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8d3Rm
L0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0jIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1k
ZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9u
Lmg+Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KLQot
Ci0KLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sUGxhdGZvcm0pIHsK
LSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbCwKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdl
bmVyaWMsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1JT1MsCi0gICAgVGVzdFByb3RvY29sUGxh
dGZvcm1NYWNPUywKLX07Ci0KLQotCi0KLQotCi0KLQotCi0KLSNpbXBvcnQgPFdlYkluc3BlY3Rv
ci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4KLQotIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2wuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwu
aAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxp
YXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3Rv
Y29sSlNPTk9iamVjdFByaXZhdGUuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRh
YmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQot
Ci0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRl
c3RQcm90b2NvbC5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252
ZXJzaW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
T2JqQ0VudW1UeXBlPgotT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmco
Y29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhU
ZXN0UHJvdG9jb2xQbGF0Zm9ybSB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBj
YXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOgotICAgICAgICByZXR1cm4gImFsbCJfczsKLSAg
ICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzoKLSAgICAgICAgcmV0dXJuICJnZW5l
cmljIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1JT1M6Ci0gICAgICAgIHJldHVy
biAiaW9zIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzoKLSAgICAgICAg
cmV0dXJuICJtYWNvcyJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25h
bDxUZXN0UHJvdG9jb2xQbGF0Zm9ybT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYg
dmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJhbGwiKQotICAgICAgICByZXR1cm4gVGVzdFBy
b3RvY29sUGxhdGZvcm1BbGw7Ci0gICAgaWYgKHZhbHVlID09ICJnZW5lcmljIikKLSAgICAgICAg
cmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzsKLSAgICBpZiAodmFsdWUgPT0gImlv
cyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzsKLSAgICBpZiAodmFs
dWUgPT0gIm1hY29zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M7
Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0KLSMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZl
LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0j
aW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLQotI2ltcG9ydCAiVGVzdFBy
b3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCi0jaW1wb3J0IDxX
ZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotCi11c2luZyBuYW1l
c3BhY2UgSW5zcGVjdG9yOwotCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cyAoUnVudGltZURvbWFpbikKLQotKyAodm9pZClfcGFyc2VSZW1vdGVPYmplY3RJZDooTlNOdW1i
ZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0KLUBlbmQKLQotQGltcGxl
bWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoUnVudGltZURvbWFpbikKLQot
KyAodm9pZClfcGFyc2VSZW1vdGVPYmplY3RJZDooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBh
eWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBh
eWxvYWQsIFtOU051bWJlciBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IChOU051bWJlciAqKXBh
eWxvYWQ7Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJp
bWl0aXZlLXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2Nv
bEpTT05PYmplY3RQcml2YXRlLmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9y
dCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0K
LQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQv
dHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvdHlwZS1kZWNs
YXJhdGlvbi1hcnJheS10eXBlLmpzb24tcmVzdWx0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBhNGU1YzdlNDA5MS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlv
bi1hcnJheS10eXBlLmpzb24tcmVzdWx0CisrKyAvZGV2L251bGwKQEAgLTEsMTA3MyArMCwwIEBA
Ci0jIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotLy8gRGVidWdnZXIK
LUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIkRlYnVnZ2VyIiwgbnVsbCk7Ci1JbnNw
ZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiRGVidWdnZXIuUmVhc29uIiwge0RpZWQ6ICJEaWVk
IiwgRmFpbnRlZDogIkZhaW50ZWQiLCBIdW5ncnk6ICJIdW5ncnkifSk7Ci1JbnNwZWN0b3JCYWNr
ZW5kLmFjdGl2YXRlRG9tYWluKCJEZWJ1Z2dlciIsIG51bGwpOwotIyMjIEVuZCBGaWxlOiBJbnNw
ZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5
cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgot
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0j
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLQotbmFt
ZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsK
LXB1YmxpYzoKLSAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlz
cGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRp
c3BhdGNoZXIpOyB9Ci0gICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkg
Y29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQotcHJpdmF0ZToKLSAg
ICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Ci19OwotCi0K
LQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hl
cnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24t
YXJyYXktdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10
eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4K
LSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSNp
bmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jZW5kaWYKLQotbmFt
ZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMj
IEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFBy
b3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBG
cm9udGVuZFJvdXRlcjsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6
IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVu
ZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUt
ZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJv
bnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFj
ZSBJbnNwZWN0b3IgewotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxl
OiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbE9iamVjdHMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVj
bGFyYXRpb24tYXJyYXktdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5h
bWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLS8v
IEZvcndhcmQgZGVjbGFyYXRpb25zLgotbmFtZXNwYWNlIERlYnVnZ2VyIHsKLWVudW0gY2xhc3Mg
UmVhc29uOwotfSAvLyBEZWJ1Z2dlcgotLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgot
Ci0KLS8vIFR5cGVkZWZzLgotbmFtZXNwYWNlIERlYnVnZ2VyIHsKLXR5cGVkZWYgaW50IEJyZWFr
cG9pbnRJZDsKLX0gLy8gRGVidWdnZXIKLQotbmFtZXNwYWNlIFJ1bnRpbWUgewotdHlwZWRlZiBp
bnQgT2JqZWN0SWQ7Ci10eXBlZGVmIEpTT046OkFycmF5T2Y8aW50PiBMdWNreU51bWJlcnM7Ci10
eXBlZGVmIEpTT046OkFycmF5T2Y8U3RyaW5nPiBCYWJ5TmFtZXM7Ci10eXBlZGVmIEpTT046OkFy
cmF5T2Y8aW50PiBOZXdPYmplY3RzOwotdHlwZWRlZiBKU09OOjpBcnJheU9mPGludD4gT2xkT2Jq
ZWN0czsKLXR5cGVkZWYgSlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dl
cjo6UmVhc29uPiBTdG9wUmVhc29uczsKLX0gLy8gUnVudGltZQotLy8gRW5kIG9mIHR5cGVkZWZz
LgotCi1uYW1lc3BhY2UgVGVzdEhlbHBlcnMgewotCi1TdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFs
dWUoaW50IGNvZGUpOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgZ2V0RW51bUNvbnN0
YW50VmFsdWUoVCBlbnVtVmFsdWUpCi17Ci0gICAgcmV0dXJuIGdldEVudW1Db25zdGFudFZhbHVl
KHN0YXRpY19jYXN0PGludD4oZW51bVZhbHVlKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFRlc3RI
ZWxwZXJzCi0KLW5hbWVzcGFjZSBEZWJ1Z2dlciB7Ci0vKiAgKi8KLWVudW0gY2xhc3MgUmVhc29u
IHsKLSAgICBEaWVkID0gMCwKLSAgICBGYWludGVkID0gMSwKLSAgICBIdW5ncnkgPSAyLAotfTsg
Ly8gZW51bSBjbGFzcyBSZWFzb24KLX0gLy8gRGVidWdnZXIKLQotCi0KLW5hbWVzcGFjZSBUZXN0
SGVscGVycyB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFByb3RvY29sRW51bVR5cGU+Ci1PcHRpb25h
bDxQcm90b2NvbEVudW1UeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5n
Jik7Ci0KLS8vIEVudW1zIGluIHRoZSAnRGVidWdnZXInIERvbWFpbgotdGVtcGxhdGU8PgotT3B0
aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbj4gcGFyc2VFbnVtVmFs
dWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb24+KGNvbnN0
IFN0cmluZyYpOwotCi19IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwotCi19IC8vIG5hbWVzcGFj
ZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotbmFtZXNwYWNlIFdURiB7
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKLQotLy8gSGFzaCBk
ZWNsYXJhdGlvbnMgaW4gdGhlICdEZWJ1Z2dlcicgRG9tYWluCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3Qg
RGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbj4gewotICAg
IHR5cGVkZWYgSW50SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uPiBI
YXNoOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bE9iamVjdHMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5
cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotCi0jaW5j
bHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1u
YW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotbmFtZXNwYWNl
IFRlc3RIZWxwZXJzIHsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRf
dmFsdWVzW10gPSB7Ci0gICAgIkRpZWQiLAotICAgICJGYWludGVkIiwKLSAgICAiSHVuZ3J5IiwK
LX07Ci0KLVN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgewotICAgIHJldHVy
biBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb2RlXTsKLX0KLQotLy8gRW51bXMgaW4gdGhlICdEZWJ1
Z2dlcicgRG9tYWluCi10ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpE
ZWJ1Z2dlcjo6UmVhc29uPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90
b2NvbDo6RGVidWdnZXI6OlJlYXNvbj4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKLXsK
LSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7Ci0gICAgICAgIChz
aXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbjo6RGllZCwKLSAgICAg
ICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uOjpGYWludGVk
LAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb246
Okh1bmdyeSwKLSAgICB9OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMzsgKytpKQotICAg
ICAgICBpZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRW
YWx1ZXNbaV1dKQotICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1
Z2dlcjo6UmVhc29uKWNvbnN0YW50VmFsdWVzW2ldOwotCi0gICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKLX0KLQotCi19IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwotCi0KLQotfSAvLyBuYW1lc3Bh
Y2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJh
Y2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlw
ZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVy
bmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQot
Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgot
Ci0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25m
aWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5j
bHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotCi1uYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29s
Lmg+Ci0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFj
ZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKLUBlbmQKLQotCi0jIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRp
b24uaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0
ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21l
bnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIElu
c3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KLXsK
LSAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotfQotCi0t
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNv
bnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlm
ICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0g
ICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2
b2lkKWRlYWxsb2MKLXsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLUBlbmQKLQotCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRl
cm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBv
cnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQot
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2wuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgot
Ci0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+Ci0KLQotCi0K
LXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbFBsYXRmb3JtKSB7Ci0gICAg
VGVzdFByb3RvY29sUGxhdGZvcm1BbGwsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmlj
LAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3Jt
TWFjT1MsCi19OwotCi0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbERl
YnVnZ2VyUmVhc29uKSB7Ci0gICAgVGVzdFByb3RvY29sRGVidWdnZXJSZWFzb25EaWVkLAotICAg
IFRlc3RQcm90b2NvbERlYnVnZ2VyUmVhc29uRmFpbnRlZCwKLSAgICBUZXN0UHJvdG9jb2xEZWJ1
Z2dlclJlYXNvbkh1bmdyeSwKLX07Ci0KLQotCi0KLQotCi0KLQotI2ltcG9ydCA8V2ViSW5zcGVj
dG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgotCi0jIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5h
bC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1h
cnJheS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2Jq
ZWN0UHJpdmF0ZS5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0
b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi0KLQotCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0
IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+Ci0KLW5hbWVzcGFj
ZSBJbnNwZWN0b3IgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+Ci1PcHRpb25h
bDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsK
LQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFBsYXRmb3JtIHZh
bHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZv
cm1BbGw6Ci0gICAgICAgIHJldHVybiAiYWxsIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxh
dGZvcm1HZW5lcmljOgotICAgICAgICByZXR1cm4gImdlbmVyaWMiX3M7Ci0gICAgY2FzZSBUZXN0
UHJvdG9jb2xQbGF0Zm9ybUlPUzoKLSAgICAgICAgcmV0dXJuICJpb3MiX3M7Ci0gICAgY2FzZSBU
ZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOgotICAgICAgICByZXR1cm4gIm1hY29zIl9zOwotICAg
IH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFBsYXRmb3Jt
PiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFs
dWUgPT0gImFsbCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDsKLSAg
ICBpZiAodmFsdWUgPT0gImdlbmVyaWMiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxh
dGZvcm1HZW5lcmljOwotICAgIGlmICh2YWx1ZSA9PSAiaW9zIikKLSAgICAgICAgcmV0dXJuIFRl
c3RQcm90b2NvbFBsYXRmb3JtSU9TOwotICAgIGlmICh2YWx1ZSA9PSAibWFjb3MiKQotICAgICAg
ICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzsKLSAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwotfQotCi0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xE
ZWJ1Z2dlclJlYXNvbiB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBjYXNlIFRl
c3RQcm90b2NvbERlYnVnZ2VyUmVhc29uRGllZDoKLSAgICAgICAgcmV0dXJuICJEaWVkIl9zOwot
ICAgIGNhc2UgVGVzdFByb3RvY29sRGVidWdnZXJSZWFzb25GYWludGVkOgotICAgICAgICByZXR1
cm4gIkZhaW50ZWQiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbkh1bmdy
eToKLSAgICAgICAgcmV0dXJuICJIdW5ncnkiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1p
bmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sRGVidWdnZXJSZWFzb24+IGZyb21Qcm90b2NvbFN0
cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiRGllZCIpCi0g
ICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbkRpZWQ7Ci0gICAgaWYgKHZh
bHVlID09ICJGYWludGVkIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERlYnVnZ2VyUmVh
c29uRmFpbnRlZDsKLSAgICBpZiAodmFsdWUgPT0gIkh1bmdyeSIpCi0gICAgICAgIHJldHVybiBU
ZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbkh1bmdyeTsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwotfQotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5
cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5o
IgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQ
YXJzZXIuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2
YXRlLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbnRlcmZhY2UgVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zIChEZWJ1Z2dlckRvbWFpbikKLQotKyAodm9pZClfcGFyc2VC
cmVha3BvaW50SWQ6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2Fk
OwotKyAodm9pZClfcGFyc2VSZWFzb246KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2Fk
OihpZClwYXlsb2FkOwotCi1AZW5kCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucyAoUnVudGltZURvbWFpbikKLQotKyAodm9pZClfcGFyc2VPYmplY3RJZDooTlNOdW1iZXIg
Kiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZUx1Y2t5
TnVtYmVyczooTlNBcnJheS8qPE5TTnVtYmVyPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihp
ZClwYXlsb2FkOwotKyAodm9pZClfcGFyc2VCYWJ5TmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4q
LyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLSsgKHZvaWQpX3BhcnNlTmV3
T2JqZWN0czooTlNBcnJheS8qPE5TTnVtYmVyPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihp
ZClwYXlsb2FkOwotKyAodm9pZClfcGFyc2VPbGRPYmplY3RzOihOU0FycmF5Lyo8TlNOdW1iZXI+
Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZVN0
b3BSZWFzb25zOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6
KGlkKXBheWxvYWQ7Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucyAoRGVidWdnZXJEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlQnJlYWtwb2ludElk
OihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TTnVtYmVyIGNsYXNzXSk7Ci0g
ICAgKm91dFZhbHVlID0gKE5TTnVtYmVyICopcGF5bG9hZDsKLX0KLQotKyAodm9pZClfcGFyc2VS
ZWFzb246KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0g
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3Nd
KTsKLSAgICBPcHRpb25hbDxUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbj4gcmVzdWx0ID0gSW5z
cGVjdG9yOjpmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sRGVidWdnZXJSZWFzb24+KHBh
eWxvYWQpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX0VOVU1fVkFMVUUocmVzdWx0LCBA
IlJlYXNvbiIpOwotICAgICpvdXRWYWx1ZSA9IEAocmVzdWx0LnZhbHVlKCkpOwotfQotCi1AZW5k
Ci1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChSdW50aW1lRG9t
YWluKQotCi0rICh2b2lkKV9wYXJzZU9iamVjdElkOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9t
UGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUo
cGF5bG9hZCwgW05TTnVtYmVyIGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gKE5TTnVtYmVyICop
cGF5bG9hZDsKLX0KLQotKyAodm9pZClfcGFyc2VMdWNreU51bWJlcnM6KE5TQXJyYXkvKjxOU051
bWJlcj4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TQXJyYXkvKjxOU051bWJlcj4qLyBj
bGFzc10pOwotICAgICpvdXRWYWx1ZSA9IChOU0FycmF5Lyo8TlNOdW1iZXI+Ki8gKilwYXlsb2Fk
OwotfQotCi0rICh2b2lkKV9wYXJzZUJhYnlOYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICoq
KW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNBcnJheS8qPE5TU3RyaW5nPiovIGNsYXNzXSk7Ci0g
ICAgKm91dFZhbHVlID0gKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKXBheWxvYWQ7Ci19Ci0KLSsg
KHZvaWQpX3BhcnNlTmV3T2JqZWN0czooTlNBcnJheS8qPE5TTnVtYmVyPiovICoqKW91dFZhbHVl
IGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURf
VFlQRShwYXlsb2FkLCBbTlNBcnJheS8qPE5TTnVtYmVyPiovIGNsYXNzXSk7Ci0gICAgKm91dFZh
bHVlID0gKE5TQXJyYXkvKjxOU051bWJlcj4qLyAqKXBheWxvYWQ7Ci19Ci0KLSsgKHZvaWQpX3Bh
cnNlT2xkT2JqZWN0czooTlNBcnJheS8qPE5TTnVtYmVyPiovICoqKW91dFZhbHVlIGZyb21QYXls
b2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXls
b2FkLCBbTlNBcnJheS8qPE5TTnVtYmVyPiovIGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gKE5T
QXJyYXkvKjxOU051bWJlcj4qLyAqKXBheWxvYWQ7Ci19Ci0KLSsgKHZvaWQpX3BhcnNlU3RvcFJl
YXNvbnM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQp
cGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05T
QXJyYXkvKjxOU1N0cmluZz4qLyBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IChOU0FycmF5Lyo8
TlNTdHJpbmc+Ki8gKilwYXlsb2FkOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJh
dGlvbi1hcnJheS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJv
dG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNp
bXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0K
LQotCi0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9l
eHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5
cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24tcmVzdWx0CmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA4OTc5ZThkYmUyZi4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvdHlwZS1kZWNs
YXJhdGlvbi1lbnVtLXR5cGUuanNvbi1yZXN1bHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMDg2ICsw
LDAgQEAKLSMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLS8vIFJ1bnRp
bWUKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIlJ1bnRpbWUiLCBudWxsKTsKLUlu
c3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJSdW50aW1lLkZhcm1BbmltYWxzIiwge1BpZ3M6
ICJQaWdzIiwgQ293czogIkNvd3MiLCBDYXRzOiAiQ2F0cyIsIEhlbnM6ICJIZW5zIn0pOwotSW5z
cGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIlJ1bnRpbWUuVHdvTGVnZ2VkQW5pbWFscyIsIHtE
dWNrczogIkR1Y2tzIiwgSGVuczogIkhlbnMiLCBDcm93czogIkNyb3dzIiwgRmxhbWluZ29zOiAi
RmxhbWluZ29zIn0pOwotSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiUnVudGltZSIs
IG51bGwpOwotIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNl
Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQotI2luY2x1
ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JGcm9udGVuZFJvdXRlci5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgQWx0
ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZvaWQgc2V0QmFja2VuZERp
c3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNr
ZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KLSAgICBCYWNrZW5kRGlzcGF0
Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRj
aGVyLmdldCgpOyB9Ci1wcml2YXRlOgotICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9i
YWNrZW5kRGlzcGF0Y2hlcjsKLX07Ci0KLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgot
Ci0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jIyMg
RW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRl
c3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1u
YW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KLQot
Ci19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNw
YXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10
eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQot
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5j
bHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKLSNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXJzLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi19IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJz
LmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBv
bmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8d3RmL0pT
T05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNl
IEluc3BlY3RvciB7Ci0KLWNsYXNzIEZyb250ZW5kUm91dGVyOwotCi19IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0
Zi9Bc3NlcnRpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotbmFtZXNwYWNl
IFByb3RvY29sIHsKLQotCi0KLS8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgotbmFtZXNwYWNlIFJ1
bnRpbWUgewotZW51bSBjbGFzcyBGYXJtQW5pbWFsczsKLWVudW0gY2xhc3MgVHdvTGVnZ2VkQW5p
bWFsczsKLX0gLy8gUnVudGltZQotLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgotCi0K
LQotCi1uYW1lc3BhY2UgVGVzdEhlbHBlcnMgewotCi1TdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFs
dWUoaW50IGNvZGUpOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgZ2V0RW51bUNvbnN0
YW50VmFsdWUoVCBlbnVtVmFsdWUpCi17Ci0gICAgcmV0dXJuIGdldEVudW1Db25zdGFudFZhbHVl
KHN0YXRpY19jYXN0PGludD4oZW51bVZhbHVlKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFRlc3RI
ZWxwZXJzCi0KLW5hbWVzcGFjZSBSdW50aW1lIHsKLS8qICAqLwotZW51bSBjbGFzcyBGYXJtQW5p
bWFscyB7Ci0gICAgUGlncyA9IDAsCi0gICAgQ293cyA9IDEsCi0gICAgQ2F0cyA9IDIsCi0gICAg
SGVucyA9IDMsCi19OyAvLyBlbnVtIGNsYXNzIEZhcm1BbmltYWxzCi0vKiAgKi8KLWVudW0gY2xh
c3MgVHdvTGVnZ2VkQW5pbWFscyB7Ci0gICAgRHVja3MgPSA0LAotICAgIEhlbnMgPSAzLAotICAg
IENyb3dzID0gNSwKLSAgICBGbGFtaW5nb3MgPSA2LAotfTsgLy8gZW51bSBjbGFzcyBUd29MZWdn
ZWRBbmltYWxzCi19IC8vIFJ1bnRpbWUKLQotCi0KLW5hbWVzcGFjZSBUZXN0SGVscGVycyB7Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIFByb3RvY29sRW51bVR5cGU+Ci1PcHRpb25hbDxQcm90b2NvbEVu
dW1UeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJik7Ci0KLS8vIEVu
dW1zIGluIHRoZSAnUnVudGltZScgRG9tYWluCi10ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0
b3I6OlByb3RvY29sOjpSdW50aW1lOjpGYXJtQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9tU3Ry
aW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzPihjb25zdCBTdHJp
bmcmKTsKLXRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6
OlR3b0xlZ2dlZEFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlBy
b3RvY29sOjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxzPihjb25zdCBTdHJpbmcmKTsKLQotfSAv
LyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLW5hbWVzcGFjZSBXVEYgewotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Ci0KLS8vIEhhc2ggZGVjbGFyYXRpb25zIGluIHRo
ZSAnUnVudGltZScgRG9tYWluCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVj
dG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM+IHsKLSAgICB0eXBlZGVmIEludEhh
c2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM+IEhhc2g7Ci19Owot
dGVtcGxhdGU8Pgotc3RydWN0IERlZmF1bHRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRp
bWU6OlR3b0xlZ2dlZEFuaW1hbHM+IHsKLSAgICB0eXBlZGVmIEludEhhc2g8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFscz4gSGFzaDsKLX07Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdURgotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsK
LQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKLQotc3Rh
dGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFsdWVzW10gPSB7Ci0gICAgIlBp
Z3MiLAotICAgICJDb3dzIiwKLSAgICAiQ2F0cyIsCi0gICAgIkhlbnMiLAotICAgICJEdWNrcyIs
Ci0gICAgIkNyb3dzIiwKLSAgICAiRmxhbWluZ29zIiwKLX07Ci0KLVN0cmluZyBnZXRFbnVtQ29u
c3RhbnRWYWx1ZShpbnQgY29kZSkgewotICAgIHJldHVybiBlbnVtX2NvbnN0YW50X3ZhbHVlc1tj
b2RlXTsKLX0KLQotLy8gRW51bXMgaW4gdGhlICdSdW50aW1lJyBEb21haW4KLXRlbXBsYXRlPD4K
LU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzPiBwYXJz
ZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFu
aW1hbHM+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCi17Ci0gICAgc3RhdGljIGNvbnN0
IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0gewotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6
UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzOjpQaWdzLAotICAgICAgICAoc2l6ZV90KUlu
c3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzOjpDb3dzLAotICAgICAgICAo
c2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzOjpDYXRzLAot
ICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxz
OjpIZW5zLAotICAgIH07Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCA0OyArK2kpCi0gICAg
ICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZh
bHVlc1tpXV0pCi0gICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRp
bWU6OkZhcm1BbmltYWxzKWNvbnN0YW50VmFsdWVzW2ldOwotCi0gICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKLX0KLQotdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVu
dGltZTo6VHdvTGVnZ2VkQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM+KGNvbnN0IFN0cmluZyYgcHJv
dG9jb2xTdHJpbmcpCi17Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1td
ID0gewotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xl
Z2dlZEFuaW1hbHM6OkR1Y2tzLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6
OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM6OkhlbnMsCi0gICAgICAgIChzaXplX3QpSW5zcGVj
dG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFsczo6Q3Jvd3MsCi0gICAgICAg
IChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFsczo6
RmxhbWluZ29zLAotICAgIH07Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCA0OyArK2kpCi0g
ICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFu
dFZhbHVlc1tpXV0pCi0gICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1
bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHMpY29uc3RhbnRWYWx1ZXNbaV07Ci0KLSAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwotfQotCi0KLX0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCi0KLQotCi19
IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWlu
UHRyLmg+Ci0KLQotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi19IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMu
aAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5
cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1w
b3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5o
IgotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotCi1u
YW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0
UHJvdG9jb2wuaD4KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1A
aW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAotQGVuZAotCi0K
LSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25m
aWd1cmF0aW9uLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW1wb3J0
ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRD
b3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0KLXVzaW5nIG5hbWVz
cGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0
aW9uCi17Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsK
LX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNw
ZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsK
LSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xs
ZXIpOwotICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1cm4gc2VsZjsKLX0K
LQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi1AZW5kCi0K
LQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIK
LSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7
Ci0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0KLSMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9u
Lmg+Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KLQot
Ci0KLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sUGxhdGZvcm0pIHsK
LSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbCwKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdl
bmVyaWMsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1JT1MsCi0gICAgVGVzdFByb3RvY29sUGxh
dGZvcm1NYWNPUywKLX07Ci0KLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3Rv
Y29sUnVudGltZUZhcm1BbmltYWxzKSB7Ci0gICAgVGVzdFByb3RvY29sUnVudGltZUZhcm1Bbmlt
YWxzUGlncywKLSAgICBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHNDb3dzLAotICAgIFRl
c3RQcm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFsc0NhdHMsCi0gICAgVGVzdFByb3RvY29sUnVudGlt
ZUZhcm1BbmltYWxzSGVucywKLX07Ci0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQ
cm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzKSB7Ci0gICAgVGVzdFByb3RvY29sUnVudGlt
ZVR3b0xlZ2dlZEFuaW1hbHNEdWNrcywKLSAgICBUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2Vk
QW5pbWFsc0hlbnMsCi0gICAgVGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHNDcm93
cywKLSAgICBUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFsc0ZsYW1pbmdvcywKLX07
Ci0KLQotCi0KLQotCi0KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRD
b21wYXRpYmlsaXR5T2JqZWN0cy5oPgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCi0jaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBv
cnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLQotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
SW50ZXJuYWwuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
LmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVu
dW0tdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3Rv
Y29sQXJyYXlDb252ZXJzaW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdGVtcGxh
dGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgotT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJv
dG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90
b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xQbGF0Zm9ybSB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFs
dWUpIHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOgotICAgICAgICByZXR1cm4g
ImFsbCJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzoKLSAgICAgICAg
cmV0dXJuICJnZW5lcmljIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1JT1M6Ci0g
ICAgICAgIHJldHVybiAiaW9zIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNP
UzoKLSAgICAgICAgcmV0dXJuICJtYWNvcyJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlu
bGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xQbGF0Zm9ybT4gZnJvbVByb3RvY29sU3RyaW5nKGNv
bnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJhbGwiKQotICAgICAgICBy
ZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1BbGw7Ci0gICAgaWYgKHZhbHVlID09ICJnZW5lcmlj
IikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzsKLSAgICBpZiAo
dmFsdWUgPT0gImlvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzsK
LSAgICBpZiAodmFsdWUgPT0gIm1hY29zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBs
YXRmb3JtTWFjT1M7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotCi1pbmxpbmUgU3Ry
aW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzIHZhbHVl
KQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sUnVudGltZUZh
cm1BbmltYWxzUGlnczoKLSAgICAgICAgcmV0dXJuICJQaWdzIl9zOwotICAgIGNhc2UgVGVzdFBy
b3RvY29sUnVudGltZUZhcm1BbmltYWxzQ293czoKLSAgICAgICAgcmV0dXJuICJDb3dzIl9zOwot
ICAgIGNhc2UgVGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzQ2F0czoKLSAgICAgICAgcmV0
dXJuICJDYXRzIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzSGVu
czoKLSAgICAgICAgcmV0dXJuICJIZW5zIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5s
aW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFscz4gZnJvbVByb3RvY29s
U3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJQaWdzIikK
LSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFsc1BpZ3M7Ci0gICAg
aWYgKHZhbHVlID09ICJDb3dzIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFJ1bnRpbWVG
YXJtQW5pbWFsc0Nvd3M7Ci0gICAgaWYgKHZhbHVlID09ICJDYXRzIikKLSAgICAgICAgcmV0dXJu
IFRlc3RQcm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFsc0NhdHM7Ci0gICAgaWYgKHZhbHVlID09ICJI
ZW5zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFsc0hlbnM7
Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29s
U3RyaW5nKFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzIHZhbHVlKQotewotICAg
IHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFu
aW1hbHNEdWNrczoKLSAgICAgICAgcmV0dXJuICJEdWNrcyJfczsKLSAgICBjYXNlIFRlc3RQcm90
b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzSGVuczoKLSAgICAgICAgcmV0dXJuICJIZW5zIl9z
OwotICAgIGNhc2UgVGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHNDcm93czoKLSAg
ICAgICAgcmV0dXJuICJDcm93cyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFJ1bnRpbWVUd29M
ZWdnZWRBbmltYWxzRmxhbWluZ29zOgotICAgICAgICByZXR1cm4gIkZsYW1pbmdvcyJfczsKLSAg
ICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xSdW50aW1l
VHdvTGVnZ2VkQW5pbWFscz4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUp
Ci17Ci0gICAgaWYgKHZhbHVlID09ICJEdWNrcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9j
b2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFsc0R1Y2tzOwotICAgIGlmICh2YWx1ZSA9PSAiSGVucyIp
Ci0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFsc0hlbnM7
Ci0gICAgaWYgKHZhbHVlID09ICJDcm93cyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xS
dW50aW1lVHdvTGVnZ2VkQW5pbWFsc0Nyb3dzOwotICAgIGlmICh2YWx1ZSA9PSAiRmxhbWluZ29z
IikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzRmxh
bWluZ29zOwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIK
LSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rv
ci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNw
ZWN0b3I7Ci0KLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChSdW50aW1l
RG9tYWluKQotCi0rICh2b2lkKV9wYXJzZUZhcm1BbmltYWxzOihOU051bWJlciAqKilvdXRWYWx1
ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLSsgKHZvaWQpX3BhcnNlVHdvTGVnZ2VkQW5pbWFs
czooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0KLUBlbmQK
LQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoUnVudGltZURv
bWFpbikKLQotKyAodm9pZClfcGFyc2VGYXJtQW5pbWFsczooTlNOdW1iZXIgKiopb3V0VmFsdWUg
ZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9U
WVBFKHBheWxvYWQsIFtOU1N0cmluZyBjbGFzc10pOwotICAgIE9wdGlvbmFsPFRlc3RQcm90b2Nv
bFJ1bnRpbWVGYXJtQW5pbWFscz4gcmVzdWx0ID0gSW5zcGVjdG9yOjpmcm9tUHJvdG9jb2xTdHJp
bmc8VGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzPihwYXlsb2FkKTsKLSAgICBUSFJPV19F
WENFUFRJT05fRk9SX0JBRF9FTlVNX1ZBTFVFKHJlc3VsdCwgQCJGYXJtQW5pbWFscyIpOwotICAg
ICpvdXRWYWx1ZSA9IEAocmVzdWx0LnZhbHVlKCkpOwotfQotCi0rICh2b2lkKV9wYXJzZVR3b0xl
Z2dlZEFuaW1hbHM6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2Fk
Ci17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNTdHJpbmcg
Y2xhc3NdKTsKLSAgICBPcHRpb25hbDxUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFs
cz4gcmVzdWx0ID0gSW5zcGVjdG9yOjpmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sUnVu
dGltZVR3b0xlZ2dlZEFuaW1hbHM+KHBheWxvYWQpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
QkFEX0VOVU1fVkFMVUUocmVzdWx0LCBAIlR3b0xlZ2dlZEFuaW1hbHMiKTsKLSAgICAqb3V0VmFs
dWUgPSBAKHJlc3VsdC52YWx1ZSgpKTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xUeXBlcy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFy
YXRpb24tZW51bS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJv
dG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNp
bXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0K
LQotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVj
dGVkL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC90eXBl
LWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24tcmVzdWx0CmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA0MmU2ZGEyYmJjOC4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvdHlwZS1kZWNs
YXJhdGlvbi1vYmplY3QtdHlwZS5qc29uLXJlc3VsdAorKysgL2Rldi9udWxsCkBAIC0xLDI0NTUg
KzAsMCBAQAotIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5
cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0vLyBE
YXRhYmFzZQotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiRGF0YWJhc2UiLCBudWxs
KTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJEYXRhYmFzZS5Nb3VzZUJ1dHRvbiIs
IHtOb25lOiAiTm9uZSIsIExlZnQ6ICJMZWZ0IiwgTWlkZGxlOiAiTWlkZGxlIiwgUmlnaHQ6ICJS
aWdodCJ9KTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJEYXRhYmFzZS5PcHRpb25h
bFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5Iiwge0xUUjogIkxUUiIsIFJUTDogIlJUTCJ9
KTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJEYXRhYmFzZS5QYXJhbWV0ZXJCdW5k
bGVEaXJlY3Rpb25hbGl0eSIsIHtMVFI6ICJMVFIiLCBSVEw6ICJSVEwifSk7Ci1JbnNwZWN0b3JC
YWNrZW5kLmFjdGl2YXRlRG9tYWluKCJEYXRhYmFzZSIsIG51bGwpOwotIyMjIEVuZCBGaWxlOiBJ
bnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5h
dGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMu
aCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5o
PgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0K
LW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hl
ciB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2Vu
ZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92
ZShkaXNwYXRjaGVyKTsgfQotICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hl
cigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KLXByaXZhdGU6
Ci0gICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwotfTsK
LQotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3Bh
dGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0
aW9uLW9iamVjdC10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgi
Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7
Ci0KLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1
ZXMuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKLSNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jZW5kaWYK
LQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
LQotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUg
IlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQot
Y2xhc3MgRnJvbnRlbmRSb3V0ZXI7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVu
ZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRl
c3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQot
bmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMg
RW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sT2JqZWN0cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
dHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25z
Lmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotbmFtZXNwYWNlIFByb3RvY29sIHsK
LQotCi0KLS8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgotbmFtZXNwYWNlIERhdGFiYXNlIHsKLWNs
YXNzIEVycm9yOwotY2xhc3MgT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU7Ci1jbGFzcyBQYXJhbWV0
ZXJCdW5kbGU7Ci1jbGFzcyBPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzOwotY2xhc3Mg
RHVtbXlPYmplY3Q7Ci1lbnVtIGNsYXNzIE1vdXNlQnV0dG9uOwotfSAvLyBEYXRhYmFzZQotCi1u
YW1lc3BhY2UgVGVzdCB7Ci1jbGFzcyBQYXJhbWV0ZXJCdW5kbGU7Ci19IC8vIFRlc3QKLS8vIEVu
ZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KLQotCi0vLyBUeXBlZGVmcy4KLW5hbWVzcGFjZSBE
YXRhYmFzZSB7Ci10eXBlZGVmIEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0
YWJhc2U6OkVycm9yPiBFcnJvckxpc3Q7Ci19IC8vIERhdGFiYXNlCi0vLyBFbmQgb2YgdHlwZWRl
ZnMuCi0KLW5hbWVzcGFjZSBUZXN0SGVscGVycyB7Ci0KLVN0cmluZyBnZXRFbnVtQ29uc3RhbnRW
YWx1ZShpbnQgY29kZSk7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRFbnVtQ29u
c3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkKLXsKLSAgICByZXR1cm4gZ2V0RW51bUNvbnN0YW50VmFs
dWUoc3RhdGljX2Nhc3Q8aW50PihlbnVtVmFsdWUpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgVGVz
dEhlbHBlcnMKLQotbmFtZXNwYWNlIERhdGFiYXNlIHsKLS8qIERhdGFiYXNlIGVycm9yLiAqLwot
Y2xhc3MgRXJyb3IgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7Ci1wdWJsaWM6Ci0gICAgZW51
bSB7Ci0gICAgICAgIE5vRmllbGRzU2V0ID0gMCwKLSAgICAgICAgTWVzc2FnZVNldCA9IDEgPDwg
MCwKLSAgICAgICAgQ29kZVNldCA9IDEgPDwgMSwKLSAgICAgICAgQWxsRmllbGRzU2V0ID0gKE1l
c3NhZ2VTZXQgfCBDb2RlU2V0KQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+Ci0g
ICAgY2xhc3MgQnVpbGRlciB7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPEpTT046Ok9i
amVjdD4gbV9yZXN1bHQ7Ci0KLSAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RB
VEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICpy
ZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwotICAgICAgICB9
Ci0KLSAgICAgICAgQnVpbGRlcihSZWY8LypFcnJvciovSlNPTjo6T2JqZWN0PiYmIG9iamVjdCkK
LSAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVh
dGVkX2luX25vbl9pbml0X3N0YXRlKTsKLSAgICAgICAgfQotICAgICAgICBmcmllbmQgY2xhc3Mg
RXJyb3I7Ci0gICAgcHVibGljOgotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNZXNzYWdlU2V0
PiYgc2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTWVzc2FnZVNldCksIHByb3BlcnR5X21lc3NhZ2Vf
YWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibWVzc2FnZSJf
cywgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNZXNzYWdlU2V0PigpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvZGVTZXQ+JiBzZXRDb2RlKGlu
dCB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IENvZGVTZXQpLCBwcm9wZXJ0eV9jb2RlX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXRJbnRlZ2VyKCJjb2RlIl9zLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2Fz
dFN0YXRlPENvZGVTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBSZWY8RXJyb3I+IHJlbGVh
c2UoKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxG
aWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwotICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoc2l6ZW9mKEVycm9yKSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0KSwgY2Fubm90X2Nhc3QpOwot
Ci0gICAgICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uUmVzdWx0ID0gbV9yZXN1bHQucmVs
ZWFzZU5vbk51bGwoKTsKLSAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gV1RGTW92ZSgqcmVpbnRl
cnByZXRfY2FzdDxSZWY8RXJyb3I+Kj4oJmpzb25SZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgLyoKLSAgICAgKiBTeW50aGV0aWMg
Y29uc3RydWN0b3I6Ci0gICAgICogUmVmPEVycm9yPiByZXN1bHQgPSBFcnJvcjo6Y3JlYXRlKCkK
LSAgICAgKiAgICAgLnNldE1lc3NhZ2UoLi4uKQotICAgICAqICAgICAuc2V0Q29kZSguLi4pCi0g
ICAgICogICAgIC5yZWxlYXNlKCk7Ci0gICAgICovCi0gICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVs
ZHNTZXQ+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1Nl
dD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7Ci0gICAgfQotfTsKLQotLyogRW51bWVyYXRlcyBk
aWZmZXJlbnQgbW91c2UgYnV0dG9ucyB0aGF0IGNhbiBiZSB1c2VkLiAqLwotZW51bSBjbGFzcyBN
b3VzZUJ1dHRvbiB7Ci0gICAgTm9uZSA9IDAsCi0gICAgTGVmdCA9IDEsCi0gICAgTWlkZGxlID0g
MiwKLSAgICBSaWdodCA9IDMsCi19OyAvLyBlbnVtIGNsYXNzIE1vdXNlQnV0dG9uCi1jbGFzcyBP
cHRpb25hbFBhcmFtZXRlckJ1bmRsZSA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKLXB1Ymxp
YzoKLSAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdkaXJlY3Rpb25hbGl0eScgd2hp
bGUgZ2VuZXJhdGluZyBPcHRpb25hbFBhcmFtZXRlckJ1bmRsZS4KLSAgICBlbnVtIGNsYXNzIERp
cmVjdGlvbmFsaXR5IHsKLSAgICAgICAgTFRSID0gNCwKLSAgICAgICAgUlRMID0gNSwKLSAgICB9
OyAvLyBlbnVtIGNsYXNzIERpcmVjdGlvbmFsaXR5Ci0gICAgZW51bSB7Ci0gICAgICAgIE5vRmll
bGRzU2V0ID0gMCwKLSAgICAgICAgQWxsRmllbGRzU2V0ID0gMAotICAgIH07Ci0KLSAgICB0ZW1w
bGF0ZTxpbnQgU1RBVEU+Ci0gICAgY2xhc3MgQnVpbGRlciB7Ci0gICAgcHJpdmF0ZToKLSAgICAg
ICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7Ci0KLSAgICAgICAgdGVtcGxhdGU8aW50
IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+
KHRoaXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcihSZWY8LypPcHRpb25hbFBhcmFt
ZXRlckJ1bmRsZSovSlNPTjo6T2JqZWN0PiYmIG9iamVjdCkKLSAgICAgICAgICAgIDogbV9yZXN1
bHQoV1RGTW92ZShvYmplY3QpKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VS
VChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRl
KTsKLSAgICAgICAgfQotICAgICAgICBmcmllbmQgY2xhc3MgT3B0aW9uYWxQYXJhbWV0ZXJCdW5k
bGU7Ci0gICAgcHVibGljOgotCi0gICAgICAgIFJlZjxPcHRpb25hbFBhcmFtZXRlckJ1bmRsZT4g
cmVsZWFzZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09
IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7Ci0gICAgICAgICAgICBDT01QSUxF
X0FTU0VSVChzaXplb2YoT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUpID09IHNpemVvZihKU09OOjpP
YmplY3QpLCBjYW5ub3RfY2FzdCk7Ci0KLSAgICAgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IGpz
b25SZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOwotICAgICAgICAgICAgYXV0byBy
ZXN1bHQgPSBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxPcHRpb25hbFBhcmFtZXRlckJ1
bmRsZT4qPigmanNvblJlc3VsdCkpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAg
ICAgfQotICAgIH07Ci0KLSAgICAvKgotICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKLSAg
ICAgKiBSZWY8T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU+IHJlc3VsdCA9IE9wdGlvbmFsUGFyYW1l
dGVyQnVuZGxlOjpjcmVhdGUoKQotICAgICAqICAgICAucmVsZWFzZSgpOwotICAgICAqLwotICAg
IHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOwotICAgIH0K
LQotICAgIHZvaWQgc2V0Q29sdW1uTmFtZXMoUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4g
dmFsdWUpCi0gICAgewotICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRBcnJheSgiY29sdW1u
TmFtZXMiX3MsIFdURk1vdmUodmFsdWUpKTsKLSAgICB9Ci0KLSAgICB2b2lkIHNldEJ1dHRvbnMo
UmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNl
QnV0dG9uPj4gdmFsdWUpCi0gICAgewotICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRBcnJh
eSgiYnV0dG9ucyJfcywgV1RGTW92ZSh2YWx1ZSkpOwotICAgIH0KLQotICAgIHZvaWQgc2V0RGly
ZWN0aW9uYWxpdHkoRGlyZWN0aW9uYWxpdHkgdmFsdWUpCi0gICAgewotICAgICAgICBKU09OOjpP
YmplY3RCYXNlOjpzZXRTdHJpbmcoImRpcmVjdGlvbmFsaXR5Il9zLCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUodmFsdWUpKTsKLSAgICB9Ci0K
LSAgICB2b2lkIHNldE5vdGVzKGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgewotICAgICAgICBK
U09OOjpPYmplY3RCYXNlOjpzZXRTdHJpbmcoIm5vdGVzIl9zLCB2YWx1ZSk7Ci0gICAgfQotCi0g
ICAgdm9pZCBzZXRUaW1lc3RhbXAoZG91YmxlIHZhbHVlKQotICAgIHsKLSAgICAgICAgSlNPTjo6
T2JqZWN0QmFzZTo6c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIHZhbHVlKTsKLSAgICB9Ci0KLSAg
ICB2b2lkIHNldFZhbHVlcyhSZWZQdHI8SlNPTjo6T2JqZWN0PiB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIEpTT046Ok9iamVjdEJhc2U6OnNldE9iamVjdCgidmFsdWVzIl9zLCBXVEZNb3ZlKHZhbHVl
KSk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRQYXlsb2FkKFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFs
dWUpCi0gICAgewotICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRWYWx1ZSgicGF5bG9hZCJf
cywgV1RGTW92ZSh2YWx1ZSkpOwotICAgIH0KLQotICAgIHZvaWQgc2V0RXJyb3IoUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gdmFsdWUpCi0gICAgewotICAgICAg
ICBKU09OOjpPYmplY3RCYXNlOjpzZXRPYmplY3QoImVycm9yIl9zLCBXVEZNb3ZlKHZhbHVlKSk7
Ci0gICAgfQotCi0gICAgdm9pZCBzZXRFcnJvckxpc3QoUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRhdGFiYXNlOjpFcnJvckxpc3Q+IHZhbHVlKQotICAgIHsKLSAgICAgICAgSlNPTjo6T2Jq
ZWN0QmFzZTo6c2V0QXJyYXkoImVycm9yTGlzdCJfcywgV1RGTW92ZSh2YWx1ZSkpOwotICAgIH0K
LX07Ci0KLWNsYXNzIFBhcmFtZXRlckJ1bmRsZSA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsK
LXB1YmxpYzoKLSAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdkaXJlY3Rpb25hbGl0
eScgd2hpbGUgZ2VuZXJhdGluZyBQYXJhbWV0ZXJCdW5kbGUuCi0gICAgZW51bSBjbGFzcyBEaXJl
Y3Rpb25hbGl0eSB7Ci0gICAgICAgIExUUiA9IDQsCi0gICAgICAgIFJUTCA9IDUsCi0gICAgfTsg
Ly8gZW51bSBjbGFzcyBEaXJlY3Rpb25hbGl0eQotICAgIGVudW0gewotICAgICAgICBOb0ZpZWxk
c1NldCA9IDAsCi0gICAgICAgIENvbHVtbk5hbWVzU2V0ID0gMSA8PCAwLAotICAgICAgICBCdXR0
b25zU2V0ID0gMSA8PCAxLAotICAgICAgICBEaXJlY3Rpb25hbGl0eVNldCA9IDEgPDwgMiwKLSAg
ICAgICAgTm90ZXNTZXQgPSAxIDw8IDMsCi0gICAgICAgIFRpbWVzdGFtcFNldCA9IDEgPDwgNCwK
LSAgICAgICAgVmFsdWVzU2V0ID0gMSA8PCA1LAotICAgICAgICBQYXlsb2FkU2V0ID0gMSA8PCA2
LAotICAgICAgICBFcnJvclNldCA9IDEgPDwgNywKLSAgICAgICAgRXJyb3JMaXN0U2V0ID0gMSA8
PCA4LAotICAgICAgICBBbGxGaWVsZHNTZXQgPSAoQ29sdW1uTmFtZXNTZXQgfCBCdXR0b25zU2V0
IHwgRGlyZWN0aW9uYWxpdHlTZXQgfCBOb3Rlc1NldCB8IFRpbWVzdGFtcFNldCB8IFZhbHVlc1Nl
dCB8IFBheWxvYWRTZXQgfCBFcnJvclNldCB8IEVycm9yTGlzdFNldCkKLSAgICB9OwotCi0gICAg
dGVtcGxhdGU8aW50IFNUQVRFPgotICAgIGNsYXNzIEJ1aWxkZXIgewotICAgIHByaXZhdGU6Ci0g
ICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVzdWx0OwotCi0gICAgICAgIHRlbXBsYXRl
PGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RF
UD4qPih0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXIoUmVmPC8qUGFyYW1ldGVy
QnVuZGxlKi9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQotICAgICAgICAgICAgOiBtX3Jlc3VsdChX
VEZNb3ZlKG9iamVjdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNU
QVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwot
ICAgICAgICB9Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBQYXJhbWV0ZXJCdW5kbGU7Ci0gICAgcHVi
bGljOgotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2x1bW5OYW1lc1NldD4mIHNldENvbHVt
bk5hbWVzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IHZhbHVlKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29sdW1uTmFtZXNTZXQpLCBwcm9w
ZXJ0eV9jb2x1bW5OYW1lc19hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0
YXRlPENvbHVtbk5hbWVzU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IEJ1dHRvbnNTZXQ+JiBzZXRCdXR0b25zKFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4+IHZhbHVlKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQnV0dG9uc1NldCksIHByb3BlcnR5
X2J1dHRvbnNfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJi
dXR0b25zIl9zLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEJ1dHRvbnNT
ZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRGlyZWN0aW9uYWxp
dHlTZXQ+JiBzZXREaXJlY3Rpb25hbGl0eShEaXJlY3Rpb25hbGl0eSB2YWx1ZSkKLSAgICAgICAg
ewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIERpcmVjdGlvbmFsaXR5U2V0
KSwgcHJvcGVydHlfZGlyZWN0aW9uYWxpdHlfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldFN0cmluZygiZGlyZWN0aW9uYWxpdHkiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSh2YWx1ZSkpOwotICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxEaXJlY3Rpb25hbGl0eVNldD4oKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBOb3Rlc1NldD4mIHNldE5vdGVzKGNvbnN0IFN0cmluZyYgdmFs
dWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBOb3Rl
c1NldCksIHByb3BlcnR5X25vdGVzX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0
YXRlPE5vdGVzU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IFRp
bWVzdGFtcFNldD4mIHNldFRpbWVzdGFtcChkb3VibGUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUaW1lc3RhbXBTZXQpLCBwcm9wZXJ0eV90
aW1lc3RhbXBfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldERvdWJsZSgi
dGltZXN0YW1wIl9zLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFRpbWVz
dGFtcFNldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBWYWx1ZXNT
ZXQ+JiBzZXRWYWx1ZXMoUmVmUHRyPEpTT046Ok9iamVjdD4gdmFsdWUpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBWYWx1ZXNTZXQpLCBwcm9wZXJ0eV92
YWx1ZXNfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdCgidmFs
dWVzIl9zLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFZhbHVlc1NldD4o
KTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBQYXlsb2FkU2V0PiYgc2V0
UGF5bG9hZChSZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgUGF5bG9hZFNldCksIHByb3BlcnR5X3BheWxvYWRf
YWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFZhbHVlKCJwYXlsb2FkIl9z
LCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFBheWxvYWRTZXQ+KCk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRXJyb3JTZXQ+JiBzZXRFcnJvcihS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiB2YWx1ZSkKLSAgICAg
ICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEVycm9yU2V0KSwgcHJv
cGVydHlfZXJyb3JfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVj
dCgiZXJyb3IiX3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8RXJyb3JT
ZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRXJyb3JMaXN0U2V0
PiYgc2V0RXJyb3JMaXN0KFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJy
b3JMaXN0PiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIEVycm9yTGlzdFNldCksIHByb3BlcnR5X2Vycm9yTGlzdF9hbHJlYWR5X3NldCk7Ci0g
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoImVycm9yTGlzdCJfcywgdmFsdWUpOwotICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxFcnJvckxpc3RTZXQ+KCk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBSZWY8UGFyYW1ldGVyQnVuZGxlPiByZWxlYXNlKCkKLSAgICAgICAgewotICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90
X3JlYWR5KTsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihQYXJhbWV0ZXJCdW5k
bGUpID09IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7Ci0KLSAgICAgICAgICAg
IFJlZjxKU09OOjpPYmplY3Q+IGpzb25SZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgp
OwotICAgICAgICAgICAgYXV0byByZXN1bHQgPSBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJl
ZjxQYXJhbWV0ZXJCdW5kbGU+Kj4oJmpzb25SZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgLyoKLSAgICAgKiBTeW50aGV0aWMgY29u
c3RydWN0b3I6Ci0gICAgICogUmVmPFBhcmFtZXRlckJ1bmRsZT4gcmVzdWx0ID0gUGFyYW1ldGVy
QnVuZGxlOjpjcmVhdGUoKQotICAgICAqICAgICAuc2V0Q29sdW1uTmFtZXMoLi4uKQotICAgICAq
ICAgICAuc2V0QnV0dG9ucyguLi4pCi0gICAgICogICAgIC5zZXREaXJlY3Rpb25hbGl0eSguLi4p
Ci0gICAgICogICAgIC5zZXROb3RlcyguLi4pCi0gICAgICogICAgIC5zZXRUaW1lc3RhbXAoLi4u
KQotICAgICAqICAgICAuc2V0VmFsdWVzKC4uLikKLSAgICAgKiAgICAgLnNldFBheWxvYWQoLi4u
KQotICAgICAqICAgICAuc2V0RXJyb3IoLi4uKQotICAgICAqICAgICAuc2V0RXJyb3JMaXN0KC4u
LikKLSAgICAgKiAgICAgLnJlbGVhc2UoKTsKLSAgICAgKi8KLSAgICBzdGF0aWMgQnVpbGRlcjxO
b0ZpZWxkc1NldD4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmll
bGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKLSAgICB9Ci19OwotCi0vKiBDb25mbGlj
dGVkIG5hbWVzIG1heSBjYXVzZSBnZW5lcmF0ZWQgZ2V0dGVycy9zZXR0ZXJzIHRvIGNsYXNoIHdp
dGggYnVpbHQtaW4gSW5zcGVjdG9yT2JqZWN0IG1ldGhvZHMuICovCi1jbGFzcyBPYmplY3RXaXRo
UHJvcGVydHlOYW1lQ29uZmxpY3RzIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewotcHVibGlj
OgotICAgIGVudW0gewotICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCi0gICAgICAgIEludGVnZXJT
ZXQgPSAxIDw8IDAsCi0gICAgICAgIEFycmF5U2V0ID0gMSA8PCAxLAotICAgICAgICBTdHJpbmdT
ZXQgPSAxIDw8IDIsCi0gICAgICAgIFZhbHVlU2V0ID0gMSA8PCAzLAotICAgICAgICBPYmplY3RT
ZXQgPSAxIDw8IDQsCi0gICAgICAgIEFsbEZpZWxkc1NldCA9IChJbnRlZ2VyU2V0IHwgQXJyYXlT
ZXQgfCBTdHJpbmdTZXQgfCBWYWx1ZVNldCB8IE9iamVjdFNldCkKLSAgICB9OwotCi0gICAgdGVt
cGxhdGU8aW50IFNUQVRFPgotICAgIGNsYXNzIEJ1aWxkZXIgewotICAgIHByaXZhdGU6Ci0gICAg
ICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVzdWx0OwotCi0gICAgICAgIHRlbXBsYXRlPGlu
dCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4q
Pih0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXIoUmVmPC8qT2JqZWN0V2l0aFBy
b3BlcnR5TmFtZUNvbmZsaWN0cyovSlNPTjo6T2JqZWN0PiYmIG9iamVjdCkKLSAgICAgICAgICAg
IDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9p
bml0X3N0YXRlKTsKLSAgICAgICAgfQotICAgICAgICBmcmllbmQgY2xhc3MgT2JqZWN0V2l0aFBy
b3BlcnR5TmFtZUNvbmZsaWN0czsKLSAgICBwdWJsaWM6Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IEludGVnZXJTZXQ+JiBzZXRJbnRlZ2VyKGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBJbnRlZ2VyU2V0KSwgcHJv
cGVydHlfaW50ZWdlcl9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3Ry
aW5nKCJpbnRlZ2VyIl9zLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPElu
dGVnZXJTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQXJyYXlT
ZXQ+JiBzZXRBcnJheShjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQXJyYXlTZXQpLCBwcm9wZXJ0eV9hcnJheV9hbHJl
YWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJhcnJheSJfcywgdmFs
dWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxBcnJheVNldD4oKTsKLSAgICAgICAg
fQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTdHJpbmdTZXQ+JiBzZXRTdHJpbmcoY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIFN0cmluZ1NldCksIHByb3BlcnR5X3N0cmluZ19hbHJlYWR5X3NldCk7Ci0gICAgICAg
ICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJzdHJpbmciX3MsIHZhbHVlKTsKLSAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8U3RyaW5nU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVp
bGRlcjxTVEFURSB8IFZhbHVlU2V0PiYgc2V0VmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAg
ICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFZhbHVlU2V0KSwg
cHJvcGVydHlfdmFsdWVfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0
cmluZygidmFsdWUiX3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VmFs
dWVTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgT2JqZWN0U2V0
PiYgc2V0T2JqZWN0KGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBPYmplY3RTZXQpLCBwcm9wZXJ0eV9vYmplY3RfYWxy
ZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygib2JqZWN0Il9zLCB2
YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE9iamVjdFNldD4oKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIFJlZjxPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzPiByZWxl
YXNlKCkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxs
RmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKLSAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKHNpemVvZihPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzKSA9PSBzaXplb2YoSlNP
Tjo6T2JqZWN0KSwgY2Fubm90X2Nhc3QpOwotCi0gICAgICAgICAgICBSZWY8SlNPTjo6T2JqZWN0
PiBqc29uUmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKLSAgICAgICAgICAgIGF1
dG8gcmVzdWx0ID0gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8T2JqZWN0V2l0aFByb3Bl
cnR5TmFtZUNvbmZsaWN0cz4qPigmanNvblJlc3VsdCkpOwotICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICAvKgotICAgICAqIFN5bnRoZXRpYyBjb25z
dHJ1Y3RvcjoKLSAgICAgKiBSZWY8T2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cz4gcmVz
dWx0ID0gT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0czo6Y3JlYXRlKCkKLSAgICAgKiAg
ICAgLnNldEludGVnZXIoLi4uKQotICAgICAqICAgICAuc2V0QXJyYXkoLi4uKQotICAgICAqICAg
ICAuc2V0U3RyaW5nKC4uLikKLSAgICAgKiAgICAgLnNldFZhbHVlKC4uLikKLSAgICAgKiAgICAg
LnNldE9iamVjdCguLi4pCi0gICAgICogICAgIC5yZWxlYXNlKCk7Ci0gICAgICovCi0gICAgc3Rh
dGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4g
QnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7Ci0gICAgfQotfTsK
LQotfSAvLyBEYXRhYmFzZQotCi1uYW1lc3BhY2UgVGVzdCB7Ci1jbGFzcyBQYXJhbWV0ZXJCdW5k
bGUgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7Ci1wdWJsaWM6Ci0gICAgLy8gTmFtZWQgYWZ0
ZXIgcHJvcGVydHkgbmFtZSAnZGlyZWN0aW9uYWxpdHknIHdoaWxlIGdlbmVyYXRpbmcgUGFyYW1l
dGVyQnVuZGxlLgotICAgIGVudW0gY2xhc3MgRGlyZWN0aW9uYWxpdHkgewotICAgICAgICBMVFIg
PSA0LAotICAgICAgICBSVEwgPSA1LAotICAgIH07IC8vIGVudW0gY2xhc3MgRGlyZWN0aW9uYWxp
dHkKLSAgICBlbnVtIHsKLSAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAotICAgICAgICBEaXJlY3Rp
b25hbGl0eVNldCA9IDEgPDwgMCwKLSAgICAgICAgQnV0dG9uc1NldCA9IDEgPDwgMSwKLSAgICAg
ICAgQ29sdW1uTmFtZXNTZXQgPSAxIDw8IDIsCi0gICAgICAgIE5vdGVzU2V0ID0gMSA8PCAzLAot
ICAgICAgICBUaW1lc3RhbXBTZXQgPSAxIDw8IDQsCi0gICAgICAgIFZhbHVlc1NldCA9IDEgPDwg
NSwKLSAgICAgICAgUGF5bG9hZFNldCA9IDEgPDwgNiwKLSAgICAgICAgRXJyb3JTZXQgPSAxIDw8
IDcsCi0gICAgICAgIEFsbEZpZWxkc1NldCA9IChEaXJlY3Rpb25hbGl0eVNldCB8IEJ1dHRvbnNT
ZXQgfCBDb2x1bW5OYW1lc1NldCB8IE5vdGVzU2V0IHwgVGltZXN0YW1wU2V0IHwgVmFsdWVzU2V0
IHwgUGF5bG9hZFNldCB8IEVycm9yU2V0KQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTxpbnQgU1RB
VEU+Ci0gICAgY2xhc3MgQnVpbGRlciB7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPEpT
T046Ok9iamVjdD4gbV9yZXN1bHQ7Ci0KLSAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxk
ZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcihSZWY8LypQYXJhbWV0ZXJCdW5kbGUqL0pTT046Ok9i
amVjdD4mJiBvYmplY3QpCi0gICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkK
LSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNT
ZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgZnJpZW5kIGNsYXNzIFBhcmFtZXRlckJ1bmRsZTsKLSAgICBwdWJsaWM6Ci0KLSAgICAgICAg
QnVpbGRlcjxTVEFURSB8IERpcmVjdGlvbmFsaXR5U2V0PiYgc2V0RGlyZWN0aW9uYWxpdHkoRGly
ZWN0aW9uYWxpdHkgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBEaXJlY3Rpb25hbGl0eVNldCksIHByb3BlcnR5X2RpcmVjdGlvbmFsaXR5X2Fs
cmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImRpcmVjdGlvbmFs
aXR5Il9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50
VmFsdWUodmFsdWUpKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8RGlyZWN0aW9uYWxp
dHlTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQnV0dG9uc1Nl
dD4mIHNldEJ1dHRvbnMoUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPj4gdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBCdXR0b25zU2V0KSwgcHJvcGVydHlfYnV0dG9uc19hbHJl
YWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoImJ1dHRvbnMiX3MsIHZh
bHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8QnV0dG9uc1NldD4oKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2x1bW5OYW1lc1NldD4mIHNldENvbHVt
bk5hbWVzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IHZhbHVlKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29sdW1uTmFtZXNTZXQpLCBwcm9w
ZXJ0eV9jb2x1bW5OYW1lc19hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0
YXRlPENvbHVtbk5hbWVzU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IE5vdGVzU2V0PiYgc2V0Tm90ZXMoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICAgICAgewot
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE5vdGVzU2V0KSwgcHJvcGVydHlf
bm90ZXNfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibm90
ZXMiX3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Tm90ZXNTZXQ+KCk7
Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVGltZXN0YW1wU2V0PiYgc2V0
VGltZXN0YW1wKGRvdWJsZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoIShTVEFURSAmIFRpbWVzdGFtcFNldCksIHByb3BlcnR5X3RpbWVzdGFtcF9hbHJlYWR5
X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIHZh
bHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VGltZXN0YW1wU2V0PigpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IFZhbHVlc1NldD4mIHNldFZhbHVlcyhS
ZWZQdHI8SlNPTjo6T2JqZWN0PiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoIShTVEFURSAmIFZhbHVlc1NldCksIHByb3BlcnR5X3ZhbHVlc19hbHJlYWR5X3Nl
dCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIHZhbHVlKTsK
LSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VmFsdWVzU2V0PigpOwotICAgICAgICB9Ci0K
LSAgICAgICAgQnVpbGRlcjxTVEFURSB8IFBheWxvYWRTZXQ+JiBzZXRQYXlsb2FkKFJlZlB0cjxK
U09OOjpWYWx1ZT4gdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBQYXlsb2FkU2V0KSwgcHJvcGVydHlfcGF5bG9hZF9hbHJlYWR5X3NldCk7Ci0g
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIHZhbHVlKTsKLSAgICAg
ICAgICAgIHJldHVybiBjYXN0U3RhdGU8UGF5bG9hZFNldD4oKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBFcnJvclNldD4mIHNldEVycm9yKFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRXJyb3JTZXQpLCBwcm9wZXJ0eV9lcnJvcl9hbHJl
YWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJlcnJvciJfcywgdmFs
dWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxFcnJvclNldD4oKTsKLSAgICAgICAg
fQotCi0gICAgICAgIFJlZjxQYXJhbWV0ZXJCdW5kbGU+IHJlbGVhc2UoKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9p
c19ub3RfcmVhZHkpOwotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFBhcmFtZXRl
ckJ1bmRsZSkgPT0gc2l6ZW9mKEpTT046Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsKLQotICAgICAg
ICAgICAgUmVmPEpTT046Ok9iamVjdD4ganNvblJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25O
dWxsKCk7Ci0gICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nh
c3Q8UmVmPFBhcmFtZXRlckJ1bmRsZT4qPigmanNvblJlc3VsdCkpOwotICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICAvKgotICAgICAqIFN5bnRoZXRp
YyBjb25zdHJ1Y3RvcjoKLSAgICAgKiBSZWY8UGFyYW1ldGVyQnVuZGxlPiByZXN1bHQgPSBQYXJh
bWV0ZXJCdW5kbGU6OmNyZWF0ZSgpCi0gICAgICogICAgIC5zZXREaXJlY3Rpb25hbGl0eSguLi4p
Ci0gICAgICogICAgIC5zZXRCdXR0b25zKC4uLikKLSAgICAgKiAgICAgLnNldENvbHVtbk5hbWVz
KC4uLikKLSAgICAgKiAgICAgLnNldE5vdGVzKC4uLikKLSAgICAgKiAgICAgLnNldFRpbWVzdGFt
cCguLi4pCi0gICAgICogICAgIC5zZXRWYWx1ZXMoLi4uKQotICAgICAqICAgICAuc2V0UGF5bG9h
ZCguLi4pCi0gICAgICogICAgIC5zZXRFcnJvciguLi4pCi0gICAgICogICAgIC5yZWxlYXNlKCk7
Ci0gICAgICovCi0gICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCi0gICAg
ewotICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKSk7Ci0gICAgfQotfTsKLQotfSAvLyBUZXN0Ci0KLQotCi1uYW1lc3BhY2UgVGVzdEhlbHBl
cnMgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBQcm90b2NvbEVudW1UeXBlPgotT3B0aW9uYWw8UHJv
dG9jb2xFbnVtVHlwZT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYpOwot
Ci0vLyBFbnVtcyBpbiB0aGUgJ0RhdGFiYXNlJyBEb21haW4KLXRlbXBsYXRlPD4KLU9wdGlvbmFs
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4gcGFyc2VFbnVtVmFs
dWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4o
Y29uc3QgU3RyaW5nJik7Ci10ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29s
OjpEYXRhYmFzZTo6T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5PiBwYXJz
ZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok9wdGlv
bmFsUGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4oY29uc3QgU3RyaW5nJik7Ci10ZW1w
bGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UGFyYW1ldGVy
QnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5Pihj
b25zdCBTdHJpbmcmKTsKLQotLy8gRW51bXMgaW4gdGhlICdUZXN0JyBEb21haW4KLXRlbXBsYXRl
PD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlBhcmFtZXRlckJ1bmRsZTo6
RGlyZWN0aW9uYWxpdHk+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpUZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5Pihjb25zdCBTdHJpbmcm
KTsKLQotfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9j
b2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLW5hbWVzcGFjZSBXVEYgewotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Ci0KLS8vIEhhc2ggZGVjbGFyYXRp
b25zIGluIHRoZSAnRGF0YWJhc2UnIERvbWFpbgotdGVtcGxhdGU8Pgotc3RydWN0IERlZmF1bHRI
YXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4gewotICAgIHR5
cGVkZWYgSW50SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b24+
IEhhc2g7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXVEYKLSMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sT2JqZWN0cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0
LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotCi0j
aW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgot
Ci1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotbmFtZXNw
YWNlIFRlc3RIZWxwZXJzIHsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3Rh
bnRfdmFsdWVzW10gPSB7Ci0gICAgIk5vbmUiLAotICAgICJMZWZ0IiwKLSAgICAiTWlkZGxlIiwK
LSAgICAiUmlnaHQiLAotICAgICJMVFIiLAotICAgICJSVEwiLAotfTsKLQotU3RyaW5nIGdldEVu
dW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7Ci0gICAgcmV0dXJuIGVudW1fY29uc3RhbnRfdmFs
dWVzW2NvZGVdOwotfQotCi0vLyBFbnVtcyBpbiB0aGUgJ0RhdGFiYXNlJyBEb21haW4KLXRlbXBs
YXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRv
bj4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNl
OjpNb3VzZUJ1dHRvbj4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKLXsKLSAgICBzdGF0
aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7Ci0gICAgICAgIChzaXplX3QpSW5z
cGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uOjpOb25lLAotICAgICAgICAo
c2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbjo6TGVmdCwK
LSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0
b246Ok1pZGRsZSwKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFz
ZTo6TW91c2VCdXR0b246OlJpZ2h0LAotICAgIH07Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCA0OyArK2kpCi0gICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3Zh
bHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCi0gICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbiljb25zdGFudFZhbHVlc1tpXTsKLQotICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLXRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9u
YWxpdHk+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5Pihjb25zdCBTdHJp
bmcmIHByb3RvY29sU3RyaW5nKQotewotICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3RhbnRW
YWx1ZXNbXSA9IHsKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFz
ZTo6T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5OjpMVFIsCi0gICAgICAg
IChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok9wdGlvbmFsUGFyYW1ldGVy
QnVuZGxlOjpEaXJlY3Rpb25hbGl0eTo6UlRMLAotICAgIH07Ci0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCAyOyArK2kpCi0gICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0
YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCi0gICAgICAgICAgICByZXR1cm4gKEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0
aW9uYWxpdHkpY29uc3RhbnRWYWx1ZXNbaV07Ci0KLSAgICByZXR1cm4gV1RGOjpudWxsb3B0Owot
fQotCi10ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6
UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5n
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlv
bmFsaXR5Pihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQotewotICAgIHN0YXRpYyBjb25z
dCBzaXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6
OlByb3RvY29sOjpEYXRhYmFzZTo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eTo6TFRS
LAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQYXJhbWV0
ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5OjpSVEwsCi0gICAgfTsKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IDI7ICsraSkKLSAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1fY29u
c3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAgICAgICAgIHJldHVybiAoSW5z
cGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxp
dHkpY29uc3RhbnRWYWx1ZXNbaV07Ci0KLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi0K
LS8vIEVudW1zIGluIHRoZSAnVGVzdCcgRG9tYWluCi10ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNw
ZWN0b3I6OlByb3RvY29sOjpUZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5PiBw
YXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UGFyYW1l
dGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykK
LXsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7Ci0gICAgICAg
IChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UGFyYW1ldGVyQnVuZGxlOjpEaXJl
Y3Rpb25hbGl0eTo6TFRSLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlRl
c3Q6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk6OlJUTCwKLSAgICB9OwotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgMjsgKytpKQotICAgICAgICBpZiAocHJvdG9jb2xTdHJpbmcg
PT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNbaV1dKQotICAgICAgICAgICAg
cmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVj
dGlvbmFsaXR5KWNvbnN0YW50VmFsdWVzW2ldOwotCi0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
LX0KLQotCi19IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwotCi0KLQotfSAvLyBuYW1lc3BhY2Ug
UHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sT2JqZWN0cy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tl
bmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1k
ZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5h
dGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLQot
Ci1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQot
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZp
Zy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNs
dWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLW5hbWVzcGFjZSBJ
bnNwZWN0b3IgewotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24uaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29s
Lmg+Ci0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFj
ZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKLUBlbmQKLQotCi0jIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0
aW9uLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW1wb3J0ICJUZXN0
UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0Fs
dGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdt
ZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJ
bnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCi17
Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKLX0KLQot
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JD
b250cm9sbGVyKiljb250cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBp
ZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIpOwot
ICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAo
dm9pZClkZWFsbG9jCi17Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi1AZW5kCi0KLQotIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbElu
dGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2lt
cG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQot
Ci0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5o
PgotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+Ci0KLQot
QGNsYXNzIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I7Ci1AY2xhc3MgVGVzdFByb3RvY29sRGF0
YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTsKLUBjbGFzcyBUZXN0UHJvdG9jb2xEYXRhYmFz
ZVBhcmFtZXRlckJ1bmRsZTsKLUBjbGFzcyBUZXN0UHJvdG9jb2xEYXRhYmFzZU9iamVjdFdpdGhQ
cm9wZXJ0eU5hbWVDb25mbGljdHM7Ci1AY2xhc3MgVGVzdFByb3RvY29sRGF0YWJhc2VEdW1teU9i
amVjdDsKLUBjbGFzcyBUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlOwotCi10eXBlZGVm
IE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xQbGF0Zm9ybSkgewotICAgIFRlc3RQcm90
b2NvbFBsYXRmb3JtQWxsLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYywKLSAgICBU
ZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TLAot
fTsKLQotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xEYXRhYmFzZU1v
dXNlQnV0dG9uKSB7Ci0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VNb3VzZUJ1dHRvbk5vbmUsCi0g
ICAgVGVzdFByb3RvY29sRGF0YWJhc2VNb3VzZUJ1dHRvbkxlZnQsCi0gICAgVGVzdFByb3RvY29s
RGF0YWJhc2VNb3VzZUJ1dHRvbk1pZGRsZSwKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNl
QnV0dG9uUmlnaHQsCi19OwotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9j
b2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHkpIHsKLSAgICBU
ZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHlM
VFIsCi0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZURpcmVj
dGlvbmFsaXR5UlRMLAotfTsKLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3Rv
Y29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSkgewotICAgIFRlc3RQcm90
b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHlMVFIsCi0gICAgVGVzdFBy
b3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eVJUTCwKLX07Ci0KLXR5
cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVE
aXJlY3Rpb25hbGl0eSkgewotICAgIFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJl
Y3Rpb25hbGl0eUxUUiwKLSAgICBUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlRGlyZWN0
aW9uYWxpdHlSVEwsCi19OwotCi0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0
IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIDogUldJUHJvdG9jb2xK
U09OT2JqZWN0Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8
TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3Rv
Y29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OwotLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlIGNvZGU6KGludCljb2Rl
OwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICpt
ZXNzYWdlOwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgaW50
IGNvZGU7Ci1AZW5kCi0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQot
QGludGVyZmFjZSBUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlIDog
UldJUHJvdG9jb2xKU09OT2JqZWN0Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihO
U0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKLS0gKGluc3RhbmNldHlwZSlp
bml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0
OwotLyogb3B0aW9uYWwgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TQXJyYXkvKjxO
U1N0cmluZz4qLyAqY29sdW1uTmFtZXM7Ci0vKiBvcHRpb25hbCAqLyBAcHJvcGVydHkgKG5vbmF0
b21pYywgY29weSkgTlNBcnJheS8qPE5TU3RyaW5nPiovICpidXR0b25zOwotLyogb3B0aW9uYWwg
Ki8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgVGVzdFByb3RvY29sRGF0YWJhc2VPcHRp
b25hbFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5IGRpcmVjdGlvbmFsaXR5OwotLyogb3B0
aW9uYWwgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICpub3RlczsKLS8q
IG9wdGlvbmFsICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGRvdWJsZSB0aW1lc3Rh
bXA7Ci0vKiBvcHRpb25hbCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluKSBSV0lQcm90
b2NvbEpTT05PYmplY3QgKnZhbHVlczsKLS8qIG9wdGlvbmFsICovIEBwcm9wZXJ0eSAobm9uYXRv
bWljLCByZXRhaW4pIFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5bG9hZDsKLS8qIG9wdGlvbmFs
ICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIFRlc3RQcm90b2NvbERhdGFiYXNlRXJy
b3IgKmVycm9yOwotLyogb3B0aW9uYWwgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5T
QXJyYXkvKjxUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yPiovICplcnJvckxpc3Q7Ci1AZW5kCi0K
LV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0
UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZSA6IFJXSVByb3RvY29sSlNPTk9iamVjdAot
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICos
IGlkPiAqKXBheWxvYWQ7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDoo
UldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKLS0gKGluc3RhbmNldHlwZSlpbml0
V2l0aENvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcyBidXR0
b25zOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilidXR0b25zIGRpcmVjdGlvbmFsaXR5OihUZXN0
UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5KWRpcmVjdGlvbmFs
aXR5IG5vdGVzOihOU1N0cmluZyAqKW5vdGVzIHRpbWVzdGFtcDooZG91YmxlKXRpbWVzdGFtcCB2
YWx1ZXM6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcyBwYXlsb2FkOihSV0lQcm90b2Nv
bEpTT05PYmplY3QgKilwYXlsb2FkIGVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICop
ZXJyb3IgZXJyb3JMaXN0OihOU0FycmF5Lyo8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4qLyAq
KWVycm9yTGlzdDsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBO
U0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmNvbHVtbk5hbWVzOwotLyogcmVxdWlyZWQgKi8gQHByb3Bl
cnR5IChub25hdG9taWMsIGNvcHkpIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqYnV0dG9uczsKLS8q
IHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIFRlc3RQcm90b2NvbERh
dGFiYXNlUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHkgZGlyZWN0aW9uYWxpdHk7Ci0vKiBy
ZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKm5vdGVzOwot
LyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgZG91YmxlIHRpbWVz
dGFtcDsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIFJXSVBy
b3RvY29sSlNPTk9iamVjdCAqdmFsdWVzOwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25h
dG9taWMsIHJldGFpbikgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkOwotLyogcmVxdWly
ZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgVGVzdFByb3RvY29sRGF0YWJhc2VF
cnJvciAqZXJyb3I7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkg
TlNBcnJheS8qPFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I+Ki8gKmVycm9yTGlzdDsKLUBlbmQK
LQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRl
c3RQcm90b2NvbERhdGFiYXNlT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cyA6IFJXSVBy
b3RvY29sSlNPTk9iamVjdAotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0
aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQ7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKLS0g
KGluc3RhbmNldHlwZSlpbml0V2l0aEludGVnZXI6KE5TU3RyaW5nICopaW50ZWdlciBhcnJheToo
TlNTdHJpbmcgKilhcnJheSBzdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nIHZhbHVlOihOU1N0cmlu
ZyAqKXZhbHVlIG9iamVjdDooTlNTdHJpbmcgKilvYmplY3Q7Ci0vKiByZXF1aXJlZCAqLyBAcHJv
cGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKmludGVnZXI7Ci0vKiByZXF1aXJlZCAq
LyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKmFycmF5OwotLyogcmVxdWly
ZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICpzdHJpbmc7Ci0vKiBy
ZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKnZhbHVlOwot
LyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICpvYmpl
Y3Q7Ci1AZW5kCi0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGlu
dGVyZmFjZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUR1bW15T2JqZWN0IDogUldJUHJvdG9jb2xKU09O
T2JqZWN0Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNT
dHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29s
T2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OwotQGVuZAotCi1fX2F0
dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3Rv
Y29sVGVzdFBhcmFtZXRlckJ1bmRsZSA6IFJXSVByb3RvY29sSlNPTk9iamVjdAotLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBh
eWxvYWQ7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9j
b2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aERpcmVj
dGlvbmFsaXR5OihUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHkp
ZGlyZWN0aW9uYWxpdHkgYnV0dG9uczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopYnV0dG9ucyBj
b2x1bW5OYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMgbm90ZXM6KE5T
U3RyaW5nICopbm90ZXMgdGltZXN0YW1wOihkb3VibGUpdGltZXN0YW1wIHZhbHVlczooUldJUHJv
dG9jb2xKU09OT2JqZWN0ICopdmFsdWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAq
KXBheWxvYWQgZXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKillcnJvcjsKLS8qIHJl
cXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIFRlc3RQcm90b2NvbFRlc3RQ
YXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSBkaXJlY3Rpb25hbGl0eTsKLS8qIHJlcXVpcmVk
ICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmJ1
dHRvbnM7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNBcnJh
eS8qPE5TU3RyaW5nPiovICpjb2x1bW5OYW1lczsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAo
bm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqbm90ZXM7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVy
dHkgKG5vbmF0b21pYywgYXNzaWduKSBkb3VibGUgdGltZXN0YW1wOwotLyogcmVxdWlyZWQgKi8g
QHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgUldJUHJvdG9jb2xKU09OT2JqZWN0ICp2YWx1
ZXM7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluKSBSV0lQcm90
b2NvbEpTT05PYmplY3QgKnBheWxvYWQ7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0
b21pYywgcmV0YWluKSBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICplcnJvcjsKLUBlbmQKLQot
Ci0KLQotCi0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJp
bGl0eU9iamVjdHMuaD4KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIK
LSNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCi0jaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPHd0
Zi9KU09OVmFsdWVzLmg+Ci0KLQotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJu
YWwuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10
eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2lt
cG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xB
cnJheUNvbnZlcnNpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBPYmpDRW51bVR5cGU+Ci1PcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2Nv
bFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29s
U3RyaW5nKFRlc3RQcm90b2NvbFBsYXRmb3JtIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkg
ewotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1BbGw6Ci0gICAgICAgIHJldHVybiAiYWxs
Il9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOgotICAgICAgICByZXR1
cm4gImdlbmVyaWMiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzoKLSAgICAg
ICAgcmV0dXJuICJpb3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOgot
ICAgICAgICByZXR1cm4gIm1hY29zIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5l
IE9wdGlvbmFsPFRlc3RQcm90b2NvbFBsYXRmb3JtPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gImFsbCIpCi0gICAgICAgIHJldHVy
biBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDsKLSAgICBpZiAodmFsdWUgPT0gImdlbmVyaWMiKQot
ICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOwotICAgIGlmICh2YWx1
ZSA9PSAiaW9zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOwotICAg
IGlmICh2YWx1ZSA9PSAibWFjb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZv
cm1NYWNPUzsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi0KLWlubGluZSBTdHJpbmcg
dG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9uIHZhbHVlKQot
ewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VNb3Vz
ZUJ1dHRvbk5vbmU6Ci0gICAgICAgIHJldHVybiAiTm9uZSJfczsKLSAgICBjYXNlIFRlc3RQcm90
b2NvbERhdGFiYXNlTW91c2VCdXR0b25MZWZ0OgotICAgICAgICByZXR1cm4gIkxlZnQiX3M7Ci0g
ICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9uTWlkZGxlOgotICAgICAgICBy
ZXR1cm4gIk1pZGRsZSJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VCdXR0
b25SaWdodDoKLSAgICAgICAgcmV0dXJuICJSaWdodCJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRl
PD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9uPiBmcm9t
UHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0g
Ik5vbmUiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VNb3VzZUJ1dHRvbk5v
bmU7Ci0gICAgaWYgKHZhbHVlID09ICJMZWZ0IikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2Nv
bERhdGFiYXNlTW91c2VCdXR0b25MZWZ0OwotICAgIGlmICh2YWx1ZSA9PSAiTWlkZGxlIikKLSAg
ICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VCdXR0b25NaWRkbGU7Ci0gICAg
aWYgKHZhbHVlID09ICJSaWdodCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFz
ZU1vdXNlQnV0dG9uUmlnaHQ7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotaW5saW5l
IFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJh
bWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsK
LSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGVEaXJl
Y3Rpb25hbGl0eUxUUjoKLSAgICAgICAgcmV0dXJuICJMVFIiX3M7Ci0gICAgY2FzZSBUZXN0UHJv
dG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHlSVEw6Ci0g
ICAgICAgIHJldHVybiAiUlRMIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9w
dGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rp
b25hbGl0eT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAg
aWYgKHZhbHVlID09ICJMVFIiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VP
cHRpb25hbFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5TFRSOwotICAgIGlmICh2YWx1ZSA9
PSAiUlRMIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJh
bWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eVJUTDsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0Owot
fQotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sRGF0YWJhc2VQ
YXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUp
IHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9u
YWxpdHlMVFI6Ci0gICAgICAgIHJldHVybiAiTFRSIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29s
RGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eVJUTDoKLSAgICAgICAgcmV0dXJu
ICJSVEwiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFBy
b3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eT4gZnJvbVByb3RvY29s
U3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJMVFIiKQot
ICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rp
b25hbGl0eUxUUjsKLSAgICBpZiAodmFsdWUgPT0gIlJUTCIpCi0gICAgICAgIHJldHVybiBUZXN0
UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5UlRMOwotICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5n
KFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSB2YWx1ZSkKLXsK
LSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJC
dW5kbGVEaXJlY3Rpb25hbGl0eUxUUjoKLSAgICAgICAgcmV0dXJuICJMVFIiX3M7Ci0gICAgY2Fz
ZSBUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHlSVEw6Ci0gICAg
ICAgIHJldHVybiAiUlRMIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlv
bmFsPFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eT4gZnJvbVBy
b3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJM
VFIiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZURpcmVj
dGlvbmFsaXR5TFRSOwotICAgIGlmICh2YWx1ZSA9PSAiUlRMIikKLSAgICAgICAgcmV0dXJuIFRl
c3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eVJUTDsKLSAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucy5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbFR5cGVQYXJzZXIuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpT
T05PYmplY3RQcml2YXRlLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbnRl
cmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChEYXRhYmFzZURvbWFpbikKLQotKyAo
dm9pZClfcGFyc2VFcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKilvdXRWYWx1ZSBm
cm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLSsgKHZvaWQpX3BhcnNlRXJyb3JMaXN0OihOU0FycmF5
Lyo8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDoo
aWQpcGF5bG9hZDsKLSsgKHZvaWQpX3BhcnNlTW91c2VCdXR0b246KE5TTnVtYmVyICoqKW91dFZh
bHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotKyAodm9pZClfcGFyc2VPcHRpb25hbFBhcmFt
ZXRlckJ1bmRsZTooVGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZSAq
KilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLSsgKHZvaWQpX3BhcnNlUGFyYW1l
dGVyQnVuZGxlOihUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZSAqKilvdXRWYWx1
ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLSsgKHZvaWQpX3BhcnNlT2JqZWN0V2l0aFByb3Bl
cnR5TmFtZUNvbmZsaWN0czooVGVzdFByb3RvY29sRGF0YWJhc2VPYmplY3RXaXRoUHJvcGVydHlO
YW1lQ29uZmxpY3RzICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotKyAodm9p
ZClfcGFyc2VEdW1teU9iamVjdDooVGVzdFByb3RvY29sRGF0YWJhc2VEdW1teU9iamVjdCAqKilv
dXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLQotQGVuZAotQGludGVyZmFjZSBUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFRlc3REb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlUGFy
YW1ldGVyQnVuZGxlOihUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlICoqKW91dFZhbHVl
IGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKERhdGFiYXNlRG9tYWluKQotCi0rICh2b2lkKV9wYXJz
ZUVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqKW91dFZhbHVlIGZyb21QYXlsb2Fk
OihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2Fk
LCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xE
YXRhYmFzZUVycm9yIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07Ci19Ci0KLSsgKHZv
aWQpX3BhcnNlRXJyb3JMaXN0OihOU0FycmF5Lyo8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4q
LyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TQXJyYXkvKjxUZXN0UHJvdG9jb2xEYXRhYmFz
ZUVycm9yPiovIGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gKE5TQXJyYXkvKjxUZXN0UHJvdG9j
b2xEYXRhYmFzZUVycm9yPiovICopcGF5bG9hZDsKLX0KLQotKyAodm9pZClfcGFyc2VNb3VzZUJ1
dHRvbjooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAg
ICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBjbGFzc10p
OwotICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VCdXR0b24+IHJlc3VsdCA9
IEluc3BlY3Rvcjo6ZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VC
dXR0b24+KHBheWxvYWQpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX0VOVU1fVkFMVUUo
cmVzdWx0LCBAIk1vdXNlQnV0dG9uIik7Ci0gICAgKm91dFZhbHVlID0gQChyZXN1bHQudmFsdWUo
KSk7Ci19Ci0KLSsgKHZvaWQpX3BhcnNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU6KFRlc3RQcm90
b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUgKiopb3V0VmFsdWUgZnJvbVBheWxv
YWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxv
YWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2Nv
bERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpw
YXlsb2FkXTsKLX0KLQotKyAodm9pZClfcGFyc2VQYXJhbWV0ZXJCdW5kbGU6KFRlc3RQcm90b2Nv
bERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXls
b2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNEaWN0
aW9uYXJ5IGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xEYXRhYmFzZVBh
cmFtZXRlckJ1bmRsZSBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOwotfQotCi0rICh2
b2lkKV9wYXJzZU9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHM6KFRlc3RQcm90b2NvbERh
dGFiYXNlT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cyAqKilvdXRWYWx1ZSBmcm9tUGF5
bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5
bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IFtbVGVzdFByb3Rv
Y29sRGF0YWJhc2VPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzIGFsbG9jXSBpbml0V2l0
aFBheWxvYWQ6cGF5bG9hZF07Ci19Ci0KLSsgKHZvaWQpX3BhcnNlRHVtbXlPYmplY3Q6KFRlc3RQ
cm90b2NvbERhdGFiYXNlRHVtbXlPYmplY3QgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBh
eWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0Rp
Y3Rpb25hcnkgY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbERhdGFiYXNl
RHVtbXlPYmplY3QgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKLX0KLQotQGVuZAot
QGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoVGVzdERvbWFpbikK
LQotKyAodm9pZClfcGFyc2VQYXJhbWV0ZXJCdW5kbGU6KFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0
ZXJCdW5kbGUgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJP
V19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsK
LSAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGUgYWxsb2Nd
IGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xUeXBlcy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVj
bGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0
ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9S
V0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5o
PgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3Rv
cjsKLQotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcgotCi0tIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmlu
ZyAqLCBpZD4gKilwYXlsb2FkCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0g
ICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BS
T1BFUlRZKHBheWxvYWRbQCJtZXNzYWdlIl0sIEAibWVzc2FnZSIpOwotICAgIHNlbGYubWVzc2Fn
ZSA9IHBheWxvYWRbQCJtZXNzYWdlIl07Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJ
UkVEX1BST1BFUlRZKHBheWxvYWRbQCJjb2RlIl0sIEAiY29kZSIpOwotICAgIHNlbGYuY29kZSA9
IFtwYXlsb2FkW0AiY29kZSJdIGludGVnZXJWYWx1ZV07Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0K
LS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05P
YmplY3QgKilvYmplY3QKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoSlNPTk9i
amVjdDpbb2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0KCldKSkKLSAgICAgICAgcmV0dXJuIG5pbDsK
LQotICAgIHJldHVybiBzZWxmOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhNZXNzYWdl
OihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZTooaW50KWNvZGUKLXsKLSAgICBpZiAoIShzZWxmID0g
W3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfUkVRVUlSRURfUFJPUEVSVFkobWVzc2FnZSwgQCJtZXNzYWdlIik7Ci0KLSAgICBzZWxm
Lm1lc3NhZ2UgPSBtZXNzYWdlOwotICAgIHNlbGYuY29kZSA9IGNvZGU7Ci0KLSAgICByZXR1cm4g
c2VsZjsKLX0KLQotLSAodm9pZClzZXRNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UKLXsKLSAg
ICBbc3VwZXIgc2V0U3RyaW5nOm1lc3NhZ2UgZm9yS2V5OkAibWVzc2FnZSJdOwotfQotCi0tIChO
U1N0cmluZyAqKW1lc3NhZ2UKLXsKLSAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAIm1l
c3NhZ2UiXTsKLX0KLQotLSAodm9pZClzZXRDb2RlOihpbnQpY29kZQotewotICAgIFtzdXBlciBz
ZXRJbnRlZ2VyOmNvZGUgZm9yS2V5OkAiY29kZSJdOwotfQotCi0tIChpbnQpY29kZQotewotICAg
IHJldHVybiBbc3VwZXIgaW50ZWdlckZvcktleTpAImNvZGUiXTsKLX0KLQotQGVuZAotCi1AaW1w
bGVtZW50YXRpb24gVGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZQot
Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxO
U1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0
XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBzZWxmLmNvbHVtbk5hbWVzID0gcGF5bG9h
ZFtAImNvbHVtbk5hbWVzIl07Ci0KLSAgICBzZWxmLmJ1dHRvbnMgPSBwYXlsb2FkW0AiYnV0dG9u
cyJdOwotCi0gICAgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFtZXRl
ckJ1bmRsZURpcmVjdGlvbmFsaXR5PiBkaXJlY3Rpb25hbGl0eSA9IGZyb21Qcm90b2NvbFN0cmlu
ZzxUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxp
dHk+KHBheWxvYWRbQCJkaXJlY3Rpb25hbGl0eSJdKTsKLSAgICBpZiAoZGlyZWN0aW9uYWxpdHkp
Ci0gICAgICAgIHNlbGYuZGlyZWN0aW9uYWxpdHkgPSBkaXJlY3Rpb25hbGl0eS52YWx1ZSgpOwot
Ci0gICAgc2VsZi5ub3RlcyA9IHBheWxvYWRbQCJub3RlcyJdOwotCi0gICAgc2VsZi50aW1lc3Rh
bXAgPSBbcGF5bG9hZFtAInRpbWVzdGFtcCJdIGRvdWJsZVZhbHVlXTsKLQotICAgIHNlbGYudmFs
dWVzID0gcGF5bG9hZFtAInZhbHVlcyJdOwotCi0gICAgc2VsZi5wYXlsb2FkID0gcGF5bG9hZFtA
InBheWxvYWQiXTsKLQotICAgIHNlbGYuZXJyb3IgPSBbW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJy
b3IgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkW0AiZXJyb3IiXV07Ci0KLSAgICBzZWxm
LmVycm9yTGlzdCA9IG9iamNBcnJheUZyb21QYXlsb2FkPFRlc3RQcm90b2NvbERhdGFiYXNlRXJy
b3I+KHBheWxvYWRbQCJlcnJvckxpc3QiXSk7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLS0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3Qg
KilvYmplY3QKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoSlNPTk9iamVjdDpb
b2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0KCldKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAg
IHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKXNldENvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNT
dHJpbmc+Ki8gKiljb2x1bW5OYW1lcwotewotICAgIFtzdXBlciBzZXRKU09OQXJyYXk6dG9KU09O
U3RyaW5nQXJyYXkoY29sdW1uTmFtZXMpIGZvcktleTpAImNvbHVtbk5hbWVzIl07Ci19Ci0KLS0g
KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWNvbHVtbk5hbWVzCi17Ci0gICAgcmV0dXJuIHRvT2Jq
Q1N0cmluZ0FycmF5KFtzdXBlciBKU09OQXJyYXlGb3JLZXk6QCJjb2x1bW5OYW1lcyJdKTsKLX0K
LQotLSAodm9pZClzZXRCdXR0b25zOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilidXR0b25zCi17
Ci0gICAgW3N1cGVyIHNldEpTT05BcnJheTp0b0pTT05TdHJpbmdBcnJheShidXR0b25zKSBmb3JL
ZXk6QCJidXR0b25zIl07Ci19Ci0KLS0gKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWJ1dHRvbnMK
LXsKLSAgICByZXR1cm4gdG9PYmpDU3RyaW5nQXJyYXkoW3N1cGVyIEpTT05BcnJheUZvcktleTpA
ImJ1dHRvbnMiXSk7Ci19Ci0KLS0gKHZvaWQpc2V0RGlyZWN0aW9uYWxpdHk6KFRlc3RQcm90b2Nv
bERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSlkaXJlY3Rpb25h
bGl0eQotewotICAgIFtzdXBlciBzZXRTdHJpbmc6dG9Qcm90b2NvbFN0cmluZyhkaXJlY3Rpb25h
bGl0eSkgZm9yS2V5OkAiZGlyZWN0aW9uYWxpdHkiXTsKLX0KLQotLSAoVGVzdFByb3RvY29sRGF0
YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5KWRpcmVjdGlvbmFsaXR5
Ci17Ci0gICAgcmV0dXJuIGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xEYXRhYmFzZU9w
dGlvbmFsUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHk+KFtzdXBlciBzdHJpbmdGb3JLZXk6
QCJkaXJlY3Rpb25hbGl0eSJdKS52YWx1ZSgpOwotfQotCi0tICh2b2lkKXNldE5vdGVzOihOU1N0
cmluZyAqKW5vdGVzCi17Ci0gICAgW3N1cGVyIHNldFN0cmluZzpub3RlcyBmb3JLZXk6QCJub3Rl
cyJdOwotfQotCi0tIChOU1N0cmluZyAqKW5vdGVzCi17Ci0gICAgcmV0dXJuIFtzdXBlciBzdHJp
bmdGb3JLZXk6QCJub3RlcyJdOwotfQotCi0tICh2b2lkKXNldFRpbWVzdGFtcDooZG91YmxlKXRp
bWVzdGFtcAotewotICAgIFtzdXBlciBzZXREb3VibGU6dGltZXN0YW1wIGZvcktleTpAInRpbWVz
dGFtcCJdOwotfQotCi0tIChkb3VibGUpdGltZXN0YW1wCi17Ci0gICAgcmV0dXJuIFtzdXBlciBk
b3VibGVGb3JLZXk6QCJ0aW1lc3RhbXAiXTsKLX0KLQotLSAodm9pZClzZXRWYWx1ZXM6KFJXSVBy
b3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcwotewotICAgIFtzdXBlciBzZXRPYmplY3Q6dmFsdWVz
IGZvcktleTpAInZhbHVlcyJdOwotfQotCi0tIChSV0lQcm90b2NvbEpTT05PYmplY3QgKil2YWx1
ZXMKLXsKLSAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9iamVjdCA9IFtzdXBlciBvYmplY3RG
b3JLZXk6QCJ2YWx1ZXMiXTsKLSAgICBpZiAoIW9iamVjdCkKLSAgICAgICAgcmV0dXJuIG5pbDsK
LSAgICByZXR1cm4gW1tSV0lQcm90b2NvbEpTT05PYmplY3QgYWxsb2NdIGluaXRXaXRoSlNPTk9i
amVjdDpbW3N1cGVyIG9iamVjdEZvcktleTpAInZhbHVlcyJdIHRvSlNPTk9iamVjdF0uZ2V0KCld
OwotfQotCi0tICh2b2lkKXNldFBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxv
YWQKLXsKLSAgICBbc3VwZXIgc2V0T2JqZWN0OnBheWxvYWQgZm9yS2V5OkAicGF5bG9hZCJdOwot
fQotCi0tIChSV0lQcm90b2NvbEpTT05PYmplY3QgKilwYXlsb2FkCi17Ci0gICAgUldJUHJvdG9j
b2xKU09OT2JqZWN0ICpvYmplY3QgPSBbc3VwZXIgb2JqZWN0Rm9yS2V5OkAicGF5bG9hZCJdOwot
ICAgIGlmICghb2JqZWN0KQotICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiBbW1JXSVBy
b3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0Oltbc3VwZXIgb2JqZWN0
Rm9yS2V5OkAicGF5bG9hZCJdIHRvSlNPTk9iamVjdF0uZ2V0KCldOwotfQotCi0tICh2b2lkKXNl
dEVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICopZXJyb3IKLXsKLSAgICBbc3VwZXIg
c2V0T2JqZWN0OmVycm9yIGZvcktleTpAImVycm9yIl07Ci19Ci0KLS0gKFRlc3RQcm90b2NvbERh
dGFiYXNlRXJyb3IgKillcnJvcgotewotICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb2JqZWN0
ID0gW3N1cGVyIG9iamVjdEZvcktleTpAImVycm9yIl07Ci0gICAgaWYgKCFvYmplY3QpCi0gICAg
ICAgIHJldHVybiBuaWw7Ci0gICAgcmV0dXJuIFtbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBh
bGxvY10gaW5pdFdpdGhKU09OT2JqZWN0Oltbc3VwZXIgb2JqZWN0Rm9yS2V5OkAiZXJyb3IiXSB0
b0pTT05PYmplY3RdLmdldCgpXTsKLX0KLQotLSAodm9pZClzZXRFcnJvckxpc3Q6KE5TQXJyYXkv
KjxUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yPiovICopZXJyb3JMaXN0Ci17Ci0gICAgVEhST1df
RVhDRVBUSU9OX0ZPUl9CQURfVFlQRV9JTl9BUlJBWShlcnJvckxpc3QsIFtUZXN0UHJvdG9jb2xE
YXRhYmFzZUVycm9yIGNsYXNzXSk7Ci0gICAgW3N1cGVyIHNldEpTT05BcnJheTp0b0pTT05PYmpl
Y3RBcnJheShlcnJvckxpc3QpIGZvcktleTpAImVycm9yTGlzdCJdOwotfQotCi0tIChOU0FycmF5
Lyo8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4qLyAqKWVycm9yTGlzdAotewotICAgIHJldHVy
biB0b09iakNBcnJheTxUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yPihbc3VwZXIgSlNPTkFycmF5
Rm9yS2V5OkAiZXJyb3JMaXN0Il0pOwotfQotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0
UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2Fk
Ci17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJldHVybiBuaWw7
Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJj
b2x1bW5OYW1lcyJdLCBAImNvbHVtbk5hbWVzIik7Ci0gICAgc2VsZi5jb2x1bW5OYW1lcyA9IHBh
eWxvYWRbQCJjb2x1bW5OYW1lcyJdOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJF
RF9QUk9QRVJUWShwYXlsb2FkW0AiYnV0dG9ucyJdLCBAImJ1dHRvbnMiKTsKLSAgICBzZWxmLmJ1
dHRvbnMgPSBwYXlsb2FkW0AiYnV0dG9ucyJdOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9S
RVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiZGlyZWN0aW9uYWxpdHkiXSwgQCJkaXJlY3Rpb25h
bGl0eSIpOwotICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxl
RGlyZWN0aW9uYWxpdHk+IGRpcmVjdGlvbmFsaXR5ID0gZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQ
cm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHk+KHBheWxvYWRbQCJk
aXJlY3Rpb25hbGl0eSJdKTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9FTlVNX1ZBTFVF
KGRpcmVjdGlvbmFsaXR5LCBAImRpcmVjdGlvbmFsaXR5Iik7Ci0gICAgc2VsZi5kaXJlY3Rpb25h
bGl0eSA9IGRpcmVjdGlvbmFsaXR5LnZhbHVlKCk7Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9S
X1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJub3RlcyJdLCBAIm5vdGVzIik7Ci0gICAgc2Vs
Zi5ub3RlcyA9IHBheWxvYWRbQCJub3RlcyJdOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9S
RVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AidGltZXN0YW1wIl0sIEAidGltZXN0YW1wIik7Ci0g
ICAgc2VsZi50aW1lc3RhbXAgPSBbcGF5bG9hZFtAInRpbWVzdGFtcCJdIGRvdWJsZVZhbHVlXTsK
LQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAInZh
bHVlcyJdLCBAInZhbHVlcyIpOwotICAgIHNlbGYudmFsdWVzID0gcGF5bG9hZFtAInZhbHVlcyJd
OwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0Ai
cGF5bG9hZCJdLCBAInBheWxvYWQiKTsKLSAgICBzZWxmLnBheWxvYWQgPSBwYXlsb2FkW0AicGF5
bG9hZCJdOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXls
b2FkW0AiZXJyb3IiXSwgQCJlcnJvciIpOwotICAgIHNlbGYuZXJyb3IgPSBbW1Rlc3RQcm90b2Nv
bERhdGFiYXNlRXJyb3IgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkW0AiZXJyb3IiXV07
Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJl
cnJvckxpc3QiXSwgQCJlcnJvckxpc3QiKTsKLSAgICBzZWxmLmVycm9yTGlzdCA9IG9iamNBcnJh
eUZyb21QYXlsb2FkPFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I+KHBheWxvYWRbQCJlcnJvckxp
c3QiXSk7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBy
b3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilvYmplY3QKLXsKLSAgICBpZiAo
IShzZWxmID0gW3N1cGVyIGluaXRXaXRoSlNPTk9iamVjdDpbb2JqZWN0IHRvSlNPTk9iamVjdF0u
Z2V0KCldKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0t
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb2x1bW5OYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiov
ICopY29sdW1uTmFtZXMgYnV0dG9uczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopYnV0dG9ucyBk
aXJlY3Rpb25hbGl0eTooVGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rp
b25hbGl0eSlkaXJlY3Rpb25hbGl0eSBub3RlczooTlNTdHJpbmcgKilub3RlcyB0aW1lc3RhbXA6
KGRvdWJsZSl0aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKil2YWx1ZXMg
cGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZCBlcnJvcjooVGVzdFByb3Rv
Y29sRGF0YWJhc2VFcnJvciAqKWVycm9yIGVycm9yTGlzdDooTlNBcnJheS8qPFRlc3RQcm90b2Nv
bERhdGFiYXNlRXJyb3I+Ki8gKillcnJvckxpc3QKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVy
IGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
UkVRVUlSRURfUFJPUEVSVFkoY29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsKLSAgICBUSFJP
V19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKGJ1dHRvbnMsIEAiYnV0dG9ucyIpOwot
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkobm90ZXMsIEAibm90ZXMi
KTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHZhbHVlcywgQCJ2
YWx1ZXMiKTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxv
YWQsIEAicGF5bG9hZCIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVS
VFkoZXJyb3IsIEAiZXJyb3IiKTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BS
T1BFUlRZKGVycm9yTGlzdCwgQCJlcnJvckxpc3QiKTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9S
X0JBRF9UWVBFX0lOX0FSUkFZKGVycm9yTGlzdCwgW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3Ig
Y2xhc3NdKTsKLQotICAgIHNlbGYuY29sdW1uTmFtZXMgPSBjb2x1bW5OYW1lczsKLSAgICBzZWxm
LmJ1dHRvbnMgPSBidXR0b25zOwotICAgIHNlbGYuZGlyZWN0aW9uYWxpdHkgPSBkaXJlY3Rpb25h
bGl0eTsKLSAgICBzZWxmLm5vdGVzID0gbm90ZXM7Ci0gICAgc2VsZi50aW1lc3RhbXAgPSB0aW1l
c3RhbXA7Ci0gICAgc2VsZi52YWx1ZXMgPSB2YWx1ZXM7Ci0gICAgc2VsZi5wYXlsb2FkID0gcGF5
bG9hZDsKLSAgICBzZWxmLmVycm9yID0gZXJyb3I7Ci0gICAgc2VsZi5lcnJvckxpc3QgPSBlcnJv
ckxpc3Q7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClzZXRDb2x1bW5OYW1lczoo
TlNBcnJheS8qPE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMKLXsKLSAgICBbc3VwZXIgc2V0SlNP
TkFycmF5OnRvSlNPTlN0cmluZ0FycmF5KGNvbHVtbk5hbWVzKSBmb3JLZXk6QCJjb2x1bW5OYW1l
cyJdOwotfQotCi0tIChOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcwotewotICAg
IHJldHVybiB0b09iakNTdHJpbmdBcnJheShbc3VwZXIgSlNPTkFycmF5Rm9yS2V5OkAiY29sdW1u
TmFtZXMiXSk7Ci19Ci0KLS0gKHZvaWQpc2V0QnV0dG9uczooTlNBcnJheS8qPE5TU3RyaW5nPiov
ICopYnV0dG9ucwotewotICAgIFtzdXBlciBzZXRKU09OQXJyYXk6dG9KU09OU3RyaW5nQXJyYXko
YnV0dG9ucykgZm9yS2V5OkAiYnV0dG9ucyJdOwotfQotCi0tIChOU0FycmF5Lyo8TlNTdHJpbmc+
Ki8gKilidXR0b25zCi17Ci0gICAgcmV0dXJuIHRvT2JqQ1N0cmluZ0FycmF5KFtzdXBlciBKU09O
QXJyYXlGb3JLZXk6QCJidXR0b25zIl0pOwotfQotCi0tICh2b2lkKXNldERpcmVjdGlvbmFsaXR5
OihUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5KWRpcmVj
dGlvbmFsaXR5Ci17Ci0gICAgW3N1cGVyIHNldFN0cmluZzp0b1Byb3RvY29sU3RyaW5nKGRpcmVj
dGlvbmFsaXR5KSBmb3JLZXk6QCJkaXJlY3Rpb25hbGl0eSJdOwotfQotCi0tIChUZXN0UHJvdG9j
b2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5KWRpcmVjdGlvbmFsaXR5Ci17
Ci0gICAgcmV0dXJuIGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFt
ZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5Pihbc3VwZXIgc3RyaW5nRm9yS2V5OkAiZGlyZWN0aW9u
YWxpdHkiXSkudmFsdWUoKTsKLX0KLQotLSAodm9pZClzZXROb3RlczooTlNTdHJpbmcgKilub3Rl
cwotewotICAgIFtzdXBlciBzZXRTdHJpbmc6bm90ZXMgZm9yS2V5OkAibm90ZXMiXTsKLX0KLQot
LSAoTlNTdHJpbmcgKilub3RlcwotewotICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAi
bm90ZXMiXTsKLX0KLQotLSAodm9pZClzZXRUaW1lc3RhbXA6KGRvdWJsZSl0aW1lc3RhbXAKLXsK
LSAgICBbc3VwZXIgc2V0RG91YmxlOnRpbWVzdGFtcCBmb3JLZXk6QCJ0aW1lc3RhbXAiXTsKLX0K
LQotLSAoZG91YmxlKXRpbWVzdGFtcAotewotICAgIHJldHVybiBbc3VwZXIgZG91YmxlRm9yS2V5
OkAidGltZXN0YW1wIl07Ci19Ci0KLS0gKHZvaWQpc2V0VmFsdWVzOihSV0lQcm90b2NvbEpTT05P
YmplY3QgKil2YWx1ZXMKLXsKLSAgICBbc3VwZXIgc2V0T2JqZWN0OnZhbHVlcyBmb3JLZXk6QCJ2
YWx1ZXMiXTsKLX0KLQotLSAoUldJUHJvdG9jb2xKU09OT2JqZWN0ICopdmFsdWVzCi17Ci0gICAg
UldJUHJvdG9jb2xKU09OT2JqZWN0ICpvYmplY3QgPSBbc3VwZXIgb2JqZWN0Rm9yS2V5OkAidmFs
dWVzIl07Ci0gICAgaWYgKCFvYmplY3QpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgcmV0dXJu
IFtbUldJUHJvdG9jb2xKU09OT2JqZWN0IGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6W1tzdXBl
ciBvYmplY3RGb3JLZXk6QCJ2YWx1ZXMiXSB0b0pTT05PYmplY3RdLmdldCgpXTsKLX0KLQotLSAo
dm9pZClzZXRQYXlsb2FkOihSV0lQcm90b2NvbEpTT05PYmplY3QgKilwYXlsb2FkCi17Ci0gICAg
W3N1cGVyIHNldE9iamVjdDpwYXlsb2FkIGZvcktleTpAInBheWxvYWQiXTsKLX0KLQotLSAoUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZAotewotICAgIFJXSVByb3RvY29sSlNPTk9iamVj
dCAqb2JqZWN0ID0gW3N1cGVyIG9iamVjdEZvcktleTpAInBheWxvYWQiXTsKLSAgICBpZiAoIW9i
amVjdCkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4gW1tSV0lQcm90b2NvbEpTT05P
YmplY3QgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDpbW3N1cGVyIG9iamVjdEZvcktleTpAInBh
eWxvYWQiXSB0b0pTT05PYmplY3RdLmdldCgpXTsKLX0KLQotLSAodm9pZClzZXRFcnJvcjooVGVz
dFByb3RvY29sRGF0YWJhc2VFcnJvciAqKWVycm9yCi17Ci0gICAgW3N1cGVyIHNldE9iamVjdDpl
cnJvciBmb3JLZXk6QCJlcnJvciJdOwotfQotCi0tIChUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9y
ICopZXJyb3IKLXsKLSAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9iamVjdCA9IFtzdXBlciBv
YmplY3RGb3JLZXk6QCJlcnJvciJdOwotICAgIGlmICghb2JqZWN0KQotICAgICAgICByZXR1cm4g
bmlsOwotICAgIHJldHVybiBbW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgYWxsb2NdIGluaXRX
aXRoSlNPTk9iamVjdDpbW3N1cGVyIG9iamVjdEZvcktleTpAImVycm9yIl0gdG9KU09OT2JqZWN0
XS5nZXQoKV07Ci19Ci0KLS0gKHZvaWQpc2V0RXJyb3JMaXN0OihOU0FycmF5Lyo8VGVzdFByb3Rv
Y29sRGF0YWJhc2VFcnJvcj4qLyAqKWVycm9yTGlzdAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfQkFEX1RZUEVfSU5fQVJSQVkoZXJyb3JMaXN0LCBbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJv
ciBjbGFzc10pOwotICAgIFtzdXBlciBzZXRKU09OQXJyYXk6dG9KU09OT2JqZWN0QXJyYXkoZXJy
b3JMaXN0KSBmb3JLZXk6QCJlcnJvckxpc3QiXTsKLX0KLQotLSAoTlNBcnJheS8qPFRlc3RQcm90
b2NvbERhdGFiYXNlRXJyb3I+Ki8gKillcnJvckxpc3QKLXsKLSAgICByZXR1cm4gdG9PYmpDQXJy
YXk8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4oW3N1cGVyIEpTT05BcnJheUZvcktleTpAImVy
cm9yTGlzdCJdKTsKLX0KLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sRGF0
YWJhc2VPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzCi0KLS0gKGluc3RhbmNldHlwZSlp
bml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBh
eWxvYWQKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJu
IG5pbDsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9h
ZFtAImludGVnZXIiXSwgQCJpbnRlZ2VyIik7Ci0gICAgc2VsZi5pbnRlZ2VyID0gcGF5bG9hZFtA
ImludGVnZXIiXTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFko
cGF5bG9hZFtAImFycmF5Il0sIEAiYXJyYXkiKTsKLSAgICBzZWxmLmFycmF5ID0gcGF5bG9hZFtA
ImFycmF5Il07Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBh
eWxvYWRbQCJzdHJpbmciXSwgQCJzdHJpbmciKTsKLSAgICBzZWxmLnN0cmluZyA9IHBheWxvYWRb
QCJzdHJpbmciXTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFko
cGF5bG9hZFtAInZhbHVlIl0sIEAidmFsdWUiKTsKLSAgICBzZWxmLnZhbHVlID0gcGF5bG9hZFtA
InZhbHVlIl07Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBh
eWxvYWRbQCJvYmplY3QiXSwgQCJvYmplY3QiKTsKLSAgICBzZWxmLm9iamVjdCA9IHBheWxvYWRb
QCJvYmplY3QiXTsKLQotICAgIHJldHVybiBzZWxmOwotfQotLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9iamVjdAotewotICAg
IGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmplY3QgdG9KU09OT2Jq
ZWN0XS5nZXQoKV0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19
Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aEludGVnZXI6KE5TU3RyaW5nICopaW50ZWdlciBh
cnJheTooTlNTdHJpbmcgKilhcnJheSBzdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nIHZhbHVlOihO
U1N0cmluZyAqKXZhbHVlIG9iamVjdDooTlNTdHJpbmcgKilvYmplY3QKLXsKLSAgICBpZiAoIShz
ZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkoaW50ZWdlciwgQCJpbnRlZ2VyIik7Ci0gICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShhcnJheSwgQCJhcnJheSIpOwot
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkoc3RyaW5nLCBAInN0cmlu
ZyIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkodmFsdWUsIEAi
dmFsdWUiKTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKG9iamVj
dCwgQCJvYmplY3QiKTsKLQotICAgIHNlbGYuaW50ZWdlciA9IGludGVnZXI7Ci0gICAgc2VsZi5h
cnJheSA9IGFycmF5OwotICAgIHNlbGYuc3RyaW5nID0gc3RyaW5nOwotICAgIHNlbGYudmFsdWUg
PSB2YWx1ZTsKLSAgICBzZWxmLm9iamVjdCA9IG9iamVjdDsKLQotICAgIHJldHVybiBzZWxmOwot
fQotCi0tICh2b2lkKXNldEludGVnZXI6KE5TU3RyaW5nICopaW50ZWdlcgotewotICAgIFtzdXBl
ciBzZXRTdHJpbmc6aW50ZWdlciBmb3JLZXk6QCJpbnRlZ2VyIl07Ci19Ci0KLS0gKE5TU3RyaW5n
ICopaW50ZWdlcgotewotICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAiaW50ZWdlciJd
OwotfQotCi0tICh2b2lkKXNldEFycmF5OihOU1N0cmluZyAqKWFycmF5Ci17Ci0gICAgW3N1cGVy
IHNldFN0cmluZzphcnJheSBmb3JLZXk6QCJhcnJheSJdOwotfQotCi0tIChOU1N0cmluZyAqKWFy
cmF5Ci17Ci0gICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJhcnJheSJdOwotfQotCi0t
ICh2b2lkKXNldFN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcKLXsKLSAgICBbc3VwZXIgc2V0U3Ry
aW5nOnN0cmluZyBmb3JLZXk6QCJzdHJpbmciXTsKLX0KLQotLSAoTlNTdHJpbmcgKilzdHJpbmcK
LXsKLSAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAInN0cmluZyJdOwotfQotCi0tICh2
b2lkKXNldFZhbHVlOihOU1N0cmluZyAqKXZhbHVlCi17Ci0gICAgW3N1cGVyIHNldFN0cmluZzp2
YWx1ZSBmb3JLZXk6QCJ2YWx1ZSJdOwotfQotCi0tIChOU1N0cmluZyAqKXZhbHVlCi17Ci0gICAg
cmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJ2YWx1ZSJdOwotfQotCi0tICh2b2lkKXNldE9i
amVjdDooTlNTdHJpbmcgKilvYmplY3QKLXsKLSAgICBbc3VwZXIgc2V0U3RyaW5nOm9iamVjdCBm
b3JLZXk6QCJvYmplY3QiXTsKLX0KLQotLSAoTlNTdHJpbmcgKilvYmplY3QKLXsKLSAgICByZXR1
cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAIm9iamVjdCJdOwotfQotCi1AZW5kCi0KLUBpbXBsZW1l
bnRhdGlvbiBUZXN0UHJvdG9jb2xEYXRhYmFzZUR1bW15T2JqZWN0Ci0KLS0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAq
KXBheWxvYWQKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0
dXJuIG5pbDsKLQotICAgIHJldHVybiBzZWxmOwotfQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
UHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9iamVjdAotewotICAgIGlm
ICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmplY3QgdG9KU09OT2JqZWN0
XS5nZXQoKV0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0K
LUBlbmQKLQotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRs
ZQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFy
eTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBp
bml0XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JF
UVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJkaXJlY3Rpb25hbGl0eSJdLCBAImRpcmVjdGlvbmFs
aXR5Iik7Ci0gICAgT3B0aW9uYWw8VGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZURpcmVj
dGlvbmFsaXR5PiBkaXJlY3Rpb25hbGl0eSA9IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9j
b2xUZXN0UGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHk+KHBheWxvYWRbQCJkaXJlY3Rpb25h
bGl0eSJdKTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9FTlVNX1ZBTFVFKGRpcmVjdGlv
bmFsaXR5LCBAImRpcmVjdGlvbmFsaXR5Iik7Ci0gICAgc2VsZi5kaXJlY3Rpb25hbGl0eSA9IGRp
cmVjdGlvbmFsaXR5LnZhbHVlKCk7Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVE
X1BST1BFUlRZKHBheWxvYWRbQCJidXR0b25zIl0sIEAiYnV0dG9ucyIpOwotICAgIHNlbGYuYnV0
dG9ucyA9IHBheWxvYWRbQCJidXR0b25zIl07Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JF
UVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJjb2x1bW5OYW1lcyJdLCBAImNvbHVtbk5hbWVzIik7
Ci0gICAgc2VsZi5jb2x1bW5OYW1lcyA9IHBheWxvYWRbQCJjb2x1bW5OYW1lcyJdOwotCi0gICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0Aibm90ZXMiXSwg
QCJub3RlcyIpOwotICAgIHNlbGYubm90ZXMgPSBwYXlsb2FkW0Aibm90ZXMiXTsKLQotICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAInRpbWVzdGFtcCJd
LCBAInRpbWVzdGFtcCIpOwotICAgIHNlbGYudGltZXN0YW1wID0gW3BheWxvYWRbQCJ0aW1lc3Rh
bXAiXSBkb3VibGVWYWx1ZV07Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BS
T1BFUlRZKHBheWxvYWRbQCJ2YWx1ZXMiXSwgQCJ2YWx1ZXMiKTsKLSAgICBzZWxmLnZhbHVlcyA9
IHBheWxvYWRbQCJ2YWx1ZXMiXTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURf
UFJPUEVSVFkocGF5bG9hZFtAInBheWxvYWQiXSwgQCJwYXlsb2FkIik7Ci0gICAgc2VsZi5wYXls
b2FkID0gcGF5bG9hZFtAInBheWxvYWQiXTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVR
VUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImVycm9yIl0sIEAiZXJyb3IiKTsKLSAgICBzZWxmLmVy
cm9yID0gW1tUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6
cGF5bG9hZFtAImVycm9yIl1dOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0tIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopb2JqZWN0
Ci17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEpTT05PYmplY3Q6W29iamVjdCB0
b0pTT05PYmplY3RdLmdldCgpXSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICByZXR1cm4g
c2VsZjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRGlyZWN0aW9uYWxpdHk6KFRlc3RQ
cm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSlkaXJlY3Rpb25hbGl0eSBi
dXR0b25zOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilidXR0b25zIGNvbHVtbk5hbWVzOihOU0Fy
cmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcyBub3RlczooTlNTdHJpbmcgKilub3RlcyB0
aW1lc3RhbXA6KGRvdWJsZSl0aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3Qg
Kil2YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZCBlcnJvcjoo
VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKWVycm9yCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtz
dXBlciBpbml0XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBUSFJPV19FWENFUFRJT05f
Rk9SX1JFUVVJUkVEX1BST1BFUlRZKGJ1dHRvbnMsIEAiYnV0dG9ucyIpOwotICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkoY29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMi
KTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKG5vdGVzLCBAIm5v
dGVzIik7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWSh2YWx1ZXMs
IEAidmFsdWVzIik7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShw
YXlsb2FkLCBAInBheWxvYWQiKTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BS
T1BFUlRZKGVycm9yLCBAImVycm9yIik7Ci0KLSAgICBzZWxmLmRpcmVjdGlvbmFsaXR5ID0gZGly
ZWN0aW9uYWxpdHk7Ci0gICAgc2VsZi5idXR0b25zID0gYnV0dG9uczsKLSAgICBzZWxmLmNvbHVt
bk5hbWVzID0gY29sdW1uTmFtZXM7Ci0gICAgc2VsZi5ub3RlcyA9IG5vdGVzOwotICAgIHNlbGYu
dGltZXN0YW1wID0gdGltZXN0YW1wOwotICAgIHNlbGYudmFsdWVzID0gdmFsdWVzOwotICAgIHNl
bGYucGF5bG9hZCA9IHBheWxvYWQ7Ci0gICAgc2VsZi5lcnJvciA9IGVycm9yOwotCi0gICAgcmV0
dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpc2V0RGlyZWN0aW9uYWxpdHk6KFRlc3RQcm90b2NvbFRl
c3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSlkaXJlY3Rpb25hbGl0eQotewotICAgIFtz
dXBlciBzZXRTdHJpbmc6dG9Qcm90b2NvbFN0cmluZyhkaXJlY3Rpb25hbGl0eSkgZm9yS2V5OkAi
ZGlyZWN0aW9uYWxpdHkiXTsKLX0KLQotLSAoVGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRs
ZURpcmVjdGlvbmFsaXR5KWRpcmVjdGlvbmFsaXR5Ci17Ci0gICAgcmV0dXJuIGZyb21Qcm90b2Nv
bFN0cmluZzxUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHk+KFtz
dXBlciBzdHJpbmdGb3JLZXk6QCJkaXJlY3Rpb25hbGl0eSJdKS52YWx1ZSgpOwotfQotCi0tICh2
b2lkKXNldEJ1dHRvbnM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWJ1dHRvbnMKLXsKLSAgICBb
c3VwZXIgc2V0SlNPTkFycmF5OnRvSlNPTlN0cmluZ0FycmF5KGJ1dHRvbnMpIGZvcktleTpAImJ1
dHRvbnMiXTsKLX0KLQotLSAoTlNBcnJheS8qPE5TU3RyaW5nPiovICopYnV0dG9ucwotewotICAg
IHJldHVybiB0b09iakNTdHJpbmdBcnJheShbc3VwZXIgSlNPTkFycmF5Rm9yS2V5OkAiYnV0dG9u
cyJdKTsKLX0KLQotLSAodm9pZClzZXRDb2x1bW5OYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiov
ICopY29sdW1uTmFtZXMKLXsKLSAgICBbc3VwZXIgc2V0SlNPTkFycmF5OnRvSlNPTlN0cmluZ0Fy
cmF5KGNvbHVtbk5hbWVzKSBmb3JLZXk6QCJjb2x1bW5OYW1lcyJdOwotfQotCi0tIChOU0FycmF5
Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcwotewotICAgIHJldHVybiB0b09iakNTdHJpbmdB
cnJheShbc3VwZXIgSlNPTkFycmF5Rm9yS2V5OkAiY29sdW1uTmFtZXMiXSk7Ci19Ci0KLS0gKHZv
aWQpc2V0Tm90ZXM6KE5TU3RyaW5nICopbm90ZXMKLXsKLSAgICBbc3VwZXIgc2V0U3RyaW5nOm5v
dGVzIGZvcktleTpAIm5vdGVzIl07Ci19Ci0KLS0gKE5TU3RyaW5nICopbm90ZXMKLXsKLSAgICBy
ZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAIm5vdGVzIl07Ci19Ci0KLS0gKHZvaWQpc2V0VGlt
ZXN0YW1wOihkb3VibGUpdGltZXN0YW1wCi17Ci0gICAgW3N1cGVyIHNldERvdWJsZTp0aW1lc3Rh
bXAgZm9yS2V5OkAidGltZXN0YW1wIl07Ci19Ci0KLS0gKGRvdWJsZSl0aW1lc3RhbXAKLXsKLSAg
ICByZXR1cm4gW3N1cGVyIGRvdWJsZUZvcktleTpAInRpbWVzdGFtcCJdOwotfQotCi0tICh2b2lk
KXNldFZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopdmFsdWVzCi17Ci0gICAgW3N1cGVy
IHNldE9iamVjdDp2YWx1ZXMgZm9yS2V5OkAidmFsdWVzIl07Ci19Ci0KLS0gKFJXSVByb3RvY29s
SlNPTk9iamVjdCAqKXZhbHVlcwotewotICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb2JqZWN0
ID0gW3N1cGVyIG9iamVjdEZvcktleTpAInZhbHVlcyJdOwotICAgIGlmICghb2JqZWN0KQotICAg
ICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiBbW1JXSVByb3RvY29sSlNPTk9iamVjdCBhbGxv
Y10gaW5pdFdpdGhKU09OT2JqZWN0Oltbc3VwZXIgb2JqZWN0Rm9yS2V5OkAidmFsdWVzIl0gdG9K
U09OT2JqZWN0XS5nZXQoKV07Ci19Ci0KLS0gKHZvaWQpc2V0UGF5bG9hZDooUldJUHJvdG9jb2xK
U09OT2JqZWN0ICopcGF5bG9hZAotewotICAgIFtzdXBlciBzZXRPYmplY3Q6cGF5bG9hZCBmb3JL
ZXk6QCJwYXlsb2FkIl07Ci19Ci0KLS0gKFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQK
LXsKLSAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9iamVjdCA9IFtzdXBlciBvYmplY3RGb3JL
ZXk6QCJwYXlsb2FkIl07Ci0gICAgaWYgKCFvYmplY3QpCi0gICAgICAgIHJldHVybiBuaWw7Ci0g
ICAgcmV0dXJuIFtbUldJUHJvdG9jb2xKU09OT2JqZWN0IGFsbG9jXSBpbml0V2l0aEpTT05PYmpl
Y3Q6W1tzdXBlciBvYmplY3RGb3JLZXk6QCJwYXlsb2FkIl0gdG9KU09OT2JqZWN0XS5nZXQoKV07
Ci19Ci0KLS0gKHZvaWQpc2V0RXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKillcnJv
cgotewotICAgIFtzdXBlciBzZXRPYmplY3Q6ZXJyb3IgZm9yS2V5OkAiZXJyb3IiXTsKLX0KLQot
LSAoVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKWVycm9yCi17Ci0gICAgUldJUHJvdG9jb2xK
U09OT2JqZWN0ICpvYmplY3QgPSBbc3VwZXIgb2JqZWN0Rm9yS2V5OkAiZXJyb3IiXTsKLSAgICBp
ZiAoIW9iamVjdCkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4gW1tUZXN0UHJvdG9j
b2xEYXRhYmFzZUVycm9yIGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6W1tzdXBlciBvYmplY3RG
b3JLZXk6QCJlcnJvciJdIHRvSlNPTk9iamVjdF0uZ2V0KCldOwotfQotCi1AZW5kCi0KLQotIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvdHlwZS1y
ZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtcmVxdWlyaW5n
LXJ1bnRpbWUtY2FzdHMuanNvbi1yZXN1bHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGU4NGRhY2RjYWY3Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC90eXBlLXJlcXVpcmluZy1ydW50
aW1lLWNhc3RzLmpzb24tcmVzdWx0CisrKyAvZGV2L251bGwKQEAgLTEsMTY0OSArMCwwIEBACi0j
IyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLS8vIFRlc3QKLUluc3Bl
Y3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIlRlc3QiLCBudWxsKTsKLUluc3BlY3RvckJhY2tl
bmQucmVnaXN0ZXJFbnVtKCJUZXN0LlVuY2FzdGVkQW5pbWFscyIsIHtQaWdzOiAiUGlncyIsIENv
d3M6ICJDb3dzIiwgQ2F0czogIkNhdHMiLCBIZW5zOiAiSGVucyJ9KTsKLUluc3BlY3RvckJhY2tl
bmQucmVnaXN0ZXJFbnVtKCJUZXN0LkNhc3RlZEFuaW1hbHMiLCB7RHVja3M6ICJEdWNrcyIsIEhl
bnM6ICJIZW5zIiwgQ3Jvd3M6ICJDcm93cyIsIEZsYW1pbmdvczogIkZsYW1pbmdvcyJ9KTsKLUlu
c3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIlRlc3QiLCBudWxsKTsKLSMjIyBFbmQgRmls
ZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0
ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5
cGVzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5o
PgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXIgewotcHVibGljOgotICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJh
Y2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdU
Rk1vdmUoZGlzcGF0Y2hlcik7IH0KLSAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3Bh
dGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Ci1wcml2
YXRlOgotICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsK
LX07Ci0KLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jZW5kaWYgLy8gRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jIyMgRW5kIEZpbGU6IFRlc3RBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmRE
aXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1
aXJpbmctcnVudGltZS1jYXN0cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0
cy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0
b3IgewotCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQotCi0KLX0gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09O
VmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCi0jaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgotI2Vu
ZGlmCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNs
dWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7
Ci0KLWNsYXNzIEZyb250ZW5kUm91dGVyOwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMj
IyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQot
IyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0
aW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLW5hbWVzcGFjZSBQcm90b2Nv
bCB7Ci0KLQotCi0vLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KLW5hbWVzcGFjZSBUZXN0IHsKLWNs
YXNzIFR5cGVOZWVkaW5nQ2FzdDsKLWNsYXNzIFJlY3Vyc2l2ZU9iamVjdDE7Ci1jbGFzcyBSZWN1
cnNpdmVPYmplY3QyOwotZW51bSBjbGFzcyBVbmNhc3RlZEFuaW1hbHM7Ci1lbnVtIGNsYXNzIENh
c3RlZEFuaW1hbHM7Ci19IC8vIFRlc3QKLS8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4K
LQotCi0vLyBUeXBlZGVmcy4KLW5hbWVzcGFjZSBUZXN0IHsKLXR5cGVkZWYgaW50IENhc3RlZE9i
amVjdElkOwotdHlwZWRlZiBpbnQgVW5jYXN0ZWRPYmplY3RJZDsKLX0gLy8gVGVzdAotLy8gRW5k
IG9mIHR5cGVkZWZzLgotCi1uYW1lc3BhY2UgVGVzdEhlbHBlcnMgewotCi1TdHJpbmcgZ2V0RW51
bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcg
Z2V0RW51bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFsdWUpCi17Ci0gICAgcmV0dXJuIGdldEVudW1D
b25zdGFudFZhbHVlKHN0YXRpY19jYXN0PGludD4oZW51bVZhbHVlKSk7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIFRlc3RIZWxwZXJzCi0KLW5hbWVzcGFjZSBUZXN0IHsKLS8qIEEgZHVtbXkgdHlwZSB0
aGF0IHJlcXVpcmVzIHJ1bnRpbWUgY2FzdHMsIGFuZCBmb3JjZXMgbm9uLXByaW1pdGl2ZSByZWZl
cmVuY2VkIHR5cGVzIHRvIGFsc28gZW1pdCBydW50aW1lIGNhc3QgaGVscGVycy4gKi8KLWNsYXNz
IFR5cGVOZWVkaW5nQ2FzdCA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKLXB1YmxpYzoKLSAg
ICBlbnVtIHsKLSAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAotICAgICAgICBTdHJpbmdTZXQgPSAx
IDw8IDAsCi0gICAgICAgIE51bWJlclNldCA9IDEgPDwgMSwKLSAgICAgICAgQW5pbWFsc1NldCA9
IDEgPDwgMiwKLSAgICAgICAgSWRTZXQgPSAxIDw8IDMsCi0gICAgICAgIFRyZWVTZXQgPSAxIDw8
IDQsCi0gICAgICAgIEFsbEZpZWxkc1NldCA9IChTdHJpbmdTZXQgfCBOdW1iZXJTZXQgfCBBbmlt
YWxzU2V0IHwgSWRTZXQgfCBUcmVlU2V0KQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTxpbnQgU1RB
VEU+Ci0gICAgY2xhc3MgQnVpbGRlciB7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPEpT
T046Ok9iamVjdD4gbV9yZXN1bHQ7Ci0KLSAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxk
ZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcihSZWY8LypUeXBlTmVlZGluZ0Nhc3QqL0pTT046Ok9i
amVjdD4mJiBvYmplY3QpCi0gICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkK
LSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNT
ZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgZnJpZW5kIGNsYXNzIFR5cGVOZWVkaW5nQ2FzdDsKLSAgICBwdWJsaWM6Ci0KLSAgICAgICAg
QnVpbGRlcjxTVEFURSB8IFN0cmluZ1NldD4mIHNldFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVl
KQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU3RyaW5n
U2V0KSwgcHJvcGVydHlfc3RyaW5nX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXRTdHJpbmcoInN0cmluZyJfcywgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxTdHJpbmdTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
TnVtYmVyU2V0PiYgc2V0TnVtYmVyKGludCB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIE51bWJlclNldCksIHByb3BlcnR5X251bWJlcl9hbHJl
YWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcigibnVtYmVyIl9zLCB2
YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE51bWJlclNldD4oKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBBbmltYWxzU2V0PiYgc2V0QW5pbWFscyhJ
bnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzIHZhbHVlKQotICAgICAgICB7
Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQW5pbWFsc1NldCksIHByb3Bl
cnR5X2FuaW1hbHNfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmlu
ZygiYW5pbWFscyJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1D
b25zdGFudFZhbHVlKHZhbHVlKSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEFuaW1h
bHNTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgSWRTZXQ+JiBz
ZXRJZChpbnQgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBJZFNldCksIHByb3BlcnR5X2lkX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXRJbnRlZ2VyKCJpZCJfcywgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNh
c3RTdGF0ZTxJZFNldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBU
cmVlU2V0PiYgc2V0VHJlZShSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJz
aXZlT2JqZWN0MT4gdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBUcmVlU2V0KSwgcHJvcGVydHlfdHJlZV9hbHJlYWR5X3NldCk7Ci0gICAgICAg
ICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJ0cmVlIl9zLCB2YWx1ZSk7Ci0gICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPFRyZWVTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBSZWY8VHlw
ZU5lZWRpbmdDYXN0PiByZWxlYXNlKCkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKLSAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihUeXBlTmVlZGluZ0Nhc3QpID09IHNpemVvZihK
U09OOjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7Ci0KLSAgICAgICAgICAgIFJlZjxKU09OOjpPYmpl
Y3Q+IGpzb25SZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOwotICAgICAgICAgICAg
YXV0byByZXN1bHQgPSBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxUeXBlTmVlZGluZ0Nh
c3Q+Kj4oJmpzb25SZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAg
IH0KLSAgICB9OwotCi0gICAgLyoKLSAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6Ci0gICAg
ICogUmVmPFR5cGVOZWVkaW5nQ2FzdD4gcmVzdWx0ID0gVHlwZU5lZWRpbmdDYXN0OjpjcmVhdGUo
KQotICAgICAqICAgICAuc2V0U3RyaW5nKC4uLikKLSAgICAgKiAgICAgLnNldE51bWJlciguLi4p
Ci0gICAgICogICAgIC5zZXRBbmltYWxzKC4uLikKLSAgICAgKiAgICAgLnNldElkKC4uLikKLSAg
ICAgKiAgICAgLnNldFRyZWUoLi4uKQotICAgICAqICAgICAucmVsZWFzZSgpOwotICAgICAqLwot
ICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOwotICAg
IH0KLX07Ci0KLS8qICAqLwotZW51bSBjbGFzcyBVbmNhc3RlZEFuaW1hbHMgewotICAgIFBpZ3Mg
PSA0LAotICAgIENvd3MgPSA1LAotICAgIENhdHMgPSA2LAotICAgIEhlbnMgPSAxLAotfTsgLy8g
ZW51bSBjbGFzcyBVbmNhc3RlZEFuaW1hbHMKLS8qICAqLwotZW51bSBjbGFzcyBDYXN0ZWRBbmlt
YWxzIHsKLSAgICBEdWNrcyA9IDAsCi0gICAgSGVucyA9IDEsCi0gICAgQ3Jvd3MgPSAyLAotICAg
IEZsYW1pbmdvcyA9IDMsCi19OyAvLyBlbnVtIGNsYXNzIENhc3RlZEFuaW1hbHMKLWNsYXNzIFJl
Y3Vyc2l2ZU9iamVjdDEgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7Ci1wdWJsaWM6Ci0gICAg
ZW51bSB7Ci0gICAgICAgIE5vRmllbGRzU2V0ID0gMCwKLSAgICAgICAgQWxsRmllbGRzU2V0ID0g
MAotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+Ci0gICAgY2xhc3MgQnVpbGRlciB7
Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7Ci0K
LSAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0
YXRlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1
aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRl
cihSZWY8LypSZWN1cnNpdmVPYmplY3QxKi9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQotICAgICAg
ICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5f
bm9uX2luaXRfc3RhdGUpOwotICAgICAgICB9Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBSZWN1cnNp
dmVPYmplY3QxOwotICAgIHB1YmxpYzoKLQotICAgICAgICBSZWY8UmVjdXJzaXZlT2JqZWN0MT4g
cmVsZWFzZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09
IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7Ci0gICAgICAgICAgICBDT01QSUxF
X0FTU0VSVChzaXplb2YoUmVjdXJzaXZlT2JqZWN0MSkgPT0gc2l6ZW9mKEpTT046Ok9iamVjdCks
IGNhbm5vdF9jYXN0KTsKLQotICAgICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4ganNvblJlc3Vs
dCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7Ci0gICAgICAgICAgICBhdXRvIHJlc3VsdCA9
IFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPFJlY3Vyc2l2ZU9iamVjdDE+Kj4oJmpzb25S
ZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICB9Owot
Ci0gICAgLyoKLSAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6Ci0gICAgICogUmVmPFJlY3Vy
c2l2ZU9iamVjdDE+IHJlc3VsdCA9IFJlY3Vyc2l2ZU9iamVjdDE6OmNyZWF0ZSgpCi0gICAgICog
ICAgIC5yZWxlYXNlKCk7Ci0gICAgICovCi0gICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+
IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKSk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRPYmooUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDI+IHZhbHVlKQotICAgIHsK
LSAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0T2JqZWN0KCJvYmoiX3MsIFdURk1vdmUodmFs
dWUpKTsKLSAgICB9Ci19OwotCi1jbGFzcyBSZWN1cnNpdmVPYmplY3QyIDogcHVibGljIEpTT046
Ok9iamVjdEJhc2UgewotcHVibGljOgotICAgIGVudW0gewotICAgICAgICBOb0ZpZWxkc1NldCA9
IDAsCi0gICAgICAgIEFsbEZpZWxkc1NldCA9IDAKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8aW50
IFNUQVRFPgotICAgIGNsYXNzIEJ1aWxkZXIgewotICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0
cjxKU09OOjpPYmplY3Q+IG1fcmVzdWx0OwotCi0gICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBC
dWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsK
LSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXIoUmVmPC8qUmVjdXJzaXZlT2JqZWN0MiovSlNP
Tjo6T2JqZWN0PiYmIG9iamVjdCkKLSAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmpl
Y3QpKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0Zp
ZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKLSAgICAgICAgfQot
ICAgICAgICBmcmllbmQgY2xhc3MgUmVjdXJzaXZlT2JqZWN0MjsKLSAgICBwdWJsaWM6Ci0KLSAg
ICAgICAgUmVmPFJlY3Vyc2l2ZU9iamVjdDI+IHJlbGVhc2UoKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3Rf
cmVhZHkpOwotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFJlY3Vyc2l2ZU9iamVj
dDIpID09IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7Ci0KLSAgICAgICAgICAg
IFJlZjxKU09OOjpPYmplY3Q+IGpzb25SZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgp
OwotICAgICAgICAgICAgYXV0byByZXN1bHQgPSBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJl
ZjxSZWN1cnNpdmVPYmplY3QyPio+KCZqc29uUmVzdWx0KSk7Ci0gICAgICAgICAgICByZXR1cm4g
cmVzdWx0OwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIC8qCi0gICAgICogU3ludGhldGljIGNv
bnN0cnVjdG9yOgotICAgICAqIFJlZjxSZWN1cnNpdmVPYmplY3QyPiByZXN1bHQgPSBSZWN1cnNp
dmVPYmplY3QyOjpjcmVhdGUoKQotICAgICAqICAgICAucmVsZWFzZSgpOwotICAgICAqLwotICAg
IHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOwotICAgIH0K
LQotICAgIHZvaWQgc2V0T2JqKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1
cnNpdmVPYmplY3QxPiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNl
dE9iamVjdCgib2JqIl9zLCBXVEZNb3ZlKHZhbHVlKSk7Ci0gICAgfQotfTsKLQotfSAvLyBUZXN0
Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6
VGVzdDo6Q2FzdGVkQW5pbWFscz4gewotc3RhdGljIHZvaWQgYXNzZXJ0VmFsdWVIYXNFeHBlY3Rl
ZFR5cGUoSlNPTjo6VmFsdWUqKTsKLX07Ci10ZW1wbGF0ZTw+IHN0cnVjdCBCaW5kaW5nVHJhaXRz
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD4gewotc3RhdGljIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+IHJ1bnRpbWVD
YXN0KFJlZlB0cjxKU09OOjpWYWx1ZT4mJiB2YWx1ZSk7Ci1zdGF0aWMgdm9pZCBhc3NlcnRWYWx1
ZUhhc0V4cGVjdGVkVHlwZShKU09OOjpWYWx1ZSopOwotfTsKLXRlbXBsYXRlPD4gc3RydWN0IEJp
bmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT4g
ewotc3RhdGljIHZvaWQgYXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSlNPTjo6VmFsdWUqKTsK
LX07Ci10ZW1wbGF0ZTw+IHN0cnVjdCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDI+IHsKLXN0YXRpYyB2b2lkIGFzc2VydFZhbHVlSGFzRXhw
ZWN0ZWRUeXBlKEpTT046OlZhbHVlKik7Ci19OwotCi1uYW1lc3BhY2UgVGVzdEhlbHBlcnMgewot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBQcm90b2NvbEVudW1UeXBlPgotT3B0aW9uYWw8UHJvdG9jb2xF
bnVtVHlwZT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYpOwotCi0vLyBF
bnVtcyBpbiB0aGUgJ1Rlc3QnIERvbWFpbgotdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9y
OjpQcm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJp
bmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzPihjb25zdCBTdHJp
bmcmKTsKLXRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNh
c3RlZEFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29s
OjpUZXN0OjpDYXN0ZWRBbmltYWxzPihjb25zdCBTdHJpbmcmKTsKLQotfSAvLyBuYW1lc3BhY2Ug
VGVzdEhlbHBlcnMKLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCi0KLW5hbWVzcGFjZSBXVEYgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgRGVmYXVsdEhhc2g7Ci0KLS8vIEhhc2ggZGVjbGFyYXRpb25zIGluIHRoZSAnVGVzdCcgRG9t
YWluCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6
VGVzdDo6VW5jYXN0ZWRBbmltYWxzPiB7Ci0gICAgdHlwZWRlZiBJbnRIYXNoPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFscz4gSGFzaDsKLX07Ci10ZW1wbGF0ZTw+Ci1z
dHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFs
cz4gewotICAgIHR5cGVkZWYgSW50SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0
ZWRBbmltYWxzPiBIYXNoOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0jIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbE9iamVjdHMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2Jq
ZWN0cy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmlu
Zy1ydW50aW1lLWNhc3RzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVj
dHMuaCIKLQotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLW5hbWVzcGFjZSBQcm90b2NvbCB7
Ci0KLW5hbWVzcGFjZSBUZXN0SGVscGVycyB7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBl
bnVtX2NvbnN0YW50X3ZhbHVlc1tdID0gewotICAgICJEdWNrcyIsCi0gICAgIkhlbnMiLAotICAg
ICJDcm93cyIsCi0gICAgIkZsYW1pbmdvcyIsCi0gICAgIlBpZ3MiLAotICAgICJDb3dzIiwKLSAg
ICAiQ2F0cyIsCi19OwotCi1TdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsK
LSAgICByZXR1cm4gZW51bV9jb25zdGFudF92YWx1ZXNbY29kZV07Ci19Ci0KLS8vIEVudW1zIGlu
IHRoZSAnVGVzdCcgRG9tYWluCi10ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNw
ZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM+KGNvbnN0IFN0cmluZyYgcHJv
dG9jb2xTdHJpbmcpCi17Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1td
ID0gewotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVk
QW5pbWFsczo6UGlncywKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0
OjpVbmNhc3RlZEFuaW1hbHM6OkNvd3MsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90
b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzOjpDYXRzLAotICAgICAgICAoc2l6ZV90KUluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFsczo6SGVucywKLSAgICB9OwotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgNDsgKytpKQotICAgICAgICBpZiAocHJvdG9jb2xTdHJp
bmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNbaV1dKQotICAgICAgICAg
ICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHMpY29u
c3RhbnRWYWx1ZXNbaV07Ci0KLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi10ZW1wbGF0
ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPiBw
YXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVk
QW5pbWFscz4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKLXsKLSAgICBzdGF0aWMgY29u
c3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7Ci0gICAgICAgIChzaXplX3QpSW5zcGVjdG9y
OjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFsczo6RHVja3MsCi0gICAgICAgIChzaXplX3Qp
SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFsczo6SGVucywKLSAgICAgICAg
KHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzOjpDcm93cywK
LSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxz
OjpGbGFtaW5nb3MsCi0gICAgfTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDQ7ICsraSkK
LSAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0
YW50VmFsdWVzW2ldXSkKLSAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6
VGVzdDo6Q2FzdGVkQW5pbWFscyljb25zdGFudFZhbHVlc1tpXTsKLQotICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7Ci19Ci0KLQotfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKLQotCi0KLXZvaWQg
QmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPjo6
YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSlNPTjo6VmFsdWUqIHZhbHVlKQotewotI2lmIEFT
U0VSVF9FTkFCTEVECi0gICAgQVNTRVJUX0FSRyh2YWx1ZSwgdmFsdWUpOwotICAgIFN0cmluZyBy
ZXN1bHQ7Ci0gICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdmFsdWUtPmFzU3RyaW5nKHJlc3VsdCk7
Ci0gICAgQVNTRVJUKGNhc3RTdWNjZWVkZWQpOwotICAgIEFTU0VSVChyZXN1bHQgPT0gIkR1Y2tz
IiB8fCByZXN1bHQgPT0gIkhlbnMiIHx8IHJlc3VsdCA9PSAiQ3Jvd3MiIHx8IHJlc3VsdCA9PSAi
RmxhbWluZ29zIik7Ci0jZWxzZSAvLyBBU1NFUlRfRU5BQkxFRAotICAgIFVOVVNFRF9QQVJBTSh2
YWx1ZSk7Ci0jZW5kaWYgLy8gQVNTRVJUX0VOQUJMRUQKLX0KLQotdm9pZCBCaW5kaW5nVHJhaXRz
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD46OmFzc2VydFZhbHVl
SGFzRXhwZWN0ZWRUeXBlKEpTT046OlZhbHVlKiB2YWx1ZSkKLXsKLSNpZiBBU1NFUlRfRU5BQkxF
RAotICAgIEFTU0VSVF9BUkcodmFsdWUsIHZhbHVlKTsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0
PiBvYmplY3Q7Ci0gICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdmFsdWUtPmFzT2JqZWN0KG9iamVj
dCk7Ci0gICAgQVNTRVJUX1VOVVNFRChjYXN0U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsKLSAg
ICB7Ci0gICAgICAgIGF1dG8gc3RyaW5nUG9zID0gb2JqZWN0LT5maW5kKCJzdHJpbmciX3MpOwot
ICAgICAgICBBU1NFUlQoc3RyaW5nUG9zICE9IG9iamVjdC0+ZW5kKCkpOwotICAgICAgICBCaW5k
aW5nVHJhaXRzPFN0cmluZz46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKHN0cmluZ1Bvcy0+
dmFsdWUuZ2V0KCkpOwotICAgIH0KLSAgICB7Ci0gICAgICAgIGF1dG8gbnVtYmVyUG9zID0gb2Jq
ZWN0LT5maW5kKCJudW1iZXIiX3MpOwotICAgICAgICBBU1NFUlQobnVtYmVyUG9zICE9IG9iamVj
dC0+ZW5kKCkpOwotICAgICAgICBCaW5kaW5nVHJhaXRzPGludD46OmFzc2VydFZhbHVlSGFzRXhw
ZWN0ZWRUeXBlKG51bWJlclBvcy0+dmFsdWUuZ2V0KCkpOwotICAgIH0KLSAgICB7Ci0gICAgICAg
IGF1dG8gYW5pbWFsc1BvcyA9IG9iamVjdC0+ZmluZCgiYW5pbWFscyJfcyk7Ci0gICAgICAgIEFT
U0VSVChhbmltYWxzUG9zICE9IG9iamVjdC0+ZW5kKCkpOwotICAgICAgICBCaW5kaW5nVHJhaXRz
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+Ojphc3NlcnRWYWx1ZUhh
c0V4cGVjdGVkVHlwZShhbmltYWxzUG9zLT52YWx1ZS5nZXQoKSk7Ci0gICAgfQotICAgIHsKLSAg
ICAgICAgYXV0byBpZFBvcyA9IG9iamVjdC0+ZmluZCgiaWQiX3MpOwotICAgICAgICBBU1NFUlQo
aWRQb3MgIT0gb2JqZWN0LT5lbmQoKSk7Ci0gICAgICAgIEJpbmRpbmdUcmFpdHM8aW50Pjo6YXNz
ZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoaWRQb3MtPnZhbHVlLmdldCgpKTsKLSAgICB9Ci0gICAg
ewotICAgICAgICBhdXRvIHRyZWVQb3MgPSBvYmplY3QtPmZpbmQoInRyZWUiX3MpOwotICAgICAg
ICBBU1NFUlQodHJlZVBvcyAhPSBvYmplY3QtPmVuZCgpKTsKLSAgICAgICAgQmluZGluZ1RyYWl0
czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QxPjo6YXNzZXJ0VmFs
dWVIYXNFeHBlY3RlZFR5cGUodHJlZVBvcy0+dmFsdWUuZ2V0KCkpOwotICAgIH0KLQotICAgIGlu
dCBmb3VuZFByb3BlcnRpZXNDb3VudCA9IDU7Ci0gICAgaWYgKGZvdW5kUHJvcGVydGllc0NvdW50
ICE9IG9iamVjdC0+c2l6ZSgpKQotICAgICAgICBGQVRBTCgiVW5leHBlY3RlZCBwcm9wZXJ0aWVz
IGluIG9iamVjdDogJXNcbiIsIG9iamVjdC0+dG9KU09OU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkp
OwotI2Vsc2UgLy8gQVNTRVJUX0VOQUJMRUQKLSAgICBVTlVTRURfUEFSQU0odmFsdWUpOwotI2Vu
ZGlmIC8vIEFTU0VSVF9FTkFCTEVECi19Ci0KLVJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpU
ZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6
VGVzdDo6VHlwZU5lZWRpbmdDYXN0Pjo6cnVudGltZUNhc3QoUmVmUHRyPEpTT046OlZhbHVlPiYm
IHZhbHVlKQotewotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHJlc3VsdDsKLSAgICBib29sIGNh
c3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNPYmplY3QocmVzdWx0KTsKLSAgICBBU1NFUlRfVU5VU0VE
KGNhc3RTdWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQpOwotICAgIEJpbmRpbmdUcmFpdHM8SW5zcGVj
dG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0Pjo6YXNzZXJ0VmFsdWVIYXNFeHBl
Y3RlZFR5cGUocmVzdWx0LmdldCgpKTsKLSAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoSW5zcGVj
dG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0KSA9PSBzaXplb2YoSlNPTjo6T2Jq
ZWN0QmFzZSksIHR5cGVfY2FzdF9wcm9ibGVtKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SW5z
cGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0Kj4oc3RhdGljX2Nhc3Q8SlNP
Tjo6T2JqZWN0QmFzZSo+KHJlc3VsdC5nZXQoKSkpOwotfQotCi0KLXZvaWQgQmluZGluZ1RyYWl0
czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QxPjo6YXNzZXJ0VmFs
dWVIYXNFeHBlY3RlZFR5cGUoSlNPTjo6VmFsdWUqIHZhbHVlKQotewotI2lmIEFTU0VSVF9FTkFC
TEVECi0gICAgQVNTRVJUX0FSRyh2YWx1ZSwgdmFsdWUpOwotICAgIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+IG9iamVjdDsKLSAgICBib29sIGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNPYmplY3Qob2Jq
ZWN0KTsKLSAgICBBU1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQpOwot
Ci0gICAgaW50IGZvdW5kUHJvcGVydGllc0NvdW50ID0gMDsKLSAgICB7Ci0gICAgICAgIGF1dG8g
b2JqUG9zID0gb2JqZWN0LT5maW5kKCJvYmoiX3MpOwotICAgICAgICBpZiAob2JqUG9zICE9IG9i
amVjdC0+ZW5kKCkpIHsKLSAgICAgICAgICAgIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90
b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0Mj46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBl
KG9ialBvcy0+dmFsdWUuZ2V0KCkpOwotICAgICAgICAgICAgKytmb3VuZFByb3BlcnRpZXNDb3Vu
dDsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoZm91bmRQcm9wZXJ0aWVzQ291bnQgIT0gb2Jq
ZWN0LT5zaXplKCkpCi0gICAgICAgIEZBVEFMKCJVbmV4cGVjdGVkIHByb3BlcnRpZXMgaW4gb2Jq
ZWN0OiAlc1xuIiwgb2JqZWN0LT50b0pTT05TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7Ci0jZWxz
ZSAvLyBBU1NFUlRfRU5BQkxFRAotICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7Ci0jZW5kaWYgLy8g
QVNTRVJUX0VOQUJMRUQKLX0KLQotdm9pZCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDI+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShK
U09OOjpWYWx1ZSogdmFsdWUpCi17Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBBU1NFUlRfQVJH
KHZhbHVlLCB2YWx1ZSk7Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gb2JqZWN0OwotICAgIGJv
b2wgY2FzdFN1Y2NlZWRlZCA9IHZhbHVlLT5hc09iamVjdChvYmplY3QpOwotICAgIEFTU0VSVF9V
TlVTRUQoY2FzdFN1Y2NlZWRlZCwgY2FzdFN1Y2NlZWRlZCk7Ci0KLSAgICBpbnQgZm91bmRQcm9w
ZXJ0aWVzQ291bnQgPSAwOwotICAgIHsKLSAgICAgICAgYXV0byBvYmpQb3MgPSBvYmplY3QtPmZp
bmQoIm9iaiJfcyk7Ci0gICAgICAgIGlmIChvYmpQb3MgIT0gb2JqZWN0LT5lbmQoKSkgewotICAg
ICAgICAgICAgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNp
dmVPYmplY3QxPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUob2JqUG9zLT52YWx1ZS5nZXQo
KSk7Ci0gICAgICAgICAgICArK2ZvdW5kUHJvcGVydGllc0NvdW50OwotICAgICAgICB9Ci0gICAg
fQotICAgIGlmIChmb3VuZFByb3BlcnRpZXNDb3VudCAhPSBvYmplY3QtPnNpemUoKSkKLSAgICAg
ICAgRkFUQUwoIlVuZXhwZWN0ZWQgcHJvcGVydGllcyBpbiBvYmplY3Q6ICVzXG4iLCBvYmplY3Qt
PnRvSlNPTlN0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKLSNlbHNlIC8vIEFTU0VSVF9FTkFCTEVE
Ci0gICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKLSNlbmRpZiAvLyBBU1NFUlRfRU5BQkxFRAotfQot
Ci19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQot
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2luY2x1ZGUgPHd0Zi9S
ZXRhaW5QdHIuaD4KLQotCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLX0gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRj
aGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMu
bW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50
aW1lLWNhc3RzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0
Y2hlcnMuaCIKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW5jbHVkZSAi
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMu
aD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgot
Ci0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPFdlYkluc3Bl
Y3Rvci9UZXN0UHJvdG9jb2wuaD4KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1
bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAot
QGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0KLSMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24uaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwu
aCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KLSNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0j
aW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLQot
dXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24KLXsKLSAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9j
b250cm9sbGVyOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdt
ZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBzZWxmID0gW3N1
cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NF
UlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVy
biBzZWxmOwotfQotCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19
Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0K
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3Rz
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9y
dCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLmgiCi0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yOwotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRj
aGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8Rm91bmRh
dGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpT
T05PYmplY3QuaD4KLQotCi1AY2xhc3MgVGVzdFByb3RvY29sVGVzdFR5cGVOZWVkaW5nQ2FzdDsK
LUBjbGFzcyBUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MTsKLUBjbGFzcyBUZXN0UHJv
dG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MjsKLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwg
VGVzdFByb3RvY29sUGxhdGZvcm0pIHsKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbCwKLSAg
ICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWMsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1J
T1MsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUywKLX07Ci0KLQotdHlwZWRlZiBOU19F
TlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFscykgewotICAgIFRl
c3RQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHNQaWdzLAotICAgIFRlc3RQcm90b2NvbFRlc3RV
bmNhc3RlZEFuaW1hbHNDb3dzLAotICAgIFRlc3RQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHND
YXRzLAotICAgIFRlc3RQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHNIZW5zLAotfTsKLQotdHlw
ZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHMpIHsK
LSAgICBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFsc0R1Y2tzLAotICAgIFRlc3RQcm90b2Nv
bFRlc3RDYXN0ZWRBbmltYWxzSGVucywKLSAgICBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFs
c0Nyb3dzLAotICAgIFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzRmxhbWluZ29zLAotfTsK
LQotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2Ug
VGVzdFByb3RvY29sVGVzdFR5cGVOZWVkaW5nQ2FzdCA6IFJXSVByb3RvY29sSlNPTk9iamVjdAot
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICos
IGlkPiAqKXBheWxvYWQ7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDoo
UldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKLS0gKGluc3RhbmNldHlwZSlpbml0
V2l0aFN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcgbnVtYmVyOihpbnQpbnVtYmVyIGFuaW1hbHM6
KFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzKWFuaW1hbHMgaWRlbnRpZmllcjooaW50KWlk
ZW50aWZpZXIgdHJlZTooVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgKil0cmVlOwot
LyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICpzdHJp
bmc7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQgbnVt
YmVyOwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgVGVzdFBy
b3RvY29sVGVzdENhc3RlZEFuaW1hbHMgYW5pbWFsczsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0
eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCBpZGVudGlmaWVyOwotLyogcmVxdWlyZWQgKi8gQHBy
b3BlcnR5IChub25hdG9taWMsIHJldGFpbikgVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVj
dDEgKnRyZWU7Ci1AZW5kCi0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0Iikp
KQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSA6IFJXSVByb3Rv
Y29sSlNPTk9iamVjdAotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9u
YXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQ7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQ
cm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKLS8qIG9w
dGlvbmFsICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIFRlc3RQcm90b2NvbFRlc3RS
ZWN1cnNpdmVPYmplY3QyICpvYmo7Ci1AZW5kCi0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkg
KCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0
MiA6IFJXSVByb3RvY29sSlNPTk9iamVjdAotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9h
ZDooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQ7Ci0tIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9i
amVjdDsKLS8qIG9wdGlvbmFsICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIFRlc3RQ
cm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxICpvYmo7Ci1AZW5kCi0KLQotCi0KLQotCi0jaW1w
b3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbEludGVybmFsLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBl
LXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0
UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVn
bWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5o
PgotCi0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90
b2NvbC5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9u
cy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0Vu
dW1UeXBlPgotT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3Qg
U3RyaW5nJiB2YWx1ZSk7Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJv
dG9jb2xQbGF0Zm9ybSB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBjYXNlIFRl
c3RQcm90b2NvbFBsYXRmb3JtQWxsOgotICAgICAgICByZXR1cm4gImFsbCJfczsKLSAgICBjYXNl
IFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzoKLSAgICAgICAgcmV0dXJuICJnZW5lcmljIl9z
OwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1JT1M6Ci0gICAgICAgIHJldHVybiAiaW9z
Il9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzoKLSAgICAgICAgcmV0dXJu
ICJtYWNvcyJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0
UHJvdG9jb2xQbGF0Zm9ybT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUp
Ci17Ci0gICAgaWYgKHZhbHVlID09ICJhbGwiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29s
UGxhdGZvcm1BbGw7Ci0gICAgaWYgKHZhbHVlID09ICJnZW5lcmljIikKLSAgICAgICAgcmV0dXJu
IFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzsKLSAgICBpZiAodmFsdWUgPT0gImlvcyIpCi0g
ICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzsKLSAgICBpZiAodmFsdWUgPT0g
Im1hY29zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M7Ci0gICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJp
bmcoVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFscyB2YWx1ZSkKLXsKLSAgICBzd2l0Y2go
dmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHNQaWdzOgot
ICAgICAgICByZXR1cm4gIlBpZ3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xUZXN0VW5jYXN0
ZWRBbmltYWxzQ293czoKLSAgICAgICAgcmV0dXJuICJDb3dzIl9zOwotICAgIGNhc2UgVGVzdFBy
b3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc0NhdHM6Ci0gICAgICAgIHJldHVybiAiQ2F0cyJfczsK
LSAgICBjYXNlIFRlc3RQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHNIZW5zOgotICAgICAgICBy
ZXR1cm4gIkhlbnMiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8
VGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFscz4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0
IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJQaWdzIikKLSAgICAgICAgcmV0
dXJuIFRlc3RQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHNQaWdzOwotICAgIGlmICh2YWx1ZSA9
PSAiQ293cyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxz
Q293czsKLSAgICBpZiAodmFsdWUgPT0gIkNhdHMiKQotICAgICAgICByZXR1cm4gVGVzdFByb3Rv
Y29sVGVzdFVuY2FzdGVkQW5pbWFsc0NhdHM7Ci0gICAgaWYgKHZhbHVlID09ICJIZW5zIikKLSAg
ICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHNIZW5zOwotICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhU
ZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFscyB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUp
IHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzRHVja3M6Ci0gICAgICAg
IHJldHVybiAiRHVja3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFs
c0hlbnM6Ci0gICAgICAgIHJldHVybiAiSGVucyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFRl
c3RDYXN0ZWRBbmltYWxzQ3Jvd3M6Ci0gICAgICAgIHJldHVybiAiQ3Jvd3MiX3M7Ci0gICAgY2Fz
ZSBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFsc0ZsYW1pbmdvczoKLSAgICAgICAgcmV0dXJu
ICJGbGFtaW5nb3MiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8
VGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHM+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBT
dHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiRHVja3MiKQotICAgICAgICByZXR1
cm4gVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHNEdWNrczsKLSAgICBpZiAodmFsdWUgPT0g
IkhlbnMiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHNIZW5z
OwotICAgIGlmICh2YWx1ZSA9PSAiQ3Jvd3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29s
VGVzdENhc3RlZEFuaW1hbHNDcm93czsKLSAgICBpZiAodmFsdWUgPT0gIkZsYW1pbmdvcyIpCi0g
ICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFsc0ZsYW1pbmdvczsKLSAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQot
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQg
IlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90
b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0K
LUBpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChUZXN0RG9tYWluKQotCi0r
ICh2b2lkKV9wYXJzZVR5cGVOZWVkaW5nQ2FzdDooVGVzdFByb3RvY29sVGVzdFR5cGVOZWVkaW5n
Q2FzdCAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLSsgKHZvaWQpX3BhcnNl
Q2FzdGVkT2JqZWN0SWQ6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXls
b2FkOwotKyAodm9pZClfcGFyc2VVbmNhc3RlZE9iamVjdElkOihOU051bWJlciAqKilvdXRWYWx1
ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLSsgKHZvaWQpX3BhcnNlVW5jYXN0ZWRBbmltYWxz
OihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLSsgKHZvaWQp
X3BhcnNlQ2FzdGVkQW5pbWFsczooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlk
KXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZVJlY3Vyc2l2ZU9iamVjdDE6KFRlc3RQcm90b2NvbFRl
c3RSZWN1cnNpdmVPYmplY3QxICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwot
KyAodm9pZClfcGFyc2VSZWN1cnNpdmVPYmplY3QyOihUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZl
T2JqZWN0MiAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLQotQGVuZAotCi1A
aW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChUZXN0RG9tYWluKQot
Ci0rICh2b2lkKV9wYXJzZVR5cGVOZWVkaW5nQ2FzdDooVGVzdFByb3RvY29sVGVzdFR5cGVOZWVk
aW5nQ2FzdCAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOwot
ICAgICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sVGVzdFR5cGVOZWVkaW5nQ2FzdCBhbGxvY10g
aW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOwotfQotCi0rICh2b2lkKV9wYXJzZUNhc3RlZE9iamVj
dElkOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TTnVtYmVyIGNsYXNzXSk7
Ci0gICAgKm91dFZhbHVlID0gKE5TTnVtYmVyICopcGF5bG9hZDsKLX0KLQotKyAodm9pZClfcGFy
c2VVbmNhc3RlZE9iamVjdElkOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQp
cGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05T
TnVtYmVyIGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gKE5TTnVtYmVyICopcGF5bG9hZDsKLX0K
LQotKyAodm9pZClfcGFyc2VVbmNhc3RlZEFuaW1hbHM6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZy
b21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQ
RShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKLSAgICBPcHRpb25hbDxUZXN0UHJvdG9jb2xU
ZXN0VW5jYXN0ZWRBbmltYWxzPiByZXN1bHQgPSBJbnNwZWN0b3I6OmZyb21Qcm90b2NvbFN0cmlu
ZzxUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzPihwYXlsb2FkKTsKLSAgICBUSFJPV19F
WENFUFRJT05fRk9SX0JBRF9FTlVNX1ZBTFVFKHJlc3VsdCwgQCJVbmNhc3RlZEFuaW1hbHMiKTsK
LSAgICAqb3V0VmFsdWUgPSBAKHJlc3VsdC52YWx1ZSgpKTsKLX0KLQotKyAodm9pZClfcGFyc2VD
YXN0ZWRBbmltYWxzOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9h
ZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TU3RyaW5n
IGNsYXNzXSk7Ci0gICAgT3B0aW9uYWw8VGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHM+IHJl
c3VsdCA9IEluc3BlY3Rvcjo6ZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbFRlc3RDYXN0
ZWRBbmltYWxzPihwYXlsb2FkKTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9FTlVNX1ZB
TFVFKHJlc3VsdCwgQCJDYXN0ZWRBbmltYWxzIik7Ci0gICAgKm91dFZhbHVlID0gQChyZXN1bHQu
dmFsdWUoKSk7Ci19Ci0KLSsgKHZvaWQpX3BhcnNlUmVjdXJzaXZlT2JqZWN0MTooVGVzdFByb3Rv
Y29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxv
YWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rp
b25hcnkgY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbFRlc3RSZWN1cnNp
dmVPYmplY3QxIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07Ci19Ci0KLSsgKHZvaWQp
X3BhcnNlUmVjdXJzaXZlT2JqZWN0MjooVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDIg
Kiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJ
T05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKLSAgICAqb3V0
VmFsdWUgPSBbW1Rlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QyIGFsbG9jXSBpbml0V2l0
aFBheWxvYWQ6cGF5bG9hZF07Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlw
ZXMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1y
dW50aW1lLWNhc3RzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9j
b2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbXBv
cnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQot
QGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFRlc3RUeXBlTmVlZGluZ0Nhc3QKLQotLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcg
KiwgaWQ+ICopcGF5bG9hZAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAg
ICAgICByZXR1cm4gbmlsOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9Q
RVJUWShwYXlsb2FkW0Aic3RyaW5nIl0sIEAic3RyaW5nIik7Ci0gICAgc2VsZi5zdHJpbmcgPSBw
YXlsb2FkW0Aic3RyaW5nIl07Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BS
T1BFUlRZKHBheWxvYWRbQCJudW1iZXIiXSwgQCJudW1iZXIiKTsKLSAgICBzZWxmLm51bWJlciA9
IFtwYXlsb2FkW0AibnVtYmVyIl0gaW50ZWdlclZhbHVlXTsKLQotICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImFuaW1hbHMiXSwgQCJhbmltYWxzIik7
Ci0gICAgT3B0aW9uYWw8VGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHM+IGFuaW1hbHMgPSBm
cm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHM+KHBheWxvYWRb
QCJhbmltYWxzIl0pOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX0VOVU1fVkFMVUUoYW5p
bWFscywgQCJhbmltYWxzIik7Ci0gICAgc2VsZi5hbmltYWxzID0gYW5pbWFscy52YWx1ZSgpOwot
Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiaWQi
XSwgQCJpZCIpOwotICAgIHNlbGYuaWRlbnRpZmllciA9IFtwYXlsb2FkW0AiaWQiXSBpbnRlZ2Vy
VmFsdWVdOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXls
b2FkW0AidHJlZSJdLCBAInRyZWUiKTsKLSAgICBzZWxmLnRyZWUgPSBbW1Rlc3RQcm90b2NvbFRl
c3RSZWN1cnNpdmVPYmplY3QxIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZFtAInRyZWUi
XV07Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3Rv
Y29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilvYmplY3QKLXsKLSAgICBpZiAoIShz
ZWxmID0gW3N1cGVyIGluaXRXaXRoSlNPTk9iamVjdDpbb2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0
KCldKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nIG51bWJlcjooaW50
KW51bWJlciBhbmltYWxzOihUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFscylhbmltYWxzIGlk
ZW50aWZpZXI6KGludClpZGVudGlmaWVyIHRyZWU6KFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVP
YmplY3QxICopdHJlZQotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAg
ICByZXR1cm4gbmlsOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJU
WShzdHJpbmcsIEAic3RyaW5nIik7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9Q
Uk9QRVJUWSh0cmVlLCBAInRyZWUiKTsKLQotICAgIHNlbGYuc3RyaW5nID0gc3RyaW5nOwotICAg
IHNlbGYubnVtYmVyID0gbnVtYmVyOwotICAgIHNlbGYuYW5pbWFscyA9IGFuaW1hbHM7Ci0gICAg
c2VsZi5pZGVudGlmaWVyID0gaWRlbnRpZmllcjsKLSAgICBzZWxmLnRyZWUgPSB0cmVlOwotCi0g
ICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpc2V0U3RyaW5nOihOU1N0cmluZyAqKXN0cmlu
ZwotewotICAgIFtzdXBlciBzZXRTdHJpbmc6c3RyaW5nIGZvcktleTpAInN0cmluZyJdOwotfQot
Ci0tIChOU1N0cmluZyAqKXN0cmluZwotewotICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5
OkAic3RyaW5nIl07Ci19Ci0KLS0gKHZvaWQpc2V0TnVtYmVyOihpbnQpbnVtYmVyCi17Ci0gICAg
W3N1cGVyIHNldEludGVnZXI6bnVtYmVyIGZvcktleTpAIm51bWJlciJdOwotfQotCi0tIChpbnQp
bnVtYmVyCi17Ci0gICAgcmV0dXJuIFtzdXBlciBpbnRlZ2VyRm9yS2V5OkAibnVtYmVyIl07Ci19
Ci0KLS0gKHZvaWQpc2V0QW5pbWFsczooVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHMpYW5p
bWFscwotewotICAgIFtzdXBlciBzZXRTdHJpbmc6dG9Qcm90b2NvbFN0cmluZyhhbmltYWxzKSBm
b3JLZXk6QCJhbmltYWxzIl07Ci19Ci0KLS0gKFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxz
KWFuaW1hbHMKLXsKLSAgICByZXR1cm4gZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbFRl
c3RDYXN0ZWRBbmltYWxzPihbc3VwZXIgc3RyaW5nRm9yS2V5OkAiYW5pbWFscyJdKS52YWx1ZSgp
OwotfQotCi0tICh2b2lkKXNldElkZW50aWZpZXI6KGludClpZGVudGlmaWVyCi17Ci0gICAgW3N1
cGVyIHNldEludGVnZXI6aWRlbnRpZmllciBmb3JLZXk6QCJpZCJdOwotfQotCi0tIChpbnQpaWRl
bnRpZmllcgotewotICAgIHJldHVybiBbc3VwZXIgaW50ZWdlckZvcktleTpAImlkIl07Ci19Ci0K
LS0gKHZvaWQpc2V0VHJlZTooVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgKil0cmVl
Ci17Ci0gICAgW3N1cGVyIHNldE9iamVjdDp0cmVlIGZvcktleTpAInRyZWUiXTsKLX0KLQotLSAo
VGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgKil0cmVlCi17Ci0gICAgUldJUHJvdG9j
b2xKU09OT2JqZWN0ICpvYmplY3QgPSBbc3VwZXIgb2JqZWN0Rm9yS2V5OkAidHJlZSJdOwotICAg
IGlmICghb2JqZWN0KQotICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiBbW1Rlc3RQcm90
b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxIGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6W1tzdXBl
ciBvYmplY3RGb3JLZXk6QCJ0cmVlIl0gdG9KU09OT2JqZWN0XS5nZXQoKV07Ci19Ci0KLUBlbmQK
LQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxCi0KLS0g
KGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3Ry
aW5nICosIGlkPiAqKXBheWxvYWQKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkK
LSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIHNlbGYub2JqID0gW1tUZXN0UHJvdG9jb2xUZXN0
UmVjdXJzaXZlT2JqZWN0MiBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRbQCJvYmoiXV07
Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29s
T2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilvYmplY3QKLXsKLSAgICBpZiAoIShzZWxm
ID0gW3N1cGVyIGluaXRXaXRoSlNPTk9iamVjdDpbb2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0KCld
KSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lk
KXNldE9iajooVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDIgKilvYmoKLXsKLSAgICBb
c3VwZXIgc2V0T2JqZWN0Om9iaiBmb3JLZXk6QCJvYmoiXTsKLX0KLQotLSAoVGVzdFByb3RvY29s
VGVzdFJlY3Vyc2l2ZU9iamVjdDIgKilvYmoKLXsKLSAgICBSV0lQcm90b2NvbEpTT05PYmplY3Qg
Km9iamVjdCA9IFtzdXBlciBvYmplY3RGb3JLZXk6QCJvYmoiXTsKLSAgICBpZiAoIW9iamVjdCkK
LSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4gW1tUZXN0UHJvdG9jb2xUZXN0UmVjdXJz
aXZlT2JqZWN0MiBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0Oltbc3VwZXIgb2JqZWN0Rm9yS2V5
OkAib2JqIl0gdG9KU09OT2JqZWN0XS5nZXQoKV07Ci19Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0
aW9uIFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QyCi0KLS0gKGluc3RhbmNldHlwZSlp
bml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBh
eWxvYWQKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJu
IG5pbDsKLQotICAgIHNlbGYub2JqID0gW1tUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0
MSBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRbQCJvYmoiXV07Ci0KLSAgICByZXR1cm4g
c2VsZjsKLX0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90
b2NvbEpTT05PYmplY3QgKilvYmplY3QKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRX
aXRoSlNPTk9iamVjdDpbb2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0KCldKSkKLSAgICAgICAgcmV0
dXJuIG5pbDsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKXNldE9iajooVGVzdFBy
b3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgKilvYmoKLXsKLSAgICBbc3VwZXIgc2V0T2JqZWN0
Om9iaiBmb3JLZXk6QCJvYmoiXTsKLX0KLQotLSAoVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9i
amVjdDEgKilvYmoKLXsKLSAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9iamVjdCA9IFtzdXBl
ciBvYmplY3RGb3JLZXk6QCJvYmoiXTsKLSAgICBpZiAoIW9iamVjdCkKLSAgICAgICAgcmV0dXJu
IG5pbDsKLSAgICByZXR1cm4gW1tUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSBhbGxv
Y10gaW5pdFdpdGhKU09OT2JqZWN0Oltbc3VwZXIgb2JqZWN0Rm9yS2V5OkAib2JqIl0gdG9KU09O
T2JqZWN0XS5nZXQoKV07Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC90eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpz
b24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvZXhwZWN0ZWQvdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uLXJlc3VsdApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTQzMGVkZTUwOGIuLjAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2V4cGVjdGVkL3R5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQKKysrIC9kZXYv
bnVsbApAQCAtMSwxMTY0ICswLDAgQEAKLSMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5k
Q29tbWFuZHMuanMKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXdpdGgt
b3Blbi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLSMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0K
LSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQotI2luY2x1ZGUg
IlRlc3RQcm90b2NvbFR5cGVzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JG
cm9udGVuZFJvdXRlci5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgQWx0ZXJu
YXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZvaWQgc2V0QmFja2VuZERpc3Bh
dGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5k
RGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KLSAgICBCYWNrZW5kRGlzcGF0Y2hl
ciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVy
LmdldCgpOyB9Ci1wcml2YXRlOgotICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNr
ZW5kRGlzcGF0Y2hlcjsKLX07Ci0KLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0j
ZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jIyMgRW5k
IEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFBy
b3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVz
cGFjZSBJbnNwZWN0b3IgewotCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQotCi0KLX0g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNo
ZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUg
PHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCi0jaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVy
cy5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAK
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0K
LSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1
ZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3Bl
Y3RvciB7Ci0KLWNsYXNzIEZyb250ZW5kUm91dGVyOwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
LQotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0
aW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLW5hbWVzcGFjZSBQcm90b2Nv
bCB7Ci0KLQotCi0vLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KLW5hbWVzcGFjZSBUZXN0IHsKLWNs
YXNzIE5vT3BlblBhcmFtZXRlcnM7Ci1jbGFzcyBPcGVuUGFyYW1ldGVyczsKLX0gLy8gVGVzdAot
Ly8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgotCi0KLQotCi1uYW1lc3BhY2UgVGVzdCB7
Ci1jbGFzcyBOb09wZW5QYXJhbWV0ZXJzIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewotcHVi
bGljOgotICAgIGVudW0gewotICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCi0gICAgICAgIE9uZVNl
dCA9IDEgPDwgMCwKLSAgICAgICAgVHdvU2V0ID0gMSA8PCAxLAotICAgICAgICBBbGxGaWVsZHNT
ZXQgPSAoT25lU2V0IHwgVHdvU2V0KQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+
Ci0gICAgY2xhc3MgQnVpbGRlciB7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPEpTT046
Ok9iamVjdD4gbV9yZXN1bHQ7Ci0KLSAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8
U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
ICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgQnVpbGRlcihSZWY8LypOb09wZW5QYXJhbWV0ZXJzKi9KU09OOjpPYmpl
Y3Q+JiYgb2JqZWN0KQotICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0
LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwotICAgICAgICB9Ci0gICAgICAg
IGZyaWVuZCBjbGFzcyBOb09wZW5QYXJhbWV0ZXJzOwotICAgIHB1YmxpYzoKLQotICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgT25lU2V0PiYgc2V0T25lKGRvdWJsZSB2YWx1ZSkKLSAgICAgICAgewot
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE9uZVNldCksIHByb3BlcnR5X29u
ZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0RG91YmxlKCJvbmUiX3Ms
IHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8T25lU2V0PigpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IFR3b1NldD4mIHNldFR3byhkb3VibGUgdmFs
dWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUd29T
ZXQpLCBwcm9wZXJ0eV90d29fYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dERvdWJsZSgidHdvIl9zLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFR3
b1NldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIFJlZjxOb09wZW5QYXJhbWV0ZXJzPiByZWxl
YXNlKCkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxs
RmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKLSAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKHNpemVvZihOb09wZW5QYXJhbWV0ZXJzKSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0KSwgY2Fu
bm90X2Nhc3QpOwotCi0gICAgICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uUmVzdWx0ID0g
bV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKLSAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gV1RG
TW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8Tm9PcGVuUGFyYW1ldGVycz4qPigmanNvblJlc3Vs
dCkpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgIH07Ci0KLSAg
ICAvKgotICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKLSAgICAgKiBSZWY8Tm9PcGVuUGFy
YW1ldGVycz4gcmVzdWx0ID0gTm9PcGVuUGFyYW1ldGVyczo6Y3JlYXRlKCkKLSAgICAgKiAgICAg
LnNldE9uZSguLi4pCi0gICAgICogICAgIC5zZXRUd28oLi4uKQotICAgICAqICAgICAucmVsZWFz
ZSgpOwotICAgICAqLwotICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6
Y3JlYXRlKCkpOwotICAgIH0KLX07Ci0KLWNsYXNzIE9wZW5QYXJhbWV0ZXJzIDogcHVibGljIEpT
T046Ok9iamVjdCB7Ci1wdWJsaWM6Ci0gICAgZW51bSB7Ci0gICAgICAgIE5vRmllbGRzU2V0ID0g
MCwKLSAgICAgICAgQWxwaGFTZXQgPSAxIDw8IDAsCi0gICAgICAgIEJldGFTZXQgPSAxIDw8IDEs
Ci0gICAgICAgIEFsbEZpZWxkc1NldCA9IChBbHBoYVNldCB8IEJldGFTZXQpCi0gICAgfTsKLQot
ICAgIHRlbXBsYXRlPGludCBTVEFURT4KLSAgICBjbGFzcyBCdWlsZGVyIHsKLSAgICBwcml2YXRl
OgotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBtX3Jlc3VsdDsKLQotICAgICAgICB0ZW1w
bGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8
IFNURVA+Kj4odGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyKFJlZjwvKk9wZW5Q
YXJhbWV0ZXJzKi9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQotICAgICAgICAgICAgOiBtX3Jlc3Vs
dChXVEZNb3ZlKG9iamVjdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUp
OwotICAgICAgICB9Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBPcGVuUGFyYW1ldGVyczsKLSAgICBw
dWJsaWM6Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IEFscGhhU2V0PiYgc2V0QWxwaGEoZG91
YmxlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRF
ICYgQWxwaGFTZXQpLCBwcm9wZXJ0eV9hbHBoYV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0RG91YmxlKCJhbHBoYSJfcywgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxBbHBoYVNldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBCZXRhU2V0PiYgc2V0QmV0YShkb3VibGUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBCZXRhU2V0KSwgcHJvcGVydHlfYmV0YV9hbHJl
YWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0RG91YmxlKCJiZXRhIl9zLCB2YWx1
ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEJldGFTZXQ+KCk7Ci0gICAgICAgIH0K
LQotICAgICAgICBSZWY8T3BlblBhcmFtZXRlcnM+IHJlbGVhc2UoKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19u
b3RfcmVhZHkpOwotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKE9wZW5QYXJhbWV0
ZXJzKSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0KSwgY2Fubm90X2Nhc3QpOwotCi0gICAgICAgICAg
ICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uUmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwo
KTsKLSAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxS
ZWY8T3BlblBhcmFtZXRlcnM+Kj4oJmpzb25SZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgLyoKLSAgICAgKiBTeW50aGV0aWMgY29u
c3RydWN0b3I6Ci0gICAgICogUmVmPE9wZW5QYXJhbWV0ZXJzPiByZXN1bHQgPSBPcGVuUGFyYW1l
dGVyczo6Y3JlYXRlKCkKLSAgICAgKiAgICAgLnNldEFscGhhKC4uLikKLSAgICAgKiAgICAgLnNl
dEJldGEoLi4uKQotICAgICAqICAgICAucmVsZWFzZSgpOwotICAgICAqLwotICAgIHN0YXRpYyBC
dWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEJ1aWxk
ZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOwotICAgIH0KLQotICAgIC8v
IFByb3BlcnR5IG5hbWVzIGZvciB0eXBlIGdlbmVyYXRlZCBhcyBvcGVuLgotICAgIE5vbmUgc3Rh
dGljIGNvbnN0IGNoYXIqIEFscGhhOwotfTsKLQotfSAvLyBUZXN0Ci0KLQotCi19IC8vIG5hbWVz
cGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sT2JqZWN0cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmpl
Y3RzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtd2l0aC1vcGVu
LXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5o
IgotCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQot
Y29uc3QgY2hhciogSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6T3BlblBhcmFtZXRlcnM6OkFs
cGhhID0gImFscGhhIjsKLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLQot
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNp
bmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLQotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQot
Ci19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xC
YWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2Vu
ZERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13
aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFj
a2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgot
I2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2luY2x1ZGUgPHd0Zi9K
U09OVmFsdWVzLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi19IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMu
bW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxX
ZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+Ci0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkg
KCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNP
YmplY3QKLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24u
aAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJU
ZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVy
bmFsLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+Ci0jaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5o
PgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+
Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJv
dG9jb2xDb25maWd1cmF0aW9uCi17Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVy
KiBfY29udHJvbGxlcjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjoo
QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCi17Ci0gICAgc2VsZiA9
IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAg
QVNTRVJUKGNvbnRyb2xsZXIpOwotICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICBy
ZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgW3N1cGVyIGRlYWxsb2Nd
OwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9u
Lm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVy
cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBv
cnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucy5oIgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNw
YWNlIEluc3BlY3RvcjsKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0
Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPEZvdW5kYXRp
b24vRm91bmRhdGlvbi5oPgotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09O
T2JqZWN0Lmg+Ci0KLQotQGNsYXNzIFRlc3RQcm90b2NvbFRlc3ROb09wZW5QYXJhbWV0ZXJzOwot
QGNsYXNzIFRlc3RQcm90b2NvbFRlc3RPcGVuUGFyYW1ldGVyczsKLQotdHlwZWRlZiBOU19FTlVN
KE5TSW50ZWdlciwgVGVzdFByb3RvY29sUGxhdGZvcm0pIHsKLSAgICBUZXN0UHJvdG9jb2xQbGF0
Zm9ybUFsbCwKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWMsCi0gICAgVGVzdFByb3Rv
Y29sUGxhdGZvcm1JT1MsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUywKLX07Ci0KLQot
Ci0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBU
ZXN0UHJvdG9jb2xUZXN0Tm9PcGVuUGFyYW1ldGVycyA6IFJXSVByb3RvY29sSlNPTk9iamVjdAot
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICos
IGlkPiAqKXBheWxvYWQ7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDoo
UldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKLS0gKGluc3RhbmNldHlwZSlpbml0
V2l0aE9uZTooZG91YmxlKW9uZSB0d286KGRvdWJsZSl0d287Ci0vKiByZXF1aXJlZCAqLyBAcHJv
cGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBkb3VibGUgb25lOwotLyogcmVxdWlyZWQgKi8gQHBy
b3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgZG91YmxlIHR3bzsKLUBlbmQKLQotX19hdHRyaWJ1
dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbFRl
c3RPcGVuUGFyYW1ldGVycyA6IFJXSVByb3RvY29sSlNPTk9iamVjdAotLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQ7
Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09O
T2JqZWN0ICopanNvbk9iamVjdDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aEFscGhhOihkb3Vi
bGUpYWxwaGEgYmV0YTooZG91YmxlKWJldGE7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5v
bmF0b21pYywgYXNzaWduKSBkb3VibGUgYWxwaGE7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkg
KG5vbmF0b21pYywgYXNzaWduKSBkb3VibGUgYmV0YTsKLUBlbmQKLQotCi0KLQotCi0KLSNpbXBv
cnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4K
LQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sSW50ZXJuYWwuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUt
d2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90
b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50
YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0K
LQotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSB0eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgi
Ci0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+Ci0K
LW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+
Ci1PcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcm
IHZhbHVlKTsKLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFBs
YXRmb3JtIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3Rv
Y29sUGxhdGZvcm1BbGw6Ci0gICAgICAgIHJldHVybiAiYWxsIl9zOwotICAgIGNhc2UgVGVzdFBy
b3RvY29sUGxhdGZvcm1HZW5lcmljOgotICAgICAgICByZXR1cm4gImdlbmVyaWMiX3M7Ci0gICAg
Y2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzoKLSAgICAgICAgcmV0dXJuICJpb3MiX3M7Ci0g
ICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOgotICAgICAgICByZXR1cm4gIm1hY29z
Il9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2Nv
bFBsYXRmb3JtPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAg
ICBpZiAodmFsdWUgPT0gImFsbCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9y
bUFsbDsKLSAgICBpZiAodmFsdWUgPT0gImdlbmVyaWMiKQotICAgICAgICByZXR1cm4gVGVzdFBy
b3RvY29sUGxhdGZvcm1HZW5lcmljOwotICAgIGlmICh2YWx1ZSA9PSAiaW9zIikKLSAgICAgICAg
cmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOwotICAgIGlmICh2YWx1ZSA9PSAibWFjb3Mi
KQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzsKLSAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwotfQotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJv
dG9jb2xUeXBlUGFyc2VyLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09O
T2JqZWN0UHJpdmF0ZS5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW50ZXJm
YWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoVGVzdERvbWFpbikKLQotKyAodm9pZClf
cGFyc2VOb09wZW5QYXJhbWV0ZXJzOihUZXN0UHJvdG9jb2xUZXN0Tm9PcGVuUGFyYW1ldGVycyAq
KilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLSsgKHZvaWQpX3BhcnNlT3BlblBh
cmFtZXRlcnM6KFRlc3RQcm90b2NvbFRlc3RPcGVuUGFyYW1ldGVycyAqKilvdXRWYWx1ZSBmcm9t
UGF5bG9hZDooaWQpcGF5bG9hZDsKLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zIChUZXN0RG9tYWluKQotCi0rICh2b2lkKV9wYXJzZU5vT3BlblBh
cmFtZXRlcnM6KFRlc3RQcm90b2NvbFRlc3ROb09wZW5QYXJhbWV0ZXJzICoqKW91dFZhbHVlIGZy
b21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQ
RShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gW1tUZXN0
UHJvdG9jb2xUZXN0Tm9PcGVuUGFyYW1ldGVycyBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxv
YWRdOwotfQotCi0rICh2b2lkKV9wYXJzZU9wZW5QYXJhbWV0ZXJzOihUZXN0UHJvdG9jb2xUZXN0
T3BlblBhcmFtZXRlcnMgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAg
ICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xh
c3NdKTsKLSAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbFRlc3RPcGVuUGFyYW1ldGVycyBh
bGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbFR5cGVzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlw
ZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBv
cnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9y
L1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLSNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25z
Lmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVj
dG9yOwotCi0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUZXN0Tm9PcGVuUGFyYW1ldGVy
cwotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFy
eTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBp
bml0XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JF
UVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJvbmUiXSwgQCJvbmUiKTsKLSAgICBzZWxmLm9uZSA9
IFtwYXlsb2FkW0Aib25lIl0gZG91YmxlVmFsdWVdOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AidHdvIl0sIEAidHdvIik7Ci0gICAgc2VsZi50
d28gPSBbcGF5bG9hZFtAInR3byJdIGRvdWJsZVZhbHVlXTsKLQotICAgIHJldHVybiBzZWxmOwot
fQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNP
Tk9iamVjdCAqKW9iamVjdAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09O
T2JqZWN0OltvYmplY3QgdG9KU09OT2JqZWN0XS5nZXQoKV0pKQotICAgICAgICByZXR1cm4gbmls
OwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aE9uZToo
ZG91YmxlKW9uZSB0d286KGRvdWJsZSl0d28KLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGlu
aXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIHNlbGYub25lID0gb25lOwotICAgIHNl
bGYudHdvID0gdHdvOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpc2V0T25lOihk
b3VibGUpb25lCi17Ci0gICAgW3N1cGVyIHNldERvdWJsZTpvbmUgZm9yS2V5OkAib25lIl07Ci19
Ci0KLS0gKGRvdWJsZSlvbmUKLXsKLSAgICByZXR1cm4gW3N1cGVyIGRvdWJsZUZvcktleTpAIm9u
ZSJdOwotfQotCi0tICh2b2lkKXNldFR3bzooZG91YmxlKXR3bwotewotICAgIFtzdXBlciBzZXRE
b3VibGU6dHdvIGZvcktleTpAInR3byJdOwotfQotCi0tIChkb3VibGUpdHdvCi17Ci0gICAgcmV0
dXJuIFtzdXBlciBkb3VibGVGb3JLZXk6QCJ0d28iXTsKLX0KLQotQGVuZAotCi1AaW1wbGVtZW50
YXRpb24gVGVzdFByb3RvY29sVGVzdE9wZW5QYXJhbWV0ZXJzCi0KLS0gKGluc3RhbmNldHlwZSlp
bml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBh
eWxvYWQKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJu
IG5pbDsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9h
ZFtAImFscGhhIl0sIEAiYWxwaGEiKTsKLSAgICBzZWxmLmFscGhhID0gW3BheWxvYWRbQCJhbHBo
YSJdIGRvdWJsZVZhbHVlXTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJP
UEVSVFkocGF5bG9hZFtAImJldGEiXSwgQCJiZXRhIik7Ci0gICAgc2VsZi5iZXRhID0gW3BheWxv
YWRbQCJiZXRhIl0gZG91YmxlVmFsdWVdOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0tIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICop
b2JqZWN0Ci17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEpTT05PYmplY3Q6W29i
amVjdCB0b0pTT05PYmplY3RdLmdldCgpXSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBy
ZXR1cm4gc2VsZjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQWxwaGE6KGRvdWJsZSlh
bHBoYSBiZXRhOihkb3VibGUpYmV0YQotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0p
KQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgc2VsZi5hbHBoYSA9IGFscGhhOwotICAgIHNl
bGYuYmV0YSA9IGJldGE7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClzZXRBbHBo
YTooZG91YmxlKWFscGhhCi17Ci0gICAgW3N1cGVyIHNldERvdWJsZTphbHBoYSBmb3JLZXk6QCJh
bHBoYSJdOwotfQotCi0tIChkb3VibGUpYWxwaGEKLXsKLSAgICByZXR1cm4gW3N1cGVyIGRvdWJs
ZUZvcktleTpAImFscGhhIl07Ci19Ci0KLS0gKHZvaWQpc2V0QmV0YTooZG91YmxlKWJldGEKLXsK
LSAgICBbc3VwZXIgc2V0RG91YmxlOmJldGEgZm9yS2V5OkAiYmV0YSJdOwotfQotCi0tIChkb3Vi
bGUpYmV0YQotewotICAgIHJldHVybiBbc3VwZXIgZG91YmxlRm9yS2V5OkAiYmV0YSJdOwotfQot
Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMv
ZXhwZWN0ZWQvdmVyc2lvbi5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3ZlcnNpb24uanNvbi1yZXN1bHQK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0ZTg3ZGM0NzM5Li4wMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJp
Yy9leHBlY3RlZC92ZXJzaW9uLmpzb24tcmVzdWx0CisrKyAvZGV2L251bGwKQEAgLTEsODgwICsw
LDAgQEAKLSMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotLy8gVmVyc2lvbkRvbWFpbgotSW5zcGVjdG9y
QmFja2VuZC5yZWdpc3RlckRvbWFpbigiVmVyc2lvbkRvbWFpbiIsIG51bGwpOwotSW5zcGVjdG9y
QmFja2VuZC5yZWdpc3RlclZlcnNpb24oIlZlcnNpb25Eb21haW4iLCA0Mik7Ci1JbnNwZWN0b3JC
YWNrZW5kLmFjdGl2YXRlRG9tYWluKCJWZXJzaW9uRG9tYWluIiwgbnVsbCk7Ci0jIyMgRW5kIEZp
bGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gdmVyc2lvbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgotI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLQotbmFtZXNwYWNlIEluc3Bl
Y3RvciB7Ci0KLWNsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAg
ICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBk
aXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9
Ci0gICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1
cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQotcHJpdmF0ZToKLSAgICBSZWZQdHI8QmFj
a2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Ci19OwotCi0KLQotCi19IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKLQotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQotIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHZlcnNpb24uanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRl
c3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1u
YW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KLQot
Ci19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNw
YXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHZlcnNpb24uanNvbgotLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVl
cy5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQotI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNlbmRpZgot
Ci1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgot
Ci0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gdmVyc2lvbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5o
IgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBGcm9udGVuZFJvdXRlcjsK
LQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERp
c3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNw
cAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHZlcnNpb24uanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQot
bmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0vLyBW
ZXJzaW9ucy4KLW5hbWVzcGFjZSBWZXJzaW9uRG9tYWluIHsKLXN0YXRpYyBjb25zdGV4cHIgdW5z
aWduZWQgVkVSU0lPTiA9IDQyOwotfSAvLyBWZXJzaW9uRG9tYWluCi0vLyBFbmQgb2YgdmVyc2lv
bnMuCi0KLQotCi0KLQotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RQcm90
b2NvbE9iamVjdHMuaCIKLQotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLW5hbWVzcGFjZSBQ
cm90b2NvbCB7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5Q
dHIuaD4KLQotCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLX0gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5o
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1w
b3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbEludGVybmFsLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
LmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7
Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bEJhY2tlbmREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29u
ZmlndXJhdGlvbi5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lvbi5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQg
PFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0
eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBO
U09iamVjdAotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
bi5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lvbi5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZp
Z3VyYXRpb24uaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbXBvcnQg
IlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENv
cmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLQotdXNpbmcgbmFtZXNw
YWNlIEluc3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRp
b24KLXsKLSAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwot
fQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3Bl
Y3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwot
ICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxl
cik7Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQot
Ci0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLUBlbmQKLQot
Ci0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2lt
cG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDx3dGYvSlNPTlZh
bHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLSMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8Rm91
bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2Nv
bEpTT05PYmplY3QuaD4KLQotCi0KLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFBy
b3RvY29sUGxhdGZvcm0pIHsKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbCwKLSAgICBUZXN0
UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWMsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1JT1MsCi0g
ICAgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUywKLX07Ci0KLQotCi0KLQotCi0KLQotCi0KLSNp
bXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMu
aD4KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sSW50ZXJuYWwuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHZl
cnNpb24uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0j
aW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQ
cml2YXRlLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNv
bnRyb2xsZXIuaD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLQotCi0KLSMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB2
ZXJzaW9uLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9j
b2xBcnJheUNvbnZlcnNpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+Ci1PcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90
b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKLQotaW5saW5lIFN0cmluZyB0b1Byb3Rv
Y29sU3RyaW5nKFRlc3RQcm90b2NvbFBsYXRmb3JtIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1
ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1BbGw6Ci0gICAgICAgIHJldHVybiAi
YWxsIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOgotICAgICAgICBy
ZXR1cm4gImdlbmVyaWMiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzoKLSAg
ICAgICAgcmV0dXJuICJpb3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09T
OgotICAgICAgICByZXR1cm4gIm1hY29zIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5s
aW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFBsYXRmb3JtPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gImFsbCIpCi0gICAgICAgIHJl
dHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDsKLSAgICBpZiAodmFsdWUgPT0gImdlbmVyaWMi
KQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOwotICAgIGlmICh2
YWx1ZSA9PSAiaW9zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOwot
ICAgIGlmICh2YWx1ZSA9PSAibWFjb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxh
dGZvcm1NYWNPUzsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi19IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMu
aAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lvbi5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucy5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbFR5cGVQYXJzZXIuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpT
T05PYmplY3RQcml2YXRlLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotCi0K
LQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAi
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJ
UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4K
LSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7
Ci0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1v
bi1jb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24g
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9m
YWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUu
anNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDZkZjllNGJkOWMuLjAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL2ZhaWwtb24tY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dh
YmxlVHlwZS5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi1bCi17Ci0gICAgImRv
bWFpbiI6ICJEb21haW4iLAotICAgICJkZWJ1Z2dhYmxlVHlwZXMiOiBbImphdmFzY3JpcHQiXSwK
LSAgICAidGFyZ2V0VHlwZXMiOiBbIndvcmtlciJdLAotICAgICJjb21tYW5kcyI6IFt7Im5hbWUi
OiAiQ29tbWFuZCJ9XSwKLSAgICAiZXZlbnRzIjogW3sibmFtZSI6ICJFdmVudCJ9XQotfQotXQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvZmFpbC1vbi1jb21tYW5kLXRhcmdldFR5cGVzLXR5cGUuanNvbiBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tY29t
bWFuZC10YXJnZXRUeXBlcy10eXBlLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDY0MDU5Zjg0YmNmLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlwZXMt
dHlwZS5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi17Ci0gICAgImRvbWFpbiI6
ICJEb21haW4iLAotICAgICJjb21tYW5kcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgIm5h
bWUiOiAiUGFnZU9ubHkiLAotICAgICAgICAgICAgInRhcmdldFR5cGVzIjogInBhZ2VlIgotICAg
ICAgICB9Ci0gICAgXQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1jb21tYW5kLXRhcmdldFR5cGVzLXZh
bHVlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJpYy9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlwZXMtdmFsdWUuanNvbgpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNTAyMDQ0NzJlYzguLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24t
Y29tbWFuZC10YXJnZXRUeXBlcy12YWx1ZS5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCww
IEBACi17Ci0gICAgImRvbWFpbiI6ICJEb21haW4iLAotICAgICJjb21tYW5kcyI6IFsKLSAgICAg
ICAgewotICAgICAgICAgICAgIm5hbWUiOiAiUGFnZU9ubHkiLAotICAgICAgICAgICAgInRhcmdl
dFR5cGVzIjogWyJwYWdlZSJdCi0gICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9u
LWNvbW1hbmQtd2l0aC1pbnZhbGlkLXBsYXRmb3JtLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWNvbW1hbmQtd2l0aC1p
bnZhbGlkLXBsYXRmb3JtLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExODBj
YWU5YmZmLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWNvbW1hbmQtd2l0aC1pbnZhbGlkLXBsYXRm
b3JtLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi17Ci0gICAgImRvbWFpbiI6
ICJPdmVybGF5IiwKLSAgICAiY29tbWFuZHMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJu
YW1lIjogInByb2Nlc3NQb2ludHMiLAotICAgICAgICAgICAgInBsYXRmb3JtIjogImludmFsaWQi
LAotICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJwb2ludDEiLCAidHlwZSI6ICJudW1iZXIiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJwb2ludDIiLCAidHlwZSI6ICJudW1iZXIiIH0KLSAgICAgICAgICAgIF0sCi0gICAgICAgICAg
ICAicmV0dXJucyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInJlc3VsdCIsICJ0eXBl
IjogInN0cmluZyIgfQotICAgICAgICAgICAgXQotICAgICAgICB9Ci0gICAgXQotfQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVy
aWMvZmFpbC1vbi1kb21haW4tZGVidWdnYWJsZVR5cGVzLXR5cGUuanNvbiBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZG9tYWlu
LWRlYnVnZ2FibGVUeXBlcy10eXBlLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDk3NDhmNDIzNDczLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWRvbWFpbi1kZWJ1Z2dhYmxlVHlw
ZXMtdHlwZS5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi17Ci0gICAgImRvbWFp
biI6ICJXZWJPbmx5IiwKLSAgICAiZGVidWdnYWJsZVR5cGVzIjogIndlYmIiLAotICAgICJjb21t
YW5kcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiZW5hYmxlIgotICAgICAg
ICB9Ci0gICAgXQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kb21haW4tZGVidWdnYWJsZVR5cGVzLXZh
bHVlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJpYy9mYWlsLW9uLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMtdmFsdWUuanNvbgpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjI1MmRkYmQ4M2QuLjAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwt
b24tZG9tYWluLWRlYnVnZ2FibGVUeXBlcy12YWx1ZS5qc29uCisrKyAvZGV2L251bGwKQEAgLTEs
OSArMCwwIEBACi17Ci0gICAgImRvbWFpbiI6ICJXZWJPbmx5IiwKLSAgICAiZGVidWdnYWJsZVR5
cGVzIjogWyJ3ZWJiIl0sCi0gICAgImNvbW1hbmRzIjogWwotICAgICAgICB7Ci0gICAgICAgICAg
ICAibmFtZSI6ICJlbmFibGUiCi0gICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9u
LWRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFp
bC1vbi1kb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNv
bgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2FhMDI4MDQ2NTcuLjAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmljL2ZhaWwtb24tZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVU
eXBlLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLVsKLXsKLSAgICAiZG9tYWlu
IjogIkRvbWFpbiIsCi0gICAgImRlYnVnZ2FibGVUeXBlcyI6IFsiamF2YXNjcmlwdCJdLAotICAg
ICJjb21tYW5kcyI6IFt7Im5hbWUiOiAiQ29tbWFuZCIsICJ0YXJnZXRUeXBlcyI6IFsid29ya2Vy
Il19XSwKLSAgICAiZXZlbnRzIjogW3sibmFtZSI6ICJFdmVudCJ9XQotfQotXQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMv
ZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZXMtdHlwZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kb21haW4tdGFyZ2V0
VHlwZXMtdHlwZS5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkODIyMjY3NDE0
Ni4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZXMtdHlwZS5qc29uCisr
KyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi17Ci0gICAgImRvbWFpbiI6ICJQYWdlT25seSIs
Ci0gICAgInRhcmdldFR5cGVzIjogInBhZ2VlIiwKLSAgICAiY29tbWFuZHMiOiBbCi0gICAgICAg
IHsKLSAgICAgICAgICAgICJuYW1lIjogImVuYWJsZSIKLSAgICAgICAgfQotICAgIF0KLX0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL2ZhaWwtb24tZG9tYWluLXRhcmdldFR5cGVzLXZhbHVlLmpzb24gYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWRvbWFp
bi10YXJnZXRUeXBlcy12YWx1ZS5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBl
N2IxMGQ3ZjE1NC4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZXMtdmFs
dWUuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotewotICAgICJkb21haW4iOiAi
UGFnZU9ubHkiLAotICAgICJ0YXJnZXRUeXBlcyI6IFsicGFnZWUiXSwKLSAgICAiY29tbWFuZHMi
OiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImVuYWJsZSIKLSAgICAgICAgfQot
ICAgIF0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZHVwbGljYXRlLWNvbW1hbmQtY2FsbC1wYXJhbWV0
ZXItbmFtZXMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9nZW5lcmljL2ZhaWwtb24tZHVwbGljYXRlLWNvbW1hbmQtY2FsbC1wYXJhbWV0ZXItbmFt
ZXMuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmFiNzZjYTYyNzkuLjAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9nZW5lcmljL2ZhaWwtb24tZHVwbGljYXRlLWNvbW1hbmQtY2FsbC1wYXJhbWV0ZXItbmFtZXMu
anNvbgorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIk92
ZXJsYXkiLAotICAgICJjb21tYW5kcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUi
OiAicHJvY2Vzc1BvaW50cyIsCi0gICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKLSAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInBvaW50IiwgInR5cGUiOiAibnVtYmVyIiB9LAotICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAicG9pbnQiLCAidHlwZSI6ICJudW1iZXIiIH0KLSAgICAgICAgICAg
IF0sCi0gICAgICAgICAgICAicmV0dXJucyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjog
InJlc3VsdDEiLCAidHlwZSI6ICJzdHJpbmciIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJyZXN1bHQyIiwgInR5cGUiOiAic3RyaW5nIiB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0K
LSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWR1cGxpY2F0ZS1jb21tYW5kLXJldHVybi1wYXJh
bWV0ZXItbmFtZXMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZHVwbGljYXRlLWNvbW1hbmQtcmV0dXJuLXBhcmFtZXRl
ci1uYW1lcy5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOGJiMTVjMDRiNi4u
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1yZXR1cm4tcGFyYW1ldGVy
LW5hbWVzLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi17Ci0gICAgImRvbWFp
biI6ICJPdmVybGF5IiwKLSAgICAiY29tbWFuZHMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAg
ICJuYW1lIjogInByb2Nlc3NQb2ludHMiLAotICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCi0g
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwb2ludDEiLCAidHlwZSI6ICJudW1iZXIiIH0sCi0g
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwb2ludDIiLCAidHlwZSI6ICJudW1iZXIiIH0KLSAg
ICAgICAgICAgIF0sCi0gICAgICAgICAgICAicmV0dXJucyI6IFsKLSAgICAgICAgICAgICAgICB7
ICJuYW1lIjogInJlc3VsdCIsICJ0eXBlIjogInN0cmluZyIgfSwKLSAgICAgICAgICAgICAgICB7
ICJuYW1lIjogInJlc3VsdCIsICJ0eXBlIjogInN0cmluZyIgfQotICAgICAgICAgICAgXQotICAg
ICAgICB9Ci0gICAgXQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kdXBsaWNhdGUtZXZlbnQtcGFyYW1l
dGVyLW5hbWVzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWR1cGxpY2F0ZS1ldmVudC1wYXJhbWV0ZXItbmFtZXMuanNv
bgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDNkM2IzY2M2NDIuLjAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmljL2ZhaWwtb24tZHVwbGljYXRlLWV2ZW50LXBhcmFtZXRlci1uYW1lcy5qc29uCisrKyAvZGV2
L251bGwKQEAgLTEsMTIgKzAsMCBAQAotewotICAgICJkb21haW4iOiAiT3ZlcmxheSIsCi0gICAg
ImV2ZW50cyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAicHJvY2Vzc2VkUG9p
bnRzIiwKLSAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwotICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAicG9pbnQiLCAidHlwZSI6ICJudW1iZXIiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJwb2ludCIsICJ0eXBlIjogIm51bWJlciIgfQotICAgICAgICAgICAgXQotICAgICAgICB9
Ci0gICAgXQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1kZWNsYXJhdGlvbnMu
anNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmljL2ZhaWwtb24tZHVwbGljYXRlLXR5cGUtZGVjbGFyYXRpb25zLmpzb24KZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDcwMmZjNmEzMjcwLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWR1
cGxpY2F0ZS10eXBlLWRlY2xhcmF0aW9ucy5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAs
MCBAQAotewotICAgICJkb21haW4iOiAiUnVudGltZSIsCi0gICAgInR5cGVzIjogWwotICAgICAg
ICB7Ci0gICAgICAgICAgICAiaWQiOiAiUmVtb3RlT2JqZWN0SWQiLAotICAgICAgICAgICAgInR5
cGUiOiAic3RyaW5nIiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgb2JqZWN0
IGlkZW50aWZpZXIuIgotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAi
UmVtb3RlT2JqZWN0SWQiLAotICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKLSAgICAgICAg
ICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIuIgotICAgICAgICB9
Ci0gICAgXQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1tZW1iZXItbmFtZXMu
anNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmljL2ZhaWwtb24tZHVwbGljYXRlLXR5cGUtbWVtYmVyLW5hbWVzLmpzb24KZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGFlYmFjZWU4YjIzLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWR1
cGxpY2F0ZS10eXBlLW1lbWJlci1uYW1lcy5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAs
MCBAQAotWwotewotICAgICJkb21haW4iOiAiT3ZlcmxheVR5cGVzIiwKLSAgICAidHlwZXMiOiBb
Ci0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJQb2ludCIsCi0gICAgICAgICAgICAidHlw
ZSI6ICJvYmplY3QiLAotICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCi0gICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJ4IiwgInR5cGUiOiAiaW50ZWdlciIgfSwKLSAgICAgICAgICAgICAgICB7
ICJuYW1lIjogIngiLCAidHlwZSI6ICJpbnRlZ2VyIiB9Ci0gICAgICAgICAgICBdCi0gICAgICAg
IH0KLSAgICBdCi19Ci1dCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWVudW0td2l0aC1uby12YWx1ZXMuanNv
biBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2ZhaWwtb24tZW51bS13aXRoLW5vLXZhbHVlcy5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAyMzJhN2MzMjQ5YS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1lbnVtLXdpdGgtbm8t
dmFsdWVzLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi17Ci0gICAgImRvbWFp
biI6ICJEYXRhYmFzZSIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAi
aWQiOiAiUHJpbWFyeUNvbG9ycyIsCi0gICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAotICAg
ICAgICAgICAgImVudW0iOiBbXQotICAgICAgICB9Ci0gICAgXQotfQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1v
bi1ldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFp
bC1vbi1ldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29u
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MTMyY2UwODgyOC4uMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVy
aWMvZmFpbC1vbi1ldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlw
ZS5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1bCi17Ci0gICAgImRvbWFpbiI6
ICJEb21haW4iLAotICAgICJkZWJ1Z2dhYmxlVHlwZXMiOiBbImphdmFzY3JpcHQiXSwKLSAgICAi
Y29tbWFuZHMiOiBbeyJuYW1lIjogIkNvbW1hbmQifV0sCi0gICAgImV2ZW50cyI6IFt7Im5hbWUi
OiAiRXZlbnQiLCAidGFyZ2V0VHlwZXMiOiBbIndvcmtlciJdfV0KLX0KLV0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2Zh
aWwtb24tZXZlbnQtdGFyZ2V0VHlwZXMtdHlwZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1ldmVudC10YXJnZXRUeXBl
cy10eXBlLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1NGVkMWY1YzZiLi4w
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGVzLXR5cGUuanNvbgorKysgL2Rl
di9udWxsCkBAIC0xLDkgKzAsMCBAQAotewotICAgICJkb21haW4iOiAiRG9tYWluIiwKLSAgICAi
ZXZlbnRzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJQYWdlT25seSIsCi0g
ICAgICAgICAgICAidGFyZ2V0VHlwZXMiOiAicGFnZWUiCi0gICAgICAgIH0KLSAgICBdCi19CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJpYy9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGVzLXZhbHVlLmpzb24gYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWV2ZW50
LXRhcmdldFR5cGVzLXZhbHVlLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4
ODRiZmQ3YTZiLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGVzLXZhbHVl
Lmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIkRv
bWFpbiIsCi0gICAgImV2ZW50cyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAi
UGFnZU9ubHkiLAotICAgICAgICAgICAgInRhcmdldFR5cGVzIjogWyJwYWdlZSJdCi0gICAgICAg
IH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRpb25hbC1wYXJh
bWV0ZXItZmxhZy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZs
YWcuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzMwOGRiOTkyZDYuLjAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9nZW5lcmljL2ZhaWwtb24tbnVtYmVyLXR5cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1mbGFnLmpz
b24KKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi17Ci0gICAgImRvbWFpbiI6ICJEYXRh
YmFzZSIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiRGF0
YWJhc2VJZCIsCi0gICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAotICAgICAgICAgICAgImRl
c2NyaXB0aW9uIjogIlVuaXF1ZSBpZGVudGlmaWVyIG9mIERhdGFiYXNlIG9iamVjdC4iCi0gICAg
ICAgIH0KLSAgICBdLAotICAgICJldmVudHMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJu
YW1lIjogImRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMiLAotICAgICAgICAgICAgInBhcmFt
ZXRlcnMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBl
IjogInN0cmluZyIsICJvcHRpb25hbCI6IDAgfQotICAgICAgICAgICAgXQotICAgICAgICB9Ci0g
ICAgXQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1i
ZXIuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL2ZhaWwtb24tbnVtYmVyLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24KZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmZWE1NTVlYzRmLi4wMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9m
YWlsLW9uLW51bWJlci10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29uCisrKyAvZGV2L251
bGwKQEAgLTEsMTYgKzAsMCBAQAotWwotewotICAgICJkb21haW4iOiAiRGF0YWJhc2UiLAotICAg
ICJ0eXBlcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIkVycm9yIiwKLSAgICAg
ICAgICAgICJ0eXBlIjogIm9iamVjdCIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRGF0
YWJhc2UgZXJyb3IuIiwKLSAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwotICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAibWVzc2FnZSIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6
ICJFcnJvciBtZXNzYWdlLiIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvZGUiLCAi
dHlwZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIGNvZGUuIiwgIm9wdGlvbmFs
IjogMCB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0KLSAgICBdCi19Ci1dCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9m
YWlsLW9uLXN0cmluZy10eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29uIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1z
dHJpbmctdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbgpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNDAxMmM3OWI2YjMuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tc3RyaW5n
LXR5cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwx
OCArMCwwIEBACi17Ci0gICAgImRvbWFpbiI6ICJEYXRhYmFzZSIsCi0gICAgInR5cGVzIjogWwot
ICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiRGF0YWJhc2VJZCIsCi0gICAgICAgICAgICAi
dHlwZSI6ICJzdHJpbmciLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBpZGVu
dGlmaWVyIG9mIERhdGFiYXNlIG9iamVjdC4iCi0gICAgICAgIH0KLSAgICBdLAotICAgICJldmVu
dHMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImRpZEV4ZWN1dGVPcHRpb25h
bFBhcmFtZXRlcnMiLAotICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCi0gICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6
ICJ0cnVlIiB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9m
YWlsLW9uLXN0cmluZy10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29uIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1zdHJp
bmctdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggY2EzZWYyOGE4ZjguLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tc3RyaW5nLXR5cGVk
LW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBA
Ci1bCi17Ci0gICAgImRvbWFpbiI6ICJEYXRhYmFzZSIsCi0gICAgInR5cGVzIjogWwotICAgICAg
ICB7Ci0gICAgICAgICAgICAiaWQiOiAiRXJyb3IiLAotICAgICAgICAgICAgInR5cGUiOiAib2Jq
ZWN0IiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJEYXRhYmFzZSBlcnJvci4iLAotICAg
ICAgICAgICAgInByb3BlcnRpZXMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJtZXNz
YWdlIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIG1lc3NhZ2UuIiB9
LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29kZSIsICJ0eXBlIjogImludGVnZXIiLCAi
ZGVzY3JpcHRpb24iOiAiRXJyb3IgY29kZS4iLCAib3B0aW9uYWwiOiAiZmFsc2UiIH0KLSAgICAg
ICAgICAgIF0KLSAgICAgICAgfQotICAgIF0KLX0KLV0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tdHlwZS1k
ZWNsYXJhdGlvbi11c2luZy10eXBlLXJlZmVyZW5jZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi10eXBlLWRlY2xhcmF0
aW9uLXVzaW5nLXR5cGUtcmVmZXJlbmNlLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDE5Yjc1OTBjY2M2Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLXR5cGUtZGVjbGFyYXRpb24t
dXNpbmctdHlwZS1yZWZlcmVuY2UuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAK
LVsKLXsKLSAgICAiZG9tYWluIjogIlJ1bnRpbWUiLAotICAgICJ0eXBlcyI6IFsKLSAgICAgICAg
ewotICAgICAgICAgICAgImlkIjogIlJlbW90ZU9iamVjdElkIiwKLSAgICAgICAgICAgICJ0eXBl
IjogIm9iamVjdCIsCi0gICAgICAgICAgICAiJHJlZiI6ICJTb21lVHlwZSIsCi0gICAgICAgICAg
ICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIG9iamVjdCBpZGVudGlmaWVyLiIKLSAgICAgICAgfQot
ICAgIF0KLX0KLV0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tdHlwZS1yZWZlcmVuY2UtYXMtcHJpbWl0aXZl
LXR5cGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9nZW5lcmljL2ZhaWwtb24tdHlwZS1yZWZlcmVuY2UtYXMtcHJpbWl0aXZlLXR5cGUuanNvbgpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGM4M2JiZmNlNDEuLjAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2ZhaWwtb24tdHlwZS1yZWZlcmVuY2UtYXMtcHJpbWl0aXZlLXR5cGUuanNvbgorKysgL2Rldi9u
dWxsCkBAIC0xLDE4ICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKLSAgICAi
dHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJEYXRhYmFzZUlkIiwKLSAg
ICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAi
VW5pcXVlIGlkZW50aWZpZXIgb2YgRGF0YWJhc2Ugb2JqZWN0LiIKLSAgICAgICAgfQotICAgIF0s
Ci0gICAgImV2ZW50cyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiZGlkRXhl
Y3V0ZU9wdGlvbmFsUGFyYW1ldGVycyIsCi0gICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKLSAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiRGF0YWJhc2VJ
ZCIgfQotICAgICAgICAgICAgXQotICAgICAgICB9Ci0gICAgXQotfQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1v
bi10eXBlLXdpdGgtaW52YWxpZC1wbGF0Zm9ybS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi10eXBlLXdpdGgtaW52YWxp
ZC1wbGF0Zm9ybS5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOWZkMmU5OTU2
MS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi10eXBlLXdpdGgtaW52YWxpZC1wbGF0Zm9ybS5qc29u
CisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotewotICAgICJkb21haW4iOiAiUnVudGlt
ZSIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiUmVtb3Rl
T2JqZWN0SWQiLAotICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKLSAgICAgICAgICAgICJw
bGF0Zm9ybSI6ICJpbnZhbGlkIiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUg
b2JqZWN0IGlkZW50aWZpZXIuIgotICAgICAgICB9Ci0gICAgXQotfQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1v
bi10eXBlLXdpdGgtbG93ZXJjYXNlLW5hbWUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tdHlwZS13aXRoLWxvd2VyY2Fz
ZS1uYW1lLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzMTkwMWU0YTlhLi4w
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy9mYWlsLW9uLXR5cGUtd2l0aC1sb3dlcmNhc2UtbmFtZS5qc29uCisrKyAv
ZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotewotICAgICJkb21haW4iOiAiRGF0YWJhc2UiLAot
ICAgICJ0eXBlcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogImRhdGFiYXNlSWQi
LAotICAgICAgICAgICAgInR5cGUiOiAiaW50ZWdlciIsCi0gICAgICAgICAgICAiZGVzY3JpcHRp
b24iOiAiVW5pcXVlIGlkZW50aWZpZXIgb2YgRGF0YWJhc2Ugb2JqZWN0LiIKLSAgICAgICAgfQot
ICAgIF0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBl
LWRlY2xhcmF0aW9uLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1k
ZWNsYXJhdGlvbi5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNjg4N2EyNzQx
MS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUt
ZGVjbGFyYXRpb24uanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLVsKLXsKLSAg
ICAiZG9tYWluIjogIlJ1bnRpbWUiLAotICAgICJ0eXBlcyI6IFsKLSAgICAgICAgewotICAgICAg
ICAgICAgImlkIjogIlJlbW90ZU9iamVjdElkIiwKLSAgICAgICAgICAgICJ0eXBlIjogImRyYWdv
biIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIG9iamVjdCBpZGVudGlmaWVy
LiIKLSAgICAgICAgfQotICAgIF0KLX0KLV0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tdW5rbm93bi10eXBl
LXJlZmVyZW5jZS1pbi10eXBlLW1lbWJlci5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJl
bmNlLWluLXR5cGUtbWVtYmVyLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4
MTdkYjUwNDRkLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2Ut
aW4tdHlwZS1tZW1iZXIuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLVsKLXsK
LSAgICAiZG9tYWluIjogIkZhbnRhc3kiLAotICAgICJ0eXBlcyI6IFsKLSAgICAgICAgewotICAg
ICAgICAgICAgImlkIjogIkRyYWdvbkVnZyIsCi0gICAgICAgICAgICAidHlwZSI6ICJvYmplY3Qi
LAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkEgZHJhZ29uIGVnZy4iLAotICAgICAgICAg
ICAgInByb3BlcnRpZXMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2xvciIsICIk
cmVmIjogIkNvbG9yIiB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0KLSAgICBdCi19Ci1dCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJpYy9nZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbiBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2dlbmVyYXRl
LWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA2N2NmOGU1ODJmNi4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZ2VuZXJhdGUtZG9tYWlucy13aXRo
LWZlYXR1cmUtZ3VhcmRzLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi1bCi17
Ci0gICAgImRvbWFpbiI6ICJOZXR3b3JrMSIsCi0gICAgImZlYXR1cmVHdWFyZCI6ICJQTEFURk9S
TShXRUJfQ09NTUFORFMpIiwKLSAgICAiY29tbWFuZHMiOiBbCi0gICAgICAgIHsKLSAgICAgICAg
ICAgICJuYW1lIjogImxvYWRSZXNvdXJjZSIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAi
TG9hZHMgYSByZXNvdXJjZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0
ZWQgcGFnZSB3aXRob3V0IGNyb3NzIG9yaWdpbiBjaGVja3MuIgotICAgICAgICB9Ci0gICAgXQot
fSwKLXsKLSAgICAiZG9tYWluIjogIk5ldHdvcmsyIiwKLSAgICAiZmVhdHVyZUd1YXJkIjogIlBM
QVRGT1JNKFdFQl9UWVBFUykiLAotICAgICJ0eXBlcyI6IFsKLSAgICAgICAgewotICAgICAgICAg
ICAgImlkIjogIk5ldHdvcmtFcnJvciIsCi0gICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAot
ICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJt
ZXNzYWdlIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIG1lc3NhZ2Uu
IiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29kZSIsICJ0eXBlIjogImludGVnZXIi
LCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgY29kZS4iIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAg
fQotICAgIF0KLX0sCi17Ci0gICAgImRvbWFpbiI6ICJOZXR3b3JrMyIsCi0gICAgImZlYXR1cmVH
dWFyZCI6ICJQTEFURk9STShXRUJfRVZFTlRTKSIsCi0gICAgImV2ZW50cyI6IFsKLSAgICAgICAg
ewotICAgICAgICAgICAgIm5hbWUiOiAicmVzb3VyY2VMb2FkZWQiLAotICAgICAgICAgICAgImRl
c2NyaXB0aW9uIjogIkEgcmVzb3VyY2Ugd2FzIGxvYWRlZC4iCi0gICAgICAgIH0KLSAgICBdCi19
Ci1dCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvc2FtZS10eXBl
LWlkLWRpZmZlcmVudC1kb21haW4uanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
M2JmNGRmZjVjY2MuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL3NhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWlu
Lmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi1bCi17Ci0gICAgImRvbWFpbiI6
ICJSdW50aW1lIiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6
ICJSZW1vdGVPYmplY3RJZCIsCi0gICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAotICAgICAg
ICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4iCi0gICAgICAg
IH0KLSAgICBdCi19LAotewotICAgICJkb21haW4iOiAiUnVudGltZTIiLAotICAgICJ0eXBlcyI6
IFsKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIlJlbW90ZU9iamVjdElkIiwKLSAgICAg
ICAgICAgICJ0eXBlIjogInN0cmluZyIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5p
cXVlIG9iamVjdCBpZGVudGlmaWVyLiIKLSAgICAgICAgfQotICAgIF0KLX0KLV0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvc2hhZG93ZWQtb3B0aW9uYWwtdHlw
ZS1zZXR0ZXJzLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwYTBjMTU1Mjc1
Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy9zaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgorKysg
L2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIlJ1bnRpbWUiLAot
ICAgICJ0eXBlcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIktleVBhdGgiLAot
ICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6
ICJLZXkgcGF0aC4iLAotICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCi0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJ0eXBlIiwKLSAgICAgICAgICAgICAg
ICAgICAgInR5cGUiOiAic3RyaW5nIiwKLSAgICAgICAgICAgICAgICAgICAgImVudW0iOiBbIm51
bGwiLCAic3RyaW5nIiwgImFycmF5Il0sCi0gICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlv
biI6ICJLZXkgcGF0aCB0eXBlLiIKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAic3RyaW5nIiwKLSAgICAgICAgICAgICAg
ICAgICAgInR5cGUiOiAic3RyaW5nIiwKLSAgICAgICAgICAgICAgICAgICAgIm9wdGlvbmFsIjog
dHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlN0cmluZyB2YWx1ZS4i
Ci0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgICJuYW1lIjogImFycmF5IiwKLSAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiYXJyYXki
LAotICAgICAgICAgICAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgICAgICAgICAg
ICAgICAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSwKLSAgICAgICAgICAgICAgICAgICAg
ImRlc2NyaXB0aW9uIjogIkFycmF5IHZhbHVlLiIKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBdCi0gICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9zaG91bGQtc3RyaXAtY29tbWVu
dHMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL3Nob3VsZC1zdHJpcC1jb21tZW50cy5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBlY2UxZGNmYzYxYy4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvc2hvdWxkLXN0cmlwLWNvbW1lbnRz
Lmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLXsKLSAgICAvKiBhYm92ZSAqLwot
ICAgIC8qIGJlZm9yZSAqLyAiZG9tYWluIiAvKiBpbiAqLyA6IC8qIGluICovICJDb21tZW50IiAv
KiBhZnRlciAqLwotICAgIC8qIGJlbG93ICovCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy90eXBlLWRlY2xhcmF0aW9u
LWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmlt
aXRpdmUtdHlwZS5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYmM5ZDUzOTQ3
OC4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2dlbmVyaWMvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBl
Lmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi17Ci0gICAgImRvbWFpbiI6ICJS
dW50aW1lIiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJS
ZW1vdGVPYmplY3RJZCIsCi0gICAgICAgICAgICAidHlwZSI6ICJpbnRlZ2VyIiwKLSAgICAgICAg
ICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIuIgotICAgICAgICB9
Ci0gICAgXQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24gYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy90eXBl
LWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggY2ZiMDhiZDk0MGIuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL3R5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlw
ZS5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotWwotewotICAgICJkb21haW4i
OiAiRGVidWdnZXIiLAotICAgICJ0eXBlcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgImlk
IjogIkJyZWFrcG9pbnRJZCIsCi0gICAgICAgICAgICAidHlwZSI6ICJpbnRlZ2VyIgotICAgICAg
ICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiUmVhc29uIiwKLSAgICAgICAgICAg
ICJ0eXBlIjogInN0cmluZyIsCi0gICAgICAgICAgICAiZW51bSI6IFsiRGllZCIsICJGYWludGVk
IiwgIkh1bmdyeSJdCi0gICAgICAgIH0KLSAgICBdCi19LAotewotICAgICJkb21haW4iOiAiUnVu
dGltZSIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiT2Jq
ZWN0SWQiLAotICAgICAgICAgICAgInR5cGUiOiAiaW50ZWdlciIKLSAgICAgICAgfSwKLSAgICAg
ICAgewotICAgICAgICAgICAgImlkIjogIkx1Y2t5TnVtYmVycyIsCi0gICAgICAgICAgICAidHlw
ZSI6ICJhcnJheSIsCi0gICAgICAgICAgICAiaXRlbXMiOiB7ICJ0eXBlIjogImludGVnZXIiIH0K
LSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIkJhYnlOYW1lcyIsCi0g
ICAgICAgICAgICAidHlwZSI6ICJhcnJheSIsCi0gICAgICAgICAgICAiaXRlbXMiOiB7ICJ0eXBl
IjogInN0cmluZyIgfQotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAi
TmV3T2JqZWN0cyIsCi0gICAgICAgICAgICAidHlwZSI6ICJhcnJheSIsCi0gICAgICAgICAgICAi
aXRlbXMiOiB7ICIkcmVmIjogIk9iamVjdElkIiB9Ci0gICAgICAgIH0sCi0gICAgICAgIHsKLSAg
ICAgICAgICAgICJpZCI6ICJPbGRPYmplY3RzIiwKLSAgICAgICAgICAgICJ0eXBlIjogImFycmF5
IiwKLSAgICAgICAgICAgICJpdGVtcyI6IHsgIiRyZWYiOiAiRGVidWdnZXIuQnJlYWtwb2ludElk
IiB9Ci0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJTdG9wUmVhc29u
cyIsCi0gICAgICAgICAgICAidHlwZSI6ICJhcnJheSIsCi0gICAgICAgICAgICAiaXRlbXMiOiB7
ICIkcmVmIjogIkRlYnVnZ2VyLlJlYXNvbiIgfQotICAgICAgICB9Ci0gICAgXQotfQotXQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL3R5cGUtZGVjbGFyYXRpb24tZW51
bS10eXBlLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmMGFlZTljOTFiLi4w
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy90eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCisrKyAvZGV2L251
bGwKQEAgLTEsMTUgKzAsMCBAQAotewotICAgICJkb21haW4iOiAiUnVudGltZSIsCi0gICAgInR5
cGVzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiRmFybUFuaW1hbHMiLAotICAg
ICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKLSAgICAgICAgICAgICJlbnVtIjogWyJQaWdzIiwg
IkNvd3MiLCAiQ2F0cyIsICJIZW5zIl0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAg
ICAgImlkIjogIlR3b0xlZ2dlZEFuaW1hbHMiLAotICAgICAgICAgICAgInR5cGUiOiAic3RyaW5n
IiwKLSAgICAgICAgICAgICJlbnVtIjogWyJEdWNrcyIsICJIZW5zIiwgIkNyb3dzIiwgIkZsYW1p
bmdvcyJdCi0gICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy90eXBlLWRlY2xhcmF0aW9uLW9i
amVjdC10eXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy90eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjNDNjMzMwOTkyLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy90eXBlLWRl
Y2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBA
QAotWwotewotICAgICJkb21haW4iOiAiRGF0YWJhc2UiLAotICAgICJkZXNjcmlwdGlvbiI6ICJU
ZXN0IHR5cGUgYnVpbGRlciBnZW5lcmF0aW9uIG9mIHZhcmlvdXMgb2JqZWN0IHR5cGVzLiIsCi0g
ICAgInR5cGVzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiRXJyb3IiLAotICAg
ICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJE
YXRhYmFzZSBlcnJvci4iLAotICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCi0gICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJtZXNzYWdlIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9u
IjogIkVycm9yIG1lc3NhZ2UuIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29kZSIs
ICJ0eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgY29kZS4iIH0KLSAgICAg
ICAgICAgIF0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIkVycm9y
TGlzdCIsCi0gICAgICAgICAgICAidHlwZSI6ICJhcnJheSIsCi0gICAgICAgICAgICAiaXRlbXMi
OiB7ICIkcmVmIjogIkVycm9yIiB9Ci0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAg
ICJpZCI6ICJNb3VzZUJ1dHRvbiIsCi0gICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAotICAg
ICAgICAgICAgImRlc2NyaXB0aW9uIjogIkVudW1lcmF0ZXMgZGlmZmVyZW50IG1vdXNlIGJ1dHRv
bnMgdGhhdCBjYW4gYmUgdXNlZC4iLAotICAgICAgICAgICAgImVudW0iOiBbCi0gICAgICAgICAg
ICAgICAgIk5vbmUiLAotICAgICAgICAgICAgICAgICJMZWZ0IiwKLSAgICAgICAgICAgICAgICAi
TWlkZGxlIiwKLSAgICAgICAgICAgICAgICAiUmlnaHQiCi0gICAgICAgICAgICBdCi0gICAgICAg
IH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJPcHRpb25hbFBhcmFtZXRlckJ1bmRs
ZSIsCi0gICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAotICAgICAgICAgICAgInByb3BlcnRp
ZXMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjog
ImFycmF5IiwgIm9wdGlvbmFsIjogdHJ1ZSwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0g
fSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImJ1dHRvbnMiLCAidHlwZSI6ICJhcnJheSIs
ICJvcHRpb25hbCI6IHRydWUsICJpdGVtcyI6IHsgIiRyZWYiOiAiTW91c2VCdXR0b24iIH0gfSwK
LSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRpcmVjdGlvbmFsaXR5IiwgInR5cGUiOiAic3Ry
aW5nIiwgImVudW0iOiBbIkxUUiIsICJSVEwiXSwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwi
OiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6
ICJudW1iZXIiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiwgIm9wdGlvbmFsIjog
dHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZXJyb3IiLCAiJHJlZiI6ICJFcnJv
ciIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImVycm9y
TGlzdCIsICIkcmVmIjogIkVycm9yTGlzdCIsICJvcHRpb25hbCI6IHRydWUgfQotICAgICAgICAg
ICAgXQotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiUGFyYW1ldGVy
QnVuZGxlIiwKLSAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCi0gICAgICAgICAgICAicHJv
cGVydGllcyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5
cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAotICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAiYnV0dG9ucyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAi
JHJlZiI6ICJNb3VzZUJ1dHRvbiIgfSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGly
ZWN0aW9uYWxpdHkiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsiTFRSIiwgIlJUTCJdIH0s
Ci0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIgfSwK
LSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIg
fSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIg
fSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiIH0s
Ci0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJlcnJvciIsICIkcmVmIjogIkVycm9yIiB9LAot
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZXJyb3JMaXN0IiwgIiRyZWYiOiAiRXJyb3JMaXN0
IiB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJp
ZCI6ICJPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzIiwKLSAgICAgICAgICAgICJkZXNj
cmlwdGlvbiI6ICJDb25mbGljdGVkIG5hbWVzIG1heSBjYXVzZSBnZW5lcmF0ZWQgZ2V0dGVycy9z
ZXR0ZXJzIHRvIGNsYXNoIHdpdGggYnVpbHQtaW4gSW5zcGVjdG9yT2JqZWN0IG1ldGhvZHMuIiwK
LSAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCi0gICAgICAgICAgICAicHJvcGVydGllcyI6
IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImludGVnZXIiLCAidHlwZSI6ICJzdHJpbmci
IH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJhcnJheSIsICJ0eXBlIjogInN0cmluZyIg
fSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInN0cmluZyIsICJ0eXBlIjogInN0cmluZyIg
fSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlIiwgInR5cGUiOiAic3RyaW5nIiB9
LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAib2JqZWN0IiwgInR5cGUiOiAic3RyaW5nIiB9
Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6
ICJEdW1teU9iamVjdCIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQW4gb3BlbiBvYmpl
Y3QgdGhhdCBkb2Vzbid0IGhhdmUgYW55IHByZWRlZmluZWQgZmllbGRzLiIsCi0gICAgICAgICAg
ICAidHlwZSI6ICJvYmplY3QiCi0gICAgICAgIH0KLSAgICBdCi19LAotewotICAgICJkb21haW4i
OiAiVGVzdCIsCi0gICAgImRlc2NyaXB0aW9uIjogIlRlc3QgdGhlIGdlbmVyYXRpb24gb2Ygc3Bl
Y2lhbCBiZWhhdmlvcnMgdGhhdCBvbmx5IGFwcGx5IHRvIHNwZWNpZmljIGNsYXNzZXMuIiwKLSAg
ICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJQYXJhbWV0ZXJCdW5k
bGUiLAotICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKLSAgICAgICAgICAgICJwcm9wZXJ0
aWVzIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGlyZWN0aW9uYWxpdHkiLCAidHlw
ZSI6ICJzdHJpbmciLCAiZW51bSI6IFsiTFRSIiwgIlJUTCJdIH0sCi0gICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJidXR0b25zIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICIkcmVmIjog
IkRhdGFiYXNlLk1vdXNlQnV0dG9uIiB9IH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJj
b2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmci
IH0gfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5n
IiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVt
YmVyIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2Jq
ZWN0IiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFu
eSIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImVycm9yIiwgIiRyZWYiOiAiRGF0YWJh
c2UuRXJyb3IiIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfQotICAgIF0KLX0KLV0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmljL3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL3R5cGUtcmVxdWlyaW5nLXJ1bnRp
bWUtY2FzdHMuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODNkOTRiZTg5N2Qu
LjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgorKysgL2Rl
di9udWxsCkBAIC0xLDUxICswLDAgQEAKLVsKLXsKLSAgICAiZG9tYWluIjogIlRlc3QiLAotICAg
ICJ0eXBlcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIlR5cGVOZWVkaW5nQ2Fz
dCIsCi0gICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAotICAgICAgICAgICAgImRlc2NyaXB0
aW9uIjogIkEgZHVtbXkgdHlwZSB0aGF0IHJlcXVpcmVzIHJ1bnRpbWUgY2FzdHMsIGFuZCBmb3Jj
ZXMgbm9uLXByaW1pdGl2ZSByZWZlcmVuY2VkIHR5cGVzIHRvIGFsc28gZW1pdCBydW50aW1lIGNh
c3QgaGVscGVycy4iLAotICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCi0gICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJzdHJpbmciLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAi
U3RyaW5nIG1lbWJlci4iIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJudW1iZXIiLCAi
dHlwZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9uIjogIk51bWJlciBtZW1iZXIuIiB9LAotICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAiYW5pbWFscyIsICIkcmVmIjogIkNhc3RlZEFuaW1hbHMi
LCAiZGVzY3JpcHRpb24iOiAiRW51bSBtZW1iZXIuIiB9LAotICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAiaWQiLCAiJHJlZiI6ICJDYXN0ZWRPYmplY3RJZCIsICJkZXNjcmlwdGlvbiI6ICJBbGlh
c2VkIG1lbWJlci4iIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0cmVlIiwgIiRyZWYi
OiAiUmVjdXJzaXZlT2JqZWN0MSIsICJkZXNjcmlwdGlvbiI6ICJSZWN1cnNpdmUgb2JqZWN0IG1l
bWJlci4iIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAg
ICAgImlkIjogIkNhc3RlZE9iamVjdElkIiwKLSAgICAgICAgICAgICJ0eXBlIjogImludGVnZXIi
Ci0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJVbmNhc3RlZE9iamVj
dElkIiwKLSAgICAgICAgICAgICJ0eXBlIjogImludGVnZXIiCi0gICAgICAgIH0sCi0gICAgICAg
IHsKLSAgICAgICAgICAgICJpZCI6ICJVbmNhc3RlZEFuaW1hbHMiLAotICAgICAgICAgICAgInR5
cGUiOiAic3RyaW5nIiwKLSAgICAgICAgICAgICJlbnVtIjogWyJQaWdzIiwgIkNvd3MiLCAiQ2F0
cyIsICJIZW5zIl0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIkNh
c3RlZEFuaW1hbHMiLAotICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKLSAgICAgICAgICAg
ICJlbnVtIjogWyJEdWNrcyIsICJIZW5zIiwgIkNyb3dzIiwgIkZsYW1pbmdvcyJdCi0gICAgICAg
IH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJSZWN1cnNpdmVPYmplY3QxIiwKLSAg
ICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCi0gICAgICAgICAgICAicHJvcGVydGllcyI6IFsK
LSAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm9iaiIsICIkcmVmIjogIlJlY3Vyc2l2ZU9iamVj
dDIiLCAib3B0aW9uYWwiOiB0cnVlIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfSwKLSAgICAg
ICAgewotICAgICAgICAgICAgImlkIjogIlJlY3Vyc2l2ZU9iamVjdDIiLAotICAgICAgICAgICAg
InR5cGUiOiAib2JqZWN0IiwKLSAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwotICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAib2JqIiwgIiRyZWYiOiAiUmVjdXJzaXZlT2JqZWN0MSIsICJvcHRp
b25hbCI6IHRydWUgfQotICAgICAgICAgICAgXQotICAgICAgICB9Ci0gICAgXQotfQotXQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvdHlwZS13aXRoLW9wZW4tcGFyYW1l
dGVycy5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OWIwMjIwZDMxMi4uMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2dlbmVyaWMvdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uCisrKyAvZGV2L251bGwK
QEAgLTEsMjEgKzAsMCBAQAotewotICAgICJkb21haW4iOiAiVGVzdCIsCi0gICAgInR5cGVzIjog
WwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiTm9PcGVuUGFyYW1ldGVycyIsCi0gICAg
ICAgICAgICAidHlwZSI6ICJvYmplY3QiLAotICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCi0g
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJvbmUiLCAidHlwZSI6ICJudW1iZXIiIH0sCi0gICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJ0d28iLCAidHlwZSI6ICJudW1iZXIiIH0KLSAgICAgICAg
ICAgIF0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIk9wZW5QYXJh
bWV0ZXJzIiwKLSAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCi0gICAgICAgICAgICAicHJv
cGVydGllcyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImFscGhhIiwgInR5cGUiOiAi
bnVtYmVyIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYmV0YSIsICJ0eXBlIjogIm51
bWJlciIgfQotICAgICAgICAgICAgXQotICAgICAgICB9Ci0gICAgXQotfQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvdmVy
c2lvbi5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvdmVyc2lvbi5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MDdh
NWQ5MDE3Ni4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvdmVyc2lvbi5qc29uCisrKyAvZGV2L251bGwKQEAgLTEs
NiArMCwwIEBACi17ImRvbWFpbnMiOlsKLXsKLSAgICAiZG9tYWluIjogIlZlcnNpb25Eb21haW4i
LAotICAgICJ2ZXJzaW9uIjogNDIKLX0KLV19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvaW9zL2RlZmluaXRpb25zLXdpdGgtbWFjLXBs
YXRmb3JtLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvaW9zL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDgxN2YxMzVlZTVhLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvaW9zL2RlZmluaXRpb25zLXdpdGgt
bWFjLXBsYXRmb3JtLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi17Ci0gICAg
ImRvbWFpbiI6ICJOZXR3b3JrIiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAg
ICAgICJpZCI6ICJOZXR3b3JrRXJyb3IiLAotICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwK
LSAgICAgICAgICAgICJwbGF0Zm9ybSI6ICJtYWNvcyIsCi0gICAgICAgICAgICAicHJvcGVydGll
cyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm1lc3NhZ2UiLCAidHlwZSI6ICJzdHJp
bmciLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgbWVzc2FnZS4iIH0sCi0gICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJjb2RlIiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJFcnJv
ciBjb2RlLiIgfQotICAgICAgICAgICAgXQotICAgICAgICB9Ci0gICAgXSwKLSAgICAiY29tbWFu
ZHMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJjZSIsCi0g
ICAgICAgICAgICAicGxhdGZvcm0iOiAibWFjb3MiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9u
IjogIkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5z
cGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKLSAgICAgICAgfQotICAg
IF0sCi0gICAgImV2ZW50cyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAicmVz
b3VyY2VMb2FkZWQiLAotICAgICAgICAgICAgInBsYXRmb3JtIjogIm1hY29zIiwKLSAgICAgICAg
ICAgICJkZXNjcmlwdGlvbiI6ICJBIHJlc291cmNlIHdhcyBsb2FkZWQuIgotICAgICAgICB9Ci0g
ICAgXQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2lvcy9leHBlY3RlZC9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29u
LXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9p
b3MvZXhwZWN0ZWQvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbi1yZXN1bHQKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0YzBmZTNmZTNjLi4wMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvaW9zL2V4cGVj
dGVkL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24tcmVzdWx0CisrKyAvZGV2L251
bGwKQEAgLTEsODcwICswLDAgQEAKLSMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29t
bWFuZHMuanMKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13
aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0jIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9u
Y2UKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi0jaW5j
bHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckZyb250ZW5kUm91dGVyLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNrZW5k
RGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2Jh
Y2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQotICAgIEJhY2tlbmREaXNw
YXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3Bh
dGNoZXIuZ2V0KCk7IH0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBt
X2JhY2tlbmREaXNwYXRjaGVyOwotfTsKLQotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
Ci0KLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSMj
IyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVk
ZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsK
LQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2Vu
ZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMu
Y3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1t
YWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVy
cy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIu
aD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ry
b3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2lmIEVOQUJMRShJTlNQ
RUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlcnMuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0K
LX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlz
cGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5o
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMt
cGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNs
dWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgot
Ci1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgRnJvbnRlbmRSb3V0ZXI7Ci0KLX0gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVy
cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9y
bS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgotCi0j
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi19IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRj
aGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3Jt
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdt
YSBvbmNlCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVz
Lmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7
Ci0KLQotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotCi0KLQotCi0KLQotfSAvLyBuYW1l
c3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbE9iamVjdHMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2Jq
ZWN0cy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13
aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmpl
Y3RzLmgiCi0KLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1uYW1lc3BhY2UgUHJvdG9jb2wg
ewotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW5jbHVk
ZSA8d3RmL1JldGFpblB0ci5oPgotCi0KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2Vu
ZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNw
YXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25z
LXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNr
ZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0j
aW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW5jbHVkZSA8d3RmL0pT
T05WYWx1ZXMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5t
bQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0u
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0
IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+Ci0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxp
dHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDog
TlNPYmplY3QKLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRp
b24uaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRm
b3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2lt
cG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2xJbnRlcm5hbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgi
Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgot
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+
Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0
Y2hlcnMuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVycy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW1wbGVtZW50YXRpb24g
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29u
dHJvbGxlciogX2NvbnRyb2xsZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRy
b2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgotewotICAg
IHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmls
OwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7
Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAgIFtzdXBlciBk
ZWFsbG9jXTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbi5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVy
cy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgt
bWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11
c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
RXZlbnREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0
Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNp
bXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3Iv
UldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+Ci0KLQotCi0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVn
ZXIsIFRlc3RQcm90b2NvbFBsYXRmb3JtKSB7Ci0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1BbGws
Ci0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljLAotICAgIFRlc3RQcm90b2NvbFBsYXRm
b3JtSU9TLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1MsCi19OwotCi0KLQotCi0KLQot
Ci0KLQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxp
dHlPYmplY3RzLmg+Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgot
I2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKLSNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8d3Rm
L0pTT05WYWx1ZXMuaD4KLQotCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5h
bC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRm
b3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2lt
cG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xB
cnJheUNvbnZlcnNpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBPYmpDRW51bVR5cGU+Ci1PcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2Nv
bFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29s
U3RyaW5nKFRlc3RQcm90b2NvbFBsYXRmb3JtIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkg
ewotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1BbGw6Ci0gICAgICAgIHJldHVybiAiYWxs
Il9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOgotICAgICAgICByZXR1
cm4gImdlbmVyaWMiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzoKLSAgICAg
ICAgcmV0dXJuICJpb3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOgot
ICAgICAgICByZXR1cm4gIm1hY29zIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5l
IE9wdGlvbmFsPFRlc3RQcm90b2NvbFBsYXRmb3JtPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gImFsbCIpCi0gICAgICAgIHJldHVy
biBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDsKLSAgICBpZiAodmFsdWUgPT0gImdlbmVyaWMiKQot
ICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOwotICAgIGlmICh2YWx1
ZSA9PSAiaW9zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOwotICAg
IGlmICh2YWx1ZSA9PSAibWFjb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZv
cm1NYWNPUzsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi19IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAot
Ci0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0u
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0
ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29s
LmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCi0jaW1wb3J0IDxXZWJJbnNw
ZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotCi11c2luZyBuYW1lc3BhY2Ug
SW5zcGVjdG9yOwotCi0KLQotCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZv
cm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1w
b3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmpl
Y3RQcml2YXRlLmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3RmL0pT
T05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0jIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvbWFjL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRm
b3JtLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
bWFjL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDgxN2YxMzVlZTVhLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvbWFjL2RlZmluaXRpb25zLXdpdGgtbWFj
LXBsYXRmb3JtLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi17Ci0gICAgImRv
bWFpbiI6ICJOZXR3b3JrIiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAg
ICJpZCI6ICJOZXR3b3JrRXJyb3IiLAotICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKLSAg
ICAgICAgICAgICJwbGF0Zm9ybSI6ICJtYWNvcyIsCi0gICAgICAgICAgICAicHJvcGVydGllcyI6
IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm1lc3NhZ2UiLCAidHlwZSI6ICJzdHJpbmci
LCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgbWVzc2FnZS4iIH0sCi0gICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJjb2RlIiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBj
b2RlLiIgfQotICAgICAgICAgICAgXQotICAgICAgICB9Ci0gICAgXSwKLSAgICAiY29tbWFuZHMi
OiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJjZSIsCi0gICAg
ICAgICAgICAicGxhdGZvcm0iOiAibWFjb3MiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjog
IkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVj
dGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKLSAgICAgICAgfQotICAgIF0s
Ci0gICAgImV2ZW50cyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAicmVzb3Vy
Y2VMb2FkZWQiLAotICAgICAgICAgICAgInBsYXRmb3JtIjogIm1hY29zIiwKLSAgICAgICAgICAg
ICJkZXNjcmlwdGlvbiI6ICJBIHJlc291cmNlIHdhcyBsb2FkZWQuIgotICAgICAgICB9Ci0gICAg
XQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL21hYy9leHBlY3RlZC9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uLXJl
c3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9tYWMv
ZXhwZWN0ZWQvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbi1yZXN1bHQKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2ZTY4ZjRhOWFlLi4wMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvbWFjL2V4cGVjdGVk
L2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24tcmVzdWx0CisrKyAvZGV2L251bGwK
QEAgLTEsMTIxNyArMCwwIEBACi0jIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1h
bmRzLmpzCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0
aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0vLyBOZXR3b3JrCi1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJOZXR3
b3JrIiwgbnVsbCk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiTmV0d29yay5s
b2FkUmVzb3VyY2UiLCBudWxsLCBbXSwgW10pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckV2
ZW50KCJOZXR3b3JrLnJlc291cmNlTG9hZGVkIiwgbnVsbCwgW10pOwotSW5zcGVjdG9yQmFja2Vu
ZC5yZWdpc3Rlck5ldHdvcmtEaXNwYXRjaGVyID0gSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRp
c3BhdGNoZXIuYmluZChJbnNwZWN0b3JCYWNrZW5kLCAiTmV0d29yayIpOwotSW5zcGVjdG9yQmFj
a2VuZC5hY3RpdmF0ZURvbWFpbigiTmV0d29yayIsIG51bGwpOwotIyMjIEVuZCBGaWxlOiBJbnNw
ZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRl
ZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgi
Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4K
LSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotCi1u
YW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIg
ewotcHVibGljOgotICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmRE
aXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUo
ZGlzcGF0Y2hlcik7IH0KLSAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIo
KSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Ci1wcml2YXRlOgot
ICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKLX07Ci0K
LQotY2xhc3MgQWx0ZXJuYXRlTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVy
bmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5BbHRlcm5hdGVO
ZXR3b3JrQmFja2VuZERpc3BhdGNoZXIoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291
cmNlKGxvbmcgY2FsbElkKSA9IDA7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQot
I2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotIyMjIEVu
ZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQot
bmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCi0j
aWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi1jbGFzcyBBbHRlcm5h
dGVOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI7Ci0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0KLWNsYXNzIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXIgewotcHVibGljOgotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UoRXJyb3JTdHJp
bmcmKSA9IDA7Ci1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB+TmV0d29ya0JhY2tlbmREaXNwYXRj
aGVySGFuZGxlcigpOwotfTsKLQotY2xhc3MgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyIGZpbmFs
IDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICBz
dGF0aWMgUmVmPE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRj
aGVyJiwgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIHZvaWQgZGlzcGF0
Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0
PiYmIG1lc3NhZ2UpIGZpbmFsOwotcHJpdmF0ZToKLSAgICB2b2lkIGxvYWRSZXNvdXJjZShsb25n
IHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKLSNpZiBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLXB1YmxpYzoKLSAgICB2b2lkIHNl
dEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyKiBh
bHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURp
c3BhdGNoZXI7IH0KLXByaXZhdGU6Ci0gICAgQWx0ZXJuYXRlTmV0d29ya0JhY2tlbmREaXNwYXRj
aGVyKiBtX2FsdGVybmF0ZURpc3BhdGNoZXIgeyBudWxscHRyIH07Ci0jZW5kaWYKLXByaXZhdGU6
Ci0gICAgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiwgTmV0d29y
a0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIqIG1fYWdlbnQgeyBudWxscHRyIH07Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1
ZXMuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKLSNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jZW5kaWYK
LQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLU5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXI6On5OZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9Ci0KLVJlZjxOZXR3b3Jr
QmFja2VuZERpc3BhdGNoZXI+IE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEJhY2tl
bmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVy
SGFuZGxlciogYWdlbnQpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTmV0d29ya0JhY2tl
bmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOwotfQotCi1OZXR3b3JrQmFj
a2VuZERpc3BhdGNoZXI6Ok5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hl
ciYgYmFja2VuZERpc3BhdGNoZXIsIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFn
ZW50KQotICAgIDogU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNo
ZXIpCi0gICAgLCBtX2FnZW50KGFnZW50KQotewotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJl
Z2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbigiTmV0d29yayJfcywgdGhpcyk7Ci19Ci0KLXZvaWQg
TmV0d29ya0JhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3Qg
U3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKLXsKLSAgICBSZWY8
TmV0d29ya0JhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKLQotICAgIFJlZlB0cjxK
U09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMi
X3MsIHBhcmFtZXRlcnMpOwotCi0gICAgaWYgKG1ldGhvZCA9PSAibG9hZFJlc291cmNlIikKLSAg
ICAgICAgbG9hZFJlc291cmNlKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7Ci0gICAg
ZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJh
Y2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrLiIgKyBtZXRob2QgKyAi
JyB3YXMgbm90IGZvdW5kIik7Ci19Ci0KLXZvaWQgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyOjps
b2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCi17Ci0j
aWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0gICAgaWYgKG1fYWx0
ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRS
ZXNvdXJjZShyZXF1ZXN0SWQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAg
ICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZShlcnJvcik7Ci0K
LSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5z
ZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNl
Ci0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2Vu
ZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMu
Y3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0u
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21h
IG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDx3dGYv
SlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgRnJvbnRlbmRSb3V0ZXI7Ci0KLWNsYXNzIE5ldHdvcmtG
cm9udGVuZERpc3BhdGNoZXIgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGlj
OgotICAgIE5ldHdvcmtGcm9udGVuZERpc3BhdGNoZXIoRnJvbnRlbmRSb3V0ZXImIGZyb250ZW5k
Um91dGVyKSA6IG1fZnJvbnRlbmRSb3V0ZXIoZnJvbnRlbmRSb3V0ZXIpIHsgfQotICAgIHZvaWQg
cmVzb3VyY2VMb2FkZWQoKTsKLXByaXZhdGU6Ci0gICAgRnJvbnRlbmRSb3V0ZXImIG1fZnJvbnRl
bmRSb3V0ZXI7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTog
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5k
RGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5p
dGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEZyb250
ZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZy
b250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKLQotdm9pZCBOZXR3b3JrRnJvbnRlbmREaXNwYXRjaGVyOjpyZXNvdXJj
ZUxvYWRlZCgpCi17Ci0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywg
Ik5ldHdvcmsucmVzb3VyY2VMb2FkZWQiX3MpOwotCi0gICAgbV9mcm9udGVuZFJvdXRlci5zZW5k
RXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0j
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1
ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotbmFt
ZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLS8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgotbmFtZXNw
YWNlIE5ldHdvcmsgewotY2xhc3MgTmV0d29ya0Vycm9yOwotfSAvLyBOZXR3b3JrCi0vLyBFbmQg
b2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCi0KLQotCi0KLW5hbWVzcGFjZSBOZXR3b3JrIHsKLWNs
YXNzIE5ldHdvcmtFcnJvciA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKLXB1YmxpYzoKLSAg
ICBlbnVtIHsKLSAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAotICAgICAgICBNZXNzYWdlU2V0ID0g
MSA8PCAwLAotICAgICAgICBDb2RlU2V0ID0gMSA8PCAxLAotICAgICAgICBBbGxGaWVsZHNTZXQg
PSAoTWVzc2FnZVNldCB8IENvZGVTZXQpCi0gICAgfTsKLQotICAgIHRlbXBsYXRlPGludCBTVEFU
RT4KLSAgICBjbGFzcyBCdWlsZGVyIHsKLSAgICBwcml2YXRlOgotICAgICAgICBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiBtX3Jlc3VsdDsKLQotICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRl
cjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBCdWlsZGVyKFJlZjwvKk5ldHdvcmtFcnJvciovSlNPTjo6T2JqZWN0
PiYmIG9iamVjdCkKLSAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwg
YnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKLSAgICAgICAgfQotICAgICAgICBm
cmllbmQgY2xhc3MgTmV0d29ya0Vycm9yOwotICAgIHB1YmxpYzoKLQotICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgTWVzc2FnZVNldD4mIHNldE1lc3NhZ2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAg
ICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE1lc3NhZ2VTZXQp
LCBwcm9wZXJ0eV9tZXNzYWdlX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXRTdHJpbmcoIm1lc3NhZ2UiX3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3Rh
dGU8TWVzc2FnZVNldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBD
b2RlU2V0PiYgc2V0Q29kZShpbnQgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBDb2RlU2V0KSwgcHJvcGVydHlfY29kZV9hbHJlYWR5X3NldCk7
Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcigiY29kZSJfcywgdmFsdWUpOwotICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb2RlU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgUmVmPE5ldHdvcmtFcnJvcj4gcmVsZWFzZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7
Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoTmV0d29ya0Vycm9yKSA9PSBzaXpl
b2YoSlNPTjo6T2JqZWN0KSwgY2Fubm90X2Nhc3QpOwotCi0gICAgICAgICAgICBSZWY8SlNPTjo6
T2JqZWN0PiBqc29uUmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKLSAgICAgICAg
ICAgIGF1dG8gcmVzdWx0ID0gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8TmV0d29ya0Vy
cm9yPio+KCZqc29uUmVzdWx0KSk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAg
ICB9Ci0gICAgfTsKLQotICAgIC8qCi0gICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgotICAg
ICAqIFJlZjxOZXR3b3JrRXJyb3I+IHJlc3VsdCA9IE5ldHdvcmtFcnJvcjo6Y3JlYXRlKCkKLSAg
ICAgKiAgICAgLnNldE1lc3NhZ2UoLi4uKQotICAgICAqICAgICAuc2V0Q29kZSguLi4pCi0gICAg
ICogICAgIC5yZWxlYXNlKCk7Ci0gICAgICovCi0gICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNT
ZXQ+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4o
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7Ci0gICAgfQotfTsKLQotfSAvLyBOZXR3b3JrCi0KLQot
Ci19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xPYmplY3RzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRl
ZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbE9iamVjdHMuaCIKLQotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLW5hbWVzcGFj
ZSBQcm90b2NvbCB7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAot
Ci0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9y
bS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMu
aD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLUBwcm90b2NvbCBUZXN0UHJvdG9jb2xO
ZXR3b3JrRG9tYWluSGFuZGxlcjsKLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotY2xhc3Mg
T2JqQ0luc3BlY3Rvck5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRl
cm5hdGVOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwotcHVibGljOgotICAgIE9iakNJbnNwZWN0b3JOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIo
aWQ8VGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0
ZSA9IGhhbmRsZXI7IH0KLSAgICB2b2lkIGxvYWRSZXNvdXJjZShsb25nIHJlcXVlc3RJZCkgZmlu
YWw7Ci1wcml2YXRlOgotICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWlu
SGFuZGxlcj4+IG1fZGVsZWdhdGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQot
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25m
aWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5j
bHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotCi1uYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKLQotdm9pZCBPYmpDSW5zcGVjdG9yTmV0d29ya0JhY2tlbmREaXNwYXRjaGVy
Ojpsb2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0SWQpCi17Ci0gICAgaWYgKCFbbV9kZWxlZ2F0ZSBy
ZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGxvYWRSZXNvdXJjZVdpdGhFcnJvckNhbGxiYWNr
OnN1Y2Nlc3NDYWxsYmFjazopXSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBv
cnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZv
dW5kLCAiJ05ldHdvcmsubG9hZFJlc291cmNlJyB3YXMgbm90IGZvdW5kIl9zKTsKLSAgICAgICAg
YmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewot
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJ
ZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7Ci0gICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgfTsKLQotICAgIGlkIHN1
Y2Nlc3NDYWxsYmFjayA9IF57Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNw
b25zZShyZXF1ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKLSAgICB9Owot
Ci0gICAgW21fZGVsZWdhdGUgbG9hZFJlc291cmNlV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxs
YmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKLX0KLQotCi19IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0
Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBs
YXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgotCi1fX2F0dHJpYnV0ZV9fKCh2
aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJh
dGlvbiA6IE5TT2JqZWN0Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluLCBzZXR0ZXI9c2V0
TmV0d29ya0hhbmRsZXI6KSBpZDxUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluSGFuZGxlcj4gbmV0
d29ya0hhbmRsZXI7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFRlc3RQcm90b2Nv
bE5ldHdvcmtEb21haW5FdmVudERpc3BhdGNoZXIgKm5ldHdvcmtFdmVudERpc3BhdGNoZXI7Ci1A
ZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24uaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwu
aCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KLSNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0j
aW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLQot
dXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24KLXsKLSAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9j
b250cm9sbGVyOwotICAgIGlkPFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5IYW5kbGVyPiBfbmV0
d29ya0hhbmRsZXI7Ci0gICAgVGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkV2ZW50RGlzcGF0Y2hl
ciAqX25ldHdvcmtFdmVudERpc3BhdGNoZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0
aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgot
ewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1
cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRy
b2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAgIFtf
bmV0d29ya0hhbmRsZXIgcmVsZWFzZV07Ci0gICAgW19uZXR3b3JrRXZlbnREaXNwYXRjaGVyIHJl
bGVhc2VdOwotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAodm9pZClzZXROZXR3b3JrSGFu
ZGxlcjooaWQ8VGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkhhbmRsZXI+KWhhbmRsZXIKLXsKLSAg
ICBpZiAoaGFuZGxlciA9PSBfbmV0d29ya0hhbmRsZXIpCi0gICAgICAgIHJldHVybjsKLQotICAg
IFtfbmV0d29ya0hhbmRsZXIgcmVsZWFzZV07Ci0gICAgX25ldHdvcmtIYW5kbGVyID0gW2hhbmRs
ZXIgcmV0YWluXTsKLQotICAgIGF1dG8gYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IG1ha2VVbmlxdWU8
T2JqQ0luc3BlY3Rvck5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7Ci0gICAgYXV0
byBhbHRlcm5hdGVBZ2VudCA9IG1ha2VVbmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8
TmV0d29ya0JhY2tlbmREaXNwYXRjaGVyLCBBbHRlcm5hdGVOZXR3b3JrQmFja2VuZERpc3BhdGNo
ZXI+PigiTmV0d29yayJfcywgKl9jb250cm9sbGVyLCBXVEZNb3ZlKGFsdGVybmF0ZURpc3BhdGNo
ZXIpKTsKLSAgICBfY29udHJvbGxlci0+YXBwZW5kRXh0cmFBZ2VudChXVEZNb3ZlKGFsdGVybmF0
ZUFnZW50KSk7Ci19Ci0KLS0gKGlkPFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5IYW5kbGVyPilu
ZXR3b3JrSGFuZGxlcgotewotICAgIHJldHVybiBfbmV0d29ya0hhbmRsZXI7Ci19Ci0KLS0gKFRl
c3RQcm90b2NvbE5ldHdvcmtEb21haW5FdmVudERpc3BhdGNoZXIgKiluZXR3b3JrRXZlbnREaXNw
YXRjaGVyCi17Ci0gICAgaWYgKCFfbmV0d29ya0V2ZW50RGlzcGF0Y2hlcikKLSAgICAgICAgX25l
dHdvcmtFdmVudERpc3BhdGNoZXIgPSBbW1Rlc3RQcm90b2NvbE5ldHdvcmtEb21haW5FdmVudERp
c3BhdGNoZXIgYWxsb2NdIGluaXRXaXRoQ29udHJvbGxlcjpfY29udHJvbGxlcl07Ci0gICAgcmV0
dXJuIF9uZXR3b3JrRXZlbnREaXNwYXRjaGVyOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5o
IgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPHd0
Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1l
bnRhdGlvbiBUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluRXZlbnREaXNwYXRjaGVyCi17Ci0gICAg
QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKLX0KLQotLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9s
bGVyKiljb250cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNl
bGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIpOwotICAgIF9j
b250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZCly
ZXNvdXJjZUxvYWRlZAotewotICAgIGNvbnN0IEZyb250ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29u
dHJvbGxlci0+ZnJvbnRlbmRSb3V0ZXIoKTsKLQotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25N
ZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3Ry
aW5nKCJtZXRob2QiX3MsICJOZXR3b3JrLnJlc291cmNlTG9hZGVkIl9zKTsKLSAgICByb3V0ZXIu
c2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Ci19Ci0KLUBlbmQKLQotCi0j
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
ZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4K
LQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgotCi0KLUBj
bGFzcyBUZXN0UHJvdG9jb2xOZXR3b3JrRXJyb3I7Ci0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVn
ZXIsIFRlc3RQcm90b2NvbFBsYXRmb3JtKSB7Ci0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1BbGws
Ci0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljLAotICAgIFRlc3RQcm90b2NvbFBsYXRm
b3JtSU9TLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1MsCi19OwotCi0KLQotCi1fX2F0
dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3Rv
Y29sTmV0d29ya0Vycm9yIDogUldJUHJvdG9jb2xKU09OT2JqZWN0Ci0tIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsK
LS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05P
YmplY3QgKilqc29uT2JqZWN0OwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTWVzc2FnZTooTlNT
dHJpbmcgKiltZXNzYWdlIGNvZGU6KGludCljb2RlOwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5
IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICptZXNzYWdlOwotLyogcmVxdWlyZWQgKi8gQHBy
b3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgaW50IGNvZGU7Ci1AZW5kCi0KLUBwcm90b2NvbCBU
ZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluSGFuZGxlciA8TlNPYmplY3Q+Ci1Ab3B0aW9uYWwKLS0g
KHZvaWQpbG9hZFJlc291cmNlV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVy
cm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKSh2b2lkKSlzdWNjZXNz
Q2FsbGJhY2s7Ci1AZW5kCi0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0Iikp
KQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluRXZlbnREaXNwYXRjaGVyIDog
TlNPYmplY3QKLS0gKHZvaWQpcmVzb3VyY2VMb2FkZWQ7Ci1AZW5kCi0KLQotI2ltcG9ydCA8V2Vi
SW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgotCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJ
bnRlcm5hbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMt
d2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2Nv
bEpTT05PYmplY3RQcml2YXRlLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJs
ZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLUBp
bnRlcmZhY2UgVGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkV2ZW50RGlzcGF0Y2hlciAoUHJpdmF0
ZSkKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEluc3BlY3Rvcjo6QXVnbWVu
dGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyOwotQGVuZAotCi0KLSMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBk
ZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCA8
V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgotCi1uYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgotT3B0aW9uYWw8
T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0K
LWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xQbGF0Zm9ybSB2YWx1
ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3Jt
QWxsOgotICAgICAgICByZXR1cm4gImFsbCJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRm
b3JtR2VuZXJpYzoKLSAgICAgICAgcmV0dXJuICJnZW5lcmljIl9zOwotICAgIGNhc2UgVGVzdFBy
b3RvY29sUGxhdGZvcm1JT1M6Ci0gICAgICAgIHJldHVybiAiaW9zIl9zOwotICAgIGNhc2UgVGVz
dFByb3RvY29sUGxhdGZvcm1NYWNPUzoKLSAgICAgICAgcmV0dXJuICJtYWNvcyJfczsKLSAgICB9
Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xQbGF0Zm9ybT4g
ZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVl
ID09ICJhbGwiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1BbGw7Ci0gICAg
aWYgKHZhbHVlID09ICJnZW5lcmljIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRm
b3JtR2VuZXJpYzsKLSAgICBpZiAodmFsdWUgPT0gImlvcyIpCi0gICAgICAgIHJldHVybiBUZXN0
UHJvdG9jb2xQbGF0Zm9ybUlPUzsKLSAgICBpZiAodmFsdWUgPT0gIm1hY29zIikKLSAgICAgICAg
cmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKLX0KLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBk
ZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5
cGVQYXJzZXIuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQ
cml2YXRlLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbnRlcmZhY2UgVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChOZXR3b3JrRG9tYWluKQotCi0rICh2b2lkKV9wYXJz
ZU5ldHdvcmtFcnJvcjooVGVzdFByb3RvY29sTmV0d29ya0Vycm9yICoqKW91dFZhbHVlIGZyb21Q
YXlsb2FkOihpZClwYXlsb2FkOwotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMgKE5ldHdvcmtEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlTmV0d29y
a0Vycm9yOihUZXN0UHJvdG9jb2xOZXR3b3JrRXJyb3IgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6
KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQs
IFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbE5l
dHdvcmtFcnJvciBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOwotfQotCi1AZW5kCi0K
LQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRl
cm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBv
cnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0jaW1wb3J0
IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcg
bmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sTmV0
d29ya0Vycm9yCi0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNE
aWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQKLXsKLSAgICBpZiAoIShzZWxmID0g
W3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAIm1lc3NhZ2UiXSwgQCJtZXNzYWdlIik7
Ci0gICAgc2VsZi5tZXNzYWdlID0gcGF5bG9hZFtAIm1lc3NhZ2UiXTsKLQotICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImNvZGUiXSwgQCJjb2RlIik7
Ci0gICAgc2VsZi5jb2RlID0gW3BheWxvYWRbQCJjb2RlIl0gaW50ZWdlclZhbHVlXTsKLQotICAg
IHJldHVybiBzZWxmOwotfQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6
KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9iamVjdAotewotICAgIGlmICghKHNlbGYgPSBbc3Vw
ZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmplY3QgdG9KU09OT2JqZWN0XS5nZXQoKV0pKQotICAg
ICAgICByZXR1cm4gbmlsOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBjb2RlOihpbnQpY29kZQotewot
ICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0g
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShtZXNzYWdlLCBAIm1lc3Nh
Z2UiKTsKLQotICAgIHNlbGYubWVzc2FnZSA9IG1lc3NhZ2U7Ci0gICAgc2VsZi5jb2RlID0gY29k
ZTsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKXNldE1lc3NhZ2U6KE5TU3RyaW5n
ICopbWVzc2FnZQotewotICAgIFtzdXBlciBzZXRTdHJpbmc6bWVzc2FnZSBmb3JLZXk6QCJtZXNz
YWdlIl07Ci19Ci0KLS0gKE5TU3RyaW5nICopbWVzc2FnZQotewotICAgIHJldHVybiBbc3VwZXIg
c3RyaW5nRm9yS2V5OkAibWVzc2FnZSJdOwotfQotCi0tICh2b2lkKXNldENvZGU6KGludCljb2Rl
Ci17Ci0gICAgW3N1cGVyIHNldEludGVnZXI6Y29kZSBmb3JLZXk6QCJjb2RlIl07Ci19Ci0KLS0g
KGludCljb2RlCi17Ci0gICAgcmV0dXJuIFtzdXBlciBpbnRlZ2VyRm9yS2V5OkAiY29kZSJdOwot
fQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3NhbWUt
dHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uM2JmNGRmZjVjY2MKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgpAQCAtMCwwICsxLDIyIEBACitb
Cit7CisgICAgImRvbWFpbiI6ICJSdW50aW1lIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsK
KyAgICAgICAgICAgICJpZCI6ICJSZW1vdGVPYmplY3RJZCIsCisgICAgICAgICAgICAidHlwZSI6
ICJzdHJpbmciLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBvYmplY3QgaWRl
bnRpZmllci4iCisgICAgICAgIH0KKyAgICBdCit9LAoreworICAgICJkb21haW4iOiAiUnVudGlt
ZTIiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlJlbW90
ZU9iamVjdElkIiwKKyAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAi
ZGVzY3JpcHRpb24iOiAiVW5pcXVlIG9iamVjdCBpZGVudGlmaWVyLiIKKyAgICAgICAgfQorICAg
IF0KK30KK10KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9zaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbiBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9zaGFkb3dlZC1vcHRpb25hbC10
eXBlLXNldHRlcnMuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u
MjBhMGMxNTUyNzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24K
QEAgLTAsMCArMSwzMSBAQAoreworICAgICJkb21haW4iOiAiUnVudGltZSIsCisgICAgInR5cGVz
IjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiS2V5UGF0aCIsCisgICAgICAgICAg
ICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIktleSBwYXRo
LiIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICJuYW1lIjogInR5cGUiLAorICAgICAgICAgICAgICAgICAgICAidHlw
ZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgICAgICAgICAiZW51bSI6IFsibnVsbCIsICJzdHJp
bmciLCAiYXJyYXkiXSwKKyAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIktleSBw
YXRoIHR5cGUuIgorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAibmFtZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgICAgICAgICAidHlw
ZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAg
ICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiU3RyaW5nIHZhbHVlLiIKKyAgICAgICAg
ICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgIm5hbWUi
OiAiYXJyYXkiLAorICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJhcnJheSIsCisgICAgICAg
ICAgICAgICAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAgICAgICAgICAgICAgICJpdGVt
cyI6IHsgInR5cGUiOiAic3RyaW5nIiB9LAorICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRp
b24iOiAiQXJyYXkgdmFsdWUuIgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAg
ICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9zaG91bGQtc3RyaXAtY29tbWVudHMuanNvbiBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9zaG91bGQtc3RyaXAtY29tbWVu
dHMuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZWNlMWRjZmM2
MWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KQEAgLTAsMCArMSw1IEBACit7
CisgICAgLyogYWJvdmUgKi8KKyAgICAvKiBiZWZvcmUgKi8gImRvbWFpbiIgLyogaW4gKi8gOiAv
KiBpbiAqLyAiQ29tbWVudCIgLyogYWZ0ZXIgKi8KKyAgICAvKiBiZWxvdyAqLworfQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUt
ZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1w
cmltaXRpdmUtdHlwZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
Li5jYmM5ZDUzOTQ3OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZl
LXR5cGUuanNvbgpAQCAtMCwwICsxLDEwIEBACit7CisgICAgImRvbWFpbiI6ICJSdW50aW1lIiwK
KyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJSZW1vdGVPYmpl
Y3RJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJpbnRlZ2VyIiwKKyAgICAgICAgICAgICJkZXNj
cmlwdGlvbiI6ICJVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIuIgorICAgICAgICB9CisgICAgXQor
fQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL3R5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5q
c29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jZmIwOGJkOTQwYgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgpAQCAtMCwwICsxLDUwIEBA
CitbCit7CisgICAgImRvbWFpbiI6ICJEZWJ1Z2dlciIsCisgICAgInR5cGVzIjogWworICAgICAg
ICB7CisgICAgICAgICAgICAiaWQiOiAiQnJlYWtwb2ludElkIiwKKyAgICAgICAgICAgICJ0eXBl
IjogImludGVnZXIiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJS
ZWFzb24iLAorICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICJlbnVt
IjogWyJEaWVkIiwgIkZhaW50ZWQiLCAiSHVuZ3J5Il0KKyAgICAgICAgfQorICAgIF0KK30sCit7
CisgICAgImRvbWFpbiI6ICJSdW50aW1lIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAg
ICAgICAgICAgICJpZCI6ICJPYmplY3RJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJpbnRlZ2Vy
IgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiTHVja3lOdW1iZXJz
IiwKKyAgICAgICAgICAgICJ0eXBlIjogImFycmF5IiwKKyAgICAgICAgICAgICJpdGVtcyI6IHsg
InR5cGUiOiAiaW50ZWdlciIgfQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAi
aWQiOiAiQmFieU5hbWVzIiwKKyAgICAgICAgICAgICJ0eXBlIjogImFycmF5IiwKKyAgICAgICAg
ICAgICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9CisgICAgICAgIH0sCisgICAgICAgIHsK
KyAgICAgICAgICAgICJpZCI6ICJOZXdPYmplY3RzIiwKKyAgICAgICAgICAgICJ0eXBlIjogImFy
cmF5IiwKKyAgICAgICAgICAgICJpdGVtcyI6IHsgIiRyZWYiOiAiT2JqZWN0SWQiIH0KKyAgICAg
ICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIk9sZE9iamVjdHMiLAorICAgICAg
ICAgICAgInR5cGUiOiAiYXJyYXkiLAorICAgICAgICAgICAgIml0ZW1zIjogeyAiJHJlZiI6ICJE
ZWJ1Z2dlci5CcmVha3BvaW50SWQiIH0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAg
ICAgImlkIjogIlN0b3BSZWFzb25zIiwKKyAgICAgICAgICAgICJ0eXBlIjogImFycmF5IiwKKyAg
ICAgICAgICAgICJpdGVtcyI6IHsgIiRyZWYiOiAiRGVidWdnZXIuUmVhc29uIiB9CisgICAgICAg
IH0KKyAgICBdCit9CitdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbiBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9u
LWVudW0tdHlwZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45
ZjBhZWU5YzkxYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCkBAIC0w
LDAgKzEsMTUgQEAKK3sKKyAgICAiZG9tYWluIjogIlJ1bnRpbWUiLAorICAgICJ0eXBlcyI6IFsK
KyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkZhcm1BbmltYWxzIiwKKyAgICAgICAgICAg
ICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAiZW51bSI6IFsiUGlncyIsICJDb3dzIiwg
IkNhdHMiLCAiSGVucyJdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6
ICJUd29MZWdnZWRBbmltYWxzIiwKKyAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAg
ICAgICAgICAiZW51bSI6IFsiRHVja3MiLCAiSGVucyIsICJDcm93cyIsICJGbGFtaW5nb3MiXQor
ICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbiBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLWRlY2xh
cmF0aW9uLW9iamVjdC10eXBlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAuLjJjNDNjMzMwOTkyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUu
anNvbgpAQCAtMCwwICsxLDEwMCBAQAorWworeworICAgICJkb21haW4iOiAiRGF0YWJhc2UiLAor
ICAgICJkZXNjcmlwdGlvbiI6ICJUZXN0IHR5cGUgYnVpbGRlciBnZW5lcmF0aW9uIG9mIHZhcmlv
dXMgb2JqZWN0IHR5cGVzLiIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAg
ICAiaWQiOiAiRXJyb3IiLAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAg
ICAgICJkZXNjcmlwdGlvbiI6ICJEYXRhYmFzZSBlcnJvci4iLAorICAgICAgICAgICAgInByb3Bl
cnRpZXMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJtZXNzYWdlIiwgInR5cGUiOiAi
c3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIG1lc3NhZ2UuIiB9LAorICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAiY29kZSIsICJ0eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAi
RXJyb3IgY29kZS4iIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAg
ICAgICAgICAgImlkIjogIkVycm9yTGlzdCIsCisgICAgICAgICAgICAidHlwZSI6ICJhcnJheSIs
CisgICAgICAgICAgICAiaXRlbXMiOiB7ICIkcmVmIjogIkVycm9yIiB9CisgICAgICAgIH0sCisg
ICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJNb3VzZUJ1dHRvbiIsCisgICAgICAgICAgICAi
dHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkVudW1lcmF0ZXMg
ZGlmZmVyZW50IG1vdXNlIGJ1dHRvbnMgdGhhdCBjYW4gYmUgdXNlZC4iLAorICAgICAgICAgICAg
ImVudW0iOiBbCisgICAgICAgICAgICAgICAgIk5vbmUiLAorICAgICAgICAgICAgICAgICJMZWZ0
IiwKKyAgICAgICAgICAgICAgICAiTWlkZGxlIiwKKyAgICAgICAgICAgICAgICAiUmlnaHQiCisg
ICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJP
cHRpb25hbFBhcmFtZXRlckJ1bmRsZSIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAor
ICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJj
b2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIm9wdGlvbmFsIjogdHJ1ZSwgIml0ZW1zIjog
eyAidHlwZSI6ICJzdHJpbmciIH0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImJ1dHRv
bnMiLCAidHlwZSI6ICJhcnJheSIsICJvcHRpb25hbCI6IHRydWUsICJpdGVtcyI6IHsgIiRyZWYi
OiAiTW91c2VCdXR0b24iIH0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRpcmVjdGlv
bmFsaXR5IiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbIkxUUiIsICJSVEwiXSwgIm9wdGlv
bmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6
ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9u
YWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUi
OiAiYW55IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
ZXJyb3IiLCAiJHJlZiI6ICJFcnJvciIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogImVycm9yTGlzdCIsICIkcmVmIjogIkVycm9yTGlzdCIsICJvcHRpb25h
bCI6IHRydWUgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAg
ICAgICAiaWQiOiAiUGFyYW1ldGVyQnVuZGxlIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVj
dCIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0
cmluZyIgfSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYnV0dG9ucyIsICJ0eXBlIjog
ImFycmF5IiwgIml0ZW1zIjogeyAiJHJlZiI6ICJNb3VzZUJ1dHRvbiIgfSB9LAorICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAiZGlyZWN0aW9uYWxpdHkiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51
bSI6IFsiTFRSIiwgIlJUTCJdIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIs
ICJ0eXBlIjogInN0cmluZyIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFt
cCIsICJ0eXBlIjogIm51bWJlciIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVl
cyIsICJ0eXBlIjogIm9iamVjdCIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxv
YWQiLCAidHlwZSI6ICJhbnkiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJlcnJvciIs
ICIkcmVmIjogIkVycm9yIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZXJyb3JMaXN0
IiwgIiRyZWYiOiAiRXJyb3JMaXN0IiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAg
ICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3Rz
IiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJDb25mbGljdGVkIG5hbWVzIG1heSBjYXVz
ZSBnZW5lcmF0ZWQgZ2V0dGVycy9zZXR0ZXJzIHRvIGNsYXNoIHdpdGggYnVpbHQtaW4gSW5zcGVj
dG9yT2JqZWN0IG1ldGhvZHMuIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAg
ICAgICAgICAicHJvcGVydGllcyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImludGVn
ZXIiLCAidHlwZSI6ICJzdHJpbmciIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJhcnJh
eSIsICJ0eXBlIjogInN0cmluZyIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInN0cmlu
ZyIsICJ0eXBlIjogInN0cmluZyIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVl
IiwgInR5cGUiOiAic3RyaW5nIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAib2JqZWN0
IiwgInR5cGUiOiAic3RyaW5nIiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAg
IHsKKyAgICAgICAgICAgICJpZCI6ICJEdW1teU9iamVjdCIsCisgICAgICAgICAgICAiZGVzY3Jp
cHRpb24iOiAiQW4gb3BlbiBvYmplY3QgdGhhdCBkb2Vzbid0IGhhdmUgYW55IHByZWRlZmluZWQg
ZmllbGRzLiIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiCisgICAgICAgIH0KKyAgICBd
Cit9LAoreworICAgICJkb21haW4iOiAiVGVzdCIsCisgICAgImRlc2NyaXB0aW9uIjogIlRlc3Qg
dGhlIGdlbmVyYXRpb24gb2Ygc3BlY2lhbCBiZWhhdmlvcnMgdGhhdCBvbmx5IGFwcGx5IHRvIHNw
ZWNpZmljIGNsYXNzZXMuIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAg
ICJpZCI6ICJQYXJhbWV0ZXJCdW5kbGUiLAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwK
KyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
ZGlyZWN0aW9uYWxpdHkiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsiTFRSIiwgIlJUTCJd
IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJidXR0b25zIiwgInR5cGUiOiAiYXJyYXki
LCAiaXRlbXMiOiB7ICIkcmVmIjogIkRhdGFiYXNlLk1vdXNlQnV0dG9uIiB9IH0sCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1z
IjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5v
dGVzIiwgInR5cGUiOiAic3RyaW5nIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGlt
ZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
dmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
cGF5bG9hZCIsICJ0eXBlIjogImFueSIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImVy
cm9yIiwgIiRyZWYiOiAiRGF0YWJhc2UuRXJyb3IiIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAg
fQorICAgIF0KK30KK10KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy90eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24gYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1yZXF1aXJpbmct
cnVudGltZS1jYXN0cy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
Li44M2Q5NGJlODk3ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24K
QEAgLTAsMCArMSw1MSBAQAorWworeworICAgICJkb21haW4iOiAiVGVzdCIsCisgICAgInR5cGVz
IjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiVHlwZU5lZWRpbmdDYXN0IiwKKyAg
ICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAi
QSBkdW1teSB0eXBlIHRoYXQgcmVxdWlyZXMgcnVudGltZSBjYXN0cywgYW5kIGZvcmNlcyBub24t
cHJpbWl0aXZlIHJlZmVyZW5jZWQgdHlwZXMgdG8gYWxzbyBlbWl0IHJ1bnRpbWUgY2FzdCBoZWxw
ZXJzLiIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKKyAgICAgICAgICAgICAgICB7ICJu
YW1lIjogInN0cmluZyIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJTdHJpbmcg
bWVtYmVyLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm51bWJlciIsICJ0eXBlIjog
ImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAiTnVtYmVyIG1lbWJlci4iIH0sCisgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJhbmltYWxzIiwgIiRyZWYiOiAiQ2FzdGVkQW5pbWFscyIsICJkZXNj
cmlwdGlvbiI6ICJFbnVtIG1lbWJlci4iIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJp
ZCIsICIkcmVmIjogIkNhc3RlZE9iamVjdElkIiwgImRlc2NyaXB0aW9uIjogIkFsaWFzZWQgbWVt
YmVyLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRyZWUiLCAiJHJlZiI6ICJSZWN1
cnNpdmVPYmplY3QxIiwgImRlc2NyaXB0aW9uIjogIlJlY3Vyc2l2ZSBvYmplY3QgbWVtYmVyLiIg
fQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQi
OiAiQ2FzdGVkT2JqZWN0SWQiLAorICAgICAgICAgICAgInR5cGUiOiAiaW50ZWdlciIKKyAgICAg
ICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlVuY2FzdGVkT2JqZWN0SWQiLAor
ICAgICAgICAgICAgInR5cGUiOiAiaW50ZWdlciIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAg
ICAgICAgICAgImlkIjogIlVuY2FzdGVkQW5pbWFscyIsCisgICAgICAgICAgICAidHlwZSI6ICJz
dHJpbmciLAorICAgICAgICAgICAgImVudW0iOiBbIlBpZ3MiLCAiQ293cyIsICJDYXRzIiwgIkhl
bnMiXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiQ2FzdGVkQW5p
bWFscyIsCisgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgImVudW0i
OiBbIkR1Y2tzIiwgIkhlbnMiLCAiQ3Jvd3MiLCAiRmxhbWluZ29zIl0KKyAgICAgICAgfSwKKyAg
ICAgICAgeworICAgICAgICAgICAgImlkIjogIlJlY3Vyc2l2ZU9iamVjdDEiLAorICAgICAgICAg
ICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAib2JqIiwgIiRyZWYiOiAiUmVjdXJzaXZlT2JqZWN0MiIsICJv
cHRpb25hbCI6IHRydWUgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7Cisg
ICAgICAgICAgICAiaWQiOiAiUmVjdXJzaXZlT2JqZWN0MiIsCisgICAgICAgICAgICAidHlwZSI6
ICJvYmplY3QiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJvYmoiLCAiJHJlZiI6ICJSZWN1cnNpdmVPYmplY3QxIiwgIm9wdGlvbmFsIjog
dHJ1ZSB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdCit9CitdCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS13aXRo
LW9wZW4tcGFyYW1ldGVycy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL3R5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbgpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOTliMDIyMGQzMTIKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS13aXRo
LW9wZW4tcGFyYW1ldGVycy5qc29uCkBAIC0wLDAgKzEsMjEgQEAKK3sKKyAgICAiZG9tYWluIjog
IlRlc3QiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIk5v
T3BlblBhcmFtZXRlcnMiLAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAg
ICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAib25lIiwgInR5
cGUiOiAibnVtYmVyIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidHdvIiwgInR5cGUi
OiAibnVtYmVyIiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAg
ICAgICAgICJpZCI6ICJPcGVuUGFyYW1ldGVycyIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmpl
Y3QiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJhbHBoYSIsICJ0eXBlIjogIm51bWJlciIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogImJldGEiLCAidHlwZSI6ICJudW1iZXIiIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQor
ICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy92ZXJzaW9uLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvdmVyc2lvbi5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwLi41MDdhNWQ5MDE3NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy92ZXJzaW9uLmpzb24KQEAgLTAsMCArMSw2
IEBACit7ImRvbWFpbnMiOlsKK3sKKyAgICAiZG9tYWluIjogIlZlcnNpb25Eb21haW4iLAorICAg
ICJ2ZXJzaW9uIjogNDIKK30KK119CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmlkbCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JGcm9udGVuZEhvc3QuaWRsCmluZGV4IGU3OGMxODkxOTYyLi4yY2NhMWI3MDMyYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9z
dC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9z
dC5pZGwKQEAgLTkzLDkgKzkzLDcgQEAKICAgICBib29sZWFuIGlzQmVpbmdJbnNwZWN0ZWQoKTsK
IAogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBib29sZWFuIHN1cHBvcnRzRGlhZ25vc3RpY0xvZ2dp
bmc7Ci0jaWYgRU5BQkxFX0lOU1BFQ1RPUl9URUxFTUVUUlkKLSAgICB2b2lkIGxvZ0RpYWdub3N0
aWNFdmVudChET01TdHJpbmcgZXZlbnROYW1lLCBET01TdHJpbmcgY29udGVudCk7Ci0jZW5kaWYK
KyAgICBbQ29uZGl0aW9uYWw9SU5TUEVDVE9SX1RFTEVNRVRSWV0gdm9pZCBsb2dEaWFnbm9zdGlj
RXZlbnQoRE9NU3RyaW5nIGV2ZW50TmFtZSwgRE9NU3RyaW5nIGNvbnRlbnQpOwogfTsKIAogZGlj
dGlvbmFyeSBDb250ZXh0TWVudUl0ZW0gewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcAppbmRleCAwYzQ0MmVlOTA4OC4uYWNh
OTMyODZhYTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JJbnN0cnVtZW50YXRpb24uY3BwCkBAIC03OTMsMTEgKzc5MywxMyBAQCB2b2lkIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6ZnJhbWVDbGVhcmVkU2NoZWR1bGVkTmF2aWdhdGlvbkltcGwoSW5z
dHJ1bWVudGluZwogICAgICAgICBpbnNwZWN0b3JQYWdlQWdlbnQtPmZyYW1lQ2xlYXJlZFNjaGVk
dWxlZE5hdmlnYXRpb24oZnJhbWUpOwogfQogCisjaWYgRU5BQkxFKERBUktfTU9ERV9DU1MpIHx8
IEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCiB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6ZGVmYXVsdEFwcGVhcmFuY2VEaWRDaGFuZ2VJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGlu
c3RydW1lbnRpbmdBZ2VudHMsIGJvb2wgdXNlRGFya0FwcGVhcmFuY2UpCiB7CiAgICAgaWYgKElu
c3BlY3RvclBhZ2VBZ2VudCogaW5zcGVjdG9yUGFnZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50
cy5pbnNwZWN0b3JQYWdlQWdlbnQoKSkKICAgICAgICAgaW5zcGVjdG9yUGFnZUFnZW50LT5kZWZh
dWx0QXBwZWFyYW5jZURpZENoYW5nZSh1c2VEYXJrQXBwZWFyYW5jZSk7CiB9CisjZW5kaWYKIAog
dm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxEZXN0cm95Q2FjaGVkUmVzb3VyY2VJ
bXBsKENhY2hlZFJlc291cmNlJiBjYWNoZWRSZXNvdXJjZSkKIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaAppbmRleCAwM2JkZDU1
Y2M5My4uMTg4OTU2NDc4ZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgKQEAgLTIyOSw3ICsyMjksOSBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIHZvaWQgZnJhbWVTdG9wcGVkTG9hZGluZyhGcmFtZSYpOwogICAgIHN0YXRpYyB2
b2lkIGZyYW1lU2NoZWR1bGVkTmF2aWdhdGlvbihGcmFtZSYsIFNlY29uZHMgZGVsYXkpOwogICAg
IHN0YXRpYyB2b2lkIGZyYW1lQ2xlYXJlZFNjaGVkdWxlZE5hdmlnYXRpb24oRnJhbWUmKTsKKyNp
ZiBFTkFCTEUoREFSS19NT0RFX0NTUykgfHwgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKICAg
ICBzdGF0aWMgdm9pZCBkZWZhdWx0QXBwZWFyYW5jZURpZENoYW5nZShQYWdlJiwgYm9vbCB1c2VE
YXJrQXBwZWFyYW5jZSk7CisjZW5kaWYKICAgICBzdGF0aWMgdm9pZCB3aWxsRGVzdHJveUNhY2hl
ZFJlc291cmNlKENhY2hlZFJlc291cmNlJik7CiAKICAgICBzdGF0aWMgYm9vbCB3aWxsSW50ZXJj
ZXB0UmVxdWVzdChjb25zdCBGcmFtZSosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYpOwpAQCAtNDM0
LDcgKzQzNiw5IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgZnJhbWVTdG9wcGVkTG9hZGlu
Z0ltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYsIEZyYW1lJik7CiAgICAgc3RhdGljIHZvaWQgZnJh
bWVTY2hlZHVsZWROYXZpZ2F0aW9uSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiwgRnJhbWUmLCBT
ZWNvbmRzIGRlbGF5KTsKICAgICBzdGF0aWMgdm9pZCBmcmFtZUNsZWFyZWRTY2hlZHVsZWROYXZp
Z2F0aW9uSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiwgRnJhbWUmKTsKKyNpZiBFTkFCTEUoREFS
S19NT0RFX0NTUykgfHwgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKICAgICBzdGF0aWMgdm9p
ZCBkZWZhdWx0QXBwZWFyYW5jZURpZENoYW5nZUltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYsIGJv
b2wgdXNlRGFya0FwcGVhcmFuY2UpOworI2VuZGlmCiAgICAgc3RhdGljIHZvaWQgd2lsbERlc3Ry
b3lDYWNoZWRSZXNvdXJjZUltcGwoQ2FjaGVkUmVzb3VyY2UmKTsKIAogICAgIHN0YXRpYyBib29s
IHdpbGxJbnRlcmNlcHRSZXF1ZXN0SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiwgY29uc3QgUmVz
b3VyY2VSZXF1ZXN0Jik7CkBAIC0xMjM3LDExICsxMjQxLDEzIEBAIGlubGluZSB2b2lkIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6ZnJhbWVDbGVhcmVkU2NoZWR1bGVkTmF2aWdhdGlvbihGcmFt
ZSYgZnJhCiAgICAgICAgIGZyYW1lQ2xlYXJlZFNjaGVkdWxlZE5hdmlnYXRpb25JbXBsKCppbnN0
cnVtZW50aW5nQWdlbnRzLCBmcmFtZSk7CiB9CiAKKyNpZiBFTkFCTEUoREFSS19NT0RFX0NTUykg
fHwgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6ZGVmYXVsdEFwcGVhcmFuY2VEaWRDaGFuZ2UoUGFnZSYgcGFnZSwgYm9vbCB1
c2VEYXJrQXBwZWFyYW5jZSkKIHsKICAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFModm9p
ZCgpKTsKICAgICBkZWZhdWx0QXBwZWFyYW5jZURpZENoYW5nZUltcGwoaW5zdHJ1bWVudGluZ0Fn
ZW50c0ZvclBhZ2UocGFnZSksIHVzZURhcmtBcHBlYXJhbmNlKTsKIH0KKyNlbmRpZgogCiBpbmxp
bmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxEZXN0cm95Q2FjaGVkUmVzb3Vy
Y2UoQ2FjaGVkUmVzb3VyY2UmIGNhY2hlZFJlc291cmNlKQogewpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclNoYWRlclByb2dyYW0uY3BwIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclNoYWRlclByb2dyYW0uY3BwCmluZGV4IDI5MWJkMjRi
MDZmLi5mODE2YmI2ZjQzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvclNoYWRlclByb2dyYW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JTaGFkZXJQcm9ncmFtLmNwcApAQCAtMjYsNiArMjYsOCBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIkluc3BlY3RvclNoYWRlclByb2dyYW0uaCIKIAorI2lmIEVOQUJM
RShXRUJHTCkgfHwgRU5BQkxFKFdFQkdQVSkKKwogI2luY2x1ZGUgIkluc3BlY3RvckNhbnZhcy5o
IgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lkZW50aWZpZXJzRmFjdG9yeS5oPgogI2luY2x1
ZGUgPHd0Zi9PcHRpb25hbC5oPgpAQCAtMTUyLDEwICsxNTQsNiBAQCBzdGF0aWMgUmVmUHRyPFdl
YkdQVVNoYWRlck1vZHVsZT4gc2hhZGVyRm9yVHlwZShXZWJHUFVQaXBlbGluZSYgcGlwZWxpbmUs
IEluc3BlYwogCiBTdHJpbmcgSW5zcGVjdG9yU2hhZGVyUHJvZ3JhbTo6cmVxdWVzdFNoYWRlclNv
dXJjZShJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OlNoYWRlclR5cGUgc2hhZGVyVHlwZSkK
IHsKLSNpZiAhRU5BQkxFKFdFQkdMKSAmJiAhRU5BQkxFKFdFQkdQVSkKLSAgICBVTlVTRURfUEFS
QU0oc2hhZGVyVHlwZSk7Ci0jZW5kaWYKLQogICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcHJv
Z3JhbSwKICNpZiBFTkFCTEUoV0VCR0wpCiAgICAgICAgIFsmXSAoc3RkOjpyZWZlcmVuY2Vfd3Jh
cHBlcjxXZWJHTFByb2dyYW0+IHByb2dyYW1XcmFwcGVyKSB7CkBAIC0xODQsMTEgKzE4Miw2IEBA
IFN0cmluZyBJbnNwZWN0b3JTaGFkZXJQcm9ncmFtOjpyZXF1ZXN0U2hhZGVyU291cmNlKEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6CiAKIGJvb2wgSW5zcGVjdG9yU2hhZGVyUHJvZ3JhbTo6
dXBkYXRlU2hhZGVyKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6U2hhZGVyVHlwZSBzaGFk
ZXJUeXBlLCBjb25zdCBTdHJpbmcmIHNvdXJjZSkKIHsKLSNpZiAhRU5BQkxFKFdFQkdMKSAmJiAh
RU5BQkxFKFdFQkdQVSkKLSAgICBVTlVTRURfUEFSQU0oc2hhZGVyVHlwZSk7Ci0gICAgVU5VU0VE
X1BBUkFNKHNvdXJjZSk7Ci0jZW5kaWYKLQogICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcHJv
Z3JhbSwKICNpZiBFTkFCTEUoV0VCR0wpCiAgICAgICAgIFsmXSAoc3RkOjpyZWZlcmVuY2Vfd3Jh
cHBlcjxXZWJHTFByb2dyYW0+IHByb2dyYW1XcmFwcGVyKSB7CkBAIC0yODEsMyArMjc0LDUgQEAg
UmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6U2hhZGVyUHJvZ3JhbT4gSW5zcGVjdG9y
U2hhZGVyUHJvZ3JhbTo6YnVpbGRPYmoKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclNoYWRlclByb2dyYW0uaCBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTaGFkZXJQcm9ncmFtLmgKaW5kZXggNmRmMTNkZmZk
ZWIuLmNjYzczY2VmMzc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yU2hhZGVyUHJvZ3JhbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JTaGFkZXJQcm9ncmFtLmgKQEAgLTI1LDYgKzI1LDggQEAKIAogI3ByYWdtYSBvbmNlCiAK
KyNpZiBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpCisKICNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbE9iamVjdHMuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2Fy
ZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CkBAIC05OSwzICsxMDEsNSBAQCBwcml2
YXRlOgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdF
QkdMKSB8fCBFTkFCTEUoV0VCR1BVKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JDYW52YXNBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvYWdlbnRzL0luc3BlY3RvckNhbnZhc0FnZW50LmNwcAppbmRleCAxZDM5OGM1NDdjYy4u
NWZmZjI5ODYzMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yQ2FudmFzQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9h
Z2VudHMvSW5zcGVjdG9yQ2FudmFzQWdlbnQuY3BwCkBAIC04OCw3ICs4OCw5IEBAIEluc3BlY3Rv
ckNhbnZhc0FnZW50OjpJbnNwZWN0b3JDYW52YXNBZ2VudChQYWdlQWdlbnRDb250ZXh0JiBjb250
ZXh0KQogICAgICwgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIoY29udGV4dC5pbmplY3RlZFNjcmlw
dE1hbmFnZXIpCiAgICAgLCBtX2luc3BlY3RlZFBhZ2UoY29udGV4dC5pbnNwZWN0ZWRQYWdlKQog
ICAgICwgbV9jYW52YXNEZXN0cm95ZWRUaW1lcigqdGhpcywgJkluc3BlY3RvckNhbnZhc0FnZW50
OjpjYW52YXNEZXN0cm95ZWRUaW1lckZpcmVkKQorI2lmIEVOQUJMRShXRUJHTCkgfHwgRU5BQkxF
KFdFQkdQVSkKICAgICAsIG1fcHJvZ3JhbURlc3Ryb3llZFRpbWVyKCp0aGlzLCAmSW5zcGVjdG9y
Q2FudmFzQWdlbnQ6OnByb2dyYW1EZXN0cm95ZWRUaW1lckZpcmVkKQorI2VuZGlmIC8vIEVOQUJM
RShXRUJHTCkgfHwgRU5BQkxFKFdFQkdQVSkKIHsKIH0KIApAQCAtMTMyLDcgKzEzNCw3IEBAIHZv
aWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYpCiAgICAgICAgICAg
ICAvLyBUaGUgYWN0dWFsICJjb250ZXh0IiBmb3IgV2ViR1BVIGlzIHRoZSBgV2ViR1BVRGV2aWNl
YCwgbm90IHRoZSA8Y2FudmFzPi4KICAgICAgICAgICAgIGlmIChpczxHUFVDYW52YXNDb250ZXh0
Pihjb250ZXh0KSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSNlbmRpZgorI2VuZGlmIC8v
IEVOQUJMRShXRUJHUFUpCiAKICAgICAgICAgICAgIGlmIChleGlzdHNJbkN1cnJlbnRQYWdlKGNv
bnRleHQtPmNhbnZhc0Jhc2UoKS5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpKQogICAgICAgICAg
ICAgICAgIGJpbmRDYW52YXMoKmNvbnRleHQsIGZhbHNlKTsKQEAgLTE0Nyw3ICsxNDksNyBAQCB2
b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjplbmFibGUoRXJyb3JTdHJpbmcmKQogICAgICAgICAg
ICAgICAgIGJpbmRDYW52YXMoKmRldmljZSwgZmFsc2UpOwogICAgICAgICB9CiAgICAgfQotI2Vu
ZGlmCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdQVSkKIAogI2lmIEVOQUJMRShXRUJHTCkKICAgICB7
CkBAIC0xNTcsNyArMTU5LDcgQEAgdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZW5hYmxlKEVy
cm9yU3RyaW5nJikKICAgICAgICAgICAgICAgICBkaWRDcmVhdGVXZWJHTFByb2dyYW0oKmNvbnRl
eHRXZWJHTEJhc2UsICpwcm9ncmFtKTsKICAgICAgICAgfQogICAgIH0KLSNlbmRpZgorI2VuZGlm
IC8vIEVOQUJMRShXRUJHTCkKIAogI2lmIEVOQUJMRShXRUJHUFUpCiAgICAgewpAQCAtMTY3LDcg
KzE2OSw3IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYp
CiAgICAgICAgICAgICAgICAgZGlkQ3JlYXRlV2ViR1BVUGlwZWxpbmUoKmRldmljZSwgKnBpcGVs
aW5lKTsKICAgICAgICAgfQogICAgIH0KLSNlbmRpZgorI2VuZGlmIC8vIEVOQUJMRShXRUJHUFUp
CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcmKQpA
QCAtMzAzLDYgKzMwNSw3IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnN0b3BSZWNvcmRp
bmcoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmCiAgICAgZGlkRmluaXNo
UmVjb3JkaW5nQ2FudmFzRnJhbWUoKmNvbnRleHQsIHRydWUpOwogfQogCisjaWYgRU5BQkxFKFdF
QkdMKSB8fCBFTkFCTEUoV0VCR1BVKQogdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6cmVxdWVz
dFNoYWRlclNvdXJjZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgcHJv
Z3JhbUlkLCBjb25zdCBTdHJpbmcmIHNoYWRlclR5cGVTdHJpbmcsIFN0cmluZyogb3V0U291cmNl
KQogewogICAgIGF1dG8gaW5zcGVjdG9yUHJvZ3JhbSA9IGFzc2VydEluc3BlY3RvclByb2dyYW0o
ZXJyb3JTdHJpbmcsIHByb2dyYW1JZCk7CkBAIC0zNDAsNiArMzQzLDcgQEAgdm9pZCBJbnNwZWN0
b3JDYW52YXNBZ2VudDo6dXBkYXRlU2hhZGVyKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29u
c3QgU3RyaW5nJgogICAgICAgICBlcnJvclN0cmluZyA9ICJGYWlsZWQgdG8gdXBkYXRlIHNoYWRl
ciBvZiBnaXZlbiBzaGFkZXJUeXBlIGZvciBnaXZlbiBwcm9ncmFtSWQiX3M7CiB9CiAKKyNpZiBF
TkFCTEUoV0VCR0wpCiB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpzZXRTaGFkZXJQcm9ncmFt
RGlzYWJsZWQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHByb2dyYW1J
ZCwgYm9vbCBkaXNhYmxlZCkKIHsKICAgICBhdXRvIGluc3BlY3RvclByb2dyYW0gPSBhc3NlcnRJ
bnNwZWN0b3JQcm9ncmFtKGVycm9yU3RyaW5nLCBwcm9ncmFtSWQpOwpAQCAtMzU3LDYgKzM2MSw4
IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnNldFNoYWRlclByb2dyYW1IaWdobGlnaHRl
ZChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsCiAKICAgICBpbnNwZWN0b3JQcm9ncmFtLT5zZXRI
aWdobGlnaHRlZChoaWdobGlnaHRlZCk7CiB9CisjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQorI2Vu
ZGlmIC8vI2lmIEVOQUJMRShXRUJHTCkgfHwgRU5BQkxFKFdFQkdQVSkKIAogdm9pZCBJbnNwZWN0
b3JDYW52YXNBZ2VudDo6ZnJhbWVOYXZpZ2F0ZWQoRnJhbWUmIGZyYW1lKQogewpAQCAtNjI1LDcg
KzYzMSw3IEBAIGJvb2wgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmlzV2ViR0xQcm9ncmFtSGlnaGxp
Z2h0ZWQoV2ViR0xQcm9ncmFtJiBwcm9ncmFtKQogCiAgICAgcmV0dXJuIGluc3BlY3RvclByb2dy
YW0tPmhpZ2hsaWdodGVkKCk7CiB9Ci0jZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCiAK
ICNpZiBFTkFCTEUoV0VCR1BVKQogdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZGlkQ3JlYXRl
V2ViR1BVRGV2aWNlKFdlYkdQVURldmljZSYgZGV2aWNlKQpAQCAtNjg4LDcgKzY5NCw3IEBAIHZv
aWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OndpbGxEZXN0cm95V2ViR1BVUGlwZWxpbmUoV2ViR1BV
UGlwZWxpbmUmIHBpcGVsaW5lKQogCiAgICAgdW5iaW5kUHJvZ3JhbSgqaW5zcGVjdG9yUHJvZ3Jh
bSk7CiB9Ci0jZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR1BVKQogCiB2b2lkIEluc3BlY3Rv
ckNhbnZhc0FnZW50OjpzdGFydFJlY29yZGluZyhJbnNwZWN0b3JDYW52YXMmIGluc3BlY3RvckNh
bnZhcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6UmVjb3JkaW5nOjpJbml0aWF0b3IgaW5pdGlhdG9y
LCBSZWNvcmRpbmdPcHRpb25zJiYgcmVjb3JkaW5nT3B0aW9ucykKIHsKQEAgLTcwMCwxMCArNzA2
LDEwIEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnN0YXJ0UmVjb3JkaW5nKEluc3BlY3Rv
ckNhbnZhcyYgaW5zcGVjdG9yQ2FudmFzLCBJbnNwCiAgICAgICAgICYmICFpczxJbWFnZUJpdG1h
cFJlbmRlcmluZ0NvbnRleHQ+KGNvbnRleHQpCiAjaWYgRU5BQkxFKFdFQkdMKQogICAgICAgICAm
JiAhaXM8V2ViR0xSZW5kZXJpbmdDb250ZXh0Pihjb250ZXh0KQotI2VuZGlmCisjZW5kaWYgLy8g
RU5BQkxFKFdFQkdMKQogI2lmIEVOQUJMRShXRUJHTDIpCiAgICAgICAgICYmICFpczxXZWJHTDJS
ZW5kZXJpbmdDb250ZXh0Pihjb250ZXh0KQotI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdM
MikKICAgICApCiAgICAgICAgIHJldHVybjsKIApAQCAtNzMzLDYgKzczOSw3IEBAIHZvaWQgSW5z
cGVjdG9yQ2FudmFzQWdlbnQ6OmNhbnZhc0Rlc3Ryb3llZFRpbWVyRmlyZWQoKQogICAgIG1fcmVt
b3ZlZENhbnZhc0lkZW50aWZpZXJzLmNsZWFyKCk7CiB9CiAKKyNpZiBFTkFCTEUoV0VCR0wpIHx8
IEVOQUJMRShXRUJHUFUpCiB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50Ojpwcm9ncmFtRGVzdHJv
eWVkVGltZXJGaXJlZCgpCiB7CiAgICAgaWYgKCFtX3JlbW92ZWRQcm9ncmFtSWRlbnRpZmllcnMu
c2l6ZSgpKQpAQCAtNzQzLDYgKzc1MCw3IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnBy
b2dyYW1EZXN0cm95ZWRUaW1lckZpcmVkKCkKIAogICAgIG1fcmVtb3ZlZFByb2dyYW1JZGVudGlm
aWVycy5jbGVhcigpOwogfQorI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkgfHwgRU5BQkxFKFdFQkdQ
VSkKIAogdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6cmVzZXQoKQogewpAQCAtNzU2LDEwICs3
NjQsMTIgQEAgdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6cmVzZXQoKQogICAgIGlmIChtX2Nh
bnZhc0Rlc3Ryb3llZFRpbWVyLmlzQWN0aXZlKCkpCiAgICAgICAgIG1fY2FudmFzRGVzdHJveWVk
VGltZXIuc3RvcCgpOwogCisjaWYgRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKQogICAg
IG1faWRlbnRpZmllclRvSW5zcGVjdG9yUHJvZ3JhbS5jbGVhcigpOwogICAgIG1fcmVtb3ZlZFBy
b2dyYW1JZGVudGlmaWVycy5jbGVhcigpOwogICAgIGlmIChtX3Byb2dyYW1EZXN0cm95ZWRUaW1l
ci5pc0FjdGl2ZSgpKQogICAgICAgICBtX3Byb2dyYW1EZXN0cm95ZWRUaW1lci5zdG9wKCk7Cisj
ZW5kaWYgLy8gRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKQogCiAgICAgbV9yZWNvcmRp
bmdDYW52YXNJZGVudGlmaWVycy5jbGVhcigpOwogfQpAQCAtNzk4LDcgKzgwOCw3IEBAIEluc3Bl
Y3RvckNhbnZhcyYgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmJpbmRDYW52YXMoV2ViR1BVRGV2aWNl
JiBkZXZpY2UsIGJvb2wgY2FwCiAKICAgICByZXR1cm4gaW5zcGVjdG9yQ2FudmFzOwogfQotI2Vu
ZGlmCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdQVSkKIAogdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2Vu
dDo6dW5iaW5kQ2FudmFzKEluc3BlY3RvckNhbnZhcyYgaW5zcGVjdG9yQ2FudmFzKQogewpAQCAt
ODExLDcgKzgyMSw3IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnVuYmluZENhbnZhcyhJ
bnNwZWN0b3JDYW52YXMmIGluc3BlY3RvckNhbnZhcykKIAogICAgIGZvciAoYXV0byogaW5zcGVj
dG9yUHJvZ3JhbSA6IHByb2dyYW1zVG9SZW1vdmUpCiAgICAgICAgIHVuYmluZFByb2dyYW0oKmlu
c3BlY3RvclByb2dyYW0pOwotI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQogCiAgICAg
aWYgKGF1dG8qIGNvbnRleHQgPSBpbnNwZWN0b3JDYW52YXMuY2FudmFzQ29udGV4dCgpKQogICAg
ICAgICBjb250ZXh0LT5jYW52YXNCYXNlKCkucmVtb3ZlT2JzZXJ2ZXIoKnRoaXMpOwpAQCAtODU2
LDggKzg2Niw5IEBAIFJlZlB0cjxJbnNwZWN0b3JDYW52YXM+IEluc3BlY3RvckNhbnZhc0FnZW50
OjpmaW5kSW5zcGVjdG9yQ2FudmFzKFdlYkdQVURldmljZSYKICAgICB9CiAgICAgcmV0dXJuIG51
bGxwdHI7CiB9Ci0jZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR1BVKQogCisjaWYgRU5BQkxF
KFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKQogdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6dW5i
aW5kUHJvZ3JhbShJbnNwZWN0b3JTaGFkZXJQcm9ncmFtJiBpbnNwZWN0b3JQcm9ncmFtKQogewog
ICAgIFN0cmluZyBpZGVudGlmaWVyID0gaW5zcGVjdG9yUHJvZ3JhbS5pZGVudGlmaWVyKCk7CkBA
IC04OTEsNyArOTAyLDcgQEAgUmVmUHRyPEluc3BlY3RvclNoYWRlclByb2dyYW0+IEluc3BlY3Rv
ckNhbnZhc0FnZW50OjpmaW5kSW5zcGVjdG9yUHJvZ3JhbShXZWJHTFAKICAgICB9CiAgICAgcmV0
dXJuIG51bGxwdHI7CiB9Ci0jZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCiAKICNpZiBF
TkFCTEUoV0VCR1BVKQogUmVmUHRyPEluc3BlY3RvclNoYWRlclByb2dyYW0+IEluc3BlY3RvckNh
bnZhc0FnZW50OjpmaW5kSW5zcGVjdG9yUHJvZ3JhbShXZWJHUFVQaXBlbGluZSYgcGlwZWxpbmUp
CkBAIC05MDIsNiArOTEzLDcgQEAgUmVmUHRyPEluc3BlY3RvclNoYWRlclByb2dyYW0+IEluc3Bl
Y3RvckNhbnZhc0FnZW50OjpmaW5kSW5zcGVjdG9yUHJvZ3JhbShXZWJHUFUKICAgICB9CiAgICAg
cmV0dXJuIG51bGxwdHI7CiB9Ci0jZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR1BVKQorI2Vu
ZGlmIC8vIEVOQUJMRShXRUJHTCkgfHwgRU5BQkxFKFdFQkdQVSkKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JDYW52YXNBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JDYW52YXNBZ2VudC5oCmluZGV4IGZmOWE1MzNlMDQ4Li4wZWYxYWVmYjY0NyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDYW52YXNBZ2Vu
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ2FudmFz
QWdlbnQuaApAQCAtNDMsMTcgKzQzLDE5IEBAIGNsYXNzIEluamVjdGVkU2NyaXB0TWFuYWdlcjsK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDsKKyNp
ZiBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpCiBjbGFzcyBJbnNwZWN0b3JTaGFkZXJQ
cm9ncmFtOwogI2lmIEVOQUJMRShXRUJHTCkKIGNsYXNzIFdlYkdMUHJvZ3JhbTsKIGNsYXNzIFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U7Ci0jZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wp
CiAjaWYgRU5BQkxFKFdFQkdQVSkKIGNsYXNzIEdQVUNhbnZhc0NvbnRleHQ7CiBjbGFzcyBXZWJH
UFVEZXZpY2U7CiBjbGFzcyBXZWJHUFVQaXBlbGluZTsKIGNsYXNzIFdlYkdQVVN3YXBDaGFpbjsK
LSNlbmRpZgorI2VuZGlmIC8vIEVOQUJMRShXRUJHUFUpCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdM
KSB8fCBFTkFCTEUoV0VCR1BVKQogCiB0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKIApAQCAt
NzksMTAgKzgxLDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFJlY29yZGluZ0F1dG9DYXB0dXJl
RnJhbWVDb3VudChFcnJvclN0cmluZyYsIGludCBjb3VudCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBz
dGFydFJlY29yZGluZyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgY2FudmFzSWQsIGNvbnN0
IGludCogZnJhbWVDb3VudCwgY29uc3QgaW50KiBtZW1vcnlMaW1pdCkgb3ZlcnJpZGU7CiAgICAg
dm9pZCBzdG9wUmVjb3JkaW5nKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBjYW52YXNJZCkg
b3ZlcnJpZGU7CisjaWYgRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKQogICAgIHZvaWQg
cmVxdWVzdFNoYWRlclNvdXJjZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgcHJvZ3JhbUlk
LCBjb25zdCBTdHJpbmcmIHNoYWRlclR5cGUsIFN0cmluZyogc291cmNlKSBvdmVycmlkZTsKICAg
ICB2b2lkIHVwZGF0ZVNoYWRlcihFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgcHJvZ3JhbUlk
LCBjb25zdCBTdHJpbmcmIHNoYWRlclR5cGUsIGNvbnN0IFN0cmluZyYgc291cmNlKSBvdmVycmlk
ZTsKKyNpZiBFTkFCTEUoV0VCR0wpCiAgICAgdm9pZCBzZXRTaGFkZXJQcm9ncmFtRGlzYWJsZWQo
RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHByb2dyYW1JZCwgYm9vbCBkaXNhYmxlZCkgb3Zl
cnJpZGU7CiAgICAgdm9pZCBzZXRTaGFkZXJQcm9ncmFtSGlnaGxpZ2h0ZWQoRXJyb3JTdHJpbmcm
LCBjb25zdCBTdHJpbmcmIHByb2dyYW1JZCwgYm9vbCBoaWdobGlnaHRlZCkgb3ZlcnJpZGU7Cisj
ZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQorI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkgfHwgRU5BQkxF
KFdFQkdQVSkKIAogICAgIC8vIENhbnZhc09ic2VydmVyCiAgICAgdm9pZCBjYW52YXNDaGFuZ2Vk
KENhbnZhc0Jhc2UmLCBjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKQEAgLTEwNCwxNCArMTEw
LDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIHdpbGxEZXN0cm95V2ViR0xQcm9ncmFtKFdlYkdMUHJv
Z3JhbSYpOwogICAgIGJvb2wgaXNXZWJHTFByb2dyYW1EaXNhYmxlZChXZWJHTFByb2dyYW0mKTsK
ICAgICBib29sIGlzV2ViR0xQcm9ncmFtSGlnaGxpZ2h0ZWQoV2ViR0xQcm9ncmFtJik7Ci0jZW5k
aWYKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCiAjaWYgRU5BQkxFKFdFQkdQVSkKICAgICB2b2lk
IGRpZENyZWF0ZVdlYkdQVURldmljZShXZWJHUFVEZXZpY2UmKTsKICAgICB2b2lkIHdpbGxEZXN0
cm95V2ViR1BVRGV2aWNlKFdlYkdQVURldmljZSYpOwogICAgIHZvaWQgd2lsbENvbmZpZ3VyZVN3
YXBDaGFpbihHUFVDYW52YXNDb250ZXh0JiwgV2ViR1BVU3dhcENoYWluJik7CiAgICAgdm9pZCBk
aWRDcmVhdGVXZWJHUFVQaXBlbGluZShXZWJHUFVEZXZpY2UmLCBXZWJHUFVQaXBlbGluZSYpOwog
ICAgIHZvaWQgd2lsbERlc3Ryb3lXZWJHUFVQaXBlbGluZShXZWJHUFVQaXBlbGluZSYpOwotI2Vu
ZGlmCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdQVSkKIAogcHJpdmF0ZToKICAgICBzdHJ1Y3QgUmVj
b3JkaW5nT3B0aW9ucyB7CkBAIC0xMjIsMjggKzEyOCwzMiBAQCBwcml2YXRlOgogICAgIHZvaWQg
c3RhcnRSZWNvcmRpbmcoSW5zcGVjdG9yQ2FudmFzJiwgSW5zcGVjdG9yOjpQcm90b2NvbDo6UmVj
b3JkaW5nOjpJbml0aWF0b3IsIFJlY29yZGluZ09wdGlvbnMmJiA9IHsgfSk7CiAKICAgICB2b2lk
IGNhbnZhc0Rlc3Ryb3llZFRpbWVyRmlyZWQoKTsKKyNpZiBFTkFCTEUoV0VCR0wpIHx8IEVOQUJM
RShXRUJHUFUpCiAgICAgdm9pZCBwcm9ncmFtRGVzdHJveWVkVGltZXJGaXJlZCgpOworI2VuZGlm
IC8vIEVOQUJMRShXRUJHTCkgfHwgRU5BQkxFKFdFQkdQVSkKICAgICB2b2lkIHJlc2V0KCk7CiAK
ICAgICBJbnNwZWN0b3JDYW52YXMmIGJpbmRDYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYs
IGJvb2wgY2FwdHVyZUJhY2t0cmFjZSk7CiAjaWYgRU5BQkxFKFdFQkdQVSkKICAgICBJbnNwZWN0
b3JDYW52YXMmIGJpbmRDYW52YXMoV2ViR1BVRGV2aWNlJiwgYm9vbCBjYXB0dXJlQmFja3RyYWNl
KTsKLSNlbmRpZgorI2VuZGlmIC8vIEVOQUJMRShXRUJHUFUpCiAgICAgdm9pZCB1bmJpbmRDYW52
YXMoSW5zcGVjdG9yQ2FudmFzJik7CiAgICAgUmVmUHRyPEluc3BlY3RvckNhbnZhcz4gYXNzZXJ0
SW5zcGVjdG9yQ2FudmFzKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBjYW52YXNJZCk7CiAg
ICAgUmVmUHRyPEluc3BlY3RvckNhbnZhcz4gZmluZEluc3BlY3RvckNhbnZhcyhDYW52YXNSZW5k
ZXJpbmdDb250ZXh0Jik7CiAjaWYgRU5BQkxFKFdFQkdQVSkKICAgICBSZWZQdHI8SW5zcGVjdG9y
Q2FudmFzPiBmaW5kSW5zcGVjdG9yQ2FudmFzKFdlYkdQVURldmljZSYpOwotI2VuZGlmCisjZW5k
aWYgLy8gRU5BQkxFKFdFQkdQVSkKIAorI2lmIEVOQUJMRShXRUJHTCkgfHwgRU5BQkxFKFdFQkdQ
VSkKICAgICB2b2lkIHVuYmluZFByb2dyYW0oSW5zcGVjdG9yU2hhZGVyUHJvZ3JhbSYpOwogICAg
IFJlZlB0cjxJbnNwZWN0b3JTaGFkZXJQcm9ncmFtPiBhc3NlcnRJbnNwZWN0b3JQcm9ncmFtKEVy
cm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBwcm9ncmFtSWQpOwogI2lmIEVOQUJMRShXRUJHTCkK
ICAgICBSZWZQdHI8SW5zcGVjdG9yU2hhZGVyUHJvZ3JhbT4gZmluZEluc3BlY3RvclByb2dyYW0o
V2ViR0xQcm9ncmFtJik7Ci0jZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCiAjaWYgRU5B
QkxFKFdFQkdQVSkKICAgICBSZWZQdHI8SW5zcGVjdG9yU2hhZGVyUHJvZ3JhbT4gZmluZEluc3Bl
Y3RvclByb2dyYW0oV2ViR1BVUGlwZWxpbmUmKTsKLSNlbmRpZgorI2VuZGlmIC8vIEVOQUJMRShX
RUJHUFUpCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKQogCiAgICAg
c3RkOjp1bmlxdWVfcHRyPEluc3BlY3Rvcjo6Q2FudmFzRnJvbnRlbmREaXNwYXRjaGVyPiBtX2Zy
b250ZW5kRGlzcGF0Y2hlcjsKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpDYW52YXNCYWNrZW5kRGlz
cGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKQEAgLTE1NSw5ICsxNjUsMTEgQEAgcHJpdmF0
ZToKICAgICBWZWN0b3I8U3RyaW5nPiBtX3JlbW92ZWRDYW52YXNJZGVudGlmaWVyczsKICAgICBU
aW1lciBtX2NhbnZhc0Rlc3Ryb3llZFRpbWVyOwogCisjaWYgRU5BQkxFKFdFQkdMKSB8fCBFTkFC
TEUoV0VCR1BVKQogICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8SW5zcGVjdG9yU2hhZGVyUHJv
Z3JhbT4+IG1faWRlbnRpZmllclRvSW5zcGVjdG9yUHJvZ3JhbTsKICAgICBWZWN0b3I8U3RyaW5n
PiBtX3JlbW92ZWRQcm9ncmFtSWRlbnRpZmllcnM7CiAgICAgVGltZXIgbV9wcm9ncmFtRGVzdHJv
eWVkVGltZXI7CisjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKQogCiAg
ICAgSGFzaFNldDxTdHJpbmc+IG1fcmVjb3JkaW5nQ2FudmFzSWRlbnRpZmllcnM7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5j
cHAKaW5kZXggYTJmOGRmYTE2MjQuLmMzNWEwNThiOTRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcApAQCAtMTIwNywx
MCArMTIwNywxNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8SGlnaGxpZ2h0Q29uZmlnPiBJbnNwZWN0b3JE
T01BZ2VudDo6aGlnaGxpZ2h0Q29uZmlnRnJvbUluc3BlY3RvcgogICAgIHJldHVybiBoaWdobGln
aHRDb25maWc7CiB9CiAKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQordm9pZCBJbnNwZWN0b3JE
T01BZ2VudDo6c2V0SW5zcGVjdE1vZGVFbmFibGVkKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
Ym9vbCBlbmFibGVkLCBjb25zdCBKU09OOjpPYmplY3QqIGhpZ2hsaWdodENvbmZpZykKK3sKKyAg
ICBzZXRTZWFyY2hpbmdGb3JOb2RlKGVycm9yU3RyaW5nLCBlbmFibGVkLCBoaWdobGlnaHRDb25m
aWcgPyBoaWdobGlnaHRDb25maWcgOiBudWxscHRyLCBmYWxzZSk7Cit9CisjZWxzZQogdm9pZCBJ
bnNwZWN0b3JET01BZ2VudDo6c2V0SW5zcGVjdE1vZGVFbmFibGVkKEVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgYm9vbCBlbmFibGVkLCBjb25zdCBKU09OOjpPYmplY3QqIGhpZ2hsaWdodENvbmZp
ZywgY29uc3QgYm9vbCogc2hvd1J1bGVycykKIHsKICAgICBzZXRTZWFyY2hpbmdGb3JOb2RlKGVy
cm9yU3RyaW5nLCBlbmFibGVkLCBoaWdobGlnaHRDb25maWcgPyBoaWdobGlnaHRDb25maWcgOiBu
dWxscHRyLCBzaG93UnVsZXJzICYmICpzaG93UnVsZXJzKTsKIH0KKyNlbmRpZgogCiB2b2lkIElu
c3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHRSZWN0KEVycm9yU3RyaW5nJiwgaW50IHgsIGludCB5
LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGNvbnN0IEpTT046Ok9iamVjdCogY29sb3IsIGNvbnN0
IEpTT046Ok9iamVjdCogb3V0bGluZUNvbG9yLCBjb25zdCBib29sKiB1c2VQYWdlQ29vcmRpbmF0
ZXMpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3RvckRPTUFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rv
ckRPTUFnZW50LmgKaW5kZXggN2RmMGU4M2ViNTMuLmU4YTc0ZjZkMDA3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5oCkBAIC0x
MzEsNyArMTMxLDExIEBAIHB1YmxpYzoKICAgICB2b2lkIGRpc2NhcmRTZWFyY2hSZXN1bHRzKEVy
cm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBzZWFyY2hJZCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBy
ZXNvbHZlTm9kZShFcnJvclN0cmluZyYsIGludCBub2RlSWQsIGNvbnN0IFN0cmluZyogb2JqZWN0
R3JvdXAsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+
JiByZXN1bHQpIG92ZXJyaWRlOwogICAgIHZvaWQgZ2V0QXR0cmlidXRlcyhFcnJvclN0cmluZyYs
IGludCBub2RlSWQsIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiByZXN1bHQpIG92ZXJy
aWRlOworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgdm9pZCBzZXRJbnNwZWN0TW9kZUVu
YWJsZWQoRXJyb3JTdHJpbmcmLCBib29sIGVuYWJsZWQsIGNvbnN0IEpTT046Ok9iamVjdCogaGln
aGxpZ2h0Q29uZmlnKSBvdmVycmlkZTsKKyNlbHNlCiAgICAgdm9pZCBzZXRJbnNwZWN0TW9kZUVu
YWJsZWQoRXJyb3JTdHJpbmcmLCBib29sIGVuYWJsZWQsIGNvbnN0IEpTT046Ok9iamVjdCogaGln
aGxpZ2h0Q29uZmlnLCBjb25zdCBib29sKiBzaG93UnVsZXJzKSBvdmVycmlkZTsKKyNlbmRpZgog
ICAgIHZvaWQgcmVxdWVzdE5vZGUoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG9iamVjdElk
LCBpbnQqIG5vZGVJZCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBwdXNoTm9kZUJ5UGF0aFRvRnJvbnRl
bmQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHBhdGgsIGludCogbm9kZUlkKSBvdmVycmlk
ZTsKICAgICB2b2lkIGhpZGVIaWdobGlnaHQoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUGFnZUFnZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUGFnZUFnZW50
LmNwcAppbmRleCAwMmVkZDQzODU5Ni4uNDM1MjI4OTRlMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUGFnZUFnZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKQEAgLTM1
Niw3ICszNTYsNyBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZykKICAgICBzdG9wd2F0Y2gucmVzZXQoKTsKICAgICBzdG9wd2F0Y2guc3Rh
cnQoKTsKIAotI2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCisjaWYgRU5BQkxFKERBUktf
TU9ERV9DU1MpIHx8IEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCiAgICAgZGVmYXVsdEFwcGVh
cmFuY2VEaWRDaGFuZ2UobV9pbnNwZWN0ZWRQYWdlLmRlZmF1bHRVc2VEYXJrQXBwZWFyYW5jZSgp
KTsKICNlbmRpZgogfQpAQCAtMzY3LDEwICszNjcsMTQgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdl
bnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcmKQogCiAgICAgRXJyb3JTdHJpbmcgdW51c2VkOwogICAg
IHNldFNob3dQYWludFJlY3RzKHVudXNlZCwgZmFsc2UpOworI2lmICFQTEFURk9STShJT1NfRkFN
SUxZKQogICAgIHNldFNob3dSdWxlcnModW51c2VkLCBmYWxzZSk7CisjZW5kaWYKICAgICBvdmVy
cmlkZVVzZXJBZ2VudCh1bnVzZWQsIG51bGxwdHIpOwogICAgIHNldEVtdWxhdGVkTWVkaWEodW51
c2VkLCBlbXB0eVN0cmluZygpKTsKKyNpZiBFTkFCTEUoREFSS19NT0RFX0NTUykgfHwgSEFWRShP
U19EQVJLX01PREVfU1VQUE9SVCkKICAgICBzZXRGb3JjZWRBcHBlYXJhbmNlKHVudXNlZCwgZW1w
dHlTdHJpbmcoKSk7CisjZW5kaWYKIAogICAgIGF1dG8mIGluc3BlY3RlZFBhZ2VTZXR0aW5ncyA9
IG1faW5zcGVjdGVkUGFnZS5zZXR0aW5ncygpOwogICAgIGluc3BlY3RlZFBhZ2VTZXR0aW5ncy5z
ZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZEluc3BlY3Rvck92ZXJyaWRlKFdURjo6bnVsbG9w
dCk7CkBAIC03NzAsMTAgKzc3NCwxMiBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6c2VhcmNo
SW5SZXNvdXJjZXMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbgogICAgICAg
ICBuZXR3b3JrQWdlbnQtPnNlYXJjaE90aGVyUmVxdWVzdHMocmVnZXgsIHJlc3VsdCk7CiB9CiAK
KyNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzZXRT
aG93UnVsZXJzKEVycm9yU3RyaW5nJiwgYm9vbCBzaG93UnVsZXJzKQogewogICAgIG1fb3Zlcmxh
eS0+c2V0U2hvd1J1bGVycyhzaG93UnVsZXJzKTsKIH0KKyNlbmRpZgogCiB2b2lkIEluc3BlY3Rv
clBhZ2VBZ2VudDo6c2V0U2hvd1BhaW50UmVjdHMoRXJyb3JTdHJpbmcmLCBib29sIHNob3cpCiB7
CkBAIC04NjksMTAgKzg3NSwxMiBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6ZnJhbWVDbGVh
cmVkU2NoZWR1bGVkTmF2aWdhdGlvbihGcmFtZSYgZnJhbWUpCiAgICAgbV9mcm9udGVuZERpc3Bh
dGNoZXItPmZyYW1lQ2xlYXJlZFNjaGVkdWxlZE5hdmlnYXRpb24oZnJhbWVJZCgmZnJhbWUpKTsK
IH0KIAorI2lmIEVOQUJMRShEQVJLX01PREVfQ1NTKSB8fCBIQVZFKE9TX0RBUktfTU9ERV9TVVBQ
T1JUKQogdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmRlZmF1bHRBcHBlYXJhbmNlRGlkQ2hhbmdl
KGJvb2wgdXNlRGFya0FwcGVhcmFuY2UpCiB7CiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmRl
ZmF1bHRBcHBlYXJhbmNlRGlkQ2hhbmdlKHVzZURhcmtBcHBlYXJhbmNlID8gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6UGFnZTo6QXBwZWFyYW5jZTo6RGFyayA6IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBh
Z2U6OkFwcGVhcmFuY2U6OkxpZ2h0KTsKIH0KKyNlbmRpZgogCiB2b2lkIEluc3BlY3RvclBhZ2VB
Z2VudDo6ZGlkQ2xlYXJXaW5kb3dPYmplY3RJbldvcmxkKEZyYW1lJiBmcmFtZSwgRE9NV3JhcHBl
cldvcmxkJiB3b3JsZCkKIHsKQEAgLTEwMDgsMTMgKzEwMTYsOSBAQCB2b2lkIEluc3BlY3RvclBh
Z2VBZ2VudDo6c2V0RW11bGF0ZWRNZWRpYShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgbWVk
aWEpCiAgICAgZG9jdW1lbnQtPmV2YWx1YXRlTWVkaWFRdWVyaWVzQW5kUmVwb3J0Q2hhbmdlcygp
OwogfQogCisjaWYgRU5BQkxFKERBUktfTU9ERV9DU1MpIHx8IEhBVkUoT1NfREFSS19NT0RFX1NV
UFBPUlQpCiB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6c2V0Rm9yY2VkQXBwZWFyYW5jZShFcnJv
clN0cmluZyYsIGNvbnN0IFN0cmluZyYgYXBwZWFyYW5jZSkKIHsKLSAgICBpZiAoYXBwZWFyYW5j
ZSA9PSBtX2ZvcmNlZEFwcGVhcmFuY2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fZm9yY2Vk
QXBwZWFyYW5jZSA9IGFwcGVhcmFuY2U7Ci0KICAgICBpZiAoYXBwZWFyYW5jZSA9PSAiTGlnaHQi
X3MpCiAgICAgICAgIG1faW5zcGVjdGVkUGFnZS5zZXRVc2VEYXJrQXBwZWFyYW5jZU92ZXJyaWRl
KGZhbHNlKTsKICAgICBlbHNlIGlmIChhcHBlYXJhbmNlID09ICJEYXJrIl9zKQpAQCAtMTAyMiw2
ICsxMDI2LDcgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNldEZvcmNlZEFwcGVhcmFuY2Uo
RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGFwcGVhcmEKICAgICBlbHNlCiAgICAgICAgIG1f
aW5zcGVjdGVkUGFnZS5zZXRVc2VEYXJrQXBwZWFyYW5jZU92ZXJyaWRlKFdURjo6bnVsbG9wdCk7
CiB9CisjZW5kaWYKIAogdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmFwcGx5VXNlckFnZW50T3Zl
cnJpZGUoU3RyaW5nJiB1c2VyQWdlbnQpCiB7CkBAIC0xMDY5LDkgKzEwNzQsOSBAQCB2b2lkIElu
c3BlY3RvclBhZ2VBZ2VudDo6c25hcHNob3RSZWN0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
aW50IHgsIGludCB5LCBpbgogICAgICpvdXREYXRhVVJMID0gc25hcHNob3QtPnRvRGF0YVVSTCgi
aW1hZ2UvcG5nIl9zLCBXVEY6Om51bGxvcHQsIFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKTsKIH0K
IAorI2lmIEVOQUJMRShXRUJfQVJDSElWRSkgJiYgVVNFKENGKQogdm9pZCBJbnNwZWN0b3JQYWdl
QWdlbnQ6OmFyY2hpdmUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBTdHJpbmcqIGRhdGEpCiB7
Ci0jaWYgRU5BQkxFKFdFQl9BUkNISVZFKSAmJiBVU0UoQ0YpCiAgICAgYXV0byBhcmNoaXZlID0g
TGVnYWN5V2ViQXJjaGl2ZTo6Y3JlYXRlKG1faW5zcGVjdGVkUGFnZS5tYWluRnJhbWUoKSk7CiAg
ICAgaWYgKCFhcmNoaXZlKSB7CiAgICAgICAgIGVycm9yU3RyaW5nID0gIkNvdWxkIG5vdCBjcmVh
dGUgd2ViIGFyY2hpdmUgZm9yIG1haW4gZnJhbWUiX3M7CkBAIC0xMDgwLDEwICsxMDg1LDcgQEAg
dm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmFyY2hpdmUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
LCBTdHJpbmcqIGRhdGEpCiAKICAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBidWZmZXIgPSBhcmNo
aXZlLT5yYXdEYXRhUmVwcmVzZW50YXRpb24oKTsKICAgICAqZGF0YSA9IGJhc2U2NEVuY29kZShD
RkRhdGFHZXRCeXRlUHRyKGJ1ZmZlci5nZXQoKSksIENGRGF0YUdldExlbmd0aChidWZmZXIuZ2V0
KCkpKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGRhdGEpOwotICAgIGVycm9yU3RyaW5nID0g
Ik5vdCBzdXBwb3J0ZWQiX3M7Ci0jZW5kaWYKIH0KKyNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3RvclBhZ2VBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0
b3JQYWdlQWdlbnQuaAppbmRleCA2Yzc1ODI5NTAyMy4uM2JjZDA0ODdjZmMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUGFnZUFnZW50LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JQYWdlQWdlbnQuaApA
QCAtMTA4LDEzICsxMDgsMTkgQEAgcHVibGljOgogICAgIHZvaWQgc2V0Qm9vdHN0cmFwU2NyaXB0
KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nKiBvcHRpb25hbFNvdXJjZSkgZmluYWw7CiAgICAg
dm9pZCBzZWFyY2hJblJlc291cmNlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBmcmFtZUlk
LCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBxdWVyeSwgY29uc3QgYm9vbCogb3B0
aW9uYWxDYXNlU2Vuc2l0aXZlLCBjb25zdCBib29sKiBvcHRpb25hbElzUmVnZXgsIGNvbnN0IFN0
cmluZyogb3B0aW9uYWxSZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkdlbmVyaWNUeXBlczo6U2VhcmNoTWF0Y2g+PiYpIG92ZXJyaWRlOwogICAgIHZv
aWQgc2VhcmNoSW5SZXNvdXJjZXMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBi
b29sKiBjYXNlU2Vuc2l0aXZlLCBjb25zdCBib29sKiBpc1JlZ2V4LCBSZWZQdHI8SlNPTjo6QXJy
YXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpTZWFyY2hSZXN1bHQ+PiYpIG92ZXJyaWRl
OworI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQogICAgIHZvaWQgc2V0U2hvd1J1bGVycyhFcnJv
clN0cmluZyYsIGJvb2wpIG92ZXJyaWRlOworI2VuZGlmCiAgICAgdm9pZCBzZXRTaG93UGFpbnRS
ZWN0cyhFcnJvclN0cmluZyYsIGJvb2wgc2hvdykgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRFbXVs
YXRlZE1lZGlhKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7CisjaWYgRU5B
QkxFKERBUktfTU9ERV9DU1MpIHx8IEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCiAgICAgdm9p
ZCBzZXRGb3JjZWRBcHBlYXJhbmNlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJikgb3ZlcnJp
ZGU7CisjZW5kaWYKICAgICB2b2lkIHNuYXBzaG90Tm9kZShFcnJvclN0cmluZyYsIGludCBub2Rl
SWQsIFN0cmluZyogb3V0RGF0YVVSTCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBzbmFwc2hvdFJlY3Qo
RXJyb3JTdHJpbmcmLCBpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwgY29uc3Qg
U3RyaW5nJiBjb29yZGluYXRlU3lzdGVtLCBTdHJpbmcqIG91dERhdGFVUkwpIG92ZXJyaWRlOwor
I2lmIEVOQUJMRShXRUJfQVJDSElWRSkgJiYgVVNFKENGKQogICAgIHZvaWQgYXJjaGl2ZShFcnJv
clN0cmluZyYsIFN0cmluZyogZGF0YSkgb3ZlcnJpZGU7CisjZW5kaWYKIAogICAgIC8vIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbgogICAgIHZvaWQgZG9tQ29udGVudEV2ZW50RmlyZWQoKTsKQEAg
LTEyNiw3ICsxMzIsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBmcmFtZVN0b3BwZWRMb2FkaW5nKEZy
YW1lJik7CiAgICAgdm9pZCBmcmFtZVNjaGVkdWxlZE5hdmlnYXRpb24oRnJhbWUmLCBTZWNvbmRz
IGRlbGF5KTsKICAgICB2b2lkIGZyYW1lQ2xlYXJlZFNjaGVkdWxlZE5hdmlnYXRpb24oRnJhbWUm
KTsKKyNpZiBFTkFCTEUoREFSS19NT0RFX0NTUykgfHwgSEFWRShPU19EQVJLX01PREVfU1VQUE9S
VCkKICAgICB2b2lkIGRlZmF1bHRBcHBlYXJhbmNlRGlkQ2hhbmdlKGJvb2wgdXNlRGFya0FwcGVh
cmFuY2UpOworI2VuZGlmCiAgICAgdm9pZCBhcHBseVVzZXJBZ2VudE92ZXJyaWRlKFN0cmluZyYp
OwogICAgIHZvaWQgYXBwbHlFbXVsYXRlZE1lZGlhKFN0cmluZyYpOwogICAgIHZvaWQgZGlkQ2xl
YXJXaW5kb3dPYmplY3RJbldvcmxkKEZyYW1lJiwgRE9NV3JhcHBlcldvcmxkJik7CkBAIC0xNjEs
NyArMTY5LDYgQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPERvY3VtZW50TG9hZGVyKiwgU3RyaW5n
PiBtX2xvYWRlclRvSWRlbnRpZmllcjsKICAgICBTdHJpbmcgbV91c2VyQWdlbnRPdmVycmlkZTsK
ICAgICBTdHJpbmcgbV9lbXVsYXRlZE1lZGlhOwotICAgIFN0cmluZyBtX2ZvcmNlZEFwcGVhcmFu
Y2U7CiAgICAgU3RyaW5nIG1fYm9vdHN0cmFwU2NyaXB0OwogICAgIGJvb2wgbV9pc0ZpcnN0TGF5
b3V0QWZ0ZXJPbkxvYWQgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9zaG93UGFpbnRSZWN0cyB7IGZh
bHNlIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9C
YXNlL01haW4uanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9CYXNlL01h
aW4uanMKaW5kZXggZTViNDMyYzJjYjguLjM1NDM5MThjMTcyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9CYXNlL01haW4uanMKKysrIGIvU291cmNlL1dl
Ykluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQmFzZS9NYWluLmpzCkBAIC0yMzkzLDcgKzIzOTMs
NyBAQCBXSS5fdXBkYXRlRG93bmxvYWRUYWJCYXJCdXR0b24gPSBmdW5jdGlvbigpCiAgICAgaWYg
KCFXSS5fcmVsb2FkVGFiQmFyQnV0dG9uKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIUlu
c3BlY3RvckJhY2tlbmQuaGFzRG9tYWluKCJQYWdlIikpIHsKKyAgICBpZiAoIUluc3BlY3RvckJh
Y2tlbmQuaGFzQ29tbWFuZCgiUGFnZS5hcmNoaXZlIikpIHsKICAgICAgICAgV0kuX2Rvd25sb2Fk
VGFiQmFyQnV0dG9uLmhpZGRlbiA9IHRydWU7CiAgICAgICAgIFdJLl91cGRhdGVUYWJCYXJEaXZp
ZGVycygpOwogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0Rlcml2
ZWRTb3VyY2VzLm1ha2UgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UKaW5kZXgg
YTEyYjc4NjNjOTIuLjhjNThhNTc3MTQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0Rlcml2
ZWRTb3VyY2VzLm1ha2UKKysrIGIvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy5tYWtlCkBA
IC0zMTcsMTcgKzMxNyw5IEBAIEFVVE9NQVRJT05fUFJPVE9DT0xfT1VUUFVUX0ZJTEVTID0gXAog
IwogQVVUT01BVElPTl9QUk9UT0NPTF9PVVRQVVRfUEFUVEVSTlMgPSAkKHN1YnN0IC4sJSwkKEFV
VE9NQVRJT05fUFJPVE9DT0xfT1VUUFVUX0ZJTEVTKSkKIAotaWZlcSAoJChPUyksTUFDT1MpCi1p
ZmVxICgkKHNoZWxsICQoQ0MpIC1zdGQ9Z251KysxeiAteCBjKysgLUUgLVAgLWRNICQoU0RLX0ZM
QUdTKSAkKFRBUkdFVF9UUklQTEVfRkxBR1MpICQoRlJBTUVXT1JLX0ZMQUdTKSAkKEhFQURFUl9G
TEFHUykgLWluY2x1ZGUgInd0Zi9QbGF0Zm9ybS5oIiAvZGV2L251bGwgfCBncmVwICcgV1RGX1BM
QVRGT1JNX0lPU19GQU1JTFkgJyB8IGN1dCAtZCcgJyAtZjMpLCAxKQotCUFVVE9NQVRJT05fQkFD
S0VORF9QTEFURk9STV9BUkdVTUVOVFMgPSAtLXBsYXRmb3JtIGlPUwotZWxzZQotCUFVVE9NQVRJ
T05fQkFDS0VORF9QTEFURk9STV9BUkdVTUVOVFMgPSAtLXBsYXRmb3JtIG1hY09TCi1lbmRpZgot
ZW5kaWYgIyBNQUNPUwotCiAjIEpTT04tUlBDIEZyb250ZW5kIERpc3BhdGNoZXJzLCBCYWNrZW5k
IERpc3BhdGNoZXJzLCBUeXBlIEJ1aWxkZXJzCiAkKEFVVE9NQVRJT05fUFJPVE9DT0xfT1VUUFVU
X1BBVFRFUk5TKSA6ICQoQVVUT01BVElPTl9QUk9UT0NPTF9JTlBVVF9GSUxFUykgJChBVVRPTUFU
SU9OX1BST1RPQ09MX0dFTkVSQVRPUl9TQ1JJUFRTKQotCSQoUFlUSE9OKSAkKEphdmFTY3JpcHRD
b3JlX1NDUklQVFNfRElSKS9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkg
LS1mcmFtZXdvcmsgV2ViS2l0ICQoQVVUT01BVElPTl9CQUNLRU5EX1BMQVRGT1JNX0FSR1VNRU5U
UykgLS1iYWNrZW5kIC0tb3V0cHV0RGlyIC4gJChBVVRPTUFUSU9OX1BST1RPQ09MX0lOUFVUX0ZJ
TEVTKQorCSQoUFlUSE9OKSAkKEphdmFTY3JpcHRDb3JlX1NDUklQVFNfRElSKS9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkgLS1mcmFtZXdvcmsgV2ViS2l0IC0tYmFja2Vu
ZCAtLW91dHB1dERpciAuICQoQVVUT01BVElPTl9QUk9UT0NPTF9JTlBVVF9GSUxFUykKIAogYWxs
IDogJChBVVRPTUFUSU9OX1BST1RPQ09MX09VVFBVVF9GSUxFUykKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9QbGF0Zm9ybU1hYy5jbWFrZSBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1NYWMu
Y21ha2UKaW5kZXggNDhlMTYwMTNkY2IuLjRjMmQzMGJlYmY3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1BsYXRmb3JtTWFjLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1NYWMu
Y21ha2UKQEAgLTQ4MCwxMCArNDgwLDYgQEAgZm9yZWFjaCAoX2ZpbGUgJHtPYmpDRm9yd2FyZGlu
Z0hlYWRlcnN9KQogICAgIGZpbGUoV1JJVEUgJHtGT1JXQVJESU5HX0hFQURFUlNfRElSfS9XZWJL
aXQvJHtfZmlsZX0gIiNpbXBvcnQgPFdlYktpdExlZ2FjeS8ke19maWxlfT4iKQogZW5kZm9yZWFj
aCAoKQogCi1saXN0KEFQUEVORCBXZWJLaXRfQVVUT01BVElPTl9QUk9UT0NPTF9HRU5FUkFUT1Jf
RVhUUkFfRkxBR1MKLSAgICAtLXBsYXRmb3JtPW1hY09TCi0pCi0KIHNldChTZWNJdGVtU2hpbURp
cmVjdG9yeSAke0NNQUtFX0xJQlJBUllfT1VUUFVUX0RJUkVDVE9SWX0vV2ViS2l0LmZyYW1ld29y
ay9WZXJzaW9ucy9BL0ZyYW1ld29ya3MpCiBhZGRfbGlicmFyeShTZWNJdGVtU2hpbSBTSEFSRUQg
V2ViUHJvY2Vzcy9tYWMvU2VjSXRlbVNoaW1MaWJyYXJ5Lm1tKQogV0VCS0lUX0NSRUFURV9TWU1M
SU5LKFNlY0l0ZW1TaGltICR7U2VjSXRlbVNoaW1EaXJlY3Rvcnl9ICR7Q01BS0VfTElCUkFSWV9P
VVRQVVRfRElSRUNUT1JZfS9XZWJLaXQuZnJhbWV3b3JrL0ZyYW1ld29ya3MpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL0F1dG9tYXRpb24uanNvbiBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vQXV0b21hdGlvbi5qc29uCmluZGV4IDdm
NTUyNTcwNWVmLi5mNTZlNmNmOTgwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQXV0b21hdGlvbi9BdXRvbWF0aW9uLmpzb24KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQXV0b21hdGlvbi9BdXRvbWF0aW9uLmpzb24KQEAgLTQzNyw3ICs0MzcsNyBAQAogICAgICAg
ICB7CiAgICAgICAgICAgICAibmFtZSI6ICJpbnNwZWN0QnJvd3NpbmdDb250ZXh0IiwKICAgICAg
ICAgICAgICJkZXNjcmlwdGlvbiI6ICJJbnNwZWN0IHRoZSBzcGVjaWZpZWQgYnJvd3NpbmcgY29u
dGV4dCB1c2luZyBXZWIgSW5zcGVjdG9yLiIsCi0gICAgICAgICAgICAicGxhdGZvcm0iOiAibWFj
b3MiLAorICAgICAgICAgICAgImNvbmRpdGlvbiI6ICJQTEFURk9STShNQUMpIiwKICAgICAgICAg
ICAgICJwYXJhbWV0ZXJzIjogWwogICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiaGFuZGxlIiwg
IiRyZWYiOiAiQnJvd3NpbmdDb250ZXh0SGFuZGxlIiwgImRlc2NyaXB0aW9uIjogIlRoZSBoYW5k
bGUgZm9yIHRoZSBicm93c2luZyBjb250ZXh0IHRoYXQgc2hvdWxkIGJlIGluc3BlY3RlZC4iIH0s
CiAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJlbmFibGVBdXRvQ2FwdHVyaW5nIiwgInR5cGUi
OiAiYm9vbGVhbiIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJJZiB0aGlzIG9w
dGlvbiBpcyBwcmVzZW50IGFuZCBzZXQgdG8gdHJ1ZSwgdGhlIFdlYiBJbnNwZWN0b3Igd2lsbCBh
dXRvbWF0aWNhbGx5IHN0YXJ0IGEgdGltZWxpbmUgcmVjb3JkaW5nIG9mIHRoZSBzcGVjaWZpZWQg
YnJvd3NpbmcgY29udGV4dCBvbmNlIGl0IGlzIGF0dGFjaGVkLiBOb3RlIHRoYXQgdGhpcyBkaXNh
YmxlcyB0aGUgZGVidWdnZXIgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgcmVjb3JkaW5nLiIgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL1dlYktpdEZlYXR1cmVzLmNtYWtlIGIvU291cmNlL2Nt
YWtlL1dlYktpdEZlYXR1cmVzLmNtYWtlCmluZGV4IDliY2RiNWRlNWJmLi5lYzdlYzgxMmZlMiAx
MDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL1dlYktpdEZlYXR1cmVzLmNtYWtlCisrKyBiL1NvdXJj
ZS9jbWFrZS9XZWJLaXRGZWF0dXJlcy5jbWFrZQpAQCAtMzI2LDYgKzMyNiw3IEBAIG1hY3JvKFdF
QktJVF9PUFRJT05fRU5EKQogICAgICAgICBpZiAoJHtfbmFtZX0pCiAgICAgICAgICAgICBsaXN0
KEFQUEVORCBGRUFUVVJFX0RFRklORVMgJHtfbmFtZX0pCiAgICAgICAgICAgICBzZXQoRkVBVFVS
RV9ERUZJTkVTX1dJVEhfU1BBQ0VfU0VQQVJBVE9SICIke0ZFQVRVUkVfREVGSU5FU19XSVRIX1NQ
QUNFX1NFUEFSQVRPUn0gJHtfbmFtZX0iKQorICAgICAgICAgICAgc2V0KEZFQVRVUkVfREVGSU5F
U19BU19BUkdVTUVOVFMgIiR7RkVBVFVSRV9ERUZJTkVTX0FTX0FSR1VNRU5UU30gLUQke19uYW1l
fSIpCiAgICAgICAgIGVuZGlmICgpCiAgICAgZW5kZm9yZWFjaCAoKQogZW5kbWFjcm8oKQpkaWZm
IC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9maWx0ZXItYnVpbGQtd2Via2l0IGIvVG9vbHMvU2NyaXB0
cy9maWx0ZXItYnVpbGQtd2Via2l0CmluZGV4IDJkZmVjYWY5MzZlLi44OTEzYjhjY2FmYiAxMDA3
NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy9maWx0ZXItYnVpbGQtd2Via2l0CisrKyBiL1Rvb2xzL1Nj
cmlwdHMvZmlsdGVyLWJ1aWxkLXdlYmtpdApAQCAtMjgxLDcgKzI4MSw3IEBAIHN1YiBzaG91bGRJ
Z25vcmVMaW5lKCQkKQogICAgIHJldHVybiAxIGlmICRsaW5lID1+IC9eXCggKHhjb2RlYnVpbGR8
aWYpIC87CiAgICAgcmV0dXJuIDEgaWYgJGxpbmUgPX4gL153YXJuaW5nXDogZGV0ZWN0ZWQgaW50
ZXJuYWwgaW5zdGFsbCwgcGFzc2luZyBlbnRpdGxlbWVudHMgdG8gc2ltdWxhdG9yIGFueXdheVwu
LzsKICAgICByZXR1cm4gMSBpZiAkbGluZSA9fiAvbWF5IG5vdCBmdW5jdGlvbiBpbiB0aGUgU2lt
dWxhdG9yIGJlY2F1c2UgQWQgSG9jLzsKLSAgICByZXR1cm4gMSBpZiAkbGluZSA9fiAvXC91c3Jc
L2JpblwvY2xhbmcgLio/IFw+IFxTKy5zYi87CisgICAgcmV0dXJuIDEgaWYgJGxpbmUgPX4gL1wv
dXNyXC9iaW5cL2NsYW5nIC4qPyBcPiBcUysoXC5zYnxcLmpzKS87CiAgICAgcmV0dXJuIDEgaWYg
JGxpbmUgPX4gLyB4Y29kZWJ1aWxkXFtbMC05XSs6WzAtOWEtZl0rXF1ccytEVlRBc3NlcnRpb25z
OiBXYXJuaW5nIGluIC4qWENDbGFuZ1Jlc3VsdHNQb3N0cHJvY2Vzc29yLm0vOwogICAgIHJldHVy
biAxIGlmICRsaW5lID1+IC9eKERldGFpbHN8T2JqZWN0fE1ldGhvZHxGdW5jdGlvbnxUaHJlYWQp
Oi87CiAgICAgcmV0dXJuIDEgaWYgJGxpbmUgPX4gL15QbGVhc2UgZmlsZSBhIGJ1ZyBhdCAvOwpA
QCAtMzA2LDcgKzMwNiw3IEBAIHN1YiBzaG91bGRJZ25vcmVMaW5lKCQkKQogICAgICAgICByZXR1
cm4gMSBpZiAkbGluZSA9fiAvTVNCMzA3MzpccytpZiBub3QgZXhpc3QvOwogICAgICAgICByZXR1
cm4gMSBpZiAkbGluZSA9fiAvd2hpY2guZXhlIGJhc2gvOwogICAgIH0gZWxzZSB7Ci0gICAgICAg
IHJldHVybiAxIGlmICRsaW5lID1+IC9eKHRvdWNofHBlcmx8Y2F0fHJtIC1mfHB5dGhvbnxcL3Vz
clwvYmluXC9nXCtcK3xcL2JpblwvbG58Z3BlcmZ8ZWNob3xzZWR8aWYgXFsgXC1mfFdlYkNvcmVc
L2dlbmVyYXRlLWV4cG9ydC1maWxlfHdyaXRlLWZpbGV8Y2htb2QpIC87CisgICAgICAgIHJldHVy
biAxIGlmICRsaW5lID1+IC9eKHRvdWNofHBlcmx8Y2F0fHJtIC1mfHB5dGhvbnxcL3VzclwvYmlu
XC9nXCtcK3xcL2JpblwvbG58Z3BlcmZ8ZWNob3xzZWR8dHJ8aWYgXFsgXC1mfFdlYkNvcmVcL2dl
bmVyYXRlLWV4cG9ydC1maWxlfHdyaXRlLWZpbGV8Y2htb2QpIC87CiAgICAgICAgIHJldHVybiAx
IGlmICRsaW5lID1+IC9eICAgIC8gJiYgIXNob3VsZFNob3dTdWJzZXF1ZW50TGluZSgkcHJldmlv
dXNMaW5lKTsKICAgICAgICAgcmV0dXJuIDEgaWYgJGxpbmUgPX4gL15wcmludGYgLzsKICAgICAg
ICAgcmV0dXJuIDEgaWYgJGxpbmUgPX4gL15vZmZsaW5lYXNtOiBOb3RoaW5nIGNoYW5nZWQvOwpk
aWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9pbnNwZWN0b3IvbWFpbi5weSBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvaW5zcGVjdG9yL21haW4ucHkKaW5kZXggMTQ2MmQ4MDE5ZDku
LjllMDkwNGMyMGZmIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2luc3BlY3Rv
ci9tYWluLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvaW5zcGVjdG9yL21haW4ucHkK
QEAgLTM4LDE0ICszOCwxMyBAQCBjbGFzcyBJbnNwZWN0b3JHZW5lcmF0b3JUZXN0czoKICAgICAg
ICAgc2VsZi5yZXNldF9yZXN1bHRzID0gcmVzZXRfcmVzdWx0cwogICAgICAgICBzZWxmLmV4ZWN1
dGl2ZSA9IGV4ZWN1dGl2ZQogCi0gICAgZGVmIGdlbmVyYXRlX2Zyb21fanNvbihzZWxmLCBqc29u
X2ZpbGUsIHBsYXRmb3JtLCBvdXRwdXRfZGlyZWN0b3J5KToKKyAgICBkZWYgZ2VuZXJhdGVfZnJv
bV9qc29uKHNlbGYsIGpzb25fZmlsZSwgb3V0cHV0X2RpcmVjdG9yeSk6CiAgICAgICAgIGNtZCA9
IFsncHl0aG9uJywKICAgICAgICAgICAgICAgICdKYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHknLAogICAgICAgICAg
ICAgICAgJy0tb3V0cHV0RGlyJywgb3V0cHV0X2RpcmVjdG9yeSwKICAgICAgICAgICAgICAgICct
LWZvcmNlJywKICAgICAgICAgICAgICAgICctLWZyYW1ld29yaycsICdUZXN0JywKICAgICAgICAg
ICAgICAgICctLXRlc3QnLAotICAgICAgICAgICAgICAgJy0tcGxhdGZvcm0nLCBwbGF0Zm9ybSwK
ICAgICAgICAgICAgICAgIGpzb25fZmlsZV0KIAogICAgICAgICBleGl0X2NvZGUgPSAwCkBAIC04
OCw3ICs4Nyw3IEBAIGNsYXNzIEluc3BlY3RvckdlbmVyYXRvclRlc3RzOgogICAgICAgICAgICAg
ICAgIHByaW50KCdQQVNTOiAlcycgJSBvdXRwdXRfZmlsZSkKICAgICAgICAgcmV0dXJuIGNoYW5n
ZXNfZm91bmQKIAotICAgIGRlZiBydW5fdGVzdHMoc2VsZiwgcGxhdGZvcm0sIGlucHV0X2RpcmVj
dG9yeSwgcmVmZXJlbmNlX2RpcmVjdG9yeSk6CisgICAgZGVmIHJ1bl90ZXN0cyhzZWxmLCBpbnB1
dF9kaXJlY3RvcnksIHJlZmVyZW5jZV9kaXJlY3RvcnkpOgogICAgICAgICB3b3JrX2RpcmVjdG9y
eSA9IHJlZmVyZW5jZV9kaXJlY3RvcnkKIAogICAgICAgICBwYXNzZWQgPSBUcnVlCkBAIC0xMDEs
NyArMTAwLDcgQEAgY2xhc3MgSW5zcGVjdG9yR2VuZXJhdG9yVGVzdHM6CiAgICAgICAgICAgICBp
ZiBub3Qgc2VsZi5yZXNldF9yZXN1bHRzOgogICAgICAgICAgICAgICAgIHdvcmtfZGlyZWN0b3J5
ID0gdGVtcGZpbGUubWtkdGVtcCgpCiAKLSAgICAgICAgICAgIGlmIHNlbGYuZ2VuZXJhdGVfZnJv
bV9qc29uKG9zLnBhdGguam9pbihpbnB1dF9kaXJlY3RvcnksIGlucHV0X2ZpbGUpLCBwbGF0Zm9y
bSwgd29ya19kaXJlY3RvcnkpOgorICAgICAgICAgICAgaWYgc2VsZi5nZW5lcmF0ZV9mcm9tX2pz
b24ob3MucGF0aC5qb2luKGlucHV0X2RpcmVjdG9yeSwgaW5wdXRfZmlsZSksIHdvcmtfZGlyZWN0
b3J5KToKICAgICAgICAgICAgICAgICBwYXNzZWQgPSBGYWxzZQogCiAgICAgICAgICAgICBpZiBz
ZWxmLnJlc2V0X3Jlc3VsdHM6CkBAIC0xMjIsMjEgKzEyMSwxMCBAQCBjbGFzcyBJbnNwZWN0b3JH
ZW5lcmF0b3JUZXN0czoKICAgICAgICAgYWxsX3Rlc3RzX3Bhc3NlZCA9IFRydWUKIAogICAgICAg
ICBiYXNlX2RpcmVjdG9yeSA9IG9zLnBhdGguam9pbignSmF2YVNjcmlwdENvcmUnLCAnaW5zcGVj
dG9yJywgJ3NjcmlwdHMnLCAndGVzdHMnKQotCi0gICAgICAgIHBsYXRmb3JtX2RpcmVjdG9yaWVz
ID0gewotICAgICAgICAgICAgJ21hY29zJzogJ21hYycsCi0gICAgICAgICAgICAnaW9zJzogJ2lv
cycsCi0gICAgICAgICAgICAnZ2VuZXJpYyc6ICdnZW5lcmljJywKLSAgICAgICAgICAgICdhbGwn
OiAnYWxsJywKLSAgICAgICAgfQotCi0gICAgICAgIGZvciBwbGF0Zm9ybV9uYW1lLCBwbGF0Zm9y
bV9kaXJlY3RvcnkgaW4gcGxhdGZvcm1fZGlyZWN0b3JpZXMuaXRlcml0ZW1zKCk6Ci0gICAgICAg
ICAgICBpbnB1dF9kaXJlY3RvcnkgPSBvcy5wYXRoLmpvaW4oYmFzZV9kaXJlY3RvcnksIHBsYXRm
b3JtX2RpcmVjdG9yeSkKLSAgICAgICAgICAgIHJlZmVyZW5jZV9kaXJlY3RvcnkgPSBvcy5wYXRo
LmpvaW4oaW5wdXRfZGlyZWN0b3J5LCAnZXhwZWN0ZWQnKQotICAgICAgICAgICAgaWYgbm90IG9z
LnBhdGguaXNkaXIoaW5wdXRfZGlyZWN0b3J5KSBvciBub3Qgb3MucGF0aC5pc2RpcihyZWZlcmVu
Y2VfZGlyZWN0b3J5KToKLSAgICAgICAgICAgICAgICBjb250aW51ZQotCi0gICAgICAgICAgICBh
bGxfdGVzdHNfcGFzc2VkID0gYWxsX3Rlc3RzX3Bhc3NlZCBhbmQgc2VsZi5ydW5fdGVzdHMocGxh
dGZvcm1fbmFtZSwgaW5wdXRfZGlyZWN0b3J5LCByZWZlcmVuY2VfZGlyZWN0b3J5KQorICAgICAg
ICBpbnB1dF9kaXJlY3RvcnkgPSBiYXNlX2RpcmVjdG9yeQorICAgICAgICByZWZlcmVuY2VfZGly
ZWN0b3J5ID0gb3MucGF0aC5qb2luKGlucHV0X2RpcmVjdG9yeSwgJ2V4cGVjdGVkJykKKyAgICAg
ICAgaWYgb3MucGF0aC5pc2RpcihpbnB1dF9kaXJlY3RvcnkpIGFuZCBvcy5wYXRoLmlzZGlyKHJl
ZmVyZW5jZV9kaXJlY3RvcnkpOgorICAgICAgICAgICAgYWxsX3Rlc3RzX3Bhc3NlZCA9IHNlbGYu
cnVuX3Rlc3RzKGlucHV0X2RpcmVjdG9yeSwgcmVmZXJlbmNlX2RpcmVjdG9yeSkKIAogICAgICAg
ICBwcmludCgnJykKICAgICAgICAgaWYgYWxsX3Rlc3RzX3Bhc3NlZDoK
</data>
<flag name="commit-queue"
          id="415392"
          type_id="3"
          status="-"
          setter="hi"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>399996</attachid>
            <date>2020-05-21 16:19:30 -0700</date>
            <delta_ts>2020-05-21 18:26:09 -0700</delta_ts>
            <desc>[Patch] WIP</desc>
            <filename>210014.diff</filename>
            <type>text/plain</type>
            <size>2704239</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCAwZDFmZTMwMDBhYi4uOWExZjQz
MWM1ZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTExNTEsMTIgKzEx
NTEsMTUgQEAgc2V0KEphdmFTY3JpcHRDb3JlX0lOU1BFQ1RPUl9QUk9UT0NPTF9TQ1JJUFRTCiAg
ICAgJHtKYXZhU2NyaXB0Q29yZV9JTlNQRUNUT1JfU0NSSVBUU19ESVJ9L2NvZGVnZW4vZ2VuZXJh
dG9yX3RlbXBsYXRlcy5weQogICAgICR7SmF2YVNjcmlwdENvcmVfSU5TUEVDVE9SX1NDUklQVFNf
RElSfS9jb2RlZ2VuL19faW5pdF9fLnB5CiAgICAgJHtKYXZhU2NyaXB0Q29yZV9JTlNQRUNUT1Jf
U0NSSVBUU19ESVJ9L2NvZGVnZW4vbW9kZWxzLnB5CisgICAgJHtKYXZhU2NyaXB0Q29yZV9JTlNQ
RUNUT1JfU0NSSVBUU19ESVJ9L2NvZGVnZW4vcHJlcHJvY2Vzcy5wbAogKQogCiBzZXQoSmF2YVNj
cmlwdENvcmVfSU5TUEVDVE9SX0RPTUFJTlMKICAgICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vaW5z
cGVjdG9yL3Byb3RvY29sL0FuaW1hdGlvbi5qc29uCiAgICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9
L2luc3BlY3Rvci9wcm90b2NvbC9BcHBsaWNhdGlvbkNhY2hlLmpzb24KICAgICAke0pBVkFTQ1JJ
UFRDT1JFX0RJUn0vaW5zcGVjdG9yL3Byb3RvY29sL0F1ZGl0Lmpzb24KKyAgICAke0pBVkFTQ1JJ
UFRDT1JFX0RJUn0vaW5zcGVjdG9yL3Byb3RvY29sL0Jyb3dzZXIuanNvbgorICAgICR7SkFWQVND
UklQVENPUkVfRElSfS9pbnNwZWN0b3IvcHJvdG9jb2wvQ1BVUHJvZmlsZXIuanNvbgogICAgICR7
SkFWQVNDUklQVENPUkVfRElSfS9pbnNwZWN0b3IvcHJvdG9jb2wvQ1NTLmpzb24KICAgICAke0pB
VkFTQ1JJUFRDT1JFX0RJUn0vaW5zcGVjdG9yL3Byb3RvY29sL0NhbnZhcy5qc29uCiAgICAgJHtK
QVZBU0NSSVBUQ09SRV9ESVJ9L2luc3BlY3Rvci9wcm90b2NvbC9Db25zb2xlLmpzb24KQEAgLTEx
NjUsNDEgKzExNjgsMjQgQEAgc2V0KEphdmFTY3JpcHRDb3JlX0lOU1BFQ1RPUl9ET01BSU5TCiAg
ICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2luc3BlY3Rvci9wcm90b2NvbC9ET01TdG9yYWdlLmpz
b24KICAgICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vaW5zcGVjdG9yL3Byb3RvY29sL0RhdGFiYXNl
Lmpzb24KICAgICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vaW5zcGVjdG9yL3Byb3RvY29sL0RlYnVn
Z2VyLmpzb24KLSAgICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vaW5zcGVjdG9yL3Byb3RvY29sL0Jy
b3dzZXIuanNvbgogICAgICR7SkFWQVNDUklQVENPUkVfRElSfS9pbnNwZWN0b3IvcHJvdG9jb2wv
R2VuZXJpY1R5cGVzLmpzb24KICAgICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vaW5zcGVjdG9yL3By
b3RvY29sL0hlYXAuanNvbgorICAgICR7SkFWQVNDUklQVENPUkVfRElSfS9pbnNwZWN0b3IvcHJv
dG9jb2wvSW5kZXhlZERCLmpzb24KICAgICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vaW5zcGVjdG9y
L3Byb3RvY29sL0luc3BlY3Rvci5qc29uCiAgICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2luc3Bl
Y3Rvci9wcm90b2NvbC9MYXllclRyZWUuanNvbgorICAgICR7SkFWQVNDUklQVENPUkVfRElSfS9p
bnNwZWN0b3IvcHJvdG9jb2wvTWVtb3J5Lmpzb24KICAgICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0v
aW5zcGVjdG9yL3Byb3RvY29sL05ldHdvcmsuanNvbgogICAgICR7SkFWQVNDUklQVENPUkVfRElS
fS9pbnNwZWN0b3IvcHJvdG9jb2wvUGFnZS5qc29uCiAgICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9
L2luc3BlY3Rvci9wcm90b2NvbC9SZWNvcmRpbmcuanNvbgogICAgICR7SkFWQVNDUklQVENPUkVf
RElSfS9pbnNwZWN0b3IvcHJvdG9jb2wvUnVudGltZS5qc29uCiAgICAgJHtKQVZBU0NSSVBUQ09S
RV9ESVJ9L2luc3BlY3Rvci9wcm90b2NvbC9TY3JpcHRQcm9maWxlci5qc29uCiAgICAgJHtKQVZB
U0NSSVBUQ09SRV9ESVJ9L2luc3BlY3Rvci9wcm90b2NvbC9TZWN1cml0eS5qc29uCisgICAgJHtK
QVZBU0NSSVBUQ09SRV9ESVJ9L2luc3BlY3Rvci9wcm90b2NvbC9TZXJ2aWNlV29ya2VyLmpzb24K
ICAgICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vaW5zcGVjdG9yL3Byb3RvY29sL1RhcmdldC5qc29u
CiAgICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2luc3BlY3Rvci9wcm90b2NvbC9UaW1lbGluZS5q
c29uCiAgICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2luc3BlY3Rvci9wcm90b2NvbC9Xb3JrZXIu
anNvbgogKQogCi1pZiAoRU5BQkxFX0lOREVYRURfREFUQUJBU0UpCi0gICAgbGlzdChBUFBFTkQg
SmF2YVNjcmlwdENvcmVfSU5TUEVDVE9SX0RPTUFJTlMKLSAgICAgICAgJHtKQVZBU0NSSVBUQ09S
RV9ESVJ9L2luc3BlY3Rvci9wcm90b2NvbC9JbmRleGVkREIuanNvbgotICAgICkKLWVuZGlmICgp
Ci0KLWlmIChFTkFCTEVfUkVTT1VSQ0VfVVNBR0UpCi0gICAgbGlzdChBUFBFTkQgSmF2YVNjcmlw
dENvcmVfSU5TUEVDVE9SX0RPTUFJTlMKLSAgICAgICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2lu
c3BlY3Rvci9wcm90b2NvbC9DUFVQcm9maWxlci5qc29uCi0gICAgICAgICR7SkFWQVNDUklQVENP
UkVfRElSfS9pbnNwZWN0b3IvcHJvdG9jb2wvTWVtb3J5Lmpzb24KLSAgICApCi1lbmRpZiAoKQot
Ci1pZiAoRU5BQkxFX1NFUlZJQ0VfV09SS0VSKQotICAgIGxpc3QoQVBQRU5EIEphdmFTY3JpcHRD
b3JlX0lOU1BFQ1RPUl9ET01BSU5TCi0gICAgICAgICR7SkFWQVNDUklQVENPUkVfRElSfS9pbnNw
ZWN0b3IvcHJvdG9jb2wvU2VydmljZVdvcmtlci5qc29uCi0gICAgKQotZW5kaWYgKCkKLQogYWRk
X2N1c3RvbV9jb21tYW5kKAogICAgIE9VVFBVVCAke0phdmFTY3JpcHRDb3JlX0RFUklWRURfU09V
UkNFU19ESVJ9L0NvbWJpbmVkRG9tYWlucy5qc29uCiAgICAgTUFJTl9ERVBFTkRFTkNZICR7SmF2
YVNjcmlwdENvcmVfU0NSSVBUU19ESVJ9L2dlbmVyYXRlLWNvbWJpbmVkLWluc3BlY3Rvci1qc29u
LnB5CkBAIC0xMjE3LDExICsxMjAzLDE5IEBAIGFkZF9jdXN0b21fY29tbWFuZCgKICAgICAgICAg
ICAgJHtKYXZhU2NyaXB0Q29yZV9ERVJJVkVEX1NPVVJDRVNfRElSfS9pbnNwZWN0b3IvSW5zcGVj
dG9yRnJvbnRlbmREaXNwYXRjaGVycy5oCiAgICAgICAgICAgICR7SmF2YVNjcmlwdENvcmVfREVS
SVZFRF9TT1VSQ0VTX0RJUn0vaW5zcGVjdG9yL0luc3BlY3RvclByb3RvY29sT2JqZWN0cy5jcHAK
ICAgICAgICAgICAgJHtKYXZhU2NyaXB0Q29yZV9ERVJJVkVEX1NPVVJDRVNfRElSfS9pbnNwZWN0
b3IvSW5zcGVjdG9yUHJvdG9jb2xPYmplY3RzLmgKLSAgICAgICAgICAgJHtKYXZhU2NyaXB0Q29y
ZV9ERVJJVkVEX1NPVVJDRVNfRElSfS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZENvbW1hbmRz
LmpzCiAgICAgTUFJTl9ERVBFTkRFTkNZICR7SmF2YVNjcmlwdENvcmVfREVSSVZFRF9TT1VSQ0VT
X0RJUn0vQ29tYmluZWREb21haW5zLmpzb24KICAgICBERVBFTkRTICR7SmF2YVNjcmlwdENvcmVf
SU5TUEVDVE9SX1BST1RPQ09MX1NDUklQVFN9CiAgICAgQ09NTUFORCAke1BZVEhPTl9FWEVDVVRB
QkxFfSAke0phdmFTY3JpcHRDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0vZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5IC0tb3V0cHV0RGlyICIke0phdmFTY3JpcHRDb3Jl
X0RFUklWRURfU09VUkNFU19ESVJ9L2luc3BlY3RvciIgLS1mcmFtZXdvcmsgSmF2YVNjcmlwdENv
cmUgJHtKYXZhU2NyaXB0Q29yZV9ERVJJVkVEX1NPVVJDRVNfRElSfS9Db21iaW5lZERvbWFpbnMu
anNvbgogICAgIFZFUkJBVElNKQorYWRkX2N1c3RvbV9jb21tYW5kKAorICAgIE9VVFBVVCAke0ph
dmFTY3JpcHRDb3JlX0RFUklWRURfU09VUkNFU19ESVJ9L2luc3BlY3Rvci9JbnNwZWN0b3JCYWNr
ZW5kQ29tbWFuZHMuanMKKyAgICAgICAgICAgJHtKYXZhU2NyaXB0Q29yZV9ERVJJVkVEX1NPVVJD
RVNfRElSfS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzLmluCisgICAgTUFJ
Tl9ERVBFTkRFTkNZICR7SmF2YVNjcmlwdENvcmVfREVSSVZFRF9TT1VSQ0VTX0RJUn0vQ29tYmlu
ZWREb21haW5zLmpzb24KKyAgICBERVBFTkRTICR7SmF2YVNjcmlwdENvcmVfSU5TUEVDVE9SX1BS
T1RPQ09MX1NDUklQVFN9CisgICAgQ09NTUFORCAke1BZVEhPTl9FWEVDVVRBQkxFfSAke0phdmFT
Y3JpcHRDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5IC0tb3V0cHV0RGlyICR7SmF2YVNjcmlwdENvcmVfREVSSVZFRF9TT1VS
Q0VTX0RJUn0vaW5zcGVjdG9yIC0tZnJhbWV3b3JrIFdlYkluc3BlY3RvclVJICR7SmF2YVNjcmlw
dENvcmVfREVSSVZFRF9TT1VSQ0VTX0RJUn0vQ29tYmluZWREb21haW5zLmpzb24KKyAgICBDT01N
QU5EICR7UEVSTF9FWEVDVVRBQkxFfSAke0phdmFTY3JpcHRDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRT
X0RJUn0vY29kZWdlbi9wcmVwcm9jZXNzLnBsIC0taW5wdXQgJHtKYXZhU2NyaXB0Q29yZV9ERVJJ
VkVEX1NPVVJDRVNfRElSfS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzLmlu
IC0tZGVmaW5lcyAiJChGRUFUVVJFX0RFRklORVNfV0lUSF9TUEFDRV9TRVBBUkFUT1IpIiAtLXBy
ZXByb2Nlc3NvciAiJHtDT0RFX0dFTkVSQVRPUl9QUkVQUk9DRVNTT1J9IiAtLW91dHB1dCAke0ph
dmFTY3JpcHRDb3JlX0RFUklWRURfU09VUkNFU19ESVJ9L2luc3BlY3Rvci9JbnNwZWN0b3JCYWNr
ZW5kQ29tbWFuZHMuanMKKyAgICBWRVJCQVRJTSkKK2FkZF9jdXN0b21fdGFyZ2V0KEluc3BlY3Rv
ckJhY2tlbmRDb21tYW5kcyBERVBFTkRTICIke0phdmFTY3JpcHRDb3JlX0RFUklWRURfU09VUkNF
U19ESVJ9L2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMiKQogCiAjIEpTQ0J1
aWx0aW5zCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNl
cy1pbnB1dC54Y2ZpbGVsaXN0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2Vz
LWlucHV0LnhjZmlsZWxpc3QKaW5kZXggZmVhNDA0NWRmMzUuLmEzMWQyMDc5NDQxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlz
dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxl
bGlzdApAQCAtODAsNiArODAsNyBAQCAkKFBST0pFQ1RfRElSKS9pbnNwZWN0b3IvSW5qZWN0ZWRT
Y3JpcHRTb3VyY2UuanMKICQoUFJPSkVDVF9ESVIpL2luc3BlY3Rvci9wcm90b2NvbC9BbmltYXRp
b24uanNvbgogJChQUk9KRUNUX0RJUikvaW5zcGVjdG9yL3Byb3RvY29sL0FwcGxpY2F0aW9uQ2Fj
aGUuanNvbgogJChQUk9KRUNUX0RJUikvaW5zcGVjdG9yL3Byb3RvY29sL0F1ZGl0Lmpzb24KKyQo
UFJPSkVDVF9ESVIpL2luc3BlY3Rvci9wcm90b2NvbC9Ccm93c2VyLmpzb24KICQoUFJPSkVDVF9E
SVIpL2luc3BlY3Rvci9wcm90b2NvbC9DUFVQcm9maWxlci5qc29uCiAkKFBST0pFQ1RfRElSKS9p
bnNwZWN0b3IvcHJvdG9jb2wvQ1NTLmpzb24KICQoUFJPSkVDVF9ESVIpL2luc3BlY3Rvci9wcm90
b2NvbC9DYW52YXMuanNvbgpAQCAtODksNyArOTAsNiBAQCAkKFBST0pFQ1RfRElSKS9pbnNwZWN0
b3IvcHJvdG9jb2wvRE9NRGVidWdnZXIuanNvbgogJChQUk9KRUNUX0RJUikvaW5zcGVjdG9yL3By
b3RvY29sL0RPTVN0b3JhZ2UuanNvbgogJChQUk9KRUNUX0RJUikvaW5zcGVjdG9yL3Byb3RvY29s
L0RhdGFiYXNlLmpzb24KICQoUFJPSkVDVF9ESVIpL2luc3BlY3Rvci9wcm90b2NvbC9EZWJ1Z2dl
ci5qc29uCi0kKFBST0pFQ1RfRElSKS9pbnNwZWN0b3IvcHJvdG9jb2wvQnJvd3Nlci5qc29uCiAk
KFBST0pFQ1RfRElSKS9pbnNwZWN0b3IvcHJvdG9jb2wvR2VuZXJpY1R5cGVzLmpzb24KICQoUFJP
SkVDVF9ESVIpL2luc3BlY3Rvci9wcm90b2NvbC9IZWFwLmpzb24KICQoUFJPSkVDVF9ESVIpL2lu
c3BlY3Rvci9wcm90b2NvbC9JbmRleGVkREIuanNvbgpAQCAtMTE5LDYgKzExOSw3IEBAICQoUFJP
SkVDVF9ESVIpL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfanNfYmFja2VuZF9j
b21tYW5kcy5weQogJChQUk9KRUNUX0RJUikvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0b3IucHkKICQoUFJPSkVDVF9ESVIpL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJh
dG9yX3RlbXBsYXRlcy5weQogJChQUk9KRUNUX0RJUikvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9tb2RlbHMucHkKKyQoUFJPSkVDVF9ESVIpL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vcHJl
cHJvY2Vzcy5wbAogJChQUk9KRUNUX0RJUikvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CiAkKFBST0pFQ1RfRElSKS9wYXJzZXIvS2V5d29y
ZHMudGFibGUKICQoUFJPSkVDVF9ESVIpL3J1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5jcHAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKaW5kZXggMDBkMmE1N2IzZWQu
LmYwOGMyMjBlMWNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNv
dXJjZXMubWFrZQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFr
ZQpAQCAtNDYsNiArNDYsOCBAQCBlbHNlCiAgICAgREVMRVRFID0gcm0gLWYKIGVuZGlmCiAKK0FM
TF9QUkVQUk9DRVNTT1JfREVGSU5JVElPTlM9JChmaWx0ZXItb3V0IE5ERUJVRywkKEdDQ19QUkVQ
Uk9DRVNTT1JfREVGSU5JVElPTlMpKSAkKEZFQVRVUkVfREVGSU5FUykKKwogIyAtLS0tLS0tLQog
CiAuUEhPTlkgOiBhbGwKQEAgLTI0Myw2ICsyNDUsOCBAQCBJTlNQRUNUT1JfRE9NQUlOUyA6PSBc
CiAgICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3RvY29sL0FuaW1hdGlvbi5qc29u
IFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvQXBwbGljYXRpb25D
YWNoZS5qc29uIFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvQXVk
aXQuanNvbiBcCisgICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3RvY29sL0Jyb3dz
ZXIuanNvbiBcCisgICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3RvY29sL0NQVVBy
b2ZpbGVyLmpzb24gXAogICAgICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9wcm90b2NvbC9D
U1MuanNvbiBcCiAgICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3RvY29sL0NhbnZh
cy5qc29uIFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvQ29uc29s
ZS5qc29uIFwKQEAgLTI1MSwzNSArMjU1LDI0IEBAIElOU1BFQ1RPUl9ET01BSU5TIDo9IFwKICAg
ICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvRE9NU3RvcmFnZS5qc29uIFwK
ICAgICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvRGF0YWJhc2UuanNvbiBc
CiAgICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3RvY29sL0RlYnVnZ2VyLmpzb24g
XAotICAgICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9wcm90b2NvbC9Ccm93c2VyLmpzb24g
XAogICAgICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9wcm90b2NvbC9HZW5lcmljVHlwZXMu
anNvbiBcCiAgICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3RvY29sL0hlYXAuanNv
biBcCisgICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3RvY29sL0luZGV4ZWREQi5q
c29uIFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvSW5zcGVjdG9y
Lmpzb24gXAogICAgICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9wcm90b2NvbC9MYXllclRy
ZWUuanNvbiBcCisgICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3RvY29sL01lbW9y
eS5qc29uIFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvTmV0d29y
ay5qc29uIFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvUGFnZS5q
c29uIFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvUmVjb3JkaW5n
Lmpzb24gXAogICAgICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9wcm90b2NvbC9SdW50aW1l
Lmpzb24gXAogICAgICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9wcm90b2NvbC9TY3JpcHRQ
cm9maWxlci5qc29uIFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wv
U2VjdXJpdHkuanNvbiBcCisgICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3RvY29s
L1NlcnZpY2VXb3JrZXIuanNvbiBcCiAgICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3By
b3RvY29sL1RhcmdldC5qc29uIFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJv
dG9jb2wvVGltZWxpbmUuanNvbiBcCiAgICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3By
b3RvY29sL1dvcmtlci5qc29uIFwKICMKIAotaWZlcSAoJChmaW5kc3RyaW5nIEVOQUJMRV9JTkRF
WEVEX0RBVEFCQVNFLCQoRkVBVFVSRV9ERUZJTkVTKSksIEVOQUJMRV9JTkRFWEVEX0RBVEFCQVNF
KQotICAgIElOU1BFQ1RPUl9ET01BSU5TIDo9ICQoSU5TUEVDVE9SX0RPTUFJTlMpICQoSmF2YVNj
cmlwdENvcmUpL2luc3BlY3Rvci9wcm90b2NvbC9JbmRleGVkREIuanNvbgotZW5kaWYKLQotaWZl
cSAoJChmaW5kc3RyaW5nIEVOQUJMRV9SRVNPVVJDRV9VU0FHRSwkKEZFQVRVUkVfREVGSU5FUykp
LCBFTkFCTEVfUkVTT1VSQ0VfVVNBR0UpCi0gICAgSU5TUEVDVE9SX0RPTUFJTlMgOj0gJChJTlNQ
RUNUT1JfRE9NQUlOUykgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3RvY29sL0NQVVBy
b2ZpbGVyLmpzb24KLSAgICBJTlNQRUNUT1JfRE9NQUlOUyA6PSAkKElOU1BFQ1RPUl9ET01BSU5T
KSAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvTWVtb3J5Lmpzb24KLWVuZGlm
Ci0KLWlmZXEgKCQoZmluZHN0cmluZyBFTkFCTEVfU0VSVklDRV9XT1JLRVIsJChGRUFUVVJFX0RF
RklORVMpKSwgRU5BQkxFX1NFUlZJQ0VfV09SS0VSKQotICAgIElOU1BFQ1RPUl9ET01BSU5TIDo9
ICQoSU5TUEVDVE9SX0RPTUFJTlMpICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9wcm90b2Nv
bC9TZXJ2aWNlV29ya2VyLmpzb24KLWVuZGlmCi0KIElOU1BFQ1RPUl9HRU5FUkFUT1JfU0NSSVBU
UyA9IFwKIAkkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL19faW5p
dF9fLnB5IFwKIAkkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2Nw
cF9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5IFwKQEAgLTI5NCw2ICsyODcsNyBAQCBJTlNQRUNUT1Jf
R0VORVJBVE9SX1NDUklQVFMgPSBcCiAJJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5IFwKIAkkKEphdmFTY3JpcHRDb3JlKS9p
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRvci5weSBcCiAJJChKYXZhU2NyaXB0Q29y
ZSkvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9tb2RlbHMucHkgXAorCSQoSmF2YVNjcmlwdENv
cmUpL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vcHJlcHJvY2Vzcy5wbCBcCiAJJChKYXZhU2Ny
aXB0Q29yZSkvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5IFwKIAkkKEphdmFTY3JpcHRDb3JlX1NDUklQVFNfRElSKS9nZW5lcmF0ZS1jb21i
aW5lZC1pbnNwZWN0b3ItanNvbi5weSBcCiAjCkBAIC0zMDIsNyArMjk2LDYgQEAgSU5TUEVDVE9S
X0dFTkVSQVRPUl9TQ1JJUFRTID0gXAogIyBnZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkgYW5kIC4vQ29tYmluZWREb21haW5zLmpzb24/CiBJTlNQRUNUT1JfRElTUEFUQ0hF
Ul9GSUxFUyA9IFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXJzLmggXAotICAgIGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMgXAog
ICAgIGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwIFwKICAgICBpbnNw
ZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmggXAogICAgIGluc3BlY3Rvci9JbnNw
ZWN0b3JGcm9udGVuZERpc3BhdGNoZXJzLmNwcCBcCkBAIC0zMTIsNyArMzA1LDcgQEAgSU5TUEVD
VE9SX0RJU1BBVENIRVJfRklMRVMgPSBcCiAjCiBJTlNQRUNUT1JfRElTUEFUQ0hFUl9GSUxFU19Q
QVRURVJOUyA9ICQoc3Vic3QgLiwlLCQoSU5TUEVDVE9SX0RJU1BBVENIRVJfRklMRVMpKQogCi1h
bGwgOiAkKElOU1BFQ1RPUl9ESVNQQVRDSEVSX0ZJTEVTKQorYWxsIDogJChJTlNQRUNUT1JfRElT
UEFUQ0hFUl9GSUxFUykgaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwogCiAj
IFRoZSBjb21iaW5lZCBKU09OIGZpbGUgZGVwZW5kcyBvbiB0aGUgYWN0dWFsIHNldCBvZiBkb21h
aW5zIGFuZCB0aGVpciBmaWxlIGNvbnRlbnRzLCBzbyB0aGF0CiAjIGFkZGluZywgbW9kaWZ5aW5n
LCBvciByZW1vdmluZyBkb21haW5zIHdpbGwgdHJpZ2dlciByZWdlbmVyYXRpb24gb2YgaW5zcGVj
dG9yIGZpbGVzLgpAQCAtMzI4LDYgKzMyMSwxMiBAQCBDb21iaW5lZERvbWFpbnMuanNvbiA6ICQo
SmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVIpL2dlbmVyYXRlLWNvbWJpbmVkLWluc3BlY3Rvcgog
JChJTlNQRUNUT1JfRElTUEFUQ0hFUl9GSUxFU19QQVRURVJOUykgOiBDb21iaW5lZERvbWFpbnMu
anNvbiAkKElOU1BFQ1RPUl9HRU5FUkFUT1JfU0NSSVBUUykKIAkkKFBZVEhPTikgJChKYXZhU2Ny
aXB0Q29yZSkvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5IC0tZnJhbWV3b3JrIEphdmFTY3JpcHRDb3JlIC0tb3V0cHV0RGlyIGluc3BlY3Rv
ciAuL0NvbWJpbmVkRG9tYWlucy5qc29uCiAKK2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kQ29t
bWFuZHMuanMgOiBDb21iaW5lZERvbWFpbnMuanNvbiAkKElOU1BFQ1RPUl9HRU5FUkFUT1JfU0NS
SVBUUykKKwkkKFBZVEhPTikgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5IC0tZnJhbWV3b3JrIFdlYkluc3Bl
Y3RvclVJIC0tb3V0cHV0RGlyIGluc3BlY3RvciAuL0NvbWJpbmVkRG9tYWlucy5qc29uCisJQGVj
aG8gUHJlLXByb2Nlc3NpbmcgSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLi4uCisJJChQRVJMKSAk
KEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL3ByZXByb2Nlc3MucGwg
LS1pbnB1dCBpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzLmluIC0tZGVmaW5l
cyAiJChBTExfUFJFUFJPQ0VTU09SX0RFRklOSVRJT05TKSIgLS1vdXRwdXQgaW5zcGVjdG9yL0lu
c3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcworCSQoREVMRVRFKSBpbnNwZWN0b3IvSW5zcGVjdG9y
QmFja2VuZENvbW1hbmRzLmpzLmluCisKIEluamVjdGVkU2NyaXB0U291cmNlLmggOiBpbnNwZWN0
b3IvSW5qZWN0ZWRTY3JpcHRTb3VyY2UuanMgJChKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUikv
anNtaW4ucHkgJChKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUikveHhkLnBsCiAJZWNobyAiLy8j
IHNvdXJjZVVSTD1fX0luamVjdGVkU2NyaXB0X0luamVjdGVkU2NyaXB0U291cmNlLmpzIiA+IC4v
SW5qZWN0ZWRTY3JpcHRTb3VyY2UubWluLmpzCiAJJChQWVRIT04pICQoSmF2YVNjcmlwdENvcmVf
U0NSSVBUU19ESVIpL2pzbWluLnB5IDwgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL0luamVj
dGVkU2NyaXB0U291cmNlLmpzID4+IC4vSW5qZWN0ZWRTY3JpcHRTb3VyY2UubWluLmpzCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0ZS1kZXJpdmVkLXNv
dXJjZXMuc2ggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0ZS1kZXJpdmVk
LXNvdXJjZXMuc2gKaW5kZXggOTM2MWY1OGVjNGYuLjI0MTQ3NjU0MzFkIDEwMDc1NQotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0ZS1kZXJpdmVkLXNvdXJjZXMuc2gK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvZ2VuZXJhdGUtZGVyaXZlZC1zb3Vy
Y2VzLnNoCkBAIC0xMSw0ICsxMSw4IEBAIGNkICIke0JVSUxUX1BST0RVQ1RTX0RJUn0vRGVyaXZl
ZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUiCiBleHBvcnQgSmF2YVNjcmlwdENvcmU9IkphdmFTY3Jp
cHRDb3JlIgogZXhwb3J0IEJVSUxUX1BST0RVQ1RTX0RJUj0iLi4vLi4iCiAKK2lmIFsgISAkQ0Mg
XTsgdGhlbgorICAgIGV4cG9ydCBDQz0iYHhjcnVuIC1maW5kIGNsYW5nYCIKK2ZpCisKIG1ha2Ug
LS1uby1idWlsdGluLXJ1bGVzIC1mICJKYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtl
IiAtaiBgL3Vzci9zYmluL3N5c2N0bCAtbiBody5uY3B1YCAiJHtBUkdTW0BdfSIKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvQ1BVUHJvZmlsZXIu
anNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvQ1BVUHJvZmls
ZXIuanNvbgppbmRleCBjZmFjZDAxZGI3My4uYWRjNmM2YWZlZDcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvQ1BVUHJvZmlsZXIuanNvbgorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL0NQVVByb2ZpbGVyLmpz
b24KQEAgLTEsNyArMSw3IEBACiB7CiAgICAgImRvbWFpbiI6ICJDUFVQcm9maWxlciIsCiAgICAg
ImRlc2NyaXB0aW9uIjogIkNQVVByb2ZpbGVyIGRvbWFpbiBleHBvc2VzIGNwdSB1c2FnZSB0cmFj
a2luZy4iLAotICAgICJmZWF0dXJlR3VhcmQiOiAiRU5BQkxFKFJFU09VUkNFX1VTQUdFKSIsCisg
ICAgImNvbmRpdGlvbiI6ICJkZWZpbmVkKEVOQUJMRV9SRVNPVVJDRV9VU0FHRSkgJiYgRU5BQkxF
X1JFU09VUkNFX1VTQUdFIiwKICAgICAiZGVidWdnYWJsZVR5cGVzIjogWyJwYWdlIiwgIndlYi1w
YWdlIl0sCiAgICAgInRhcmdldFR5cGVzIjogWyJwYWdlIl0sCiAgICAgInR5cGVzIjogWwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9DYW52YXMu
anNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvQ2FudmFzLmpz
b24KaW5kZXggYWI1NDQ0MGYwNGEuLjA4YzEwMDUxNzZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL0NhbnZhcy5qc29uCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvQ2FudmFzLmpzb24KQEAgLTExLDYgKzEx
LDcgQEAKICAgICAgICAgfSwKICAgICAgICAgewogICAgICAgICAgICAgImlkIjogIlByb2dyYW1J
ZCIsCisgICAgICAgICAgICAiY29uZGl0aW9uIjogIihkZWZpbmVkKEVOQUJMRV9XRUJHTCkgJiYg
RU5BQkxFX1dFQkdMKSB8fCAoZGVmaW5lZChFTkFCTEVfV0VCR1BVKSAmJiBFTkFCTEVfV0VCR1BV
KSIsCiAgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAogICAgICAgICAgICAgImRlc2NyaXB0
aW9uIjogIlVuaXF1ZSBzaGFkZXIgcHJvZ3JhbSBpZGVudGlmaWVyLiIKICAgICAgICAgfSwKQEAg
LTIyLDExICsyMywxMyBAQAogICAgICAgICB9LAogICAgICAgICB7CiAgICAgICAgICAgICAiaWQi
OiAiUHJvZ3JhbVR5cGUiLAorICAgICAgICAgICAgImNvbmRpdGlvbiI6ICIoZGVmaW5lZChFTkFC
TEVfV0VCR0wpICYmIEVOQUJMRV9XRUJHTCkgfHwgKGRlZmluZWQoRU5BQkxFX1dFQkdQVSkgJiYg
RU5BQkxFX1dFQkdQVSkiLAogICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKICAgICAgICAg
ICAgICJlbnVtIjogWyJjb21wdXRlIiwgInJlbmRlciJdCiAgICAgICAgIH0sCiAgICAgICAgIHsK
ICAgICAgICAgICAgICJpZCI6ICJTaGFkZXJUeXBlIiwKKyAgICAgICAgICAgICJjb25kaXRpb24i
OiAiKGRlZmluZWQoRU5BQkxFX1dFQkdMKSAmJiBFTkFCTEVfV0VCR0wpIHx8IChkZWZpbmVkKEVO
QUJMRV9XRUJHUFUpICYmIEVOQUJMRV9XRUJHUFUpIiwKICAgICAgICAgICAgICJ0eXBlIjogInN0
cmluZyIsCiAgICAgICAgICAgICAiZW51bSI6IFsiY29tcHV0ZSIsICJmcmFnbWVudCIsICJ2ZXJ0
ZXgiXQogICAgICAgICB9LApAQCAtNjEsOCArNjQsOSBAQAogICAgICAgICB9LAogICAgICAgICB7
CiAgICAgICAgICAgICAiaWQiOiAiU2hhZGVyUHJvZ3JhbSIsCi0gICAgICAgICAgICAidHlwZSI6
ICJvYmplY3QiLAogICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkluZm9ybWF0aW9uIGFib3V0
IGEgV2ViR0wvV2ViR0wyIHNoYWRlciBwcm9ncmFtIG9yIFdlYkdQVSBzaGFkZXIgcGlwZWxpbmUu
IiwKKyAgICAgICAgICAgICJjb25kaXRpb24iOiAiKGRlZmluZWQoRU5BQkxFX1dFQkdMKSAmJiBF
TkFCTEVfV0VCR0wpIHx8IChkZWZpbmVkKEVOQUJMRV9XRUJHUFUpICYmIEVOQUJMRV9XRUJHUFUp
IiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCiAgICAgICAgICAgICAicHJvcGVydGll
cyI6IFsKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInByb2dyYW1JZCIsICIkcmVmIjogIlBy
b2dyYW1JZCIgfSwKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInByb2dyYW1UeXBlIiwgIiRy
ZWYiOiAiUHJvZ3JhbVR5cGUiIH0sCkBAIC0xNDcsNiArMTUxLDcgQEAKICAgICAgICAgewogICAg
ICAgICAgICAgIm5hbWUiOiAicmVxdWVzdFNoYWRlclNvdXJjZSIsCiAgICAgICAgICAgICAiZGVz
Y3JpcHRpb24iOiAiUmVxdWVzdHMgdGhlIHNvdXJjZSBvZiB0aGUgc2hhZGVyIG9mIHRoZSBnaXZl
biB0eXBlIGZyb20gdGhlIHByb2dyYW0gd2l0aCB0aGUgZ2l2ZW4gaWQuIiwKKyAgICAgICAgICAg
ICJjb25kaXRpb24iOiAiKGRlZmluZWQoRU5BQkxFX1dFQkdMKSAmJiBFTkFCTEVfV0VCR0wpIHx8
IChkZWZpbmVkKEVOQUJMRV9XRUJHUFUpICYmIEVOQUJMRV9XRUJHUFUpIiwKICAgICAgICAgICAg
ICJwYXJhbWV0ZXJzIjogWwogICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJvZ3JhbUlkIiwg
IiRyZWYiOiAiUHJvZ3JhbUlkIiB9LAogICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2hhZGVy
VHlwZSIsICIkcmVmIjogIlNoYWRlclR5cGUiIH0KQEAgLTE1OCw2ICsxNjMsNyBAQAogICAgICAg
ICB7CiAgICAgICAgICAgICAibmFtZSI6ICJ1cGRhdGVTaGFkZXIiLAogICAgICAgICAgICAgImRl
c2NyaXB0aW9uIjogIkNvbXBpbGVzIGFuZCBsaW5rcyB0aGUgc2hhZGVyIHdpdGggaWRlbnRpZmll
ciBhbmQgdHlwZSB3aXRoIHRoZSBnaXZlbiBzb3VyY2UgY29kZS4iLAorICAgICAgICAgICAgImNv
bmRpdGlvbiI6ICIoZGVmaW5lZChFTkFCTEVfV0VCR0wpICYmIEVOQUJMRV9XRUJHTCkgfHwgKGRl
ZmluZWQoRU5BQkxFX1dFQkdQVSkgJiYgRU5BQkxFX1dFQkdQVSkiLAogICAgICAgICAgICAgInBh
cmFtZXRlcnMiOiBbCiAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcm9ncmFtSWQiLCAiJHJl
ZiI6ICJQcm9ncmFtSWQiIH0sCiAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzaGFkZXJUeXBl
IiwgIiRyZWYiOiAiU2hhZGVyVHlwZSIgfSwKQEAgLTE2Nyw2ICsxNzMsNyBAQAogICAgICAgICB7
CiAgICAgICAgICAgICAibmFtZSI6ICJzZXRTaGFkZXJQcm9ncmFtRGlzYWJsZWQiLAogICAgICAg
ICAgICAgImRlc2NyaXB0aW9uIjogIkVuYWJsZS9kaXNhYmxlIHRoZSB2aXNpYmlsaXR5IG9mIHRo
ZSBnaXZlbiBzaGFkZXIgcHJvZ3JhbS4iLAorICAgICAgICAgICAgImNvbmRpdGlvbiI6ICJkZWZp
bmVkKEVOQUJMRV9XRUJHTCkgJiYgRU5BQkxFX1dFQkdMIiwKICAgICAgICAgICAgICJwYXJhbWV0
ZXJzIjogWwogICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJvZ3JhbUlkIiwgIiRyZWYiOiAi
UHJvZ3JhbUlkIiB9LAogICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGlzYWJsZWQiLCAidHlw
ZSI6ICJib29sZWFuIiB9CkBAIC0xNzUsNiArMTgyLDcgQEAKICAgICAgICAgewogICAgICAgICAg
ICAgIm5hbWUiOiAic2V0U2hhZGVyUHJvZ3JhbUhpZ2hsaWdodGVkIiwKICAgICAgICAgICAgICJk
ZXNjcmlwdGlvbiI6ICJFbmFibGUvZGlzYWJsZSBoaWdobGlnaHRpbmcgb2YgdGhlIGdpdmVuIHNo
YWRlciBwcm9ncmFtLiIsCisgICAgICAgICAgICAiY29uZGl0aW9uIjogImRlZmluZWQoRU5BQkxF
X1dFQkdMKSAmJiBFTkFCTEVfV0VCR0wiLAogICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCiAg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcm9ncmFtSWQiLCAiJHJlZiI6ICJQcm9ncmFtSWQi
IH0sCiAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJoaWdobGlnaHRlZCIsICJ0eXBlIjogImJv
b2xlYW4iIH0KQEAgLTIzOCwxMiArMjQ2LDE0IEBACiAgICAgICAgIH0sCiAgICAgICAgIHsKICAg
ICAgICAgICAgICJuYW1lIjogInByb2dyYW1DcmVhdGVkIiwKKyAgICAgICAgICAgICJjb25kaXRp
b24iOiAiKGRlZmluZWQoRU5BQkxFX1dFQkdMKSAmJiBFTkFCTEVfV0VCR0wpIHx8IChkZWZpbmVk
KEVOQUJMRV9XRUJHUFUpICYmIEVOQUJMRV9XRUJHUFUpIiwKICAgICAgICAgICAgICJwYXJhbWV0
ZXJzIjogWwogICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2hhZGVyUHJvZ3JhbSIsICIkcmVm
IjogIlNoYWRlclByb2dyYW0iIH0KICAgICAgICAgICAgIF0KICAgICAgICAgfSwKICAgICAgICAg
ewogICAgICAgICAgICAgIm5hbWUiOiAicHJvZ3JhbURlbGV0ZWQiLAorICAgICAgICAgICAgImNv
bmRpdGlvbiI6ICIoZGVmaW5lZChFTkFCTEVfV0VCR0wpICYmIEVOQUJMRV9XRUJHTCkgfHwgKGRl
ZmluZWQoRU5BQkxFX1dFQkdQVSkgJiYgRU5BQkxFX1dFQkdQVSkiLAogICAgICAgICAgICAgInBh
cmFtZXRlcnMiOiBbCiAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcm9ncmFtSWQiLCAiJHJl
ZiI6ICJQcm9ncmFtSWQiIH0KICAgICAgICAgICAgIF0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvRE9NLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL0RPTS5qc29uCmluZGV4IDM4Y2I0OGJlZGYyLi4zMjli
MzI1MDZjOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90
b2NvbC9ET00uanNvbgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3Rv
Y29sL0RPTS5qc29uCkBAIC0zOTksNiArMzk5LDE2IEBACiAgICAgICAgIHsKICAgICAgICAgICAg
ICJuYW1lIjogInNldEluc3BlY3RNb2RlRW5hYmxlZCIsCiAgICAgICAgICAgICAiZGVzY3JpcHRp
b24iOiAiRW50ZXJzIHRoZSAnaW5zcGVjdCcgbW9kZS4gSW4gdGhpcyBtb2RlLCBlbGVtZW50cyB0
aGF0IHVzZXIgaXMgaG92ZXJpbmcgb3ZlciBhcmUgaGlnaGxpZ2h0ZWQuIEJhY2tlbmQgdGhlbiBn
ZW5lcmF0ZXMgJ2luc3BlY3QnIGNvbW1hbmQgdXBvbiBlbGVtZW50IHNlbGVjdGlvbi4iLAorICAg
ICAgICAgICAgImNvbmRpdGlvbiI6ICJkZWZpbmVkKFdURl9QTEFURk9STV9JT1NfRkFNSUxZKSAm
JiBXVEZfUExBVEZPUk1fSU9TX0ZBTUlMWSIsCisgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsK
KyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImVuYWJsZWQiLCAidHlwZSI6ICJib29sZWFuIiwg
ImRlc2NyaXB0aW9uIjogIlRydWUgdG8gZW5hYmxlIGluc3BlY3Rpb24gbW9kZSwgZmFsc2UgdG8g
ZGlzYWJsZSBpdC4iIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJoaWdobGlnaHRDb25m
aWciLCAiJHJlZiI6ICJIaWdobGlnaHRDb25maWciLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3Jp
cHRpb24iOiAiQSBkZXNjcmlwdG9yIGZvciB0aGUgaGlnaGxpZ2h0IGFwcGVhcmFuY2Ugb2YgaG92
ZXJlZC1vdmVyIG5vZGVzLiBNYXkgYmUgb21pdHRlZCBpZiA8Y29kZT5lbmFibGVkID09IGZhbHNl
PC9jb2RlPi4iIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAg
ICAgICAgIm5hbWUiOiAic2V0SW5zcGVjdE1vZGVFbmFibGVkIiwKKyAgICAgICAgICAgICJkZXNj
cmlwdGlvbiI6ICJFbnRlcnMgdGhlICdpbnNwZWN0JyBtb2RlLiBJbiB0aGlzIG1vZGUsIGVsZW1l
bnRzIHRoYXQgdXNlciBpcyBob3ZlcmluZyBvdmVyIGFyZSBoaWdobGlnaHRlZC4gQmFja2VuZCB0
aGVuIGdlbmVyYXRlcyAnaW5zcGVjdCcgY29tbWFuZCB1cG9uIGVsZW1lbnQgc2VsZWN0aW9uLiIs
CisgICAgICAgICAgICAiY29uZGl0aW9uIjogIiEoZGVmaW5lZChXVEZfUExBVEZPUk1fSU9TX0ZB
TUlMWSkgJiYgV1RGX1BMQVRGT1JNX0lPU19GQU1JTFkpIiwKICAgICAgICAgICAgICJwYXJhbWV0
ZXJzIjogWwogICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZW5hYmxlZCIsICJ0eXBlIjogImJv
b2xlYW4iLCAiZGVzY3JpcHRpb24iOiAiVHJ1ZSB0byBlbmFibGUgaW5zcGVjdGlvbiBtb2RlLCBm
YWxzZSB0byBkaXNhYmxlIGl0LiIgfSwKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImhpZ2hs
aWdodENvbmZpZyIsICIkcmVmIjogIkhpZ2hsaWdodENvbmZpZyIsICJvcHRpb25hbCI6IHRydWUs
ICJkZXNjcmlwdGlvbiI6ICJBIGRlc2NyaXB0b3IgZm9yIHRoZSBoaWdobGlnaHQgYXBwZWFyYW5j
ZSBvZiBob3ZlcmVkLW92ZXIgbm9kZXMuIE1heSBiZSBvbWl0dGVkIGlmIDxjb2RlPmVuYWJsZWQg
PT0gZmFsc2U8L2NvZGU+LiIgfSwKQEAgLTY4OCw2ICs2OTgsNyBAQAogICAgICAgICB7CiAgICAg
ICAgICAgICAibmFtZSI6ICJwb3dlckVmZmljaWVudFBsYXliYWNrU3RhdGVDaGFuZ2VkIiwKICAg
ICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJDYWxsZWQgd2hlbiBhbiBlbGVtZW50IGVudGVycy9l
eGl0cyBhIHBvd2VyIGVmZmljaWVudCBwbGF5YmFjayBzdGF0ZS4iLAorICAgICAgICAgICAgImNv
bmRpdGlvbiI6ICJkZWZpbmVkKEVOQUJMRV9WSURFTykgJiYgRU5BQkxFX1ZJREVPIiwKICAgICAg
ICAgICAgICJwYXJhbWV0ZXJzIjogWwogICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm9kZUlk
IiwgIiRyZWYiOiAiTm9kZUlkIiB9LAogICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0
YW1wIiwgIiRyZWYiOiAiTmV0d29yay5UaW1lc3RhbXAiIH0sCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL0luZGV4ZWREQi5qc29uIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9JbmRleGVkREIuanNvbgppbmRleCA5
ZDIzMDA4OTMwNy4uOTcxZTcwMjdiMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvcHJvdG9jb2wvSW5kZXhlZERCLmpzb24KKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9JbmRleGVkREIuanNvbgpAQCAtMSw2ICsxLDYgQEAK
IHsKICAgICAiZG9tYWluIjogIkluZGV4ZWREQiIsCi0gICAgImZlYXR1cmVHdWFyZCI6ICJFTkFC
TEUoSU5ERVhFRF9EQVRBQkFTRSkiLAorICAgICJjb25kaXRpb24iOiAiZGVmaW5lZChFTkFCTEVf
SU5ERVhFRF9EQVRBQkFTRSkgJiYgRU5BQkxFX0lOREVYRURfREFUQUJBU0UiLAogICAgICJkZWJ1
Z2dhYmxlVHlwZXMiOiBbInBhZ2UiLCAid2ViLXBhZ2UiXSwKICAgICAidGFyZ2V0VHlwZXMiOiBb
InBhZ2UiXSwKICAgICAidHlwZXMiOiBbCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3Byb3RvY29sL0luc3BlY3Rvci5qc29uIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9wcm90b2NvbC9JbnNwZWN0b3IuanNvbgppbmRleCAyYmI4ZDYyODU1YS4u
N2FlMmU5OTMxZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
cHJvdG9jb2wvSW5zcGVjdG9yLmpzb24KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9wcm90b2NvbC9JbnNwZWN0b3IuanNvbgpAQCAtMzMsNiArMzMsNyBAQAogICAgICAgICB7
CiAgICAgICAgICAgICAibmFtZSI6ICJhY3RpdmF0ZUV4dHJhRG9tYWlucyIsCiAgICAgICAgICAg
ICAiZGVzY3JpcHRpb24iOiAiRmlyZWQgd2hlbiB0aGUgYmFja2VuZCBoYXMgYWx0ZXJuYXRlIGRv
bWFpbnMgdGhhdCBuZWVkIHRvIGJlIGFjdGl2YXRlZC4iLAorICAgICAgICAgICAgImNvbmRpdGlv
biI6ICJkZWZpbmVkKEVOQUJMRV9JTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKSAmJiBF
TkFCTEVfSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUyIsCiAgICAgICAgICAgICAicGFy
YW1ldGVycyI6IFsKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRvbWFpbnMiLCAidHlwZSI6
ICJhcnJheSIsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9LCAiZGVzY3JpcHRpb24iOiAi
RG9tYWluIG5hbWVzIHRoYXQgbmVlZCBhY3RpdmF0aW9uIiB9CiAgICAgICAgICAgICBdCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL01lbW9yeS5q
c29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9NZW1vcnkuanNv
bgppbmRleCAwYzNkOTE0Mzg3MS4uOGJlYWE0MDMwNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvTWVtb3J5Lmpzb24KKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9NZW1vcnkuanNvbgpAQCAtMSw3ICsxLDcg
QEAKIHsKICAgICAiZG9tYWluIjogIk1lbW9yeSIsCiAgICAgImRlc2NyaXB0aW9uIjogIk1lbW9y
eSBkb21haW4gZXhwb3NlcyBwYWdlIG1lbW9yeSB0cmFja2luZy4iLAotICAgICJmZWF0dXJlR3Vh
cmQiOiAiRU5BQkxFKFJFU09VUkNFX1VTQUdFKSIsCisgICAgImNvbmRpdGlvbiI6ICJkZWZpbmVk
KEVOQUJMRV9SRVNPVVJDRV9VU0FHRSkgJiYgRU5BQkxFX1JFU09VUkNFX1VTQUdFIiwKICAgICAi
ZGVidWdnYWJsZVR5cGVzIjogWyJwYWdlIiwgIndlYi1wYWdlIl0sCiAgICAgInRhcmdldFR5cGVz
IjogWyJwYWdlIl0sCiAgICAgInR5cGVzIjogWwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9QYWdlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3Byb3RvY29sL1BhZ2UuanNvbgppbmRleCBkMjc1MTJhNGYwMC4uNGY3MDk3
NzFkYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9j
b2wvUGFnZS5qc29uCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9j
b2wvUGFnZS5qc29uCkBAIC00NSw2ICs0NSw3IEBACiAgICAgICAgIHsKICAgICAgICAgICAgICJp
ZCI6ICJBcHBlYXJhbmNlIiwKICAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAg
ICAgICAiY29uZGl0aW9uIjogIihkZWZpbmVkKEVOQUJMRV9EQVJLX01PREVfQ1NTKSAmJiBFTkFC
TEVfREFSS19NT0RFX0NTUykgfHwgKGRlZmluZWQoSEFWRV9PU19EQVJLX01PREVfU1VQUE9SVCkg
JiYgSEFWRV9PU19EQVJLX01PREVfU1VQUE9SVCkiLAogICAgICAgICAgICAgImVudW0iOiBbIkxp
Z2h0IiwgIkRhcmsiXSwKICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJQYWdlIGFwcGVhcmFu
Y2UgbmFtZS4iCiAgICAgICAgIH0sCkBAIC0yMjksNiArMjMwLDcgQEAKICAgICAgICAgewogICAg
ICAgICAgICAgIm5hbWUiOiAic2V0U2hvd1J1bGVycyIsCiAgICAgICAgICAgICAiZGVzY3JpcHRp
b24iOiAiUmVxdWVzdHMgdGhhdCBiYWNrZW5kIGRyYXcgcnVsZXJzIGluIHRoZSBpbnNwZWN0b3Ig
b3ZlcmxheSIsCisgICAgICAgICAgICAiY29uZGl0aW9uIjogIiEoZGVmaW5lZChXVEZfUExBVEZP
Uk1fSU9TX0ZBTUlMWSkgJiYgV1RGX1BMQVRGT1JNX0lPU19GQU1JTFkpIiwKICAgICAgICAgICAg
ICJwYXJhbWV0ZXJzIjogWwogICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicmVzdWx0IiwgInR5
cGUiOiAiYm9vbGVhbiIsICJkZXNjcmlwdGlvbiI6ICJUcnVlIGZvciBzaG93aW5nIHJ1bGVycyIg
fQogICAgICAgICAgICAgXQpAQCAtMjUwLDYgKzI1Miw3IEBACiAgICAgICAgIHsKICAgICAgICAg
ICAgICJuYW1lIjogInNldEZvcmNlZEFwcGVhcmFuY2UiLAogICAgICAgICAgICAgImRlc2NyaXB0
aW9uIjogIkZvcmNlcyB0aGUgZ2l2ZW4gYXBwZWFyYW5jZSBmb3IgdGhlIHBhZ2UuIiwKKyAgICAg
ICAgICAgICJjb25kaXRpb24iOiAiKGRlZmluZWQoRU5BQkxFX0RBUktfTU9ERV9DU1MpICYmIEVO
QUJMRV9EQVJLX01PREVfQ1NTKSB8fCAoZGVmaW5lZChIQVZFX09TX0RBUktfTU9ERV9TVVBQT1JU
KSAmJiBIQVZFX09TX0RBUktfTU9ERV9TVVBQT1JUKSIsCiAgICAgICAgICAgICAicGFyYW1ldGVy
cyI6IFsKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImFwcGVhcmFuY2UiLCAiJHJlZiI6ICJB
cHBlYXJhbmNlIiwgImRlc2NyaXB0aW9uIjogIkFwcGVhcmFuY2UgbmFtZSB0byBmb3JjZS4gRW1w
dHkgc3RyaW5nIGRpc2FibGVzIHRoZSBvdmVycmlkZS4iIH0KICAgICAgICAgICAgIF0KQEAgLTI4
MSw2ICsyODQsNyBAQAogICAgICAgICB7CiAgICAgICAgICAgICAibmFtZSI6ICJhcmNoaXZlIiwK
ICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJHcmFiIGFuIGFyY2hpdmUgb2YgdGhlIHBhZ2Uu
IiwKKyAgICAgICAgICAgICJjb25kaXRpb24iOiAiKGRlZmluZWQoRU5BQkxFX1dFQl9BUkNISVZF
KSAmJiBFTkFCTEVfV0VCX0FSQ0hJVkUpICYmIChkZWZpbmVkKFVTRV9DRikgJiYgVVNFX0NGKSIs
CiAgICAgICAgICAgICAicmV0dXJucyI6IFsKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRh
dGEiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiQmFzZTY0LWVuY29kZWQgd2Vi
IGFyY2hpdmUuIiB9CiAgICAgICAgICAgICBdCkBAIC0zNDUsNiArMzQ5LDcgQEAKICAgICAgICAg
ewogICAgICAgICAgICAgIm5hbWUiOiAiZGVmYXVsdEFwcGVhcmFuY2VEaWRDaGFuZ2UiLAogICAg
ICAgICAgICAgImRlc2NyaXB0aW9uIjogIkZpcmVkIHdoZW4gcGFnZSdzIGRlZmF1bHQgYXBwZWFy
YW5jZSBjaGFuZ2VzLCBldmVuIGlmIHRoZXJlIGlzIGEgZm9yY2VkIGFwcGVhcmFuY2UuIiwKKyAg
ICAgICAgICAgICJjb25kaXRpb24iOiAiKGRlZmluZWQoRU5BQkxFX0RBUktfTU9ERV9DU1MpICYm
IEVOQUJMRV9EQVJLX01PREVfQ1NTKSB8fCAoZGVmaW5lZChIQVZFX09TX0RBUktfTU9ERV9TVVBQ
T1JUKSAmJiBIQVZFX09TX0RBUktfTU9ERV9TVVBQT1JUKSIsCiAgICAgICAgICAgICAicGFyYW1l
dGVycyI6IFsKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImFwcGVhcmFuY2UiLCAiJHJlZiI6
ICJBcHBlYXJhbmNlIiwgImRlc2NyaXB0aW9uIjogIk5hbWUgb2YgdGhlIGFwcGVhcmFuY2UgdGhh
dCBpcyBhY3RpdmUgKG5vdCBjb25zaWRlcmluZyBhbnkgZm9yY2VkIGFwcGVhcmFuY2UuKSIgfQog
ICAgICAgICAgICAgXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9wcm90b2NvbC9TZXJ2aWNlV29ya2VyLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3Byb3RvY29sL1NlcnZpY2VXb3JrZXIuanNvbgppbmRleCA4YWMzZDRmN2Q2Yi4uZDAz
MzFiZTE3MGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJv
dG9jb2wvU2VydmljZVdvcmtlci5qc29uCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvcHJvdG9jb2wvU2VydmljZVdvcmtlci5qc29uCkBAIC0xLDYgKzEsNyBAQAogewogICAg
ICJkb21haW4iOiAiU2VydmljZVdvcmtlciIsCiAgICAgImRlc2NyaXB0aW9uIjogIkFjdGlvbnMg
YW5kIGV2ZW50cyByZWxhdGVkIHRvIHRoZSBpbnNwZWN0ZWQgc2VydmljZSB3b3JrZXIuIiwKKyAg
ICAiY29uZGl0aW9uIjogImRlZmluZWQoRU5BQkxFX1NFUlZJQ0VfV09SS0VSKSAmJiBFTkFCTEVf
U0VSVklDRV9XT1JLRVIiLAogICAgICJkZWJ1Z2dhYmxlVHlwZXMiOiBbInNlcnZpY2Utd29ya2Vy
Il0sCiAgICAgInRhcmdldFR5cGVzIjogWyJzZXJ2aWNlLXdvcmtlciJdLAogICAgICJ0eXBlcyI6
IFsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9j
b2RlZ2VuL2NwcF9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkKaW5k
ZXggOTZiNTVlNDE2MmMuLmQwYzdiZTZkNDkxIDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5w
eQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9j
cHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weQpAQCAtMTA4LDcgKzEwOCw3IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlJHtkb21haW5OYW1lfUJhY2tl
bmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hl
ciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KIHByaXZhdGU6CiAgICAgQWx0ZXJuYXRlJHtkb21h
aW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyKiBtX2FsdGVybmF0ZURpc3BhdGNoZXIgeyBudWxscHRy
IH07Ci0jZW5kaWYiIiIpCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpIiIiKQogCiAgICAgQmFja2VuZERpc3BhdGNoZXJIZWFkZXJBc3luY0NvbW1hbmRE
ZWNsYXJhdGlvbiA9ICgKICAgICAiIiIgICAgJHtjbGFzc0FuZEV4cG9ydE1hY3JvfSAke2NhbGxi
YWNrTmFtZX0gOiBwdWJsaWMgQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZSB7CkBAIC0x
MjcsOCArMTI3LDggQEAgcHJpdmF0ZToKICAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJf
cywgcGFyYW1ldGVycyk7CiAKICR7ZGlzcGF0Y2hDYXNlc30KLSAgICBlbHNlCi0gICAgICAgIG1f
YmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6
Ok1ldGhvZE5vdEZvdW5kLCAiJyR7ZG9tYWluTmFtZX0uIiArIG1ldGhvZCArICInIHdhcyBub3Qg
Zm91bmQiKTsKKworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3Io
QmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJyR7ZG9tYWluTmFtZX0uIiArIG1l
dGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKIH0iIiIpCiAKICAgICBCYWNrZW5kRGlzcGF0Y2hl
ckltcGxlbWVudGF0aW9uTGFyZ2VTd2l0Y2ggPSAoCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYWx0ZXJuYXRl
X2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYWx0ZXJuYXRlX2JhY2tlbmRfZGlz
cGF0Y2hlcl9oZWFkZXIucHkKaW5kZXggZTYyNzg4MGUxMzMuLmUxYTY2MWJhMzc5IDEwMDc1NQot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0ZV9jcHBfYWx0ZXJuYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3Bw
X2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CkBAIC01Niw3ICs1Niw3IEBA
IGNsYXNzIENwcEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKENwcEdl
bmVyYXRvcik6CiAgICAgICAgIHNlY3Rpb25zID0gW10KICAgICAgICAgc2VjdGlvbnMuYXBwZW5k
KHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgpKQogICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxh
dGUoQ3BwVGVtcGxhdGVzLkFsdGVybmF0ZURpc3BhdGNoZXJzSGVhZGVyUHJlbHVkZSkuc3Vic3Rp
dHV0ZShOb25lLCAqKnRlbXBsYXRlX2FyZ3MpKQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoJ1xu
Jy5qb2luKFtfZiBmb3IgX2YgaW4gbWFwKHNlbGYuX2dlbmVyYXRlX2hhbmRsZXJfZGVjbGFyYXRp
b25zX2Zvcl9kb21haW4sIGRvbWFpbnMpIGlmIF9mXSkpCisgICAgICAgIHNlY3Rpb25zLmFwcGVu
ZCgnXG5cbicuam9pbihbX2YgZm9yIF9mIGluIG1hcChzZWxmLl9nZW5lcmF0ZV9oYW5kbGVyX2Rl
Y2xhcmF0aW9uc19mb3JfZG9tYWluLCBkb21haW5zKSBpZiBfZl0pKQogICAgICAgICBzZWN0aW9u
cy5hcHBlbmQoVGVtcGxhdGUoQ3BwVGVtcGxhdGVzLkFsdGVybmF0ZURpc3BhdGNoZXJzSGVhZGVy
UG9zdGx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKip0ZW1wbGF0ZV9hcmdzKSkKICAgICAgICAgcmV0
dXJuICdcblxuJy5qb2luKHNlY3Rpb25zKQogCkBAIC04Nyw3ICs4Nyw3IEBAIGNsYXNzIENwcEFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAg
ICAgICAgICAgICAnY29tbWFuZERlY2xhcmF0aW9ucyc6ICdcbicuam9pbihjb21tYW5kX2RlY2xh
cmF0aW9ucyksCiAgICAgICAgIH0KIAotICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3Vh
cmRfZm9yX2RvbWFpbihkb21haW4sIFRlbXBsYXRlKENwcFRlbXBsYXRlcy5BbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlckhlYWRlckRvbWFpbkhhbmRsZXJJbnRlcmZhY2VEZWNsYXJhdGlvbikuc3Vi
c3RpdHV0ZShOb25lLCAqKmhhbmRsZXJfYXJncykpCisgICAgICAgIHJldHVybiBzZWxmLndyYXBf
d2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRvbWFpbi5jb25kaXRpb24sIFRlbXBsYXRlKENwcFRl
bXBsYXRlcy5BbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckRvbWFpbkhhbmRsZXJJbnRl
cmZhY2VEZWNsYXJhdGlvbikuc3Vic3RpdHV0ZShOb25lLCAqKmhhbmRsZXJfYXJncykpCiAKICAg
ICBkZWYgX2dlbmVyYXRlX2hhbmRsZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQoc2VsZiwgY29t
bWFuZCk6CiAgICAgICAgIGxpbmVzID0gW10KQEAgLTEwMCw0ICsxMDAsNCBAQCBjbGFzcyBDcHBB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgog
ICAgICAgICAgICAgJ3BhcmFtZXRlcnMnOiAnLCAnLmpvaW4ocGFyYW1ldGVycyksCiAgICAgICAg
IH0KICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgdmlydHVhbCB2b2lkICUoY29tbWFuZE5hbWUp
cyglKHBhcmFtZXRlcnMpcykgPSAwOycgJSBjb21tYW5kX2FyZ3MpCi0gICAgICAgIHJldHVybiAn
XG4nLmpvaW4obGluZXMpCisgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3Jf
Y29uZGl0aW9uKGNvbW1hbmQuY29uZGl0aW9uLCAnXG4nLmpvaW4obGluZXMpKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJh
dGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRj
aGVyX2hlYWRlci5weQppbmRleCBlM2ZlNGUxMDA0Mi4uMTBkOGYxNGJkNWYgMTAwNzU1Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3Bh
dGNoZXJfaGVhZGVyLnB5CkBAIC05MSw3ICs5MSw3IEBAIGNsYXNzIENwcEJhY2tlbmREaXNwYXRj
aGVySGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgIGxpbmVzID0gW10KICAg
ICAgICAgbGluZXMuYXBwZW5kKCcjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpJykKICAgICAgICAgZm9yIGRvbWFpbiBpbiBkb21haW5zOgotICAgICAgICAgICAgbGlu
ZXMuYXBwZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCAnY2xhc3Mg
QWx0ZXJuYXRlJXNCYWNrZW5kRGlzcGF0Y2hlcjsnICUgZG9tYWluLmRvbWFpbl9uYW1lKSkKKyAg
ICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9u
KGRvbWFpbi5jb25kaXRpb24sICdjbGFzcyBBbHRlcm5hdGUlc0JhY2tlbmREaXNwYXRjaGVyOycg
JSBkb21haW4uZG9tYWluX25hbWUpKQogICAgICAgICBsaW5lcy5hcHBlbmQoJyNlbmRpZiAvLyBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUyknKQogICAgICAgICByZXR1cm4g
J1xuJy5qb2luKGxpbmVzKQogCkBAIC0xMTMsNyArMTEzLDcgQEAgY2xhc3MgQ3BwQmFja2VuZERp
c3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgICAgICdjb21t
YW5kRGVjbGFyYXRpb25zJzogIlxuIi5qb2luKGNvbW1hbmRfZGVjbGFyYXRpb25zKQogICAgICAg
ICB9CiAKLSAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9t
YWluLCBUZW1wbGF0ZShDcHBUZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNoZXJIZWFkZXJEb21haW5I
YW5kbGVyRGVjbGFyYXRpb24pLnN1YnN0aXR1dGUoTm9uZSwgKipoYW5kbGVyX2FyZ3MpKQorICAg
ICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihkb21haW4uY29u
ZGl0aW9uLCBUZW1wbGF0ZShDcHBUZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNoZXJIZWFkZXJEb21h
aW5IYW5kbGVyRGVjbGFyYXRpb24pLnN1YnN0aXR1dGUoTm9uZSwgKipoYW5kbGVyX2FyZ3MpKQog
CiAgICAgZGVmIF9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfcGFyYW1ldGVyKHNlbGYsIHBh
cmFtZXRlciwgY29tbWFuZCk6CiAgICAgICAgIGVudW1fYXJncyA9IHsKQEAgLTE2MSw3ICsxNjEs
NyBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0
b3IpOgogICAgICAgICAgICAgJ3BhcmFtZXRlcnMnOiAiLCAiLmpvaW4ocGFyYW1ldGVycykKICAg
ICAgICAgfQogICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICB2aXJ0dWFsIHZvaWQgJShjb21tYW5k
TmFtZSlzKCUocGFyYW1ldGVycylzKSA9IDA7JyAlIGNvbW1hbmRfYXJncykKLSAgICAgICAgcmV0
dXJuICdcbicuam9pbihsaW5lcykKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJk
X2Zvcl9jb25kaXRpb24oY29tbWFuZC5jb25kaXRpb24sICdcbicuam9pbihsaW5lcykpCiAKICAg
ICBkZWYgX2dlbmVyYXRlX2FzeW5jX2hhbmRsZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQoc2Vs
ZiwgY29tbWFuZCk6CiAgICAgICAgIGNhbGxiYWNrTmFtZSA9ICIlc0NhbGxiYWNrIiAlIHVjZmly
c3QoY29tbWFuZC5jb21tYW5kX25hbWUpCkBAIC0xOTIsNyArMTkyLDcgQEAgY2xhc3MgQ3BwQmFj
a2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgICAg
ICdvdXRQYXJhbWV0ZXJzJzogIiwgIi5qb2luKG91dF9wYXJhbWV0ZXJzKSwKICAgICAgICAgfQog
Ci0gICAgICAgIHJldHVybiBUZW1wbGF0ZShDcHBUZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNoZXJI
ZWFkZXJBc3luY0NvbW1hbmREZWNsYXJhdGlvbikuc3Vic3RpdHV0ZShOb25lLCAqKmNvbW1hbmRf
YXJncykKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24o
Y29tbWFuZC5jb25kaXRpb24sIFRlbXBsYXRlKENwcFRlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hl
ckhlYWRlckFzeW5jQ29tbWFuZERlY2xhcmF0aW9uKS5zdWJzdGl0dXRlKE5vbmUsICoqY29tbWFu
ZF9hcmdzKSkKIAogICAgIGRlZiBfZ2VuZXJhdGVfZGlzcGF0Y2hlcl9kZWNsYXJhdGlvbnNfZm9y
X2RvbWFpbihzZWxmLCBkb21haW4pOgogICAgICAgICBjbGFzc0NvbXBvbmVudHMgPSBbJ2NsYXNz
J10KQEAgLTIyMCw3ICsyMjAsNyBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdl
bmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICAgICAgJ2NvbW1hbmREZWNsYXJhdGlvbnMn
OiAiXG4iLmpvaW4oZGVjbGFyYXRpb25zKQogICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuIHNl
bGYud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCBUZW1wbGF0ZShDcHBUZW1wbGF0
ZXMuQmFja2VuZERpc3BhdGNoZXJIZWFkZXJEb21haW5EaXNwYXRjaGVyRGVjbGFyYXRpb24pLnN1
YnN0aXR1dGUoTm9uZSwgKipoYW5kbGVyX2FyZ3MpKQorICAgICAgICByZXR1cm4gc2VsZi53cmFw
X3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9uLCBUZW1wbGF0ZShDcHBU
ZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNoZXJIZWFkZXJEb21haW5EaXNwYXRjaGVyRGVjbGFyYXRp
b24pLnN1YnN0aXR1dGUoTm9uZSwgKipoYW5kbGVyX2FyZ3MpKQogCiAgICAgZGVmIF9nZW5lcmF0
ZV9kaXNwYXRjaGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKHNlbGYsIGNvbW1hbmQpOgotICAg
ICAgICByZXR1cm4gIiAgICB2b2lkICVzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmIHBhcmFtZXRlcnMpOyIgJSBjb21tYW5kLmNvbW1hbmRfbmFtZQorICAgICAgICByZXR1
cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihjb21tYW5kLmNvbmRpdGlvbiwg
IiAgICB2b2lkICVzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFt
ZXRlcnMpOyIgJSBjb21tYW5kLmNvbW1hbmRfbmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5k
X2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2lt
cGxlbWVudGF0aW9uLnB5CmluZGV4IGExNTk2MWE2NDc0Li5kYWYxOWM5NTBmYiAxMDA3NTUKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJh
dGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFj
a2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CkBAIC02MCw3ICs2MCw3IEBAIGNsYXNz
IENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9y
KToKICAgICAgICAgICAgIHNlY29uZGFyeV9pbmNsdWRlcy5hcHBlbmQoJycpCiAgICAgICAgICAg
ICBzZWNvbmRhcnlfaW5jbHVkZXMuYXBwZW5kKCcjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpJykKICAgICAgICAgICAgIHNlY29uZGFyeV9pbmNsdWRlcy5hcHBlbmQo
JyNpbmNsdWRlICIlc0FsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIicgJSBzZWxmLnByb3Rv
Y29sX25hbWUoKSkKLSAgICAgICAgICAgIHNlY29uZGFyeV9pbmNsdWRlcy5hcHBlbmQoJyNlbmRp
ZicpCisgICAgICAgICAgICBzZWNvbmRhcnlfaW5jbHVkZXMuYXBwZW5kKCcjZW5kaWYgLy8gRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpJykKIAogICAgICAgICBoZWFkZXJf
YXJncyA9IHsKICAgICAgICAgICAgICdwcmltYXJ5SW5jbHVkZSc6ICciJXNCYWNrZW5kRGlzcGF0
Y2hlcnMuaCInICUgc2VsZi5wcm90b2NvbF9uYW1lKCksCkBAIC05Myw3ICs5Myw3IEBAIGNsYXNz
IENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9y
KToKICAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lCiAgICAgICAg
IH0KICAgICAgICAgZGVzdHJ1Y3RvciA9ICclKGRvbWFpbk5hbWUpc0JhY2tlbmREaXNwYXRjaGVy
SGFuZGxlcjo6fiUoZG9tYWluTmFtZSlzQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9JyAl
IGRlc3RydWN0b3JfYXJncwotICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9y
X2RvbWFpbihkb21haW4sIGRlc3RydWN0b3IpCisgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0
aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRvbWFpbi5jb25kaXRpb24sIGRlc3RydWN0b3IpCiAKICAg
ICBkZWYgX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25zX2Zvcl9kb21haW4oc2Vs
ZiwgZG9tYWluKToKICAgICAgICAgaW1wbGVtZW50YXRpb25zID0gW10KQEAgLTExNSwxNyArMTE1
LDI5IEBAIGNsYXNzIENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3Io
Q3BwR2VuZXJhdG9yKToKICAgICAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbnMuYXBwZW5kKHNl
bGYuX2dlbmVyYXRlX2FzeW5jX2Rpc3BhdGNoZXJfY2xhc3NfZm9yX2RvbWFpbihjb21tYW5kLCBk
b21haW4pKQogICAgICAgICAgICAgaW1wbGVtZW50YXRpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0
ZV9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uX2Zvcl9jb21tYW5kKGNvbW1hbmQsIGRvbWFpbikp
CiAKLSAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWlu
LCAnXG5cbicuam9pbihpbXBsZW1lbnRhdGlvbnMpKQorICAgICAgICByZXR1cm4gc2VsZi53cmFw
X3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9uLCAnXG5cbicuam9pbihp
bXBsZW1lbnRhdGlvbnMpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9zbWFsbF9kaXNwYXRjaGVyX3N3
aXRjaF9pbXBsZW1lbnRhdGlvbl9mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6CiAgICAgICAgIGNv
bW1hbmRzID0gc2VsZi5jb21tYW5kc19mb3JfZG9tYWluKGRvbWFpbikKIAogICAgICAgICBjYXNl
cyA9IFtdCi0gICAgICAgIGNhc2VzLmFwcGVuZCgnICAgIGlmIChtZXRob2QgPT0gIiVzIiknICUg
Y29tbWFuZHNbMF0uY29tbWFuZF9uYW1lKQotICAgICAgICBjYXNlcy5hcHBlbmQoJyAgICAgICAg
JXMocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsnICUgY29tbWFuZHNbMF0uY29tbWFu
ZF9uYW1lKQorCisgICAgICAgIGZpcnN0X2NvbW1hbmRfc3RyaW5nID0gIlxuIi5qb2luKFsKKyAg
ICAgICAgICAgICcgICAgaWYgKG1ldGhvZCA9PSAiJXMiKSB7JyAlIGNvbW1hbmRzWzBdLmNvbW1h
bmRfbmFtZSwKKyAgICAgICAgICAgICcgICAgICAgICVzKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJh
bWV0ZXJzKSk7JyAlIGNvbW1hbmRzWzBdLmNvbW1hbmRfbmFtZSwKKyAgICAgICAgICAgICcgICAg
ICAgIHJldHVybjsnLAorICAgICAgICAgICAgJyAgICB9JywKKyAgICAgICAgXSkKKyAgICAgICAg
Y2FzZXMuYXBwZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oY29tbWFuZHNb
MF0uY29uZGl0aW9uLCBmaXJzdF9jb21tYW5kX3N0cmluZykpCisKICAgICAgICAgZm9yIGNvbW1h
bmQgaW4gY29tbWFuZHNbMTpdOgotICAgICAgICAgICAgY2FzZXMuYXBwZW5kKCcgICAgZWxzZSBp
ZiAobWV0aG9kID09ICIlcyIpJyAlIGNvbW1hbmQuY29tbWFuZF9uYW1lKQotICAgICAgICAgICAg
Y2FzZXMuYXBwZW5kKCcgICAgICAgICVzKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7
JyAlIGNvbW1hbmQuY29tbWFuZF9uYW1lKQorICAgICAgICAgICAgYWRkaXRpb25hbF9jb21tYW5k
X3N0cmluZyA9ICJcbiIuam9pbihbCisgICAgICAgICAgICAgICAgJyAgICBpZiAobWV0aG9kID09
ICIlcyIpIHsnICUgY29tbWFuZC5jb21tYW5kX25hbWUsCisgICAgICAgICAgICAgICAgJyAgICAg
ICAgJXMocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsnICUgY29tbWFuZC5jb21tYW5k
X25hbWUsCisgICAgICAgICAgICAgICAgJyAgICAgICAgcmV0dXJuOycsCisgICAgICAgICAgICAg
ICAgJyAgICB9JywKKyAgICAgICAgICAgIF0pCisgICAgICAgICAgICBjYXNlcy5hcHBlbmQoc2Vs
Zi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihjb21tYW5kLmNvbmRpdGlvbiwgYWRkaXRp
b25hbF9jb21tYW5kX3N0cmluZykpCiAKICAgICAgICAgc3dpdGNoX2FyZ3MgPSB7CiAgICAgICAg
ICAgICAnZG9tYWluTmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZSwKQEAgLTE0Myw3ICsxNTUsNyBA
QCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKENwcEdl
bmVyYXRvcik6CiAgICAgICAgICAgICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25h
bWUsCiAgICAgICAgICAgICAgICAgJ2NvbW1hbmROYW1lJzogY29tbWFuZC5jb21tYW5kX25hbWUK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2VzLmFwcGVuZCgnICAgICAgICAgICAgeyAi
JShjb21tYW5kTmFtZSlzIiwgJiUoZG9tYWluTmFtZSlzQmFja2VuZERpc3BhdGNoZXI6OiUoY29t
bWFuZE5hbWUpcyB9LCcgJSBhcmdzKQorICAgICAgICAgICAgY2FzZXMuYXBwZW5kKHNlbGYud3Jh
cF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oY29tbWFuZC5jb25kaXRpb24sICcgICAgICAgICAg
ICB7ICIlKGNvbW1hbmROYW1lKXMiLCAmJShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0Y2hlcjo6
JShjb21tYW5kTmFtZSlzIH0sJyAlIGFyZ3MpKQogCiAgICAgICAgIHN3aXRjaF9hcmdzID0gewog
ICAgICAgICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUsCkBAIC0xODUsNyAr
MTk3LDcgQEAgY2xhc3MgQ3BwQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRv
cihDcHBHZW5lcmF0b3IpOgogICAgICAgICAgICAgJ2Zvcm1hbFBhcmFtZXRlcnMnOiAiLCAiLmpv
aW4oZm9ybWFsX3BhcmFtZXRlcnMpLAogICAgICAgICAgICAgJ291dFBhcmFtZXRlckFzc2lnbm1l
bnRzJzogIlxuIi5qb2luKG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMpCiAgICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIFRlbXBsYXRlKENwcFRlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hlckltcGxl
bWVudGF0aW9uQXN5bmNDb21tYW5kKS5zdWJzdGl0dXRlKE5vbmUsICoqYXN5bmNfYXJncykKKyAg
ICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oY29tbWFuZC5j
b25kaXRpb24sIFRlbXBsYXRlKENwcFRlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVu
dGF0aW9uQXN5bmNDb21tYW5kKS5zdWJzdGl0dXRlKE5vbmUsICoqYXN5bmNfYXJncykpCiAKICAg
ICBkZWYgX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25fZm9yX2NvbW1hbmQoc2Vs
ZiwgY29tbWFuZCwgZG9tYWluKToKICAgICAgICAgaW5fcGFyYW1ldGVyX2RlY2xhcmF0aW9ucyA9
IFtdCkBAIC0zMDQsNyArMzE2LDcgQEAgY2xhc3MgQ3BwQmFja2VuZERpc3BhdGNoZXJJbXBsZW1l
bnRhdGlvbkdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCcgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+JShjb21tYW5kTmFtZSlzKCUoYWx0ZXJu
YXRlSW52b2NhdGlvblBhcmFtZXRlcnMpcyk7JyAlIGNvbW1hbmRfYXJncykKICAgICAgICAgICAg
IGxpbmVzLmFwcGVuZCgnICAgICAgICByZXR1cm47JykKICAgICAgICAgICAgIGxpbmVzLmFwcGVu
ZCgnICAgIH0nKQotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcjZW5kaWYnKQorICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKCcjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpJykKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKIAogICAgICAgICBpZiBj
b21tYW5kLmlzX2FzeW5jOgpAQCAtMzM0LDQgKzM0Niw0IEBAIGNsYXNzIENwcEJhY2tlbmREaXNw
YXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgICAg
IGxpbmVzLmFwcGVuZCgnICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2Nv
bEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOycp
CiAKICAgICAgICAgbGluZXMuYXBwZW5kKCd9JykKLSAgICAgICAgcmV0dXJuICJcbiIuam9pbihs
aW5lcykKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24o
Y29tbWFuZC5jb25kaXRpb24sICJcbiIuam9pbihsaW5lcykpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJv
bnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFk
ZXIucHkKaW5kZXggNWNmNzQ3ODU0MzMuLjExOWQyM2MzOGNkIDEwMDc1NQotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJv
bnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJf
aGVhZGVyLnB5CkBAIC0xMTEsNyArMTExLDcgQEAgY2xhc3MgQ3BwRnJvbnRlbmREaXNwYXRjaGVy
SGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgICAgICAnZXZlbnREZWNsYXJh
dGlvbnMnOiAiXG4iLmpvaW4oZXZlbnRfZGVjbGFyYXRpb25zKQogICAgICAgICB9CiAKLSAgICAg
ICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCBUZW1wbGF0
ZShDcHBUZW1wbGF0ZXMuRnJvbnRlbmREaXNwYXRjaGVyRG9tYWluRGlzcGF0Y2hlckRlY2xhcmF0
aW9uKS5zdWJzdGl0dXRlKE5vbmUsICoqaGFuZGxlcl9hcmdzKSkKKyAgICAgICAgcmV0dXJuIHNl
bGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZG9tYWluLmNvbmRpdGlvbiwgVGVtcGxh
dGUoQ3BwVGVtcGxhdGVzLkZyb250ZW5kRGlzcGF0Y2hlckRvbWFpbkRpc3BhdGNoZXJEZWNsYXJh
dGlvbikuc3Vic3RpdHV0ZShOb25lLCAqKmhhbmRsZXJfYXJncykpCiAKICAgICBkZWYgX2dlbmVy
YXRlX2Rpc3BhdGNoZXJfZGVjbGFyYXRpb25fZm9yX2V2ZW50KHNlbGYsIGV2ZW50LCBkb21haW4s
IHVzZWRfZW51bV9uYW1lcyk6CiAgICAgICAgIGZvcm1hbF9wYXJhbWV0ZXJzID0gW10KQEAgLTEy
Myw0ICsxMjMsNCBAQCBjbGFzcyBDcHBGcm9udGVuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3Io
Q3BwR2VuZXJhdG9yKToKICAgICAgICAgICAgICAgICB1c2VkX2VudW1fbmFtZXMuYWRkKHBhcmFt
ZXRlci5wYXJhbWV0ZXJfbmFtZSkKIAogICAgICAgICBsaW5lcy5hcHBlbmQoIiAgICB2b2lkICVz
KCVzKTsiICUgKGV2ZW50LmV2ZW50X25hbWUsICIsICIuam9pbihmb3JtYWxfcGFyYW1ldGVycykp
KQotICAgICAgICByZXR1cm4gIlxuIi5qb2luKGxpbmVzKQorICAgICAgICByZXR1cm4gc2VsZi53
cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihldmVudC5jb25kaXRpb24sICJcbiIuam9pbihs
aW5lcykpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlv
bi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dl
bmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CmluZGV4IDkw
NGQyMjdhNmU5Li42NmRjNmUxODVjZiAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNo
ZXJfaW1wbGVtZW50YXRpb24ucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVt
ZW50YXRpb24ucHkKQEAgLTgyLDcgKzgyLDcgQEAgY2xhc3MgQ3BwRnJvbnRlbmREaXNwYXRjaGVy
SW1wbGVtZW50YXRpb25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgZm9yIGV2ZW50
IGluIGV2ZW50czoKICAgICAgICAgICAgIGltcGxlbWVudGF0aW9ucy5hcHBlbmQoc2VsZi5fZ2Vu
ZXJhdGVfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbl9mb3JfZXZlbnQoZXZlbnQsIGRvbWFpbikp
CiAKLSAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWlu
LCAnXG5cbicuam9pbihpbXBsZW1lbnRhdGlvbnMpKQorICAgICAgICByZXR1cm4gc2VsZi53cmFw
X3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9uLCAnXG5cbicuam9pbihp
bXBsZW1lbnRhdGlvbnMpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9kaXNwYXRjaGVyX2ltcGxlbWVu
dGF0aW9uX2Zvcl9ldmVudChzZWxmLCBldmVudCwgZG9tYWluKToKICAgICAgICAgbGluZXMgPSBb
XQpAQCAtMTMxLDQgKzEzMSw0IEBAIGNsYXNzIENwcEZyb250ZW5kRGlzcGF0Y2hlckltcGxlbWVu
dGF0aW9uR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykK
ICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQoanNv
bk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsnKQogICAgICAgICBsaW5lcy5hcHBlbmQoJ30nKQot
ICAgICAgICByZXR1cm4gIlxuIi5qb2luKGxpbmVzKQorICAgICAgICByZXR1cm4gc2VsZi53cmFw
X3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihldmVudC5jb25kaXRpb24sICJcbiIuam9pbihsaW5l
cykpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaGVhZGVyLnB5IGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3Rv
Y29sX3R5cGVzX2hlYWRlci5weQppbmRleCA0MjNkN2EyMzAwOC4uOTlmNjAxYTdkOTIgMTAwNzU1
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dl
bmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19oZWFkZXIucHkKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5
cGVzX2hlYWRlci5weQpAQCAtMTA1LDcgKzEwNSw3IEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNI
ZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgICAgICAgICBkb21haW5fbGlu
ZXMuYXBwZW5kKCdzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFZFUlNJT04gPSAlczsnICUgdmVy
c2lvbikKIAogICAgICAgICAgICAgZG9tYWluX2xpbmVzLmFwcGVuZCgnfSAvLyAlcycgJSBkb21h
aW4uZG9tYWluX25hbWUpCi0gICAgICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi53cmFwX3dp
dGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4sICdcbicuam9pbihkb21haW5fbGluZXMpKSkKKyAg
ICAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0
aW9uKGRvbWFpbi5jb25kaXRpb24sICdcbicuam9pbihkb21haW5fbGluZXMpKSkKIAogICAgICAg
ICBpZiBsZW4oc2VjdGlvbnMpID09IDA6CiAgICAgICAgICAgICByZXR1cm4gJycKQEAgLTEzMiwx
MCArMTMyLDEwIEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNIZWFkZXJHZW5lcmF0b3IoQ3BwR2Vu
ZXJhdG9yKToKICAgICAgICAgICAgIGRvbWFpbl9saW5lcy5hcHBlbmQoJ25hbWVzcGFjZSAlcyB7
JyAlIGRvbWFpbi5kb21haW5fbmFtZSkKIAogICAgICAgICAgICAgIyBGb3J3YXJkLWRlY2xhcmUg
YWxsIGNsYXNzZXMgc28gdGhlIHR5cGUgYnVpbGRlcnMgd29uJ3QgYnJlYWsgaWYgcmVhcnJhbmdl
ZC4KLSAgICAgICAgICAgIGRvbWFpbl9saW5lcy5leHRlbmQoJ2NsYXNzICVzOycgJSBvYmplY3Rf
dHlwZS5yYXdfbmFtZSgpIGZvciBvYmplY3RfdHlwZSBpbiBvYmplY3RfdHlwZXMpCi0gICAgICAg
ICAgICBkb21haW5fbGluZXMuZXh0ZW5kKCdlbnVtIGNsYXNzICVzOycgJSBlbnVtX3R5cGUucmF3
X25hbWUoKSBmb3IgZW51bV90eXBlIGluIGVudW1fdHlwZXMpCisgICAgICAgICAgICBkb21haW5f
bGluZXMuZXh0ZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24ob2JqZWN0X3R5
cGUuZGVjbGFyYXRpb24oKS5jb25kaXRpb24sICdjbGFzcyAlczsnICUgb2JqZWN0X3R5cGUucmF3
X25hbWUoKSkgZm9yIG9iamVjdF90eXBlIGluIG9iamVjdF90eXBlcykKKyAgICAgICAgICAgIGRv
bWFpbl9saW5lcy5leHRlbmQoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihlbnVt
X3R5cGUuZGVjbGFyYXRpb24oKS5jb25kaXRpb24sICdlbnVtIGNsYXNzICVzOycgJSBlbnVtX3R5
cGUucmF3X25hbWUoKSkgZm9yIGVudW1fdHlwZSBpbiBlbnVtX3R5cGVzKQogICAgICAgICAgICAg
ZG9tYWluX2xpbmVzLmFwcGVuZCgnfSAvLyAlcycgJSBkb21haW4uZG9tYWluX25hbWUpCi0gICAg
ICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihk
b21haW4sICdcbicuam9pbihkb21haW5fbGluZXMpKSkKKyAgICAgICAgICAgIHNlY3Rpb25zLmFw
cGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRvbWFpbi5jb25kaXRpb24s
ICdcbicuam9pbihkb21haW5fbGluZXMpKSkKIAogICAgICAgICBpZiBsZW4oc2VjdGlvbnMpID09
IDA6CiAgICAgICAgICAgICByZXR1cm4gJycKQEAgLTE3MCw3ICsxNzAsNyBAQCBjbGFzcyBDcHBQ
cm90b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgICAgICBp
ZiBsZW4oZGVjbGFyYXRpb24uZGVzY3JpcHRpb24pID4gMDoKICAgICAgICAgICAgICAgICB0eXBl
ZGVmX2xpbmVzLmFwcGVuZCgnLyogJXMgKi8nICUgZGVjbGFyYXRpb24uZGVzY3JpcHRpb24pCiAg
ICAgICAgICAgICB0eXBlZGVmX2xpbmVzLmFwcGVuZCgndHlwZWRlZiAlcyAlczsnICUgKHByaW1p
dGl2ZV9uYW1lLCBkZWNsYXJhdGlvbi50eXBlX25hbWUpKQotICAgICAgICAgICAgc2VjdGlvbnMu
YXBwZW5kKCdcbicuam9pbih0eXBlZGVmX2xpbmVzKSkKKyAgICAgICAgICAgIHNlY3Rpb25zLmFw
cGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRlY2xhcmF0aW9uLmNvbmRp
dGlvbiwgJ1xuJy5qb2luKHR5cGVkZWZfbGluZXMpKSkKIAogICAgICAgICBmb3IgZGVjbGFyYXRp
b24gaW4gYXJyYXlfZGVjbGFyYXRpb25zOgogICAgICAgICAgICAgZWxlbWVudF90eXBlID0gQ3Bw
R2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKGRlY2xhcmF0aW9uLnR5cGUuZWxl
bWVudF90eXBlKQpAQCAtMTc4LDEzICsxNzgsMTMgQEAgY2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0hl
YWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICAgICAgaWYgbGVuKGRlY2xhcmF0
aW9uLmRlc2NyaXB0aW9uKSA+IDA6CiAgICAgICAgICAgICAgICAgdHlwZWRlZl9saW5lcy5hcHBl
bmQoJy8qICVzICovJyAlIGRlY2xhcmF0aW9uLmRlc2NyaXB0aW9uKQogICAgICAgICAgICAgdHlw
ZWRlZl9saW5lcy5hcHBlbmQoJ3R5cGVkZWYgSlNPTjo6QXJyYXlPZjwlcz4gJXM7JyAlIChlbGVt
ZW50X3R5cGUsIGRlY2xhcmF0aW9uLnR5cGVfbmFtZSkpCi0gICAgICAgICAgICBzZWN0aW9ucy5h
cHBlbmQoJ1xuJy5qb2luKHR5cGVkZWZfbGluZXMpKQorICAgICAgICAgICAgc2VjdGlvbnMuYXBw
ZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZGVjbGFyYXRpb24uY29uZGl0
aW9uLCAnXG4nLmpvaW4odHlwZWRlZl9saW5lcykpKQogCiAgICAgICAgIGxpbmVzID0gW10KICAg
ICAgICAgbGluZXMuYXBwZW5kKCduYW1lc3BhY2UgJXMgeycgJSBkb21haW4uZG9tYWluX25hbWUp
CiAgICAgICAgIGxpbmVzLmFwcGVuZCgnXG4nLmpvaW4oc2VjdGlvbnMpKQogICAgICAgICBsaW5l
cy5hcHBlbmQoJ30gLy8gJXMnICUgZG9tYWluLmRvbWFpbl9uYW1lKQotICAgICAgICByZXR1cm4g
c2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4sICdcbicuam9pbihsaW5lcykp
CisgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRvbWFp
bi5jb25kaXRpb24sICdcbicuam9pbihsaW5lcykpCiAKICAgICBkZWYgX2dlbmVyYXRlX2VudW1f
Y29uc3RhbnRfdmFsdWVfY29udmVyc2lvbl9tZXRob2RzKHNlbGYpOgogICAgICAgICBpZiBub3Qg
c2VsZi5hc3NpZ25lZF9lbnVtX3ZhbHVlcygpOgpAQCAtMjI1LDkgKzIyNSwxMSBAQCBjbGFzcyBD
cHBQcm90b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAKICAgICAgICAg
bGluZXMgPSBbXQogICAgICAgICBsaW5lcy5hcHBlbmQoJ25hbWVzcGFjZSAlcyB7JyAlIGRvbWFp
bi5kb21haW5fbmFtZSkKLSAgICAgICAgbGluZXMuYXBwZW5kKCdcbicuam9pbihzZWN0aW9ucykp
CisgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKKyAgICAgICAgbGluZXMuYXBwZW5kKCdcblxuJy5q
b2luKHNlY3Rpb25zKSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCcnKQogICAgICAgICBsaW5lcy5h
cHBlbmQoJ30gLy8gJXMnICUgZG9tYWluLmRvbWFpbl9uYW1lKQotICAgICAgICByZXR1cm4gc2Vs
Zi53cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4sICdcbicuam9pbihsaW5lcykpCisg
ICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRvbWFpbi5j
b25kaXRpb24sICdcbicuam9pbihsaW5lcykpCiAKICAgICBkZWYgX2dlbmVyYXRlX2NsYXNzX2Zv
cl9vYmplY3RfZGVjbGFyYXRpb24oc2VsZiwgdHlwZV9kZWNsYXJhdGlvbiwgZG9tYWluKToKICAg
ICAgICAgaWYgbGVuKHR5cGVfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzKSA9PSAwOgpAQCAtMjc4
LDE0ICsyODAsMTQgQEAgY2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0hlYWRlckdlbmVyYXRvcihDcHBH
ZW5lcmF0b3IpOgogICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICVzIHN0YXRpYyBj
b25zdCBjaGFyKiAlczsnICUgKGV4cG9ydF9tYWNybywgdWNmaXJzdCh0eXBlX21lbWJlci5tZW1i
ZXJfbmFtZSkpKQogCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnfTsnKQotICAgICAgICBsaW5lcy5h
cHBlbmQoJycpCi0gICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisgICAgICAgIHJldHVy
biBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKHR5cGVfZGVjbGFyYXRpb24uY29u
ZGl0aW9uLCAnXG4nLmpvaW4obGluZXMpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9zdHJ1Y3RfZm9y
X2VudW1fZGVjbGFyYXRpb24oc2VsZiwgZW51bV9kZWNsYXJhdGlvbik6CiAgICAgICAgIGxpbmVz
ID0gW10KLSAgICAgICAgbGluZXMuYXBwZW5kKCcvKiAlcyAqLycgJSBlbnVtX2RlY2xhcmF0aW9u
LmRlc2NyaXB0aW9uKQorICAgICAgICBpZiBsZW4oZW51bV9kZWNsYXJhdGlvbi5kZXNjcmlwdGlv
bik6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJy8qICVzICovJyAlIGVudW1fZGVjbGFyYXRp
b24uZGVzY3JpcHRpb24pCiAgICAgICAgIGxpbmVzLmV4dGVuZChzZWxmLl9nZW5lcmF0ZV9zdHJ1
Y3RfZm9yX2VudW1fdHlwZShlbnVtX2RlY2xhcmF0aW9uLnR5cGVfbmFtZSwgZW51bV9kZWNsYXJh
dGlvbi50eXBlKSkKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKyAgICAgICAgcmV0
dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZW51bV9kZWNsYXJhdGlvbi5j
b25kaXRpb24sICdcbicuam9pbihsaW5lcykpCiAKICAgICBkZWYgX2dlbmVyYXRlX3N0cnVjdF9m
b3JfYW5vbnltb3VzX2VudW1fbWVtYmVyKHNlbGYsIGVudW1fbWVtYmVyKToKICAgICAgICAgZGVm
IGFwcGx5X2luZGVudGF0aW9uKGxpbmUpOgpAQCAtMzgxLDEwICszODMsMTAgQEAgY2xhc3MgQ3Bw
UHJvdG9jb2xUeXBlc0hlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICAgICAg
Zm9yIHR5cGVfZGVjbGFyYXRpb24gaW4gZGVjbGFyYXRpb25zX3RvX2dlbmVyYXRlOgogICAgICAg
ICAgICAgICAgIGZvciB0eXBlX21lbWJlciBpbiB0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVy
czoKICAgICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh0eXBlX21lbWJlci50eXBlLCBF
bnVtVHlwZSk6Ci0gICAgICAgICAgICAgICAgICAgICAgICB0eXBlX2FyZ3VtZW50cy5hcHBlbmQo
KENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZV9tZW1iZXIodHlwZV9tZW1i
ZXIsIHR5cGVfZGVjbGFyYXRpb24pLCBGYWxzZSkpCisgICAgICAgICAgICAgICAgICAgICAgICB0
eXBlX2FyZ3VtZW50cy5hcHBlbmQoKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24o
dHlwZV9kZWNsYXJhdGlvbi5jb25kaXRpb24sIENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlw
ZV9mb3JfdHlwZV9tZW1iZXIodHlwZV9tZW1iZXIsIHR5cGVfZGVjbGFyYXRpb24pKSwgRmFsc2Up
KQogCiAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh0eXBlX2RlY2xhcmF0aW9uLnR5cGUs
IE9iamVjdFR5cGUpOgotICAgICAgICAgICAgICAgICAgICB0eXBlX2FyZ3VtZW50cy5hcHBlbmQo
KENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZSh0eXBlX2RlY2xhcmF0aW9u
LnR5cGUpLCBHZW5lcmF0b3IudHlwZV9uZWVkc19ydW50aW1lX2Nhc3RzKHR5cGVfZGVjbGFyYXRp
b24udHlwZSkpKQorICAgICAgICAgICAgICAgICAgICB0eXBlX2FyZ3VtZW50cy5hcHBlbmQoKHNl
bGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24odHlwZV9kZWNsYXJhdGlvbi5jb25kaXRp
b24sIENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZSh0eXBlX2RlY2xhcmF0
aW9uLnR5cGUpKSwgR2VuZXJhdG9yLnR5cGVfbmVlZHNfcnVudGltZV9jYXN0cyh0eXBlX2RlY2xh
cmF0aW9uLnR5cGUpKSkKIAogICAgICAgICBzdHJ1Y3Rfa2V5d29yZHMgPSBbJ3N0cnVjdCddCiAg
ICAgICAgIGZ1bmN0aW9uX2tleXdvcmRzID0gWydzdGF0aWMgdm9pZCddCkBAIC00MzcsMTkgKzQz
OSwyMCBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRv
cik6CiAgICAgICAgICAgICBkb21haW5fbGluZXMuYXBwZW5kKCIvLyBFbnVtcyBpbiB0aGUgJyVz
JyBEb21haW4iICUgZG9tYWluLmRvbWFpbl9uYW1lKQogICAgICAgICAgICAgZm9yIGVudW1fdHlw
ZSBpbiBlbnVtX3R5cGVzOgogICAgICAgICAgICAgICAgIGNwcF9wcm90b2NvbF90eXBlID0gQ3Bw
R2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKGVudW1fdHlwZSkKLSAgICAgICAg
ICAgICAgICBkb21haW5fbGluZXMuYXBwZW5kKCd0ZW1wbGF0ZTw+JykKLSAgICAgICAgICAgICAg
ICBkb21haW5fbGluZXMuYXBwZW5kKCclcyBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8JXM+KGNv
bnN0IFN0cmluZyYpOycgJSAocmV0dXJuX3R5cGVfd2l0aF9leHBvcnRfbWFjcm8oY3BwX3Byb3Rv
Y29sX3R5cGUpLCBjcHBfcHJvdG9jb2xfdHlwZSkpCisgICAgICAgICAgICAgICAgZG9tYWluX2xp
bmVzLmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGVudW1fdHlwZS5k
ZWNsYXJhdGlvbigpLmNvbmRpdGlvbiwgJ3RlbXBsYXRlPD5cbiVzIHBhcnNlRW51bVZhbHVlRnJv
bVN0cmluZzwlcz4oY29uc3QgU3RyaW5nJik7JyAlIChyZXR1cm5fdHlwZV93aXRoX2V4cG9ydF9t
YWNybyhjcHBfcHJvdG9jb2xfdHlwZSksIGNwcF9wcm90b2NvbF90eXBlKSkpCiAKICAgICAgICAg
ICAgIGZvciBvYmplY3RfdHlwZSBpbiBvYmplY3RfdHlwZXM6CisgICAgICAgICAgICAgICAgb2Jq
ZWN0X2xpbmVzID0gW10KICAgICAgICAgICAgICAgICBmb3IgZW51bV9tZW1iZXIgaW4gZmlsdGVy
KHR5cGVfbWVtYmVyX2lzX2Fub255bW91c19lbnVtX3R5cGUsIG9iamVjdF90eXBlLm1lbWJlcnMp
OgogICAgICAgICAgICAgICAgICAgICBjcHBfcHJvdG9jb2xfdHlwZSA9IENwcEdlbmVyYXRvci5j
cHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZV9tZW1iZXIoZW51bV9tZW1iZXIsIG9iamVjdF90eXBl
LmRlY2xhcmF0aW9uKCkpCi0gICAgICAgICAgICAgICAgICAgIGRvbWFpbl9saW5lcy5hcHBlbmQo
J3RlbXBsYXRlPD4nKQotICAgICAgICAgICAgICAgICAgICBkb21haW5fbGluZXMuYXBwZW5kKCcl
cyBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8JXM+KGNvbnN0IFN0cmluZyYpOycgJSAocmV0dXJu
X3R5cGVfd2l0aF9leHBvcnRfbWFjcm8oY3BwX3Byb3RvY29sX3R5cGUpLCBjcHBfcHJvdG9jb2xf
dHlwZSkpCisgICAgICAgICAgICAgICAgICAgIG9iamVjdF9saW5lcy5hcHBlbmQoJ3RlbXBsYXRl
PD5cbiVzIHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzwlcz4oY29uc3QgU3RyaW5nJik7JyAlIChy
ZXR1cm5fdHlwZV93aXRoX2V4cG9ydF9tYWNybyhjcHBfcHJvdG9jb2xfdHlwZSksIGNwcF9wcm90
b2NvbF90eXBlKSkKKyAgICAgICAgICAgICAgICBpZiBsZW4ob2JqZWN0X2xpbmVzKToKKyAgICAg
ICAgICAgICAgICAgICAgZG9tYWluX2xpbmVzLmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9m
b3JfY29uZGl0aW9uKG9iamVjdF90eXBlLmRlY2xhcmF0aW9uKCkuY29uZGl0aW9uLCAnXG4nLmpv
aW4ob2JqZWN0X2xpbmVzKSkpCiAKICAgICAgICAgICAgIGlmIGxlbihkb21haW5fbGluZXMpID09
IDE6CiAgICAgICAgICAgICAgICAgY29udGludWUgICMgTm8gcmVhbCBkZWNsYXJhdGlvbnMgdG8g
ZW1pdCwganVzdCB0aGUgZG9tYWluIGNvbW1lbnQuIFNraXAuCiAKLSAgICAgICAgICAgIHNlY3Rp
b25zLmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgJ1xuJy5q
b2luKGRvbWFpbl9saW5lcykpKQorICAgICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYud3Jh
cF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZG9tYWluLmNvbmRpdGlvbiwgJ1xuJy5qb2luKGRv
bWFpbl9saW5lcykpKQogCiAgICAgICAgIGlmIGxlbihzZWN0aW9ucykgPT0gMToKICAgICAgICAg
ICAgIHJldHVybiBbXSAjIE5vIHJlYWwgc2VjdGlvbnMgdG8gZW1pdCwganVzdCB0aGUgbmFtZXNw
YWNlIGFuZCB0ZW1wbGF0ZSBkZWNsYXJhdGlvbi4gU2tpcC4KQEAgLTQ3NCwxNCArNDc3LDIwIEBA
IGNsYXNzIENwcFByb3RvY29sVHlwZXNIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAg
ICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycpCiAgICAgICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKCd0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7JykKIAotICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKCcnKQotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCIvLyBIYXNo
IGRlY2xhcmF0aW9ucyBpbiB0aGUgJyVzJyBEb21haW4iICUgZG9tYWluLmRvbWFpbl9uYW1lKQor
ICAgICAgICAgICAgZG9tYWluX2xpbmVzID0gW10KKworICAgICAgICAgICAgZG9tYWluX2xpbmVz
LmFwcGVuZCgnJykKKyAgICAgICAgICAgIGRvbWFpbl9saW5lcy5hcHBlbmQoIi8vIEhhc2ggZGVj
bGFyYXRpb25zIGluIHRoZSAnJXMnIERvbWFpbiIgJSBkb21haW4uZG9tYWluX25hbWUpCiAKICAg
ICAgICAgICAgIGZvciBlbnVtX3R5cGUgaW4gZW51bV90eXBlczoKLSAgICAgICAgICAgICAgICBs
aW5lcy5hcHBlbmQoJ3RlbXBsYXRlPD4nKQotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgn
c3RydWN0IERlZmF1bHRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OiVzOjolcz4geycgJSAoZG9t
YWluLmRvbWFpbl9uYW1lLCBlbnVtX3R5cGUucmF3X25hbWUoKSkpCi0gICAgICAgICAgICAgICAg
bGluZXMuYXBwZW5kKCcgICAgdHlwZWRlZiBJbnRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OiVz
Ojolcz4gSGFzaDsnICUgKGRvbWFpbi5kb21haW5fbmFtZSwgZW51bV90eXBlLnJhd19uYW1lKCkp
KQotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnfTsnKQorICAgICAgICAgICAgICAgIGVu
dW1fbGluZXMgPSBbXQorICAgICAgICAgICAgICAgIGVudW1fbGluZXMuYXBwZW5kKCd0ZW1wbGF0
ZTw+JykKKyAgICAgICAgICAgICAgICBlbnVtX2xpbmVzLmFwcGVuZCgnc3RydWN0IERlZmF1bHRI
YXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OiVzOjolcz4geycgJSAoZG9tYWluLmRvbWFpbl9uYW1l
LCBlbnVtX3R5cGUucmF3X25hbWUoKSkpCisgICAgICAgICAgICAgICAgZW51bV9saW5lcy5hcHBl
bmQoJyAgICB0eXBlZGVmIEludEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6JXM6OiVzPiBIYXNo
OycgJSAoZG9tYWluLmRvbWFpbl9uYW1lLCBlbnVtX3R5cGUucmF3X25hbWUoKSkpCisgICAgICAg
ICAgICAgICAgZW51bV9saW5lcy5hcHBlbmQoJ307JykKKyAgICAgICAgICAgICAgICBkb21haW5f
bGluZXMuYXBwZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZW51bV90eXBl
LmRlY2xhcmF0aW9uKCkuY29uZGl0aW9uLCAnXG4nLmpvaW4oZW51bV9saW5lcykpKQorCisgICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihk
b21haW4uY29uZGl0aW9uLCAnXG4nLmpvaW4oZG9tYWluX2xpbmVzKSkpCiAKICAgICAgICAgaWYg
bGVuKGxpbmVzKSA9PSAwOgogICAgICAgICAgICAgcmV0dXJuIFtdCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBf
cHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaW1w
bGVtZW50YXRpb24ucHkKaW5kZXggNjVjZWJmNTgzZWUuLjRkODVhZmI5MzFhIDEwMDc1NQotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29s
X3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5CkBAIC0xMjgsOSArMTI4LDggQEAgY2xhc3MgQ3BwUHJv
dG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAg
ICAgICAgICAgJycsCiAgICAgICAgICAgICAgICAgJyAgICByZXR1cm4gV1RGOjpudWxsb3B0Oycs
CiAgICAgICAgICAgICAgICAgJ30nLAotICAgICAgICAgICAgICAgICcnLAogICAgICAgICAgICAg
XSkKLSAgICAgICAgICAgIHJldHVybiBib2R5X2xpbmVzCisgICAgICAgICAgICByZXR1cm4gJ1xu
Jy5qb2luKGJvZHlfbGluZXMpCiAKICAgICAgICAgdHlwZV9kZWNsYXJhdGlvbnMgPSBzZWxmLnR5
cGVfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4oZG9tYWluKQogICAgICAgICBkZWNsYXJhdGlvbl90
eXBlcyA9IFtkZWNsLnR5cGUgZm9yIGRlY2wgaW4gdHlwZV9kZWNsYXJhdGlvbnNdCkBAIC0xNDYs
MTcgKzE0NSwyMyBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0
b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgbGluZXMuYXBwZW5kKCIvLyBFbnVtcyBpbiB0aGUg
JyVzJyBEb21haW4iICUgZG9tYWluLmRvbWFpbl9uYW1lKQogICAgICAgICBmb3IgZW51bV90eXBl
IGluIGVudW1fdHlwZXM6CiAgICAgICAgICAgICBjcHBfcHJvdG9jb2xfdHlwZSA9IENwcEdlbmVy
YXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShlbnVtX3R5cGUpCi0gICAgICAgICAgICBs
aW5lcy5leHRlbmQoZ2VuZXJhdGVfY29udmVyc2lvbl9tZXRob2RfYm9keShlbnVtX3R5cGUsIGNw
cF9wcm90b2NvbF90eXBlKSkKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKKyAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGVudW1f
dHlwZS5kZWNsYXJhdGlvbigpLmNvbmRpdGlvbiwgZ2VuZXJhdGVfY29udmVyc2lvbl9tZXRob2Rf
Ym9keShlbnVtX3R5cGUsIGNwcF9wcm90b2NvbF90eXBlKSkpCiAKICAgICAgICAgZm9yIG9iamVj
dF90eXBlIGluIG9iamVjdF90eXBlczoKKyAgICAgICAgICAgIG9iamVjdF9saW5lcyA9IFtdCiAg
ICAgICAgICAgICBmb3IgZW51bV9tZW1iZXIgaW4gZmlsdGVyKHR5cGVfbWVtYmVyX2lzX2Fub255
bW91c19lbnVtX3R5cGUsIG9iamVjdF90eXBlLm1lbWJlcnMpOgogICAgICAgICAgICAgICAgIGNw
cF9wcm90b2NvbF90eXBlID0gQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBl
X21lbWJlcihlbnVtX21lbWJlciwgb2JqZWN0X3R5cGUuZGVjbGFyYXRpb24oKSkKLSAgICAgICAg
ICAgICAgICBsaW5lcy5leHRlbmQoZ2VuZXJhdGVfY29udmVyc2lvbl9tZXRob2RfYm9keShlbnVt
X21lbWJlci50eXBlLCBjcHBfcHJvdG9jb2xfdHlwZSkpCisgICAgICAgICAgICAgICAgb2JqZWN0
X2xpbmVzLmFwcGVuZChnZW5lcmF0ZV9jb252ZXJzaW9uX21ldGhvZF9ib2R5KGVudW1fbWVtYmVy
LnR5cGUsIGNwcF9wcm90b2NvbF90eXBlKSkKKyAgICAgICAgICAgIGlmIGxlbihvYmplY3RfbGlu
ZXMpOgorICAgICAgICAgICAgICAgIGlmIGxlbihsaW5lcyk6CisgICAgICAgICAgICAgICAgICAg
IGxpbmVzLmFwcGVuZCgnJykKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi53cmFw
X3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihvYmplY3RfdHlwZS5kZWNsYXJhdGlvbigpLmNvbmRp
dGlvbiwgJ1xuJy5qb2luKG9iamVjdF9saW5lcykpKQogCiAgICAgICAgIGlmIGxlbihsaW5lcykg
PT0gMToKICAgICAgICAgICAgIHJldHVybiAnJyAgIyBObyByZWFsIGRlY2xhcmF0aW9ucyB0byBl
bWl0LCBqdXN0IHRoZSBkb21haW4gY29tbWVudC4KIAotICAgICAgICByZXR1cm4gc2VsZi53cmFw
X3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4sICdcbicuam9pbihsaW5lcykpCisgICAgICAg
IHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRvbWFpbi5jb25kaXRp
b24sICdcbicuam9pbihsaW5lcykpCiAKICAgICBkZWYgX2dlbmVyYXRlX2VudW1fbWFwcGluZ19h
bmRfY29udmVyc2lvbl9tZXRob2RzKHNlbGYsIGRvbWFpbnMpOgogICAgICAgICBzZWN0aW9ucyA9
IFtdCkBAIC0xNzMsMTIgKzE3OCwxNSBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVzSW1wbGVtZW50
YXRpb25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICBkZWYgX2dlbmVyYXRlX29wZW5fZmll
bGRfbmFtZXMoc2VsZik6CiAgICAgICAgIGxpbmVzID0gW10KICAgICAgICAgZm9yIGRvbWFpbiBp
biBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKToKKyAgICAgICAgICAgIGRvbWFpbl9saW5lcyA9
IFtdCiAgICAgICAgICAgICB0eXBlX2RlY2xhcmF0aW9ucyA9IHNlbGYudHlwZV9kZWNsYXJhdGlv
bnNfZm9yX2RvbWFpbihkb21haW4pCiAgICAgICAgICAgICBmb3IgdHlwZV9kZWNsYXJhdGlvbiBp
biBbZGVjbCBmb3IgZGVjbCBpbiB0eXBlX2RlY2xhcmF0aW9ucyBpZiBHZW5lcmF0b3IudHlwZV9o
YXNfb3Blbl9maWVsZHMoZGVjbC50eXBlKV06CiAgICAgICAgICAgICAgICAgb3Blbl9tZW1iZXJz
ID0gR2VuZXJhdG9yLm9wZW5fZmllbGRzKHR5cGVfZGVjbGFyYXRpb24pCiAgICAgICAgICAgICAg
ICAgZm9yIHR5cGVfbWVtYmVyIGluIHNvcnRlZChvcGVuX21lbWJlcnMsIGtleT1sYW1iZGEgbWVt
YmVyOiBtZW1iZXIubWVtYmVyX25hbWUpOgogICAgICAgICAgICAgICAgICAgICBmaWVsZF9uYW1l
ID0gJzo6Jy5qb2luKFsnSW5zcGVjdG9yJywgJ1Byb3RvY29sJywgZG9tYWluLmRvbWFpbl9uYW1l
LCB1Y2ZpcnN0KHR5cGVfZGVjbGFyYXRpb24udHlwZV9uYW1lKSwgdWNmaXJzdCh0eXBlX21lbWJl
ci5tZW1iZXJfbmFtZSldKQotICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ2NvbnN0
IGNoYXIqICVzID0gIiVzIjsnICUgKGZpZWxkX25hbWUsIHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1l
KSkKKyAgICAgICAgICAgICAgICAgICAgZG9tYWluX2xpbmVzLmFwcGVuZCgnY29uc3QgY2hhciog
JXMgPSAiJXMiOycgJSAoZmllbGRfbmFtZSwgdHlwZV9tZW1iZXIubWVtYmVyX25hbWUpKQorICAg
ICAgICAgICAgaWYgbGVuKGRvbWFpbl9saW5lcyk6CisgICAgICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZG9tYWluLmNvbmRpdGlvbiwg
J1xuJy5qb2luKGRvbWFpbl9saW5lcykpKQogCiAgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGlu
ZXMpCiAKQEAgLTE4OCwxNiArMTk2LDIyIEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNJbXBsZW1l
bnRhdGlvbkdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICBkZWNsYXJhdGlvbnNfdG9f
Z2VuZXJhdGUgPSBbZGVjbCBmb3IgZGVjbCBpbiB0eXBlX2RlY2xhcmF0aW9ucyBpZiBzZWxmLnR5
cGVfbmVlZHNfc2hhcGVfYXNzZXJ0aW9ucyhkZWNsLnR5cGUpXQogCiAgICAgICAgIGZvciB0eXBl
X2RlY2xhcmF0aW9uIGluIGRlY2xhcmF0aW9uc190b19nZW5lcmF0ZToKKyAgICAgICAgICAgIHR5
cGVfbGluZXMgPSBbXQogICAgICAgICAgICAgZm9yIHR5cGVfbWVtYmVyIGluIHR5cGVfZGVjbGFy
YXRpb24udHlwZV9tZW1iZXJzOgogICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodHlwZV9t
ZW1iZXIudHlwZSwgRW51bVR5cGUpOgotICAgICAgICAgICAgICAgICAgICBzZWN0aW9ucy5hcHBl
bmQoc2VsZi5fZ2VuZXJhdGVfYXNzZXJ0aW9uX2Zvcl9lbnVtKHR5cGVfbWVtYmVyLCB0eXBlX2Rl
Y2xhcmF0aW9uKSkKKyAgICAgICAgICAgICAgICAgICAgdHlwZV9saW5lcy5hcHBlbmQoc2VsZi5f
Z2VuZXJhdGVfYXNzZXJ0aW9uX2Zvcl9lbnVtKHR5cGVfbWVtYmVyLCB0eXBlX2RlY2xhcmF0aW9u
KSkKIAogICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh0eXBlX2RlY2xhcmF0aW9uLnR5cGUsIE9i
amVjdFR5cGUpOgotICAgICAgICAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0
ZV9hc3NlcnRpb25fZm9yX29iamVjdF9kZWNsYXJhdGlvbih0eXBlX2RlY2xhcmF0aW9uKSkKKyAg
ICAgICAgICAgICAgICB0eXBlX2xpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hc3NlcnRpb25f
Zm9yX29iamVjdF9kZWNsYXJhdGlvbih0eXBlX2RlY2xhcmF0aW9uKSkKICAgICAgICAgICAgICAg
ICBpZiBHZW5lcmF0b3IudHlwZV9uZWVkc19ydW50aW1lX2Nhc3RzKHR5cGVfZGVjbGFyYXRpb24u
dHlwZSk6Ci0gICAgICAgICAgICAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0
ZV9ydW50aW1lX2Nhc3RfZm9yX29iamVjdF9kZWNsYXJhdGlvbih0eXBlX2RlY2xhcmF0aW9uKSkK
KyAgICAgICAgICAgICAgICAgICAgdHlwZV9saW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfcnVu
dGltZV9jYXN0X2Zvcl9vYmplY3RfZGVjbGFyYXRpb24odHlwZV9kZWNsYXJhdGlvbikpCisgICAg
ICAgICAgICBpZiBsZW4odHlwZV9saW5lcyk6CisgICAgICAgICAgICAgICAgc2VjdGlvbnMuYXBw
ZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24odHlwZV9kZWNsYXJhdGlvbi5j
b25kaXRpb24sICdcblxuJy5qb2luKHR5cGVfbGluZXMpKSkKIAotICAgICAgICByZXR1cm4gJ1xu
XG4nLmpvaW4oc2VjdGlvbnMpCisgICAgICAgIGlmIG5vdCBsZW4oc2VjdGlvbnMpOgorICAgICAg
ICAgICAgcmV0dXJuICcnOworCisgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9m
b3JfY29uZGl0aW9uKGRvbWFpbi5jb25kaXRpb24sICdcblxuJy5qb2luKHNlY3Rpb25zKSkKIAog
ICAgIGRlZiBfZ2VuZXJhdGVfcnVudGltZV9jYXN0X2Zvcl9vYmplY3RfZGVjbGFyYXRpb24oc2Vs
Ziwgb2JqZWN0X2RlY2xhcmF0aW9uKToKICAgICAgICAgYXJncyA9IHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2pz
X2JhY2tlbmRfY29tbWFuZHMucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9qc19iYWNrZW5kX2NvbW1hbmRzLnB5CmluZGV4IGJiZjc2
ZjkyOTExLi5lYTZmZmZiMjIzOCAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfanNfYmFja2VuZF9jb21tYW5kcy5weQor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0ZV9qc19iYWNrZW5kX2NvbW1hbmRzLnB5CkBAIC00Nyw3ICs0Nyw3IEBAIGNsYXNzIEpTQmFj
a2VuZENvbW1hbmRzR2VuZXJhdG9yKEdlbmVyYXRvcik6CiAgICAgICAgIEdlbmVyYXRvci5fX2lu
aXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpCiAKICAgICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNl
bGYpOgotICAgICAgICByZXR1cm4gIkluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcyIKKyAgICAg
ICAgcmV0dXJuICJJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMuaW4iCiAKICAgICBkZWYgc2hv
dWxkX2dlbmVyYXRlX2RvbWFpbihzZWxmLCBkb21haW4pOgogICAgICAgICB0eXBlX2RlY2xhcmF0
aW9ucyA9IHNlbGYudHlwZV9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbihkb21haW4pCkBAIC05Niw3
ICs5Niw3IEBAIGNsYXNzIEpTQmFja2VuZENvbW1hbmRzR2VuZXJhdG9yKEdlbmVyYXRvcik6CiAg
ICAgICAgICAgICAgICAgICAgICdlbnVtTmFtZSc6IGRlY2xhcmF0aW9uLnR5cGVfbmFtZSwKICAg
ICAgICAgICAgICAgICAgICAgJ2VudW1NYXAnOiAiLCAiLmpvaW4oWyclczogIiVzIicgJSAoR2Vu
ZXJhdG9yLnN0eWxpemVkX25hbWVfZm9yX2VudW1fdmFsdWUoZW51bV92YWx1ZSksIGVudW1fdmFs
dWUpIGZvciBlbnVtX3ZhbHVlIGluIGRlY2xhcmF0aW9uLnR5cGUuZW51bV92YWx1ZXMoKV0pCiAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnSW5zcGVjdG9y
QmFja2VuZC5yZWdpc3RlckVudW0oIiUoZG9tYWluTmFtZSlzLiUoZW51bU5hbWUpcyIsIHslKGVu
dW1NYXApc30pOycgJSBlbnVtX2FyZ3MpCisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNl
bGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZGVjbGFyYXRpb24uY29uZGl0aW9uLCAn
SW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIiUoZG9tYWluTmFtZSlzLiUoZW51bU5hbWUp
cyIsIHslKGVudW1NYXApc30pOycgJSBlbnVtX2FyZ3MpKQogCiAgICAgICAgICAgICBkZWYgaXNf
YW5vbnltb3VzX2VudW1fbWVtYmVyKHR5cGVfbWVtYmVyKToKICAgICAgICAgICAgICAgICByZXR1
cm4gaXNpbnN0YW5jZSh0eXBlX21lbWJlci50eXBlLCBFbnVtVHlwZSkgYW5kIHR5cGVfbWVtYmVy
LnR5cGUuaXNfYW5vbnltb3VzCkBAIC0xMjgsMTYgKzEyOCwxOCBAQCBjbGFzcyBKU0JhY2tlbmRD
b21tYW5kc0dlbmVyYXRvcihHZW5lcmF0b3IpOgogICAgICAgICAgICAgICAgICdjYWxsUGFyYW1z
JzogIiwgIi5qb2luKFtnZW5lcmF0ZV9wYXJhbWV0ZXJfb2JqZWN0KHBhcmFtZXRlcikgZm9yIHBh
cmFtZXRlciBpbiBjb21tYW5kLmNhbGxfcGFyYW1ldGVyc10pLAogICAgICAgICAgICAgICAgICdy
ZXR1cm5QYXJhbXMnOiAiLCAiLmpvaW4oWyciJXMiJyAlIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFt
ZSBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnNdKSwKICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnSW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rl
ckNvbW1hbmQoIiUoZG9tYWluTmFtZSlzLiUoY29tbWFuZE5hbWUpcyIsICUodGFyZ2V0VHlwZXMp
cywgWyUoY2FsbFBhcmFtcylzXSwgWyUocmV0dXJuUGFyYW1zKXNdKTsnICUgY29tbWFuZF9hcmdz
KQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25k
aXRpb24oY29tbWFuZC5jb25kaXRpb24sICdJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFu
ZCgiJShkb21haW5OYW1lKXMuJShjb21tYW5kTmFtZSlzIiwgJSh0YXJnZXRUeXBlcylzLCBbJShj
YWxsUGFyYW1zKXNdLCBbJShyZXR1cm5QYXJhbXMpc10pOycgJSBjb21tYW5kX2FyZ3MpKQogCiAg
ICAgICAgIGZvciBldmVudCBpbiBldmVudHM6CisgICAgICAgICAgICBldmVudF9saW5lcyA9IFtd
CisKICAgICAgICAgICAgIGZvciBwYXJhbSBpbiBmaWx0ZXIoaXNfYW5vbnltb3VzX2VudW1fcGFy
YW0sIGV2ZW50LmV2ZW50X3BhcmFtZXRlcnMpOgogICAgICAgICAgICAgICAgIGVudW1fYXJncyA9
IHsKICAgICAgICAgICAgICAgICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUs
CiAgICAgICAgICAgICAgICAgICAgICdlbnVtTmFtZSc6ICclcyVzJyAlICh1Y2ZpcnN0KGV2ZW50
LmV2ZW50X25hbWUpLCB1Y2ZpcnN0KHBhcmFtLnBhcmFtZXRlcl9uYW1lKSksCiAgICAgICAgICAg
ICAgICAgICAgICdlbnVtTWFwJzogIiwgIi5qb2luKFsnJXM6ICIlcyInICUgKEdlbmVyYXRvci5z
dHlsaXplZF9uYW1lX2Zvcl9lbnVtX3ZhbHVlKGVudW1fdmFsdWUpLCBlbnVtX3ZhbHVlKSBmb3Ig
ZW51bV92YWx1ZSBpbiBwYXJhbS50eXBlLmVudW1fdmFsdWVzKCldKSwKICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdJbnNwZWN0b3JCYWNrZW5kLnJlZ2lz
dGVyRW51bSgiJShkb21haW5OYW1lKXMuJShlbnVtTmFtZSlzIiwgeyUoZW51bU1hcClzfSk7JyAl
IGVudW1fYXJncykKKyAgICAgICAgICAgICAgICBldmVudF9saW5lcy5hcHBlbmQoJ0luc3BlY3Rv
ckJhY2tlbmQucmVnaXN0ZXJFbnVtKCIlKGRvbWFpbk5hbWUpcy4lKGVudW1OYW1lKXMiLCB7JShl
bnVtTWFwKXN9KTsnICUgZW51bV9hcmdzKQogCiAgICAgICAgICAgICBldmVudF9hcmdzID0gewog
ICAgICAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLApAQCAtMTQ1
LDcgKzE0Nyw5IEBAIGNsYXNzIEpTQmFja2VuZENvbW1hbmRzR2VuZXJhdG9yKEdlbmVyYXRvcik6
CiAgICAgICAgICAgICAgICAgJ3RhcmdldFR5cGVzJzoganNvbi5kdW1wcyhldmVudC50YXJnZXRf
dHlwZXMpLAogICAgICAgICAgICAgICAgICdwYXJhbXMnOiAiLCAiLmpvaW4oWyciJXMiJyAlIHBh
cmFtZXRlci5wYXJhbWV0ZXJfbmFtZSBmb3IgcGFyYW1ldGVyIGluIGV2ZW50LmV2ZW50X3BhcmFt
ZXRlcnNdKSwKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnSW5zcGVj
dG9yQmFja2VuZC5yZWdpc3RlckV2ZW50KCIlKGRvbWFpbk5hbWUpcy4lKGV2ZW50TmFtZSlzIiwg
JSh0YXJnZXRUeXBlcylzLCBbJShwYXJhbXMpc10pOycgJSBldmVudF9hcmdzKQorICAgICAgICAg
ICAgZXZlbnRfbGluZXMuYXBwZW5kKCdJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnQoIiUo
ZG9tYWluTmFtZSlzLiUoZXZlbnROYW1lKXMiLCAlKHRhcmdldFR5cGVzKXMsIFslKHBhcmFtcylz
XSk7JyAlIGV2ZW50X2FyZ3MpCisKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLndyYXBf
d2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGV2ZW50LmNvbmRpdGlvbiwgJ1xuJy5qb2luKGV2ZW50
X2xpbmVzKSkpCiAKICAgICAgICAgaGFzX2FzeW5jX2NvbW1hbmRzID0gYW55KFtjb21tYW5kLmlz
X2FzeW5jIGZvciBjb21tYW5kIGluIGNvbW1hbmRzXSkKICAgICAgICAgaWYgbGVuKGV2ZW50cykg
PiAwIG9yIGhhc19hc3luY19jb21tYW5kczoKQEAgLTE2MCw0ICsxNjQsNCBAQCBjbGFzcyBKU0Jh
Y2tlbmRDb21tYW5kc0dlbmVyYXRvcihHZW5lcmF0b3IpOgogICAgICAgICB9CiAgICAgICAgIGxp
bmVzLmFwcGVuZCgnSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiJShkb21haW5OYW1l
KXMiLCAlKGRlYnVnZ2FibGVUeXBlcylzKTsnICUgYWN0aXZhdGVfYXJncykKIAotICAgICAgICBy
ZXR1cm4gIlxuIi5qb2luKGxpbmVzKQorICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3Vh
cmRfZm9yX2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9uLCAiXG4iLmpvaW4obGluZXMpKQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5k
X2Rpc3BhdGNoZXJfaGVhZGVyLnB5CmluZGV4IGVkOGNjNTk2ZDMxLi5lYTJmYzExMjc0ZSAxMDA3
NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfYmFj
a2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQpAQCAtOTksNyArOTksNyBAQCBjbGFzcyBPYmpDQmFj
a2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgICAgICAg
ICAnb2JqY1ByZWZpeCc6IHNlbGYub2JqY19wcmVmaXgoKSwKICAgICAgICAgfQogCi0gICAgICAg
IHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgVGVtcGxhdGUo
T2JqQ1RlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hlckhlYWRlckRvbWFpbkhhbmRsZXJPYmpDRGVj
bGFyYXRpb24pLnN1YnN0aXR1dGUoTm9uZSwgKipoYW5kbGVyX2FyZ3MpKQorICAgICAgICByZXR1
cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9uLCBU
ZW1wbGF0ZShPYmpDVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVySGVhZGVyRG9tYWluSGFuZGxl
ck9iakNEZWNsYXJhdGlvbikuc3Vic3RpdHV0ZShOb25lLCAqKmhhbmRsZXJfYXJncykpCiAKICAg
ICBkZWYgX2dlbmVyYXRlX29iamNfaGFuZGxlcl9kZWNsYXJhdGlvbl9mb3JfY29tbWFuZChzZWxm
LCBjb21tYW5kKToKICAgICAgICAgbGluZXMgPSBbXQpAQCAtMTEyLDQgKzExMiw0IEBAIGNsYXNz
IE9iakNCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKICAg
ICAgICAgICAgICdwYXJhbWV0ZXJzJzogJywgJy5qb2luKHBhcmFtZXRlcnMpLAogICAgICAgICB9
CiAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHZvaWQgJShjb21tYW5kTmFtZSlzKCUocGFyYW1l
dGVycylzKSBmaW5hbDsnICUgY29tbWFuZF9hcmdzKQotICAgICAgICByZXR1cm4gJ1xuJy5qb2lu
KGxpbmVzKQorICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlv
bihjb21tYW5kLmNvbmRpdGlvbiwgJ1xuJy5qb2luKGxpbmVzKSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNf
YmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5IGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3Bh
dGNoZXJfaW1wbGVtZW50YXRpb24ucHkKaW5kZXggYTFiOWUxNzk3MDUuLmY1ZWU4ZTU4Mzk4IDEw
MDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQpAQCAtODYsNyArODYs
NyBAQCBjbGFzcyBPYmpDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihP
YmpDR2VuZXJhdG9yKToKICAgICAgICAgZm9yIGNvbW1hbmQgaW4gY29tbWFuZHM6CiAgICAgICAg
ICAgICBjb21tYW5kX2RlY2xhcmF0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfaGFuZGxlcl9p
bXBsZW1lbnRhdGlvbl9mb3JfY29tbWFuZChkb21haW4sIGNvbW1hbmQpKQogCi0gICAgICAgIHJl
dHVybiAnXG4nLmpvaW4oY29tbWFuZF9kZWNsYXJhdGlvbnMpCisgICAgICAgIHJldHVybiBzZWxm
LndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRvbWFpbi5jb25kaXRpb24sICdcblxuJy5q
b2luKGNvbW1hbmRfZGVjbGFyYXRpb25zKSkKIAogICAgIGRlZiBfZ2VuZXJhdGVfaGFuZGxlcl9p
bXBsZW1lbnRhdGlvbl9mb3JfY29tbWFuZChzZWxmLCBkb21haW4sIGNvbW1hbmQpOgogICAgICAg
ICBsaW5lcyA9IFtdCkBAIC0xMDQsNyArMTA0LDcgQEAgY2xhc3MgT2JqQ0JhY2tlbmREaXNwYXRj
aGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgICAgICAgICAn
aW52b2NhdGlvbic6IHNlbGYuX2dlbmVyYXRlX2ludm9jYXRpb25fZm9yX2NvbW1hbmQoZG9tYWlu
LCBjb21tYW5kKSwKICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9n
dWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgVGVtcGxhdGUoT2JqQ1RlbXBsYXRlcy5CYWNrZW5kRGlz
cGF0Y2hlckhlYWRlckRvbWFpbkhhbmRsZXJJbXBsZW1lbnRhdGlvbikuc3Vic3RpdHV0ZShOb25l
LCAqKmNvbW1hbmRfYXJncykpCisgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9m
b3JfY29uZGl0aW9uKGNvbW1hbmQuY29uZGl0aW9uLCBUZW1wbGF0ZShPYmpDVGVtcGxhdGVzLkJh
Y2tlbmREaXNwYXRjaGVySGVhZGVyRG9tYWluSGFuZGxlckltcGxlbWVudGF0aW9uKS5zdWJzdGl0
dXRlKE5vbmUsICoqY29tbWFuZF9hcmdzKSkKIAogICAgIGRlZiBfZ2VuZXJhdGVfcmVzcG9uZHNf
dG9fc2VsZWN0b3JfZm9yX2NvbW1hbmQoc2VsZiwgZG9tYWluLCBjb21tYW5kKToKICAgICAgICAg
cmV0dXJuICdbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKCVzV2l0aEVy
cm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOiVzKV0nICUgKGNvbW1hbmQuY29tbWFuZF9uYW1l
LCAnJy5qb2luKG1hcChsYW1iZGEgcGFyYW1ldGVyOiAnJXM6JyAlIHBhcmFtZXRlci5wYXJhbWV0
ZXJfbmFtZSwgY29tbWFuZC5jYWxsX3BhcmFtZXRlcnMpKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfaGVh
ZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGVfb2JqY19oZWFkZXIucHkKaW5kZXggMTVmYjc0YmU4YmYuLjE1YmY2MWQyZDQ1IDEw
MDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0ZV9vYmpjX2hlYWRlci5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2hlYWRlci5weQpAQCAtMzEsMTIg
KzMxLDEyIEBAIGZyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQogCiB0cnk6CiAgICAgZnJvbSAu
Z2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKLSAgICBmcm9tIC5tb2RlbHMgaW1w
b3J0IE9iamVjdFR5cGUsIEVudW1UeXBlLCBQbGF0Zm9ybXMKKyAgICBmcm9tIC5tb2RlbHMgaW1w
b3J0IE9iamVjdFR5cGUsIEVudW1UeXBlCiAgICAgZnJvbSAub2JqY19nZW5lcmF0b3IgaW1wb3J0
IE9iakNHZW5lcmF0b3IsIGpvaW5fdHlwZV9hbmRfbmFtZQogICAgIGZyb20gLm9iamNfZ2VuZXJh
dG9yX3RlbXBsYXRlcyBpbXBvcnQgT2JqQ0dlbmVyYXRvclRlbXBsYXRlcyBhcyBPYmpDVGVtcGxh
dGVzCiBleGNlcHQgVmFsdWVFcnJvcjoKICAgICBmcm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJh
dG9yLCB1Y2ZpcnN0Ci0gICAgZnJvbSBtb2RlbHMgaW1wb3J0IE9iamVjdFR5cGUsIEVudW1UeXBl
LCBQbGF0Zm9ybXMKKyAgICBmcm9tIG1vZGVscyBpbXBvcnQgT2JqZWN0VHlwZSwgRW51bVR5cGUK
ICAgICBmcm9tIG9iamNfZ2VuZXJhdG9yIGltcG9ydCBPYmpDR2VuZXJhdG9yLCBqb2luX3R5cGVf
YW5kX25hbWUKICAgICBmcm9tIG9iamNfZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgT2JqQ0dl
bmVyYXRvclRlbXBsYXRlcyBhcyBPYmpDVGVtcGxhdGVzCiAKQEAgLTQ0LDcgKzQ0LDcgQEAgbG9n
ID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCiAKIAogZGVmIGFkZF9uZXdsaW5lKGxpbmVz
KToKLSAgICBpZiBsaW5lcyBhbmQgbGluZXNbLTFdID09ICcnOgorICAgIGlmIG5vdCBsZW4obGlu
ZXMpIG9yIGxpbmVzWy0xXSA9PSAnJzoKICAgICAgICAgcmV0dXJuCiAgICAgbGluZXMuYXBwZW5k
KCcnKQogCkBAIC04Nyw3ICs4Nyw2IEBAIGNsYXNzIE9iakNIZWFkZXJHZW5lcmF0b3IoT2JqQ0dl
bmVyYXRvcik6CiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX2xpY2Vuc2Uo
KSkKICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKE9iakNUZW1wbGF0ZXMuSGVhZGVy
UHJlbHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlclByZWx1ZGVfYXJncykpCiAgICAgICAg
IHNlY3Rpb25zLmFwcGVuZCgnXG4nLmpvaW4oW19mIGZvciBfZiBpbiBtYXAoc2VsZi5fZ2VuZXJh
dGVfZm9yd2FyZF9kZWNsYXJhdGlvbnMsIHR5cGVfZG9tYWlucykgaWYgX2ZdKSkKLSAgICAgICAg
c2VjdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2VudW1fZm9yX3BsYXRmb3JtcygpKQogICAg
ICAgICBzZWN0aW9ucy5hcHBlbmQoJ1xuJy5qb2luKFtfZiBmb3IgX2YgaW4gbWFwKHNlbGYuX2dl
bmVyYXRlX2VudW1zLCB0eXBlX2RvbWFpbnMpIGlmIF9mXSkpCiAgICAgICAgIHNlY3Rpb25zLmFw
cGVuZCgnXG4nLmpvaW4oW19mIGZvciBfZiBpbiBtYXAoc2VsZi5fZ2VuZXJhdGVfdHlwZXMsIHR5
cGVfZG9tYWlucykgaWYgX2ZdKSkKIApAQCAtMTAzLDQyICsxMDIsNTEgQEAgY2xhc3MgT2JqQ0hl
YWRlckdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKICAgICAgICAgZm9yIGRlY2xhcmF0aW9uIGlu
IHNlbGYudHlwZV9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbihkb21haW4pOgogICAgICAgICAgICAg
aWYgKGlzaW5zdGFuY2UoZGVjbGFyYXRpb24udHlwZSwgT2JqZWN0VHlwZSkpOgogICAgICAgICAg
ICAgICAgIG9iamNfbmFtZSA9IHNlbGYub2JqY19uYW1lX2Zvcl90eXBlKGRlY2xhcmF0aW9uLnR5
cGUpCi0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdAY2xhc3MgJXM7JyAlIG9iamNfbmFt
ZSkKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKyAgICAgICAgICAgICAgICBsaW5l
cy5hcHBlbmQoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihkZWNsYXJhdGlvbi5j
b25kaXRpb24sICdAY2xhc3MgJXM7JyAlIG9iamNfbmFtZSkpCisgICAgICAgIHJldHVybiBzZWxm
LndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRvbWFpbi5jb25kaXRpb24sICdcbicuam9p
bihsaW5lcykpCiAKICAgICBkZWYgX2dlbmVyYXRlX2VudW1zKHNlbGYsIGRvbWFpbik6CiAgICAg
ICAgIGxpbmVzID0gW10KIAogICAgICAgICAjIFR5cGUgZW51bXMgYW5kIG1lbWJlciBlbnVtcy4K
ICAgICAgICAgZm9yIGRlY2xhcmF0aW9uIGluIHNlbGYudHlwZV9kZWNsYXJhdGlvbnNfZm9yX2Rv
bWFpbihkb21haW4pOgorICAgICAgICAgICAgZGVjbGFyYXRpb25fbGluZXMgPSBbXQogICAgICAg
ICAgICAgaWYgaXNpbnN0YW5jZShkZWNsYXJhdGlvbi50eXBlLCBFbnVtVHlwZSk6Ci0gICAgICAg
ICAgICAgICAgYWRkX25ld2xpbmUobGluZXMpCi0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5k
KHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2Zvcl9kZWNsYXJhdGlvbihkb21haW4sIGRl
Y2xhcmF0aW9uKSkKKyAgICAgICAgICAgICAgICBhZGRfbmV3bGluZShkZWNsYXJhdGlvbl9saW5l
cykKKyAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbl9saW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJh
dGVfYW5vbnltb3VzX2VudW1fZm9yX2RlY2xhcmF0aW9uKGRvbWFpbiwgZGVjbGFyYXRpb24pKQog
ICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBmb3IgbWVtYmVyIGluIGRlY2xhcmF0
aW9uLnR5cGVfbWVtYmVyczoKICAgICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShtZW1i
ZXIudHlwZSwgRW51bVR5cGUpIGFuZCBtZW1iZXIudHlwZS5pc19hbm9ueW1vdXM6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBhZGRfbmV3bGluZShsaW5lcykKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfbWVtYmVy
KGRvbWFpbiwgZGVjbGFyYXRpb24sIG1lbWJlcikpCisgICAgICAgICAgICAgICAgICAgICAgICBh
ZGRfbmV3bGluZShkZWNsYXJhdGlvbl9saW5lcykKKyAgICAgICAgICAgICAgICAgICAgICAgIGRl
Y2xhcmF0aW9uX2xpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3Jf
bWVtYmVyKGRvbWFpbiwgZGVjbGFyYXRpb24sIG1lbWJlcikpCisgICAgICAgICAgICBpZiBsZW4o
ZGVjbGFyYXRpb25fbGluZXMpOgorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLndy
YXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRlY2xhcmF0aW9uLmNvbmRpdGlvbiwgJ1xuXG4n
LmpvaW4oZGVjbGFyYXRpb25fbGluZXMpKSkKIAogICAgICAgICAjIEFub255bW91cyBjb21tYW5k
IGVudW1zLgogICAgICAgICBmb3IgY29tbWFuZCBpbiBzZWxmLmNvbW1hbmRzX2Zvcl9kb21haW4o
ZG9tYWluKToKKyAgICAgICAgICAgIGNvbW1hbmRfbGluZXMgPSBbXQogICAgICAgICAgICAgZm9y
IHBhcmFtZXRlciBpbiBjb21tYW5kLmNhbGxfcGFyYW1ldGVyczoKICAgICAgICAgICAgICAgICBp
ZiBpc2luc3RhbmNlKHBhcmFtZXRlci50eXBlLCBFbnVtVHlwZSkgYW5kIHBhcmFtZXRlci50eXBl
LmlzX2Fub255bW91czoKLSAgICAgICAgICAgICAgICAgICAgYWRkX25ld2xpbmUobGluZXMpCi0g
ICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNf
ZW51bV9mb3JfcGFyYW1ldGVyKGRvbWFpbiwgY29tbWFuZC5jb21tYW5kX25hbWUsIHBhcmFtZXRl
cikpCisgICAgICAgICAgICAgICAgICAgIGFkZF9uZXdsaW5lKGNvbW1hbmRfbGluZXMpCisgICAg
ICAgICAgICAgICAgICAgIGNvbW1hbmRfbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255
bW91c19lbnVtX2Zvcl9wYXJhbWV0ZXIoZG9tYWluLCBjb21tYW5kLmNvbW1hbmRfbmFtZSwgcGFy
YW1ldGVyKSkKICAgICAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5yZXR1cm5fcGFy
YW1ldGVyczoKICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHBhcmFtZXRlci50eXBlLCBF
bnVtVHlwZSkgYW5kIHBhcmFtZXRlci50eXBlLmlzX2Fub255bW91czoKLSAgICAgICAgICAgICAg
ICAgICAgYWRkX25ld2xpbmUobGluZXMpCi0gICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVu
ZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfcGFyYW1ldGVyKGRvbWFpbiwgY29t
bWFuZC5jb21tYW5kX25hbWUsIHBhcmFtZXRlcikpCisgICAgICAgICAgICAgICAgICAgIGFkZF9u
ZXdsaW5lKGNvbW1hbmRfbGluZXMpCisgICAgICAgICAgICAgICAgICAgIGNvbW1hbmRfbGluZXMu
YXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2Zvcl9wYXJhbWV0ZXIoZG9tYWlu
LCBjb21tYW5kLmNvbW1hbmRfbmFtZSwgcGFyYW1ldGVyKSkKKyAgICAgICAgICAgIGlmIGxlbihj
b21tYW5kX2xpbmVzKToKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi53cmFwX3dp
dGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihjb21tYW5kLmNvbmRpdGlvbiwgJ1xuXG4nLmpvaW4oY29t
bWFuZF9saW5lcykpKQogCiAgICAgICAgICMgQW5vbnltb3VzIGV2ZW50IGVudW1zLgogICAgICAg
ICBmb3IgZXZlbnQgaW4gc2VsZi5ldmVudHNfZm9yX2RvbWFpbihkb21haW4pOgorICAgICAgICAg
ICAgZXZlbnRfbGluZXMgPSBbXQogICAgICAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBldmVudC5l
dmVudF9wYXJhbWV0ZXJzOgogICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocGFyYW1ldGVy
LnR5cGUsIEVudW1UeXBlKSBhbmQgcGFyYW1ldGVyLnR5cGUuaXNfYW5vbnltb3VzOgotICAgICAg
ICAgICAgICAgICAgICBhZGRfbmV3bGluZShsaW5lcykKLSAgICAgICAgICAgICAgICAgICAgbGlu
ZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2Zvcl9wYXJhbWV0ZXIoZG9t
YWluLCBldmVudC5ldmVudF9uYW1lLCBwYXJhbWV0ZXIpKQorICAgICAgICAgICAgICAgICAgICBh
ZGRfbmV3bGluZShldmVudF9saW5lcykKKyAgICAgICAgICAgICAgICAgICAgZXZlbnRfbGluZXMu
YXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2Zvcl9wYXJhbWV0ZXIoZG9tYWlu
LCBldmVudC5ldmVudF9uYW1lLCBwYXJhbWV0ZXIpKQorICAgICAgICAgICAgaWYgbGVuKGV2ZW50
X2xpbmVzKToKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi53cmFwX3dpdGhfZ3Vh
cmRfZm9yX2NvbmRpdGlvbihldmVudC5jb25kaXRpb24sICdcblxuJy5qb2luKGV2ZW50X2xpbmVz
KSkpCiAKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKyAgICAgICAgcmV0dXJuIHNl
bGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZG9tYWluLmNvbmRpdGlvbiwgJ1xuXG4n
LmpvaW4obGluZXMpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV90eXBlcyhzZWxmLCBkb21haW4pOgog
ICAgICAgICBsaW5lcyA9IFtdCkBAIC0xNDcsMTIgKzE1NSw3IEBAIGNsYXNzIE9iakNIZWFkZXJH
ZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGRlY2xh
cmF0aW9uLnR5cGUsIE9iamVjdFR5cGUpOgogICAgICAgICAgICAgICAgIGFkZF9uZXdsaW5lKGxp
bmVzKQogICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV90eXBlX2lu
dGVyZmFjZShkb21haW4sIGRlY2xhcmF0aW9uKSkKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihs
aW5lcykKLQotICAgIGRlZiBfZ2VuZXJhdGVfZW51bV9mb3JfcGxhdGZvcm1zKHNlbGYpOgotICAg
ICAgICBvYmpjX2VudW1fbmFtZSA9ICclc1BsYXRmb3JtJyAlIHNlbGYub2JqY19wcmVmaXgoKQot
ICAgICAgICBlbnVtX3ZhbHVlcyA9IFtwbGF0Zm9ybS5uYW1lIGZvciBwbGF0Zm9ybSBpbiBQbGF0
Zm9ybXNdCi0gICAgICAgIHJldHVybiBzZWxmLl9nZW5lcmF0ZV9lbnVtKG9iamNfZW51bV9uYW1l
LCBlbnVtX3ZhbHVlcykKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9j
b25kaXRpb24oZG9tYWluLmNvbmRpdGlvbiwgJ1xuJy5qb2luKGxpbmVzKSkKIAogICAgIGRlZiBf
Z2VuZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX2RlY2xhcmF0aW9uKHNlbGYsIGRvbWFpbiwgZGVj
bGFyYXRpb24pOgogICAgICAgICBvYmpjX2VudW1fbmFtZSA9IHNlbGYub2JqY19lbnVtX25hbWVf
Zm9yX2Fub255bW91c19lbnVtX2RlY2xhcmF0aW9uKGRlY2xhcmF0aW9uKQpAQCAtMTk0LDcgKzE5
Nyw3IEBAIGNsYXNzIE9iakNIZWFkZXJHZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgICAg
IGZvciBtZW1iZXIgaW4gb3B0aW9uYWxfbWVtYmVyczoKICAgICAgICAgICAgIGxpbmVzLmFwcGVu
ZCgnLyogb3B0aW9uYWwgKi8gJyArIHNlbGYuX2dlbmVyYXRlX21lbWJlcl9wcm9wZXJ0eShkZWNs
YXJhdGlvbiwgbWVtYmVyKSkKICAgICAgICAgbGluZXMuYXBwZW5kKCdAZW5kJykKLSAgICAgICAg
cmV0dXJuICdcbicuam9pbihsaW5lcykKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1
YXJkX2Zvcl9jb25kaXRpb24oZGVjbGFyYXRpb24uY29uZGl0aW9uLCAnXG4nLmpvaW4obGluZXMp
KQogCiAgICAgZGVmIF9nZW5lcmF0ZV9pbml0X21ldGhvZF9mb3JfcmVxdWlyZWRfbWVtYmVycyhz
ZWxmLCBkb21haW4sIGRlY2xhcmF0aW9uLCByZXF1aXJlZF9tZW1iZXJzKToKICAgICAgICAgcGFp
cnMgPSBbXQpAQCAtMjE5LDcgKzIyMiw3IEBAIGNsYXNzIE9iakNIZWFkZXJHZW5lcmF0b3IoT2Jq
Q0dlbmVyYXRvcik6CiAgICAgICAgICAgICBmb3IgY29tbWFuZCBpbiBzZWxmLmNvbW1hbmRzX2Zv
cl9kb21haW4oZG9tYWluKToKICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2Vu
ZXJhdGVfc2luZ2xlX2NvbW1hbmRfcHJvdG9jb2woZG9tYWluLCBjb21tYW5kKSkKICAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZCgnQGVuZCcpCi0gICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMp
CisgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRvbWFp
bi5jb25kaXRpb24sICdcbicuam9pbihsaW5lcykpCiAKICAgICBkZWYgX2dlbmVyYXRlX3Npbmds
ZV9jb21tYW5kX3Byb3RvY29sKHNlbGYsIGRvbWFpbiwgY29tbWFuZCk6CiAgICAgICAgIHBhaXJz
ID0gW10KQEAgLTIyOCw3ICsyMzEsNyBAQCBjbGFzcyBPYmpDSGVhZGVyR2VuZXJhdG9yKE9iakNH
ZW5lcmF0b3IpOgogICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQuY2FsbF9wYXJhbWV0
ZXJzOgogICAgICAgICAgICAgcGFyYW1fbmFtZSA9IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQog
ICAgICAgICAgICAgcGFpcnMuYXBwZW5kKCclczooJXMpJXMnICUgKHBhcmFtX25hbWUsIHNlbGYu
b2JqY190eXBlX2Zvcl9wYXJhbShkb21haW4sIGNvbW1hbmQuY29tbWFuZF9uYW1lLCBwYXJhbWV0
ZXIpLCBwYXJhbV9uYW1lKSkKLSAgICAgICAgcmV0dXJuICctICh2b2lkKSVzV2l0aCVzOycgJSAo
Y29tbWFuZC5jb21tYW5kX25hbWUsICcgJy5qb2luKHBhaXJzKSkKKyAgICAgICAgcmV0dXJuIHNl
bGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oY29tbWFuZC5jb25kaXRpb24sICctICh2
b2lkKSVzV2l0aCVzOycgJSAoY29tbWFuZC5jb21tYW5kX25hbWUsICcgJy5qb2luKHBhaXJzKSkp
CiAKICAgICBkZWYgX2NhbGxiYWNrX2Jsb2NrX2Zvcl9jb21tYW5kKHNlbGYsIGRvbWFpbiwgY29t
bWFuZCk6CiAgICAgICAgIHBhaXJzID0gW10KQEAgLTI0OSw3ICsyNTIsNyBAQCBjbGFzcyBPYmpD
SGVhZGVyR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogICAgICAgICAgICAgZm9yIGV2ZW50IGlu
IGV2ZW50czoKICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfc2lu
Z2xlX2V2ZW50X2ludGVyZmFjZShkb21haW4sIGV2ZW50KSkKICAgICAgICAgICAgIGxpbmVzLmFw
cGVuZCgnQGVuZCcpCi0gICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisgICAgICAgIHJl
dHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRvbWFpbi5jb25kaXRpb24s
ICdcbicuam9pbihsaW5lcykpCiAKICAgICBkZWYgX2dlbmVyYXRlX3NpbmdsZV9ldmVudF9pbnRl
cmZhY2Uoc2VsZiwgZG9tYWluLCBldmVudCk6CiAgICAgICAgIGlmIG5vdCBldmVudC5ldmVudF9w
YXJhbWV0ZXJzOgpAQCAtMjU5LDQgKzI2Miw0IEBAIGNsYXNzIE9iakNIZWFkZXJHZW5lcmF0b3Io
T2JqQ0dlbmVyYXRvcik6CiAgICAgICAgICAgICBwYXJhbV9uYW1lID0gcGFyYW1ldGVyLnBhcmFt
ZXRlcl9uYW1lCiAgICAgICAgICAgICBwYWlycy5hcHBlbmQoJyVzOiglcyklcycgJSAocGFyYW1f
bmFtZSwgc2VsZi5vYmpjX3R5cGVfZm9yX3BhcmFtKGRvbWFpbiwgZXZlbnQuZXZlbnRfbmFtZSwg
cGFyYW1ldGVyKSwgcGFyYW1fbmFtZSkpCiAgICAgICAgIHBhaXJzWzBdID0gdWNmaXJzdChwYWly
c1swXSkKLSAgICAgICAgcmV0dXJuICctICh2b2lkKSVzV2l0aCVzOycgJSAoZXZlbnQuZXZlbnRf
bmFtZSwgJyAnLmpvaW4ocGFpcnMpKQorICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3Vh
cmRfZm9yX2NvbmRpdGlvbihldmVudC5jb25kaXRpb24sICctICh2b2lkKSVzV2l0aCVzOycgJSAo
ZXZlbnQuZXZlbnRfbmFtZSwgJyAnLmpvaW4ocGFpcnMpKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfcHJv
dG9jb2xfdHlwZV9jb252ZXJzaW9uc19oZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVfY29u
dmVyc2lvbnNfaGVhZGVyLnB5CmluZGV4IDI1NzFmNGIyMmE4Li41YzUyY2RlYTliMyAxMDA3NTUK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2Vu
ZXJhdGVfb2JqY19wcm90b2NvbF90eXBlX2NvbnZlcnNpb25zX2hlYWRlci5weQorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpj
X3Byb3RvY29sX3R5cGVfY29udmVyc2lvbnNfaGVhZGVyLnB5CkBAIC0zMSwxMiArMzEsMTIgQEAg
ZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCiAKIHRyeToKICAgICBmcm9tIC5nZW5lcmF0b3Ig
aW1wb3J0IEdlbmVyYXRvcgotICAgIGZyb20gLm1vZGVscyBpbXBvcnQgRW51bVR5cGUsIEZyYW1l
d29ya3MsIFBsYXRmb3JtcworICAgIGZyb20gLm1vZGVscyBpbXBvcnQgRW51bVR5cGUsIEZyYW1l
d29ya3MKICAgICBmcm9tIC5vYmpjX2dlbmVyYXRvciBpbXBvcnQgT2JqQ0dlbmVyYXRvcgogICAg
IGZyb20gLm9iamNfZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgT2JqQ0dlbmVyYXRvclRlbXBs
YXRlcyBhcyBPYmpDVGVtcGxhdGVzCiBleGNlcHQgVmFsdWVFcnJvcjoKICAgICBmcm9tIGdlbmVy
YXRvciBpbXBvcnQgR2VuZXJhdG9yCi0gICAgZnJvbSBtb2RlbHMgaW1wb3J0IEVudW1UeXBlLCBG
cmFtZXdvcmtzLCBQbGF0Zm9ybXMKKyAgICBmcm9tIG1vZGVscyBpbXBvcnQgRW51bVR5cGUsIEZy
YW1ld29ya3MKICAgICBmcm9tIG9iamNfZ2VuZXJhdG9yIGltcG9ydCBPYmpDR2VuZXJhdG9yCiAg
ICAgZnJvbSBvYmpjX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IE9iakNHZW5lcmF0b3JUZW1w
bGF0ZXMgYXMgT2JqQ1RlbXBsYXRlcwogCkBAIC00NCw3ICs0NCw3IEBAIGxvZyA9IGxvZ2dpbmcu
Z2V0TG9nZ2VyKCdnbG9iYWwnKQogCiAKIGRlZiBhZGRfbmV3bGluZShsaW5lcyk6Ci0gICAgaWYg
bGluZXMgYW5kIGxpbmVzWy0xXSA9PSAnJzoKKyAgICBpZiBub3QgbGVuKGxpbmVzKSBvciBsaW5l
c1stMV0gPT0gJyc6CiAgICAgICAgIHJldHVybgogICAgIGxpbmVzLmFwcGVuZCgnJykKIApAQCAt
NzUsNyArNzUsNiBAQCBjbGFzcyBPYmpDUHJvdG9jb2xUeXBlQ29udmVyc2lvbnNIZWFkZXJHZW5l
cmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVy
YXRlX2xpY2Vuc2UoKSkKICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKE9iakNUZW1w
bGF0ZXMuVHlwZUNvbnZlcnNpb25zSGVhZGVyUHJlbHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhl
YWRlcl9hcmdzKSkKICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKE9iakNUZW1wbGF0
ZXMuVHlwZUNvbnZlcnNpb25zSGVhZGVyU3RhbmRhcmQpLnN1YnN0aXR1dGUoTm9uZSkpCi0gICAg
ICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9lbnVtX2NvbnZlcnNpb25fZm9yX3Bs
YXRmb3JtcygpKQogICAgICAgICBzZWN0aW9ucy5leHRlbmQobGlzdChtYXAoc2VsZi5fZ2VuZXJh
dGVfZW51bV9jb252ZXJzaW9uX2Z1bmN0aW9ucywgZG9tYWlucykpKQogICAgICAgICBzZWN0aW9u
cy5hcHBlbmQoVGVtcGxhdGUoT2JqQ1RlbXBsYXRlcy5UeXBlQ29udmVyc2lvbnNIZWFkZXJQb3N0
bHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKICAgICAgICAgcmV0dXJuICdc
blxuJy5qb2luKHNlY3Rpb25zKQpAQCAtODUsNDIgKzg0LDQzIEBAIGNsYXNzIE9iakNQcm90b2Nv
bFR5cGVDb252ZXJzaW9uc0hlYWRlckdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKIAogICAgICAg
ICAjIFR5cGUgZW51bXMgYW5kIG1lbWJlciBlbnVtcy4KICAgICAgICAgZm9yIGRlY2xhcmF0aW9u
IGluIHNlbGYudHlwZV9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbihkb21haW4pOgorICAgICAgICAg
ICAgZGVjbGFyYXRpb25fbGluZXMgPSBbXQogICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShkZWNs
YXJhdGlvbi50eXBlLCBFbnVtVHlwZSk6Ci0gICAgICAgICAgICAgICAgYWRkX25ld2xpbmUobGlu
ZXMpCi0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255bW91
c19lbnVtX2NvbnZlcnNpb25fZm9yX2RlY2xhcmF0aW9uKGRvbWFpbiwgZGVjbGFyYXRpb24pKQor
ICAgICAgICAgICAgICAgIGFkZF9uZXdsaW5lKGRlY2xhcmF0aW9uX2xpbmVzKQorICAgICAgICAg
ICAgICAgIGRlY2xhcmF0aW9uX2xpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNf
ZW51bV9jb252ZXJzaW9uX2Zvcl9kZWNsYXJhdGlvbihkb21haW4sIGRlY2xhcmF0aW9uKSkKICAg
ICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgZm9yIG1lbWJlciBpbiBkZWNsYXJhdGlv
bi50eXBlX21lbWJlcnM6CiAgICAgICAgICAgICAgICAgICAgIGlmIChpc2luc3RhbmNlKG1lbWJl
ci50eXBlLCBFbnVtVHlwZSkgYW5kIG1lbWJlci50eXBlLmlzX2Fub255bW91cyk6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBhZGRfbmV3bGluZShsaW5lcykKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9jb252ZXJzaW9u
X2Zvcl9tZW1iZXIoZG9tYWluLCBkZWNsYXJhdGlvbiwgbWVtYmVyKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGFkZF9uZXdsaW5lKGRlY2xhcmF0aW9uX2xpbmVzKQorICAgICAgICAgICAgICAg
ICAgICAgICAgZGVjbGFyYXRpb25fbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255bW91
c19lbnVtX2NvbnZlcnNpb25fZm9yX21lbWJlcihkb21haW4sIGRlY2xhcmF0aW9uLCBtZW1iZXIp
KQorICAgICAgICAgICAgaWYgbGVuKGRlY2xhcmF0aW9uX2xpbmVzKToKKyAgICAgICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihkZWNsYXJh
dGlvbi5jb25kaXRpb24sICdcblxuJy5qb2luKGRlY2xhcmF0aW9uX2xpbmVzKSkpCiAKICAgICAg
ICAgIyBBbm9ueW1vdXMgY29tbWFuZCBlbnVtcy4KICAgICAgICAgZm9yIGNvbW1hbmQgaW4gc2Vs
Zi5jb21tYW5kc19mb3JfZG9tYWluKGRvbWFpbik6CisgICAgICAgICAgICBjb21tYW5kX2xpbmVz
ID0gW10KICAgICAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRl
cnM6CiAgICAgICAgICAgICAgICAgaWYgKGlzaW5zdGFuY2UocGFyYW1ldGVyLnR5cGUsIEVudW1U
eXBlKSBhbmQgcGFyYW1ldGVyLnR5cGUuaXNfYW5vbnltb3VzKToKLSAgICAgICAgICAgICAgICAg
ICAgYWRkX25ld2xpbmUobGluZXMpCi0gICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChz
ZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9jb252ZXJzaW9uX2Zvcl9wYXJhbWV0ZXIoZG9t
YWluLCBjb21tYW5kLmNvbW1hbmRfbmFtZSwgcGFyYW1ldGVyKSkKKyAgICAgICAgICAgICAgICAg
ICAgYWRkX25ld2xpbmUoY29tbWFuZF9saW5lcykKKyAgICAgICAgICAgICAgICAgICAgY29tbWFu
ZF9saW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fY29udmVyc2lvbl9m
b3JfcGFyYW1ldGVyKGRvbWFpbiwgY29tbWFuZC5jb21tYW5kX25hbWUsIHBhcmFtZXRlcikpCiAg
ICAgICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnM6CiAg
ICAgICAgICAgICAgICAgaWYgKGlzaW5zdGFuY2UocGFyYW1ldGVyLnR5cGUsIEVudW1UeXBlKSBh
bmQgcGFyYW1ldGVyLnR5cGUuaXNfYW5vbnltb3VzKToKLSAgICAgICAgICAgICAgICAgICAgYWRk
X25ld2xpbmUobGluZXMpCi0gICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9n
ZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9jb252ZXJzaW9uX2Zvcl9wYXJhbWV0ZXIoZG9tYWluLCBj
b21tYW5kLmNvbW1hbmRfbmFtZSwgcGFyYW1ldGVyKSkKKyAgICAgICAgICAgICAgICAgICAgYWRk
X25ld2xpbmUoY29tbWFuZF9saW5lcykKKyAgICAgICAgICAgICAgICAgICAgY29tbWFuZF9saW5l
cy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fY29udmVyc2lvbl9mb3JfcGFy
YW1ldGVyKGRvbWFpbiwgY29tbWFuZC5jb21tYW5kX25hbWUsIHBhcmFtZXRlcikpCisgICAgICAg
ICAgICBpZiBsZW4oY29tbWFuZF9saW5lcyk6CisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5k
KHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oY29tbWFuZC5jb25kaXRpb24sICdc
blxuJy5qb2luKGNvbW1hbmRfbGluZXMpKSkKIAogICAgICAgICAjIEFub255bW91cyBldmVudCBl
bnVtcy4KICAgICAgICAgZm9yIGV2ZW50IGluIHNlbGYuZXZlbnRzX2Zvcl9kb21haW4oZG9tYWlu
KToKKyAgICAgICAgICAgIGV2ZW50X2xpbmVzID0gW10KICAgICAgICAgICAgIGZvciBwYXJhbWV0
ZXIgaW4gZXZlbnQuZXZlbnRfcGFyYW1ldGVyczoKICAgICAgICAgICAgICAgICBpZiAoaXNpbnN0
YW5jZShwYXJhbWV0ZXIudHlwZSwgRW51bVR5cGUpIGFuZCBwYXJhbWV0ZXIudHlwZS5pc19hbm9u
eW1vdXMpOgotICAgICAgICAgICAgICAgICAgICBhZGRfbmV3bGluZShsaW5lcykKLSAgICAgICAg
ICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2Nv
bnZlcnNpb25fZm9yX3BhcmFtZXRlcihkb21haW4sIGV2ZW50LmV2ZW50X25hbWUsIHBhcmFtZXRl
cikpCisgICAgICAgICAgICAgICAgICAgIGFkZF9uZXdsaW5lKGV2ZW50X2xpbmVzKQorICAgICAg
ICAgICAgICAgICAgICBldmVudF9saW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnltb3Vz
X2VudW1fY29udmVyc2lvbl9mb3JfcGFyYW1ldGVyKGRvbWFpbiwgZXZlbnQuZXZlbnRfbmFtZSwg
cGFyYW1ldGVyKSkKKyAgICAgICAgICAgIGlmIGxlbihldmVudF9saW5lcyk6CisgICAgICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZXZl
bnQuY29uZGl0aW9uLCAnXG5cbicuam9pbihldmVudF9saW5lcykpKQogCi0gICAgICAgIHJldHVy
biAnXG4nLmpvaW4obGluZXMpCi0KLSAgICBkZWYgX2dlbmVyYXRlX2VudW1fY29udmVyc2lvbl9m
b3JfcGxhdGZvcm1zKHNlbGYpOgotICAgICAgICBvYmpjX2VudW1fbmFtZSA9ICclc1BsYXRmb3Jt
JyAlIHNlbGYub2JqY19wcmVmaXgoKQotICAgICAgICBlbnVtX3ZhbHVlcyA9IFtwbGF0Zm9ybS5u
YW1lIGZvciBwbGF0Zm9ybSBpbiBQbGF0Zm9ybXNdCi0gICAgICAgIGxpbmVzID0gW10KLSAgICAg
ICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2VudW1fb2JqY190b19wcm90b2NvbF9zdHJp
bmcob2JqY19lbnVtX25hbWUsIGVudW1fdmFsdWVzKSkKLSAgICAgICAgbGluZXMuYXBwZW5kKHNl
bGYuX2dlbmVyYXRlX2VudW1fZnJvbV9wcm90b2NvbF9zdHJpbmcob2JqY19lbnVtX25hbWUsIGVu
dW1fdmFsdWVzKSkKLSAgICAgICAgcmV0dXJuICdcblxuJy5qb2luKGxpbmVzKQorICAgICAgICBy
ZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9u
LCAnXG5cbicuam9pbihsaW5lcykpCiAKICAgICBkZWYgX2dlbmVyYXRlX2Fub255bW91c19lbnVt
X2NvbnZlcnNpb25fZm9yX2RlY2xhcmF0aW9uKHNlbGYsIGRvbWFpbiwgZGVjbGFyYXRpb24pOgog
ICAgICAgICBvYmpjX2VudW1fbmFtZSA9IHNlbGYub2JqY19lbnVtX25hbWVfZm9yX2Fub255bW91
c19lbnVtX2RlY2xhcmF0aW9uKGRlY2xhcmF0aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19wcm90b2Nv
bF90eXBlX2NvbnZlcnNpb25zX2ltcGxlbWVudGF0aW9uLnB5IGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBl
X2NvbnZlcnNpb25zX2ltcGxlbWVudGF0aW9uLnB5CmluZGV4IGEzNmQ4MTNlY2VlLi44YzEwNzcw
OWNiMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBlX2NvbnZlcnNpb25zX2ltcGxlbWVu
dGF0aW9uLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9j
b2RlZ2VuL2dlbmVyYXRlX29iamNfcHJvdG9jb2xfdHlwZV9jb252ZXJzaW9uc19pbXBsZW1lbnRh
dGlvbi5weQpAQCAtNDMsNyArNDMsNyBAQCBsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFs
JykKIAogCiBkZWYgYWRkX25ld2xpbmUobGluZXMpOgotICAgIGlmIGxpbmVzIGFuZCBsaW5lc1st
MV0gPT0gJyc6CisgICAgaWYgbm90IGxlbihsaW5lcykgb3IgbGluZXNbLTFdID09ICcnOgogICAg
ICAgICByZXR1cm4KICAgICBsaW5lcy5hcHBlbmQoJycpCiAKQEAgLTgzLDE1ICs4MywxNiBAQCBj
bGFzcyBPYmpDUHJvdG9jb2xUeXBlQ29udmVyc2lvbnNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihP
YmpDR2VuZXJhdG9yKToKICAgICBkZWYgX2dlbmVyYXRlX3R5cGVfZmFjdG9yeV9jYXRlZ29yeV9p
bnRlcmZhY2Uoc2VsZiwgZG9tYWlucyk6CiAgICAgICAgIGxpbmVzID0gW10KICAgICAgICAgZm9y
IGRvbWFpbiBpbiBkb21haW5zOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdAaW50ZXJmYWNl
ICVzVHlwZUNvbnZlcnNpb25zICglc0RvbWFpbiknICUgKHNlbGYucHJvdG9jb2xfbmFtZSgpLCBk
b21haW4uZG9tYWluX25hbWUpKQotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQorICAgICAg
ICAgICAgZG9tYWluX2xpbmVzID0gW10KKyAgICAgICAgICAgIGRvbWFpbl9saW5lcy5hcHBlbmQo
J0BpbnRlcmZhY2UgJXNUeXBlQ29udmVyc2lvbnMgKCVzRG9tYWluKScgJSAoc2VsZi5wcm90b2Nv
bF9uYW1lKCksIGRvbWFpbi5kb21haW5fbmFtZSkpCisgICAgICAgICAgICBhZGRfbmV3bGluZShk
b21haW5fbGluZXMpCiAKICAgICAgICAgICAgIGZvciBkZWNsYXJhdGlvbiBpbiBzZWxmLnR5cGVf
ZGVjbGFyYXRpb25zX2Zvcl9kb21haW4oZG9tYWluKToKLSAgICAgICAgICAgICAgICBsaW5lcy5h
cHBlbmQoc2VsZi5fZ2VuZXJhdGVfdHlwZV9mYWN0b3J5X21ldGhvZF9kZWNsYXJhdGlvbihkb21h
aW4sIGRlY2xhcmF0aW9uKSkKLQotICAgICAgICAgICAgYWRkX25ld2xpbmUobGluZXMpCi0gICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoJ0BlbmQnKQorICAgICAgICAgICAgICAgIGRvbWFpbl9saW5l
cy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfdHlwZV9mYWN0b3J5X21ldGhvZF9kZWNsYXJhdGlvbihk
b21haW4sIGRlY2xhcmF0aW9uKSkKIAorICAgICAgICAgICAgYWRkX25ld2xpbmUoZG9tYWluX2xp
bmVzKQorICAgICAgICAgICAgZG9tYWluX2xpbmVzLmFwcGVuZCgnQGVuZCcpCisgICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihkb21haW4u
Y29uZGl0aW9uLCAnXG4nLmpvaW4oZG9tYWluX2xpbmVzKSkpCiAgICAgICAgIHJldHVybiAnXG4n
LmpvaW4obGluZXMpCiAKICAgICBkZWYgX2dlbmVyYXRlX3R5cGVfZmFjdG9yeV9tZXRob2RfZGVj
bGFyYXRpb24oc2VsZiwgZG9tYWluLCBkZWNsYXJhdGlvbik6CkBAIC0xMDAsMjAgKzEwMSwyMyBA
QCBjbGFzcyBPYmpDUHJvdG9jb2xUeXBlQ29udmVyc2lvbnNJbXBsZW1lbnRhdGlvbkdlbmVyYXRv
cihPYmpDR2VuZXJhdG9yKToKICAgICAgICAgICAgIHJlc29sdmVkX3R5cGUgPSByZXNvbHZlZF90
eXBlLmFsaWFzZWRfdHlwZQogICAgICAgICBpZiBpc2luc3RhbmNlKHJlc29sdmVkX3R5cGUsIChP
YmplY3RUeXBlLCBBcnJheVR5cGUsIFByaW1pdGl2ZVR5cGUpKToKICAgICAgICAgICAgIG9iamNf
dHlwZSA9IHNlbGYub2JqY19jbGFzc19mb3JfdHlwZShyZXNvbHZlZF90eXBlKQotICAgICAgICAg
ICAgcmV0dXJuICcrICh2b2lkKV9wYXJzZSVzOiglcyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDoo
aWQpcGF5bG9hZDsnICUgKGRlY2xhcmF0aW9uLnR5cGUucmF3X25hbWUoKSwgb2JqY190eXBlKQor
ICAgICAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZGVj
bGFyYXRpb24uY29uZGl0aW9uLCAnKyAodm9pZClfcGFyc2UlczooJXMgKiopb3V0VmFsdWUgZnJv
bVBheWxvYWQ6KGlkKXBheWxvYWQ7JyAlIChkZWNsYXJhdGlvbi50eXBlLnJhd19uYW1lKCksIG9i
amNfdHlwZSkpCiAgICAgICAgIGlmIGlzaW5zdGFuY2UocmVzb2x2ZWRfdHlwZSwgRW51bVR5cGUp
OgotICAgICAgICAgICAgcmV0dXJuICcrICh2b2lkKV9wYXJzZSVzOihOU051bWJlciAqKilvdXRW
YWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsnICUgZGVjbGFyYXRpb24udHlwZS5yYXdfbmFt
ZSgpCisgICAgICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlv
bihkZWNsYXJhdGlvbi5jb25kaXRpb24sICcrICh2b2lkKV9wYXJzZSVzOihOU051bWJlciAqKilv
dXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsnICUgZGVjbGFyYXRpb24udHlwZS5yYXdf
bmFtZSgpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV90eXBlX2ZhY3RvcnlfY2F0ZWdvcnlfaW1wbGVt
ZW50YXRpb24oc2VsZiwgZG9tYWlucyk6CiAgICAgICAgIGxpbmVzID0gW10KICAgICAgICAgZm9y
IGRvbWFpbiBpbiBkb21haW5zOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdAaW1wbGVtZW50
YXRpb24gJXNUeXBlQ29udmVyc2lvbnMgKCVzRG9tYWluKScgJSAoc2VsZi5wcm90b2NvbF9uYW1l
KCksIGRvbWFpbi5kb21haW5fbmFtZSkpCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycpCisg
ICAgICAgICAgICBkb21haW5fbGluZXMgPSBbXQorICAgICAgICAgICAgZG9tYWluX2xpbmVzLmFw
cGVuZCgnQGltcGxlbWVudGF0aW9uICVzVHlwZUNvbnZlcnNpb25zICglc0RvbWFpbiknICUgKHNl
bGYucHJvdG9jb2xfbmFtZSgpLCBkb21haW4uZG9tYWluX25hbWUpKQorICAgICAgICAgICAgYWRk
X25ld2xpbmUoZG9tYWluX2xpbmVzKQogCiAgICAgICAgICAgICBmb3IgZGVjbGFyYXRpb24gaW4g
c2VsZi50eXBlX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluKGRvbWFpbik6Ci0gICAgICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX3R5cGVfZmFjdG9yeV9tZXRob2RfaW1wbGVt
ZW50YXRpb24oZG9tYWluLCBkZWNsYXJhdGlvbikpCi0gICAgICAgICAgICAgICAgYWRkX25ld2xp
bmUobGluZXMpCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0BlbmQnKQorICAgICAgICAgICAg
ICAgIGRvbWFpbl9saW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfdHlwZV9mYWN0b3J5X21ldGhv
ZF9pbXBsZW1lbnRhdGlvbihkb21haW4sIGRlY2xhcmF0aW9uKSkKKyAgICAgICAgICAgICAgICBh
ZGRfbmV3bGluZShkb21haW5fbGluZXMpCisKKyAgICAgICAgICAgIGRvbWFpbl9saW5lcy5hcHBl
bmQoJ0BlbmQnKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYud3JhcF93aXRoX2d1YXJk
X2Zvcl9jb25kaXRpb24oZG9tYWluLmNvbmRpdGlvbiwgJ1xuJy5qb2luKGRvbWFpbl9saW5lcykp
KQogICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQogCiAgICAgZGVmIF9nZW5lcmF0ZV90
eXBlX2ZhY3RvcnlfbWV0aG9kX2ltcGxlbWVudGF0aW9uKHNlbGYsIGRvbWFpbiwgZGVjbGFyYXRp
b24pOgpAQCAtMTQxLDQgKzE0NSw0IEBAIGNsYXNzIE9iakNQcm90b2NvbFR5cGVDb252ZXJzaW9u
c0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogICAgICAgICAgICAgbGlu
ZXMuYXBwZW5kKCcgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNE
aWN0aW9uYXJ5IGNsYXNzXSk7JykKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICpvdXRW
YWx1ZSA9IFtbJXMgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsnICUgKG9iamNfY2xh
c3MpKQogICAgICAgICBsaW5lcy5hcHBlbmQoJ30nKQotICAgICAgICByZXR1cm4gJ1xuJy5qb2lu
KGxpbmVzKQorICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlv
bihkZWNsYXJhdGlvbi5jb25kaXRpb24sICdcbicuam9pbihsaW5lcykpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9v
YmpjX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5IGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBl
c19pbXBsZW1lbnRhdGlvbi5weQppbmRleCBjODcwODgxYWJkOC4uYTBlN2I5MDA0NDUgMTAwNzU1
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dl
bmVyYXRlX29iamNfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19w
cm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weQpAQCAtNDQsNyArNDQsNyBAQCBsb2cgPSBs
b2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKIAogCiBkZWYgYWRkX25ld2xpbmUobGluZXMpOgot
ICAgIGlmIGxpbmVzIGFuZCBsaW5lc1stMV0gPT0gJyc6CisgICAgaWYgbm90IGxlbihsaW5lcykg
b3IgbGluZXNbLTFdID09ICcnOgogICAgICAgICByZXR1cm4KICAgICBsaW5lcy5hcHBlbmQoJycp
CiAKQEAgLTkxLDcgKzkxLDcgQEAgY2xhc3MgT2JqQ1Byb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlv
bkdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKICAgICAgICAgICAgIGlmIChpc2luc3RhbmNlKGRl
Y2xhcmF0aW9uLnR5cGUsIE9iamVjdFR5cGUpKToKICAgICAgICAgICAgICAgICBhZGRfbmV3bGlu
ZShsaW5lcykKICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV90eXBl
X2ltcGxlbWVudGF0aW9uKGRvbWFpbiwgZGVjbGFyYXRpb24pKQotICAgICAgICByZXR1cm4gJ1xu
Jy5qb2luKGxpbmVzKQorICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2Nv
bmRpdGlvbihkb21haW4uY29uZGl0aW9uLCAnXG4nLmpvaW4obGluZXMpKQogCiAgICAgZGVmIGdl
bmVyYXRlX3R5cGVfaW1wbGVtZW50YXRpb24oc2VsZiwgZG9tYWluLCBkZWNsYXJhdGlvbik6CiAg
ICAgICAgIGxpbmVzID0gW10KQEAgLTExMiw3ICsxMTIsNyBAQCBjbGFzcyBPYmpDUHJvdG9jb2xU
eXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogICAgICAgICAgICAg
bGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2dldHRlcl9mb3JfbWVtYmVyKGRvbWFpbiwgZGVj
bGFyYXRpb24sIG1lbWJlcikpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKICAgICAgICAgbGlu
ZXMuYXBwZW5kKCdAZW5kJykKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKyAgICAg
ICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZGVjbGFyYXRpb24u
Y29uZGl0aW9uLCAnXG4nLmpvaW4obGluZXMpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9pbml0X21l
dGhvZF9mb3JfcHJvdG9jb2xfb2JqZWN0KHNlbGYsIGRvbWFpbiwgZGVjbGFyYXRpb24pOgogICAg
ICAgICBsaW5lcyA9IFtdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3IucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3IucHkKaW5kZXggOGMyZmJiOGJjNTIu
Ljk0ZDE4ZDlkNjYxIDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3IucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yLnB5CkBAIC0zMSwxMCArMzEsMTAg
QEAgZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCiAKIHRyeToKICAgICBmcm9tIC5nZW5lcmF0
b3JfdGVtcGxhdGVzIGltcG9ydCBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgVGVtcGxhdGVzCi0gICAg
ZnJvbSAubW9kZWxzIGltcG9ydCBQcmltaXRpdmVUeXBlLCBPYmplY3RUeXBlLCBBcnJheVR5cGUs
IEVudW1UeXBlLCBBbGlhc2VkVHlwZSwgRnJhbWV3b3JrcywgUGxhdGZvcm1zCisgICAgZnJvbSAu
bW9kZWxzIGltcG9ydCBQcmltaXRpdmVUeXBlLCBPYmplY3RUeXBlLCBBcnJheVR5cGUsIEVudW1U
eXBlLCBBbGlhc2VkVHlwZSwgRnJhbWV3b3JrcwogZXhjZXB0IFZhbHVlRXJyb3I6CiAgICAgZnJv
bSBnZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgVGVtcGxh
dGVzCi0gICAgZnJvbSBtb2RlbHMgaW1wb3J0IFByaW1pdGl2ZVR5cGUsIE9iamVjdFR5cGUsIEFy
cmF5VHlwZSwgRW51bVR5cGUsIEFsaWFzZWRUeXBlLCBGcmFtZXdvcmtzLCBQbGF0Zm9ybXMKKyAg
ICBmcm9tIG1vZGVscyBpbXBvcnQgUHJpbWl0aXZlVHlwZSwgT2JqZWN0VHlwZSwgQXJyYXlUeXBl
LCBFbnVtVHlwZSwgQWxpYXNlZFR5cGUsIEZyYW1ld29ya3MKIAogbG9nID0gbG9nZ2luZy5nZXRM
b2dnZXIoJ2dsb2JhbCcpCiAKQEAgLTk0LDM1ICs5NCwyOCBAQCBfVFlQRVNfV0lUSF9PUEVOX0ZJ
RUxEUyA9IHsKIH0KIAogY2xhc3MgR2VuZXJhdG9yOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBt
b2RlbCwgcGxhdGZvcm0sIGlucHV0X2ZpbGVwYXRoKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwg
bW9kZWwsIGlucHV0X2ZpbGVwYXRoKToKICAgICAgICAgc2VsZi5fbW9kZWwgPSBtb2RlbAotICAg
ICAgICBzZWxmLl9wbGF0Zm9ybSA9IHBsYXRmb3JtCiAgICAgICAgIHNlbGYuX2lucHV0X2ZpbGVw
YXRoID0gaW5wdXRfZmlsZXBhdGgKICAgICAgICAgc2VsZi5fc2V0dGluZ3MgPSB7fQogCiAgICAg
ZGVmIG1vZGVsKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5fbW9kZWwKIAotICAgIGRlZiBw
bGF0Zm9ybShzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX3BsYXRmb3JtCi0KICAgICBkZWYg
c2V0X2dlbmVyYXRvcl9zZXR0aW5nKHNlbGYsIGtleSwgdmFsdWUpOgogICAgICAgICBzZWxmLl9z
ZXR0aW5nc1trZXldID0gdmFsdWUKIAotICAgIGRlZiBjYW5fZ2VuZXJhdGVfcGxhdGZvcm0oc2Vs
ZiwgbW9kZWxfcGxhdGZvcm0pOgotICAgICAgICByZXR1cm4gbW9kZWxfcGxhdGZvcm0gaXMgUGxh
dGZvcm1zLkdlbmVyaWMgb3Igc2VsZi5fcGxhdGZvcm0gaXMgUGxhdGZvcm1zLkFsbCBvciBtb2Rl
bF9wbGF0Zm9ybSBpcyBzZWxmLl9wbGF0Zm9ybQotCiAgICAgZGVmIHZlcnNpb25fZm9yX2RvbWFp
bihzZWxmLCBkb21haW4pOgogICAgICAgICByZXR1cm4gZG9tYWluLnZlcnNpb24oKQogCiAgICAg
ZGVmIHR5cGVfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToKLSAgICAgICAg
cmV0dXJuIFt0eXBlX2RlY2xhcmF0aW9uIGZvciB0eXBlX2RlY2xhcmF0aW9uIGluIGRvbWFpbi5h
bGxfdHlwZV9kZWNsYXJhdGlvbnMoKSBpZiBzZWxmLmNhbl9nZW5lcmF0ZV9wbGF0Zm9ybSh0eXBl
X2RlY2xhcmF0aW9uLnBsYXRmb3JtKV0KKyAgICAgICAgcmV0dXJuIGRvbWFpbi5hbGxfdHlwZV9k
ZWNsYXJhdGlvbnMoKQogCiAgICAgZGVmIGNvbW1hbmRzX2Zvcl9kb21haW4oc2VsZiwgZG9tYWlu
KToKLSAgICAgICAgcmV0dXJuIFtjb21tYW5kIGZvciBjb21tYW5kIGluIGRvbWFpbi5hbGxfY29t
bWFuZHMoKSBpZiBzZWxmLmNhbl9nZW5lcmF0ZV9wbGF0Zm9ybShjb21tYW5kLnBsYXRmb3JtKV0K
KyAgICAgICAgcmV0dXJuIGRvbWFpbi5hbGxfY29tbWFuZHMoKQogCiAgICAgZGVmIGV2ZW50c19m
b3JfZG9tYWluKHNlbGYsIGRvbWFpbik6Ci0gICAgICAgIHJldHVybiBbZXZlbnQgZm9yIGV2ZW50
IGluIGRvbWFpbi5hbGxfZXZlbnRzKCkgaWYgc2VsZi5jYW5fZ2VuZXJhdGVfcGxhdGZvcm0oZXZl
bnQucGxhdGZvcm0pXQorICAgICAgICByZXR1cm4gZG9tYWluLmFsbF9ldmVudHMoKQogCiAgICAg
IyBUaGUgZ29vZnkgbmFtZSBpcyB0byBkaXNhbWJpZ3VhdGUgZ2VuZXJhdG9yIHNldHRpbmdzIGZy
b20gZnJhbWV3b3JrIHNldHRpbmdzLgogICAgIGRlZiBnZXRfZ2VuZXJhdG9yX3NldHRpbmcoc2Vs
Ziwga2V5LCBkZWZhdWx0PU5vbmUpOgpAQCAtMjY3LDIyICsyNjAsMTUgQEAgY2xhc3MgR2VuZXJh
dG9yOgogICAgICAgICBzZWxmLl9hc3NpZ25lZF9lbnVtX3ZhbHVlcy5hcHBlbmQoZW51bV92YWx1
ZSkKIAogICAgICMgTWlzY2VsbGFuZW91cyB0ZXh0IG1hbmlwdWxhdGlvbiByb3V0aW5lcy4KLSAg
ICBkZWYgd3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oc2VsZiwgZG9tYWluLCB0ZXh0KToKLSAg
ICAgICAgaWYgc2VsZi5tb2RlbCgpLmZyYW1ld29yayBpcyBGcmFtZXdvcmtzLldlYkluc3BlY3Rv
cjoKLSAgICAgICAgICAgIHJldHVybiB0ZXh0Ci0gICAgICAgIGd1YXJkID0gZG9tYWluLmZlYXR1
cmVfZ3VhcmQKLSAgICAgICAgaWYgZ3VhcmQ6Ci0gICAgICAgICAgICByZXR1cm4gR2VuZXJhdG9y
LndyYXBfd2l0aF9ndWFyZChndWFyZCwgdGV4dCkKKyAgICBkZWYgd3JhcF93aXRoX2d1YXJkX2Zv
cl9jb25kaXRpb24oc2VsZiwgY29uZGl0aW9uLCB0ZXh0KToKKyAgICAgICAgaWYgY29uZGl0aW9u
OgorICAgICAgICAgICAgcmV0dXJuICdcbicuam9pbihbCisgICAgICAgICAgICAgICAgJyNpZiAl
cycgJSBjb25kaXRpb24sCisgICAgICAgICAgICAgICAgdGV4dCwKKyAgICAgICAgICAgICAgICAn
I2VuZGlmIC8vICVzJyAlIGNvbmRpdGlvbiwKKyAgICAgICAgICAgIF0pCiAgICAgICAgIHJldHVy
biB0ZXh0CiAKLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIHdyYXBfd2l0aF9ndWFyZChndWFy
ZCwgdGV4dCk6Ci0gICAgICAgIHJldHVybiAnXG4nLmpvaW4oWwotICAgICAgICAgICAgJyNpZiAl
cycgJSBndWFyZCwKLSAgICAgICAgICAgIHRleHQsCi0gICAgICAgICAgICAnI2VuZGlmIC8vICVz
JyAlIGd1YXJkLAotICAgICAgICBdKQotCiAgICAgQHN0YXRpY21ldGhvZAogICAgIGRlZiBzdHls
aXplZF9uYW1lX2Zvcl9lbnVtX3ZhbHVlKGVudW1fdmFsdWUpOgogICAgICAgICByZWdleCA9ICco
JXMpJyAlICJ8Ii5qb2luKF9BTFdBWVNfU1BFQ0lBTENBU0VEX0VOVU1fVkFMVUVfU1VCU1RSSU5H
UykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9j
b2RlZ2VuL2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5CmluZGV4IDg5MTY4
MWZmZDcxLi44NDdhOTJkMDkxNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yX3RlbXBsYXRlcy5weQorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3JfdGVt
cGxhdGVzLnB5CkBAIC01Nyw1ICs1Nyw0IEBAIGNsYXNzIEdlbmVyYXRvclRlbXBsYXRlczoKICAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gJHtpbnB1dEZpbGVu
YW1lfQotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weSIiIikKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSAk
e2lucHV0RmlsZW5hbWV9IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkiIiIp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9tb2RlbHMucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9tb2RlbHMucHkKaW5kZXggNmQ5N2EwOTNjMzQuLjFkZjJiZGY2NjVhIDEwMDc1NQot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9tb2Rl
bHMucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVn
ZW4vbW9kZWxzLnB5CkBAIC0xMzYsNDEgKzEzNiw2IEBAIGNsYXNzIEZyYW1ld29ya3M6CiAgICAg
VGVzdCA9IEZyYW1ld29yaygiVGVzdCIpCiAKIAotY2xhc3MgUGxhdGZvcm06Ci0gICAgZGVmIF9f
aW5pdF9fKHNlbGYsIG5hbWUpOgotICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCi0KLSAgICBAc3Rh
dGljbWV0aG9kCi0gICAgZGVmIGZyb21TdHJpbmcocGxhdGZvcm1TdHJpbmcpOgotICAgICAgICBw
bGF0Zm9ybVN0cmluZyA9IHBsYXRmb3JtU3RyaW5nLmxvd2VyKCkKLSAgICAgICAgaWYgcGxhdGZv
cm1TdHJpbmcgPT0gImlvcyI6Ci0gICAgICAgICAgICByZXR1cm4gUGxhdGZvcm1zLmlPUwotCi0g
ICAgICAgIGlmIHBsYXRmb3JtU3RyaW5nID09ICJtYWNvcyI6Ci0gICAgICAgICAgICByZXR1cm4g
UGxhdGZvcm1zLm1hY09TCi0KLSAgICAgICAgaWYgcGxhdGZvcm1TdHJpbmcgPT0gImFsbCI6Ci0g
ICAgICAgICAgICByZXR1cm4gUGxhdGZvcm1zLkFsbAotCi0gICAgICAgIGlmIHBsYXRmb3JtU3Ry
aW5nID09ICJnZW5lcmljIiBvciBub3QgcGxhdGZvcm1TdHJpbmc6Ci0gICAgICAgICAgICByZXR1
cm4gUGxhdGZvcm1zLkdlbmVyaWMKLQotICAgICAgICByYWlzZSBQYXJzZUV4Y2VwdGlvbigiVW5r
bm93biBwbGF0Zm9ybTogJXMiICUgcGxhdGZvcm1TdHJpbmcpCi0KLQotY2xhc3MgUGxhdGZvcm1z
OgotICAgIEFsbCA9IFBsYXRmb3JtKCJhbGwiKQotICAgIEdlbmVyaWMgPSBQbGF0Zm9ybSgiZ2Vu
ZXJpYyIpCi0gICAgaU9TID0gUGxhdGZvcm0oImlvcyIpCi0gICAgbWFjT1MgPSBQbGF0Zm9ybSgi
bWFjb3MiKQotCi0gICAgIyBBbGxvdyBpdGVyYXRpb24gb3ZlciBhbGwgcGxhdGZvcm1zLiBTZWUg
PGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNTQzNDQwMC8+LgotICAgIGNsYXNz
IF9fbWV0YWNsYXNzX18odHlwZSk6Ci0gICAgICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKLSAgICAg
ICAgICAgIGZvciBhdHRyIGluIGRpcihQbGF0Zm9ybXMpOgotICAgICAgICAgICAgICAgIGlmIG5v
dCBhdHRyLnN0YXJ0c3dpdGgoIl9fIik6Ci0gICAgICAgICAgICAgICAgICAgIHlpZWxkIGdldGF0
dHIoUGxhdGZvcm1zLCBhdHRyKQotCiBjbGFzcyBUeXBlUmVmZXJlbmNlOgogICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCB0eXBlX2tpbmQsIHJlZmVyZW5jZWRfdHlwZV9uYW1lLCBlbnVtX3ZhbHVlcywg
YXJyYXlfaXRlbXMpOgogICAgICAgICBzZWxmLnR5cGVfa2luZCA9IHR5cGVfa2luZApAQCAtNDM5
LDcgKzQwNCw3IEBAIGNsYXNzIFByb3RvY29sOgogICAgICAgICAgICAgICAgIHJhaXNlIFBhcnNl
RXhjZXB0aW9uKCJNYWxmb3JtZWQgZG9tYWluIHNwZWNpZmljYXRpb246IGV2ZW50cyBpcyBub3Qg
YW4gYXJyYXkiKQogICAgICAgICAgICAgZXZlbnRzLmV4dGVuZChbc2VsZi5wYXJzZV9ldmVudChl
dmVudCwgZGVidWdnYWJsZV90eXBlcykgZm9yIGV2ZW50IGluIGpzb25bJ2V2ZW50cyddXSkKIAot
ICAgICAgICBzZWxmLmRvbWFpbnMuYXBwZW5kKERvbWFpbihqc29uWydkb21haW4nXSwganNvbi5n
ZXQoJ2Rlc2NyaXB0aW9uJywgJycpLCBqc29uLmdldCgnZmVhdHVyZUd1YXJkJyksIGRlYnVnZ2Fi
bGVfdHlwZXMsIHRhcmdldF90eXBlcywgaXNTdXBwbGVtZW50YWwsIHZlcnNpb24sIHR5cGVzLCBj
b21tYW5kcywgZXZlbnRzKSkKKyAgICAgICAgc2VsZi5kb21haW5zLmFwcGVuZChEb21haW4oanNv
blsnZG9tYWluJ10sIGpzb24uZ2V0KCdkZXNjcmlwdGlvbicsICcnKSwganNvbi5nZXQoJ2NvbmRp
dGlvbicpLCBkZWJ1Z2dhYmxlX3R5cGVzLCB0YXJnZXRfdHlwZXMsIGlzU3VwcGxlbWVudGFsLCB2
ZXJzaW9uLCB0eXBlcywgY29tbWFuZHMsIGV2ZW50cykpCiAKICAgICBkZWYgcGFyc2VfdHlwZV9k
ZWNsYXJhdGlvbihzZWxmLCBqc29uKToKICAgICAgICAgY2hlY2tfZm9yX3JlcXVpcmVkX3Byb3Bl
cnRpZXMoWydpZCcsICd0eXBlJ10sIGpzb24sICJ0eXBlIikKQEAgLTQ1Nyw4ICs0MjIsNyBAQCBj
bGFzcyBQcm90b2NvbDoKICAgICAgICAgICAgIHJhaXNlIFBhcnNlRXhjZXB0aW9uKCJNYWxmb3Jt
ZWQgZG9tYWluIHNwZWNpZmljYXRpb246IHR5cGUgZGVjbGFyYXRpb24gZm9yICVzIGhhcyBkdXBs
aWNhdGUgbWVtYmVyIG5hbWVzIiAlIGpzb25bJ2lkJ10pCiAKICAgICAgICAgdHlwZV9yZWYgPSBU
eXBlUmVmZXJlbmNlKGpzb25bJ3R5cGUnXSwganNvbi5nZXQoJyRyZWYnKSwganNvbi5nZXQoJ2Vu
dW0nKSwganNvbi5nZXQoJ2l0ZW1zJykpCi0gICAgICAgIHBsYXRmb3JtID0gUGxhdGZvcm0uZnJv
bVN0cmluZyhqc29uLmdldCgncGxhdGZvcm0nLCAnZ2VuZXJpYycpKQotICAgICAgICByZXR1cm4g
VHlwZURlY2xhcmF0aW9uKGpzb25bJ2lkJ10sIHR5cGVfcmVmLCBqc29uLmdldCgiZGVzY3JpcHRp
b24iLCAiIiksIHBsYXRmb3JtLCB0eXBlX21lbWJlcnMpCisgICAgICAgIHJldHVybiBUeXBlRGVj
bGFyYXRpb24oanNvblsnaWQnXSwgdHlwZV9yZWYsIGpzb24uZ2V0KCJkZXNjcmlwdGlvbiIsICIi
KSwganNvbi5nZXQoJ2NvbmRpdGlvbicpLCB0eXBlX21lbWJlcnMpCiAKICAgICBkZWYgcGFyc2Vf
dHlwZV9tZW1iZXIoc2VsZiwganNvbik6CiAgICAgICAgIGNoZWNrX2Zvcl9yZXF1aXJlZF9wcm9w
ZXJ0aWVzKFsnbmFtZSddLCBqc29uLCAidHlwZSBtZW1iZXIiKQpAQCAtNTA5LDggKzQ3Myw3IEBA
IGNsYXNzIFByb3RvY29sOgogICAgICAgICAgICAgaWYgbGVuKGR1cGxpY2F0ZV9uYW1lcykgPiAw
OgogICAgICAgICAgICAgICAgIHJhaXNlIFBhcnNlRXhjZXB0aW9uKCJNYWxmb3JtZWQgZG9tYWlu
IHNwZWNpZmljYXRpb246IHJldHVybiBwYXJhbWV0ZXIgbGlzdCBmb3IgY29tbWFuZCAlcyBoYXMg
ZHVwbGljYXRlIHBhcmFtZXRlciBuYW1lcyIgJSBqc29uWyduYW1lJ10pCiAKLSAgICAgICAgcGxh
dGZvcm0gPSBQbGF0Zm9ybS5mcm9tU3RyaW5nKGpzb24uZ2V0KCdwbGF0Zm9ybScsICdnZW5lcmlj
JykpCi0gICAgICAgIHJldHVybiBDb21tYW5kKGpzb25bJ25hbWUnXSwgdGFyZ2V0X3R5cGVzLCBj
YWxsX3BhcmFtZXRlcnMsIHJldHVybl9wYXJhbWV0ZXJzLCBqc29uLmdldCgnZGVzY3JpcHRpb24n
LCAiIiksIHBsYXRmb3JtLCBqc29uLmdldCgnYXN5bmMnLCBGYWxzZSkpCisgICAgICAgIHJldHVy
biBDb21tYW5kKGpzb25bJ25hbWUnXSwgdGFyZ2V0X3R5cGVzLCBjYWxsX3BhcmFtZXRlcnMsIHJl
dHVybl9wYXJhbWV0ZXJzLCBqc29uLmdldCgnZGVzY3JpcHRpb24nLCAiIiksIGpzb24uZ2V0KCdj
b25kaXRpb24nKSwganNvbi5nZXQoJ2FzeW5jJywgRmFsc2UpKQogCiAgICAgZGVmIHBhcnNlX2V2
ZW50KHNlbGYsIGpzb24sIGRlYnVnZ2FibGVfdHlwZXMpOgogICAgICAgICBjaGVja19mb3JfcmVx
dWlyZWRfcHJvcGVydGllcyhbJ25hbWUnXSwganNvbiwgImV2ZW50IikKQEAgLTU0NCw4ICs1MDcs
NyBAQCBjbGFzcyBQcm90b2NvbDoKICAgICAgICAgICAgIGlmIGxlbihkdXBsaWNhdGVfbmFtZXMp
ID4gMDoKICAgICAgICAgICAgICAgICByYWlzZSBQYXJzZUV4Y2VwdGlvbigiTWFsZm9ybWVkIGRv
bWFpbiBzcGVjaWZpY2F0aW9uOiBwYXJhbWV0ZXIgbGlzdCBmb3IgZXZlbnQgJXMgaGFzIGR1cGxp
Y2F0ZSBwYXJhbWV0ZXIgbmFtZXMiICUganNvblsnbmFtZSddKQogCi0gICAgICAgIHBsYXRmb3Jt
ID0gUGxhdGZvcm0uZnJvbVN0cmluZyhqc29uLmdldCgncGxhdGZvcm0nLCAnZ2VuZXJpYycpKQot
ICAgICAgICByZXR1cm4gRXZlbnQoanNvblsnbmFtZSddLCB0YXJnZXRfdHlwZXMsIGV2ZW50X3Bh
cmFtZXRlcnMsIGpzb24uZ2V0KCdkZXNjcmlwdGlvbicsICIiKSwgcGxhdGZvcm0pCisgICAgICAg
IHJldHVybiBFdmVudChqc29uWyduYW1lJ10sIHRhcmdldF90eXBlcywgZXZlbnRfcGFyYW1ldGVy
cywganNvbi5nZXQoJ2Rlc2NyaXB0aW9uJywgIiIpLCBqc29uLmdldCgnY29uZGl0aW9uJykpCiAK
ICAgICBkZWYgcGFyc2VfY2FsbF9vcl9yZXR1cm5fcGFyYW1ldGVyKHNlbGYsIGpzb24pOgogICAg
ICAgICBjaGVja19mb3JfcmVxdWlyZWRfcHJvcGVydGllcyhbJ25hbWUnXSwganNvbiwgInBhcmFt
ZXRlciIpCkBAIC02NDMsMTAgKzYwNSwxMCBAQCBjbGFzcyBQcm90b2NvbDoKIAogCiBjbGFzcyBE
b21haW46Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGRvbWFpbl9uYW1lLCBkZXNjcmlwdGlvbiwg
ZmVhdHVyZV9ndWFyZCwgZGVidWdnYWJsZV90eXBlcywgdGFyZ2V0X3R5cGVzLCBpc1N1cHBsZW1l
bnRhbCwgdmVyc2lvbiwgdHlwZV9kZWNsYXJhdGlvbnMsIGNvbW1hbmRzLCBldmVudHMpOgorICAg
IGRlZiBfX2luaXRfXyhzZWxmLCBkb21haW5fbmFtZSwgZGVzY3JpcHRpb24sIGNvbmRpdGlvbiwg
ZGVidWdnYWJsZV90eXBlcywgdGFyZ2V0X3R5cGVzLCBpc1N1cHBsZW1lbnRhbCwgdmVyc2lvbiwg
dHlwZV9kZWNsYXJhdGlvbnMsIGNvbW1hbmRzLCBldmVudHMpOgogICAgICAgICBzZWxmLmRvbWFp
bl9uYW1lID0gZG9tYWluX25hbWUKICAgICAgICAgc2VsZi5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0
aW9uCi0gICAgICAgIHNlbGYuZmVhdHVyZV9ndWFyZCA9IGZlYXR1cmVfZ3VhcmQKKyAgICAgICAg
c2VsZi5jb25kaXRpb24gPSBjb25kaXRpb24KICAgICAgICAgc2VsZi5kZWJ1Z2dhYmxlX3R5cGVz
ID0gZGVidWdnYWJsZV90eXBlcwogICAgICAgICBzZWxmLnRhcmdldF90eXBlcyA9IHRhcmdldF90
eXBlcwogICAgICAgICBzZWxmLmlzX3N1cHBsZW1lbnRhbCA9IGlzU3VwcGxlbWVudGFsCkBAIC02
ODYsMTEgKzY0OCwxMSBAQCBjbGFzcyBEb21haW5zOgogCiAKIGNsYXNzIFR5cGVEZWNsYXJhdGlv
bjoKLSAgICBkZWYgX19pbml0X18oc2VsZiwgdHlwZV9uYW1lLCB0eXBlX3JlZiwgZGVzY3JpcHRp
b24sIHBsYXRmb3JtLCB0eXBlX21lbWJlcnMpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0eXBl
X25hbWUsIHR5cGVfcmVmLCBkZXNjcmlwdGlvbiwgY29uZGl0aW9uLCB0eXBlX21lbWJlcnMpOgog
ICAgICAgICBzZWxmLnR5cGVfbmFtZSA9IHR5cGVfbmFtZQogICAgICAgICBzZWxmLnR5cGVfcmVm
ID0gdHlwZV9yZWYKICAgICAgICAgc2VsZi5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uCi0gICAg
ICAgIHNlbGYucGxhdGZvcm0gPSBwbGF0Zm9ybQorICAgICAgICBzZWxmLmNvbmRpdGlvbiA9IGNv
bmRpdGlvbgogICAgICAgICBzZWxmLnR5cGVfbWVtYmVycyA9IHR5cGVfbWVtYmVycwogCiAgICAg
ICAgIGlmIHNlbGYudHlwZV9uYW1lICE9IHVjZmlyc3Qoc2VsZi50eXBlX25hbWUpOgpAQCAtNzM0
LDEzICs2OTYsMTMgQEAgY2xhc3MgUGFyYW1ldGVyOgogCiAKIGNsYXNzIENvbW1hbmQ6Ci0gICAg
ZGVmIF9faW5pdF9fKHNlbGYsIGNvbW1hbmRfbmFtZSwgdGFyZ2V0X3R5cGVzLCBjYWxsX3BhcmFt
ZXRlcnMsIHJldHVybl9wYXJhbWV0ZXJzLCBkZXNjcmlwdGlvbiwgcGxhdGZvcm0sIGlzX2FzeW5j
KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29tbWFuZF9uYW1lLCB0YXJnZXRfdHlwZXMsIGNh
bGxfcGFyYW1ldGVycywgcmV0dXJuX3BhcmFtZXRlcnMsIGRlc2NyaXB0aW9uLCBjb25kaXRpb24s
IGlzX2FzeW5jKToKICAgICAgICAgc2VsZi5jb21tYW5kX25hbWUgPSBjb21tYW5kX25hbWUKICAg
ICAgICAgc2VsZi50YXJnZXRfdHlwZXMgPSB0YXJnZXRfdHlwZXMKICAgICAgICAgc2VsZi5jYWxs
X3BhcmFtZXRlcnMgPSBjYWxsX3BhcmFtZXRlcnMKICAgICAgICAgc2VsZi5yZXR1cm5fcGFyYW1l
dGVycyA9IHJldHVybl9wYXJhbWV0ZXJzCiAgICAgICAgIHNlbGYuZGVzY3JpcHRpb24gPSBkZXNj
cmlwdGlvbgotICAgICAgICBzZWxmLnBsYXRmb3JtID0gcGxhdGZvcm0KKyAgICAgICAgc2VsZi5j
b25kaXRpb24gPSBjb25kaXRpb24KICAgICAgICAgc2VsZi5pc19hc3luYyA9IGlzX2FzeW5jCiAK
ICAgICBkZWYgcmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMoc2VsZiwgcHJvdG9jb2wsIGRvbWFpbik6
CkBAIC03NTQsMTIgKzcxNiwxMiBAQCBjbGFzcyBDb21tYW5kOgogCiAKIGNsYXNzIEV2ZW50Ogot
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBldmVudF9uYW1lLCB0YXJnZXRfdHlwZXMsIGV2ZW50X3Bh
cmFtZXRlcnMsIGRlc2NyaXB0aW9uLCBwbGF0Zm9ybSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYs
IGV2ZW50X25hbWUsIHRhcmdldF90eXBlcywgZXZlbnRfcGFyYW1ldGVycywgZGVzY3JpcHRpb24s
IGNvbmRpdGlvbik6CiAgICAgICAgIHNlbGYuZXZlbnRfbmFtZSA9IGV2ZW50X25hbWUKICAgICAg
ICAgc2VsZi50YXJnZXRfdHlwZXMgPSB0YXJnZXRfdHlwZXMKICAgICAgICAgc2VsZi5ldmVudF9w
YXJhbWV0ZXJzID0gZXZlbnRfcGFyYW1ldGVycwogICAgICAgICBzZWxmLmRlc2NyaXB0aW9uID0g
ZGVzY3JpcHRpb24KLSAgICAgICAgc2VsZi5wbGF0Zm9ybSA9IHBsYXRmb3JtCisgICAgICAgIHNl
bGYuY29uZGl0aW9uID0gY29uZGl0aW9uCiAKICAgICBkZWYgcmVzb2x2ZV90eXBlX3JlZmVyZW5j
ZXMoc2VsZiwgcHJvdG9jb2wsIGRvbWFpbik6CiAgICAgICAgIGxvZy5kZWJ1ZygiPj4gUmVzb2x2
aW5nIHR5cGUgcmVmZXJlbmNlcyBmb3IgcGFyYW1ldGVycyBpbiBldmVudDogJXMiICUgc2VsZi5l
dmVudF9uYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vb2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzLnB5IGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vb2JqY19nZW5lcmF0b3JfdGVtcGxh
dGVzLnB5CmluZGV4IDIyNzQyMTUxOTk0Li40MjFjYjFiYTI2MyAxMDA3NTUKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vb2JqY19nZW5lcmF0b3Jf
dGVtcGxhdGVzLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL29iamNfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weQpAQCAtMTI3LDggKzEyNyw3IEBA
IHByaXZhdGU6CiAke3N1Y2Nlc3NDYWxsYmFja30KICR7Y29udmVyc2lvbnN9CiAke2ludm9jYXRp
b259Ci19Ci0iIiIpCit9IiIiKQogCiAgICAgQ29uZmlndXJhdGlvbkNvbW1hbmRQcm9wZXJ0eSA9
ICgKICAgICAiIiJAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluLCBzZXR0ZXI9c2V0JHtkb21h
aW5OYW1lfUhhbmRsZXI6KSBpZDwke29iamNQcmVmaXh9JHtkb21haW5OYW1lfURvbWFpbkhhbmRs
ZXI+ICR7dmFyaWFibGVOYW1lUHJlZml4fUhhbmRsZXI7IiIiKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vcHJlcHJvY2Vzcy5wbCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL3ByZXByb2Nl
c3MucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjE5NTM0MWFiYjNh
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vcHJlcHJvY2Vzcy5wbApAQCAtMCwwICsxLDExNSBAQAorIyEgL3Vzci9iaW4v
ZW52IHBlcmwKKyMKKyMgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IHByb2plY3QK
KyMKKyMgICBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorIworIyAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyMgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworIyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIyAgIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyMgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorIyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisjICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyAgIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisjICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyMgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKKwordXNlIENvbmZpZzsKK3VzZSBHZXRv
cHQ6Okxvbmc7Cit1c2UgSVBDOjpPcGVuMjsKK3VzZSBJUEM6Ok9wZW4zOwordXNlIFRleHQ6OlBh
cnNlV29yZHM7CisKK215ICRpbnB1dFBhdGg7CitteSAkZGVmaW5lczsKK215ICRwcmVwcm9jZXNz
b3I7CitteSAkb3V0cHV0UGF0aDsKK0dldE9wdGlvbnMoJ2lucHV0PXMnID0+IFwkaW5wdXRQYXRo
LAorICAgICAgICAgICAnZGVmaW5lcz1zJyA9PiBcJGRlZmluZXMsCisgICAgICAgICAgICdwcmVw
cm9jZXNzb3I9cycgPT4gXCRwcmVwcm9jZXNzb3IsCisgICAgICAgICAgICdvdXRwdXQ9cycgPT4g
XCRvdXRwdXRQYXRoKTsKKworbXkgQGFyZ3MgPSAoKTsKK2lmICghJHByZXByb2Nlc3Nvcikgewor
ICAgIGlmICgkQ29uZmlnOjpDb25maWd7Im9zbmFtZSJ9IGVxICJNU1dpbjMyIikgeworICAgICAg
ICAkcHJlcHJvY2Vzc29yID0gJEVOVntDQ30gfHwgImNsIjsKKyAgICAgICAgcHVzaChAYXJncywg
cXcoL25vbG9nbyAvRVAgL1RQIC9DKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgJHByZXByb2Nl
c3NvciA9ICRFTlZ7Q0N9IHx8ICgteCAiL3Vzci9iaW4vY2xhbmciID8gIi91c3IvYmluL2NsYW5n
IiA6ICIvdXNyL2Jpbi9nY2MiKTsKKyAgICAgICAgcHVzaChAYXJncywgcXcoLUUgLVAgLXggYysr
IC1DKSk7CisgICAgfQorfQorCitpZiAoJENvbmZpZzo6Q29uZmlneyJvc25hbWUifSBlcSAiZGFy
d2luIikgeworICAgIHB1c2goQGFyZ3MsICItSSIgLiAkRU5We0JVSUxUX1BST0RVQ1RTX0RJUn0g
LiAiL3Vzci9sb2NhbC9pbmNsdWRlIikgaWYgJEVOVntCVUlMVF9QUk9EVUNUU19ESVJ9OworICAg
IHB1c2goQGFyZ3MsICItaXN5c3Jvb3QiLCAkRU5We1NES1JPT1R9KSBpZiAkRU5We1NES1JPT1R9
OworfQorCisjIFJlbW92ZSBkb3VibGUgcXVvdGF0aW9ucyBmcm9tICRkZWZpbmVzIGFuZCBleHRy
YWN0IG1hY3Jvcy4KKyMgRm9yIGV4YW1wbGUsIGlmICRkZWZpbmVzIGlzICcgIkE9MSIgIkI9MSIg
Qz0xICIiICAgIEQgICcsCisjIHRoZW4gaXQgaXMgY29udmVydGVkIGludG8gZm91ciBtYWNyb3Mg
LURBPTEsIC1EQj0xLCAtREM9MSBhbmQgLURELgorJGRlZmluZXMgPX4gcy9cIi8vZzsKK215IEBt
YWNyb3MgPSBncmVwIHsgJF8gfSBzcGxpdCgvXHMrLywgJGRlZmluZXMpOyAjIGdyZXAgc2tpcHMg
ZW1wdHkgbWFjcm9zLgorQG1hY3JvcyA9IG1hcCB7ICItRCRfIiB9IEBtYWNyb3M7CisKK215ICRw
aWQgPSAwOworaWYgKCRDb25maWd7b3NuYW1lfSBlcSAiY3lnd2luIikgeworICAgICRFTlZ7UEFU
SH0gPSAiJEVOVntQQVRIfTovY3lnZHJpdmUvYy9jeWd3aW4vYmluIjsKKyAgICBteSBAcHJlcHJv
Y2Vzc29yQW5kRmxhZ3M7CisgICAgaWYgKCRwcmVwcm9jZXNzb3IgZXEgIi91c3IvYmluL2djYyIp
IHsKKyAgICAgICAgQHByZXByb2Nlc3NvckFuZEZsYWdzID0gc3BsaXQoJyAnLCAkcHJlcHJvY2Vz
c29yKTsKKyAgICB9IGVsc2UgeworICAgICAgICAkcHJlcHJvY2Vzc29yID1+IC8iKC4qKSIvOwor
ICAgICAgICBjaG9tcChteSAkcHJlcHJvY2Vzc29yID0gYGN5Z3BhdGggLXUgJyQxJ2ApIGlmIChk
ZWZpbmVkICQxKTsKKyAgICAgICAgY2hvbXAoJGlucHV0UGF0aCA9IGBjeWdwYXRoIC13ICckaW5w
dXRQYXRoJ2ApOworICAgICAgICBAcHJlcHJvY2Vzc29yQW5kRmxhZ3MgPSAoJHByZXByb2Nlc3Nv
ciwgIi9ub2xvZ28iLCAiL0VQIik7CisgICAgfQorCisgICAgIyBUaGlzIGNhbGwgY2FuIGZhaWwg
aWYgV2luZG93cyByZWJhc2VzIGN5Z3dpbiwgc28gcmV0cnkgYSBmZXcgdGltZXMgdW50aWwgaXQg
c3VjY2VlZHMuCisgICAgZm9yIChteSAkdHJpZXMgPSAwOyAhJHBpZCAmJiAoJHRyaWVzIDwgMjAp
OyAkdHJpZXMrKykgeworICAgICAgICBldmFsIHsKKyAgICAgICAgICAgICMgU3VwcHJlc3MgU1RE
RVJSIHNvIHRoYXQgaWYgd2UncmUgdXNpbmcgY2wuZXhlLCB0aGUgb3V0cHV0CisgICAgICAgICAg
ICAjIG5hbWUgaXNuJ3QgbmVlZGxlc3NseSBlY2hvZWQuCisgICAgICAgICAgICB1c2UgU3ltYm9s
ICdnZW5zeW0nOyBteSAkZXJyID0gZ2Vuc3ltOworICAgICAgICAgICAgJHBpZCA9IG9wZW4zKFwq
UFBfSU4sIFwqUFBfT1VULCAkZXJyLCBAcHJlcHJvY2Vzc29yQW5kRmxhZ3MsIEBhcmdzLCBAbWFj
cm9zLCAkaW5wdXRQYXRoKTsKKyAgICAgICAgICAgIDE7CisgICAgICAgIH0gb3IgZG8geworICAg
ICAgICAgICAgc2xlZXAgMTsKKyAgICAgICAgfQorICAgIH0KK30gZWxzaWYgKCRDb25maWc6OkNv
bmZpZ3sib3NuYW1lIn0gZXEgIk1TV2luMzIiKSB7CisgICAgIyBTdXBwcmVzcyBTVERFUlIgc28g
dGhhdCBpZiB3ZSdyZSB1c2luZyBjbC5leGUsIHRoZSBvdXRwdXQKKyAgICAjIG5hbWUgaXNuJ3Qg
bmVlZGxlc3NseSBlY2hvZWQuCisgICAgdXNlIFN5bWJvbCAnZ2Vuc3ltJzsgbXkgJGVyciA9IGdl
bnN5bTsKKyAgICAkcGlkID0gb3BlbjMoXCpQUF9JTiwgXCpQUF9PVVQsICRlcnIsICRwcmVwcm9j
ZXNzb3IsIEBhcmdzLCBAbWFjcm9zLCAkaW5wdXRQYXRoKTsKK30gZWxzZSB7CisgICAgJHBpZCA9
IG9wZW4yKFwqUFBfT1VULCBcKlBQX0lOLCBzaGVsbHdvcmRzKCRwcmVwcm9jZXNzb3IpLCBAYXJn
cywgQG1hY3JvcywgJGlucHV0UGF0aCk7Cit9CitjbG9zZSBQUF9JTjsKK215IEBsaW5lcyA9IDxQ
UF9PVVQ+OworY2xvc2UgUFBfT1VUOword2FpdHBpZCgkcGlkLCAwKTsKKworb3BlbiBPVVRQVVQs
ICI+JG91dHB1dFBhdGgiIHx8IGRpZSAiQ291bGQgbm90IG9wZW4gJG91dHB1dFBhdGggZm9yIHdy
aXRpbmciOworZm9yZWFjaCBteSAkbGluZSAoQGxpbmVzKSB7CisgICAgIyBJZ25vcmUgd2hpdGVz
cGFjZSBsaW5lcy4KKyAgICBpZiAoJGxpbmUgPX4gL15ccyokLykgeworICAgICAgICBuZXh0Owor
ICAgIH0KKworICAgICMgQWRkIG5ld2xpbmVzIGJlZm9yZSBjb21tZW50cy4KKyAgICBpZiAoJGxp
bmUgPX4gL15cL1wvLykgeworICAgICAgICBwcmludCBPVVRQVVQgIlxuIjsKKyAgICB9CisKKyAg
ICBwcmludCBPVVRQVVQgJGxpbmU7Cit9CitjbG9zZSBPVVRQVVQ7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQppbmRleCAyYjFkODc4
MmNiMi4uOGNlZjAwOTVmN2UgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQpAQCAtMTE3LDcgKzExNyw2IEBAIGRlZiBnZW5lcmF0
ZV9mcm9tX3NwZWNpZmljYXRpb24ocHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoPU5vbmUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9kaXJwYXRoPU5vbmUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmNlX291dHB1dD1GYWxzZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWV3b3JrX25hbWU9IiIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtX25hbWU9IiIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdlbmVyYXRlX2Zyb250ZW5kPVRydWUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdlbmVyYXRlX2JhY2tlbmQ9VHJ1ZSk6CiAKQEAgLTEzMCw3ICsxMjks
NiBAQCBkZWYgZ2VuZXJhdGVfZnJvbV9zcGVjaWZpY2F0aW9uKHByaW1hcnlfc3BlY2lmaWNhdGlv
bl9maWxlcGF0aD1Ob25lLAogICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBlOgogICAgICAg
ICAgICAgcmFpc2UgRXhjZXB0aW9uKCJFcnJvciBwYXJzaW5nIHZhbGlkIEpTT04gaW4gZmlsZTog
IiArIGZpbGVwYXRoICsgIlxuUGFyc2UgZXJyb3I6ICIgKyBzdHIoZSkpCiAKLSAgICBwbGF0Zm9y
bSA9IFBsYXRmb3JtLmZyb21TdHJpbmcocGxhdGZvcm1fbmFtZSkKICAgICBwcm90b2NvbCA9IG1v
ZGVscy5Qcm90b2NvbChmcmFtZXdvcmtfbmFtZSkKICAgICBmb3Igc3BlY2lmaWNhdGlvbiBpbiBz
dXBwbGVtZW50YWxfc3BlY2lmaWNhdGlvbl9maWxlcGF0aHM6CiAgICAgICAgIGxvYWRfc3BlY2lm
aWNhdGlvbihwcm90b2NvbCwgc3BlY2lmaWNhdGlvbiwgaXNTdXBwbGVtZW50YWw9VHJ1ZSkKQEAg
LTEzOCw3ICsxMzYsNyBAQCBkZWYgZ2VuZXJhdGVfZnJvbV9zcGVjaWZpY2F0aW9uKHByaW1hcnlf
c3BlY2lmaWNhdGlvbl9maWxlcGF0aD1Ob25lLAogCiAgICAgcHJvdG9jb2wucmVzb2x2ZV90eXBl
cygpCiAKLSAgICBnZW5lcmF0b3JfYXJndW1lbnRzID0gW3Byb3RvY29sLCBwbGF0Zm9ybSwgcHJp
bWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoXQorICAgIGdlbmVyYXRvcl9hcmd1bWVudHMgPSBb
cHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aF0KICAgICBnZW5lcmF0b3Jz
ID0gW10KIAogICAgIGlmIHByb3RvY29sLmZyYW1ld29yayBpcyBGcmFtZXdvcmtzLlRlc3Q6CkBA
IC0xNjIsNyArMTYwLDYgQEAgZGVmIGdlbmVyYXRlX2Zyb21fc3BlY2lmaWNhdGlvbihwcmltYXJ5
X3NwZWNpZmljYXRpb25fZmlsZXBhdGg9Tm9uZSwKICAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQo
T2JqQ1Byb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcigqZ2VuZXJhdG9yX2FyZ3Vt
ZW50cykpCiAKICAgICBlbGlmIHByb3RvY29sLmZyYW1ld29yayBpcyBGcmFtZXdvcmtzLkphdmFT
Y3JpcHRDb3JlOgotICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChKU0JhY2tlbmRDb21tYW5kc0dl
bmVyYXRvcigqZ2VuZXJhdG9yX2FyZ3VtZW50cykpCiAgICAgICAgIGdlbmVyYXRvcnMuYXBwZW5k
KENwcEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKCpnZW5lcmF0b3Jf
YXJndW1lbnRzKSkKICAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoQ3BwQmFja2VuZERpc3BhdGNo
ZXJIZWFkZXJHZW5lcmF0b3IoKmdlbmVyYXRvcl9hcmd1bWVudHMpKQogICAgICAgICBnZW5lcmF0
b3JzLmFwcGVuZChDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKCpn
ZW5lcmF0b3JfYXJndW1lbnRzKSkKQEAgLTIyOSw3ICsyMjYsNiBAQCBkZWYgZ2VuZXJhdGVfZnJv
bV9zcGVjaWZpY2F0aW9uKHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aD1Ob25lLAogCiBp
ZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIGFsbG93ZWRfZnJhbWV3b3JrX25hbWVzID0g
WydKYXZhU2NyaXB0Q29yZScsICdXZWJJbnNwZWN0b3InLCAnV2ViSW5zcGVjdG9yVUknLCAnV2Vi
S2l0JywgJ1Rlc3QnXQotICAgIGFsbG93ZWRfcGxhdGZvcm1fbmFtZXMgPSBbJ2lPUycsICdtYWNP
UycsICdhbGwnLCAnZ2VuZXJpYyddCiAgICAgY2xpX3BhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBh
cnNlcih1c2FnZT0idXNhZ2U6ICVwcm9nIFtvcHRpb25zXSBQcmltYXJ5UHJvdG9jb2wuanNvbiBb
U3VwcGxlbWVudGFsUHJvdG9jb2wuanNvbiAuLi5dIikKICAgICBjbGlfcGFyc2VyLmFkZF9vcHRp
b24oIi1vIiwgIi0tb3V0cHV0RGlyIiwgaGVscD0iRGlyZWN0b3J5IHdoZXJlIGdlbmVyYXRlZCBm
aWxlcyBzaG91bGQgYmUgd3JpdHRlbi4iKQogICAgIGNsaV9wYXJzZXIuYWRkX29wdGlvbigiLS1m
cmFtZXdvcmsiLCB0eXBlPSJjaG9pY2UiLCBjaG9pY2VzPWFsbG93ZWRfZnJhbWV3b3JrX25hbWVz
LCBoZWxwPSJUaGUgZnJhbWV3b3JrIHRoYXQgdGhlIHByaW1hcnkgc3BlY2lmaWNhdGlvbiBiZWxv
bmdzIHRvLiIpCkBAIC0yMzgsNyArMjM0LDYgQEAgaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoK
ICAgICBjbGlfcGFyc2VyLmFkZF9vcHRpb24oIi10IiwgIi0tdGVzdCIsIGFjdGlvbj0ic3RvcmVf
dHJ1ZSIsIGhlbHA9IkVuYWJsZSB0ZXN0IG1vZGUuIFVzZSB1bmlxdWUgb3V0cHV0IGZpbGVuYW1l
cyBjcmVhdGVkIGJ5IHByZXBlbmRpbmcgdGhlIGlucHV0IGZpbGVuYW1lLiIpCiAgICAgY2xpX3Bh
cnNlci5hZGRfb3B0aW9uKCItLWZyb250ZW5kIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgaGVscD0i
R2VuZXJhdGUgY29kZSBmb3IgdGhlIGZyb250ZW5kLXNpZGUgb2YgdGhlIHByb3RvY29sIG9ubHku
IikKICAgICBjbGlfcGFyc2VyLmFkZF9vcHRpb24oIi0tYmFja2VuZCIsIGFjdGlvbj0ic3RvcmVf
dHJ1ZSIsIGhlbHA9IkdlbmVyYXRlIGNvZGUgZm9yIHRoZSBiYWNrZW5kLXNpZGUgb2YgdGhlIHBy
b3RvY29sIG9ubHkuIikKLSAgICBjbGlfcGFyc2VyLmFkZF9vcHRpb24oIi0tcGxhdGZvcm0iLCBk
ZWZhdWx0PSJnZW5lcmljIiwgaGVscD0iVGhlIHBsYXRmb3JtIG9mIHRoZSBiYWNrZW5kIGJlaW5n
IGdlbmVyYXRlZC4gRm9yIGV4YW1wbGUsIHdlIGNvbXBpbGUgV2ViS2l0MiBmb3IgZWl0aGVyIG1h
Y09TIG9yIGlPUy4gVGhpcyB2YWx1ZSBpcyBjYXNlLWluc2Vuc2l0aXZlLiBBbGxvd2VkIHZhbHVl
czogJXMiICUgIiwgIi5qb2luKGFsbG93ZWRfcGxhdGZvcm1fbmFtZXMpKQogICAgIG9wdGlvbnMg
PSBOb25lCiAKICAgICBhcmdfb3B0aW9ucywgYXJnX3ZhbHVlcyA9IGNsaV9wYXJzZXIucGFyc2Vf
YXJncygpCkBAIC0yNjQsNyArMjU5LDYgQEAgaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAg
ICAgICAgJ291dHB1dF9kaXJwYXRoJzogYXJnX29wdGlvbnMub3V0cHV0RGlyLAogICAgICAgICAn
Y29uY2F0ZW5hdGVfb3V0cHV0JzogYXJnX29wdGlvbnMudGVzdCwKICAgICAgICAgJ2ZyYW1ld29y
a19uYW1lJzogYXJnX29wdGlvbnMuZnJhbWV3b3JrLAotICAgICAgICAncGxhdGZvcm1fbmFtZSc6
IGFyZ19vcHRpb25zLnBsYXRmb3JtLAogICAgICAgICAnZm9yY2Vfb3V0cHV0JzogYXJnX29wdGlv
bnMuZm9yY2UsCiAgICAgICAgICdnZW5lcmF0ZV9iYWNrZW5kJzogZ2VuZXJhdGVfYmFja2VuZCwK
ICAgICAgICAgJ2dlbmVyYXRlX2Zyb250ZW5kJzogZ2VuZXJhdGVfZnJvbnRlbmQsCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvYWxsL2Rl
ZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvYWxsL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3Jt
Lmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxN2YxMzVlZTVhLi4wMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
YWxsL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKysrIC9kZXYvbnVsbApAQCAt
MSwyOCArMCwwIEBACi17Ci0gICAgImRvbWFpbiI6ICJOZXR3b3JrIiwKLSAgICAidHlwZXMiOiBb
Ci0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJOZXR3b3JrRXJyb3IiLAotICAgICAgICAg
ICAgInR5cGUiOiAib2JqZWN0IiwKLSAgICAgICAgICAgICJwbGF0Zm9ybSI6ICJtYWNvcyIsCi0g
ICAgICAgICAgICAicHJvcGVydGllcyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm1l
c3NhZ2UiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgbWVzc2FnZS4i
IH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2RlIiwgInR5cGUiOiAiaW50ZWdlciIs
ICJkZXNjcmlwdGlvbiI6ICJFcnJvciBjb2RlLiIgfQotICAgICAgICAgICAgXQotICAgICAgICB9
Ci0gICAgXSwKLSAgICAiY29tbWFuZHMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1l
IjogImxvYWRSZXNvdXJjZSIsCi0gICAgICAgICAgICAicGxhdGZvcm0iOiAibWFjb3MiLAotICAg
ICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRleHQg
b2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4gY2hl
Y2tzLiIKLSAgICAgICAgfQotICAgIF0sCi0gICAgImV2ZW50cyI6IFsKLSAgICAgICAgewotICAg
ICAgICAgICAgIm5hbWUiOiAicmVzb3VyY2VMb2FkZWQiLAotICAgICAgICAgICAgInBsYXRmb3Jt
IjogIm1hY29zIiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJBIHJlc291cmNlIHdhcyBs
b2FkZWQuIgotICAgICAgICB9Ci0gICAgXQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2FsbC9leHBlY3RlZC9kZWZpbml0aW9ucy13
aXRoLW1hYy1wbGF0Zm9ybS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9hbGwvZXhwZWN0ZWQvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxh
dGZvcm0uanNvbi1yZXN1bHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2ZTY4ZjRh
OWFlLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvYWxsL2V4cGVjdGVkL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpz
b24tcmVzdWx0CisrKyAvZGV2L251bGwKQEAgLTEsMTIxNyArMCwwIEBACi0jIyMgQmVnaW4gRmls
ZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0vLyBOZXR3b3JrCi1JbnNwZWN0b3JCYWNr
ZW5kLnJlZ2lzdGVyRG9tYWluKCJOZXR3b3JrIiwgbnVsbCk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJl
Z2lzdGVyQ29tbWFuZCgiTmV0d29yay5sb2FkUmVzb3VyY2UiLCBudWxsLCBbXSwgW10pOwotSW5z
cGVjdG9yQmFja2VuZC5yZWdpc3RlckV2ZW50KCJOZXR3b3JrLnJlc291cmNlTG9hZGVkIiwgbnVs
bCwgW10pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rlck5ldHdvcmtEaXNwYXRjaGVyID0gSW5z
cGVjdG9yQmFja2VuZC5yZWdpc3RlckRpc3BhdGNoZXIuYmluZChJbnNwZWN0b3JCYWNrZW5kLCAi
TmV0d29yayIpOwotSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiTmV0d29yayIsIG51
bGwpOwotIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNl
Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQotI2luY2x1
ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JGcm9udGVuZFJvdXRlci5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgQWx0
ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZvaWQgc2V0QmFja2VuZERp
c3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNr
ZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KLSAgICBCYWNrZW5kRGlzcGF0
Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRj
aGVyLmdldCgpOyB9Ci1wcml2YXRlOgotICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9i
YWNrZW5kRGlzcGF0Y2hlcjsKLX07Ci0KLQotY2xhc3MgQWx0ZXJuYXRlTmV0d29ya0JhY2tlbmRE
aXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoK
LSAgICB2aXJ0dWFsIH5BbHRlcm5hdGVOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIoKSB7IH0KLSAg
ICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgY2FsbElkKSA9IDA7Ci19OwotCi19IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQotIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRm
b3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3By
YWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXR5cGVkZWYg
U3RyaW5nIEVycm9yU3RyaW5nOwotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCi1jbGFzcyBBbHRlcm5hdGVOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI7Ci0jZW5k
aWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0KLWNsYXNzIE5l
dHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewotcHVibGljOgotICAgIHZpcnR1YWwgdm9p
ZCBsb2FkUmVzb3VyY2UoRXJyb3JTdHJpbmcmKSA9IDA7Ci1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVh
bCB+TmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOwotfTsKLQotY2xhc3MgTmV0d29y
a0JhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNw
YXRjaGVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hl
cj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFu
ZGxlciopOwotICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYg
bWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOwotcHJpdmF0ZToKLSAg
ICB2b2lkIGxvYWRSZXNvdXJjZShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4m
JiBwYXJhbWV0ZXJzKTsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKLXB1YmxpYzoKLSAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlTmV0
d29ya0JhY2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRl
RGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KLXByaXZhdGU6Ci0gICAgQWx0ZXJu
YXRlTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyKiBtX2FsdGVybmF0ZURpc3BhdGNoZXIgeyBudWxs
cHRyIH07Ci0jZW5kaWYKLXByaXZhdGU6Ci0gICAgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyKEJh
Y2tlbmREaXNwYXRjaGVyJiwgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAg
IE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQgeyBudWxscHRyIH07Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmRE
aXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNw
cAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFj
LXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMu
aCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+
Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95
ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNpZiBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2Vu
ZERpc3BhdGNoZXJzLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLU5ldHdv
cmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5OZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyKCkgeyB9Ci0KLVJlZjxOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI+IE5ldHdvcmtCYWNrZW5k
RGlzcGF0Y2hlcjo6Y3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwg
TmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCi17Ci0gICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBh
Z2VudCkpOwotfQotCi1OZXR3b3JrQmFja2VuZERpc3BhdGNoZXI6Ok5ldHdvcmtCYWNrZW5kRGlz
cGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIE5ldHdvcmtCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQotICAgIDogU3VwcGxlbWVudGFsQmFja2VuZERp
c3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCi0gICAgLCBtX2FnZW50KGFnZW50KQotewotICAg
IG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbigiTmV0d29y
ayJfcywgdGhpcyk7Ci19Ci0KLXZvaWQgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRj
aChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+
JiYgbWVzc2FnZSkKLXsKLSAgICBSZWY8TmV0d29ya0JhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0
KCp0aGlzKTsKLQotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVz
c2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRlcnMpOwotCi0gICAgaWYgKG1ldGhv
ZCA9PSAibG9hZFJlc291cmNlIikKLSAgICAgICAgbG9hZFJlc291cmNlKHJlcXVlc3RJZCwgV1RG
TW92ZShwYXJhbWV0ZXJzKSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwg
IidOZXR3b3JrLiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7Ci19Ci0KLXZvaWQgTmV0
d29ya0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0SWQsIFJlZlB0
cjxKU09OOjpPYmplY3Q+JiYpCi17Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCi0gICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2Fs
dGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZShyZXF1ZXN0SWQpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNP
Tjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIG1fYWdlbnQt
PmxvYWRSZXNvdXJjZShlcnJvcik7Ci0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJl
c3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJl
cG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3Zl
KGVycm9yKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6
IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5p
dGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9i
amVjdHMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgRnJvbnRlbmRS
b3V0ZXI7Ci0KLWNsYXNzIE5ldHdvcmtGcm9udGVuZERpc3BhdGNoZXIgewotICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIE5ldHdvcmtGcm9udGVuZERpc3BhdGNoZXIo
RnJvbnRlbmRSb3V0ZXImIGZyb250ZW5kUm91dGVyKSA6IG1fZnJvbnRlbmRSb3V0ZXIoZnJvbnRl
bmRSb3V0ZXIpIHsgfQotICAgIHZvaWQgcmVzb3VyY2VMb2FkZWQoKTsKLXByaXZhdGU6Ci0gICAg
RnJvbnRlbmRSb3V0ZXImIG1fZnJvbnRlbmRSb3V0ZXI7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdm9pZCBOZXR3b3JrRnJv
bnRlbmREaXNwYXRjaGVyOjpyZXNvdXJjZUxvYWRlZCgpCi17Ci0gICAgUmVmPEpTT046Ok9iamVj
dD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdl
LT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIk5ldHdvcmsucmVzb3VyY2VMb2FkZWQiX3MpOwotCi0g
ICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygp
KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEZy
b250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmpl
Y3RzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRo
LW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
UHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5hbWVzcGFj
ZSBJbnNwZWN0b3IgewotCi0KLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLS8vIEZvcndh
cmQgZGVjbGFyYXRpb25zLgotbmFtZXNwYWNlIE5ldHdvcmsgewotY2xhc3MgTmV0d29ya0Vycm9y
OwotfSAvLyBOZXR3b3JrCi0vLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCi0KLQotCi0K
LW5hbWVzcGFjZSBOZXR3b3JrIHsKLWNsYXNzIE5ldHdvcmtFcnJvciA6IHB1YmxpYyBKU09OOjpP
YmplY3RCYXNlIHsKLXB1YmxpYzoKLSAgICBlbnVtIHsKLSAgICAgICAgTm9GaWVsZHNTZXQgPSAw
LAotICAgICAgICBNZXNzYWdlU2V0ID0gMSA8PCAwLAotICAgICAgICBDb2RlU2V0ID0gMSA8PCAx
LAotICAgICAgICBBbGxGaWVsZHNTZXQgPSAoTWVzc2FnZVNldCB8IENvZGVTZXQpCi0gICAgfTsK
LQotICAgIHRlbXBsYXRlPGludCBTVEFURT4KLSAgICBjbGFzcyBCdWlsZGVyIHsKLSAgICBwcml2
YXRlOgotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBtX3Jlc3VsdDsKLQotICAgICAgICB0
ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFU
RSB8IFNURVA+Kj4odGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyKFJlZjwvKk5l
dHdvcmtFcnJvciovSlNPTjo6T2JqZWN0PiYmIG9iamVjdCkKLSAgICAgICAgICAgIDogbV9yZXN1
bHQoV1RGTW92ZShvYmplY3QpKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VS
VChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRl
KTsKLSAgICAgICAgfQotICAgICAgICBmcmllbmQgY2xhc3MgTmV0d29ya0Vycm9yOwotICAgIHB1
YmxpYzoKLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTWVzc2FnZVNldD4mIHNldE1lc3NhZ2Uo
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIE1lc3NhZ2VTZXQpLCBwcm9wZXJ0eV9tZXNzYWdlX2FscmVhZHlfc2V0KTsK
LSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1lc3NhZ2UiX3MsIHZhbHVlKTsKLSAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TWVzc2FnZVNldD4oKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2RlU2V0PiYgc2V0Q29kZShpbnQgdmFsdWUpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2RlU2V0KSwgcHJv
cGVydHlfY29kZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdl
cigiY29kZSJfcywgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb2RlU2V0
PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgUmVmPE5ldHdvcmtFcnJvcj4gcmVsZWFzZSgpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1Nl
dCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXpl
b2YoTmV0d29ya0Vycm9yKSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0KSwgY2Fubm90X2Nhc3QpOwot
Ci0gICAgICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uUmVzdWx0ID0gbV9yZXN1bHQucmVs
ZWFzZU5vbk51bGwoKTsKLSAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gV1RGTW92ZSgqcmVpbnRl
cnByZXRfY2FzdDxSZWY8TmV0d29ya0Vycm9yPio+KCZqc29uUmVzdWx0KSk7Ci0gICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIC8qCi0gICAgICogU3lu
dGhldGljIGNvbnN0cnVjdG9yOgotICAgICAqIFJlZjxOZXR3b3JrRXJyb3I+IHJlc3VsdCA9IE5l
dHdvcmtFcnJvcjo6Y3JlYXRlKCkKLSAgICAgKiAgICAgLnNldE1lc3NhZ2UoLi4uKQotICAgICAq
ICAgICAuc2V0Q29kZSguLi4pCi0gICAgICogICAgIC5yZWxlYXNlKCk7Ci0gICAgICovCi0gICAg
c3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1
cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7Ci0gICAgfQot
fTsKLQotfSAvLyBOZXR3b3JrCi0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5o
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLQotI2luY2x1ZGUgPHd0
Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNl
IEluc3BlY3RvciB7Ci0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLQotCi19IC8vIG5hbWVzcGFj
ZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFj
a2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZp
bml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0K
LUBwcm90b2NvbCBUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluSGFuZGxlcjsKLQotbmFtZXNwYWNl
IEluc3BlY3RvciB7Ci0KLQotY2xhc3MgT2JqQ0luc3BlY3Rvck5ldHdvcmtCYWNrZW5kRGlzcGF0
Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIgewot
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIE9iakNJbnNwZWN0b3JO
ZXR3b3JrQmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkhhbmRs
ZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KLSAgICB2b2lkIGxvYWRSZXNv
dXJjZShsb25nIHJlcXVlc3RJZCkgZmluYWw7Ci1wcml2YXRlOgotICAgIFJldGFpblB0cjxpZDxU
ZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7Ci19OwotCi19IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5k
RGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3Bh
dGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMt
d2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tl
bmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNp
bmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbmNsdWRlIDx3dGYvSlNP
TlZhbHVlcy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdm9pZCBPYmpDSW5zcGVjdG9y
TmV0d29ya0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0SWQpCi17
Ci0gICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGxvYWRS
ZXNvdXJjZVdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgewotICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2Vu
ZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmsubG9hZFJlc291cmNlJyB3YXMg
bm90IGZvdW5kIl9zKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdF
cnJvcnMoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlkIGVycm9yQ2FsbGJhY2sg
PSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBv
cnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9y
LCBlcnJvcik7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3Jz
KCk7Ci0gICAgfTsKLQotICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57Ci0gICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCksIGZhbHNlKTsKLSAgICB9OwotCi0gICAgW21fZGVsZWdhdGUgbG9hZFJlc291cmNlV2l0
aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxi
YWNrXTsKLX0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24uaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2Nv
bC5oPgotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZh
Y2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0Ci1AcHJvcGVydHkgKG5vbmF0
b21pYywgcmV0YWluLCBzZXR0ZXI9c2V0TmV0d29ya0hhbmRsZXI6KSBpZDxUZXN0UHJvdG9jb2xO
ZXR3b3JrRG9tYWluSGFuZGxlcj4gbmV0d29ya0hhbmRsZXI7Ci1AcHJvcGVydHkgKG5vbmF0b21p
YywgcmVhZG9ubHkpIFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5FdmVudERpc3BhdGNoZXIgKm5l
dHdvcmtFdmVudERpc3BhdGNoZXI7Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xDb25maWd1cmF0aW9uLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3Vy
YXRpb24ubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13
aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKLQotI2ltcG9y
dCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmRE
aXNwYXRjaGVycy5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hh
YmxlQWdlbnQuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9y
Q29udHJvbGxlci5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRl
QmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcnMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGlt
cGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KLXsKLSAgICBBdWdtZW50YWJs
ZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotICAgIGlkPFRlc3RQcm90b2NvbE5l
dHdvcmtEb21haW5IYW5kbGVyPiBfbmV0d29ya0hhbmRsZXI7Ci0gICAgVGVzdFByb3RvY29sTmV0
d29ya0RvbWFpbkV2ZW50RGlzcGF0Y2hlciAqX25ldHdvcmtFdmVudERpc3BhdGNoZXI7Ci19Ci0K
LS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9y
Q29udHJvbGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAg
aWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsK
LSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0g
KHZvaWQpZGVhbGxvYwotewotICAgIFtfbmV0d29ya0hhbmRsZXIgcmVsZWFzZV07Ci0gICAgW19u
ZXR3b3JrRXZlbnREaXNwYXRjaGVyIHJlbGVhc2VdOwotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0K
LQotLSAodm9pZClzZXROZXR3b3JrSGFuZGxlcjooaWQ8VGVzdFByb3RvY29sTmV0d29ya0RvbWFp
bkhhbmRsZXI+KWhhbmRsZXIKLXsKLSAgICBpZiAoaGFuZGxlciA9PSBfbmV0d29ya0hhbmRsZXIp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIFtfbmV0d29ya0hhbmRsZXIgcmVsZWFzZV07Ci0gICAg
X25ldHdvcmtIYW5kbGVyID0gW2hhbmRsZXIgcmV0YWluXTsKLQotICAgIGF1dG8gYWx0ZXJuYXRl
RGlzcGF0Y2hlciA9IG1ha2VVbmlxdWU8T2JqQ0luc3BlY3Rvck5ldHdvcmtCYWNrZW5kRGlzcGF0
Y2hlcj4oaGFuZGxlcik7Ci0gICAgYXV0byBhbHRlcm5hdGVBZ2VudCA9IG1ha2VVbmlxdWU8QWx0
ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8TmV0d29ya0JhY2tlbmREaXNwYXRjaGVyLCBBbHRlcm5h
dGVOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI+PigiTmV0d29yayJfcywgKl9jb250cm9sbGVyLCBX
VEZNb3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIpKTsKLSAgICBfY29udHJvbGxlci0+YXBwZW5kRXh0
cmFBZ2VudChXVEZNb3ZlKGFsdGVybmF0ZUFnZW50KSk7Ci19Ci0KLS0gKGlkPFRlc3RQcm90b2Nv
bE5ldHdvcmtEb21haW5IYW5kbGVyPiluZXR3b3JrSGFuZGxlcgotewotICAgIHJldHVybiBfbmV0
d29ya0hhbmRsZXI7Ci19Ci0KLS0gKFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5FdmVudERpc3Bh
dGNoZXIgKiluZXR3b3JrRXZlbnREaXNwYXRjaGVyCi17Ci0gICAgaWYgKCFfbmV0d29ya0V2ZW50
RGlzcGF0Y2hlcikKLSAgICAgICAgX25ldHdvcmtFdmVudERpc3BhdGNoZXIgPSBbW1Rlc3RQcm90
b2NvbE5ldHdvcmtEb21haW5FdmVudERpc3BhdGNoZXIgYWxsb2NdIGluaXRXaXRoQ29udHJvbGxl
cjpfY29udHJvbGxlcl07Ci0gICAgcmV0dXJuIF9uZXR3b3JrRXZlbnREaXNwYXRjaGVyOwotfQot
Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0u
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0
ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMuaCIKLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFj
ZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWlu
RXZlbnREaXNwYXRjaGVyCi17Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBf
Y29udHJvbGxlcjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVn
bWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtz
dXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNT
RVJUKGNvbnRyb2xsZXIpOwotICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1
cm4gc2VsZjsKLX0KLQotLSAodm9pZClyZXNvdXJjZUxvYWRlZAotewotICAgIGNvbnN0IEZyb250
ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29udHJvbGxlci0+ZnJvbnRlbmRSb3V0ZXIoKTsKLQotICAg
IFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
LSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJOZXR3b3JrLnJlc291cmNl
TG9hZGVkIl9zKTsKLSAgICByb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJp
bmcoKSk7Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlz
cGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxG
b3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3Rv
Y29sSlNPTk9iamVjdC5oPgotCi0KLUBjbGFzcyBUZXN0UHJvdG9jb2xOZXR3b3JrRXJyb3I7Ci0K
LXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbFBsYXRmb3JtKSB7Ci0gICAg
VGVzdFByb3RvY29sUGxhdGZvcm1BbGwsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmlj
LAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3Jt
TWFjT1MsCi19OwotCi0KLQotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIp
KSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sTmV0d29ya0Vycm9yIDogUldJUHJvdG9jb2xKU09O
T2JqZWN0Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNT
dHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29s
T2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OwotLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlIGNvZGU6KGludCljb2RlOwot
LyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICptZXNz
YWdlOwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgaW50IGNv
ZGU7Ci1AZW5kCi0KLUBwcm90b2NvbCBUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluSGFuZGxlciA8
TlNPYmplY3Q+Ci1Ab3B0aW9uYWwKLS0gKHZvaWQpbG9hZFJlc291cmNlV2l0aEVycm9yQ2FsbGJh
Y2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFj
azoodm9pZCheKSh2b2lkKSlzdWNjZXNzQ2FsbGJhY2s7Ci1AZW5kCi0KLV9fYXR0cmlidXRlX18o
KHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xOZXR3b3Jr
RG9tYWluRXZlbnREaXNwYXRjaGVyIDogTlNPYmplY3QKLS0gKHZvaWQpcmVzb3VyY2VMb2FkZWQ7
Ci1AZW5kCi0KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRp
YmlsaXR5T2JqZWN0cy5oPgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wu
aCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCi0jaW1wb3J0IDxK
YXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQg
PHd0Zi9KU09OVmFsdWVzLmg+Ci0KLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sTmV0d29ya0RvbWFp
bkV2ZW50RGlzcGF0Y2hlciAoUHJpdmF0ZSkKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRy
b2xsZXI6KEluc3BlY3Rvcjo6QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9s
bGVyOwotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRl
c3RQcm90b2NvbC5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252
ZXJzaW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
T2JqQ0VudW1UeXBlPgotT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmco
Y29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhU
ZXN0UHJvdG9jb2xQbGF0Zm9ybSB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBj
YXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOgotICAgICAgICByZXR1cm4gImFsbCJfczsKLSAg
ICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzoKLSAgICAgICAgcmV0dXJuICJnZW5l
cmljIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1JT1M6Ci0gICAgICAgIHJldHVy
biAiaW9zIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzoKLSAgICAgICAg
cmV0dXJuICJtYWNvcyJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25h
bDxUZXN0UHJvdG9jb2xQbGF0Zm9ybT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYg
dmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJhbGwiKQotICAgICAgICByZXR1cm4gVGVzdFBy
b3RvY29sUGxhdGZvcm1BbGw7Ci0gICAgaWYgKHZhbHVlID09ICJnZW5lcmljIikKLSAgICAgICAg
cmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzsKLSAgICBpZiAodmFsdWUgPT0gImlv
cyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzsKLSAgICBpZiAodmFs
dWUgPT0gIm1hY29zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M7
Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0KLSMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIK
LSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rv
ci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNw
ZWN0b3I7Ci0KLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChOZXR3b3Jr
RG9tYWluKQotCi0rICh2b2lkKV9wYXJzZU5ldHdvcmtFcnJvcjooVGVzdFByb3RvY29sTmV0d29y
a0Vycm9yICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotCi1AZW5kCi0KLUBp
bXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKE5ldHdvcmtEb21haW4p
Ci0KLSsgKHZvaWQpX3BhcnNlTmV0d29ya0Vycm9yOihUZXN0UHJvdG9jb2xOZXR3b3JrRXJyb3Ig
Kiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJ
T05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKLSAgICAqb3V0
VmFsdWUgPSBbW1Rlc3RQcm90b2NvbE5ldHdvcmtFcnJvciBhbGxvY10gaW5pdFdpdGhQYXlsb2Fk
OnBheWxvYWRdOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxh
dGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0j
aW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05P
YmplY3RQcml2YXRlLmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3Rm
L0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi1AaW1wbGVt
ZW50YXRpb24gVGVzdFByb3RvY29sTmV0d29ya0Vycm9yCi0KLS0gKGluc3RhbmNldHlwZSlpbml0
V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxv
YWQKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5p
bDsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtA
Im1lc3NhZ2UiXSwgQCJtZXNzYWdlIik7Ci0gICAgc2VsZi5tZXNzYWdlID0gcGF5bG9hZFtAIm1l
c3NhZ2UiXTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5
bG9hZFtAImNvZGUiXSwgQCJjb2RlIik7Ci0gICAgc2VsZi5jb2RlID0gW3BheWxvYWRbQCJjb2Rl
Il0gaW50ZWdlclZhbHVlXTsKLQotICAgIHJldHVybiBzZWxmOwotfQotLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9iamVjdAot
ewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmplY3QgdG9K
U09OT2JqZWN0XS5nZXQoKV0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgcmV0dXJuIHNl
bGY7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVz
c2FnZSBjb2RlOihpbnQpY29kZQotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQot
ICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9Q
Uk9QRVJUWShtZXNzYWdlLCBAIm1lc3NhZ2UiKTsKLQotICAgIHNlbGYubWVzc2FnZSA9IG1lc3Nh
Z2U7Ci0gICAgc2VsZi5jb2RlID0gY29kZTsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2
b2lkKXNldE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZQotewotICAgIFtzdXBlciBzZXRTdHJp
bmc6bWVzc2FnZSBmb3JLZXk6QCJtZXNzYWdlIl07Ci19Ci0KLS0gKE5TU3RyaW5nICopbWVzc2Fn
ZQotewotICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAibWVzc2FnZSJdOwotfQotCi0t
ICh2b2lkKXNldENvZGU6KGludCljb2RlCi17Ci0gICAgW3N1cGVyIHNldEludGVnZXI6Y29kZSBm
b3JLZXk6QCJjb2RlIl07Ci19Ci0KLS0gKGludCljb2RlCi17Ci0gICAgcmV0dXJuIFtzdXBlciBp
bnRlZ2VyRm9yS2V5OkAiY29kZSJdOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2NvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVi
dWdnYWJsZVR5cGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9jb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBl
Lmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmQyN2FiNjViOTJh
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2NvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5
cGUuanNvbgpAQCAtMCwwICsxLDkgQEAKK1sKK3sKKyAgICAiZG9tYWluIjogIkRvbWFpbiIsCisg
ICAgImRlYnVnZ2FibGVUeXBlcyI6IFsicGFnZSJdLAorICAgICJ0YXJnZXRUeXBlcyI6IFsicGFn
ZSIsICJ3b3JrZXIiXSwKKyAgICAiY29tbWFuZHMiOiBbeyJuYW1lIjogIkNvbW1hbmQifV0sCisg
ICAgImV2ZW50cyI6IFt7Im5hbWUiOiAiRXZlbnQifV0KK30KK10KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9jb21tYW5kcy13aXRoLWFz
eW5jLWF0dHJpYnV0ZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2NvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjExMjYyZTg4OWZhCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2NvbW1hbmRz
LXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KQEAgLTAsMCArMSwxMDkgQEAKK3sKKyAgICAiZG9t
YWluIjogIkRhdGFiYXNlIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAg
ICJpZCI6ICJEYXRhYmFzZUlkIiwKKyAgICAgICAgICAgICJ0eXBlIjogImludGVnZXIiLAorICAg
ICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBpZGVudGlmaWVyIG9mIERhdGFiYXNlIG9i
amVjdC4iCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJQcmltYXJ5
Q29sb3JzIiwKKyAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAiZW51
bSI6IFsicmVkIiwgImdyZWVuIiwgImJsdWUiXQorICAgICAgICB9LAorICAgICAgICB7CisgICAg
ICAgICAgICAiaWQiOiAiQ29sb3JMaXN0IiwKKyAgICAgICAgICAgICJ0eXBlIjogImFycmF5IiwK
KyAgICAgICAgICAgICJpdGVtcyI6IHsgIiRyZWYiOiAiUHJpbWFyeUNvbG9ycyIgfQorICAgICAg
ICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiRXJyb3IiLAorICAgICAgICAgICAg
InR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJEYXRhYmFzZSBl
cnJvci4iLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJtZXNzYWdlIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIkVycm9y
IG1lc3NhZ2UuIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29kZSIsICJ0eXBlIjog
ImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgY29kZS4iIH0KKyAgICAgICAgICAgIF0K
KyAgICAgICAgfQorICAgIF0sCisgICAgImNvbW1hbmRzIjogWworICAgICAgICB7CisgICAgICAg
ICAgICAibmFtZSI6ICJleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzIiwKKyAgICAg
ICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJh
c2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJxdWVyeSIsICJ0eXBlIjogInN0cmluZyIgfQorICAgICAgICAgICAgXSwKKyAgICAgICAgICAg
ICJyZXR1cm5zIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAi
dHlwZSI6ICJhcnJheSIsICJvcHRpb25hbCI6IHRydWUsICJpdGVtcyI6IHsgInR5cGUiOiAic3Ry
aW5nIiB9IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0
cmluZyIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRp
bWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6
IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJh
bnkiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRh
YmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiLCAib3B0aW9u
YWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5Db2xvciIsICIk
cmVmIjogIlByaW1hcnlDb2xvcnMiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJhbHRlcm5hdGVDb2xvcnMiLCAiJHJlZiI6ICJDb2xvckxpc3QiLCAib3B0
aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcmludENvbG9yIiwg
InR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciLCAi
YmxhY2siXSwgIm9wdGlvbmFsIjogdHJ1ZSB9CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisg
ICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0
dXJuVmFsdWVzIiwKKyAgICAgICAgICAgICJhc3luYyI6IHRydWUsCisgICAgICAgICAgICAicGFy
YW1ldGVycyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRhdGFiYXNlSWQiLCAiJHJl
ZiI6ICJEYXRhYmFzZUlkIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicXVlcnkiLCAi
dHlwZSI6ICJzdHJpbmciIH0KKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAicmV0dXJucyI6
IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJy
YXkiLCAib3B0aW9uYWwiOiB0cnVlLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAor
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0
aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAi
dHlwZSI6ICJudW1iZXIiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiwgIm9wdGlv
bmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIk
cmVmIjogIkRhdGFiYXNlSWQiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVycm9yIiwgIm9wdGlvbmFsIjogdHJ1ZSB9
LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6ICJQcmlt
YXJ5Q29sb3JzIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAiYWx0ZXJuYXRlQ29sb3JzIiwgIiRyZWYiOiAiQ29sb3JMaXN0IiwgIm9wdGlvbmFsIjogdHJ1
ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0
cmluZyIsICJlbnVtIjogWyJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93IiwgImJsYWNrIl0sICJv
cHRpb25hbCI6IHRydWUgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7Cisg
ICAgICAgICAgICAibmFtZSI6ICJleGVjdXRlU1FMU3luYyIsCisgICAgICAgICAgICAicGFyYW1l
dGVycyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRhdGFiYXNlSWQiLCAiJHJlZiI6
ICJEYXRhYmFzZUlkIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicXVlcnkiLCAidHlw
ZSI6ICJzdHJpbmciIH0KKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAicmV0dXJucyI6IFsK
KyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXki
LCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAorICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciIH0sCisgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiIH0sCisgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiIH0sCisgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiB9LAorICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiIH0sCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVycm9yIiB9LAorICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwgIiRyZWYiOiAiQ29sb3JMaXN0IiB9LAor
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6ICJQcmltYXJ5
Q29sb3JzIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBl
IjogInN0cmluZyIsICJlbnVtIjogWyJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93IiwgImJsYWNr
Il0gfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAi
bmFtZSI6ICJleGVjdXRlU1FMQXN5bmMiLAorICAgICAgICAgICAgImFzeW5jIjogdHJ1ZSwKKyAg
ICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0
YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiIH0sCisgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJxdWVyeSIsICJ0eXBlIjogInN0cmluZyIgfQorICAgICAgICAgICAgXSwKKyAgICAgICAg
ICAgICJyZXR1cm5zIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMi
LCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCisgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIgfSwKKyAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIgfSwKKyAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIgfSwKKyAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiIH0sCisgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIg
fSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAiRXJyb3Ii
IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVmIjogIlBy
aW1hcnlDb2xvcnMiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJhbHRlcm5hdGVDb2xv
cnMiLCAiJHJlZiI6ICJDb2xvckxpc3QiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJw
cmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbImN5YW4iLCAibWFnZW50YSIs
ICJ5ZWxsb3ciLCAiYmxhY2siXSB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdCit9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24gYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvY29tbWFuZHMtd2l0
aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAuLjM2MWQ1N2Q4MjBkCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2NvbW1hbmRzLXdpdGgt
b3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCkBAIC0wLDAgKzEsODUgQEAKK3sK
KyAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAg
ICAgICAgICAgICJpZCI6ICJEYXRhYmFzZUlkIiwKKyAgICAgICAgICAgICJ0eXBlIjogImludGVn
ZXIiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBpZGVudGlmaWVyIG9mIERh
dGFiYXNlIG9iamVjdC4iCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6
ICJQcmltYXJ5Q29sb3JzIiwKKyAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAg
ICAgICAiZW51bSI6IFsicmVkIiwgImdyZWVuIiwgImJsdWUiXQorICAgICAgICB9LAorICAgICAg
ICB7CisgICAgICAgICAgICAiaWQiOiAiQ29sb3JMaXN0IiwKKyAgICAgICAgICAgICJ0eXBlIjog
ImFycmF5IiwKKyAgICAgICAgICAgICJpdGVtcyI6IHsgIiRyZWYiOiAiUHJpbWFyeUNvbG9ycyIg
fQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiRXJyb3IiLAorICAg
ICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJE
YXRhYmFzZSBlcnJvci4iLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJtZXNzYWdlIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9u
IjogIkVycm9yIG1lc3NhZ2UuIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29kZSIs
ICJ0eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgY29kZS4iIH0KKyAgICAg
ICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgImNvbW1hbmRzIjogWworICAgICAgICB7
CisgICAgICAgICAgICAibmFtZSI6ICJleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzIiwKKyAg
ICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29s
dW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJvcHRpb25hbCI6IHRydWUsICJpdGVtcyI6IHsg
InR5cGUiOiAic3RyaW5nIiB9IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIs
ICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7
ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6IHRydWUg
fSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIs
ICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxvYWQi
LCAidHlwZSI6ICJhbnkiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIsICJvcHRpb25hbCI6IHRy
dWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAiRXJy
b3IiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzY3Jl
ZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlDb2xvcnMiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJhbHRlcm5hdGVDb2xvcnMiLCAiJHJlZiI6ICJDb2xv
ckxpc3QiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJw
cmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbImN5YW4iLCAibWFnZW50YSIs
ICJ5ZWxsb3ciLCAiYmxhY2siXSwgIm9wdGlvbmFsIjogdHJ1ZSB9CisgICAgICAgICAgICBdLAor
ICAgICAgICAgICAgInJldHVybnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1
bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIm9wdGlvbmFsIjogdHJ1ZSwgIml0ZW1zIjogeyAi
dHlwZSI6ICJzdHJpbmciIH0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vdGVzIiwg
InR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFsIjogdHJ1ZSB9
LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0Iiwg
Im9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5bG9hZCIs
ICJ0eXBlIjogImFueSIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJu
YW1lIjogImRhdGFiYXNlSWQiLCAiJHJlZiI6ICJEYXRhYmFzZUlkIiwgIm9wdGlvbmFsIjogdHJ1
ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic3FsRXJyb3IiLCAiJHJlZiI6ICJFcnJv
ciIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNjcmVl
bkNvbG9yIiwgIiRyZWYiOiAiUHJpbWFyeUNvbG9ycyIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogImFsdGVybmF0ZUNvbG9ycyIsICIkcmVmIjogIkNvbG9y
TGlzdCIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBy
aW50Q29sb3IiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsiY3lhbiIsICJtYWdlbnRhIiwg
InllbGxvdyIsICJibGFjayJdLCAib3B0aW9uYWwiOiB0cnVlIH0KKyAgICAgICAgICAgIF0KKyAg
ICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiZXhlY3V0ZU5vT3B0aW9u
YWxQYXJhbWV0ZXJzIiwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsg
InR5cGUiOiAic3RyaW5nIiB9IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIs
ICJ0eXBlIjogInN0cmluZyIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFt
cCIsICJ0eXBlIjogIm51bWJlciIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVl
cyIsICJ0eXBlIjogIm9iamVjdCIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxv
YWQiLCAidHlwZSI6ICJhbnkiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFz
ZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjog
InNxbEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJzY3JlZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlDb2xvcnMiIH0sCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJhbHRlcm5hdGVDb2xvcnMiLCAiJHJlZiI6ICJDb2xvckxpc3QiIH0sCisg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwg
ImVudW0iOiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSB9CisgICAgICAg
ICAgICBdLAorICAgICAgICAgICAgInJldHVybnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAidHlwZSI6ICJz
dHJpbmciIH0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAi
c3RyaW5nIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUi
OiAibnVtYmVyIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVzIiwgInR5cGUi
OiAib2JqZWN0IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBl
IjogImFueSIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRhdGFiYXNlSWQiLCAiJHJl
ZiI6ICJEYXRhYmFzZUlkIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic3FsRXJyb3Ii
LCAiJHJlZiI6ICJFcnJvciIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNjcmVlbkNv
bG9yIiwgIiRyZWYiOiAiUHJpbWFyeUNvbG9ycyIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogImFsdGVybmF0ZUNvbG9ycyIsICIkcmVmIjogIkNvbG9yTGlzdCIgfSwKKyAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInByaW50Q29sb3IiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsi
Y3lhbiIsICJtYWdlbnRhIiwgInllbGxvdyIsICJibGFjayJdIH0KKyAgICAgICAgICAgIF0KKyAg
ICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2RlZmluaXRpb25z
LXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAuLjliZTQ2YTE3YWQxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3Jt
Lmpzb24KQEAgLTAsMCArMSwyOCBAQAoreworICAgICJkb21haW4iOiAiTmV0d29yayIsCisgICAg
InR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiTmV0d29ya0Vycm9yIiwK
KyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAiY29uZGl0aW9uIjog
IlBMQVRGT1JNKE1BQykiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJtZXNzYWdlIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9u
IjogIkVycm9yIG1lc3NhZ2UuIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29kZSIs
ICJ0eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgY29kZS4iIH0KKyAgICAg
ICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgImNvbW1hbmRzIjogWworICAgICAgICB7
CisgICAgICAgICAgICAibmFtZSI6ICJsb2FkUmVzb3VyY2UiLAorICAgICAgICAgICAgImNvbmRp
dGlvbiI6ICJQTEFURk9STShNQUMpIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2Fk
cyBhIHJlc291cmNlIGluIHRoZSBjb250ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGluc3BlY3RlZCBw
YWdlIHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNoZWNrcy4iCisgICAgICAgIH0KKyAgICBdLAorICAg
ICJldmVudHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogInJlc291cmNlTG9h
ZGVkIiwKKyAgICAgICAgICAgICJjb25kaXRpb24iOiAiUExBVEZPUk0oTUFDKSIsCisgICAgICAg
ICAgICAiZGVzY3JpcHRpb24iOiAiQSByZXNvdXJjZSB3YXMgbG9hZGVkLiIKKyAgICAgICAgfQor
ICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9kb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29u
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xZmViMGM5YTI3ZQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9kb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24KQEAgLTAsMCArMSw4IEBACitbCit7Cisg
ICAgImRvbWFpbiI6ICJEb21haW4iLAorICAgICJkZWJ1Z2dhYmxlVHlwZXMiOiBbIndlYi1wYWdl
Il0sCisgICAgImNvbW1hbmRzIjogW3sibmFtZSI6ICJDb21tYW5kIn1dLAorICAgICJldmVudHMi
OiBbeyJuYW1lIjogIkV2ZW50In1dCit9CitdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmct
ZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVn
Z2FibGVUeXBlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmY2
MmZiMzhiYTc4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2RvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1
Z2dhYmxlVHlwZS5qc29uCkBAIC0wLDAgKzEsOCBAQAorWworeworICAgICJkb21haW4iOiAiRG9t
YWluIiwKKyAgICAiZGVidWdnYWJsZVR5cGVzIjogWyJwYWdlIl0sCisgICAgImNvbW1hbmRzIjog
W3sibmFtZSI6ICJDb21tYW5kIiwgInRhcmdldFR5cGVzIjogWyJwYWdlIiwgIndvcmtlciJdfV0s
CisgICAgImV2ZW50cyI6IFt7Im5hbWUiOiAiRXZlbnQifV0KK30KK10KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9kb21haW4tdGFyZ2V0
VHlwZXMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9kb21haW4tdGFyZ2V0VHlwZXMuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMC4uNmE2ZTQwZDYwYWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZG9tYWluLXRhcmdldFR5cGVzLmpzb24KQEAg
LTAsMCArMSw4IEBACitbCit7CisgICAgImRvbWFpbiI6ICJEb21haW4iLAorICAgICJ0YXJnZXRU
eXBlcyI6IFsicGFnZSJdLAorICAgICJjb21tYW5kcyI6IFt7Im5hbWUiOiAiQ29tbWFuZCIsICJ0
YXJnZXRUeXBlcyI6IFsicGFnZSJdfV0sCisgICAgImV2ZW50cyI6IFt7Im5hbWUiOiAiRXZlbnQi
LCAidGFyZ2V0VHlwZXMiOiBbInBhZ2UiXX1dCit9CitdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZG9tYWlucy13aXRoLXZhcnlpbmct
Y29tbWFuZC1zaXplcy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOTRhOGVjYjE3NmQKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZG9t
YWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCkBAIC0wLDAgKzEsNTQgQEAKK1sK
K3sKKyAgICAiZG9tYWluIjogIk5ldHdvcmsxIiwKKyAgICAiY29tbWFuZHMiOiBbCisgICAgICAg
IHsKKyAgICAgICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJjZTEiLAorICAgICAgICAgICAgImRl
c2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBv
biB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKKyAgICAg
ICAgfQorICAgIF0KK30sCit7CisgICAgImRvbWFpbiI6ICJOZXR3b3JrMiIsCisgICAgInR5cGVz
IjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiTG9hZGVySWQiLAorICAgICAgICAg
ICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUg
bG9hZGVyIGlkZW50aWZpZXIuIgorICAgICAgICB9CisgICAgXQorfSwKK3sKKyAgICAiZG9tYWlu
IjogIk5ldHdvcmszIiwKKyAgICAiY29tbWFuZHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAg
ICJuYW1lIjogImxvYWRSZXNvdXJjZTEiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxv
YWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVk
IHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKKyAgICAgICAgfSwKKyAgICAgICAg
eworICAgICAgICAgICAgIm5hbWUiOiAibG9hZFJlc291cmNlMiIsCisgICAgICAgICAgICAiZGVz
Y3JpcHRpb24iOiAiTG9hZHMgYSByZXNvdXJjZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1lIG9u
IHRoZSBpbnNwZWN0ZWQgcGFnZSB3aXRob3V0IGNyb3NzIG9yaWdpbiBjaGVja3MuIgorICAgICAg
ICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJsb2FkUmVzb3VyY2UzIiwKKyAg
ICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBhIHJlc291cmNlIGluIHRoZSBjb250ZXh0
IG9mIGEgZnJhbWUgb24gdGhlIGluc3BlY3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNo
ZWNrcy4iCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImxvYWRS
ZXNvdXJjZTQiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2Ug
aW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBj
cm9zcyBvcmlnaW4gY2hlY2tzLiIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAg
Im5hbWUiOiAibG9hZFJlc291cmNlNSIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9h
ZHMgYSByZXNvdXJjZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQg
cGFnZSB3aXRob3V0IGNyb3NzIG9yaWdpbiBjaGVja3MuIgorICAgICAgICB9LAorICAgICAgICB7
CisgICAgICAgICAgICAibmFtZSI6ICJsb2FkUmVzb3VyY2U2IiwKKyAgICAgICAgICAgICJkZXNj
cmlwdGlvbiI6ICJMb2FkcyBhIHJlc291cmNlIGluIHRoZSBjb250ZXh0IG9mIGEgZnJhbWUgb24g
dGhlIGluc3BlY3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNoZWNrcy4iCisgICAgICAg
IH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJjZTciLAorICAg
ICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRleHQg
b2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4gY2hl
Y2tzLiIKKyAgICAgICAgfQorICAgIF0KK30KK10KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9lbnVtLXZhbHVlcy5qc29uIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2VudW0tdmFsdWVzLmpzb24K
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmNkYWQ2MWRmN2M5Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2VudW0tdmFsdWVzLmpzb24KQEAgLTAsMCArMSwzNSBAQAoreyJkb21haW5zIjpbCit7Cisg
ICAgImRvbWFpbiI6ICJUeXBlRG9tYWluIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAg
ICAgICAgICAgICJpZCI6ICJUeXBlRG9tYWluRW51bSIsCisgICAgICAgICAgICAidHlwZSI6ICJz
dHJpbmciLAorICAgICAgICAgICAgImVudW0iOiBbInNoYXJlZCIsICJyZWQiLCAiZ3JlZW4iLCAi
Ymx1ZSJdCisgICAgICAgIH0KKyAgICBdCit9LAoreworICAgICJkb21haW4iOiAiQ29tbWFuZERv
bWFpbiIsCisgICAgImNvbW1hbmRzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6
ICJjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZSIsCisgICAgICAgICAgICAicGFyYW1ldGVycyI6
IFtdLAorICAgICAgICAgICAgInJldHVybnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJyZXR1cm5WYWx1ZSIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJzaGFyZWQiLCAiY3lh
biIsICJtYWdlbnRhIiwgInllbGxvdyJdIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAg
IF0KK30sCit7CisgICAgImRvbWFpbiI6ICJFdmVudERvbWFpbiIsCisgICAgImV2ZW50cyI6IFsK
KyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiZXZlbnRXaXRoRW51bVBhcmFtZXRlciIs
CisgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjog
InBhcmFtZXRlciIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJzaGFyZWQiLCAiYmxhY2si
LCAid2hpdGUiXSB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdCit9CitdfQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V2
ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24gYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXZlbnQtdGFyZ2V0VHlw
ZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMC4uNGRmZWQ0MWVkMjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXZlbnQtdGFyZ2V0VHlw
ZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgpAQCAtMCwwICsxLDggQEAKK1sK
K3sKKyAgICAiZG9tYWluIjogIkRvbWFpbiIsCisgICAgImRlYnVnZ2FibGVUeXBlcyI6IFsicGFn
ZSJdLAorICAgICJjb21tYW5kcyI6IFt7Im5hbWUiOiAiQ29tbWFuZCJ9XSwKKyAgICAiZXZlbnRz
IjogW3sibmFtZSI6ICJFdmVudCIsICJ0YXJnZXRUeXBlcyI6IFsicGFnZSIsICJ3b3JrZXIiXX1d
Cit9CitdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V2ZW50cy13aXRoLW9wdGlvbmFs
LXBhcmFtZXRlcnMuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u
Y2FiYmYxMGI4MzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29u
CkBAIC0wLDAgKzEsNTkgQEAKK3sKKyAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKKyAgICAidHlw
ZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJEYXRhYmFzZUlkIiwKKyAgICAg
ICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5p
cXVlIGlkZW50aWZpZXIgb2YgRGF0YWJhc2Ugb2JqZWN0LiIKKyAgICAgICAgfSwKKyAgICAgICAg
eworICAgICAgICAgICAgImlkIjogIlByaW1hcnlDb2xvcnMiLAorICAgICAgICAgICAgInR5cGUi
OiAic3RyaW5nIiwKKyAgICAgICAgICAgICJ2YWx1ZXMiOiBbInJlZCIsICJncmVlbiIsICJibHVl
Il0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkNvbG9yTGlzdCIs
CisgICAgICAgICAgICAidHlwZSI6ICJhcnJheSIsCisgICAgICAgICAgICAiaXRlbXMiOiB7ICIk
cmVmIjogIlByaW1hcnlDb2xvcnMiIH0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAg
ICAgImlkIjogIkVycm9yIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAg
ICAgICAiZGVzY3JpcHRpb24iOiAiRGF0YWJhc2UgZXJyb3IuIiwKKyAgICAgICAgICAgICJwcm9w
ZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibWVzc2FnZSIsICJ0eXBlIjog
InN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBtZXNzYWdlLiIgfSwKKyAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogImNvZGUiLCAidHlwZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9uIjog
IkVycm9yIGNvZGUuIiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJl
dmVudHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImRpZEV4ZWN1dGVPcHRp
b25hbFBhcmFtZXRlcnMiLAorICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIm9wdGlvbmFs
IjogdHJ1ZSwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZSB9
LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVy
IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVz
IiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIsICJvcHRpb25hbCI6IHRydWUgfSwK
KyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiLCAi
b3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5Db2xv
ciIsICIkcmVmIjogIlByaW1hcnlDb2xvcnMiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJhbHRlcm5hdGVDb2xvcnMiLCAiJHJlZiI6ICJDb2xvckxpc3Qi
LCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcmludENv
bG9yIiwgInR5cGUiOiAic3RyaW5nIiwgInZhbHVlcyI6IFsiY3lhbiIsICJtYWdlbnRhIiwgInll
bGxvdyIsICJibGFjayJdLCAib3B0aW9uYWwiOiB0cnVlIH0KKyAgICAgICAgICAgIF0KKyAgICAg
ICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiZGlkRXhlY3V0ZU5vT3B0aW9u
YWxQYXJhbWV0ZXJzIiwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsg
InR5cGUiOiAic3RyaW5nIiB9IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIs
ICJ0eXBlIjogInN0cmluZyIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFt
cCIsICJ0eXBlIjogIm51bWJlciIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVl
cyIsICJ0eXBlIjogIm9iamVjdCIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxv
YWQiLCAidHlwZSI6ICJhbnkiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzcWxFcnJv
ciIsICIkcmVmIjogIkVycm9yIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2NyZWVu
Q29sb3IiLCAiJHJlZiI6ICJQcmltYXJ5Q29sb3JzIiB9LAorICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwgIiRyZWYiOiAiQ29sb3JMaXN0IiB9LAorICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmluZyIsICJ2YWx1ZXMi
OiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSB9CisgICAgICAgICAgICBd
CisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZC10YXJnZXRUeXBlLW1hdGNo
aW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kLXRhcmdldFR5cGUt
bWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tcmVzdWx0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wMTY1YmE1NDVmZQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9j
b21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tcmVz
dWx0CkBAIC0wLDAgKzEsMTAxMSBAQAorIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRD
b21tYW5kcy5qcy5pbgorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmQt
dGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbiBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKy8vIERvbWFpbgorSW5zcGVjdG9yQmFja2Vu
ZC5yZWdpc3RlckRvbWFpbigiRG9tYWluIiwgWyJwYWdlIiwgIndvcmtlciJdKTsKK0luc3BlY3Rv
ckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJEb21haW4uQ29tbWFuZCIsIG51bGwsIFtdLCBbXSk7
CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnQoIkRvbWFpbi5FdmVudCIsIG51bGwsIFtd
KTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW5EaXNwYXRjaGVyID0gSW5zcGVjdG9y
QmFja2VuZC5yZWdpc3RlckRpc3BhdGNoZXIuYmluZChJbnNwZWN0b3JCYWNrZW5kLCAiRG9tYWlu
Iik7CitJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJEb21haW4iLCBbInBhZ2UiXSk7
CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcy5pbgorCisjIyMgQmVn
aW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1k
ZWJ1Z2dhYmxlVHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9y
IHsKKworY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHZv
aWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3Bh
dGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KKyAg
ICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBt
X2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Citwcml2YXRlOgorICAgIFJlZlB0cjxCYWNrZW5k
RGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKK307CisKKworY2xhc3MgQWx0ZXJuYXRl
RG9tYWluQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgfkFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRj
aGVyKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIENvbW1hbmQobG9uZyBjYWxsSWQpID0gMDsKK307
CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVy
cy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZC10YXJnZXRUeXBl
LW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9j
b2xPYmplY3RzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNl
IEluc3BlY3RvciB7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCisjaWYgRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCitjbGFzcyBBbHRlcm5hdGVEb21haW5C
YWNrZW5kRGlzcGF0Y2hlcjsKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKKworY2xhc3MgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKK3B1
YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChFcnJvclN0cmluZyYpID0gMDsKK3Byb3Rl
Y3RlZDoKKyAgICB2aXJ0dWFsIH5Eb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKK307
CisKK2NsYXNzIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1l
bnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPERvbWFpbkJh
Y2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBEb21haW5CYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBj
b25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5hbDsK
K3ByaXZhdGU6CisgICAgdm9pZCBDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6
T2JqZWN0PiYmIHBhcmFtZXRlcnMpOworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQorcHVibGljOgorICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0Y2hlcihBbHRl
cm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2Fs
dGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9Citwcml2YXRlOgorICAg
IEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKiBtX2FsdGVybmF0ZURpc3BhdGNoZXIg
eyBudWxscHRyIH07CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCitwcml2YXRlOgorICAgIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNw
YXRjaGVyJiwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgRG9tYWluQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50IHsgbnVsbHB0ciB9OworfTsKKworfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMu
aAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9t
YWluLWRlYnVnZ2FibGVUeXBlLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0
ZXIuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRl
c3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK0RvbWFpbkJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlcjo6fkRvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQor
CitSZWY8RG9tYWluQmFja2VuZERpc3BhdGNoZXI+IERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpj
cmVhdGUoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBEb21haW5CYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERv
bWFpbkJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOworfQorCitE
b21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6RG9tYWluQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERp
c3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIqIGFnZW50KQorICAgIDogU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERp
c3BhdGNoZXIpCisgICAgLCBtX2FnZW50KGFnZW50KQoreworICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbigiRG9tYWluIl9zLCB0aGlzKTsKK30KKwor
dm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNv
bnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCit7CisgICAg
UmVmPERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKKworICAgIFJlZlB0
cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7CisgICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJh
bXMiX3MsIHBhcmFtZXRlcnMpOworCisgICAgaWYgKG1ldGhvZCA9PSAiQ29tbWFuZCIpIHsKKyAg
ICAgICAgQ29tbWFuZChyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xF
cnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRG9tYWluLiIgKyBtZXRo
b2QgKyAiJyB3YXMgbm90IGZvdW5kIik7Cit9CisKK3ZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNo
ZXI6OkNvbW1hbmQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCit7Cisj
aWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisgICAgaWYgKG1fYWx0
ZXJuYXRlRGlzcGF0Y2hlcikgeworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPkNvbW1h
bmQocmVxdWVzdElkKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUo
SU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworICAgIEVycm9yU3RyaW5nIGVycm9y
OworICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
CisgICAgbV9hZ2VudC0+Q29tbWFuZChlcnJvcik7CisKKyAgICBpZiAoIWVycm9yLmxlbmd0aCgp
KQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBX
VEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2VuZERpc3Bh
dGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9y
LCBXVEZNb3ZlKGVycm9yKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMg
RW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBU
ZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29u
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1
ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CisKK2NsYXNzIEZyb250ZW5kUm91dGVyOworCitjbGFzcyBEb21haW5Gcm9udGVuZERp
c3BhdGNoZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIERv
bWFpbkZyb250ZW5kRGlzcGF0Y2hlcihGcm9udGVuZFJvdXRlciYgZnJvbnRlbmRSb3V0ZXIpIDog
bV9mcm9udGVuZFJvdXRlcihmcm9udGVuZFJvdXRlcikgeyB9CisgICAgdm9pZCBFdmVudCgpOwor
cHJpdmF0ZToKKyAgICBGcm9udGVuZFJvdXRlciYgbV9mcm9udGVuZFJvdXRlcjsKK307CisKK30g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRj
aGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hp
bmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEZyb250ZW5k
RGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250
ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKKwordm9pZCBEb21haW5Gcm9udGVuZERpc3BhdGNoZXI6OkV2ZW50KCkKK3sK
KyAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRl
KCk7CisgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50
Il9zKTsKKworICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pT
T05TdHJpbmcoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZp
bGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sT2JqZWN0cy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFu
ZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+CisjaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCituYW1lc3BhY2Ug
UHJvdG9jb2wgeworCisKKworCisKKworCisKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKwor
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVj
dHMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9t
YWluLWRlYnVnZ2FibGVUeXBlLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0
cy5oIgorCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFByb3RvY29sIHsK
KworCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdn
YWJsZVR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hl
cnMuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKK0Bwcm90b2NvbCBUZXN0UHJvdG9j
b2xEb21haW5Eb21haW5IYW5kbGVyOworCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCitjbGFz
cyBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgQWx0
ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOworcHVibGljOgorICAgIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihp
ZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdhdGUg
PSBoYW5kbGVyOyB9CisgICAgdm9pZCBDb21tYW5kKGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKK3By
aXZhdGU6CisgICAgUmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+
PiBtX2RlbGVnYXRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJs
ZVR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBv
cnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgi
CisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2luY2x1ZGUgIlRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisKK25h
bWVzcGFjZSBJbnNwZWN0b3IgeworCit2b2lkIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlz
cGF0Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVlc3RJZCkKK3sKKyAgICBpZiAoIVttX2RlbGVnYXRl
IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOnN1
Y2Nlc3NDYWxsYmFjazopXSkgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQ
cm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5k
LCAiJ0RvbWFpbi5Db21tYW5kJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgeworICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2Vu
ZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgfTsKKworICAgIGlkIHN1Y2Nlc3NDYWxs
YmFjayA9IF57CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1
ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKKyAgICB9OworCisgICAgW21f
ZGVsZWdhdGUgQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0Nh
bGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107Cit9CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgor
CisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorCisjIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1
Z2dhYmxlVHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgorCitfX2F0dHJpYnV0ZV9fKCh2
aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJh
dGlvbiA6IE5TT2JqZWN0CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluLCBzZXR0ZXI9c2V0
RG9tYWluSGFuZGxlcjopIGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IGRvbWFp
bkhhbmRsZXI7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFRlc3RQcm90b2NvbERv
bWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqZG9tYWluRXZlbnREaXNwYXRjaGVyOworQGVuZAor
CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dh
YmxlVHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lt
cG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9j
b2xJbnRlcm5hbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgi
CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgor
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+
CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0
Y2hlcnMuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVycy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24g
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29u
dHJvbGxlciogX2NvbnRyb2xsZXI7CisgICAgaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFu
ZGxlcj4gX2RvbWFpbkhhbmRsZXI7CisgICAgVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnRE
aXNwYXRjaGVyICpfZG9tYWluRXZlbnREaXNwYXRjaGVyOworfQorCistIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRy
b2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAg
ICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIg
PSBjb250cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sK
KyAgICBbX2RvbWFpbkhhbmRsZXIgcmVsZWFzZV07CisgICAgW19kb21haW5FdmVudERpc3BhdGNo
ZXIgcmVsZWFzZV07CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistICh2b2lkKXNldERvbWFp
bkhhbmRsZXI6KGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+KWhhbmRsZXIKK3sK
KyAgICBpZiAoaGFuZGxlciA9PSBfZG9tYWluSGFuZGxlcikKKyAgICAgICAgcmV0dXJuOworCisg
ICAgW19kb21haW5IYW5kbGVyIHJlbGVhc2VdOworICAgIF9kb21haW5IYW5kbGVyID0gW2hhbmRs
ZXIgcmV0YWluXTsKKworICAgIGF1dG8gYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IG1ha2VVbmlxdWU8
T2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyPihoYW5kbGVyKTsKKyAgICBhdXRv
IGFsdGVybmF0ZUFnZW50ID0gbWFrZVVuaXF1ZTxBbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudDxE
b21haW5CYWNrZW5kRGlzcGF0Y2hlciwgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXI+
PigiRG9tYWluIl9zLCAqX2NvbnRyb2xsZXIsIFdURk1vdmUoYWx0ZXJuYXRlRGlzcGF0Y2hlcikp
OworICAgIF9jb250cm9sbGVyLT5hcHBlbmRFeHRyYUFnZW50KFdURk1vdmUoYWx0ZXJuYXRlQWdl
bnQpKTsKK30KKworLSAoaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4pZG9tYWlu
SGFuZGxlcgoreworICAgIHJldHVybiBfZG9tYWluSGFuZGxlcjsKK30KKworLSAoVGVzdFByb3Rv
Y29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyICopZG9tYWluRXZlbnREaXNwYXRjaGVyCit7
CisgICAgaWYgKCFfZG9tYWluRXZlbnREaXNwYXRjaGVyKQorICAgICAgICBfZG9tYWluRXZlbnRE
aXNwYXRjaGVyID0gW1tUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgYWxs
b2NdIGluaXRXaXRoQ29udHJvbGxlcjpfY29udHJvbGxlcl07CisgICAgcmV0dXJuIF9kb21haW5F
dmVudERpc3BhdGNoZXI7Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24ubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlz
cGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRh
cmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5h
bC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQg
PHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBs
ZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIKK3sKKyAg
ICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworfQorCistIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRy
b2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICgh
c2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAg
X2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lk
KUV2ZW50Cit7CisgICAgY29uc3QgRnJvbnRlbmRSb3V0ZXImIHJvdXRlciA9IF9jb250cm9sbGVy
LT5mcm9udGVuZFJvdXRlcigpOworCisgICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2Ug
PSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1l
dGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7CisgICAgcm91dGVyLnNlbmRFdmVudChqc29uTWVz
c2FnZS0+dG9KU09OU3RyaW5nKCkpOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2wuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmQtdGFyZ2V0VHlw
ZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgor
CisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+CisKKworCisK
KworCisKKworQHByb3RvY29sIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXIgPE5TT2Jq
ZWN0PgorQG9wdGlvbmFsCistICh2b2lkKUNvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazoodm9pZChe
KShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4p
KHZvaWQpKXN1Y2Nlc3NDYWxsYmFjazsKK0BlbmQKKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0
eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50
RGlzcGF0Y2hlciA6IE5TT2JqZWN0CistICh2b2lkKUV2ZW50OworQGVuZAorCisKKyNpbXBvcnQg
PFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4KKwor
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmQt
dGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbiBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgor
I2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKKyNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8d3Rm
L0pTT05WYWx1ZXMuaD4KKworQGludGVyZmFjZSBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVu
dERpc3BhdGNoZXIgKFByaXZhdGUpCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVy
OihJbnNwZWN0b3I6OkF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcjsK
K0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1
Z2dhYmxlVHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9j
b2xBcnJheUNvbnZlcnNpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+CitPcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90
b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4t
ZGVidWdnYWJsZVR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorCisjaW1wb3J0ICJU
ZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKKyNpbXBv
cnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisKK3VzaW5n
IG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworCisKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlw
ZXMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5
cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgor
CisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPFdlYklu
c3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisjaW1wb3J0IDx3dGYvQXNz
ZXJ0aW9ucy5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNl
IEluc3BlY3RvcjsKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbi1yZXN1bHQgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMt
d2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbi1yZXN1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAuLjgyYzU5MDZjMTdiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmRzLXdp
dGgtYXN5bmMtYXR0cmlidXRlLmpzb24tcmVzdWx0CkBAIC0wLDAgKzEsMTc2MCBAQAorIyMjIEJl
Z2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcy5pbgorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisvLyBEYXRhYmFzZQorSW5zcGVj
dG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiRGF0YWJhc2UiLCBudWxsKTsKK0luc3BlY3RvckJh
Y2tlbmQucmVnaXN0ZXJFbnVtKCJEYXRhYmFzZS5QcmltYXJ5Q29sb3JzIiwge1JlZDogInJlZCIs
IEdyZWVuOiAiZ3JlZW4iLCBCbHVlOiAiYmx1ZSJ9KTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0
ZXJDb21tYW5kKCJEYXRhYmFzZS5leGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzIiwg
bnVsbCwgW3sibmFtZSI6ICJkYXRhYmFzZUlkIiwgInR5cGUiOiAibnVtYmVyIn0sIHsibmFtZSI6
ICJxdWVyeSIsICJ0eXBlIjogInN0cmluZyJ9XSwgWyJjb2x1bW5OYW1lcyIsICJub3RlcyIsICJ0
aW1lc3RhbXAiLCAidmFsdWVzIiwgInBheWxvYWQiLCAiZGF0YWJhc2VJZCIsICJzcWxFcnJvciIs
ICJzY3JlZW5Db2xvciIsICJhbHRlcm5hdGVDb2xvcnMiLCAicHJpbnRDb2xvciJdKTsKK0luc3Bl
Y3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJEYXRhYmFzZS5leGVjdXRlU1FMQXN5bmNPcHRp
b25hbFJldHVyblZhbHVlcyIsIG51bGwsIFt7Im5hbWUiOiAiZGF0YWJhc2VJZCIsICJ0eXBlIjog
Im51bWJlciJ9LCB7Im5hbWUiOiAicXVlcnkiLCAidHlwZSI6ICJzdHJpbmcifV0sIFsiY29sdW1u
TmFtZXMiLCAibm90ZXMiLCAidGltZXN0YW1wIiwgInZhbHVlcyIsICJwYXlsb2FkIiwgImRhdGFi
YXNlSWQiLCAic3FsRXJyb3IiLCAic2NyZWVuQ29sb3IiLCAiYWx0ZXJuYXRlQ29sb3JzIiwgInBy
aW50Q29sb3IiXSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiRGF0YWJhc2Uu
ZXhlY3V0ZVNRTFN5bmMiLCBudWxsLCBbeyJuYW1lIjogImRhdGFiYXNlSWQiLCAidHlwZSI6ICJu
dW1iZXIifSwgeyJuYW1lIjogInF1ZXJ5IiwgInR5cGUiOiAic3RyaW5nIn1dLCBbImNvbHVtbk5h
bWVzIiwgIm5vdGVzIiwgInRpbWVzdGFtcCIsICJ2YWx1ZXMiLCAicGF5bG9hZCIsICJkYXRhYmFz
ZUlkIiwgInNxbEVycm9yIiwgImFsdGVybmF0ZUNvbG9ycyIsICJzY3JlZW5Db2xvciIsICJwcmlu
dENvbG9yIl0pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIkRhdGFiYXNlLmV4
ZWN1dGVTUUxBc3luYyIsIG51bGwsIFt7Im5hbWUiOiAiZGF0YWJhc2VJZCIsICJ0eXBlIjogIm51
bWJlciJ9LCB7Im5hbWUiOiAicXVlcnkiLCAidHlwZSI6ICJzdHJpbmcifV0sIFsiY29sdW1uTmFt
ZXMiLCAibm90ZXMiLCAidGltZXN0YW1wIiwgInZhbHVlcyIsICJwYXlsb2FkIiwgImRhdGFiYXNl
SWQiLCAic3FsRXJyb3IiLCAic2NyZWVuQ29sb3IiLCAiYWx0ZXJuYXRlQ29sb3JzIiwgInByaW50
Q29sb3IiXSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRGF0YWJhc2VEaXNwYXRjaGVyID0g
SW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRpc3BhdGNoZXIuYmluZChJbnNwZWN0b3JCYWNrZW5k
LCAiRGF0YWJhc2UiKTsKK0luc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkRhdGFiYXNl
IiwgbnVsbCk7CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcy5pbgor
CisjIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1
dGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEg
b25jZQorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyNp
bmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNz
IEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldEJhY2tl
bmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1f
YmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9CisgICAgQmFja2VuZERp
c3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlz
cGF0Y2hlci5nZXQoKTsgfQorcHJpdmF0ZToKKyAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+
IG1fYmFja2VuZERpc3BhdGNoZXI7Cit9OworCisKK2NsYXNzIEFsdGVybmF0ZURhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVi
bGljOgorICAgIHZpcnR1YWwgfkFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoKSB7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhs
b25nIGNhbGxJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMo
bG9uZyBjYWxsSWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxTeW5jKGxvbmcgY2FsbElkLCBpbnQgaW5f
ZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBleGVjdXRlU1FMQXN5bmMobG9uZyBjYWxsSWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBT
dHJpbmcmIGluX3F1ZXJ5KSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKwor
I2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorIyMjIEVu
ZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZp
bGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1l
c3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKKyNpZiBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK2NsYXNzIEFsdGVybmF0ZURh
dGFiYXNlQmFja2VuZERpc3BhdGNoZXI7CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCisKK2NsYXNzIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyIHsKK3B1YmxpYzoKKyAgICAvLyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIgJ3ByaW50Q29sb3In
IHdoaWxlIGdlbmVyYXRpbmcgY29tbWFuZC9ldmVudCBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0
dXJuVmFsdWVzLgorICAgIGVudW0gY2xhc3MgUHJpbnRDb2xvciB7CisgICAgICAgIEN5YW4gPSAz
LAorICAgICAgICBNYWdlbnRhID0gNCwKKyAgICAgICAgWWVsbG93ID0gNSwKKyAgICAgICAgQmxh
Y2sgPSA2LAorICAgIH07IC8vIGVudW0gY2xhc3MgUHJpbnRDb2xvcgorICAgIHZpcnR1YWwgdm9p
ZCBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKEVycm9yU3RyaW5nJiwgaW50IGlu
X2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnksIFJlZlB0cjxKU09OOjpBcnJheU9m
PFN0cmluZz4+JiBvcHRfb3V0X2NvbHVtbk5hbWVzLCBPcHRpb25hbDxTdHJpbmc+JiBvcHRfb3V0
X25vdGVzLCBPcHRpb25hbDxkb3VibGU+JiBvcHRfb3V0X3RpbWVzdGFtcCwgT3B0aW9uYWw8SlNP
Tjo6T2JqZWN0PiYgb3B0X291dF92YWx1ZXMsIE9wdGlvbmFsPEpTT046OlZhbHVlPiYgb3B0X291
dF9wYXlsb2FkLCBPcHRpb25hbDxpbnQ+JiBvcHRfb3V0X2RhdGFiYXNlSWQsIFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiBvcHRfb3V0X3NxbEVycm9yLCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyogb3B0X291dF9zY3JlZW5D
b2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiBv
cHRfb3V0X2FsdGVybmF0ZUNvbG9ycywgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6
OlByaW50Q29sb3IqIG9wdF9vdXRfcHJpbnRDb2xvcikgPSAwOworICAgIGNsYXNzIEV4ZWN1dGVT
UUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2sgOiBwdWJsaWMgQmFja2VuZERpc3Bh
dGNoZXI6OkNhbGxiYWNrQmFzZSB7CisgICAgcHVibGljOgorICAgICAgICBFeGVjdXRlU1FMQXN5
bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrKFJlZjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiwg
aW50IGlkKTsKKyAgICAgICAgdm9pZCBzZW5kU3VjY2VzcyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxT
dHJpbmc+PiYmIGNvbHVtbk5hbWVzLCBPcHRpb25hbDxTdHJpbmc+JiBub3RlcywgT3B0aW9uYWw8
ZG91YmxlPiYgdGltZXN0YW1wLCBPcHRpb25hbDxKU09OOjpPYmplY3Q+JiB2YWx1ZXMsIE9wdGlv
bmFsPEpTT046OlZhbHVlPiYgcGF5bG9hZCwgT3B0aW9uYWw8aW50PiYgZGF0YWJhc2VJZCwgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mJiBzcWxFcnJvciwgT3B0
aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IHNjcmVl
bkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4m
JiBhbHRlcm5hdGVDb2xvcnMsIE9wdGlvbmFsPERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyOjpQcmludENvbG9yPiBwcmludENvbG9yKTsKKyAgICB9OworICAgIHZpcnR1YWwgdm9pZCBl
eGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhpbnQgaW5fZGF0YWJhc2VJZCwgY29u
c3QgU3RyaW5nJiBpbl9xdWVyeSwgUmVmPEV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFs
dWVzQ2FsbGJhY2s+JiYgY2FsbGJhY2spID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNR
TFN5bmMoRXJyb3JTdHJpbmcmLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9x
dWVyeSwgUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mIG91dF9jb2x1bW5OYW1lcywgU3Ry
aW5nKiBvdXRfbm90ZXMsIGRvdWJsZSogb3V0X3RpbWVzdGFtcCwgSlNPTjo6T2JqZWN0KiBvdXRf
dmFsdWVzLCBKU09OOjpWYWx1ZSogb3V0X3BheWxvYWQsIGludCogb3V0X2RhdGFiYXNlSWQsIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiBvdXRfc3FsRXJyb3Is
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYgb3V0X2Fs
dGVybmF0ZUNvbG9ycywgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xv
cnMqIG91dF9zY3JlZW5Db2xvciwgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlBy
aW50Q29sb3IqIG91dF9wcmludENvbG9yKSA9IDA7CisgICAgY2xhc3MgRXhlY3V0ZVNRTEFzeW5j
Q2FsbGJhY2sgOiBwdWJsaWMgQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZSB7CisgICAg
cHVibGljOgorICAgICAgICBFeGVjdXRlU1FMQXN5bmNDYWxsYmFjayhSZWY8QmFja2VuZERpc3Bh
dGNoZXI+JiYsIGludCBpZCk7CisgICAgICAgIHZvaWQgc2VuZFN1Y2Nlc3MoUmVmUHRyPEpTT046
OkFycmF5T2Y8U3RyaW5nPj4mJiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBub3RlcywgZG91
YmxlIHRpbWVzdGFtcCwgSlNPTjo6T2JqZWN0IHZhbHVlcywgSlNPTjo6VmFsdWUgcGF5bG9hZCwg
aW50IGRhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJy
b3I+JiYgc3FsRXJyb3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29s
b3JzIHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNv
bG9yTGlzdD4mJiBhbHRlcm5hdGVDb2xvcnMsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyOjpQcmludENvbG9yIHByaW50Q29sb3IpOworICAgIH07CisgICAgdmlydHVhbCB2b2lkIGV4
ZWN1dGVTUUxBc3luYyhpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSwg
UmVmPEV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrPiYmIGNhbGxiYWNrKSA9IDA7Citwcm90ZWN0ZWQ6
CisgICAgdmlydHVhbCB+RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKK307CisK
K2NsYXNzIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVu
dGFsQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8RGF0YWJhc2VC
YWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElk
LCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5h
bDsKK3ByaXZhdGU6CisgICAgdm9pZCBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVz
KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOworICAg
IHZvaWQgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0SWQs
IFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisgICAgdm9pZCBleGVjdXRlU1FM
U3luYyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsK
KyAgICB2b2lkIGV4ZWN1dGVTUUxBc3luYyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9i
amVjdD4mJiBwYXJhbWV0ZXJzKTsKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKK3B1YmxpYzoKKyAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJu
YXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2Fs
dGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9Citwcml2YXRlOgorICAg
IEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIqIG1fYWx0ZXJuYXRlRGlzcGF0Y2hl
ciB7IG51bGxwdHIgfTsKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKK3ByaXZhdGU6CisgICAgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5k
RGlzcGF0Y2hlciYsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQgeyBudWxscHRyIH07Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNw
YXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0
cmlidXRlLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNs
dWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQorI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0
Y2hlcnMuaCIKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK0RhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyOjp+RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KKworUmVmPERh
dGFiYXNlQmFja2VuZERpc3BhdGNoZXI+IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0
ZShCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIERhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOworfQorCitE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKEJhY2tl
bmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIqIGFnZW50KQorICAgIDogU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFj
a2VuZERpc3BhdGNoZXIpCisgICAgLCBtX2FnZW50KGFnZW50KQoreworICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbigiRGF0YWJhc2UiX3MsIHRoaXMp
OworfQorCit2b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVx
dWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdl
KQoreworICAgIFJlZjxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsK
KworICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7CisgICAgbWVzc2FnZS0+Z2V0
T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRlcnMpOworCisgICAgaWYgKG1ldGhvZCA9PSAiZXhl
Y3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyIpIHsKKyAgICAgICAgZXhlY3V0ZVNRTFN5
bmNPcHRpb25hbFJldHVyblZhbHVlcyhyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChtZXRob2QgPT0gImV4ZWN1dGVTUUxBc3lu
Y09wdGlvbmFsUmV0dXJuVmFsdWVzIikgeworICAgICAgICBleGVjdXRlU1FMQXN5bmNPcHRpb25h
bFJldHVyblZhbHVlcyhyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIGlmIChtZXRob2QgPT0gImV4ZWN1dGVTUUxTeW5jIikgeworICAg
ICAgICBleGVjdXRlU1FMU3luYyhyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChtZXRob2QgPT0gImV4ZWN1dGVTUUxBc3luYyIp
IHsKKyAgICAgICAgZXhlY3V0ZVNRTEFzeW5jKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJz
KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5y
ZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidE
YXRhYmFzZS4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOworfQorCit2b2lkIERhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMo
bG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycykKK3sKKyAg
ICBpbnQgaW5fZGF0YWJhc2VJZCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEludGVnZXIocGFy
YW1ldGVycy5nZXQoKSwgImRhdGFiYXNlSWQiX3MsIG51bGxwdHIpOworICAgIFN0cmluZyBpbl9x
dWVyeSA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwYXJhbWV0ZXJzLmdldCgpLCAi
cXVlcnkiX3MsIG51bGxwdHIpOworICAgIGlmIChtX2JhY2tlbmREaXNwYXRjaGVyLT5oYXNQcm90
b2NvbEVycm9ycygpKSB7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3Rv
Y29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsICJTb21lIGFyZ3VtZW50
cyBvZiBtZXRob2QgJ0RhdGFiYXNlLmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMn
IGNhbid0IGJlIHByb2Nlc3NlZCJfcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNpZiBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyAgICBpZiAobV9hbHRlcm5h
dGVEaXNwYXRjaGVyKSB7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZVNR
TFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhyZXF1ZXN0SWQsIGluX2RhdGFiYXNlSWQsIGluX3F1
ZXJ5KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgIFJl
ZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVm
UHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gb3V0X2NvbHVtbk5hbWVzOworICAgIE9wdGlvbmFs
PFN0cmluZz4gb3V0X25vdGVzOworICAgIE9wdGlvbmFsPGRvdWJsZT4gb3V0X3RpbWVzdGFtcDsK
KyAgICBPcHRpb25hbDxKU09OOjpPYmplY3Q+IG91dF92YWx1ZXM7CisgICAgT3B0aW9uYWw8SlNP
Tjo6VmFsdWU+IG91dF9wYXlsb2FkOworICAgIE9wdGlvbmFsPGludD4gb3V0X2RhdGFiYXNlSWQ7
CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gb3V0X3Nx
bEVycm9yOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3Jz
IG91dF9zY3JlZW5Db2xvcjsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6OkNvbG9yTGlzdD4gb3V0X2FsdGVybmF0ZUNvbG9yczsKKyAgICBEYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciBvdXRfcHJpbnRDb2xvcjsKKyAgICBtX2FnZW50
LT5leGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGVycm9yLCBpbl9kYXRhYmFzZUlk
LCBpbl9xdWVyeSwgb3V0X2NvbHVtbk5hbWVzLCBvdXRfbm90ZXMsIG91dF90aW1lc3RhbXAsIG91
dF92YWx1ZXMsIG91dF9wYXlsb2FkLCBvdXRfZGF0YWJhc2VJZCwgb3V0X3NxbEVycm9yLCBvdXRf
c2NyZWVuQ29sb3IsIG91dF9hbHRlcm5hdGVDb2xvcnMsIG91dF9wcmludENvbG9yKTsKKworICAg
IGlmICghZXJyb3IubGVuZ3RoKCkpIHsKKyAgICAgICAgaWYgKG91dF9jb2x1bW5OYW1lcykKKyAg
ICAgICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBvdXRfY29sdW1uTmFt
ZXMpOworICAgICAgICBpZiAob3V0X25vdGVzLmhhc1ZhbHVlKCkpCisgICAgICAgICAgICByZXN1
bHQtPnNldFN0cmluZygibm90ZXMiX3MsICpvdXRfbm90ZXMpOworICAgICAgICBpZiAob3V0X3Rp
bWVzdGFtcC5oYXNWYWx1ZSgpKQorICAgICAgICAgICAgcmVzdWx0LT5zZXREb3VibGUoInRpbWVz
dGFtcCJfcywgKm91dF90aW1lc3RhbXApOworICAgICAgICBpZiAob3V0X3ZhbHVlcy5oYXNWYWx1
ZSgpKQorICAgICAgICAgICAgcmVzdWx0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgKm91dF92YWx1
ZXMpOworICAgICAgICBpZiAob3V0X3BheWxvYWQuaGFzVmFsdWUoKSkKKyAgICAgICAgICAgIHJl
c3VsdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsICpvdXRfcGF5bG9hZCk7CisgICAgICAgIGlmIChv
dXRfZGF0YWJhc2VJZC5oYXNWYWx1ZSgpKQorICAgICAgICAgICAgcmVzdWx0LT5zZXRJbnRlZ2Vy
KCJkYXRhYmFzZUlkIl9zLCAqb3V0X2RhdGFiYXNlSWQpOworICAgICAgICBpZiAob3V0X3NxbEVy
cm9yKQorICAgICAgICAgICAgcmVzdWx0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBvdXRfc3Fs
RXJyb3IpOworICAgICAgICBpZiAob3V0X3NjcmVlbkNvbG9yLmhhc1ZhbHVlKCkpCisgICAgICAg
ICAgICByZXN1bHQtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsICpvdXRfc2NyZWVuQ29sb3Ip
OworICAgICAgICBpZiAob3V0X2FsdGVybmF0ZUNvbG9ycykKKyAgICAgICAgICAgIHJlc3VsdC0+
c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgb3V0X2FsdGVybmF0ZUNvbG9ycyk7CisgICAg
ICAgIGlmIChvdXRfcHJpbnRDb2xvci5oYXNWYWx1ZSgpKQorICAgICAgICAgICAgcmVzdWx0LT5z
ZXRTdHJpbmcoInByaW50Q29sb3IiX3MsICpvdXRfcHJpbnRDb2xvcik7CisgICAgfQorICAgIGlm
ICghZXJyb3IubGVuZ3RoKCkpCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNw
b25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOworICAgIGVsc2UKKyAgICAg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0
Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKK30KKworRGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2Fs
bGJhY2s6OkV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2soUmVmPEJh
Y2tlbmREaXNwYXRjaGVyPiYmIGJhY2tlbmREaXNwYXRjaGVyLCBpbnQgaWQpIDogQmFja2VuZERp
c3BhdGNoZXI6OkNhbGxiYWNrQmFzZShXVEZNb3ZlKGJhY2tlbmREaXNwYXRjaGVyKSwgaWQpIHsg
fQorCit2b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5
bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrOjpzZW5kU3VjY2VzcyhSZWZQdHI8SlNPTjo6
QXJyYXlPZjxTdHJpbmc+PiYmIGNvbHVtbk5hbWVzLCBPcHRpb25hbDxTdHJpbmc+JiBub3Rlcywg
T3B0aW9uYWw8ZG91YmxlPiYgdGltZXN0YW1wLCBPcHRpb25hbDxKU09OOjpPYmplY3Q+JiB2YWx1
ZXMsIE9wdGlvbmFsPEpTT046OlZhbHVlPiYgcGF5bG9hZCwgT3B0aW9uYWw8aW50PiYgZGF0YWJh
c2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mJiBzcWxF
cnJvciwgT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xv
cnM+IHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNv
bG9yTGlzdD4mJiBhbHRlcm5hdGVDb2xvcnMsIE9wdGlvbmFsPERhdGFiYXNlQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyOjpQcmludENvbG9yPiBwcmludENvbG9yKQoreworICAgIFJlZjxKU09OOjpP
YmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBpZiAoY29s
dW1uTmFtZXMpCisgICAgICAgIGpzb25NZXNzYWdlLT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3Ms
IGNvbHVtbk5hbWVzKTsKKyAgICBpZiAobm90ZXMuaGFzVmFsdWUoKSkKKyAgICAgICAganNvbk1l
c3NhZ2UtPnNldFN0cmluZygibm90ZXMiX3MsICpub3Rlcyk7CisgICAgaWYgKHRpbWVzdGFtcC5o
YXNWYWx1ZSgpKQorICAgICAgICBqc29uTWVzc2FnZS0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3Ms
ICp0aW1lc3RhbXApOworICAgIGlmICh2YWx1ZXMuaGFzVmFsdWUoKSkKKyAgICAgICAganNvbk1l
c3NhZ2UtPnNldE9iamVjdCgidmFsdWVzIl9zLCAqdmFsdWVzKTsKKyAgICBpZiAocGF5bG9hZC5o
YXNWYWx1ZSgpKQorICAgICAgICBqc29uTWVzc2FnZS0+c2V0VmFsdWUoInBheWxvYWQiX3MsICpw
YXlsb2FkKTsKKyAgICBpZiAoZGF0YWJhc2VJZC5oYXNWYWx1ZSgpKQorICAgICAgICBqc29uTWVz
c2FnZS0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgKmRhdGFiYXNlSWQpOworICAgIGlmIChz
cWxFcnJvcikKKyAgICAgICAganNvbk1lc3NhZ2UtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIHNx
bEVycm9yKTsKKyAgICBpZiAoc2NyZWVuQ29sb3IuaGFzVmFsdWUoKSkKKyAgICAgICAganNvbk1l
c3NhZ2UtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsICpzY3JlZW5Db2xvcik7CisgICAgaWYg
KGFsdGVybmF0ZUNvbG9ycykKKyAgICAgICAganNvbk1lc3NhZ2UtPnNldEFycmF5KCJhbHRlcm5h
dGVDb2xvcnMiX3MsIGFsdGVybmF0ZUNvbG9ycyk7CisgICAgaWYgKHByaW50Q29sb3IuaGFzVmFs
dWUoKSkKKyAgICAgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgKnBy
aW50Q29sb3IpOworICAgIENhbGxiYWNrQmFzZTo6c2VuZFN1Y2Nlc3MoV1RGTW92ZShqc29uTWVz
c2FnZSkpOworfQorCit2b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxB
c3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmIHBhcmFtZXRlcnMpCit7CisgICAgaW50IGluX2RhdGFiYXNlSWQgPSBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5nZXRJbnRlZ2VyKHBhcmFtZXRlcnMuZ2V0KCksICJkYXRhYmFzZUlkIl9zLCBu
dWxscHRyKTsKKyAgICBTdHJpbmcgaW5fcXVlcnkgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRT
dHJpbmcocGFyYW1ldGVycy5nZXQoKSwgInF1ZXJ5Il9zLCBudWxscHRyKTsKKyAgICBpZiAobV9i
YWNrZW5kRGlzcGF0Y2hlci0+aGFzUHJvdG9jb2xFcnJvcnMoKSkgeworICAgICAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZh
bGlkUGFyYW1zLCAiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICdEYXRhYmFzZS5leGVjdXRlU1FM
QXN5bmNPcHRpb25hbFJldHVyblZhbHVlcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIl9zKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQorICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKKyAgICAgICAgbV9hbHRl
cm5hdGVEaXNwYXRjaGVyLT5leGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhyZXF1
ZXN0SWQsIGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworICAg
IFJlZjxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jT3B0
aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjaz4gY2FsbGJhY2sgPSBhZG9wdFJlZigqbmV3IERhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVy
blZhbHVlc0NhbGxiYWNrKG1fYmFja2VuZERpc3BhdGNoZXIuY29weVJlZigpLCByZXF1ZXN0SWQp
KTsKKyAgICBtX2FnZW50LT5leGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhpbl9k
YXRhYmFzZUlkLCBpbl9xdWVyeSwgY2FsbGJhY2suY29weVJlZigpKTsKKworfQorCit2b2lkIERh
dGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5jKGxvbmcgcmVxdWVzdElkLCBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpCit7CisgICAgaW50IGluX2RhdGFiYXNl
SWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRJbnRlZ2VyKHBhcmFtZXRlcnMuZ2V0KCksICJk
YXRhYmFzZUlkIl9zLCBudWxscHRyKTsKKyAgICBTdHJpbmcgaW5fcXVlcnkgPSBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgInF1ZXJ5Il9zLCBudWxscHRy
KTsKKyAgICBpZiAobV9iYWNrZW5kRGlzcGF0Y2hlci0+aGFzUHJvdG9jb2xFcnJvcnMoKSkgewor
ICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmRE
aXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCAiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICdEYXRh
YmFzZS5leGVjdXRlU1FMU3luYycgY2FuJ3QgYmUgcHJvY2Vzc2VkIl9zKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQorICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKKyAgICAgICAgbV9hbHRlcm5hdGVE
aXNwYXRjaGVyLT5leGVjdXRlU1FMU3luYyhyZXF1ZXN0SWQsIGluX2RhdGFiYXNlSWQsIGluX3F1
ZXJ5KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgIFJl
ZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVm
UHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gb3V0X2NvbHVtbk5hbWVzOworICAgIFN0cmluZyBv
dXRfbm90ZXM7CisgICAgZG91YmxlIG91dF90aW1lc3RhbXA7CisgICAgSlNPTjo6T2JqZWN0IG91
dF92YWx1ZXM7CisgICAgSlNPTjo6VmFsdWUgb3V0X3BheWxvYWQ7CisgICAgaW50IG91dF9kYXRh
YmFzZUlkOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+
IG91dF9zcWxFcnJvcjsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6
OkNvbG9yTGlzdD4gb3V0X2FsdGVybmF0ZUNvbG9yczsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyBvdXRfc2NyZWVuQ29sb3I7CisgICAgRGF0YWJhc2VC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3Igb3V0X3ByaW50Q29sb3I7CisgICAg
bV9hZ2VudC0+ZXhlY3V0ZVNRTFN5bmMoZXJyb3IsIGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5LCBv
dXRfY29sdW1uTmFtZXMsICZvdXRfbm90ZXMsICZvdXRfdGltZXN0YW1wLCBvdXRfdmFsdWVzLCAm
b3V0X3BheWxvYWQsICZvdXRfZGF0YWJhc2VJZCwgb3V0X3NxbEVycm9yLCBvdXRfYWx0ZXJuYXRl
Q29sb3JzLCAmb3V0X3NjcmVlbkNvbG9yLCAmb3V0X3ByaW50Q29sb3IpOworCisgICAgaWYgKCFl
cnJvci5sZW5ndGgoKSkgeworICAgICAgICByZXN1bHQtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJf
cywgb3V0X2NvbHVtbk5hbWVzKTsKKyAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoIm5vdGVzIl9z
LCBvdXRfbm90ZXMpOworICAgICAgICByZXN1bHQtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCBv
dXRfdGltZXN0YW1wKTsKKyAgICAgICAgcmVzdWx0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgb3V0
X3ZhbHVlcyk7CisgICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIG91dF9wYXls
b2FkKTsKKyAgICAgICAgcmVzdWx0LT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCBvdXRfZGF0
YWJhc2VJZCk7CisgICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgb3V0X3Nx
bEVycm9yKTsKKyAgICAgICAgcmVzdWx0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCBv
dXRfYWx0ZXJuYXRlQ29sb3JzKTsKKyAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInNjcmVlbkNv
bG9yIl9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50
VmFsdWUob3V0X3NjcmVlbkNvbG9yKSk7CisgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJwcmlu
dENvbG9yIl9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0
YW50VmFsdWUob3V0X3ByaW50Q29sb3IpKTsKKyAgICB9CisgICAgaWYgKCFlcnJvci5sZW5ndGgo
KSkKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwg
V1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7CisgICAgZWxzZQorICAgICAgICBtX2JhY2tlbmREaXNw
YXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJv
ciwgV1RGTW92ZShlcnJvcikpOworfQorCitEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxl
cjo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2s6OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrKFJlZjxC
YWNrZW5kRGlzcGF0Y2hlcj4mJiBiYWNrZW5kRGlzcGF0Y2hlciwgaW50IGlkKSA6IEJhY2tlbmRE
aXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UoV1RGTW92ZShiYWNrZW5kRGlzcGF0Y2hlciksIGlkKSB7
IH0KKwordm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFz
eW5jQ2FsbGJhY2s6OnNlbmRTdWNjZXNzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiYg
Y29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIEpTT046
Ok9iamVjdCB2YWx1ZXMsIEpTT046OlZhbHVlIHBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYmIHNxbEVycm9yLCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyBzY3JlZW5Db2xvciwgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiYgYWx0ZXJuYXRl
Q29sb3JzLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciBwcmlu
dENvbG9yKQoreworICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9z
LCBjb2x1bW5OYW1lcyk7CisgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibm90ZXMiX3MsIG5v
dGVzKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIHRpbWVzdGFt
cCk7CisgICAganNvbk1lc3NhZ2UtPnNldE9iamVjdCgidmFsdWVzIl9zLCB2YWx1ZXMpOworICAg
IGpzb25NZXNzYWdlLT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgcGF5bG9hZCk7CisgICAganNvbk1l
c3NhZ2UtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsIGRhdGFiYXNlSWQpOworICAgIGpzb25N
ZXNzYWdlLT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBzcWxFcnJvcik7CisgICAganNvbk1lc3Nh
Z2UtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RI
ZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShzY3JlZW5Db2xvcikpOworICAgIGpzb25NZXNz
YWdlLT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCBhbHRlcm5hdGVDb2xvcnMpOworICAg
IGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShwcmludENvbG9yKSk7CisgICAg
Q2FsbGJhY2tCYXNlOjpzZW5kU3VjY2VzcyhXVEZNb3ZlKGpzb25NZXNzYWdlKSk7Cit9CisKK3Zv
aWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTEFzeW5jKGxvbmcgcmVxdWVz
dElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpCit7CisgICAgaW50IGluX2Rh
dGFiYXNlSWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRJbnRlZ2VyKHBhcmFtZXRlcnMuZ2V0
KCksICJkYXRhYmFzZUlkIl9zLCBudWxscHRyKTsKKyAgICBTdHJpbmcgaW5fcXVlcnkgPSBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgInF1ZXJ5Il9zLCBu
dWxscHRyKTsKKyAgICBpZiAobV9iYWNrZW5kRGlzcGF0Y2hlci0+aGFzUHJvdG9jb2xFcnJvcnMo
KSkgeworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJh
Y2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCAiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9k
ICdEYXRhYmFzZS5leGVjdXRlU1FMQXN5bmMnIGNhbid0IGJlIHByb2Nlc3NlZCJfcyk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKKyAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7CisgICAgICAgIG1fYWx0
ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZVNRTEFzeW5jKHJlcXVlc3RJZCwgaW5fZGF0YWJhc2VJ
ZCwgaW5fcXVlcnkpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmIC8vIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCisgICAgUmVmPERhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNDYWxsYmFjaz4gY2FsbGJhY2sgPSBh
ZG9wdFJlZigqbmV3IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FM
QXN5bmNDYWxsYmFjayhtX2JhY2tlbmREaXNwYXRjaGVyLmNvcHlSZWYoKSwgcmVxdWVzdElkKSk7
CisgICAgbV9hZ2VudC0+ZXhlY3V0ZVNRTEFzeW5jKGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5LCBj
YWxsYmFjay5jb3B5UmVmKCkpOworCit9CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisj
IyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxl
OiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbiBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFBy
b3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBG
cm9udGVuZFJvdXRlcjsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6
IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVu
ZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1h
bmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEZyb250ZW5k
RGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250
ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTog
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xPYmplY3RzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13
aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JQcm90b2NvbFR5cGVzLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNw
YWNlIEluc3BlY3RvciB7CisKKworCituYW1lc3BhY2UgUHJvdG9jb2wgeworCisKKworLy8gRm9y
d2FyZCBkZWNsYXJhdGlvbnMuCituYW1lc3BhY2UgRGF0YWJhc2UgeworY2xhc3MgRXJyb3I7Citl
bnVtIGNsYXNzIFByaW1hcnlDb2xvcnM7Cit9IC8vIERhdGFiYXNlCisvLyBFbmQgb2YgZm9yd2Fy
ZCBkZWNsYXJhdGlvbnMuCisKKworLy8gVHlwZWRlZnMuCituYW1lc3BhY2UgRGF0YWJhc2Ugewor
LyogVW5pcXVlIGlkZW50aWZpZXIgb2YgRGF0YWJhc2Ugb2JqZWN0LiAqLwordHlwZWRlZiBpbnQg
RGF0YWJhc2VJZDsKK3R5cGVkZWYgSlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpE
YXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gQ29sb3JMaXN0OworfSAvLyBEYXRhYmFzZQorLy8gRW5k
IG9mIHR5cGVkZWZzLgorCituYW1lc3BhY2UgVGVzdEhlbHBlcnMgeworCitTdHJpbmcgZ2V0RW51
bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcg
Z2V0RW51bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFsdWUpCit7CisgICAgcmV0dXJuIGdldEVudW1D
b25zdGFudFZhbHVlKHN0YXRpY19jYXN0PGludD4oZW51bVZhbHVlKSk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFRlc3RIZWxwZXJzCisKK25hbWVzcGFjZSBEYXRhYmFzZSB7CisKK2VudW0gY2xhc3Mg
UHJpbWFyeUNvbG9ycyB7CisgICAgUmVkID0gMCwKKyAgICBHcmVlbiA9IDEsCisgICAgQmx1ZSA9
IDIsCit9OyAvLyBlbnVtIGNsYXNzIFByaW1hcnlDb2xvcnMKKworLyogRGF0YWJhc2UgZXJyb3Iu
ICovCitjbGFzcyBFcnJvciA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKK3B1YmxpYzoKKyAg
ICBlbnVtIHsKKyAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAorICAgICAgICBNZXNzYWdlU2V0ID0g
MSA8PCAwLAorICAgICAgICBDb2RlU2V0ID0gMSA8PCAxLAorICAgICAgICBBbGxGaWVsZHNTZXQg
PSAoTWVzc2FnZVNldCB8IENvZGVTZXQpCisgICAgfTsKKworICAgIHRlbXBsYXRlPGludCBTVEFU
RT4KKyAgICBjbGFzcyBCdWlsZGVyIHsKKyAgICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiBtX3Jlc3VsdDsKKworICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRl
cjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CisgICAg
ICAgIH0KKworICAgICAgICBCdWlsZGVyKFJlZjwvKkVycm9yKi9KU09OOjpPYmplY3Q+JiYgb2Jq
ZWN0KQorICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCisgICAgICAgIHsK
KyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVy
X2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAgICAgICB9CisgICAgICAgIGZyaWVuZCBj
bGFzcyBFcnJvcjsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1lc3Nh
Z2VTZXQ+JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNZXNzYWdlU2V0KSwgcHJvcGVydHlfbWVz
c2FnZV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJtZXNz
YWdlIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1lc3NhZ2VTZXQ+
KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29kZVNldD4mIHNldENv
ZGUoaW50IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgQ29kZVNldCksIHByb3BlcnR5X2NvZGVfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAg
bV9yZXN1bHQtPnNldEludGVnZXIoImNvZGUiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVy
biBjYXN0U3RhdGU8Q29kZVNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIFJlZjxFcnJvcj4g
cmVsZWFzZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09
IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CisgICAgICAgICAgICBDT01QSUxF
X0FTU0VSVChzaXplb2YoRXJyb3IpID09IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5ub3RfY2Fz
dCk7CisKKyAgICAgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25SZXN1bHQgPSBtX3Jlc3Vs
dC5yZWxlYXNlTm9uTnVsbCgpOworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBXVEZNb3ZlKCpy
ZWludGVycHJldF9jYXN0PFJlZjxFcnJvcj4qPigmanNvblJlc3VsdCkpOworICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvKgorICAgICAqIFN5bnRo
ZXRpYyBjb25zdHJ1Y3RvcjoKKyAgICAgKiBSZWY8RXJyb3I+IHJlc3VsdCA9IEVycm9yOjpjcmVh
dGUoKQorICAgICAqICAgICAuc2V0TWVzc2FnZSguLi4pCisgICAgICogICAgIC5zZXRDb2RlKC4u
LikKKyAgICAgKiAgICAgLnJlbGVhc2UoKTsKKyAgICAgKi8KKyAgICBzdGF0aWMgQnVpbGRlcjxO
b0ZpZWxkc1NldD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmll
bGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICB9Cit9OworCit9IC8vIERhdGFi
YXNlCisKKworCituYW1lc3BhY2UgVGVzdEhlbHBlcnMgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBQ
cm90b2NvbEVudW1UeXBlPgorT3B0aW9uYWw8UHJvdG9jb2xFbnVtVHlwZT4gcGFyc2VFbnVtVmFs
dWVGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYpOworCisvLyBFbnVtcyBpbiB0aGUgJ0RhdGFiYXNl
JyBEb21haW4KK3RlbXBsYXRlPD4KK09wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFi
YXNlOjpQcmltYXJ5Q29sb3JzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+KGNvbnN0IFN0cmluZyYpOworCit9IC8v
IG5hbWVzcGFjZSBUZXN0SGVscGVycworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKKworLy8gSGFzaCBkZWNsYXJhdGlvbnMgaW4gdGhl
ICdEYXRhYmFzZScgRG9tYWluCit0ZW1wbGF0ZTw+CitzdHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IHsKKyAgICB0eXBlZGVmIElu
dEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IEhhc2g7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2Jq
ZWN0cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRl
Lmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorCisjaW5jbHVkZSA8
d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworbmFtZXNwYWNlIFRlc3RI
ZWxwZXJzIHsKKworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFsdWVz
W10gPSB7CisgICAgInJlZCIsCisgICAgImdyZWVuIiwKKyAgICAiYmx1ZSIsCisgICAgImN5YW4i
LAorICAgICJtYWdlbnRhIiwKKyAgICAieWVsbG93IiwKKyAgICAiYmxhY2siLAorfTsKKworU3Ry
aW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CisgICAgcmV0dXJuIGVudW1fY29u
c3RhbnRfdmFsdWVzW2NvZGVdOworfQorCisvLyBFbnVtcyBpbiB0aGUgJ0RhdGFiYXNlJyBEb21h
aW4KKwordGVtcGxhdGU8PgorT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6
OlByaW1hcnlDb2xvcnM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmlu
ZykKK3sKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7CisgICAg
ICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM6
OlJlZCwKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJp
bWFyeUNvbG9yczo6R3JlZW4sCisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM6OkJsdWUsCisgICAgfTsKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IDM7ICsraSkKKyAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1fY29u
c3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKKyAgICAgICAgICAgIHJldHVybiAoSW5z
cGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMpY29uc3RhbnRWYWx1ZXNb
aV07CisKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0
SGVscGVycworCisKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNv
biBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbmNs
dWRlIDx3dGYvUmV0YWluUHRyLmg+CisKK0Bwcm90b2NvbCBUZXN0UHJvdG9jb2xEYXRhYmFzZURv
bWFpbkhhbmRsZXI7CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKK2NsYXNzIE9iakNJbnNw
ZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZURh
dGFiYXNlQmFja2VuZERpc3BhdGNoZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwor
cHVibGljOgorICAgIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKGlkPFRl
c3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0g
aGFuZGxlcjsgfQorICAgIHZvaWQgZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhs
b25nIHJlcXVlc3RJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkp
IGZpbmFsOworICAgIHZvaWQgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9u
ZyByZXF1ZXN0SWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KSBm
aW5hbDsKKyAgICB2b2lkIGV4ZWN1dGVTUUxTeW5jKGxvbmcgcmVxdWVzdElkLCBpbnQgaW5fZGF0
YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkgZmluYWw7CisgICAgdm9pZCBleGVjdXRl
U1FMQXN5bmMobG9uZyByZXF1ZXN0SWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcm
IGluX3F1ZXJ5KSBmaW5hbDsKK3ByaXZhdGU6CisgICAgUmV0YWluUHRyPGlkPFRlc3RQcm90b2Nv
bERhdGFiYXNlRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hl
cnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1t
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1h
dHRyaWJ1dGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNp
bXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJz
LmgiCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisK
K25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit2b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tl
bmREaXNwYXRjaGVyOjpleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcmVx
dWVzdElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkKK3sKKyAg
ICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoZXhlY3V0ZVNR
TFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1dpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFj
azpkYXRhYmFzZUlkOnF1ZXJ5OildKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJl
cG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90
Rm91bmQsICInRGF0YWJhc2UuZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcycgd2Fz
IG5vdCBmb3VuZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5n
RXJyb3JzKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZCBlcnJvckNhbGxiYWNr
ID0gXihOU1N0cmluZyAqZXJyb3IpIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVw
b3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJv
ciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9y
cygpOworICAgIH07CisKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0
cmluZz4qLyAqKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqKm5vdGVzLCBkb3VibGUgKnRpbWVzdGFt
cCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3Qg
KipwYXlsb2FkLCBpbnQgKmRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipz
cWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzICpzY3JlZW5Db2xvciwg
TlNBcnJheS8qPE5TU3RyaW5nPiovICoqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRh
YmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yICpwcmludENv
bG9yKSB7CisgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdE9iamVjdCA9IEpTT046Ok9i
amVjdDo6Y3JlYXRlKCk7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFM
X1BBUkFNRVRFUihjb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOworICAgICAgICBUSFJPV19F
WENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIobm90ZXMsIEAibm90ZXMiKTsKKyAg
ICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHZhbHVlcywg
QCJ2YWx1ZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFS
QU1FVEVSKHBheWxvYWQsIEAicGF5bG9hZCIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9S
X0JBRF9PUFRJT05BTF9QQVJBTUVURVIoc3FsRXJyb3IsIEAic3FsRXJyb3IiKTsKKyAgICAgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKGFsdGVybmF0ZUNvbG9y
cywgQCJhbHRlcm5hdGVDb2xvcnMiKTsKKyAgICAgICAgaWYgKGNvbHVtbk5hbWVzKQorICAgICAg
ICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0cmlu
Z0FycmF5KCpjb2x1bW5OYW1lcykpOworICAgICAgICBpZiAobm90ZXMpCisgICAgICAgICAgICBy
ZXN1bHRPYmplY3QtPnNldFN0cmluZygibm90ZXMiX3MsICpub3Rlcyk7CisgICAgICAgIGlmICh0
aW1lc3RhbXApCisgICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldERvdWJsZSgidGltZXN0YW1w
Il9zLCAqdGltZXN0YW1wKTsKKyAgICAgICAgaWYgKHZhbHVlcykKKyAgICAgICAgICAgIHJlc3Vs
dE9iamVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFsqdmFsdWVzIHRvSlNPTk9iamVjdF0pOwor
ICAgICAgICBpZiAocGF5bG9hZCkKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0VmFsdWUo
InBheWxvYWQiX3MsIFsqcGF5bG9hZCB0b0pTT05PYmplY3RdKTsKKyAgICAgICAgaWYgKGRhdGFi
YXNlSWQpCisgICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldEludGVnZXIoImRhdGFiYXNlSWQi
X3MsICpkYXRhYmFzZUlkKTsKKyAgICAgICAgaWYgKHNxbEVycm9yKQorICAgICAgICAgICAgcmVz
dWx0T2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBbKnNxbEVycm9yIHRvSlNPTk9iamVj
dF0pOworICAgICAgICBpZiAoc2NyZWVuQ29sb3IpCisgICAgICAgICAgICByZXN1bHRPYmplY3Qt
PnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcoKnNjcmVlbkNvbG9y
KSk7CisgICAgICAgIGlmIChhbHRlcm5hdGVDb2xvcnMpCisgICAgICAgICAgICByZXN1bHRPYmpl
Y3QtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KCphbHRl
cm5hdGVDb2xvcnMpKTsKKyAgICAgICAgaWYgKHByaW50Q29sb3IpCisgICAgICAgICAgICByZXN1
bHRPYmplY3QtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgdG9Qcm90b2NvbFN0cmluZygqcHJp
bnRDb2xvcikpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVx
dWVzdElkLCBXVEZNb3ZlKHJlc3VsdE9iamVjdCksIGZhbHNlKTsKKyAgICB9OworCisgICAgaW50
IG9faW5fZGF0YWJhc2VJZCA9IGluX2RhdGFiYXNlSWQ7CisgICAgTlNTdHJpbmcgKm9faW5fcXVl
cnkgPSBpbl9xdWVyeTsKKworICAgIFttX2RlbGVnYXRlIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxS
ZXR1cm5WYWx1ZXNXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFj
azpzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDpvX2luX2RhdGFiYXNlSWQgcXVlcnk6b19pbl9x
dWVyeV07Cit9CisKK3ZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6
OmV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVzdElkLCBpbnQg
aW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkKK3sKKyAgICBpZiAoIVttX2Rl
bGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoZXhlY3V0ZVNRTEFzeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXNXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6ZGF0YWJhc2VJ
ZDpxdWVyeTopXSkgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2Nv
bEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0Rh
dGFiYXNlLmV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzJyB3YXMgbm90IGZvdW5k
Il9zKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3Ry
aW5nICplcnJvcikgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2Nv
bEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7
CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAg
fTsKKworICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiovICoq
Y29sdW1uTmFtZXMsIE5TU3RyaW5nICoqbm90ZXMsIGRvdWJsZSAqdGltZXN0YW1wLCBSV0lQcm90
b2NvbEpTT05PYmplY3QgKip2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnBheWxvYWQs
IGludCAqZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKnNxbEVycm9yLCBU
ZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgKnNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8
TlNTdHJpbmc+Ki8gKiphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0
ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yICpwcmludENvbG9yKSB7Cisg
ICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdE9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRF
Uihjb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOworICAgICAgICBUSFJPV19FWENFUFRJT05f
Rk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIobm90ZXMsIEAibm90ZXMiKTsKKyAgICAgICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHZhbHVlcywgQCJ2YWx1ZXMi
KTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHBh
eWxvYWQsIEAicGF5bG9hZCIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJ
T05BTF9QQVJBTUVURVIoc3FsRXJyb3IsIEAic3FsRXJyb3IiKTsKKyAgICAgICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKGFsdGVybmF0ZUNvbG9ycywgQCJhbHRl
cm5hdGVDb2xvcnMiKTsKKyAgICAgICAgaWYgKGNvbHVtbk5hbWVzKQorICAgICAgICAgICAgcmVz
dWx0T2JqZWN0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KCpj
b2x1bW5OYW1lcykpOworICAgICAgICBpZiAobm90ZXMpCisgICAgICAgICAgICByZXN1bHRPYmpl
Y3QtPnNldFN0cmluZygibm90ZXMiX3MsICpub3Rlcyk7CisgICAgICAgIGlmICh0aW1lc3RhbXAp
CisgICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCAqdGlt
ZXN0YW1wKTsKKyAgICAgICAgaWYgKHZhbHVlcykKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+
c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFsqdmFsdWVzIHRvSlNPTk9iamVjdF0pOworICAgICAgICBp
ZiAocGF5bG9hZCkKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0VmFsdWUoInBheWxvYWQi
X3MsIFsqcGF5bG9hZCB0b0pTT05PYmplY3RdKTsKKyAgICAgICAgaWYgKGRhdGFiYXNlSWQpCisg
ICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsICpkYXRh
YmFzZUlkKTsKKyAgICAgICAgaWYgKHNxbEVycm9yKQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0
LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBbKnNxbEVycm9yIHRvSlNPTk9iamVjdF0pOworICAg
ICAgICBpZiAoc2NyZWVuQ29sb3IpCisgICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmlu
Zygic2NyZWVuQ29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcoKnNjcmVlbkNvbG9yKSk7CisgICAg
ICAgIGlmIChhbHRlcm5hdGVDb2xvcnMpCisgICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldEFy
cmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KCphbHRlcm5hdGVDb2xv
cnMpKTsKKyAgICAgICAgaWYgKHByaW50Q29sb3IpCisgICAgICAgICAgICByZXN1bHRPYmplY3Qt
PnNldFN0cmluZygicHJpbnRDb2xvciJfcywgdG9Qcm90b2NvbFN0cmluZygqcHJpbnRDb2xvcikp
OworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBX
VEZNb3ZlKHJlc3VsdE9iamVjdCksIGZhbHNlKTsKKyAgICB9OworCisgICAgaW50IG9faW5fZGF0
YWJhc2VJZCA9IGluX2RhdGFiYXNlSWQ7CisgICAgTlNTdHJpbmcgKm9faW5fcXVlcnkgPSBpbl9x
dWVyeTsKKworICAgIFttX2RlbGVnYXRlIGV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFs
dWVzV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vz
c0NhbGxiYWNrIGRhdGFiYXNlSWQ6b19pbl9kYXRhYmFzZUlkIHF1ZXJ5Om9faW5fcXVlcnldOwor
fQorCit2b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRl
U1FMU3luYyhsb25nIHJlcXVlc3RJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYg
aW5fcXVlcnkpCit7CisgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNl
bGVjdG9yKGV4ZWN1dGVTUUxTeW5jV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOmRh
dGFiYXNlSWQ6cXVlcnk6KV0pIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0
UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3Vu
ZCwgIidEYXRhYmFzZS5leGVjdXRlU1FMU3luYycgd2FzIG5vdCBmb3VuZCJfcyk7CisgICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsK
KyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0
SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgIH07CisKKyAgICBpZCBz
dWNjZXNzQ2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqY29sdW1uTmFtZXMsIE5T
U3RyaW5nICpub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICp2
YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQsIFRl
c3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKnNxbEVycm9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8g
KmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzIHNjcmVl
bkNvbG9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvciBwcmlu
dENvbG9yKSB7CisgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdE9iamVjdCA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURf
UEFSQU1FVEVSKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7CisgICAgICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG5vdGVzLCBAIm5vdGVzIik7CisgICAgICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHZhbHVlcywgQCJ2YWx1ZXMi
KTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIocGF5bG9h
ZCwgQCJwYXlsb2FkIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFS
QU1FVEVSKHNxbEVycm9yLCBAInNxbEVycm9yIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfUkVRVUlSRURfUEFSQU1FVEVSKGFsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xvcnMi
KTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIHRvSlNP
TlN0cmluZ0FycmF5KGNvbHVtbk5hbWVzKSk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3Ry
aW5nKCJub3RlcyJfcywgbm90ZXMpOworICAgICAgICByZXN1bHRPYmplY3QtPnNldERvdWJsZSgi
dGltZXN0YW1wIl9zLCB0aW1lc3RhbXApOworICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVj
dCgidmFsdWVzIl9zLCBbdmFsdWVzIHRvSlNPTk9iamVjdF0pOworICAgICAgICByZXN1bHRPYmpl
Y3QtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBbcGF5bG9hZCB0b0pTT05PYmplY3RdKTsKKyAgICAg
ICAgcmVzdWx0T2JqZWN0LT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCBkYXRhYmFzZUlkKTsK
KyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBbc3FsRXJyb3Ig
dG9KU09OT2JqZWN0XSk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoImFsdGVybmF0
ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5nQXJyYXkoYWx0ZXJuYXRlQ29sb3JzKSk7CisgICAgICAg
IHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgdG9Qcm90b2NvbFN0cmlu
ZyhzY3JlZW5Db2xvcikpOworICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygicHJpbnRD
b2xvciJfcywgdG9Qcm90b2NvbFN0cmluZyhwcmludENvbG9yKSk7CisgICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0T2JqZWN0
KSwgZmFsc2UpOworICAgIH07CisKKyAgICBpbnQgb19pbl9kYXRhYmFzZUlkID0gaW5fZGF0YWJh
c2VJZDsKKyAgICBOU1N0cmluZyAqb19pbl9xdWVyeSA9IGluX3F1ZXJ5OworCisgICAgW21fZGVs
ZWdhdGUgZXhlY3V0ZVNRTFN5bmNXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nl
c3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDpvX2luX2RhdGFiYXNlSWQgcXVl
cnk6b19pbl9xdWVyeV07Cit9CisKK3ZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXI6OmV4ZWN1dGVTUUxBc3luYyhsb25nIHJlcXVlc3RJZCwgaW50IGluX2RhdGFiYXNl
SWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpCit7CisgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNw
b25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGV4ZWN1dGVTUUxBc3luY1dpdGhFcnJvckNhbGxiYWNr
OnN1Y2Nlc3NDYWxsYmFjazpkYXRhYmFzZUlkOnF1ZXJ5OildKSB7CisgICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0
Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRGF0YWJhc2UuZXhlY3V0ZVNRTEFzeW5jJyB3YXMgbm90
IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJv
cnMoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBe
KE5TU3RyaW5nICplcnJvcikgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQ
cm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBl
cnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7
CisgICAgfTsKKworICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5n
PiovICpjb2x1bW5OYW1lcywgTlNTdHJpbmcgKm5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSV0lQ
cm90b2NvbEpTT05PYmplY3QgKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2Fk
LCBpbnQgZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqc3FsRXJyb3IsIFRl
c3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyBzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5T
U3RyaW5nPiovICphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNR
TEFzeW5jUHJpbnRDb2xvciBwcmludENvbG9yKSB7CisgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+
IHJlc3VsdE9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVz
Iik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG5vdGVz
LCBAIm5vdGVzIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1F
VEVSKHZhbHVlcywgQCJ2YWx1ZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFV
SVJFRF9QQVJBTUVURVIocGF5bG9hZCwgQCJwYXlsb2FkIik7CisgICAgICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHNxbEVycm9yLCBAInNxbEVycm9yIik7CisgICAg
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKGFsdGVybmF0ZUNvbG9y
cywgQCJhbHRlcm5hdGVDb2xvcnMiKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheSgi
Y29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KGNvbHVtbk5hbWVzKSk7CisgICAgICAg
IHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJub3RlcyJfcywgbm90ZXMpOworICAgICAgICByZXN1
bHRPYmplY3QtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCB0aW1lc3RhbXApOworICAgICAgICBy
ZXN1bHRPYmplY3QtPnNldE9iamVjdCgidmFsdWVzIl9zLCBbdmFsdWVzIHRvSlNPTk9iamVjdF0p
OworICAgICAgICByZXN1bHRPYmplY3QtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBbcGF5bG9hZCB0
b0pTT05PYmplY3RdKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRJbnRlZ2VyKCJkYXRhYmFz
ZUlkIl9zLCBkYXRhYmFzZUlkKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInNx
bEVycm9yIl9zLCBbc3FsRXJyb3IgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIHJlc3VsdE9iamVj
dC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgdG9Qcm90b2NvbFN0cmluZyhzY3JlZW5Db2xv
cikpOworICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3Ms
IHRvSlNPTlN0cmluZ0FycmF5KGFsdGVybmF0ZUNvbG9ycykpOworICAgICAgICByZXN1bHRPYmpl
Y3QtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgdG9Qcm90b2NvbFN0cmluZyhwcmludENvbG9y
KSk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQs
IFdURk1vdmUocmVzdWx0T2JqZWN0KSwgZmFsc2UpOworICAgIH07CisKKyAgICBpbnQgb19pbl9k
YXRhYmFzZUlkID0gaW5fZGF0YWJhc2VJZDsKKyAgICBOU1N0cmluZyAqb19pbl9xdWVyeSA9IGlu
X3F1ZXJ5OworCisgICAgW21fZGVsZWdhdGUgZXhlY3V0ZVNRTEFzeW5jV2l0aEVycm9yQ2FsbGJh
Y2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNl
SWQ6b19pbl9kYXRhYmFzZUlkIHF1ZXJ5Om9faW5fcXVlcnldOworfQorCit9IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hl
cnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmli
dXRlLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0
IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+CisKK19fYXR0cmlidXRlX18oKHZpc2liaWxp
dHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDog
TlNPYmplY3QKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4sIHNldHRlcj1zZXREYXRhYmFz
ZUhhbmRsZXI6KSBpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+IGRhdGFiYXNl
SGFuZGxlcjsKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRp
b24uaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmli
dXRlLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0
ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbElu
dGVybmFsLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+CisjaW1w
b3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVy
cy5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJz
Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0
UHJvdG9jb2xDb25maWd1cmF0aW9uCit7CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9s
bGVyKiBfY29udHJvbGxlcjsKKyAgICBpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRs
ZXI+IF9kYXRhYmFzZUhhbmRsZXI7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRy
b2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgoreworICAg
IHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmls
OworICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7
CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIFtfZGF0YWJh
c2VIYW5kbGVyIHJlbGVhc2VdOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAodm9pZClz
ZXREYXRhYmFzZUhhbmRsZXI6KGlkPFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4p
aGFuZGxlcgoreworICAgIGlmIChoYW5kbGVyID09IF9kYXRhYmFzZUhhbmRsZXIpCisgICAgICAg
IHJldHVybjsKKworICAgIFtfZGF0YWJhc2VIYW5kbGVyIHJlbGVhc2VdOworICAgIF9kYXRhYmFz
ZUhhbmRsZXIgPSBbaGFuZGxlciByZXRhaW5dOworCisgICAgYXV0byBhbHRlcm5hdGVEaXNwYXRj
aGVyID0gbWFrZVVuaXF1ZTxPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4o
aGFuZGxlcik7CisgICAgYXV0byBhbHRlcm5hdGVBZ2VudCA9IG1ha2VVbmlxdWU8QWx0ZXJuYXRl
RGlzcGF0Y2hhYmxlQWdlbnQ8RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciwgQWx0ZXJuYXRlRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4+KCJEYXRhYmFzZSJfcywgKl9jb250cm9sbGVyLCBXVEZN
b3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIpKTsKKyAgICBfY29udHJvbGxlci0+YXBwZW5kRXh0cmFB
Z2VudChXVEZNb3ZlKGFsdGVybmF0ZUFnZW50KSk7Cit9CisKKy0gKGlkPFRlc3RQcm90b2NvbERh
dGFiYXNlRG9tYWluSGFuZGxlcj4pZGF0YWJhc2VIYW5kbGVyCit7CisgICAgcmV0dXJuIF9kYXRh
YmFzZUhhbmRsZXI7Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENv
bmZpZ3VyYXRpb24ubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0
Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRo
LWFzeW5jLWF0dHJpYnV0ZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1
c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
RXZlbnREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJp
YnV0ZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9y
dCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQ
cm90b2NvbEpTT05PYmplY3QuaD4KKworCitAY2xhc3MgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJv
cjsKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmlt
YXJ5Q29sb3JzKSB7CisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzUmVkLAor
ICAgIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc0dyZWVuLAorICAgIFRlc3RQcm90
b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc0JsdWUsCit9OworCit0eXBlZGVmIE5TX0VOVU0oTlNJ
bnRlZ2VyLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXNQcmludENvbG9yKSB7CisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3lu
Y09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvckN5YW4sCisgICAgVGVzdFByb3RvY29sRGF0
YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvck1hZ2VudGEs
CisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFs
dWVzUHJpbnRDb2xvclllbGxvdywKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxT
eW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yQmxhY2ssCit9OworCit0eXBlZGVmIE5T
X0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlv
bmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvcikgeworICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhl
Y3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yQ3lhbiwKKyAgICBUZXN0
UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRD
b2xvck1hZ2VudGEsCisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRp
b25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JZZWxsb3csCisgICAgVGVzdFByb3RvY29sRGF0YWJh
c2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JCbGFjaywKK307
CisKK3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0
ZVNRTFN5bmNQcmludENvbG9yKSB7CisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FM
U3luY1ByaW50Q29sb3JDeWFuLAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5
bmNQcmludENvbG9yTWFnZW50YSwKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxT
eW5jUHJpbnRDb2xvclllbGxvdywKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxT
eW5jUHJpbnRDb2xvckJsYWNrLAorfTsKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVz
dFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yKSB7CisgICAgVGVzdFBy
b3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yQ3lhbiwKKyAgICBUZXN0UHJv
dG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JNYWdlbnRhLAorICAgIFRlc3RQ
cm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvclllbGxvdywKKyAgICBUZXN0
UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JCbGFjaywKK307CisKK19f
YXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJv
dG9jb2xEYXRhYmFzZUVycm9yIDogUldJUHJvdG9jb2xKU09OT2JqZWN0CistIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9h
ZDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpT
T05PYmplY3QgKilqc29uT2JqZWN0OworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTWVzc2FnZToo
TlNTdHJpbmcgKiltZXNzYWdlIGNvZGU6KGludCljb2RlOworLyogcmVxdWlyZWQgKi8gQHByb3Bl
cnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICptZXNzYWdlOworLyogcmVxdWlyZWQgKi8g
QHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgaW50IGNvZGU7CitAZW5kCisKK0Bwcm90b2Nv
bCBUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXIgPE5TT2JqZWN0PgorQG9wdGlvbmFs
CistICh2b2lkKWV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNXaXRoRXJyb3JDYWxs
YmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxi
YWNrOih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmNvbHVtbk5hbWVzLCBOU1N0cmlu
ZyAqKm5vdGVzLCBkb3VibGUgKnRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqdmFs
dWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipwYXlsb2FkLCBpbnQgKmRhdGFiYXNlSWQsIFRl
c3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQ
cmltYXJ5Q29sb3JzICpzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICoqYWx0ZXJu
YXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1
cm5WYWx1ZXNQcmludENvbG9yICpwcmludENvbG9yKSlzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJ
ZDooaW50KWRhdGFiYXNlSWQgcXVlcnk6KE5TU3RyaW5nICopcXVlcnk7CistICh2b2lkKWV4ZWN1
dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXiko
TlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKShO
U0FycmF5Lyo8TlNTdHJpbmc+Ki8gKipjb2x1bW5OYW1lcywgTlNTdHJpbmcgKipub3RlcywgZG91
YmxlICp0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnZhbHVlcywgUldJUHJvdG9j
b2xKU09OT2JqZWN0ICoqcGF5bG9hZCwgaW50ICpkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRh
YmFzZUVycm9yICoqc3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyAq
c2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmFsdGVybmF0ZUNvbG9ycywgVGVz
dFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50
Q29sb3IgKnByaW50Q29sb3IpKXN1Y2Nlc3NDYWxsYmFjayBkYXRhYmFzZUlkOihpbnQpZGF0YWJh
c2VJZCBxdWVyeTooTlNTdHJpbmcgKilxdWVyeTsKKy0gKHZvaWQpZXhlY3V0ZVNRTFN5bmNXaXRo
RXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3Vj
Y2Vzc0NhbGxiYWNrOih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqY29sdW1uTmFtZXMs
IE5TU3RyaW5nICpub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0
ICp2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQs
IFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKnNxbEVycm9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+
Ki8gKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzIHNj
cmVlbkNvbG9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvciBw
cmludENvbG9yKSlzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDooaW50KWRhdGFiYXNlSWQgcXVl
cnk6KE5TU3RyaW5nICopcXVlcnk7CistICh2b2lkKWV4ZWN1dGVTUUxBc3luY1dpdGhFcnJvckNh
bGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2Fs
bGJhY2s6KHZvaWQoXikoTlNBcnJheS8qPE5TU3RyaW5nPiovICpjb2x1bW5OYW1lcywgTlNTdHJp
bmcgKm5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnZhbHVl
cywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgVGVzdFBy
b3RvY29sRGF0YWJhc2VFcnJvciAqc3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFy
eUNvbG9ycyBzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICphbHRlcm5hdGVDb2xv
cnMsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvciBwcmludENv
bG9yKSlzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDooaW50KWRhdGFiYXNlSWQgcXVlcnk6KE5T
U3RyaW5nICopcXVlcnk7CitAZW5kCisKKworCisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQ
cm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4KKworIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2wuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmli
dXRlLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0
ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRl
LmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xs
ZXIuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKKworCisKKyMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sSW50ZXJuYWwuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5k
cy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0
b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Ig
eworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+CitPcHRpb25hbDxPYmpDRW51bVR5
cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKKworaW5saW5lIFN0
cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyB2
YWx1ZSkKK3sKKyAgICBzd2l0Y2godmFsdWUpIHsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFi
YXNlUHJpbWFyeUNvbG9yc1JlZDoKKyAgICAgICAgcmV0dXJuICJyZWQiX3M7CisgICAgY2FzZSBU
ZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNHcmVlbjoKKyAgICAgICAgcmV0dXJuICJn
cmVlbiJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc0JsdWU6
CisgICAgICAgIHJldHVybiAiYmx1ZSJfczsKKyAgICB9Cit9CisKK3RlbXBsYXRlPD4KK2lubGlu
ZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnM+IGZyb21Qcm90b2Nv
bFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSAicmVkIikK
KyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc1JlZDsKKyAg
ICBpZiAodmFsdWUgPT0gImdyZWVuIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFi
YXNlUHJpbWFyeUNvbG9yc0dyZWVuOworICAgIGlmICh2YWx1ZSA9PSAiYmx1ZSIpCisgICAgICAg
IHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNCbHVlOworICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7Cit9CisKK2lubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0
UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENv
bG9yIHZhbHVlKQoreworICAgIHN3aXRjaCh2YWx1ZSkgeworICAgIGNhc2UgVGVzdFByb3RvY29s
RGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvckN5YW46
CisgICAgICAgIHJldHVybiAiY3lhbiJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNl
RXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JNYWdlbnRhOgorICAg
ICAgICByZXR1cm4gIm1hZ2VudGEiX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yWWVsbG93OgorICAgICAg
ICByZXR1cm4gInllbGxvdyJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0
ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JCbGFjazoKKyAgICAgICAgcmV0
dXJuICJibGFjayJfczsKKyAgICB9Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBPcHRpb25hbDxU
ZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmlu
dENvbG9yPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBp
ZiAodmFsdWUgPT0gImN5YW4iKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VF
eGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvckN5YW47CisgICAgaWYg
KHZhbHVlID09ICJtYWdlbnRhIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNl
RXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JNYWdlbnRhOworICAg
IGlmICh2YWx1ZSA9PSAieWVsbG93IikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFi
YXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JZZWxsb3c7Cisg
ICAgaWYgKHZhbHVlID09ICJibGFjayIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRh
YmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yQmxhY2s7Cisg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKworaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3Ry
aW5nKFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1
ZXNQcmludENvbG9yIHZhbHVlKQoreworICAgIHN3aXRjaCh2YWx1ZSkgeworICAgIGNhc2UgVGVz
dFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50
Q29sb3JDeWFuOgorICAgICAgICByZXR1cm4gImN5YW4iX3M7CisgICAgY2FzZSBUZXN0UHJvdG9j
b2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvck1h
Z2VudGE6CisgICAgICAgIHJldHVybiAibWFnZW50YSJfczsKKyAgICBjYXNlIFRlc3RQcm90b2Nv
bERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yWWVs
bG93OgorICAgICAgICByZXR1cm4gInllbGxvdyJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERh
dGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yQmxhY2s6
CisgICAgICAgIHJldHVybiAiYmxhY2siX3M7CisgICAgfQorfQorCit0ZW1wbGF0ZTw+Citpbmxp
bmUgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJl
dHVyblZhbHVlc1ByaW50Q29sb3I+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZh
bHVlKQoreworICAgIGlmICh2YWx1ZSA9PSAiY3lhbiIpCisgICAgICAgIHJldHVybiBUZXN0UHJv
dG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xv
ckN5YW47CisgICAgaWYgKHZhbHVlID09ICJtYWdlbnRhIikKKyAgICAgICAgcmV0dXJuIFRlc3RQ
cm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENv
bG9yTWFnZW50YTsKKyAgICBpZiAodmFsdWUgPT0gInllbGxvdyIpCisgICAgICAgIHJldHVybiBU
ZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJp
bnRDb2xvclllbGxvdzsKKyAgICBpZiAodmFsdWUgPT0gImJsYWNrIikKKyAgICAgICAgcmV0dXJu
IFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQ
cmludENvbG9yQmxhY2s7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKworaW5saW5lIFN0
cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQ
cmludENvbG9yIHZhbHVlKQoreworICAgIHN3aXRjaCh2YWx1ZSkgeworICAgIGNhc2UgVGVzdFBy
b3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3JDeWFuOgorICAgICAgICByZXR1
cm4gImN5YW4iX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5j
UHJpbnRDb2xvck1hZ2VudGE6CisgICAgICAgIHJldHVybiAibWFnZW50YSJfczsKKyAgICBjYXNl
IFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yWWVsbG93OgorICAg
ICAgICByZXR1cm4gInllbGxvdyJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhl
Y3V0ZVNRTFN5bmNQcmludENvbG9yQmxhY2s6CisgICAgICAgIHJldHVybiAiYmxhY2siX3M7Cisg
ICAgfQorfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJh
c2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3I+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJp
bmcmIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSAiY3lhbiIpCisgICAgICAgIHJldHVybiBU
ZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvckN5YW47CisgICAgaWYg
KHZhbHVlID09ICJtYWdlbnRhIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNl
RXhlY3V0ZVNRTFN5bmNQcmludENvbG9yTWFnZW50YTsKKyAgICBpZiAodmFsdWUgPT0gInllbGxv
dyIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJp
bnRDb2xvclllbGxvdzsKKyAgICBpZiAodmFsdWUgPT0gImJsYWNrIikKKyAgICAgICAgcmV0dXJu
IFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yQmxhY2s7CisgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKworaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5n
KFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvciB2YWx1ZSkKK3sK
KyAgICBzd2l0Y2godmFsdWUpIHsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0
ZVNRTEFzeW5jUHJpbnRDb2xvckN5YW46CisgICAgICAgIHJldHVybiAiY3lhbiJfczsKKyAgICBj
YXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvck1hZ2VudGE6
CisgICAgICAgIHJldHVybiAibWFnZW50YSJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFi
YXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvclllbGxvdzoKKyAgICAgICAgcmV0dXJuICJ5ZWxs
b3ciX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50
Q29sb3JCbGFjazoKKyAgICAgICAgcmV0dXJuICJibGFjayJfczsKKyAgICB9Cit9CisKK3RlbXBs
YXRlPD4KK2lubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3lu
Y1ByaW50Q29sb3I+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQorewor
ICAgIGlmICh2YWx1ZSA9PSAiY3lhbiIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRh
YmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JDeWFuOworICAgIGlmICh2YWx1ZSA9PSAibWFn
ZW50YSIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3lu
Y1ByaW50Q29sb3JNYWdlbnRhOworICAgIGlmICh2YWx1ZSA9PSAieWVsbG93IikKKyAgICAgICAg
cmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvclllbGxv
dzsKKyAgICBpZiAodmFsdWUgPT0gImJsYWNrIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2Nv
bERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvckJsYWNrOworICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
LmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sVHlw
ZVBhcnNlci5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFBy
aXZhdGUuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGludGVyZmFjZSBUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKERhdGFiYXNlRG9tYWluKQorCisrICh2b2lkKV9wYXJz
ZURhdGFiYXNlSWQ6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2Fk
OworKyAodm9pZClfcGFyc2VQcmltYXJ5Q29sb3JzOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9t
UGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNlQ29sb3JMaXN0OihOU0FycmF5Lyo8
TlNTdHJpbmc+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisrICh2b2lk
KV9wYXJzZUVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqKW91dFZhbHVlIGZyb21Q
YXlsb2FkOihpZClwYXlsb2FkOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMgKERhdGFiYXNlRG9tYWluKQorCisrICh2b2lkKV9wYXJzZURhdGFi
YXNlSWQ6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7Cisg
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNOdW1iZXIgY2xhc3Nd
KTsKKyAgICAqb3V0VmFsdWUgPSAoTlNOdW1iZXIgKilwYXlsb2FkOworfQorCisrICh2b2lkKV9w
YXJzZVByaW1hcnlDb2xvcnM6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClw
YXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNT
dHJpbmcgY2xhc3NdKTsKKyAgICBPcHRpb25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlD
b2xvcnM+IHJlc3VsdCA9IEluc3BlY3Rvcjo6ZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2Nv
bERhdGFiYXNlUHJpbWFyeUNvbG9ycz4ocGF5bG9hZCk7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9CQURfRU5VTV9WQUxVRShyZXN1bHQsIEAiUHJpbWFyeUNvbG9ycyIpOworICAgICpvdXRWYWx1
ZSA9IEAocmVzdWx0LnZhbHVlKCkpOworfQorCisrICh2b2lkKV9wYXJzZUNvbG9yTGlzdDooTlNB
cnJheS8qPE5TU3RyaW5nPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7
CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNBcnJheS8qPE5T
U3RyaW5nPiovIGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gKE5TQXJyYXkvKjxOU1N0cmluZz4q
LyAqKXBheWxvYWQ7Cit9CisKKysgKHZvaWQpX3BhcnNlRXJyb3I6KFRlc3RQcm90b2NvbERhdGFi
YXNlRXJyb3IgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJP
V19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsK
KyAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgYWxsb2NdIGluaXRX
aXRoUGF5bG9hZDpwYXlsb2FkXTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xU
eXBlcy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgt
YXN5bmMtYXR0cmlidXRlLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2Nv
bEpTT05PYmplY3RQcml2YXRlLmg+CisjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2ltcG9y
dCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGlt
cGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IKKworLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICop
cGF5bG9hZAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1
cm4gbmlsOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXls
b2FkW0AibWVzc2FnZSJdLCBAIm1lc3NhZ2UiKTsKKyAgICBzZWxmLm1lc3NhZ2UgPSBwYXlsb2Fk
W0AibWVzc2FnZSJdOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJU
WShwYXlsb2FkW0AiY29kZSJdLCBAImNvZGUiKTsKKyAgICBzZWxmLmNvZGUgPSBbcGF5bG9hZFtA
ImNvZGUiXSBpbnRlZ2VyVmFsdWVdOworCisgICAgcmV0dXJuIHNlbGY7Cit9CistIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopb2Jq
ZWN0Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEpTT05PYmplY3Q6W29iamVj
dCB0b0pTT05PYmplY3RdLmdldCgpXSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICByZXR1
cm4gc2VsZjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTWVzc2FnZTooTlNTdHJpbmcg
KiltZXNzYWdlIGNvZGU6KGludCljb2RlCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0
XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJ
UkVEX1BST1BFUlRZKG1lc3NhZ2UsIEAibWVzc2FnZSIpOworCisgICAgc2VsZi5tZXNzYWdlID0g
bWVzc2FnZTsKKyAgICBzZWxmLmNvZGUgPSBjb2RlOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisK
Ky0gKHZvaWQpc2V0TWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlCit7CisgICAgW3N1cGVyIHNl
dFN0cmluZzptZXNzYWdlIGZvcktleTpAIm1lc3NhZ2UiXTsKK30KKworLSAoTlNTdHJpbmcgKilt
ZXNzYWdlCit7CisgICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJtZXNzYWdlIl07Cit9
CisKKy0gKHZvaWQpc2V0Q29kZTooaW50KWNvZGUKK3sKKyAgICBbc3VwZXIgc2V0SW50ZWdlcjpj
b2RlIGZvcktleTpAImNvZGUiXTsKK30KKworLSAoaW50KWNvZGUKK3sKKyAgICByZXR1cm4gW3N1
cGVyIGludGVnZXJGb3JLZXk6QCJjb2RlIl07Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1j
YWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwt
Y2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMC4uNWI0N2NjMDJkZGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMt
d2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0CkBAIC0wLDAg
KzEsMTYyOSBAQAorIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcy5p
bgorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9u
YWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworLy8gRGF0YWJhc2UKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21h
aW4oIkRhdGFiYXNlIiwgbnVsbCk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiRGF0
YWJhc2UuUHJpbWFyeUNvbG9ycyIsIHtSZWQ6ICJyZWQiLCBHcmVlbjogImdyZWVuIiwgQmx1ZTog
ImJsdWUifSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiRGF0YWJhc2UuZXhl
Y3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyIsIG51bGwsIFt7Im5hbWUiOiAiY29sdW1uTmFtZXMi
LCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0cnVlfSwgeyJuYW1lIjogIm5vdGVzIiwg
InR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZX0sIHsibmFtZSI6ICJ0aW1lc3RhbXAi
LCAidHlwZSI6ICJudW1iZXIiLCAib3B0aW9uYWwiOiB0cnVlfSwgeyJuYW1lIjogInZhbHVlcyIs
ICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRydWV9LCB7Im5hbWUiOiAicGF5bG9hZCIs
ICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRydWV9LCB7Im5hbWUiOiAiZGF0YWJhc2VJ
ZCIsICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6IHRydWV9LCB7Im5hbWUiOiAic3FsRXJy
b3IiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0cnVlfSwgeyJuYW1lIjogInNjcmVl
bkNvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZX0sIHsibmFtZSI6ICJh
bHRlcm5hdGVDb2xvcnMiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0cnVlfSwgeyJu
YW1lIjogInByaW50Q29sb3IiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVlfV0s
IFsiY29sdW1uTmFtZXMiLCAibm90ZXMiLCAidGltZXN0YW1wIiwgInZhbHVlcyIsICJwYXlsb2Fk
IiwgImRhdGFiYXNlSWQiLCAic3FsRXJyb3IiLCAic2NyZWVuQ29sb3IiLCAiYWx0ZXJuYXRlQ29s
b3JzIiwgInByaW50Q29sb3IiXSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgi
RGF0YWJhc2UuZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIiwgbnVsbCwgW3sibmFtZSI6ICJj
b2x1bW5OYW1lcyIsICJ0eXBlIjogIm9iamVjdCJ9LCB7Im5hbWUiOiAibm90ZXMiLCAidHlwZSI6
ICJzdHJpbmcifSwgeyJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciJ9LCB7Im5h
bWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0In0sIHsibmFtZSI6ICJwYXlsb2FkIiwgInR5
cGUiOiAib2JqZWN0In0sIHsibmFtZSI6ICJkYXRhYmFzZUlkIiwgInR5cGUiOiAibnVtYmVyIn0s
IHsibmFtZSI6ICJzcWxFcnJvciIsICJ0eXBlIjogIm9iamVjdCJ9LCB7Im5hbWUiOiAic2NyZWVu
Q29sb3IiLCAidHlwZSI6ICJzdHJpbmcifSwgeyJuYW1lIjogImFsdGVybmF0ZUNvbG9ycyIsICJ0
eXBlIjogIm9iamVjdCJ9LCB7Im5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmluZyJ9
XSwgWyJjb2x1bW5OYW1lcyIsICJub3RlcyIsICJ0aW1lc3RhbXAiLCAidmFsdWVzIiwgInBheWxv
YWQiLCAiZGF0YWJhc2VJZCIsICJzcWxFcnJvciIsICJzY3JlZW5Db2xvciIsICJhbHRlcm5hdGVD
b2xvcnMiLCAicHJpbnRDb2xvciJdKTsKK0luc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4o
IkRhdGFiYXNlIiwgbnVsbCk7CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5k
cy5qcy5pbgorCisjIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVy
cy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRp
b25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisKK25hbWVz
cGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Citw
dWJsaWM6CisgICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3Bh
dGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNw
YXRjaGVyKTsgfQorICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNv
bnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KK3ByaXZhdGU6CisgICAg
UmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOworfTsKKworCitj
bGFzcyBBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5BbHRlcm5hdGVEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVyKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVBbGxP
cHRpb25hbFBhcmFtZXRlcnMobG9uZyBjYWxsSWQsIGNvbnN0IEpTT046OkFycmF5KiBpbl9jb2x1
bW5OYW1lcywgY29uc3QgU3RyaW5nKiBpbl9ub3RlcywgY29uc3QgZG91YmxlKiBpbl90aW1lc3Rh
bXAsIGNvbnN0IEpTT046Ok9iamVjdCogaW5fdmFsdWVzLCBjb25zdCBKU09OOjpWYWx1ZSogaW5f
cGF5bG9hZCwgY29uc3QgaW50KiBpbl9kYXRhYmFzZUlkLCBjb25zdCBKU09OOjpPYmplY3QqIGlu
X3NxbEVycm9yLCBjb25zdCBTdHJpbmcqIGluX3NjcmVlbkNvbG9yLCBjb25zdCBKU09OOjpBcnJh
eSogaW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcqIGluX3ByaW50Q29sb3IpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgY2FsbElk
LCBjb25zdCBKU09OOjpBcnJheSYgaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgaW5fbm90
ZXMsIGRvdWJsZSBpbl90aW1lc3RhbXAsIGNvbnN0IEpTT046Ok9iamVjdCYgaW5fdmFsdWVzLCBK
U09OOjpWYWx1ZSBpbl9wYXlsb2FkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgSlNPTjo6T2Jq
ZWN0JiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nJiBpbl9zY3JlZW5Db2xvciwgY29uc3QgSlNP
Tjo6QXJyYXkmIGluX2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBpbl9wcmludENvbG9y
KSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorIyMjIEVuZCBGaWxlOiBUZXN0QWx0
ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5k
RGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRz
LXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0
UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCisjaWYg
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCitjbGFzcyBBbHRlcm5hdGVE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQorCitjbGFzcyBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlciB7CitwdWJsaWM6CisgICAgLy8gTmFtZWQgYWZ0ZXIgcGFyYW1ldGVyICdwcmludENvbG9y
JyB3aGlsZSBnZW5lcmF0aW5nIGNvbW1hbmQvZXZlbnQgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1l
dGVycy4KKyAgICBlbnVtIGNsYXNzIFByaW50Q29sb3IgeworICAgICAgICBDeWFuID0gMywKKyAg
ICAgICAgTWFnZW50YSA9IDQsCisgICAgICAgIFllbGxvdyA9IDUsCisgICAgICAgIEJsYWNrID0g
NiwKKyAgICB9OyAvLyBlbnVtIGNsYXNzIFByaW50Q29sb3IKKyAgICB2aXJ0dWFsIHZvaWQgZXhl
Y3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhFcnJvclN0cmluZyYsIGNvbnN0IEpTT046OkFycmF5
KiBvcHRfaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyogb3B0X2luX25vdGVzLCBjb25zdCBk
b3VibGUqIG9wdF9pbl90aW1lc3RhbXAsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0X2luX3ZhbHVl
cywgY29uc3QgSlNPTjo6VmFsdWUqIG9wdF9pbl9wYXlsb2FkLCBjb25zdCBpbnQqIG9wdF9pbl9k
YXRhYmFzZUlkLCBjb25zdCBKU09OOjpPYmplY3QqIG9wdF9pbl9zcWxFcnJvciwgY29uc3QgU3Ry
aW5nKiBvcHRfaW5fc2NyZWVuQ29sb3IsIGNvbnN0IEpTT046OkFycmF5KiBvcHRfaW5fYWx0ZXJu
YXRlQ29sb3JzLCBjb25zdCBTdHJpbmcqIG9wdF9pbl9wcmludENvbG9yLCBSZWZQdHI8SlNPTjo6
QXJyYXlPZjxTdHJpbmc+PiYgb3B0X291dF9jb2x1bW5OYW1lcywgT3B0aW9uYWw8U3RyaW5nPiYg
b3B0X291dF9ub3RlcywgT3B0aW9uYWw8ZG91YmxlPiYgb3B0X291dF90aW1lc3RhbXAsIE9wdGlv
bmFsPEpTT046Ok9iamVjdD4mIG9wdF9vdXRfdmFsdWVzLCBPcHRpb25hbDxKU09OOjpWYWx1ZT4m
IG9wdF9vdXRfcGF5bG9hZCwgT3B0aW9uYWw8aW50PiYgb3B0X291dF9kYXRhYmFzZUlkLCBSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYgb3B0X291dF9zcWxFcnJv
ciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMqIG9wdF9vdXRf
c2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JM
aXN0PiYgb3B0X291dF9hbHRlcm5hdGVDb2xvcnMsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyOjpQcmludENvbG9yKiBvcHRfb3V0X3ByaW50Q29sb3IpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKEVycm9yU3RyaW5nJiwgY29uc3QgSlNP
Tjo6QXJyYXkmIGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIGluX25vdGVzLCBkb3VibGUg
aW5fdGltZXN0YW1wLCBjb25zdCBKU09OOjpPYmplY3QmIGluX3ZhbHVlcywgSlNPTjo6VmFsdWUg
aW5fcGF5bG9hZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IEpTT046Ok9iamVjdCYgaW5fc3Fs
RXJyb3IsIGNvbnN0IFN0cmluZyYgaW5fc2NyZWVuQ29sb3IsIGNvbnN0IEpTT046OkFycmF5JiBp
bl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgaW5fcHJpbnRDb2xvciwgUmVmUHRyPEpT
T046OkFycmF5T2Y8U3RyaW5nPj4mIG91dF9jb2x1bW5OYW1lcywgU3RyaW5nKiBvdXRfbm90ZXMs
IGRvdWJsZSogb3V0X3RpbWVzdGFtcCwgSlNPTjo6T2JqZWN0KiBvdXRfdmFsdWVzLCBKU09OOjpW
YWx1ZSogb3V0X3BheWxvYWQsIGludCogb3V0X2RhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiBvdXRfc3FsRXJyb3IsIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzKiBvdXRfc2NyZWVuQ29sb3IsIFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYgb3V0X2FsdGVybmF0ZUNv
bG9ycywgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3IqIG91dF9w
cmludENvbG9yKSA9IDA7Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+RGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIoKTsKK307CisKK2NsYXNzIERhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgeworcHVibGlj
OgorICAgIHN0YXRpYyBSZWY8RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tl
bmREaXNwYXRjaGVyJiwgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICB2
b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpT
T046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5hbDsKK3ByaXZhdGU6CisgICAgdm9pZCBleGVjdXRl
QWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0
PiYmIHBhcmFtZXRlcnMpOworICAgIHZvaWQgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxv
bmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOworI2lmIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorcHVibGljOgorICAgIHZvaWQg
c2V0QWx0ZXJuYXRlRGlzcGF0Y2hlcihBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
KiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0
ZURpc3BhdGNoZXI7IH0KK3ByaXZhdGU6CisgICAgQWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlciogbV9hbHRlcm5hdGVEaXNwYXRjaGVyIHsgbnVsbHB0ciB9OworI2VuZGlmIC8vIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorcHJpdmF0ZToKKyAgICBEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiwgRGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxl
ciogbV9hZ2VudCB7IG51bGxwdHIgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgor
IyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6
IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvSlNP
TlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQorI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNl
bmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworbmFtZXNw
YWNlIEluc3BlY3RvciB7CisKK0RhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+RGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KKworUmVmPERhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXI+IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShCYWNrZW5kRGlz
cGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyKiBhZ2VudCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOworfQorCitEYXRhYmFzZUJhY2tl
bmREaXNwYXRjaGVyOjpEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVy
JiBiYWNrZW5kRGlzcGF0Y2hlciwgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFn
ZW50KQorICAgIDogU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNo
ZXIpCisgICAgLCBtX2FnZW50KGFnZW50KQoreworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJl
Z2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbigiRGF0YWJhc2UiX3MsIHRoaXMpOworfQorCit2b2lk
IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25z
dCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQoreworICAgIFJl
ZjxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKKworICAgIFJlZlB0
cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7CisgICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJh
bXMiX3MsIHBhcmFtZXRlcnMpOworCisgICAgaWYgKG1ldGhvZCA9PSAiZXhlY3V0ZUFsbE9wdGlv
bmFsUGFyYW1ldGVycyIpIHsKKyAgICAgICAgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhy
ZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGlmIChtZXRob2QgPT0gImV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyIpIHsKKyAgICAg
ICAgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0
ZXJzKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwg
IidEYXRhYmFzZS4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOworfQorCit2b2lkIERh
dGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9u
ZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycykKK3sKKyAgICBi
b29sIG9wdF9pbl9jb2x1bW5OYW1lc192YWx1ZUZvdW5kID0gZmFsc2U7CisgICAgUmVmUHRyPEpT
T046OkFycmF5PiBvcHRfaW5fY29sdW1uTmFtZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRB
cnJheShwYXJhbWV0ZXJzLmdldCgpLCAiY29sdW1uTmFtZXMiX3MsICZvcHRfaW5fY29sdW1uTmFt
ZXNfdmFsdWVGb3VuZCk7CisgICAgYm9vbCBvcHRfaW5fbm90ZXNfdmFsdWVGb3VuZCA9IGZhbHNl
OworICAgIFN0cmluZyBvcHRfaW5fbm90ZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJp
bmcocGFyYW1ldGVycy5nZXQoKSwgIm5vdGVzIl9zLCAmb3B0X2luX25vdGVzX3ZhbHVlRm91bmQp
OworICAgIGJvb2wgb3B0X2luX3RpbWVzdGFtcF92YWx1ZUZvdW5kID0gZmFsc2U7CisgICAgZG91
YmxlIG9wdF9pbl90aW1lc3RhbXAgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXREb3VibGUocGFy
YW1ldGVycy5nZXQoKSwgInRpbWVzdGFtcCJfcywgJm9wdF9pbl90aW1lc3RhbXBfdmFsdWVGb3Vu
ZCk7CisgICAgYm9vbCBvcHRfaW5fdmFsdWVzX3ZhbHVlRm91bmQgPSBmYWxzZTsKKyAgICBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiBvcHRfaW5fdmFsdWVzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0
T2JqZWN0KHBhcmFtZXRlcnMuZ2V0KCksICJ2YWx1ZXMiX3MsICZvcHRfaW5fdmFsdWVzX3ZhbHVl
Rm91bmQpOworICAgIGJvb2wgb3B0X2luX3BheWxvYWRfdmFsdWVGb3VuZCA9IGZhbHNlOworICAg
IFJlZlB0cjxKU09OOjpWYWx1ZT4gb3B0X2luX3BheWxvYWQgPSBtX2JhY2tlbmREaXNwYXRjaGVy
LT5nZXRWYWx1ZShwYXJhbWV0ZXJzLmdldCgpLCAicGF5bG9hZCJfcywgJm9wdF9pbl9wYXlsb2Fk
X3ZhbHVlRm91bmQpOworICAgIGJvb2wgb3B0X2luX2RhdGFiYXNlSWRfdmFsdWVGb3VuZCA9IGZh
bHNlOworICAgIGludCBvcHRfaW5fZGF0YWJhc2VJZCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdl
dEludGVnZXIocGFyYW1ldGVycy5nZXQoKSwgImRhdGFiYXNlSWQiX3MsICZvcHRfaW5fZGF0YWJh
c2VJZF92YWx1ZUZvdW5kKTsKKyAgICBib29sIG9wdF9pbl9zcWxFcnJvcl92YWx1ZUZvdW5kID0g
ZmFsc2U7CisgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gb3B0X2luX3NxbEVycm9yID0gbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+Z2V0T2JqZWN0KHBhcmFtZXRlcnMuZ2V0KCksICJzcWxFcnJvciJfcywg
Jm9wdF9pbl9zcWxFcnJvcl92YWx1ZUZvdW5kKTsKKyAgICBib29sIG9wdF9pbl9zY3JlZW5Db2xv
cl92YWx1ZUZvdW5kID0gZmFsc2U7CisgICAgU3RyaW5nIG9wdF9pbl9zY3JlZW5Db2xvciA9IG1f
YmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwYXJhbWV0ZXJzLmdldCgpLCAic2NyZWVuQ29s
b3IiX3MsICZvcHRfaW5fc2NyZWVuQ29sb3JfdmFsdWVGb3VuZCk7CisgICAgYm9vbCBvcHRfaW5f
YWx0ZXJuYXRlQ29sb3JzX3ZhbHVlRm91bmQgPSBmYWxzZTsKKyAgICBSZWZQdHI8SlNPTjo6QXJy
YXk+IG9wdF9pbl9hbHRlcm5hdGVDb2xvcnMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRBcnJh
eShwYXJhbWV0ZXJzLmdldCgpLCAiYWx0ZXJuYXRlQ29sb3JzIl9zLCAmb3B0X2luX2FsdGVybmF0
ZUNvbG9yc192YWx1ZUZvdW5kKTsKKyAgICBib29sIG9wdF9pbl9wcmludENvbG9yX3ZhbHVlRm91
bmQgPSBmYWxzZTsKKyAgICBTdHJpbmcgb3B0X2luX3ByaW50Q29sb3IgPSBtX2JhY2tlbmREaXNw
YXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgInByaW50Q29sb3IiX3MsICZvcHRf
aW5fcHJpbnRDb2xvcl92YWx1ZUZvdW5kKTsKKyAgICBpZiAobV9iYWNrZW5kRGlzcGF0Y2hlci0+
aGFzUHJvdG9jb2xFcnJvcnMoKSkgeworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBv
cnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCAiU29tZSBh
cmd1bWVudHMgb2YgbWV0aG9kICdEYXRhYmFzZS5leGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJz
JyBjYW4ndCBiZSBwcm9jZXNzZWQiX3MpOworICAgICAgICByZXR1cm47CisgICAgfQorCisjaWYg
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisgICAgaWYgKG1fYWx0ZXJu
YXRlRGlzcGF0Y2hlcikgeworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVB
bGxPcHRpb25hbFBhcmFtZXRlcnMocmVxdWVzdElkLCBvcHRfaW5fY29sdW1uTmFtZXNfdmFsdWVG
b3VuZCA/IG9wdF9pbl9jb2x1bW5OYW1lcy5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9ub3Rlc192
YWx1ZUZvdW5kID8gJm9wdF9pbl9ub3RlcyA6IG51bGxwdHIsIG9wdF9pbl90aW1lc3RhbXBfdmFs
dWVGb3VuZCA/ICZvcHRfaW5fdGltZXN0YW1wIDogbnVsbHB0ciwgb3B0X2luX3ZhbHVlc192YWx1
ZUZvdW5kID8gb3B0X2luX3ZhbHVlcy5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9wYXlsb2FkX3Zh
bHVlRm91bmQgPyBvcHRfaW5fcGF5bG9hZC5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9kYXRhYmFz
ZUlkX3ZhbHVlRm91bmQgPyAmb3B0X2luX2RhdGFiYXNlSWQgOiBudWxscHRyLCBvcHRfaW5fc3Fs
RXJyb3JfdmFsdWVGb3VuZCA/IG9wdF9pbl9zcWxFcnJvci5nZXQoKSA6IG51bGxwdHIsIG9wdF9p
bl9zY3JlZW5Db2xvcl92YWx1ZUZvdW5kID8gJm9wdF9pbl9zY3JlZW5Db2xvciA6IG51bGxwdHIs
IG9wdF9pbl9hbHRlcm5hdGVDb2xvcnNfdmFsdWVGb3VuZCA/IG9wdF9pbl9hbHRlcm5hdGVDb2xv
cnMuZ2V0KCkgOiBudWxscHRyLCBvcHRfaW5fcHJpbnRDb2xvcl92YWx1ZUZvdW5kID8gJm9wdF9p
bl9wcmludENvbG9yIDogbnVsbHB0cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYg
Ly8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyAgICBFcnJvclN0
cmluZyBlcnJvcjsKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOworICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IG91dF9jb2x1bW5O
YW1lczsKKyAgICBPcHRpb25hbDxTdHJpbmc+IG91dF9ub3RlczsKKyAgICBPcHRpb25hbDxkb3Vi
bGU+IG91dF90aW1lc3RhbXA7CisgICAgT3B0aW9uYWw8SlNPTjo6T2JqZWN0PiBvdXRfdmFsdWVz
OworICAgIE9wdGlvbmFsPEpTT046OlZhbHVlPiBvdXRfcGF5bG9hZDsKKyAgICBPcHRpb25hbDxp
bnQ+IG91dF9kYXRhYmFzZUlkOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6RXJyb3I+IG91dF9zcWxFcnJvcjsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6UHJpbWFyeUNvbG9ycyBvdXRfc2NyZWVuQ29sb3I7CisgICAgUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IG91dF9hbHRlcm5hdGVDb2xvcnM7Cisg
ICAgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3Igb3V0X3ByaW50
Q29sb3I7CisgICAgbV9hZ2VudC0+ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhlcnJvciwg
b3B0X2luX2NvbHVtbk5hbWVzX3ZhbHVlRm91bmQgPyBvcHRfaW5fY29sdW1uTmFtZXMuZ2V0KCkg
OiBudWxscHRyLCBvcHRfaW5fbm90ZXNfdmFsdWVGb3VuZCA/ICZvcHRfaW5fbm90ZXMgOiBudWxs
cHRyLCBvcHRfaW5fdGltZXN0YW1wX3ZhbHVlRm91bmQgPyAmb3B0X2luX3RpbWVzdGFtcCA6IG51
bGxwdHIsIG9wdF9pbl92YWx1ZXNfdmFsdWVGb3VuZCA/IG9wdF9pbl92YWx1ZXMuZ2V0KCkgOiBu
dWxscHRyLCBvcHRfaW5fcGF5bG9hZF92YWx1ZUZvdW5kID8gb3B0X2luX3BheWxvYWQuZ2V0KCkg
OiBudWxscHRyLCBvcHRfaW5fZGF0YWJhc2VJZF92YWx1ZUZvdW5kID8gJm9wdF9pbl9kYXRhYmFz
ZUlkIDogbnVsbHB0ciwgb3B0X2luX3NxbEVycm9yX3ZhbHVlRm91bmQgPyBvcHRfaW5fc3FsRXJy
b3IuZ2V0KCkgOiBudWxscHRyLCBvcHRfaW5fc2NyZWVuQ29sb3JfdmFsdWVGb3VuZCA/ICZvcHRf
aW5fc2NyZWVuQ29sb3IgOiBudWxscHRyLCBvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzX3ZhbHVlRm91
bmQgPyBvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX3ByaW50
Q29sb3JfdmFsdWVGb3VuZCA/ICZvcHRfaW5fcHJpbnRDb2xvciA6IG51bGxwdHIsIG91dF9jb2x1
bW5OYW1lcywgb3V0X25vdGVzLCBvdXRfdGltZXN0YW1wLCBvdXRfdmFsdWVzLCBvdXRfcGF5bG9h
ZCwgb3V0X2RhdGFiYXNlSWQsIG91dF9zcWxFcnJvciwgb3V0X3NjcmVlbkNvbG9yLCBvdXRfYWx0
ZXJuYXRlQ29sb3JzLCBvdXRfcHJpbnRDb2xvcik7CisKKyAgICBpZiAoIWVycm9yLmxlbmd0aCgp
KSB7CisgICAgICAgIGlmIChvdXRfY29sdW1uTmFtZXMpCisgICAgICAgICAgICByZXN1bHQtPnNl
dEFycmF5KCJjb2x1bW5OYW1lcyJfcywgb3V0X2NvbHVtbk5hbWVzKTsKKyAgICAgICAgaWYgKG91
dF9ub3Rlcy5oYXNWYWx1ZSgpKQorICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoIm5vdGVz
Il9zLCAqb3V0X25vdGVzKTsKKyAgICAgICAgaWYgKG91dF90aW1lc3RhbXAuaGFzVmFsdWUoKSkK
KyAgICAgICAgICAgIHJlc3VsdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICpvdXRfdGltZXN0
YW1wKTsKKyAgICAgICAgaWYgKG91dF92YWx1ZXMuaGFzVmFsdWUoKSkKKyAgICAgICAgICAgIHJl
c3VsdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsICpvdXRfdmFsdWVzKTsKKyAgICAgICAgaWYgKG91
dF9wYXlsb2FkLmhhc1ZhbHVlKCkpCisgICAgICAgICAgICByZXN1bHQtPnNldFZhbHVlKCJwYXls
b2FkIl9zLCAqb3V0X3BheWxvYWQpOworICAgICAgICBpZiAob3V0X2RhdGFiYXNlSWQuaGFzVmFs
dWUoKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgKm91
dF9kYXRhYmFzZUlkKTsKKyAgICAgICAgaWYgKG91dF9zcWxFcnJvcikKKyAgICAgICAgICAgIHJl
c3VsdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgb3V0X3NxbEVycm9yKTsKKyAgICAgICAgaWYg
KG91dF9zY3JlZW5Db2xvci5oYXNWYWx1ZSgpKQorICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJp
bmcoInNjcmVlbkNvbG9yIl9zLCAqb3V0X3NjcmVlbkNvbG9yKTsKKyAgICAgICAgaWYgKG91dF9h
bHRlcm5hdGVDb2xvcnMpCisgICAgICAgICAgICByZXN1bHQtPnNldEFycmF5KCJhbHRlcm5hdGVD
b2xvcnMiX3MsIG91dF9hbHRlcm5hdGVDb2xvcnMpOworICAgICAgICBpZiAob3V0X3ByaW50Q29s
b3IuaGFzVmFsdWUoKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJwcmludENvbG9y
Il9zLCAqb3V0X3ByaW50Q29sb3IpOworICAgIH0KKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQor
ICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZN
b3ZlKHJlc3VsdCksIGZhbHNlKTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBX
VEZNb3ZlKGVycm9yKSk7Cit9CisKK3ZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhl
Y3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmIHBhcmFtZXRlcnMpCit7CisgICAgUmVmUHRyPEpTT046OkFycmF5PiBpbl9jb2x1bW5O
YW1lcyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEFycmF5KHBhcmFtZXRlcnMuZ2V0KCksICJj
b2x1bW5OYW1lcyJfcywgbnVsbHB0cik7CisgICAgU3RyaW5nIGluX25vdGVzID0gbV9iYWNrZW5k
RGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksICJub3RlcyJfcywgbnVsbHB0
cik7CisgICAgZG91YmxlIGluX3RpbWVzdGFtcCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldERv
dWJsZShwYXJhbWV0ZXJzLmdldCgpLCAidGltZXN0YW1wIl9zLCBudWxscHRyKTsKKyAgICBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiBpbl92YWx1ZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRPYmpl
Y3QocGFyYW1ldGVycy5nZXQoKSwgInZhbHVlcyJfcywgbnVsbHB0cik7CisgICAgUmVmUHRyPEpT
T046OlZhbHVlPiBpbl9wYXlsb2FkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0VmFsdWUocGFy
YW1ldGVycy5nZXQoKSwgInBheWxvYWQiX3MsIG51bGxwdHIpOworICAgIGludCBpbl9kYXRhYmFz
ZUlkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0SW50ZWdlcihwYXJhbWV0ZXJzLmdldCgpLCAi
ZGF0YWJhc2VJZCJfcywgbnVsbHB0cik7CisgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gaW5fc3Fs
RXJyb3IgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRPYmplY3QocGFyYW1ldGVycy5nZXQoKSwg
InNxbEVycm9yIl9zLCBudWxscHRyKTsKKyAgICBTdHJpbmcgaW5fc2NyZWVuQ29sb3IgPSBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgInNjcmVlbkNvbG9y
Il9zLCBudWxscHRyKTsKKyAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGluX2FsdGVybmF0ZUNvbG9y
cyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEFycmF5KHBhcmFtZXRlcnMuZ2V0KCksICJhbHRl
cm5hdGVDb2xvcnMiX3MsIG51bGxwdHIpOworICAgIFN0cmluZyBpbl9wcmludENvbG9yID0gbV9i
YWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksICJwcmludENvbG9y
Il9zLCBudWxscHRyKTsKKyAgICBpZiAobV9iYWNrZW5kRGlzcGF0Y2hlci0+aGFzUHJvdG9jb2xF
cnJvcnMoKSkgeworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVy
cm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCAiU29tZSBhcmd1bWVudHMgb2Yg
bWV0aG9kICdEYXRhYmFzZS5leGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMnIGNhbid0IGJlIHBy
b2Nlc3NlZCJfcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNpZiBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVy
KSB7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZU5vT3B0aW9uYWxQYXJh
bWV0ZXJzKHJlcXVlc3RJZCwgKmluX2NvbHVtbk5hbWVzLCBpbl9ub3RlcywgaW5fdGltZXN0YW1w
LCAqaW5fdmFsdWVzLCAqaW5fcGF5bG9hZCwgaW5fZGF0YWJhc2VJZCwgKmluX3NxbEVycm9yLCBp
bl9zY3JlZW5Db2xvciwgKmluX2FsdGVybmF0ZUNvbG9ycywgaW5fcHJpbnRDb2xvcik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCisKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWY8SlNPTjo6T2Jq
ZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxKU09OOjpB
cnJheU9mPFN0cmluZz4+IG91dF9jb2x1bW5OYW1lczsKKyAgICBTdHJpbmcgb3V0X25vdGVzOwor
ICAgIGRvdWJsZSBvdXRfdGltZXN0YW1wOworICAgIEpTT046Ok9iamVjdCBvdXRfdmFsdWVzOwor
ICAgIEpTT046OlZhbHVlIG91dF9wYXlsb2FkOworICAgIGludCBvdXRfZGF0YWJhc2VJZDsKKyAg
ICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBvdXRfc3FsRXJy
b3I7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgb3V0
X3NjcmVlbkNvbG9yOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6
Q29sb3JMaXN0PiBvdXRfYWx0ZXJuYXRlQ29sb3JzOworICAgIERhdGFiYXNlQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyOjpQcmludENvbG9yIG91dF9wcmludENvbG9yOworICAgIG1fYWdlbnQtPmV4
ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhlcnJvciwgKmluX2NvbHVtbk5hbWVzLCBpbl9ub3Rl
cywgaW5fdGltZXN0YW1wLCAqaW5fdmFsdWVzLCAqaW5fcGF5bG9hZCwgaW5fZGF0YWJhc2VJZCwg
KmluX3NxbEVycm9yLCBpbl9zY3JlZW5Db2xvciwgKmluX2FsdGVybmF0ZUNvbG9ycywgaW5fcHJp
bnRDb2xvciwgb3V0X2NvbHVtbk5hbWVzLCAmb3V0X25vdGVzLCAmb3V0X3RpbWVzdGFtcCwgb3V0
X3ZhbHVlcywgJm91dF9wYXlsb2FkLCAmb3V0X2RhdGFiYXNlSWQsIG91dF9zcWxFcnJvciwgJm91
dF9zY3JlZW5Db2xvciwgb3V0X2FsdGVybmF0ZUNvbG9ycywgJm91dF9wcmludENvbG9yKTsKKwor
ICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIHsKKyAgICAgICAgcmVzdWx0LT5zZXRBcnJheSgiY29s
dW1uTmFtZXMiX3MsIG91dF9jb2x1bW5OYW1lcyk7CisgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5n
KCJub3RlcyJfcywgb3V0X25vdGVzKTsKKyAgICAgICAgcmVzdWx0LT5zZXREb3VibGUoInRpbWVz
dGFtcCJfcywgb3V0X3RpbWVzdGFtcCk7CisgICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJ2YWx1
ZXMiX3MsIG91dF92YWx1ZXMpOworICAgICAgICByZXN1bHQtPnNldFZhbHVlKCJwYXlsb2FkIl9z
LCBvdXRfcGF5bG9hZCk7CisgICAgICAgIHJlc3VsdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJf
cywgb3V0X2RhdGFiYXNlSWQpOworICAgICAgICByZXN1bHQtPnNldE9iamVjdCgic3FsRXJyb3Ii
X3MsIG91dF9zcWxFcnJvcik7CisgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xv
ciJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZh
bHVlKG91dF9zY3JlZW5Db2xvcikpOworICAgICAgICByZXN1bHQtPnNldEFycmF5KCJhbHRlcm5h
dGVDb2xvcnMiX3MsIG91dF9hbHRlcm5hdGVDb2xvcnMpOworICAgICAgICByZXN1bHQtPnNldFN0
cmluZygicHJpbnRDb2xvciJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6Omdl
dEVudW1Db25zdGFudFZhbHVlKG91dF9wcmludENvbG9yKSk7CisgICAgfQorICAgIGlmICghZXJy
b3IubGVuZ3RoKCkpCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShy
ZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOworICAgIGVsc2UKKyAgICAgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6
U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRl
cnMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPHd0Zi9K
U09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFj
ZSBJbnNwZWN0b3IgeworCitjbGFzcyBGcm9udGVuZFJvdXRlcjsKKworfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFy
YW1ldGVycy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCisK
KyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK30g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3Bh
dGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxs
LXJldHVybi1wYXJhbWV0ZXJzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
clByb3RvY29sVHlwZXMuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKKworCisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKworCisvLyBGb3J3
YXJkIGRlY2xhcmF0aW9ucy4KK25hbWVzcGFjZSBEYXRhYmFzZSB7CitjbGFzcyBFcnJvcjsKK2Vu
dW0gY2xhc3MgUHJpbWFyeUNvbG9yczsKK30gLy8gRGF0YWJhc2UKKy8vIEVuZCBvZiBmb3J3YXJk
IGRlY2xhcmF0aW9ucy4KKworCisvLyBUeXBlZGVmcy4KK25hbWVzcGFjZSBEYXRhYmFzZSB7Cisv
KiBVbmlxdWUgaWRlbnRpZmllciBvZiBEYXRhYmFzZSBvYmplY3QuICovCit0eXBlZGVmIGludCBE
YXRhYmFzZUlkOwordHlwZWRlZiBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpQcmltYXJ5Q29sb3JzPiBDb2xvckxpc3Q7Cit9IC8vIERhdGFiYXNlCisvLyBFbmQg
b2YgdHlwZWRlZnMuCisKK25hbWVzcGFjZSBUZXN0SGVscGVycyB7CisKK1N0cmluZyBnZXRFbnVt
Q29uc3RhbnRWYWx1ZShpbnQgY29kZSk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBn
ZXRFbnVtQ29uc3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkKK3sKKyAgICByZXR1cm4gZ2V0RW51bUNv
bnN0YW50VmFsdWUoc3RhdGljX2Nhc3Q8aW50PihlbnVtVmFsdWUpKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgVGVzdEhlbHBlcnMKKworbmFtZXNwYWNlIERhdGFiYXNlIHsKKworZW51bSBjbGFzcyBQ
cmltYXJ5Q29sb3JzIHsKKyAgICBSZWQgPSAwLAorICAgIEdyZWVuID0gMSwKKyAgICBCbHVlID0g
MiwKK307IC8vIGVudW0gY2xhc3MgUHJpbWFyeUNvbG9ycworCisvKiBEYXRhYmFzZSBlcnJvci4g
Ki8KK2NsYXNzIEVycm9yIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgeworcHVibGljOgorICAg
IGVudW0geworICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCisgICAgICAgIE1lc3NhZ2VTZXQgPSAx
IDw8IDAsCisgICAgICAgIENvZGVTZXQgPSAxIDw8IDEsCisgICAgICAgIEFsbEZpZWxkc1NldCA9
IChNZXNzYWdlU2V0IHwgQ29kZVNldCkKKyAgICB9OworCisgICAgdGVtcGxhdGU8aW50IFNUQVRF
PgorICAgIGNsYXNzIEJ1aWxkZXIgeworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxKU09O
OjpPYmplY3Q+IG1fcmVzdWx0OworCisgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVy
PFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKKyAgICAg
ICAgfQorCisgICAgICAgIEJ1aWxkZXIoUmVmPC8qRXJyb3IqL0pTT046Ok9iamVjdD4mJiBvYmpl
Y3QpCisgICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKKyAgICAgICAgewor
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJf
Y3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CisgICAgICAgIH0KKyAgICAgICAgZnJpZW5kIGNs
YXNzIEVycm9yOworICAgIHB1YmxpYzoKKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTWVzc2Fn
ZVNldD4mIHNldE1lc3NhZ2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgeworICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE1lc3NhZ2VTZXQpLCBwcm9wZXJ0eV9tZXNz
YWdlX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1lc3Nh
Z2UiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TWVzc2FnZVNldD4o
KTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2RlU2V0PiYgc2V0Q29k
ZShpbnQgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBDb2RlU2V0KSwgcHJvcGVydHlfY29kZV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0SW50ZWdlcigiY29kZSJfcywgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxDb2RlU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgUmVmPEVycm9yPiBy
ZWxlYXNlKCkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0g
QWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKHNpemVvZihFcnJvcikgPT0gc2l6ZW9mKEpTT046Ok9iamVjdCksIGNhbm5vdF9jYXN0
KTsKKworICAgICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4ganNvblJlc3VsdCA9IG1fcmVzdWx0
LnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFdURk1vdmUoKnJl
aW50ZXJwcmV0X2Nhc3Q8UmVmPEVycm9yPio+KCZqc29uUmVzdWx0KSk7CisgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgfTsKKworICAgIC8qCisgICAgICogU3ludGhl
dGljIGNvbnN0cnVjdG9yOgorICAgICAqIFJlZjxFcnJvcj4gcmVzdWx0ID0gRXJyb3I6OmNyZWF0
ZSgpCisgICAgICogICAgIC5zZXRNZXNzYWdlKC4uLikKKyAgICAgKiAgICAgLnNldENvZGUoLi4u
KQorICAgICAqICAgICAucmVsZWFzZSgpOworICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVyPE5v
RmllbGRzU2V0PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVs
ZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOworICAgIH0KK307CisKK30gLy8gRGF0YWJh
c2UKKworCisKK25hbWVzcGFjZSBUZXN0SGVscGVycyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFBy
b3RvY29sRW51bVR5cGU+CitPcHRpb25hbDxQcm90b2NvbEVudW1UeXBlPiBwYXJzZUVudW1WYWx1
ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJik7CisKKy8vIEVudW1zIGluIHRoZSAnRGF0YWJhc2Un
IERvbWFpbgordGVtcGxhdGU8PgorT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6OlByaW1hcnlDb2xvcnM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlBy
b3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4oY29uc3QgU3RyaW5nJik7CisKK30gLy8g
bmFtZXNwYWNlIFRlc3RIZWxwZXJzCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOworCisvLyBIYXNoIGRlY2xhcmF0aW9ucyBpbiB0aGUg
J0RhdGFiYXNlJyBEb21haW4KK3RlbXBsYXRlPD4KK3N0cnVjdCBEZWZhdWx0SGFzaDxJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4geworICAgIHR5cGVkZWYgSW50
SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gSGFzaDsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdURgorIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmpl
Y3RzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJl
dHVybi1wYXJhbWV0ZXJzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5o
IgorCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKwor
bmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKKworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1f
Y29uc3RhbnRfdmFsdWVzW10gPSB7CisgICAgInJlZCIsCisgICAgImdyZWVuIiwKKyAgICAiYmx1
ZSIsCisgICAgImN5YW4iLAorICAgICJtYWdlbnRhIiwKKyAgICAieWVsbG93IiwKKyAgICAiYmxh
Y2siLAorfTsKKworU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CisgICAg
cmV0dXJuIGVudW1fY29uc3RhbnRfdmFsdWVzW2NvZGVdOworfQorCisvLyBFbnVtcyBpbiB0aGUg
J0RhdGFiYXNlJyBEb21haW4KKwordGVtcGxhdGU8PgorT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90
b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJ
bnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4oY29uc3QgU3RyaW5n
JiBwcm90b2NvbFN0cmluZykKK3sKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFs
dWVzW10gPSB7CisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6
OlByaW1hcnlDb2xvcnM6OlJlZCwKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29s
OjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9yczo6R3JlZW4sCisgICAgICAgIChzaXplX3QpSW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM6OkJsdWUsCisgICAgfTsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDM7ICsraSkKKyAgICAgICAgaWYgKHByb3RvY29sU3Ry
aW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKKyAgICAgICAg
ICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMp
Y29uc3RhbnRWYWx1ZXNbaV07CisKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCit9IC8v
IG5hbWVzcGFjZSBUZXN0SGVscGVycworCisKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKwor
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2Jq
ZWN0cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVy
cy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRp
b25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJu
YXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCitA
cHJvdG9jb2wgVGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyOworCituYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKKworCitjbGFzcyBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyIHsK
KyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBPYmpDSW5zcGVjdG9y
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhh
bmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KKyAgICB2b2lkIGV4ZWN1
dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIGNvbnN0IEpTT046OkFycmF5
KiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nKiBpbl9ub3RlcywgY29uc3QgZG91YmxlKiBp
bl90aW1lc3RhbXAsIGNvbnN0IEpTT046Ok9iamVjdCogaW5fdmFsdWVzLCBjb25zdCBKU09OOjpW
YWx1ZSogaW5fcGF5bG9hZCwgY29uc3QgaW50KiBpbl9kYXRhYmFzZUlkLCBjb25zdCBKU09OOjpP
YmplY3QqIGluX3NxbEVycm9yLCBjb25zdCBTdHJpbmcqIGluX3NjcmVlbkNvbG9yLCBjb25zdCBK
U09OOjpBcnJheSogaW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcqIGluX3ByaW50Q29s
b3IpIGZpbmFsOworICAgIHZvaWQgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVx
dWVzdElkLCBjb25zdCBKU09OOjpBcnJheSYgaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYg
aW5fbm90ZXMsIGRvdWJsZSBpbl90aW1lc3RhbXAsIGNvbnN0IEpTT046Ok9iamVjdCYgaW5fdmFs
dWVzLCBKU09OOjpWYWx1ZSBpbl9wYXlsb2FkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgSlNP
Tjo6T2JqZWN0JiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nJiBpbl9zY3JlZW5Db2xvciwgY29u
c3QgSlNPTjo6QXJyYXkmIGluX2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBpbl9wcmlu
dENvbG9yKSBmaW5hbDsKK3ByaXZhdGU6CisgICAgUmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbERh
dGFiYXNlRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMu
aAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1j
YWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tl
bmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNp
bmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbmNsdWRlIDx3dGYvSlNP
TlZhbHVlcy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordm9pZCBPYmpDSW5zcGVjdG9y
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhs
b25nIHJlcXVlc3RJZCwgY29uc3QgSlNPTjo6QXJyYXkqIGluX2NvbHVtbk5hbWVzLCBjb25zdCBT
dHJpbmcqIGluX25vdGVzLCBjb25zdCBkb3VibGUqIGluX3RpbWVzdGFtcCwgY29uc3QgSlNPTjo6
T2JqZWN0KiBpbl92YWx1ZXMsIGNvbnN0IEpTT046OlZhbHVlKiBpbl9wYXlsb2FkLCBjb25zdCBp
bnQqIGluX2RhdGFiYXNlSWQsIGNvbnN0IEpTT046Ok9iamVjdCogaW5fc3FsRXJyb3IsIGNvbnN0
IFN0cmluZyogaW5fc2NyZWVuQ29sb3IsIGNvbnN0IEpTT046OkFycmF5KiBpbl9hbHRlcm5hdGVD
b2xvcnMsIGNvbnN0IFN0cmluZyogaW5fcHJpbnRDb2xvcikKK3sKKyAgICBpZiAoIVttX2RlbGVn
YXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1l
dGVyc1dpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazpjb2x1bW5OYW1lczpub3Rlczp0
aW1lc3RhbXA6dmFsdWVzOnBheWxvYWQ6ZGF0YWJhc2VJZDpzcWxFcnJvcjpzY3JlZW5Db2xvcjph
bHRlcm5hdGVDb2xvcnM6cHJpbnRDb2xvcjopXSkgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1l
dGhvZE5vdEZvdW5kLCAiJ0RhdGFiYXNlLmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMnIHdh
cyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGlu
Z0Vycm9ycygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWQgZXJyb3JDYWxsYmFj
ayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJl
cG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJy
b3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJv
cnMoKTsKKyAgICB9OworCisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihOU0FycmF5Lyo8TlNT
dHJpbmc+Ki8gKipjb2x1bW5OYW1lcywgTlNTdHJpbmcgKipub3RlcywgZG91YmxlICp0aW1lc3Rh
bXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0
ICoqcGF5bG9hZCwgaW50ICpkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoq
c3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqc2NyZWVuQ29sb3Is
IE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0
YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvciAqcHJpbnRDb2xvcikg
eworICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHRPYmplY3QgPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJB
TUVURVIoY29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKG5vdGVzLCBAIm5vdGVzIik7CisgICAgICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUih2YWx1ZXMsIEAidmFs
dWVzIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRF
UihwYXlsb2FkLCBAInBheWxvYWQiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURf
T1BUSU9OQUxfUEFSQU1FVEVSKHNxbEVycm9yLCBAInNxbEVycm9yIik7CisgICAgICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihhbHRlcm5hdGVDb2xvcnMsIEAi
YWx0ZXJuYXRlQ29sb3JzIik7CisgICAgICAgIGlmIChjb2x1bW5OYW1lcykKKyAgICAgICAgICAg
IHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB0b0pTT05TdHJpbmdBcnJh
eSgqY29sdW1uTmFtZXMpKTsKKyAgICAgICAgaWYgKG5vdGVzKQorICAgICAgICAgICAgcmVzdWx0
T2JqZWN0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCAqbm90ZXMpOworICAgICAgICBpZiAodGltZXN0
YW1wKQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywg
KnRpbWVzdGFtcCk7CisgICAgICAgIGlmICh2YWx1ZXMpCisgICAgICAgICAgICByZXN1bHRPYmpl
Y3QtPnNldE9iamVjdCgidmFsdWVzIl9zLCBbKnZhbHVlcyB0b0pTT05PYmplY3RdKTsKKyAgICAg
ICAgaWYgKHBheWxvYWQpCisgICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFZhbHVlKCJwYXls
b2FkIl9zLCBbKnBheWxvYWQgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIGlmIChkYXRhYmFzZUlk
KQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCAq
ZGF0YWJhc2VJZCk7CisgICAgICAgIGlmIChzcWxFcnJvcikKKyAgICAgICAgICAgIHJlc3VsdE9i
amVjdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgWypzcWxFcnJvciB0b0pTT05PYmplY3RdKTsK
KyAgICAgICAgaWYgKHNjcmVlbkNvbG9yKQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRT
dHJpbmcoInNjcmVlbkNvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKCpzY3JlZW5Db2xvcikpOwor
ICAgICAgICBpZiAoYWx0ZXJuYXRlQ29sb3JzKQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5z
ZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCB0b0pTT05TdHJpbmdBcnJheSgqYWx0ZXJuYXRl
Q29sb3JzKSk7CisgICAgICAgIGlmIChwcmludENvbG9yKQorICAgICAgICAgICAgcmVzdWx0T2Jq
ZWN0LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcoKnByaW50Q29s
b3IpKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJ
ZCwgV1RGTW92ZShyZXN1bHRPYmplY3QpLCBmYWxzZSk7CisgICAgfTsKKworICAgIE5TQXJyYXkv
KjxOU1N0cmluZz4qLyAqb19pbl9jb2x1bW5OYW1lczsKKyAgICBpZiAoaW5fY29sdW1uTmFtZXMp
CisgICAgICAgIG9faW5fY29sdW1uTmFtZXMgPSB0b09iakNTdHJpbmdBcnJheShpbl9jb2x1bW5O
YW1lcyk7CisgICAgTlNTdHJpbmcgKm9faW5fbm90ZXM7CisgICAgaWYgKGluX25vdGVzKQorICAg
ICAgICBvX2luX25vdGVzID0gKmluX25vdGVzOworICAgIGRvdWJsZSBvX2luX3RpbWVzdGFtcDsK
KyAgICBpZiAoaW5fdGltZXN0YW1wKQorICAgICAgICBvX2luX3RpbWVzdGFtcCA9ICppbl90aW1l
c3RhbXA7CisgICAgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvX2luX3ZhbHVlczsKKyAgICBpZiAo
aW5fdmFsdWVzKQorICAgICAgICBvX2luX3ZhbHVlcyA9IFtbW1JXSVByb3RvY29sSlNPTk9iamVj
dCBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0OmluX3ZhbHVlc10gYXV0b3JlbGVhc2VdOworICAg
IFJXSVByb3RvY29sSlNPTk9iamVjdCAqb19pbl9wYXlsb2FkOworICAgIGlmIChpbl9wYXlsb2Fk
KQorICAgICAgICBvX2luX3BheWxvYWQgPSBbW1tSV0lQcm90b2NvbEpTT05PYmplY3QgYWxsb2Nd
IGluaXRXaXRoSlNPTk9iamVjdDppbl9wYXlsb2FkXSBhdXRvcmVsZWFzZV07CisgICAgaW50IG9f
aW5fZGF0YWJhc2VJZDsKKyAgICBpZiAoaW5fZGF0YWJhc2VJZCkKKyAgICAgICAgb19pbl9kYXRh
YmFzZUlkID0gKmluX2RhdGFiYXNlSWQ7CisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAq
b19pbl9zcWxFcnJvcjsKKyAgICBpZiAoaW5fc3FsRXJyb3IpCisgICAgICAgIG9faW5fc3FsRXJy
b3IgPSBbW1tUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGFsbG9jXSBpbml0V2l0aEpTT05PYmpl
Y3Q6aW5fc3FsRXJyb3JdIGF1dG9yZWxlYXNlXTsKKyAgICBPcHRpb25hbDxUZXN0UHJvdG9jb2xE
YXRhYmFzZVByaW1hcnlDb2xvcnM+IG9faW5fc2NyZWVuQ29sb3I7CisgICAgaWYgKGluX3NjcmVl
bkNvbG9yKQorICAgICAgICBvX2luX3NjcmVlbkNvbG9yID0gZnJvbVByb3RvY29sU3RyaW5nPFRl
c3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycz4oKmluX3NjcmVlbkNvbG9yKTsKKyAgICBO
U0FycmF5Lyo8TlNTdHJpbmc+Ki8gKm9faW5fYWx0ZXJuYXRlQ29sb3JzOworICAgIGlmIChpbl9h
bHRlcm5hdGVDb2xvcnMpCisgICAgICAgIG9faW5fYWx0ZXJuYXRlQ29sb3JzID0gdG9PYmpDU3Ry
aW5nQXJyYXkoaW5fYWx0ZXJuYXRlQ29sb3JzKTsKKyAgICBPcHRpb25hbDxUZXN0UHJvdG9jb2xE
YXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yPiBvX2luX3ByaW50
Q29sb3I7CisgICAgaWYgKGluX3ByaW50Q29sb3IpCisgICAgICAgIG9faW5fcHJpbnRDb2xvciA9
IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25h
bFBhcmFtZXRlcnNQcmludENvbG9yPigqaW5fcHJpbnRDb2xvcik7CisKKyAgICBbbV9kZWxlZ2F0
ZSBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxs
YmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrIGNvbHVtbk5hbWVzOihpbl9jb2x1
bW5OYW1lcyA/ICZvX2luX2NvbHVtbk5hbWVzIDogbmlsKSBub3RlczooaW5fbm90ZXMgPyAmb19p
bl9ub3RlcyA6IG5pbCkgdGltZXN0YW1wOihpbl90aW1lc3RhbXAgPyAmb19pbl90aW1lc3RhbXAg
OiBuaWwpIHZhbHVlczooaW5fdmFsdWVzID8gJm9faW5fdmFsdWVzIDogbmlsKSBwYXlsb2FkOihp
bl9wYXlsb2FkID8gJm9faW5fcGF5bG9hZCA6IG5pbCkgZGF0YWJhc2VJZDooaW5fZGF0YWJhc2VJ
ZCA/ICZvX2luX2RhdGFiYXNlSWQgOiBuaWwpIHNxbEVycm9yOihpbl9zcWxFcnJvciA/ICZvX2lu
X3NxbEVycm9yIDogbmlsKSBzY3JlZW5Db2xvcjooaW5fc2NyZWVuQ29sb3IgPyAmb19pbl9zY3Jl
ZW5Db2xvci52YWx1ZSgpIDogbmlsKSBhbHRlcm5hdGVDb2xvcnM6KGluX2FsdGVybmF0ZUNvbG9y
cyA/ICZvX2luX2FsdGVybmF0ZUNvbG9ycyA6IG5pbCkgcHJpbnRDb2xvcjooaW5fcHJpbnRDb2xv
ciA/ICZvX2luX3ByaW50Q29sb3IudmFsdWUoKSA6IG5pbCldOworfQorCit2b2lkIE9iakNJbnNw
ZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRl
cnMobG9uZyByZXF1ZXN0SWQsIGNvbnN0IEpTT046OkFycmF5JiBpbl9jb2x1bW5OYW1lcywgY29u
c3QgU3RyaW5nJiBpbl9ub3RlcywgZG91YmxlIGluX3RpbWVzdGFtcCwgY29uc3QgSlNPTjo6T2Jq
ZWN0JiBpbl92YWx1ZXMsIEpTT046OlZhbHVlIGluX3BheWxvYWQsIGludCBpbl9kYXRhYmFzZUlk
LCBjb25zdCBKU09OOjpPYmplY3QmIGluX3NxbEVycm9yLCBjb25zdCBTdHJpbmcmIGluX3NjcmVl
bkNvbG9yLCBjb25zdCBKU09OOjpBcnJheSYgaW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJp
bmcmIGluX3ByaW50Q29sb3IpCit7CisgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2Vs
ZWN0b3I6QHNlbGVjdG9yKGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1dpdGhFcnJvckNhbGxi
YWNrOnN1Y2Nlc3NDYWxsYmFjazpjb2x1bW5OYW1lczpub3Rlczp0aW1lc3RhbXA6dmFsdWVzOnBh
eWxvYWQ6ZGF0YWJhc2VJZDpzcWxFcnJvcjpzY3JlZW5Db2xvcjphbHRlcm5hdGVDb2xvcnM6cHJp
bnRDb2xvcjopXSkgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2Nv
bEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0Rh
dGFiYXNlLmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycycgd2FzIG5vdCBmb3VuZCJfcyk7Cisg
ICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJy
b3IpIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihy
ZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAg
ICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgIH07CisKKyAg
ICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqY29sdW1uTmFt
ZXMsIE5TU3RyaW5nICpub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2Jq
ZWN0ICp2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5bG9hZCwgaW50IGRhdGFiYXNl
SWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRh
YmFzZVByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqYWx0
ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1l
dGVyc1ByaW50Q29sb3IgcHJpbnRDb2xvcikgeworICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiBy
ZXN1bHRPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBUSFJPV19FWENF
UFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihjb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIp
OworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihub3Rlcywg
QCJub3RlcyIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRF
Uih2YWx1ZXMsIEAidmFsdWVzIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlS
RURfUEFSQU1FVEVSKHBheWxvYWQsIEAicGF5bG9hZCIpOworICAgICAgICBUSFJPV19FWENFUFRJ
T05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihzcWxFcnJvciwgQCJzcWxFcnJvciIpOworICAgICAg
ICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihhbHRlcm5hdGVDb2xvcnMs
IEAiYWx0ZXJuYXRlQ29sb3JzIik7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoImNv
bHVtbk5hbWVzIl9zLCB0b0pTT05TdHJpbmdBcnJheShjb2x1bW5OYW1lcykpOworICAgICAgICBy
ZXN1bHRPYmplY3QtPnNldFN0cmluZygibm90ZXMiX3MsIG5vdGVzKTsKKyAgICAgICAgcmVzdWx0
T2JqZWN0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgdGltZXN0YW1wKTsKKyAgICAgICAgcmVz
dWx0T2JqZWN0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgW3ZhbHVlcyB0b0pTT05PYmplY3RdKTsK
KyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgW3BheWxvYWQgdG9K
U09OT2JqZWN0XSk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJ
ZCJfcywgZGF0YWJhc2VJZCk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KCJzcWxF
cnJvciJfcywgW3NxbEVycm9yIHRvSlNPTk9iamVjdF0pOworICAgICAgICByZXN1bHRPYmplY3Qt
PnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcoc2NyZWVuQ29sb3Ip
KTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCB0
b0pTT05TdHJpbmdBcnJheShhbHRlcm5hdGVDb2xvcnMpKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0
LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcocHJpbnRDb2xvcikp
OworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBX
VEZNb3ZlKHJlc3VsdE9iamVjdCksIGZhbHNlKTsKKyAgICB9OworCisgICAgTlNBcnJheS8qPE5T
U3RyaW5nPiovICpvX2luX2NvbHVtbk5hbWVzID0gdG9PYmpDU3RyaW5nQXJyYXkoJmluX2NvbHVt
bk5hbWVzKTsKKyAgICBOU1N0cmluZyAqb19pbl9ub3RlcyA9IGluX25vdGVzOworICAgIGRvdWJs
ZSBvX2luX3RpbWVzdGFtcCA9IGluX3RpbWVzdGFtcDsKKyAgICBSV0lQcm90b2NvbEpTT05PYmpl
Y3QgKm9faW5fdmFsdWVzID0gW1tbUldJUHJvdG9jb2xKU09OT2JqZWN0IGFsbG9jXSBpbml0V2l0
aEpTT05PYmplY3Q6JmluX3ZhbHVlc10gYXV0b3JlbGVhc2VdOworICAgIFJXSVByb3RvY29sSlNP
Tk9iamVjdCAqb19pbl9wYXlsb2FkID0gW1tbUldJUHJvdG9jb2xKU09OT2JqZWN0IGFsbG9jXSBp
bml0V2l0aEpTT05PYmplY3Q6JmluX3BheWxvYWRdIGF1dG9yZWxlYXNlXTsKKyAgICBpbnQgb19p
bl9kYXRhYmFzZUlkID0gaW5fZGF0YWJhc2VJZDsKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUVy
cm9yICpvX2luX3NxbEVycm9yID0gW1tbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBhbGxvY10g
aW5pdFdpdGhKU09OT2JqZWN0OiZpbl9zcWxFcnJvcl0gYXV0b3JlbGVhc2VdOworICAgIE9wdGlv
bmFsPFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycz4gb19pbl9zY3JlZW5Db2xvciA9
IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnM+KGlu
X3NjcmVlbkNvbG9yKTsKKyAgICBpZiAoIW9faW5fc2NyZWVuQ29sb3IpIHsKKyAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6
SW52YWxpZFBhcmFtcywgIlBhcmFtZXRlciAnc2NyZWVuQ29sb3InIG9mIG1ldGhvZCAnRGF0YWJh
c2UuZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzJyBjYW5ub3QgYmUgcHJvY2Vzc2VkIl9zKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKm9faW5f
YWx0ZXJuYXRlQ29sb3JzID0gdG9PYmpDU3RyaW5nQXJyYXkoJmluX2FsdGVybmF0ZUNvbG9ycyk7
CisgICAgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFt
ZXRlcnNQcmludENvbG9yPiBvX2luX3ByaW50Q29sb3IgPSBmcm9tUHJvdG9jb2xTdHJpbmc8VGVz
dFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yPihp
bl9wcmludENvbG9yKTsKKyAgICBpZiAoIW9faW5fcHJpbnRDb2xvcikgeworICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJ
bnZhbGlkUGFyYW1zLCAiUGFyYW1ldGVyICdwcmludENvbG9yJyBvZiBtZXRob2QgJ0RhdGFiYXNl
LmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycycgY2Fubm90IGJlIHByb2Nlc3NlZCJfcyk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBbbV9kZWxlZ2F0ZSBleGVjdXRlTm9PcHRpb25h
bFBhcmFtZXRlcnNXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFj
azpzdWNjZXNzQ2FsbGJhY2sgY29sdW1uTmFtZXM6b19pbl9jb2x1bW5OYW1lcyBub3RlczpvX2lu
X25vdGVzIHRpbWVzdGFtcDpvX2luX3RpbWVzdGFtcCB2YWx1ZXM6b19pbl92YWx1ZXMgcGF5bG9h
ZDpvX2luX3BheWxvYWQgZGF0YWJhc2VJZDpvX2luX2RhdGFiYXNlSWQgc3FsRXJyb3I6b19pbl9z
cWxFcnJvciBzY3JlZW5Db2xvcjpvX2luX3NjcmVlbkNvbG9yLnZhbHVlKCkgYWx0ZXJuYXRlQ29s
b3JzOm9faW5fYWx0ZXJuYXRlQ29sb3JzIHByaW50Q29sb3I6b19pbl9wcmludENvbG9yLnZhbHVl
KCldOworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbENvbmZpZ3VyYXRpb24uaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNv
bW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rl
c3RQcm90b2NvbC5oPgorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkK
K0BpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0CitAcHJvcGVy
dHkgKG5vbmF0b21pYywgcmV0YWluLCBzZXR0ZXI9c2V0RGF0YWJhc2VIYW5kbGVyOikgaWQ8VGVz
dFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyPiBkYXRhYmFzZUhhbmRsZXI7CitAZW5kCisK
KworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRl
cnMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50
ZXJuYWwuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorI2lt
cG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2lt
cG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJz
Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMu
aD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24KK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xs
ZXIqIF9jb250cm9sbGVyOworICAgIGlkPFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxl
cj4gX2RhdGFiYXNlSGFuZGxlcjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJv
bGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCit7CisgICAg
c2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7
CisgICAgQVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsK
KyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgW19kYXRhYmFz
ZUhhbmRsZXIgcmVsZWFzZV07CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistICh2b2lkKXNl
dERhdGFiYXNlSGFuZGxlcjooaWQ8VGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyPilo
YW5kbGVyCit7CisgICAgaWYgKGhhbmRsZXIgPT0gX2RhdGFiYXNlSGFuZGxlcikKKyAgICAgICAg
cmV0dXJuOworCisgICAgW19kYXRhYmFzZUhhbmRsZXIgcmVsZWFzZV07CisgICAgX2RhdGFiYXNl
SGFuZGxlciA9IFtoYW5kbGVyIHJldGFpbl07CisKKyAgICBhdXRvIGFsdGVybmF0ZURpc3BhdGNo
ZXIgPSBtYWtlVW5pcXVlPE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiho
YW5kbGVyKTsKKyAgICBhdXRvIGFsdGVybmF0ZUFnZW50ID0gbWFrZVVuaXF1ZTxBbHRlcm5hdGVE
aXNwYXRjaGFibGVBZ2VudDxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyLCBBbHRlcm5hdGVEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVyPj4oIkRhdGFiYXNlIl9zLCAqX2NvbnRyb2xsZXIsIFdURk1v
dmUoYWx0ZXJuYXRlRGlzcGF0Y2hlcikpOworICAgIF9jb250cm9sbGVyLT5hcHBlbmRFeHRyYUFn
ZW50KFdURk1vdmUoYWx0ZXJuYXRlQWdlbnQpKTsKK30KKworLSAoaWQ8VGVzdFByb3RvY29sRGF0
YWJhc2VEb21haW5IYW5kbGVyPilkYXRhYmFzZUhhbmRsZXIKK3sKKyAgICByZXR1cm4gX2RhdGFi
YXNlSGFuZGxlcjsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29u
ZmlndXJhdGlvbi5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRj
aGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgt
b3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKwor
I2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDx3dGYvSlNP
TlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisKKyMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13
aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbiBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5o
PgorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+CisKKwor
QGNsYXNzIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I7CisKK3R5cGVkZWYgTlNfRU5VTShOU0lu
dGVnZXIsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycykgeworICAgIFRlc3RQcm90
b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc1JlZCwKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZVBy
aW1hcnlDb2xvcnNHcmVlbiwKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNC
bHVlLAorfTsKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGF0YWJh
c2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvcikgeworICAgIFRlc3RQcm90
b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JDeWFuLAor
ICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50
Q29sb3JNYWdlbnRhLAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFs
UGFyYW1ldGVyc1ByaW50Q29sb3JZZWxsb3csCisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVj
dXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckJsYWNrLAorfTsKKworCisKK3R5cGVk
ZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlv
bmFsUGFyYW1ldGVyc1ByaW50Q29sb3IpIHsKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQ3lhbiwKKyAgICBUZXN0UHJvdG9jb2xE
YXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yTWFnZW50YSwKKyAg
ICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENv
bG9yWWVsbG93LAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFy
YW1ldGVyc1ByaW50Q29sb3JCbGFjaywKK307CisKK3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIs
IFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xv
cikgeworICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJz
UHJpbnRDb2xvckN5YW4sCisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25h
bFBhcmFtZXRlcnNQcmludENvbG9yTWFnZW50YSwKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JZZWxsb3csCisgICAgVGVzdFByb3Rv
Y29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQmxhY2ssCit9
OworCisKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGF0YWJhc2VF
eGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yKSB7CisgICAgVGVzdFByb3RvY29s
RGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQ3lhbiwKKyAgICBU
ZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JN
YWdlbnRhLAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0
ZXJzUHJpbnRDb2xvclllbGxvdywKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09w
dGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JCbGFjaywKK307CisKK19fYXR0cmlidXRlX18oKHZp
c2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUVy
cm9yIDogUldJUHJvdG9jb2xKU09OT2JqZWN0CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXls
b2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKKy0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29u
T2JqZWN0OworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNz
YWdlIGNvZGU6KGludCljb2RlOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMs
IGNvcHkpIE5TU3RyaW5nICptZXNzYWdlOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25h
dG9taWMsIGFzc2lnbikgaW50IGNvZGU7CitAZW5kCisKK0Bwcm90b2NvbCBUZXN0UHJvdG9jb2xE
YXRhYmFzZURvbWFpbkhhbmRsZXIgPE5TT2JqZWN0PgorQG9wdGlvbmFsCistICh2b2lkKWV4ZWN1
dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmlu
ZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKE5TQXJyYXkv
KjxOU1N0cmluZz4qLyAqKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqKm5vdGVzLCBkb3VibGUgKnRp
bWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05P
YmplY3QgKipwYXlsb2FkLCBpbnQgKmRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJy
b3IgKipzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzICpzY3JlZW5D
b2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICoqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9j
b2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yICpwcmludENv
bG9yKSlzdWNjZXNzQ2FsbGJhY2sgY29sdW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAq
Kiljb2x1bW5OYW1lcyBub3RlczooTlNTdHJpbmcgKiopbm90ZXMgdGltZXN0YW1wOihkb3VibGUg
Kil0aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKiopdmFsdWVzIHBheWxv
YWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKilwYXlsb2FkIGRhdGFiYXNlSWQ6KGludCAqKWRh
dGFiYXNlSWQgc3FsRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKiopc3FsRXJyb3Ig
c2NyZWVuQ29sb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqKXNjcmVlbkNv
bG9yIGFsdGVybmF0ZUNvbG9yczooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKWFsdGVybmF0ZUNv
bG9ycyBwcmludENvbG9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBh
cmFtZXRlcnNQcmludENvbG9yICopcHJpbnRDb2xvcjsKKy0gKHZvaWQpZXhlY3V0ZU5vT3B0aW9u
YWxQYXJhbWV0ZXJzV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSll
cnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKShOU0FycmF5Lyo8TlNTdHJpbmc+
Ki8gKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJXSVBy
b3RvY29sSlNPTk9iamVjdCAqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnBheWxvYWQs
IGludCBkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpzcWxFcnJvciwgVGVz
dFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzIHNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNT
dHJpbmc+Ki8gKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9P
cHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yIHByaW50Q29sb3IpKXN1Y2Nlc3NDYWxsYmFjayBj
b2x1bW5OYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMgbm90ZXM6KE5T
U3RyaW5nICopbm90ZXMgdGltZXN0YW1wOihkb3VibGUpdGltZXN0YW1wIHZhbHVlczooUldJUHJv
dG9jb2xKU09OT2JqZWN0ICopdmFsdWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAq
KXBheWxvYWQgZGF0YWJhc2VJZDooaW50KWRhdGFiYXNlSWQgc3FsRXJyb3I6KFRlc3RQcm90b2Nv
bERhdGFiYXNlRXJyb3IgKilzcWxFcnJvciBzY3JlZW5Db2xvcjooVGVzdFByb3RvY29sRGF0YWJh
c2VQcmltYXJ5Q29sb3JzKXNjcmVlbkNvbG9yIGFsdGVybmF0ZUNvbG9yczooTlNBcnJheS8qPE5T
U3RyaW5nPiovICopYWx0ZXJuYXRlQ29sb3JzIHByaW50Q29sb3I6KFRlc3RQcm90b2NvbERhdGFi
YXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvcilwcmludENvbG9yOworQGVu
ZAorCisKKworCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGli
aWxpdHlPYmplY3RzLmg+CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMu
anNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRl
c3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIK
KyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5o
PgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xJbnRlcm5hbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdp
dGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0
IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+CisKK25hbWVzcGFj
ZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+CitPcHRpb25h
bDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsK
KworaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbERhdGFiYXNlUHJp
bWFyeUNvbG9ycyB2YWx1ZSkKK3sKKyAgICBzd2l0Y2godmFsdWUpIHsKKyAgICBjYXNlIFRlc3RQ
cm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc1JlZDoKKyAgICAgICAgcmV0dXJuICJyZWQiX3M7
CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNHcmVlbjoKKyAgICAg
ICAgcmV0dXJuICJncmVlbiJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFy
eUNvbG9yc0JsdWU6CisgICAgICAgIHJldHVybiAiYmx1ZSJfczsKKyAgICB9Cit9CisKK3RlbXBs
YXRlPD4KK2lubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnM+
IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIGlmICh2YWx1
ZSA9PSAicmVkIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNv
bG9yc1JlZDsKKyAgICBpZiAodmFsdWUgPT0gImdyZWVuIikKKyAgICAgICAgcmV0dXJuIFRlc3RQ
cm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc0dyZWVuOworICAgIGlmICh2YWx1ZSA9PSAiYmx1
ZSIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNCbHVl
OworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK2lubGluZSBTdHJpbmcgdG9Qcm90b2Nv
bFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQ
cmludENvbG9yIHZhbHVlKQoreworICAgIHN3aXRjaCh2YWx1ZSkgeworICAgIGNhc2UgVGVzdFBy
b3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckN5YW46
CisgICAgICAgIHJldHVybiAiY3lhbiJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNl
RXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JNYWdlbnRhOgorICAgICAgICBy
ZXR1cm4gIm1hZ2VudGEiX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVB
bGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yWWVsbG93OgorICAgICAgICByZXR1cm4gInll
bGxvdyJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFs
UGFyYW1ldGVyc1ByaW50Q29sb3JCbGFjazoKKyAgICAgICAgcmV0dXJuICJibGFjayJfczsKKyAg
ICB9Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xEYXRhYmFz
ZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yPiBmcm9tUHJvdG9jb2xTdHJp
bmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gImN5YW4iKQorICAg
ICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0
ZXJzUHJpbnRDb2xvckN5YW47CisgICAgaWYgKHZhbHVlID09ICJtYWdlbnRhIikKKyAgICAgICAg
cmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1By
aW50Q29sb3JNYWdlbnRhOworICAgIGlmICh2YWx1ZSA9PSAieWVsbG93IikKKyAgICAgICAgcmV0
dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50
Q29sb3JZZWxsb3c7CisgICAgaWYgKHZhbHVlID09ICJibGFjayIpCisgICAgICAgIHJldHVybiBU
ZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9y
QmxhY2s7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKworCisKK2lubGluZSBTdHJpbmcg
dG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBh
cmFtZXRlcnNQcmludENvbG9yIHZhbHVlKQoreworICAgIHN3aXRjaCh2YWx1ZSkgeworICAgIGNh
c2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRD
b2xvckN5YW46CisgICAgICAgIHJldHVybiAiY3lhbiJfczsKKyAgICBjYXNlIFRlc3RQcm90b2Nv
bERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JNYWdlbnRhOgor
ICAgICAgICByZXR1cm4gIm1hZ2VudGEiX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFz
ZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yWWVsbG93OgorICAgICAgICBy
ZXR1cm4gInllbGxvdyJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFs
bE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JCbGFjazoKKyAgICAgICAgcmV0dXJuICJibGFj
ayJfczsKKyAgICB9Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBPcHRpb25hbDxUZXN0UHJvdG9j
b2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yPiBmcm9tUHJv
dG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gImN5
YW4iKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9u
YWxQYXJhbWV0ZXJzUHJpbnRDb2xvckN5YW47CisgICAgaWYgKHZhbHVlID09ICJtYWdlbnRhIikK
KyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFy
YW1ldGVyc1ByaW50Q29sb3JNYWdlbnRhOworICAgIGlmICh2YWx1ZSA9PSAieWVsbG93IikKKyAg
ICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1l
dGVyc1ByaW50Q29sb3JZZWxsb3c7CisgICAgaWYgKHZhbHVlID09ICJibGFjayIpCisgICAgICAg
IHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQ
cmludENvbG9yQmxhY2s7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKworaW5saW5lIFN0
cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9u
YWxQYXJhbWV0ZXJzUHJpbnRDb2xvciB2YWx1ZSkKK3sKKyAgICBzd2l0Y2godmFsdWUpIHsKKyAg
ICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJp
bnRDb2xvckN5YW46CisgICAgICAgIHJldHVybiAiY3lhbiJfczsKKyAgICBjYXNlIFRlc3RQcm90
b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvck1hZ2VudGE6
CisgICAgICAgIHJldHVybiAibWFnZW50YSJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFi
YXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvclllbGxvdzoKKyAgICAgICAg
cmV0dXJuICJ5ZWxsb3ciX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVO
b09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JCbGFjazoKKyAgICAgICAgcmV0dXJuICJibGFj
ayJfczsKKyAgICB9Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBPcHRpb25hbDxUZXN0UHJvdG9j
b2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3I+IGZyb21Qcm90
b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSAiY3lh
biIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFs
UGFyYW1ldGVyc1ByaW50Q29sb3JDeWFuOworICAgIGlmICh2YWx1ZSA9PSAibWFnZW50YSIpCisg
ICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1l
dGVyc1ByaW50Q29sb3JNYWdlbnRhOworICAgIGlmICh2YWx1ZSA9PSAieWVsbG93IikKKyAgICAg
ICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJz
UHJpbnRDb2xvclllbGxvdzsKKyAgICBpZiAodmFsdWUgPT0gImJsYWNrIikKKyAgICAgICAgcmV0
dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRD
b2xvckJsYWNrOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKKworCitpbmxpbmUgU3Ry
aW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25h
bFBhcmFtZXRlcnNQcmludENvbG9yIHZhbHVlKQoreworICAgIHN3aXRjaCh2YWx1ZSkgeworICAg
IGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmlu
dENvbG9yQ3lhbjoKKyAgICAgICAgcmV0dXJuICJjeWFuIl9zOworICAgIGNhc2UgVGVzdFByb3Rv
Y29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yTWFnZW50YToK
KyAgICAgICAgcmV0dXJuICJtYWdlbnRhIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJh
c2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yWWVsbG93OgorICAgICAgICBy
ZXR1cm4gInllbGxvdyJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5v
T3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckJsYWNrOgorICAgICAgICByZXR1cm4gImJsYWNr
Il9zOworICAgIH0KK30KKwordGVtcGxhdGU8PgoraW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2Nv
bERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvcj4gZnJvbVByb3Rv
Y29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09ICJjeWFu
IikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQ
YXJhbWV0ZXJzUHJpbnRDb2xvckN5YW47CisgICAgaWYgKHZhbHVlID09ICJtYWdlbnRhIikKKyAg
ICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0
ZXJzUHJpbnRDb2xvck1hZ2VudGE7CisgICAgaWYgKHZhbHVlID09ICJ5ZWxsb3ciKQorICAgICAg
ICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQ
cmludENvbG9yWWVsbG93OworICAgIGlmICh2YWx1ZSA9PSAiYmxhY2siKQorICAgICAgICByZXR1
cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENv
bG9yQmxhY2s7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKworfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgK
KworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1y
ZXR1cm4tcGFyYW1ldGVycy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgorI2lt
cG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKwordXNp
bmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMgKERhdGFiYXNlRG9tYWluKQorCisrICh2b2lkKV9wYXJzZURhdGFiYXNlSWQ6KE5T
TnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworKyAodm9pZClfcGFy
c2VQcmltYXJ5Q29sb3JzOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5
bG9hZDsKKysgKHZvaWQpX3BhcnNlQ29sb3JMaXN0OihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiop
b3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisrICh2b2lkKV9wYXJzZUVycm9yOihU
ZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXls
b2FkOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMgKERhdGFiYXNlRG9tYWluKQorCisrICh2b2lkKV9wYXJzZURhdGFiYXNlSWQ6KE5TTnVtYmVy
ICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNOdW1iZXIgY2xhc3NdKTsKKyAgICAqb3V0VmFs
dWUgPSAoTlNOdW1iZXIgKilwYXlsb2FkOworfQorCisrICh2b2lkKV9wYXJzZVByaW1hcnlDb2xv
cnM6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsK
KyAgICBPcHRpb25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnM+IHJlc3VsdCA9
IEluc3BlY3Rvcjo6ZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFy
eUNvbG9ycz4ocGF5bG9hZCk7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfRU5VTV9WQUxV
RShyZXN1bHQsIEAiUHJpbWFyeUNvbG9ycyIpOworICAgICpvdXRWYWx1ZSA9IEAocmVzdWx0LnZh
bHVlKCkpOworfQorCisrICh2b2lkKV9wYXJzZUNvbG9yTGlzdDooTlNBcnJheS8qPE5TU3RyaW5n
PiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNBcnJheS8qPE5TU3RyaW5nPiovIGNsYXNz
XSk7CisgICAgKm91dFZhbHVlID0gKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKXBheWxvYWQ7Cit9
CisKKysgKHZvaWQpX3BhcnNlRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKiopb3V0
VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9S
X0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUg
PSBbW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXls
b2FkXTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1y
ZXR1cm4tcGFyYW1ldGVycy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9j
b2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbXBv
cnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0Bp
bXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yCisKKy0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAq
KXBheWxvYWQKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0
dXJuIG5pbDsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5
bG9hZFtAIm1lc3NhZ2UiXSwgQCJtZXNzYWdlIik7CisgICAgc2VsZi5tZXNzYWdlID0gcGF5bG9h
ZFtAIm1lc3NhZ2UiXTsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVS
VFkocGF5bG9hZFtAImNvZGUiXSwgQCJjb2RlIik7CisgICAgc2VsZi5jb2RlID0gW3BheWxvYWRb
QCJjb2RlIl0gaW50ZWdlclZhbHVlXTsKKworICAgIHJldHVybiBzZWxmOworfQorLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9i
amVjdAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmpl
Y3QgdG9KU09OT2JqZWN0XS5nZXQoKV0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgcmV0
dXJuIHNlbGY7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3RyaW5n
ICopbWVzc2FnZSBjb2RlOihpbnQpY29kZQoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5p
dF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFV
SVJFRF9QUk9QRVJUWShtZXNzYWdlLCBAIm1lc3NhZ2UiKTsKKworICAgIHNlbGYubWVzc2FnZSA9
IG1lc3NhZ2U7CisgICAgc2VsZi5jb2RlID0gY29kZTsKKworICAgIHJldHVybiBzZWxmOworfQor
CistICh2b2lkKXNldE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZQoreworICAgIFtzdXBlciBz
ZXRTdHJpbmc6bWVzc2FnZSBmb3JLZXk6QCJtZXNzYWdlIl07Cit9CisKKy0gKE5TU3RyaW5nICop
bWVzc2FnZQoreworICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAibWVzc2FnZSJdOwor
fQorCistICh2b2lkKXNldENvZGU6KGludCljb2RlCit7CisgICAgW3N1cGVyIHNldEludGVnZXI6
Y29kZSBmb3JLZXk6QCJjb2RlIl07Cit9CisKKy0gKGludCljb2RlCit7CisgICAgcmV0dXJuIFtz
dXBlciBpbnRlZ2VyRm9yS2V5OkAiY29kZSJdOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RlZmluaXRpb25zLXdpdGgtbWFjLXBs
YXRmb3JtLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24tcmVz
dWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5mNjliNmRlN2UxYQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9leHBlY3RlZC9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uLXJlc3Vs
dApAQCAtMCwwICsxLDEyMDIgQEAKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29t
bWFuZHMuanMuaW4KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9u
cy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworLy8gTmV0d29yaworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiTmV0
d29yayIsIG51bGwpOworI2lmIFBMQVRGT1JNKE1BQykKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0
ZXJDb21tYW5kKCJOZXR3b3JrLmxvYWRSZXNvdXJjZSIsIG51bGwsIFtdLCBbXSk7CisjZW5kaWYg
Ly8gUExBVEZPUk0oTUFDKQorI2lmIFBMQVRGT1JNKE1BQykKK0luc3BlY3RvckJhY2tlbmQucmVn
aXN0ZXJFdmVudCgiTmV0d29yay5yZXNvdXJjZUxvYWRlZCIsIG51bGwsIFtdKTsKKyNlbmRpZiAv
LyBQTEFURk9STShNQUMpCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyTmV0d29ya0Rpc3BhdGNo
ZXIgPSBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRGlzcGF0Y2hlci5iaW5kKEluc3BlY3RvckJh
Y2tlbmQsICJOZXR3b3JrIik7CitJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJOZXR3
b3JrIiwgbnVsbCk7CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcy5p
bgorCisjIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxh
dGZvcm0uanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFn
bWEgb25jZQorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisK
KyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2Ns
YXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldEJh
Y2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7
IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9CisgICAgQmFja2Vu
ZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5k
RGlzcGF0Y2hlci5nZXQoKTsgfQorcHJpdmF0ZToKKyAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNo
ZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Cit9OworCisKK2NsYXNzIEFsdGVybmF0ZU5ldHdvcmtC
YWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Citw
dWJsaWM6CisgICAgdmlydHVhbCB+QWx0ZXJuYXRlTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyKCkg
eyB9CisjaWYgUExBVEZPUk0oTUFDKQorICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UobG9u
ZyBjYWxsSWQpID0gMDsKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCit9OworCit9IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQorIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJz
LmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpz
b24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJy
b3JTdHJpbmc7CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
K2NsYXNzIEFsdGVybmF0ZU5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjsKKyNlbmRpZiAvLyBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworY2xhc3MgTmV0d29ya0JhY2tl
bmREaXNwYXRjaGVySGFuZGxlciB7CitwdWJsaWM6CisjaWYgUExBVEZPUk0oTUFDKQorICAgIHZp
cnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UoRXJyb3JTdHJpbmcmKSA9IDA7CisjZW5kaWYgLy8gUExB
VEZPUk0oTUFDKQorcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgfk5ldHdvcmtCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXIoKTsKK307CisKK2NsYXNzIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlciBmaW5h
bCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAg
c3RhdGljIFJlZjxOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0
Y2hlciYsIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICB2b2lkIGRpc3Bh
dGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVj
dD4mJiBtZXNzYWdlKSBmaW5hbDsKK3ByaXZhdGU6CisjaWYgUExBVEZPUk0oTUFDKQorICAgIHZv
aWQgbG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBh
cmFtZXRlcnMpOworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKKyNpZiBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK3B1YmxpYzoKKyAgICB2b2lkIHNldEFsdGVybmF0ZURp
c3BhdGNoZXIoQWx0ZXJuYXRlTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNw
YXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0K
K3ByaXZhdGU6CisgICAgQWx0ZXJuYXRlTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyKiBtX2FsdGVy
bmF0ZURpc3BhdGNoZXIgeyBudWxscHRyIH07CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCitwcml2YXRlOgorICAgIE5ldHdvcmtCYWNrZW5kRGlzcGF0
Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYsIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIq
KTsKKyAgICBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50IHsgbnVsbHB0
ciB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13
aXRoLW1hYy1wbGF0Zm9ybS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hl
cnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVy
Lmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0
cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXJzLmgiCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitOZXR3b3JrQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyOjp+TmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQor
CitSZWY8TmV0d29ya0JhY2tlbmREaXNwYXRjaGVyPiBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI6
OmNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIE5ldHdvcmtCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKK30K
KworTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyOjpOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIoQmFj
a2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBOZXR3b3JrQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyKiBhZ2VudCkKKyAgICA6IFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJh
Y2tlbmREaXNwYXRjaGVyKQorICAgICwgbV9hZ2VudChhZ2VudCkKK3sKKyAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oIk5ldHdvcmsiX3MsIHRoaXMp
OworfQorCit2b2lkIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1
ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2Up
Cit7CisgICAgUmVmPE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CisK
KyAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOworICAgIG1lc3NhZ2UtPmdldE9i
amVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsKKworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBp
ZiAobWV0aG9kID09ICJsb2FkUmVzb3VyY2UiKSB7CisgICAgICAgIGxvYWRSZXNvdXJjZShyZXF1
ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOworICAgICAgICByZXR1cm47CisgICAgfQorI2Vu
ZGlmIC8vIFBMQVRGT1JNKE1BQykKKworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFBy
b3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmsu
IiArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKK30KKworI2lmIFBMQVRGT1JNKE1BQykK
K3ZvaWQgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0
SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCit7CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCisgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeworICAg
ICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZShyZXF1ZXN0SWQpOworICAg
ICAgICByZXR1cm47CisgICAgfQorI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQorCisgICAgRXJyb3JTdHJpbmcgZXJyb3I7CisgICAgUmVmPEpTT046Ok9i
amVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBtX2FnZW50LT5sb2Fk
UmVzb3VyY2UoZXJyb3IpOworCisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKKyAgICAgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQp
LCBmYWxzZSk7CisgICAgZWxzZQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQ
cm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJv
cikpOworfQorI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisK
K2NsYXNzIEZyb250ZW5kUm91dGVyOworCitjbGFzcyBOZXR3b3JrRnJvbnRlbmREaXNwYXRjaGVy
IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBOZXR3b3JrRnJv
bnRlbmREaXNwYXRjaGVyKEZyb250ZW5kUm91dGVyJiBmcm9udGVuZFJvdXRlcikgOiBtX2Zyb250
ZW5kUm91dGVyKGZyb250ZW5kUm91dGVyKSB7IH0KKyNpZiBQTEFURk9STShNQUMpCisgICAgdm9p
ZCByZXNvdXJjZUxvYWRlZCgpOworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKK3ByaXZhdGU6Cisg
ICAgRnJvbnRlbmRSb3V0ZXImIG1fZnJvbnRlbmRSb3V0ZXI7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorCisj
IyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbiBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisjaWYgUExBVEZPUk0oTUFD
KQordm9pZCBOZXR3b3JrRnJvbnRlbmREaXNwYXRjaGVyOjpyZXNvdXJjZUxvYWRlZCgpCit7Cisg
ICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OworICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIk5ldHdvcmsucmVzb3Vy
Y2VMb2FkZWQiX3MpOworCisgICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3Nh
Z2UtPnRvSlNPTlN0cmluZygpKTsKK30KKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCisKK30gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNo
ZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0u
anNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgor
I2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisK
KworbmFtZXNwYWNlIFByb3RvY29sIHsKKworCisKKy8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgor
bmFtZXNwYWNlIE5ldHdvcmsgeworI2lmIFBMQVRGT1JNKE1BQykKK2NsYXNzIE5ldHdvcmtFcnJv
cjsKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCit9IC8vIE5ldHdvcmsKKy8vIEVuZCBvZiBmb3J3
YXJkIGRlY2xhcmF0aW9ucy4KKworCisKKworbmFtZXNwYWNlIE5ldHdvcmsgeworCisjaWYgUExB
VEZPUk0oTUFDKQorY2xhc3MgTmV0d29ya0Vycm9yIDogcHVibGljIEpTT046Ok9iamVjdEJhc2Ug
eworcHVibGljOgorICAgIGVudW0geworICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCisgICAgICAg
IE1lc3NhZ2VTZXQgPSAxIDw8IDAsCisgICAgICAgIENvZGVTZXQgPSAxIDw8IDEsCisgICAgICAg
IEFsbEZpZWxkc1NldCA9IChNZXNzYWdlU2V0IHwgQ29kZVNldCkKKyAgICB9OworCisgICAgdGVt
cGxhdGU8aW50IFNUQVRFPgorICAgIGNsYXNzIEJ1aWxkZXIgeworICAgIHByaXZhdGU6CisgICAg
ICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVzdWx0OworCisgICAgICAgIHRlbXBsYXRlPGlu
dCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4q
Pih0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXIoUmVmPC8qTmV0d29ya0Vycm9y
Ki9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQorICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3Zl
KG9iamVjdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09
IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAgICAg
ICB9CisgICAgICAgIGZyaWVuZCBjbGFzcyBOZXR3b3JrRXJyb3I7CisgICAgcHVibGljOgorCisg
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2FnZShjb25zdCBTdHJp
bmcmIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRF
ICYgTWVzc2FnZVNldCksIHByb3BlcnR5X21lc3NhZ2VfYWxyZWFkeV9zZXQpOworICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldFN0cmluZygibWVzc2FnZSJfcywgdmFsdWUpOworICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxNZXNzYWdlU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVp
bGRlcjxTVEFURSB8IENvZGVTZXQ+JiBzZXRDb2RlKGludCB2YWx1ZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENvZGVTZXQpLCBwcm9wZXJ0eV9jb2Rl
X2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2VyKCJjb2RlIl9z
LCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvZGVTZXQ+KCk7CisgICAg
ICAgIH0KKworICAgICAgICBSZWY8TmV0d29ya0Vycm9yPiByZWxlYXNlKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRf
aXNfbm90X3JlYWR5KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihOZXR3b3Jr
RXJyb3IpID09IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7CisKKyAgICAgICAg
ICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25SZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVs
bCgpOworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0
PFJlZjxOZXR3b3JrRXJyb3I+Kj4oJmpzb25SZXN1bHQpKTsKKyAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyoKKyAgICAgKiBTeW50aGV0aWMgY29u
c3RydWN0b3I6CisgICAgICogUmVmPE5ldHdvcmtFcnJvcj4gcmVzdWx0ID0gTmV0d29ya0Vycm9y
OjpjcmVhdGUoKQorICAgICAqICAgICAuc2V0TWVzc2FnZSguLi4pCisgICAgICogICAgIC5zZXRD
b2RlKC4uLikKKyAgICAgKiAgICAgLnJlbGVhc2UoKTsKKyAgICAgKi8KKyAgICBzdGF0aWMgQnVp
bGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBCdWlsZGVy
PE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICB9Cit9OworI2VuZGlm
IC8vIFBMQVRGT1JNKE1BQykKKworfSAvLyBOZXR3b3JrCisKKworCit9IC8vIG5hbWVzcGFjZSBQ
cm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sT2JqZWN0cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNw
cAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFj
LXBsYXRmb3JtLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorCisj
aW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgor
CituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworCisKK30g
Ly8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0
ci5oPgorCitAcHJvdG9jb2wgVGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkhhbmRsZXI7CisKK25h
bWVzcGFjZSBJbnNwZWN0b3IgeworCisKK2NsYXNzIE9iakNJbnNwZWN0b3JOZXR3b3JrQmFja2Vu
ZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJuYXRlTmV0d29ya0JhY2tlbmREaXNwYXRj
aGVyIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBPYmpDSW5z
cGVjdG9yTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbE5ldHdvcmtEb21h
aW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9CisjaWYgUExBVEZP
Uk0oTUFDKQorICAgIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKKyNl
bmRpZiAvLyBQTEFURk9STShNQUMpCitwcml2YXRlOgorICAgIFJldGFpblB0cjxpZDxUZXN0UHJv
dG9jb2xOZXR3b3JrRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0
Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJz
Lm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1t
YWMtcGxhdGZvcm0uanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
KyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNo
ZXJzLmgiCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2luY2x1ZGUgIlRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+
CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisjaWYgUExBVEZPUk0oTUFDKQordm9pZCBPYmpD
SW5zcGVjdG9yTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UobG9uZyByZXF1
ZXN0SWQpCit7CisgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVj
dG9yKGxvYWRSZXNvdXJjZVdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgewor
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJ
ZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmsubG9hZFJlc291
cmNlJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2Vu
ZFBlbmRpbmdFcnJvcnMoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlkIGVycm9y
Q2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNl
cnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5k
aW5nRXJyb3JzKCk7CisgICAgfTsKKworICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57CisgICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpTT046Ok9i
amVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKKyAgICB9OworCisgICAgW21fZGVsZWdhdGUgbG9hZFJl
c291cmNlV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3Vj
Y2Vzc0NhbGxiYWNrXTsKK30KKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCisKK30gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRj
aGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxh
dGZvcm0uanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBv
cnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KKworX19hdHRyaWJ1dGVfXygodmlzaWJp
bGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24g
OiBOU09iamVjdAorQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNldE5ldHdv
cmtIYW5kbGVyOikgaWQ8VGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkhhbmRsZXI+IG5ldHdvcmtI
YW5kbGVyOworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBUZXN0UHJvdG9jb2xOZXR3
b3JrRG9tYWluRXZlbnREaXNwYXRjaGVyICpuZXR3b3JrRXZlbnREaXNwYXRjaGVyOworQGVuZAor
CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbiBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbENv
bmZpZ3VyYXRpb24uaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbXBv
cnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRD
b3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW1wb3J0IDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKwordXNpbmcgbmFt
ZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3Vy
YXRpb24KK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVy
OworICAgIGlkPFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5IYW5kbGVyPiBfbmV0d29ya0hhbmRs
ZXI7CisgICAgVGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkV2ZW50RGlzcGF0Y2hlciAqX25ldHdv
cmtFdmVudERpc3BhdGNoZXI7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xs
ZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgoreworICAgIHNl
bGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOwor
ICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Cisg
ICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIFtfbmV0d29ya0hh
bmRsZXIgcmVsZWFzZV07CisgICAgW19uZXR3b3JrRXZlbnREaXNwYXRjaGVyIHJlbGVhc2VdOwor
ICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAodm9pZClzZXROZXR3b3JrSGFuZGxlcjooaWQ8
VGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkhhbmRsZXI+KWhhbmRsZXIKK3sKKyAgICBpZiAoaGFu
ZGxlciA9PSBfbmV0d29ya0hhbmRsZXIpCisgICAgICAgIHJldHVybjsKKworICAgIFtfbmV0d29y
a0hhbmRsZXIgcmVsZWFzZV07CisgICAgX25ldHdvcmtIYW5kbGVyID0gW2hhbmRsZXIgcmV0YWlu
XTsKKworICAgIGF1dG8gYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IG1ha2VVbmlxdWU8T2JqQ0luc3Bl
Y3Rvck5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7CisgICAgYXV0byBhbHRlcm5h
dGVBZ2VudCA9IG1ha2VVbmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8TmV0d29ya0Jh
Y2tlbmREaXNwYXRjaGVyLCBBbHRlcm5hdGVOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI+PigiTmV0
d29yayJfcywgKl9jb250cm9sbGVyLCBXVEZNb3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIpKTsKKyAg
ICBfY29udHJvbGxlci0+YXBwZW5kRXh0cmFBZ2VudChXVEZNb3ZlKGFsdGVybmF0ZUFnZW50KSk7
Cit9CisKKy0gKGlkPFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5IYW5kbGVyPiluZXR3b3JrSGFu
ZGxlcgoreworICAgIHJldHVybiBfbmV0d29ya0hhbmRsZXI7Cit9CisKKy0gKFRlc3RQcm90b2Nv
bE5ldHdvcmtEb21haW5FdmVudERpc3BhdGNoZXIgKiluZXR3b3JrRXZlbnREaXNwYXRjaGVyCit7
CisgICAgaWYgKCFfbmV0d29ya0V2ZW50RGlzcGF0Y2hlcikKKyAgICAgICAgX25ldHdvcmtFdmVu
dERpc3BhdGNoZXIgPSBbW1Rlc3RQcm90b2NvbE5ldHdvcmtEb21haW5FdmVudERpc3BhdGNoZXIg
YWxsb2NdIGluaXRXaXRoQ29udHJvbGxlcjpfY29udHJvbGxlcl07CisgICAgcmV0dXJuIF9uZXR3
b3JrRXZlbnREaXNwYXRjaGVyOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xDb25maWd1cmF0aW9uLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVu
dERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5p
dGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMu
aD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQ
cm90b2NvbE5ldHdvcmtEb21haW5FdmVudERpc3BhdGNoZXIKK3sKKyAgICBBdWdtZW50YWJsZUlu
c3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xs
ZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAg
cmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBj
b250cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXJlc291cmNlTG9hZGVk
Cit7CisgICAgY29uc3QgRnJvbnRlbmRSb3V0ZXImIHJvdXRlciA9IF9jb250cm9sbGVyLT5mcm9u
dGVuZFJvdXRlcigpOworCisgICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJf
cywgIk5ldHdvcmsucmVzb3VyY2VMb2FkZWQiX3MpOworICAgIHJvdXRlci5zZW5kRXZlbnQoanNv
bk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13
aXRoLW1hYy1wbGF0Zm9ybS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKKyNpbXBvcnQgPFdlYklu
c3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KKworCisjaWYgUExBVEZPUk0oTUFDKQor
QGNsYXNzIFRlc3RQcm90b2NvbE5ldHdvcmtFcnJvcjsKKyNlbmRpZiAvLyBQTEFURk9STShNQUMp
CisKKworCisjaWYgUExBVEZPUk0oTUFDKQorX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRl
ZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbE5ldHdvcmtFcnJvciA6IFJXSVByb3Rv
Y29sSlNPTk9iamVjdAorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9u
YXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQ7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQ
cm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKKy0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBjb2RlOihpbnQp
Y29kZTsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmlu
ZyAqbWVzc2FnZTsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24p
IGludCBjb2RlOworQGVuZAorI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKKworQHByb3RvY29sIFRl
c3RQcm90b2NvbE5ldHdvcmtEb21haW5IYW5kbGVyIDxOU09iamVjdD4KK0BvcHRpb25hbAorI2lm
IFBMQVRGT1JNKE1BQykKKy0gKHZvaWQpbG9hZFJlc291cmNlV2l0aEVycm9yQ2FsbGJhY2s6KHZv
aWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9p
ZCheKSh2b2lkKSlzdWNjZXNzQ2FsbGJhY2s7CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorQGVu
ZAorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2Ug
VGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkV2ZW50RGlzcGF0Y2hlciA6IE5TT2JqZWN0CistICh2
b2lkKXJlc291cmNlTG9hZGVkOworQGVuZAorCisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQ
cm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4KKworIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2wuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRm
b3JtLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0
ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRl
LmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xs
ZXIuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK0BpbnRlcmZhY2UgVGVzdFByb3Rv
Y29sTmV0d29ya0RvbWFpbkV2ZW50RGlzcGF0Y2hlciAoUHJpdmF0ZSkKKy0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aENvbnRyb2xsZXI6KEluc3BlY3Rvcjo6QXVnbWVudGFibGVJbnNwZWN0b3JDb250
cm9sbGVyKiljb250cm9sbGVyOworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
SW50ZXJuYWwuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
LmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1h
Yy1wbGF0Zm9ybS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9j
b2xBcnJheUNvbnZlcnNpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+CitPcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90
b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKKworCisKK30gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisK
KyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5q
c29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgor
I2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9y
L1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3Bl
Y3RvcjsKKworQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKE5ldHdvcmtE
b21haW4pCisKKyNpZiBQTEFURk9STShNQUMpCisrICh2b2lkKV9wYXJzZU5ldHdvcmtFcnJvcjoo
VGVzdFByb3RvY29sTmV0d29ya0Vycm9yICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXls
b2FkOworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24g
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChOZXR3b3JrRG9tYWluKQorCisjaWYgUExBVEZP
Uk0oTUFDKQorKyAodm9pZClfcGFyc2VOZXR3b3JrRXJyb3I6KFRlc3RQcm90b2NvbE5ldHdvcmtF
cnJvciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOworICAg
ICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sTmV0d29ya0Vycm9yIGFsbG9jXSBpbml0V2l0aFBh
eWxvYWQ6cGF5bG9hZF07Cit9CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorCitAZW5kCisKKwor
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbiBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgi
CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8V2Vi
SW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKyNpbXBvcnQgPHd0Zi9B
c3NlcnRpb25zLmg+CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yOworCisjaWYgUExBVEZPUk0oTUFDKQorQGltcGxlbWVudGF0aW9uIFRlc3RQ
cm90b2NvbE5ldHdvcmtFcnJvcgorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihu
b25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCit7CisgICAgaWYg
KCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBUSFJP
V19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJtZXNzYWdlIl0sIEAi
bWVzc2FnZSIpOworICAgIHNlbGYubWVzc2FnZSA9IHBheWxvYWRbQCJtZXNzYWdlIl07CisKKyAg
ICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJjb2RlIl0s
IEAiY29kZSIpOworICAgIHNlbGYuY29kZSA9IFtwYXlsb2FkW0AiY29kZSJdIGludGVnZXJWYWx1
ZV07CisKKyAgICByZXR1cm4gc2VsZjsKK30KKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3Rv
Y29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilvYmplY3QKK3sKKyAgICBpZiAoIShz
ZWxmID0gW3N1cGVyIGluaXRXaXRoSlNPTk9iamVjdDpbb2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0
KCldKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHJldHVybiBzZWxmOworfQorCistIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZTooaW50
KWNvZGUKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJu
IG5pbDsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkobWVzc2Fn
ZSwgQCJtZXNzYWdlIik7CisKKyAgICBzZWxmLm1lc3NhZ2UgPSBtZXNzYWdlOworICAgIHNlbGYu
Y29kZSA9IGNvZGU7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClzZXRNZXNzYWdl
OihOU1N0cmluZyAqKW1lc3NhZ2UKK3sKKyAgICBbc3VwZXIgc2V0U3RyaW5nOm1lc3NhZ2UgZm9y
S2V5OkAibWVzc2FnZSJdOworfQorCistIChOU1N0cmluZyAqKW1lc3NhZ2UKK3sKKyAgICByZXR1
cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAIm1lc3NhZ2UiXTsKK30KKworLSAodm9pZClzZXRDb2Rl
OihpbnQpY29kZQoreworICAgIFtzdXBlciBzZXRJbnRlZ2VyOmNvZGUgZm9yS2V5OkAiY29kZSJd
OworfQorCistIChpbnQpY29kZQoreworICAgIHJldHVybiBbc3VwZXIgaW50ZWdlckZvcktleTpA
ImNvZGUiXTsKK30KKworQGVuZAorI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKKworCisjIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWluLWRlYnVnZ2FibGVU
eXBlcy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9leHBlY3RlZC9kb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24tcmVzdWx0Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41NzYwMzdiNDBmMAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC9kb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24tcmVzdWx0CkBAIC0wLDAgKzEsMTAx
MSBAQAorIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcy5pbgorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNv
biBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKy8vIERvbWFpbgorSW5z
cGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiRG9tYWluIiwgbnVsbCk7CitJbnNwZWN0b3JC
YWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiRG9tYWluLkNvbW1hbmQiLCBudWxsLCBbXSwgW10pOwor
SW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckV2ZW50KCJEb21haW4uRXZlbnQiLCBudWxsLCBbXSk7
CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluRGlzcGF0Y2hlciA9IEluc3BlY3RvckJh
Y2tlbmQucmVnaXN0ZXJEaXNwYXRjaGVyLmJpbmQoSW5zcGVjdG9yQmFja2VuZCwgIkRvbWFpbiIp
OworSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiRG9tYWluIiwgWyJ3ZWItcGFnZSJd
KTsKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzLmluCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2lmIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCisjaW5jbHVkZSAiVGVzdFBy
b3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5k
Um91dGVyLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihS
ZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRj
aGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQorICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNr
ZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7
IH0KK3ByaXZhdGU6CisgICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNw
YXRjaGVyOworfTsKKworCitjbGFzcyBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciA6
IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdmlydHVh
bCB+QWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIoKSB7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgQ29tbWFuZChsb25nIGNhbGxJZCkgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
KyMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1l
c3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKKyNpZiBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK2NsYXNzIEFsdGVybmF0ZURv
bWFpbkJhY2tlbmREaXNwYXRjaGVyOworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQorCitjbGFzcyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIg
eworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBDb21tYW5kKEVycm9yU3RyaW5nJikgPSAwOwor
cHJvdGVjdGVkOgorICAgIHZpcnR1YWwgfkRvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigp
OworfTsKKworY2xhc3MgRG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3Vw
cGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8RG9t
YWluQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIERvbWFpbkJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0
SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZp
bmFsOworcHJpdmF0ZToKKyAgICB2b2lkIENvbW1hbmQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxK
U09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCitwdWJsaWM6CisgICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVy
KEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7
IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KK3ByaXZhdGU6
CisgICAgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIqIG1fYWx0ZXJuYXRlRGlzcGF0
Y2hlciB7IG51bGxwdHIgfTsKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKK3ByaXZhdGU6CisgICAgRG9tYWluQmFja2VuZERpc3BhdGNoZXIoQmFja2Vu
ZERpc3BhdGNoZXImLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICBEb21h
aW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQgeyBudWxscHRyIH07Cit9OworCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNv
biBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0Zi9K
U09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCisjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgor
I2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCituYW1l
c3BhY2UgSW5zcGVjdG9yIHsKKworRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+RG9t
YWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9CisKK1JlZjxEb21haW5CYWNrZW5kRGlz
cGF0Y2hlcj4gRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hl
ciYgYmFja2VuZERpc3BhdGNoZXIsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdl
bnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRG9tYWluQmFja2VuZERpc3BhdGNoZXIo
YmFja2VuZERpc3BhdGNoZXIsIGFnZW50KSk7Cit9CisKK0RvbWFpbkJhY2tlbmREaXNwYXRjaGVy
OjpEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3Bh
dGNoZXIsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCisgICAgOiBTdXBw
bGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKKyAgICAsIG1fYWdl
bnQoYWdlbnQpCit7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVy
Rm9yRG9tYWluKCJEb21haW4iX3MsIHRoaXMpOworfQorCit2b2lkIERvbWFpbkJhY2tlbmREaXNw
YXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJl
ZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKK3sKKyAgICBSZWY8RG9tYWluQmFja2VuZERpc3Bh
dGNoZXI+IHByb3RlY3QoKnRoaXMpOworCisgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1l
dGVyczsKKyAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFyYW1ldGVycyk7CisK
KyAgICBpZiAobWV0aG9kID09ICJDb21tYW5kIikgeworICAgICAgICBDb21tYW5kKHJlcXVlc3RJ
ZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVy
OjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uIiArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQi
KTsKK30KKwordm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVl
c3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKK3sKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKKyAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Cisg
ICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+Q29tbWFuZChyZXF1ZXN0SWQpOworICAgICAg
ICByZXR1cm47CisgICAgfQorI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQorCisgICAgRXJyb3JTdHJpbmcgZXJyb3I7CisgICAgUmVmPEpTT046Ok9iamVj
dD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBtX2FnZW50LT5Db21tYW5k
KGVycm9yKTsKKworICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCisgICAgICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2Up
OworICAgIGVsc2UKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xF
cnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmRE
aXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJz
LmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJsZVR5
cGVzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDx3dGYv
SlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKKworY2xhc3MgRnJvbnRlbmRSb3V0ZXI7CisKK2NsYXNzIERvbWFpbkZy
b250ZW5kRGlzcGF0Y2hlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6
CisgICAgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVyKEZyb250ZW5kUm91dGVyJiBmcm9udGVuZFJv
dXRlcikgOiBtX2Zyb250ZW5kUm91dGVyKGZyb250ZW5kUm91dGVyKSB7IH0KKyAgICB2b2lkIEV2
ZW50KCk7Citwcml2YXRlOgorICAgIEZyb250ZW5kUm91dGVyJiBtX2Zyb250ZW5kUm91dGVyOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVu
ZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJz
LmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxl
VHlwZXMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit2b2lk
IERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcjo6RXZlbnQoKQoreworICAgIFJlZjxKU09OOjpPYmpl
Y3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBqc29uTWVzc2Fn
ZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOworCisgICAgbV9mcm9u
dGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlz
cGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJsZVR5cGVzLmpz
b24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KKyNp
bmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisK
K25hbWVzcGFjZSBQcm90b2NvbCB7CisKKworCisKKworCisKKworCit9IC8vIG5hbWVzcGFjZSBQ
cm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sT2JqZWN0cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNw
cAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlw
ZXMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisKKyNpbmNsdWRl
IDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVz
cGFjZSBJbnNwZWN0b3IgeworCituYW1lc3BhY2UgUHJvdG9jb2wgeworCisKKworfSAvLyBuYW1l
c3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
ZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVycy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworQHByb3Rv
Y29sIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI7CisKK25hbWVzcGFjZSBJbnNwZWN0
b3IgeworCisKK2NsYXNzIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5h
bCA6IHB1YmxpYyBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciB7CisgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tl
bmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IGhhbmRsZXIp
IHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KKyAgICB2b2lkIENvbW1hbmQobG9uZyByZXF1ZXN0
SWQpIGZpbmFsOworcHJpdmF0ZToKKyAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sRG9tYWlu
RG9tYWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisj
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgi
CisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUg
IlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKworbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CisKK3ZvaWQgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21t
YW5kKGxvbmcgcmVxdWVzdElkKQoreworICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1Nl
bGVjdG9yOkBzZWxlY3RvcihDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNr
OildKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3Io
cmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRG9tYWluLkNv
bW1hbmQnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5z
ZW5kUGVuZGluZ0Vycm9ycygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWQgZXJy
b3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6
U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBl
bmRpbmdFcnJvcnMoKTsKKyAgICB9OworCisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKKyAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2UpOworICAgIH07CisKKyAgICBbbV9kZWxlZ2F0ZSBDb21t
YW5kV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vz
c0NhbGxiYWNrXTsKK30KKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBkb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+CisK
K19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0
UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBy
ZXRhaW4sIHNldHRlcj1zZXREb21haW5IYW5kbGVyOikgaWQ8VGVzdFByb3RvY29sRG9tYWluRG9t
YWluSGFuZGxlcj4gZG9tYWluSGFuZGxlcjsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25s
eSkgVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyICpkb21haW5FdmVudERp
c3BhdGNoZXI7CitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0
aW9uLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJsZVR5cGVzLmpz
b24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0
UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFs
LmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+CisjaW1wb3J0IDxK
YXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgor
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+CisK
K3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9j
b2xDb25maWd1cmF0aW9uCit7CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBf
Y29udHJvbGxlcjsKKyAgICBpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiBfZG9t
YWluSGFuZGxlcjsKKyAgICBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIg
Kl9kb21haW5FdmVudERpc3BhdGNoZXI7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENv
bnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgorewor
ICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4g
bmlsOworICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xs
ZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIFtfZG9t
YWluSGFuZGxlciByZWxlYXNlXTsKKyAgICBbX2RvbWFpbkV2ZW50RGlzcGF0Y2hlciByZWxlYXNl
XTsKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0gKHZvaWQpc2V0RG9tYWluSGFuZGxlcjoo
aWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4paGFuZGxlcgoreworICAgIGlmICho
YW5kbGVyID09IF9kb21haW5IYW5kbGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBbX2RvbWFp
bkhhbmRsZXIgcmVsZWFzZV07CisgICAgX2RvbWFpbkhhbmRsZXIgPSBbaGFuZGxlciByZXRhaW5d
OworCisgICAgYXV0byBhbHRlcm5hdGVEaXNwYXRjaGVyID0gbWFrZVVuaXF1ZTxPYmpDSW5zcGVj
dG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXI+KGhhbmRsZXIpOworICAgIGF1dG8gYWx0ZXJuYXRl
QWdlbnQgPSBtYWtlVW5pcXVlPEFsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50PERvbWFpbkJhY2tl
bmREaXNwYXRjaGVyLCBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4+KCJEb21haW4i
X3MsICpfY29udHJvbGxlciwgV1RGTW92ZShhbHRlcm5hdGVEaXNwYXRjaGVyKSk7CisgICAgX2Nv
bnRyb2xsZXItPmFwcGVuZEV4dHJhQWdlbnQoV1RGTW92ZShhbHRlcm5hdGVBZ2VudCkpOworfQor
CistIChpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPilkb21haW5IYW5kbGVyCit7
CisgICAgcmV0dXJuIF9kb21haW5IYW5kbGVyOworfQorCistIChUZXN0UHJvdG9jb2xEb21haW5E
b21haW5FdmVudERpc3BhdGNoZXIgKilkb21haW5FdmVudERpc3BhdGNoZXIKK3sKKyAgICBpZiAo
IV9kb21haW5FdmVudERpc3BhdGNoZXIpCisgICAgICAgIF9kb21haW5FdmVudERpc3BhdGNoZXIg
PSBbW1Rlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciBhbGxvY10gaW5pdFdp
dGhDb250cm9sbGVyOl9jb250cm9sbGVyXTsKKyAgICByZXR1cm4gX2RvbWFpbkV2ZW50RGlzcGF0
Y2hlcjsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJh
dGlvbi5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5t
bQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlw
ZXMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5oIgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNl
IEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2
ZW50RGlzcGF0Y2hlcgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2Nv
bnRyb2xsZXI7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21l
bnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgoreworICAgIHNlbGYgPSBbc3Vw
ZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIEFTU0VS
VChjb250cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAgcmV0dXJu
IHNlbGY7Cit9CisKKy0gKHZvaWQpRXZlbnQKK3sKKyAgICBjb25zdCBGcm9udGVuZFJvdXRlciYg
cm91dGVyID0gX2NvbnRyb2xsZXItPmZyb250ZW5kUm91dGVyKCk7CisKKyAgICBSZWY8SlNPTjo6
T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAganNvbk1l
c3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9zKTsKKyAgICByb3V0
ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cit9CisKK0BlbmQKKwor
CisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKKyNpbXBv
cnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KKworCisKKworCisKKwor
CitAcHJvdG9jb2wgVGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlciA8TlNPYmplY3Q+CitA
b3B0aW9uYWwKKy0gKHZvaWQpQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3Ry
aW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikodm9pZCkp
c3VjY2Vzc0NhbGxiYWNrOworQGVuZAorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVm
YXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRj
aGVyIDogTlNPYmplY3QKKy0gKHZvaWQpRXZlbnQ7CitAZW5kCisKKworI2ltcG9ydCA8V2ViSW5z
cGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgorCisjIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRl
cm5hbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLWRlYnVnZ2Fi
bGVUeXBlcy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lt
cG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJp
dmF0ZS5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250
cm9sbGVyLmg+CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCitAaW50ZXJmYWNlIFRlc3RQ
cm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAoUHJpdmF0ZSkKKy0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEluc3BlY3Rvcjo6QXVnbWVudGFibGVJbnNwZWN0b3JD
b250cm9sbGVyKiljb250cm9sbGVyOworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJs
ZVR5cGVzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1w
b3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFy
cmF5Q29udmVyc2lvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3RlbXBsYXRlPHR5
cGVuYW1lIE9iakNFbnVtVHlwZT4KK09wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29s
U3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
KworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorCisjIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFBy
b3RvY29sVHlwZVBhcnNlci5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNP
Tk9iamVjdFByaXZhdGUuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisKKwor
CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisK
KyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8V2ViSW5z
cGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKyNpbXBvcnQgPHd0Zi9Bc3Nl
cnRpb25zLmg+CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2Ug
SW5zcGVjdG9yOworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC9kb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNv
bi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBl
Lmpzb24tcmVzdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xNjFl
NmJjMmY4YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21h
aW4tZGVidWdnYWJsZVR5cGUuanNvbi1yZXN1bHQKQEAgLTAsMCArMSwxMDExIEBACisjIyMgQmVn
aW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzLmluCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVn
Z2FibGVUeXBlLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisv
LyBEb21haW4KK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIkRvbWFpbiIsIG51bGwp
OworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIkRvbWFpbi5Db21tYW5kIiwgWyJw
YWdlIiwgIndvcmtlciJdLCBbXSwgW10pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckV2ZW50
KCJEb21haW4uRXZlbnQiLCBudWxsLCBbXSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9t
YWluRGlzcGF0Y2hlciA9IEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEaXNwYXRjaGVyLmJpbmQo
SW5zcGVjdG9yQmFja2VuZCwgIkRvbWFpbiIpOworSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURv
bWFpbigiRG9tYWluIiwgWyJwYWdlIl0pOworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5k
Q29tbWFuZHMuanMuaW4KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlz
cGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJn
ZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5
cGVzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5o
PgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXIgeworcHVibGljOgorICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJh
Y2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdU
Rk1vdmUoZGlzcGF0Y2hlcik7IH0KKyAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3Bh
dGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Citwcml2
YXRlOgorICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsK
K307CisKKworY2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMg
QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgfkFsdGVy
bmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIENvbW1h
bmQobG9uZyBjYWxsSWQpID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisj
ZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjIyMgRW5k
IEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmls
ZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpz
b24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJy
b3JTdHJpbmc7CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
K2NsYXNzIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyOworI2VuZGlmIC8vIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCitjbGFzcyBEb21haW5CYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBDb21tYW5kKEVy
cm9yU3RyaW5nJikgPSAwOworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgfkRvbWFpbkJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlcigpOworfTsKKworY2xhc3MgRG9tYWluQmFja2VuZERpc3BhdGNoZXIg
ZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgor
ICAgIHN0YXRpYyBSZWY8RG9tYWluQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlz
cGF0Y2hlciYsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIHZvaWQgZGlz
cGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2Jq
ZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOworcHJpdmF0ZToKKyAgICB2b2lkIENvbW1hbmQobG9uZyBy
ZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisjaWYgRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCitwdWJsaWM6CisgICAgdm9pZCBzZXRB
bHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKiBhbHRl
cm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3Bh
dGNoZXI7IH0KK3ByaXZhdGU6CisgICAgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIq
IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciB7IG51bGxwdHIgfTsKKyNlbmRpZiAvLyBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK3ByaXZhdGU6CisgICAgRG9tYWluQmFja2Vu
ZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXIqKTsKKyAgICBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQgeyBu
dWxscHRyIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTog
VGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERp
c3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10
YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4K
KyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyNp
bmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCisjZW5kaWYgLy8gRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKK25hbWVzcGFjZSBJbnNwZWN0
b3IgeworCitEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5Eb21haW5CYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXIoKSB7IH0KKworUmVmPERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBEb21h
aW5CYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlz
cGF0Y2hlciwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKK3sKKyAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0
Y2hlciwgYWdlbnQpKTsKK30KKworRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkRvbWFpbkJhY2tl
bmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgRG9tYWlu
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKKyAgICA6IFN1cHBsZW1lbnRhbEJhY2tl
bmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQorICAgICwgbV9hZ2VudChhZ2VudCkKK3sK
KyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oIkRv
bWFpbiJfcywgdGhpcyk7Cit9CisKK3ZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmRpc3Bh
dGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVj
dD4mJiBtZXNzYWdlKQoreworICAgIFJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVj
dCgqdGhpcyk7CisKKyAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOworICAgIG1l
c3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsKKworICAgIGlmIChtZXRo
b2QgPT0gIkNvbW1hbmQiKSB7CisgICAgICAgIENvbW1hbmQocmVxdWVzdElkLCBXVEZNb3ZlKHBh
cmFtZXRlcnMpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fYmFja2VuZERpc3Bh
dGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZv
dW5kLCAiJ0RvbWFpbi4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOworfQorCit2b2lk
IERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8
SlNPTjo6T2JqZWN0PiYmKQoreworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQorICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKKyAgICAgICAgbV9hbHRl
cm5hdGVEaXNwYXRjaGVyLT5Db21tYW5kKHJlcXVlc3RJZCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisK
KyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBK
U09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYWdlbnQtPkNvbW1hbmQoZXJyb3IpOworCisg
ICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2Vu
ZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7CisgICAgZWxzZQor
ICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmRE
aXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOworfQorCit9IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNw
cAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFp
bi1kZWJ1Z2dhYmxlVHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisj
aW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEZyb250ZW5kUm91dGVyOworCitj
bGFzcyBEb21haW5Gcm9udGVuZERpc3BhdGNoZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOworcHVibGljOgorICAgIERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcihGcm9udGVuZFJvdXRl
ciYgZnJvbnRlbmRSb3V0ZXIpIDogbV9mcm9udGVuZFJvdXRlcihmcm9udGVuZFJvdXRlcikgeyB9
CisgICAgdm9pZCBFdmVudCgpOworcHJpdmF0ZToKKyAgICBGcm9udGVuZFJvdXRlciYgbV9mcm9u
dGVuZFJvdXRlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxl
OiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21h
aW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbiBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit2b2lkIERvbWFpbkZyb250ZW5kRGlz
cGF0Y2hlcjo6RXZlbnQoKQoreworICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0g
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRo
b2QiX3MsICJEb21haW4uRXZlbnQiX3MpOworCisgICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZl
bnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJs
ZVR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBl
cy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Ig
eworCisKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworCisKKworCisKKworCisKK30gLy8gbmFt
ZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9i
amVjdHMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdl
dFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
VGVzdFByb3RvY29sT2JqZWN0cy5oIgorCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFt
ZXNwYWNlIFByb3RvY29sIHsKKworCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMu
Y3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlLW1hdGNo
aW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworQHBy
b3RvY29sIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI7CisKK25hbWVzcGFjZSBJbnNw
ZWN0b3IgeworCisKK2NsYXNzIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlciBm
aW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciB7CisgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgT2JqQ0luc3BlY3RvckRvbWFpbkJh
Y2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IGhhbmRs
ZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KKyAgICB2b2lkIENvbW1hbmQobG9uZyByZXF1
ZXN0SWQpIGZpbmFsOworcHJpdmF0ZToKKyAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sRG9t
YWluRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAor
CisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmct
ZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tl
bmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNp
bmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbmNsdWRlIDx3dGYvSlNP
TlZhbHVlcy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordm9pZCBPYmpDSW5zcGVjdG9y
RG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9uZyByZXF1ZXN0SWQpCit7CisgICAg
aWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKENvbW1hbmRXaXRo
RXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsKKyAgICAgICAgYmFja2VuZERpc3Bh
dGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVy
OjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uQ29tbWFuZCcgd2FzIG5vdCBmb3VuZCJfcyk7Cisg
ICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJy
b3IpIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihy
ZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAg
ICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgIH07CisKKyAg
ICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5z
ZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7Cisg
ICAgfTsKKworICAgIFttX2RlbGVnYXRlIENvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazplcnJvckNh
bGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOworfQorCit9IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0
Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlLW1hdGNo
aW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgorCitf
X2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0
YWluLCBzZXR0ZXI9c2V0RG9tYWluSGFuZGxlcjopIGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFp
bkhhbmRsZXI+IGRvbWFpbkhhbmRsZXI7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkp
IFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqZG9tYWluRXZlbnREaXNw
YXRjaGVyOworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
bi5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmct
ZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCisKKyNpbXBv
cnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5k
RGlzcGF0Y2hlcnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNo
YWJsZUFnZW50Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3Rv
ckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXJzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0Bp
bXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCit7CisgICAgQXVnbWVudGFi
bGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKKyAgICBpZDxUZXN0UHJvdG9jb2xE
b21haW5Eb21haW5IYW5kbGVyPiBfZG9tYWluSGFuZGxlcjsKKyAgICBUZXN0UHJvdG9jb2xEb21h
aW5Eb21haW5FdmVudERpc3BhdGNoZXIgKl9kb21haW5FdmVudERpc3BhdGNoZXI7Cit9CisKKy0g
KGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29u
dHJvbGxlciopY29udHJvbGxlcgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYg
KCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAg
ICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZv
aWQpZGVhbGxvYworeworICAgIFtfZG9tYWluSGFuZGxlciByZWxlYXNlXTsKKyAgICBbX2RvbWFp
bkV2ZW50RGlzcGF0Y2hlciByZWxlYXNlXTsKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0g
KHZvaWQpc2V0RG9tYWluSGFuZGxlcjooaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxl
cj4paGFuZGxlcgoreworICAgIGlmIChoYW5kbGVyID09IF9kb21haW5IYW5kbGVyKQorICAgICAg
ICByZXR1cm47CisKKyAgICBbX2RvbWFpbkhhbmRsZXIgcmVsZWFzZV07CisgICAgX2RvbWFpbkhh
bmRsZXIgPSBbaGFuZGxlciByZXRhaW5dOworCisgICAgYXV0byBhbHRlcm5hdGVEaXNwYXRjaGVy
ID0gbWFrZVVuaXF1ZTxPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXI+KGhhbmRs
ZXIpOworICAgIGF1dG8gYWx0ZXJuYXRlQWdlbnQgPSBtYWtlVW5pcXVlPEFsdGVybmF0ZURpc3Bh
dGNoYWJsZUFnZW50PERvbWFpbkJhY2tlbmREaXNwYXRjaGVyLCBBbHRlcm5hdGVEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlcj4+KCJEb21haW4iX3MsICpfY29udHJvbGxlciwgV1RGTW92ZShhbHRlcm5h
dGVEaXNwYXRjaGVyKSk7CisgICAgX2NvbnRyb2xsZXItPmFwcGVuZEV4dHJhQWdlbnQoV1RGTW92
ZShhbHRlcm5hdGVBZ2VudCkpOworfQorCistIChpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5I
YW5kbGVyPilkb21haW5IYW5kbGVyCit7CisgICAgcmV0dXJuIF9kb21haW5IYW5kbGVyOworfQor
CistIChUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKilkb21haW5FdmVu
dERpc3BhdGNoZXIKK3sKKyAgICBpZiAoIV9kb21haW5FdmVudERpc3BhdGNoZXIpCisgICAgICAg
IF9kb21haW5FdmVudERpc3BhdGNoZXIgPSBbW1Rlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50
RGlzcGF0Y2hlciBhbGxvY10gaW5pdFdpdGhDb250cm9sbGVyOl9jb250cm9sbGVyXTsKKyAgICBy
ZXR1cm4gX2RvbWFpbkV2ZW50RGlzcGF0Y2hlcjsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29u
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFBy
b3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
LmgiCisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVj
dG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNw
YXRjaGVyCit7CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxl
cjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJ
bnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0
XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNvbnRy
b2xsZXIpOworICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKKyAgICByZXR1cm4gc2VsZjsK
K30KKworLSAodm9pZClFdmVudAoreworICAgIGNvbnN0IEZyb250ZW5kUm91dGVyJiByb3V0ZXIg
PSBfY29udHJvbGxlci0+ZnJvbnRlbmRSb3V0ZXIoKTsKKworICAgIFJlZjxKU09OOjpPYmplY3Q+
IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBqc29uTWVzc2FnZS0+
c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOworICAgIHJvdXRlci5zZW5k
RXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKK30KKworQGVuZAorCisKKyMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21h
aW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbiBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91
bmRhdGlvbi5oPgorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0
Lmg+CisKKworCisKKworCisKKworQHByb3RvY29sIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhh
bmRsZXIgPE5TT2JqZWN0PgorQG9wdGlvbmFsCistICh2b2lkKUNvbW1hbmRXaXRoRXJyb3JDYWxs
YmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxi
YWNrOih2b2lkKF4pKHZvaWQpKXN1Y2Nlc3NDYWxsYmFjazsKK0BlbmQKKworX19hdHRyaWJ1dGVf
XygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbERvbWFp
bkRvbWFpbkV2ZW50RGlzcGF0Y2hlciA6IE5TT2JqZWN0CistICh2b2lkKUV2ZW50OworQGVuZAor
CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9i
amVjdHMuaD4KKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAorCisjIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29u
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFBy
b3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgorI2lt
cG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Cisj
aW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbERvbWFp
bkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAoUHJpdmF0ZSkKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0
aENvbnRyb2xsZXI6KEluc3BlY3Rvcjo6QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKilj
b250cm9sbGVyOworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwu
aAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1k
b21haW4tZGVidWdnYWJsZVR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9y
L1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsK
KwordGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgorT3B0aW9uYWw8T2JqQ0VudW1UeXBl
PiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7CisKK30gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZS1tYXRjaGlu
Zy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorCisj
aW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIu
aCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+
CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworCisKKworCisjIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sVHlwZXMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4t
dGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbiBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVy
bmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9y
dCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKyNpbXBvcnQg
PHd0Zi9Bc3NlcnRpb25zLmg+CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBu
YW1lc3BhY2UgSW5zcGVjdG9yOworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMu
bW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC9kb21haW4tdGFyZ2V0VHlwZXMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWluLXRhcmdl
dFR5cGVzLmpzb24tcmVzdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
Li4wZGNjY2FlNjg2OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW4tdGFyZ2V0VHlwZXMuanNvbi1y
ZXN1bHQKQEAgLTAsMCArMSwxMDExIEBACisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2Vu
ZENvbW1hbmRzLmpzLmluCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlu
LXRhcmdldFR5cGVzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisvLyBEb21haW4KK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIkRvbWFpbiIsIFsi
cGFnZSJdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJEb21haW4uQ29tbWFu
ZCIsIFsicGFnZSJdLCBbXSwgW10pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckV2ZW50KCJE
b21haW4uRXZlbnQiLCBbInBhZ2UiXSwgW10pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRv
bWFpbkRpc3BhdGNoZXIgPSBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRGlzcGF0Y2hlci5iaW5k
KEluc3BlY3RvckJhY2tlbmQsICJEb21haW4iKTsKK0luc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVE
b21haW4oIkRvbWFpbiIsIG51bGwpOworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29t
bWFuZHMuanMuaW4KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0
Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRU
eXBlcy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdt
YSBvbmNlCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKwor
I2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xh
c3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHZvaWQgc2V0QmFj
a2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsg
bV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KKyAgICBCYWNrZW5k
RGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmRE
aXNwYXRjaGVyLmdldCgpOyB9Citwcml2YXRlOgorICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hl
cj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKK307CisKKworY2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFj
a2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVi
bGljOgorICAgIHZpcnR1YWwgfkFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKCkgeyB9
CisgICAgdmlydHVhbCB2b2lkIENvbW1hbmQobG9uZyBjYWxsSWQpID0gMDsKK307CisKK30gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCisjIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0
Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVzLmpzb24gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJp
bmc7CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK2NsYXNz
IEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyOworI2VuZGlmIC8vIEVOQUJMRShJTlNQ
RUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCitjbGFzcyBEb21haW5CYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBDb21tYW5kKEVycm9yU3Ry
aW5nJikgPSAwOworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgfkRvbWFpbkJhY2tlbmREaXNwYXRj
aGVySGFuZGxlcigpOworfTsKKworY2xhc3MgRG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwg
OiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHN0
YXRpYyBSZWY8RG9tYWluQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hl
ciYsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIHZvaWQgZGlzcGF0Y2go
bG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYm
IG1lc3NhZ2UpIGZpbmFsOworcHJpdmF0ZToKKyAgICB2b2lkIENvbW1hbmQobG9uZyByZXF1ZXN0
SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisjaWYgRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCitwdWJsaWM6CisgICAgdm9pZCBzZXRBbHRlcm5h
dGVEaXNwYXRjaGVyKEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVE
aXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7
IH0KK3ByaXZhdGU6CisgICAgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIqIG1fYWx0
ZXJuYXRlRGlzcGF0Y2hlciB7IG51bGxwdHIgfTsKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK3ByaXZhdGU6CisgICAgRG9tYWluQmFja2VuZERpc3Bh
dGNoZXIoQmFja2VuZERpc3BhdGNoZXImLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIq
KTsKKyAgICBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQgeyBudWxscHRy
IH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEJh
Y2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNo
ZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRU
eXBlcy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVk
ZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVS
TkFURV9ESVNQQVRDSEVSUykKKyNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXJzLmgiCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXI6On5Eb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KKworUmVmPERvbWFpbkJh
Y2tlbmREaXNwYXRjaGVyPiBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEJhY2tlbmRE
aXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyKiBhZ2VudCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEb21haW5CYWNrZW5kRGlz
cGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKK30KKworRG9tYWluQmFja2VuZERp
c3BhdGNoZXI6OkRvbWFpbkJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNr
ZW5kRGlzcGF0Y2hlciwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKKyAg
ICA6IFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQorICAg
ICwgbV9hZ2VudChhZ2VudCkKK3sKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRp
c3BhdGNoZXJGb3JEb21haW4oIkRvbWFpbiJfcywgdGhpcyk7Cit9CisKK3ZvaWQgRG9tYWluQmFj
a2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1l
dGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQoreworICAgIFJlZjxEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CisKKyAgICBSZWZQdHI8SlNPTjo6T2JqZWN0
PiBwYXJhbWV0ZXJzOworICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0
ZXJzKTsKKworICAgIGlmIChtZXRob2QgPT0gIkNvbW1hbmQiKSB7CisgICAgICAgIENvbW1hbmQo
cmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERp
c3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi4iICsgbWV0aG9kICsgIicgd2FzIG5v
dCBmb3VuZCIpOworfQorCit2b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxv
bmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQoreworI2lmIEVOQUJMRShJTlNQ
RUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNo
ZXIpIHsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5Db21tYW5kKHJlcXVlc3RJZCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCisKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWY8SlNP
Tjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYWdlbnQt
PkNvbW1hbmQoZXJyb3IpOworCisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKKyAgICAgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQp
LCBmYWxzZSk7CisgICAgZWxzZQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQ
cm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJv
cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0
QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlz
cGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJn
ZXRUeXBlcy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8
d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEZyb250ZW5kUm91dGVyOworCitjbGFzcyBEb21h
aW5Gcm9udGVuZERpc3BhdGNoZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVi
bGljOgorICAgIERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcihGcm9udGVuZFJvdXRlciYgZnJvbnRl
bmRSb3V0ZXIpIDogbV9mcm9udGVuZFJvdXRlcihmcm9udGVuZFJvdXRlcikgeyB9CisgICAgdm9p
ZCBFdmVudCgpOworcHJpdmF0ZToKKyAgICBGcm9udGVuZFJvdXRlciYgbV9mcm9udGVuZFJvdXRl
cjsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0RnJv
bnRlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRj
aGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0
VHlwZXMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit2b2lk
IERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcjo6RXZlbnQoKQoreworICAgIFJlZjxKU09OOjpPYmpl
Y3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBqc29uTWVzc2Fn
ZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOworCisgICAgbV9mcm9u
dGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlz
cGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZXMuanNvbiBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgorI2luY2x1
ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFt
ZXNwYWNlIFByb3RvY29sIHsKKworCisKKworCisKKworCisKK30gLy8gbmFtZXNwYWNlIFByb3Rv
Y29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xPYmplY3RzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVzLmpzb24g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorCisjaW5jbHVkZSA8d3RmL09w
dGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5z
cGVjdG9yIHsKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworCisKK30gLy8gbmFtZXNwYWNlIFBy
b3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbE9iamVjdHMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5k
RGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10
YXJnZXRUeXBlcy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVycy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworQHByb3RvY29sIFRlc3RQcm90
b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI7CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKK2Ns
YXNzIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBB
bHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CitwdWJsaWM6CisgICAgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVy
KGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0
ZSA9IGhhbmRsZXI7IH0KKyAgICB2b2lkIENvbW1hbmQobG9uZyByZXF1ZXN0SWQpIGZpbmFsOwor
cHJpdmF0ZToKKyAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxl
cj4+IG1fZGVsZWdhdGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVzLmpzb24gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQ
cm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sSW50
ZXJuYWwuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbmNs
dWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordm9pZCBP
YmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9uZyByZXF1ZXN0
SWQpCit7CisgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9y
KENvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsKKyAgICAgICAg
YmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tl
bmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uQ29tbWFuZCcgd2FzIG5vdCBm
b3VuZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3Jz
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZCBlcnJvckNhbGxiYWNrID0gXihO
U1N0cmluZyAqZXJyb3IpIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJv
dG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJy
b3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwor
ICAgIH07CisKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeeworICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
LCBmYWxzZSk7CisgICAgfTsKKworICAgIFttX2RlbGVnYXRlIENvbW1hbmRXaXRoRXJyb3JDYWxs
YmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOworfQor
Cit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xC
YWNrZW5kRGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZp
Z3VyYXRpb24uaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJn
ZXRUeXBlcy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lt
cG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgorCitfX2F0dHJpYnV0ZV9fKCh2aXNp
YmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
biA6IE5TT2JqZWN0CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluLCBzZXR0ZXI9c2V0RG9t
YWluSGFuZGxlcjopIGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IGRvbWFpbkhh
bmRsZXI7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFRlc3RQcm90b2NvbERvbWFp
bkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqZG9tYWluRXZlbnREaXNwYXRjaGVyOworQGVuZAorCisK
KyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgi
CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9j
b2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0
ZURpc3BhdGNoYWJsZUFnZW50Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJs
ZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0
b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCit7CisgICAg
QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKKyAgICBpZDxUZXN0
UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiBfZG9tYWluSGFuZGxlcjsKKyAgICBUZXN0UHJv
dG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKl9kb21haW5FdmVudERpc3BhdGNoZXI7
Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5z
cGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07
CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIEFTU0VSVChjb250cm9s
bGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9
CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIFtfZG9tYWluSGFuZGxlciByZWxlYXNlXTsKKyAg
ICBbX2RvbWFpbkV2ZW50RGlzcGF0Y2hlciByZWxlYXNlXTsKKyAgICBbc3VwZXIgZGVhbGxvY107
Cit9CisKKy0gKHZvaWQpc2V0RG9tYWluSGFuZGxlcjooaWQ8VGVzdFByb3RvY29sRG9tYWluRG9t
YWluSGFuZGxlcj4paGFuZGxlcgoreworICAgIGlmIChoYW5kbGVyID09IF9kb21haW5IYW5kbGVy
KQorICAgICAgICByZXR1cm47CisKKyAgICBbX2RvbWFpbkhhbmRsZXIgcmVsZWFzZV07CisgICAg
X2RvbWFpbkhhbmRsZXIgPSBbaGFuZGxlciByZXRhaW5dOworCisgICAgYXV0byBhbHRlcm5hdGVE
aXNwYXRjaGVyID0gbWFrZVVuaXF1ZTxPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNo
ZXI+KGhhbmRsZXIpOworICAgIGF1dG8gYWx0ZXJuYXRlQWdlbnQgPSBtYWtlVW5pcXVlPEFsdGVy
bmF0ZURpc3BhdGNoYWJsZUFnZW50PERvbWFpbkJhY2tlbmREaXNwYXRjaGVyLCBBbHRlcm5hdGVE
b21haW5CYWNrZW5kRGlzcGF0Y2hlcj4+KCJEb21haW4iX3MsICpfY29udHJvbGxlciwgV1RGTW92
ZShhbHRlcm5hdGVEaXNwYXRjaGVyKSk7CisgICAgX2NvbnRyb2xsZXItPmFwcGVuZEV4dHJhQWdl
bnQoV1RGTW92ZShhbHRlcm5hdGVBZ2VudCkpOworfQorCistIChpZDxUZXN0UHJvdG9jb2xEb21h
aW5Eb21haW5IYW5kbGVyPilkb21haW5IYW5kbGVyCit7CisgICAgcmV0dXJuIF9kb21haW5IYW5k
bGVyOworfQorCistIChUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKilk
b21haW5FdmVudERpc3BhdGNoZXIKK3sKKyAgICBpZiAoIV9kb21haW5FdmVudERpc3BhdGNoZXIp
CisgICAgICAgIF9kb21haW5FdmVudERpc3BhdGNoZXIgPSBbW1Rlc3RQcm90b2NvbERvbWFpbkRv
bWFpbkV2ZW50RGlzcGF0Y2hlciBhbGxvY10gaW5pdFdpdGhDb250cm9sbGVyOl9jb250cm9sbGVy
XTsKKyAgICByZXR1cm4gX2RvbWFpbkV2ZW50RGlzcGF0Y2hlcjsKK30KKworQGVuZAorCisKKyMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorCisjIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlcy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKwor
I2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDx3dGYvSlNP
TlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRp
b24gVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyCit7CisgICAgQXVnbWVu
dGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKK30KKworLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKilj
b250cm9sbGVyCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisg
ICAgICAgIHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250cm9s
bGVyID0gY29udHJvbGxlcjsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClFdmVudAor
eworICAgIGNvbnN0IEZyb250ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29udHJvbGxlci0+ZnJvbnRl
bmRSb3V0ZXIoKTsKKworICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3Ms
ICJEb21haW4uRXZlbnQiX3MpOworICAgIHJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRv
SlNPTlN0cmluZygpKTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
RXZlbnREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZXMuanNvbiBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPEZvdW5kYXRp
b24vRm91bmRhdGlvbi5oPgorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09O
T2JqZWN0Lmg+CisKKworCisKKworCisKKworQHByb3RvY29sIFRlc3RQcm90b2NvbERvbWFpbkRv
bWFpbkhhbmRsZXIgPE5TT2JqZWN0PgorQG9wdGlvbmFsCistICh2b2lkKUNvbW1hbmRXaXRoRXJy
b3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vz
c0NhbGxiYWNrOih2b2lkKF4pKHZvaWQpKXN1Y2Nlc3NDYWxsYmFjazsKK0BlbmQKKworX19hdHRy
aWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2Nv
bERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciA6IE5TT2JqZWN0CistICh2b2lkKUV2ZW50Owor
QGVuZAorCisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJp
bGl0eU9iamVjdHMuaD4KKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAorCisjIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlcy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0
UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVn
bWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5o
PgorCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAo
UHJpdmF0ZSkKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEluc3BlY3Rvcjo6
QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyOworQGVuZAorCisKKyMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorCisjIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBkb21haW4tdGFyZ2V0VHlwZXMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCA8V2ViSW5zcGVj
dG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9y
IHsKKwordGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgorT3B0aW9uYWw8T2JqQ0VudW1U
eXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7CisKK30gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0K
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZXMuanNv
biBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNp
bXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9S
V0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0
b3I7CisKKworCisKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZXMuanNvbiBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVy
bmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9y
dCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKyNpbXBvcnQg
PHd0Zi9Bc3NlcnRpb25zLmg+CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBu
YW1lc3BhY2UgSW5zcGVjdG9yOworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMu
bW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC9kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24tcmVz
dWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVj
dGVkL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbi1yZXN1bHQKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmJiMThjNDA0ODg0Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4
cGVjdGVkL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbi1yZXN1bHQKQEAg
LTAsMCArMSwxNDAzIEBACisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRz
LmpzLmluCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZh
cnlpbmctY29tbWFuZC1zaXplcy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworLy8gTmV0d29yazEKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIk5l
dHdvcmsxIiwgbnVsbCk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiTmV0d29y
azEubG9hZFJlc291cmNlMSIsIG51bGwsIFtdLCBbXSk7CitJbnNwZWN0b3JCYWNrZW5kLmFjdGl2
YXRlRG9tYWluKCJOZXR3b3JrMSIsIG51bGwpOworCisvLyBOZXR3b3JrMworSW5zcGVjdG9yQmFj
a2VuZC5yZWdpc3RlckRvbWFpbigiTmV0d29yazMiLCBudWxsKTsKK0luc3BlY3RvckJhY2tlbmQu
cmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2UxIiwgbnVsbCwgW10sIFtdKTsK
K0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2Uy
IiwgbnVsbCwgW10sIFtdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3
b3JrMy5sb2FkUmVzb3VyY2UzIiwgbnVsbCwgW10sIFtdKTsKK0luc3BlY3RvckJhY2tlbmQucmVn
aXN0ZXJDb21tYW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2U0IiwgbnVsbCwgW10sIFtdKTsKK0lu
c3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2U1Iiwg
bnVsbCwgW10sIFtdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3Jr
My5sb2FkUmVzb3VyY2U2IiwgbnVsbCwgW10sIFtdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0
ZXJDb21tYW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2U3IiwgbnVsbCwgW10sIFtdKTsKK0luc3Bl
Y3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIk5ldHdvcmszIiwgbnVsbCk7CisjIyMgRW5kIEZp
bGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcy5pbgorCisjIyMgQmVnaW4gRmlsZTogVGVz
dEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworI2luY2x1ZGUgIlRlc3RQcm90
b2NvbFR5cGVzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJv
dXRlci5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgQWx0ZXJuYXRlQmFja2Vu
ZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVm
UHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hl
ciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KKyAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2Vu
ZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9
Citwcml2YXRlOgorICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0
Y2hlcjsKK307CisKKworY2xhc3MgQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciA6
IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdmlydHVh
bCB+QWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQorICAgIHZpcnR1YWwg
dm9pZCBsb2FkUmVzb3VyY2UxKGxvbmcgY2FsbElkKSA9IDA7Cit9OworCitjbGFzcyBBbHRlcm5h
dGVOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJhY2tlbmREaXNw
YXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5BbHRlcm5hdGVOZXR3b3JrM0JhY2tlbmRE
aXNwYXRjaGVyKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTEobG9uZyBjYWxs
SWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMihsb25nIGNhbGxJZCkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UzKGxvbmcgY2FsbElkKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTQobG9uZyBjYWxsSWQpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgbG9hZFJlc291cmNlNShsb25nIGNhbGxJZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBs
b2FkUmVzb3VyY2U2KGxvbmcgY2FsbElkKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNv
dXJjZTcobG9uZyBjYWxsSWQpID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgor
CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjIyMg
RW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4g
RmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
KworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwor
CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCitjbGFzcyBBbHRl
cm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOworY2xhc3MgQWx0ZXJuYXRlTmV0d29yazNC
YWNrZW5kRGlzcGF0Y2hlcjsKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKKworY2xhc3MgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewor
cHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UxKEVycm9yU3RyaW5nJikgPSAw
OworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgfk5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyKCk7Cit9OworCitjbGFzcyBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7Citw
dWJsaWM6CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTEoRXJyb3JTdHJpbmcmKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTIoRXJyb3JTdHJpbmcmKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTMoRXJyb3JTdHJpbmcmKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGxvYWRSZXNvdXJjZTQoRXJyb3JTdHJpbmcmKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGxvYWRSZXNvdXJjZTUoRXJyb3JTdHJpbmcmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGxvYWRS
ZXNvdXJjZTYoRXJyb3JTdHJpbmcmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJj
ZTcoRXJyb3JTdHJpbmcmKSA9IDA7Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+TmV0d29yazNC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKK307CisKK2NsYXNzIE5ldHdvcmsxQmFja2VuZERp
c3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewor
cHVibGljOgorICAgIHN0YXRpYyBSZWY8TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRl
KEJhY2tlbmREaXNwYXRjaGVyJiwgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsK
KyAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwg
UmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5hbDsKK3ByaXZhdGU6CisgICAgdm9pZCBs
b2FkUmVzb3VyY2UxKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFt
ZXRlcnMpOworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorcHVi
bGljOgorICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0Y2hlcihBbHRlcm5hdGVOZXR3b3JrMUJh
Y2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0
Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KK3ByaXZhdGU6CisgICAgQWx0ZXJuYXRlTmV0
d29yazFCYWNrZW5kRGlzcGF0Y2hlciogbV9hbHRlcm5hdGVEaXNwYXRjaGVyIHsgbnVsbHB0ciB9
OworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorcHJp
dmF0ZToKKyAgICBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiwg
TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICBOZXR3b3JrMUJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlciogbV9hZ2VudCB7IG51bGxwdHIgfTsKK307CisKK2NsYXNzIE5ldHdv
cmszQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERp
c3BhdGNoZXIgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8TmV0d29yazNCYWNrZW5kRGlzcGF0
Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIqKTsKKyAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJp
bmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5hbDsKK3ByaXZhdGU6
CisgICAgdm9pZCBsb2FkUmVzb3VyY2UxKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmIHBhcmFtZXRlcnMpOworICAgIHZvaWQgbG9hZFJlc291cmNlMihsb25nIHJlcXVlc3RJ
ZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyAgICB2b2lkIGxvYWRSZXNv
dXJjZTMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7
CisgICAgdm9pZCBsb2FkUmVzb3VyY2U0KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmIHBhcmFtZXRlcnMpOworICAgIHZvaWQgbG9hZFJlc291cmNlNShsb25nIHJlcXVlc3RJ
ZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyAgICB2b2lkIGxvYWRSZXNv
dXJjZTYobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7
CisgICAgdm9pZCBsb2FkUmVzb3VyY2U3KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmIHBhcmFtZXRlcnMpOworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQorcHVibGljOgorICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0Y2hlcihBbHRlcm5h
dGVOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0
ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KK3ByaXZhdGU6CisgICAg
QWx0ZXJuYXRlTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlciogbV9hbHRlcm5hdGVEaXNwYXRjaGVy
IHsgbnVsbHB0ciB9OworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQorcHJpdmF0ZToKKyAgICBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmRE
aXNwYXRjaGVyJiwgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICBOZXR3
b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2VudCB7IG51bGxwdHIgfTsKK307CisK
K30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3Bh
dGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29t
bWFuZC1zaXplcy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIK
KworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Cisj
aW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERp
c3BhdGNoZXJzLmgiCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitOZXR3b3JrMUJhY2tlbmREaXNwYXRj
aGVySGFuZGxlcjo6fk5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9CitOZXR3
b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6fk5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyKCkgeyB9CisKK1JlZjxOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPiBOZXR3b3JrMUJh
Y2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRj
aGVyLCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCit7CisgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0
Y2hlciwgYWdlbnQpKTsKK30KKworTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6TmV0d29yazFC
YWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIE5l
dHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKKyAgICA6IFN1cHBsZW1lbnRh
bEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQorICAgICwgbV9hZ2VudChhZ2Vu
dCkKK3sKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21h
aW4oIk5ldHdvcmsxIl9zLCB0aGlzKTsKK30KKwordm9pZCBOZXR3b3JrMUJhY2tlbmREaXNwYXRj
aGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxK
U09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKK3sKKyAgICBSZWY8TmV0d29yazFCYWNrZW5kRGlzcGF0
Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CisKKyAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0
ZXJzOworICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsKKwor
ICAgIGlmIChtZXRob2QgPT0gImxvYWRSZXNvdXJjZTEiKSB7CisgICAgICAgIGxvYWRSZXNvdXJj
ZTEocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2Vu
ZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmsxLiIgKyBtZXRob2QgKyAiJyB3
YXMgbm90IGZvdW5kIik7Cit9CisKK3ZvaWQgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6bG9h
ZFJlc291cmNlMShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKK3sKKyNp
ZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyAgICBpZiAobV9hbHRl
cm5hdGVEaXNwYXRjaGVyKSB7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJl
c291cmNlMShyZXF1ZXN0SWQpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmIC8vIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCisgICAgRXJyb3JTdHJpbmcg
ZXJyb3I7CisgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKKyAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2UxKGVycm9yKTsKKworICAgIGlmICghZXJy
b3IubGVuZ3RoKCkpCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShy
ZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOworICAgIGVsc2UKKyAgICAgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6
U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKK30KKworUmVmPE5ldHdvcmszQmFja2VuZERp
c3BhdGNoZXI+IE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShCYWNrZW5kRGlzcGF0
Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
KiBhZ2VudCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBOZXR3b3JrM0JhY2tlbmREaXNw
YXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOworfQorCitOZXR3b3JrM0JhY2tlbmRE
aXNwYXRjaGVyOjpOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBi
YWNrZW5kRGlzcGF0Y2hlciwgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50
KQorICAgIDogU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIp
CisgICAgLCBtX2FnZW50KGFnZW50KQoreworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lz
dGVyRGlzcGF0Y2hlckZvckRvbWFpbigiTmV0d29yazMiX3MsIHRoaXMpOworfQorCit2b2lkIE5l
dHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBT
dHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQoreworICAgIFJlZjxO
ZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKKworICAgIFJlZlB0cjxK
U09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7CisgICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMi
X3MsIHBhcmFtZXRlcnMpOworCisgICAgdHlwZWRlZiB2b2lkIChOZXR3b3JrM0JhY2tlbmREaXNw
YXRjaGVyOjoqQ2FsbEhhbmRsZXIpKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0
PiYmIG1lc3NhZ2UpOworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVyPiBE
aXNwYXRjaE1hcDsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8RGlzcGF0Y2hNYXA+IGRpc3Bh
dGNoTWFwOworICAgIGlmIChkaXNwYXRjaE1hcC5nZXQoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAg
c3RhdGljIGNvbnN0IHN0cnVjdCBNZXRob2RUYWJsZSB7CisgICAgICAgICAgICBjb25zdCBjaGFy
KiBuYW1lOworICAgICAgICAgICAgQ2FsbEhhbmRsZXIgaGFuZGxlcjsKKyAgICAgICAgfSBjb21t
YW5kc1tdID0geworICAgICAgICAgICAgeyAibG9hZFJlc291cmNlMSIsICZOZXR3b3JrM0JhY2tl
bmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UxIH0sCisgICAgICAgICAgICB7ICJsb2FkUmVzb3Vy
Y2UyIiwgJk5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTIgfSwKKyAgICAg
ICAgICAgIHsgImxvYWRSZXNvdXJjZTMiLCAmTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9h
ZFJlc291cmNlMyB9LAorICAgICAgICAgICAgeyAibG9hZFJlc291cmNlNCIsICZOZXR3b3JrM0Jh
Y2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U0IH0sCisgICAgICAgICAgICB7ICJsb2FkUmVz
b3VyY2U1IiwgJk5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTUgfSwKKyAg
ICAgICAgICAgIHsgImxvYWRSZXNvdXJjZTYiLCAmTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6
bG9hZFJlc291cmNlNiB9LAorICAgICAgICAgICAgeyAibG9hZFJlc291cmNlNyIsICZOZXR3b3Jr
M0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U3IH0sCisgICAgICAgIH07CisgICAgICAg
IHNpemVfdCBsZW5ndGggPSBXVEZfQVJSQVlfTEVOR1RIKGNvbW1hbmRzKTsKKyAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKKyAgICAgICAgICAgIGRpc3BhdGNoTWFw
LmdldCgpLmFkZChjb21tYW5kc1tpXS5uYW1lLCBjb21tYW5kc1tpXS5oYW5kbGVyKTsKKyAgICB9
CisKKyAgICBhdXRvIGZpbmRSZXN1bHQgPSBkaXNwYXRjaE1hcC5nZXQoKS5maW5kKG1ldGhvZCk7
CisgICAgaWYgKGZpbmRSZXN1bHQgPT0gZGlzcGF0Y2hNYXAuZ2V0KCkuZW5kKCkpIHsKKyAgICAg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0
Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMuIiArIG1ldGhvZCArICInIHdhcyBub3Qg
Zm91bmQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgICgoKnRoaXMpLipmaW5kUmVz
dWx0LT52YWx1ZSkocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKK30KKwordm9pZCBO
ZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UxKGxvbmcgcmVxdWVzdElkLCBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQoreworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQorICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKKyAgICAgICAg
bV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2UxKHJlcXVlc3RJZCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCisKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWY8SlNPTjo6T2JqZWN0
PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYWdlbnQtPmxvYWRSZXNv
dXJjZTEoZXJyb3IpOworCisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKKyAgICAgICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBm
YWxzZSk7CisgICAgZWxzZQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90
b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikp
OworfQorCit2b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTIobG9u
ZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCit7CisjaWYgRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hl
cikgeworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZTIocmVxdWVz
dElkKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgIFJl
ZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9h
Z2VudC0+bG9hZFJlc291cmNlMihlcnJvcik7CisKKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQor
ICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZN
b3ZlKHJlc3VsdCksIGZhbHNlKTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBX
VEZNb3ZlKGVycm9yKSk7Cit9CisKK3ZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9h
ZFJlc291cmNlMyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKK3sKKyNp
ZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyAgICBpZiAobV9hbHRl
cm5hdGVEaXNwYXRjaGVyKSB7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJl
c291cmNlMyhyZXF1ZXN0SWQpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmIC8vIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCisgICAgRXJyb3JTdHJpbmcg
ZXJyb3I7CisgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKKyAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2UzKGVycm9yKTsKKworICAgIGlmICghZXJy
b3IubGVuZ3RoKCkpCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShy
ZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOworICAgIGVsc2UKKyAgICAgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6
U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKK30KKwordm9pZCBOZXR3b3JrM0JhY2tlbmRE
aXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U0KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmKQoreworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQor
ICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNw
YXRjaGVyLT5sb2FkUmVzb3VyY2U0KHJlcXVlc3RJZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyAg
ICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTQoZXJyb3IpOwor
CisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+
c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7CisgICAgZWxz
ZQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tl
bmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOworfQorCit2b2lkIE5l
dHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTUobG9uZyByZXF1ZXN0SWQsIFJl
ZlB0cjxKU09OOjpPYmplY3Q+JiYpCit7CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCisgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeworICAgICAgICBt
X2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZTUocmVxdWVzdElkKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKKworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgIFJlZjxKU09OOjpPYmplY3Q+
IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9hZ2VudC0+bG9hZFJlc291
cmNlNShlcnJvcik7CisKKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQorICAgICAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZh
bHNlKTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3Rv
Y29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7
Cit9CisKK3ZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNihsb25n
IHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKK3sKKyNpZiBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVy
KSB7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlNihyZXF1ZXN0
SWQpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQorCisgICAgRXJyb3JTdHJpbmcgZXJyb3I7CisgICAgUmVm
PEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBtX2Fn
ZW50LT5sb2FkUmVzb3VyY2U2KGVycm9yKTsKKworICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCisg
ICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1v
dmUocmVzdWx0KSwgZmFsc2UpOworICAgIGVsc2UKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdU
Rk1vdmUoZXJyb3IpKTsKK30KKwordm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2Fk
UmVzb3VyY2U3KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQoreworI2lm
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorICAgIGlmIChtX2FsdGVy
bmF0ZURpc3BhdGNoZXIpIHsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVz
b3VyY2U3KHJlcXVlc3RJZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYgLy8gRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyAgICBFcnJvclN0cmluZyBl
cnJvcjsKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpOworICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTcoZXJyb3IpOworCisgICAgaWYgKCFlcnJv
ci5sZW5ndGgoKSkKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJl
cXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7CisgICAgZWxzZQorICAgICAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpT
ZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVn
aW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbiBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Ig
eworCitjbGFzcyBGcm9udGVuZFJvdXRlcjsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisj
IyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6
IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbiBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
KworIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbiBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9B
c3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFBy
b3RvY29sIHsKKworCisKKworCisvLyBUeXBlZGVmcy4KK25hbWVzcGFjZSBOZXR3b3JrMiB7Cisv
KiBVbmlxdWUgbG9hZGVyIGlkZW50aWZpZXIuICovCit0eXBlZGVmIFN0cmluZyBMb2FkZXJJZDsK
K30gLy8gTmV0d29yazIKKy8vIEVuZCBvZiB0eXBlZGVmcy4KKworCisKK30gLy8gbmFtZXNwYWNl
IFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xPYmplY3RzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMu
Y3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlp
bmctY29tbWFuZC1zaXplcy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMu
aCIKKworI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisK
KworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
KworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorCisjIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8
d3RmL1JldGFpblB0ci5oPgorCitAcHJvdG9jb2wgVGVzdFByb3RvY29sTmV0d29yazFEb21haW5I
YW5kbGVyOworQHByb3RvY29sIFRlc3RQcm90b2NvbE5ldHdvcmszRG9tYWluSGFuZGxlcjsKKwor
bmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworY2xhc3MgT2JqQ0luc3BlY3Rvck5ldHdvcmsxQmFj
a2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlz
cGF0Y2hlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgT2Jq
Q0luc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sTmV0d29y
azFEb21haW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9CisgICAg
dm9pZCBsb2FkUmVzb3VyY2UxKGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKK3ByaXZhdGU6CisgICAg
UmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdh
dGU7Cit9OworCitjbGFzcyBPYmpDSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlciBm
aW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyIHsKKyAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBPYmpDSW5zcGVjdG9yTmV0d29y
azNCYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkhhbmRsZXI+
IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KKyAgICB2b2lkIGxvYWRSZXNvdXJj
ZTEobG9uZyByZXF1ZXN0SWQpIGZpbmFsOworICAgIHZvaWQgbG9hZFJlc291cmNlMihsb25nIHJl
cXVlc3RJZCkgZmluYWw7CisgICAgdm9pZCBsb2FkUmVzb3VyY2UzKGxvbmcgcmVxdWVzdElkKSBm
aW5hbDsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTQobG9uZyByZXF1ZXN0SWQpIGZpbmFsOworICAg
IHZvaWQgbG9hZFJlc291cmNlNShsb25nIHJlcXVlc3RJZCkgZmluYWw7CisgICAgdm9pZCBsb2Fk
UmVzb3VyY2U2KGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTco
bG9uZyByZXF1ZXN0SWQpIGZpbmFsOworcHJpdmF0ZToKKyAgICBSZXRhaW5QdHI8aWQ8VGVzdFBy
b3RvY29sTmV0d29yazNEb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNw
YXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hl
cnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFy
eWluZy1jb21tYW5kLXNpemVzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmRE
aXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbmNs
dWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZh
bHVlcy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordm9pZCBPYmpDSW5zcGVjdG9yTmV0
d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMShsb25nIHJlcXVlc3RJZCkKK3sK
KyAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IobG9hZFJl
c291cmNlMVdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgeworICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2Vu
ZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmsxLmxvYWRSZXNvdXJjZTEnIHdh
cyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGlu
Z0Vycm9ycygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWQgZXJyb3JDYWxsYmFj
ayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJl
cG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJy
b3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJv
cnMoKTsKKyAgICB9OworCisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKKyAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKSwgZmFsc2UpOworICAgIH07CisKKyAgICBbbV9kZWxlZ2F0ZSBsb2FkUmVzb3VyY2Ux
V2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0Nh
bGxiYWNrXTsKK30KKwordm9pZCBPYmpDSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hl
cjo6bG9hZFJlc291cmNlMShsb25nIHJlcXVlc3RJZCkKK3sKKyAgICBpZiAoIVttX2RlbGVnYXRl
IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IobG9hZFJlc291cmNlMVdpdGhFcnJvckNhbGxi
YWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5y
ZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5v
dEZvdW5kLCAiJ05ldHdvcmszLmxvYWRSZXNvdXJjZTEnIHdhcyBub3QgZm91bmQiX3MpOworICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9y
KSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVx
dWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAg
YmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICB9OworCisgICAg
aWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2Vu
ZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2UpOworICAg
IH07CisKKyAgICBbbV9kZWxlZ2F0ZSBsb2FkUmVzb3VyY2UxV2l0aEVycm9yQ2FsbGJhY2s6ZXJy
b3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKK30KKwordm9pZCBP
YmpDSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMihsb25n
IHJlcXVlc3RJZCkKK3sKKyAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpA
c2VsZWN0b3IobG9hZFJlc291cmNlMldpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazop
XSkgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJl
cXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmszLmxv
YWRSZXNvdXJjZTInIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7CisgICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0
Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICB9OworCisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0g
XnsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwg
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2UpOworICAgIH07CisKKyAgICBbbV9kZWxlZ2F0
ZSBsb2FkUmVzb3VyY2UyV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2Fs
bGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKK30KKwordm9pZCBPYmpDSW5zcGVjdG9yTmV0d29yazNC
YWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMyhsb25nIHJlcXVlc3RJZCkKK3sKKyAgICBp
ZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IobG9hZFJlc291cmNl
M1dpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgeworICAgICAgICBiYWNrZW5k
RGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3Bh
dGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmszLmxvYWRSZXNvdXJjZTMnIHdhcyBub3Qg
Zm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9y
cygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4o
TlNTdHJpbmcgKmVycm9yKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFBy
b3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVy
cm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsK
KyAgICB9OworCisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKKyAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KSwgZmFsc2UpOworICAgIH07CisKKyAgICBbbV9kZWxlZ2F0ZSBsb2FkUmVzb3VyY2UzV2l0aEVy
cm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNr
XTsKK30KKwordm9pZCBPYmpDSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9h
ZFJlc291cmNlNChsb25nIHJlcXVlc3RJZCkKK3sKKyAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3Bv
bmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IobG9hZFJlc291cmNlNFdpdGhFcnJvckNhbGxiYWNrOnN1
Y2Nlc3NDYWxsYmFjazopXSkgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQ
cm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5k
LCAiJ05ldHdvcmszLmxvYWRSZXNvdXJjZTQnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Cisg
ICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElk
LCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICB9OworCisgICAgaWQgc3Vj
Y2Vzc0NhbGxiYWNrID0gXnsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3Bv
bnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2UpOworICAgIH07CisK
KyAgICBbbV9kZWxlZ2F0ZSBsb2FkUmVzb3VyY2U0V2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxs
YmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKK30KKwordm9pZCBPYmpDSW5z
cGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNShsb25nIHJlcXVl
c3RJZCkKK3sKKyAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0
b3IobG9hZFJlc291cmNlNVdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgewor
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJ
ZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmszLmxvYWRSZXNv
dXJjZTUnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5z
ZW5kUGVuZGluZ0Vycm9ycygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWQgZXJy
b3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6
U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBl
bmRpbmdFcnJvcnMoKTsKKyAgICB9OworCisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKKyAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2UpOworICAgIH07CisKKyAgICBbbV9kZWxlZ2F0ZSBsb2Fk
UmVzb3VyY2U1V2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6
c3VjY2Vzc0NhbGxiYWNrXTsKK30KKwordm9pZCBPYmpDSW5zcGVjdG9yTmV0d29yazNCYWNrZW5k
RGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNihsb25nIHJlcXVlc3RJZCkKK3sKKyAgICBpZiAoIVtt
X2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IobG9hZFJlc291cmNlNldpdGhF
cnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgeworICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6
Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmszLmxvYWRSZXNvdXJjZTYnIHdhcyBub3QgZm91bmQi
X3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJp
bmcgKmVycm9yKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29s
RXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsK
KyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICB9
OworCisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKKyAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFs
c2UpOworICAgIH07CisKKyAgICBbbV9kZWxlZ2F0ZSBsb2FkUmVzb3VyY2U2V2l0aEVycm9yQ2Fs
bGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKK30K
Kwordm9pZCBPYmpDSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291
cmNlNyhsb25nIHJlcXVlc3RJZCkKK3sKKyAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9T
ZWxlY3RvcjpAc2VsZWN0b3IobG9hZFJlc291cmNlN1dpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3ND
YWxsYmFjazopXSkgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2Nv
bEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05l
dHdvcmszLmxvYWRSZXNvdXJjZTcnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5k
RGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7CisgICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNr
ZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERpc3Bh
dGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICB9OworCisgICAgaWQgc3VjY2Vzc0Nh
bGxiYWNrID0gXnsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJl
cXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2UpOworICAgIH07CisKKyAgICBb
bV9kZWxlZ2F0ZSBsb2FkUmVzb3VyY2U3V2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBz
dWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKK30KKworfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1t
CisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNp
emVzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0
IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+CisKK19fYXR0cmlidXRlX18oKHZpc2liaWxp
dHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDog
TlNPYmplY3QKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4sIHNldHRlcj1zZXROZXR3b3Jr
MUhhbmRsZXI6KSBpZDxUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+IG5ldHdvcmsx
SGFuZGxlcjsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4sIHNldHRlcj1zZXROZXR3b3Jr
M0hhbmRsZXI6KSBpZDxUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkhhbmRsZXI+IG5ldHdvcmsz
SGFuZGxlcjsKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRp
b24uaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1h
bmQtc2l6ZXMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNp
bXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKKworI2ltcG9ydCAiVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5o
IgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4K
KyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5o
PgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXJzLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9u
IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNv
bnRyb2xsZXIqIF9jb250cm9sbGVyOworICAgIGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWlu
SGFuZGxlcj4gX25ldHdvcmsxSGFuZGxlcjsKKyAgICBpZDxUZXN0UHJvdG9jb2xOZXR3b3JrM0Rv
bWFpbkhhbmRsZXI+IF9uZXR3b3JrM0hhbmRsZXI7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0
V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxl
cgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICBy
ZXR1cm4gbmlsOworICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNv
bnRyb2xsZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAg
IFtfbmV0d29yazFIYW5kbGVyIHJlbGVhc2VdOworICAgIFtfbmV0d29yazNIYW5kbGVyIHJlbGVh
c2VdOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAodm9pZClzZXROZXR3b3JrMUhhbmRs
ZXI6KGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4paGFuZGxlcgoreworICAg
IGlmIChoYW5kbGVyID09IF9uZXR3b3JrMUhhbmRsZXIpCisgICAgICAgIHJldHVybjsKKworICAg
IFtfbmV0d29yazFIYW5kbGVyIHJlbGVhc2VdOworICAgIF9uZXR3b3JrMUhhbmRsZXIgPSBbaGFu
ZGxlciByZXRhaW5dOworCisgICAgYXV0byBhbHRlcm5hdGVEaXNwYXRjaGVyID0gbWFrZVVuaXF1
ZTxPYmpDSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7CisgICAg
YXV0byBhbHRlcm5hdGVBZ2VudCA9IG1ha2VVbmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdl
bnQ8TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciwgQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlz
cGF0Y2hlcj4+KCJOZXR3b3JrMSJfcywgKl9jb250cm9sbGVyLCBXVEZNb3ZlKGFsdGVybmF0ZURp
c3BhdGNoZXIpKTsKKyAgICBfY29udHJvbGxlci0+YXBwZW5kRXh0cmFBZ2VudChXVEZNb3ZlKGFs
dGVybmF0ZUFnZW50KSk7Cit9CisKKy0gKGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFu
ZGxlcj4pbmV0d29yazFIYW5kbGVyCit7CisgICAgcmV0dXJuIF9uZXR3b3JrMUhhbmRsZXI7Cit9
CisKKy0gKHZvaWQpc2V0TmV0d29yazNIYW5kbGVyOihpZDxUZXN0UHJvdG9jb2xOZXR3b3JrM0Rv
bWFpbkhhbmRsZXI+KWhhbmRsZXIKK3sKKyAgICBpZiAoaGFuZGxlciA9PSBfbmV0d29yazNIYW5k
bGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBbX25ldHdvcmszSGFuZGxlciByZWxlYXNlXTsK
KyAgICBfbmV0d29yazNIYW5kbGVyID0gW2hhbmRsZXIgcmV0YWluXTsKKworICAgIGF1dG8gYWx0
ZXJuYXRlRGlzcGF0Y2hlciA9IG1ha2VVbmlxdWU8T2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2Vu
ZERpc3BhdGNoZXI+KGhhbmRsZXIpOworICAgIGF1dG8gYWx0ZXJuYXRlQWdlbnQgPSBtYWtlVW5p
cXVlPEFsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50PE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIs
IEFsdGVybmF0ZU5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI+PigiTmV0d29yazMiX3MsICpfY29u
dHJvbGxlciwgV1RGTW92ZShhbHRlcm5hdGVEaXNwYXRjaGVyKSk7CisgICAgX2NvbnRyb2xsZXIt
PmFwcGVuZEV4dHJhQWdlbnQoV1RGTW92ZShhbHRlcm5hdGVBZ2VudCkpOworfQorCistIChpZDxU
ZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkhhbmRsZXI+KW5ldHdvcmszSGFuZGxlcgoreworICAg
IHJldHVybiBfbmV0d29yazNIYW5kbGVyOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xFdmVudERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
ZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIK
KworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDx3dGYv
SlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisKKyMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5z
LXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKworI2lt
cG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgorCisKKworCisKKwor
CisKK0Bwcm90b2NvbCBUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXIgPE5TT2JqZWN0
PgorQG9wdGlvbmFsCistICh2b2lkKWxvYWRSZXNvdXJjZTFXaXRoRXJyb3JDYWxsYmFjazoodm9p
ZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lk
KF4pKHZvaWQpKXN1Y2Nlc3NDYWxsYmFjazsKK0BlbmQKKworQHByb3RvY29sIFRlc3RQcm90b2Nv
bE5ldHdvcmszRG9tYWluSGFuZGxlciA8TlNPYmplY3Q+CitAb3B0aW9uYWwKKy0gKHZvaWQpbG9h
ZFJlc291cmNlMVdpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJy
b3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikodm9pZCkpc3VjY2Vzc0NhbGxiYWNr
OworLSAodm9pZClsb2FkUmVzb3VyY2UyV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJp
bmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKSh2b2lkKSlz
dWNjZXNzQ2FsbGJhY2s7CistICh2b2lkKWxvYWRSZXNvdXJjZTNXaXRoRXJyb3JDYWxsYmFjazoo
dm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2
b2lkKF4pKHZvaWQpKXN1Y2Nlc3NDYWxsYmFjazsKKy0gKHZvaWQpbG9hZFJlc291cmNlNFdpdGhF
cnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNj
ZXNzQ2FsbGJhY2s6KHZvaWQoXikodm9pZCkpc3VjY2Vzc0NhbGxiYWNrOworLSAodm9pZClsb2Fk
UmVzb3VyY2U1V2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJv
ckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKSh2b2lkKSlzdWNjZXNzQ2FsbGJhY2s7
CistICh2b2lkKWxvYWRSZXNvdXJjZTZXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmlu
ZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKHZvaWQpKXN1
Y2Nlc3NDYWxsYmFjazsKKy0gKHZvaWQpbG9hZFJlc291cmNlN1dpdGhFcnJvckNhbGxiYWNrOih2
b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZv
aWQoXikodm9pZCkpc3VjY2Vzc0NhbGxiYWNrOworQGVuZAorCisKKworCisjaW1wb3J0IDxXZWJJ
bnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+CisKKyMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbElu
dGVybmFsLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgt
dmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2Nv
bEpTT05PYmplY3RQcml2YXRlLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJs
ZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKKwor
CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorCisjIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wu
aCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4K
KworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlw
ZT4KK09wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpOworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbiBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90
b2NvbFR5cGVQYXJzZXIuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05P
YmplY3RQcml2YXRlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbnRlcmZh
Y2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChOZXR3b3JrMkRvbWFpbikKKworKyAodm9p
ZClfcGFyc2VMb2FkZXJJZDooTlNTdHJpbmcgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBh
eWxvYWQ7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucyAoTmV0d29yazJEb21haW4pCisKKysgKHZvaWQpX3BhcnNlTG9hZGVySWQ6KE5TU3RyaW5n
ICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKKyAgICAqb3V0VmFs
dWUgPSAoTlNTdHJpbmcgKilwYXlsb2FkOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbFR5cGVzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13
aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9y
dCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3Iv
UldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMu
aD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0
b3I7CisKKworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC9lbnVtLXZhbHVlcy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9lbnVtLXZhbHVlcy5qc29uLXJlc3VsdApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMTE0ODMzOWJiMjEKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvZW51bS12YWx1ZXMuanNvbi1yZXN1bHQKQEAgLTAsMCArMSwxMTgzIEBACisjIyMgQmVn
aW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzLmluCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKy8vIFR5cGVEb21haW4KK0luc3BlY3RvckJhY2tlbmQucmVnaXN0
ZXJEb21haW4oIlR5cGVEb21haW4iLCBudWxsKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJF
bnVtKCJUeXBlRG9tYWluLlR5cGVEb21haW5FbnVtIiwge1NoYXJlZDogInNoYXJlZCIsIFJlZDog
InJlZCIsIEdyZWVuOiAiZ3JlZW4iLCBCbHVlOiAiYmx1ZSJ9KTsKK0luc3BlY3RvckJhY2tlbmQu
YWN0aXZhdGVEb21haW4oIlR5cGVEb21haW4iLCBudWxsKTsKKworLy8gQ29tbWFuZERvbWFpbgor
SW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiQ29tbWFuZERvbWFpbiIsIG51bGwpOwor
SW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIkNvbW1hbmREb21haW4uY29tbWFuZFdp
dGhFbnVtUmV0dXJuVmFsdWUiLCBudWxsLCBbXSwgWyJyZXR1cm5WYWx1ZSJdKTsKK0luc3BlY3Rv
ckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkNvbW1hbmREb21haW4iLCBudWxsKTsKKworLy8gRXZl
bnREb21haW4KK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIkV2ZW50RG9tYWluIiwg
bnVsbCk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiRXZlbnREb21haW4uRXZlbnRX
aXRoRW51bVBhcmFtZXRlclBhcmFtZXRlciIsIHtTaGFyZWQ6ICJzaGFyZWQiLCBCbGFjazogImJs
YWNrIiwgV2hpdGU6ICJ3aGl0ZSJ9KTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudCgi
RXZlbnREb21haW4uZXZlbnRXaXRoRW51bVBhcmFtZXRlciIsIG51bGwsIFsicGFyYW1ldGVyIl0p
OworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckV2ZW50RG9tYWluRGlzcGF0Y2hlciA9IEluc3Bl
Y3RvckJhY2tlbmQucmVnaXN0ZXJEaXNwYXRjaGVyLmJpbmQoSW5zcGVjdG9yQmFja2VuZCwgIkV2
ZW50RG9tYWluIik7CitJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJFdmVudERvbWFp
biIsIG51bGwpOworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMuaW4K
KworIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCisjaW5jbHVkZSAiVGVzdFByb3Rv
Y29sVHlwZXMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlci5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91
dGVyLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBBbHRlcm5hdGVCYWNrZW5k
RGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQ
dHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVy
ID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQorICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5k
RGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0K
K3ByaXZhdGU6CisgICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRj
aGVyOworfTsKKworCitjbGFzcyBBbHRlcm5hdGVDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNo
ZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHZp
cnR1YWwgfkFsdGVybmF0ZUNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQorICAg
IHZpcnR1YWwgdm9pZCBjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShsb25nIGNhbGxJZCkgPSAw
OworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3Bh
dGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5q
c29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3R5cGVkZWYgU3RyaW5nIEVy
cm9yU3RyaW5nOworCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
CitjbGFzcyBBbHRlcm5hdGVDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI7CisjZW5kaWYg
Ly8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKK2NsYXNzIENvbW1h
bmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgeworcHVibGljOgorICAgIC8vIE5hbWVk
IGFmdGVyIHBhcmFtZXRlciAncmV0dXJuVmFsdWUnIHdoaWxlIGdlbmVyYXRpbmcgY29tbWFuZC9l
dmVudCBjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZS4KKyAgICBlbnVtIGNsYXNzIFJldHVyblZh
bHVlIHsKKyAgICAgICAgU2hhcmVkID0gMCwKKyAgICAgICAgQ3lhbiA9IDYsCisgICAgICAgIE1h
Z2VudGEgPSA3LAorICAgICAgICBZZWxsb3cgPSA4LAorICAgIH07IC8vIGVudW0gY2xhc3MgUmV0
dXJuVmFsdWUKKyAgICB2aXJ0dWFsIHZvaWQgY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUoRXJy
b3JTdHJpbmcmLCBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpSZXR1cm5W
YWx1ZSogb3V0X3JldHVyblZhbHVlKSA9IDA7Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+Q29t
bWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOworfTsKKworY2xhc3MgQ29tbWFu
ZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tl
bmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPENvbW1hbmREb21haW5CYWNr
ZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgQ29tbWFuZERvbWFpbkJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0
SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZp
bmFsOworcHJpdmF0ZToKKyAgICB2b2lkIGNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlKGxvbmcg
cmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOworI2lmIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorcHVibGljOgorICAgIHZvaWQgc2V0
QWx0ZXJuYXRlRGlzcGF0Y2hlcihBbHRlcm5hdGVDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNo
ZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJu
YXRlRGlzcGF0Y2hlcjsgfQorcHJpdmF0ZToKKyAgICBBbHRlcm5hdGVDb21tYW5kRG9tYWluQmFj
a2VuZERpc3BhdGNoZXIqIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciB7IG51bGxwdHIgfTsKKyNlbmRp
ZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK3ByaXZhdGU6Cisg
ICAgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiwgQ29t
bWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIENvbW1hbmREb21haW5C
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQgeyBudWxscHRyIH07Cit9OworCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVy
cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgor
I2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorI2lu
Y2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNlbmRpZiAvLyBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CisKK0NvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5Db21tYW5kRG9t
YWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9CisKK1JlZjxDb21tYW5kRG9tYWluQmFj
a2VuZERpc3BhdGNoZXI+IENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEJh
Y2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgQ29tbWFuZERvbWFpbkJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlciogYWdlbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ29t
bWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOwor
fQorCitDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmREb21haW5CYWNrZW5k
RGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIENvbW1hbmRE
b21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQorICAgIDogU3VwcGxlbWVudGFs
QmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCisgICAgLCBtX2FnZW50KGFnZW50
KQoreworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFp
bigiQ29tbWFuZERvbWFpbiJfcywgdGhpcyk7Cit9CisKK3ZvaWQgQ29tbWFuZERvbWFpbkJhY2tl
bmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRo
b2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKK3sKKyAgICBSZWY8Q29tbWFuZERvbWFp
bkJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKKworICAgIFJlZlB0cjxKU09OOjpP
YmplY3Q+IHBhcmFtZXRlcnM7CisgICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBh
cmFtZXRlcnMpOworCisgICAgaWYgKG1ldGhvZCA9PSAiY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFs
dWUiKSB7CisgICAgICAgIGNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlKHJlcXVlc3RJZCwgV1RG
TW92ZShwYXJhbWV0ZXJzKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRo
b2ROb3RGb3VuZCwgIidDb21tYW5kRG9tYWluLiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5k
Iik7Cit9CisKK3ZvaWQgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpjb21tYW5kV2l0
aEVudW1SZXR1cm5WYWx1ZShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikK
K3sKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyAgICBpZiAo
bV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+
Y29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUocmVxdWVzdElkKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
KworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9
IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRj
aGVySGFuZGxlcjo6UmV0dXJuVmFsdWUgb3V0X3JldHVyblZhbHVlOworICAgIG1fYWdlbnQtPmNv
bW1hbmRXaXRoRW51bVJldHVyblZhbHVlKGVycm9yLCAmb3V0X3JldHVyblZhbHVlKTsKKworICAg
IGlmICghZXJyb3IubGVuZ3RoKCkpCisgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJyZXR1cm5W
YWx1ZSJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFu
dFZhbHVlKG91dF9yZXR1cm5WYWx1ZSkpOworCisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKKyAg
ICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92
ZShyZXN1bHQpLCBmYWxzZSk7CisgICAgZWxzZQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RG
TW92ZShlcnJvcikpOworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBG
aWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZy
b250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVu
dW0tdmFsdWVzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRl
IDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCitu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgRnJvbnRlbmRSb3V0ZXI7CisKK2NsYXNzIEV2
ZW50RG9tYWluRnJvbnRlbmREaXNwYXRjaGVyIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKK3B1YmxpYzoKKyAgICBFdmVudERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcihGcm9udGVuZFJv
dXRlciYgZnJvbnRlbmRSb3V0ZXIpIDogbV9mcm9udGVuZFJvdXRlcihmcm9udGVuZFJvdXRlcikg
eyB9CisgICAgICAgIC8vIE5hbWVkIGFmdGVyIHBhcmFtZXRlciAncGFyYW1ldGVyJyB3aGlsZSBn
ZW5lcmF0aW5nIGNvbW1hbmQvZXZlbnQgZXZlbnRXaXRoRW51bVBhcmFtZXRlci4KKyAgICAgICAg
ZW51bSBjbGFzcyBQYXJhbWV0ZXIgeworICAgICAgICAgICAgU2hhcmVkID0gMCwKKyAgICAgICAg
ICAgIEJsYWNrID0gNCwKKyAgICAgICAgICAgIFdoaXRlID0gNSwKKyAgICAgICAgfTsgLy8gZW51
bSBjbGFzcyBQYXJhbWV0ZXIKKyAgICB2b2lkIGV2ZW50V2l0aEVudW1QYXJhbWV0ZXIoUGFyYW1l
dGVyIHBhcmFtZXRlcik7Citwcml2YXRlOgorICAgIEZyb250ZW5kUm91dGVyJiBtX2Zyb250ZW5k
Um91dGVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRl
c3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERp
c3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFs
dWVzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordm9pZCBF
dmVudERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcjo6ZXZlbnRXaXRoRW51bVBhcmFtZXRlcihQYXJh
bWV0ZXIgcGFyYW1ldGVyKQoreworICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0g
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRo
b2QiX3MsICJFdmVudERvbWFpbi5ldmVudFdpdGhFbnVtUGFyYW1ldGVyIl9zKTsKKyAgICBSZWY8
SlNPTjo6T2JqZWN0PiBwYXJhbXNPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAg
IHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJwYXJhbWV0ZXIiX3MsIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShwYXJhbWV0ZXIpKTsKKyAgICBq
c29uTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiX3MsIFdURk1vdmUocGFyYW1zT2JqZWN0KSk7
CisKKyAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3Ry
aW5nKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBU
ZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bE9iamVjdHMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVz
Lmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4K
KyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwor
CisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKworCisvLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4K
K25hbWVzcGFjZSBUeXBlRG9tYWluIHsKK2VudW0gY2xhc3MgVHlwZURvbWFpbkVudW07Cit9IC8v
IFR5cGVEb21haW4KKy8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KKworCisKKworbmFt
ZXNwYWNlIFRlc3RIZWxwZXJzIHsKKworU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBj
b2RlKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVl
KFQgZW51bVZhbHVlKQoreworICAgIHJldHVybiBnZXRFbnVtQ29uc3RhbnRWYWx1ZShzdGF0aWNf
Y2FzdDxpbnQ+KGVudW1WYWx1ZSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwor
CituYW1lc3BhY2UgVHlwZURvbWFpbiB7CisKK2VudW0gY2xhc3MgVHlwZURvbWFpbkVudW0gewor
ICAgIFNoYXJlZCA9IDAsCisgICAgUmVkID0gMSwKKyAgICBHcmVlbiA9IDIsCisgICAgQmx1ZSA9
IDMsCit9OyAvLyBlbnVtIGNsYXNzIFR5cGVEb21haW5FbnVtCisKK30gLy8gVHlwZURvbWFpbgor
CisKKworbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgUHJvdG9j
b2xFbnVtVHlwZT4KK09wdGlvbmFsPFByb3RvY29sRW51bVR5cGU+IHBhcnNlRW51bVZhbHVlRnJv
bVN0cmluZyhjb25zdCBTdHJpbmcmKTsKKworLy8gRW51bXMgaW4gdGhlICdUeXBlRG9tYWluJyBE
b21haW4KK3RlbXBsYXRlPD4KK09wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21h
aW46OlR5cGVEb21haW5FbnVtPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW0+KGNvbnN0IFN0cmluZyYpOworCit9
IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKKworLy8gSGFzaCBkZWNsYXJhdGlvbnMgaW4g
dGhlICdUeXBlRG9tYWluJyBEb21haW4KK3RlbXBsYXRlPD4KK3N0cnVjdCBEZWZhdWx0SGFzaDxJ
bnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51bT4geworICAgIHR5
cGVkZWYgSW50SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWlu
RW51bT4gSGFzaDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xPYmplY3RzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMu
Y3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbiBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisKKyNpbmNsdWRlIDx3dGYvT3B0
aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNw
ZWN0b3IgeworCituYW1lc3BhY2UgUHJvdG9jb2wgeworCituYW1lc3BhY2UgVGVzdEhlbHBlcnMg
eworCitzdGF0aWMgY29uc3QgY2hhciogY29uc3QgZW51bV9jb25zdGFudF92YWx1ZXNbXSA9IHsK
KyAgICAic2hhcmVkIiwKKyAgICAicmVkIiwKKyAgICAiZ3JlZW4iLAorICAgICJibHVlIiwKKyAg
ICAiYmxhY2siLAorICAgICJ3aGl0ZSIsCisgICAgImN5YW4iLAorICAgICJtYWdlbnRhIiwKKyAg
ICAieWVsbG93IiwKK307CisKK1N0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkg
eworICAgIHJldHVybiBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb2RlXTsKK30KKworLy8gRW51bXMg
aW4gdGhlICdUeXBlRG9tYWluJyBEb21haW4KKwordGVtcGxhdGU8PgorT3B0aW9uYWw8SW5zcGVj
dG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW0+IHBhcnNlRW51bVZhbHVl
RnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51
bT4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKK3sKKyAgICBzdGF0aWMgY29uc3Qgc2l6
ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7CisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90
b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW06OlNoYXJlZCwKKyAgICAgICAgKHNpemVf
dClJbnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51bTo6UmVkLAor
ICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46OlR5cGVEb21h
aW5FbnVtOjpHcmVlbiwKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUeXBl
RG9tYWluOjpUeXBlRG9tYWluRW51bTo6Qmx1ZSwKKyAgICB9OworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgNDsgKytpKQorICAgICAgICBpZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25z
dGFudF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNbaV1dKQorICAgICAgICAgICAgcmV0dXJuIChJbnNw
ZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51bSljb25zdGFudFZhbHVl
c1tpXTsKKworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIFRl
c3RIZWxwZXJzCisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorCisj
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5Q
dHIuaD4KKworQHByb3RvY29sIFRlc3RQcm90b2NvbENvbW1hbmREb21haW5Eb21haW5IYW5kbGVy
OworCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCitjbGFzcyBPYmpDSW5zcGVjdG9yQ29tbWFu
ZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZUNvbW1hbmRE
b21haW5CYWNrZW5kRGlzcGF0Y2hlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Citw
dWJsaWM6CisgICAgT2JqQ0luc3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcihp
ZDxUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2Rl
bGVnYXRlID0gaGFuZGxlcjsgfQorICAgIHZvaWQgY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUo
bG9uZyByZXF1ZXN0SWQpIGZpbmFsOworcHJpdmF0ZToKKyAgICBSZXRhaW5QdHI8aWQ8VGVzdFBy
b3RvY29sQ29tbWFuZERvbWFpbkRvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOworfTsKKworfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2Vu
ZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNw
YXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVz
Lmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJj
b25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisj
aW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorCituYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKKwordm9pZCBPYmpDSW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tlbmRE
aXNwYXRjaGVyOjpjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShsb25nIHJlcXVlc3RJZCkKK3sK
KyAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoY29tbWFu
ZFdpdGhFbnVtUmV0dXJuVmFsdWVXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6KV0p
IHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1
ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidDb21tYW5kRG9tYWlu
LmNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAg
YmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewor
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJ
ZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgfTsKKworICAgIGlkIHN1
Y2Nlc3NDYWxsYmFjayA9IF4oVGVzdFByb3RvY29sQ29tbWFuZERvbWFpbkNvbW1hbmRXaXRoRW51
bVJldHVyblZhbHVlUmV0dXJuVmFsdWUgcmV0dXJuVmFsdWUpIHsKKyAgICAgICAgUmVmPEpTT046
Ok9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAg
cmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInJldHVyblZhbHVlIl9zLCB0b1Byb3RvY29sU3RyaW5n
KHJldHVyblZhbHVlKSk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25z
ZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0T2JqZWN0KSwgZmFsc2UpOworICAgIH07CisKKyAg
ICBbbV9kZWxlZ2F0ZSBjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZVdpdGhFcnJvckNhbGxiYWNr
OmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107Cit9CisKK30g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tl
bmREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJh
dGlvbi5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNv
biBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPFdlYklu
c3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRl
ZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVj
dAorQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNldENvbW1hbmREb21haW5I
YW5kbGVyOikgaWQ8VGVzdFByb3RvY29sQ29tbWFuZERvbWFpbkRvbWFpbkhhbmRsZXI+IGNvbW1h
bmREb21haW5IYW5kbGVyOworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBUZXN0UHJv
dG9jb2xFdmVudERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqZXZlbnREb21haW5FdmVudERp
c3BhdGNoZXI7CitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0
aW9uLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sQ29u
ZmlndXJhdGlvbi5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2ltcG9y
dCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0
Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENv
cmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgorCit1c2luZyBuYW1l
c3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJh
dGlvbgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7
CisgICAgaWQ8VGVzdFByb3RvY29sQ29tbWFuZERvbWFpbkRvbWFpbkhhbmRsZXI+IF9jb21tYW5k
RG9tYWluSGFuZGxlcjsKKyAgICBUZXN0UHJvdG9jb2xFdmVudERvbWFpbkRvbWFpbkV2ZW50RGlz
cGF0Y2hlciAqX2V2ZW50RG9tYWluRXZlbnREaXNwYXRjaGVyOworfQorCistIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNv
bnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAg
ICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xs
ZXIgPSBjb250cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MK
K3sKKyAgICBbX2NvbW1hbmREb21haW5IYW5kbGVyIHJlbGVhc2VdOworICAgIFtfZXZlbnREb21h
aW5FdmVudERpc3BhdGNoZXIgcmVsZWFzZV07CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCist
ICh2b2lkKXNldENvbW1hbmREb21haW5IYW5kbGVyOihpZDxUZXN0UHJvdG9jb2xDb21tYW5kRG9t
YWluRG9tYWluSGFuZGxlcj4paGFuZGxlcgoreworICAgIGlmIChoYW5kbGVyID09IF9jb21tYW5k
RG9tYWluSGFuZGxlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgW19jb21tYW5kRG9tYWluSGFu
ZGxlciByZWxlYXNlXTsKKyAgICBfY29tbWFuZERvbWFpbkhhbmRsZXIgPSBbaGFuZGxlciByZXRh
aW5dOworCisgICAgYXV0byBhbHRlcm5hdGVEaXNwYXRjaGVyID0gbWFrZVVuaXF1ZTxPYmpDSW5z
cGVjdG9yQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPihoYW5kbGVyKTsKKyAgICBhdXRv
IGFsdGVybmF0ZUFnZW50ID0gbWFrZVVuaXF1ZTxBbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudDxD
b21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIsIEFsdGVybmF0ZUNvbW1hbmREb21haW5CYWNr
ZW5kRGlzcGF0Y2hlcj4+KCJDb21tYW5kRG9tYWluIl9zLCAqX2NvbnRyb2xsZXIsIFdURk1vdmUo
YWx0ZXJuYXRlRGlzcGF0Y2hlcikpOworICAgIF9jb250cm9sbGVyLT5hcHBlbmRFeHRyYUFnZW50
KFdURk1vdmUoYWx0ZXJuYXRlQWdlbnQpKTsKK30KKworLSAoaWQ8VGVzdFByb3RvY29sQ29tbWFu
ZERvbWFpbkRvbWFpbkhhbmRsZXI+KWNvbW1hbmREb21haW5IYW5kbGVyCit7CisgICAgcmV0dXJu
IF9jb21tYW5kRG9tYWluSGFuZGxlcjsKK30KKworLSAoVGVzdFByb3RvY29sRXZlbnREb21haW5E
b21haW5FdmVudERpc3BhdGNoZXIgKilldmVudERvbWFpbkV2ZW50RGlzcGF0Y2hlcgoreworICAg
IGlmICghX2V2ZW50RG9tYWluRXZlbnREaXNwYXRjaGVyKQorICAgICAgICBfZXZlbnREb21haW5F
dmVudERpc3BhdGNoZXIgPSBbW1Rlc3RQcm90b2NvbEV2ZW50RG9tYWluRG9tYWluRXZlbnREaXNw
YXRjaGVyIGFsbG9jXSBpbml0V2l0aENvbnRyb2xsZXI6X2NvbnRyb2xsZXJdOworICAgIHJldHVy
biBfZXZlbnREb21haW5FdmVudERpc3BhdGNoZXI7Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBlbnVtLXZhbHVlcy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1
c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29s
RXZlbnREb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIKK3sKKyAgICBBdWdtZW50YWJsZUluc3Bl
Y3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIK
K3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0
dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250
cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWV2ZW50V2l0aEVudW1QYXJh
bWV0ZXJXaXRoUGFyYW1ldGVyOihUZXN0UHJvdG9jb2xFdmVudERvbWFpbkV2ZW50V2l0aEVudW1Q
YXJhbWV0ZXJQYXJhbWV0ZXIpcGFyYW1ldGVyCit7CisgICAgY29uc3QgRnJvbnRlbmRSb3V0ZXIm
IHJvdXRlciA9IF9jb250cm9sbGVyLT5mcm9udGVuZFJvdXRlcigpOworCisgICAgUmVmPEpTT046
Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGpzb25N
ZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkV2ZW50RG9tYWluLmV2ZW50V2l0aEVudW1Q
YXJhbWV0ZXIiX3MpOworICAgIFJlZjxKU09OOjpPYmplY3Q+IHBhcmFtc09iamVjdCA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInBhcmFtZXRl
ciJfcywgdG9Qcm90b2NvbFN0cmluZyhwYXJhbWV0ZXIpKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0
T2JqZWN0KCJwYXJhbXMiX3MsIFdURk1vdmUocGFyYW1zT2JqZWN0KSk7CisgICAgcm91dGVyLnNl
bmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworfQorCitAZW5kCisKKworIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2wuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVu
dW0tdmFsdWVzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisj
aW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKworI2ltcG9ydCA8V2ViSW5zcGVjdG9y
L1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgorCisKKworCit0eXBlZGVmIE5TX0VOVU0oTlNJbnRl
Z2VyLCBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bSkgeworICAgIFRlc3RQcm90b2NvbFR5cGVE
b21haW5FbnVtU2hhcmVkLAorICAgIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtUmVkLAorICAg
IFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtR3JlZW4sCisgICAgVGVzdFByb3RvY29sVHlwZURv
bWFpbkVudW1CbHVlLAorfTsKKworCisKK0Bwcm90b2NvbCBUZXN0UHJvdG9jb2xDb21tYW5kRG9t
YWluRG9tYWluSGFuZGxlciA8TlNPYmplY3Q+CitAb3B0aW9uYWwKKy0gKHZvaWQpY29tbWFuZFdp
dGhFbnVtUmV0dXJuVmFsdWVXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJy
b3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKFRlc3RQcm90b2NvbENv
bW1hbmREb21haW5Db21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZVJldHVyblZhbHVlIHJldHVyblZh
bHVlKSlzdWNjZXNzQ2FsbGJhY2s7CitAZW5kCisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkg
KCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xFdmVudERvbWFpbkRvbWFpbkV2
ZW50RGlzcGF0Y2hlciA6IE5TT2JqZWN0CistICh2b2lkKWV2ZW50V2l0aEVudW1QYXJhbWV0ZXJX
aXRoUGFyYW1ldGVyOihUZXN0UHJvdG9jb2xFdmVudERvbWFpbkV2ZW50V2l0aEVudW1QYXJhbWV0
ZXJQYXJhbWV0ZXIpcGFyYW1ldGVyOworQGVuZAorCisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9S
V0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4KKworIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2wuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wu
aCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCisjaW1wb3J0IDxK
YXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQg
PHd0Zi9KU09OVmFsdWVzLmg+CisKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sRXZlbnREb21haW5E
b21haW5FdmVudERpc3BhdGNoZXIgKFByaXZhdGUpCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhD
b250cm9sbGVyOihJbnNwZWN0b3I6OkF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29u
dHJvbGxlcjsKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgK
KworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbiBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2lt
cG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgorCituYW1l
c3BhY2UgSW5zcGVjdG9yIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgorT3B0
aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1
ZSk7CisKK2lubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xUeXBlRG9t
YWluRW51bSB2YWx1ZSkKK3sKKyAgICBzd2l0Y2godmFsdWUpIHsKKyAgICBjYXNlIFRlc3RQcm90
b2NvbFR5cGVEb21haW5FbnVtU2hhcmVkOgorICAgICAgICByZXR1cm4gInNoYXJlZCJfczsKKyAg
ICBjYXNlIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtUmVkOgorICAgICAgICByZXR1cm4gInJl
ZCJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtR3JlZW46CisgICAgICAg
IHJldHVybiAiZ3JlZW4iX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bUJs
dWU6CisgICAgICAgIHJldHVybiAiYmx1ZSJfczsKKyAgICB9Cit9CisKK3RlbXBsYXRlPD4KK2lu
bGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bT4gZnJvbVByb3RvY29sU3Ry
aW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09ICJzaGFyZWQiKQor
ICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1TaGFyZWQ7CisgICAgaWYg
KHZhbHVlID09ICJyZWQiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sVHlwZURvbWFpbkVu
dW1SZWQ7CisgICAgaWYgKHZhbHVlID09ICJncmVlbiIpCisgICAgICAgIHJldHVybiBUZXN0UHJv
dG9jb2xUeXBlRG9tYWluRW51bUdyZWVuOworICAgIGlmICh2YWx1ZSA9PSAiYmx1ZSIpCisgICAg
ICAgIHJldHVybiBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bUJsdWU7CisgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKK30KKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGVudW0tdmFsdWVzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKworI2ltcG9ydCAi
VGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCisjaW1w
b3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorCit1c2lu
ZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucyAoVHlwZURvbWFpbkRvbWFpbikKKworKyAodm9pZClfcGFyc2VUeXBlRG9tYWluRW51
bTooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisKK0BlbmQK
KworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoVHlwZURvbWFp
bkRvbWFpbikKKworKyAodm9pZClfcGFyc2VUeXBlRG9tYWluRW51bTooTlNOdW1iZXIgKiopb3V0
VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9S
X0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBjbGFzc10pOworICAgIE9wdGlvbmFsPFRlc3RQ
cm90b2NvbFR5cGVEb21haW5FbnVtPiByZXN1bHQgPSBJbnNwZWN0b3I6OmZyb21Qcm90b2NvbFN0
cmluZzxUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bT4ocGF5bG9hZCk7CisgICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9CQURfRU5VTV9WQUxVRShyZXN1bHQsIEAiVHlwZURvbWFpbkVudW0iKTsKKyAg
ICAqb3V0VmFsdWUgPSBAKHJlc3VsdC52YWx1ZSgpKTsKK30KKworQGVuZAorCisKKyMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xUeXBlcy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVu
dW0tdmFsdWVzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisj
aW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05P
YmplY3RQcml2YXRlLmg+CisjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2ltcG9ydCA8d3Rm
L0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisKKworIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2V2ZW50LXRhcmdldFR5
cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2V2ZW50LXRhcmdl
dFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tcmVzdWx0Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yNDQxZWExYjEzNAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC9ldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29u
LXJlc3VsdApAQCAtMCwwICsxLDEwMTEgQEAKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNr
ZW5kQ29tbWFuZHMuanMuaW4KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVu
dC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworLy8gRG9tYWluCitJbnNwZWN0b3JCYWNr
ZW5kLnJlZ2lzdGVyRG9tYWluKCJEb21haW4iLCBudWxsKTsKK0luc3BlY3RvckJhY2tlbmQucmVn
aXN0ZXJDb21tYW5kKCJEb21haW4uQ29tbWFuZCIsIG51bGwsIFtdLCBbXSk7CitJbnNwZWN0b3JC
YWNrZW5kLnJlZ2lzdGVyRXZlbnQoIkRvbWFpbi5FdmVudCIsIFsicGFnZSIsICJ3b3JrZXIiXSwg
W10pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbkRpc3BhdGNoZXIgPSBJbnNwZWN0
b3JCYWNrZW5kLnJlZ2lzdGVyRGlzcGF0Y2hlci5iaW5kKEluc3BlY3RvckJhY2tlbmQsICJEb21h
aW4iKTsKK0luc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkRvbWFpbiIsIFsicGFnZSJd
KTsKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzLmluCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1k
ZWJ1Z2dhYmxlVHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9y
IHsKKworY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHZv
aWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3Bh
dGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KKyAg
ICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBt
X2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Citwcml2YXRlOgorICAgIFJlZlB0cjxCYWNrZW5k
RGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKK307CisKKworY2xhc3MgQWx0ZXJuYXRl
RG9tYWluQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgfkFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRj
aGVyKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIENvbW1hbmQobG9uZyBjYWxsSWQpID0gMDsKK307
CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVy
cy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1t
YXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29s
T2JqZWN0cy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJ
bnNwZWN0b3IgeworCit0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKworI2lmIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorY2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFj
a2VuZERpc3BhdGNoZXI7CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCisKK2NsYXNzIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CitwdWJs
aWM6CisgICAgdmlydHVhbCB2b2lkIENvbW1hbmQoRXJyb3JTdHJpbmcmKSA9IDA7Citwcm90ZWN0
ZWQ6CisgICAgdmlydHVhbCB+RG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7Cit9Owor
CitjbGFzcyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50
YWxCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgRG9tYWluQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyKik7CisgICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29u
c3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkgZmluYWw7Citw
cml2YXRlOgorICAgIHZvaWQgQ29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9i
amVjdD4mJiBwYXJhbWV0ZXJzKTsKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKK3B1YmxpYzoKKyAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJu
YXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRl
cm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQorcHJpdmF0ZToKKyAgICBB
bHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciogbV9hbHRlcm5hdGVEaXNwYXRjaGVyIHsg
bnVsbHB0ciB9OworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENI
RVJTKQorcHJpdmF0ZToKKyAgICBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0
Y2hlciYsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIERvbWFpbkJhY2tl
bmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2VudCB7IG51bGxwdHIgfTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgK
KworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4t
ZGVidWdnYWJsZVR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJz
LmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5o
PgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJv
eWVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCisjaWYgRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tl
bmREaXNwYXRjaGVycy5oIgorI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworRG9tYWluQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyOjp+RG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9CisKK1Jl
ZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0
ZShCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIERvbWFpbkJhY2tlbmREaXNw
YXRjaGVySGFuZGxlciogYWdlbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRG9tYWlu
QmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIsIGFnZW50KSk7Cit9CisKK0RvbWFp
bkJhY2tlbmREaXNwYXRjaGVyOjpEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0
Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciog
YWdlbnQpCisgICAgOiBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0
Y2hlcikKKyAgICAsIG1fYWdlbnQoYWdlbnQpCit7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+
cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKCJEb21haW4iX3MsIHRoaXMpOworfQorCit2b2lk
IERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3Qg
U3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKK3sKKyAgICBSZWY8
RG9tYWluQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOworCisgICAgUmVmUHRyPEpT
T046Ok9iamVjdD4gcGFyYW1ldGVyczsKKyAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJf
cywgcGFyYW1ldGVycyk7CisKKyAgICBpZiAobWV0aG9kID09ICJDb21tYW5kIikgeworICAgICAg
ICBDb21tYW5kKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9y
KEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uIiArIG1ldGhvZCAr
ICInIHdhcyBub3QgZm91bmQiKTsKK30KKwordm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6
Q29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKK3sKKyNpZiBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyAgICBpZiAobV9hbHRlcm5h
dGVEaXNwYXRjaGVyKSB7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+Q29tbWFuZChy
ZXF1ZXN0SWQpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmIC8vIEVOQUJMRShJTlNQ
RUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCisgICAgRXJyb3JTdHJpbmcgZXJyb3I7Cisg
ICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAg
ICBtX2FnZW50LT5Db21tYW5kKGVycm9yKTsKKworICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCisg
ICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1v
dmUocmVzdWx0KSwgZmFsc2UpOworICAgIGVsc2UKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdU
Rk1vdmUoZXJyb3IpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQg
RmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RG
cm9udGVuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBl
dmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7
CisKK2NsYXNzIEZyb250ZW5kUm91dGVyOworCitjbGFzcyBEb21haW5Gcm9udGVuZERpc3BhdGNo
ZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIERvbWFpbkZy
b250ZW5kRGlzcGF0Y2hlcihGcm9udGVuZFJvdXRlciYgZnJvbnRlbmRSb3V0ZXIpIDogbV9mcm9u
dGVuZFJvdXRlcihmcm9udGVuZFJvdXRlcikgeyB9CisgICAgdm9pZCBFdmVudCgpOworcHJpdmF0
ZToKKyAgICBGcm9udGVuZFJvdXRlciYgbV9mcm9udGVuZFJvdXRlcjsKK307CisKK30gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5o
CisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFp
bi1kZWJ1Z2dhYmxlVHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNo
ZXJzLmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRl
ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CisKK3ZvaWQgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVyOjpFdmVudCgpCit7CisgICAgUmVm
PEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAg
IGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7CisK
KyAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5n
KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0
RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9i
amVjdHMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRhcmdldFR5
cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9u
cy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK25hbWVzcGFjZSBQcm90b2NvbCB7
CisKKworCisKKworCisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisKKyMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2Fi
bGVUeXBlLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorCisjaW5j
bHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCitu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworCisKK30gLy8g
bmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW5jbHVk
ZSA8d3RmL1JldGFpblB0ci5oPgorCitAcHJvdG9jb2wgVGVzdFByb3RvY29sRG9tYWluRG9tYWlu
SGFuZGxlcjsKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworY2xhc3MgT2JqQ0luc3BlY3Rv
ckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZURvbWFpbkJh
Y2tlbmREaXNwYXRjaGVyIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoK
KyAgICBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29s
RG9tYWluRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQor
ICAgIHZvaWQgQ29tbWFuZChsb25nIHJlcXVlc3RJZCkgZmluYWw7Citwcml2YXRlOgorICAgIFJl
dGFpblB0cjxpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsK
K307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xC
YWNrZW5kRGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBl
dmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisj
aW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgIlRl
c3RQcm90b2NvbEludGVybmFsLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zLmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKworbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CisKK3ZvaWQgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5k
KGxvbmcgcmVxdWVzdElkKQoreworICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVj
dG9yOkBzZWxlY3RvcihDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOild
KSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVx
dWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRG9tYWluLkNvbW1h
bmQnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5k
UGVuZGluZ0Vycm9ycygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWQgZXJyb3JD
YWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVy
KCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2Vy
dmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRp
bmdFcnJvcnMoKTsKKyAgICB9OworCisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKKyAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKSwgZmFsc2UpOworICAgIH07CisKKyAgICBbbV9kZWxlZ2F0ZSBDb21tYW5k
V2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0Nh
bGxiYWNrXTsKK30KKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8V2ViSW5zcGVj
dG9yL1Rlc3RQcm90b2NvbC5oPgorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVs
dCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0CitA
cHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluLCBzZXR0ZXI9c2V0RG9tYWluSGFuZGxlcjopIGlk
PFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IGRvbWFpbkhhbmRsZXI7CitAcHJvcGVy
dHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlz
cGF0Y2hlciAqZG9tYWluRXZlbnREaXNwYXRjaGVyOworQGVuZAorCisKKyMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xDb25maWd1cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZl
bnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbiBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbENv
bmZpZ3VyYXRpb24uaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbXBv
cnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRD
b3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW1wb3J0IDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKwordXNpbmcgbmFt
ZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3Vy
YXRpb24KK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVy
OworICAgIGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IF9kb21haW5IYW5kbGVy
OworICAgIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqX2RvbWFpbkV2
ZW50RGlzcGF0Y2hlcjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjoo
QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCit7CisgICAgc2VsZiA9
IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAg
QVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKKyAgICBy
ZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgW19kb21haW5IYW5kbGVy
IHJlbGVhc2VdOworICAgIFtfZG9tYWluRXZlbnREaXNwYXRjaGVyIHJlbGVhc2VdOworICAgIFtz
dXBlciBkZWFsbG9jXTsKK30KKworLSAodm9pZClzZXREb21haW5IYW5kbGVyOihpZDxUZXN0UHJv
dG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiloYW5kbGVyCit7CisgICAgaWYgKGhhbmRsZXIgPT0g
X2RvbWFpbkhhbmRsZXIpCisgICAgICAgIHJldHVybjsKKworICAgIFtfZG9tYWluSGFuZGxlciBy
ZWxlYXNlXTsKKyAgICBfZG9tYWluSGFuZGxlciA9IFtoYW5kbGVyIHJldGFpbl07CisKKyAgICBh
dXRvIGFsdGVybmF0ZURpc3BhdGNoZXIgPSBtYWtlVW5pcXVlPE9iakNJbnNwZWN0b3JEb21haW5C
YWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7CisgICAgYXV0byBhbHRlcm5hdGVBZ2VudCA9IG1h
a2VVbmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8RG9tYWluQmFja2VuZERpc3BhdGNo
ZXIsIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyPj4oIkRvbWFpbiJfcywgKl9jb250
cm9sbGVyLCBXVEZNb3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIpKTsKKyAgICBfY29udHJvbGxlci0+
YXBwZW5kRXh0cmFBZ2VudChXVEZNb3ZlKGFsdGVybmF0ZUFnZW50KSk7Cit9CisKKy0gKGlkPFRl
c3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+KWRvbWFpbkhhbmRsZXIKK3sKKyAgICByZXR1
cm4gX2RvbWFpbkhhbmRsZXI7Cit9CisKKy0gKFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50
RGlzcGF0Y2hlciAqKWRvbWFpbkV2ZW50RGlzcGF0Y2hlcgoreworICAgIGlmICghX2RvbWFpbkV2
ZW50RGlzcGF0Y2hlcikKKyAgICAgICAgX2RvbWFpbkV2ZW50RGlzcGF0Y2hlciA9IFtbVGVzdFBy
b3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyIGFsbG9jXSBpbml0V2l0aENvbnRyb2xs
ZXI6X2NvbnRyb2xsZXJdOworICAgIHJldHVybiBfZG9tYWluRXZlbnREaXNwYXRjaGVyOworfQor
CitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisK
KyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21h
aW4tZGVidWdnYWJsZVR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwor
dXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2Nv
bERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlcgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9y
Q29udHJvbGxlciogX2NvbnRyb2xsZXI7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENv
bnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgorewor
ICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4g
bmlsOworICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xs
ZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpRXZlbnQKK3sKKyAgICBjb25zdCBG
cm9udGVuZFJvdXRlciYgcm91dGVyID0gX2NvbnRyb2xsZXItPmZyb250ZW5kUm91dGVyKCk7CisK
KyAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRl
KCk7CisgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50
Il9zKTsKKyAgICByb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7
Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hl
cnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdn
YWJsZVR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNp
bXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3Iv
UldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+CisKKworCisKKworCisKKworQHByb3RvY29sIFRlc3RQ
cm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXIgPE5TT2JqZWN0PgorQG9wdGlvbmFsCistICh2b2lk
KUNvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9y
Q2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKHZvaWQpKXN1Y2Nlc3NDYWxsYmFjazsK
K0BlbmQKKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJm
YWNlIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciA6IE5TT2JqZWN0Cist
ICh2b2lkKUV2ZW50OworQGVuZAorCisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2Nv
bEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4KKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2wuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWlu
LWRlYnVnZ2FibGVUeXBlLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05P
YmplY3RQcml2YXRlLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3Bl
Y3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK0BpbnRlcmZh
Y2UgVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyIChQcml2YXRlKQorLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooSW5zcGVjdG9yOjpBdWdtZW50YWJsZUlu
c3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXI7CitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRh
cmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNp
bXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KK09w
dGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFs
dWUpOworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnQt
dGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbiBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucy5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQ
cm90b2NvbFR5cGVQYXJzZXIuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpT
T05PYmplY3RQcml2YXRlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworCisK
KworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorCisjIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlw
ZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAi
VGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJp
dmF0ZS5oPgorI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFs
dWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFt
ZXRlcnMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uLXJl
c3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYjg5NDNlMDk0OWQK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uLXJl
c3VsdApAQCAtMCwwICsxLDExNjMgQEAKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5k
Q29tbWFuZHMuanMuaW4KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMt
d2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisvLyBEYXRhYmFzZQorSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFp
bigiRGF0YWJhc2UiLCBudWxsKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudCgiRGF0
YWJhc2UuZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyIsIG51bGwsIFsiY29sdW1uTmFtZXMi
LCAibm90ZXMiLCAidGltZXN0YW1wIiwgInZhbHVlcyIsICJwYXlsb2FkIiwgInNxbEVycm9yIiwg
InNjcmVlbkNvbG9yIiwgImFsdGVybmF0ZUNvbG9ycyIsICJwcmludENvbG9yIl0pOworSW5zcGVj
dG9yQmFja2VuZC5yZWdpc3RlckV2ZW50KCJEYXRhYmFzZS5kaWRFeGVjdXRlTm9PcHRpb25hbFBh
cmFtZXRlcnMiLCBudWxsLCBbImNvbHVtbk5hbWVzIiwgIm5vdGVzIiwgInRpbWVzdGFtcCIsICJ2
YWx1ZXMiLCAicGF5bG9hZCIsICJzcWxFcnJvciIsICJzY3JlZW5Db2xvciIsICJhbHRlcm5hdGVD
b2xvcnMiLCAicHJpbnRDb2xvciJdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEYXRhYmFz
ZURpc3BhdGNoZXIgPSBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRGlzcGF0Y2hlci5iaW5kKElu
c3BlY3RvckJhY2tlbmQsICJEYXRhYmFzZSIpOworSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURv
bWFpbigiRGF0YWJhc2UiLCBudWxsKTsKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENv
bW1hbmRzLmpzLmluCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1v
cHRpb25hbC1wYXJhbWV0ZXJzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisKK25hbWVzcGFjZSBJbnNw
ZWN0b3IgeworCitjbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6Cisg
ICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYg
ZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsg
fQorICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0
dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KK3ByaXZhdGU6CisgICAgUmVmUHRyPEJh
Y2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOworfTsKKworCisKKworfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKKyMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0
ZXJzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJp
bmcgRXJyb3JTdHJpbmc7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQg
RmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFj
a2VuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2
ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0QmFj
a2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JG
cm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8
d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCisj
aWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjaW5jbHVkZSAiVGVz
dEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgorI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisK
K30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlz
cGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5o
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwt
cGFyYW1ldGVycy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVk
ZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwor
bmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEZyb250ZW5kUm91dGVyOworCitjbGFzcyBE
YXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CitwdWJsaWM6CisgICAgRGF0YWJhc2VGcm9udGVuZERpc3BhdGNoZXIoRnJvbnRlbmRSb3V0ZXIm
IGZyb250ZW5kUm91dGVyKSA6IG1fZnJvbnRlbmRSb3V0ZXIoZnJvbnRlbmRSb3V0ZXIpIHsgfQor
ICAgIHZvaWQgZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyhSZWZQdHI8SlNPTjo6QXJyYXlP
ZjxTdHJpbmc+PiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nKiBub3RlcywgY29uc3QgZG91Ymxl
KiB0aW1lc3RhbXAsIFJlZlB0cjxKU09OOjpPYmplY3Q+IHZhbHVlcywgUmVmUHRyPEpTT046OlZh
bHVlPiBwYXlsb2FkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9y
PiBzcWxFcnJvciwgY29uc3QgU3RyaW5nKiBzY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IGFsdGVybmF0ZUNvbG9ycywgY29uc3QgU3Ry
aW5nKiBwcmludENvbG9yKTsKKyAgICB2b2lkIGRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVy
cyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5n
JiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUmVmUHRyPEpTT046Ok9iamVjdD4gdmFsdWVzLCBS
ZWZQdHI8SlNPTjo6VmFsdWU+IHBheWxvYWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpE
YXRhYmFzZTo6RXJyb3I+IHNxbEVycm9yLCBjb25zdCBTdHJpbmcmIHNjcmVlbkNvbG9yLCBSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4gYWx0ZXJuYXRlQ29s
b3JzLCBjb25zdCBTdHJpbmcmIHByaW50Q29sb3IpOworcHJpdmF0ZToKKyAgICBGcm9udGVuZFJv
dXRlciYgbV9mcm9udGVuZFJvdXRlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgor
IyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxl
OiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordm9pZCBEYXRhYmFzZUZyb250ZW5kRGlzcGF0
Y2hlcjo6ZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxT
dHJpbmc+PiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nKiBub3RlcywgY29uc3QgZG91YmxlKiB0
aW1lc3RhbXAsIFJlZlB0cjxKU09OOjpPYmplY3Q+IHZhbHVlcywgUmVmUHRyPEpTT046OlZhbHVl
PiBwYXlsb2FkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBz
cWxFcnJvciwgY29uc3QgU3RyaW5nKiBzY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IGFsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5n
KiBwcmludENvbG9yKQoreworICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2Qi
X3MsICJEYXRhYmFzZS5kaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzIl9zKTsKKyAgICBSZWY8
SlNPTjo6T2JqZWN0PiBwYXJhbXNPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAg
IGlmIChjb2x1bW5OYW1lcykKKyAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiY29sdW1u
TmFtZXMiX3MsIGNvbHVtbk5hbWVzKTsKKyAgICBpZiAobm90ZXMpCisgICAgICAgIHBhcmFtc09i
amVjdC0+c2V0U3RyaW5nKCJub3RlcyJfcywgKm5vdGVzKTsKKyAgICBpZiAodGltZXN0YW1wKQor
ICAgICAgICBwYXJhbXNPYmplY3QtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCAqdGltZXN0YW1w
KTsKKyAgICBpZiAodmFsdWVzKQorICAgICAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgidmFs
dWVzIl9zLCB2YWx1ZXMpOworICAgIGlmIChwYXlsb2FkKQorICAgICAgICBwYXJhbXNPYmplY3Qt
PnNldFZhbHVlKCJwYXlsb2FkIl9zLCAqcGF5bG9hZCk7CisgICAgaWYgKHNxbEVycm9yKQorICAg
ICAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIHNxbEVycm9yKTsKKyAg
ICBpZiAoc2NyZWVuQ29sb3IpCisgICAgICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJzY3Jl
ZW5Db2xvciJfcywgKnNjcmVlbkNvbG9yKTsKKyAgICBpZiAoYWx0ZXJuYXRlQ29sb3JzKQorICAg
ICAgICBwYXJhbXNPYmplY3QtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIGFsdGVybmF0
ZUNvbG9ycyk7CisgICAgaWYgKHByaW50Q29sb3IpCisgICAgICAgIHBhcmFtc09iamVjdC0+c2V0
U3RyaW5nKCJwcmludENvbG9yIl9zLCAqcHJpbnRDb2xvcik7CisgICAganNvbk1lc3NhZ2UtPnNl
dE9iamVjdCgicGFyYW1zIl9zLCBXVEZNb3ZlKHBhcmFtc09iamVjdCkpOworCisgICAgbV9mcm9u
dGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKK30KKwor
dm9pZCBEYXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hlcjo6ZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJh
bWV0ZXJzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IGNvbHVtbk5hbWVzLCBjb25zdCBT
dHJpbmcmIG5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiB2YWx1
ZXMsIFJlZlB0cjxKU09OOjpWYWx1ZT4gcGF5bG9hZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRhdGFiYXNlOjpFcnJvcj4gc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgc2NyZWVuQ29sb3Is
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiBhbHRlcm5h
dGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgcHJpbnRDb2xvcikKK3sKKyAgICBSZWY8SlNPTjo6T2Jq
ZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAganNvbk1lc3Nh
Z2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRGF0YWJhc2UuZGlkRXhlY3V0ZU5vT3B0aW9uYWxQ
YXJhbWV0ZXJzIl9zKTsKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiBwYXJhbXNPYmplY3QgPSBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIHBhcmFtc09iamVjdC0+c2V0QXJyYXkoImNvbHVtbk5h
bWVzIl9zLCBjb2x1bW5OYW1lcyk7CisgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoIm5vdGVz
Il9zLCBub3Rlcyk7CisgICAgcGFyYW1zT2JqZWN0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywg
dGltZXN0YW1wKTsKKyAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgidmFsdWVzIl9zLCB2YWx1
ZXMpOworICAgIHBhcmFtc09iamVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIHBheWxvYWQpOwor
ICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgc3FsRXJyb3IpOworICAg
IHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgc2NyZWVuQ29sb3IpOwor
ICAgIHBhcmFtc09iamVjdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgYWx0ZXJuYXRl
Q29sb3JzKTsKKyAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgcHJp
bnRDb2xvcik7CisgICAganNvbk1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIl9zLCBXVEZNb3Zl
KHBhcmFtc09iamVjdCkpOworCisgICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1l
c3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisK
KyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0
aW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK25hbWVzcGFjZSBQcm90b2Nv
bCB7CisKKworCisvLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KK25hbWVzcGFjZSBEYXRhYmFzZSB7
CitjbGFzcyBFcnJvcjsKK30gLy8gRGF0YWJhc2UKKy8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0
aW9ucy4KKworCisvLyBUeXBlZGVmcy4KK25hbWVzcGFjZSBEYXRhYmFzZSB7CisvKiBVbmlxdWUg
aWRlbnRpZmllciBvZiBEYXRhYmFzZSBvYmplY3QuICovCit0eXBlZGVmIFN0cmluZyBEYXRhYmFz
ZUlkOwordHlwZWRlZiBTdHJpbmcgUHJpbWFyeUNvbG9yczsKK3R5cGVkZWYgSlNPTjo6QXJyYXlP
ZjxTdHJpbmc+IENvbG9yTGlzdDsKK30gLy8gRGF0YWJhc2UKKy8vIEVuZCBvZiB0eXBlZGVmcy4K
KworbmFtZXNwYWNlIERhdGFiYXNlIHsKKworLyogRGF0YWJhc2UgZXJyb3IuICovCitjbGFzcyBF
cnJvciA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKK3B1YmxpYzoKKyAgICBlbnVtIHsKKyAg
ICAgICAgTm9GaWVsZHNTZXQgPSAwLAorICAgICAgICBNZXNzYWdlU2V0ID0gMSA8PCAwLAorICAg
ICAgICBDb2RlU2V0ID0gMSA8PCAxLAorICAgICAgICBBbGxGaWVsZHNTZXQgPSAoTWVzc2FnZVNl
dCB8IENvZGVTZXQpCisgICAgfTsKKworICAgIHRlbXBsYXRlPGludCBTVEFURT4KKyAgICBjbGFz
cyBCdWlsZGVyIHsKKyAgICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBt
X3Jlc3VsdDsKKworICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNU
RVA+JiBjYXN0U3RhdGUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJw
cmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CisgICAgICAgIH0KKworICAg
ICAgICBCdWlsZGVyKFJlZjwvKkVycm9yKi9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQorICAgICAg
ICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5f
bm9uX2luaXRfc3RhdGUpOworICAgICAgICB9CisgICAgICAgIGZyaWVuZCBjbGFzcyBFcnJvcjsK
KyAgICBwdWJsaWM6CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1lc3NhZ2VTZXQ+JiBzZXRN
ZXNzYWdlKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBNZXNzYWdlU2V0KSwgcHJvcGVydHlfbWVzc2FnZV9hbHJlYWR5
X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJtZXNzYWdlIl9zLCB2YWx1
ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1lc3NhZ2VTZXQ+KCk7CisgICAgICAg
IH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29kZVNldD4mIHNldENvZGUoaW50IHZhbHVl
KQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29kZVNl
dCksIHByb3BlcnR5X2NvZGVfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dEludGVnZXIoImNvZGUiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8
Q29kZVNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIFJlZjxFcnJvcj4gcmVsZWFzZSgpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1Nl
dCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXpl
b2YoRXJyb3IpID09IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7CisKKyAgICAg
ICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25SZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9u
TnVsbCgpOworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBXVEZNb3ZlKCpyZWludGVycHJldF9j
YXN0PFJlZjxFcnJvcj4qPigmanNvblJlc3VsdCkpOworICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvKgorICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1
Y3RvcjoKKyAgICAgKiBSZWY8RXJyb3I+IHJlc3VsdCA9IEVycm9yOjpjcmVhdGUoKQorICAgICAq
ICAgICAuc2V0TWVzc2FnZSguLi4pCisgICAgICogICAgIC5zZXRDb2RlKC4uLikKKyAgICAgKiAg
ICAgLnJlbGVhc2UoKTsKKyAgICAgKi8KKyAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4g
Y3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICB9Cit9OworCit9IC8vIERhdGFiYXNlCisKKworCit9
IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xPYmplY3RzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50
cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9j
b2xPYmplY3RzLmgiCisKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCituYW1lc3BhY2UgUHJv
dG9jb2wgeworCisKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5q
c29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworCisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisK
K30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJh
Y2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5k
RGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMt
d2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJh
Y2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIK
KyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbmNsdWRlIDx3dGYv
SlNPTlZhbHVlcy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJz
Lm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0
ZXJzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0
IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+CisKK19fYXR0cmlidXRlX18oKHZpc2liaWxp
dHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDog
TlNPYmplY3QKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgVGVzdFByb3RvY29sRGF0
YWJhc2VEb21haW5FdmVudERpc3BhdGNoZXIgKmRhdGFiYXNlRXZlbnREaXNwYXRjaGVyOworQGVu
ZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3Rv
Y29sQ29uZmlndXJhdGlvbi5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgor
I2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisjaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgorI2ltcG9ydCA8SmF2YVNj
cmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgorCit1c2lu
ZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29u
ZmlndXJhdGlvbgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRy
b2xsZXI7CisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5FdmVudERpc3BhdGNoZXIgKl9k
YXRhYmFzZUV2ZW50RGlzcGF0Y2hlcjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29u
dHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCit7Cisg
ICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBu
aWw7CisgICAgQVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250cm9sbGVyID0gY29udHJvbGxl
cjsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgW19kYXRh
YmFzZUV2ZW50RGlzcGF0Y2hlciByZWxlYXNlXTsKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisK
Ky0gKFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluRXZlbnREaXNwYXRjaGVyICopZGF0YWJhc2VF
dmVudERpc3BhdGNoZXIKK3sKKyAgICBpZiAoIV9kYXRhYmFzZUV2ZW50RGlzcGF0Y2hlcikKKyAg
ICAgICAgX2RhdGFiYXNlRXZlbnREaXNwYXRjaGVyID0gW1tUZXN0UHJvdG9jb2xEYXRhYmFzZURv
bWFpbkV2ZW50RGlzcGF0Y2hlciBhbGxvY10gaW5pdFdpdGhDb250cm9sbGVyOl9jb250cm9sbGVy
XTsKKyAgICByZXR1cm4gX2RhdGFiYXNlRXZlbnREaXNwYXRjaGVyOworfQorCitAZW5kCisKKwor
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29s
SW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisj
aW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwor
CitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5FdmVudERpc3BhdGNo
ZXIKK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwor
fQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3Bl
Y3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOwor
ICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxl
cik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQor
CistICh2b2lkKWRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnNXaXRoQ29sdW1uTmFtZXM6KE5T
QXJyYXkvKjxOU1N0cmluZz4qLyAqKiljb2x1bW5OYW1lcyBub3RlczooTlNTdHJpbmcgKiopbm90
ZXMgdGltZXN0YW1wOihkb3VibGUgKil0aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90b2NvbEpTT05P
YmplY3QgKiopdmFsdWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKilwYXlsb2Fk
IHNxbEVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqKXNxbEVycm9yIHNjcmVlbkNv
bG9yOihOU1N0cmluZyAqKilzY3JlZW5Db2xvciBhbHRlcm5hdGVDb2xvcnM6KE5TQXJyYXkvKjxO
U1N0cmluZz4qLyAqKilhbHRlcm5hdGVDb2xvcnMgcHJpbnRDb2xvcjooTlNTdHJpbmcgKiopcHJp
bnRDb2xvcgoreworICAgIGNvbnN0IEZyb250ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29udHJvbGxl
ci0+ZnJvbnRlbmRSb3V0ZXIoKTsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElP
TkFMX1BBUkFNRVRFUihjb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOworICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihub3RlcywgQCJub3RlcyIpOworICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUih2YWx1ZXMsIEAidmFs
dWVzIik7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHBh
eWxvYWQsIEAicGF5bG9hZCIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFM
X1BBUkFNRVRFUihzcWxFcnJvciwgQCJzcWxFcnJvciIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihzY3JlZW5Db2xvciwgQCJzY3JlZW5Db2xvciIpOwor
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihhbHRlcm5hdGVD
b2xvcnMsIEAiYWx0ZXJuYXRlQ29sb3JzIik7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURf
T1BUSU9OQUxfUEFSQU1FVEVSKHByaW50Q29sb3IsIEAicHJpbnRDb2xvciIpOworCisgICAgUmVm
PEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAg
IGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRhdGFiYXNlLmRpZEV4ZWN1dGVP
cHRpb25hbFBhcmFtZXRlcnMiX3MpOworICAgIFJlZjxKU09OOjpPYmplY3Q+IHBhcmFtc09iamVj
dCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgaWYgKGNvbHVtbk5hbWVzKQorICAgICAg
ICBwYXJhbXNPYmplY3QtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgdG9KU09OU3RyaW5nQXJy
YXkoKCpjb2x1bW5OYW1lcykpKTsKKyAgICBpZiAobm90ZXMpCisgICAgICAgIHBhcmFtc09iamVj
dC0+c2V0U3RyaW5nKCJub3RlcyJfcywgKCpub3RlcykpOworICAgIGlmICh0aW1lc3RhbXApCisg
ICAgICAgIHBhcmFtc09iamVjdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICgqdGltZXN0YW1w
KSk7CisgICAgaWYgKHZhbHVlcykKKyAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoInZh
bHVlcyJfcywgWygqdmFsdWVzKSB0b0pTT05PYmplY3RdKTsKKyAgICBpZiAocGF5bG9hZCkKKyAg
ICAgICAgcGFyYW1zT2JqZWN0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgWygqcGF5bG9hZCkgdG9K
U09OT2JqZWN0XSk7CisgICAgaWYgKHNxbEVycm9yKQorICAgICAgICBwYXJhbXNPYmplY3QtPnNl
dE9iamVjdCgic3FsRXJyb3IiX3MsIFsoKnNxbEVycm9yKSB0b0pTT05PYmplY3RdKTsKKyAgICBp
ZiAoc2NyZWVuQ29sb3IpCisgICAgICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJzY3JlZW5D
b2xvciJfcywgKCpzY3JlZW5Db2xvcikpOworICAgIGlmIChhbHRlcm5hdGVDb2xvcnMpCisgICAg
ICAgIHBhcmFtc09iamVjdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgdG9KU09OU3Ry
aW5nQXJyYXkoKCphbHRlcm5hdGVDb2xvcnMpKSk7CisgICAgaWYgKHByaW50Q29sb3IpCisgICAg
ICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCAoKnByaW50Q29sb3Ip
KTsKKyAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiX3MsIFdURk1vdmUocGFyYW1z
T2JqZWN0KSk7CisgICAgcm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5n
KCkpOworfQorCistICh2b2lkKWRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1dpdGhDb2x1
bW5OYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMgbm90ZXM6KE5TU3Ry
aW5nICopbm90ZXMgdGltZXN0YW1wOihkb3VibGUpdGltZXN0YW1wIHZhbHVlczooUldJUHJvdG9j
b2xKU09OT2JqZWN0ICopdmFsdWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBh
eWxvYWQgc3FsRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKilzcWxFcnJvciBzY3Jl
ZW5Db2xvcjooTlNTdHJpbmcgKilzY3JlZW5Db2xvciBhbHRlcm5hdGVDb2xvcnM6KE5TQXJyYXkv
KjxOU1N0cmluZz4qLyAqKWFsdGVybmF0ZUNvbG9ycyBwcmludENvbG9yOihOU1N0cmluZyAqKXBy
aW50Q29sb3IKK3sKKyAgICBjb25zdCBGcm9udGVuZFJvdXRlciYgcm91dGVyID0gX2NvbnRyb2xs
ZXItPmZyb250ZW5kUm91dGVyKCk7CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVE
X1BBUkFNRVRFUihjb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOworICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG5vdGVzLCBAIm5vdGVzIik7CisgICAgVEhST1df
RVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIodmFsdWVzLCBAInZhbHVlcyIpOworICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHBheWxvYWQsIEAicGF5bG9h
ZCIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHNxbEVycm9y
LCBAInNxbEVycm9yIik7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVU
RVIoc2NyZWVuQ29sb3IsIEAic2NyZWVuQ29sb3IiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9S
X1JFUVVJUkVEX1BBUkFNRVRFUihhbHRlcm5hdGVDb2xvcnMsIEAiYWx0ZXJuYXRlQ29sb3JzIik7
CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIocHJpbnRDb2xvciwg
QCJwcmludENvbG9yIik7CisKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpT
T046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9k
Il9zLCAiRGF0YWJhc2UuZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIl9zKTsKKyAgICBS
ZWY8SlNPTjo6T2JqZWN0PiBwYXJhbXNPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwor
ICAgIHBhcmFtc09iamVjdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB0b0pTT05TdHJpbmdB
cnJheShjb2x1bW5OYW1lcykpOworICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJub3RlcyJf
cywgbm90ZXMpOworICAgIHBhcmFtc09iamVjdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIHRp
bWVzdGFtcCk7CisgICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgW3ZhbHVl
cyB0b0pTT05PYmplY3RdKTsKKyAgICBwYXJhbXNPYmplY3QtPnNldFZhbHVlKCJwYXlsb2FkIl9z
LCBbcGF5bG9hZCB0b0pTT05PYmplY3RdKTsKKyAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgi
c3FsRXJyb3IiX3MsIFtzcWxFcnJvciB0b0pTT05PYmplY3RdKTsKKyAgICBwYXJhbXNPYmplY3Qt
PnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsIHNjcmVlbkNvbG9yKTsKKyAgICBwYXJhbXNPYmpl
Y3QtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KGFsdGVy
bmF0ZUNvbG9ycykpOworICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9z
LCBwcmludENvbG9yKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiX3MsIFdU
Rk1vdmUocGFyYW1zT2JqZWN0KSk7CisgICAgcm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+
dG9KU09OU3RyaW5nKCkpOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xFdmVudERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBh
cmFtZXRlcnMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNp
bXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3Iv
UldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+CisKKworQGNsYXNzIFRlc3RQcm90b2NvbERhdGFiYXNl
RXJyb3I7CisKKworCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0Bp
bnRlcmZhY2UgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciA6IFJXSVByb3RvY29sSlNPTk9iamVj
dAorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3RyaW5n
ICosIGlkPiAqKXBheWxvYWQ7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVj
dDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKKy0gKGluc3RhbmNldHlwZSlp
bml0V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBjb2RlOihpbnQpY29kZTsKKy8qIHJl
cXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqbWVzc2FnZTsK
Ky8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCBjb2RlOwor
QGVuZAorCisKKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50
ZXJmYWNlIFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluRXZlbnREaXNwYXRjaGVyIDogTlNPYmpl
Y3QKKy0gKHZvaWQpZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVyc1dpdGhDb2x1bW5OYW1lczoo
TlNBcnJheS8qPE5TU3RyaW5nPiovICoqKWNvbHVtbk5hbWVzIG5vdGVzOihOU1N0cmluZyAqKilu
b3RlcyB0aW1lc3RhbXA6KGRvdWJsZSAqKXRpbWVzdGFtcCB2YWx1ZXM6KFJXSVByb3RvY29sSlNP
Tk9iamVjdCAqKil2YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqKXBheWxv
YWQgc3FsRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKiopc3FsRXJyb3Igc2NyZWVu
Q29sb3I6KE5TU3RyaW5nICoqKXNjcmVlbkNvbG9yIGFsdGVybmF0ZUNvbG9yczooTlNBcnJheS8q
PE5TU3RyaW5nPiovICoqKWFsdGVybmF0ZUNvbG9ycyBwcmludENvbG9yOihOU1N0cmluZyAqKilw
cmludENvbG9yOworLSAodm9pZClkaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNXaXRoQ29s
dW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWNvbHVtbk5hbWVzIG5vdGVzOihOU1N0
cmluZyAqKW5vdGVzIHRpbWVzdGFtcDooZG91YmxlKXRpbWVzdGFtcCB2YWx1ZXM6KFJXSVByb3Rv
Y29sSlNPTk9iamVjdCAqKXZhbHVlcyBwYXlsb2FkOihSV0lQcm90b2NvbEpTT05PYmplY3QgKilw
YXlsb2FkIHNxbEVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICopc3FsRXJyb3Igc2Ny
ZWVuQ29sb3I6KE5TU3RyaW5nICopc2NyZWVuQ29sb3IgYWx0ZXJuYXRlQ29sb3JzOihOU0FycmF5
Lyo8TlNTdHJpbmc+Ki8gKilhbHRlcm5hdGVDb2xvcnMgcHJpbnRDb2xvcjooTlNTdHJpbmcgKilw
cmludENvbG9yOworQGVuZAorCisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1
aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4KKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wu
aAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNv
biBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQ
cm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKKyNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgor
I2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKworQGludGVyZmFjZSBUZXN0UHJvdG9jb2xEYXRh
YmFzZURvbWFpbkV2ZW50RGlzcGF0Y2hlciAoUHJpdmF0ZSkKKy0gKGluc3RhbmNldHlwZSlpbml0
V2l0aENvbnRyb2xsZXI6KEluc3BlY3Rvcjo6QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVy
Kiljb250cm9sbGVyOworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJu
YWwuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJh
bWV0ZXJzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1w
b3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFy
cmF5Q29udmVyc2lvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3RlbXBsYXRlPHR5
cGVuYW1lIE9iakNFbnVtVHlwZT4KK09wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29s
U3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNv
biBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNp
bXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9S
V0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0
b3I7CisKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChEYXRhYmFzZURv
bWFpbikKKworKyAodm9pZClfcGFyc2VEYXRhYmFzZUlkOihOU1N0cmluZyAqKilvdXRWYWx1ZSBm
cm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNlUHJpbWFyeUNvbG9yczooTlNT
dHJpbmcgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisrICh2b2lkKV9wYXJz
ZUNvbG9yTGlzdDooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2Fk
OihpZClwYXlsb2FkOworKyAodm9pZClfcGFyc2VFcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VF
cnJvciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKworQGVuZAorCitAaW1w
bGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChEYXRhYmFzZURvbWFpbikK
KworKyAodm9pZClfcGFyc2VEYXRhYmFzZUlkOihOU1N0cmluZyAqKilvdXRWYWx1ZSBmcm9tUGF5
bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5
bG9hZCwgW05TU3RyaW5nIGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gKE5TU3RyaW5nICopcGF5
bG9hZDsKK30KKworKyAodm9pZClfcGFyc2VQcmltYXJ5Q29sb3JzOihOU1N0cmluZyAqKilvdXRW
YWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
QkFEX1RZUEUocGF5bG9hZCwgW05TU3RyaW5nIGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gKE5T
U3RyaW5nICopcGF5bG9hZDsKK30KKworKyAodm9pZClfcGFyc2VDb2xvckxpc3Q6KE5TQXJyYXkv
KjxOU1N0cmluZz4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TQXJyYXkvKjxOU1N0cmlu
Zz4qLyBjbGFzc10pOworICAgICpvdXRWYWx1ZSA9IChOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilw
YXlsb2FkOworfQorCisrICh2b2lkKV9wYXJzZUVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVy
cm9yICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7CisgICAg
Km91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGFsbG9jXSBpbml0V2l0aFBh
eWxvYWQ6cGF5bG9hZF07Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMu
bW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25h
bC1wYXJhbWV0ZXJzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpT
T05PYmplY3RQcml2YXRlLmg+CisjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2ltcG9ydCA8
d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxl
bWVudGF0aW9uIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IKKworLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoUGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5
bG9hZAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4g
bmlsOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2Fk
W0AibWVzc2FnZSJdLCBAIm1lc3NhZ2UiKTsKKyAgICBzZWxmLm1lc3NhZ2UgPSBwYXlsb2FkW0Ai
bWVzc2FnZSJdOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShw
YXlsb2FkW0AiY29kZSJdLCBAImNvZGUiKTsKKyAgICBzZWxmLmNvZGUgPSBbcGF5bG9hZFtAImNv
ZGUiXSBpbnRlZ2VyVmFsdWVdOworCisgICAgcmV0dXJuIHNlbGY7Cit9CistIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopb2JqZWN0
Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEpTT05PYmplY3Q6W29iamVjdCB0
b0pTT05PYmplY3RdLmdldCgpXSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICByZXR1cm4g
c2VsZjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTWVzc2FnZTooTlNTdHJpbmcgKilt
ZXNzYWdlIGNvZGU6KGludCljb2RlCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkp
CisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVE
X1BST1BFUlRZKG1lc3NhZ2UsIEAibWVzc2FnZSIpOworCisgICAgc2VsZi5tZXNzYWdlID0gbWVz
c2FnZTsKKyAgICBzZWxmLmNvZGUgPSBjb2RlOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0g
KHZvaWQpc2V0TWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlCit7CisgICAgW3N1cGVyIHNldFN0
cmluZzptZXNzYWdlIGZvcktleTpAIm1lc3NhZ2UiXTsKK30KKworLSAoTlNTdHJpbmcgKiltZXNz
YWdlCit7CisgICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJtZXNzYWdlIl07Cit9CisK
Ky0gKHZvaWQpc2V0Q29kZTooaW50KWNvZGUKK3sKKyAgICBbc3VwZXIgc2V0SW50ZWdlcjpjb2Rl
IGZvcktleTpAImNvZGUiXTsKK30KKworLSAoaW50KWNvZGUKK3sKKyAgICByZXR1cm4gW3N1cGVy
IGludGVnZXJGb3JLZXk6QCJjb2RlIl07Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1jb21tYW5kLXRhcmdldFR5cGUt
bWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1jb21tYW5k
LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tZXJyb3IKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmExMzBhZDcwYzQwCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL2ZhaWwtb24tY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1
Z2dhYmxlVHlwZS5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBNYWxmb3JtZWQgZG9t
YWluIHNwZWNpZmljYXRpb246IGRvbWFpbiBEb21haW4gaGFzIGFuIGl0ZW0gaW4gdGFyZ2V0VHlw
ZXMgIlt1J3dvcmtlciddIiB0aGF0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgYW55IHZhbHVlIGluIGRl
YnVnZ2FibGVUeXBlcyAiW3UnamF2YXNjcmlwdCddIi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWNvbW1h
bmQtdGFyZ2V0VHlwZXMtdHlwZS5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tY29tbWFuZC10YXJnZXRUeXBl
cy10eXBlLmpzb24tZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu
Ljk5ZjVlMWE0YThlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tY29tbWFuZC10YXJnZXRUeXBl
cy10eXBlLmpzb24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6IE1hbGZvcm1lZCBkb21haW4g
c3BlY2lmaWNhdGlvbjogdGFyZ2V0VHlwZXMgbGlzdCBmb3IgY29tbWFuZCBQYWdlT25seSBpcyBu
b3QgYW4gYXJyYXkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlwZXMtdmFsdWUu
anNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9leHBlY3RlZC9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlwZXMtdmFsdWUuanNvbi1lcnJvcgpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMjFhMzY1Njk5MjYKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZXhwZWN0ZWQvZmFpbC1vbi1jb21tYW5kLXRhcmdldFR5cGVzLXZhbHVlLmpzb24tZXJyb3IK
QEAgLTAsMCArMSBAQAorRVJST1I6IE1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjogdGFy
Z2V0VHlwZXMgbGlzdCBmb3IgY29tbWFuZCBQYWdlT25seSBpcyBhbiB1bnN1cHBvcnRlZCBzdHJp
bmcuIFdhczogIlt1J3BhZ2VlJ10iLCBBbGxvd2VkIHZhbHVlczogc2VydmljZS13b3JrZXIsIGph
dmFzY3JpcHQsIHdvcmtlciwgcGFnZSwgd2ViLXBhZ2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWRvbWFp
bi1kZWJ1Z2dhYmxlVHlwZXMtdHlwZS5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZG9tYWluLWRlYnVnZ2Fi
bGVUeXBlcy10eXBlLmpzb24tZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAuLjJiODk4YmE3YmU3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZG9tYWluLWRlYnVn
Z2FibGVUeXBlcy10eXBlLmpzb24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6IE1hbGZvcm1l
ZCBkb21haW4gc3BlY2lmaWNhdGlvbjogZGVidWdnYWJsZVR5cGVzIGZvciBkb21haW4gV2ViT25s
eSBpcyBub3QgYW4gYXJyYXkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWRvbWFpbi1kZWJ1Z2dhYmxlVHlw
ZXMtdmFsdWUuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMtdmFsdWUu
anNvbi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYmY3MWQ0
NzBjYmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4tZGVidWdnYWJsZVR5cGVzLXZh
bHVlLmpzb24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6IE1hbGZvcm1lZCBkb21haW4gc3Bl
Y2lmaWNhdGlvbjogZGVidWdnYWJsZVR5cGVzIGZvciBkb21haW4gV2ViT25seSBpcyBhbiB1bnN1
cHBvcnRlZCBzdHJpbmcuIFdhczogIlt1J3dlYmInXSIsIEFsbG93ZWQgdmFsdWVzOiBzZXJ2aWNl
LXdvcmtlciwgamF2YXNjcmlwdCwgcGFnZSwgd2ViLXBhZ2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWRv
bWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLWVycm9y
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVk
L2ZhaWwtb24tZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBl
Lmpzb24tZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjg2N2Uz
NTAwODk4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hp
bmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6
IE1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjogY29tbWFuZCBDb21tYW5kIGhhcyBhbiBp
dGVtIGluIHRhcmdldFR5cGVzICJbdSd3b3JrZXInXSIgdGhhdCBpcyBub3Qgc3VwcG9ydGVkIGJ5
IGFueSB2YWx1ZSBpbiBkZWJ1Z2dhYmxlVHlwZXMgIlt1J2phdmFzY3JpcHQnXSIuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZXMtdHlwZS5qc29uLWVycm9yIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZG9t
YWluLXRhcmdldFR5cGVzLXR5cGUuanNvbi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMC4uZTlhMzU5MzNhMzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kb21h
aW4tdGFyZ2V0VHlwZXMtdHlwZS5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBNYWxm
b3JtZWQgZG9tYWluIHNwZWNpZmljYXRpb246IHRhcmdldFR5cGVzIGZvciBkb21haW4gUGFnZU9u
bHkgaXMgbm90IGFuIGFycmF5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZXMt
dmFsdWUuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWRvbWFpbi10YXJnZXRUeXBlcy12YWx1ZS5qc29uLWVy
cm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40NjgwN2Y3MmZjNAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWRvbWFpbi10YXJnZXRUeXBlcy12YWx1ZS5qc29uLWVy
cm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBNYWxmb3JtZWQgZG9tYWluIHNwZWNpZmljYXRpb246
IHRhcmdldFR5cGVzIGZvciBkb21haW4gUGFnZU9ubHkgaXMgYW4gdW5zdXBwb3J0ZWQgc3RyaW5n
LiBXYXM6ICJbdSdwYWdlZSddIiwgQWxsb3dlZCB2YWx1ZXM6IHNlcnZpY2Utd29ya2VyLCBqYXZh
c2NyaXB0LCB3b3JrZXIsIHBhZ2UsIHdlYi1wYWdlCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNh
dGUtY29tbWFuZC1jYWxsLXBhcmFtZXRlci1uYW1lcy5qc29uLWVycm9yIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGlj
YXRlLWNvbW1hbmQtY2FsbC1wYXJhbWV0ZXItbmFtZXMuanNvbi1lcnJvcgpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uM2Y3NTZkZTMyNTAKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
ZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1jYWxsLXBhcmFtZXRlci1uYW1lcy5qc29uLWVycm9y
CkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBNYWxmb3JtZWQgZG9tYWluIHNwZWNpZmljYXRpb246IGNh
bGwgcGFyYW1ldGVyIGxpc3QgZm9yIGNvbW1hbmQgcHJvY2Vzc1BvaW50cyBoYXMgZHVwbGljYXRl
IHBhcmFtZXRlciBuYW1lcwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLWNvbW1hbmQtcmV0
dXJuLXBhcmFtZXRlci1uYW1lcy5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLWNvbW1hbmQt
cmV0dXJuLXBhcmFtZXRlci1uYW1lcy5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwLi5lYTE0OGZmNjdjOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWR1
cGxpY2F0ZS1jb21tYW5kLXJldHVybi1wYXJhbWV0ZXItbmFtZXMuanNvbi1lcnJvcgpAQCAtMCww
ICsxIEBACitFUlJPUjogTWFsZm9ybWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9uOiByZXR1cm4gcGFy
YW1ldGVyIGxpc3QgZm9yIGNvbW1hbmQgcHJvY2Vzc1BvaW50cyBoYXMgZHVwbGljYXRlIHBhcmFt
ZXRlciBuYW1lcwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLWV2ZW50LXBhcmFtZXRlci1u
YW1lcy5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLWV2ZW50LXBhcmFtZXRlci1uYW1lcy5q
c29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jNzFiYmQy
MWMyYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS1ldmVudC1wYXJhbWV0ZXIt
bmFtZXMuanNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjogTWFsZm9ybWVkIGRvbWFpbiBz
cGVjaWZpY2F0aW9uOiBwYXJhbWV0ZXIgbGlzdCBmb3IgZXZlbnQgcHJvY2Vzc2VkUG9pbnRzIGhh
cyBkdXBsaWNhdGUgcGFyYW1ldGVyIG5hbWVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUt
dHlwZS1kZWNsYXJhdGlvbnMuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLWRlY2xh
cmF0aW9ucy5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
Li40NDdjZGY4ZTI4ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLWRl
Y2xhcmF0aW9ucy5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBEdXBsaWNhdGUgdHlw
ZSBkZWNsYXJhdGlvbjogUnVudGltZS5SZW1vdGVPYmplY3RJZApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24t
ZHVwbGljYXRlLXR5cGUtbWVtYmVyLW5hbWVzLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUt
dHlwZS1tZW1iZXItbmFtZXMuanNvbi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMC4uZDUzNzZhNzdhNDUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNh
dGUtdHlwZS1tZW1iZXItbmFtZXMuanNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjogTWFs
Zm9ybWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9uOiB0eXBlIGRlY2xhcmF0aW9uIGZvciBQb2ludCBo
YXMgZHVwbGljYXRlIG1lbWJlciBuYW1lcwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZW51bS13aXRoLW5v
LXZhbHVlcy5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZW51bS13aXRoLW5vLXZhbHVlcy5qc29uLWVycm9y
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yNjU1YzJiOTA3ZQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWVudW0td2l0aC1uby12YWx1ZXMuanNvbi1lcnJvcgpAQCAt
MCwwICsxIEBACitFUlJPUjogVHlwZSByZWZlcmVuY2Ugd2l0aCBlbnVtIHZhbHVlcyBtdXN0IGhh
dmUgYXQgbGVhc3Qgb25lIGVudW0gdmFsdWUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1ldmVudC10YXJn
ZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLWVycm9yIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24t
ZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1lcnJv
cgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYjY1ZDdhMGQxOTYKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1ldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1k
ZWJ1Z2dhYmxlVHlwZS5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBNYWxmb3JtZWQg
ZG9tYWluIHNwZWNpZmljYXRpb246IGV2ZW50IEV2ZW50IGhhcyBhbiBpdGVtIGluIHRhcmdldFR5
cGVzICJbdSd3b3JrZXInXSIgdGhhdCBpcyBub3Qgc3VwcG9ydGVkIGJ5IGFueSB2YWx1ZSBpbiBk
ZWJ1Z2dhYmxlVHlwZXMgIlt1J2phdmFzY3JpcHQnXSIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1ldmVu
dC10YXJnZXRUeXBlcy10eXBlLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1ldmVudC10YXJnZXRUeXBlcy10
eXBlLmpzb24tZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjc0
MDNlMTNhODA5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlwZXMtdHlw
ZS5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBNYWxmb3JtZWQgZG9tYWluIHNwZWNp
ZmljYXRpb246IHRhcmdldFR5cGVzIGZvciBldmVudCBQYWdlT25seSBpcyBub3QgYW4gYXJyYXkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9leHBlY3RlZC9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGVzLXZhbHVlLmpzb24tZXJyb3IgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFp
bC1vbi1ldmVudC10YXJnZXRUeXBlcy12YWx1ZS5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44MzAxMmE5ZmU0ZQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWls
LW9uLWV2ZW50LXRhcmdldFR5cGVzLXZhbHVlLmpzb24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJS
T1I6IE1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjogdGFyZ2V0VHlwZXMgZm9yIGV2ZW50
IFBhZ2VPbmx5IGlzIGFuIHVuc3VwcG9ydGVkIHN0cmluZy4gV2FzOiAiW3UncGFnZWUnXSIsIEFs
bG93ZWQgdmFsdWVzOiBzZXJ2aWNlLXdvcmtlciwgamF2YXNjcmlwdCwgd29ya2VyLCBwYWdlLCB3
ZWItcGFnZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tbnVtYmVyLXR5cGVkLW9wdGlvbmFsLXBhcmFtZXRl
ci1mbGFnLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVy
LWZsYWcuanNvbi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u
OTdiMmFmMGU0N2UKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9u
YWwtcGFyYW1ldGVyLWZsYWcuanNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjogVGhlICdv
cHRpb25hbCcgZmxhZyBmb3IgYSBwYXJhbWV0ZXIgbXVzdCBiZSBhIGJvb2xlYW4gbGl0ZXJhbC4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9leHBlY3RlZC9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29u
LWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4
cGVjdGVkL2ZhaWwtb24tbnVtYmVyLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24tZXJy
b3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjg2ZGYzNzUwYzFhCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tbnVtYmVyLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVy
Lmpzb24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6IFRoZSAnb3B0aW9uYWwnIGZsYWcgZm9y
IGEgdHlwZSBtZW1iZXIgbXVzdCBiZSBhIGJvb2xlYW4gbGl0ZXJhbC4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWls
LW9uLXN0cmluZy10eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29uLWVycm9yIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwt
b24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24tZXJyb3IKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjk3YjJhZjBlNDdlCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4
cGVjdGVkL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24t
ZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6IFRoZSAnb3B0aW9uYWwnIGZsYWcgZm9yIGEgcGFy
YW1ldGVyIG11c3QgYmUgYSBib29sZWFuIGxpdGVyYWwuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1zdHJp
bmctdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXN0cmluZy10
eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwLi44NmRmMzc1MGMxYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9u
LXN0cmluZy10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29uLWVycm9yCkBAIC0wLDAgKzEg
QEAKK0VSUk9SOiBUaGUgJ29wdGlvbmFsJyBmbGFnIGZvciBhIHR5cGUgbWVtYmVyIG11c3QgYmUg
YSBib29sZWFuIGxpdGVyYWwuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi10eXBlLWRlY2xhcmF0aW9uLXVz
aW5nLXR5cGUtcmVmZXJlbmNlLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi10eXBlLWRlY2xhcmF0aW9uLXVz
aW5nLXR5cGUtcmVmZXJlbmNlLmpzb24tZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAuLjQyZjU3NTNhNDM5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS1k
ZWNsYXJhdGlvbi11c2luZy10eXBlLXJlZmVyZW5jZS5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAK
K0VSUk9SOiBUeXBlIHJlZmVyZW5jZSBjYW5ub3QgaGF2ZSBib3RoICd0eXBlJyBhbmQgJyRyZWYn
IGtleXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi10eXBlLXJlZmVyZW5jZS1hcy1wcmltaXRpdmUtdHlw
ZS5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS1yZWZlcmVuY2UtYXMtcHJpbWl0aXZlLXR5cGUuanNv
bi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZDc2YmMxYzc3
NzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi10eXBlLXJlZmVyZW5jZS1hcy1wcmltaXRpdmUt
dHlwZS5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBUeXBlIHJlZmVyZW5jZSAnRGF0
YWJhc2VJZCcgaXMgbm90IGEgcHJpbWl0aXZlIHR5cGUuIEFsbG93ZWQgdmFsdWVzOiBpbnRlZ2Vy
LCBudW1iZXIsIHN0cmluZywgYm9vbGVhbiwgZW51bSwgb2JqZWN0LCBhcnJheSwgYW55CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvZmFpbC1vbi10eXBlLXdpdGgtbG93ZXJjYXNlLW5hbWUuanNvbi1lcnJvciBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9u
LXR5cGUtd2l0aC1sb3dlcmNhc2UtbmFtZS5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwLi40ZTQ2MjI1MGMwYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9u
LXR5cGUtd2l0aC1sb3dlcmNhc2UtbmFtZS5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9S
OiBUeXBlcyBtdXN0IGJlZ2luIHdpdGggYW4gdXBwZXJjYXNlIGNoYXJhY3Rlci4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1kZWNsYXJhdGlvbi5qc29u
LWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4
cGVjdGVkL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLWRlY2xhcmF0aW9u
Lmpzb24tZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjJkMzhl
NjQ2NzVkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1p
bi10eXBlLWRlY2xhcmF0aW9uLmpzb24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6IFR5cGUg
cmVmZXJlbmNlICdkcmFnb24nIGlzIG5vdCBhIHByaW1pdGl2ZSB0eXBlLiBBbGxvd2VkIHZhbHVl
czogaW50ZWdlciwgbnVtYmVyLCBzdHJpbmcsIGJvb2xlYW4sIGVudW0sIG9iamVjdCwgYXJyYXks
IGFueQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLW1l
bWJlci5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLW1l
bWJlci5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5m
YWY2NjcyY2JlZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVu
Y2UtaW4tdHlwZS1tZW1iZXIuanNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjogTG9va3Vw
IGZhaWxlZCBmb3IgdHlwZSByZWZlcmVuY2U6IENvbG9yIChyZWZlcmVuY2VkIGZyb20gZG9tYWlu
OiBGYW50YXN5KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2dlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJk
cy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC9nZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbi1y
ZXN1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmM0ZjI1MTE5NTJi
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL2dlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5q
c29uLXJlc3VsdApAQCAtMCwwICsxLDExNjggQEAKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JC
YWNrZW5kQ29tbWFuZHMuanMuaW4KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBn
ZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbiBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKy8vIE5ldHdvcmsxCitJbnNwZWN0b3JCYWNrZW5kLnJl
Z2lzdGVyRG9tYWluKCJOZXR3b3JrMSIsIG51bGwpOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rl
ckNvbW1hbmQoIk5ldHdvcmsxLmxvYWRSZXNvdXJjZSIsIG51bGwsIFtdLCBbXSk7CitJbnNwZWN0
b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJOZXR3b3JrMSIsIG51bGwpOworCisvLyBOZXR3b3Jr
MworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiTmV0d29yazMiLCBudWxsKTsKK0lu
c3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudCgiTmV0d29yazMucmVzb3VyY2VMb2FkZWQiLCBu
dWxsLCBbXSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyTmV0d29yazNEaXNwYXRjaGVyID0g
SW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRpc3BhdGNoZXIuYmluZChJbnNwZWN0b3JCYWNrZW5k
LCAiTmV0d29yazMiKTsKK0luc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIk5ldHdvcmsz
IiwgbnVsbCk7CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcy5pbgor
CisjIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1
cmUtZ3VhcmRzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisj
cHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Igewor
CitjbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdm9pZCBz
ZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hl
cikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQorICAgIEJh
Y2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFj
a2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KK3ByaXZhdGU6CisgICAgUmVmUHRyPEJhY2tlbmREaXNw
YXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOworfTsKKworCitjbGFzcyBBbHRlcm5hdGVOZXR3
b3JrMUJhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVy
IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5BbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRj
aGVyKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZShsb25nIGNhbGxJZCkgPSAw
OworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3Bh
dGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21h
aW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0
cy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0
b3IgeworCit0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKworI2lmIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorY2xhc3MgQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5k
RGlzcGF0Y2hlcjsKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKKworY2xhc3MgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgeworcHVibGlj
OgorICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UoRXJyb3JTdHJpbmcmKSA9IDA7Citwcm90
ZWN0ZWQ6CisgICAgdmlydHVhbCB+TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsK
K307CisKK2NsYXNzIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3Vw
cGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8TmV0
d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgTmV0d29y
azFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVx
dWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdl
KSBmaW5hbDsKK3ByaXZhdGU6CisgICAgdm9pZCBsb2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0SWQs
IFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisjaWYgRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCitwdWJsaWM6CisgICAgdm9pZCBzZXRBbHRlcm5hdGVE
aXNwYXRjaGVyKEFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURp
c3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsg
fQorcHJpdmF0ZToKKyAgICBBbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKiBtX2Fs
dGVybmF0ZURpc3BhdGNoZXIgeyBudWxscHRyIH07CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCitwcml2YXRlOgorICAgIE5ldHdvcmsxQmFja2VuZERp
c3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImLCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlciopOworICAgIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50IHsg
bnVsbHB0ciB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6
IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmRE
aXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0
ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0QmFj
a2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JG
cm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8
d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCisj
aWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjaW5jbHVkZSAiVGVz
dEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgorI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworTmV0
d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5OZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlcigpIHsgfQorCitSZWY8TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4gTmV0d29yazFC
YWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0
Y2hlciwgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQoreworICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3Bh
dGNoZXIsIGFnZW50KSk7Cit9CisKK05ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6Ok5ldHdvcmsx
QmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBO
ZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCisgICAgOiBTdXBwbGVtZW50
YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKKyAgICAsIG1fYWdlbnQoYWdl
bnQpCit7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9t
YWluKCJOZXR3b3JrMSJfcywgdGhpcyk7Cit9CisKK3ZvaWQgTmV0d29yazFCYWNrZW5kRGlzcGF0
Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8
SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCit7CisgICAgUmVmPE5ldHdvcmsxQmFja2VuZERpc3Bh
dGNoZXI+IHByb3RlY3QoKnRoaXMpOworCisgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1l
dGVyczsKKyAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFyYW1ldGVycyk7CisK
KyAgICBpZiAobWV0aG9kID09ICJsb2FkUmVzb3VyY2UiKSB7CisgICAgICAgIGxvYWRSZXNvdXJj
ZShyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5k
RGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazEuIiArIG1ldGhvZCArICInIHdh
cyBub3QgZm91bmQiKTsKK30KKwordm9pZCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpsb2Fk
UmVzb3VyY2UobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCit7CisjaWYg
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisgICAgaWYgKG1fYWx0ZXJu
YXRlRGlzcGF0Y2hlcikgeworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNv
dXJjZShyZXF1ZXN0SWQpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmIC8vIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCisgICAgRXJyb3JTdHJpbmcgZXJy
b3I7CisgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KTsKKyAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2UoZXJyb3IpOworCisgICAgaWYgKCFlcnJvci5s
ZW5ndGgoKSkKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVl
c3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7CisgICAgZWxzZQorICAgICAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2
ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
KworIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4g
RmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7
CisKK2NsYXNzIEZyb250ZW5kUm91dGVyOworCitjbGFzcyBOZXR3b3JrM0Zyb250ZW5kRGlzcGF0
Y2hlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgTmV0d29y
azNGcm9udGVuZERpc3BhdGNoZXIoRnJvbnRlbmRSb3V0ZXImIGZyb250ZW5kUm91dGVyKSA6IG1f
ZnJvbnRlbmRSb3V0ZXIoZnJvbnRlbmRSb3V0ZXIpIHsgfQorICAgIHZvaWQgcmVzb3VyY2VMb2Fk
ZWQoKTsKK3ByaXZhdGU6CisgICAgRnJvbnRlbmRSb3V0ZXImIG1fZnJvbnRlbmRSb3V0ZXI7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5k
RGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMu
Y3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13
aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0
Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91
dGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVj
dG9yIHsKKwordm9pZCBOZXR3b3JrM0Zyb250ZW5kRGlzcGF0Y2hlcjo6cmVzb3VyY2VMb2FkZWQo
KQoreworICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJOZXR3b3Jr
My5yZXNvdXJjZUxvYWRlZCJfcyk7CisKKyAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChq
c29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+CisjaW5jbHVkZSA8
d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCituYW1lc3Bh
Y2UgUHJvdG9jb2wgeworCisKKworLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCituYW1lc3BhY2Ug
TmV0d29yazIgeworY2xhc3MgTmV0d29ya0Vycm9yOworfSAvLyBOZXR3b3JrMgorLy8gRW5kIG9m
IGZvcndhcmQgZGVjbGFyYXRpb25zLgorCisKKworCituYW1lc3BhY2UgTmV0d29yazIgeworCitj
bGFzcyBOZXR3b3JrRXJyb3IgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CitwdWJsaWM6Cisg
ICAgZW51bSB7CisgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKKyAgICAgICAgTWVzc2FnZVNldCA9
IDEgPDwgMCwKKyAgICAgICAgQ29kZVNldCA9IDEgPDwgMSwKKyAgICAgICAgQWxsRmllbGRzU2V0
ID0gKE1lc3NhZ2VTZXQgfCBDb2RlU2V0KQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTxpbnQgU1RB
VEU+CisgICAgY2xhc3MgQnVpbGRlciB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPEpT
T046Ok9iamVjdD4gbV9yZXN1bHQ7CisKKyAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxk
ZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOworICAg
ICAgICB9CisKKyAgICAgICAgQnVpbGRlcihSZWY8LypOZXR3b3JrRXJyb3IqL0pTT046Ok9iamVj
dD4mJiBvYmplY3QpCisgICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKKyAg
ICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQs
IGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CisgICAgICAgIH0KKyAgICAgICAg
ZnJpZW5kIGNsYXNzIE5ldHdvcmtFcnJvcjsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgQnVpbGRl
cjxTVEFURSB8IE1lc3NhZ2VTZXQ+JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYgdmFsdWUpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNZXNzYWdlU2V0
KSwgcHJvcGVydHlfbWVzc2FnZV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0U3RyaW5nKCJtZXNzYWdlIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0
YXRlPE1lc3NhZ2VTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
Q29kZVNldD4mIHNldENvZGUoaW50IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVCghKFNUQVRFICYgQ29kZVNldCksIHByb3BlcnR5X2NvZGVfYWxyZWFkeV9zZXQp
OworICAgICAgICAgICAgbV9yZXN1bHQtPnNldEludGVnZXIoImNvZGUiX3MsIHZhbHVlKTsKKyAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29kZVNldD4oKTsKKyAgICAgICAgfQorCisgICAg
ICAgIFJlZjxOZXR3b3JrRXJyb3I+IHJlbGVhc2UoKQorICAgICAgICB7CisgICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkp
OworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKE5ldHdvcmtFcnJvcikgPT0gc2l6
ZW9mKEpTT046Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsKKworICAgICAgICAgICAgUmVmPEpTT046
Ok9iamVjdD4ganNvblJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAg
ICAgICBhdXRvIHJlc3VsdCA9IFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPE5ldHdvcmtF
cnJvcj4qPigmanNvblJlc3VsdCkpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAg
ICAgfQorICAgIH07CisKKyAgICAvKgorICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKKyAg
ICAgKiBSZWY8TmV0d29ya0Vycm9yPiByZXN1bHQgPSBOZXR3b3JrRXJyb3I6OmNyZWF0ZSgpCisg
ICAgICogICAgIC5zZXRNZXNzYWdlKC4uLikKKyAgICAgKiAgICAgLnNldENvZGUoLi4uKQorICAg
ICAqICAgICAucmVsZWFzZSgpOworICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRz
U2V0PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+
KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOworICAgIH0KK307CisKK30gLy8gTmV0d29yazIKKwor
CisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgor
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbE9iamVjdHMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
Z2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
VGVzdFByb3RvY29sT2JqZWN0cy5oIgorCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFt
ZXNwYWNlIFByb3RvY29sIHsKKworCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMu
Y3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1m
ZWF0dXJlLWd1YXJkcy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNw
YXRjaGVycy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworQHByb3RvY29sIFRlc3RQ
cm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcjsKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisK
KworY2xhc3MgT2JqQ0luc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBw
dWJsaWMgQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciB7CisgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgT2JqQ0luc3BlY3Rvck5ldHdvcmsxQmFja2Vu
ZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyPiBoYW5kbGVy
KSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9CisgICAgdm9pZCBsb2FkUmVzb3VyY2UobG9uZyBy
ZXF1ZXN0SWQpIGZpbmFsOworcHJpdmF0ZToKKyAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29s
TmV0d29yazFEb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKK307CisKK30gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVy
cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0K
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgt
ZmVhdHVyZS1ndWFyZHMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3Bh
dGNoZXJzLmgiCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2luY2x1ZGUg
IlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVz
Lmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit2b2lkIE9iakNJbnNwZWN0b3JOZXR3b3Jr
MUJhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0SWQpCit7CisgICAg
aWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGxvYWRSZXNvdXJj
ZVdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgeworICAgICAgICBiYWNrZW5k
RGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3Bh
dGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmsxLmxvYWRSZXNvdXJjZScgd2FzIG5vdCBm
b3VuZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3Jz
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZCBlcnJvckNhbGxiYWNrID0gXihO
U1N0cmluZyAqZXJyb3IpIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJv
dG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJy
b3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwor
ICAgIH07CisKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeeworICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
LCBmYWxzZSk7CisgICAgfTsKKworICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZVdpdGhFcnJv
ckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107
Cit9CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbi5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJh
dGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+
CisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBU
ZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKK0Bwcm9wZXJ0eSAobm9uYXRvbWlj
LCByZXRhaW4sIHNldHRlcj1zZXROZXR3b3JrMUhhbmRsZXI6KSBpZDxUZXN0UHJvdG9jb2xOZXR3
b3JrMURvbWFpbkhhbmRsZXI+IG5ldHdvcmsxSGFuZGxlcjsKK0Bwcm9wZXJ0eSAobm9uYXRvbWlj
LCByZWFkb25seSkgVGVzdFByb3RvY29sTmV0d29yazNEb21haW5FdmVudERpc3BhdGNoZXIgKm5l
dHdvcmszRXZlbnREaXNwYXRjaGVyOworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1
cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9t
YWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCisKKyNp
bXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNr
ZW5kRGlzcGF0Y2hlcnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3Bh
dGNoYWJsZUFnZW50Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3Bl
Y3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVy
bmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXJzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisK
K0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCit7CisgICAgQXVnbWVu
dGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKKyAgICBpZDxUZXN0UHJvdG9j
b2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+IF9uZXR3b3JrMUhhbmRsZXI7CisgICAgVGVzdFByb3Rv
Y29sTmV0d29yazNEb21haW5FdmVudERpc3BhdGNoZXIgKl9uZXR3b3JrM0V2ZW50RGlzcGF0Y2hl
cjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJ
bnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0
XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNvbnRy
b2xsZXIpOworICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKKyAgICByZXR1cm4gc2VsZjsK
K30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgW19uZXR3b3JrMUhhbmRsZXIgcmVsZWFzZV07
CisgICAgW19uZXR3b3JrM0V2ZW50RGlzcGF0Y2hlciByZWxlYXNlXTsKKyAgICBbc3VwZXIgZGVh
bGxvY107Cit9CisKKy0gKHZvaWQpc2V0TmV0d29yazFIYW5kbGVyOihpZDxUZXN0UHJvdG9jb2xO
ZXR3b3JrMURvbWFpbkhhbmRsZXI+KWhhbmRsZXIKK3sKKyAgICBpZiAoaGFuZGxlciA9PSBfbmV0
d29yazFIYW5kbGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBbX25ldHdvcmsxSGFuZGxlciBy
ZWxlYXNlXTsKKyAgICBfbmV0d29yazFIYW5kbGVyID0gW2hhbmRsZXIgcmV0YWluXTsKKworICAg
IGF1dG8gYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IG1ha2VVbmlxdWU8T2JqQ0luc3BlY3Rvck5ldHdv
cmsxQmFja2VuZERpc3BhdGNoZXI+KGhhbmRsZXIpOworICAgIGF1dG8gYWx0ZXJuYXRlQWdlbnQg
PSBtYWtlVW5pcXVlPEFsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50PE5ldHdvcmsxQmFja2VuZERp
c3BhdGNoZXIsIEFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI+PigiTmV0d29yazEi
X3MsICpfY29udHJvbGxlciwgV1RGTW92ZShhbHRlcm5hdGVEaXNwYXRjaGVyKSk7CisgICAgX2Nv
bnRyb2xsZXItPmFwcGVuZEV4dHJhQWdlbnQoV1RGTW92ZShhbHRlcm5hdGVBZ2VudCkpOworfQor
CistIChpZDxUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+KW5ldHdvcmsxSGFuZGxl
cgoreworICAgIHJldHVybiBfbmV0d29yazFIYW5kbGVyOworfQorCistIChUZXN0UHJvdG9jb2xO
ZXR3b3JrM0RvbWFpbkV2ZW50RGlzcGF0Y2hlciAqKW5ldHdvcmszRXZlbnREaXNwYXRjaGVyCit7
CisgICAgaWYgKCFfbmV0d29yazNFdmVudERpc3BhdGNoZXIpCisgICAgICAgIF9uZXR3b3JrM0V2
ZW50RGlzcGF0Y2hlciA9IFtbVGVzdFByb3RvY29sTmV0d29yazNEb21haW5FdmVudERpc3BhdGNo
ZXIgYWxsb2NdIGluaXRXaXRoQ29udHJvbGxlcjpfY29udHJvbGxlcl07CisgICAgcmV0dXJuIF9u
ZXR3b3JrM0V2ZW50RGlzcGF0Y2hlcjsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
RXZlbnREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdl
bmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIK
KworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDx3dGYv
SlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50
YXRpb24gVGVzdFByb3RvY29sTmV0d29yazNEb21haW5FdmVudERpc3BhdGNoZXIKK3sKKyAgICBB
dWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworfQorCistIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xs
ZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2Vs
ZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2Nv
bnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXJl
c291cmNlTG9hZGVkCit7CisgICAgY29uc3QgRnJvbnRlbmRSb3V0ZXImIHJvdXRlciA9IF9jb250
cm9sbGVyLT5mcm9udGVuZFJvdXRlcigpOworCisgICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1l
c3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGpzb25NZXNzYWdlLT5zZXRTdHJp
bmcoIm1ldGhvZCJfcywgIk5ldHdvcmszLnJlc291cmNlTG9hZGVkIl9zKTsKKyAgICByb3V0ZXIu
c2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cit9CisKK0BlbmQKKworCisj
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
Z2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24u
aD4KKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgorCisK
K0BjbGFzcyBUZXN0UHJvdG9jb2xOZXR3b3JrMk5ldHdvcmtFcnJvcjsKKworCisKK19fYXR0cmli
dXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xO
ZXR3b3JrMk5ldHdvcmtFcnJvciA6IFJXSVByb3RvY29sSlNPTk9iamVjdAorLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxv
YWQ7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xK
U09OT2JqZWN0ICopanNvbk9iamVjdDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6
KE5TU3RyaW5nICopbWVzc2FnZSBjb2RlOihpbnQpY29kZTsKKy8qIHJlcXVpcmVkICovIEBwcm9w
ZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqbWVzc2FnZTsKKy8qIHJlcXVpcmVkICov
IEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCBjb2RlOworQGVuZAorCitAcHJvdG9j
b2wgVGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyIDxOU09iamVjdD4KK0BvcHRpb25h
bAorLSAodm9pZClsb2FkUmVzb3VyY2VXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmlu
ZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKHZvaWQpKXN1
Y2Nlc3NDYWxsYmFjazsKK0BlbmQKKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1
bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbE5ldHdvcmszRG9tYWluRXZlbnREaXNwYXRj
aGVyIDogTlNPYmplY3QKKy0gKHZvaWQpcmVzb3VyY2VMb2FkZWQ7CitAZW5kCisKKworI2ltcG9y
dCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgor
CisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xJbnRlcm5hbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJh
dGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRl
c3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9B
dWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVz
Lmg+CisKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sTmV0d29yazNEb21haW5FdmVudERpc3BhdGNo
ZXIgKFByaXZhdGUpCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihJbnNwZWN0
b3I6OkF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcjsKK0BlbmQKKwor
CisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKworIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wu
aCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4K
KworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlw
ZT4KK09wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpOworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFBy
b3RvY29sVHlwZVBhcnNlci5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNP
Tk9iamVjdFByaXZhdGUuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGludGVy
ZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKE5ldHdvcmsyRG9tYWluKQorCisrICh2
b2lkKV9wYXJzZU5ldHdvcmtFcnJvcjooVGVzdFByb3RvY29sTmV0d29yazJOZXR3b3JrRXJyb3Ig
Kiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisKK0BlbmQKKworQGltcGxlbWVu
dGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoTmV0d29yazJEb21haW4pCisKKysg
KHZvaWQpX3BhcnNlTmV0d29ya0Vycm9yOihUZXN0UHJvdG9jb2xOZXR3b3JrMk5ldHdvcmtFcnJv
ciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOworICAgICpv
dXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sTmV0d29yazJOZXR3b3JrRXJyb3IgYWxsb2NdIGluaXRX
aXRoUGF5bG9hZDpwYXlsb2FkXTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xU
eXBlcy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFp
bnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAi
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJ
UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4K
KyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7
CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xOZXR3b3JrMk5ldHdvcmtFcnJvcgorCist
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0
cmluZyAqLCBpZD4gKilwYXlsb2FkCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkp
CisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVE
X1BST1BFUlRZKHBheWxvYWRbQCJtZXNzYWdlIl0sIEAibWVzc2FnZSIpOworICAgIHNlbGYubWVz
c2FnZSA9IHBheWxvYWRbQCJtZXNzYWdlIl07CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JF
UVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJjb2RlIl0sIEAiY29kZSIpOworICAgIHNlbGYuY29k
ZSA9IFtwYXlsb2FkW0AiY29kZSJdIGludGVnZXJWYWx1ZV07CisKKyAgICByZXR1cm4gc2VsZjsK
K30KKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpT
T05PYmplY3QgKilvYmplY3QKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoSlNP
Tk9iamVjdDpbb2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0KCldKSkKKyAgICAgICAgcmV0dXJuIG5p
bDsKKworICAgIHJldHVybiBzZWxmOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhNZXNz
YWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZTooaW50KWNvZGUKK3sKKyAgICBpZiAoIShzZWxm
ID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkobWVzc2FnZSwgQCJtZXNzYWdlIik7CisKKyAgICBz
ZWxmLm1lc3NhZ2UgPSBtZXNzYWdlOworICAgIHNlbGYuY29kZSA9IGNvZGU7CisKKyAgICByZXR1
cm4gc2VsZjsKK30KKworLSAodm9pZClzZXRNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UKK3sK
KyAgICBbc3VwZXIgc2V0U3RyaW5nOm1lc3NhZ2UgZm9yS2V5OkAibWVzc2FnZSJdOworfQorCist
IChOU1N0cmluZyAqKW1lc3NhZ2UKK3sKKyAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpA
Im1lc3NhZ2UiXTsKK30KKworLSAodm9pZClzZXRDb2RlOihpbnQpY29kZQoreworICAgIFtzdXBl
ciBzZXRJbnRlZ2VyOmNvZGUgZm9yS2V5OkAiY29kZSJdOworfQorCistIChpbnQpY29kZQorewor
ICAgIHJldHVybiBbc3VwZXIgaW50ZWdlckZvcktleTpAImNvZGUiXTsKK30KKworQGVuZAorCisK
KyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zYW1lLXR5cGUt
aWQtZGlmZmVyZW50LWRvbWFpbi5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRv
bWFpbi5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u
YWZkMGM2NmMwOGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21h
aW4uanNvbi1yZXN1bHQKQEAgLTAsMCArMSw4NjEgQEAKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0
b3JCYWNrZW5kQ29tbWFuZHMuanMuaW4KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRz
LmpzLmluCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJz
LmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVy
ZW50LWRvbWFpbi5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsK
KworY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHZvaWQg
c2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNo
ZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KKyAgICBC
YWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2Jh
Y2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Citwcml2YXRlOgorICAgIFJlZlB0cjxCYWNrZW5kRGlz
cGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKK307CisKKworCisKK30gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCisjIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAor
CisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbiBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0eXBlZGVmIFN0cmluZyBFcnJvclN0
cmluZzsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0
QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0
Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlk
LWRpZmZlcmVudC1kb21haW4uanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNo
ZXJzLmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRl
ci5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVz
dHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCisjaWYgRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVycy5oIgorI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK30gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3Bw
CisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNv
biBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFs
dWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNw
ZWN0b3IgeworCitjbGFzcyBGcm9udGVuZFJvdXRlcjsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
CisKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2Vy
dGlvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCituYW1lc3BhY2UgUHJvdG9j
b2wgeworCisKKworCisKKy8vIFR5cGVkZWZzLgorbmFtZXNwYWNlIFJ1bnRpbWUgeworLyogVW5p
cXVlIG9iamVjdCBpZGVudGlmaWVyLiAqLwordHlwZWRlZiBTdHJpbmcgUmVtb3RlT2JqZWN0SWQ7
Cit9IC8vIFJ1bnRpbWUKKworbmFtZXNwYWNlIFJ1bnRpbWUyIHsKKy8qIFVuaXF1ZSBvYmplY3Qg
aWRlbnRpZmllci4gKi8KK3R5cGVkZWYgU3RyaW5nIFJlbW90ZU9iamVjdElkOworfSAvLyBSdW50
aW1lMgorLy8gRW5kIG9mIHR5cGVkZWZzLgorCisKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wK
KworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9i
amVjdHMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFp
bi5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKworI2luY2x1ZGUg
PHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNw
YWNlIEluc3BlY3RvciB7CisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKworCit9IC8vIG5hbWVz
cGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBz
YW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVy
bmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKwor
CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgor
CisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29u
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmln
LmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1
ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKworbmFtZXNwYWNlIElu
c3BlY3RvciB7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbi5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
c2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4K
KworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRl
c3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAorQGVuZAorCisKKyMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
c2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIK
KworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2Nv
bEJhY2tlbmREaXNwYXRjaGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRl
RGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxl
SW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3Rv
cjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KK3sKKyAgICBB
dWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworfQorCistIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xs
ZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2Vs
ZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2Nv
bnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRl
YWxsb2MKK3sKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIK
KworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDx3dGYv
SlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisKKyMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5
cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKKyNpbXBvcnQg
PFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KKworCisKKworCisKKworCisK
KworCisKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmls
aXR5T2JqZWN0cy5oPgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbiBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2lt
cG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKKyNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8d3RmL0pT
T05WYWx1ZXMuaD4KKworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5o
CisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWlu
Lmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJU
ZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29u
dmVyc2lvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3RlbXBsYXRlPHR5cGVuYW1l
IE9iakNFbnVtVHlwZT4KK09wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5n
KGNvbnN0IFN0cmluZyYgdmFsdWUpOworCisKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9y
dCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVBy
b3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsK
KworQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFJ1bnRpbWVEb21haW4p
CisKKysgKHZvaWQpX3BhcnNlUmVtb3RlT2JqZWN0SWQ6KE5TU3RyaW5nICoqKW91dFZhbHVlIGZy
b21QYXlsb2FkOihpZClwYXlsb2FkOworCitAZW5kCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucyAoUnVudGltZTJEb21haW4pCisKKysgKHZvaWQpX3BhcnNlUmVtb3RlT2Jq
ZWN0SWQ6KE5TU3RyaW5nICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworCitA
ZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFJ1bnRp
bWVEb21haW4pCisKKysgKHZvaWQpX3BhcnNlUmVtb3RlT2JqZWN0SWQ6KE5TU3RyaW5nICoqKW91
dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9CQURfVFlQRShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSAo
TlNTdHJpbmcgKilwYXlsb2FkOworfQorCitAZW5kCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zIChSdW50aW1lMkRvbWFpbikKKworKyAodm9pZClfcGFyc2VSZW1v
dGVPYmplY3RJZDooTlNTdHJpbmcgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQK
K3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBj
bGFzc10pOworICAgICpvdXRWYWx1ZSA9IChOU1N0cmluZyAqKXBheWxvYWQ7Cit9CisKK0BlbmQK
KworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorCisjIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJu
YWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0
IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorI2ltcG9ydCA8
d3RmL0Fzc2VydGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5h
bWVzcGFjZSBJbnNwZWN0b3I7CisKKworCisKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24t
cmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4
cGVjdGVkL3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uLXJlc3VsdApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNWYyY2Q3OTMzMDQKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24tcmVzdWx0CkBAIC0wLDAg
KzEsMTA2OCBAQAorIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcy5p
bgorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5
cGUtc2V0dGVycy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKyMj
IyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzLmluCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbiBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaWYg
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyNpbmNsdWRlICJUZXN0
UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRl
bmRSb3V0ZXIuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVy
KFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3Bh
dGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9CisgICAgQmFja2VuZERpc3BhdGNoZXIqIGJh
Y2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQo
KTsgfQorcHJpdmF0ZToKKyAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERp
c3BhdGNoZXI7Cit9OworCisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlm
IC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorIyMjIEVuZCBGaWxl
OiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRl
c3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9j
b2xPYmplY3RzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNl
IEluc3BlY3RvciB7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCisKKworfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMu
aAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMu
anNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0
Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCisjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5o
IgorI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCitu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisj
IyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxl
OiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3Mg
RnJvbnRlbmRSb3V0ZXI7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxl
OiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFk
b3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJv
bnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFj
ZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxl
OiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbE9iamVjdHMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2Vk
LW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JQcm90b2NvbFR5cGVzLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKKworCituYW1lc3BhY2UgUHJvdG9jb2wgeworCisKKworLy8g
Rm9yd2FyZCBkZWNsYXJhdGlvbnMuCituYW1lc3BhY2UgUnVudGltZSB7CitjbGFzcyBLZXlQYXRo
OworfSAvLyBSdW50aW1lCisvLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCisKKworCisK
K25hbWVzcGFjZSBUZXN0SGVscGVycyB7CisKK1N0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShp
bnQgY29kZSk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRFbnVtQ29uc3RhbnRW
YWx1ZShUIGVudW1WYWx1ZSkKK3sKKyAgICByZXR1cm4gZ2V0RW51bUNvbnN0YW50VmFsdWUoc3Rh
dGljX2Nhc3Q8aW50PihlbnVtVmFsdWUpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBl
cnMKKworbmFtZXNwYWNlIFJ1bnRpbWUgeworCisvKiBLZXkgcGF0aC4gKi8KK2NsYXNzIEtleVBh
dGggOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CitwdWJsaWM6CisgICAgLy8gTmFtZWQgYWZ0
ZXIgcHJvcGVydHkgbmFtZSAndHlwZScgd2hpbGUgZ2VuZXJhdGluZyBLZXlQYXRoLgorICAgIGVu
dW0gY2xhc3MgVHlwZSB7CisgICAgICAgIE51bGwgPSAwLAorICAgICAgICBTdHJpbmcgPSAxLAor
ICAgICAgICBBcnJheSA9IDIsCisgICAgfTsgLy8gZW51bSBjbGFzcyBUeXBlCisgICAgZW51bSB7
CisgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKKyAgICAgICAgVHlwZVNldCA9IDEgPDwgMCwKKyAg
ICAgICAgQWxsRmllbGRzU2V0ID0gKFR5cGVTZXQpCisgICAgfTsKKworICAgIHRlbXBsYXRlPGlu
dCBTVEFURT4KKyAgICBjbGFzcyBCdWlsZGVyIHsKKyAgICBwcml2YXRlOgorICAgICAgICBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiBtX3Jlc3VsdDsKKworICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4g
QnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7
CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyKFJlZjwvKktleVBhdGgqL0pTT046Ok9iamVj
dD4mJiBvYmplY3QpCisgICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKKyAg
ICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQs
IGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CisgICAgICAgIH0KKyAgICAgICAg
ZnJpZW5kIGNsYXNzIEtleVBhdGg7CisgICAgcHVibGljOgorCisgICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBUeXBlU2V0PiYgc2V0VHlwZShUeXBlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVHlwZVNldCksIHByb3BlcnR5X3R5cGVfYWxyZWFk
eV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidHlwZSJfcywgSW5zcGVj
dG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKHZhbHVlKSk7
CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFR5cGVTZXQ+KCk7CisgICAgICAgIH0KKwor
ICAgICAgICBSZWY8S2V5UGF0aD4gcmVsZWFzZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7
CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoS2V5UGF0aCkgPT0gc2l6ZW9mKEpT
T046Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsKKworICAgICAgICAgICAgUmVmPEpTT046Ok9iamVj
dD4ganNvblJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgICAgICBh
dXRvIHJlc3VsdCA9IFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPEtleVBhdGg+Kj4oJmpz
b25SZXN1bHQpKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICB9
OworCisgICAgLyoKKyAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CisgICAgICogUmVmPEtl
eVBhdGg+IHJlc3VsdCA9IEtleVBhdGg6OmNyZWF0ZSgpCisgICAgICogICAgIC5zZXRUeXBlKC4u
LikKKyAgICAgKiAgICAgLnJlbGVhc2UoKTsKKyAgICAgKi8KKyAgICBzdGF0aWMgQnVpbGRlcjxO
b0ZpZWxkc1NldD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmll
bGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICB9CisKKyAgICB2b2lkIHNldFN0
cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgIHsKKyAgICAgICAgSlNPTjo6T2JqZWN0QmFz
ZTo6c2V0U3RyaW5nKCJzdHJpbmciX3MsIHZhbHVlKTsKKyAgICB9CisKKyAgICB2b2lkIHNldEFy
cmF5KFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IHZhbHVlKQorICAgIHsKKyAgICAgICAg
SlNPTjo6T2JqZWN0QmFzZTo6c2V0QXJyYXkoImFycmF5Il9zLCBXVEZNb3ZlKHZhbHVlKSk7Cisg
ICAgfQorfTsKKworfSAvLyBSdW50aW1lCisKKworCituYW1lc3BhY2UgVGVzdEhlbHBlcnMgewor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBQcm90b2NvbEVudW1UeXBlPgorT3B0aW9uYWw8UHJvdG9jb2xF
bnVtVHlwZT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYpOworCisvLyBF
bnVtcyBpbiB0aGUgJ1J1bnRpbWUnIERvbWFpbgordGVtcGxhdGU8PgorT3B0aW9uYWw8SW5zcGVj
dG9yOjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZT4gcGFyc2VFbnVtVmFsdWVGcm9t
U3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6OlR5cGU+KGNvbnN0
IFN0cmluZyYpOworCit9IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycworCit9IC8vIG5hbWVzcGFj
ZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sT2JqZWN0cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3Rz
LmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFs
LXR5cGUtc2V0dGVycy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIK
KworI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKK25h
bWVzcGFjZSBUZXN0SGVscGVycyB7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBlbnVtX2Nv
bnN0YW50X3ZhbHVlc1tdID0geworICAgICJudWxsIiwKKyAgICAic3RyaW5nIiwKKyAgICAiYXJy
YXkiLAorfTsKKworU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CisgICAg
cmV0dXJuIGVudW1fY29uc3RhbnRfdmFsdWVzW2NvZGVdOworfQorCisvLyBFbnVtcyBpbiB0aGUg
J1J1bnRpbWUnIERvbWFpbgorCit0ZW1wbGF0ZTw+CitPcHRpb25hbDxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5z
cGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZT4oY29uc3QgU3RyaW5nJiBw
cm90b2NvbFN0cmluZykKK3sKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVz
W10gPSB7CisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6S2V5
UGF0aDo6VHlwZTo6TnVsbCwKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpS
dW50aW1lOjpLZXlQYXRoOjpUeXBlOjpTdHJpbmcsCisgICAgICAgIChzaXplX3QpSW5zcGVjdG9y
OjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZTo6QXJyYXksCisgICAgfTsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IDM7ICsraSkKKyAgICAgICAgaWYgKHByb3RvY29sU3RyaW5n
ID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKKyAgICAgICAgICAg
IHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZSljb25z
dGFudFZhbHVlc1tpXTsKKworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFRlc3RIZWxwZXJzCisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3Rz
LmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25hbC10eXBl
LXNldHRlcnMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hl
cnMuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKKworCituYW1lc3BhY2UgSW5zcGVj
dG9yIHsKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQ
cm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sSW50
ZXJuYWwuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbmNs
dWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERp
c3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9u
LmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25hbC10
eXBlLXNldHRlcnMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
KyNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KKworX19hdHRyaWJ1dGVfXygo
dmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3Vy
YXRpb24gOiBOU09iamVjdAorQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29u
ZmlndXJhdGlvbi5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9u
Lm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwt
dHlwZS1zZXR0ZXJzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCisKKyNpbXBvcnQgIlRlc3RQ
cm90b2NvbEludGVybmFsLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hl
cnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50
Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xs
ZXIuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmRE
aXNwYXRjaGVycy5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXJzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRh
dGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCit7CisgICAgQXVnbWVudGFibGVJbnNwZWN0
b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
Q29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCit7
CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVy
biBuaWw7CisgICAgQVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250cm9sbGVyID0gY29udHJv
bGxlcjsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgW3N1
cGVyIGRlYWxsb2NdOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xD
b25maWd1cmF0aW9uLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3Bh
dGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0
aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisK
K3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xFdmVudERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUt
c2V0dGVycy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lt
cG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9S
V0lQcm90b2NvbEpTT05PYmplY3QuaD4KKworCitAY2xhc3MgVGVzdFByb3RvY29sUnVudGltZUtl
eVBhdGg7CisKK3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbFJ1bnRpbWVL
ZXlQYXRoVHlwZSkgeworICAgIFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZU51bGwsCisg
ICAgVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlU3RyaW5nLAorICAgIFRlc3RQcm90b2Nv
bFJ1bnRpbWVLZXlQYXRoVHlwZUFycmF5LAorfTsKKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0
eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoIDog
UldJUHJvdG9jb2xKU09OT2JqZWN0CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihO
U0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKKy0gKGluc3RhbmNldHlwZSlp
bml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0
OworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVHlwZTooVGVzdFByb3RvY29sUnVudGltZUtleVBh
dGhUeXBlKXR5cGU7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWdu
KSBUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGUgdHlwZTsKKy8qIG9wdGlvbmFsICovIEBw
cm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqc3RyaW5nOworLyogb3B0aW9uYWwg
Ki8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqYXJy
YXk7CitAZW5kCisKKworCisKKworCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xC
dWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
LmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNv
biBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQ
cm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKKyNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgor
I2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xJbnRlcm5hbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlv
bmFsLXR5cGUtc2V0dGVycy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJ
UHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+CitPcHRpb25hbDxPYmpDRW51bVR5cGU+IGZy
b21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKKworaW5saW5lIFN0cmluZyB0
b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZSB2YWx1ZSkKK3sK
KyAgICBzd2l0Y2godmFsdWUpIHsKKyAgICBjYXNlIFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRo
VHlwZU51bGw6CisgICAgICAgIHJldHVybiAibnVsbCJfczsKKyAgICBjYXNlIFRlc3RQcm90b2Nv
bFJ1bnRpbWVLZXlQYXRoVHlwZVN0cmluZzoKKyAgICAgICAgcmV0dXJuICJzdHJpbmciX3M7Cisg
ICAgY2FzZSBUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGVBcnJheToKKyAgICAgICAgcmV0
dXJuICJhcnJheSJfczsKKyAgICB9Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBPcHRpb25hbDxU
ZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBT
dHJpbmcmIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSAibnVsbCIpCisgICAgICAgIHJldHVy
biBUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGVOdWxsOworICAgIGlmICh2YWx1ZSA9PSAi
c3RyaW5nIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZVN0
cmluZzsKKyAgICBpZiAodmFsdWUgPT0gImFycmF5IikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90
b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZUFycmF5OworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9
CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1v
cHRpb25hbC10eXBlLXNldHRlcnMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorCisjaW1w
b3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIK
KyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisK
K3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zIChSdW50aW1lRG9tYWluKQorCisrICh2b2lkKV9wYXJzZUtleVBhdGg6KFRl
c3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXls
b2FkOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMgKFJ1bnRpbWVEb21haW4pCisKKysgKHZvaWQpX3BhcnNlS2V5UGF0aDooVGVzdFByb3RvY29s
UnVudGltZUtleVBhdGggKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAg
ICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xh
c3NdKTsKKyAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoIGFsbG9j
XSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sVHlwZXMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dl
ZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JX
SVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKyNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+
CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9y
OworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sUnVudGltZUtleVBhdGgKKworLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcg
KiwgaWQ+ICopcGF5bG9hZAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAg
ICAgICByZXR1cm4gbmlsOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9Q
RVJUWShwYXlsb2FkW0AidHlwZSJdLCBAInR5cGUiKTsKKyAgICBPcHRpb25hbDxUZXN0UHJvdG9j
b2xSdW50aW1lS2V5UGF0aFR5cGU+IHR5cGUgPSBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3Rv
Y29sUnVudGltZUtleVBhdGhUeXBlPihwYXlsb2FkW0AidHlwZSJdKTsKKyAgICBUSFJPV19FWENF
UFRJT05fRk9SX0JBRF9FTlVNX1ZBTFVFKHR5cGUsIEAidHlwZSIpOworICAgIHNlbGYudHlwZSA9
IHR5cGUudmFsdWUoKTsKKworICAgIHNlbGYuc3RyaW5nID0gcGF5bG9hZFtAInN0cmluZyJdOwor
CisgICAgc2VsZi5hcnJheSA9IHBheWxvYWRbQCJhcnJheSJdOworCisgICAgcmV0dXJuIHNlbGY7
Cit9CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xK
U09OT2JqZWN0ICopb2JqZWN0Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEpT
T05PYmplY3Q6W29iamVjdCB0b0pTT05PYmplY3RdLmdldCgpXSkpCisgICAgICAgIHJldHVybiBu
aWw7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVHlw
ZTooVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlKXR5cGUKK3sKKyAgICBpZiAoIShzZWxm
ID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHNlbGYudHlwZSA9
IHR5cGU7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClzZXRUeXBlOihUZXN0UHJv
dG9jb2xSdW50aW1lS2V5UGF0aFR5cGUpdHlwZQoreworICAgIFtzdXBlciBzZXRTdHJpbmc6dG9Q
cm90b2NvbFN0cmluZyh0eXBlKSBmb3JLZXk6QCJ0eXBlIl07Cit9CisKKy0gKFRlc3RQcm90b2Nv
bFJ1bnRpbWVLZXlQYXRoVHlwZSl0eXBlCit7CisgICAgcmV0dXJuIGZyb21Qcm90b2NvbFN0cmlu
ZzxUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGU+KFtzdXBlciBzdHJpbmdGb3JLZXk6QCJ0
eXBlIl0pLnZhbHVlKCk7Cit9CisKKy0gKHZvaWQpc2V0U3RyaW5nOihOU1N0cmluZyAqKXN0cmlu
ZworeworICAgIFtzdXBlciBzZXRTdHJpbmc6c3RyaW5nIGZvcktleTpAInN0cmluZyJdOworfQor
CistIChOU1N0cmluZyAqKXN0cmluZworeworICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5
OkAic3RyaW5nIl07Cit9CisKKy0gKHZvaWQpc2V0QXJyYXk6KE5TQXJyYXkvKjxOU1N0cmluZz4q
LyAqKWFycmF5Cit7CisgICAgW3N1cGVyIHNldEpTT05BcnJheTp0b0pTT05TdHJpbmdBcnJheShh
cnJheSkgZm9yS2V5OkAiYXJyYXkiXTsKK30KKworLSAoTlNBcnJheS8qPE5TU3RyaW5nPiovICop
YXJyYXkKK3sKKyAgICByZXR1cm4gdG9PYmpDU3RyaW5nQXJyYXkoW3N1cGVyIEpTT05BcnJheUZv
cktleTpAImFycmF5Il0pOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3Nob3VsZC1zdHJpcC1jb21tZW50cy5qc29uLXJlc3VsdCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9z
aG91bGQtc3RyaXAtY29tbWVudHMuanNvbi1yZXN1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAuLjM0OGFjZTkzYmFiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3Nob3VsZC1zdHJp
cC1jb21tZW50cy5qc29uLXJlc3VsdApAQCAtMCwwICsxLDgxNyBAQAorIyMjIEJlZ2luIEZpbGU6
IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcy5pbgorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHNob3VsZC1zdHJpcC1jb21tZW50cy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRz
LmpzLmluCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJz
LmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaG91bGQtc3RyaXAtY29tbWVu
dHMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEg
b25jZQorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyNp
bmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNz
IEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldEJhY2tl
bmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1f
YmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9CisgICAgQmFja2VuZERp
c3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlz
cGF0Y2hlci5nZXQoKTsgfQorcHJpdmF0ZToKKyAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+
IG1fYmFja2VuZERpc3BhdGNoZXI7Cit9OworCisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQor
IyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHNob3VsZC1zdHJpcC1jb21tZW50cy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJv
dG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNw
YWNlIEluc3BlY3RvciB7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCisKKworfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hl
cnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaG91bGQtc3RyaXAtY29tbWVudHMuanNvbiBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0Zi9KU09O
VmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCisjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgorI2Vu
ZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCituYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5k
IEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0
RnJvbnRlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
c2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMu
aCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgRnJvbnRlbmRSb3V0ZXI7
CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmRE
aXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5j
cHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaG91bGQtc3RyaXAtY29tbWVu
dHMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVy
cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNob3VsZC1zdHJpcC1jb21tZW50cy5qc29uIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+CisjaW5jbHVkZSA8
d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCituYW1lc3Bh
Y2UgUHJvdG9jb2wgeworCisKKworCisKKworCisKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wK
KworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9i
amVjdHMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaG91bGQtc3RyaXAtY29tbWVudHMuanNvbiBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisKKyNpbmNsdWRlIDx3dGYvT3B0
aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNw
ZWN0b3IgeworCituYW1lc3BhY2UgUHJvdG9jb2wgeworCisKKworfSAvLyBuYW1lc3BhY2UgUHJv
dG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sT2JqZWN0cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmRE
aXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0
cmlwLWNvbW1lbnRzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXJzLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCisKKworbmFtZXNwYWNlIElu
c3BlY3RvciB7CisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIHNob3VsZC1zdHJpcC1jb21tZW50cy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9j
b2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFs
LmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW5jbHVkZSA8
d3RmL0pTT05WYWx1ZXMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK30gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRj
aGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpz
b24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxXZWJJ
bnNwZWN0b3IvVGVzdFByb3RvY29sLmg+CisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJk
ZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmpl
Y3QKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAor
CisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNob3VsZC1zdHJpcC1jb21tZW50cy5qc29uIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbi5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2lt
cG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisjaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgorI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgorCit1c2luZyBu
YW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xs
ZXI7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxl
SW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5p
dF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIEFTU0VSVChjb250
cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAgcmV0dXJuIHNlbGY7
Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworQGVu
ZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorCisjIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNob3VsZC1zdHJpcC1jb21tZW50cy5qc29uIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50
ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1w
b3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisK
KyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorCisjIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBzaG91bGQtc3RyaXAtY29tbWVudHMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCisjaW1wb3J0
IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+CisKKworCisKKworCisKKwor
CisKKworCisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJp
bGl0eU9iamVjdHMuaD4KKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAorCisjIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHNob3VsZC1zdHJpcC1jb21tZW50cy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJU
ZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVl
cy5oPgorCisKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIK
KyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KKwor
bmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4K
K09wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYg
dmFsdWUpOworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hv
dWxkLXN0cmlwLWNvbW1lbnRzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKworI2ltcG9y
dCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCisj
aW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorCit1
c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisKKworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlw
LWNvbW1lbnRzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisj
aW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05P
YmplY3RQcml2YXRlLmg+CisjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2ltcG9ydCA8d3Rm
L0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisjIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1h
bGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNl
ZC1wcmltaXRpdmUtdHlwZS5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMC4uMjcwMDBhMTExY2EKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlv
bi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24tcmVzdWx0CkBAIC0wLDAgKzEsODM4IEBACisj
IyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzLmluCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2
ZS10eXBlLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorIyMjIEVu
ZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMuaW4KKworIyMjIEJlZ2luIEZpbGU6
IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29u
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisK
KyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworI2luY2x1ZGUg
IlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JG
cm9udGVuZFJvdXRlci5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgQWx0ZXJu
YXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHZvaWQgc2V0QmFja2VuZERpc3Bh
dGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5k
RGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KKyAgICBCYWNrZW5kRGlzcGF0Y2hl
ciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVy
LmdldCgpOyB9Citwcml2YXRlOgorICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNr
ZW5kRGlzcGF0Y2hlcjsKK307CisKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisj
ZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjIyMgRW5k
IEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmls
ZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1
ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7
CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tl
bmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJz
LmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24t
YWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlz
cGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5k
Um91dGVyLmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvTmV2
ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpZiBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyNpbmNsdWRlICJUZXN0QWx0ZXJu
YXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVy
cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJp
bWl0aXZlLXR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1
ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisK
K25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBGcm9udGVuZFJvdXRlcjsKKworfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJz
LmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmlt
aXRpdmUtdHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgi
CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisK
K30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERp
c3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2Vk
LXByaW1pdGl2ZS10eXBlLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclBy
b3RvY29sVHlwZXMuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKKworCisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKworCisKKworLy8gVHlw
ZWRlZnMuCituYW1lc3BhY2UgUnVudGltZSB7CisvKiBVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIu
ICovCit0eXBlZGVmIGludCBSZW1vdGVPYmplY3RJZDsKK30gLy8gUnVudGltZQorLy8gRW5kIG9m
IHR5cGVkZWZzLgorCisKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorCisjIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNv
biBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisKKyNpbmNsdWRlIDx3dGYv
T3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJ
bnNwZWN0b3IgeworCituYW1lc3BhY2UgUHJvdG9jb2wgeworCisKKworfSAvLyBuYW1lc3BhY2Ug
UHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sT2JqZWN0cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tl
bmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1k
ZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5o
PgorCisKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKwor
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmlt
aXRpdmUtdHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hl
cnMuaCIKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW5jbHVkZSAiVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4K
KworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisj
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorCisjIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpz
b24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxXZWJJ
bnNwZWN0b3IvVGVzdFByb3RvY29sLmg+CisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJk
ZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmpl
Y3QKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAor
CisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRp
dmUtdHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lt
cG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9j
b2xJbnRlcm5hbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgi
CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgor
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+
CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0
Y2hlcnMuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVycy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24g
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29u
dHJvbGxlciogX2NvbnRyb2xsZXI7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRy
b2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgoreworICAg
IHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmls
OworICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7
CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIFtzdXBlciBk
ZWFsbG9jXTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbi5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVy
cy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24t
YWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAi
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5o
PgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisKKyMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
LmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFs
aWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCisjaW1wb3J0IDxX
ZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+CisKKworCisKKworCisKKworCisK
KworCisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0
eU9iamVjdHMuaD4KKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAorCisjIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29s
LmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgorI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0
IDx3dGYvSlNPTlZhbHVlcy5oPgorCisKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbElu
dGVybmFsLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5o
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlh
c2VkLXByaW1pdGl2ZS10eXBlLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9S
V0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisK
K3RlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KK09wdGlvbmFsPE9iakNFbnVtVHlwZT4g
ZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOworCisKKworfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNl
ZC1wcmltaXRpdmUtdHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgorI2lt
cG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKwordXNp
bmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMgKFJ1bnRpbWVEb21haW4pCisKKysgKHZvaWQpX3BhcnNlUmVtb3RlT2JqZWN0SWQ6
KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworCitAZW5kCisK
K0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFJ1bnRpbWVEb21h
aW4pCisKKysgKHZvaWQpX3BhcnNlUmVtb3RlT2JqZWN0SWQ6KE5TTnVtYmVyICoqKW91dFZhbHVl
IGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURf
VFlQRShwYXlsb2FkLCBbTlNOdW1iZXIgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSAoTlNOdW1i
ZXIgKilwYXlsb2FkOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1t
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlh
c2VkLXByaW1pdGl2ZS10eXBlLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90
b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2lt
cG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKwor
CisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUt
ZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFycmF5
LXR5cGUuanNvbi1yZXN1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu
LmRlYmZmNzkxOGJhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlw
ZS5qc29uLXJlc3VsdApAQCAtMCwwICsxLDEwMTkgQEAKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0
b3JCYWNrZW5kQ29tbWFuZHMuanMuaW4KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKy8vIERlYnVnZ2VyCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVy
RG9tYWluKCJEZWJ1Z2dlciIsIG51bGwpOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0o
IkRlYnVnZ2VyLlJlYXNvbiIsIHtEaWVkOiAiRGllZCIsIEZhaW50ZWQ6ICJGYWludGVkIiwgSHVu
Z3J5OiAiSHVuZ3J5In0pOworSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiRGVidWdn
ZXIiLCBudWxsKTsKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzLmlu
CisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5
cGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEg
b25jZQorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyNp
bmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNz
IEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldEJhY2tl
bmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1f
YmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9CisgICAgQmFja2VuZERp
c3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlz
cGF0Y2hlci5nZXQoKTsgfQorcHJpdmF0ZToKKyAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+
IG1fYmFja2VuZERpc3BhdGNoZXI7Cit9OworCisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQor
IyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwor
bmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCisK
KworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlz
cGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5
LXR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1
ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCisjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVycy5oIgorI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgorCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRl
c3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xh
c3MgRnJvbnRlbmRSb3V0ZXI7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBG
aWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJv
bnRlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0
eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJv
bnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFj
ZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxl
OiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbE9iamVjdHMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVj
bGFyYXRpb24tYXJyYXktdHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JQcm90b2NvbFR5cGVzLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNw
YWNlIEluc3BlY3RvciB7CisKKworCituYW1lc3BhY2UgUHJvdG9jb2wgeworCisKKworLy8gRm9y
d2FyZCBkZWNsYXJhdGlvbnMuCituYW1lc3BhY2UgRGVidWdnZXIgeworZW51bSBjbGFzcyBSZWFz
b247Cit9IC8vIERlYnVnZ2VyCisvLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCisKKwor
Ly8gVHlwZWRlZnMuCituYW1lc3BhY2UgRGVidWdnZXIgewordHlwZWRlZiBpbnQgQnJlYWtwb2lu
dElkOworfSAvLyBEZWJ1Z2dlcgorCituYW1lc3BhY2UgUnVudGltZSB7Cit0eXBlZGVmIGludCBP
YmplY3RJZDsKK3R5cGVkZWYgSlNPTjo6QXJyYXlPZjxpbnQ+IEx1Y2t5TnVtYmVyczsKK3R5cGVk
ZWYgSlNPTjo6QXJyYXlPZjxTdHJpbmc+IEJhYnlOYW1lczsKK3R5cGVkZWYgSlNPTjo6QXJyYXlP
ZjxpbnQ+IE5ld09iamVjdHM7Cit0eXBlZGVmIEpTT046OkFycmF5T2Y8aW50PiBPbGRPYmplY3Rz
OwordHlwZWRlZiBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpS
ZWFzb24+IFN0b3BSZWFzb25zOworfSAvLyBSdW50aW1lCisvLyBFbmQgb2YgdHlwZWRlZnMuCisK
K25hbWVzcGFjZSBUZXN0SGVscGVycyB7CisKK1N0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShp
bnQgY29kZSk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRFbnVtQ29uc3RhbnRW
YWx1ZShUIGVudW1WYWx1ZSkKK3sKKyAgICByZXR1cm4gZ2V0RW51bUNvbnN0YW50VmFsdWUoc3Rh
dGljX2Nhc3Q8aW50PihlbnVtVmFsdWUpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBl
cnMKKworbmFtZXNwYWNlIERlYnVnZ2VyIHsKKworZW51bSBjbGFzcyBSZWFzb24geworICAgIERp
ZWQgPSAwLAorICAgIEZhaW50ZWQgPSAxLAorICAgIEh1bmdyeSA9IDIsCit9OyAvLyBlbnVtIGNs
YXNzIFJlYXNvbgorCit9IC8vIERlYnVnZ2VyCisKKworCituYW1lc3BhY2UgVGVzdEhlbHBlcnMg
eworCit0ZW1wbGF0ZTx0eXBlbmFtZSBQcm90b2NvbEVudW1UeXBlPgorT3B0aW9uYWw8UHJvdG9j
b2xFbnVtVHlwZT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYpOworCisv
LyBFbnVtcyBpbiB0aGUgJ0RlYnVnZ2VyJyBEb21haW4KK3RlbXBsYXRlPD4KK09wdGlvbmFsPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb24+IHBhcnNlRW51bVZhbHVlRnJvbVN0
cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uPihjb25zdCBTdHJpbmcm
KTsKKworfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9j
b2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7CisKKy8vIEhhc2ggZGVjbGFyYXRp
b25zIGluIHRoZSAnRGVidWdnZXInIERvbWFpbgordGVtcGxhdGU8Pgorc3RydWN0IERlZmF1bHRI
YXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb24+IHsKKyAgICB0eXBlZGVm
IEludEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbj4gSGFzaDsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdURgorIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3Rz
LmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorCisjaW5jbHVkZSA8d3RmL09w
dGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5z
cGVjdG9yIHsKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworbmFtZXNwYWNlIFRlc3RIZWxwZXJz
IHsKKworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFsdWVzW10gPSB7
CisgICAgIkRpZWQiLAorICAgICJGYWludGVkIiwKKyAgICAiSHVuZ3J5IiwKK307CisKK1N0cmlu
ZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgeworICAgIHJldHVybiBlbnVtX2NvbnN0
YW50X3ZhbHVlc1tjb2RlXTsKK30KKworLy8gRW51bXMgaW4gdGhlICdEZWJ1Z2dlcicgRG9tYWlu
CisKK3RlbXBsYXRlPD4KK09wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpS
ZWFzb24+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1
Z2dlcjo6UmVhc29uPihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQoreworICAgIHN0YXRp
YyBjb25zdCBzaXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsKKyAgICAgICAgKHNpemVfdClJbnNw
ZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uOjpEaWVkLAorICAgICAgICAoc2l6ZV90
KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb246OkZhaW50ZWQsCisgICAgICAg
IChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbjo6SHVuZ3J5LAor
ICAgIH07CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAzOyArK2kpCisgICAgICAgIGlmIChw
cm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0p
CisgICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFz
b24pY29uc3RhbnRWYWx1ZXNbaV07CisKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCit9
IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycworCisKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wK
KworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
T2JqZWN0cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRj
aGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlv
bi1hcnJheS10eXBlLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXJzLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCisKKworbmFtZXNwYWNlIElu
c3BlY3RvciB7CisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0
UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbElu
dGVybmFsLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW5j
bHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK30gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmRE
aXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
bi5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1h
cnJheS10eXBlLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisj
aW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+CisKK19fYXR0cmlidXRlX18oKHZp
c2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0
aW9uIDogTlNPYmplY3QKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZp
Z3VyYXRpb24uaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5t
bQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJy
YXktdHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lt
cG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9j
b2xJbnRlcm5hbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgi
CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgor
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+
CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0
Y2hlcnMuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVycy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24g
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29u
dHJvbGxlciogX2NvbnRyb2xsZXI7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRy
b2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgoreworICAg
IHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmls
OworICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7
CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIFtzdXBlciBk
ZWFsbG9jXTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbi5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVy
cy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24t
YXJyYXktdHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBu
YW1lc3BhY2UgSW5zcGVjdG9yOworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnRE
aXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNv
biBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPEZvdW5k
YXRpb24vRm91bmRhdGlvbi5oPgorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xK
U09OT2JqZWN0Lmg+CisKKworCisKK3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90
b2NvbERlYnVnZ2VyUmVhc29uKSB7CisgICAgVGVzdFByb3RvY29sRGVidWdnZXJSZWFzb25EaWVk
LAorICAgIFRlc3RQcm90b2NvbERlYnVnZ2VyUmVhc29uRmFpbnRlZCwKKyAgICBUZXN0UHJvdG9j
b2xEZWJ1Z2dlclJlYXNvbkh1bmdyeSwKK307CisKKworCisKKworCisKKworI2ltcG9ydCA8V2Vi
SW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgorCisjIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJ
bnRlcm5hbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJh
dGlvbi1hcnJheS10eXBlLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05P
YmplY3RQcml2YXRlLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3Bl
Y3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKKworCisKKyMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorCisjIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCA8
V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgorCituYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgorT3B0aW9uYWw8
T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7CisK
K2lubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNv
biB2YWx1ZSkKK3sKKyAgICBzd2l0Y2godmFsdWUpIHsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERl
YnVnZ2VyUmVhc29uRGllZDoKKyAgICAgICAgcmV0dXJuICJEaWVkIl9zOworICAgIGNhc2UgVGVz
dFByb3RvY29sRGVidWdnZXJSZWFzb25GYWludGVkOgorICAgICAgICByZXR1cm4gIkZhaW50ZWQi
X3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbkh1bmdyeToKKyAgICAgICAg
cmV0dXJuICJIdW5ncnkiX3M7CisgICAgfQorfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgT3B0aW9u
YWw8VGVzdFByb3RvY29sRGVidWdnZXJSZWFzb24+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBT
dHJpbmcmIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSAiRGllZCIpCisgICAgICAgIHJldHVy
biBUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbkRpZWQ7CisgICAgaWYgKHZhbHVlID09ICJGYWlu
dGVkIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERlYnVnZ2VyUmVhc29uRmFpbnRlZDsK
KyAgICBpZiAodmFsdWUgPT0gIkh1bmdyeSIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xE
ZWJ1Z2dlclJlYXNvbkh1bmdyeTsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCisKKwor
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRp
b24tYXJyYXktdHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisKKyNpbXBvcnQgIlRl
c3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgorI2ltcG9y
dCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKwordXNpbmcg
bmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMgKERlYnVnZ2VyRG9tYWluKQorCisrICh2b2lkKV9wYXJzZUJyZWFrcG9pbnRJZDooTlNO
dW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisrICh2b2lkKV9wYXJz
ZVJlYXNvbjooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisK
K0BlbmQKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChSdW50aW1lRG9t
YWluKQorCisrICh2b2lkKV9wYXJzZU9iamVjdElkOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9t
UGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNlTHVja3lOdW1iZXJzOihOU0FycmF5
Lyo8TlNOdW1iZXI+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisrICh2
b2lkKV9wYXJzZUJhYnlOYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKW91dFZhbHVlIGZy
b21QYXlsb2FkOihpZClwYXlsb2FkOworKyAodm9pZClfcGFyc2VOZXdPYmplY3RzOihOU0FycmF5
Lyo8TlNOdW1iZXI+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisrICh2
b2lkKV9wYXJzZU9sZE9iamVjdHM6KE5TQXJyYXkvKjxOU051bWJlcj4qLyAqKilvdXRWYWx1ZSBm
cm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNlU3RvcFJlYXNvbnM6KE5TQXJy
YXkvKjxOU1N0cmluZz4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKwor
QGVuZAorCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChEZWJ1
Z2dlckRvbWFpbikKKworKyAodm9pZClfcGFyc2VCcmVha3BvaW50SWQ6KE5TTnVtYmVyICoqKW91
dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9CQURfVFlQRShwYXlsb2FkLCBbTlNOdW1iZXIgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSAo
TlNOdW1iZXIgKilwYXlsb2FkOworfQorCisrICh2b2lkKV9wYXJzZVJlYXNvbjooTlNOdW1iZXIg
Kiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJ
T05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBjbGFzc10pOworICAgIE9wdGlvbmFs
PFRlc3RQcm90b2NvbERlYnVnZ2VyUmVhc29uPiByZXN1bHQgPSBJbnNwZWN0b3I6OmZyb21Qcm90
b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbj4ocGF5bG9hZCk7CisgICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9CQURfRU5VTV9WQUxVRShyZXN1bHQsIEAiUmVhc29uIik7CisgICAg
Km91dFZhbHVlID0gQChyZXN1bHQudmFsdWUoKSk7Cit9CisKK0BlbmQKK0BpbXBsZW1lbnRhdGlv
biBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFJ1bnRpbWVEb21haW4pCisKKysgKHZvaWQp
X3BhcnNlT2JqZWN0SWQ6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXls
b2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNOdW1i
ZXIgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSAoTlNOdW1iZXIgKilwYXlsb2FkOworfQorCisr
ICh2b2lkKV9wYXJzZUx1Y2t5TnVtYmVyczooTlNBcnJheS8qPE5TTnVtYmVyPiovICoqKW91dFZh
bHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9C
QURfVFlQRShwYXlsb2FkLCBbTlNBcnJheS8qPE5TTnVtYmVyPiovIGNsYXNzXSk7CisgICAgKm91
dFZhbHVlID0gKE5TQXJyYXkvKjxOU051bWJlcj4qLyAqKXBheWxvYWQ7Cit9CisKKysgKHZvaWQp
X3BhcnNlQmFieU5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopb3V0VmFsdWUgZnJvbVBh
eWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBh
eWxvYWQsIFtOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSAo
TlNBcnJheS8qPE5TU3RyaW5nPiovICopcGF5bG9hZDsKK30KKworKyAodm9pZClfcGFyc2VOZXdP
YmplY3RzOihOU0FycmF5Lyo8TlNOdW1iZXI+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlk
KXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtO
U0FycmF5Lyo8TlNOdW1iZXI+Ki8gY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSAoTlNBcnJheS8q
PE5TTnVtYmVyPiovICopcGF5bG9hZDsKK30KKworKyAodm9pZClfcGFyc2VPbGRPYmplY3RzOihO
U0FycmF5Lyo8TlNOdW1iZXI+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQK
K3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0FycmF5Lyo8
TlNOdW1iZXI+Ki8gY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSAoTlNBcnJheS8qPE5TTnVtYmVy
PiovICopcGF5bG9hZDsKK30KKworKyAodm9pZClfcGFyc2VTdG9wUmVhc29uczooTlNBcnJheS8q
PE5TU3RyaW5nPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNBcnJheS8qPE5TU3RyaW5n
PiovIGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKXBh
eWxvYWQ7Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUu
anNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRl
c3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucy5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZh
dGUuaD4KKyNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVl
cy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisKKworCisKKworIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tZW51
bS10eXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24tcmVzdWx0
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hYjdhMzk4MzZhZAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uLXJlc3VsdApAQCAt
MCwwICsxLDEwMzIgQEAKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMu
anMuaW4KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9u
LWVudW0tdHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
Ly8gUnVudGltZQorSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiUnVudGltZSIsIG51
bGwpOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIlJ1bnRpbWUuRmFybUFuaW1hbHMi
LCB7UGlnczogIlBpZ3MiLCBDb3dzOiAiQ293cyIsIENhdHM6ICJDYXRzIiwgSGVuczogIkhlbnMi
fSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiUnVudGltZS5Ud29MZWdnZWRBbmlt
YWxzIiwge0R1Y2tzOiAiRHVja3MiLCBIZW5zOiAiSGVucyIsIENyb3dzOiAiQ3Jvd3MiLCBGbGFt
aW5nb3M6ICJGbGFtaW5nb3MifSk7CitJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJS
dW50aW1lIiwgbnVsbCk7CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5q
cy5pbgorCisjIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5o
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVt
LXR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFn
bWEgb25jZQorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisK
KyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2Ns
YXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldEJh
Y2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7
IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9CisgICAgQmFja2Vu
ZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5k
RGlzcGF0Y2hlci5nZXQoKTsgfQorcHJpdmF0ZToKKyAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNo
ZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Cit9OworCisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQorIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
IlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgor
CituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisK
KworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmRE
aXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNw
cAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51
bS10eXBlLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNs
dWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQorI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0
Y2hlcnMuaCIKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVn
aW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRl
c3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xh
c3MgRnJvbnRlbmRSb3V0ZXI7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBG
aWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJv
bnRlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0
eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RGcm9udGVu
ZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9u
dGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNl
IEluc3BlY3RvciB7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6
IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sT2JqZWN0cy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNs
YXJhdGlvbi1lbnVtLXR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
UHJvdG9jb2xUeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFj
ZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworCisKKy8vIEZvcndh
cmQgZGVjbGFyYXRpb25zLgorbmFtZXNwYWNlIFJ1bnRpbWUgeworZW51bSBjbGFzcyBGYXJtQW5p
bWFsczsKK2VudW0gY2xhc3MgVHdvTGVnZ2VkQW5pbWFsczsKK30gLy8gUnVudGltZQorLy8gRW5k
IG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgorCisKKworCituYW1lc3BhY2UgVGVzdEhlbHBlcnMg
eworCitTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpOworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFsdWUpCit7Cisg
ICAgcmV0dXJuIGdldEVudW1Db25zdGFudFZhbHVlKHN0YXRpY19jYXN0PGludD4oZW51bVZhbHVl
KSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCisKK25hbWVzcGFjZSBSdW50aW1l
IHsKKworZW51bSBjbGFzcyBGYXJtQW5pbWFscyB7CisgICAgUGlncyA9IDAsCisgICAgQ293cyA9
IDEsCisgICAgQ2F0cyA9IDIsCisgICAgSGVucyA9IDMsCit9OyAvLyBlbnVtIGNsYXNzIEZhcm1B
bmltYWxzCisKK2VudW0gY2xhc3MgVHdvTGVnZ2VkQW5pbWFscyB7CisgICAgRHVja3MgPSA0LAor
ICAgIEhlbnMgPSAzLAorICAgIENyb3dzID0gNSwKKyAgICBGbGFtaW5nb3MgPSA2LAorfTsgLy8g
ZW51bSBjbGFzcyBUd29MZWdnZWRBbmltYWxzCisKK30gLy8gUnVudGltZQorCisKKworbmFtZXNw
YWNlIFRlc3RIZWxwZXJzIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgUHJvdG9jb2xFbnVtVHlwZT4K
K09wdGlvbmFsPFByb3RvY29sRW51bVR5cGU+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZyhjb25z
dCBTdHJpbmcmKTsKKworLy8gRW51bXMgaW4gdGhlICdSdW50aW1lJyBEb21haW4KK3RlbXBsYXRl
PD4KK09wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzPiBw
YXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFy
bUFuaW1hbHM+KGNvbnN0IFN0cmluZyYpOwordGVtcGxhdGU8PgorT3B0aW9uYWw8SW5zcGVjdG9y
OjpQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9t
U3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM+KGNv
bnN0IFN0cmluZyYpOworCit9IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycworCit9IC8vIG5hbWVz
cGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworbmFtZXNwYWNlIFdU
RiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKKworLy8gSGFz
aCBkZWNsYXJhdGlvbnMgaW4gdGhlICdSdW50aW1lJyBEb21haW4KK3RlbXBsYXRlPD4KK3N0cnVj
dCBEZWZhdWx0SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpGYXJtQW5pbWFscz4g
eworICAgIHR5cGVkZWYgSW50SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpGYXJt
QW5pbWFscz4gSGFzaDsKK307Cit0ZW1wbGF0ZTw+CitzdHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVj
dG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFscz4geworICAgIHR5cGVkZWYg
SW50SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxzPiBI
YXNoOworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bE9iamVjdHMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlw
ZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKworI2luY2x1ZGUg
PHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNw
YWNlIEluc3BlY3RvciB7CisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKK25hbWVzcGFjZSBUZXN0
SGVscGVycyB7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBlbnVtX2NvbnN0YW50X3ZhbHVl
c1tdID0geworICAgICJQaWdzIiwKKyAgICAiQ293cyIsCisgICAgIkNhdHMiLAorICAgICJIZW5z
IiwKKyAgICAiRHVja3MiLAorICAgICJDcm93cyIsCisgICAgIkZsYW1pbmdvcyIsCit9OworCitT
dHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsKKyAgICByZXR1cm4gZW51bV9j
b25zdGFudF92YWx1ZXNbY29kZV07Cit9CisKKy8vIEVudW1zIGluIHRoZSAnUnVudGltZScgRG9t
YWluCisKK3RlbXBsYXRlPD4KK09wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6
OkZhcm1BbmltYWxzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6UnVudGltZTo6RmFybUFuaW1hbHM+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCit7
CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0geworICAgICAgICAo
c2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzOjpQaWdzLAor
ICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxz
OjpDb3dzLAorICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZh
cm1BbmltYWxzOjpDYXRzLAorICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1
bnRpbWU6OkZhcm1BbmltYWxzOjpIZW5zLAorICAgIH07CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCA0OyArK2kpCisgICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50
X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCisgICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzKWNvbnN0YW50VmFsdWVzW2ldOworCisg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKwordGVtcGxhdGU8PgorT3B0aW9uYWw8SW5zcGVj
dG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVG
cm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM+
KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCit7CisgICAgc3RhdGljIGNvbnN0IHNpemVf
dCBjb25zdGFudFZhbHVlc1tdID0geworICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9j
b2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM6OkR1Y2tzLAorICAgICAgICAoc2l6ZV90KUlu
c3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM6OkhlbnMsCisgICAg
ICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFs
czo6Q3Jvd3MsCisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6
VHdvTGVnZ2VkQW5pbWFsczo6RmxhbWluZ29zLAorICAgIH07CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCA0OyArK2kpCisgICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0
YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCisgICAgICAgICAgICByZXR1cm4gKEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHMpY29uc3RhbnRWYWx1ZXNb
aV07CisKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0
SGVscGVycworCisKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbiBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbmNsdWRl
IDx3dGYvUmV0YWluUHRyLmg+CisKKworCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5k
RGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3Bh
dGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJh
dGlvbi1lbnVtLXR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3Bh
dGNoZXJzLmgiCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2luY2x1ZGUg
IlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVz
Lmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
KworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3Iv
VGVzdFByb3RvY29sLmg+CisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0Iikp
KQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKK0BlbmQK
KworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorCisjIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25m
aWd1cmF0aW9uLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW1wb3J0
ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRD
b3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+CisKK3VzaW5nIG5hbWVz
cGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0
aW9uCit7CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsK
K30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNw
ZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsK
KyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNvbnRyb2xs
ZXIpOworICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKKyAgICByZXR1cm4gc2VsZjsKK30K
KworLSAodm9pZClkZWFsbG9jCit7CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCitAZW5kCisK
KworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbiBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbElu
dGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2lt
cG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKwor
CisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCisj
aW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+CisKKworCisKK3R5
cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFscykg
eworICAgIFRlc3RQcm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFsc1BpZ3MsCisgICAgVGVzdFByb3Rv
Y29sUnVudGltZUZhcm1BbmltYWxzQ293cywKKyAgICBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFu
aW1hbHNDYXRzLAorICAgIFRlc3RQcm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFsc0hlbnMsCit9Owor
Cit0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2Vk
QW5pbWFscykgeworICAgIFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzRHVja3Ms
CisgICAgVGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHNIZW5zLAorICAgIFRlc3RQ
cm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzQ3Jvd3MsCisgICAgVGVzdFByb3RvY29sUnVu
dGltZVR3b0xlZ2dlZEFuaW1hbHNGbGFtaW5nb3MsCit9OworCisKKworCisKKworCisKKyNpbXBv
cnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4K
KworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sSW50ZXJuYWwuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUt
ZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2Nv
bEpTT05PYmplY3RQcml2YXRlLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJs
ZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKKwor
CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorCisjIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1w
b3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+CisKK25hbWVz
cGFjZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+CitPcHRp
b25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVl
KTsKKworaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFJ1bnRpbWVG
YXJtQW5pbWFscyB2YWx1ZSkKK3sKKyAgICBzd2l0Y2godmFsdWUpIHsKKyAgICBjYXNlIFRlc3RQ
cm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFsc1BpZ3M6CisgICAgICAgIHJldHVybiAiUGlncyJfczsK
KyAgICBjYXNlIFRlc3RQcm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFsc0Nvd3M6CisgICAgICAgIHJl
dHVybiAiQ293cyJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFsc0Nh
dHM6CisgICAgICAgIHJldHVybiAiQ2F0cyJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbFJ1bnRp
bWVGYXJtQW5pbWFsc0hlbnM6CisgICAgICAgIHJldHVybiAiSGVucyJfczsKKyAgICB9Cit9CisK
K3RlbXBsYXRlPD4KK2lubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1h
bHM+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIGlmICh2
YWx1ZSA9PSAiUGlncyIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFu
aW1hbHNQaWdzOworICAgIGlmICh2YWx1ZSA9PSAiQ293cyIpCisgICAgICAgIHJldHVybiBUZXN0
UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHNDb3dzOworICAgIGlmICh2YWx1ZSA9PSAiQ2F0cyIp
CisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHNDYXRzOworICAg
IGlmICh2YWx1ZSA9PSAiSGVucyIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xSdW50aW1l
RmFybUFuaW1hbHNIZW5zOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK2lubGluZSBT
dHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFs
cyB2YWx1ZSkKK3sKKyAgICBzd2l0Y2godmFsdWUpIHsKKyAgICBjYXNlIFRlc3RQcm90b2NvbFJ1
bnRpbWVUd29MZWdnZWRBbmltYWxzRHVja3M6CisgICAgICAgIHJldHVybiAiRHVja3MiX3M7Cisg
ICAgY2FzZSBUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFsc0hlbnM6CisgICAgICAg
IHJldHVybiAiSGVucyJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRB
bmltYWxzQ3Jvd3M6CisgICAgICAgIHJldHVybiAiQ3Jvd3MiX3M7CisgICAgY2FzZSBUZXN0UHJv
dG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFsc0ZsYW1pbmdvczoKKyAgICAgICAgcmV0dXJuICJG
bGFtaW5nb3MiX3M7CisgICAgfQorfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgT3B0aW9uYWw8VGVz
dFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHM+IGZyb21Qcm90b2NvbFN0cmluZyhjb25z
dCBTdHJpbmcmIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSAiRHVja3MiKQorICAgICAgICBy
ZXR1cm4gVGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHNEdWNrczsKKyAgICBpZiAo
dmFsdWUgPT0gIkhlbnMiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUnVudGltZVR3b0xl
Z2dlZEFuaW1hbHNIZW5zOworICAgIGlmICh2YWx1ZSA9PSAiQ3Jvd3MiKQorICAgICAgICByZXR1
cm4gVGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHNDcm93czsKKyAgICBpZiAodmFs
dWUgPT0gIkZsYW1pbmdvcyIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xSdW50aW1lVHdv
TGVnZ2VkQW5pbWFsc0ZsYW1pbmdvczsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlv
bi1lbnVtLXR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
KyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorCisjaW1wb3J0ICJUZXN0
UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKKyNpbXBvcnQg
PFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisKK3VzaW5nIG5h
bWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zIChSdW50aW1lRG9tYWluKQorCisrICh2b2lkKV9wYXJzZUZhcm1BbmltYWxzOihOU051bWJl
ciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNlVHdv
TGVnZ2VkQW5pbWFsczooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxv
YWQ7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cyAoUnVudGltZURvbWFpbikKKworKyAodm9pZClfcGFyc2VGYXJtQW5pbWFsczooTlNOdW1iZXIg
Kiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJ
T05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBjbGFzc10pOworICAgIE9wdGlvbmFs
PFRlc3RQcm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFscz4gcmVzdWx0ID0gSW5zcGVjdG9yOjpmcm9t
UHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzPihwYXlsb2FkKTsK
KyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9FTlVNX1ZBTFVFKHJlc3VsdCwgQCJGYXJtQW5p
bWFscyIpOworICAgICpvdXRWYWx1ZSA9IEAocmVzdWx0LnZhbHVlKCkpOworfQorCisrICh2b2lk
KV9wYXJzZVR3b0xlZ2dlZEFuaW1hbHM6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2Fk
OihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2Fk
LCBbTlNTdHJpbmcgY2xhc3NdKTsKKyAgICBPcHRpb25hbDxUZXN0UHJvdG9jb2xSdW50aW1lVHdv
TGVnZ2VkQW5pbWFscz4gcmVzdWx0ID0gSW5zcGVjdG9yOjpmcm9tUHJvdG9jb2xTdHJpbmc8VGVz
dFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHM+KHBheWxvYWQpOworICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfQkFEX0VOVU1fVkFMVUUocmVzdWx0LCBAIlR3b0xlZ2dlZEFuaW1hbHMiKTsK
KyAgICAqb3V0VmFsdWUgPSBAKHJlc3VsdC52YWx1ZSgpKTsKK30KKworQGVuZAorCisKKyMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisKKyMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xUeXBlcy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1w
b3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rv
ci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisjaW1wb3J0IDx3dGYvQXNzZXJ0aW9u
cy5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3Bl
Y3RvcjsKKworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVj
dGVkL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJh
dGlvbi1vYmplY3QtdHlwZS5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMC4uMDAzMTRmM2ZlYmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlv
bi1vYmplY3QtdHlwZS5qc29uLXJlc3VsdApAQCAtMCwwICsxLDIzOTcgQEAKKyMjIyBCZWdpbiBG
aWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMuaW4KKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisvLyBEYXRhYmFzZQorSW5zcGVjdG9yQmFj
a2VuZC5yZWdpc3RlckRvbWFpbigiRGF0YWJhc2UiLCBudWxsKTsKK0luc3BlY3RvckJhY2tlbmQu
cmVnaXN0ZXJFbnVtKCJEYXRhYmFzZS5Nb3VzZUJ1dHRvbiIsIHtOb25lOiAiTm9uZSIsIExlZnQ6
ICJMZWZ0IiwgTWlkZGxlOiAiTWlkZGxlIiwgUmlnaHQ6ICJSaWdodCJ9KTsKK0luc3BlY3RvckJh
Y2tlbmQucmVnaXN0ZXJFbnVtKCJEYXRhYmFzZS5PcHRpb25hbFBhcmFtZXRlckJ1bmRsZURpcmVj
dGlvbmFsaXR5Iiwge0xUUjogIkxUUiIsIFJUTDogIlJUTCJ9KTsKK0luc3BlY3RvckJhY2tlbmQu
cmVnaXN0ZXJFbnVtKCJEYXRhYmFzZS5QYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSIsIHtM
VFI6ICJMVFIiLCBSVEw6ICJSVEwifSk7CitJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWlu
KCJEYXRhYmFzZSIsIG51bGwpOworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFu
ZHMuanMuaW4KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hl
cnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24t
b2JqZWN0LXR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
KyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7
CisKK2NsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2b2lk
IHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRj
aGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9CisgICAg
QmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9i
YWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQorcHJpdmF0ZToKKyAgICBSZWZQdHI8QmFja2VuZERp
c3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Cit9OworCisKKworCit9IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQorIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgK
KworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbiBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0eXBlZGVmIFN0cmluZyBFcnJvclN0
cmluZzsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0
QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0
Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJh
dGlvbi1vYmplY3QtdHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hl
cnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVy
Lmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0
cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXJzLmgiCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAK
KworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVl
cy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVj
dG9yIHsKKworY2xhc3MgRnJvbnRlbmRSb3V0ZXI7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgorIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisK
KyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9u
cy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK25hbWVzcGFjZSBQcm90b2NvbCB7
CisKKworCisvLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KK25hbWVzcGFjZSBEYXRhYmFzZSB7Citj
bGFzcyBFcnJvcjsKK2NsYXNzIE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOworY2xhc3MgUGFyYW1l
dGVyQnVuZGxlOworY2xhc3MgT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0czsKK2NsYXNz
IER1bW15T2JqZWN0OworZW51bSBjbGFzcyBNb3VzZUJ1dHRvbjsKK30gLy8gRGF0YWJhc2UKKwor
bmFtZXNwYWNlIFRlc3QgeworY2xhc3MgUGFyYW1ldGVyQnVuZGxlOworfSAvLyBUZXN0CisvLyBF
bmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCisKKworLy8gVHlwZWRlZnMuCituYW1lc3BhY2Ug
RGF0YWJhc2UgewordHlwZWRlZiBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpFcnJvcj4gRXJyb3JMaXN0OworfSAvLyBEYXRhYmFzZQorLy8gRW5kIG9mIHR5cGVk
ZWZzLgorCituYW1lc3BhY2UgVGVzdEhlbHBlcnMgeworCitTdHJpbmcgZ2V0RW51bUNvbnN0YW50
VmFsdWUoaW50IGNvZGUpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgZ2V0RW51bUNv
bnN0YW50VmFsdWUoVCBlbnVtVmFsdWUpCit7CisgICAgcmV0dXJuIGdldEVudW1Db25zdGFudFZh
bHVlKHN0YXRpY19jYXN0PGludD4oZW51bVZhbHVlKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFRl
c3RIZWxwZXJzCisKK25hbWVzcGFjZSBEYXRhYmFzZSB7CisKKy8qIERhdGFiYXNlIGVycm9yLiAq
LworY2xhc3MgRXJyb3IgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CitwdWJsaWM6CisgICAg
ZW51bSB7CisgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKKyAgICAgICAgTWVzc2FnZVNldCA9IDEg
PDwgMCwKKyAgICAgICAgQ29kZVNldCA9IDEgPDwgMSwKKyAgICAgICAgQWxsRmllbGRzU2V0ID0g
KE1lc3NhZ2VTZXQgfCBDb2RlU2V0KQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+
CisgICAgY2xhc3MgQnVpbGRlciB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPEpTT046
Ok9iamVjdD4gbV9yZXN1bHQ7CisKKyAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8
U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
ICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOworICAgICAg
ICB9CisKKyAgICAgICAgQnVpbGRlcihSZWY8LypFcnJvciovSlNPTjo6T2JqZWN0PiYmIG9iamVj
dCkKKyAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQorICAgICAgICB7Cisg
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9j
cmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKKyAgICAgICAgfQorICAgICAgICBmcmllbmQgY2xh
c3MgRXJyb3I7CisgICAgcHVibGljOgorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNZXNzYWdl
U2V0PiYgc2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAgICB7CisgICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTWVzc2FnZVNldCksIHByb3BlcnR5X21lc3Nh
Z2VfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibWVzc2Fn
ZSJfcywgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNZXNzYWdlU2V0Pigp
OworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvZGVTZXQ+JiBzZXRDb2Rl
KGludCB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIENvZGVTZXQpLCBwcm9wZXJ0eV9jb2RlX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXRJbnRlZ2VyKCJjb2RlIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPENvZGVTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBSZWY8RXJyb3I+IHJl
bGVhc2UoKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBB
bGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOworICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoc2l6ZW9mKEVycm9yKSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0KSwgY2Fubm90X2Nhc3Qp
OworCisgICAgICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uUmVzdWx0ID0gbV9yZXN1bHQu
cmVsZWFzZU5vbk51bGwoKTsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gV1RGTW92ZSgqcmVp
bnRlcnByZXRfY2FzdDxSZWY8RXJyb3I+Kj4oJmpzb25SZXN1bHQpKTsKKyAgICAgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyoKKyAgICAgKiBTeW50aGV0
aWMgY29uc3RydWN0b3I6CisgICAgICogUmVmPEVycm9yPiByZXN1bHQgPSBFcnJvcjo6Y3JlYXRl
KCkKKyAgICAgKiAgICAgLnNldE1lc3NhZ2UoLi4uKQorICAgICAqICAgICAuc2V0Q29kZSguLi4p
CisgICAgICogICAgIC5yZWxlYXNlKCk7CisgICAgICovCisgICAgc3RhdGljIEJ1aWxkZXI8Tm9G
aWVsZHNTZXQ+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxk
c1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7CisgICAgfQorfTsKKworLyogRW51bWVyYXRl
cyBkaWZmZXJlbnQgbW91c2UgYnV0dG9ucyB0aGF0IGNhbiBiZSB1c2VkLiAqLworZW51bSBjbGFz
cyBNb3VzZUJ1dHRvbiB7CisgICAgTm9uZSA9IDAsCisgICAgTGVmdCA9IDEsCisgICAgTWlkZGxl
ID0gMiwKKyAgICBSaWdodCA9IDMsCit9OyAvLyBlbnVtIGNsYXNzIE1vdXNlQnV0dG9uCisKK2Ns
YXNzIE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlIDogcHVibGljIEpTT046Ok9iamVjdEJhc2Ugewor
cHVibGljOgorICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ2RpcmVjdGlvbmFsaXR5
JyB3aGlsZSBnZW5lcmF0aW5nIE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlLgorICAgIGVudW0gY2xh
c3MgRGlyZWN0aW9uYWxpdHkgeworICAgICAgICBMVFIgPSA0LAorICAgICAgICBSVEwgPSA1LAor
ICAgIH07IC8vIGVudW0gY2xhc3MgRGlyZWN0aW9uYWxpdHkKKyAgICBlbnVtIHsKKyAgICAgICAg
Tm9GaWVsZHNTZXQgPSAwLAorICAgICAgICBBbGxGaWVsZHNTZXQgPSAwCisgICAgfTsKKworICAg
IHRlbXBsYXRlPGludCBTVEFURT4KKyAgICBjbGFzcyBCdWlsZGVyIHsKKyAgICBwcml2YXRlOgor
ICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBtX3Jlc3VsdDsKKworICAgICAgICB0ZW1wbGF0
ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNU
RVA+Kj4odGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyKFJlZjwvKk9wdGlvbmFs
UGFyYW1ldGVyQnVuZGxlKi9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQorICAgICAgICAgICAgOiBt
X3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRf
c3RhdGUpOworICAgICAgICB9CisgICAgICAgIGZyaWVuZCBjbGFzcyBPcHRpb25hbFBhcmFtZXRl
ckJ1bmRsZTsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgUmVmPE9wdGlvbmFsUGFyYW1ldGVyQnVu
ZGxlPiByZWxlYXNlKCkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RB
VEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKHNpemVvZihPcHRpb25hbFBhcmFtZXRlckJ1bmRsZSkgPT0gc2l6ZW9mKEpT
T046Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsKKworICAgICAgICAgICAgUmVmPEpTT046Ok9iamVj
dD4ganNvblJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgICAgICBh
dXRvIHJlc3VsdCA9IFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPE9wdGlvbmFsUGFyYW1l
dGVyQnVuZGxlPio+KCZqc29uUmVzdWx0KSk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgICAgICB9CisgICAgfTsKKworICAgIC8qCisgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9y
OgorICAgICAqIFJlZjxPcHRpb25hbFBhcmFtZXRlckJ1bmRsZT4gcmVzdWx0ID0gT3B0aW9uYWxQ
YXJhbWV0ZXJCdW5kbGU6OmNyZWF0ZSgpCisgICAgICogICAgIC5yZWxlYXNlKCk7CisgICAgICov
CisgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCisgICAgeworICAgICAg
ICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7Cisg
ICAgfQorCisgICAgdm9pZCBzZXRDb2x1bW5OYW1lcyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJp
bmc+PiB2YWx1ZSkKKyAgICB7CisgICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldEFycmF5KCJj
b2x1bW5OYW1lcyJfcywgV1RGTW92ZSh2YWx1ZSkpOworICAgIH0KKworICAgIHZvaWQgc2V0QnV0
dG9ucyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6
TW91c2VCdXR0b24+PiB2YWx1ZSkKKyAgICB7CisgICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNl
dEFycmF5KCJidXR0b25zIl9zLCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgfQorCisgICAgdm9pZCBz
ZXREaXJlY3Rpb25hbGl0eShEaXJlY3Rpb25hbGl0eSB2YWx1ZSkKKyAgICB7CisgICAgICAgIEpT
T046Ok9iamVjdEJhc2U6OnNldFN0cmluZygiZGlyZWN0aW9uYWxpdHkiX3MsIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSh2YWx1ZSkpOworICAg
IH0KKworICAgIHZvaWQgc2V0Tm90ZXMoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIEpTT046Ok9iamVjdEJhc2U6OnNldFN0cmluZygibm90ZXMiX3MsIHZhbHVlKTsKKyAgICB9
CisKKyAgICB2b2lkIHNldFRpbWVzdGFtcChkb3VibGUgdmFsdWUpCisgICAgeworICAgICAgICBK
U09OOjpPYmplY3RCYXNlOjpzZXREb3VibGUoInRpbWVzdGFtcCJfcywgdmFsdWUpOworICAgIH0K
KworICAgIHZvaWQgc2V0VmFsdWVzKFJlZlB0cjxKU09OOjpPYmplY3Q+IHZhbHVlKQorICAgIHsK
KyAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFdURk1vdmUo
dmFsdWUpKTsKKyAgICB9CisKKyAgICB2b2lkIHNldFBheWxvYWQoUmVmUHRyPEpTT046OlZhbHVl
PiB2YWx1ZSkKKyAgICB7CisgICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldFZhbHVlKCJwYXls
b2FkIl9zLCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgfQorCisgICAgdm9pZCBzZXRFcnJvcihSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldE9iamVjdCgiZXJyb3IiX3MsIFdURk1vdmUodmFs
dWUpKTsKKyAgICB9CisKKyAgICB2b2lkIHNldEVycm9yTGlzdChSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGF0YWJhc2U6OkVycm9yTGlzdD4gdmFsdWUpCisgICAgeworICAgICAgICBKU09O
OjpPYmplY3RCYXNlOjpzZXRBcnJheSgiZXJyb3JMaXN0Il9zLCBXVEZNb3ZlKHZhbHVlKSk7Cisg
ICAgfQorfTsKKworY2xhc3MgUGFyYW1ldGVyQnVuZGxlIDogcHVibGljIEpTT046Ok9iamVjdEJh
c2UgeworcHVibGljOgorICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ2RpcmVjdGlv
bmFsaXR5JyB3aGlsZSBnZW5lcmF0aW5nIFBhcmFtZXRlckJ1bmRsZS4KKyAgICBlbnVtIGNsYXNz
IERpcmVjdGlvbmFsaXR5IHsKKyAgICAgICAgTFRSID0gNCwKKyAgICAgICAgUlRMID0gNSwKKyAg
ICB9OyAvLyBlbnVtIGNsYXNzIERpcmVjdGlvbmFsaXR5CisgICAgZW51bSB7CisgICAgICAgIE5v
RmllbGRzU2V0ID0gMCwKKyAgICAgICAgQ29sdW1uTmFtZXNTZXQgPSAxIDw8IDAsCisgICAgICAg
IEJ1dHRvbnNTZXQgPSAxIDw8IDEsCisgICAgICAgIERpcmVjdGlvbmFsaXR5U2V0ID0gMSA8PCAy
LAorICAgICAgICBOb3Rlc1NldCA9IDEgPDwgMywKKyAgICAgICAgVGltZXN0YW1wU2V0ID0gMSA8
PCA0LAorICAgICAgICBWYWx1ZXNTZXQgPSAxIDw8IDUsCisgICAgICAgIFBheWxvYWRTZXQgPSAx
IDw8IDYsCisgICAgICAgIEVycm9yU2V0ID0gMSA8PCA3LAorICAgICAgICBFcnJvckxpc3RTZXQg
PSAxIDw8IDgsCisgICAgICAgIEFsbEZpZWxkc1NldCA9IChDb2x1bW5OYW1lc1NldCB8IEJ1dHRv
bnNTZXQgfCBEaXJlY3Rpb25hbGl0eVNldCB8IE5vdGVzU2V0IHwgVGltZXN0YW1wU2V0IHwgVmFs
dWVzU2V0IHwgUGF5bG9hZFNldCB8IEVycm9yU2V0IHwgRXJyb3JMaXN0U2V0KQorICAgIH07CisK
KyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CisgICAgY2xhc3MgQnVpbGRlciB7CisgICAgcHJpdmF0
ZToKKyAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7CisKKyAgICAgICAgdGVt
cGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUg
fCBTVEVQPio+KHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcihSZWY8LypQYXJh
bWV0ZXJCdW5kbGUqL0pTT046Ok9iamVjdD4mJiBvYmplY3QpCisgICAgICAgICAgICA6IG1fcmVz
dWx0KFdURk1vdmUob2JqZWN0KSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0
ZSk7CisgICAgICAgIH0KKyAgICAgICAgZnJpZW5kIGNsYXNzIFBhcmFtZXRlckJ1bmRsZTsKKyAg
ICBwdWJsaWM6CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvbHVtbk5hbWVzU2V0PiYgc2V0
Q29sdW1uTmFtZXMoUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gdmFsdWUpCisgICAgICAg
IHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2x1bW5OYW1lc1NldCks
IHByb3BlcnR5X2NvbHVtbk5hbWVzX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8Q29sdW1uTmFtZXNTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgQnV0dG9uc1NldD4mIHNldEJ1dHRvbnMoUmVmUHRyPEpTT046OkFycmF5T2Y8SW5z
cGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPj4gdmFsdWUpCisgICAgICAg
IHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBCdXR0b25zU2V0KSwgcHJv
cGVydHlfYnV0dG9uc19hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJy
YXkoImJ1dHRvbnMiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8QnV0
dG9uc1NldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBEaXJlY3Rp
b25hbGl0eVNldD4mIHNldERpcmVjdGlvbmFsaXR5KERpcmVjdGlvbmFsaXR5IHZhbHVlKQorICAg
ICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRGlyZWN0aW9uYWxp
dHlTZXQpLCBwcm9wZXJ0eV9kaXJlY3Rpb25hbGl0eV9hbHJlYWR5X3NldCk7CisgICAgICAgICAg
ICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJkaXJlY3Rpb25hbGl0eSJfcywgSW5zcGVjdG9yOjpQcm90
b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKHZhbHVlKSk7CisgICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPERpcmVjdGlvbmFsaXR5U2V0PigpOworICAgICAgICB9CisK
KyAgICAgICAgQnVpbGRlcjxTVEFURSB8IE5vdGVzU2V0PiYgc2V0Tm90ZXMoY29uc3QgU3RyaW5n
JiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IE5vdGVzU2V0KSwgcHJvcGVydHlfbm90ZXNfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldFN0cmluZygibm90ZXMiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8Tm90ZXNTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgVGltZXN0YW1wU2V0PiYgc2V0VGltZXN0YW1wKGRvdWJsZSB2YWx1ZSkKKyAgICAgICAgewor
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFRpbWVzdGFtcFNldCksIHByb3Bl
cnR5X3RpbWVzdGFtcF9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0RG91
YmxlKCJ0aW1lc3RhbXAiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8
VGltZXN0YW1wU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFZh
bHVlc1NldD4mIHNldFZhbHVlcyhSZWZQdHI8SlNPTjo6T2JqZWN0PiB2YWx1ZSkKKyAgICAgICAg
eworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFZhbHVlc1NldCksIHByb3Bl
cnR5X3ZhbHVlc19hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0
KCJ2YWx1ZXMiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VmFsdWVz
U2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFBheWxvYWRTZXQ+
JiBzZXRQYXlsb2FkKFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWUpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBQYXlsb2FkU2V0KSwgcHJvcGVydHlfcGF5
bG9hZF9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0VmFsdWUoInBheWxv
YWQiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8UGF5bG9hZFNldD4o
KTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBFcnJvclNldD4mIHNldEVy
cm9yKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHZhbHVlKQor
ICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRXJyb3JTZXQp
LCBwcm9wZXJ0eV9lcnJvcl9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
T2JqZWN0KCJlcnJvciJfcywgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxF
cnJvclNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBFcnJvckxp
c3RTZXQ+JiBzZXRFcnJvckxpc3QoUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNl
OjpFcnJvckxpc3Q+IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgRXJyb3JMaXN0U2V0KSwgcHJvcGVydHlfZXJyb3JMaXN0X2FscmVhZHlfc2V0
KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheSgiZXJyb3JMaXN0Il9zLCB2YWx1ZSk7
CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEVycm9yTGlzdFNldD4oKTsKKyAgICAgICAg
fQorCisgICAgICAgIFJlZjxQYXJhbWV0ZXJCdW5kbGU+IHJlbGVhc2UoKQorICAgICAgICB7Cisg
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9p
c19ub3RfcmVhZHkpOworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFBhcmFtZXRl
ckJ1bmRsZSkgPT0gc2l6ZW9mKEpTT046Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsKKworICAgICAg
ICAgICAgUmVmPEpTT046Ok9iamVjdD4ganNvblJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25O
dWxsKCk7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nh
c3Q8UmVmPFBhcmFtZXRlckJ1bmRsZT4qPigmanNvblJlc3VsdCkpOworICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvKgorICAgICAqIFN5bnRoZXRp
YyBjb25zdHJ1Y3RvcjoKKyAgICAgKiBSZWY8UGFyYW1ldGVyQnVuZGxlPiByZXN1bHQgPSBQYXJh
bWV0ZXJCdW5kbGU6OmNyZWF0ZSgpCisgICAgICogICAgIC5zZXRDb2x1bW5OYW1lcyguLi4pCisg
ICAgICogICAgIC5zZXRCdXR0b25zKC4uLikKKyAgICAgKiAgICAgLnNldERpcmVjdGlvbmFsaXR5
KC4uLikKKyAgICAgKiAgICAgLnNldE5vdGVzKC4uLikKKyAgICAgKiAgICAgLnNldFRpbWVzdGFt
cCguLi4pCisgICAgICogICAgIC5zZXRWYWx1ZXMoLi4uKQorICAgICAqICAgICAuc2V0UGF5bG9h
ZCguLi4pCisgICAgICogICAgIC5zZXRFcnJvciguLi4pCisgICAgICogICAgIC5zZXRFcnJvckxp
c3QoLi4uKQorICAgICAqICAgICAucmVsZWFzZSgpOworICAgICAqLworICAgIHN0YXRpYyBCdWls
ZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8
Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOworICAgIH0KK307CisKKy8qIENv
bmZsaWN0ZWQgbmFtZXMgbWF5IGNhdXNlIGdlbmVyYXRlZCBnZXR0ZXJzL3NldHRlcnMgdG8gY2xh
c2ggd2l0aCBidWlsdC1pbiBJbnNwZWN0b3JPYmplY3QgbWV0aG9kcy4gKi8KK2NsYXNzIE9iamVj
dFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHMgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7Citw
dWJsaWM6CisgICAgZW51bSB7CisgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKKyAgICAgICAgSW50
ZWdlclNldCA9IDEgPDwgMCwKKyAgICAgICAgQXJyYXlTZXQgPSAxIDw8IDEsCisgICAgICAgIFN0
cmluZ1NldCA9IDEgPDwgMiwKKyAgICAgICAgVmFsdWVTZXQgPSAxIDw8IDMsCisgICAgICAgIE9i
amVjdFNldCA9IDEgPDwgNCwKKyAgICAgICAgQWxsRmllbGRzU2V0ID0gKEludGVnZXJTZXQgfCBB
cnJheVNldCB8IFN0cmluZ1NldCB8IFZhbHVlU2V0IHwgT2JqZWN0U2V0KQorICAgIH07CisKKyAg
ICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CisgICAgY2xhc3MgQnVpbGRlciB7CisgICAgcHJpdmF0ZToK
KyAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7CisKKyAgICAgICAgdGVtcGxh
dGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBT
VEVQPio+KHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcihSZWY8LypPYmplY3RX
aXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzKi9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQorICAgICAg
ICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5f
bm9uX2luaXRfc3RhdGUpOworICAgICAgICB9CisgICAgICAgIGZyaWVuZCBjbGFzcyBPYmplY3RX
aXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzOworICAgIHB1YmxpYzoKKworICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgSW50ZWdlclNldD4mIHNldEludGVnZXIoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEludGVnZXJTZXQp
LCBwcm9wZXJ0eV9pbnRlZ2VyX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXRTdHJpbmcoImludGVnZXIiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3Rh
dGU8SW50ZWdlclNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBB
cnJheVNldD4mIHNldEFycmF5KGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBBcnJheVNldCksIHByb3BlcnR5X2FycmF5
X2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImFycmF5Il9z
LCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEFycmF5U2V0PigpOworICAg
ICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFN0cmluZ1NldD4mIHNldFN0cmluZyhj
b25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgU3RyaW5nU2V0KSwgcHJvcGVydHlfc3RyaW5nX2FscmVhZHlfc2V0KTsKKyAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInN0cmluZyJfcywgdmFsdWUpOworICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTdHJpbmdTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgVmFsdWVTZXQ+JiBzZXRWYWx1ZShjb25zdCBTdHJpbmcmIHZhbHVl
KQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVmFsdWVT
ZXQpLCBwcm9wZXJ0eV92YWx1ZV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0U3RyaW5nKCJ2YWx1ZSJfcywgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0
ZTxWYWx1ZVNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBPYmpl
Y3RTZXQ+JiBzZXRPYmplY3QoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgeworICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE9iamVjdFNldCksIHByb3BlcnR5X29iamVj
dF9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJvYmplY3Qi
X3MsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8T2JqZWN0U2V0PigpOwor
ICAgICAgICB9CisKKyAgICAgICAgUmVmPE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHM+
IHJlbGVhc2UoKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9
PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOworICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoc2l6ZW9mKE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHMpID09IHNpemVv
ZihKU09OOjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7CisKKyAgICAgICAgICAgIFJlZjxKU09OOjpP
YmplY3Q+IGpzb25SZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOworICAgICAgICAg
ICAgYXV0byByZXN1bHQgPSBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxPYmplY3RXaXRo
UHJvcGVydHlOYW1lQ29uZmxpY3RzPio+KCZqc29uUmVzdWx0KSk7CisgICAgICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgICAgICB9CisgICAgfTsKKworICAgIC8qCisgICAgICogU3ludGhldGlj
IGNvbnN0cnVjdG9yOgorICAgICAqIFJlZjxPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3Rz
PiByZXN1bHQgPSBPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzOjpjcmVhdGUoKQorICAg
ICAqICAgICAuc2V0SW50ZWdlciguLi4pCisgICAgICogICAgIC5zZXRBcnJheSguLi4pCisgICAg
ICogICAgIC5zZXRTdHJpbmcoLi4uKQorICAgICAqICAgICAuc2V0VmFsdWUoLi4uKQorICAgICAq
ICAgICAuc2V0T2JqZWN0KC4uLikKKyAgICAgKiAgICAgLnJlbGVhc2UoKTsKKyAgICAgKi8KKyAg
ICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICB9
Cit9OworCit9IC8vIERhdGFiYXNlCisKK25hbWVzcGFjZSBUZXN0IHsKKworY2xhc3MgUGFyYW1l
dGVyQnVuZGxlIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgeworcHVibGljOgorICAgIC8vIE5h
bWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ2RpcmVjdGlvbmFsaXR5JyB3aGlsZSBnZW5lcmF0aW5n
IFBhcmFtZXRlckJ1bmRsZS4KKyAgICBlbnVtIGNsYXNzIERpcmVjdGlvbmFsaXR5IHsKKyAgICAg
ICAgTFRSID0gNCwKKyAgICAgICAgUlRMID0gNSwKKyAgICB9OyAvLyBlbnVtIGNsYXNzIERpcmVj
dGlvbmFsaXR5CisgICAgZW51bSB7CisgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKKyAgICAgICAg
RGlyZWN0aW9uYWxpdHlTZXQgPSAxIDw8IDAsCisgICAgICAgIEJ1dHRvbnNTZXQgPSAxIDw8IDEs
CisgICAgICAgIENvbHVtbk5hbWVzU2V0ID0gMSA8PCAyLAorICAgICAgICBOb3Rlc1NldCA9IDEg
PDwgMywKKyAgICAgICAgVGltZXN0YW1wU2V0ID0gMSA8PCA0LAorICAgICAgICBWYWx1ZXNTZXQg
PSAxIDw8IDUsCisgICAgICAgIFBheWxvYWRTZXQgPSAxIDw8IDYsCisgICAgICAgIEVycm9yU2V0
ID0gMSA8PCA3LAorICAgICAgICBBbGxGaWVsZHNTZXQgPSAoRGlyZWN0aW9uYWxpdHlTZXQgfCBC
dXR0b25zU2V0IHwgQ29sdW1uTmFtZXNTZXQgfCBOb3Rlc1NldCB8IFRpbWVzdGFtcFNldCB8IFZh
bHVlc1NldCB8IFBheWxvYWRTZXQgfCBFcnJvclNldCkKKyAgICB9OworCisgICAgdGVtcGxhdGU8
aW50IFNUQVRFPgorICAgIGNsYXNzIEJ1aWxkZXIgeworICAgIHByaXZhdGU6CisgICAgICAgIFJl
ZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVzdWx0OworCisgICAgICAgIHRlbXBsYXRlPGludCBTVEVQ
PiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlz
KTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXIoUmVmPC8qUGFyYW1ldGVyQnVuZGxlKi9K
U09OOjpPYmplY3Q+JiYgb2JqZWN0KQorICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9i
amVjdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5v
RmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAgICAgICB9
CisgICAgICAgIGZyaWVuZCBjbGFzcyBQYXJhbWV0ZXJCdW5kbGU7CisgICAgcHVibGljOgorCisg
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBEaXJlY3Rpb25hbGl0eVNldD4mIHNldERpcmVjdGlvbmFs
aXR5KERpcmVjdGlvbmFsaXR5IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxF
X0FTU0VSVCghKFNUQVRFICYgRGlyZWN0aW9uYWxpdHlTZXQpLCBwcm9wZXJ0eV9kaXJlY3Rpb25h
bGl0eV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJkaXJl
Y3Rpb25hbGl0eSJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1D
b25zdGFudFZhbHVlKHZhbHVlKSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPERpcmVj
dGlvbmFsaXR5U2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IEJ1
dHRvbnNTZXQ+JiBzZXRCdXR0b25zKFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4+IHZhbHVlKQorICAgICAgICB7CisgICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQnV0dG9uc1NldCksIHByb3BlcnR5X2J1dHRv
bnNfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJidXR0b25z
Il9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEJ1dHRvbnNTZXQ+KCk7
CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29sdW1uTmFtZXNTZXQ+JiBz
ZXRDb2x1bW5OYW1lcyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiB2YWx1ZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENvbHVtbk5hbWVzU2V0
KSwgcHJvcGVydHlfY29sdW1uTmFtZXNfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1
bHQtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxDb2x1bW5OYW1lc1NldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBOb3Rlc1NldD4mIHNldE5vdGVzKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBOb3Rlc1NldCksIHBy
b3BlcnR5X25vdGVzX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJp
bmcoIm5vdGVzIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE5vdGVz
U2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFRpbWVzdGFtcFNl
dD4mIHNldFRpbWVzdGFtcChkb3VibGUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUaW1lc3RhbXBTZXQpLCBwcm9wZXJ0eV90aW1lc3RhbXBf
YWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldERvdWJsZSgidGltZXN0YW1w
Il9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFRpbWVzdGFtcFNldD4o
KTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBWYWx1ZXNTZXQ+JiBzZXRW
YWx1ZXMoUmVmUHRyPEpTT046Ok9iamVjdD4gdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBWYWx1ZXNTZXQpLCBwcm9wZXJ0eV92YWx1ZXNfYWxy
ZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdCgidmFsdWVzIl9zLCB2
YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFZhbHVlc1NldD4oKTsKKyAgICAg
ICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBQYXlsb2FkU2V0PiYgc2V0UGF5bG9hZChS
ZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxF
X0FTU0VSVCghKFNUQVRFICYgUGF5bG9hZFNldCksIHByb3BlcnR5X3BheWxvYWRfYWxyZWFkeV9z
ZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCB2YWx1ZSk7
CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFBheWxvYWRTZXQ+KCk7CisgICAgICAgIH0K
KworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRXJyb3JTZXQ+JiBzZXRFcnJvcihSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiB2YWx1ZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEVycm9yU2V0KSwgcHJvcGVydHlfZXJy
b3JfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdCgiZXJyb3Ii
X3MsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8RXJyb3JTZXQ+KCk7Cisg
ICAgICAgIH0KKworICAgICAgICBSZWY8UGFyYW1ldGVyQnVuZGxlPiByZWxlYXNlKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCBy
ZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihQ
YXJhbWV0ZXJCdW5kbGUpID09IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7CisK
KyAgICAgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25SZXN1bHQgPSBtX3Jlc3VsdC5yZWxl
YXNlTm9uTnVsbCgpOworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBXVEZNb3ZlKCpyZWludGVy
cHJldF9jYXN0PFJlZjxQYXJhbWV0ZXJCdW5kbGU+Kj4oJmpzb25SZXN1bHQpKTsKKyAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyoKKyAgICAgKiBT
eW50aGV0aWMgY29uc3RydWN0b3I6CisgICAgICogUmVmPFBhcmFtZXRlckJ1bmRsZT4gcmVzdWx0
ID0gUGFyYW1ldGVyQnVuZGxlOjpjcmVhdGUoKQorICAgICAqICAgICAuc2V0RGlyZWN0aW9uYWxp
dHkoLi4uKQorICAgICAqICAgICAuc2V0QnV0dG9ucyguLi4pCisgICAgICogICAgIC5zZXRDb2x1
bW5OYW1lcyguLi4pCisgICAgICogICAgIC5zZXROb3RlcyguLi4pCisgICAgICogICAgIC5zZXRU
aW1lc3RhbXAoLi4uKQorICAgICAqICAgICAuc2V0VmFsdWVzKC4uLikKKyAgICAgKiAgICAgLnNl
dFBheWxvYWQoLi4uKQorICAgICAqICAgICAuc2V0RXJyb3IoLi4uKQorICAgICAqICAgICAucmVs
ZWFzZSgpOworICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVj
dDo6Y3JlYXRlKCkpOworICAgIH0KK307CisKK30gLy8gVGVzdAorCisKKworbmFtZXNwYWNlIFRl
c3RIZWxwZXJzIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgUHJvdG9jb2xFbnVtVHlwZT4KK09wdGlv
bmFsPFByb3RvY29sRW51bVR5cGU+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZyhjb25zdCBTdHJp
bmcmKTsKKworLy8gRW51bXMgaW4gdGhlICdEYXRhYmFzZScgRG9tYWluCit0ZW1wbGF0ZTw+CitP
cHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b24+IHBhcnNl
RW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VC
dXR0b24+KGNvbnN0IFN0cmluZyYpOwordGVtcGxhdGU8PgorT3B0aW9uYWw8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGF0YWJhc2U6Ok9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0
eT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNl
OjpPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+KGNvbnN0IFN0cmluZyYp
OwordGVtcGxhdGU8PgorT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlBh
cmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJ
bnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25h
bGl0eT4oY29uc3QgU3RyaW5nJik7CisKKy8vIEVudW1zIGluIHRoZSAnVGVzdCcgRG9tYWluCit0
ZW1wbGF0ZTw+CitPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpQYXJhbWV0ZXJC
dW5kbGU6OkRpcmVjdGlvbmFsaXR5PiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9y
OjpQcm90b2NvbDo6VGVzdDo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4oY29uc3Qg
U3RyaW5nJik7CisKK30gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCisKK30gLy8gbmFtZXNwYWNl
IFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCituYW1lc3BhY2UgV1RGIHsK
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOworCisvLyBIYXNoIGRl
Y2xhcmF0aW9ucyBpbiB0aGUgJ0RhdGFiYXNlJyBEb21haW4KK3RlbXBsYXRlPD4KK3N0cnVjdCBE
ZWZhdWx0SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b24+IHsK
KyAgICB0eXBlZGVmIEludEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNl
QnV0dG9uPiBIYXNoOworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisjIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbE9iamVjdHMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0
cy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9u
LW9iamVjdC10eXBlLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgor
CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworbmFt
ZXNwYWNlIFRlc3RIZWxwZXJzIHsKKworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29u
c3RhbnRfdmFsdWVzW10gPSB7CisgICAgIk5vbmUiLAorICAgICJMZWZ0IiwKKyAgICAiTWlkZGxl
IiwKKyAgICAiUmlnaHQiLAorICAgICJMVFIiLAorICAgICJSVEwiLAorfTsKKworU3RyaW5nIGdl
dEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CisgICAgcmV0dXJuIGVudW1fY29uc3RhbnRf
dmFsdWVzW2NvZGVdOworfQorCisvLyBFbnVtcyBpbiB0aGUgJ0RhdGFiYXNlJyBEb21haW4KKwor
dGVtcGxhdGU8PgorT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNl
QnV0dG9uPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0
YWJhc2U6Ok1vdXNlQnV0dG9uPihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQoreworICAg
IHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsKKyAgICAgICAgKHNpemVf
dClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b246Ok5vbmUsCisgICAg
ICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uOjpM
ZWZ0LAorICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3Vz
ZUJ1dHRvbjo6TWlkZGxlLAorICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpNb3VzZUJ1dHRvbjo6UmlnaHQsCisgICAgfTsKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IDQ7ICsraSkKKyAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3Rh
bnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKKyAgICAgICAgICAgIHJldHVybiAoSW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uKWNvbnN0YW50VmFsdWVzW2ldOwor
CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKwordGVtcGxhdGU8PgorT3B0aW9uYWw8SW5z
cGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpEaXJl
Y3Rpb25hbGl0eT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+KGNvbnN0
IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCit7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25z
dGFudFZhbHVlc1tdID0geworICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk6OkxUUiwKKyAg
ICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6T3B0aW9uYWxQYXJh
bWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5OjpSVEwsCisgICAgfTsKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IDI7ICsraSkKKyAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1f
Y29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKKyAgICAgICAgICAgIHJldHVybiAo
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpE
aXJlY3Rpb25hbGl0eSljb25zdGFudFZhbHVlc1tpXTsKKworICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7Cit9CisKK3RlbXBsYXRlPD4KK09wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFi
YXNlOjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5PiBwYXJzZUVudW1WYWx1ZUZyb21T
dHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlBhcmFtZXRlckJ1bmRsZTo6RGly
ZWN0aW9uYWxpdHk+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCit7CisgICAgc3RhdGlj
IGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0geworICAgICAgICAoc2l6ZV90KUluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5
OjpMVFIsCisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlBh
cmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk6OlJUTCwKKyAgICB9OworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgMjsgKytpKQorICAgICAgICBpZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51
bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNbaV1dKQorICAgICAgICAgICAgcmV0dXJu
IChJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rp
b25hbGl0eSljb25zdGFudFZhbHVlc1tpXTsKKworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9
CisKKy8vIEVudW1zIGluIHRoZSAnVGVzdCcgRG9tYWluCisKK3RlbXBsYXRlPD4KK09wdGlvbmFs
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxp
dHk+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpQ
YXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5Pihjb25zdCBTdHJpbmcmIHByb3RvY29sU3Ry
aW5nKQoreworICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsKKyAg
ICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpQYXJhbWV0ZXJCdW5kbGU6
OkRpcmVjdGlvbmFsaXR5OjpMVFIsCisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2Nv
bDo6VGVzdDo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eTo6UlRMLAorICAgIH07Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAyOyArK2kpCisgICAgICAgIGlmIChwcm90b2NvbFN0
cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCisgICAgICAg
ICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlBhcmFtZXRlckJ1bmRsZTo6
RGlyZWN0aW9uYWxpdHkpY29uc3RhbnRWYWx1ZXNbaV07CisKKyAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycworCisKKworfSAvLyBuYW1lc3Bh
Y2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJh
Y2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlw
ZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworCisK
K25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisj
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIK
KyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSAi
VGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorCituYW1lc3BhY2UgSW5zcGVj
dG9yIHsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xDb25maWd1cmF0aW9uLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBl
LWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+CisKK19f
YXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJv
dG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbi5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUt
ZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKKworI2lt
cG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tl
bmREaXNwYXRjaGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0
Y2hhYmxlQWdlbnQuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVj
dG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJu
YXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKwor
QGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KK3sKKyAgICBBdWdtZW50
YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworfQorCistIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNv
bnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAg
ICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xs
ZXIgPSBjb250cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MK
K3sKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bEV2ZW50RGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0
eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1w
b3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPHd0Zi9KU09OVmFs
dWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2wuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRp
b24tb2JqZWN0LXR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCisjaW1wb3J0IDxXZWJJbnNw
ZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+CisKKworQGNsYXNzIFRlc3RQcm90b2NvbERh
dGFiYXNlRXJyb3I7CitAY2xhc3MgVGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFtZXRl
ckJ1bmRsZTsKK0BjbGFzcyBUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZTsKK0Bj
bGFzcyBUZXN0UHJvdG9jb2xEYXRhYmFzZU9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHM7
CitAY2xhc3MgVGVzdFByb3RvY29sRGF0YWJhc2VEdW1teU9iamVjdDsKK0BjbGFzcyBUZXN0UHJv
dG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlOworCit0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBU
ZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9uKSB7CisgICAgVGVzdFByb3RvY29sRGF0YWJh
c2VNb3VzZUJ1dHRvbk5vbmUsCisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VNb3VzZUJ1dHRvbkxl
ZnQsCisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VNb3VzZUJ1dHRvbk1pZGRsZSwKKyAgICBUZXN0
UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9uUmlnaHQsCit9OworCit0eXBlZGVmIE5TX0VOVU0o
TlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlRGly
ZWN0aW9uYWxpdHkpIHsKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVy
QnVuZGxlRGlyZWN0aW9uYWxpdHlMVFIsCisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25h
bFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5UlRMLAorfTsKKwordHlwZWRlZiBOU19FTlVN
KE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25h
bGl0eSkgeworICAgIFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9u
YWxpdHlMVFIsCisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rp
b25hbGl0eVJUTCwKK307Cit0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xU
ZXN0UGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHkpIHsKKyAgICBUZXN0UHJvdG9jb2xUZXN0
UGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHlMVFIsCisgICAgVGVzdFByb3RvY29sVGVzdFBh
cmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5UlRMLAorfTsKKworX19hdHRyaWJ1dGVfXygodmlz
aWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXJy
b3IgOiBSV0lQcm90b2NvbEpTT05PYmplY3QKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxv
YWQ6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkOworLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25P
YmplY3Q7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3Nh
Z2UgY29kZTooaW50KWNvZGU7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywg
Y29weSkgTlNTdHJpbmcgKm1lc3NhZ2U7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0
b21pYywgYXNzaWduKSBpbnQgY29kZTsKK0BlbmQKKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0
eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQ
YXJhbWV0ZXJCdW5kbGUgOiBSV0lQcm90b2NvbEpTT05PYmplY3QKKy0gKGluc3RhbmNldHlwZSlp
bml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkOwor
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9i
amVjdCAqKWpzb25PYmplY3Q7CisvKiBvcHRpb25hbCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywg
Y29weSkgTlNBcnJheS8qPE5TU3RyaW5nPiovICpjb2x1bW5OYW1lczsKKy8qIG9wdGlvbmFsICov
IEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmJ1dHRv
bnM7CisvKiBvcHRpb25hbCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBUZXN0UHJv
dG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHkgZGlyZWN0
aW9uYWxpdHk7CisvKiBvcHRpb25hbCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNT
dHJpbmcgKm5vdGVzOworLyogb3B0aW9uYWwgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2ln
bikgZG91YmxlIHRpbWVzdGFtcDsKKy8qIG9wdGlvbmFsICovIEBwcm9wZXJ0eSAobm9uYXRvbWlj
LCByZXRhaW4pIFJXSVByb3RvY29sSlNPTk9iamVjdCAqdmFsdWVzOworLyogb3B0aW9uYWwgKi8g
QHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXls
b2FkOworLyogb3B0aW9uYWwgKi8gQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgVGVzdFBy
b3RvY29sRGF0YWJhc2VFcnJvciAqZXJyb3I7CisvKiBvcHRpb25hbCAqLyBAcHJvcGVydHkgKG5v
bmF0b21pYywgY29weSkgTlNBcnJheS8qPFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I+Ki8gKmVy
cm9yTGlzdDsKK0BlbmQKKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkp
CitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlIDogUldJUHJv
dG9jb2xKU09OT2JqZWN0CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rp
b25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0
aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OworLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoQ29sdW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAq
KWNvbHVtbk5hbWVzIGJ1dHRvbnM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWJ1dHRvbnMgZGly
ZWN0aW9uYWxpdHk6KFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9u
YWxpdHkpZGlyZWN0aW9uYWxpdHkgbm90ZXM6KE5TU3RyaW5nICopbm90ZXMgdGltZXN0YW1wOihk
b3VibGUpdGltZXN0YW1wIHZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopdmFsdWVzIHBh
eWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQgZXJyb3I6KFRlc3RQcm90b2Nv
bERhdGFiYXNlRXJyb3IgKillcnJvciBlcnJvckxpc3Q6KE5TQXJyYXkvKjxUZXN0UHJvdG9jb2xE
YXRhYmFzZUVycm9yPiovICopZXJyb3JMaXN0OworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChu
b25hdG9taWMsIGNvcHkpIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqY29sdW1uTmFtZXM7CisvKiBy
ZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNBcnJheS8qPE5TU3RyaW5n
PiovICpidXR0b25zOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2ln
bikgVGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSBkaXJl
Y3Rpb25hbGl0eTsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBO
U1N0cmluZyAqbm90ZXM7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNz
aWduKSBkb3VibGUgdGltZXN0YW1wOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9t
aWMsIHJldGFpbikgUldJUHJvdG9jb2xKU09OT2JqZWN0ICp2YWx1ZXM7CisvKiByZXF1aXJlZCAq
LyBAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluKSBSV0lQcm90b2NvbEpTT05PYmplY3QgKnBh
eWxvYWQ7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluKSBUZXN0
UHJvdG9jb2xEYXRhYmFzZUVycm9yICplcnJvcjsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAo
bm9uYXRvbWljLCBjb3B5KSBOU0FycmF5Lyo8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4qLyAq
ZXJyb3JMaXN0OworQGVuZAorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIp
KSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sRGF0YWJhc2VPYmplY3RXaXRoUHJvcGVydHlOYW1l
Q29uZmxpY3RzIDogUldJUHJvdG9jb2xKU09OT2JqZWN0CistIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKKy0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3Qg
Kilqc29uT2JqZWN0OworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSW50ZWdlcjooTlNTdHJpbmcg
KilpbnRlZ2VyIGFycmF5OihOU1N0cmluZyAqKWFycmF5IHN0cmluZzooTlNTdHJpbmcgKilzdHJp
bmcgdmFsdWU6KE5TU3RyaW5nICopdmFsdWUgb2JqZWN0OihOU1N0cmluZyAqKW9iamVjdDsKKy8q
IHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqaW50ZWdl
cjsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAq
YXJyYXk7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJp
bmcgKnN0cmluZzsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBO
U1N0cmluZyAqdmFsdWU7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29w
eSkgTlNTdHJpbmcgKm9iamVjdDsKK0BlbmQKKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAo
ImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbERhdGFiYXNlRHVtbXlPYmplY3Qg
OiBSV0lQcm90b2NvbEpTT05PYmplY3QKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6
KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkOworLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmpl
Y3Q7CitAZW5kCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRl
cmZhY2UgVGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZSA6IFJXSVByb3RvY29sSlNPTk9i
amVjdAorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3Ry
aW5nICosIGlkPiAqKXBheWxvYWQ7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9i
amVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKKy0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aERpcmVjdGlvbmFsaXR5OihUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxl
RGlyZWN0aW9uYWxpdHkpZGlyZWN0aW9uYWxpdHkgYnV0dG9uczooTlNBcnJheS8qPE5TU3RyaW5n
PiovICopYnV0dG9ucyBjb2x1bW5OYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopY29sdW1u
TmFtZXMgbm90ZXM6KE5TU3RyaW5nICopbm90ZXMgdGltZXN0YW1wOihkb3VibGUpdGltZXN0YW1w
IHZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopdmFsdWVzIHBheWxvYWQ6KFJXSVByb3Rv
Y29sSlNPTk9iamVjdCAqKXBheWxvYWQgZXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3Ig
KillcnJvcjsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIFRl
c3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSBkaXJlY3Rpb25hbGl0
eTsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU0FycmF5Lyo8
TlNTdHJpbmc+Ki8gKmJ1dHRvbnM7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21p
YywgY29weSkgTlNBcnJheS8qPE5TU3RyaW5nPiovICpjb2x1bW5OYW1lczsKKy8qIHJlcXVpcmVk
ICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqbm90ZXM7CisvKiByZXF1
aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBkb3VibGUgdGltZXN0YW1wOwor
LyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgUldJUHJvdG9jb2xK
U09OT2JqZWN0ICp2YWx1ZXM7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywg
cmV0YWluKSBSV0lQcm90b2NvbEpTT05PYmplY3QgKnBheWxvYWQ7CisvKiByZXF1aXJlZCAqLyBA
cHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluKSBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpl
cnJvcjsKK0BlbmQKKworCisKKworCisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2Nv
bEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4KKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2wuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNv
biBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQ
cm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKKyNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgor
I2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xJbnRlcm5hbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRp
b24tb2JqZWN0LXR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVBy
b3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordGVt
cGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgorT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9t
UHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7CisKK2lubGluZSBTdHJpbmcgdG9Q
cm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9uIHZhbHVlKQorewor
ICAgIHN3aXRjaCh2YWx1ZSkgeworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VNb3VzZUJ1
dHRvbk5vbmU6CisgICAgICAgIHJldHVybiAiTm9uZSJfczsKKyAgICBjYXNlIFRlc3RQcm90b2Nv
bERhdGFiYXNlTW91c2VCdXR0b25MZWZ0OgorICAgICAgICByZXR1cm4gIkxlZnQiX3M7CisgICAg
Y2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9uTWlkZGxlOgorICAgICAgICByZXR1
cm4gIk1pZGRsZSJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VCdXR0b25S
aWdodDoKKyAgICAgICAgcmV0dXJuICJSaWdodCJfczsKKyAgICB9Cit9CisKK3RlbXBsYXRlPD4K
K2lubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9uPiBmcm9tUHJv
dG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gIk5v
bmUiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VNb3VzZUJ1dHRvbk5vbmU7
CisgICAgaWYgKHZhbHVlID09ICJMZWZ0IikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERh
dGFiYXNlTW91c2VCdXR0b25MZWZ0OworICAgIGlmICh2YWx1ZSA9PSAiTWlkZGxlIikKKyAgICAg
ICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VCdXR0b25NaWRkbGU7CisgICAgaWYg
KHZhbHVlID09ICJSaWdodCIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZU1v
dXNlQnV0dG9uUmlnaHQ7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKworaW5saW5lIFN0
cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0
ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSB2YWx1ZSkKK3sKKyAgICBzd2l0Y2godmFsdWUpIHsKKyAg
ICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rp
b25hbGl0eUxUUjoKKyAgICAgICAgcmV0dXJuICJMVFIiX3M7CisgICAgY2FzZSBUZXN0UHJvdG9j
b2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHlSVEw6CisgICAg
ICAgIHJldHVybiAiUlRMIl9zOworICAgIH0KK30KKwordGVtcGxhdGU8PgoraW5saW5lIE9wdGlv
bmFsPFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25h
bGl0eT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgaWYg
KHZhbHVlID09ICJMVFIiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VPcHRp
b25hbFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5TFRSOworICAgIGlmICh2YWx1ZSA9PSAi
UlRMIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0
ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eVJUTDsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQor
CitpbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sRGF0YWJhc2VQYXJh
bWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSB2YWx1ZSkKK3sKKyAgICBzd2l0Y2godmFsdWUpIHsK
KyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxp
dHlMVFI6CisgICAgICAgIHJldHVybiAiTFRSIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0
YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eVJUTDoKKyAgICAgICAgcmV0dXJuICJS
VEwiX3M7CisgICAgfQorfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgT3B0aW9uYWw8VGVzdFByb3Rv
Y29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eT4gZnJvbVByb3RvY29sU3Ry
aW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09ICJMVFIiKQorICAg
ICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25h
bGl0eUxUUjsKKyAgICBpZiAodmFsdWUgPT0gIlJUTCIpCisgICAgICAgIHJldHVybiBUZXN0UHJv
dG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5UlRMOworICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7Cit9CisKK2lubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0
UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHkgdmFsdWUpCit7CisgICAg
c3dpdGNoKHZhbHVlKSB7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxl
RGlyZWN0aW9uYWxpdHlMVFI6CisgICAgICAgIHJldHVybiAiTFRSIl9zOworICAgIGNhc2UgVGVz
dFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5UlRMOgorICAgICAgICBy
ZXR1cm4gIlJUTCJfczsKKyAgICB9Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBPcHRpb25hbDxU
ZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHk+IGZyb21Qcm90b2Nv
bFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSAiTFRSIikK
KyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25h
bGl0eUxUUjsKKyAgICBpZiAodmFsdWUgPT0gIlJUTCIpCisgICAgICAgIHJldHVybiBUZXN0UHJv
dG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHlSVEw7CisgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKK30KKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5
cGVQYXJzZXIuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQ
cml2YXRlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbnRlcmZhY2UgVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChEYXRhYmFzZURvbWFpbikKKworKyAodm9pZClfcGFy
c2VFcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9h
ZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNlRXJyb3JMaXN0OihOU0FycmF5Lyo8VGVzdFBy
b3RvY29sRGF0YWJhc2VFcnJvcj4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9h
ZDsKKysgKHZvaWQpX3BhcnNlTW91c2VCdXR0b246KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21Q
YXlsb2FkOihpZClwYXlsb2FkOworKyAodm9pZClfcGFyc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRs
ZTooVGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZSAqKilvdXRWYWx1
ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNlUGFyYW1ldGVyQnVuZGxl
OihUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZSAqKilvdXRWYWx1ZSBmcm9tUGF5
bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNlT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNv
bmZsaWN0czooVGVzdFByb3RvY29sRGF0YWJhc2VPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxp
Y3RzICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworKyAodm9pZClfcGFyc2VE
dW1teU9iamVjdDooVGVzdFByb3RvY29sRGF0YWJhc2VEdW1teU9iamVjdCAqKilvdXRWYWx1ZSBm
cm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKworQGVuZAorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMgKFRlc3REb21haW4pCisKKysgKHZvaWQpX3BhcnNlUGFyYW1ldGVyQnVu
ZGxlOihUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlICoqKW91dFZhbHVlIGZyb21QYXls
b2FkOihpZClwYXlsb2FkOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMgKERhdGFiYXNlRG9tYWluKQorCisrICh2b2lkKV9wYXJzZUVycm9yOihU
ZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXls
b2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNEaWN0
aW9uYXJ5IGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xEYXRhYmFzZUVy
cm9yIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07Cit9CisKKysgKHZvaWQpX3BhcnNl
RXJyb3JMaXN0OihOU0FycmF5Lyo8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4qLyAqKilvdXRW
YWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
QkFEX1RZUEUocGF5bG9hZCwgW05TQXJyYXkvKjxUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yPiov
IGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gKE5TQXJyYXkvKjxUZXN0UHJvdG9jb2xEYXRhYmFz
ZUVycm9yPiovICopcGF5bG9hZDsKK30KKworKyAodm9pZClfcGFyc2VNb3VzZUJ1dHRvbjooTlNO
dW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19F
WENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBjbGFzc10pOworICAgIE9w
dGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VCdXR0b24+IHJlc3VsdCA9IEluc3BlY3Rv
cjo6ZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VCdXR0b24+KHBh
eWxvYWQpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX0VOVU1fVkFMVUUocmVzdWx0LCBA
Ik1vdXNlQnV0dG9uIik7CisgICAgKm91dFZhbHVlID0gQChyZXN1bHQudmFsdWUoKSk7Cit9CisK
KysgKHZvaWQpX3BhcnNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU6KFRlc3RQcm90b2NvbERhdGFi
YXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBh
eWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0Rp
Y3Rpb25hcnkgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbERhdGFiYXNl
T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsK
K30KKworKyAodm9pZClfcGFyc2VQYXJhbWV0ZXJCdW5kbGU6KFRlc3RQcm90b2NvbERhdGFiYXNl
UGFyYW1ldGVyQnVuZGxlICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7Cisg
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNs
YXNzXSk7CisgICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1
bmRsZSBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOworfQorCisrICh2b2lkKV9wYXJz
ZU9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHM6KFRlc3RQcm90b2NvbERhdGFiYXNlT2Jq
ZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQp
cGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05T
RGljdGlvbmFyeSBjbGFzc10pOworICAgICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sRGF0YWJh
c2VPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6
cGF5bG9hZF07Cit9CisKKysgKHZvaWQpX3BhcnNlRHVtbXlPYmplY3Q6KFRlc3RQcm90b2NvbERh
dGFiYXNlRHVtbXlPYmplY3QgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sK
KyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkg
Y2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbERhdGFiYXNlRHVtbXlPYmpl
Y3QgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKK30KKworQGVuZAorQGltcGxlbWVu
dGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoVGVzdERvbWFpbikKKworKyAodm9p
ZClfcGFyc2VQYXJhbWV0ZXJCdW5kbGU6KFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGUg
Kiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJ
T05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKKyAgICAqb3V0
VmFsdWUgPSBbW1Rlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGUgYWxsb2NdIGluaXRXaXRo
UGF5bG9hZDpwYXlsb2FkXTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBl
cy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24t
b2JqZWN0LXR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
KyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNP
Tk9iamVjdFByaXZhdGUuaD4KKyNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW1wb3J0IDx3
dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVt
ZW50YXRpb24gVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcgorCistIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXls
b2FkCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBu
aWw7CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRb
QCJtZXNzYWdlIl0sIEAibWVzc2FnZSIpOworICAgIHNlbGYubWVzc2FnZSA9IHBheWxvYWRbQCJt
ZXNzYWdlIl07CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBh
eWxvYWRbQCJjb2RlIl0sIEAiY29kZSIpOworICAgIHNlbGYuY29kZSA9IFtwYXlsb2FkW0AiY29k
ZSJdIGludGVnZXJWYWx1ZV07CisKKyAgICByZXR1cm4gc2VsZjsKK30KKy0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilvYmplY3QK
K3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoSlNPTk9iamVjdDpbb2JqZWN0IHRv
SlNPTk9iamVjdF0uZ2V0KCldKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHJldHVybiBz
ZWxmOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1l
c3NhZ2UgY29kZTooaW50KWNvZGUKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkK
KyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURf
UFJPUEVSVFkobWVzc2FnZSwgQCJtZXNzYWdlIik7CisKKyAgICBzZWxmLm1lc3NhZ2UgPSBtZXNz
YWdlOworICAgIHNlbGYuY29kZSA9IGNvZGU7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAo
dm9pZClzZXRNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UKK3sKKyAgICBbc3VwZXIgc2V0U3Ry
aW5nOm1lc3NhZ2UgZm9yS2V5OkAibWVzc2FnZSJdOworfQorCistIChOU1N0cmluZyAqKW1lc3Nh
Z2UKK3sKKyAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAIm1lc3NhZ2UiXTsKK30KKwor
LSAodm9pZClzZXRDb2RlOihpbnQpY29kZQoreworICAgIFtzdXBlciBzZXRJbnRlZ2VyOmNvZGUg
Zm9yS2V5OkAiY29kZSJdOworfQorCistIChpbnQpY29kZQoreworICAgIHJldHVybiBbc3VwZXIg
aW50ZWdlckZvcktleTpAImNvZGUiXTsKK30KKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gVGVz
dFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZQorCistIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4g
KilwYXlsb2FkCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJl
dHVybiBuaWw7CisKKyAgICBzZWxmLmNvbHVtbk5hbWVzID0gcGF5bG9hZFtAImNvbHVtbk5hbWVz
Il07CisKKyAgICBzZWxmLmJ1dHRvbnMgPSBwYXlsb2FkW0AiYnV0dG9ucyJdOworCisgICAgT3B0
aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZURpcmVjdGlv
bmFsaXR5PiBkaXJlY3Rpb25hbGl0eSA9IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xE
YXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHk+KHBheWxvYWRbQCJk
aXJlY3Rpb25hbGl0eSJdKTsKKyAgICBpZiAoZGlyZWN0aW9uYWxpdHkpCisgICAgICAgIHNlbGYu
ZGlyZWN0aW9uYWxpdHkgPSBkaXJlY3Rpb25hbGl0eS52YWx1ZSgpOworCisgICAgc2VsZi5ub3Rl
cyA9IHBheWxvYWRbQCJub3RlcyJdOworCisgICAgc2VsZi50aW1lc3RhbXAgPSBbcGF5bG9hZFtA
InRpbWVzdGFtcCJdIGRvdWJsZVZhbHVlXTsKKworICAgIHNlbGYudmFsdWVzID0gcGF5bG9hZFtA
InZhbHVlcyJdOworCisgICAgc2VsZi5wYXlsb2FkID0gcGF5bG9hZFtAInBheWxvYWQiXTsKKwor
ICAgIHNlbGYuZXJyb3IgPSBbW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgYWxsb2NdIGluaXRX
aXRoUGF5bG9hZDpwYXlsb2FkW0AiZXJyb3IiXV07CisKKyAgICBzZWxmLmVycm9yTGlzdCA9IG9i
amNBcnJheUZyb21QYXlsb2FkPFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I+KHBheWxvYWRbQCJl
cnJvckxpc3QiXSk7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKy0gKGluc3RhbmNldHlwZSlpbml0
V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilvYmplY3QKK3sKKyAg
ICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoSlNPTk9iamVjdDpbb2JqZWN0IHRvSlNPTk9i
amVjdF0uZ2V0KCldKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHJldHVybiBzZWxmOwor
fQorCistICh2b2lkKXNldENvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1
bW5OYW1lcworeworICAgIFtzdXBlciBzZXRKU09OQXJyYXk6dG9KU09OU3RyaW5nQXJyYXkoY29s
dW1uTmFtZXMpIGZvcktleTpAImNvbHVtbk5hbWVzIl07Cit9CisKKy0gKE5TQXJyYXkvKjxOU1N0
cmluZz4qLyAqKWNvbHVtbk5hbWVzCit7CisgICAgcmV0dXJuIHRvT2JqQ1N0cmluZ0FycmF5KFtz
dXBlciBKU09OQXJyYXlGb3JLZXk6QCJjb2x1bW5OYW1lcyJdKTsKK30KKworLSAodm9pZClzZXRC
dXR0b25zOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilidXR0b25zCit7CisgICAgW3N1cGVyIHNl
dEpTT05BcnJheTp0b0pTT05TdHJpbmdBcnJheShidXR0b25zKSBmb3JLZXk6QCJidXR0b25zIl07
Cit9CisKKy0gKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWJ1dHRvbnMKK3sKKyAgICByZXR1cm4g
dG9PYmpDU3RyaW5nQXJyYXkoW3N1cGVyIEpTT05BcnJheUZvcktleTpAImJ1dHRvbnMiXSk7Cit9
CisKKy0gKHZvaWQpc2V0RGlyZWN0aW9uYWxpdHk6KFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9u
YWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSlkaXJlY3Rpb25hbGl0eQoreworICAgIFtz
dXBlciBzZXRTdHJpbmc6dG9Qcm90b2NvbFN0cmluZyhkaXJlY3Rpb25hbGl0eSkgZm9yS2V5OkAi
ZGlyZWN0aW9uYWxpdHkiXTsKK30KKworLSAoVGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBh
cmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5KWRpcmVjdGlvbmFsaXR5Cit7CisgICAgcmV0dXJu
IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVy
QnVuZGxlRGlyZWN0aW9uYWxpdHk+KFtzdXBlciBzdHJpbmdGb3JLZXk6QCJkaXJlY3Rpb25hbGl0
eSJdKS52YWx1ZSgpOworfQorCistICh2b2lkKXNldE5vdGVzOihOU1N0cmluZyAqKW5vdGVzCit7
CisgICAgW3N1cGVyIHNldFN0cmluZzpub3RlcyBmb3JLZXk6QCJub3RlcyJdOworfQorCistIChO
U1N0cmluZyAqKW5vdGVzCit7CisgICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJub3Rl
cyJdOworfQorCistICh2b2lkKXNldFRpbWVzdGFtcDooZG91YmxlKXRpbWVzdGFtcAoreworICAg
IFtzdXBlciBzZXREb3VibGU6dGltZXN0YW1wIGZvcktleTpAInRpbWVzdGFtcCJdOworfQorCist
IChkb3VibGUpdGltZXN0YW1wCit7CisgICAgcmV0dXJuIFtzdXBlciBkb3VibGVGb3JLZXk6QCJ0
aW1lc3RhbXAiXTsKK30KKworLSAodm9pZClzZXRWYWx1ZXM6KFJXSVByb3RvY29sSlNPTk9iamVj
dCAqKXZhbHVlcworeworICAgIFtzdXBlciBzZXRPYmplY3Q6dmFsdWVzIGZvcktleTpAInZhbHVl
cyJdOworfQorCistIChSV0lQcm90b2NvbEpTT05PYmplY3QgKil2YWx1ZXMKK3sKKyAgICBSV0lQ
cm90b2NvbEpTT05PYmplY3QgKm9iamVjdCA9IFtzdXBlciBvYmplY3RGb3JLZXk6QCJ2YWx1ZXMi
XTsKKyAgICBpZiAoIW9iamVjdCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICByZXR1cm4gW1tS
V0lQcm90b2NvbEpTT05PYmplY3QgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDpbW3N1cGVyIG9i
amVjdEZvcktleTpAInZhbHVlcyJdIHRvSlNPTk9iamVjdF0uZ2V0KCldOworfQorCistICh2b2lk
KXNldFBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQKK3sKKyAgICBbc3Vw
ZXIgc2V0T2JqZWN0OnBheWxvYWQgZm9yS2V5OkAicGF5bG9hZCJdOworfQorCistIChSV0lQcm90
b2NvbEpTT05PYmplY3QgKilwYXlsb2FkCit7CisgICAgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpv
YmplY3QgPSBbc3VwZXIgb2JqZWN0Rm9yS2V5OkAicGF5bG9hZCJdOworICAgIGlmICghb2JqZWN0
KQorICAgICAgICByZXR1cm4gbmlsOworICAgIHJldHVybiBbW1JXSVByb3RvY29sSlNPTk9iamVj
dCBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0Oltbc3VwZXIgb2JqZWN0Rm9yS2V5OkAicGF5bG9h
ZCJdIHRvSlNPTk9iamVjdF0uZ2V0KCldOworfQorCistICh2b2lkKXNldEVycm9yOihUZXN0UHJv
dG9jb2xEYXRhYmFzZUVycm9yICopZXJyb3IKK3sKKyAgICBbc3VwZXIgc2V0T2JqZWN0OmVycm9y
IGZvcktleTpAImVycm9yIl07Cit9CisKKy0gKFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKill
cnJvcgoreworICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb2JqZWN0ID0gW3N1cGVyIG9iamVj
dEZvcktleTpAImVycm9yIl07CisgICAgaWYgKCFvYmplY3QpCisgICAgICAgIHJldHVybiBuaWw7
CisgICAgcmV0dXJuIFtbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBhbGxvY10gaW5pdFdpdGhK
U09OT2JqZWN0Oltbc3VwZXIgb2JqZWN0Rm9yS2V5OkAiZXJyb3IiXSB0b0pTT05PYmplY3RdLmdl
dCgpXTsKK30KKworLSAodm9pZClzZXRFcnJvckxpc3Q6KE5TQXJyYXkvKjxUZXN0UHJvdG9jb2xE
YXRhYmFzZUVycm9yPiovICopZXJyb3JMaXN0Cit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9C
QURfVFlQRV9JTl9BUlJBWShlcnJvckxpc3QsIFtUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGNs
YXNzXSk7CisgICAgW3N1cGVyIHNldEpTT05BcnJheTp0b0pTT05PYmplY3RBcnJheShlcnJvckxp
c3QpIGZvcktleTpAImVycm9yTGlzdCJdOworfQorCistIChOU0FycmF5Lyo8VGVzdFByb3RvY29s
RGF0YWJhc2VFcnJvcj4qLyAqKWVycm9yTGlzdAoreworICAgIHJldHVybiB0b09iakNBcnJheTxU
ZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yPihbc3VwZXIgSlNPTkFycmF5Rm9yS2V5OkAiZXJyb3JM
aXN0Il0pOworfQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xEYXRhYmFz
ZVBhcmFtZXRlckJ1bmRsZQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25u
dWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCit7CisgICAgaWYgKCEo
c2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBUSFJPV19F
WENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJjb2x1bW5OYW1lcyJdLCBA
ImNvbHVtbk5hbWVzIik7CisgICAgc2VsZi5jb2x1bW5OYW1lcyA9IHBheWxvYWRbQCJjb2x1bW5O
YW1lcyJdOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXls
b2FkW0AiYnV0dG9ucyJdLCBAImJ1dHRvbnMiKTsKKyAgICBzZWxmLmJ1dHRvbnMgPSBwYXlsb2Fk
W0AiYnV0dG9ucyJdOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJU
WShwYXlsb2FkW0AiZGlyZWN0aW9uYWxpdHkiXSwgQCJkaXJlY3Rpb25hbGl0eSIpOworICAgIE9w
dGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHk+
IGRpcmVjdGlvbmFsaXR5ID0gZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERhdGFiYXNl
UGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHk+KHBheWxvYWRbQCJkaXJlY3Rpb25hbGl0eSJd
KTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9FTlVNX1ZBTFVFKGRpcmVjdGlvbmFsaXR5
LCBAImRpcmVjdGlvbmFsaXR5Iik7CisgICAgc2VsZi5kaXJlY3Rpb25hbGl0eSA9IGRpcmVjdGlv
bmFsaXR5LnZhbHVlKCk7CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BF
UlRZKHBheWxvYWRbQCJub3RlcyJdLCBAIm5vdGVzIik7CisgICAgc2VsZi5ub3RlcyA9IHBheWxv
YWRbQCJub3RlcyJdOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJU
WShwYXlsb2FkW0AidGltZXN0YW1wIl0sIEAidGltZXN0YW1wIik7CisgICAgc2VsZi50aW1lc3Rh
bXAgPSBbcGF5bG9hZFtAInRpbWVzdGFtcCJdIGRvdWJsZVZhbHVlXTsKKworICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAInZhbHVlcyJdLCBAInZhbHVl
cyIpOworICAgIHNlbGYudmFsdWVzID0gcGF5bG9hZFtAInZhbHVlcyJdOworCisgICAgVEhST1df
RVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AicGF5bG9hZCJdLCBAInBh
eWxvYWQiKTsKKyAgICBzZWxmLnBheWxvYWQgPSBwYXlsb2FkW0AicGF5bG9hZCJdOworCisgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiZXJyb3IiXSwg
QCJlcnJvciIpOworICAgIHNlbGYuZXJyb3IgPSBbW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3Ig
YWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkW0AiZXJyb3IiXV07CisKKyAgICBUSFJPV19F
WENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJlcnJvckxpc3QiXSwgQCJl
cnJvckxpc3QiKTsKKyAgICBzZWxmLmVycm9yTGlzdCA9IG9iamNBcnJheUZyb21QYXlsb2FkPFRl
c3RQcm90b2NvbERhdGFiYXNlRXJyb3I+KHBheWxvYWRbQCJlcnJvckxpc3QiXSk7CisKKyAgICBy
ZXR1cm4gc2VsZjsKK30KKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihS
V0lQcm90b2NvbEpTT05PYmplY3QgKilvYmplY3QKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVy
IGluaXRXaXRoSlNPTk9iamVjdDpbb2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0KCldKSkKKyAgICAg
ICAgcmV0dXJuIG5pbDsKKworICAgIHJldHVybiBzZWxmOworfQorCistIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhDb2x1bW5OYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMg
YnV0dG9uczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopYnV0dG9ucyBkaXJlY3Rpb25hbGl0eToo
VGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSlkaXJlY3Rp
b25hbGl0eSBub3RlczooTlNTdHJpbmcgKilub3RlcyB0aW1lc3RhbXA6KGRvdWJsZSl0aW1lc3Rh
bXAgdmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKil2YWx1ZXMgcGF5bG9hZDooUldJUHJv
dG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZCBlcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJv
ciAqKWVycm9yIGVycm9yTGlzdDooTlNBcnJheS8qPFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I+
Ki8gKillcnJvckxpc3QKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAg
ICAgcmV0dXJuIG5pbDsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVS
VFkoY29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9S
X1JFUVVJUkVEX1BST1BFUlRZKGJ1dHRvbnMsIEAiYnV0dG9ucyIpOworICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkobm90ZXMsIEAibm90ZXMiKTsKKyAgICBUSFJPV19F
WENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHZhbHVlcywgQCJ2YWx1ZXMiKTsKKyAgICBU
SFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWQsIEAicGF5bG9hZCIp
OworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkoZXJyb3IsIEAiZXJy
b3IiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKGVycm9yTGlz
dCwgQCJlcnJvckxpc3QiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFX0lOX0FS
UkFZKGVycm9yTGlzdCwgW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgY2xhc3NdKTsKKworICAg
IHNlbGYuY29sdW1uTmFtZXMgPSBjb2x1bW5OYW1lczsKKyAgICBzZWxmLmJ1dHRvbnMgPSBidXR0
b25zOworICAgIHNlbGYuZGlyZWN0aW9uYWxpdHkgPSBkaXJlY3Rpb25hbGl0eTsKKyAgICBzZWxm
Lm5vdGVzID0gbm90ZXM7CisgICAgc2VsZi50aW1lc3RhbXAgPSB0aW1lc3RhbXA7CisgICAgc2Vs
Zi52YWx1ZXMgPSB2YWx1ZXM7CisgICAgc2VsZi5wYXlsb2FkID0gcGF5bG9hZDsKKyAgICBzZWxm
LmVycm9yID0gZXJyb3I7CisgICAgc2VsZi5lcnJvckxpc3QgPSBlcnJvckxpc3Q7CisKKyAgICBy
ZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClzZXRDb2x1bW5OYW1lczooTlNBcnJheS8qPE5TU3Ry
aW5nPiovICopY29sdW1uTmFtZXMKK3sKKyAgICBbc3VwZXIgc2V0SlNPTkFycmF5OnRvSlNPTlN0
cmluZ0FycmF5KGNvbHVtbk5hbWVzKSBmb3JLZXk6QCJjb2x1bW5OYW1lcyJdOworfQorCistIChO
U0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcworeworICAgIHJldHVybiB0b09iakNT
dHJpbmdBcnJheShbc3VwZXIgSlNPTkFycmF5Rm9yS2V5OkAiY29sdW1uTmFtZXMiXSk7Cit9CisK
Ky0gKHZvaWQpc2V0QnV0dG9uczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopYnV0dG9ucworewor
ICAgIFtzdXBlciBzZXRKU09OQXJyYXk6dG9KU09OU3RyaW5nQXJyYXkoYnV0dG9ucykgZm9yS2V5
OkAiYnV0dG9ucyJdOworfQorCistIChOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilidXR0b25zCit7
CisgICAgcmV0dXJuIHRvT2JqQ1N0cmluZ0FycmF5KFtzdXBlciBKU09OQXJyYXlGb3JLZXk6QCJi
dXR0b25zIl0pOworfQorCistICh2b2lkKXNldERpcmVjdGlvbmFsaXR5OihUZXN0UHJvdG9jb2xE
YXRhYmFzZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5KWRpcmVjdGlvbmFsaXR5Cit7Cisg
ICAgW3N1cGVyIHNldFN0cmluZzp0b1Byb3RvY29sU3RyaW5nKGRpcmVjdGlvbmFsaXR5KSBmb3JL
ZXk6QCJkaXJlY3Rpb25hbGl0eSJdOworfQorCistIChUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFt
ZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5KWRpcmVjdGlvbmFsaXR5Cit7CisgICAgcmV0dXJuIGZy
b21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZURpcmVj
dGlvbmFsaXR5Pihbc3VwZXIgc3RyaW5nRm9yS2V5OkAiZGlyZWN0aW9uYWxpdHkiXSkudmFsdWUo
KTsKK30KKworLSAodm9pZClzZXROb3RlczooTlNTdHJpbmcgKilub3RlcworeworICAgIFtzdXBl
ciBzZXRTdHJpbmc6bm90ZXMgZm9yS2V5OkAibm90ZXMiXTsKK30KKworLSAoTlNTdHJpbmcgKilu
b3RlcworeworICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAibm90ZXMiXTsKK30KKwor
LSAodm9pZClzZXRUaW1lc3RhbXA6KGRvdWJsZSl0aW1lc3RhbXAKK3sKKyAgICBbc3VwZXIgc2V0
RG91YmxlOnRpbWVzdGFtcCBmb3JLZXk6QCJ0aW1lc3RhbXAiXTsKK30KKworLSAoZG91YmxlKXRp
bWVzdGFtcAoreworICAgIHJldHVybiBbc3VwZXIgZG91YmxlRm9yS2V5OkAidGltZXN0YW1wIl07
Cit9CisKKy0gKHZvaWQpc2V0VmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKil2YWx1ZXMK
K3sKKyAgICBbc3VwZXIgc2V0T2JqZWN0OnZhbHVlcyBmb3JLZXk6QCJ2YWx1ZXMiXTsKK30KKwor
LSAoUldJUHJvdG9jb2xKU09OT2JqZWN0ICopdmFsdWVzCit7CisgICAgUldJUHJvdG9jb2xKU09O
T2JqZWN0ICpvYmplY3QgPSBbc3VwZXIgb2JqZWN0Rm9yS2V5OkAidmFsdWVzIl07CisgICAgaWYg
KCFvYmplY3QpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgcmV0dXJuIFtbUldJUHJvdG9jb2xK
U09OT2JqZWN0IGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6W1tzdXBlciBvYmplY3RGb3JLZXk6
QCJ2YWx1ZXMiXSB0b0pTT05PYmplY3RdLmdldCgpXTsKK30KKworLSAodm9pZClzZXRQYXlsb2Fk
OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilwYXlsb2FkCit7CisgICAgW3N1cGVyIHNldE9iamVj
dDpwYXlsb2FkIGZvcktleTpAInBheWxvYWQiXTsKK30KKworLSAoUldJUHJvdG9jb2xKU09OT2Jq
ZWN0ICopcGF5bG9hZAoreworICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb2JqZWN0ID0gW3N1
cGVyIG9iamVjdEZvcktleTpAInBheWxvYWQiXTsKKyAgICBpZiAoIW9iamVjdCkKKyAgICAgICAg
cmV0dXJuIG5pbDsKKyAgICByZXR1cm4gW1tSV0lQcm90b2NvbEpTT05PYmplY3QgYWxsb2NdIGlu
aXRXaXRoSlNPTk9iamVjdDpbW3N1cGVyIG9iamVjdEZvcktleTpAInBheWxvYWQiXSB0b0pTT05P
YmplY3RdLmdldCgpXTsKK30KKworLSAodm9pZClzZXRFcnJvcjooVGVzdFByb3RvY29sRGF0YWJh
c2VFcnJvciAqKWVycm9yCit7CisgICAgW3N1cGVyIHNldE9iamVjdDplcnJvciBmb3JLZXk6QCJl
cnJvciJdOworfQorCistIChUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICopZXJyb3IKK3sKKyAg
ICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9iamVjdCA9IFtzdXBlciBvYmplY3RGb3JLZXk6QCJl
cnJvciJdOworICAgIGlmICghb2JqZWN0KQorICAgICAgICByZXR1cm4gbmlsOworICAgIHJldHVy
biBbW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDpb
W3N1cGVyIG9iamVjdEZvcktleTpAImVycm9yIl0gdG9KU09OT2JqZWN0XS5nZXQoKV07Cit9CisK
Ky0gKHZvaWQpc2V0RXJyb3JMaXN0OihOU0FycmF5Lyo8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJv
cj4qLyAqKWVycm9yTGlzdAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEVfSU5f
QVJSQVkoZXJyb3JMaXN0LCBbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBjbGFzc10pOworICAg
IFtzdXBlciBzZXRKU09OQXJyYXk6dG9KU09OT2JqZWN0QXJyYXkoZXJyb3JMaXN0KSBmb3JLZXk6
QCJlcnJvckxpc3QiXTsKK30KKworLSAoTlNBcnJheS8qPFRlc3RQcm90b2NvbERhdGFiYXNlRXJy
b3I+Ki8gKillcnJvckxpc3QKK3sKKyAgICByZXR1cm4gdG9PYmpDQXJyYXk8VGVzdFByb3RvY29s
RGF0YWJhc2VFcnJvcj4oW3N1cGVyIEpTT05BcnJheUZvcktleTpAImVycm9yTGlzdCJdKTsKK30K
KworQGVuZAorCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sRGF0YWJhc2VPYmplY3RXaXRo
UHJvcGVydHlOYW1lQ29uZmxpY3RzCisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6
KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQKK3sKKyAgICBp
ZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImludGVnZXIiXSwg
QCJpbnRlZ2VyIik7CisgICAgc2VsZi5pbnRlZ2VyID0gcGF5bG9hZFtAImludGVnZXIiXTsKKwor
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImFycmF5
Il0sIEAiYXJyYXkiKTsKKyAgICBzZWxmLmFycmF5ID0gcGF5bG9hZFtAImFycmF5Il07CisKKyAg
ICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJzdHJpbmci
XSwgQCJzdHJpbmciKTsKKyAgICBzZWxmLnN0cmluZyA9IHBheWxvYWRbQCJzdHJpbmciXTsKKwor
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAInZhbHVl
Il0sIEAidmFsdWUiKTsKKyAgICBzZWxmLnZhbHVlID0gcGF5bG9hZFtAInZhbHVlIl07CisKKyAg
ICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJvYmplY3Qi
XSwgQCJvYmplY3QiKTsKKyAgICBzZWxmLm9iamVjdCA9IHBheWxvYWRbQCJvYmplY3QiXTsKKwor
ICAgIHJldHVybiBzZWxmOworfQorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmpl
Y3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9iamVjdAoreworICAgIGlmICghKHNlbGYgPSBb
c3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmplY3QgdG9KU09OT2JqZWN0XS5nZXQoKV0pKQor
ICAgICAgICByZXR1cm4gbmlsOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aEludGVnZXI6KE5TU3RyaW5nICopaW50ZWdlciBhcnJheTooTlNTdHJpbmcg
KilhcnJheSBzdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nIHZhbHVlOihOU1N0cmluZyAqKXZhbHVl
IG9iamVjdDooTlNTdHJpbmcgKilvYmplY3QKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGlu
aXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVR
VUlSRURfUFJPUEVSVFkoaW50ZWdlciwgQCJpbnRlZ2VyIik7CisgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShhcnJheSwgQCJhcnJheSIpOworICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkoc3RyaW5nLCBAInN0cmluZyIpOworICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkodmFsdWUsIEAidmFsdWUiKTsKKyAgICBU
SFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKG9iamVjdCwgQCJvYmplY3QiKTsK
KworICAgIHNlbGYuaW50ZWdlciA9IGludGVnZXI7CisgICAgc2VsZi5hcnJheSA9IGFycmF5Owor
ICAgIHNlbGYuc3RyaW5nID0gc3RyaW5nOworICAgIHNlbGYudmFsdWUgPSB2YWx1ZTsKKyAgICBz
ZWxmLm9iamVjdCA9IG9iamVjdDsKKworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXNl
dEludGVnZXI6KE5TU3RyaW5nICopaW50ZWdlcgoreworICAgIFtzdXBlciBzZXRTdHJpbmc6aW50
ZWdlciBmb3JLZXk6QCJpbnRlZ2VyIl07Cit9CisKKy0gKE5TU3RyaW5nICopaW50ZWdlcgorewor
ICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAiaW50ZWdlciJdOworfQorCistICh2b2lk
KXNldEFycmF5OihOU1N0cmluZyAqKWFycmF5Cit7CisgICAgW3N1cGVyIHNldFN0cmluZzphcnJh
eSBmb3JLZXk6QCJhcnJheSJdOworfQorCistIChOU1N0cmluZyAqKWFycmF5Cit7CisgICAgcmV0
dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJhcnJheSJdOworfQorCistICh2b2lkKXNldFN0cmlu
ZzooTlNTdHJpbmcgKilzdHJpbmcKK3sKKyAgICBbc3VwZXIgc2V0U3RyaW5nOnN0cmluZyBmb3JL
ZXk6QCJzdHJpbmciXTsKK30KKworLSAoTlNTdHJpbmcgKilzdHJpbmcKK3sKKyAgICByZXR1cm4g
W3N1cGVyIHN0cmluZ0ZvcktleTpAInN0cmluZyJdOworfQorCistICh2b2lkKXNldFZhbHVlOihO
U1N0cmluZyAqKXZhbHVlCit7CisgICAgW3N1cGVyIHNldFN0cmluZzp2YWx1ZSBmb3JLZXk6QCJ2
YWx1ZSJdOworfQorCistIChOU1N0cmluZyAqKXZhbHVlCit7CisgICAgcmV0dXJuIFtzdXBlciBz
dHJpbmdGb3JLZXk6QCJ2YWx1ZSJdOworfQorCistICh2b2lkKXNldE9iamVjdDooTlNTdHJpbmcg
KilvYmplY3QKK3sKKyAgICBbc3VwZXIgc2V0U3RyaW5nOm9iamVjdCBmb3JLZXk6QCJvYmplY3Qi
XTsKK30KKworLSAoTlNTdHJpbmcgKilvYmplY3QKK3sKKyAgICByZXR1cm4gW3N1cGVyIHN0cmlu
Z0ZvcktleTpAIm9iamVjdCJdOworfQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJv
dG9jb2xEYXRhYmFzZUR1bW15T2JqZWN0CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxv
YWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQKK3sKKyAg
ICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAg
IHJldHVybiBzZWxmOworfQorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6
KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9iamVjdAoreworICAgIGlmICghKHNlbGYgPSBbc3Vw
ZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmplY3QgdG9KU09OT2JqZWN0XS5nZXQoKV0pKQorICAg
ICAgICByZXR1cm4gbmlsOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKK0BlbmQKKworQGltcGxl
bWVudGF0aW9uIFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGUKKworLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+
ICopcGF5bG9hZAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICBy
ZXR1cm4gbmlsOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShw
YXlsb2FkW0AiZGlyZWN0aW9uYWxpdHkiXSwgQCJkaXJlY3Rpb25hbGl0eSIpOworICAgIE9wdGlv
bmFsPFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eT4gZGlyZWN0
aW9uYWxpdHkgPSBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1
bmRsZURpcmVjdGlvbmFsaXR5PihwYXlsb2FkW0AiZGlyZWN0aW9uYWxpdHkiXSk7CisgICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9CQURfRU5VTV9WQUxVRShkaXJlY3Rpb25hbGl0eSwgQCJkaXJlY3Rp
b25hbGl0eSIpOworICAgIHNlbGYuZGlyZWN0aW9uYWxpdHkgPSBkaXJlY3Rpb25hbGl0eS52YWx1
ZSgpOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2Fk
W0AiYnV0dG9ucyJdLCBAImJ1dHRvbnMiKTsKKyAgICBzZWxmLmJ1dHRvbnMgPSBwYXlsb2FkW0Ai
YnV0dG9ucyJdOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShw
YXlsb2FkW0AiY29sdW1uTmFtZXMiXSwgQCJjb2x1bW5OYW1lcyIpOworICAgIHNlbGYuY29sdW1u
TmFtZXMgPSBwYXlsb2FkW0AiY29sdW1uTmFtZXMiXTsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAIm5vdGVzIl0sIEAibm90ZXMiKTsKKyAgICBz
ZWxmLm5vdGVzID0gcGF5bG9hZFtAIm5vdGVzIl07CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9S
X1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJ0aW1lc3RhbXAiXSwgQCJ0aW1lc3RhbXAiKTsK
KyAgICBzZWxmLnRpbWVzdGFtcCA9IFtwYXlsb2FkW0AidGltZXN0YW1wIl0gZG91YmxlVmFsdWVd
OworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0Ai
dmFsdWVzIl0sIEAidmFsdWVzIik7CisgICAgc2VsZi52YWx1ZXMgPSBwYXlsb2FkW0AidmFsdWVz
Il07CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRb
QCJwYXlsb2FkIl0sIEAicGF5bG9hZCIpOworICAgIHNlbGYucGF5bG9hZCA9IHBheWxvYWRbQCJw
YXlsb2FkIl07CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBh
eWxvYWRbQCJlcnJvciJdLCBAImVycm9yIik7CisgICAgc2VsZi5lcnJvciA9IFtbVGVzdFByb3Rv
Y29sRGF0YWJhc2VFcnJvciBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRbQCJlcnJvciJd
XTsKKworICAgIHJldHVybiBzZWxmOworfQorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9j
b2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9iamVjdAoreworICAgIGlmICghKHNl
bGYgPSBbc3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmplY3QgdG9KU09OT2JqZWN0XS5nZXQo
KV0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aERpcmVjdGlvbmFsaXR5OihUZXN0UHJvdG9jb2xUZXN0UGFyYW1l
dGVyQnVuZGxlRGlyZWN0aW9uYWxpdHkpZGlyZWN0aW9uYWxpdHkgYnV0dG9uczooTlNBcnJheS8q
PE5TU3RyaW5nPiovICopYnV0dG9ucyBjb2x1bW5OYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiov
ICopY29sdW1uTmFtZXMgbm90ZXM6KE5TU3RyaW5nICopbm90ZXMgdGltZXN0YW1wOihkb3VibGUp
dGltZXN0YW1wIHZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopdmFsdWVzIHBheWxvYWQ6
KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQgZXJyb3I6KFRlc3RQcm90b2NvbERhdGFi
YXNlRXJyb3IgKillcnJvcgoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAg
ICAgICByZXR1cm4gbmlsOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9Q
RVJUWShidXR0b25zLCBAImJ1dHRvbnMiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJ
UkVEX1BST1BFUlRZKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7CisgICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShub3RlcywgQCJub3RlcyIpOworICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkodmFsdWVzLCBAInZhbHVlcyIpOworICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZCwgQCJwYXlsb2Fk
Iik7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShlcnJvciwgQCJl
cnJvciIpOworCisgICAgc2VsZi5kaXJlY3Rpb25hbGl0eSA9IGRpcmVjdGlvbmFsaXR5OworICAg
IHNlbGYuYnV0dG9ucyA9IGJ1dHRvbnM7CisgICAgc2VsZi5jb2x1bW5OYW1lcyA9IGNvbHVtbk5h
bWVzOworICAgIHNlbGYubm90ZXMgPSBub3RlczsKKyAgICBzZWxmLnRpbWVzdGFtcCA9IHRpbWVz
dGFtcDsKKyAgICBzZWxmLnZhbHVlcyA9IHZhbHVlczsKKyAgICBzZWxmLnBheWxvYWQgPSBwYXls
b2FkOworICAgIHNlbGYuZXJyb3IgPSBlcnJvcjsKKworICAgIHJldHVybiBzZWxmOworfQorCist
ICh2b2lkKXNldERpcmVjdGlvbmFsaXR5OihUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxl
RGlyZWN0aW9uYWxpdHkpZGlyZWN0aW9uYWxpdHkKK3sKKyAgICBbc3VwZXIgc2V0U3RyaW5nOnRv
UHJvdG9jb2xTdHJpbmcoZGlyZWN0aW9uYWxpdHkpIGZvcktleTpAImRpcmVjdGlvbmFsaXR5Il07
Cit9CisKKy0gKFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSlk
aXJlY3Rpb25hbGl0eQoreworICAgIHJldHVybiBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3Rv
Y29sVGVzdFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5Pihbc3VwZXIgc3RyaW5nRm9yS2V5
OkAiZGlyZWN0aW9uYWxpdHkiXSkudmFsdWUoKTsKK30KKworLSAodm9pZClzZXRCdXR0b25zOihO
U0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilidXR0b25zCit7CisgICAgW3N1cGVyIHNldEpTT05BcnJh
eTp0b0pTT05TdHJpbmdBcnJheShidXR0b25zKSBmb3JLZXk6QCJidXR0b25zIl07Cit9CisKKy0g
KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWJ1dHRvbnMKK3sKKyAgICByZXR1cm4gdG9PYmpDU3Ry
aW5nQXJyYXkoW3N1cGVyIEpTT05BcnJheUZvcktleTpAImJ1dHRvbnMiXSk7Cit9CisKKy0gKHZv
aWQpc2V0Q29sdW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWNvbHVtbk5hbWVzCit7
CisgICAgW3N1cGVyIHNldEpTT05BcnJheTp0b0pTT05TdHJpbmdBcnJheShjb2x1bW5OYW1lcykg
Zm9yS2V5OkAiY29sdW1uTmFtZXMiXTsKK30KKworLSAoTlNBcnJheS8qPE5TU3RyaW5nPiovICop
Y29sdW1uTmFtZXMKK3sKKyAgICByZXR1cm4gdG9PYmpDU3RyaW5nQXJyYXkoW3N1cGVyIEpTT05B
cnJheUZvcktleTpAImNvbHVtbk5hbWVzIl0pOworfQorCistICh2b2lkKXNldE5vdGVzOihOU1N0
cmluZyAqKW5vdGVzCit7CisgICAgW3N1cGVyIHNldFN0cmluZzpub3RlcyBmb3JLZXk6QCJub3Rl
cyJdOworfQorCistIChOU1N0cmluZyAqKW5vdGVzCit7CisgICAgcmV0dXJuIFtzdXBlciBzdHJp
bmdGb3JLZXk6QCJub3RlcyJdOworfQorCistICh2b2lkKXNldFRpbWVzdGFtcDooZG91YmxlKXRp
bWVzdGFtcAoreworICAgIFtzdXBlciBzZXREb3VibGU6dGltZXN0YW1wIGZvcktleTpAInRpbWVz
dGFtcCJdOworfQorCistIChkb3VibGUpdGltZXN0YW1wCit7CisgICAgcmV0dXJuIFtzdXBlciBk
b3VibGVGb3JLZXk6QCJ0aW1lc3RhbXAiXTsKK30KKworLSAodm9pZClzZXRWYWx1ZXM6KFJXSVBy
b3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcworeworICAgIFtzdXBlciBzZXRPYmplY3Q6dmFsdWVz
IGZvcktleTpAInZhbHVlcyJdOworfQorCistIChSV0lQcm90b2NvbEpTT05PYmplY3QgKil2YWx1
ZXMKK3sKKyAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9iamVjdCA9IFtzdXBlciBvYmplY3RG
b3JLZXk6QCJ2YWx1ZXMiXTsKKyAgICBpZiAoIW9iamVjdCkKKyAgICAgICAgcmV0dXJuIG5pbDsK
KyAgICByZXR1cm4gW1tSV0lQcm90b2NvbEpTT05PYmplY3QgYWxsb2NdIGluaXRXaXRoSlNPTk9i
amVjdDpbW3N1cGVyIG9iamVjdEZvcktleTpAInZhbHVlcyJdIHRvSlNPTk9iamVjdF0uZ2V0KCld
OworfQorCistICh2b2lkKXNldFBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxv
YWQKK3sKKyAgICBbc3VwZXIgc2V0T2JqZWN0OnBheWxvYWQgZm9yS2V5OkAicGF5bG9hZCJdOwor
fQorCistIChSV0lQcm90b2NvbEpTT05PYmplY3QgKilwYXlsb2FkCit7CisgICAgUldJUHJvdG9j
b2xKU09OT2JqZWN0ICpvYmplY3QgPSBbc3VwZXIgb2JqZWN0Rm9yS2V5OkAicGF5bG9hZCJdOwor
ICAgIGlmICghb2JqZWN0KQorICAgICAgICByZXR1cm4gbmlsOworICAgIHJldHVybiBbW1JXSVBy
b3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0Oltbc3VwZXIgb2JqZWN0
Rm9yS2V5OkAicGF5bG9hZCJdIHRvSlNPTk9iamVjdF0uZ2V0KCldOworfQorCistICh2b2lkKXNl
dEVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICopZXJyb3IKK3sKKyAgICBbc3VwZXIg
c2V0T2JqZWN0OmVycm9yIGZvcktleTpAImVycm9yIl07Cit9CisKKy0gKFRlc3RQcm90b2NvbERh
dGFiYXNlRXJyb3IgKillcnJvcgoreworICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb2JqZWN0
ID0gW3N1cGVyIG9iamVjdEZvcktleTpAImVycm9yIl07CisgICAgaWYgKCFvYmplY3QpCisgICAg
ICAgIHJldHVybiBuaWw7CisgICAgcmV0dXJuIFtbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBh
bGxvY10gaW5pdFdpdGhKU09OT2JqZWN0Oltbc3VwZXIgb2JqZWN0Rm9yS2V5OkAiZXJyb3IiXSB0
b0pTT05PYmplY3RdLmdldCgpXTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpz
b24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbi1yZXN1bHQKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjAyMDA0NDE3YTAzCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4
cGVjdGVkL3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbi1yZXN1bHQKQEAgLTAsMCAr
MSwxNTkzIEBACisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzLmlu
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGlt
ZS1jYXN0cy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworLy8g
VGVzdAorSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiVGVzdCIsIG51bGwpOworSW5z
cGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIlRlc3QuVW5jYXN0ZWRBbmltYWxzIiwge1BpZ3M6
ICJQaWdzIiwgQ293czogIkNvd3MiLCBDYXRzOiAiQ2F0cyIsIEhlbnM6ICJIZW5zIn0pOworSW5z
cGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIlRlc3QuQ2FzdGVkQW5pbWFscyIsIHtEdWNrczog
IkR1Y2tzIiwgSGVuczogIkhlbnMiLCBDcm93czogIkNyb3dzIiwgRmxhbWluZ29zOiAiRmxhbWlu
Z29zIn0pOworSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiVGVzdCIsIG51bGwpOwor
IyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMuaW4KKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbiBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaWYg
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyNpbmNsdWRlICJUZXN0
UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRl
bmRSb3V0ZXIuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVy
KFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3Bh
dGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9CisgICAgQmFja2VuZERpc3BhdGNoZXIqIGJh
Y2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQo
KTsgfQorcHJpdmF0ZToKKyAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERp
c3BhdGNoZXI7Cit9OworCisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlm
IC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorIyMjIEVuZCBGaWxl
OiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRl
c3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29s
T2JqZWN0cy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJ
bnNwZWN0b3IgeworCit0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKworCisKK30gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgK
KworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29u
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL0pT
T05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKKyNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCisj
ZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKK25hbWVz
cGFjZSBJbnNwZWN0b3IgeworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBF
bmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRl
c3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bE9iamVjdHMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgRnJvbnRl
bmRSb3V0ZXI7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0
RnJvbnRlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNw
YXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVp
cmluZy1ydW50aW1lLWNhc3RzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0
Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91
dGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVj
dG9yIHsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEZy
b250ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmpl
Y3RzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1y
dW50aW1lLWNhc3RzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3Rv
Y29sVHlwZXMuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgSW5z
cGVjdG9yIHsKKworCisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKworCisvLyBGb3J3YXJkIGRl
Y2xhcmF0aW9ucy4KK25hbWVzcGFjZSBUZXN0IHsKK2NsYXNzIFR5cGVOZWVkaW5nQ2FzdDsKK2Ns
YXNzIFJlY3Vyc2l2ZU9iamVjdDE7CitjbGFzcyBSZWN1cnNpdmVPYmplY3QyOworZW51bSBjbGFz
cyBVbmNhc3RlZEFuaW1hbHM7CitlbnVtIGNsYXNzIENhc3RlZEFuaW1hbHM7Cit9IC8vIFRlc3QK
Ky8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KKworCisvLyBUeXBlZGVmcy4KK25hbWVz
cGFjZSBUZXN0IHsKK3R5cGVkZWYgaW50IENhc3RlZE9iamVjdElkOwordHlwZWRlZiBpbnQgVW5j
YXN0ZWRPYmplY3RJZDsKK30gLy8gVGVzdAorLy8gRW5kIG9mIHR5cGVkZWZzLgorCituYW1lc3Bh
Y2UgVGVzdEhlbHBlcnMgeworCitTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUp
OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoVCBl
bnVtVmFsdWUpCit7CisgICAgcmV0dXJuIGdldEVudW1Db25zdGFudFZhbHVlKHN0YXRpY19jYXN0
PGludD4oZW51bVZhbHVlKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCisKK25h
bWVzcGFjZSBUZXN0IHsKKworLyogQSBkdW1teSB0eXBlIHRoYXQgcmVxdWlyZXMgcnVudGltZSBj
YXN0cywgYW5kIGZvcmNlcyBub24tcHJpbWl0aXZlIHJlZmVyZW5jZWQgdHlwZXMgdG8gYWxzbyBl
bWl0IHJ1bnRpbWUgY2FzdCBoZWxwZXJzLiAqLworY2xhc3MgVHlwZU5lZWRpbmdDYXN0IDogcHVi
bGljIEpTT046Ok9iamVjdEJhc2UgeworcHVibGljOgorICAgIGVudW0geworICAgICAgICBOb0Zp
ZWxkc1NldCA9IDAsCisgICAgICAgIFN0cmluZ1NldCA9IDEgPDwgMCwKKyAgICAgICAgTnVtYmVy
U2V0ID0gMSA8PCAxLAorICAgICAgICBBbmltYWxzU2V0ID0gMSA8PCAyLAorICAgICAgICBJZFNl
dCA9IDEgPDwgMywKKyAgICAgICAgVHJlZVNldCA9IDEgPDwgNCwKKyAgICAgICAgQWxsRmllbGRz
U2V0ID0gKFN0cmluZ1NldCB8IE51bWJlclNldCB8IEFuaW1hbHNTZXQgfCBJZFNldCB8IFRyZWVT
ZXQpCisgICAgfTsKKworICAgIHRlbXBsYXRlPGludCBTVEFURT4KKyAgICBjbGFzcyBCdWlsZGVy
IHsKKyAgICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBtX3Jlc3VsdDsK
KworICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0
U3RhdGUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8
QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBCdWls
ZGVyKFJlZjwvKlR5cGVOZWVkaW5nQ2FzdCovSlNPTjo6T2JqZWN0PiYmIG9iamVjdCkKKyAgICAg
ICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQorICAgICAgICB7CisgICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2lu
X25vbl9pbml0X3N0YXRlKTsKKyAgICAgICAgfQorICAgICAgICBmcmllbmQgY2xhc3MgVHlwZU5l
ZWRpbmdDYXN0OworICAgIHB1YmxpYzoKKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU3RyaW5n
U2V0PiYgc2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTdHJpbmdTZXQpLCBwcm9wZXJ0eV9zdHJpbmdf
YWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygic3RyaW5nIl9z
LCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFN0cmluZ1NldD4oKTsKKyAg
ICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBOdW1iZXJTZXQ+JiBzZXROdW1iZXIo
aW50IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRF
ICYgTnVtYmVyU2V0KSwgcHJvcGVydHlfbnVtYmVyX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXRJbnRlZ2VyKCJudW1iZXIiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIHJl
dHVybiBjYXN0U3RhdGU8TnVtYmVyU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRl
cjxTVEFURSB8IEFuaW1hbHNTZXQ+JiBzZXRBbmltYWxzKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRl
c3Q6OkNhc3RlZEFuaW1hbHMgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKCEoU1RBVEUgJiBBbmltYWxzU2V0KSwgcHJvcGVydHlfYW5pbWFsc19hbHJlYWR5X3Nl
dCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJhbmltYWxzIl9zLCBJbnNwZWN0
b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUodmFsdWUpKTsK
KyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8QW5pbWFsc1NldD4oKTsKKyAgICAgICAgfQor
CisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBJZFNldD4mIHNldElkKGludCB2YWx1ZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIElkU2V0KSwgcHJvcGVy
dHlfaWRfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldEludGVnZXIoImlk
Il9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPElkU2V0PigpOworICAg
ICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFRyZWVTZXQ+JiBzZXRUcmVlKFJlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QxPiB2YWx1ZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFRyZWVTZXQpLCBw
cm9wZXJ0eV90cmVlX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmpl
Y3QoInRyZWUiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VHJlZVNl
dD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIFJlZjxUeXBlTmVlZGluZ0Nhc3Q+IHJlbGVhc2Uo
KQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVs
ZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
c2l6ZW9mKFR5cGVOZWVkaW5nQ2FzdCkgPT0gc2l6ZW9mKEpTT046Ok9iamVjdCksIGNhbm5vdF9j
YXN0KTsKKworICAgICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4ganNvblJlc3VsdCA9IG1fcmVz
dWx0LnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFdURk1vdmUo
KnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPFR5cGVOZWVkaW5nQ2FzdD4qPigmanNvblJlc3VsdCkpOwor
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvKgor
ICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKKyAgICAgKiBSZWY8VHlwZU5lZWRpbmdDYXN0
PiByZXN1bHQgPSBUeXBlTmVlZGluZ0Nhc3Q6OmNyZWF0ZSgpCisgICAgICogICAgIC5zZXRTdHJp
bmcoLi4uKQorICAgICAqICAgICAuc2V0TnVtYmVyKC4uLikKKyAgICAgKiAgICAgLnNldEFuaW1h
bHMoLi4uKQorICAgICAqICAgICAuc2V0SWQoLi4uKQorICAgICAqICAgICAuc2V0VHJlZSguLi4p
CisgICAgICogICAgIC5yZWxlYXNlKCk7CisgICAgICovCisgICAgc3RhdGljIEJ1aWxkZXI8Tm9G
aWVsZHNTZXQ+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxk
c1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7CisgICAgfQorfTsKKworZW51bSBjbGFzcyBV
bmNhc3RlZEFuaW1hbHMgeworICAgIFBpZ3MgPSA0LAorICAgIENvd3MgPSA1LAorICAgIENhdHMg
PSA2LAorICAgIEhlbnMgPSAxLAorfTsgLy8gZW51bSBjbGFzcyBVbmNhc3RlZEFuaW1hbHMKKwor
ZW51bSBjbGFzcyBDYXN0ZWRBbmltYWxzIHsKKyAgICBEdWNrcyA9IDAsCisgICAgSGVucyA9IDEs
CisgICAgQ3Jvd3MgPSAyLAorICAgIEZsYW1pbmdvcyA9IDMsCit9OyAvLyBlbnVtIGNsYXNzIENh
c3RlZEFuaW1hbHMKKworY2xhc3MgUmVjdXJzaXZlT2JqZWN0MSA6IHB1YmxpYyBKU09OOjpPYmpl
Y3RCYXNlIHsKK3B1YmxpYzoKKyAgICBlbnVtIHsKKyAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAor
ICAgICAgICBBbGxGaWVsZHNTZXQgPSAwCisgICAgfTsKKworICAgIHRlbXBsYXRlPGludCBTVEFU
RT4KKyAgICBjbGFzcyBCdWlsZGVyIHsKKyAgICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiBtX3Jlc3VsdDsKKworICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRl
cjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CisgICAg
ICAgIH0KKworICAgICAgICBCdWlsZGVyKFJlZjwvKlJlY3Vyc2l2ZU9iamVjdDEqL0pTT046Ok9i
amVjdD4mJiBvYmplY3QpCisgICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkK
KyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNT
ZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CisgICAgICAgIH0KKyAgICAg
ICAgZnJpZW5kIGNsYXNzIFJlY3Vyc2l2ZU9iamVjdDE7CisgICAgcHVibGljOgorCisgICAgICAg
IFJlZjxSZWN1cnNpdmVPYmplY3QxPiByZWxlYXNlKCkKKyAgICAgICAgeworICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5
KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihSZWN1cnNpdmVPYmplY3QxKSA9
PSBzaXplb2YoSlNPTjo6T2JqZWN0KSwgY2Fubm90X2Nhc3QpOworCisgICAgICAgICAgICBSZWY8
SlNPTjo6T2JqZWN0PiBqc29uUmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKKyAg
ICAgICAgICAgIGF1dG8gcmVzdWx0ID0gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8UmVj
dXJzaXZlT2JqZWN0MT4qPigmanNvblJlc3VsdCkpOworICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvKgorICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1
Y3RvcjoKKyAgICAgKiBSZWY8UmVjdXJzaXZlT2JqZWN0MT4gcmVzdWx0ID0gUmVjdXJzaXZlT2Jq
ZWN0MTo6Y3JlYXRlKCkKKyAgICAgKiAgICAgLnJlbGVhc2UoKTsKKyAgICAgKi8KKyAgICBzdGF0
aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBC
dWlsZGVyPE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICB9CisKKyAg
ICB2b2lkIHNldE9iaihSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZl
T2JqZWN0Mj4gdmFsdWUpCisgICAgeworICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRPYmpl
Y3QoIm9iaiJfcywgV1RGTW92ZSh2YWx1ZSkpOworICAgIH0KK307CisKK2NsYXNzIFJlY3Vyc2l2
ZU9iamVjdDIgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CitwdWJsaWM6CisgICAgZW51bSB7
CisgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKKyAgICAgICAgQWxsRmllbGRzU2V0ID0gMAorICAg
IH07CisKKyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CisgICAgY2xhc3MgQnVpbGRlciB7CisgICAg
cHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7CisKKyAgICAg
ICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8
U1RBVEUgfCBTVEVQPio+KHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcihSZWY8
LypSZWN1cnNpdmVPYmplY3QyKi9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQorICAgICAgICAgICAg
OiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2lu
aXRfc3RhdGUpOworICAgICAgICB9CisgICAgICAgIGZyaWVuZCBjbGFzcyBSZWN1cnNpdmVPYmpl
Y3QyOworICAgIHB1YmxpYzoKKworICAgICAgICBSZWY8UmVjdXJzaXZlT2JqZWN0Mj4gcmVsZWFz
ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZp
ZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VS
VChzaXplb2YoUmVjdXJzaXZlT2JqZWN0MikgPT0gc2l6ZW9mKEpTT046Ok9iamVjdCksIGNhbm5v
dF9jYXN0KTsKKworICAgICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4ganNvblJlc3VsdCA9IG1f
cmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFdURk1v
dmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPFJlY3Vyc2l2ZU9iamVjdDI+Kj4oJmpzb25SZXN1bHQp
KTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICB9OworCisgICAg
LyoKKyAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CisgICAgICogUmVmPFJlY3Vyc2l2ZU9i
amVjdDI+IHJlc3VsdCA9IFJlY3Vyc2l2ZU9iamVjdDI6OmNyZWF0ZSgpCisgICAgICogICAgIC5y
ZWxlYXNlKCk7CisgICAgICovCisgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0
ZSgpCisgICAgeworICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKSk7CisgICAgfQorCisgICAgdm9pZCBzZXRPYmooUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+IHZhbHVlKQorICAgIHsKKyAgICAg
ICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0T2JqZWN0KCJvYmoiX3MsIFdURk1vdmUodmFsdWUpKTsK
KyAgICB9Cit9OworCit9IC8vIFRlc3QKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQmluZGluZ1RyYWl0
czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPiB7CitzdGF0aWMgdm9p
ZCBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShKU09OOjpWYWx1ZSopOworfTsKK3RlbXBsYXRl
PD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5l
ZWRpbmdDYXN0PiB7CitzdGF0aWMgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5
cGVOZWVkaW5nQ2FzdD4gcnVudGltZUNhc3QoUmVmUHRyPEpTT046OlZhbHVlPiYmIHZhbHVlKTsK
K3N0YXRpYyB2b2lkIGFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEpTT046OlZhbHVlKik7Cit9
OwordGVtcGxhdGU8PiBzdHJ1Y3QgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpU
ZXN0OjpSZWN1cnNpdmVPYmplY3QxPiB7CitzdGF0aWMgdm9pZCBhc3NlcnRWYWx1ZUhhc0V4cGVj
dGVkVHlwZShKU09OOjpWYWx1ZSopOworfTsKK3RlbXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFp
dHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0Mj4geworc3RhdGlj
IHZvaWQgYXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSlNPTjo6VmFsdWUqKTsKK307CisKK25h
bWVzcGFjZSBUZXN0SGVscGVycyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFByb3RvY29sRW51bVR5
cGU+CitPcHRpb25hbDxQcm90b2NvbEVudW1UeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmco
Y29uc3QgU3RyaW5nJik7CisKKy8vIEVudW1zIGluIHRoZSAnVGVzdCcgRG9tYWluCit0ZW1wbGF0
ZTw+CitPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM+
IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNh
c3RlZEFuaW1hbHM+KGNvbnN0IFN0cmluZyYpOwordGVtcGxhdGU8PgorT3B0aW9uYWw8SW5zcGVj
dG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9tU3Ry
aW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+KGNvbnN0IFN0cmlu
ZyYpOworCit9IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycworCit9IC8vIG5hbWVzcGFjZSBQcm90
b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworbmFtZXNwYWNlIFdURiB7CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKKworLy8gSGFzaCBkZWNsYXJh
dGlvbnMgaW4gdGhlICdUZXN0JyBEb21haW4KK3RlbXBsYXRlPD4KK3N0cnVjdCBEZWZhdWx0SGFz
aDxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM+IHsKKyAgICB0eXBl
ZGVmIEludEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzPiBI
YXNoOworfTsKK3RlbXBsYXRlPD4KK3N0cnVjdCBEZWZhdWx0SGFzaDxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPiB7CisgICAgdHlwZWRlZiBJbnRIYXNoPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+IEhhc2g7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXVEYKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbiBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitu
YW1lc3BhY2UgUHJvdG9jb2wgeworCituYW1lc3BhY2UgVGVzdEhlbHBlcnMgeworCitzdGF0aWMg
Y29uc3QgY2hhciogY29uc3QgZW51bV9jb25zdGFudF92YWx1ZXNbXSA9IHsKKyAgICAiRHVja3Mi
LAorICAgICJIZW5zIiwKKyAgICAiQ3Jvd3MiLAorICAgICJGbGFtaW5nb3MiLAorICAgICJQaWdz
IiwKKyAgICAiQ293cyIsCisgICAgIkNhdHMiLAorfTsKKworU3RyaW5nIGdldEVudW1Db25zdGFu
dFZhbHVlKGludCBjb2RlKSB7CisgICAgcmV0dXJuIGVudW1fY29uc3RhbnRfdmFsdWVzW2NvZGVd
OworfQorCisvLyBFbnVtcyBpbiB0aGUgJ1Rlc3QnIERvbWFpbgorCit0ZW1wbGF0ZTw+CitPcHRp
b25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM+IHBhcnNlRW51
bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1h
bHM+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCit7CisgICAgc3RhdGljIGNvbnN0IHNp
emVfdCBjb25zdGFudFZhbHVlc1tdID0geworICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJv
dG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFsczo6UGlncywKKyAgICAgICAgKHNpemVfdClJbnNw
ZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM6OkNvd3MsCisgICAgICAgIChz
aXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzOjpDYXRzLAor
ICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFs
czo6SGVucywKKyAgICB9OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgNDsgKytpKQorICAg
ICAgICBpZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRW
YWx1ZXNbaV1dKQorICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0
OjpVbmNhc3RlZEFuaW1hbHMpY29uc3RhbnRWYWx1ZXNbaV07CisKKyAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworfQorCit0ZW1wbGF0ZTw+CitPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpU
ZXN0OjpDYXN0ZWRBbmltYWxzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmlu
ZykKK3sKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7CisgICAg
ICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFsczo6RHVj
a3MsCisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5p
bWFsczo6SGVucywKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpD
YXN0ZWRBbmltYWxzOjpDcm93cywKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29s
OjpUZXN0OjpDYXN0ZWRBbmltYWxzOjpGbGFtaW5nb3MsCisgICAgfTsKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IDQ7ICsraSkKKyAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1f
Y29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKKyAgICAgICAgICAgIHJldHVybiAo
SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscyljb25zdGFudFZhbHVlc1tp
XTsKKworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RI
ZWxwZXJzCisKKworCit2b2lkIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVz
dDo6Q2FzdGVkQW5pbWFscz46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEpTT046OlZhbHVl
KiB2YWx1ZSkKK3sKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgIEFTU0VSVF9BUkcodmFsdWUsIHZh
bHVlKTsKKyAgICBTdHJpbmcgcmVzdWx0OworICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9IHZhbHVl
LT5hc1N0cmluZyhyZXN1bHQpOworICAgIEFTU0VSVChjYXN0U3VjY2VlZGVkKTsKKyAgICBBU1NF
UlQocmVzdWx0ID09ICJEdWNrcyIgfHwgcmVzdWx0ID09ICJIZW5zIiB8fCByZXN1bHQgPT0gIkNy
b3dzIiB8fCByZXN1bHQgPT0gIkZsYW1pbmdvcyIpOworI2Vsc2UgLy8gQVNTRVJUX0VOQUJMRUQK
KyAgICBVTlVTRURfUEFSQU0odmFsdWUpOworI2VuZGlmIC8vIEFTU0VSVF9FTkFCTEVECit9CisK
K3ZvaWQgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGlu
Z0Nhc3Q+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShKU09OOjpWYWx1ZSogdmFsdWUpCit7
CisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICBBU1NFUlRfQVJHKHZhbHVlLCB2YWx1ZSk7CisgICAg
UmVmUHRyPEpTT046Ok9iamVjdD4gb2JqZWN0OworICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9IHZh
bHVlLT5hc09iamVjdChvYmplY3QpOworICAgIEFTU0VSVF9VTlVTRUQoY2FzdFN1Y2NlZWRlZCwg
Y2FzdFN1Y2NlZWRlZCk7CisgICAgeworICAgICAgICBhdXRvIHN0cmluZ1BvcyA9IG9iamVjdC0+
ZmluZCgic3RyaW5nIl9zKTsKKyAgICAgICAgQVNTRVJUKHN0cmluZ1BvcyAhPSBvYmplY3QtPmVu
ZCgpKTsKKyAgICAgICAgQmluZGluZ1RyYWl0czxTdHJpbmc+Ojphc3NlcnRWYWx1ZUhhc0V4cGVj
dGVkVHlwZShzdHJpbmdQb3MtPnZhbHVlLmdldCgpKTsKKyAgICB9CisgICAgeworICAgICAgICBh
dXRvIG51bWJlclBvcyA9IG9iamVjdC0+ZmluZCgibnVtYmVyIl9zKTsKKyAgICAgICAgQVNTRVJU
KG51bWJlclBvcyAhPSBvYmplY3QtPmVuZCgpKTsKKyAgICAgICAgQmluZGluZ1RyYWl0czxpbnQ+
Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShudW1iZXJQb3MtPnZhbHVlLmdldCgpKTsKKyAg
ICB9CisgICAgeworICAgICAgICBhdXRvIGFuaW1hbHNQb3MgPSBvYmplY3QtPmZpbmQoImFuaW1h
bHMiX3MpOworICAgICAgICBBU1NFUlQoYW5pbWFsc1BvcyAhPSBvYmplY3QtPmVuZCgpKTsKKyAg
ICAgICAgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmlt
YWxzPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoYW5pbWFsc1Bvcy0+dmFsdWUuZ2V0KCkp
OworICAgIH0KKyAgICB7CisgICAgICAgIGF1dG8gaWRQb3MgPSBvYmplY3QtPmZpbmQoImlkIl9z
KTsKKyAgICAgICAgQVNTRVJUKGlkUG9zICE9IG9iamVjdC0+ZW5kKCkpOworICAgICAgICBCaW5k
aW5nVHJhaXRzPGludD46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKGlkUG9zLT52YWx1ZS5n
ZXQoKSk7CisgICAgfQorICAgIHsKKyAgICAgICAgYXV0byB0cmVlUG9zID0gb2JqZWN0LT5maW5k
KCJ0cmVlIl9zKTsKKyAgICAgICAgQVNTRVJUKHRyZWVQb3MgIT0gb2JqZWN0LT5lbmQoKSk7Cisg
ICAgICAgIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZl
T2JqZWN0MT46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKHRyZWVQb3MtPnZhbHVlLmdldCgp
KTsKKyAgICB9CisKKyAgICBpbnQgZm91bmRQcm9wZXJ0aWVzQ291bnQgPSA1OworICAgIGlmIChm
b3VuZFByb3BlcnRpZXNDb3VudCAhPSBvYmplY3QtPnNpemUoKSkKKyAgICAgICAgRkFUQUwoIlVu
ZXhwZWN0ZWQgcHJvcGVydGllcyBpbiBvYmplY3Q6ICVzXG4iLCBvYmplY3QtPnRvSlNPTlN0cmlu
ZygpLmFzY2lpKCkuZGF0YSgpKTsKKyNlbHNlIC8vIEFTU0VSVF9FTkFCTEVECisgICAgVU5VU0VE
X1BBUkFNKHZhbHVlKTsKKyNlbmRpZiAvLyBBU1NFUlRfRU5BQkxFRAorfQorCitSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0PiBCaW5kaW5nVHJhaXRzPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD46OnJ1bnRpbWVDYXN0KFJl
ZlB0cjxKU09OOjpWYWx1ZT4mJiB2YWx1ZSkKK3sKKyAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBy
ZXN1bHQ7CisgICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdmFsdWUtPmFzT2JqZWN0KHJlc3VsdCk7
CisgICAgQVNTRVJUX1VOVVNFRChjYXN0U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsKKyAgICBC
aW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD46
OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKHJlc3VsdC5nZXQoKSk7CisgICAgQ09NUElMRV9B
U1NFUlQoc2l6ZW9mKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdCkg
PT0gc2l6ZW9mKEpTT046Ok9iamVjdEJhc2UpLCB0eXBlX2Nhc3RfcHJvYmxlbSk7CisgICAgcmV0
dXJuIHN0YXRpY19jYXN0PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2Fz
dCo+KHN0YXRpY19jYXN0PEpTT046Ok9iamVjdEJhc2UqPihyZXN1bHQuZ2V0KCkpKTsKK30KKwor
Cit2b2lkIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZl
T2JqZWN0MT46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEpTT046OlZhbHVlKiB2YWx1ZSkK
K3sKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgIEFTU0VSVF9BUkcodmFsdWUsIHZhbHVlKTsKKyAg
ICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBvYmplY3Q7CisgICAgYm9vbCBjYXN0U3VjY2VlZGVkID0g
dmFsdWUtPmFzT2JqZWN0KG9iamVjdCk7CisgICAgQVNTRVJUX1VOVVNFRChjYXN0U3VjY2VlZGVk
LCBjYXN0U3VjY2VlZGVkKTsKKworICAgIGludCBmb3VuZFByb3BlcnRpZXNDb3VudCA9IDA7Cisg
ICAgeworICAgICAgICBhdXRvIG9ialBvcyA9IG9iamVjdC0+ZmluZCgib2JqIl9zKTsKKyAgICAg
ICAgaWYgKG9ialBvcyAhPSBvYmplY3QtPmVuZCgpKSB7CisgICAgICAgICAgICBCaW5kaW5nVHJh
aXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDI+Ojphc3NlcnRW
YWx1ZUhhc0V4cGVjdGVkVHlwZShvYmpQb3MtPnZhbHVlLmdldCgpKTsKKyAgICAgICAgICAgICsr
Zm91bmRQcm9wZXJ0aWVzQ291bnQ7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGZvdW5kUHJv
cGVydGllc0NvdW50ICE9IG9iamVjdC0+c2l6ZSgpKQorICAgICAgICBGQVRBTCgiVW5leHBlY3Rl
ZCBwcm9wZXJ0aWVzIGluIG9iamVjdDogJXNcbiIsIG9iamVjdC0+dG9KU09OU3RyaW5nKCkuYXNj
aWkoKS5kYXRhKCkpOworI2Vsc2UgLy8gQVNTRVJUX0VOQUJMRUQKKyAgICBVTlVTRURfUEFSQU0o
dmFsdWUpOworI2VuZGlmIC8vIEFTU0VSVF9FTkFCTEVECit9CisKK3ZvaWQgQmluZGluZ1RyYWl0
czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QyPjo6YXNzZXJ0VmFs
dWVIYXNFeHBlY3RlZFR5cGUoSlNPTjo6VmFsdWUqIHZhbHVlKQoreworI2lmIEFTU0VSVF9FTkFC
TEVECisgICAgQVNTRVJUX0FSRyh2YWx1ZSwgdmFsdWUpOworICAgIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+IG9iamVjdDsKKyAgICBib29sIGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNPYmplY3Qob2Jq
ZWN0KTsKKyAgICBBU1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQpOwor
CisgICAgaW50IGZvdW5kUHJvcGVydGllc0NvdW50ID0gMDsKKyAgICB7CisgICAgICAgIGF1dG8g
b2JqUG9zID0gb2JqZWN0LT5maW5kKCJvYmoiX3MpOworICAgICAgICBpZiAob2JqUG9zICE9IG9i
amVjdC0+ZW5kKCkpIHsKKyAgICAgICAgICAgIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90
b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBl
KG9ialBvcy0+dmFsdWUuZ2V0KCkpOworICAgICAgICAgICAgKytmb3VuZFByb3BlcnRpZXNDb3Vu
dDsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoZm91bmRQcm9wZXJ0aWVzQ291bnQgIT0gb2Jq
ZWN0LT5zaXplKCkpCisgICAgICAgIEZBVEFMKCJVbmV4cGVjdGVkIHByb3BlcnRpZXMgaW4gb2Jq
ZWN0OiAlc1xuIiwgb2JqZWN0LT50b0pTT05TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7CisjZWxz
ZSAvLyBBU1NFUlRfRU5BQkxFRAorICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7CisjZW5kaWYgLy8g
QVNTRVJUX0VOQUJMRUQKK30KKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAK
KworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0
cy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgor
I2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworCisKK25hbWVzcGFjZSBJbnNwZWN0b3Igewor
CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNr
ZW5kRGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBl
LXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJh
Y2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIK
KyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbmNsdWRlIDx3dGYv
SlNPTlZhbHVlcy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJz
Lm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3Rz
Lmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxX
ZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+CisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkg
KCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNP
YmplY3QKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24u
aAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMu
anNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRl
c3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJu
YWwuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorI2ltcG9y
dCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9y
dCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+
CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4K
KwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90
b2NvbENvbmZpZ3VyYXRpb24KK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIq
IF9jb250cm9sbGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihB
dWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0g
W3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBB
U1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJl
dHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbc3VwZXIgZGVhbGxvY107
Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24u
bW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNh
c3RzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0
ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMuaCIKKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFj
ZSBJbnNwZWN0b3I7CisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNo
ZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbiBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPEZvdW5kYXRpb24v
Rm91bmRhdGlvbi5oPgorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2Jq
ZWN0Lmg+CisKKworQGNsYXNzIFRlc3RQcm90b2NvbFRlc3RUeXBlTmVlZGluZ0Nhc3Q7CitAY2xh
c3MgVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDE7CitAY2xhc3MgVGVzdFByb3RvY29s
VGVzdFJlY3Vyc2l2ZU9iamVjdDI7CisKK3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQ
cm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHMpIHsKKyAgICBUZXN0UHJvdG9jb2xUZXN0VW5jYXN0
ZWRBbmltYWxzUGlncywKKyAgICBUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzQ293cywK
KyAgICBUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzQ2F0cywKKyAgICBUZXN0UHJvdG9j
b2xUZXN0VW5jYXN0ZWRBbmltYWxzSGVucywKK307CisKK3R5cGVkZWYgTlNfRU5VTShOU0ludGVn
ZXIsIFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzKSB7CisgICAgVGVzdFByb3RvY29sVGVz
dENhc3RlZEFuaW1hbHNEdWNrcywKKyAgICBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFsc0hl
bnMsCisgICAgVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHNDcm93cywKKyAgICBUZXN0UHJv
dG9jb2xUZXN0Q2FzdGVkQW5pbWFsc0ZsYW1pbmdvcywKK307CisKK19fYXR0cmlidXRlX18oKHZp
c2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUZXN0VHlwZU5l
ZWRpbmdDYXN0IDogUldJUHJvdG9jb2xKU09OT2JqZWN0CistIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKKy0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3Qg
Kilqc29uT2JqZWN0OworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoU3RyaW5nOihOU1N0cmluZyAq
KXN0cmluZyBudW1iZXI6KGludCludW1iZXIgYW5pbWFsczooVGVzdFByb3RvY29sVGVzdENhc3Rl
ZEFuaW1hbHMpYW5pbWFscyBpZGVudGlmaWVyOihpbnQpaWRlbnRpZmllciB0cmVlOihUZXN0UHJv
dG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSAqKXRyZWU7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVy
dHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKnN0cmluZzsKKy8qIHJlcXVpcmVkICovIEBw
cm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCBudW1iZXI7CisvKiByZXF1aXJlZCAqLyBA
cHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFs
cyBhbmltYWxzOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikg
aW50IGlkZW50aWZpZXI7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0
YWluKSBUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSAqdHJlZTsKK0BlbmQKKworX19h
dHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90
b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxIDogUldJUHJvdG9jb2xKU09OT2JqZWN0CistIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICop
cGF5bG9hZDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90
b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OworLyogb3B0aW9uYWwgKi8gQHByb3BlcnR5IChu
b25hdG9taWMsIHJldGFpbikgVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDIgKm9iajsK
K0BlbmQKKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJm
YWNlIFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QyIDogUldJUHJvdG9jb2xKU09OT2Jq
ZWN0CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJp
bmcgKiwgaWQ+ICopcGF5bG9hZDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2Jq
ZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OworLyogb3B0aW9uYWwgKi8g
QHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9i
amVjdDEgKm9iajsKK0BlbmQKKworCisKKworCisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQ
cm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4KKworIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2wuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2Fz
dHMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUu
aCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxl
ci5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKworCisKKworIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVx
dWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9y
L1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsK
KwordGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgorT3B0aW9uYWw8T2JqQ0VudW1UeXBl
PiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7CisKK2lubGluZSBTdHJp
bmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzIHZhbHVl
KQoreworICAgIHN3aXRjaCh2YWx1ZSkgeworICAgIGNhc2UgVGVzdFByb3RvY29sVGVzdFVuY2Fz
dGVkQW5pbWFsc1BpZ3M6CisgICAgICAgIHJldHVybiAiUGlncyJfczsKKyAgICBjYXNlIFRlc3RQ
cm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHNDb3dzOgorICAgICAgICByZXR1cm4gIkNvd3MiX3M7
CisgICAgY2FzZSBUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzQ2F0czoKKyAgICAgICAg
cmV0dXJuICJDYXRzIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFs
c0hlbnM6CisgICAgICAgIHJldHVybiAiSGVucyJfczsKKyAgICB9Cit9CisKK3RlbXBsYXRlPD4K
K2lubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzPiBmcm9tUHJv
dG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gIlBp
Z3MiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc1BpZ3M7
CisgICAgaWYgKHZhbHVlID09ICJDb3dzIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFRl
c3RVbmNhc3RlZEFuaW1hbHNDb3dzOworICAgIGlmICh2YWx1ZSA9PSAiQ2F0cyIpCisgICAgICAg
IHJldHVybiBUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzQ2F0czsKKyAgICBpZiAodmFs
dWUgPT0gIkhlbnMiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5p
bWFsc0hlbnM7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKworaW5saW5lIFN0cmluZyB0
b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzIHZhbHVlKQorewor
ICAgIHN3aXRjaCh2YWx1ZSkgeworICAgIGNhc2UgVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1h
bHNEdWNrczoKKyAgICAgICAgcmV0dXJuICJEdWNrcyJfczsKKyAgICBjYXNlIFRlc3RQcm90b2Nv
bFRlc3RDYXN0ZWRBbmltYWxzSGVuczoKKyAgICAgICAgcmV0dXJuICJIZW5zIl9zOworICAgIGNh
c2UgVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHNDcm93czoKKyAgICAgICAgcmV0dXJuICJD
cm93cyJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzRmxhbWluZ29z
OgorICAgICAgICByZXR1cm4gIkZsYW1pbmdvcyJfczsKKyAgICB9Cit9CisKK3RlbXBsYXRlPD4K
K2lubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFscz4gZnJvbVByb3Rv
Y29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09ICJEdWNr
cyIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFsc0R1Y2tzOwor
ICAgIGlmICh2YWx1ZSA9PSAiSGVucyIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xUZXN0
Q2FzdGVkQW5pbWFsc0hlbnM7CisgICAgaWYgKHZhbHVlID09ICJDcm93cyIpCisgICAgICAgIHJl
dHVybiBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFsc0Nyb3dzOworICAgIGlmICh2YWx1ZSA9
PSAiRmxhbWluZ29zIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmlt
YWxzRmxhbWluZ29zOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK30gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNh
c3RzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0
ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29s
LmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCisjaW1wb3J0IDxXZWJJbnNw
ZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorCit1c2luZyBuYW1lc3BhY2Ug
SW5zcGVjdG9yOworCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoVGVz
dERvbWFpbikKKworKyAodm9pZClfcGFyc2VUeXBlTmVlZGluZ0Nhc3Q6KFRlc3RQcm90b2NvbFRl
c3RUeXBlTmVlZGluZ0Nhc3QgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Cisr
ICh2b2lkKV9wYXJzZUNhc3RlZE9iamVjdElkOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5
bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNlVW5jYXN0ZWRPYmplY3RJZDooTlNOdW1i
ZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisrICh2b2lkKV9wYXJzZVVu
Y2FzdGVkQW5pbWFsczooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxv
YWQ7CisrICh2b2lkKV9wYXJzZUNhc3RlZEFuaW1hbHM6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZy
b21QYXlsb2FkOihpZClwYXlsb2FkOworKyAodm9pZClfcGFyc2VSZWN1cnNpdmVPYmplY3QxOihU
ZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDoo
aWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNlUmVjdXJzaXZlT2JqZWN0MjooVGVzdFByb3RvY29s
VGVzdFJlY3Vyc2l2ZU9iamVjdDIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7
CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAo
VGVzdERvbWFpbikKKworKyAodm9pZClfcGFyc2VUeXBlTmVlZGluZ0Nhc3Q6KFRlc3RQcm90b2Nv
bFRlc3RUeXBlTmVlZGluZ0Nhc3QgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQK
K3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25h
cnkgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbFRlc3RUeXBlTmVlZGlu
Z0Nhc3QgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKK30KKworKyAodm9pZClfcGFy
c2VDYXN0ZWRPYmplY3RJZDooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBh
eWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU051
bWJlciBjbGFzc10pOworICAgICpvdXRWYWx1ZSA9IChOU051bWJlciAqKXBheWxvYWQ7Cit9CisK
KysgKHZvaWQpX3BhcnNlVW5jYXN0ZWRPYmplY3RJZDooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJv
bVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBF
KHBheWxvYWQsIFtOU051bWJlciBjbGFzc10pOworICAgICpvdXRWYWx1ZSA9IChOU051bWJlciAq
KXBheWxvYWQ7Cit9CisKKysgKHZvaWQpX3BhcnNlVW5jYXN0ZWRBbmltYWxzOihOU051bWJlciAq
KilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TU3RyaW5nIGNsYXNzXSk7CisgICAgT3B0aW9uYWw8
VGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFscz4gcmVzdWx0ID0gSW5zcGVjdG9yOjpmcm9t
UHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFscz4ocGF5bG9hZCk7
CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfRU5VTV9WQUxVRShyZXN1bHQsIEAiVW5jYXN0
ZWRBbmltYWxzIik7CisgICAgKm91dFZhbHVlID0gQChyZXN1bHQudmFsdWUoKSk7Cit9CisKKysg
KHZvaWQpX3BhcnNlQ2FzdGVkQW5pbWFsczooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxv
YWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxv
YWQsIFtOU1N0cmluZyBjbGFzc10pOworICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbFRlc3RDYXN0
ZWRBbmltYWxzPiByZXN1bHQgPSBJbnNwZWN0b3I6OmZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJv
dG9jb2xUZXN0Q2FzdGVkQW5pbWFscz4ocGF5bG9hZCk7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9CQURfRU5VTV9WQUxVRShyZXN1bHQsIEAiQ2FzdGVkQW5pbWFscyIpOworICAgICpvdXRWYWx1
ZSA9IEAocmVzdWx0LnZhbHVlKCkpOworfQorCisrICh2b2lkKV9wYXJzZVJlY3Vyc2l2ZU9iamVj
dDE6KFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxICoqKW91dFZhbHVlIGZyb21QYXls
b2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXls
b2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9j
b2xUZXN0UmVjdXJzaXZlT2JqZWN0MSBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOwor
fQorCisrICh2b2lkKV9wYXJzZVJlY3Vyc2l2ZU9iamVjdDI6KFRlc3RQcm90b2NvbFRlc3RSZWN1
cnNpdmVPYmplY3QyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNz
XSk7CisgICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MiBh
bGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOworfQorCitAZW5kCisKKworIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbFR5cGVzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlw
ZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9y
dCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3Iv
UldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMu
aD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0
b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUZXN0VHlwZU5lZWRpbmdDYXN0CisK
Ky0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5T
U3RyaW5nICosIGlkPiAqKXBheWxvYWQKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRd
KSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlS
RURfUFJPUEVSVFkocGF5bG9hZFtAInN0cmluZyJdLCBAInN0cmluZyIpOworICAgIHNlbGYuc3Ry
aW5nID0gcGF5bG9hZFtAInN0cmluZyJdOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFV
SVJFRF9QUk9QRVJUWShwYXlsb2FkW0AibnVtYmVyIl0sIEAibnVtYmVyIik7CisgICAgc2VsZi5u
dW1iZXIgPSBbcGF5bG9hZFtAIm51bWJlciJdIGludGVnZXJWYWx1ZV07CisKKyAgICBUSFJPV19F
WENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJhbmltYWxzIl0sIEAiYW5p
bWFscyIpOworICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzPiBhbmlt
YWxzID0gZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzPihw
YXlsb2FkW0AiYW5pbWFscyJdKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9FTlVNX1ZB
TFVFKGFuaW1hbHMsIEAiYW5pbWFscyIpOworICAgIHNlbGYuYW5pbWFscyA9IGFuaW1hbHMudmFs
dWUoKTsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9h
ZFtAImlkIl0sIEAiaWQiKTsKKyAgICBzZWxmLmlkZW50aWZpZXIgPSBbcGF5bG9hZFtAImlkIl0g
aW50ZWdlclZhbHVlXTsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVS
VFkocGF5bG9hZFtAInRyZWUiXSwgQCJ0cmVlIik7CisgICAgc2VsZi50cmVlID0gW1tUZXN0UHJv
dG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRb
QCJ0cmVlIl1dOworCisgICAgcmV0dXJuIHNlbGY7Cit9CistIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopb2JqZWN0Cit7CisgICAg
aWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEpTT05PYmplY3Q6W29iamVjdCB0b0pTT05PYmpl
Y3RdLmdldCgpXSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICByZXR1cm4gc2VsZjsKK30K
KworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZyBudW1i
ZXI6KGludCludW1iZXIgYW5pbWFsczooVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHMpYW5p
bWFscyBpZGVudGlmaWVyOihpbnQpaWRlbnRpZmllciB0cmVlOihUZXN0UHJvdG9jb2xUZXN0UmVj
dXJzaXZlT2JqZWN0MSAqKXRyZWUKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkK
KyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURf
UFJPUEVSVFkoc3RyaW5nLCBAInN0cmluZyIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVR
VUlSRURfUFJPUEVSVFkodHJlZSwgQCJ0cmVlIik7CisKKyAgICBzZWxmLnN0cmluZyA9IHN0cmlu
ZzsKKyAgICBzZWxmLm51bWJlciA9IG51bWJlcjsKKyAgICBzZWxmLmFuaW1hbHMgPSBhbmltYWxz
OworICAgIHNlbGYuaWRlbnRpZmllciA9IGlkZW50aWZpZXI7CisgICAgc2VsZi50cmVlID0gdHJl
ZTsKKworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXNldFN0cmluZzooTlNTdHJpbmcg
KilzdHJpbmcKK3sKKyAgICBbc3VwZXIgc2V0U3RyaW5nOnN0cmluZyBmb3JLZXk6QCJzdHJpbmci
XTsKK30KKworLSAoTlNTdHJpbmcgKilzdHJpbmcKK3sKKyAgICByZXR1cm4gW3N1cGVyIHN0cmlu
Z0ZvcktleTpAInN0cmluZyJdOworfQorCistICh2b2lkKXNldE51bWJlcjooaW50KW51bWJlcgor
eworICAgIFtzdXBlciBzZXRJbnRlZ2VyOm51bWJlciBmb3JLZXk6QCJudW1iZXIiXTsKK30KKwor
LSAoaW50KW51bWJlcgoreworICAgIHJldHVybiBbc3VwZXIgaW50ZWdlckZvcktleTpAIm51bWJl
ciJdOworfQorCistICh2b2lkKXNldEFuaW1hbHM6KFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmlt
YWxzKWFuaW1hbHMKK3sKKyAgICBbc3VwZXIgc2V0U3RyaW5nOnRvUHJvdG9jb2xTdHJpbmcoYW5p
bWFscykgZm9yS2V5OkAiYW5pbWFscyJdOworfQorCistIChUZXN0UHJvdG9jb2xUZXN0Q2FzdGVk
QW5pbWFscylhbmltYWxzCit7CisgICAgcmV0dXJuIGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJv
dG9jb2xUZXN0Q2FzdGVkQW5pbWFscz4oW3N1cGVyIHN0cmluZ0ZvcktleTpAImFuaW1hbHMiXSku
dmFsdWUoKTsKK30KKworLSAodm9pZClzZXRJZGVudGlmaWVyOihpbnQpaWRlbnRpZmllcgorewor
ICAgIFtzdXBlciBzZXRJbnRlZ2VyOmlkZW50aWZpZXIgZm9yS2V5OkAiaWQiXTsKK30KKworLSAo
aW50KWlkZW50aWZpZXIKK3sKKyAgICByZXR1cm4gW3N1cGVyIGludGVnZXJGb3JLZXk6QCJpZCJd
OworfQorCistICh2b2lkKXNldFRyZWU6KFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3Qx
ICopdHJlZQoreworICAgIFtzdXBlciBzZXRPYmplY3Q6dHJlZSBmb3JLZXk6QCJ0cmVlIl07Cit9
CisKKy0gKFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxICopdHJlZQoreworICAgIFJX
SVByb3RvY29sSlNPTk9iamVjdCAqb2JqZWN0ID0gW3N1cGVyIG9iamVjdEZvcktleTpAInRyZWUi
XTsKKyAgICBpZiAoIW9iamVjdCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICByZXR1cm4gW1tU
ZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0
Oltbc3VwZXIgb2JqZWN0Rm9yS2V5OkAidHJlZSJdIHRvSlNPTk9iamVjdF0uZ2V0KCldOworfQor
CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0
MQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFy
eTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBp
bml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBzZWxmLm9iaiA9IFtbVGVzdFByb3Rv
Y29sVGVzdFJlY3Vyc2l2ZU9iamVjdDIgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkW0Ai
b2JqIl1dOworCisgICAgcmV0dXJuIHNlbGY7Cit9CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQ
cm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopb2JqZWN0Cit7CisgICAgaWYg
KCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEpTT05PYmplY3Q6W29iamVjdCB0b0pTT05PYmplY3Rd
LmdldCgpXSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKwor
LSAodm9pZClzZXRPYmo6KFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QyICopb2JqCit7
CisgICAgW3N1cGVyIHNldE9iamVjdDpvYmogZm9yS2V5OkAib2JqIl07Cit9CisKKy0gKFRlc3RQ
cm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QyICopb2JqCit7CisgICAgUldJUHJvdG9jb2xKU09O
T2JqZWN0ICpvYmplY3QgPSBbc3VwZXIgb2JqZWN0Rm9yS2V5OkAib2JqIl07CisgICAgaWYgKCFv
YmplY3QpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgcmV0dXJuIFtbVGVzdFByb3RvY29sVGVz
dFJlY3Vyc2l2ZU9iamVjdDIgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDpbW3N1cGVyIG9iamVj
dEZvcktleTpAIm9iaiJdIHRvSlNPTk9iamVjdF0uZ2V0KCldOworfQorCitAZW5kCisKK0BpbXBs
ZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MgorCistIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBp
ZD4gKilwYXlsb2FkCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAg
IHJldHVybiBuaWw7CisKKyAgICBzZWxmLm9iaiA9IFtbVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2
ZU9iamVjdDEgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkW0Aib2JqIl1dOworCisgICAg
cmV0dXJuIHNlbGY7Cit9CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDoo
UldJUHJvdG9jb2xKU09OT2JqZWN0ICopb2JqZWN0Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBl
ciBpbml0V2l0aEpTT05PYmplY3Q6W29iamVjdCB0b0pTT05PYmplY3RdLmdldCgpXSkpCisgICAg
ICAgIHJldHVybiBuaWw7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClzZXRPYmo6
KFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxICopb2JqCit7CisgICAgW3N1cGVyIHNl
dE9iamVjdDpvYmogZm9yS2V5OkAib2JqIl07Cit9CisKKy0gKFRlc3RQcm90b2NvbFRlc3RSZWN1
cnNpdmVPYmplY3QxICopb2JqCit7CisgICAgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvYmplY3Qg
PSBbc3VwZXIgb2JqZWN0Rm9yS2V5OkAib2JqIl07CisgICAgaWYgKCFvYmplY3QpCisgICAgICAg
IHJldHVybiBuaWw7CisgICAgcmV0dXJuIFtbVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVj
dDEgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDpbW3N1cGVyIG9iamVjdEZvcktleTpAIm9iaiJd
IHRvSlNPTk9iamVjdF0uZ2V0KCldOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNv
bi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uLXJlc3VsdApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uN2Q1Nzc2MmE4ZmYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uLXJlc3VsdApAQCAtMCwwICsxLDExMTAg
QEAKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMuaW4KKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpz
b24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorIyMjIEVuZCBGaWxlOiBJ
bnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMuaW4KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Cisj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsK
K3B1YmxpYzoKKyAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlz
cGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRp
c3BhdGNoZXIpOyB9CisgICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkg
Y29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQorcHJpdmF0ZToKKyAg
ICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Cit9OworCisK
KworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hl
cnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtd2l0aC1vcGVuLXBh
cmFtZXRlcnMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0eXBlZGVm
IFN0cmluZyBFcnJvclN0cmluZzsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMj
IEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRl
c3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RCYWNr
ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZy
b250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3
dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNp
ZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyNpbmNsdWRlICJUZXN0
QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKwor
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNw
YXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXdpdGgtb3Blbi1wYXJhbWV0
ZXJzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDx3dGYv
SlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKKworY2xhc3MgRnJvbnRlbmRSb3V0ZXI7CisKK30gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisKKyMj
IyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSB0eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0
aW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK25hbWVzcGFjZSBQcm90b2Nv
bCB7CisKKworCisvLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KK25hbWVzcGFjZSBUZXN0IHsKK2Ns
YXNzIE5vT3BlblBhcmFtZXRlcnM7CitjbGFzcyBPcGVuUGFyYW1ldGVyczsKK30gLy8gVGVzdAor
Ly8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgorCisKKworCituYW1lc3BhY2UgVGVzdCB7
CisKK2NsYXNzIE5vT3BlblBhcmFtZXRlcnMgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7Citw
dWJsaWM6CisgICAgZW51bSB7CisgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKKyAgICAgICAgT25l
U2V0ID0gMSA8PCAwLAorICAgICAgICBUd29TZXQgPSAxIDw8IDEsCisgICAgICAgIEFsbEZpZWxk
c1NldCA9IChPbmVTZXQgfCBUd29TZXQpCisgICAgfTsKKworICAgIHRlbXBsYXRlPGludCBTVEFU
RT4KKyAgICBjbGFzcyBCdWlsZGVyIHsKKyAgICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiBtX3Jlc3VsdDsKKworICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRl
cjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CisgICAg
ICAgIH0KKworICAgICAgICBCdWlsZGVyKFJlZjwvKk5vT3BlblBhcmFtZXRlcnMqL0pTT046Ok9i
amVjdD4mJiBvYmplY3QpCisgICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkK
KyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNT
ZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CisgICAgICAgIH0KKyAgICAg
ICAgZnJpZW5kIGNsYXNzIE5vT3BlblBhcmFtZXRlcnM7CisgICAgcHVibGljOgorCisgICAgICAg
IEJ1aWxkZXI8U1RBVEUgfCBPbmVTZXQ+JiBzZXRPbmUoZG91YmxlIHZhbHVlKQorICAgICAgICB7
CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgT25lU2V0KSwgcHJvcGVydHlf
b25lX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXREb3VibGUoIm9uZSJf
cywgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxPbmVTZXQ+KCk7CisgICAg
ICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVHdvU2V0PiYgc2V0VHdvKGRvdWJsZSB2
YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFR3
b1NldCksIHByb3BlcnR5X3R3b19hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0RG91YmxlKCJ0d28iX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8
VHdvU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgUmVmPE5vT3BlblBhcmFtZXRlcnM+IHJl
bGVhc2UoKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBB
bGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOworICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoc2l6ZW9mKE5vT3BlblBhcmFtZXRlcnMpID09IHNpemVvZihKU09OOjpPYmplY3QpLCBj
YW5ub3RfY2FzdCk7CisKKyAgICAgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25SZXN1bHQg
PSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBX
VEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxOb09wZW5QYXJhbWV0ZXJzPio+KCZqc29uUmVz
dWx0KSk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgfTsKKwor
ICAgIC8qCisgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgorICAgICAqIFJlZjxOb09wZW5Q
YXJhbWV0ZXJzPiByZXN1bHQgPSBOb09wZW5QYXJhbWV0ZXJzOjpjcmVhdGUoKQorICAgICAqICAg
ICAuc2V0T25lKC4uLikKKyAgICAgKiAgICAgLnNldFR3byguLi4pCisgICAgICogICAgIC5yZWxl
YXNlKCk7CisgICAgICovCisgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgp
CisgICAgeworICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKSk7CisgICAgfQorfTsKKworY2xhc3MgT3BlblBhcmFtZXRlcnMgOiBwdWJsaWMg
SlNPTjo6T2JqZWN0IHsKK3B1YmxpYzoKKyAgICBlbnVtIHsKKyAgICAgICAgTm9GaWVsZHNTZXQg
PSAwLAorICAgICAgICBBbHBoYVNldCA9IDEgPDwgMCwKKyAgICAgICAgQmV0YVNldCA9IDEgPDwg
MSwKKyAgICAgICAgQWxsRmllbGRzU2V0ID0gKEFscGhhU2V0IHwgQmV0YVNldCkKKyAgICB9Owor
CisgICAgdGVtcGxhdGU8aW50IFNUQVRFPgorICAgIGNsYXNzIEJ1aWxkZXIgeworICAgIHByaXZh
dGU6CisgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVzdWx0OworCisgICAgICAgIHRl
bXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRF
IHwgU1RFUD4qPih0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXIoUmVmPC8qT3Bl
blBhcmFtZXRlcnMqL0pTT046Ok9iamVjdD4mJiBvYmplY3QpCisgICAgICAgICAgICA6IG1fcmVz
dWx0KFdURk1vdmUob2JqZWN0KSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0
ZSk7CisgICAgICAgIH0KKyAgICAgICAgZnJpZW5kIGNsYXNzIE9wZW5QYXJhbWV0ZXJzOworICAg
IHB1YmxpYzoKKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQWxwaGFTZXQ+JiBzZXRBbHBoYShk
b3VibGUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBBbHBoYVNldCksIHByb3BlcnR5X2FscGhhX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXREb3VibGUoImFscGhhIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPEFscGhhU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxT
VEFURSB8IEJldGFTZXQ+JiBzZXRCZXRhKGRvdWJsZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEJldGFTZXQpLCBwcm9wZXJ0eV9iZXRhX2Fs
cmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXREb3VibGUoImJldGEiX3MsIHZh
bHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8QmV0YVNldD4oKTsKKyAgICAgICAg
fQorCisgICAgICAgIFJlZjxPcGVuUGFyYW1ldGVycz4gcmVsZWFzZSgpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lz
X25vdF9yZWFkeSk7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoT3BlblBhcmFt
ZXRlcnMpID09IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7CisKKyAgICAgICAg
ICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25SZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVs
bCgpOworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0
PFJlZjxPcGVuUGFyYW1ldGVycz4qPigmanNvblJlc3VsdCkpOworICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvKgorICAgICAqIFN5bnRoZXRpYyBj
b25zdHJ1Y3RvcjoKKyAgICAgKiBSZWY8T3BlblBhcmFtZXRlcnM+IHJlc3VsdCA9IE9wZW5QYXJh
bWV0ZXJzOjpjcmVhdGUoKQorICAgICAqICAgICAuc2V0QWxwaGEoLi4uKQorICAgICAqICAgICAu
c2V0QmV0YSguLi4pCisgICAgICogICAgIC5yZWxlYXNlKCk7CisgICAgICovCisgICAgc3RhdGlj
IEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gQnVp
bGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7CisgICAgfQorCisgICAg
Ly8gUHJvcGVydHkgbmFtZXMgZm9yIHR5cGUgZ2VuZXJhdGVkIGFzIG9wZW4uCisgICAgTm9uZSBz
dGF0aWMgY29uc3QgY2hhciogQWxwaGE7Cit9OworCit9IC8vIFRlc3QKKworCisKK30gLy8gbmFt
ZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9i
amVjdHMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRoLW9w
ZW4tcGFyYW1ldGVycy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIK
KworI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKK2Nv
bnN0IGNoYXIqIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6Ok9wZW5QYXJhbWV0ZXJzOjpBbHBo
YSA9ICJhbHBoYSI7CisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisKKyMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbiBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbmNsdWRl
IDx3dGYvUmV0YWluUHRyLmg+CisKKworCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5k
RGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3Bh
dGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRoLW9w
ZW4tcGFyYW1ldGVycy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0
Y2hlcnMuaCIKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW5jbHVkZSAi
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMu
aD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgor
CisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorCisjIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rl
c3RQcm90b2NvbC5oPgorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkK
K0BpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0CitAZW5kCisK
KworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSB0eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1
cmF0aW9uLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW1wb3J0ICJU
ZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9B
dWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2ltcG9ydCA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+CisKK3VzaW5nIG5hbWVzcGFj
ZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9u
Cit7CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKK30K
KworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0
b3JDb250cm9sbGVyKiljb250cm9sbGVyCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAg
ICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNvbnRyb2xsZXIp
OworICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKKyAgICByZXR1cm4gc2VsZjsKK30KKwor
LSAodm9pZClkZWFsbG9jCit7CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCitAZW5kCisKKwor
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJu
YWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0
IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisKKyMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0
eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKworI2ltcG9y
dCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgorCisKK0BjbGFzcyBUZXN0
UHJvdG9jb2xUZXN0Tm9PcGVuUGFyYW1ldGVyczsKK0BjbGFzcyBUZXN0UHJvdG9jb2xUZXN0T3Bl
blBhcmFtZXRlcnM7CisKKworCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIp
KSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sVGVzdE5vT3BlblBhcmFtZXRlcnMgOiBSV0lQcm90
b2NvbEpTT05PYmplY3QKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlv
bmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkOworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
UHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7CistIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhPbmU6KGRvdWJsZSlvbmUgdHdvOihkb3VibGUpdHdvOworLyog
cmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgZG91YmxlIG9uZTsKKy8q
IHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGRvdWJsZSB0d287CitA
ZW5kCisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFj
ZSBUZXN0UHJvdG9jb2xUZXN0T3BlblBhcmFtZXRlcnMgOiBSV0lQcm90b2NvbEpTT05PYmplY3QK
Ky0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAq
LCBpZD4gKilwYXlsb2FkOworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6
KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7CistIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhBbHBoYTooZG91YmxlKWFscGhhIGJldGE6KGRvdWJsZSliZXRhOworLyogcmVxdWlyZWQg
Ki8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgZG91YmxlIGFscGhhOworLyogcmVxdWly
ZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgZG91YmxlIGJldGE7CitAZW5kCisK
KworCisKKworCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGli
aWxpdHlPYmplY3RzLmg+CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSB0eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBv
cnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0
Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPHd0Zi9KU09O
VmFsdWVzLmg+CisKKworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAor
CisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJv
dG9jb2wuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lv
bnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIE9iakNF
bnVtVHlwZT4KK09wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0
IFN0cmluZyYgdmFsdWUpOworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKworIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbiBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucy5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2Nv
bFR5cGVQYXJzZXIuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmpl
Y3RQcml2YXRlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbnRlcmZhY2Ug
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChUZXN0RG9tYWluKQorCisrICh2b2lkKV9wYXJz
ZU5vT3BlblBhcmFtZXRlcnM6KFRlc3RQcm90b2NvbFRlc3ROb09wZW5QYXJhbWV0ZXJzICoqKW91
dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworKyAodm9pZClfcGFyc2VPcGVuUGFyYW1l
dGVyczooVGVzdFByb3RvY29sVGVzdE9wZW5QYXJhbWV0ZXJzICoqKW91dFZhbHVlIGZyb21QYXls
b2FkOihpZClwYXlsb2FkOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMgKFRlc3REb21haW4pCisKKysgKHZvaWQpX3BhcnNlTm9PcGVuUGFyYW1l
dGVyczooVGVzdFByb3RvY29sVGVzdE5vT3BlblBhcmFtZXRlcnMgKiopb3V0VmFsdWUgZnJvbVBh
eWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBh
eWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90
b2NvbFRlc3ROb09wZW5QYXJhbWV0ZXJzIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07
Cit9CisKKysgKHZvaWQpX3BhcnNlT3BlblBhcmFtZXRlcnM6KFRlc3RQcm90b2NvbFRlc3RPcGVu
UGFyYW1ldGVycyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10p
OworICAgICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sVGVzdE9wZW5QYXJhbWV0ZXJzIGFsbG9j
XSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sVHlwZXMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXdp
dGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90
b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2lt
cG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKwor
QGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFRlc3ROb09wZW5QYXJhbWV0ZXJzCisKKy0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5n
ICosIGlkPiAqKXBheWxvYWQKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAg
ICAgICAgcmV0dXJuIG5pbDsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJP
UEVSVFkocGF5bG9hZFtAIm9uZSJdLCBAIm9uZSIpOworICAgIHNlbGYub25lID0gW3BheWxvYWRb
QCJvbmUiXSBkb3VibGVWYWx1ZV07CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVE
X1BST1BFUlRZKHBheWxvYWRbQCJ0d28iXSwgQCJ0d28iKTsKKyAgICBzZWxmLnR3byA9IFtwYXls
b2FkW0AidHdvIl0gZG91YmxlVmFsdWVdOworCisgICAgcmV0dXJuIHNlbGY7Cit9CistIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICop
b2JqZWN0Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEpTT05PYmplY3Q6W29i
amVjdCB0b0pTT05PYmplY3RdLmdldCgpXSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBy
ZXR1cm4gc2VsZjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoT25lOihkb3VibGUpb25l
IHR3bzooZG91YmxlKXR3bworeworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAg
ICAgICByZXR1cm4gbmlsOworCisgICAgc2VsZi5vbmUgPSBvbmU7CisgICAgc2VsZi50d28gPSB0
d287CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClzZXRPbmU6KGRvdWJsZSlvbmUK
K3sKKyAgICBbc3VwZXIgc2V0RG91YmxlOm9uZSBmb3JLZXk6QCJvbmUiXTsKK30KKworLSAoZG91
YmxlKW9uZQoreworICAgIHJldHVybiBbc3VwZXIgZG91YmxlRm9yS2V5OkAib25lIl07Cit9CisK
Ky0gKHZvaWQpc2V0VHdvOihkb3VibGUpdHdvCit7CisgICAgW3N1cGVyIHNldERvdWJsZTp0d28g
Zm9yS2V5OkAidHdvIl07Cit9CisKKy0gKGRvdWJsZSl0d28KK3sKKyAgICByZXR1cm4gW3N1cGVy
IGRvdWJsZUZvcktleTpAInR3byJdOworfQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0
UHJvdG9jb2xUZXN0T3BlblBhcmFtZXRlcnMKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5
bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZAorewor
ICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisg
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiYWxwaGEi
XSwgQCJhbHBoYSIpOworICAgIHNlbGYuYWxwaGEgPSBbcGF5bG9hZFtAImFscGhhIl0gZG91Ymxl
VmFsdWVdOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXls
b2FkW0AiYmV0YSJdLCBAImJldGEiKTsKKyAgICBzZWxmLmJldGEgPSBbcGF5bG9hZFtAImJldGEi
XSBkb3VibGVWYWx1ZV07CisKKyAgICByZXR1cm4gc2VsZjsKK30KKy0gKGluc3RhbmNldHlwZSlp
bml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilvYmplY3QKK3sK
KyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoSlNPTk9iamVjdDpbb2JqZWN0IHRvSlNP
Tk9iamVjdF0uZ2V0KCldKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHJldHVybiBzZWxm
OworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhBbHBoYTooZG91YmxlKWFscGhhIGJldGE6
KGRvdWJsZSliZXRhCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAg
IHJldHVybiBuaWw7CisKKyAgICBzZWxmLmFscGhhID0gYWxwaGE7CisgICAgc2VsZi5iZXRhID0g
YmV0YTsKKworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXNldEFscGhhOihkb3VibGUp
YWxwaGEKK3sKKyAgICBbc3VwZXIgc2V0RG91YmxlOmFscGhhIGZvcktleTpAImFscGhhIl07Cit9
CisKKy0gKGRvdWJsZSlhbHBoYQoreworICAgIHJldHVybiBbc3VwZXIgZG91YmxlRm9yS2V5OkAi
YWxwaGEiXTsKK30KKworLSAodm9pZClzZXRCZXRhOihkb3VibGUpYmV0YQoreworICAgIFtzdXBl
ciBzZXREb3VibGU6YmV0YSBmb3JLZXk6QCJiZXRhIl07Cit9CisKKy0gKGRvdWJsZSliZXRhCit7
CisgICAgcmV0dXJuIFtzdXBlciBkb3VibGVGb3JLZXk6QCJiZXRhIl07Cit9CisKK0BlbmQKKwor
CisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdmVyc2lvbi5q
c29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9leHBlY3RlZC92ZXJzaW9uLmpzb24tcmVzdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwLi5lZjc3OGEwNmM3ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC92ZXJzaW9uLmpzb24t
cmVzdWx0CkBAIC0wLDAgKzEsODI3IEBACisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2Vu
ZENvbW1hbmRzLmpzLmluCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lv
bi5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworLy8gVmVyc2lv
bkRvbWFpbgorSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiVmVyc2lvbkRvbWFpbiIs
IG51bGwpOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlclZlcnNpb24oIlZlcnNpb25Eb21haW4i
LCA0Mik7CitJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJWZXJzaW9uRG9tYWluIiwg
bnVsbCk7CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcy5pbgorCisj
IyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lvbi5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVz
LmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIu
aD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgor
CituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXIgeworcHVibGljOgorICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tl
bmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1v
dmUoZGlzcGF0Y2hlcik7IH0KKyAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNo
ZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Citwcml2YXRl
OgorICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKK307
CisKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5h
dGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNw
YXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lvbi5qc29u
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9y
U3RyaW5nOworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRl
c3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNw
YXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpz
b24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYv
SlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQorI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIK
KyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMj
IEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTog
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHZlcnNpb24uanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1
ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisK
K25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBGcm9udGVuZFJvdXRlcjsKKworfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJz
LmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHZlcnNpb24uanNvbiBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJU
ZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisK
K25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMj
IEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbE9iamVjdHMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHZlcnNpb24uanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xU
eXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0
b3IgeworCisKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworLy8gVmVyc2lvbnMuCituYW1lc3Bh
Y2UgVmVyc2lvbkRvbWFpbiB7CitzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFZFUlNJT04gPSA0
MjsKK30gLy8gVmVyc2lvbkRvbWFpbgorLy8gRW5kIG9mIHZlcnNpb25zLgorCisKKworCisKKwor
CisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgor
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbE9iamVjdHMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
dmVyc2lvbi5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKworI2lu
Y2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwor
bmFtZXNwYWNlIEluc3BlY3RvciB7CisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKworCit9IC8v
IG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSB2ZXJzaW9uLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXJzLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCisKKworbmFtZXNwYWNlIElu
c3BlY3RvciB7CisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIHZlcnNpb24uanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3Bh
dGNoZXJzLmgiCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2luY2x1ZGUg
IlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVz
Lmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
KworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHZlcnNpb24uanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KKwor
X19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAorQGVuZAorCisKKyMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xDb25maWd1cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVy
c2lvbi5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9y
dCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJ
bnRlcm5hbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisj
aW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgorI2lt
cG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Cisj
aW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hl
cnMuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
cy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gVGVz
dFByb3RvY29sQ29uZmlndXJhdGlvbgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJv
bGxlciogX2NvbnRyb2xsZXI7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xs
ZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgoreworICAgIHNl
bGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOwor
ICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Cisg
ICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIFtzdXBlciBkZWFs
bG9jXTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJh
dGlvbi5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5t
bQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHZlcnNpb24uanNvbiBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbElu
dGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2lt
cG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKwor
CisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gdmVyc2lvbi5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rv
ci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KKworCisKKworCisKKworCisKKworCisKKworI2lt
cG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5o
PgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xJbnRlcm5hbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVy
c2lvbi5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9y
dCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0
ZS5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9s
bGVyLmg+CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCisKKworCisjIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbEludGVybmFsLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lv
bi5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAi
VGVzdFByb3RvY29sLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNv
bnZlcnNpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBPYmpDRW51bVR5cGU+CitPcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmlu
Zyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKworIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHZlcnNpb24uanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorCisjaW1w
b3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIK
KyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisK
K3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworCisKKworCisjIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sVHlwZXMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpz
b24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0
UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRl
Lmg+CisjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMu
aD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1jb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9t
YWluLWRlYnVnZ2FibGVUeXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1jb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWlu
LWRlYnVnZ2FibGVUeXBlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAuLmQ2ZGY5ZTRiZDljCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tY29tbWFuZC10YXJnZXRUeXBlLW1hdGNo
aW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCkBAIC0wLDAgKzEsOSBAQAorWworeworICAg
ICJkb21haW4iOiAiRG9tYWluIiwKKyAgICAiZGVidWdnYWJsZVR5cGVzIjogWyJqYXZhc2NyaXB0
Il0sCisgICAgInRhcmdldFR5cGVzIjogWyJ3b3JrZXIiXSwKKyAgICAiY29tbWFuZHMiOiBbeyJu
YW1lIjogIkNvbW1hbmQifV0sCisgICAgImV2ZW50cyI6IFt7Im5hbWUiOiAiRXZlbnQifV0KK30K
K10KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlwZXMtdHlwZS5qc29uIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tY29tbWFuZC10YXJnZXRU
eXBlcy10eXBlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjY0
MDU5Zjg0YmNmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tY29tbWFuZC10YXJnZXRUeXBlcy10eXBlLmpzb24K
QEAgLTAsMCArMSw5IEBACit7CisgICAgImRvbWFpbiI6ICJEb21haW4iLAorICAgICJjb21tYW5k
cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiUGFnZU9ubHkiLAorICAgICAg
ICAgICAgInRhcmdldFR5cGVzIjogInBhZ2VlIgorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwt
b24tY29tbWFuZC10YXJnZXRUeXBlcy12YWx1ZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tY29tbWFuZC10YXJnZXRUeXBlcy12YWx1
ZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41MDIwNDQ3MmVj
OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlwZXMtdmFsdWUuanNvbgpAQCAtMCww
ICsxLDkgQEAKK3sKKyAgICAiZG9tYWluIjogIkRvbWFpbiIsCisgICAgImNvbW1hbmRzIjogWwor
ICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJQYWdlT25seSIsCisgICAgICAgICAgICAi
dGFyZ2V0VHlwZXMiOiBbInBhZ2VlIl0KKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWRv
bWFpbi1kZWJ1Z2dhYmxlVHlwZXMtdHlwZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZG9tYWluLWRlYnVnZ2FibGVUeXBlcy10eXBl
Lmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjk3NDhmNDIzNDcz
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2ZhaWwtb24tZG9tYWluLWRlYnVnZ2FibGVUeXBlcy10eXBlLmpzb24KQEAgLTAs
MCArMSw5IEBACit7CisgICAgImRvbWFpbiI6ICJXZWJPbmx5IiwKKyAgICAiZGVidWdnYWJsZVR5
cGVzIjogIndlYmIiLAorICAgICJjb21tYW5kcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAg
Im5hbWUiOiAiZW5hYmxlIgorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZG9tYWluLWRl
YnVnZ2FibGVUeXBlcy12YWx1ZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZG9tYWluLWRlYnVnZ2FibGVUeXBlcy12YWx1ZS5qc29u
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5iMjUyZGRiZDgzZAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9mYWlsLW9uLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMtdmFsdWUuanNvbgpAQCAtMCwwICsx
LDkgQEAKK3sKKyAgICAiZG9tYWluIjogIldlYk9ubHkiLAorICAgICJkZWJ1Z2dhYmxlVHlwZXMi
OiBbIndlYmIiXSwKKyAgICAiY29tbWFuZHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJu
YW1lIjogImVuYWJsZSIKKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWRvbWFpbi10YXJn
ZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZG9tYWluLXRhcmdldFR5
cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAuLjdhYTAyODA0NjU3Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZG9tYWlu
LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KQEAgLTAsMCAr
MSw4IEBACitbCit7CisgICAgImRvbWFpbiI6ICJEb21haW4iLAorICAgICJkZWJ1Z2dhYmxlVHlw
ZXMiOiBbImphdmFzY3JpcHQiXSwKKyAgICAiY29tbWFuZHMiOiBbeyJuYW1lIjogIkNvbW1hbmQi
LCAidGFyZ2V0VHlwZXMiOiBbIndvcmtlciJdfV0sCisgICAgImV2ZW50cyI6IFt7Im5hbWUiOiAi
RXZlbnQifV0KK30KK10KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWRvbWFpbi10YXJnZXRUeXBlcy10eXBlLmpzb24gYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kb21h
aW4tdGFyZ2V0VHlwZXMtdHlwZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwLi5kODIyMjY3NDE0NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWRvbWFpbi10YXJnZXRUeXBlcy10
eXBlLmpzb24KQEAgLTAsMCArMSw5IEBACit7CisgICAgImRvbWFpbiI6ICJQYWdlT25seSIsCisg
ICAgInRhcmdldFR5cGVzIjogInBhZ2VlIiwKKyAgICAiY29tbWFuZHMiOiBbCisgICAgICAgIHsK
KyAgICAgICAgICAgICJuYW1lIjogImVuYWJsZSIKKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWls
LW9uLWRvbWFpbi10YXJnZXRUeXBlcy12YWx1ZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZG9tYWluLXRhcmdldFR5cGVzLXZhbHVl
Lmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmU3YjEwZDdmMTU0
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2ZhaWwtb24tZG9tYWluLXRhcmdldFR5cGVzLXZhbHVlLmpzb24KQEAgLTAsMCAr
MSw5IEBACit7CisgICAgImRvbWFpbiI6ICJQYWdlT25seSIsCisgICAgInRhcmdldFR5cGVzIjog
WyJwYWdlZSJdLAorICAgICJjb21tYW5kcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5h
bWUiOiAiZW5hYmxlIgorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZHVwbGljYXRlLWNv
bW1hbmQtY2FsbC1wYXJhbWV0ZXItbmFtZXMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWR1cGxpY2F0ZS1jb21tYW5kLWNhbGwtcGFy
YW1ldGVyLW5hbWVzLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu
LmJhYjc2Y2E2Mjc5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZHVwbGljYXRlLWNvbW1hbmQtY2FsbC1wYXJh
bWV0ZXItbmFtZXMuanNvbgpAQCAtMCwwICsxLDE2IEBACit7CisgICAgImRvbWFpbiI6ICJPdmVy
bGF5IiwKKyAgICAiY29tbWFuZHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjog
InByb2Nlc3NQb2ludHMiLAorICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJwb2ludCIsICJ0eXBlIjogIm51bWJlciIgfSwKKyAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInBvaW50IiwgInR5cGUiOiAibnVtYmVyIiB9CisgICAgICAgICAgICBd
LAorICAgICAgICAgICAgInJldHVybnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJy
ZXN1bHQxIiwgInR5cGUiOiAic3RyaW5nIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
cmVzdWx0MiIsICJ0eXBlIjogInN0cmluZyIgfQorICAgICAgICAgICAgXQorICAgICAgICB9Cisg
ICAgXQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2ZhaWwtb24tZHVwbGljYXRlLWNvbW1hbmQtcmV0dXJuLXBhcmFtZXRlci1uYW1l
cy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2Zh
aWwtb24tZHVwbGljYXRlLWNvbW1hbmQtcmV0dXJuLXBhcmFtZXRlci1uYW1lcy5qc29uCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jOGJiMTVjMDRiNgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9m
YWlsLW9uLWR1cGxpY2F0ZS1jb21tYW5kLXJldHVybi1wYXJhbWV0ZXItbmFtZXMuanNvbgpAQCAt
MCwwICsxLDE2IEBACit7CisgICAgImRvbWFpbiI6ICJPdmVybGF5IiwKKyAgICAiY29tbWFuZHMi
OiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogInByb2Nlc3NQb2ludHMiLAorICAg
ICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwb2lu
dDEiLCAidHlwZSI6ICJudW1iZXIiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwb2lu
dDIiLCAidHlwZSI6ICJudW1iZXIiIH0KKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAicmV0
dXJucyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInJlc3VsdCIsICJ0eXBlIjogInN0
cmluZyIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInJlc3VsdCIsICJ0eXBlIjogInN0
cmluZyIgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZHVw
bGljYXRlLWV2ZW50LXBhcmFtZXRlci1uYW1lcy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZHVwbGljYXRlLWV2ZW50LXBhcmFtZXRl
ci1uYW1lcy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kM2Qz
YjNjYzY0MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWR1cGxpY2F0ZS1ldmVudC1wYXJhbWV0ZXItbmFtZXMu
anNvbgpAQCAtMCwwICsxLDEyIEBACit7CisgICAgImRvbWFpbiI6ICJPdmVybGF5IiwKKyAgICAi
ZXZlbnRzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJwcm9jZXNzZWRQb2lu
dHMiLAorICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJwb2ludCIsICJ0eXBlIjogIm51bWJlciIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogInBvaW50IiwgInR5cGUiOiAibnVtYmVyIiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0K
KyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1kZWNsYXJhdGlvbnMuanNvbiBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWR1cGxp
Y2F0ZS10eXBlLWRlY2xhcmF0aW9ucy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwLi43MDJmYzZhMzI3MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLWRl
Y2xhcmF0aW9ucy5qc29uCkBAIC0wLDAgKzEsMTUgQEAKK3sKKyAgICAiZG9tYWluIjogIlJ1bnRp
bWUiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlJlbW90
ZU9iamVjdElkIiwKKyAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAi
ZGVzY3JpcHRpb24iOiAiVW5pcXVlIG9iamVjdCBpZGVudGlmaWVyLiIKKyAgICAgICAgfSwKKyAg
ICAgICAgeworICAgICAgICAgICAgImlkIjogIlJlbW90ZU9iamVjdElkIiwKKyAgICAgICAgICAg
ICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIG9i
amVjdCBpZGVudGlmaWVyLiIKKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWR1cGxpY2F0
ZS10eXBlLW1lbWJlci1uYW1lcy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZHVwbGljYXRlLXR5cGUtbWVtYmVyLW5hbWVzLmpzb24K
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmFlYmFjZWU4YjIzCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2ZhaWwtb24tZHVwbGljYXRlLXR5cGUtbWVtYmVyLW5hbWVzLmpzb24KQEAgLTAsMCArMSwx
NSBAQAorWworeworICAgICJkb21haW4iOiAiT3ZlcmxheVR5cGVzIiwKKyAgICAidHlwZXMiOiBb
CisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJQb2ludCIsCisgICAgICAgICAgICAidHlw
ZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJ4IiwgInR5cGUiOiAiaW50ZWdlciIgfSwKKyAgICAgICAgICAgICAgICB7
ICJuYW1lIjogIngiLCAidHlwZSI6ICJpbnRlZ2VyIiB9CisgICAgICAgICAgICBdCisgICAgICAg
IH0KKyAgICBdCit9CitdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1lbnVtLXdpdGgtbm8tdmFsdWVzLmpzb24gYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1lbnVtLXdp
dGgtbm8tdmFsdWVzLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu
LjIzMmE3YzMyNDlhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZW51bS13aXRoLW5vLXZhbHVlcy5qc29uCkBA
IC0wLDAgKzEsMTAgQEAKK3sKKyAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKKyAgICAidHlwZXMi
OiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJQcmltYXJ5Q29sb3JzIiwKKyAgICAg
ICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAiZW51bSI6IFtdCisgICAgICAg
IH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1ldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1k
ZWJ1Z2dhYmxlVHlwZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdn
YWJsZVR5cGUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOTEz
MmNlMDg4MjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1ldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFp
bi1kZWJ1Z2dhYmxlVHlwZS5qc29uCkBAIC0wLDAgKzEsOCBAQAorWworeworICAgICJkb21haW4i
OiAiRG9tYWluIiwKKyAgICAiZGVidWdnYWJsZVR5cGVzIjogWyJqYXZhc2NyaXB0Il0sCisgICAg
ImNvbW1hbmRzIjogW3sibmFtZSI6ICJDb21tYW5kIn1dLAorICAgICJldmVudHMiOiBbeyJuYW1l
IjogIkV2ZW50IiwgInRhcmdldFR5cGVzIjogWyJ3b3JrZXIiXX1dCit9CitdCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1l
dmVudC10YXJnZXRUeXBlcy10eXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1ldmVudC10YXJnZXRUeXBlcy10eXBlLmpzb24KbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmU1NGVkMWY1YzZiCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlwZXMtdHlwZS5qc29uCkBAIC0wLDAgKzEsOSBAQAorewor
ICAgICJkb21haW4iOiAiRG9tYWluIiwKKyAgICAiZXZlbnRzIjogWworICAgICAgICB7CisgICAg
ICAgICAgICAibmFtZSI6ICJQYWdlT25seSIsCisgICAgICAgICAgICAidGFyZ2V0VHlwZXMiOiAi
cGFnZWUiCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1ldmVudC10YXJnZXRUeXBlcy12
YWx1ZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlwZXMtdmFsdWUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMC4uNTg4NGJmZDdhNmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1ldmVudC10
YXJnZXRUeXBlcy12YWx1ZS5qc29uCkBAIC0wLDAgKzEsOSBAQAoreworICAgICJkb21haW4iOiAi
RG9tYWluIiwKKyAgICAiZXZlbnRzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6
ICJQYWdlT25seSIsCisgICAgICAgICAgICAidGFyZ2V0VHlwZXMiOiBbInBhZ2VlIl0KKyAgICAg
ICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXIt
ZmxhZy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2ZhaWwtb24tbnVtYmVyLXR5cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24KbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjczMDhkYjk5MmQ2Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2Zh
aWwtb24tbnVtYmVyLXR5cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24KQEAgLTAsMCAr
MSwxOCBAQAoreworICAgICJkb21haW4iOiAiRGF0YWJhc2UiLAorICAgICJ0eXBlcyI6IFsKKyAg
ICAgICAgeworICAgICAgICAgICAgImlkIjogIkRhdGFiYXNlSWQiLAorICAgICAgICAgICAgInR5
cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgaWRlbnRp
ZmllciBvZiBEYXRhYmFzZSBvYmplY3QuIgorICAgICAgICB9CisgICAgXSwKKyAgICAiZXZlbnRz
IjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJkaWRFeGVjdXRlT3B0aW9uYWxQ
YXJhbWV0ZXJzIiwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiAw
IH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLW51bWJlci10
eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tbnVtYmVyLXR5cGVkLW9wdGlvbmFsLXR5cGUt
bWVtYmVyLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmFmZWE1
NTVlYzRmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tbnVtYmVyLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVy
Lmpzb24KQEAgLTAsMCArMSwxNiBAQAorWworeworICAgICJkb21haW4iOiAiRGF0YWJhc2UiLAor
ICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkVycm9yIiwKKyAg
ICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAi
RGF0YWJhc2UgZXJyb3IuIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAibWVzc2FnZSIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlv
biI6ICJFcnJvciBtZXNzYWdlLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvZGUi
LCAidHlwZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIGNvZGUuIiwgIm9wdGlv
bmFsIjogMCB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdCit9CitdCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1v
bi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbiBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXN0cmluZy10eXBlZC1v
cHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwLi40MDEyYzc5YjZiMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXN0cmluZy10eXBlZC1vcHRp
b25hbC1wYXJhbWV0ZXItZmxhZy5qc29uCkBAIC0wLDAgKzEsMTggQEAKK3sKKyAgICAiZG9tYWlu
IjogIkRhdGFiYXNlIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJp
ZCI6ICJEYXRhYmFzZUlkIiwKKyAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAg
ICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIGlkZW50aWZpZXIgb2YgRGF0YWJhc2Ugb2JqZWN0
LiIKKyAgICAgICAgfQorICAgIF0sCisgICAgImV2ZW50cyI6IFsKKyAgICAgICAgeworICAgICAg
ICAgICAgIm5hbWUiOiAiZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyIsCisgICAgICAgICAg
ICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVz
IiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogInRydWUiIH0KKyAgICAgICAgICAgIF0K
KyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXN0cmluZy10eXBlZC1vcHRpb25hbC10eXBl
LW1lbWJlci5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24KbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmNhM2VmMjhhOGY4Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2Zh
aWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24KQEAgLTAsMCArMSwx
NiBAQAorWworeworICAgICJkb21haW4iOiAiRGF0YWJhc2UiLAorICAgICJ0eXBlcyI6IFsKKyAg
ICAgICAgeworICAgICAgICAgICAgImlkIjogIkVycm9yIiwKKyAgICAgICAgICAgICJ0eXBlIjog
Im9iamVjdCIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRGF0YWJhc2UgZXJyb3IuIiwK
KyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
bWVzc2FnZSIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBtZXNzYWdl
LiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvZGUiLCAidHlwZSI6ICJpbnRlZ2Vy
IiwgImRlc2NyaXB0aW9uIjogIkVycm9yIGNvZGUuIiwgIm9wdGlvbmFsIjogImZhbHNlIiB9Cisg
ICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdCit9CitdCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi10eXBlLWRlY2xh
cmF0aW9uLXVzaW5nLXR5cGUtcmVmZXJlbmNlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi10eXBlLWRlY2xhcmF0aW9uLXVzaW5nLXR5
cGUtcmVmZXJlbmNlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu
LjE5Yjc1OTBjY2M2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdHlwZS1kZWNsYXJhdGlvbi11c2luZy10eXBl
LXJlZmVyZW5jZS5qc29uCkBAIC0wLDAgKzEsMTMgQEAKK1sKK3sKKyAgICAiZG9tYWluIjogIlJ1
bnRpbWUiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlJl
bW90ZU9iamVjdElkIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAg
ICAiJHJlZiI6ICJTb21lVHlwZSIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVl
IG9iamVjdCBpZGVudGlmaWVyLiIKKyAgICAgICAgfQorICAgIF0KK30KK10KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXR5
cGUtcmVmZXJlbmNlLWFzLXByaW1pdGl2ZS10eXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi10eXBlLXJlZmVyZW5jZS1hcy1wcmlt
aXRpdmUtdHlwZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44
YzgzYmJmY2U0MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXR5cGUtcmVmZXJlbmNlLWFzLXByaW1pdGl2ZS10
eXBlLmpzb24KQEAgLTAsMCArMSwxOCBAQAoreworICAgICJkb21haW4iOiAiRGF0YWJhc2UiLAor
ICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkRhdGFiYXNlSWQi
LAorICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlv
biI6ICJVbmlxdWUgaWRlbnRpZmllciBvZiBEYXRhYmFzZSBvYmplY3QuIgorICAgICAgICB9Cisg
ICAgXSwKKyAgICAiZXZlbnRzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJk
aWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzIiwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjog
WworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJEYXRh
YmFzZUlkIiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi10
eXBlLXdpdGgtbG93ZXJjYXNlLW5hbWUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXR5cGUtd2l0aC1sb3dlcmNhc2UtbmFtZS5qc29u
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41MzE5MDFlNGE5YQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9mYWlsLW9uLXR5cGUtd2l0aC1sb3dlcmNhc2UtbmFtZS5qc29uCkBAIC0wLDAgKzEsMTAg
QEAKK3sKKyAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAg
IHsKKyAgICAgICAgICAgICJpZCI6ICJkYXRhYmFzZUlkIiwKKyAgICAgICAgICAgICJ0eXBlIjog
ImludGVnZXIiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBpZGVudGlmaWVy
IG9mIERhdGFiYXNlIG9iamVjdC4iCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi11bmtu
b3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtZGVjbGFyYXRpb24uanNvbiBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXVua25vd24tdHlwZS1y
ZWZlcmVuY2UtaW4tdHlwZS1kZWNsYXJhdGlvbi5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwLi5kNjg4N2EyNzQxMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXVua25vd24tdHlw
ZS1yZWZlcmVuY2UtaW4tdHlwZS1kZWNsYXJhdGlvbi5qc29uCkBAIC0wLDAgKzEsMTIgQEAKK1sK
K3sKKyAgICAiZG9tYWluIjogIlJ1bnRpbWUiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgewor
ICAgICAgICAgICAgImlkIjogIlJlbW90ZU9iamVjdElkIiwKKyAgICAgICAgICAgICJ0eXBlIjog
ImRyYWdvbiIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIG9iamVjdCBpZGVu
dGlmaWVyLiIKKyAgICAgICAgfQorICAgIF0KK30KK10KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXVua25vd24tdHlwZS1y
ZWZlcmVuY2UtaW4tdHlwZS1tZW1iZXIuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlw
ZS1tZW1iZXIuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYjgx
N2RiNTA0NGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUt
bWVtYmVyLmpzb24KQEAgLTAsMCArMSwxNSBAQAorWworeworICAgICJkb21haW4iOiAiRmFudGFz
eSIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiRHJhZ29u
RWdnIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAiZGVzY3Jp
cHRpb24iOiAiQSBkcmFnb24gZWdnLiIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKKyAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbG9yIiwgIiRyZWYiOiAiQ29sb3IiIH0KKyAgICAg
ICAgICAgIF0KKyAgICAgICAgfQorICAgIF0KK30KK10KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmF0ZS1kb21haW5zLXdpdGgt
ZmVhdHVyZS1ndWFyZHMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNjdjZjhlNTgyZjYKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KQEAgLTAsMCArMSwzNiBA
QAorWworeworICAgICJkb21haW4iOiAiTmV0d29yazEiLAorICAgICJmZWF0dXJlR3VhcmQiOiAi
UExBVEZPUk0oV0VCX0NPTU1BTkRTKSIsCisgICAgImNvbW1hbmRzIjogWworICAgICAgICB7Cisg
ICAgICAgICAgICAibmFtZSI6ICJsb2FkUmVzb3VyY2UiLAorICAgICAgICAgICAgImRlc2NyaXB0
aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUg
aW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKKyAgICAgICAgfQor
ICAgIF0KK30sCit7CisgICAgImRvbWFpbiI6ICJOZXR3b3JrMiIsCisgICAgImZlYXR1cmVHdWFy
ZCI6ICJQTEFURk9STShXRUJfVFlQRVMpIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAg
ICAgICAgICAgICJpZCI6ICJOZXR3b3JrRXJyb3IiLAorICAgICAgICAgICAgInR5cGUiOiAib2Jq
ZWN0IiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAibWVzc2FnZSIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBt
ZXNzYWdlLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvZGUiLCAidHlwZSI6ICJp
bnRlZ2VyIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIGNvZGUuIiB9CisgICAgICAgICAgICBdCisg
ICAgICAgIH0KKyAgICBdCit9LAoreworICAgICJkb21haW4iOiAiTmV0d29yazMiLAorICAgICJm
ZWF0dXJlR3VhcmQiOiAiUExBVEZPUk0oV0VCX0VWRU5UUykiLAorICAgICJldmVudHMiOiBbCisg
ICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogInJlc291cmNlTG9hZGVkIiwKKyAgICAgICAg
ICAgICJkZXNjcmlwdGlvbiI6ICJBIHJlc291cmNlIHdhcyBsb2FkZWQuIgorICAgICAgICB9Cisg
ICAgXQorfQorXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1k
ZWJ1Z2dhYmxlVHlwZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2dlbmVyaWMvY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1
Z2dhYmxlVHlwZS5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjdhYjY1Yjky
YS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2dlbmVyaWMvY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1
Z2dhYmxlVHlwZS5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi1bCi17Ci0gICAg
ImRvbWFpbiI6ICJEb21haW4iLAotICAgICJkZWJ1Z2dhYmxlVHlwZXMiOiBbInBhZ2UiXSwKLSAg
ICAidGFyZ2V0VHlwZXMiOiBbInBhZ2UiLCAid29ya2VyIl0sCi0gICAgImNvbW1hbmRzIjogW3si
bmFtZSI6ICJDb21tYW5kIn1dLAotICAgICJldmVudHMiOiBbeyJuYW1lIjogIkV2ZW50In1dCi19
Ci1dCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvY29tbWFuZHMt
d2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MTEyNjJlODg5ZmEuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2NvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRl
Lmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwxMDkgKzAsMCBAQAotewotICAgICJkb21haW4iOiAi
RGF0YWJhc2UiLAotICAgICJ0eXBlcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjog
IkRhdGFiYXNlSWQiLAotICAgICAgICAgICAgInR5cGUiOiAiaW50ZWdlciIsCi0gICAgICAgICAg
ICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIGlkZW50aWZpZXIgb2YgRGF0YWJhc2Ugb2JqZWN0LiIK
LSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIlByaW1hcnlDb2xvcnMi
LAotICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKLSAgICAgICAgICAgICJlbnVtIjogWyJy
ZWQiLCAiZ3JlZW4iLCAiYmx1ZSJdCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAg
ICJpZCI6ICJDb2xvckxpc3QiLAotICAgICAgICAgICAgInR5cGUiOiAiYXJyYXkiLAotICAgICAg
ICAgICAgIml0ZW1zIjogeyAiJHJlZiI6ICJQcmltYXJ5Q29sb3JzIiB9Ci0gICAgICAgIH0sCi0g
ICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJFcnJvciIsCi0gICAgICAgICAgICAidHlwZSI6
ICJvYmplY3QiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkRhdGFiYXNlIGVycm9yLiIs
Ci0gICAgICAgICAgICAicHJvcGVydGllcyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjog
Im1lc3NhZ2UiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgbWVzc2Fn
ZS4iIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2RlIiwgInR5cGUiOiAiaW50ZWdl
ciIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBjb2RlLiIgfQotICAgICAgICAgICAgXQotICAgICAg
ICB9Ci0gICAgXSwKLSAgICAiY29tbWFuZHMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJu
YW1lIjogImV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMiLAotICAgICAgICAgICAg
InBhcmFtZXRlcnMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwg
IiRyZWYiOiAiRGF0YWJhc2VJZCIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInF1ZXJ5
IiwgInR5cGUiOiAic3RyaW5nIiB9Ci0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInJldHVy
bnMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjog
ImFycmF5IiwgIm9wdGlvbmFsIjogdHJ1ZSwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0g
fSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiwg
Im9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1w
IiwgInR5cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9
LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIsICJv
cHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRhdGFiYXNlSWQi
LCAiJHJlZiI6ICJEYXRhYmFzZUlkIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAic3FsRXJyb3IiLCAiJHJlZiI6ICJFcnJvciIsICJvcHRpb25hbCI6IHRy
dWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNjcmVlbkNvbG9yIiwgIiRyZWYiOiAi
UHJpbWFyeUNvbG9ycyIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJu
YW1lIjogImFsdGVybmF0ZUNvbG9ycyIsICIkcmVmIjogIkNvbG9yTGlzdCIsICJvcHRpb25hbCI6
IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInByaW50Q29sb3IiLCAidHlwZSI6
ICJzdHJpbmciLCAiZW51bSI6IFsiY3lhbiIsICJtYWdlbnRhIiwgInllbGxvdyIsICJibGFjayJd
LCAib3B0aW9uYWwiOiB0cnVlIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfSwKLSAgICAgICAg
ewotICAgICAgICAgICAgIm5hbWUiOiAiZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1
ZXMiLAotICAgICAgICAgICAgImFzeW5jIjogdHJ1ZSwKLSAgICAgICAgICAgICJwYXJhbWV0ZXJz
IjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRh
dGFiYXNlSWQiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJxdWVyeSIsICJ0eXBlIjog
InN0cmluZyIgfQotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJyZXR1cm5zIjogWwotICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJv
cHRpb25hbCI6IHRydWUsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCi0gICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6
IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjog
Im51bWJlciIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjog
InZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiLCAib3B0aW9uYWwiOiB0
cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAi
RGF0YWJhc2VJZCIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1l
IjogInNxbEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlDb2xv
cnMiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJhbHRl
cm5hdGVDb2xvcnMiLCAiJHJlZiI6ICJDb2xvckxpc3QiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0g
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwg
ImVudW0iOiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSwgIm9wdGlvbmFs
IjogdHJ1ZSB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAg
ICAgICJuYW1lIjogImV4ZWN1dGVTUUxTeW5jIiwKLSAgICAgICAgICAgICJwYXJhbWV0ZXJzIjog
WwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFi
YXNlSWQiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJxdWVyeSIsICJ0eXBlIjogInN0
cmluZyIgfQotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJyZXR1cm5zIjogWwotICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVt
cyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJu
b3RlcyIsICJ0eXBlIjogInN0cmluZyIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRp
bWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjog
InZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjog
InBheWxvYWQiLCAidHlwZSI6ICJhbnkiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJk
YXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIgfSwKLSAgICAgICAgICAgICAgICB7ICJu
YW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiIH0sCi0gICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJhbHRlcm5hdGVDb2xvcnMiLCAiJHJlZiI6ICJDb2xvckxpc3QiIH0sCi0gICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlDb2xvcnMi
IH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3Ry
aW5nIiwgImVudW0iOiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSB9Ci0g
ICAgICAgICAgICBdCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjog
ImV4ZWN1dGVTUUxBc3luYyIsCi0gICAgICAgICAgICAiYXN5bmMiOiB0cnVlLAotICAgICAgICAg
ICAgInBhcmFtZXRlcnMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlk
IiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInF1
ZXJ5IiwgInR5cGUiOiAic3RyaW5nIiB9Ci0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInJl
dHVybnMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBl
IjogImFycmF5IiwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwKLSAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiB9LAotICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiB9LAotICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiB9LAotICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIgfSwKLSAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogImRhdGFiYXNlSWQiLCAiJHJlZiI6ICJEYXRhYmFzZUlkIiB9LAotICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAic3FsRXJyb3IiLCAiJHJlZiI6ICJFcnJvciIgfSwKLSAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogInNjcmVlbkNvbG9yIiwgIiRyZWYiOiAiUHJpbWFyeUNv
bG9ycyIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImFsdGVybmF0ZUNvbG9ycyIsICIk
cmVmIjogIkNvbG9yTGlzdCIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInByaW50Q29s
b3IiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsiY3lhbiIsICJtYWdlbnRhIiwgInllbGxv
dyIsICJibGFjayJdIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfQotICAgIF0KLX0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmljL2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvY29t
bWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2MWQ1N2Q4MjBkLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9jb21tYW5k
cy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgorKysgL2Rldi9udWxs
CkBAIC0xLDg1ICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKLSAgICAidHlw
ZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJEYXRhYmFzZUlkIiwKLSAgICAg
ICAgICAgICJ0eXBlIjogImludGVnZXIiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVu
aXF1ZSBpZGVudGlmaWVyIG9mIERhdGFiYXNlIG9iamVjdC4iCi0gICAgICAgIH0sCi0gICAgICAg
IHsKLSAgICAgICAgICAgICJpZCI6ICJQcmltYXJ5Q29sb3JzIiwKLSAgICAgICAgICAgICJ0eXBl
IjogInN0cmluZyIsCi0gICAgICAgICAgICAiZW51bSI6IFsicmVkIiwgImdyZWVuIiwgImJsdWUi
XQotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiQ29sb3JMaXN0IiwK
LSAgICAgICAgICAgICJ0eXBlIjogImFycmF5IiwKLSAgICAgICAgICAgICJpdGVtcyI6IHsgIiRy
ZWYiOiAiUHJpbWFyeUNvbG9ycyIgfQotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAg
ICAiaWQiOiAiRXJyb3IiLAotICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKLSAgICAgICAg
ICAgICJkZXNjcmlwdGlvbiI6ICJEYXRhYmFzZSBlcnJvci4iLAotICAgICAgICAgICAgInByb3Bl
cnRpZXMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJtZXNzYWdlIiwgInR5cGUiOiAi
c3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIG1lc3NhZ2UuIiB9LAotICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAiY29kZSIsICJ0eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAi
RXJyb3IgY29kZS4iIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfQotICAgIF0sCi0gICAgImNv
bW1hbmRzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJleGVjdXRlQWxsT3B0
aW9uYWxQYXJhbWV0ZXJzIiwKLSAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwotICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJvcHRpb25h
bCI6IHRydWUsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCi0gICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWUg
fSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJl
ciIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVl
cyIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiLCAib3B0aW9uYWwiOiB0cnVlIH0s
Ci0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJh
c2VJZCIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNx
bEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlDb2xvcnMiLCAi
b3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJhbHRlcm5hdGVD
b2xvcnMiLCAiJHJlZiI6ICJDb2xvckxpc3QiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0i
OiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSwgIm9wdGlvbmFsIjogdHJ1
ZSB9Ci0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInJldHVybnMiOiBbCi0gICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIm9wdGlvbmFs
IjogdHJ1ZSwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwKLSAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZSB9
LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVy
IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVz
IiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIsICJvcHRpb25hbCI6IHRydWUgfSwK
LSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRhdGFiYXNlSWQiLCAiJHJlZiI6ICJEYXRhYmFz
ZUlkIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic3Fs
RXJyb3IiLCAiJHJlZiI6ICJFcnJvciIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInNjcmVlbkNvbG9yIiwgIiRyZWYiOiAiUHJpbWFyeUNvbG9ycyIsICJv
cHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImFsdGVybmF0ZUNv
bG9ycyIsICIkcmVmIjogIkNvbG9yTGlzdCIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInByaW50Q29sb3IiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6
IFsiY3lhbiIsICJtYWdlbnRhIiwgInllbGxvdyIsICJibGFjayJdLCAib3B0aW9uYWwiOiB0cnVl
IH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgIm5h
bWUiOiAiZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIiwKLSAgICAgICAgICAgICJwYXJhbWV0
ZXJzIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6
ICJhcnJheSIsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCi0gICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIgfSwKLSAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIgfSwKLSAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIgfSwKLSAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiIH0sCi0gICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIgfSwKLSAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiIH0sCi0gICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlDb2xv
cnMiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJhbHRlcm5hdGVDb2xvcnMiLCAiJHJl
ZiI6ICJDb2xvckxpc3QiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcmludENvbG9y
IiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ci
LCAiYmxhY2siXSB9Ci0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInJldHVybnMiOiBbCi0g
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5Iiwg
Iml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1l
IjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiB9LAotICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiB9LAotICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1l
IjogImRhdGFiYXNlSWQiLCAiJHJlZiI6ICJEYXRhYmFzZUlkIiB9LAotICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAic3FsRXJyb3IiLCAiJHJlZiI6ICJFcnJvciIgfSwKLSAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInNjcmVlbkNvbG9yIiwgIiRyZWYiOiAiUHJpbWFyeUNvbG9ycyIgfSwKLSAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogImFsdGVybmF0ZUNvbG9ycyIsICIkcmVmIjogIkNvbG9y
TGlzdCIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInByaW50Q29sb3IiLCAidHlwZSI6
ICJzdHJpbmciLCAiZW51bSI6IFsiY3lhbiIsICJtYWdlbnRhIiwgInllbGxvdyIsICJibGFjayJd
IH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfQotICAgIF0KLX0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2RlZmluaXRp
b25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5q
c29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MTdmMTM1ZWU1YS4uMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgorKysgL2Rldi9udWxsCkBA
IC0xLDI4ICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIk5ldHdvcmsiLAotICAgICJ0eXBlcyI6
IFsKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIk5ldHdvcmtFcnJvciIsCi0gICAgICAg
ICAgICAidHlwZSI6ICJvYmplY3QiLAotICAgICAgICAgICAgInBsYXRmb3JtIjogIm1hY29zIiwK
LSAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
bWVzc2FnZSIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBtZXNzYWdl
LiIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvZGUiLCAidHlwZSI6ICJpbnRlZ2Vy
IiwgImRlc2NyaXB0aW9uIjogIkVycm9yIGNvZGUuIiB9Ci0gICAgICAgICAgICBdCi0gICAgICAg
IH0KLSAgICBdLAotICAgICJjb21tYW5kcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgIm5h
bWUiOiAibG9hZFJlc291cmNlIiwKLSAgICAgICAgICAgICJwbGF0Zm9ybSI6ICJtYWNvcyIsCi0g
ICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9hZHMgYSByZXNvdXJjZSBpbiB0aGUgY29udGV4
dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFnZSB3aXRob3V0IGNyb3NzIG9yaWdpbiBj
aGVja3MuIgotICAgICAgICB9Ci0gICAgXSwKLSAgICAiZXZlbnRzIjogWwotICAgICAgICB7Ci0g
ICAgICAgICAgICAibmFtZSI6ICJyZXNvdXJjZUxvYWRlZCIsCi0gICAgICAgICAgICAicGxhdGZv
cm0iOiAibWFjb3MiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkEgcmVzb3VyY2Ugd2Fz
IGxvYWRlZC4iCi0gICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9kb21haW4tZGVidWdnYWJs
ZVR5cGVzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZ2VuZXJpYy9kb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDFmZWIwYzlhMjdlLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9kb21haW4tZGVidWdnYWJs
ZVR5cGVzLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLVsKLXsKLSAgICAiZG9t
YWluIjogIkRvbWFpbiIsCi0gICAgImRlYnVnZ2FibGVUeXBlcyI6IFsid2ViLXBhZ2UiXSwKLSAg
ICAiY29tbWFuZHMiOiBbeyJuYW1lIjogIkNvbW1hbmQifV0sCi0gICAgImV2ZW50cyI6IFt7Im5h
bWUiOiAiRXZlbnQifV0KLX0KLV0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2RvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5n
LWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9t
YWluLWRlYnVnZ2FibGVUeXBlLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2
MmZiMzhiYTc4Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9kb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21h
aW4tZGVidWdnYWJsZVR5cGUuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotWwot
ewotICAgICJkb21haW4iOiAiRG9tYWluIiwKLSAgICAiZGVidWdnYWJsZVR5cGVzIjogWyJwYWdl
Il0sCi0gICAgImNvbW1hbmRzIjogW3sibmFtZSI6ICJDb21tYW5kIiwgInRhcmdldFR5cGVzIjog
WyJwYWdlIiwgIndvcmtlciJdfV0sCi0gICAgImV2ZW50cyI6IFt7Im5hbWUiOiAiRXZlbnQifV0K
LX0KLV0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL2RvbWFpbi10YXJnZXRUeXBlcy5qc29uIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZG9tYWluLXRhcmdldFR5cGVz
Lmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhNmU0MGQ2MGFkLi4wMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJpYy9kb21haW4tdGFyZ2V0VHlwZXMuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDggKzAs
MCBAQAotWwotewotICAgICJkb21haW4iOiAiRG9tYWluIiwKLSAgICAidGFyZ2V0VHlwZXMiOiBb
InBhZ2UiXSwKLSAgICAiY29tbWFuZHMiOiBbeyJuYW1lIjogIkNvbW1hbmQiLCAidGFyZ2V0VHlw
ZXMiOiBbInBhZ2UiXX1dLAotICAgICJldmVudHMiOiBbeyJuYW1lIjogIkV2ZW50IiwgInRhcmdl
dFR5cGVzIjogWyJwYWdlIl19XQotfQotXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZG9tYWlucy13aXRoLXZhcnlpbmct
Y29tbWFuZC1zaXplcy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2dlbmVyaWMvZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29u
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NGE4ZWNiMTc2ZC4uMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVy
aWMvZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCisrKyAvZGV2L251bGwK
QEAgLTEsNTQgKzAsMCBAQAotWwotewotICAgICJkb21haW4iOiAiTmV0d29yazEiLAotICAgICJj
b21tYW5kcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAibG9hZFJlc291cmNl
MSIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9hZHMgYSByZXNvdXJjZSBpbiB0aGUg
Y29udGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFnZSB3aXRob3V0IGNyb3NzIG9y
aWdpbiBjaGVja3MuIgotICAgICAgICB9Ci0gICAgXQotfSwKLXsKLSAgICAiZG9tYWluIjogIk5l
dHdvcmsyIiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJM
b2FkZXJJZCIsCi0gICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAotICAgICAgICAgICAgImRl
c2NyaXB0aW9uIjogIlVuaXF1ZSBsb2FkZXIgaWRlbnRpZmllci4iCi0gICAgICAgIH0KLSAgICBd
Ci19LAotewotICAgICJkb21haW4iOiAiTmV0d29yazMiLAotICAgICJjb21tYW5kcyI6IFsKLSAg
ICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAibG9hZFJlc291cmNlMSIsCi0gICAgICAgICAg
ICAiZGVzY3JpcHRpb24iOiAiTG9hZHMgYSByZXNvdXJjZSBpbiB0aGUgY29udGV4dCBvZiBhIGZy
YW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFnZSB3aXRob3V0IGNyb3NzIG9yaWdpbiBjaGVja3MuIgot
ICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJsb2FkUmVzb3VyY2Uy
IiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBhIHJlc291cmNlIGluIHRoZSBj
b250ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGluc3BlY3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3Jp
Z2luIGNoZWNrcy4iCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjog
ImxvYWRSZXNvdXJjZTMiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVz
b3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0
aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAg
ICAgICAgIm5hbWUiOiAibG9hZFJlc291cmNlNCIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24i
OiAiTG9hZHMgYSByZXNvdXJjZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNw
ZWN0ZWQgcGFnZSB3aXRob3V0IGNyb3NzIG9yaWdpbiBjaGVja3MuIgotICAgICAgICB9LAotICAg
ICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJsb2FkUmVzb3VyY2U1IiwKLSAgICAgICAgICAg
ICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBhIHJlc291cmNlIGluIHRoZSBjb250ZXh0IG9mIGEgZnJh
bWUgb24gdGhlIGluc3BlY3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNoZWNrcy4iCi0g
ICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJjZTYi
LAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNv
bnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmln
aW4gY2hlY2tzLiIKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAi
bG9hZFJlc291cmNlNyIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9hZHMgYSByZXNv
dXJjZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFnZSB3aXRo
b3V0IGNyb3NzIG9yaWdpbiBjaGVja3MuIgotICAgICAgICB9Ci0gICAgXQotfQotXQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVy
aWMvZW51bS12YWx1ZXMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL2VudW0tdmFsdWVzLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGNkYWQ2MWRmN2M5Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9lbnVtLXZhbHVlcy5qc29uCisr
KyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAoteyJkb21haW5zIjpbCi17Ci0gICAgImRvbWFp
biI6ICJUeXBlRG9tYWluIiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAg
ICJpZCI6ICJUeXBlRG9tYWluRW51bSIsCi0gICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAot
ICAgICAgICAgICAgImVudW0iOiBbInNoYXJlZCIsICJyZWQiLCAiZ3JlZW4iLCAiYmx1ZSJdCi0g
ICAgICAgIH0KLSAgICBdCi19LAotewotICAgICJkb21haW4iOiAiQ29tbWFuZERvbWFpbiIsCi0g
ICAgImNvbW1hbmRzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJjb21tYW5k
V2l0aEVudW1SZXR1cm5WYWx1ZSIsCi0gICAgICAgICAgICAicGFyYW1ldGVycyI6IFtdLAotICAg
ICAgICAgICAgInJldHVybnMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJyZXR1cm5W
YWx1ZSIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJzaGFyZWQiLCAiY3lhbiIsICJtYWdl
bnRhIiwgInllbGxvdyJdIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfQotICAgIF0KLX0sCi17
Ci0gICAgImRvbWFpbiI6ICJFdmVudERvbWFpbiIsCi0gICAgImV2ZW50cyI6IFsKLSAgICAgICAg
ewotICAgICAgICAgICAgIm5hbWUiOiAiZXZlbnRXaXRoRW51bVBhcmFtZXRlciIsCi0gICAgICAg
ICAgICAicGFyYW1ldGVycyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBhcmFtZXRl
ciIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJzaGFyZWQiLCAiYmxhY2siLCAid2hpdGUi
XSB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0KLSAgICBdCi19Ci1dfQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXZl
bnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbiBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V2ZW50LXRh
cmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDRkZmVkNDFlZDIxLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9ldmVudC10YXJn
ZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCisrKyAvZGV2L251bGwK
QEAgLTEsOCArMCwwIEBACi1bCi17Ci0gICAgImRvbWFpbiI6ICJEb21haW4iLAotICAgICJkZWJ1
Z2dhYmxlVHlwZXMiOiBbInBhZ2UiXSwKLSAgICAiY29tbWFuZHMiOiBbeyJuYW1lIjogIkNvbW1h
bmQifV0sCi0gICAgImV2ZW50cyI6IFt7Im5hbWUiOiAiRXZlbnQiLCAidGFyZ2V0VHlwZXMiOiBb
InBhZ2UiLCAid29ya2VyIl19XQotfQotXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXZlbnRzLXdpdGgtb3B0aW9uYWwt
cGFyYW1ldGVycy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYWJiZjEwYjgzNi4uMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXZl
bnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsNTkg
KzAsMCBAQAotewotICAgICJkb21haW4iOiAiRGF0YWJhc2UiLAotICAgICJ0eXBlcyI6IFsKLSAg
ICAgICAgewotICAgICAgICAgICAgImlkIjogIkRhdGFiYXNlSWQiLAotICAgICAgICAgICAgInR5
cGUiOiAic3RyaW5nIiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgaWRlbnRp
ZmllciBvZiBEYXRhYmFzZSBvYmplY3QuIgotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAg
ICAgICAiaWQiOiAiUHJpbWFyeUNvbG9ycyIsCi0gICAgICAgICAgICAidHlwZSI6ICJzdHJpbmci
LAotICAgICAgICAgICAgInZhbHVlcyI6IFsicmVkIiwgImdyZWVuIiwgImJsdWUiXQotICAgICAg
ICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiQ29sb3JMaXN0IiwKLSAgICAgICAg
ICAgICJ0eXBlIjogImFycmF5IiwKLSAgICAgICAgICAgICJpdGVtcyI6IHsgIiRyZWYiOiAiUHJp
bWFyeUNvbG9ycyIgfQotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAi
RXJyb3IiLAotICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKLSAgICAgICAgICAgICJkZXNj
cmlwdGlvbiI6ICJEYXRhYmFzZSBlcnJvci4iLAotICAgICAgICAgICAgInByb3BlcnRpZXMiOiBb
Ci0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJtZXNzYWdlIiwgInR5cGUiOiAic3RyaW5nIiwg
ImRlc2NyaXB0aW9uIjogIkVycm9yIG1lc3NhZ2UuIiB9LAotICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAiY29kZSIsICJ0eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgY29k
ZS4iIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfQotICAgIF0sCi0gICAgImV2ZW50cyI6IFsK
LSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1l
dGVycyIsCi0gICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKLSAgICAgICAgICAgICAgICB7ICJu
YW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAib3B0aW9uYWwiOiB0cnVlLCAi
aXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiLCAib3B0aW9u
YWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6
ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAic3FsRXJyb3IiLCAiJHJlZiI6ICJFcnJvciIsICJvcHRpb25hbCI6
IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNjcmVlbkNvbG9yIiwgIiRyZWYi
OiAiUHJpbWFyeUNvbG9ycyIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7
ICJuYW1lIjogImFsdGVybmF0ZUNvbG9ycyIsICIkcmVmIjogIkNvbG9yTGlzdCIsICJvcHRpb25h
bCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInByaW50Q29sb3IiLCAidHlw
ZSI6ICJzdHJpbmciLCAidmFsdWVzIjogWyJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93IiwgImJs
YWNrIl0sICJvcHRpb25hbCI6IHRydWUgfQotICAgICAgICAgICAgXQotICAgICAgICB9LAotICAg
ICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJkaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRl
cnMiLAotICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAidHlwZSI6ICJz
dHJpbmciIH0gfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAi
c3RyaW5nIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUi
OiAibnVtYmVyIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVzIiwgInR5cGUi
OiAib2JqZWN0IiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBl
IjogImFueSIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYi
OiAiRXJyb3IiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5Db2xvciIsICIk
cmVmIjogIlByaW1hcnlDb2xvcnMiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJhbHRl
cm5hdGVDb2xvcnMiLCAiJHJlZiI6ICJDb2xvckxpc3QiIH0sCi0gICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgInZhbHVlcyI6IFsiY3lhbiIs
ICJtYWdlbnRhIiwgInllbGxvdyIsICJibGFjayJdIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAg
fQotICAgIF0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2NvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGlu
Zy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9jb21tYW5kLXRhcmdl
dFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tcmVzdWx0CmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MzEzZmE5MTUxZS4uMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0
ZWQvY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29u
LXJlc3VsdAorKysgL2Rldi9udWxsCkBAIC0xLDEwNjMgKzAsMCBAQAotIyMjIEJlZ2luIEZpbGU6
IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUu
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0vLyBEb21h
aW4KLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIkRvbWFpbiIsIFsicGFnZSIsICJ3
b3JrZXIiXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiRG9tYWluLkNvbW1h
bmQiLCBudWxsLCBbXSwgW10pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckV2ZW50KCJEb21h
aW4uRXZlbnQiLCBudWxsLCBbXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluRGlz
cGF0Y2hlciA9IEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEaXNwYXRjaGVyLmJpbmQoSW5zcGVj
dG9yQmFja2VuZCwgIkRvbWFpbiIpOwotSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigi
RG9tYWluIiwgWyJwYWdlIl0pOwotIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFu
ZHMuanMKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMu
aAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmQtdGFyZ2V0VHlwZS1t
YXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMu
aCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5o
PgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0K
LW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hl
ciB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2Vu
ZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92
ZShkaXNwYXRjaGVyKTsgfQotICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hl
cigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KLXByaXZhdGU6
Ci0gICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwotfTsK
LQotCi1jbGFzcyBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+QWx0ZXJuYXRl
RG9tYWluQmFja2VuZERpc3BhdGNoZXIoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChs
b25nIGNhbGxJZCkgPSAwOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSNlbmRp
ZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSMjIyBFbmQgRmls
ZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNl
Ci0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXR5cGVkZWYgU3RyaW5nIEVy
cm9yU3RyaW5nOwotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
Ci1jbGFzcyBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjsKLSNlbmRpZiAvLyBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQotY2xhc3MgRG9tYWluQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChF
cnJvclN0cmluZyYpID0gMDsKLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIH5Eb21haW5CYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIoKTsKLX07Ci0KLWNsYXNzIERvbWFpbkJhY2tlbmREaXNwYXRjaGVy
IGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoK
LSAgICBzdGF0aWMgUmVmPERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERp
c3BhdGNoZXImLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICB2b2lkIGRp
c3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9i
amVjdD4mJiBtZXNzYWdlKSBmaW5hbDsKLXByaXZhdGU6Ci0gICAgdm9pZCBDb21tYW5kKGxvbmcg
cmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwotI2lmIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotcHVibGljOgotICAgIHZvaWQgc2V0
QWx0ZXJuYXRlRGlzcGF0Y2hlcihBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciogYWx0
ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNw
YXRjaGVyOyB9Ci1wcml2YXRlOgotICAgIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVy
KiBtX2FsdGVybmF0ZURpc3BhdGNoZXIgeyBudWxscHRyIH07Ci0jZW5kaWYKLXByaXZhdGU6Ci0g
ICAgRG9tYWluQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImLCBEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIqIG1fYWdlbnQgeyBudWxscHRyIH07Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
LSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUu
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRl
IDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQotI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hl
cnMuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotRG9tYWluQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyOjp+RG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9Ci0K
LVJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmNy
ZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIERvbWFpbkJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlciogYWdlbnQpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRG9t
YWluQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIsIGFnZW50KSk7Ci19Ci0KLURv
bWFpbkJhY2tlbmREaXNwYXRjaGVyOjpEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlz
cGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxl
ciogYWdlbnQpCi0gICAgOiBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlz
cGF0Y2hlcikKLSAgICAsIG1fYWdlbnQoYWdlbnQpCi17Ci0gICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKCJEb21haW4iX3MsIHRoaXMpOwotfQotCi12
b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29u
c3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKLXsKLSAgICBS
ZWY8RG9tYWluQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwotCi0gICAgUmVmUHRy
PEpTT046Ok9iamVjdD4gcGFyYW1ldGVyczsKLSAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFt
cyJfcywgcGFyYW1ldGVycyk7Ci0KLSAgICBpZiAobWV0aG9kID09ICJDb21tYW5kIikKLSAgICAg
ICAgQ29tbWFuZChyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOwotICAgIGVsc2UKLSAg
ICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlz
cGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRG9tYWluLiIgKyBtZXRob2QgKyAiJyB3YXMgbm90
IGZvdW5kIik7Ci19Ci0KLXZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9u
ZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCi17Ci0jaWYgRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0gICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hl
cikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPkNvbW1hbmQocmVxdWVzdElkKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7
Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
LSAgICBtX2FnZW50LT5Db21tYW5kKGVycm9yKTsKLQotICAgIGlmICghZXJyb3IubGVuZ3RoKCkp
Ci0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdU
Rk1vdmUocmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3Is
IFdURk1vdmUoZXJyb3IpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBF
bmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRl
c3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNl
Ci0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05W
YWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIElu
c3BlY3RvciB7Ci0KLWNsYXNzIEZyb250ZW5kUm91dGVyOwotCi1jbGFzcyBEb21haW5Gcm9udGVu
ZERpc3BhdGNoZXIgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAg
IERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcihGcm9udGVuZFJvdXRlciYgZnJvbnRlbmRSb3V0ZXIp
IDogbV9mcm9udGVuZFJvdXRlcihmcm9udGVuZFJvdXRlcikgeyB9Ci0gICAgdm9pZCBFdmVudCgp
OwotcHJpdmF0ZToKLSAgICBGcm9udGVuZFJvdXRlciYgbV9mcm9udGVuZFJvdXRlcjsKLX07Ci0K
LX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNw
YXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5cGUtbWF0
Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RG
cm9udGVuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFt
ZXNwYWNlIEluc3BlY3RvciB7Ci0KLXZvaWQgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVyOjpFdmVu
dCgpCi17Ci0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFp
bi5FdmVudCJfcyk7Ci0KLSAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChqc29uTWVzc2Fn
ZS0+dG9KU09OU3RyaW5nKCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMj
IEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbE9iamVjdHMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UK
LQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNp
bmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0K
LW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLQotCi0KLQotCi0KLQotCi19IC8vIG5hbWVzcGFjZSBQ
cm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sT2JqZWN0cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNw
cAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmQtdGFyZ2V0VHlwZS1t
YXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVz
dFByb3RvY29sT2JqZWN0cy5oIgotCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotbmFtZXNw
YWNlIFByb3RvY29sIHsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3Bw
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGlu
Zy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJu
YXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi1A
cHJvdG9jb2wgVGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcjsKLQotbmFtZXNwYWNlIElu
c3BlY3RvciB7Ci0KLQotY2xhc3MgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVy
IGZpbmFsIDogcHVibGljIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyIHsKLSAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBPYmpDSW5zcGVjdG9yRG9tYWlu
QmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4gaGFu
ZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQotICAgIHZvaWQgQ29tbWFuZChsb25nIHJl
cXVlc3RJZCkgZmluYWw7Ci1wcml2YXRlOgotICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xE
b21haW5Eb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5o
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hp
bmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFs
LmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW5jbHVkZSA8
d3RmL0pTT05WYWx1ZXMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXZvaWQgT2JqQ0lu
c3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElkKQot
ewotICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihDb21t
YW5kV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlz
cGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRG9tYWluLkNvbW1hbmQnIHdhcyBub3QgZm91bmQi
X3MpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJp
bmcgKmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29s
RXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsK
LSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICB9
OwotCi0gICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFs
c2UpOwotICAgIH07Ci0KLSAgICBbbV9kZWxlZ2F0ZSBDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6
ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKLX0KLQotCi19
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNr
ZW5kRGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3Vy
YXRpb24uaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmQtdGFyZ2V0
VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFBy
b3RvY29sLmg+Ci0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGlu
dGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKLUBwcm9wZXJ0eSAo
bm9uYXRvbWljLCByZXRhaW4sIHNldHRlcj1zZXREb21haW5IYW5kbGVyOikgaWQ8VGVzdFByb3Rv
Y29sRG9tYWluRG9tYWluSGFuZGxlcj4gZG9tYWluSGFuZGxlcjsKLUBwcm9wZXJ0eSAobm9uYXRv
bWljLCByZWFkb25seSkgVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyICpk
b21haW5FdmVudERpc3BhdGNoZXI7Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xDb25maWd1cmF0aW9uLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3Vy
YXRpb24ubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdl
dFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbi5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2ltcG9ydCAi
VGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgotCi11c2luZyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yOwotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
bgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci0g
ICAgaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4gX2RvbWFpbkhhbmRsZXI7Ci0g
ICAgVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyICpfZG9tYWluRXZlbnRE
aXNwYXRjaGVyOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdt
ZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBzZWxmID0gW3N1
cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NF
UlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVy
biBzZWxmOwotfQotCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBbX2RvbWFpbkhhbmRsZXIgcmVs
ZWFzZV07Ci0gICAgW19kb21haW5FdmVudERpc3BhdGNoZXIgcmVsZWFzZV07Ci0gICAgW3N1cGVy
IGRlYWxsb2NdOwotfQotCi0tICh2b2lkKXNldERvbWFpbkhhbmRsZXI6KGlkPFRlc3RQcm90b2Nv
bERvbWFpbkRvbWFpbkhhbmRsZXI+KWhhbmRsZXIKLXsKLSAgICBpZiAoaGFuZGxlciA9PSBfZG9t
YWluSGFuZGxlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgW19kb21haW5IYW5kbGVyIHJlbGVh
c2VdOwotICAgIF9kb21haW5IYW5kbGVyID0gW2hhbmRsZXIgcmV0YWluXTsKLQotICAgIGF1dG8g
YWx0ZXJuYXRlRGlzcGF0Y2hlciA9IG1ha2VVbmlxdWU8T2JqQ0luc3BlY3RvckRvbWFpbkJhY2tl
bmREaXNwYXRjaGVyPihoYW5kbGVyKTsKLSAgICBhdXRvIGFsdGVybmF0ZUFnZW50ID0gbWFrZVVu
aXF1ZTxBbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudDxEb21haW5CYWNrZW5kRGlzcGF0Y2hlciwg
QWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXI+PigiRG9tYWluIl9zLCAqX2NvbnRyb2xs
ZXIsIFdURk1vdmUoYWx0ZXJuYXRlRGlzcGF0Y2hlcikpOwotICAgIF9jb250cm9sbGVyLT5hcHBl
bmRFeHRyYUFnZW50KFdURk1vdmUoYWx0ZXJuYXRlQWdlbnQpKTsKLX0KLQotLSAoaWQ8VGVzdFBy
b3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4pZG9tYWluSGFuZGxlcgotewotICAgIHJldHVybiBf
ZG9tYWluSGFuZGxlcjsKLX0KLQotLSAoVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNw
YXRjaGVyICopZG9tYWluRXZlbnREaXNwYXRjaGVyCi17Ci0gICAgaWYgKCFfZG9tYWluRXZlbnRE
aXNwYXRjaGVyKQotICAgICAgICBfZG9tYWluRXZlbnREaXNwYXRjaGVyID0gW1tUZXN0UHJvdG9j
b2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgYWxsb2NdIGluaXRXaXRoQ29udHJvbGxlcjpf
Y29udHJvbGxlcl07Ci0gICAgcmV0dXJuIF9kb21haW5FdmVudERpc3BhdGNoZXI7Ci19Ci0KLUBl
bmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWlu
LWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgot
Ci11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3Rv
Y29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyCi17Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0
b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
Q29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCi17
Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVy
biBuaWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIpOwotICAgIF9jb250cm9sbGVyID0gY29udHJv
bGxlcjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClFdmVudAotewotICAgIGNvbnN0
IEZyb250ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29udHJvbGxlci0+ZnJvbnRlbmRSb3V0ZXIoKTsK
LQotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4uRXZl
bnQiX3MpOwotICAgIHJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygp
KTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRj
aGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRl
YnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLSNpbXBvcnQgPFdlYklu
c3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KLQotCi0KLQotdHlwZWRlZiBOU19FTlVN
KE5TSW50ZWdlciwgVGVzdFByb3RvY29sUGxhdGZvcm0pIHsKLSAgICBUZXN0UHJvdG9jb2xQbGF0
Zm9ybUFsbCwKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWMsCi0gICAgVGVzdFByb3Rv
Y29sUGxhdGZvcm1JT1MsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUywKLX07Ci0KLQot
Ci0KLQotQHByb3RvY29sIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXIgPE5TT2JqZWN0
PgotQG9wdGlvbmFsCi0tICh2b2lkKUNvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShO
U1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKHZv
aWQpKXN1Y2Nlc3NDYWxsYmFjazsKLUBlbmQKLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAo
ImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlz
cGF0Y2hlciA6IE5TT2JqZWN0Ci0tICh2b2lkKUV2ZW50OwotQGVuZAotCi0KLSNpbXBvcnQgPFdl
Ykluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4KLQotIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
SW50ZXJuYWwuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmQtdGFy
Z2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIK
LSNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCi0jaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPHd0
Zi9KU09OVmFsdWVzLmg+Ci0KLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZl
bnREaXNwYXRjaGVyIChQcml2YXRlKQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxl
cjooSW5zcGVjdG9yOjpBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXI7
Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVi
dWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQ
cm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KLU9wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJv
bVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOwotCi1pbmxpbmUgU3RyaW5nIHRv
UHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sUGxhdGZvcm0gdmFsdWUpCi17Ci0gICAgc3dpdGNo
KHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDoKLSAgICAgICAgcmV0
dXJuICJhbGwiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM6Ci0gICAg
ICAgIHJldHVybiAiZ2VuZXJpYyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9T
OgotICAgICAgICByZXR1cm4gImlvcyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3Jt
TWFjT1M6Ci0gICAgICAgIHJldHVybiAibWFjb3MiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+
Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sUGxhdGZvcm0+IGZyb21Qcm90b2NvbFN0cmlu
Zyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiYWxsIikKLSAgICAg
ICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOwotICAgIGlmICh2YWx1ZSA9PSAiZ2Vu
ZXJpYyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM7Ci0gICAg
aWYgKHZhbHVlID09ICJpb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1J
T1M7Ci0gICAgaWYgKHZhbHVlID09ICJtYWNvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9j
b2xQbGF0Zm9ybU1hY09TOwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0K
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5cGUtbWF0
Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
LmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlw
ZVBhcnNlci5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFBy
aXZhdGUuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0KLQotCi0KLSMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xUeXBlcy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0
UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRl
Lmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMu
aD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9jb21tYW5kcy13aXRoLWFzeW5jLWF0
dHJpYnV0ZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRl
Lmpzb24tcmVzdWx0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYzVjNDFkYjUzYS4u
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNv
bi1yZXN1bHQKKysrIC9kZXYvbnVsbApAQCAtMSwxODA5ICswLDAgQEAKLSMjIyBCZWdpbiBGaWxl
OiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLS8vIERhdGFiYXNlCi1JbnNwZWN0b3JCYWNr
ZW5kLnJlZ2lzdGVyRG9tYWluKCJEYXRhYmFzZSIsIG51bGwpOwotSW5zcGVjdG9yQmFja2VuZC5y
ZWdpc3RlckVudW0oIkRhdGFiYXNlLlByaW1hcnlDb2xvcnMiLCB7UmVkOiAicmVkIiwgR3JlZW46
ICJncmVlbiIsIEJsdWU6ICJibHVlIn0pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1h
bmQoIkRhdGFiYXNlLmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMiLCBudWxsLCBb
eyJuYW1lIjogImRhdGFiYXNlSWQiLCAidHlwZSI6ICJudW1iZXIifSwgeyJuYW1lIjogInF1ZXJ5
IiwgInR5cGUiOiAic3RyaW5nIn1dLCBbImNvbHVtbk5hbWVzIiwgIm5vdGVzIiwgInRpbWVzdGFt
cCIsICJ2YWx1ZXMiLCAicGF5bG9hZCIsICJkYXRhYmFzZUlkIiwgInNxbEVycm9yIiwgInNjcmVl
bkNvbG9yIiwgImFsdGVybmF0ZUNvbG9ycyIsICJwcmludENvbG9yIl0pOwotSW5zcGVjdG9yQmFj
a2VuZC5yZWdpc3RlckNvbW1hbmQoIkRhdGFiYXNlLmV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0
dXJuVmFsdWVzIiwgbnVsbCwgW3sibmFtZSI6ICJkYXRhYmFzZUlkIiwgInR5cGUiOiAibnVtYmVy
In0sIHsibmFtZSI6ICJxdWVyeSIsICJ0eXBlIjogInN0cmluZyJ9XSwgWyJjb2x1bW5OYW1lcyIs
ICJub3RlcyIsICJ0aW1lc3RhbXAiLCAidmFsdWVzIiwgInBheWxvYWQiLCAiZGF0YWJhc2VJZCIs
ICJzcWxFcnJvciIsICJzY3JlZW5Db2xvciIsICJhbHRlcm5hdGVDb2xvcnMiLCAicHJpbnRDb2xv
ciJdKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJEYXRhYmFzZS5leGVjdXRl
U1FMU3luYyIsIG51bGwsIFt7Im5hbWUiOiAiZGF0YWJhc2VJZCIsICJ0eXBlIjogIm51bWJlciJ9
LCB7Im5hbWUiOiAicXVlcnkiLCAidHlwZSI6ICJzdHJpbmcifV0sIFsiY29sdW1uTmFtZXMiLCAi
bm90ZXMiLCAidGltZXN0YW1wIiwgInZhbHVlcyIsICJwYXlsb2FkIiwgImRhdGFiYXNlSWQiLCAi
c3FsRXJyb3IiLCAiYWx0ZXJuYXRlQ29sb3JzIiwgInNjcmVlbkNvbG9yIiwgInByaW50Q29sb3Ii
XSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiRGF0YWJhc2UuZXhlY3V0ZVNR
TEFzeW5jIiwgbnVsbCwgW3sibmFtZSI6ICJkYXRhYmFzZUlkIiwgInR5cGUiOiAibnVtYmVyIn0s
IHsibmFtZSI6ICJxdWVyeSIsICJ0eXBlIjogInN0cmluZyJ9XSwgWyJjb2x1bW5OYW1lcyIsICJu
b3RlcyIsICJ0aW1lc3RhbXAiLCAidmFsdWVzIiwgInBheWxvYWQiLCAiZGF0YWJhc2VJZCIsICJz
cWxFcnJvciIsICJzY3JlZW5Db2xvciIsICJhbHRlcm5hdGVDb2xvcnMiLCAicHJpbnRDb2xvciJd
KTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEYXRhYmFzZURpc3BhdGNoZXIgPSBJbnNwZWN0
b3JCYWNrZW5kLnJlZ2lzdGVyRGlzcGF0Y2hlci5iaW5kKEluc3BlY3RvckJhY2tlbmQsICJEYXRh
YmFzZSIpOwotSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiRGF0YWJhc2UiLCBudWxs
KTsKLSMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQot
Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0KLSNpbmNsdWRl
ICJUZXN0UHJvdG9jb2xUeXBlcy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
RnJvbnRlbmRSb3V0ZXIuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEFsdGVy
bmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2b2lkIHNldEJhY2tlbmREaXNw
YXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2Vu
ZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9Ci0gICAgQmFja2VuZERpc3BhdGNo
ZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hl
ci5nZXQoKTsgfQotcHJpdmF0ZToKLSAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFj
a2VuZERpc3BhdGNoZXI7Ci19OwotCi0KLWNsYXNzIEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgot
ICAgIHZpcnR1YWwgfkFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoKSB7IH0KLSAg
ICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIGNh
bGxJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyBj
YWxsSWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxTeW5jKGxvbmcgY2FsbElkLCBpbnQgaW5fZGF0YWJh
c2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBleGVj
dXRlU1FMQXN5bmMobG9uZyBjYWxsSWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcm
IGluX3F1ZXJ5KSA9IDA7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotI2VuZGlm
IC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotIyMjIEVuZCBGaWxl
OiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRl
c3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJv
dG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNw
YWNlIEluc3BlY3RvciB7Ci0KLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCi0jaWYgRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi1jbGFzcyBBbHRlcm5hdGVEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVyOwotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQotCi1jbGFzcyBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxl
ciB7Ci1wdWJsaWM6Ci0gICAgLy8gTmFtZWQgYWZ0ZXIgcGFyYW1ldGVyICdwcmludENvbG9yJyB3
aGlsZSBnZW5lcmF0aW5nIGNvbW1hbmQvZXZlbnQgZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVy
blZhbHVlcy4KLSAgICBlbnVtIGNsYXNzIFByaW50Q29sb3IgewotICAgICAgICBDeWFuID0gMywK
LSAgICAgICAgTWFnZW50YSA9IDQsCi0gICAgICAgIFllbGxvdyA9IDUsCi0gICAgICAgIEJsYWNr
ID0gNiwKLSAgICB9OyAvLyBlbnVtIGNsYXNzIFByaW50Q29sb3IKLSAgICB2aXJ0dWFsIHZvaWQg
ZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhFcnJvclN0cmluZyYsIGludCBpbl9k
YXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxT
dHJpbmc+PiYgb3B0X291dF9jb2x1bW5OYW1lcywgT3B0aW9uYWw8U3RyaW5nPiYgb3B0X291dF9u
b3RlcywgT3B0aW9uYWw8ZG91YmxlPiYgb3B0X291dF90aW1lc3RhbXAsIE9wdGlvbmFsPEpTT046
Ok9iamVjdD4mIG9wdF9vdXRfdmFsdWVzLCBPcHRpb25hbDxKU09OOjpWYWx1ZT4mIG9wdF9vdXRf
cGF5bG9hZCwgT3B0aW9uYWw8aW50PiYgb3B0X291dF9kYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYgb3B0X291dF9zcWxFcnJvciwgSW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMqIG9wdF9vdXRfc2NyZWVuQ29s
b3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYgb3B0
X291dF9hbHRlcm5hdGVDb2xvcnMsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQ
cmludENvbG9yKiBvcHRfb3V0X3ByaW50Q29sb3IpID0gMDsKLSAgICBjbGFzcyBFeGVjdXRlU1FM
QXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrIDogcHVibGljIEJhY2tlbmREaXNwYXRj
aGVyOjpDYWxsYmFja0Jhc2UgewotICAgIHB1YmxpYzoKLSAgICAgICAgRXhlY3V0ZVNRTEFzeW5j
T3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjayhSZWY8QmFja2VuZERpc3BhdGNoZXI+JiYsIGlu
dCBpZCk7Ci0gICAgICAgIHZvaWQgc2VuZFN1Y2Nlc3MoUmVmUHRyPEpTT046OkFycmF5T2Y8U3Ry
aW5nPj4mJiBjb2x1bW5OYW1lcywgT3B0aW9uYWw8U3RyaW5nPiYgbm90ZXMsIE9wdGlvbmFsPGRv
dWJsZT4mIHRpbWVzdGFtcCwgT3B0aW9uYWw8SlNPTjo6T2JqZWN0PiYgdmFsdWVzLCBPcHRpb25h
bDxKU09OOjpWYWx1ZT4mIHBheWxvYWQsIE9wdGlvbmFsPGludD4mIGRhdGFiYXNlSWQsIFJlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiYgc3FsRXJyb3IsIE9wdGlv
bmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiBzY3JlZW5D
b2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiYg
YWx0ZXJuYXRlQ29sb3JzLCBPcHRpb25hbDxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxl
cjo6UHJpbnRDb2xvcj4gcHJpbnRDb2xvcik7Ci0gICAgfTsKLSAgICB2aXJ0dWFsIHZvaWQgZXhl
Y3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMoaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0
IFN0cmluZyYgaW5fcXVlcnksIFJlZjxFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVl
c0NhbGxiYWNrPiYmIGNhbGxiYWNrKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxT
eW5jKEVycm9yU3RyaW5nJiwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVl
cnksIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiBvdXRfY29sdW1uTmFtZXMsIFN0cmlu
Zyogb3V0X25vdGVzLCBkb3VibGUqIG91dF90aW1lc3RhbXAsIEpTT046Ok9iamVjdCogb3V0X3Zh
bHVlcywgSlNPTjo6VmFsdWUqIG91dF9wYXlsb2FkLCBpbnQqIG91dF9kYXRhYmFzZUlkLCBSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYgb3V0X3NxbEVycm9yLCBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4mIG91dF9hbHRl
cm5hdGVDb2xvcnMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3Jz
KiBvdXRfc2NyZWVuQ29sb3IsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmlu
dENvbG9yKiBvdXRfcHJpbnRDb2xvcikgPSAwOwotICAgIGNsYXNzIEV4ZWN1dGVTUUxBc3luY0Nh
bGxiYWNrIDogcHVibGljIEJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UgewotICAgIHB1
YmxpYzoKLSAgICAgICAgRXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2soUmVmPEJhY2tlbmREaXNwYXRj
aGVyPiYmLCBpbnQgaWQpOwotICAgICAgICB2b2lkIHNlbmRTdWNjZXNzKFJlZlB0cjxKU09OOjpB
cnJheU9mPFN0cmluZz4+JiYgY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgbm90ZXMsIGRvdWJs
ZSB0aW1lc3RhbXAsIEpTT046Ok9iamVjdCB2YWx1ZXMsIEpTT046OlZhbHVlIHBheWxvYWQsIGlu
dCBkYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9y
PiYmIHNxbEVycm9yLCBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9y
cyBzY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xv
ckxpc3Q+JiYgYWx0ZXJuYXRlQ29sb3JzLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxl
cjo6UHJpbnRDb2xvciBwcmludENvbG9yKTsKLSAgICB9OwotICAgIHZpcnR1YWwgdm9pZCBleGVj
dXRlU1FMQXN5bmMoaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnksIFJl
ZjxFeGVjdXRlU1FMQXN5bmNDYWxsYmFjaz4mJiBjYWxsYmFjaykgPSAwOwotcHJvdGVjdGVkOgot
ICAgIHZpcnR1YWwgfkRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7Ci19OwotCi1j
bGFzcyBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRh
bEJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPERhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIERhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwg
Y29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkgZmluYWw7
Ci1wcml2YXRlOgotICAgIHZvaWQgZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhs
b25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKLSAgICB2
b2lkIGV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVzdElkLCBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwotICAgIHZvaWQgZXhlY3V0ZVNRTFN5
bmMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0g
ICAgdm9pZCBleGVjdXRlU1FMQXN5bmMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+JiYgcGFyYW1ldGVycyk7Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCi1wdWJsaWM6Ci0gICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0
ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRl
cm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQotcHJpdmF0ZToKLSAgICBB
bHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKiBtX2FsdGVybmF0ZURpc3BhdGNoZXIg
eyBudWxscHRyIH07Ci0jZW5kaWYKLXByaXZhdGU6Ci0gICAgRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
Kik7Ci0gICAgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQgeyBudWxs
cHRyIH07Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVz
dEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3Bh
dGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdp
dGgtYXN5bmMtYXR0cmlidXRlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlz
cGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5k
Um91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvTmV2
ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNpZiBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSNpbmNsdWRlICJUZXN0QWx0ZXJu
YXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIEluc3BlY3RvciB7
Ci0KLURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+RGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXIoKSB7IH0KLQotUmVmPERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+IERh
dGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2Vu
ZERpc3BhdGNoZXIsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKLXsK
LSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKGJhY2tl
bmREaXNwYXRjaGVyLCBhZ2VudCkpOwotfQotCi1EYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0
Y2hlciwgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQotICAgIDogU3Vw
cGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCi0gICAgLCBtX2Fn
ZW50KGFnZW50KQotewotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hl
ckZvckRvbWFpbigiRGF0YWJhc2UiX3MsIHRoaXMpOwotfQotCi12b2lkIERhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhv
ZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQotewotICAgIFJlZjxEYXRhYmFzZUJhY2tl
bmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKLQotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+
IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRl
cnMpOwotCi0gICAgaWYgKG1ldGhvZCA9PSAiZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZh
bHVlcyIpCi0gICAgICAgIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMocmVxdWVz
dElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKLSAgICBlbHNlIGlmIChtZXRob2QgPT0gImV4ZWN1
dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzIikKLSAgICAgICAgZXhlY3V0ZVNRTEFzeW5j
T3B0aW9uYWxSZXR1cm5WYWx1ZXMocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKLSAg
ICBlbHNlIGlmIChtZXRob2QgPT0gImV4ZWN1dGVTUUxTeW5jIikKLSAgICAgICAgZXhlY3V0ZVNR
TFN5bmMocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKLSAgICBlbHNlIGlmIChtZXRo
b2QgPT0gImV4ZWN1dGVTUUxBc3luYyIpCi0gICAgICAgIGV4ZWN1dGVTUUxBc3luYyhyZXF1ZXN0
SWQsIFdURk1vdmUocGFyYW1ldGVycykpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90
Rm91bmQsICInRGF0YWJhc2UuIiArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKLX0KLQot
dm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0
dXJuVmFsdWVzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRl
cnMpCi17Ci0gICAgaW50IGluX2RhdGFiYXNlSWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRJ
bnRlZ2VyKHBhcmFtZXRlcnMuZ2V0KCksICJkYXRhYmFzZUlkIl9zLCBudWxscHRyKTsKLSAgICBT
dHJpbmcgaW5fcXVlcnkgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVy
cy5nZXQoKSwgInF1ZXJ5Il9zLCBudWxscHRyKTsKLSAgICBpZiAobV9iYWNrZW5kRGlzcGF0Y2hl
ci0+aGFzUHJvdG9jb2xFcnJvcnMoKSkgewotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5y
ZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCAiU29t
ZSBhcmd1bWVudHMgb2YgbWV0aG9kICdEYXRhYmFzZS5leGVjdXRlU1FMU3luY09wdGlvbmFsUmV0
dXJuVmFsdWVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiX3MpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0gICAgaWYg
KG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXIt
PmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMocmVxdWVzdElkLCBpbl9kYXRhYmFz
ZUlkLCBpbl9xdWVyeSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIEVy
cm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9i
amVjdDo6Y3JlYXRlKCk7Ci0gICAgUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gb3V0X2Nv
bHVtbk5hbWVzOwotICAgIE9wdGlvbmFsPFN0cmluZz4gb3V0X25vdGVzOwotICAgIE9wdGlvbmFs
PGRvdWJsZT4gb3V0X3RpbWVzdGFtcDsKLSAgICBPcHRpb25hbDxKU09OOjpPYmplY3Q+IG91dF92
YWx1ZXM7Ci0gICAgT3B0aW9uYWw8SlNPTjo6VmFsdWU+IG91dF9wYXlsb2FkOwotICAgIE9wdGlv
bmFsPGludD4gb3V0X2RhdGFiYXNlSWQ7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpFcnJvcj4gb3V0X3NxbEVycm9yOwotICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzIG91dF9zY3JlZW5Db2xvcjsKLSAgICBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4gb3V0X2FsdGVybmF0ZUNvbG9y
czsKLSAgICBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciBvdXRf
cHJpbnRDb2xvcjsKLSAgICBtX2FnZW50LT5leGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFs
dWVzKGVycm9yLCBpbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSwgb3V0X2NvbHVtbk5hbWVzLCBvdXRf
bm90ZXMsIG91dF90aW1lc3RhbXAsIG91dF92YWx1ZXMsIG91dF9wYXlsb2FkLCBvdXRfZGF0YWJh
c2VJZCwgb3V0X3NxbEVycm9yLCBvdXRfc2NyZWVuQ29sb3IsIG91dF9hbHRlcm5hdGVDb2xvcnMs
IG91dF9wcmludENvbG9yKTsKLQotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIHsKLSAgICAgICAg
aWYgKG91dF9jb2x1bW5OYW1lcykKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoImNvbHVt
bk5hbWVzIl9zLCBvdXRfY29sdW1uTmFtZXMpOwotICAgICAgICBpZiAob3V0X25vdGVzLmhhc1Zh
bHVlKCkpCi0gICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZygibm90ZXMiX3MsICpvdXRfbm90
ZXMpOwotICAgICAgICBpZiAob3V0X3RpbWVzdGFtcC5oYXNWYWx1ZSgpKQotICAgICAgICAgICAg
cmVzdWx0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgKm91dF90aW1lc3RhbXApOwotICAgICAg
ICBpZiAob3V0X3ZhbHVlcy5oYXNWYWx1ZSgpKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRPYmpl
Y3QoInZhbHVlcyJfcywgKm91dF92YWx1ZXMpOwotICAgICAgICBpZiAob3V0X3BheWxvYWQuaGFz
VmFsdWUoKSkKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsICpvdXRf
cGF5bG9hZCk7Ci0gICAgICAgIGlmIChvdXRfZGF0YWJhc2VJZC5oYXNWYWx1ZSgpKQotICAgICAg
ICAgICAgcmVzdWx0LT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCAqb3V0X2RhdGFiYXNlSWQp
OwotICAgICAgICBpZiAob3V0X3NxbEVycm9yKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRPYmpl
Y3QoInNxbEVycm9yIl9zLCBvdXRfc3FsRXJyb3IpOwotICAgICAgICBpZiAob3V0X3NjcmVlbkNv
bG9yLmhhc1ZhbHVlKCkpCi0gICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZygic2NyZWVuQ29s
b3IiX3MsICpvdXRfc2NyZWVuQ29sb3IpOwotICAgICAgICBpZiAob3V0X2FsdGVybmF0ZUNvbG9y
cykKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgb3V0
X2FsdGVybmF0ZUNvbG9ycyk7Ci0gICAgICAgIGlmIChvdXRfcHJpbnRDb2xvci5oYXNWYWx1ZSgp
KQotICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsICpvdXRfcHJp
bnRDb2xvcik7Ci0gICAgfQotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0gICAgICAgIG1fYmFj
a2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwg
ZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJv
dG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3Ip
KTsKLX0KLQotRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3lu
Y09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2s6OkV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0
dXJuVmFsdWVzQ2FsbGJhY2soUmVmPEJhY2tlbmREaXNwYXRjaGVyPiYmIGJhY2tlbmREaXNwYXRj
aGVyLCBpbnQgaWQpIDogQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZShXVEZNb3ZlKGJh
Y2tlbmREaXNwYXRjaGVyKSwgaWQpIHsgfQotCi12b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrOjpz
ZW5kU3VjY2VzcyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYmIGNvbHVtbk5hbWVzLCBP
cHRpb25hbDxTdHJpbmc+JiBub3RlcywgT3B0aW9uYWw8ZG91YmxlPiYgdGltZXN0YW1wLCBPcHRp
b25hbDxKU09OOjpPYmplY3Q+JiB2YWx1ZXMsIE9wdGlvbmFsPEpTT046OlZhbHVlPiYgcGF5bG9h
ZCwgT3B0aW9uYWw8aW50PiYgZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpFcnJvcj4mJiBzcWxFcnJvciwgT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4mJiBhbHRlcm5hdGVDb2xvcnMsIE9wdGlv
bmFsPERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yPiBwcmludENv
bG9yKQotewotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKTsKLSAgICBpZiAoY29sdW1uTmFtZXMpCi0gICAgICAgIGpzb25NZXNzYWdlLT5z
ZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIGNvbHVtbk5hbWVzKTsKLSAgICBpZiAobm90ZXMuaGFz
VmFsdWUoKSkKLSAgICAgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibm90ZXMiX3MsICpub3Rl
cyk7Ci0gICAgaWYgKHRpbWVzdGFtcC5oYXNWYWx1ZSgpKQotICAgICAgICBqc29uTWVzc2FnZS0+
c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICp0aW1lc3RhbXApOwotICAgIGlmICh2YWx1ZXMuaGFz
VmFsdWUoKSkKLSAgICAgICAganNvbk1lc3NhZ2UtPnNldE9iamVjdCgidmFsdWVzIl9zLCAqdmFs
dWVzKTsKLSAgICBpZiAocGF5bG9hZC5oYXNWYWx1ZSgpKQotICAgICAgICBqc29uTWVzc2FnZS0+
c2V0VmFsdWUoInBheWxvYWQiX3MsICpwYXlsb2FkKTsKLSAgICBpZiAoZGF0YWJhc2VJZC5oYXNW
YWx1ZSgpKQotICAgICAgICBqc29uTWVzc2FnZS0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywg
KmRhdGFiYXNlSWQpOwotICAgIGlmIChzcWxFcnJvcikKLSAgICAgICAganNvbk1lc3NhZ2UtPnNl
dE9iamVjdCgic3FsRXJyb3IiX3MsIHNxbEVycm9yKTsKLSAgICBpZiAoc2NyZWVuQ29sb3IuaGFz
VmFsdWUoKSkKLSAgICAgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3Ms
ICpzY3JlZW5Db2xvcik7Ci0gICAgaWYgKGFsdGVybmF0ZUNvbG9ycykKLSAgICAgICAganNvbk1l
c3NhZ2UtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIGFsdGVybmF0ZUNvbG9ycyk7Ci0g
ICAgaWYgKHByaW50Q29sb3IuaGFzVmFsdWUoKSkKLSAgICAgICAganNvbk1lc3NhZ2UtPnNldFN0
cmluZygicHJpbnRDb2xvciJfcywgKnByaW50Q29sb3IpOwotICAgIENhbGxiYWNrQmFzZTo6c2Vu
ZFN1Y2Nlc3MoV1RGTW92ZShqc29uTWVzc2FnZSkpOwotfQotCi12b2lkIERhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcmVx
dWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpCi17Ci0gICAgaW50IGlu
X2RhdGFiYXNlSWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRJbnRlZ2VyKHBhcmFtZXRlcnMu
Z2V0KCksICJkYXRhYmFzZUlkIl9zLCBudWxscHRyKTsKLSAgICBTdHJpbmcgaW5fcXVlcnkgPSBt
X2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgInF1ZXJ5Il9z
LCBudWxscHRyKTsKLSAgICBpZiAobV9iYWNrZW5kRGlzcGF0Y2hlci0+aGFzUHJvdG9jb2xFcnJv
cnMoKSkgewotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9y
KEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCAiU29tZSBhcmd1bWVudHMgb2YgbWV0
aG9kICdEYXRhYmFzZS5leGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcycgY2FuJ3Qg
YmUgcHJvY2Vzc2VkIl9zKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotI2lmIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotICAgIGlmIChtX2FsdGVybmF0ZURpc3Bh
dGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5leGVjdXRlU1FMQXN5bmNP
cHRpb25hbFJldHVyblZhbHVlcyhyZXF1ZXN0SWQsIGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5KTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAgUmVmPERhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0Nh
bGxiYWNrPiBjYWxsYmFjayA9IGFkb3B0UmVmKCpuZXcgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2sobV9i
YWNrZW5kRGlzcGF0Y2hlci5jb3B5UmVmKCksIHJlcXVlc3RJZCkpOwotICAgIG1fYWdlbnQtPmV4
ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5
LCBjYWxsYmFjay5jb3B5UmVmKCkpOwotCi19Ci0KLXZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlcjo6ZXhlY3V0ZVNRTFN5bmMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+
JiYgcGFyYW1ldGVycykKLXsKLSAgICBpbnQgaW5fZGF0YWJhc2VJZCA9IG1fYmFja2VuZERpc3Bh
dGNoZXItPmdldEludGVnZXIocGFyYW1ldGVycy5nZXQoKSwgImRhdGFiYXNlSWQiX3MsIG51bGxw
dHIpOwotICAgIFN0cmluZyBpbl9xdWVyeSA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmlu
ZyhwYXJhbWV0ZXJzLmdldCgpLCAicXVlcnkiX3MsIG51bGxwdHIpOwotICAgIGlmIChtX2JhY2tl
bmREaXNwYXRjaGVyLT5oYXNQcm90b2NvbEVycm9ycygpKSB7Ci0gICAgICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQ
YXJhbXMsICJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJ0RhdGFiYXNlLmV4ZWN1dGVTUUxTeW5j
JyBjYW4ndCBiZSBwcm9jZXNzZWQiX3MpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0jaWYg
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0gICAgaWYgKG1fYWx0ZXJu
YXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVT
UUxTeW5jKHJlcXVlc3RJZCwgaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnkpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNP
Tjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIFJlZlB0cjxK
U09OOjpBcnJheU9mPFN0cmluZz4+IG91dF9jb2x1bW5OYW1lczsKLSAgICBTdHJpbmcgb3V0X25v
dGVzOwotICAgIGRvdWJsZSBvdXRfdGltZXN0YW1wOwotICAgIEpTT046Ok9iamVjdCBvdXRfdmFs
dWVzOwotICAgIEpTT046OlZhbHVlIG91dF9wYXlsb2FkOwotICAgIGludCBvdXRfZGF0YWJhc2VJ
ZDsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBvdXRf
c3FsRXJyb3I7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xv
ckxpc3Q+IG91dF9hbHRlcm5hdGVDb2xvcnM7Ci0gICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0
YWJhc2U6OlByaW1hcnlDb2xvcnMgb3V0X3NjcmVlbkNvbG9yOwotICAgIERhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yIG91dF9wcmludENvbG9yOwotICAgIG1fYWdl
bnQtPmV4ZWN1dGVTUUxTeW5jKGVycm9yLCBpbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSwgb3V0X2Nv
bHVtbk5hbWVzLCAmb3V0X25vdGVzLCAmb3V0X3RpbWVzdGFtcCwgb3V0X3ZhbHVlcywgJm91dF9w
YXlsb2FkLCAmb3V0X2RhdGFiYXNlSWQsIG91dF9zcWxFcnJvciwgb3V0X2FsdGVybmF0ZUNvbG9y
cywgJm91dF9zY3JlZW5Db2xvciwgJm91dF9wcmludENvbG9yKTsKLQotICAgIGlmICghZXJyb3Iu
bGVuZ3RoKCkpIHsKLSAgICAgICAgcmVzdWx0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIG91
dF9jb2x1bW5OYW1lcyk7Ci0gICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJub3RlcyJfcywgb3V0
X25vdGVzKTsKLSAgICAgICAgcmVzdWx0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgb3V0X3Rp
bWVzdGFtcCk7Ci0gICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIG91dF92YWx1
ZXMpOwotICAgICAgICByZXN1bHQtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBvdXRfcGF5bG9hZCk7
Ci0gICAgICAgIHJlc3VsdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgb3V0X2RhdGFiYXNl
SWQpOwotICAgICAgICByZXN1bHQtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIG91dF9zcWxFcnJv
cik7Ci0gICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgb3V0X2Fs
dGVybmF0ZUNvbG9ycyk7Ci0gICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJf
cywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVl
KG91dF9zY3JlZW5Db2xvcikpOwotICAgICAgICByZXN1bHQtPnNldFN0cmluZygicHJpbnRDb2xv
ciJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZh
bHVlKG91dF9wcmludENvbG9yKSk7Ci0gICAgfQotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0g
ICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1v
dmUocmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdU
Rk1vdmUoZXJyb3IpKTsKLX0KLQotRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4
ZWN1dGVTUUxBc3luY0NhbGxiYWNrOjpFeGVjdXRlU1FMQXN5bmNDYWxsYmFjayhSZWY8QmFja2Vu
ZERpc3BhdGNoZXI+JiYgYmFja2VuZERpc3BhdGNoZXIsIGludCBpZCkgOiBCYWNrZW5kRGlzcGF0
Y2hlcjo6Q2FsbGJhY2tCYXNlKFdURk1vdmUoYmFja2VuZERpc3BhdGNoZXIpLCBpZCkgeyB9Ci0K
LXZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY0Nh
bGxiYWNrOjpzZW5kU3VjY2VzcyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYmIGNvbHVt
bk5hbWVzLCBjb25zdCBTdHJpbmcmIG5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBKU09OOjpPYmpl
Y3QgdmFsdWVzLCBKU09OOjpWYWx1ZSBwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mJiBzcWxFcnJvciwgSW5zcGVjdG9y
OjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYmIGFsdGVybmF0ZUNvbG9y
cywgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3IgcHJpbnRDb2xv
cikKLXsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6
Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgY29s
dW1uTmFtZXMpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBub3Rlcyk7
Ci0gICAganNvbk1lc3NhZ2UtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCB0aW1lc3RhbXApOwot
ICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoInZhbHVlcyJfcywgdmFsdWVzKTsKLSAgICBqc29u
TWVzc2FnZS0+c2V0VmFsdWUoInBheWxvYWQiX3MsIHBheWxvYWQpOwotICAgIGpzb25NZXNzYWdl
LT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCBkYXRhYmFzZUlkKTsKLSAgICBqc29uTWVzc2Fn
ZS0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgc3FsRXJyb3IpOwotICAgIGpzb25NZXNzYWdlLT5z
ZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVy
czo6Z2V0RW51bUNvbnN0YW50VmFsdWUoc2NyZWVuQ29sb3IpKTsKLSAgICBqc29uTWVzc2FnZS0+
c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgYWx0ZXJuYXRlQ29sb3JzKTsKLSAgICBqc29u
TWVzc2FnZS0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpU
ZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUocHJpbnRDb2xvcikpOwotICAgIENhbGxi
YWNrQmFzZTo6c2VuZFN1Y2Nlc3MoV1RGTW92ZShqc29uTWVzc2FnZSkpOwotfQotCi12b2lkIERh
dGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxBc3luYyhsb25nIHJlcXVlc3RJZCwg
UmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKQotewotICAgIGludCBpbl9kYXRhYmFz
ZUlkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0SW50ZWdlcihwYXJhbWV0ZXJzLmdldCgpLCAi
ZGF0YWJhc2VJZCJfcywgbnVsbHB0cik7Ci0gICAgU3RyaW5nIGluX3F1ZXJ5ID0gbV9iYWNrZW5k
RGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksICJxdWVyeSJfcywgbnVsbHB0
cik7Ci0gICAgaWYgKG1fYmFja2VuZERpc3BhdGNoZXItPmhhc1Byb3RvY29sRXJyb3JzKCkpIHsK
LSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5k
RGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnRGF0
YWJhc2UuZXhlY3V0ZVNRTEFzeW5jJyBjYW4ndCBiZSBwcm9jZXNzZWQiX3MpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCi0gICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0
ZURpc3BhdGNoZXItPmV4ZWN1dGVTUUxBc3luYyhyZXF1ZXN0SWQsIGluX2RhdGFiYXNlSWQsIGlu
X3F1ZXJ5KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAgUmVmPERhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNDYWxsYmFjaz4gY2Fs
bGJhY2sgPSBhZG9wdFJlZigqbmV3IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpF
eGVjdXRlU1FMQXN5bmNDYWxsYmFjayhtX2JhY2tlbmREaXNwYXRjaGVyLmNvcHlSZWYoKSwgcmVx
dWVzdElkKSk7Ci0gICAgbV9hZ2VudC0+ZXhlY3V0ZVNRTEFzeW5jKGluX2RhdGFiYXNlSWQsIGlu
X3F1ZXJ5LCBjYWxsYmFjay5jb3B5UmVmKCkpOwotCi19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9y
IHsKLQotY2xhc3MgRnJvbnRlbmRSb3V0ZXI7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgot
IyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
LQotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fz
c2VydGlvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi1uYW1lc3BhY2UgUHJv
dG9jb2wgewotCi0KLQotLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCi1uYW1lc3BhY2UgRGF0YWJh
c2UgewotY2xhc3MgRXJyb3I7Ci1lbnVtIGNsYXNzIFByaW1hcnlDb2xvcnM7Ci19IC8vIERhdGFi
YXNlCi0vLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCi0KLQotLy8gVHlwZWRlZnMuCi1u
YW1lc3BhY2UgRGF0YWJhc2UgewotLyogVW5pcXVlIGlkZW50aWZpZXIgb2YgRGF0YWJhc2Ugb2Jq
ZWN0LiAqLwotdHlwZWRlZiBpbnQgRGF0YWJhc2VJZDsKLXR5cGVkZWYgSlNPTjo6QXJyYXlPZjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gQ29sb3JMaXN0Owot
fSAvLyBEYXRhYmFzZQotLy8gRW5kIG9mIHR5cGVkZWZzLgotCi1uYW1lc3BhY2UgVGVzdEhlbHBl
cnMgewotCi1TdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpOwotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFsdWUpCi17
Ci0gICAgcmV0dXJuIGdldEVudW1Db25zdGFudFZhbHVlKHN0YXRpY19jYXN0PGludD4oZW51bVZh
bHVlKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCi0KLW5hbWVzcGFjZSBEYXRh
YmFzZSB7Ci0vKiAgKi8KLWVudW0gY2xhc3MgUHJpbWFyeUNvbG9ycyB7Ci0gICAgUmVkID0gMCwK
LSAgICBHcmVlbiA9IDEsCi0gICAgQmx1ZSA9IDIsCi19OyAvLyBlbnVtIGNsYXNzIFByaW1hcnlD
b2xvcnMKLS8qIERhdGFiYXNlIGVycm9yLiAqLwotY2xhc3MgRXJyb3IgOiBwdWJsaWMgSlNPTjo6
T2JqZWN0QmFzZSB7Ci1wdWJsaWM6Ci0gICAgZW51bSB7Ci0gICAgICAgIE5vRmllbGRzU2V0ID0g
MCwKLSAgICAgICAgTWVzc2FnZVNldCA9IDEgPDwgMCwKLSAgICAgICAgQ29kZVNldCA9IDEgPDwg
MSwKLSAgICAgICAgQWxsRmllbGRzU2V0ID0gKE1lc3NhZ2VTZXQgfCBDb2RlU2V0KQotICAgIH07
Ci0KLSAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+Ci0gICAgY2xhc3MgQnVpbGRlciB7Ci0gICAgcHJp
dmF0ZToKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7Ci0KLSAgICAgICAg
dGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RB
VEUgfCBTVEVQPio+KHRoaXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcihSZWY8LypF
cnJvciovSlNPTjo6T2JqZWN0PiYmIG9iamVjdCkKLSAgICAgICAgICAgIDogbV9yZXN1bHQoV1RG
TW92ZShvYmplY3QpKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFU
RSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKLSAg
ICAgICAgfQotICAgICAgICBmcmllbmQgY2xhc3MgRXJyb3I7Ci0gICAgcHVibGljOgotCi0gICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2FnZShjb25zdCBTdHJpbmcm
IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
TWVzc2FnZVNldCksIHByb3BlcnR5X21lc3NhZ2VfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAg
bV9yZXN1bHQtPnNldFN0cmluZygibWVzc2FnZSJfcywgdmFsdWUpOwotICAgICAgICAgICAgcmV0
dXJuIGNhc3RTdGF0ZTxNZXNzYWdlU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRl
cjxTVEFURSB8IENvZGVTZXQ+JiBzZXRDb2RlKGludCB2YWx1ZSkKLSAgICAgICAgewotICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENvZGVTZXQpLCBwcm9wZXJ0eV9jb2RlX2Fs
cmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2VyKCJjb2RlIl9zLCB2
YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvZGVTZXQ+KCk7Ci0gICAgICAg
IH0KLQotICAgICAgICBSZWY8RXJyb3I+IHJlbGVhc2UoKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVh
ZHkpOwotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEVycm9yKSA9PSBzaXplb2Yo
SlNPTjo6T2JqZWN0KSwgY2Fubm90X2Nhc3QpOwotCi0gICAgICAgICAgICBSZWY8SlNPTjo6T2Jq
ZWN0PiBqc29uUmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKLSAgICAgICAgICAg
IGF1dG8gcmVzdWx0ID0gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8RXJyb3I+Kj4oJmpz
b25SZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICB9
OwotCi0gICAgLyoKLSAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6Ci0gICAgICogUmVmPEVy
cm9yPiByZXN1bHQgPSBFcnJvcjo6Y3JlYXRlKCkKLSAgICAgKiAgICAgLnNldE1lc3NhZ2UoLi4u
KQotICAgICAqICAgICAuc2V0Q29kZSguLi4pCi0gICAgICogICAgIC5yZWxlYXNlKCk7Ci0gICAg
ICovCi0gICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCi0gICAgewotICAg
ICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7
Ci0gICAgfQotfTsKLQotfSAvLyBEYXRhYmFzZQotCi0KLQotbmFtZXNwYWNlIFRlc3RIZWxwZXJz
IHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgUHJvdG9jb2xFbnVtVHlwZT4KLU9wdGlvbmFsPFByb3Rv
Y29sRW51bVR5cGU+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZyhjb25zdCBTdHJpbmcmKTsKLQot
Ly8gRW51bXMgaW4gdGhlICdEYXRhYmFzZScgRG9tYWluCi10ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJ
bnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gcGFyc2VFbnVtVmFs
dWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3Jz
Pihjb25zdCBTdHJpbmcmKTsKLQotfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKLQotfSAvLyBu
YW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLW5hbWVzcGFj
ZSBXVEYgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Ci0KLS8v
IEhhc2ggZGVjbGFyYXRpb25zIGluIHRoZSAnRGF0YWJhc2UnIERvbWFpbgotdGVtcGxhdGU8Pgot
c3RydWN0IERlZmF1bHRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5
Q29sb3JzPiB7Ci0gICAgdHlwZWRlZiBJbnRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFi
YXNlOjpQcmltYXJ5Q29sb3JzPiBIYXNoOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sT2JqZWN0cy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21t
YW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0UHJv
dG9jb2xPYmplY3RzLmgiCi0KLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1uYW1lc3BhY2Ug
UHJvdG9jb2wgewotCi1uYW1lc3BhY2UgVGVzdEhlbHBlcnMgewotCi1zdGF0aWMgY29uc3QgY2hh
ciogY29uc3QgZW51bV9jb25zdGFudF92YWx1ZXNbXSA9IHsKLSAgICAicmVkIiwKLSAgICAiZ3Jl
ZW4iLAotICAgICJibHVlIiwKLSAgICAiY3lhbiIsCi0gICAgIm1hZ2VudGEiLAotICAgICJ5ZWxs
b3ciLAotICAgICJibGFjayIsCi19OwotCi1TdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50
IGNvZGUpIHsKLSAgICByZXR1cm4gZW51bV9jb25zdGFudF92YWx1ZXNbY29kZV07Ci19Ci0KLS8v
IEVudW1zIGluIHRoZSAnRGF0YWJhc2UnIERvbWFpbgotdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5z
cGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IHBhcnNlRW51bVZhbHVl
RnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4o
Y29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKLXsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90
IGNvbnN0YW50VmFsdWVzW10gPSB7Ci0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM6OlJlZCwKLSAgICAgICAgKHNpemVfdClJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9yczo6R3JlZW4sCi0gICAgICAgIChz
aXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM6OkJsdWUs
Ci0gICAgfTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDM7ICsraSkKLSAgICAgICAgaWYg
KHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ld
XSkKLSAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlBy
aW1hcnlDb2xvcnMpY29uc3RhbnRWYWx1ZXNbaV07Ci0KLSAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwotfQotCi0KLX0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCi0KLQotCi19IC8vIG5hbWVzcGFj
ZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFj
a2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21t
YW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0K
LUBwcm90b2NvbCBUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI7Ci0KLW5hbWVzcGFj
ZSBJbnNwZWN0b3IgewotCi0KLWNsYXNzIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIg
ewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIE9iakNJbnNwZWN0
b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWlu
SGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQotICAgIHZvaWQgZXhl
Y3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHJlcXVlc3RJZCwgaW50IGluX2Rh
dGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpIGZpbmFsOwotICAgIHZvaWQgZXhlY3V0
ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0SWQsIGludCBpbl9kYXRh
YmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KSBmaW5hbDsKLSAgICB2b2lkIGV4ZWN1dGVT
UUxTeW5jKGxvbmcgcmVxdWVzdElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBp
bl9xdWVyeSkgZmluYWw7Ci0gICAgdm9pZCBleGVjdXRlU1FMQXN5bmMobG9uZyByZXF1ZXN0SWQs
IGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KSBmaW5hbDsKLXByaXZh
dGU6Ci0gICAgUmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4+
IG1fZGVsZWdhdGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgotLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNp
bXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSAiVGVz
dFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9y
IHsKLQotdm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0
ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHJlcXVlc3RJZCwgaW50IGluX2RhdGFi
YXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpCi17Ci0gICAgaWYgKCFbbV9kZWxlZ2F0ZSBy
ZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXNXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6ZGF0YWJhc2VJZDpxdWVyeTop
XSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJl
cXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RhdGFiYXNlLmV4
ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMnIHdhcyBub3QgZm91bmQiX3MpOwotICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9y
KSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVx
dWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKLSAgICAgICAg
YmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICB9OwotCi0gICAg
aWQgc3VjY2Vzc0NhbGxiYWNrID0gXihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKipjb2x1bW5OYW1l
cywgTlNTdHJpbmcgKipub3RlcywgZG91YmxlICp0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9i
amVjdCAqKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqcGF5bG9hZCwgaW50ICpkYXRh
YmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqc3FsRXJyb3IsIFRlc3RQcm90b2Nv
bERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4q
LyAqKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09w
dGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvciAqcHJpbnRDb2xvcikgewotICAgICAgICBSZWY8
SlNPTjo6T2JqZWN0PiByZXN1bHRPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAg
ICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoY29sdW1uTmFt
ZXMsIEAiY29sdW1uTmFtZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BU
SU9OQUxfUEFSQU1FVEVSKG5vdGVzLCBAIm5vdGVzIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUih2YWx1ZXMsIEAidmFsdWVzIik7Ci0gICAgICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihwYXlsb2FkLCBAInBh
eWxvYWQiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1F
VEVSKHNxbEVycm9yLCBAInNxbEVycm9yIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
QkFEX09QVElPTkFMX1BBUkFNRVRFUihhbHRlcm5hdGVDb2xvcnMsIEAiYWx0ZXJuYXRlQ29sb3Jz
Iik7Ci0gICAgICAgIGlmIChjb2x1bW5OYW1lcykKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+
c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB0b0pTT05TdHJpbmdBcnJheSgqY29sdW1uTmFtZXMp
KTsKLSAgICAgICAgaWYgKG5vdGVzKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJp
bmcoIm5vdGVzIl9zLCAqbm90ZXMpOwotICAgICAgICBpZiAodGltZXN0YW1wKQotICAgICAgICAg
ICAgcmVzdWx0T2JqZWN0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgKnRpbWVzdGFtcCk7Ci0g
ICAgICAgIGlmICh2YWx1ZXMpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdCgi
dmFsdWVzIl9zLCBbKnZhbHVlcyB0b0pTT05PYmplY3RdKTsKLSAgICAgICAgaWYgKHBheWxvYWQp
Ci0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBbKnBheWxv
YWQgdG9KU09OT2JqZWN0XSk7Ci0gICAgICAgIGlmIChkYXRhYmFzZUlkKQotICAgICAgICAgICAg
cmVzdWx0T2JqZWN0LT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCAqZGF0YWJhc2VJZCk7Ci0g
ICAgICAgIGlmIChzcWxFcnJvcikKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0
KCJzcWxFcnJvciJfcywgWypzcWxFcnJvciB0b0pTT05PYmplY3RdKTsKLSAgICAgICAgaWYgKHNj
cmVlbkNvbG9yKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNv
bG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKCpzY3JlZW5Db2xvcikpOwotICAgICAgICBpZiAoYWx0
ZXJuYXRlQ29sb3JzKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJu
YXRlQ29sb3JzIl9zLCB0b0pTT05TdHJpbmdBcnJheSgqYWx0ZXJuYXRlQ29sb3JzKSk7Ci0gICAg
ICAgIGlmIChwcmludENvbG9yKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmco
InByaW50Q29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcoKnByaW50Q29sb3IpKTsKLSAgICAgICAg
YmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1
bHRPYmplY3QpLCBmYWxzZSk7Ci0gICAgfTsKLQotICAgIGludCBvX2luX2RhdGFiYXNlSWQgPSBp
bl9kYXRhYmFzZUlkOwotICAgIE5TU3RyaW5nICpvX2luX3F1ZXJ5ID0gaW5fcXVlcnk7Ci0KLSAg
ICBbbV9kZWxlZ2F0ZSBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzV2l0aEVycm9y
Q2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrIGRh
dGFiYXNlSWQ6b19pbl9kYXRhYmFzZUlkIHF1ZXJ5Om9faW5fcXVlcnldOwotfQotCi12b2lkIE9i
akNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMQXN5bmNPcHRp
b25hbFJldHVyblZhbHVlcyhsb25nIHJlcXVlc3RJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0
IFN0cmluZyYgaW5fcXVlcnkpCi17Ci0gICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2Vs
ZWN0b3I6QHNlbGVjdG9yKGV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzV2l0aEVy
cm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOmRhdGFiYXNlSWQ6cXVlcnk6KV0pIHsKLSAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJh
Y2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS5leGVjdXRlU1FMQXN5
bmNPcHRpb25hbFJldHVyblZhbHVlcycgd2FzIG5vdCBmb3VuZCJfcyk7Ci0gICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJh
Y2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwotICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgIH07Ci0KLSAgICBpZCBzdWNjZXNz
Q2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmNvbHVtbk5hbWVzLCBOU1N0cmlu
ZyAqKm5vdGVzLCBkb3VibGUgKnRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqdmFs
dWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipwYXlsb2FkLCBpbnQgKmRhdGFiYXNlSWQsIFRl
c3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQ
cmltYXJ5Q29sb3JzICpzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICoqYWx0ZXJu
YXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0
dXJuVmFsdWVzUHJpbnRDb2xvciAqcHJpbnRDb2xvcikgewotICAgICAgICBSZWY8SlNPTjo6T2Jq
ZWN0PiByZXN1bHRPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgICAgICBUSFJP
V19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoY29sdW1uTmFtZXMsIEAiY29s
dW1uTmFtZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFS
QU1FVEVSKG5vdGVzLCBAIm5vdGVzIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFE
X09QVElPTkFMX1BBUkFNRVRFUih2YWx1ZXMsIEAidmFsdWVzIik7Ci0gICAgICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihwYXlsb2FkLCBAInBheWxvYWQiKTsK
LSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHNxbEVy
cm9yLCBAInNxbEVycm9yIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElP
TkFMX1BBUkFNRVRFUihhbHRlcm5hdGVDb2xvcnMsIEAiYWx0ZXJuYXRlQ29sb3JzIik7Ci0gICAg
ICAgIGlmIChjb2x1bW5OYW1lcykKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXko
ImNvbHVtbk5hbWVzIl9zLCB0b0pTT05TdHJpbmdBcnJheSgqY29sdW1uTmFtZXMpKTsKLSAgICAg
ICAgaWYgKG5vdGVzKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoIm5vdGVz
Il9zLCAqbm90ZXMpOwotICAgICAgICBpZiAodGltZXN0YW1wKQotICAgICAgICAgICAgcmVzdWx0
T2JqZWN0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgKnRpbWVzdGFtcCk7Ci0gICAgICAgIGlm
ICh2YWx1ZXMpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdCgidmFsdWVzIl9z
LCBbKnZhbHVlcyB0b0pTT05PYmplY3RdKTsKLSAgICAgICAgaWYgKHBheWxvYWQpCi0gICAgICAg
ICAgICByZXN1bHRPYmplY3QtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBbKnBheWxvYWQgdG9KU09O
T2JqZWN0XSk7Ci0gICAgICAgIGlmIChkYXRhYmFzZUlkKQotICAgICAgICAgICAgcmVzdWx0T2Jq
ZWN0LT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCAqZGF0YWJhc2VJZCk7Ci0gICAgICAgIGlm
IChzcWxFcnJvcikKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KCJzcWxFcnJv
ciJfcywgWypzcWxFcnJvciB0b0pTT05PYmplY3RdKTsKLSAgICAgICAgaWYgKHNjcmVlbkNvbG9y
KQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCB0
b1Byb3RvY29sU3RyaW5nKCpzY3JlZW5Db2xvcikpOwotICAgICAgICBpZiAoYWx0ZXJuYXRlQ29s
b3JzKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3Jz
Il9zLCB0b0pTT05TdHJpbmdBcnJheSgqYWx0ZXJuYXRlQ29sb3JzKSk7Ci0gICAgICAgIGlmIChw
cmludENvbG9yKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInByaW50Q29s
b3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcoKnByaW50Q29sb3IpKTsKLSAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHRPYmplY3Qp
LCBmYWxzZSk7Ci0gICAgfTsKLQotICAgIGludCBvX2luX2RhdGFiYXNlSWQgPSBpbl9kYXRhYmFz
ZUlkOwotICAgIE5TU3RyaW5nICpvX2luX3F1ZXJ5ID0gaW5fcXVlcnk7Ci0KLSAgICBbbV9kZWxl
Z2F0ZSBleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1dpdGhFcnJvckNhbGxiYWNr
OmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjayBkYXRhYmFzZUlk
Om9faW5fZGF0YWJhc2VJZCBxdWVyeTpvX2luX3F1ZXJ5XTsKLX0KLQotdm9pZCBPYmpDSW5zcGVj
dG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTFN5bmMobG9uZyByZXF1ZXN0
SWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KQotewotICAgIGlm
ICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihleGVjdXRlU1FMU3lu
Y1dpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazpkYXRhYmFzZUlkOnF1ZXJ5OildKSB7
Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVz
dElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRGF0YWJhc2UuZXhlY3V0
ZVNRTFN5bmMnIHdhcyBub3QgZm91bmQiX3MpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigp
LT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWQg
ZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hl
cjo6U2VydmVyRXJyb3IsIGVycm9yKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2Vu
ZFBlbmRpbmdFcnJvcnMoKTsKLSAgICB9OwotCi0gICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihO
U0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqbm90ZXMsIGRvdWJs
ZSB0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqdmFsdWVzLCBSV0lQcm90b2NvbEpT
T05PYmplY3QgKnBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVy
cm9yICpzcWxFcnJvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICphbHRlcm5hdGVDb2xvcnMsIFRl
c3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyBzY3JlZW5Db2xvciwgVGVzdFByb3RvY29s
RGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3IgcHJpbnRDb2xvcikgewotICAgICAgICBS
ZWY8SlNPTjo6T2JqZWN0PiByZXN1bHRPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwot
ICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihjb2x1bW5OYW1l
cywgQCJjb2x1bW5OYW1lcyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVE
X1BBUkFNRVRFUihub3RlcywgQCJub3RlcyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9S
X1JFUVVJUkVEX1BBUkFNRVRFUih2YWx1ZXMsIEAidmFsdWVzIik7Ci0gICAgICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHBheWxvYWQsIEAicGF5bG9hZCIpOwotICAg
ICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihzcWxFcnJvciwgQCJz
cWxFcnJvciIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRF
UihhbHRlcm5hdGVDb2xvcnMsIEAiYWx0ZXJuYXRlQ29sb3JzIik7Ci0gICAgICAgIHJlc3VsdE9i
amVjdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB0b0pTT05TdHJpbmdBcnJheShjb2x1bW5O
YW1lcykpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygibm90ZXMiX3MsIG5vdGVz
KTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgdGltZXN0
YW1wKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgW3ZhbHVl
cyB0b0pTT05PYmplY3RdKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRWYWx1ZSgicGF5bG9h
ZCJfcywgW3BheWxvYWQgdG9KU09OT2JqZWN0XSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0
SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgZGF0YWJhc2VJZCk7Ci0gICAgICAgIHJlc3VsdE9iamVj
dC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgW3NxbEVycm9yIHRvSlNPTk9iamVjdF0pOwotICAg
ICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIHRvSlNPTlN0
cmluZ0FycmF5KGFsdGVybmF0ZUNvbG9ycykpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0
cmluZygic2NyZWVuQ29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcoc2NyZWVuQ29sb3IpKTsKLSAg
ICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsIHRvUHJvdG9jb2xT
dHJpbmcocHJpbnRDb2xvcikpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVz
cG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdE9iamVjdCksIGZhbHNlKTsKLSAgICB9Owot
Ci0gICAgaW50IG9faW5fZGF0YWJhc2VJZCA9IGluX2RhdGFiYXNlSWQ7Ci0gICAgTlNTdHJpbmcg
Km9faW5fcXVlcnkgPSBpbl9xdWVyeTsKLQotICAgIFttX2RlbGVnYXRlIGV4ZWN1dGVTUUxTeW5j
V2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0Nh
bGxiYWNrIGRhdGFiYXNlSWQ6b19pbl9kYXRhYmFzZUlkIHF1ZXJ5Om9faW5fcXVlcnldOwotfQot
Ci12b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FM
QXN5bmMobG9uZyByZXF1ZXN0SWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGlu
X3F1ZXJ5KQotewotICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxl
Y3RvcihleGVjdXRlU1FMQXN5bmNXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6ZGF0
YWJhc2VJZDpxdWVyeTopXSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQ
cm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5k
LCAiJ0RhdGFiYXNlLmV4ZWN1dGVTUUxBc3luYycgd2FzIG5vdCBmb3VuZCJfcyk7Ci0gICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsK
LSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0
SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwotICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgIH07Ci0KLSAgICBpZCBz
dWNjZXNzQ2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqY29sdW1uTmFtZXMsIE5T
U3RyaW5nICpub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICp2
YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQsIFRl
c3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVBy
aW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqYWx0ZXJuYXRl
Q29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3IgcHJp
bnRDb2xvcikgewotICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHRPYmplY3QgPSBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVE
X1BBUkFNRVRFUihjb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOwotICAgICAgICBUSFJPV19F
WENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihub3RlcywgQCJub3RlcyIpOwotICAgICAg
ICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUih2YWx1ZXMsIEAidmFsdWVz
Iik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHBheWxv
YWQsIEAicGF5bG9hZCIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BB
UkFNRVRFUihzcWxFcnJvciwgQCJzcWxFcnJvciIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05f
Rk9SX1JFUVVJUkVEX1BBUkFNRVRFUihhbHRlcm5hdGVDb2xvcnMsIEAiYWx0ZXJuYXRlQ29sb3Jz
Iik7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB0b0pT
T05TdHJpbmdBcnJheShjb2x1bW5OYW1lcykpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0
cmluZygibm90ZXMiX3MsIG5vdGVzKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXREb3VibGUo
InRpbWVzdGFtcCJfcywgdGltZXN0YW1wKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmpl
Y3QoInZhbHVlcyJfcywgW3ZhbHVlcyB0b0pTT05PYmplY3RdKTsKLSAgICAgICAgcmVzdWx0T2Jq
ZWN0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgW3BheWxvYWQgdG9KU09OT2JqZWN0XSk7Ci0gICAg
ICAgIHJlc3VsdE9iamVjdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgZGF0YWJhc2VJZCk7
Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgW3NxbEVycm9y
IHRvSlNPTk9iamVjdF0pOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygic2NyZWVu
Q29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcoc2NyZWVuQ29sb3IpKTsKLSAgICAgICAgcmVzdWx0
T2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCB0b0pTT05TdHJpbmdBcnJheShh
bHRlcm5hdGVDb2xvcnMpKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInByaW50
Q29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcocHJpbnRDb2xvcikpOwotICAgICAgICBiYWNrZW5k
RGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdE9iamVj
dCksIGZhbHNlKTsKLSAgICB9OwotCi0gICAgaW50IG9faW5fZGF0YWJhc2VJZCA9IGluX2RhdGFi
YXNlSWQ7Ci0gICAgTlNTdHJpbmcgKm9faW5fcXVlcnkgPSBpbl9xdWVyeTsKLQotICAgIFttX2Rl
bGVnYXRlIGV4ZWN1dGVTUUxBc3luY1dpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3Vj
Y2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjayBkYXRhYmFzZUlkOm9faW5fZGF0YWJhc2VJZCBx
dWVyeTpvX2luX3F1ZXJ5XTsKLX0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9y
L1Rlc3RQcm90b2NvbC5oPgotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIp
KSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0Ci1AcHJv
cGVydHkgKG5vbmF0b21pYywgcmV0YWluLCBzZXR0ZXI9c2V0RGF0YWJhc2VIYW5kbGVyOikgaWQ8
VGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyPiBkYXRhYmFzZUhhbmRsZXI7Ci1AZW5k
Ci0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90
b2NvbENvbmZpZ3VyYXRpb24uaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIK
LSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KLSNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW1w
b3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLQotdXNp
bmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENv
bmZpZ3VyYXRpb24KLXsKLSAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250
cm9sbGVyOwotICAgIGlkPFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4gX2RhdGFi
YXNlSGFuZGxlcjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVn
bWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtz
dXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNT
RVJUKGNvbnRyb2xsZXIpOwotICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1
cm4gc2VsZjsKLX0KLQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgW19kYXRhYmFzZUhhbmRsZXIg
cmVsZWFzZV07Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi0tICh2b2lkKXNldERhdGFiYXNl
SGFuZGxlcjooaWQ8VGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyPiloYW5kbGVyCi17
Ci0gICAgaWYgKGhhbmRsZXIgPT0gX2RhdGFiYXNlSGFuZGxlcikKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgW19kYXRhYmFzZUhhbmRsZXIgcmVsZWFzZV07Ci0gICAgX2RhdGFiYXNlSGFuZGxlciA9
IFtoYW5kbGVyIHJldGFpbl07Ci0KLSAgICBhdXRvIGFsdGVybmF0ZURpc3BhdGNoZXIgPSBtYWtl
VW5pcXVlPE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPihoYW5kbGVyKTsK
LSAgICBhdXRvIGFsdGVybmF0ZUFnZW50ID0gbWFrZVVuaXF1ZTxBbHRlcm5hdGVEaXNwYXRjaGFi
bGVBZ2VudDxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyLCBBbHRlcm5hdGVEYXRhYmFzZUJhY2tl
bmREaXNwYXRjaGVyPj4oIkRhdGFiYXNlIl9zLCAqX2NvbnRyb2xsZXIsIFdURk1vdmUoYWx0ZXJu
YXRlRGlzcGF0Y2hlcikpOwotICAgIF9jb250cm9sbGVyLT5hcHBlbmRFeHRyYUFnZW50KFdURk1v
dmUoYWx0ZXJuYXRlQWdlbnQpKTsKLX0KLQotLSAoaWQ8VGVzdFByb3RvY29sRGF0YWJhc2VEb21h
aW5IYW5kbGVyPilkYXRhYmFzZUhhbmRsZXIKLXsKLSAgICByZXR1cm4gX2RhdGFiYXNlSGFuZGxl
cjsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
bi5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0
cmlidXRlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBu
YW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnRE
aXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQg
PEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJv
dG9jb2xKU09OT2JqZWN0Lmg+Ci0KLQotQGNsYXNzIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I7
Ci0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbFBsYXRmb3JtKSB7Ci0g
ICAgVGVzdFByb3RvY29sUGxhdGZvcm1BbGwsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5l
cmljLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TLAotICAgIFRlc3RQcm90b2NvbFBsYXRm
b3JtTWFjT1MsCi19OwotCi0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2Nv
bERhdGFiYXNlUHJpbWFyeUNvbG9ycykgewotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFy
eUNvbG9yc1JlZCwKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNHcmVlbiwK
LSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNCbHVlLAotfTsKLQotdHlwZWRl
ZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09w
dGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvcikgewotICAgIFRlc3RQcm90b2NvbERhdGFiYXNl
RXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JDeWFuLAotICAgIFRl
c3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50
Q29sb3JNYWdlbnRhLAotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRp
b25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JZZWxsb3csCi0gICAgVGVzdFByb3RvY29sRGF0YWJh
c2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvckJsYWNrLAotfTsK
LQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRl
U1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3IpIHsKLSAgICBUZXN0UHJvdG9j
b2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvckN5
YW4sCi0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVy
blZhbHVlc1ByaW50Q29sb3JNYWdlbnRhLAotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0
ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yWWVsbG93LAotICAgIFRlc3RQ
cm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENv
bG9yQmxhY2ssCi19OwotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xE
YXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvcikgewotICAgIFRlc3RQcm90b2NvbERhdGFi
YXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yQ3lhbiwKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFz
ZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvck1hZ2VudGEsCi0gICAgVGVzdFByb3RvY29sRGF0YWJh
c2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3JZZWxsb3csCi0gICAgVGVzdFByb3RvY29sRGF0YWJh
c2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3JCbGFjaywKLX07Ci0KLXR5cGVkZWYgTlNfRU5VTShO
U0ludGVnZXIsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvcikg
ewotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvckN5YW4s
Ci0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yTWFnZW50
YSwKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JZZWxs
b3csCi0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yQmxh
Y2ssCi19OwotCi0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGlu
dGVyZmFjZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIDogUldJUHJvdG9jb2xKU09OT2JqZWN0
Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcg
KiwgaWQ+ICopcGF5bG9hZDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0
OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OwotLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlIGNvZGU6KGludCljb2RlOwotLyogcmVx
dWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICptZXNzYWdlOwot
LyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgaW50IGNvZGU7Ci1A
ZW5kCi0KLUBwcm90b2NvbCBUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXIgPE5TT2Jq
ZWN0PgotQG9wdGlvbmFsCi0tICh2b2lkKWV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1
ZXNXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJh
Y2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmNvbHVt
bk5hbWVzLCBOU1N0cmluZyAqKm5vdGVzLCBkb3VibGUgKnRpbWVzdGFtcCwgUldJUHJvdG9jb2xK
U09OT2JqZWN0ICoqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipwYXlsb2FkLCBpbnQg
KmRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipzcWxFcnJvciwgVGVzdFBy
b3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzICpzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3Ry
aW5nPiovICoqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxT
eW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yICpwcmludENvbG9yKSlzdWNjZXNzQ2Fs
bGJhY2sgZGF0YWJhc2VJZDooaW50KWRhdGFiYXNlSWQgcXVlcnk6KE5TU3RyaW5nICopcXVlcnk7
Ci0tICh2b2lkKWV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzV2l0aEVycm9yQ2Fs
bGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxs
YmFjazoodm9pZCheKShOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKipjb2x1bW5OYW1lcywgTlNTdHJp
bmcgKipub3RlcywgZG91YmxlICp0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnZh
bHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqcGF5bG9hZCwgaW50ICpkYXRhYmFzZUlkLCBU
ZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqc3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNl
UHJpbWFyeUNvbG9ycyAqc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmFsdGVy
bmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJl
dHVyblZhbHVlc1ByaW50Q29sb3IgKnByaW50Q29sb3IpKXN1Y2Nlc3NDYWxsYmFjayBkYXRhYmFz
ZUlkOihpbnQpZGF0YWJhc2VJZCBxdWVyeTooTlNTdHJpbmcgKilxdWVyeTsKLS0gKHZvaWQpZXhl
Y3V0ZVNRTFN5bmNXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVy
cm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0cmluZz4q
LyAqY29sdW1uTmFtZXMsIE5TU3RyaW5nICpub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUldJUHJv
dG9jb2xKU09OT2JqZWN0ICp2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5bG9hZCwg
aW50IGRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKnNxbEVycm9yLCBOU0Fy
cmF5Lyo8TlNTdHJpbmc+Ki8gKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VQ
cmltYXJ5Q29sb3JzIHNjcmVlbkNvbG9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxT
eW5jUHJpbnRDb2xvciBwcmludENvbG9yKSlzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDooaW50
KWRhdGFiYXNlSWQgcXVlcnk6KE5TU3RyaW5nICopcXVlcnk7Ci0tICh2b2lkKWV4ZWN1dGVTUUxB
c3luY1dpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxs
YmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoTlNBcnJheS8qPE5TU3RyaW5nPiovICpjb2x1
bW5OYW1lcywgTlNTdHJpbmcgKm5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSV0lQcm90b2NvbEpT
T05PYmplY3QgKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkLCBpbnQgZGF0
YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqc3FsRXJyb3IsIFRlc3RQcm90b2Nv
bERhdGFiYXNlUHJpbWFyeUNvbG9ycyBzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiov
ICphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJp
bnRDb2xvciBwcmludENvbG9yKSlzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDooaW50KWRhdGFi
YXNlSWQgcXVlcnk6KE5TU3RyaW5nICopcXVlcnk7Ci1AZW5kCi0KLQotCi0KLSNpbXBvcnQgPFdl
Ykluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4KLQotIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
SW50ZXJuYWwuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdp
dGgtYXN5bmMtYXR0cmlidXRlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2xKU09OT2JqZWN0UHJpdmF0ZS5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFi
bGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi0K
LQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgotLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wu
aCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4K
LQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlw
ZT4KLU9wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpOwotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29s
UGxhdGZvcm0gdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJv
dG9jb2xQbGF0Zm9ybUFsbDoKLSAgICAgICAgcmV0dXJuICJhbGwiX3M7Ci0gICAgY2FzZSBUZXN0
UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM6Ci0gICAgICAgIHJldHVybiAiZ2VuZXJpYyJfczsKLSAg
ICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOgotICAgICAgICByZXR1cm4gImlvcyJfczsK
LSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M6Ci0gICAgICAgIHJldHVybiAibWFj
b3MiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3Rv
Y29sUGxhdGZvcm0+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewot
ICAgIGlmICh2YWx1ZSA9PSAiYWxsIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRm
b3JtQWxsOwotICAgIGlmICh2YWx1ZSA9PSAiZ2VuZXJpYyIpCi0gICAgICAgIHJldHVybiBUZXN0
UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM7Ci0gICAgaWYgKHZhbHVlID09ICJpb3MiKQotICAgICAg
ICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1JT1M7Ci0gICAgaWYgKHZhbHVlID09ICJtYWNv
cyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOwotICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7Ci19Ci0KLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRl
c3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFs
dWUpIHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc1JlZDoKLSAg
ICAgICAgcmV0dXJuICJyZWQiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1h
cnlDb2xvcnNHcmVlbjoKLSAgICAgICAgcmV0dXJuICJncmVlbiJfczsKLSAgICBjYXNlIFRlc3RQ
cm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc0JsdWU6Ci0gICAgICAgIHJldHVybiAiYmx1ZSJf
czsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xE
YXRhYmFzZVByaW1hcnlDb2xvcnM+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZh
bHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAicmVkIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90
b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc1JlZDsKLSAgICBpZiAodmFsdWUgPT0gImdyZWVuIikK
LSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc0dyZWVuOwot
ICAgIGlmICh2YWx1ZSA9PSAiYmx1ZSIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRh
YmFzZVByaW1hcnlDb2xvcnNCbHVlOwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLWlu
bGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVT
UUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yIHZhbHVlKQotewotICAgIHN3aXRj
aCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09w
dGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvckN5YW46Ci0gICAgICAgIHJldHVybiAiY3lhbiJf
czsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJl
dHVyblZhbHVlc1ByaW50Q29sb3JNYWdlbnRhOgotICAgICAgICByZXR1cm4gIm1hZ2VudGEiX3M7
Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1
cm5WYWx1ZXNQcmludENvbG9yWWVsbG93OgotICAgICAgICByZXR1cm4gInllbGxvdyJfczsKLSAg
ICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZh
bHVlc1ByaW50Q29sb3JCbGFjazoKLSAgICAgICAgcmV0dXJuICJibGFjayJfczsKLSAgICB9Ci19
Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yPiBmcm9tUHJvdG9jb2xTdHJp
bmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gImN5YW4iKQotICAg
ICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0
dXJuVmFsdWVzUHJpbnRDb2xvckN5YW47Ci0gICAgaWYgKHZhbHVlID09ICJtYWdlbnRhIikKLSAg
ICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJl
dHVyblZhbHVlc1ByaW50Q29sb3JNYWdlbnRhOwotICAgIGlmICh2YWx1ZSA9PSAieWVsbG93IikK
LSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25h
bFJldHVyblZhbHVlc1ByaW50Q29sb3JZZWxsb3c7Ci0gICAgaWYgKHZhbHVlID09ICJibGFjayIp
Ci0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXNQcmludENvbG9yQmxhY2s7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
LX0KLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbERhdGFiYXNl
RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yIHZhbHVlKQotewot
ICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRl
U1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JDeWFuOgotICAgICAgICByZXR1
cm4gImN5YW4iX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3lu
Y09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvck1hZ2VudGE6Ci0gICAgICAgIHJldHVybiAi
bWFnZW50YSJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5j
T3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yWWVsbG93OgotICAgICAgICByZXR1cm4gInll
bGxvdyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0
aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yQmxhY2s6Ci0gICAgICAgIHJldHVybiAiYmxhY2si
X3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29s
RGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3I+IGZy
b21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9
PSAiY3lhbiIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxB
c3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvckN5YW47Ci0gICAgaWYgKHZhbHVlID09
ICJtYWdlbnRhIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNR
TEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yTWFnZW50YTsKLSAgICBpZiAodmFs
dWUgPT0gInllbGxvdyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvclllbGxvdzsKLSAgICBpZiAo
dmFsdWUgPT0gImJsYWNrIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhl
Y3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yQmxhY2s7Ci0gICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRl
c3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yIHZhbHVlKQotewotICAg
IHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FM
U3luY1ByaW50Q29sb3JDeWFuOgotICAgICAgICByZXR1cm4gImN5YW4iX3M7Ci0gICAgY2FzZSBU
ZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvck1hZ2VudGE6Ci0gICAg
ICAgIHJldHVybiAibWFnZW50YSJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhl
Y3V0ZVNRTFN5bmNQcmludENvbG9yWWVsbG93OgotICAgICAgICByZXR1cm4gInllbGxvdyJfczsK
LSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yQmxh
Y2s6Ci0gICAgICAgIHJldHVybiAiYmxhY2siX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1p
bmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29s
b3I+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2
YWx1ZSA9PSAiY3lhbiIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVTUUxTeW5jUHJpbnRDb2xvckN5YW47Ci0gICAgaWYgKHZhbHVlID09ICJtYWdlbnRhIikKLSAg
ICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9y
TWFnZW50YTsKLSAgICBpZiAodmFsdWUgPT0gInllbGxvdyIpCi0gICAgICAgIHJldHVybiBUZXN0
UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvclllbGxvdzsKLSAgICBpZiAo
dmFsdWUgPT0gImJsYWNrIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhl
Y3V0ZVNRTFN5bmNQcmludENvbG9yQmxhY2s7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0K
LQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbERhdGFiYXNlRXhl
Y3V0ZVNRTEFzeW5jUHJpbnRDb2xvciB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAg
ICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvckN5YW46
Ci0gICAgICAgIHJldHVybiAiY3lhbiJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNl
RXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvck1hZ2VudGE6Ci0gICAgICAgIHJldHVybiAibWFnZW50
YSJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRD
b2xvclllbGxvdzoKLSAgICAgICAgcmV0dXJuICJ5ZWxsb3ciX3M7Ci0gICAgY2FzZSBUZXN0UHJv
dG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JCbGFjazoKLSAgICAgICAgcmV0
dXJuICJibGFjayJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxU
ZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3I+IGZyb21Qcm90b2Nv
bFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiY3lhbiIp
Ci0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50
Q29sb3JDeWFuOwotICAgIGlmICh2YWx1ZSA9PSAibWFnZW50YSIpCi0gICAgICAgIHJldHVybiBU
ZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JNYWdlbnRhOwotICAg
IGlmICh2YWx1ZSA9PSAieWVsbG93IikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFi
YXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvclllbGxvdzsKLSAgICBpZiAodmFsdWUgPT0gImJs
YWNrIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5j
UHJpbnRDb2xvckJsYWNrOwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0K
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0
dHJpYnV0ZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotCi0jaW1wb3J0ICJUZXN0
UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKLSNpbXBvcnQg
PFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0KLXVzaW5nIG5h
bWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zIChEYXRhYmFzZURvbWFpbikKLQotKyAodm9pZClfcGFyc2VEYXRhYmFzZUlkOihOU051bWJl
ciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLSsgKHZvaWQpX3BhcnNlUHJp
bWFyeUNvbG9yczooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7
Ci0rICh2b2lkKV9wYXJzZUNvbG9yTGlzdDooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKW91dFZh
bHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotKyAodm9pZClfcGFyc2VFcnJvcjooVGVzdFBy
b3RvY29sRGF0YWJhc2VFcnJvciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsK
LQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChE
YXRhYmFzZURvbWFpbikKLQotKyAodm9pZClfcGFyc2VEYXRhYmFzZUlkOihOU051bWJlciAqKilv
dXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfQkFEX1RZUEUocGF5bG9hZCwgW05TTnVtYmVyIGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0g
KE5TTnVtYmVyICopcGF5bG9hZDsKLX0KLQotKyAodm9pZClfcGFyc2VQcmltYXJ5Q29sb3JzOihO
U051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TU3RyaW5nIGNsYXNzXSk7Ci0gICAg
T3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzPiByZXN1bHQgPSBJbnNw
ZWN0b3I6OmZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xv
cnM+KHBheWxvYWQpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX0VOVU1fVkFMVUUocmVz
dWx0LCBAIlByaW1hcnlDb2xvcnMiKTsKLSAgICAqb3V0VmFsdWUgPSBAKHJlc3VsdC52YWx1ZSgp
KTsKLX0KLQotKyAodm9pZClfcGFyc2VDb2xvckxpc3Q6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAq
KilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TQXJyYXkvKjxOU1N0cmluZz4qLyBjbGFzc10pOwot
ICAgICpvdXRWYWx1ZSA9IChOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilwYXlsb2FkOwotfQotCi0r
ICh2b2lkKV9wYXJzZUVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqKW91dFZhbHVl
IGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURf
VFlQRShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gW1tU
ZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07
Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRl
c3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucy5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZh
dGUuaD4KLSNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVl
cy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLUBpbXBsZW1lbnRhdGlvbiBU
ZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yCi0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxv
YWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQKLXsKLSAg
ICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAIm1lc3NhZ2Ui
XSwgQCJtZXNzYWdlIik7Ci0gICAgc2VsZi5tZXNzYWdlID0gcGF5bG9hZFtAIm1lc3NhZ2UiXTsK
LQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImNv
ZGUiXSwgQCJjb2RlIik7Ci0gICAgc2VsZi5jb2RlID0gW3BheWxvYWRbQCJjb2RlIl0gaW50ZWdl
clZhbHVlXTsKLQotICAgIHJldHVybiBzZWxmOwotfQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
UHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9iamVjdAotewotICAgIGlm
ICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmplY3QgdG9KU09OT2JqZWN0
XS5nZXQoKV0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0K
LS0gKGluc3RhbmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBjb2Rl
OihpbnQpY29kZQotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICBy
ZXR1cm4gbmlsOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWSht
ZXNzYWdlLCBAIm1lc3NhZ2UiKTsKLQotICAgIHNlbGYubWVzc2FnZSA9IG1lc3NhZ2U7Ci0gICAg
c2VsZi5jb2RlID0gY29kZTsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKXNldE1l
c3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZQotewotICAgIFtzdXBlciBzZXRTdHJpbmc6bWVzc2Fn
ZSBmb3JLZXk6QCJtZXNzYWdlIl07Ci19Ci0KLS0gKE5TU3RyaW5nICopbWVzc2FnZQotewotICAg
IHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAibWVzc2FnZSJdOwotfQotCi0tICh2b2lkKXNl
dENvZGU6KGludCljb2RlCi17Ci0gICAgW3N1cGVyIHNldEludGVnZXI6Y29kZSBmb3JLZXk6QCJj
b2RlIl07Ci19Ci0KLS0gKGludCljb2RlCi17Ci0gICAgcmV0dXJuIFtzdXBlciBpbnRlZ2VyRm9y
S2V5OkAiY29kZSJdOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xU
eXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJl
dHVybi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1vcHRpb25h
bC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0CmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA4NTk0MWVkNTFmMS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvY29tbWFuZHMt
d2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0CisrKyAvZGV2
L251bGwKQEAgLTEsMTY3NCArMCwwIEBACi0jIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2Vu
ZENvbW1hbmRzLmpzCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMt
d2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotLy8gRGF0YWJhc2UKLUluc3BlY3RvckJhY2tl
bmQucmVnaXN0ZXJEb21haW4oIkRhdGFiYXNlIiwgbnVsbCk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJl
Z2lzdGVyRW51bSgiRGF0YWJhc2UuUHJpbWFyeUNvbG9ycyIsIHtSZWQ6ICJyZWQiLCBHcmVlbjog
ImdyZWVuIiwgQmx1ZTogImJsdWUifSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFu
ZCgiRGF0YWJhc2UuZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyIsIG51bGwsIFt7Im5hbWUi
OiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0cnVlfSwgeyJu
YW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZX0sIHsibmFt
ZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiLCAib3B0aW9uYWwiOiB0cnVlfSwgeyJu
YW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRydWV9LCB7Im5h
bWUiOiAicGF5bG9hZCIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRydWV9LCB7Im5h
bWUiOiAiZGF0YWJhc2VJZCIsICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6IHRydWV9LCB7
Im5hbWUiOiAic3FsRXJyb3IiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0cnVlfSwg
eyJuYW1lIjogInNjcmVlbkNvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1
ZX0sIHsibmFtZSI6ICJhbHRlcm5hdGVDb2xvcnMiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9u
YWwiOiB0cnVlfSwgeyJuYW1lIjogInByaW50Q29sb3IiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0
aW9uYWwiOiB0cnVlfV0sIFsiY29sdW1uTmFtZXMiLCAibm90ZXMiLCAidGltZXN0YW1wIiwgInZh
bHVlcyIsICJwYXlsb2FkIiwgImRhdGFiYXNlSWQiLCAic3FsRXJyb3IiLCAic2NyZWVuQ29sb3Ii
LCAiYWx0ZXJuYXRlQ29sb3JzIiwgInByaW50Q29sb3IiXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJl
Z2lzdGVyQ29tbWFuZCgiRGF0YWJhc2UuZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIiwgbnVs
bCwgW3sibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogIm9iamVjdCJ9LCB7Im5hbWUiOiAi
bm90ZXMiLCAidHlwZSI6ICJzdHJpbmcifSwgeyJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjog
Im51bWJlciJ9LCB7Im5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0In0sIHsibmFtZSI6
ICJwYXlsb2FkIiwgInR5cGUiOiAib2JqZWN0In0sIHsibmFtZSI6ICJkYXRhYmFzZUlkIiwgInR5
cGUiOiAibnVtYmVyIn0sIHsibmFtZSI6ICJzcWxFcnJvciIsICJ0eXBlIjogIm9iamVjdCJ9LCB7
Im5hbWUiOiAic2NyZWVuQ29sb3IiLCAidHlwZSI6ICJzdHJpbmcifSwgeyJuYW1lIjogImFsdGVy
bmF0ZUNvbG9ycyIsICJ0eXBlIjogIm9iamVjdCJ9LCB7Im5hbWUiOiAicHJpbnRDb2xvciIsICJ0
eXBlIjogInN0cmluZyJ9XSwgWyJjb2x1bW5OYW1lcyIsICJub3RlcyIsICJ0aW1lc3RhbXAiLCAi
dmFsdWVzIiwgInBheWxvYWQiLCAiZGF0YWJhc2VJZCIsICJzcWxFcnJvciIsICJzY3JlZW5Db2xv
ciIsICJhbHRlcm5hdGVDb2xvcnMiLCAicHJpbnRDb2xvciJdKTsKLUluc3BlY3RvckJhY2tlbmQu
YWN0aXZhdGVEb21haW4oIkRhdGFiYXNlIiwgbnVsbCk7Ci0jIyMgRW5kIEZpbGU6IEluc3BlY3Rv
ckJhY2tlbmRDb21tYW5kcy5qcwotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tl
bmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFu
ZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQotI2luY2x1ZGUgIlRlc3RQcm90
b2NvbFR5cGVzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJv
dXRlci5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgQWx0ZXJuYXRlQmFja2Vu
ZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVm
UHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hl
ciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KLSAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2Vu
ZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9
Ci1wcml2YXRlOgotICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0
Y2hlcjsKLX07Ci0KLQotY2xhc3MgQWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciA6
IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdmlydHVh
bCB+QWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQotICAgIHZpcnR1YWwg
dm9pZCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgY2FsbElkLCBjb25zdCBKU09O
OjpBcnJheSogaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyogaW5fbm90ZXMsIGNvbnN0IGRv
dWJsZSogaW5fdGltZXN0YW1wLCBjb25zdCBKU09OOjpPYmplY3QqIGluX3ZhbHVlcywgY29uc3Qg
SlNPTjo6VmFsdWUqIGluX3BheWxvYWQsIGNvbnN0IGludCogaW5fZGF0YWJhc2VJZCwgY29uc3Qg
SlNPTjo6T2JqZWN0KiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nKiBpbl9zY3JlZW5Db2xvciwg
Y29uc3QgSlNPTjo6QXJyYXkqIGluX2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nKiBpbl9w
cmludENvbG9yKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1l
dGVycyhsb25nIGNhbGxJZCwgY29uc3QgSlNPTjo6QXJyYXkmIGluX2NvbHVtbk5hbWVzLCBjb25z
dCBTdHJpbmcmIGluX25vdGVzLCBkb3VibGUgaW5fdGltZXN0YW1wLCBjb25zdCBKU09OOjpPYmpl
Y3QmIGluX3ZhbHVlcywgSlNPTjo6VmFsdWUgaW5fcGF5bG9hZCwgaW50IGluX2RhdGFiYXNlSWQs
IGNvbnN0IEpTT046Ok9iamVjdCYgaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgaW5fc2NyZWVu
Q29sb3IsIGNvbnN0IEpTT046OkFycmF5JiBpbl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmlu
ZyYgaW5fcHJpbnRDb2xvcikgPSAwOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0K
LSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSMjIyBF
bmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9u
Y2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdHlwZWRlZiBTdHJpbmcg
RXJyb3JTdHJpbmc7Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKLWNsYXNzIEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI7Ci0jZW5kaWYgLy8g
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0KLWNsYXNzIERhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKLXB1YmxpYzoKLSAgICAvLyBOYW1lZCBhZnRlciBw
YXJhbWV0ZXIgJ3ByaW50Q29sb3InIHdoaWxlIGdlbmVyYXRpbmcgY29tbWFuZC9ldmVudCBleGVj
dXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzLgotICAgIGVudW0gY2xhc3MgUHJpbnRDb2xvciB7Ci0g
ICAgICAgIEN5YW4gPSAzLAotICAgICAgICBNYWdlbnRhID0gNCwKLSAgICAgICAgWWVsbG93ID0g
NSwKLSAgICAgICAgQmxhY2sgPSA2LAotICAgIH07IC8vIGVudW0gY2xhc3MgUHJpbnRDb2xvcgot
ICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKEVycm9yU3RyaW5n
JiwgY29uc3QgSlNPTjo6QXJyYXkqIG9wdF9pbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nKiBv
cHRfaW5fbm90ZXMsIGNvbnN0IGRvdWJsZSogb3B0X2luX3RpbWVzdGFtcCwgY29uc3QgSlNPTjo6
T2JqZWN0KiBvcHRfaW5fdmFsdWVzLCBjb25zdCBKU09OOjpWYWx1ZSogb3B0X2luX3BheWxvYWQs
IGNvbnN0IGludCogb3B0X2luX2RhdGFiYXNlSWQsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0X2lu
X3NxbEVycm9yLCBjb25zdCBTdHJpbmcqIG9wdF9pbl9zY3JlZW5Db2xvciwgY29uc3QgSlNPTjo6
QXJyYXkqIG9wdF9pbl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyogb3B0X2luX3ByaW50
Q29sb3IsIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiBvcHRfb3V0X2NvbHVtbk5hbWVz
LCBPcHRpb25hbDxTdHJpbmc+JiBvcHRfb3V0X25vdGVzLCBPcHRpb25hbDxkb3VibGU+JiBvcHRf
b3V0X3RpbWVzdGFtcCwgT3B0aW9uYWw8SlNPTjo6T2JqZWN0PiYgb3B0X291dF92YWx1ZXMsIE9w
dGlvbmFsPEpTT046OlZhbHVlPiYgb3B0X291dF9wYXlsb2FkLCBPcHRpb25hbDxpbnQ+JiBvcHRf
b3V0X2RhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJy
b3I+JiBvcHRfb3V0X3NxbEVycm9yLCBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJp
bWFyeUNvbG9ycyogb3B0X291dF9zY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiBvcHRfb3V0X2FsdGVybmF0ZUNvbG9ycywgRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3IqIG9wdF9vdXRfcHJpbnRDb2xv
cikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMoRXJy
b3JTdHJpbmcmLCBjb25zdCBKU09OOjpBcnJheSYgaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmlu
ZyYgaW5fbm90ZXMsIGRvdWJsZSBpbl90aW1lc3RhbXAsIGNvbnN0IEpTT046Ok9iamVjdCYgaW5f
dmFsdWVzLCBKU09OOjpWYWx1ZSBpbl9wYXlsb2FkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3Qg
SlNPTjo6T2JqZWN0JiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nJiBpbl9zY3JlZW5Db2xvciwg
Y29uc3QgSlNPTjo6QXJyYXkmIGluX2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBpbl9w
cmludENvbG9yLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYgb3V0X2NvbHVtbk5hbWVz
LCBTdHJpbmcqIG91dF9ub3RlcywgZG91YmxlKiBvdXRfdGltZXN0YW1wLCBKU09OOjpPYmplY3Qq
IG91dF92YWx1ZXMsIEpTT046OlZhbHVlKiBvdXRfcGF5bG9hZCwgaW50KiBvdXRfZGF0YWJhc2VJ
ZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mIG91dF9zcWxF
cnJvciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMqIG91dF9z
Y3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxp
c3Q+JiBvdXRfYWx0ZXJuYXRlQ29sb3JzLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxl
cjo6UHJpbnRDb2xvciogb3V0X3ByaW50Q29sb3IpID0gMDsKLXByb3RlY3RlZDoKLSAgICB2aXJ0
dWFsIH5EYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOwotfTsKLQotY2xhc3MgRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5k
RGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVySGFuZGxlciopOwotICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0
cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOwotcHJpdmF0
ZToKLSAgICB2b2lkIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQs
IFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0gICAgdm9pZCBleGVjdXRlTm9P
cHRpb25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYg
cGFyYW1ldGVycyk7Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
Ci1wdWJsaWM6Ci0gICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZURhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVE
aXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQotcHJpdmF0ZToKLSAgICBBbHRlcm5h
dGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKiBtX2FsdGVybmF0ZURpc3BhdGNoZXIgeyBudWxs
cHRyIH07Ci0jZW5kaWYKLXByaXZhdGU6Ci0gICAgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihC
YWNrZW5kRGlzcGF0Y2hlciYsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0g
ICAgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQgeyBudWxscHRyIH07
Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tl
bmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJz
LmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0
aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0
QmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVk
ZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgot
Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jaW5jbHVkZSAi
VGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBJ
bnNwZWN0b3IgewotCi1EYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6fkRhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9Ci0KLVJlZjxEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVyPiBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoQmFja2VuZERpc3BhdGNo
ZXImIGJhY2tlbmREaXNwYXRjaGVyLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciog
YWdlbnQpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKLX0KLQotRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlcjo6RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFj
a2VuZERpc3BhdGNoZXIsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkK
LSAgICA6IFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQot
ICAgICwgbV9hZ2VudChhZ2VudCkKLXsKLSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3Rl
ckRpc3BhdGNoZXJGb3JEb21haW4oIkRhdGFiYXNlIl9zLCB0aGlzKTsKLX0KLQotdm9pZCBEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3Ry
aW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKLXsKLSAgICBSZWY8RGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7Ci0KLSAgICBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiBwYXJhbWV0ZXJzOwotICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9z
LCBwYXJhbWV0ZXJzKTsKLQotICAgIGlmIChtZXRob2QgPT0gImV4ZWN1dGVBbGxPcHRpb25hbFBh
cmFtZXRlcnMiKQotICAgICAgICBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKHJlcXVlc3RJ
ZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7Ci0gICAgZWxzZSBpZiAobWV0aG9kID09ICJleGVjdXRl
Tm9PcHRpb25hbFBhcmFtZXRlcnMiKQotICAgICAgICBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRl
cnMocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKLSAgICBlbHNlCi0gICAgICAgIG1f
YmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6
Ok1ldGhvZE5vdEZvdW5kLCAiJ0RhdGFiYXNlLiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5k
Iik7Ci19Ci0KLXZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZUFsbE9wdGlv
bmFsUGFyYW1ldGVycyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJh
bWV0ZXJzKQotewotICAgIGJvb2wgb3B0X2luX2NvbHVtbk5hbWVzX3ZhbHVlRm91bmQgPSBmYWxz
ZTsKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IG9wdF9pbl9jb2x1bW5OYW1lcyA9IG1fYmFja2Vu
ZERpc3BhdGNoZXItPmdldEFycmF5KHBhcmFtZXRlcnMuZ2V0KCksICJjb2x1bW5OYW1lcyJfcywg
Jm9wdF9pbl9jb2x1bW5OYW1lc192YWx1ZUZvdW5kKTsKLSAgICBib29sIG9wdF9pbl9ub3Rlc192
YWx1ZUZvdW5kID0gZmFsc2U7Ci0gICAgU3RyaW5nIG9wdF9pbl9ub3RlcyA9IG1fYmFja2VuZERp
c3BhdGNoZXItPmdldFN0cmluZyhwYXJhbWV0ZXJzLmdldCgpLCAibm90ZXMiX3MsICZvcHRfaW5f
bm90ZXNfdmFsdWVGb3VuZCk7Ci0gICAgYm9vbCBvcHRfaW5fdGltZXN0YW1wX3ZhbHVlRm91bmQg
PSBmYWxzZTsKLSAgICBkb3VibGUgb3B0X2luX3RpbWVzdGFtcCA9IG1fYmFja2VuZERpc3BhdGNo
ZXItPmdldERvdWJsZShwYXJhbWV0ZXJzLmdldCgpLCAidGltZXN0YW1wIl9zLCAmb3B0X2luX3Rp
bWVzdGFtcF92YWx1ZUZvdW5kKTsKLSAgICBib29sIG9wdF9pbl92YWx1ZXNfdmFsdWVGb3VuZCA9
IGZhbHNlOwotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG9wdF9pbl92YWx1ZXMgPSBtX2JhY2tl
bmREaXNwYXRjaGVyLT5nZXRPYmplY3QocGFyYW1ldGVycy5nZXQoKSwgInZhbHVlcyJfcywgJm9w
dF9pbl92YWx1ZXNfdmFsdWVGb3VuZCk7Ci0gICAgYm9vbCBvcHRfaW5fcGF5bG9hZF92YWx1ZUZv
dW5kID0gZmFsc2U7Ci0gICAgUmVmUHRyPEpTT046OlZhbHVlPiBvcHRfaW5fcGF5bG9hZCA9IG1f
YmFja2VuZERpc3BhdGNoZXItPmdldFZhbHVlKHBhcmFtZXRlcnMuZ2V0KCksICJwYXlsb2FkIl9z
LCAmb3B0X2luX3BheWxvYWRfdmFsdWVGb3VuZCk7Ci0gICAgYm9vbCBvcHRfaW5fZGF0YWJhc2VJ
ZF92YWx1ZUZvdW5kID0gZmFsc2U7Ci0gICAgaW50IG9wdF9pbl9kYXRhYmFzZUlkID0gbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+Z2V0SW50ZWdlcihwYXJhbWV0ZXJzLmdldCgpLCAiZGF0YWJhc2VJZCJf
cywgJm9wdF9pbl9kYXRhYmFzZUlkX3ZhbHVlRm91bmQpOwotICAgIGJvb2wgb3B0X2luX3NxbEVy
cm9yX3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBvcHRfaW5f
c3FsRXJyb3IgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRPYmplY3QocGFyYW1ldGVycy5nZXQo
KSwgInNxbEVycm9yIl9zLCAmb3B0X2luX3NxbEVycm9yX3ZhbHVlRm91bmQpOwotICAgIGJvb2wg
b3B0X2luX3NjcmVlbkNvbG9yX3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAgICBTdHJpbmcgb3B0X2lu
X3NjcmVlbkNvbG9yID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMu
Z2V0KCksICJzY3JlZW5Db2xvciJfcywgJm9wdF9pbl9zY3JlZW5Db2xvcl92YWx1ZUZvdW5kKTsK
LSAgICBib29sIG9wdF9pbl9hbHRlcm5hdGVDb2xvcnNfdmFsdWVGb3VuZCA9IGZhbHNlOwotICAg
IFJlZlB0cjxKU09OOjpBcnJheT4gb3B0X2luX2FsdGVybmF0ZUNvbG9ycyA9IG1fYmFja2VuZERp
c3BhdGNoZXItPmdldEFycmF5KHBhcmFtZXRlcnMuZ2V0KCksICJhbHRlcm5hdGVDb2xvcnMiX3Ms
ICZvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzX3ZhbHVlRm91bmQpOwotICAgIGJvb2wgb3B0X2luX3By
aW50Q29sb3JfdmFsdWVGb3VuZCA9IGZhbHNlOwotICAgIFN0cmluZyBvcHRfaW5fcHJpbnRDb2xv
ciA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwYXJhbWV0ZXJzLmdldCgpLCAicHJp
bnRDb2xvciJfcywgJm9wdF9pbl9wcmludENvbG9yX3ZhbHVlRm91bmQpOwotICAgIGlmIChtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5oYXNQcm90b2NvbEVycm9ycygpKSB7Ci0gICAgICAgIG1fYmFja2Vu
ZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OkludmFs
aWRQYXJhbXMsICJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJ0RhdGFiYXNlLmV4ZWN1dGVBbGxP
cHRpb25hbFBhcmFtZXRlcnMnIGNhbid0IGJlIHByb2Nlc3NlZCJfcyk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
LSAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlz
cGF0Y2hlci0+ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhyZXF1ZXN0SWQsIG9wdF9pbl9j
b2x1bW5OYW1lc192YWx1ZUZvdW5kID8gb3B0X2luX2NvbHVtbk5hbWVzLmdldCgpIDogbnVsbHB0
ciwgb3B0X2luX25vdGVzX3ZhbHVlRm91bmQgPyAmb3B0X2luX25vdGVzIDogbnVsbHB0ciwgb3B0
X2luX3RpbWVzdGFtcF92YWx1ZUZvdW5kID8gJm9wdF9pbl90aW1lc3RhbXAgOiBudWxscHRyLCBv
cHRfaW5fdmFsdWVzX3ZhbHVlRm91bmQgPyBvcHRfaW5fdmFsdWVzLmdldCgpIDogbnVsbHB0ciwg
b3B0X2luX3BheWxvYWRfdmFsdWVGb3VuZCA/IG9wdF9pbl9wYXlsb2FkLmdldCgpIDogbnVsbHB0
ciwgb3B0X2luX2RhdGFiYXNlSWRfdmFsdWVGb3VuZCA/ICZvcHRfaW5fZGF0YWJhc2VJZCA6IG51
bGxwdHIsIG9wdF9pbl9zcWxFcnJvcl92YWx1ZUZvdW5kID8gb3B0X2luX3NxbEVycm9yLmdldCgp
IDogbnVsbHB0ciwgb3B0X2luX3NjcmVlbkNvbG9yX3ZhbHVlRm91bmQgPyAmb3B0X2luX3NjcmVl
bkNvbG9yIDogbnVsbHB0ciwgb3B0X2luX2FsdGVybmF0ZUNvbG9yc192YWx1ZUZvdW5kID8gb3B0
X2luX2FsdGVybmF0ZUNvbG9ycy5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9wcmludENvbG9yX3Zh
bHVlRm91bmQgPyAmb3B0X2luX3ByaW50Q29sb3IgOiBudWxscHRyKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSNlbmRpZgotCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046
Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8SlNP
Tjo6QXJyYXlPZjxTdHJpbmc+PiBvdXRfY29sdW1uTmFtZXM7Ci0gICAgT3B0aW9uYWw8U3RyaW5n
PiBvdXRfbm90ZXM7Ci0gICAgT3B0aW9uYWw8ZG91YmxlPiBvdXRfdGltZXN0YW1wOwotICAgIE9w
dGlvbmFsPEpTT046Ok9iamVjdD4gb3V0X3ZhbHVlczsKLSAgICBPcHRpb25hbDxKU09OOjpWYWx1
ZT4gb3V0X3BheWxvYWQ7Ci0gICAgT3B0aW9uYWw8aW50PiBvdXRfZGF0YWJhc2VJZDsKLSAgICBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBvdXRfc3FsRXJyb3I7
Ci0gICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgb3V0X3Nj
cmVlbkNvbG9yOwotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29s
b3JMaXN0PiBvdXRfYWx0ZXJuYXRlQ29sb3JzOwotICAgIERhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyOjpQcmludENvbG9yIG91dF9wcmludENvbG9yOwotICAgIG1fYWdlbnQtPmV4ZWN1
dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMoZXJyb3IsIG9wdF9pbl9jb2x1bW5OYW1lc192YWx1ZUZv
dW5kID8gb3B0X2luX2NvbHVtbk5hbWVzLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX25vdGVzX3Zh
bHVlRm91bmQgPyAmb3B0X2luX25vdGVzIDogbnVsbHB0ciwgb3B0X2luX3RpbWVzdGFtcF92YWx1
ZUZvdW5kID8gJm9wdF9pbl90aW1lc3RhbXAgOiBudWxscHRyLCBvcHRfaW5fdmFsdWVzX3ZhbHVl
Rm91bmQgPyBvcHRfaW5fdmFsdWVzLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX3BheWxvYWRfdmFs
dWVGb3VuZCA/IG9wdF9pbl9wYXlsb2FkLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX2RhdGFiYXNl
SWRfdmFsdWVGb3VuZCA/ICZvcHRfaW5fZGF0YWJhc2VJZCA6IG51bGxwdHIsIG9wdF9pbl9zcWxF
cnJvcl92YWx1ZUZvdW5kID8gb3B0X2luX3NxbEVycm9yLmdldCgpIDogbnVsbHB0ciwgb3B0X2lu
X3NjcmVlbkNvbG9yX3ZhbHVlRm91bmQgPyAmb3B0X2luX3NjcmVlbkNvbG9yIDogbnVsbHB0ciwg
b3B0X2luX2FsdGVybmF0ZUNvbG9yc192YWx1ZUZvdW5kID8gb3B0X2luX2FsdGVybmF0ZUNvbG9y
cy5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9wcmludENvbG9yX3ZhbHVlRm91bmQgPyAmb3B0X2lu
X3ByaW50Q29sb3IgOiBudWxscHRyLCBvdXRfY29sdW1uTmFtZXMsIG91dF9ub3Rlcywgb3V0X3Rp
bWVzdGFtcCwgb3V0X3ZhbHVlcywgb3V0X3BheWxvYWQsIG91dF9kYXRhYmFzZUlkLCBvdXRfc3Fs
RXJyb3IsIG91dF9zY3JlZW5Db2xvciwgb3V0X2FsdGVybmF0ZUNvbG9ycywgb3V0X3ByaW50Q29s
b3IpOwotCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkgewotICAgICAgICBpZiAob3V0X2NvbHVt
bk5hbWVzKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIG91
dF9jb2x1bW5OYW1lcyk7Ci0gICAgICAgIGlmIChvdXRfbm90ZXMuaGFzVmFsdWUoKSkKLSAgICAg
ICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJub3RlcyJfcywgKm91dF9ub3Rlcyk7Ci0gICAgICAg
IGlmIChvdXRfdGltZXN0YW1wLmhhc1ZhbHVlKCkpCi0gICAgICAgICAgICByZXN1bHQtPnNldERv
dWJsZSgidGltZXN0YW1wIl9zLCAqb3V0X3RpbWVzdGFtcCk7Ci0gICAgICAgIGlmIChvdXRfdmFs
dWVzLmhhc1ZhbHVlKCkpCi0gICAgICAgICAgICByZXN1bHQtPnNldE9iamVjdCgidmFsdWVzIl9z
LCAqb3V0X3ZhbHVlcyk7Ci0gICAgICAgIGlmIChvdXRfcGF5bG9hZC5oYXNWYWx1ZSgpKQotICAg
ICAgICAgICAgcmVzdWx0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgKm91dF9wYXlsb2FkKTsKLSAg
ICAgICAgaWYgKG91dF9kYXRhYmFzZUlkLmhhc1ZhbHVlKCkpCi0gICAgICAgICAgICByZXN1bHQt
PnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsICpvdXRfZGF0YWJhc2VJZCk7Ci0gICAgICAgIGlm
IChvdXRfc3FsRXJyb3IpCi0gICAgICAgICAgICByZXN1bHQtPnNldE9iamVjdCgic3FsRXJyb3Ii
X3MsIG91dF9zcWxFcnJvcik7Ci0gICAgICAgIGlmIChvdXRfc2NyZWVuQ29sb3IuaGFzVmFsdWUo
KSkKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgKm91dF9z
Y3JlZW5Db2xvcik7Ci0gICAgICAgIGlmIChvdXRfYWx0ZXJuYXRlQ29sb3JzKQotICAgICAgICAg
ICAgcmVzdWx0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCBvdXRfYWx0ZXJuYXRlQ29s
b3JzKTsKLSAgICAgICAgaWYgKG91dF9wcmludENvbG9yLmhhc1ZhbHVlKCkpCi0gICAgICAgICAg
ICByZXN1bHQtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgKm91dF9wcmludENvbG9yKTsKLSAg
ICB9Ci0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAg
ZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJh
Y2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOwotfQotCi12b2lk
IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhs
b25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKQotewotICAg
IFJlZlB0cjxKU09OOjpBcnJheT4gaW5fY29sdW1uTmFtZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVy
LT5nZXRBcnJheShwYXJhbWV0ZXJzLmdldCgpLCAiY29sdW1uTmFtZXMiX3MsIG51bGxwdHIpOwot
ICAgIFN0cmluZyBpbl9ub3RlcyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwYXJh
bWV0ZXJzLmdldCgpLCAibm90ZXMiX3MsIG51bGxwdHIpOwotICAgIGRvdWJsZSBpbl90aW1lc3Rh
bXAgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXREb3VibGUocGFyYW1ldGVycy5nZXQoKSwgInRp
bWVzdGFtcCJfcywgbnVsbHB0cik7Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gaW5fdmFsdWVz
ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0T2JqZWN0KHBhcmFtZXRlcnMuZ2V0KCksICJ2YWx1
ZXMiX3MsIG51bGxwdHIpOwotICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gaW5fcGF5bG9hZCA9IG1f
YmFja2VuZERpc3BhdGNoZXItPmdldFZhbHVlKHBhcmFtZXRlcnMuZ2V0KCksICJwYXlsb2FkIl9z
LCBudWxscHRyKTsKLSAgICBpbnQgaW5fZGF0YWJhc2VJZCA9IG1fYmFja2VuZERpc3BhdGNoZXIt
PmdldEludGVnZXIocGFyYW1ldGVycy5nZXQoKSwgImRhdGFiYXNlSWQiX3MsIG51bGxwdHIpOwot
ICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGluX3NxbEVycm9yID0gbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+Z2V0T2JqZWN0KHBhcmFtZXRlcnMuZ2V0KCksICJzcWxFcnJvciJfcywgbnVsbHB0cik7Ci0g
ICAgU3RyaW5nIGluX3NjcmVlbkNvbG9yID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5n
KHBhcmFtZXRlcnMuZ2V0KCksICJzY3JlZW5Db2xvciJfcywgbnVsbHB0cik7Ci0gICAgUmVmUHRy
PEpTT046OkFycmF5PiBpbl9hbHRlcm5hdGVDb2xvcnMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5n
ZXRBcnJheShwYXJhbWV0ZXJzLmdldCgpLCAiYWx0ZXJuYXRlQ29sb3JzIl9zLCBudWxscHRyKTsK
LSAgICBTdHJpbmcgaW5fcHJpbnRDb2xvciA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmlu
ZyhwYXJhbWV0ZXJzLmdldCgpLCAicHJpbnRDb2xvciJfcywgbnVsbHB0cik7Ci0gICAgaWYgKG1f
YmFja2VuZERpc3BhdGNoZXItPmhhc1Byb3RvY29sRXJyb3JzKCkpIHsKLSAgICAgICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52
YWxpZFBhcmFtcywgIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnRGF0YWJhc2UuZXhlY3V0ZU5v
T3B0aW9uYWxQYXJhbWV0ZXJzJyBjYW4ndCBiZSBwcm9jZXNzZWQiX3MpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
Ci0gICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURp
c3BhdGNoZXItPmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhyZXF1ZXN0SWQsICppbl9jb2x1
bW5OYW1lcywgaW5fbm90ZXMsIGluX3RpbWVzdGFtcCwgKmluX3ZhbHVlcywgKmluX3BheWxvYWQs
IGluX2RhdGFiYXNlSWQsICppbl9zcWxFcnJvciwgaW5fc2NyZWVuQ29sb3IsICppbl9hbHRlcm5h
dGVDb2xvcnMsIGluX3ByaW50Q29sb3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlm
Ci0KLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQg
PSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmlu
Zz4+IG91dF9jb2x1bW5OYW1lczsKLSAgICBTdHJpbmcgb3V0X25vdGVzOwotICAgIGRvdWJsZSBv
dXRfdGltZXN0YW1wOwotICAgIEpTT046Ok9iamVjdCBvdXRfdmFsdWVzOwotICAgIEpTT046OlZh
bHVlIG91dF9wYXlsb2FkOwotICAgIGludCBvdXRfZGF0YWJhc2VJZDsKLSAgICBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBvdXRfc3FsRXJyb3I7Ci0gICAgSW5z
cGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgb3V0X3NjcmVlbkNvbG9y
OwotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiBv
dXRfYWx0ZXJuYXRlQ29sb3JzOwotICAgIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
OjpQcmludENvbG9yIG91dF9wcmludENvbG9yOwotICAgIG1fYWdlbnQtPmV4ZWN1dGVOb09wdGlv
bmFsUGFyYW1ldGVycyhlcnJvciwgKmluX2NvbHVtbk5hbWVzLCBpbl9ub3RlcywgaW5fdGltZXN0
YW1wLCAqaW5fdmFsdWVzLCAqaW5fcGF5bG9hZCwgaW5fZGF0YWJhc2VJZCwgKmluX3NxbEVycm9y
LCBpbl9zY3JlZW5Db2xvciwgKmluX2FsdGVybmF0ZUNvbG9ycywgaW5fcHJpbnRDb2xvciwgb3V0
X2NvbHVtbk5hbWVzLCAmb3V0X25vdGVzLCAmb3V0X3RpbWVzdGFtcCwgb3V0X3ZhbHVlcywgJm91
dF9wYXlsb2FkLCAmb3V0X2RhdGFiYXNlSWQsIG91dF9zcWxFcnJvciwgJm91dF9zY3JlZW5Db2xv
ciwgb3V0X2FsdGVybmF0ZUNvbG9ycywgJm91dF9wcmludENvbG9yKTsKLQotICAgIGlmICghZXJy
b3IubGVuZ3RoKCkpIHsKLSAgICAgICAgcmVzdWx0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3Ms
IG91dF9jb2x1bW5OYW1lcyk7Ci0gICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJub3RlcyJfcywg
b3V0X25vdGVzKTsKLSAgICAgICAgcmVzdWx0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgb3V0
X3RpbWVzdGFtcCk7Ci0gICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIG91dF92
YWx1ZXMpOwotICAgICAgICByZXN1bHQtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBvdXRfcGF5bG9h
ZCk7Ci0gICAgICAgIHJlc3VsdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgb3V0X2RhdGFi
YXNlSWQpOwotICAgICAgICByZXN1bHQtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIG91dF9zcWxF
cnJvcik7Ci0gICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgSW5zcGVj
dG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKG91dF9zY3Jl
ZW5Db2xvcikpOwotICAgICAgICByZXN1bHQtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3Ms
IG91dF9hbHRlcm5hdGVDb2xvcnMpOwotICAgICAgICByZXN1bHQtPnNldFN0cmluZygicHJpbnRD
b2xvciJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFu
dFZhbHVlKG91dF9wcmludENvbG9yKSk7Ci0gICAgfQotICAgIGlmICghZXJyb3IubGVuZ3RoKCkp
Ci0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdU
Rk1vdmUocmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3Is
IFdURk1vdmUoZXJyb3IpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBF
bmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRl
c3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQot
I2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVl
cy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVj
dG9yIHsKLQotY2xhc3MgRnJvbnRlbmRSb3V0ZXI7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMu
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hl
cnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0
dXJuLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
clByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotCi1uYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKLQotCi0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLQotCi0vLyBGb3J3
YXJkIGRlY2xhcmF0aW9ucy4KLW5hbWVzcGFjZSBEYXRhYmFzZSB7Ci1jbGFzcyBFcnJvcjsKLWVu
dW0gY2xhc3MgUHJpbWFyeUNvbG9yczsKLX0gLy8gRGF0YWJhc2UKLS8vIEVuZCBvZiBmb3J3YXJk
IGRlY2xhcmF0aW9ucy4KLQotCi0vLyBUeXBlZGVmcy4KLW5hbWVzcGFjZSBEYXRhYmFzZSB7Ci0v
KiBVbmlxdWUgaWRlbnRpZmllciBvZiBEYXRhYmFzZSBvYmplY3QuICovCi10eXBlZGVmIGludCBE
YXRhYmFzZUlkOwotdHlwZWRlZiBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpQcmltYXJ5Q29sb3JzPiBDb2xvckxpc3Q7Ci19IC8vIERhdGFiYXNlCi0vLyBFbmQg
b2YgdHlwZWRlZnMuCi0KLW5hbWVzcGFjZSBUZXN0SGVscGVycyB7Ci0KLVN0cmluZyBnZXRFbnVt
Q29uc3RhbnRWYWx1ZShpbnQgY29kZSk7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBn
ZXRFbnVtQ29uc3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkKLXsKLSAgICByZXR1cm4gZ2V0RW51bUNv
bnN0YW50VmFsdWUoc3RhdGljX2Nhc3Q8aW50PihlbnVtVmFsdWUpKTsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgVGVzdEhlbHBlcnMKLQotbmFtZXNwYWNlIERhdGFiYXNlIHsKLS8qICAqLwotZW51bSBj
bGFzcyBQcmltYXJ5Q29sb3JzIHsKLSAgICBSZWQgPSAwLAotICAgIEdyZWVuID0gMSwKLSAgICBC
bHVlID0gMiwKLX07IC8vIGVudW0gY2xhc3MgUHJpbWFyeUNvbG9ycwotLyogRGF0YWJhc2UgZXJy
b3IuICovCi1jbGFzcyBFcnJvciA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKLXB1YmxpYzoK
LSAgICBlbnVtIHsKLSAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAotICAgICAgICBNZXNzYWdlU2V0
ID0gMSA8PCAwLAotICAgICAgICBDb2RlU2V0ID0gMSA8PCAxLAotICAgICAgICBBbGxGaWVsZHNT
ZXQgPSAoTWVzc2FnZVNldCB8IENvZGVTZXQpCi0gICAgfTsKLQotICAgIHRlbXBsYXRlPGludCBT
VEFURT4KLSAgICBjbGFzcyBCdWlsZGVyIHsKLSAgICBwcml2YXRlOgotICAgICAgICBSZWZQdHI8
SlNPTjo6T2JqZWN0PiBtX3Jlc3VsdDsKLQotICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVp
bGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyKFJlZjwvKkVycm9yKi9KU09OOjpPYmplY3Q+JiYg
b2JqZWN0KQotICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWls
ZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwotICAgICAgICB9Ci0gICAgICAgIGZyaWVu
ZCBjbGFzcyBFcnJvcjsKLSAgICBwdWJsaWM6Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1l
c3NhZ2VTZXQ+JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNZXNzYWdlU2V0KSwgcHJvcGVydHlf
bWVzc2FnZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJt
ZXNzYWdlIl9zLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1lc3NhZ2VT
ZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29kZVNldD4mIHNl
dENvZGUoaW50IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgQ29kZVNldCksIHByb3BlcnR5X2NvZGVfYWxyZWFkeV9zZXQpOwotICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldEludGVnZXIoImNvZGUiX3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJl
dHVybiBjYXN0U3RhdGU8Q29kZVNldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIFJlZjxFcnJv
cj4gcmVsZWFzZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRF
ID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7Ci0gICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVChzaXplb2YoRXJyb3IpID09IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5ub3Rf
Y2FzdCk7Ci0KLSAgICAgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25SZXN1bHQgPSBtX3Jl
c3VsdC5yZWxlYXNlTm9uTnVsbCgpOwotICAgICAgICAgICAgYXV0byByZXN1bHQgPSBXVEZNb3Zl
KCpyZWludGVycHJldF9jYXN0PFJlZjxFcnJvcj4qPigmanNvblJlc3VsdCkpOwotICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICAvKgotICAgICAqIFN5
bnRoZXRpYyBjb25zdHJ1Y3RvcjoKLSAgICAgKiBSZWY8RXJyb3I+IHJlc3VsdCA9IEVycm9yOjpj
cmVhdGUoKQotICAgICAqICAgICAuc2V0TWVzc2FnZSguLi4pCi0gICAgICogICAgIC5zZXRDb2Rl
KC4uLikKLSAgICAgKiAgICAgLnJlbGVhc2UoKTsKLSAgICAgKi8KLSAgICBzdGF0aWMgQnVpbGRl
cjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBCdWlsZGVyPE5v
RmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKLSAgICB9Ci19OwotCi19IC8vIERh
dGFiYXNlCi0KLQotCi1uYW1lc3BhY2UgVGVzdEhlbHBlcnMgewotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBQcm90b2NvbEVudW1UeXBlPgotT3B0aW9uYWw8UHJvdG9jb2xFbnVtVHlwZT4gcGFyc2VFbnVt
VmFsdWVGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYpOwotCi0vLyBFbnVtcyBpbiB0aGUgJ0RhdGFi
YXNlJyBEb21haW4KLXRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpQcmltYXJ5Q29sb3JzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+KGNvbnN0IFN0cmluZyYpOwotCi19
IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotbmFtZXNwYWNlIFdURiB7Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKLQotLy8gSGFzaCBkZWNsYXJhdGlvbnMgaW4g
dGhlICdEYXRhYmFzZScgRG9tYWluCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgRGVmYXVsdEhhc2g8SW5z
cGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IHsKLSAgICB0eXBlZGVm
IEludEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IEhh
c2g7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXVEYKLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
T2JqZWN0cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2Fs
bC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xP
YmplY3RzLmgiCi0KLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1uYW1lc3BhY2UgUHJvdG9j
b2wgewotCi1uYW1lc3BhY2UgVGVzdEhlbHBlcnMgewotCi1zdGF0aWMgY29uc3QgY2hhciogY29u
c3QgZW51bV9jb25zdGFudF92YWx1ZXNbXSA9IHsKLSAgICAicmVkIiwKLSAgICAiZ3JlZW4iLAot
ICAgICJibHVlIiwKLSAgICAiY3lhbiIsCi0gICAgIm1hZ2VudGEiLAotICAgICJ5ZWxsb3ciLAot
ICAgICJibGFjayIsCi19OwotCi1TdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUp
IHsKLSAgICByZXR1cm4gZW51bV9jb25zdGFudF92YWx1ZXNbY29kZV07Ci19Ci0KLS8vIEVudW1z
IGluIHRoZSAnRGF0YWJhc2UnIERvbWFpbgotdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IHBhcnNlRW51bVZhbHVlRnJvbVN0
cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4oY29uc3Qg
U3RyaW5nJiBwcm90b2NvbFN0cmluZykKLXsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0
YW50VmFsdWVzW10gPSB7Ci0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0
YWJhc2U6OlByaW1hcnlDb2xvcnM6OlJlZCwKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlBy
b3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9yczo6R3JlZW4sCi0gICAgICAgIChzaXplX3Qp
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM6OkJsdWUsCi0gICAg
fTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDM7ICsraSkKLSAgICAgICAgaWYgKHByb3Rv
Y29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKLSAg
ICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlD
b2xvcnMpY29uc3RhbnRWYWx1ZXNbaV07Ci0KLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQot
Ci0KLX0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCi0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90
b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xPYmplY3RzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERp
c3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13
aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFp
blB0ci5oPgotCi1AcHJvdG9jb2wgVGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyOwot
Ci1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi1jbGFzcyBPYmpDSW5zcGVjdG9yRGF0YWJhc2VC
YWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBP
YmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xEYXRh
YmFzZURvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KLSAg
ICB2b2lkIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIGNvbnN0
IEpTT046OkFycmF5KiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nKiBpbl9ub3RlcywgY29u
c3QgZG91YmxlKiBpbl90aW1lc3RhbXAsIGNvbnN0IEpTT046Ok9iamVjdCogaW5fdmFsdWVzLCBj
b25zdCBKU09OOjpWYWx1ZSogaW5fcGF5bG9hZCwgY29uc3QgaW50KiBpbl9kYXRhYmFzZUlkLCBj
b25zdCBKU09OOjpPYmplY3QqIGluX3NxbEVycm9yLCBjb25zdCBTdHJpbmcqIGluX3NjcmVlbkNv
bG9yLCBjb25zdCBKU09OOjpBcnJheSogaW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcq
IGluX3ByaW50Q29sb3IpIGZpbmFsOwotICAgIHZvaWQgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0
ZXJzKGxvbmcgcmVxdWVzdElkLCBjb25zdCBKU09OOjpBcnJheSYgaW5fY29sdW1uTmFtZXMsIGNv
bnN0IFN0cmluZyYgaW5fbm90ZXMsIGRvdWJsZSBpbl90aW1lc3RhbXAsIGNvbnN0IEpTT046Ok9i
amVjdCYgaW5fdmFsdWVzLCBKU09OOjpWYWx1ZSBpbl9wYXlsb2FkLCBpbnQgaW5fZGF0YWJhc2VJ
ZCwgY29uc3QgSlNPTjo6T2JqZWN0JiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nJiBpbl9zY3Jl
ZW5Db2xvciwgY29uc3QgSlNPTjo6QXJyYXkmIGluX2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3Ry
aW5nJiBpbl9wcmludENvbG9yKSBmaW5hbDsKLXByaXZhdGU6Ci0gICAgUmV0YWluUHRyPGlkPFRl
c3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7Ci19OwotCi19IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5k
RGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3Bh
dGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0
aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJU
ZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bEludGVybmFsLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0j
aW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXZv
aWQgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVBbGxPcHRp
b25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIGNvbnN0IEpTT046OkFycmF5KiBpbl9jb2x1
bW5OYW1lcywgY29uc3QgU3RyaW5nKiBpbl9ub3RlcywgY29uc3QgZG91YmxlKiBpbl90aW1lc3Rh
bXAsIGNvbnN0IEpTT046Ok9iamVjdCogaW5fdmFsdWVzLCBjb25zdCBKU09OOjpWYWx1ZSogaW5f
cGF5bG9hZCwgY29uc3QgaW50KiBpbl9kYXRhYmFzZUlkLCBjb25zdCBKU09OOjpPYmplY3QqIGlu
X3NxbEVycm9yLCBjb25zdCBTdHJpbmcqIGluX3NjcmVlbkNvbG9yLCBjb25zdCBKU09OOjpBcnJh
eSogaW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcqIGluX3ByaW50Q29sb3IpCi17Ci0g
ICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGV4ZWN1dGVB
bGxPcHRpb25hbFBhcmFtZXRlcnNXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6Y29s
dW1uTmFtZXM6bm90ZXM6dGltZXN0YW1wOnZhbHVlczpwYXlsb2FkOmRhdGFiYXNlSWQ6c3FsRXJy
b3I6c2NyZWVuQ29sb3I6YWx0ZXJuYXRlQ29sb3JzOnByaW50Q29sb3I6KV0pIHsKLSAgICAgICAg
YmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tl
bmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS5leGVjdXRlQWxsT3B0aW9u
YWxQYXJhbWV0ZXJzJyB3YXMgbm90IGZvdW5kIl9zKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5k
RGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3Bh
dGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCkt
PnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgfTsKLQotICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9
IF4oTlNBcnJheS8qPE5TU3RyaW5nPiovICoqY29sdW1uTmFtZXMsIE5TU3RyaW5nICoqbm90ZXMs
IGRvdWJsZSAqdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKip2YWx1ZXMsIFJXSVBy
b3RvY29sSlNPTk9iamVjdCAqKnBheWxvYWQsIGludCAqZGF0YWJhc2VJZCwgVGVzdFByb3RvY29s
RGF0YWJhc2VFcnJvciAqKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xv
cnMgKnNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiphbHRlcm5hdGVDb2xvcnMs
IFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29s
b3IgKnByaW50Q29sb3IpIHsKLSAgICAgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0T2JqZWN0
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9C
QURfT1BUSU9OQUxfUEFSQU1FVEVSKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7Ci0gICAg
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihub3RlcywgQCJu
b3RlcyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVU
RVIodmFsdWVzLCBAInZhbHVlcyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9P
UFRJT05BTF9QQVJBTUVURVIocGF5bG9hZCwgQCJwYXlsb2FkIik7Ci0gICAgICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihzcWxFcnJvciwgQCJzcWxFcnJvciIp
OwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoYWx0
ZXJuYXRlQ29sb3JzLCBAImFsdGVybmF0ZUNvbG9ycyIpOwotICAgICAgICBpZiAoY29sdW1uTmFt
ZXMpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywg
dG9KU09OU3RyaW5nQXJyYXkoKmNvbHVtbk5hbWVzKSk7Ci0gICAgICAgIGlmIChub3RlcykKLSAg
ICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJub3RlcyJfcywgKm5vdGVzKTsKLSAg
ICAgICAgaWYgKHRpbWVzdGFtcCkKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0RG91Ymxl
KCJ0aW1lc3RhbXAiX3MsICp0aW1lc3RhbXApOwotICAgICAgICBpZiAodmFsdWVzKQotICAgICAg
ICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgWyp2YWx1ZXMgdG9KU09O
T2JqZWN0XSk7Ci0gICAgICAgIGlmIChwYXlsb2FkKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0
LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgWypwYXlsb2FkIHRvSlNPTk9iamVjdF0pOwotICAgICAg
ICBpZiAoZGF0YWJhc2VJZCkKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0SW50ZWdlcigi
ZGF0YWJhc2VJZCJfcywgKmRhdGFiYXNlSWQpOwotICAgICAgICBpZiAoc3FsRXJyb3IpCi0gICAg
ICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIFsqc3FsRXJyb3Ig
dG9KU09OT2JqZWN0XSk7Ci0gICAgICAgIGlmIChzY3JlZW5Db2xvcikKLSAgICAgICAgICAgIHJl
c3VsdE9iamVjdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgdG9Qcm90b2NvbFN0cmluZygq
c2NyZWVuQ29sb3IpKTsKLSAgICAgICAgaWYgKGFsdGVybmF0ZUNvbG9ycykKLSAgICAgICAgICAg
IHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5n
QXJyYXkoKmFsdGVybmF0ZUNvbG9ycykpOwotICAgICAgICBpZiAocHJpbnRDb2xvcikKLSAgICAg
ICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCB0b1Byb3RvY29s
U3RyaW5nKCpwcmludENvbG9yKSk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRS
ZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0T2JqZWN0KSwgZmFsc2UpOwotICAgIH07
Ci0KLSAgICBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKm9faW5fY29sdW1uTmFtZXM7Ci0gICAgaWYg
KGluX2NvbHVtbk5hbWVzKQotICAgICAgICBvX2luX2NvbHVtbk5hbWVzID0gdG9PYmpDU3RyaW5n
QXJyYXkoaW5fY29sdW1uTmFtZXMpOwotICAgIE5TU3RyaW5nICpvX2luX25vdGVzOwotICAgIGlm
IChpbl9ub3RlcykKLSAgICAgICAgb19pbl9ub3RlcyA9ICppbl9ub3RlczsKLSAgICBkb3VibGUg
b19pbl90aW1lc3RhbXA7Ci0gICAgaWYgKGluX3RpbWVzdGFtcCkKLSAgICAgICAgb19pbl90aW1l
c3RhbXAgPSAqaW5fdGltZXN0YW1wOwotICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb19pbl92
YWx1ZXM7Ci0gICAgaWYgKGluX3ZhbHVlcykKLSAgICAgICAgb19pbl92YWx1ZXMgPSBbW1tSV0lQ
cm90b2NvbEpTT05PYmplY3QgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDppbl92YWx1ZXNdIGF1
dG9yZWxlYXNlXTsKLSAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9faW5fcGF5bG9hZDsKLSAg
ICBpZiAoaW5fcGF5bG9hZCkKLSAgICAgICAgb19pbl9wYXlsb2FkID0gW1tbUldJUHJvdG9jb2xK
U09OT2JqZWN0IGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6aW5fcGF5bG9hZF0gYXV0b3JlbGVh
c2VdOwotICAgIGludCBvX2luX2RhdGFiYXNlSWQ7Ci0gICAgaWYgKGluX2RhdGFiYXNlSWQpCi0g
ICAgICAgIG9faW5fZGF0YWJhc2VJZCA9ICppbl9kYXRhYmFzZUlkOwotICAgIFRlc3RQcm90b2Nv
bERhdGFiYXNlRXJyb3IgKm9faW5fc3FsRXJyb3I7Ci0gICAgaWYgKGluX3NxbEVycm9yKQotICAg
ICAgICBvX2luX3NxbEVycm9yID0gW1tbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBhbGxvY10g
aW5pdFdpdGhKU09OT2JqZWN0OmluX3NxbEVycm9yXSBhdXRvcmVsZWFzZV07Ci0gICAgT3B0aW9u
YWw8VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzPiBvX2luX3NjcmVlbkNvbG9yOwot
ICAgIGlmIChpbl9zY3JlZW5Db2xvcikKLSAgICAgICAgb19pbl9zY3JlZW5Db2xvciA9IGZyb21Q
cm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnM+KCppbl9zY3Jl
ZW5Db2xvcik7Ci0gICAgTlNBcnJheS8qPE5TU3RyaW5nPiovICpvX2luX2FsdGVybmF0ZUNvbG9y
czsKLSAgICBpZiAoaW5fYWx0ZXJuYXRlQ29sb3JzKQotICAgICAgICBvX2luX2FsdGVybmF0ZUNv
bG9ycyA9IHRvT2JqQ1N0cmluZ0FycmF5KGluX2FsdGVybmF0ZUNvbG9ycyk7Ci0gICAgT3B0aW9u
YWw8VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRD
b2xvcj4gb19pbl9wcmludENvbG9yOwotICAgIGlmIChpbl9wcmludENvbG9yKQotICAgICAgICBv
X2luX3ByaW50Q29sb3IgPSBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sRGF0YWJhc2VF
eGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvcj4oKmluX3ByaW50Q29sb3IpOwot
Ci0gICAgW21fZGVsZWdhdGUgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1dpdGhFcnJvckNh
bGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjayBjb2x1
bW5OYW1lczooaW5fY29sdW1uTmFtZXMgPyAmb19pbl9jb2x1bW5OYW1lcyA6IG5pbCkgbm90ZXM6
KGluX25vdGVzID8gJm9faW5fbm90ZXMgOiBuaWwpIHRpbWVzdGFtcDooaW5fdGltZXN0YW1wID8g
Jm9faW5fdGltZXN0YW1wIDogbmlsKSB2YWx1ZXM6KGluX3ZhbHVlcyA/ICZvX2luX3ZhbHVlcyA6
IG5pbCkgcGF5bG9hZDooaW5fcGF5bG9hZCA/ICZvX2luX3BheWxvYWQgOiBuaWwpIGRhdGFiYXNl
SWQ6KGluX2RhdGFiYXNlSWQgPyAmb19pbl9kYXRhYmFzZUlkIDogbmlsKSBzcWxFcnJvcjooaW5f
c3FsRXJyb3IgPyAmb19pbl9zcWxFcnJvciA6IG5pbCkgc2NyZWVuQ29sb3I6KGluX3NjcmVlbkNv
bG9yID8gJm9faW5fc2NyZWVuQ29sb3IudmFsdWUoKSA6IG5pbCkgYWx0ZXJuYXRlQ29sb3JzOihp
bl9hbHRlcm5hdGVDb2xvcnMgPyAmb19pbl9hbHRlcm5hdGVDb2xvcnMgOiBuaWwpIHByaW50Q29s
b3I6KGluX3ByaW50Q29sb3IgPyAmb19pbl9wcmludENvbG9yLnZhbHVlKCkgOiBuaWwpXTsKLX0K
LQotdm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZU5v
T3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBjb25zdCBKU09OOjpBcnJheSYgaW5f
Y29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgaW5fbm90ZXMsIGRvdWJsZSBpbl90aW1lc3RhbXAs
IGNvbnN0IEpTT046Ok9iamVjdCYgaW5fdmFsdWVzLCBKU09OOjpWYWx1ZSBpbl9wYXlsb2FkLCBp
bnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgSlNPTjo6T2JqZWN0JiBpbl9zcWxFcnJvciwgY29uc3Qg
U3RyaW5nJiBpbl9zY3JlZW5Db2xvciwgY29uc3QgSlNPTjo6QXJyYXkmIGluX2FsdGVybmF0ZUNv
bG9ycywgY29uc3QgU3RyaW5nJiBpbl9wcmludENvbG9yKQotewotICAgIGlmICghW21fZGVsZWdh
dGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRl
cnNXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6Y29sdW1uTmFtZXM6bm90ZXM6dGlt
ZXN0YW1wOnZhbHVlczpwYXlsb2FkOmRhdGFiYXNlSWQ6c3FsRXJyb3I6c2NyZWVuQ29sb3I6YWx0
ZXJuYXRlQ29sb3JzOnByaW50Q29sb3I6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRo
b2ROb3RGb3VuZCwgIidEYXRhYmFzZS5leGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMnIHdhcyBu
b3QgZm91bmQiX3MpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vy
cm9ycygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWQgZXJyb3JDYWxsYmFjayA9
IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9y
dFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3Is
IGVycm9yKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMo
KTsKLSAgICB9OwotCi0gICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihOU0FycmF5Lyo8TlNTdHJp
bmc+Ki8gKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJX
SVByb3RvY29sSlNPTk9iamVjdCAqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnBheWxv
YWQsIGludCBkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpzcWxFcnJvciwg
VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzIHNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8
TlNTdHJpbmc+Ki8gKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRl
Tm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yIHByaW50Q29sb3IpIHsKLSAgICAgICAgUmVm
PEpTT046Ok9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAg
ICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoY29sdW1uTmFtZXMs
IEAiY29sdW1uTmFtZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9Q
QVJBTUVURVIobm90ZXMsIEAibm90ZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9S
RVFVSVJFRF9QQVJBTUVURVIodmFsdWVzLCBAInZhbHVlcyIpOwotICAgICAgICBUSFJPV19FWENF
UFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihwYXlsb2FkLCBAInBheWxvYWQiKTsKLSAgICAg
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoc3FsRXJyb3IsIEAic3Fs
RXJyb3IiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIo
YWx0ZXJuYXRlQ29sb3JzLCBAImFsdGVybmF0ZUNvbG9ycyIpOwotICAgICAgICByZXN1bHRPYmpl
Y3QtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgdG9KU09OU3RyaW5nQXJyYXkoY29sdW1uTmFt
ZXMpKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBub3Rlcyk7
Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIHRpbWVzdGFt
cCk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFt2YWx1ZXMg
dG9KU09OT2JqZWN0XSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0VmFsdWUoInBheWxvYWQi
X3MsIFtwYXlsb2FkIHRvSlNPTk9iamVjdF0pOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldElu
dGVnZXIoImRhdGFiYXNlSWQiX3MsIGRhdGFiYXNlSWQpOwotICAgICAgICByZXN1bHRPYmplY3Qt
PnNldE9iamVjdCgic3FsRXJyb3IiX3MsIFtzcWxFcnJvciB0b0pTT05PYmplY3RdKTsKLSAgICAg
ICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCB0b1Byb3RvY29sU3Ry
aW5nKHNjcmVlbkNvbG9yKSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoImFsdGVy
bmF0ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5nQXJyYXkoYWx0ZXJuYXRlQ29sb3JzKSk7Ci0gICAg
ICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCB0b1Byb3RvY29sU3Ry
aW5nKHByaW50Q29sb3IpKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3Bv
bnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHRPYmplY3QpLCBmYWxzZSk7Ci0gICAgfTsKLQot
ICAgIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqb19pbl9jb2x1bW5OYW1lcyA9IHRvT2JqQ1N0cmlu
Z0FycmF5KCZpbl9jb2x1bW5OYW1lcyk7Ci0gICAgTlNTdHJpbmcgKm9faW5fbm90ZXMgPSBpbl9u
b3RlczsKLSAgICBkb3VibGUgb19pbl90aW1lc3RhbXAgPSBpbl90aW1lc3RhbXA7Ci0gICAgUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICpvX2luX3ZhbHVlcyA9IFtbW1JXSVByb3RvY29sSlNPTk9iamVj
dCBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0OiZpbl92YWx1ZXNdIGF1dG9yZWxlYXNlXTsKLSAg
ICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9faW5fcGF5bG9hZCA9IFtbW1JXSVByb3RvY29sSlNP
Tk9iamVjdCBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0OiZpbl9wYXlsb2FkXSBhdXRvcmVsZWFz
ZV07Ci0gICAgaW50IG9faW5fZGF0YWJhc2VJZCA9IGluX2RhdGFiYXNlSWQ7Ci0gICAgVGVzdFBy
b3RvY29sRGF0YWJhc2VFcnJvciAqb19pbl9zcWxFcnJvciA9IFtbW1Rlc3RQcm90b2NvbERhdGFi
YXNlRXJyb3IgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDomaW5fc3FsRXJyb3JdIGF1dG9yZWxl
YXNlXTsKLSAgICBPcHRpb25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnM+IG9f
aW5fc2NyZWVuQ29sb3IgPSBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sRGF0YWJhc2VQ
cmltYXJ5Q29sb3JzPihpbl9zY3JlZW5Db2xvcik7Ci0gICAgaWYgKCFvX2luX3NjcmVlbkNvbG9y
KSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IoQmFj
a2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsICJQYXJhbWV0ZXIgJ3NjcmVlbkNvbG9yJyBv
ZiBtZXRob2QgJ0RhdGFiYXNlLmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycycgY2Fubm90IGJl
IHByb2Nlc3NlZCJfcyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgTlNBcnJheS8qPE5T
U3RyaW5nPiovICpvX2luX2FsdGVybmF0ZUNvbG9ycyA9IHRvT2JqQ1N0cmluZ0FycmF5KCZpbl9h
bHRlcm5hdGVDb2xvcnMpOwotICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0
ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvcj4gb19pbl9wcmludENvbG9yID0gZnJvbVBy
b3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0
ZXJzUHJpbnRDb2xvcj4oaW5fcHJpbnRDb2xvcik7Ci0gICAgaWYgKCFvX2luX3ByaW50Q29sb3Ip
IHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNr
ZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgIlBhcmFtZXRlciAncHJpbnRDb2xvcicgb2Yg
bWV0aG9kICdEYXRhYmFzZS5leGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMnIGNhbm5vdCBiZSBw
cm9jZXNzZWQiX3MpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgW21fZGVsZWdhdGUg
ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFj
ayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrIGNvbHVtbk5hbWVzOm9faW5fY29sdW1u
TmFtZXMgbm90ZXM6b19pbl9ub3RlcyB0aW1lc3RhbXA6b19pbl90aW1lc3RhbXAgdmFsdWVzOm9f
aW5fdmFsdWVzIHBheWxvYWQ6b19pbl9wYXlsb2FkIGRhdGFiYXNlSWQ6b19pbl9kYXRhYmFzZUlk
IHNxbEVycm9yOm9faW5fc3FsRXJyb3Igc2NyZWVuQ29sb3I6b19pbl9zY3JlZW5Db2xvci52YWx1
ZSgpIGFsdGVybmF0ZUNvbG9yczpvX2luX2FsdGVybmF0ZUNvbG9ycyBwcmludENvbG9yOm9faW5f
cHJpbnRDb2xvci52YWx1ZSgpXTsKLX0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQot
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1l
dGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNp
bXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KLQotX19hdHRyaWJ1dGVfXygodmlz
aWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRp
b24gOiBOU09iamVjdAotQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNldERh
dGFiYXNlSGFuZGxlcjopIGlkPFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4gZGF0
YWJhc2VIYW5kbGVyOwotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbi5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1t
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25h
bC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgot
Ci0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29s
QmFja2VuZERpc3BhdGNoZXJzLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVE
aXNwYXRjaGFibGVBZ2VudC5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJ
bnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9y
OwotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgotewotICAgIEF1
Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci0gICAgaWQ8VGVzdFBy
b3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyPiBfZGF0YWJhc2VIYW5kbGVyOwotfQotCi0tIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRy
b2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICgh
c2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAg
X2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lk
KWRlYWxsb2MKLXsKLSAgICBbX2RhdGFiYXNlSGFuZGxlciByZWxlYXNlXTsKLSAgICBbc3VwZXIg
ZGVhbGxvY107Ci19Ci0KLS0gKHZvaWQpc2V0RGF0YWJhc2VIYW5kbGVyOihpZDxUZXN0UHJvdG9j
b2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+KWhhbmRsZXIKLXsKLSAgICBpZiAoaGFuZGxlciA9PSBf
ZGF0YWJhc2VIYW5kbGVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBbX2RhdGFiYXNlSGFuZGxl
ciByZWxlYXNlXTsKLSAgICBfZGF0YWJhc2VIYW5kbGVyID0gW2hhbmRsZXIgcmV0YWluXTsKLQot
ICAgIGF1dG8gYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IG1ha2VVbmlxdWU8T2JqQ0luc3BlY3RvckRh
dGFiYXNlQmFja2VuZERpc3BhdGNoZXI+KGhhbmRsZXIpOwotICAgIGF1dG8gYWx0ZXJuYXRlQWdl
bnQgPSBtYWtlVW5pcXVlPEFsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50PERhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXIsIEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+PigiRGF0YWJh
c2UiX3MsICpfY29udHJvbGxlciwgV1RGTW92ZShhbHRlcm5hdGVEaXNwYXRjaGVyKSk7Ci0gICAg
X2NvbnRyb2xsZXItPmFwcGVuZEV4dHJhQWdlbnQoV1RGTW92ZShhbHRlcm5hdGVBZ2VudCkpOwot
fQotCi0tIChpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+KWRhdGFiYXNlSGFu
ZGxlcgotewotICAgIHJldHVybiBfZGF0YWJhc2VIYW5kbGVyOwotfQotCi1AZW5kCi0KLQotIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJz
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9y
dCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLmgiCi0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yOwotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRj
aGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBh
cmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2ltcG9ydCA8V2ViSW5zcGVj
dG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgotCi0KLUBjbGFzcyBUZXN0UHJvdG9jb2xEYXRh
YmFzZUVycm9yOwotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xQbGF0
Zm9ybSkgewotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsLAotICAgIFRlc3RQcm90b2NvbFBs
YXRmb3JtR2VuZXJpYywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUywKLSAgICBUZXN0UHJv
dG9jb2xQbGF0Zm9ybU1hY09TLAotfTsKLQotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBU
ZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMpIHsKLSAgICBUZXN0UHJvdG9jb2xEYXRh
YmFzZVByaW1hcnlDb2xvcnNSZWQsCi0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29s
b3JzR3JlZW4sCi0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzQmx1ZSwKLX07
Ci0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0
ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IpIHsKLSAgICBUZXN0UHJvdG9jb2xEYXRh
YmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQ3lhbiwKLSAgICBUZXN0
UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yTWFn
ZW50YSwKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRl
cnNQcmludENvbG9yWWVsbG93LAotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9w
dGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JCbGFjaywKLX07Ci0KLXR5cGVkZWYgTlNfRU5VTShO
U0ludGVnZXIsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVy
c1ByaW50Q29sb3IpIHsKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25h
bFBhcmFtZXRlcnNQcmludENvbG9yQ3lhbiwKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yTWFnZW50YSwKLSAgICBUZXN0UHJvdG9j
b2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yWWVsbG93LAot
ICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50
Q29sb3JCbGFjaywKLX07Ci0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2Nv
bERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvcikgewotICAgIFRl
c3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckN5
YW4sCi0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQ
cmludENvbG9yTWFnZW50YSwKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlv
bmFsUGFyYW1ldGVyc1ByaW50Q29sb3JZZWxsb3csCi0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VF
eGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQmxhY2ssCi19OwotCi10eXBlZGVm
IE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFs
UGFyYW1ldGVyc1ByaW50Q29sb3IpIHsKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVO
b09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JDeWFuLAotICAgIFRlc3RQcm90b2NvbERhdGFi
YXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvck1hZ2VudGEsCi0gICAgVGVz
dFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yWWVs
bG93LAotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJz
UHJpbnRDb2xvckJsYWNrLAotfTsKLQotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVm
YXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciA6IFJXSVByb3Rv
Y29sSlNPTk9iamVjdAotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9u
YXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQ7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQ
cm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKLS0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBjb2RlOihpbnQp
Y29kZTsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmlu
ZyAqbWVzc2FnZTsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24p
IGludCBjb2RlOwotQGVuZAotCi1AcHJvdG9jb2wgVGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5I
YW5kbGVyIDxOU09iamVjdD4KLUBvcHRpb25hbAotLSAodm9pZClleGVjdXRlQWxsT3B0aW9uYWxQ
YXJhbWV0ZXJzV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJv
ckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKShOU0FycmF5Lyo8TlNTdHJpbmc+Ki8g
Kipjb2x1bW5OYW1lcywgTlNTdHJpbmcgKipub3RlcywgZG91YmxlICp0aW1lc3RhbXAsIFJXSVBy
b3RvY29sSlNPTk9iamVjdCAqKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqcGF5bG9h
ZCwgaW50ICpkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqc3FsRXJyb3Is
IFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqc2NyZWVuQ29sb3IsIE5TQXJyYXkv
KjxOU1N0cmluZz4qLyAqKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVj
dXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvciAqcHJpbnRDb2xvcikpc3VjY2Vzc0Nh
bGxiYWNrIGNvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopY29sdW1uTmFtZXMg
bm90ZXM6KE5TU3RyaW5nICoqKW5vdGVzIHRpbWVzdGFtcDooZG91YmxlICopdGltZXN0YW1wIHZh
bHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqKXZhbHVlcyBwYXlsb2FkOihSV0lQcm90b2Nv
bEpTT05PYmplY3QgKiopcGF5bG9hZCBkYXRhYmFzZUlkOihpbnQgKilkYXRhYmFzZUlkIHNxbEVy
cm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqKXNxbEVycm9yIHNjcmVlbkNvbG9yOihU
ZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgKilzY3JlZW5Db2xvciBhbHRlcm5hdGVD
b2xvcnM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKilhbHRlcm5hdGVDb2xvcnMgcHJpbnRDb2xv
cjooVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRD
b2xvciAqKXByaW50Q29sb3I7Ci0tICh2b2lkKWV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1dp
dGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBz
dWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoTlNBcnJheS8qPE5TU3RyaW5nPiovICpjb2x1bW5OYW1l
cywgTlNTdHJpbmcgKm5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmpl
Y3QgKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkLCBpbnQgZGF0YWJhc2VJ
ZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqc3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFi
YXNlUHJpbWFyeUNvbG9ycyBzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICphbHRl
cm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0
ZXJzUHJpbnRDb2xvciBwcmludENvbG9yKSlzdWNjZXNzQ2FsbGJhY2sgY29sdW1uTmFtZXM6KE5T
QXJyYXkvKjxOU1N0cmluZz4qLyAqKWNvbHVtbk5hbWVzIG5vdGVzOihOU1N0cmluZyAqKW5vdGVz
IHRpbWVzdGFtcDooZG91YmxlKXRpbWVzdGFtcCB2YWx1ZXM6KFJXSVByb3RvY29sSlNPTk9iamVj
dCAqKXZhbHVlcyBwYXlsb2FkOihSV0lQcm90b2NvbEpTT05PYmplY3QgKilwYXlsb2FkIGRhdGFi
YXNlSWQ6KGludClkYXRhYmFzZUlkIHNxbEVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9y
ICopc3FsRXJyb3Igc2NyZWVuQ29sb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9y
cylzY3JlZW5Db2xvciBhbHRlcm5hdGVDb2xvcnM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWFs
dGVybmF0ZUNvbG9ycyBwcmludENvbG9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09w
dGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IpcHJpbnRDb2xvcjsKLUBlbmQKLQotCi0KLQotI2lt
cG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5o
PgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xJbnRlcm5hbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29t
bWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29s
LmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgotI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0
IDx3dGYvSlNPTlZhbHVlcy5oPgotCi0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbElu
dGVybmFsLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5o
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25h
bC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0IDxXZWJJ
bnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNw
ZWN0b3IgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+Ci1PcHRpb25hbDxPYmpD
RW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKLQotaW5s
aW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFBsYXRmb3JtIHZhbHVlKQot
ewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1BbGw6
Ci0gICAgICAgIHJldHVybiAiYWxsIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1H
ZW5lcmljOgotICAgICAgICByZXR1cm4gImdlbmVyaWMiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9j
b2xQbGF0Zm9ybUlPUzoKLSAgICAgICAgcmV0dXJuICJpb3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJv
dG9jb2xQbGF0Zm9ybU1hY09TOgotICAgICAgICByZXR1cm4gIm1hY29zIl9zOwotICAgIH0KLX0K
LQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFBsYXRmb3JtPiBmcm9t
UHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0g
ImFsbCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDsKLSAgICBpZiAo
dmFsdWUgPT0gImdlbmVyaWMiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1H
ZW5lcmljOwotICAgIGlmICh2YWx1ZSA9PSAiaW9zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90
b2NvbFBsYXRmb3JtSU9TOwotICAgIGlmICh2YWx1ZSA9PSAibWFjb3MiKQotICAgICAgICByZXR1
cm4gVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0Owot
fQotCi0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFz
ZVByaW1hcnlDb2xvcnMgdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBU
ZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNSZWQ6Ci0gICAgICAgIHJldHVybiAicmVk
Il9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzR3JlZW46Ci0g
ICAgICAgIHJldHVybiAiZ3JlZW4iX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZVBy
aW1hcnlDb2xvcnNCbHVlOgotICAgICAgICByZXR1cm4gImJsdWUiX3M7Ci0gICAgfQotfQotCi10
ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29s
b3JzPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAo
dmFsdWUgPT0gInJlZCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1h
cnlDb2xvcnNSZWQ7Ci0gICAgaWYgKHZhbHVlID09ICJncmVlbiIpCi0gICAgICAgIHJldHVybiBU
ZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNHcmVlbjsKLSAgICBpZiAodmFsdWUgPT0g
ImJsdWUiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3Jz
Qmx1ZTsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi1pbmxpbmUgU3RyaW5nIHRvUHJv
dG9jb2xTdHJpbmcoVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0
ZXJzUHJpbnRDb2xvciB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBjYXNlIFRl
c3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JD
eWFuOgotICAgICAgICByZXR1cm4gImN5YW4iX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRh
YmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yTWFnZW50YToKLSAgICAg
ICAgcmV0dXJuICJtYWdlbnRhIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVj
dXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvclllbGxvdzoKLSAgICAgICAgcmV0dXJu
ICJ5ZWxsb3ciX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRp
b25hbFBhcmFtZXRlcnNQcmludENvbG9yQmxhY2s6Ci0gICAgICAgIHJldHVybiAiYmxhY2siX3M7
Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0
YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvcj4gZnJvbVByb3RvY29s
U3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJjeWFuIikK
LSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFy
YW1ldGVyc1ByaW50Q29sb3JDeWFuOwotICAgIGlmICh2YWx1ZSA9PSAibWFnZW50YSIpCi0gICAg
ICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRl
cnNQcmludENvbG9yTWFnZW50YTsKLSAgICBpZiAodmFsdWUgPT0gInllbGxvdyIpCi0gICAgICAg
IHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQ
cmludENvbG9yWWVsbG93OwotICAgIGlmICh2YWx1ZSA9PSAiYmxhY2siKQotICAgICAgICByZXR1
cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRD
b2xvckJsYWNrOwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLWlubGluZSBTdHJpbmcg
dG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBh
cmFtZXRlcnNQcmludENvbG9yIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNh
c2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRD
b2xvckN5YW46Ci0gICAgICAgIHJldHVybiAiY3lhbiJfczsKLSAgICBjYXNlIFRlc3RQcm90b2Nv
bERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JNYWdlbnRhOgot
ICAgICAgICByZXR1cm4gIm1hZ2VudGEiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFz
ZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yWWVsbG93OgotICAgICAgICBy
ZXR1cm4gInllbGxvdyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFs
bE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JCbGFjazoKLSAgICAgICAgcmV0dXJuICJibGFj
ayJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJvdG9j
b2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yPiBmcm9tUHJv
dG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gImN5
YW4iKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9u
YWxQYXJhbWV0ZXJzUHJpbnRDb2xvckN5YW47Ci0gICAgaWYgKHZhbHVlID09ICJtYWdlbnRhIikK
LSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFy
YW1ldGVyc1ByaW50Q29sb3JNYWdlbnRhOwotICAgIGlmICh2YWx1ZSA9PSAieWVsbG93IikKLSAg
ICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1l
dGVyc1ByaW50Q29sb3JZZWxsb3c7Ci0gICAgaWYgKHZhbHVlID09ICJibGFjayIpCi0gICAgICAg
IHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQ
cmludENvbG9yQmxhY2s7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotaW5saW5lIFN0
cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9u
YWxQYXJhbWV0ZXJzUHJpbnRDb2xvciB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAg
ICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJp
bnRDb2xvckN5YW46Ci0gICAgICAgIHJldHVybiAiY3lhbiJfczsKLSAgICBjYXNlIFRlc3RQcm90
b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvck1hZ2VudGE6
Ci0gICAgICAgIHJldHVybiAibWFnZW50YSJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFi
YXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvclllbGxvdzoKLSAgICAgICAg
cmV0dXJuICJ5ZWxsb3ciX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVO
b09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JCbGFjazoKLSAgICAgICAgcmV0dXJuICJibGFj
ayJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJvdG9j
b2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3I+IGZyb21Qcm90
b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiY3lh
biIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFs
UGFyYW1ldGVyc1ByaW50Q29sb3JDeWFuOwotICAgIGlmICh2YWx1ZSA9PSAibWFnZW50YSIpCi0g
ICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1l
dGVyc1ByaW50Q29sb3JNYWdlbnRhOwotICAgIGlmICh2YWx1ZSA9PSAieWVsbG93IikKLSAgICAg
ICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJz
UHJpbnRDb2xvclllbGxvdzsKLSAgICBpZiAodmFsdWUgPT0gImJsYWNrIikKLSAgICAgICAgcmV0
dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRD
b2xvckJsYWNrOwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLWlubGluZSBTdHJpbmcg
dG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFy
YW1ldGVyc1ByaW50Q29sb3IgdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2Fz
ZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29s
b3JDeWFuOgotICAgICAgICByZXR1cm4gImN5YW4iX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xE
YXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JNYWdlbnRhOgotICAg
ICAgICByZXR1cm4gIm1hZ2VudGEiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JZZWxsb3c6Ci0gICAgICAgIHJldHVy
biAieWVsbG93Il9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRp
b25hbFBhcmFtZXRlcnNQcmludENvbG9yQmxhY2s6Ci0gICAgICAgIHJldHVybiAiYmxhY2siX3M7
Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0
YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yPiBmcm9tUHJvdG9jb2xT
dHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gImN5YW4iKQot
ICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFt
ZXRlcnNQcmludENvbG9yQ3lhbjsKLSAgICBpZiAodmFsdWUgPT0gIm1hZ2VudGEiKQotICAgICAg
ICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQ
cmludENvbG9yTWFnZW50YTsKLSAgICBpZiAodmFsdWUgPT0gInllbGxvdyIpCi0gICAgICAgIHJl
dHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50
Q29sb3JZZWxsb3c7Ci0gICAgaWYgKHZhbHVlID09ICJibGFjayIpCi0gICAgICAgIHJldHVybiBU
ZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JC
bGFjazsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVy
bi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0KLSNpbXBvcnQg
IlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgotI2lt
cG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLQotdXNp
bmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMgKERhdGFiYXNlRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZURhdGFiYXNlSWQ6KE5T
TnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotKyAodm9pZClfcGFy
c2VQcmltYXJ5Q29sb3JzOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5
bG9hZDsKLSsgKHZvaWQpX3BhcnNlQ29sb3JMaXN0OihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiop
b3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZUVycm9yOihU
ZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXls
b2FkOwotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMgKERhdGFiYXNlRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZURhdGFiYXNlSWQ6KE5TTnVtYmVy
ICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNOdW1iZXIgY2xhc3NdKTsKLSAgICAqb3V0VmFs
dWUgPSAoTlNOdW1iZXIgKilwYXlsb2FkOwotfQotCi0rICh2b2lkKV9wYXJzZVByaW1hcnlDb2xv
cnM6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsK
LSAgICBPcHRpb25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnM+IHJlc3VsdCA9
IEluc3BlY3Rvcjo6ZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFy
eUNvbG9ycz4ocGF5bG9hZCk7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfRU5VTV9WQUxV
RShyZXN1bHQsIEAiUHJpbWFyeUNvbG9ycyIpOwotICAgICpvdXRWYWx1ZSA9IEAocmVzdWx0LnZh
bHVlKCkpOwotfQotCi0rICh2b2lkKV9wYXJzZUNvbG9yTGlzdDooTlNBcnJheS8qPE5TU3RyaW5n
PiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNBcnJheS8qPE5TU3RyaW5nPiovIGNsYXNz
XSk7Ci0gICAgKm91dFZhbHVlID0gKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKXBheWxvYWQ7Ci19
Ci0KLSsgKHZvaWQpX3BhcnNlRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKiopb3V0
VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9S
X0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUg
PSBbW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXls
b2FkXTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1y
ZXR1cm4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVBy
b3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLSNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0j
aW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwot
Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yCi0KLS0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICos
IGlkPiAqKXBheWxvYWQKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAg
ICAgcmV0dXJuIG5pbDsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVS
VFkocGF5bG9hZFtAIm1lc3NhZ2UiXSwgQCJtZXNzYWdlIik7Ci0gICAgc2VsZi5tZXNzYWdlID0g
cGF5bG9hZFtAIm1lc3NhZ2UiXTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURf
UFJPUEVSVFkocGF5bG9hZFtAImNvZGUiXSwgQCJjb2RlIik7Ci0gICAgc2VsZi5jb2RlID0gW3Bh
eWxvYWRbQCJjb2RlIl0gaW50ZWdlclZhbHVlXTsKLQotICAgIHJldHVybiBzZWxmOwotfQotLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVj
dCAqKW9iamVjdAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0
OltvYmplY3QgdG9KU09OT2JqZWN0XS5nZXQoKV0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0g
ICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6KE5T
U3RyaW5nICopbWVzc2FnZSBjb2RlOihpbnQpY29kZQotewotICAgIGlmICghKHNlbGYgPSBbc3Vw
ZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9SRVFVSVJFRF9QUk9QRVJUWShtZXNzYWdlLCBAIm1lc3NhZ2UiKTsKLQotICAgIHNlbGYubWVz
c2FnZSA9IG1lc3NhZ2U7Ci0gICAgc2VsZi5jb2RlID0gY29kZTsKLQotICAgIHJldHVybiBzZWxm
OwotfQotCi0tICh2b2lkKXNldE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZQotewotICAgIFtz
dXBlciBzZXRTdHJpbmc6bWVzc2FnZSBmb3JLZXk6QCJtZXNzYWdlIl07Ci19Ci0KLS0gKE5TU3Ry
aW5nICopbWVzc2FnZQotewotICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAibWVzc2Fn
ZSJdOwotfQotCi0tICh2b2lkKXNldENvZGU6KGludCljb2RlCi17Ci0gICAgW3N1cGVyIHNldElu
dGVnZXI6Y29kZSBmb3JLZXk6QCJjb2RlIl07Ci19Ci0KLS0gKGludCljb2RlCi17Ci0gICAgcmV0
dXJuIFtzdXBlciBpbnRlZ2VyRm9yS2V5OkAiY29kZSJdOwotfQotCi1AZW5kCi0KLQotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZGVmaW5pdGlv
bnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9kZWZpbml0aW9ucy13aXRo
LW1hYy1wbGF0Zm9ybS5qc29uLXJlc3VsdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ZDRjMGZlM2ZlM2MuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2RlZmluaXRpb25zLXdpdGgtbWFj
LXBsYXRmb3JtLmpzb24tcmVzdWx0CisrKyAvZGV2L251bGwKQEAgLTEsODcwICswLDAgQEAKLSMj
IyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0jIyMgRW5kIEZpbGU6IElu
c3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
ZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMu
aCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5o
PgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0K
LW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hl
ciB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2Vu
ZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92
ZShkaXNwYXRjaGVyKTsgfQotICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hl
cigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KLXByaXZhdGU6
Ci0gICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwotfTsK
LQotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3Bh
dGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13
aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5o
IgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewotCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZh
bHVlcy5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENI
RVJTKQotI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNlbmRp
ZgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgotCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1
ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsK
LQotY2xhc3MgRnJvbnRlbmRSb3V0ZXI7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMj
IEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQot
IyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2Vy
dGlvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi1uYW1lc3BhY2UgUHJvdG9j
b2wgewotCi0KLQotCi0KLQotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAot
Ci0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0KLSNpbmNsdWRlIDx3dGYv
T3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJ
bnNwZWN0b3IgewotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotfSAvLyBuYW1lc3BhY2Ug
UHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sT2JqZWN0cy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tl
bmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5p
dGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJu
YXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi0K
LQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0K
LSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29u
ZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLQotbmFtZXNwYWNl
IEluc3BlY3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3Rv
Y29sLmg+Ci0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVy
ZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKLUBlbmQKLQotCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbi5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2ltcG9ydCAi
VGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgotCi11c2luZyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yOwotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
bgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci19
Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVj
dG9yQ29udHJvbGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0g
ICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVy
KTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0K
LS0gKHZvaWQpZGVhbGxvYwotewotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotQGVuZAotCi0K
LSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgi
Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9y
OwotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRh
dGlvbi5oPgotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+
Ci0KLQotCi0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbFBsYXRmb3Jt
KSB7Ci0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1BbGwsCi0gICAgVGVzdFByb3RvY29sUGxhdGZv
cm1HZW5lcmljLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TLAotICAgIFRlc3RQcm90b2Nv
bFBsYXRmb3JtTWFjT1MsCi19OwotCi0KLQotCi0KLQotCi0KLQotCi0jaW1wb3J0IDxXZWJJbnNw
ZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+Ci0KLSMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVy
bmFsLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRo
LW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sSlNP
Tk9iamVjdFByaXZhdGUuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5z
cGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotCi0KLQot
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0j
aW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+Ci0KLW5h
bWVzcGFjZSBJbnNwZWN0b3IgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+Ci1P
cHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZh
bHVlKTsKLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFBsYXRm
b3JtIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29s
UGxhdGZvcm1BbGw6Ci0gICAgICAgIHJldHVybiAiYWxsIl9zOwotICAgIGNhc2UgVGVzdFByb3Rv
Y29sUGxhdGZvcm1HZW5lcmljOgotICAgICAgICByZXR1cm4gImdlbmVyaWMiX3M7Ci0gICAgY2Fz
ZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzoKLSAgICAgICAgcmV0dXJuICJpb3MiX3M7Ci0gICAg
Y2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOgotICAgICAgICByZXR1cm4gIm1hY29zIl9z
OwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFBs
YXRmb3JtPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBp
ZiAodmFsdWUgPT0gImFsbCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFs
bDsKLSAgICBpZiAodmFsdWUgPT0gImdlbmVyaWMiKQotICAgICAgICByZXR1cm4gVGVzdFByb3Rv
Y29sUGxhdGZvcm1HZW5lcmljOwotICAgIGlmICh2YWx1ZSA9PSAiaW9zIikKLSAgICAgICAgcmV0
dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOwotICAgIGlmICh2YWx1ZSA9PSAibWFjb3MiKQot
ICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzsKLSAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2xUeXBlUGFyc2VyLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2Jq
ZWN0UHJpdmF0ZS5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLQotCi0KLQot
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5h
bC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQg
PFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0jaW1wb3J0IDx3
dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFt
ZXNwYWNlIEluc3BlY3RvcjsKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1t
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZ2VuZXJpYy9leHBlY3RlZC9kb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24tcmVzdWx0IGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhw
ZWN0ZWQvZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uLXJlc3VsdApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggZjViNTkxN2FhMGIuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2RvbWFp
bi1kZWJ1Z2dhYmxlVHlwZXMuanNvbi1yZXN1bHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMDYzICsw
LDAgQEAKLSMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotLy8gRG9tYWluCi1J
bnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJEb21haW4iLCBudWxsKTsKLUluc3BlY3Rv
ckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJEb21haW4uQ29tbWFuZCIsIG51bGwsIFtdLCBbXSk7
Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnQoIkRvbWFpbi5FdmVudCIsIG51bGwsIFtd
KTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW5EaXNwYXRjaGVyID0gSW5zcGVjdG9y
QmFja2VuZC5yZWdpc3RlckRpc3BhdGNoZXIuYmluZChJbnNwZWN0b3JCYWNrZW5kLCAiRG9tYWlu
Iik7Ci1JbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJEb21haW4iLCBbIndlYi1wYWdl
Il0pOwotIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2lm
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi0jaW5jbHVkZSAiVGVz
dFByb3RvY29sVHlwZXMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250
ZW5kUm91dGVyLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hl
cihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNw
YXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQotICAgIEJhY2tlbmREaXNwYXRjaGVyKiBi
YWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0
KCk7IH0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmRE
aXNwYXRjaGVyOwotfTsKLQotCi1jbGFzcyBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hl
ciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdmly
dHVhbCB+QWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIoKSB7IH0KLSAgICB2aXJ0dWFs
IHZvaWQgQ29tbWFuZChsb25nIGNhbGxJZCkgPSAwOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKLSMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMj
IyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRl
ICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
LQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwot
Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi1jbGFzcyBBbHRl
cm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjsKLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQotY2xhc3MgRG9tYWluQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChFcnJvclN0cmluZyYp
ID0gMDsKLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIH5Eb21haW5CYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXIoKTsKLX07Ci0KLWNsYXNzIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVi
bGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMg
UmVmPERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBE
b21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICB2b2lkIGRpc3BhdGNoKGxvbmcg
cmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNz
YWdlKSBmaW5hbDsKLXByaXZhdGU6Ci0gICAgdm9pZCBDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwotI2lmIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQotcHVibGljOgotICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlz
cGF0Y2hlcihBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0
Y2hlcikgeyBtX2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9Ci1w
cml2YXRlOgotICAgIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKiBtX2FsdGVybmF0
ZURpc3BhdGNoZXIgeyBudWxscHRyIH07Ci0jZW5kaWYKLXByaXZhdGU6Ci0gICAgRG9tYWluQmFj
a2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIqKTsKLSAgICBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQg
eyBudWxscHRyIH07Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmls
ZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2Vu
ZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFp
bi1kZWJ1Z2dhYmxlVHlwZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNw
YXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRS
b3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi9OZXZl
ckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2lmIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotI2luY2x1ZGUgIlRlc3RBbHRlcm5h
dGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsK
LQotRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+RG9tYWluQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyKCkgeyB9Ci0KLVJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gRG9tYWluQmFj
a2VuZERpc3BhdGNoZXI6OmNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNo
ZXIsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCi17Ci0gICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgRG9tYWluQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIs
IGFnZW50KSk7Ci19Ci0KLURvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpEb21haW5CYWNrZW5kRGlz
cGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIERvbWFpbkJhY2tl
bmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCi0gICAgOiBTdXBwbGVtZW50YWxCYWNrZW5kRGlz
cGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKLSAgICAsIG1fYWdlbnQoYWdlbnQpCi17Ci0gICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKCJEb21haW4i
X3MsIHRoaXMpOwotfQotCi12b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChs
b25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYg
bWVzc2FnZSkKLXsKLSAgICBSZWY8RG9tYWluQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRo
aXMpOwotCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVyczsKLSAgICBtZXNzYWdl
LT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFyYW1ldGVycyk7Ci0KLSAgICBpZiAobWV0aG9kID09
ICJDb21tYW5kIikKLSAgICAgICAgQ29tbWFuZChyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVy
cykpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9j
b2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRG9tYWluLiIgKyBt
ZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7Ci19Ci0KLXZvaWQgRG9tYWluQmFja2VuZERpc3Bh
dGNoZXI6OkNvbW1hbmQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCi17
Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0gICAgaWYgKG1f
YWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPkNv
bW1hbmQocmVxdWVzdElkKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAg
RXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtX2FnZW50LT5Db21tYW5kKGVycm9yKTsKLQotICAgIGlm
ICghZXJyb3IubGVuZ3RoKCkpCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNw
b25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0
Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLQot
IyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNs
dWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7
Ci0KLWNsYXNzIEZyb250ZW5kUm91dGVyOwotCi1jbGFzcyBEb21haW5Gcm9udGVuZERpc3BhdGNo
ZXIgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIERvbWFpbkZy
b250ZW5kRGlzcGF0Y2hlcihGcm9udGVuZFJvdXRlciYgZnJvbnRlbmRSb3V0ZXIpIDogbV9mcm9u
dGVuZFJvdXRlcihmcm9udGVuZFJvdXRlcikgeyB9Ci0gICAgdm9pZCBFdmVudCgpOwotcHJpdmF0
ZToKLSAgICBGcm9udGVuZFJvdXRlciYgbV9mcm9udGVuZFJvdXRlcjsKLX07Ci0KLX0gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5o
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXZvaWQgRG9tYWluRnJv
bnRlbmREaXNwYXRjaGVyOjpFdmVudCgpCi17Ci0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1l
c3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJp
bmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7Ci0KLSAgICBtX2Zyb250ZW5kUm91dGVy
LnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwotfQotCi19IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5j
cHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRl
IDx3dGYvQXNzZXJ0aW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLW5hbWVz
cGFjZSBQcm90b2NvbCB7Ci0KLQotCi0KLQotCi0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2Nv
bAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
T2JqZWN0cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotCi0jaW5jbHVkZSA8
d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLX0gLy8gbmFtZXNw
YWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xC
YWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRv
bWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRl
QmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi1AcHJv
dG9jb2wgVGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcjsKLQotbmFtZXNwYWNlIEluc3Bl
Y3RvciB7Ci0KLQotY2xhc3MgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyIGZp
bmFsIDogcHVibGljIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyIHsKLSAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBPYmpDSW5zcGVjdG9yRG9tYWluQmFj
a2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4gaGFuZGxl
cikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQotICAgIHZvaWQgQ29tbWFuZChsb25nIHJlcXVl
c3RJZCkgZmluYWw7Ci1wcml2YXRlOgotICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xEb21h
aW5Eb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29u
ZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLQotbmFtZXNwYWNl
IEluc3BlY3RvciB7Ci0KLXZvaWQgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVy
OjpDb21tYW5kKGxvbmcgcmVxdWVzdElkKQotewotICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9u
ZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0Nh
bGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29s
RXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRG9t
YWluLkNvbW1hbmQnIHdhcyBub3QgZm91bmQiX3MpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
aWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0
Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICB9OwotCi0gICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0g
XnsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwg
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2UpOwotICAgIH07Ci0KLSAgICBbbV9kZWxlZ2F0
ZSBDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6
c3VjY2Vzc0NhbGxiYWNrXTsKLX0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFBy
b3RvY29sLmg+Ci0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGlu
dGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKLUBwcm9wZXJ0eSAo
bm9uYXRvbWljLCByZXRhaW4sIHNldHRlcj1zZXREb21haW5IYW5kbGVyOikgaWQ8VGVzdFByb3Rv
Y29sRG9tYWluRG9tYWluSGFuZGxlcj4gZG9tYWluSGFuZGxlcjsKLUBwcm9wZXJ0eSAobm9uYXRv
bWljLCByZWFkb25seSkgVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyICpk
b21haW5FdmVudERpc3BhdGNoZXI7Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xDb25maWd1cmF0aW9uLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3Vy
YXRpb24ubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdn
YWJsZVR5cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgotCi0jaW1wb3J0ICJUZXN0
UHJvdG9jb2xJbnRlcm5hbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNo
ZXJzLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2Vu
dC5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9s
bGVyLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5k
RGlzcGF0Y2hlcnMuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVycy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW1wbGVtZW50
YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVj
dG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci0gICAgaWQ8VGVzdFByb3RvY29sRG9tYWluRG9t
YWluSGFuZGxlcj4gX2RvbWFpbkhhbmRsZXI7Ci0gICAgVGVzdFByb3RvY29sRG9tYWluRG9tYWlu
RXZlbnREaXNwYXRjaGVyICpfZG9tYWluRXZlbnREaXNwYXRjaGVyOwotfQotCi0tIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIq
KWNvbnRyb2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikK
LSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRy
b2xsZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWRlYWxs
b2MKLXsKLSAgICBbX2RvbWFpbkhhbmRsZXIgcmVsZWFzZV07Ci0gICAgW19kb21haW5FdmVudERp
c3BhdGNoZXIgcmVsZWFzZV07Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi0tICh2b2lkKXNl
dERvbWFpbkhhbmRsZXI6KGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+KWhhbmRs
ZXIKLXsKLSAgICBpZiAoaGFuZGxlciA9PSBfZG9tYWluSGFuZGxlcikKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgW19kb21haW5IYW5kbGVyIHJlbGVhc2VdOwotICAgIF9kb21haW5IYW5kbGVyID0g
W2hhbmRsZXIgcmV0YWluXTsKLQotICAgIGF1dG8gYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IG1ha2VV
bmlxdWU8T2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyPihoYW5kbGVyKTsKLSAg
ICBhdXRvIGFsdGVybmF0ZUFnZW50ID0gbWFrZVVuaXF1ZTxBbHRlcm5hdGVEaXNwYXRjaGFibGVB
Z2VudDxEb21haW5CYWNrZW5kRGlzcGF0Y2hlciwgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3Bh
dGNoZXI+PigiRG9tYWluIl9zLCAqX2NvbnRyb2xsZXIsIFdURk1vdmUoYWx0ZXJuYXRlRGlzcGF0
Y2hlcikpOwotICAgIF9jb250cm9sbGVyLT5hcHBlbmRFeHRyYUFnZW50KFdURk1vdmUoYWx0ZXJu
YXRlQWdlbnQpKTsKLX0KLQotLSAoaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4p
ZG9tYWluSGFuZGxlcgotewotICAgIHJldHVybiBfZG9tYWluSGFuZGxlcjsKLX0KLQotLSAoVGVz
dFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyICopZG9tYWluRXZlbnREaXNwYXRj
aGVyCi17Ci0gICAgaWYgKCFfZG9tYWluRXZlbnREaXNwYXRjaGVyKQotICAgICAgICBfZG9tYWlu
RXZlbnREaXNwYXRjaGVyID0gW1tUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNo
ZXIgYWxsb2NdIGluaXRXaXRoQ29udHJvbGxlcjpfY29udHJvbGxlcl07Ci0gICAgcmV0dXJuIF9k
b21haW5FdmVudERpc3BhdGNoZXI7Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2
ZW50RGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21h
aW4tZGVidWdnYWJsZVR5cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAi
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5o
PgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW1wbGVtZW50YXRpb24gVGVzdFBy
b3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyCi17Ci0gICAgQXVnbWVudGFibGVJbnNw
ZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVy
Ci17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJl
dHVybiBuaWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIpOwotICAgIF9jb250cm9sbGVyID0gY29u
dHJvbGxlcjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClFdmVudAotewotICAgIGNv
bnN0IEZyb250ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29udHJvbGxlci0+ZnJvbnRlbmRSb3V0ZXIo
KTsKLQotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4u
RXZlbnQiX3MpOwotICAgIHJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmlu
ZygpKTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNw
YXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8Rm91bmRhdGlv
bi9Gb3VuZGF0aW9uLmg+Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05P
YmplY3QuaD4KLQotCi0KLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29s
UGxhdGZvcm0pIHsKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbCwKLSAgICBUZXN0UHJvdG9j
b2xQbGF0Zm9ybUdlbmVyaWMsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1JT1MsCi0gICAgVGVz
dFByb3RvY29sUGxhdGZvcm1NYWNPUywKLX07Ci0KLQotCi0KLQotQHByb3RvY29sIFRlc3RQcm90
b2NvbERvbWFpbkRvbWFpbkhhbmRsZXIgPE5TT2JqZWN0PgotQG9wdGlvbmFsCi0tICh2b2lkKUNv
bW1hbmRXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2Fs
bGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKHZvaWQpKXN1Y2Nlc3NDYWxsYmFjazsKLUBl
bmQKLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNl
IFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciA6IE5TT2JqZWN0Ci0tICh2
b2lkKUV2ZW50OwotQGVuZAotCi0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1
aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wu
aAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCi0jaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBv
cnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sRG9tYWluRG9t
YWluRXZlbnREaXNwYXRjaGVyIChQcml2YXRlKQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29u
dHJvbGxlcjooSW5zcGVjdG9yOjpBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRy
b2xsZXI7Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJv
dG9jb2wuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lv
bnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9iakNF
bnVtVHlwZT4KLU9wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0
IFN0cmluZyYgdmFsdWUpOwotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFBy
b3RvY29sUGxhdGZvcm0gdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBU
ZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDoKLSAgICAgICAgcmV0dXJuICJhbGwiX3M7Ci0gICAgY2Fz
ZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM6Ci0gICAgICAgIHJldHVybiAiZ2VuZXJpYyJf
czsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOgotICAgICAgICByZXR1cm4gImlv
cyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M6Ci0gICAgICAgIHJldHVy
biAibWFjb3MiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVz
dFByb3RvY29sUGxhdGZvcm0+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVl
KQotewotICAgIGlmICh2YWx1ZSA9PSAiYWxsIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2Nv
bFBsYXRmb3JtQWxsOwotICAgIGlmICh2YWx1ZSA9PSAiZ2VuZXJpYyIpCi0gICAgICAgIHJldHVy
biBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM7Ci0gICAgaWYgKHZhbHVlID09ICJpb3MiKQot
ICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1JT1M7Ci0gICAgaWYgKHZhbHVlID09
ICJtYWNvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOwotICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0j
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFBy
b3RvY29sVHlwZVBhcnNlci5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNP
Tk9iamVjdFByaXZhdGUuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0KLQot
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5o
IgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPFdl
Ykluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0jaW1wb3J0IDx3dGYv
QXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNw
YWNlIEluc3BlY3RvcjsKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJpYy9leHBlY3RlZC9kb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdn
YWJsZVR5cGUuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9kb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1k
b21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1yZXN1bHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGQzMGYyNGI1YzM1Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9kb21haW4tdGFyZ2V0
VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1yZXN1bHQKKysrIC9kZXYv
bnVsbApAQCAtMSwxMDYzICswLDAgQEAKLSMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5k
Q29tbWFuZHMuanMKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFy
Z2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0vLyBEb21haW4KLUluc3BlY3RvckJhY2tl
bmQucmVnaXN0ZXJEb21haW4oIkRvbWFpbiIsIG51bGwpOwotSW5zcGVjdG9yQmFja2VuZC5yZWdp
c3RlckNvbW1hbmQoIkRvbWFpbi5Db21tYW5kIiwgWyJwYWdlIiwgIndvcmtlciJdLCBbXSwgW10p
OwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckV2ZW50KCJEb21haW4uRXZlbnQiLCBudWxsLCBb
XSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluRGlzcGF0Y2hlciA9IEluc3BlY3Rv
ckJhY2tlbmQucmVnaXN0ZXJEaXNwYXRjaGVyLmJpbmQoSW5zcGVjdG9yQmFja2VuZCwgIkRvbWFp
biIpOwotSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiRG9tYWluIiwgWyJwYWdlIl0p
OwotIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1
Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgotI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLQotbmFtZXNwYWNlIEluc3BlY3Rv
ciB7Ci0KLWNsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2
b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNw
YXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9Ci0g
ICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4g
bV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQotcHJpdmF0ZToKLSAgICBSZWZQdHI8QmFja2Vu
ZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Ci19OwotCi0KLWNsYXNzIEFsdGVybmF0
ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVyIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5BbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0
Y2hlcigpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBDb21tYW5kKGxvbmcgY2FsbElkKSA9IDA7Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hl
cnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBl
LW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFBy
b3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVz
cGFjZSBJbnNwZWN0b3IgewotCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQotI2lmIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotY2xhc3MgQWx0ZXJuYXRlRG9t
YWluQmFja2VuZERpc3BhdGNoZXI7Ci0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCi0KLWNsYXNzIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7
Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIENvbW1hbmQoRXJyb3JTdHJpbmcmKSA9IDA7Ci1w
cm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB+RG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7
Ci19OwotCi1jbGFzcyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBw
bGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEb21h
aW5CYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgRG9tYWluQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJ
ZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkgZmlu
YWw7Ci1wcml2YXRlOgotICAgIHZvaWQgQ29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpT
T046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKLXB1YmxpYzoKLSAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIo
QWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsg
bV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQotcHJpdmF0ZToK
LSAgICBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciogbV9hbHRlcm5hdGVEaXNwYXRj
aGVyIHsgbnVsbHB0ciB9OwotI2VuZGlmCi1wcml2YXRlOgotICAgIERvbWFpbkJhY2tlbmREaXNw
YXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
Kik7Ci0gICAgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50IHsgbnVsbHB0
ciB9OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0
VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgot
I2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotI2lu
Y2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNlbmRpZgotCi1uYW1l
c3BhY2UgSW5zcGVjdG9yIHsKLQotRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+RG9t
YWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9Ci0KLVJlZjxEb21haW5CYWNrZW5kRGlz
cGF0Y2hlcj4gRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hl
ciYgYmFja2VuZERpc3BhdGNoZXIsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdl
bnQpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRG9tYWluQmFja2VuZERpc3BhdGNoZXIo
YmFja2VuZERpc3BhdGNoZXIsIGFnZW50KSk7Ci19Ci0KLURvbWFpbkJhY2tlbmREaXNwYXRjaGVy
OjpEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3Bh
dGNoZXIsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCi0gICAgOiBTdXBw
bGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKLSAgICAsIG1fYWdl
bnQoYWdlbnQpCi17Ci0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVy
Rm9yRG9tYWluKCJEb21haW4iX3MsIHRoaXMpOwotfQotCi12b2lkIERvbWFpbkJhY2tlbmREaXNw
YXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJl
ZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKLXsKLSAgICBSZWY8RG9tYWluQmFja2VuZERpc3Bh
dGNoZXI+IHByb3RlY3QoKnRoaXMpOwotCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1l
dGVyczsKLSAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFyYW1ldGVycyk7Ci0K
LSAgICBpZiAobWV0aG9kID09ICJDb21tYW5kIikKLSAgICAgICAgQ29tbWFuZChyZXF1ZXN0SWQs
IFdURk1vdmUocGFyYW1ldGVycykpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91
bmQsICInRG9tYWluLiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7Ci19Ci0KLXZvaWQg
RG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxK
U09OOjpPYmplY3Q+JiYpCi17Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCi0gICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVy
bmF0ZURpc3BhdGNoZXItPkNvbW1hbmQocmVxdWVzdElkKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSNlbmRpZgotCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVj
dD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtX2FnZW50LT5Db21tYW5k
KGVycm9yKTsKLQotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0gICAgICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2Up
OwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xF
cnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmRE
aXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJz
LmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZS1t
YXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90
b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgRnJv
bnRlbmRSb3V0ZXI7Ci0KLWNsYXNzIERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlciB7Ci0gICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgRG9tYWluRnJvbnRlbmREaXNwYXRj
aGVyKEZyb250ZW5kUm91dGVyJiBmcm9udGVuZFJvdXRlcikgOiBtX2Zyb250ZW5kUm91dGVyKGZy
b250ZW5kUm91dGVyKSB7IH0KLSAgICB2b2lkIEV2ZW50KCk7Ci1wcml2YXRlOgotICAgIEZyb250
ZW5kUm91dGVyJiBtX2Zyb250ZW5kUm91dGVyOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxl
VHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgot
Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi12
b2lkIERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcjo6RXZlbnQoKQotewotICAgIFJlZjxKU09OOjpP
YmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVz
c2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOwotCi0gICAgbV9m
cm9udGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5k
RGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZS1tYXRj
aGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5o
PgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0K
LQotCi0KLQotCi0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxl
VHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0KLSNp
bmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0K
LW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotfSAv
LyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgot
I2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQotQHByb3RvY29sIFRlc3RQcm90b2NvbERvbWFp
bkRvbWFpbkhhbmRsZXI7Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLWNsYXNzIE9iakNJ
bnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVE
b21haW5CYWNrZW5kRGlzcGF0Y2hlciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1w
dWJsaWM6Ci0gICAgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQ
cm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRs
ZXI7IH0KLSAgICB2b2lkIENvbW1hbmQobG9uZyByZXF1ZXN0SWQpIGZpbmFsOwotcHJpdmF0ZToK
LSAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4+IG1fZGVs
ZWdhdGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAi
Y29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQot
I2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLQotbmFtZXNw
YWNlIEluc3BlY3RvciB7Ci0KLXZvaWQgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRj
aGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElkKQotewotICAgIGlmICghW21fZGVsZWdhdGUgcmVz
cG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vz
c0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3Rv
Y29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICIn
RG9tYWluLkNvbW1hbmQnIHdhcyBub3QgZm91bmQiX3MpOwotICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlz
cGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICB9OwotCi0gICAgaWQgc3VjY2Vzc0NhbGxiYWNr
ID0gXnsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJ
ZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2UpOwotICAgIH07Ci0KLSAgICBbbV9kZWxl
Z2F0ZSBDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJh
Y2s6c3VjY2Vzc0NhbGxiYWNrXTsKLX0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQot
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dh
YmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KLQotX19hdHRyaWJ1dGVfXygo
dmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3Vy
YXRpb24gOiBOU09iamVjdAotQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNl
dERvbWFpbkhhbmRsZXI6KSBpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiBkb21h
aW5IYW5kbGVyOwotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBUZXN0UHJvdG9jb2xE
b21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKmRvbWFpbkV2ZW50RGlzcGF0Y2hlcjsKLUBlbmQK
LQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dh
YmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKLQotI2ltcG9ydCAiVGVzdFBy
b3RvY29sSW50ZXJuYWwuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVy
cy5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQu
aD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxl
ci5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERp
c3BhdGNoZXJzLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcnMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGltcGxlbWVudGF0
aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KLXsKLSAgICBBdWdtZW50YWJsZUluc3BlY3Rv
ckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotICAgIGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFp
bkhhbmRsZXI+IF9kb21haW5IYW5kbGVyOwotICAgIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2
ZW50RGlzcGF0Y2hlciAqX2RvbWFpbkV2ZW50RGlzcGF0Y2hlcjsKLX0KLQotLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKilj
b250cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0g
ICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIpOwotICAgIF9jb250cm9s
bGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClkZWFsbG9j
Ci17Ci0gICAgW19kb21haW5IYW5kbGVyIHJlbGVhc2VdOwotICAgIFtfZG9tYWluRXZlbnREaXNw
YXRjaGVyIHJlbGVhc2VdOwotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAodm9pZClzZXRE
b21haW5IYW5kbGVyOihpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiloYW5kbGVy
Ci17Ci0gICAgaWYgKGhhbmRsZXIgPT0gX2RvbWFpbkhhbmRsZXIpCi0gICAgICAgIHJldHVybjsK
LQotICAgIFtfZG9tYWluSGFuZGxlciByZWxlYXNlXTsKLSAgICBfZG9tYWluSGFuZGxlciA9IFto
YW5kbGVyIHJldGFpbl07Ci0KLSAgICBhdXRvIGFsdGVybmF0ZURpc3BhdGNoZXIgPSBtYWtlVW5p
cXVlPE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7Ci0gICAg
YXV0byBhbHRlcm5hdGVBZ2VudCA9IG1ha2VVbmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdl
bnQ8RG9tYWluQmFja2VuZERpc3BhdGNoZXIsIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRj
aGVyPj4oIkRvbWFpbiJfcywgKl9jb250cm9sbGVyLCBXVEZNb3ZlKGFsdGVybmF0ZURpc3BhdGNo
ZXIpKTsKLSAgICBfY29udHJvbGxlci0+YXBwZW5kRXh0cmFBZ2VudChXVEZNb3ZlKGFsdGVybmF0
ZUFnZW50KSk7Ci19Ci0KLS0gKGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+KWRv
bWFpbkhhbmRsZXIKLXsKLSAgICByZXR1cm4gX2RvbWFpbkhhbmRsZXI7Ci19Ci0KLS0gKFRlc3RQ
cm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqKWRvbWFpbkV2ZW50RGlzcGF0Y2hl
cgotewotICAgIGlmICghX2RvbWFpbkV2ZW50RGlzcGF0Y2hlcikKLSAgICAgICAgX2RvbWFpbkV2
ZW50RGlzcGF0Y2hlciA9IFtbVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVy
IGFsbG9jXSBpbml0V2l0aENvbnRyb2xsZXI6X2NvbnRyb2xsZXJdOwotICAgIHJldHVybiBfZG9t
YWluRXZlbnREaXNwYXRjaGVyOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xDb25maWd1cmF0aW9uLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVu
dERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlu
LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29s
SW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0j
aW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwot
Ci1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVy
Ci17Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKLX0K
LQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0
b3JDb250cm9sbGVyKiljb250cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAg
ICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIp
OwotICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQot
LSAodm9pZClFdmVudAotewotICAgIGNvbnN0IEZyb250ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29u
dHJvbGxlci0+ZnJvbnRlbmRSb3V0ZXIoKTsKLQotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25N
ZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3Ry
aW5nKCJtZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOwotICAgIHJvdXRlci5zZW5kRXZlbnQo
anNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFy
Z2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5k
YXRpb24uaD4KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5o
PgotCi0KLQotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xQbGF0Zm9y
bSkgewotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsLAotICAgIFRlc3RQcm90b2NvbFBsYXRm
b3JtR2VuZXJpYywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUywKLSAgICBUZXN0UHJvdG9j
b2xQbGF0Zm9ybU1hY09TLAotfTsKLQotCi0KLQotCi1AcHJvdG9jb2wgVGVzdFByb3RvY29sRG9t
YWluRG9tYWluSGFuZGxlciA8TlNPYmplY3Q+Ci1Ab3B0aW9uYWwKLS0gKHZvaWQpQ29tbWFuZFdp
dGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBz
dWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikodm9pZCkpc3VjY2Vzc0NhbGxiYWNrOwotQGVuZAotCi1f
X2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFBy
b3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyIDogTlNPYmplY3QKLS0gKHZvaWQpRXZl
bnQ7Ci1AZW5kCi0KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21w
YXRpYmlsaXR5T2JqZWN0cy5oPgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0KLSMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2Fi
bGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0
UHJpdmF0ZS5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JD
b250cm9sbGVyLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi1AaW50ZXJmYWNlIFRl
c3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAoUHJpdmF0ZSkKLS0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEluc3BlY3Rvcjo6QXVnbWVudGFibGVJbnNwZWN0
b3JDb250cm9sbGVyKiljb250cm9sbGVyOwotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sSW50ZXJuYWwuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0
VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNp
bXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KLQotbmFt
ZXNwYWNlIEluc3BlY3RvciB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KLU9w
dGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFs
dWUpOwotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sUGxhdGZv
cm0gdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQ
bGF0Zm9ybUFsbDoKLSAgICAgICAgcmV0dXJuICJhbGwiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9j
b2xQbGF0Zm9ybUdlbmVyaWM6Ci0gICAgICAgIHJldHVybiAiZ2VuZXJpYyJfczsKLSAgICBjYXNl
IFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOgotICAgICAgICByZXR1cm4gImlvcyJfczsKLSAgICBj
YXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M6Ci0gICAgICAgIHJldHVybiAibWFjb3MiX3M7
Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sUGxh
dGZvcm0+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlm
ICh2YWx1ZSA9PSAiYWxsIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxs
OwotICAgIGlmICh2YWx1ZSA9PSAiZ2VuZXJpYyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9j
b2xQbGF0Zm9ybUdlbmVyaWM7Ci0gICAgaWYgKHZhbHVlID09ICJpb3MiKQotICAgICAgICByZXR1
cm4gVGVzdFByb3RvY29sUGxhdGZvcm1JT1M7Ci0gICAgaWYgKHZhbHVlID09ICJtYWNvcyIpCi0g
ICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOwotICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBkb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0j
aW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3Iv
UldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVj
dG9yOwotCi0KLQotCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWlu
LWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJv
dG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNp
bXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0K
LQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQv
ZG9tYWluLXRhcmdldFR5cGVzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZG9tYWluLXRhcmdldFR5cGVz
Lmpzb24tcmVzdWx0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODk0OGEyZjc0Ny4u
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZG9tYWluLXRhcmdldFR5cGVzLmpzb24tcmVzdWx0Cisr
KyAvZGV2L251bGwKQEAgLTEsMTA2MyArMCwwIEBACi0jIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9y
QmFja2VuZENvbW1hbmRzLmpzCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9t
YWluLXRhcmdldFR5cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotLy8gRG9tYWluCi1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJEb21h
aW4iLCBbInBhZ2UiXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiRG9tYWlu
LkNvbW1hbmQiLCBbInBhZ2UiXSwgW10sIFtdKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJF
dmVudCgiRG9tYWluLkV2ZW50IiwgWyJwYWdlIl0sIFtdKTsKLUluc3BlY3RvckJhY2tlbmQucmVn
aXN0ZXJEb21haW5EaXNwYXRjaGVyID0gSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRpc3BhdGNo
ZXIuYmluZChJbnNwZWN0b3JCYWNrZW5kLCAiRG9tYWluIik7Ci1JbnNwZWN0b3JCYWNrZW5kLmFj
dGl2YXRlRG9tYWluKCJEb21haW4iLCBudWxsKTsKLSMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFj
a2VuZENvbW1hbmRzLmpzCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERp
c3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFy
Z2V0VHlwZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENI
RVJTKQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewotCi1jbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdm9p
ZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0
Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQotICAg
IEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1f
YmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPEJhY2tlbmRE
aXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwotfTsKLQotCi1jbGFzcyBBbHRlcm5hdGVE
b21haW5CYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hl
ciB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+QWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNo
ZXIoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChsb25nIGNhbGxJZCkgPSAwOwotfTsK
LQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tl
bmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJz
LmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZXMu
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21h
IG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdHlwZWRlZiBTdHJp
bmcgRXJyb3JTdHJpbmc7Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKLWNsYXNzIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyOwotI2VuZGlmIC8v
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi1jbGFzcyBEb21haW5C
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewotcHVibGljOgotICAgIHZpcnR1YWwgdm9pZCBDb21t
YW5kKEVycm9yU3RyaW5nJikgPSAwOwotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgfkRvbWFpbkJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlcigpOwotfTsKLQotY2xhc3MgRG9tYWluQmFja2VuZERpc3Bh
dGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewotcHVi
bGljOgotICAgIHN0YXRpYyBSZWY8RG9tYWluQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNr
ZW5kRGlzcGF0Y2hlciYsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIHZv
aWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNP
Tjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOwotcHJpdmF0ZToKLSAgICB2b2lkIENvbW1hbmQo
bG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0jaWYg
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi1wdWJsaWM6Ci0gICAgdm9p
ZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVy
KiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0
ZURpc3BhdGNoZXI7IH0KLXByaXZhdGU6Ci0gICAgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3Bh
dGNoZXIqIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciB7IG51bGxwdHIgfTsKLSNlbmRpZgotcHJpdmF0
ZToKLSAgICBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYsIERvbWFp
bkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIERvbWFpbkJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlciogbV9hZ2VudCB7IG51bGxwdHIgfTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRl
c3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNs
dWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSNpbmNsdWRl
ICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNl
IEluc3BlY3RvciB7Ci0KLURvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6fkRvbWFpbkJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQotCi1SZWY8RG9tYWluQmFja2VuZERpc3BhdGNo
ZXI+IERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImIGJh
Y2tlbmREaXNwYXRjaGVyLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQot
ewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKGJhY2tl
bmREaXNwYXRjaGVyLCBhZ2VudCkpOwotfQotCi1Eb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6RG9t
YWluQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVy
LCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQotICAgIDogU3VwcGxlbWVu
dGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCi0gICAgLCBtX2FnZW50KGFn
ZW50KQotewotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRv
bWFpbigiRG9tYWluIl9zLCB0aGlzKTsKLX0KLQotdm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hl
cjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNP
Tjo6T2JqZWN0PiYmIG1lc3NhZ2UpCi17Ci0gICAgUmVmPERvbWFpbkJhY2tlbmREaXNwYXRjaGVy
PiBwcm90ZWN0KCp0aGlzKTsKLQotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7
Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRlcnMpOwotCi0gICAg
aWYgKG1ldGhvZCA9PSAiQ29tbWFuZCIpCi0gICAgICAgIENvbW1hbmQocmVxdWVzdElkLCBXVEZN
b3ZlKHBhcmFtZXRlcnMpKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAi
J0RvbWFpbi4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOwotfQotCi12b2lkIERvbWFp
bkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6
T2JqZWN0PiYmKQotewotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQotICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVE
aXNwYXRjaGVyLT5Db21tYW5kKHJlcXVlc3RJZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0j
ZW5kaWYKLQotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJl
c3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgbV9hZ2VudC0+Q29tbWFuZChlcnJv
cik7Ci0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAg
ICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3Io
QmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0
Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVzLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNl
Ci0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05W
YWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIElu
c3BlY3RvciB7Ci0KLWNsYXNzIEZyb250ZW5kUm91dGVyOwotCi1jbGFzcyBEb21haW5Gcm9udGVu
ZERpc3BhdGNoZXIgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAg
IERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcihGcm9udGVuZFJvdXRlciYgZnJvbnRlbmRSb3V0ZXIp
IDogbV9mcm9udGVuZFJvdXRlcihmcm9udGVuZFJvdXRlcikgeyB9Ci0gICAgdm9pZCBFdmVudCgp
OwotcHJpdmF0ZToKLSAgICBGcm9udGVuZFJvdXRlciYgbV9mcm9udGVuZFJvdXRlcjsKLX07Ci0K
LX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNw
YXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZXMuanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdm9pZCBEb21h
aW5Gcm9udGVuZERpc3BhdGNoZXI6OkV2ZW50KCkKLXsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBq
c29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNl
dFN0cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9zKTsKLQotICAgIG1fZnJvbnRlbmRS
b3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNo
ZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVzLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi1uYW1l
c3BhY2UgUHJvdG9jb2wgewotCi0KLQotCi0KLQotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9j
b2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bE9iamVjdHMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZXMuanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotCi0jaW5jbHVkZSA8d3Rm
L09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLX0gLy8gbmFtZXNwYWNl
IFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbE9iamVjdHMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNr
ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFp
bi10YXJnZXRUeXBlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5k
RGlzcGF0Y2hlcnMuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLUBwcm90b2NvbCBU
ZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyOwotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsK
LQotCi1jbGFzcyBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBw
dWJsaWMgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIgewotICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlz
cGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1f
ZGVsZWdhdGUgPSBoYW5kbGVyOyB9Ci0gICAgdm9pZCBDb21tYW5kKGxvbmcgcmVxdWVzdElkKSBm
aW5hbDsKLXByaXZhdGU6Ci0gICAgUmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFp
bkhhbmRsZXI+PiBtX2RlbGVnYXRlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0K
LSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlcy5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2lt
cG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlICJUZXN0
UHJvdG9jb2xJbnRlcm5hbC5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewotCi12b2lkIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChs
b25nIHJlcXVlc3RJZCkKLXsKLSAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3Rv
cjpAc2VsZWN0b3IoQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkg
ewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVl
c3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi5Db21tYW5k
JyB3YXMgbm90IGZvdW5kIl9zKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBl
bmRpbmdFcnJvcnMoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlkIGVycm9yQ2Fs
bGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigp
LT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZl
ckVycm9yLCBlcnJvcik7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5n
RXJyb3JzKCk7Ci0gICAgfTsKLQotICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57Ci0gICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpTT046Ok9iamVj
dDo6Y3JlYXRlKCksIGZhbHNlKTsKLSAgICB9OwotCi0gICAgW21fZGVsZWdhdGUgQ29tbWFuZFdp
dGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxs
YmFja107Ci19Ci0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBkb21haW4tdGFyZ2V0VHlwZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+Ci0KLV9f
YXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJv
dG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRh
aW4sIHNldHRlcj1zZXREb21haW5IYW5kbGVyOikgaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWlu
SGFuZGxlcj4gZG9tYWluSGFuZGxlcjsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkg
VGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyICpkb21haW5FdmVudERpc3Bh
dGNoZXI7Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9u
LmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZXMuanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJv
dG9jb2xDb25maWd1cmF0aW9uLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgi
Ci0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+Ci0jaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2lt
cG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0KLXVz
aW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xD
b25maWd1cmF0aW9uCi17Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29u
dHJvbGxlcjsKLSAgICBpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiBfZG9tYWlu
SGFuZGxlcjsKLSAgICBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKl9k
b21haW5FdmVudERpc3BhdGNoZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRy
b2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgotewotICAg
IHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmls
OwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7
Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAgIFtfZG9tYWlu
SGFuZGxlciByZWxlYXNlXTsKLSAgICBbX2RvbWFpbkV2ZW50RGlzcGF0Y2hlciByZWxlYXNlXTsK
LSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLS0gKHZvaWQpc2V0RG9tYWluSGFuZGxlcjooaWQ8
VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4paGFuZGxlcgotewotICAgIGlmIChoYW5k
bGVyID09IF9kb21haW5IYW5kbGVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBbX2RvbWFpbkhh
bmRsZXIgcmVsZWFzZV07Ci0gICAgX2RvbWFpbkhhbmRsZXIgPSBbaGFuZGxlciByZXRhaW5dOwot
Ci0gICAgYXV0byBhbHRlcm5hdGVEaXNwYXRjaGVyID0gbWFrZVVuaXF1ZTxPYmpDSW5zcGVjdG9y
RG9tYWluQmFja2VuZERpc3BhdGNoZXI+KGhhbmRsZXIpOwotICAgIGF1dG8gYWx0ZXJuYXRlQWdl
bnQgPSBtYWtlVW5pcXVlPEFsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50PERvbWFpbkJhY2tlbmRE
aXNwYXRjaGVyLCBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4+KCJEb21haW4iX3Ms
ICpfY29udHJvbGxlciwgV1RGTW92ZShhbHRlcm5hdGVEaXNwYXRjaGVyKSk7Ci0gICAgX2NvbnRy
b2xsZXItPmFwcGVuZEV4dHJhQWdlbnQoV1RGTW92ZShhbHRlcm5hdGVBZ2VudCkpOwotfQotCi0t
IChpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPilkb21haW5IYW5kbGVyCi17Ci0g
ICAgcmV0dXJuIF9kb21haW5IYW5kbGVyOwotfQotCi0tIChUZXN0UHJvdG9jb2xEb21haW5Eb21h
aW5FdmVudERpc3BhdGNoZXIgKilkb21haW5FdmVudERpc3BhdGNoZXIKLXsKLSAgICBpZiAoIV9k
b21haW5FdmVudERpc3BhdGNoZXIpCi0gICAgICAgIF9kb21haW5FdmVudERpc3BhdGNoZXIgPSBb
W1Rlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciBhbGxvY10gaW5pdFdpdGhD
b250cm9sbGVyOl9jb250cm9sbGVyXTsKLSAgICByZXR1cm4gX2RvbWFpbkV2ZW50RGlzcGF0Y2hl
cjsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
bi5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlcy5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRl
c3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucy5oIgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIElu
c3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50
RGlzcGF0Y2hlcgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRy
b2xsZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRh
YmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIg
aW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChj
b250cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNl
bGY7Ci19Ci0KLS0gKHZvaWQpRXZlbnQKLXsKLSAgICBjb25zdCBGcm9udGVuZFJvdXRlciYgcm91
dGVyID0gX2NvbnRyb2xsZXItPmZyb250ZW5kUm91dGVyKCk7Ci0KLSAgICBSZWY8SlNPTjo6T2Jq
ZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3Nh
Z2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9zKTsKLSAgICByb3V0ZXIu
c2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Ci19Ci0KLUBlbmQKLQotCi0j
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
ZG9tYWluLXRhcmdldFR5cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLSNpbXBvcnQg
PFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KLQotCi0KLQotdHlwZWRlZiBO
U19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sUGxhdGZvcm0pIHsKLSAgICBUZXN0UHJvdG9j
b2xQbGF0Zm9ybUFsbCwKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWMsCi0gICAgVGVz
dFByb3RvY29sUGxhdGZvcm1JT1MsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUywKLX07
Ci0KLQotCi0KLQotQHByb3RvY29sIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXIgPE5T
T2JqZWN0PgotQG9wdGlvbmFsCi0tICh2b2lkKUNvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazoodm9p
ZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lk
KF4pKHZvaWQpKXN1Y2Nlc3NDYWxsYmFjazsKLUBlbmQKLQotX19hdHRyaWJ1dGVfXygodmlzaWJp
bGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2
ZW50RGlzcGF0Y2hlciA6IE5TT2JqZWN0Ci0tICh2b2lkKUV2ZW50OwotQGVuZAotCi0KLSNpbXBv
cnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4K
LQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sSW50ZXJuYWwuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFp
bi10YXJnZXRUeXBlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sSlNP
Tk9iamVjdFByaXZhdGUuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5z
cGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotQGludGVy
ZmFjZSBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKFByaXZhdGUpCi0t
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihJbnNwZWN0b3I6OkF1Z21lbnRhYmxl
SW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcjsKLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbEludGVybmFsLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlu
LXRhcmdldFR5cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJ
UHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+Ci1PcHRpb25hbDxPYmpDRW51bVR5cGU+IGZy
b21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKLQotaW5saW5lIFN0cmluZyB0
b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFBsYXRmb3JtIHZhbHVlKQotewotICAgIHN3aXRj
aCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1BbGw6Ci0gICAgICAgIHJl
dHVybiAiYWxsIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOgotICAg
ICAgICByZXR1cm4gImdlbmVyaWMiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlP
UzoKLSAgICAgICAgcmV0dXJuICJpb3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9y
bU1hY09TOgotICAgICAgICByZXR1cm4gIm1hY29zIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8
PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFBsYXRmb3JtPiBmcm9tUHJvdG9jb2xTdHJp
bmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gImFsbCIpCi0gICAg
ICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDsKLSAgICBpZiAodmFsdWUgPT0gImdl
bmVyaWMiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOwotICAg
IGlmICh2YWx1ZSA9PSAiaW9zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3Jt
SU9TOwotICAgIGlmICh2YWx1ZSA9PSAibWFjb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3Rv
Y29sUGxhdGZvcm1NYWNPUzsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi19IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1t
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVzLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAi
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5o
IgotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgotI2ltcG9ydCA8V2ViSW5zcGVj
dG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLQotdXNpbmcgbmFtZXNwYWNlIElu
c3BlY3RvcjsKLQotCi0KLQotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlcy5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90
b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5o
IgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4K
LSNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgot
Ci11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1h
bmQtc2l6ZXMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5k
LXNpemVzLmpzb24tcmVzdWx0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYzA3Y2Ix
MzQ3Zi4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFu
ZC1zaXplcy5qc29uLXJlc3VsdAorKysgL2Rldi9udWxsCkBAIC0xLDE0NTUgKzAsMCBAQAotIyMj
IEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0vLyBOZXR3b3Jr
MQotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiTmV0d29yazEiLCBudWxsKTsKLUlu
c3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMS5sb2FkUmVzb3VyY2UxIiwg
bnVsbCwgW10sIFtdKTsKLUluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIk5ldHdvcmsx
IiwgbnVsbCk7Ci0KLS8vIE5ldHdvcmszCi1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWlu
KCJOZXR3b3JrMyIsIG51bGwpOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIk5l
dHdvcmszLmxvYWRSZXNvdXJjZTEiLCBudWxsLCBbXSwgW10pOwotSW5zcGVjdG9yQmFja2VuZC5y
ZWdpc3RlckNvbW1hbmQoIk5ldHdvcmszLmxvYWRSZXNvdXJjZTIiLCBudWxsLCBbXSwgW10pOwot
SW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIk5ldHdvcmszLmxvYWRSZXNvdXJjZTMi
LCBudWxsLCBbXSwgW10pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIk5ldHdv
cmszLmxvYWRSZXNvdXJjZTQiLCBudWxsLCBbXSwgW10pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdp
c3RlckNvbW1hbmQoIk5ldHdvcmszLmxvYWRSZXNvdXJjZTUiLCBudWxsLCBbXSwgW10pOwotSW5z
cGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIk5ldHdvcmszLmxvYWRSZXNvdXJjZTYiLCBu
dWxsLCBbXSwgW10pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIk5ldHdvcmsz
LmxvYWRSZXNvdXJjZTciLCBudWxsLCBbXSwgW10pOwotSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0
ZURvbWFpbigiTmV0d29yazMiLCBudWxsKTsKLSMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2Vu
ZENvbW1hbmRzLmpzCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgt
dmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVS
TkFURV9ESVNQQVRDSEVSUykKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCi0jaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotCi1uYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVi
bGljOgotICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRj
aGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0
Y2hlcik7IH0KLSAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25z
dCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Ci1wcml2YXRlOgotICAgIFJl
ZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKLX07Ci0KLQotY2xh
c3MgQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+QWx0ZXJuYXRlTmV0d29y
azFCYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2Ux
KGxvbmcgY2FsbElkKSA9IDA7Ci19OwotY2xhc3MgQWx0ZXJuYXRlTmV0d29yazNCYWNrZW5kRGlz
cGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0g
ICAgdmlydHVhbCB+QWx0ZXJuYXRlTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQotICAg
IHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UxKGxvbmcgY2FsbElkKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIGxvYWRSZXNvdXJjZTIobG9uZyBjYWxsSWQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
bG9hZFJlc291cmNlMyhsb25nIGNhbGxJZCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVz
b3VyY2U0KGxvbmcgY2FsbElkKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTUo
bG9uZyBjYWxsSWQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlNihsb25nIGNh
bGxJZCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2U3KGxvbmcgY2FsbElkKSA9
IDA7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotI2VuZGlmIC8vIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJu
YXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlz
cGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0
aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9i
amVjdHMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5z
cGVjdG9yIHsKLQotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KLSNpZiBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLWNsYXNzIEFsdGVybmF0ZU5ldHdvcmsxQmFj
a2VuZERpc3BhdGNoZXI7Ci1jbGFzcyBBbHRlcm5hdGVOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVy
OwotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi1j
bGFzcyBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7Ci1wdWJsaWM6Ci0gICAgdmly
dHVhbCB2b2lkIGxvYWRSZXNvdXJjZTEoRXJyb3JTdHJpbmcmKSA9IDA7Ci1wcm90ZWN0ZWQ6Ci0g
ICAgdmlydHVhbCB+TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKLX07Ci0KLWNs
YXNzIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKLXB1YmxpYzoKLSAgICB2aXJ0
dWFsIHZvaWQgbG9hZFJlc291cmNlMShFcnJvclN0cmluZyYpID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgbG9hZFJlc291cmNlMihFcnJvclN0cmluZyYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbG9h
ZFJlc291cmNlMyhFcnJvclN0cmluZyYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291
cmNlNChFcnJvclN0cmluZyYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlNShF
cnJvclN0cmluZyYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlNihFcnJvclN0
cmluZyYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlNyhFcnJvclN0cmluZyYp
ID0gMDsKLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIH5OZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVy
SGFuZGxlcigpOwotfTsKLQotY2xhc3MgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6
IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgc3Rh
dGljIFJlZjxOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNo
ZXImLCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIHZvaWQgZGlzcGF0
Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0
PiYmIG1lc3NhZ2UpIGZpbmFsOwotcHJpdmF0ZToKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTEobG9u
ZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0jaWYgRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi1wdWJsaWM6Ci0gICAgdm9pZCBz
ZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIq
IGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRl
RGlzcGF0Y2hlcjsgfQotcHJpdmF0ZToKLSAgICBBbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNw
YXRjaGVyKiBtX2FsdGVybmF0ZURpc3BhdGNoZXIgeyBudWxscHRyIH07Ci0jZW5kaWYKLXByaXZh
dGU6Ci0gICAgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYsIE5l
dHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgTmV0d29yazFCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQgeyBudWxscHRyIH07Ci19OwotCi1jbGFzcyBOZXR3b3Jr
M0JhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNw
YXRjaGVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE5ldHdvcmszQmFja2VuZERpc3BhdGNo
ZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyKik7Ci0gICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5n
JiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkgZmluYWw7Ci1wcml2YXRlOgot
ICAgIHZvaWQgbG9hZFJlc291cmNlMShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBwYXJhbWV0ZXJzKTsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTIobG9uZyByZXF1ZXN0SWQs
IFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0gICAgdm9pZCBsb2FkUmVzb3Vy
Y2UzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwot
ICAgIHZvaWQgbG9hZFJlc291cmNlNChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBwYXJhbWV0ZXJzKTsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTUobG9uZyByZXF1ZXN0SWQs
IFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0gICAgdm9pZCBsb2FkUmVzb3Vy
Y2U2KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwot
ICAgIHZvaWQgbG9hZFJlc291cmNlNyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBwYXJhbWV0ZXJzKTsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKLXB1YmxpYzoKLSAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRl
TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVy
bmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9Ci1wcml2YXRlOgotICAgIEFs
dGVybmF0ZU5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIqIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciB7
IG51bGxwdHIgfTsKLSNlbmRpZgotcHJpdmF0ZToKLSAgICBOZXR3b3JrM0JhY2tlbmREaXNwYXRj
aGVyKEJhY2tlbmREaXNwYXRjaGVyJiwgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIq
KTsKLSAgICBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2VudCB7IG51bGxw
dHIgfTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0
QmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0
Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRo
LXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0QmFja2Vu
ZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9u
dGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3Rm
L05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jaWYg
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jaW5jbHVkZSAiVGVzdEFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBJbnNwZWN0
b3IgewotCi1OZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6fk5ldHdvcmsxQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9Ci1OZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxl
cjo6fk5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9Ci0KLVJlZjxOZXR3b3Jr
MUJhY2tlbmREaXNwYXRjaGVyPiBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoQmFj
a2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBOZXR3b3JrMUJhY2tlbmREaXNwYXRj
aGVySGFuZGxlciogYWdlbnQpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTmV0d29yazFC
YWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKLX0KLQotTmV0d29y
azFCYWNrZW5kRGlzcGF0Y2hlcjo6TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlz
cGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyKiBhZ2VudCkKLSAgICA6IFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmRE
aXNwYXRjaGVyKQotICAgICwgbV9hZ2VudChhZ2VudCkKLXsKLSAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oIk5ldHdvcmsxIl9zLCB0aGlzKTsKLX0K
LQotdm9pZCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJ
ZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKLXsK
LSAgICBSZWY8TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7Ci0KLSAg
ICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOwotICAgIG1lc3NhZ2UtPmdldE9iamVj
dCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsKLQotICAgIGlmIChtZXRob2QgPT0gImxvYWRSZXNv
dXJjZTEiKQotICAgICAgICBsb2FkUmVzb3VyY2UxKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0
ZXJzKSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90
b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMS4i
ICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOwotfQotCi12b2lkIE5ldHdvcmsxQmFja2Vu
ZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTEobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpP
YmplY3Q+JiYpCi17Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
Ci0gICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURp
c3BhdGNoZXItPmxvYWRSZXNvdXJjZTEocmVxdWVzdElkKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSNlbmRpZgotCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVj
dD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtX2FnZW50LT5sb2FkUmVz
b3VyY2UxKGVycm9yKTsKLQotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0gICAgICAgIG1fYmFj
a2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwg
ZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJv
dG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3Ip
KTsKLX0KLQotUmVmPE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI+IE5ldHdvcmszQmFja2VuZERp
c3BhdGNoZXI6OmNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIE5l
dHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKLXsKLSAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBh
Z2VudCkpOwotfQotCi1OZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpOZXR3b3JrM0JhY2tlbmRE
aXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgTmV0d29yazNC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQotICAgIDogU3VwcGxlbWVudGFsQmFja2Vu
ZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCi0gICAgLCBtX2FnZW50KGFnZW50KQotewot
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbigiTmV0
d29yazMiX3MsIHRoaXMpOwotfQotCi12b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmRp
c3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9i
amVjdD4mJiBtZXNzYWdlKQotewotICAgIFJlZjxOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyPiBw
cm90ZWN0KCp0aGlzKTsKLQotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7Ci0g
ICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRlcnMpOwotCi0gICAgdHlw
ZWRlZiB2b2lkIChOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjoqQ2FsbEhhbmRsZXIpKGxvbmcg
cmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpOwotICAgIHR5cGVkZWYg
SGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVyPiBEaXNwYXRjaE1hcDsKLSAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8RGlzcGF0Y2hNYXA+IGRpc3BhdGNoTWFwOwotICAgIGlmIChkaXNwYXRjaE1h
cC5nZXQoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IHN0cnVjdCBNZXRob2RU
YWJsZSB7Ci0gICAgICAgICAgICBjb25zdCBjaGFyKiBuYW1lOwotICAgICAgICAgICAgQ2FsbEhh
bmRsZXIgaGFuZGxlcjsKLSAgICAgICAgfSBjb21tYW5kc1tdID0gewotICAgICAgICAgICAgeyAi
bG9hZFJlc291cmNlMSIsICZOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2Ux
IH0sCi0gICAgICAgICAgICB7ICJsb2FkUmVzb3VyY2UyIiwgJk5ldHdvcmszQmFja2VuZERpc3Bh
dGNoZXI6OmxvYWRSZXNvdXJjZTIgfSwKLSAgICAgICAgICAgIHsgImxvYWRSZXNvdXJjZTMiLCAm
TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMyB9LAotICAgICAgICAgICAg
eyAibG9hZFJlc291cmNlNCIsICZOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3Vy
Y2U0IH0sCi0gICAgICAgICAgICB7ICJsb2FkUmVzb3VyY2U1IiwgJk5ldHdvcmszQmFja2VuZERp
c3BhdGNoZXI6OmxvYWRSZXNvdXJjZTUgfSwKLSAgICAgICAgICAgIHsgImxvYWRSZXNvdXJjZTYi
LCAmTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNiB9LAotICAgICAgICAg
ICAgeyAibG9hZFJlc291cmNlNyIsICZOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVz
b3VyY2U3IH0sCi0gICAgICAgIH07Ci0gICAgICAgIHNpemVfdCBsZW5ndGggPSBXVEZfQVJSQVlf
TEVOR1RIKGNvbW1hbmRzKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7
ICsraSkKLSAgICAgICAgICAgIGRpc3BhdGNoTWFwLmdldCgpLmFkZChjb21tYW5kc1tpXS5uYW1l
LCBjb21tYW5kc1tpXS5oYW5kbGVyKTsKLSAgICB9Ci0KLSAgICBhdXRvIGZpbmRSZXN1bHQgPSBk
aXNwYXRjaE1hcC5nZXQoKS5maW5kKG1ldGhvZCk7Ci0gICAgaWYgKGZpbmRSZXN1bHQgPT0gZGlz
cGF0Y2hNYXAuZ2V0KCkuZW5kKCkpIHsKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVw
b3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0
d29yazMuIiArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgICgoKnRoaXMpLipmaW5kUmVzdWx0LT52YWx1ZSkocmVxdWVzdElkLCBXVEZN
b3ZlKHBhcmFtZXRlcnMpKTsKLX0KLQotdm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjps
b2FkUmVzb3VyY2UxKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQotewot
I2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotICAgIGlmIChtX2Fs
dGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2Fk
UmVzb3VyY2UxKHJlcXVlc3RJZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQot
ICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpT
T046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgbV9hZ2VudC0+bG9hZFJlc291cmNlMShlcnJvcik7
Ci0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBl
bHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFj
a2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Ci19Ci0KLXZvaWQg
TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMihsb25nIHJlcXVlc3RJZCwg
UmVmUHRyPEpTT046Ok9iamVjdD4mJikKLXsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKLSAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAg
IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlMihyZXF1ZXN0SWQpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBS
ZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIG1f
YWdlbnQtPmxvYWRSZXNvdXJjZTIoZXJyb3IpOwotCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkK
LSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RG
TW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwg
V1RGTW92ZShlcnJvcikpOwotfQotCi12b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6Omxv
YWRSZXNvdXJjZTMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCi17Ci0j
aWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0gICAgaWYgKG1fYWx0
ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRS
ZXNvdXJjZTMocmVxdWVzdElkKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0g
ICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2UzKGVycm9yKTsK
LQotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOwotICAgIGVs
c2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNr
ZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKLX0KLQotdm9pZCBO
ZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U0KGxvbmcgcmVxdWVzdElkLCBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQotewotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQotICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAg
bV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2U0KHJlcXVlc3RJZCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJl
ZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgbV9h
Z2VudC0+bG9hZFJlc291cmNlNChlcnJvcik7Ci0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQot
ICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZN
b3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBX
VEZNb3ZlKGVycm9yKSk7Ci19Ci0KLXZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9h
ZFJlc291cmNlNShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKLXsKLSNp
ZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSAgICBpZiAobV9hbHRl
cm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJl
c291cmNlNShyZXF1ZXN0SWQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAg
ICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTUoZXJyb3IpOwot
Ci0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+
c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxz
ZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tl
bmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOwotfQotCi12b2lkIE5l
dHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTYobG9uZyByZXF1ZXN0SWQsIFJl
ZlB0cjxKU09OOjpPYmplY3Q+JiYpCi17Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCi0gICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBt
X2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZTYocmVxdWVzdElkKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVm
PEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtX2Fn
ZW50LT5sb2FkUmVzb3VyY2U2KGVycm9yKTsKLQotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0g
ICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1v
dmUocmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdU
Rk1vdmUoZXJyb3IpKTsKLX0KLQotdm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2Fk
UmVzb3VyY2U3KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQotewotI2lm
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotICAgIGlmIChtX2FsdGVy
bmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVz
b3VyY2U3KHJlcXVlc3RJZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAg
IEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgbV9hZ2VudC0+bG9hZFJlc291cmNlNyhlcnJvcik7Ci0K
LSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5z
ZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNl
Ci0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2Vu
ZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMu
Y3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1z
aXplcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNw
cmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUg
PHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5h
bWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBGcm9udGVuZFJvdXRlcjsKLQotfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgK
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6
ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKLQot
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0
Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5k
LXNpemVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2Nv
bFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFtZXNwYWNlIEluc3Bl
Y3RvciB7Ci0KLQotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotCi0KLS8vIFR5cGVkZWZz
LgotbmFtZXNwYWNlIE5ldHdvcmsyIHsKLS8qIFVuaXF1ZSBsb2FkZXIgaWRlbnRpZmllci4gKi8K
LXR5cGVkZWYgU3RyaW5nIExvYWRlcklkOwotfSAvLyBOZXR3b3JrMgotLy8gRW5kIG9mIHR5cGVk
ZWZzLgotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLQotI2luY2x1ZGUgPHd0Zi9PcHRpb25h
bC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3Rv
ciB7Ci0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2Nv
bAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xPYmplY3RzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3Bh
dGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgt
dmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQotQHBy
b3RvY29sIFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcjsKLUBwcm90b2NvbCBUZXN0
UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkhhbmRsZXI7Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Igewot
Ci0KLWNsYXNzIE9iakNJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDog
cHVibGljIEFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIgewotICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIE9iakNJbnNwZWN0b3JOZXR3b3JrMUJhY2tl
bmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4gaGFuZGxl
cikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQotICAgIHZvaWQgbG9hZFJlc291cmNlMShsb25n
IHJlcXVlc3RJZCkgZmluYWw7Ci1wcml2YXRlOgotICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9j
b2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwotfTsKLQotY2xhc3MgT2JqQ0lu
c3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJuYXRl
TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
Ci1wdWJsaWM6Ci0gICAgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIoaWQ8
VGVzdFByb3RvY29sTmV0d29yazNEb21haW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdhdGUg
PSBoYW5kbGVyOyB9Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2UxKGxvbmcgcmVxdWVzdElkKSBmaW5h
bDsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTIobG9uZyByZXF1ZXN0SWQpIGZpbmFsOwotICAgIHZv
aWQgbG9hZFJlc291cmNlMyhsb25nIHJlcXVlc3RJZCkgZmluYWw7Ci0gICAgdm9pZCBsb2FkUmVz
b3VyY2U0KGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTUobG9u
ZyByZXF1ZXN0SWQpIGZpbmFsOwotICAgIHZvaWQgbG9hZFJlc291cmNlNihsb25nIHJlcXVlc3RJ
ZCkgZmluYWw7Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2U3KGxvbmcgcmVxdWVzdElkKSBmaW5hbDsK
LXByaXZhdGU6Ci0gICAgUmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbE5ldHdvcmszRG9tYWluSGFu
ZGxlcj4+IG1fZGVsZWdhdGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNv
bmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNp
bmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLW5hbWVzcGFj
ZSBJbnNwZWN0b3IgewotCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRj
aGVyOjpsb2FkUmVzb3VyY2UxKGxvbmcgcmVxdWVzdElkKQotewotICAgIGlmICghW21fZGVsZWdh
dGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2UxV2l0aEVycm9yQ2Fs
bGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCkt
PnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9k
Tm90Rm91bmQsICInTmV0d29yazEubG9hZFJlc291cmNlMScgd2FzIG5vdCBmb3VuZCJfcyk7Ci0g
ICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJy
b3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihy
ZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwotICAgICAg
ICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgIH07Ci0KLSAg
ICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5z
ZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7Ci0g
ICAgfTsKLQotICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZTFXaXRoRXJyb3JDYWxsYmFjazpl
cnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOwotfQotCi0KLXZv
aWQgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTEo
bG9uZyByZXF1ZXN0SWQpCi17Ci0gICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0
b3I6QHNlbGVjdG9yKGxvYWRSZXNvdXJjZTFXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJh
Y2s6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJv
cihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3Jr
My5sb2FkUmVzb3VyY2UxJyB3YXMgbm90IGZvdW5kIl9zKTsKLSAgICAgICAgYmFja2VuZERpc3Bh
dGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERp
c3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVy
KCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgfTsKLQotICAgIGlkIHN1Y2Nlc3NDYWxsYmFj
ayA9IF57Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0
SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKLSAgICB9OwotCi0gICAgW21fZGVs
ZWdhdGUgbG9hZFJlc291cmNlMVdpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vz
c0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107Ci19Ci0KLXZvaWQgT2JqQ0luc3BlY3Rvck5ldHdv
cmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTIobG9uZyByZXF1ZXN0SWQpCi17Ci0g
ICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGxvYWRSZXNv
dXJjZTJXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsKLSAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmRE
aXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMy5sb2FkUmVzb3VyY2UyJyB3YXMg
bm90IGZvdW5kIl9zKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdF
cnJvcnMoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlkIGVycm9yQ2FsbGJhY2sg
PSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBv
cnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9y
LCBlcnJvcik7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3Jz
KCk7Ci0gICAgfTsKLQotICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57Ci0gICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCksIGZhbHNlKTsKLSAgICB9OwotCi0gICAgW21fZGVsZWdhdGUgbG9hZFJlc291cmNlMldp
dGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxs
YmFja107Ci19Ci0KLXZvaWQgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6
OmxvYWRSZXNvdXJjZTMobG9uZyByZXF1ZXN0SWQpCi17Ci0gICAgaWYgKCFbbV9kZWxlZ2F0ZSBy
ZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGxvYWRSZXNvdXJjZTNXaXRoRXJyb3JDYWxsYmFj
azpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVw
b3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RG
b3VuZCwgIidOZXR3b3JrMy5sb2FkUmVzb3VyY2UzJyB3YXMgbm90IGZvdW5kIl9zKTsKLSAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikg
ewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVl
c3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7Ci0gICAgICAgIGJh
Y2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgfTsKLQotICAgIGlk
IHN1Y2Nlc3NDYWxsYmFjayA9IF57Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRS
ZXNwb25zZShyZXF1ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKLSAgICB9
OwotCi0gICAgW21fZGVsZWdhdGUgbG9hZFJlc291cmNlM1dpdGhFcnJvckNhbGxiYWNrOmVycm9y
Q2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107Ci19Ci0KLXZvaWQgT2Jq
Q0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTQobG9uZyBy
ZXF1ZXN0SWQpCi17Ci0gICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNl
bGVjdG9yKGxvYWRSZXNvdXJjZTRXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6KV0p
IHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1
ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMy5sb2Fk
UmVzb3VyY2U0JyB3YXMgbm90IGZvdW5kIl9zKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlk
IGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNo
ZXI6OlNlcnZlckVycm9yLCBlcnJvcik7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNl
bmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgfTsKLQotICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57
Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpT
T046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKLSAgICB9OwotCi0gICAgW21fZGVsZWdhdGUg
bG9hZFJlc291cmNlNFdpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxi
YWNrOnN1Y2Nlc3NDYWxsYmFja107Ci19Ci0KLXZvaWQgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFj
a2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTUobG9uZyByZXF1ZXN0SWQpCi17Ci0gICAgaWYg
KCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGxvYWRSZXNvdXJjZTVX
aXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsKLSAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRj
aGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMy5sb2FkUmVzb3VyY2U1JyB3YXMgbm90IGZv
dW5kIl9zKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMo
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5T
U3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90
b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJv
cik7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0g
ICAgfTsKLQotICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57Ci0gICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCks
IGZhbHNlKTsKLSAgICB9OwotCi0gICAgW21fZGVsZWdhdGUgbG9hZFJlc291cmNlNVdpdGhFcnJv
ckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107
Ci19Ci0KLXZvaWQgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRS
ZXNvdXJjZTYobG9uZyByZXF1ZXN0SWQpCi17Ci0gICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25k
c1RvU2VsZWN0b3I6QHNlbGVjdG9yKGxvYWRSZXNvdXJjZTZXaXRoRXJyb3JDYWxsYmFjazpzdWNj
ZXNzQ2FsbGJhY2s6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJv
dG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwg
IidOZXR3b3JrMy5sb2FkUmVzb3VyY2U2JyB3YXMgbm90IGZvdW5kIl9zKTsKLSAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwg
QmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7Ci0gICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgfTsKLQotICAgIGlkIHN1Y2Nl
c3NDYWxsYmFjayA9IF57Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25z
ZShyZXF1ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKLSAgICB9OwotCi0g
ICAgW21fZGVsZWdhdGUgbG9hZFJlc291cmNlNldpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJh
Y2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107Ci19Ci0KLXZvaWQgT2JqQ0luc3Bl
Y3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTcobG9uZyByZXF1ZXN0
SWQpCi17Ci0gICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9y
KGxvYWRSZXNvdXJjZTdXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsKLSAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQs
IEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMy5sb2FkUmVzb3Vy
Y2U3JyB3YXMgbm90IGZvdW5kIl9zKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2Vu
ZFBlbmRpbmdFcnJvcnMoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlkIGVycm9y
Q2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNl
cnZlckVycm9yLCBlcnJvcik7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5k
aW5nRXJyb3JzKCk7Ci0gICAgfTsKLQotICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57Ci0gICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpTT046Ok9i
amVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKLSAgICB9OwotCi0gICAgW21fZGVsZWdhdGUgbG9hZFJl
c291cmNlN1dpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1
Y2Nlc3NDYWxsYmFja107Ci19Ci0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8V2ViSW5zcGVj
dG9yL1Rlc3RQcm90b2NvbC5oPgotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVs
dCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0Ci1A
cHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluLCBzZXR0ZXI9c2V0TmV0d29yazFIYW5kbGVyOikg
aWQ8VGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyPiBuZXR3b3JrMUhhbmRsZXI7Ci1A
cHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluLCBzZXR0ZXI9c2V0TmV0d29yazNIYW5kbGVyOikg
aWQ8VGVzdFByb3RvY29sTmV0d29yazNEb21haW5IYW5kbGVyPiBuZXR3b3JrM0hhbmRsZXI7Ci1A
ZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAi
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRl
cm5hbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jaW1w
b3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgotI2ltcG9y
dCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1w
b3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMu
aD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5o
PgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW1wbGVtZW50YXRpb24gVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxl
ciogX2NvbnRyb2xsZXI7Ci0gICAgaWQ8VGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVy
PiBfbmV0d29yazFIYW5kbGVyOwotICAgIGlkPFRlc3RQcm90b2NvbE5ldHdvcmszRG9tYWluSGFu
ZGxlcj4gX25ldHdvcmszSGFuZGxlcjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29u
dHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCi17Ci0g
ICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBu
aWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIpOwotICAgIF9jb250cm9sbGVyID0gY29udHJvbGxl
cjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgW19uZXR3
b3JrMUhhbmRsZXIgcmVsZWFzZV07Ci0gICAgW19uZXR3b3JrM0hhbmRsZXIgcmVsZWFzZV07Ci0g
ICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi0tICh2b2lkKXNldE5ldHdvcmsxSGFuZGxlcjooaWQ8
VGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyPiloYW5kbGVyCi17Ci0gICAgaWYgKGhh
bmRsZXIgPT0gX25ldHdvcmsxSGFuZGxlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgW19uZXR3
b3JrMUhhbmRsZXIgcmVsZWFzZV07Ci0gICAgX25ldHdvcmsxSGFuZGxlciA9IFtoYW5kbGVyIHJl
dGFpbl07Ci0KLSAgICBhdXRvIGFsdGVybmF0ZURpc3BhdGNoZXIgPSBtYWtlVW5pcXVlPE9iakNJ
bnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPihoYW5kbGVyKTsKLSAgICBhdXRvIGFs
dGVybmF0ZUFnZW50ID0gbWFrZVVuaXF1ZTxBbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudDxOZXR3
b3JrMUJhY2tlbmREaXNwYXRjaGVyLCBBbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVy
Pj4oIk5ldHdvcmsxIl9zLCAqX2NvbnRyb2xsZXIsIFdURk1vdmUoYWx0ZXJuYXRlRGlzcGF0Y2hl
cikpOwotICAgIF9jb250cm9sbGVyLT5hcHBlbmRFeHRyYUFnZW50KFdURk1vdmUoYWx0ZXJuYXRl
QWdlbnQpKTsKLX0KLQotLSAoaWQ8VGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyPilu
ZXR3b3JrMUhhbmRsZXIKLXsKLSAgICByZXR1cm4gX25ldHdvcmsxSGFuZGxlcjsKLX0KLQotLSAo
dm9pZClzZXROZXR3b3JrM0hhbmRsZXI6KGlkPFRlc3RQcm90b2NvbE5ldHdvcmszRG9tYWluSGFu
ZGxlcj4paGFuZGxlcgotewotICAgIGlmIChoYW5kbGVyID09IF9uZXR3b3JrM0hhbmRsZXIpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIFtfbmV0d29yazNIYW5kbGVyIHJlbGVhc2VdOwotICAgIF9u
ZXR3b3JrM0hhbmRsZXIgPSBbaGFuZGxlciByZXRhaW5dOwotCi0gICAgYXV0byBhbHRlcm5hdGVE
aXNwYXRjaGVyID0gbWFrZVVuaXF1ZTxPYmpDSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0
Y2hlcj4oaGFuZGxlcik7Ci0gICAgYXV0byBhbHRlcm5hdGVBZ2VudCA9IG1ha2VVbmlxdWU8QWx0
ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlciwgQWx0ZXJu
YXRlTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcj4+KCJOZXR3b3JrMyJfcywgKl9jb250cm9sbGVy
LCBXVEZNb3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIpKTsKLSAgICBfY29udHJvbGxlci0+YXBwZW5k
RXh0cmFBZ2VudChXVEZNb3ZlKGFsdGVybmF0ZUFnZW50KSk7Ci19Ci0KLS0gKGlkPFRlc3RQcm90
b2NvbE5ldHdvcmszRG9tYWluSGFuZGxlcj4pbmV0d29yazNIYW5kbGVyCi17Ci0gICAgcmV0dXJu
IF9uZXR3b3JrM0hhbmRsZXI7Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbENvbmZpZ3VyYXRpb24ubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50
RGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5z
LXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQot
I2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDx3dGYvSlNP
TlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLSMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdp
dGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLSNp
bXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KLQotCi0KLQotdHlw
ZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sUGxhdGZvcm0pIHsKLSAgICBUZXN0
UHJvdG9jb2xQbGF0Zm9ybUFsbCwKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWMsCi0g
ICAgVGVzdFByb3RvY29sUGxhdGZvcm1JT1MsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNP
UywKLX07Ci0KLQotCi0KLQotQHByb3RvY29sIFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFu
ZGxlciA8TlNPYmplY3Q+Ci1Ab3B0aW9uYWwKLS0gKHZvaWQpbG9hZFJlc291cmNlMVdpdGhFcnJv
ckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNz
Q2FsbGJhY2s6KHZvaWQoXikodm9pZCkpc3VjY2Vzc0NhbGxiYWNrOwotQGVuZAotCi1AcHJvdG9j
b2wgVGVzdFByb3RvY29sTmV0d29yazNEb21haW5IYW5kbGVyIDxOU09iamVjdD4KLUBvcHRpb25h
bAotLSAodm9pZClsb2FkUmVzb3VyY2UxV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJp
bmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKSh2b2lkKSlz
dWNjZXNzQ2FsbGJhY2s7Ci0tICh2b2lkKWxvYWRSZXNvdXJjZTJXaXRoRXJyb3JDYWxsYmFjazoo
dm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2
b2lkKF4pKHZvaWQpKXN1Y2Nlc3NDYWxsYmFjazsKLS0gKHZvaWQpbG9hZFJlc291cmNlM1dpdGhF
cnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNj
ZXNzQ2FsbGJhY2s6KHZvaWQoXikodm9pZCkpc3VjY2Vzc0NhbGxiYWNrOwotLSAodm9pZClsb2Fk
UmVzb3VyY2U0V2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJv
ckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKSh2b2lkKSlzdWNjZXNzQ2FsbGJhY2s7
Ci0tICh2b2lkKWxvYWRSZXNvdXJjZTVXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmlu
ZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKHZvaWQpKXN1
Y2Nlc3NDYWxsYmFjazsKLS0gKHZvaWQpbG9hZFJlc291cmNlNldpdGhFcnJvckNhbGxiYWNrOih2
b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZv
aWQoXikodm9pZCkpc3VjY2Vzc0NhbGxiYWNrOwotLSAodm9pZClsb2FkUmVzb3VyY2U3V2l0aEVy
cm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nl
c3NDYWxsYmFjazoodm9pZCheKSh2b2lkKSlzdWNjZXNzQ2FsbGJhY2s7Ci1AZW5kCi0KLQotCi0K
LSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVj
dHMuaD4KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sSW50ZXJuYWwuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNp
bXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCi0jaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPHd0Zi9K
U09OVmFsdWVzLmg+Ci0KLQotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwu
aAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5k
LXNpemVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9j
b2xBcnJheUNvbnZlcnNpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+Ci1PcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90
b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKLQotaW5saW5lIFN0cmluZyB0b1Byb3Rv
Y29sU3RyaW5nKFRlc3RQcm90b2NvbFBsYXRmb3JtIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1
ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1BbGw6Ci0gICAgICAgIHJldHVybiAi
YWxsIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOgotICAgICAgICBy
ZXR1cm4gImdlbmVyaWMiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzoKLSAg
ICAgICAgcmV0dXJuICJpb3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09T
OgotICAgICAgICByZXR1cm4gIm1hY29zIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5s
aW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFBsYXRmb3JtPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gImFsbCIpCi0gICAgICAgIHJl
dHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDsKLSAgICBpZiAodmFsdWUgPT0gImdlbmVyaWMi
KQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOwotICAgIGlmICh2
YWx1ZSA9PSAiaW9zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOwot
ICAgIGlmICh2YWx1ZSA9PSAibWFjb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxh
dGZvcm1NYWNPUzsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi0KLQotfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNv
bW1hbmQtc2l6ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLQotI2ltcG9ydCAi
VGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCi0jaW1w
b3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotCi11c2lu
ZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucyAoTmV0d29yazJEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlTG9hZGVySWQ6KE5TU3Ry
aW5nICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotCi1AZW5kCi0KLUBpbXBs
ZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKE5ldHdvcmsyRG9tYWluKQot
Ci0rICh2b2lkKV9wYXJzZUxvYWRlcklkOihOU1N0cmluZyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9h
ZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9h
ZCwgW05TU3RyaW5nIGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gKE5TU3RyaW5nICopcGF5bG9h
ZDsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6
ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1w
b3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmpl
Y3RQcml2YXRlLmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3RmL0pT
T05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0KLQotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZW51bS12YWx1
ZXMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9lbnVtLXZhbHVlcy5qc29uLXJlc3VsdApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggZjA2ZmViYjc4ZDcuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVk
L2VudW0tdmFsdWVzLmpzb24tcmVzdWx0CisrKyAvZGV2L251bGwKQEAgLTEsMTIzNiArMCwwIEBA
Ci0jIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0vLyBUeXBlRG9tYWluCi1JbnNwZWN0b3JCYWNr
ZW5kLnJlZ2lzdGVyRG9tYWluKCJUeXBlRG9tYWluIiwgbnVsbCk7Ci1JbnNwZWN0b3JCYWNrZW5k
LnJlZ2lzdGVyRW51bSgiVHlwZURvbWFpbi5UeXBlRG9tYWluRW51bSIsIHtTaGFyZWQ6ICJzaGFy
ZWQiLCBSZWQ6ICJyZWQiLCBHcmVlbjogImdyZWVuIiwgQmx1ZTogImJsdWUifSk7Ci1JbnNwZWN0
b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJUeXBlRG9tYWluIiwgbnVsbCk7Ci0KLS8vIENvbW1h
bmREb21haW4KLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIkNvbW1hbmREb21haW4i
LCBudWxsKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJDb21tYW5kRG9tYWlu
LmNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlIiwgbnVsbCwgW10sIFsicmV0dXJuVmFsdWUiXSk7
Ci1JbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJDb21tYW5kRG9tYWluIiwgbnVsbCk7
Ci0KLS8vIEV2ZW50RG9tYWluCi1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJFdmVu
dERvbWFpbiIsIG51bGwpOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIkV2ZW50RG9t
YWluLkV2ZW50V2l0aEVudW1QYXJhbWV0ZXJQYXJhbWV0ZXIiLCB7U2hhcmVkOiAic2hhcmVkIiwg
QmxhY2s6ICJibGFjayIsIFdoaXRlOiAid2hpdGUifSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lz
dGVyRXZlbnQoIkV2ZW50RG9tYWluLmV2ZW50V2l0aEVudW1QYXJhbWV0ZXIiLCBudWxsLCBbInBh
cmFtZXRlciJdKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudERvbWFpbkRpc3BhdGNo
ZXIgPSBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRGlzcGF0Y2hlci5iaW5kKEluc3BlY3RvckJh
Y2tlbmQsICJFdmVudERvbWFpbiIpOwotSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigi
RXZlbnREb21haW4iLCBudWxsKTsKLSMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1h
bmRzLmpzCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJz
LmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQot
Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0KLSNpbmNsdWRl
ICJUZXN0UHJvdG9jb2xUeXBlcy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
RnJvbnRlbmRSb3V0ZXIuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEFsdGVy
bmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2b2lkIHNldEJhY2tlbmREaXNw
YXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2Vu
ZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9Ci0gICAgQmFja2VuZERpc3BhdGNo
ZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hl
ci5nZXQoKTsgfQotcHJpdmF0ZToKLSAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFj
a2VuZERpc3BhdGNoZXI7Ci19OwotCi0KLWNsYXNzIEFsdGVybmF0ZUNvbW1hbmREb21haW5CYWNr
ZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJs
aWM6Ci0gICAgdmlydHVhbCB+QWx0ZXJuYXRlQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVy
KCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlKGxvbmcg
Y2FsbElkKSA9IDA7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotI2VuZGlmIC8v
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotIyMjIEVuZCBGaWxlOiBU
ZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVu
dW0tdmFsdWVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXR5
cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCi1jbGFzcyBBbHRlcm5hdGVDb21tYW5kRG9tYWluQmFja2VuZERpc3Bh
dGNoZXI7Ci0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
Ci0KLWNsYXNzIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewotcHVibGlj
OgotICAgIC8vIE5hbWVkIGFmdGVyIHBhcmFtZXRlciAncmV0dXJuVmFsdWUnIHdoaWxlIGdlbmVy
YXRpbmcgY29tbWFuZC9ldmVudCBjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZS4KLSAgICBlbnVt
IGNsYXNzIFJldHVyblZhbHVlIHsKLSAgICAgICAgU2hhcmVkID0gMCwKLSAgICAgICAgQ3lhbiA9
IDYsCi0gICAgICAgIE1hZ2VudGEgPSA3LAotICAgICAgICBZZWxsb3cgPSA4LAotICAgIH07IC8v
IGVudW0gY2xhc3MgUmV0dXJuVmFsdWUKLSAgICB2aXJ0dWFsIHZvaWQgY29tbWFuZFdpdGhFbnVt
UmV0dXJuVmFsdWUoRXJyb3JTdHJpbmcmLCBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyOjpSZXR1cm5WYWx1ZSogb3V0X3JldHVyblZhbHVlKSA9IDA7Ci1wcm90ZWN0ZWQ6Ci0g
ICAgdmlydHVhbCB+Q29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOwotfTsK
LQotY2xhc3MgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1
cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPENv
bW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwg
Q29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIHZvaWQgZGlzcGF0
Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0
PiYmIG1lc3NhZ2UpIGZpbmFsOwotcHJpdmF0ZToKLSAgICB2b2lkIGNvbW1hbmRXaXRoRW51bVJl
dHVyblZhbHVlKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRl
cnMpOwotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotcHVibGlj
OgotICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0Y2hlcihBbHRlcm5hdGVDb21tYW5kRG9tYWlu
QmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNw
YXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQotcHJpdmF0ZToKLSAgICBBbHRlcm5hdGVD
b21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIqIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciB7IG51
bGxwdHIgfTsKLSNlbmRpZgotcHJpdmF0ZToKLSAgICBDb21tYW5kRG9tYWluQmFja2VuZERpc3Bh
dGNoZXIoQmFja2VuZERpc3BhdGNoZXImLCBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyKik7Ci0gICAgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9h
Z2VudCB7IG51bGxwdHIgfTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVu
ZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
ZW51bS12YWx1ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVy
cy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIu
aD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ry
b3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2lmIEVOQUJMRShJTlNQ
RUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlcnMuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotQ29t
bWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6fkNvbW1hbmREb21haW5CYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KLQotUmVmPENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0
Y2hlcj4gQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoQmFja2VuZERpc3Bh
dGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyKiBhZ2VudCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDb21tYW5kRG9tYWlu
QmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIsIGFnZW50KSk7Ci19Ci0KLUNvbW1h
bmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVy
KEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgQ29tbWFuZERvbWFpbkJhY2tl
bmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCi0gICAgOiBTdXBwbGVtZW50YWxCYWNrZW5kRGlz
cGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKLSAgICAsIG1fYWdlbnQoYWdlbnQpCi17Ci0gICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKCJDb21tYW5k
RG9tYWluIl9zLCB0aGlzKTsKLX0KLQotdm9pZCBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNo
ZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpT
T046Ok9iamVjdD4mJiBtZXNzYWdlKQotewotICAgIFJlZjxDb21tYW5kRG9tYWluQmFja2VuZERp
c3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwotCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFy
YW1ldGVyczsKLSAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFyYW1ldGVycyk7
Ci0KLSAgICBpZiAobWV0aG9kID09ICJjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZSIpCi0gICAg
ICAgIGNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0
ZXJzKSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90
b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidDb21tYW5kRG9t
YWluLiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7Ci19Ci0KLXZvaWQgQ29tbWFuZERv
bWFpbkJhY2tlbmREaXNwYXRjaGVyOjpjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShsb25nIHJl
cXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKLXsKLSNpZiBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7
Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+Y29tbWFuZFdpdGhFbnVtUmV0dXJuVmFs
dWUocmVxdWVzdElkKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAgRXJy
b3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKLSAgICBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
OjpSZXR1cm5WYWx1ZSBvdXRfcmV0dXJuVmFsdWU7Ci0gICAgbV9hZ2VudC0+Y29tbWFuZFdpdGhF
bnVtUmV0dXJuVmFsdWUoZXJyb3IsICZvdXRfcmV0dXJuVmFsdWUpOwotCi0gICAgaWYgKCFlcnJv
ci5sZW5ndGgoKSkKLSAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInJldHVyblZhbHVlIl9zLCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUob3V0
X3JldHVyblZhbHVlKSk7Ci0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCks
IGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFBy
b3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9y
KSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNw
YXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMu
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21h
IG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDx3dGYv
SlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgRnJvbnRlbmRSb3V0ZXI7Ci0KLWNsYXNzIEV2ZW50RG9t
YWluRnJvbnRlbmREaXNwYXRjaGVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1
YmxpYzoKLSAgICBFdmVudERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcihGcm9udGVuZFJvdXRlciYg
ZnJvbnRlbmRSb3V0ZXIpIDogbV9mcm9udGVuZFJvdXRlcihmcm9udGVuZFJvdXRlcikgeyB9Ci0g
ICAgICAgIC8vIE5hbWVkIGFmdGVyIHBhcmFtZXRlciAncGFyYW1ldGVyJyB3aGlsZSBnZW5lcmF0
aW5nIGNvbW1hbmQvZXZlbnQgZXZlbnRXaXRoRW51bVBhcmFtZXRlci4KLSAgICAgICAgZW51bSBj
bGFzcyBQYXJhbWV0ZXIgewotICAgICAgICAgICAgU2hhcmVkID0gMCwKLSAgICAgICAgICAgIEJs
YWNrID0gNCwKLSAgICAgICAgICAgIFdoaXRlID0gNSwKLSAgICAgICAgfTsgLy8gZW51bSBjbGFz
cyBQYXJhbWV0ZXIKLSAgICB2b2lkIGV2ZW50V2l0aEVudW1QYXJhbWV0ZXIoUGFyYW1ldGVyIHBh
cmFtZXRlcik7Ci1wcml2YXRlOgotICAgIEZyb250ZW5kUm91dGVyJiBtX2Zyb250ZW5kUm91dGVy
OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9u
dGVuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNo
ZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXZvaWQgRXZl
bnREb21haW5Gcm9udGVuZERpc3BhdGNoZXI6OmV2ZW50V2l0aEVudW1QYXJhbWV0ZXIoUGFyYW1l
dGVyIHBhcmFtZXRlcikKLXsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpT
T046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9k
Il9zLCAiRXZlbnREb21haW4uZXZlbnRXaXRoRW51bVBhcmFtZXRlciJfcyk7Ci0gICAgUmVmPEpT
T046Ok9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBw
YXJhbXNPYmplY3QtPnNldFN0cmluZygicGFyYW1ldGVyIl9zLCBJbnNwZWN0b3I6OlByb3RvY29s
OjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUocGFyYW1ldGVyKSk7Ci0gICAganNv
bk1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIl9zLCBXVEZNb3ZlKHBhcmFtc09iamVjdCkpOwot
Ci0gICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmlu
ZygpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVz
dEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xP
YmplY3RzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEg
b25jZQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5o
PgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Igewot
Ci0KLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLS8vIEZvcndhcmQgZGVjbGFyYXRpb25z
LgotbmFtZXNwYWNlIFR5cGVEb21haW4gewotZW51bSBjbGFzcyBUeXBlRG9tYWluRW51bTsKLX0g
Ly8gVHlwZURvbWFpbgotLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgotCi0KLQotCi1u
YW1lc3BhY2UgVGVzdEhlbHBlcnMgewotCi1TdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50
IGNvZGUpOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFs
dWUoVCBlbnVtVmFsdWUpCi17Ci0gICAgcmV0dXJuIGdldEVudW1Db25zdGFudFZhbHVlKHN0YXRp
Y19jYXN0PGludD4oZW51bVZhbHVlKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJz
Ci0KLW5hbWVzcGFjZSBUeXBlRG9tYWluIHsKLS8qICAqLwotZW51bSBjbGFzcyBUeXBlRG9tYWlu
RW51bSB7Ci0gICAgU2hhcmVkID0gMCwKLSAgICBSZWQgPSAxLAotICAgIEdyZWVuID0gMiwKLSAg
ICBCbHVlID0gMywKLX07IC8vIGVudW0gY2xhc3MgVHlwZURvbWFpbkVudW0KLX0gLy8gVHlwZURv
bWFpbgotCi0KLQotbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
UHJvdG9jb2xFbnVtVHlwZT4KLU9wdGlvbmFsPFByb3RvY29sRW51bVR5cGU+IHBhcnNlRW51bVZh
bHVlRnJvbVN0cmluZyhjb25zdCBTdHJpbmcmKTsKLQotLy8gRW51bXMgaW4gdGhlICdUeXBlRG9t
YWluJyBEb21haW4KLXRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5
cGVEb21haW46OlR5cGVEb21haW5FbnVtPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVj
dG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW0+KGNvbnN0IFN0cmluZyYp
OwotCi19IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwotCi19IC8vIG5hbWVzcGFjZSBQcm90b2Nv
bAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotbmFtZXNwYWNlIFdURiB7Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKLQotLy8gSGFzaCBkZWNsYXJhdGlv
bnMgaW4gdGhlICdUeXBlRG9tYWluJyBEb21haW4KLXRlbXBsYXRlPD4KLXN0cnVjdCBEZWZhdWx0
SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51bT4gewot
ICAgIHR5cGVkZWYgSW50SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBl
RG9tYWluRW51bT4gSGFzaDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgotIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9i
amVjdHMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMu
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotCi0jaW5jbHVk
ZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1l
c3BhY2UgSW5zcGVjdG9yIHsKLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotbmFtZXNwYWNlIFRl
c3RIZWxwZXJzIHsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFs
dWVzW10gPSB7Ci0gICAgInNoYXJlZCIsCi0gICAgInJlZCIsCi0gICAgImdyZWVuIiwKLSAgICAi
Ymx1ZSIsCi0gICAgImJsYWNrIiwKLSAgICAid2hpdGUiLAotICAgICJjeWFuIiwKLSAgICAibWFn
ZW50YSIsCi0gICAgInllbGxvdyIsCi19OwotCi1TdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUo
aW50IGNvZGUpIHsKLSAgICByZXR1cm4gZW51bV9jb25zdGFudF92YWx1ZXNbY29kZV07Ci19Ci0K
LS8vIEVudW1zIGluIHRoZSAnVHlwZURvbWFpbicgRG9tYWluCi10ZW1wbGF0ZTw+Ci1PcHRpb25h
bDxJbnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51bT4gcGFyc2VF
bnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46OlR5cGVE
b21haW5FbnVtPihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQotewotICAgIHN0YXRpYyBj
b25zdCBzaXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsKLSAgICAgICAgKHNpemVfdClJbnNwZWN0
b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51bTo6U2hhcmVkLAotICAgICAg
ICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46OlR5cGVEb21haW5FbnVt
OjpSZWQsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6
VHlwZURvbWFpbkVudW06OkdyZWVuLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9j
b2w6OlR5cGVEb21haW46OlR5cGVEb21haW5FbnVtOjpCbHVlLAotICAgIH07Ci0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCA0OyArK2kpCi0gICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBl
bnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCi0gICAgICAgICAgICByZXR1
cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46OlR5cGVEb21haW5FbnVtKWNvbnN0
YW50VmFsdWVzW2ldOwotCi0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotCi19IC8vIG5h
bWVzcGFjZSBUZXN0SGVscGVycwotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0
cy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5o
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW5jbHVk
ZSA8d3RmL1JldGFpblB0ci5oPgotCi1AcHJvdG9jb2wgVGVzdFByb3RvY29sQ29tbWFuZERvbWFp
bkRvbWFpbkhhbmRsZXI7Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLWNsYXNzIE9iakNJ
bnNwZWN0b3JDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgQWx0
ZXJuYXRlQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyIHsKLSAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBPYmpDSW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tl
bmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbENvbW1hbmREb21haW5Eb21haW5IYW5kbGVyPiBo
YW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9Ci0gICAgdm9pZCBjb21tYW5kV2l0aEVu
dW1SZXR1cm5WYWx1ZShsb25nIHJlcXVlc3RJZCkgZmluYWw7Ci1wcml2YXRlOgotICAgIFJldGFp
blB0cjxpZDxUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdh
dGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZW51bS12YWx1ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmRE
aXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbmNs
dWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZh
bHVlcy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdm9pZCBPYmpDSW5zcGVjdG9yQ29t
bWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShs
b25nIHJlcXVlc3RJZCkKLXsKLSAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3Rv
cjpAc2VsZWN0b3IoY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWVXaXRoRXJyb3JDYWxsYmFjazpz
dWNjZXNzQ2FsbGJhY2s6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0
UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3Vu
ZCwgIidDb21tYW5kRG9tYWluLmNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlJyB3YXMgbm90IGZv
dW5kIl9zKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMo
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5T
U3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90
b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJv
cik7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0g
ICAgfTsKLQotICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oVGVzdFByb3RvY29sQ29tbWFuZERv
bWFpbkNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlUmV0dXJuVmFsdWUgcmV0dXJuVmFsdWUpIHsK
LSAgICAgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInJldHVyblZhbHVlIl9z
LCB0b1Byb3RvY29sU3RyaW5nKHJldHVyblZhbHVlKSk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0T2JqZWN0KSwgZmFs
c2UpOwotICAgIH07Ci0KLSAgICBbbV9kZWxlZ2F0ZSBjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1
ZVdpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3ND
YWxsYmFja107Ci19Ci0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBlbnVtLXZhbHVlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KLQotX19hdHRy
aWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAotQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbiwg
c2V0dGVyPXNldENvbW1hbmREb21haW5IYW5kbGVyOikgaWQ8VGVzdFByb3RvY29sQ29tbWFuZERv
bWFpbkRvbWFpbkhhbmRsZXI+IGNvbW1hbmREb21haW5IYW5kbGVyOwotQHByb3BlcnR5IChub25h
dG9taWMsIHJlYWRvbmx5KSBUZXN0UHJvdG9jb2xFdmVudERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0
Y2hlciAqZXZlbnREb21haW5FdmVudERpc3BhdGNoZXI7Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbENvbmZpZ3VyYXRpb24ubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBl
bnVtLXZhbHVlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKLQotI2ltcG9ydCAiVGVz
dFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRj
aGVycy5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdl
bnQuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJv
bGxlci5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2Vu
ZERpc3BhdGNoZXJzLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcnMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGltcGxlbWVu
dGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KLXsKLSAgICBBdWdtZW50YWJsZUluc3Bl
Y3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotICAgIGlkPFRlc3RQcm90b2NvbENvbW1hbmRE
b21haW5Eb21haW5IYW5kbGVyPiBfY29tbWFuZERvbWFpbkhhbmRsZXI7Ci0gICAgVGVzdFByb3Rv
Y29sRXZlbnREb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKl9ldmVudERvbWFpbkV2ZW50RGlz
cGF0Y2hlcjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVu
dGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtzdXBl
ciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJU
KGNvbnRyb2xsZXIpOwotICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1cm4g
c2VsZjsKLX0KLQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgW19jb21tYW5kRG9tYWluSGFuZGxl
ciByZWxlYXNlXTsKLSAgICBbX2V2ZW50RG9tYWluRXZlbnREaXNwYXRjaGVyIHJlbGVhc2VdOwot
ICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAodm9pZClzZXRDb21tYW5kRG9tYWluSGFuZGxl
cjooaWQ8VGVzdFByb3RvY29sQ29tbWFuZERvbWFpbkRvbWFpbkhhbmRsZXI+KWhhbmRsZXIKLXsK
LSAgICBpZiAoaGFuZGxlciA9PSBfY29tbWFuZERvbWFpbkhhbmRsZXIpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIFtfY29tbWFuZERvbWFpbkhhbmRsZXIgcmVsZWFzZV07Ci0gICAgX2NvbW1hbmRE
b21haW5IYW5kbGVyID0gW2hhbmRsZXIgcmV0YWluXTsKLQotICAgIGF1dG8gYWx0ZXJuYXRlRGlz
cGF0Y2hlciA9IG1ha2VVbmlxdWU8T2JqQ0luc3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5kRGlz
cGF0Y2hlcj4oaGFuZGxlcik7Ci0gICAgYXV0byBhbHRlcm5hdGVBZ2VudCA9IG1ha2VVbmlxdWU8
QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8Q29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVy
LCBBbHRlcm5hdGVDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI+PigiQ29tbWFuZERvbWFp
biJfcywgKl9jb250cm9sbGVyLCBXVEZNb3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIpKTsKLSAgICBf
Y29udHJvbGxlci0+YXBwZW5kRXh0cmFBZ2VudChXVEZNb3ZlKGFsdGVybmF0ZUFnZW50KSk7Ci19
Ci0KLS0gKGlkPFRlc3RQcm90b2NvbENvbW1hbmREb21haW5Eb21haW5IYW5kbGVyPiljb21tYW5k
RG9tYWluSGFuZGxlcgotewotICAgIHJldHVybiBfY29tbWFuZERvbWFpbkhhbmRsZXI7Ci19Ci0K
LS0gKFRlc3RQcm90b2NvbEV2ZW50RG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyICopZXZlbnRE
b21haW5FdmVudERpc3BhdGNoZXIKLXsKLSAgICBpZiAoIV9ldmVudERvbWFpbkV2ZW50RGlzcGF0
Y2hlcikKLSAgICAgICAgX2V2ZW50RG9tYWluRXZlbnREaXNwYXRjaGVyID0gW1tUZXN0UHJvdG9j
b2xFdmVudERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciBhbGxvY10gaW5pdFdpdGhDb250cm9s
bGVyOl9jb250cm9sbGVyXTsKLSAgICByZXR1cm4gX2V2ZW50RG9tYWluRXZlbnREaXNwYXRjaGVy
OwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9u
Lm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIK
LSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7
Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xFdmVudERvbWFpbkRvbWFpbkV2ZW50RGlz
cGF0Y2hlcgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xs
ZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxl
SW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5p
dF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250
cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7
Ci19Ci0KLS0gKHZvaWQpZXZlbnRXaXRoRW51bVBhcmFtZXRlcldpdGhQYXJhbWV0ZXI6KFRlc3RQ
cm90b2NvbEV2ZW50RG9tYWluRXZlbnRXaXRoRW51bVBhcmFtZXRlclBhcmFtZXRlcilwYXJhbWV0
ZXIKLXsKLSAgICBjb25zdCBGcm9udGVuZFJvdXRlciYgcm91dGVyID0gX2NvbnRyb2xsZXItPmZy
b250ZW5kUm91dGVyKCk7Ci0KLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpT
T046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9k
Il9zLCAiRXZlbnREb21haW4uZXZlbnRXaXRoRW51bVBhcmFtZXRlciJfcyk7Ci0gICAgUmVmPEpT
T046Ok9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBw
YXJhbXNPYmplY3QtPnNldFN0cmluZygicGFyYW1ldGVyIl9zLCB0b1Byb3RvY29sU3RyaW5nKHBh
cmFtZXRlcikpOwotICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyJfcywgV1RGTW92
ZShwYXJhbXNPYmplY3QpKTsKLSAgICByb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pT
T05TdHJpbmcoKSk7Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2
ZW50RGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbgotLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0Zv
dW5kYXRpb24uaD4KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVj
dC5oPgotCi0KLQotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xQbGF0
Zm9ybSkgewotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsLAotICAgIFRlc3RQcm90b2NvbFBs
YXRmb3JtR2VuZXJpYywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUywKLSAgICBUZXN0UHJv
dG9jb2xQbGF0Zm9ybU1hY09TLAotfTsKLQotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBU
ZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bSkgewotICAgIFRlc3RQcm90b2NvbFR5cGVEb21haW5F
bnVtU2hhcmVkLAotICAgIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtUmVkLAotICAgIFRlc3RQ
cm90b2NvbFR5cGVEb21haW5FbnVtR3JlZW4sCi0gICAgVGVzdFByb3RvY29sVHlwZURvbWFpbkVu
dW1CbHVlLAotfTsKLQotCi0KLUBwcm90b2NvbCBUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluRG9t
YWluSGFuZGxlciA8TlNPYmplY3Q+Ci1Ab3B0aW9uYWwKLS0gKHZvaWQpY29tbWFuZFdpdGhFbnVt
UmV0dXJuVmFsdWVXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVy
cm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKFRlc3RQcm90b2NvbENvbW1hbmRE
b21haW5Db21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZVJldHVyblZhbHVlIHJldHVyblZhbHVlKSlz
dWNjZXNzQ2FsbGJhY2s7Ci1AZW5kCi0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZh
dWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xFdmVudERvbWFpbkRvbWFpbkV2ZW50RGlz
cGF0Y2hlciA6IE5TT2JqZWN0Ci0tICh2b2lkKWV2ZW50V2l0aEVudW1QYXJhbWV0ZXJXaXRoUGFy
YW1ldGVyOihUZXN0UHJvdG9jb2xFdmVudERvbWFpbkV2ZW50V2l0aEVudW1QYXJhbWV0ZXJQYXJh
bWV0ZXIpcGFyYW1ldGVyOwotQGVuZAotCi0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90
b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2wuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgi
Ci0jaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgotI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDx3
dGYvSlNPTlZhbHVlcy5oPgotCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbEV2ZW50RG9tYWluRG9t
YWluRXZlbnREaXNwYXRjaGVyIChQcml2YXRlKQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29u
dHJvbGxlcjooSW5zcGVjdG9yOjpBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRy
b2xsZXI7Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0j
aW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+Ci0KLW5h
bWVzcGFjZSBJbnNwZWN0b3IgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+Ci1P
cHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZh
bHVlKTsKLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFBsYXRm
b3JtIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29s
UGxhdGZvcm1BbGw6Ci0gICAgICAgIHJldHVybiAiYWxsIl9zOwotICAgIGNhc2UgVGVzdFByb3Rv
Y29sUGxhdGZvcm1HZW5lcmljOgotICAgICAgICByZXR1cm4gImdlbmVyaWMiX3M7Ci0gICAgY2Fz
ZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzoKLSAgICAgICAgcmV0dXJuICJpb3MiX3M7Ci0gICAg
Y2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOgotICAgICAgICByZXR1cm4gIm1hY29zIl9z
OwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFBs
YXRmb3JtPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBp
ZiAodmFsdWUgPT0gImFsbCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFs
bDsKLSAgICBpZiAodmFsdWUgPT0gImdlbmVyaWMiKQotICAgICAgICByZXR1cm4gVGVzdFByb3Rv
Y29sUGxhdGZvcm1HZW5lcmljOwotICAgIGlmICh2YWx1ZSA9PSAiaW9zIikKLSAgICAgICAgcmV0
dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOwotICAgIGlmICh2YWx1ZSA9PSAibWFjb3MiKQot
ICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzsKLSAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwotfQotCi0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJv
dG9jb2xUeXBlRG9tYWluRW51bSB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBj
YXNlIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtU2hhcmVkOgotICAgICAgICByZXR1cm4gInNo
YXJlZCJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtUmVkOgotICAgICAg
ICByZXR1cm4gInJlZCJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtR3Jl
ZW46Ci0gICAgICAgIHJldHVybiAiZ3JlZW4iX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xUeXBl
RG9tYWluRW51bUJsdWU6Ci0gICAgICAgIHJldHVybiAiYmx1ZSJfczsKLSAgICB9Ci19Ci0KLXRl
bXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bT4gZnJv
bVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09
ICJzaGFyZWQiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1TaGFy
ZWQ7Ci0gICAgaWYgKHZhbHVlID09ICJyZWQiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29s
VHlwZURvbWFpbkVudW1SZWQ7Ci0gICAgaWYgKHZhbHVlID09ICJncmVlbiIpCi0gICAgICAgIHJl
dHVybiBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bUdyZWVuOwotICAgIGlmICh2YWx1ZSA9PSAi
Ymx1ZSIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bUJsdWU7Ci0g
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0K
LSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
LmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlw
ZVBhcnNlci5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFBy
aXZhdGUuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGludGVyZmFjZSBUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFR5cGVEb21haW5Eb21haW4pCi0KLSsgKHZvaWQpX3Bh
cnNlVHlwZURvbWFpbkVudW06KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClw
YXlsb2FkOwotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMgKFR5cGVEb21haW5Eb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlVHlwZURvbWFpbkVudW06
KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKLSAg
ICBPcHRpb25hbDxUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bT4gcmVzdWx0ID0gSW5zcGVjdG9y
Ojpmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0+KHBheWxvYWQp
OwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX0VOVU1fVkFMVUUocmVzdWx0LCBAIlR5cGVE
b21haW5FbnVtIik7Ci0gICAgKm91dFZhbHVlID0gQChyZXN1bHQudmFsdWUoKSk7Ci19Ci0KLUBl
bmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNp
bXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8V2ViSW5zcGVj
dG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLSNpbXBvcnQgPHd0Zi9Bc3NlcnRp
b25zLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5z
cGVjdG9yOwotCi0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2Vu
ZXJpYy9leHBlY3RlZC9ldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxl
VHlwZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2V2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWlu
LWRlYnVnZ2FibGVUeXBlLmpzb24tcmVzdWx0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBkODlhOTdmZjU1ZC4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZXZlbnQtdGFyZ2V0VHlwZS1t
YXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1yZXN1bHQKKysrIC9kZXYvbnVsbApA
QCAtMSwxMDYzICswLDAgQEAKLSMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFu
ZHMuanMKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudC10YXJnZXRUeXBl
LW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLS8vIERvbWFpbgotSW5zcGVjdG9yQmFja2VuZC5yZWdp
c3RlckRvbWFpbigiRG9tYWluIiwgbnVsbCk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29t
bWFuZCgiRG9tYWluLkNvbW1hbmQiLCBudWxsLCBbXSwgW10pOwotSW5zcGVjdG9yQmFja2VuZC5y
ZWdpc3RlckV2ZW50KCJEb21haW4uRXZlbnQiLCBbInBhZ2UiLCAid29ya2VyIl0sIFtdKTsKLUlu
c3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW5EaXNwYXRjaGVyID0gSW5zcGVjdG9yQmFja2Vu
ZC5yZWdpc3RlckRpc3BhdGNoZXIuYmluZChJbnNwZWN0b3JCYWNrZW5kLCAiRG9tYWluIik7Ci1J
bnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJEb21haW4iLCBbInBhZ2UiXSk7Ci0jIyMg
RW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5
cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJh
Z21hIG9uY2UKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQot
Ci0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1j
bGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBzZXRC
YWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikg
eyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQotICAgIEJhY2tl
bmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2Vu
ZERpc3BhdGNoZXIuZ2V0KCk7IH0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPEJhY2tlbmREaXNwYXRj
aGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwotfTsKLQotCi1jbGFzcyBBbHRlcm5hdGVEb21haW5C
YWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1w
dWJsaWM6Ci0gICAgdmlydHVhbCB+QWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIoKSB7
IH0KLSAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChsb25nIGNhbGxJZCkgPSAwOwotfTsKLQotfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVS
TkFURV9ESVNQQVRDSEVSUykKLSMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNw
YXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudC10YXJnZXRUeXBlLW1hdGNoaW5n
LWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2Jq
ZWN0cy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNw
ZWN0b3IgewotCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQotI2lmIEVOQUJMRShJTlNQ
RUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotY2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFja2Vu
ZERpc3BhdGNoZXI7Ci0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCi0KLWNsYXNzIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7Ci1wdWJsaWM6
Ci0gICAgdmlydHVhbCB2b2lkIENvbW1hbmQoRXJyb3JTdHJpbmcmKSA9IDA7Ci1wcm90ZWN0ZWQ6
Ci0gICAgdmlydHVhbCB+RG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7Ci19OwotCi1j
bGFzcyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxC
YWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEb21haW5CYWNrZW5k
RGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgRG9tYWluQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyKik7Ci0gICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3Qg
U3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkgZmluYWw7Ci1wcml2
YXRlOgotICAgIHZvaWQgQ29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBwYXJhbWV0ZXJzKTsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKLXB1YmxpYzoKLSAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRl
RG9tYWluQmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5h
dGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQotcHJpdmF0ZToKLSAgICBBbHRl
cm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciogbV9hbHRlcm5hdGVEaXNwYXRjaGVyIHsgbnVs
bHB0ciB9OwotI2VuZGlmCi1wcml2YXRlOgotICAgIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKEJh
Y2tlbmREaXNwYXRjaGVyJiwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAg
RG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50IHsgbnVsbHB0ciB9OwotfTsK
LQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlz
cGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudC10YXJnZXRUeXBlLW1hdGNo
aW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0QmFj
a2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JG
cm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8
d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi0j
aWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jaW5jbHVkZSAiVGVz
dEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBJbnNw
ZWN0b3IgewotCi1Eb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5Eb21haW5CYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KLQotUmVmPERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBE
b21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5k
RGlzcGF0Y2hlciwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKLXsKLSAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlz
cGF0Y2hlciwgYWdlbnQpKTsKLX0KLQotRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkRvbWFpbkJh
Y2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgRG9t
YWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKLSAgICA6IFN1cHBsZW1lbnRhbEJh
Y2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQotICAgICwgbV9hZ2VudChhZ2VudCkK
LXsKLSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4o
IkRvbWFpbiJfcywgdGhpcyk7Ci19Ci0KLXZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmRp
c3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9i
amVjdD4mJiBtZXNzYWdlKQotewotICAgIFJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gcHJv
dGVjdCgqdGhpcyk7Ci0KLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOwotICAg
IG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsKLQotICAgIGlmICht
ZXRob2QgPT0gIkNvbW1hbmQiKQotICAgICAgICBDb21tYW5kKHJlcXVlc3RJZCwgV1RGTW92ZShw
YXJhbWV0ZXJzKSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBv
cnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21h
aW4uIiArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKLX0KLQotdm9pZCBEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJikKLXsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSAg
ICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0
Y2hlci0+Q29tbWFuZChyZXF1ZXN0SWQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlm
Ci0KLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQg
PSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIG1fYWdlbnQtPkNvbW1hbmQoZXJyb3IpOwot
Ci0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+
c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxz
ZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tl
bmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOwotfQotCi19IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJz
LmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9t
YWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3Rz
LmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEZyb250ZW5kUm91dGVy
OwotCi1jbGFzcyBEb21haW5Gcm9udGVuZERpc3BhdGNoZXIgewotICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwotcHVibGljOgotICAgIERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcihGcm9udGVu
ZFJvdXRlciYgZnJvbnRlbmRSb3V0ZXIpIDogbV9mcm9udGVuZFJvdXRlcihmcm9udGVuZFJvdXRl
cikgeyB9Ci0gICAgdm9pZCBFdmVudCgpOwotcHJpdmF0ZToKLSAgICBGcm9udGVuZFJvdXRlciYg
bV9mcm9udGVuZFJvdXRlcjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVu
ZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi12b2lkIERvbWFpbkZy
b250ZW5kRGlzcGF0Y2hlcjo6RXZlbnQoKQotewotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25N
ZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3Ry
aW5nKCJtZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOwotCi0gICAgbV9mcm9udGVuZFJvdXRl
ci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMu
Y3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1k
ZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
UHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5hbWVzcGFj
ZSBJbnNwZWN0b3IgewotCi0KLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLQotCi0KLQot
Ci0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgot
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbE9iamVjdHMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
ZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotCi0jaW5jbHVkZSA8d3RmL09w
dGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5z
cGVjdG9yIHsKLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIFBy
b3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbE9iamVjdHMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5k
RGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRh
cmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2luY2x1ZGUgPHd0Zi9S
ZXRhaW5QdHIuaD4KLQotQHByb3RvY29sIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI7
Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLWNsYXNzIE9iakNJbnNwZWN0b3JEb21haW5C
YWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlz
cGF0Y2hlciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgT2Jq
Q0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbERvbWFpbkRv
bWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KLSAgICB2b2lk
IENvbW1hbmQobG9uZyByZXF1ZXN0SWQpIGZpbmFsOwotcHJpdmF0ZToKLSAgICBSZXRhaW5QdHI8
aWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7Ci19OwotCi19
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNr
ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERp
c3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnQtdGFy
Z2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBv
cnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSAiVGVzdFBy
b3RvY29sSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMu
aCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsK
LQotdm9pZCBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9u
ZyByZXF1ZXN0SWQpCi17Ci0gICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6
QHNlbGVjdG9yKENvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsK
LSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0
SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uQ29tbWFuZCcg
d2FzIG5vdCBmb3VuZCJfcyk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5k
aW5nRXJyb3JzKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZCBlcnJvckNhbGxi
YWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJF
cnJvciwgZXJyb3IpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vy
cm9ycygpOwotICAgIH07Ci0KLSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpLCBmYWxzZSk7Ci0gICAgfTsKLQotICAgIFttX2RlbGVnYXRlIENvbW1hbmRXaXRo
RXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJh
Y2tdOwotfQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbi5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
ZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxXZWJJbnNw
ZWN0b3IvVGVzdFByb3RvY29sLmg+Ci0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZh
dWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QK
LUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4sIHNldHRlcj1zZXREb21haW5IYW5kbGVyOikg
aWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4gZG9tYWluSGFuZGxlcjsKLUBwcm9w
ZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnRE
aXNwYXRjaGVyICpkb21haW5FdmVudERpc3BhdGNoZXI7Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbENvbmZpZ3VyYXRpb24ubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBl
dmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90
b2NvbENvbmZpZ3VyYXRpb24uaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIK
LSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KLSNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW1w
b3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLQotdXNp
bmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENv
bmZpZ3VyYXRpb24KLXsKLSAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250
cm9sbGVyOwotICAgIGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IF9kb21haW5I
YW5kbGVyOwotICAgIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqX2Rv
bWFpbkV2ZW50RGlzcGF0Y2hlcjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJv
bGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCi17Ci0gICAg
c2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7
Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIpOwotICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsK
LSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgW19kb21haW5I
YW5kbGVyIHJlbGVhc2VdOwotICAgIFtfZG9tYWluRXZlbnREaXNwYXRjaGVyIHJlbGVhc2VdOwot
ICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAodm9pZClzZXREb21haW5IYW5kbGVyOihpZDxU
ZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiloYW5kbGVyCi17Ci0gICAgaWYgKGhhbmRs
ZXIgPT0gX2RvbWFpbkhhbmRsZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIFtfZG9tYWluSGFu
ZGxlciByZWxlYXNlXTsKLSAgICBfZG9tYWluSGFuZGxlciA9IFtoYW5kbGVyIHJldGFpbl07Ci0K
LSAgICBhdXRvIGFsdGVybmF0ZURpc3BhdGNoZXIgPSBtYWtlVW5pcXVlPE9iakNJbnNwZWN0b3JE
b21haW5CYWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7Ci0gICAgYXV0byBhbHRlcm5hdGVBZ2Vu
dCA9IG1ha2VVbmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8RG9tYWluQmFja2VuZERp
c3BhdGNoZXIsIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyPj4oIkRvbWFpbiJfcywg
Kl9jb250cm9sbGVyLCBXVEZNb3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIpKTsKLSAgICBfY29udHJv
bGxlci0+YXBwZW5kRXh0cmFBZ2VudChXVEZNb3ZlKGFsdGVybmF0ZUFnZW50KSk7Ci19Ci0KLS0g
KGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+KWRvbWFpbkhhbmRsZXIKLXsKLSAg
ICByZXR1cm4gX2RvbWFpbkhhbmRsZXI7Ci19Ci0KLS0gKFRlc3RQcm90b2NvbERvbWFpbkRvbWFp
bkV2ZW50RGlzcGF0Y2hlciAqKWRvbWFpbkV2ZW50RGlzcGF0Y2hlcgotewotICAgIGlmICghX2Rv
bWFpbkV2ZW50RGlzcGF0Y2hlcikKLSAgICAgICAgX2RvbWFpbkV2ZW50RGlzcGF0Y2hlciA9IFtb
VGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyIGFsbG9jXSBpbml0V2l0aENv
bnRyb2xsZXI6X2NvbnRyb2xsZXJdOwotICAgIHJldHVybiBfZG9tYWluRXZlbnREaXNwYXRjaGVy
OwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9u
Lm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGlu
Zy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1w
b3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPHd0Zi9KU09OVmFs
dWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBU
ZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIKLXsKLSAgICBBdWdtZW50YWJs
ZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotfQotCi0tIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRy
b2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAg
ICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRyb2xsZXIg
PSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKUV2ZW50Ci17Ci0g
ICAgY29uc3QgRnJvbnRlbmRSb3V0ZXImIHJvdXRlciA9IF9jb250cm9sbGVyLT5mcm9udGVuZFJv
dXRlcigpOwotCi0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmpl
Y3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRv
bWFpbi5FdmVudCJfcyk7Ci0gICAgcm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09O
U3RyaW5nKCkpOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVu
dERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9t
YWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLSNpbXBvcnQg
PFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KLQotCi0KLQotdHlwZWRlZiBO
U19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sUGxhdGZvcm0pIHsKLSAgICBUZXN0UHJvdG9j
b2xQbGF0Zm9ybUFsbCwKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWMsCi0gICAgVGVz
dFByb3RvY29sUGxhdGZvcm1JT1MsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUywKLX07
Ci0KLQotCi0KLQotQHByb3RvY29sIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXIgPE5T
T2JqZWN0PgotQG9wdGlvbmFsCi0tICh2b2lkKUNvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazoodm9p
ZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lk
KF4pKHZvaWQpKXN1Y2Nlc3NDYWxsYmFjazsKLUBlbmQKLQotX19hdHRyaWJ1dGVfXygodmlzaWJp
bGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2
ZW50RGlzcGF0Y2hlciA6IE5TT2JqZWN0Ci0tICh2b2lkKUV2ZW50OwotQGVuZAotCi0KLSNpbXBv
cnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4K
LQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sSW50ZXJuYWwuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50
LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29s
LmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgotI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0
IDx3dGYvSlNPTlZhbHVlcy5oPgotCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbERvbWFpbkRvbWFp
bkV2ZW50RGlzcGF0Y2hlciAoUHJpdmF0ZSkKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRy
b2xsZXI6KEluc3BlY3Rvcjo6QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9s
bGVyOwotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1k
ZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JX
SVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQot
dGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgotT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBm
cm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0KLWlubGluZSBTdHJpbmcg
dG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xQbGF0Zm9ybSB2YWx1ZSkKLXsKLSAgICBzd2l0
Y2godmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOgotICAgICAgICBy
ZXR1cm4gImFsbCJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzoKLSAg
ICAgICAgcmV0dXJuICJnZW5lcmljIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1J
T1M6Ci0gICAgICAgIHJldHVybiAiaW9zIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZv
cm1NYWNPUzoKLSAgICAgICAgcmV0dXJuICJtYWNvcyJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRl
PD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xQbGF0Zm9ybT4gZnJvbVByb3RvY29sU3Ry
aW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJhbGwiKQotICAg
ICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1BbGw7Ci0gICAgaWYgKHZhbHVlID09ICJn
ZW5lcmljIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzsKLSAg
ICBpZiAodmFsdWUgPT0gImlvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9y
bUlPUzsKLSAgICBpZiAodmFsdWUgPT0gIm1hY29zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90
b2NvbFBsYXRmb3JtTWFjT1M7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5t
bQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRhcmdldFR5cGUtbWF0
Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
LmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlw
ZVBhcnNlci5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFBy
aXZhdGUuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0KLQotCi0KLSMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xUeXBlcy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFBy
b3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
LmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5o
PgotI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+
Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFy
YW1ldGVycy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRl
cnMuanNvbi1yZXN1bHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhOTViYTU1OGNm
Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9ldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJz
Lmpzb24tcmVzdWx0CisrKyAvZGV2L251bGwKQEAgLTEsMTIxNyArMCwwIEBACi0jIyMgQmVnaW4g
RmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLS8vIERhdGFiYXNlCi1JbnNwZWN0
b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJEYXRhYmFzZSIsIG51bGwpOwotSW5zcGVjdG9yQmFj
a2VuZC5yZWdpc3RlckV2ZW50KCJEYXRhYmFzZS5kaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJz
IiwgbnVsbCwgWyJjb2x1bW5OYW1lcyIsICJub3RlcyIsICJ0aW1lc3RhbXAiLCAidmFsdWVzIiwg
InBheWxvYWQiLCAic3FsRXJyb3IiLCAic2NyZWVuQ29sb3IiLCAiYWx0ZXJuYXRlQ29sb3JzIiwg
InByaW50Q29sb3IiXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnQoIkRhdGFiYXNl
LmRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyIsIG51bGwsIFsiY29sdW1uTmFtZXMiLCAi
bm90ZXMiLCAidGltZXN0YW1wIiwgInZhbHVlcyIsICJwYXlsb2FkIiwgInNxbEVycm9yIiwgInNj
cmVlbkNvbG9yIiwgImFsdGVybmF0ZUNvbG9ycyIsICJwcmludENvbG9yIl0pOwotSW5zcGVjdG9y
QmFja2VuZC5yZWdpc3RlckRhdGFiYXNlRGlzcGF0Y2hlciA9IEluc3BlY3RvckJhY2tlbmQucmVn
aXN0ZXJEaXNwYXRjaGVyLmJpbmQoSW5zcGVjdG9yQmFja2VuZCwgIkRhdGFiYXNlIik7Ci1JbnNw
ZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJEYXRhYmFzZSIsIG51bGwpOwotIyMjIEVuZCBG
aWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi0jaW5jbHVkZSAiVGVzdFByb3Rv
Y29sVHlwZXMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91
dGVyLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBBbHRlcm5hdGVCYWNrZW5k
RGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQ
dHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVy
ID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQotICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5k
RGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0K
LXByaXZhdGU6Ci0gICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRj
aGVyOwotfTsKLQotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSNlbmRpZiAvLyBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSMjIyBFbmQgRmlsZTogVGVz
dEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFj
a2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVu
dHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9j
b2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNl
IEluc3BlY3RvciB7Ci0KLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCi0KLQotfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMu
aAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJz
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVk
ZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVS
TkFURV9ESVNQQVRDSEVSUykKLSNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXJzLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi19IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNw
cAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMu
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21h
IG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDx3dGYv
SlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgRnJvbnRlbmRSb3V0ZXI7Ci0KLWNsYXNzIERhdGFiYXNl
RnJvbnRlbmREaXNwYXRjaGVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1Ymxp
YzoKLSAgICBEYXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hlcihGcm9udGVuZFJvdXRlciYgZnJvbnRl
bmRSb3V0ZXIpIDogbV9mcm9udGVuZFJvdXRlcihmcm9udGVuZFJvdXRlcikgeyB9Ci0gICAgdm9p
ZCBkaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmlu
Zz4+IGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIG5vdGVzLCBjb25zdCBkb3VibGUqIHRpbWVz
dGFtcCwgUmVmUHRyPEpTT046Ok9iamVjdD4gdmFsdWVzLCBSZWZQdHI8SlNPTjo6VmFsdWU+IHBh
eWxvYWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVy
cm9yLCBjb25zdCBTdHJpbmcqIHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4gYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcqIHBy
aW50Q29sb3IpOwotICAgIHZvaWQgZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKFJlZlB0
cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG5vdGVz
LCBkb3VibGUgdGltZXN0YW1wLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiB2YWx1ZXMsIFJlZlB0cjxK
U09OOjpWYWx1ZT4gcGF5bG9hZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNl
OjpFcnJvcj4gc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiBhbHRlcm5hdGVDb2xvcnMsIGNv
bnN0IFN0cmluZyYgcHJpbnRDb2xvcik7Ci1wcml2YXRlOgotICAgIEZyb250ZW5kUm91dGVyJiBt
X2Zyb250ZW5kUm91dGVyOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5k
IEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RG
cm9udGVuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgot
Ci1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdm9pZCBEYXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hl
cjo6ZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJp
bmc+PiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nKiBub3RlcywgY29uc3QgZG91YmxlKiB0aW1l
c3RhbXAsIFJlZlB0cjxKU09OOjpPYmplY3Q+IHZhbHVlcywgUmVmUHRyPEpTT046OlZhbHVlPiBw
YXlsb2FkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBzcWxF
cnJvciwgY29uc3QgU3RyaW5nKiBzY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IGFsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nKiBw
cmludENvbG9yKQotewotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3Ms
ICJEYXRhYmFzZS5kaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzIl9zKTsKLSAgICBSZWY8SlNP
Tjo6T2JqZWN0PiBwYXJhbXNPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGlm
IChjb2x1bW5OYW1lcykKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiY29sdW1uTmFt
ZXMiX3MsIGNvbHVtbk5hbWVzKTsKLSAgICBpZiAobm90ZXMpCi0gICAgICAgIHBhcmFtc09iamVj
dC0+c2V0U3RyaW5nKCJub3RlcyJfcywgKm5vdGVzKTsKLSAgICBpZiAodGltZXN0YW1wKQotICAg
ICAgICBwYXJhbXNPYmplY3QtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCAqdGltZXN0YW1wKTsK
LSAgICBpZiAodmFsdWVzKQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgidmFsdWVz
Il9zLCB2YWx1ZXMpOwotICAgIGlmIChwYXlsb2FkKQotICAgICAgICBwYXJhbXNPYmplY3QtPnNl
dFZhbHVlKCJwYXlsb2FkIl9zLCAqcGF5bG9hZCk7Ci0gICAgaWYgKHNxbEVycm9yKQotICAgICAg
ICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIHNxbEVycm9yKTsKLSAgICBp
ZiAoc2NyZWVuQ29sb3IpCi0gICAgICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJzY3JlZW5D
b2xvciJfcywgKnNjcmVlbkNvbG9yKTsKLSAgICBpZiAoYWx0ZXJuYXRlQ29sb3JzKQotICAgICAg
ICBwYXJhbXNPYmplY3QtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIGFsdGVybmF0ZUNv
bG9ycyk7Ci0gICAgaWYgKHByaW50Q29sb3IpCi0gICAgICAgIHBhcmFtc09iamVjdC0+c2V0U3Ry
aW5nKCJwcmludENvbG9yIl9zLCAqcHJpbnRDb2xvcik7Ci0gICAganNvbk1lc3NhZ2UtPnNldE9i
amVjdCgicGFyYW1zIl9zLCBXVEZNb3ZlKHBhcmFtc09iamVjdCkpOwotCi0gICAgbV9mcm9udGVu
ZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKLX0KLQotdm9p
ZCBEYXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hlcjo6ZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0
ZXJzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IGNvbHVtbk5hbWVzLCBjb25zdCBTdHJp
bmcmIG5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiB2YWx1ZXMs
IFJlZlB0cjxKU09OOjpWYWx1ZT4gcGF5bG9hZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpFcnJvcj4gc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgc2NyZWVuQ29sb3IsIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiBhbHRlcm5hdGVD
b2xvcnMsIGNvbnN0IFN0cmluZyYgcHJpbnRDb2xvcikKLXsKLSAgICBSZWY8SlNPTjo6T2JqZWN0
PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2Ut
PnNldFN0cmluZygibWV0aG9kIl9zLCAiRGF0YWJhc2UuZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJh
bWV0ZXJzIl9zKTsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBwYXJhbXNPYmplY3QgPSBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpOwotICAgIHBhcmFtc09iamVjdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVz
Il9zLCBjb2x1bW5OYW1lcyk7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoIm5vdGVzIl9z
LCBub3Rlcyk7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgdGlt
ZXN0YW1wKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgidmFsdWVzIl9zLCB2YWx1ZXMp
OwotICAgIHBhcmFtc09iamVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIHBheWxvYWQpOwotICAg
IHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgc3FsRXJyb3IpOwotICAgIHBh
cmFtc09iamVjdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgc2NyZWVuQ29sb3IpOwotICAg
IHBhcmFtc09iamVjdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgYWx0ZXJuYXRlQ29s
b3JzKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgcHJpbnRD
b2xvcik7Ci0gICAganNvbk1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIl9zLCBXVEZNb3ZlKHBh
cmFtc09iamVjdCkpOwotCi0gICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3Nh
Z2UtPnRvSlNPTlN0cmluZygpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMj
IyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2Vy
dGlvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi1uYW1lc3BhY2UgUHJvdG9j
b2wgewotCi0KLQotLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCi1uYW1lc3BhY2UgRGF0YWJhc2Ug
ewotY2xhc3MgRXJyb3I7Ci19IC8vIERhdGFiYXNlCi0vLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJh
dGlvbnMuCi0KLQotLy8gVHlwZWRlZnMuCi1uYW1lc3BhY2UgRGF0YWJhc2UgewotLyogVW5pcXVl
IGlkZW50aWZpZXIgb2YgRGF0YWJhc2Ugb2JqZWN0LiAqLwotdHlwZWRlZiBTdHJpbmcgRGF0YWJh
c2VJZDsKLXR5cGVkZWYgU3RyaW5nIFByaW1hcnlDb2xvcnM7Ci10eXBlZGVmIEpTT046OkFycmF5
T2Y8U3RyaW5nPiBDb2xvckxpc3Q7Ci19IC8vIERhdGFiYXNlCi0vLyBFbmQgb2YgdHlwZWRlZnMu
Ci0KLW5hbWVzcGFjZSBEYXRhYmFzZSB7Ci0vKiBEYXRhYmFzZSBlcnJvci4gKi8KLWNsYXNzIEVy
cm9yIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewotcHVibGljOgotICAgIGVudW0gewotICAg
ICAgICBOb0ZpZWxkc1NldCA9IDAsCi0gICAgICAgIE1lc3NhZ2VTZXQgPSAxIDw8IDAsCi0gICAg
ICAgIENvZGVTZXQgPSAxIDw8IDEsCi0gICAgICAgIEFsbEZpZWxkc1NldCA9IChNZXNzYWdlU2V0
IHwgQ29kZVNldCkKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8aW50IFNUQVRFPgotICAgIGNsYXNz
IEJ1aWxkZXIgewotICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1f
cmVzdWx0OwotCi0gICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RF
UD4mIGNhc3RTdGF0ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnBy
ZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIEJ1aWxkZXIoUmVmPC8qRXJyb3IqL0pTT046Ok9iamVjdD4mJiBvYmplY3QpCi0gICAgICAg
ICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKLSAgICAgICAgewotICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9u
b25faW5pdF9zdGF0ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZnJpZW5kIGNsYXNzIEVycm9yOwot
ICAgIHB1YmxpYzoKLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTWVzc2FnZVNldD4mIHNldE1l
c3NhZ2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoIShTVEFURSAmIE1lc3NhZ2VTZXQpLCBwcm9wZXJ0eV9tZXNzYWdlX2FscmVhZHlf
c2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1lc3NhZ2UiX3MsIHZhbHVl
KTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TWVzc2FnZVNldD4oKTsKLSAgICAgICAg
fQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2RlU2V0PiYgc2V0Q29kZShpbnQgdmFsdWUp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2RlU2V0
KSwgcHJvcGVydHlfY29kZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
SW50ZWdlcigiY29kZSJfcywgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxD
b2RlU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgUmVmPEVycm9yPiByZWxlYXNlKCkKLSAg
ICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0
LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVv
ZihFcnJvcikgPT0gc2l6ZW9mKEpTT046Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsKLQotICAgICAg
ICAgICAgUmVmPEpTT046Ok9iamVjdD4ganNvblJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25O
dWxsKCk7Ci0gICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nh
c3Q8UmVmPEVycm9yPio+KCZqc29uUmVzdWx0KSk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0
OwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIC8qCi0gICAgICogU3ludGhldGljIGNvbnN0cnVj
dG9yOgotICAgICAqIFJlZjxFcnJvcj4gcmVzdWx0ID0gRXJyb3I6OmNyZWF0ZSgpCi0gICAgICog
ICAgIC5zZXRNZXNzYWdlKC4uLikKLSAgICAgKiAgICAgLnNldENvZGUoLi4uKQotICAgICAqICAg
ICAucmVsZWFzZSgpOwotICAgICAqLwotICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBj
cmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046
Ok9iamVjdDo6Y3JlYXRlKCkpOwotICAgIH0KLX07Ci0KLX0gLy8gRGF0YWJhc2UKLQotCi0KLX0g
Ly8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbE9iamVjdHMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRz
LXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0UHJv
dG9jb2xPYmplY3RzLmgiCi0KLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1uYW1lc3BhY2Ug
UHJvdG9jb2wgewotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLQot
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVy
cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMu
aD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLQotCi1uYW1lc3BhY2UgSW5zcGVjdG9y
IHsKLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
QmFja2VuZERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
ZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVz
dFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xJ
bnRlcm5hbC5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2lu
Y2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi19IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5k
RGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRp
b24uaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlv
bmFsLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+Ci0KLV9fYXR0cmli
dXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xD
b25maWd1cmF0aW9uIDogTlNPYmplY3QKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkg
VGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5FdmVudERpc3BhdGNoZXIgKmRhdGFiYXNlRXZlbnRE
aXNwYXRjaGVyOwotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJh
dGlvbi5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFy
YW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKLQotI2ltcG9ydCAiVGVzdFBy
b3RvY29sSW50ZXJuYWwuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVy
cy5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQu
aD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxl
ci5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERp
c3BhdGNoZXJzLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcnMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGltcGxlbWVudGF0
aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KLXsKLSAgICBBdWdtZW50YWJsZUluc3BlY3Rv
ckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWlu
RXZlbnREaXNwYXRjaGVyICpfZGF0YWJhc2VFdmVudERpc3BhdGNoZXI7Ci19Ci0KLS0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxl
ciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxm
KQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBfY29u
dHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVh
bGxvYwotewotICAgIFtfZGF0YWJhc2VFdmVudERpc3BhdGNoZXIgcmVsZWFzZV07Ci0gICAgW3N1
cGVyIGRlYWxsb2NdOwotfQotCi0tIChUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkV2ZW50RGlz
cGF0Y2hlciAqKWRhdGFiYXNlRXZlbnREaXNwYXRjaGVyCi17Ci0gICAgaWYgKCFfZGF0YWJhc2VF
dmVudERpc3BhdGNoZXIpCi0gICAgICAgIF9kYXRhYmFzZUV2ZW50RGlzcGF0Y2hlciA9IFtbVGVz
dFByb3RvY29sRGF0YWJhc2VEb21haW5FdmVudERpc3BhdGNoZXIgYWxsb2NdIGluaXRXaXRoQ29u
dHJvbGxlcjpfY29udHJvbGxlcl07Ci0gICAgcmV0dXJuIF9kYXRhYmFzZUV2ZW50RGlzcGF0Y2hl
cjsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
bi5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBh
cmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5n
IG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xEYXRh
YmFzZURvbWFpbkV2ZW50RGlzcGF0Y2hlcgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29u
dHJvbGxlciogX2NvbnRyb2xsZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRy
b2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgotewotICAg
IHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmls
OwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7
Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1l
dGVyc1dpdGhDb2x1bW5OYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKWNvbHVtbk5hbWVz
IG5vdGVzOihOU1N0cmluZyAqKilub3RlcyB0aW1lc3RhbXA6KGRvdWJsZSAqKXRpbWVzdGFtcCB2
YWx1ZXM6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKil2YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9j
b2xKU09OT2JqZWN0ICoqKXBheWxvYWQgc3FsRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJy
b3IgKiopc3FsRXJyb3Igc2NyZWVuQ29sb3I6KE5TU3RyaW5nICoqKXNjcmVlbkNvbG9yIGFsdGVy
bmF0ZUNvbG9yczooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKWFsdGVybmF0ZUNvbG9ycyBwcmlu
dENvbG9yOihOU1N0cmluZyAqKilwcmludENvbG9yCi17Ci0gICAgY29uc3QgRnJvbnRlbmRSb3V0
ZXImIHJvdXRlciA9IF9jb250cm9sbGVyLT5mcm9udGVuZFJvdXRlcigpOwotCi0gICAgVEhST1df
RVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKGNvbHVtbk5hbWVzLCBAImNvbHVt
bk5hbWVzIik7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVS
KG5vdGVzLCBAIm5vdGVzIik7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxf
UEFSQU1FVEVSKHZhbHVlcywgQCJ2YWx1ZXMiKTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JB
RF9PUFRJT05BTF9QQVJBTUVURVIocGF5bG9hZCwgQCJwYXlsb2FkIik7Ci0gICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHNxbEVycm9yLCBAInNxbEVycm9yIik7
Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHNjcmVlbkNv
bG9yLCBAInNjcmVlbkNvbG9yIik7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9O
QUxfUEFSQU1FVEVSKGFsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsKLSAgICBU
SFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIocHJpbnRDb2xvciwgQCJw
cmludENvbG9yIik7Ci0KLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9z
LCAiRGF0YWJhc2UuZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyJfcyk7Ci0gICAgUmVmPEpT
T046Ok9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBp
ZiAoY29sdW1uTmFtZXMpCi0gICAgICAgIHBhcmFtc09iamVjdC0+c2V0QXJyYXkoImNvbHVtbk5h
bWVzIl9zLCB0b0pTT05TdHJpbmdBcnJheSgoKmNvbHVtbk5hbWVzKSkpOwotICAgIGlmIChub3Rl
cykKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCAoKm5vdGVzKSk7
Ci0gICAgaWYgKHRpbWVzdGFtcCkKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXREb3VibGUoInRp
bWVzdGFtcCJfcywgKCp0aW1lc3RhbXApKTsKLSAgICBpZiAodmFsdWVzKQotICAgICAgICBwYXJh
bXNPYmplY3QtPnNldE9iamVjdCgidmFsdWVzIl9zLCBbKCp2YWx1ZXMpIHRvSlNPTk9iamVjdF0p
OwotICAgIGlmIChwYXlsb2FkKQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldFZhbHVlKCJwYXls
b2FkIl9zLCBbKCpwYXlsb2FkKSB0b0pTT05PYmplY3RdKTsKLSAgICBpZiAoc3FsRXJyb3IpCi0g
ICAgICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgWygqc3FsRXJyb3Ip
IHRvSlNPTk9iamVjdF0pOwotICAgIGlmIChzY3JlZW5Db2xvcikKLSAgICAgICAgcGFyYW1zT2Jq
ZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCAoKnNjcmVlbkNvbG9yKSk7Ci0gICAgaWYg
KGFsdGVybmF0ZUNvbG9ycykKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJu
YXRlQ29sb3JzIl9zLCB0b0pTT05TdHJpbmdBcnJheSgoKmFsdGVybmF0ZUNvbG9ycykpKTsKLSAg
ICBpZiAocHJpbnRDb2xvcikKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInByaW50
Q29sb3IiX3MsICgqcHJpbnRDb2xvcikpOwotICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoInBh
cmFtcyJfcywgV1RGTW92ZShwYXJhbXNPYmplY3QpKTsKLSAgICByb3V0ZXIuc2VuZEV2ZW50KGpz
b25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Ci19Ci0KLS0gKHZvaWQpZGlkRXhlY3V0ZU5vT3B0
aW9uYWxQYXJhbWV0ZXJzV2l0aENvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilj
b2x1bW5OYW1lcyBub3RlczooTlNTdHJpbmcgKilub3RlcyB0aW1lc3RhbXA6KGRvdWJsZSl0aW1l
c3RhbXAgdmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKil2YWx1ZXMgcGF5bG9hZDooUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZCBzcWxFcnJvcjooVGVzdFByb3RvY29sRGF0YWJh
c2VFcnJvciAqKXNxbEVycm9yIHNjcmVlbkNvbG9yOihOU1N0cmluZyAqKXNjcmVlbkNvbG9yIGFs
dGVybmF0ZUNvbG9yczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopYWx0ZXJuYXRlQ29sb3JzIHBy
aW50Q29sb3I6KE5TU3RyaW5nICopcHJpbnRDb2xvcgotewotICAgIGNvbnN0IEZyb250ZW5kUm91
dGVyJiByb3V0ZXIgPSBfY29udHJvbGxlci0+ZnJvbnRlbmRSb3V0ZXIoKTsKLQotICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5h
bWVzIik7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIobm90ZXMs
IEAibm90ZXMiKTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUih2
YWx1ZXMsIEAidmFsdWVzIik7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJB
TUVURVIocGF5bG9hZCwgQCJwYXlsb2FkIik7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFV
SVJFRF9QQVJBTUVURVIoc3FsRXJyb3IsIEAic3FsRXJyb3IiKTsKLSAgICBUSFJPV19FWENFUFRJ
T05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihzY3JlZW5Db2xvciwgQCJzY3JlZW5Db2xvciIpOwot
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKGFsdGVybmF0ZUNvbG9y
cywgQCJhbHRlcm5hdGVDb2xvcnMiKTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVE
X1BBUkFNRVRFUihwcmludENvbG9yLCBAInByaW50Q29sb3IiKTsKLQotICAgIFJlZjxKU09OOjpP
YmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVz
c2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEYXRhYmFzZS5kaWRFeGVjdXRlTm9PcHRpb25h
bFBhcmFtZXRlcnMiX3MpOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHBhcmFtc09iamVjdCA9IEpT
T046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiY29sdW1u
TmFtZXMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KGNvbHVtbk5hbWVzKSk7Ci0gICAgcGFyYW1zT2Jq
ZWN0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBub3Rlcyk7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRE
b3VibGUoInRpbWVzdGFtcCJfcywgdGltZXN0YW1wKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldE9i
amVjdCgidmFsdWVzIl9zLCBbdmFsdWVzIHRvSlNPTk9iamVjdF0pOwotICAgIHBhcmFtc09iamVj
dC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFtwYXlsb2FkIHRvSlNPTk9iamVjdF0pOwotICAgIHBh
cmFtc09iamVjdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgW3NxbEVycm9yIHRvSlNPTk9iamVj
dF0pOwotICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgc2NyZWVu
Q29sb3IpOwotICAgIHBhcmFtc09iamVjdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywg
dG9KU09OU3RyaW5nQXJyYXkoYWx0ZXJuYXRlQ29sb3JzKSk7Ci0gICAgcGFyYW1zT2JqZWN0LT5z
ZXRTdHJpbmcoInByaW50Q29sb3IiX3MsIHByaW50Q29sb3IpOwotICAgIGpzb25NZXNzYWdlLT5z
ZXRPYmplY3QoInBhcmFtcyJfcywgV1RGTW92ZShwYXJhbXNPYmplY3QpKTsKLSAgICByb3V0ZXIu
c2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Ci19Ci0KLUBlbmQKLQotCi0j
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
ZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5o
PgotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+Ci0KLQot
QGNsYXNzIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I7Ci0KLXR5cGVkZWYgTlNfRU5VTShOU0lu
dGVnZXIsIFRlc3RQcm90b2NvbFBsYXRmb3JtKSB7Ci0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1B
bGwsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljLAotICAgIFRlc3RQcm90b2NvbFBs
YXRmb3JtSU9TLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1MsCi19OwotCi0KLQotCi1f
X2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFBy
b3RvY29sRGF0YWJhc2VFcnJvciA6IFJXSVByb3RvY29sSlNPTk9iamVjdAotLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxv
YWQ7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xK
U09OT2JqZWN0ICopanNvbk9iamVjdDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6
KE5TU3RyaW5nICopbWVzc2FnZSBjb2RlOihpbnQpY29kZTsKLS8qIHJlcXVpcmVkICovIEBwcm9w
ZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqbWVzc2FnZTsKLS8qIHJlcXVpcmVkICov
IEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCBjb2RlOwotQGVuZAotCi0KLQotX19h
dHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90
b2NvbERhdGFiYXNlRG9tYWluRXZlbnREaXNwYXRjaGVyIDogTlNPYmplY3QKLS0gKHZvaWQpZGlk
RXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVyc1dpdGhDb2x1bW5OYW1lczooTlNBcnJheS8qPE5TU3Ry
aW5nPiovICoqKWNvbHVtbk5hbWVzIG5vdGVzOihOU1N0cmluZyAqKilub3RlcyB0aW1lc3RhbXA6
KGRvdWJsZSAqKXRpbWVzdGFtcCB2YWx1ZXM6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKil2YWx1
ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqKXBheWxvYWQgc3FsRXJyb3I6KFRl
c3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKiopc3FsRXJyb3Igc2NyZWVuQ29sb3I6KE5TU3RyaW5n
ICoqKXNjcmVlbkNvbG9yIGFsdGVybmF0ZUNvbG9yczooTlNBcnJheS8qPE5TU3RyaW5nPiovICoq
KWFsdGVybmF0ZUNvbG9ycyBwcmludENvbG9yOihOU1N0cmluZyAqKilwcmludENvbG9yOwotLSAo
dm9pZClkaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNXaXRoQ29sdW1uTmFtZXM6KE5TQXJy
YXkvKjxOU1N0cmluZz4qLyAqKWNvbHVtbk5hbWVzIG5vdGVzOihOU1N0cmluZyAqKW5vdGVzIHRp
bWVzdGFtcDooZG91YmxlKXRpbWVzdGFtcCB2YWx1ZXM6KFJXSVByb3RvY29sSlNPTk9iamVjdCAq
KXZhbHVlcyBwYXlsb2FkOihSV0lQcm90b2NvbEpTT05PYmplY3QgKilwYXlsb2FkIHNxbEVycm9y
OihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICopc3FsRXJyb3Igc2NyZWVuQ29sb3I6KE5TU3Ry
aW5nICopc2NyZWVuQ29sb3IgYWx0ZXJuYXRlQ29sb3JzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8g
KilhbHRlcm5hdGVDb2xvcnMgcHJpbnRDb2xvcjooTlNTdHJpbmcgKilwcmludENvbG9yOwotQGVu
ZAotCi0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0
eU9iamVjdHMuaD4KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIK
LSNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCi0jaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPHd0
Zi9KU09OVmFsdWVzLmg+Ci0KLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5F
dmVudERpc3BhdGNoZXIgKFByaXZhdGUpCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9s
bGVyOihJbnNwZWN0b3I6OkF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxl
cjsKLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRl
c3RQcm90b2NvbC5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252
ZXJzaW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
T2JqQ0VudW1UeXBlPgotT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmco
Y29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhU
ZXN0UHJvdG9jb2xQbGF0Zm9ybSB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBj
YXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOgotICAgICAgICByZXR1cm4gImFsbCJfczsKLSAg
ICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzoKLSAgICAgICAgcmV0dXJuICJnZW5l
cmljIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1JT1M6Ci0gICAgICAgIHJldHVy
biAiaW9zIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzoKLSAgICAgICAg
cmV0dXJuICJtYWNvcyJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25h
bDxUZXN0UHJvdG9jb2xQbGF0Zm9ybT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYg
dmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJhbGwiKQotICAgICAgICByZXR1cm4gVGVzdFBy
b3RvY29sUGxhdGZvcm1BbGw7Ci0gICAgaWYgKHZhbHVlID09ICJnZW5lcmljIikKLSAgICAgICAg
cmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzsKLSAgICBpZiAodmFsdWUgPT0gImlv
cyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzsKLSAgICBpZiAodmFs
dWUgPT0gIm1hY29zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M7
Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0KLSMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAi
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5o
IgotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgotI2ltcG9ydCA8V2ViSW5zcGVj
dG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLQotdXNpbmcgbmFtZXNwYWNlIElu
c3BlY3RvcjsKLQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKERhdGFi
YXNlRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZURhdGFiYXNlSWQ6KE5TU3RyaW5nICoqKW91dFZh
bHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotKyAodm9pZClfcGFyc2VQcmltYXJ5Q29sb3Jz
OihOU1N0cmluZyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLSsgKHZvaWQp
X3BhcnNlQ29sb3JMaXN0OihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopb3V0VmFsdWUgZnJvbVBh
eWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZUVycm9yOihUZXN0UHJvdG9jb2xEYXRh
YmFzZUVycm9yICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotCi1AZW5kCi0K
LUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKERhdGFiYXNlRG9t
YWluKQotCi0rICh2b2lkKV9wYXJzZURhdGFiYXNlSWQ6KE5TU3RyaW5nICoqKW91dFZhbHVlIGZy
b21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQ
RShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSAoTlNTdHJpbmcg
KilwYXlsb2FkOwotfQotCi0rICh2b2lkKV9wYXJzZVByaW1hcnlDb2xvcnM6KE5TU3RyaW5nICoq
KW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUg
PSAoTlNTdHJpbmcgKilwYXlsb2FkOwotfQotCi0rICh2b2lkKV9wYXJzZUNvbG9yTGlzdDooTlNB
cnJheS8qPE5TU3RyaW5nPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17
Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNBcnJheS8qPE5T
U3RyaW5nPiovIGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gKE5TQXJyYXkvKjxOU1N0cmluZz4q
LyAqKXBheWxvYWQ7Ci19Ci0KLSsgKHZvaWQpX3BhcnNlRXJyb3I6KFRlc3RQcm90b2NvbERhdGFi
YXNlRXJyb3IgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJP
V19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsK
LSAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgYWxsb2NdIGluaXRX
aXRoUGF5bG9hZDpwYXlsb2FkXTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xU
eXBlcy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9w
dGlvbmFsLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQ
cm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgot
I2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsK
LQotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcgotCi0tIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAq
LCBpZD4gKilwYXlsb2FkCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAg
ICAgIHJldHVybiBuaWw7Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BF
UlRZKHBheWxvYWRbQCJtZXNzYWdlIl0sIEAibWVzc2FnZSIpOwotICAgIHNlbGYubWVzc2FnZSA9
IHBheWxvYWRbQCJtZXNzYWdlIl07Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVE
X1BST1BFUlRZKHBheWxvYWRbQCJjb2RlIl0sIEAiY29kZSIpOwotICAgIHNlbGYuY29kZSA9IFtw
YXlsb2FkW0AiY29kZSJdIGludGVnZXJWYWx1ZV07Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLS0g
KGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmpl
Y3QgKilvYmplY3QKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoSlNPTk9iamVj
dDpbb2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0KCldKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQot
ICAgIHJldHVybiBzZWxmOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhNZXNzYWdlOihO
U1N0cmluZyAqKW1lc3NhZ2UgY29kZTooaW50KWNvZGUKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1
cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfUkVRVUlSRURfUFJPUEVSVFkobWVzc2FnZSwgQCJtZXNzYWdlIik7Ci0KLSAgICBzZWxmLm1l
c3NhZ2UgPSBtZXNzYWdlOwotICAgIHNlbGYuY29kZSA9IGNvZGU7Ci0KLSAgICByZXR1cm4gc2Vs
ZjsKLX0KLQotLSAodm9pZClzZXRNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UKLXsKLSAgICBb
c3VwZXIgc2V0U3RyaW5nOm1lc3NhZ2UgZm9yS2V5OkAibWVzc2FnZSJdOwotfQotCi0tIChOU1N0
cmluZyAqKW1lc3NhZ2UKLXsKLSAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAIm1lc3Nh
Z2UiXTsKLX0KLQotLSAodm9pZClzZXRDb2RlOihpbnQpY29kZQotewotICAgIFtzdXBlciBzZXRJ
bnRlZ2VyOmNvZGUgZm9yS2V5OkAiY29kZSJdOwotfQotCi0tIChpbnQpY29kZQotewotICAgIHJl
dHVybiBbc3VwZXIgaW50ZWdlckZvcktleTpAImNvZGUiXTsKLX0KLQotQGVuZAotCi0KLSMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24t
Y29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLWVy
cm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVy
aWMvZXhwZWN0ZWQvZmFpbC1vbi1jb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRl
YnVnZ2FibGVUeXBlLmpzb24tZXJyb3IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEx
MzBhZDcwYzQwLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0
VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1lcnJvcgorKysgL2Rldi9u
dWxsCkBAIC0xICswLDAgQEAKLUVSUk9SOiBNYWxmb3JtZWQgZG9tYWluIHNwZWNpZmljYXRpb246
IGRvbWFpbiBEb21haW4gaGFzIGFuIGl0ZW0gaW4gdGFyZ2V0VHlwZXMgIlt1J3dvcmtlciddIiB0
aGF0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgYW55IHZhbHVlIGluIGRlYnVnZ2FibGVUeXBlcyAiW3Un
amF2YXNjcmlwdCddIi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tY29tbWFuZC10YXJnZXRU
eXBlcy10eXBlLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlwZXMt
dHlwZS5qc29uLWVycm9yCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OWY1ZTFhNGE4
ZS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1jb21tYW5kLXRhcmdldFR5cGVzLXR5
cGUuanNvbi1lcnJvcgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUVSUk9SOiBNYWxmb3Jt
ZWQgZG9tYWluIHNwZWNpZmljYXRpb246IHRhcmdldFR5cGVzIGxpc3QgZm9yIGNvbW1hbmQgUGFn
ZU9ubHkgaXMgbm90IGFuIGFycmF5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWNvbW1hbmQt
dGFyZ2V0VHlwZXMtdmFsdWUuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tY29tbWFuZC10YXJn
ZXRUeXBlcy12YWx1ZS5qc29uLWVycm9yCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAy
MWEzNjU2OTkyNi4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1jb21tYW5kLXRhcmdl
dFR5cGVzLXZhbHVlLmpzb24tZXJyb3IKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1FUlJP
UjogTWFsZm9ybWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9uOiB0YXJnZXRUeXBlcyBsaXN0IGZvciBj
b21tYW5kIFBhZ2VPbmx5IGlzIGFuIHVuc3VwcG9ydGVkIHN0cmluZy4gV2FzOiAiW3UncGFnZWUn
XSIsIEFsbG93ZWQgdmFsdWVzOiBzZXJ2aWNlLXdvcmtlciwgamF2YXNjcmlwdCwgd29ya2VyLCBw
YWdlLCB3ZWItcGFnZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1jb21tYW5kLXdpdGgtaW52
YWxpZC1wbGF0Zm9ybS5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1jb21tYW5kLXdpdGgtaW52
YWxpZC1wbGF0Zm9ybS5qc29uLWVycm9yCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBl
YzYzNmM1NGI3Yy4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1jb21tYW5kLXdpdGgt
aW52YWxpZC1wbGF0Zm9ybS5qc29uLWVycm9yCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAot
RVJST1I6IFVua25vd24gcGxhdGZvcm06IGludmFsaWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwt
b24tZG9tYWluLWRlYnVnZ2FibGVUeXBlcy10eXBlLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9u
LWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMtdHlwZS5qc29uLWVycm9yCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAyYjg5OGJhN2JlNy4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1v
bi1kb21haW4tZGVidWdnYWJsZVR5cGVzLXR5cGUuanNvbi1lcnJvcgorKysgL2Rldi9udWxsCkBA
IC0xICswLDAgQEAKLUVSUk9SOiBNYWxmb3JtZWQgZG9tYWluIHNwZWNpZmljYXRpb246IGRlYnVn
Z2FibGVUeXBlcyBmb3IgZG9tYWluIFdlYk9ubHkgaXMgbm90IGFuIGFycmF5CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9l
eHBlY3RlZC9mYWlsLW9uLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMtdmFsdWUuanNvbi1lcnJvciBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4
cGVjdGVkL2ZhaWwtb24tZG9tYWluLWRlYnVnZ2FibGVUeXBlcy12YWx1ZS5qc29uLWVycm9yCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjcxZDQ3MGNiZC4uMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMv
ZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4tZGVidWdnYWJsZVR5cGVzLXZhbHVlLmpzb24tZXJyb3IK
KysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1FUlJPUjogTWFsZm9ybWVkIGRvbWFpbiBzcGVj
aWZpY2F0aW9uOiBkZWJ1Z2dhYmxlVHlwZXMgZm9yIGRvbWFpbiBXZWJPbmx5IGlzIGFuIHVuc3Vw
cG9ydGVkIHN0cmluZy4gV2FzOiAiW3Und2ViYiddIiwgQWxsb3dlZCB2YWx1ZXM6IHNlcnZpY2Ut
d29ya2VyLCBqYXZhc2NyaXB0LCBwYWdlLCB3ZWItcGFnZQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFp
bC1vbi1kb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNv
bi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWlu
LWRlYnVnZ2FibGVUeXBlLmpzb24tZXJyb3IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDg2N2UzNTAwODk4Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWRvbWFpbi10YXJn
ZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLWVycm9yCisrKyAvZGV2
L251bGwKQEAgLTEgKzAsMCBAQAotRVJST1I6IE1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNhdGlv
bjogY29tbWFuZCBDb21tYW5kIGhhcyBhbiBpdGVtIGluIHRhcmdldFR5cGVzICJbdSd3b3JrZXIn
XSIgdGhhdCBpcyBub3Qgc3VwcG9ydGVkIGJ5IGFueSB2YWx1ZSBpbiBkZWJ1Z2dhYmxlVHlwZXMg
Ilt1J2phdmFzY3JpcHQnXSIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWRvbWFpbi10YXJn
ZXRUeXBlcy10eXBlLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWRvbWFpbi10YXJnZXRUeXBl
cy10eXBlLmpzb24tZXJyb3IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5YTM1OTMz
YTM1Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWRvbWFpbi10YXJnZXRUeXBlcy10
eXBlLmpzb24tZXJyb3IKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1FUlJPUjogTWFsZm9y
bWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9uOiB0YXJnZXRUeXBlcyBmb3IgZG9tYWluIFBhZ2VPbmx5
IGlzIG5vdCBhbiBhcnJheQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4tdGFyZ2V0
VHlwZXMtdmFsdWUuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZG9tYWluLXRhcmdldFR5cGVz
LXZhbHVlLmpzb24tZXJyb3IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2ODA3Zjcy
ZmM0Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWRvbWFpbi10YXJnZXRUeXBlcy12
YWx1ZS5qc29uLWVycm9yCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotRVJST1I6IE1hbGZv
cm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjogdGFyZ2V0VHlwZXMgZm9yIGRvbWFpbiBQYWdlT25s
eSBpcyBhbiB1bnN1cHBvcnRlZCBzdHJpbmcuIFdhczogIlt1J3BhZ2VlJ10iLCBBbGxvd2VkIHZh
bHVlczogc2VydmljZS13b3JrZXIsIGphdmFzY3JpcHQsIHdvcmtlciwgcGFnZSwgd2ViLXBhZ2UK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLWNvbW1hbmQtY2FsbC1wYXJhbWV0
ZXItbmFtZXMuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLWNvbW1hbmQtY2Fs
bC1wYXJhbWV0ZXItbmFtZXMuanNvbi1lcnJvcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggM2Y3NTZkZTMyNTAuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRl
LWNvbW1hbmQtY2FsbC1wYXJhbWV0ZXItbmFtZXMuanNvbi1lcnJvcgorKysgL2Rldi9udWxsCkBA
IC0xICswLDAgQEAKLUVSUk9SOiBNYWxmb3JtZWQgZG9tYWluIHNwZWNpZmljYXRpb246IGNhbGwg
cGFyYW1ldGVyIGxpc3QgZm9yIGNvbW1hbmQgcHJvY2Vzc1BvaW50cyBoYXMgZHVwbGljYXRlIHBh
cmFtZXRlciBuYW1lcwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFu
ZC1yZXR1cm4tcGFyYW1ldGVyLW5hbWVzLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWR1cGxp
Y2F0ZS1jb21tYW5kLXJldHVybi1wYXJhbWV0ZXItbmFtZXMuanNvbi1lcnJvcgpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggZWExNDhmZjY3YzkuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVk
L2ZhaWwtb24tZHVwbGljYXRlLWNvbW1hbmQtcmV0dXJuLXBhcmFtZXRlci1uYW1lcy5qc29uLWVy
cm9yCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotRVJST1I6IE1hbGZvcm1lZCBkb21haW4g
c3BlY2lmaWNhdGlvbjogcmV0dXJuIHBhcmFtZXRlciBsaXN0IGZvciBjb21tYW5kIHByb2Nlc3NQ
b2ludHMgaGFzIGR1cGxpY2F0ZSBwYXJhbWV0ZXIgbmFtZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2Zh
aWwtb24tZHVwbGljYXRlLWV2ZW50LXBhcmFtZXRlci1uYW1lcy5qc29uLWVycm9yIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQv
ZmFpbC1vbi1kdXBsaWNhdGUtZXZlbnQtcGFyYW1ldGVyLW5hbWVzLmpzb24tZXJyb3IKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3MWJiZDIxYzJjLi4wMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBl
Y3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS1ldmVudC1wYXJhbWV0ZXItbmFtZXMuanNvbi1lcnJvcgor
KysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUVSUk9SOiBNYWxmb3JtZWQgZG9tYWluIHNwZWNp
ZmljYXRpb246IHBhcmFtZXRlciBsaXN0IGZvciBldmVudCBwcm9jZXNzZWRQb2ludHMgaGFzIGR1
cGxpY2F0ZSBwYXJhbWV0ZXIgbmFtZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGlj
YXRlLXR5cGUtZGVjbGFyYXRpb25zLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0
ZS10eXBlLWRlY2xhcmF0aW9ucy5qc29uLWVycm9yCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA0NDdjZGY4ZTI4ZS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNh
dGUtdHlwZS1kZWNsYXJhdGlvbnMuanNvbi1lcnJvcgorKysgL2Rldi9udWxsCkBAIC0xICswLDAg
QEAKLUVSUk9SOiBEdXBsaWNhdGUgdHlwZSBkZWNsYXJhdGlvbjogUnVudGltZS5SZW1vdGVPYmpl
Y3RJZApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1tZW1iZXItbmFt
ZXMuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLXR5cGUtbWVtYmVyLW5hbWVz
Lmpzb24tZXJyb3IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1Mzc2YTc3YTQ1Li4w
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLW1lbWJlci1uYW1l
cy5qc29uLWVycm9yCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotRVJST1I6IE1hbGZvcm1l
ZCBkb21haW4gc3BlY2lmaWNhdGlvbjogdHlwZSBkZWNsYXJhdGlvbiBmb3IgUG9pbnQgaGFzIGR1
cGxpY2F0ZSBtZW1iZXIgbmFtZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZW51bS13aXRo
LW5vLXZhbHVlcy5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1lbnVtLXdpdGgtbm8tdmFsdWVz
Lmpzb24tZXJyb3IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2NTVjMmI5MDdlLi4w
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWVudW0td2l0aC1uby12YWx1ZXMuanNvbi1l
cnJvcgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUVSUk9SOiBUeXBlIHJlZmVyZW5jZSB3
aXRoIGVudW0gdmFsdWVzIG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgZW51bSB2YWx1ZS4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmljL2V4cGVjdGVkL2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVi
dWdnYWJsZVR5cGUuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlwZS1t
YXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1lcnJvcgpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggYjY1ZDdhMGQxOTYuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwt
b24tZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1l
cnJvcgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUVSUk9SOiBNYWxmb3JtZWQgZG9tYWlu
IHNwZWNpZmljYXRpb246IGV2ZW50IEV2ZW50IGhhcyBhbiBpdGVtIGluIHRhcmdldFR5cGVzICJb
dSd3b3JrZXInXSIgdGhhdCBpcyBub3Qgc3VwcG9ydGVkIGJ5IGFueSB2YWx1ZSBpbiBkZWJ1Z2dh
YmxlVHlwZXMgIlt1J2phdmFzY3JpcHQnXSIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWV2
ZW50LXRhcmdldFR5cGVzLXR5cGUuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZXZlbnQtdGFy
Z2V0VHlwZXMtdHlwZS5qc29uLWVycm9yCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3
NDAzZTEzYTgwOS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1ldmVudC10YXJnZXRU
eXBlcy10eXBlLmpzb24tZXJyb3IKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1FUlJPUjog
TWFsZm9ybWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9uOiB0YXJnZXRUeXBlcyBmb3IgZXZlbnQgUGFn
ZU9ubHkgaXMgbm90IGFuIGFycmF5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWV2ZW50LXRh
cmdldFR5cGVzLXZhbHVlLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWV2ZW50LXRhcmdldFR5
cGVzLXZhbHVlLmpzb24tZXJyb3IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzMDEy
YTlmZTRlLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGVz
LXZhbHVlLmpzb24tZXJyb3IKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1FUlJPUjogTWFs
Zm9ybWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9uOiB0YXJnZXRUeXBlcyBmb3IgZXZlbnQgUGFnZU9u
bHkgaXMgYW4gdW5zdXBwb3J0ZWQgc3RyaW5nLiBXYXM6ICJbdSdwYWdlZSddIiwgQWxsb3dlZCB2
YWx1ZXM6IHNlcnZpY2Utd29ya2VyLCBqYXZhc2NyaXB0LCB3b3JrZXIsIHBhZ2UsIHdlYi1wYWdl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRpb25hbC1wYXJhbWV0
ZXItZmxhZy5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwt
cGFyYW1ldGVyLWZsYWcuanNvbi1lcnJvcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
OTdiMmFmMGU0N2UuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tbnVtYmVyLXR5cGVk
LW9wdGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24tZXJyb3IKKysrIC9kZXYvbnVsbApAQCAtMSAr
MCwwIEBACi1FUlJPUjogVGhlICdvcHRpb25hbCcgZmxhZyBmb3IgYSBwYXJhbWV0ZXIgbXVzdCBi
ZSBhIGJvb2xlYW4gbGl0ZXJhbC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tbnVtYmVyLXR5
cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLW51bWJl
ci10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29uLWVycm9yCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA4NmRmMzc1MGMxYS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1v
bi1udW1iZXItdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNvbi1lcnJvcgorKysgL2Rldi9u
dWxsCkBAIC0xICswLDAgQEAKLUVSUk9SOiBUaGUgJ29wdGlvbmFsJyBmbGFnIGZvciBhIHR5cGUg
bWVtYmVyIG11c3QgYmUgYSBib29sZWFuIGxpdGVyYWwuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWls
LW9uLXN0cmluZy10eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29uLWVycm9yIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0
ZWQvZmFpbC1vbi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbi1lcnJv
cgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdiMmFmMGU0N2UuLjAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmljL2V4cGVjdGVkL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1mbGFn
Lmpzb24tZXJyb3IKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1FUlJPUjogVGhlICdvcHRp
b25hbCcgZmxhZyBmb3IgYSBwYXJhbWV0ZXIgbXVzdCBiZSBhIGJvb2xlYW4gbGl0ZXJhbC4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVy
Lmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXN0cmluZy10eXBlZC1vcHRpb25hbC10eXBlLW1l
bWJlci5qc29uLWVycm9yCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NmRmMzc1MGMx
YS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1zdHJpbmctdHlwZWQtb3B0aW9uYWwt
dHlwZS1tZW1iZXIuanNvbi1lcnJvcgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUVSUk9S
OiBUaGUgJ29wdGlvbmFsJyBmbGFnIGZvciBhIHR5cGUgbWVtYmVyIG11c3QgYmUgYSBib29sZWFu
IGxpdGVyYWwuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXR5cGUtZGVjbGFyYXRpb24tdXNp
bmctdHlwZS1yZWZlcmVuY2UuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS1kZWNsYXJh
dGlvbi11c2luZy10eXBlLXJlZmVyZW5jZS5qc29uLWVycm9yCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA0MmY1NzUzYTQzOS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi10
eXBlLWRlY2xhcmF0aW9uLXVzaW5nLXR5cGUtcmVmZXJlbmNlLmpzb24tZXJyb3IKKysrIC9kZXYv
bnVsbApAQCAtMSArMCwwIEBACi1FUlJPUjogVHlwZSByZWZlcmVuY2UgY2Fubm90IGhhdmUgYm90
aCAndHlwZScgYW5kICckcmVmJyBrZXlzLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi10eXBl
LXJlZmVyZW5jZS1hcy1wcmltaXRpdmUtdHlwZS5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi10
eXBlLXJlZmVyZW5jZS1hcy1wcmltaXRpdmUtdHlwZS5qc29uLWVycm9yCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBkNzZiYzFjNzc3My4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFp
bC1vbi10eXBlLXJlZmVyZW5jZS1hcy1wcmltaXRpdmUtdHlwZS5qc29uLWVycm9yCisrKyAvZGV2
L251bGwKQEAgLTEgKzAsMCBAQAotRVJST1I6IFR5cGUgcmVmZXJlbmNlICdEYXRhYmFzZUlkJyBp
cyBub3QgYSBwcmltaXRpdmUgdHlwZS4gQWxsb3dlZCB2YWx1ZXM6IGludGVnZXIsIG51bWJlciwg
c3RyaW5nLCBib29sZWFuLCBlbnVtLCBvYmplY3QsIGFycmF5LCBhbnkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVj
dGVkL2ZhaWwtb24tdHlwZS13aXRoLWludmFsaWQtcGxhdGZvcm0uanNvbi1lcnJvciBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVk
L2ZhaWwtb24tdHlwZS13aXRoLWludmFsaWQtcGxhdGZvcm0uanNvbi1lcnJvcgpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggZWM2MzZjNTRiN2MuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVk
L2ZhaWwtb24tdHlwZS13aXRoLWludmFsaWQtcGxhdGZvcm0uanNvbi1lcnJvcgorKysgL2Rldi9u
dWxsCkBAIC0xICswLDAgQEAKLUVSUk9SOiBVbmtub3duIHBsYXRmb3JtOiBpbnZhbGlkCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2Vu
ZXJpYy9leHBlY3RlZC9mYWlsLW9uLXR5cGUtd2l0aC1sb3dlcmNhc2UtbmFtZS5qc29uLWVycm9y
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMv
ZXhwZWN0ZWQvZmFpbC1vbi10eXBlLXdpdGgtbG93ZXJjYXNlLW5hbWUuanNvbi1lcnJvcgpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGU0NjIyNTBjMGEuLjAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4
cGVjdGVkL2ZhaWwtb24tdHlwZS13aXRoLWxvd2VyY2FzZS1uYW1lLmpzb24tZXJyb3IKKysrIC9k
ZXYvbnVsbApAQCAtMSArMCwwIEBACi1FUlJPUjogVHlwZXMgbXVzdCBiZWdpbiB3aXRoIGFuIHVw
cGVyY2FzZSBjaGFyYWN0ZXIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXVua25vd24tdHlw
ZS1yZWZlcmVuY2UtaW4tdHlwZS1kZWNsYXJhdGlvbi5qc29uLWVycm9yIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1v
bi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtZGVjbGFyYXRpb24uanNvbi1lcnJvcgpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmQzOGU2NDY3NWQuLjAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2V4cGVjdGVkL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLWRlY2xhcmF0
aW9uLmpzb24tZXJyb3IKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1FUlJPUjogVHlwZSBy
ZWZlcmVuY2UgJ2RyYWdvbicgaXMgbm90IGEgcHJpbWl0aXZlIHR5cGUuIEFsbG93ZWQgdmFsdWVz
OiBpbnRlZ2VyLCBudW1iZXIsIHN0cmluZywgYm9vbGVhbiwgZW51bSwgb2JqZWN0LCBhcnJheSwg
YW55CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4t
dHlwZS1tZW1iZXIuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVy
ZW5jZS1pbi10eXBlLW1lbWJlci5qc29uLWVycm9yCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBmYWY2NjcyY2JlZi4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi11bmtub3du
LXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtbWVtYmVyLmpzb24tZXJyb3IKKysrIC9kZXYvbnVsbApA
QCAtMSArMCwwIEBACi1FUlJPUjogTG9va3VwIGZhaWxlZCBmb3IgdHlwZSByZWZlcmVuY2U6IENv
bG9yIChyZWZlcmVuY2VkIGZyb20gZG9tYWluOiBGYW50YXN5KQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQv
Z2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24tcmVzdWx0IGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQv
Z2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24tcmVzdWx0CmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOTQ2YjUzZTNmOC4uMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0
ZWQvZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24tcmVzdWx0CisrKyAv
ZGV2L251bGwKQEAgLTEsMTI0NSArMCwwIEBACi0jIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFj
a2VuZENvbW1hbmRzLmpzCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJh
dGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotLy8gTmV0d29yazEKLUluc3BlY3RvckJhY2tlbmQucmVn
aXN0ZXJEb21haW4oIk5ldHdvcmsxIiwgbnVsbCk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVy
Q29tbWFuZCgiTmV0d29yazEubG9hZFJlc291cmNlIiwgbnVsbCwgW10sIFtdKTsKLUluc3BlY3Rv
ckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIk5ldHdvcmsxIiwgbnVsbCk7Ci0KLS8vIE5ldHdvcmsz
Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJOZXR3b3JrMyIsIG51bGwpOwotSW5z
cGVjdG9yQmFja2VuZC5yZWdpc3RlckV2ZW50KCJOZXR3b3JrMy5yZXNvdXJjZUxvYWRlZCIsIG51
bGwsIFtdKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJOZXR3b3JrM0Rpc3BhdGNoZXIgPSBJ
bnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRGlzcGF0Y2hlci5iaW5kKEluc3BlY3RvckJhY2tlbmQs
ICJOZXR3b3JrMyIpOwotSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiTmV0d29yazMi
LCBudWxsKTsKLSMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0KLSMj
IyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1n
dWFyZHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0j
cHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Igewot
Ci1jbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBz
ZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hl
cikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQotICAgIEJh
Y2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFj
a2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPEJhY2tlbmREaXNw
YXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwotfTsKLQotCi0jaWYgUExBVEZPUk0oV0VCX0NP
TU1BTkRTKQotY2xhc3MgQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciA6IHB1Ymxp
YyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+QWx0
ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBs
b2FkUmVzb3VyY2UobG9uZyBjYWxsSWQpID0gMDsKLX07Ci0jZW5kaWYgLy8gUExBVEZPUk0oV0VC
X0NPTU1BTkRTKQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotI2VuZGlmIC8vIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotIyMjIEVuZCBGaWxlOiBUZXN0QWx0
ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5k
RGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRl
LWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3Rv
Y29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFj
ZSBJbnNwZWN0b3IgewotCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQotI2lmIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotI2lmIFBMQVRGT1JNKFdFQl9DT01N
QU5EUykKLWNsYXNzIEFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI7Ci0jZW5kaWYg
Ly8gUExBVEZPUk0oV0VCX0NPTU1BTkRTKQotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQotCi0jaWYgUExBVEZPUk0oV0VCX0NPTU1BTkRTKQotY2xhc3Mg
TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewotcHVibGljOgotICAgIHZpcnR1YWwg
dm9pZCBsb2FkUmVzb3VyY2UoRXJyb3JTdHJpbmcmKSA9IDA7Ci1wcm90ZWN0ZWQ6Ci0gICAgdmly
dHVhbCB+TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKLX07Ci0jZW5kaWYgLy8g
UExBVEZPUk0oV0VCX0NPTU1BTkRTKQotCi0jaWYgUExBVEZPUk0oV0VCX0NPTU1BTkRTKQotY2xh
c3MgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxC
YWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxOZXR3b3JrMUJhY2tl
bmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBOZXR3b3JrMUJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlciopOwotICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNv
bnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOwot
cHJpdmF0ZToKLSAgICB2b2lkIGxvYWRSZXNvdXJjZShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpT
T046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKLXB1YmxpYzoKLSAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIo
QWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikg
eyBtX2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9Ci1wcml2YXRl
OgotICAgIEFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIqIG1fYWx0ZXJuYXRlRGlz
cGF0Y2hlciB7IG51bGxwdHIgfTsKLSNlbmRpZgotcHJpdmF0ZToKLSAgICBOZXR3b3JrMUJhY2tl
bmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiwgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIqKTsKLSAgICBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2Vu
dCB7IG51bGxwdHIgfTsKLX07Ci0jZW5kaWYgLy8gUExBVEZPUk0oV0VCX0NPTU1BTkRTKQotCi19
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0
dXJlLWd1YXJkcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJz
LmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5o
PgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJv
eWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jaWYgRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tl
bmREaXNwYXRjaGVycy5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0jaWYg
UExBVEZPUk0oV0VCX0NPTU1BTkRTKQotTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6
On5OZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQotI2VuZGlmIC8vIFBMQVRG
T1JNKFdFQl9DT01NQU5EUykKLQotI2lmIFBMQVRGT1JNKFdFQl9DT01NQU5EUykKLVJlZjxOZXR3
b3JrMUJhY2tlbmREaXNwYXRjaGVyPiBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUo
QmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBOZXR3b3JrMUJhY2tlbmREaXNw
YXRjaGVySGFuZGxlciogYWdlbnQpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTmV0d29y
azFCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKLX0KLQotTmV0
d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5k
RGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyKiBhZ2VudCkKLSAgICA6IFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tl
bmREaXNwYXRjaGVyKQotICAgICwgbV9hZ2VudChhZ2VudCkKLXsKLSAgICBtX2JhY2tlbmREaXNw
YXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oIk5ldHdvcmsxIl9zLCB0aGlzKTsK
LX0KLQotdm9pZCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVl
c3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkK
LXsKLSAgICBSZWY8TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7Ci0K
LSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOwotICAgIG1lc3NhZ2UtPmdldE9i
amVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsKLQotICAgIGlmIChtZXRob2QgPT0gImxvYWRS
ZXNvdXJjZSIpCi0gICAgICAgIGxvYWRSZXNvdXJjZShyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1l
dGVycykpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJv
dG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazEu
IiArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKLX0KLQotdm9pZCBOZXR3b3JrMUJhY2tl
bmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpP
YmplY3Q+JiYpCi17Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
Ci0gICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURp
c3BhdGNoZXItPmxvYWRSZXNvdXJjZShyZXF1ZXN0SWQpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotI2VuZGlmCi0KLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0
PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIG1fYWdlbnQtPmxvYWRSZXNv
dXJjZShlcnJvcik7Ci0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZh
bHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3Rv
Y29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7
Ci19Ci0jZW5kaWYgLy8gUExBVEZPUk0oV0VCX0NPTU1BTkRTKQotCi19IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEg
b25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPHd0Zi9K
U09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFj
ZSBJbnNwZWN0b3IgewotCi1jbGFzcyBGcm9udGVuZFJvdXRlcjsKLQotI2lmIFBMQVRGT1JNKFdF
Ql9FVkVOVFMpCi1jbGFzcyBOZXR3b3JrM0Zyb250ZW5kRGlzcGF0Y2hlciB7Ci0gICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgTmV0d29yazNGcm9udGVuZERpc3BhdGNo
ZXIoRnJvbnRlbmRSb3V0ZXImIGZyb250ZW5kUm91dGVyKSA6IG1fZnJvbnRlbmRSb3V0ZXIoZnJv
bnRlbmRSb3V0ZXIpIHsgfQotICAgIHZvaWQgcmVzb3VyY2VMb2FkZWQoKTsKLXByaXZhdGU6Ci0g
ICAgRnJvbnRlbmRSb3V0ZXImIG1fZnJvbnRlbmRSb3V0ZXI7Ci19OwotI2VuZGlmIC8vIFBMQVRG
T1JNKFdFQl9FVkVOVFMpCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxl
OiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5l
cmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgot
Ci1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotI2lmIFBMQVRGT1JNKFdFQl9FVkVOVFMpCi12b2lk
IE5ldHdvcmszRnJvbnRlbmREaXNwYXRjaGVyOjpyZXNvdXJjZUxvYWRlZCgpCi17Ci0gICAgUmVm
PEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAg
IGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIk5ldHdvcmszLnJlc291cmNlTG9h
ZGVkIl9zKTsKLQotICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50
b0pTT05TdHJpbmcoKSk7Ci19Ci0jZW5kaWYgLy8gUExBVEZPUk0oV0VCX0VWRU5UUykKLQotfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0
Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVy
ZS1ndWFyZHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3Rv
Y29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotCi1uYW1lc3BhY2UgSW5z
cGVjdG9yIHsKLQotCi0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLQotCi0vLyBGb3J3YXJkIGRl
Y2xhcmF0aW9ucy4KLSNpZiBQTEFURk9STShXRUJfVFlQRVMpCi1uYW1lc3BhY2UgTmV0d29yazIg
ewotY2xhc3MgTmV0d29ya0Vycm9yOwotfSAvLyBOZXR3b3JrMgotI2VuZGlmIC8vIFBMQVRGT1JN
KFdFQl9UWVBFUykKLS8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KLQotCi0KLQotI2lm
IFBMQVRGT1JNKFdFQl9UWVBFUykKLW5hbWVzcGFjZSBOZXR3b3JrMiB7Ci1jbGFzcyBOZXR3b3Jr
RXJyb3IgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7Ci1wdWJsaWM6Ci0gICAgZW51bSB7Ci0g
ICAgICAgIE5vRmllbGRzU2V0ID0gMCwKLSAgICAgICAgTWVzc2FnZVNldCA9IDEgPDwgMCwKLSAg
ICAgICAgQ29kZVNldCA9IDEgPDwgMSwKLSAgICAgICAgQWxsRmllbGRzU2V0ID0gKE1lc3NhZ2VT
ZXQgfCBDb2RlU2V0KQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+Ci0gICAgY2xh
c3MgQnVpbGRlciB7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4g
bV9yZXN1bHQ7Ci0KLSAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBT
VEVQPiYgY2FzdFN0YXRlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICpyZWludGVy
cHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgQnVpbGRlcihSZWY8LypOZXR3b3JrRXJyb3IqL0pTT046Ok9iamVjdD4mJiBvYmplY3Qp
Ci0gICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKLSAgICAgICAgewotICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3Jl
YXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZnJpZW5kIGNsYXNz
IE5ldHdvcmtFcnJvcjsKLSAgICBwdWJsaWM6Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1l
c3NhZ2VTZXQ+JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNZXNzYWdlU2V0KSwgcHJvcGVydHlf
bWVzc2FnZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJt
ZXNzYWdlIl9zLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1lc3NhZ2VT
ZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29kZVNldD4mIHNl
dENvZGUoaW50IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgQ29kZVNldCksIHByb3BlcnR5X2NvZGVfYWxyZWFkeV9zZXQpOwotICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldEludGVnZXIoImNvZGUiX3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJl
dHVybiBjYXN0U3RhdGU8Q29kZVNldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIFJlZjxOZXR3
b3JrRXJyb3I+IHJlbGVhc2UoKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VS
VChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwotICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKE5ldHdvcmtFcnJvcikgPT0gc2l6ZW9mKEpTT046Ok9i
amVjdCksIGNhbm5vdF9jYXN0KTsKLQotICAgICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4ganNv
blJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7Ci0gICAgICAgICAgICBhdXRvIHJl
c3VsdCA9IFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPE5ldHdvcmtFcnJvcj4qPigmanNv
blJlc3VsdCkpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgIH07
Ci0KLSAgICAvKgotICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKLSAgICAgKiBSZWY8TmV0
d29ya0Vycm9yPiByZXN1bHQgPSBOZXR3b3JrRXJyb3I6OmNyZWF0ZSgpCi0gICAgICogICAgIC5z
ZXRNZXNzYWdlKC4uLikKLSAgICAgKiAgICAgLnNldENvZGUoLi4uKQotICAgICAqICAgICAucmVs
ZWFzZSgpOwotICAgICAqLwotICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUo
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVj
dDo6Y3JlYXRlKCkpOwotICAgIH0KLX07Ci0KLX0gLy8gTmV0d29yazIKLSNlbmRpZiAvLyBQTEFU
Rk9STShXRUJfVFlQRVMpCi0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0KLSNpbmNsdWRl
IDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVz
cGFjZSBJbnNwZWN0b3IgewotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotfSAvLyBuYW1l
c3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
Z2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRh
aW5QdHIuaD4KLQotQHByb3RvY29sIFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcjsK
LQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotI2lmIFBMQVRGT1JNKFdFQl9DT01NQU5EUykK
LWNsYXNzIE9iakNJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVi
bGljIEFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIgewotICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIE9iakNJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmRE
aXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4gaGFuZGxlcikg
eyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQotICAgIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgcmVx
dWVzdElkKSBmaW5hbDsKLXByaXZhdGU6Ci0gICAgUmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbE5l
dHdvcmsxRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7Ci19OwotI2VuZGlmIC8vIFBMQVRGT1JN
KFdFQl9DT01NQU5EUykKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5o
IgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRl
ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLW5hbWVzcGFjZSBJbnNw
ZWN0b3IgewotCi0jaWYgUExBVEZPUk0oV0VCX0NPTU1BTkRTKQotdm9pZCBPYmpDSW5zcGVjdG9y
TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkKQot
ewotICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2Fk
UmVzb3VyY2VXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsKLSAgICAgICAg
YmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tl
bmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMS5sb2FkUmVzb3VyY2UnIHdh
cyBub3QgZm91bmQiX3MpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGlu
Z0Vycm9ycygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWQgZXJyb3JDYWxsYmFj
ayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJl
cG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJy
b3IsIGVycm9yKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJv
cnMoKTsKLSAgICB9OwotCi0gICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKSwgZmFsc2UpOwotICAgIH07Ci0KLSAgICBbbV9kZWxlZ2F0ZSBsb2FkUmVzb3VyY2VX
aXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2Fs
bGJhY2tdOwotfQotCi0jZW5kaWYgLy8gUExBVEZPUk0oV0VCX0NPTU1BTkRTKQotCi19IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlz
cGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24u
aAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0
aC1mZWF0dXJlLWd1YXJkcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KLQotX19hdHRy
aWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAotQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbiwg
c2V0dGVyPXNldE5ldHdvcmsxSGFuZGxlcjopIGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWlu
SGFuZGxlcj4gbmV0d29yazFIYW5kbGVyOwotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5
KSBUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkV2ZW50RGlzcGF0Y2hlciAqbmV0d29yazNFdmVu
dERpc3BhdGNoZXI7Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1
cmF0aW9uLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0K
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgt
ZmVhdHVyZS1ndWFyZHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCi0KLSNpbXBvcnQg
IlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlz
cGF0Y2hlcnMuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJs
ZUFnZW50Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNv
bnRyb2xsZXIuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVycy5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXJzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBs
ZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCi17Ci0gICAgQXVnbWVudGFibGVJ
bnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKLSAgICBpZDxUZXN0UHJvdG9jb2xOZXR3
b3JrMURvbWFpbkhhbmRsZXI+IF9uZXR3b3JrMUhhbmRsZXI7Ci0gICAgVGVzdFByb3RvY29sTmV0
d29yazNEb21haW5FdmVudERpc3BhdGNoZXIgKl9uZXR3b3JrM0V2ZW50RGlzcGF0Y2hlcjsKLX0K
LQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0
b3JDb250cm9sbGVyKiljb250cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAg
ICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIp
OwotICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQot
LSAodm9pZClkZWFsbG9jCi17Ci0gICAgW19uZXR3b3JrMUhhbmRsZXIgcmVsZWFzZV07Ci0gICAg
W19uZXR3b3JrM0V2ZW50RGlzcGF0Y2hlciByZWxlYXNlXTsKLSAgICBbc3VwZXIgZGVhbGxvY107
Ci19Ci0KLS0gKHZvaWQpc2V0TmV0d29yazFIYW5kbGVyOihpZDxUZXN0UHJvdG9jb2xOZXR3b3Jr
MURvbWFpbkhhbmRsZXI+KWhhbmRsZXIKLXsKLSAgICBpZiAoaGFuZGxlciA9PSBfbmV0d29yazFI
YW5kbGVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBbX25ldHdvcmsxSGFuZGxlciByZWxlYXNl
XTsKLSAgICBfbmV0d29yazFIYW5kbGVyID0gW2hhbmRsZXIgcmV0YWluXTsKLQotICAgIGF1dG8g
YWx0ZXJuYXRlRGlzcGF0Y2hlciA9IG1ha2VVbmlxdWU8T2JqQ0luc3BlY3Rvck5ldHdvcmsxQmFj
a2VuZERpc3BhdGNoZXI+KGhhbmRsZXIpOwotICAgIGF1dG8gYWx0ZXJuYXRlQWdlbnQgPSBtYWtl
VW5pcXVlPEFsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50PE5ldHdvcmsxQmFja2VuZERpc3BhdGNo
ZXIsIEFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI+PigiTmV0d29yazEiX3MsICpf
Y29udHJvbGxlciwgV1RGTW92ZShhbHRlcm5hdGVEaXNwYXRjaGVyKSk7Ci0gICAgX2NvbnRyb2xs
ZXItPmFwcGVuZEV4dHJhQWdlbnQoV1RGTW92ZShhbHRlcm5hdGVBZ2VudCkpOwotfQotCi0tIChp
ZDxUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+KW5ldHdvcmsxSGFuZGxlcgotewot
ICAgIHJldHVybiBfbmV0d29yazFIYW5kbGVyOwotfQotCi0tIChUZXN0UHJvdG9jb2xOZXR3b3Jr
M0RvbWFpbkV2ZW50RGlzcGF0Y2hlciAqKW5ldHdvcmszRXZlbnREaXNwYXRjaGVyCi17Ci0gICAg
aWYgKCFfbmV0d29yazNFdmVudERpc3BhdGNoZXIpCi0gICAgICAgIF9uZXR3b3JrM0V2ZW50RGlz
cGF0Y2hlciA9IFtbVGVzdFByb3RvY29sTmV0d29yazNEb21haW5FdmVudERpc3BhdGNoZXIgYWxs
b2NdIGluaXRXaXRoQ29udHJvbGxlcjpfY29udHJvbGxlcl07Ci0gICAgcmV0dXJuIF9uZXR3b3Jr
M0V2ZW50RGlzcGF0Y2hlcjsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sQ29uZmlndXJhdGlvbi5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnRE
aXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRl
LWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0K
LSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8d3RmL0pT
T05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGltcGxlbWVudGF0
aW9uIFRlc3RQcm90b2NvbE5ldHdvcmszRG9tYWluRXZlbnREaXNwYXRjaGVyCi17Ci0gICAgQXVn
bWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKLX0KLQotLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVy
Kiljb250cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYp
Ci0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIpOwotICAgIF9jb250
cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClyZXNv
dXJjZUxvYWRlZAotewotICAgIGNvbnN0IEZyb250ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29udHJv
bGxlci0+ZnJvbnRlbmRSb3V0ZXIoKTsKLQotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNz
YWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5n
KCJtZXRob2QiX3MsICJOZXR3b3JrMy5yZXNvdXJjZUxvYWRlZCJfcyk7Ci0gICAgcm91dGVyLnNl
bmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwotfQotCi1AZW5kCi0KLQotIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2wuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdl
bmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlv
bi5oPgotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+Ci0K
LQotQGNsYXNzIFRlc3RQcm90b2NvbE5ldHdvcmsyTmV0d29ya0Vycm9yOwotCi10eXBlZGVmIE5T
X0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xQbGF0Zm9ybSkgewotICAgIFRlc3RQcm90b2Nv
bFBsYXRmb3JtQWxsLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYywKLSAgICBUZXN0
UHJvdG9jb2xQbGF0Zm9ybUlPUywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TLAotfTsK
LQotCi0KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJm
YWNlIFRlc3RQcm90b2NvbE5ldHdvcmsyTmV0d29ya0Vycm9yIDogUldJUHJvdG9jb2xKU09OT2Jq
ZWN0Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJp
bmcgKiwgaWQ+ICopcGF5bG9hZDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2Jq
ZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OwotLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlIGNvZGU6KGludCljb2RlOwotLyog
cmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICptZXNzYWdl
OwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgaW50IGNvZGU7
Ci1AZW5kCi0KLUBwcm90b2NvbCBUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXIgPE5T
T2JqZWN0PgotQG9wdGlvbmFsCi0tICh2b2lkKWxvYWRSZXNvdXJjZVdpdGhFcnJvckNhbGxiYWNr
Oih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6
KHZvaWQoXikodm9pZCkpc3VjY2Vzc0NhbGxiYWNrOwotQGVuZAotCi1fX2F0dHJpYnV0ZV9fKCh2
aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sTmV0d29yazNE
b21haW5FdmVudERpc3BhdGNoZXIgOiBOU09iamVjdAotLSAodm9pZClyZXNvdXJjZUxvYWRlZDsK
LUBlbmQKLQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGli
aWxpdHlPYmplY3RzLmg+Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJv
dG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCi0jaW1w
b3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNp
bXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sTmV0d29y
azNEb21haW5FdmVudERpc3BhdGNoZXIgKFByaXZhdGUpCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhDb250cm9sbGVyOihJbnNwZWN0b3I6OkF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciop
Y29udHJvbGxlcjsKLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFs
LmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1
cmUtZ3VhcmRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJv
dG9jb2xBcnJheUNvbnZlcnNpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+Ci1PcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Q
cm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKLQotaW5saW5lIFN0cmluZyB0b1By
b3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFBsYXRmb3JtIHZhbHVlKQotewotICAgIHN3aXRjaCh2
YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1BbGw6Ci0gICAgICAgIHJldHVy
biAiYWxsIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOgotICAgICAg
ICByZXR1cm4gImdlbmVyaWMiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzoK
LSAgICAgICAgcmV0dXJuICJpb3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1h
Y09TOgotICAgICAgICByZXR1cm4gIm1hY29zIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8Pgot
aW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFBsYXRmb3JtPiBmcm9tUHJvdG9jb2xTdHJpbmco
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gImFsbCIpCi0gICAgICAg
IHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDsKLSAgICBpZiAodmFsdWUgPT0gImdlbmVy
aWMiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOwotICAgIGlm
ICh2YWx1ZSA9PSAiaW9zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9T
OwotICAgIGlmICh2YWx1ZSA9PSAibWFjb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29s
UGxhdGZvcm1NYWNPUzsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi0KLQotfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5t
bQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0
aC1mZWF0dXJlLWd1YXJkcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotCi0jaW1w
b3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIK
LSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0K
LXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zIChOZXR3b3JrMkRvbWFpbikKLQotKyAodm9pZClfcGFyc2VOZXR3b3JrRXJy
b3I6KFRlc3RQcm90b2NvbE5ldHdvcmsyTmV0d29ya0Vycm9yICoqKW91dFZhbHVlIGZyb21QYXls
b2FkOihpZClwYXlsb2FkOwotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMgKE5ldHdvcmsyRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZU5ldHdvcmtF
cnJvcjooVGVzdFByb3RvY29sTmV0d29yazJOZXR3b3JrRXJyb3IgKiopb3V0VmFsdWUgZnJvbVBh
eWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBh
eWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90
b2NvbE5ldHdvcmsyTmV0d29ya0Vycm9yIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07
Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFy
ZHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1w
b3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmpl
Y3RQcml2YXRlLmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3RmL0pT
T05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi1AaW1wbGVtZW50
YXRpb24gVGVzdFByb3RvY29sTmV0d29yazJOZXR3b3JrRXJyb3IKLQotLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICop
cGF5bG9hZAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1
cm4gbmlsOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXls
b2FkW0AibWVzc2FnZSJdLCBAIm1lc3NhZ2UiKTsKLSAgICBzZWxmLm1lc3NhZ2UgPSBwYXlsb2Fk
W0AibWVzc2FnZSJdOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJU
WShwYXlsb2FkW0AiY29kZSJdLCBAImNvZGUiKTsKLSAgICBzZWxmLmNvZGUgPSBbcGF5bG9hZFtA
ImNvZGUiXSBpbnRlZ2VyVmFsdWVdOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0tIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopb2Jq
ZWN0Ci17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEpTT05PYmplY3Q6W29iamVj
dCB0b0pTT05PYmplY3RdLmdldCgpXSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICByZXR1
cm4gc2VsZjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTWVzc2FnZTooTlNTdHJpbmcg
KiltZXNzYWdlIGNvZGU6KGludCljb2RlCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0
XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJ
UkVEX1BST1BFUlRZKG1lc3NhZ2UsIEAibWVzc2FnZSIpOwotCi0gICAgc2VsZi5tZXNzYWdlID0g
bWVzc2FnZTsKLSAgICBzZWxmLmNvZGUgPSBjb2RlOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0K
LS0gKHZvaWQpc2V0TWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlCi17Ci0gICAgW3N1cGVyIHNl
dFN0cmluZzptZXNzYWdlIGZvcktleTpAIm1lc3NhZ2UiXTsKLX0KLQotLSAoTlNTdHJpbmcgKilt
ZXNzYWdlCi17Ci0gICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJtZXNzYWdlIl07Ci19
Ci0KLS0gKHZvaWQpc2V0Q29kZTooaW50KWNvZGUKLXsKLSAgICBbc3VwZXIgc2V0SW50ZWdlcjpj
b2RlIGZvcktleTpAImNvZGUiXTsKLX0KLQotLSAoaW50KWNvZGUKLXsKLSAgICByZXR1cm4gW3N1
cGVyIGludGVnZXJGb3JLZXk6QCJjb2RlIl07Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9zYW1lLXR5cGUtaWQtZGlm
ZmVyZW50LWRvbWFpbi5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3NhbWUtdHlwZS1pZC1kaWZmZXJlbnQt
ZG9tYWluLmpzb24tcmVzdWx0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTQwMjEx
MTM4Mi4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21h
aW4uanNvbi1yZXN1bHQKKysrIC9kZXYvbnVsbApAQCAtMSw5MTQgKzAsMCBAQAotIyMjIEJlZ2lu
IEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLSMjIyBFbmQgRmlsZTogSW5zcGVjdG9y
QmFja2VuZENvbW1hbmRzLmpzCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2Vu
ZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5
cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgotI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLQotbmFtZXNw
YWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1
YmxpYzoKLSAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0
Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3Bh
dGNoZXIpOyB9Ci0gICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29u
c3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQotcHJpdmF0ZToKLSAgICBS
ZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Ci19OwotCi0KLQot
Ci19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQotIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2Vu
ZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMu
aAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJl
bnQtZG9tYWluLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXR5
cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
Ci0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+
Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0j
aW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgotI2VuZGlmCi0KLW5h
bWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMj
IyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVz
dFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFz
cyBGcm9udGVuZFJvdXRlcjsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZp
bGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9u
dGVuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNh
bWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RG
cm9udGVuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFt
ZXNwYWNlIEluc3BlY3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5k
IEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sT2JqZWN0cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2Ft
ZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5o
PgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0K
LQotCi0KLQotLy8gVHlwZWRlZnMuCi1uYW1lc3BhY2UgUnVudGltZSB7Ci0vKiBVbmlxdWUgb2Jq
ZWN0IGlkZW50aWZpZXIuICovCi10eXBlZGVmIFN0cmluZyBSZW1vdGVPYmplY3RJZDsKLX0gLy8g
UnVudGltZQotCi1uYW1lc3BhY2UgUnVudGltZTIgewotLyogVW5pcXVlIG9iamVjdCBpZGVudGlm
aWVyLiAqLwotdHlwZWRlZiBTdHJpbmcgUmVtb3RlT2JqZWN0SWQ7Ci19IC8vIFJ1bnRpbWUyCi0v
LyBFbmQgb2YgdHlwZWRlZnMuCi0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5o
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLQotI2luY2x1ZGUgPHd0
Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNl
IEluc3BlY3RvciB7Ci0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLQotCi19IC8vIG5hbWVzcGFj
ZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFj
a2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1l
LXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0K
LQotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
LQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJj
b25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0j
aW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotCi1uYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJv
dG9jb2wuaD4KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50
ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAotQGVuZAotCi0KLSMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25m
aWd1cmF0aW9uLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW1wb3J0
ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRD
b3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0KLXVzaW5nIG5hbWVz
cGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0
aW9uCi17Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsK
LX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNw
ZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsK
LSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xs
ZXIpOwotICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1cm4gc2VsZjsKLX0K
LQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi1AZW5kCi0K
LQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJv
dG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMu
aCIKLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0
b3I7Ci0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3Vu
ZGF0aW9uLmg+Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3Qu
aD4KLQotCi0KLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sUGxhdGZv
cm0pIHsKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbCwKLSAgICBUZXN0UHJvdG9jb2xQbGF0
Zm9ybUdlbmVyaWMsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1JT1MsCi0gICAgVGVzdFByb3Rv
Y29sUGxhdGZvcm1NYWNPUywKLX07Ci0KLQotCi0KLQotCi0KLQotCi0KLSNpbXBvcnQgPFdlYklu
c3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4KLQotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50
ZXJuYWwuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1k
aWZmZXJlbnQtZG9tYWluLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xK
U09OT2JqZWN0UHJpdmF0ZS5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJ
bnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi0KLQot
Ci0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIK
LSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KLQot
bmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4K
LU9wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYg
dmFsdWUpOwotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sUGxh
dGZvcm0gdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9j
b2xQbGF0Zm9ybUFsbDoKLSAgICAgICAgcmV0dXJuICJhbGwiX3M7Ci0gICAgY2FzZSBUZXN0UHJv
dG9jb2xQbGF0Zm9ybUdlbmVyaWM6Ci0gICAgICAgIHJldHVybiAiZ2VuZXJpYyJfczsKLSAgICBj
YXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOgotICAgICAgICByZXR1cm4gImlvcyJfczsKLSAg
ICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M6Ci0gICAgICAgIHJldHVybiAibWFjb3Mi
X3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29s
UGxhdGZvcm0+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAg
IGlmICh2YWx1ZSA9PSAiYWxsIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3Jt
QWxsOwotICAgIGlmICh2YWx1ZSA9PSAiZ2VuZXJpYyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJv
dG9jb2xQbGF0Zm9ybUdlbmVyaWM7Ci0gICAgaWYgKHZhbHVlID09ICJpb3MiKQotICAgICAgICBy
ZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1JT1M7Ci0gICAgaWYgKHZhbHVlID09ICJtYWNvcyIp
Ci0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOwotICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7Ci19Ci0KLQotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAi
VGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3Rv
Y29sSlNPTk9iamVjdFByaXZhdGUuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQot
QGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFJ1bnRpbWVEb21haW4pCi0K
LSsgKHZvaWQpX3BhcnNlUmVtb3RlT2JqZWN0SWQ6KE5TU3RyaW5nICoqKW91dFZhbHVlIGZyb21Q
YXlsb2FkOihpZClwYXlsb2FkOwotCi1AZW5kCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucyAoUnVudGltZTJEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlUmVtb3RlT2JqZWN0
SWQ6KE5TU3RyaW5nICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotCi1AZW5k
Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFJ1bnRpbWVE
b21haW4pCi0KLSsgKHZvaWQpX3BhcnNlUmVtb3RlT2JqZWN0SWQ6KE5TU3RyaW5nICoqKW91dFZh
bHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9C
QURfVFlQRShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSAoTlNT
dHJpbmcgKilwYXlsb2FkOwotfQotCi1AZW5kCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zIChSdW50aW1lMkRvbWFpbikKLQotKyAodm9pZClfcGFyc2VSZW1vdGVP
YmplY3RJZDooTlNTdHJpbmcgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsK
LSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBjbGFz
c10pOwotICAgICpvdXRWYWx1ZSA9IChOU1N0cmluZyAqKXBheWxvYWQ7Ci19Ci0KLUBlbmQKLQot
Ci0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVy
bmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9y
dCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLSNpbXBvcnQg
PHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBu
YW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLQotCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0
ZXJzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpz
b24tcmVzdWx0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YmRiMmQ0MTE5Zi4uMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2dlbmVyaWMvZXhwZWN0ZWQvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24t
cmVzdWx0CisrKyAvZGV2L251bGwKQEAgLTEsMTEyNCArMCwwIEBACi0jIyMgQmVnaW4gRmlsZTog
SW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLSMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2Vu
ZENvbW1hbmRzLmpzCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRp
b25hbC10eXBlLXNldHRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKLSNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0KLW5hbWVzcGFjZSBJ
bnNwZWN0b3IgewotCi1jbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6
Ci0gICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+
JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVy
KTsgfQotICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsg
cmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KLXByaXZhdGU6Ci0gICAgUmVmUHRy
PEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwotfTsKLQotCi0KLQotfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVS
TkFURV9ESVNQQVRDSEVSUykKLSMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNw
YXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25hbC10eXBlLXNl
dHRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0j
cHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdHlwZWRl
ZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMj
IyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0j
aW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jaW5j
bHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgotI2VuZGlmCi0KLW5hbWVz
cGFjZSBJbnNwZWN0b3IgewotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBF
bmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRl
c3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBzaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3Mg
RnJvbnRlbmRSb3V0ZXI7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxl
OiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFk
b3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEZy
b250ZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1l
c3BhY2UgSW5zcGVjdG9yIHsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQg
RmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xPYmplY3RzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFk
b3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5o
PgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0K
LQotCi0vLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KLW5hbWVzcGFjZSBSdW50aW1lIHsKLWNsYXNz
IEtleVBhdGg7Ci19IC8vIFJ1bnRpbWUKLS8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4K
LQotCi0KLQotbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKLQotU3RyaW5nIGdldEVudW1Db25zdGFu
dFZhbHVlKGludCBjb2RlKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdldEVudW1D
b25zdGFudFZhbHVlKFQgZW51bVZhbHVlKQotewotICAgIHJldHVybiBnZXRFbnVtQ29uc3RhbnRW
YWx1ZShzdGF0aWNfY2FzdDxpbnQ+KGVudW1WYWx1ZSkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBU
ZXN0SGVscGVycwotCi1uYW1lc3BhY2UgUnVudGltZSB7Ci0vKiBLZXkgcGF0aC4gKi8KLWNsYXNz
IEtleVBhdGggOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7Ci1wdWJsaWM6Ci0gICAgLy8gTmFt
ZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAndHlwZScgd2hpbGUgZ2VuZXJhdGluZyBLZXlQYXRoLgot
ICAgIGVudW0gY2xhc3MgVHlwZSB7Ci0gICAgICAgIE51bGwgPSAwLAotICAgICAgICBTdHJpbmcg
PSAxLAotICAgICAgICBBcnJheSA9IDIsCi0gICAgfTsgLy8gZW51bSBjbGFzcyBUeXBlCi0gICAg
ZW51bSB7Ci0gICAgICAgIE5vRmllbGRzU2V0ID0gMCwKLSAgICAgICAgVHlwZVNldCA9IDEgPDwg
MCwKLSAgICAgICAgQWxsRmllbGRzU2V0ID0gKFR5cGVTZXQpCi0gICAgfTsKLQotICAgIHRlbXBs
YXRlPGludCBTVEFURT4KLSAgICBjbGFzcyBCdWlsZGVyIHsKLSAgICBwcml2YXRlOgotICAgICAg
ICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBtX3Jlc3VsdDsKLQotICAgICAgICB0ZW1wbGF0ZTxpbnQg
U1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4o
dGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyKFJlZjwvKktleVBhdGgqL0pTT046
Ok9iamVjdD4mJiBvYmplY3QpCi0gICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0
KSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVs
ZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7Ci0gICAgICAgIH0KLSAg
ICAgICAgZnJpZW5kIGNsYXNzIEtleVBhdGg7Ci0gICAgcHVibGljOgotCi0gICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBUeXBlU2V0PiYgc2V0VHlwZShUeXBlIHZhbHVlKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVHlwZVNldCksIHByb3BlcnR5X3R5cGVf
YWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidHlwZSJfcywg
SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKHZh
bHVlKSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFR5cGVTZXQ+KCk7Ci0gICAgICAg
IH0KLQotICAgICAgICBSZWY8S2V5UGF0aD4gcmVsZWFzZSgpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9y
ZWFkeSk7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoS2V5UGF0aCkgPT0gc2l6
ZW9mKEpTT046Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsKLQotICAgICAgICAgICAgUmVmPEpTT046
Ok9iamVjdD4ganNvblJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7Ci0gICAgICAg
ICAgICBhdXRvIHJlc3VsdCA9IFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPEtleVBhdGg+
Kj4oJmpzb25SZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0K
LSAgICB9OwotCi0gICAgLyoKLSAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6Ci0gICAgICog
UmVmPEtleVBhdGg+IHJlc3VsdCA9IEtleVBhdGg6OmNyZWF0ZSgpCi0gICAgICogICAgIC5zZXRU
eXBlKC4uLikKLSAgICAgKiAgICAgLnJlbGVhc2UoKTsKLSAgICAgKi8KLSAgICBzdGF0aWMgQnVp
bGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBCdWlsZGVy
PE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKLSAgICB9Ci0KLSAgICB2b2lk
IHNldFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgIHsKLSAgICAgICAgSlNPTjo6T2Jq
ZWN0QmFzZTo6c2V0U3RyaW5nKCJzdHJpbmciX3MsIHZhbHVlKTsKLSAgICB9Ci0KLSAgICB2b2lk
IHNldEFycmF5KFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IHZhbHVlKQotICAgIHsKLSAg
ICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0QXJyYXkoImFycmF5Il9zLCBXVEZNb3ZlKHZhbHVl
KSk7Ci0gICAgfQotfTsKLQotfSAvLyBSdW50aW1lCi0KLQotCi1uYW1lc3BhY2UgVGVzdEhlbHBl
cnMgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBQcm90b2NvbEVudW1UeXBlPgotT3B0aW9uYWw8UHJv
dG9jb2xFbnVtVHlwZT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYpOwot
Ci0vLyBFbnVtcyBpbiB0aGUgJ1J1bnRpbWUnIERvbWFpbgotdGVtcGxhdGU8PgotT3B0aW9uYWw8
SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZT4gcGFyc2VFbnVtVmFs
dWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6OlR5cGU+
KGNvbnN0IFN0cmluZyYpOwotCi19IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwotCi19IC8vIG5h
bWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xP
YmplY3RzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9w
dGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xP
YmplY3RzLmgiCi0KLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1uYW1lc3BhY2UgUHJvdG9j
b2wgewotCi1uYW1lc3BhY2UgVGVzdEhlbHBlcnMgewotCi1zdGF0aWMgY29uc3QgY2hhciogY29u
c3QgZW51bV9jb25zdGFudF92YWx1ZXNbXSA9IHsKLSAgICAibnVsbCIsCi0gICAgInN0cmluZyIs
Ci0gICAgImFycmF5IiwKLX07Ci0KLVN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29k
ZSkgewotICAgIHJldHVybiBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb2RlXTsKLX0KLQotLy8gRW51
bXMgaW4gdGhlICdSdW50aW1lJyBEb21haW4KLXRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6OlR5cGU+IHBhcnNlRW51bVZhbHVlRnJvbVN0
cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlPihjb25zdCBT
dHJpbmcmIHByb3RvY29sU3RyaW5nKQotewotICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3Rh
bnRWYWx1ZXNbXSA9IHsKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50
aW1lOjpLZXlQYXRoOjpUeXBlOjpOdWxsLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJv
dG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6OlR5cGU6OlN0cmluZywKLSAgICAgICAgKHNpemVfdClJ
bnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlOjpBcnJheSwKLSAgICB9
OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMzsgKytpKQotICAgICAgICBpZiAocHJvdG9j
b2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNbaV1dKQotICAg
ICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpLZXlQYXRoOjpU
eXBlKWNvbnN0YW50VmFsdWVzW2ldOwotCi0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQot
Ci19IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9j
b2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sT2JqZWN0cy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNw
YXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0
aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVycy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQotCi0KLW5h
bWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcu
aCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVk
ZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotCi1uYW1lc3BhY2UgSW5z
cGVjdG9yIHsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xDb25maWd1cmF0aW9uLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBz
aGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29s
Lmg+Ci0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFj
ZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKLUBlbmQKLQotCi0jIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3Vy
YXRpb24uaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbXBvcnQgIlRl
c3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1
Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLQotdXNpbmcgbmFtZXNwYWNl
IEluc3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24K
LXsKLSAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotfQot
Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3Rv
ckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAg
IGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7
Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQotCi0t
ICh2b2lkKWRlYWxsb2MKLXsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLUBlbmQKLQotCi0j
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIK
LSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7
Ci0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0KLSMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRh
dGlvbi5oPgotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+
Ci0KLQotQGNsYXNzIFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoOwotCi10eXBlZGVmIE5TX0VO
VU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xQbGF0Zm9ybSkgewotICAgIFRlc3RQcm90b2NvbFBs
YXRmb3JtQWxsLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYywKLSAgICBUZXN0UHJv
dG9jb2xQbGF0Zm9ybUlPUywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TLAotfTsKLQot
Ci10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5
cGUpIHsKLSAgICBUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGVOdWxsLAotICAgIFRlc3RQ
cm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZVN0cmluZywKLSAgICBUZXN0UHJvdG9jb2xSdW50aW1l
S2V5UGF0aFR5cGVBcnJheSwKLX07Ci0KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRl
ZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoIDogUldJUHJv
dG9jb2xKU09OT2JqZWN0Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rp
b25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0
aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OwotLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoVHlwZTooVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBl
KXR5cGU7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBUZXN0
UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGUgdHlwZTsKLS8qIG9wdGlvbmFsICovIEBwcm9wZXJ0
eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqc3RyaW5nOwotLyogb3B0aW9uYWwgKi8gQHBy
b3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqYXJyYXk7Ci1A
ZW5kCi0KLQotCi0KLQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENv
bXBhdGliaWxpdHlPYmplY3RzLmg+Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKLQot
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJv
dG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCi0jaW1w
b3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNp
bXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLQotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25h
bC10eXBlLXNldHRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9S
V0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KLU9wdGlvbmFsPE9iakNFbnVtVHlwZT4g
ZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOwotCi1pbmxpbmUgU3RyaW5n
IHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sUGxhdGZvcm0gdmFsdWUpCi17Ci0gICAgc3dp
dGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDoKLSAgICAgICAg
cmV0dXJuICJhbGwiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM6Ci0g
ICAgICAgIHJldHVybiAiZ2VuZXJpYyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3Jt
SU9TOgotICAgICAgICByZXR1cm4gImlvcyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRm
b3JtTWFjT1M6Ci0gICAgICAgIHJldHVybiAibWFjb3MiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0
ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sUGxhdGZvcm0+IGZyb21Qcm90b2NvbFN0
cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiYWxsIikKLSAg
ICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOwotICAgIGlmICh2YWx1ZSA9PSAi
Z2VuZXJpYyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM7Ci0g
ICAgaWYgKHZhbHVlID09ICJpb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZv
cm1JT1M7Ci0gICAgaWYgKHZhbHVlID09ICJtYWNvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJv
dG9jb2xQbGF0Zm9ybU1hY09TOwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLQotaW5s
aW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlw
ZSB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFJ1
bnRpbWVLZXlQYXRoVHlwZU51bGw6Ci0gICAgICAgIHJldHVybiAibnVsbCJfczsKLSAgICBjYXNl
IFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZVN0cmluZzoKLSAgICAgICAgcmV0dXJuICJz
dHJpbmciX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGVBcnJheToK
LSAgICAgICAgcmV0dXJuICJhcnJheSJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGlu
ZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGU+IGZyb21Qcm90b2NvbFN0
cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAibnVsbCIpCi0g
ICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGVOdWxsOwotICAgIGlm
ICh2YWx1ZSA9PSAic3RyaW5nIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFJ1bnRpbWVL
ZXlQYXRoVHlwZVN0cmluZzsKLSAgICBpZiAodmFsdWUgPT0gImFycmF5IikKLSAgICAgICAgcmV0
dXJuIFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZUFycmF5OwotICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBzaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2xUeXBlUGFyc2VyLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2Jq
ZWN0UHJpdmF0ZS5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW50ZXJmYWNl
IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoUnVudGltZURvbWFpbikKLQotKyAodm9pZClf
cGFyc2VLZXlQYXRoOihUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aCAqKilvdXRWYWx1ZSBmcm9t
UGF5bG9hZDooaWQpcGF5bG9hZDsKLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zIChSdW50aW1lRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZUtleVBh
dGg6KFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihp
ZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBb
TlNEaWN0aW9uYXJ5IGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xSdW50
aW1lS2V5UGF0aCBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOwotfQotCi1AZW5kCi0K
LQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50
ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1w
b3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotI2ltcG9y
dCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5n
IG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFJ1
bnRpbWVLZXlQYXRoCi0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwg
TlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQKLXsKLSAgICBpZiAoIShzZWxm
ID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAInR5cGUiXSwgQCJ0eXBlIik7Ci0g
ICAgT3B0aW9uYWw8VGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlPiB0eXBlID0gZnJvbVBy
b3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZT4ocGF5bG9hZFtAInR5
cGUiXSk7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfRU5VTV9WQUxVRSh0eXBlLCBAInR5
cGUiKTsKLSAgICBzZWxmLnR5cGUgPSB0eXBlLnZhbHVlKCk7Ci0KLSAgICBzZWxmLnN0cmluZyA9
IHBheWxvYWRbQCJzdHJpbmciXTsKLQotICAgIHNlbGYuYXJyYXkgPSBwYXlsb2FkW0AiYXJyYXki
XTsKLQotICAgIHJldHVybiBzZWxmOwotfQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9j
b2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9iamVjdAotewotICAgIGlmICghKHNl
bGYgPSBbc3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmplY3QgdG9KU09OT2JqZWN0XS5nZXQo
KV0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aFR5cGU6KFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZSl0
eXBlCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJldHVybiBu
aWw7Ci0KLSAgICBzZWxmLnR5cGUgPSB0eXBlOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0g
KHZvaWQpc2V0VHlwZTooVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlKXR5cGUKLXsKLSAg
ICBbc3VwZXIgc2V0U3RyaW5nOnRvUHJvdG9jb2xTdHJpbmcodHlwZSkgZm9yS2V5OkAidHlwZSJd
OwotfQotCi0tIChUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGUpdHlwZQotewotICAgIHJl
dHVybiBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlPihb
c3VwZXIgc3RyaW5nRm9yS2V5OkAidHlwZSJdKS52YWx1ZSgpOwotfQotCi0tICh2b2lkKXNldFN0
cmluZzooTlNTdHJpbmcgKilzdHJpbmcKLXsKLSAgICBbc3VwZXIgc2V0U3RyaW5nOnN0cmluZyBm
b3JLZXk6QCJzdHJpbmciXTsKLX0KLQotLSAoTlNTdHJpbmcgKilzdHJpbmcKLXsKLSAgICByZXR1
cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAInN0cmluZyJdOwotfQotCi0tICh2b2lkKXNldEFycmF5
OihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilhcnJheQotewotICAgIFtzdXBlciBzZXRKU09OQXJy
YXk6dG9KU09OU3RyaW5nQXJyYXkoYXJyYXkpIGZvcktleTpAImFycmF5Il07Ci19Ci0KLS0gKE5T
QXJyYXkvKjxOU1N0cmluZz4qLyAqKWFycmF5Ci17Ci0gICAgcmV0dXJuIHRvT2JqQ1N0cmluZ0Fy
cmF5KFtzdXBlciBKU09OQXJyYXlGb3JLZXk6QCJhcnJheSJdKTsKLX0KLQotQGVuZAotCi0KLSMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3Nob3Vs
ZC1zdHJpcC1jb21tZW50cy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3Nob3VsZC1zdHJpcC1jb21tZW50
cy5qc29uLXJlc3VsdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmExZmI3ZDRmOWQu
LjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3Nob3VsZC1zdHJpcC1jb21tZW50cy5qc29uLXJlc3Vs
dAorKysgL2Rldi9udWxsCkBAIC0xLDg3MCArMCwwIEBACi0jIyMgQmVnaW4gRmlsZTogSW5zcGVj
dG9yQmFja2VuZENvbW1hbmRzLmpzCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
c2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLSMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaG91bGQtc3RyaXAtY29tbWVudHMuanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UK
LQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi0jaW5jbHVk
ZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckZyb250ZW5kUm91dGVyLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNrZW5kRGlz
cGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tl
bmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQotICAgIEJhY2tlbmREaXNwYXRj
aGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNo
ZXIuZ2V0KCk7IH0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2Jh
Y2tlbmREaXNwYXRjaGVyOwotfTsKLQotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0K
LSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSMjIyBF
bmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBzaG91bGQtc3RyaXAtY29tbWVudHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90
b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKLQotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KLQotCi19IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVy
cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNob3VsZC1zdHJpcC1jb21tZW50cy5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9K
U09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCi0jaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgot
I2VuZGlmCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBzaG91bGQtc3RyaXAtY29tbWVudHMuanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUg
IlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQot
Y2xhc3MgRnJvbnRlbmRSb3V0ZXI7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVu
ZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBzaG91bGQtc3RyaXAtY29tbWVudHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEZyb250
ZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZy
b250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmls
ZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xPYmplY3RzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaG91bGQt
c3RyaXAtY29tbWVudHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
clByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotCi1uYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKLQotCi0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLQotCi0KLQotCi0K
LQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
LSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHNob3VsZC1zdHJpcC1jb21tZW50cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9j
b2xPYmplY3RzLmgiCi0KLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1uYW1lc3BhY2UgUHJv
dG9jb2wgewotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2luY2x1ZGUg
PHd0Zi9SZXRhaW5QdHIuaD4KLQotCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLX0gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmRE
aXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0
Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaG91bGQtc3RyaXAt
Y29tbWVudHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRj
aGVycy5oIgotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5o
PgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0K
LSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBzaG91bGQtc3RyaXAtY29tbWVudHMuanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVz
dFByb3RvY29sLmg+Ci0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQot
QGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKLUBlbmQKLQot
Ci0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHNob3VsZC1zdHJpcC1jb21tZW50cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3Vy
YXRpb24uaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbXBvcnQgIlRl
c3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1
Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLQotdXNpbmcgbmFtZXNwYWNl
IEluc3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24K
LXsKLSAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotfQot
Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3Rv
ckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAg
IGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7
Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQotCi0t
ICh2b2lkKWRlYWxsb2MKLXsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLUBlbmQKLQotCi0j
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBzaG91bGQtc3RyaXAtY29tbWVudHMuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5h
bC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQg
PHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2wuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNo
b3VsZC1zdHJpcC1jb21tZW50cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotCi0jaW1wb3J0
IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+Ci0KLQotCi0KLXR5cGVkZWYg
TlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbFBsYXRmb3JtKSB7Ci0gICAgVGVzdFByb3Rv
Y29sUGxhdGZvcm1BbGwsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljLAotICAgIFRl
c3RQcm90b2NvbFBsYXRmb3JtSU9TLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1MsCi19
OwotCi0KLQotCi0KLQotCi0KLQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xC
dWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
LmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaG91bGQtc3RyaXAtY29tbWVudHMuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCi0jaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBv
cnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLQotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
SW50ZXJuYWwuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
LmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaG91bGQtc3RyaXAtY29tbWVu
dHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1w
b3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFy
cmF5Q29udmVyc2lvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIE9iakNFbnVtVHlwZT4KLU9wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29s
U3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOwotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xT
dHJpbmcoVGVzdFByb3RvY29sUGxhdGZvcm0gdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7
Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDoKLSAgICAgICAgcmV0dXJuICJhbGwi
X3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM6Ci0gICAgICAgIHJldHVy
biAiZ2VuZXJpYyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOgotICAgICAg
ICByZXR1cm4gImlvcyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M6Ci0g
ICAgICAgIHJldHVybiAibWFjb3MiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUg
T3B0aW9uYWw8VGVzdFByb3RvY29sUGxhdGZvcm0+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBT
dHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiYWxsIikKLSAgICAgICAgcmV0dXJu
IFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOwotICAgIGlmICh2YWx1ZSA9PSAiZ2VuZXJpYyIpCi0g
ICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM7Ci0gICAgaWYgKHZhbHVl
ID09ICJpb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1JT1M7Ci0gICAg
aWYgKHZhbHVlID09ICJtYWNvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9y
bU1hY09TOwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaG91bGQtc3RyaXAtY29tbWVudHMuanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1w
b3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJ
UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9y
OwotCi0KLQotCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMu
bW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29s
SW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0j
aW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotI2lt
cG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVz
aW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xU
eXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1p
dGl2ZS10eXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXBy
aW1pdGl2ZS10eXBlLmpzb24tcmVzdWx0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBm
NTY2NjM3OWNhNy4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hbGlh
c2VkLXByaW1pdGl2ZS10eXBlLmpzb24tcmVzdWx0CisrKyAvZGV2L251bGwKQEAgLTEsODkxICsw
LDAgQEAKLSMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJp
bWl0aXZlLXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlw
ZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFn
bWEgb25jZQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0K
LSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNs
YXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2b2lkIHNldEJh
Y2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7
IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9Ci0gICAgQmFja2Vu
ZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5k
RGlzcGF0Y2hlci5nZXQoKTsgfQotcHJpdmF0ZToKLSAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNo
ZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Ci19OwotCi0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKLQotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQotIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEg
b25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10eXBlZGVmIFN0cmlu
ZyBFcnJvclN0cmluZzsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBG
aWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNr
ZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlw
ZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4K
LSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSNp
bmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jZW5kaWYKLQotbmFt
ZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMj
IEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5j
bHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewotCi1jbGFzcyBGcm9udGVuZFJvdXRlcjsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0j
IyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi19IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLQot
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEg
b25jZQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5o
PgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Igewot
Ci0KLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLQotCi0vLyBUeXBlZGVmcy4KLW5hbWVz
cGFjZSBSdW50aW1lIHsKLS8qIFVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4gKi8KLXR5cGVkZWYg
aW50IFJlbW90ZU9iamVjdElkOwotfSAvLyBSdW50aW1lCi0vLyBFbmQgb2YgdHlwZWRlZnMuCi0K
LQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
LSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0KLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wK
LQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
T2JqZWN0cy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRj
aGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlv
bi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVy
bmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQot
Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgot
Ci0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZl
LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0j
aW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVy
cy5oIgotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgot
Ci1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxX
ZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+Ci0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkg
KCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNP
YmplY3QKLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24u
aAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmlt
aXRpdmUtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKLQotI2ltcG9ydCAiVGVz
dFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRj
aGVycy5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdl
bnQuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJv
bGxlci5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2Vu
ZERpc3BhdGNoZXJzLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcnMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGltcGxlbWVu
dGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KLXsKLSAgICBBdWdtZW50YWJsZUluc3Bl
Y3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIK
LXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0
dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250
cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBb
c3VwZXIgZGVhbGxvY107Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24ubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlz
cGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xh
cmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgot
Ci0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPHd0Zi9K
U09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2wuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVj
bGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5o
PgotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+Ci0KLQot
Ci0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbFBsYXRmb3JtKSB7Ci0g
ICAgVGVzdFByb3RvY29sUGxhdGZvcm1BbGwsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5l
cmljLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TLAotICAgIFRlc3RQcm90b2NvbFBsYXRm
b3JtTWFjT1MsCi19OwotCi0KLQotCi0KLQotCi0KLQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3Iv
UldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+Ci0KLSMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFz
ZWQtcHJpbWl0aXZlLXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2Nv
bEpTT05PYmplY3RQcml2YXRlLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJs
ZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLQot
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0
UHJvdG9jb2wuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVy
c2lvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9i
akNFbnVtVHlwZT4KLU9wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNv
bnN0IFN0cmluZyYgdmFsdWUpOwotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVz
dFByb3RvY29sUGxhdGZvcm0gdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2Fz
ZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDoKLSAgICAgICAgcmV0dXJuICJhbGwiX3M7Ci0gICAg
Y2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM6Ci0gICAgICAgIHJldHVybiAiZ2VuZXJp
YyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOgotICAgICAgICByZXR1cm4g
ImlvcyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M6Ci0gICAgICAgIHJl
dHVybiAibWFjb3MiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8
VGVzdFByb3RvY29sUGxhdGZvcm0+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZh
bHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiYWxsIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90
b2NvbFBsYXRmb3JtQWxsOwotICAgIGlmICh2YWx1ZSA9PSAiZ2VuZXJpYyIpCi0gICAgICAgIHJl
dHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM7Ci0gICAgaWYgKHZhbHVlID09ICJpb3Mi
KQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1JT1M7Ci0gICAgaWYgKHZhbHVl
ID09ICJtYWNvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOwot
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10
eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2lt
cG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90
b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgotI2ltcG9ydCA8V2Vi
SW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLQotdXNpbmcgbmFtZXNw
YWNlIEluc3BlY3RvcjsKLQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMg
KFJ1bnRpbWVEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlUmVtb3RlT2JqZWN0SWQ6KE5TTnVtYmVy
ICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotCi1AZW5kCi0KLUBpbXBsZW1l
bnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFJ1bnRpbWVEb21haW4pCi0KLSsg
KHZvaWQpX3BhcnNlUmVtb3RlT2JqZWN0SWQ6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXls
b2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXls
b2FkLCBbTlNOdW1iZXIgY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSAoTlNOdW1iZXIgKilwYXls
b2FkOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1p
dGl2ZS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xK
U09OT2JqZWN0UHJpdmF0ZS5oPgotI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQg
PHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotCi0K
LSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5
cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtZGVjbGFy
YXRpb24tYXJyYXktdHlwZS5qc29uLXJlc3VsdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggYTRlNWM3ZTQwOTEuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24t
YXJyYXktdHlwZS5qc29uLXJlc3VsdAorKysgL2Rldi9udWxsCkBAIC0xLDEwNzMgKzAsMCBAQAot
IyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLS8vIERlYnVnZ2VyCi1J
bnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJEZWJ1Z2dlciIsIG51bGwpOwotSW5zcGVj
dG9yQmFja2VuZC5yZWdpc3RlckVudW0oIkRlYnVnZ2VyLlJlYXNvbiIsIHtEaWVkOiAiRGllZCIs
IEZhaW50ZWQ6ICJGYWludGVkIiwgSHVuZ3J5OiAiSHVuZ3J5In0pOwotSW5zcGVjdG9yQmFja2Vu
ZC5hY3RpdmF0ZURvbWFpbigiRGVidWdnZXIiLCBudWxsKTsKLSMjIyBFbmQgRmlsZTogSW5zcGVj
dG9yQmFja2VuZENvbW1hbmRzLmpzCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBl
LWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKLSNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0KLW5hbWVz
cGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1w
dWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3Bh
dGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNw
YXRjaGVyKTsgfQotICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNv
bnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KLXByaXZhdGU6Ci0gICAg
UmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwotfTsKLQotCi0K
LQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tl
bmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJz
LmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFy
cmF5LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdHlw
ZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
LSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0j
aW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jaW5j
bHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgotI2VuZGlmCi0KLW5hbWVz
cGFjZSBJbnNwZWN0b3IgewotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBF
bmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRl
c3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90
b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgRnJv
bnRlbmRSb3V0ZXI7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBU
ZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmRE
aXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRl
Y2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEZyb250ZW5k
RGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250
ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTog
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xPYmplY3RzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xh
cmF0aW9uLWFycmF5LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotCi1uYW1l
c3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLQotCi0vLyBG
b3J3YXJkIGRlY2xhcmF0aW9ucy4KLW5hbWVzcGFjZSBEZWJ1Z2dlciB7Ci1lbnVtIGNsYXNzIFJl
YXNvbjsKLX0gLy8gRGVidWdnZXIKLS8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KLQot
Ci0vLyBUeXBlZGVmcy4KLW5hbWVzcGFjZSBEZWJ1Z2dlciB7Ci10eXBlZGVmIGludCBCcmVha3Bv
aW50SWQ7Ci19IC8vIERlYnVnZ2VyCi0KLW5hbWVzcGFjZSBSdW50aW1lIHsKLXR5cGVkZWYgaW50
IE9iamVjdElkOwotdHlwZWRlZiBKU09OOjpBcnJheU9mPGludD4gTHVja3lOdW1iZXJzOwotdHlw
ZWRlZiBKU09OOjpBcnJheU9mPFN0cmluZz4gQmFieU5hbWVzOwotdHlwZWRlZiBKU09OOjpBcnJh
eU9mPGludD4gTmV3T2JqZWN0czsKLXR5cGVkZWYgSlNPTjo6QXJyYXlPZjxpbnQ+IE9sZE9iamVj
dHM7Ci10eXBlZGVmIEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6
OlJlYXNvbj4gU3RvcFJlYXNvbnM7Ci19IC8vIFJ1bnRpbWUKLS8vIEVuZCBvZiB0eXBlZGVmcy4K
LQotbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKLQotU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVl
KGludCBjb2RlKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdldEVudW1Db25zdGFu
dFZhbHVlKFQgZW51bVZhbHVlKQotewotICAgIHJldHVybiBnZXRFbnVtQ29uc3RhbnRWYWx1ZShz
dGF0aWNfY2FzdDxpbnQ+KGVudW1WYWx1ZSkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBUZXN0SGVs
cGVycwotCi1uYW1lc3BhY2UgRGVidWdnZXIgewotLyogICovCi1lbnVtIGNsYXNzIFJlYXNvbiB7
Ci0gICAgRGllZCA9IDAsCi0gICAgRmFpbnRlZCA9IDEsCi0gICAgSHVuZ3J5ID0gMiwKLX07IC8v
IGVudW0gY2xhc3MgUmVhc29uCi19IC8vIERlYnVnZ2VyCi0KLQotCi1uYW1lc3BhY2UgVGVzdEhl
bHBlcnMgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBQcm90b2NvbEVudW1UeXBlPgotT3B0aW9uYWw8
UHJvdG9jb2xFbnVtVHlwZT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYp
OwotCi0vLyBFbnVtcyBpbiB0aGUgJ0RlYnVnZ2VyJyBEb21haW4KLXRlbXBsYXRlPD4KLU9wdGlv
bmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb24+IHBhcnNlRW51bVZhbHVl
RnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uPihjb25zdCBT
dHJpbmcmKTsKLQotfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKLQotfSAvLyBuYW1lc3BhY2Ug
UHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLW5hbWVzcGFjZSBXVEYgewot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Ci0KLS8vIEhhc2ggZGVj
bGFyYXRpb25zIGluIHRoZSAnRGVidWdnZXInIERvbWFpbgotdGVtcGxhdGU8Pgotc3RydWN0IERl
ZmF1bHRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb24+IHsKLSAgICB0
eXBlZGVmIEludEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbj4gSGFz
aDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xP
YmplY3RzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBl
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLQotI2luY2x1
ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFt
ZXNwYWNlIEluc3BlY3RvciB7Ci0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLW5hbWVzcGFjZSBU
ZXN0SGVscGVycyB7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBlbnVtX2NvbnN0YW50X3Zh
bHVlc1tdID0gewotICAgICJEaWVkIiwKLSAgICAiRmFpbnRlZCIsCi0gICAgIkh1bmdyeSIsCi19
OwotCi1TdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsKLSAgICByZXR1cm4g
ZW51bV9jb25zdGFudF92YWx1ZXNbY29kZV07Ci19Ci0KLS8vIEVudW1zIGluIHRoZSAnRGVidWdn
ZXInIERvbWFpbgotdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVi
dWdnZXI6OlJlYXNvbj4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRlYnVnZ2VyOjpSZWFzb24+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCi17Ci0g
ICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0gewotICAgICAgICAoc2l6
ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb246OkRpZWQsCi0gICAgICAg
IChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbjo6RmFpbnRlZCwK
LSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uOjpI
dW5ncnksCi0gICAgfTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDM7ICsraSkKLSAgICAg
ICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFs
dWVzW2ldXSkKLSAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdn
ZXI6OlJlYXNvbiljb25zdGFudFZhbHVlc1tpXTsKLQotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
Ci19Ci0KLQotfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKLQotCi0KLX0gLy8gbmFtZXNwYWNl
IFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbE9iamVjdHMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNr
ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUt
ZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5h
dGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLQot
Ci1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQot
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmln
LmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1
ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLQotbmFtZXNwYWNlIElu
c3BlY3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbi5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
dHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5o
PgotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2Ug
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0Ci1AZW5kCi0KLQotIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9u
LmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW1wb3J0ICJUZXN0UHJv
dG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVy
bmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50
YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNw
ZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCi17Ci0g
ICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKLX0KLQotLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250
cm9sbGVyKiljb250cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAo
IXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIpOwotICAg
IF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9p
ZClkZWFsbG9jCi17Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi1AZW5kCi0KLQotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJu
YWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0
IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLSMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0
eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQot
I2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgotCi0KLQotCi10
eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xQbGF0Zm9ybSkgewotICAgIFRl
c3RQcm90b2NvbFBsYXRmb3JtQWxsLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYywK
LSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1h
Y09TLAotfTsKLQotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xEZWJ1
Z2dlclJlYXNvbikgewotICAgIFRlc3RQcm90b2NvbERlYnVnZ2VyUmVhc29uRGllZCwKLSAgICBU
ZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbkZhaW50ZWQsCi0gICAgVGVzdFByb3RvY29sRGVidWdn
ZXJSZWFzb25IdW5ncnksCi19OwotCi0KLQotCi0KLQotCi0KLSNpbXBvcnQgPFdlYkluc3BlY3Rv
ci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4KLQotIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2wuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwu
aAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJy
YXktdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVj
dFByaXZhdGUuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9y
Q29udHJvbGxlci5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotCi0KLQotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCA8
V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgotCi1uYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgotT3B0aW9uYWw8
T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0K
LWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xQbGF0Zm9ybSB2YWx1
ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3Jt
QWxsOgotICAgICAgICByZXR1cm4gImFsbCJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRm
b3JtR2VuZXJpYzoKLSAgICAgICAgcmV0dXJuICJnZW5lcmljIl9zOwotICAgIGNhc2UgVGVzdFBy
b3RvY29sUGxhdGZvcm1JT1M6Ci0gICAgICAgIHJldHVybiAiaW9zIl9zOwotICAgIGNhc2UgVGVz
dFByb3RvY29sUGxhdGZvcm1NYWNPUzoKLSAgICAgICAgcmV0dXJuICJtYWNvcyJfczsKLSAgICB9
Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xQbGF0Zm9ybT4g
ZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVl
ID09ICJhbGwiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1BbGw7Ci0gICAg
aWYgKHZhbHVlID09ICJnZW5lcmljIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRm
b3JtR2VuZXJpYzsKLSAgICBpZiAodmFsdWUgPT0gImlvcyIpCi0gICAgICAgIHJldHVybiBUZXN0
UHJvdG9jb2xQbGF0Zm9ybUlPUzsKLSAgICBpZiAodmFsdWUgPT0gIm1hY29zIikKLSAgICAgICAg
cmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKLX0KLQotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sRGVi
dWdnZXJSZWFzb24gdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0
UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbkRpZWQ6Ci0gICAgICAgIHJldHVybiAiRGllZCJfczsKLSAg
ICBjYXNlIFRlc3RQcm90b2NvbERlYnVnZ2VyUmVhc29uRmFpbnRlZDoKLSAgICAgICAgcmV0dXJu
ICJGYWludGVkIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGVidWdnZXJSZWFzb25IdW5ncnk6
Ci0gICAgICAgIHJldHVybiAiSHVuZ3J5Il9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5s
aW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbERlYnVnZ2VyUmVhc29uPiBmcm9tUHJvdG9jb2xTdHJp
bmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gIkRpZWQiKQotICAg
ICAgICByZXR1cm4gVGVzdFByb3RvY29sRGVidWdnZXJSZWFzb25EaWVkOwotICAgIGlmICh2YWx1
ZSA9PSAiRmFpbnRlZCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNv
bkZhaW50ZWQ7Ci0gICAgaWYgKHZhbHVlID09ICJIdW5ncnkiKQotICAgICAgICByZXR1cm4gVGVz
dFByb3RvY29sRGVidWdnZXJSZWFzb25IdW5ncnk7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
LX0KLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBl
LWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIK
LQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFy
c2VyLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0
ZS5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW50ZXJmYWNlIFRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucyAoRGVidWdnZXJEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlQnJl
YWtwb2ludElkOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsK
LSsgKHZvaWQpX3BhcnNlUmVhc29uOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDoo
aWQpcGF5bG9hZDsKLQotQGVuZAotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMgKFJ1bnRpbWVEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlT2JqZWN0SWQ6KE5TTnVtYmVyICoq
KW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotKyAodm9pZClfcGFyc2VMdWNreU51
bWJlcnM6KE5TQXJyYXkvKjxOU051bWJlcj4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQp
cGF5bG9hZDsKLSsgKHZvaWQpX3BhcnNlQmFieU5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8g
Kiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZU5ld09i
amVjdHM6KE5TQXJyYXkvKjxOU051bWJlcj4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQp
cGF5bG9hZDsKLSsgKHZvaWQpX3BhcnNlT2xkT2JqZWN0czooTlNBcnJheS8qPE5TTnVtYmVyPiov
ICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotKyAodm9pZClfcGFyc2VTdG9w
UmVhc29uczooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihp
ZClwYXlsb2FkOwotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMgKERlYnVnZ2VyRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZUJyZWFrcG9pbnRJZDoo
TlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJP
V19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU051bWJlciBjbGFzc10pOwotICAg
ICpvdXRWYWx1ZSA9IChOU051bWJlciAqKXBheWxvYWQ7Ci19Ci0KLSsgKHZvaWQpX3BhcnNlUmVh
c29uOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TU3RyaW5nIGNsYXNzXSk7
Ci0gICAgT3B0aW9uYWw8VGVzdFByb3RvY29sRGVidWdnZXJSZWFzb24+IHJlc3VsdCA9IEluc3Bl
Y3Rvcjo6ZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERlYnVnZ2VyUmVhc29uPihwYXls
b2FkKTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9FTlVNX1ZBTFVFKHJlc3VsdCwgQCJS
ZWFzb24iKTsKLSAgICAqb3V0VmFsdWUgPSBAKHJlc3VsdC52YWx1ZSgpKTsKLX0KLQotQGVuZAot
QGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoUnVudGltZURvbWFp
bikKLQotKyAodm9pZClfcGFyc2VPYmplY3RJZDooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBh
eWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBh
eWxvYWQsIFtOU051bWJlciBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IChOU051bWJlciAqKXBh
eWxvYWQ7Ci19Ci0KLSsgKHZvaWQpX3BhcnNlTHVja3lOdW1iZXJzOihOU0FycmF5Lyo8TlNOdW1i
ZXI+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19F
WENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0FycmF5Lyo8TlNOdW1iZXI+Ki8gY2xh
c3NdKTsKLSAgICAqb3V0VmFsdWUgPSAoTlNBcnJheS8qPE5TTnVtYmVyPiovICopcGF5bG9hZDsK
LX0KLQotKyAodm9pZClfcGFyc2VCYWJ5TmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKilv
dXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfQkFEX1RZUEUocGF5bG9hZCwgW05TQXJyYXkvKjxOU1N0cmluZz4qLyBjbGFzc10pOwotICAg
ICpvdXRWYWx1ZSA9IChOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilwYXlsb2FkOwotfQotCi0rICh2
b2lkKV9wYXJzZU5ld09iamVjdHM6KE5TQXJyYXkvKjxOU051bWJlcj4qLyAqKilvdXRWYWx1ZSBm
cm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZ
UEUocGF5bG9hZCwgW05TQXJyYXkvKjxOU051bWJlcj4qLyBjbGFzc10pOwotICAgICpvdXRWYWx1
ZSA9IChOU0FycmF5Lyo8TlNOdW1iZXI+Ki8gKilwYXlsb2FkOwotfQotCi0rICh2b2lkKV9wYXJz
ZU9sZE9iamVjdHM6KE5TQXJyYXkvKjxOU051bWJlcj4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9h
ZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9h
ZCwgW05TQXJyYXkvKjxOU051bWJlcj4qLyBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IChOU0Fy
cmF5Lyo8TlNOdW1iZXI+Ki8gKilwYXlsb2FkOwotfQotCi0rICh2b2lkKV9wYXJzZVN0b3BSZWFz
b25zOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBh
eWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0Fy
cmF5Lyo8TlNTdHJpbmc+Ki8gY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSAoTlNBcnJheS8qPE5T
U3RyaW5nPiovICopcGF5bG9hZDsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xU
eXBlcy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRp
b24tYXJyYXktdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3Rv
Y29sSlNPTk9iamVjdFByaXZhdGUuaD4KLSNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW1w
b3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0K
LQotCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhw
ZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC90eXBl
LWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uLXJlc3VsdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggODk3OWU4ZGJlMmYuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtZGVjbGFy
YXRpb24tZW51bS10eXBlLmpzb24tcmVzdWx0CisrKyAvZGV2L251bGwKQEAgLTEsMTA4NiArMCww
IEBACi0jIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0vLyBSdW50aW1l
Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJSdW50aW1lIiwgbnVsbCk7Ci1JbnNw
ZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiUnVudGltZS5GYXJtQW5pbWFscyIsIHtQaWdzOiAi
UGlncyIsIENvd3M6ICJDb3dzIiwgQ2F0czogIkNhdHMiLCBIZW5zOiAiSGVucyJ9KTsKLUluc3Bl
Y3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJSdW50aW1lLlR3b0xlZ2dlZEFuaW1hbHMiLCB7RHVj
a3M6ICJEdWNrcyIsIEhlbnM6ICJIZW5zIiwgQ3Jvd3M6ICJDcm93cyIsIEZsYW1pbmdvczogIkZs
YW1pbmdvcyJ9KTsKLUluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIlJ1bnRpbWUiLCBu
dWxsKTsKLSMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQot
Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0KLSNpbmNsdWRl
ICJUZXN0UHJvdG9jb2xUeXBlcy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
RnJvbnRlbmRSb3V0ZXIuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEFsdGVy
bmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2b2lkIHNldEJhY2tlbmREaXNw
YXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2Vu
ZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9Ci0gICAgQmFja2VuZERpc3BhdGNo
ZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hl
ci5nZXQoKTsgfQotcHJpdmF0ZToKLSAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFj
a2VuZERpc3BhdGNoZXI7Ci19OwotCi0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQot
I2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotIyMjIEVu
ZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0
UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFt
ZXNwYWNlIEluc3BlY3RvciB7Ci0KLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCi0KLQot
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0
Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlw
ZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1
ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCi0jaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVycy5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5j
cHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25j
ZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPHd0Zi9KU09O
VmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJ
bnNwZWN0b3IgewotCi1jbGFzcyBGcm9udGVuZFJvdXRlcjsKLQotfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYv
QXNzZXJ0aW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLW5hbWVzcGFjZSBQ
cm90b2NvbCB7Ci0KLQotCi0vLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KLW5hbWVzcGFjZSBSdW50
aW1lIHsKLWVudW0gY2xhc3MgRmFybUFuaW1hbHM7Ci1lbnVtIGNsYXNzIFR3b0xlZ2dlZEFuaW1h
bHM7Ci19IC8vIFJ1bnRpbWUKLS8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KLQotCi0K
LQotbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKLQotU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVl
KGludCBjb2RlKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdldEVudW1Db25zdGFu
dFZhbHVlKFQgZW51bVZhbHVlKQotewotICAgIHJldHVybiBnZXRFbnVtQ29uc3RhbnRWYWx1ZShz
dGF0aWNfY2FzdDxpbnQ+KGVudW1WYWx1ZSkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBUZXN0SGVs
cGVycwotCi1uYW1lc3BhY2UgUnVudGltZSB7Ci0vKiAgKi8KLWVudW0gY2xhc3MgRmFybUFuaW1h
bHMgewotICAgIFBpZ3MgPSAwLAotICAgIENvd3MgPSAxLAotICAgIENhdHMgPSAyLAotICAgIEhl
bnMgPSAzLAotfTsgLy8gZW51bSBjbGFzcyBGYXJtQW5pbWFscwotLyogICovCi1lbnVtIGNsYXNz
IFR3b0xlZ2dlZEFuaW1hbHMgewotICAgIER1Y2tzID0gNCwKLSAgICBIZW5zID0gMywKLSAgICBD
cm93cyA9IDUsCi0gICAgRmxhbWluZ29zID0gNiwKLX07IC8vIGVudW0gY2xhc3MgVHdvTGVnZ2Vk
QW5pbWFscwotfSAvLyBSdW50aW1lCi0KLQotCi1uYW1lc3BhY2UgVGVzdEhlbHBlcnMgewotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBQcm90b2NvbEVudW1UeXBlPgotT3B0aW9uYWw8UHJvdG9jb2xFbnVt
VHlwZT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYpOwotCi0vLyBFbnVt
cyBpbiB0aGUgJ1J1bnRpbWUnIERvbWFpbgotdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9y
OjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmlu
ZzxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpGYXJtQW5pbWFscz4oY29uc3QgU3RyaW5n
Jik7Ci10ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpU
d29MZWdnZWRBbmltYWxzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90
b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFscz4oY29uc3QgU3RyaW5nJik7Ci0KLX0gLy8g
bmFtZXNwYWNlIFRlc3RIZWxwZXJzCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgotCi1uYW1lc3BhY2UgV1RGIHsKLQotdGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwotCi0vLyBIYXNoIGRlY2xhcmF0aW9ucyBpbiB0aGUg
J1J1bnRpbWUnIERvbWFpbgotdGVtcGxhdGU8Pgotc3RydWN0IERlZmF1bHRIYXNoPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzPiB7Ci0gICAgdHlwZWRlZiBJbnRIYXNo
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzPiBIYXNoOwotfTsKLXRl
bXBsYXRlPD4KLXN0cnVjdCBEZWZhdWx0SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1l
OjpUd29MZWdnZWRBbmltYWxzPiB7Ci0gICAgdHlwZWRlZiBJbnRIYXNoPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM+IEhhc2g7Ci19OwotCi19IC8vIG5hbWVz
cGFjZSBXVEYKLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLQotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0K
LW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLW5hbWVzcGFjZSBUZXN0SGVscGVycyB7Ci0KLXN0YXRp
YyBjb25zdCBjaGFyKiBjb25zdCBlbnVtX2NvbnN0YW50X3ZhbHVlc1tdID0gewotICAgICJQaWdz
IiwKLSAgICAiQ293cyIsCi0gICAgIkNhdHMiLAotICAgICJIZW5zIiwKLSAgICAiRHVja3MiLAot
ICAgICJDcm93cyIsCi0gICAgIkZsYW1pbmdvcyIsCi19OwotCi1TdHJpbmcgZ2V0RW51bUNvbnN0
YW50VmFsdWUoaW50IGNvZGUpIHsKLSAgICByZXR1cm4gZW51bV9jb25zdGFudF92YWx1ZXNbY29k
ZV07Ci19Ci0KLS8vIEVudW1zIGluIHRoZSAnUnVudGltZScgRG9tYWluCi10ZW1wbGF0ZTw+Ci1P
cHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpGYXJtQW5pbWFscz4gcGFyc2VF
bnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1Bbmlt
YWxzPihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQotewotICAgIHN0YXRpYyBjb25zdCBz
aXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlBy
b3RvY29sOjpSdW50aW1lOjpGYXJtQW5pbWFsczo6UGlncywKLSAgICAgICAgKHNpemVfdClJbnNw
ZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpGYXJtQW5pbWFsczo6Q293cywKLSAgICAgICAgKHNp
emVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpGYXJtQW5pbWFsczo6Q2F0cywKLSAg
ICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpGYXJtQW5pbWFsczo6
SGVucywKLSAgICB9OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgNDsgKytpKQotICAgICAg
ICBpZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRWYWx1
ZXNbaV1dKQotICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1l
OjpGYXJtQW5pbWFscyljb25zdGFudFZhbHVlc1tpXTsKLQotICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7Ci19Ci0KLXRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRp
bWU6OlR3b0xlZ2dlZEFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6
OlByb3RvY29sOjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxzPihjb25zdCBTdHJpbmcmIHByb3Rv
Y29sU3RyaW5nKQotewotICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9
IHsKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUd29MZWdn
ZWRBbmltYWxzOjpEdWNrcywKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpS
dW50aW1lOjpUd29MZWdnZWRBbmltYWxzOjpIZW5zLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rv
cjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM6OkNyb3dzLAotICAgICAgICAo
c2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM6OkZs
YW1pbmdvcywKLSAgICB9OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgNDsgKytpKQotICAg
ICAgICBpZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRW
YWx1ZXNbaV1dKQotICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50
aW1lOjpUd29MZWdnZWRBbmltYWxzKWNvbnN0YW50VmFsdWVzW2ldOwotCi0gICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKLX0KLQotCi19IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwotCi0KLQotfSAv
LyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0
ci5oPgotCi0KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgK
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBl
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9y
dCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIK
LQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW5jbHVkZSAiVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLQotbmFt
ZXNwYWNlIEluc3BlY3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFBy
b3RvY29sLmg+Ci0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGlu
dGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKLUBlbmQKLQotCi0j
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbi5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2ltcG9ydCAi
VGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgotCi11c2luZyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yOwotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
bgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci19
Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVj
dG9yQ29udHJvbGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0g
ICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVy
KTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0K
LS0gKHZvaWQpZGVhbGxvYwotewotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotQGVuZAotCi0K
LSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29s
SW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0j
aW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwot
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5o
PgotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+Ci0KLQot
Ci0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbFBsYXRmb3JtKSB7Ci0g
ICAgVGVzdFByb3RvY29sUGxhdGZvcm1BbGwsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5l
cmljLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TLAotICAgIFRlc3RQcm90b2NvbFBsYXRm
b3JtTWFjT1MsCi19OwotCi0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2Nv
bFJ1bnRpbWVGYXJtQW5pbWFscykgewotICAgIFRlc3RQcm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFs
c1BpZ3MsCi0gICAgVGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzQ293cywKLSAgICBUZXN0
UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHNDYXRzLAotICAgIFRlc3RQcm90b2NvbFJ1bnRpbWVG
YXJtQW5pbWFsc0hlbnMsCi19OwotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJv
dG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFscykgewotICAgIFRlc3RQcm90b2NvbFJ1bnRpbWVU
d29MZWdnZWRBbmltYWxzRHVja3MsCi0gICAgVGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFu
aW1hbHNIZW5zLAotICAgIFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzQ3Jvd3Ms
Ci0gICAgVGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHNGbGFtaW5nb3MsCi19Owot
Ci0KLQotCi0KLQotCi0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29t
cGF0aWJpbGl0eU9iamVjdHMuaD4KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29s
LmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgotI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0
IDx3dGYvSlNPTlZhbHVlcy5oPgotCi0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbElu
dGVybmFsLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5o
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVt
LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0j
aW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2Nv
bEFycmF5Q29udmVyc2lvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KLU9wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3Rv
Y29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOwotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9j
b2xTdHJpbmcoVGVzdFByb3RvY29sUGxhdGZvcm0gdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVl
KSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDoKLSAgICAgICAgcmV0dXJuICJh
bGwiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM6Ci0gICAgICAgIHJl
dHVybiAiZ2VuZXJpYyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOgotICAg
ICAgICByZXR1cm4gImlvcyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M6
Ci0gICAgICAgIHJldHVybiAibWFjb3MiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxp
bmUgT3B0aW9uYWw8VGVzdFByb3RvY29sUGxhdGZvcm0+IGZyb21Qcm90b2NvbFN0cmluZyhjb25z
dCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiYWxsIikKLSAgICAgICAgcmV0
dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOwotICAgIGlmICh2YWx1ZSA9PSAiZ2VuZXJpYyIp
Ci0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM7Ci0gICAgaWYgKHZh
bHVlID09ICJpb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1JT1M7Ci0g
ICAgaWYgKHZhbHVlID09ICJtYWNvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0
Zm9ybU1hY09TOwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLQotaW5saW5lIFN0cmlu
ZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFscyB2YWx1ZSkK
LXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFJ1bnRpbWVGYXJt
QW5pbWFsc1BpZ3M6Ci0gICAgICAgIHJldHVybiAiUGlncyJfczsKLSAgICBjYXNlIFRlc3RQcm90
b2NvbFJ1bnRpbWVGYXJtQW5pbWFsc0Nvd3M6Ci0gICAgICAgIHJldHVybiAiQ293cyJfczsKLSAg
ICBjYXNlIFRlc3RQcm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFsc0NhdHM6Ci0gICAgICAgIHJldHVy
biAiQ2F0cyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFsc0hlbnM6
Ci0gICAgICAgIHJldHVybiAiSGVucyJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGlu
ZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHM+IGZyb21Qcm90b2NvbFN0
cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiUGlncyIpCi0g
ICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHNQaWdzOwotICAgIGlm
ICh2YWx1ZSA9PSAiQ293cyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xSdW50aW1lRmFy
bUFuaW1hbHNDb3dzOwotICAgIGlmICh2YWx1ZSA9PSAiQ2F0cyIpCi0gICAgICAgIHJldHVybiBU
ZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHNDYXRzOwotICAgIGlmICh2YWx1ZSA9PSAiSGVu
cyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHNIZW5zOwot
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0
cmluZyhUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFscyB2YWx1ZSkKLXsKLSAgICBz
d2l0Y2godmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmlt
YWxzRHVja3M6Ci0gICAgICAgIHJldHVybiAiRHVja3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9j
b2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFsc0hlbnM6Ci0gICAgICAgIHJldHVybiAiSGVucyJfczsK
LSAgICBjYXNlIFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzQ3Jvd3M6Ci0gICAg
ICAgIHJldHVybiAiQ3Jvd3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVn
Z2VkQW5pbWFsc0ZsYW1pbmdvczoKLSAgICAgICAgcmV0dXJuICJGbGFtaW5nb3MiX3M7Ci0gICAg
fQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sUnVudGltZVR3
b0xlZ2dlZEFuaW1hbHM+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQot
ewotICAgIGlmICh2YWx1ZSA9PSAiRHVja3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29s
UnVudGltZVR3b0xlZ2dlZEFuaW1hbHNEdWNrczsKLSAgICBpZiAodmFsdWUgPT0gIkhlbnMiKQot
ICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHNIZW5zOwot
ICAgIGlmICh2YWx1ZSA9PSAiQ3Jvd3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUnVu
dGltZVR3b0xlZ2dlZEFuaW1hbHNDcm93czsKLSAgICBpZiAodmFsdWUgPT0gIkZsYW1pbmdvcyIp
Ci0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFsc0ZsYW1p
bmdvczsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0j
aW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3Iv
UldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVj
dG9yOwotCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoUnVudGltZURv
bWFpbikKLQotKyAodm9pZClfcGFyc2VGYXJtQW5pbWFsczooTlNOdW1iZXIgKiopb3V0VmFsdWUg
ZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZVR3b0xlZ2dlZEFuaW1hbHM6
KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotCi1AZW5kCi0K
LUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFJ1bnRpbWVEb21h
aW4pCi0KLSsgKHZvaWQpX3BhcnNlRmFybUFuaW1hbHM6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZy
b21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQ
RShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKLSAgICBPcHRpb25hbDxUZXN0UHJvdG9jb2xS
dW50aW1lRmFybUFuaW1hbHM+IHJlc3VsdCA9IEluc3BlY3Rvcjo6ZnJvbVByb3RvY29sU3RyaW5n
PFRlc3RQcm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFscz4ocGF5bG9hZCk7Ci0gICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9CQURfRU5VTV9WQUxVRShyZXN1bHQsIEAiRmFybUFuaW1hbHMiKTsKLSAgICAq
b3V0VmFsdWUgPSBAKHJlc3VsdC52YWx1ZSgpKTsKLX0KLQotKyAodm9pZClfcGFyc2VUd29MZWdn
ZWRBbmltYWxzOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAot
ewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TU3RyaW5nIGNs
YXNzXSk7Ci0gICAgT3B0aW9uYWw8VGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHM+
IHJlc3VsdCA9IEluc3BlY3Rvcjo6ZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbFJ1bnRp
bWVUd29MZWdnZWRBbmltYWxzPihwYXlsb2FkKTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JB
RF9FTlVNX1ZBTFVFKHJlc3VsdCwgQCJUd29MZWdnZWRBbmltYWxzIik7Ci0gICAgKm91dFZhbHVl
ID0gQChyZXN1bHQudmFsdWUoKSk7Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
VHlwZXMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0
aW9uLWVudW0tdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3Rv
Y29sSlNPTk9iamVjdFByaXZhdGUuaD4KLSNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW1w
b3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0K
LQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3Rl
ZC90eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvdHlwZS1k
ZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uLXJlc3VsdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNDJlNmRhMmJiYzguLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtZGVjbGFy
YXRpb24tb2JqZWN0LXR5cGUuanNvbi1yZXN1bHQKKysrIC9kZXYvbnVsbApAQCAtMSwyNDU1ICsw
LDAgQEAKLSMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBl
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotLy8gRGF0
YWJhc2UKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIkRhdGFiYXNlIiwgbnVsbCk7
Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiRGF0YWJhc2UuTW91c2VCdXR0b24iLCB7
Tm9uZTogIk5vbmUiLCBMZWZ0OiAiTGVmdCIsIE1pZGRsZTogIk1pZGRsZSIsIFJpZ2h0OiAiUmln
aHQifSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiRGF0YWJhc2UuT3B0aW9uYWxQ
YXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSIsIHtMVFI6ICJMVFIiLCBSVEw6ICJSVEwifSk7
Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiRGF0YWJhc2UuUGFyYW1ldGVyQnVuZGxl
RGlyZWN0aW9uYWxpdHkiLCB7TFRSOiAiTFRSIiwgUlRMOiAiUlRMIn0pOwotSW5zcGVjdG9yQmFj
a2VuZC5hY3RpdmF0ZURvbWFpbigiRGF0YWJhc2UiLCBudWxsKTsKLSMjIyBFbmQgRmlsZTogSW5z
cGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRl
QmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0
eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgi
Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4K
LSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotCi1u
YW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIg
ewotcHVibGljOgotICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmRE
aXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUo
ZGlzcGF0Y2hlcik7IH0KLSAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIo
KSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Ci1wcml2YXRlOgot
ICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKLX07Ci0K
LQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jZW5kaWYgLy8gRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlv
bi1vYmplY3QtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgot
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Igewot
Ci10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVz
Lmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
Ci0jaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgotI2VuZGlmCi0K
LW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0K
LSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNs
YXNzIEZyb250ZW5kUm91dGVyOwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQg
RmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZy
b250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
dHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0
RnJvbnRlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5h
bWVzcGFjZSBJbnNwZWN0b3IgewotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVu
ZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbE9iamVjdHMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5
cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5o
PgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0K
LQotCi0vLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KLW5hbWVzcGFjZSBEYXRhYmFzZSB7Ci1jbGFz
cyBFcnJvcjsKLWNsYXNzIE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOwotY2xhc3MgUGFyYW1ldGVy
QnVuZGxlOwotY2xhc3MgT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0czsKLWNsYXNzIER1
bW15T2JqZWN0OwotZW51bSBjbGFzcyBNb3VzZUJ1dHRvbjsKLX0gLy8gRGF0YWJhc2UKLQotbmFt
ZXNwYWNlIFRlc3QgewotY2xhc3MgUGFyYW1ldGVyQnVuZGxlOwotfSAvLyBUZXN0Ci0vLyBFbmQg
b2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCi0KLQotLy8gVHlwZWRlZnMuCi1uYW1lc3BhY2UgRGF0
YWJhc2UgewotdHlwZWRlZiBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFi
YXNlOjpFcnJvcj4gRXJyb3JMaXN0OwotfSAvLyBEYXRhYmFzZQotLy8gRW5kIG9mIHR5cGVkZWZz
LgotCi1uYW1lc3BhY2UgVGVzdEhlbHBlcnMgewotCi1TdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFs
dWUoaW50IGNvZGUpOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgZ2V0RW51bUNvbnN0
YW50VmFsdWUoVCBlbnVtVmFsdWUpCi17Ci0gICAgcmV0dXJuIGdldEVudW1Db25zdGFudFZhbHVl
KHN0YXRpY19jYXN0PGludD4oZW51bVZhbHVlKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFRlc3RI
ZWxwZXJzCi0KLW5hbWVzcGFjZSBEYXRhYmFzZSB7Ci0vKiBEYXRhYmFzZSBlcnJvci4gKi8KLWNs
YXNzIEVycm9yIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewotcHVibGljOgotICAgIGVudW0g
ewotICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCi0gICAgICAgIE1lc3NhZ2VTZXQgPSAxIDw8IDAs
Ci0gICAgICAgIENvZGVTZXQgPSAxIDw8IDEsCi0gICAgICAgIEFsbEZpZWxkc1NldCA9IChNZXNz
YWdlU2V0IHwgQ29kZVNldCkKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8aW50IFNUQVRFPgotICAg
IGNsYXNzIEJ1aWxkZXIgewotICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+IG1fcmVzdWx0OwotCi0gICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRF
IHwgU1RFUD4mIGNhc3RTdGF0ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAqcmVp
bnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIEJ1aWxkZXIoUmVmPC8qRXJyb3IqL0pTT046Ok9iamVjdD4mJiBvYmplY3QpCi0g
ICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKLSAgICAgICAgewotICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRl
ZF9pbl9ub25faW5pdF9zdGF0ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZnJpZW5kIGNsYXNzIEVy
cm9yOwotICAgIHB1YmxpYzoKLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTWVzc2FnZVNldD4m
IHNldE1lc3NhZ2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIE1lc3NhZ2VTZXQpLCBwcm9wZXJ0eV9tZXNzYWdlX2Fs
cmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1lc3NhZ2UiX3Ms
IHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TWVzc2FnZVNldD4oKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2RlU2V0PiYgc2V0Q29kZShpbnQg
dmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBD
b2RlU2V0KSwgcHJvcGVydHlfY29kZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0SW50ZWdlcigiY29kZSJfcywgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxDb2RlU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgUmVmPEVycm9yPiByZWxlYXNl
KCkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmll
bGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KHNpemVvZihFcnJvcikgPT0gc2l6ZW9mKEpTT046Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsKLQot
ICAgICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4ganNvblJlc3VsdCA9IG1fcmVzdWx0LnJlbGVh
c2VOb25OdWxsKCk7Ci0gICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFdURk1vdmUoKnJlaW50ZXJw
cmV0X2Nhc3Q8UmVmPEVycm9yPio+KCZqc29uUmVzdWx0KSk7Ci0gICAgICAgICAgICByZXR1cm4g
cmVzdWx0OwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIC8qCi0gICAgICogU3ludGhldGljIGNv
bnN0cnVjdG9yOgotICAgICAqIFJlZjxFcnJvcj4gcmVzdWx0ID0gRXJyb3I6OmNyZWF0ZSgpCi0g
ICAgICogICAgIC5zZXRNZXNzYWdlKC4uLikKLSAgICAgKiAgICAgLnNldENvZGUoLi4uKQotICAg
ICAqICAgICAucmVsZWFzZSgpOwotICAgICAqLwotICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRz
U2V0PiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+
KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOwotICAgIH0KLX07Ci0KLS8qIEVudW1lcmF0ZXMgZGlm
ZmVyZW50IG1vdXNlIGJ1dHRvbnMgdGhhdCBjYW4gYmUgdXNlZC4gKi8KLWVudW0gY2xhc3MgTW91
c2VCdXR0b24gewotICAgIE5vbmUgPSAwLAotICAgIExlZnQgPSAxLAotICAgIE1pZGRsZSA9IDIs
Ci0gICAgUmlnaHQgPSAzLAotfTsgLy8gZW51bSBjbGFzcyBNb3VzZUJ1dHRvbgotY2xhc3MgT3B0
aW9uYWxQYXJhbWV0ZXJCdW5kbGUgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7Ci1wdWJsaWM6
Ci0gICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAnZGlyZWN0aW9uYWxpdHknIHdoaWxl
IGdlbmVyYXRpbmcgT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUuCi0gICAgZW51bSBjbGFzcyBEaXJl
Y3Rpb25hbGl0eSB7Ci0gICAgICAgIExUUiA9IDQsCi0gICAgICAgIFJUTCA9IDUsCi0gICAgfTsg
Ly8gZW51bSBjbGFzcyBEaXJlY3Rpb25hbGl0eQotICAgIGVudW0gewotICAgICAgICBOb0ZpZWxk
c1NldCA9IDAsCi0gICAgICAgIEFsbEZpZWxkc1NldCA9IDAKLSAgICB9OwotCi0gICAgdGVtcGxh
dGU8aW50IFNUQVRFPgotICAgIGNsYXNzIEJ1aWxkZXIgewotICAgIHByaXZhdGU6Ci0gICAgICAg
IFJlZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVzdWx0OwotCi0gICAgICAgIHRlbXBsYXRlPGludCBT
VEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0
aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXIoUmVmPC8qT3B0aW9uYWxQYXJhbWV0
ZXJCdW5kbGUqL0pTT046Ok9iamVjdD4mJiBvYmplY3QpCi0gICAgICAgICAgICA6IG1fcmVzdWx0
KFdURk1vdmUob2JqZWN0KSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
U1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7
Ci0gICAgICAgIH0KLSAgICAgICAgZnJpZW5kIGNsYXNzIE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxl
OwotICAgIHB1YmxpYzoKLQotICAgICAgICBSZWY8T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU+IHJl
bGVhc2UoKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBB
bGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwotICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoc2l6ZW9mKE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlKSA9PSBzaXplb2YoSlNPTjo6T2Jq
ZWN0KSwgY2Fubm90X2Nhc3QpOwotCi0gICAgICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29u
UmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKLSAgICAgICAgICAgIGF1dG8gcmVz
dWx0ID0gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8T3B0aW9uYWxQYXJhbWV0ZXJCdW5k
bGU+Kj4oJmpzb25SZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAg
IH0KLSAgICB9OwotCi0gICAgLyoKLSAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6Ci0gICAg
ICogUmVmPE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlPiByZXN1bHQgPSBPcHRpb25hbFBhcmFtZXRl
ckJ1bmRsZTo6Y3JlYXRlKCkKLSAgICAgKiAgICAgLnJlbGVhc2UoKTsKLSAgICAgKi8KLSAgICBz
dGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKLSAgICB9Ci0K
LSAgICB2b2lkIHNldENvbHVtbk5hbWVzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IHZh
bHVlKQotICAgIHsKLSAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0QXJyYXkoImNvbHVtbk5h
bWVzIl9zLCBXVEZNb3ZlKHZhbHVlKSk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRCdXR0b25zKFJl
ZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1
dHRvbj4+IHZhbHVlKQotICAgIHsKLSAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0QXJyYXko
ImJ1dHRvbnMiX3MsIFdURk1vdmUodmFsdWUpKTsKLSAgICB9Ci0KLSAgICB2b2lkIHNldERpcmVj
dGlvbmFsaXR5KERpcmVjdGlvbmFsaXR5IHZhbHVlKQotICAgIHsKLSAgICAgICAgSlNPTjo6T2Jq
ZWN0QmFzZTo6c2V0U3RyaW5nKCJkaXJlY3Rpb25hbGl0eSJfcywgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKHZhbHVlKSk7Ci0gICAgfQotCi0g
ICAgdm9pZCBzZXROb3Rlcyhjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgIHsKLSAgICAgICAgSlNP
Tjo6T2JqZWN0QmFzZTo6c2V0U3RyaW5nKCJub3RlcyJfcywgdmFsdWUpOwotICAgIH0KLQotICAg
IHZvaWQgc2V0VGltZXN0YW1wKGRvdWJsZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEpTT046Ok9i
amVjdEJhc2U6OnNldERvdWJsZSgidGltZXN0YW1wIl9zLCB2YWx1ZSk7Ci0gICAgfQotCi0gICAg
dm9pZCBzZXRWYWx1ZXMoUmVmUHRyPEpTT046Ok9iamVjdD4gdmFsdWUpCi0gICAgewotICAgICAg
ICBKU09OOjpPYmplY3RCYXNlOjpzZXRPYmplY3QoInZhbHVlcyJfcywgV1RGTW92ZSh2YWx1ZSkp
OwotICAgIH0KLQotICAgIHZvaWQgc2V0UGF5bG9hZChSZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVl
KQotICAgIHsKLSAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0VmFsdWUoInBheWxvYWQiX3Ms
IFdURk1vdmUodmFsdWUpKTsKLSAgICB9Ci0KLSAgICB2b2lkIHNldEVycm9yKFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHZhbHVlKQotICAgIHsKLSAgICAgICAg
SlNPTjo6T2JqZWN0QmFzZTo6c2V0T2JqZWN0KCJlcnJvciJfcywgV1RGTW92ZSh2YWx1ZSkpOwot
ICAgIH0KLQotICAgIHZvaWQgc2V0RXJyb3JMaXN0KFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpEYXRhYmFzZTo6RXJyb3JMaXN0PiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEpTT046Ok9iamVj
dEJhc2U6OnNldEFycmF5KCJlcnJvckxpc3QiX3MsIFdURk1vdmUodmFsdWUpKTsKLSAgICB9Ci19
OwotCi1jbGFzcyBQYXJhbWV0ZXJCdW5kbGUgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7Ci1w
dWJsaWM6Ci0gICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAnZGlyZWN0aW9uYWxpdHkn
IHdoaWxlIGdlbmVyYXRpbmcgUGFyYW1ldGVyQnVuZGxlLgotICAgIGVudW0gY2xhc3MgRGlyZWN0
aW9uYWxpdHkgewotICAgICAgICBMVFIgPSA0LAotICAgICAgICBSVEwgPSA1LAotICAgIH07IC8v
IGVudW0gY2xhc3MgRGlyZWN0aW9uYWxpdHkKLSAgICBlbnVtIHsKLSAgICAgICAgTm9GaWVsZHNT
ZXQgPSAwLAotICAgICAgICBDb2x1bW5OYW1lc1NldCA9IDEgPDwgMCwKLSAgICAgICAgQnV0dG9u
c1NldCA9IDEgPDwgMSwKLSAgICAgICAgRGlyZWN0aW9uYWxpdHlTZXQgPSAxIDw8IDIsCi0gICAg
ICAgIE5vdGVzU2V0ID0gMSA8PCAzLAotICAgICAgICBUaW1lc3RhbXBTZXQgPSAxIDw8IDQsCi0g
ICAgICAgIFZhbHVlc1NldCA9IDEgPDwgNSwKLSAgICAgICAgUGF5bG9hZFNldCA9IDEgPDwgNiwK
LSAgICAgICAgRXJyb3JTZXQgPSAxIDw8IDcsCi0gICAgICAgIEVycm9yTGlzdFNldCA9IDEgPDwg
OCwKLSAgICAgICAgQWxsRmllbGRzU2V0ID0gKENvbHVtbk5hbWVzU2V0IHwgQnV0dG9uc1NldCB8
IERpcmVjdGlvbmFsaXR5U2V0IHwgTm90ZXNTZXQgfCBUaW1lc3RhbXBTZXQgfCBWYWx1ZXNTZXQg
fCBQYXlsb2FkU2V0IHwgRXJyb3JTZXQgfCBFcnJvckxpc3RTZXQpCi0gICAgfTsKLQotICAgIHRl
bXBsYXRlPGludCBTVEFURT4KLSAgICBjbGFzcyBCdWlsZGVyIHsKLSAgICBwcml2YXRlOgotICAg
ICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBtX3Jlc3VsdDsKLQotICAgICAgICB0ZW1wbGF0ZTxp
bnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+
Kj4odGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyKFJlZjwvKlBhcmFtZXRlckJ1
bmRsZSovSlNPTjo6T2JqZWN0PiYmIG9iamVjdCkKLSAgICAgICAgICAgIDogbV9yZXN1bHQoV1RG
TW92ZShvYmplY3QpKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFU
RSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKLSAg
ICAgICAgfQotICAgICAgICBmcmllbmQgY2xhc3MgUGFyYW1ldGVyQnVuZGxlOwotICAgIHB1Ymxp
YzoKLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29sdW1uTmFtZXNTZXQ+JiBzZXRDb2x1bW5O
YW1lcyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiB2YWx1ZSkKLSAgICAgICAgewotICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENvbHVtbk5hbWVzU2V0KSwgcHJvcGVy
dHlfY29sdW1uTmFtZXNfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldEFy
cmF5KCJjb2x1bW5OYW1lcyJfcywgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0
ZTxDb2x1bW5OYW1lc1NldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBCdXR0b25zU2V0PiYgc2V0QnV0dG9ucyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6
OlByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b24+PiB2YWx1ZSkKLSAgICAgICAgewotICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEJ1dHRvbnNTZXQpLCBwcm9wZXJ0eV9i
dXR0b25zX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheSgiYnV0
dG9ucyJfcywgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxCdXR0b25zU2V0
PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IERpcmVjdGlvbmFsaXR5
U2V0PiYgc2V0RGlyZWN0aW9uYWxpdHkoRGlyZWN0aW9uYWxpdHkgdmFsdWUpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBEaXJlY3Rpb25hbGl0eVNldCks
IHByb3BlcnR5X2RpcmVjdGlvbmFsaXR5X2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXRTdHJpbmcoImRpcmVjdGlvbmFsaXR5Il9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpU
ZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUodmFsdWUpKTsKLSAgICAgICAgICAgIHJl
dHVybiBjYXN0U3RhdGU8RGlyZWN0aW9uYWxpdHlTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgTm90ZXNTZXQ+JiBzZXROb3Rlcyhjb25zdCBTdHJpbmcmIHZhbHVl
KQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTm90ZXNT
ZXQpLCBwcm9wZXJ0eV9ub3Rlc19hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0U3RyaW5nKCJub3RlcyJfcywgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0
ZTxOb3Rlc1NldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUaW1l
c3RhbXBTZXQ+JiBzZXRUaW1lc3RhbXAoZG91YmxlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVGltZXN0YW1wU2V0KSwgcHJvcGVydHlfdGlt
ZXN0YW1wX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXREb3VibGUoInRp
bWVzdGFtcCJfcywgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUaW1lc3Rh
bXBTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVmFsdWVzU2V0
PiYgc2V0VmFsdWVzKFJlZlB0cjxKU09OOjpPYmplY3Q+IHZhbHVlKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVmFsdWVzU2V0KSwgcHJvcGVydHlfdmFs
dWVzX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoInZhbHVl
cyJfcywgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxWYWx1ZXNTZXQ+KCk7
Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgUGF5bG9hZFNldD4mIHNldFBh
eWxvYWQoUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIFBheWxvYWRTZXQpLCBwcm9wZXJ0eV9wYXlsb2FkX2Fs
cmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywg
dmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxQYXlsb2FkU2V0PigpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IEVycm9yU2V0PiYgc2V0RXJyb3IoUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gdmFsdWUpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBFcnJvclNldCksIHByb3Bl
cnR5X2Vycm9yX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3Qo
ImVycm9yIl9zLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEVycm9yU2V0
PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IEVycm9yTGlzdFNldD4m
IHNldEVycm9yTGlzdChSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9y
TGlzdD4gdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBFcnJvckxpc3RTZXQpLCBwcm9wZXJ0eV9lcnJvckxpc3RfYWxyZWFkeV9zZXQpOwotICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJlcnJvckxpc3QiX3MsIHZhbHVlKTsKLSAgICAg
ICAgICAgIHJldHVybiBjYXN0U3RhdGU8RXJyb3JMaXN0U2V0PigpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgUmVmPFBhcmFtZXRlckJ1bmRsZT4gcmVsZWFzZSgpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9y
ZWFkeSk7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoUGFyYW1ldGVyQnVuZGxl
KSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0KSwgY2Fubm90X2Nhc3QpOwotCi0gICAgICAgICAgICBS
ZWY8SlNPTjo6T2JqZWN0PiBqc29uUmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsK
LSAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8
UGFyYW1ldGVyQnVuZGxlPio+KCZqc29uUmVzdWx0KSk7Ci0gICAgICAgICAgICByZXR1cm4gcmVz
dWx0OwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIC8qCi0gICAgICogU3ludGhldGljIGNvbnN0
cnVjdG9yOgotICAgICAqIFJlZjxQYXJhbWV0ZXJCdW5kbGU+IHJlc3VsdCA9IFBhcmFtZXRlckJ1
bmRsZTo6Y3JlYXRlKCkKLSAgICAgKiAgICAgLnNldENvbHVtbk5hbWVzKC4uLikKLSAgICAgKiAg
ICAgLnNldEJ1dHRvbnMoLi4uKQotICAgICAqICAgICAuc2V0RGlyZWN0aW9uYWxpdHkoLi4uKQot
ICAgICAqICAgICAuc2V0Tm90ZXMoLi4uKQotICAgICAqICAgICAuc2V0VGltZXN0YW1wKC4uLikK
LSAgICAgKiAgICAgLnNldFZhbHVlcyguLi4pCi0gICAgICogICAgIC5zZXRQYXlsb2FkKC4uLikK
LSAgICAgKiAgICAgLnNldEVycm9yKC4uLikKLSAgICAgKiAgICAgLnNldEVycm9yTGlzdCguLi4p
Ci0gICAgICogICAgIC5yZWxlYXNlKCk7Ci0gICAgICovCi0gICAgc3RhdGljIEJ1aWxkZXI8Tm9G
aWVsZHNTZXQ+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxk
c1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7Ci0gICAgfQotfTsKLQotLyogQ29uZmxpY3Rl
ZCBuYW1lcyBtYXkgY2F1c2UgZ2VuZXJhdGVkIGdldHRlcnMvc2V0dGVycyB0byBjbGFzaCB3aXRo
IGJ1aWx0LWluIEluc3BlY3Rvck9iamVjdCBtZXRob2RzLiAqLwotY2xhc3MgT2JqZWN0V2l0aFBy
b3BlcnR5TmFtZUNvbmZsaWN0cyA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKLXB1YmxpYzoK
LSAgICBlbnVtIHsKLSAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAotICAgICAgICBJbnRlZ2VyU2V0
ID0gMSA8PCAwLAotICAgICAgICBBcnJheVNldCA9IDEgPDwgMSwKLSAgICAgICAgU3RyaW5nU2V0
ID0gMSA8PCAyLAotICAgICAgICBWYWx1ZVNldCA9IDEgPDwgMywKLSAgICAgICAgT2JqZWN0U2V0
ID0gMSA8PCA0LAotICAgICAgICBBbGxGaWVsZHNTZXQgPSAoSW50ZWdlclNldCB8IEFycmF5U2V0
IHwgU3RyaW5nU2V0IHwgVmFsdWVTZXQgfCBPYmplY3RTZXQpCi0gICAgfTsKLQotICAgIHRlbXBs
YXRlPGludCBTVEFURT4KLSAgICBjbGFzcyBCdWlsZGVyIHsKLSAgICBwcml2YXRlOgotICAgICAg
ICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBtX3Jlc3VsdDsKLQotICAgICAgICB0ZW1wbGF0ZTxpbnQg
U1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4o
dGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyKFJlZjwvKk9iamVjdFdpdGhQcm9w
ZXJ0eU5hbWVDb25mbGljdHMqL0pTT046Ok9iamVjdD4mJiBvYmplY3QpCi0gICAgICAgICAgICA6
IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5p
dF9zdGF0ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZnJpZW5kIGNsYXNzIE9iamVjdFdpdGhQcm9w
ZXJ0eU5hbWVDb25mbGljdHM7Ci0gICAgcHVibGljOgotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBJbnRlZ2VyU2V0PiYgc2V0SW50ZWdlcihjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgICAgICB7
Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgSW50ZWdlclNldCksIHByb3Bl
cnR5X2ludGVnZXJfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmlu
ZygiaW50ZWdlciJfcywgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxJbnRl
Z2VyU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IEFycmF5U2V0
PiYgc2V0QXJyYXkoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIEFycmF5U2V0KSwgcHJvcGVydHlfYXJyYXlfYWxyZWFk
eV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygiYXJyYXkiX3MsIHZhbHVl
KTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8QXJyYXlTZXQ+KCk7Ci0gICAgICAgIH0K
LQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU3RyaW5nU2V0PiYgc2V0U3RyaW5nKGNvbnN0IFN0
cmluZyYgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBTdHJpbmdTZXQpLCBwcm9wZXJ0eV9zdHJpbmdfYWxyZWFkeV9zZXQpOwotICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldFN0cmluZygic3RyaW5nIl9zLCB2YWx1ZSk7Ci0gICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPFN0cmluZ1NldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBWYWx1ZVNldD4mIHNldFZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBWYWx1ZVNldCksIHBy
b3BlcnR5X3ZhbHVlX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJp
bmcoInZhbHVlIl9zLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFZhbHVl
U2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IE9iamVjdFNldD4m
IHNldE9iamVjdChjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBD
T01QSUxFX0FTU0VSVCghKFNUQVRFICYgT2JqZWN0U2V0KSwgcHJvcGVydHlfb2JqZWN0X2FscmVh
ZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm9iamVjdCJfcywgdmFs
dWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxPYmplY3RTZXQ+KCk7Ci0gICAgICAg
IH0KLQotICAgICAgICBSZWY8T2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cz4gcmVsZWFz
ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZp
ZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VS
VChzaXplb2YoT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cykgPT0gc2l6ZW9mKEpTT046
Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsKLQotICAgICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4g
anNvblJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7Ci0gICAgICAgICAgICBhdXRv
IHJlc3VsdCA9IFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPE9iamVjdFdpdGhQcm9wZXJ0
eU5hbWVDb25mbGljdHM+Kj4oJmpzb25SZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVybiByZXN1
bHQ7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgLyoKLSAgICAgKiBTeW50aGV0aWMgY29uc3Ry
dWN0b3I6Ci0gICAgICogUmVmPE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHM+IHJlc3Vs
dCA9IE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHM6OmNyZWF0ZSgpCi0gICAgICogICAg
IC5zZXRJbnRlZ2VyKC4uLikKLSAgICAgKiAgICAgLnNldEFycmF5KC4uLikKLSAgICAgKiAgICAg
LnNldFN0cmluZyguLi4pCi0gICAgICogICAgIC5zZXRWYWx1ZSguLi4pCi0gICAgICogICAgIC5z
ZXRPYmplY3QoLi4uKQotICAgICAqICAgICAucmVsZWFzZSgpOwotICAgICAqLwotICAgIHN0YXRp
YyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEJ1
aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOwotICAgIH0KLX07Ci0K
LX0gLy8gRGF0YWJhc2UKLQotbmFtZXNwYWNlIFRlc3QgewotY2xhc3MgUGFyYW1ldGVyQnVuZGxl
IDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewotcHVibGljOgotICAgIC8vIE5hbWVkIGFmdGVy
IHByb3BlcnR5IG5hbWUgJ2RpcmVjdGlvbmFsaXR5JyB3aGlsZSBnZW5lcmF0aW5nIFBhcmFtZXRl
ckJ1bmRsZS4KLSAgICBlbnVtIGNsYXNzIERpcmVjdGlvbmFsaXR5IHsKLSAgICAgICAgTFRSID0g
NCwKLSAgICAgICAgUlRMID0gNSwKLSAgICB9OyAvLyBlbnVtIGNsYXNzIERpcmVjdGlvbmFsaXR5
Ci0gICAgZW51bSB7Ci0gICAgICAgIE5vRmllbGRzU2V0ID0gMCwKLSAgICAgICAgRGlyZWN0aW9u
YWxpdHlTZXQgPSAxIDw8IDAsCi0gICAgICAgIEJ1dHRvbnNTZXQgPSAxIDw8IDEsCi0gICAgICAg
IENvbHVtbk5hbWVzU2V0ID0gMSA8PCAyLAotICAgICAgICBOb3Rlc1NldCA9IDEgPDwgMywKLSAg
ICAgICAgVGltZXN0YW1wU2V0ID0gMSA8PCA0LAotICAgICAgICBWYWx1ZXNTZXQgPSAxIDw8IDUs
Ci0gICAgICAgIFBheWxvYWRTZXQgPSAxIDw8IDYsCi0gICAgICAgIEVycm9yU2V0ID0gMSA8PCA3
LAotICAgICAgICBBbGxGaWVsZHNTZXQgPSAoRGlyZWN0aW9uYWxpdHlTZXQgfCBCdXR0b25zU2V0
IHwgQ29sdW1uTmFtZXNTZXQgfCBOb3Rlc1NldCB8IFRpbWVzdGFtcFNldCB8IFZhbHVlc1NldCB8
IFBheWxvYWRTZXQgfCBFcnJvclNldCkKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8aW50IFNUQVRF
PgotICAgIGNsYXNzIEJ1aWxkZXIgewotICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0cjxKU09O
OjpPYmplY3Q+IG1fcmVzdWx0OwotCi0gICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVy
PFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIEJ1aWxkZXIoUmVmPC8qUGFyYW1ldGVyQnVuZGxlKi9KU09OOjpPYmpl
Y3Q+JiYgb2JqZWN0KQotICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0
LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwotICAgICAgICB9Ci0gICAgICAg
IGZyaWVuZCBjbGFzcyBQYXJhbWV0ZXJCdW5kbGU7Ci0gICAgcHVibGljOgotCi0gICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBEaXJlY3Rpb25hbGl0eVNldD4mIHNldERpcmVjdGlvbmFsaXR5KERpcmVj
dGlvbmFsaXR5IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgRGlyZWN0aW9uYWxpdHlTZXQpLCBwcm9wZXJ0eV9kaXJlY3Rpb25hbGl0eV9hbHJl
YWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJkaXJlY3Rpb25hbGl0
eSJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZh
bHVlKHZhbHVlKSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPERpcmVjdGlvbmFsaXR5
U2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IEJ1dHRvbnNTZXQ+
JiBzZXRCdXR0b25zKFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpNb3VzZUJ1dHRvbj4+IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVCghKFNUQVRFICYgQnV0dG9uc1NldCksIHByb3BlcnR5X2J1dHRvbnNfYWxyZWFk
eV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJidXR0b25zIl9zLCB2YWx1
ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEJ1dHRvbnNTZXQ+KCk7Ci0gICAgICAg
IH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29sdW1uTmFtZXNTZXQ+JiBzZXRDb2x1bW5O
YW1lcyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiB2YWx1ZSkKLSAgICAgICAgewotICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENvbHVtbk5hbWVzU2V0KSwgcHJvcGVy
dHlfY29sdW1uTmFtZXNfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldEFy
cmF5KCJjb2x1bW5OYW1lcyJfcywgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0
ZTxDb2x1bW5OYW1lc1NldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBOb3Rlc1NldD4mIHNldE5vdGVzKGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBOb3Rlc1NldCksIHByb3BlcnR5X25v
dGVzX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm5vdGVz
Il9zLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE5vdGVzU2V0PigpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IFRpbWVzdGFtcFNldD4mIHNldFRp
bWVzdGFtcChkb3VibGUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBUaW1lc3RhbXBTZXQpLCBwcm9wZXJ0eV90aW1lc3RhbXBfYWxyZWFkeV9z
ZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCB2YWx1
ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFRpbWVzdGFtcFNldD4oKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBWYWx1ZXNTZXQ+JiBzZXRWYWx1ZXMoUmVm
UHRyPEpTT046Ok9iamVjdD4gdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKCEoU1RBVEUgJiBWYWx1ZXNTZXQpLCBwcm9wZXJ0eV92YWx1ZXNfYWxyZWFkeV9zZXQp
OwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdCgidmFsdWVzIl9zLCB2YWx1ZSk7Ci0g
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFZhbHVlc1NldD4oKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBQYXlsb2FkU2V0PiYgc2V0UGF5bG9hZChSZWZQdHI8SlNP
Tjo6VmFsdWU+IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgUGF5bG9hZFNldCksIHByb3BlcnR5X3BheWxvYWRfYWxyZWFkeV9zZXQpOwotICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCB2YWx1ZSk7Ci0gICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPFBheWxvYWRTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgRXJyb3JTZXQ+JiBzZXRFcnJvcihSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIEVycm9yU2V0KSwgcHJvcGVydHlfZXJyb3JfYWxyZWFk
eV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdCgiZXJyb3IiX3MsIHZhbHVl
KTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8RXJyb3JTZXQ+KCk7Ci0gICAgICAgIH0K
LQotICAgICAgICBSZWY8UGFyYW1ldGVyQnVuZGxlPiByZWxlYXNlKCkKLSAgICAgICAgewotICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNf
bm90X3JlYWR5KTsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihQYXJhbWV0ZXJC
dW5kbGUpID09IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7Ci0KLSAgICAgICAg
ICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25SZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVs
bCgpOwotICAgICAgICAgICAgYXV0byByZXN1bHQgPSBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0
PFJlZjxQYXJhbWV0ZXJCdW5kbGU+Kj4oJmpzb25SZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgLyoKLSAgICAgKiBTeW50aGV0aWMg
Y29uc3RydWN0b3I6Ci0gICAgICogUmVmPFBhcmFtZXRlckJ1bmRsZT4gcmVzdWx0ID0gUGFyYW1l
dGVyQnVuZGxlOjpjcmVhdGUoKQotICAgICAqICAgICAuc2V0RGlyZWN0aW9uYWxpdHkoLi4uKQot
ICAgICAqICAgICAuc2V0QnV0dG9ucyguLi4pCi0gICAgICogICAgIC5zZXRDb2x1bW5OYW1lcygu
Li4pCi0gICAgICogICAgIC5zZXROb3RlcyguLi4pCi0gICAgICogICAgIC5zZXRUaW1lc3RhbXAo
Li4uKQotICAgICAqICAgICAuc2V0VmFsdWVzKC4uLikKLSAgICAgKiAgICAgLnNldFBheWxvYWQo
Li4uKQotICAgICAqICAgICAuc2V0RXJyb3IoLi4uKQotICAgICAqICAgICAucmVsZWFzZSgpOwot
ICAgICAqLwotICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRl
KCkpOwotICAgIH0KLX07Ci0KLX0gLy8gVGVzdAotCi0KLQotbmFtZXNwYWNlIFRlc3RIZWxwZXJz
IHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgUHJvdG9jb2xFbnVtVHlwZT4KLU9wdGlvbmFsPFByb3Rv
Y29sRW51bVR5cGU+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZyhjb25zdCBTdHJpbmcmKTsKLQot
Ly8gRW51bXMgaW4gdGhlICdEYXRhYmFzZScgRG9tYWluCi10ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJ
bnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b24+IHBhcnNlRW51bVZhbHVl
RnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b24+KGNv
bnN0IFN0cmluZyYpOwotdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6Ok9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4gcGFyc2VF
bnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpPcHRpb25h
bFBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+KGNvbnN0IFN0cmluZyYpOwotdGVtcGxh
dGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlBhcmFtZXRlckJ1
bmRsZTo6RGlyZWN0aW9uYWxpdHk+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6
OlByb3RvY29sOjpEYXRhYmFzZTo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4oY29u
c3QgU3RyaW5nJik7Ci0KLS8vIEVudW1zIGluIHRoZSAnVGVzdCcgRG9tYWluCi10ZW1wbGF0ZTw+
Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRp
cmVjdGlvbmFsaXR5PiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6VGVzdDo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4oY29uc3QgU3RyaW5nJik7
Ci0KLX0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29s
Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi1uYW1lc3BhY2UgV1RGIHsKLQotdGVtcGxh
dGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwotCi0vLyBIYXNoIGRlY2xhcmF0aW9u
cyBpbiB0aGUgJ0RhdGFiYXNlJyBEb21haW4KLXRlbXBsYXRlPD4KLXN0cnVjdCBEZWZhdWx0SGFz
aDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b24+IHsKLSAgICB0eXBl
ZGVmIEludEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPiBI
YXNoOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bE9iamVjdHMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10
eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLQotI2lu
Y2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQot
bmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLW5hbWVzcGFj
ZSBUZXN0SGVscGVycyB7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBlbnVtX2NvbnN0YW50
X3ZhbHVlc1tdID0gewotICAgICJOb25lIiwKLSAgICAiTGVmdCIsCi0gICAgIk1pZGRsZSIsCi0g
ICAgIlJpZ2h0IiwKLSAgICAiTFRSIiwKLSAgICAiUlRMIiwKLX07Ci0KLVN0cmluZyBnZXRFbnVt
Q29uc3RhbnRWYWx1ZShpbnQgY29kZSkgewotICAgIHJldHVybiBlbnVtX2NvbnN0YW50X3ZhbHVl
c1tjb2RlXTsKLX0KLQotLy8gRW51bXMgaW4gdGhlICdEYXRhYmFzZScgRG9tYWluCi10ZW1wbGF0
ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b24+
IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6
TW91c2VCdXR0b24+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCi17Ci0gICAgc3RhdGlj
IGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0gewotICAgICAgICAoc2l6ZV90KUluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbjo6Tm9uZSwKLSAgICAgICAgKHNp
emVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b246OkxlZnQsCi0g
ICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9u
OjpNaWRkbGUsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6
Ok1vdXNlQnV0dG9uOjpSaWdodCwKLSAgICB9OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
NDsgKytpKQotICAgICAgICBpZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1
ZXNbY29uc3RhbnRWYWx1ZXNbaV1dKQotICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlBy
b3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b24pY29uc3RhbnRWYWx1ZXNbaV07Ci0KLSAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi10ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6
OlByb3RvY29sOjpEYXRhYmFzZTo6T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFs
aXR5PiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6Ok9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4oY29uc3QgU3RyaW5n
JiBwcm90b2NvbFN0cmluZykKLXsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFs
dWVzW10gPSB7Ci0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6
Ok9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eTo6TFRSLAotICAgICAgICAo
c2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpPcHRpb25hbFBhcmFtZXRlckJ1
bmRsZTo6RGlyZWN0aW9uYWxpdHk6OlJUTCwKLSAgICB9OwotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgMjsgKytpKQotICAgICAgICBpZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFu
dF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNbaV1dKQotICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlv
bmFsaXR5KWNvbnN0YW50VmFsdWVzW2ldOwotCi0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0K
LQotdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlBh
cmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJ
bnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25h
bGl0eT4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKLXsKLSAgICBzdGF0aWMgY29uc3Qg
c2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7Ci0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGF0YWJhc2U6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk6OkxUUiwK
LSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UGFyYW1ldGVy
QnVuZGxlOjpEaXJlY3Rpb25hbGl0eTo6UlRMLAotICAgIH07Ci0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCAyOyArK2kpCi0gICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0
YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCi0gICAgICAgICAgICByZXR1cm4gKEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5
KWNvbnN0YW50VmFsdWVzW2ldOwotCi0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotCi0v
LyBFbnVtcyBpbiB0aGUgJ1Rlc3QnIERvbWFpbgotdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVj
dG9yOjpQcm90b2NvbDo6VGVzdDo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4gcGFy
c2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlBhcmFtZXRl
ckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCi17
Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0gewotICAgICAgICAo
c2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0
aW9uYWxpdHk6OkxUUiwKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0
OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5OjpSVEwsCi0gICAgfTsKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IDI7ICsraSkKLSAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09
IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAgICAgICAgIHJl
dHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rp
b25hbGl0eSljb25zdGFudFZhbHVlc1tpXTsKLQotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19
Ci0KLQotfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKLQotCi0KLX0gLy8gbmFtZXNwYWNlIFBy
b3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbE9iamVjdHMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5k
RGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVj
bGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRl
QmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi0KLQot
bmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcu
aCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVk
ZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotCi1uYW1lc3BhY2UgSW5z
cGVjdG9yIHsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xDb25maWd1cmF0aW9uLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0
eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5o
PgotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2Ug
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0Ci1AZW5kCi0KLQotIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
bi5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2ltcG9ydCAiVGVzdFBy
b3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRl
cm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVu
dGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5z
cGVjdG9yOwotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgotewot
ICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci19Ci0KLS0g
KGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29u
dHJvbGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYg
KCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAg
ICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZv
aWQpZGVhbGxvYwotewotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotQGVuZAotCi0KLSMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRl
cm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBv
cnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQot
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2wuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4K
LQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgotCi0KLUBj
bGFzcyBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yOwotQGNsYXNzIFRlc3RQcm90b2NvbERhdGFi
YXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU7Ci1AY2xhc3MgVGVzdFByb3RvY29sRGF0YWJhc2VQ
YXJhbWV0ZXJCdW5kbGU7Ci1AY2xhc3MgVGVzdFByb3RvY29sRGF0YWJhc2VPYmplY3RXaXRoUHJv
cGVydHlOYW1lQ29uZmxpY3RzOwotQGNsYXNzIFRlc3RQcm90b2NvbERhdGFiYXNlRHVtbXlPYmpl
Y3Q7Ci1AY2xhc3MgVGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZTsKLQotdHlwZWRlZiBO
U19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sUGxhdGZvcm0pIHsKLSAgICBUZXN0UHJvdG9j
b2xQbGF0Zm9ybUFsbCwKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWMsCi0gICAgVGVz
dFByb3RvY29sUGxhdGZvcm1JT1MsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUywKLX07
Ci0KLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGF0YWJhc2VNb3Vz
ZUJ1dHRvbikgewotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VCdXR0b25Ob25lLAotICAg
IFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VCdXR0b25MZWZ0LAotICAgIFRlc3RQcm90b2NvbERh
dGFiYXNlTW91c2VCdXR0b25NaWRkbGUsCi0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VNb3VzZUJ1
dHRvblJpZ2h0LAotfTsKLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29s
RGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5KSB7Ci0gICAgVGVz
dFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5TFRS
LAotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rp
b25hbGl0eVJUTCwKLX07Ci0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2Nv
bERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHkpIHsKLSAgICBUZXN0UHJvdG9j
b2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5TFRSLAotICAgIFRlc3RQcm90
b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHlSVEwsCi19OwotCi10eXBl
ZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlRGly
ZWN0aW9uYWxpdHkpIHsKLSAgICBUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlRGlyZWN0
aW9uYWxpdHlMVFIsCi0gICAgVGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZURpcmVjdGlv
bmFsaXR5UlRMLAotfTsKLQotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIp
KSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciA6IFJXSVByb3RvY29sSlNP
Tk9iamVjdAotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5T
U3RyaW5nICosIGlkPiAqKXBheWxvYWQ7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2Nv
bE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKLS0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBjb2RlOihpbnQpY29kZTsK
LS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqbWVz
c2FnZTsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCBj
b2RlOwotQGVuZAotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBp
bnRlcmZhY2UgVGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZSA6IFJX
SVByb3RvY29sSlNPTk9iamVjdAotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNE
aWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQ7Ci0tIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsK
LS8qIG9wdGlvbmFsICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU0FycmF5Lyo8TlNT
dHJpbmc+Ki8gKmNvbHVtbk5hbWVzOwotLyogb3B0aW9uYWwgKi8gQHByb3BlcnR5IChub25hdG9t
aWMsIGNvcHkpIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqYnV0dG9uczsKLS8qIG9wdGlvbmFsICov
IEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9u
YWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSBkaXJlY3Rpb25hbGl0eTsKLS8qIG9wdGlv
bmFsICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqbm90ZXM7Ci0vKiBv
cHRpb25hbCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBkb3VibGUgdGltZXN0YW1w
OwotLyogb3B0aW9uYWwgKi8gQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgUldJUHJvdG9j
b2xKU09OT2JqZWN0ICp2YWx1ZXM7Ci0vKiBvcHRpb25hbCAqLyBAcHJvcGVydHkgKG5vbmF0b21p
YywgcmV0YWluKSBSV0lQcm90b2NvbEpTT05PYmplY3QgKnBheWxvYWQ7Ci0vKiBvcHRpb25hbCAq
LyBAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluKSBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9y
ICplcnJvcjsKLS8qIG9wdGlvbmFsICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU0Fy
cmF5Lyo8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4qLyAqZXJyb3JMaXN0OwotQGVuZAotCi1f
X2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFBy
b3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGUgOiBSV0lQcm90b2NvbEpTT05PYmplY3QKLS0g
KGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBp
ZD4gKilwYXlsb2FkOwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJX
SVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhDb2x1bW5OYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMgYnV0dG9u
czooTlNBcnJheS8qPE5TU3RyaW5nPiovICopYnV0dG9ucyBkaXJlY3Rpb25hbGl0eTooVGVzdFBy
b3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSlkaXJlY3Rpb25hbGl0
eSBub3RlczooTlNTdHJpbmcgKilub3RlcyB0aW1lc3RhbXA6KGRvdWJsZSl0aW1lc3RhbXAgdmFs
dWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKil2YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xK
U09OT2JqZWN0ICopcGF5bG9hZCBlcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKWVy
cm9yIGVycm9yTGlzdDooTlNBcnJheS8qPFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I+Ki8gKill
cnJvckxpc3Q7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNB
cnJheS8qPE5TU3RyaW5nPiovICpjb2x1bW5OYW1lczsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0
eSAobm9uYXRvbWljLCBjb3B5KSBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmJ1dHRvbnM7Ci0vKiBy
ZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBUZXN0UHJvdG9jb2xEYXRh
YmFzZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5IGRpcmVjdGlvbmFsaXR5OwotLyogcmVx
dWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICpub3RlczsKLS8q
IHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGRvdWJsZSB0aW1lc3Rh
bXA7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluKSBSV0lQcm90
b2NvbEpTT05PYmplY3QgKnZhbHVlczsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRv
bWljLCByZXRhaW4pIFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5bG9hZDsKLS8qIHJlcXVpcmVk
ICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIFRlc3RQcm90b2NvbERhdGFiYXNlRXJy
b3IgKmVycm9yOwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5T
QXJyYXkvKjxUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yPiovICplcnJvckxpc3Q7Ci1AZW5kCi0K
LV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0
UHJvdG9jb2xEYXRhYmFzZU9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHMgOiBSV0lQcm90
b2NvbEpTT05PYmplY3QKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlv
bmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkOwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
UHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7Ci0tIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhJbnRlZ2VyOihOU1N0cmluZyAqKWludGVnZXIgYXJyYXk6KE5T
U3RyaW5nICopYXJyYXkgc3RyaW5nOihOU1N0cmluZyAqKXN0cmluZyB2YWx1ZTooTlNTdHJpbmcg
Kil2YWx1ZSBvYmplY3Q6KE5TU3RyaW5nICopb2JqZWN0OwotLyogcmVxdWlyZWQgKi8gQHByb3Bl
cnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICppbnRlZ2VyOwotLyogcmVxdWlyZWQgKi8g
QHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICphcnJheTsKLS8qIHJlcXVpcmVk
ICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqc3RyaW5nOwotLyogcmVx
dWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICp2YWx1ZTsKLS8q
IHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqb2JqZWN0
OwotQGVuZAotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRl
cmZhY2UgVGVzdFByb3RvY29sRGF0YWJhc2VEdW1teU9iamVjdCA6IFJXSVByb3RvY29sSlNPTk9i
amVjdAotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3Ry
aW5nICosIGlkPiAqKXBheWxvYWQ7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9i
amVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKLUBlbmQKLQotX19hdHRy
aWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2Nv
bFRlc3RQYXJhbWV0ZXJCdW5kbGUgOiBSV0lQcm90b2NvbEpTT05PYmplY3QKLS0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXls
b2FkOwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29s
SlNPTk9iamVjdCAqKWpzb25PYmplY3Q7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhEaXJlY3Rp
b25hbGl0eTooVGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5KWRp
cmVjdGlvbmFsaXR5IGJ1dHRvbnM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWJ1dHRvbnMgY29s
dW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWNvbHVtbk5hbWVzIG5vdGVzOihOU1N0
cmluZyAqKW5vdGVzIHRpbWVzdGFtcDooZG91YmxlKXRpbWVzdGFtcCB2YWx1ZXM6KFJXSVByb3Rv
Y29sSlNPTk9iamVjdCAqKXZhbHVlcyBwYXlsb2FkOihSV0lQcm90b2NvbEpTT05PYmplY3QgKilw
YXlsb2FkIGVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICopZXJyb3I7Ci0vKiByZXF1
aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBUZXN0UHJvdG9jb2xUZXN0UGFy
YW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHkgZGlyZWN0aW9uYWxpdHk7Ci0vKiByZXF1aXJlZCAq
LyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNBcnJheS8qPE5TU3RyaW5nPiovICpidXR0
b25zOwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TQXJyYXkv
KjxOU1N0cmluZz4qLyAqY29sdW1uTmFtZXM7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5v
bmF0b21pYywgY29weSkgTlNTdHJpbmcgKm5vdGVzOwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5
IChub25hdG9taWMsIGFzc2lnbikgZG91YmxlIHRpbWVzdGFtcDsKLS8qIHJlcXVpcmVkICovIEBw
cm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIFJXSVByb3RvY29sSlNPTk9iamVjdCAqdmFsdWVz
OwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgUldJUHJvdG9j
b2xKU09OT2JqZWN0ICpwYXlsb2FkOwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9t
aWMsIHJldGFpbikgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqZXJyb3I7Ci1AZW5kCi0KLQot
Ci0KLQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxp
dHlPYmplY3RzLmg+Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0j
aW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgotI2ltcG9ydCA8SmF2YVNj
cmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDx3dGYv
SlNPTlZhbHVlcy5oPgotCi0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFs
LmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlw
ZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBv
cnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJy
YXlDb252ZXJzaW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdGVtcGxhdGU8dHlw
ZW5hbWUgT2JqQ0VudW1UeXBlPgotT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xT
dHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0
cmluZyhUZXN0UHJvdG9jb2xQbGF0Zm9ybSB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsK
LSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOgotICAgICAgICByZXR1cm4gImFsbCJf
czsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzoKLSAgICAgICAgcmV0dXJu
ICJnZW5lcmljIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1JT1M6Ci0gICAgICAg
IHJldHVybiAiaW9zIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzoKLSAg
ICAgICAgcmV0dXJuICJtYWNvcyJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBP
cHRpb25hbDxUZXN0UHJvdG9jb2xQbGF0Zm9ybT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0
cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJhbGwiKQotICAgICAgICByZXR1cm4g
VGVzdFByb3RvY29sUGxhdGZvcm1BbGw7Ci0gICAgaWYgKHZhbHVlID09ICJnZW5lcmljIikKLSAg
ICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzsKLSAgICBpZiAodmFsdWUg
PT0gImlvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzsKLSAgICBp
ZiAodmFsdWUgPT0gIm1hY29zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3Jt
TWFjT1M7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotCi1pbmxpbmUgU3RyaW5nIHRv
UHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sRGF0YWJhc2VNb3VzZUJ1dHRvbiB2YWx1ZSkKLXsK
LSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VC
dXR0b25Ob25lOgotICAgICAgICByZXR1cm4gIk5vbmUiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9j
b2xEYXRhYmFzZU1vdXNlQnV0dG9uTGVmdDoKLSAgICAgICAgcmV0dXJuICJMZWZ0Il9zOwotICAg
IGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VNb3VzZUJ1dHRvbk1pZGRsZToKLSAgICAgICAgcmV0
dXJuICJNaWRkbGUiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9u
UmlnaHQ6Ci0gICAgICAgIHJldHVybiAiUmlnaHQiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+
Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VNb3VzZUJ1dHRvbj4gZnJvbVBy
b3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJO
b25lIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VCdXR0b25Ob25l
OwotICAgIGlmICh2YWx1ZSA9PSAiTGVmdCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xE
YXRhYmFzZU1vdXNlQnV0dG9uTGVmdDsKLSAgICBpZiAodmFsdWUgPT0gIk1pZGRsZSIpCi0gICAg
ICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9uTWlkZGxlOwotICAgIGlm
ICh2YWx1ZSA9PSAiUmlnaHQiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VN
b3VzZUJ1dHRvblJpZ2h0OwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLWlubGluZSBT
dHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1l
dGVyQnVuZGxlRGlyZWN0aW9uYWxpdHkgdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0g
ICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlRGlyZWN0
aW9uYWxpdHlMVFI6Ci0gICAgICAgIHJldHVybiAiTFRSIl9zOwotICAgIGNhc2UgVGVzdFByb3Rv
Y29sRGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5UlRMOgotICAg
ICAgICByZXR1cm4gIlJUTCJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRp
b25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9u
YWxpdHk+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlm
ICh2YWx1ZSA9PSAiTFRSIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlT3B0
aW9uYWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eUxUUjsKLSAgICBpZiAodmFsdWUgPT0g
IlJUTCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1l
dGVyQnVuZGxlRGlyZWN0aW9uYWxpdHlSVEw7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0K
LQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbERhdGFiYXNlUGFy
YW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHkgdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7
Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFs
aXR5TFRSOgotICAgICAgICByZXR1cm4gIkxUUiJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERh
dGFiYXNlUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHlSVEw6Ci0gICAgICAgIHJldHVybiAi
UlRMIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90
b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHk+IGZyb21Qcm90b2NvbFN0
cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiTFRSIikKLSAg
ICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9u
YWxpdHlMVFI7Ci0gICAgaWYgKHZhbHVlID09ICJSVEwiKQotICAgICAgICByZXR1cm4gVGVzdFBy
b3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eVJUTDsKLSAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwotfQotCi0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhU
ZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHkgdmFsdWUpCi17Ci0g
ICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVu
ZGxlRGlyZWN0aW9uYWxpdHlMVFI6Ci0gICAgICAgIHJldHVybiAiTFRSIl9zOwotICAgIGNhc2Ug
VGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5UlRMOgotICAgICAg
ICByZXR1cm4gIlJUTCJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25h
bDxUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHk+IGZyb21Qcm90
b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiTFRS
IikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rp
b25hbGl0eUxUUjsKLSAgICBpZiAodmFsdWUgPT0gIlJUTCIpCi0gICAgICAgIHJldHVybiBUZXN0
UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHlSVEw7Ci0gICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJv
dG9jb2xUeXBlUGFyc2VyLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09O
T2JqZWN0UHJpdmF0ZS5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW50ZXJm
YWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoRGF0YWJhc2VEb21haW4pCi0KLSsgKHZv
aWQpX3BhcnNlRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKiopb3V0VmFsdWUgZnJv
bVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZUVycm9yTGlzdDooTlNBcnJheS8q
PFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlk
KXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZU1vdXNlQnV0dG9uOihOU051bWJlciAqKilvdXRWYWx1
ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLSsgKHZvaWQpX3BhcnNlT3B0aW9uYWxQYXJhbWV0
ZXJCdW5kbGU6KFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUgKiop
b3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZVBhcmFtZXRl
ckJ1bmRsZTooVGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGUgKiopb3V0VmFsdWUg
ZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZU9iamVjdFdpdGhQcm9wZXJ0
eU5hbWVDb25mbGljdHM6KFRlc3RQcm90b2NvbERhdGFiYXNlT2JqZWN0V2l0aFByb3BlcnR5TmFt
ZUNvbmZsaWN0cyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLSsgKHZvaWQp
X3BhcnNlRHVtbXlPYmplY3Q6KFRlc3RQcm90b2NvbERhdGFiYXNlRHVtbXlPYmplY3QgKiopb3V0
VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0KLUBlbmQKLUBpbnRlcmZhY2UgVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zIChUZXN0RG9tYWluKQotCi0rICh2b2lkKV9wYXJzZVBhcmFt
ZXRlckJ1bmRsZTooVGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZSAqKilvdXRWYWx1ZSBm
cm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zIChEYXRhYmFzZURvbWFpbikKLQotKyAodm9pZClfcGFyc2VF
cnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDoo
aWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwg
W05TRGljdGlvbmFyeSBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sRGF0
YWJhc2VFcnJvciBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOwotfQotCi0rICh2b2lk
KV9wYXJzZUVycm9yTGlzdDooTlNBcnJheS8qPFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I+Ki8g
Kiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJ
T05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0FycmF5Lyo8VGVzdFByb3RvY29sRGF0YWJhc2VF
cnJvcj4qLyBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IChOU0FycmF5Lyo8VGVzdFByb3RvY29s
RGF0YWJhc2VFcnJvcj4qLyAqKXBheWxvYWQ7Ci19Ci0KLSsgKHZvaWQpX3BhcnNlTW91c2VCdXR0
b246KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsK
LSAgICBPcHRpb25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9uPiByZXN1bHQgPSBJ
bnNwZWN0b3I6OmZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0
dG9uPihwYXlsb2FkKTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9FTlVNX1ZBTFVFKHJl
c3VsdCwgQCJNb3VzZUJ1dHRvbiIpOwotICAgICpvdXRWYWx1ZSA9IEAocmVzdWx0LnZhbHVlKCkp
OwotfQotCi0rICh2b2lkKV9wYXJzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOihUZXN0UHJvdG9j
b2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlICoqKW91dFZhbHVlIGZyb21QYXlsb2Fk
OihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2Fk
LCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xE
YXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5
bG9hZF07Ci19Ci0KLSsgKHZvaWQpX3BhcnNlUGFyYW1ldGVyQnVuZGxlOihUZXN0UHJvdG9jb2xE
YXRhYmFzZVBhcmFtZXRlckJ1bmRsZSAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9h
ZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlv
bmFyeSBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sRGF0YWJhc2VQYXJh
bWV0ZXJCdW5kbGUgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKLX0KLQotKyAodm9p
ZClfcGFyc2VPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzOihUZXN0UHJvdG9jb2xEYXRh
YmFzZU9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHMgKiopb3V0VmFsdWUgZnJvbVBheWxv
YWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxv
YWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2Nv
bERhdGFiYXNlT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cyBhbGxvY10gaW5pdFdpdGhQ
YXlsb2FkOnBheWxvYWRdOwotfQotCi0rICh2b2lkKV9wYXJzZUR1bW15T2JqZWN0OihUZXN0UHJv
dG9jb2xEYXRhYmFzZUR1bW15T2JqZWN0ICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXls
b2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNEaWN0
aW9uYXJ5IGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xEYXRhYmFzZUR1
bW15T2JqZWN0IGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07Ci19Ci0KLUBlbmQKLUBp
bXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFRlc3REb21haW4pCi0K
LSsgKHZvaWQpX3BhcnNlUGFyYW1ldGVyQnVuZGxlOihUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVy
QnVuZGxlICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1df
RVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7Ci0g
ICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlIGFsbG9jXSBp
bml0V2l0aFBheWxvYWQ6cGF5bG9hZF07Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sVHlwZXMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xh
cmF0aW9uLW9iamVjdC10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAi
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJ
UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4K
LSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7
Ci0KLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IKLQotLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcg
KiwgaWQ+ICopcGF5bG9hZAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAg
ICAgICByZXR1cm4gbmlsOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9Q
RVJUWShwYXlsb2FkW0AibWVzc2FnZSJdLCBAIm1lc3NhZ2UiKTsKLSAgICBzZWxmLm1lc3NhZ2Ug
PSBwYXlsb2FkW0AibWVzc2FnZSJdOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJF
RF9QUk9QRVJUWShwYXlsb2FkW0AiY29kZSJdLCBAImNvZGUiKTsKLSAgICBzZWxmLmNvZGUgPSBb
cGF5bG9hZFtAImNvZGUiXSBpbnRlZ2VyVmFsdWVdOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0t
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2Jq
ZWN0ICopb2JqZWN0Ci17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEpTT05PYmpl
Y3Q6W29iamVjdCB0b0pTT05PYmplY3RdLmdldCgpXSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0K
LSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTWVzc2FnZToo
TlNTdHJpbmcgKiltZXNzYWdlIGNvZGU6KGludCljb2RlCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtz
dXBlciBpbml0XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBUSFJPV19FWENFUFRJT05f
Rk9SX1JFUVVJUkVEX1BST1BFUlRZKG1lc3NhZ2UsIEAibWVzc2FnZSIpOwotCi0gICAgc2VsZi5t
ZXNzYWdlID0gbWVzc2FnZTsKLSAgICBzZWxmLmNvZGUgPSBjb2RlOwotCi0gICAgcmV0dXJuIHNl
bGY7Ci19Ci0KLS0gKHZvaWQpc2V0TWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlCi17Ci0gICAg
W3N1cGVyIHNldFN0cmluZzptZXNzYWdlIGZvcktleTpAIm1lc3NhZ2UiXTsKLX0KLQotLSAoTlNT
dHJpbmcgKiltZXNzYWdlCi17Ci0gICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJtZXNz
YWdlIl07Ci19Ci0KLS0gKHZvaWQpc2V0Q29kZTooaW50KWNvZGUKLXsKLSAgICBbc3VwZXIgc2V0
SW50ZWdlcjpjb2RlIGZvcktleTpAImNvZGUiXTsKLX0KLQotLSAoaW50KWNvZGUKLXsKLSAgICBy
ZXR1cm4gW3N1cGVyIGludGVnZXJGb3JLZXk6QCJjb2RlIl07Ci19Ci0KLUBlbmQKLQotQGltcGxl
bWVudGF0aW9uIFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUKLQot
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNT
dHJpbmcgKiwgaWQ+ICopcGF5bG9hZAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0p
KQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgc2VsZi5jb2x1bW5OYW1lcyA9IHBheWxvYWRb
QCJjb2x1bW5OYW1lcyJdOwotCi0gICAgc2VsZi5idXR0b25zID0gcGF5bG9hZFtAImJ1dHRvbnMi
XTsKLQotICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJC
dW5kbGVEaXJlY3Rpb25hbGl0eT4gZGlyZWN0aW9uYWxpdHkgPSBmcm9tUHJvdG9jb2xTdHJpbmc8
VGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5
PihwYXlsb2FkW0AiZGlyZWN0aW9uYWxpdHkiXSk7Ci0gICAgaWYgKGRpcmVjdGlvbmFsaXR5KQot
ICAgICAgICBzZWxmLmRpcmVjdGlvbmFsaXR5ID0gZGlyZWN0aW9uYWxpdHkudmFsdWUoKTsKLQot
ICAgIHNlbGYubm90ZXMgPSBwYXlsb2FkW0Aibm90ZXMiXTsKLQotICAgIHNlbGYudGltZXN0YW1w
ID0gW3BheWxvYWRbQCJ0aW1lc3RhbXAiXSBkb3VibGVWYWx1ZV07Ci0KLSAgICBzZWxmLnZhbHVl
cyA9IHBheWxvYWRbQCJ2YWx1ZXMiXTsKLQotICAgIHNlbGYucGF5bG9hZCA9IHBheWxvYWRbQCJw
YXlsb2FkIl07Ci0KLSAgICBzZWxmLmVycm9yID0gW1tUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9y
IGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZFtAImVycm9yIl1dOwotCi0gICAgc2VsZi5l
cnJvckxpc3QgPSBvYmpjQXJyYXlGcm9tUGF5bG9hZDxUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9y
PihwYXlsb2FkW0AiZXJyb3JMaXN0Il0pOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0tIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICop
b2JqZWN0Ci17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEpTT05PYmplY3Q6W29i
amVjdCB0b0pTT05PYmplY3RdLmdldCgpXSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBy
ZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClzZXRDb2x1bW5OYW1lczooTlNBcnJheS8qPE5TU3Ry
aW5nPiovICopY29sdW1uTmFtZXMKLXsKLSAgICBbc3VwZXIgc2V0SlNPTkFycmF5OnRvSlNPTlN0
cmluZ0FycmF5KGNvbHVtbk5hbWVzKSBmb3JLZXk6QCJjb2x1bW5OYW1lcyJdOwotfQotCi0tIChO
U0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcwotewotICAgIHJldHVybiB0b09iakNT
dHJpbmdBcnJheShbc3VwZXIgSlNPTkFycmF5Rm9yS2V5OkAiY29sdW1uTmFtZXMiXSk7Ci19Ci0K
LS0gKHZvaWQpc2V0QnV0dG9uczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopYnV0dG9ucwotewot
ICAgIFtzdXBlciBzZXRKU09OQXJyYXk6dG9KU09OU3RyaW5nQXJyYXkoYnV0dG9ucykgZm9yS2V5
OkAiYnV0dG9ucyJdOwotfQotCi0tIChOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilidXR0b25zCi17
Ci0gICAgcmV0dXJuIHRvT2JqQ1N0cmluZ0FycmF5KFtzdXBlciBKU09OQXJyYXlGb3JLZXk6QCJi
dXR0b25zIl0pOwotfQotCi0tICh2b2lkKXNldERpcmVjdGlvbmFsaXR5OihUZXN0UHJvdG9jb2xE
YXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHkpZGlyZWN0aW9uYWxp
dHkKLXsKLSAgICBbc3VwZXIgc2V0U3RyaW5nOnRvUHJvdG9jb2xTdHJpbmcoZGlyZWN0aW9uYWxp
dHkpIGZvcktleTpAImRpcmVjdGlvbmFsaXR5Il07Ci19Ci0KLS0gKFRlc3RQcm90b2NvbERhdGFi
YXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSlkaXJlY3Rpb25hbGl0eQot
ewotICAgIHJldHVybiBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sRGF0YWJhc2VPcHRp
b25hbFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5Pihbc3VwZXIgc3RyaW5nRm9yS2V5OkAi
ZGlyZWN0aW9uYWxpdHkiXSkudmFsdWUoKTsKLX0KLQotLSAodm9pZClzZXROb3RlczooTlNTdHJp
bmcgKilub3RlcwotewotICAgIFtzdXBlciBzZXRTdHJpbmc6bm90ZXMgZm9yS2V5OkAibm90ZXMi
XTsKLX0KLQotLSAoTlNTdHJpbmcgKilub3RlcwotewotICAgIHJldHVybiBbc3VwZXIgc3RyaW5n
Rm9yS2V5OkAibm90ZXMiXTsKLX0KLQotLSAodm9pZClzZXRUaW1lc3RhbXA6KGRvdWJsZSl0aW1l
c3RhbXAKLXsKLSAgICBbc3VwZXIgc2V0RG91YmxlOnRpbWVzdGFtcCBmb3JLZXk6QCJ0aW1lc3Rh
bXAiXTsKLX0KLQotLSAoZG91YmxlKXRpbWVzdGFtcAotewotICAgIHJldHVybiBbc3VwZXIgZG91
YmxlRm9yS2V5OkAidGltZXN0YW1wIl07Ci19Ci0KLS0gKHZvaWQpc2V0VmFsdWVzOihSV0lQcm90
b2NvbEpTT05PYmplY3QgKil2YWx1ZXMKLXsKLSAgICBbc3VwZXIgc2V0T2JqZWN0OnZhbHVlcyBm
b3JLZXk6QCJ2YWx1ZXMiXTsKLX0KLQotLSAoUldJUHJvdG9jb2xKU09OT2JqZWN0ICopdmFsdWVz
Ci17Ci0gICAgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvYmplY3QgPSBbc3VwZXIgb2JqZWN0Rm9y
S2V5OkAidmFsdWVzIl07Ci0gICAgaWYgKCFvYmplY3QpCi0gICAgICAgIHJldHVybiBuaWw7Ci0g
ICAgcmV0dXJuIFtbUldJUHJvdG9jb2xKU09OT2JqZWN0IGFsbG9jXSBpbml0V2l0aEpTT05PYmpl
Y3Q6W1tzdXBlciBvYmplY3RGb3JLZXk6QCJ2YWx1ZXMiXSB0b0pTT05PYmplY3RdLmdldCgpXTsK
LX0KLQotLSAodm9pZClzZXRQYXlsb2FkOihSV0lQcm90b2NvbEpTT05PYmplY3QgKilwYXlsb2Fk
Ci17Ci0gICAgW3N1cGVyIHNldE9iamVjdDpwYXlsb2FkIGZvcktleTpAInBheWxvYWQiXTsKLX0K
LQotLSAoUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZAotewotICAgIFJXSVByb3RvY29s
SlNPTk9iamVjdCAqb2JqZWN0ID0gW3N1cGVyIG9iamVjdEZvcktleTpAInBheWxvYWQiXTsKLSAg
ICBpZiAoIW9iamVjdCkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4gW1tSV0lQcm90
b2NvbEpTT05PYmplY3QgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDpbW3N1cGVyIG9iamVjdEZv
cktleTpAInBheWxvYWQiXSB0b0pTT05PYmplY3RdLmdldCgpXTsKLX0KLQotLSAodm9pZClzZXRF
cnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKWVycm9yCi17Ci0gICAgW3N1cGVyIHNl
dE9iamVjdDplcnJvciBmb3JLZXk6QCJlcnJvciJdOwotfQotCi0tIChUZXN0UHJvdG9jb2xEYXRh
YmFzZUVycm9yICopZXJyb3IKLXsKLSAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9iamVjdCA9
IFtzdXBlciBvYmplY3RGb3JLZXk6QCJlcnJvciJdOwotICAgIGlmICghb2JqZWN0KQotICAgICAg
ICByZXR1cm4gbmlsOwotICAgIHJldHVybiBbW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgYWxs
b2NdIGluaXRXaXRoSlNPTk9iamVjdDpbW3N1cGVyIG9iamVjdEZvcktleTpAImVycm9yIl0gdG9K
U09OT2JqZWN0XS5nZXQoKV07Ci19Ci0KLS0gKHZvaWQpc2V0RXJyb3JMaXN0OihOU0FycmF5Lyo8
VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4qLyAqKWVycm9yTGlzdAotewotICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfQkFEX1RZUEVfSU5fQVJSQVkoZXJyb3JMaXN0LCBbVGVzdFByb3RvY29sRGF0
YWJhc2VFcnJvciBjbGFzc10pOwotICAgIFtzdXBlciBzZXRKU09OQXJyYXk6dG9KU09OT2JqZWN0
QXJyYXkoZXJyb3JMaXN0KSBmb3JLZXk6QCJlcnJvckxpc3QiXTsKLX0KLQotLSAoTlNBcnJheS8q
PFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I+Ki8gKillcnJvckxpc3QKLXsKLSAgICByZXR1cm4g
dG9PYmpDQXJyYXk8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4oW3N1cGVyIEpTT05BcnJheUZv
cktleTpAImVycm9yTGlzdCJdKTsKLX0KLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gVGVzdFBy
b3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGUKLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
UGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZAot
ewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwot
Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiY29s
dW1uTmFtZXMiXSwgQCJjb2x1bW5OYW1lcyIpOwotICAgIHNlbGYuY29sdW1uTmFtZXMgPSBwYXls
b2FkW0AiY29sdW1uTmFtZXMiXTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURf
UFJPUEVSVFkocGF5bG9hZFtAImJ1dHRvbnMiXSwgQCJidXR0b25zIik7Ci0gICAgc2VsZi5idXR0
b25zID0gcGF5bG9hZFtAImJ1dHRvbnMiXTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVR
VUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImRpcmVjdGlvbmFsaXR5Il0sIEAiZGlyZWN0aW9uYWxp
dHkiKTsKLSAgICBPcHRpb25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZURp
cmVjdGlvbmFsaXR5PiBkaXJlY3Rpb25hbGl0eSA9IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJv
dG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5PihwYXlsb2FkW0AiZGly
ZWN0aW9uYWxpdHkiXSk7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfRU5VTV9WQUxVRShk
aXJlY3Rpb25hbGl0eSwgQCJkaXJlY3Rpb25hbGl0eSIpOwotICAgIHNlbGYuZGlyZWN0aW9uYWxp
dHkgPSBkaXJlY3Rpb25hbGl0eS52YWx1ZSgpOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9S
RVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0Aibm90ZXMiXSwgQCJub3RlcyIpOwotICAgIHNlbGYu
bm90ZXMgPSBwYXlsb2FkW0Aibm90ZXMiXTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVR
VUlSRURfUFJPUEVSVFkocGF5bG9hZFtAInRpbWVzdGFtcCJdLCBAInRpbWVzdGFtcCIpOwotICAg
IHNlbGYudGltZXN0YW1wID0gW3BheWxvYWRbQCJ0aW1lc3RhbXAiXSBkb3VibGVWYWx1ZV07Ci0K
LSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJ2YWx1
ZXMiXSwgQCJ2YWx1ZXMiKTsKLSAgICBzZWxmLnZhbHVlcyA9IHBheWxvYWRbQCJ2YWx1ZXMiXTsK
LQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAInBh
eWxvYWQiXSwgQCJwYXlsb2FkIik7Ci0gICAgc2VsZi5wYXlsb2FkID0gcGF5bG9hZFtAInBheWxv
YWQiXTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9h
ZFtAImVycm9yIl0sIEAiZXJyb3IiKTsKLSAgICBzZWxmLmVycm9yID0gW1tUZXN0UHJvdG9jb2xE
YXRhYmFzZUVycm9yIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZFtAImVycm9yIl1dOwot
Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiZXJy
b3JMaXN0Il0sIEAiZXJyb3JMaXN0Iik7Ci0gICAgc2VsZi5lcnJvckxpc3QgPSBvYmpjQXJyYXlG
cm9tUGF5bG9hZDxUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yPihwYXlsb2FkW0AiZXJyb3JMaXN0
Il0pOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90
b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopb2JqZWN0Ci17Ci0gICAgaWYgKCEo
c2VsZiA9IFtzdXBlciBpbml0V2l0aEpTT05PYmplY3Q6W29iamVjdCB0b0pTT05PYmplY3RdLmdl
dCgpXSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoQ29sdW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAq
KWNvbHVtbk5hbWVzIGJ1dHRvbnM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWJ1dHRvbnMgZGly
ZWN0aW9uYWxpdHk6KFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9u
YWxpdHkpZGlyZWN0aW9uYWxpdHkgbm90ZXM6KE5TU3RyaW5nICopbm90ZXMgdGltZXN0YW1wOihk
b3VibGUpdGltZXN0YW1wIHZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopdmFsdWVzIHBh
eWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQgZXJyb3I6KFRlc3RQcm90b2Nv
bERhdGFiYXNlRXJyb3IgKillcnJvciBlcnJvckxpc3Q6KE5TQXJyYXkvKjxUZXN0UHJvdG9jb2xE
YXRhYmFzZUVycm9yPiovICopZXJyb3JMaXN0Ci17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBp
bml0XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JF
UVVJUkVEX1BST1BFUlRZKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7Ci0gICAgVEhST1df
RVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShidXR0b25zLCBAImJ1dHRvbnMiKTsKLSAg
ICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKG5vdGVzLCBAIm5vdGVzIik7
Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWSh2YWx1ZXMsIEAidmFs
dWVzIik7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2Fk
LCBAInBheWxvYWQiKTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZ
KGVycm9yLCBAImVycm9yIik7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9Q
RVJUWShlcnJvckxpc3QsIEAiZXJyb3JMaXN0Iik7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9C
QURfVFlQRV9JTl9BUlJBWShlcnJvckxpc3QsIFtUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGNs
YXNzXSk7Ci0KLSAgICBzZWxmLmNvbHVtbk5hbWVzID0gY29sdW1uTmFtZXM7Ci0gICAgc2VsZi5i
dXR0b25zID0gYnV0dG9uczsKLSAgICBzZWxmLmRpcmVjdGlvbmFsaXR5ID0gZGlyZWN0aW9uYWxp
dHk7Ci0gICAgc2VsZi5ub3RlcyA9IG5vdGVzOwotICAgIHNlbGYudGltZXN0YW1wID0gdGltZXN0
YW1wOwotICAgIHNlbGYudmFsdWVzID0gdmFsdWVzOwotICAgIHNlbGYucGF5bG9hZCA9IHBheWxv
YWQ7Ci0gICAgc2VsZi5lcnJvciA9IGVycm9yOwotICAgIHNlbGYuZXJyb3JMaXN0ID0gZXJyb3JM
aXN0OwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpc2V0Q29sdW1uTmFtZXM6KE5T
QXJyYXkvKjxOU1N0cmluZz4qLyAqKWNvbHVtbk5hbWVzCi17Ci0gICAgW3N1cGVyIHNldEpTT05B
cnJheTp0b0pTT05TdHJpbmdBcnJheShjb2x1bW5OYW1lcykgZm9yS2V5OkAiY29sdW1uTmFtZXMi
XTsKLX0KLQotLSAoTlNBcnJheS8qPE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMKLXsKLSAgICBy
ZXR1cm4gdG9PYmpDU3RyaW5nQXJyYXkoW3N1cGVyIEpTT05BcnJheUZvcktleTpAImNvbHVtbk5h
bWVzIl0pOwotfQotCi0tICh2b2lkKXNldEJ1dHRvbnM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAq
KWJ1dHRvbnMKLXsKLSAgICBbc3VwZXIgc2V0SlNPTkFycmF5OnRvSlNPTlN0cmluZ0FycmF5KGJ1
dHRvbnMpIGZvcktleTpAImJ1dHRvbnMiXTsKLX0KLQotLSAoTlNBcnJheS8qPE5TU3RyaW5nPiov
ICopYnV0dG9ucwotewotICAgIHJldHVybiB0b09iakNTdHJpbmdBcnJheShbc3VwZXIgSlNPTkFy
cmF5Rm9yS2V5OkAiYnV0dG9ucyJdKTsKLX0KLQotLSAodm9pZClzZXREaXJlY3Rpb25hbGl0eToo
VGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSlkaXJlY3Rp
b25hbGl0eQotewotICAgIFtzdXBlciBzZXRTdHJpbmc6dG9Qcm90b2NvbFN0cmluZyhkaXJlY3Rp
b25hbGl0eSkgZm9yS2V5OkAiZGlyZWN0aW9uYWxpdHkiXTsKLX0KLQotLSAoVGVzdFByb3RvY29s
RGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSlkaXJlY3Rpb25hbGl0eQotewot
ICAgIHJldHVybiBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0
ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eT4oW3N1cGVyIHN0cmluZ0ZvcktleTpAImRpcmVjdGlvbmFs
aXR5Il0pLnZhbHVlKCk7Ci19Ci0KLS0gKHZvaWQpc2V0Tm90ZXM6KE5TU3RyaW5nICopbm90ZXMK
LXsKLSAgICBbc3VwZXIgc2V0U3RyaW5nOm5vdGVzIGZvcktleTpAIm5vdGVzIl07Ci19Ci0KLS0g
KE5TU3RyaW5nICopbm90ZXMKLXsKLSAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAIm5v
dGVzIl07Ci19Ci0KLS0gKHZvaWQpc2V0VGltZXN0YW1wOihkb3VibGUpdGltZXN0YW1wCi17Ci0g
ICAgW3N1cGVyIHNldERvdWJsZTp0aW1lc3RhbXAgZm9yS2V5OkAidGltZXN0YW1wIl07Ci19Ci0K
LS0gKGRvdWJsZSl0aW1lc3RhbXAKLXsKLSAgICByZXR1cm4gW3N1cGVyIGRvdWJsZUZvcktleTpA
InRpbWVzdGFtcCJdOwotfQotCi0tICh2b2lkKXNldFZhbHVlczooUldJUHJvdG9jb2xKU09OT2Jq
ZWN0ICopdmFsdWVzCi17Ci0gICAgW3N1cGVyIHNldE9iamVjdDp2YWx1ZXMgZm9yS2V5OkAidmFs
dWVzIl07Ci19Ci0KLS0gKFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcwotewotICAgIFJX
SVByb3RvY29sSlNPTk9iamVjdCAqb2JqZWN0ID0gW3N1cGVyIG9iamVjdEZvcktleTpAInZhbHVl
cyJdOwotICAgIGlmICghb2JqZWN0KQotICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiBb
W1JXSVByb3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0Oltbc3VwZXIg
b2JqZWN0Rm9yS2V5OkAidmFsdWVzIl0gdG9KU09OT2JqZWN0XS5nZXQoKV07Ci19Ci0KLS0gKHZv
aWQpc2V0UGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZAotewotICAgIFtz
dXBlciBzZXRPYmplY3Q6cGF5bG9hZCBmb3JLZXk6QCJwYXlsb2FkIl07Ci19Ci0KLS0gKFJXSVBy
b3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQKLXsKLSAgICBSV0lQcm90b2NvbEpTT05PYmplY3Qg
Km9iamVjdCA9IFtzdXBlciBvYmplY3RGb3JLZXk6QCJwYXlsb2FkIl07Ci0gICAgaWYgKCFvYmpl
Y3QpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgcmV0dXJuIFtbUldJUHJvdG9jb2xKU09OT2Jq
ZWN0IGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6W1tzdXBlciBvYmplY3RGb3JLZXk6QCJwYXls
b2FkIl0gdG9KU09OT2JqZWN0XS5nZXQoKV07Ci19Ci0KLS0gKHZvaWQpc2V0RXJyb3I6KFRlc3RQ
cm90b2NvbERhdGFiYXNlRXJyb3IgKillcnJvcgotewotICAgIFtzdXBlciBzZXRPYmplY3Q6ZXJy
b3IgZm9yS2V5OkAiZXJyb3IiXTsKLX0KLQotLSAoVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAq
KWVycm9yCi17Ci0gICAgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvYmplY3QgPSBbc3VwZXIgb2Jq
ZWN0Rm9yS2V5OkAiZXJyb3IiXTsKLSAgICBpZiAoIW9iamVjdCkKLSAgICAgICAgcmV0dXJuIG5p
bDsKLSAgICByZXR1cm4gW1tUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGFsbG9jXSBpbml0V2l0
aEpTT05PYmplY3Q6W1tzdXBlciBvYmplY3RGb3JLZXk6QCJlcnJvciJdIHRvSlNPTk9iamVjdF0u
Z2V0KCldOwotfQotCi0tICh2b2lkKXNldEVycm9yTGlzdDooTlNBcnJheS8qPFRlc3RQcm90b2Nv
bERhdGFiYXNlRXJyb3I+Ki8gKillcnJvckxpc3QKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9S
X0JBRF9UWVBFX0lOX0FSUkFZKGVycm9yTGlzdCwgW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3Ig
Y2xhc3NdKTsKLSAgICBbc3VwZXIgc2V0SlNPTkFycmF5OnRvSlNPTk9iamVjdEFycmF5KGVycm9y
TGlzdCkgZm9yS2V5OkAiZXJyb3JMaXN0Il07Ci19Ci0KLS0gKE5TQXJyYXkvKjxUZXN0UHJvdG9j
b2xEYXRhYmFzZUVycm9yPiovICopZXJyb3JMaXN0Ci17Ci0gICAgcmV0dXJuIHRvT2JqQ0FycmF5
PFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I+KFtzdXBlciBKU09OQXJyYXlGb3JLZXk6QCJlcnJv
ckxpc3QiXSk7Ci19Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbERhdGFi
YXNlT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cwotCi0tIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXls
b2FkCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJldHVybiBu
aWw7Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRb
QCJpbnRlZ2VyIl0sIEAiaW50ZWdlciIpOwotICAgIHNlbGYuaW50ZWdlciA9IHBheWxvYWRbQCJp
bnRlZ2VyIl07Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBh
eWxvYWRbQCJhcnJheSJdLCBAImFycmF5Iik7Ci0gICAgc2VsZi5hcnJheSA9IHBheWxvYWRbQCJh
cnJheSJdOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXls
b2FkW0Aic3RyaW5nIl0sIEAic3RyaW5nIik7Ci0gICAgc2VsZi5zdHJpbmcgPSBwYXlsb2FkW0Ai
c3RyaW5nIl07Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBh
eWxvYWRbQCJ2YWx1ZSJdLCBAInZhbHVlIik7Ci0gICAgc2VsZi52YWx1ZSA9IHBheWxvYWRbQCJ2
YWx1ZSJdOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXls
b2FkW0Aib2JqZWN0Il0sIEAib2JqZWN0Iik7Ci0gICAgc2VsZi5vYmplY3QgPSBwYXlsb2FkW0Ai
b2JqZWN0Il07Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0
aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilvYmplY3QKLXsKLSAgICBp
ZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoSlNPTk9iamVjdDpbb2JqZWN0IHRvSlNPTk9iamVj
dF0uZ2V0KCldKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIHJldHVybiBzZWxmOwotfQot
Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhJbnRlZ2VyOihOU1N0cmluZyAqKWludGVnZXIgYXJy
YXk6KE5TU3RyaW5nICopYXJyYXkgc3RyaW5nOihOU1N0cmluZyAqKXN0cmluZyB2YWx1ZTooTlNT
dHJpbmcgKil2YWx1ZSBvYmplY3Q6KE5TU3RyaW5nICopb2JqZWN0Ci17Ci0gICAgaWYgKCEoc2Vs
ZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBUSFJPV19FWENF
UFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKGludGVnZXIsIEAiaW50ZWdlciIpOwotICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkoYXJyYXksIEAiYXJyYXkiKTsKLSAg
ICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHN0cmluZywgQCJzdHJpbmci
KTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHZhbHVlLCBAInZh
bHVlIik7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShvYmplY3Qs
IEAib2JqZWN0Iik7Ci0KLSAgICBzZWxmLmludGVnZXIgPSBpbnRlZ2VyOwotICAgIHNlbGYuYXJy
YXkgPSBhcnJheTsKLSAgICBzZWxmLnN0cmluZyA9IHN0cmluZzsKLSAgICBzZWxmLnZhbHVlID0g
dmFsdWU7Ci0gICAgc2VsZi5vYmplY3QgPSBvYmplY3Q7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0K
LQotLSAodm9pZClzZXRJbnRlZ2VyOihOU1N0cmluZyAqKWludGVnZXIKLXsKLSAgICBbc3VwZXIg
c2V0U3RyaW5nOmludGVnZXIgZm9yS2V5OkAiaW50ZWdlciJdOwotfQotCi0tIChOU1N0cmluZyAq
KWludGVnZXIKLXsKLSAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAImludGVnZXIiXTsK
LX0KLQotLSAodm9pZClzZXRBcnJheTooTlNTdHJpbmcgKilhcnJheQotewotICAgIFtzdXBlciBz
ZXRTdHJpbmc6YXJyYXkgZm9yS2V5OkAiYXJyYXkiXTsKLX0KLQotLSAoTlNTdHJpbmcgKilhcnJh
eQotewotICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAiYXJyYXkiXTsKLX0KLQotLSAo
dm9pZClzZXRTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nCi17Ci0gICAgW3N1cGVyIHNldFN0cmlu
ZzpzdHJpbmcgZm9yS2V5OkAic3RyaW5nIl07Ci19Ci0KLS0gKE5TU3RyaW5nICopc3RyaW5nCi17
Ci0gICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJzdHJpbmciXTsKLX0KLQotLSAodm9p
ZClzZXRWYWx1ZTooTlNTdHJpbmcgKil2YWx1ZQotewotICAgIFtzdXBlciBzZXRTdHJpbmc6dmFs
dWUgZm9yS2V5OkAidmFsdWUiXTsKLX0KLQotLSAoTlNTdHJpbmcgKil2YWx1ZQotewotICAgIHJl
dHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAidmFsdWUiXTsKLX0KLQotLSAodm9pZClzZXRPYmpl
Y3Q6KE5TU3RyaW5nICopb2JqZWN0Ci17Ci0gICAgW3N1cGVyIHNldFN0cmluZzpvYmplY3QgZm9y
S2V5OkAib2JqZWN0Il07Ci19Ci0KLS0gKE5TU3RyaW5nICopb2JqZWN0Ci17Ci0gICAgcmV0dXJu
IFtzdXBlciBzdHJpbmdGb3JLZXk6QCJvYmplY3QiXTsKLX0KLQotQGVuZAotCi1AaW1wbGVtZW50
YXRpb24gVGVzdFByb3RvY29sRGF0YWJhc2VEdW1teU9iamVjdAotCi0tIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilw
YXlsb2FkCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJldHVy
biBuaWw7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBy
b3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilvYmplY3QKLXsKLSAgICBpZiAo
IShzZWxmID0gW3N1cGVyIGluaXRXaXRoSlNPTk9iamVjdDpbb2JqZWN0IHRvSlNPTk9iamVjdF0u
Z2V0KCldKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi1A
ZW5kCi0KLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGUK
LQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8
TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5p
dF0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFV
SVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiZGlyZWN0aW9uYWxpdHkiXSwgQCJkaXJlY3Rpb25hbGl0
eSIpOwotICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rp
b25hbGl0eT4gZGlyZWN0aW9uYWxpdHkgPSBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29s
VGVzdFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5PihwYXlsb2FkW0AiZGlyZWN0aW9uYWxp
dHkiXSk7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfRU5VTV9WQUxVRShkaXJlY3Rpb25h
bGl0eSwgQCJkaXJlY3Rpb25hbGl0eSIpOwotICAgIHNlbGYuZGlyZWN0aW9uYWxpdHkgPSBkaXJl
Y3Rpb25hbGl0eS52YWx1ZSgpOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9Q
Uk9QRVJUWShwYXlsb2FkW0AiYnV0dG9ucyJdLCBAImJ1dHRvbnMiKTsKLSAgICBzZWxmLmJ1dHRv
bnMgPSBwYXlsb2FkW0AiYnV0dG9ucyJdOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFV
SVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiY29sdW1uTmFtZXMiXSwgQCJjb2x1bW5OYW1lcyIpOwot
ICAgIHNlbGYuY29sdW1uTmFtZXMgPSBwYXlsb2FkW0AiY29sdW1uTmFtZXMiXTsKLQotICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAIm5vdGVzIl0sIEAi
bm90ZXMiKTsKLSAgICBzZWxmLm5vdGVzID0gcGF5bG9hZFtAIm5vdGVzIl07Ci0KLSAgICBUSFJP
V19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJ0aW1lc3RhbXAiXSwg
QCJ0aW1lc3RhbXAiKTsKLSAgICBzZWxmLnRpbWVzdGFtcCA9IFtwYXlsb2FkW0AidGltZXN0YW1w
Il0gZG91YmxlVmFsdWVdOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9Q
RVJUWShwYXlsb2FkW0AidmFsdWVzIl0sIEAidmFsdWVzIik7Ci0gICAgc2VsZi52YWx1ZXMgPSBw
YXlsb2FkW0AidmFsdWVzIl07Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BS
T1BFUlRZKHBheWxvYWRbQCJwYXlsb2FkIl0sIEAicGF5bG9hZCIpOwotICAgIHNlbGYucGF5bG9h
ZCA9IHBheWxvYWRbQCJwYXlsb2FkIl07Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJ
UkVEX1BST1BFUlRZKHBheWxvYWRbQCJlcnJvciJdLCBAImVycm9yIik7Ci0gICAgc2VsZi5lcnJv
ciA9IFtbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBh
eWxvYWRbQCJlcnJvciJdXTsKLQotICAgIHJldHVybiBzZWxmOwotfQotLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9iamVjdAot
ewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmplY3QgdG9K
U09OT2JqZWN0XS5nZXQoKV0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgcmV0dXJuIHNl
bGY7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aERpcmVjdGlvbmFsaXR5OihUZXN0UHJv
dG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHkpZGlyZWN0aW9uYWxpdHkgYnV0
dG9uczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopYnV0dG9ucyBjb2x1bW5OYW1lczooTlNBcnJh
eS8qPE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMgbm90ZXM6KE5TU3RyaW5nICopbm90ZXMgdGlt
ZXN0YW1wOihkb3VibGUpdGltZXN0YW1wIHZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0ICop
dmFsdWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQgZXJyb3I6KFRl
c3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKillcnJvcgotewotICAgIGlmICghKHNlbGYgPSBbc3Vw
ZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9SRVFVSVJFRF9QUk9QRVJUWShidXR0b25zLCBAImJ1dHRvbnMiKTsKLSAgICBUSFJPV19FWENF
UFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7
Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShub3RlcywgQCJub3Rl
cyIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkodmFsdWVzLCBA
InZhbHVlcyIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5
bG9hZCwgQCJwYXlsb2FkIik7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9Q
RVJUWShlcnJvciwgQCJlcnJvciIpOwotCi0gICAgc2VsZi5kaXJlY3Rpb25hbGl0eSA9IGRpcmVj
dGlvbmFsaXR5OwotICAgIHNlbGYuYnV0dG9ucyA9IGJ1dHRvbnM7Ci0gICAgc2VsZi5jb2x1bW5O
YW1lcyA9IGNvbHVtbk5hbWVzOwotICAgIHNlbGYubm90ZXMgPSBub3RlczsKLSAgICBzZWxmLnRp
bWVzdGFtcCA9IHRpbWVzdGFtcDsKLSAgICBzZWxmLnZhbHVlcyA9IHZhbHVlczsKLSAgICBzZWxm
LnBheWxvYWQgPSBwYXlsb2FkOwotICAgIHNlbGYuZXJyb3IgPSBlcnJvcjsKLQotICAgIHJldHVy
biBzZWxmOwotfQotCi0tICh2b2lkKXNldERpcmVjdGlvbmFsaXR5OihUZXN0UHJvdG9jb2xUZXN0
UGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHkpZGlyZWN0aW9uYWxpdHkKLXsKLSAgICBbc3Vw
ZXIgc2V0U3RyaW5nOnRvUHJvdG9jb2xTdHJpbmcoZGlyZWN0aW9uYWxpdHkpIGZvcktleTpAImRp
cmVjdGlvbmFsaXR5Il07Ci19Ci0KLS0gKFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVE
aXJlY3Rpb25hbGl0eSlkaXJlY3Rpb25hbGl0eQotewotICAgIHJldHVybiBmcm9tUHJvdG9jb2xT
dHJpbmc8VGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5Pihbc3Vw
ZXIgc3RyaW5nRm9yS2V5OkAiZGlyZWN0aW9uYWxpdHkiXSkudmFsdWUoKTsKLX0KLQotLSAodm9p
ZClzZXRCdXR0b25zOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilidXR0b25zCi17Ci0gICAgW3N1
cGVyIHNldEpTT05BcnJheTp0b0pTT05TdHJpbmdBcnJheShidXR0b25zKSBmb3JLZXk6QCJidXR0
b25zIl07Ci19Ci0KLS0gKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWJ1dHRvbnMKLXsKLSAgICBy
ZXR1cm4gdG9PYmpDU3RyaW5nQXJyYXkoW3N1cGVyIEpTT05BcnJheUZvcktleTpAImJ1dHRvbnMi
XSk7Ci19Ci0KLS0gKHZvaWQpc2V0Q29sdW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAq
KWNvbHVtbk5hbWVzCi17Ci0gICAgW3N1cGVyIHNldEpTT05BcnJheTp0b0pTT05TdHJpbmdBcnJh
eShjb2x1bW5OYW1lcykgZm9yS2V5OkAiY29sdW1uTmFtZXMiXTsKLX0KLQotLSAoTlNBcnJheS8q
PE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMKLXsKLSAgICByZXR1cm4gdG9PYmpDU3RyaW5nQXJy
YXkoW3N1cGVyIEpTT05BcnJheUZvcktleTpAImNvbHVtbk5hbWVzIl0pOwotfQotCi0tICh2b2lk
KXNldE5vdGVzOihOU1N0cmluZyAqKW5vdGVzCi17Ci0gICAgW3N1cGVyIHNldFN0cmluZzpub3Rl
cyBmb3JLZXk6QCJub3RlcyJdOwotfQotCi0tIChOU1N0cmluZyAqKW5vdGVzCi17Ci0gICAgcmV0
dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJub3RlcyJdOwotfQotCi0tICh2b2lkKXNldFRpbWVz
dGFtcDooZG91YmxlKXRpbWVzdGFtcAotewotICAgIFtzdXBlciBzZXREb3VibGU6dGltZXN0YW1w
IGZvcktleTpAInRpbWVzdGFtcCJdOwotfQotCi0tIChkb3VibGUpdGltZXN0YW1wCi17Ci0gICAg
cmV0dXJuIFtzdXBlciBkb3VibGVGb3JLZXk6QCJ0aW1lc3RhbXAiXTsKLX0KLQotLSAodm9pZClz
ZXRWYWx1ZXM6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcwotewotICAgIFtzdXBlciBz
ZXRPYmplY3Q6dmFsdWVzIGZvcktleTpAInZhbHVlcyJdOwotfQotCi0tIChSV0lQcm90b2NvbEpT
T05PYmplY3QgKil2YWx1ZXMKLXsKLSAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9iamVjdCA9
IFtzdXBlciBvYmplY3RGb3JLZXk6QCJ2YWx1ZXMiXTsKLSAgICBpZiAoIW9iamVjdCkKLSAgICAg
ICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4gW1tSV0lQcm90b2NvbEpTT05PYmplY3QgYWxsb2Nd
IGluaXRXaXRoSlNPTk9iamVjdDpbW3N1cGVyIG9iamVjdEZvcktleTpAInZhbHVlcyJdIHRvSlNP
Tk9iamVjdF0uZ2V0KCldOwotfQotCi0tICh2b2lkKXNldFBheWxvYWQ6KFJXSVByb3RvY29sSlNP
Tk9iamVjdCAqKXBheWxvYWQKLXsKLSAgICBbc3VwZXIgc2V0T2JqZWN0OnBheWxvYWQgZm9yS2V5
OkAicGF5bG9hZCJdOwotfQotCi0tIChSV0lQcm90b2NvbEpTT05PYmplY3QgKilwYXlsb2FkCi17
Ci0gICAgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvYmplY3QgPSBbc3VwZXIgb2JqZWN0Rm9yS2V5
OkAicGF5bG9hZCJdOwotICAgIGlmICghb2JqZWN0KQotICAgICAgICByZXR1cm4gbmlsOwotICAg
IHJldHVybiBbW1JXSVByb3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0
Oltbc3VwZXIgb2JqZWN0Rm9yS2V5OkAicGF5bG9hZCJdIHRvSlNPTk9iamVjdF0uZ2V0KCldOwot
fQotCi0tICh2b2lkKXNldEVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICopZXJyb3IK
LXsKLSAgICBbc3VwZXIgc2V0T2JqZWN0OmVycm9yIGZvcktleTpAImVycm9yIl07Ci19Ci0KLS0g
KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKillcnJvcgotewotICAgIFJXSVByb3RvY29sSlNP
Tk9iamVjdCAqb2JqZWN0ID0gW3N1cGVyIG9iamVjdEZvcktleTpAImVycm9yIl07Ci0gICAgaWYg
KCFvYmplY3QpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgcmV0dXJuIFtbVGVzdFByb3RvY29s
RGF0YWJhc2VFcnJvciBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0Oltbc3VwZXIgb2JqZWN0Rm9y
S2V5OkAiZXJyb3IiXSB0b0pTT05PYmplY3RdLmdldCgpXTsKLX0KLQotQGVuZAotCi0KLSMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtcmVx
dWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC90eXBlLXJlcXVpcmluZy1y
dW50aW1lLWNhc3RzLmpzb24tcmVzdWx0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBl
ODRkYWNkY2FmNy4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvdHlwZS1yZXF1aXJpbmctcnVudGlt
ZS1jYXN0cy5qc29uLXJlc3VsdAorKysgL2Rldi9udWxsCkBAIC0xLDE2NDkgKzAsMCBAQAotIyMj
IEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0vLyBUZXN0Ci1JbnNwZWN0
b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJUZXN0IiwgbnVsbCk7Ci1JbnNwZWN0b3JCYWNrZW5k
LnJlZ2lzdGVyRW51bSgiVGVzdC5VbmNhc3RlZEFuaW1hbHMiLCB7UGlnczogIlBpZ3MiLCBDb3dz
OiAiQ293cyIsIENhdHM6ICJDYXRzIiwgSGVuczogIkhlbnMifSk7Ci1JbnNwZWN0b3JCYWNrZW5k
LnJlZ2lzdGVyRW51bSgiVGVzdC5DYXN0ZWRBbmltYWxzIiwge0R1Y2tzOiAiRHVja3MiLCBIZW5z
OiAiSGVucyIsIENyb3dzOiAiQ3Jvd3MiLCBGbGFtaW5nb3M6ICJGbGFtaW5nb3MifSk7Ci1JbnNw
ZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJUZXN0IiwgbnVsbCk7Ci0jIyMgRW5kIEZpbGU6
IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVy
bmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBl
cy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
Lmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4K
LQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVyIHsKLXB1YmxpYzoKLSAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNr
ZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZN
b3ZlKGRpc3BhdGNoZXIpOyB9Ci0gICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRj
aGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQotcHJpdmF0
ZToKLSAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Ci19
OwotCi0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotI2VuZGlmIC8vIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJu
YXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlz
cGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWly
aW5nLXJ1bnRpbWUtY2FzdHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMu
aCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9y
IHsKLQotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZh
bHVlcy5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENI
RVJTKQotI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNlbmRp
ZgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgotCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVk
ZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Igewot
Ci1jbGFzcyBGcm9udGVuZFJvdXRlcjsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMg
RW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRl
c3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgot
Ci1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMj
IyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi1uYW1lc3BhY2UgUHJvdG9jb2wg
ewotCi0KLQotLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCi1uYW1lc3BhY2UgVGVzdCB7Ci1jbGFz
cyBUeXBlTmVlZGluZ0Nhc3Q7Ci1jbGFzcyBSZWN1cnNpdmVPYmplY3QxOwotY2xhc3MgUmVjdXJz
aXZlT2JqZWN0MjsKLWVudW0gY2xhc3MgVW5jYXN0ZWRBbmltYWxzOwotZW51bSBjbGFzcyBDYXN0
ZWRBbmltYWxzOwotfSAvLyBUZXN0Ci0vLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCi0K
LQotLy8gVHlwZWRlZnMuCi1uYW1lc3BhY2UgVGVzdCB7Ci10eXBlZGVmIGludCBDYXN0ZWRPYmpl
Y3RJZDsKLXR5cGVkZWYgaW50IFVuY2FzdGVkT2JqZWN0SWQ7Ci19IC8vIFRlc3QKLS8vIEVuZCBv
ZiB0eXBlZGVmcy4KLQotbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKLQotU3RyaW5nIGdldEVudW1D
b25zdGFudFZhbHVlKGludCBjb2RlKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdl
dEVudW1Db25zdGFudFZhbHVlKFQgZW51bVZhbHVlKQotewotICAgIHJldHVybiBnZXRFbnVtQ29u
c3RhbnRWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KGVudW1WYWx1ZSkpOwotfQotCi19IC8vIG5hbWVz
cGFjZSBUZXN0SGVscGVycwotCi1uYW1lc3BhY2UgVGVzdCB7Ci0vKiBBIGR1bW15IHR5cGUgdGhh
dCByZXF1aXJlcyBydW50aW1lIGNhc3RzLCBhbmQgZm9yY2VzIG5vbi1wcmltaXRpdmUgcmVmZXJl
bmNlZCB0eXBlcyB0byBhbHNvIGVtaXQgcnVudGltZSBjYXN0IGhlbHBlcnMuICovCi1jbGFzcyBU
eXBlTmVlZGluZ0Nhc3QgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7Ci1wdWJsaWM6Ci0gICAg
ZW51bSB7Ci0gICAgICAgIE5vRmllbGRzU2V0ID0gMCwKLSAgICAgICAgU3RyaW5nU2V0ID0gMSA8
PCAwLAotICAgICAgICBOdW1iZXJTZXQgPSAxIDw8IDEsCi0gICAgICAgIEFuaW1hbHNTZXQgPSAx
IDw8IDIsCi0gICAgICAgIElkU2V0ID0gMSA8PCAzLAotICAgICAgICBUcmVlU2V0ID0gMSA8PCA0
LAotICAgICAgICBBbGxGaWVsZHNTZXQgPSAoU3RyaW5nU2V0IHwgTnVtYmVyU2V0IHwgQW5pbWFs
c1NldCB8IElkU2V0IHwgVHJlZVNldCkKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8aW50IFNUQVRF
PgotICAgIGNsYXNzIEJ1aWxkZXIgewotICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0cjxKU09O
OjpPYmplY3Q+IG1fcmVzdWx0OwotCi0gICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVy
PFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIEJ1aWxkZXIoUmVmPC8qVHlwZU5lZWRpbmdDYXN0Ki9KU09OOjpPYmpl
Y3Q+JiYgb2JqZWN0KQotICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0
LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwotICAgICAgICB9Ci0gICAgICAg
IGZyaWVuZCBjbGFzcyBUeXBlTmVlZGluZ0Nhc3Q7Ci0gICAgcHVibGljOgotCi0gICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBTdHJpbmdTZXQ+JiBzZXRTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkK
LSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFN0cmluZ1Nl
dCksIHByb3BlcnR5X3N0cmluZ19hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0U3RyaW5nKCJzdHJpbmciX3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3Rh
dGU8U3RyaW5nU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IE51
bWJlclNldD4mIHNldE51bWJlcihpbnQgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBOdW1iZXJTZXQpLCBwcm9wZXJ0eV9udW1iZXJfYWxyZWFk
eV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldEludGVnZXIoIm51bWJlciJfcywgdmFs
dWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxOdW1iZXJTZXQ+KCk7Ci0gICAgICAg
IH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQW5pbWFsc1NldD4mIHNldEFuaW1hbHMoSW5z
cGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscyB2YWx1ZSkKLSAgICAgICAgewot
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEFuaW1hbHNTZXQpLCBwcm9wZXJ0
eV9hbmltYWxzX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmco
ImFuaW1hbHMiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29u
c3RhbnRWYWx1ZSh2YWx1ZSkpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxBbmltYWxz
U2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IElkU2V0PiYgc2V0
SWQoaW50IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgSWRTZXQpLCBwcm9wZXJ0eV9pZF9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0SW50ZWdlcigiaWQiX3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0
U3RhdGU8SWRTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVHJl
ZVNldD4mIHNldFRyZWUoUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2
ZU9iamVjdDE+IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgVHJlZVNldCksIHByb3BlcnR5X3RyZWVfYWxyZWFkeV9zZXQpOwotICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldE9iamVjdCgidHJlZSJfcywgdmFsdWUpOwotICAgICAgICAgICAgcmV0
dXJuIGNhc3RTdGF0ZTxUcmVlU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgUmVmPFR5cGVO
ZWVkaW5nQ2FzdD4gcmVsZWFzZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7Ci0gICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoVHlwZU5lZWRpbmdDYXN0KSA9PSBzaXplb2YoSlNP
Tjo6T2JqZWN0KSwgY2Fubm90X2Nhc3QpOwotCi0gICAgICAgICAgICBSZWY8SlNPTjo6T2JqZWN0
PiBqc29uUmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKLSAgICAgICAgICAgIGF1
dG8gcmVzdWx0ID0gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8VHlwZU5lZWRpbmdDYXN0
Pio+KCZqc29uUmVzdWx0KSk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9
Ci0gICAgfTsKLQotICAgIC8qCi0gICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgotICAgICAq
IFJlZjxUeXBlTmVlZGluZ0Nhc3Q+IHJlc3VsdCA9IFR5cGVOZWVkaW5nQ2FzdDo6Y3JlYXRlKCkK
LSAgICAgKiAgICAgLnNldFN0cmluZyguLi4pCi0gICAgICogICAgIC5zZXROdW1iZXIoLi4uKQot
ICAgICAqICAgICAuc2V0QW5pbWFscyguLi4pCi0gICAgICogICAgIC5zZXRJZCguLi4pCi0gICAg
ICogICAgIC5zZXRUcmVlKC4uLikKLSAgICAgKiAgICAgLnJlbGVhc2UoKTsKLSAgICAgKi8KLSAg
ICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKLSAgICB9
Ci19OwotCi0vKiAgKi8KLWVudW0gY2xhc3MgVW5jYXN0ZWRBbmltYWxzIHsKLSAgICBQaWdzID0g
NCwKLSAgICBDb3dzID0gNSwKLSAgICBDYXRzID0gNiwKLSAgICBIZW5zID0gMSwKLX07IC8vIGVu
dW0gY2xhc3MgVW5jYXN0ZWRBbmltYWxzCi0vKiAgKi8KLWVudW0gY2xhc3MgQ2FzdGVkQW5pbWFs
cyB7Ci0gICAgRHVja3MgPSAwLAotICAgIEhlbnMgPSAxLAotICAgIENyb3dzID0gMiwKLSAgICBG
bGFtaW5nb3MgPSAzLAotfTsgLy8gZW51bSBjbGFzcyBDYXN0ZWRBbmltYWxzCi1jbGFzcyBSZWN1
cnNpdmVPYmplY3QxIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewotcHVibGljOgotICAgIGVu
dW0gewotICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCi0gICAgICAgIEFsbEZpZWxkc1NldCA9IDAK
LSAgICB9OwotCi0gICAgdGVtcGxhdGU8aW50IFNUQVRFPgotICAgIGNsYXNzIEJ1aWxkZXIgewot
ICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVzdWx0OwotCi0g
ICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0
ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWls
ZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXIo
UmVmPC8qUmVjdXJzaXZlT2JqZWN0MSovSlNPTjo6T2JqZWN0PiYmIG9iamVjdCkKLSAgICAgICAg
ICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQotICAgICAgICB7Ci0gICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25v
bl9pbml0X3N0YXRlKTsKLSAgICAgICAgfQotICAgICAgICBmcmllbmQgY2xhc3MgUmVjdXJzaXZl
T2JqZWN0MTsKLSAgICBwdWJsaWM6Ci0KLSAgICAgICAgUmVmPFJlY3Vyc2l2ZU9iamVjdDE+IHJl
bGVhc2UoKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBB
bGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwotICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoc2l6ZW9mKFJlY3Vyc2l2ZU9iamVjdDEpID09IHNpemVvZihKU09OOjpPYmplY3QpLCBj
YW5ub3RfY2FzdCk7Ci0KLSAgICAgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25SZXN1bHQg
PSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOwotICAgICAgICAgICAgYXV0byByZXN1bHQgPSBX
VEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxSZWN1cnNpdmVPYmplY3QxPio+KCZqc29uUmVz
dWx0KSk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgfTsKLQot
ICAgIC8qCi0gICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgotICAgICAqIFJlZjxSZWN1cnNp
dmVPYmplY3QxPiByZXN1bHQgPSBSZWN1cnNpdmVPYmplY3QxOjpjcmVhdGUoKQotICAgICAqICAg
ICAucmVsZWFzZSgpOwotICAgICAqLwotICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBj
cmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046
Ok9iamVjdDo6Y3JlYXRlKCkpOwotICAgIH0KLQotICAgIHZvaWQgc2V0T2JqKFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QyPiB2YWx1ZSkKLSAgICB7Ci0g
ICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldE9iamVjdCgib2JqIl9zLCBXVEZNb3ZlKHZhbHVl
KSk7Ci0gICAgfQotfTsKLQotY2xhc3MgUmVjdXJzaXZlT2JqZWN0MiA6IHB1YmxpYyBKU09OOjpP
YmplY3RCYXNlIHsKLXB1YmxpYzoKLSAgICBlbnVtIHsKLSAgICAgICAgTm9GaWVsZHNTZXQgPSAw
LAotICAgICAgICBBbGxGaWVsZHNTZXQgPSAwCi0gICAgfTsKLQotICAgIHRlbXBsYXRlPGludCBT
VEFURT4KLSAgICBjbGFzcyBCdWlsZGVyIHsKLSAgICBwcml2YXRlOgotICAgICAgICBSZWZQdHI8
SlNPTjo6T2JqZWN0PiBtX3Jlc3VsdDsKLQotICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVp
bGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyKFJlZjwvKlJlY3Vyc2l2ZU9iamVjdDIqL0pTT046
Ok9iamVjdD4mJiBvYmplY3QpCi0gICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0
KSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVs
ZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7Ci0gICAgICAgIH0KLSAg
ICAgICAgZnJpZW5kIGNsYXNzIFJlY3Vyc2l2ZU9iamVjdDI7Ci0gICAgcHVibGljOgotCi0gICAg
ICAgIFJlZjxSZWN1cnNpdmVPYmplY3QyPiByZWxlYXNlKCkKLSAgICAgICAgewotICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3Jl
YWR5KTsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihSZWN1cnNpdmVPYmplY3Qy
KSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0KSwgY2Fubm90X2Nhc3QpOwotCi0gICAgICAgICAgICBS
ZWY8SlNPTjo6T2JqZWN0PiBqc29uUmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsK
LSAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8
UmVjdXJzaXZlT2JqZWN0Mj4qPigmanNvblJlc3VsdCkpOwotICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICAvKgotICAgICAqIFN5bnRoZXRpYyBjb25z
dHJ1Y3RvcjoKLSAgICAgKiBSZWY8UmVjdXJzaXZlT2JqZWN0Mj4gcmVzdWx0ID0gUmVjdXJzaXZl
T2JqZWN0Mjo6Y3JlYXRlKCkKLSAgICAgKiAgICAgLnJlbGVhc2UoKTsKLSAgICAgKi8KLSAgICBz
dGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKLSAgICB9Ci0K
LSAgICB2b2lkIHNldE9iaihSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJz
aXZlT2JqZWN0MT4gdmFsdWUpCi0gICAgewotICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRP
YmplY3QoIm9iaiJfcywgV1RGTW92ZSh2YWx1ZSkpOwotICAgIH0KLX07Ci0KLX0gLy8gVGVzdAot
Ci10ZW1wbGF0ZTw+IHN0cnVjdCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRl
c3Q6OkNhc3RlZEFuaW1hbHM+IHsKLXN0YXRpYyB2b2lkIGFzc2VydFZhbHVlSGFzRXhwZWN0ZWRU
eXBlKEpTT046OlZhbHVlKik7Ci19OwotdGVtcGxhdGU8PiBzdHJ1Y3QgQmluZGluZ1RyYWl0czxJ
bnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+IHsKLXN0YXRpYyBSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0PiBydW50aW1lQ2Fz
dChSZWZQdHI8SlNPTjo6VmFsdWU+JiYgdmFsdWUpOwotc3RhdGljIHZvaWQgYXNzZXJ0VmFsdWVI
YXNFeHBlY3RlZFR5cGUoSlNPTjo6VmFsdWUqKTsKLX07Ci10ZW1wbGF0ZTw+IHN0cnVjdCBCaW5k
aW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+IHsK
LXN0YXRpYyB2b2lkIGFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEpTT046OlZhbHVlKik7Ci19
OwotdGVtcGxhdGU8PiBzdHJ1Y3QgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpU
ZXN0OjpSZWN1cnNpdmVPYmplY3QyPiB7Ci1zdGF0aWMgdm9pZCBhc3NlcnRWYWx1ZUhhc0V4cGVj
dGVkVHlwZShKU09OOjpWYWx1ZSopOwotfTsKLQotbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKLQot
dGVtcGxhdGU8dHlwZW5hbWUgUHJvdG9jb2xFbnVtVHlwZT4KLU9wdGlvbmFsPFByb3RvY29sRW51
bVR5cGU+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZyhjb25zdCBTdHJpbmcmKTsKLQotLy8gRW51
bXMgaW4gdGhlICdUZXN0JyBEb21haW4KLXRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5n
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFscz4oY29uc3QgU3RyaW5n
Jik7Ci10ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0
ZWRBbmltYWxzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6
VGVzdDo6Q2FzdGVkQW5pbWFscz4oY29uc3QgU3RyaW5nJik7Ci0KLX0gLy8gbmFtZXNwYWNlIFRl
c3RIZWxwZXJzCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgotCi1uYW1lc3BhY2UgV1RGIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0
IERlZmF1bHRIYXNoOwotCi0vLyBIYXNoIGRlY2xhcmF0aW9ucyBpbiB0aGUgJ1Rlc3QnIERvbWFp
bgotdGVtcGxhdGU8Pgotc3RydWN0IERlZmF1bHRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRl
c3Q6OlVuY2FzdGVkQW5pbWFscz4gewotICAgIHR5cGVkZWYgSW50SGFzaDxJbnNwZWN0b3I6OlBy
b3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM+IEhhc2g7Ci19OwotdGVtcGxhdGU8Pgotc3Ry
dWN0IERlZmF1bHRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+
IHsKLSAgICB0eXBlZGVmIEludEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVk
QW5pbWFscz4gSGFzaDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgotIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xPYmplY3RzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVj
dHMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmct
cnVudGltZS1jYXN0cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3Rz
LmgiCi0KLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewot
Ci1uYW1lc3BhY2UgVGVzdEhlbHBlcnMgewotCi1zdGF0aWMgY29uc3QgY2hhciogY29uc3QgZW51
bV9jb25zdGFudF92YWx1ZXNbXSA9IHsKLSAgICAiRHVja3MiLAotICAgICJIZW5zIiwKLSAgICAi
Q3Jvd3MiLAotICAgICJGbGFtaW5nb3MiLAotICAgICJQaWdzIiwKLSAgICAiQ293cyIsCi0gICAg
IkNhdHMiLAotfTsKLQotU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7Ci0g
ICAgcmV0dXJuIGVudW1fY29uc3RhbnRfdmFsdWVzW2NvZGVdOwotfQotCi0vLyBFbnVtcyBpbiB0
aGUgJ1Rlc3QnIERvbWFpbgotdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVj
dG9yOjpQcm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzPihjb25zdCBTdHJpbmcmIHByb3Rv
Y29sU3RyaW5nKQotewotICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9
IHsKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFu
aW1hbHM6OlBpZ3MsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6
VW5jYXN0ZWRBbmltYWxzOjpDb3dzLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9j
b2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFsczo6Q2F0cywKLSAgICAgICAgKHNpemVfdClJbnNwZWN0
b3I6OlByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM6OkhlbnMsCi0gICAgfTsKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IDQ7ICsraSkKLSAgICAgICAgaWYgKHByb3RvY29sU3RyaW5n
ID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAgICAgICAg
IHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzKWNvbnN0
YW50VmFsdWVzW2ldOwotCi0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotdGVtcGxhdGU8
PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz4gcGFy
c2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFu
aW1hbHM+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCi17Ci0gICAgc3RhdGljIGNvbnN0
IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0gewotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6
UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM6OkR1Y2tzLAotICAgICAgICAoc2l6ZV90KUlu
c3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM6OkhlbnMsCi0gICAgICAgIChz
aXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFsczo6Q3Jvd3MsCi0g
ICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFsczo6
RmxhbWluZ29zLAotICAgIH07Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCA0OyArK2kpCi0g
ICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFu
dFZhbHVlc1tpXV0pCi0gICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRl
c3Q6OkNhc3RlZEFuaW1hbHMpY29uc3RhbnRWYWx1ZXNbaV07Ci0KLSAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwotfQotCi0KLX0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCi0KLQotCi12b2lkIEJp
bmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz46OmFz
c2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEpTT046OlZhbHVlKiB2YWx1ZSkKLXsKLSNpZiBBU1NF
UlRfRU5BQkxFRAotICAgIEFTU0VSVF9BUkcodmFsdWUsIHZhbHVlKTsKLSAgICBTdHJpbmcgcmVz
dWx0OwotICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9IHZhbHVlLT5hc1N0cmluZyhyZXN1bHQpOwot
ICAgIEFTU0VSVChjYXN0U3VjY2VlZGVkKTsKLSAgICBBU1NFUlQocmVzdWx0ID09ICJEdWNrcyIg
fHwgcmVzdWx0ID09ICJIZW5zIiB8fCByZXN1bHQgPT0gIkNyb3dzIiB8fCByZXN1bHQgPT0gIkZs
YW1pbmdvcyIpOwotI2Vsc2UgLy8gQVNTRVJUX0VOQUJMRUQKLSAgICBVTlVTRURfUEFSQU0odmFs
dWUpOwotI2VuZGlmIC8vIEFTU0VSVF9FTkFCTEVECi19Ci0KLXZvaWQgQmluZGluZ1RyYWl0czxJ
bnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+Ojphc3NlcnRWYWx1ZUhh
c0V4cGVjdGVkVHlwZShKU09OOjpWYWx1ZSogdmFsdWUpCi17Ci0jaWYgQVNTRVJUX0VOQUJMRUQK
LSAgICBBU1NFUlRfQVJHKHZhbHVlLCB2YWx1ZSk7Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4g
b2JqZWN0OwotICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9IHZhbHVlLT5hc09iamVjdChvYmplY3Qp
OwotICAgIEFTU0VSVF9VTlVTRUQoY2FzdFN1Y2NlZWRlZCwgY2FzdFN1Y2NlZWRlZCk7Ci0gICAg
ewotICAgICAgICBhdXRvIHN0cmluZ1BvcyA9IG9iamVjdC0+ZmluZCgic3RyaW5nIl9zKTsKLSAg
ICAgICAgQVNTRVJUKHN0cmluZ1BvcyAhPSBvYmplY3QtPmVuZCgpKTsKLSAgICAgICAgQmluZGlu
Z1RyYWl0czxTdHJpbmc+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShzdHJpbmdQb3MtPnZh
bHVlLmdldCgpKTsKLSAgICB9Ci0gICAgewotICAgICAgICBhdXRvIG51bWJlclBvcyA9IG9iamVj
dC0+ZmluZCgibnVtYmVyIl9zKTsKLSAgICAgICAgQVNTRVJUKG51bWJlclBvcyAhPSBvYmplY3Qt
PmVuZCgpKTsKLSAgICAgICAgQmluZGluZ1RyYWl0czxpbnQ+Ojphc3NlcnRWYWx1ZUhhc0V4cGVj
dGVkVHlwZShudW1iZXJQb3MtPnZhbHVlLmdldCgpKTsKLSAgICB9Ci0gICAgewotICAgICAgICBh
dXRvIGFuaW1hbHNQb3MgPSBvYmplY3QtPmZpbmQoImFuaW1hbHMiX3MpOwotICAgICAgICBBU1NF
UlQoYW5pbWFsc1BvcyAhPSBvYmplY3QtPmVuZCgpKTsKLSAgICAgICAgQmluZGluZ1RyYWl0czxJ
bnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPjo6YXNzZXJ0VmFsdWVIYXNF
eHBlY3RlZFR5cGUoYW5pbWFsc1Bvcy0+dmFsdWUuZ2V0KCkpOwotICAgIH0KLSAgICB7Ci0gICAg
ICAgIGF1dG8gaWRQb3MgPSBvYmplY3QtPmZpbmQoImlkIl9zKTsKLSAgICAgICAgQVNTRVJUKGlk
UG9zICE9IG9iamVjdC0+ZW5kKCkpOwotICAgICAgICBCaW5kaW5nVHJhaXRzPGludD46OmFzc2Vy
dFZhbHVlSGFzRXhwZWN0ZWRUeXBlKGlkUG9zLT52YWx1ZS5nZXQoKSk7Ci0gICAgfQotICAgIHsK
LSAgICAgICAgYXV0byB0cmVlUG9zID0gb2JqZWN0LT5maW5kKCJ0cmVlIl9zKTsKLSAgICAgICAg
QVNTRVJUKHRyZWVQb3MgIT0gb2JqZWN0LT5lbmQoKSk7Ci0gICAgICAgIEJpbmRpbmdUcmFpdHM8
SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT46OmFzc2VydFZhbHVl
SGFzRXhwZWN0ZWRUeXBlKHRyZWVQb3MtPnZhbHVlLmdldCgpKTsKLSAgICB9Ci0KLSAgICBpbnQg
Zm91bmRQcm9wZXJ0aWVzQ291bnQgPSA1OwotICAgIGlmIChmb3VuZFByb3BlcnRpZXNDb3VudCAh
PSBvYmplY3QtPnNpemUoKSkKLSAgICAgICAgRkFUQUwoIlVuZXhwZWN0ZWQgcHJvcGVydGllcyBp
biBvYmplY3Q6ICVzXG4iLCBvYmplY3QtPnRvSlNPTlN0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsK
LSNlbHNlIC8vIEFTU0VSVF9FTkFCTEVECi0gICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKLSNlbmRp
ZiAvLyBBU1NFUlRfRU5BQkxFRAotfQotCi1SZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVz
dDo6VHlwZU5lZWRpbmdDYXN0PiBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRl
c3Q6OlR5cGVOZWVkaW5nQ2FzdD46OnJ1bnRpbWVDYXN0KFJlZlB0cjxKU09OOjpWYWx1ZT4mJiB2
YWx1ZSkKLXsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiByZXN1bHQ7Ci0gICAgYm9vbCBjYXN0
U3VjY2VlZGVkID0gdmFsdWUtPmFzT2JqZWN0KHJlc3VsdCk7Ci0gICAgQVNTRVJUX1VOVVNFRChj
YXN0U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsKLSAgICBCaW5kaW5nVHJhaXRzPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD46OmFzc2VydFZhbHVlSGFzRXhwZWN0
ZWRUeXBlKHJlc3VsdC5nZXQoKSk7Ci0gICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdCkgPT0gc2l6ZW9mKEpTT046Ok9iamVj
dEJhc2UpLCB0eXBlX2Nhc3RfcHJvYmxlbSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdCo+KHN0YXRpY19jYXN0PEpTT046
Ok9iamVjdEJhc2UqPihyZXN1bHQuZ2V0KCkpKTsKLX0KLQotCi12b2lkIEJpbmRpbmdUcmFpdHM8
SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT46OmFzc2VydFZhbHVl
SGFzRXhwZWN0ZWRUeXBlKEpTT046OlZhbHVlKiB2YWx1ZSkKLXsKLSNpZiBBU1NFUlRfRU5BQkxF
RAotICAgIEFTU0VSVF9BUkcodmFsdWUsIHZhbHVlKTsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0
PiBvYmplY3Q7Ci0gICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdmFsdWUtPmFzT2JqZWN0KG9iamVj
dCk7Ci0gICAgQVNTRVJUX1VOVVNFRChjYXN0U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsKLQot
ICAgIGludCBmb3VuZFByb3BlcnRpZXNDb3VudCA9IDA7Ci0gICAgewotICAgICAgICBhdXRvIG9i
alBvcyA9IG9iamVjdC0+ZmluZCgib2JqIl9zKTsKLSAgICAgICAgaWYgKG9ialBvcyAhPSBvYmpl
Y3QtPmVuZCgpKSB7Ci0gICAgICAgICAgICBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDI+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShv
YmpQb3MtPnZhbHVlLmdldCgpKTsKLSAgICAgICAgICAgICsrZm91bmRQcm9wZXJ0aWVzQ291bnQ7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGZvdW5kUHJvcGVydGllc0NvdW50ICE9IG9iamVj
dC0+c2l6ZSgpKQotICAgICAgICBGQVRBTCgiVW5leHBlY3RlZCBwcm9wZXJ0aWVzIGluIG9iamVj
dDogJXNcbiIsIG9iamVjdC0+dG9KU09OU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOwotI2Vsc2Ug
Ly8gQVNTRVJUX0VOQUJMRUQKLSAgICBVTlVTRURfUEFSQU0odmFsdWUpOwotI2VuZGlmIC8vIEFT
U0VSVF9FTkFCTEVECi19Ci0KLXZvaWQgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29s
OjpUZXN0OjpSZWN1cnNpdmVPYmplY3QyPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSlNP
Tjo6VmFsdWUqIHZhbHVlKQotewotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgQVNTRVJUX0FSRyh2
YWx1ZSwgdmFsdWUpOwotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG9iamVjdDsKLSAgICBib29s
IGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNPYmplY3Qob2JqZWN0KTsKLSAgICBBU1NFUlRfVU5V
U0VEKGNhc3RTdWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQpOwotCi0gICAgaW50IGZvdW5kUHJvcGVy
dGllc0NvdW50ID0gMDsKLSAgICB7Ci0gICAgICAgIGF1dG8gb2JqUG9zID0gb2JqZWN0LT5maW5k
KCJvYmoiX3MpOwotICAgICAgICBpZiAob2JqUG9zICE9IG9iamVjdC0+ZW5kKCkpIHsKLSAgICAg
ICAgICAgIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZl
T2JqZWN0MT46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKG9ialBvcy0+dmFsdWUuZ2V0KCkp
OwotICAgICAgICAgICAgKytmb3VuZFByb3BlcnRpZXNDb3VudDsKLSAgICAgICAgfQotICAgIH0K
LSAgICBpZiAoZm91bmRQcm9wZXJ0aWVzQ291bnQgIT0gb2JqZWN0LT5zaXplKCkpCi0gICAgICAg
IEZBVEFMKCJVbmV4cGVjdGVkIHByb3BlcnRpZXMgaW4gb2JqZWN0OiAlc1xuIiwgb2JqZWN0LT50
b0pTT05TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7Ci0jZWxzZSAvLyBBU1NFUlRfRU5BQkxFRAot
ICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7Ci0jZW5kaWYgLy8gQVNTRVJUX0VOQUJMRUQKLX0KLQot
fSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbmNsdWRlIDx3dGYvUmV0
YWluUHRyLmg+Ci0KLQotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi19IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hl
cnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1t
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGlt
ZS1jYXN0cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNo
ZXJzLmgiCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2luY2x1ZGUgIlRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+
Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQot
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0
b3IvVGVzdFByb3RvY29sLmg+Ci0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0
IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKLUBl
bmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJv
dG9jb2xDb25maWd1cmF0aW9uLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgi
Ci0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+Ci0jaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2lt
cG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0KLXVz
aW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xD
b25maWd1cmF0aW9uCi17Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29u
dHJvbGxlcjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVu
dGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtzdXBl
ciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJU
KGNvbnRyb2xsZXIpOwotICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1cm4g
c2VsZjsKLX0KLQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQot
Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQg
IlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5oIgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNl
IEluc3BlY3RvcjsKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hl
cnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPEZvdW5kYXRp
b24vRm91bmRhdGlvbi5oPgotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09O
T2JqZWN0Lmg+Ci0KLQotQGNsYXNzIFRlc3RQcm90b2NvbFRlc3RUeXBlTmVlZGluZ0Nhc3Q7Ci1A
Y2xhc3MgVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDE7Ci1AY2xhc3MgVGVzdFByb3Rv
Y29sVGVzdFJlY3Vyc2l2ZU9iamVjdDI7Ci0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRl
c3RQcm90b2NvbFBsYXRmb3JtKSB7Ci0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1BbGwsCi0gICAg
VGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9T
LAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1MsCi19OwotCi0KLXR5cGVkZWYgTlNfRU5V
TShOU0ludGVnZXIsIFRlc3RQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHMpIHsKLSAgICBUZXN0
UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzUGlncywKLSAgICBUZXN0UHJvdG9jb2xUZXN0VW5j
YXN0ZWRBbmltYWxzQ293cywKLSAgICBUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzQ2F0
cywKLSAgICBUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzSGVucywKLX07Ci0KLXR5cGVk
ZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzKSB7Ci0g
ICAgVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHNEdWNrcywKLSAgICBUZXN0UHJvdG9jb2xU
ZXN0Q2FzdGVkQW5pbWFsc0hlbnMsCi0gICAgVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHND
cm93cywKLSAgICBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFsc0ZsYW1pbmdvcywKLX07Ci0K
LQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRl
c3RQcm90b2NvbFRlc3RUeXBlTmVlZGluZ0Nhc3QgOiBSV0lQcm90b2NvbEpTT05PYmplY3QKLS0g
KGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBp
ZD4gKilwYXlsb2FkOwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJX
SVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nIG51bWJlcjooaW50KW51bWJlciBhbmltYWxzOihU
ZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFscylhbmltYWxzIGlkZW50aWZpZXI6KGludClpZGVu
dGlmaWVyIHRyZWU6KFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxICopdHJlZTsKLS8q
IHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqc3RyaW5n
OwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgaW50IG51bWJl
cjsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIFRlc3RQcm90
b2NvbFRlc3RDYXN0ZWRBbmltYWxzIGFuaW1hbHM7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkg
KG5vbmF0b21pYywgYXNzaWduKSBpbnQgaWRlbnRpZmllcjsKLS8qIHJlcXVpcmVkICovIEBwcm9w
ZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3Qx
ICp0cmVlOwotQGVuZAotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkK
LUBpbnRlcmZhY2UgVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgOiBSV0lQcm90b2Nv
bEpTT05PYmplY3QKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFy
eTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkOwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJv
dG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7Ci0vKiBvcHRp
b25hbCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluKSBUZXN0UHJvdG9jb2xUZXN0UmVj
dXJzaXZlT2JqZWN0MiAqb2JqOwotQGVuZAotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgi
ZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDIg
OiBSV0lQcm90b2NvbEpTT05PYmplY3QKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6
KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkOwotLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmpl
Y3Q7Ci0vKiBvcHRpb25hbCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluKSBUZXN0UHJv
dG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSAqb2JqOwotQGVuZAotCi0KLQotCi0KLQotI2ltcG9y
dCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgot
Ci0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xJbnRlcm5hbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1y
ZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFBy
b3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21l
bnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4K
LQotCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2wuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMu
aD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVt
VHlwZT4KLU9wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0
cmluZyYgdmFsdWUpOwotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3Rv
Y29sUGxhdGZvcm0gdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0
UHJvdG9jb2xQbGF0Zm9ybUFsbDoKLSAgICAgICAgcmV0dXJuICJhbGwiX3M7Ci0gICAgY2FzZSBU
ZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM6Ci0gICAgICAgIHJldHVybiAiZ2VuZXJpYyJfczsK
LSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOgotICAgICAgICByZXR1cm4gImlvcyJf
czsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M6Ci0gICAgICAgIHJldHVybiAi
bWFjb3MiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFBy
b3RvY29sUGxhdGZvcm0+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQot
ewotICAgIGlmICh2YWx1ZSA9PSAiYWxsIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBs
YXRmb3JtQWxsOwotICAgIGlmICh2YWx1ZSA9PSAiZ2VuZXJpYyIpCi0gICAgICAgIHJldHVybiBU
ZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM7Ci0gICAgaWYgKHZhbHVlID09ICJpb3MiKQotICAg
ICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1JT1M7Ci0gICAgaWYgKHZhbHVlID09ICJt
YWNvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOwotICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5n
KFRlc3RQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHMgdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZh
bHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzUGlnczoKLSAg
ICAgICAgcmV0dXJuICJQaWdzIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sVGVzdFVuY2FzdGVk
QW5pbWFsc0Nvd3M6Ci0gICAgICAgIHJldHVybiAiQ293cyJfczsKLSAgICBjYXNlIFRlc3RQcm90
b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHNDYXRzOgotICAgICAgICByZXR1cm4gIkNhdHMiX3M7Ci0g
ICAgY2FzZSBUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzSGVuczoKLSAgICAgICAgcmV0
dXJuICJIZW5zIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRl
c3RQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHM+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBT
dHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiUGlncyIpCi0gICAgICAgIHJldHVy
biBUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzUGlnczsKLSAgICBpZiAodmFsdWUgPT0g
IkNvd3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc0Nv
d3M7Ci0gICAgaWYgKHZhbHVlID09ICJDYXRzIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2Nv
bFRlc3RVbmNhc3RlZEFuaW1hbHNDYXRzOwotICAgIGlmICh2YWx1ZSA9PSAiSGVucyIpCi0gICAg
ICAgIHJldHVybiBUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzSGVuczsKLSAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwotfQotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVz
dFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHMgdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7
Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFsc0R1Y2tzOgotICAgICAgICBy
ZXR1cm4gIkR1Y2tzIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHNI
ZW5zOgotICAgICAgICByZXR1cm4gIkhlbnMiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xUZXN0
Q2FzdGVkQW5pbWFsc0Nyb3dzOgotICAgICAgICByZXR1cm4gIkNyb3dzIl9zOwotICAgIGNhc2Ug
VGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHNGbGFtaW5nb3M6Ci0gICAgICAgIHJldHVybiAi
RmxhbWluZ29zIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRl
c3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gIkR1Y2tzIikKLSAgICAgICAgcmV0dXJu
IFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzRHVja3M7Ci0gICAgaWYgKHZhbHVlID09ICJI
ZW5zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzSGVuczsK
LSAgICBpZiAodmFsdWUgPT0gIkNyb3dzIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFRl
c3RDYXN0ZWRBbmltYWxzQ3Jvd3M7Ci0gICAgaWYgKHZhbHVlID09ICJGbGFtaW5nb3MiKQotICAg
ICAgICByZXR1cm4gVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHNGbGFtaW5nb3M7Ci0gICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgotLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJU
ZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9j
b2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1A
aW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoVGVzdERvbWFpbikKLQotKyAo
dm9pZClfcGFyc2VUeXBlTmVlZGluZ0Nhc3Q6KFRlc3RQcm90b2NvbFRlc3RUeXBlTmVlZGluZ0Nh
c3QgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZUNh
c3RlZE9iamVjdElkOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9h
ZDsKLSsgKHZvaWQpX3BhcnNlVW5jYXN0ZWRPYmplY3RJZDooTlNOdW1iZXIgKiopb3V0VmFsdWUg
ZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZVVuY2FzdGVkQW5pbWFsczoo
TlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9w
YXJzZUNhc3RlZEFuaW1hbHM6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClw
YXlsb2FkOwotKyAodm9pZClfcGFyc2VSZWN1cnNpdmVPYmplY3QxOihUZXN0UHJvdG9jb2xUZXN0
UmVjdXJzaXZlT2JqZWN0MSAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLSsg
KHZvaWQpX3BhcnNlUmVjdXJzaXZlT2JqZWN0MjooVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9i
amVjdDIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0KLUBlbmQKLQotQGlt
cGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoVGVzdERvbWFpbikKLQot
KyAodm9pZClfcGFyc2VUeXBlTmVlZGluZ0Nhc3Q6KFRlc3RQcm90b2NvbFRlc3RUeXBlTmVlZGlu
Z0Nhc3QgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19F
WENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKLSAg
ICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbFRlc3RUeXBlTmVlZGluZ0Nhc3QgYWxsb2NdIGlu
aXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKLX0KLQotKyAodm9pZClfcGFyc2VDYXN0ZWRPYmplY3RJ
ZDooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBU
SFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU051bWJlciBjbGFzc10pOwot
ICAgICpvdXRWYWx1ZSA9IChOU051bWJlciAqKXBheWxvYWQ7Ci19Ci0KLSsgKHZvaWQpX3BhcnNl
VW5jYXN0ZWRPYmplY3RJZDooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBh
eWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU051
bWJlciBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IChOU051bWJlciAqKXBheWxvYWQ7Ci19Ci0K
LSsgKHZvaWQpX3BhcnNlVW5jYXN0ZWRBbmltYWxzOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9t
UGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUo
cGF5bG9hZCwgW05TU3RyaW5nIGNsYXNzXSk7Ci0gICAgT3B0aW9uYWw8VGVzdFByb3RvY29sVGVz
dFVuY2FzdGVkQW5pbWFscz4gcmVzdWx0ID0gSW5zcGVjdG9yOjpmcm9tUHJvdG9jb2xTdHJpbmc8
VGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFscz4ocGF5bG9hZCk7Ci0gICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9CQURfRU5VTV9WQUxVRShyZXN1bHQsIEAiVW5jYXN0ZWRBbmltYWxzIik7Ci0g
ICAgKm91dFZhbHVlID0gQChyZXN1bHQudmFsdWUoKSk7Ci19Ci0KLSsgKHZvaWQpX3BhcnNlQ2Fz
dGVkQW5pbWFsczooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQK
LXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBj
bGFzc10pOwotICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzPiByZXN1
bHQgPSBJbnNwZWN0b3I6OmZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xUZXN0Q2FzdGVk
QW5pbWFscz4ocGF5bG9hZCk7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfRU5VTV9WQUxV
RShyZXN1bHQsIEAiQ2FzdGVkQW5pbWFscyIpOwotICAgICpvdXRWYWx1ZSA9IEAocmVzdWx0LnZh
bHVlKCkpOwotfQotCi0rICh2b2lkKV9wYXJzZVJlY3Vyc2l2ZU9iamVjdDE6KFRlc3RQcm90b2Nv
bFRlc3RSZWN1cnNpdmVPYmplY3QxICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2Fk
Ci17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNEaWN0aW9u
YXJ5IGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZl
T2JqZWN0MSBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOwotfQotCi0rICh2b2lkKV9w
YXJzZVJlY3Vyc2l2ZU9iamVjdDI6KFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QyICoq
KW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7Ci0gICAgKm91dFZh
bHVlID0gW1tUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MiBhbGxvY10gaW5pdFdpdGhQ
YXlsb2FkOnBheWxvYWRdOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVz
Lm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVu
dGltZS1jYXN0cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29s
SlNPTk9iamVjdFByaXZhdGUuaD4KLSNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW1wb3J0
IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLUBp
bXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUZXN0VHlwZU5lZWRpbmdDYXN0Ci0KLS0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICos
IGlkPiAqKXBheWxvYWQKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAg
ICAgcmV0dXJuIG5pbDsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVS
VFkocGF5bG9hZFtAInN0cmluZyJdLCBAInN0cmluZyIpOwotICAgIHNlbGYuc3RyaW5nID0gcGF5
bG9hZFtAInN0cmluZyJdOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9Q
RVJUWShwYXlsb2FkW0AibnVtYmVyIl0sIEAibnVtYmVyIik7Ci0gICAgc2VsZi5udW1iZXIgPSBb
cGF5bG9hZFtAIm51bWJlciJdIGludGVnZXJWYWx1ZV07Ci0KLSAgICBUSFJPV19FWENFUFRJT05f
Rk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJhbmltYWxzIl0sIEAiYW5pbWFscyIpOwot
ICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzPiBhbmltYWxzID0gZnJv
bVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzPihwYXlsb2FkW0Ai
YW5pbWFscyJdKTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9FTlVNX1ZBTFVFKGFuaW1h
bHMsIEAiYW5pbWFscyIpOwotICAgIHNlbGYuYW5pbWFscyA9IGFuaW1hbHMudmFsdWUoKTsKLQot
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImlkIl0s
IEAiaWQiKTsKLSAgICBzZWxmLmlkZW50aWZpZXIgPSBbcGF5bG9hZFtAImlkIl0gaW50ZWdlclZh
bHVlXTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9h
ZFtAInRyZWUiXSwgQCJ0cmVlIik7Ci0gICAgc2VsZi50cmVlID0gW1tUZXN0UHJvdG9jb2xUZXN0
UmVjdXJzaXZlT2JqZWN0MSBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRbQCJ0cmVlIl1d
OwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2Nv
bE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopb2JqZWN0Ci17Ci0gICAgaWYgKCEoc2Vs
ZiA9IFtzdXBlciBpbml0V2l0aEpTT05PYmplY3Q6W29iamVjdCB0b0pTT05PYmplY3RdLmdldCgp
XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZyBudW1iZXI6KGludClu
dW1iZXIgYW5pbWFsczooVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHMpYW5pbWFscyBpZGVu
dGlmaWVyOihpbnQpaWRlbnRpZmllciB0cmVlOihUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2Jq
ZWN0MSAqKXRyZWUKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAg
cmV0dXJuIG5pbDsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFko
c3RyaW5nLCBAInN0cmluZyIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJP
UEVSVFkodHJlZSwgQCJ0cmVlIik7Ci0KLSAgICBzZWxmLnN0cmluZyA9IHN0cmluZzsKLSAgICBz
ZWxmLm51bWJlciA9IG51bWJlcjsKLSAgICBzZWxmLmFuaW1hbHMgPSBhbmltYWxzOwotICAgIHNl
bGYuaWRlbnRpZmllciA9IGlkZW50aWZpZXI7Ci0gICAgc2VsZi50cmVlID0gdHJlZTsKLQotICAg
IHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKXNldFN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcK
LXsKLSAgICBbc3VwZXIgc2V0U3RyaW5nOnN0cmluZyBmb3JLZXk6QCJzdHJpbmciXTsKLX0KLQot
LSAoTlNTdHJpbmcgKilzdHJpbmcKLXsKLSAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpA
InN0cmluZyJdOwotfQotCi0tICh2b2lkKXNldE51bWJlcjooaW50KW51bWJlcgotewotICAgIFtz
dXBlciBzZXRJbnRlZ2VyOm51bWJlciBmb3JLZXk6QCJudW1iZXIiXTsKLX0KLQotLSAoaW50KW51
bWJlcgotewotICAgIHJldHVybiBbc3VwZXIgaW50ZWdlckZvcktleTpAIm51bWJlciJdOwotfQot
Ci0tICh2b2lkKXNldEFuaW1hbHM6KFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzKWFuaW1h
bHMKLXsKLSAgICBbc3VwZXIgc2V0U3RyaW5nOnRvUHJvdG9jb2xTdHJpbmcoYW5pbWFscykgZm9y
S2V5OkAiYW5pbWFscyJdOwotfQotCi0tIChUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFscylh
bmltYWxzCi17Ci0gICAgcmV0dXJuIGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xUZXN0
Q2FzdGVkQW5pbWFscz4oW3N1cGVyIHN0cmluZ0ZvcktleTpAImFuaW1hbHMiXSkudmFsdWUoKTsK
LX0KLQotLSAodm9pZClzZXRJZGVudGlmaWVyOihpbnQpaWRlbnRpZmllcgotewotICAgIFtzdXBl
ciBzZXRJbnRlZ2VyOmlkZW50aWZpZXIgZm9yS2V5OkAiaWQiXTsKLX0KLQotLSAoaW50KWlkZW50
aWZpZXIKLXsKLSAgICByZXR1cm4gW3N1cGVyIGludGVnZXJGb3JLZXk6QCJpZCJdOwotfQotCi0t
ICh2b2lkKXNldFRyZWU6KFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxICopdHJlZQot
ewotICAgIFtzdXBlciBzZXRPYmplY3Q6dHJlZSBmb3JLZXk6QCJ0cmVlIl07Ci19Ci0KLS0gKFRl
c3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxICopdHJlZQotewotICAgIFJXSVByb3RvY29s
SlNPTk9iamVjdCAqb2JqZWN0ID0gW3N1cGVyIG9iamVjdEZvcktleTpAInRyZWUiXTsKLSAgICBp
ZiAoIW9iamVjdCkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4gW1tUZXN0UHJvdG9j
b2xUZXN0UmVjdXJzaXZlT2JqZWN0MSBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0Oltbc3VwZXIg
b2JqZWN0Rm9yS2V5OkAidHJlZSJdIHRvSlNPTk9iamVjdF0uZ2V0KCldOwotfQotCi1AZW5kCi0K
LUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MQotCi0tIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmlu
ZyAqLCBpZD4gKilwYXlsb2FkCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0g
ICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBzZWxmLm9iaiA9IFtbVGVzdFByb3RvY29sVGVzdFJl
Y3Vyc2l2ZU9iamVjdDIgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkW0Aib2JqIl1dOwot
Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9i
amVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopb2JqZWN0Ci17Ci0gICAgaWYgKCEoc2VsZiA9
IFtzdXBlciBpbml0V2l0aEpTT05PYmplY3Q6W29iamVjdCB0b0pTT05PYmplY3RdLmdldCgpXSkp
Ci0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClz
ZXRPYmo6KFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QyICopb2JqCi17Ci0gICAgW3N1
cGVyIHNldE9iamVjdDpvYmogZm9yS2V5OkAib2JqIl07Ci19Ci0KLS0gKFRlc3RQcm90b2NvbFRl
c3RSZWN1cnNpdmVPYmplY3QyICopb2JqCi17Ci0gICAgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpv
YmplY3QgPSBbc3VwZXIgb2JqZWN0Rm9yS2V5OkAib2JqIl07Ci0gICAgaWYgKCFvYmplY3QpCi0g
ICAgICAgIHJldHVybiBuaWw7Ci0gICAgcmV0dXJuIFtbVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2
ZU9iamVjdDIgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDpbW3N1cGVyIG9iamVjdEZvcktleTpA
Im9iaiJdIHRvSlNPTk9iamVjdF0uZ2V0KCldOwotfQotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlv
biBUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MgotCi0tIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXls
b2FkCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJldHVybiBu
aWw7Ci0KLSAgICBzZWxmLm9iaiA9IFtbVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEg
YWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkW0Aib2JqIl1dOwotCi0gICAgcmV0dXJuIHNl
bGY7Ci19Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9j
b2xKU09OT2JqZWN0ICopb2JqZWN0Ci17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0
aEpTT05PYmplY3Q6W29iamVjdCB0b0pTT05PYmplY3RdLmdldCgpXSkpCi0gICAgICAgIHJldHVy
biBuaWw7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClzZXRPYmo6KFRlc3RQcm90
b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxICopb2JqCi17Ci0gICAgW3N1cGVyIHNldE9iamVjdDpv
YmogZm9yS2V5OkAib2JqIl07Ci19Ci0KLS0gKFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmpl
Y3QxICopb2JqCi17Ci0gICAgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvYmplY3QgPSBbc3VwZXIg
b2JqZWN0Rm9yS2V5OkAib2JqIl07Ci0gICAgaWYgKCFvYmplY3QpCi0gICAgICAgIHJldHVybiBu
aWw7Ci0gICAgcmV0dXJuIFtbVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgYWxsb2Nd
IGluaXRXaXRoSlNPTk9iamVjdDpbW3N1cGVyIG9iamVjdEZvcktleTpAIm9iaiJdIHRvSlNPTk9i
amVjdF0uZ2V0KCldOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xU
eXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29u
LXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL2V4cGVjdGVkL3R5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0MzBlZGU1MDhiLi4wMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9l
eHBlY3RlZC90eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0CisrKyAvZGV2L251
bGwKQEAgLTEsMTE2NCArMCwwIEBACi0jIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENv
bW1hbmRzLmpzCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRoLW9w
ZW4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0jIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0j
aWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0KLSNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xUeXBlcy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJv
bnRlbmRSb3V0ZXIuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRj
aGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERp
c3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9Ci0gICAgQmFja2VuZERpc3BhdGNoZXIq
IGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5n
ZXQoKTsgfQotcHJpdmF0ZToKLSAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2Vu
ZERpc3BhdGNoZXI7Ci19OwotCi0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotI2Vu
ZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotIyMjIEVuZCBG
aWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90
b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKLQotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KLQotCi19IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVy
cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3
dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQotI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMu
aCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLX0gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0j
aW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVz
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0
b3IgewotCi1jbGFzcyBGcm9udGVuZFJvdXRlcjsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
Ci0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0K
LSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSB0eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi1uYW1lc3BhY2UgUHJvdG9jb2wg
ewotCi0KLQotLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCi1uYW1lc3BhY2UgVGVzdCB7Ci1jbGFz
cyBOb09wZW5QYXJhbWV0ZXJzOwotY2xhc3MgT3BlblBhcmFtZXRlcnM7Ci19IC8vIFRlc3QKLS8v
IEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KLQotCi0KLQotbmFtZXNwYWNlIFRlc3Qgewot
Y2xhc3MgTm9PcGVuUGFyYW1ldGVycyA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKLXB1Ymxp
YzoKLSAgICBlbnVtIHsKLSAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAotICAgICAgICBPbmVTZXQg
PSAxIDw8IDAsCi0gICAgICAgIFR3b1NldCA9IDEgPDwgMSwKLSAgICAgICAgQWxsRmllbGRzU2V0
ID0gKE9uZVNldCB8IFR3b1NldCkKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8aW50IFNUQVRFPgot
ICAgIGNsYXNzIEJ1aWxkZXIgewotICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0cjxKU09OOjpP
YmplY3Q+IG1fcmVzdWx0OwotCi0gICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNU
QVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAq
cmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKLSAgICAgICAg
fQotCi0gICAgICAgIEJ1aWxkZXIoUmVmPC8qTm9PcGVuUGFyYW1ldGVycyovSlNPTjo6T2JqZWN0
PiYmIG9iamVjdCkKLSAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwg
YnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKLSAgICAgICAgfQotICAgICAgICBm
cmllbmQgY2xhc3MgTm9PcGVuUGFyYW1ldGVyczsKLSAgICBwdWJsaWM6Ci0KLSAgICAgICAgQnVp
bGRlcjxTVEFURSB8IE9uZVNldD4mIHNldE9uZShkb3VibGUgdmFsdWUpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBPbmVTZXQpLCBwcm9wZXJ0eV9vbmVf
YWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldERvdWJsZSgib25lIl9zLCB2
YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE9uZVNldD4oKTsKLSAgICAgICAg
fQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUd29TZXQ+JiBzZXRUd28oZG91YmxlIHZhbHVl
KQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVHdvU2V0
KSwgcHJvcGVydHlfdHdvX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRE
b3VibGUoInR3byJfcywgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUd29T
ZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBSZWY8Tm9PcGVuUGFyYW1ldGVycz4gcmVsZWFz
ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZp
ZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VS
VChzaXplb2YoTm9PcGVuUGFyYW1ldGVycykgPT0gc2l6ZW9mKEpTT046Ok9iamVjdCksIGNhbm5v
dF9jYXN0KTsKLQotICAgICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4ganNvblJlc3VsdCA9IG1f
cmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7Ci0gICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFdURk1v
dmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPE5vT3BlblBhcmFtZXRlcnM+Kj4oJmpzb25SZXN1bHQp
KTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAg
LyoKLSAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6Ci0gICAgICogUmVmPE5vT3BlblBhcmFt
ZXRlcnM+IHJlc3VsdCA9IE5vT3BlblBhcmFtZXRlcnM6OmNyZWF0ZSgpCi0gICAgICogICAgIC5z
ZXRPbmUoLi4uKQotICAgICAqICAgICAuc2V0VHdvKC4uLikKLSAgICAgKiAgICAgLnJlbGVhc2Uo
KTsKLSAgICAgKi8KLSAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpKTsKLSAgICB9Ci19OwotCi1jbGFzcyBPcGVuUGFyYW1ldGVycyA6IHB1YmxpYyBKU09O
OjpPYmplY3QgewotcHVibGljOgotICAgIGVudW0gewotICAgICAgICBOb0ZpZWxkc1NldCA9IDAs
Ci0gICAgICAgIEFscGhhU2V0ID0gMSA8PCAwLAotICAgICAgICBCZXRhU2V0ID0gMSA8PCAxLAot
ICAgICAgICBBbGxGaWVsZHNTZXQgPSAoQWxwaGFTZXQgfCBCZXRhU2V0KQotICAgIH07Ci0KLSAg
ICB0ZW1wbGF0ZTxpbnQgU1RBVEU+Ci0gICAgY2xhc3MgQnVpbGRlciB7Ci0gICAgcHJpdmF0ZToK
LSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7Ci0KLSAgICAgICAgdGVtcGxh
dGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBT
VEVQPio+KHRoaXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcihSZWY8LypPcGVuUGFy
YW1ldGVycyovSlNPTjo6T2JqZWN0PiYmIG9iamVjdCkKLSAgICAgICAgICAgIDogbV9yZXN1bHQo
V1RGTW92ZShvYmplY3QpKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChT
VEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsK
LSAgICAgICAgfQotICAgICAgICBmcmllbmQgY2xhc3MgT3BlblBhcmFtZXRlcnM7Ci0gICAgcHVi
bGljOgotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBBbHBoYVNldD4mIHNldEFscGhhKGRvdWJs
ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IEFscGhhU2V0KSwgcHJvcGVydHlfYWxwaGFfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldERvdWJsZSgiYWxwaGEiX3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8QWxwaGFTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgQmV0YVNldD4mIHNldEJldGEoZG91YmxlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQmV0YVNldCksIHByb3BlcnR5X2JldGFfYWxyZWFk
eV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldERvdWJsZSgiYmV0YSJfcywgdmFsdWUp
OwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxCZXRhU2V0PigpOwotICAgICAgICB9Ci0K
LSAgICAgICAgUmVmPE9wZW5QYXJhbWV0ZXJzPiByZWxlYXNlKCkKLSAgICAgICAgewotICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90
X3JlYWR5KTsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihPcGVuUGFyYW1ldGVy
cykgPT0gc2l6ZW9mKEpTT046Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsKLQotICAgICAgICAgICAg
UmVmPEpTT046Ok9iamVjdD4ganNvblJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7
Ci0gICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVm
PE9wZW5QYXJhbWV0ZXJzPio+KCZqc29uUmVzdWx0KSk7Ci0gICAgICAgICAgICByZXR1cm4gcmVz
dWx0OwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIC8qCi0gICAgICogU3ludGhldGljIGNvbnN0
cnVjdG9yOgotICAgICAqIFJlZjxPcGVuUGFyYW1ldGVycz4gcmVzdWx0ID0gT3BlblBhcmFtZXRl
cnM6OmNyZWF0ZSgpCi0gICAgICogICAgIC5zZXRBbHBoYSguLi4pCi0gICAgICogICAgIC5zZXRC
ZXRhKC4uLikKLSAgICAgKiAgICAgLnJlbGVhc2UoKTsKLSAgICAgKi8KLSAgICBzdGF0aWMgQnVp
bGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBCdWlsZGVy
PE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKLSAgICB9Ci0KLSAgICAvLyBQ
cm9wZXJ0eSBuYW1lcyBmb3IgdHlwZSBnZW5lcmF0ZWQgYXMgb3Blbi4KLSAgICBOb25lIHN0YXRp
YyBjb25zdCBjaGFyKiBBbHBoYTsKLX07Ci0KLX0gLy8gVGVzdAotCi0KLQotfSAvLyBuYW1lc3Bh
Y2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbE9iamVjdHMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0
cy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXdpdGgtb3Blbi1w
YXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIK
LQotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLWNv
bnN0IGNoYXIqIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6Ok9wZW5QYXJhbWV0ZXJzOjpBbHBo
YSA9ICJhbHBoYSI7Ci0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0KLSMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW5j
bHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi0KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQot
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFj
a2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmRE
aXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtd2l0
aC1vcGVuLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tl
bmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNp
bmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbmNsdWRlIDx3dGYvSlNP
TlZhbHVlcy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1t
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8V2Vi
SW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgi
ZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2Jq
ZWN0Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgK
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVz
dFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5h
bC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgotI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4K
LSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgot
Ci11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3Rv
Y29sQ29uZmlndXJhdGlvbgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciog
X2NvbnRyb2xsZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1
Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBb
c3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFT
U0VSVChjb250cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0
dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAgIFtzdXBlciBkZWFsbG9jXTsK
LX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5t
bQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMu
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0
ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMuaCIKLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFj
ZSBJbnNwZWN0b3I7Ci0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNo
ZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxGb3VuZGF0aW9u
L0ZvdW5kYXRpb24uaD4KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9i
amVjdC5oPgotCi0KLUBjbGFzcyBUZXN0UHJvdG9jb2xUZXN0Tm9PcGVuUGFyYW1ldGVyczsKLUBj
bGFzcyBUZXN0UHJvdG9jb2xUZXN0T3BlblBhcmFtZXRlcnM7Ci0KLXR5cGVkZWYgTlNfRU5VTShO
U0ludGVnZXIsIFRlc3RQcm90b2NvbFBsYXRmb3JtKSB7Ci0gICAgVGVzdFByb3RvY29sUGxhdGZv
cm1BbGwsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljLAotICAgIFRlc3RQcm90b2Nv
bFBsYXRmb3JtSU9TLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1MsCi19OwotCi0KLQot
Ci1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVz
dFByb3RvY29sVGVzdE5vT3BlblBhcmFtZXRlcnMgOiBSV0lQcm90b2NvbEpTT05PYmplY3QKLS0g
KGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBp
ZD4gKilwYXlsb2FkOwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJX
SVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhPbmU6KGRvdWJsZSlvbmUgdHdvOihkb3VibGUpdHdvOwotLyogcmVxdWlyZWQgKi8gQHByb3Bl
cnR5IChub25hdG9taWMsIGFzc2lnbikgZG91YmxlIG9uZTsKLS8qIHJlcXVpcmVkICovIEBwcm9w
ZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGRvdWJsZSB0d287Ci1AZW5kCi0KLV9fYXR0cmlidXRl
X18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUZXN0
T3BlblBhcmFtZXRlcnMgOiBSV0lQcm90b2NvbEpTT05PYmplY3QKLS0gKGluc3RhbmNldHlwZSlp
bml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkOwot
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9i
amVjdCAqKWpzb25PYmplY3Q7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhBbHBoYTooZG91Ymxl
KWFscGhhIGJldGE6KGRvdWJsZSliZXRhOwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25h
dG9taWMsIGFzc2lnbikgZG91YmxlIGFscGhhOwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChu
b25hdG9taWMsIGFzc2lnbikgZG91YmxlIGJldGE7Ci1AZW5kCi0KLQotCi0KLQotCi0jaW1wb3J0
IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+Ci0K
LSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbEludGVybmFsLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXdp
dGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2xKU09OT2JqZWN0UHJpdmF0ZS5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFi
bGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi0K
LQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgot
I2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgotCi1u
YW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgot
T3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2
YWx1ZSk7Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xQbGF0
Zm9ybSB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQcm90b2Nv
bFBsYXRmb3JtQWxsOgotICAgICAgICByZXR1cm4gImFsbCJfczsKLSAgICBjYXNlIFRlc3RQcm90
b2NvbFBsYXRmb3JtR2VuZXJpYzoKLSAgICAgICAgcmV0dXJuICJnZW5lcmljIl9zOwotICAgIGNh
c2UgVGVzdFByb3RvY29sUGxhdGZvcm1JT1M6Ci0gICAgICAgIHJldHVybiAiaW9zIl9zOwotICAg
IGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzoKLSAgICAgICAgcmV0dXJuICJtYWNvcyJf
czsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xQ
bGF0Zm9ybT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAg
aWYgKHZhbHVlID09ICJhbGwiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1B
bGw7Ci0gICAgaWYgKHZhbHVlID09ICJnZW5lcmljIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90
b2NvbFBsYXRmb3JtR2VuZXJpYzsKLSAgICBpZiAodmFsdWUgPT0gImlvcyIpCi0gICAgICAgIHJl
dHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzsKLSAgICBpZiAodmFsdWUgPT0gIm1hY29zIikK
LSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M7Ci0gICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKLX0KLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSB0eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3Rv
Y29sVHlwZVBhcnNlci5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9i
amVjdFByaXZhdGUuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGludGVyZmFj
ZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFRlc3REb21haW4pCi0KLSsgKHZvaWQpX3Bh
cnNlTm9PcGVuUGFyYW1ldGVyczooVGVzdFByb3RvY29sVGVzdE5vT3BlblBhcmFtZXRlcnMgKiop
b3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZU9wZW5QYXJh
bWV0ZXJzOihUZXN0UHJvdG9jb2xUZXN0T3BlblBhcmFtZXRlcnMgKiopb3V0VmFsdWUgZnJvbVBh
eWxvYWQ6KGlkKXBheWxvYWQ7Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucyAoVGVzdERvbWFpbikKLQotKyAodm9pZClfcGFyc2VOb09wZW5QYXJh
bWV0ZXJzOihUZXN0UHJvdG9jb2xUZXN0Tm9PcGVuUGFyYW1ldGVycyAqKilvdXRWYWx1ZSBmcm9t
UGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUo
cGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IFtbVGVzdFBy
b3RvY29sVGVzdE5vT3BlblBhcmFtZXRlcnMgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2Fk
XTsKLX0KLQotKyAodm9pZClfcGFyc2VPcGVuUGFyYW1ldGVyczooVGVzdFByb3RvY29sVGVzdE9w
ZW5QYXJhbWV0ZXJzICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNz
XSk7Ci0gICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xUZXN0T3BlblBhcmFtZXRlcnMgYWxs
b2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xUeXBlcy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUt
d2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0
ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9S
V0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5o
PgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3Rv
cjsKLQotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVGVzdE5vT3BlblBhcmFtZXRlcnMK
LQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8
TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5p
dF0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFV
SVJFRF9QUk9QRVJUWShwYXlsb2FkW0Aib25lIl0sIEAib25lIik7Ci0gICAgc2VsZi5vbmUgPSBb
cGF5bG9hZFtAIm9uZSJdIGRvdWJsZVZhbHVlXTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
UkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAInR3byJdLCBAInR3byIpOwotICAgIHNlbGYudHdv
ID0gW3BheWxvYWRbQCJ0d28iXSBkb3VibGVWYWx1ZV07Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0K
LS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05P
YmplY3QgKilvYmplY3QKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoSlNPTk9i
amVjdDpbb2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0KCldKSkKLSAgICAgICAgcmV0dXJuIG5pbDsK
LQotICAgIHJldHVybiBzZWxmOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhPbmU6KGRv
dWJsZSlvbmUgdHdvOihkb3VibGUpdHdvCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0
XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBzZWxmLm9uZSA9IG9uZTsKLSAgICBzZWxm
LnR3byA9IHR3bzsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKXNldE9uZTooZG91
YmxlKW9uZQotewotICAgIFtzdXBlciBzZXREb3VibGU6b25lIGZvcktleTpAIm9uZSJdOwotfQot
Ci0tIChkb3VibGUpb25lCi17Ci0gICAgcmV0dXJuIFtzdXBlciBkb3VibGVGb3JLZXk6QCJvbmUi
XTsKLX0KLQotLSAodm9pZClzZXRUd286KGRvdWJsZSl0d28KLXsKLSAgICBbc3VwZXIgc2V0RG91
YmxlOnR3byBmb3JLZXk6QCJ0d28iXTsKLX0KLQotLSAoZG91YmxlKXR3bwotewotICAgIHJldHVy
biBbc3VwZXIgZG91YmxlRm9yS2V5OkAidHdvIl07Ci19Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0
aW9uIFRlc3RQcm90b2NvbFRlc3RPcGVuUGFyYW1ldGVycwotCi0tIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXls
b2FkCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJldHVybiBu
aWw7Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRb
QCJhbHBoYSJdLCBAImFscGhhIik7Ci0gICAgc2VsZi5hbHBoYSA9IFtwYXlsb2FkW0AiYWxwaGEi
XSBkb3VibGVWYWx1ZV07Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BF
UlRZKHBheWxvYWRbQCJiZXRhIl0sIEAiYmV0YSIpOwotICAgIHNlbGYuYmV0YSA9IFtwYXlsb2Fk
W0AiYmV0YSJdIGRvdWJsZVZhbHVlXTsKLQotICAgIHJldHVybiBzZWxmOwotfQotLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9i
amVjdAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmpl
Y3QgdG9KU09OT2JqZWN0XS5nZXQoKV0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgcmV0
dXJuIHNlbGY7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aEFscGhhOihkb3VibGUpYWxw
aGEgYmV0YTooZG91YmxlKWJldGEKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkK
LSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIHNlbGYuYWxwaGEgPSBhbHBoYTsKLSAgICBzZWxm
LmJldGEgPSBiZXRhOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpc2V0QWxwaGE6
KGRvdWJsZSlhbHBoYQotewotICAgIFtzdXBlciBzZXREb3VibGU6YWxwaGEgZm9yS2V5OkAiYWxw
aGEiXTsKLX0KLQotLSAoZG91YmxlKWFscGhhCi17Ci0gICAgcmV0dXJuIFtzdXBlciBkb3VibGVG
b3JLZXk6QCJhbHBoYSJdOwotfQotCi0tICh2b2lkKXNldEJldGE6KGRvdWJsZSliZXRhCi17Ci0g
ICAgW3N1cGVyIHNldERvdWJsZTpiZXRhIGZvcktleTpAImJldGEiXTsKLX0KLQotLSAoZG91Ymxl
KWJldGEKLXsKLSAgICByZXR1cm4gW3N1cGVyIGRvdWJsZUZvcktleTpAImJldGEiXTsKLX0KLQot
QGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4
cGVjdGVkL3ZlcnNpb24uanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC92ZXJzaW9uLmpzb24tcmVzdWx0CmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNGU4N2RjNDczOS4uMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMv
ZXhwZWN0ZWQvdmVyc2lvbi5qc29uLXJlc3VsdAorKysgL2Rldi9udWxsCkBAIC0xLDg4MCArMCww
IEBACi0jIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lvbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLS8vIFZlcnNpb25Eb21haW4KLUluc3BlY3RvckJh
Y2tlbmQucmVnaXN0ZXJEb21haW4oIlZlcnNpb25Eb21haW4iLCBudWxsKTsKLUluc3BlY3RvckJh
Y2tlbmQucmVnaXN0ZXJWZXJzaW9uKCJWZXJzaW9uRG9tYWluIiwgNDIpOwotSW5zcGVjdG9yQmFj
a2VuZC5hY3RpdmF0ZURvbWFpbigiVmVyc2lvbkRvbWFpbiIsIG51bGwpOwotIyMjIEVuZCBGaWxl
OiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHZlcnNpb24uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKLSNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0
b3IgewotCi1jbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAg
dm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlz
cGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQot
ICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJu
IG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPEJhY2tl
bmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwotfTsKLQotCi0KLQotfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKLSMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVy
cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0
UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFt
ZXNwYWNlIEluc3BlY3RvciB7Ci0KLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCi0KLQot
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0
Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMu
aD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
LSNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jZW5kaWYKLQot
bmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQot
IyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIHZlcnNpb24uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIK
LSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgRnJvbnRlbmRSb3V0ZXI7Ci0K
LX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNw
YXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gdmVyc2lvbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5h
bWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotLy8gVmVy
c2lvbnMuCi1uYW1lc3BhY2UgVmVyc2lvbkRvbWFpbiB7Ci1zdGF0aWMgY29uc3RleHByIHVuc2ln
bmVkIFZFUlNJT04gPSA0MjsKLX0gLy8gVmVyc2lvbkRvbWFpbgotLy8gRW5kIG9mIHZlcnNpb25z
LgotCi0KLQotCi0KLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gdmVyc2lvbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9j
b2xPYmplY3RzLmgiCi0KLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1uYW1lc3BhY2UgUHJv
dG9jb2wgewotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lvbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRy
Lmg+Ci0KLQotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi19IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAot
Ci0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lvbi5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9y
dCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlICJUZXN0UHJv
dG9jb2xJbnRlcm5hbC5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5o
IgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Igewot
Ci19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xC
YWNrZW5kRGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZp
Z3VyYXRpb24uaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHZlcnNpb24uanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxX
ZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+Ci0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkg
KCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNP
YmplY3QKLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24u
aAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHZlcnNpb24uanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1
cmF0aW9uLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW1wb3J0ICJU
ZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9B
dWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2ltcG9ydCA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0KLXVzaW5nIG5hbWVzcGFj
ZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9u
Ci17Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKLX0K
LQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0
b3JDb250cm9sbGVyKiljb250cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAg
ICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIp
OwotICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQot
LSAodm9pZClkZWFsbG9jCi17Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi1AZW5kCi0KLQot
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gdmVyc2lvbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBv
cnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8d3RmL0pTT05WYWx1
ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0jIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lvbi5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPEZvdW5k
YXRpb24vRm91bmRhdGlvbi5oPgotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xK
U09OT2JqZWN0Lmg+Ci0KLQotCi0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90
b2NvbFBsYXRmb3JtKSB7Ci0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1BbGwsCi0gICAgVGVzdFBy
b3RvY29sUGxhdGZvcm1HZW5lcmljLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TLAotICAg
IFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1MsCi19OwotCi0KLQotCi0KLQotCi0KLQotCi0jaW1w
b3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbEludGVybmFsLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJz
aW9uLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2lt
cG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJp
dmF0ZS5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250
cm9sbGVyLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi0KLQotCi0jIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVy
c2lvbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNp
bXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29s
QXJyYXlDb252ZXJzaW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdGVtcGxhdGU8
dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgotT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9j
b2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2Nv
bFN0cmluZyhUZXN0UHJvdG9jb2xQbGF0Zm9ybSB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUp
IHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOgotICAgICAgICByZXR1cm4gImFs
bCJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzoKLSAgICAgICAgcmV0
dXJuICJnZW5lcmljIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1JT1M6Ci0gICAg
ICAgIHJldHVybiAiaW9zIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzoK
LSAgICAgICAgcmV0dXJuICJtYWNvcyJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGlu
ZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xQbGF0Zm9ybT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0
IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJhbGwiKQotICAgICAgICByZXR1
cm4gVGVzdFByb3RvY29sUGxhdGZvcm1BbGw7Ci0gICAgaWYgKHZhbHVlID09ICJnZW5lcmljIikK
LSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzsKLSAgICBpZiAodmFs
dWUgPT0gImlvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzsKLSAg
ICBpZiAodmFsdWUgPT0gIm1hY29zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRm
b3JtTWFjT1M7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgK
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHZlcnNpb24uanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJv
dG9jb2xUeXBlUGFyc2VyLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09O
T2JqZWN0UHJpdmF0ZS5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLQotCi0K
LQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gdmVyc2lvbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVBy
b3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLSNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0j
aW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwot
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24t
Y29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFp
bC1vbi1jb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpz
b24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2ZGY5ZTRiZDljLi4wMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2Vu
ZXJpYy9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJs
ZVR5cGUuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotWwotewotICAgICJkb21h
aW4iOiAiRG9tYWluIiwKLSAgICAiZGVidWdnYWJsZVR5cGVzIjogWyJqYXZhc2NyaXB0Il0sCi0g
ICAgInRhcmdldFR5cGVzIjogWyJ3b3JrZXIiXSwKLSAgICAiY29tbWFuZHMiOiBbeyJuYW1lIjog
IkNvbW1hbmQifV0sCi0gICAgImV2ZW50cyI6IFt7Im5hbWUiOiAiRXZlbnQifV0KLX0KLV0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL2ZhaWwtb24tY29tbWFuZC10YXJnZXRUeXBlcy10eXBlLmpzb24gYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWNvbW1h
bmQtdGFyZ2V0VHlwZXMtdHlwZS5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2
NDA1OWY4NGJjZi4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1jb21tYW5kLXRhcmdldFR5cGVzLXR5
cGUuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotewotICAgICJkb21haW4iOiAi
RG9tYWluIiwKLSAgICAiY29tbWFuZHMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1l
IjogIlBhZ2VPbmx5IiwKLSAgICAgICAgICAgICJ0YXJnZXRUeXBlcyI6ICJwYWdlZSIKLSAgICAg
ICAgfQotICAgIF0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tY29tbWFuZC10YXJnZXRUeXBlcy12YWx1
ZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvZmFpbC1vbi1jb21tYW5kLXRhcmdldFR5cGVzLXZhbHVlLmpzb24KZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDUwMjA0NDcyZWM4Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWNv
bW1hbmQtdGFyZ2V0VHlwZXMtdmFsdWUuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBA
QAotewotICAgICJkb21haW4iOiAiRG9tYWluIiwKLSAgICAiY29tbWFuZHMiOiBbCi0gICAgICAg
IHsKLSAgICAgICAgICAgICJuYW1lIjogIlBhZ2VPbmx5IiwKLSAgICAgICAgICAgICJ0YXJnZXRU
eXBlcyI6IFsicGFnZWUiXQotICAgICAgICB9Ci0gICAgXQotfQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1j
b21tYW5kLXdpdGgtaW52YWxpZC1wbGF0Zm9ybS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1jb21tYW5kLXdpdGgtaW52
YWxpZC1wbGF0Zm9ybS5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMTgwY2Fl
OWJmZi4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1jb21tYW5kLXdpdGgtaW52YWxpZC1wbGF0Zm9y
bS5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotewotICAgICJkb21haW4iOiAi
T3ZlcmxheSIsCi0gICAgImNvbW1hbmRzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAibmFt
ZSI6ICJwcm9jZXNzUG9pbnRzIiwKLSAgICAgICAgICAgICJwbGF0Zm9ybSI6ICJpbnZhbGlkIiwK
LSAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
cG9pbnQxIiwgInR5cGUiOiAibnVtYmVyIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
cG9pbnQyIiwgInR5cGUiOiAibnVtYmVyIiB9Ci0gICAgICAgICAgICBdLAotICAgICAgICAgICAg
InJldHVybnMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJyZXN1bHQiLCAidHlwZSI6
ICJzdHJpbmciIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfQotICAgIF0KLX0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2ZhaWwtb24tZG9tYWluLWRlYnVnZ2FibGVUeXBlcy10eXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWRvbWFpbi1k
ZWJ1Z2dhYmxlVHlwZXMtdHlwZS5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5
NzQ4ZjQyMzQ3My4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kb21haW4tZGVidWdnYWJsZVR5cGVz
LXR5cGUuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotewotICAgICJkb21haW4i
OiAiV2ViT25seSIsCi0gICAgImRlYnVnZ2FibGVUeXBlcyI6ICJ3ZWJiIiwKLSAgICAiY29tbWFu
ZHMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImVuYWJsZSIKLSAgICAgICAg
fQotICAgIF0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZG9tYWluLWRlYnVnZ2FibGVUeXBlcy12YWx1
ZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvZmFpbC1vbi1kb21haW4tZGVidWdnYWJsZVR5cGVzLXZhbHVlLmpzb24KZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyNTJkZGJkODNkLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9u
LWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMtdmFsdWUuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDkg
KzAsMCBAQAotewotICAgICJkb21haW4iOiAiV2ViT25seSIsCi0gICAgImRlYnVnZ2FibGVUeXBl
cyI6IFsid2ViYiJdLAotICAgICJjb21tYW5kcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAg
Im5hbWUiOiAiZW5hYmxlIgotICAgICAgICB9Ci0gICAgXQotfQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1k
b21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbiBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwt
b24tZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24K
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhYTAyODA0NjU3Li4wMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJp
Yy9mYWlsLW9uLWRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlw
ZS5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1bCi17Ci0gICAgImRvbWFpbiI6
ICJEb21haW4iLAotICAgICJkZWJ1Z2dhYmxlVHlwZXMiOiBbImphdmFzY3JpcHQiXSwKLSAgICAi
Y29tbWFuZHMiOiBbeyJuYW1lIjogIkNvbW1hbmQiLCAidGFyZ2V0VHlwZXMiOiBbIndvcmtlciJd
fV0sCi0gICAgImV2ZW50cyI6IFt7Im5hbWUiOiAiRXZlbnQifV0KLX0KLV0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2Zh
aWwtb24tZG9tYWluLXRhcmdldFR5cGVzLXR5cGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZG9tYWluLXRhcmdldFR5
cGVzLXR5cGUuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDgyMjI2NzQxNDYu
LjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZG9tYWluLXRhcmdldFR5cGVzLXR5cGUuanNvbgorKysg
L2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotewotICAgICJkb21haW4iOiAiUGFnZU9ubHkiLAot
ICAgICJ0YXJnZXRUeXBlcyI6ICJwYWdlZSIsCi0gICAgImNvbW1hbmRzIjogWwotICAgICAgICB7
Ci0gICAgICAgICAgICAibmFtZSI6ICJlbmFibGUiCi0gICAgICAgIH0KLSAgICBdCi19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2Vu
ZXJpYy9mYWlsLW9uLWRvbWFpbi10YXJnZXRUeXBlcy12YWx1ZS5qc29uIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kb21haW4t
dGFyZ2V0VHlwZXMtdmFsdWUuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTdi
MTBkN2YxNTQuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZG9tYWluLXRhcmdldFR5cGVzLXZhbHVl
Lmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIlBh
Z2VPbmx5IiwKLSAgICAidGFyZ2V0VHlwZXMiOiBbInBhZ2VlIl0sCi0gICAgImNvbW1hbmRzIjog
WwotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJlbmFibGUiCi0gICAgICAgIH0KLSAg
ICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWR1cGxpY2F0ZS1jb21tYW5kLWNhbGwtcGFyYW1ldGVy
LW5hbWVzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZ2VuZXJpYy9mYWlsLW9uLWR1cGxpY2F0ZS1jb21tYW5kLWNhbGwtcGFyYW1ldGVyLW5hbWVz
Lmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhYjc2Y2E2Mjc5Li4wMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJpYy9mYWlsLW9uLWR1cGxpY2F0ZS1jb21tYW5kLWNhbGwtcGFyYW1ldGVyLW5hbWVzLmpz
b24KKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi17Ci0gICAgImRvbWFpbiI6ICJPdmVy
bGF5IiwKLSAgICAiY29tbWFuZHMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjog
InByb2Nlc3NQb2ludHMiLAotICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCi0gICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJwb2ludCIsICJ0eXBlIjogIm51bWJlciIgfSwKLSAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInBvaW50IiwgInR5cGUiOiAibnVtYmVyIiB9Ci0gICAgICAgICAgICBd
LAotICAgICAgICAgICAgInJldHVybnMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJy
ZXN1bHQxIiwgInR5cGUiOiAic3RyaW5nIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
cmVzdWx0MiIsICJ0eXBlIjogInN0cmluZyIgfQotICAgICAgICAgICAgXQotICAgICAgICB9Ci0g
ICAgXQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1yZXR1cm4tcGFyYW1l
dGVyLW5hbWVzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWR1cGxpY2F0ZS1jb21tYW5kLXJldHVybi1wYXJhbWV0ZXIt
bmFtZXMuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzhiYjE1YzA0YjYuLjAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9nZW5lcmljL2ZhaWwtb24tZHVwbGljYXRlLWNvbW1hbmQtcmV0dXJuLXBhcmFtZXRlci1u
YW1lcy5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotewotICAgICJkb21haW4i
OiAiT3ZlcmxheSIsCi0gICAgImNvbW1hbmRzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAi
bmFtZSI6ICJwcm9jZXNzUG9pbnRzIiwKLSAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwotICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAicG9pbnQxIiwgInR5cGUiOiAibnVtYmVyIiB9LAotICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAicG9pbnQyIiwgInR5cGUiOiAibnVtYmVyIiB9Ci0gICAg
ICAgICAgICBdLAotICAgICAgICAgICAgInJldHVybnMiOiBbCi0gICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJyZXN1bHQiLCAidHlwZSI6ICJzdHJpbmciIH0sCi0gICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJyZXN1bHQiLCAidHlwZSI6ICJzdHJpbmciIH0KLSAgICAgICAgICAgIF0KLSAgICAg
ICAgfQotICAgIF0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZHVwbGljYXRlLWV2ZW50LXBhcmFtZXRl
ci1uYW1lcy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2dlbmVyaWMvZmFpbC1vbi1kdXBsaWNhdGUtZXZlbnQtcGFyYW1ldGVyLW5hbWVzLmpzb24K
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzZDNiM2NjNjQyLi4wMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJp
Yy9mYWlsLW9uLWR1cGxpY2F0ZS1ldmVudC1wYXJhbWV0ZXItbmFtZXMuanNvbgorKysgL2Rldi9u
dWxsCkBAIC0xLDEyICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIk92ZXJsYXkiLAotICAgICJl
dmVudHMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogInByb2Nlc3NlZFBvaW50
cyIsCi0gICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1l
IjogInBvaW50IiwgInR5cGUiOiAibnVtYmVyIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAicG9pbnQiLCAidHlwZSI6ICJudW1iZXIiIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfQot
ICAgIF0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZHVwbGljYXRlLXR5cGUtZGVjbGFyYXRpb25zLmpz
b24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJp
Yy9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLWRlY2xhcmF0aW9ucy5qc29uCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA3MDJmYzZhMzI3MC4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kdXBs
aWNhdGUtdHlwZS1kZWNsYXJhdGlvbnMuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAg
QEAKLXsKLSAgICAiZG9tYWluIjogIlJ1bnRpbWUiLAotICAgICJ0eXBlcyI6IFsKLSAgICAgICAg
ewotICAgICAgICAgICAgImlkIjogIlJlbW90ZU9iamVjdElkIiwKLSAgICAgICAgICAgICJ0eXBl
IjogInN0cmluZyIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIG9iamVjdCBp
ZGVudGlmaWVyLiIKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIlJl
bW90ZU9iamVjdElkIiwKLSAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCi0gICAgICAgICAg
ICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIG9iamVjdCBpZGVudGlmaWVyLiIKLSAgICAgICAgfQot
ICAgIF0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZHVwbGljYXRlLXR5cGUtbWVtYmVyLW5hbWVzLmpz
b24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJp
Yy9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLW1lbWJlci1uYW1lcy5qc29uCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBhZWJhY2VlOGIyMy4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kdXBs
aWNhdGUtdHlwZS1tZW1iZXItbmFtZXMuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAg
QEAKLVsKLXsKLSAgICAiZG9tYWluIjogIk92ZXJsYXlUeXBlcyIsCi0gICAgInR5cGVzIjogWwot
ICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiUG9pbnQiLAotICAgICAgICAgICAgInR5cGUi
OiAib2JqZWN0IiwKLSAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwotICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAieCIsICJ0eXBlIjogImludGVnZXIiIH0sCi0gICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJ4IiwgInR5cGUiOiAiaW50ZWdlciIgfQotICAgICAgICAgICAgXQotICAgICAgICB9
Ci0gICAgXQotfQotXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1lbnVtLXdpdGgtbm8tdmFsdWVzLmpzb24g
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9m
YWlsLW9uLWVudW0td2l0aC1uby12YWx1ZXMuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMjMyYTdjMzI0OWEuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZW51bS13aXRoLW5vLXZh
bHVlcy5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotewotICAgICJkb21haW4i
OiAiRGF0YWJhc2UiLAotICAgICJ0eXBlcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgImlk
IjogIlByaW1hcnlDb2xvcnMiLAotICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKLSAgICAg
ICAgICAgICJlbnVtIjogW10KLSAgICAgICAgfQotICAgIF0KLX0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24t
ZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbiBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwt
b24tZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTEzMmNlMDg4MjguLjAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUu
anNvbgorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotWwotewotICAgICJkb21haW4iOiAi
RG9tYWluIiwKLSAgICAiZGVidWdnYWJsZVR5cGVzIjogWyJqYXZhc2NyaXB0Il0sCi0gICAgImNv
bW1hbmRzIjogW3sibmFtZSI6ICJDb21tYW5kIn1dLAotICAgICJldmVudHMiOiBbeyJuYW1lIjog
IkV2ZW50IiwgInRhcmdldFR5cGVzIjogWyJ3b3JrZXIiXX1dCi19Ci1dCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWls
LW9uLWV2ZW50LXRhcmdldFR5cGVzLXR5cGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlwZXMt
dHlwZS5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTRlZDFmNWM2Yi4uMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2dlbmVyaWMvZmFpbC1vbi1ldmVudC10YXJnZXRUeXBlcy10eXBlLmpzb24KKysrIC9kZXYv
bnVsbApAQCAtMSw5ICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIkRvbWFpbiIsCi0gICAgImV2
ZW50cyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiUGFnZU9ubHkiLAotICAg
ICAgICAgICAgInRhcmdldFR5cGVzIjogInBhZ2VlIgotICAgICAgICB9Ci0gICAgXQotfQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvZmFpbC1vbi1ldmVudC10YXJnZXRUeXBlcy12YWx1ZS5qc29uIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1ldmVudC10
YXJnZXRUeXBlcy12YWx1ZS5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ODg0
YmZkN2E2Yi4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1ldmVudC10YXJnZXRUeXBlcy12YWx1ZS5q
c29uCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi17Ci0gICAgImRvbWFpbiI6ICJEb21h
aW4iLAotICAgICJldmVudHMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogIlBh
Z2VPbmx5IiwKLSAgICAgICAgICAgICJ0YXJnZXRUeXBlcyI6IFsicGFnZWUiXQotICAgICAgICB9
Ci0gICAgXQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtcGFyYW1l
dGVyLWZsYWcuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9nZW5lcmljL2ZhaWwtb24tbnVtYmVyLXR5cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1mbGFn
Lmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczMDhkYjk5MmQ2Li4wMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJpYy9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29u
CisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotewotICAgICJkb21haW4iOiAiRGF0YWJh
c2UiLAotICAgICJ0eXBlcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIkRhdGFi
YXNlSWQiLAotICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKLSAgICAgICAgICAgICJkZXNj
cmlwdGlvbiI6ICJVbmlxdWUgaWRlbnRpZmllciBvZiBEYXRhYmFzZSBvYmplY3QuIgotICAgICAg
ICB9Ci0gICAgXSwKLSAgICAiZXZlbnRzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAibmFt
ZSI6ICJkaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzIiwKLSAgICAgICAgICAgICJwYXJhbWV0
ZXJzIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6
ICJzdHJpbmciLCAib3B0aW9uYWwiOiAwIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfQotICAg
IF0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tbnVtYmVyLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVy
Lmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2Vu
ZXJpYy9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29uCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZmVhNTU1ZWM0Zi4uMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFp
bC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNvbgorKysgL2Rldi9udWxs
CkBAIC0xLDE2ICswLDAgQEAKLVsKLXsKLSAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKLSAgICAi
dHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJFcnJvciIsCi0gICAgICAg
ICAgICAidHlwZSI6ICJvYmplY3QiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkRhdGFi
YXNlIGVycm9yLiIsCi0gICAgICAgICAgICAicHJvcGVydGllcyI6IFsKLSAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogIm1lc3NhZ2UiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAi
RXJyb3IgbWVzc2FnZS4iIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2RlIiwgInR5
cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBjb2RlLiIsICJvcHRpb25hbCI6
IDAgfQotICAgICAgICAgICAgXQotICAgICAgICB9Ci0gICAgXQotfQotXQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFp
bC1vbi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbiBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tc3Ry
aW5nLXR5cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDQwMTJjNzliNmIzLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLXN0cmluZy10
eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsMTgg
KzAsMCBAQAotewotICAgICJkb21haW4iOiAiRGF0YWJhc2UiLAotICAgICJ0eXBlcyI6IFsKLSAg
ICAgICAgewotICAgICAgICAgICAgImlkIjogIkRhdGFiYXNlSWQiLAotICAgICAgICAgICAgInR5
cGUiOiAic3RyaW5nIiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgaWRlbnRp
ZmllciBvZiBEYXRhYmFzZSBvYmplY3QuIgotICAgICAgICB9Ci0gICAgXSwKLSAgICAiZXZlbnRz
IjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJkaWRFeGVjdXRlT3B0aW9uYWxQ
YXJhbWV0ZXJzIiwKLSAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwotICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiAi
dHJ1ZSIgfQotICAgICAgICAgICAgXQotICAgICAgICB9Ci0gICAgXQotfQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFp
bC1vbi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNvbiBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tc3RyaW5n
LXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGNhM2VmMjhhOGY4Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLXN0cmluZy10eXBlZC1v
cHRpb25hbC10eXBlLW1lbWJlci5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAot
WwotewotICAgICJkb21haW4iOiAiRGF0YWJhc2UiLAotICAgICJ0eXBlcyI6IFsKLSAgICAgICAg
ewotICAgICAgICAgICAgImlkIjogIkVycm9yIiwKLSAgICAgICAgICAgICJ0eXBlIjogIm9iamVj
dCIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRGF0YWJhc2UgZXJyb3IuIiwKLSAgICAg
ICAgICAgICJwcm9wZXJ0aWVzIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibWVzc2Fn
ZSIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBtZXNzYWdlLiIgfSwK
LSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvZGUiLCAidHlwZSI6ICJpbnRlZ2VyIiwgImRl
c2NyaXB0aW9uIjogIkVycm9yIGNvZGUuIiwgIm9wdGlvbmFsIjogImZhbHNlIiB9Ci0gICAgICAg
ICAgICBdCi0gICAgICAgIH0KLSAgICBdCi19Ci1dCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLXR5cGUtZGVj
bGFyYXRpb24tdXNpbmctdHlwZS1yZWZlcmVuY2UuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tdHlwZS1kZWNsYXJhdGlv
bi11c2luZy10eXBlLXJlZmVyZW5jZS5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAxOWI3NTkwY2NjNi4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi10eXBlLWRlY2xhcmF0aW9uLXVz
aW5nLXR5cGUtcmVmZXJlbmNlLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi1b
Ci17Ci0gICAgImRvbWFpbiI6ICJSdW50aW1lIiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAgIHsK
LSAgICAgICAgICAgICJpZCI6ICJSZW1vdGVPYmplY3RJZCIsCi0gICAgICAgICAgICAidHlwZSI6
ICJvYmplY3QiLAotICAgICAgICAgICAgIiRyZWYiOiAiU29tZVR5cGUiLAotICAgICAgICAgICAg
ImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4iCi0gICAgICAgIH0KLSAg
ICBdCi19Ci1dCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLXR5cGUtcmVmZXJlbmNlLWFzLXByaW1pdGl2ZS10
eXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJpYy9mYWlsLW9uLXR5cGUtcmVmZXJlbmNlLWFzLXByaW1pdGl2ZS10eXBlLmpzb24KZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjODNiYmZjZTQxLi4wMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9m
YWlsLW9uLXR5cGUtcmVmZXJlbmNlLWFzLXByaW1pdGl2ZS10eXBlLmpzb24KKysrIC9kZXYvbnVs
bApAQCAtMSwxOCArMCwwIEBACi17Ci0gICAgImRvbWFpbiI6ICJEYXRhYmFzZSIsCi0gICAgInR5
cGVzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiRGF0YWJhc2VJZCIsCi0gICAg
ICAgICAgICAidHlwZSI6ICJzdHJpbmciLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVu
aXF1ZSBpZGVudGlmaWVyIG9mIERhdGFiYXNlIG9iamVjdC4iCi0gICAgICAgIH0KLSAgICBdLAot
ICAgICJldmVudHMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImRpZEV4ZWN1
dGVPcHRpb25hbFBhcmFtZXRlcnMiLAotICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCi0gICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogIkRhdGFiYXNlSWQi
IH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfQotICAgIF0KLX0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24t
dHlwZS13aXRoLWludmFsaWQtcGxhdGZvcm0uanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tdHlwZS13aXRoLWludmFsaWQt
cGxhdGZvcm0uanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTlmZDJlOTk1NjEu
LjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tdHlwZS13aXRoLWludmFsaWQtcGxhdGZvcm0uanNvbgor
KysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIlJ1bnRpbWUi
LAotICAgICJ0eXBlcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIlJlbW90ZU9i
amVjdElkIiwKLSAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCi0gICAgICAgICAgICAicGxh
dGZvcm0iOiAiaW52YWxpZCIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIG9i
amVjdCBpZGVudGlmaWVyLiIKLSAgICAgICAgfQotICAgIF0KLX0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24t
dHlwZS13aXRoLWxvd2VyY2FzZS1uYW1lLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLXR5cGUtd2l0aC1sb3dlcmNhc2Ut
bmFtZS5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MzE5MDFlNGE5YS4uMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2dlbmVyaWMvZmFpbC1vbi10eXBlLXdpdGgtbG93ZXJjYXNlLW5hbWUuanNvbgorKysgL2Rl
di9udWxsCkBAIC0xLDEwICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKLSAg
ICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJkYXRhYmFzZUlkIiwK
LSAgICAgICAgICAgICJ0eXBlIjogImludGVnZXIiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9u
IjogIlVuaXF1ZSBpZGVudGlmaWVyIG9mIERhdGFiYXNlIG9iamVjdC4iCi0gICAgICAgIH0KLSAg
ICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1k
ZWNsYXJhdGlvbi5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtZGVj
bGFyYXRpb24uanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDY4ODdhMjc0MTEu
LjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLWRl
Y2xhcmF0aW9uLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi1bCi17Ci0gICAg
ImRvbWFpbiI6ICJSdW50aW1lIiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAg
ICAgICJpZCI6ICJSZW1vdGVPYmplY3RJZCIsCi0gICAgICAgICAgICAidHlwZSI6ICJkcmFnb24i
LAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4i
Ci0gICAgICAgIH0KLSAgICBdCi19Ci1dCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLXVua25vd24tdHlwZS1y
ZWZlcmVuY2UtaW4tdHlwZS1tZW1iZXIuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5j
ZS1pbi10eXBlLW1lbWJlci5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiODE3
ZGI1MDQ0ZC4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWlu
LXR5cGUtbWVtYmVyLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi1bCi17Ci0g
ICAgImRvbWFpbiI6ICJGYW50YXN5IiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAg
ICAgICAgICJpZCI6ICJEcmFnb25FZ2ciLAotICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwK
LSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJBIGRyYWdvbiBlZ2cuIiwKLSAgICAgICAgICAg
ICJwcm9wZXJ0aWVzIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sb3IiLCAiJHJl
ZiI6ICJDb2xvciIgfQotICAgICAgICAgICAgXQotICAgICAgICB9Ci0gICAgXQotfQotXQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24gYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9nZW5lcmF0ZS1k
b21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggNjdjZjhlNTgyZjYuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2dlbmVyYXRlLWRvbWFpbnMtd2l0aC1m
ZWF0dXJlLWd1YXJkcy5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotWwotewot
ICAgICJkb21haW4iOiAiTmV0d29yazEiLAotICAgICJmZWF0dXJlR3VhcmQiOiAiUExBVEZPUk0o
V0VCX0NPTU1BTkRTKSIsCi0gICAgImNvbW1hbmRzIjogWwotICAgICAgICB7Ci0gICAgICAgICAg
ICAibmFtZSI6ICJsb2FkUmVzb3VyY2UiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxv
YWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVk
IHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKLSAgICAgICAgfQotICAgIF0KLX0s
Ci17Ci0gICAgImRvbWFpbiI6ICJOZXR3b3JrMiIsCi0gICAgImZlYXR1cmVHdWFyZCI6ICJQTEFU
Rk9STShXRUJfVFlQRVMpIiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAg
ICJpZCI6ICJOZXR3b3JrRXJyb3IiLAotICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKLSAg
ICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibWVz
c2FnZSIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBtZXNzYWdlLiIg
fSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvZGUiLCAidHlwZSI6ICJpbnRlZ2VyIiwg
ImRlc2NyaXB0aW9uIjogIkVycm9yIGNvZGUuIiB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0K
LSAgICBdCi19LAotewotICAgICJkb21haW4iOiAiTmV0d29yazMiLAotICAgICJmZWF0dXJlR3Vh
cmQiOiAiUExBVEZPUk0oV0VCX0VWRU5UUykiLAotICAgICJldmVudHMiOiBbCi0gICAgICAgIHsK
LSAgICAgICAgICAgICJuYW1lIjogInJlc291cmNlTG9hZGVkIiwKLSAgICAgICAgICAgICJkZXNj
cmlwdGlvbiI6ICJBIHJlc291cmNlIHdhcyBsb2FkZWQuIgotICAgICAgICB9Ci0gICAgXQotfQot
XQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2dlbmVyaWMvc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbiBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL3NhbWUtdHlwZS1p
ZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNi
ZjRkZmY1Y2NjLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5q
c29uCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotWwotewotICAgICJkb21haW4iOiAi
UnVudGltZSIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAi
UmVtb3RlT2JqZWN0SWQiLAotICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKLSAgICAgICAg
ICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIuIgotICAgICAgICB9
Ci0gICAgXQotfSwKLXsKLSAgICAiZG9tYWluIjogIlJ1bnRpbWUyIiwKLSAgICAidHlwZXMiOiBb
Ci0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJSZW1vdGVPYmplY3RJZCIsCi0gICAgICAg
ICAgICAidHlwZSI6ICJzdHJpbmciLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1
ZSBvYmplY3QgaWRlbnRpZmllci4iCi0gICAgICAgIH0KLSAgICBdCi19Ci1dCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9z
aGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUt
c2V0dGVycy5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMGEwYzE1NTI3NS4u
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KKysrIC9k
ZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi17Ci0gICAgImRvbWFpbiI6ICJSdW50aW1lIiwKLSAg
ICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJLZXlQYXRoIiwKLSAg
ICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAi
S2V5IHBhdGguIiwKLSAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAidHlwZSIsCi0gICAgICAgICAgICAgICAg
ICAgICJ0eXBlIjogInN0cmluZyIsCi0gICAgICAgICAgICAgICAgICAgICJlbnVtIjogWyJudWxs
IiwgInN0cmluZyIsICJhcnJheSJdLAotICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24i
OiAiS2V5IHBhdGggdHlwZS4iCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogInN0cmluZyIsCi0gICAgICAgICAgICAgICAg
ICAgICJ0eXBlIjogInN0cmluZyIsCi0gICAgICAgICAgICAgICAgICAgICJvcHRpb25hbCI6IHRy
dWUsCi0gICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJTdHJpbmcgdmFsdWUuIgot
ICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICAibmFtZSI6ICJhcnJheSIsCi0gICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImFycmF5IiwK
LSAgICAgICAgICAgICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICAgICAgICAgICAg
ICAgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0sCi0gICAgICAgICAgICAgICAgICAgICJk
ZXNjcmlwdGlvbiI6ICJBcnJheSB2YWx1ZS4iCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgXQotICAgICAgICB9Ci0gICAgXQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvc2hvdWxkLXN0cmlwLWNvbW1lbnRz
Lmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2Vu
ZXJpYy9zaG91bGQtc3RyaXAtY29tbWVudHMuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggZWNlMWRjZmM2MWMuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL3Nob3VsZC1zdHJpcC1jb21tZW50cy5q
c29uCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi17Ci0gICAgLyogYWJvdmUgKi8KLSAg
ICAvKiBiZWZvcmUgKi8gImRvbWFpbiIgLyogaW4gKi8gOiAvKiBpbiAqLyAiQ29tbWVudCIgLyog
YWZ0ZXIgKi8KLSAgICAvKiBiZWxvdyAqLwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvdHlwZS1kZWNsYXJhdGlvbi1h
bGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy90eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0
aXZlLXR5cGUuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2JjOWQ1Mzk0Nzgu
LjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5q
c29uCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotewotICAgICJkb21haW4iOiAiUnVu
dGltZSIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiUmVt
b3RlT2JqZWN0SWQiLAotICAgICAgICAgICAgInR5cGUiOiAiaW50ZWdlciIsCi0gICAgICAgICAg
ICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIG9iamVjdCBpZGVudGlmaWVyLiIKLSAgICAgICAgfQot
ICAgIF0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL3R5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvdHlwZS1k
ZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGNmYjA4YmQ5NDBiLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy90eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUu
anNvbgorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLVsKLXsKLSAgICAiZG9tYWluIjog
IkRlYnVnZ2VyIiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6
ICJCcmVha3BvaW50SWQiLAotICAgICAgICAgICAgInR5cGUiOiAiaW50ZWdlciIKLSAgICAgICAg
fSwKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIlJlYXNvbiIsCi0gICAgICAgICAgICAi
dHlwZSI6ICJzdHJpbmciLAotICAgICAgICAgICAgImVudW0iOiBbIkRpZWQiLCAiRmFpbnRlZCIs
ICJIdW5ncnkiXQotICAgICAgICB9Ci0gICAgXQotfSwKLXsKLSAgICAiZG9tYWluIjogIlJ1bnRp
bWUiLAotICAgICJ0eXBlcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIk9iamVj
dElkIiwKLSAgICAgICAgICAgICJ0eXBlIjogImludGVnZXIiCi0gICAgICAgIH0sCi0gICAgICAg
IHsKLSAgICAgICAgICAgICJpZCI6ICJMdWNreU51bWJlcnMiLAotICAgICAgICAgICAgInR5cGUi
OiAiYXJyYXkiLAotICAgICAgICAgICAgIml0ZW1zIjogeyAidHlwZSI6ICJpbnRlZ2VyIiB9Ci0g
ICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJCYWJ5TmFtZXMiLAotICAg
ICAgICAgICAgInR5cGUiOiAiYXJyYXkiLAotICAgICAgICAgICAgIml0ZW1zIjogeyAidHlwZSI6
ICJzdHJpbmciIH0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIk5l
d09iamVjdHMiLAotICAgICAgICAgICAgInR5cGUiOiAiYXJyYXkiLAotICAgICAgICAgICAgIml0
ZW1zIjogeyAiJHJlZiI6ICJPYmplY3RJZCIgfQotICAgICAgICB9LAotICAgICAgICB7Ci0gICAg
ICAgICAgICAiaWQiOiAiT2xkT2JqZWN0cyIsCi0gICAgICAgICAgICAidHlwZSI6ICJhcnJheSIs
Ci0gICAgICAgICAgICAiaXRlbXMiOiB7ICIkcmVmIjogIkRlYnVnZ2VyLkJyZWFrcG9pbnRJZCIg
fQotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiU3RvcFJlYXNvbnMi
LAotICAgICAgICAgICAgInR5cGUiOiAiYXJyYXkiLAotICAgICAgICAgICAgIml0ZW1zIjogeyAi
JHJlZiI6ICJEZWJ1Z2dlci5SZWFzb24iIH0KLSAgICAgICAgfQotICAgIF0KLX0KLV0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmljL3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy90eXBlLWRlY2xhcmF0aW9uLWVudW0t
dHlwZS5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZjBhZWU5YzkxYi4uMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2dlbmVyaWMvdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgorKysgL2Rldi9udWxs
CkBAIC0xLDE1ICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIlJ1bnRpbWUiLAotICAgICJ0eXBl
cyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIkZhcm1BbmltYWxzIiwKLSAgICAg
ICAgICAgICJ0eXBlIjogInN0cmluZyIsCi0gICAgICAgICAgICAiZW51bSI6IFsiUGlncyIsICJD
b3dzIiwgIkNhdHMiLCAiSGVucyJdCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAg
ICJpZCI6ICJUd29MZWdnZWRBbmltYWxzIiwKLSAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIs
Ci0gICAgICAgICAgICAiZW51bSI6IFsiRHVja3MiLCAiSGVucyIsICJDcm93cyIsICJGbGFtaW5n
b3MiXQotICAgICAgICB9Ci0gICAgXQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvdHlwZS1kZWNsYXJhdGlvbi1vYmpl
Y3QtdHlwZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2dlbmVyaWMvdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAyYzQzYzMzMDk5Mi4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvdHlwZS1kZWNs
YXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsMTAwICswLDAgQEAK
LVsKLXsKLSAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKLSAgICAiZGVzY3JpcHRpb24iOiAiVGVz
dCB0eXBlIGJ1aWxkZXIgZ2VuZXJhdGlvbiBvZiB2YXJpb3VzIG9iamVjdCB0eXBlcy4iLAotICAg
ICJ0eXBlcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIkVycm9yIiwKLSAgICAg
ICAgICAgICJ0eXBlIjogIm9iamVjdCIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRGF0
YWJhc2UgZXJyb3IuIiwKLSAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwotICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAibWVzc2FnZSIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6
ICJFcnJvciBtZXNzYWdlLiIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvZGUiLCAi
dHlwZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIGNvZGUuIiB9Ci0gICAgICAg
ICAgICBdCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJFcnJvckxp
c3QiLAotICAgICAgICAgICAgInR5cGUiOiAiYXJyYXkiLAotICAgICAgICAgICAgIml0ZW1zIjog
eyAiJHJlZiI6ICJFcnJvciIgfQotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAi
aWQiOiAiTW91c2VCdXR0b24iLAotICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKLSAgICAg
ICAgICAgICJkZXNjcmlwdGlvbiI6ICJFbnVtZXJhdGVzIGRpZmZlcmVudCBtb3VzZSBidXR0b25z
IHRoYXQgY2FuIGJlIHVzZWQuIiwKLSAgICAgICAgICAgICJlbnVtIjogWwotICAgICAgICAgICAg
ICAgICJOb25lIiwKLSAgICAgICAgICAgICAgICAiTGVmdCIsCi0gICAgICAgICAgICAgICAgIk1p
ZGRsZSIsCi0gICAgICAgICAgICAgICAgIlJpZ2h0IgotICAgICAgICAgICAgXQotICAgICAgICB9
LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUi
LAotICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKLSAgICAgICAgICAgICJwcm9wZXJ0aWVz
IjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJh
cnJheSIsICJvcHRpb25hbCI6IHRydWUsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0s
Ci0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJidXR0b25zIiwgInR5cGUiOiAiYXJyYXkiLCAi
b3B0aW9uYWwiOiB0cnVlLCAiaXRlbXMiOiB7ICIkcmVmIjogIk1vdXNlQnV0dG9uIiB9IH0sCi0g
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkaXJlY3Rpb25hbGl0eSIsICJ0eXBlIjogInN0cmlu
ZyIsICJlbnVtIjogWyJMVFIiLCAiUlRMIl0sICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjog
dHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAi
bnVtYmVyIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
dmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIsICJvcHRpb25hbCI6IHRy
dWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImVycm9yIiwgIiRyZWYiOiAiRXJyb3Ii
LCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJlcnJvckxp
c3QiLCAiJHJlZiI6ICJFcnJvckxpc3QiLCAib3B0aW9uYWwiOiB0cnVlIH0KLSAgICAgICAgICAg
IF0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIlBhcmFtZXRlckJ1
bmRsZSIsCi0gICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAotICAgICAgICAgICAgInByb3Bl
cnRpZXMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBl
IjogImFycmF5IiwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwKLSAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogImJ1dHRvbnMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgIiRy
ZWYiOiAiTW91c2VCdXR0b24iIH0gfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRpcmVj
dGlvbmFsaXR5IiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbIkxUUiIsICJSVEwiXSB9LAot
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciIH0sCi0g
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiIH0s
Ci0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiIH0s
Ci0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiB9LAot
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZXJyb3IiLCAiJHJlZiI6ICJFcnJvciIgfSwKLSAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogImVycm9yTGlzdCIsICIkcmVmIjogIkVycm9yTGlzdCIg
fQotICAgICAgICAgICAgXQotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQi
OiAiT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cyIsCi0gICAgICAgICAgICAiZGVzY3Jp
cHRpb24iOiAiQ29uZmxpY3RlZCBuYW1lcyBtYXkgY2F1c2UgZ2VuZXJhdGVkIGdldHRlcnMvc2V0
dGVycyB0byBjbGFzaCB3aXRoIGJ1aWx0LWluIEluc3BlY3Rvck9iamVjdCBtZXRob2RzLiIsCi0g
ICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAotICAgICAgICAgICAgInByb3BlcnRpZXMiOiBb
Ci0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJpbnRlZ2VyIiwgInR5cGUiOiAic3RyaW5nIiB9
LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYXJyYXkiLCAidHlwZSI6ICJzdHJpbmciIH0s
Ci0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzdHJpbmciLCAidHlwZSI6ICJzdHJpbmciIH0s
Ci0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZSIsICJ0eXBlIjogInN0cmluZyIgfSwK
LSAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm9iamVjdCIsICJ0eXBlIjogInN0cmluZyIgfQot
ICAgICAgICAgICAgXQotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAi
RHVtbXlPYmplY3QiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkFuIG9wZW4gb2JqZWN0
IHRoYXQgZG9lc24ndCBoYXZlIGFueSBwcmVkZWZpbmVkIGZpZWxkcy4iLAotICAgICAgICAgICAg
InR5cGUiOiAib2JqZWN0IgotICAgICAgICB9Ci0gICAgXQotfSwKLXsKLSAgICAiZG9tYWluIjog
IlRlc3QiLAotICAgICJkZXNjcmlwdGlvbiI6ICJUZXN0IHRoZSBnZW5lcmF0aW9uIG9mIHNwZWNp
YWwgYmVoYXZpb3JzIHRoYXQgb25seSBhcHBseSB0byBzcGVjaWZpYyBjbGFzc2VzLiIsCi0gICAg
InR5cGVzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiUGFyYW1ldGVyQnVuZGxl
IiwKLSAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCi0gICAgICAgICAgICAicHJvcGVydGll
cyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRpcmVjdGlvbmFsaXR5IiwgInR5cGUi
OiAic3RyaW5nIiwgImVudW0iOiBbIkxUUiIsICJSVEwiXSB9LAotICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAiYnV0dG9ucyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAiJHJlZiI6ICJE
YXRhYmFzZS5Nb3VzZUJ1dHRvbiIgfSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29s
dW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9
IH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIg
fSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJl
ciIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVj
dCIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnki
IH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJlcnJvciIsICIkcmVmIjogIkRhdGFiYXNl
LkVycm9yIiB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0KLSAgICBdCi19Ci1dCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJp
Yy90eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy90eXBlLXJlcXVpcmluZy1ydW50aW1l
LWNhc3RzLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzZDk0YmU4OTdkLi4w
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy90eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KKysrIC9kZXYv
bnVsbApAQCAtMSw1MSArMCwwIEBACi1bCi17Ci0gICAgImRvbWFpbiI6ICJUZXN0IiwKLSAgICAi
dHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJUeXBlTmVlZGluZ0Nhc3Qi
LAotICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlv
biI6ICJBIGR1bW15IHR5cGUgdGhhdCByZXF1aXJlcyBydW50aW1lIGNhc3RzLCBhbmQgZm9yY2Vz
IG5vbi1wcmltaXRpdmUgcmVmZXJlbmNlZCB0eXBlcyB0byBhbHNvIGVtaXQgcnVudGltZSBjYXN0
IGhlbHBlcnMuIiwKLSAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwotICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAic3RyaW5nIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIlN0
cmluZyBtZW1iZXIuIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibnVtYmVyIiwgInR5
cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJOdW1iZXIgbWVtYmVyLiIgfSwKLSAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogImFuaW1hbHMiLCAiJHJlZiI6ICJDYXN0ZWRBbmltYWxzIiwg
ImRlc2NyaXB0aW9uIjogIkVudW0gbWVtYmVyLiIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1l
IjogImlkIiwgIiRyZWYiOiAiQ2FzdGVkT2JqZWN0SWQiLCAiZGVzY3JpcHRpb24iOiAiQWxpYXNl
ZCBtZW1iZXIuIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidHJlZSIsICIkcmVmIjog
IlJlY3Vyc2l2ZU9iamVjdDEiLCAiZGVzY3JpcHRpb24iOiAiUmVjdXJzaXZlIG9iamVjdCBtZW1i
ZXIuIiB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAg
ICJpZCI6ICJDYXN0ZWRPYmplY3RJZCIsCi0gICAgICAgICAgICAidHlwZSI6ICJpbnRlZ2VyIgot
ICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiVW5jYXN0ZWRPYmplY3RJ
ZCIsCi0gICAgICAgICAgICAidHlwZSI6ICJpbnRlZ2VyIgotICAgICAgICB9LAotICAgICAgICB7
Ci0gICAgICAgICAgICAiaWQiOiAiVW5jYXN0ZWRBbmltYWxzIiwKLSAgICAgICAgICAgICJ0eXBl
IjogInN0cmluZyIsCi0gICAgICAgICAgICAiZW51bSI6IFsiUGlncyIsICJDb3dzIiwgIkNhdHMi
LCAiSGVucyJdCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJDYXN0
ZWRBbmltYWxzIiwKLSAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCi0gICAgICAgICAgICAi
ZW51bSI6IFsiRHVja3MiLCAiSGVucyIsICJDcm93cyIsICJGbGFtaW5nb3MiXQotICAgICAgICB9
LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiUmVjdXJzaXZlT2JqZWN0MSIsCi0gICAg
ICAgICAgICAidHlwZSI6ICJvYmplY3QiLAotICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCi0g
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJvYmoiLCAiJHJlZiI6ICJSZWN1cnNpdmVPYmplY3Qy
IiwgIm9wdGlvbmFsIjogdHJ1ZSB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0sCi0gICAgICAg
IHsKLSAgICAgICAgICAgICJpZCI6ICJSZWN1cnNpdmVPYmplY3QyIiwKLSAgICAgICAgICAgICJ0
eXBlIjogIm9iamVjdCIsCi0gICAgICAgICAgICAicHJvcGVydGllcyI6IFsKLSAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogIm9iaiIsICIkcmVmIjogIlJlY3Vyc2l2ZU9iamVjdDEiLCAib3B0aW9u
YWwiOiB0cnVlIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfQotICAgIF0KLX0KLV0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmljL3R5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL3R5cGUtd2l0aC1vcGVuLXBhcmFtZXRl
cnMuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTliMDIyMGQzMTIuLjAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9nZW5lcmljL3R5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbgorKysgL2Rldi9udWxsCkBA
IC0xLDIxICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIlRlc3QiLAotICAgICJ0eXBlcyI6IFsK
LSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIk5vT3BlblBhcmFtZXRlcnMiLAotICAgICAg
ICAgICAgInR5cGUiOiAib2JqZWN0IiwKLSAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwotICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAib25lIiwgInR5cGUiOiAibnVtYmVyIiB9LAotICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAidHdvIiwgInR5cGUiOiAibnVtYmVyIiB9Ci0gICAgICAgICAg
ICBdCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJPcGVuUGFyYW1l
dGVycyIsCi0gICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAotICAgICAgICAgICAgInByb3Bl
cnRpZXMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJhbHBoYSIsICJ0eXBlIjogIm51
bWJlciIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImJldGEiLCAidHlwZSI6ICJudW1i
ZXIiIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfQotICAgIF0KLX0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL3ZlcnNp
b24uanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL3ZlcnNpb24uanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTA3YTVk
OTAxNzYuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9nZW5lcmljL3ZlcnNpb24uanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDYg
KzAsMCBAQAoteyJkb21haW5zIjpbCi17Ci0gICAgImRvbWFpbiI6ICJWZXJzaW9uRG9tYWluIiwK
LSAgICAidmVyc2lvbiI6IDQyCi19Ci1dfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2lvcy9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0
Zm9ybS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2lvcy9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA4MTdmMTM1ZWU1YS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2lvcy9kZWZpbml0aW9ucy13aXRoLW1h
Yy1wbGF0Zm9ybS5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotewotICAgICJk
b21haW4iOiAiTmV0d29yayIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7Ci0gICAgICAgICAg
ICAiaWQiOiAiTmV0d29ya0Vycm9yIiwKLSAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCi0g
ICAgICAgICAgICAicGxhdGZvcm0iOiAibWFjb3MiLAotICAgICAgICAgICAgInByb3BlcnRpZXMi
OiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJtZXNzYWdlIiwgInR5cGUiOiAic3RyaW5n
IiwgImRlc2NyaXB0aW9uIjogIkVycm9yIG1lc3NhZ2UuIiB9LAotICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAiY29kZSIsICJ0eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAiRXJyb3Ig
Y29kZS4iIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfQotICAgIF0sCi0gICAgImNvbW1hbmRz
IjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJsb2FkUmVzb3VyY2UiLAotICAg
ICAgICAgICAgInBsYXRmb3JtIjogIm1hY29zIiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6
ICJMb2FkcyBhIHJlc291cmNlIGluIHRoZSBjb250ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGluc3Bl
Y3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNoZWNrcy4iCi0gICAgICAgIH0KLSAgICBd
LAotICAgICJldmVudHMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogInJlc291
cmNlTG9hZGVkIiwKLSAgICAgICAgICAgICJwbGF0Zm9ybSI6ICJtYWNvcyIsCi0gICAgICAgICAg
ICAiZGVzY3JpcHRpb24iOiAiQSByZXNvdXJjZSB3YXMgbG9hZGVkLiIKLSAgICAgICAgfQotICAg
IF0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9pb3MvZXhwZWN0ZWQvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbi1y
ZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvaW9z
L2V4cGVjdGVkL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24tcmVzdWx0CmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNGMwZmUzZmUzYy4uMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2lvcy9leHBlY3Rl
ZC9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uLXJlc3VsdAorKysgL2Rldi9udWxs
CkBAIC0xLDg3MCArMCwwIEBACi0jIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1h
bmRzLmpzCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0
aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNl
Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQotI2luY2x1
ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JGcm9udGVuZFJvdXRlci5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgQWx0
ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZvaWQgc2V0QmFja2VuZERp
c3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNr
ZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KLSAgICBCYWNrZW5kRGlzcGF0
Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRj
aGVyLmdldCgpOyB9Ci1wcml2YXRlOgotICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9i
YWNrZW5kRGlzcGF0Y2hlcjsKLX07Ci0KLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgot
Ci0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jIyMg
RW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUg
IlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgot
Ci1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0K
LQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmRE
aXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNw
cAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFj
LXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMu
aCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+
Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95
ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNpZiBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2Vu
ZERpc3BhdGNoZXJzLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi19
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3Bh
dGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBs
YXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVk
ZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQot
bmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEZyb250ZW5kUm91dGVyOwotCi19IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMu
aAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0u
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hl
cnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEg
b25jZQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5o
PgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Igewot
Ci0KLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLQotCi0KLQotCi0KLX0gLy8gbmFtZXNw
YWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xPYmplY3RzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVj
dHMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0
aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0
cy5oIgotCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotbmFtZXNwYWNlIFByb3RvY29sIHsK
LQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2luY2x1ZGUg
PHd0Zi9SZXRhaW5QdHIuaD4KLQotCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLX0gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmRE
aXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0
Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13
aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2Vu
ZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2luY2x1ZGUgPHd0Zi9KU09O
VmFsdWVzLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi19IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0K
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8
V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5
ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5T
T2JqZWN0Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9u
LmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9y
bS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBv
cnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29s
SW50ZXJuYWwuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgot
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KLSNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgot
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXJzLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cnMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9uIFRl
c3RQcm90b2NvbENvbmZpZ3VyYXRpb24KLXsKLSAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRy
b2xsZXIqIF9jb250cm9sbGVyOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9s
bGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBz
ZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsK
LSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwot
ICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBbc3VwZXIgZGVh
bGxvY107Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3Vy
YXRpb24ubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMu
bW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1h
Yy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNp
bmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2
ZW50RGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZv
cm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1w
b3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JX
SVByb3RvY29sSlNPTk9iamVjdC5oPgotCi0KLQotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2Vy
LCBUZXN0UHJvdG9jb2xQbGF0Zm9ybSkgewotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsLAot
ICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9y
bUlPUywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TLAotfTsKLQotCi0KLQotCi0KLQot
Ci0KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5
T2JqZWN0cy5oPgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNp
bXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCi0jaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPHd0Zi9K
U09OVmFsdWVzLmg+Ci0KLQotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwu
aAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9y
bS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBv
cnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJy
YXlDb252ZXJzaW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdGVtcGxhdGU8dHlw
ZW5hbWUgT2JqQ0VudW1UeXBlPgotT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xT
dHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0
cmluZyhUZXN0UHJvdG9jb2xQbGF0Zm9ybSB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsK
LSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOgotICAgICAgICByZXR1cm4gImFsbCJf
czsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzoKLSAgICAgICAgcmV0dXJu
ICJnZW5lcmljIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1JT1M6Ci0gICAgICAg
IHJldHVybiAiaW9zIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzoKLSAg
ICAgICAgcmV0dXJuICJtYWNvcyJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBP
cHRpb25hbDxUZXN0UHJvdG9jb2xQbGF0Zm9ybT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0
cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJhbGwiKQotICAgICAgICByZXR1cm4g
VGVzdFByb3RvY29sUGxhdGZvcm1BbGw7Ci0gICAgaWYgKHZhbHVlID09ICJnZW5lcmljIikKLSAg
ICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzsKLSAgICBpZiAodmFsdWUg
PT0gImlvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzsKLSAgICBp
ZiAodmFsdWUgPT0gIm1hY29zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3Jt
TWFjT1M7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLQot
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAi
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5o
IgotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgotI2ltcG9ydCA8V2ViSW5zcGVj
dG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLQotdXNpbmcgbmFtZXNwYWNlIElu
c3BlY3RvcjsKLQotCi0KLQotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3Jt
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9y
dCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0
UHJpdmF0ZS5oPgotI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQgPHd0Zi9KU09O
VmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL21hYy9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9y
bS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL21h
Yy9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA4MTdmMTM1ZWU1YS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL21hYy9kZWZpbml0aW9ucy13aXRoLW1hYy1w
bGF0Zm9ybS5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotewotICAgICJkb21h
aW4iOiAiTmV0d29yayIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAi
aWQiOiAiTmV0d29ya0Vycm9yIiwKLSAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCi0gICAg
ICAgICAgICAicGxhdGZvcm0iOiAibWFjb3MiLAotICAgICAgICAgICAgInByb3BlcnRpZXMiOiBb
Ci0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJtZXNzYWdlIiwgInR5cGUiOiAic3RyaW5nIiwg
ImRlc2NyaXB0aW9uIjogIkVycm9yIG1lc3NhZ2UuIiB9LAotICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAiY29kZSIsICJ0eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgY29k
ZS4iIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfQotICAgIF0sCi0gICAgImNvbW1hbmRzIjog
WwotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJsb2FkUmVzb3VyY2UiLAotICAgICAg
ICAgICAgInBsYXRmb3JtIjogIm1hY29zIiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJM
b2FkcyBhIHJlc291cmNlIGluIHRoZSBjb250ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGluc3BlY3Rl
ZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNoZWNrcy4iCi0gICAgICAgIH0KLSAgICBdLAot
ICAgICJldmVudHMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogInJlc291cmNl
TG9hZGVkIiwKLSAgICAgICAgICAgICJwbGF0Zm9ybSI6ICJtYWNvcyIsCi0gICAgICAgICAgICAi
ZGVzY3JpcHRpb24iOiAiQSByZXNvdXJjZSB3YXMgbG9hZGVkLiIKLSAgICAgICAgfQotICAgIF0K
LX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9tYWMvZXhwZWN0ZWQvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbi1yZXN1
bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvbWFjL2V4
cGVjdGVkL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24tcmVzdWx0CmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNmU2OGY0YTlhZS4uMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL21hYy9leHBlY3RlZC9k
ZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uLXJlc3VsdAorKysgL2Rldi9udWxsCkBA
IC0xLDEyMTcgKzAsMCBAQAotIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5k
cy5qcwotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgt
bWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotLy8gTmV0d29yawotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiTmV0d29y
ayIsIG51bGwpOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIk5ldHdvcmsubG9h
ZFJlc291cmNlIiwgbnVsbCwgW10sIFtdKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFdmVu
dCgiTmV0d29yay5yZXNvdXJjZUxvYWRlZCIsIG51bGwsIFtdKTsKLUluc3BlY3RvckJhY2tlbmQu
cmVnaXN0ZXJOZXR3b3JrRGlzcGF0Y2hlciA9IEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEaXNw
YXRjaGVyLmJpbmQoSW5zcGVjdG9yQmFja2VuZCwgIk5ldHdvcmsiKTsKLUluc3BlY3RvckJhY2tl
bmQuYWN0aXZhdGVEb21haW4oIk5ldHdvcmsiLCBudWxsKTsKLSMjIyBFbmQgRmlsZTogSW5zcGVj
dG9yQmFja2VuZENvbW1hbmRzLmpzCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZp
bml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgot
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0j
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLQotbmFt
ZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsK
LXB1YmxpYzoKLSAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlz
cGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRp
c3BhdGNoZXIpOyB9Ci0gICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkg
Y29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQotcHJpdmF0ZToKLSAg
ICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Ci19OwotCi0K
LWNsYXNzIEFsdGVybmF0ZU5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5h
dGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+QWx0ZXJuYXRlTmV0
d29ya0JhY2tlbmREaXNwYXRjaGVyKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJj
ZShsb25nIGNhbGxJZCkgPSAwOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSNl
bmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSMjIyBFbmQg
RmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVz
dFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5h
bWVzcGFjZSBJbnNwZWN0b3IgewotCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQotI2lm
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotY2xhc3MgQWx0ZXJuYXRl
TmV0d29ya0JhY2tlbmREaXNwYXRjaGVyOwotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQotCi1jbGFzcyBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlKEVycm9yU3RyaW5n
JikgPSAwOwotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgfk5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIoKTsKLX07Ci0KLWNsYXNzIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6
IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgc3Rh
dGljIFJlZjxOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hl
ciYsIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICB2b2lkIGRpc3BhdGNo
KGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4m
JiBtZXNzYWdlKSBmaW5hbDsKLXByaXZhdGU6Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2UobG9uZyBy
ZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0jaWYgRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi1wdWJsaWM6Ci0gICAgdm9pZCBzZXRB
bHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZU5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlciogYWx0
ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNw
YXRjaGVyOyB9Ci1wcml2YXRlOgotICAgIEFsdGVybmF0ZU5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hl
ciogbV9hbHRlcm5hdGVEaXNwYXRjaGVyIHsgbnVsbHB0ciB9OwotI2VuZGlmCi1wcml2YXRlOgot
ICAgIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYsIE5ldHdvcmtC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyKiBtX2FnZW50IHsgbnVsbHB0ciB9OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVz
Lmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
Ci0jaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgotI2VuZGlmCi0K
LW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1OZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
Ojp+TmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQotCi1SZWY8TmV0d29ya0Jh
Y2tlbmREaXNwYXRjaGVyPiBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShCYWNrZW5k
RGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXIqIGFnZW50KQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE5ldHdvcmtCYWNrZW5k
RGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKLX0KLQotTmV0d29ya0JhY2tl
bmREaXNwYXRjaGVyOjpOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXIm
IGJhY2tlbmREaXNwYXRjaGVyLCBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2Vu
dCkKLSAgICA6IFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVy
KQotICAgICwgbV9hZ2VudChhZ2VudCkKLXsKLSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdp
c3RlckRpc3BhdGNoZXJGb3JEb21haW4oIk5ldHdvcmsiX3MsIHRoaXMpOwotfQotCi12b2lkIE5l
dHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0
cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCi17Ci0gICAgUmVmPE5l
dHdvcmtCYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7Ci0KLSAgICBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiBwYXJhbWV0ZXJzOwotICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9z
LCBwYXJhbWV0ZXJzKTsKLQotICAgIGlmIChtZXRob2QgPT0gImxvYWRSZXNvdXJjZSIpCi0gICAg
ICAgIGxvYWRSZXNvdXJjZShyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOwotICAgIGVs
c2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNr
ZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yay4iICsgbWV0aG9kICsgIicg
d2FzIG5vdCBmb3VuZCIpOwotfQotCi12b2lkIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjo6bG9h
ZFJlc291cmNlKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQotewotI2lm
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotICAgIGlmIChtX2FsdGVy
bmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVz
b3VyY2UocmVxdWVzdElkKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAg
RXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2UoZXJyb3IpOwotCi0g
ICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2Vu
ZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQot
ICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmRE
aXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOwotfQotCi19IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNw
cAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBv
bmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8d3RmL0pT
T05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNl
IEluc3BlY3RvciB7Ci0KLWNsYXNzIEZyb250ZW5kUm91dGVyOwotCi1jbGFzcyBOZXR3b3JrRnJv
bnRlbmREaXNwYXRjaGVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoK
LSAgICBOZXR3b3JrRnJvbnRlbmREaXNwYXRjaGVyKEZyb250ZW5kUm91dGVyJiBmcm9udGVuZFJv
dXRlcikgOiBtX2Zyb250ZW5kUm91dGVyKGZyb250ZW5kUm91dGVyKSB7IH0KLSAgICB2b2lkIHJl
c291cmNlTG9hZGVkKCk7Ci1wcml2YXRlOgotICAgIEZyb250ZW5kUm91dGVyJiBtX2Zyb250ZW5k
Um91dGVyOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRl
c3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERp
c3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRp
b25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RGcm9udGVu
ZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9u
dGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNl
IEluc3BlY3RvciB7Ci0KLXZvaWQgTmV0d29ya0Zyb250ZW5kRGlzcGF0Y2hlcjo6cmVzb3VyY2VM
b2FkZWQoKQotewotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJO
ZXR3b3JrLnJlc291cmNlTG9hZGVkIl9zKTsKLQotICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2
ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRl
IDx3dGYvQXNzZXJ0aW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLW5hbWVz
cGFjZSBQcm90b2NvbCB7Ci0KLQotCi0vLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KLW5hbWVzcGFj
ZSBOZXR3b3JrIHsKLWNsYXNzIE5ldHdvcmtFcnJvcjsKLX0gLy8gTmV0d29yawotLy8gRW5kIG9m
IGZvcndhcmQgZGVjbGFyYXRpb25zLgotCi0KLQotCi1uYW1lc3BhY2UgTmV0d29yayB7Ci1jbGFz
cyBOZXR3b3JrRXJyb3IgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7Ci1wdWJsaWM6Ci0gICAg
ZW51bSB7Ci0gICAgICAgIE5vRmllbGRzU2V0ID0gMCwKLSAgICAgICAgTWVzc2FnZVNldCA9IDEg
PDwgMCwKLSAgICAgICAgQ29kZVNldCA9IDEgPDwgMSwKLSAgICAgICAgQWxsRmllbGRzU2V0ID0g
KE1lc3NhZ2VTZXQgfCBDb2RlU2V0KQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+
Ci0gICAgY2xhc3MgQnVpbGRlciB7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPEpTT046
Ok9iamVjdD4gbV9yZXN1bHQ7Ci0KLSAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8
U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
ICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgQnVpbGRlcihSZWY8LypOZXR3b3JrRXJyb3IqL0pTT046Ok9iamVjdD4m
JiBvYmplY3QpCi0gICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKLSAgICAg
ICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1
aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZnJp
ZW5kIGNsYXNzIE5ldHdvcmtFcnJvcjsKLSAgICBwdWJsaWM6Ci0KLSAgICAgICAgQnVpbGRlcjxT
VEFURSB8IE1lc3NhZ2VTZXQ+JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNZXNzYWdlU2V0KSwg
cHJvcGVydHlfbWVzc2FnZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
U3RyaW5nKCJtZXNzYWdlIl9zLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PE1lc3NhZ2VTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29k
ZVNldD4mIHNldENvZGUoaW50IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxF
X0FTU0VSVCghKFNUQVRFICYgQ29kZVNldCksIHByb3BlcnR5X2NvZGVfYWxyZWFkeV9zZXQpOwot
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldEludGVnZXIoImNvZGUiX3MsIHZhbHVlKTsKLSAgICAg
ICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29kZVNldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAg
IFJlZjxOZXR3b3JrRXJyb3I+IHJlbGVhc2UoKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwot
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKE5ldHdvcmtFcnJvcikgPT0gc2l6ZW9m
KEpTT046Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsKLQotICAgICAgICAgICAgUmVmPEpTT046Ok9i
amVjdD4ganNvblJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7Ci0gICAgICAgICAg
ICBhdXRvIHJlc3VsdCA9IFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPE5ldHdvcmtFcnJv
cj4qPigmanNvblJlc3VsdCkpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAg
fQotICAgIH07Ci0KLSAgICAvKgotICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKLSAgICAg
KiBSZWY8TmV0d29ya0Vycm9yPiByZXN1bHQgPSBOZXR3b3JrRXJyb3I6OmNyZWF0ZSgpCi0gICAg
ICogICAgIC5zZXRNZXNzYWdlKC4uLikKLSAgICAgKiAgICAgLnNldENvZGUoLi4uKQotICAgICAq
ICAgICAucmVsZWFzZSgpOwotICAgICAqLwotICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0
PiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpT
T046Ok9iamVjdDo6Y3JlYXRlKCkpOwotICAgIH0KLX07Ci0KLX0gLy8gTmV0d29yawotCi0KLQot
fSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sT2JqZWN0cy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZp
bml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0UHJv
dG9jb2xPYmplY3RzLmgiCi0KLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1uYW1lc3BhY2Ug
UHJvdG9jb2wgewotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLQot
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0u
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+
Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi1AcHJvdG9jb2wgVGVzdFByb3RvY29sTmV0
d29ya0RvbWFpbkhhbmRsZXI7Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLWNsYXNzIE9i
akNJbnNwZWN0b3JOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJu
YXRlTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKLXB1YmxpYzoKLSAgICBPYmpDSW5zcGVjdG9yTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyKGlk
PFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdhdGUg
PSBoYW5kbGVyOyB9Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0SWQpIGZpbmFs
OwotcHJpdmF0ZToKLSAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkhh
bmRsZXI+PiBtX2RlbGVnYXRlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmln
LmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1
ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLQotbmFtZXNwYWNlIElu
c3BlY3RvciB7Ci0KLXZvaWQgT2JqQ0luc3BlY3Rvck5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjo6
bG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkKQotewotICAgIGlmICghW21fZGVsZWdhdGUgcmVz
cG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2VXaXRoRXJyb3JDYWxsYmFjazpz
dWNjZXNzQ2FsbGJhY2s6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0
UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3Vu
ZCwgIidOZXR3b3JrLmxvYWRSZXNvdXJjZScgd2FzIG5vdCBmb3VuZCJfcyk7Ci0gICAgICAgIGJh
Y2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQs
IEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwotICAgICAgICBiYWNrZW5k
RGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgIH07Ci0KLSAgICBpZCBzdWNj
ZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9u
c2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7Ci0gICAgfTsKLQot
ICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZVdpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJh
Y2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107Ci19Ci0KLQotfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNo
ZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0
Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNp
bXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KLQotX19hdHRyaWJ1dGVfXygodmlz
aWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRp
b24gOiBOU09iamVjdAotQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNldE5l
dHdvcmtIYW5kbGVyOikgaWQ8VGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkhhbmRsZXI+IG5ldHdv
cmtIYW5kbGVyOwotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBUZXN0UHJvdG9jb2xO
ZXR3b3JrRG9tYWluRXZlbnREaXNwYXRjaGVyICpuZXR3b3JrRXZlbnREaXNwYXRjaGVyOwotQGVu
ZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJv
dG9jb2xDb25maWd1cmF0aW9uLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgi
Ci0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+Ci0jaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2lt
cG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0KLXVz
aW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xD
b25maWd1cmF0aW9uCi17Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29u
dHJvbGxlcjsKLSAgICBpZDxUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluSGFuZGxlcj4gX25ldHdv
cmtIYW5kbGVyOwotICAgIFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5FdmVudERpc3BhdGNoZXIg
Kl9uZXR3b3JrRXZlbnREaXNwYXRjaGVyOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhD
b250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsK
LSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJu
IG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250cm9s
bGVyOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBbX25l
dHdvcmtIYW5kbGVyIHJlbGVhc2VdOwotICAgIFtfbmV0d29ya0V2ZW50RGlzcGF0Y2hlciByZWxl
YXNlXTsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLS0gKHZvaWQpc2V0TmV0d29ya0hhbmRs
ZXI6KGlkPFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5IYW5kbGVyPiloYW5kbGVyCi17Ci0gICAg
aWYgKGhhbmRsZXIgPT0gX25ldHdvcmtIYW5kbGVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBb
X25ldHdvcmtIYW5kbGVyIHJlbGVhc2VdOwotICAgIF9uZXR3b3JrSGFuZGxlciA9IFtoYW5kbGVy
IHJldGFpbl07Ci0KLSAgICBhdXRvIGFsdGVybmF0ZURpc3BhdGNoZXIgPSBtYWtlVW5pcXVlPE9i
akNJbnNwZWN0b3JOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI+KGhhbmRsZXIpOwotICAgIGF1dG8g
YWx0ZXJuYXRlQWdlbnQgPSBtYWtlVW5pcXVlPEFsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50PE5l
dHdvcmtCYWNrZW5kRGlzcGF0Y2hlciwgQWx0ZXJuYXRlTmV0d29ya0JhY2tlbmREaXNwYXRjaGVy
Pj4oIk5ldHdvcmsiX3MsICpfY29udHJvbGxlciwgV1RGTW92ZShhbHRlcm5hdGVEaXNwYXRjaGVy
KSk7Ci0gICAgX2NvbnRyb2xsZXItPmFwcGVuZEV4dHJhQWdlbnQoV1RGTW92ZShhbHRlcm5hdGVB
Z2VudCkpOwotfQotCi0tIChpZDxUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluSGFuZGxlcj4pbmV0
d29ya0hhbmRsZXIKLXsKLSAgICByZXR1cm4gX25ldHdvcmtIYW5kbGVyOwotfQotCi0tIChUZXN0
UHJvdG9jb2xOZXR3b3JrRG9tYWluRXZlbnREaXNwYXRjaGVyICopbmV0d29ya0V2ZW50RGlzcGF0
Y2hlcgotewotICAgIGlmICghX25ldHdvcmtFdmVudERpc3BhdGNoZXIpCi0gICAgICAgIF9uZXR3
b3JrRXZlbnREaXNwYXRjaGVyID0gW1tUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluRXZlbnREaXNw
YXRjaGVyIGFsbG9jXSBpbml0V2l0aENvbnRyb2xsZXI6X2NvbnRyb2xsZXJdOwotICAgIHJldHVy
biBfbmV0d29ya0V2ZW50RGlzcGF0Y2hlcjsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sRXZlbnREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIK
LQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDx3dGYv
SlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW1wbGVtZW50
YXRpb24gVGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkV2ZW50RGlzcGF0Y2hlcgotewotICAgIEF1
Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci19Ci0KLS0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxl
ciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxm
KQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBfY29u
dHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpcmVz
b3VyY2VMb2FkZWQKLXsKLSAgICBjb25zdCBGcm9udGVuZFJvdXRlciYgcm91dGVyID0gX2NvbnRy
b2xsZXItPmZyb250ZW5kUm91dGVyKCk7Ci0KLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVz
c2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmlu
ZygibWV0aG9kIl9zLCAiTmV0d29yay5yZXNvdXJjZUxvYWRlZCJfcyk7Ci0gICAgcm91dGVyLnNl
bmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwotfQotCi1AZW5kCi0KLQotIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2wuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRl
ZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0K
LSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KLQotCi1AY2xh
c3MgVGVzdFByb3RvY29sTmV0d29ya0Vycm9yOwotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2Vy
LCBUZXN0UHJvdG9jb2xQbGF0Zm9ybSkgewotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsLAot
ICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9y
bUlPUywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TLAotfTsKLQotCi0KLQotX19hdHRy
aWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2Nv
bE5ldHdvcmtFcnJvciA6IFJXSVByb3RvY29sSlNPTk9iamVjdAotLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQ7Ci0t
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2Jq
ZWN0ICopanNvbk9iamVjdDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3Ry
aW5nICopbWVzc2FnZSBjb2RlOihpbnQpY29kZTsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAo
bm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqbWVzc2FnZTsKLS8qIHJlcXVpcmVkICovIEBwcm9w
ZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCBjb2RlOwotQGVuZAotCi1AcHJvdG9jb2wgVGVz
dFByb3RvY29sTmV0d29ya0RvbWFpbkhhbmRsZXIgPE5TT2JqZWN0PgotQG9wdGlvbmFsCi0tICh2
b2lkKWxvYWRSZXNvdXJjZVdpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJv
cikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikodm9pZCkpc3VjY2Vzc0Nh
bGxiYWNrOwotQGVuZAotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkK
LUBpbnRlcmZhY2UgVGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkV2ZW50RGlzcGF0Y2hlciA6IE5T
T2JqZWN0Ci0tICh2b2lkKXJlc291cmNlTG9hZGVkOwotQGVuZAotCi0KLSNpbXBvcnQgPFdlYklu
c3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4KLQotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50
ZXJuYWwuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdp
dGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xK
U09OT2JqZWN0UHJpdmF0ZS5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJ
bnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi1AaW50
ZXJmYWNlIFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5FdmVudERpc3BhdGNoZXIgKFByaXZhdGUp
Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihJbnNwZWN0b3I6OkF1Z21lbnRh
YmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcjsKLUBlbmQKLQotCi0jIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVm
aW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgPFdl
Ykluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KLQotbmFtZXNwYWNlIElu
c3BlY3RvciB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KLU9wdGlvbmFsPE9i
akNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOwotCi1p
bmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sUGxhdGZvcm0gdmFsdWUp
Ci17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFs
bDoKLSAgICAgICAgcmV0dXJuICJhbGwiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9y
bUdlbmVyaWM6Ci0gICAgICAgIHJldHVybiAiZ2VuZXJpYyJfczsKLSAgICBjYXNlIFRlc3RQcm90
b2NvbFBsYXRmb3JtSU9TOgotICAgICAgICByZXR1cm4gImlvcyJfczsKLSAgICBjYXNlIFRlc3RQ
cm90b2NvbFBsYXRmb3JtTWFjT1M6Ci0gICAgICAgIHJldHVybiAibWFjb3MiX3M7Ci0gICAgfQot
fQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sUGxhdGZvcm0+IGZy
b21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9
PSAiYWxsIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOwotICAgIGlm
ICh2YWx1ZSA9PSAiZ2VuZXJpYyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9y
bUdlbmVyaWM7Ci0gICAgaWYgKHZhbHVlID09ICJpb3MiKQotICAgICAgICByZXR1cm4gVGVzdFBy
b3RvY29sUGxhdGZvcm1JT1M7Ci0gICAgaWYgKHZhbHVlID09ICJtYWNvcyIpCi0gICAgICAgIHJl
dHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
Ci19Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVm
aW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMu
aCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBl
UGFyc2VyLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJp
dmF0ZS5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW50ZXJmYWNlIFRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucyAoTmV0d29ya0RvbWFpbikKLQotKyAodm9pZClfcGFyc2VO
ZXR3b3JrRXJyb3I6KFRlc3RQcm90b2NvbE5ldHdvcmtFcnJvciAqKilvdXRWYWx1ZSBmcm9tUGF5
bG9hZDooaWQpcGF5bG9hZDsKLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zIChOZXR3b3JrRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZU5ldHdvcmtF
cnJvcjooVGVzdFByb3RvY29sTmV0d29ya0Vycm9yICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihp
ZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBb
TlNEaWN0aW9uYXJ5IGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xOZXR3
b3JrRXJyb3IgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKLX0KLQotQGVuZAotCi0K
LSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJu
YWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0
IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotI2ltcG9ydCA8
d3RmL0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5h
bWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbE5ldHdv
cmtFcnJvcgotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGlj
dGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtz
dXBlciBpbml0XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBUSFJPV19FWENFUFRJT05f
Rk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJtZXNzYWdlIl0sIEAibWVzc2FnZSIpOwot
ICAgIHNlbGYubWVzc2FnZSA9IHBheWxvYWRbQCJtZXNzYWdlIl07Ci0KLSAgICBUSFJPV19FWENF
UFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJjb2RlIl0sIEAiY29kZSIpOwot
ICAgIHNlbGYuY29kZSA9IFtwYXlsb2FkW0AiY29kZSJdIGludGVnZXJWYWx1ZV07Ci0KLSAgICBy
ZXR1cm4gc2VsZjsKLX0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihS
V0lQcm90b2NvbEpTT05PYmplY3QgKilvYmplY3QKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVy
IGluaXRXaXRoSlNPTk9iamVjdDpbb2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0KCldKSkKLSAgICAg
ICAgcmV0dXJuIG5pbDsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZTooaW50KWNvZGUKLXsKLSAg
ICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkobWVzc2FnZSwgQCJtZXNzYWdl
Iik7Ci0KLSAgICBzZWxmLm1lc3NhZ2UgPSBtZXNzYWdlOwotICAgIHNlbGYuY29kZSA9IGNvZGU7
Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClzZXRNZXNzYWdlOihOU1N0cmluZyAq
KW1lc3NhZ2UKLXsKLSAgICBbc3VwZXIgc2V0U3RyaW5nOm1lc3NhZ2UgZm9yS2V5OkAibWVzc2Fn
ZSJdOwotfQotCi0tIChOU1N0cmluZyAqKW1lc3NhZ2UKLXsKLSAgICByZXR1cm4gW3N1cGVyIHN0
cmluZ0ZvcktleTpAIm1lc3NhZ2UiXTsKLX0KLQotLSAodm9pZClzZXRDb2RlOihpbnQpY29kZQot
ewotICAgIFtzdXBlciBzZXRJbnRlZ2VyOmNvZGUgZm9yS2V5OkAiY29kZSJdOwotfQotCi0tIChp
bnQpY29kZQotewotICAgIHJldHVybiBbc3VwZXIgaW50ZWdlckZvcktleTpAImNvZGUiXTsKLX0K
LQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9zYW1lLXR5
cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL3NhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjNiZjRkZmY1Y2NjCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L3NhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KQEAgLTAsMCArMSwyMiBAQAorWwor
eworICAgICJkb21haW4iOiAiUnVudGltZSIsCisgICAgInR5cGVzIjogWworICAgICAgICB7Cisg
ICAgICAgICAgICAiaWQiOiAiUmVtb3RlT2JqZWN0SWQiLAorICAgICAgICAgICAgInR5cGUiOiAi
c3RyaW5nIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgb2JqZWN0IGlkZW50
aWZpZXIuIgorICAgICAgICB9CisgICAgXQorfSwKK3sKKyAgICAiZG9tYWluIjogIlJ1bnRpbWUy
IiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJSZW1vdGVP
YmplY3RJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgImRl
c2NyaXB0aW9uIjogIlVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4iCisgICAgICAgIH0KKyAgICBd
Cit9CitdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24gYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvc2hhZG93ZWQtb3B0aW9uYWwtdHlw
ZS1zZXR0ZXJzLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjIw
YTBjMTU1Mjc1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCkBA
IC0wLDAgKzEsMzEgQEAKK3sKKyAgICAiZG9tYWluIjogIlJ1bnRpbWUiLAorICAgICJ0eXBlcyI6
IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIktleVBhdGgiLAorICAgICAgICAgICAg
InR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJLZXkgcGF0aC4i
LAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAibmFtZSI6ICJ0eXBlIiwKKyAgICAgICAgICAgICAgICAgICAgInR5cGUi
OiAic3RyaW5nIiwKKyAgICAgICAgICAgICAgICAgICAgImVudW0iOiBbIm51bGwiLCAic3RyaW5n
IiwgImFycmF5Il0sCisgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJLZXkgcGF0
aCB0eXBlLiIKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgIm5hbWUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICAgICAgICAgInR5cGUi
OiAic3RyaW5nIiwKKyAgICAgICAgICAgICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAg
ICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlN0cmluZyB2YWx1ZS4iCisgICAgICAgICAg
ICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJuYW1lIjog
ImFycmF5IiwKKyAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiYXJyYXkiLAorICAgICAgICAg
ICAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgICAgICAgICAgICAgICAiaXRlbXMi
OiB7ICJ0eXBlIjogInN0cmluZyIgfSwKKyAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9u
IjogIkFycmF5IHZhbHVlLiIKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdCisgICAg
ICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24gYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvc2hvdWxkLXN0cmlwLWNvbW1lbnRz
Lmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmVjZTFkY2ZjNjFj
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL3Nob3VsZC1zdHJpcC1jb21tZW50cy5qc29uCkBAIC0wLDAgKzEsNSBAQAorewor
ICAgIC8qIGFib3ZlICovCisgICAgLyogYmVmb3JlICovICJkb21haW4iIC8qIGluICovIDogLyog
aW4gKi8gIkNvbW1lbnQiIC8qIGFmdGVyICovCisgICAgLyogYmVsb3cgKi8KK30KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLWRl
Y2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJp
bWl0aXZlLXR5cGUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u
Y2JjOWQ1Mzk0NzgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10
eXBlLmpzb24KQEAgLTAsMCArMSwxMCBAQAoreworICAgICJkb21haW4iOiAiUnVudGltZSIsCisg
ICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiUmVtb3RlT2JqZWN0
SWQiLAorICAgICAgICAgICAgInR5cGUiOiAiaW50ZWdlciIsCisgICAgICAgICAgICAiZGVzY3Jp
cHRpb24iOiAiVW5pcXVlIG9iamVjdCBpZGVudGlmaWVyLiIKKyAgICAgICAgfQorICAgIF0KK30K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy90eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNv
bgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uY2ZiMDhiZDk0MGIKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KQEAgLTAsMCArMSw1MCBAQAor
WworeworICAgICJkb21haW4iOiAiRGVidWdnZXIiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAg
eworICAgICAgICAgICAgImlkIjogIkJyZWFrcG9pbnRJZCIsCisgICAgICAgICAgICAidHlwZSI6
ICJpbnRlZ2VyIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiUmVh
c29uIiwKKyAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAiZW51bSI6
IFsiRGllZCIsICJGYWludGVkIiwgIkh1bmdyeSJdCisgICAgICAgIH0KKyAgICBdCit9LAorewor
ICAgICJkb21haW4iOiAiUnVudGltZSIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAg
ICAgICAgICAiaWQiOiAiT2JqZWN0SWQiLAorICAgICAgICAgICAgInR5cGUiOiAiaW50ZWdlciIK
KyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkx1Y2t5TnVtYmVycyIs
CisgICAgICAgICAgICAidHlwZSI6ICJhcnJheSIsCisgICAgICAgICAgICAiaXRlbXMiOiB7ICJ0
eXBlIjogImludGVnZXIiIH0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlk
IjogIkJhYnlOYW1lcyIsCisgICAgICAgICAgICAidHlwZSI6ICJhcnJheSIsCisgICAgICAgICAg
ICAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfQorICAgICAgICB9LAorICAgICAgICB7Cisg
ICAgICAgICAgICAiaWQiOiAiTmV3T2JqZWN0cyIsCisgICAgICAgICAgICAidHlwZSI6ICJhcnJh
eSIsCisgICAgICAgICAgICAiaXRlbXMiOiB7ICIkcmVmIjogIk9iamVjdElkIiB9CisgICAgICAg
IH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJPbGRPYmplY3RzIiwKKyAgICAgICAg
ICAgICJ0eXBlIjogImFycmF5IiwKKyAgICAgICAgICAgICJpdGVtcyI6IHsgIiRyZWYiOiAiRGVi
dWdnZXIuQnJlYWtwb2ludElkIiB9CisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAg
ICJpZCI6ICJTdG9wUmVhc29ucyIsCisgICAgICAgICAgICAidHlwZSI6ICJhcnJheSIsCisgICAg
ICAgICAgICAiaXRlbXMiOiB7ICIkcmVmIjogIkRlYnVnZ2VyLlJlYXNvbiIgfQorICAgICAgICB9
CisgICAgXQorfQorXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24gYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1kZWNsYXJhdGlvbi1l
bnVtLXR5cGUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOWYw
YWVlOWM5MWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgpAQCAtMCww
ICsxLDE1IEBACit7CisgICAgImRvbWFpbiI6ICJSdW50aW1lIiwKKyAgICAidHlwZXMiOiBbCisg
ICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJGYXJtQW5pbWFscyIsCisgICAgICAgICAgICAi
dHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgImVudW0iOiBbIlBpZ3MiLCAiQ293cyIsICJD
YXRzIiwgIkhlbnMiXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAi
VHdvTGVnZ2VkQW5pbWFscyIsCisgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAg
ICAgICAgImVudW0iOiBbIkR1Y2tzIiwgIkhlbnMiLCAiQ3Jvd3MiLCAiRmxhbWluZ29zIl0KKyAg
ICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24gYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1kZWNsYXJh
dGlvbi1vYmplY3QtdHlwZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwLi4yYzQzYzMzMDk5MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpz
b24KQEAgLTAsMCArMSwxMDAgQEAKK1sKK3sKKyAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKKyAg
ICAiZGVzY3JpcHRpb24iOiAiVGVzdCB0eXBlIGJ1aWxkZXIgZ2VuZXJhdGlvbiBvZiB2YXJpb3Vz
IG9iamVjdCB0eXBlcy4iLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAg
ImlkIjogIkVycm9yIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAg
ICAiZGVzY3JpcHRpb24iOiAiRGF0YWJhc2UgZXJyb3IuIiwKKyAgICAgICAgICAgICJwcm9wZXJ0
aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibWVzc2FnZSIsICJ0eXBlIjogInN0
cmluZyIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBtZXNzYWdlLiIgfSwKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogImNvZGUiLCAidHlwZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9uIjogIkVy
cm9yIGNvZGUuIiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAg
ICAgICAgICJpZCI6ICJFcnJvckxpc3QiLAorICAgICAgICAgICAgInR5cGUiOiAiYXJyYXkiLAor
ICAgICAgICAgICAgIml0ZW1zIjogeyAiJHJlZiI6ICJFcnJvciIgfQorICAgICAgICB9LAorICAg
ICAgICB7CisgICAgICAgICAgICAiaWQiOiAiTW91c2VCdXR0b24iLAorICAgICAgICAgICAgInR5
cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJFbnVtZXJhdGVzIGRp
ZmZlcmVudCBtb3VzZSBidXR0b25zIHRoYXQgY2FuIGJlIHVzZWQuIiwKKyAgICAgICAgICAgICJl
bnVtIjogWworICAgICAgICAgICAgICAgICJOb25lIiwKKyAgICAgICAgICAgICAgICAiTGVmdCIs
CisgICAgICAgICAgICAgICAgIk1pZGRsZSIsCisgICAgICAgICAgICAgICAgIlJpZ2h0IgorICAg
ICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiT3B0
aW9uYWxQYXJhbWV0ZXJCdW5kbGUiLAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAg
ICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29s
dW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJvcHRpb25hbCI6IHRydWUsICJpdGVtcyI6IHsg
InR5cGUiOiAic3RyaW5nIiB9IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJidXR0b25z
IiwgInR5cGUiOiAiYXJyYXkiLCAib3B0aW9uYWwiOiB0cnVlLCAiaXRlbXMiOiB7ICIkcmVmIjog
Ik1vdXNlQnV0dG9uIiB9IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkaXJlY3Rpb25h
bGl0eSIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJMVFIiLCAiUlRMIl0sICJvcHRpb25h
bCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAi
c3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
dGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFs
IjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjog
ImFueSIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImVy
cm9yIiwgIiRyZWYiOiAiRXJyb3IiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJlcnJvckxpc3QiLCAiJHJlZiI6ICJFcnJvckxpc3QiLCAib3B0aW9uYWwi
OiB0cnVlIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAg
ICAgImlkIjogIlBhcmFtZXRlckJ1bmRsZSIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3Qi
LAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJp
bmciIH0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImJ1dHRvbnMiLCAidHlwZSI6ICJh
cnJheSIsICJpdGVtcyI6IHsgIiRyZWYiOiAiTW91c2VCdXR0b24iIH0gfSwKKyAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogImRpcmVjdGlvbmFsaXR5IiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0i
OiBbIkxUUiIsICJSVEwiXSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAi
dHlwZSI6ICJzdHJpbmciIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAi
LCAidHlwZSI6ICJudW1iZXIiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMi
LCAidHlwZSI6ICJvYmplY3QiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2Fk
IiwgInR5cGUiOiAiYW55IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZXJyb3IiLCAi
JHJlZiI6ICJFcnJvciIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImVycm9yTGlzdCIs
ICIkcmVmIjogIkVycm9yTGlzdCIgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAg
ICB7CisgICAgICAgICAgICAiaWQiOiAiT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cyIs
CisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQ29uZmxpY3RlZCBuYW1lcyBtYXkgY2F1c2Ug
Z2VuZXJhdGVkIGdldHRlcnMvc2V0dGVycyB0byBjbGFzaCB3aXRoIGJ1aWx0LWluIEluc3BlY3Rv
ck9iamVjdCBtZXRob2RzLiIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAg
ICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJpbnRlZ2Vy
IiwgInR5cGUiOiAic3RyaW5nIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYXJyYXki
LCAidHlwZSI6ICJzdHJpbmciIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzdHJpbmci
LCAidHlwZSI6ICJzdHJpbmciIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZSIs
ICJ0eXBlIjogInN0cmluZyIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm9iamVjdCIs
ICJ0eXBlIjogInN0cmluZyIgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7
CisgICAgICAgICAgICAiaWQiOiAiRHVtbXlPYmplY3QiLAorICAgICAgICAgICAgImRlc2NyaXB0
aW9uIjogIkFuIG9wZW4gb2JqZWN0IHRoYXQgZG9lc24ndCBoYXZlIGFueSBwcmVkZWZpbmVkIGZp
ZWxkcy4iLAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IgorICAgICAgICB9CisgICAgXQor
fSwKK3sKKyAgICAiZG9tYWluIjogIlRlc3QiLAorICAgICJkZXNjcmlwdGlvbiI6ICJUZXN0IHRo
ZSBnZW5lcmF0aW9uIG9mIHNwZWNpYWwgYmVoYXZpb3JzIHRoYXQgb25seSBhcHBseSB0byBzcGVj
aWZpYyBjbGFzc2VzLiIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAi
aWQiOiAiUGFyYW1ldGVyQnVuZGxlIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisg
ICAgICAgICAgICAicHJvcGVydGllcyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRp
cmVjdGlvbmFsaXR5IiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbIkxUUiIsICJSVEwiXSB9
LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYnV0dG9ucyIsICJ0eXBlIjogImFycmF5Iiwg
Iml0ZW1zIjogeyAiJHJlZiI6ICJEYXRhYmFzZS5Nb3VzZUJ1dHRvbiIgfSB9LAorICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6
IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3Rl
cyIsICJ0eXBlIjogInN0cmluZyIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVz
dGFtcCIsICJ0eXBlIjogIm51bWJlciIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZh
bHVlcyIsICJ0eXBlIjogIm9iamVjdCIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBh
eWxvYWQiLCAidHlwZSI6ICJhbnkiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJlcnJv
ciIsICIkcmVmIjogIkRhdGFiYXNlLkVycm9yIiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0K
KyAgICBdCit9CitdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtcmVxdWlyaW5nLXJ1
bnRpbWUtY2FzdHMuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u
ODNkOTRiZTg5N2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCkBA
IC0wLDAgKzEsNTEgQEAKK1sKK3sKKyAgICAiZG9tYWluIjogIlRlc3QiLAorICAgICJ0eXBlcyI6
IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlR5cGVOZWVkaW5nQ2FzdCIsCisgICAg
ICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkEg
ZHVtbXkgdHlwZSB0aGF0IHJlcXVpcmVzIHJ1bnRpbWUgY2FzdHMsIGFuZCBmb3JjZXMgbm9uLXBy
aW1pdGl2ZSByZWZlcmVuY2VkIHR5cGVzIHRvIGFsc28gZW1pdCBydW50aW1lIGNhc3QgaGVscGVy
cy4iLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJzdHJpbmciLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiU3RyaW5nIG1l
bWJlci4iIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJudW1iZXIiLCAidHlwZSI6ICJp
bnRlZ2VyIiwgImRlc2NyaXB0aW9uIjogIk51bWJlciBtZW1iZXIuIiB9LAorICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAiYW5pbWFscyIsICIkcmVmIjogIkNhc3RlZEFuaW1hbHMiLCAiZGVzY3Jp
cHRpb24iOiAiRW51bSBtZW1iZXIuIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiaWQi
LCAiJHJlZiI6ICJDYXN0ZWRPYmplY3RJZCIsICJkZXNjcmlwdGlvbiI6ICJBbGlhc2VkIG1lbWJl
ci4iIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0cmVlIiwgIiRyZWYiOiAiUmVjdXJz
aXZlT2JqZWN0MSIsICJkZXNjcmlwdGlvbiI6ICJSZWN1cnNpdmUgb2JqZWN0IG1lbWJlci4iIH0K
KyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjog
IkNhc3RlZE9iamVjdElkIiwKKyAgICAgICAgICAgICJ0eXBlIjogImludGVnZXIiCisgICAgICAg
IH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJVbmNhc3RlZE9iamVjdElkIiwKKyAg
ICAgICAgICAgICJ0eXBlIjogImludGVnZXIiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAg
ICAgICAgICJpZCI6ICJVbmNhc3RlZEFuaW1hbHMiLAorICAgICAgICAgICAgInR5cGUiOiAic3Ry
aW5nIiwKKyAgICAgICAgICAgICJlbnVtIjogWyJQaWdzIiwgIkNvd3MiLCAiQ2F0cyIsICJIZW5z
Il0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkNhc3RlZEFuaW1h
bHMiLAorICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICJlbnVtIjog
WyJEdWNrcyIsICJIZW5zIiwgIkNyb3dzIiwgIkZsYW1pbmdvcyJdCisgICAgICAgIH0sCisgICAg
ICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJSZWN1cnNpdmVPYmplY3QxIiwKKyAgICAgICAgICAg
ICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKKyAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogIm9iaiIsICIkcmVmIjogIlJlY3Vyc2l2ZU9iamVjdDIiLCAib3B0
aW9uYWwiOiB0cnVlIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAg
ICAgICAgICAgImlkIjogIlJlY3Vyc2l2ZU9iamVjdDIiLAorICAgICAgICAgICAgInR5cGUiOiAi
b2JqZWN0IiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAib2JqIiwgIiRyZWYiOiAiUmVjdXJzaXZlT2JqZWN0MSIsICJvcHRpb25hbCI6IHRy
dWUgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXQorfQorXQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtd2l0aC1v
cGVuLXBhcmFtZXRlcnMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy90eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24KbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjk5YjAyMjBkMzEyCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtd2l0aC1v
cGVuLXBhcmFtZXRlcnMuanNvbgpAQCAtMCwwICsxLDIxIEBACit7CisgICAgImRvbWFpbiI6ICJU
ZXN0IiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJOb09w
ZW5QYXJhbWV0ZXJzIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAg
ICAicHJvcGVydGllcyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm9uZSIsICJ0eXBl
IjogIm51bWJlciIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInR3byIsICJ0eXBlIjog
Im51bWJlciIgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAg
ICAgICAiaWQiOiAiT3BlblBhcmFtZXRlcnMiLAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0
IiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAiYWxwaGEiLCAidHlwZSI6ICJudW1iZXIiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJiZXRhIiwgInR5cGUiOiAibnVtYmVyIiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAg
ICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvdmVyc2lvbi5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL3ZlcnNpb24uanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMC4uNTA3YTVkOTAxNzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdmVyc2lvbi5qc29uCkBAIC0wLDAgKzEsNiBA
QAoreyJkb21haW5zIjpbCit7CisgICAgImRvbWFpbiI6ICJWZXJzaW9uRG9tYWluIiwKKyAgICAi
dmVyc2lvbiI6IDQyCit9CitdfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckZyb250ZW5kSG9zdC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRnJvbnRlbmRIb3N0LmlkbAppbmRleCBlNzhjMTg5MTk2Mi4uMmNjYTFiNzAzMmIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3Qu
aWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3Qu
aWRsCkBAIC05Myw5ICs5Myw3IEBACiAgICAgYm9vbGVhbiBpc0JlaW5nSW5zcGVjdGVkKCk7CiAK
ICAgICByZWFkb25seSBhdHRyaWJ1dGUgYm9vbGVhbiBzdXBwb3J0c0RpYWdub3N0aWNMb2dnaW5n
OwotI2lmIEVOQUJMRV9JTlNQRUNUT1JfVEVMRU1FVFJZCi0gICAgdm9pZCBsb2dEaWFnbm9zdGlj
RXZlbnQoRE9NU3RyaW5nIGV2ZW50TmFtZSwgRE9NU3RyaW5nIGNvbnRlbnQpOwotI2VuZGlmCisg
ICAgW0NvbmRpdGlvbmFsPUlOU1BFQ1RPUl9URUxFTUVUUlldIHZvaWQgbG9nRGlhZ25vc3RpY0V2
ZW50KERPTVN0cmluZyBldmVudE5hbWUsIERPTVN0cmluZyBjb250ZW50KTsKIH07CiAKIGRpY3Rp
b25hcnkgQ29udGV4dE1lbnVJdGVtIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAKaW5kZXggMGM0NDJlZTkwODguLmFjYTkz
Mjg2YWE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uLmNwcApAQCAtNzkzLDExICs3OTMsMTMgQEAgdm9pZCBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OmZyYW1lQ2xlYXJlZFNjaGVkdWxlZE5hdmlnYXRpb25JbXBsKEluc3Ry
dW1lbnRpbmcKICAgICAgICAgaW5zcGVjdG9yUGFnZUFnZW50LT5mcmFtZUNsZWFyZWRTY2hlZHVs
ZWROYXZpZ2F0aW9uKGZyYW1lKTsKIH0KIAorI2lmIEVOQUJMRShEQVJLX01PREVfQ1NTKSB8fCBI
QVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQogdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OmRlZmF1bHRBcHBlYXJhbmNlRGlkQ2hhbmdlSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzJiBpbnN0
cnVtZW50aW5nQWdlbnRzLCBib29sIHVzZURhcmtBcHBlYXJhbmNlKQogewogICAgIGlmIChJbnNw
ZWN0b3JQYWdlQWdlbnQqIGluc3BlY3RvclBhZ2VBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMu
aW5zcGVjdG9yUGFnZUFnZW50KCkpCiAgICAgICAgIGluc3BlY3RvclBhZ2VBZ2VudC0+ZGVmYXVs
dEFwcGVhcmFuY2VEaWRDaGFuZ2UodXNlRGFya0FwcGVhcmFuY2UpOwogfQorI2VuZGlmCiAKIHZv
aWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsRGVzdHJveUNhY2hlZFJlc291cmNlSW1w
bChDYWNoZWRSZXNvdXJjZSYgY2FjaGVkUmVzb3VyY2UpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmggYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgKaW5kZXggMDNiZGQ1NWNj
OTMuLjE4ODk1NjQ3OGUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3Rvckluc3RydW1lbnRhdGlvbi5oCkBAIC0yMjksNyArMjI5LDkgQEAgcHVibGljOgogICAg
IHN0YXRpYyB2b2lkIGZyYW1lU3RvcHBlZExvYWRpbmcoRnJhbWUmKTsKICAgICBzdGF0aWMgdm9p
ZCBmcmFtZVNjaGVkdWxlZE5hdmlnYXRpb24oRnJhbWUmLCBTZWNvbmRzIGRlbGF5KTsKICAgICBz
dGF0aWMgdm9pZCBmcmFtZUNsZWFyZWRTY2hlZHVsZWROYXZpZ2F0aW9uKEZyYW1lJik7CisjaWYg
RU5BQkxFKERBUktfTU9ERV9DU1MpIHx8IEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCiAgICAg
c3RhdGljIHZvaWQgZGVmYXVsdEFwcGVhcmFuY2VEaWRDaGFuZ2UoUGFnZSYsIGJvb2wgdXNlRGFy
a0FwcGVhcmFuY2UpOworI2VuZGlmCiAgICAgc3RhdGljIHZvaWQgd2lsbERlc3Ryb3lDYWNoZWRS
ZXNvdXJjZShDYWNoZWRSZXNvdXJjZSYpOwogCiAgICAgc3RhdGljIGJvb2wgd2lsbEludGVyY2Vw
dFJlcXVlc3QoY29uc3QgRnJhbWUqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmKTsKQEAgLTQzNCw3
ICs0MzYsOSBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIGZyYW1lU3RvcHBlZExvYWRpbmdJ
bXBsKEluc3RydW1lbnRpbmdBZ2VudHMmLCBGcmFtZSYpOwogICAgIHN0YXRpYyB2b2lkIGZyYW1l
U2NoZWR1bGVkTmF2aWdhdGlvbkltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYsIEZyYW1lJiwgU2Vj
b25kcyBkZWxheSk7CiAgICAgc3RhdGljIHZvaWQgZnJhbWVDbGVhcmVkU2NoZWR1bGVkTmF2aWdh
dGlvbkltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYsIEZyYW1lJik7CisjaWYgRU5BQkxFKERBUktf
TU9ERV9DU1MpIHx8IEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCiAgICAgc3RhdGljIHZvaWQg
ZGVmYXVsdEFwcGVhcmFuY2VEaWRDaGFuZ2VJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmLCBib29s
IHVzZURhcmtBcHBlYXJhbmNlKTsKKyNlbmRpZgogICAgIHN0YXRpYyB2b2lkIHdpbGxEZXN0cm95
Q2FjaGVkUmVzb3VyY2VJbXBsKENhY2hlZFJlc291cmNlJik7CiAKICAgICBzdGF0aWMgYm9vbCB3
aWxsSW50ZXJjZXB0UmVxdWVzdEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYsIGNvbnN0IFJlc291
cmNlUmVxdWVzdCYpOwpAQCAtMTIzNywxMSArMTI0MSwxMyBAQCBpbmxpbmUgdm9pZCBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OmZyYW1lQ2xlYXJlZFNjaGVkdWxlZE5hdmlnYXRpb24oRnJhbWUm
IGZyYQogICAgICAgICBmcmFtZUNsZWFyZWRTY2hlZHVsZWROYXZpZ2F0aW9uSW1wbCgqaW5zdHJ1
bWVudGluZ0FnZW50cywgZnJhbWUpOwogfQogCisjaWYgRU5BQkxFKERBUktfTU9ERV9DU1MpIHx8
IEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OmRlZmF1bHRBcHBlYXJhbmNlRGlkQ2hhbmdlKFBhZ2UmIHBhZ2UsIGJvb2wgdXNl
RGFya0FwcGVhcmFuY2UpCiB7CiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQo
KSk7CiAgICAgZGVmYXVsdEFwcGVhcmFuY2VEaWRDaGFuZ2VJbXBsKGluc3RydW1lbnRpbmdBZ2Vu
dHNGb3JQYWdlKHBhZ2UpLCB1c2VEYXJrQXBwZWFyYW5jZSk7CiB9CisjZW5kaWYKIAogaW5saW5l
IHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsRGVzdHJveUNhY2hlZFJlc291cmNl
KENhY2hlZFJlc291cmNlJiBjYWNoZWRSZXNvdXJjZSkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTaGFkZXJQcm9ncmFtLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTaGFkZXJQcm9ncmFtLmNwcAppbmRleCAyOTFiZDI0YjA2
Zi4uZjgxNmJiNmY0MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JTaGFkZXJQcm9ncmFtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yU2hhZGVyUHJvZ3JhbS5jcHAKQEAgLTI2LDYgKzI2LDggQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JTaGFkZXJQcm9ncmFtLmgiCiAKKyNpZiBFTkFCTEUo
V0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpCisKICNpbmNsdWRlICJJbnNwZWN0b3JDYW52YXMuaCIK
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JZGVudGlmaWVyc0ZhY3RvcnkuaD4KICNpbmNsdWRl
IDx3dGYvT3B0aW9uYWwuaD4KQEAgLTE1MiwxMCArMTU0LDYgQEAgc3RhdGljIFJlZlB0cjxXZWJH
UFVTaGFkZXJNb2R1bGU+IHNoYWRlckZvclR5cGUoV2ViR1BVUGlwZWxpbmUmIHBpcGVsaW5lLCBJ
bnNwZWMKIAogU3RyaW5nIEluc3BlY3RvclNoYWRlclByb2dyYW06OnJlcXVlc3RTaGFkZXJTb3Vy
Y2UoSW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpTaGFkZXJUeXBlIHNoYWRlclR5cGUpCiB7
Ci0jaWYgIUVOQUJMRShXRUJHTCkgJiYgIUVOQUJMRShXRUJHUFUpCi0gICAgVU5VU0VEX1BBUkFN
KHNoYWRlclR5cGUpOwotI2VuZGlmCi0KICAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3Byb2dy
YW0sCiAjaWYgRU5BQkxFKFdFQkdMKQogICAgICAgICBbJl0gKHN0ZDo6cmVmZXJlbmNlX3dyYXBw
ZXI8V2ViR0xQcm9ncmFtPiBwcm9ncmFtV3JhcHBlcikgewpAQCAtMTg0LDExICsxODIsNiBAQCBT
dHJpbmcgSW5zcGVjdG9yU2hhZGVyUHJvZ3JhbTo6cmVxdWVzdFNoYWRlclNvdXJjZShJbnNwZWN0
b3I6OlByb3RvY29sOjpDYW52YXM6OgogCiBib29sIEluc3BlY3RvclNoYWRlclByb2dyYW06OnVw
ZGF0ZVNoYWRlcihJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OlNoYWRlclR5cGUgc2hhZGVy
VHlwZSwgY29uc3QgU3RyaW5nJiBzb3VyY2UpCiB7Ci0jaWYgIUVOQUJMRShXRUJHTCkgJiYgIUVO
QUJMRShXRUJHUFUpCi0gICAgVU5VU0VEX1BBUkFNKHNoYWRlclR5cGUpOwotICAgIFVOVVNFRF9Q
QVJBTShzb3VyY2UpOwotI2VuZGlmCi0KICAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3Byb2dy
YW0sCiAjaWYgRU5BQkxFKFdFQkdMKQogICAgICAgICBbJl0gKHN0ZDo6cmVmZXJlbmNlX3dyYXBw
ZXI8V2ViR0xQcm9ncmFtPiBwcm9ncmFtV3JhcHBlcikgewpAQCAtMjgxLDMgKzI3NCw1IEBAIFJl
ZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OlNoYWRlclByb2dyYW0+IEluc3BlY3RvclNo
YWRlclByb2dyYW06OmJ1aWxkT2JqCiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEVOQUJMRShXRUJHTCkgfHwgRU5BQkxFKFdFQkdQVSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTaGFkZXJQcm9ncmFtLmggYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU2hhZGVyUHJvZ3JhbS5oCmluZGV4IDZkZjEzZGZmZGVi
Li5jY2M3M2NlZjM3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclNoYWRlclByb2dyYW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yU2hhZGVyUHJvZ3JhbS5oCkBAIC0yNSw2ICsyNSw4IEBACiAKICNwcmFnbWEgb25jZQogCisj
aWYgRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKQorCiAjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yUHJvdG9jb2xPYmplY3RzLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgpAQCAtOTksMyArMTAxLDUgQEAgcHJpdmF0
ZToKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJH
TCkgfHwgRU5BQkxFKFdFQkdQVSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9hZ2VudHMvSW5zcGVjdG9yQ2FudmFzQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JDYW52YXNBZ2VudC5jcHAKaW5kZXggMWQzOThjNTQ3Y2MuLjVm
ZmYyOTg2MzM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3RvckNhbnZhc0FnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdl
bnRzL0luc3BlY3RvckNhbnZhc0FnZW50LmNwcApAQCAtODgsNyArODgsOSBAQCBJbnNwZWN0b3JD
YW52YXNBZ2VudDo6SW5zcGVjdG9yQ2FudmFzQWdlbnQoUGFnZUFnZW50Q29udGV4dCYgY29udGV4
dCkKICAgICAsIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKGNvbnRleHQuaW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyKQogICAgICwgbV9pbnNwZWN0ZWRQYWdlKGNvbnRleHQuaW5zcGVjdGVkUGFnZSkKICAg
ICAsIG1fY2FudmFzRGVzdHJveWVkVGltZXIoKnRoaXMsICZJbnNwZWN0b3JDYW52YXNBZ2VudDo6
Y2FudmFzRGVzdHJveWVkVGltZXJGaXJlZCkKKyNpZiBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShX
RUJHUFUpCiAgICAgLCBtX3Byb2dyYW1EZXN0cm95ZWRUaW1lcigqdGhpcywgJkluc3BlY3RvckNh
bnZhc0FnZW50Ojpwcm9ncmFtRGVzdHJveWVkVGltZXJGaXJlZCkKKyNlbmRpZiAvLyBFTkFCTEUo
V0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpCiB7CiB9CiAKQEAgLTEzMiw3ICsxMzQsNyBAQCB2b2lk
IEluc3BlY3RvckNhbnZhc0FnZW50OjplbmFibGUoRXJyb3JTdHJpbmcmKQogICAgICAgICAgICAg
Ly8gVGhlIGFjdHVhbCAiY29udGV4dCIgZm9yIFdlYkdQVSBpcyB0aGUgYFdlYkdQVURldmljZWAs
IG5vdCB0aGUgPGNhbnZhcz4uCiAgICAgICAgICAgICBpZiAoaXM8R1BVQ2FudmFzQ29udGV4dD4o
Y29udGV4dCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0jZW5kaWYKKyNlbmRpZiAvLyBF
TkFCTEUoV0VCR1BVKQogCiAgICAgICAgICAgICBpZiAoZXhpc3RzSW5DdXJyZW50UGFnZShjb250
ZXh0LT5jYW52YXNCYXNlKCkuc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKSkKICAgICAgICAgICAg
ICAgICBiaW5kQ2FudmFzKCpjb250ZXh0LCBmYWxzZSk7CkBAIC0xNDcsNyArMTQ5LDcgQEAgdm9p
ZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nJikKICAgICAgICAgICAg
ICAgICBiaW5kQ2FudmFzKCpkZXZpY2UsIGZhbHNlKTsKICAgICAgICAgfQogICAgIH0KLSNlbmRp
ZgorI2VuZGlmIC8vIEVOQUJMRShXRUJHUFUpCiAKICNpZiBFTkFCTEUoV0VCR0wpCiAgICAgewpA
QCAtMTU3LDcgKzE1OSw3IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmVuYWJsZShFcnJv
clN0cmluZyYpCiAgICAgICAgICAgICAgICAgZGlkQ3JlYXRlV2ViR0xQcm9ncmFtKCpjb250ZXh0
V2ViR0xCYXNlLCAqcHJvZ3JhbSk7CiAgICAgICAgIH0KICAgICB9Ci0jZW5kaWYKKyNlbmRpZiAv
LyBFTkFCTEUoV0VCR0wpCiAKICNpZiBFTkFCTEUoV0VCR1BVKQogICAgIHsKQEAgLTE2Nyw3ICsx
NjksNyBAQCB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjplbmFibGUoRXJyb3JTdHJpbmcmKQog
ICAgICAgICAgICAgICAgIGRpZENyZWF0ZVdlYkdQVVBpcGVsaW5lKCpkZXZpY2UsICpwaXBlbGlu
ZSk7CiAgICAgICAgIH0KICAgICB9Ci0jZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR1BVKQog
fQogCiB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpkaXNhYmxlKEVycm9yU3RyaW5nJikKQEAg
LTMwMyw2ICszMDUsNyBAQCB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpzdG9wUmVjb3JkaW5n
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJgogICAgIGRpZEZpbmlzaFJl
Y29yZGluZ0NhbnZhc0ZyYW1lKCpjb250ZXh0LCB0cnVlKTsKIH0KIAorI2lmIEVOQUJMRShXRUJH
TCkgfHwgRU5BQkxFKFdFQkdQVSkKIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnJlcXVlc3RT
aGFkZXJTb3VyY2UoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHByb2dy
YW1JZCwgY29uc3QgU3RyaW5nJiBzaGFkZXJUeXBlU3RyaW5nLCBTdHJpbmcqIG91dFNvdXJjZSkK
IHsKICAgICBhdXRvIGluc3BlY3RvclByb2dyYW0gPSBhc3NlcnRJbnNwZWN0b3JQcm9ncmFtKGVy
cm9yU3RyaW5nLCBwcm9ncmFtSWQpOwpAQCAtMzQwLDYgKzM0Myw3IEBAIHZvaWQgSW5zcGVjdG9y
Q2FudmFzQWdlbnQ6OnVwZGF0ZVNoYWRlcihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0
IFN0cmluZyYKICAgICAgICAgZXJyb3JTdHJpbmcgPSAiRmFpbGVkIHRvIHVwZGF0ZSBzaGFkZXIg
b2YgZ2l2ZW4gc2hhZGVyVHlwZSBmb3IgZ2l2ZW4gcHJvZ3JhbUlkIl9zOwogfQogCisjaWYgRU5B
QkxFKFdFQkdMKQogdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6c2V0U2hhZGVyUHJvZ3JhbURp
c2FibGVkKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBwcm9ncmFtSWQs
IGJvb2wgZGlzYWJsZWQpCiB7CiAgICAgYXV0byBpbnNwZWN0b3JQcm9ncmFtID0gYXNzZXJ0SW5z
cGVjdG9yUHJvZ3JhbShlcnJvclN0cmluZywgcHJvZ3JhbUlkKTsKQEAgLTM1Nyw2ICszNjEsOCBA
QCB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpzZXRTaGFkZXJQcm9ncmFtSGlnaGxpZ2h0ZWQo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLAogCiAgICAgaW5zcGVjdG9yUHJvZ3JhbS0+c2V0SGln
aGxpZ2h0ZWQoaGlnaGxpZ2h0ZWQpOwogfQorI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKKyNlbmRp
ZiAvLyNpZiBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpCiAKIHZvaWQgSW5zcGVjdG9y
Q2FudmFzQWdlbnQ6OmZyYW1lTmF2aWdhdGVkKEZyYW1lJiBmcmFtZSkKIHsKQEAgLTYyNSw3ICs2
MzEsNyBAQCBib29sIEluc3BlY3RvckNhbnZhc0FnZW50Ojppc1dlYkdMUHJvZ3JhbUhpZ2hsaWdo
dGVkKFdlYkdMUHJvZ3JhbSYgcHJvZ3JhbSkKIAogICAgIHJldHVybiBpbnNwZWN0b3JQcm9ncmFt
LT5oaWdobGlnaHRlZCgpOwogfQotI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQogCiAj
aWYgRU5BQkxFKFdFQkdQVSkKIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmRpZENyZWF0ZVdl
YkdQVURldmljZShXZWJHUFVEZXZpY2UmIGRldmljZSkKQEAgLTY4OCw3ICs2OTQsNyBAQCB2b2lk
IEluc3BlY3RvckNhbnZhc0FnZW50Ojp3aWxsRGVzdHJveVdlYkdQVVBpcGVsaW5lKFdlYkdQVVBp
cGVsaW5lJiBwaXBlbGluZSkKIAogICAgIHVuYmluZFByb2dyYW0oKmluc3BlY3RvclByb2dyYW0p
OwogfQotI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdQVSkKIAogdm9pZCBJbnNwZWN0b3JD
YW52YXNBZ2VudDo6c3RhcnRSZWNvcmRpbmcoSW5zcGVjdG9yQ2FudmFzJiBpbnNwZWN0b3JDYW52
YXMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlY29yZGluZzo6SW5pdGlhdG9yIGluaXRpYXRvciwg
UmVjb3JkaW5nT3B0aW9ucyYmIHJlY29yZGluZ09wdGlvbnMpCiB7CkBAIC03MDAsMTAgKzcwNiwx
MCBAQCB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpzdGFydFJlY29yZGluZyhJbnNwZWN0b3JD
YW52YXMmIGluc3BlY3RvckNhbnZhcywgSW5zcAogICAgICAgICAmJiAhaXM8SW1hZ2VCaXRtYXBS
ZW5kZXJpbmdDb250ZXh0Pihjb250ZXh0KQogI2lmIEVOQUJMRShXRUJHTCkKICAgICAgICAgJiYg
IWlzPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4oY29udGV4dCkKLSNlbmRpZgorI2VuZGlmIC8vIEVO
QUJMRShXRUJHTCkKICNpZiBFTkFCTEUoV0VCR0wyKQogICAgICAgICAmJiAhaXM8V2ViR0wyUmVu
ZGVyaW5nQ29udGV4dD4oY29udGV4dCkKLSNlbmRpZgorI2VuZGlmIC8vIEVOQUJMRShXRUJHTDIp
CiAgICAgKQogICAgICAgICByZXR1cm47CiAKQEAgLTczMyw2ICs3MzksNyBAQCB2b2lkIEluc3Bl
Y3RvckNhbnZhc0FnZW50OjpjYW52YXNEZXN0cm95ZWRUaW1lckZpcmVkKCkKICAgICBtX3JlbW92
ZWRDYW52YXNJZGVudGlmaWVycy5jbGVhcigpOwogfQogCisjaWYgRU5BQkxFKFdFQkdMKSB8fCBF
TkFCTEUoV0VCR1BVKQogdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6cHJvZ3JhbURlc3Ryb3ll
ZFRpbWVyRmlyZWQoKQogewogICAgIGlmICghbV9yZW1vdmVkUHJvZ3JhbUlkZW50aWZpZXJzLnNp
emUoKSkKQEAgLTc0Myw2ICs3NTAsNyBAQCB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50Ojpwcm9n
cmFtRGVzdHJveWVkVGltZXJGaXJlZCgpCiAKICAgICBtX3JlbW92ZWRQcm9ncmFtSWRlbnRpZmll
cnMuY2xlYXIoKTsKIH0KKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUp
CiAKIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnJlc2V0KCkKIHsKQEAgLTc1NiwxMCArNzY0
LDEyIEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnJlc2V0KCkKICAgICBpZiAobV9jYW52
YXNEZXN0cm95ZWRUaW1lci5pc0FjdGl2ZSgpKQogICAgICAgICBtX2NhbnZhc0Rlc3Ryb3llZFRp
bWVyLnN0b3AoKTsKIAorI2lmIEVOQUJMRShXRUJHTCkgfHwgRU5BQkxFKFdFQkdQVSkKICAgICBt
X2lkZW50aWZpZXJUb0luc3BlY3RvclByb2dyYW0uY2xlYXIoKTsKICAgICBtX3JlbW92ZWRQcm9n
cmFtSWRlbnRpZmllcnMuY2xlYXIoKTsKICAgICBpZiAobV9wcm9ncmFtRGVzdHJveWVkVGltZXIu
aXNBY3RpdmUoKSkKICAgICAgICAgbV9wcm9ncmFtRGVzdHJveWVkVGltZXIuc3RvcCgpOworI2Vu
ZGlmIC8vIEVOQUJMRShXRUJHTCkgfHwgRU5BQkxFKFdFQkdQVSkKIAogICAgIG1fcmVjb3JkaW5n
Q2FudmFzSWRlbnRpZmllcnMuY2xlYXIoKTsKIH0KQEAgLTc5OCw3ICs4MDgsNyBAQCBJbnNwZWN0
b3JDYW52YXMmIEluc3BlY3RvckNhbnZhc0FnZW50OjpiaW5kQ2FudmFzKFdlYkdQVURldmljZSYg
ZGV2aWNlLCBib29sIGNhcAogCiAgICAgcmV0dXJuIGluc3BlY3RvckNhbnZhczsKIH0KLSNlbmRp
ZgorI2VuZGlmIC8vIEVOQUJMRShXRUJHUFUpCiAKIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6
OnVuYmluZENhbnZhcyhJbnNwZWN0b3JDYW52YXMmIGluc3BlY3RvckNhbnZhcykKIHsKQEAgLTgx
MSw3ICs4MjEsNyBAQCB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50Ojp1bmJpbmRDYW52YXMoSW5z
cGVjdG9yQ2FudmFzJiBpbnNwZWN0b3JDYW52YXMpCiAKICAgICBmb3IgKGF1dG8qIGluc3BlY3Rv
clByb2dyYW0gOiBwcm9ncmFtc1RvUmVtb3ZlKQogICAgICAgICB1bmJpbmRQcm9ncmFtKCppbnNw
ZWN0b3JQcm9ncmFtKTsKLSNlbmRpZgorI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKIAogICAgIGlm
IChhdXRvKiBjb250ZXh0ID0gaW5zcGVjdG9yQ2FudmFzLmNhbnZhc0NvbnRleHQoKSkKICAgICAg
ICAgY29udGV4dC0+Y2FudmFzQmFzZSgpLnJlbW92ZU9ic2VydmVyKCp0aGlzKTsKQEAgLTg1Niw4
ICs4NjYsOSBAQCBSZWZQdHI8SW5zcGVjdG9yQ2FudmFzPiBJbnNwZWN0b3JDYW52YXNBZ2VudDo6
ZmluZEluc3BlY3RvckNhbnZhcyhXZWJHUFVEZXZpY2UmCiAgICAgfQogICAgIHJldHVybiBudWxs
cHRyOwogfQotI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdQVSkKIAorI2lmIEVOQUJMRShX
RUJHTCkgfHwgRU5BQkxFKFdFQkdQVSkKIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnVuYmlu
ZFByb2dyYW0oSW5zcGVjdG9yU2hhZGVyUHJvZ3JhbSYgaW5zcGVjdG9yUHJvZ3JhbSkKIHsKICAg
ICBTdHJpbmcgaWRlbnRpZmllciA9IGluc3BlY3RvclByb2dyYW0uaWRlbnRpZmllcigpOwpAQCAt
ODkxLDcgKzkwMiw3IEBAIFJlZlB0cjxJbnNwZWN0b3JTaGFkZXJQcm9ncmFtPiBJbnNwZWN0b3JD
YW52YXNBZ2VudDo6ZmluZEluc3BlY3RvclByb2dyYW0oV2ViR0xQCiAgICAgfQogICAgIHJldHVy
biBudWxscHRyOwogfQotI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQogCiAjaWYgRU5B
QkxFKFdFQkdQVSkKIFJlZlB0cjxJbnNwZWN0b3JTaGFkZXJQcm9ncmFtPiBJbnNwZWN0b3JDYW52
YXNBZ2VudDo6ZmluZEluc3BlY3RvclByb2dyYW0oV2ViR1BVUGlwZWxpbmUmIHBpcGVsaW5lKQpA
QCAtOTAyLDYgKzkxMyw3IEBAIFJlZlB0cjxJbnNwZWN0b3JTaGFkZXJQcm9ncmFtPiBJbnNwZWN0
b3JDYW52YXNBZ2VudDo6ZmluZEluc3BlY3RvclByb2dyYW0oV2ViR1BVCiAgICAgfQogICAgIHJl
dHVybiBudWxscHRyOwogfQotI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdQVSkKKyNlbmRp
ZiAvLyBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpCiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVj
dG9yQ2FudmFzQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVj
dG9yQ2FudmFzQWdlbnQuaAppbmRleCBmZjlhNTMzZTA0OC4uMGVmMWFlZmI2NDcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ2FudmFzQWdlbnQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNhbnZhc0Fn
ZW50LmgKQEAgLTQzLDE3ICs0MywxOSBAQCBjbGFzcyBJbmplY3RlZFNjcmlwdE1hbmFnZXI7CiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENhbnZhc1JlbmRlcmluZ0NvbnRleHQ7CisjaWYg
RU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKQogY2xhc3MgSW5zcGVjdG9yU2hhZGVyUHJv
Z3JhbTsKICNpZiBFTkFCTEUoV0VCR0wpCiBjbGFzcyBXZWJHTFByb2dyYW07CiBjbGFzcyBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOwotI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQog
I2lmIEVOQUJMRShXRUJHUFUpCiBjbGFzcyBHUFVDYW52YXNDb250ZXh0OwogY2xhc3MgV2ViR1BV
RGV2aWNlOwogY2xhc3MgV2ViR1BVUGlwZWxpbmU7CiBjbGFzcyBXZWJHUFVTd2FwQ2hhaW47Ci0j
ZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR1BVKQorI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkg
fHwgRU5BQkxFKFdFQkdQVSkKIAogdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAKQEAgLTc5
LDEwICs4MSwxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRSZWNvcmRpbmdBdXRvQ2FwdHVyZUZy
YW1lQ291bnQoRXJyb3JTdHJpbmcmLCBpbnQgY291bnQpIG92ZXJyaWRlOwogICAgIHZvaWQgc3Rh
cnRSZWNvcmRpbmcoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGNhbnZhc0lkLCBjb25zdCBp
bnQqIGZyYW1lQ291bnQsIGNvbnN0IGludCogbWVtb3J5TGltaXQpIG92ZXJyaWRlOwogICAgIHZv
aWQgc3RvcFJlY29yZGluZyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgY2FudmFzSWQpIG92
ZXJyaWRlOworI2lmIEVOQUJMRShXRUJHTCkgfHwgRU5BQkxFKFdFQkdQVSkKICAgICB2b2lkIHJl
cXVlc3RTaGFkZXJTb3VyY2UoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHByb2dyYW1JZCwg
Y29uc3QgU3RyaW5nJiBzaGFkZXJUeXBlLCBTdHJpbmcqIHNvdXJjZSkgb3ZlcnJpZGU7CiAgICAg
dm9pZCB1cGRhdGVTaGFkZXIoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHByb2dyYW1JZCwg
Y29uc3QgU3RyaW5nJiBzaGFkZXJUeXBlLCBjb25zdCBTdHJpbmcmIHNvdXJjZSkgb3ZlcnJpZGU7
CisjaWYgRU5BQkxFKFdFQkdMKQogICAgIHZvaWQgc2V0U2hhZGVyUHJvZ3JhbURpc2FibGVkKEVy
cm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBwcm9ncmFtSWQsIGJvb2wgZGlzYWJsZWQpIG92ZXJy
aWRlOwogICAgIHZvaWQgc2V0U2hhZGVyUHJvZ3JhbUhpZ2hsaWdodGVkKEVycm9yU3RyaW5nJiwg
Y29uc3QgU3RyaW5nJiBwcm9ncmFtSWQsIGJvb2wgaGlnaGxpZ2h0ZWQpIG92ZXJyaWRlOworI2Vu
ZGlmIC8vIEVOQUJMRShXRUJHTCkKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShX
RUJHUFUpCiAKICAgICAvLyBDYW52YXNPYnNlcnZlcgogICAgIHZvaWQgY2FudmFzQ2hhbmdlZChD
YW52YXNCYXNlJiwgY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7CkBAIC0xMDQsMTQgKzExMCwx
NCBAQCBwdWJsaWM6CiAgICAgdm9pZCB3aWxsRGVzdHJveVdlYkdMUHJvZ3JhbShXZWJHTFByb2dy
YW0mKTsKICAgICBib29sIGlzV2ViR0xQcm9ncmFtRGlzYWJsZWQoV2ViR0xQcm9ncmFtJik7CiAg
ICAgYm9vbCBpc1dlYkdMUHJvZ3JhbUhpZ2hsaWdodGVkKFdlYkdMUHJvZ3JhbSYpOwotI2VuZGlm
CisjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQogI2lmIEVOQUJMRShXRUJHUFUpCiAgICAgdm9pZCBk
aWRDcmVhdGVXZWJHUFVEZXZpY2UoV2ViR1BVRGV2aWNlJik7CiAgICAgdm9pZCB3aWxsRGVzdHJv
eVdlYkdQVURldmljZShXZWJHUFVEZXZpY2UmKTsKICAgICB2b2lkIHdpbGxDb25maWd1cmVTd2Fw
Q2hhaW4oR1BVQ2FudmFzQ29udGV4dCYsIFdlYkdQVVN3YXBDaGFpbiYpOwogICAgIHZvaWQgZGlk
Q3JlYXRlV2ViR1BVUGlwZWxpbmUoV2ViR1BVRGV2aWNlJiwgV2ViR1BVUGlwZWxpbmUmKTsKICAg
ICB2b2lkIHdpbGxEZXN0cm95V2ViR1BVUGlwZWxpbmUoV2ViR1BVUGlwZWxpbmUmKTsKLSNlbmRp
ZgorI2VuZGlmIC8vIEVOQUJMRShXRUJHUFUpCiAKIHByaXZhdGU6CiAgICAgc3RydWN0IFJlY29y
ZGluZ09wdGlvbnMgewpAQCAtMTIyLDI4ICsxMjgsMzIgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN0
YXJ0UmVjb3JkaW5nKEluc3BlY3RvckNhbnZhcyYsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlY29y
ZGluZzo6SW5pdGlhdG9yLCBSZWNvcmRpbmdPcHRpb25zJiYgPSB7IH0pOwogCiAgICAgdm9pZCBj
YW52YXNEZXN0cm95ZWRUaW1lckZpcmVkKCk7CisjaWYgRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUo
V0VCR1BVKQogICAgIHZvaWQgcHJvZ3JhbURlc3Ryb3llZFRpbWVyRmlyZWQoKTsKKyNlbmRpZiAv
LyBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpCiAgICAgdm9pZCByZXNldCgpOwogCiAg
ICAgSW5zcGVjdG9yQ2FudmFzJiBiaW5kQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQmLCBi
b29sIGNhcHR1cmVCYWNrdHJhY2UpOwogI2lmIEVOQUJMRShXRUJHUFUpCiAgICAgSW5zcGVjdG9y
Q2FudmFzJiBiaW5kQ2FudmFzKFdlYkdQVURldmljZSYsIGJvb2wgY2FwdHVyZUJhY2t0cmFjZSk7
Ci0jZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR1BVKQogICAgIHZvaWQgdW5iaW5kQ2FudmFz
KEluc3BlY3RvckNhbnZhcyYpOwogICAgIFJlZlB0cjxJbnNwZWN0b3JDYW52YXM+IGFzc2VydElu
c3BlY3RvckNhbnZhcyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgY2FudmFzSWQpOwogICAg
IFJlZlB0cjxJbnNwZWN0b3JDYW52YXM+IGZpbmRJbnNwZWN0b3JDYW52YXMoQ2FudmFzUmVuZGVy
aW5nQ29udGV4dCYpOwogI2lmIEVOQUJMRShXRUJHUFUpCiAgICAgUmVmUHRyPEluc3BlY3RvckNh
bnZhcz4gZmluZEluc3BlY3RvckNhbnZhcyhXZWJHUFVEZXZpY2UmKTsKLSNlbmRpZgorI2VuZGlm
IC8vIEVOQUJMRShXRUJHUFUpCiAKKyNpZiBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUp
CiAgICAgdm9pZCB1bmJpbmRQcm9ncmFtKEluc3BlY3RvclNoYWRlclByb2dyYW0mKTsKICAgICBS
ZWZQdHI8SW5zcGVjdG9yU2hhZGVyUHJvZ3JhbT4gYXNzZXJ0SW5zcGVjdG9yUHJvZ3JhbShFcnJv
clN0cmluZyYsIGNvbnN0IFN0cmluZyYgcHJvZ3JhbUlkKTsKICNpZiBFTkFCTEUoV0VCR0wpCiAg
ICAgUmVmUHRyPEluc3BlY3RvclNoYWRlclByb2dyYW0+IGZpbmRJbnNwZWN0b3JQcm9ncmFtKFdl
YkdMUHJvZ3JhbSYpOwotI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQogI2lmIEVOQUJM
RShXRUJHUFUpCiAgICAgUmVmUHRyPEluc3BlY3RvclNoYWRlclByb2dyYW0+IGZpbmRJbnNwZWN0
b3JQcm9ncmFtKFdlYkdQVVBpcGVsaW5lJik7Ci0jZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUoV0VC
R1BVKQorI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkgfHwgRU5BQkxFKFdFQkdQVSkKIAogICAgIHN0
ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3I6OkNhbnZhc0Zyb250ZW5kRGlzcGF0Y2hlcj4gbV9mcm9u
dGVuZERpc3BhdGNoZXI7CiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6Q2FudmFzQmFja2VuZERpc3Bh
dGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7CkBAIC0xNTUsOSArMTY1LDExIEBAIHByaXZhdGU6
CiAgICAgVmVjdG9yPFN0cmluZz4gbV9yZW1vdmVkQ2FudmFzSWRlbnRpZmllcnM7CiAgICAgVGlt
ZXIgbV9jYW52YXNEZXN0cm95ZWRUaW1lcjsKIAorI2lmIEVOQUJMRShXRUJHTCkgfHwgRU5BQkxF
KFdFQkdQVSkKICAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPEluc3BlY3RvclNoYWRlclByb2dy
YW0+PiBtX2lkZW50aWZpZXJUb0luc3BlY3RvclByb2dyYW07CiAgICAgVmVjdG9yPFN0cmluZz4g
bV9yZW1vdmVkUHJvZ3JhbUlkZW50aWZpZXJzOwogICAgIFRpbWVyIG1fcHJvZ3JhbURlc3Ryb3ll
ZFRpbWVyOworI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkgfHwgRU5BQkxFKFdFQkdQVSkKIAogICAg
IEhhc2hTZXQ8U3RyaW5nPiBtX3JlY29yZGluZ0NhbnZhc0lkZW50aWZpZXJzOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuY3Bw
CmluZGV4IGEyZjhkZmExNjI0Li5jMzVhMDU4Yjk0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5jcHAKQEAgLTEyMDcsMTAg
KzEyMDcsMTcgQEAgc3RkOjp1bmlxdWVfcHRyPEhpZ2hsaWdodENvbmZpZz4gSW5zcGVjdG9yRE9N
QWdlbnQ6OmhpZ2hsaWdodENvbmZpZ0Zyb21JbnNwZWN0b3IKICAgICByZXR1cm4gaGlnaGxpZ2h0
Q29uZmlnOwogfQogCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKK3ZvaWQgSW5zcGVjdG9yRE9N
QWdlbnQ6OnNldEluc3BlY3RNb2RlRW5hYmxlZChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGJv
b2wgZW5hYmxlZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBoaWdobGlnaHRDb25maWcpCit7CisgICAg
c2V0U2VhcmNoaW5nRm9yTm9kZShlcnJvclN0cmluZywgZW5hYmxlZCwgaGlnaGxpZ2h0Q29uZmln
ID8gaGlnaGxpZ2h0Q29uZmlnIDogbnVsbHB0ciwgZmFsc2UpOworfQorI2Vsc2UKIHZvaWQgSW5z
cGVjdG9yRE9NQWdlbnQ6OnNldEluc3BlY3RNb2RlRW5hYmxlZChFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIGJvb2wgZW5hYmxlZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBoaWdobGlnaHRDb25maWcs
IGNvbnN0IGJvb2wqIHNob3dSdWxlcnMpCiB7CiAgICAgc2V0U2VhcmNoaW5nRm9yTm9kZShlcnJv
clN0cmluZywgZW5hYmxlZCwgaGlnaGxpZ2h0Q29uZmlnID8gaGlnaGxpZ2h0Q29uZmlnIDogbnVs
bHB0ciwgc2hvd1J1bGVycyAmJiAqc2hvd1J1bGVycyk7CiB9CisjZW5kaWYKIAogdm9pZCBJbnNw
ZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0UmVjdChFcnJvclN0cmluZyYsIGludCB4LCBpbnQgeSwg
aW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBjb25zdCBKU09OOjpPYmplY3QqIGNvbG9yLCBjb25zdCBK
U09OOjpPYmplY3QqIG91dGxpbmVDb2xvciwgY29uc3QgYm9vbCogdXNlUGFnZUNvb3JkaW5hdGVz
KQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0
b3JET01BZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JE
T01BZ2VudC5oCmluZGV4IDdkZjBlODNlYjUzLi5lOGE3NGY2ZDAwNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuaApAQCAtMTMx
LDcgKzEzMSwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaXNjYXJkU2VhcmNoUmVzdWx0cyhFcnJv
clN0cmluZyYsIGNvbnN0IFN0cmluZyYgc2VhcmNoSWQpIG92ZXJyaWRlOwogICAgIHZvaWQgcmVz
b2x2ZU5vZGUoRXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBjb25zdCBTdHJpbmcqIG9iamVjdEdy
b3VwLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYg
cmVzdWx0KSBvdmVycmlkZTsKICAgICB2b2lkIGdldEF0dHJpYnV0ZXMoRXJyb3JTdHJpbmcmLCBp
bnQgbm9kZUlkLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYgcmVzdWx0KSBvdmVycmlk
ZTsKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIHZvaWQgc2V0SW5zcGVjdE1vZGVFbmFi
bGVkKEVycm9yU3RyaW5nJiwgYm9vbCBlbmFibGVkLCBjb25zdCBKU09OOjpPYmplY3QqIGhpZ2hs
aWdodENvbmZpZykgb3ZlcnJpZGU7CisjZWxzZQogICAgIHZvaWQgc2V0SW5zcGVjdE1vZGVFbmFi
bGVkKEVycm9yU3RyaW5nJiwgYm9vbCBlbmFibGVkLCBjb25zdCBKU09OOjpPYmplY3QqIGhpZ2hs
aWdodENvbmZpZywgY29uc3QgYm9vbCogc2hvd1J1bGVycykgb3ZlcnJpZGU7CisjZW5kaWYKICAg
ICB2b2lkIHJlcXVlc3ROb2RlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwg
aW50KiBub2RlSWQpIG92ZXJyaWRlOwogICAgIHZvaWQgcHVzaE5vZGVCeVBhdGhUb0Zyb250ZW5k
KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBwYXRoLCBpbnQqIG5vZGVJZCkgb3ZlcnJpZGU7
CiAgICAgdm9pZCBoaWRlSGlnaGxpZ2h0KEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclBhZ2VBZ2VudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclBhZ2VBZ2VudC5j
cHAKaW5kZXggMDJlZGQ0Mzg1OTYuLjQzNTIyODk0ZTBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCkBAIC0zNTYs
NyArMzU2LDcgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcpCiAgICAgc3RvcHdhdGNoLnJlc2V0KCk7CiAgICAgc3RvcHdhdGNoLnN0YXJ0
KCk7CiAKLSNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQorI2lmIEVOQUJMRShEQVJLX01P
REVfQ1NTKSB8fCBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQogICAgIGRlZmF1bHRBcHBlYXJh
bmNlRGlkQ2hhbmdlKG1faW5zcGVjdGVkUGFnZS5kZWZhdWx0VXNlRGFya0FwcGVhcmFuY2UoKSk7
CiAjZW5kaWYKIH0KQEAgLTM2NywxMCArMzY3LDE0IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50
OjpkaXNhYmxlKEVycm9yU3RyaW5nJikKIAogICAgIEVycm9yU3RyaW5nIHVudXNlZDsKICAgICBz
ZXRTaG93UGFpbnRSZWN0cyh1bnVzZWQsIGZhbHNlKTsKKyNpZiAhUExBVEZPUk0oSU9TX0ZBTUlM
WSkKICAgICBzZXRTaG93UnVsZXJzKHVudXNlZCwgZmFsc2UpOworI2VuZGlmCiAgICAgb3ZlcnJp
ZGVVc2VyQWdlbnQodW51c2VkLCBudWxscHRyKTsKICAgICBzZXRFbXVsYXRlZE1lZGlhKHVudXNl
ZCwgZW1wdHlTdHJpbmcoKSk7CisjaWYgRU5BQkxFKERBUktfTU9ERV9DU1MpIHx8IEhBVkUoT1Nf
REFSS19NT0RFX1NVUFBPUlQpCiAgICAgc2V0Rm9yY2VkQXBwZWFyYW5jZSh1bnVzZWQsIGVtcHR5
U3RyaW5nKCkpOworI2VuZGlmCiAKICAgICBhdXRvJiBpbnNwZWN0ZWRQYWdlU2V0dGluZ3MgPSBt
X2luc3BlY3RlZFBhZ2Uuc2V0dGluZ3MoKTsKICAgICBpbnNwZWN0ZWRQYWdlU2V0dGluZ3Muc2V0
QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWRJbnNwZWN0b3JPdmVycmlkZShXVEY6Om51bGxvcHQp
OwpAQCAtNzcwLDEwICs3NzQsMTIgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNlYXJjaElu
UmVzb3VyY2VzKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiB0ZXh0LCBjb24KICAgICAgICAg
bmV0d29ya0FnZW50LT5zZWFyY2hPdGhlclJlcXVlc3RzKHJlZ2V4LCByZXN1bHQpOwogfQogCisj
aWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCiB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6c2V0U2hv
d1J1bGVycyhFcnJvclN0cmluZyYsIGJvb2wgc2hvd1J1bGVycykKIHsKICAgICBtX292ZXJsYXkt
PnNldFNob3dSdWxlcnMoc2hvd1J1bGVycyk7CiB9CisjZW5kaWYKIAogdm9pZCBJbnNwZWN0b3JQ
YWdlQWdlbnQ6OnNldFNob3dQYWludFJlY3RzKEVycm9yU3RyaW5nJiwgYm9vbCBzaG93KQogewpA
QCAtODY5LDEwICs4NzUsMTIgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmZyYW1lQ2xlYXJl
ZFNjaGVkdWxlZE5hdmlnYXRpb24oRnJhbWUmIGZyYW1lKQogICAgIG1fZnJvbnRlbmREaXNwYXRj
aGVyLT5mcmFtZUNsZWFyZWRTY2hlZHVsZWROYXZpZ2F0aW9uKGZyYW1lSWQoJmZyYW1lKSk7CiB9
CiAKKyNpZiBFTkFCTEUoREFSS19NT0RFX0NTUykgfHwgSEFWRShPU19EQVJLX01PREVfU1VQUE9S
VCkKIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpkZWZhdWx0QXBwZWFyYW5jZURpZENoYW5nZShi
b29sIHVzZURhcmtBcHBlYXJhbmNlKQogewogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5kZWZh
dWx0QXBwZWFyYW5jZURpZENoYW5nZSh1c2VEYXJrQXBwZWFyYW5jZSA/IEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlBhZ2U6OkFwcGVhcmFuY2U6OkRhcmsgOiBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdl
OjpBcHBlYXJhbmNlOjpMaWdodCk7CiB9CisjZW5kaWYKIAogdm9pZCBJbnNwZWN0b3JQYWdlQWdl
bnQ6OmRpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZChGcmFtZSYgZnJhbWUsIERPTVdyYXBwZXJX
b3JsZCYgd29ybGQpCiB7CkBAIC0xMDA4LDEzICsxMDE2LDkgQEAgdm9pZCBJbnNwZWN0b3JQYWdl
QWdlbnQ6OnNldEVtdWxhdGVkTWVkaWEoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG1lZGlh
KQogICAgIGRvY3VtZW50LT5ldmFsdWF0ZU1lZGlhUXVlcmllc0FuZFJlcG9ydENoYW5nZXMoKTsK
IH0KIAorI2lmIEVOQUJMRShEQVJLX01PREVfQ1NTKSB8fCBIQVZFKE9TX0RBUktfTU9ERV9TVVBQ
T1JUKQogdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNldEZvcmNlZEFwcGVhcmFuY2UoRXJyb3JT
dHJpbmcmLCBjb25zdCBTdHJpbmcmIGFwcGVhcmFuY2UpCiB7Ci0gICAgaWYgKGFwcGVhcmFuY2Ug
PT0gbV9mb3JjZWRBcHBlYXJhbmNlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2ZvcmNlZEFw
cGVhcmFuY2UgPSBhcHBlYXJhbmNlOwotCiAgICAgaWYgKGFwcGVhcmFuY2UgPT0gIkxpZ2h0Il9z
KQogICAgICAgICBtX2luc3BlY3RlZFBhZ2Uuc2V0VXNlRGFya0FwcGVhcmFuY2VPdmVycmlkZShm
YWxzZSk7CiAgICAgZWxzZSBpZiAoYXBwZWFyYW5jZSA9PSAiRGFyayJfcykKQEAgLTEwMjIsNiAr
MTAyNiw3IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzZXRGb3JjZWRBcHBlYXJhbmNlKEVy
cm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBhcHBlYXJhCiAgICAgZWxzZQogICAgICAgICBtX2lu
c3BlY3RlZFBhZ2Uuc2V0VXNlRGFya0FwcGVhcmFuY2VPdmVycmlkZShXVEY6Om51bGxvcHQpOwog
fQorI2VuZGlmCiAKIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjphcHBseVVzZXJBZ2VudE92ZXJy
aWRlKFN0cmluZyYgdXNlckFnZW50KQogewpAQCAtMTA2OSw5ICsxMDc0LDkgQEAgdm9pZCBJbnNw
ZWN0b3JQYWdlQWdlbnQ6OnNuYXBzaG90UmVjdChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGlu
dCB4LCBpbnQgeSwgaW4KICAgICAqb3V0RGF0YVVSTCA9IHNuYXBzaG90LT50b0RhdGFVUkwoImlt
YWdlL3BuZyJfcywgV1RGOjpudWxsb3B0LCBQcmVzZXJ2ZVJlc29sdXRpb246Olllcyk7CiB9CiAK
KyNpZiBFTkFCTEUoV0VCX0FSQ0hJVkUpICYmIFVTRShDRikKIHZvaWQgSW5zcGVjdG9yUGFnZUFn
ZW50OjphcmNoaXZlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgU3RyaW5nKiBkYXRhKQogewot
I2lmIEVOQUJMRShXRUJfQVJDSElWRSkgJiYgVVNFKENGKQogICAgIGF1dG8gYXJjaGl2ZSA9IExl
Z2FjeVdlYkFyY2hpdmU6OmNyZWF0ZShtX2luc3BlY3RlZFBhZ2UubWFpbkZyYW1lKCkpOwogICAg
IGlmICghYXJjaGl2ZSkgewogICAgICAgICBlcnJvclN0cmluZyA9ICJDb3VsZCBub3QgY3JlYXRl
IHdlYiBhcmNoaXZlIGZvciBtYWluIGZyYW1lIl9zOwpAQCAtMTA4MCwxMCArMTA4NSw3IEBAIHZv
aWQgSW5zcGVjdG9yUGFnZUFnZW50OjphcmNoaXZlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
U3RyaW5nKiBkYXRhKQogCiAgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gYnVmZmVyID0gYXJjaGl2
ZS0+cmF3RGF0YVJlcHJlc2VudGF0aW9uKCk7CiAgICAgKmRhdGEgPSBiYXNlNjRFbmNvZGUoQ0ZE
YXRhR2V0Qnl0ZVB0cihidWZmZXIuZ2V0KCkpLCBDRkRhdGFHZXRMZW5ndGgoYnVmZmVyLmdldCgp
KSk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShkYXRhKTsKLSAgICBlcnJvclN0cmluZyA9ICJO
b3Qgc3VwcG9ydGVkIl9zOwotI2VuZGlmCiB9CisjZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0
b3JQYWdlQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
UGFnZUFnZW50LmgKaW5kZXggNmM3NTgyOTUwMjMuLjNiY2QwNDg3Y2ZjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclBhZ2VBZ2VudC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUGFnZUFnZW50LmgKQEAg
LTEwOCwxMyArMTA4LDE5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEJvb3RzdHJhcFNjcmlwdChF
cnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxTb3VyY2UpIGZpbmFsOwogICAgIHZv
aWQgc2VhcmNoSW5SZXNvdXJjZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwg
Y29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgcXVlcnksIGNvbnN0IGJvb2wqIG9wdGlv
bmFsQ2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogb3B0aW9uYWxJc1JlZ2V4LCBjb25zdCBTdHJp
bmcqIG9wdGlvbmFsUmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpHZW5lcmljVHlwZXM6OlNlYXJjaE1hdGNoPj4mKSBvdmVycmlkZTsKICAgICB2b2lk
IHNlYXJjaEluUmVzb3VyY2VzKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgYm9v
bCogY2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogaXNSZWdleCwgUmVmUHRyPEpTT046OkFycmF5
T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6U2VhcmNoUmVzdWx0Pj4mKSBvdmVycmlkZTsK
KyNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICB2b2lkIHNldFNob3dSdWxlcnMoRXJyb3JT
dHJpbmcmLCBib29sKSBvdmVycmlkZTsKKyNlbmRpZgogICAgIHZvaWQgc2V0U2hvd1BhaW50UmVj
dHMoRXJyb3JTdHJpbmcmLCBib29sIHNob3cpIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0RW11bGF0
ZWRNZWRpYShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOworI2lmIEVOQUJM
RShEQVJLX01PREVfQ1NTKSB8fCBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQogICAgIHZvaWQg
c2V0Rm9yY2VkQXBwZWFyYW5jZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYpIG92ZXJyaWRl
OworI2VuZGlmCiAgICAgdm9pZCBzbmFwc2hvdE5vZGUoRXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlk
LCBTdHJpbmcqIG91dERhdGFVUkwpIG92ZXJyaWRlOwogICAgIHZvaWQgc25hcHNob3RSZWN0KEVy
cm9yU3RyaW5nJiwgaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGNvbnN0IFN0
cmluZyYgY29vcmRpbmF0ZVN5c3RlbSwgU3RyaW5nKiBvdXREYXRhVVJMKSBvdmVycmlkZTsKKyNp
ZiBFTkFCTEUoV0VCX0FSQ0hJVkUpICYmIFVTRShDRikKICAgICB2b2lkIGFyY2hpdmUoRXJyb3JT
dHJpbmcmLCBTdHJpbmcqIGRhdGEpIG92ZXJyaWRlOworI2VuZGlmCiAKICAgICAvLyBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb24KICAgICB2b2lkIGRvbUNvbnRlbnRFdmVudEZpcmVkKCk7CkBAIC0x
MjYsNyArMTMyLDkgQEAgcHVibGljOgogICAgIHZvaWQgZnJhbWVTdG9wcGVkTG9hZGluZyhGcmFt
ZSYpOwogICAgIHZvaWQgZnJhbWVTY2hlZHVsZWROYXZpZ2F0aW9uKEZyYW1lJiwgU2Vjb25kcyBk
ZWxheSk7CiAgICAgdm9pZCBmcmFtZUNsZWFyZWRTY2hlZHVsZWROYXZpZ2F0aW9uKEZyYW1lJik7
CisjaWYgRU5BQkxFKERBUktfTU9ERV9DU1MpIHx8IEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQp
CiAgICAgdm9pZCBkZWZhdWx0QXBwZWFyYW5jZURpZENoYW5nZShib29sIHVzZURhcmtBcHBlYXJh
bmNlKTsKKyNlbmRpZgogICAgIHZvaWQgYXBwbHlVc2VyQWdlbnRPdmVycmlkZShTdHJpbmcmKTsK
ICAgICB2b2lkIGFwcGx5RW11bGF0ZWRNZWRpYShTdHJpbmcmKTsKICAgICB2b2lkIGRpZENsZWFy
V2luZG93T2JqZWN0SW5Xb3JsZChGcmFtZSYsIERPTVdyYXBwZXJXb3JsZCYpOwpAQCAtMTYxLDcg
KzE2OSw2IEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDxEb2N1bWVudExvYWRlciosIFN0cmluZz4g
bV9sb2FkZXJUb0lkZW50aWZpZXI7CiAgICAgU3RyaW5nIG1fdXNlckFnZW50T3ZlcnJpZGU7CiAg
ICAgU3RyaW5nIG1fZW11bGF0ZWRNZWRpYTsKLSAgICBTdHJpbmcgbV9mb3JjZWRBcHBlYXJhbmNl
OwogICAgIFN0cmluZyBtX2Jvb3RzdHJhcFNjcmlwdDsKICAgICBib29sIG1faXNGaXJzdExheW91
dEFmdGVyT25Mb2FkIHsgZmFsc2UgfTsKICAgICBib29sIG1fc2hvd1BhaW50UmVjdHMgeyBmYWxz
ZSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL0NNYWtlTGlzdHMudHh0IGIv
U291cmNlL1dlYkluc3BlY3RvclVJL0NNYWtlTGlzdHMudHh0CmluZGV4IDczNWE0ZDVhOTI0Li4x
OGY0Y2FkZmFjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL0NNYWtlTGlzdHMu
dHh0CisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DTWFrZUxpc3RzLnR4dApAQCAtNDksNiAr
NDksNyBAQCBXRUJLSVRfSU5DTFVERV9DT05GSUdfRklMRVNfSUZfRVhJU1RTKCkKIGFkZF9jdXN0
b21fY29tbWFuZCgKICAgICBPVVRQVVQgJHtXZWJJbnNwZWN0b3JVSV9ERVJJVkVEX1NPVVJDRVNf
RElSfS9Vc2VySW50ZXJmYWNlL1Byb3RvY29sL0luc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwog
ICAgIERFUEVORFMgSmF2YVNjcmlwdENvcmUKKyAgICAgICAgICAgIEluc3BlY3RvckJhY2tlbmRD
b21tYW5kcwogICAgICAgICAgICAgJHtKYXZhU2NyaXB0Q29yZV9ERVJJVkVEX1NPVVJDRVNfRElS
fS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCiAgICAgQ09NTUFORCAke0NN
QUtFX0NPTU1BTkR9IC1FIGNvcHkgJHtKYXZhU2NyaXB0Q29yZV9ERVJJVkVEX1NPVVJDRVNfRElS
fS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzICR7V2ViSW5zcGVjdG9yVUlf
REVSSVZFRF9TT1VSQ0VTX0RJUn0vVXNlckludGVyZmFjZS9Qcm90b2NvbC9JbnNwZWN0b3JCYWNr
ZW5kQ29tbWFuZHMuanMKICAgICBWRVJCQVRJTQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3Bl
Y3RvclVJL1VzZXJJbnRlcmZhY2UvQmFzZS9NYWluLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvQmFzZS9NYWluLmpzCmluZGV4IGU1YjQzMmMyY2I4Li4zNTQzOTE4YzE3
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQmFzZS9N
YWluLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Jhc2UvTWFp
bi5qcwpAQCAtMjM5Myw3ICsyMzkzLDcgQEAgV0kuX3VwZGF0ZURvd25sb2FkVGFiQmFyQnV0dG9u
ID0gZnVuY3Rpb24oKQogICAgIGlmICghV0kuX3JlbG9hZFRhYkJhckJ1dHRvbikKICAgICAgICAg
cmV0dXJuOwogCi0gICAgaWYgKCFJbnNwZWN0b3JCYWNrZW5kLmhhc0RvbWFpbigiUGFnZSIpKSB7
CisgICAgaWYgKCFJbnNwZWN0b3JCYWNrZW5kLmhhc0NvbW1hbmQoIlBhZ2UuYXJjaGl2ZSIpKSB7
CiAgICAgICAgIFdJLl9kb3dubG9hZFRhYkJhckJ1dHRvbi5oaWRkZW4gPSB0cnVlOwogICAgICAg
ICBXSS5fdXBkYXRlVGFiQmFyRGl2aWRlcnMoKTsKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy5tYWtlIGIvU291cmNlL1dlYktpdC9EZXJp
dmVkU291cmNlcy5tYWtlCmluZGV4IGExMmI3ODYzYzkyLi44YzU4YTU3NzE0NiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy5tYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQv
RGVyaXZlZFNvdXJjZXMubWFrZQpAQCAtMzE3LDE3ICszMTcsOSBAQCBBVVRPTUFUSU9OX1BST1RP
Q09MX09VVFBVVF9GSUxFUyA9IFwKICMKIEFVVE9NQVRJT05fUFJPVE9DT0xfT1VUUFVUX1BBVFRF
Uk5TID0gJChzdWJzdCAuLCUsJChBVVRPTUFUSU9OX1BST1RPQ09MX09VVFBVVF9GSUxFUykpCiAK
LWlmZXEgKCQoT1MpLE1BQ09TKQotaWZlcSAoJChzaGVsbCAkKENDKSAtc3RkPWdudSsrMXogLXgg
YysrIC1FIC1QIC1kTSAkKFNES19GTEFHUykgJChUQVJHRVRfVFJJUExFX0ZMQUdTKSAkKEZSQU1F
V09SS19GTEFHUykgJChIRUFERVJfRkxBR1MpIC1pbmNsdWRlICJ3dGYvUGxhdGZvcm0uaCIgL2Rl
di9udWxsIHwgZ3JlcCAnIFdURl9QTEFURk9STV9JT1NfRkFNSUxZICcgfCBjdXQgLWQnICcgLWYz
KSwgMSkKLQlBVVRPTUFUSU9OX0JBQ0tFTkRfUExBVEZPUk1fQVJHVU1FTlRTID0gLS1wbGF0Zm9y
bSBpT1MKLWVsc2UKLQlBVVRPTUFUSU9OX0JBQ0tFTkRfUExBVEZPUk1fQVJHVU1FTlRTID0gLS1w
bGF0Zm9ybSBtYWNPUwotZW5kaWYKLWVuZGlmICMgTUFDT1MKLQogIyBKU09OLVJQQyBGcm9udGVu
ZCBEaXNwYXRjaGVycywgQmFja2VuZCBEaXNwYXRjaGVycywgVHlwZSBCdWlsZGVycwogJChBVVRP
TUFUSU9OX1BST1RPQ09MX09VVFBVVF9QQVRURVJOUykgOiAkKEFVVE9NQVRJT05fUFJPVE9DT0xf
SU5QVVRfRklMRVMpICQoQVVUT01BVElPTl9QUk9UT0NPTF9HRU5FUkFUT1JfU0NSSVBUUykKLQkk
KFBZVEhPTikgJChKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUikvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5IC0tZnJhbWV3b3JrIFdlYktpdCAkKEFVVE9NQVRJT05fQkFD
S0VORF9QTEFURk9STV9BUkdVTUVOVFMpIC0tYmFja2VuZCAtLW91dHB1dERpciAuICQoQVVUT01B
VElPTl9QUk9UT0NPTF9JTlBVVF9GSUxFUykKKwkkKFBZVEhPTikgJChKYXZhU2NyaXB0Q29yZV9T
Q1JJUFRTX0RJUikvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5IC0tZnJh
bWV3b3JrIFdlYktpdCAtLWJhY2tlbmQgLS1vdXRwdXREaXIgLiAkKEFVVE9NQVRJT05fUFJPVE9D
T0xfSU5QVVRfRklMRVMpCiAKIGFsbCA6ICQoQVVUT01BVElPTl9QUk9UT0NPTF9PVVRQVVRfRklM
RVMpCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1NYWMuY21ha2UgYi9Tb3Vy
Y2UvV2ViS2l0L1BsYXRmb3JtTWFjLmNtYWtlCmluZGV4IDQ4ZTE2MDEzZGNiLi40YzJkMzBiZWJm
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybU1hYy5jbWFrZQorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1BsYXRmb3JtTWFjLmNtYWtlCkBAIC00ODAsMTAgKzQ4MCw2IEBAIGZvcmVhY2gg
KF9maWxlICR7T2JqQ0ZvcndhcmRpbmdIZWFkZXJzfSkKICAgICBmaWxlKFdSSVRFICR7Rk9SV0FS
RElOR19IRUFERVJTX0RJUn0vV2ViS2l0LyR7X2ZpbGV9ICIjaW1wb3J0IDxXZWJLaXRMZWdhY3kv
JHtfZmlsZX0+IikKIGVuZGZvcmVhY2ggKCkKIAotbGlzdChBUFBFTkQgV2ViS2l0X0FVVE9NQVRJ
T05fUFJPVE9DT0xfR0VORVJBVE9SX0VYVFJBX0ZMQUdTCi0gICAgLS1wbGF0Zm9ybT1tYWNPUwot
KQotCiBzZXQoU2VjSXRlbVNoaW1EaXJlY3RvcnkgJHtDTUFLRV9MSUJSQVJZX09VVFBVVF9ESVJF
Q1RPUll9L1dlYktpdC5mcmFtZXdvcmsvVmVyc2lvbnMvQS9GcmFtZXdvcmtzKQogYWRkX2xpYnJh
cnkoU2VjSXRlbVNoaW0gU0hBUkVEIFdlYlByb2Nlc3MvbWFjL1NlY0l0ZW1TaGltTGlicmFyeS5t
bSkKIFdFQktJVF9DUkVBVEVfU1lNTElOSyhTZWNJdGVtU2hpbSAke1NlY0l0ZW1TaGltRGlyZWN0
b3J5fSAke0NNQUtFX0xJQlJBUllfT1VUUFVUX0RJUkVDVE9SWX0vV2ViS2l0LmZyYW1ld29yay9G
cmFtZXdvcmtzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlv
bi9BdXRvbWF0aW9uLmpzb24gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL0F1
dG9tYXRpb24uanNvbgppbmRleCA3ZjU1MjU3MDVlZi4uM2RjYjIxNDFlYjAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vQXV0b21hdGlvbi5qc29uCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vQXV0b21hdGlvbi5qc29uCkBAIC00
MzcsNyArNDM3LDcgQEAKICAgICAgICAgewogICAgICAgICAgICAgIm5hbWUiOiAiaW5zcGVjdEJy
b3dzaW5nQ29udGV4dCIsCiAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiSW5zcGVjdCB0aGUg
c3BlY2lmaWVkIGJyb3dzaW5nIGNvbnRleHQgdXNpbmcgV2ViIEluc3BlY3Rvci4iLAotICAgICAg
ICAgICAgInBsYXRmb3JtIjogIm1hY29zIiwKKyAgICAgICAgICAgICJjb25kaXRpb24iOiAiZGVm
aW5lZChXVEZfUExBVEZPUk1fTUFDKSAmJiBXVEZfUExBVEZPUk1fTUFDIiwKICAgICAgICAgICAg
ICJwYXJhbWV0ZXJzIjogWwogICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiaGFuZGxlIiwgIiRy
ZWYiOiAiQnJvd3NpbmdDb250ZXh0SGFuZGxlIiwgImRlc2NyaXB0aW9uIjogIlRoZSBoYW5kbGUg
Zm9yIHRoZSBicm93c2luZyBjb250ZXh0IHRoYXQgc2hvdWxkIGJlIGluc3BlY3RlZC4iIH0sCiAg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJlbmFibGVBdXRvQ2FwdHVyaW5nIiwgInR5cGUiOiAi
Ym9vbGVhbiIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJJZiB0aGlzIG9wdGlv
biBpcyBwcmVzZW50IGFuZCBzZXQgdG8gdHJ1ZSwgdGhlIFdlYiBJbnNwZWN0b3Igd2lsbCBhdXRv
bWF0aWNhbGx5IHN0YXJ0IGEgdGltZWxpbmUgcmVjb3JkaW5nIG9mIHRoZSBzcGVjaWZpZWQgYnJv
d3NpbmcgY29udGV4dCBvbmNlIGl0IGlzIGF0dGFjaGVkLiBOb3RlIHRoYXQgdGhpcyBkaXNhYmxl
cyB0aGUgZGVidWdnZXIgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgcmVjb3JkaW5nLiIgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9u
U2Vzc2lvbi5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0
aW9uU2Vzc2lvbi5oCmluZGV4IDIzYjk5MmYzY2U0Li4yYzkxOGE3ZGQyNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNl
c3Npb24uaApAQCAtMjAwLDcgKzIwMCw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGdldFNlc3Npb25Q
ZXJtaXNzaW9ucyhJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiwgUmVmUHRyPEpTT046OkFycmF5T2Y8
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6U2Vzc2lvblBlcm1pc3Npb25EYXRhPj4m
IG91dF9wZXJtaXNzaW9ucykgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRTZXNzaW9uUGVybWlzc2lv
bnMoSW5zcGVjdG9yOjpFcnJvclN0cmluZyYsIGNvbnN0IEpTT046OkFycmF5JiBpbl9wZXJtaXNz
aW9ucykgb3ZlcnJpZGU7CiAKLSAgICAvLyBQbGF0Zm9ybTogbWFjT1MKICNpZiBQTEFURk9STShN
QUMpCiAgICAgdm9pZCBpbnNwZWN0QnJvd3NpbmdDb250ZXh0KGNvbnN0IFN0cmluZyYsIGNvbnN0
IGJvb2wqIG9wdGlvbmFsRW5hYmxlQXV0b0NhcHR1cmluZywgUmVmPEluc3BlY3RCcm93c2luZ0Nv
bnRleHRDYWxsYmFjaz4mJikgb3ZlcnJpZGU7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vbWFjL1dlYkF1dG9tYXRpb25TZXNzaW9uTWFjLm1t
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9tYWMvV2ViQXV0b21hdGlvblNl
c3Npb25NYWMubW0KaW5kZXggZTdlYjA3OGMyZGIuLjhjN2Y1ODVlMmFjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL21hYy9XZWJBdXRvbWF0aW9uU2Vzc2lv
bk1hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL21hYy9XZWJB
dXRvbWF0aW9uU2Vzc2lvbk1hYy5tbQpAQCAtNDIsNyArNDIsNyBAQAogbmFtZXNwYWNlIFdlYktp
dCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotI3ByYWdtYSBtYXJrIENvbW1hbmRzIGZv
ciBQbGF0Zm9ybTogJ21hY09TJworI3ByYWdtYSBtYXJrIENvbW1hbmRzIGZvciAnUExBVEZPUk0o
TUFDKScKIAogdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6aW5zcGVjdEJyb3dzaW5nQ29udGV4
dChjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3QgYm9vbCogb3B0aW9uYWxFbmFibGVBdXRvQ2Fw
dHVyaW5nLCBSZWY8SW5zcGVjdEJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmIGNhbGxiYWNrKQog
ewpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9pbnNwZWN0b3IvbWFpbi5weSBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvaW5zcGVjdG9yL21haW4ucHkKaW5kZXggMTQ2MmQ4MDE5
ZDkuLjllMDkwNGMyMGZmIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2luc3Bl
Y3Rvci9tYWluLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvaW5zcGVjdG9yL21haW4u
cHkKQEAgLTM4LDE0ICszOCwxMyBAQCBjbGFzcyBJbnNwZWN0b3JHZW5lcmF0b3JUZXN0czoKICAg
ICAgICAgc2VsZi5yZXNldF9yZXN1bHRzID0gcmVzZXRfcmVzdWx0cwogICAgICAgICBzZWxmLmV4
ZWN1dGl2ZSA9IGV4ZWN1dGl2ZQogCi0gICAgZGVmIGdlbmVyYXRlX2Zyb21fanNvbihzZWxmLCBq
c29uX2ZpbGUsIHBsYXRmb3JtLCBvdXRwdXRfZGlyZWN0b3J5KToKKyAgICBkZWYgZ2VuZXJhdGVf
ZnJvbV9qc29uKHNlbGYsIGpzb25fZmlsZSwgb3V0cHV0X2RpcmVjdG9yeSk6CiAgICAgICAgIGNt
ZCA9IFsncHl0aG9uJywKICAgICAgICAgICAgICAgICdKYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHknLAogICAgICAg
ICAgICAgICAgJy0tb3V0cHV0RGlyJywgb3V0cHV0X2RpcmVjdG9yeSwKICAgICAgICAgICAgICAg
ICctLWZvcmNlJywKICAgICAgICAgICAgICAgICctLWZyYW1ld29yaycsICdUZXN0JywKICAgICAg
ICAgICAgICAgICctLXRlc3QnLAotICAgICAgICAgICAgICAgJy0tcGxhdGZvcm0nLCBwbGF0Zm9y
bSwKICAgICAgICAgICAgICAgIGpzb25fZmlsZV0KIAogICAgICAgICBleGl0X2NvZGUgPSAwCkBA
IC04OCw3ICs4Nyw3IEBAIGNsYXNzIEluc3BlY3RvckdlbmVyYXRvclRlc3RzOgogICAgICAgICAg
ICAgICAgIHByaW50KCdQQVNTOiAlcycgJSBvdXRwdXRfZmlsZSkKICAgICAgICAgcmV0dXJuIGNo
YW5nZXNfZm91bmQKIAotICAgIGRlZiBydW5fdGVzdHMoc2VsZiwgcGxhdGZvcm0sIGlucHV0X2Rp
cmVjdG9yeSwgcmVmZXJlbmNlX2RpcmVjdG9yeSk6CisgICAgZGVmIHJ1bl90ZXN0cyhzZWxmLCBp
bnB1dF9kaXJlY3RvcnksIHJlZmVyZW5jZV9kaXJlY3RvcnkpOgogICAgICAgICB3b3JrX2RpcmVj
dG9yeSA9IHJlZmVyZW5jZV9kaXJlY3RvcnkKIAogICAgICAgICBwYXNzZWQgPSBUcnVlCkBAIC0x
MDEsNyArMTAwLDcgQEAgY2xhc3MgSW5zcGVjdG9yR2VuZXJhdG9yVGVzdHM6CiAgICAgICAgICAg
ICBpZiBub3Qgc2VsZi5yZXNldF9yZXN1bHRzOgogICAgICAgICAgICAgICAgIHdvcmtfZGlyZWN0
b3J5ID0gdGVtcGZpbGUubWtkdGVtcCgpCiAKLSAgICAgICAgICAgIGlmIHNlbGYuZ2VuZXJhdGVf
ZnJvbV9qc29uKG9zLnBhdGguam9pbihpbnB1dF9kaXJlY3RvcnksIGlucHV0X2ZpbGUpLCBwbGF0
Zm9ybSwgd29ya19kaXJlY3RvcnkpOgorICAgICAgICAgICAgaWYgc2VsZi5nZW5lcmF0ZV9mcm9t
X2pzb24ob3MucGF0aC5qb2luKGlucHV0X2RpcmVjdG9yeSwgaW5wdXRfZmlsZSksIHdvcmtfZGly
ZWN0b3J5KToKICAgICAgICAgICAgICAgICBwYXNzZWQgPSBGYWxzZQogCiAgICAgICAgICAgICBp
ZiBzZWxmLnJlc2V0X3Jlc3VsdHM6CkBAIC0xMjIsMjEgKzEyMSwxMCBAQCBjbGFzcyBJbnNwZWN0
b3JHZW5lcmF0b3JUZXN0czoKICAgICAgICAgYWxsX3Rlc3RzX3Bhc3NlZCA9IFRydWUKIAogICAg
ICAgICBiYXNlX2RpcmVjdG9yeSA9IG9zLnBhdGguam9pbignSmF2YVNjcmlwdENvcmUnLCAnaW5z
cGVjdG9yJywgJ3NjcmlwdHMnLCAndGVzdHMnKQotCi0gICAgICAgIHBsYXRmb3JtX2RpcmVjdG9y
aWVzID0gewotICAgICAgICAgICAgJ21hY29zJzogJ21hYycsCi0gICAgICAgICAgICAnaW9zJzog
J2lvcycsCi0gICAgICAgICAgICAnZ2VuZXJpYyc6ICdnZW5lcmljJywKLSAgICAgICAgICAgICdh
bGwnOiAnYWxsJywKLSAgICAgICAgfQotCi0gICAgICAgIGZvciBwbGF0Zm9ybV9uYW1lLCBwbGF0
Zm9ybV9kaXJlY3RvcnkgaW4gcGxhdGZvcm1fZGlyZWN0b3JpZXMuaXRlcml0ZW1zKCk6Ci0gICAg
ICAgICAgICBpbnB1dF9kaXJlY3RvcnkgPSBvcy5wYXRoLmpvaW4oYmFzZV9kaXJlY3RvcnksIHBs
YXRmb3JtX2RpcmVjdG9yeSkKLSAgICAgICAgICAgIHJlZmVyZW5jZV9kaXJlY3RvcnkgPSBvcy5w
YXRoLmpvaW4oaW5wdXRfZGlyZWN0b3J5LCAnZXhwZWN0ZWQnKQotICAgICAgICAgICAgaWYgbm90
IG9zLnBhdGguaXNkaXIoaW5wdXRfZGlyZWN0b3J5KSBvciBub3Qgb3MucGF0aC5pc2RpcihyZWZl
cmVuY2VfZGlyZWN0b3J5KToKLSAgICAgICAgICAgICAgICBjb250aW51ZQotCi0gICAgICAgICAg
ICBhbGxfdGVzdHNfcGFzc2VkID0gYWxsX3Rlc3RzX3Bhc3NlZCBhbmQgc2VsZi5ydW5fdGVzdHMo
cGxhdGZvcm1fbmFtZSwgaW5wdXRfZGlyZWN0b3J5LCByZWZlcmVuY2VfZGlyZWN0b3J5KQorICAg
ICAgICBpbnB1dF9kaXJlY3RvcnkgPSBiYXNlX2RpcmVjdG9yeQorICAgICAgICByZWZlcmVuY2Vf
ZGlyZWN0b3J5ID0gb3MucGF0aC5qb2luKGlucHV0X2RpcmVjdG9yeSwgJ2V4cGVjdGVkJykKKyAg
ICAgICAgaWYgb3MucGF0aC5pc2RpcihpbnB1dF9kaXJlY3RvcnkpIGFuZCBvcy5wYXRoLmlzZGly
KHJlZmVyZW5jZV9kaXJlY3RvcnkpOgorICAgICAgICAgICAgYWxsX3Rlc3RzX3Bhc3NlZCA9IHNl
bGYucnVuX3Rlc3RzKGlucHV0X2RpcmVjdG9yeSwgcmVmZXJlbmNlX2RpcmVjdG9yeSkKIAogICAg
ICAgICBwcmludCgnJykKICAgICAgICAgaWYgYWxsX3Rlc3RzX3Bhc3NlZDoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400008</attachid>
            <date>2020-05-21 18:26:18 -0700</date>
            <delta_ts>2020-05-21 18:44:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-210014-20200521192611.patch</filename>
            <type>text/plain</type>
            <size>2809610</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IGE5MGRlYjY2ODIxNWNiNWZkMWM1ODRmYTNmOGRm
ZDNmNjNjYjFiZmQuLjAzZDFmODg3NTQ5YWU1OTMxZjY3YWVlZjcxZWZmYWZlNjM4MjY5YTcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2NCBAQAorMjAyMC0wNS0yMSAgRGV2
aW4gUm91c3NvICA8ZHJvdXNzb0BhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3Rvcjog
cmVwbGFjZSBgZmVhdHVyZUd1YXJkYCBhbmQgYGF2YWlsYWJpbGl0eWAgd2l0aCBhIGNvbWJpbmVk
IGBjb25kaXRpb25gIHRoYXQgYWNjZXB0cyBhbnkgbWFjcm8KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMDAxNAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFByZXZpb3VzbHksIHRoZSBnZW5lcmF0ZWQgSW5z
cGVjdG9yQmFja2VuZENvbW1hbmRzLmpzIHdvdWxkIGluY2x1ZGUgY29kZSBmb3IgdGhpbmdzIHRo
YXQgdGhlCisgICAgICAgIGJhY2tlbmQgZG9lc24ndCBhY3R1YWxseSBzdXBwb3J0LiBCeSB1c2lu
ZyBhY3R1YWwgbWFjcm9zIGFuZCBwcmVwcm9jZXNzaW5nIHRoYXQgZmlsZSwgd2UgY2FuCisgICAg
ICAgIGVuc3VyZSB0aGF0IHRoZSBmcm9udGVuZCBkb2Vzbid0IGluY29ycmVjdGx5IHRoaW5rIHRo
YXQgc29tZXRoaW5nIGlzIHN1cHBvcnRlZCBieSB0aGUgcGFnZQorICAgICAgICBiZWluZyBpbnNw
ZWN0ZWQ6CisgICAgICAgICAtIHRoZSBgQ2FudmFzYCBjb21tYW5kcyBhbmQgZXZlbnRzIHJlbGF0
ZWQgdG8gc2hhZGVyIHByb2dyYW1zL3BpcGVsaW5lcyBzaG91bGQgb25seSBleGlzdAorICAgICAg
ICAgICB3aGVuIHRoZSBjb3JyZXNwb25kaW5nIGNvbnRleHQgdHlwZSBleGlzdHMsIG5hbWVseSBg
RU5BQkxFKFdFQkdMKWAgYW5kIGBFTkFCTEUoV0VCR1BVKWAuCisgICAgICAgICAtIGlPUyBkb2Vz
bid0IHN1cHBvcnQgc2hvd2luZyBydWxlcnMsIHNvIGNyZWF0ZSBhIHZhcmlhbnQgb2YgYERPTS5z
ZXRJbnNwZWN0TW9kZUVuYWJsZWRgCisgICAgICAgICAgIHRoYXQgb25seSBleGlzdHMgZm9yIGBQ
TEFURk9STShJT1NfRkFNSUxZKWAgdGhhdCBkb2Vzbid0IGhhdmUgdGhlIGBzaG93UnVsZXJzYCBv
cHRpb25hbAorICAgICAgICAgICBwYXJhbWV0ZXIsIGFzIHdlbGwgYXMgcmVtb3ZpbmcgYFBhZ2Uu
c2V0U2hvd1J1bGVyc2AgZW50aXJlbHkuCisgICAgICAgICAtIHNldHRpbmcgdGhlIGZvcmNlZCBh
cHBlYXJhbmNlIHNob3VsZCBvbmx5IGJlIHBvc3NpYmxlIGlmIGRhcmsgbW9kZSBpcyBzdXBwb3J0
ZWQuCisgICAgICAgICAtIHdlYiBhcmNoaXZlcyBvbmx5IGV4aXN0IGlmIENGIGlzIHVzZWQuCisK
KyAgICAgICAgKiBpbnNwZWN0b3IvcHJvdG9jb2wvQ1BVUHJvZmlsZXIuanNvbjoKKyAgICAgICAg
KiBpbnNwZWN0b3IvcHJvdG9jb2wvQ2FudmFzLmpzb246CisgICAgICAgICogaW5zcGVjdG9yL3By
b3RvY29sL0RPTS5qc29uOgorICAgICAgICAqIGluc3BlY3Rvci9wcm90b2NvbC9JbmRleGVkREIu
anNvbjoKKyAgICAgICAgKiBpbnNwZWN0b3IvcHJvdG9jb2wvSW5zcGVjdG9yLmpzb246CisgICAg
ICAgICogaW5zcGVjdG9yL3Byb3RvY29sL01lbW9yeS5qc29uOgorICAgICAgICAqIGluc3BlY3Rv
ci9wcm90b2NvbC9QYWdlLmpzb246CisgICAgICAgICogaW5zcGVjdG9yL3Byb3RvY29sL1NlcnZp
Y2VXb3JrZXIuanNvbjoKKworICAgICAgICAqIFNjcmlwdHMvZ2VuZXJhdGUtZGVyaXZlZC1zb3Vy
Y2VzLnNoOgorICAgICAgICBTZXQgYENDYCBpZiBpdCBoYXNuJ3QgYWxyZWFkeSBiZWVuIHNldC4K
KworICAgICAgICAqIERlcml2ZWRTb3VyY2VzLm1ha2U6CisgICAgICAgICogRGVyaXZlZFNvdXJj
ZXMtaW5wdXQueGNmaWxlbGlzdDoKKyAgICAgICAgUHJlcHJvY2VzcyBgSW5zcGVjdG9yQmFja2Vu
ZENvbW1hbmRzLmpzLmluYCB0byBnZXQgYW4gYWNjdXJhdGUgYEluc3BlY3RvckJhY2tlbmRDb21t
YW5kcy5qc2AKKyAgICAgICAgdGhhdCBmb2xsb3dzIHRoZSBsb2dpYy9kZXNjcmlwdGlvbiBhYm92
ZS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICBDcmVhdGUgYSBuZXcgYElu
c3BlY3RvckJhY2tlbmRDb21tYW5kc2AgdGFyZ2V0IG5vdyB0aGF0IGBJbnNwZWN0b3JCYWNrZW5k
Q29tbWFuZHMuanNgIGlzCisgICAgICAgIGdlbmVyYXRlZCBzZXByYXRlbHkgZnJvbSB0aGUgcmVz
dCBvZiB0aGUgcHJvdG9jb2wgZmlsZXMuCisKKyAgICAgICAgKiBDb25maWd1cmF0aW9ucy9GZWF0
dXJlRGVmaW5lcy54Y2NvbmZpZzoKKyAgICAgICAgQWRkIGBFTkFCTEVfV0VCX0FSQ0hJVkVgIHNp
bmNlIGl0J3MgYWx3YXlzIGVuYWJsZWQgaW4gd3RmL1BsYXRmb3JtRW5hYmxlQ29jb2EuaC4KKwor
ICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weToKKyAgICAgICAgKGdlbmVyYXRlX2Zyb21fc3BlY2lmaWNhdGlvbik6CisgICAg
ICAgIChnZW5lcmF0ZV9mcm9tX3NwZWNpZmljYXRpb24ubG9hZF9zcGVjaWZpY2F0aW9uKToKKyAg
ICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRvci5weToKKyAgICAgICAg
KEdlbmVyYXRvci5fX2luaXRfXyk6CisgICAgICAgIChHZW5lcmF0b3IubW9kZWwpOgorICAgICAg
ICAoR2VuZXJhdG9yLnNldF9nZW5lcmF0b3Jfc2V0dGluZyk6CisgICAgICAgIChHZW5lcmF0b3Iu
dHlwZV9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbik6CisgICAgICAgIChHZW5lcmF0b3IuY29tbWFu
ZHNfZm9yX2RvbWFpbik6CisgICAgICAgIChHZW5lcmF0b3IuZXZlbnRzX2Zvcl9kb21haW4pOgor
ICAgICAgICAoR2VuZXJhdG9yLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKTogQWRkZWQu
CisgICAgICAgIChHZW5lcmF0b3IucGxhdGZvcm0pOiBEZWxldGVkLgorICAgICAgICAoR2VuZXJh
dG9yLmNhbl9nZW5lcmF0ZV9wbGF0Zm9ybSk6IERlbGV0ZWQuCisgICAgICAgIChHZW5lcmF0b3Iu
d3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4pOiBEZWxldGVkLgorICAgICAgICAoR2VuZXJhdG9y
LndyYXBfd2l0aF9ndWFyZCk6IERlbGV0ZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9tb2RlbHMucHk6CisgICAgICAgIChGcmFtZXdvcmtzKToKKyAgICAgICAgKFByb3Rv
Y29sLnBhcnNlX2RvbWFpbik6CisgICAgICAgIChQcm90b2NvbC5wYXJzZV90eXBlX2RlY2xhcmF0
aW9uKToKKyAgICAgICAgKFByb3RvY29sLnBhcnNlX2NvbW1hbmQpOgorICAgICAgICAoUHJvdG9j
b2wucGFyc2VfZXZlbnQpOgorICAgICAgICAoRG9tYWluLl9faW5pdF9fKToKKyAgICAgICAgKFR5
cGVEZWNsYXJhdGlvbi5fX2luaXRfXyk6CisgICAgICAgIChDb21tYW5kLl9faW5pdF9fKToKKyAg
ICAgICAgKEV2ZW50Ll9faW5pdF9fKToKKyAgICAgICAgKFBsYXRmb3JtKTogRGVsZXRlZC4KKyAg
ICAgICAgKFBsYXRmb3JtLl9faW5pdF9fKTogRGVsZXRlZC4KKyAgICAgICAgKFBsYXRmb3JtLmZy
b21TdHJpbmcpOiBEZWxldGVkLgorICAgICAgICAoUGxhdGZvcm1zKTogRGVsZXRlZC4KKyAgICAg
ICAgKFBsYXRmb3Jtcy5fX21ldGFjbGFzc19fKTogRGVsZXRlZC4KKyAgICAgICAgKFBsYXRmb3Jt
cy5fX21ldGFjbGFzc19fLl9faXRlcl9fKTogRGVsZXRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRvcl90ZW1wbGF0ZXMucHk6CisgICAgICAgIFJlbW92ZSBg
cGxhdGZvcm1gIGFzIGl0IGlzIGhhbmRsZWQgYnkgYGNvbmRpdGlvbmAuCisKKyAgICAgICAgKiBp
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL3ByZXByb2Nlc3MucGw6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvcHJlcHJvY2Vzc29yLnBtLgorCisgICAgICAgICog
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9qc19iYWNrZW5kX2NvbW1hbmRzLnB5
OgorICAgICAgICAoSlNCYWNrZW5kQ29tbWFuZHNHZW5lcmF0b3Iub3V0cHV0X2ZpbGVuYW1lKToK
KyAgICAgICAgKEpTQmFja2VuZENvbW1hbmRzR2VuZXJhdG9yLmdlbmVyYXRlX2RvbWFpbik6Cisg
ICAgICAgIE91dHB1dCB0byBgSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzLmluYCB0aGF0IGlu
Y2x1ZGVzIGAjaWZgIGZvciBwcmVwcm9jZXNzaW5nLgorCisgICAgICAgICogaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weToKKyAgICAgICAgKiBpbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9hbHRlcm5hdGVfYmFja2VuZF9kaXNw
YXRjaGVyX2hlYWRlci5weToKKyAgICAgICAgKENwcEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVy
SGVhZGVyR2VuZXJhdG9yLmdlbmVyYXRlX291dHB1dCk6CisgICAgICAgIChDcHBBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfaGFuZGxlcl9kZWNsYXJh
dGlvbnNfZm9yX2RvbWFpbik6CisgICAgICAgIChDcHBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hl
ckhlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfaGFuZGxlcl9kZWNsYXJhdGlvbl9mb3JfY29tbWFu
ZCk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFj
a2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVy
SGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9hbHRlcm5hdGVfaGFuZGxlcl9mb3J3YXJkX2RlY2xh
cmF0aW9uc19mb3JfZG9tYWlucy5BbHRlcm5hdGUpOgorICAgICAgICAoQ3BwQmFja2VuZERpc3Bh
dGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX2hhbmRsZXJfZGVjbGFyYXRpb25zX2Zvcl9k
b21haW4pOgorICAgICAgICAoQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dl
bmVyYXRlX2hhbmRsZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQpOgorICAgICAgICAoQ3BwQmFj
a2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX2FzeW5jX2hhbmRsZXJfZGVj
bGFyYXRpb25fZm9yX2NvbW1hbmQpOgorICAgICAgICAoQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFk
ZXJHZW5lcmF0b3IuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4p
OgorICAgICAgICAoQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRl
X2Rpc3BhdGNoZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQpOgorICAgICAgICAqIGluc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1l
bnRhdGlvbi5weToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25H
ZW5lcmF0b3IuZ2VuZXJhdGVfb3V0cHV0KToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVy
SW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2hhbmRsZXJfY2xhc3NfZGVzdHJ1Y3Rv
cl9mb3JfZG9tYWluKToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRp
b25HZW5lcmF0b3IuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25zX2Zvcl9kb21h
aW4pOgorICAgICAgICAoQ3BwQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRv
ci5fZ2VuZXJhdGVfc21hbGxfZGlzcGF0Y2hlcl9zd2l0Y2hfaW1wbGVtZW50YXRpb25fZm9yX2Rv
bWFpbik6CisgICAgICAgIChDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJh
dG9yLl9nZW5lcmF0ZV9sYXJnZV9kaXNwYXRjaGVyX3N3aXRjaF9pbXBsZW1lbnRhdGlvbl9mb3Jf
ZG9tYWluKToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5l
cmF0b3IuX2dlbmVyYXRlX2FzeW5jX2Rpc3BhdGNoZXJfY2xhc3NfZm9yX2RvbWFpbik6CisgICAg
ICAgIChDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0
ZV9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uX2Zvcl9jb21tYW5kKToKKyAgICAgICAgKiBpbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2hl
YWRlci5weToKKyAgICAgICAgKENwcEZyb250ZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5f
Z2VuZXJhdGVfZGlzcGF0Y2hlcl9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbik6CisgICAgICAgIChD
cHBGcm9udGVuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX2Rpc3BhdGNoZXJf
ZGVjbGFyYXRpb25fZm9yX2V2ZW50KToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5Ogor
ICAgICAgICAoQ3BwRnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dl
bmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25zX2Zvcl9kb21haW4pOgorICAgICAgICAo
Q3BwRnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2Rp
c3BhdGNoZXJfaW1wbGVtZW50YXRpb25fZm9yX2V2ZW50KToKKyAgICAgICAgKiBpbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19oZWFkZXIucHk6Cisg
ICAgICAgIChDcHBQcm90b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV92ZXJzaW9u
cyk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJv
dG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHk6CisgICAgICAgIChDcHBQcm90b2NvbFR5cGVz
SW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2VudW1fY29udmVyc2lvbl9tZXRob2Rz
X2Zvcl9kb21haW4uZ2VuZXJhdGVfY29udmVyc2lvbl9tZXRob2RfYm9keSk6CisgICAgICAgIChD
cHBQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2VudW1fY29u
dmVyc2lvbl9tZXRob2RzX2Zvcl9kb21haW4pOgorICAgICAgICAoQ3BwUHJvdG9jb2xUeXBlc0lt
cGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9vcGVuX2ZpZWxkX25hbWVzKToKKyAgICAg
ICAgKENwcFByb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfYnVp
bGRlcnNfZm9yX2RvbWFpbik6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9v
YmpjX2dlbmVyYXRvcl90ZW1wbGF0ZXMucHk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9nZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHk6CisgICAg
ICAgIChPYmpDQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX29iamNf
aGFuZGxlcl9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbik6CisgICAgICAgIChPYmpDQmFja2VuZERp
c3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX29iamNfaGFuZGxlcl9kZWNsYXJhdGlv
bl9mb3JfY29tbWFuZCk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weToKKyAgICAgICAg
KE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9o
YW5kbGVyX2ltcGxlbWVudGF0aW9uX2Zvcl9kb21haW4pOgorICAgICAgICAoT2JqQ0JhY2tlbmRE
aXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2hhbmRsZXJfaW1wbGVt
ZW50YXRpb25fZm9yX2NvbW1hbmQpOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVn
ZW4vZ2VuZXJhdGVfb2JqY19oZWFkZXIucHk6CisgICAgICAgIChhZGRfbmV3bGluZSk6CisgICAg
ICAgIChPYmpDSGVhZGVyR2VuZXJhdG9yLmdlbmVyYXRlX291dHB1dCk6CisgICAgICAgIChPYmpD
SGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9mb3J3YXJkX2RlY2xhcmF0aW9ucyk6CisgICAgICAg
IChPYmpDSGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9lbnVtcyk6CisgICAgICAgIChPYmpDSGVh
ZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV90eXBlcyk6CisgICAgICAgIChPYmpDSGVhZGVyR2VuZXJh
dG9yLl9nZW5lcmF0ZV90eXBlX2ludGVyZmFjZSk6CisgICAgICAgIChPYmpDSGVhZGVyR2VuZXJh
dG9yLl9nZW5lcmF0ZV9jb21tYW5kX3Byb3RvY29scyk6CisgICAgICAgIChPYmpDSGVhZGVyR2Vu
ZXJhdG9yLl9nZW5lcmF0ZV9zaW5nbGVfY29tbWFuZF9wcm90b2NvbCk6CisgICAgICAgIChPYmpD
SGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9ldmVudF9pbnRlcmZhY2VzKToKKyAgICAgICAgKE9i
akNIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX3NpbmdsZV9ldmVudF9pbnRlcmZhY2UpOgorICAg
ICAgICAoT2JqQ0hlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfZW51bV9mb3JfcGxhdGZvcm1zKTog
RGVsZXRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29i
amNfcHJvdG9jb2xfdHlwZV9jb252ZXJzaW9uc19oZWFkZXIucHk6CisgICAgICAgIChhZGRfbmV3
bGluZSk6CisgICAgICAgIChPYmpDUHJvdG9jb2xUeXBlQ29udmVyc2lvbnNIZWFkZXJHZW5lcmF0
b3IuZ2VuZXJhdGVfb3V0cHV0KToKKyAgICAgICAgKE9iakNQcm90b2NvbFR5cGVDb252ZXJzaW9u
c0hlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfZW51bV9jb252ZXJzaW9uX2Z1bmN0aW9ucyk6Cisg
ICAgICAgIChPYmpDUHJvdG9jb2xUeXBlQ29udmVyc2lvbnNIZWFkZXJHZW5lcmF0b3IuX2dlbmVy
YXRlX2VudW1fY29udmVyc2lvbl9mb3JfcGxhdGZvcm1zKTogRGVsZXRlZC4KKyAgICAgICAgKiBp
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfcHJvdG9jb2xfdHlwZV9jb252
ZXJzaW9uc19pbXBsZW1lbnRhdGlvbi5weToKKyAgICAgICAgKGFkZF9uZXdsaW5lKToKKyAgICAg
ICAgKE9iakNQcm90b2NvbFR5cGVDb252ZXJzaW9uc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9n
ZW5lcmF0ZV90eXBlX2ZhY3RvcnlfY2F0ZWdvcnlfaW50ZXJmYWNlKToKKyAgICAgICAgKE9iakNQ
cm90b2NvbFR5cGVDb252ZXJzaW9uc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV90
eXBlX2ZhY3RvcnlfbWV0aG9kX2RlY2xhcmF0aW9uKToKKyAgICAgICAgKE9iakNQcm90b2NvbFR5
cGVDb252ZXJzaW9uc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV90eXBlX2ZhY3Rv
cnlfY2F0ZWdvcnlfaW1wbGVtZW50YXRpb24pOgorICAgICAgICAoT2JqQ1Byb3RvY29sVHlwZUNv
bnZlcnNpb25zSW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX3R5cGVfZmFjdG9yeV9t
ZXRob2RfaW1wbGVtZW50YXRpb24pOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVn
ZW4vZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weToKKyAgICAg
ICAgKGFkZF9uZXdsaW5lKToKKyAgICAgICAgKE9iakNQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRp
b25HZW5lcmF0b3IuZ2VuZXJhdGVfdHlwZV9pbXBsZW1lbnRhdGlvbnMpOgorICAgICAgICAoT2Jq
Q1Byb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5nZW5lcmF0ZV90eXBlX2ltcGxl
bWVudGF0aW9uKToKKyAgICAgICAgV3JhcCBlYWNoIGRvbWFpbiwgdHlwZSwgY29tbWFuZCwgYW5k
IGV2ZW50IHdpdGggdGhlIGFzc29jaWF0ZWQgYGNvbmRpdGlvbmAgKGlmIGl0IGV4aXN0cykuCisK
KyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9jb21tYW5kLXRhcmdldFR5cGUtbWF0
Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb246IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9jb21tYW5kLXRhcmdl
dFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24uCisgICAgICAgICogaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbjog
UmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9nZW5lcmljL2NvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24uCisgICAgICAgICog
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVy
bi1wYXJhbWV0ZXJzLmpzb246IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwt
cmV0dXJuLXBhcmFtZXRlcnMuanNvbi4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uOiBSZW5hbWVkIGZyb20gU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL21hYy9kZWZpbml0aW9ucy13
aXRoLW1hYy1wbGF0Zm9ybS5qc29uLgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2RvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbjogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2RvbWFpbi1kZWJ1Z2dhYmxl
VHlwZXMuanNvbi4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9kb21haW4tdGFy
Z2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbjogUmVuYW1lZCBmcm9t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2Rv
bWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLgorICAg
ICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2RvbWFpbi10YXJnZXRUeXBlcy5qc29uOiBS
ZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvZG9tYWluLXRhcmdldFR5cGVzLmpzb24uCisgICAgICAgICogaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uOiBSZW5h
bWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uLgorICAgICAgICAq
IGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2VudW0tdmFsdWVzLmpzb246IFJlbmFtZWQgZnJvbSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9lbnVt
LXZhbHVlcy5qc29uLgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V2ZW50LXRh
cmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb246IFJlbmFtZWQgZnJv
bSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9l
dmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLgorICAg
ICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFt
ZXRlcnMuanNvbjogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9nZW5lcmljL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNv
bi4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kLXRh
cmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tcmVzdWx0OiBSZW5h
bWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvZXhwZWN0ZWQvY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dh
YmxlVHlwZS5qc29uLXJlc3VsdC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uLXJlc3VsdDogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmljL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24tcmVzdWx0Lgor
ICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgt
b3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uLXJlc3VsdDogUmVuYW1lZCBmcm9t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4
cGVjdGVkL2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29u
LXJlc3VsdC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kZWZp
bml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uLXJlc3VsdDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9tYWMvZXhwZWN0ZWQvZGVm
aW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbi1yZXN1bHQuCisgICAgICAgICogaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uLXJl
c3VsdDogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2RvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbi1yZXN1
bHQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWluLXRh
cmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tcmVzdWx0OiBSZW5h
bWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvZXhwZWN0ZWQvZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2Fi
bGVUeXBlLmpzb24tcmVzdWx0LgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4
cGVjdGVkL2RvbWFpbi10YXJnZXRUeXBlcy5qc29uLXJlc3VsdDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVk
L2RvbWFpbi10YXJnZXRUeXBlcy5qc29uLXJlc3VsdC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpz
b24tcmVzdWx0OiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFu
ZC1zaXplcy5qc29uLXJlc3VsdC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC9lbnVtLXZhbHVlcy5qc29uLXJlc3VsdDogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2VudW0t
dmFsdWVzLmpzb24tcmVzdWx0LgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4
cGVjdGVkL2V2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpz
b24tcmVzdWx0OiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1k
b21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1yZXN1bHQuCisgICAgICAgICogaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29u
LXJlc3VsdDogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRl
cnMuanNvbi1yZXN1bHQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvZmFpbC1vbi1jb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVU
eXBlLmpzb24tZXJyb3I6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0
VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1lcnJvci4KKyAgICAgICAg
KiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0
VHlwZXMtdHlwZS5qc29uLWVycm9yOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1jb21tYW5k
LXRhcmdldFR5cGVzLXR5cGUuanNvbi1lcnJvci4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlwZXMtdmFsdWUuanNvbi1l
cnJvcjogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tY29tbWFuZC10YXJnZXRUeXBlcy12YWx1
ZS5qc29uLWVycm9yLgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVk
L2ZhaWwtb24tZG9tYWluLWRlYnVnZ2FibGVUeXBlcy10eXBlLmpzb24tZXJyb3I6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJp
Yy9leHBlY3RlZC9mYWlsLW9uLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMtdHlwZS5qc29uLWVycm9y
LgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZG9t
YWluLWRlYnVnZ2FibGVUeXBlcy12YWx1ZS5qc29uLWVycm9yOiBSZW5hbWVkIGZyb20gU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQv
ZmFpbC1vbi1kb21haW4tZGVidWdnYWJsZVR5cGVzLXZhbHVlLmpzb24tZXJyb3IuCisgICAgICAg
ICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4tdGFyZ2V0
VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1lcnJvcjogUmVuYW1lZCBm
cm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2V4cGVjdGVkL2ZhaWwtb24tZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVn
Z2FibGVUeXBlLmpzb24tZXJyb3IuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZXMtdHlwZS5qc29uLWVycm9yOiBSZW5h
bWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZXMtdHlwZS5qc29uLWVycm9y
LgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZG9t
YWluLXRhcmdldFR5cGVzLXZhbHVlLmpzb24tZXJyb3I6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWls
LW9uLWRvbWFpbi10YXJnZXRUeXBlcy12YWx1ZS5qc29uLWVycm9yLgorICAgICAgICAqIGluc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLWNvbW1hbmQtY2Fs
bC1wYXJhbWV0ZXItbmFtZXMuanNvbi1lcnJvcjogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24t
ZHVwbGljYXRlLWNvbW1hbmQtY2FsbC1wYXJhbWV0ZXItbmFtZXMuanNvbi1lcnJvci4KKyAgICAg
ICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS1j
b21tYW5kLXJldHVybi1wYXJhbWV0ZXItbmFtZXMuanNvbi1lcnJvcjogUmVuYW1lZCBmcm9tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVj
dGVkL2ZhaWwtb24tZHVwbGljYXRlLWNvbW1hbmQtcmV0dXJuLXBhcmFtZXRlci1uYW1lcy5qc29u
LWVycm9yLgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwt
b24tZHVwbGljYXRlLWV2ZW50LXBhcmFtZXRlci1uYW1lcy5qc29uLWVycm9yOiBSZW5hbWVkIGZy
b20gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMv
ZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtZXZlbnQtcGFyYW1ldGVyLW5hbWVzLmpzb24tZXJy
b3IuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1k
dXBsaWNhdGUtdHlwZS1kZWNsYXJhdGlvbnMuanNvbi1lcnJvcjogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVk
L2ZhaWwtb24tZHVwbGljYXRlLXR5cGUtZGVjbGFyYXRpb25zLmpzb24tZXJyb3IuCisgICAgICAg
ICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtdHlw
ZS1tZW1iZXItbmFtZXMuanNvbi1lcnJvcjogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZHVw
bGljYXRlLXR5cGUtbWVtYmVyLW5hbWVzLmpzb24tZXJyb3IuCisgICAgICAgICogaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1lbnVtLXdpdGgtbm8tdmFsdWVzLmpzb24t
ZXJyb3I6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWVudW0td2l0aC1uby12YWx1ZXMuanNv
bi1lcnJvci4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWls
LW9uLWV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24t
ZXJyb3I6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGUtbWF0Y2hp
bmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tZXJyb3IuCisgICAgICAgICogaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1ldmVudC10YXJnZXRUeXBlcy10eXBlLmpz
b24tZXJyb3I6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGVzLXR5
cGUuanNvbi1lcnJvci4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGVzLXZhbHVlLmpzb24tZXJyb3I6IFJlbmFtZWQgZnJv
bSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9l
eHBlY3RlZC9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGVzLXZhbHVlLmpzb24tZXJyb3IuCisgICAg
ICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1udW1iZXItdHlw
ZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbi1lcnJvcjogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVk
L2ZhaWwtb24tbnVtYmVyLXR5cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24tZXJyb3Iu
CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1udW1i
ZXItdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNvbi1lcnJvcjogUmVuYW1lZCBmcm9tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVj
dGVkL2ZhaWwtb24tbnVtYmVyLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24tZXJyb3Iu
CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1zdHJp
bmctdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbi1lcnJvcjogUmVuYW1lZCBmcm9t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4
cGVjdGVkL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24t
ZXJyb3IuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1v
bi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNvbi1lcnJvcjogUmVuYW1lZCBm
cm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2V4cGVjdGVkL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24t
ZXJyb3IuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1v
bi10eXBlLWRlY2xhcmF0aW9uLXVzaW5nLXR5cGUtcmVmZXJlbmNlLmpzb24tZXJyb3I6IFJlbmFt
ZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2Vu
ZXJpYy9leHBlY3RlZC9mYWlsLW9uLXR5cGUtZGVjbGFyYXRpb24tdXNpbmctdHlwZS1yZWZlcmVu
Y2UuanNvbi1lcnJvci4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC9mYWlsLW9uLXR5cGUtcmVmZXJlbmNlLWFzLXByaW1pdGl2ZS10eXBlLmpzb24tZXJyb3I6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXR5cGUtcmVmZXJlbmNlLWFzLXByaW1pdGl2ZS10eXBl
Lmpzb24tZXJyb3IuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
ZmFpbC1vbi10eXBlLXdpdGgtbG93ZXJjYXNlLW5hbWUuanNvbi1lcnJvcjogUmVuYW1lZCBmcm9t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4
cGVjdGVkL2ZhaWwtb24tdHlwZS13aXRoLWxvd2VyY2FzZS1uYW1lLmpzb24tZXJyb3IuCisgICAg
ICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi11bmtub3duLXR5
cGUtcmVmZXJlbmNlLWluLXR5cGUtZGVjbGFyYXRpb24uanNvbi1lcnJvcjogUmVuYW1lZCBmcm9t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4
cGVjdGVkL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLWRlY2xhcmF0aW9u
Lmpzb24tZXJyb3IuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
ZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtbWVtYmVyLmpzb24tZXJyb3I6
IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlw
ZS1tZW1iZXIuanNvbi1lcnJvci4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC9nZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbi1yZXN1bHQ6
IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZ2VuZXJpYy9leHBlY3RlZC9nZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMu
anNvbi1yZXN1bHQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
c2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbi1yZXN1bHQ6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBl
Y3RlZC9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uLXJlc3VsdC4KKyAgICAgICAg
KiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zaGFkb3dlZC1vcHRpb25hbC10eXBl
LXNldHRlcnMuanNvbi1yZXN1bHQ6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9zaGFkb3dlZC1vcHRpb25h
bC10eXBlLXNldHRlcnMuanNvbi1yZXN1bHQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24tcmVzdWx0OiBSZW5hbWVk
IGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVy
aWMvZXhwZWN0ZWQvc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24tcmVzdWx0LgorICAgICAgICAq
IGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNl
ZC1wcmltaXRpdmUtdHlwZS5qc29uLXJlc3VsdDogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtZGVj
bGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uLXJlc3VsdC4KKyAgICAgICAgKiBp
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5
cGUuanNvbi1yZXN1bHQ6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFycmF5
LXR5cGUuanNvbi1yZXN1bHQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbi1yZXN1bHQ6IFJlbmFtZWQgZnJv
bSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9l
eHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uLXJlc3VsdC4KKyAgICAgICAg
KiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLW9iamVj
dC10eXBlLmpzb24tcmVzdWx0OiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1v
YmplY3QtdHlwZS5qc29uLXJlc3VsdC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9leHBlY3RlZC90eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24tcmVzdWx0OiBSZW5h
bWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvZXhwZWN0ZWQvdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uLXJlc3VsdC4K
KyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLXdpdGgtb3Bl
bi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0OiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvdHlwZS13aXRoLW9w
ZW4tcGFyYW1ldGVycy5qc29uLXJlc3VsdC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC92ZXJzaW9uLmpzb24tcmVzdWx0OiBSZW5hbWVkIGZyb20gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvdmVy
c2lvbi5qc29uLXJlc3VsdC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWls
LW9uLWNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNv
bjogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9nZW5lcmljL2ZhaWwtb24tY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1k
ZWJ1Z2dhYmxlVHlwZS5qc29uLgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2Zh
aWwtb24tY29tbWFuZC10YXJnZXRUeXBlcy10eXBlLmpzb246IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWNv
bW1hbmQtdGFyZ2V0VHlwZXMtdHlwZS5qc29uLgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2ZhaWwtb24tY29tbWFuZC10YXJnZXRUeXBlcy12YWx1ZS5qc29uOiBSZW5hbWVkIGZy
b20gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMv
ZmFpbC1vbi1jb21tYW5kLXRhcmdldFR5cGVzLXZhbHVlLmpzb24uCisgICAgICAgICogaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kb21haW4tZGVidWdnYWJsZVR5cGVzLXR5cGUuanNv
bjogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9nZW5lcmljL2ZhaWwtb24tZG9tYWluLWRlYnVnZ2FibGVUeXBlcy10eXBlLmpzb24uCisg
ICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kb21haW4tZGVidWdnYWJs
ZVR5cGVzLXZhbHVlLmpzb246IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWRvbWFpbi1kZWJ1Z2dhYmxlVHlw
ZXMtdmFsdWUuanNvbi4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9u
LWRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uOiBS
ZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdn
YWJsZVR5cGUuanNvbi4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9u
LWRvbWFpbi10YXJnZXRUeXBlcy10eXBlLmpzb246IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWRvbWFpbi10
YXJnZXRUeXBlcy10eXBlLmpzb24uCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZXMtdmFsdWUuanNvbjogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24t
ZG9tYWluLXRhcmdldFR5cGVzLXZhbHVlLmpzb24uCisgICAgICAgICogaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1jYWxsLXBhcmFtZXRlci1uYW1lcy5q
c29uOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1jYWxsLXBhcmFtZXRlci1u
YW1lcy5qc29uLgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZHVw
bGljYXRlLWNvbW1hbmQtcmV0dXJuLXBhcmFtZXRlci1uYW1lcy5qc29uOiBSZW5hbWVkIGZyb20g
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFp
bC1vbi1kdXBsaWNhdGUtY29tbWFuZC1yZXR1cm4tcGFyYW1ldGVyLW5hbWVzLmpzb24uCisgICAg
ICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kdXBsaWNhdGUtZXZlbnQtcGFy
YW1ldGVyLW5hbWVzLmpzb246IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWR1cGxpY2F0ZS1ldmVudC1wYXJh
bWV0ZXItbmFtZXMuanNvbi4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWls
LW9uLWR1cGxpY2F0ZS10eXBlLWRlY2xhcmF0aW9ucy5qc29uOiBSZW5hbWVkIGZyb20gU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1k
dXBsaWNhdGUtdHlwZS1kZWNsYXJhdGlvbnMuanNvbi4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLW1lbWJlci1uYW1lcy5qc29uOiBSZW5h
bWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1tZW1iZXItbmFtZXMuanNvbi4KKyAgICAgICAg
KiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWVudW0td2l0aC1uby12YWx1ZXMuanNv
bjogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9nZW5lcmljL2ZhaWwtb24tZW51bS13aXRoLW5vLXZhbHVlcy5qc29uLgorICAgICAgICAq
IGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGlu
Zy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbjogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZXZlbnQtdGFy
Z2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi4KKyAgICAgICAgKiBp
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGVzLXR5cGUuanNv
bjogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9nZW5lcmljL2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlwZXMtdHlwZS5qc29uLgorICAgICAg
ICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlwZXMtdmFs
dWUuanNvbjogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlwZXMtdmFsdWUuanNvbi4K
KyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLW51bWJlci10eXBlZC1v
cHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29uOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1udW1iZXItdHlw
ZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbi4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29u
OiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2dlbmVyaWMvZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNv
bi4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXN0cmluZy10eXBl
ZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29uOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1zdHJpbmct
dHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbi4KKyAgICAgICAgKiBpbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9mYWlsLW9uLXN0cmluZy10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5q
c29uOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIu
anNvbi4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXR5cGUtZGVj
bGFyYXRpb24tdXNpbmctdHlwZS1yZWZlcmVuY2UuanNvbjogUmVuYW1lZCBmcm9tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tdHlw
ZS1kZWNsYXJhdGlvbi11c2luZy10eXBlLXJlZmVyZW5jZS5qc29uLgorICAgICAgICAqIGluc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdHlwZS1yZWZlcmVuY2UtYXMtcHJpbWl0aXZlLXR5
cGUuanNvbjogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tdHlwZS1yZWZlcmVuY2UtYXMtcHJpbWl0aXZlLXR5
cGUuanNvbi4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXR5cGUt
d2l0aC1sb3dlcmNhc2UtbmFtZS5qc29uOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi10eXBlLXdpdGgtbG93
ZXJjYXNlLW5hbWUuanNvbi4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWls
LW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1kZWNsYXJhdGlvbi5qc29uOiBSZW5h
bWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtZGVjbGFyYXRpb24u
anNvbi4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXVua25vd24t
dHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1tZW1iZXIuanNvbjogUmVuYW1lZCBmcm9tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tdW5r
bm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLW1lbWJlci5qc29uLgorICAgICAgICAqIGluc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5q
c29uOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24u
CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvc2FtZS10eXBlLWlkLWRpZmZlcmVu
dC1kb21haW4uanNvbjogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL3NhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpz
b24uCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvc2hhZG93ZWQtb3B0aW9uYWwt
dHlwZS1zZXR0ZXJzLmpzb246IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9zaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRl
cnMuanNvbi4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9zaG91bGQtc3RyaXAt
Y29tbWVudHMuanNvbjogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL3Nob3VsZC1zdHJpcC1jb21tZW50cy5qc29uLgorICAg
ICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1w
cmltaXRpdmUtdHlwZS5qc29uOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXBy
aW1pdGl2ZS10eXBlLmpzb24uCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlw
ZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb246IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy90eXBlLWRlY2xhcmF0aW9u
LWFycmF5LXR5cGUuanNvbi4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBl
LWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvdHlwZS1kZWNsYXJhdGlvbi1l
bnVtLXR5cGUuanNvbi4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLWRl
Y2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb246IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy90eXBlLWRlY2xhcmF0aW9uLW9i
amVjdC10eXBlLmpzb24uCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1y
ZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvdHlwZS1yZXF1aXJpbmctcnVu
dGltZS1jYXN0cy5qc29uLgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUt
d2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbjogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL3R5cGUtd2l0aC1vcGVuLXBhcmFt
ZXRlcnMuanNvbi4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy92ZXJzaW9uLmpz
b246IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy92ZXJzaW9uLmpzb24uCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uOiBSZW1vdmVk
LgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZGVm
aW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbi1yZXN1bHQ6IFJlbW92ZWQuCisgICAgICAg
ICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWNvbW1hbmQtd2l0aC1p
bnZhbGlkLXBsYXRmb3JtLmpzb246IFJlbW92ZWQuCisgICAgICAgICogaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWNvbW1hbmQtd2l0aC1pbnZhbGlkLXBs
YXRmb3JtLmpzb24tZXJyb3I6IFJlbW92ZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy9mYWlsLW9uLXR5cGUtd2l0aC1pbnZhbGlkLXBsYXRmb3JtLmpzb246IFJl
bW92ZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3Rl
ZC9mYWlsLW9uLXR5cGUtd2l0aC1pbnZhbGlkLXBsYXRmb3JtLmpzb24tZXJyb3I6IFJlbW92ZWQu
CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvaW9zL2RlZmluaXRpb25zLXdpdGgt
bWFjLXBsYXRmb3JtLmpzb246IFJlbW92ZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvaW9zL2V4cGVjdGVkL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24tcmVz
dWx0OiBSZW1vdmVkLgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2FsbC9kZWZp
bml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uOiBSZW1vdmVkLgorICAgICAgICAqIGluc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2FsbC9leHBlY3RlZC9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0
Zm9ybS5qc29uLXJlc3VsdDogUmVtb3ZlZC4KKyAgICAgICAgRG9uJ3Qgc2VwYXJhdGUgdGhlIGlu
c3BlY3RvciBnZW5lcmF0b3IgdGVzdHMgYnkgcGxhdGZvcm0uCisKIDIwMjAtMDUtMTUgIEtlaXRo
IE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwg
Zml4IGludGVybmFsIGFybTY0ZSBidWlsZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA0NGRmZmQ0YzAyNWJhN2My
MTE1ZGY0MmQ0ZTFhNTJlNTBiZmJiNmQ4Li4xMjM1YTIyOTlmZjM2YTc0YWMxMTM2NDA5ZTZmNjA2
YTZmNjRkNGI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTEgQEAKKzIwMjAtMDUtMjEgIERldmlu
IFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IHJl
cGxhY2UgYGZlYXR1cmVHdWFyZGAgYW5kIGBhdmFpbGFiaWxpdHlgIHdpdGggYSBjb21iaW5lZCBg
Y29uZGl0aW9uYCB0aGF0IGFjY2VwdHMgYW55IG1hY3JvCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTAwMTQKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQcmV2aW91c2x5LCB0aGUgZ2VuZXJhdGVkIEluc3Bl
Y3RvckJhY2tlbmRDb21tYW5kcy5qcyB3b3VsZCBpbmNsdWRlIGNvZGUgZm9yIHRoaW5ncyB0aGF0
IHRoZQorICAgICAgICBiYWNrZW5kIGRvZXNuJ3QgYWN0dWFsbHkgc3VwcG9ydC4gQnkgdXNpbmcg
YWN0dWFsIG1hY3JvcyBhbmQgcHJlcHJvY2Vzc2luZyB0aGF0IGZpbGUsIHdlIGNhbgorICAgICAg
ICBlbnN1cmUgdGhhdCB0aGUgZnJvbnRlbmQgZG9lc24ndCBpbmNvcnJlY3RseSB0aGluayB0aGF0
IHNvbWV0aGluZyBpcyBzdXBwb3J0ZWQgYnkgdGhlIHBhZ2UKKyAgICAgICAgYmVpbmcgaW5zcGVj
dGVkOgorICAgICAgICAgLSB0aGUgYENhbnZhc2AgY29tbWFuZHMgYW5kIGV2ZW50cyByZWxhdGVk
IHRvIHNoYWRlciBwcm9ncmFtcy9waXBlbGluZXMgc2hvdWxkIG9ubHkgZXhpc3QKKyAgICAgICAg
ICAgd2hlbiB0aGUgY29ycmVzcG9uZGluZyBjb250ZXh0IHR5cGUgZXhpc3RzLCBuYW1lbHkgYEVO
QUJMRShXRUJHTClgIGFuZCBgRU5BQkxFKFdFQkdQVSlgLgorICAgICAgICAgLSBpT1MgZG9lc24n
dCBzdXBwb3J0IHNob3dpbmcgcnVsZXJzLCBzbyBjcmVhdGUgYSB2YXJpYW50IG9mIGBET00uc2V0
SW5zcGVjdE1vZGVFbmFibGVkYAorICAgICAgICAgICB0aGF0IG9ubHkgZXhpc3RzIGZvciBgUExB
VEZPUk0oSU9TX0ZBTUlMWSlgIHRoYXQgZG9lc24ndCBoYXZlIHRoZSBgc2hvd1J1bGVyc2Agb3B0
aW9uYWwKKyAgICAgICAgICAgcGFyYW1ldGVyLCBhcyB3ZWxsIGFzIHJlbW92aW5nIGBQYWdlLnNl
dFNob3dSdWxlcnNgIGVudGlyZWx5LgorICAgICAgICAgLSBzZXR0aW5nIHRoZSBmb3JjZWQgYXBw
ZWFyYW5jZSBzaG91bGQgb25seSBiZSBwb3NzaWJsZSBpZiBkYXJrIG1vZGUgaXMgc3VwcG9ydGVk
LgorICAgICAgICAgLSB3ZWIgYXJjaGl2ZXMgb25seSBleGlzdCBpZiBDRiBpcyB1c2VkLgorCisg
ICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oOgorICAgICAgICAq
IGluc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwOgorICAgICAgICAqIGluc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9yQ2FudmFzQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3Iv
YWdlbnRzL0luc3BlY3RvckNhbnZhc0FnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckNhbnZhc0FnZW50OjpJbnNwZWN0b3JDYW52YXNBZ2VudCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZW5hYmxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckNhbnZhc0FnZW50OjpzdGFydFJlY29yZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JDYW52YXNBZ2VudDo6cmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2Fu
dmFzQWdlbnQ6OnVuYmluZENhbnZhcyk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclNo
YWRlclByb2dyYW0uaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yU2hhZGVyUHJvZ3Jh
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTaGFkZXJQcm9ncmFtOjpyZXF1ZXN0
U2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclNoYWRlclByb2dyYW06
OnVwZGF0ZVNoYWRlcik6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01B
Z2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OnNldEluc3BlY3RNb2RlRW5h
YmxlZCk6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JQYWdlQWdlbnQuaDoK
KyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclBhZ2VBZ2VudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6OmVuYWJsZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6OmRpc2FibGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yUGFnZUFnZW50OjpzZXRGb3JjZWRBcHBlYXJhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvclBhZ2VBZ2VudDo6YXJjaGl2ZSk6CisKKyAgICAgICAgKiBDb25maWd1cmF0aW9u
cy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZpZzoKKyAgICAgICAgQWRkIGBFTkFCTEVfV0VCX0FSQ0hJ
VkVgIHNpbmNlIGl0J3MgYWx3YXlzIGVuYWJsZWQgaW4gd3RmL1BsYXRmb3JtRW5hYmxlQ29jb2Eu
aC4KKworICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuaWRsOgorICAg
ICAgICBEcml2ZS1ieTogcmVwbGFjZSB0aGUgYCNpZmAgd2l0aCB0aGUgSURMIGBbQ29uZGl0aW9u
YWw9XWAuCisKIDIwMjAtMDUtMTUgIEtlbm5ldGggUnVzc2VsbCAgPGtickBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgT0VTX3RleHR1cmVfZmxvYXQgaW50ZXJuYWwgZm9ybWF0IGNvbnZlcnNpb24g
bXVzdCBkZXBlbmQgb24gV0VCR0xfY29sb3JfYnVmZmVyX2Zsb2F0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZwpp
bmRleCBjNDAwYWEyNmUwNzgzY2EzNzFkYmQ4ODMwMzgyMjQ3NWI4OTExMDJjLi5jMmNjNGU0YTAy
NjljMTgxNjFhODZkZDg1NzI5OWVlMDk4MmZiOWRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9QQUwvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNSBAQAorMjAyMC0wNS0yMSAgRGV2aW4gUm91c3NvICA8ZHJvdXNzb0BhcHBsZS5jb20+
CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogcmVwbGFjZSBgZmVhdHVyZUd1YXJkYCBhbmQgYGF2
YWlsYWJpbGl0eWAgd2l0aCBhIGNvbWJpbmVkIGBjb25kaXRpb25gIHRoYXQgYWNjZXB0cyBhbnkg
bWFjcm8KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIx
MDAxNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFBy
ZXZpb3VzbHksIHRoZSBnZW5lcmF0ZWQgSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzIHdvdWxk
IGluY2x1ZGUgY29kZSBmb3IgdGhpbmdzIHRoYXQgdGhlCisgICAgICAgIGJhY2tlbmQgZG9lc24n
dCBhY3R1YWxseSBzdXBwb3J0LiBCeSB1c2luZyBhY3R1YWwgbWFjcm9zIGFuZCBwcmVwcm9jZXNz
aW5nIHRoYXQgZmlsZSwgd2UgY2FuCisgICAgICAgIGVuc3VyZSB0aGF0IHRoZSBmcm9udGVuZCBk
b2Vzbid0IGluY29ycmVjdGx5IHRoaW5rIHRoYXQgc29tZXRoaW5nIGlzIHN1cHBvcnRlZCBieSB0
aGUgcGFnZQorICAgICAgICBiZWluZyBpbnNwZWN0ZWQ6CisgICAgICAgICAtIHRoZSBgQ2FudmFz
YCBjb21tYW5kcyBhbmQgZXZlbnRzIHJlbGF0ZWQgdG8gc2hhZGVyIHByb2dyYW1zL3BpcGVsaW5l
cyBzaG91bGQgb25seSBleGlzdAorICAgICAgICAgICB3aGVuIHRoZSBjb3JyZXNwb25kaW5nIGNv
bnRleHQgdHlwZSBleGlzdHMsIG5hbWVseSBgRU5BQkxFKFdFQkdMKWAgYW5kIGBFTkFCTEUoV0VC
R1BVKWAuCisgICAgICAgICAtIGlPUyBkb2Vzbid0IHN1cHBvcnQgc2hvd2luZyBydWxlcnMsIHNv
IGNyZWF0ZSBhIHZhcmlhbnQgb2YgYERPTS5zZXRJbnNwZWN0TW9kZUVuYWJsZWRgCisgICAgICAg
ICAgIHRoYXQgb25seSBleGlzdHMgZm9yIGBQTEFURk9STShJT1NfRkFNSUxZKWAgdGhhdCBkb2Vz
bid0IGhhdmUgdGhlIGBzaG93UnVsZXJzYCBvcHRpb25hbAorICAgICAgICAgICBwYXJhbWV0ZXIs
IGFzIHdlbGwgYXMgcmVtb3ZpbmcgYFBhZ2Uuc2V0U2hvd1J1bGVyc2AgZW50aXJlbHkuCisgICAg
ICAgICAtIHNldHRpbmcgdGhlIGZvcmNlZCBhcHBlYXJhbmNlIHNob3VsZCBvbmx5IGJlIHBvc3Np
YmxlIGlmIGRhcmsgbW9kZSBpcyBzdXBwb3J0ZWQuCisgICAgICAgICAtIHdlYiBhcmNoaXZlcyBv
bmx5IGV4aXN0IGlmIENGIGlzIHVzZWQuCisKKyAgICAgICAgKiBDb25maWd1cmF0aW9ucy9GZWF0
dXJlRGVmaW5lcy54Y2NvbmZpZzoKKyAgICAgICAgQWRkIGBFTkFCTEVfV0VCX0FSQ0hJVkVgIHNp
bmNlIGl0J3MgYWx3YXlzIGVuYWJsZWQgaW4gd3RmL1BsYXRmb3JtRW5hYmxlQ29jb2EuaC4KKwog
MjAyMC0wNS0xNSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgog
CiAgICAgICAgIFtpT1MgU2ltdWxhdG9yXSBUZXN0V2ViS2l0QVBJLl9XS0Rvd25sb2FkLlJlc3Vt
ZSBpcyBhIGZsYWt5IGNyYXNoCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwppbmRleCAxMDI4OTkwMmQ0
OWQ5YmY4YWI4NDkyZTExNTFlZjBlNzQ3N2YwZDIwLi5jNmQ2MTI2ZGE0ZDkxNWQ4NzM2OTZkNDYz
MDBlODg4MDkzMjlkMjA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOCBA
QAorMjAyMC0wNS0yMSAgRGV2aW4gUm91c3NvICA8ZHJvdXNzb0BhcHBsZS5jb20+CisKKyAgICAg
ICAgV2ViIEluc3BlY3RvcjogcmVwbGFjZSBgZmVhdHVyZUd1YXJkYCBhbmQgYGF2YWlsYWJpbGl0
eWAgd2l0aCBhIGNvbWJpbmVkIGBjb25kaXRpb25gIHRoYXQgYWNjZXB0cyBhbnkgbWFjcm8KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMDAxNAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFByZXZpb3VzbHks
IHRoZSBnZW5lcmF0ZWQgSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzIHdvdWxkIGluY2x1ZGUg
Y29kZSBmb3IgdGhpbmdzIHRoYXQgdGhlCisgICAgICAgIGJhY2tlbmQgZG9lc24ndCBhY3R1YWxs
eSBzdXBwb3J0LiBCeSB1c2luZyBhY3R1YWwgbWFjcm9zIGFuZCBwcmVwcm9jZXNzaW5nIHRoYXQg
ZmlsZSwgd2UgY2FuCisgICAgICAgIGVuc3VyZSB0aGF0IHRoZSBmcm9udGVuZCBkb2Vzbid0IGlu
Y29ycmVjdGx5IHRoaW5rIHRoYXQgc29tZXRoaW5nIGlzIHN1cHBvcnRlZCBieSB0aGUgcGFnZQor
ICAgICAgICBiZWluZyBpbnNwZWN0ZWQ6CisgICAgICAgICAtIHRoZSBgQ2FudmFzYCBjb21tYW5k
cyBhbmQgZXZlbnRzIHJlbGF0ZWQgdG8gc2hhZGVyIHByb2dyYW1zL3BpcGVsaW5lcyBzaG91bGQg
b25seSBleGlzdAorICAgICAgICAgICB3aGVuIHRoZSBjb3JyZXNwb25kaW5nIGNvbnRleHQgdHlw
ZSBleGlzdHMsIG5hbWVseSBgRU5BQkxFKFdFQkdMKWAgYW5kIGBFTkFCTEUoV0VCR1BVKWAuCisg
ICAgICAgICAtIGlPUyBkb2Vzbid0IHN1cHBvcnQgc2hvd2luZyBydWxlcnMsIHNvIGNyZWF0ZSBh
IHZhcmlhbnQgb2YgYERPTS5zZXRJbnNwZWN0TW9kZUVuYWJsZWRgCisgICAgICAgICAgIHRoYXQg
b25seSBleGlzdHMgZm9yIGBQTEFURk9STShJT1NfRkFNSUxZKWAgdGhhdCBkb2Vzbid0IGhhdmUg
dGhlIGBzaG93UnVsZXJzYCBvcHRpb25hbAorICAgICAgICAgICBwYXJhbWV0ZXIsIGFzIHdlbGwg
YXMgcmVtb3ZpbmcgYFBhZ2Uuc2V0U2hvd1J1bGVyc2AgZW50aXJlbHkuCisgICAgICAgICAtIHNl
dHRpbmcgdGhlIGZvcmNlZCBhcHBlYXJhbmNlIHNob3VsZCBvbmx5IGJlIHBvc3NpYmxlIGlmIGRh
cmsgbW9kZSBpcyBzdXBwb3J0ZWQuCisgICAgICAgICAtIHdlYiBhcmNoaXZlcyBvbmx5IGV4aXN0
IGlmIENGIGlzIHVzZWQuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgQWRk
IGEgZGVwZW5kZW5jeSBvbiB0aGUgbmV3IGBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHNgIHRhcmdl
dC4KKworICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQmFzZS9NYWluLmpzOgorICAgICAgICAoV0ku
X3VwZGF0ZURvd25sb2FkVGFiQmFyQnV0dG9uKToKKwogMjAyMC0wNS0xMyAgRGV2aW4gUm91c3Nv
ICA8ZHJvdXNzb0BhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogcmVuYW1lIENT
Uy5TdHlsZVNoZWV0T3JpZ2luLlJlZ3VsYXIgdG8gQ1NTLlN0eWxlU2hlZXRPcmlnaW4uQXV0aG9y
IHRvIG1hdGNoIHRoZSBzcGVjCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDcxNmExZDI0Nzg1ZTE5NWRmMmNiMGMxYjM2
MTFjMTNhNjhjYzU0YzYuLmM4YWY2ODU4ZWI4YWY5NGIzZWE3ZjQwNTU2NmYzNzg3ODk3ZTYwMzkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMzEgQEAKKzIwMjAtMDUtMjEgIERldmluIFJvdXNzbyAgPGRy
b3Vzc29AYXBwbGUuY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IHJlcGxhY2UgYGZlYXR1
cmVHdWFyZGAgYW5kIGBhdmFpbGFiaWxpdHlgIHdpdGggYSBjb21iaW5lZCBgY29uZGl0aW9uYCB0
aGF0IGFjY2VwdHMgYW55IG1hY3JvCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMTAwMTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBQcmV2aW91c2x5LCB0aGUgZ2VuZXJhdGVkIEluc3BlY3RvckJhY2tlbmRD
b21tYW5kcy5qcyB3b3VsZCBpbmNsdWRlIGNvZGUgZm9yIHRoaW5ncyB0aGF0IHRoZQorICAgICAg
ICBiYWNrZW5kIGRvZXNuJ3QgYWN0dWFsbHkgc3VwcG9ydC4gQnkgdXNpbmcgYWN0dWFsIG1hY3Jv
cyBhbmQgcHJlcHJvY2Vzc2luZyB0aGF0IGZpbGUsIHdlIGNhbgorICAgICAgICBlbnN1cmUgdGhh
dCB0aGUgZnJvbnRlbmQgZG9lc24ndCBpbmNvcnJlY3RseSB0aGluayB0aGF0IHNvbWV0aGluZyBp
cyBzdXBwb3J0ZWQgYnkgdGhlIHBhZ2UKKyAgICAgICAgYmVpbmcgaW5zcGVjdGVkOgorICAgICAg
ICAgLSB0aGUgYENhbnZhc2AgY29tbWFuZHMgYW5kIGV2ZW50cyByZWxhdGVkIHRvIHNoYWRlciBw
cm9ncmFtcy9waXBlbGluZXMgc2hvdWxkIG9ubHkgZXhpc3QKKyAgICAgICAgICAgd2hlbiB0aGUg
Y29ycmVzcG9uZGluZyBjb250ZXh0IHR5cGUgZXhpc3RzLCBuYW1lbHkgYEVOQUJMRShXRUJHTClg
IGFuZCBgRU5BQkxFKFdFQkdQVSlgLgorICAgICAgICAgLSBpT1MgZG9lc24ndCBzdXBwb3J0IHNo
b3dpbmcgcnVsZXJzLCBzbyBjcmVhdGUgYSB2YXJpYW50IG9mIGBET00uc2V0SW5zcGVjdE1vZGVF
bmFibGVkYAorICAgICAgICAgICB0aGF0IG9ubHkgZXhpc3RzIGZvciBgUExBVEZPUk0oSU9TX0ZB
TUlMWSlgIHRoYXQgZG9lc24ndCBoYXZlIHRoZSBgc2hvd1J1bGVyc2Agb3B0aW9uYWwKKyAgICAg
ICAgICAgcGFyYW1ldGVyLCBhcyB3ZWxsIGFzIHJlbW92aW5nIGBQYWdlLnNldFNob3dSdWxlcnNg
IGVudGlyZWx5LgorICAgICAgICAgLSBzZXR0aW5nIHRoZSBmb3JjZWQgYXBwZWFyYW5jZSBzaG91
bGQgb25seSBiZSBwb3NzaWJsZSBpZiBkYXJrIG1vZGUgaXMgc3VwcG9ydGVkLgorICAgICAgICAg
LSB3ZWIgYXJjaGl2ZXMgb25seSBleGlzdCBpZiBDRiBpcyB1c2VkLgorCisgICAgICAgICogQ29u
ZmlndXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25maWc6CisgICAgICAgIEFkZCBgRU5BQkxF
X1dFQl9BUkNISVZFYCBzaW5jZSBpdCdzIGFsd2F5cyBlbmFibGVkIGluIHd0Zi9QbGF0Zm9ybUVu
YWJsZUNvY29hLmguCisKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5tYWtlOgorICAgICAgICAq
IFBsYXRmb3JtTWFjLmNtYWtlOgorICAgICAgICBSZW1vdmUgYHBsYXRmb3JtYCBhcyBpdCBpcyBo
YW5kbGVkIGJ5IGBjb25kaXRpb25gLgorCisgICAgICAgICogVUlQcm9jZXNzL0F1dG9tYXRpb24v
QXV0b21hdGlvbi5qc29uOgorCiAyMDIwLTA1LTE1ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlz
dGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgW2lPUyBTaW11bGF0b3JdIFRlc3RXZWJLaXRB
UEkuX1dLRG93bmxvYWQuUmVzdW1lIGlzIGEgZmxha3kgY3Jhc2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0No
YW5nZUxvZwppbmRleCBjNzJiY2VlY2JkNjg0NDM0NWE5MThiZmUyM2EwZmIyMDJhZmZhN2VkLi4z
ZTA1NDQ5OTk4ZGRmYWZkMjRiYzljOWY1YzdmZDQ5MGE0YTYxYTY5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMjAtMDUtMjEgIERldmluIFJvdXNzbyAg
PGRyb3Vzc29AYXBwbGUuY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IHJlcGxhY2UgYGZl
YXR1cmVHdWFyZGAgYW5kIGBhdmFpbGFiaWxpdHlgIHdpdGggYSBjb21iaW5lZCBgY29uZGl0aW9u
YCB0aGF0IGFjY2VwdHMgYW55IG1hY3JvCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMTAwMTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBQcmV2aW91c2x5LCB0aGUgZ2VuZXJhdGVkIEluc3BlY3RvckJhY2tl
bmRDb21tYW5kcy5qcyB3b3VsZCBpbmNsdWRlIGNvZGUgZm9yIHRoaW5ncyB0aGF0IHRoZQorICAg
ICAgICBiYWNrZW5kIGRvZXNuJ3QgYWN0dWFsbHkgc3VwcG9ydC4gQnkgdXNpbmcgYWN0dWFsIG1h
Y3JvcyBhbmQgcHJlcHJvY2Vzc2luZyB0aGF0IGZpbGUsIHdlIGNhbgorICAgICAgICBlbnN1cmUg
dGhhdCB0aGUgZnJvbnRlbmQgZG9lc24ndCBpbmNvcnJlY3RseSB0aGluayB0aGF0IHNvbWV0aGlu
ZyBpcyBzdXBwb3J0ZWQgYnkgdGhlIHBhZ2UKKyAgICAgICAgYmVpbmcgaW5zcGVjdGVkOgorICAg
ICAgICAgLSB0aGUgYENhbnZhc2AgY29tbWFuZHMgYW5kIGV2ZW50cyByZWxhdGVkIHRvIHNoYWRl
ciBwcm9ncmFtcy9waXBlbGluZXMgc2hvdWxkIG9ubHkgZXhpc3QKKyAgICAgICAgICAgd2hlbiB0
aGUgY29ycmVzcG9uZGluZyBjb250ZXh0IHR5cGUgZXhpc3RzLCBuYW1lbHkgYEVOQUJMRShXRUJH
TClgIGFuZCBgRU5BQkxFKFdFQkdQVSlgLgorICAgICAgICAgLSBpT1MgZG9lc24ndCBzdXBwb3J0
IHNob3dpbmcgcnVsZXJzLCBzbyBjcmVhdGUgYSB2YXJpYW50IG9mIGBET00uc2V0SW5zcGVjdE1v
ZGVFbmFibGVkYAorICAgICAgICAgICB0aGF0IG9ubHkgZXhpc3RzIGZvciBgUExBVEZPUk0oSU9T
X0ZBTUlMWSlgIHRoYXQgZG9lc24ndCBoYXZlIHRoZSBgc2hvd1J1bGVyc2Agb3B0aW9uYWwKKyAg
ICAgICAgICAgcGFyYW1ldGVyLCBhcyB3ZWxsIGFzIHJlbW92aW5nIGBQYWdlLnNldFNob3dSdWxl
cnNgIGVudGlyZWx5LgorICAgICAgICAgLSBzZXR0aW5nIHRoZSBmb3JjZWQgYXBwZWFyYW5jZSBz
aG91bGQgb25seSBiZSBwb3NzaWJsZSBpZiBkYXJrIG1vZGUgaXMgc3VwcG9ydGVkLgorICAgICAg
ICAgLSB3ZWIgYXJjaGl2ZXMgb25seSBleGlzdCBpZiBDRiBpcyB1c2VkLgorCisgICAgICAgICog
Q29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25maWc6CisgICAgICAgIEFkZCBgRU5B
QkxFX1dFQl9BUkNISVZFYCBzaW5jZSBpdCdzIGFsd2F5cyBlbmFibGVkIGluIHd0Zi9QbGF0Zm9y
bUVuYWJsZUNvY29hLmguCisKIDIwMjAtMDUtMTQgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxl
LmNvbT4KIAogICAgICAgICBSZWdyZXNzaW9uKHIyNTQ4NTYpIEZhbWlseSBIZWFsdGggaU9TIGFw
cCBpcyBicm9rZW4gZHVlIHRvIGxhY2sgZm9yIFdlYlNRTCBzdXBwb3J0CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggMGQxZmUzMDAwYWIyYjRiMDhhZjQ0OWQ5NTMyMjc3YmU0
N2E2ZGM4Ny4uZTI3YWY5MjNjZTZiYWUxODNkZmY4NzZlYjU3ZTBlNjMwNzNmYWU3MiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTE1MSwxMiArMTE1MSwxNSBAQCBzZXQo
SmF2YVNjcmlwdENvcmVfSU5TUEVDVE9SX1BST1RPQ09MX1NDUklQVFMKICAgICAke0phdmFTY3Jp
cHRDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0vY29kZWdlbi9nZW5lcmF0b3JfdGVtcGxhdGVz
LnB5CiAgICAgJHtKYXZhU2NyaXB0Q29yZV9JTlNQRUNUT1JfU0NSSVBUU19ESVJ9L2NvZGVnZW4v
X19pbml0X18ucHkKICAgICAke0phdmFTY3JpcHRDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0v
Y29kZWdlbi9tb2RlbHMucHkKKyAgICAke0phdmFTY3JpcHRDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRT
X0RJUn0vY29kZWdlbi9wcmVwcm9jZXNzLnBsCiApCiAKIHNldChKYXZhU2NyaXB0Q29yZV9JTlNQ
RUNUT1JfRE9NQUlOUwogICAgICR7SkFWQVNDUklQVENPUkVfRElSfS9pbnNwZWN0b3IvcHJvdG9j
b2wvQW5pbWF0aW9uLmpzb24KICAgICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vaW5zcGVjdG9yL3By
b3RvY29sL0FwcGxpY2F0aW9uQ2FjaGUuanNvbgogICAgICR7SkFWQVNDUklQVENPUkVfRElSfS9p
bnNwZWN0b3IvcHJvdG9jb2wvQXVkaXQuanNvbgorICAgICR7SkFWQVNDUklQVENPUkVfRElSfS9p
bnNwZWN0b3IvcHJvdG9jb2wvQnJvd3Nlci5qc29uCisgICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9
L2luc3BlY3Rvci9wcm90b2NvbC9DUFVQcm9maWxlci5qc29uCiAgICAgJHtKQVZBU0NSSVBUQ09S
RV9ESVJ9L2luc3BlY3Rvci9wcm90b2NvbC9DU1MuanNvbgogICAgICR7SkFWQVNDUklQVENPUkVf
RElSfS9pbnNwZWN0b3IvcHJvdG9jb2wvQ2FudmFzLmpzb24KICAgICAke0pBVkFTQ1JJUFRDT1JF
X0RJUn0vaW5zcGVjdG9yL3Byb3RvY29sL0NvbnNvbGUuanNvbgpAQCAtMTE2NSw0MSArMTE2OCwy
NCBAQCBzZXQoSmF2YVNjcmlwdENvcmVfSU5TUEVDVE9SX0RPTUFJTlMKICAgICAke0pBVkFTQ1JJ
UFRDT1JFX0RJUn0vaW5zcGVjdG9yL3Byb3RvY29sL0RPTVN0b3JhZ2UuanNvbgogICAgICR7SkFW
QVNDUklQVENPUkVfRElSfS9pbnNwZWN0b3IvcHJvdG9jb2wvRGF0YWJhc2UuanNvbgogICAgICR7
SkFWQVNDUklQVENPUkVfRElSfS9pbnNwZWN0b3IvcHJvdG9jb2wvRGVidWdnZXIuanNvbgotICAg
ICR7SkFWQVNDUklQVENPUkVfRElSfS9pbnNwZWN0b3IvcHJvdG9jb2wvQnJvd3Nlci5qc29uCiAg
ICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2luc3BlY3Rvci9wcm90b2NvbC9HZW5lcmljVHlwZXMu
anNvbgogICAgICR7SkFWQVNDUklQVENPUkVfRElSfS9pbnNwZWN0b3IvcHJvdG9jb2wvSGVhcC5q
c29uCisgICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2luc3BlY3Rvci9wcm90b2NvbC9JbmRleGVk
REIuanNvbgogICAgICR7SkFWQVNDUklQVENPUkVfRElSfS9pbnNwZWN0b3IvcHJvdG9jb2wvSW5z
cGVjdG9yLmpzb24KICAgICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vaW5zcGVjdG9yL3Byb3RvY29s
L0xheWVyVHJlZS5qc29uCisgICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2luc3BlY3Rvci9wcm90
b2NvbC9NZW1vcnkuanNvbgogICAgICR7SkFWQVNDUklQVENPUkVfRElSfS9pbnNwZWN0b3IvcHJv
dG9jb2wvTmV0d29yay5qc29uCiAgICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2luc3BlY3Rvci9w
cm90b2NvbC9QYWdlLmpzb24KICAgICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vaW5zcGVjdG9yL3By
b3RvY29sL1JlY29yZGluZy5qc29uCiAgICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2luc3BlY3Rv
ci9wcm90b2NvbC9SdW50aW1lLmpzb24KICAgICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vaW5zcGVj
dG9yL3Byb3RvY29sL1NjcmlwdFByb2ZpbGVyLmpzb24KICAgICAke0pBVkFTQ1JJUFRDT1JFX0RJ
Un0vaW5zcGVjdG9yL3Byb3RvY29sL1NlY3VyaXR5Lmpzb24KKyAgICAke0pBVkFTQ1JJUFRDT1JF
X0RJUn0vaW5zcGVjdG9yL3Byb3RvY29sL1NlcnZpY2VXb3JrZXIuanNvbgogICAgICR7SkFWQVND
UklQVENPUkVfRElSfS9pbnNwZWN0b3IvcHJvdG9jb2wvVGFyZ2V0Lmpzb24KICAgICAke0pBVkFT
Q1JJUFRDT1JFX0RJUn0vaW5zcGVjdG9yL3Byb3RvY29sL1RpbWVsaW5lLmpzb24KICAgICAke0pB
VkFTQ1JJUFRDT1JFX0RJUn0vaW5zcGVjdG9yL3Byb3RvY29sL1dvcmtlci5qc29uCiApCiAKLWlm
IChFTkFCTEVfSU5ERVhFRF9EQVRBQkFTRSkKLSAgICBsaXN0KEFQUEVORCBKYXZhU2NyaXB0Q29y
ZV9JTlNQRUNUT1JfRE9NQUlOUwotICAgICAgICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vaW5zcGVj
dG9yL3Byb3RvY29sL0luZGV4ZWREQi5qc29uCi0gICAgKQotZW5kaWYgKCkKLQotaWYgKEVOQUJM
RV9SRVNPVVJDRV9VU0FHRSkKLSAgICBsaXN0KEFQUEVORCBKYXZhU2NyaXB0Q29yZV9JTlNQRUNU
T1JfRE9NQUlOUwotICAgICAgICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vaW5zcGVjdG9yL3Byb3Rv
Y29sL0NQVVByb2ZpbGVyLmpzb24KLSAgICAgICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2luc3Bl
Y3Rvci9wcm90b2NvbC9NZW1vcnkuanNvbgotICAgICkKLWVuZGlmICgpCi0KLWlmIChFTkFCTEVf
U0VSVklDRV9XT1JLRVIpCi0gICAgbGlzdChBUFBFTkQgSmF2YVNjcmlwdENvcmVfSU5TUEVDVE9S
X0RPTUFJTlMKLSAgICAgICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2luc3BlY3Rvci9wcm90b2Nv
bC9TZXJ2aWNlV29ya2VyLmpzb24KLSAgICApCi1lbmRpZiAoKQotCiBhZGRfY3VzdG9tX2NvbW1h
bmQoCiAgICAgT1VUUFVUICR7SmF2YVNjcmlwdENvcmVfREVSSVZFRF9TT1VSQ0VTX0RJUn0vQ29t
YmluZWREb21haW5zLmpzb24KICAgICBNQUlOX0RFUEVOREVOQ1kgJHtKYXZhU2NyaXB0Q29yZV9T
Q1JJUFRTX0RJUn0vZ2VuZXJhdGUtY29tYmluZWQtaW5zcGVjdG9yLWpzb24ucHkKQEAgLTEyMTcs
MTEgKzEyMDMsMTkgQEAgYWRkX2N1c3RvbV9jb21tYW5kKAogICAgICAgICAgICAke0phdmFTY3Jp
cHRDb3JlX0RFUklWRURfU09VUkNFU19ESVJ9L2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZERp
c3BhdGNoZXJzLmgKICAgICAgICAgICAgJHtKYXZhU2NyaXB0Q29yZV9ERVJJVkVEX1NPVVJDRVNf
RElSfS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xPYmplY3RzLmNwcAogICAgICAgICAgICAk
e0phdmFTY3JpcHRDb3JlX0RFUklWRURfU09VUkNFU19ESVJ9L2luc3BlY3Rvci9JbnNwZWN0b3JQ
cm90b2NvbE9iamVjdHMuaAotICAgICAgICAgICAke0phdmFTY3JpcHRDb3JlX0RFUklWRURfU09V
UkNFU19ESVJ9L2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKICAgICBNQUlO
X0RFUEVOREVOQ1kgJHtKYXZhU2NyaXB0Q29yZV9ERVJJVkVEX1NPVVJDRVNfRElSfS9Db21iaW5l
ZERvbWFpbnMuanNvbgogICAgIERFUEVORFMgJHtKYXZhU2NyaXB0Q29yZV9JTlNQRUNUT1JfUFJP
VE9DT0xfU0NSSVBUU30KICAgICBDT01NQU5EICR7UFlUSE9OX0VYRUNVVEFCTEV9ICR7SmF2YVNj
cmlwdENvcmVfSU5TUEVDVE9SX1NDUklQVFNfRElSfS9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkgLS1vdXRwdXREaXIgIiR7SmF2YVNjcmlwdENvcmVfREVSSVZFRF9TT1VS
Q0VTX0RJUn0vaW5zcGVjdG9yIiAtLWZyYW1ld29yayBKYXZhU2NyaXB0Q29yZSAke0phdmFTY3Jp
cHRDb3JlX0RFUklWRURfU09VUkNFU19ESVJ9L0NvbWJpbmVkRG9tYWlucy5qc29uCiAgICAgVkVS
QkFUSU0pCithZGRfY3VzdG9tX2NvbW1hbmQoCisgICAgT1VUUFVUICR7SmF2YVNjcmlwdENvcmVf
REVSSVZFRF9TT1VSQ0VTX0RJUn0vaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmRDb21tYW5kcy5q
cworICAgICAgICAgICAke0phdmFTY3JpcHRDb3JlX0RFUklWRURfU09VUkNFU19ESVJ9L2luc3Bl
Y3Rvci9JbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMuaW4KKyAgICBNQUlOX0RFUEVOREVOQ1kg
JHtKYXZhU2NyaXB0Q29yZV9ERVJJVkVEX1NPVVJDRVNfRElSfS9Db21iaW5lZERvbWFpbnMuanNv
bgorICAgIERFUEVORFMgJHtKYXZhU2NyaXB0Q29yZV9JTlNQRUNUT1JfUFJPVE9DT0xfU0NSSVBU
U30KKyAgICBDT01NQU5EICR7UFlUSE9OX0VYRUNVVEFCTEV9ICR7SmF2YVNjcmlwdENvcmVfSU5T
UEVDVE9SX1NDUklQVFNfRElSfS9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkgLS1vdXRwdXREaXIgJHtKYXZhU2NyaXB0Q29yZV9ERVJJVkVEX1NPVVJDRVNfRElSfS9pbnNw
ZWN0b3IgLS1mcmFtZXdvcmsgV2ViSW5zcGVjdG9yVUkgJHtKYXZhU2NyaXB0Q29yZV9ERVJJVkVE
X1NPVVJDRVNfRElSfS9Db21iaW5lZERvbWFpbnMuanNvbgorICAgIENPTU1BTkQgJHtQRVJMX0VY
RUNVVEFCTEV9ICR7SmF2YVNjcmlwdENvcmVfSU5TUEVDVE9SX1NDUklQVFNfRElSfS9jb2RlZ2Vu
L3ByZXByb2Nlc3MucGwgLS1pbnB1dCAke0phdmFTY3JpcHRDb3JlX0RFUklWRURfU09VUkNFU19E
SVJ9L2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMuaW4gLS1kZWZpbmVzICIk
e0ZFQVRVUkVfREVGSU5FU19XSVRIX1NQQUNFX1NFUEFSQVRPUn0iIC0tcHJlcHJvY2Vzc29yICIk
e0NPREVfR0VORVJBVE9SX1BSRVBST0NFU1NPUn0iIC0tb3V0cHV0ICR7SmF2YVNjcmlwdENvcmVf
REVSSVZFRF9TT1VSQ0VTX0RJUn0vaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmRDb21tYW5kcy5q
cworICAgIFZFUkJBVElNKQorYWRkX2N1c3RvbV90YXJnZXQoSW5zcGVjdG9yQmFja2VuZENvbW1h
bmRzIERFUEVORFMgIiR7SmF2YVNjcmlwdENvcmVfREVSSVZFRF9TT1VSQ0VTX0RJUn0vaW5zcGVj
dG9yL0luc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcyIpCiAKICMgSlNDQnVpbHRpbnMKIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZp
bmVzLnhjY29uZmlnIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NvbmZpZ3VyYXRpb25zL0ZlYXR1
cmVEZWZpbmVzLnhjY29uZmlnCmluZGV4IGI0Zjc4NzlhZTRjZDU5NTFiN2VjNzMxMDMxZTFiMDk1
OWE5NGU2MzkuLjY3OWQzMmExZmI0ZTY4MDNlYTAxZGNhZTlkMmVkNjU3ZWJhOGNiZGQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Db25maWd1cmF0aW9ucy9GZWF0dXJlRGVmaW5l
cy54Y2NvbmZpZworKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ29uZmlndXJhdGlvbnMvRmVh
dHVyZURlZmluZXMueGNjb25maWcKQEAgLTM4Myw2ICszODMsOCBAQCBFTkFCTEVfVklERU9fVFJB
Q0sgPSBFTkFCTEVfVklERU9fVFJBQ0s7CiBFTkFCTEVfVklERU9fVVNFU19FTEVNRU5UX0ZVTExT
Q1JFRU4gPSAkKEVOQUJMRV9WSURFT19VU0VTX0VMRU1FTlRfRlVMTFNDUkVFTl8kKFdLX1BMQVRG
T1JNX05BTUUpKTsKIEVOQUJMRV9WSURFT19VU0VTX0VMRU1FTlRfRlVMTFNDUkVFTl9tYWNvc3gg
PSBFTkFCTEVfVklERU9fVVNFU19FTEVNRU5UX0ZVTExTQ1JFRU47CiAKK0VOQUJMRV9XRUJfQVJD
SElWRSA9IEVOQUJMRV9XRUJfQVJDSElWRTsKKwogRU5BQkxFX1dFQkRSSVZFUl9NT1VTRV9JTlRF
UkFDVElPTlMgPSAkKEVOQUJMRV9XRUJEUklWRVJfTU9VU0VfSU5URVJBQ1RJT05TXyQoV0tfUExB
VEZPUk1fTkFNRSkpOwogRU5BQkxFX1dFQkRSSVZFUl9NT1VTRV9JTlRFUkFDVElPTlNfbWFjb3N4
ID0gRU5BQkxFX1dFQkRSSVZFUl9NT1VTRV9JTlRFUkFDVElPTlM7CiAKQEAgLTQyNSw0ICs0Mjcs
NCBAQCBFTkFCTEVfV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUID0gRU5BQkxFX1dJUkVMRVNTX1BM
QVlCQUNLX1RBUkdFVDsKIAogRU5BQkxFX1hTTFQgPSBFTkFCTEVfWFNMVDsKIAotRkVBVFVSRV9E
RUZJTkVTID0gJChFTkFCTEVfM0RfVFJBTlNGT1JNUykgJChFTkFCTEVfQUNDRUxFUkFURURfMkRf
Q0FOVkFTKSAkKEVOQUJMRV9BQ0NFU1NJQklMSVRZX0lTT0xBVEVEX1RSRUUpICQoRU5BQkxFX0FQ
UExFX1BBWSkgJChFTkFCTEVfQVBQTEVfUEFZX1NFU1NJT05fVjMpICQoRU5BQkxFX0FQUExFX1BB
WV9TRVNTSU9OX1Y0KSAkKEVOQUJMRV9BUFBMRV9QQVlfU0VTU0lPTl9WOSkgJChFTkFCTEVfQVBQ
TElDQVRJT05fTUFOSUZFU1QpICQoRU5BQkxFX0FUVEFDSE1FTlRfRUxFTUVOVCkgJChFTkFCTEVf
QVZGX0NBUFRJT05TKSAkKEVOQUJMRV9DQUNIRV9QQVJUSVRJT05JTkcpICQoRU5BQkxFX0NIQU5O
RUxfTUVTU0FHSU5HKSAkKEVOQUJMRV9DT05URU5UX0ZJTFRFUklORykgJChFTkFCTEVfQ1NTM19U
RVhUKSAkKEVOQUJMRV9DU1NfQk9YX0RFQ09SQVRJT05fQlJFQUspICQoRU5BQkxFX0NTU19DT01Q
T1NJVElORykgJChFTkFCTEVfQ1NTX0NPTklDX0dSQURJRU5UUykgJChFTkFCTEVfQ1NTX0lNQUdF
X1JFU09MVVRJT04pICQoRU5BQkxFX0NTU19QQUlOVElOR19BUEkpICQoRU5BQkxFX0NTU19TQ1JP
TExfU05BUCkgJChFTkFCTEVfQ1NTX1NFTEVDVE9SU19MRVZFTDQpICQoRU5BQkxFX0NTU19UUkFJ
TElOR19XT1JEKSAkKEVOQUJMRV9DU1NfVFlQRURfT00pICQoRU5BQkxFX0NVUlNPUl9WSVNJQklM
SVRZKSAkKEVOQUJMRV9DX0xPT1ApICQoRU5BQkxFX0RBUktfTU9ERV9DU1MpICQoRU5BQkxFX0RB
VEFDVUVfVkFMVUUpICQoRU5BQkxFX0RBVEFMSVNUX0VMRU1FTlQpICQoRU5BQkxFX0RBVEFfSU5U
RVJBQ1RJT04pICQoRU5BQkxFX0RFVklDRV9PUklFTlRBVElPTikgJChFTkFCTEVfRFJBR19TVVBQ
T1JUKSAkKEVOQUJMRV9FRElUQUJMRV9SRUdJT04pICQoRU5BQkxFX0VOQ1JZUFRFRF9NRURJQSkg
JChFTkFCTEVfRVhQRVJJTUVOVEFMX0ZFQVRVUkVTKSAkKEVOQUJMRV9GSUxURVJTX0xFVkVMXzIp
ICQoRU5BQkxFX0ZVTExTQ1JFRU5fQVBJKSAkKEVOQUJMRV9QSUNUVVJFX0lOX1BJQ1RVUkVfQVBJ
KSAkKEVOQUJMRV9HQU1FUEFEKSAkKEVOQUJMRV9HRU9MT0NBVElPTikgJChFTkFCTEVfR1BVX1BS
T0NFU1MpICQoRU5BQkxFX0lOREVYRURfREFUQUJBU0UpICQoRU5BQkxFX0lOREVYRURfREFUQUJB
U0VfSU5fV09SS0VSUykgJChFTkFCTEVfSU5QVVRfVFlQRV9DT0xPUikgJChFTkFCTEVfSU5QVVRf
VFlQRV9EQVRFKSAkKEVOQUJMRV9JTlBVVF9UWVBFX0RBVEVUSU1FTE9DQUwpICQoRU5BQkxFX0lO
UFVUX1RZUEVfREFURVRJTUVfSU5DT01QTEVURSkgJChFTkFCTEVfSU5QVVRfVFlQRV9NT05USCkg
JChFTkFCTEVfSU5QVVRfVFlQRV9USU1FKSAkKEVOQUJMRV9JTlBVVF9UWVBFX1dFRUspICQoRU5B
QkxFX0lOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpICQoRU5BQkxFX0lOU1BFQ1RPUl9U
RUxFTUVUUlkpICQoRU5BQkxFX0lOVEVSU0VDVElPTl9PQlNFUlZFUikgJChFTkFCTEVfSU9TX0dF
U1RVUkVfRVZFTlRTKSAkKEVOQUJMRV9JT1NfVE9VQ0hfRVZFTlRTKSAkKEVOQUJMRV9MQVlPVVRf
Rk9STUFUVElOR19DT05URVhUKSAkKEVOQUJMRV9MRUdBQ1lfQ1NTX1ZFTkRPUl9QUkVGSVhFUykg
JChFTkFCTEVfTEVHQUNZX0NVU1RPTV9QUk9UT0NPTF9NQU5BR0VSKSAkKEVOQUJMRV9MRUdBQ1lf
RU5DUllQVEVEX01FRElBKSAkKEVOQUJMRV9MRVRURVJQUkVTUykgJChFTkFCTEVfTUFDX0dFU1RV
UkVfRVZFTlRTKSAkKEVOQUJMRV9NQVRITUwpICQoRU5BQkxFX01FRElBX0NBUFRVUkUpICQoRU5B
QkxFX01FRElBX0NPTlRST0xTX1NDUklQVCkgJChFTkFCTEVfTUVESUFfU0VTU0lPTikgJChFTkFC
TEVfTUVESUFfU09VUkNFKSAkKEVOQUJMRV9NRURJQV9TVEFUSVNUSUNTKSAkKEVOQUJMRV9NRURJ
QV9TVFJFQU0pICQoRU5BQkxFX01FTU9SWV9TQU1QTEVSKSAkKEVOQUJMRV9NRVRFUl9FTEVNRU5U
KSAkKEVOQUJMRV9NSFRNTCkgJChFTkFCTEVfTU9VU0VfQ1VSU09SX1NDQUxFKSAkKEVOQUJMRV9O
QVZJR0FUT1JfU1RBTkRBTE9ORSkgJChFTkFCTEVfTkVUV09SS19DQUNIRV9TUEVDVUxBVElWRV9S
RVZBTElEQVRJT04pICQoRU5BQkxFX05FVFdPUktfQ0FDSEVfU1RBTEVfV0hJTEVfUkVWQUxJREFU
RSkgJChFTkFCTEVfTk9USUZJQ0FUSU9OUykgJChFTkFCTEVfT0ZGU0NSRUVOX0NBTlZBUykgJChF
TkFCTEVfT1ZFUkZMT1dfU0NST0xMSU5HX1RPVUNIKSAkKEVOQUJMRV9QQVlNRU5UX1JFUVVFU1Qp
ICQoRU5BQkxFX1BERktJVF9QTFVHSU4pICQoRU5BQkxFX1BPSU5URVJfTE9DSykgJChFTkFCTEVf
UFVCTElDX1NVRkZJWF9MSVNUKSAkKEVOQUJMRV9RVU9UQSkgJChFTkFCTEVfUkVNT1RFX0lOU1BF
Q1RPUikgJChFTkFCTEVfUkVTSVpFX09CU0VSVkVSKSAkKEVOQUJMRV9SRVNPTFVUSU9OX01FRElB
X1FVRVJZKSAkKEVOQUJMRV9SRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpICQoRU5BQkxFX1JFU09V
UkNFX1VTQUdFKSAkKEVOQUJMRV9SVUJCRVJfQkFORElORykgJChFTkFCTEVfU0FOREJPWF9FWFRF
TlNJT05TKSAkKEVOQUJMRV9TRVJWRVJfUFJFQ09OTkVDVCkgJChFTkFCTEVfU0VSVklDRV9DT05U
Uk9MUykgJChFTkFCTEVfU0VSVklDRV9XT1JLRVIpICQoRU5BQkxFX1NIQVJFQUJMRV9SRVNPVVJD
RSkgJChFTkFCTEVfU1BFRUNIX1NZTlRIRVNJUykgJChFTkFCTEVfU1RSRUFNU19BUEkpICQoRU5B
QkxFX1NWR19GT05UUykgJChFTkFCTEVfVEVMRVBIT05FX05VTUJFUl9ERVRFQ1RJT04pICQoRU5B
QkxFX1RFWFRfQVVUT1NJWklORykgJChFTkFCTEVfVE9VQ0hfRVZFTlRTKSAkKEVOQUJMRV9VU0VS
U0VMRUNUX0FMTCkgJChFTkFCTEVfVVNFUl9NRVNTQUdFX0hBTkRMRVJTKSAkKEVOQUJMRV9WQVJJ
QVRJT05fRk9OVFMpICQoRU5BQkxFX1ZJREVPKSAkKEVOQUJMRV9WSURFT19QUkVTRU5UQVRJT05f
TU9ERSkgJChFTkFCTEVfVklERU9fVFJBQ0spICQoRU5BQkxFX1ZJREVPX1VTRVNfRUxFTUVOVF9G
VUxMU0NSRUVOKSAkKEVOQUJMRV9XRUJEUklWRVJfTU9VU0VfSU5URVJBQ1RJT05TKSAkKEVOQUJM
RV9XRUJEUklWRVJfS0VZQk9BUkRfSU5URVJBQ1RJT05TKSAkKEVOQUJMRV9XRUJEUklWRVJfVE9V
Q0hfSU5URVJBQ1RJT05TKSAkKEVOQUJMRV9XRUJHTCkgJChFTkFCTEVfV0VCR0wyKSAkKEVOQUJM
RV9XRUJHUFUpICQoRU5BQkxFX1dFQlhSKSAkKEVOQUJMRV9XRUJfQVBJX1NUQVRJU1RJQ1MpICQo
RU5BQkxFX1dFQl9BVURJTykgJChFTkFCTEVfV0VCX0FVVEhOKSAkKEVOQUJMRV9XRUJfQ1JZUFRP
KSAkKEVOQUJMRV9XRUJfUlRDKSAkKEVOQUJMRV9XSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpICQo
RU5BQkxFX1hTTFQpOworRkVBVFVSRV9ERUZJTkVTID0gJChFTkFCTEVfM0RfVFJBTlNGT1JNUykg
JChFTkFCTEVfQUNDRUxFUkFURURfMkRfQ0FOVkFTKSAkKEVOQUJMRV9BQ0NFU1NJQklMSVRZX0lT
T0xBVEVEX1RSRUUpICQoRU5BQkxFX0FQUExFX1BBWSkgJChFTkFCTEVfQVBQTEVfUEFZX1NFU1NJ
T05fVjMpICQoRU5BQkxFX0FQUExFX1BBWV9TRVNTSU9OX1Y0KSAkKEVOQUJMRV9BUFBMRV9QQVlf
U0VTU0lPTl9WOSkgJChFTkFCTEVfQVBQTElDQVRJT05fTUFOSUZFU1QpICQoRU5BQkxFX0FUVEFD
SE1FTlRfRUxFTUVOVCkgJChFTkFCTEVfQVZGX0NBUFRJT05TKSAkKEVOQUJMRV9DQUNIRV9QQVJU
SVRJT05JTkcpICQoRU5BQkxFX0NIQU5ORUxfTUVTU0FHSU5HKSAkKEVOQUJMRV9DT05URU5UX0ZJ
TFRFUklORykgJChFTkFCTEVfQ1NTM19URVhUKSAkKEVOQUJMRV9DU1NfQk9YX0RFQ09SQVRJT05f
QlJFQUspICQoRU5BQkxFX0NTU19DT01QT1NJVElORykgJChFTkFCTEVfQ1NTX0NPTklDX0dSQURJ
RU5UUykgJChFTkFCTEVfQ1NTX0lNQUdFX1JFU09MVVRJT04pICQoRU5BQkxFX0NTU19QQUlOVElO
R19BUEkpICQoRU5BQkxFX0NTU19TQ1JPTExfU05BUCkgJChFTkFCTEVfQ1NTX1NFTEVDVE9SU19M
RVZFTDQpICQoRU5BQkxFX0NTU19UUkFJTElOR19XT1JEKSAkKEVOQUJMRV9DU1NfVFlQRURfT00p
ICQoRU5BQkxFX0NVUlNPUl9WSVNJQklMSVRZKSAkKEVOQUJMRV9DX0xPT1ApICQoRU5BQkxFX0RB
UktfTU9ERV9DU1MpICQoRU5BQkxFX0RBVEFDVUVfVkFMVUUpICQoRU5BQkxFX0RBVEFMSVNUX0VM
RU1FTlQpICQoRU5BQkxFX0RBVEFfSU5URVJBQ1RJT04pICQoRU5BQkxFX0RFVklDRV9PUklFTlRB
VElPTikgJChFTkFCTEVfRFJBR19TVVBQT1JUKSAkKEVOQUJMRV9FRElUQUJMRV9SRUdJT04pICQo
RU5BQkxFX0VOQ1JZUFRFRF9NRURJQSkgJChFTkFCTEVfRVhQRVJJTUVOVEFMX0ZFQVRVUkVTKSAk
KEVOQUJMRV9GSUxURVJTX0xFVkVMXzIpICQoRU5BQkxFX0ZVTExTQ1JFRU5fQVBJKSAkKEVOQUJM
RV9QSUNUVVJFX0lOX1BJQ1RVUkVfQVBJKSAkKEVOQUJMRV9HQU1FUEFEKSAkKEVOQUJMRV9HRU9M
T0NBVElPTikgJChFTkFCTEVfR1BVX1BST0NFU1MpICQoRU5BQkxFX0lOREVYRURfREFUQUJBU0Up
ICQoRU5BQkxFX0lOREVYRURfREFUQUJBU0VfSU5fV09SS0VSUykgJChFTkFCTEVfSU5QVVRfVFlQ
RV9DT0xPUikgJChFTkFCTEVfSU5QVVRfVFlQRV9EQVRFKSAkKEVOQUJMRV9JTlBVVF9UWVBFX0RB
VEVUSU1FTE9DQUwpICQoRU5BQkxFX0lOUFVUX1RZUEVfREFURVRJTUVfSU5DT01QTEVURSkgJChF
TkFCTEVfSU5QVVRfVFlQRV9NT05USCkgJChFTkFCTEVfSU5QVVRfVFlQRV9USU1FKSAkKEVOQUJM
RV9JTlBVVF9UWVBFX1dFRUspICQoRU5BQkxFX0lOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpICQoRU5BQkxFX0lOU1BFQ1RPUl9URUxFTUVUUlkpICQoRU5BQkxFX0lOVEVSU0VDVElPTl9P
QlNFUlZFUikgJChFTkFCTEVfSU9TX0dFU1RVUkVfRVZFTlRTKSAkKEVOQUJMRV9JT1NfVE9VQ0hf
RVZFTlRTKSAkKEVOQUJMRV9MQVlPVVRfRk9STUFUVElOR19DT05URVhUKSAkKEVOQUJMRV9MRUdB
Q1lfQ1NTX1ZFTkRPUl9QUkVGSVhFUykgJChFTkFCTEVfTEVHQUNZX0NVU1RPTV9QUk9UT0NPTF9N
QU5BR0VSKSAkKEVOQUJMRV9MRUdBQ1lfRU5DUllQVEVEX01FRElBKSAkKEVOQUJMRV9MRVRURVJQ
UkVTUykgJChFTkFCTEVfTUFDX0dFU1RVUkVfRVZFTlRTKSAkKEVOQUJMRV9NQVRITUwpICQoRU5B
QkxFX01FRElBX0NBUFRVUkUpICQoRU5BQkxFX01FRElBX0NPTlRST0xTX1NDUklQVCkgJChFTkFC
TEVfTUVESUFfU0VTU0lPTikgJChFTkFCTEVfTUVESUFfU09VUkNFKSAkKEVOQUJMRV9NRURJQV9T
VEFUSVNUSUNTKSAkKEVOQUJMRV9NRURJQV9TVFJFQU0pICQoRU5BQkxFX01FTU9SWV9TQU1QTEVS
KSAkKEVOQUJMRV9NRVRFUl9FTEVNRU5UKSAkKEVOQUJMRV9NSFRNTCkgJChFTkFCTEVfTU9VU0Vf
Q1VSU09SX1NDQUxFKSAkKEVOQUJMRV9OQVZJR0FUT1JfU1RBTkRBTE9ORSkgJChFTkFCTEVfTkVU
V09SS19DQUNIRV9TUEVDVUxBVElWRV9SRVZBTElEQVRJT04pICQoRU5BQkxFX05FVFdPUktfQ0FD
SEVfU1RBTEVfV0hJTEVfUkVWQUxJREFURSkgJChFTkFCTEVfTk9USUZJQ0FUSU9OUykgJChFTkFC
TEVfT0ZGU0NSRUVOX0NBTlZBUykgJChFTkFCTEVfT1ZFUkZMT1dfU0NST0xMSU5HX1RPVUNIKSAk
KEVOQUJMRV9QQVlNRU5UX1JFUVVFU1QpICQoRU5BQkxFX1BERktJVF9QTFVHSU4pICQoRU5BQkxF
X1BPSU5URVJfTE9DSykgJChFTkFCTEVfUFVCTElDX1NVRkZJWF9MSVNUKSAkKEVOQUJMRV9RVU9U
QSkgJChFTkFCTEVfUkVNT1RFX0lOU1BFQ1RPUikgJChFTkFCTEVfUkVTSVpFX09CU0VSVkVSKSAk
KEVOQUJMRV9SRVNPTFVUSU9OX01FRElBX1FVRVJZKSAkKEVOQUJMRV9SRVNPVVJDRV9MT0FEX1NU
QVRJU1RJQ1MpICQoRU5BQkxFX1JFU09VUkNFX1VTQUdFKSAkKEVOQUJMRV9SVUJCRVJfQkFORElO
RykgJChFTkFCTEVfU0FOREJPWF9FWFRFTlNJT05TKSAkKEVOQUJMRV9TRVJWRVJfUFJFQ09OTkVD
VCkgJChFTkFCTEVfU0VSVklDRV9DT05UUk9MUykgJChFTkFCTEVfU0VSVklDRV9XT1JLRVIpICQo
RU5BQkxFX1NIQVJFQUJMRV9SRVNPVVJDRSkgJChFTkFCTEVfU1BFRUNIX1NZTlRIRVNJUykgJChF
TkFCTEVfU1RSRUFNU19BUEkpICQoRU5BQkxFX1NWR19GT05UUykgJChFTkFCTEVfVEVMRVBIT05F
X05VTUJFUl9ERVRFQ1RJT04pICQoRU5BQkxFX1RFWFRfQVVUT1NJWklORykgJChFTkFCTEVfVE9V
Q0hfRVZFTlRTKSAkKEVOQUJMRV9VU0VSU0VMRUNUX0FMTCkgJChFTkFCTEVfVVNFUl9NRVNTQUdF
X0hBTkRMRVJTKSAkKEVOQUJMRV9WQVJJQVRJT05fRk9OVFMpICQoRU5BQkxFX1ZJREVPKSAkKEVO
QUJMRV9WSURFT19QUkVTRU5UQVRJT05fTU9ERSkgJChFTkFCTEVfVklERU9fVFJBQ0spICQoRU5B
QkxFX1ZJREVPX1VTRVNfRUxFTUVOVF9GVUxMU0NSRUVOKSAkKEVOQUJMRV9XRUJfQVJDSElWRSkg
JChFTkFCTEVfV0VCRFJJVkVSX01PVVNFX0lOVEVSQUNUSU9OUykgJChFTkFCTEVfV0VCRFJJVkVS
X0tFWUJPQVJEX0lOVEVSQUNUSU9OUykgJChFTkFCTEVfV0VCRFJJVkVSX1RPVUNIX0lOVEVSQUNU
SU9OUykgJChFTkFCTEVfV0VCR0wpICQoRU5BQkxFX1dFQkdMMikgJChFTkFCTEVfV0VCR1BVKSAk
KEVOQUJMRV9XRUJYUikgJChFTkFCTEVfV0VCX0FQSV9TVEFUSVNUSUNTKSAkKEVOQUJMRV9XRUJf
QVVESU8pICQoRU5BQkxFX1dFQl9BVVRITikgJChFTkFCTEVfV0VCX0NSWVBUTykgJChFTkFCTEVf
V0VCX1JUQykgJChFTkFCTEVfV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKSAkKEVOQUJMRV9YU0xU
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy1pbnB1
dC54Y2ZpbGVsaXN0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLWlucHV0
LnhjZmlsZWxpc3QKaW5kZXggZmVhNDA0NWRmMzVkOWFkZjA0NmEyZWZkNmM4OGM4ZDhkMDBmYjcz
ZS4uYTY1Y2ZkNWE5MGJjODViYzcwMjUxY2YwZGRmMTQxNDVkZTllY2YwNyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QK
QEAgLTEsNCArMSw1IEBACiAjIFRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQgYnkgdGhlIGdlbmVyYXRl
LXhjZmlsZWxpc3RzIHNjcmlwdC4KKyQoUFJPSkVDVF9ESVIpL0NvbmZpZ3VyYXRpb25zL0ZlYXR1
cmVEZWZpbmVzLnhjY29uZmlnCiAkKFBST0pFQ1RfRElSKS9EZXJpdmVkU291cmNlcy5tYWtlCiAk
KFBST0pFQ1RfRElSKS9LZXl3b3JkTG9va3VwR2VuZXJhdG9yLnB5CiAkKFBST0pFQ1RfRElSKS9T
Y3JpcHRzL1VwZGF0ZUNvbnRlbnRzLnB5CkBAIC04MCw2ICs4MSw3IEBAICQoUFJPSkVDVF9ESVIp
L2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdFNvdXJjZS5qcwogJChQUk9KRUNUX0RJUikvaW5zcGVj
dG9yL3Byb3RvY29sL0FuaW1hdGlvbi5qc29uCiAkKFBST0pFQ1RfRElSKS9pbnNwZWN0b3IvcHJv
dG9jb2wvQXBwbGljYXRpb25DYWNoZS5qc29uCiAkKFBST0pFQ1RfRElSKS9pbnNwZWN0b3IvcHJv
dG9jb2wvQXVkaXQuanNvbgorJChQUk9KRUNUX0RJUikvaW5zcGVjdG9yL3Byb3RvY29sL0Jyb3dz
ZXIuanNvbgogJChQUk9KRUNUX0RJUikvaW5zcGVjdG9yL3Byb3RvY29sL0NQVVByb2ZpbGVyLmpz
b24KICQoUFJPSkVDVF9ESVIpL2luc3BlY3Rvci9wcm90b2NvbC9DU1MuanNvbgogJChQUk9KRUNU
X0RJUikvaW5zcGVjdG9yL3Byb3RvY29sL0NhbnZhcy5qc29uCkBAIC04OSw3ICs5MSw2IEBAICQo
UFJPSkVDVF9ESVIpL2luc3BlY3Rvci9wcm90b2NvbC9ET01EZWJ1Z2dlci5qc29uCiAkKFBST0pF
Q1RfRElSKS9pbnNwZWN0b3IvcHJvdG9jb2wvRE9NU3RvcmFnZS5qc29uCiAkKFBST0pFQ1RfRElS
KS9pbnNwZWN0b3IvcHJvdG9jb2wvRGF0YWJhc2UuanNvbgogJChQUk9KRUNUX0RJUikvaW5zcGVj
dG9yL3Byb3RvY29sL0RlYnVnZ2VyLmpzb24KLSQoUFJPSkVDVF9ESVIpL2luc3BlY3Rvci9wcm90
b2NvbC9Ccm93c2VyLmpzb24KICQoUFJPSkVDVF9ESVIpL2luc3BlY3Rvci9wcm90b2NvbC9HZW5l
cmljVHlwZXMuanNvbgogJChQUk9KRUNUX0RJUikvaW5zcGVjdG9yL3Byb3RvY29sL0hlYXAuanNv
bgogJChQUk9KRUNUX0RJUikvaW5zcGVjdG9yL3Byb3RvY29sL0luZGV4ZWREQi5qc29uCkBAIC0x
MTksNiArMTIwLDcgQEAgJChQUk9KRUNUX0RJUikvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9n
ZW5lcmF0ZV9qc19iYWNrZW5kX2NvbW1hbmRzLnB5CiAkKFBST0pFQ1RfRElSKS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRvci5weQogJChQUk9KRUNUX0RJUikvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5CiAkKFBST0pFQ1RfRElSKS9pbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL21vZGVscy5weQorJChQUk9KRUNUX0RJUikvaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9wcmVwcm9jZXNzLnBsCiAkKFBST0pFQ1RfRElSKS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKICQoUFJPSkVD
VF9ESVIpL3BhcnNlci9LZXl3b3Jkcy50YWJsZQogJChQUk9KRUNUX0RJUikvcnVudGltZS9BcnJh
eUNvbnN0cnVjdG9yLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2
ZWRTb3VyY2VzLm1ha2UgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFr
ZQppbmRleCAwMGQyYTU3YjNlZDJkYzNjMjk5NzQyOTg0ZTUwNTdhYTZhMWMzZWRlLi4yMjRhYWRm
NTY4OTlhMjdhODI3ZDljZDBlOTgzODcyOGUzZDkwODUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvRGVyaXZlZFNvdXJjZXMubWFrZQpAQCAtNDYsNiArNDYsNDUgQEAgZWxzZQogICAgIERFTEVU
RSA9IHJtIC1mCiBlbmRpZgogCitQUkVQUk9DRVNTT1JfREVGSU5FUyA9ICQoRkVBVFVSRV9ERUZJ
TkVTKQorCitGUkFNRVdPUktfRkxBR1MgPSAkKHNoZWxsIGVjaG8gJChCVUlMVF9QUk9EVUNUU19E
SVIpICQoRlJBTUVXT1JLX1NFQVJDSF9QQVRIUykgJChTWVNURU1fRlJBTUVXT1JLX1NFQVJDSF9Q
QVRIUykgfCBwZXJsIC1lICdwcmludCAiLUYgIiAuIGpvaW4oIiAtRiAiLCBzcGxpdCgiICIsIDw+
KSk7JykKK0hFQURFUl9GTEFHUyA9ICQoc2hlbGwgZWNobyAkKEJVSUxUX1BST0RVQ1RTX0RJUikg
JChIRUFERVJfU0VBUkNIX1BBVEhTKSAkKFNZU1RFTV9IRUFERVJfU0VBUkNIX1BBVEhTKSB8IHBl
cmwgLWUgJ3ByaW50ICItSSIgLiBqb2luKCIgLUkiLCBzcGxpdCgiICIsIDw+KSk7JykKKworaWZu
ZXEgKCQoU0RLUk9PVCksKQorICAgIFNES19GTEFHUz0taXN5c3Jvb3QgJChTREtST09UKQorZW5k
aWYKKworaWZlcSAoJChVU0VfTExWTV9UQVJHRVRfVFJJUExFU19GT1JfQ0xBTkcpLFlFUykKKyAg
ICBXS19DVVJSRU5UX0FSQ0g9JCh3b3JkIDEsICQoQVJDSFMpKQorICAgIFRBUkdFVF9UUklQTEVf
RkxBR1M9LXRhcmdldCAkKFdLX0NVUlJFTlRfQVJDSCktJChMTFZNX1RBUkdFVF9UUklQTEVfVkVO
RE9SKS0kKExMVk1fVEFSR0VUX1RSSVBMRV9PU19WRVJTSU9OKSQoTExWTV9UQVJHRVRfVFJJUExF
X1NVRkZJWCkKK2VuZGlmCisKK2lmZXEgKCQoc2hlbGwgJChDQykgLXN0ZD1nbnUrKzF6IC14IGMr
KyAtRSAtUCAtZE0gJChTREtfRkxBR1MpICQoVEFSR0VUX1RSSVBMRV9GTEFHUykgJChGUkFNRVdP
UktfRkxBR1MpICQoSEVBREVSX0ZMQUdTKSAtaW5jbHVkZSAid3RmL1BsYXRmb3JtLmgiIC9kZXYv
bnVsbCB8IGdyZXAgJyBXVEZfUExBVEZPUk1fTUFDICcgfCBjdXQgLWQnICcgLWYzKSwgMSkKKyAg
ICBQUkVQUk9DRVNTT1JfREVGSU5FUyArPSBXVEZfUExBVEZPUk1fTUFDCitlbmRpZgorCitpZmVx
ICgkKHNoZWxsICQoQ0MpIC1zdGQ9Z251KysxeiAteCBjKysgLUUgLVAgLWRNICQoU0RLX0ZMQUdT
KSAkKFRBUkdFVF9UUklQTEVfRkxBR1MpICQoRlJBTUVXT1JLX0ZMQUdTKSAkKEhFQURFUl9GTEFH
UykgLWluY2x1ZGUgInd0Zi9QbGF0Zm9ybS5oIiAvZGV2L251bGwgfCBncmVwICcgV1RGX1BMQVRG
T1JNX0lPU19GQU1JTFkgJyB8IGN1dCAtZCcgJyAtZjMpLCAxKQorICAgIFBSRVBST0NFU1NPUl9E
RUZJTkVTICs9IFdURl9QTEFURk9STV9JT1NfRkFNSUxZCitlbmRpZgorCitpZmVxICgkKHNoZWxs
ICQoQ0MpIC1zdGQ9Z251KysxeiAteCBjKysgLUUgLVAgLWRNICQoU0RLX0ZMQUdTKSAkKFRBUkdF
VF9UUklQTEVfRkxBR1MpICQoRlJBTUVXT1JLX0ZMQUdTKSAkKEhFQURFUl9GTEFHUykgLWluY2x1
ZGUgInd0Zi9QbGF0Zm9ybS5oIiAvZGV2L251bGwgfCBncmVwICcgVVNFX0NGICcgfCBjdXQgLWQn
ICcgLWYzKSwgMSkKKyAgICBQUkVQUk9DRVNTT1JfREVGSU5FUyArPSBVU0VfQ0YKK2VuZGlmCisK
K2lmZXEgKCQoc2hlbGwgJChDQykgLXN0ZD1nbnUrKzF6IC14IGMrKyAtRSAtUCAtZE0gJChTREtf
RkxBR1MpICQoVEFSR0VUX1RSSVBMRV9GTEFHUykgJChGUkFNRVdPUktfRkxBR1MpICQoSEVBREVS
X0ZMQUdTKSAtaW5jbHVkZSAid3RmL1BsYXRmb3JtLmgiIC9kZXYvbnVsbCB8IGdyZXAgSEFWRV9P
U19EQVJLX01PREVfU1VQUE9SVCB8IGN1dCAtZCcgJyAtZjMpLCAxKQorICAgIFBSRVBST0NFU1NP
Ul9ERUZJTkVTICs9IEhBVkVfT1NfREFSS19NT0RFX1NVUFBPUlQKK2Vsc2UKK2VuZGlmCisKK2lm
ZXEgKCQoUExBVEZPUk1fRkVBVFVSRV9ERUZJTkVTKSwpCitpZmVxICgkKE9TKSwgV2luZG93c19O
VCkKK1BMQVRGT1JNX0ZFQVRVUkVfREVGSU5FUyA9ICQoV0VCS0lUX0xJQlJBUklFUykvdG9vbHMv
dnNwcm9wcy9GZWF0dXJlRGVmaW5lcy5wcm9wcworZWxzZQorUExBVEZPUk1fRkVBVFVSRV9ERUZJ
TkVTID0gQ29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25maWcKK2VuZGlmCitlbmRp
ZgorCiAjIC0tLS0tLS0tCiAKIC5QSE9OWSA6IGFsbApAQCAtMjQzLDYgKzI4Miw4IEBAIElOU1BF
Q1RPUl9ET01BSU5TIDo9IFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9j
b2wvQW5pbWF0aW9uLmpzb24gXAogICAgICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9wcm90
b2NvbC9BcHBsaWNhdGlvbkNhY2hlLmpzb24gXAogICAgICQoSmF2YVNjcmlwdENvcmUpL2luc3Bl
Y3Rvci9wcm90b2NvbC9BdWRpdC5qc29uIFwKKyAgICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0
b3IvcHJvdG9jb2wvQnJvd3Nlci5qc29uIFwKKyAgICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0
b3IvcHJvdG9jb2wvQ1BVUHJvZmlsZXIuanNvbiBcCiAgICAgJChKYXZhU2NyaXB0Q29yZSkvaW5z
cGVjdG9yL3Byb3RvY29sL0NTUy5qc29uIFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0
b3IvcHJvdG9jb2wvQ2FudmFzLmpzb24gXAogICAgICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rv
ci9wcm90b2NvbC9Db25zb2xlLmpzb24gXApAQCAtMjUxLDM1ICsyOTIsMjQgQEAgSU5TUEVDVE9S
X0RPTUFJTlMgOj0gXAogICAgICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9wcm90b2NvbC9E
T01TdG9yYWdlLmpzb24gXAogICAgICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9wcm90b2Nv
bC9EYXRhYmFzZS5qc29uIFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9j
b2wvRGVidWdnZXIuanNvbiBcCi0gICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3Rv
Y29sL0Jyb3dzZXIuanNvbiBcCiAgICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3Rv
Y29sL0dlbmVyaWNUeXBlcy5qc29uIFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3Iv
cHJvdG9jb2wvSGVhcC5qc29uIFwKKyAgICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJv
dG9jb2wvSW5kZXhlZERCLmpzb24gXAogICAgICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9w
cm90b2NvbC9JbnNwZWN0b3IuanNvbiBcCiAgICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9y
L3Byb3RvY29sL0xheWVyVHJlZS5qc29uIFwKKyAgICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0
b3IvcHJvdG9jb2wvTWVtb3J5Lmpzb24gXAogICAgICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rv
ci9wcm90b2NvbC9OZXR3b3JrLmpzb24gXAogICAgICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rv
ci9wcm90b2NvbC9QYWdlLmpzb24gXAogICAgICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9w
cm90b2NvbC9SZWNvcmRpbmcuanNvbiBcCiAgICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9y
L3Byb3RvY29sL1J1bnRpbWUuanNvbiBcCiAgICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9y
L3Byb3RvY29sL1NjcmlwdFByb2ZpbGVyLmpzb24gXAogICAgICQoSmF2YVNjcmlwdENvcmUpL2lu
c3BlY3Rvci9wcm90b2NvbC9TZWN1cml0eS5qc29uIFwKKyAgICAkKEphdmFTY3JpcHRDb3JlKS9p
bnNwZWN0b3IvcHJvdG9jb2wvU2VydmljZVdvcmtlci5qc29uIFwKICAgICAkKEphdmFTY3JpcHRD
b3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvVGFyZ2V0Lmpzb24gXAogICAgICQoSmF2YVNjcmlwdENv
cmUpL2luc3BlY3Rvci9wcm90b2NvbC9UaW1lbGluZS5qc29uIFwKICAgICAkKEphdmFTY3JpcHRD
b3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvV29ya2VyLmpzb24gXAogIwogCi1pZmVxICgkKGZpbmRz
dHJpbmcgRU5BQkxFX0lOREVYRURfREFUQUJBU0UsJChGRUFUVVJFX0RFRklORVMpKSwgRU5BQkxF
X0lOREVYRURfREFUQUJBU0UpCi0gICAgSU5TUEVDVE9SX0RPTUFJTlMgOj0gJChJTlNQRUNUT1Jf
RE9NQUlOUykgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3RvY29sL0luZGV4ZWREQi5q
c29uCi1lbmRpZgotCi1pZmVxICgkKGZpbmRzdHJpbmcgRU5BQkxFX1JFU09VUkNFX1VTQUdFLCQo
RkVBVFVSRV9ERUZJTkVTKSksIEVOQUJMRV9SRVNPVVJDRV9VU0FHRSkKLSAgICBJTlNQRUNUT1Jf
RE9NQUlOUyA6PSAkKElOU1BFQ1RPUl9ET01BSU5TKSAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0
b3IvcHJvdG9jb2wvQ1BVUHJvZmlsZXIuanNvbgotICAgIElOU1BFQ1RPUl9ET01BSU5TIDo9ICQo
SU5TUEVDVE9SX0RPTUFJTlMpICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9wcm90b2NvbC9N
ZW1vcnkuanNvbgotZW5kaWYKLQotaWZlcSAoJChmaW5kc3RyaW5nIEVOQUJMRV9TRVJWSUNFX1dP
UktFUiwkKEZFQVRVUkVfREVGSU5FUykpLCBFTkFCTEVfU0VSVklDRV9XT1JLRVIpCi0gICAgSU5T
UEVDVE9SX0RPTUFJTlMgOj0gJChJTlNQRUNUT1JfRE9NQUlOUykgJChKYXZhU2NyaXB0Q29yZSkv
aW5zcGVjdG9yL3Byb3RvY29sL1NlcnZpY2VXb3JrZXIuanNvbgotZW5kaWYKLQogSU5TUEVDVE9S
X0dFTkVSQVRPUl9TQ1JJUFRTID0gXAogCSQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vX19pbml0X18ucHkgXAogCSQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkgXApAQCAtMjk0LDYgKzMy
NCw3IEBAIElOU1BFQ1RPUl9HRU5FUkFUT1JfU0NSSVBUUyA9IFwKIAkkKEphdmFTY3JpcHRDb3Jl
KS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkgXAogCSQo
SmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yLnB5IFwK
IAkkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL21vZGVscy5weSBc
CisJJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9wcmVwcm9jZXNz
LnBsIFwKIAkkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkgXAogCSQoSmF2YVNjcmlwdENvcmVfU0NSSVBUU19E
SVIpL2dlbmVyYXRlLWNvbWJpbmVkLWluc3BlY3Rvci1qc29uLnB5IFwKICMKQEAgLTMwMiw3ICsz
MzMsNiBAQCBJTlNQRUNUT1JfR0VORVJBVE9SX1NDUklQVFMgPSBcCiAjIGdlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weSBhbmQgLi9Db21iaW5lZERvbWFpbnMuanNvbj8KIElO
U1BFQ1RPUl9ESVNQQVRDSEVSX0ZJTEVTID0gXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCBcCi0gICAgaW5zcGVjdG9yL0luc3BlY3RvckJhY2tl
bmRDb21tYW5kcy5qcyBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
cy5jcHAgXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaCBcCiAg
ICAgaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwIFwKQEAgLTMxMiw3
ICszNDIsNyBAQCBJTlNQRUNUT1JfRElTUEFUQ0hFUl9GSUxFUyA9IFwKICMKIElOU1BFQ1RPUl9E
SVNQQVRDSEVSX0ZJTEVTX1BBVFRFUk5TID0gJChzdWJzdCAuLCUsJChJTlNQRUNUT1JfRElTUEFU
Q0hFUl9GSUxFUykpCiAKLWFsbCA6ICQoSU5TUEVDVE9SX0RJU1BBVENIRVJfRklMRVMpCithbGwg
OiAkKElOU1BFQ1RPUl9ESVNQQVRDSEVSX0ZJTEVTKSBpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2Vu
ZENvbW1hbmRzLmpzCiAKICMgVGhlIGNvbWJpbmVkIEpTT04gZmlsZSBkZXBlbmRzIG9uIHRoZSBh
Y3R1YWwgc2V0IG9mIGRvbWFpbnMgYW5kIHRoZWlyIGZpbGUgY29udGVudHMsIHNvIHRoYXQKICMg
YWRkaW5nLCBtb2RpZnlpbmcsIG9yIHJlbW92aW5nIGRvbWFpbnMgd2lsbCB0cmlnZ2VyIHJlZ2Vu
ZXJhdGlvbiBvZiBpbnNwZWN0b3IgZmlsZXMuCkBAIC0zMjgsNiArMzU4LDEyIEBAIENvbWJpbmVk
RG9tYWlucy5qc29uIDogJChKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUikvZ2VuZXJhdGUtY29t
YmluZWQtaW5zcGVjdG9yCiAkKElOU1BFQ1RPUl9ESVNQQVRDSEVSX0ZJTEVTX1BBVFRFUk5TKSA6
IENvbWJpbmVkRG9tYWlucy5qc29uICQoSU5TUEVDVE9SX0dFTkVSQVRPUl9TQ1JJUFRTKQogCSQo
UFlUSE9OKSAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkgLS1mcmFtZXdvcmsgSmF2YVNjcmlwdENvcmUgLS1v
dXRwdXREaXIgaW5zcGVjdG9yIC4vQ29tYmluZWREb21haW5zLmpzb24KIAoraW5zcGVjdG9yL0lu
c3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcyA6IENvbWJpbmVkRG9tYWlucy5qc29uICQoSU5TUEVD
VE9SX0dFTkVSQVRPUl9TQ1JJUFRTKSAkKFBMQVRGT1JNX0ZFQVRVUkVfREVGSU5FUykKKwkkKFBZ
VEhPTikgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5IC0tZnJhbWV3b3JrIFdlYkluc3BlY3RvclVJIC0tb3V0
cHV0RGlyIGluc3BlY3RvciAuL0NvbWJpbmVkRG9tYWlucy5qc29uCisJQGVjaG8gUHJlLXByb2Nl
c3NpbmcgSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLi4uCisJJChQRVJMKSAkKEphdmFTY3JpcHRD
b3JlKS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL3ByZXByb2Nlc3MucGwgLS1pbnB1dCBpbnNw
ZWN0b3IvSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzLmluIC0tZGVmaW5lcyAiJChQUkVQUk9D
RVNTT1JfREVGSU5FUykiIC0tb3V0cHV0IGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kQ29tbWFu
ZHMuanMKKwkkKERFTEVURSkgaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcy5p
bgorCiBJbmplY3RlZFNjcmlwdFNvdXJjZS5oIDogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0U291
cmNlLmpzICQoSmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVIpL2pzbWluLnB5ICQoSmF2YVNjcmlw
dENvcmVfU0NSSVBUU19ESVIpL3h4ZC5wbAogCWVjaG8gIi8vIyBzb3VyY2VVUkw9X19JbmplY3Rl
ZFNjcmlwdF9JbmplY3RlZFNjcmlwdFNvdXJjZS5qcyIgPiAuL0luamVjdGVkU2NyaXB0U291cmNl
Lm1pbi5qcwogCSQoUFlUSE9OKSAkKEphdmFTY3JpcHRDb3JlX1NDUklQVFNfRElSKS9qc21pbi5w
eSA8ICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdFNvdXJjZS5qcyA+
PiAuL0luamVjdGVkU2NyaXB0U291cmNlLm1pbi5qcwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL1NjcmlwdHMvZ2VuZXJhdGUtZGVyaXZlZC1zb3VyY2VzLnNoIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL1NjcmlwdHMvZ2VuZXJhdGUtZGVyaXZlZC1zb3VyY2VzLnNoCmluZGV4IDkz
NjFmNThlYzRmZTJmN2ZjOWFmMmMxMTBiOTQyYTE4OTBlYWEwZmQuLjI0MTQ3NjU0MzFkOWJiNWQ0
MWNlNDg0MDU5YjlmOTU1OTRkZWVhNzAgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9TY3JpcHRzL2dlbmVyYXRlLWRlcml2ZWQtc291cmNlcy5zaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvU2NyaXB0cy9nZW5lcmF0ZS1kZXJpdmVkLXNvdXJjZXMuc2gKQEAgLTExLDQgKzEx
LDggQEAgY2QgIiR7QlVJTFRfUFJPRFVDVFNfRElSfS9EZXJpdmVkU291cmNlcy9KYXZhU2NyaXB0
Q29yZSIKIGV4cG9ydCBKYXZhU2NyaXB0Q29yZT0iSmF2YVNjcmlwdENvcmUiCiBleHBvcnQgQlVJ
TFRfUFJPRFVDVFNfRElSPSIuLi8uLiIKIAoraWYgWyAhICRDQyBdOyB0aGVuCisgICAgZXhwb3J0
IENDPSJgeGNydW4gLWZpbmQgY2xhbmdgIgorZmkKKwogbWFrZSAtLW5vLWJ1aWx0aW4tcnVsZXMg
LWYgIkphdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UiIC1qIGAvdXNyL3NiaW4vc3lz
Y3RsIC1uIGh3Lm5jcHVgICIke0FSR1NbQF19IgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9DUFVQcm9maWxlci5qc29uIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9DUFVQcm9maWxlci5qc29uCmluZGV4IGNmYWNk
MDFkYjczMGI2YzRjNjFkYTFkNGRmNWRjODZmM2IzOGVjMGMuLmFkYzZjNmFmZWQ3MjBlZTJlMWVh
ZjBlZWZkMWY2MzM2NjljZmI2NTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvcHJvdG9jb2wvQ1BVUHJvZmlsZXIuanNvbgorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL0NQVVByb2ZpbGVyLmpzb24KQEAgLTEsNyArMSw3IEBA
CiB7CiAgICAgImRvbWFpbiI6ICJDUFVQcm9maWxlciIsCiAgICAgImRlc2NyaXB0aW9uIjogIkNQ
VVByb2ZpbGVyIGRvbWFpbiBleHBvc2VzIGNwdSB1c2FnZSB0cmFja2luZy4iLAotICAgICJmZWF0
dXJlR3VhcmQiOiAiRU5BQkxFKFJFU09VUkNFX1VTQUdFKSIsCisgICAgImNvbmRpdGlvbiI6ICJk
ZWZpbmVkKEVOQUJMRV9SRVNPVVJDRV9VU0FHRSkgJiYgRU5BQkxFX1JFU09VUkNFX1VTQUdFIiwK
ICAgICAiZGVidWdnYWJsZVR5cGVzIjogWyJwYWdlIiwgIndlYi1wYWdlIl0sCiAgICAgInRhcmdl
dFR5cGVzIjogWyJwYWdlIl0sCiAgICAgInR5cGVzIjogWwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9DYW52YXMuanNvbiBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvQ2FudmFzLmpzb24KaW5kZXggYWI1NDQ0MGYw
NGFmMTAzNTUzMDM5YTNkZmE3NDg3YTNmYjIyZGYyZS4uMDhjMTAwNTE3NmE5NjBlNzM0MWQ0MGE5
ZDc1MjVmYTY1MWIzNGJmZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9wcm90b2NvbC9DYW52YXMuanNvbgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3Byb3RvY29sL0NhbnZhcy5qc29uCkBAIC0xMSw2ICsxMSw3IEBACiAgICAgICAgIH0s
CiAgICAgICAgIHsKICAgICAgICAgICAgICJpZCI6ICJQcm9ncmFtSWQiLAorICAgICAgICAgICAg
ImNvbmRpdGlvbiI6ICIoZGVmaW5lZChFTkFCTEVfV0VCR0wpICYmIEVOQUJMRV9XRUJHTCkgfHwg
KGRlZmluZWQoRU5BQkxFX1dFQkdQVSkgJiYgRU5BQkxFX1dFQkdQVSkiLAogICAgICAgICAgICAg
InR5cGUiOiAic3RyaW5nIiwKICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgc2hh
ZGVyIHByb2dyYW0gaWRlbnRpZmllci4iCiAgICAgICAgIH0sCkBAIC0yMiwxMSArMjMsMTMgQEAK
ICAgICAgICAgfSwKICAgICAgICAgewogICAgICAgICAgICAgImlkIjogIlByb2dyYW1UeXBlIiwK
KyAgICAgICAgICAgICJjb25kaXRpb24iOiAiKGRlZmluZWQoRU5BQkxFX1dFQkdMKSAmJiBFTkFC
TEVfV0VCR0wpIHx8IChkZWZpbmVkKEVOQUJMRV9XRUJHUFUpICYmIEVOQUJMRV9XRUJHUFUpIiwK
ICAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCiAgICAgICAgICAgICAiZW51bSI6IFsiY29t
cHV0ZSIsICJyZW5kZXIiXQogICAgICAgICB9LAogICAgICAgICB7CiAgICAgICAgICAgICAiaWQi
OiAiU2hhZGVyVHlwZSIsCisgICAgICAgICAgICAiY29uZGl0aW9uIjogIihkZWZpbmVkKEVOQUJM
RV9XRUJHTCkgJiYgRU5BQkxFX1dFQkdMKSB8fCAoZGVmaW5lZChFTkFCTEVfV0VCR1BVKSAmJiBF
TkFCTEVfV0VCR1BVKSIsCiAgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAogICAgICAgICAg
ICAgImVudW0iOiBbImNvbXB1dGUiLCAiZnJhZ21lbnQiLCAidmVydGV4Il0KICAgICAgICAgfSwK
QEAgLTYxLDggKzY0LDkgQEAKICAgICAgICAgfSwKICAgICAgICAgewogICAgICAgICAgICAgImlk
IjogIlNoYWRlclByb2dyYW0iLAotICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKICAgICAg
ICAgICAgICJkZXNjcmlwdGlvbiI6ICJJbmZvcm1hdGlvbiBhYm91dCBhIFdlYkdML1dlYkdMMiBz
aGFkZXIgcHJvZ3JhbSBvciBXZWJHUFUgc2hhZGVyIHBpcGVsaW5lLiIsCisgICAgICAgICAgICAi
Y29uZGl0aW9uIjogIihkZWZpbmVkKEVOQUJMRV9XRUJHTCkgJiYgRU5BQkxFX1dFQkdMKSB8fCAo
ZGVmaW5lZChFTkFCTEVfV0VCR1BVKSAmJiBFTkFCTEVfV0VCR1BVKSIsCisgICAgICAgICAgICAi
dHlwZSI6ICJvYmplY3QiLAogICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCiAgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJwcm9ncmFtSWQiLCAiJHJlZiI6ICJQcm9ncmFtSWQiIH0sCiAgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJwcm9ncmFtVHlwZSIsICIkcmVmIjogIlByb2dyYW1UeXBl
IiB9LApAQCAtMTQ3LDYgKzE1MSw3IEBACiAgICAgICAgIHsKICAgICAgICAgICAgICJuYW1lIjog
InJlcXVlc3RTaGFkZXJTb3VyY2UiLAogICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlJlcXVl
c3RzIHRoZSBzb3VyY2Ugb2YgdGhlIHNoYWRlciBvZiB0aGUgZ2l2ZW4gdHlwZSBmcm9tIHRoZSBw
cm9ncmFtIHdpdGggdGhlIGdpdmVuIGlkLiIsCisgICAgICAgICAgICAiY29uZGl0aW9uIjogIihk
ZWZpbmVkKEVOQUJMRV9XRUJHTCkgJiYgRU5BQkxFX1dFQkdMKSB8fCAoZGVmaW5lZChFTkFCTEVf
V0VCR1BVKSAmJiBFTkFCTEVfV0VCR1BVKSIsCiAgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsK
ICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInByb2dyYW1JZCIsICIkcmVmIjogIlByb2dyYW1J
ZCIgfSwKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNoYWRlclR5cGUiLCAiJHJlZiI6ICJT
aGFkZXJUeXBlIiB9CkBAIC0xNTgsNiArMTYzLDcgQEAKICAgICAgICAgewogICAgICAgICAgICAg
Im5hbWUiOiAidXBkYXRlU2hhZGVyIiwKICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJDb21w
aWxlcyBhbmQgbGlua3MgdGhlIHNoYWRlciB3aXRoIGlkZW50aWZpZXIgYW5kIHR5cGUgd2l0aCB0
aGUgZ2l2ZW4gc291cmNlIGNvZGUuIiwKKyAgICAgICAgICAgICJjb25kaXRpb24iOiAiKGRlZmlu
ZWQoRU5BQkxFX1dFQkdMKSAmJiBFTkFCTEVfV0VCR0wpIHx8IChkZWZpbmVkKEVOQUJMRV9XRUJH
UFUpICYmIEVOQUJMRV9XRUJHUFUpIiwKICAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwogICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJvZ3JhbUlkIiwgIiRyZWYiOiAiUHJvZ3JhbUlkIiB9
LAogICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2hhZGVyVHlwZSIsICIkcmVmIjogIlNoYWRl
clR5cGUiIH0sCkBAIC0xNjcsNiArMTczLDcgQEAKICAgICAgICAgewogICAgICAgICAgICAgIm5h
bWUiOiAic2V0U2hhZGVyUHJvZ3JhbURpc2FibGVkIiwKICAgICAgICAgICAgICJkZXNjcmlwdGlv
biI6ICJFbmFibGUvZGlzYWJsZSB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgZ2l2ZW4gc2hhZGVyIHBy
b2dyYW0uIiwKKyAgICAgICAgICAgICJjb25kaXRpb24iOiAiZGVmaW5lZChFTkFCTEVfV0VCR0wp
ICYmIEVOQUJMRV9XRUJHTCIsCiAgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKICAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInByb2dyYW1JZCIsICIkcmVmIjogIlByb2dyYW1JZCIgfSwKICAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogImRpc2FibGVkIiwgInR5cGUiOiAiYm9vbGVhbiIgfQpA
QCAtMTc1LDYgKzE4Miw3IEBACiAgICAgICAgIHsKICAgICAgICAgICAgICJuYW1lIjogInNldFNo
YWRlclByb2dyYW1IaWdobGlnaHRlZCIsCiAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRW5h
YmxlL2Rpc2FibGUgaGlnaGxpZ2h0aW5nIG9mIHRoZSBnaXZlbiBzaGFkZXIgcHJvZ3JhbS4iLAor
ICAgICAgICAgICAgImNvbmRpdGlvbiI6ICJkZWZpbmVkKEVOQUJMRV9XRUJHTCkgJiYgRU5BQkxF
X1dFQkdMIiwKICAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwogICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAicHJvZ3JhbUlkIiwgIiRyZWYiOiAiUHJvZ3JhbUlkIiB9LAogICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAiaGlnaGxpZ2h0ZWQiLCAidHlwZSI6ICJib29sZWFuIiB9CkBAIC0yMzgs
MTIgKzI0NiwxNCBAQAogICAgICAgICB9LAogICAgICAgICB7CiAgICAgICAgICAgICAibmFtZSI6
ICJwcm9ncmFtQ3JlYXRlZCIsCisgICAgICAgICAgICAiY29uZGl0aW9uIjogIihkZWZpbmVkKEVO
QUJMRV9XRUJHTCkgJiYgRU5BQkxFX1dFQkdMKSB8fCAoZGVmaW5lZChFTkFCTEVfV0VCR1BVKSAm
JiBFTkFCTEVfV0VCR1BVKSIsCiAgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKICAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInNoYWRlclByb2dyYW0iLCAiJHJlZiI6ICJTaGFkZXJQcm9ncmFt
IiB9CiAgICAgICAgICAgICBdCiAgICAgICAgIH0sCiAgICAgICAgIHsKICAgICAgICAgICAgICJu
YW1lIjogInByb2dyYW1EZWxldGVkIiwKKyAgICAgICAgICAgICJjb25kaXRpb24iOiAiKGRlZmlu
ZWQoRU5BQkxFX1dFQkdMKSAmJiBFTkFCTEVfV0VCR0wpIHx8IChkZWZpbmVkKEVOQUJMRV9XRUJH
UFUpICYmIEVOQUJMRV9XRUJHUFUpIiwKICAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwogICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJvZ3JhbUlkIiwgIiRyZWYiOiAiUHJvZ3JhbUlkIiB9
CiAgICAgICAgICAgICBdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3Byb3RvY29sL0RPTS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9w
cm90b2NvbC9ET00uanNvbgppbmRleCAzOGNiNDhiZWRmMmIxNjgxNDlmZjc5NDIzYjdmYWZjMWU2
M2NlOGIzLi4zMjliMzI1MDZjOGM2YjA0MWFhNWNlNGUwYjYxYTY3MjM0ZTdiMjgwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL0RPTS5qc29uCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvRE9NLmpzb24KQEAg
LTM5OSw2ICszOTksMTYgQEAKICAgICAgICAgewogICAgICAgICAgICAgIm5hbWUiOiAic2V0SW5z
cGVjdE1vZGVFbmFibGVkIiwKICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJFbnRlcnMgdGhl
ICdpbnNwZWN0JyBtb2RlLiBJbiB0aGlzIG1vZGUsIGVsZW1lbnRzIHRoYXQgdXNlciBpcyBob3Zl
cmluZyBvdmVyIGFyZSBoaWdobGlnaHRlZC4gQmFja2VuZCB0aGVuIGdlbmVyYXRlcyAnaW5zcGVj
dCcgY29tbWFuZCB1cG9uIGVsZW1lbnQgc2VsZWN0aW9uLiIsCisgICAgICAgICAgICAiY29uZGl0
aW9uIjogImRlZmluZWQoV1RGX1BMQVRGT1JNX0lPU19GQU1JTFkpICYmIFdURl9QTEFURk9STV9J
T1NfRkFNSUxZIiwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAiZW5hYmxlZCIsICJ0eXBlIjogImJvb2xlYW4iLCAiZGVzY3JpcHRpb24iOiAi
VHJ1ZSB0byBlbmFibGUgaW5zcGVjdGlvbiBtb2RlLCBmYWxzZSB0byBkaXNhYmxlIGl0LiIgfSwK
KyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImhpZ2hsaWdodENvbmZpZyIsICIkcmVmIjogIkhp
Z2hsaWdodENvbmZpZyIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJBIGRlc2Ny
aXB0b3IgZm9yIHRoZSBoaWdobGlnaHQgYXBwZWFyYW5jZSBvZiBob3ZlcmVkLW92ZXIgbm9kZXMu
IE1heSBiZSBvbWl0dGVkIGlmIDxjb2RlPmVuYWJsZWQgPT0gZmFsc2U8L2NvZGU+LiIgfQorICAg
ICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJz
ZXRJbnNwZWN0TW9kZUVuYWJsZWQiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkVudGVy
cyB0aGUgJ2luc3BlY3QnIG1vZGUuIEluIHRoaXMgbW9kZSwgZWxlbWVudHMgdGhhdCB1c2VyIGlz
IGhvdmVyaW5nIG92ZXIgYXJlIGhpZ2hsaWdodGVkLiBCYWNrZW5kIHRoZW4gZ2VuZXJhdGVzICdp
bnNwZWN0JyBjb21tYW5kIHVwb24gZWxlbWVudCBzZWxlY3Rpb24uIiwKKyAgICAgICAgICAgICJj
b25kaXRpb24iOiAiIShkZWZpbmVkKFdURl9QTEFURk9STV9JT1NfRkFNSUxZKSAmJiBXVEZfUExB
VEZPUk1fSU9TX0ZBTUlMWSkiLAogICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCiAgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJlbmFibGVkIiwgInR5cGUiOiAiYm9vbGVhbiIsICJkZXNjcmlw
dGlvbiI6ICJUcnVlIHRvIGVuYWJsZSBpbnNwZWN0aW9uIG1vZGUsIGZhbHNlIHRvIGRpc2FibGUg
aXQuIiB9LAogICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiaGlnaGxpZ2h0Q29uZmlnIiwgIiRy
ZWYiOiAiSGlnaGxpZ2h0Q29uZmlnIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjog
IkEgZGVzY3JpcHRvciBmb3IgdGhlIGhpZ2hsaWdodCBhcHBlYXJhbmNlIG9mIGhvdmVyZWQtb3Zl
ciBub2Rlcy4gTWF5IGJlIG9taXR0ZWQgaWYgPGNvZGU+ZW5hYmxlZCA9PSBmYWxzZTwvY29kZT4u
IiB9LApAQCAtNjg4LDYgKzY5OCw3IEBACiAgICAgICAgIHsKICAgICAgICAgICAgICJuYW1lIjog
InBvd2VyRWZmaWNpZW50UGxheWJhY2tTdGF0ZUNoYW5nZWQiLAogICAgICAgICAgICAgImRlc2Ny
aXB0aW9uIjogIkNhbGxlZCB3aGVuIGFuIGVsZW1lbnQgZW50ZXJzL2V4aXRzIGEgcG93ZXIgZWZm
aWNpZW50IHBsYXliYWNrIHN0YXRlLiIsCisgICAgICAgICAgICAiY29uZGl0aW9uIjogImRlZmlu
ZWQoRU5BQkxFX1ZJREVPKSAmJiBFTkFCTEVfVklERU8iLAogICAgICAgICAgICAgInBhcmFtZXRl
cnMiOiBbCiAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub2RlSWQiLCAiJHJlZiI6ICJOb2Rl
SWQiIH0sCiAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAiJHJlZiI6ICJO
ZXR3b3JrLlRpbWVzdGFtcCIgfSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvcHJvdG9jb2wvSW5kZXhlZERCLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3Byb3RvY29sL0luZGV4ZWREQi5qc29uCmluZGV4IDlkMjMwMDg5MzA3MTVhZjhl
NGQzMGQwNzQ2YjY1ZmU5Mjc0MGI2OGQuLjk3MWU3MDI3YjAzY2YzYjlkNDM4ODE1OGY3ZjExMGU0
M2VmN2FjOTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJv
dG9jb2wvSW5kZXhlZERCLmpzb24KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9wcm90b2NvbC9JbmRleGVkREIuanNvbgpAQCAtMSw2ICsxLDYgQEAKIHsKICAgICAiZG9tYWlu
IjogIkluZGV4ZWREQiIsCi0gICAgImZlYXR1cmVHdWFyZCI6ICJFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkiLAorICAgICJjb25kaXRpb24iOiAiZGVmaW5lZChFTkFCTEVfSU5ERVhFRF9EQVRBQkFT
RSkgJiYgRU5BQkxFX0lOREVYRURfREFUQUJBU0UiLAogICAgICJkZWJ1Z2dhYmxlVHlwZXMiOiBb
InBhZ2UiLCAid2ViLXBhZ2UiXSwKICAgICAidGFyZ2V0VHlwZXMiOiBbInBhZ2UiXSwKICAgICAi
dHlwZXMiOiBbCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3By
b3RvY29sL0luc3BlY3Rvci5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9w
cm90b2NvbC9JbnNwZWN0b3IuanNvbgppbmRleCAyYmI4ZDYyODU1YTY4ODY2NjQxOGU4NWVkYzNj
NGRhM2Y2NmNiMzFjLi43YWUyZTk5MzFmMWJjODZjOWNmZTgxMzQzZjNmYjZhZWZiNjYxNDA1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL0luc3Bl
Y3Rvci5qc29uCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wv
SW5zcGVjdG9yLmpzb24KQEAgLTMzLDYgKzMzLDcgQEAKICAgICAgICAgewogICAgICAgICAgICAg
Im5hbWUiOiAiYWN0aXZhdGVFeHRyYURvbWFpbnMiLAogICAgICAgICAgICAgImRlc2NyaXB0aW9u
IjogIkZpcmVkIHdoZW4gdGhlIGJhY2tlbmQgaGFzIGFsdGVybmF0ZSBkb21haW5zIHRoYXQgbmVl
ZCB0byBiZSBhY3RpdmF0ZWQuIiwKKyAgICAgICAgICAgICJjb25kaXRpb24iOiAiZGVmaW5lZChF
TkFCTEVfSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykgJiYgRU5BQkxFX0lOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMiLAogICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCiAg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkb21haW5zIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRl
bXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSwgImRlc2NyaXB0aW9uIjogIkRvbWFpbiBuYW1lcyB0
aGF0IG5lZWQgYWN0aXZhdGlvbiIgfQogICAgICAgICAgICAgXQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9NZW1vcnkuanNvbiBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvTWVtb3J5Lmpzb24KaW5kZXggMGMzZDkx
NDM4NzE5YWU5ZjhhYTRlZDY1ZGM5M2M3NTViYzRkYzU1My4uOGJlYWE0MDMwNDA4MTRjMGI4OWQ2
N2U0ZWE5OTYyODY0M2MwYzU3ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9wcm90b2NvbC9NZW1vcnkuanNvbgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3Byb3RvY29sL01lbW9yeS5qc29uCkBAIC0xLDcgKzEsNyBAQAogewogICAgICJk
b21haW4iOiAiTWVtb3J5IiwKICAgICAiZGVzY3JpcHRpb24iOiAiTWVtb3J5IGRvbWFpbiBleHBv
c2VzIHBhZ2UgbWVtb3J5IHRyYWNraW5nLiIsCi0gICAgImZlYXR1cmVHdWFyZCI6ICJFTkFCTEUo
UkVTT1VSQ0VfVVNBR0UpIiwKKyAgICAiY29uZGl0aW9uIjogImRlZmluZWQoRU5BQkxFX1JFU09V
UkNFX1VTQUdFKSAmJiBFTkFCTEVfUkVTT1VSQ0VfVVNBR0UiLAogICAgICJkZWJ1Z2dhYmxlVHlw
ZXMiOiBbInBhZ2UiLCAid2ViLXBhZ2UiXSwKICAgICAidGFyZ2V0VHlwZXMiOiBbInBhZ2UiXSwK
ICAgICAidHlwZXMiOiBbCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3Byb3RvY29sL1BhZ2UuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
cHJvdG9jb2wvUGFnZS5qc29uCmluZGV4IGQyNzUxMmE0ZjAwNzc5YjhmMTE3MTk5OTk1M2ZkYzc2
MTA3YTk4MTUuLjRmNzA5NzcxZGMzZDA2MTFmZmZjOTU5MjFlMzhiMjA2NDlhZWJkOWMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvUGFnZS5qc29u
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvUGFnZS5qc29u
CkBAIC00NSw2ICs0NSw3IEBACiAgICAgICAgIHsKICAgICAgICAgICAgICJpZCI6ICJBcHBlYXJh
bmNlIiwKICAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAiY29uZGl0
aW9uIjogIihkZWZpbmVkKEVOQUJMRV9EQVJLX01PREVfQ1NTKSAmJiBFTkFCTEVfREFSS19NT0RF
X0NTUykgfHwgKGRlZmluZWQoSEFWRV9PU19EQVJLX01PREVfU1VQUE9SVCkgJiYgSEFWRV9PU19E
QVJLX01PREVfU1VQUE9SVCkiLAogICAgICAgICAgICAgImVudW0iOiBbIkxpZ2h0IiwgIkRhcmsi
XSwKICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJQYWdlIGFwcGVhcmFuY2UgbmFtZS4iCiAg
ICAgICAgIH0sCkBAIC0yMjksNiArMjMwLDcgQEAKICAgICAgICAgewogICAgICAgICAgICAgIm5h
bWUiOiAic2V0U2hvd1J1bGVycyIsCiAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiUmVxdWVz
dHMgdGhhdCBiYWNrZW5kIGRyYXcgcnVsZXJzIGluIHRoZSBpbnNwZWN0b3Igb3ZlcmxheSIsCisg
ICAgICAgICAgICAiY29uZGl0aW9uIjogIiEoZGVmaW5lZChXVEZfUExBVEZPUk1fSU9TX0ZBTUlM
WSkgJiYgV1RGX1BMQVRGT1JNX0lPU19GQU1JTFkpIiwKICAgICAgICAgICAgICJwYXJhbWV0ZXJz
IjogWwogICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicmVzdWx0IiwgInR5cGUiOiAiYm9vbGVh
biIsICJkZXNjcmlwdGlvbiI6ICJUcnVlIGZvciBzaG93aW5nIHJ1bGVycyIgfQogICAgICAgICAg
ICAgXQpAQCAtMjUwLDYgKzI1Miw3IEBACiAgICAgICAgIHsKICAgICAgICAgICAgICJuYW1lIjog
InNldEZvcmNlZEFwcGVhcmFuY2UiLAogICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkZvcmNl
cyB0aGUgZ2l2ZW4gYXBwZWFyYW5jZSBmb3IgdGhlIHBhZ2UuIiwKKyAgICAgICAgICAgICJjb25k
aXRpb24iOiAiKGRlZmluZWQoRU5BQkxFX0RBUktfTU9ERV9DU1MpICYmIEVOQUJMRV9EQVJLX01P
REVfQ1NTKSB8fCAoZGVmaW5lZChIQVZFX09TX0RBUktfTU9ERV9TVVBQT1JUKSAmJiBIQVZFX09T
X0RBUktfTU9ERV9TVVBQT1JUKSIsCiAgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKICAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogImFwcGVhcmFuY2UiLCAiJHJlZiI6ICJBcHBlYXJhbmNlIiwg
ImRlc2NyaXB0aW9uIjogIkFwcGVhcmFuY2UgbmFtZSB0byBmb3JjZS4gRW1wdHkgc3RyaW5nIGRp
c2FibGVzIHRoZSBvdmVycmlkZS4iIH0KICAgICAgICAgICAgIF0KQEAgLTI4MSw2ICsyODQsNyBA
QAogICAgICAgICB7CiAgICAgICAgICAgICAibmFtZSI6ICJhcmNoaXZlIiwKICAgICAgICAgICAg
ICJkZXNjcmlwdGlvbiI6ICJHcmFiIGFuIGFyY2hpdmUgb2YgdGhlIHBhZ2UuIiwKKyAgICAgICAg
ICAgICJjb25kaXRpb24iOiAiKGRlZmluZWQoRU5BQkxFX1dFQl9BUkNISVZFKSAmJiBFTkFCTEVf
V0VCX0FSQ0hJVkUpICYmIChkZWZpbmVkKFVTRV9DRikgJiYgVVNFX0NGKSIsCiAgICAgICAgICAg
ICAicmV0dXJucyI6IFsKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRhdGEiLCAidHlwZSI6
ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiQmFzZTY0LWVuY29kZWQgd2ViIGFyY2hpdmUuIiB9
CiAgICAgICAgICAgICBdCkBAIC0zNDUsNiArMzQ5LDcgQEAKICAgICAgICAgewogICAgICAgICAg
ICAgIm5hbWUiOiAiZGVmYXVsdEFwcGVhcmFuY2VEaWRDaGFuZ2UiLAogICAgICAgICAgICAgImRl
c2NyaXB0aW9uIjogIkZpcmVkIHdoZW4gcGFnZSdzIGRlZmF1bHQgYXBwZWFyYW5jZSBjaGFuZ2Vz
LCBldmVuIGlmIHRoZXJlIGlzIGEgZm9yY2VkIGFwcGVhcmFuY2UuIiwKKyAgICAgICAgICAgICJj
b25kaXRpb24iOiAiKGRlZmluZWQoRU5BQkxFX0RBUktfTU9ERV9DU1MpICYmIEVOQUJMRV9EQVJL
X01PREVfQ1NTKSB8fCAoZGVmaW5lZChIQVZFX09TX0RBUktfTU9ERV9TVVBQT1JUKSAmJiBIQVZF
X09TX0RBUktfTU9ERV9TVVBQT1JUKSIsCiAgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKICAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogImFwcGVhcmFuY2UiLCAiJHJlZiI6ICJBcHBlYXJhbmNl
IiwgImRlc2NyaXB0aW9uIjogIk5hbWUgb2YgdGhlIGFwcGVhcmFuY2UgdGhhdCBpcyBhY3RpdmUg
KG5vdCBjb25zaWRlcmluZyBhbnkgZm9yY2VkIGFwcGVhcmFuY2UuKSIgfQogICAgICAgICAgICAg
XQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9T
ZXJ2aWNlV29ya2VyLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3Rv
Y29sL1NlcnZpY2VXb3JrZXIuanNvbgppbmRleCA4YWMzZDRmN2Q2YjIyMGE5NGQyZjE0ZmI3YjYy
OGVhN2E1ZjgyNDA1Li5kMDMzMWJlMTcwZWI4NDczYjFiN2Y2MjU3NjEwNDE5Y2MwMDYxYjgwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL1NlcnZp
Y2VXb3JrZXIuanNvbgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3Rv
Y29sL1NlcnZpY2VXb3JrZXIuanNvbgpAQCAtMSw2ICsxLDcgQEAKIHsKICAgICAiZG9tYWluIjog
IlNlcnZpY2VXb3JrZXIiLAogICAgICJkZXNjcmlwdGlvbiI6ICJBY3Rpb25zIGFuZCBldmVudHMg
cmVsYXRlZCB0byB0aGUgaW5zcGVjdGVkIHNlcnZpY2Ugd29ya2VyLiIsCisgICAgImNvbmRpdGlv
biI6ICJkZWZpbmVkKEVOQUJMRV9TRVJWSUNFX1dPUktFUikgJiYgRU5BQkxFX1NFUlZJQ0VfV09S
S0VSIiwKICAgICAiZGVidWdnYWJsZVR5cGVzIjogWyJzZXJ2aWNlLXdvcmtlciJdLAogICAgICJ0
YXJnZXRUeXBlcyI6IFsic2VydmljZS13b3JrZXIiXSwKICAgICAidHlwZXMiOiBbCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9jcHBf
Z2VuZXJhdG9yX3RlbXBsYXRlcy5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5CmluZGV4IDk2YjU1ZTQx
NjJjNjY4MDQ5Y2FhNjQ3MzZiNjQxOWFmNDQ1Njg4ZGIuLmQwYzdiZTZkNDkxNjhjYTY5MzUzZWRj
NDJmM2IyYjVmMjM0ZDNjZTggMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5CisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0
b3JfdGVtcGxhdGVzLnB5CkBAIC0xMDgsNyArMTA4LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0
QWx0ZXJuYXRlRGlzcGF0Y2hlcihBbHRlcm5hdGUke2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNo
ZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJu
YXRlRGlzcGF0Y2hlcjsgfQogcHJpdmF0ZToKICAgICBBbHRlcm5hdGUke2RvbWFpbk5hbWV9QmFj
a2VuZERpc3BhdGNoZXIqIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciB7IG51bGxwdHIgfTsKLSNlbmRp
ZiIiIikKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUyki
IiIpCiAKICAgICBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckFzeW5jQ29tbWFuZERlY2xhcmF0aW9u
ID0gKAogICAgICIiIiAgICAke2NsYXNzQW5kRXhwb3J0TWFjcm99ICR7Y2FsbGJhY2tOYW1lfSA6
IHB1YmxpYyBCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlIHsKQEAgLTEyNyw4ICsxMjcs
OCBAQCBwcml2YXRlOgogICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0
ZXJzKTsKIAogJHtkaXNwYXRjaENhc2VzfQotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90
Rm91bmQsICInJHtkb21haW5OYW1lfS4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOwor
CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlz
cGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInJHtkb21haW5OYW1lfS4iICsgbWV0aG9kICsgIicg
d2FzIG5vdCBmb3VuZCIpOwogfSIiIikKIAogICAgIEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50
YXRpb25MYXJnZVN3aXRjaCA9ICgKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9hbHRlcm5hdGVfYmFja2VuZF9k
aXNwYXRjaGVyX2hlYWRlci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9hbHRlcm5hdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hl
YWRlci5weQppbmRleCBlNjI3ODgwZTEzM2UyMTE0OTU3MGZjNjdkOTc1OTk2YzRhOTU5YzRkLi5l
MWE2NjFiYTM3OWNkZWE0MDY0YzZmNzdjNGVmY2IxMTYyYWNlZmMwIDEwMDc1NQotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBf
YWx0ZXJuYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2FsdGVybmF0
ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CkBAIC01Niw3ICs1Niw3IEBAIGNsYXNzIENw
cEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6
CiAgICAgICAgIHNlY3Rpb25zID0gW10KICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2Vu
ZXJhdGVfbGljZW5zZSgpKQogICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoQ3BwVGVt
cGxhdGVzLkFsdGVybmF0ZURpc3BhdGNoZXJzSGVhZGVyUHJlbHVkZSkuc3Vic3RpdHV0ZShOb25l
LCAqKnRlbXBsYXRlX2FyZ3MpKQotICAgICAgICBzZWN0aW9ucy5hcHBlbmQoJ1xuJy5qb2luKFtf
ZiBmb3IgX2YgaW4gbWFwKHNlbGYuX2dlbmVyYXRlX2hhbmRsZXJfZGVjbGFyYXRpb25zX2Zvcl9k
b21haW4sIGRvbWFpbnMpIGlmIF9mXSkpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZCgnXG5cbicu
am9pbihbX2YgZm9yIF9mIGluIG1hcChzZWxmLl9nZW5lcmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9u
c19mb3JfZG9tYWluLCBkb21haW5zKSBpZiBfZl0pKQogICAgICAgICBzZWN0aW9ucy5hcHBlbmQo
VGVtcGxhdGUoQ3BwVGVtcGxhdGVzLkFsdGVybmF0ZURpc3BhdGNoZXJzSGVhZGVyUG9zdGx1ZGUp
LnN1YnN0aXR1dGUoTm9uZSwgKip0ZW1wbGF0ZV9hcmdzKSkKICAgICAgICAgcmV0dXJuICdcblxu
Jy5qb2luKHNlY3Rpb25zKQogCkBAIC04Nyw3ICs4Nyw3IEBAIGNsYXNzIENwcEFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgICAg
ICAnY29tbWFuZERlY2xhcmF0aW9ucyc6ICdcbicuam9pbihjb21tYW5kX2RlY2xhcmF0aW9ucyks
CiAgICAgICAgIH0KIAotICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2Rv
bWFpbihkb21haW4sIFRlbXBsYXRlKENwcFRlbXBsYXRlcy5BbHRlcm5hdGVCYWNrZW5kRGlzcGF0
Y2hlckhlYWRlckRvbWFpbkhhbmRsZXJJbnRlcmZhY2VEZWNsYXJhdGlvbikuc3Vic3RpdHV0ZShO
b25lLCAqKmhhbmRsZXJfYXJncykpCisgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFy
ZF9mb3JfY29uZGl0aW9uKGRvbWFpbi5jb25kaXRpb24sIFRlbXBsYXRlKENwcFRlbXBsYXRlcy5B
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckRvbWFpbkhhbmRsZXJJbnRlcmZhY2VEZWNs
YXJhdGlvbikuc3Vic3RpdHV0ZShOb25lLCAqKmhhbmRsZXJfYXJncykpCiAKICAgICBkZWYgX2dl
bmVyYXRlX2hhbmRsZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQoc2VsZiwgY29tbWFuZCk6CiAg
ICAgICAgIGxpbmVzID0gW10KQEAgLTEwMCw0ICsxMDAsNCBAQCBjbGFzcyBDcHBBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICAg
ICAgJ3BhcmFtZXRlcnMnOiAnLCAnLmpvaW4ocGFyYW1ldGVycyksCiAgICAgICAgIH0KICAgICAg
ICAgbGluZXMuYXBwZW5kKCcgICAgdmlydHVhbCB2b2lkICUoY29tbWFuZE5hbWUpcyglKHBhcmFt
ZXRlcnMpcykgPSAwOycgJSBjb21tYW5kX2FyZ3MpCi0gICAgICAgIHJldHVybiAnXG4nLmpvaW4o
bGluZXMpCisgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9u
KGNvbW1hbmQuY29uZGl0aW9uLCAnXG4nLmpvaW4obGluZXMpKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Jh
Y2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRl
ci5weQppbmRleCBlM2ZlNGUxMDA0MmU4YjQ1ZGIzOTUwNzUzZDFlMjk0NDRhOGUxODUzLi4xMGQ4
ZjE0YmQ1ZmViZWI4YTFiMDZiMDE3Njc1YTE0M2E4ZDRmNzM4IDEwMDc1NQotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFj
a2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2hl
YWRlci5weQpAQCAtOTEsNyArOTEsNyBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hlckhlYWRl
ckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICBsaW5lcyA9IFtdCiAgICAgICAgIGxp
bmVzLmFwcGVuZCgnI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKScp
CiAgICAgICAgIGZvciBkb21haW4gaW4gZG9tYWluczoKLSAgICAgICAgICAgIGxpbmVzLmFwcGVu
ZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgJ2NsYXNzIEFsdGVybmF0
ZSVzQmFja2VuZERpc3BhdGNoZXI7JyAlIGRvbWFpbi5kb21haW5fbmFtZSkpCisgICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihkb21haW4u
Y29uZGl0aW9uLCAnY2xhc3MgQWx0ZXJuYXRlJXNCYWNrZW5kRGlzcGF0Y2hlcjsnICUgZG9tYWlu
LmRvbWFpbl9uYW1lKSkKICAgICAgICAgbGluZXMuYXBwZW5kKCcjZW5kaWYgLy8gRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpJykKICAgICAgICAgcmV0dXJuICdcbicuam9p
bihsaW5lcykKIApAQCAtMTEzLDcgKzExMyw3IEBAIGNsYXNzIENwcEJhY2tlbmREaXNwYXRjaGVy
SGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgICAgICAnY29tbWFuZERlY2xh
cmF0aW9ucyc6ICJcbiIuam9pbihjb21tYW5kX2RlY2xhcmF0aW9ucykKICAgICAgICAgfQogCi0g
ICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgVGVt
cGxhdGUoQ3BwVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVySGVhZGVyRG9tYWluSGFuZGxlckRl
Y2xhcmF0aW9uKS5zdWJzdGl0dXRlKE5vbmUsICoqaGFuZGxlcl9hcmdzKSkKKyAgICAgICAgcmV0
dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZG9tYWluLmNvbmRpdGlvbiwg
VGVtcGxhdGUoQ3BwVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVySGVhZGVyRG9tYWluSGFuZGxl
ckRlY2xhcmF0aW9uKS5zdWJzdGl0dXRlKE5vbmUsICoqaGFuZGxlcl9hcmdzKSkKIAogICAgIGRl
ZiBfZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX3BhcmFtZXRlcihzZWxmLCBwYXJhbWV0ZXIs
IGNvbW1hbmQpOgogICAgICAgICBlbnVtX2FyZ3MgPSB7CkBAIC0xNjEsNyArMTYxLDcgQEAgY2xh
c3MgQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAg
ICAgICAgICAgICdwYXJhbWV0ZXJzJzogIiwgIi5qb2luKHBhcmFtZXRlcnMpCiAgICAgICAgIH0K
ICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgdmlydHVhbCB2b2lkICUoY29tbWFuZE5hbWUpcygl
KHBhcmFtZXRlcnMpcykgPSAwOycgJSBjb21tYW5kX2FyZ3MpCi0gICAgICAgIHJldHVybiAnXG4n
LmpvaW4obGluZXMpCisgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29u
ZGl0aW9uKGNvbW1hbmQuY29uZGl0aW9uLCAnXG4nLmpvaW4obGluZXMpKQogCiAgICAgZGVmIF9n
ZW5lcmF0ZV9hc3luY19oYW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKHNlbGYsIGNvbW1h
bmQpOgogICAgICAgICBjYWxsYmFja05hbWUgPSAiJXNDYWxsYmFjayIgJSB1Y2ZpcnN0KGNvbW1h
bmQuY29tbWFuZF9uYW1lKQpAQCAtMTkyLDcgKzE5Miw3IEBAIGNsYXNzIENwcEJhY2tlbmREaXNw
YXRjaGVySGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgICAgICAnb3V0UGFy
YW1ldGVycyc6ICIsICIuam9pbihvdXRfcGFyYW1ldGVycyksCiAgICAgICAgIH0KIAotICAgICAg
ICByZXR1cm4gVGVtcGxhdGUoQ3BwVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVySGVhZGVyQXN5
bmNDb21tYW5kRGVjbGFyYXRpb24pLnN1YnN0aXR1dGUoTm9uZSwgKipjb21tYW5kX2FyZ3MpCisg
ICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGNvbW1hbmQu
Y29uZGl0aW9uLCBUZW1wbGF0ZShDcHBUZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNoZXJIZWFkZXJB
c3luY0NvbW1hbmREZWNsYXJhdGlvbikuc3Vic3RpdHV0ZShOb25lLCAqKmNvbW1hbmRfYXJncykp
CiAKICAgICBkZWYgX2dlbmVyYXRlX2Rpc3BhdGNoZXJfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4o
c2VsZiwgZG9tYWluKToKICAgICAgICAgY2xhc3NDb21wb25lbnRzID0gWydjbGFzcyddCkBAIC0y
MjAsNyArMjIwLDcgQEAgY2xhc3MgQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3Io
Q3BwR2VuZXJhdG9yKToKICAgICAgICAgICAgICdjb21tYW5kRGVjbGFyYXRpb25zJzogIlxuIi5q
b2luKGRlY2xhcmF0aW9ucykKICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiBzZWxmLndyYXBf
d2l0aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgVGVtcGxhdGUoQ3BwVGVtcGxhdGVzLkJhY2tl
bmREaXNwYXRjaGVySGVhZGVyRG9tYWluRGlzcGF0Y2hlckRlY2xhcmF0aW9uKS5zdWJzdGl0dXRl
KE5vbmUsICoqaGFuZGxlcl9hcmdzKSkKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1
YXJkX2Zvcl9jb25kaXRpb24oZG9tYWluLmNvbmRpdGlvbiwgVGVtcGxhdGUoQ3BwVGVtcGxhdGVz
LkJhY2tlbmREaXNwYXRjaGVySGVhZGVyRG9tYWluRGlzcGF0Y2hlckRlY2xhcmF0aW9uKS5zdWJz
dGl0dXRlKE5vbmUsICoqaGFuZGxlcl9hcmdzKSkKIAogICAgIGRlZiBfZ2VuZXJhdGVfZGlzcGF0
Y2hlcl9kZWNsYXJhdGlvbl9mb3JfY29tbWFuZChzZWxmLCBjb21tYW5kKToKLSAgICAgICAgcmV0
dXJuICIgICAgdm9pZCAlcyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBw
YXJhbWV0ZXJzKTsiICUgY29tbWFuZC5jb21tYW5kX25hbWUKKyAgICAgICAgcmV0dXJuIHNlbGYu
d3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oY29tbWFuZC5jb25kaXRpb24sICIgICAgdm9p
ZCAlcyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsi
ICUgY29tbWFuZC5jb21tYW5kX25hbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRj
aGVyX2ltcGxlbWVudGF0aW9uLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRh
dGlvbi5weQppbmRleCBhMTU5NjFhNjQ3NDRlMTExYjU4MGM4ZDFhMGZhODA1NThlZTFjZTRiLi5k
YWYxOWM5NTBmYjA3YWFhMmQ4YjMxYTJmNDljN2NhYjUwNzAyYzYwIDEwMDc1NQotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBf
YmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rp
c3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKQEAgLTYwLDcgKzYwLDcgQEAgY2xhc3MgQ3BwQmFj
a2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAg
ICAgICAgICAgc2Vjb25kYXJ5X2luY2x1ZGVzLmFwcGVuZCgnJykKICAgICAgICAgICAgIHNlY29u
ZGFyeV9pbmNsdWRlcy5hcHBlbmQoJyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUyknKQogICAgICAgICAgICAgc2Vjb25kYXJ5X2luY2x1ZGVzLmFwcGVuZCgnI2luY2x1
ZGUgIiVzQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiJyAlIHNlbGYucHJvdG9jb2xfbmFt
ZSgpKQotICAgICAgICAgICAgc2Vjb25kYXJ5X2luY2x1ZGVzLmFwcGVuZCgnI2VuZGlmJykKKyAg
ICAgICAgICAgIHNlY29uZGFyeV9pbmNsdWRlcy5hcHBlbmQoJyNlbmRpZiAvLyBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUyknKQogCiAgICAgICAgIGhlYWRlcl9hcmdzID0g
ewogICAgICAgICAgICAgJ3ByaW1hcnlJbmNsdWRlJzogJyIlc0JhY2tlbmREaXNwYXRjaGVycy5o
IicgJSBzZWxmLnByb3RvY29sX25hbWUoKSwKQEAgLTkzLDcgKzkzLDcgQEAgY2xhc3MgQ3BwQmFj
a2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAg
ICAgICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUKICAgICAgICAgfQogICAg
ICAgICBkZXN0cnVjdG9yID0gJyUoZG9tYWluTmFtZSlzQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
Ojp+JShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0nICUgZGVzdHJ1
Y3Rvcl9hcmdzCi0gICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWlu
KGRvbWFpbiwgZGVzdHJ1Y3RvcikKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJk
X2Zvcl9jb25kaXRpb24oZG9tYWluLmNvbmRpdGlvbiwgZGVzdHJ1Y3RvcikKIAogICAgIGRlZiBf
Z2VuZXJhdGVfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbnNfZm9yX2RvbWFpbihzZWxmLCBkb21h
aW4pOgogICAgICAgICBpbXBsZW1lbnRhdGlvbnMgPSBbXQpAQCAtMTE1LDE3ICsxMTUsMjkgQEAg
Y2xhc3MgQ3BwQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihDcHBHZW5l
cmF0b3IpOgogICAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9ucy5hcHBlbmQoc2VsZi5fZ2Vu
ZXJhdGVfYXN5bmNfZGlzcGF0Y2hlcl9jbGFzc19mb3JfZG9tYWluKGNvbW1hbmQsIGRvbWFpbikp
CiAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Rpc3Bh
dGNoZXJfaW1wbGVtZW50YXRpb25fZm9yX2NvbW1hbmQoY29tbWFuZCwgZG9tYWluKSkKIAotICAg
ICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4sICdcblxu
Jy5qb2luKGltcGxlbWVudGF0aW9ucykpCisgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9n
dWFyZF9mb3JfY29uZGl0aW9uKGRvbWFpbi5jb25kaXRpb24sICdcblxuJy5qb2luKGltcGxlbWVu
dGF0aW9ucykpCiAKICAgICBkZWYgX2dlbmVyYXRlX3NtYWxsX2Rpc3BhdGNoZXJfc3dpdGNoX2lt
cGxlbWVudGF0aW9uX2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToKICAgICAgICAgY29tbWFuZHMg
PSBzZWxmLmNvbW1hbmRzX2Zvcl9kb21haW4oZG9tYWluKQogCiAgICAgICAgIGNhc2VzID0gW10K
LSAgICAgICAgY2FzZXMuYXBwZW5kKCcgICAgaWYgKG1ldGhvZCA9PSAiJXMiKScgJSBjb21tYW5k
c1swXS5jb21tYW5kX25hbWUpCi0gICAgICAgIGNhc2VzLmFwcGVuZCgnICAgICAgICAlcyhyZXF1
ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOycgJSBjb21tYW5kc1swXS5jb21tYW5kX25hbWUp
CisKKyAgICAgICAgZmlyc3RfY29tbWFuZF9zdHJpbmcgPSAiXG4iLmpvaW4oWworICAgICAgICAg
ICAgJyAgICBpZiAobWV0aG9kID09ICIlcyIpIHsnICUgY29tbWFuZHNbMF0uY29tbWFuZF9uYW1l
LAorICAgICAgICAgICAgJyAgICAgICAgJXMocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMp
KTsnICUgY29tbWFuZHNbMF0uY29tbWFuZF9uYW1lLAorICAgICAgICAgICAgJyAgICAgICAgcmV0
dXJuOycsCisgICAgICAgICAgICAnICAgIH0nLAorICAgICAgICBdKQorICAgICAgICBjYXNlcy5h
cHBlbmQoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihjb21tYW5kc1swXS5jb25k
aXRpb24sIGZpcnN0X2NvbW1hbmRfc3RyaW5nKSkKKwogICAgICAgICBmb3IgY29tbWFuZCBpbiBj
b21tYW5kc1sxOl06Ci0gICAgICAgICAgICBjYXNlcy5hcHBlbmQoJyAgICBlbHNlIGlmIChtZXRo
b2QgPT0gIiVzIiknICUgY29tbWFuZC5jb21tYW5kX25hbWUpCi0gICAgICAgICAgICBjYXNlcy5h
cHBlbmQoJyAgICAgICAgJXMocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsnICUgY29t
bWFuZC5jb21tYW5kX25hbWUpCisgICAgICAgICAgICBhZGRpdGlvbmFsX2NvbW1hbmRfc3RyaW5n
ID0gIlxuIi5qb2luKFsKKyAgICAgICAgICAgICAgICAnICAgIGlmIChtZXRob2QgPT0gIiVzIikg
eycgJSBjb21tYW5kLmNvbW1hbmRfbmFtZSwKKyAgICAgICAgICAgICAgICAnICAgICAgICAlcyhy
ZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOycgJSBjb21tYW5kLmNvbW1hbmRfbmFtZSwK
KyAgICAgICAgICAgICAgICAnICAgICAgICByZXR1cm47JywKKyAgICAgICAgICAgICAgICAnICAg
IH0nLAorICAgICAgICAgICAgXSkKKyAgICAgICAgICAgIGNhc2VzLmFwcGVuZChzZWxmLndyYXBf
d2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGNvbW1hbmQuY29uZGl0aW9uLCBhZGRpdGlvbmFsX2Nv
bW1hbmRfc3RyaW5nKSkKIAogICAgICAgICBzd2l0Y2hfYXJncyA9IHsKICAgICAgICAgICAgICdk
b21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLApAQCAtMTQzLDcgKzE1NSw3IEBAIGNsYXNz
IENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9y
KToKICAgICAgICAgICAgICAgICAnZG9tYWluTmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZSwKICAg
ICAgICAgICAgICAgICAnY29tbWFuZE5hbWUnOiBjb21tYW5kLmNvbW1hbmRfbmFtZQogICAgICAg
ICAgICAgfQotICAgICAgICAgICAgY2FzZXMuYXBwZW5kKCcgICAgICAgICAgICB7ICIlKGNvbW1h
bmROYW1lKXMiLCAmJShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0Y2hlcjo6JShjb21tYW5kTmFt
ZSlzIH0sJyAlIGFyZ3MpCisgICAgICAgICAgICBjYXNlcy5hcHBlbmQoc2VsZi53cmFwX3dpdGhf
Z3VhcmRfZm9yX2NvbmRpdGlvbihjb21tYW5kLmNvbmRpdGlvbiwgJyAgICAgICAgICAgIHsgIiUo
Y29tbWFuZE5hbWUpcyIsICYlKGRvbWFpbk5hbWUpc0JhY2tlbmREaXNwYXRjaGVyOjolKGNvbW1h
bmROYW1lKXMgfSwnICUgYXJncykpCiAKICAgICAgICAgc3dpdGNoX2FyZ3MgPSB7CiAgICAgICAg
ICAgICAnZG9tYWluTmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZSwKQEAgLTE4NSw3ICsxOTcsNyBA
QCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKENwcEdl
bmVyYXRvcik6CiAgICAgICAgICAgICAnZm9ybWFsUGFyYW1ldGVycyc6ICIsICIuam9pbihmb3Jt
YWxfcGFyYW1ldGVycyksCiAgICAgICAgICAgICAnb3V0UGFyYW1ldGVyQXNzaWdubWVudHMnOiAi
XG4iLmpvaW4ob3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cykKICAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gVGVtcGxhdGUoQ3BwVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRp
b25Bc3luY0NvbW1hbmQpLnN1YnN0aXR1dGUoTm9uZSwgKiphc3luY19hcmdzKQorICAgICAgICBy
ZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihjb21tYW5kLmNvbmRpdGlv
biwgVGVtcGxhdGUoQ3BwVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25B
c3luY0NvbW1hbmQpLnN1YnN0aXR1dGUoTm9uZSwgKiphc3luY19hcmdzKSkKIAogICAgIGRlZiBf
Z2VuZXJhdGVfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbl9mb3JfY29tbWFuZChzZWxmLCBjb21t
YW5kLCBkb21haW4pOgogICAgICAgICBpbl9wYXJhbWV0ZXJfZGVjbGFyYXRpb25zID0gW10KQEAg
LTMwNCw3ICszMTYsNyBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9u
R2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAg
ICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT4lKGNvbW1hbmROYW1lKXMoJShhbHRlcm5hdGVJbnZv
Y2F0aW9uUGFyYW1ldGVycylzKTsnICUgY29tbWFuZF9hcmdzKQogICAgICAgICAgICAgbGluZXMu
YXBwZW5kKCcgICAgICAgIHJldHVybjsnKQogICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAg
fScpCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyNlbmRpZicpCisgICAgICAgICAgICBsaW5l
cy5hcHBlbmQoJyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UyknKQogICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQogCiAgICAgICAgIGlmIGNvbW1hbmQu
aXNfYXN5bmM6CkBAIC0zMzQsNCArMzQ2LDQgQEAgY2xhc3MgQ3BwQmFja2VuZERpc3BhdGNoZXJJ
bXBsZW1lbnRhdGlvbkdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICAgICAgbGluZXMu
YXBwZW5kKCcgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3Io
QmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7JykKIAogICAg
ICAgICBsaW5lcy5hcHBlbmQoJ30nKQotICAgICAgICByZXR1cm4gIlxuIi5qb2luKGxpbmVzKQor
ICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihjb21tYW5k
LmNvbmRpdGlvbiwgIlxuIi5qb2luKGxpbmVzKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9k
aXNwYXRjaGVyX2hlYWRlci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlci5weQpp
bmRleCA1Y2Y3NDc4NTQzMzY4YWNhOGEyMzRiMzU1NGUwNjk0YzEwMDE4NTJmLi4xMTlkMjNjMzhj
ZGYyNGNmNTZkMGZmYzY2ZDU3YjhhM2Q0ZTJkYTQ0IDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRf
ZGlzcGF0Y2hlcl9oZWFkZXIucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVy
LnB5CkBAIC0xMTEsNyArMTExLDcgQEAgY2xhc3MgQ3BwRnJvbnRlbmREaXNwYXRjaGVySGVhZGVy
R2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgICAgICAnZXZlbnREZWNsYXJhdGlvbnMn
OiAiXG4iLmpvaW4oZXZlbnRfZGVjbGFyYXRpb25zKQogICAgICAgICB9CiAKLSAgICAgICAgcmV0
dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCBUZW1wbGF0ZShDcHBU
ZW1wbGF0ZXMuRnJvbnRlbmREaXNwYXRjaGVyRG9tYWluRGlzcGF0Y2hlckRlY2xhcmF0aW9uKS5z
dWJzdGl0dXRlKE5vbmUsICoqaGFuZGxlcl9hcmdzKSkKKyAgICAgICAgcmV0dXJuIHNlbGYud3Jh
cF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZG9tYWluLmNvbmRpdGlvbiwgVGVtcGxhdGUoQ3Bw
VGVtcGxhdGVzLkZyb250ZW5kRGlzcGF0Y2hlckRvbWFpbkRpc3BhdGNoZXJEZWNsYXJhdGlvbiku
c3Vic3RpdHV0ZShOb25lLCAqKmhhbmRsZXJfYXJncykpCiAKICAgICBkZWYgX2dlbmVyYXRlX2Rp
c3BhdGNoZXJfZGVjbGFyYXRpb25fZm9yX2V2ZW50KHNlbGYsIGV2ZW50LCBkb21haW4sIHVzZWRf
ZW51bV9uYW1lcyk6CiAgICAgICAgIGZvcm1hbF9wYXJhbWV0ZXJzID0gW10KQEAgLTEyMyw0ICsx
MjMsNCBAQCBjbGFzcyBDcHBGcm9udGVuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IoQ3BwR2Vu
ZXJhdG9yKToKICAgICAgICAgICAgICAgICB1c2VkX2VudW1fbmFtZXMuYWRkKHBhcmFtZXRlci5w
YXJhbWV0ZXJfbmFtZSkKIAogICAgICAgICBsaW5lcy5hcHBlbmQoIiAgICB2b2lkICVzKCVzKTsi
ICUgKGV2ZW50LmV2ZW50X25hbWUsICIsICIuam9pbihmb3JtYWxfcGFyYW1ldGVycykpKQotICAg
ICAgICByZXR1cm4gIlxuIi5qb2luKGxpbmVzKQorICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dp
dGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihldmVudC5jb25kaXRpb24sICJcbiIuam9pbihsaW5lcykp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CmluZGV4IDkwNGQyMjdh
NmU5MzhkM2QwYWRjMWJiZjMwZjUzMGMzN2VlOTA5ZGYuLjY2ZGM2ZTE4NWNmZTJiNjFiMWVjYTc3
NTczY2UxNjc0ZTZiMzVhNDkgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2lt
cGxlbWVudGF0aW9uLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0
aW9uLnB5CkBAIC04Miw3ICs4Miw3IEBAIGNsYXNzIENwcEZyb250ZW5kRGlzcGF0Y2hlckltcGxl
bWVudGF0aW9uR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgIGZvciBldmVudCBpbiBl
dmVudHM6CiAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRl
X2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25fZm9yX2V2ZW50KGV2ZW50LCBkb21haW4pKQogCi0g
ICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgJ1xu
XG4nLmpvaW4oaW1wbGVtZW50YXRpb25zKSkKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRo
X2d1YXJkX2Zvcl9jb25kaXRpb24oZG9tYWluLmNvbmRpdGlvbiwgJ1xuXG4nLmpvaW4oaW1wbGVt
ZW50YXRpb25zKSkKIAogICAgIGRlZiBfZ2VuZXJhdGVfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlv
bl9mb3JfZXZlbnQoc2VsZiwgZXZlbnQsIGRvbWFpbik6CiAgICAgICAgIGxpbmVzID0gW10KQEAg
LTEzMSw0ICsxMzEsNCBAQCBjbGFzcyBDcHBGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlv
bkdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICBsaW5lcy5hcHBlbmQoJycpCiAgICAg
ICAgIGxpbmVzLmFwcGVuZCgnICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNz
YWdlLT50b0pTT05TdHJpbmcoKSk7JykKICAgICAgICAgbGluZXMuYXBwZW5kKCd9JykKLSAgICAg
ICAgcmV0dXJuICJcbiIuam9pbihsaW5lcykKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRo
X2d1YXJkX2Zvcl9jb25kaXRpb24oZXZlbnQuY29uZGl0aW9uLCAiXG4iLmpvaW4obGluZXMpKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVn
ZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2hlYWRlci5weSBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90
eXBlc19oZWFkZXIucHkKaW5kZXggNDIzZDdhMjMwMDg4ZTU2ZTc3ZDFkZDI4YzE0OWMzMDlhMTcx
ZDJiMy4uOTlmNjAxYTdkOTIzN2UzYzc5MzlmMDhlNmIzNjc4NzM2ZjA2YWJiYiAxMDA3NTUKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJh
dGVfY3BwX3Byb3RvY29sX3R5cGVzX2hlYWRlci5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNf
aGVhZGVyLnB5CkBAIC0xMDUsNyArMTA1LDcgQEAgY2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0hlYWRl
ckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICAgICAgICAgIGRvbWFpbl9saW5lcy5h
cHBlbmQoJ3N0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgVkVSU0lPTiA9ICVzOycgJSB2ZXJzaW9u
KQogCiAgICAgICAgICAgICBkb21haW5fbGluZXMuYXBwZW5kKCd9IC8vICVzJyAlIGRvbWFpbi5k
b21haW5fbmFtZSkKLSAgICAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLndyYXBfd2l0aF9n
dWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgJ1xuJy5qb2luKGRvbWFpbl9saW5lcykpKQorICAgICAg
ICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24o
ZG9tYWluLmNvbmRpdGlvbiwgJ1xuJy5qb2luKGRvbWFpbl9saW5lcykpKQogCiAgICAgICAgIGlm
IGxlbihzZWN0aW9ucykgPT0gMDoKICAgICAgICAgICAgIHJldHVybiAnJwpAQCAtMTMyLDEwICsx
MzIsMTAgQEAgY2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0hlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0
b3IpOgogICAgICAgICAgICAgZG9tYWluX2xpbmVzLmFwcGVuZCgnbmFtZXNwYWNlICVzIHsnICUg
ZG9tYWluLmRvbWFpbl9uYW1lKQogCiAgICAgICAgICAgICAjIEZvcndhcmQtZGVjbGFyZSBhbGwg
Y2xhc3NlcyBzbyB0aGUgdHlwZSBidWlsZGVycyB3b24ndCBicmVhayBpZiByZWFycmFuZ2VkLgot
ICAgICAgICAgICAgZG9tYWluX2xpbmVzLmV4dGVuZCgnY2xhc3MgJXM7JyAlIG9iamVjdF90eXBl
LnJhd19uYW1lKCkgZm9yIG9iamVjdF90eXBlIGluIG9iamVjdF90eXBlcykKLSAgICAgICAgICAg
IGRvbWFpbl9saW5lcy5leHRlbmQoJ2VudW0gY2xhc3MgJXM7JyAlIGVudW1fdHlwZS5yYXdfbmFt
ZSgpIGZvciBlbnVtX3R5cGUgaW4gZW51bV90eXBlcykKKyAgICAgICAgICAgIGRvbWFpbl9saW5l
cy5leHRlbmQoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihvYmplY3RfdHlwZS5k
ZWNsYXJhdGlvbigpLmNvbmRpdGlvbiwgJ2NsYXNzICVzOycgJSBvYmplY3RfdHlwZS5yYXdfbmFt
ZSgpKSBmb3Igb2JqZWN0X3R5cGUgaW4gb2JqZWN0X3R5cGVzKQorICAgICAgICAgICAgZG9tYWlu
X2xpbmVzLmV4dGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGVudW1fdHlw
ZS5kZWNsYXJhdGlvbigpLmNvbmRpdGlvbiwgJ2VudW0gY2xhc3MgJXM7JyAlIGVudW1fdHlwZS5y
YXdfbmFtZSgpKSBmb3IgZW51bV90eXBlIGluIGVudW1fdHlwZXMpCiAgICAgICAgICAgICBkb21h
aW5fbGluZXMuYXBwZW5kKCd9IC8vICVzJyAlIGRvbWFpbi5kb21haW5fbmFtZSkKLSAgICAgICAg
ICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFp
biwgJ1xuJy5qb2luKGRvbWFpbl9saW5lcykpKQorICAgICAgICAgICAgc2VjdGlvbnMuYXBwZW5k
KHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZG9tYWluLmNvbmRpdGlvbiwgJ1xu
Jy5qb2luKGRvbWFpbl9saW5lcykpKQogCiAgICAgICAgIGlmIGxlbihzZWN0aW9ucykgPT0gMDoK
ICAgICAgICAgICAgIHJldHVybiAnJwpAQCAtMTcwLDcgKzE3MCw3IEBAIGNsYXNzIENwcFByb3Rv
Y29sVHlwZXNIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgICAgIGlmIGxl
bihkZWNsYXJhdGlvbi5kZXNjcmlwdGlvbikgPiAwOgogICAgICAgICAgICAgICAgIHR5cGVkZWZf
bGluZXMuYXBwZW5kKCcvKiAlcyAqLycgJSBkZWNsYXJhdGlvbi5kZXNjcmlwdGlvbikKICAgICAg
ICAgICAgIHR5cGVkZWZfbGluZXMuYXBwZW5kKCd0eXBlZGVmICVzICVzOycgJSAocHJpbWl0aXZl
X25hbWUsIGRlY2xhcmF0aW9uLnR5cGVfbmFtZSkpCi0gICAgICAgICAgICBzZWN0aW9ucy5hcHBl
bmQoJ1xuJy5qb2luKHR5cGVkZWZfbGluZXMpKQorICAgICAgICAgICAgc2VjdGlvbnMuYXBwZW5k
KHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZGVjbGFyYXRpb24uY29uZGl0aW9u
LCAnXG4nLmpvaW4odHlwZWRlZl9saW5lcykpKQogCiAgICAgICAgIGZvciBkZWNsYXJhdGlvbiBp
biBhcnJheV9kZWNsYXJhdGlvbnM6CiAgICAgICAgICAgICBlbGVtZW50X3R5cGUgPSBDcHBHZW5l
cmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGUoZGVjbGFyYXRpb24udHlwZS5lbGVtZW50
X3R5cGUpCkBAIC0xNzgsMTMgKzE3OCwxMyBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVzSGVhZGVy
R2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgICAgICBpZiBsZW4oZGVjbGFyYXRpb24u
ZGVzY3JpcHRpb24pID4gMDoKICAgICAgICAgICAgICAgICB0eXBlZGVmX2xpbmVzLmFwcGVuZCgn
LyogJXMgKi8nICUgZGVjbGFyYXRpb24uZGVzY3JpcHRpb24pCiAgICAgICAgICAgICB0eXBlZGVm
X2xpbmVzLmFwcGVuZCgndHlwZWRlZiBKU09OOjpBcnJheU9mPCVzPiAlczsnICUgKGVsZW1lbnRf
dHlwZSwgZGVjbGFyYXRpb24udHlwZV9uYW1lKSkKLSAgICAgICAgICAgIHNlY3Rpb25zLmFwcGVu
ZCgnXG4nLmpvaW4odHlwZWRlZl9saW5lcykpCisgICAgICAgICAgICBzZWN0aW9ucy5hcHBlbmQo
c2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihkZWNsYXJhdGlvbi5jb25kaXRpb24s
ICdcbicuam9pbih0eXBlZGVmX2xpbmVzKSkpCiAKICAgICAgICAgbGluZXMgPSBbXQogICAgICAg
ICBsaW5lcy5hcHBlbmQoJ25hbWVzcGFjZSAlcyB7JyAlIGRvbWFpbi5kb21haW5fbmFtZSkKICAg
ICAgICAgbGluZXMuYXBwZW5kKCdcbicuam9pbihzZWN0aW9ucykpCiAgICAgICAgIGxpbmVzLmFw
cGVuZCgnfSAvLyAlcycgJSBkb21haW4uZG9tYWluX25hbWUpCi0gICAgICAgIHJldHVybiBzZWxm
LndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgJ1xuJy5qb2luKGxpbmVzKSkKKyAg
ICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZG9tYWluLmNv
bmRpdGlvbiwgJ1xuJy5qb2luKGxpbmVzKSkKIAogICAgIGRlZiBfZ2VuZXJhdGVfZW51bV9jb25z
dGFudF92YWx1ZV9jb252ZXJzaW9uX21ldGhvZHMoc2VsZik6CiAgICAgICAgIGlmIG5vdCBzZWxm
LmFzc2lnbmVkX2VudW1fdmFsdWVzKCk6CkBAIC0yMjUsOSArMjI1LDExIEBAIGNsYXNzIENwcFBy
b3RvY29sVHlwZXNIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKIAogICAgICAgICBsaW5l
cyA9IFtdCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnbmFtZXNwYWNlICVzIHsnICUgZG9tYWluLmRv
bWFpbl9uYW1lKQotICAgICAgICBsaW5lcy5hcHBlbmQoJ1xuJy5qb2luKHNlY3Rpb25zKSkKKyAg
ICAgICAgbGluZXMuYXBwZW5kKCcnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ1xuXG4nLmpvaW4o
c2VjdGlvbnMpKQorICAgICAgICBsaW5lcy5hcHBlbmQoJycpCiAgICAgICAgIGxpbmVzLmFwcGVu
ZCgnfSAvLyAlcycgJSBkb21haW4uZG9tYWluX25hbWUpCi0gICAgICAgIHJldHVybiBzZWxmLndy
YXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgJ1xuJy5qb2luKGxpbmVzKSkKKyAgICAg
ICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZG9tYWluLmNvbmRp
dGlvbiwgJ1xuJy5qb2luKGxpbmVzKSkKIAogICAgIGRlZiBfZ2VuZXJhdGVfY2xhc3NfZm9yX29i
amVjdF9kZWNsYXJhdGlvbihzZWxmLCB0eXBlX2RlY2xhcmF0aW9uLCBkb21haW4pOgogICAgICAg
ICBpZiBsZW4odHlwZV9kZWNsYXJhdGlvbi50eXBlX21lbWJlcnMpID09IDA6CkBAIC0yNzgsMTQg
KzI4MCwxNCBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9yKENwcEdlbmVy
YXRvcik6CiAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgJXMgc3RhdGljIGNvbnN0
IGNoYXIqICVzOycgJSAoZXhwb3J0X21hY3JvLCB1Y2ZpcnN0KHR5cGVfbWVtYmVyLm1lbWJlcl9u
YW1lKSkpCiAKICAgICAgICAgbGluZXMuYXBwZW5kKCd9OycpCi0gICAgICAgIGxpbmVzLmFwcGVu
ZCgnJykKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKyAgICAgICAgcmV0dXJuIHNl
bGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24odHlwZV9kZWNsYXJhdGlvbi5jb25kaXRp
b24sICdcbicuam9pbihsaW5lcykpCiAKICAgICBkZWYgX2dlbmVyYXRlX3N0cnVjdF9mb3JfZW51
bV9kZWNsYXJhdGlvbihzZWxmLCBlbnVtX2RlY2xhcmF0aW9uKToKICAgICAgICAgbGluZXMgPSBb
XQotICAgICAgICBsaW5lcy5hcHBlbmQoJy8qICVzICovJyAlIGVudW1fZGVjbGFyYXRpb24uZGVz
Y3JpcHRpb24pCisgICAgICAgIGlmIGxlbihlbnVtX2RlY2xhcmF0aW9uLmRlc2NyaXB0aW9uKToK
KyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnLyogJXMgKi8nICUgZW51bV9kZWNsYXJhdGlvbi5k
ZXNjcmlwdGlvbikKICAgICAgICAgbGluZXMuZXh0ZW5kKHNlbGYuX2dlbmVyYXRlX3N0cnVjdF9m
b3JfZW51bV90eXBlKGVudW1fZGVjbGFyYXRpb24udHlwZV9uYW1lLCBlbnVtX2RlY2xhcmF0aW9u
LnR5cGUpKQotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorICAgICAgICByZXR1cm4g
c2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihlbnVtX2RlY2xhcmF0aW9uLmNvbmRp
dGlvbiwgJ1xuJy5qb2luKGxpbmVzKSkKIAogICAgIGRlZiBfZ2VuZXJhdGVfc3RydWN0X2Zvcl9h
bm9ueW1vdXNfZW51bV9tZW1iZXIoc2VsZiwgZW51bV9tZW1iZXIpOgogICAgICAgICBkZWYgYXBw
bHlfaW5kZW50YXRpb24obGluZSk6CkBAIC0zODEsMTAgKzM4MywxMCBAQCBjbGFzcyBDcHBQcm90
b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgICAgICBmb3Ig
dHlwZV9kZWNsYXJhdGlvbiBpbiBkZWNsYXJhdGlvbnNfdG9fZ2VuZXJhdGU6CiAgICAgICAgICAg
ICAgICAgZm9yIHR5cGVfbWVtYmVyIGluIHR5cGVfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzOgog
ICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGVfbWVtYmVyLnR5cGUsIEVudW1U
eXBlKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVfYXJndW1lbnRzLmFwcGVuZCgoQ3Bw
R2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlX21lbWJlcih0eXBlX21lbWJlciwg
dHlwZV9kZWNsYXJhdGlvbiksIEZhbHNlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVf
YXJndW1lbnRzLmFwcGVuZCgoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbih0eXBl
X2RlY2xhcmF0aW9uLmNvbmRpdGlvbiwgQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zv
cl90eXBlX21lbWJlcih0eXBlX21lbWJlciwgdHlwZV9kZWNsYXJhdGlvbikpLCBGYWxzZSkpCiAK
ICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGVfZGVjbGFyYXRpb24udHlwZSwgT2Jq
ZWN0VHlwZSk6Ci0gICAgICAgICAgICAgICAgICAgIHR5cGVfYXJndW1lbnRzLmFwcGVuZCgoQ3Bw
R2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKHR5cGVfZGVjbGFyYXRpb24udHlw
ZSksIEdlbmVyYXRvci50eXBlX25lZWRzX3J1bnRpbWVfY2FzdHModHlwZV9kZWNsYXJhdGlvbi50
eXBlKSkpCisgICAgICAgICAgICAgICAgICAgIHR5cGVfYXJndW1lbnRzLmFwcGVuZCgoc2VsZi53
cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbih0eXBlX2RlY2xhcmF0aW9uLmNvbmRpdGlvbiwg
Q3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKHR5cGVfZGVjbGFyYXRpb24u
dHlwZSkpLCBHZW5lcmF0b3IudHlwZV9uZWVkc19ydW50aW1lX2Nhc3RzKHR5cGVfZGVjbGFyYXRp
b24udHlwZSkpKQogCiAgICAgICAgIHN0cnVjdF9rZXl3b3JkcyA9IFsnc3RydWN0J10KICAgICAg
ICAgZnVuY3Rpb25fa2V5d29yZHMgPSBbJ3N0YXRpYyB2b2lkJ10KQEAgLTQzNywxOSArNDM5LDIw
IEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToK
ICAgICAgICAgICAgIGRvbWFpbl9saW5lcy5hcHBlbmQoIi8vIEVudW1zIGluIHRoZSAnJXMnIERv
bWFpbiIgJSBkb21haW4uZG9tYWluX25hbWUpCiAgICAgICAgICAgICBmb3IgZW51bV90eXBlIGlu
IGVudW1fdHlwZXM6CiAgICAgICAgICAgICAgICAgY3BwX3Byb3RvY29sX3R5cGUgPSBDcHBHZW5l
cmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGUoZW51bV90eXBlKQotICAgICAgICAgICAg
ICAgIGRvbWFpbl9saW5lcy5hcHBlbmQoJ3RlbXBsYXRlPD4nKQotICAgICAgICAgICAgICAgIGRv
bWFpbl9saW5lcy5hcHBlbmQoJyVzIHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzwlcz4oY29uc3Qg
U3RyaW5nJik7JyAlIChyZXR1cm5fdHlwZV93aXRoX2V4cG9ydF9tYWNybyhjcHBfcHJvdG9jb2xf
dHlwZSksIGNwcF9wcm90b2NvbF90eXBlKSkKKyAgICAgICAgICAgICAgICBkb21haW5fbGluZXMu
YXBwZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZW51bV90eXBlLmRlY2xh
cmF0aW9uKCkuY29uZGl0aW9uLCAndGVtcGxhdGU8PlxuJXMgcGFyc2VFbnVtVmFsdWVGcm9tU3Ry
aW5nPCVzPihjb25zdCBTdHJpbmcmKTsnICUgKHJldHVybl90eXBlX3dpdGhfZXhwb3J0X21hY3Jv
KGNwcF9wcm90b2NvbF90eXBlKSwgY3BwX3Byb3RvY29sX3R5cGUpKSkKIAogICAgICAgICAgICAg
Zm9yIG9iamVjdF90eXBlIGluIG9iamVjdF90eXBlczoKKyAgICAgICAgICAgICAgICBvYmplY3Rf
bGluZXMgPSBbXQogICAgICAgICAgICAgICAgIGZvciBlbnVtX21lbWJlciBpbiBmaWx0ZXIodHlw
ZV9tZW1iZXJfaXNfYW5vbnltb3VzX2VudW1fdHlwZSwgb2JqZWN0X3R5cGUubWVtYmVycyk6CiAg
ICAgICAgICAgICAgICAgICAgIGNwcF9wcm90b2NvbF90eXBlID0gQ3BwR2VuZXJhdG9yLmNwcF9w
cm90b2NvbF90eXBlX2Zvcl90eXBlX21lbWJlcihlbnVtX21lbWJlciwgb2JqZWN0X3R5cGUuZGVj
bGFyYXRpb24oKSkKLSAgICAgICAgICAgICAgICAgICAgZG9tYWluX2xpbmVzLmFwcGVuZCgndGVt
cGxhdGU8PicpCi0gICAgICAgICAgICAgICAgICAgIGRvbWFpbl9saW5lcy5hcHBlbmQoJyVzIHBh
cnNlRW51bVZhbHVlRnJvbVN0cmluZzwlcz4oY29uc3QgU3RyaW5nJik7JyAlIChyZXR1cm5fdHlw
ZV93aXRoX2V4cG9ydF9tYWNybyhjcHBfcHJvdG9jb2xfdHlwZSksIGNwcF9wcm90b2NvbF90eXBl
KSkKKyAgICAgICAgICAgICAgICAgICAgb2JqZWN0X2xpbmVzLmFwcGVuZCgndGVtcGxhdGU8Plxu
JXMgcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPCVzPihjb25zdCBTdHJpbmcmKTsnICUgKHJldHVy
bl90eXBlX3dpdGhfZXhwb3J0X21hY3JvKGNwcF9wcm90b2NvbF90eXBlKSwgY3BwX3Byb3RvY29s
X3R5cGUpKQorICAgICAgICAgICAgICAgIGlmIGxlbihvYmplY3RfbGluZXMpOgorICAgICAgICAg
ICAgICAgICAgICBkb21haW5fbGluZXMuYXBwZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9j
b25kaXRpb24ob2JqZWN0X3R5cGUuZGVjbGFyYXRpb24oKS5jb25kaXRpb24sICdcbicuam9pbihv
YmplY3RfbGluZXMpKSkKIAogICAgICAgICAgICAgaWYgbGVuKGRvbWFpbl9saW5lcykgPT0gMToK
ICAgICAgICAgICAgICAgICBjb250aW51ZSAgIyBObyByZWFsIGRlY2xhcmF0aW9ucyB0byBlbWl0
LCBqdXN0IHRoZSBkb21haW4gY29tbWVudC4gU2tpcC4KIAotICAgICAgICAgICAgc2VjdGlvbnMu
YXBwZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCAnXG4nLmpvaW4o
ZG9tYWluX2xpbmVzKSkpCisgICAgICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi53cmFwX3dp
dGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9uLCAnXG4nLmpvaW4oZG9tYWlu
X2xpbmVzKSkpCiAKICAgICAgICAgaWYgbGVuKHNlY3Rpb25zKSA9PSAxOgogICAgICAgICAgICAg
cmV0dXJuIFtdICMgTm8gcmVhbCBzZWN0aW9ucyB0byBlbWl0LCBqdXN0IHRoZSBuYW1lc3BhY2Ug
YW5kIHRlbXBsYXRlIGRlY2xhcmF0aW9uLiBTa2lwLgpAQCAtNDc0LDE0ICs0NzcsMjAgQEAgY2xh
c3MgQ3BwUHJvdG9jb2xUeXBlc0hlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAg
ICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQo
J3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsnKQogCi0gICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoJycpCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoIi8vIEhhc2ggZGVj
bGFyYXRpb25zIGluIHRoZSAnJXMnIERvbWFpbiIgJSBkb21haW4uZG9tYWluX25hbWUpCisgICAg
ICAgICAgICBkb21haW5fbGluZXMgPSBbXQorCisgICAgICAgICAgICBkb21haW5fbGluZXMuYXBw
ZW5kKCcnKQorICAgICAgICAgICAgZG9tYWluX2xpbmVzLmFwcGVuZCgiLy8gSGFzaCBkZWNsYXJh
dGlvbnMgaW4gdGhlICclcycgRG9tYWluIiAlIGRvbWFpbi5kb21haW5fbmFtZSkKIAogICAgICAg
ICAgICAgZm9yIGVudW1fdHlwZSBpbiBlbnVtX3R5cGVzOgotICAgICAgICAgICAgICAgIGxpbmVz
LmFwcGVuZCgndGVtcGxhdGU8PicpCi0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdzdHJ1
Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6JXM6OiVzPiB7JyAlIChkb21haW4u
ZG9tYWluX25hbWUsIGVudW1fdHlwZS5yYXdfbmFtZSgpKSkKLSAgICAgICAgICAgICAgICBsaW5l
cy5hcHBlbmQoJyAgICB0eXBlZGVmIEludEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6JXM6OiVz
PiBIYXNoOycgJSAoZG9tYWluLmRvbWFpbl9uYW1lLCBlbnVtX3R5cGUucmF3X25hbWUoKSkpCi0g
ICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCd9OycpCisgICAgICAgICAgICAgICAgZW51bV9s
aW5lcyA9IFtdCisgICAgICAgICAgICAgICAgZW51bV9saW5lcy5hcHBlbmQoJ3RlbXBsYXRlPD4n
KQorICAgICAgICAgICAgICAgIGVudW1fbGluZXMuYXBwZW5kKCdzdHJ1Y3QgRGVmYXVsdEhhc2g8
SW5zcGVjdG9yOjpQcm90b2NvbDo6JXM6OiVzPiB7JyAlIChkb21haW4uZG9tYWluX25hbWUsIGVu
dW1fdHlwZS5yYXdfbmFtZSgpKSkKKyAgICAgICAgICAgICAgICBlbnVtX2xpbmVzLmFwcGVuZCgn
ICAgIHR5cGVkZWYgSW50SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjolczo6JXM+IEhhc2g7JyAl
IChkb21haW4uZG9tYWluX25hbWUsIGVudW1fdHlwZS5yYXdfbmFtZSgpKSkKKyAgICAgICAgICAg
ICAgICBlbnVtX2xpbmVzLmFwcGVuZCgnfTsnKQorICAgICAgICAgICAgICAgIGRvbWFpbl9saW5l
cy5hcHBlbmQoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihlbnVtX3R5cGUuZGVj
bGFyYXRpb24oKS5jb25kaXRpb24sICdcbicuam9pbihlbnVtX2xpbmVzKSkpCisKKyAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRvbWFp
bi5jb25kaXRpb24sICdcbicuam9pbihkb21haW5fbGluZXMpKSkKIAogICAgICAgICBpZiBsZW4o
bGluZXMpID09IDA6CiAgICAgICAgICAgICByZXR1cm4gW10KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90
b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19pbXBsZW1l
bnRhdGlvbi5weQppbmRleCA2NWNlYmY1ODNlZThiYTNjNzhlOWI0Yzc0MjA3YzY0MTY2YThhZDEx
Li41ZGQ1MzQ2OTQ0ODU1MTU0OGQ2N2FhMGI0NTZjNmExYTY2NThkNTkzIDEwMDc1NQotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9j
cHBfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5
cGVzX2ltcGxlbWVudGF0aW9uLnB5CkBAIC0xMjgsOSArMTI4LDggQEAgY2xhc3MgQ3BwUHJvdG9j
b2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgICAg
ICAgICAgJycsCiAgICAgICAgICAgICAgICAgJyAgICByZXR1cm4gV1RGOjpudWxsb3B0OycsCiAg
ICAgICAgICAgICAgICAgJ30nLAotICAgICAgICAgICAgICAgICcnLAogICAgICAgICAgICAgXSkK
LSAgICAgICAgICAgIHJldHVybiBib2R5X2xpbmVzCisgICAgICAgICAgICByZXR1cm4gJ1xuJy5q
b2luKGJvZHlfbGluZXMpCiAKICAgICAgICAgdHlwZV9kZWNsYXJhdGlvbnMgPSBzZWxmLnR5cGVf
ZGVjbGFyYXRpb25zX2Zvcl9kb21haW4oZG9tYWluKQogICAgICAgICBkZWNsYXJhdGlvbl90eXBl
cyA9IFtkZWNsLnR5cGUgZm9yIGRlY2wgaW4gdHlwZV9kZWNsYXJhdGlvbnNdCkBAIC0xNDYsMTcg
KzE0NSwyMyBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3Io
Q3BwR2VuZXJhdG9yKToKICAgICAgICAgbGluZXMuYXBwZW5kKCIvLyBFbnVtcyBpbiB0aGUgJyVz
JyBEb21haW4iICUgZG9tYWluLmRvbWFpbl9uYW1lKQogICAgICAgICBmb3IgZW51bV90eXBlIGlu
IGVudW1fdHlwZXM6CiAgICAgICAgICAgICBjcHBfcHJvdG9jb2xfdHlwZSA9IENwcEdlbmVyYXRv
ci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShlbnVtX3R5cGUpCi0gICAgICAgICAgICBsaW5l
cy5leHRlbmQoZ2VuZXJhdGVfY29udmVyc2lvbl9tZXRob2RfYm9keShlbnVtX3R5cGUsIGNwcF9w
cm90b2NvbF90eXBlKSkKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKKyAgICAgICAgICAg
IGxpbmVzLmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGVudW1fdHlw
ZS5kZWNsYXJhdGlvbigpLmNvbmRpdGlvbiwgZ2VuZXJhdGVfY29udmVyc2lvbl9tZXRob2RfYm9k
eShlbnVtX3R5cGUsIGNwcF9wcm90b2NvbF90eXBlKSkpCiAKICAgICAgICAgZm9yIG9iamVjdF90
eXBlIGluIG9iamVjdF90eXBlczoKKyAgICAgICAgICAgIG9iamVjdF9saW5lcyA9IFtdCiAgICAg
ICAgICAgICBmb3IgZW51bV9tZW1iZXIgaW4gZmlsdGVyKHR5cGVfbWVtYmVyX2lzX2Fub255bW91
c19lbnVtX3R5cGUsIG9iamVjdF90eXBlLm1lbWJlcnMpOgogICAgICAgICAgICAgICAgIGNwcF9w
cm90b2NvbF90eXBlID0gQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlX21l
bWJlcihlbnVtX21lbWJlciwgb2JqZWN0X3R5cGUuZGVjbGFyYXRpb24oKSkKLSAgICAgICAgICAg
ICAgICBsaW5lcy5leHRlbmQoZ2VuZXJhdGVfY29udmVyc2lvbl9tZXRob2RfYm9keShlbnVtX21l
bWJlci50eXBlLCBjcHBfcHJvdG9jb2xfdHlwZSkpCisgICAgICAgICAgICAgICAgb2JqZWN0X2xp
bmVzLmFwcGVuZChnZW5lcmF0ZV9jb252ZXJzaW9uX21ldGhvZF9ib2R5KGVudW1fbWVtYmVyLnR5
cGUsIGNwcF9wcm90b2NvbF90eXBlKSkKKyAgICAgICAgICAgIGlmIGxlbihvYmplY3RfbGluZXMp
OgorICAgICAgICAgICAgICAgIGlmIGxlbihsaW5lcyk6CisgICAgICAgICAgICAgICAgICAgIGxp
bmVzLmFwcGVuZCgnJykKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi53cmFwX3dp
dGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihvYmplY3RfdHlwZS5kZWNsYXJhdGlvbigpLmNvbmRpdGlv
biwgJ1xuJy5qb2luKG9iamVjdF9saW5lcykpKQogCiAgICAgICAgIGlmIGxlbihsaW5lcykgPT0g
MToKICAgICAgICAgICAgIHJldHVybiAnJyAgIyBObyByZWFsIGRlY2xhcmF0aW9ucyB0byBlbWl0
LCBqdXN0IHRoZSBkb21haW4gY29tbWVudC4KIAotICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dp
dGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4sICdcbicuam9pbihsaW5lcykpCisgICAgICAgIHJl
dHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRvbWFpbi5jb25kaXRpb24s
ICdcbicuam9pbihsaW5lcykpCiAKICAgICBkZWYgX2dlbmVyYXRlX2VudW1fbWFwcGluZ19hbmRf
Y29udmVyc2lvbl9tZXRob2RzKHNlbGYsIGRvbWFpbnMpOgogICAgICAgICBzZWN0aW9ucyA9IFtd
CkBAIC0xNzMsMTIgKzE3OCwxNSBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRp
b25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICBkZWYgX2dlbmVyYXRlX29wZW5fZmllbGRf
bmFtZXMoc2VsZik6CiAgICAgICAgIGxpbmVzID0gW10KICAgICAgICAgZm9yIGRvbWFpbiBpbiBz
ZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKToKKyAgICAgICAgICAgIGRvbWFpbl9saW5lcyA9IFtd
CiAgICAgICAgICAgICB0eXBlX2RlY2xhcmF0aW9ucyA9IHNlbGYudHlwZV9kZWNsYXJhdGlvbnNf
Zm9yX2RvbWFpbihkb21haW4pCiAgICAgICAgICAgICBmb3IgdHlwZV9kZWNsYXJhdGlvbiBpbiBb
ZGVjbCBmb3IgZGVjbCBpbiB0eXBlX2RlY2xhcmF0aW9ucyBpZiBHZW5lcmF0b3IudHlwZV9oYXNf
b3Blbl9maWVsZHMoZGVjbC50eXBlKV06CiAgICAgICAgICAgICAgICAgb3Blbl9tZW1iZXJzID0g
R2VuZXJhdG9yLm9wZW5fZmllbGRzKHR5cGVfZGVjbGFyYXRpb24pCiAgICAgICAgICAgICAgICAg
Zm9yIHR5cGVfbWVtYmVyIGluIHNvcnRlZChvcGVuX21lbWJlcnMsIGtleT1sYW1iZGEgbWVtYmVy
OiBtZW1iZXIubWVtYmVyX25hbWUpOgogICAgICAgICAgICAgICAgICAgICBmaWVsZF9uYW1lID0g
Jzo6Jy5qb2luKFsnSW5zcGVjdG9yJywgJ1Byb3RvY29sJywgZG9tYWluLmRvbWFpbl9uYW1lLCB1
Y2ZpcnN0KHR5cGVfZGVjbGFyYXRpb24udHlwZV9uYW1lKSwgdWNmaXJzdCh0eXBlX21lbWJlci5t
ZW1iZXJfbmFtZSldKQotICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ2NvbnN0IGNo
YXIqICVzID0gIiVzIjsnICUgKGZpZWxkX25hbWUsIHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lKSkK
KyAgICAgICAgICAgICAgICAgICAgZG9tYWluX2xpbmVzLmFwcGVuZCgnY29uc3QgY2hhciogJXMg
PSAiJXMiOycgJSAoZmllbGRfbmFtZSwgdHlwZV9tZW1iZXIubWVtYmVyX25hbWUpKQorICAgICAg
ICAgICAgaWYgbGVuKGRvbWFpbl9saW5lcyk6CisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5k
KHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZG9tYWluLmNvbmRpdGlvbiwgJ1xu
Jy5qb2luKGRvbWFpbl9saW5lcykpKQogCiAgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMp
CiAKQEAgLTE4OCwxNiArMTk2LDIyIEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNJbXBsZW1lbnRh
dGlvbkdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICBkZWNsYXJhdGlvbnNfdG9fZ2Vu
ZXJhdGUgPSBbZGVjbCBmb3IgZGVjbCBpbiB0eXBlX2RlY2xhcmF0aW9ucyBpZiBzZWxmLnR5cGVf
bmVlZHNfc2hhcGVfYXNzZXJ0aW9ucyhkZWNsLnR5cGUpXQogCiAgICAgICAgIGZvciB0eXBlX2Rl
Y2xhcmF0aW9uIGluIGRlY2xhcmF0aW9uc190b19nZW5lcmF0ZToKKyAgICAgICAgICAgIHR5cGVf
bGluZXMgPSBbXQogICAgICAgICAgICAgZm9yIHR5cGVfbWVtYmVyIGluIHR5cGVfZGVjbGFyYXRp
b24udHlwZV9tZW1iZXJzOgogICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodHlwZV9tZW1i
ZXIudHlwZSwgRW51bVR5cGUpOgotICAgICAgICAgICAgICAgICAgICBzZWN0aW9ucy5hcHBlbmQo
c2VsZi5fZ2VuZXJhdGVfYXNzZXJ0aW9uX2Zvcl9lbnVtKHR5cGVfbWVtYmVyLCB0eXBlX2RlY2xh
cmF0aW9uKSkKKyAgICAgICAgICAgICAgICAgICAgdHlwZV9saW5lcy5hcHBlbmQoc2VsZi5fZ2Vu
ZXJhdGVfYXNzZXJ0aW9uX2Zvcl9lbnVtKHR5cGVfbWVtYmVyLCB0eXBlX2RlY2xhcmF0aW9uKSkK
IAogICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh0eXBlX2RlY2xhcmF0aW9uLnR5cGUsIE9iamVj
dFR5cGUpOgotICAgICAgICAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9h
c3NlcnRpb25fZm9yX29iamVjdF9kZWNsYXJhdGlvbih0eXBlX2RlY2xhcmF0aW9uKSkKKyAgICAg
ICAgICAgICAgICB0eXBlX2xpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hc3NlcnRpb25fZm9y
X29iamVjdF9kZWNsYXJhdGlvbih0eXBlX2RlY2xhcmF0aW9uKSkKICAgICAgICAgICAgICAgICBp
ZiBHZW5lcmF0b3IudHlwZV9uZWVkc19ydW50aW1lX2Nhc3RzKHR5cGVfZGVjbGFyYXRpb24udHlw
ZSk6Ci0gICAgICAgICAgICAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9y
dW50aW1lX2Nhc3RfZm9yX29iamVjdF9kZWNsYXJhdGlvbih0eXBlX2RlY2xhcmF0aW9uKSkKKyAg
ICAgICAgICAgICAgICAgICAgdHlwZV9saW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfcnVudGlt
ZV9jYXN0X2Zvcl9vYmplY3RfZGVjbGFyYXRpb24odHlwZV9kZWNsYXJhdGlvbikpCisgICAgICAg
ICAgICBpZiBsZW4odHlwZV9saW5lcyk6CisgICAgICAgICAgICAgICAgc2VjdGlvbnMuYXBwZW5k
KHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24odHlwZV9kZWNsYXJhdGlvbi5jb25k
aXRpb24sICdcblxuJy5qb2luKHR5cGVfbGluZXMpKSkKIAotICAgICAgICByZXR1cm4gJ1xuXG4n
LmpvaW4oc2VjdGlvbnMpCisgICAgICAgIGlmIG5vdCBsZW4oc2VjdGlvbnMpOgorICAgICAgICAg
ICAgcmV0dXJuICcnCisKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9j
b25kaXRpb24oZG9tYWluLmNvbmRpdGlvbiwgJ1xuXG4nLmpvaW4oc2VjdGlvbnMpKQogCiAgICAg
ZGVmIF9nZW5lcmF0ZV9ydW50aW1lX2Nhc3RfZm9yX29iamVjdF9kZWNsYXJhdGlvbihzZWxmLCBv
YmplY3RfZGVjbGFyYXRpb24pOgogICAgICAgICBhcmdzID0gewpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfanNfYmFj
a2VuZF9jb21tYW5kcy5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2dlbmVyYXRlX2pzX2JhY2tlbmRfY29tbWFuZHMucHkKaW5kZXggYmJmNzZmOTI5
MTEzMmEzYTVkNTlhZThlMTYxNTRkODg5OWUwNmNhMi4uZWE2ZmZmYjIyMzgxYjAwNWU3YjcwYzA0
YTQwMjliNzU2OTY0OWVlMCAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfanNfYmFja2VuZF9jb21tYW5kcy5weQorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZV9qc19iYWNrZW5kX2NvbW1hbmRzLnB5CkBAIC00Nyw3ICs0Nyw3IEBAIGNsYXNzIEpTQmFja2Vu
ZENvbW1hbmRzR2VuZXJhdG9yKEdlbmVyYXRvcik6CiAgICAgICAgIEdlbmVyYXRvci5fX2luaXRf
XyhzZWxmLCAqYXJncywgKiprd2FyZ3MpCiAKICAgICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYp
OgotICAgICAgICByZXR1cm4gIkluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcyIKKyAgICAgICAg
cmV0dXJuICJJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMuaW4iCiAKICAgICBkZWYgc2hvdWxk
X2dlbmVyYXRlX2RvbWFpbihzZWxmLCBkb21haW4pOgogICAgICAgICB0eXBlX2RlY2xhcmF0aW9u
cyA9IHNlbGYudHlwZV9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbihkb21haW4pCkBAIC05Niw3ICs5
Niw3IEBAIGNsYXNzIEpTQmFja2VuZENvbW1hbmRzR2VuZXJhdG9yKEdlbmVyYXRvcik6CiAgICAg
ICAgICAgICAgICAgICAgICdlbnVtTmFtZSc6IGRlY2xhcmF0aW9uLnR5cGVfbmFtZSwKICAgICAg
ICAgICAgICAgICAgICAgJ2VudW1NYXAnOiAiLCAiLmpvaW4oWyclczogIiVzIicgJSAoR2VuZXJh
dG9yLnN0eWxpemVkX25hbWVfZm9yX2VudW1fdmFsdWUoZW51bV92YWx1ZSksIGVudW1fdmFsdWUp
IGZvciBlbnVtX3ZhbHVlIGluIGRlY2xhcmF0aW9uLnR5cGUuZW51bV92YWx1ZXMoKV0pCiAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnSW5zcGVjdG9yQmFj
a2VuZC5yZWdpc3RlckVudW0oIiUoZG9tYWluTmFtZSlzLiUoZW51bU5hbWUpcyIsIHslKGVudW1N
YXApc30pOycgJSBlbnVtX2FyZ3MpCisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYu
d3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZGVjbGFyYXRpb24uY29uZGl0aW9uLCAnSW5z
cGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIiUoZG9tYWluTmFtZSlzLiUoZW51bU5hbWUpcyIs
IHslKGVudW1NYXApc30pOycgJSBlbnVtX2FyZ3MpKQogCiAgICAgICAgICAgICBkZWYgaXNfYW5v
bnltb3VzX2VudW1fbWVtYmVyKHR5cGVfbWVtYmVyKToKICAgICAgICAgICAgICAgICByZXR1cm4g
aXNpbnN0YW5jZSh0eXBlX21lbWJlci50eXBlLCBFbnVtVHlwZSkgYW5kIHR5cGVfbWVtYmVyLnR5
cGUuaXNfYW5vbnltb3VzCkBAIC0xMjgsMTYgKzEyOCwxOCBAQCBjbGFzcyBKU0JhY2tlbmRDb21t
YW5kc0dlbmVyYXRvcihHZW5lcmF0b3IpOgogICAgICAgICAgICAgICAgICdjYWxsUGFyYW1zJzog
IiwgIi5qb2luKFtnZW5lcmF0ZV9wYXJhbWV0ZXJfb2JqZWN0KHBhcmFtZXRlcikgZm9yIHBhcmFt
ZXRlciBpbiBjb21tYW5kLmNhbGxfcGFyYW1ldGVyc10pLAogICAgICAgICAgICAgICAgICdyZXR1
cm5QYXJhbXMnOiAiLCAiLmpvaW4oWyciJXMiJyAlIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSBm
b3IgcGFyYW1ldGVyIGluIGNvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnNdKSwKICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNv
bW1hbmQoIiUoZG9tYWluTmFtZSlzLiUoY29tbWFuZE5hbWUpcyIsICUodGFyZ2V0VHlwZXMpcywg
WyUoY2FsbFBhcmFtcylzXSwgWyUocmV0dXJuUGFyYW1zKXNdKTsnICUgY29tbWFuZF9hcmdzKQor
ICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRp
b24oY29tbWFuZC5jb25kaXRpb24sICdJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgi
JShkb21haW5OYW1lKXMuJShjb21tYW5kTmFtZSlzIiwgJSh0YXJnZXRUeXBlcylzLCBbJShjYWxs
UGFyYW1zKXNdLCBbJShyZXR1cm5QYXJhbXMpc10pOycgJSBjb21tYW5kX2FyZ3MpKQogCiAgICAg
ICAgIGZvciBldmVudCBpbiBldmVudHM6CisgICAgICAgICAgICBldmVudF9saW5lcyA9IFtdCisK
ICAgICAgICAgICAgIGZvciBwYXJhbSBpbiBmaWx0ZXIoaXNfYW5vbnltb3VzX2VudW1fcGFyYW0s
IGV2ZW50LmV2ZW50X3BhcmFtZXRlcnMpOgogICAgICAgICAgICAgICAgIGVudW1fYXJncyA9IHsK
ICAgICAgICAgICAgICAgICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUsCiAg
ICAgICAgICAgICAgICAgICAgICdlbnVtTmFtZSc6ICclcyVzJyAlICh1Y2ZpcnN0KGV2ZW50LmV2
ZW50X25hbWUpLCB1Y2ZpcnN0KHBhcmFtLnBhcmFtZXRlcl9uYW1lKSksCiAgICAgICAgICAgICAg
ICAgICAgICdlbnVtTWFwJzogIiwgIi5qb2luKFsnJXM6ICIlcyInICUgKEdlbmVyYXRvci5zdHls
aXplZF9uYW1lX2Zvcl9lbnVtX3ZhbHVlKGVudW1fdmFsdWUpLCBlbnVtX3ZhbHVlKSBmb3IgZW51
bV92YWx1ZSBpbiBwYXJhbS50eXBlLmVudW1fdmFsdWVzKCldKSwKICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVy
RW51bSgiJShkb21haW5OYW1lKXMuJShlbnVtTmFtZSlzIiwgeyUoZW51bU1hcClzfSk7JyAlIGVu
dW1fYXJncykKKyAgICAgICAgICAgICAgICBldmVudF9saW5lcy5hcHBlbmQoJ0luc3BlY3RvckJh
Y2tlbmQucmVnaXN0ZXJFbnVtKCIlKGRvbWFpbk5hbWUpcy4lKGVudW1OYW1lKXMiLCB7JShlbnVt
TWFwKXN9KTsnICUgZW51bV9hcmdzKQogCiAgICAgICAgICAgICBldmVudF9hcmdzID0gewogICAg
ICAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLApAQCAtMTQ1LDcg
KzE0Nyw5IEBAIGNsYXNzIEpTQmFja2VuZENvbW1hbmRzR2VuZXJhdG9yKEdlbmVyYXRvcik6CiAg
ICAgICAgICAgICAgICAgJ3RhcmdldFR5cGVzJzoganNvbi5kdW1wcyhldmVudC50YXJnZXRfdHlw
ZXMpLAogICAgICAgICAgICAgICAgICdwYXJhbXMnOiAiLCAiLmpvaW4oWyciJXMiJyAlIHBhcmFt
ZXRlci5wYXJhbWV0ZXJfbmFtZSBmb3IgcGFyYW1ldGVyIGluIGV2ZW50LmV2ZW50X3BhcmFtZXRl
cnNdKSwKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnSW5zcGVjdG9y
QmFja2VuZC5yZWdpc3RlckV2ZW50KCIlKGRvbWFpbk5hbWUpcy4lKGV2ZW50TmFtZSlzIiwgJSh0
YXJnZXRUeXBlcylzLCBbJShwYXJhbXMpc10pOycgJSBldmVudF9hcmdzKQorICAgICAgICAgICAg
ZXZlbnRfbGluZXMuYXBwZW5kKCdJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnQoIiUoZG9t
YWluTmFtZSlzLiUoZXZlbnROYW1lKXMiLCAlKHRhcmdldFR5cGVzKXMsIFslKHBhcmFtcylzXSk7
JyAlIGV2ZW50X2FyZ3MpCisKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLndyYXBfd2l0
aF9ndWFyZF9mb3JfY29uZGl0aW9uKGV2ZW50LmNvbmRpdGlvbiwgJ1xuJy5qb2luKGV2ZW50X2xp
bmVzKSkpCiAKICAgICAgICAgaGFzX2FzeW5jX2NvbW1hbmRzID0gYW55KFtjb21tYW5kLmlzX2Fz
eW5jIGZvciBjb21tYW5kIGluIGNvbW1hbmRzXSkKICAgICAgICAgaWYgbGVuKGV2ZW50cykgPiAw
IG9yIGhhc19hc3luY19jb21tYW5kczoKQEAgLTE2MCw0ICsxNjQsNCBAQCBjbGFzcyBKU0JhY2tl
bmRDb21tYW5kc0dlbmVyYXRvcihHZW5lcmF0b3IpOgogICAgICAgICB9CiAgICAgICAgIGxpbmVz
LmFwcGVuZCgnSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiJShkb21haW5OYW1lKXMi
LCAlKGRlYnVnZ2FibGVUeXBlcylzKTsnICUgYWN0aXZhdGVfYXJncykKIAotICAgICAgICByZXR1
cm4gIlxuIi5qb2luKGxpbmVzKQorICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRf
Zm9yX2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9uLCAiXG4iLmpvaW4obGluZXMpKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2Vu
ZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rp
c3BhdGNoZXJfaGVhZGVyLnB5CmluZGV4IGVkOGNjNTk2ZDMxMDMwM2JjMmYxNmI3Y2E1YmY3MDY0
N2MwYjQ0MGYuLmVhMmZjMTEyNzRlMjU0NWJkNTcxMmIwZmU0NzgxMzU4YTEyZmI0YmUgMTAwNzU1
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dl
bmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2JhY2tl
bmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKQEAgLTk5LDcgKzk5LDcgQEAgY2xhc3MgT2JqQ0JhY2tl
bmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogICAgICAgICAgICAg
J29iamNQcmVmaXgnOiBzZWxmLm9iamNfcHJlZml4KCksCiAgICAgICAgIH0KIAotICAgICAgICBy
ZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4sIFRlbXBsYXRlKE9i
akNUZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNoZXJIZWFkZXJEb21haW5IYW5kbGVyT2JqQ0RlY2xh
cmF0aW9uKS5zdWJzdGl0dXRlKE5vbmUsICoqaGFuZGxlcl9hcmdzKSkKKyAgICAgICAgcmV0dXJu
IHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZG9tYWluLmNvbmRpdGlvbiwgVGVt
cGxhdGUoT2JqQ1RlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hlckhlYWRlckRvbWFpbkhhbmRsZXJP
YmpDRGVjbGFyYXRpb24pLnN1YnN0aXR1dGUoTm9uZSwgKipoYW5kbGVyX2FyZ3MpKQogCiAgICAg
ZGVmIF9nZW5lcmF0ZV9vYmpjX2hhbmRsZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQoc2VsZiwg
Y29tbWFuZCk6CiAgICAgICAgIGxpbmVzID0gW10KQEAgLTExMiw0ICsxMTIsNCBAQCBjbGFzcyBP
YmpDQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAg
ICAgICAgICAncGFyYW1ldGVycyc6ICcsICcuam9pbihwYXJhbWV0ZXJzKSwKICAgICAgICAgfQog
ICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICB2b2lkICUoY29tbWFuZE5hbWUpcyglKHBhcmFtZXRl
cnMpcykgZmluYWw7JyAlIGNvbW1hbmRfYXJncykKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihs
aW5lcykKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24o
Y29tbWFuZC5jb25kaXRpb24sICdcbicuam9pbihsaW5lcykpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2Jh
Y2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRj
aGVyX2ltcGxlbWVudGF0aW9uLnB5CmluZGV4IGExYjllMTc5NzA1ODEyNWJjNzdmZGQ1MmZkNTU4
NDI4YjgzYmQyMDcuLmY1ZWU4ZTU4Mzk4ZDY5YmFlNGJlYjRjMTg2NzA2M2NjZDUyMjA5ZWMgMTAw
NzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L2dlbmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CkBAIC04Niw3ICs4Niw3
IEBAIGNsYXNzIE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKE9i
akNHZW5lcmF0b3IpOgogICAgICAgICBmb3IgY29tbWFuZCBpbiBjb21tYW5kczoKICAgICAgICAg
ICAgIGNvbW1hbmRfZGVjbGFyYXRpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9oYW5kbGVyX2lt
cGxlbWVudGF0aW9uX2Zvcl9jb21tYW5kKGRvbWFpbiwgY29tbWFuZCkpCiAKLSAgICAgICAgcmV0
dXJuICdcbicuam9pbihjb21tYW5kX2RlY2xhcmF0aW9ucykKKyAgICAgICAgcmV0dXJuIHNlbGYu
d3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZG9tYWluLmNvbmRpdGlvbiwgJ1xuXG4nLmpv
aW4oY29tbWFuZF9kZWNsYXJhdGlvbnMpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9oYW5kbGVyX2lt
cGxlbWVudGF0aW9uX2Zvcl9jb21tYW5kKHNlbGYsIGRvbWFpbiwgY29tbWFuZCk6CiAgICAgICAg
IGxpbmVzID0gW10KQEAgLTEwNCw3ICsxMDQsNyBAQCBjbGFzcyBPYmpDQmFja2VuZERpc3BhdGNo
ZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKICAgICAgICAgICAgICdp
bnZvY2F0aW9uJzogc2VsZi5fZ2VuZXJhdGVfaW52b2NhdGlvbl9mb3JfY29tbWFuZChkb21haW4s
IGNvbW1hbmQpLAogICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1
YXJkX2Zvcl9kb21haW4oZG9tYWluLCBUZW1wbGF0ZShPYmpDVGVtcGxhdGVzLkJhY2tlbmREaXNw
YXRjaGVySGVhZGVyRG9tYWluSGFuZGxlckltcGxlbWVudGF0aW9uKS5zdWJzdGl0dXRlKE5vbmUs
ICoqY29tbWFuZF9hcmdzKSkKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zv
cl9jb25kaXRpb24oY29tbWFuZC5jb25kaXRpb24sIFRlbXBsYXRlKE9iakNUZW1wbGF0ZXMuQmFj
a2VuZERpc3BhdGNoZXJIZWFkZXJEb21haW5IYW5kbGVySW1wbGVtZW50YXRpb24pLnN1YnN0aXR1
dGUoTm9uZSwgKipjb21tYW5kX2FyZ3MpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9yZXNwb25kc190
b19zZWxlY3Rvcl9mb3JfY29tbWFuZChzZWxmLCBkb21haW4sIGNvbW1hbmQpOgogICAgICAgICBy
ZXR1cm4gJ1ttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoJXNXaXRoRXJy
b3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6JXMpXScgJSAoY29tbWFuZC5jb21tYW5kX25hbWUs
ICcnLmpvaW4obWFwKGxhbWJkYSBwYXJhbWV0ZXI6ICclczonICUgcGFyYW1ldGVyLnBhcmFtZXRl
cl9uYW1lLCBjb21tYW5kLmNhbGxfcGFyYW1ldGVycykpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19oZWFk
ZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9n
ZW5lcmF0ZV9vYmpjX2hlYWRlci5weQppbmRleCAxNWZiNzRiZThiZmIxNGM0MTlmYmRjM2VkOTdl
ZGNjMjYwZmI0OWU3Li4xNWJmNjFkMmQ0NTM3OTllYTUxNjQ4Y2JjYzA3MjZmZDQwMTg1MmUxIDEw
MDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0ZV9vYmpjX2hlYWRlci5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2hlYWRlci5weQpAQCAtMzEsMTIg
KzMxLDEyIEBAIGZyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQogCiB0cnk6CiAgICAgZnJvbSAu
Z2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKLSAgICBmcm9tIC5tb2RlbHMgaW1w
b3J0IE9iamVjdFR5cGUsIEVudW1UeXBlLCBQbGF0Zm9ybXMKKyAgICBmcm9tIC5tb2RlbHMgaW1w
b3J0IE9iamVjdFR5cGUsIEVudW1UeXBlCiAgICAgZnJvbSAub2JqY19nZW5lcmF0b3IgaW1wb3J0
IE9iakNHZW5lcmF0b3IsIGpvaW5fdHlwZV9hbmRfbmFtZQogICAgIGZyb20gLm9iamNfZ2VuZXJh
dG9yX3RlbXBsYXRlcyBpbXBvcnQgT2JqQ0dlbmVyYXRvclRlbXBsYXRlcyBhcyBPYmpDVGVtcGxh
dGVzCiBleGNlcHQgVmFsdWVFcnJvcjoKICAgICBmcm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJh
dG9yLCB1Y2ZpcnN0Ci0gICAgZnJvbSBtb2RlbHMgaW1wb3J0IE9iamVjdFR5cGUsIEVudW1UeXBl
LCBQbGF0Zm9ybXMKKyAgICBmcm9tIG1vZGVscyBpbXBvcnQgT2JqZWN0VHlwZSwgRW51bVR5cGUK
ICAgICBmcm9tIG9iamNfZ2VuZXJhdG9yIGltcG9ydCBPYmpDR2VuZXJhdG9yLCBqb2luX3R5cGVf
YW5kX25hbWUKICAgICBmcm9tIG9iamNfZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgT2JqQ0dl
bmVyYXRvclRlbXBsYXRlcyBhcyBPYmpDVGVtcGxhdGVzCiAKQEAgLTQ0LDcgKzQ0LDcgQEAgbG9n
ID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCiAKIAogZGVmIGFkZF9uZXdsaW5lKGxpbmVz
KToKLSAgICBpZiBsaW5lcyBhbmQgbGluZXNbLTFdID09ICcnOgorICAgIGlmIG5vdCBsZW4obGlu
ZXMpIG9yIGxpbmVzWy0xXSA9PSAnJzoKICAgICAgICAgcmV0dXJuCiAgICAgbGluZXMuYXBwZW5k
KCcnKQogCkBAIC04Nyw3ICs4Nyw2IEBAIGNsYXNzIE9iakNIZWFkZXJHZW5lcmF0b3IoT2JqQ0dl
bmVyYXRvcik6CiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX2xpY2Vuc2Uo
KSkKICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKE9iakNUZW1wbGF0ZXMuSGVhZGVy
UHJlbHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlclByZWx1ZGVfYXJncykpCiAgICAgICAg
IHNlY3Rpb25zLmFwcGVuZCgnXG4nLmpvaW4oW19mIGZvciBfZiBpbiBtYXAoc2VsZi5fZ2VuZXJh
dGVfZm9yd2FyZF9kZWNsYXJhdGlvbnMsIHR5cGVfZG9tYWlucykgaWYgX2ZdKSkKLSAgICAgICAg
c2VjdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2VudW1fZm9yX3BsYXRmb3JtcygpKQogICAg
ICAgICBzZWN0aW9ucy5hcHBlbmQoJ1xuJy5qb2luKFtfZiBmb3IgX2YgaW4gbWFwKHNlbGYuX2dl
bmVyYXRlX2VudW1zLCB0eXBlX2RvbWFpbnMpIGlmIF9mXSkpCiAgICAgICAgIHNlY3Rpb25zLmFw
cGVuZCgnXG4nLmpvaW4oW19mIGZvciBfZiBpbiBtYXAoc2VsZi5fZ2VuZXJhdGVfdHlwZXMsIHR5
cGVfZG9tYWlucykgaWYgX2ZdKSkKIApAQCAtMTAzLDQyICsxMDIsNTEgQEAgY2xhc3MgT2JqQ0hl
YWRlckdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKICAgICAgICAgZm9yIGRlY2xhcmF0aW9uIGlu
IHNlbGYudHlwZV9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbihkb21haW4pOgogICAgICAgICAgICAg
aWYgKGlzaW5zdGFuY2UoZGVjbGFyYXRpb24udHlwZSwgT2JqZWN0VHlwZSkpOgogICAgICAgICAg
ICAgICAgIG9iamNfbmFtZSA9IHNlbGYub2JqY19uYW1lX2Zvcl90eXBlKGRlY2xhcmF0aW9uLnR5
cGUpCi0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdAY2xhc3MgJXM7JyAlIG9iamNfbmFt
ZSkKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKyAgICAgICAgICAgICAgICBsaW5l
cy5hcHBlbmQoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihkZWNsYXJhdGlvbi5j
b25kaXRpb24sICdAY2xhc3MgJXM7JyAlIG9iamNfbmFtZSkpCisgICAgICAgIHJldHVybiBzZWxm
LndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRvbWFpbi5jb25kaXRpb24sICdcbicuam9p
bihsaW5lcykpCiAKICAgICBkZWYgX2dlbmVyYXRlX2VudW1zKHNlbGYsIGRvbWFpbik6CiAgICAg
ICAgIGxpbmVzID0gW10KIAogICAgICAgICAjIFR5cGUgZW51bXMgYW5kIG1lbWJlciBlbnVtcy4K
ICAgICAgICAgZm9yIGRlY2xhcmF0aW9uIGluIHNlbGYudHlwZV9kZWNsYXJhdGlvbnNfZm9yX2Rv
bWFpbihkb21haW4pOgorICAgICAgICAgICAgZGVjbGFyYXRpb25fbGluZXMgPSBbXQogICAgICAg
ICAgICAgaWYgaXNpbnN0YW5jZShkZWNsYXJhdGlvbi50eXBlLCBFbnVtVHlwZSk6Ci0gICAgICAg
ICAgICAgICAgYWRkX25ld2xpbmUobGluZXMpCi0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5k
KHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2Zvcl9kZWNsYXJhdGlvbihkb21haW4sIGRl
Y2xhcmF0aW9uKSkKKyAgICAgICAgICAgICAgICBhZGRfbmV3bGluZShkZWNsYXJhdGlvbl9saW5l
cykKKyAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbl9saW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJh
dGVfYW5vbnltb3VzX2VudW1fZm9yX2RlY2xhcmF0aW9uKGRvbWFpbiwgZGVjbGFyYXRpb24pKQog
ICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBmb3IgbWVtYmVyIGluIGRlY2xhcmF0
aW9uLnR5cGVfbWVtYmVyczoKICAgICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShtZW1i
ZXIudHlwZSwgRW51bVR5cGUpIGFuZCBtZW1iZXIudHlwZS5pc19hbm9ueW1vdXM6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBhZGRfbmV3bGluZShsaW5lcykKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfbWVtYmVy
KGRvbWFpbiwgZGVjbGFyYXRpb24sIG1lbWJlcikpCisgICAgICAgICAgICAgICAgICAgICAgICBh
ZGRfbmV3bGluZShkZWNsYXJhdGlvbl9saW5lcykKKyAgICAgICAgICAgICAgICAgICAgICAgIGRl
Y2xhcmF0aW9uX2xpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3Jf
bWVtYmVyKGRvbWFpbiwgZGVjbGFyYXRpb24sIG1lbWJlcikpCisgICAgICAgICAgICBpZiBsZW4o
ZGVjbGFyYXRpb25fbGluZXMpOgorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLndy
YXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRlY2xhcmF0aW9uLmNvbmRpdGlvbiwgJ1xuXG4n
LmpvaW4oZGVjbGFyYXRpb25fbGluZXMpKSkKIAogICAgICAgICAjIEFub255bW91cyBjb21tYW5k
IGVudW1zLgogICAgICAgICBmb3IgY29tbWFuZCBpbiBzZWxmLmNvbW1hbmRzX2Zvcl9kb21haW4o
ZG9tYWluKToKKyAgICAgICAgICAgIGNvbW1hbmRfbGluZXMgPSBbXQogICAgICAgICAgICAgZm9y
IHBhcmFtZXRlciBpbiBjb21tYW5kLmNhbGxfcGFyYW1ldGVyczoKICAgICAgICAgICAgICAgICBp
ZiBpc2luc3RhbmNlKHBhcmFtZXRlci50eXBlLCBFbnVtVHlwZSkgYW5kIHBhcmFtZXRlci50eXBl
LmlzX2Fub255bW91czoKLSAgICAgICAgICAgICAgICAgICAgYWRkX25ld2xpbmUobGluZXMpCi0g
ICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNf
ZW51bV9mb3JfcGFyYW1ldGVyKGRvbWFpbiwgY29tbWFuZC5jb21tYW5kX25hbWUsIHBhcmFtZXRl
cikpCisgICAgICAgICAgICAgICAgICAgIGFkZF9uZXdsaW5lKGNvbW1hbmRfbGluZXMpCisgICAg
ICAgICAgICAgICAgICAgIGNvbW1hbmRfbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255
bW91c19lbnVtX2Zvcl9wYXJhbWV0ZXIoZG9tYWluLCBjb21tYW5kLmNvbW1hbmRfbmFtZSwgcGFy
YW1ldGVyKSkKICAgICAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5yZXR1cm5fcGFy
YW1ldGVyczoKICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHBhcmFtZXRlci50eXBlLCBF
bnVtVHlwZSkgYW5kIHBhcmFtZXRlci50eXBlLmlzX2Fub255bW91czoKLSAgICAgICAgICAgICAg
ICAgICAgYWRkX25ld2xpbmUobGluZXMpCi0gICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVu
ZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfcGFyYW1ldGVyKGRvbWFpbiwgY29t
bWFuZC5jb21tYW5kX25hbWUsIHBhcmFtZXRlcikpCisgICAgICAgICAgICAgICAgICAgIGFkZF9u
ZXdsaW5lKGNvbW1hbmRfbGluZXMpCisgICAgICAgICAgICAgICAgICAgIGNvbW1hbmRfbGluZXMu
YXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2Zvcl9wYXJhbWV0ZXIoZG9tYWlu
LCBjb21tYW5kLmNvbW1hbmRfbmFtZSwgcGFyYW1ldGVyKSkKKyAgICAgICAgICAgIGlmIGxlbihj
b21tYW5kX2xpbmVzKToKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi53cmFwX3dp
dGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihjb21tYW5kLmNvbmRpdGlvbiwgJ1xuXG4nLmpvaW4oY29t
bWFuZF9saW5lcykpKQogCiAgICAgICAgICMgQW5vbnltb3VzIGV2ZW50IGVudW1zLgogICAgICAg
ICBmb3IgZXZlbnQgaW4gc2VsZi5ldmVudHNfZm9yX2RvbWFpbihkb21haW4pOgorICAgICAgICAg
ICAgZXZlbnRfbGluZXMgPSBbXQogICAgICAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBldmVudC5l
dmVudF9wYXJhbWV0ZXJzOgogICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocGFyYW1ldGVy
LnR5cGUsIEVudW1UeXBlKSBhbmQgcGFyYW1ldGVyLnR5cGUuaXNfYW5vbnltb3VzOgotICAgICAg
ICAgICAgICAgICAgICBhZGRfbmV3bGluZShsaW5lcykKLSAgICAgICAgICAgICAgICAgICAgbGlu
ZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2Zvcl9wYXJhbWV0ZXIoZG9t
YWluLCBldmVudC5ldmVudF9uYW1lLCBwYXJhbWV0ZXIpKQorICAgICAgICAgICAgICAgICAgICBh
ZGRfbmV3bGluZShldmVudF9saW5lcykKKyAgICAgICAgICAgICAgICAgICAgZXZlbnRfbGluZXMu
YXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2Zvcl9wYXJhbWV0ZXIoZG9tYWlu
LCBldmVudC5ldmVudF9uYW1lLCBwYXJhbWV0ZXIpKQorICAgICAgICAgICAgaWYgbGVuKGV2ZW50
X2xpbmVzKToKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi53cmFwX3dpdGhfZ3Vh
cmRfZm9yX2NvbmRpdGlvbihldmVudC5jb25kaXRpb24sICdcblxuJy5qb2luKGV2ZW50X2xpbmVz
KSkpCiAKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKyAgICAgICAgcmV0dXJuIHNl
bGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZG9tYWluLmNvbmRpdGlvbiwgJ1xuXG4n
LmpvaW4obGluZXMpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV90eXBlcyhzZWxmLCBkb21haW4pOgog
ICAgICAgICBsaW5lcyA9IFtdCkBAIC0xNDcsMTIgKzE1NSw3IEBAIGNsYXNzIE9iakNIZWFkZXJH
ZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGRlY2xh
cmF0aW9uLnR5cGUsIE9iamVjdFR5cGUpOgogICAgICAgICAgICAgICAgIGFkZF9uZXdsaW5lKGxp
bmVzKQogICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV90eXBlX2lu
dGVyZmFjZShkb21haW4sIGRlY2xhcmF0aW9uKSkKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihs
aW5lcykKLQotICAgIGRlZiBfZ2VuZXJhdGVfZW51bV9mb3JfcGxhdGZvcm1zKHNlbGYpOgotICAg
ICAgICBvYmpjX2VudW1fbmFtZSA9ICclc1BsYXRmb3JtJyAlIHNlbGYub2JqY19wcmVmaXgoKQot
ICAgICAgICBlbnVtX3ZhbHVlcyA9IFtwbGF0Zm9ybS5uYW1lIGZvciBwbGF0Zm9ybSBpbiBQbGF0
Zm9ybXNdCi0gICAgICAgIHJldHVybiBzZWxmLl9nZW5lcmF0ZV9lbnVtKG9iamNfZW51bV9uYW1l
LCBlbnVtX3ZhbHVlcykKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9j
b25kaXRpb24oZG9tYWluLmNvbmRpdGlvbiwgJ1xuJy5qb2luKGxpbmVzKSkKIAogICAgIGRlZiBf
Z2VuZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX2RlY2xhcmF0aW9uKHNlbGYsIGRvbWFpbiwgZGVj
bGFyYXRpb24pOgogICAgICAgICBvYmpjX2VudW1fbmFtZSA9IHNlbGYub2JqY19lbnVtX25hbWVf
Zm9yX2Fub255bW91c19lbnVtX2RlY2xhcmF0aW9uKGRlY2xhcmF0aW9uKQpAQCAtMTk0LDcgKzE5
Nyw3IEBAIGNsYXNzIE9iakNIZWFkZXJHZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgICAg
IGZvciBtZW1iZXIgaW4gb3B0aW9uYWxfbWVtYmVyczoKICAgICAgICAgICAgIGxpbmVzLmFwcGVu
ZCgnLyogb3B0aW9uYWwgKi8gJyArIHNlbGYuX2dlbmVyYXRlX21lbWJlcl9wcm9wZXJ0eShkZWNs
YXJhdGlvbiwgbWVtYmVyKSkKICAgICAgICAgbGluZXMuYXBwZW5kKCdAZW5kJykKLSAgICAgICAg
cmV0dXJuICdcbicuam9pbihsaW5lcykKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1
YXJkX2Zvcl9jb25kaXRpb24oZGVjbGFyYXRpb24uY29uZGl0aW9uLCAnXG4nLmpvaW4obGluZXMp
KQogCiAgICAgZGVmIF9nZW5lcmF0ZV9pbml0X21ldGhvZF9mb3JfcmVxdWlyZWRfbWVtYmVycyhz
ZWxmLCBkb21haW4sIGRlY2xhcmF0aW9uLCByZXF1aXJlZF9tZW1iZXJzKToKICAgICAgICAgcGFp
cnMgPSBbXQpAQCAtMjE5LDcgKzIyMiw3IEBAIGNsYXNzIE9iakNIZWFkZXJHZW5lcmF0b3IoT2Jq
Q0dlbmVyYXRvcik6CiAgICAgICAgICAgICBmb3IgY29tbWFuZCBpbiBzZWxmLmNvbW1hbmRzX2Zv
cl9kb21haW4oZG9tYWluKToKICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2Vu
ZXJhdGVfc2luZ2xlX2NvbW1hbmRfcHJvdG9jb2woZG9tYWluLCBjb21tYW5kKSkKICAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZCgnQGVuZCcpCi0gICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMp
CisgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRvbWFp
bi5jb25kaXRpb24sICdcbicuam9pbihsaW5lcykpCiAKICAgICBkZWYgX2dlbmVyYXRlX3Npbmds
ZV9jb21tYW5kX3Byb3RvY29sKHNlbGYsIGRvbWFpbiwgY29tbWFuZCk6CiAgICAgICAgIHBhaXJz
ID0gW10KQEAgLTIyOCw3ICsyMzEsNyBAQCBjbGFzcyBPYmpDSGVhZGVyR2VuZXJhdG9yKE9iakNH
ZW5lcmF0b3IpOgogICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQuY2FsbF9wYXJhbWV0
ZXJzOgogICAgICAgICAgICAgcGFyYW1fbmFtZSA9IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQog
ICAgICAgICAgICAgcGFpcnMuYXBwZW5kKCclczooJXMpJXMnICUgKHBhcmFtX25hbWUsIHNlbGYu
b2JqY190eXBlX2Zvcl9wYXJhbShkb21haW4sIGNvbW1hbmQuY29tbWFuZF9uYW1lLCBwYXJhbWV0
ZXIpLCBwYXJhbV9uYW1lKSkKLSAgICAgICAgcmV0dXJuICctICh2b2lkKSVzV2l0aCVzOycgJSAo
Y29tbWFuZC5jb21tYW5kX25hbWUsICcgJy5qb2luKHBhaXJzKSkKKyAgICAgICAgcmV0dXJuIHNl
bGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oY29tbWFuZC5jb25kaXRpb24sICctICh2
b2lkKSVzV2l0aCVzOycgJSAoY29tbWFuZC5jb21tYW5kX25hbWUsICcgJy5qb2luKHBhaXJzKSkp
CiAKICAgICBkZWYgX2NhbGxiYWNrX2Jsb2NrX2Zvcl9jb21tYW5kKHNlbGYsIGRvbWFpbiwgY29t
bWFuZCk6CiAgICAgICAgIHBhaXJzID0gW10KQEAgLTI0OSw3ICsyNTIsNyBAQCBjbGFzcyBPYmpD
SGVhZGVyR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogICAgICAgICAgICAgZm9yIGV2ZW50IGlu
IGV2ZW50czoKICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfc2lu
Z2xlX2V2ZW50X2ludGVyZmFjZShkb21haW4sIGV2ZW50KSkKICAgICAgICAgICAgIGxpbmVzLmFw
cGVuZCgnQGVuZCcpCi0gICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisgICAgICAgIHJl
dHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRvbWFpbi5jb25kaXRpb24s
ICdcbicuam9pbihsaW5lcykpCiAKICAgICBkZWYgX2dlbmVyYXRlX3NpbmdsZV9ldmVudF9pbnRl
cmZhY2Uoc2VsZiwgZG9tYWluLCBldmVudCk6CiAgICAgICAgIGlmIG5vdCBldmVudC5ldmVudF9w
YXJhbWV0ZXJzOgpAQCAtMjU5LDQgKzI2Miw0IEBAIGNsYXNzIE9iakNIZWFkZXJHZW5lcmF0b3Io
T2JqQ0dlbmVyYXRvcik6CiAgICAgICAgICAgICBwYXJhbV9uYW1lID0gcGFyYW1ldGVyLnBhcmFt
ZXRlcl9uYW1lCiAgICAgICAgICAgICBwYWlycy5hcHBlbmQoJyVzOiglcyklcycgJSAocGFyYW1f
bmFtZSwgc2VsZi5vYmpjX3R5cGVfZm9yX3BhcmFtKGRvbWFpbiwgZXZlbnQuZXZlbnRfbmFtZSwg
cGFyYW1ldGVyKSwgcGFyYW1fbmFtZSkpCiAgICAgICAgIHBhaXJzWzBdID0gdWNmaXJzdChwYWly
c1swXSkKLSAgICAgICAgcmV0dXJuICctICh2b2lkKSVzV2l0aCVzOycgJSAoZXZlbnQuZXZlbnRf
bmFtZSwgJyAnLmpvaW4ocGFpcnMpKQorICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3Vh
cmRfZm9yX2NvbmRpdGlvbihldmVudC5jb25kaXRpb24sICctICh2b2lkKSVzV2l0aCVzOycgJSAo
ZXZlbnQuZXZlbnRfbmFtZSwgJyAnLmpvaW4ocGFpcnMpKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfcHJv
dG9jb2xfdHlwZV9jb252ZXJzaW9uc19oZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVfY29u
dmVyc2lvbnNfaGVhZGVyLnB5CmluZGV4IDI1NzFmNGIyMmE4NjlkODU3NDQ4YTI4ODU1MjFiOWYy
MDQwYzE5ODYuLjVjNTJjZGVhOWIzNDIwYmY1ODcwYWQ5YjIxMGE1NGU0ODYzZTA2NzAgMTAwNzU1
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dl
bmVyYXRlX29iamNfcHJvdG9jb2xfdHlwZV9jb252ZXJzaW9uc19oZWFkZXIucHkKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2Jq
Y19wcm90b2NvbF90eXBlX2NvbnZlcnNpb25zX2hlYWRlci5weQpAQCAtMzEsMTIgKzMxLDEyIEBA
IGZyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQogCiB0cnk6CiAgICAgZnJvbSAuZ2VuZXJhdG9y
IGltcG9ydCBHZW5lcmF0b3IKLSAgICBmcm9tIC5tb2RlbHMgaW1wb3J0IEVudW1UeXBlLCBGcmFt
ZXdvcmtzLCBQbGF0Zm9ybXMKKyAgICBmcm9tIC5tb2RlbHMgaW1wb3J0IEVudW1UeXBlLCBGcmFt
ZXdvcmtzCiAgICAgZnJvbSAub2JqY19nZW5lcmF0b3IgaW1wb3J0IE9iakNHZW5lcmF0b3IKICAg
ICBmcm9tIC5vYmpjX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IE9iakNHZW5lcmF0b3JUZW1w
bGF0ZXMgYXMgT2JqQ1RlbXBsYXRlcwogZXhjZXB0IFZhbHVlRXJyb3I6CiAgICAgZnJvbSBnZW5l
cmF0b3IgaW1wb3J0IEdlbmVyYXRvcgotICAgIGZyb20gbW9kZWxzIGltcG9ydCBFbnVtVHlwZSwg
RnJhbWV3b3JrcywgUGxhdGZvcm1zCisgICAgZnJvbSBtb2RlbHMgaW1wb3J0IEVudW1UeXBlLCBG
cmFtZXdvcmtzCiAgICAgZnJvbSBvYmpjX2dlbmVyYXRvciBpbXBvcnQgT2JqQ0dlbmVyYXRvcgog
ICAgIGZyb20gb2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBPYmpDR2VuZXJhdG9yVGVt
cGxhdGVzIGFzIE9iakNUZW1wbGF0ZXMKIApAQCAtNDQsNyArNDQsNyBAQCBsb2cgPSBsb2dnaW5n
LmdldExvZ2dlcignZ2xvYmFsJykKIAogCiBkZWYgYWRkX25ld2xpbmUobGluZXMpOgotICAgIGlm
IGxpbmVzIGFuZCBsaW5lc1stMV0gPT0gJyc6CisgICAgaWYgbm90IGxlbihsaW5lcykgb3IgbGlu
ZXNbLTFdID09ICcnOgogICAgICAgICByZXR1cm4KICAgICBsaW5lcy5hcHBlbmQoJycpCiAKQEAg
LTc1LDcgKzc1LDYgQEAgY2xhc3MgT2JqQ1Byb3RvY29sVHlwZUNvbnZlcnNpb25zSGVhZGVyR2Vu
ZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5l
cmF0ZV9saWNlbnNlKCkpCiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShPYmpDVGVt
cGxhdGVzLlR5cGVDb252ZXJzaW9uc0hlYWRlclByZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipo
ZWFkZXJfYXJncykpCiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShPYmpDVGVtcGxh
dGVzLlR5cGVDb252ZXJzaW9uc0hlYWRlclN0YW5kYXJkKS5zdWJzdGl0dXRlKE5vbmUpKQotICAg
ICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfZW51bV9jb252ZXJzaW9uX2Zvcl9w
bGF0Zm9ybXMoKSkKICAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKGxpc3QobWFwKHNlbGYuX2dlbmVy
YXRlX2VudW1fY29udmVyc2lvbl9mdW5jdGlvbnMsIGRvbWFpbnMpKSkKICAgICAgICAgc2VjdGlv
bnMuYXBwZW5kKFRlbXBsYXRlKE9iakNUZW1wbGF0ZXMuVHlwZUNvbnZlcnNpb25zSGVhZGVyUG9z
dGx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCiAgICAgICAgIHJldHVybiAn
XG5cbicuam9pbihzZWN0aW9ucykKQEAgLTg1LDQyICs4NCw0MyBAQCBjbGFzcyBPYmpDUHJvdG9j
b2xUeXBlQ29udmVyc2lvbnNIZWFkZXJHZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAKICAgICAg
ICAgIyBUeXBlIGVudW1zIGFuZCBtZW1iZXIgZW51bXMuCiAgICAgICAgIGZvciBkZWNsYXJhdGlv
biBpbiBzZWxmLnR5cGVfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4oZG9tYWluKToKKyAgICAgICAg
ICAgIGRlY2xhcmF0aW9uX2xpbmVzID0gW10KICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZGVj
bGFyYXRpb24udHlwZSwgRW51bVR5cGUpOgotICAgICAgICAgICAgICAgIGFkZF9uZXdsaW5lKGxp
bmVzKQotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1v
dXNfZW51bV9jb252ZXJzaW9uX2Zvcl9kZWNsYXJhdGlvbihkb21haW4sIGRlY2xhcmF0aW9uKSkK
KyAgICAgICAgICAgICAgICBhZGRfbmV3bGluZShkZWNsYXJhdGlvbl9saW5lcykKKyAgICAgICAg
ICAgICAgICBkZWNsYXJhdGlvbl9saW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnltb3Vz
X2VudW1fY29udmVyc2lvbl9mb3JfZGVjbGFyYXRpb24oZG9tYWluLCBkZWNsYXJhdGlvbikpCiAg
ICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGZvciBtZW1iZXIgaW4gZGVjbGFyYXRp
b24udHlwZV9tZW1iZXJzOgogICAgICAgICAgICAgICAgICAgICBpZiAoaXNpbnN0YW5jZShtZW1i
ZXIudHlwZSwgRW51bVR5cGUpIGFuZCBtZW1iZXIudHlwZS5pc19hbm9ueW1vdXMpOgotICAgICAg
ICAgICAgICAgICAgICAgICAgYWRkX25ld2xpbmUobGluZXMpCi0gICAgICAgICAgICAgICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fY29udmVyc2lv
bl9mb3JfbWVtYmVyKGRvbWFpbiwgZGVjbGFyYXRpb24sIG1lbWJlcikpCisgICAgICAgICAgICAg
ICAgICAgICAgICBhZGRfbmV3bGluZShkZWNsYXJhdGlvbl9saW5lcykKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGRlY2xhcmF0aW9uX2xpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1v
dXNfZW51bV9jb252ZXJzaW9uX2Zvcl9tZW1iZXIoZG9tYWluLCBkZWNsYXJhdGlvbiwgbWVtYmVy
KSkKKyAgICAgICAgICAgIGlmIGxlbihkZWNsYXJhdGlvbl9saW5lcyk6CisgICAgICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZGVjbGFy
YXRpb24uY29uZGl0aW9uLCAnXG5cbicuam9pbihkZWNsYXJhdGlvbl9saW5lcykpKQogCiAgICAg
ICAgICMgQW5vbnltb3VzIGNvbW1hbmQgZW51bXMuCiAgICAgICAgIGZvciBjb21tYW5kIGluIHNl
bGYuY29tbWFuZHNfZm9yX2RvbWFpbihkb21haW4pOgorICAgICAgICAgICAgY29tbWFuZF9saW5l
cyA9IFtdCiAgICAgICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQuY2FsbF9wYXJhbWV0
ZXJzOgogICAgICAgICAgICAgICAgIGlmIChpc2luc3RhbmNlKHBhcmFtZXRlci50eXBlLCBFbnVt
VHlwZSkgYW5kIHBhcmFtZXRlci50eXBlLmlzX2Fub255bW91cyk6Ci0gICAgICAgICAgICAgICAg
ICAgIGFkZF9uZXdsaW5lKGxpbmVzKQotICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQo
c2VsZi5fZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fY29udmVyc2lvbl9mb3JfcGFyYW1ldGVyKGRv
bWFpbiwgY29tbWFuZC5jb21tYW5kX25hbWUsIHBhcmFtZXRlcikpCisgICAgICAgICAgICAgICAg
ICAgIGFkZF9uZXdsaW5lKGNvbW1hbmRfbGluZXMpCisgICAgICAgICAgICAgICAgICAgIGNvbW1h
bmRfbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2NvbnZlcnNpb25f
Zm9yX3BhcmFtZXRlcihkb21haW4sIGNvbW1hbmQuY29tbWFuZF9uYW1lLCBwYXJhbWV0ZXIpKQog
ICAgICAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzOgog
ICAgICAgICAgICAgICAgIGlmIChpc2luc3RhbmNlKHBhcmFtZXRlci50eXBlLCBFbnVtVHlwZSkg
YW5kIHBhcmFtZXRlci50eXBlLmlzX2Fub255bW91cyk6Ci0gICAgICAgICAgICAgICAgICAgIGFk
ZF9uZXdsaW5lKGxpbmVzKQotICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5f
Z2VuZXJhdGVfYW5vbnltb3VzX2VudW1fY29udmVyc2lvbl9mb3JfcGFyYW1ldGVyKGRvbWFpbiwg
Y29tbWFuZC5jb21tYW5kX25hbWUsIHBhcmFtZXRlcikpCisgICAgICAgICAgICAgICAgICAgIGFk
ZF9uZXdsaW5lKGNvbW1hbmRfbGluZXMpCisgICAgICAgICAgICAgICAgICAgIGNvbW1hbmRfbGlu
ZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2NvbnZlcnNpb25fZm9yX3Bh
cmFtZXRlcihkb21haW4sIGNvbW1hbmQuY29tbWFuZF9uYW1lLCBwYXJhbWV0ZXIpKQorICAgICAg
ICAgICAgaWYgbGVuKGNvbW1hbmRfbGluZXMpOgorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVu
ZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGNvbW1hbmQuY29uZGl0aW9uLCAn
XG5cbicuam9pbihjb21tYW5kX2xpbmVzKSkpCiAKICAgICAgICAgIyBBbm9ueW1vdXMgZXZlbnQg
ZW51bXMuCiAgICAgICAgIGZvciBldmVudCBpbiBzZWxmLmV2ZW50c19mb3JfZG9tYWluKGRvbWFp
bik6CisgICAgICAgICAgICBldmVudF9saW5lcyA9IFtdCiAgICAgICAgICAgICBmb3IgcGFyYW1l
dGVyIGluIGV2ZW50LmV2ZW50X3BhcmFtZXRlcnM6CiAgICAgICAgICAgICAgICAgaWYgKGlzaW5z
dGFuY2UocGFyYW1ldGVyLnR5cGUsIEVudW1UeXBlKSBhbmQgcGFyYW1ldGVyLnR5cGUuaXNfYW5v
bnltb3VzKToKLSAgICAgICAgICAgICAgICAgICAgYWRkX25ld2xpbmUobGluZXMpCi0gICAgICAg
ICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9j
b252ZXJzaW9uX2Zvcl9wYXJhbWV0ZXIoZG9tYWluLCBldmVudC5ldmVudF9uYW1lLCBwYXJhbWV0
ZXIpKQorICAgICAgICAgICAgICAgICAgICBhZGRfbmV3bGluZShldmVudF9saW5lcykKKyAgICAg
ICAgICAgICAgICAgICAgZXZlbnRfbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255bW91
c19lbnVtX2NvbnZlcnNpb25fZm9yX3BhcmFtZXRlcihkb21haW4sIGV2ZW50LmV2ZW50X25hbWUs
IHBhcmFtZXRlcikpCisgICAgICAgICAgICBpZiBsZW4oZXZlbnRfbGluZXMpOgorICAgICAgICAg
ICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGV2
ZW50LmNvbmRpdGlvbiwgJ1xuXG4nLmpvaW4oZXZlbnRfbGluZXMpKSkKIAotICAgICAgICByZXR1
cm4gJ1xuJy5qb2luKGxpbmVzKQotCi0gICAgZGVmIF9nZW5lcmF0ZV9lbnVtX2NvbnZlcnNpb25f
Zm9yX3BsYXRmb3JtcyhzZWxmKToKLSAgICAgICAgb2JqY19lbnVtX25hbWUgPSAnJXNQbGF0Zm9y
bScgJSBzZWxmLm9iamNfcHJlZml4KCkKLSAgICAgICAgZW51bV92YWx1ZXMgPSBbcGxhdGZvcm0u
bmFtZSBmb3IgcGxhdGZvcm0gaW4gUGxhdGZvcm1zXQotICAgICAgICBsaW5lcyA9IFtdCi0gICAg
ICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9lbnVtX29iamNfdG9fcHJvdG9jb2xfc3Ry
aW5nKG9iamNfZW51bV9uYW1lLCBlbnVtX3ZhbHVlcykpCi0gICAgICAgIGxpbmVzLmFwcGVuZChz
ZWxmLl9nZW5lcmF0ZV9lbnVtX2Zyb21fcHJvdG9jb2xfc3RyaW5nKG9iamNfZW51bV9uYW1lLCBl
bnVtX3ZhbHVlcykpCi0gICAgICAgIHJldHVybiAnXG5cbicuam9pbihsaW5lcykKKyAgICAgICAg
cmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZG9tYWluLmNvbmRpdGlv
biwgJ1xuXG4nLmpvaW4obGluZXMpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51
bV9jb252ZXJzaW9uX2Zvcl9kZWNsYXJhdGlvbihzZWxmLCBkb21haW4sIGRlY2xhcmF0aW9uKToK
ICAgICAgICAgb2JqY19lbnVtX25hbWUgPSBzZWxmLm9iamNfZW51bV9uYW1lX2Zvcl9hbm9ueW1v
dXNfZW51bV9kZWNsYXJhdGlvbihkZWNsYXJhdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfcHJvdG9j
b2xfdHlwZV9jb252ZXJzaW9uc19pbXBsZW1lbnRhdGlvbi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfcHJvdG9jb2xfdHlw
ZV9jb252ZXJzaW9uc19pbXBsZW1lbnRhdGlvbi5weQppbmRleCBhMzZkODEzZWNlZWVhMTE0YmU5
NGJmNjFkNWY2YTU1MzJmZGZlMTU0Li44YzEwNzcwOWNiM2EwZjcyZTU2OWFlNDFhOTIxOGJlMzhk
YjUxNzEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVfY29udmVyc2lvbnNfaW1wbGVt
ZW50YXRpb24ucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBlX2NvbnZlcnNpb25zX2ltcGxlbWVu
dGF0aW9uLnB5CkBAIC00Myw3ICs0Myw3IEBAIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9i
YWwnKQogCiAKIGRlZiBhZGRfbmV3bGluZShsaW5lcyk6Ci0gICAgaWYgbGluZXMgYW5kIGxpbmVz
Wy0xXSA9PSAnJzoKKyAgICBpZiBub3QgbGVuKGxpbmVzKSBvciBsaW5lc1stMV0gPT0gJyc6CiAg
ICAgICAgIHJldHVybgogICAgIGxpbmVzLmFwcGVuZCgnJykKIApAQCAtODMsMTUgKzgzLDE2IEBA
IGNsYXNzIE9iakNQcm90b2NvbFR5cGVDb252ZXJzaW9uc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9y
KE9iakNHZW5lcmF0b3IpOgogICAgIGRlZiBfZ2VuZXJhdGVfdHlwZV9mYWN0b3J5X2NhdGVnb3J5
X2ludGVyZmFjZShzZWxmLCBkb21haW5zKToKICAgICAgICAgbGluZXMgPSBbXQogICAgICAgICBm
b3IgZG9tYWluIGluIGRvbWFpbnM6Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0BpbnRlcmZh
Y2UgJXNUeXBlQ29udmVyc2lvbnMgKCVzRG9tYWluKScgJSAoc2VsZi5wcm90b2NvbF9uYW1lKCks
IGRvbWFpbi5kb21haW5fbmFtZSkpCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycpCisgICAg
ICAgICAgICBkb21haW5fbGluZXMgPSBbXQorICAgICAgICAgICAgZG9tYWluX2xpbmVzLmFwcGVu
ZCgnQGludGVyZmFjZSAlc1R5cGVDb252ZXJzaW9ucyAoJXNEb21haW4pJyAlIChzZWxmLnByb3Rv
Y29sX25hbWUoKSwgZG9tYWluLmRvbWFpbl9uYW1lKSkKKyAgICAgICAgICAgIGFkZF9uZXdsaW5l
KGRvbWFpbl9saW5lcykKIAogICAgICAgICAgICAgZm9yIGRlY2xhcmF0aW9uIGluIHNlbGYudHlw
ZV9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbihkb21haW4pOgotICAgICAgICAgICAgICAgIGxpbmVz
LmFwcGVuZChzZWxmLl9nZW5lcmF0ZV90eXBlX2ZhY3RvcnlfbWV0aG9kX2RlY2xhcmF0aW9uKGRv
bWFpbiwgZGVjbGFyYXRpb24pKQotCi0gICAgICAgICAgICBhZGRfbmV3bGluZShsaW5lcykKLSAg
ICAgICAgICAgIGxpbmVzLmFwcGVuZCgnQGVuZCcpCisgICAgICAgICAgICAgICAgZG9tYWluX2xp
bmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV90eXBlX2ZhY3RvcnlfbWV0aG9kX2RlY2xhcmF0aW9u
KGRvbWFpbiwgZGVjbGFyYXRpb24pKQogCisgICAgICAgICAgICBhZGRfbmV3bGluZShkb21haW5f
bGluZXMpCisgICAgICAgICAgICBkb21haW5fbGluZXMuYXBwZW5kKCdAZW5kJykKKyAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRvbWFp
bi5jb25kaXRpb24sICdcbicuam9pbihkb21haW5fbGluZXMpKSkKICAgICAgICAgcmV0dXJuICdc
bicuam9pbihsaW5lcykKIAogICAgIGRlZiBfZ2VuZXJhdGVfdHlwZV9mYWN0b3J5X21ldGhvZF9k
ZWNsYXJhdGlvbihzZWxmLCBkb21haW4sIGRlY2xhcmF0aW9uKToKQEAgLTEwMCwyMCArMTAxLDIz
IEBAIGNsYXNzIE9iakNQcm90b2NvbFR5cGVDb252ZXJzaW9uc0ltcGxlbWVudGF0aW9uR2VuZXJh
dG9yKE9iakNHZW5lcmF0b3IpOgogICAgICAgICAgICAgcmVzb2x2ZWRfdHlwZSA9IHJlc29sdmVk
X3R5cGUuYWxpYXNlZF90eXBlCiAgICAgICAgIGlmIGlzaW5zdGFuY2UocmVzb2x2ZWRfdHlwZSwg
KE9iamVjdFR5cGUsIEFycmF5VHlwZSwgUHJpbWl0aXZlVHlwZSkpOgogICAgICAgICAgICAgb2Jq
Y190eXBlID0gc2VsZi5vYmpjX2NsYXNzX2Zvcl90eXBlKHJlc29sdmVkX3R5cGUpCi0gICAgICAg
ICAgICByZXR1cm4gJysgKHZvaWQpX3BhcnNlJXM6KCVzICoqKW91dFZhbHVlIGZyb21QYXlsb2Fk
OihpZClwYXlsb2FkOycgJSAoZGVjbGFyYXRpb24udHlwZS5yYXdfbmFtZSgpLCBvYmpjX3R5cGUp
CisgICAgICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihk
ZWNsYXJhdGlvbi5jb25kaXRpb24sICcrICh2b2lkKV9wYXJzZSVzOiglcyAqKilvdXRWYWx1ZSBm
cm9tUGF5bG9hZDooaWQpcGF5bG9hZDsnICUgKGRlY2xhcmF0aW9uLnR5cGUucmF3X25hbWUoKSwg
b2JqY190eXBlKSkKICAgICAgICAgaWYgaXNpbnN0YW5jZShyZXNvbHZlZF90eXBlLCBFbnVtVHlw
ZSk6Ci0gICAgICAgICAgICByZXR1cm4gJysgKHZvaWQpX3BhcnNlJXM6KE5TTnVtYmVyICoqKW91
dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOycgJSBkZWNsYXJhdGlvbi50eXBlLnJhd19u
YW1lKCkKKyAgICAgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0
aW9uKGRlY2xhcmF0aW9uLmNvbmRpdGlvbiwgJysgKHZvaWQpX3BhcnNlJXM6KE5TTnVtYmVyICoq
KW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOycgJSBkZWNsYXJhdGlvbi50eXBlLnJh
d19uYW1lKCkpCiAKICAgICBkZWYgX2dlbmVyYXRlX3R5cGVfZmFjdG9yeV9jYXRlZ29yeV9pbXBs
ZW1lbnRhdGlvbihzZWxmLCBkb21haW5zKToKICAgICAgICAgbGluZXMgPSBbXQogICAgICAgICBm
b3IgZG9tYWluIGluIGRvbWFpbnM6Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0BpbXBsZW1l
bnRhdGlvbiAlc1R5cGVDb252ZXJzaW9ucyAoJXNEb21haW4pJyAlIChzZWxmLnByb3RvY29sX25h
bWUoKSwgZG9tYWluLmRvbWFpbl9uYW1lKSkKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykK
KyAgICAgICAgICAgIGRvbWFpbl9saW5lcyA9IFtdCisgICAgICAgICAgICBkb21haW5fbGluZXMu
YXBwZW5kKCdAaW1wbGVtZW50YXRpb24gJXNUeXBlQ29udmVyc2lvbnMgKCVzRG9tYWluKScgJSAo
c2VsZi5wcm90b2NvbF9uYW1lKCksIGRvbWFpbi5kb21haW5fbmFtZSkpCisgICAgICAgICAgICBh
ZGRfbmV3bGluZShkb21haW5fbGluZXMpCiAKICAgICAgICAgICAgIGZvciBkZWNsYXJhdGlvbiBp
biBzZWxmLnR5cGVfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4oZG9tYWluKToKLSAgICAgICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfdHlwZV9mYWN0b3J5X21ldGhvZF9pbXBs
ZW1lbnRhdGlvbihkb21haW4sIGRlY2xhcmF0aW9uKSkKLSAgICAgICAgICAgICAgICBhZGRfbmV3
bGluZShsaW5lcykKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnQGVuZCcpCisgICAgICAgICAg
ICAgICAgZG9tYWluX2xpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV90eXBlX2ZhY3RvcnlfbWV0
aG9kX2ltcGxlbWVudGF0aW9uKGRvbWFpbiwgZGVjbGFyYXRpb24pKQorICAgICAgICAgICAgICAg
IGFkZF9uZXdsaW5lKGRvbWFpbl9saW5lcykKKworICAgICAgICAgICAgZG9tYWluX2xpbmVzLmFw
cGVuZCgnQGVuZCcpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi53cmFwX3dpdGhfZ3Vh
cmRfZm9yX2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9uLCAnXG4nLmpvaW4oZG9tYWluX2xpbmVz
KSkpCiAgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCiAKICAgICBkZWYgX2dlbmVyYXRl
X3R5cGVfZmFjdG9yeV9tZXRob2RfaW1wbGVtZW50YXRpb24oc2VsZiwgZG9tYWluLCBkZWNsYXJh
dGlvbik6CkBAIC0xNDEsNCArMTQ1LDQgQEAgY2xhc3MgT2JqQ1Byb3RvY29sVHlwZUNvbnZlcnNp
b25zSW1wbGVtZW50YXRpb25HZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgICAgICAgICBs
aW5lcy5hcHBlbmQoJyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtO
U0RpY3Rpb25hcnkgY2xhc3NdKTsnKQogICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgKm91
dFZhbHVlID0gW1slcyBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOycgJSAob2JqY19j
bGFzcykpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnfScpCi0gICAgICAgIHJldHVybiAnXG4nLmpv
aW4obGluZXMpCisgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0
aW9uKGRlY2xhcmF0aW9uLmNvbmRpdGlvbiwgJ1xuJy5qb2luKGxpbmVzKSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X29iamNfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5
cGVzX2ltcGxlbWVudGF0aW9uLnB5CmluZGV4IGM4NzA4ODFhYmQ4MGQyYjZlZGFhODgxMjU5OGM4
MzYyODNhNjY1YjAuLmEwZTdiOTAwNDQ1NWJiZTdlMTFlOGEwYmM1ZWQ1MTEwZmUxYTFhNDQgMTAw
NzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L2dlbmVyYXRlX29iamNfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2Jq
Y19wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weQpAQCAtNDQsNyArNDQsNyBAQCBsb2cg
PSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKIAogCiBkZWYgYWRkX25ld2xpbmUobGluZXMp
OgotICAgIGlmIGxpbmVzIGFuZCBsaW5lc1stMV0gPT0gJyc6CisgICAgaWYgbm90IGxlbihsaW5l
cykgb3IgbGluZXNbLTFdID09ICcnOgogICAgICAgICByZXR1cm4KICAgICBsaW5lcy5hcHBlbmQo
JycpCiAKQEAgLTkxLDcgKzkxLDcgQEAgY2xhc3MgT2JqQ1Byb3RvY29sVHlwZXNJbXBsZW1lbnRh
dGlvbkdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKICAgICAgICAgICAgIGlmIChpc2luc3RhbmNl
KGRlY2xhcmF0aW9uLnR5cGUsIE9iamVjdFR5cGUpKToKICAgICAgICAgICAgICAgICBhZGRfbmV3
bGluZShsaW5lcykKICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV90
eXBlX2ltcGxlbWVudGF0aW9uKGRvbWFpbiwgZGVjbGFyYXRpb24pKQotICAgICAgICByZXR1cm4g
J1xuJy5qb2luKGxpbmVzKQorICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9y
X2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9uLCAnXG4nLmpvaW4obGluZXMpKQogCiAgICAgZGVm
IGdlbmVyYXRlX3R5cGVfaW1wbGVtZW50YXRpb24oc2VsZiwgZG9tYWluLCBkZWNsYXJhdGlvbik6
CiAgICAgICAgIGxpbmVzID0gW10KQEAgLTExMiw3ICsxMTIsNyBAQCBjbGFzcyBPYmpDUHJvdG9j
b2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2dldHRlcl9mb3JfbWVtYmVyKGRvbWFpbiwg
ZGVjbGFyYXRpb24sIG1lbWJlcikpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKICAgICAgICAg
bGluZXMuYXBwZW5kKCdAZW5kJykKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKyAg
ICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZGVjbGFyYXRp
b24uY29uZGl0aW9uLCAnXG4nLmpvaW4obGluZXMpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9pbml0
X21ldGhvZF9mb3JfcHJvdG9jb2xfb2JqZWN0KHNlbGYsIGRvbWFpbiwgZGVjbGFyYXRpb24pOgog
ICAgICAgICBsaW5lcyA9IFtdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3IucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3IucHkKaW5kZXggOGMyZmJiOGJj
NTI5NzViNjFjN2UzNzVhOGZjZTFiMTdkMGVkYTg1YS4uOTRkMThkOWQ2NjE5NGQxNTg1YzBlMTBj
MDQ5NGJiNGIxYTEzYjk1NSAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRvci5weQpAQCAtMzEsMTAgKzMx
LDEwIEBAIGZyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQogCiB0cnk6CiAgICAgZnJvbSAuZ2Vu
ZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgR2VuZXJhdG9yVGVtcGxhdGVzIGFzIFRlbXBsYXRlcwot
ICAgIGZyb20gLm1vZGVscyBpbXBvcnQgUHJpbWl0aXZlVHlwZSwgT2JqZWN0VHlwZSwgQXJyYXlU
eXBlLCBFbnVtVHlwZSwgQWxpYXNlZFR5cGUsIEZyYW1ld29ya3MsIFBsYXRmb3JtcworICAgIGZy
b20gLm1vZGVscyBpbXBvcnQgUHJpbWl0aXZlVHlwZSwgT2JqZWN0VHlwZSwgQXJyYXlUeXBlLCBF
bnVtVHlwZSwgQWxpYXNlZFR5cGUsIEZyYW1ld29ya3MKIGV4Y2VwdCBWYWx1ZUVycm9yOgogICAg
IGZyb20gZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgR2VuZXJhdG9yVGVtcGxhdGVzIGFzIFRl
bXBsYXRlcwotICAgIGZyb20gbW9kZWxzIGltcG9ydCBQcmltaXRpdmVUeXBlLCBPYmplY3RUeXBl
LCBBcnJheVR5cGUsIEVudW1UeXBlLCBBbGlhc2VkVHlwZSwgRnJhbWV3b3JrcywgUGxhdGZvcm1z
CisgICAgZnJvbSBtb2RlbHMgaW1wb3J0IFByaW1pdGl2ZVR5cGUsIE9iamVjdFR5cGUsIEFycmF5
VHlwZSwgRW51bVR5cGUsIEFsaWFzZWRUeXBlLCBGcmFtZXdvcmtzCiAKIGxvZyA9IGxvZ2dpbmcu
Z2V0TG9nZ2VyKCdnbG9iYWwnKQogCkBAIC05NCwzNSArOTQsMjggQEAgX1RZUEVTX1dJVEhfT1BF
Tl9GSUVMRFMgPSB7CiB9CiAKIGNsYXNzIEdlbmVyYXRvcjoKLSAgICBkZWYgX19pbml0X18oc2Vs
ZiwgbW9kZWwsIHBsYXRmb3JtLCBpbnB1dF9maWxlcGF0aCk6CisgICAgZGVmIF9faW5pdF9fKHNl
bGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6CiAgICAgICAgIHNlbGYuX21vZGVsID0gbW9kZWwK
LSAgICAgICAgc2VsZi5fcGxhdGZvcm0gPSBwbGF0Zm9ybQogICAgICAgICBzZWxmLl9pbnB1dF9m
aWxlcGF0aCA9IGlucHV0X2ZpbGVwYXRoCiAgICAgICAgIHNlbGYuX3NldHRpbmdzID0ge30KIAog
ICAgIGRlZiBtb2RlbChzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuX21vZGVsCiAKLSAgICBk
ZWYgcGxhdGZvcm0oc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLl9wbGF0Zm9ybQotCiAgICAg
ZGVmIHNldF9nZW5lcmF0b3Jfc2V0dGluZyhzZWxmLCBrZXksIHZhbHVlKToKICAgICAgICAgc2Vs
Zi5fc2V0dGluZ3Nba2V5XSA9IHZhbHVlCiAKLSAgICBkZWYgY2FuX2dlbmVyYXRlX3BsYXRmb3Jt
KHNlbGYsIG1vZGVsX3BsYXRmb3JtKToKLSAgICAgICAgcmV0dXJuIG1vZGVsX3BsYXRmb3JtIGlz
IFBsYXRmb3Jtcy5HZW5lcmljIG9yIHNlbGYuX3BsYXRmb3JtIGlzIFBsYXRmb3Jtcy5BbGwgb3Ig
bW9kZWxfcGxhdGZvcm0gaXMgc2VsZi5fcGxhdGZvcm0KLQogICAgIGRlZiB2ZXJzaW9uX2Zvcl9k
b21haW4oc2VsZiwgZG9tYWluKToKICAgICAgICAgcmV0dXJuIGRvbWFpbi52ZXJzaW9uKCkKIAog
ICAgIGRlZiB0eXBlX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6Ci0gICAg
ICAgIHJldHVybiBbdHlwZV9kZWNsYXJhdGlvbiBmb3IgdHlwZV9kZWNsYXJhdGlvbiBpbiBkb21h
aW4uYWxsX3R5cGVfZGVjbGFyYXRpb25zKCkgaWYgc2VsZi5jYW5fZ2VuZXJhdGVfcGxhdGZvcm0o
dHlwZV9kZWNsYXJhdGlvbi5wbGF0Zm9ybSldCisgICAgICAgIHJldHVybiBkb21haW4uYWxsX3R5
cGVfZGVjbGFyYXRpb25zKCkKIAogICAgIGRlZiBjb21tYW5kc19mb3JfZG9tYWluKHNlbGYsIGRv
bWFpbik6Ci0gICAgICAgIHJldHVybiBbY29tbWFuZCBmb3IgY29tbWFuZCBpbiBkb21haW4uYWxs
X2NvbW1hbmRzKCkgaWYgc2VsZi5jYW5fZ2VuZXJhdGVfcGxhdGZvcm0oY29tbWFuZC5wbGF0Zm9y
bSldCisgICAgICAgIHJldHVybiBkb21haW4uYWxsX2NvbW1hbmRzKCkKIAogICAgIGRlZiBldmVu
dHNfZm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgotICAgICAgICByZXR1cm4gW2V2ZW50IGZvciBl
dmVudCBpbiBkb21haW4uYWxsX2V2ZW50cygpIGlmIHNlbGYuY2FuX2dlbmVyYXRlX3BsYXRmb3Jt
KGV2ZW50LnBsYXRmb3JtKV0KKyAgICAgICAgcmV0dXJuIGRvbWFpbi5hbGxfZXZlbnRzKCkKIAog
ICAgICMgVGhlIGdvb2Z5IG5hbWUgaXMgdG8gZGlzYW1iaWd1YXRlIGdlbmVyYXRvciBzZXR0aW5n
cyBmcm9tIGZyYW1ld29yayBzZXR0aW5ncy4KICAgICBkZWYgZ2V0X2dlbmVyYXRvcl9zZXR0aW5n
KHNlbGYsIGtleSwgZGVmYXVsdD1Ob25lKToKQEAgLTI2NywyMiArMjYwLDE1IEBAIGNsYXNzIEdl
bmVyYXRvcjoKICAgICAgICAgc2VsZi5fYXNzaWduZWRfZW51bV92YWx1ZXMuYXBwZW5kKGVudW1f
dmFsdWUpCiAKICAgICAjIE1pc2NlbGxhbmVvdXMgdGV4dCBtYW5pcHVsYXRpb24gcm91dGluZXMu
Ci0gICAgZGVmIHdyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKHNlbGYsIGRvbWFpbiwgdGV4dCk6
Ci0gICAgICAgIGlmIHNlbGYubW9kZWwoKS5mcmFtZXdvcmsgaXMgRnJhbWV3b3Jrcy5XZWJJbnNw
ZWN0b3I6Ci0gICAgICAgICAgICByZXR1cm4gdGV4dAotICAgICAgICBndWFyZCA9IGRvbWFpbi5m
ZWF0dXJlX2d1YXJkCi0gICAgICAgIGlmIGd1YXJkOgotICAgICAgICAgICAgcmV0dXJuIEdlbmVy
YXRvci53cmFwX3dpdGhfZ3VhcmQoZ3VhcmQsIHRleHQpCisgICAgZGVmIHdyYXBfd2l0aF9ndWFy
ZF9mb3JfY29uZGl0aW9uKHNlbGYsIGNvbmRpdGlvbiwgdGV4dCk6CisgICAgICAgIGlmIGNvbmRp
dGlvbjoKKyAgICAgICAgICAgIHJldHVybiAnXG4nLmpvaW4oWworICAgICAgICAgICAgICAgICcj
aWYgJXMnICUgY29uZGl0aW9uLAorICAgICAgICAgICAgICAgIHRleHQsCisgICAgICAgICAgICAg
ICAgJyNlbmRpZiAvLyAlcycgJSBjb25kaXRpb24sCisgICAgICAgICAgICBdKQogICAgICAgICBy
ZXR1cm4gdGV4dAogCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiB3cmFwX3dpdGhfZ3VhcmQo
Z3VhcmQsIHRleHQpOgotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKFsKLSAgICAgICAgICAgICcj
aWYgJXMnICUgZ3VhcmQsCi0gICAgICAgICAgICB0ZXh0LAotICAgICAgICAgICAgJyNlbmRpZiAv
LyAlcycgJSBndWFyZCwKLSAgICAgICAgXSkKLQogICAgIEBzdGF0aWNtZXRob2QKICAgICBkZWYg
c3R5bGl6ZWRfbmFtZV9mb3JfZW51bV92YWx1ZShlbnVtX3ZhbHVlKToKICAgICAgICAgcmVnZXgg
PSAnKCVzKScgJSAifCIuam9pbihfQUxXQVlTX1NQRUNJQUxDQVNFRF9FTlVNX1ZBTFVFX1NVQlNU
UklOR1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yX3RlbXBsYXRlcy5weQppbmRleCA4
OTE2ODFmZmQ3MWY1NDk1NzZjZmYxYWE1MDIwMmUxMjliOTJlZTg4Li44NDdhOTJkMDkxNTU4ZTMx
ZmM5N2Y4OThlYWM0Yzk5OThhZjc0NmVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5CisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRv
cl90ZW1wbGF0ZXMucHkKQEAgLTU3LDUgKzU3LDQgQEAgY2xhc3MgR2VuZXJhdG9yVGVtcGxhdGVz
OgogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSAke2lucHV0
RmlsZW5hbWV9Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5IiIiKQor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tICR7aW5wdXRGaWxlbmFtZX0gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eSIiIikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL21vZGVscy5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL21vZGVscy5weQppbmRleCA2ZDk3YTA5M2MzNGY3ODk2MjNiMDIxZGVhNjc5
YWY0MDY0ZGM2MmE1Li4xZGYyYmRmNjY1YTBjMWRiNmUzOGUzYWQ1MzRhMjdmYWZlMDRmZjlkIDEw
MDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9tb2RlbHMucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vbW9kZWxzLnB5CkBAIC0xMzYsNDEgKzEzNiw2IEBAIGNsYXNzIEZyYW1ld29ya3M6
CiAgICAgVGVzdCA9IEZyYW1ld29yaygiVGVzdCIpCiAKIAotY2xhc3MgUGxhdGZvcm06Ci0gICAg
ZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgotICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCi0KLSAg
ICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIGZyb21TdHJpbmcocGxhdGZvcm1TdHJpbmcpOgotICAg
ICAgICBwbGF0Zm9ybVN0cmluZyA9IHBsYXRmb3JtU3RyaW5nLmxvd2VyKCkKLSAgICAgICAgaWYg
cGxhdGZvcm1TdHJpbmcgPT0gImlvcyI6Ci0gICAgICAgICAgICByZXR1cm4gUGxhdGZvcm1zLmlP
UwotCi0gICAgICAgIGlmIHBsYXRmb3JtU3RyaW5nID09ICJtYWNvcyI6Ci0gICAgICAgICAgICBy
ZXR1cm4gUGxhdGZvcm1zLm1hY09TCi0KLSAgICAgICAgaWYgcGxhdGZvcm1TdHJpbmcgPT0gImFs
bCI6Ci0gICAgICAgICAgICByZXR1cm4gUGxhdGZvcm1zLkFsbAotCi0gICAgICAgIGlmIHBsYXRm
b3JtU3RyaW5nID09ICJnZW5lcmljIiBvciBub3QgcGxhdGZvcm1TdHJpbmc6Ci0gICAgICAgICAg
ICByZXR1cm4gUGxhdGZvcm1zLkdlbmVyaWMKLQotICAgICAgICByYWlzZSBQYXJzZUV4Y2VwdGlv
bigiVW5rbm93biBwbGF0Zm9ybTogJXMiICUgcGxhdGZvcm1TdHJpbmcpCi0KLQotY2xhc3MgUGxh
dGZvcm1zOgotICAgIEFsbCA9IFBsYXRmb3JtKCJhbGwiKQotICAgIEdlbmVyaWMgPSBQbGF0Zm9y
bSgiZ2VuZXJpYyIpCi0gICAgaU9TID0gUGxhdGZvcm0oImlvcyIpCi0gICAgbWFjT1MgPSBQbGF0
Zm9ybSgibWFjb3MiKQotCi0gICAgIyBBbGxvdyBpdGVyYXRpb24gb3ZlciBhbGwgcGxhdGZvcm1z
LiBTZWUgPGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNTQzNDQwMC8+LgotICAg
IGNsYXNzIF9fbWV0YWNsYXNzX18odHlwZSk6Ci0gICAgICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToK
LSAgICAgICAgICAgIGZvciBhdHRyIGluIGRpcihQbGF0Zm9ybXMpOgotICAgICAgICAgICAgICAg
IGlmIG5vdCBhdHRyLnN0YXJ0c3dpdGgoIl9fIik6Ci0gICAgICAgICAgICAgICAgICAgIHlpZWxk
IGdldGF0dHIoUGxhdGZvcm1zLCBhdHRyKQotCiBjbGFzcyBUeXBlUmVmZXJlbmNlOgogICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCB0eXBlX2tpbmQsIHJlZmVyZW5jZWRfdHlwZV9uYW1lLCBlbnVtX3Zh
bHVlcywgYXJyYXlfaXRlbXMpOgogICAgICAgICBzZWxmLnR5cGVfa2luZCA9IHR5cGVfa2luZApA
QCAtNDM5LDcgKzQwNCw3IEBAIGNsYXNzIFByb3RvY29sOgogICAgICAgICAgICAgICAgIHJhaXNl
IFBhcnNlRXhjZXB0aW9uKCJNYWxmb3JtZWQgZG9tYWluIHNwZWNpZmljYXRpb246IGV2ZW50cyBp
cyBub3QgYW4gYXJyYXkiKQogICAgICAgICAgICAgZXZlbnRzLmV4dGVuZChbc2VsZi5wYXJzZV9l
dmVudChldmVudCwgZGVidWdnYWJsZV90eXBlcykgZm9yIGV2ZW50IGluIGpzb25bJ2V2ZW50cydd
XSkKIAotICAgICAgICBzZWxmLmRvbWFpbnMuYXBwZW5kKERvbWFpbihqc29uWydkb21haW4nXSwg
anNvbi5nZXQoJ2Rlc2NyaXB0aW9uJywgJycpLCBqc29uLmdldCgnZmVhdHVyZUd1YXJkJyksIGRl
YnVnZ2FibGVfdHlwZXMsIHRhcmdldF90eXBlcywgaXNTdXBwbGVtZW50YWwsIHZlcnNpb24sIHR5
cGVzLCBjb21tYW5kcywgZXZlbnRzKSkKKyAgICAgICAgc2VsZi5kb21haW5zLmFwcGVuZChEb21h
aW4oanNvblsnZG9tYWluJ10sIGpzb24uZ2V0KCdkZXNjcmlwdGlvbicsICcnKSwganNvbi5nZXQo
J2NvbmRpdGlvbicpLCBkZWJ1Z2dhYmxlX3R5cGVzLCB0YXJnZXRfdHlwZXMsIGlzU3VwcGxlbWVu
dGFsLCB2ZXJzaW9uLCB0eXBlcywgY29tbWFuZHMsIGV2ZW50cykpCiAKICAgICBkZWYgcGFyc2Vf
dHlwZV9kZWNsYXJhdGlvbihzZWxmLCBqc29uKToKICAgICAgICAgY2hlY2tfZm9yX3JlcXVpcmVk
X3Byb3BlcnRpZXMoWydpZCcsICd0eXBlJ10sIGpzb24sICJ0eXBlIikKQEAgLTQ1Nyw4ICs0MjIs
NyBAQCBjbGFzcyBQcm90b2NvbDoKICAgICAgICAgICAgIHJhaXNlIFBhcnNlRXhjZXB0aW9uKCJN
YWxmb3JtZWQgZG9tYWluIHNwZWNpZmljYXRpb246IHR5cGUgZGVjbGFyYXRpb24gZm9yICVzIGhh
cyBkdXBsaWNhdGUgbWVtYmVyIG5hbWVzIiAlIGpzb25bJ2lkJ10pCiAKICAgICAgICAgdHlwZV9y
ZWYgPSBUeXBlUmVmZXJlbmNlKGpzb25bJ3R5cGUnXSwganNvbi5nZXQoJyRyZWYnKSwganNvbi5n
ZXQoJ2VudW0nKSwganNvbi5nZXQoJ2l0ZW1zJykpCi0gICAgICAgIHBsYXRmb3JtID0gUGxhdGZv
cm0uZnJvbVN0cmluZyhqc29uLmdldCgncGxhdGZvcm0nLCAnZ2VuZXJpYycpKQotICAgICAgICBy
ZXR1cm4gVHlwZURlY2xhcmF0aW9uKGpzb25bJ2lkJ10sIHR5cGVfcmVmLCBqc29uLmdldCgiZGVz
Y3JpcHRpb24iLCAiIiksIHBsYXRmb3JtLCB0eXBlX21lbWJlcnMpCisgICAgICAgIHJldHVybiBU
eXBlRGVjbGFyYXRpb24oanNvblsnaWQnXSwgdHlwZV9yZWYsIGpzb24uZ2V0KCJkZXNjcmlwdGlv
biIsICIiKSwganNvbi5nZXQoJ2NvbmRpdGlvbicpLCB0eXBlX21lbWJlcnMpCiAKICAgICBkZWYg
cGFyc2VfdHlwZV9tZW1iZXIoc2VsZiwganNvbik6CiAgICAgICAgIGNoZWNrX2Zvcl9yZXF1aXJl
ZF9wcm9wZXJ0aWVzKFsnbmFtZSddLCBqc29uLCAidHlwZSBtZW1iZXIiKQpAQCAtNTA5LDggKzQ3
Myw3IEBAIGNsYXNzIFByb3RvY29sOgogICAgICAgICAgICAgaWYgbGVuKGR1cGxpY2F0ZV9uYW1l
cykgPiAwOgogICAgICAgICAgICAgICAgIHJhaXNlIFBhcnNlRXhjZXB0aW9uKCJNYWxmb3JtZWQg
ZG9tYWluIHNwZWNpZmljYXRpb246IHJldHVybiBwYXJhbWV0ZXIgbGlzdCBmb3IgY29tbWFuZCAl
cyBoYXMgZHVwbGljYXRlIHBhcmFtZXRlciBuYW1lcyIgJSBqc29uWyduYW1lJ10pCiAKLSAgICAg
ICAgcGxhdGZvcm0gPSBQbGF0Zm9ybS5mcm9tU3RyaW5nKGpzb24uZ2V0KCdwbGF0Zm9ybScsICdn
ZW5lcmljJykpCi0gICAgICAgIHJldHVybiBDb21tYW5kKGpzb25bJ25hbWUnXSwgdGFyZ2V0X3R5
cGVzLCBjYWxsX3BhcmFtZXRlcnMsIHJldHVybl9wYXJhbWV0ZXJzLCBqc29uLmdldCgnZGVzY3Jp
cHRpb24nLCAiIiksIHBsYXRmb3JtLCBqc29uLmdldCgnYXN5bmMnLCBGYWxzZSkpCisgICAgICAg
IHJldHVybiBDb21tYW5kKGpzb25bJ25hbWUnXSwgdGFyZ2V0X3R5cGVzLCBjYWxsX3BhcmFtZXRl
cnMsIHJldHVybl9wYXJhbWV0ZXJzLCBqc29uLmdldCgnZGVzY3JpcHRpb24nLCAiIiksIGpzb24u
Z2V0KCdjb25kaXRpb24nKSwganNvbi5nZXQoJ2FzeW5jJywgRmFsc2UpKQogCiAgICAgZGVmIHBh
cnNlX2V2ZW50KHNlbGYsIGpzb24sIGRlYnVnZ2FibGVfdHlwZXMpOgogICAgICAgICBjaGVja19m
b3JfcmVxdWlyZWRfcHJvcGVydGllcyhbJ25hbWUnXSwganNvbiwgImV2ZW50IikKQEAgLTU0NCw4
ICs1MDcsNyBAQCBjbGFzcyBQcm90b2NvbDoKICAgICAgICAgICAgIGlmIGxlbihkdXBsaWNhdGVf
bmFtZXMpID4gMDoKICAgICAgICAgICAgICAgICByYWlzZSBQYXJzZUV4Y2VwdGlvbigiTWFsZm9y
bWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9uOiBwYXJhbWV0ZXIgbGlzdCBmb3IgZXZlbnQgJXMgaGFz
IGR1cGxpY2F0ZSBwYXJhbWV0ZXIgbmFtZXMiICUganNvblsnbmFtZSddKQogCi0gICAgICAgIHBs
YXRmb3JtID0gUGxhdGZvcm0uZnJvbVN0cmluZyhqc29uLmdldCgncGxhdGZvcm0nLCAnZ2VuZXJp
YycpKQotICAgICAgICByZXR1cm4gRXZlbnQoanNvblsnbmFtZSddLCB0YXJnZXRfdHlwZXMsIGV2
ZW50X3BhcmFtZXRlcnMsIGpzb24uZ2V0KCdkZXNjcmlwdGlvbicsICIiKSwgcGxhdGZvcm0pCisg
ICAgICAgIHJldHVybiBFdmVudChqc29uWyduYW1lJ10sIHRhcmdldF90eXBlcywgZXZlbnRfcGFy
YW1ldGVycywganNvbi5nZXQoJ2Rlc2NyaXB0aW9uJywgIiIpLCBqc29uLmdldCgnY29uZGl0aW9u
JykpCiAKICAgICBkZWYgcGFyc2VfY2FsbF9vcl9yZXR1cm5fcGFyYW1ldGVyKHNlbGYsIGpzb24p
OgogICAgICAgICBjaGVja19mb3JfcmVxdWlyZWRfcHJvcGVydGllcyhbJ25hbWUnXSwganNvbiwg
InBhcmFtZXRlciIpCkBAIC02NDMsMTAgKzYwNSwxMCBAQCBjbGFzcyBQcm90b2NvbDoKIAogCiBj
bGFzcyBEb21haW46Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGRvbWFpbl9uYW1lLCBkZXNjcmlw
dGlvbiwgZmVhdHVyZV9ndWFyZCwgZGVidWdnYWJsZV90eXBlcywgdGFyZ2V0X3R5cGVzLCBpc1N1
cHBsZW1lbnRhbCwgdmVyc2lvbiwgdHlwZV9kZWNsYXJhdGlvbnMsIGNvbW1hbmRzLCBldmVudHMp
OgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkb21haW5fbmFtZSwgZGVzY3JpcHRpb24sIGNvbmRp
dGlvbiwgZGVidWdnYWJsZV90eXBlcywgdGFyZ2V0X3R5cGVzLCBpc1N1cHBsZW1lbnRhbCwgdmVy
c2lvbiwgdHlwZV9kZWNsYXJhdGlvbnMsIGNvbW1hbmRzLCBldmVudHMpOgogICAgICAgICBzZWxm
LmRvbWFpbl9uYW1lID0gZG9tYWluX25hbWUKICAgICAgICAgc2VsZi5kZXNjcmlwdGlvbiA9IGRl
c2NyaXB0aW9uCi0gICAgICAgIHNlbGYuZmVhdHVyZV9ndWFyZCA9IGZlYXR1cmVfZ3VhcmQKKyAg
ICAgICAgc2VsZi5jb25kaXRpb24gPSBjb25kaXRpb24KICAgICAgICAgc2VsZi5kZWJ1Z2dhYmxl
X3R5cGVzID0gZGVidWdnYWJsZV90eXBlcwogICAgICAgICBzZWxmLnRhcmdldF90eXBlcyA9IHRh
cmdldF90eXBlcwogICAgICAgICBzZWxmLmlzX3N1cHBsZW1lbnRhbCA9IGlzU3VwcGxlbWVudGFs
CkBAIC02ODYsMTEgKzY0OCwxMSBAQCBjbGFzcyBEb21haW5zOgogCiAKIGNsYXNzIFR5cGVEZWNs
YXJhdGlvbjoKLSAgICBkZWYgX19pbml0X18oc2VsZiwgdHlwZV9uYW1lLCB0eXBlX3JlZiwgZGVz
Y3JpcHRpb24sIHBsYXRmb3JtLCB0eXBlX21lbWJlcnMpOgorICAgIGRlZiBfX2luaXRfXyhzZWxm
LCB0eXBlX25hbWUsIHR5cGVfcmVmLCBkZXNjcmlwdGlvbiwgY29uZGl0aW9uLCB0eXBlX21lbWJl
cnMpOgogICAgICAgICBzZWxmLnR5cGVfbmFtZSA9IHR5cGVfbmFtZQogICAgICAgICBzZWxmLnR5
cGVfcmVmID0gdHlwZV9yZWYKICAgICAgICAgc2VsZi5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9u
Ci0gICAgICAgIHNlbGYucGxhdGZvcm0gPSBwbGF0Zm9ybQorICAgICAgICBzZWxmLmNvbmRpdGlv
biA9IGNvbmRpdGlvbgogICAgICAgICBzZWxmLnR5cGVfbWVtYmVycyA9IHR5cGVfbWVtYmVycwog
CiAgICAgICAgIGlmIHNlbGYudHlwZV9uYW1lICE9IHVjZmlyc3Qoc2VsZi50eXBlX25hbWUpOgpA
QCAtNzM0LDEzICs2OTYsMTMgQEAgY2xhc3MgUGFyYW1ldGVyOgogCiAKIGNsYXNzIENvbW1hbmQ6
Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbW1hbmRfbmFtZSwgdGFyZ2V0X3R5cGVzLCBjYWxs
X3BhcmFtZXRlcnMsIHJldHVybl9wYXJhbWV0ZXJzLCBkZXNjcmlwdGlvbiwgcGxhdGZvcm0sIGlz
X2FzeW5jKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29tbWFuZF9uYW1lLCB0YXJnZXRfdHlw
ZXMsIGNhbGxfcGFyYW1ldGVycywgcmV0dXJuX3BhcmFtZXRlcnMsIGRlc2NyaXB0aW9uLCBjb25k
aXRpb24sIGlzX2FzeW5jKToKICAgICAgICAgc2VsZi5jb21tYW5kX25hbWUgPSBjb21tYW5kX25h
bWUKICAgICAgICAgc2VsZi50YXJnZXRfdHlwZXMgPSB0YXJnZXRfdHlwZXMKICAgICAgICAgc2Vs
Zi5jYWxsX3BhcmFtZXRlcnMgPSBjYWxsX3BhcmFtZXRlcnMKICAgICAgICAgc2VsZi5yZXR1cm5f
cGFyYW1ldGVycyA9IHJldHVybl9wYXJhbWV0ZXJzCiAgICAgICAgIHNlbGYuZGVzY3JpcHRpb24g
PSBkZXNjcmlwdGlvbgotICAgICAgICBzZWxmLnBsYXRmb3JtID0gcGxhdGZvcm0KKyAgICAgICAg
c2VsZi5jb25kaXRpb24gPSBjb25kaXRpb24KICAgICAgICAgc2VsZi5pc19hc3luYyA9IGlzX2Fz
eW5jCiAKICAgICBkZWYgcmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMoc2VsZiwgcHJvdG9jb2wsIGRv
bWFpbik6CkBAIC03NTQsMTIgKzcxNiwxMiBAQCBjbGFzcyBDb21tYW5kOgogCiAKIGNsYXNzIEV2
ZW50OgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBldmVudF9uYW1lLCB0YXJnZXRfdHlwZXMsIGV2
ZW50X3BhcmFtZXRlcnMsIGRlc2NyaXB0aW9uLCBwbGF0Zm9ybSk6CisgICAgZGVmIF9faW5pdF9f
KHNlbGYsIGV2ZW50X25hbWUsIHRhcmdldF90eXBlcywgZXZlbnRfcGFyYW1ldGVycywgZGVzY3Jp
cHRpb24sIGNvbmRpdGlvbik6CiAgICAgICAgIHNlbGYuZXZlbnRfbmFtZSA9IGV2ZW50X25hbWUK
ICAgICAgICAgc2VsZi50YXJnZXRfdHlwZXMgPSB0YXJnZXRfdHlwZXMKICAgICAgICAgc2VsZi5l
dmVudF9wYXJhbWV0ZXJzID0gZXZlbnRfcGFyYW1ldGVycwogICAgICAgICBzZWxmLmRlc2NyaXB0
aW9uID0gZGVzY3JpcHRpb24KLSAgICAgICAgc2VsZi5wbGF0Zm9ybSA9IHBsYXRmb3JtCisgICAg
ICAgIHNlbGYuY29uZGl0aW9uID0gY29uZGl0aW9uCiAKICAgICBkZWYgcmVzb2x2ZV90eXBlX3Jl
ZmVyZW5jZXMoc2VsZiwgcHJvdG9jb2wsIGRvbWFpbik6CiAgICAgICAgIGxvZy5kZWJ1ZygiPj4g
UmVzb2x2aW5nIHR5cGUgcmVmZXJlbmNlcyBmb3IgcGFyYW1ldGVycyBpbiBldmVudDogJXMiICUg
c2VsZi5ldmVudF9uYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vb2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzLnB5IGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vb2JqY19nZW5lcmF0b3Jf
dGVtcGxhdGVzLnB5CmluZGV4IDIyNzQyMTUxOTk0ZjI0M2Y0ZWQxM2JjNzZmYThhNmI1Nzc1NWE1
MzIuLjQyMWNiMWJhMjYzMTQ2MzhlMjhlMDUzMTM4MmYyNDYyZTRmZTVkMzAgMTAwNzU1Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL29iamNfZ2Vu
ZXJhdG9yX3RlbXBsYXRlcy5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9vYmpjX2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkKQEAgLTEyNyw4ICsx
MjcsNyBAQCBwcml2YXRlOgogJHtzdWNjZXNzQ2FsbGJhY2t9CiAke2NvbnZlcnNpb25zfQogJHtp
bnZvY2F0aW9ufQotfQotIiIiKQorfSIiIikKIAogICAgIENvbmZpZ3VyYXRpb25Db21tYW5kUHJv
cGVydHkgPSAoCiAgICAgIiIiQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNl
dCR7ZG9tYWluTmFtZX1IYW5kbGVyOikgaWQ8JHtvYmpjUHJlZml4fSR7ZG9tYWluTmFtZX1Eb21h
aW5IYW5kbGVyPiAke3ZhcmlhYmxlTmFtZVByZWZpeH1IYW5kbGVyOyIiIikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL3ByZXByb2Nl
c3MucGwgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9w
cmVwcm9jZXNzLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBiMDhkMmFhZDA3MzdjMTZjNmQ2NzkwNzEyNWQ0YzYw
OGRlZTE5MmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9wcmVwcm9jZXNzLnBsCkBAIC0wLDAgKzEsMTE1IEBACisjISAv
dXNyL2Jpbi9lbnYgcGVybAorIworIyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQg
cHJvamVjdAorIworIyAgIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisjCisjICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisjICAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisjICAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIwor
IyAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorIyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyMgICBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisjICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyMgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorIyAgIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOworCit1c2UgQ29uZmlnOwor
dXNlIEdldG9wdDo6TG9uZzsKK3VzZSBJUEM6Ok9wZW4yOwordXNlIElQQzo6T3BlbjM7Cit1c2Ug
VGV4dDo6UGFyc2VXb3JkczsKKworbXkgJGlucHV0UGF0aDsKK215ICRkZWZpbmVzOworbXkgJHBy
ZXByb2Nlc3NvcjsKK215ICRvdXRwdXRQYXRoOworR2V0T3B0aW9ucygnaW5wdXQ9cycgPT4gXCRp
bnB1dFBhdGgsCisgICAgICAgICAgICdkZWZpbmVzPXMnID0+IFwkZGVmaW5lcywKKyAgICAgICAg
ICAgJ3ByZXByb2Nlc3Nvcj1zJyA9PiBcJHByZXByb2Nlc3NvciwKKyAgICAgICAgICAgJ291dHB1
dD1zJyA9PiBcJG91dHB1dFBhdGgpOworCitteSBAYXJncyA9ICgpOworaWYgKCEkcHJlcHJvY2Vz
c29yKSB7CisgICAgaWYgKCRDb25maWc6OkNvbmZpZ3sib3NuYW1lIn0gZXEgIk1TV2luMzIiKSB7
CisgICAgICAgICRwcmVwcm9jZXNzb3IgPSAkRU5We0NDfSB8fCAiY2wiOworICAgICAgICBwdXNo
KEBhcmdzLCBxdygvbm9sb2dvIC9FUCAvVFAgL0MpKTsKKyAgICB9IGVsc2UgeworICAgICAgICAk
cHJlcHJvY2Vzc29yID0gJEVOVntDQ30gfHwgKC14ICIvdXNyL2Jpbi9jbGFuZyIgPyAiL3Vzci9i
aW4vY2xhbmciIDogIi91c3IvYmluL2djYyIpOworICAgICAgICBwdXNoKEBhcmdzLCBxdygtRSAt
UCAteCBjKysgLUMpKTsKKyAgICB9Cit9CisKK2lmICgkQ29uZmlnOjpDb25maWd7Im9zbmFtZSJ9
IGVxICJkYXJ3aW4iKSB7CisgICAgcHVzaChAYXJncywgIi1JIiAuICRFTlZ7QlVJTFRfUFJPRFVD
VFNfRElSfSAuICIvdXNyL2xvY2FsL2luY2x1ZGUiKSBpZiAkRU5We0JVSUxUX1BST0RVQ1RTX0RJ
Un07CisgICAgcHVzaChAYXJncywgIi1pc3lzcm9vdCIsICRFTlZ7U0RLUk9PVH0pIGlmICRFTlZ7
U0RLUk9PVH07Cit9CisKKyMgUmVtb3ZlIGRvdWJsZSBxdW90YXRpb25zIGZyb20gJGRlZmluZXMg
YW5kIGV4dHJhY3QgbWFjcm9zLgorIyBGb3IgZXhhbXBsZSwgaWYgJGRlZmluZXMgaXMgJyAiQT0x
IiAiQj0xIiBDPTEgIiIgICAgRCAgJywKKyMgdGhlbiBpdCBpcyBjb252ZXJ0ZWQgaW50byBmb3Vy
IG1hY3JvcyAtREE9MSwgLURCPTEsIC1EQz0xIGFuZCAtREQuCiskZGVmaW5lcyA9fiBzL1wiLy9n
OworbXkgQG1hY3JvcyA9IGdyZXAgeyAkXyB9IHNwbGl0KC9ccysvLCAkZGVmaW5lcyk7ICMgZ3Jl
cCBza2lwcyBlbXB0eSBtYWNyb3MuCitAbWFjcm9zID0gbWFwIHsgIi1EJF8iIH0gQG1hY3JvczsK
KworbXkgJHBpZCA9IDA7CitpZiAoJENvbmZpZ3tvc25hbWV9IGVxICJjeWd3aW4iKSB7CisgICAg
JEVOVntQQVRIfSA9ICIkRU5We1BBVEh9Oi9jeWdkcml2ZS9jL2N5Z3dpbi9iaW4iOworICAgIG15
IEBwcmVwcm9jZXNzb3JBbmRGbGFnczsKKyAgICBpZiAoJHByZXByb2Nlc3NvciBlcSAiL3Vzci9i
aW4vZ2NjIikgeworICAgICAgICBAcHJlcHJvY2Vzc29yQW5kRmxhZ3MgPSBzcGxpdCgnICcsICRw
cmVwcm9jZXNzb3IpOworICAgIH0gZWxzZSB7CisgICAgICAgICRwcmVwcm9jZXNzb3IgPX4gLyIo
LiopIi87CisgICAgICAgIGNob21wKG15ICRwcmVwcm9jZXNzb3IgPSBgY3lncGF0aCAtdSAnJDEn
YCkgaWYgKGRlZmluZWQgJDEpOworICAgICAgICBjaG9tcCgkaW5wdXRQYXRoID0gYGN5Z3BhdGgg
LXcgJyRpbnB1dFBhdGgnYCk7CisgICAgICAgIEBwcmVwcm9jZXNzb3JBbmRGbGFncyA9ICgkcHJl
cHJvY2Vzc29yLCAiL25vbG9nbyIsICIvRVAiLCAiL1RQIiwgIi9DIik7CisgICAgfQorCisgICAg
IyBUaGlzIGNhbGwgY2FuIGZhaWwgaWYgV2luZG93cyByZWJhc2VzIGN5Z3dpbiwgc28gcmV0cnkg
YSBmZXcgdGltZXMgdW50aWwgaXQgc3VjY2VlZHMuCisgICAgZm9yIChteSAkdHJpZXMgPSAwOyAh
JHBpZCAmJiAoJHRyaWVzIDwgMjApOyAkdHJpZXMrKykgeworICAgICAgICBldmFsIHsKKyAgICAg
ICAgICAgICMgU3VwcHJlc3MgU1RERVJSIHNvIHRoYXQgaWYgd2UncmUgdXNpbmcgY2wuZXhlLCB0
aGUgb3V0cHV0CisgICAgICAgICAgICAjIG5hbWUgaXNuJ3QgbmVlZGxlc3NseSBlY2hvZWQuCisg
ICAgICAgICAgICB1c2UgU3ltYm9sICdnZW5zeW0nOyBteSAkZXJyID0gZ2Vuc3ltOworICAgICAg
ICAgICAgJHBpZCA9IG9wZW4zKFwqUFBfSU4sIFwqUFBfT1VULCAkZXJyLCBAcHJlcHJvY2Vzc29y
QW5kRmxhZ3MsIEBhcmdzLCBAbWFjcm9zLCAkaW5wdXRQYXRoKTsKKyAgICAgICAgICAgIDE7Cisg
ICAgICAgIH0gb3IgZG8geworICAgICAgICAgICAgc2xlZXAgMTsKKyAgICAgICAgfQorICAgIH0K
K30gZWxzaWYgKCRDb25maWc6OkNvbmZpZ3sib3NuYW1lIn0gZXEgIk1TV2luMzIiKSB7CisgICAg
IyBTdXBwcmVzcyBTVERFUlIgc28gdGhhdCBpZiB3ZSdyZSB1c2luZyBjbC5leGUsIHRoZSBvdXRw
dXQKKyAgICAjIG5hbWUgaXNuJ3QgbmVlZGxlc3NseSBlY2hvZWQuCisgICAgdXNlIFN5bWJvbCAn
Z2Vuc3ltJzsgbXkgJGVyciA9IGdlbnN5bTsKKyAgICAkcGlkID0gb3BlbjMoXCpQUF9JTiwgXCpQ
UF9PVVQsICRlcnIsICRwcmVwcm9jZXNzb3IsIEBhcmdzLCBAbWFjcm9zLCAkaW5wdXRQYXRoKTsK
K30gZWxzZSB7CisgICAgJHBpZCA9IG9wZW4yKFwqUFBfT1VULCBcKlBQX0lOLCBzaGVsbHdvcmRz
KCRwcmVwcm9jZXNzb3IpLCBAYXJncywgQG1hY3JvcywgJGlucHV0UGF0aCk7Cit9CitjbG9zZSBQ
UF9JTjsKK215IEBsaW5lcyA9IDxQUF9PVVQ+OworY2xvc2UgUFBfT1VUOword2FpdHBpZCgkcGlk
LCAwKTsKKworb3BlbiBPVVRQVVQsICI+JG91dHB1dFBhdGgiIHx8IGRpZSAiQ291bGQgbm90IG9w
ZW4gJG91dHB1dFBhdGggZm9yIHdyaXRpbmciOworZm9yZWFjaCBteSAkbGluZSAoQGxpbmVzKSB7
CisgICAgIyBJZ25vcmUgd2hpdGVzcGFjZSBsaW5lcy4KKyAgICBpZiAoJGxpbmUgPX4gL15ccyok
LykgeworICAgICAgICBuZXh0OworICAgIH0KKworICAgICMgQWRkIG5ld2xpbmVzIGJlZm9yZSBj
b21tZW50cy4KKyAgICBpZiAoJGxpbmUgPX4gL15cL1wvLykgeworICAgICAgICBwcmludCBPVVRQ
VVQgIlxuIjsKKyAgICB9CisKKyAgICBwcmludCBPVVRQVVQgJGxpbmU7Cit9CitjbG9zZSBPVVRQ
VVQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5IGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQppbmRleCAyYjFkODc4MmNiMmE3ZTkyYzgyYmNiNTczM2IxOWFkZDQ5NWQyOWQ1Li44
Y2VmMDA5NWY3ZTk0YWI2ODg1ZTBmYzczNDMxZTNkNmM4MmVlYzE5IDEwMDc1NQotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKQEAgLTExNyw3
ICsxMTcsNiBAQCBkZWYgZ2VuZXJhdGVfZnJvbV9zcGVjaWZpY2F0aW9uKHByaW1hcnlfc3BlY2lm
aWNhdGlvbl9maWxlcGF0aD1Ob25lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
dXRwdXRfZGlycGF0aD1Ob25lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Jj
ZV9vdXRwdXQ9RmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1ld29y
a19uYW1lPSIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGF0Zm9ybV9uYW1l
PSIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZV9mcm9udGVuZD1U
cnVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZV9iYWNrZW5kPVRy
dWUpOgogCkBAIC0xMzAsNyArMTI5LDYgQEAgZGVmIGdlbmVyYXRlX2Zyb21fc3BlY2lmaWNhdGlv
bihwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGg9Tm9uZSwKICAgICAgICAgZXhjZXB0IFZh
bHVlRXJyb3IgYXMgZToKICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiRXJyb3IgcGFyc2lu
ZyB2YWxpZCBKU09OIGluIGZpbGU6ICIgKyBmaWxlcGF0aCArICJcblBhcnNlIGVycm9yOiAiICsg
c3RyKGUpKQogCi0gICAgcGxhdGZvcm0gPSBQbGF0Zm9ybS5mcm9tU3RyaW5nKHBsYXRmb3JtX25h
bWUpCiAgICAgcHJvdG9jb2wgPSBtb2RlbHMuUHJvdG9jb2woZnJhbWV3b3JrX25hbWUpCiAgICAg
Zm9yIHNwZWNpZmljYXRpb24gaW4gc3VwcGxlbWVudGFsX3NwZWNpZmljYXRpb25fZmlsZXBhdGhz
OgogICAgICAgICBsb2FkX3NwZWNpZmljYXRpb24ocHJvdG9jb2wsIHNwZWNpZmljYXRpb24sIGlz
U3VwcGxlbWVudGFsPVRydWUpCkBAIC0xMzgsNyArMTM2LDcgQEAgZGVmIGdlbmVyYXRlX2Zyb21f
c3BlY2lmaWNhdGlvbihwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGg9Tm9uZSwKIAogICAg
IHByb3RvY29sLnJlc29sdmVfdHlwZXMoKQogCi0gICAgZ2VuZXJhdG9yX2FyZ3VtZW50cyA9IFtw
cm90b2NvbCwgcGxhdGZvcm0sIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aF0KKyAgICBn
ZW5lcmF0b3JfYXJndW1lbnRzID0gW3Byb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmls
ZXBhdGhdCiAgICAgZ2VuZXJhdG9ycyA9IFtdCiAKICAgICBpZiBwcm90b2NvbC5mcmFtZXdvcmsg
aXMgRnJhbWV3b3Jrcy5UZXN0OgpAQCAtMTYyLDcgKzE2MCw2IEBAIGRlZiBnZW5lcmF0ZV9mcm9t
X3NwZWNpZmljYXRpb24ocHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoPU5vbmUsCiAgICAg
ICAgIGdlbmVyYXRvcnMuYXBwZW5kKE9iakNQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5l
cmF0b3IoKmdlbmVyYXRvcl9hcmd1bWVudHMpKQogCiAgICAgZWxpZiBwcm90b2NvbC5mcmFtZXdv
cmsgaXMgRnJhbWV3b3Jrcy5KYXZhU2NyaXB0Q29yZToKLSAgICAgICAgZ2VuZXJhdG9ycy5hcHBl
bmQoSlNCYWNrZW5kQ29tbWFuZHNHZW5lcmF0b3IoKmdlbmVyYXRvcl9hcmd1bWVudHMpKQogICAg
ICAgICBnZW5lcmF0b3JzLmFwcGVuZChDcHBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlckhlYWRl
ckdlbmVyYXRvcigqZ2VuZXJhdG9yX2FyZ3VtZW50cykpCiAgICAgICAgIGdlbmVyYXRvcnMuYXBw
ZW5kKENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKCpnZW5lcmF0b3JfYXJndW1l
bnRzKSkKICAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoQ3BwQmFja2VuZERpc3BhdGNoZXJJbXBs
ZW1lbnRhdGlvbkdlbmVyYXRvcigqZ2VuZXJhdG9yX2FyZ3VtZW50cykpCkBAIC0yMjksNyArMjI2
LDYgQEAgZGVmIGdlbmVyYXRlX2Zyb21fc3BlY2lmaWNhdGlvbihwcmltYXJ5X3NwZWNpZmljYXRp
b25fZmlsZXBhdGg9Tm9uZSwKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICBhbGxv
d2VkX2ZyYW1ld29ya19uYW1lcyA9IFsnSmF2YVNjcmlwdENvcmUnLCAnV2ViSW5zcGVjdG9yJywg
J1dlYkluc3BlY3RvclVJJywgJ1dlYktpdCcsICdUZXN0J10KLSAgICBhbGxvd2VkX3BsYXRmb3Jt
X25hbWVzID0gWydpT1MnLCAnbWFjT1MnLCAnYWxsJywgJ2dlbmVyaWMnXQogICAgIGNsaV9wYXJz
ZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIodXNhZ2U9InVzYWdlOiAlcHJvZyBbb3B0aW9uc10g
UHJpbWFyeVByb3RvY29sLmpzb24gW1N1cHBsZW1lbnRhbFByb3RvY29sLmpzb24gLi4uXSIpCiAg
ICAgY2xpX3BhcnNlci5hZGRfb3B0aW9uKCItbyIsICItLW91dHB1dERpciIsIGhlbHA9IkRpcmVj
dG9yeSB3aGVyZSBnZW5lcmF0ZWQgZmlsZXMgc2hvdWxkIGJlIHdyaXR0ZW4uIikKICAgICBjbGlf
cGFyc2VyLmFkZF9vcHRpb24oIi0tZnJhbWV3b3JrIiwgdHlwZT0iY2hvaWNlIiwgY2hvaWNlcz1h
bGxvd2VkX2ZyYW1ld29ya19uYW1lcywgaGVscD0iVGhlIGZyYW1ld29yayB0aGF0IHRoZSBwcmlt
YXJ5IHNwZWNpZmljYXRpb24gYmVsb25ncyB0by4iKQpAQCAtMjM4LDcgKzIzNCw2IEBAIGlmIF9f
bmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgY2xpX3BhcnNlci5hZGRfb3B0aW9uKCItdCIsICIt
LXRlc3QiLCBhY3Rpb249InN0b3JlX3RydWUiLCBoZWxwPSJFbmFibGUgdGVzdCBtb2RlLiBVc2Ug
dW5pcXVlIG91dHB1dCBmaWxlbmFtZXMgY3JlYXRlZCBieSBwcmVwZW5kaW5nIHRoZSBpbnB1dCBm
aWxlbmFtZS4iKQogICAgIGNsaV9wYXJzZXIuYWRkX29wdGlvbigiLS1mcm9udGVuZCIsIGFjdGlv
bj0ic3RvcmVfdHJ1ZSIsIGhlbHA9IkdlbmVyYXRlIGNvZGUgZm9yIHRoZSBmcm9udGVuZC1zaWRl
IG9mIHRoZSBwcm90b2NvbCBvbmx5LiIpCiAgICAgY2xpX3BhcnNlci5hZGRfb3B0aW9uKCItLWJh
Y2tlbmQiLCBhY3Rpb249InN0b3JlX3RydWUiLCBoZWxwPSJHZW5lcmF0ZSBjb2RlIGZvciB0aGUg
YmFja2VuZC1zaWRlIG9mIHRoZSBwcm90b2NvbCBvbmx5LiIpCi0gICAgY2xpX3BhcnNlci5hZGRf
b3B0aW9uKCItLXBsYXRmb3JtIiwgZGVmYXVsdD0iZ2VuZXJpYyIsIGhlbHA9IlRoZSBwbGF0Zm9y
bSBvZiB0aGUgYmFja2VuZCBiZWluZyBnZW5lcmF0ZWQuIEZvciBleGFtcGxlLCB3ZSBjb21waWxl
IFdlYktpdDIgZm9yIGVpdGhlciBtYWNPUyBvciBpT1MuIFRoaXMgdmFsdWUgaXMgY2FzZS1pbnNl
bnNpdGl2ZS4gQWxsb3dlZCB2YWx1ZXM6ICVzIiAlICIsICIuam9pbihhbGxvd2VkX3BsYXRmb3Jt
X25hbWVzKSkKICAgICBvcHRpb25zID0gTm9uZQogCiAgICAgYXJnX29wdGlvbnMsIGFyZ192YWx1
ZXMgPSBjbGlfcGFyc2VyLnBhcnNlX2FyZ3MoKQpAQCAtMjY0LDcgKzI1OSw2IEBAIGlmIF9fbmFt
ZV9fID09ICdfX21haW5fXyc6CiAgICAgICAgICdvdXRwdXRfZGlycGF0aCc6IGFyZ19vcHRpb25z
Lm91dHB1dERpciwKICAgICAgICAgJ2NvbmNhdGVuYXRlX291dHB1dCc6IGFyZ19vcHRpb25zLnRl
c3QsCiAgICAgICAgICdmcmFtZXdvcmtfbmFtZSc6IGFyZ19vcHRpb25zLmZyYW1ld29yaywKLSAg
ICAgICAgJ3BsYXRmb3JtX25hbWUnOiBhcmdfb3B0aW9ucy5wbGF0Zm9ybSwKICAgICAgICAgJ2Zv
cmNlX291dHB1dCc6IGFyZ19vcHRpb25zLmZvcmNlLAogICAgICAgICAnZ2VuZXJhdGVfYmFja2Vu
ZCc6IGdlbmVyYXRlX2JhY2tlbmQsCiAgICAgICAgICdnZW5lcmF0ZV9mcm9udGVuZCc6IGdlbmVy
YXRlX2Zyb250ZW5kLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2FsbC9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2FsbC9kZWZpbml0
aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA4MTdmMTM1ZWU1YTcyMDk3YWUzZTEzMWJkZDQwZTYwMTY5OGFiMTBjLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9hbGwvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0u
anNvbgorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIk5l
dHdvcmsiLAotICAgICJ0eXBlcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIk5l
dHdvcmtFcnJvciIsCi0gICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAotICAgICAgICAgICAg
InBsYXRmb3JtIjogIm1hY29zIiwKLSAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwotICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAibWVzc2FnZSIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlw
dGlvbiI6ICJFcnJvciBtZXNzYWdlLiIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNv
ZGUiLCAidHlwZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIGNvZGUuIiB9Ci0g
ICAgICAgICAgICBdCi0gICAgICAgIH0KLSAgICBdLAotICAgICJjb21tYW5kcyI6IFsKLSAgICAg
ICAgewotICAgICAgICAgICAgIm5hbWUiOiAibG9hZFJlc291cmNlIiwKLSAgICAgICAgICAgICJw
bGF0Zm9ybSI6ICJtYWNvcyIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9hZHMgYSBy
ZXNvdXJjZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFnZSB3
aXRob3V0IGNyb3NzIG9yaWdpbiBjaGVja3MuIgotICAgICAgICB9Ci0gICAgXSwKLSAgICAiZXZl
bnRzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJyZXNvdXJjZUxvYWRlZCIs
Ci0gICAgICAgICAgICAicGxhdGZvcm0iOiAibWFjb3MiLAotICAgICAgICAgICAgImRlc2NyaXB0
aW9uIjogIkEgcmVzb3VyY2Ugd2FzIGxvYWRlZC4iCi0gICAgICAgIH0KLSAgICBdCi19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvYWxs
L2V4cGVjdGVkL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24tcmVzdWx0IGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2FsbC9leHBlY3RlZC9k
ZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uLXJlc3VsdApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggYzZlNjhmNGE5YWVkZDNkODQzNjcwYTIyZjBjYjgzNTMxN2VmNjQwNC4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvYWxsL2V4cGVjdGVkL2RlZmluaXRp
b25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24tcmVzdWx0CisrKyAvZGV2L251bGwKQEAgLTEsMTIx
NyArMCwwIEBACi0jIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxh
dGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0v
LyBOZXR3b3JrCi1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJOZXR3b3JrIiwgbnVs
bCk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiTmV0d29yay5sb2FkUmVzb3Vy
Y2UiLCBudWxsLCBbXSwgW10pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckV2ZW50KCJOZXR3
b3JrLnJlc291cmNlTG9hZGVkIiwgbnVsbCwgW10pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rl
ck5ldHdvcmtEaXNwYXRjaGVyID0gSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRpc3BhdGNoZXIu
YmluZChJbnNwZWN0b3JCYWNrZW5kLCAiTmV0d29yayIpOwotSW5zcGVjdG9yQmFja2VuZC5hY3Rp
dmF0ZURvbWFpbigiTmV0d29yayIsIG51bGwpOwotIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNr
ZW5kQ29tbWFuZHMuanMKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlz
cGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25z
LXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCi0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotCi1uYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKLQotY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGlj
OgotICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVy
PiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hl
cik7IH0KLSAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7
IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Ci1wcml2YXRlOgotICAgIFJlZlB0
cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKLX07Ci0KLQotY2xhc3Mg
QWx0ZXJuYXRlTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJhY2tl
bmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5BbHRlcm5hdGVOZXR3b3JrQmFj
a2VuZERpc3BhdGNoZXIoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlKGxvbmcg
Y2FsbElkKSA9IDA7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotI2VuZGlmIC8v
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotIyMjIEVuZCBGaWxlOiBU
ZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRl
ZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9j
b2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNl
IEluc3BlY3RvciB7Ci0KLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCi0jaWYgRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi1jbGFzcyBBbHRlcm5hdGVOZXR3b3Jr
QmFja2VuZERpc3BhdGNoZXI7Ci0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCi0KLWNsYXNzIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewot
cHVibGljOgotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UoRXJyb3JTdHJpbmcmKSA9IDA7
Ci1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB+TmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxl
cigpOwotfTsKLQotY2xhc3MgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGlj
IFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVm
PE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgTmV0
d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIHZvaWQgZGlzcGF0Y2gobG9uZyBy
ZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3Nh
Z2UpIGZpbmFsOwotcHJpdmF0ZToKLSAgICB2b2lkIGxvYWRSZXNvdXJjZShsb25nIHJlcXVlc3RJ
ZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKLSNpZiBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLXB1YmxpYzoKLSAgICB2b2lkIHNldEFsdGVybmF0
ZURpc3BhdGNoZXIoQWx0ZXJuYXRlTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVE
aXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7
IH0KLXByaXZhdGU6Ci0gICAgQWx0ZXJuYXRlTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyKiBtX2Fs
dGVybmF0ZURpc3BhdGNoZXIgeyBudWxscHRyIH07Ci0jZW5kaWYKLXByaXZhdGU6Ci0gICAgTmV0
d29ya0JhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiwgTmV0d29ya0JhY2tlbmRE
aXNwYXRjaGVySGFuZGxlciopOwotICAgIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIq
IG1fYWdlbnQgeyBudWxscHRyIH07Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMj
IyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNp
bmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSNpbmNs
dWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jZW5kaWYKLQotbmFtZXNw
YWNlIEluc3BlY3RvciB7Ci0KLU5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5OZXR3
b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9Ci0KLVJlZjxOZXR3b3JrQmFja2VuZERp
c3BhdGNoZXI+IE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEJhY2tlbmREaXNwYXRj
aGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciog
YWdlbnQpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTmV0d29ya0JhY2tlbmREaXNwYXRj
aGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOwotfQotCi1OZXR3b3JrQmFja2VuZERpc3Bh
dGNoZXI6Ok5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2Vu
ZERpc3BhdGNoZXIsIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQotICAg
IDogU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCi0gICAg
LCBtX2FnZW50KGFnZW50KQotewotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlz
cGF0Y2hlckZvckRvbWFpbigiTmV0d29yayJfcywgdGhpcyk7Ci19Ci0KLXZvaWQgTmV0d29ya0Jh
Y2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBt
ZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKLXsKLSAgICBSZWY8TmV0d29ya0Jh
Y2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKLQotICAgIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFt
ZXRlcnMpOwotCi0gICAgaWYgKG1ldGhvZCA9PSAibG9hZFJlc291cmNlIikKLSAgICAgICAgbG9h
ZFJlc291cmNlKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7Ci0gICAgZWxzZQotICAg
ICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNw
YXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrLiIgKyBtZXRob2QgKyAiJyB3YXMgbm90
IGZvdW5kIik7Ci19Ci0KLXZvaWQgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3Vy
Y2UobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCi17Ci0jaWYgRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0gICAgaWYgKG1fYWx0ZXJuYXRlRGlz
cGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZShy
ZXF1ZXN0SWQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBFcnJvclN0
cmluZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOwotICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZShlcnJvcik7Ci0KLSAgICBpZiAo
IWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9u
c2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAg
IG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNo
ZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMj
IyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQot
I2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVl
cy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVj
dG9yIHsKLQotY2xhc3MgRnJvbnRlbmRSb3V0ZXI7Ci0KLWNsYXNzIE5ldHdvcmtGcm9udGVuZERp
c3BhdGNoZXIgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIE5l
dHdvcmtGcm9udGVuZERpc3BhdGNoZXIoRnJvbnRlbmRSb3V0ZXImIGZyb250ZW5kUm91dGVyKSA6
IG1fZnJvbnRlbmRSb3V0ZXIoZnJvbnRlbmRSb3V0ZXIpIHsgfQotICAgIHZvaWQgcmVzb3VyY2VM
b2FkZWQoKTsKLXByaXZhdGU6Ci0gICAgRnJvbnRlbmRSb3V0ZXImIG1fZnJvbnRlbmRSb3V0ZXI7
Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEZyb250
ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hl
cnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0
aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0
Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91
dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVj
dG9yIHsKLQotdm9pZCBOZXR3b3JrRnJvbnRlbmREaXNwYXRjaGVyOjpyZXNvdXJjZUxvYWRlZCgp
Ci17Ci0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIk5ldHdvcmsu
cmVzb3VyY2VMb2FkZWQiX3MpOwotCi0gICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQoanNv
bk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9B
c3NlcnRpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotbmFtZXNwYWNlIFBy
b3RvY29sIHsKLQotCi0KLS8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgotbmFtZXNwYWNlIE5ldHdv
cmsgewotY2xhc3MgTmV0d29ya0Vycm9yOwotfSAvLyBOZXR3b3JrCi0vLyBFbmQgb2YgZm9yd2Fy
ZCBkZWNsYXJhdGlvbnMuCi0KLQotCi0KLW5hbWVzcGFjZSBOZXR3b3JrIHsKLWNsYXNzIE5ldHdv
cmtFcnJvciA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKLXB1YmxpYzoKLSAgICBlbnVtIHsK
LSAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAotICAgICAgICBNZXNzYWdlU2V0ID0gMSA8PCAwLAot
ICAgICAgICBDb2RlU2V0ID0gMSA8PCAxLAotICAgICAgICBBbGxGaWVsZHNTZXQgPSAoTWVzc2Fn
ZVNldCB8IENvZGVTZXQpCi0gICAgfTsKLQotICAgIHRlbXBsYXRlPGludCBTVEFURT4KLSAgICBj
bGFzcyBCdWlsZGVyIHsKLSAgICBwcml2YXRlOgotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0
PiBtX3Jlc3VsdDsKLQotICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8
IFNURVA+JiBjYXN0U3RhdGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKnJlaW50
ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBCdWlsZGVyKFJlZjwvKk5ldHdvcmtFcnJvciovSlNPTjo6T2JqZWN0PiYmIG9iamVj
dCkKLSAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9j
cmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKLSAgICAgICAgfQotICAgICAgICBmcmllbmQgY2xh
c3MgTmV0d29ya0Vycm9yOwotICAgIHB1YmxpYzoKLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
TWVzc2FnZVNldD4mIHNldE1lc3NhZ2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICAgICAgewot
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE1lc3NhZ2VTZXQpLCBwcm9wZXJ0
eV9tZXNzYWdlX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmco
Im1lc3NhZ2UiX3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TWVzc2Fn
ZVNldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2RlU2V0PiYg
c2V0Q29kZShpbnQgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBDb2RlU2V0KSwgcHJvcGVydHlfY29kZV9hbHJlYWR5X3NldCk7Ci0gICAgICAg
ICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcigiY29kZSJfcywgdmFsdWUpOwotICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxDb2RlU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgUmVmPE5l
dHdvcmtFcnJvcj4gcmVsZWFzZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7Ci0gICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoTmV0d29ya0Vycm9yKSA9PSBzaXplb2YoSlNPTjo6
T2JqZWN0KSwgY2Fubm90X2Nhc3QpOwotCi0gICAgICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiBq
c29uUmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKLSAgICAgICAgICAgIGF1dG8g
cmVzdWx0ID0gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8TmV0d29ya0Vycm9yPio+KCZq
c29uUmVzdWx0KSk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAg
fTsKLQotICAgIC8qCi0gICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgotICAgICAqIFJlZjxO
ZXR3b3JrRXJyb3I+IHJlc3VsdCA9IE5ldHdvcmtFcnJvcjo6Y3JlYXRlKCkKLSAgICAgKiAgICAg
LnNldE1lc3NhZ2UoLi4uKQotICAgICAqICAgICAuc2V0Q29kZSguLi4pCi0gICAgICogICAgIC5y
ZWxlYXNlKCk7Ci0gICAgICovCi0gICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0
ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKSk7Ci0gICAgfQotfTsKLQotfSAvLyBOZXR3b3JrCi0KLQotCi19IC8vIG5h
bWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xP
YmplY3RzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25z
LXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9i
amVjdHMuaCIKLQotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLW5hbWVzcGFjZSBQcm90b2Nv
bCB7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbmNs
dWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLUBwcm90b2NvbCBUZXN0UHJvdG9jb2xOZXR3b3JrRG9t
YWluSGFuZGxlcjsKLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotY2xhc3MgT2JqQ0luc3Bl
Y3Rvck5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVOZXR3
b3JrQmFja2VuZERpc3BhdGNoZXIgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVi
bGljOgotICAgIE9iakNJbnNwZWN0b3JOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFBy
b3RvY29sTmV0d29ya0RvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRs
ZXI7IH0KLSAgICB2b2lkIGxvYWRSZXNvdXJjZShsb25nIHJlcXVlc3RJZCkgZmluYWw7Ci1wcml2
YXRlOgotICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluSGFuZGxlcj4+
IG1fZGVsZWdhdGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNp
bXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSAiVGVz
dFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9y
IHsKLQotdm9pZCBPYmpDSW5zcGVjdG9yTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVz
b3VyY2UobG9uZyByZXF1ZXN0SWQpCi17Ci0gICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1Rv
U2VsZWN0b3I6QHNlbGVjdG9yKGxvYWRSZXNvdXJjZVdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3ND
YWxsYmFjazopXSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2Nv
bEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05l
dHdvcmsubG9hZFJlc291cmNlJyB3YXMgbm90IGZvdW5kIl9zKTsKLSAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2Vu
ZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgfTsKLQotICAgIGlkIHN1Y2Nlc3NDYWxs
YmFjayA9IF57Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1
ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKLSAgICB9OwotCi0gICAgW21f
ZGVsZWdhdGUgbG9hZFJlc291cmNlV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNj
ZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKLX0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0K
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8
V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5
ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5T
T2JqZWN0Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluLCBzZXR0ZXI9c2V0TmV0d29ya0hh
bmRsZXI6KSBpZDxUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluSGFuZGxlcj4gbmV0d29ya0hhbmRs
ZXI7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFRlc3RQcm90b2NvbE5ldHdvcmtE
b21haW5FdmVudERpc3BhdGNoZXIgKm5ldHdvcmtFdmVudERpc3BhdGNoZXI7Ci1AZW5kCi0KLQot
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbENv
bmZpZ3VyYXRpb24uaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbXBv
cnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRD
b3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW1wb3J0IDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLQotdXNpbmcgbmFt
ZXNwYWNlIEluc3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3Vy
YXRpb24KLXsKLSAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVy
OwotICAgIGlkPFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5IYW5kbGVyPiBfbmV0d29ya0hhbmRs
ZXI7Ci0gICAgVGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkV2ZW50RGlzcGF0Y2hlciAqX25ldHdv
cmtFdmVudERpc3BhdGNoZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xs
ZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgotewotICAgIHNl
bGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwot
ICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0g
ICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAgIFtfbmV0d29ya0hh
bmRsZXIgcmVsZWFzZV07Ci0gICAgW19uZXR3b3JrRXZlbnREaXNwYXRjaGVyIHJlbGVhc2VdOwot
ICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAodm9pZClzZXROZXR3b3JrSGFuZGxlcjooaWQ8
VGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkhhbmRsZXI+KWhhbmRsZXIKLXsKLSAgICBpZiAoaGFu
ZGxlciA9PSBfbmV0d29ya0hhbmRsZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIFtfbmV0d29y
a0hhbmRsZXIgcmVsZWFzZV07Ci0gICAgX25ldHdvcmtIYW5kbGVyID0gW2hhbmRsZXIgcmV0YWlu
XTsKLQotICAgIGF1dG8gYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IG1ha2VVbmlxdWU8T2JqQ0luc3Bl
Y3Rvck5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7Ci0gICAgYXV0byBhbHRlcm5h
dGVBZ2VudCA9IG1ha2VVbmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8TmV0d29ya0Jh
Y2tlbmREaXNwYXRjaGVyLCBBbHRlcm5hdGVOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI+PigiTmV0
d29yayJfcywgKl9jb250cm9sbGVyLCBXVEZNb3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIpKTsKLSAg
ICBfY29udHJvbGxlci0+YXBwZW5kRXh0cmFBZ2VudChXVEZNb3ZlKGFsdGVybmF0ZUFnZW50KSk7
Ci19Ci0KLS0gKGlkPFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5IYW5kbGVyPiluZXR3b3JrSGFu
ZGxlcgotewotICAgIHJldHVybiBfbmV0d29ya0hhbmRsZXI7Ci19Ci0KLS0gKFRlc3RQcm90b2Nv
bE5ldHdvcmtEb21haW5FdmVudERpc3BhdGNoZXIgKiluZXR3b3JrRXZlbnREaXNwYXRjaGVyCi17
Ci0gICAgaWYgKCFfbmV0d29ya0V2ZW50RGlzcGF0Y2hlcikKLSAgICAgICAgX25ldHdvcmtFdmVu
dERpc3BhdGNoZXIgPSBbW1Rlc3RQcm90b2NvbE5ldHdvcmtEb21haW5FdmVudERpc3BhdGNoZXIg
YWxsb2NdIGluaXRXaXRoQ29udHJvbGxlcjpfY29udHJvbGxlcl07Ci0gICAgcmV0dXJuIF9uZXR3
b3JrRXZlbnREaXNwYXRjaGVyOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xDb25maWd1cmF0aW9uLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVu
dERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5p
dGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1w
b3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPHd0Zi9KU09OVmFs
dWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBU
ZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluRXZlbnREaXNwYXRjaGVyCi17Ci0gICAgQXVnbWVudGFi
bGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKLX0KLQotLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250
cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAg
ICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIpOwotICAgIF9jb250cm9sbGVy
ID0gY29udHJvbGxlcjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClyZXNvdXJjZUxv
YWRlZAotewotICAgIGNvbnN0IEZyb250ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29udHJvbGxlci0+
ZnJvbnRlbmRSb3V0ZXIoKTsKLQotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0g
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRo
b2QiX3MsICJOZXR3b3JrLnJlc291cmNlTG9hZGVkIl9zKTsKLSAgICByb3V0ZXIuc2VuZEV2ZW50
KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlv
bnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2ltcG9y
dCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgotCi0KLUBjbGFzcyBUZXN0
UHJvdG9jb2xOZXR3b3JrRXJyb3I7Ci0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQ
cm90b2NvbFBsYXRmb3JtKSB7Ci0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1BbGwsCi0gICAgVGVz
dFByb3RvY29sUGxhdGZvcm1HZW5lcmljLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TLAot
ICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1MsCi19OwotCi0KLQotCi1fX2F0dHJpYnV0ZV9f
KCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sTmV0d29y
a0Vycm9yIDogUldJUHJvdG9jb2xKU09OT2JqZWN0Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQ
YXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKLS0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilq
c29uT2JqZWN0OwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTWVzc2FnZTooTlNTdHJpbmcgKilt
ZXNzYWdlIGNvZGU6KGludCljb2RlOwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9t
aWMsIGNvcHkpIE5TU3RyaW5nICptZXNzYWdlOwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChu
b25hdG9taWMsIGFzc2lnbikgaW50IGNvZGU7Ci1AZW5kCi0KLUBwcm90b2NvbCBUZXN0UHJvdG9j
b2xOZXR3b3JrRG9tYWluSGFuZGxlciA8TlNPYmplY3Q+Ci1Ab3B0aW9uYWwKLS0gKHZvaWQpbG9h
ZFJlc291cmNlV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJv
ckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKSh2b2lkKSlzdWNjZXNzQ2FsbGJhY2s7
Ci1AZW5kCi0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVy
ZmFjZSBUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluRXZlbnREaXNwYXRjaGVyIDogTlNPYmplY3QK
LS0gKHZvaWQpcmVzb3VyY2VMb2FkZWQ7Ci1AZW5kCi0KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9y
L1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgotCi0jIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5o
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMt
cGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmpl
Y3RQcml2YXRlLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3Rv
ckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLUBpbnRlcmZhY2Ug
VGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkV2ZW50RGlzcGF0Y2hlciAoUHJpdmF0ZSkKLS0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEluc3BlY3Rvcjo6QXVnbWVudGFibGVJbnNw
ZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyOwotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sSW50ZXJuYWwuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9u
cy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCA8V2ViSW5zcGVj
dG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9y
IHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgotT3B0aW9uYWw8T2JqQ0VudW1U
eXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0KLWlubGluZSBT
dHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xQbGF0Zm9ybSB2YWx1ZSkKLXsKLSAg
ICBzd2l0Y2godmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOgotICAg
ICAgICByZXR1cm4gImFsbCJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJp
YzoKLSAgICAgICAgcmV0dXJuICJnZW5lcmljIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxh
dGZvcm1JT1M6Ci0gICAgICAgIHJldHVybiAiaW9zIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29s
UGxhdGZvcm1NYWNPUzoKLSAgICAgICAgcmV0dXJuICJtYWNvcyJfczsKLSAgICB9Ci19Ci0KLXRl
bXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xQbGF0Zm9ybT4gZnJvbVByb3Rv
Y29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJhbGwi
KQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1BbGw7Ci0gICAgaWYgKHZhbHVl
ID09ICJnZW5lcmljIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJp
YzsKLSAgICBpZiAodmFsdWUgPT0gImlvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQ
bGF0Zm9ybUlPUzsKLSAgICBpZiAodmFsdWUgPT0gIm1hY29zIikKLSAgICAgICAgcmV0dXJuIFRl
c3RQcm90b2NvbFBsYXRmb3JtTWFjT1M7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQot
Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9u
cy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotCi0j
aW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIu
aCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+
Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbnRlcmZhY2UgVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zIChOZXR3b3JrRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZU5ldHdvcmtF
cnJvcjooVGVzdFByb3RvY29sTmV0d29ya0Vycm9yICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihp
ZClwYXlsb2FkOwotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMgKE5ldHdvcmtEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlTmV0d29ya0Vycm9yOihU
ZXN0UHJvdG9jb2xOZXR3b3JrRXJyb3IgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxv
YWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rp
b25hcnkgY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbE5ldHdvcmtFcnJv
ciBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOwotfQotCi1AZW5kCi0KLQotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbFR5cGVzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
ZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgot
Ci0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPFdlYklu
c3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0jaW1wb3J0IDx3dGYvQXNz
ZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNl
IEluc3BlY3RvcjsKLQotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sTmV0d29ya0Vycm9y
Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5
PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGlu
aXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVR
VUlSRURfUFJPUEVSVFkocGF5bG9hZFtAIm1lc3NhZ2UiXSwgQCJtZXNzYWdlIik7Ci0gICAgc2Vs
Zi5tZXNzYWdlID0gcGF5bG9hZFtAIm1lc3NhZ2UiXTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImNvZGUiXSwgQCJjb2RlIik7Ci0gICAgc2Vs
Zi5jb2RlID0gW3BheWxvYWRbQCJjb2RlIl0gaW50ZWdlclZhbHVlXTsKLQotICAgIHJldHVybiBz
ZWxmOwotfQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3Rv
Y29sSlNPTk9iamVjdCAqKW9iamVjdAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdp
dGhKU09OT2JqZWN0OltvYmplY3QgdG9KU09OT2JqZWN0XS5nZXQoKV0pKQotICAgICAgICByZXR1
cm4gbmlsOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0
aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBjb2RlOihpbnQpY29kZQotewotICAgIGlmICgh
KHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgVEhST1df
RVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShtZXNzYWdlLCBAIm1lc3NhZ2UiKTsKLQot
ICAgIHNlbGYubWVzc2FnZSA9IG1lc3NhZ2U7Ci0gICAgc2VsZi5jb2RlID0gY29kZTsKLQotICAg
IHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKXNldE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2Fn
ZQotewotICAgIFtzdXBlciBzZXRTdHJpbmc6bWVzc2FnZSBmb3JLZXk6QCJtZXNzYWdlIl07Ci19
Ci0KLS0gKE5TU3RyaW5nICopbWVzc2FnZQotewotICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9y
S2V5OkAibWVzc2FnZSJdOwotfQotCi0tICh2b2lkKXNldENvZGU6KGludCljb2RlCi17Ci0gICAg
W3N1cGVyIHNldEludGVnZXI6Y29kZSBmb3JLZXk6QCJjb2RlIl07Ci19Ci0KLS0gKGludCljb2Rl
Ci17Ci0gICAgcmV0dXJuIFtzdXBlciBpbnRlZ2VyRm9yS2V5OkAiY29kZSJdOwotfQotCi1AZW5k
Ci0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2NvbW1hbmQtdGFyZ2V0
VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbiBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9jb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hp
bmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDI3YWI2NWI5MmFiZWIx
Y2I4NDY1NzQ3Yzc2MzA4Zjg2YjZlMTgxNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9jb21tYW5kLXRhcmdldFR5cGUtbWF0
Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KQEAgLTAsMCArMSw5IEBACitbCit7Cisg
ICAgImRvbWFpbiI6ICJEb21haW4iLAorICAgICJkZWJ1Z2dhYmxlVHlwZXMiOiBbInBhZ2UiXSwK
KyAgICAidGFyZ2V0VHlwZXMiOiBbInBhZ2UiLCAid29ya2VyIl0sCisgICAgImNvbW1hbmRzIjog
W3sibmFtZSI6ICJDb21tYW5kIn1dLAorICAgICJldmVudHMiOiBbeyJuYW1lIjogIkV2ZW50In1d
Cit9CitdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbiBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9jb21tYW5kcy13aXRoLWFzeW5jLWF0
dHJpYnV0ZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjExMjYyZTg4OWZhNWJkMGI0YWU1N2U1ZjdmMWJhYzZj
ZmYzZmU5MzkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgpAQCAt
MCwwICsxLDEwOSBAQAoreworICAgICJkb21haW4iOiAiRGF0YWJhc2UiLAorICAgICJ0eXBlcyI6
IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkRhdGFiYXNlSWQiLAorICAgICAgICAg
ICAgInR5cGUiOiAiaW50ZWdlciIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVl
IGlkZW50aWZpZXIgb2YgRGF0YWJhc2Ugb2JqZWN0LiIKKyAgICAgICAgfSwKKyAgICAgICAgewor
ICAgICAgICAgICAgImlkIjogIlByaW1hcnlDb2xvcnMiLAorICAgICAgICAgICAgInR5cGUiOiAi
c3RyaW5nIiwKKyAgICAgICAgICAgICJlbnVtIjogWyJyZWQiLCAiZ3JlZW4iLCAiYmx1ZSJdCisg
ICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJDb2xvckxpc3QiLAorICAg
ICAgICAgICAgInR5cGUiOiAiYXJyYXkiLAorICAgICAgICAgICAgIml0ZW1zIjogeyAiJHJlZiI6
ICJQcmltYXJ5Q29sb3JzIiB9CisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJp
ZCI6ICJFcnJvciIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAg
ImRlc2NyaXB0aW9uIjogIkRhdGFiYXNlIGVycm9yLiIsCisgICAgICAgICAgICAicHJvcGVydGll
cyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm1lc3NhZ2UiLCAidHlwZSI6ICJzdHJp
bmciLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgbWVzc2FnZS4iIH0sCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJjb2RlIiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJFcnJv
ciBjb2RlLiIgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAiY29tbWFu
ZHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImV4ZWN1dGVTUUxTeW5jT3B0
aW9uYWxSZXR1cm5WYWx1ZXMiLAorICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIgfSwK
KyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInF1ZXJ5IiwgInR5cGUiOiAic3RyaW5nIiB9Cisg
ICAgICAgICAgICBdLAorICAgICAgICAgICAgInJldHVybnMiOiBbCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIm9wdGlvbmFsIjogdHJ1
ZSwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwKKyAgICAgICAgICAgICAgICB7ICJu
YW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiwgIm9w
dGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVzIiwgInR5
cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogImRhdGFiYXNlSWQiLCAiJHJlZiI6ICJEYXRhYmFzZUlkIiwg
Im9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic3FsRXJyb3Ii
LCAiJHJlZiI6ICJFcnJvciIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7
ICJuYW1lIjogInNjcmVlbkNvbG9yIiwgIiRyZWYiOiAiUHJpbWFyeUNvbG9ycyIsICJvcHRpb25h
bCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImFsdGVybmF0ZUNvbG9ycyIs
ICIkcmVmIjogIkNvbG9yTGlzdCIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInByaW50Q29sb3IiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsiY3lh
biIsICJtYWdlbnRhIiwgInllbGxvdyIsICJibGFjayJdLCAib3B0aW9uYWwiOiB0cnVlIH0KKyAg
ICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAi
ZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMiLAorICAgICAgICAgICAgImFzeW5j
IjogdHJ1ZSwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiIH0sCisgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJxdWVyeSIsICJ0eXBlIjogInN0cmluZyIgfQorICAgICAgICAgICAg
XSwKKyAgICAgICAgICAgICJyZXR1cm5zIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
Y29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJvcHRpb25hbCI6IHRydWUsICJpdGVtcyI6
IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3Rl
cyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6IHRy
dWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVj
dCIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxv
YWQiLCAidHlwZSI6ICJhbnkiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIsICJvcHRpb25hbCI6
IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAi
RXJyb3IiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJz
Y3JlZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlDb2xvcnMiLCAib3B0aW9uYWwiOiB0cnVlIH0s
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJhbHRlcm5hdGVDb2xvcnMiLCAiJHJlZiI6ICJD
b2xvckxpc3QiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbImN5YW4iLCAibWFnZW50
YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSwgIm9wdGlvbmFsIjogdHJ1ZSB9CisgICAgICAgICAgICBd
CisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImV4ZWN1dGVTUUxT
eW5jIiwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiIH0sCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJxdWVyeSIsICJ0eXBlIjogInN0cmluZyIgfQorICAgICAgICAgICAgXSwK
KyAgICAgICAgICAgICJyZXR1cm5zIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29s
dW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9
IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIg
fSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJl
ciIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVj
dCIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnki
IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0
YWJhc2VJZCIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYi
OiAiRXJyb3IiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJhbHRlcm5hdGVDb2xvcnMi
LCAiJHJlZiI6ICJDb2xvckxpc3QiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzY3Jl
ZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlDb2xvcnMiIH0sCisgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbImN5YW4iLCAi
bWFnZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSB9CisgICAgICAgICAgICBdCisgICAgICAgIH0s
CisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImV4ZWN1dGVTUUxBc3luYyIsCisgICAg
ICAgICAgICAiYXN5bmMiOiB0cnVlLAorICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIg
fSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInF1ZXJ5IiwgInR5cGUiOiAic3RyaW5nIiB9
CisgICAgICAgICAgICBdLAorICAgICAgICAgICAgInJldHVybnMiOiBbCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAi
dHlwZSI6ICJzdHJpbmciIH0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vdGVzIiwg
InR5cGUiOiAic3RyaW5nIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1w
IiwgInR5cGUiOiAibnVtYmVyIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVz
IiwgInR5cGUiOiAib2JqZWN0IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5bG9h
ZCIsICJ0eXBlIjogImFueSIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRhdGFiYXNl
SWQiLCAiJHJlZiI6ICJEYXRhYmFzZUlkIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
c3FsRXJyb3IiLCAiJHJlZiI6ICJFcnJvciIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjog
InNjcmVlbkNvbG9yIiwgIiRyZWYiOiAiUHJpbWFyeUNvbG9ycyIgfSwKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogImFsdGVybmF0ZUNvbG9ycyIsICIkcmVmIjogIkNvbG9yTGlzdCIgfSwKKyAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogInByaW50Q29sb3IiLCAidHlwZSI6ICJzdHJpbmciLCAi
ZW51bSI6IFsiY3lhbiIsICJtYWdlbnRhIiwgInllbGxvdyIsICJibGFjayJdIH0KKyAgICAgICAg
ICAgIF0KKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwt
cmV0dXJuLXBhcmFtZXRlcnMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRl
cnMuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4zNjFkNTdkODIwZGU5MTZhNzNjYmRkOTgzODNkMTI2NDIwMzk4
ZjRhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVy
cy5qc29uCkBAIC0wLDAgKzEsODUgQEAKK3sKKyAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKKyAg
ICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJEYXRhYmFzZUlkIiwK
KyAgICAgICAgICAgICJ0eXBlIjogImludGVnZXIiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9u
IjogIlVuaXF1ZSBpZGVudGlmaWVyIG9mIERhdGFiYXNlIG9iamVjdC4iCisgICAgICAgIH0sCisg
ICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJQcmltYXJ5Q29sb3JzIiwKKyAgICAgICAgICAg
ICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAiZW51bSI6IFsicmVkIiwgImdyZWVuIiwg
ImJsdWUiXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiQ29sb3JM
aXN0IiwKKyAgICAgICAgICAgICJ0eXBlIjogImFycmF5IiwKKyAgICAgICAgICAgICJpdGVtcyI6
IHsgIiRyZWYiOiAiUHJpbWFyeUNvbG9ycyIgfQorICAgICAgICB9LAorICAgICAgICB7CisgICAg
ICAgICAgICAiaWQiOiAiRXJyb3IiLAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAg
ICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJEYXRhYmFzZSBlcnJvci4iLAorICAgICAgICAgICAg
InByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJtZXNzYWdlIiwgInR5
cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIG1lc3NhZ2UuIiB9LAorICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAiY29kZSIsICJ0eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRp
b24iOiAiRXJyb3IgY29kZS4iIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisg
ICAgImNvbW1hbmRzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJleGVjdXRl
QWxsT3B0aW9uYWxQYXJhbWV0ZXJzIiwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJv
cHRpb25hbCI6IHRydWUsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6
IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjog
Im51bWJlciIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjog
InZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiLCAib3B0aW9uYWwiOiB0
cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAi
RGF0YWJhc2VJZCIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogInNxbEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlDb2xv
cnMiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJhbHRl
cm5hdGVDb2xvcnMiLCAiJHJlZiI6ICJDb2xvckxpc3QiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwg
ImVudW0iOiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSwgIm9wdGlvbmFs
IjogdHJ1ZSB9CisgICAgICAgICAgICBdLAorICAgICAgICAgICAgInJldHVybnMiOiBbCisgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIm9w
dGlvbmFsIjogdHJ1ZSwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwKKyAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjog
dHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAi
bnVtYmVyIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
dmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIsICJvcHRpb25hbCI6IHRy
dWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRhdGFiYXNlSWQiLCAiJHJlZiI6ICJE
YXRhYmFzZUlkIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAic3FsRXJyb3IiLCAiJHJlZiI6ICJFcnJvciIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogInNjcmVlbkNvbG9yIiwgIiRyZWYiOiAiUHJpbWFyeUNvbG9y
cyIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImFsdGVy
bmF0ZUNvbG9ycyIsICIkcmVmIjogIkNvbG9yTGlzdCIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogInByaW50Q29sb3IiLCAidHlwZSI6ICJzdHJpbmciLCAi
ZW51bSI6IFsiY3lhbiIsICJtYWdlbnRhIiwgInllbGxvdyIsICJibGFjayJdLCAib3B0aW9uYWwi
OiB0cnVlIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAg
ICAgIm5hbWUiOiAiZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIiwKKyAgICAgICAgICAgICJw
YXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAi
dHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIgfSwKKyAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIgfSwKKyAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIgfSwKKyAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiIH0sCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIgfSwK
KyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiIH0s
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVmIjogIlByaW1h
cnlDb2xvcnMiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJhbHRlcm5hdGVDb2xvcnMi
LCAiJHJlZiI6ICJDb2xvckxpc3QiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcmlu
dENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbImN5YW4iLCAibWFnZW50YSIsICJ5
ZWxsb3ciLCAiYmxhY2siXSB9CisgICAgICAgICAgICBdLAorICAgICAgICAgICAgInJldHVybnMi
OiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFy
cmF5IiwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwKKyAgICAgICAgICAgICAgICB7
ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiB9LAorICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiB9LAorICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiB9LAorICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIgfSwKKyAgICAgICAgICAgICAgICB7
ICJuYW1lIjogImRhdGFiYXNlSWQiLCAiJHJlZiI6ICJEYXRhYmFzZUlkIiB9LAorICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAic3FsRXJyb3IiLCAiJHJlZiI6ICJFcnJvciIgfSwKKyAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInNjcmVlbkNvbG9yIiwgIiRyZWYiOiAiUHJpbWFyeUNvbG9ycyIg
fSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImFsdGVybmF0ZUNvbG9ycyIsICIkcmVmIjog
IkNvbG9yTGlzdCIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInByaW50Q29sb3IiLCAi
dHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsiY3lhbiIsICJtYWdlbnRhIiwgInllbGxvdyIsICJi
bGFjayJdIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9kZWZpbml0aW9u
cy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uOWJlNDZhMTdhZDEyOWY2ZWMwZDIxYjE5OWM0ODU2ZjQwOTM3Njc2NwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9k
ZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCkBAIC0wLDAgKzEsMjggQEAKK3sKKyAg
ICAiZG9tYWluIjogIk5ldHdvcmsiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAg
ICAgICAgImlkIjogIk5ldHdvcmtFcnJvciIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3Qi
LAorICAgICAgICAgICAgImNvbmRpdGlvbiI6ICJQTEFURk9STShNQUMpIiwKKyAgICAgICAgICAg
ICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibWVzc2FnZSIsICJ0
eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBtZXNzYWdlLiIgfSwKKyAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogImNvZGUiLCAidHlwZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0
aW9uIjogIkVycm9yIGNvZGUuIiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAor
ICAgICJjb21tYW5kcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAibG9hZFJl
c291cmNlIiwKKyAgICAgICAgICAgICJjb25kaXRpb24iOiAiUExBVEZPUk0oTUFDKSIsCisgICAg
ICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9hZHMgYSByZXNvdXJjZSBpbiB0aGUgY29udGV4dCBv
ZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFnZSB3aXRob3V0IGNyb3NzIG9yaWdpbiBjaGVj
a3MuIgorICAgICAgICB9CisgICAgXSwKKyAgICAiZXZlbnRzIjogWworICAgICAgICB7CisgICAg
ICAgICAgICAibmFtZSI6ICJyZXNvdXJjZUxvYWRlZCIsCisgICAgICAgICAgICAiY29uZGl0aW9u
IjogIlBMQVRGT1JNKE1BQykiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkEgcmVzb3Vy
Y2Ugd2FzIGxvYWRlZC4iCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZG9tYWluLWRlYnVnZ2FibGVU
eXBlcy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2RvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZmViMGM5YTI3ZTZkMDNk
MzljYWFiYWUwZTM5NjY0NzdhMDRkMTBjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2RvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMu
anNvbgpAQCAtMCwwICsxLDggQEAKK1sKK3sKKyAgICAiZG9tYWluIjogIkRvbWFpbiIsCisgICAg
ImRlYnVnZ2FibGVUeXBlcyI6IFsid2ViLXBhZ2UiXSwKKyAgICAiY29tbWFuZHMiOiBbeyJuYW1l
IjogIkNvbW1hbmQifV0sCisgICAgImV2ZW50cyI6IFt7Im5hbWUiOiAiRXZlbnQifV0KK30KK10K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9kb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbiBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9kb21haW4tdGFy
Z2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5m
NjJmYjM4YmE3ODViMWViNDRjYTE4ODg2ZTA2ZDc5MjFiOWQwOTJjCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2RvbWFpbi10
YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCkBAIC0wLDAgKzEs
OCBAQAorWworeworICAgICJkb21haW4iOiAiRG9tYWluIiwKKyAgICAiZGVidWdnYWJsZVR5cGVz
IjogWyJwYWdlIl0sCisgICAgImNvbW1hbmRzIjogW3sibmFtZSI6ICJDb21tYW5kIiwgInRhcmdl
dFR5cGVzIjogWyJwYWdlIiwgIndvcmtlciJdfV0sCisgICAgImV2ZW50cyI6IFt7Im5hbWUiOiAi
RXZlbnQifV0KK30KK10KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9kb21haW4tdGFyZ2V0VHlwZXMuanNvbiBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9kb21haW4tdGFyZ2V0VHlwZXMuanNvbgpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi42YTZlNDBkNjBhZGMzNTdmMDY0ZmNhMTk0Nzk3Y2NiYWNiMGQ3ZTc0Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2RvbWFpbi10YXJnZXRUeXBlcy5qc29uCkBAIC0wLDAgKzEsOCBAQAorWworeworICAgICJk
b21haW4iOiAiRG9tYWluIiwKKyAgICAidGFyZ2V0VHlwZXMiOiBbInBhZ2UiXSwKKyAgICAiY29t
bWFuZHMiOiBbeyJuYW1lIjogIkNvbW1hbmQiLCAidGFyZ2V0VHlwZXMiOiBbInBhZ2UiXX1dLAor
ICAgICJldmVudHMiOiBbeyJuYW1lIjogIkV2ZW50IiwgInRhcmdldFR5cGVzIjogWyJwYWdlIl19
XQorfQorXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbiBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9kb21haW5zLXdpdGgtdmFy
eWluZy1jb21tYW5kLXNpemVzLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTRhOGVjYjE3NmQzYjhlYzliZjk2
Njc2ZTYzY2VhMDUxNDY2Yjg2OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5k
LXNpemVzLmpzb24KQEAgLTAsMCArMSw1NCBAQAorWworeworICAgICJkb21haW4iOiAiTmV0d29y
azEiLAorICAgICJjb21tYW5kcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAi
bG9hZFJlc291cmNlMSIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9hZHMgYSByZXNv
dXJjZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFnZSB3aXRo
b3V0IGNyb3NzIG9yaWdpbiBjaGVja3MuIgorICAgICAgICB9CisgICAgXQorfSwKK3sKKyAgICAi
ZG9tYWluIjogIk5ldHdvcmsyIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAg
ICAgICJpZCI6ICJMb2FkZXJJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAorICAg
ICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBsb2FkZXIgaWRlbnRpZmllci4iCisgICAg
ICAgIH0KKyAgICBdCit9LAoreworICAgICJkb21haW4iOiAiTmV0d29yazMiLAorICAgICJjb21t
YW5kcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAibG9hZFJlc291cmNlMSIs
CisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9hZHMgYSByZXNvdXJjZSBpbiB0aGUgY29u
dGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFnZSB3aXRob3V0IGNyb3NzIG9yaWdp
biBjaGVja3MuIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJs
b2FkUmVzb3VyY2UyIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBhIHJlc291
cmNlIGluIHRoZSBjb250ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGluc3BlY3RlZCBwYWdlIHdpdGhv
dXQgY3Jvc3Mgb3JpZ2luIGNoZWNrcy4iCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAg
ICAgICJuYW1lIjogImxvYWRSZXNvdXJjZTMiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjog
IkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVj
dGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKKyAgICAgICAgfSwKKyAgICAg
ICAgeworICAgICAgICAgICAgIm5hbWUiOiAibG9hZFJlc291cmNlNCIsCisgICAgICAgICAgICAi
ZGVzY3JpcHRpb24iOiAiTG9hZHMgYSByZXNvdXJjZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1l
IG9uIHRoZSBpbnNwZWN0ZWQgcGFnZSB3aXRob3V0IGNyb3NzIG9yaWdpbiBjaGVja3MuIgorICAg
ICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJsb2FkUmVzb3VyY2U1IiwK
KyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBhIHJlc291cmNlIGluIHRoZSBjb250
ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGluc3BlY3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3JpZ2lu
IGNoZWNrcy4iCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImxv
YWRSZXNvdXJjZTYiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3Vy
Y2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91
dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAg
ICAgIm5hbWUiOiAibG9hZFJlc291cmNlNyIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAi
TG9hZHMgYSByZXNvdXJjZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0
ZWQgcGFnZSB3aXRob3V0IGNyb3NzIG9yaWdpbiBjaGVja3MuIgorICAgICAgICB9CisgICAgXQor
fQorXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2VudW0tdmFsdWVzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZW51bS12YWx1ZXMuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jZGFkNjFkZjdjOWY5
Yzc2ZTY5Mjg5N2MzZGZlMGIwODIzZjkwZTRkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2VudW0tdmFsdWVzLmpzb24KQEAg
LTAsMCArMSwzNSBAQAoreyJkb21haW5zIjpbCit7CisgICAgImRvbWFpbiI6ICJUeXBlRG9tYWlu
IiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJUeXBlRG9t
YWluRW51bSIsCisgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgImVu
dW0iOiBbInNoYXJlZCIsICJyZWQiLCAiZ3JlZW4iLCAiYmx1ZSJdCisgICAgICAgIH0KKyAgICBd
Cit9LAoreworICAgICJkb21haW4iOiAiQ29tbWFuZERvbWFpbiIsCisgICAgImNvbW1hbmRzIjog
WworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJjb21tYW5kV2l0aEVudW1SZXR1cm5W
YWx1ZSIsCisgICAgICAgICAgICAicGFyYW1ldGVycyI6IFtdLAorICAgICAgICAgICAgInJldHVy
bnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJyZXR1cm5WYWx1ZSIsICJ0eXBlIjog
InN0cmluZyIsICJlbnVtIjogWyJzaGFyZWQiLCAiY3lhbiIsICJtYWdlbnRhIiwgInllbGxvdyJd
IH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0KK30sCit7CisgICAgImRvbWFpbiI6
ICJFdmVudERvbWFpbiIsCisgICAgImV2ZW50cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAg
Im5hbWUiOiAiZXZlbnRXaXRoRW51bVBhcmFtZXRlciIsCisgICAgICAgICAgICAicGFyYW1ldGVy
cyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBhcmFtZXRlciIsICJ0eXBlIjogInN0
cmluZyIsICJlbnVtIjogWyJzaGFyZWQiLCAiYmxhY2siLCAid2hpdGUiXSB9CisgICAgICAgICAg
ICBdCisgICAgICAgIH0KKyAgICBdCit9CitdfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmct
ZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdn
YWJsZVR5cGUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZGZlZDQxZWQyMWZmMjI0OTYwNDhmMTI0OTNhNmFm
NWEzMGU3NzM2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVn
Z2FibGVUeXBlLmpzb24KQEAgLTAsMCArMSw4IEBACitbCit7CisgICAgImRvbWFpbiI6ICJEb21h
aW4iLAorICAgICJkZWJ1Z2dhYmxlVHlwZXMiOiBbInBhZ2UiXSwKKyAgICAiY29tbWFuZHMiOiBb
eyJuYW1lIjogIkNvbW1hbmQifV0sCisgICAgImV2ZW50cyI6IFt7Im5hbWUiOiAiRXZlbnQiLCAi
dGFyZ2V0VHlwZXMiOiBbInBhZ2UiLCAid29ya2VyIl19XQorfQorXQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V2ZW50cy13aXRoLW9w
dGlvbmFsLXBhcmFtZXRlcnMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9ldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uY2FiYmYxMGI4MzZmOWZmN2NkOTkyNWRiNGQ2YjQxYzVkZmE4N2I0OAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
dmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KQEAgLTAsMCArMSw1OSBAQAorewor
ICAgICJkb21haW4iOiAiRGF0YWJhc2UiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAg
ICAgICAgICAgImlkIjogIkRhdGFiYXNlSWQiLAorICAgICAgICAgICAgInR5cGUiOiAic3RyaW5n
IiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgaWRlbnRpZmllciBvZiBEYXRh
YmFzZSBvYmplY3QuIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAi
UHJpbWFyeUNvbG9ycyIsCisgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAg
ICAgInZhbHVlcyI6IFsicmVkIiwgImdyZWVuIiwgImJsdWUiXQorICAgICAgICB9LAorICAgICAg
ICB7CisgICAgICAgICAgICAiaWQiOiAiQ29sb3JMaXN0IiwKKyAgICAgICAgICAgICJ0eXBlIjog
ImFycmF5IiwKKyAgICAgICAgICAgICJpdGVtcyI6IHsgIiRyZWYiOiAiUHJpbWFyeUNvbG9ycyIg
fQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiRXJyb3IiLAorICAg
ICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJE
YXRhYmFzZSBlcnJvci4iLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJtZXNzYWdlIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9u
IjogIkVycm9yIG1lc3NhZ2UuIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29kZSIs
ICJ0eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgY29kZS4iIH0KKyAgICAg
ICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgImV2ZW50cyI6IFsKKyAgICAgICAgewor
ICAgICAgICAgICAgIm5hbWUiOiAiZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyIsCisgICAg
ICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVt
bk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAib3B0aW9uYWwiOiB0cnVlLCAiaXRlbXMiOiB7ICJ0
eXBlIjogInN0cmluZyIgfSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAi
dHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiLCAib3B0aW9uYWwiOiB0cnVlIH0s
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiLCAi
b3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2FkIiwg
InR5cGUiOiAiYW55IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAic3FsRXJyb3IiLCAiJHJlZiI6ICJFcnJvciIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogInNjcmVlbkNvbG9yIiwgIiRyZWYiOiAiUHJpbWFyeUNv
bG9ycyIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImFs
dGVybmF0ZUNvbG9ycyIsICIkcmVmIjogIkNvbG9yTGlzdCIsICJvcHRpb25hbCI6IHRydWUgfSwK
KyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInByaW50Q29sb3IiLCAidHlwZSI6ICJzdHJpbmci
LCAidmFsdWVzIjogWyJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93IiwgImJsYWNrIl0sICJvcHRp
b25hbCI6IHRydWUgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAg
ICAgICAgICAibmFtZSI6ICJkaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMiLAorICAgICAg
ICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5O
YW1lcyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwK
KyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiB9LAor
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiB9
LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiB9
LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIgfSwK
KyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiIH0s
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVmIjogIlByaW1h
cnlDb2xvcnMiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJhbHRlcm5hdGVDb2xvcnMi
LCAiJHJlZiI6ICJDb2xvckxpc3QiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcmlu
dENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgInZhbHVlcyI6IFsiY3lhbiIsICJtYWdlbnRhIiwg
InllbGxvdyIsICJibGFjayJdIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0KK30K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9leHBlY3RlZC9jb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVU
eXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdn
YWJsZVR5cGUuanNvbi1yZXN1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDE2NWJhNTQ1ZmUzYWYwYjg3NjdlYzI2
NDg5ZmNjNjVkODA3MThjMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kLXRhcmdldFR5cGUtbWF0
Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tcmVzdWx0CkBAIC0wLDAgKzEsMTAxMSBA
QAorIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcy5pbgorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1k
b21haW4tZGVidWdnYWJsZVR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKy8vIERvbWFpbgorSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiRG9t
YWluIiwgWyJwYWdlIiwgIndvcmtlciJdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21t
YW5kKCJEb21haW4uQ29tbWFuZCIsIG51bGwsIFtdLCBbXSk7CitJbnNwZWN0b3JCYWNrZW5kLnJl
Z2lzdGVyRXZlbnQoIkRvbWFpbi5FdmVudCIsIG51bGwsIFtdKTsKK0luc3BlY3RvckJhY2tlbmQu
cmVnaXN0ZXJEb21haW5EaXNwYXRjaGVyID0gSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRpc3Bh
dGNoZXIuYmluZChJbnNwZWN0b3JCYWNrZW5kLCAiRG9tYWluIik7CitJbnNwZWN0b3JCYWNrZW5k
LmFjdGl2YXRlRG9tYWluKCJEb21haW4iLCBbInBhZ2UiXSk7CisjIyMgRW5kIEZpbGU6IEluc3Bl
Y3RvckJhY2tlbmRDb21tYW5kcy5qcy5pbgorCisjIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
Y29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNp
ZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworI2luY2x1ZGUgIlRl
c3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9u
dGVuZFJvdXRlci5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgQWx0ZXJuYXRl
QmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNo
ZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlz
cGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KKyAgICBCYWNrZW5kRGlzcGF0Y2hlciog
YmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdl
dCgpOyB9Citwcml2YXRlOgorICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5k
RGlzcGF0Y2hlcjsKK307CisKKworY2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNo
ZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHZp
cnR1YWwgfkFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKCkgeyB9CisgICAgdmlydHVh
bCB2b2lkIENvbW1hbmQobG9uZyBjYWxsSWQpID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCisjIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisj
IyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1
Z2dhYmxlVHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3R5cGVk
ZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCitjbGFzcyBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjsKKyNl
bmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworY2xhc3Mg
RG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZv
aWQgQ29tbWFuZChFcnJvclN0cmluZyYpID0gMDsKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5E
b21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKK307CisKK2NsYXNzIERvbWFpbkJhY2tl
bmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVy
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBjcmVh
dGUoQmFja2VuZERpc3BhdGNoZXImLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsK
KyAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwg
UmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5hbDsKK3ByaXZhdGU6CisgICAgdm9pZCBD
b21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMp
OworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorcHVibGljOgor
ICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0Y2hlcihBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlz
cGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVybmF0ZURpc3BhdGNoZXIgPSBh
bHRlcm5hdGVEaXNwYXRjaGVyOyB9Citwcml2YXRlOgorICAgIEFsdGVybmF0ZURvbWFpbkJhY2tl
bmREaXNwYXRjaGVyKiBtX2FsdGVybmF0ZURpc3BhdGNoZXIgeyBudWxscHRyIH07CisjZW5kaWYg
Ly8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCitwcml2YXRlOgorICAg
IERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiwgRG9tYWluQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
KiBtX2FnZW50IHsgbnVsbHB0ciB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisj
IyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTog
VGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpz
b24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYv
SlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQorI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIK
KyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKK0RvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6fkRv
bWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQorCitSZWY8RG9tYWluQmFja2VuZERp
c3BhdGNoZXI+IERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoQmFja2VuZERpc3BhdGNo
ZXImIGJhY2tlbmREaXNwYXRjaGVyLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFn
ZW50KQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERvbWFpbkJhY2tlbmREaXNwYXRjaGVy
KGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOworfQorCitEb21haW5CYWNrZW5kRGlzcGF0Y2hl
cjo6RG9tYWluQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNw
YXRjaGVyLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQorICAgIDogU3Vw
cGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCisgICAgLCBtX2Fn
ZW50KGFnZW50KQoreworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hl
ckZvckRvbWFpbigiRG9tYWluIl9zLCB0aGlzKTsKK30KKwordm9pZCBEb21haW5CYWNrZW5kRGlz
cGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBS
ZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCit7CisgICAgUmVmPERvbWFpbkJhY2tlbmREaXNw
YXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKKworICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFt
ZXRlcnM7CisgICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRlcnMpOwor
CisgICAgaWYgKG1ldGhvZCA9PSAiQ29tbWFuZCIpIHsKKyAgICAgICAgQ29tbWFuZChyZXF1ZXN0
SWQsIFdURk1vdmUocGFyYW1ldGVycykpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hl
cjo6TWV0aG9kTm90Rm91bmQsICInRG9tYWluLiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5k
Iik7Cit9CisKK3ZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9uZyByZXF1
ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCit7CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCisgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewor
ICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPkNvbW1hbmQocmVxdWVzdElkKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKKworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgIFJlZjxKU09OOjpPYmpl
Y3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9hZ2VudC0+Q29tbWFu
ZChlcnJvcik7CisKKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQorICAgICAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNl
KTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29s
RXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5k
RGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVy
cy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZC10YXJnZXRUeXBl
LW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9j
b2xPYmplY3RzLmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEZyb250
ZW5kUm91dGVyOworCitjbGFzcyBEb21haW5Gcm9udGVuZERpc3BhdGNoZXIgeworICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIERvbWFpbkZyb250ZW5kRGlzcGF0Y2hl
cihGcm9udGVuZFJvdXRlciYgZnJvbnRlbmRSb3V0ZXIpIDogbV9mcm9udGVuZFJvdXRlcihmcm9u
dGVuZFJvdXRlcikgeyB9CisgICAgdm9pZCBFdmVudCgpOworcHJpdmF0ZToKKyAgICBGcm9udGVu
ZFJvdXRlciYgbV9mcm9udGVuZFJvdXRlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgorIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVU
eXBlLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordm9pZCBE
b21haW5Gcm9udGVuZERpc3BhdGNoZXI6OkV2ZW50KCkKK3sKKyAgICBSZWY8SlNPTjo6T2JqZWN0
PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAganNvbk1lc3NhZ2Ut
PnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9zKTsKKworICAgIG1fZnJvbnRl
bmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3Bh
dGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5n
LWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JQcm90b2NvbFR5cGVzLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKKworCituYW1lc3BhY2UgUHJvdG9jb2wgeworCisKKworCisK
KworCisKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorCisjIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpz
b24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorCisjaW5jbHVkZSA8d3Rm
L09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworCisKK30gLy8gbmFtZXNwYWNl
IFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbE9iamVjdHMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNr
ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1h
bmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbiBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbmNsdWRlIDx3dGYv
UmV0YWluUHRyLmg+CisKK0Bwcm90b2NvbCBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVy
OworCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCitjbGFzcyBPYmpDSW5zcGVjdG9yRG9tYWlu
QmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERp
c3BhdGNoZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIE9i
akNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xEb21haW5E
b21haW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9CisgICAgdm9p
ZCBDb21tYW5kKGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKK3ByaXZhdGU6CisgICAgUmV0YWluUHRy
PGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFj
a2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmRE
aXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmQt
dGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbiBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9y
dCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlICJUZXN0UHJv
dG9jb2xJbnRlcm5hbC5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5o
IgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Igewor
Cit2b2lkIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25n
IHJlcXVlc3RJZCkKK3sKKyAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpA
c2VsZWN0b3IoQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgewor
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJ
ZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi5Db21tYW5kJyB3
YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRp
bmdFcnJvcnMoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlkIGVycm9yQ2FsbGJh
Y2sgPSBeKE5TU3RyaW5nICplcnJvcikgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5y
ZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVy
cm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJy
b3JzKCk7CisgICAgfTsKKworICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57CisgICAgICAgIGJh
Y2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpTT046Ok9iamVjdDo6
Y3JlYXRlKCksIGZhbHNlKTsKKyAgICB9OworCisgICAgW21fZGVsZWdhdGUgQ29tbWFuZFdpdGhF
cnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFj
a107Cit9CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sQ29uZmlndXJhdGlvbi5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29t
bWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9y
L1Rlc3RQcm90b2NvbC5oPgorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIp
KSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0CitAcHJv
cGVydHkgKG5vbmF0b21pYywgcmV0YWluLCBzZXR0ZXI9c2V0RG9tYWluSGFuZGxlcjopIGlkPFRl
c3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IGRvbWFpbkhhbmRsZXI7CitAcHJvcGVydHkg
KG5vbmF0b21pYywgcmVhZG9ubHkpIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0
Y2hlciAqZG9tYWluRXZlbnREaXNwYXRjaGVyOworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xD
b25maWd1cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFu
ZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sQ29u
ZmlndXJhdGlvbi5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2ltcG9y
dCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0
Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENv
cmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgorCit1c2luZyBuYW1l
c3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJh
dGlvbgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7
CisgICAgaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4gX2RvbWFpbkhhbmRsZXI7
CisgICAgVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyICpfZG9tYWluRXZl
bnREaXNwYXRjaGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihB
dWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0g
W3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBB
U1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJl
dHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbX2RvbWFpbkhhbmRsZXIg
cmVsZWFzZV07CisgICAgW19kb21haW5FdmVudERpc3BhdGNoZXIgcmVsZWFzZV07CisgICAgW3N1
cGVyIGRlYWxsb2NdOworfQorCistICh2b2lkKXNldERvbWFpbkhhbmRsZXI6KGlkPFRlc3RQcm90
b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+KWhhbmRsZXIKK3sKKyAgICBpZiAoaGFuZGxlciA9PSBf
ZG9tYWluSGFuZGxlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgW19kb21haW5IYW5kbGVyIHJl
bGVhc2VdOworICAgIF9kb21haW5IYW5kbGVyID0gW2hhbmRsZXIgcmV0YWluXTsKKworICAgIGF1
dG8gYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IG1ha2VVbmlxdWU8T2JqQ0luc3BlY3RvckRvbWFpbkJh
Y2tlbmREaXNwYXRjaGVyPihoYW5kbGVyKTsKKyAgICBhdXRvIGFsdGVybmF0ZUFnZW50ID0gbWFr
ZVVuaXF1ZTxBbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudDxEb21haW5CYWNrZW5kRGlzcGF0Y2hl
ciwgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXI+PigiRG9tYWluIl9zLCAqX2NvbnRy
b2xsZXIsIFdURk1vdmUoYWx0ZXJuYXRlRGlzcGF0Y2hlcikpOworICAgIF9jb250cm9sbGVyLT5h
cHBlbmRFeHRyYUFnZW50KFdURk1vdmUoYWx0ZXJuYXRlQWdlbnQpKTsKK30KKworLSAoaWQ8VGVz
dFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4pZG9tYWluSGFuZGxlcgoreworICAgIHJldHVy
biBfZG9tYWluSGFuZGxlcjsKK30KKworLSAoVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnRE
aXNwYXRjaGVyICopZG9tYWluRXZlbnREaXNwYXRjaGVyCit7CisgICAgaWYgKCFfZG9tYWluRXZl
bnREaXNwYXRjaGVyKQorICAgICAgICBfZG9tYWluRXZlbnREaXNwYXRjaGVyID0gW1tUZXN0UHJv
dG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgYWxsb2NdIGluaXRXaXRoQ29udHJvbGxl
cjpfY29udHJvbGxlcl07CisgICAgcmV0dXJuIF9kb21haW5FdmVudERpc3BhdGNoZXI7Cit9CisK
K0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKwor
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9t
YWluLWRlYnVnZ2FibGVUeXBlLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisK
K3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9j
b2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIKK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3Rv
ckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhD
b250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sK
KyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJu
IG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9s
bGVyOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKUV2ZW50Cit7CisgICAgY29uc3Qg
RnJvbnRlbmRSb3V0ZXImIHJvdXRlciA9IF9jb250cm9sbGVyLT5mcm9udGVuZFJvdXRlcigpOwor
CisgICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpOworICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVu
dCJfcyk7CisgICAgcm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkp
OworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNo
ZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVi
dWdnYWJsZVR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
KyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCisjaW1wb3J0IDxXZWJJbnNwZWN0
b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+CisKKworCisKKworCisKKworQHByb3RvY29sIFRl
c3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXIgPE5TT2JqZWN0PgorQG9wdGlvbmFsCistICh2
b2lkKUNvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVy
cm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKHZvaWQpKXN1Y2Nlc3NDYWxsYmFj
azsKK0BlbmQKKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50
ZXJmYWNlIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciA6IE5TT2JqZWN0
CistICh2b2lkKUV2ZW50OworQGVuZAorCisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90
b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4KKworIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2wuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1k
b21haW4tZGVidWdnYWJsZVR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29s
SlNPTk9iamVjdFByaXZhdGUuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxl
SW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKworQGlu
dGVyZmFjZSBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKFByaXZhdGUp
CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihJbnNwZWN0b3I6OkF1Z21lbnRh
YmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcjsKK0BlbmQKKworCisjIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29t
bWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29s
LmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+
CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5
cGU+CitPcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJp
bmcmIHZhbHVlKTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbiBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBv
cnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQ
cm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7
CisKKworCisKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5t
bQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRl
YnVnZ2FibGVUeXBlLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpT
T05PYmplY3RQcml2YXRlLmg+CisjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2ltcG9ydCA8
d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisjIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1h
c3luYy1hdHRyaWJ1dGUuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUu
anNvbi1yZXN1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODJjNTkwNmMxN2JhMGFiMTE1YjVhMWMzZmRlZjU0NDMw
YjU3NzRiMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5q
c29uLXJlc3VsdApAQCAtMCwwICsxLDE3NjAgQEAKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JC
YWNrZW5kQ29tbWFuZHMuanMuaW4KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBj
b21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworLy8gRGF0YWJhc2UKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJE
b21haW4oIkRhdGFiYXNlIiwgbnVsbCk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgi
RGF0YWJhc2UuUHJpbWFyeUNvbG9ycyIsIHtSZWQ6ICJyZWQiLCBHcmVlbjogImdyZWVuIiwgQmx1
ZTogImJsdWUifSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiRGF0YWJhc2Uu
ZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyIsIG51bGwsIFt7Im5hbWUiOiAiZGF0
YWJhc2VJZCIsICJ0eXBlIjogIm51bWJlciJ9LCB7Im5hbWUiOiAicXVlcnkiLCAidHlwZSI6ICJz
dHJpbmcifV0sIFsiY29sdW1uTmFtZXMiLCAibm90ZXMiLCAidGltZXN0YW1wIiwgInZhbHVlcyIs
ICJwYXlsb2FkIiwgImRhdGFiYXNlSWQiLCAic3FsRXJyb3IiLCAic2NyZWVuQ29sb3IiLCAiYWx0
ZXJuYXRlQ29sb3JzIiwgInByaW50Q29sb3IiXSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVy
Q29tbWFuZCgiRGF0YWJhc2UuZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMiLCBu
dWxsLCBbeyJuYW1lIjogImRhdGFiYXNlSWQiLCAidHlwZSI6ICJudW1iZXIifSwgeyJuYW1lIjog
InF1ZXJ5IiwgInR5cGUiOiAic3RyaW5nIn1dLCBbImNvbHVtbk5hbWVzIiwgIm5vdGVzIiwgInRp
bWVzdGFtcCIsICJ2YWx1ZXMiLCAicGF5bG9hZCIsICJkYXRhYmFzZUlkIiwgInNxbEVycm9yIiwg
InNjcmVlbkNvbG9yIiwgImFsdGVybmF0ZUNvbG9ycyIsICJwcmludENvbG9yIl0pOworSW5zcGVj
dG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIkRhdGFiYXNlLmV4ZWN1dGVTUUxTeW5jIiwgbnVs
bCwgW3sibmFtZSI6ICJkYXRhYmFzZUlkIiwgInR5cGUiOiAibnVtYmVyIn0sIHsibmFtZSI6ICJx
dWVyeSIsICJ0eXBlIjogInN0cmluZyJ9XSwgWyJjb2x1bW5OYW1lcyIsICJub3RlcyIsICJ0aW1l
c3RhbXAiLCAidmFsdWVzIiwgInBheWxvYWQiLCAiZGF0YWJhc2VJZCIsICJzcWxFcnJvciIsICJh
bHRlcm5hdGVDb2xvcnMiLCAic2NyZWVuQ29sb3IiLCAicHJpbnRDb2xvciJdKTsKK0luc3BlY3Rv
ckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJEYXRhYmFzZS5leGVjdXRlU1FMQXN5bmMiLCBudWxs
LCBbeyJuYW1lIjogImRhdGFiYXNlSWQiLCAidHlwZSI6ICJudW1iZXIifSwgeyJuYW1lIjogInF1
ZXJ5IiwgInR5cGUiOiAic3RyaW5nIn1dLCBbImNvbHVtbk5hbWVzIiwgIm5vdGVzIiwgInRpbWVz
dGFtcCIsICJ2YWx1ZXMiLCAicGF5bG9hZCIsICJkYXRhYmFzZUlkIiwgInNxbEVycm9yIiwgInNj
cmVlbkNvbG9yIiwgImFsdGVybmF0ZUNvbG9ycyIsICJwcmludENvbG9yIl0pOworSW5zcGVjdG9y
QmFja2VuZC5yZWdpc3RlckRhdGFiYXNlRGlzcGF0Y2hlciA9IEluc3BlY3RvckJhY2tlbmQucmVn
aXN0ZXJEaXNwYXRjaGVyLmJpbmQoSW5zcGVjdG9yQmFja2VuZCwgIkRhdGFiYXNlIik7CitJbnNw
ZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJEYXRhYmFzZSIsIG51bGwpOworIyMjIEVuZCBG
aWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMuaW4KKworIyMjIEJlZ2luIEZpbGU6IFRl
c3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29s
VHlwZXMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlci5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVy
Lmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlz
cGF0Y2hlciB7CitwdWJsaWM6CisgICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8
QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0g
V1RGTW92ZShkaXNwYXRjaGVyKTsgfQorICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlz
cGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KK3By
aXZhdGU6CisgICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVy
OworfTsKKworCitjbGFzcyBBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyIDogcHVi
bGljIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5B
bHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKCkgeyB9CisgICAgdmlydHVhbCB2b2lk
IGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyBjYWxsSWQsIGludCBpbl9k
YXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgY2FsbElkLCBpbnQgaW5f
ZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBleGVjdXRlU1FMU3luYyhsb25nIGNhbGxJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0
cmluZyYgaW5fcXVlcnkpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTEFzeW5jKGxv
bmcgY2FsbElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkgPSAw
OworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3Bh
dGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRo
LWFzeW5jLWF0dHJpYnV0ZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisK
K3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCitjbGFzcyBBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVyOworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQor
CitjbGFzcyBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CitwdWJsaWM6CisgICAg
Ly8gTmFtZWQgYWZ0ZXIgcGFyYW1ldGVyICdwcmludENvbG9yJyB3aGlsZSBnZW5lcmF0aW5nIGNv
bW1hbmQvZXZlbnQgZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcy4KKyAgICBlbnVt
IGNsYXNzIFByaW50Q29sb3IgeworICAgICAgICBDeWFuID0gMywKKyAgICAgICAgTWFnZW50YSA9
IDQsCisgICAgICAgIFllbGxvdyA9IDUsCisgICAgICAgIEJsYWNrID0gNiwKKyAgICB9OyAvLyBl
bnVtIGNsYXNzIFByaW50Q29sb3IKKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTFN5bmNPcHRp
b25hbFJldHVyblZhbHVlcyhFcnJvclN0cmluZyYsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBT
dHJpbmcmIGluX3F1ZXJ5LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYgb3B0X291dF9j
b2x1bW5OYW1lcywgT3B0aW9uYWw8U3RyaW5nPiYgb3B0X291dF9ub3RlcywgT3B0aW9uYWw8ZG91
YmxlPiYgb3B0X291dF90aW1lc3RhbXAsIE9wdGlvbmFsPEpTT046Ok9iamVjdD4mIG9wdF9vdXRf
dmFsdWVzLCBPcHRpb25hbDxKU09OOjpWYWx1ZT4mIG9wdF9vdXRfcGF5bG9hZCwgT3B0aW9uYWw8
aW50PiYgb3B0X291dF9kYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0
YWJhc2U6OkVycm9yPiYgb3B0X291dF9zcWxFcnJvciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0
YWJhc2U6OlByaW1hcnlDb2xvcnMqIG9wdF9vdXRfc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYgb3B0X291dF9hbHRlcm5hdGVDb2xv
cnMsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yKiBvcHRfb3V0
X3ByaW50Q29sb3IpID0gMDsKKyAgICBjbGFzcyBFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVy
blZhbHVlc0NhbGxiYWNrIDogcHVibGljIEJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2Ug
eworICAgIHB1YmxpYzoKKyAgICAgICAgRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1
ZXNDYWxsYmFjayhSZWY8QmFja2VuZERpc3BhdGNoZXI+JiYsIGludCBpZCk7CisgICAgICAgIHZv
aWQgc2VuZFN1Y2Nlc3MoUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mJiBjb2x1bW5OYW1l
cywgT3B0aW9uYWw8U3RyaW5nPiYgbm90ZXMsIE9wdGlvbmFsPGRvdWJsZT4mIHRpbWVzdGFtcCwg
T3B0aW9uYWw8SlNPTjo6T2JqZWN0PiYgdmFsdWVzLCBPcHRpb25hbDxKU09OOjpWYWx1ZT4mIHBh
eWxvYWQsIE9wdGlvbmFsPGludD4mIGRhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEYXRhYmFzZTo6RXJyb3I+JiYgc3FsRXJyb3IsIE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiBzY3JlZW5Db2xvciwgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiYgYWx0ZXJuYXRlQ29sb3JzLCBP
cHRpb25hbDxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvcj4gcHJp
bnRDb2xvcik7CisgICAgfTsKKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTEFzeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXMoaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnks
IFJlZjxFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrPiYmIGNhbGxi
YWNrKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxTeW5jKEVycm9yU3RyaW5nJiwg
aW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnksIFJlZlB0cjxKU09OOjpB
cnJheU9mPFN0cmluZz4+JiBvdXRfY29sdW1uTmFtZXMsIFN0cmluZyogb3V0X25vdGVzLCBkb3Vi
bGUqIG91dF90aW1lc3RhbXAsIEpTT046Ok9iamVjdCogb3V0X3ZhbHVlcywgSlNPTjo6VmFsdWUq
IG91dF9wYXlsb2FkLCBpbnQqIG91dF9kYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYgb3V0X3NxbEVycm9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4mIG91dF9hbHRlcm5hdGVDb2xvcnMsIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzKiBvdXRfc2NyZWVuQ29sb3Is
IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yKiBvdXRfcHJpbnRD
b2xvcikgPSAwOworICAgIGNsYXNzIEV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrIDogcHVibGljIEJh
Y2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UgeworICAgIHB1YmxpYzoKKyAgICAgICAgRXhl
Y3V0ZVNRTEFzeW5jQ2FsbGJhY2soUmVmPEJhY2tlbmREaXNwYXRjaGVyPiYmLCBpbnQgaWQpOwor
ICAgICAgICB2b2lkIHNlbmRTdWNjZXNzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiYg
Y29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIEpTT046
Ok9iamVjdCB2YWx1ZXMsIEpTT046OlZhbHVlIHBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYmIHNxbEVycm9yLCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyBzY3JlZW5Db2xvciwgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiYgYWx0ZXJuYXRl
Q29sb3JzLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciBwcmlu
dENvbG9yKTsKKyAgICB9OworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMQXN5bmMoaW50IGlu
X2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnksIFJlZjxFeGVjdXRlU1FMQXN5bmND
YWxsYmFjaz4mJiBjYWxsYmFjaykgPSAwOworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgfkRhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7Cit9OworCitjbGFzcyBEYXRhYmFzZUJhY2tl
bmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVy
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+IGNy
ZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
Kik7CisgICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRo
b2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkgZmluYWw7Citwcml2YXRlOgorICAgIHZv
aWQgZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHJlcXVlc3RJZCwgUmVm
UHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyAgICB2b2lkIGV4ZWN1dGVTUUxBc3lu
Y09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0
PiYmIHBhcmFtZXRlcnMpOworICAgIHZvaWQgZXhlY3V0ZVNRTFN5bmMobG9uZyByZXF1ZXN0SWQs
IFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisgICAgdm9pZCBleGVjdXRlU1FM
QXN5bmMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7
CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCitwdWJsaWM6Cisg
ICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0g
YWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQorcHJpdmF0ZToKKyAgICBBbHRlcm5hdGVEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVyKiBtX2FsdGVybmF0ZURpc3BhdGNoZXIgeyBudWxscHRyIH07CisjZW5k
aWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCitwcml2YXRlOgor
ICAgIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImLCBEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIERhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyKiBtX2FnZW50IHsgbnVsbHB0ciB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVn
aW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMu
aD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
KyNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCisjZW5kaWYgLy8g
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKK25hbWVzcGFjZSBJbnNw
ZWN0b3IgeworCitEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6fkRhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9CisKK1JlZjxEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVyPiBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoQmFja2VuZERpc3BhdGNoZXIm
IGJhY2tlbmREaXNwYXRjaGVyLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdl
bnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
cihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKK30KKworRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlcjo6RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2Vu
ZERpc3BhdGNoZXIsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKKyAg
ICA6IFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQorICAg
ICwgbV9hZ2VudChhZ2VudCkKK3sKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRp
c3BhdGNoZXJGb3JEb21haW4oIkRhdGFiYXNlIl9zLCB0aGlzKTsKK30KKwordm9pZCBEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5n
JiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKK3sKKyAgICBSZWY8RGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CisKKyAgICBSZWZQdHI8SlNPTjo6
T2JqZWN0PiBwYXJhbWV0ZXJzOworICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBw
YXJhbWV0ZXJzKTsKKworICAgIGlmIChtZXRob2QgPT0gImV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxS
ZXR1cm5WYWx1ZXMiKSB7CisgICAgICAgIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1
ZXMocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBpZiAobWV0aG9kID09ICJleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVl
cyIpIHsKKyAgICAgICAgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMocmVxdWVz
dElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBp
ZiAobWV0aG9kID09ICJleGVjdXRlU1FMU3luYyIpIHsKKyAgICAgICAgZXhlY3V0ZVNRTFN5bmMo
cmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBpZiAobWV0aG9kID09ICJleGVjdXRlU1FMQXN5bmMiKSB7CisgICAgICAgIGV4ZWN1dGVT
UUxBc3luYyhyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihC
YWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRGF0YWJhc2UuIiArIG1ldGhvZCAr
ICInIHdhcyBub3QgZm91bmQiKTsKK30KKwordm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
OjpleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVzdElkLCBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpCit7CisgICAgaW50IGluX2RhdGFiYXNlSWQg
PSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRJbnRlZ2VyKHBhcmFtZXRlcnMuZ2V0KCksICJkYXRh
YmFzZUlkIl9zLCBudWxscHRyKTsKKyAgICBTdHJpbmcgaW5fcXVlcnkgPSBtX2JhY2tlbmREaXNw
YXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgInF1ZXJ5Il9zLCBudWxscHRyKTsK
KyAgICBpZiAobV9iYWNrZW5kRGlzcGF0Y2hlci0+aGFzUHJvdG9jb2xFcnJvcnMoKSkgeworICAg
ICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNw
YXRjaGVyOjpJbnZhbGlkUGFyYW1zLCAiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICdEYXRhYmFz
ZS5leGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzJyBjYW4ndCBiZSBwcm9jZXNzZWQi
X3MpOworICAgICAgICByZXR1cm47CisgICAgfQorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCisgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeworICAg
ICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXMocmVxdWVzdElkLCBpbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCisKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1
bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0
cmluZz4+IG91dF9jb2x1bW5OYW1lczsKKyAgICBPcHRpb25hbDxTdHJpbmc+IG91dF9ub3RlczsK
KyAgICBPcHRpb25hbDxkb3VibGU+IG91dF90aW1lc3RhbXA7CisgICAgT3B0aW9uYWw8SlNPTjo6
T2JqZWN0PiBvdXRfdmFsdWVzOworICAgIE9wdGlvbmFsPEpTT046OlZhbHVlPiBvdXRfcGF5bG9h
ZDsKKyAgICBPcHRpb25hbDxpbnQ+IG91dF9kYXRhYmFzZUlkOworICAgIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IG91dF9zcWxFcnJvcjsKKyAgICBJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyBvdXRfc2NyZWVuQ29sb3I7Cisg
ICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IG91dF9h
bHRlcm5hdGVDb2xvcnM7CisgICAgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlBy
aW50Q29sb3Igb3V0X3ByaW50Q29sb3I7CisgICAgbV9hZ2VudC0+ZXhlY3V0ZVNRTFN5bmNPcHRp
b25hbFJldHVyblZhbHVlcyhlcnJvciwgaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnksIG91dF9jb2x1
bW5OYW1lcywgb3V0X25vdGVzLCBvdXRfdGltZXN0YW1wLCBvdXRfdmFsdWVzLCBvdXRfcGF5bG9h
ZCwgb3V0X2RhdGFiYXNlSWQsIG91dF9zcWxFcnJvciwgb3V0X3NjcmVlbkNvbG9yLCBvdXRfYWx0
ZXJuYXRlQ29sb3JzLCBvdXRfcHJpbnRDb2xvcik7CisKKyAgICBpZiAoIWVycm9yLmxlbmd0aCgp
KSB7CisgICAgICAgIGlmIChvdXRfY29sdW1uTmFtZXMpCisgICAgICAgICAgICByZXN1bHQtPnNl
dEFycmF5KCJjb2x1bW5OYW1lcyJfcywgb3V0X2NvbHVtbk5hbWVzKTsKKyAgICAgICAgaWYgKG91
dF9ub3Rlcy5oYXNWYWx1ZSgpKQorICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoIm5vdGVz
Il9zLCAqb3V0X25vdGVzKTsKKyAgICAgICAgaWYgKG91dF90aW1lc3RhbXAuaGFzVmFsdWUoKSkK
KyAgICAgICAgICAgIHJlc3VsdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICpvdXRfdGltZXN0
YW1wKTsKKyAgICAgICAgaWYgKG91dF92YWx1ZXMuaGFzVmFsdWUoKSkKKyAgICAgICAgICAgIHJl
c3VsdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsICpvdXRfdmFsdWVzKTsKKyAgICAgICAgaWYgKG91
dF9wYXlsb2FkLmhhc1ZhbHVlKCkpCisgICAgICAgICAgICByZXN1bHQtPnNldFZhbHVlKCJwYXls
b2FkIl9zLCAqb3V0X3BheWxvYWQpOworICAgICAgICBpZiAob3V0X2RhdGFiYXNlSWQuaGFzVmFs
dWUoKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgKm91
dF9kYXRhYmFzZUlkKTsKKyAgICAgICAgaWYgKG91dF9zcWxFcnJvcikKKyAgICAgICAgICAgIHJl
c3VsdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgb3V0X3NxbEVycm9yKTsKKyAgICAgICAgaWYg
KG91dF9zY3JlZW5Db2xvci5oYXNWYWx1ZSgpKQorICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJp
bmcoInNjcmVlbkNvbG9yIl9zLCAqb3V0X3NjcmVlbkNvbG9yKTsKKyAgICAgICAgaWYgKG91dF9h
bHRlcm5hdGVDb2xvcnMpCisgICAgICAgICAgICByZXN1bHQtPnNldEFycmF5KCJhbHRlcm5hdGVD
b2xvcnMiX3MsIG91dF9hbHRlcm5hdGVDb2xvcnMpOworICAgICAgICBpZiAob3V0X3ByaW50Q29s
b3IuaGFzVmFsdWUoKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJwcmludENvbG9y
Il9zLCAqb3V0X3ByaW50Q29sb3IpOworICAgIH0KKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQor
ICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZN
b3ZlKHJlc3VsdCksIGZhbHNlKTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBX
VEZNb3ZlKGVycm9yKSk7Cit9CisKK0RhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpF
eGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrOjpFeGVjdXRlU1FMQXN5
bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrKFJlZjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBi
YWNrZW5kRGlzcGF0Y2hlciwgaW50IGlkKSA6IEJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jh
c2UoV1RGTW92ZShiYWNrZW5kRGlzcGF0Y2hlciksIGlkKSB7IH0KKwordm9pZCBEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1
ZXNDYWxsYmFjazo6c2VuZFN1Y2Nlc3MoUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mJiBj
b2x1bW5OYW1lcywgT3B0aW9uYWw8U3RyaW5nPiYgbm90ZXMsIE9wdGlvbmFsPGRvdWJsZT4mIHRp
bWVzdGFtcCwgT3B0aW9uYWw8SlNPTjo6T2JqZWN0PiYgdmFsdWVzLCBPcHRpb25hbDxKU09OOjpW
YWx1ZT4mIHBheWxvYWQsIE9wdGlvbmFsPGludD4mIGRhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiYgc3FsRXJyb3IsIE9wdGlvbmFsPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiBzY3JlZW5Db2xvciwgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiYgYWx0ZXJuYXRl
Q29sb3JzLCBPcHRpb25hbDxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRD
b2xvcj4gcHJpbnRDb2xvcikKK3sKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9
IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgaWYgKGNvbHVtbk5hbWVzKQorICAgICAgICBq
c29uTWVzc2FnZS0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBjb2x1bW5OYW1lcyk7CisgICAg
aWYgKG5vdGVzLmhhc1ZhbHVlKCkpCisgICAgICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm5v
dGVzIl9zLCAqbm90ZXMpOworICAgIGlmICh0aW1lc3RhbXAuaGFzVmFsdWUoKSkKKyAgICAgICAg
anNvbk1lc3NhZ2UtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCAqdGltZXN0YW1wKTsKKyAgICBp
ZiAodmFsdWVzLmhhc1ZhbHVlKCkpCisgICAgICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoInZh
bHVlcyJfcywgKnZhbHVlcyk7CisgICAgaWYgKHBheWxvYWQuaGFzVmFsdWUoKSkKKyAgICAgICAg
anNvbk1lc3NhZ2UtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCAqcGF5bG9hZCk7CisgICAgaWYgKGRh
dGFiYXNlSWQuaGFzVmFsdWUoKSkKKyAgICAgICAganNvbk1lc3NhZ2UtPnNldEludGVnZXIoImRh
dGFiYXNlSWQiX3MsICpkYXRhYmFzZUlkKTsKKyAgICBpZiAoc3FsRXJyb3IpCisgICAgICAgIGpz
b25NZXNzYWdlLT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBzcWxFcnJvcik7CisgICAgaWYgKHNj
cmVlbkNvbG9yLmhhc1ZhbHVlKCkpCisgICAgICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoInNj
cmVlbkNvbG9yIl9zLCAqc2NyZWVuQ29sb3IpOworICAgIGlmIChhbHRlcm5hdGVDb2xvcnMpCisg
ICAgICAgIGpzb25NZXNzYWdlLT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCBhbHRlcm5h
dGVDb2xvcnMpOworICAgIGlmIChwcmludENvbG9yLmhhc1ZhbHVlKCkpCisgICAgICAgIGpzb25N
ZXNzYWdlLT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsICpwcmludENvbG9yKTsKKyAgICBDYWxs
YmFja0Jhc2U6OnNlbmRTdWNjZXNzKFdURk1vdmUoanNvbk1lc3NhZ2UpKTsKK30KKwordm9pZCBE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZh
bHVlcyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKQor
eworICAgIGludCBpbl9kYXRhYmFzZUlkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0SW50ZWdl
cihwYXJhbWV0ZXJzLmdldCgpLCAiZGF0YWJhc2VJZCJfcywgbnVsbHB0cik7CisgICAgU3RyaW5n
IGluX3F1ZXJ5ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0
KCksICJxdWVyeSJfcywgbnVsbHB0cik7CisgICAgaWYgKG1fYmFja2VuZERpc3BhdGNoZXItPmhh
c1Byb3RvY29sRXJyb3JzKCkpIHsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0
UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgIlNvbWUgYXJn
dW1lbnRzIG9mIG1ldGhvZCAnRGF0YWJhc2UuZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXMnIGNhbid0IGJlIHByb2Nlc3NlZCJfcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyAgICBpZiAobV9h
bHRlcm5hdGVEaXNwYXRjaGVyKSB7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhl
Y3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMocmVxdWVzdElkLCBpbl9kYXRhYmFzZUlk
LCBpbl9xdWVyeSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyAgICBSZWY8RGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2Fs
bGJhY2s+IGNhbGxiYWNrID0gYWRvcHRSZWYoKm5ldyBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjayhtX2Jh
Y2tlbmREaXNwYXRjaGVyLmNvcHlSZWYoKSwgcmVxdWVzdElkKSk7CisgICAgbV9hZ2VudC0+ZXhl
Y3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMoaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnks
IGNhbGxiYWNrLmNvcHlSZWYoKSk7CisKK30KKwordm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVyOjpleGVjdXRlU1FMU3luYyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4m
JiBwYXJhbWV0ZXJzKQoreworICAgIGludCBpbl9kYXRhYmFzZUlkID0gbV9iYWNrZW5kRGlzcGF0
Y2hlci0+Z2V0SW50ZWdlcihwYXJhbWV0ZXJzLmdldCgpLCAiZGF0YWJhc2VJZCJfcywgbnVsbHB0
cik7CisgICAgU3RyaW5nIGluX3F1ZXJ5ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5n
KHBhcmFtZXRlcnMuZ2V0KCksICJxdWVyeSJfcywgbnVsbHB0cik7CisgICAgaWYgKG1fYmFja2Vu
ZERpc3BhdGNoZXItPmhhc1Byb3RvY29sRXJyb3JzKCkpIHsKKyAgICAgICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBh
cmFtcywgIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnRGF0YWJhc2UuZXhlY3V0ZVNRTFN5bmMn
IGNhbid0IGJlIHByb2Nlc3NlZCJfcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNpZiBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyAgICBpZiAobV9hbHRlcm5h
dGVEaXNwYXRjaGVyKSB7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZVNR
TFN5bmMocmVxdWVzdElkLCBpbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCisKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1
bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0
cmluZz4+IG91dF9jb2x1bW5OYW1lczsKKyAgICBTdHJpbmcgb3V0X25vdGVzOworICAgIGRvdWJs
ZSBvdXRfdGltZXN0YW1wOworICAgIEpTT046Ok9iamVjdCBvdXRfdmFsdWVzOworICAgIEpTT046
OlZhbHVlIG91dF9wYXlsb2FkOworICAgIGludCBvdXRfZGF0YWJhc2VJZDsKKyAgICBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBvdXRfc3FsRXJyb3I7CisgICAg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IG91dF9hbHRl
cm5hdGVDb2xvcnM7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlD
b2xvcnMgb3V0X3NjcmVlbkNvbG9yOworICAgIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyOjpQcmludENvbG9yIG91dF9wcmludENvbG9yOworICAgIG1fYWdlbnQtPmV4ZWN1dGVTUUxT
eW5jKGVycm9yLCBpbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSwgb3V0X2NvbHVtbk5hbWVzLCAmb3V0
X25vdGVzLCAmb3V0X3RpbWVzdGFtcCwgb3V0X3ZhbHVlcywgJm91dF9wYXlsb2FkLCAmb3V0X2Rh
dGFiYXNlSWQsIG91dF9zcWxFcnJvciwgb3V0X2FsdGVybmF0ZUNvbG9ycywgJm91dF9zY3JlZW5D
b2xvciwgJm91dF9wcmludENvbG9yKTsKKworICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIHsKKyAg
ICAgICAgcmVzdWx0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIG91dF9jb2x1bW5OYW1lcyk7
CisgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJub3RlcyJfcywgb3V0X25vdGVzKTsKKyAgICAg
ICAgcmVzdWx0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgb3V0X3RpbWVzdGFtcCk7CisgICAg
ICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIG91dF92YWx1ZXMpOworICAgICAgICBy
ZXN1bHQtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBvdXRfcGF5bG9hZCk7CisgICAgICAgIHJlc3Vs
dC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgb3V0X2RhdGFiYXNlSWQpOworICAgICAgICBy
ZXN1bHQtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIG91dF9zcWxFcnJvcik7CisgICAgICAgIHJl
c3VsdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgb3V0X2FsdGVybmF0ZUNvbG9ycyk7
CisgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKG91dF9zY3JlZW5Db2xv
cikpOworICAgICAgICByZXN1bHQtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgSW5zcGVjdG9y
OjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKG91dF9wcmludENv
bG9yKSk7CisgICAgfQorICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCisgICAgICAgIG1fYmFja2Vu
ZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFs
c2UpOworICAgIGVsc2UKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9j
b2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsK
K30KKworRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY0Nh
bGxiYWNrOjpFeGVjdXRlU1FMQXN5bmNDYWxsYmFjayhSZWY8QmFja2VuZERpc3BhdGNoZXI+JiYg
YmFja2VuZERpc3BhdGNoZXIsIGludCBpZCkgOiBCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tC
YXNlKFdURk1vdmUoYmFja2VuZERpc3BhdGNoZXIpLCBpZCkgeyB9CisKK3ZvaWQgRGF0YWJhc2VC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrOjpzZW5kU3Vj
Y2VzcyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYmIGNvbHVtbk5hbWVzLCBjb25zdCBT
dHJpbmcmIG5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBKU09OOjpPYmplY3QgdmFsdWVzLCBKU09O
OjpWYWx1ZSBwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRhdGFiYXNlOjpFcnJvcj4mJiBzcWxFcnJvciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0
YWJhc2U6OlByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYmIGFsdGVybmF0ZUNvbG9ycywgRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3IgcHJpbnRDb2xvcikKK3sKKyAgICBSZWY8
SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAg
anNvbk1lc3NhZ2UtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgY29sdW1uTmFtZXMpOworICAg
IGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBub3Rlcyk7CisgICAganNvbk1lc3Nh
Z2UtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCB0aW1lc3RhbXApOworICAgIGpzb25NZXNzYWdl
LT5zZXRPYmplY3QoInZhbHVlcyJfcywgdmFsdWVzKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0VmFs
dWUoInBheWxvYWQiX3MsIHBheWxvYWQpOworICAgIGpzb25NZXNzYWdlLT5zZXRJbnRlZ2VyKCJk
YXRhYmFzZUlkIl9zLCBkYXRhYmFzZUlkKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJz
cWxFcnJvciJfcywgc3FsRXJyb3IpOworICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoInNjcmVl
bkNvbG9yIl9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0
YW50VmFsdWUoc2NyZWVuQ29sb3IpKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0QXJyYXkoImFsdGVy
bmF0ZUNvbG9ycyJfcywgYWx0ZXJuYXRlQ29sb3JzKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0U3Ry
aW5nKCJwcmludENvbG9yIl9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0
RW51bUNvbnN0YW50VmFsdWUocHJpbnRDb2xvcikpOworICAgIENhbGxiYWNrQmFzZTo6c2VuZFN1
Y2Nlc3MoV1RGTW92ZShqc29uTWVzc2FnZSkpOworfQorCit2b2lkIERhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXI6OmV4ZWN1dGVTUUxBc3luYyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9i
amVjdD4mJiBwYXJhbWV0ZXJzKQoreworICAgIGludCBpbl9kYXRhYmFzZUlkID0gbV9iYWNrZW5k
RGlzcGF0Y2hlci0+Z2V0SW50ZWdlcihwYXJhbWV0ZXJzLmdldCgpLCAiZGF0YWJhc2VJZCJfcywg
bnVsbHB0cik7CisgICAgU3RyaW5nIGluX3F1ZXJ5ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0
U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksICJxdWVyeSJfcywgbnVsbHB0cik7CisgICAgaWYgKG1f
YmFja2VuZERpc3BhdGNoZXItPmhhc1Byb3RvY29sRXJyb3JzKCkpIHsKKyAgICAgICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52
YWxpZFBhcmFtcywgIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnRGF0YWJhc2UuZXhlY3V0ZVNR
TEFzeW5jJyBjYW4ndCBiZSBwcm9jZXNzZWQiX3MpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisgICAgaWYgKG1f
YWx0ZXJuYXRlRGlzcGF0Y2hlcikgeworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmV4
ZWN1dGVTUUxBc3luYyhyZXF1ZXN0SWQsIGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5KTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKKworICAgIFJlZjxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6
RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2s+IGNhbGxiYWNrID0gYWRvcHRSZWYoKm5ldyBEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2sobV9iYWNr
ZW5kRGlzcGF0Y2hlci5jb3B5UmVmKCksIHJlcXVlc3RJZCkpOworICAgIG1fYWdlbnQtPmV4ZWN1
dGVTUUxBc3luYyhpbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSwgY2FsbGJhY2suY29weVJlZigpKTsK
KworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0QmFj
a2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0
Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgt
YXN5bmMtYXR0cmlidXRlLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNp
bmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgRnJvbnRlbmRSb3V0ZXI7CisKK30g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRj
aGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJp
YnV0ZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCisKKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK30gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNo
ZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUu
anNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgor
I2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisK
KworbmFtZXNwYWNlIFByb3RvY29sIHsKKworCisKKy8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgor
bmFtZXNwYWNlIERhdGFiYXNlIHsKK2NsYXNzIEVycm9yOworZW51bSBjbGFzcyBQcmltYXJ5Q29s
b3JzOworfSAvLyBEYXRhYmFzZQorLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgorCisK
Ky8vIFR5cGVkZWZzLgorbmFtZXNwYWNlIERhdGFiYXNlIHsKKy8qIFVuaXF1ZSBpZGVudGlmaWVy
IG9mIERhdGFiYXNlIG9iamVjdC4gKi8KK3R5cGVkZWYgaW50IERhdGFiYXNlSWQ7Cit0eXBlZGVm
IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xv
cnM+IENvbG9yTGlzdDsKK30gLy8gRGF0YWJhc2UKKy8vIEVuZCBvZiB0eXBlZGVmcy4KKworbmFt
ZXNwYWNlIFRlc3RIZWxwZXJzIHsKKworU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBj
b2RlKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVl
KFQgZW51bVZhbHVlKQoreworICAgIHJldHVybiBnZXRFbnVtQ29uc3RhbnRWYWx1ZShzdGF0aWNf
Y2FzdDxpbnQ+KGVudW1WYWx1ZSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwor
CituYW1lc3BhY2UgRGF0YWJhc2UgeworCitlbnVtIGNsYXNzIFByaW1hcnlDb2xvcnMgeworICAg
IFJlZCA9IDAsCisgICAgR3JlZW4gPSAxLAorICAgIEJsdWUgPSAyLAorfTsgLy8gZW51bSBjbGFz
cyBQcmltYXJ5Q29sb3JzCisKKy8qIERhdGFiYXNlIGVycm9yLiAqLworY2xhc3MgRXJyb3IgOiBw
dWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CitwdWJsaWM6CisgICAgZW51bSB7CisgICAgICAgIE5v
RmllbGRzU2V0ID0gMCwKKyAgICAgICAgTWVzc2FnZVNldCA9IDEgPDwgMCwKKyAgICAgICAgQ29k
ZVNldCA9IDEgPDwgMSwKKyAgICAgICAgQWxsRmllbGRzU2V0ID0gKE1lc3NhZ2VTZXQgfCBDb2Rl
U2V0KQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CisgICAgY2xhc3MgQnVpbGRl
ciB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7
CisKKyAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2Fz
dFN0YXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0
PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgQnVp
bGRlcihSZWY8LypFcnJvciovSlNPTjo6T2JqZWN0PiYmIG9iamVjdCkKKyAgICAgICAgICAgIDog
bV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxF
X0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0
X3N0YXRlKTsKKyAgICAgICAgfQorICAgICAgICBmcmllbmQgY2xhc3MgRXJyb3I7CisgICAgcHVi
bGljOgorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2FnZShj
b25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgTWVzc2FnZVNldCksIHByb3BlcnR5X21lc3NhZ2VfYWxyZWFkeV9zZXQpOwor
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibWVzc2FnZSJfcywgdmFsdWUpOworICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNZXNzYWdlU2V0PigpOworICAgICAgICB9CisKKyAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IENvZGVTZXQ+JiBzZXRDb2RlKGludCB2YWx1ZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENvZGVTZXQpLCBwcm9w
ZXJ0eV9jb2RlX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2Vy
KCJjb2RlIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvZGVTZXQ+
KCk7CisgICAgICAgIH0KKworICAgICAgICBSZWY8RXJyb3I+IHJlbGVhc2UoKQorICAgICAgICB7
CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3Vs
dF9pc19ub3RfcmVhZHkpOworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEVycm9y
KSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0KSwgY2Fubm90X2Nhc3QpOworCisgICAgICAgICAgICBS
ZWY8SlNPTjo6T2JqZWN0PiBqc29uUmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsK
KyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8
RXJyb3I+Kj4oJmpzb25SZXN1bHQpKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
ICAgIH0KKyAgICB9OworCisgICAgLyoKKyAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6Cisg
ICAgICogUmVmPEVycm9yPiByZXN1bHQgPSBFcnJvcjo6Y3JlYXRlKCkKKyAgICAgKiAgICAgLnNl
dE1lc3NhZ2UoLi4uKQorICAgICAqICAgICAuc2V0Q29kZSguLi4pCisgICAgICogICAgIC5yZWxl
YXNlKCk7CisgICAgICovCisgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgp
CisgICAgeworICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKSk7CisgICAgfQorfTsKKworfSAvLyBEYXRhYmFzZQorCisKKworbmFtZXNwYWNl
IFRlc3RIZWxwZXJzIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgUHJvdG9jb2xFbnVtVHlwZT4KK09w
dGlvbmFsPFByb3RvY29sRW51bVR5cGU+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZyhjb25zdCBT
dHJpbmcmKTsKKworLy8gRW51bXMgaW4gdGhlICdEYXRhYmFzZScgRG9tYWluCit0ZW1wbGF0ZTw+
CitPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4g
cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQ
cmltYXJ5Q29sb3JzPihjb25zdCBTdHJpbmcmKTsKKworfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBl
cnMKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
CisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVs
dEhhc2g7CisKKy8vIEhhc2ggZGVjbGFyYXRpb25zIGluIHRoZSAnRGF0YWJhc2UnIERvbWFpbgor
dGVtcGxhdGU8Pgorc3RydWN0IERlZmF1bHRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFi
YXNlOjpQcmltYXJ5Q29sb3JzPiB7CisgICAgdHlwZWRlZiBJbnRIYXNoPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiBIYXNoOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV1RGCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorCisjIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKworI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK25h
bWVzcGFjZSBQcm90b2NvbCB7CisKK25hbWVzcGFjZSBUZXN0SGVscGVycyB7CisKK3N0YXRpYyBj
b25zdCBjaGFyKiBjb25zdCBlbnVtX2NvbnN0YW50X3ZhbHVlc1tdID0geworICAgICJyZWQiLAor
ICAgICJncmVlbiIsCisgICAgImJsdWUiLAorICAgICJjeWFuIiwKKyAgICAibWFnZW50YSIsCisg
ICAgInllbGxvdyIsCisgICAgImJsYWNrIiwKK307CisKK1N0cmluZyBnZXRFbnVtQ29uc3RhbnRW
YWx1ZShpbnQgY29kZSkgeworICAgIHJldHVybiBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb2RlXTsK
K30KKworLy8gRW51bXMgaW4gdGhlICdEYXRhYmFzZScgRG9tYWluCisKK3RlbXBsYXRlPD4KK09w
dGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiBwYXJz
ZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1h
cnlDb2xvcnM+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCit7CisgICAgc3RhdGljIGNv
bnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0geworICAgICAgICAoc2l6ZV90KUluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzOjpSZWQsCisgICAgICAgIChzaXpl
X3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM6OkdyZWVuLAor
ICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29s
b3JzOjpCbHVlLAorICAgIH07CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAzOyArK2kpCisg
ICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFu
dFZhbHVlc1tpXV0pCisgICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpQcmltYXJ5Q29sb3JzKWNvbnN0YW50VmFsdWVzW2ldOworCisgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKK30KKworfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKKworCisKK30gLy8g
bmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5o
PgorCitAcHJvdG9jb2wgVGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyOworCituYW1l
c3BhY2UgSW5zcGVjdG9yIHsKKworCitjbGFzcyBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVyIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBPYmpDSW5z
cGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURv
bWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KKyAgICB2b2lk
IGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0SWQsIGludCBp
bl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KSBmaW5hbDsKKyAgICB2b2lkIGV4
ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVzdElkLCBpbnQgaW5f
ZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkgZmluYWw7CisgICAgdm9pZCBleGVj
dXRlU1FMU3luYyhsb25nIHJlcXVlc3RJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmlu
ZyYgaW5fcXVlcnkpIGZpbmFsOworICAgIHZvaWQgZXhlY3V0ZVNRTEFzeW5jKGxvbmcgcmVxdWVz
dElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkgZmluYWw7Citw
cml2YXRlOgorICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRs
ZXI+PiBtX2RlbGVnYXRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNp
bXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSAiVGVz
dFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9y
IHsKKwordm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0
ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHJlcXVlc3RJZCwgaW50IGluX2RhdGFi
YXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpCit7CisgICAgaWYgKCFbbV9kZWxlZ2F0ZSBy
ZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXNXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6ZGF0YWJhc2VJZDpxdWVyeTop
XSkgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJl
cXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RhdGFiYXNlLmV4
ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMnIHdhcyBub3QgZm91bmQiX3MpOworICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9y
KSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVx
dWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAg
YmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICB9OworCisgICAg
aWQgc3VjY2Vzc0NhbGxiYWNrID0gXihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKipjb2x1bW5OYW1l
cywgTlNTdHJpbmcgKipub3RlcywgZG91YmxlICp0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9i
amVjdCAqKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqcGF5bG9hZCwgaW50ICpkYXRh
YmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqc3FsRXJyb3IsIFRlc3RQcm90b2Nv
bERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4q
LyAqKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09w
dGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvciAqcHJpbnRDb2xvcikgeworICAgICAgICBSZWY8
SlNPTjo6T2JqZWN0PiByZXN1bHRPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAg
ICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoY29sdW1uTmFt
ZXMsIEAiY29sdW1uTmFtZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BU
SU9OQUxfUEFSQU1FVEVSKG5vdGVzLCBAIm5vdGVzIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUih2YWx1ZXMsIEAidmFsdWVzIik7CisgICAgICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihwYXlsb2FkLCBAInBh
eWxvYWQiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1F
VEVSKHNxbEVycm9yLCBAInNxbEVycm9yIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
QkFEX09QVElPTkFMX1BBUkFNRVRFUihhbHRlcm5hdGVDb2xvcnMsIEAiYWx0ZXJuYXRlQ29sb3Jz
Iik7CisgICAgICAgIGlmIChjb2x1bW5OYW1lcykKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+
c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB0b0pTT05TdHJpbmdBcnJheSgqY29sdW1uTmFtZXMp
KTsKKyAgICAgICAgaWYgKG5vdGVzKQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJp
bmcoIm5vdGVzIl9zLCAqbm90ZXMpOworICAgICAgICBpZiAodGltZXN0YW1wKQorICAgICAgICAg
ICAgcmVzdWx0T2JqZWN0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgKnRpbWVzdGFtcCk7Cisg
ICAgICAgIGlmICh2YWx1ZXMpCisgICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdCgi
dmFsdWVzIl9zLCBbKnZhbHVlcyB0b0pTT05PYmplY3RdKTsKKyAgICAgICAgaWYgKHBheWxvYWQp
CisgICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBbKnBheWxv
YWQgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIGlmIChkYXRhYmFzZUlkKQorICAgICAgICAgICAg
cmVzdWx0T2JqZWN0LT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCAqZGF0YWJhc2VJZCk7Cisg
ICAgICAgIGlmIChzcWxFcnJvcikKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0
KCJzcWxFcnJvciJfcywgWypzcWxFcnJvciB0b0pTT05PYmplY3RdKTsKKyAgICAgICAgaWYgKHNj
cmVlbkNvbG9yKQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNv
bG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKCpzY3JlZW5Db2xvcikpOworICAgICAgICBpZiAoYWx0
ZXJuYXRlQ29sb3JzKQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJu
YXRlQ29sb3JzIl9zLCB0b0pTT05TdHJpbmdBcnJheSgqYWx0ZXJuYXRlQ29sb3JzKSk7CisgICAg
ICAgIGlmIChwcmludENvbG9yKQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmco
InByaW50Q29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcoKnByaW50Q29sb3IpKTsKKyAgICAgICAg
YmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1
bHRPYmplY3QpLCBmYWxzZSk7CisgICAgfTsKKworICAgIGludCBvX2luX2RhdGFiYXNlSWQgPSBp
bl9kYXRhYmFzZUlkOworICAgIE5TU3RyaW5nICpvX2luX3F1ZXJ5ID0gaW5fcXVlcnk7CisKKyAg
ICBbbV9kZWxlZ2F0ZSBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzV2l0aEVycm9y
Q2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrIGRh
dGFiYXNlSWQ6b19pbl9kYXRhYmFzZUlkIHF1ZXJ5Om9faW5fcXVlcnldOworfQorCit2b2lkIE9i
akNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMQXN5bmNPcHRp
b25hbFJldHVyblZhbHVlcyhsb25nIHJlcXVlc3RJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0
IFN0cmluZyYgaW5fcXVlcnkpCit7CisgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2Vs
ZWN0b3I6QHNlbGVjdG9yKGV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzV2l0aEVy
cm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOmRhdGFiYXNlSWQ6cXVlcnk6KV0pIHsKKyAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJh
Y2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS5leGVjdXRlU1FMQXN5
bmNPcHRpb25hbFJldHVyblZhbHVlcycgd2FzIG5vdCBmb3VuZCJfcyk7CisgICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKKyAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJh
Y2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgIH07CisKKyAgICBpZCBzdWNjZXNz
Q2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmNvbHVtbk5hbWVzLCBOU1N0cmlu
ZyAqKm5vdGVzLCBkb3VibGUgKnRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqdmFs
dWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipwYXlsb2FkLCBpbnQgKmRhdGFiYXNlSWQsIFRl
c3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQ
cmltYXJ5Q29sb3JzICpzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICoqYWx0ZXJu
YXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0
dXJuVmFsdWVzUHJpbnRDb2xvciAqcHJpbnRDb2xvcikgeworICAgICAgICBSZWY8SlNPTjo6T2Jq
ZWN0PiByZXN1bHRPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBUSFJP
V19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoY29sdW1uTmFtZXMsIEAiY29s
dW1uTmFtZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFS
QU1FVEVSKG5vdGVzLCBAIm5vdGVzIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFE
X09QVElPTkFMX1BBUkFNRVRFUih2YWx1ZXMsIEAidmFsdWVzIik7CisgICAgICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihwYXlsb2FkLCBAInBheWxvYWQiKTsK
KyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHNxbEVy
cm9yLCBAInNxbEVycm9yIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElP
TkFMX1BBUkFNRVRFUihhbHRlcm5hdGVDb2xvcnMsIEAiYWx0ZXJuYXRlQ29sb3JzIik7CisgICAg
ICAgIGlmIChjb2x1bW5OYW1lcykKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXko
ImNvbHVtbk5hbWVzIl9zLCB0b0pTT05TdHJpbmdBcnJheSgqY29sdW1uTmFtZXMpKTsKKyAgICAg
ICAgaWYgKG5vdGVzKQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoIm5vdGVz
Il9zLCAqbm90ZXMpOworICAgICAgICBpZiAodGltZXN0YW1wKQorICAgICAgICAgICAgcmVzdWx0
T2JqZWN0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgKnRpbWVzdGFtcCk7CisgICAgICAgIGlm
ICh2YWx1ZXMpCisgICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdCgidmFsdWVzIl9z
LCBbKnZhbHVlcyB0b0pTT05PYmplY3RdKTsKKyAgICAgICAgaWYgKHBheWxvYWQpCisgICAgICAg
ICAgICByZXN1bHRPYmplY3QtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBbKnBheWxvYWQgdG9KU09O
T2JqZWN0XSk7CisgICAgICAgIGlmIChkYXRhYmFzZUlkKQorICAgICAgICAgICAgcmVzdWx0T2Jq
ZWN0LT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCAqZGF0YWJhc2VJZCk7CisgICAgICAgIGlm
IChzcWxFcnJvcikKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KCJzcWxFcnJv
ciJfcywgWypzcWxFcnJvciB0b0pTT05PYmplY3RdKTsKKyAgICAgICAgaWYgKHNjcmVlbkNvbG9y
KQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCB0
b1Byb3RvY29sU3RyaW5nKCpzY3JlZW5Db2xvcikpOworICAgICAgICBpZiAoYWx0ZXJuYXRlQ29s
b3JzKQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3Jz
Il9zLCB0b0pTT05TdHJpbmdBcnJheSgqYWx0ZXJuYXRlQ29sb3JzKSk7CisgICAgICAgIGlmIChw
cmludENvbG9yKQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInByaW50Q29s
b3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcoKnByaW50Q29sb3IpKTsKKyAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHRPYmplY3Qp
LCBmYWxzZSk7CisgICAgfTsKKworICAgIGludCBvX2luX2RhdGFiYXNlSWQgPSBpbl9kYXRhYmFz
ZUlkOworICAgIE5TU3RyaW5nICpvX2luX3F1ZXJ5ID0gaW5fcXVlcnk7CisKKyAgICBbbV9kZWxl
Z2F0ZSBleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1dpdGhFcnJvckNhbGxiYWNr
OmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjayBkYXRhYmFzZUlk
Om9faW5fZGF0YWJhc2VJZCBxdWVyeTpvX2luX3F1ZXJ5XTsKK30KKwordm9pZCBPYmpDSW5zcGVj
dG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTFN5bmMobG9uZyByZXF1ZXN0
SWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KQoreworICAgIGlm
ICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihleGVjdXRlU1FMU3lu
Y1dpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazpkYXRhYmFzZUlkOnF1ZXJ5OildKSB7
CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVz
dElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRGF0YWJhc2UuZXhlY3V0
ZVNRTFN5bmMnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigp
LT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWQg
ZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7CisgICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hl
cjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2Vu
ZFBlbmRpbmdFcnJvcnMoKTsKKyAgICB9OworCisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihO
U0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqbm90ZXMsIGRvdWJs
ZSB0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqdmFsdWVzLCBSV0lQcm90b2NvbEpT
T05PYmplY3QgKnBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVy
cm9yICpzcWxFcnJvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICphbHRlcm5hdGVDb2xvcnMsIFRl
c3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyBzY3JlZW5Db2xvciwgVGVzdFByb3RvY29s
RGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3IgcHJpbnRDb2xvcikgeworICAgICAgICBS
ZWY8SlNPTjo6T2JqZWN0PiByZXN1bHRPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwor
ICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihjb2x1bW5OYW1l
cywgQCJjb2x1bW5OYW1lcyIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVE
X1BBUkFNRVRFUihub3RlcywgQCJub3RlcyIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9S
X1JFUVVJUkVEX1BBUkFNRVRFUih2YWx1ZXMsIEAidmFsdWVzIik7CisgICAgICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHBheWxvYWQsIEAicGF5bG9hZCIpOworICAg
ICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihzcWxFcnJvciwgQCJz
cWxFcnJvciIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRF
UihhbHRlcm5hdGVDb2xvcnMsIEAiYWx0ZXJuYXRlQ29sb3JzIik7CisgICAgICAgIHJlc3VsdE9i
amVjdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB0b0pTT05TdHJpbmdBcnJheShjb2x1bW5O
YW1lcykpOworICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygibm90ZXMiX3MsIG5vdGVz
KTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgdGltZXN0
YW1wKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgW3ZhbHVl
cyB0b0pTT05PYmplY3RdKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRWYWx1ZSgicGF5bG9h
ZCJfcywgW3BheWxvYWQgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0
SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgZGF0YWJhc2VJZCk7CisgICAgICAgIHJlc3VsdE9iamVj
dC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgW3NxbEVycm9yIHRvSlNPTk9iamVjdF0pOworICAg
ICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIHRvSlNPTlN0
cmluZ0FycmF5KGFsdGVybmF0ZUNvbG9ycykpOworICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0
cmluZygic2NyZWVuQ29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcoc2NyZWVuQ29sb3IpKTsKKyAg
ICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsIHRvUHJvdG9jb2xT
dHJpbmcocHJpbnRDb2xvcikpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVz
cG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdE9iamVjdCksIGZhbHNlKTsKKyAgICB9Owor
CisgICAgaW50IG9faW5fZGF0YWJhc2VJZCA9IGluX2RhdGFiYXNlSWQ7CisgICAgTlNTdHJpbmcg
Km9faW5fcXVlcnkgPSBpbl9xdWVyeTsKKworICAgIFttX2RlbGVnYXRlIGV4ZWN1dGVTUUxTeW5j
V2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0Nh
bGxiYWNrIGRhdGFiYXNlSWQ6b19pbl9kYXRhYmFzZUlkIHF1ZXJ5Om9faW5fcXVlcnldOworfQor
Cit2b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FM
QXN5bmMobG9uZyByZXF1ZXN0SWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGlu
X3F1ZXJ5KQoreworICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxl
Y3RvcihleGVjdXRlU1FMQXN5bmNXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6ZGF0
YWJhc2VJZDpxdWVyeTopXSkgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQ
cm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5k
LCAiJ0RhdGFiYXNlLmV4ZWN1dGVTUUxBc3luYycgd2FzIG5vdCBmb3VuZCJfcyk7CisgICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsK
KyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0
SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgIH07CisKKyAgICBpZCBz
dWNjZXNzQ2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqY29sdW1uTmFtZXMsIE5T
U3RyaW5nICpub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICp2
YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQsIFRl
c3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVBy
aW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqYWx0ZXJuYXRl
Q29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3IgcHJp
bnRDb2xvcikgeworICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHRPYmplY3QgPSBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVE
X1BBUkFNRVRFUihjb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOworICAgICAgICBUSFJPV19F
WENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihub3RlcywgQCJub3RlcyIpOworICAgICAg
ICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUih2YWx1ZXMsIEAidmFsdWVz
Iik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHBheWxv
YWQsIEAicGF5bG9hZCIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BB
UkFNRVRFUihzcWxFcnJvciwgQCJzcWxFcnJvciIpOworICAgICAgICBUSFJPV19FWENFUFRJT05f
Rk9SX1JFUVVJUkVEX1BBUkFNRVRFUihhbHRlcm5hdGVDb2xvcnMsIEAiYWx0ZXJuYXRlQ29sb3Jz
Iik7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB0b0pT
T05TdHJpbmdBcnJheShjb2x1bW5OYW1lcykpOworICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0
cmluZygibm90ZXMiX3MsIG5vdGVzKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXREb3VibGUo
InRpbWVzdGFtcCJfcywgdGltZXN0YW1wKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmpl
Y3QoInZhbHVlcyJfcywgW3ZhbHVlcyB0b0pTT05PYmplY3RdKTsKKyAgICAgICAgcmVzdWx0T2Jq
ZWN0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgW3BheWxvYWQgdG9KU09OT2JqZWN0XSk7CisgICAg
ICAgIHJlc3VsdE9iamVjdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgZGF0YWJhc2VJZCk7
CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgW3NxbEVycm9y
IHRvSlNPTk9iamVjdF0pOworICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygic2NyZWVu
Q29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcoc2NyZWVuQ29sb3IpKTsKKyAgICAgICAgcmVzdWx0
T2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCB0b0pTT05TdHJpbmdBcnJheShh
bHRlcm5hdGVDb2xvcnMpKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInByaW50
Q29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcocHJpbnRDb2xvcikpOworICAgICAgICBiYWNrZW5k
RGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdE9iamVj
dCksIGZhbHNlKTsKKyAgICB9OworCisgICAgaW50IG9faW5fZGF0YWJhc2VJZCA9IGluX2RhdGFi
YXNlSWQ7CisgICAgTlNTdHJpbmcgKm9faW5fcXVlcnkgPSBpbl9xdWVyeTsKKworICAgIFttX2Rl
bGVnYXRlIGV4ZWN1dGVTUUxBc3luY1dpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3Vj
Y2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjayBkYXRhYmFzZUlkOm9faW5fZGF0YWJhc2VJZCBx
dWVyeTpvX2luX3F1ZXJ5XTsKK30KKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQ
cm90b2NvbC5oPgorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0Bp
bnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0CitAcHJvcGVydHkg
KG5vbmF0b21pYywgcmV0YWluLCBzZXR0ZXI9c2V0RGF0YWJhc2VIYW5kbGVyOikgaWQ8VGVzdFBy
b3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyPiBkYXRhYmFzZUhhbmRsZXI7CitAZW5kCisKKwor
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKworIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbi5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2ltcG9ydCAi
VGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgorCit1c2luZyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
bgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Cisg
ICAgaWQ8VGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyPiBfZGF0YWJhc2VIYW5kbGVy
OworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUlu
c3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRd
OworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJv
bGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVybiBzZWxmOwor
fQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbX2RhdGFiYXNlSGFuZGxlciByZWxlYXNlXTsK
KyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0gKHZvaWQpc2V0RGF0YWJhc2VIYW5kbGVyOihp
ZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+KWhhbmRsZXIKK3sKKyAgICBpZiAo
aGFuZGxlciA9PSBfZGF0YWJhc2VIYW5kbGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBbX2Rh
dGFiYXNlSGFuZGxlciByZWxlYXNlXTsKKyAgICBfZGF0YWJhc2VIYW5kbGVyID0gW2hhbmRsZXIg
cmV0YWluXTsKKworICAgIGF1dG8gYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IG1ha2VVbmlxdWU8T2Jq
Q0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+KGhhbmRsZXIpOworICAgIGF1dG8g
YWx0ZXJuYXRlQWdlbnQgPSBtYWtlVW5pcXVlPEFsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50PERh
dGFiYXNlQmFja2VuZERpc3BhdGNoZXIsIEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXI+PigiRGF0YWJhc2UiX3MsICpfY29udHJvbGxlciwgV1RGTW92ZShhbHRlcm5hdGVEaXNwYXRj
aGVyKSk7CisgICAgX2NvbnRyb2xsZXItPmFwcGVuZEV4dHJhQWdlbnQoV1RGTW92ZShhbHRlcm5h
dGVBZ2VudCkpOworfQorCistIChpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+
KWRhdGFiYXNlSGFuZGxlcgoreworICAgIHJldHVybiBfZGF0YWJhc2VIYW5kbGVyOworfQorCitA
ZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisKKyMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNv
biBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQ
cm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5oIgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3Bl
Y3RvcjsKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0K
KworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbiBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRh
dGlvbi5oPgorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+
CisKKworQGNsYXNzIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I7CisKK3R5cGVkZWYgTlNfRU5V
TShOU0ludGVnZXIsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycykgeworICAgIFRl
c3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc1JlZCwKKyAgICBUZXN0UHJvdG9jb2xEYXRh
YmFzZVByaW1hcnlDb2xvcnNHcmVlbiwKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlD
b2xvcnNCbHVlLAorfTsKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29s
RGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvcikgewor
ICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVl
c1ByaW50Q29sb3JDeWFuLAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNP
cHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JNYWdlbnRhLAorICAgIFRlc3RQcm90b2NvbERh
dGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JZZWxsb3cs
CisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFs
dWVzUHJpbnRDb2xvckJsYWNrLAorfTsKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVz
dFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50
Q29sb3IpIHsKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFs
UmV0dXJuVmFsdWVzUHJpbnRDb2xvckN5YW4sCisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVj
dXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JNYWdlbnRhLAorICAgIFRl
c3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmlu
dENvbG9yWWVsbG93LAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0
aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yQmxhY2ssCit9OworCit0eXBlZGVmIE5TX0VOVU0o
TlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvcikg
eworICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yQ3lhbiwK
KyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvck1hZ2VudGEs
CisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3JZZWxsb3cs
CisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3JCbGFjaywK
K307CisKK3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhl
Y3V0ZVNRTEFzeW5jUHJpbnRDb2xvcikgeworICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0
ZVNRTEFzeW5jUHJpbnRDb2xvckN5YW4sCisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRl
U1FMQXN5bmNQcmludENvbG9yTWFnZW50YSwKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVTUUxBc3luY1ByaW50Q29sb3JZZWxsb3csCisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVj
dXRlU1FMQXN5bmNQcmludENvbG9yQmxhY2ssCit9OworCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmls
aXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciA6
IFJXSVByb3RvY29sSlNPTk9iamVjdAorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoo
TlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQ7CistIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVj
dDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBj
b2RlOihpbnQpY29kZTsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5
KSBOU1N0cmluZyAqbWVzc2FnZTsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWlj
LCBhc3NpZ24pIGludCBjb2RlOworQGVuZAorCitAcHJvdG9jb2wgVGVzdFByb3RvY29sRGF0YWJh
c2VEb21haW5IYW5kbGVyIDxOU09iamVjdD4KK0BvcHRpb25hbAorLSAodm9pZClleGVjdXRlU1FM
U3luY09wdGlvbmFsUmV0dXJuVmFsdWVzV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJp
bmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKShOU0FycmF5
Lyo8TlNTdHJpbmc+Ki8gKipjb2x1bW5OYW1lcywgTlNTdHJpbmcgKipub3RlcywgZG91YmxlICp0
aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnZhbHVlcywgUldJUHJvdG9jb2xKU09O
T2JqZWN0ICoqcGF5bG9hZCwgaW50ICpkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVy
cm9yICoqc3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqc2NyZWVu
Q29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3Rv
Y29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvciAq
cHJpbnRDb2xvcikpc3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNlSWQ6KGludClkYXRhYmFzZUlkIHF1
ZXJ5OihOU1N0cmluZyAqKXF1ZXJ5OworLSAodm9pZClleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJl
dHVyblZhbHVlc1dpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJy
b3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoTlNBcnJheS8qPE5TU3RyaW5nPiov
ICoqY29sdW1uTmFtZXMsIE5TU3RyaW5nICoqbm90ZXMsIGRvdWJsZSAqdGltZXN0YW1wLCBSV0lQ
cm90b2NvbEpTT05PYmplY3QgKip2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnBheWxv
YWQsIGludCAqZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKnNxbEVycm9y
LCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgKnNjcmVlbkNvbG9yLCBOU0FycmF5
Lyo8TlNTdHJpbmc+Ki8gKiphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhl
Y3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yICpwcmludENvbG9yKSlz
dWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDooaW50KWRhdGFiYXNlSWQgcXVlcnk6KE5TU3RyaW5n
ICopcXVlcnk7CistICh2b2lkKWV4ZWN1dGVTUUxTeW5jV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQo
XikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZChe
KShOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqbm90ZXMsIGRv
dWJsZSB0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqdmFsdWVzLCBSV0lQcm90b2Nv
bEpTT05PYmplY3QgKnBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFz
ZUVycm9yICpzcWxFcnJvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICphbHRlcm5hdGVDb2xvcnMs
IFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyBzY3JlZW5Db2xvciwgVGVzdFByb3Rv
Y29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3IgcHJpbnRDb2xvcikpc3VjY2Vzc0Nh
bGxiYWNrIGRhdGFiYXNlSWQ6KGludClkYXRhYmFzZUlkIHF1ZXJ5OihOU1N0cmluZyAqKXF1ZXJ5
OworLSAodm9pZClleGVjdXRlU1FMQXN5bmNXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0
cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKE5TQXJy
YXkvKjxOU1N0cmluZz4qLyAqY29sdW1uTmFtZXMsIE5TU3RyaW5nICpub3RlcywgZG91YmxlIHRp
bWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICp2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9i
amVjdCAqcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3Ig
KnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3Is
IE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRh
YmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3IgcHJpbnRDb2xvcikpc3VjY2Vzc0NhbGxiYWNr
IGRhdGFiYXNlSWQ6KGludClkYXRhYmFzZUlkIHF1ZXJ5OihOU1N0cmluZyAqKXF1ZXJ5OworQGVu
ZAorCisKKworCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGli
aWxpdHlPYmplY3RzLmg+CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisj
aW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgorI2ltcG9ydCA8SmF2YVNj
cmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDx3dGYv
SlNPTlZhbHVlcy5oPgorCisKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFs
LmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1
dGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlD
b252ZXJzaW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordGVtcGxhdGU8dHlwZW5h
bWUgT2JqQ0VudW1UeXBlPgorT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJp
bmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7CisKK2lubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmlu
ZyhUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgdmFsdWUpCit7CisgICAgc3dpdGNo
KHZhbHVlKSB7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNSZWQ6
CisgICAgICAgIHJldHVybiAicmVkIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VQ
cmltYXJ5Q29sb3JzR3JlZW46CisgICAgICAgIHJldHVybiAiZ3JlZW4iX3M7CisgICAgY2FzZSBU
ZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNCbHVlOgorICAgICAgICByZXR1cm4gImJs
dWUiX3M7CisgICAgfQorfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgT3B0aW9uYWw8VGVzdFByb3Rv
Y29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5n
JiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gInJlZCIpCisgICAgICAgIHJldHVybiBUZXN0
UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNSZWQ7CisgICAgaWYgKHZhbHVlID09ICJncmVl
biIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNHcmVl
bjsKKyAgICBpZiAodmFsdWUgPT0gImJsdWUiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29s
RGF0YWJhc2VQcmltYXJ5Q29sb3JzQmx1ZTsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQor
CitpbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sRGF0YWJhc2VFeGVj
dXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvciB2YWx1ZSkKK3sKKyAgICBz
d2l0Y2godmFsdWUpIHsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5
bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JDeWFuOgorICAgICAgICByZXR1cm4gImN5
YW4iX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXNQcmludENvbG9yTWFnZW50YToKKyAgICAgICAgcmV0dXJuICJtYWdlbnRh
Il9zOworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFs
UmV0dXJuVmFsdWVzUHJpbnRDb2xvclllbGxvdzoKKyAgICAgICAgcmV0dXJuICJ5ZWxsb3ciX3M7
CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1
cm5WYWx1ZXNQcmludENvbG9yQmxhY2s6CisgICAgICAgIHJldHVybiAiYmxhY2siX3M7CisgICAg
fQorfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VF
eGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvcj4gZnJvbVByb3RvY29s
U3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09ICJjeWFuIikK
KyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25h
bFJldHVyblZhbHVlc1ByaW50Q29sb3JDeWFuOworICAgIGlmICh2YWx1ZSA9PSAibWFnZW50YSIp
CisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXNQcmludENvbG9yTWFnZW50YTsKKyAgICBpZiAodmFsdWUgPT0gInllbGxv
dyIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0
aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yWWVsbG93OworICAgIGlmICh2YWx1ZSA9PSAiYmxh
Y2siKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09w
dGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvckJsYWNrOworICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7Cit9CisKK2lubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEYXRh
YmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvciB2YWx1ZSkK
K3sKKyAgICBzd2l0Y2godmFsdWUpIHsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhl
Y3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yQ3lhbjoKKyAgICAgICAg
cmV0dXJuICJjeWFuIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FM
QXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JNYWdlbnRhOgorICAgICAgICByZXR1
cm4gIm1hZ2VudGEiX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxB
c3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvclllbGxvdzoKKyAgICAgICAgcmV0dXJu
ICJ5ZWxsb3ciX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3lu
Y09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvckJsYWNrOgorICAgICAgICByZXR1cm4gImJs
YWNrIl9zOworICAgIH0KK30KKwordGVtcGxhdGU8PgoraW5saW5lIE9wdGlvbmFsPFRlc3RQcm90
b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9y
PiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAodmFs
dWUgPT0gImN5YW4iKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRl
U1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JDeWFuOworICAgIGlmICh2YWx1
ZSA9PSAibWFnZW50YSIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvck1hZ2VudGE7CisgICAgaWYg
KHZhbHVlID09ICJ5ZWxsb3ciKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VF
eGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JZZWxsb3c7CisgICAg
aWYgKHZhbHVlID09ICJibGFjayIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFz
ZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvckJsYWNrOworICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK2lubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmlu
ZyhUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvciB2YWx1ZSkKK3sK
KyAgICBzd2l0Y2godmFsdWUpIHsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0
ZVNRTFN5bmNQcmludENvbG9yQ3lhbjoKKyAgICAgICAgcmV0dXJuICJjeWFuIl9zOworICAgIGNh
c2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3JNYWdlbnRhOgor
ICAgICAgICByZXR1cm4gIm1hZ2VudGEiX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFz
ZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvclllbGxvdzoKKyAgICAgICAgcmV0dXJuICJ5ZWxsb3ci
X3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xv
ckJsYWNrOgorICAgICAgICByZXR1cm4gImJsYWNrIl9zOworICAgIH0KK30KKwordGVtcGxhdGU8
PgoraW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmlu
dENvbG9yPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBp
ZiAodmFsdWUgPT0gImN5YW4iKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VF
eGVjdXRlU1FMU3luY1ByaW50Q29sb3JDeWFuOworICAgIGlmICh2YWx1ZSA9PSAibWFnZW50YSIp
CisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRD
b2xvck1hZ2VudGE7CisgICAgaWYgKHZhbHVlID09ICJ5ZWxsb3ciKQorICAgICAgICByZXR1cm4g
VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3JZZWxsb3c7CisgICAg
aWYgKHZhbHVlID09ICJibGFjayIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFz
ZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvckJsYWNrOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
Cit9CisKK2lubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFz
ZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3IgdmFsdWUpCit7CisgICAgc3dpdGNoKHZhbHVlKSB7
CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JD
eWFuOgorICAgICAgICByZXR1cm4gImN5YW4iX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRh
YmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JNYWdlbnRhOgorICAgICAgICByZXR1cm4gIm1h
Z2VudGEiX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1By
aW50Q29sb3JZZWxsb3c6CisgICAgICAgIHJldHVybiAieWVsbG93Il9zOworICAgIGNhc2UgVGVz
dFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yQmxhY2s6CisgICAgICAg
IHJldHVybiAiYmxhY2siX3M7CisgICAgfQorfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgT3B0aW9u
YWw8VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yPiBmcm9tUHJv
dG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gImN5
YW4iKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQ
cmludENvbG9yQ3lhbjsKKyAgICBpZiAodmFsdWUgPT0gIm1hZ2VudGEiKQorICAgICAgICByZXR1
cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yTWFnZW50YTsK
KyAgICBpZiAodmFsdWUgPT0gInllbGxvdyIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xE
YXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JZZWxsb3c7CisgICAgaWYgKHZhbHVlID09
ICJibGFjayIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxB
c3luY1ByaW50Q29sb3JCbGFjazsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
Lm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3lu
Yy1hdHRyaWJ1dGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
KyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorCisjaW1wb3J0ICJUZXN0
UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKKyNpbXBvcnQg
PFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisKK3VzaW5nIG5h
bWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zIChEYXRhYmFzZURvbWFpbikKKworKyAodm9pZClfcGFyc2VEYXRhYmFzZUlkOihOU051bWJl
ciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNlUHJp
bWFyeUNvbG9yczooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7
CisrICh2b2lkKV9wYXJzZUNvbG9yTGlzdDooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKW91dFZh
bHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworKyAodm9pZClfcGFyc2VFcnJvcjooVGVzdFBy
b3RvY29sRGF0YWJhc2VFcnJvciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsK
KworQGVuZAorCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChE
YXRhYmFzZURvbWFpbikKKworKyAodm9pZClfcGFyc2VEYXRhYmFzZUlkOihOU051bWJlciAqKilv
dXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfQkFEX1RZUEUocGF5bG9hZCwgW05TTnVtYmVyIGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0g
KE5TTnVtYmVyICopcGF5bG9hZDsKK30KKworKyAodm9pZClfcGFyc2VQcmltYXJ5Q29sb3JzOihO
U051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TU3RyaW5nIGNsYXNzXSk7CisgICAg
T3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzPiByZXN1bHQgPSBJbnNw
ZWN0b3I6OmZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xv
cnM+KHBheWxvYWQpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX0VOVU1fVkFMVUUocmVz
dWx0LCBAIlByaW1hcnlDb2xvcnMiKTsKKyAgICAqb3V0VmFsdWUgPSBAKHJlc3VsdC52YWx1ZSgp
KTsKK30KKworKyAodm9pZClfcGFyc2VDb2xvckxpc3Q6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAq
KilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TQXJyYXkvKjxOU1N0cmluZz4qLyBjbGFzc10pOwor
ICAgICpvdXRWYWx1ZSA9IChOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilwYXlsb2FkOworfQorCisr
ICh2b2lkKV9wYXJzZUVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqKW91dFZhbHVl
IGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURf
VFlQRShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gW1tU
ZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07
Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29u
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFBy
b3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
LmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5o
PgorI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+
CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJv
dG9jb2xEYXRhYmFzZUVycm9yCisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5v
bm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQKK3sKKyAgICBpZiAo
IShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAIm1lc3NhZ2UiXSwgQCJt
ZXNzYWdlIik7CisgICAgc2VsZi5tZXNzYWdlID0gcGF5bG9hZFtAIm1lc3NhZ2UiXTsKKworICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImNvZGUiXSwg
QCJjb2RlIik7CisgICAgc2VsZi5jb2RlID0gW3BheWxvYWRbQCJjb2RlIl0gaW50ZWdlclZhbHVl
XTsKKworICAgIHJldHVybiBzZWxmOworfQorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9j
b2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9iamVjdAoreworICAgIGlmICghKHNl
bGYgPSBbc3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmplY3QgdG9KU09OT2JqZWN0XS5nZXQo
KV0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBjb2RlOihpbnQp
Y29kZQoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4g
bmlsOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShtZXNzYWdl
LCBAIm1lc3NhZ2UiKTsKKworICAgIHNlbGYubWVzc2FnZSA9IG1lc3NhZ2U7CisgICAgc2VsZi5j
b2RlID0gY29kZTsKKworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXNldE1lc3NhZ2U6
KE5TU3RyaW5nICopbWVzc2FnZQoreworICAgIFtzdXBlciBzZXRTdHJpbmc6bWVzc2FnZSBmb3JL
ZXk6QCJtZXNzYWdlIl07Cit9CisKKy0gKE5TU3RyaW5nICopbWVzc2FnZQoreworICAgIHJldHVy
biBbc3VwZXIgc3RyaW5nRm9yS2V5OkAibWVzc2FnZSJdOworfQorCistICh2b2lkKXNldENvZGU6
KGludCljb2RlCit7CisgICAgW3N1cGVyIHNldEludGVnZXI6Y29kZSBmb3JLZXk6QCJjb2RlIl07
Cit9CisKKy0gKGludCljb2RlCit7CisgICAgcmV0dXJuIFtzdXBlciBpbnRlZ2VyRm9yS2V5OkAi
Y29kZSJdOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5t
bQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVy
cy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRl
cnMuanNvbi1yZXN1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWI0N2NjMDJkZGU5YWJlNzA4MmIyZDc3ODNkNGFl
MjE3YWVjNWFiMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwt
cmV0dXJuLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQKQEAgLTAsMCArMSwxNjI5IEBACisjIyMgQmVn
aW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzLmluCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJh
bWV0ZXJzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisvLyBE
YXRhYmFzZQorSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiRGF0YWJhc2UiLCBudWxs
KTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJEYXRhYmFzZS5QcmltYXJ5Q29sb3Jz
Iiwge1JlZDogInJlZCIsIEdyZWVuOiAiZ3JlZW4iLCBCbHVlOiAiYmx1ZSJ9KTsKK0luc3BlY3Rv
ckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJEYXRhYmFzZS5leGVjdXRlQWxsT3B0aW9uYWxQYXJh
bWV0ZXJzIiwgbnVsbCwgW3sibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogIm9iamVjdCIs
ICJvcHRpb25hbCI6IHRydWV9LCB7Im5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciLCAi
b3B0aW9uYWwiOiB0cnVlfSwgeyJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIs
ICJvcHRpb25hbCI6IHRydWV9LCB7Im5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0Iiwg
Im9wdGlvbmFsIjogdHJ1ZX0sIHsibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAib2JqZWN0Iiwg
Im9wdGlvbmFsIjogdHJ1ZX0sIHsibmFtZSI6ICJkYXRhYmFzZUlkIiwgInR5cGUiOiAibnVtYmVy
IiwgIm9wdGlvbmFsIjogdHJ1ZX0sIHsibmFtZSI6ICJzcWxFcnJvciIsICJ0eXBlIjogIm9iamVj
dCIsICJvcHRpb25hbCI6IHRydWV9LCB7Im5hbWUiOiAic2NyZWVuQ29sb3IiLCAidHlwZSI6ICJz
dHJpbmciLCAib3B0aW9uYWwiOiB0cnVlfSwgeyJuYW1lIjogImFsdGVybmF0ZUNvbG9ycyIsICJ0
eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRydWV9LCB7Im5hbWUiOiAicHJpbnRDb2xvciIs
ICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWV9XSwgWyJjb2x1bW5OYW1lcyIsICJu
b3RlcyIsICJ0aW1lc3RhbXAiLCAidmFsdWVzIiwgInBheWxvYWQiLCAiZGF0YWJhc2VJZCIsICJz
cWxFcnJvciIsICJzY3JlZW5Db2xvciIsICJhbHRlcm5hdGVDb2xvcnMiLCAicHJpbnRDb2xvciJd
KTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJEYXRhYmFzZS5leGVjdXRlTm9P
cHRpb25hbFBhcmFtZXRlcnMiLCBudWxsLCBbeyJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUi
OiAib2JqZWN0In0sIHsibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyJ9LCB7Im5hbWUi
OiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIn0sIHsibmFtZSI6ICJ2YWx1ZXMiLCAidHlw
ZSI6ICJvYmplY3QifSwgeyJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJvYmplY3QifSwgeyJu
YW1lIjogImRhdGFiYXNlSWQiLCAidHlwZSI6ICJudW1iZXIifSwgeyJuYW1lIjogInNxbEVycm9y
IiwgInR5cGUiOiAib2JqZWN0In0sIHsibmFtZSI6ICJzY3JlZW5Db2xvciIsICJ0eXBlIjogInN0
cmluZyJ9LCB7Im5hbWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwgInR5cGUiOiAib2JqZWN0In0sIHsi
bmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIn1dLCBbImNvbHVtbk5hbWVzIiwg
Im5vdGVzIiwgInRpbWVzdGFtcCIsICJ2YWx1ZXMiLCAicGF5bG9hZCIsICJkYXRhYmFzZUlkIiwg
InNxbEVycm9yIiwgInNjcmVlbkNvbG9yIiwgImFsdGVybmF0ZUNvbG9ycyIsICJwcmludENvbG9y
Il0pOworSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiRGF0YWJhc2UiLCBudWxsKTsK
KyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzLmluCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBh
cmFtZXRlcnMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNw
cmFnbWEgb25jZQorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
CisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisK
K2NsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIHNl
dEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVy
KSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9CisgICAgQmFj
a2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNr
ZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQorcHJpdmF0ZToKKyAgICBSZWZQdHI8QmFja2VuZERpc3Bh
dGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Cit9OworCisKK2NsYXNzIEFsdGVybmF0ZURhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIg
eworcHVibGljOgorICAgIHZpcnR1YWwgfkFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXIoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhs
b25nIGNhbGxJZCwgY29uc3QgSlNPTjo6QXJyYXkqIGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJp
bmcqIGluX25vdGVzLCBjb25zdCBkb3VibGUqIGluX3RpbWVzdGFtcCwgY29uc3QgSlNPTjo6T2Jq
ZWN0KiBpbl92YWx1ZXMsIGNvbnN0IEpTT046OlZhbHVlKiBpbl9wYXlsb2FkLCBjb25zdCBpbnQq
IGluX2RhdGFiYXNlSWQsIGNvbnN0IEpTT046Ok9iamVjdCogaW5fc3FsRXJyb3IsIGNvbnN0IFN0
cmluZyogaW5fc2NyZWVuQ29sb3IsIGNvbnN0IEpTT046OkFycmF5KiBpbl9hbHRlcm5hdGVDb2xv
cnMsIGNvbnN0IFN0cmluZyogaW5fcHJpbnRDb2xvcikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBl
eGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMobG9uZyBjYWxsSWQsIGNvbnN0IEpTT046OkFycmF5
JiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBpbl9ub3RlcywgZG91YmxlIGluX3RpbWVz
dGFtcCwgY29uc3QgSlNPTjo6T2JqZWN0JiBpbl92YWx1ZXMsIEpTT046OlZhbHVlIGluX3BheWxv
YWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBKU09OOjpPYmplY3QmIGluX3NxbEVycm9yLCBj
b25zdCBTdHJpbmcmIGluX3NjcmVlbkNvbG9yLCBjb25zdCBKU09OOjpBcnJheSYgaW5fYWx0ZXJu
YXRlQ29sb3JzLCBjb25zdCBTdHJpbmcmIGluX3ByaW50Q29sb3IpID0gMDsKK307CisKK30gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCisjIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0
Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxs
LXJldHVybi1wYXJhbWV0ZXJzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIK
KyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsK
KwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKK2NsYXNzIEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3Bh
dGNoZXI7CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
CisKK2NsYXNzIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKK3B1YmxpYzoKKyAg
ICAvLyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIgJ3ByaW50Q29sb3InIHdoaWxlIGdlbmVyYXRpbmcg
Y29tbWFuZC9ldmVudCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzLgorICAgIGVudW0gY2xh
c3MgUHJpbnRDb2xvciB7CisgICAgICAgIEN5YW4gPSAzLAorICAgICAgICBNYWdlbnRhID0gNCwK
KyAgICAgICAgWWVsbG93ID0gNSwKKyAgICAgICAgQmxhY2sgPSA2LAorICAgIH07IC8vIGVudW0g
Y2xhc3MgUHJpbnRDb2xvcgorICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlQWxsT3B0aW9uYWxQYXJh
bWV0ZXJzKEVycm9yU3RyaW5nJiwgY29uc3QgSlNPTjo6QXJyYXkqIG9wdF9pbl9jb2x1bW5OYW1l
cywgY29uc3QgU3RyaW5nKiBvcHRfaW5fbm90ZXMsIGNvbnN0IGRvdWJsZSogb3B0X2luX3RpbWVz
dGFtcCwgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRfaW5fdmFsdWVzLCBjb25zdCBKU09OOjpWYWx1
ZSogb3B0X2luX3BheWxvYWQsIGNvbnN0IGludCogb3B0X2luX2RhdGFiYXNlSWQsIGNvbnN0IEpT
T046Ok9iamVjdCogb3B0X2luX3NxbEVycm9yLCBjb25zdCBTdHJpbmcqIG9wdF9pbl9zY3JlZW5D
b2xvciwgY29uc3QgSlNPTjo6QXJyYXkqIG9wdF9pbl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0
cmluZyogb3B0X2luX3ByaW50Q29sb3IsIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiBv
cHRfb3V0X2NvbHVtbk5hbWVzLCBPcHRpb25hbDxTdHJpbmc+JiBvcHRfb3V0X25vdGVzLCBPcHRp
b25hbDxkb3VibGU+JiBvcHRfb3V0X3RpbWVzdGFtcCwgT3B0aW9uYWw8SlNPTjo6T2JqZWN0PiYg
b3B0X291dF92YWx1ZXMsIE9wdGlvbmFsPEpTT046OlZhbHVlPiYgb3B0X291dF9wYXlsb2FkLCBP
cHRpb25hbDxpbnQ+JiBvcHRfb3V0X2RhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEYXRhYmFzZTo6RXJyb3I+JiBvcHRfb3V0X3NxbEVycm9yLCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyogb3B0X291dF9zY3JlZW5Db2xvciwgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiBvcHRfb3V0X2FsdGVy
bmF0ZUNvbG9ycywgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3Iq
IG9wdF9vdXRfcHJpbnRDb2xvcikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlTm9PcHRp
b25hbFBhcmFtZXRlcnMoRXJyb3JTdHJpbmcmLCBjb25zdCBKU09OOjpBcnJheSYgaW5fY29sdW1u
TmFtZXMsIGNvbnN0IFN0cmluZyYgaW5fbm90ZXMsIGRvdWJsZSBpbl90aW1lc3RhbXAsIGNvbnN0
IEpTT046Ok9iamVjdCYgaW5fdmFsdWVzLCBKU09OOjpWYWx1ZSBpbl9wYXlsb2FkLCBpbnQgaW5f
ZGF0YWJhc2VJZCwgY29uc3QgSlNPTjo6T2JqZWN0JiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5n
JiBpbl9zY3JlZW5Db2xvciwgY29uc3QgSlNPTjo6QXJyYXkmIGluX2FsdGVybmF0ZUNvbG9ycywg
Y29uc3QgU3RyaW5nJiBpbl9wcmludENvbG9yLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+
PiYgb3V0X2NvbHVtbk5hbWVzLCBTdHJpbmcqIG91dF9ub3RlcywgZG91YmxlKiBvdXRfdGltZXN0
YW1wLCBKU09OOjpPYmplY3QqIG91dF92YWx1ZXMsIEpTT046OlZhbHVlKiBvdXRfcGF5bG9hZCwg
aW50KiBvdXRfZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNl
OjpFcnJvcj4mIG91dF9zcWxFcnJvciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlBy
aW1hcnlDb2xvcnMqIG91dF9zY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiBvdXRfYWx0ZXJuYXRlQ29sb3JzLCBEYXRhYmFzZUJhY2tl
bmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciogb3V0X3ByaW50Q29sb3IpID0gMDsKK3By
b3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5EYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigp
OworfTsKKworY2xhc3MgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBT
dXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIHZvaWQgZGlzcGF0Y2gobG9uZyBy
ZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3Nh
Z2UpIGZpbmFsOworcHJpdmF0ZToKKyAgICB2b2lkIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRl
cnMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Cisg
ICAgdm9pZCBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIFJlZlB0
cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCitwdWJsaWM6CisgICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRj
aGVyKEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNo
ZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQorcHJp
dmF0ZToKKyAgICBBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKiBtX2FsdGVybmF0
ZURpc3BhdGNoZXIgeyBudWxscHRyIH07CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCitwcml2YXRlOgorICAgIERhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXIoQmFja2VuZERpc3BhdGNoZXImLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciop
OworICAgIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50IHsgbnVsbHB0
ciB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRo
LW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0
QmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVk
ZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgor
CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjaW5jbHVkZSAi
VGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgorI2VuZGlmIC8vIEVOQUJMRShJTlNQ
RUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwor
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5EYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVySGFuZGxlcigpIHsgfQorCitSZWY8RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4gRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlz
cGF0Y2hlciwgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQoreworICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERp
c3BhdGNoZXIsIGFnZW50KSk7Cit9CisKK0RhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OkRhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVy
LCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCisgICAgOiBTdXBwbGVt
ZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKKyAgICAsIG1fYWdlbnQo
YWdlbnQpCit7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9y
RG9tYWluKCJEYXRhYmFzZSJfcywgdGhpcyk7Cit9CisKK3ZvaWQgRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBS
ZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCit7CisgICAgUmVmPERhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOworCisgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFy
YW1ldGVyczsKKyAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFyYW1ldGVycyk7
CisKKyAgICBpZiAobWV0aG9kID09ICJleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzIikgewor
ICAgICAgICBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKHJlcXVlc3RJZCwgV1RGTW92ZShw
YXJhbWV0ZXJzKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKG1ldGhvZCA9PSAi
ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIikgeworICAgICAgICBleGVjdXRlTm9PcHRpb25h
bFBhcmFtZXRlcnMocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJy
b3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RhdGFiYXNlLiIgKyBtZXRo
b2QgKyAiJyB3YXMgbm90IGZvdW5kIik7Cit9CisKK3ZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlcjo6ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhsb25nIHJlcXVlc3RJZCwgUmVmUHRy
PEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKQoreworICAgIGJvb2wgb3B0X2luX2NvbHVtbk5h
bWVzX3ZhbHVlRm91bmQgPSBmYWxzZTsKKyAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IG9wdF9pbl9j
b2x1bW5OYW1lcyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEFycmF5KHBhcmFtZXRlcnMuZ2V0
KCksICJjb2x1bW5OYW1lcyJfcywgJm9wdF9pbl9jb2x1bW5OYW1lc192YWx1ZUZvdW5kKTsKKyAg
ICBib29sIG9wdF9pbl9ub3Rlc192YWx1ZUZvdW5kID0gZmFsc2U7CisgICAgU3RyaW5nIG9wdF9p
bl9ub3RlcyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwYXJhbWV0ZXJzLmdldCgp
LCAibm90ZXMiX3MsICZvcHRfaW5fbm90ZXNfdmFsdWVGb3VuZCk7CisgICAgYm9vbCBvcHRfaW5f
dGltZXN0YW1wX3ZhbHVlRm91bmQgPSBmYWxzZTsKKyAgICBkb3VibGUgb3B0X2luX3RpbWVzdGFt
cCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldERvdWJsZShwYXJhbWV0ZXJzLmdldCgpLCAidGlt
ZXN0YW1wIl9zLCAmb3B0X2luX3RpbWVzdGFtcF92YWx1ZUZvdW5kKTsKKyAgICBib29sIG9wdF9p
bl92YWx1ZXNfdmFsdWVGb3VuZCA9IGZhbHNlOworICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG9w
dF9pbl92YWx1ZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRPYmplY3QocGFyYW1ldGVycy5n
ZXQoKSwgInZhbHVlcyJfcywgJm9wdF9pbl92YWx1ZXNfdmFsdWVGb3VuZCk7CisgICAgYm9vbCBv
cHRfaW5fcGF5bG9hZF92YWx1ZUZvdW5kID0gZmFsc2U7CisgICAgUmVmUHRyPEpTT046OlZhbHVl
PiBvcHRfaW5fcGF5bG9hZCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFZhbHVlKHBhcmFtZXRl
cnMuZ2V0KCksICJwYXlsb2FkIl9zLCAmb3B0X2luX3BheWxvYWRfdmFsdWVGb3VuZCk7CisgICAg
Ym9vbCBvcHRfaW5fZGF0YWJhc2VJZF92YWx1ZUZvdW5kID0gZmFsc2U7CisgICAgaW50IG9wdF9p
bl9kYXRhYmFzZUlkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0SW50ZWdlcihwYXJhbWV0ZXJz
LmdldCgpLCAiZGF0YWJhc2VJZCJfcywgJm9wdF9pbl9kYXRhYmFzZUlkX3ZhbHVlRm91bmQpOwor
ICAgIGJvb2wgb3B0X2luX3NxbEVycm9yX3ZhbHVlRm91bmQgPSBmYWxzZTsKKyAgICBSZWZQdHI8
SlNPTjo6T2JqZWN0PiBvcHRfaW5fc3FsRXJyb3IgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRP
YmplY3QocGFyYW1ldGVycy5nZXQoKSwgInNxbEVycm9yIl9zLCAmb3B0X2luX3NxbEVycm9yX3Zh
bHVlRm91bmQpOworICAgIGJvb2wgb3B0X2luX3NjcmVlbkNvbG9yX3ZhbHVlRm91bmQgPSBmYWxz
ZTsKKyAgICBTdHJpbmcgb3B0X2luX3NjcmVlbkNvbG9yID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+
Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksICJzY3JlZW5Db2xvciJfcywgJm9wdF9pbl9zY3Jl
ZW5Db2xvcl92YWx1ZUZvdW5kKTsKKyAgICBib29sIG9wdF9pbl9hbHRlcm5hdGVDb2xvcnNfdmFs
dWVGb3VuZCA9IGZhbHNlOworICAgIFJlZlB0cjxKU09OOjpBcnJheT4gb3B0X2luX2FsdGVybmF0
ZUNvbG9ycyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEFycmF5KHBhcmFtZXRlcnMuZ2V0KCks
ICJhbHRlcm5hdGVDb2xvcnMiX3MsICZvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzX3ZhbHVlRm91bmQp
OworICAgIGJvb2wgb3B0X2luX3ByaW50Q29sb3JfdmFsdWVGb3VuZCA9IGZhbHNlOworICAgIFN0
cmluZyBvcHRfaW5fcHJpbnRDb2xvciA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhw
YXJhbWV0ZXJzLmdldCgpLCAicHJpbnRDb2xvciJfcywgJm9wdF9pbl9wcmludENvbG9yX3ZhbHVl
Rm91bmQpOworICAgIGlmIChtX2JhY2tlbmREaXNwYXRjaGVyLT5oYXNQcm90b2NvbEVycm9ycygp
KSB7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFj
a2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsICJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2Qg
J0RhdGFiYXNlLmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMnIGNhbid0IGJlIHByb2Nlc3Nl
ZCJfcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKKyAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Cisg
ICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVy
cyhyZXF1ZXN0SWQsIG9wdF9pbl9jb2x1bW5OYW1lc192YWx1ZUZvdW5kID8gb3B0X2luX2NvbHVt
bk5hbWVzLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX25vdGVzX3ZhbHVlRm91bmQgPyAmb3B0X2lu
X25vdGVzIDogbnVsbHB0ciwgb3B0X2luX3RpbWVzdGFtcF92YWx1ZUZvdW5kID8gJm9wdF9pbl90
aW1lc3RhbXAgOiBudWxscHRyLCBvcHRfaW5fdmFsdWVzX3ZhbHVlRm91bmQgPyBvcHRfaW5fdmFs
dWVzLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX3BheWxvYWRfdmFsdWVGb3VuZCA/IG9wdF9pbl9w
YXlsb2FkLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX2RhdGFiYXNlSWRfdmFsdWVGb3VuZCA/ICZv
cHRfaW5fZGF0YWJhc2VJZCA6IG51bGxwdHIsIG9wdF9pbl9zcWxFcnJvcl92YWx1ZUZvdW5kID8g
b3B0X2luX3NxbEVycm9yLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX3NjcmVlbkNvbG9yX3ZhbHVl
Rm91bmQgPyAmb3B0X2luX3NjcmVlbkNvbG9yIDogbnVsbHB0ciwgb3B0X2luX2FsdGVybmF0ZUNv
bG9yc192YWx1ZUZvdW5kID8gb3B0X2luX2FsdGVybmF0ZUNvbG9ycy5nZXQoKSA6IG51bGxwdHIs
IG9wdF9pbl9wcmludENvbG9yX3ZhbHVlRm91bmQgPyAmb3B0X2luX3ByaW50Q29sb3IgOiBudWxs
cHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgIFJl
ZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVm
UHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gb3V0X2NvbHVtbk5hbWVzOworICAgIE9wdGlvbmFs
PFN0cmluZz4gb3V0X25vdGVzOworICAgIE9wdGlvbmFsPGRvdWJsZT4gb3V0X3RpbWVzdGFtcDsK
KyAgICBPcHRpb25hbDxKU09OOjpPYmplY3Q+IG91dF92YWx1ZXM7CisgICAgT3B0aW9uYWw8SlNP
Tjo6VmFsdWU+IG91dF9wYXlsb2FkOworICAgIE9wdGlvbmFsPGludD4gb3V0X2RhdGFiYXNlSWQ7
CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gb3V0X3Nx
bEVycm9yOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3Jz
IG91dF9zY3JlZW5Db2xvcjsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6OkNvbG9yTGlzdD4gb3V0X2FsdGVybmF0ZUNvbG9yczsKKyAgICBEYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciBvdXRfcHJpbnRDb2xvcjsKKyAgICBtX2FnZW50
LT5leGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGVycm9yLCBvcHRfaW5fY29sdW1uTmFtZXNf
dmFsdWVGb3VuZCA/IG9wdF9pbl9jb2x1bW5OYW1lcy5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9u
b3Rlc192YWx1ZUZvdW5kID8gJm9wdF9pbl9ub3RlcyA6IG51bGxwdHIsIG9wdF9pbl90aW1lc3Rh
bXBfdmFsdWVGb3VuZCA/ICZvcHRfaW5fdGltZXN0YW1wIDogbnVsbHB0ciwgb3B0X2luX3ZhbHVl
c192YWx1ZUZvdW5kID8gb3B0X2luX3ZhbHVlcy5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9wYXls
b2FkX3ZhbHVlRm91bmQgPyBvcHRfaW5fcGF5bG9hZC5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9k
YXRhYmFzZUlkX3ZhbHVlRm91bmQgPyAmb3B0X2luX2RhdGFiYXNlSWQgOiBudWxscHRyLCBvcHRf
aW5fc3FsRXJyb3JfdmFsdWVGb3VuZCA/IG9wdF9pbl9zcWxFcnJvci5nZXQoKSA6IG51bGxwdHIs
IG9wdF9pbl9zY3JlZW5Db2xvcl92YWx1ZUZvdW5kID8gJm9wdF9pbl9zY3JlZW5Db2xvciA6IG51
bGxwdHIsIG9wdF9pbl9hbHRlcm5hdGVDb2xvcnNfdmFsdWVGb3VuZCA/IG9wdF9pbl9hbHRlcm5h
dGVDb2xvcnMuZ2V0KCkgOiBudWxscHRyLCBvcHRfaW5fcHJpbnRDb2xvcl92YWx1ZUZvdW5kID8g
Jm9wdF9pbl9wcmludENvbG9yIDogbnVsbHB0ciwgb3V0X2NvbHVtbk5hbWVzLCBvdXRfbm90ZXMs
IG91dF90aW1lc3RhbXAsIG91dF92YWx1ZXMsIG91dF9wYXlsb2FkLCBvdXRfZGF0YWJhc2VJZCwg
b3V0X3NxbEVycm9yLCBvdXRfc2NyZWVuQ29sb3IsIG91dF9hbHRlcm5hdGVDb2xvcnMsIG91dF9w
cmludENvbG9yKTsKKworICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIHsKKyAgICAgICAgaWYgKG91
dF9jb2x1bW5OYW1lcykKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVz
Il9zLCBvdXRfY29sdW1uTmFtZXMpOworICAgICAgICBpZiAob3V0X25vdGVzLmhhc1ZhbHVlKCkp
CisgICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZygibm90ZXMiX3MsICpvdXRfbm90ZXMpOwor
ICAgICAgICBpZiAob3V0X3RpbWVzdGFtcC5oYXNWYWx1ZSgpKQorICAgICAgICAgICAgcmVzdWx0
LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgKm91dF90aW1lc3RhbXApOworICAgICAgICBpZiAo
b3V0X3ZhbHVlcy5oYXNWYWx1ZSgpKQorICAgICAgICAgICAgcmVzdWx0LT5zZXRPYmplY3QoInZh
bHVlcyJfcywgKm91dF92YWx1ZXMpOworICAgICAgICBpZiAob3V0X3BheWxvYWQuaGFzVmFsdWUo
KSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsICpvdXRfcGF5bG9h
ZCk7CisgICAgICAgIGlmIChvdXRfZGF0YWJhc2VJZC5oYXNWYWx1ZSgpKQorICAgICAgICAgICAg
cmVzdWx0LT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCAqb3V0X2RhdGFiYXNlSWQpOworICAg
ICAgICBpZiAob3V0X3NxbEVycm9yKQorICAgICAgICAgICAgcmVzdWx0LT5zZXRPYmplY3QoInNx
bEVycm9yIl9zLCBvdXRfc3FsRXJyb3IpOworICAgICAgICBpZiAob3V0X3NjcmVlbkNvbG9yLmhh
c1ZhbHVlKCkpCisgICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3Ms
ICpvdXRfc2NyZWVuQ29sb3IpOworICAgICAgICBpZiAob3V0X2FsdGVybmF0ZUNvbG9ycykKKyAg
ICAgICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgb3V0X2FsdGVy
bmF0ZUNvbG9ycyk7CisgICAgICAgIGlmIChvdXRfcHJpbnRDb2xvci5oYXNWYWx1ZSgpKQorICAg
ICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsICpvdXRfcHJpbnRDb2xv
cik7CisgICAgfQorICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCisgICAgICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2Up
OworICAgIGVsc2UKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xF
cnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKK30K
Kwordm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlTm9PcHRpb25hbFBhcmFt
ZXRlcnMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycykK
K3sKKyAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGluX2NvbHVtbk5hbWVzID0gbV9iYWNrZW5kRGlz
cGF0Y2hlci0+Z2V0QXJyYXkocGFyYW1ldGVycy5nZXQoKSwgImNvbHVtbk5hbWVzIl9zLCBudWxs
cHRyKTsKKyAgICBTdHJpbmcgaW5fbm90ZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJp
bmcocGFyYW1ldGVycy5nZXQoKSwgIm5vdGVzIl9zLCBudWxscHRyKTsKKyAgICBkb3VibGUgaW5f
dGltZXN0YW1wID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0RG91YmxlKHBhcmFtZXRlcnMuZ2V0
KCksICJ0aW1lc3RhbXAiX3MsIG51bGxwdHIpOworICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGlu
X3ZhbHVlcyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldE9iamVjdChwYXJhbWV0ZXJzLmdldCgp
LCAidmFsdWVzIl9zLCBudWxscHRyKTsKKyAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IGluX3BheWxv
YWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRWYWx1ZShwYXJhbWV0ZXJzLmdldCgpLCAicGF5
bG9hZCJfcywgbnVsbHB0cik7CisgICAgaW50IGluX2RhdGFiYXNlSWQgPSBtX2JhY2tlbmREaXNw
YXRjaGVyLT5nZXRJbnRlZ2VyKHBhcmFtZXRlcnMuZ2V0KCksICJkYXRhYmFzZUlkIl9zLCBudWxs
cHRyKTsKKyAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBpbl9zcWxFcnJvciA9IG1fYmFja2VuZERp
c3BhdGNoZXItPmdldE9iamVjdChwYXJhbWV0ZXJzLmdldCgpLCAic3FsRXJyb3IiX3MsIG51bGxw
dHIpOworICAgIFN0cmluZyBpbl9zY3JlZW5Db2xvciA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdl
dFN0cmluZyhwYXJhbWV0ZXJzLmdldCgpLCAic2NyZWVuQ29sb3IiX3MsIG51bGxwdHIpOworICAg
IFJlZlB0cjxKU09OOjpBcnJheT4gaW5fYWx0ZXJuYXRlQ29sb3JzID0gbV9iYWNrZW5kRGlzcGF0
Y2hlci0+Z2V0QXJyYXkocGFyYW1ldGVycy5nZXQoKSwgImFsdGVybmF0ZUNvbG9ycyJfcywgbnVs
bHB0cik7CisgICAgU3RyaW5nIGluX3ByaW50Q29sb3IgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5n
ZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgInByaW50Q29sb3IiX3MsIG51bGxwdHIpOworICAg
IGlmIChtX2JhY2tlbmREaXNwYXRjaGVyLT5oYXNQcm90b2NvbEVycm9ycygpKSB7CisgICAgICAg
IG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNo
ZXI6OkludmFsaWRQYXJhbXMsICJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJ0RhdGFiYXNlLmV4
ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycycgY2FuJ3QgYmUgcHJvY2Vzc2VkIl9zKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQorICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKKyAgICAgICAgbV9hbHRl
cm5hdGVEaXNwYXRjaGVyLT5leGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMocmVxdWVzdElkLCAq
aW5fY29sdW1uTmFtZXMsIGluX25vdGVzLCBpbl90aW1lc3RhbXAsICppbl92YWx1ZXMsICppbl9w
YXlsb2FkLCBpbl9kYXRhYmFzZUlkLCAqaW5fc3FsRXJyb3IsIGluX3NjcmVlbkNvbG9yLCAqaW5f
YWx0ZXJuYXRlQ29sb3JzLCBpbl9wcmludENvbG9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworICAg
IEVycm9yU3RyaW5nIGVycm9yOworICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gb3V0
X2NvbHVtbk5hbWVzOworICAgIFN0cmluZyBvdXRfbm90ZXM7CisgICAgZG91YmxlIG91dF90aW1l
c3RhbXA7CisgICAgSlNPTjo6T2JqZWN0IG91dF92YWx1ZXM7CisgICAgSlNPTjo6VmFsdWUgb3V0
X3BheWxvYWQ7CisgICAgaW50IG91dF9kYXRhYmFzZUlkOworICAgIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IG91dF9zcWxFcnJvcjsKKyAgICBJbnNwZWN0b3I6
OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyBvdXRfc2NyZWVuQ29sb3I7CisgICAg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IG91dF9hbHRl
cm5hdGVDb2xvcnM7CisgICAgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50
Q29sb3Igb3V0X3ByaW50Q29sb3I7CisgICAgbV9hZ2VudC0+ZXhlY3V0ZU5vT3B0aW9uYWxQYXJh
bWV0ZXJzKGVycm9yLCAqaW5fY29sdW1uTmFtZXMsIGluX25vdGVzLCBpbl90aW1lc3RhbXAsICpp
bl92YWx1ZXMsICppbl9wYXlsb2FkLCBpbl9kYXRhYmFzZUlkLCAqaW5fc3FsRXJyb3IsIGluX3Nj
cmVlbkNvbG9yLCAqaW5fYWx0ZXJuYXRlQ29sb3JzLCBpbl9wcmludENvbG9yLCBvdXRfY29sdW1u
TmFtZXMsICZvdXRfbm90ZXMsICZvdXRfdGltZXN0YW1wLCBvdXRfdmFsdWVzLCAmb3V0X3BheWxv
YWQsICZvdXRfZGF0YWJhc2VJZCwgb3V0X3NxbEVycm9yLCAmb3V0X3NjcmVlbkNvbG9yLCBvdXRf
YWx0ZXJuYXRlQ29sb3JzLCAmb3V0X3ByaW50Q29sb3IpOworCisgICAgaWYgKCFlcnJvci5sZW5n
dGgoKSkgeworICAgICAgICByZXN1bHQtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgb3V0X2Nv
bHVtbk5hbWVzKTsKKyAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBvdXRfbm90
ZXMpOworICAgICAgICByZXN1bHQtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCBvdXRfdGltZXN0
YW1wKTsKKyAgICAgICAgcmVzdWx0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgb3V0X3ZhbHVlcyk7
CisgICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIG91dF9wYXlsb2FkKTsKKyAg
ICAgICAgcmVzdWx0LT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCBvdXRfZGF0YWJhc2VJZCk7
CisgICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgb3V0X3NxbEVycm9yKTsK
KyAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCBJbnNwZWN0b3I6OlBy
b3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUob3V0X3NjcmVlbkNvbG9y
KSk7CisgICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgb3V0X2Fs
dGVybmF0ZUNvbG9ycyk7CisgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9z
LCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUo
b3V0X3ByaW50Q29sb3IpKTsKKyAgICB9CisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKKyAgICAg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShy
ZXN1bHQpLCBmYWxzZSk7CisgICAgZWxzZQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5y
ZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92
ZShlcnJvcikpOworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxl
OiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250
ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1h
bmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2Ns
YXNzIEZyb250ZW5kUm91dGVyOworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQg
RmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZy
b250ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
Y29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMu
anNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgor
I2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisK
KworbmFtZXNwYWNlIFByb3RvY29sIHsKKworCisKKy8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgor
bmFtZXNwYWNlIERhdGFiYXNlIHsKK2NsYXNzIEVycm9yOworZW51bSBjbGFzcyBQcmltYXJ5Q29s
b3JzOworfSAvLyBEYXRhYmFzZQorLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgorCisK
Ky8vIFR5cGVkZWZzLgorbmFtZXNwYWNlIERhdGFiYXNlIHsKKy8qIFVuaXF1ZSBpZGVudGlmaWVy
IG9mIERhdGFiYXNlIG9iamVjdC4gKi8KK3R5cGVkZWYgaW50IERhdGFiYXNlSWQ7Cit0eXBlZGVm
IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xv
cnM+IENvbG9yTGlzdDsKK30gLy8gRGF0YWJhc2UKKy8vIEVuZCBvZiB0eXBlZGVmcy4KKworbmFt
ZXNwYWNlIFRlc3RIZWxwZXJzIHsKKworU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBj
b2RlKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVl
KFQgZW51bVZhbHVlKQoreworICAgIHJldHVybiBnZXRFbnVtQ29uc3RhbnRWYWx1ZShzdGF0aWNf
Y2FzdDxpbnQ+KGVudW1WYWx1ZSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwor
CituYW1lc3BhY2UgRGF0YWJhc2UgeworCitlbnVtIGNsYXNzIFByaW1hcnlDb2xvcnMgeworICAg
IFJlZCA9IDAsCisgICAgR3JlZW4gPSAxLAorICAgIEJsdWUgPSAyLAorfTsgLy8gZW51bSBjbGFz
cyBQcmltYXJ5Q29sb3JzCisKKy8qIERhdGFiYXNlIGVycm9yLiAqLworY2xhc3MgRXJyb3IgOiBw
dWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CitwdWJsaWM6CisgICAgZW51bSB7CisgICAgICAgIE5v
RmllbGRzU2V0ID0gMCwKKyAgICAgICAgTWVzc2FnZVNldCA9IDEgPDwgMCwKKyAgICAgICAgQ29k
ZVNldCA9IDEgPDwgMSwKKyAgICAgICAgQWxsRmllbGRzU2V0ID0gKE1lc3NhZ2VTZXQgfCBDb2Rl
U2V0KQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CisgICAgY2xhc3MgQnVpbGRl
ciB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7
CisKKyAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2Fz
dFN0YXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0
PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgQnVp
bGRlcihSZWY8LypFcnJvciovSlNPTjo6T2JqZWN0PiYmIG9iamVjdCkKKyAgICAgICAgICAgIDog
bV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxF
X0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0
X3N0YXRlKTsKKyAgICAgICAgfQorICAgICAgICBmcmllbmQgY2xhc3MgRXJyb3I7CisgICAgcHVi
bGljOgorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2FnZShj
b25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgTWVzc2FnZVNldCksIHByb3BlcnR5X21lc3NhZ2VfYWxyZWFkeV9zZXQpOwor
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibWVzc2FnZSJfcywgdmFsdWUpOworICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNZXNzYWdlU2V0PigpOworICAgICAgICB9CisKKyAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IENvZGVTZXQ+JiBzZXRDb2RlKGludCB2YWx1ZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENvZGVTZXQpLCBwcm9w
ZXJ0eV9jb2RlX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2Vy
KCJjb2RlIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvZGVTZXQ+
KCk7CisgICAgICAgIH0KKworICAgICAgICBSZWY8RXJyb3I+IHJlbGVhc2UoKQorICAgICAgICB7
CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3Vs
dF9pc19ub3RfcmVhZHkpOworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEVycm9y
KSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0KSwgY2Fubm90X2Nhc3QpOworCisgICAgICAgICAgICBS
ZWY8SlNPTjo6T2JqZWN0PiBqc29uUmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsK
KyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8
RXJyb3I+Kj4oJmpzb25SZXN1bHQpKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
ICAgIH0KKyAgICB9OworCisgICAgLyoKKyAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6Cisg
ICAgICogUmVmPEVycm9yPiByZXN1bHQgPSBFcnJvcjo6Y3JlYXRlKCkKKyAgICAgKiAgICAgLnNl
dE1lc3NhZ2UoLi4uKQorICAgICAqICAgICAuc2V0Q29kZSguLi4pCisgICAgICogICAgIC5yZWxl
YXNlKCk7CisgICAgICovCisgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgp
CisgICAgeworICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKSk7CisgICAgfQorfTsKKworfSAvLyBEYXRhYmFzZQorCisKKworbmFtZXNwYWNl
IFRlc3RIZWxwZXJzIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgUHJvdG9jb2xFbnVtVHlwZT4KK09w
dGlvbmFsPFByb3RvY29sRW51bVR5cGU+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZyhjb25zdCBT
dHJpbmcmKTsKKworLy8gRW51bXMgaW4gdGhlICdEYXRhYmFzZScgRG9tYWluCit0ZW1wbGF0ZTw+
CitPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4g
cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQ
cmltYXJ5Q29sb3JzPihjb25zdCBTdHJpbmcmKTsKKworfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBl
cnMKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
CisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVs
dEhhc2g7CisKKy8vIEhhc2ggZGVjbGFyYXRpb25zIGluIHRoZSAnRGF0YWJhc2UnIERvbWFpbgor
dGVtcGxhdGU8Pgorc3RydWN0IERlZmF1bHRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFi
YXNlOjpQcmltYXJ5Q29sb3JzPiB7CisgICAgdHlwZWRlZiBJbnRIYXNoPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiBIYXNoOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV1RGCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorCisjIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNv
biBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisKKyNpbmNsdWRlIDx3dGYv
T3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJ
bnNwZWN0b3IgeworCituYW1lc3BhY2UgUHJvdG9jb2wgeworCituYW1lc3BhY2UgVGVzdEhlbHBl
cnMgeworCitzdGF0aWMgY29uc3QgY2hhciogY29uc3QgZW51bV9jb25zdGFudF92YWx1ZXNbXSA9
IHsKKyAgICAicmVkIiwKKyAgICAiZ3JlZW4iLAorICAgICJibHVlIiwKKyAgICAiY3lhbiIsCisg
ICAgIm1hZ2VudGEiLAorICAgICJ5ZWxsb3ciLAorICAgICJibGFjayIsCit9OworCitTdHJpbmcg
Z2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsKKyAgICByZXR1cm4gZW51bV9jb25zdGFu
dF92YWx1ZXNbY29kZV07Cit9CisKKy8vIEVudW1zIGluIHRoZSAnRGF0YWJhc2UnIERvbWFpbgor
Cit0ZW1wbGF0ZTw+CitPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJp
bWFyeUNvbG9ycz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQor
eworICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsKKyAgICAgICAg
KHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9yczo6UmVk
LAorICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5
Q29sb3JzOjpHcmVlbiwKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6UHJpbWFyeUNvbG9yczo6Qmx1ZSwKKyAgICB9OworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgMzsgKytpKQorICAgICAgICBpZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFu
dF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNbaV1dKQorICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyljb25zdGFudFZhbHVlc1tpXTsK
KworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RIZWxw
ZXJzCisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorCisjIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBh
cmFtZXRlcnMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hl
cnMuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKK0Bwcm90b2NvbCBUZXN0UHJvdG9j
b2xEYXRhYmFzZURvbWFpbkhhbmRsZXI7CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKK2Ns
YXNzIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGlj
IEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIgeworICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOworcHVibGljOgorICAgIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVyKGlkPFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBt
X2RlbGVnYXRlID0gaGFuZGxlcjsgfQorICAgIHZvaWQgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1l
dGVycyhsb25nIHJlcXVlc3RJZCwgY29uc3QgSlNPTjo6QXJyYXkqIGluX2NvbHVtbk5hbWVzLCBj
b25zdCBTdHJpbmcqIGluX25vdGVzLCBjb25zdCBkb3VibGUqIGluX3RpbWVzdGFtcCwgY29uc3Qg
SlNPTjo6T2JqZWN0KiBpbl92YWx1ZXMsIGNvbnN0IEpTT046OlZhbHVlKiBpbl9wYXlsb2FkLCBj
b25zdCBpbnQqIGluX2RhdGFiYXNlSWQsIGNvbnN0IEpTT046Ok9iamVjdCogaW5fc3FsRXJyb3Is
IGNvbnN0IFN0cmluZyogaW5fc2NyZWVuQ29sb3IsIGNvbnN0IEpTT046OkFycmF5KiBpbl9hbHRl
cm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyogaW5fcHJpbnRDb2xvcikgZmluYWw7CisgICAgdm9p
ZCBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIGNvbnN0IEpTT046
OkFycmF5JiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBpbl9ub3RlcywgZG91YmxlIGlu
X3RpbWVzdGFtcCwgY29uc3QgSlNPTjo6T2JqZWN0JiBpbl92YWx1ZXMsIEpTT046OlZhbHVlIGlu
X3BheWxvYWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBKU09OOjpPYmplY3QmIGluX3NxbEVy
cm9yLCBjb25zdCBTdHJpbmcmIGluX3NjcmVlbkNvbG9yLCBjb25zdCBKU09OOjpBcnJheSYgaW5f
YWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcmIGluX3ByaW50Q29sb3IpIGZpbmFsOworcHJp
dmF0ZToKKyAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVy
Pj4gbV9kZWxlZ2F0ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRl
cnMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQg
ImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisK
KyNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisKK25hbWVz
cGFjZSBJbnNwZWN0b3IgeworCit2b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVyOjpleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBjb25z
dCBKU09OOjpBcnJheSogaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyogaW5fbm90ZXMsIGNv
bnN0IGRvdWJsZSogaW5fdGltZXN0YW1wLCBjb25zdCBKU09OOjpPYmplY3QqIGluX3ZhbHVlcywg
Y29uc3QgSlNPTjo6VmFsdWUqIGluX3BheWxvYWQsIGNvbnN0IGludCogaW5fZGF0YWJhc2VJZCwg
Y29uc3QgSlNPTjo6T2JqZWN0KiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nKiBpbl9zY3JlZW5D
b2xvciwgY29uc3QgSlNPTjo6QXJyYXkqIGluX2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5n
KiBpbl9wcmludENvbG9yKQoreworICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVj
dG9yOkBzZWxlY3RvcihleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzV2l0aEVycm9yQ2FsbGJh
Y2s6c3VjY2Vzc0NhbGxiYWNrOmNvbHVtbk5hbWVzOm5vdGVzOnRpbWVzdGFtcDp2YWx1ZXM6cGF5
bG9hZDpkYXRhYmFzZUlkOnNxbEVycm9yOnNjcmVlbkNvbG9yOmFsdGVybmF0ZUNvbG9yczpwcmlu
dENvbG9yOildKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29s
RXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRGF0
YWJhc2UuZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycycgd2FzIG5vdCBmb3VuZCJfcyk7Cisg
ICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJy
b3IpIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihy
ZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAg
ICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgIH07CisKKyAg
ICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmNvbHVtbk5h
bWVzLCBOU1N0cmluZyAqKm5vdGVzLCBkb3VibGUgKnRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09O
T2JqZWN0ICoqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipwYXlsb2FkLCBpbnQgKmRh
dGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipzcWxFcnJvciwgVGVzdFByb3Rv
Y29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzICpzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5n
PiovICoqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRp
b25hbFBhcmFtZXRlcnNQcmludENvbG9yICpwcmludENvbG9yKSB7CisgICAgICAgIFJlZjxKU09O
OjpPYmplY3Q+IHJlc3VsdE9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihjb2x1bW5OYW1lcywg
QCJjb2x1bW5OYW1lcyIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05B
TF9QQVJBTUVURVIobm90ZXMsIEAibm90ZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHZhbHVlcywgQCJ2YWx1ZXMiKTsKKyAgICAgICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHBheWxvYWQsIEAicGF5bG9h
ZCIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIo
c3FsRXJyb3IsIEAic3FsRXJyb3IiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURf
T1BUSU9OQUxfUEFSQU1FVEVSKGFsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsK
KyAgICAgICAgaWYgKGNvbHVtbk5hbWVzKQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRB
cnJheSgiY29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KCpjb2x1bW5OYW1lcykpOwor
ICAgICAgICBpZiAobm90ZXMpCisgICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygi
bm90ZXMiX3MsICpub3Rlcyk7CisgICAgICAgIGlmICh0aW1lc3RhbXApCisgICAgICAgICAgICBy
ZXN1bHRPYmplY3QtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCAqdGltZXN0YW1wKTsKKyAgICAg
ICAgaWYgKHZhbHVlcykKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KCJ2YWx1
ZXMiX3MsIFsqdmFsdWVzIHRvSlNPTk9iamVjdF0pOworICAgICAgICBpZiAocGF5bG9hZCkKKyAg
ICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFsqcGF5bG9hZCB0
b0pTT05PYmplY3RdKTsKKyAgICAgICAgaWYgKGRhdGFiYXNlSWQpCisgICAgICAgICAgICByZXN1
bHRPYmplY3QtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsICpkYXRhYmFzZUlkKTsKKyAgICAg
ICAgaWYgKHNxbEVycm9yKQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInNx
bEVycm9yIl9zLCBbKnNxbEVycm9yIHRvSlNPTk9iamVjdF0pOworICAgICAgICBpZiAoc2NyZWVu
Q29sb3IpCisgICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygic2NyZWVuQ29sb3Ii
X3MsIHRvUHJvdG9jb2xTdHJpbmcoKnNjcmVlbkNvbG9yKSk7CisgICAgICAgIGlmIChhbHRlcm5h
dGVDb2xvcnMpCisgICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJhbHRlcm5hdGVD
b2xvcnMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KCphbHRlcm5hdGVDb2xvcnMpKTsKKyAgICAgICAg
aWYgKHByaW50Q29sb3IpCisgICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygicHJp
bnRDb2xvciJfcywgdG9Qcm90b2NvbFN0cmluZygqcHJpbnRDb2xvcikpOworICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdE9i
amVjdCksIGZhbHNlKTsKKyAgICB9OworCisgICAgTlNBcnJheS8qPE5TU3RyaW5nPiovICpvX2lu
X2NvbHVtbk5hbWVzOworICAgIGlmIChpbl9jb2x1bW5OYW1lcykKKyAgICAgICAgb19pbl9jb2x1
bW5OYW1lcyA9IHRvT2JqQ1N0cmluZ0FycmF5KGluX2NvbHVtbk5hbWVzKTsKKyAgICBOU1N0cmlu
ZyAqb19pbl9ub3RlczsKKyAgICBpZiAoaW5fbm90ZXMpCisgICAgICAgIG9faW5fbm90ZXMgPSAq
aW5fbm90ZXM7CisgICAgZG91YmxlIG9faW5fdGltZXN0YW1wOworICAgIGlmIChpbl90aW1lc3Rh
bXApCisgICAgICAgIG9faW5fdGltZXN0YW1wID0gKmluX3RpbWVzdGFtcDsKKyAgICBSV0lQcm90
b2NvbEpTT05PYmplY3QgKm9faW5fdmFsdWVzOworICAgIGlmIChpbl92YWx1ZXMpCisgICAgICAg
IG9faW5fdmFsdWVzID0gW1tbUldJUHJvdG9jb2xKU09OT2JqZWN0IGFsbG9jXSBpbml0V2l0aEpT
T05PYmplY3Q6aW5fdmFsdWVzXSBhdXRvcmVsZWFzZV07CisgICAgUldJUHJvdG9jb2xKU09OT2Jq
ZWN0ICpvX2luX3BheWxvYWQ7CisgICAgaWYgKGluX3BheWxvYWQpCisgICAgICAgIG9faW5fcGF5
bG9hZCA9IFtbW1JXSVByb3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0
OmluX3BheWxvYWRdIGF1dG9yZWxlYXNlXTsKKyAgICBpbnQgb19pbl9kYXRhYmFzZUlkOworICAg
IGlmIChpbl9kYXRhYmFzZUlkKQorICAgICAgICBvX2luX2RhdGFiYXNlSWQgPSAqaW5fZGF0YWJh
c2VJZDsKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpvX2luX3NxbEVycm9yOworICAg
IGlmIChpbl9zcWxFcnJvcikKKyAgICAgICAgb19pbl9zcWxFcnJvciA9IFtbW1Rlc3RQcm90b2Nv
bERhdGFiYXNlRXJyb3IgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDppbl9zcWxFcnJvcl0gYXV0
b3JlbGVhc2VdOworICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9y
cz4gb19pbl9zY3JlZW5Db2xvcjsKKyAgICBpZiAoaW5fc2NyZWVuQ29sb3IpCisgICAgICAgIG9f
aW5fc2NyZWVuQ29sb3IgPSBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sRGF0YWJhc2VQ
cmltYXJ5Q29sb3JzPigqaW5fc2NyZWVuQ29sb3IpOworICAgIE5TQXJyYXkvKjxOU1N0cmluZz4q
LyAqb19pbl9hbHRlcm5hdGVDb2xvcnM7CisgICAgaWYgKGluX2FsdGVybmF0ZUNvbG9ycykKKyAg
ICAgICAgb19pbl9hbHRlcm5hdGVDb2xvcnMgPSB0b09iakNTdHJpbmdBcnJheShpbl9hbHRlcm5h
dGVDb2xvcnMpOworICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9w
dGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3I+IG9faW5fcHJpbnRDb2xvcjsKKyAgICBpZiAoaW5f
cHJpbnRDb2xvcikKKyAgICAgICAgb19pbl9wcmludENvbG9yID0gZnJvbVByb3RvY29sU3RyaW5n
PFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29s
b3I+KCppbl9wcmludENvbG9yKTsKKworICAgIFttX2RlbGVnYXRlIGV4ZWN1dGVBbGxPcHRpb25h
bFBhcmFtZXRlcnNXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFj
azpzdWNjZXNzQ2FsbGJhY2sgY29sdW1uTmFtZXM6KGluX2NvbHVtbk5hbWVzID8gJm9faW5fY29s
dW1uTmFtZXMgOiBuaWwpIG5vdGVzOihpbl9ub3RlcyA/ICZvX2luX25vdGVzIDogbmlsKSB0aW1l
c3RhbXA6KGluX3RpbWVzdGFtcCA/ICZvX2luX3RpbWVzdGFtcCA6IG5pbCkgdmFsdWVzOihpbl92
YWx1ZXMgPyAmb19pbl92YWx1ZXMgOiBuaWwpIHBheWxvYWQ6KGluX3BheWxvYWQgPyAmb19pbl9w
YXlsb2FkIDogbmlsKSBkYXRhYmFzZUlkOihpbl9kYXRhYmFzZUlkID8gJm9faW5fZGF0YWJhc2VJ
ZCA6IG5pbCkgc3FsRXJyb3I6KGluX3NxbEVycm9yID8gJm9faW5fc3FsRXJyb3IgOiBuaWwpIHNj
cmVlbkNvbG9yOihpbl9zY3JlZW5Db2xvciA/ICZvX2luX3NjcmVlbkNvbG9yLnZhbHVlKCkgOiBu
aWwpIGFsdGVybmF0ZUNvbG9yczooaW5fYWx0ZXJuYXRlQ29sb3JzID8gJm9faW5fYWx0ZXJuYXRl
Q29sb3JzIDogbmlsKSBwcmludENvbG9yOihpbl9wcmludENvbG9yID8gJm9faW5fcHJpbnRDb2xv
ci52YWx1ZSgpIDogbmlsKV07Cit9CisKK3ZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXI6OmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhsb25nIHJlcXVlc3RJZCwg
Y29uc3QgSlNPTjo6QXJyYXkmIGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIGluX25vdGVz
LCBkb3VibGUgaW5fdGltZXN0YW1wLCBjb25zdCBKU09OOjpPYmplY3QmIGluX3ZhbHVlcywgSlNP
Tjo6VmFsdWUgaW5fcGF5bG9hZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IEpTT046Ok9iamVj
dCYgaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgaW5fc2NyZWVuQ29sb3IsIGNvbnN0IEpTT046
OkFycmF5JiBpbl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgaW5fcHJpbnRDb2xvcikK
K3sKKyAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoZXhl
Y3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNr
OmNvbHVtbk5hbWVzOm5vdGVzOnRpbWVzdGFtcDp2YWx1ZXM6cGF5bG9hZDpkYXRhYmFzZUlkOnNx
bEVycm9yOnNjcmVlbkNvbG9yOmFsdGVybmF0ZUNvbG9yczpwcmludENvbG9yOildKSB7CisgICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBC
YWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRGF0YWJhc2UuZXhlY3V0ZU5vT3B0
aW9uYWxQYXJhbWV0ZXJzJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2VuZERpc3Bh
dGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgeworICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERp
c3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVy
KCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgfTsKKworICAgIGlkIHN1Y2Nlc3NDYWxsYmFj
ayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiovICpjb2x1bW5OYW1lcywgTlNTdHJpbmcgKm5vdGVz
LCBkb3VibGUgdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnZhbHVlcywgUldJUHJv
dG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0
YWJhc2VFcnJvciAqc3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyBz
Y3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICphbHRlcm5hdGVDb2xvcnMsIFRlc3RQ
cm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvciBwcmlu
dENvbG9yKSB7CisgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdE9iamVjdCA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURf
UEFSQU1FVEVSKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7CisgICAgICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG5vdGVzLCBAIm5vdGVzIik7CisgICAgICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHZhbHVlcywgQCJ2YWx1ZXMi
KTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIocGF5bG9h
ZCwgQCJwYXlsb2FkIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFS
QU1FVEVSKHNxbEVycm9yLCBAInNxbEVycm9yIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfUkVRVUlSRURfUEFSQU1FVEVSKGFsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xvcnMi
KTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIHRvSlNP
TlN0cmluZ0FycmF5KGNvbHVtbk5hbWVzKSk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3Ry
aW5nKCJub3RlcyJfcywgbm90ZXMpOworICAgICAgICByZXN1bHRPYmplY3QtPnNldERvdWJsZSgi
dGltZXN0YW1wIl9zLCB0aW1lc3RhbXApOworICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVj
dCgidmFsdWVzIl9zLCBbdmFsdWVzIHRvSlNPTk9iamVjdF0pOworICAgICAgICByZXN1bHRPYmpl
Y3QtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBbcGF5bG9hZCB0b0pTT05PYmplY3RdKTsKKyAgICAg
ICAgcmVzdWx0T2JqZWN0LT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCBkYXRhYmFzZUlkKTsK
KyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBbc3FsRXJyb3Ig
dG9KU09OT2JqZWN0XSk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJzY3JlZW5D
b2xvciJfcywgdG9Qcm90b2NvbFN0cmluZyhzY3JlZW5Db2xvcikpOworICAgICAgICByZXN1bHRP
YmplY3QtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KGFs
dGVybmF0ZUNvbG9ycykpOworICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygicHJpbnRD
b2xvciJfcywgdG9Qcm90b2NvbFN0cmluZyhwcmludENvbG9yKSk7CisgICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0T2JqZWN0
KSwgZmFsc2UpOworICAgIH07CisKKyAgICBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKm9faW5fY29s
dW1uTmFtZXMgPSB0b09iakNTdHJpbmdBcnJheSgmaW5fY29sdW1uTmFtZXMpOworICAgIE5TU3Ry
aW5nICpvX2luX25vdGVzID0gaW5fbm90ZXM7CisgICAgZG91YmxlIG9faW5fdGltZXN0YW1wID0g
aW5fdGltZXN0YW1wOworICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb19pbl92YWx1ZXMgPSBb
W1tSV0lQcm90b2NvbEpTT05PYmplY3QgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDomaW5fdmFs
dWVzXSBhdXRvcmVsZWFzZV07CisgICAgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvX2luX3BheWxv
YWQgPSBbW1tSV0lQcm90b2NvbEpTT05PYmplY3QgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDom
aW5fcGF5bG9hZF0gYXV0b3JlbGVhc2VdOworICAgIGludCBvX2luX2RhdGFiYXNlSWQgPSBpbl9k
YXRhYmFzZUlkOworICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKm9faW5fc3FsRXJyb3Ig
PSBbW1tUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6
JmluX3NxbEVycm9yXSBhdXRvcmVsZWFzZV07CisgICAgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0
YWJhc2VQcmltYXJ5Q29sb3JzPiBvX2luX3NjcmVlbkNvbG9yID0gZnJvbVByb3RvY29sU3RyaW5n
PFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycz4oaW5fc2NyZWVuQ29sb3IpOworICAg
IGlmICghb19pbl9zY3JlZW5Db2xvcikgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5y
ZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCAiUGFy
YW1ldGVyICdzY3JlZW5Db2xvcicgb2YgbWV0aG9kICdEYXRhYmFzZS5leGVjdXRlTm9PcHRpb25h
bFBhcmFtZXRlcnMnIGNhbm5vdCBiZSBwcm9jZXNzZWQiX3MpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqb19pbl9hbHRlcm5hdGVDb2xvcnMgPSB0
b09iakNTdHJpbmdBcnJheSgmaW5fYWx0ZXJuYXRlQ29sb3JzKTsKKyAgICBPcHRpb25hbDxUZXN0
UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3I+IG9f
aW5fcHJpbnRDb2xvciA9IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3I+KGluX3ByaW50Q29sb3IpOworICAg
IGlmICghb19pbl9wcmludENvbG9yKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJl
cG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsICJQYXJh
bWV0ZXIgJ3ByaW50Q29sb3InIG9mIG1ldGhvZCAnRGF0YWJhc2UuZXhlY3V0ZU5vT3B0aW9uYWxQ
YXJhbWV0ZXJzJyBjYW5ub3QgYmUgcHJvY2Vzc2VkIl9zKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIFttX2RlbGVnYXRlIGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1dpdGhFcnJv
ckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjayBj
b2x1bW5OYW1lczpvX2luX2NvbHVtbk5hbWVzIG5vdGVzOm9faW5fbm90ZXMgdGltZXN0YW1wOm9f
aW5fdGltZXN0YW1wIHZhbHVlczpvX2luX3ZhbHVlcyBwYXlsb2FkOm9faW5fcGF5bG9hZCBkYXRh
YmFzZUlkOm9faW5fZGF0YWJhc2VJZCBzcWxFcnJvcjpvX2luX3NxbEVycm9yIHNjcmVlbkNvbG9y
Om9faW5fc2NyZWVuQ29sb3IudmFsdWUoKSBhbHRlcm5hdGVDb2xvcnM6b19pbl9hbHRlcm5hdGVD
b2xvcnMgcHJpbnRDb2xvcjpvX2luX3ByaW50Q29sb3IudmFsdWUoKV07Cit9CisKK30gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNw
YXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5o
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25h
bC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+CisKK19f
YXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJv
dG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRh
aW4sIHNldHRlcj1zZXREYXRhYmFzZUhhbmRsZXI6KSBpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURv
bWFpbkhhbmRsZXI+IGRhdGFiYXNlSGFuZGxlcjsKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbi5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1h
bmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbi5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2ltcG9ydCAi
VGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgorCit1c2luZyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
bgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Cisg
ICAgaWQ8VGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyPiBfZGF0YWJhc2VIYW5kbGVy
OworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUlu
c3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRd
OworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJv
bGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVybiBzZWxmOwor
fQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbX2RhdGFiYXNlSGFuZGxlciByZWxlYXNlXTsK
KyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0gKHZvaWQpc2V0RGF0YWJhc2VIYW5kbGVyOihp
ZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+KWhhbmRsZXIKK3sKKyAgICBpZiAo
aGFuZGxlciA9PSBfZGF0YWJhc2VIYW5kbGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBbX2Rh
dGFiYXNlSGFuZGxlciByZWxlYXNlXTsKKyAgICBfZGF0YWJhc2VIYW5kbGVyID0gW2hhbmRsZXIg
cmV0YWluXTsKKworICAgIGF1dG8gYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IG1ha2VVbmlxdWU8T2Jq
Q0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+KGhhbmRsZXIpOworICAgIGF1dG8g
YWx0ZXJuYXRlQWdlbnQgPSBtYWtlVW5pcXVlPEFsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50PERh
dGFiYXNlQmFja2VuZERpc3BhdGNoZXIsIEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXI+PigiRGF0YWJhc2UiX3MsICpfY29udHJvbGxlciwgV1RGTW92ZShhbHRlcm5hdGVEaXNwYXRj
aGVyKSk7CisgICAgX2NvbnRyb2xsZXItPmFwcGVuZEV4dHJhQWdlbnQoV1RGTW92ZShhbHRlcm5h
dGVBZ2VudCkpOworfQorCistIChpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+
KWRhdGFiYXNlSGFuZGxlcgoreworICAgIHJldHVybiBfZGF0YWJhc2VIYW5kbGVyOworfQorCitA
ZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisKKyMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVy
bi1wYXJhbWV0ZXJzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5n
IG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVu
dERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1y
ZXR1cm4tcGFyYW1ldGVycy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKKyNpbXBvcnQgPFdlYklu
c3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KKworCitAY2xhc3MgVGVzdFByb3RvY29s
RGF0YWJhc2VFcnJvcjsKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29s
RGF0YWJhc2VQcmltYXJ5Q29sb3JzKSB7CisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5
Q29sb3JzUmVkLAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc0dyZWVuLAor
ICAgIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc0JsdWUsCit9OworCit0eXBlZGVm
IE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25h
bFBhcmFtZXRlcnNQcmludENvbG9yKSB7CisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRl
QWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckN5YW4sCisgICAgVGVzdFByb3RvY29sRGF0
YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvck1hZ2VudGEsCisgICAg
VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xv
clllbGxvdywKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFt
ZXRlcnNQcmludENvbG9yQmxhY2ssCit9OworCisKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdl
ciwgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRD
b2xvcikgeworICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1l
dGVyc1ByaW50Q29sb3JDeWFuLAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9w
dGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JNYWdlbnRhLAorICAgIFRlc3RQcm90b2NvbERhdGFi
YXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JZZWxsb3csCisgICAgVGVz
dFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckJs
YWNrLAorfTsKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGF0YWJh
c2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yKSB7CisgICAgVGVzdFByb3Rv
Y29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQ3lhbiwKKyAg
ICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29s
b3JNYWdlbnRhLAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJh
bWV0ZXJzUHJpbnRDb2xvclllbGxvdywKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVO
b09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JCbGFjaywKK307CisKKworCit0eXBlZGVmIE5T
X0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFy
YW1ldGVyc1ByaW50Q29sb3IpIHsKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09w
dGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JDeWFuLAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNl
RXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvck1hZ2VudGEsCisgICAgVGVzdFBy
b3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yWWVsbG93
LAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJp
bnRDb2xvckJsYWNrLAorfTsKKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQi
KSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgOiBSV0lQcm90b2NvbEpT
T05PYmplY3QKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxO
U1N0cmluZyAqLCBpZD4gKilwYXlsb2FkOworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9j
b2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7CistIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZTooaW50KWNvZGU7
CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKm1l
c3NhZ2U7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQg
Y29kZTsKK0BlbmQKKworQHByb3RvY29sIFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxl
ciA8TlNPYmplY3Q+CitAb3B0aW9uYWwKKy0gKHZvaWQpZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1l
dGVyc1dpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxs
YmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoTlNBcnJheS8qPE5TU3RyaW5nPiovICoqY29s
dW1uTmFtZXMsIE5TU3RyaW5nICoqbm90ZXMsIGRvdWJsZSAqdGltZXN0YW1wLCBSV0lQcm90b2Nv
bEpTT05PYmplY3QgKip2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnBheWxvYWQsIGlu
dCAqZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKnNxbEVycm9yLCBUZXN0
UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgKnNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNT
dHJpbmc+Ki8gKiphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFs
bE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IgKnByaW50Q29sb3IpKXN1Y2Nlc3NDYWxsYmFj
ayBjb2x1bW5OYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKWNvbHVtbk5hbWVzIG5vdGVz
OihOU1N0cmluZyAqKilub3RlcyB0aW1lc3RhbXA6KGRvdWJsZSAqKXRpbWVzdGFtcCB2YWx1ZXM6
KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKil2YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xKU09O
T2JqZWN0ICoqKXBheWxvYWQgZGF0YWJhc2VJZDooaW50ICopZGF0YWJhc2VJZCBzcWxFcnJvcjoo
VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKilzcWxFcnJvciBzY3JlZW5Db2xvcjooVGVzdFBy
b3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzICopc2NyZWVuQ29sb3IgYWx0ZXJuYXRlQ29sb3Jz
OihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopYWx0ZXJuYXRlQ29sb3JzIHByaW50Q29sb3I6KFRl
c3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3Ig
KilwcmludENvbG9yOworLSAodm9pZClleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNXaXRoRXJy
b3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vz
c0NhbGxiYWNrOih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqY29sdW1uTmFtZXMsIE5T
U3RyaW5nICpub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICp2
YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQsIFRl
c3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVBy
aW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqYWx0ZXJuYXRl
Q29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1By
aW50Q29sb3IgcHJpbnRDb2xvcikpc3VjY2Vzc0NhbGxiYWNrIGNvbHVtbk5hbWVzOihOU0FycmF5
Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcyBub3RlczooTlNTdHJpbmcgKilub3RlcyB0aW1l
c3RhbXA6KGRvdWJsZSl0aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKil2
YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZCBkYXRhYmFzZUlk
OihpbnQpZGF0YWJhc2VJZCBzcWxFcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKXNx
bEVycm9yIHNjcmVlbkNvbG9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMpc2Ny
ZWVuQ29sb3IgYWx0ZXJuYXRlQ29sb3JzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilhbHRlcm5h
dGVDb2xvcnMgcHJpbnRDb2xvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25h
bFBhcmFtZXRlcnNQcmludENvbG9yKXByaW50Q29sb3I7CitAZW5kCisKKworCisKKyNpbXBvcnQg
PFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4KKwor
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRz
LXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1w
b3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgorI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDx3dGYvSlNP
TlZhbHVlcy5oPgorCisKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgK
KworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJl
dHVybi1wYXJhbWV0ZXJzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQ
cm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KK09wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJv
bVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOworCitpbmxpbmUgU3RyaW5nIHRv
UHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzIHZhbHVlKQor
eworICAgIHN3aXRjaCh2YWx1ZSkgeworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VQcmlt
YXJ5Q29sb3JzUmVkOgorICAgICAgICByZXR1cm4gInJlZCJfczsKKyAgICBjYXNlIFRlc3RQcm90
b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc0dyZWVuOgorICAgICAgICByZXR1cm4gImdyZWVuIl9z
OworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzQmx1ZToKKyAgICAg
ICAgcmV0dXJuICJibHVlIl9zOworICAgIH0KK30KKwordGVtcGxhdGU8PgoraW5saW5lIE9wdGlv
bmFsPFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycz4gZnJvbVByb3RvY29sU3RyaW5n
KGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09ICJyZWQiKQorICAgICAg
ICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzUmVkOworICAgIGlmICh2
YWx1ZSA9PSAiZ3JlZW4iKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VQcmlt
YXJ5Q29sb3JzR3JlZW47CisgICAgaWYgKHZhbHVlID09ICJibHVlIikKKyAgICAgICAgcmV0dXJu
IFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc0JsdWU7CisgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKK30KKworaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2Nv
bERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IgdmFsdWUpCit7
CisgICAgc3dpdGNoKHZhbHVlKSB7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQ3lhbjoKKyAgICAgICAgcmV0dXJuICJj
eWFuIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQ
YXJhbWV0ZXJzUHJpbnRDb2xvck1hZ2VudGE6CisgICAgICAgIHJldHVybiAibWFnZW50YSJfczsK
KyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVy
c1ByaW50Q29sb3JZZWxsb3c6CisgICAgICAgIHJldHVybiAieWVsbG93Il9zOworICAgIGNhc2Ug
VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xv
ckJsYWNrOgorICAgICAgICByZXR1cm4gImJsYWNrIl9zOworICAgIH0KK30KKwordGVtcGxhdGU8
PgoraW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFs
UGFyYW1ldGVyc1ByaW50Q29sb3I+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZh
bHVlKQoreworICAgIGlmICh2YWx1ZSA9PSAiY3lhbiIpCisgICAgICAgIHJldHVybiBUZXN0UHJv
dG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQ3lhbjsK
KyAgICBpZiAodmFsdWUgPT0gIm1hZ2VudGEiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29s
RGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvck1hZ2VudGE7Cisg
ICAgaWYgKHZhbHVlID09ICJ5ZWxsb3ciKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0
YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvclllbGxvdzsKKyAgICBp
ZiAodmFsdWUgPT0gImJsYWNrIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNl
RXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JCbGFjazsKKyAgICByZXR1cm4g
V1RGOjpudWxsb3B0OworfQorCisKKworaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRl
c3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3Ig
dmFsdWUpCit7CisgICAgc3dpdGNoKHZhbHVlKSB7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRh
YmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQ3lhbjoKKyAgICAgICAg
cmV0dXJuICJjeWFuIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxs
T3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvck1hZ2VudGE6CisgICAgICAgIHJldHVybiAibWFn
ZW50YSJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFs
UGFyYW1ldGVyc1ByaW50Q29sb3JZZWxsb3c6CisgICAgICAgIHJldHVybiAieWVsbG93Il9zOwor
ICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJz
UHJpbnRDb2xvckJsYWNrOgorICAgICAgICByZXR1cm4gImJsYWNrIl9zOworICAgIH0KK30KKwor
dGVtcGxhdGU8PgoraW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFs
bE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3I+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBT
dHJpbmcmIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSAiY3lhbiIpCisgICAgICAgIHJldHVy
biBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENv
bG9yQ3lhbjsKKyAgICBpZiAodmFsdWUgPT0gIm1hZ2VudGEiKQorICAgICAgICByZXR1cm4gVGVz
dFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvck1h
Z2VudGE7CisgICAgaWYgKHZhbHVlID09ICJ5ZWxsb3ciKQorICAgICAgICByZXR1cm4gVGVzdFBy
b3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvclllbGxv
dzsKKyAgICBpZiAodmFsdWUgPT0gImJsYWNrIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2Nv
bERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JCbGFjazsKKyAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCitpbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJp
bmcoVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENv
bG9yIHZhbHVlKQoreworICAgIHN3aXRjaCh2YWx1ZSkgeworICAgIGNhc2UgVGVzdFByb3RvY29s
RGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQ3lhbjoKKyAgICAg
ICAgcmV0dXJuICJjeWFuIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRl
Tm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yTWFnZW50YToKKyAgICAgICAgcmV0dXJuICJt
YWdlbnRhIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25h
bFBhcmFtZXRlcnNQcmludENvbG9yWWVsbG93OgorICAgICAgICByZXR1cm4gInllbGxvdyJfczsK
KyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJz
UHJpbnRDb2xvckJsYWNrOgorICAgICAgICByZXR1cm4gImJsYWNrIl9zOworICAgIH0KK30KKwor
dGVtcGxhdGU8PgoraW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5v
T3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvcj4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0
cmluZyYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09ICJjeWFuIikKKyAgICAgICAgcmV0dXJu
IFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xv
ckN5YW47CisgICAgaWYgKHZhbHVlID09ICJtYWdlbnRhIikKKyAgICAgICAgcmV0dXJuIFRlc3RQ
cm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvck1hZ2Vu
dGE7CisgICAgaWYgKHZhbHVlID09ICJ5ZWxsb3ciKQorICAgICAgICByZXR1cm4gVGVzdFByb3Rv
Y29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yWWVsbG93Owor
ICAgIGlmICh2YWx1ZSA9PSAiYmxhY2siKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0
YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQmxhY2s7CisgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKK30KKworCisKK2lubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmlu
ZyhUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29s
b3IgdmFsdWUpCit7CisgICAgc3dpdGNoKHZhbHVlKSB7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xE
YXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JDeWFuOgorICAgICAg
ICByZXR1cm4gImN5YW4iX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVO
b09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JNYWdlbnRhOgorICAgICAgICByZXR1cm4gIm1h
Z2VudGEiX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFs
UGFyYW1ldGVyc1ByaW50Q29sb3JZZWxsb3c6CisgICAgICAgIHJldHVybiAieWVsbG93Il9zOwor
ICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQ
cmludENvbG9yQmxhY2s6CisgICAgICAgIHJldHVybiAiYmxhY2siX3M7CisgICAgfQorfQorCit0
ZW1wbGF0ZTw+CitpbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9P
cHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gImN5YW4iKQorICAgICAgICByZXR1cm4g
VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9y
Q3lhbjsKKyAgICBpZiAodmFsdWUgPT0gIm1hZ2VudGEiKQorICAgICAgICByZXR1cm4gVGVzdFBy
b3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yTWFnZW50
YTsKKyAgICBpZiAodmFsdWUgPT0gInllbGxvdyIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9j
b2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JZZWxsb3c7Cisg
ICAgaWYgKHZhbHVlID09ICJibGFjayIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRh
YmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JCbGFjazsKKyAgICByZXR1
cm4gV1RGOjpudWxsb3B0OworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorCisjIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpz
b24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisj
aW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3Iv
UldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVj
dG9yOworCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoRGF0YWJhc2VE
b21haW4pCisKKysgKHZvaWQpX3BhcnNlRGF0YWJhc2VJZDooTlNOdW1iZXIgKiopb3V0VmFsdWUg
ZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisrICh2b2lkKV9wYXJzZVByaW1hcnlDb2xvcnM6KE5T
TnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworKyAodm9pZClfcGFy
c2VDb2xvckxpc3Q6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9h
ZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNlRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNl
RXJyb3IgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisKK0BlbmQKKworQGlt
cGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoRGF0YWJhc2VEb21haW4p
CisKKysgKHZvaWQpX3BhcnNlRGF0YWJhc2VJZDooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBh
eWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBh
eWxvYWQsIFtOU051bWJlciBjbGFzc10pOworICAgICpvdXRWYWx1ZSA9IChOU051bWJlciAqKXBh
eWxvYWQ7Cit9CisKKysgKHZvaWQpX3BhcnNlUHJpbWFyeUNvbG9yczooTlNOdW1iZXIgKiopb3V0
VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9S
X0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBjbGFzc10pOworICAgIE9wdGlvbmFsPFRlc3RQ
cm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycz4gcmVzdWx0ID0gSW5zcGVjdG9yOjpmcm9tUHJv
dG9jb2xTdHJpbmc8VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzPihwYXlsb2FkKTsK
KyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9FTlVNX1ZBTFVFKHJlc3VsdCwgQCJQcmltYXJ5
Q29sb3JzIik7CisgICAgKm91dFZhbHVlID0gQChyZXN1bHQudmFsdWUoKSk7Cit9CisKKysgKHZv
aWQpX3BhcnNlQ29sb3JMaXN0OihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopb3V0VmFsdWUgZnJv
bVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBF
KHBheWxvYWQsIFtOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUg
PSAoTlNBcnJheS8qPE5TU3RyaW5nPiovICopcGF5bG9hZDsKK30KKworKyAodm9pZClfcGFyc2VF
cnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDoo
aWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwg
W05TRGljdGlvbmFyeSBjbGFzc10pOworICAgICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sRGF0
YWJhc2VFcnJvciBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOworfQorCitAZW5kCisK
KworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpz
b24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0
UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRl
Lmg+CisjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMu
aD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQ
cm90b2NvbERhdGFiYXNlRXJyb3IKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoo
bm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZAoreworICAgIGlm
ICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AibWVzc2FnZSJdLCBA
Im1lc3NhZ2UiKTsKKyAgICBzZWxmLm1lc3NhZ2UgPSBwYXlsb2FkW0AibWVzc2FnZSJdOworCisg
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiY29kZSJd
LCBAImNvZGUiKTsKKyAgICBzZWxmLmNvZGUgPSBbcGF5bG9hZFtAImNvZGUiXSBpbnRlZ2VyVmFs
dWVdOworCisgICAgcmV0dXJuIHNlbGY7Cit9CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90
b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopb2JqZWN0Cit7CisgICAgaWYgKCEo
c2VsZiA9IFtzdXBlciBpbml0V2l0aEpTT05PYmplY3Q6W29iamVjdCB0b0pTT05PYmplY3RdLmdl
dCgpXSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlIGNvZGU6KGlu
dCljb2RlCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVy
biBuaWw7CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKG1lc3Nh
Z2UsIEAibWVzc2FnZSIpOworCisgICAgc2VsZi5tZXNzYWdlID0gbWVzc2FnZTsKKyAgICBzZWxm
LmNvZGUgPSBjb2RlOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpc2V0TWVzc2Fn
ZTooTlNTdHJpbmcgKiltZXNzYWdlCit7CisgICAgW3N1cGVyIHNldFN0cmluZzptZXNzYWdlIGZv
cktleTpAIm1lc3NhZ2UiXTsKK30KKworLSAoTlNTdHJpbmcgKiltZXNzYWdlCit7CisgICAgcmV0
dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJtZXNzYWdlIl07Cit9CisKKy0gKHZvaWQpc2V0Q29k
ZTooaW50KWNvZGUKK3sKKyAgICBbc3VwZXIgc2V0SW50ZWdlcjpjb2RlIGZvcktleTpAImNvZGUi
XTsKK30KKworLSAoaW50KWNvZGUKK3sKKyAgICByZXR1cm4gW3N1cGVyIGludGVnZXJGb3JLZXk6
QCJjb2RlIl07Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVz
Lm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbi1yZXN1bHQg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
ZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbi1yZXN1bHQKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjY5
YjZkZTdlMWE5YjllZDkzYmJmOTA1M2MyMTQ2Mzk5YzAxYWQ3ZgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9k
ZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uLXJlc3VsdApAQCAtMCwwICsxLDEyMDIg
QEAKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMuaW4KKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9y
bS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworLy8gTmV0d29y
aworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiTmV0d29yayIsIG51bGwpOworI2lm
IFBMQVRGT1JNKE1BQykKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3Jr
LmxvYWRSZXNvdXJjZSIsIG51bGwsIFtdLCBbXSk7CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQor
I2lmIFBMQVRGT1JNKE1BQykKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudCgiTmV0d29y
ay5yZXNvdXJjZUxvYWRlZCIsIG51bGwsIFtdKTsKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCitJ
bnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyTmV0d29ya0Rpc3BhdGNoZXIgPSBJbnNwZWN0b3JCYWNr
ZW5kLnJlZ2lzdGVyRGlzcGF0Y2hlci5iaW5kKEluc3BlY3RvckJhY2tlbmQsICJOZXR3b3JrIik7
CitJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJOZXR3b3JrIiwgbnVsbCk7CisjIyMg
RW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcy5pbgorCisjIyMgQmVnaW4gRmls
ZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbiBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyNpbmNsdWRlICJUZXN0UHJv
dG9jb2xUeXBlcy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRS
b3V0ZXIuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEFsdGVybmF0ZUJhY2tl
bmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJl
ZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNo
ZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9CisgICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tl
bmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsg
fQorcHJpdmF0ZToKKyAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3Bh
dGNoZXI7Cit9OworCisKK2NsYXNzIEFsdGVybmF0ZU5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlciA6
IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdmlydHVh
bCB+QWx0ZXJuYXRlTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyKCkgeyB9CisjaWYgUExBVEZPUk0o
TUFDKQorICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UobG9uZyBjYWxsSWQpID0gMDsKKyNl
bmRpZiAvLyBQTEFURk9STShNQUMpCit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKwor
I2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorIyMjIEVu
ZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZp
bGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1l
c3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKKyNpZiBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK2NsYXNzIEFsdGVybmF0ZU5l
dHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjsKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVS
TkFURV9ESVNQQVRDSEVSUykKKworY2xhc3MgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxl
ciB7CitwdWJsaWM6CisjaWYgUExBVEZPUk0oTUFDKQorICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVz
b3VyY2UoRXJyb3JTdHJpbmcmKSA9IDA7CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorcHJvdGVj
dGVkOgorICAgIHZpcnR1YWwgfk5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKK307
CisKK2NsYXNzIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVt
ZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxOZXR3b3Jr
QmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIE5ldHdvcmtCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElk
LCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5h
bDsKK3ByaXZhdGU6CisjaWYgUExBVEZPUk0oTUFDKQorICAgIHZvaWQgbG9hZFJlc291cmNlKGxv
bmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOworI2VuZGlm
IC8vIFBMQVRGT1JNKE1BQykKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKK3B1YmxpYzoKKyAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRl
TmV0d29ya0JhY2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJu
YXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KK3ByaXZhdGU6CisgICAgQWx0
ZXJuYXRlTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyKiBtX2FsdGVybmF0ZURpc3BhdGNoZXIgeyBu
dWxscHRyIH07CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCitwcml2YXRlOgorICAgIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0
Y2hlciYsIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICBOZXR3b3JrQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50IHsgbnVsbHB0ciB9OworfTsKKworfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMu
aAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5q
c29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3Rm
L0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKKyNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgi
CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKK25h
bWVzcGFjZSBJbnNwZWN0b3IgeworCitOZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+
TmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQorCitSZWY8TmV0d29ya0JhY2tl
bmREaXNwYXRjaGVyPiBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShCYWNrZW5kRGlz
cGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIqIGFnZW50KQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE5ldHdvcmtCYWNrZW5kRGlz
cGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKK30KKworTmV0d29ya0JhY2tlbmRE
aXNwYXRjaGVyOjpOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJh
Y2tlbmREaXNwYXRjaGVyLCBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkK
KyAgICA6IFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQor
ICAgICwgbV9hZ2VudChhZ2VudCkKK3sKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3Rl
ckRpc3BhdGNoZXJGb3JEb21haW4oIk5ldHdvcmsiX3MsIHRoaXMpOworfQorCit2b2lkIE5ldHdv
cmtCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmlu
ZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCit7CisgICAgUmVmPE5ldHdv
cmtCYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CisKKyAgICBSZWZQdHI8SlNPTjo6
T2JqZWN0PiBwYXJhbWV0ZXJzOworICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBw
YXJhbWV0ZXJzKTsKKworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBpZiAobWV0aG9kID09ICJsb2Fk
UmVzb3VyY2UiKSB7CisgICAgICAgIGxvYWRSZXNvdXJjZShyZXF1ZXN0SWQsIFdURk1vdmUocGFy
YW1ldGVycykpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmIC8vIFBMQVRGT1JNKE1B
QykKKworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2Vu
ZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmsuIiArIG1ldGhvZCArICInIHdh
cyBub3QgZm91bmQiKTsKK30KKworI2lmIFBMQVRGT1JNKE1BQykKK3ZvaWQgTmV0d29ya0JhY2tl
bmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpP
YmplY3Q+JiYpCit7CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
CisgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeworICAgICAgICBtX2FsdGVybmF0ZURp
c3BhdGNoZXItPmxvYWRSZXNvdXJjZShyZXF1ZXN0SWQpOworICAgICAgICByZXR1cm47CisgICAg
fQorI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCisg
ICAgRXJyb3JTdHJpbmcgZXJyb3I7CisgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2UoZXJyb3IpOwor
CisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+
c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7CisgICAgZWxz
ZQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tl
bmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOworfQorI2VuZGlmIC8v
IFBMQVRGT1JNKE1BQykKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmls
ZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9u
dGVuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZp
bml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmpl
Y3RzLmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEZyb250ZW5kUm91
dGVyOworCitjbGFzcyBOZXR3b3JrRnJvbnRlbmREaXNwYXRjaGVyIHsKKyAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBOZXR3b3JrRnJvbnRlbmREaXNwYXRjaGVyKEZy
b250ZW5kUm91dGVyJiBmcm9udGVuZFJvdXRlcikgOiBtX2Zyb250ZW5kUm91dGVyKGZyb250ZW5k
Um91dGVyKSB7IH0KKyNpZiBQTEFURk9STShNQUMpCisgICAgdm9pZCByZXNvdXJjZUxvYWRlZCgp
OworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKK3ByaXZhdGU6CisgICAgRnJvbnRlbmRSb3V0ZXIm
IG1fZnJvbnRlbmRSb3V0ZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBF
bmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVz
dEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbiBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0
RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25h
bWVzcGFjZSBJbnNwZWN0b3IgeworCisjaWYgUExBVEZPUk0oTUFDKQordm9pZCBOZXR3b3JrRnJv
bnRlbmREaXNwYXRjaGVyOjpyZXNvdXJjZUxvYWRlZCgpCit7CisgICAgUmVmPEpTT046Ok9iamVj
dD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGpzb25NZXNzYWdl
LT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIk5ldHdvcmsucmVzb3VyY2VMb2FkZWQiX3MpOworCisg
ICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygp
KTsKK30KKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgorCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbiBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFByb3Rv
Y29sIHsKKworCisKKy8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgorbmFtZXNwYWNlIE5ldHdvcmsg
eworI2lmIFBMQVRGT1JNKE1BQykKK2NsYXNzIE5ldHdvcmtFcnJvcjsKKyNlbmRpZiAvLyBQTEFU
Rk9STShNQUMpCit9IC8vIE5ldHdvcmsKKy8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4K
KworCisKKworbmFtZXNwYWNlIE5ldHdvcmsgeworCisjaWYgUExBVEZPUk0oTUFDKQorY2xhc3Mg
TmV0d29ya0Vycm9yIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgeworcHVibGljOgorICAgIGVu
dW0geworICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCisgICAgICAgIE1lc3NhZ2VTZXQgPSAxIDw8
IDAsCisgICAgICAgIENvZGVTZXQgPSAxIDw8IDEsCisgICAgICAgIEFsbEZpZWxkc1NldCA9IChN
ZXNzYWdlU2V0IHwgQ29kZVNldCkKKyAgICB9OworCisgICAgdGVtcGxhdGU8aW50IFNUQVRFPgor
ICAgIGNsYXNzIEJ1aWxkZXIgeworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxKU09OOjpP
YmplY3Q+IG1fcmVzdWx0OworCisgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNU
QVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAq
cmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKKyAgICAgICAg
fQorCisgICAgICAgIEJ1aWxkZXIoUmVmPC8qTmV0d29ya0Vycm9yKi9KU09OOjpPYmplY3Q+JiYg
b2JqZWN0KQorICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCisgICAgICAg
IHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWls
ZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAgICAgICB9CisgICAgICAgIGZyaWVu
ZCBjbGFzcyBOZXR3b3JrRXJyb3I7CisgICAgcHVibGljOgorCisgICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAg
ICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTWVzc2FnZVNldCksIHBy
b3BlcnR5X21lc3NhZ2VfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0
cmluZygibWVzc2FnZSJfcywgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxN
ZXNzYWdlU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvZGVT
ZXQ+JiBzZXRDb2RlKGludCB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoIShTVEFURSAmIENvZGVTZXQpLCBwcm9wZXJ0eV9jb2RlX2FscmVhZHlfc2V0KTsKKyAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2VyKCJjb2RlIl9zLCB2YWx1ZSk7CisgICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPENvZGVTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBS
ZWY8TmV0d29ya0Vycm9yPiByZWxlYXNlKCkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihOZXR3b3JrRXJyb3IpID09IHNpemVvZihK
U09OOjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7CisKKyAgICAgICAgICAgIFJlZjxKU09OOjpPYmpl
Y3Q+IGpzb25SZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOworICAgICAgICAgICAg
YXV0byByZXN1bHQgPSBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxOZXR3b3JrRXJyb3I+
Kj4oJmpzb25SZXN1bHQpKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0K
KyAgICB9OworCisgICAgLyoKKyAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CisgICAgICog
UmVmPE5ldHdvcmtFcnJvcj4gcmVzdWx0ID0gTmV0d29ya0Vycm9yOjpjcmVhdGUoKQorICAgICAq
ICAgICAuc2V0TWVzc2FnZSguLi4pCisgICAgICogICAgIC5zZXRDb2RlKC4uLikKKyAgICAgKiAg
ICAgLnJlbGVhc2UoKTsKKyAgICAgKi8KKyAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4g
Y3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICB9Cit9OworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykK
KworfSAvLyBOZXR3b3JrCisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisK
KyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorCisjaW5jbHVkZSA8d3RmL09wdGlv
bmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVj
dG9yIHsKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworCisKK30gLy8gbmFtZXNwYWNlIFByb3Rv
Y29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbE9iamVjdHMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlz
cGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25z
LXdpdGgtbWFjLXBsYXRmb3JtLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2Vu
ZERpc3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCitAcHJvdG9jb2wg
VGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkhhbmRsZXI7CisKK25hbWVzcGFjZSBJbnNwZWN0b3Ig
eworCisKK2NsYXNzIE9iakNJbnNwZWN0b3JOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIgZmluYWwg
OiBwdWJsaWMgQWx0ZXJuYXRlTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyIHsKKyAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBPYmpDSW5zcGVjdG9yTmV0d29ya0JhY2tl
bmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5IYW5kbGVyPiBoYW5kbGVy
KSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9CisjaWYgUExBVEZPUk0oTUFDKQorICAgIHZvaWQg
bG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKKyNlbmRpZiAvLyBQTEFURk9STShN
QUMpCitwcml2YXRlOgorICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWlu
SGFuZGxlcj4+IG1fZGVsZWdhdGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKwor
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbiBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5o
IgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRl
ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisKK25hbWVzcGFjZSBJbnNw
ZWN0b3IgeworCisjaWYgUExBVEZPUk0oTUFDKQordm9pZCBPYmpDSW5zcGVjdG9yTmV0d29ya0Jh
Y2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0SWQpCit7CisgICAgaWYg
KCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGxvYWRSZXNvdXJjZVdp
dGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgeworICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNo
ZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmsubG9hZFJlc291cmNlJyB3YXMgbm90IGZvdW5k
Il9zKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3Ry
aW5nICplcnJvcikgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2Nv
bEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7
CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAg
fTsKKworICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57CisgICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCksIGZh
bHNlKTsKKyAgICB9OworCisgICAgW21fZGVsZWdhdGUgbG9hZFJlc291cmNlV2l0aEVycm9yQ2Fs
bGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKK30K
KyNlbmRpZiAvLyBQTEFURk9STShNQUMpCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisj
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorCisjIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbiBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9U
ZXN0UHJvdG9jb2wuaD4KKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkp
CitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAorQHByb3Bl
cnR5IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNldE5ldHdvcmtIYW5kbGVyOikgaWQ8VGVz
dFByb3RvY29sTmV0d29ya0RvbWFpbkhhbmRsZXI+IG5ldHdvcmtIYW5kbGVyOworQHByb3BlcnR5
IChub25hdG9taWMsIHJlYWRvbmx5KSBUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluRXZlbnREaXNw
YXRjaGVyICpuZXR3b3JrRXZlbnREaXNwYXRjaGVyOworQGVuZAorCisKKyMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xDb25maWd1cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVm
aW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKKwor
I2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJh
Y2tlbmREaXNwYXRjaGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlz
cGF0Y2hhYmxlQWdlbnQuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5z
cGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0
ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsK
KworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KK3sKKyAgICBBdWdt
ZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworICAgIGlkPFRlc3RQcm90
b2NvbE5ldHdvcmtEb21haW5IYW5kbGVyPiBfbmV0d29ya0hhbmRsZXI7CisgICAgVGVzdFByb3Rv
Y29sTmV0d29ya0RvbWFpbkV2ZW50RGlzcGF0Y2hlciAqX25ldHdvcmtFdmVudERpc3BhdGNoZXI7
Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5z
cGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07
CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIEFTU0VSVChjb250cm9s
bGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9
CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIFtfbmV0d29ya0hhbmRsZXIgcmVsZWFzZV07Cisg
ICAgW19uZXR3b3JrRXZlbnREaXNwYXRjaGVyIHJlbGVhc2VdOworICAgIFtzdXBlciBkZWFsbG9j
XTsKK30KKworLSAodm9pZClzZXROZXR3b3JrSGFuZGxlcjooaWQ8VGVzdFByb3RvY29sTmV0d29y
a0RvbWFpbkhhbmRsZXI+KWhhbmRsZXIKK3sKKyAgICBpZiAoaGFuZGxlciA9PSBfbmV0d29ya0hh
bmRsZXIpCisgICAgICAgIHJldHVybjsKKworICAgIFtfbmV0d29ya0hhbmRsZXIgcmVsZWFzZV07
CisgICAgX25ldHdvcmtIYW5kbGVyID0gW2hhbmRsZXIgcmV0YWluXTsKKworICAgIGF1dG8gYWx0
ZXJuYXRlRGlzcGF0Y2hlciA9IG1ha2VVbmlxdWU8T2JqQ0luc3BlY3Rvck5ldHdvcmtCYWNrZW5k
RGlzcGF0Y2hlcj4oaGFuZGxlcik7CisgICAgYXV0byBhbHRlcm5hdGVBZ2VudCA9IG1ha2VVbmlx
dWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8TmV0d29ya0JhY2tlbmREaXNwYXRjaGVyLCBB
bHRlcm5hdGVOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI+PigiTmV0d29yayJfcywgKl9jb250cm9s
bGVyLCBXVEZNb3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIpKTsKKyAgICBfY29udHJvbGxlci0+YXBw
ZW5kRXh0cmFBZ2VudChXVEZNb3ZlKGFsdGVybmF0ZUFnZW50KSk7Cit9CisKKy0gKGlkPFRlc3RQ
cm90b2NvbE5ldHdvcmtEb21haW5IYW5kbGVyPiluZXR3b3JrSGFuZGxlcgoreworICAgIHJldHVy
biBfbmV0d29ya0hhbmRsZXI7Cit9CisKKy0gKFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5FdmVu
dERpc3BhdGNoZXIgKiluZXR3b3JrRXZlbnREaXNwYXRjaGVyCit7CisgICAgaWYgKCFfbmV0d29y
a0V2ZW50RGlzcGF0Y2hlcikKKyAgICAgICAgX25ldHdvcmtFdmVudERpc3BhdGNoZXIgPSBbW1Rl
c3RQcm90b2NvbE5ldHdvcmtEb21haW5FdmVudERpc3BhdGNoZXIgYWxsb2NdIGluaXRXaXRoQ29u
dHJvbGxlcjpfY29udHJvbGxlcl07CisgICAgcmV0dXJuIF9uZXR3b3JrRXZlbnREaXNwYXRjaGVy
OworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9u
Lm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxh
dGZvcm0uanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBv
cnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucy5oIgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNw
YWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbE5ldHdvcmtEb21h
aW5FdmVudERpc3BhdGNoZXIKK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIq
IF9jb250cm9sbGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihB
dWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0g
W3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBB
U1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJl
dHVybiBzZWxmOworfQorCistICh2b2lkKXJlc291cmNlTG9hZGVkCit7CisgICAgY29uc3QgRnJv
bnRlbmRSb3V0ZXImIHJvdXRlciA9IF9jb250cm9sbGVyLT5mcm9udGVuZFJvdXRlcigpOworCisg
ICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OworICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIk5ldHdvcmsucmVzb3Vy
Y2VMb2FkZWQiX3MpOworICAgIHJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0
cmluZygpKTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnRE
aXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5q
c29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8Rm91
bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2Nv
bEpTT05PYmplY3QuaD4KKworCisjaWYgUExBVEZPUk0oTUFDKQorQGNsYXNzIFRlc3RQcm90b2Nv
bE5ldHdvcmtFcnJvcjsKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCisKKworCisjaWYgUExBVEZP
Uk0oTUFDKQorX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJm
YWNlIFRlc3RQcm90b2NvbE5ldHdvcmtFcnJvciA6IFJXSVByb3RvY29sSlNPTk9iamVjdAorLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlk
PiAqKXBheWxvYWQ7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0
aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBjb2RlOihpbnQpY29kZTsKKy8qIHJlcXVpcmVk
ICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqbWVzc2FnZTsKKy8qIHJl
cXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCBjb2RlOworQGVuZAor
I2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKKworQHByb3RvY29sIFRlc3RQcm90b2NvbE5ldHdvcmtE
b21haW5IYW5kbGVyIDxOU09iamVjdD4KK0BvcHRpb25hbAorI2lmIFBMQVRGT1JNKE1BQykKKy0g
KHZvaWQpbG9hZFJlc291cmNlV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVy
cm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKSh2b2lkKSlzdWNjZXNz
Q2FsbGJhY2s7CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorQGVuZAorCitfX2F0dHJpYnV0ZV9f
KCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sTmV0d29y
a0RvbWFpbkV2ZW50RGlzcGF0Y2hlciA6IE5TT2JqZWN0CistICh2b2lkKXJlc291cmNlTG9hZGVk
OworQGVuZAorCisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0
aWJpbGl0eU9iamVjdHMuaD4KKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAorCisjIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIK
KyNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCisjaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPHd0
Zi9KU09OVmFsdWVzLmg+CisKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkV2
ZW50RGlzcGF0Y2hlciAoUHJpdmF0ZSkKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xs
ZXI6KEluc3BlY3Rvcjo6QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVy
OworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorCisjIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3Rv
Y29sLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25z
Lmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51
bVR5cGU+CitPcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBT
dHJpbmcmIHZhbHVlKTsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisKKyMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3Rv
Y29sVHlwZVBhcnNlci5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9i
amVjdFByaXZhdGUuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGludGVyZmFj
ZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKE5ldHdvcmtEb21haW4pCisKKyNpZiBQTEFU
Rk9STShNQUMpCisrICh2b2lkKV9wYXJzZU5ldHdvcmtFcnJvcjooVGVzdFByb3RvY29sTmV0d29y
a0Vycm9yICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworI2VuZGlmIC8vIFBM
QVRGT1JNKE1BQykKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zIChOZXR3b3JrRG9tYWluKQorCisjaWYgUExBVEZPUk0oTUFDKQorKyAodm9pZClf
cGFyc2VOZXR3b3JrRXJyb3I6KFRlc3RQcm90b2NvbE5ldHdvcmtFcnJvciAqKilvdXRWYWx1ZSBm
cm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZ
UEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOworICAgICpvdXRWYWx1ZSA9IFtbVGVz
dFByb3RvY29sTmV0d29ya0Vycm9yIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07Cit9
CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMt
d2l0aC1tYWMtcGxhdGZvcm0uanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3Rv
Y29sSlNPTk9iamVjdFByaXZhdGUuaD4KKyNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW1w
b3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisj
aWYgUExBVEZPUk0oTUFDKQorQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbE5ldHdvcmtFcnJv
cgorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFy
eTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBp
bml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JF
UVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJtZXNzYWdlIl0sIEAibWVzc2FnZSIpOworICAgIHNl
bGYubWVzc2FnZSA9IHBheWxvYWRbQCJtZXNzYWdlIl07CisKKyAgICBUSFJPV19FWENFUFRJT05f
Rk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJjb2RlIl0sIEAiY29kZSIpOworICAgIHNl
bGYuY29kZSA9IFtwYXlsb2FkW0AiY29kZSJdIGludGVnZXJWYWx1ZV07CisKKyAgICByZXR1cm4g
c2VsZjsKK30KKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90
b2NvbEpTT05PYmplY3QgKilvYmplY3QKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRX
aXRoSlNPTk9iamVjdDpbb2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0KCldKSkKKyAgICAgICAgcmV0
dXJuIG5pbDsKKworICAgIHJldHVybiBzZWxmOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZTooaW50KWNvZGUKK3sKKyAgICBpZiAo
IShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkobWVzc2FnZSwgQCJtZXNzYWdlIik7CisK
KyAgICBzZWxmLm1lc3NhZ2UgPSBtZXNzYWdlOworICAgIHNlbGYuY29kZSA9IGNvZGU7CisKKyAg
ICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClzZXRNZXNzYWdlOihOU1N0cmluZyAqKW1lc3Nh
Z2UKK3sKKyAgICBbc3VwZXIgc2V0U3RyaW5nOm1lc3NhZ2UgZm9yS2V5OkAibWVzc2FnZSJdOwor
fQorCistIChOU1N0cmluZyAqKW1lc3NhZ2UKK3sKKyAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0Zv
cktleTpAIm1lc3NhZ2UiXTsKK30KKworLSAodm9pZClzZXRDb2RlOihpbnQpY29kZQoreworICAg
IFtzdXBlciBzZXRJbnRlZ2VyOmNvZGUgZm9yS2V5OkAiY29kZSJdOworfQorCistIChpbnQpY29k
ZQoreworICAgIHJldHVybiBbc3VwZXIgaW50ZWdlckZvcktleTpAImNvZGUiXTsKK30KKworQGVu
ZAorI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uLXJlc3VsdCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9k
b21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24tcmVzdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU3NjAzN2I0MGYw
ZjUwYWE5ODA0NmExNDIyMjZjMGRiMWU1Y2U3ZmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWluLWRl
YnVnZ2FibGVUeXBlcy5qc29uLXJlc3VsdApAQCAtMCwwICsxLDEwMTEgQEAKKyMjIyBCZWdpbiBG
aWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMuaW4KKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisvLyBEb21haW4KK0luc3BlY3RvckJhY2tlbmQucmVn
aXN0ZXJEb21haW4oIkRvbWFpbiIsIG51bGwpOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNv
bW1hbmQoIkRvbWFpbi5Db21tYW5kIiwgbnVsbCwgW10sIFtdKTsKK0luc3BlY3RvckJhY2tlbmQu
cmVnaXN0ZXJFdmVudCgiRG9tYWluLkV2ZW50IiwgbnVsbCwgW10pOworSW5zcGVjdG9yQmFja2Vu
ZC5yZWdpc3RlckRvbWFpbkRpc3BhdGNoZXIgPSBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRGlz
cGF0Y2hlci5iaW5kKEluc3BlY3RvckJhY2tlbmQsICJEb21haW4iKTsKK0luc3BlY3RvckJhY2tl
bmQuYWN0aXZhdGVEb21haW4oIkRvbWFpbiIsIFsid2ViLXBhZ2UiXSk7CisjIyMgRW5kIEZpbGU6
IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcy5pbgorCisjIyMgQmVnaW4gRmlsZTogVGVzdEFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorCituYW1l
c3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewor
cHVibGljOgorICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNw
YXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlz
cGF0Y2hlcik7IH0KKyAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBj
b25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Citwcml2YXRlOgorICAg
IFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKK307CisKKwor
Y2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRl
QmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgfkFsdGVybmF0ZURvbWFp
bkJhY2tlbmREaXNwYXRjaGVyKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIENvbW1hbmQobG9uZyBj
YWxsSWQpID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8g
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjIyMgRW5kIEZpbGU6IFRl
c3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJh
Y2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9t
YWluLWRlYnVnZ2FibGVUeXBlcy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgi
CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7
CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCitjbGFzcyBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0
Y2hlcjsKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
KworY2xhc3MgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKK3B1YmxpYzoKKyAgICB2
aXJ0dWFsIHZvaWQgQ29tbWFuZChFcnJvclN0cmluZyYpID0gMDsKK3Byb3RlY3RlZDoKKyAgICB2
aXJ0dWFsIH5Eb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKK307CisKK2NsYXNzIERv
bWFpbkJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmRE
aXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPERvbWFpbkJhY2tlbmREaXNwYXRj
aGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXIqKTsKKyAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcm
IG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5hbDsKK3ByaXZhdGU6Cisg
ICAgdm9pZCBDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBh
cmFtZXRlcnMpOworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQor
cHVibGljOgorICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0Y2hlcihBbHRlcm5hdGVEb21haW5C
YWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVybmF0ZURpc3Bh
dGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9Citwcml2YXRlOgorICAgIEFsdGVybmF0ZURv
bWFpbkJhY2tlbmREaXNwYXRjaGVyKiBtX2FsdGVybmF0ZURpc3BhdGNoZXIgeyBudWxscHRyIH07
CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCitwcml2
YXRlOgorICAgIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiwgRG9t
YWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgRG9tYWluQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyKiBtX2FnZW50IHsgbnVsbHB0ciB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVn
aW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
VGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2lu
Y2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorI2luY2x1
ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNlbmRpZiAvLyBFTkFCTEUo
SU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworbmFtZXNwYWNlIEluc3BlY3RvciB7
CisKK0RvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6fkRvbWFpbkJhY2tlbmREaXNwYXRj
aGVySGFuZGxlcigpIHsgfQorCitSZWY8RG9tYWluQmFja2VuZERpc3BhdGNoZXI+IERvbWFpbkJh
Y2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRj
aGVyLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQoreworICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVy
LCBhZ2VudCkpOworfQorCitEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6RG9tYWluQmFja2VuZERp
c3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQorICAgIDogU3VwcGxlbWVudGFsQmFja2VuZERp
c3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCisgICAgLCBtX2FnZW50KGFnZW50KQoreworICAg
IG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbigiRG9tYWlu
Il9zLCB0aGlzKTsKK30KKwordm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2go
bG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYm
IG1lc3NhZ2UpCit7CisgICAgUmVmPERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0
aGlzKTsKKworICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7CisgICAgbWVzc2Fn
ZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRlcnMpOworCisgICAgaWYgKG1ldGhvZCA9
PSAiQ29tbWFuZCIpIHsKKyAgICAgICAgQ29tbWFuZChyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1l
dGVycykpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQs
ICInRG9tYWluLiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7Cit9CisKK3ZvaWQgRG9t
YWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09O
OjpPYmplY3Q+JiYpCit7CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCisgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeworICAgICAgICBtX2FsdGVybmF0
ZURpc3BhdGNoZXItPkNvbW1hbmQocmVxdWVzdElkKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworICAg
IEVycm9yU3RyaW5nIGVycm9yOworICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9hZ2VudC0+Q29tbWFuZChlcnJvcik7CisKKyAgICBp
ZiAoIWVycm9yLmxlbmd0aCgpKQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVz
cG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKKyAgICBlbHNlCisgICAg
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3Bh
dGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisK
KyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisK
K2NsYXNzIEZyb250ZW5kUm91dGVyOworCitjbGFzcyBEb21haW5Gcm9udGVuZERpc3BhdGNoZXIg
eworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIERvbWFpbkZyb250
ZW5kRGlzcGF0Y2hlcihGcm9udGVuZFJvdXRlciYgZnJvbnRlbmRSb3V0ZXIpIDogbV9mcm9udGVu
ZFJvdXRlcihmcm9udGVuZFJvdXRlcikgeyB9CisgICAgdm9pZCBFdmVudCgpOworcHJpdmF0ZToK
KyAgICBGcm9udGVuZFJvdXRlciYgbV9mcm9udGVuZFJvdXRlcjsKK307CisKK30gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisK
KyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordm9pZCBEb21haW5Gcm9udGVuZERp
c3BhdGNoZXI6OkV2ZW50KCkKK3sKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9
IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0
aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9zKTsKKworICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2
ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorCisj
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2Vy
dGlvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCituYW1lc3BhY2UgUHJvdG9j
b2wgeworCisKKworCisKKworCisKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAor
CisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsK
KworbmFtZXNwYWNlIFByb3RvY29sIHsKKworCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisK
K30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9i
amVjdHMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hl
cnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxl
VHlwZXMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMu
aD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKK0Bwcm90b2NvbCBUZXN0UHJvdG9jb2xE
b21haW5Eb21haW5IYW5kbGVyOworCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCitjbGFzcyBP
YmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJu
YXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OworcHVibGljOgorICAgIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihpZDxU
ZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBo
YW5kbGVyOyB9CisgICAgdm9pZCBDb21tYW5kKGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKK3ByaXZh
dGU6CisgICAgUmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+PiBt
X2RlbGVnYXRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFBy
b3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRl
cm5hbC5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2luY2x1
ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit2b2lkIE9i
akNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVlc3RJ
ZCkKK3sKKyAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Io
Q29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgeworICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2Vu
ZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi5Db21tYW5kJyB3YXMgbm90IGZv
dW5kIl9zKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMo
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5T
U3RyaW5nICplcnJvcikgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90
b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJv
cik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Cisg
ICAgfTsKKworICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57CisgICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCks
IGZhbHNlKTsKKyAgICB9OworCisgICAgW21fZGVsZWdhdGUgQ29tbWFuZFdpdGhFcnJvckNhbGxi
YWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107Cit9CisK
K30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJh
Y2tlbmREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbi5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLWRlYnVn
Z2FibGVUeXBlcy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgorCitfX2F0dHJpYnV0ZV9fKCh2
aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJh
dGlvbiA6IE5TT2JqZWN0CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluLCBzZXR0ZXI9c2V0
RG9tYWluSGFuZGxlcjopIGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IGRvbWFp
bkhhbmRsZXI7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFRlc3RQcm90b2NvbERv
bWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqZG9tYWluRXZlbnREaXNwYXRjaGVyOworQGVuZAor
CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJh
dGlvbi5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2ltcG9ydCAiVGVz
dFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9B
bHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVn
bWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgorCit1c2luZyBuYW1lc3BhY2Ug
SW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgor
eworICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7CisgICAg
aWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4gX2RvbWFpbkhhbmRsZXI7CisgICAg
VGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyICpfZG9tYWluRXZlbnREaXNw
YXRjaGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50
YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVy
IGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQo
Y29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVybiBz
ZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbX2RvbWFpbkhhbmRsZXIgcmVsZWFz
ZV07CisgICAgW19kb21haW5FdmVudERpc3BhdGNoZXIgcmVsZWFzZV07CisgICAgW3N1cGVyIGRl
YWxsb2NdOworfQorCistICh2b2lkKXNldERvbWFpbkhhbmRsZXI6KGlkPFRlc3RQcm90b2NvbERv
bWFpbkRvbWFpbkhhbmRsZXI+KWhhbmRsZXIKK3sKKyAgICBpZiAoaGFuZGxlciA9PSBfZG9tYWlu
SGFuZGxlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgW19kb21haW5IYW5kbGVyIHJlbGVhc2Vd
OworICAgIF9kb21haW5IYW5kbGVyID0gW2hhbmRsZXIgcmV0YWluXTsKKworICAgIGF1dG8gYWx0
ZXJuYXRlRGlzcGF0Y2hlciA9IG1ha2VVbmlxdWU8T2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmRE
aXNwYXRjaGVyPihoYW5kbGVyKTsKKyAgICBhdXRvIGFsdGVybmF0ZUFnZW50ID0gbWFrZVVuaXF1
ZTxBbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudDxEb21haW5CYWNrZW5kRGlzcGF0Y2hlciwgQWx0
ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXI+PigiRG9tYWluIl9zLCAqX2NvbnRyb2xsZXIs
IFdURk1vdmUoYWx0ZXJuYXRlRGlzcGF0Y2hlcikpOworICAgIF9jb250cm9sbGVyLT5hcHBlbmRF
eHRyYUFnZW50KFdURk1vdmUoYWx0ZXJuYXRlQWdlbnQpKTsKK30KKworLSAoaWQ8VGVzdFByb3Rv
Y29sRG9tYWluRG9tYWluSGFuZGxlcj4pZG9tYWluSGFuZGxlcgoreworICAgIHJldHVybiBfZG9t
YWluSGFuZGxlcjsKK30KKworLSAoVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRj
aGVyICopZG9tYWluRXZlbnREaXNwYXRjaGVyCit7CisgICAgaWYgKCFfZG9tYWluRXZlbnREaXNw
YXRjaGVyKQorICAgICAgICBfZG9tYWluRXZlbnREaXNwYXRjaGVyID0gW1tUZXN0UHJvdG9jb2xE
b21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgYWxsb2NdIGluaXRXaXRoQ29udHJvbGxlcjpfY29u
dHJvbGxlcl07CisgICAgcmV0dXJuIF9kb21haW5FdmVudERpc3BhdGNoZXI7Cit9CisKK0BlbmQK
KworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRl
cm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBv
cnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0Bp
bXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIKK3sK
KyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworfQorCist
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNv
bnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlm
ICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7Cisg
ICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQorCistICh2
b2lkKUV2ZW50Cit7CisgICAgY29uc3QgRnJvbnRlbmRSb3V0ZXImIHJvdXRlciA9IF9jb250cm9s
bGVyLT5mcm9udGVuZFJvdXRlcigpOworCisgICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3Nh
Z2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmco
Im1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7CisgICAgcm91dGVyLnNlbmRFdmVudChqc29u
TWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2wuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dh
YmxlVHlwZXMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNp
bXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3Iv
UldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+CisKKworCisKKworCisKKworQHByb3RvY29sIFRlc3RQ
cm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXIgPE5TT2JqZWN0PgorQG9wdGlvbmFsCistICh2b2lk
KUNvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9y
Q2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKHZvaWQpKXN1Y2Nlc3NDYWxsYmFjazsK
K0BlbmQKKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJm
YWNlIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciA6IE5TT2JqZWN0Cist
ICh2b2lkKUV2ZW50OworQGVuZAorCisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2Nv
bEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4KKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2wuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbiBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2Nv
bC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKKyNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9y
dCA8d3RmL0pTT05WYWx1ZXMuaD4KKworQGludGVyZmFjZSBUZXN0UHJvdG9jb2xEb21haW5Eb21h
aW5FdmVudERpc3BhdGNoZXIgKFByaXZhdGUpCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250
cm9sbGVyOihJbnNwZWN0b3I6OkF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJv
bGxlcjsKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKwor
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29s
LmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+
CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5
cGU+CitPcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJp
bmcmIHZhbHVlKTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorCisj
aW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIu
aCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+
CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworCisKKworCisjIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sVHlwZXMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4t
ZGVidWdnYWJsZVR5cGVzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2Nv
bEpTT05PYmplY3RQcml2YXRlLmg+CisjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2ltcG9y
dCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisj
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWluLXRhcmdl
dFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tcmVzdWx0IGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RvbWFpbi10
YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJlc3VsdApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4xNjFlNmJjMmY4YWM4ZTM2YmNhYjRlNjgzNjJiY2M3MDUxYzk4NWVlCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL2RvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlw
ZS5qc29uLXJlc3VsdApAQCAtMCwwICsxLDEwMTEgQEAKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0
b3JCYWNrZW5kQ29tbWFuZHMuanMuaW4KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBkb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbiBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKy8vIERvbWFpbgorSW5zcGVj
dG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiRG9tYWluIiwgbnVsbCk7CitJbnNwZWN0b3JCYWNr
ZW5kLnJlZ2lzdGVyQ29tbWFuZCgiRG9tYWluLkNvbW1hbmQiLCBbInBhZ2UiLCAid29ya2VyIl0s
IFtdLCBbXSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnQoIkRvbWFpbi5FdmVudCIs
IG51bGwsIFtdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW5EaXNwYXRjaGVyID0g
SW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRpc3BhdGNoZXIuYmluZChJbnNwZWN0b3JCYWNrZW5k
LCAiRG9tYWluIik7CitJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJEb21haW4iLCBb
InBhZ2UiXSk7CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcy5pbgor
CisjIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmct
ZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisKK25hbWVzcGFjZSBJ
bnNwZWN0b3IgeworCitjbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6
CisgICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+
JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVy
KTsgfQorICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsg
cmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KK3ByaXZhdGU6CisgICAgUmVmUHRy
PEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOworfTsKKworCitjbGFzcyBB
bHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5k
RGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+QWx0ZXJuYXRlRG9tYWluQmFja2Vu
ZERpc3BhdGNoZXIoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChsb25nIGNhbGxJZCkg
PSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUo
SU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyMjIyBFbmQgRmlsZTogVGVzdEFsdGVy
bmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERp
c3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFy
Z2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbiBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVz
dFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25h
bWVzcGFjZSBJbnNwZWN0b3IgeworCit0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKworI2lm
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorY2xhc3MgQWx0ZXJuYXRl
RG9tYWluQmFja2VuZERpc3BhdGNoZXI7CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCisKK2NsYXNzIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxl
ciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIENvbW1hbmQoRXJyb3JTdHJpbmcmKSA9IDA7
Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+RG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
KCk7Cit9OworCitjbGFzcyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBT
dXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxE
b21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgRG9tYWlu
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVl
c3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkg
ZmluYWw7Citwcml2YXRlOgorICAgIHZvaWQgQ29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVmUHRy
PEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVS
TkFURV9ESVNQQVRDSEVSUykKK3B1YmxpYzoKKyAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNo
ZXIoQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIp
IHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQorcHJpdmF0
ZToKKyAgICBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciogbV9hbHRlcm5hdGVEaXNw
YXRjaGVyIHsgbnVsbHB0ciB9OworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQorcHJpdmF0ZToKKyAgICBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihCYWNr
ZW5kRGlzcGF0Y2hlciYsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIERv
bWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2VudCB7IG51bGxwdHIgfTsKK307CisK
K30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3Bh
dGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hp
bmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEJhY2tlbmRE
aXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRl
bmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9O
ZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorI2luY2x1ZGUgIlRlc3RBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK0RvbWFpbkJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlcjo6fkRvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigp
IHsgfQorCitSZWY8RG9tYWluQmFja2VuZERpc3BhdGNoZXI+IERvbWFpbkJhY2tlbmREaXNwYXRj
aGVyOjpjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBEb21haW5C
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQoreworICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOwor
fQorCitEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6RG9tYWluQmFja2VuZERpc3BhdGNoZXIoQmFj
a2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIqIGFnZW50KQorICAgIDogU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFj
a2VuZERpc3BhdGNoZXIpCisgICAgLCBtX2FnZW50KGFnZW50KQoreworICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbigiRG9tYWluIl9zLCB0aGlzKTsK
K30KKwordm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0
SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCit7
CisgICAgUmVmPERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKKworICAg
IFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7CisgICAgbWVzc2FnZS0+Z2V0T2JqZWN0
KCJwYXJhbXMiX3MsIHBhcmFtZXRlcnMpOworCisgICAgaWYgKG1ldGhvZCA9PSAiQ29tbWFuZCIp
IHsKKyAgICAgICAgQ29tbWFuZChyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJv
dG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRG9tYWluLiIg
KyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7Cit9CisKK3ZvaWQgRG9tYWluQmFja2VuZERp
c3BhdGNoZXI6OkNvbW1hbmQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYp
Cit7CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisgICAgaWYg
KG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXIt
PkNvbW1hbmQocmVxdWVzdElkKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZiAvLyBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworICAgIEVycm9yU3RyaW5n
IGVycm9yOworICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7CisgICAgbV9hZ2VudC0+Q29tbWFuZChlcnJvcik7CisKKyAgICBpZiAoIWVycm9yLmxl
bmd0aCgpKQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVz
dElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2Vu
ZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZl
ckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgor
CisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBl
Lmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDx3dGYvSlNP
TlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKKworY2xhc3MgRnJvbnRlbmRSb3V0ZXI7CisKK2NsYXNzIERvbWFpbkZyb250
ZW5kRGlzcGF0Y2hlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6Cisg
ICAgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVyKEZyb250ZW5kUm91dGVyJiBmcm9udGVuZFJvdXRl
cikgOiBtX2Zyb250ZW5kUm91dGVyKGZyb250ZW5kUm91dGVyKSB7IH0KKyAgICB2b2lkIEV2ZW50
KCk7Citwcml2YXRlOgorICAgIEZyb250ZW5kUm91dGVyJiBtX2Zyb250ZW5kUm91dGVyOworfTsK
KworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERp
c3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNw
cAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlLW1h
dGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RGcm9u
dGVuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JG
cm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNw
YWNlIEluc3BlY3RvciB7CisKK3ZvaWQgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVyOjpFdmVudCgp
Cit7CisgICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOworICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5F
dmVudCJfcyk7CisKKyAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+
dG9KU09OU3RyaW5nKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVu
ZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbE9iamVjdHMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRv
bWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+CisjaW5jbHVkZSA8
d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCituYW1lc3Bh
Y2UgUHJvdG9jb2wgeworCisKKworCisKKworCisKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wK
KworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9i
amVjdHMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1k
b21haW4tZGVidWdnYWJsZVR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmpl
Y3RzLmgiCisKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCituYW1lc3BhY2UgUHJvdG9jb2wg
eworCisKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVn
Z2FibGVUeXBlLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXJzLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCitAcHJvdG9jb2wgVGVzdFByb3Rv
Y29sRG9tYWluRG9tYWluSGFuZGxlcjsKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworY2xh
c3MgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFs
dGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKK3B1YmxpYzoKKyAgICBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXIo
aWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRl
ID0gaGFuZGxlcjsgfQorICAgIHZvaWQgQ29tbWFuZChsb25nIHJlcXVlc3RJZCkgZmluYWw7Citw
cml2YXRlOgorICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVy
Pj4gbV9kZWxlZ2F0ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJs
ZVR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBv
cnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgi
CisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2luY2x1ZGUgIlRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisKK25h
bWVzcGFjZSBJbnNwZWN0b3IgeworCit2b2lkIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlz
cGF0Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVlc3RJZCkKK3sKKyAgICBpZiAoIVttX2RlbGVnYXRl
IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOnN1
Y2Nlc3NDYWxsYmFjazopXSkgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQ
cm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5k
LCAiJ0RvbWFpbi5Db21tYW5kJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgeworICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2Vu
ZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgfTsKKworICAgIGlkIHN1Y2Nlc3NDYWxs
YmFjayA9IF57CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1
ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKKyAgICB9OworCisgICAgW21f
ZGVsZWdhdGUgQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0Nh
bGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107Cit9CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgor
CisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorCisjIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVn
Z2FibGVUeXBlLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisj
aW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+CisKK19fYXR0cmlidXRlX18oKHZp
c2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0
aW9uIDogTlNPYmplY3QKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4sIHNldHRlcj1zZXRE
b21haW5IYW5kbGVyOikgaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4gZG9tYWlu
SGFuZGxlcjsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgVGVzdFByb3RvY29sRG9t
YWluRG9tYWluRXZlbnREaXNwYXRjaGVyICpkb21haW5FdmVudERpc3BhdGNoZXI7CitAZW5kCisK
KworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJs
ZVR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBv
cnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29s
SW50ZXJuYWwuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgor
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgor
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXJzLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRl
c3RQcm90b2NvbENvbmZpZ3VyYXRpb24KK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRy
b2xsZXIqIF9jb250cm9sbGVyOworICAgIGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRs
ZXI+IF9kb21haW5IYW5kbGVyOworICAgIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlz
cGF0Y2hlciAqX2RvbWFpbkV2ZW50RGlzcGF0Y2hlcjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9s
bGVyCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAg
IHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250cm9sbGVyID0g
Y29udHJvbGxlcjsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7Cisg
ICAgW19kb21haW5IYW5kbGVyIHJlbGVhc2VdOworICAgIFtfZG9tYWluRXZlbnREaXNwYXRjaGVy
IHJlbGVhc2VdOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAodm9pZClzZXREb21haW5I
YW5kbGVyOihpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiloYW5kbGVyCit7Cisg
ICAgaWYgKGhhbmRsZXIgPT0gX2RvbWFpbkhhbmRsZXIpCisgICAgICAgIHJldHVybjsKKworICAg
IFtfZG9tYWluSGFuZGxlciByZWxlYXNlXTsKKyAgICBfZG9tYWluSGFuZGxlciA9IFtoYW5kbGVy
IHJldGFpbl07CisKKyAgICBhdXRvIGFsdGVybmF0ZURpc3BhdGNoZXIgPSBtYWtlVW5pcXVlPE9i
akNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7CisgICAgYXV0byBh
bHRlcm5hdGVBZ2VudCA9IG1ha2VVbmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8RG9t
YWluQmFja2VuZERpc3BhdGNoZXIsIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyPj4o
IkRvbWFpbiJfcywgKl9jb250cm9sbGVyLCBXVEZNb3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIpKTsK
KyAgICBfY29udHJvbGxlci0+YXBwZW5kRXh0cmFBZ2VudChXVEZNb3ZlKGFsdGVybmF0ZUFnZW50
KSk7Cit9CisKKy0gKGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+KWRvbWFpbkhh
bmRsZXIKK3sKKyAgICByZXR1cm4gX2RvbWFpbkhhbmRsZXI7Cit9CisKKy0gKFRlc3RQcm90b2Nv
bERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqKWRvbWFpbkV2ZW50RGlzcGF0Y2hlcgorewor
ICAgIGlmICghX2RvbWFpbkV2ZW50RGlzcGF0Y2hlcikKKyAgICAgICAgX2RvbWFpbkV2ZW50RGlz
cGF0Y2hlciA9IFtbVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyIGFsbG9j
XSBpbml0V2l0aENvbnRyb2xsZXI6X2NvbnRyb2xsZXJdOworICAgIHJldHVybiBfZG9tYWluRXZl
bnREaXNwYXRjaGVyOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xD
b25maWd1cmF0aW9uLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3Bh
dGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdl
dFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5o
IgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPHd0
Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1l
bnRhdGlvbiBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIKK3sKKyAgICBB
dWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworfQorCistIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xs
ZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2Vs
ZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2Nv
bnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKUV2
ZW50Cit7CisgICAgY29uc3QgRnJvbnRlbmRSb3V0ZXImIHJvdXRlciA9IF9jb250cm9sbGVyLT5m
cm9udGVuZFJvdXRlcigpOworCisgICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBK
U09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhv
ZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7CisgICAgcm91dGVyLnNlbmRFdmVudChqc29uTWVzc2Fn
ZS0+dG9KU09OU3RyaW5nKCkpOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wu
aAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlLW1h
dGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKKyNp
bXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KKworCisKKworCisK
KworCitAcHJvdG9jb2wgVGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlciA8TlNPYmplY3Q+
CitAb3B0aW9uYWwKKy0gKHZvaWQpQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5T
U3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikodm9p
ZCkpc3VjY2Vzc0NhbGxiYWNrOworQGVuZAorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgi
ZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNw
YXRjaGVyIDogTlNPYmplY3QKKy0gKHZvaWQpRXZlbnQ7CitAZW5kCisKKworI2ltcG9ydCA8V2Vi
SW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgorCisjIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJ
bnRlcm5hbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdl
dFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBv
cnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0
Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPHd0Zi9KU09O
VmFsdWVzLmg+CisKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNw
YXRjaGVyIChQcml2YXRlKQorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooSW5z
cGVjdG9yOjpBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXI7CitAZW5k
CisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxl
VHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9y
dCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJh
eUNvbnZlcnNpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBPYmpDRW51bVR5cGU+CitPcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0
cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisK
KyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dh
YmxlVHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lt
cG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90
b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgorI2ltcG9ydCA8V2Vi
SW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKwordXNpbmcgbmFtZXNw
YWNlIEluc3BlY3RvcjsKKworCisKKworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlLW1hdGNo
aW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9y
dCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3Iv
UldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMu
aD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0
b3I7CisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2Rv
bWFpbi10YXJnZXRUeXBlcy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW4tdGFyZ2V0VHlwZXMuanNvbi1yZXN1
bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMGRjY2NhZTY4NjliYmI2Yjk3NzRiM2FjODg2NmYzMmM1MTgwOTI1Ywot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9leHBlY3RlZC9kb21haW4tdGFyZ2V0VHlwZXMuanNvbi1yZXN1bHQKQEAgLTAsMCAr
MSwxMDExIEBACisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzLmlu
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVzLmpz
b24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisvLyBEb21haW4KK0lu
c3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIkRvbWFpbiIsIFsicGFnZSJdKTsKK0luc3Bl
Y3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJEb21haW4uQ29tbWFuZCIsIFsicGFnZSJdLCBb
XSwgW10pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckV2ZW50KCJEb21haW4uRXZlbnQiLCBb
InBhZ2UiXSwgW10pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbkRpc3BhdGNoZXIg
PSBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRGlzcGF0Y2hlci5iaW5kKEluc3BlY3RvckJhY2tl
bmQsICJEb21haW4iKTsKK0luc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkRvbWFpbiIs
IG51bGwpOworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMuaW4KKwor
IyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlcy5qc29uIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpZiBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVu
ZFJvdXRlci5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgQWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIo
UmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0
Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KKyAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFj
a2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgp
OyB9Citwcml2YXRlOgorICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlz
cGF0Y2hlcjsKK307CisKKworY2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIg
OiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHZpcnR1
YWwgfkFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKCkgeyB9CisgICAgdmlydHVhbCB2
b2lkIENvbW1hbmQobG9uZyBjYWxsSWQpID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
CisjIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMg
QmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVzLmpzb24gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRlc3RQcm90
b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKKyNpZiBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK2NsYXNzIEFsdGVybmF0ZURvbWFp
bkJhY2tlbmREaXNwYXRjaGVyOworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQorCitjbGFzcyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewor
cHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBDb21tYW5kKEVycm9yU3RyaW5nJikgPSAwOworcHJv
dGVjdGVkOgorICAgIHZpcnR1YWwgfkRvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOwor
fTsKKworY2xhc3MgRG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxl
bWVudGFsQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8RG9tYWlu
QmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIERvbWFpbkJhY2tl
bmREaXNwYXRjaGVySGFuZGxlciopOworICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQs
IGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFs
OworcHJpdmF0ZToKKyAgICB2b2lkIENvbW1hbmQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09O
OjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCitwdWJsaWM6CisgICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFs
dGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1f
YWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KK3ByaXZhdGU6Cisg
ICAgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIqIG1fYWx0ZXJuYXRlRGlzcGF0Y2hl
ciB7IG51bGxwdHIgfTsKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKK3ByaXZhdGU6CisgICAgRG9tYWluQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERp
c3BhdGNoZXImLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICBEb21haW5C
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQgeyBudWxscHRyIH07Cit9OworCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVy
cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlcy5qc29uIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1
ZXMuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKKyNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCisjZW5kaWYg
Ly8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKK25hbWVzcGFjZSBJ
bnNwZWN0b3IgeworCitEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5Eb21haW5CYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KKworUmVmPERvbWFpbkJhY2tlbmREaXNwYXRjaGVy
PiBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNr
ZW5kRGlzcGF0Y2hlciwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKK3sK
KyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5k
RGlzcGF0Y2hlciwgYWdlbnQpKTsKK30KKworRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkRvbWFp
bkJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwg
RG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKKyAgICA6IFN1cHBsZW1lbnRh
bEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQorICAgICwgbV9hZ2VudChhZ2Vu
dCkKK3sKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21h
aW4oIkRvbWFpbiJfcywgdGhpcyk7Cit9CisKK3ZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6
OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046
Ok9iamVjdD4mJiBtZXNzYWdlKQoreworICAgIFJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4g
cHJvdGVjdCgqdGhpcyk7CisKKyAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOwor
ICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsKKworICAgIGlm
IChtZXRob2QgPT0gIkNvbW1hbmQiKSB7CisgICAgICAgIENvbW1hbmQocmVxdWVzdElkLCBXVEZN
b3ZlKHBhcmFtZXRlcnMpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fYmFja2Vu
ZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhv
ZE5vdEZvdW5kLCAiJ0RvbWFpbi4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOworfQor
Cit2b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQoreworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQorICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKKyAgICAgICAg
bV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5Db21tYW5kKHJlcXVlc3RJZCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCisKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1
bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYWdlbnQtPkNvbW1hbmQoZXJyb3Ip
OworCisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7CisgICAg
ZWxzZQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJh
Y2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOworfQorCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNo
ZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlcy5qc29uIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CisKK2NsYXNzIEZyb250ZW5kUm91dGVyOworCitjbGFzcyBEb21haW5Gcm9udGVuZERpc3Bh
dGNoZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIERvbWFp
bkZyb250ZW5kRGlzcGF0Y2hlcihGcm9udGVuZFJvdXRlciYgZnJvbnRlbmRSb3V0ZXIpIDogbV9m
cm9udGVuZFJvdXRlcihmcm9udGVuZFJvdXRlcikgeyB9CisgICAgdm9pZCBFdmVudCgpOworcHJp
dmF0ZToKKyAgICBGcm9udGVuZFJvdXRlciYgbV9mcm9udGVuZFJvdXRlcjsKK307CisKK30gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVy
cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZXMuanNvbiBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit2b2lkIERvbWFpbkZyb250ZW5k
RGlzcGF0Y2hlcjo6RXZlbnQoKQoreworICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdl
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJt
ZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOworCisgICAgbV9mcm9udGVuZFJvdXRlci5zZW5k
RXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisK
KyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZXMuanNvbiBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRp
b25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFByb3RvY29s
IHsKKworCisKKworCisKKworCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKwor
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVzLmpzb24gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
VGVzdFByb3RvY29sT2JqZWN0cy5oIgorCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFt
ZXNwYWNlIFByb3RvY29sIHsKKworCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMu
Y3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlcy5qc29u
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2luY2x1
ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworQHByb3RvY29sIFRlc3RQcm90b2NvbERvbWFpbkRvbWFp
bkhhbmRsZXI7CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKK2NsYXNzIE9iakNJbnNwZWN0
b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVEb21haW5C
YWNrZW5kRGlzcGF0Y2hlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6
CisgICAgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2Nv
bERvbWFpbkRvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0K
KyAgICB2b2lkIENvbW1hbmQobG9uZyByZXF1ZXN0SWQpIGZpbmFsOworcHJpdmF0ZToKKyAgICBS
ZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
QmFja2VuZERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
ZG9tYWluLXRhcmdldFR5cGVzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmRE
aXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbmNs
dWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZh
bHVlcy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordm9pZCBPYmpDSW5zcGVjdG9yRG9t
YWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9uZyByZXF1ZXN0SWQpCit7CisgICAgaWYg
KCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKENvbW1hbmRXaXRoRXJy
b3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpN
ZXRob2ROb3RGb3VuZCwgIidEb21haW4uQ29tbWFuZCcgd2FzIG5vdCBmb3VuZCJfcyk7CisgICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3Ip
IHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1
ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgIH07CisKKyAgICBp
ZCBzdWNjZXNzQ2FsbGJhY2sgPSBeeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5k
UmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAg
fTsKKworICAgIFttX2RlbGVnYXRlIENvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxi
YWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOworfQorCit9IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hl
cnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlcy5qc29uIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8V2ViSW5zcGVj
dG9yL1Rlc3RQcm90b2NvbC5oPgorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVs
dCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0CitA
cHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluLCBzZXR0ZXI9c2V0RG9tYWluSGFuZGxlcjopIGlk
PFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IGRvbWFpbkhhbmRsZXI7CitAcHJvcGVy
dHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlz
cGF0Y2hlciAqZG9tYWluRXZlbnREaXNwYXRjaGVyOworQGVuZAorCisKKyMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xDb25maWd1cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9t
YWluLXRhcmdldFR5cGVzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCisKKyNpbXBvcnQgIlRl
c3RQcm90b2NvbEludGVybmFsLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0
Y2hlcnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFn
ZW50Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRy
b2xsZXIuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tl
bmREaXNwYXRjaGVycy5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXJzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1l
bnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCit7CisgICAgQXVnbWVudGFibGVJbnNw
ZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKKyAgICBpZDxUZXN0UHJvdG9jb2xEb21haW5E
b21haW5IYW5kbGVyPiBfZG9tYWluSGFuZGxlcjsKKyAgICBUZXN0UHJvdG9jb2xEb21haW5Eb21h
aW5FdmVudERpc3BhdGNoZXIgKl9kb21haW5FdmVudERpc3BhdGNoZXI7Cit9CisKKy0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxl
ciopY29udHJvbGxlcgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxm
KQorICAgICAgICByZXR1cm4gbmlsOworICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBfY29u
dHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVh
bGxvYworeworICAgIFtfZG9tYWluSGFuZGxlciByZWxlYXNlXTsKKyAgICBbX2RvbWFpbkV2ZW50
RGlzcGF0Y2hlciByZWxlYXNlXTsKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0gKHZvaWQp
c2V0RG9tYWluSGFuZGxlcjooaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4paGFu
ZGxlcgoreworICAgIGlmIChoYW5kbGVyID09IF9kb21haW5IYW5kbGVyKQorICAgICAgICByZXR1
cm47CisKKyAgICBbX2RvbWFpbkhhbmRsZXIgcmVsZWFzZV07CisgICAgX2RvbWFpbkhhbmRsZXIg
PSBbaGFuZGxlciByZXRhaW5dOworCisgICAgYXV0byBhbHRlcm5hdGVEaXNwYXRjaGVyID0gbWFr
ZVVuaXF1ZTxPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXI+KGhhbmRsZXIpOwor
ICAgIGF1dG8gYWx0ZXJuYXRlQWdlbnQgPSBtYWtlVW5pcXVlPEFsdGVybmF0ZURpc3BhdGNoYWJs
ZUFnZW50PERvbWFpbkJhY2tlbmREaXNwYXRjaGVyLCBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlz
cGF0Y2hlcj4+KCJEb21haW4iX3MsICpfY29udHJvbGxlciwgV1RGTW92ZShhbHRlcm5hdGVEaXNw
YXRjaGVyKSk7CisgICAgX2NvbnRyb2xsZXItPmFwcGVuZEV4dHJhQWdlbnQoV1RGTW92ZShhbHRl
cm5hdGVBZ2VudCkpOworfQorCistIChpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVy
Pilkb21haW5IYW5kbGVyCit7CisgICAgcmV0dXJuIF9kb21haW5IYW5kbGVyOworfQorCistIChU
ZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKilkb21haW5FdmVudERpc3Bh
dGNoZXIKK3sKKyAgICBpZiAoIV9kb21haW5FdmVudERpc3BhdGNoZXIpCisgICAgICAgIF9kb21h
aW5FdmVudERpc3BhdGNoZXIgPSBbW1Rlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0
Y2hlciBhbGxvY10gaW5pdFdpdGhDb250cm9sbGVyOl9jb250cm9sbGVyXTsKKyAgICByZXR1cm4g
X2RvbWFpbkV2ZW50RGlzcGF0Y2hlcjsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
RXZlbnREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRv
bWFpbi10YXJnZXRUeXBlcy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1
c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29s
RG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyCit7CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JD
b250cm9sbGVyKiBfY29udHJvbGxlcjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29u
dHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCit7Cisg
ICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBu
aWw7CisgICAgQVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250cm9sbGVyID0gY29udHJvbGxl
cjsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClFdmVudAoreworICAgIGNvbnN0IEZy
b250ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29udHJvbGxlci0+ZnJvbnRlbmRSb3V0ZXIoKTsKKwor
ICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KTsKKyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4uRXZlbnQi
X3MpOworICAgIHJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsK
K30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVy
cy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZXMuanNvbiBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5o
PgorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+CisKKwor
CisKKworCisKKworQHByb3RvY29sIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXIgPE5T
T2JqZWN0PgorQG9wdGlvbmFsCistICh2b2lkKUNvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazoodm9p
ZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lk
KF4pKHZvaWQpKXN1Y2Nlc3NDYWxsYmFjazsKK0BlbmQKKworX19hdHRyaWJ1dGVfXygodmlzaWJp
bGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2
ZW50RGlzcGF0Y2hlciA6IE5TT2JqZWN0CistICh2b2lkKUV2ZW50OworQGVuZAorCisKKyNpbXBv
cnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4K
KworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sSW50ZXJuYWwuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFp
bi10YXJnZXRUeXBlcy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2Jq
ZWN0UHJpdmF0ZS5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0
b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCitAaW50ZXJmYWNl
IFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAoUHJpdmF0ZSkKKy0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEluc3BlY3Rvcjo6QXVnbWVudGFibGVJbnNw
ZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyOworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sSW50ZXJuYWwuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFy
Z2V0VHlwZXMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNp
bXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29s
QXJyYXlDb252ZXJzaW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordGVtcGxhdGU8
dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgorT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9j
b2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZXMuanNvbiBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90
b2NvbFR5cGVQYXJzZXIuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05P
YmplY3RQcml2YXRlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworCisKKwor
CisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorCisjIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZXMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBv
cnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9y
L1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKyNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25z
Lmg+CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVj
dG9yOworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9k
b21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24tcmVzdWx0IGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RvbWFpbnMtd2l0
aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbi1yZXN1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmIxOGM0MDQ4
ODQ0ZTg3NmIzZmFkNzZkNzQyZDJhYjI5YTYyODAwNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW5z
LXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24tcmVzdWx0CkBAIC0wLDAgKzEsMTQwMyBA
QAorIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcy5pbgorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQt
c2l6ZXMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKy8vIE5l
dHdvcmsxCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJOZXR3b3JrMSIsIG51bGwp
OworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIk5ldHdvcmsxLmxvYWRSZXNvdXJj
ZTEiLCBudWxsLCBbXSwgW10pOworSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiTmV0
d29yazEiLCBudWxsKTsKKworLy8gTmV0d29yazMKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJE
b21haW4oIk5ldHdvcmszIiwgbnVsbCk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFu
ZCgiTmV0d29yazMubG9hZFJlc291cmNlMSIsIG51bGwsIFtdLCBbXSk7CitJbnNwZWN0b3JCYWNr
ZW5kLnJlZ2lzdGVyQ29tbWFuZCgiTmV0d29yazMubG9hZFJlc291cmNlMiIsIG51bGwsIFtdLCBb
XSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiTmV0d29yazMubG9hZFJlc291
cmNlMyIsIG51bGwsIFtdLCBbXSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgi
TmV0d29yazMubG9hZFJlc291cmNlNCIsIG51bGwsIFtdLCBbXSk7CitJbnNwZWN0b3JCYWNrZW5k
LnJlZ2lzdGVyQ29tbWFuZCgiTmV0d29yazMubG9hZFJlc291cmNlNSIsIG51bGwsIFtdLCBbXSk7
CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiTmV0d29yazMubG9hZFJlc291cmNl
NiIsIG51bGwsIFtdLCBbXSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiTmV0
d29yazMubG9hZFJlc291cmNlNyIsIG51bGwsIFtdLCBbXSk7CitJbnNwZWN0b3JCYWNrZW5kLmFj
dGl2YXRlRG9tYWluKCJOZXR3b3JrMyIsIG51bGwpOworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JC
YWNrZW5kQ29tbWFuZHMuanMuaW4KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFp
bnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Cisj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsK
K3B1YmxpYzoKKyAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlz
cGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRp
c3BhdGNoZXIpOyB9CisgICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkg
Y29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQorcHJpdmF0ZToKKyAg
ICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Cit9OworCisK
K2NsYXNzIEFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJu
YXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgfkFsdGVybmF0ZU5l
dHdvcmsxQmFja2VuZERpc3BhdGNoZXIoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291
cmNlMShsb25nIGNhbGxJZCkgPSAwOworfTsKKworY2xhc3MgQWx0ZXJuYXRlTmV0d29yazNCYWNr
ZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJs
aWM6CisgICAgdmlydHVhbCB+QWx0ZXJuYXRlTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcigpIHsg
fQorICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UxKGxvbmcgY2FsbElkKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTIobG9uZyBjYWxsSWQpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgbG9hZFJlc291cmNlMyhsb25nIGNhbGxJZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBs
b2FkUmVzb3VyY2U0KGxvbmcgY2FsbElkKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNv
dXJjZTUobG9uZyBjYWxsSWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlNihs
b25nIGNhbGxJZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2U3KGxvbmcgY2Fs
bElkKSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorIyMjIEVuZCBGaWxlOiBUZXN0
QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNr
ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFp
bnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29s
T2JqZWN0cy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJ
bnNwZWN0b3IgeworCit0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKworI2lmIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorY2xhc3MgQWx0ZXJuYXRlTmV0d29yazFC
YWNrZW5kRGlzcGF0Y2hlcjsKK2NsYXNzIEFsdGVybmF0ZU5ldHdvcmszQmFja2VuZERpc3BhdGNo
ZXI7CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisK
K2NsYXNzIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKK3B1YmxpYzoKKyAgICB2
aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMShFcnJvclN0cmluZyYpID0gMDsKK3Byb3RlY3RlZDoK
KyAgICB2aXJ0dWFsIH5OZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOworfTsKKwor
Y2xhc3MgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgeworcHVibGljOgorICAgIHZp
cnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UxKEVycm9yU3RyaW5nJikgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBsb2FkUmVzb3VyY2UyKEVycm9yU3RyaW5nJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBs
b2FkUmVzb3VyY2UzKEVycm9yU3RyaW5nJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVz
b3VyY2U0KEVycm9yU3RyaW5nJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2U1
KEVycm9yU3RyaW5nJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2U2KEVycm9y
U3RyaW5nJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2U3KEVycm9yU3RyaW5n
JikgPSAwOworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgfk5ldHdvcmszQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyKCk7Cit9OworCitjbGFzcyBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyIGZpbmFs
IDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgUmVmPE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0
Y2hlciYsIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgdm9pZCBkaXNw
YXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmpl
Y3Q+JiYgbWVzc2FnZSkgZmluYWw7Citwcml2YXRlOgorICAgIHZvaWQgbG9hZFJlc291cmNlMShs
b25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyNpZiBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK3B1YmxpYzoKKyAgICB2b2lk
IHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hl
ciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5h
dGVEaXNwYXRjaGVyOyB9Citwcml2YXRlOgorICAgIEFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERp
c3BhdGNoZXIqIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciB7IG51bGxwdHIgfTsKKyNlbmRpZiAvLyBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK3ByaXZhdGU6CisgICAgTmV0
d29yazFCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYsIE5ldHdvcmsxQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIqIG1fYWdlbnQgeyBudWxscHRyIH07Cit9OworCitjbGFzcyBOZXR3b3JrM0JhY2tlbmREaXNw
YXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUmVmPE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShC
YWNrZW5kRGlzcGF0Y2hlciYsIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Cisg
ICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJl
ZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkgZmluYWw7Citwcml2YXRlOgorICAgIHZvaWQgbG9h
ZFJlc291cmNlMShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0
ZXJzKTsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTIobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09O
OjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisgICAgdm9pZCBsb2FkUmVzb3VyY2UzKGxvbmcgcmVx
dWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOworICAgIHZvaWQgbG9h
ZFJlc291cmNlNChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0
ZXJzKTsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTUobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09O
OjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisgICAgdm9pZCBsb2FkUmVzb3VyY2U2KGxvbmcgcmVx
dWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOworICAgIHZvaWQgbG9h
ZFJlc291cmNlNyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0
ZXJzKTsKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK3B1Ymxp
YzoKKyAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlTmV0d29yazNCYWNr
ZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVybmF0ZURpc3BhdGNo
ZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9Citwcml2YXRlOgorICAgIEFsdGVybmF0ZU5ldHdv
cmszQmFja2VuZERpc3BhdGNoZXIqIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciB7IG51bGxwdHIgfTsK
KyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK3ByaXZh
dGU6CisgICAgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYsIE5l
dHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgTmV0d29yazNCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQgeyBudWxscHRyIH07Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMj
IyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNv
biBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0Zi9K
U09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCisjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgor
I2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCituYW1l
c3BhY2UgSW5zcGVjdG9yIHsKKworTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5O
ZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQorTmV0d29yazNCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXI6On5OZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQor
CitSZWY8TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4gTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hl
cjo6Y3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgTmV0d29yazFC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQoreworICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIsIGFnZW50KSk7
Cit9CisKK05ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6Ok5ldHdvcmsxQmFja2VuZERpc3BhdGNo
ZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBOZXR3b3JrMUJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlciogYWdlbnQpCisgICAgOiBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0
Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKKyAgICAsIG1fYWdlbnQoYWdlbnQpCit7CisgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKCJOZXR3b3JrMSJf
cywgdGhpcyk7Cit9CisKK3ZvaWQgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2go
bG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYm
IG1lc3NhZ2UpCit7CisgICAgUmVmPE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3Qo
KnRoaXMpOworCisgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVyczsKKyAgICBtZXNz
YWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFyYW1ldGVycyk7CisKKyAgICBpZiAobWV0aG9k
ID09ICJsb2FkUmVzb3VyY2UxIikgeworICAgICAgICBsb2FkUmVzb3VyY2UxKHJlcXVlc3RJZCwg
V1RGTW92ZShwYXJhbWV0ZXJzKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpN
ZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMS4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIp
OworfQorCit2b2lkIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTEobG9u
ZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCit7CisjaWYgRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hl
cikgeworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZTEocmVxdWVz
dElkKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgIFJl
ZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9h
Z2VudC0+bG9hZFJlc291cmNlMShlcnJvcik7CisKKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQor
ICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZN
b3ZlKHJlc3VsdCksIGZhbHNlKTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBX
VEZNb3ZlKGVycm9yKSk7Cit9CisKK1JlZjxOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyPiBOZXR3
b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmRE
aXNwYXRjaGVyLCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCit7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5k
RGlzcGF0Y2hlciwgYWdlbnQpKTsKK30KKworTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6TmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNo
ZXIsIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKKyAgICA6IFN1cHBs
ZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQorICAgICwgbV9hZ2Vu
dChhZ2VudCkKK3sKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJG
b3JEb21haW4oIk5ldHdvcmszIl9zLCB0aGlzKTsKK30KKwordm9pZCBOZXR3b3JrM0JhY2tlbmRE
aXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2Qs
IFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKK3sKKyAgICBSZWY8TmV0d29yazNCYWNrZW5k
RGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CisKKyAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBw
YXJhbWV0ZXJzOworICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJz
KTsKKworICAgIHR5cGVkZWYgdm9pZCAoTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6KkNhbGxI
YW5kbGVyKShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKTsK
KyAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxlcj4gRGlzcGF0Y2hNYXA7Cisg
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPERpc3BhdGNoTWFwPiBkaXNwYXRjaE1hcDsKKyAgICBp
ZiAoZGlzcGF0Y2hNYXAuZ2V0KCkuaXNFbXB0eSgpKSB7CisgICAgICAgIHN0YXRpYyBjb25zdCBz
dHJ1Y3QgTWV0aG9kVGFibGUgeworICAgICAgICAgICAgY29uc3QgY2hhciogbmFtZTsKKyAgICAg
ICAgICAgIENhbGxIYW5kbGVyIGhhbmRsZXI7CisgICAgICAgIH0gY29tbWFuZHNbXSA9IHsKKyAg
ICAgICAgICAgIHsgImxvYWRSZXNvdXJjZTEiLCAmTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6
bG9hZFJlc291cmNlMSB9LAorICAgICAgICAgICAgeyAibG9hZFJlc291cmNlMiIsICZOZXR3b3Jr
M0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UyIH0sCisgICAgICAgICAgICB7ICJsb2Fk
UmVzb3VyY2UzIiwgJk5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTMgfSwK
KyAgICAgICAgICAgIHsgImxvYWRSZXNvdXJjZTQiLCAmTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hl
cjo6bG9hZFJlc291cmNlNCB9LAorICAgICAgICAgICAgeyAibG9hZFJlc291cmNlNSIsICZOZXR3
b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U1IH0sCisgICAgICAgICAgICB7ICJs
b2FkUmVzb3VyY2U2IiwgJk5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTYg
fSwKKyAgICAgICAgICAgIHsgImxvYWRSZXNvdXJjZTciLCAmTmV0d29yazNCYWNrZW5kRGlzcGF0
Y2hlcjo6bG9hZFJlc291cmNlNyB9LAorICAgICAgICB9OworICAgICAgICBzaXplX3QgbGVuZ3Ro
ID0gV1RGX0FSUkFZX0xFTkdUSChjb21tYW5kcyk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbGVuZ3RoOyArK2kpCisgICAgICAgICAgICBkaXNwYXRjaE1hcC5nZXQoKS5hZGQoY29t
bWFuZHNbaV0ubmFtZSwgY29tbWFuZHNbaV0uaGFuZGxlcik7CisgICAgfQorCisgICAgYXV0byBm
aW5kUmVzdWx0ID0gZGlzcGF0Y2hNYXAuZ2V0KCkuZmluZChtZXRob2QpOworICAgIGlmIChmaW5k
UmVzdWx0ID09IGRpc3BhdGNoTWFwLmdldCgpLmVuZCgpKSB7CisgICAgICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5v
dEZvdW5kLCAiJ05ldHdvcmszLiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICAoKCp0aGlzKS4qZmluZFJlc3VsdC0+dmFsdWUpKHJl
cXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7Cit9CisKK3ZvaWQgTmV0d29yazNCYWNrZW5k
RGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9i
amVjdD4mJikKK3sKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
KyAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlz
cGF0Y2hlci0+bG9hZFJlc291cmNlMShyZXF1ZXN0SWQpOworICAgICAgICByZXR1cm47CisgICAg
fQorI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCisg
ICAgRXJyb3JTdHJpbmcgZXJyb3I7CisgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2UxKGVycm9yKTsK
KworICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOworICAgIGVs
c2UKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNr
ZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKK30KKwordm9pZCBO
ZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UyKGxvbmcgcmVxdWVzdElkLCBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQoreworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQorICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKKyAgICAgICAg
bV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2UyKHJlcXVlc3RJZCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCisKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWY8SlNPTjo6T2JqZWN0
PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYWdlbnQtPmxvYWRSZXNv
dXJjZTIoZXJyb3IpOworCisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKKyAgICAgICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBm
YWxzZSk7CisgICAgZWxzZQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90
b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikp
OworfQorCit2b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTMobG9u
ZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCit7CisjaWYgRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hl
cikgeworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZTMocmVxdWVz
dElkKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgIFJl
ZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9h
Z2VudC0+bG9hZFJlc291cmNlMyhlcnJvcik7CisKKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQor
ICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZN
b3ZlKHJlc3VsdCksIGZhbHNlKTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBX
VEZNb3ZlKGVycm9yKSk7Cit9CisKK3ZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9h
ZFJlc291cmNlNChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKK3sKKyNp
ZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyAgICBpZiAobV9hbHRl
cm5hdGVEaXNwYXRjaGVyKSB7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJl
c291cmNlNChyZXF1ZXN0SWQpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmIC8vIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCisgICAgRXJyb3JTdHJpbmcg
ZXJyb3I7CisgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKKyAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2U0KGVycm9yKTsKKworICAgIGlmICghZXJy
b3IubGVuZ3RoKCkpCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShy
ZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOworICAgIGVsc2UKKyAgICAgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6
U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKK30KKwordm9pZCBOZXR3b3JrM0JhY2tlbmRE
aXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U1KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmKQoreworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQor
ICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNw
YXRjaGVyLT5sb2FkUmVzb3VyY2U1KHJlcXVlc3RJZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyAg
ICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTUoZXJyb3IpOwor
CisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+
c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7CisgICAgZWxz
ZQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tl
bmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOworfQorCit2b2lkIE5l
dHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTYobG9uZyByZXF1ZXN0SWQsIFJl
ZlB0cjxKU09OOjpPYmplY3Q+JiYpCit7CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCisgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeworICAgICAgICBt
X2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZTYocmVxdWVzdElkKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKKworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgIFJlZjxKU09OOjpPYmplY3Q+
IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9hZ2VudC0+bG9hZFJlc291
cmNlNihlcnJvcik7CisKKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQorICAgICAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZh
bHNlKTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3Rv
Y29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7
Cit9CisKK3ZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNyhsb25n
IHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKK3sKKyNpZiBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVy
KSB7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlNyhyZXF1ZXN0
SWQpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQorCisgICAgRXJyb3JTdHJpbmcgZXJyb3I7CisgICAgUmVm
PEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBtX2Fn
ZW50LT5sb2FkUmVzb3VyY2U3KGVycm9yKTsKKworICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCisg
ICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1v
dmUocmVzdWx0KSwgZmFsc2UpOworICAgIGVsc2UKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdU
Rk1vdmUoZXJyb3IpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQg
RmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RG
cm9udGVuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBk
b21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRlc3RQcm90
b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgRnJv
bnRlbmRSb3V0ZXI7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBU
ZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmRE
aXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5z
LXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEZyb250
ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZy
b250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmls
ZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xPYmplY3RzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5z
LXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgor
CituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKwor
CisKKworLy8gVHlwZWRlZnMuCituYW1lc3BhY2UgTmV0d29yazIgeworLyogVW5pcXVlIGxvYWRl
ciBpZGVudGlmaWVyLiAqLwordHlwZWRlZiBTdHJpbmcgTG9hZGVySWQ7Cit9IC8vIE5ldHdvcmsy
CisvLyBFbmQgb2YgdHlwZWRlZnMuCisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0
cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6
ZXMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisKKyNpbmNsdWRl
IDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVz
cGFjZSBJbnNwZWN0b3IgeworCituYW1lc3BhY2UgUHJvdG9jb2wgeworCisKKworfSAvLyBuYW1l
c3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
ZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIu
aD4KKworQHByb3RvY29sIFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcjsKK0Bwcm90
b2NvbCBUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkhhbmRsZXI7CisKK25hbWVzcGFjZSBJbnNw
ZWN0b3IgeworCisKK2NsYXNzIE9iakNJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVy
IGZpbmFsIDogcHVibGljIEFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIgeworICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIE9iakNJbnNwZWN0b3JOZXR3
b3JrMUJhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxl
cj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQorICAgIHZvaWQgbG9hZFJlc291
cmNlMShsb25nIHJlcXVlc3RJZCkgZmluYWw7Citwcml2YXRlOgorICAgIFJldGFpblB0cjxpZDxU
ZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOworfTsKKworY2xh
c3MgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMg
QWx0ZXJuYXRlTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlciB7CisgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CitwdWJsaWM6CisgICAgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3Bh
dGNoZXIoaWQ8VGVzdFByb3RvY29sTmV0d29yazNEb21haW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1f
ZGVsZWdhdGUgPSBoYW5kbGVyOyB9CisgICAgdm9pZCBsb2FkUmVzb3VyY2UxKGxvbmcgcmVxdWVz
dElkKSBmaW5hbDsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTIobG9uZyByZXF1ZXN0SWQpIGZpbmFs
OworICAgIHZvaWQgbG9hZFJlc291cmNlMyhsb25nIHJlcXVlc3RJZCkgZmluYWw7CisgICAgdm9p
ZCBsb2FkUmVzb3VyY2U0KGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKKyAgICB2b2lkIGxvYWRSZXNv
dXJjZTUobG9uZyByZXF1ZXN0SWQpIGZpbmFsOworICAgIHZvaWQgbG9hZFJlc291cmNlNihsb25n
IHJlcXVlc3RJZCkgZmluYWw7CisgICAgdm9pZCBsb2FkUmVzb3VyY2U3KGxvbmcgcmVxdWVzdElk
KSBmaW5hbDsKK3ByaXZhdGU6CisgICAgUmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbE5ldHdvcmsz
RG9tYWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisj
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1z
aXplcy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9y
dCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIK
KworI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW5jbHVkZSAiVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKK3ZvaWQgT2JqQ0luc3BlY3Rvck5ldHdvcmsxQmFja2VuZERp
c3BhdGNoZXI6OmxvYWRSZXNvdXJjZTEobG9uZyByZXF1ZXN0SWQpCit7CisgICAgaWYgKCFbbV9k
ZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGxvYWRSZXNvdXJjZTFXaXRoRXJy
b3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpN
ZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMS5sb2FkUmVzb3VyY2UxJyB3YXMgbm90IGZvdW5kIl9z
KTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5n
ICplcnJvcikgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVy
cm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7Cisg
ICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgfTsK
KworICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVy
KCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNl
KTsKKyAgICB9OworCisgICAgW21fZGVsZWdhdGUgbG9hZFJlc291cmNlMVdpdGhFcnJvckNhbGxi
YWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107Cit9CisK
K3ZvaWQgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJj
ZTEobG9uZyByZXF1ZXN0SWQpCit7CisgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2Vs
ZWN0b3I6QHNlbGVjdG9yKGxvYWRSZXNvdXJjZTFXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2Fs
bGJhY2s6KV0pIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xF
cnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3
b3JrMy5sb2FkUmVzb3VyY2UxJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgeworICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2Vu
ZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgfTsKKworICAgIGlkIHN1Y2Nlc3NDYWxs
YmFjayA9IF57CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1
ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKKyAgICB9OworCisgICAgW21f
ZGVsZWdhdGUgbG9hZFJlc291cmNlMVdpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3Vj
Y2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107Cit9CisKK3ZvaWQgT2JqQ0luc3BlY3Rvck5l
dHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTIobG9uZyByZXF1ZXN0SWQpCit7
CisgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGxvYWRS
ZXNvdXJjZTJXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsKKyAgICAgICAg
YmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tl
bmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMy5sb2FkUmVzb3VyY2UyJyB3
YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRp
bmdFcnJvcnMoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlkIGVycm9yQ2FsbGJh
Y2sgPSBeKE5TU3RyaW5nICplcnJvcikgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5y
ZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVy
cm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJy
b3JzKCk7CisgICAgfTsKKworICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57CisgICAgICAgIGJh
Y2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpTT046Ok9iamVjdDo6
Y3JlYXRlKCksIGZhbHNlKTsKKyAgICB9OworCisgICAgW21fZGVsZWdhdGUgbG9hZFJlc291cmNl
MldpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3ND
YWxsYmFja107Cit9CisKK3ZvaWQgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNo
ZXI6OmxvYWRSZXNvdXJjZTMobG9uZyByZXF1ZXN0SWQpCit7CisgICAgaWYgKCFbbV9kZWxlZ2F0
ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGxvYWRSZXNvdXJjZTNXaXRoRXJyb3JDYWxs
YmFjazpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2RO
b3RGb3VuZCwgIidOZXR3b3JrMy5sb2FkUmVzb3VyY2UzJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJv
cikgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJl
cXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgfTsKKworICAg
IGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNl
bmRSZXNwb25zZShyZXF1ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKKyAg
ICB9OworCisgICAgW21fZGVsZWdhdGUgbG9hZFJlc291cmNlM1dpdGhFcnJvckNhbGxiYWNrOmVy
cm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107Cit9CisKK3ZvaWQg
T2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTQobG9u
ZyByZXF1ZXN0SWQpCit7CisgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6
QHNlbGVjdG9yKGxvYWRSZXNvdXJjZTRXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6
KV0pIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihy
ZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMy5s
b2FkUmVzb3VyY2U0JyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgeworICAgICAgICBiYWNrZW5k
RGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3Bh
dGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCkt
PnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgfTsKKworICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9
IF57CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQs
IEpTT046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKKyAgICB9OworCisgICAgW21fZGVsZWdh
dGUgbG9hZFJlc291cmNlNFdpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0Nh
bGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107Cit9CisKK3ZvaWQgT2JqQ0luc3BlY3Rvck5ldHdvcmsz
QmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTUobG9uZyByZXF1ZXN0SWQpCit7CisgICAg
aWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGxvYWRSZXNvdXJj
ZTVXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsKKyAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNw
YXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMy5sb2FkUmVzb3VyY2U1JyB3YXMgbm90
IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJv
cnMoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBe
KE5TU3RyaW5nICplcnJvcikgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQ
cm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBl
cnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7
CisgICAgfTsKKworICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57CisgICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRl
KCksIGZhbHNlKTsKKyAgICB9OworCisgICAgW21fZGVsZWdhdGUgbG9hZFJlc291cmNlNVdpdGhF
cnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFj
a107Cit9CisKK3ZvaWQgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6Omxv
YWRSZXNvdXJjZTYobG9uZyByZXF1ZXN0SWQpCit7CisgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNw
b25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGxvYWRSZXNvdXJjZTZXaXRoRXJyb3JDYWxsYmFjazpz
dWNjZXNzQ2FsbGJhY2s6KV0pIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0
UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3Vu
ZCwgIidOZXR3b3JrMy5sb2FkUmVzb3VyY2U2JyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAg
YmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewor
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJ
ZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgfTsKKworICAgIGlkIHN1
Y2Nlc3NDYWxsYmFjayA9IF57CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNw
b25zZShyZXF1ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKKyAgICB9Owor
CisgICAgW21fZGVsZWdhdGUgbG9hZFJlc291cmNlNldpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2Fs
bGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107Cit9CisKK3ZvaWQgT2JqQ0lu
c3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTcobG9uZyByZXF1
ZXN0SWQpCit7CisgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVj
dG9yKGxvYWRSZXNvdXJjZTdXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsK
KyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0
SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMy5sb2FkUmVz
b3VyY2U3JyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlkIGVy
cm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgeworICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6
OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQ
ZW5kaW5nRXJyb3JzKCk7CisgICAgfTsKKworICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57Cisg
ICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpTT046
Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKKyAgICB9OworCisgICAgW21fZGVsZWdhdGUgbG9h
ZFJlc291cmNlN1dpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNr
OnN1Y2Nlc3NDYWxsYmFja107Cit9CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9y
L1Rlc3RQcm90b2NvbC5oPgorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIp
KSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0CitAcHJv
cGVydHkgKG5vbmF0b21pYywgcmV0YWluLCBzZXR0ZXI9c2V0TmV0d29yazFIYW5kbGVyOikgaWQ8
VGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyPiBuZXR3b3JrMUhhbmRsZXI7CitAcHJv
cGVydHkgKG5vbmF0b21pYywgcmV0YWluLCBzZXR0ZXI9c2V0TmV0d29yazNIYW5kbGVyOikgaWQ8
VGVzdFByb3RvY29sTmV0d29yazNEb21haW5IYW5kbGVyPiBuZXR3b3JrM0hhbmRsZXI7CitAZW5k
CisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJv
dG9jb2xDb25maWd1cmF0aW9uLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgi
CisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+CisjaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2lt
cG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+CisKK3Vz
aW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xD
b25maWd1cmF0aW9uCit7CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29u
dHJvbGxlcjsKKyAgICBpZDxUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+IF9uZXR3
b3JrMUhhbmRsZXI7CisgICAgaWQ8VGVzdFByb3RvY29sTmV0d29yazNEb21haW5IYW5kbGVyPiBf
bmV0d29yazNIYW5kbGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVy
OihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxm
ID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAg
ICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAg
IHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbX25ldHdvcmsxSGFu
ZGxlciByZWxlYXNlXTsKKyAgICBbX25ldHdvcmszSGFuZGxlciByZWxlYXNlXTsKKyAgICBbc3Vw
ZXIgZGVhbGxvY107Cit9CisKKy0gKHZvaWQpc2V0TmV0d29yazFIYW5kbGVyOihpZDxUZXN0UHJv
dG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+KWhhbmRsZXIKK3sKKyAgICBpZiAoaGFuZGxlciA9
PSBfbmV0d29yazFIYW5kbGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBbX25ldHdvcmsxSGFu
ZGxlciByZWxlYXNlXTsKKyAgICBfbmV0d29yazFIYW5kbGVyID0gW2hhbmRsZXIgcmV0YWluXTsK
KworICAgIGF1dG8gYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IG1ha2VVbmlxdWU8T2JqQ0luc3BlY3Rv
ck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI+KGhhbmRsZXIpOworICAgIGF1dG8gYWx0ZXJuYXRl
QWdlbnQgPSBtYWtlVW5pcXVlPEFsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50PE5ldHdvcmsxQmFj
a2VuZERpc3BhdGNoZXIsIEFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI+PigiTmV0
d29yazEiX3MsICpfY29udHJvbGxlciwgV1RGTW92ZShhbHRlcm5hdGVEaXNwYXRjaGVyKSk7Cisg
ICAgX2NvbnRyb2xsZXItPmFwcGVuZEV4dHJhQWdlbnQoV1RGTW92ZShhbHRlcm5hdGVBZ2VudCkp
OworfQorCistIChpZDxUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+KW5ldHdvcmsx
SGFuZGxlcgoreworICAgIHJldHVybiBfbmV0d29yazFIYW5kbGVyOworfQorCistICh2b2lkKXNl
dE5ldHdvcmszSGFuZGxlcjooaWQ8VGVzdFByb3RvY29sTmV0d29yazNEb21haW5IYW5kbGVyPilo
YW5kbGVyCit7CisgICAgaWYgKGhhbmRsZXIgPT0gX25ldHdvcmszSGFuZGxlcikKKyAgICAgICAg
cmV0dXJuOworCisgICAgW19uZXR3b3JrM0hhbmRsZXIgcmVsZWFzZV07CisgICAgX25ldHdvcmsz
SGFuZGxlciA9IFtoYW5kbGVyIHJldGFpbl07CisKKyAgICBhdXRvIGFsdGVybmF0ZURpc3BhdGNo
ZXIgPSBtYWtlVW5pcXVlPE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyPiho
YW5kbGVyKTsKKyAgICBhdXRvIGFsdGVybmF0ZUFnZW50ID0gbWFrZVVuaXF1ZTxBbHRlcm5hdGVE
aXNwYXRjaGFibGVBZ2VudDxOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyLCBBbHRlcm5hdGVOZXR3
b3JrM0JhY2tlbmREaXNwYXRjaGVyPj4oIk5ldHdvcmszIl9zLCAqX2NvbnRyb2xsZXIsIFdURk1v
dmUoYWx0ZXJuYXRlRGlzcGF0Y2hlcikpOworICAgIF9jb250cm9sbGVyLT5hcHBlbmRFeHRyYUFn
ZW50KFdURk1vdmUoYWx0ZXJuYXRlQWdlbnQpKTsKK30KKworLSAoaWQ8VGVzdFByb3RvY29sTmV0
d29yazNEb21haW5IYW5kbGVyPiluZXR3b3JrM0hhbmRsZXIKK3sKKyAgICByZXR1cm4gX25ldHdv
cmszSGFuZGxlcjsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29u
ZmlndXJhdGlvbi5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRj
aGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12
YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4K
KwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5o
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmct
Y29tbWFuZC1zaXplcy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKKyNpbXBvcnQgPFdlYkluc3Bl
Y3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KKworCisKKworCisKKworCitAcHJvdG9jb2wg
VGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyIDxOU09iamVjdD4KK0BvcHRpb25hbAor
LSAodm9pZClsb2FkUmVzb3VyY2UxV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcg
KmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKSh2b2lkKSlzdWNj
ZXNzQ2FsbGJhY2s7CitAZW5kCisKK0Bwcm90b2NvbCBUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFp
bkhhbmRsZXIgPE5TT2JqZWN0PgorQG9wdGlvbmFsCistICh2b2lkKWxvYWRSZXNvdXJjZTFXaXRo
RXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3Vj
Y2Vzc0NhbGxiYWNrOih2b2lkKF4pKHZvaWQpKXN1Y2Nlc3NDYWxsYmFjazsKKy0gKHZvaWQpbG9h
ZFJlc291cmNlMldpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJy
b3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikodm9pZCkpc3VjY2Vzc0NhbGxiYWNr
OworLSAodm9pZClsb2FkUmVzb3VyY2UzV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJp
bmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKSh2b2lkKSlz
dWNjZXNzQ2FsbGJhY2s7CistICh2b2lkKWxvYWRSZXNvdXJjZTRXaXRoRXJyb3JDYWxsYmFjazoo
dm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2
b2lkKF4pKHZvaWQpKXN1Y2Nlc3NDYWxsYmFjazsKKy0gKHZvaWQpbG9hZFJlc291cmNlNVdpdGhF
cnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNj
ZXNzQ2FsbGJhY2s6KHZvaWQoXikodm9pZCkpc3VjY2Vzc0NhbGxiYWNrOworLSAodm9pZClsb2Fk
UmVzb3VyY2U2V2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJv
ckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKSh2b2lkKSlzdWNjZXNzQ2FsbGJhY2s7
CistICh2b2lkKWxvYWRSZXNvdXJjZTdXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmlu
ZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKHZvaWQpKXN1
Y2Nlc3NDYWxsYmFjazsKK0BlbmQKKworCisKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVBy
b3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgorCisjIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFu
ZC1zaXplcy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lt
cG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJp
dmF0ZS5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250
cm9sbGVyLmg+CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCisKKworCisjIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9t
YWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0IDxX
ZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+CisKK25hbWVzcGFjZSBJ
bnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+CitPcHRpb25hbDxP
YmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKKwor
CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdp
dGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKwor
I2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2Vy
LmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5o
PgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW50ZXJmYWNlIFRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucyAoTmV0d29yazJEb21haW4pCisKKysgKHZvaWQpX3BhcnNlTG9hZGVy
SWQ6KE5TU3RyaW5nICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworCitAZW5k
CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKE5ldHdvcmsy
RG9tYWluKQorCisrICh2b2lkKV9wYXJzZUxvYWRlcklkOihOU1N0cmluZyAqKilvdXRWYWx1ZSBm
cm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZ
UEUocGF5bG9hZCwgW05TU3RyaW5nIGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gKE5TU3RyaW5n
ICopcGF5bG9hZDsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNv
bW1hbmQtc2l6ZXMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
KyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNP
Tk9iamVjdFByaXZhdGUuaD4KKyNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW1wb3J0IDx3
dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisKKworCisj
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZW51bS12YWx1ZXMu
anNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZXhwZWN0ZWQvZW51bS12YWx1ZXMuanNvbi1yZXN1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTE0ODMzOWJi
MjEwZmNjNzM4ZmRmOGE1Mzg4OWU2NTYyYmQxZGRjOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9lbnVtLXZh
bHVlcy5qc29uLXJlc3VsdApAQCAtMCwwICsxLDExODMgQEAKKyMjIyBCZWdpbiBGaWxlOiBJbnNw
ZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMuaW4KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBlbnVtLXZhbHVlcy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworLy8gVHlwZURvbWFpbgorSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiVHlw
ZURvbWFpbiIsIG51bGwpOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIlR5cGVEb21h
aW4uVHlwZURvbWFpbkVudW0iLCB7U2hhcmVkOiAic2hhcmVkIiwgUmVkOiAicmVkIiwgR3JlZW46
ICJncmVlbiIsIEJsdWU6ICJibHVlIn0pOworSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFp
bigiVHlwZURvbWFpbiIsIG51bGwpOworCisvLyBDb21tYW5kRG9tYWluCitJbnNwZWN0b3JCYWNr
ZW5kLnJlZ2lzdGVyRG9tYWluKCJDb21tYW5kRG9tYWluIiwgbnVsbCk7CitJbnNwZWN0b3JCYWNr
ZW5kLnJlZ2lzdGVyQ29tbWFuZCgiQ29tbWFuZERvbWFpbi5jb21tYW5kV2l0aEVudW1SZXR1cm5W
YWx1ZSIsIG51bGwsIFtdLCBbInJldHVyblZhbHVlIl0pOworSW5zcGVjdG9yQmFja2VuZC5hY3Rp
dmF0ZURvbWFpbigiQ29tbWFuZERvbWFpbiIsIG51bGwpOworCisvLyBFdmVudERvbWFpbgorSW5z
cGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiRXZlbnREb21haW4iLCBudWxsKTsKK0luc3Bl
Y3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJFdmVudERvbWFpbi5FdmVudFdpdGhFbnVtUGFyYW1l
dGVyUGFyYW1ldGVyIiwge1NoYXJlZDogInNoYXJlZCIsIEJsYWNrOiAiYmxhY2siLCBXaGl0ZTog
IndoaXRlIn0pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckV2ZW50KCJFdmVudERvbWFpbi5l
dmVudFdpdGhFbnVtUGFyYW1ldGVyIiwgbnVsbCwgWyJwYXJhbWV0ZXIiXSk7CitJbnNwZWN0b3JC
YWNrZW5kLnJlZ2lzdGVyRXZlbnREb21haW5EaXNwYXRjaGVyID0gSW5zcGVjdG9yQmFja2VuZC5y
ZWdpc3RlckRpc3BhdGNoZXIuYmluZChJbnNwZWN0b3JCYWNrZW5kLCAiRXZlbnREb21haW4iKTsK
K0luc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkV2ZW50RG9tYWluIiwgbnVsbCk7Cisj
IyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcy5pbgorCisjIyMgQmVnaW4g
RmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Cisj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsK
K3B1YmxpYzoKKyAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlz
cGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRp
c3BhdGNoZXIpOyB9CisgICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkg
Y29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQorcHJpdmF0ZToKKyAg
ICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Cit9OworCisK
K2NsYXNzIEFsdGVybmF0ZUNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+QWx0ZXJu
YXRlQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKCkgeyB9CisgICAgdmlydHVhbCB2b2lk
IGNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlKGxvbmcgY2FsbElkKSA9IDA7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQorIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
IlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgor
CituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisK
KyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK2NsYXNzIEFsdGVy
bmF0ZUNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcjsKKyNlbmRpZiAvLyBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworY2xhc3MgQ29tbWFuZERvbWFpbkJhY2tl
bmREaXNwYXRjaGVySGFuZGxlciB7CitwdWJsaWM6CisgICAgLy8gTmFtZWQgYWZ0ZXIgcGFyYW1l
dGVyICdyZXR1cm5WYWx1ZScgd2hpbGUgZ2VuZXJhdGluZyBjb21tYW5kL2V2ZW50IGNvbW1hbmRX
aXRoRW51bVJldHVyblZhbHVlLgorICAgIGVudW0gY2xhc3MgUmV0dXJuVmFsdWUgeworICAgICAg
ICBTaGFyZWQgPSAwLAorICAgICAgICBDeWFuID0gNiwKKyAgICAgICAgTWFnZW50YSA9IDcsCisg
ICAgICAgIFllbGxvdyA9IDgsCisgICAgfTsgLy8gZW51bSBjbGFzcyBSZXR1cm5WYWx1ZQorICAg
IHZpcnR1YWwgdm9pZCBjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShFcnJvclN0cmluZyYsIENv
bW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlJldHVyblZhbHVlKiBvdXRfcmV0
dXJuVmFsdWUpID0gMDsKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5Db21tYW5kRG9tYWluQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7Cit9OworCitjbGFzcyBDb21tYW5kRG9tYWluQmFja2Vu
ZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIg
eworcHVibGljOgorICAgIHN0YXRpYyBSZWY8Q29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVy
PiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyKik7CisgICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3Ry
aW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkgZmluYWw7Citwcml2YXRl
OgorICAgIHZvaWQgY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUobG9uZyByZXF1ZXN0SWQsIFJl
ZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCitwdWJsaWM6CisgICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNw
YXRjaGVyKEFsdGVybmF0ZUNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRl
RGlzcGF0Y2hlcikgeyBtX2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVy
OyB9Citwcml2YXRlOgorICAgIEFsdGVybmF0ZUNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hl
ciogbV9hbHRlcm5hdGVEaXNwYXRjaGVyIHsgbnVsbHB0ciB9OworI2VuZGlmIC8vIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorcHJpdmF0ZToKKyAgICBDb21tYW5kRG9t
YWluQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImLCBDb21tYW5kRG9tYWluQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRj
aGVySGFuZGxlciogbV9hZ2VudCB7IG51bGxwdHIgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0QmFja2Vu
ZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9u
dGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3Rm
L05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCisjaWYg
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjaW5jbHVkZSAiVGVzdEFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgorI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworQ29tbWFu
ZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6fkNvbW1hbmREb21haW5CYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXIoKSB7IH0KKworUmVmPENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hl
cj4gQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoQmFja2VuZERpc3BhdGNo
ZXImIGJhY2tlbmREaXNwYXRjaGVyLCBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyKiBhZ2VudCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDb21tYW5kRG9tYWluQmFj
a2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIsIGFnZW50KSk7Cit9CisKK0NvbW1hbmRE
b21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKEJh
Y2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgQ29tbWFuZERvbWFpbkJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlciogYWdlbnQpCisgICAgOiBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0
Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKKyAgICAsIG1fYWdlbnQoYWdlbnQpCit7CisgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKCJDb21tYW5kRG9t
YWluIl9zLCB0aGlzKTsKK30KKwordm9pZCBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI6
OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046
Ok9iamVjdD4mJiBtZXNzYWdlKQoreworICAgIFJlZjxDb21tYW5kRG9tYWluQmFja2VuZERpc3Bh
dGNoZXI+IHByb3RlY3QoKnRoaXMpOworCisgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1l
dGVyczsKKyAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFyYW1ldGVycyk7CisK
KyAgICBpZiAobWV0aG9kID09ICJjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZSIpIHsKKyAgICAg
ICAgY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRl
cnMpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAi
J0NvbW1hbmREb21haW4uIiArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKK30KKwordm9p
ZCBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmNvbW1hbmRXaXRoRW51bVJldHVyblZh
bHVlKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQoreworI2lmIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorICAgIGlmIChtX2FsdGVybmF0ZURp
c3BhdGNoZXIpIHsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5jb21tYW5kV2l0aEVu
dW1SZXR1cm5WYWx1ZShyZXF1ZXN0SWQpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlm
IC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCisgICAgRXJyb3JT
dHJpbmcgZXJyb3I7CisgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKTsKKyAgICBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpS
ZXR1cm5WYWx1ZSBvdXRfcmV0dXJuVmFsdWU7CisgICAgbV9hZ2VudC0+Y29tbWFuZFdpdGhFbnVt
UmV0dXJuVmFsdWUoZXJyb3IsICZvdXRfcmV0dXJuVmFsdWUpOworCisgICAgaWYgKCFlcnJvci5s
ZW5ndGgoKSkKKyAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInJldHVyblZhbHVlIl9zLCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUob3V0X3Jl
dHVyblZhbHVlKSk7CisKKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQorICAgICAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZh
bHNlKTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3Rv
Y29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNr
ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRj
aGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNv
biBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFs
dWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNw
ZWN0b3IgeworCitjbGFzcyBGcm9udGVuZFJvdXRlcjsKKworY2xhc3MgRXZlbnREb21haW5Gcm9u
dGVuZERpc3BhdGNoZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgor
ICAgIEV2ZW50RG9tYWluRnJvbnRlbmREaXNwYXRjaGVyKEZyb250ZW5kUm91dGVyJiBmcm9udGVu
ZFJvdXRlcikgOiBtX2Zyb250ZW5kUm91dGVyKGZyb250ZW5kUm91dGVyKSB7IH0KKyAgICAgICAg
Ly8gTmFtZWQgYWZ0ZXIgcGFyYW1ldGVyICdwYXJhbWV0ZXInIHdoaWxlIGdlbmVyYXRpbmcgY29t
bWFuZC9ldmVudCBldmVudFdpdGhFbnVtUGFyYW1ldGVyLgorICAgICAgICBlbnVtIGNsYXNzIFBh
cmFtZXRlciB7CisgICAgICAgICAgICBTaGFyZWQgPSAwLAorICAgICAgICAgICAgQmxhY2sgPSA0
LAorICAgICAgICAgICAgV2hpdGUgPSA1LAorICAgICAgICB9OyAvLyBlbnVtIGNsYXNzIFBhcmFt
ZXRlcgorICAgIHZvaWQgZXZlbnRXaXRoRW51bVBhcmFtZXRlcihQYXJhbWV0ZXIgcGFyYW1ldGVy
KTsKK3ByaXZhdGU6CisgICAgRnJvbnRlbmRSb3V0ZXImIG1fZnJvbnRlbmRSb3V0ZXI7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlz
cGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3Bw
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbiBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit2b2lkIEV2ZW50RG9tYWluRnJv
bnRlbmREaXNwYXRjaGVyOjpldmVudFdpdGhFbnVtUGFyYW1ldGVyKFBhcmFtZXRlciBwYXJhbWV0
ZXIpCit7CisgICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOworICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkV2ZW50
RG9tYWluLmV2ZW50V2l0aEVudW1QYXJhbWV0ZXIiX3MpOworICAgIFJlZjxKU09OOjpPYmplY3Q+
IHBhcmFtc09iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgcGFyYW1zT2JqZWN0
LT5zZXRTdHJpbmcoInBhcmFtZXRlciJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBl
cnM6OmdldEVudW1Db25zdGFudFZhbHVlKHBhcmFtZXRlcikpOworICAgIGpzb25NZXNzYWdlLT5z
ZXRPYmplY3QoInBhcmFtcyJfcywgV1RGTW92ZShwYXJhbXNPYmplY3QpKTsKKworICAgIG1fZnJv
bnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERp
c3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbiBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgorI2luY2x1ZGUgPHd0
Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNl
IFByb3RvY29sIHsKKworCisKKy8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgorbmFtZXNwYWNlIFR5
cGVEb21haW4geworZW51bSBjbGFzcyBUeXBlRG9tYWluRW51bTsKK30gLy8gVHlwZURvbWFpbgor
Ly8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgorCisKKworCituYW1lc3BhY2UgVGVzdEhl
bHBlcnMgeworCitTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpOworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFsdWUp
Cit7CisgICAgcmV0dXJuIGdldEVudW1Db25zdGFudFZhbHVlKHN0YXRpY19jYXN0PGludD4oZW51
bVZhbHVlKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCisKK25hbWVzcGFjZSBU
eXBlRG9tYWluIHsKKworZW51bSBjbGFzcyBUeXBlRG9tYWluRW51bSB7CisgICAgU2hhcmVkID0g
MCwKKyAgICBSZWQgPSAxLAorICAgIEdyZWVuID0gMiwKKyAgICBCbHVlID0gMywKK307IC8vIGVu
dW0gY2xhc3MgVHlwZURvbWFpbkVudW0KKworfSAvLyBUeXBlRG9tYWluCisKKworCituYW1lc3Bh
Y2UgVGVzdEhlbHBlcnMgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBQcm90b2NvbEVudW1UeXBlPgor
T3B0aW9uYWw8UHJvdG9jb2xFbnVtVHlwZT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nKGNvbnN0
IFN0cmluZyYpOworCisvLyBFbnVtcyBpbiB0aGUgJ1R5cGVEb21haW4nIERvbWFpbgordGVtcGxh
dGU8PgorT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFp
bkVudW0+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpUeXBl
RG9tYWluOjpUeXBlRG9tYWluRW51bT4oY29uc3QgU3RyaW5nJik7CisKK30gLy8gbmFtZXNwYWNl
IFRlc3RIZWxwZXJzCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3Ry
dWN0IERlZmF1bHRIYXNoOworCisvLyBIYXNoIGRlY2xhcmF0aW9ucyBpbiB0aGUgJ1R5cGVEb21h
aW4nIERvbWFpbgordGVtcGxhdGU8Pgorc3RydWN0IERlZmF1bHRIYXNoPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlR5cGVEb21haW46OlR5cGVEb21haW5FbnVtPiB7CisgICAgdHlwZWRlZiBJbnRIYXNo
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46OlR5cGVEb21haW5FbnVtPiBIYXNoOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVj
dHMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKworI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK25h
bWVzcGFjZSBQcm90b2NvbCB7CisKK25hbWVzcGFjZSBUZXN0SGVscGVycyB7CisKK3N0YXRpYyBj
b25zdCBjaGFyKiBjb25zdCBlbnVtX2NvbnN0YW50X3ZhbHVlc1tdID0geworICAgICJzaGFyZWQi
LAorICAgICJyZWQiLAorICAgICJncmVlbiIsCisgICAgImJsdWUiLAorICAgICJibGFjayIsCisg
ICAgIndoaXRlIiwKKyAgICAiY3lhbiIsCisgICAgIm1hZ2VudGEiLAorICAgICJ5ZWxsb3ciLAor
fTsKKworU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CisgICAgcmV0dXJu
IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvZGVdOworfQorCisvLyBFbnVtcyBpbiB0aGUgJ1R5cGVE
b21haW4nIERvbWFpbgorCit0ZW1wbGF0ZTw+CitPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29s
OjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51bT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46OlR5cGVEb21haW5FbnVtPihjb25zdCBTdHJp
bmcmIHByb3RvY29sU3RyaW5nKQoreworICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3RhbnRW
YWx1ZXNbXSA9IHsKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9t
YWluOjpUeXBlRG9tYWluRW51bTo6U2hhcmVkLAorICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6
UHJvdG9jb2w6OlR5cGVEb21haW46OlR5cGVEb21haW5FbnVtOjpSZWQsCisgICAgICAgIChzaXpl
X3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW06OkdyZWVu
LAorICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46OlR5cGVE
b21haW5FbnVtOjpCbHVlLAorICAgIH07CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCA0OyAr
K2kpCisgICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tj
b25zdGFudFZhbHVlc1tpXV0pCisgICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlR5cGVEb21haW46OlR5cGVEb21haW5FbnVtKWNvbnN0YW50VmFsdWVzW2ldOworCisgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKworfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKKwor
CisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgor
CisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisKKyMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRl
QmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCitAcHJv
dG9jb2wgVGVzdFByb3RvY29sQ29tbWFuZERvbWFpbkRvbWFpbkhhbmRsZXI7CisKK25hbWVzcGFj
ZSBJbnNwZWN0b3IgeworCisKK2NsYXNzIE9iakNJbnNwZWN0b3JDb21tYW5kRG9tYWluQmFja2Vu
ZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJuYXRlQ29tbWFuZERvbWFpbkJhY2tlbmRE
aXNwYXRjaGVyIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBP
YmpDSW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2Nv
bENvbW1hbmREb21haW5Eb21haW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5k
bGVyOyB9CisgICAgdm9pZCBjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShsb25nIHJlcXVlc3RJ
ZCkgZmluYWw7Citwcml2YXRlOgorICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xDb21tYW5k
RG9tYWluRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMu
aAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbiBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2lt
cG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlICJUZXN0
UHJvdG9jb2xJbnRlcm5hbC5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Ig
eworCit2b2lkIE9iakNJbnNwZWN0b3JDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmNv
bW1hbmRXaXRoRW51bVJldHVyblZhbHVlKGxvbmcgcmVxdWVzdElkKQoreworICAgIGlmICghW21f
ZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihjb21tYW5kV2l0aEVudW1SZXR1
cm5WYWx1ZVdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgeworICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2Vu
ZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0NvbW1hbmREb21haW4uY29tbWFuZFdpdGhF
bnVtUmV0dXJuVmFsdWUnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7CisgICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlz
cGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICB9OworCisgICAgaWQgc3VjY2Vzc0NhbGxiYWNr
ID0gXihUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluQ29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWVS
ZXR1cm5WYWx1ZSByZXR1cm5WYWx1ZSkgeworICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1
bHRPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICByZXN1bHRPYmplY3Qt
PnNldFN0cmluZygicmV0dXJuVmFsdWUiX3MsIHRvUHJvdG9jb2xTdHJpbmcocmV0dXJuVmFsdWUp
KTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwg
V1RGTW92ZShyZXN1bHRPYmplY3QpLCBmYWxzZSk7CisgICAgfTsKKworICAgIFttX2RlbGVnYXRl
IGNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFj
ayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJz
Lm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQ
cm90b2NvbC5oPgorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0Bp
bnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0CitAcHJvcGVydHkg
KG5vbmF0b21pYywgcmV0YWluLCBzZXR0ZXI9c2V0Q29tbWFuZERvbWFpbkhhbmRsZXI6KSBpZDxU
ZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluRG9tYWluSGFuZGxlcj4gY29tbWFuZERvbWFpbkhhbmRs
ZXI7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFRlc3RQcm90b2NvbEV2ZW50RG9t
YWluRG9tYWluRXZlbnREaXNwYXRjaGVyICpldmVudERvbWFpbkV2ZW50RGlzcGF0Y2hlcjsKK0Bl
bmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorCisjIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgi
CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9j
b2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0
ZURpc3BhdGNoYWJsZUFnZW50Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJs
ZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0
b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCit7CisgICAg
QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKKyAgICBpZDxUZXN0
UHJvdG9jb2xDb21tYW5kRG9tYWluRG9tYWluSGFuZGxlcj4gX2NvbW1hbmREb21haW5IYW5kbGVy
OworICAgIFRlc3RQcm90b2NvbEV2ZW50RG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyICpfZXZl
bnREb21haW5FdmVudERpc3BhdGNoZXI7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENv
bnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgorewor
ICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4g
bmlsOworICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xs
ZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIFtfY29t
bWFuZERvbWFpbkhhbmRsZXIgcmVsZWFzZV07CisgICAgW19ldmVudERvbWFpbkV2ZW50RGlzcGF0
Y2hlciByZWxlYXNlXTsKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0gKHZvaWQpc2V0Q29t
bWFuZERvbWFpbkhhbmRsZXI6KGlkPFRlc3RQcm90b2NvbENvbW1hbmREb21haW5Eb21haW5IYW5k
bGVyPiloYW5kbGVyCit7CisgICAgaWYgKGhhbmRsZXIgPT0gX2NvbW1hbmREb21haW5IYW5kbGVy
KQorICAgICAgICByZXR1cm47CisKKyAgICBbX2NvbW1hbmREb21haW5IYW5kbGVyIHJlbGVhc2Vd
OworICAgIF9jb21tYW5kRG9tYWluSGFuZGxlciA9IFtoYW5kbGVyIHJldGFpbl07CisKKyAgICBh
dXRvIGFsdGVybmF0ZURpc3BhdGNoZXIgPSBtYWtlVW5pcXVlPE9iakNJbnNwZWN0b3JDb21tYW5k
RG9tYWluQmFja2VuZERpc3BhdGNoZXI+KGhhbmRsZXIpOworICAgIGF1dG8gYWx0ZXJuYXRlQWdl
bnQgPSBtYWtlVW5pcXVlPEFsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50PENvbW1hbmREb21haW5C
YWNrZW5kRGlzcGF0Y2hlciwgQWx0ZXJuYXRlQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVy
Pj4oIkNvbW1hbmREb21haW4iX3MsICpfY29udHJvbGxlciwgV1RGTW92ZShhbHRlcm5hdGVEaXNw
YXRjaGVyKSk7CisgICAgX2NvbnRyb2xsZXItPmFwcGVuZEV4dHJhQWdlbnQoV1RGTW92ZShhbHRl
cm5hdGVBZ2VudCkpOworfQorCistIChpZDxUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluRG9tYWlu
SGFuZGxlcj4pY29tbWFuZERvbWFpbkhhbmRsZXIKK3sKKyAgICByZXR1cm4gX2NvbW1hbmREb21h
aW5IYW5kbGVyOworfQorCistIChUZXN0UHJvdG9jb2xFdmVudERvbWFpbkRvbWFpbkV2ZW50RGlz
cGF0Y2hlciAqKWV2ZW50RG9tYWluRXZlbnREaXNwYXRjaGVyCit7CisgICAgaWYgKCFfZXZlbnRE
b21haW5FdmVudERpc3BhdGNoZXIpCisgICAgICAgIF9ldmVudERvbWFpbkV2ZW50RGlzcGF0Y2hl
ciA9IFtbVGVzdFByb3RvY29sRXZlbnREb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgYWxsb2Nd
IGluaXRXaXRoQ29udHJvbGxlcjpfY29udHJvbGxlcl07CisgICAgcmV0dXJuIF9ldmVudERvbWFp
bkV2ZW50RGlzcGF0Y2hlcjsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sQ29uZmlndXJhdGlvbi5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnRE
aXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFs
dWVzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0
ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMuaCIKKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFj
ZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xFdmVudERvbWFpbkRv
bWFpbkV2ZW50RGlzcGF0Y2hlcgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxl
ciogX2NvbnRyb2xsZXI7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6
KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgoreworICAgIHNlbGYg
PSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAg
IEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAg
cmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZXZlbnRXaXRoRW51bVBhcmFtZXRlcldpdGhQYXJh
bWV0ZXI6KFRlc3RQcm90b2NvbEV2ZW50RG9tYWluRXZlbnRXaXRoRW51bVBhcmFtZXRlclBhcmFt
ZXRlcilwYXJhbWV0ZXIKK3sKKyAgICBjb25zdCBGcm9udGVuZFJvdXRlciYgcm91dGVyID0gX2Nv
bnRyb2xsZXItPmZyb250ZW5kUm91dGVyKCk7CisKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29u
TWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAganNvbk1lc3NhZ2UtPnNldFN0
cmluZygibWV0aG9kIl9zLCAiRXZlbnREb21haW4uZXZlbnRXaXRoRW51bVBhcmFtZXRlciJfcyk7
CisgICAgUmVmPEpTT046Ok9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKKyAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygicGFyYW1ldGVyIl9zLCB0b1Byb3Rv
Y29sU3RyaW5nKHBhcmFtZXRlcikpOworICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoInBhcmFt
cyJfcywgV1RGTW92ZShwYXJhbXNPYmplY3QpKTsKKyAgICByb3V0ZXIuc2VuZEV2ZW50KGpzb25N
ZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNv
biBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPEZvdW5k
YXRpb24vRm91bmRhdGlvbi5oPgorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xK
U09OT2JqZWN0Lmg+CisKKworCisKK3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90
b2NvbFR5cGVEb21haW5FbnVtKSB7CisgICAgVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1TaGFy
ZWQsCisgICAgVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1SZWQsCisgICAgVGVzdFByb3RvY29s
VHlwZURvbWFpbkVudW1HcmVlbiwKKyAgICBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bUJsdWUs
Cit9OworCisKKworQHByb3RvY29sIFRlc3RQcm90b2NvbENvbW1hbmREb21haW5Eb21haW5IYW5k
bGVyIDxOU09iamVjdD4KK0BvcHRpb25hbAorLSAodm9pZCljb21tYW5kV2l0aEVudW1SZXR1cm5W
YWx1ZVdpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxs
YmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoVGVzdFByb3RvY29sQ29tbWFuZERvbWFpbkNv
bW1hbmRXaXRoRW51bVJldHVyblZhbHVlUmV0dXJuVmFsdWUgcmV0dXJuVmFsdWUpKXN1Y2Nlc3ND
YWxsYmFjazsKK0BlbmQKKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkp
CitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbEV2ZW50RG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVy
IDogTlNPYmplY3QKKy0gKHZvaWQpZXZlbnRXaXRoRW51bVBhcmFtZXRlcldpdGhQYXJhbWV0ZXI6
KFRlc3RQcm90b2NvbEV2ZW50RG9tYWluRXZlbnRXaXRoRW51bVBhcmFtZXRlclBhcmFtZXRlcilw
YXJhbWV0ZXI7CitAZW5kCisKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVp
bGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5o
CisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAi
VGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1
ZXMuaD4KKworQGludGVyZmFjZSBUZXN0UHJvdG9jb2xFdmVudERvbWFpbkRvbWFpbkV2ZW50RGlz
cGF0Y2hlciAoUHJpdmF0ZSkKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KElu
c3BlY3Rvcjo6QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyOworQGVu
ZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorCisjIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0IDxXZWJJbnNw
ZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0
b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+CitPcHRpb25hbDxPYmpDRW51
bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKKworaW5saW5l
IFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtIHZhbHVl
KQoreworICAgIHN3aXRjaCh2YWx1ZSkgeworICAgIGNhc2UgVGVzdFByb3RvY29sVHlwZURvbWFp
bkVudW1TaGFyZWQ6CisgICAgICAgIHJldHVybiAic2hhcmVkIl9zOworICAgIGNhc2UgVGVzdFBy
b3RvY29sVHlwZURvbWFpbkVudW1SZWQ6CisgICAgICAgIHJldHVybiAicmVkIl9zOworICAgIGNh
c2UgVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1HcmVlbjoKKyAgICAgICAgcmV0dXJuICJncmVl
biJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtQmx1ZToKKyAgICAgICAg
cmV0dXJuICJibHVlIl9zOworICAgIH0KK30KKwordGVtcGxhdGU8PgoraW5saW5lIE9wdGlvbmFs
PFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gInNoYXJlZCIpCisgICAgICAgIHJldHVy
biBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bVNoYXJlZDsKKyAgICBpZiAodmFsdWUgPT0gInJl
ZCIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bVJlZDsKKyAgICBp
ZiAodmFsdWUgPT0gImdyZWVuIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFR5cGVEb21h
aW5FbnVtR3JlZW47CisgICAgaWYgKHZhbHVlID09ICJibHVlIikKKyAgICAgICAgcmV0dXJuIFRl
c3RQcm90b2NvbFR5cGVEb21haW5FbnVtQmx1ZTsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
fQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1
ZXMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wu
aCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKKyNpbXBvcnQgPFdlYkluc3Bl
Y3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJ
bnNwZWN0b3I7CisKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChUeXBl
RG9tYWluRG9tYWluKQorCisrICh2b2lkKV9wYXJzZVR5cGVEb21haW5FbnVtOihOU051bWJlciAq
KilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKworQGVuZAorCitAaW1wbGVtZW50
YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChUeXBlRG9tYWluRG9tYWluKQorCisr
ICh2b2lkKV9wYXJzZVR5cGVEb21haW5FbnVtOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5
bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5
bG9hZCwgW05TU3RyaW5nIGNsYXNzXSk7CisgICAgT3B0aW9uYWw8VGVzdFByb3RvY29sVHlwZURv
bWFpbkVudW0+IHJlc3VsdCA9IEluc3BlY3Rvcjo6ZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90
b2NvbFR5cGVEb21haW5FbnVtPihwYXlsb2FkKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JB
RF9FTlVNX1ZBTFVFKHJlc3VsdCwgQCJUeXBlRG9tYWluRW51bSIpOworICAgICpvdXRWYWx1ZSA9
IEAocmVzdWx0LnZhbHVlKCkpOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5
cGVzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNv
biBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQ
cm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUu
aD4KKyNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5o
PgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisKKworCisjIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1k
b21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGlu
Zy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1yZXN1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjQ0MWVhMWIx
MzQ2M2ExZDM4OTQyNTM2MzE4NTY0NjkwMjZiMmU0NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9ldmVudC10
YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJlc3VsdApAQCAt
MCwwICsxLDEwMTEgQEAKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMu
anMuaW4KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudC10YXJnZXRUeXBl
LW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworLy8gRG9tYWluCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVy
RG9tYWluKCJEb21haW4iLCBudWxsKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5k
KCJEb21haW4uQ29tbWFuZCIsIG51bGwsIFtdLCBbXSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lz
dGVyRXZlbnQoIkRvbWFpbi5FdmVudCIsIFsicGFnZSIsICJ3b3JrZXIiXSwgW10pOworSW5zcGVj
dG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbkRpc3BhdGNoZXIgPSBJbnNwZWN0b3JCYWNrZW5kLnJl
Z2lzdGVyRGlzcGF0Y2hlci5iaW5kKEluc3BlY3RvckJhY2tlbmQsICJEb21haW4iKTsKK0luc3Bl
Y3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkRvbWFpbiIsIFsicGFnZSJdKTsKKyMjIyBFbmQg
RmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzLmluCisKKyMjIyBCZWdpbiBGaWxlOiBU
ZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlw
ZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBv
bmNlCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JGcm9udGVuZFJvdXRlci5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3Mg
QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHZvaWQgc2V0QmFja2Vu
ZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9i
YWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KKyAgICBCYWNrZW5kRGlz
cGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNw
YXRjaGVyLmdldCgpOyB9Citwcml2YXRlOgorICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4g
bV9iYWNrZW5kRGlzcGF0Y2hlcjsKK307CisKKworY2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFja2Vu
ZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVibGlj
OgorICAgIHZpcnR1YWwgfkFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKCkgeyB9Cisg
ICAgdmlydHVhbCB2b2lkIENvbW1hbmQobG9uZyBjYWxsSWQpID0gMDsKK307CisKK30gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCisjIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hl
cnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21h
aW4tZGVidWdnYWJsZVR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Igewor
Cit0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQorY2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNo
ZXI7CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisK
K2NsYXNzIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CitwdWJsaWM6CisgICAgdmly
dHVhbCB2b2lkIENvbW1hbmQoRXJyb3JTdHJpbmcmKSA9IDA7Citwcm90ZWN0ZWQ6CisgICAgdmly
dHVhbCB+RG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7Cit9OworCitjbGFzcyBEb21h
aW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlz
cGF0Y2hlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hl
cj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyKik7CisgICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBt
ZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkgZmluYWw7Citwcml2YXRlOgorICAg
IHZvaWQgQ29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJh
bWV0ZXJzKTsKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK3B1
YmxpYzoKKyAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlRG9tYWluQmFj
a2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRj
aGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQorcHJpdmF0ZToKKyAgICBBbHRlcm5hdGVEb21h
aW5CYWNrZW5kRGlzcGF0Y2hlciogbV9hbHRlcm5hdGVEaXNwYXRjaGVyIHsgbnVsbHB0ciB9Owor
I2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorcHJpdmF0
ZToKKyAgICBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYsIERvbWFp
bkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIERvbWFpbkJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlciogbV9hZ2VudCB7IG51bGxwdHIgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5
cGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUg
PHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCisjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVy
cy5oIgorI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQor
CituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
Ojp+RG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9CisKK1JlZjxEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlcj4gRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShCYWNrZW5kRGlz
cGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxl
ciogYWdlbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRG9tYWluQmFja2VuZERpc3Bh
dGNoZXIoYmFja2VuZERpc3BhdGNoZXIsIGFnZW50KSk7Cit9CisKK0RvbWFpbkJhY2tlbmREaXNw
YXRjaGVyOjpEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2Vu
ZERpc3BhdGNoZXIsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCisgICAg
OiBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKKyAgICAs
IG1fYWdlbnQoYWdlbnQpCit7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNw
YXRjaGVyRm9yRG9tYWluKCJEb21haW4iX3MsIHRoaXMpOworfQorCit2b2lkIERvbWFpbkJhY2tl
bmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRo
b2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKK3sKKyAgICBSZWY8RG9tYWluQmFja2Vu
ZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOworCisgICAgUmVmUHRyPEpTT046Ok9iamVjdD4g
cGFyYW1ldGVyczsKKyAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFyYW1ldGVy
cyk7CisKKyAgICBpZiAobWV0aG9kID09ICJDb21tYW5kIikgeworICAgICAgICBDb21tYW5kKHJl
cXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNw
YXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uIiArIG1ldGhvZCArICInIHdhcyBub3Qg
Zm91bmQiKTsKK30KKwordm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25n
IHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKK3sKKyNpZiBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVy
KSB7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+Q29tbWFuZChyZXF1ZXN0SWQpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQorCisgICAgRXJyb3JTdHJpbmcgZXJyb3I7CisgICAgUmVmPEpTT046
Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBtX2FnZW50LT5D
b21tYW5kKGVycm9yKTsKKworICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCisgICAgICAgIG1fYmFj
a2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwg
ZmFsc2UpOworICAgIGVsc2UKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJv
dG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3Ip
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEJh
Y2tlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3Bh
dGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudC10YXJnZXRU
eXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJv
dG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEZy
b250ZW5kUm91dGVyOworCitjbGFzcyBEb21haW5Gcm9udGVuZERpc3BhdGNoZXIgeworICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIERvbWFpbkZyb250ZW5kRGlzcGF0
Y2hlcihGcm9udGVuZFJvdXRlciYgZnJvbnRlbmRSb3V0ZXIpIDogbV9mcm9udGVuZFJvdXRlcihm
cm9udGVuZFJvdXRlcikgeyB9CisgICAgdm9pZCBFdmVudCgpOworcHJpdmF0ZToKKyAgICBGcm9u
dGVuZFJvdXRlciYgbV9mcm9udGVuZFJvdXRlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxl
VHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCisKKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3ZvaWQg
RG9tYWluRnJvbnRlbmREaXNwYXRjaGVyOjpFdmVudCgpCit7CisgICAgUmVmPEpTT046Ok9iamVj
dD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGpzb25NZXNzYWdl
LT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7CisKKyAgICBtX2Zyb250
ZW5kUm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworfQorCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNw
YXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmct
ZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvclByb3RvY29sVHlwZXMuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1l
c3BhY2UgSW5zcGVjdG9yIHsKKworCisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKworCisKKwor
CisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisKKyMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorCisjaW5jbHVkZSA8d3RmL09w
dGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5z
cGVjdG9yIHsKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworCisKK30gLy8gbmFtZXNwYWNlIFBy
b3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbE9iamVjdHMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5k
RGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRh
cmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8d3RmL1JldGFp
blB0ci5oPgorCitAcHJvdG9jb2wgVGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcjsKKwor
bmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworY2xhc3MgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tl
bmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRj
aGVyIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBPYmpDSW5z
cGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWlu
SGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQorICAgIHZvaWQgQ29t
bWFuZChsb25nIHJlcXVlc3RJZCkgZmluYWw7Citwcml2YXRlOgorICAgIFJldGFpblB0cjxpZDxU
ZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKK307CisKK30gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmRE
aXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0
Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudC10YXJnZXRU
eXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0
UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbElu
dGVybmFsLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW5j
bHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3ZvaWQg
T2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVz
dElkKQoreworICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rv
cihDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7CisgICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNr
ZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRG9tYWluLkNvbW1hbmQnIHdhcyBub3Qg
Zm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9y
cygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4o
TlNTdHJpbmcgKmVycm9yKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFBy
b3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVy
cm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsK
KyAgICB9OworCisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKKyAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KSwgZmFsc2UpOworICAgIH07CisKKyAgICBbbV9kZWxlZ2F0ZSBDb21tYW5kV2l0aEVycm9yQ2Fs
bGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKK30K
KworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
QmFja2VuZERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25m
aWd1cmF0aW9uLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudC10YXJn
ZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90
b2NvbC5oPgorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRl
cmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0CitAcHJvcGVydHkgKG5v
bmF0b21pYywgcmV0YWluLCBzZXR0ZXI9c2V0RG9tYWluSGFuZGxlcjopIGlkPFRlc3RQcm90b2Nv
bERvbWFpbkRvbWFpbkhhbmRsZXI+IGRvbWFpbkhhbmRsZXI7CitAcHJvcGVydHkgKG5vbmF0b21p
YywgcmVhZG9ubHkpIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqZG9t
YWluRXZlbnREaXNwYXRjaGVyOworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbi5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0
aW9uLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0VHlw
ZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24u
aCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbXBvcnQgIlRlc3RQcm90
b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJu
YXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRh
YmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3Bl
Y3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KK3sKKyAg
ICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworICAgIGlkPFRl
c3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IF9kb21haW5IYW5kbGVyOworICAgIFRlc3RQ
cm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqX2RvbWFpbkV2ZW50RGlzcGF0Y2hl
cjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJ
bnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0
XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNvbnRy
b2xsZXIpOworICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKKyAgICByZXR1cm4gc2VsZjsK
K30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgW19kb21haW5IYW5kbGVyIHJlbGVhc2VdOwor
ICAgIFtfZG9tYWluRXZlbnREaXNwYXRjaGVyIHJlbGVhc2VdOworICAgIFtzdXBlciBkZWFsbG9j
XTsKK30KKworLSAodm9pZClzZXREb21haW5IYW5kbGVyOihpZDxUZXN0UHJvdG9jb2xEb21haW5E
b21haW5IYW5kbGVyPiloYW5kbGVyCit7CisgICAgaWYgKGhhbmRsZXIgPT0gX2RvbWFpbkhhbmRs
ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIFtfZG9tYWluSGFuZGxlciByZWxlYXNlXTsKKyAg
ICBfZG9tYWluSGFuZGxlciA9IFtoYW5kbGVyIHJldGFpbl07CisKKyAgICBhdXRvIGFsdGVybmF0
ZURpc3BhdGNoZXIgPSBtYWtlVW5pcXVlPE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0
Y2hlcj4oaGFuZGxlcik7CisgICAgYXV0byBhbHRlcm5hdGVBZ2VudCA9IG1ha2VVbmlxdWU8QWx0
ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8RG9tYWluQmFja2VuZERpc3BhdGNoZXIsIEFsdGVybmF0
ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyPj4oIkRvbWFpbiJfcywgKl9jb250cm9sbGVyLCBXVEZN
b3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIpKTsKKyAgICBfY29udHJvbGxlci0+YXBwZW5kRXh0cmFB
Z2VudChXVEZNb3ZlKGFsdGVybmF0ZUFnZW50KSk7Cit9CisKKy0gKGlkPFRlc3RQcm90b2NvbERv
bWFpbkRvbWFpbkhhbmRsZXI+KWRvbWFpbkhhbmRsZXIKK3sKKyAgICByZXR1cm4gX2RvbWFpbkhh
bmRsZXI7Cit9CisKKy0gKFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAq
KWRvbWFpbkV2ZW50RGlzcGF0Y2hlcgoreworICAgIGlmICghX2RvbWFpbkV2ZW50RGlzcGF0Y2hl
cikKKyAgICAgICAgX2RvbWFpbkV2ZW50RGlzcGF0Y2hlciA9IFtbVGVzdFByb3RvY29sRG9tYWlu
RG9tYWluRXZlbnREaXNwYXRjaGVyIGFsbG9jXSBpbml0V2l0aENvbnRyb2xsZXI6X2NvbnRyb2xs
ZXJdOworICAgIHJldHVybiBfZG9tYWluRXZlbnREaXNwYXRjaGVyOworfQorCitAZW5kCisKKwor
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJs
ZVR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBv
cnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucy5oIgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNw
YWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbERvbWFpbkRvbWFp
bkV2ZW50RGlzcGF0Y2hlcgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciog
X2NvbnRyb2xsZXI7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1
Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgoreworICAgIHNlbGYgPSBb
c3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIEFT
U0VSVChjb250cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAgcmV0
dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpRXZlbnQKK3sKKyAgICBjb25zdCBGcm9udGVuZFJvdXRl
ciYgcm91dGVyID0gX2NvbnRyb2xsZXItPmZyb250ZW5kUm91dGVyKCk7CisKKyAgICBSZWY8SlNP
Tjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAganNv
bk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9zKTsKKyAgICBy
b3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cit9CisKK0BlbmQK
KworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNv
biBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPEZvdW5k
YXRpb24vRm91bmRhdGlvbi5oPgorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xK
U09OT2JqZWN0Lmg+CisKKworCisKKworCisKKworQHByb3RvY29sIFRlc3RQcm90b2NvbERvbWFp
bkRvbWFpbkhhbmRsZXIgPE5TT2JqZWN0PgorQG9wdGlvbmFsCistICh2b2lkKUNvbW1hbmRXaXRo
RXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3Vj
Y2Vzc0NhbGxiYWNrOih2b2lkKF4pKHZvaWQpKXN1Y2Nlc3NDYWxsYmFjazsKK0BlbmQKKworX19h
dHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90
b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciA6IE5TT2JqZWN0CistICh2b2lkKUV2ZW50
OworQGVuZAorCisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0
aWJpbGl0eU9iamVjdHMuaD4KKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAorCisjIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVU
eXBlLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0
ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRl
LmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xs
ZXIuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK0BpbnRlcmZhY2UgVGVzdFByb3Rv
Y29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyIChQcml2YXRlKQorLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoQ29udHJvbGxlcjooSW5zcGVjdG9yOjpBdWdtZW50YWJsZUluc3BlY3RvckNvbnRy
b2xsZXIqKWNvbnRyb2xsZXI7CitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJ
bnRlcm5hbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMu
aAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRhcmdldFR5cGUtbWF0
Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgPFdlYklu
c3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KKworbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KK09wdGlvbmFsPE9iakNF
bnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOworCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
Lm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1t
YXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5o
IgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQ
YXJzZXIuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2
YXRlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworCisKKworCisjIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorCisjIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sVHlwZXMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBl
dmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29s
SW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisj
aW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorI2lt
cG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3Vz
aW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xU
eXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbi1y
ZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uLXJlc3VsdApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5iODk0M2UwOTQ5ZDZhN2NjZmJhOTQ1NzVhOTc1YjhlZTg2MmVjMDVkCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4
cGVjdGVkL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQKQEAgLTAs
MCArMSwxMTYzIEBACisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpz
LmluCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9u
YWwtcGFyYW1ldGVycy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworLy8gRGF0YWJhc2UKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIkRhdGFiYXNl
IiwgbnVsbCk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnQoIkRhdGFiYXNlLmRpZEV4
ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMiLCBudWxsLCBbImNvbHVtbk5hbWVzIiwgIm5vdGVzIiwg
InRpbWVzdGFtcCIsICJ2YWx1ZXMiLCAicGF5bG9hZCIsICJzcWxFcnJvciIsICJzY3JlZW5Db2xv
ciIsICJhbHRlcm5hdGVDb2xvcnMiLCAicHJpbnRDb2xvciJdKTsKK0luc3BlY3RvckJhY2tlbmQu
cmVnaXN0ZXJFdmVudCgiRGF0YWJhc2UuZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIiwg
bnVsbCwgWyJjb2x1bW5OYW1lcyIsICJub3RlcyIsICJ0aW1lc3RhbXAiLCAidmFsdWVzIiwgInBh
eWxvYWQiLCAic3FsRXJyb3IiLCAic2NyZWVuQ29sb3IiLCAiYWx0ZXJuYXRlQ29sb3JzIiwgInBy
aW50Q29sb3IiXSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRGF0YWJhc2VEaXNwYXRjaGVy
ID0gSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRpc3BhdGNoZXIuYmluZChJbnNwZWN0b3JCYWNr
ZW5kLCAiRGF0YWJhc2UiKTsKK0luc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkRhdGFi
YXNlIiwgbnVsbCk7CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcy5p
bgorCisjIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFy
YW1ldGVycy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3By
YWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
KworI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwor
Y2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHZvaWQgc2V0
QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIp
IHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KKyAgICBCYWNr
ZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tl
bmREaXNwYXRjaGVyLmdldCgpOyB9Citwcml2YXRlOgorICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0
Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKK307CisKKworCisKK30gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCisjIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisj
IyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3Ry
aW5nOworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1v
cHRpb25hbC1wYXJhbWV0ZXJzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0
ZXIuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRl
c3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCit9IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNw
cAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMu
anNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPHd0Zi9KU09O
VmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJ
bnNwZWN0b3IgeworCitjbGFzcyBGcm9udGVuZFJvdXRlcjsKKworY2xhc3MgRGF0YWJhc2VGcm9u
dGVuZERpc3BhdGNoZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgor
ICAgIERhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyKEZyb250ZW5kUm91dGVyJiBmcm9udGVuZFJv
dXRlcikgOiBtX2Zyb250ZW5kUm91dGVyKGZyb250ZW5kUm91dGVyKSB7IH0KKyAgICB2b2lkIGRp
ZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMoUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4g
Y29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyogbm90ZXMsIGNvbnN0IGRvdWJsZSogdGltZXN0YW1w
LCBSZWZQdHI8SlNPTjo6T2JqZWN0PiB2YWx1ZXMsIFJlZlB0cjxKU09OOjpWYWx1ZT4gcGF5bG9h
ZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gc3FsRXJyb3Is
IGNvbnN0IFN0cmluZyogc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpE
YXRhYmFzZTo6Q29sb3JMaXN0PiBhbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyogcHJpbnRD
b2xvcik7CisgICAgdm9pZCBkaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMoUmVmUHRyPEpT
T046OkFycmF5T2Y8U3RyaW5nPj4gY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgbm90ZXMsIGRv
dWJsZSB0aW1lc3RhbXAsIFJlZlB0cjxKU09OOjpPYmplY3Q+IHZhbHVlcywgUmVmUHRyPEpTT046
OlZhbHVlPiBwYXlsb2FkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVy
cm9yPiBzcWxFcnJvciwgY29uc3QgU3RyaW5nJiBzY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IGFsdGVybmF0ZUNvbG9ycywgY29uc3Qg
U3RyaW5nJiBwcmludENvbG9yKTsKK3ByaXZhdGU6CisgICAgRnJvbnRlbmRSb3V0ZXImIG1fZnJv
bnRlbmRSb3V0ZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmls
ZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250
ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZl
bnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RGcm9u
dGVuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JG
cm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNw
YWNlIEluc3BlY3RvciB7CisKK3ZvaWQgRGF0YWJhc2VGcm9udGVuZERpc3BhdGNoZXI6OmRpZEV4
ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMoUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gY29s
dW1uTmFtZXMsIGNvbnN0IFN0cmluZyogbm90ZXMsIGNvbnN0IGRvdWJsZSogdGltZXN0YW1wLCBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiB2YWx1ZXMsIFJlZlB0cjxKU09OOjpWYWx1ZT4gcGF5bG9hZCwg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gc3FsRXJyb3IsIGNv
bnN0IFN0cmluZyogc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6Q29sb3JMaXN0PiBhbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyogcHJpbnRDb2xv
cikKK3sKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6
Y3JlYXRlKCk7CisgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRGF0YWJh
c2UuZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyJfcyk7CisgICAgUmVmPEpTT046Ok9iamVj
dD4gcGFyYW1zT2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBpZiAoY29sdW1u
TmFtZXMpCisgICAgICAgIHBhcmFtc09iamVjdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBj
b2x1bW5OYW1lcyk7CisgICAgaWYgKG5vdGVzKQorICAgICAgICBwYXJhbXNPYmplY3QtPnNldFN0
cmluZygibm90ZXMiX3MsICpub3Rlcyk7CisgICAgaWYgKHRpbWVzdGFtcCkKKyAgICAgICAgcGFy
YW1zT2JqZWN0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgKnRpbWVzdGFtcCk7CisgICAgaWYg
KHZhbHVlcykKKyAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgdmFs
dWVzKTsKKyAgICBpZiAocGF5bG9hZCkKKyAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRWYWx1ZSgi
cGF5bG9hZCJfcywgKnBheWxvYWQpOworICAgIGlmIChzcWxFcnJvcikKKyAgICAgICAgcGFyYW1z
T2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBzcWxFcnJvcik7CisgICAgaWYgKHNjcmVl
bkNvbG9yKQorICAgICAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3Ms
ICpzY3JlZW5Db2xvcik7CisgICAgaWYgKGFsdGVybmF0ZUNvbG9ycykKKyAgICAgICAgcGFyYW1z
T2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCBhbHRlcm5hdGVDb2xvcnMpOwor
ICAgIGlmIChwcmludENvbG9yKQorICAgICAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygicHJp
bnRDb2xvciJfcywgKnByaW50Q29sb3IpOworICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoInBh
cmFtcyJfcywgV1RGTW92ZShwYXJhbXNPYmplY3QpKTsKKworICAgIG1fZnJvbnRlbmRSb3V0ZXIu
c2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cit9CisKK3ZvaWQgRGF0YWJh
c2VGcm9udGVuZERpc3BhdGNoZXI6OmRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhSZWZQ
dHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBub3Rl
cywgZG91YmxlIHRpbWVzdGFtcCwgUmVmUHRyPEpTT046Ok9iamVjdD4gdmFsdWVzLCBSZWZQdHI8
SlNPTjo6VmFsdWU+IHBheWxvYWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFz
ZTo6RXJyb3I+IHNxbEVycm9yLCBjb25zdCBTdHJpbmcmIHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4gYWx0ZXJuYXRlQ29sb3JzLCBj
b25zdCBTdHJpbmcmIHByaW50Q29sb3IpCit7CisgICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1l
c3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGpzb25NZXNzYWdlLT5zZXRTdHJp
bmcoIm1ldGhvZCJfcywgIkRhdGFiYXNlLmRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyJf
cyk7CisgICAgUmVmPEpTT046Ok9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKTsKKyAgICBwYXJhbXNPYmplY3QtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgY29s
dW1uTmFtZXMpOworICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJub3RlcyJfcywgbm90ZXMp
OworICAgIHBhcmFtc09iamVjdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIHRpbWVzdGFtcCk7
CisgICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgdmFsdWVzKTsKKyAgICBw
YXJhbXNPYmplY3QtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBwYXlsb2FkKTsKKyAgICBwYXJhbXNP
YmplY3QtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIHNxbEVycm9yKTsKKyAgICBwYXJhbXNPYmpl
Y3QtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsIHNjcmVlbkNvbG9yKTsKKyAgICBwYXJhbXNP
YmplY3QtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIGFsdGVybmF0ZUNvbG9ycyk7Cisg
ICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsIHByaW50Q29sb3IpOwor
ICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyJfcywgV1RGTW92ZShwYXJhbXNPYmpl
Y3QpKTsKKworICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pT
T05TdHJpbmcoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZp
bGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sT2JqZWN0cy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRz
LXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKwor
bmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCituYW1lc3BhY2UgUHJvdG9jb2wgeworCisKKwor
Ly8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCituYW1lc3BhY2UgRGF0YWJhc2UgeworY2xhc3MgRXJy
b3I7Cit9IC8vIERhdGFiYXNlCisvLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCisKKwor
Ly8gVHlwZWRlZnMuCituYW1lc3BhY2UgRGF0YWJhc2UgeworLyogVW5pcXVlIGlkZW50aWZpZXIg
b2YgRGF0YWJhc2Ugb2JqZWN0LiAqLwordHlwZWRlZiBTdHJpbmcgRGF0YWJhc2VJZDsKK3R5cGVk
ZWYgU3RyaW5nIFByaW1hcnlDb2xvcnM7Cit0eXBlZGVmIEpTT046OkFycmF5T2Y8U3RyaW5nPiBD
b2xvckxpc3Q7Cit9IC8vIERhdGFiYXNlCisvLyBFbmQgb2YgdHlwZWRlZnMuCisKK25hbWVzcGFj
ZSBEYXRhYmFzZSB7CisKKy8qIERhdGFiYXNlIGVycm9yLiAqLworY2xhc3MgRXJyb3IgOiBwdWJs
aWMgSlNPTjo6T2JqZWN0QmFzZSB7CitwdWJsaWM6CisgICAgZW51bSB7CisgICAgICAgIE5vRmll
bGRzU2V0ID0gMCwKKyAgICAgICAgTWVzc2FnZVNldCA9IDEgPDwgMCwKKyAgICAgICAgQ29kZVNl
dCA9IDEgPDwgMSwKKyAgICAgICAgQWxsRmllbGRzU2V0ID0gKE1lc3NhZ2VTZXQgfCBDb2RlU2V0
KQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CisgICAgY2xhc3MgQnVpbGRlciB7
CisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7CisK
KyAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0
YXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1
aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRl
cihSZWY8LypFcnJvciovSlNPTjo6T2JqZWN0PiYmIG9iamVjdCkKKyAgICAgICAgICAgIDogbV9y
ZXN1bHQoV1RGTW92ZShvYmplY3QpKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FT
U0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0
YXRlKTsKKyAgICAgICAgfQorICAgICAgICBmcmllbmQgY2xhc3MgRXJyb3I7CisgICAgcHVibGlj
OgorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2FnZShjb25z
dCBTdHJpbmcmIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgTWVzc2FnZVNldCksIHByb3BlcnR5X21lc3NhZ2VfYWxyZWFkeV9zZXQpOworICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibWVzc2FnZSJfcywgdmFsdWUpOworICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNZXNzYWdlU2V0PigpOworICAgICAgICB9CisKKyAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IENvZGVTZXQ+JiBzZXRDb2RlKGludCB2YWx1ZSkKKyAgICAgICAg
eworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENvZGVTZXQpLCBwcm9wZXJ0
eV9jb2RlX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2VyKCJj
b2RlIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvZGVTZXQ+KCk7
CisgICAgICAgIH0KKworICAgICAgICBSZWY8RXJyb3I+IHJlbGVhc2UoKQorICAgICAgICB7Cisg
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9p
c19ub3RfcmVhZHkpOworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEVycm9yKSA9
PSBzaXplb2YoSlNPTjo6T2JqZWN0KSwgY2Fubm90X2Nhc3QpOworCisgICAgICAgICAgICBSZWY8
SlNPTjo6T2JqZWN0PiBqc29uUmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKKyAg
ICAgICAgICAgIGF1dG8gcmVzdWx0ID0gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8RXJy
b3I+Kj4oJmpzb25SZXN1bHQpKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAg
IH0KKyAgICB9OworCisgICAgLyoKKyAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CisgICAg
ICogUmVmPEVycm9yPiByZXN1bHQgPSBFcnJvcjo6Y3JlYXRlKCkKKyAgICAgKiAgICAgLnNldE1l
c3NhZ2UoLi4uKQorICAgICAqICAgICAuc2V0Q29kZSguLi4pCisgICAgICogICAgIC5yZWxlYXNl
KCk7CisgICAgICovCisgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCisg
ICAgeworICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKSk7CisgICAgfQorfTsKKworfSAvLyBEYXRhYmFzZQorCisKKworfSAvLyBuYW1lc3Bh
Y2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbE9iamVjdHMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0
cy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRp
b25hbC1wYXJhbWV0ZXJzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5o
IgorCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKwor
CisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgor
CisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisKKyMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbiBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbmNsdWRlIDx3dGYv
UmV0YWluUHRyLmg+CisKKworCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCit9IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0
Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJz
Lm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9u
YWwtcGFyYW1ldGVycy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0
Y2hlcnMuaCIKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW5jbHVkZSAi
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMu
aD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgor
CisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorCisjIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8V2ViSW5zcGVj
dG9yL1Rlc3RQcm90b2NvbC5oPgorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVs
dCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0CitA
cHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWlu
RXZlbnREaXNwYXRjaGVyICpkYXRhYmFzZUV2ZW50RGlzcGF0Y2hlcjsKK0BlbmQKKworCisjIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorCisjIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbiBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3Vy
YXRpb24uaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbXBvcnQgIlRl
c3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1
Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKwordXNpbmcgbmFtZXNwYWNl
IEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24K
K3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworICAg
IFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluRXZlbnREaXNwYXRjaGVyICpfZGF0YWJhc2VFdmVu
dERpc3BhdGNoZXI7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1
Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgoreworICAgIHNlbGYgPSBb
c3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIEFT
U0VSVChjb250cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAgcmV0
dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIFtfZGF0YWJhc2VFdmVudERp
c3BhdGNoZXIgcmVsZWFzZV07CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistIChUZXN0UHJv
dG9jb2xEYXRhYmFzZURvbWFpbkV2ZW50RGlzcGF0Y2hlciAqKWRhdGFiYXNlRXZlbnREaXNwYXRj
aGVyCit7CisgICAgaWYgKCFfZGF0YWJhc2VFdmVudERpc3BhdGNoZXIpCisgICAgICAgIF9kYXRh
YmFzZUV2ZW50RGlzcGF0Y2hlciA9IFtbVGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5FdmVudERp
c3BhdGNoZXIgYWxsb2NdIGluaXRXaXRoQ29udHJvbGxlcjpfY29udHJvbGxlcl07CisgICAgcmV0
dXJuIF9kYXRhYmFzZUV2ZW50RGlzcGF0Y2hlcjsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbiBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgi
CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8d3Rm
L0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVu
dGF0aW9uIFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluRXZlbnREaXNwYXRjaGVyCit7CisgICAg
QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKK30KKworLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9s
bGVyKiljb250cm9sbGVyCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNl
bGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9j
b250cm9sbGVyID0gY29udHJvbGxlcjsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClk
aWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzV2l0aENvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNT
dHJpbmc+Ki8gKiopY29sdW1uTmFtZXMgbm90ZXM6KE5TU3RyaW5nICoqKW5vdGVzIHRpbWVzdGFt
cDooZG91YmxlICopdGltZXN0YW1wIHZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqKXZh
bHVlcyBwYXlsb2FkOihSV0lQcm90b2NvbEpTT05PYmplY3QgKiopcGF5bG9hZCBzcWxFcnJvcjoo
VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKilzcWxFcnJvciBzY3JlZW5Db2xvcjooTlNTdHJp
bmcgKiopc2NyZWVuQ29sb3IgYWx0ZXJuYXRlQ29sb3JzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8g
KiopYWx0ZXJuYXRlQ29sb3JzIHByaW50Q29sb3I6KE5TU3RyaW5nICoqKXByaW50Q29sb3IKK3sK
KyAgICBjb25zdCBGcm9udGVuZFJvdXRlciYgcm91dGVyID0gX2NvbnRyb2xsZXItPmZyb250ZW5k
Um91dGVyKCk7CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVU
RVIoY29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9S
X0JBRF9PUFRJT05BTF9QQVJBTUVURVIobm90ZXMsIEAibm90ZXMiKTsKKyAgICBUSFJPV19FWENF
UFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIodmFsdWVzLCBAInZhbHVlcyIpOworICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihwYXlsb2FkLCBAInBh
eWxvYWQiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIo
c3FsRXJyb3IsIEAic3FsRXJyb3IiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJ
T05BTF9QQVJBTUVURVIoc2NyZWVuQ29sb3IsIEAic2NyZWVuQ29sb3IiKTsKKyAgICBUSFJPV19F
WENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoYWx0ZXJuYXRlQ29sb3JzLCBAImFs
dGVybmF0ZUNvbG9ycyIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BB
UkFNRVRFUihwcmludENvbG9yLCBAInByaW50Q29sb3IiKTsKKworICAgIFJlZjxKU09OOjpPYmpl
Y3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBqc29uTWVzc2Fn
ZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEYXRhYmFzZS5kaWRFeGVjdXRlT3B0aW9uYWxQYXJh
bWV0ZXJzIl9zKTsKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiBwYXJhbXNPYmplY3QgPSBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpOworICAgIGlmIChjb2x1bW5OYW1lcykKKyAgICAgICAgcGFyYW1zT2Jq
ZWN0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KCgqY29sdW1u
TmFtZXMpKSk7CisgICAgaWYgKG5vdGVzKQorICAgICAgICBwYXJhbXNPYmplY3QtPnNldFN0cmlu
Zygibm90ZXMiX3MsICgqbm90ZXMpKTsKKyAgICBpZiAodGltZXN0YW1wKQorICAgICAgICBwYXJh
bXNPYmplY3QtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCAoKnRpbWVzdGFtcCkpOworICAgIGlm
ICh2YWx1ZXMpCisgICAgICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFso
KnZhbHVlcykgdG9KU09OT2JqZWN0XSk7CisgICAgaWYgKHBheWxvYWQpCisgICAgICAgIHBhcmFt
c09iamVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFsoKnBheWxvYWQpIHRvSlNPTk9iamVjdF0p
OworICAgIGlmIChzcWxFcnJvcikKKyAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoInNx
bEVycm9yIl9zLCBbKCpzcWxFcnJvcikgdG9KU09OT2JqZWN0XSk7CisgICAgaWYgKHNjcmVlbkNv
bG9yKQorICAgICAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsICgq
c2NyZWVuQ29sb3IpKTsKKyAgICBpZiAoYWx0ZXJuYXRlQ29sb3JzKQorICAgICAgICBwYXJhbXNP
YmplY3QtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KCgq
YWx0ZXJuYXRlQ29sb3JzKSkpOworICAgIGlmIChwcmludENvbG9yKQorICAgICAgICBwYXJhbXNP
YmplY3QtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgKCpwcmludENvbG9yKSk7CisgICAganNv
bk1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIl9zLCBXVEZNb3ZlKHBhcmFtc09iamVjdCkpOwor
ICAgIHJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKK30KKwor
LSAodm9pZClkaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNXaXRoQ29sdW1uTmFtZXM6KE5T
QXJyYXkvKjxOU1N0cmluZz4qLyAqKWNvbHVtbk5hbWVzIG5vdGVzOihOU1N0cmluZyAqKW5vdGVz
IHRpbWVzdGFtcDooZG91YmxlKXRpbWVzdGFtcCB2YWx1ZXM6KFJXSVByb3RvY29sSlNPTk9iamVj
dCAqKXZhbHVlcyBwYXlsb2FkOihSV0lQcm90b2NvbEpTT05PYmplY3QgKilwYXlsb2FkIHNxbEVy
cm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICopc3FsRXJyb3Igc2NyZWVuQ29sb3I6KE5T
U3RyaW5nICopc2NyZWVuQ29sb3IgYWx0ZXJuYXRlQ29sb3JzOihOU0FycmF5Lyo8TlNTdHJpbmc+
Ki8gKilhbHRlcm5hdGVDb2xvcnMgcHJpbnRDb2xvcjooTlNTdHJpbmcgKilwcmludENvbG9yCit7
CisgICAgY29uc3QgRnJvbnRlbmRSb3V0ZXImIHJvdXRlciA9IF9jb250cm9sbGVyLT5mcm9udGVu
ZFJvdXRlcigpOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIo
Y29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JF
UVVJUkVEX1BBUkFNRVRFUihub3RlcywgQCJub3RlcyIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfUkVRVUlSRURfUEFSQU1FVEVSKHZhbHVlcywgQCJ2YWx1ZXMiKTsKKyAgICBUSFJPV19FWENF
UFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihwYXlsb2FkLCBAInBheWxvYWQiKTsKKyAgICBU
SFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihzcWxFcnJvciwgQCJzcWxFcnJv
ciIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHNjcmVlbkNv
bG9yLCBAInNjcmVlbkNvbG9yIik7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9Q
QVJBTUVURVIoYWx0ZXJuYXRlQ29sb3JzLCBAImFsdGVybmF0ZUNvbG9ycyIpOworICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHByaW50Q29sb3IsIEAicHJpbnRDb2xv
ciIpOworCisgICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOworICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRhdGFi
YXNlLmRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyJfcyk7CisgICAgUmVmPEpTT046Ok9i
amVjdD4gcGFyYW1zT2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwYXJhbXNP
YmplY3QtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgdG9KU09OU3RyaW5nQXJyYXkoY29sdW1u
TmFtZXMpKTsKKyAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygibm90ZXMiX3MsIG5vdGVzKTsK
KyAgICBwYXJhbXNPYmplY3QtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCB0aW1lc3RhbXApOwor
ICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFt2YWx1ZXMgdG9KU09OT2Jq
ZWN0XSk7CisgICAgcGFyYW1zT2JqZWN0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgW3BheWxvYWQg
dG9KU09OT2JqZWN0XSk7CisgICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9z
LCBbc3FsRXJyb3IgdG9KU09OT2JqZWN0XSk7CisgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmco
InNjcmVlbkNvbG9yIl9zLCBzY3JlZW5Db2xvcik7CisgICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJh
eSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCB0b0pTT05TdHJpbmdBcnJheShhbHRlcm5hdGVDb2xvcnMp
KTsKKyAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgcHJpbnRDb2xv
cik7CisgICAganNvbk1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIl9zLCBXVEZNb3ZlKHBhcmFt
c09iamVjdCkpOworICAgIHJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmlu
ZygpKTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNw
YXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpz
b24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxGb3Vu
ZGF0aW9uL0ZvdW5kYXRpb24uaD4KKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29s
SlNPTk9iamVjdC5oPgorCisKK0BjbGFzcyBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yOworCisK
KworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRl
c3RQcm90b2NvbERhdGFiYXNlRXJyb3IgOiBSV0lQcm90b2NvbEpTT05PYmplY3QKKy0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilw
YXlsb2FkOworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3Rv
Y29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhNZXNz
YWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZTooaW50KWNvZGU7CisvKiByZXF1aXJlZCAqLyBA
cHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKm1lc3NhZ2U7CisvKiByZXF1aXJl
ZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQgY29kZTsKK0BlbmQKKworCisK
K19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0
UHJvdG9jb2xEYXRhYmFzZURvbWFpbkV2ZW50RGlzcGF0Y2hlciA6IE5TT2JqZWN0CistICh2b2lk
KWRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnNXaXRoQ29sdW1uTmFtZXM6KE5TQXJyYXkvKjxO
U1N0cmluZz4qLyAqKiljb2x1bW5OYW1lcyBub3RlczooTlNTdHJpbmcgKiopbm90ZXMgdGltZXN0
YW1wOihkb3VibGUgKil0aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKiop
dmFsdWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKilwYXlsb2FkIHNxbEVycm9y
OihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqKXNxbEVycm9yIHNjcmVlbkNvbG9yOihOU1N0
cmluZyAqKilzY3JlZW5Db2xvciBhbHRlcm5hdGVDb2xvcnM6KE5TQXJyYXkvKjxOU1N0cmluZz4q
LyAqKilhbHRlcm5hdGVDb2xvcnMgcHJpbnRDb2xvcjooTlNTdHJpbmcgKiopcHJpbnRDb2xvcjsK
Ky0gKHZvaWQpZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzV2l0aENvbHVtbk5hbWVzOihO
U0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcyBub3RlczooTlNTdHJpbmcgKilub3Rl
cyB0aW1lc3RhbXA6KGRvdWJsZSl0aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmpl
Y3QgKil2YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZCBzcWxF
cnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKXNxbEVycm9yIHNjcmVlbkNvbG9yOihO
U1N0cmluZyAqKXNjcmVlbkNvbG9yIGFsdGVybmF0ZUNvbG9yczooTlNBcnJheS8qPE5TU3RyaW5n
PiovICopYWx0ZXJuYXRlQ29sb3JzIHByaW50Q29sb3I6KE5TU3RyaW5nICopcHJpbnRDb2xvcjsK
K0BlbmQKKworCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGli
aWxpdHlPYmplY3RzLmg+CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIK
KyNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCisjaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPHd0
Zi9KU09OVmFsdWVzLmg+CisKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5F
dmVudERpc3BhdGNoZXIgKFByaXZhdGUpCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9s
bGVyOihJbnNwZWN0b3I6OkF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxl
cjsKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29u
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFBy
b3RvY29sLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNp
b25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpD
RW51bVR5cGU+CitPcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25z
dCBTdHJpbmcmIHZhbHVlKTsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisKKyMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0
UHJvdG9jb2xUeXBlUGFyc2VyLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xK
U09OT2JqZWN0UHJpdmF0ZS5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW50
ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoRGF0YWJhc2VEb21haW4pCisKKysg
KHZvaWQpX3BhcnNlRGF0YWJhc2VJZDooTlNTdHJpbmcgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6
KGlkKXBheWxvYWQ7CisrICh2b2lkKV9wYXJzZVByaW1hcnlDb2xvcnM6KE5TU3RyaW5nICoqKW91
dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworKyAodm9pZClfcGFyc2VDb2xvckxpc3Q6
KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9h
ZDsKKysgKHZvaWQpX3BhcnNlRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKiopb3V0
VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9u
IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoRGF0YWJhc2VEb21haW4pCisKKysgKHZvaWQp
X3BhcnNlRGF0YWJhc2VJZDooTlNTdHJpbmcgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBh
eWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0
cmluZyBjbGFzc10pOworICAgICpvdXRWYWx1ZSA9IChOU1N0cmluZyAqKXBheWxvYWQ7Cit9CisK
KysgKHZvaWQpX3BhcnNlUHJpbWFyeUNvbG9yczooTlNTdHJpbmcgKiopb3V0VmFsdWUgZnJvbVBh
eWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBh
eWxvYWQsIFtOU1N0cmluZyBjbGFzc10pOworICAgICpvdXRWYWx1ZSA9IChOU1N0cmluZyAqKXBh
eWxvYWQ7Cit9CisKKysgKHZvaWQpX3BhcnNlQ29sb3JMaXN0OihOU0FycmF5Lyo8TlNTdHJpbmc+
Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENF
UFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gY2xhc3Nd
KTsKKyAgICAqb3V0VmFsdWUgPSAoTlNBcnJheS8qPE5TU3RyaW5nPiovICopcGF5bG9hZDsKK30K
KworKyAodm9pZClfcGFyc2VFcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKilvdXRW
YWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
QkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOworICAgICpvdXRWYWx1ZSA9
IFtbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxv
YWRdOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVy
cy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAi
VGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJp
dmF0ZS5oPgorI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFs
dWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBU
ZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yCisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxv
YWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQKK3sKKyAg
ICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAIm1lc3NhZ2Ui
XSwgQCJtZXNzYWdlIik7CisgICAgc2VsZi5tZXNzYWdlID0gcGF5bG9hZFtAIm1lc3NhZ2UiXTsK
KworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImNv
ZGUiXSwgQCJjb2RlIik7CisgICAgc2VsZi5jb2RlID0gW3BheWxvYWRbQCJjb2RlIl0gaW50ZWdl
clZhbHVlXTsKKworICAgIHJldHVybiBzZWxmOworfQorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
UHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9iamVjdAoreworICAgIGlm
ICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmplY3QgdG9KU09OT2JqZWN0
XS5nZXQoKV0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisK
Ky0gKGluc3RhbmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBjb2Rl
OihpbnQpY29kZQoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICBy
ZXR1cm4gbmlsOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWSht
ZXNzYWdlLCBAIm1lc3NhZ2UiKTsKKworICAgIHNlbGYubWVzc2FnZSA9IG1lc3NhZ2U7CisgICAg
c2VsZi5jb2RlID0gY29kZTsKKworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXNldE1l
c3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZQoreworICAgIFtzdXBlciBzZXRTdHJpbmc6bWVzc2Fn
ZSBmb3JLZXk6QCJtZXNzYWdlIl07Cit9CisKKy0gKE5TU3RyaW5nICopbWVzc2FnZQoreworICAg
IHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAibWVzc2FnZSJdOworfQorCistICh2b2lkKXNl
dENvZGU6KGludCljb2RlCit7CisgICAgW3N1cGVyIHNldEludGVnZXI6Y29kZSBmb3JLZXk6QCJj
b2RlIl07Cit9CisKKy0gKGludCljb2RlCit7CisgICAgcmV0dXJuIFtzdXBlciBpbnRlZ2VyRm9y
S2V5OkAiY29kZSJdOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xU
eXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRv
bWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tY29tbWFuZC10YXJnZXRUeXBl
LW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmEx
MzBhZDcwYzQwODI0NGUyNzI2ZDRiNGExMjRkOTBiMzJhMmM2MjMKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
ZmFpbC1vbi1jb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBl
Lmpzb24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6IE1hbGZvcm1lZCBkb21haW4gc3BlY2lm
aWNhdGlvbjogZG9tYWluIERvbWFpbiBoYXMgYW4gaXRlbSBpbiB0YXJnZXRUeXBlcyAiW3Und29y
a2VyJ10iIHRoYXQgaXMgbm90IHN1cHBvcnRlZCBieSBhbnkgdmFsdWUgaW4gZGVidWdnYWJsZVR5
cGVzICJbdSdqYXZhc2NyaXB0J10iLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tY29tbWFuZC10YXJnZXRU
eXBlcy10eXBlLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1jb21tYW5kLXRhcmdldFR5cGVzLXR5cGUuanNv
bi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi45OWY1ZTFhNGE4ZTQ3NDMzZWY3NWVlOGI1NGM0OTNjNWJjMGE2
ZDAzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tY29tbWFuZC10YXJnZXRUeXBlcy10eXBlLmpz
b24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6IE1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNh
dGlvbjogdGFyZ2V0VHlwZXMgbGlzdCBmb3IgY29tbWFuZCBQYWdlT25seSBpcyBub3QgYW4gYXJy
YXkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlwZXMtdmFsdWUuanNvbi1lcnJv
ciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlwZXMtdmFsdWUuanNvbi1lcnJvcgpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4yMWEzNjU2OTkyNmIyZTQwYTk4N2UyOTFiNTJiNTM5M2Q4YzIyZjlhCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVj
dGVkL2ZhaWwtb24tY29tbWFuZC10YXJnZXRUeXBlcy12YWx1ZS5qc29uLWVycm9yCkBAIC0wLDAg
KzEgQEAKK0VSUk9SOiBNYWxmb3JtZWQgZG9tYWluIHNwZWNpZmljYXRpb246IHRhcmdldFR5cGVz
IGxpc3QgZm9yIGNvbW1hbmQgUGFnZU9ubHkgaXMgYW4gdW5zdXBwb3J0ZWQgc3RyaW5nLiBXYXM6
ICJbdSdwYWdlZSddIiwgQWxsb3dlZCB2YWx1ZXM6IHNlcnZpY2Utd29ya2VyLCBqYXZhc2NyaXB0
LCB3b3JrZXIsIHBhZ2UsIHdlYi1wYWdlCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4tZGVidWdn
YWJsZVR5cGVzLXR5cGUuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMt
dHlwZS5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJiODk4YmE3YmU3ZGZhNzJiYzYzZmQ4YmRlOWNl
ZDVmODRhODE5NzcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4tZGVidWdnYWJsZVR5
cGVzLXR5cGUuanNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjogTWFsZm9ybWVkIGRvbWFp
biBzcGVjaWZpY2F0aW9uOiBkZWJ1Z2dhYmxlVHlwZXMgZm9yIGRvbWFpbiBXZWJPbmx5IGlzIG5v
dCBhbiBhcnJheQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZG9tYWluLWRlYnVnZ2FibGVUeXBlcy12YWx1
ZS5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V4cGVjdGVkL2ZhaWwtb24tZG9tYWluLWRlYnVnZ2FibGVUeXBlcy12YWx1ZS5qc29uLWVy
cm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmJmNzFkNDcwY2JkMzk4NTU5NzM2NThiMzEzN2I3YTJhOWM3MTg0ZmYK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4tZGVidWdnYWJsZVR5cGVzLXZhbHVlLmpz
b24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6IE1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNh
dGlvbjogZGVidWdnYWJsZVR5cGVzIGZvciBkb21haW4gV2ViT25seSBpcyBhbiB1bnN1cHBvcnRl
ZCBzdHJpbmcuIFdhczogIlt1J3dlYmInXSIsIEFsbG93ZWQgdmFsdWVzOiBzZXJ2aWNlLXdvcmtl
ciwgamF2YXNjcmlwdCwgcGFnZSwgd2ViLXBhZ2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWRvbWFpbi10
YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLWVycm9yIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwt
b24tZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24t
ZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uODY3ZTM1MDA4OTg2NDg4OWZkMGRjZDE4YWJjOWJkNTBmOWMxZGVj
MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRv
bWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBNYWxm
b3JtZWQgZG9tYWluIHNwZWNpZmljYXRpb246IGNvbW1hbmQgQ29tbWFuZCBoYXMgYW4gaXRlbSBp
biB0YXJnZXRUeXBlcyAiW3Und29ya2VyJ10iIHRoYXQgaXMgbm90IHN1cHBvcnRlZCBieSBhbnkg
dmFsdWUgaW4gZGVidWdnYWJsZVR5cGVzICJbdSdqYXZhc2NyaXB0J10iLgpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2Zh
aWwtb24tZG9tYWluLXRhcmdldFR5cGVzLXR5cGUuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWRvbWFpbi10
YXJnZXRUeXBlcy10eXBlLmpzb24tZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTlhMzU5MzNhMzU0MGFlMTBi
MWVhZTJkN2EwM2RjM2YyMzMwOTI1YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWRvbWFpbi10
YXJnZXRUeXBlcy10eXBlLmpzb24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6IE1hbGZvcm1l
ZCBkb21haW4gc3BlY2lmaWNhdGlvbjogdGFyZ2V0VHlwZXMgZm9yIGRvbWFpbiBQYWdlT25seSBp
cyBub3QgYW4gYXJyYXkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWRvbWFpbi10YXJnZXRUeXBlcy12YWx1
ZS5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V4cGVjdGVkL2ZhaWwtb24tZG9tYWluLXRhcmdldFR5cGVzLXZhbHVlLmpzb24tZXJyb3IK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNDY4MDdmNzJmYzQ2OGEyOWRiZjc0ZmMyMmEyOTc3YWJiYmFjZTViOQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWRvbWFpbi10YXJnZXRUeXBlcy12YWx1ZS5qc29uLWVycm9y
CkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBNYWxmb3JtZWQgZG9tYWluIHNwZWNpZmljYXRpb246IHRh
cmdldFR5cGVzIGZvciBkb21haW4gUGFnZU9ubHkgaXMgYW4gdW5zdXBwb3J0ZWQgc3RyaW5nLiBX
YXM6ICJbdSdwYWdlZSddIiwgQWxsb3dlZCB2YWx1ZXM6IHNlcnZpY2Utd29ya2VyLCBqYXZhc2Ny
aXB0LCB3b3JrZXIsIHBhZ2UsIHdlYi1wYWdlCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUt
Y29tbWFuZC1jYWxsLXBhcmFtZXRlci1uYW1lcy5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRl
LWNvbW1hbmQtY2FsbC1wYXJhbWV0ZXItbmFtZXMuanNvbi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZjc1
NmRlMzI1MDUwYzMzYTQ5MmNkNTBkOWVhZGY0MjMwMzViNjEwCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2Zh
aWwtb24tZHVwbGljYXRlLWNvbW1hbmQtY2FsbC1wYXJhbWV0ZXItbmFtZXMuanNvbi1lcnJvcgpA
QCAtMCwwICsxIEBACitFUlJPUjogTWFsZm9ybWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9uOiBjYWxs
IHBhcmFtZXRlciBsaXN0IGZvciBjb21tYW5kIHByb2Nlc3NQb2ludHMgaGFzIGR1cGxpY2F0ZSBw
YXJhbWV0ZXIgbmFtZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS1jb21tYW5kLXJldHVy
bi1wYXJhbWV0ZXItbmFtZXMuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS1jb21tYW5kLXJl
dHVybi1wYXJhbWV0ZXItbmFtZXMuanNvbi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lYTE0OGZmNjdjOTYw
OTQ4OGE4MGU2ZmEyNWQzYmZhNzc4ZjVkYTBhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZHVw
bGljYXRlLWNvbW1hbmQtcmV0dXJuLXBhcmFtZXRlci1uYW1lcy5qc29uLWVycm9yCkBAIC0wLDAg
KzEgQEAKK0VSUk9SOiBNYWxmb3JtZWQgZG9tYWluIHNwZWNpZmljYXRpb246IHJldHVybiBwYXJh
bWV0ZXIgbGlzdCBmb3IgY29tbWFuZCBwcm9jZXNzUG9pbnRzIGhhcyBkdXBsaWNhdGUgcGFyYW1l
dGVyIG5hbWVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtZXZlbnQtcGFyYW1ldGVyLW5h
bWVzLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtZXZlbnQtcGFyYW1ldGVyLW5hbWVzLmpz
b24tZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYzcxYmJkMjFjMmNmMGMzYjAzODAxZDk2MzdhNGU2ZDBmYzI1
YWM0NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS1ldmVudC1wYXJhbWV0ZXIt
bmFtZXMuanNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjogTWFsZm9ybWVkIGRvbWFpbiBz
cGVjaWZpY2F0aW9uOiBwYXJhbWV0ZXIgbGlzdCBmb3IgZXZlbnQgcHJvY2Vzc2VkUG9pbnRzIGhh
cyBkdXBsaWNhdGUgcGFyYW1ldGVyIG5hbWVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUt
dHlwZS1kZWNsYXJhdGlvbnMuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLWRlY2xh
cmF0aW9ucy5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ0N2NkZjhlMjhlODU2NjEwYTI2ZjgxNTQ5
NDNmMzZjZjhiN2QxZjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1k
ZWNsYXJhdGlvbnMuanNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjogRHVwbGljYXRlIHR5
cGUgZGVjbGFyYXRpb246IFJ1bnRpbWUuUmVtb3RlT2JqZWN0SWQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9u
LWR1cGxpY2F0ZS10eXBlLW1lbWJlci1uYW1lcy5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRl
LXR5cGUtbWVtYmVyLW5hbWVzLmpzb24tZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDUzNzZhNzdhNDU1ZmQx
NWY2N2Q4YmNiOTM1YTZiYTQzOGMwYTU0YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWR1cGxp
Y2F0ZS10eXBlLW1lbWJlci1uYW1lcy5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBN
YWxmb3JtZWQgZG9tYWluIHNwZWNpZmljYXRpb246IHR5cGUgZGVjbGFyYXRpb24gZm9yIFBvaW50
IGhhcyBkdXBsaWNhdGUgbWVtYmVyIG5hbWVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1lbnVtLXdpdGgt
bm8tdmFsdWVzLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1lbnVtLXdpdGgtbm8tdmFsdWVzLmpzb24tZXJy
b3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMjY1NWMyYjkwN2UwMmUzZTg0Y2IzZjY2ZmExZjU4ZTEzZDliN2I1Mwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWVudW0td2l0aC1uby12YWx1ZXMuanNvbi1lcnJvcgpA
QCAtMCwwICsxIEBACitFUlJPUjogVHlwZSByZWZlcmVuY2Ugd2l0aCBlbnVtIHZhbHVlcyBtdXN0
IGhhdmUgYXQgbGVhc3Qgb25lIGVudW0gdmFsdWUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1ldmVudC10
YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLWVycm9yIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwt
b24tZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1l
cnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5iNjVkN2EwZDE5NmQ0MGE4OWI2ZWU1ODRhOGM2YzA1Yjk3MjVjYWRj
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21h
aW4tZGVidWdnYWJsZVR5cGUuanNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjogTWFsZm9y
bWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9uOiBldmVudCBFdmVudCBoYXMgYW4gaXRlbSBpbiB0YXJn
ZXRUeXBlcyAiW3Und29ya2VyJ10iIHRoYXQgaXMgbm90IHN1cHBvcnRlZCBieSBhbnkgdmFsdWUg
aW4gZGVidWdnYWJsZVR5cGVzICJbdSdqYXZhc2NyaXB0J10iLgpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24t
ZXZlbnQtdGFyZ2V0VHlwZXMtdHlwZS5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlw
ZXMtdHlwZS5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc0MDNlMTNhODA5ODk0YTE4Njk5NTY2ZTc3
NmNmNjUzNjQyZjgwOTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1ldmVudC10YXJnZXRUeXBl
cy10eXBlLmpzb24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6IE1hbGZvcm1lZCBkb21haW4g
c3BlY2lmaWNhdGlvbjogdGFyZ2V0VHlwZXMgZm9yIGV2ZW50IFBhZ2VPbmx5IGlzIG5vdCBhbiBh
cnJheQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlwZXMtdmFsdWUuanNvbi1lcnJv
ciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGVzLXZhbHVlLmpzb24tZXJyb3IKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ODMwMTJhOWZlNGU4OTMwMjFhYjhhZjM0NTI0NmIxMDBiM2U0MTVmYQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGVzLXZhbHVlLmpzb24tZXJyb3IKQEAgLTAsMCArMSBA
QAorRVJST1I6IE1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjogdGFyZ2V0VHlwZXMgZm9y
IGV2ZW50IFBhZ2VPbmx5IGlzIGFuIHVuc3VwcG9ydGVkIHN0cmluZy4gV2FzOiAiW3UncGFnZWUn
XSIsIEFsbG93ZWQgdmFsdWVzOiBzZXJ2aWNlLXdvcmtlciwgamF2YXNjcmlwdCwgd29ya2VyLCBw
YWdlLCB3ZWItcGFnZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tbnVtYmVyLXR5cGVkLW9wdGlvbmFsLXBh
cmFtZXRlci1mbGFnLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtcGFy
YW1ldGVyLWZsYWcuanNvbi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45N2IyYWYwZTQ3ZTkzZjgwNDk3OTQ0
NDcyNTdkZjMyNzIzZjA2ODI0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tbnVtYmVyLXR5cGVk
LW9wdGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6
IFRoZSAnb3B0aW9uYWwnIGZsYWcgZm9yIGEgcGFyYW1ldGVyIG11c3QgYmUgYSBib29sZWFuIGxp
dGVyYWwuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1i
ZXIuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5q
c29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg2ZGYzNzUwYzFhNzc5Nzg5M2NiZmI3ZTI4NzZkOTJjY2Vj
YzJmOTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtdHlw
ZS1tZW1iZXIuanNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjogVGhlICdvcHRpb25hbCcg
ZmxhZyBmb3IgYSB0eXBlIG1lbWJlciBtdXN0IGJlIGEgYm9vbGVhbiBsaXRlcmFsLgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVj
dGVkL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24tZXJy
b3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvZmFpbC1vbi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbi1lcnJv
cgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi45N2IyYWYwZTQ3ZTkzZjgwNDk3OTQ0NDcyNTdkZjMyNzIzZjA2ODI0Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1m
bGFnLmpzb24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6IFRoZSAnb3B0aW9uYWwnIGZsYWcg
Zm9yIGEgcGFyYW1ldGVyIG11c3QgYmUgYSBib29sZWFuIGxpdGVyYWwuCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFp
bC1vbi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNvbi1lcnJvciBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9u
LXN0cmluZy10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29uLWVycm9yCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
Ljg2ZGYzNzUwYzFhNzc5Nzg5M2NiZmI3ZTI4NzZkOTJjY2VjYzJmOTEKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvZmFpbC1vbi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNvbi1lcnJvcgpA
QCAtMCwwICsxIEBACitFUlJPUjogVGhlICdvcHRpb25hbCcgZmxhZyBmb3IgYSB0eXBlIG1lbWJl
ciBtdXN0IGJlIGEgYm9vbGVhbiBsaXRlcmFsLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS1kZWNs
YXJhdGlvbi11c2luZy10eXBlLXJlZmVyZW5jZS5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS1kZWNs
YXJhdGlvbi11c2luZy10eXBlLXJlZmVyZW5jZS5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQyZjU3
NTNhNDM5NjE0NGViNTY2YzVjNTk2OGQwNDlhZWM2MTgyZGIKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFp
bC1vbi10eXBlLWRlY2xhcmF0aW9uLXVzaW5nLXR5cGUtcmVmZXJlbmNlLmpzb24tZXJyb3IKQEAg
LTAsMCArMSBAQAorRVJST1I6IFR5cGUgcmVmZXJlbmNlIGNhbm5vdCBoYXZlIGJvdGggJ3R5cGUn
IGFuZCAnJHJlZicga2V5cy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXR5cGUtcmVmZXJlbmNlLWFzLXBy
aW1pdGl2ZS10eXBlLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi10eXBlLXJlZmVyZW5jZS1hcy1wcmltaXRp
dmUtdHlwZS5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ3NmJjMWM3NzczYWEwZGE5ODg0OWM5M2Mz
NGMzOTJmMTYyNzYzOTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi10eXBlLXJlZmVyZW5jZS1h
cy1wcmltaXRpdmUtdHlwZS5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBUeXBlIHJl
ZmVyZW5jZSAnRGF0YWJhc2VJZCcgaXMgbm90IGEgcHJpbWl0aXZlIHR5cGUuIEFsbG93ZWQgdmFs
dWVzOiBpbnRlZ2VyLCBudW1iZXIsIHN0cmluZywgYm9vbGVhbiwgZW51bSwgb2JqZWN0LCBhcnJh
eSwgYW55CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi10eXBlLXdpdGgtbG93ZXJjYXNlLW5hbWUuanNvbi1l
cnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC9mYWlsLW9uLXR5cGUtd2l0aC1sb3dlcmNhc2UtbmFtZS5qc29uLWVycm9yCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjRlNDYyMjUwYzBhZjgwYTE3OWUwNmFhZjQ1ZDIxZWI1NDZkYjg4MTQKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvZmFpbC1vbi10eXBlLXdpdGgtbG93ZXJjYXNlLW5hbWUuanNvbi1lcnJvcgpAQCAtMCww
ICsxIEBACitFUlJPUjogVHlwZXMgbXVzdCBiZWdpbiB3aXRoIGFuIHVwcGVyY2FzZSBjaGFyYWN0
ZXIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtZGVj
bGFyYXRpb24uanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlw
ZS1kZWNsYXJhdGlvbi5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJkMzhlNjQ2NzVkYTVhZTVjMjYz
ZDU0NmU4NTM0YjQ5ZjNiNWU5YzkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi11bmtub3duLXR5
cGUtcmVmZXJlbmNlLWluLXR5cGUtZGVjbGFyYXRpb24uanNvbi1lcnJvcgpAQCAtMCwwICsxIEBA
CitFUlJPUjogVHlwZSByZWZlcmVuY2UgJ2RyYWdvbicgaXMgbm90IGEgcHJpbWl0aXZlIHR5cGUu
IEFsbG93ZWQgdmFsdWVzOiBpbnRlZ2VyLCBudW1iZXIsIHN0cmluZywgYm9vbGVhbiwgZW51bSwg
b2JqZWN0LCBhcnJheSwgYW55CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJl
bmNlLWluLXR5cGUtbWVtYmVyLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJl
bmNlLWluLXR5cGUtbWVtYmVyLmpzb24tZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmFmNjY3MmNiZWYwOTYz
MGZkOWJlOGZmYWRhY2UxMmM1NjExY2NhOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXVua25v
d24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1tZW1iZXIuanNvbi1lcnJvcgpAQCAtMCwwICsxIEBA
CitFUlJPUjogTG9va3VwIGZhaWxlZCBmb3IgdHlwZSByZWZlcmVuY2U6IENvbG9yIChyZWZlcmVu
Y2VkIGZyb20gZG9tYWluOiBGYW50YXN5KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2dlbmVyYXRlLWRvbWFpbnMtd2l0
aC1mZWF0dXJlLWd1YXJkcy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9nZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVy
ZS1ndWFyZHMuanNvbi1yZXN1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzRmMjUxMTk1MmJlYTIzOGZmODY0MDZm
MjhlNWZjMjA4NTgwMzU2YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9nZW5lcmF0ZS1kb21haW5zLXdpdGgt
ZmVhdHVyZS1ndWFyZHMuanNvbi1yZXN1bHQKQEAgLTAsMCArMSwxMTY4IEBACisjIyMgQmVnaW4g
RmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzLmluCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisvLyBOZXR3b3JrMQorSW5z
cGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiTmV0d29yazEiLCBudWxsKTsKK0luc3BlY3Rv
ckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMS5sb2FkUmVzb3VyY2UiLCBudWxsLCBb
XSwgW10pOworSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiTmV0d29yazEiLCBudWxs
KTsKKworLy8gTmV0d29yazMKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIk5ldHdv
cmszIiwgbnVsbCk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnQoIk5ldHdvcmszLnJl
c291cmNlTG9hZGVkIiwgbnVsbCwgW10pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rlck5ldHdv
cmszRGlzcGF0Y2hlciA9IEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEaXNwYXRjaGVyLmJpbmQo
SW5zcGVjdG9yQmFja2VuZCwgIk5ldHdvcmszIik7CitJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRl
RG9tYWluKCJOZXR3b3JrMyIsIG51bGwpOworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5k
Q29tbWFuZHMuanMuaW4KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlz
cGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRv
bWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVS
TkFURV9ESVNQQVRDSEVSUykKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorCituYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKKworY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVi
bGljOgorICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRj
aGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0
Y2hlcik7IH0KKyAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25z
dCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Citwcml2YXRlOgorICAgIFJl
ZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKK307CisKKworY2xh
c3MgQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+QWx0ZXJuYXRlTmV0d29y
azFCYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2Uo
bG9uZyBjYWxsSWQpID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5k
aWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjIyMgRW5kIEZp
bGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTog
VGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRl
c3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCitu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKKyNp
ZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK2NsYXNzIEFsdGVybmF0
ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI7CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKK2NsYXNzIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlKEVycm9yU3Ry
aW5nJikgPSAwOworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgfk5ldHdvcmsxQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyKCk7Cit9OworCitjbGFzcyBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyIGZp
bmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUmVmPE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlz
cGF0Y2hlciYsIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgdm9pZCBk
aXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpP
YmplY3Q+JiYgbWVzc2FnZSkgZmluYWw7Citwcml2YXRlOgorICAgIHZvaWQgbG9hZFJlc291cmNl
KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOworI2lm
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorcHVibGljOgorICAgIHZv
aWQgc2V0QWx0ZXJuYXRlRGlzcGF0Y2hlcihBbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRj
aGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVy
bmF0ZURpc3BhdGNoZXI7IH0KK3ByaXZhdGU6CisgICAgQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5k
RGlzcGF0Y2hlciogbV9hbHRlcm5hdGVEaXNwYXRjaGVyIHsgbnVsbHB0ciB9OworI2VuZGlmIC8v
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorcHJpdmF0ZToKKyAgICBO
ZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiwgTmV0d29yazFCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlciogbV9hZ2VudCB7IG51bGxwdHIgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgorIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZp
bGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVl
cy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQorI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNlbmRpZiAv
LyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworbmFtZXNwYWNlIElu
c3BlY3RvciB7CisKK05ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+TmV0d29yazFC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KKworUmVmPE5ldHdvcmsxQmFja2VuZERpc3Bh
dGNoZXI+IE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hl
ciYgYmFja2VuZERpc3BhdGNoZXIsIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBh
Z2VudCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBOZXR3b3JrMUJhY2tlbmREaXNwYXRj
aGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOworfQorCitOZXR3b3JrMUJhY2tlbmREaXNw
YXRjaGVyOjpOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNr
ZW5kRGlzcGF0Y2hlciwgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQor
ICAgIDogU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCisg
ICAgLCBtX2FnZW50KGFnZW50KQoreworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVy
RGlzcGF0Y2hlckZvckRvbWFpbigiTmV0d29yazEiX3MsIHRoaXMpOworfQorCit2b2lkIE5ldHdv
cmsxQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJp
bmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQoreworICAgIFJlZjxOZXR3
b3JrMUJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKKworICAgIFJlZlB0cjxKU09O
OjpPYmplY3Q+IHBhcmFtZXRlcnM7CisgICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3Ms
IHBhcmFtZXRlcnMpOworCisgICAgaWYgKG1ldGhvZCA9PSAibG9hZFJlc291cmNlIikgeworICAg
ICAgICBsb2FkUmVzb3VyY2UocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3Rv
Y29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmsxLiIg
KyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7Cit9CisKK3ZvaWQgTmV0d29yazFCYWNrZW5k
RGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmKQoreworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQor
ICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNw
YXRjaGVyLT5sb2FkUmVzb3VyY2UocmVxdWVzdElkKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworICAg
IEVycm9yU3RyaW5nIGVycm9yOworICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9hZ2VudC0+bG9hZFJlc291cmNlKGVycm9yKTsKKwor
ICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNl
bmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOworICAgIGVsc2UK
KyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5k
RGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5j
cHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1n
dWFyZHMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPHd0
Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVz
cGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBGcm9udGVuZFJvdXRlcjsKKworY2xhc3MgTmV0d29y
azNGcm9udGVuZERpc3BhdGNoZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVi
bGljOgorICAgIE5ldHdvcmszRnJvbnRlbmREaXNwYXRjaGVyKEZyb250ZW5kUm91dGVyJiBmcm9u
dGVuZFJvdXRlcikgOiBtX2Zyb250ZW5kUm91dGVyKGZyb250ZW5kUm91dGVyKSB7IH0KKyAgICB2
b2lkIHJlc291cmNlTG9hZGVkKCk7Citwcml2YXRlOgorICAgIEZyb250ZW5kUm91dGVyJiBtX2Zy
b250ZW5kUm91dGVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZp
bGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9u
dGVuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdl
bmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRl
c3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwor
bmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3ZvaWQgTmV0d29yazNGcm9udGVuZERpc3BhdGNoZXI6
OnJlc291cmNlTG9hZGVkKCkKK3sKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9
IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0
aG9kIl9zLCAiTmV0d29yazMucmVzb3VyY2VMb2FkZWQiX3MpOworCisgICAgbV9mcm9udGVuZFJv
dXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hl
cnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1n
dWFyZHMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBl
cy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Ig
eworCisKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworCisKKy8vIEZvcndhcmQgZGVjbGFyYXRp
b25zLgorbmFtZXNwYWNlIE5ldHdvcmsyIHsKK2NsYXNzIE5ldHdvcmtFcnJvcjsKK30gLy8gTmV0
d29yazIKKy8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KKworCisKKworbmFtZXNwYWNl
IE5ldHdvcmsyIHsKKworY2xhc3MgTmV0d29ya0Vycm9yIDogcHVibGljIEpTT046Ok9iamVjdEJh
c2UgeworcHVibGljOgorICAgIGVudW0geworICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCisgICAg
ICAgIE1lc3NhZ2VTZXQgPSAxIDw8IDAsCisgICAgICAgIENvZGVTZXQgPSAxIDw8IDEsCisgICAg
ICAgIEFsbEZpZWxkc1NldCA9IChNZXNzYWdlU2V0IHwgQ29kZVNldCkKKyAgICB9OworCisgICAg
dGVtcGxhdGU8aW50IFNUQVRFPgorICAgIGNsYXNzIEJ1aWxkZXIgeworICAgIHByaXZhdGU6Cisg
ICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVzdWx0OworCisgICAgICAgIHRlbXBsYXRl
PGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RF
UD4qPih0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXIoUmVmPC8qTmV0d29ya0Vy
cm9yKi9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQorICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZN
b3ZlKG9iamVjdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRF
ID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAg
ICAgICB9CisgICAgICAgIGZyaWVuZCBjbGFzcyBOZXR3b3JrRXJyb3I7CisgICAgcHVibGljOgor
CisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2FnZShjb25zdCBT
dHJpbmcmIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgTWVzc2FnZVNldCksIHByb3BlcnR5X21lc3NhZ2VfYWxyZWFkeV9zZXQpOworICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibWVzc2FnZSJfcywgdmFsdWUpOworICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxNZXNzYWdlU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAg
QnVpbGRlcjxTVEFURSB8IENvZGVTZXQ+JiBzZXRDb2RlKGludCB2YWx1ZSkKKyAgICAgICAgewor
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENvZGVTZXQpLCBwcm9wZXJ0eV9j
b2RlX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2VyKCJjb2Rl
Il9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvZGVTZXQ+KCk7Cisg
ICAgICAgIH0KKworICAgICAgICBSZWY8TmV0d29ya0Vycm9yPiByZWxlYXNlKCkKKyAgICAgICAg
eworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1
bHRfaXNfbm90X3JlYWR5KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihOZXR3
b3JrRXJyb3IpID09IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7CisKKyAgICAg
ICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25SZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9u
TnVsbCgpOworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBXVEZNb3ZlKCpyZWludGVycHJldF9j
YXN0PFJlZjxOZXR3b3JrRXJyb3I+Kj4oJmpzb25SZXN1bHQpKTsKKyAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyoKKyAgICAgKiBTeW50aGV0aWMg
Y29uc3RydWN0b3I6CisgICAgICogUmVmPE5ldHdvcmtFcnJvcj4gcmVzdWx0ID0gTmV0d29ya0Vy
cm9yOjpjcmVhdGUoKQorICAgICAqICAgICAuc2V0TWVzc2FnZSguLi4pCisgICAgICogICAgIC5z
ZXRDb2RlKC4uLikKKyAgICAgKiAgICAgLnJlbGVhc2UoKTsKKyAgICAgKi8KKyAgICBzdGF0aWMg
QnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBCdWls
ZGVyPE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICB9Cit9OworCit9
IC8vIE5ldHdvcmsyCisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisKKyMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29u
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKworI2luY2x1ZGUgPHd0Zi9P
cHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIElu
c3BlY3RvciB7CisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKworCit9IC8vIG5hbWVzcGFjZSBQ
cm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xPYmplY3RzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2Vu
ZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0
ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisK
K0Bwcm90b2NvbCBUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI7CisKK25hbWVzcGFj
ZSBJbnNwZWN0b3IgeworCisKK2NsYXNzIE9iakNJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNw
YXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIg
eworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIE9iakNJbnNwZWN0
b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWlu
SGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQorICAgIHZvaWQgbG9h
ZFJlc291cmNlKGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKK3ByaXZhdGU6CisgICAgUmV0YWluUHRy
PGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xC
YWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2Vu
ZERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJh
dGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90
b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJu
YWwuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbmNsdWRl
IDx3dGYvSlNPTlZhbHVlcy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordm9pZCBPYmpD
SW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlKGxvbmcgcmVx
dWVzdElkKQoreworICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxl
Y3Rvcihsb2FkUmVzb3VyY2VXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsK
KyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0
SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMS5sb2FkUmVz
b3VyY2UnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5z
ZW5kUGVuZGluZ0Vycm9ycygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWQgZXJy
b3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6
U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBl
bmRpbmdFcnJvcnMoKTsKKyAgICB9OworCisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKKyAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2UpOworICAgIH07CisKKyAgICBbbV9kZWxlZ2F0ZSBsb2Fk
UmVzb3VyY2VXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpz
dWNjZXNzQ2FsbGJhY2tdOworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9y
L1Rlc3RQcm90b2NvbC5oPgorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIp
KSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0CitAcHJv
cGVydHkgKG5vbmF0b21pYywgcmV0YWluLCBzZXR0ZXI9c2V0TmV0d29yazFIYW5kbGVyOikgaWQ8
VGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyPiBuZXR3b3JrMUhhbmRsZXI7CitAcHJv
cGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFRlc3RQcm90b2NvbE5ldHdvcmszRG9tYWluRXZl
bnREaXNwYXRjaGVyICpuZXR3b3JrM0V2ZW50RGlzcGF0Y2hlcjsKK0BlbmQKKworCisjIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorCisjIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbi5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2ltcG9ydCAi
VGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgorCit1c2luZyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
bgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Cisg
ICAgaWQ8VGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyPiBfbmV0d29yazFIYW5kbGVy
OworICAgIFRlc3RQcm90b2NvbE5ldHdvcmszRG9tYWluRXZlbnREaXNwYXRjaGVyICpfbmV0d29y
azNFdmVudERpc3BhdGNoZXI7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xs
ZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgoreworICAgIHNl
bGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOwor
ICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Cisg
ICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIFtfbmV0d29yazFI
YW5kbGVyIHJlbGVhc2VdOworICAgIFtfbmV0d29yazNFdmVudERpc3BhdGNoZXIgcmVsZWFzZV07
CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistICh2b2lkKXNldE5ldHdvcmsxSGFuZGxlcjoo
aWQ8VGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyPiloYW5kbGVyCit7CisgICAgaWYg
KGhhbmRsZXIgPT0gX25ldHdvcmsxSGFuZGxlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgW19u
ZXR3b3JrMUhhbmRsZXIgcmVsZWFzZV07CisgICAgX25ldHdvcmsxSGFuZGxlciA9IFtoYW5kbGVy
IHJldGFpbl07CisKKyAgICBhdXRvIGFsdGVybmF0ZURpc3BhdGNoZXIgPSBtYWtlVW5pcXVlPE9i
akNJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPihoYW5kbGVyKTsKKyAgICBhdXRv
IGFsdGVybmF0ZUFnZW50ID0gbWFrZVVuaXF1ZTxBbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudDxO
ZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyLCBBbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRj
aGVyPj4oIk5ldHdvcmsxIl9zLCAqX2NvbnRyb2xsZXIsIFdURk1vdmUoYWx0ZXJuYXRlRGlzcGF0
Y2hlcikpOworICAgIF9jb250cm9sbGVyLT5hcHBlbmRFeHRyYUFnZW50KFdURk1vdmUoYWx0ZXJu
YXRlQWdlbnQpKTsKK30KKworLSAoaWQ8VGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVy
PiluZXR3b3JrMUhhbmRsZXIKK3sKKyAgICByZXR1cm4gX25ldHdvcmsxSGFuZGxlcjsKK30KKwor
LSAoVGVzdFByb3RvY29sTmV0d29yazNEb21haW5FdmVudERpc3BhdGNoZXIgKiluZXR3b3JrM0V2
ZW50RGlzcGF0Y2hlcgoreworICAgIGlmICghX25ldHdvcmszRXZlbnREaXNwYXRjaGVyKQorICAg
ICAgICBfbmV0d29yazNFdmVudERpc3BhdGNoZXIgPSBbW1Rlc3RQcm90b2NvbE5ldHdvcmszRG9t
YWluRXZlbnREaXNwYXRjaGVyIGFsbG9jXSBpbml0V2l0aENvbnRyb2xsZXI6X2NvbnRyb2xsZXJd
OworICAgIHJldHVybiBfbmV0d29yazNFdmVudERpc3BhdGNoZXI7Cit9CisKK0BlbmQKKworCisj
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKworIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbiBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90
b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5o
IgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3Rv
cjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbE5ldHdvcmszRG9tYWluRXZlbnREaXNw
YXRjaGVyCit7CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxl
cjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJ
bnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0
XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNvbnRy
b2xsZXIpOworICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKKyAgICByZXR1cm4gc2VsZjsK
K30KKworLSAodm9pZClyZXNvdXJjZUxvYWRlZAoreworICAgIGNvbnN0IEZyb250ZW5kUm91dGVy
JiByb3V0ZXIgPSBfY29udHJvbGxlci0+ZnJvbnRlbmRSb3V0ZXIoKTsKKworICAgIFJlZjxKU09O
OjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBqc29u
TWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJOZXR3b3JrMy5yZXNvdXJjZUxvYWRlZCJf
cyk7CisgICAgcm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwor
fQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJz
Lm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29u
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8Rm91bmRh
dGlvbi9Gb3VuZGF0aW9uLmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpT
T05PYmplY3QuaD4KKworCitAY2xhc3MgVGVzdFByb3RvY29sTmV0d29yazJOZXR3b3JrRXJyb3I7
CisKKworCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZh
Y2UgVGVzdFByb3RvY29sTmV0d29yazJOZXR3b3JrRXJyb3IgOiBSV0lQcm90b2NvbEpTT05PYmpl
Y3QKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmlu
ZyAqLCBpZD4gKilwYXlsb2FkOworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmpl
Y3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7CistIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZTooaW50KWNvZGU7CisvKiBy
ZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKm1lc3NhZ2U7
CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQgY29kZTsK
K0BlbmQKKworQHByb3RvY29sIFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlciA8TlNP
YmplY3Q+CitAb3B0aW9uYWwKKy0gKHZvaWQpbG9hZFJlc291cmNlV2l0aEVycm9yQ2FsbGJhY2s6
KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoo
dm9pZCheKSh2b2lkKSlzdWNjZXNzQ2FsbGJhY2s7CitAZW5kCisKK19fYXR0cmlidXRlX18oKHZp
c2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xOZXR3b3JrM0Rv
bWFpbkV2ZW50RGlzcGF0Y2hlciA6IE5TT2JqZWN0CistICh2b2lkKXJlc291cmNlTG9hZGVkOwor
QGVuZAorCisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJp
bGl0eU9iamVjdHMuaD4KKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAorCisjIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29s
LmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgorI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0
IDx3dGYvSlNPTlZhbHVlcy5oPgorCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbE5ldHdvcmszRG9t
YWluRXZlbnREaXNwYXRjaGVyIChQcml2YXRlKQorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29u
dHJvbGxlcjooSW5zcGVjdG9yOjpBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRy
b2xsZXI7CitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisK
KyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1
YXJkcy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9y
dCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJh
eUNvbnZlcnNpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBPYmpDRW51bVR5cGU+CitPcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0
cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMu
anNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIK
KyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rv
ci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNw
ZWN0b3I7CisKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChOZXR3b3Jr
MkRvbWFpbikKKworKyAodm9pZClfcGFyc2VOZXR3b3JrRXJyb3I6KFRlc3RQcm90b2NvbE5ldHdv
cmsyTmV0d29ya0Vycm9yICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworCitA
ZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKE5ldHdv
cmsyRG9tYWluKQorCisrICh2b2lkKV9wYXJzZU5ldHdvcmtFcnJvcjooVGVzdFByb3RvY29sTmV0
d29yazJOZXR3b3JrRXJyb3IgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sK
KyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkg
Y2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbE5ldHdvcmsyTmV0d29ya0Vy
cm9yIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07Cit9CisKK0BlbmQKKworCisjIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorCisjIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sVHlwZXMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbiBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFs
LmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8
V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKyNpbXBvcnQgPHd0
Zi9Bc3NlcnRpb25zLmg+CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1l
c3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sTmV0d29yazJO
ZXR3b3JrRXJyb3IKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBO
U0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZAoreworICAgIGlmICghKHNlbGYg
PSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AibWVzc2FnZSJdLCBAIm1lc3NhZ2Ui
KTsKKyAgICBzZWxmLm1lc3NhZ2UgPSBwYXlsb2FkW0AibWVzc2FnZSJdOworCisgICAgVEhST1df
RVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiY29kZSJdLCBAImNvZGUi
KTsKKyAgICBzZWxmLmNvZGUgPSBbcGF5bG9hZFtAImNvZGUiXSBpbnRlZ2VyVmFsdWVdOworCisg
ICAgcmV0dXJuIHNlbGY7Cit9CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVj
dDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopb2JqZWN0Cit7CisgICAgaWYgKCEoc2VsZiA9IFtz
dXBlciBpbml0V2l0aEpTT05PYmplY3Q6W29iamVjdCB0b0pTT05PYmplY3RdLmdldCgpXSkpCisg
ICAgICAgIHJldHVybiBuaWw7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlIGNvZGU6KGludCljb2RlCit7
CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisK
KyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKG1lc3NhZ2UsIEAibWVz
c2FnZSIpOworCisgICAgc2VsZi5tZXNzYWdlID0gbWVzc2FnZTsKKyAgICBzZWxmLmNvZGUgPSBj
b2RlOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpc2V0TWVzc2FnZTooTlNTdHJp
bmcgKiltZXNzYWdlCit7CisgICAgW3N1cGVyIHNldFN0cmluZzptZXNzYWdlIGZvcktleTpAIm1l
c3NhZ2UiXTsKK30KKworLSAoTlNTdHJpbmcgKiltZXNzYWdlCit7CisgICAgcmV0dXJuIFtzdXBl
ciBzdHJpbmdGb3JLZXk6QCJtZXNzYWdlIl07Cit9CisKKy0gKHZvaWQpc2V0Q29kZTooaW50KWNv
ZGUKK3sKKyAgICBbc3VwZXIgc2V0SW50ZWdlcjpjb2RlIGZvcktleTpAImNvZGUiXTsKK30KKwor
LSAoaW50KWNvZGUKK3sKKyAgICByZXR1cm4gW3N1cGVyIGludGVnZXJGb3JLZXk6QCJjb2RlIl07
Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbi1yZXN1bHQgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2FtZS10eXBl
LWlkLWRpZmZlcmVudC1kb21haW4uanNvbi1yZXN1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWZkMGM2NmMwOGE2
ZTRkYTBjMDQxOGJjMWJkMzYyODk1OTkxYWUzMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zYW1lLXR5cGUt
aWQtZGlmZmVyZW50LWRvbWFpbi5qc29uLXJlc3VsdApAQCAtMCwwICsxLDg2MSBAQAorIyMjIEJl
Z2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcy5pbgorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0
b3JCYWNrZW5kQ29tbWFuZHMuanMuaW4KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNh
bWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisKK25hbWVz
cGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Citw
dWJsaWM6CisgICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3Bh
dGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNw
YXRjaGVyKTsgfQorICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNv
bnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KK3ByaXZhdGU6CisgICAg
UmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOworfTsKKworCisK
KworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tl
bmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJz
LmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVy
ZW50LWRvbWFpbi5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3R5cGVk
ZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisj
IyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTog
VGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRl
c3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNs
dWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyNpbmNsdWRl
ICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCisjZW5kaWYgLy8gRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKK25hbWVzcGFjZSBJbnNwZWN0b3Igewor
CisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tl
bmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNo
ZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlm
ZmVyZW50LWRvbWFpbi5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5j
bHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
KworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEZyb250ZW5kUm91dGVyOworCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hl
cnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21h
aW4uanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVy
cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpz
b24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KKyNp
bmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisK
K25hbWVzcGFjZSBQcm90b2NvbCB7CisKKworCisKKworLy8gVHlwZWRlZnMuCituYW1lc3BhY2Ug
UnVudGltZSB7CisvKiBVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIuICovCit0eXBlZGVmIFN0cmlu
ZyBSZW1vdGVPYmplY3RJZDsKK30gLy8gUnVudGltZQorCituYW1lc3BhY2UgUnVudGltZTIgewor
LyogVW5pcXVlIG9iamVjdCBpZGVudGlmaWVyLiAqLwordHlwZWRlZiBTdHJpbmcgUmVtb3RlT2Jq
ZWN0SWQ7Cit9IC8vIFJ1bnRpbWUyCisvLyBFbmQgb2YgdHlwZWRlZnMuCisKKworCit9IC8vIG5h
bWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xP
YmplY3RzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1p
ZC1kaWZmZXJlbnQtZG9tYWluLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0
cy5oIgorCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFByb3RvY29sIHsK
KworCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8d3Rm
L1JldGFpblB0ci5oPgorCisKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3Bh
dGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVy
cy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZm
ZXJlbnQtZG9tYWluLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRj
aGVycy5oIgorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5o
PgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisK
KyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9y
L1Rlc3RQcm90b2NvbC5oPgorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIp
KSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0CitAZW5k
CisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbi5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2lt
cG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisjaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgorI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgorCit1c2luZyBu
YW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xs
ZXI7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxl
SW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5p
dF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIEFTU0VSVChjb250
cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAgcmV0dXJuIHNlbGY7
Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworQGVu
ZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorCisjIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJv
dG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMu
aCIKKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0
b3I7CisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisK
KyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRp
b24uaD4KKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgor
CisKKworCisKKworCisKKworCisKKworCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9j
b2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5q
c29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVz
dFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgor
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+
CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCisKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbEludGVybmFsLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlk
LWRpZmZlcmVudC1kb21haW4uanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JX
SVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgorT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBm
cm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7CisKKworCisKKworfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5t
bQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJl
bnQtZG9tYWluLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisj
aW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKworI2ltcG9ydCAiVGVzdFBy
b3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCisjaW1wb3J0IDxX
ZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorCit1c2luZyBuYW1l
c3BhY2UgSW5zcGVjdG9yOworCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cyAoUnVudGltZURvbWFpbikKKworKyAodm9pZClfcGFyc2VSZW1vdGVPYmplY3RJZDooTlNTdHJp
bmcgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisKK0BlbmQKK0BpbnRlcmZh
Y2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChSdW50aW1lMkRvbWFpbikKKworKyAodm9p
ZClfcGFyc2VSZW1vdGVPYmplY3RJZDooTlNTdHJpbmcgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6
KGlkKXBheWxvYWQ7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucyAoUnVudGltZURvbWFpbikKKworKyAodm9pZClfcGFyc2VSZW1vdGVPYmplY3RJ
ZDooTlNTdHJpbmcgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBU
SFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBjbGFzc10pOwor
ICAgICpvdXRWYWx1ZSA9IChOU1N0cmluZyAqKXBheWxvYWQ7Cit9CisKK0BlbmQKK0BpbXBsZW1l
bnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFJ1bnRpbWUyRG9tYWluKQorCisr
ICh2b2lkKV9wYXJzZVJlbW90ZU9iamVjdElkOihOU1N0cmluZyAqKilvdXRWYWx1ZSBmcm9tUGF5
bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5
bG9hZCwgW05TU3RyaW5nIGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gKE5TU3RyaW5nICopcGF5
bG9hZDsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWlu
Lmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJU
ZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2
YXRlLmg+CisjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1
ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisKKworCisKKyMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zaGFkb3dlZC1vcHRpb25hbC10
eXBlLXNldHRlcnMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpz
b24tcmVzdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVmMmNkNzkzMzA0MjQ3ZTc2NTVmM2U5ODFlYTcwMGY1N2M3
NzBmZDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpz
b24tcmVzdWx0CkBAIC0wLDAgKzEsMTA2OCBAQAorIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJh
Y2tlbmRDb21tYW5kcy5qcy5pbgorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNo
YWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpz
LmluCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25hbC10eXBl
LXNldHRlcnMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNw
cmFnbWEgb25jZQorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
CisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisK
K2NsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIHNl
dEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVy
KSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9CisgICAgQmFj
a2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNr
ZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQorcHJpdmF0ZToKKyAgICBSZWZQdHI8QmFja2VuZERpc3Bh
dGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Cit9OworCisKKworCit9IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENI
RVJTKQorIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKwor
IyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3Ry
aW5nOworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRp
b25hbC10eXBlLXNldHRlcnMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNo
ZXJzLmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRl
ci5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVz
dHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCisjaWYgRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVycy5oIgorI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK30gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3Bw
CisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpz
b24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZh
bHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5z
cGVjdG9yIHsKKworY2xhc3MgRnJvbnRlbmRSb3V0ZXI7CisKK30gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbiBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+CisjaW5jbHVkZSA8d3RmL0Fz
c2VydGlvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCituYW1lc3BhY2UgUHJv
dG9jb2wgeworCisKKworLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCituYW1lc3BhY2UgUnVudGlt
ZSB7CitjbGFzcyBLZXlQYXRoOworfSAvLyBSdW50aW1lCisvLyBFbmQgb2YgZm9yd2FyZCBkZWNs
YXJhdGlvbnMuCisKKworCisKK25hbWVzcGFjZSBUZXN0SGVscGVycyB7CisKK1N0cmluZyBnZXRF
bnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmlu
ZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkKK3sKKyAgICByZXR1cm4gZ2V0RW51
bUNvbnN0YW50VmFsdWUoc3RhdGljX2Nhc3Q8aW50PihlbnVtVmFsdWUpKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgVGVzdEhlbHBlcnMKKworbmFtZXNwYWNlIFJ1bnRpbWUgeworCisvKiBLZXkgcGF0
aC4gKi8KK2NsYXNzIEtleVBhdGggOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CitwdWJsaWM6
CisgICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAndHlwZScgd2hpbGUgZ2VuZXJhdGlu
ZyBLZXlQYXRoLgorICAgIGVudW0gY2xhc3MgVHlwZSB7CisgICAgICAgIE51bGwgPSAwLAorICAg
ICAgICBTdHJpbmcgPSAxLAorICAgICAgICBBcnJheSA9IDIsCisgICAgfTsgLy8gZW51bSBjbGFz
cyBUeXBlCisgICAgZW51bSB7CisgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKKyAgICAgICAgVHlw
ZVNldCA9IDEgPDwgMCwKKyAgICAgICAgQWxsRmllbGRzU2V0ID0gKFR5cGVTZXQpCisgICAgfTsK
KworICAgIHRlbXBsYXRlPGludCBTVEFURT4KKyAgICBjbGFzcyBCdWlsZGVyIHsKKyAgICBwcml2
YXRlOgorICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBtX3Jlc3VsdDsKKworICAgICAgICB0
ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFU
RSB8IFNURVA+Kj4odGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyKFJlZjwvKktl
eVBhdGgqL0pTT046Ok9iamVjdD4mJiBvYmplY3QpCisgICAgICAgICAgICA6IG1fcmVzdWx0KFdU
Rk1vdmUob2JqZWN0KSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RB
VEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7Cisg
ICAgICAgIH0KKyAgICAgICAgZnJpZW5kIGNsYXNzIEtleVBhdGg7CisgICAgcHVibGljOgorCisg
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUeXBlU2V0PiYgc2V0VHlwZShUeXBlIHZhbHVlKQorICAg
ICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVHlwZVNldCksIHBy
b3BlcnR5X3R5cGVfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmlu
ZygidHlwZSJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25z
dGFudFZhbHVlKHZhbHVlKSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFR5cGVTZXQ+
KCk7CisgICAgICAgIH0KKworICAgICAgICBSZWY8S2V5UGF0aD4gcmVsZWFzZSgpCisgICAgICAg
IHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVz
dWx0X2lzX25vdF9yZWFkeSk7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoS2V5
UGF0aCkgPT0gc2l6ZW9mKEpTT046Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsKKworICAgICAgICAg
ICAgUmVmPEpTT046Ok9iamVjdD4ganNvblJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxs
KCk7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8
UmVmPEtleVBhdGg+Kj4oJmpzb25SZXN1bHQpKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyoKKyAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0
b3I6CisgICAgICogUmVmPEtleVBhdGg+IHJlc3VsdCA9IEtleVBhdGg6OmNyZWF0ZSgpCisgICAg
ICogICAgIC5zZXRUeXBlKC4uLikKKyAgICAgKiAgICAgLnJlbGVhc2UoKTsKKyAgICAgKi8KKyAg
ICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICB9
CisKKyAgICB2b2lkIHNldFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0U3RyaW5nKCJzdHJpbmciX3MsIHZhbHVlKTsKKyAgICB9
CisKKyAgICB2b2lkIHNldEFycmF5KFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IHZhbHVl
KQorICAgIHsKKyAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0QXJyYXkoImFycmF5Il9zLCBX
VEZNb3ZlKHZhbHVlKSk7CisgICAgfQorfTsKKworfSAvLyBSdW50aW1lCisKKworCituYW1lc3Bh
Y2UgVGVzdEhlbHBlcnMgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBQcm90b2NvbEVudW1UeXBlPgor
T3B0aW9uYWw8UHJvdG9jb2xFbnVtVHlwZT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nKGNvbnN0
IFN0cmluZyYpOworCisvLyBFbnVtcyBpbiB0aGUgJ1J1bnRpbWUnIERvbWFpbgordGVtcGxhdGU8
PgorT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZT4g
cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6Oktl
eVBhdGg6OlR5cGU+KGNvbnN0IFN0cmluZyYpOworCit9IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVy
cworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
KyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbE9iamVjdHMuaCIKKworI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK25hbWVzcGFj
ZSBQcm90b2NvbCB7CisKK25hbWVzcGFjZSBUZXN0SGVscGVycyB7CisKK3N0YXRpYyBjb25zdCBj
aGFyKiBjb25zdCBlbnVtX2NvbnN0YW50X3ZhbHVlc1tdID0geworICAgICJudWxsIiwKKyAgICAi
c3RyaW5nIiwKKyAgICAiYXJyYXkiLAorfTsKKworU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVl
KGludCBjb2RlKSB7CisgICAgcmV0dXJuIGVudW1fY29uc3RhbnRfdmFsdWVzW2NvZGVdOworfQor
CisvLyBFbnVtcyBpbiB0aGUgJ1J1bnRpbWUnIERvbWFpbgorCit0ZW1wbGF0ZTw+CitPcHRpb25h
bDxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlPiBwYXJzZUVudW1W
YWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlw
ZT4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKK3sKKyAgICBzdGF0aWMgY29uc3Qgc2l6
ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7CisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90
b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZTo6TnVsbCwKKyAgICAgICAgKHNpemVfdClJbnNw
ZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlOjpTdHJpbmcsCisgICAgICAg
IChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZTo6QXJy
YXksCisgICAgfTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDM7ICsraSkKKyAgICAgICAg
aWYgKHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVz
W2ldXSkKKyAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6
S2V5UGF0aDo6VHlwZSljb25zdGFudFZhbHVlc1tpXTsKKworICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCisKKworCit9IC8vIG5hbWVzcGFj
ZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFj
a2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFk
b3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5h
dGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKKwor
CituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKwor
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcu
aCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVk
ZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorCituYW1lc3BhY2UgSW5z
cGVjdG9yIHsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xDb25maWd1cmF0aW9uLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBz
aGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4K
KworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRl
c3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAorQGVuZAorCisKKyMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
c2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgi
CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9j
b2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0
ZURpc3BhdGNoYWJsZUFnZW50Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJs
ZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0
b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCit7CisgICAg
QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKK30KKworLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9s
bGVyKiljb250cm9sbGVyCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNl
bGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9j
b250cm9sbGVyID0gY29udHJvbGxlcjsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClk
ZWFsbG9jCit7CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCitAZW5kCisKKworIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5o
IgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPHd0
Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2wuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRv
d2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKKyNpbXBv
cnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KKworCitAY2xhc3MgVGVz
dFByb3RvY29sUnVudGltZUtleVBhdGg7CisKK3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRl
c3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZSkgeworICAgIFRlc3RQcm90b2NvbFJ1bnRpbWVL
ZXlQYXRoVHlwZU51bGwsCisgICAgVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlU3RyaW5n
LAorICAgIFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZUFycmF5LAorfTsKKworX19hdHRy
aWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2Nv
bFJ1bnRpbWVLZXlQYXRoIDogUldJUHJvdG9jb2xKU09OT2JqZWN0CistIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsK
Ky0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05P
YmplY3QgKilqc29uT2JqZWN0OworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVHlwZTooVGVzdFBy
b3RvY29sUnVudGltZUtleVBhdGhUeXBlKXR5cGU7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkg
KG5vbmF0b21pYywgYXNzaWduKSBUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGUgdHlwZTsK
Ky8qIG9wdGlvbmFsICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqc3Ry
aW5nOworLyogb3B0aW9uYWwgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TQXJyYXkv
KjxOU1N0cmluZz4qLyAqYXJyYXk7CitAZW5kCisKKworCisKKworCisjaW1wb3J0IDxXZWJJbnNw
ZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+CisKKyMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVy
bmFsLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25h
bC10eXBlLXNldHRlcnMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9i
amVjdFByaXZhdGUuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVj
dG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKworCisKKworIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0
IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+CisKK25hbWVzcGFj
ZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+CitPcHRpb25h
bDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsK
KworaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQ
YXRoVHlwZSB2YWx1ZSkKK3sKKyAgICBzd2l0Y2godmFsdWUpIHsKKyAgICBjYXNlIFRlc3RQcm90
b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZU51bGw6CisgICAgICAgIHJldHVybiAibnVsbCJfczsKKyAg
ICBjYXNlIFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZVN0cmluZzoKKyAgICAgICAgcmV0
dXJuICJzdHJpbmciX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGVB
cnJheToKKyAgICAgICAgcmV0dXJuICJhcnJheSJfczsKKyAgICB9Cit9CisKK3RlbXBsYXRlPD4K
K2lubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGU+IGZyb21Qcm90
b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSAibnVs
bCIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGVOdWxsOwor
ICAgIGlmICh2YWx1ZSA9PSAic3RyaW5nIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFJ1
bnRpbWVLZXlQYXRoVHlwZVN0cmluZzsKKyAgICBpZiAodmFsdWUgPT0gImFycmF5IikKKyAgICAg
ICAgcmV0dXJuIFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZUFycmF5OworICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisKKyMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbiBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90
b2NvbFR5cGVQYXJzZXIuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05P
YmplY3RQcml2YXRlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbnRlcmZh
Y2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChSdW50aW1lRG9tYWluKQorCisrICh2b2lk
KV9wYXJzZUtleVBhdGg6KFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoICoqKW91dFZhbHVlIGZy
b21QYXlsb2FkOihpZClwYXlsb2FkOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMgKFJ1bnRpbWVEb21haW4pCisKKysgKHZvaWQpX3BhcnNlS2V5
UGF0aDooVGVzdFByb3RvY29sUnVudGltZUtleVBhdGggKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6
KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQs
IFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbFJ1
bnRpbWVLZXlQYXRoIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07Cit9CisKK0BlbmQK
KworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorCisjIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbiBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVy
bmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9y
dCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKyNpbXBvcnQg
PHd0Zi9Bc3NlcnRpb25zLmg+CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBu
YW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sUnVudGlt
ZUtleVBhdGgKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBOU0Rp
Y3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZAoreworICAgIGlmICghKHNlbGYgPSBb
c3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AidHlwZSJdLCBAInR5cGUiKTsKKyAgICBP
cHRpb25hbDxUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGU+IHR5cGUgPSBmcm9tUHJvdG9j
b2xTdHJpbmc8VGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlPihwYXlsb2FkW0AidHlwZSJd
KTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9FTlVNX1ZBTFVFKHR5cGUsIEAidHlwZSIp
OworICAgIHNlbGYudHlwZSA9IHR5cGUudmFsdWUoKTsKKworICAgIHNlbGYuc3RyaW5nID0gcGF5
bG9hZFtAInN0cmluZyJdOworCisgICAgc2VsZi5hcnJheSA9IHBheWxvYWRbQCJhcnJheSJdOwor
CisgICAgcmV0dXJuIHNlbGY7Cit9CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9i
amVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopb2JqZWN0Cit7CisgICAgaWYgKCEoc2VsZiA9
IFtzdXBlciBpbml0V2l0aEpTT05PYmplY3Q6W29iamVjdCB0b0pTT05PYmplY3RdLmdldCgpXSkp
CisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoVHlwZTooVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlKXR5cGUK
K3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsK
KworICAgIHNlbGYudHlwZSA9IHR5cGU7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9p
ZClzZXRUeXBlOihUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGUpdHlwZQoreworICAgIFtz
dXBlciBzZXRTdHJpbmc6dG9Qcm90b2NvbFN0cmluZyh0eXBlKSBmb3JLZXk6QCJ0eXBlIl07Cit9
CisKKy0gKFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZSl0eXBlCit7CisgICAgcmV0dXJu
IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGU+KFtzdXBl
ciBzdHJpbmdGb3JLZXk6QCJ0eXBlIl0pLnZhbHVlKCk7Cit9CisKKy0gKHZvaWQpc2V0U3RyaW5n
OihOU1N0cmluZyAqKXN0cmluZworeworICAgIFtzdXBlciBzZXRTdHJpbmc6c3RyaW5nIGZvcktl
eTpAInN0cmluZyJdOworfQorCistIChOU1N0cmluZyAqKXN0cmluZworeworICAgIHJldHVybiBb
c3VwZXIgc3RyaW5nRm9yS2V5OkAic3RyaW5nIl07Cit9CisKKy0gKHZvaWQpc2V0QXJyYXk6KE5T
QXJyYXkvKjxOU1N0cmluZz4qLyAqKWFycmF5Cit7CisgICAgW3N1cGVyIHNldEpTT05BcnJheTp0
b0pTT05TdHJpbmdBcnJheShhcnJheSkgZm9yS2V5OkAiYXJyYXkiXTsKK30KKworLSAoTlNBcnJh
eS8qPE5TU3RyaW5nPiovICopYXJyYXkKK3sKKyAgICByZXR1cm4gdG9PYmpDU3RyaW5nQXJyYXko
W3N1cGVyIEpTT05BcnJheUZvcktleTpAImFycmF5Il0pOworfQorCitAZW5kCisKKworIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3Nob3VsZC1zdHJpcC1jb21t
ZW50cy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9leHBlY3RlZC9zaG91bGQtc3RyaXAtY29tbWVudHMuanNvbi1yZXN1bHQKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMzQ4YWNlOTNiYWIwOTQ3ZGFmODViNDVmNTljOWZjYWE2NzAyZGUwMAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC9zaG91bGQtc3RyaXAtY29tbWVudHMuanNvbi1yZXN1bHQKQEAgLTAsMCArMSw4MTcg
QEAKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMuaW4KKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaG91bGQtc3RyaXAtY29tbWVudHMuanNvbiBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisjIyMgRW5kIEZpbGU6IEluc3Bl
Y3RvckJhY2tlbmRDb21tYW5kcy5qcy5pbgorCisjIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
c2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisKK25hbWVzcGFjZSBJ
bnNwZWN0b3IgeworCitjbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6
CisgICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+
JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVy
KTsgfQorICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsg
cmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KK3ByaXZhdGU6CisgICAgUmVmUHRy
PEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOworfTsKKworCisKKworfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVS
TkFURV9ESVNQQVRDSEVSUykKKyMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNw
YXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaG91bGQtc3RyaXAtY29tbWVudHMuanNv
biBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0eXBlZGVmIFN0cmluZyBFcnJv
clN0cmluZzsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBU
ZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlz
cGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0
cmlwLWNvbW1lbnRzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5o
IgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4K
KyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3ll
ZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5k
RGlzcGF0Y2hlcnMuaCIKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCit9IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisj
IyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHNob3VsZC1zdHJpcC1jb21tZW50cy5qc29uIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2Ns
YXNzIEZyb250ZW5kUm91dGVyOworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQg
RmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZy
b250ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
c2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlz
cGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5k
Um91dGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5z
cGVjdG9yIHsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVz
dEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xP
YmplY3RzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaG91bGQtc3RyaXAt
Y29tbWVudHMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xU
eXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0
b3IgeworCisKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworCisKKworCisKKworCisKK30gLy8g
bmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bE9iamVjdHMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0
cmlwLWNvbW1lbnRzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgor
CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworCisK
K30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisj
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHNob3VsZC1zdHJpcC1jb21tZW50cy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4K
KworCisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaG91bGQtc3RyaXAtY29tbWVudHMuanNvbiBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgor
I2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0
b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24uaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNob3Vs
ZC1zdHJpcC1jb21tZW50cy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgorCitfX2F0dHJpYnV0
ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29u
ZmlndXJhdGlvbiA6IE5TT2JqZWN0CitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xDb25maWd1cmF0aW9uLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3Vy
YXRpb24ubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaG91bGQtc3RyaXAt
Y29tbWVudHMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNp
bXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKKworI2ltcG9ydCAiVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5o
IgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4K
KyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5o
PgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXJzLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9u
IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNv
bnRyb2xsZXIqIF9jb250cm9sbGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250
cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAg
ICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5p
bDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVy
OworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbc3VwZXIg
ZGVhbGxvY107Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZp
Z3VyYXRpb24ubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hl
cnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaG91bGQtc3RyaXAtY29t
bWVudHMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBv
cnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucy5oIgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNw
YWNlIEluc3BlY3RvcjsKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0
Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5k
YXRpb24uaD4KKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5o
PgorCisKKworCisKKworCisKKworCisKKworCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJv
dG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+CisKKyMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaG91bGQtc3RyaXAtY29tbWVudHMuanNvbiBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90
b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKKyNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2lt
cG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xJbnRlcm5hbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNob3VsZC1zdHJpcC1jb21t
ZW50cy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9y
dCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJh
eUNvbnZlcnNpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBPYmpDRW51bVR5cGU+CitPcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0
cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisK
KyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHNob3VsZC1zdHJpcC1jb21tZW50cy5qc29uIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3Rv
Y29sVHlwZVBhcnNlci5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9i
amVjdFByaXZhdGUuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisKKworCisK
KyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIHNob3VsZC1zdHJpcC1jb21tZW50cy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2lt
cG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0
b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorI2ltcG9ydCA8d3RmL0Fzc2VydGlv
bnMuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNw
ZWN0b3I7CisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVk
L3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uLXJlc3VsdCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBl
LWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbi1yZXN1bHQKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMjcwMDBhMTExY2FjZDc3YzU2Mjk0MDljMDkxZjhkMjQxMTA2YTk4YwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC90eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbi1yZXN1bHQK
QEAgLTAsMCArMSw4MzggQEAKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFu
ZHMuanMuaW4KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0
aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcy5p
bgorCisjIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2Vk
LXByaW1pdGl2ZS10eXBlLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0
b3IgeworCitjbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAg
dm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlz
cGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQor
ICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJu
IG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KK3ByaXZhdGU6CisgICAgUmVmUHRyPEJhY2tl
bmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOworfTsKKworCisKKworfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKKyMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVy
cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0
aXZlLXR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0eXBlZGVm
IFN0cmluZyBFcnJvclN0cmluZzsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMj
IEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRl
c3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5o
PgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQor
I2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNlbmRpZiAvLyBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBU
ZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5k
RGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVj
bGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9j
b2xPYmplY3RzLmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEZyb250
ZW5kUm91dGVyOworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVz
dEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlz
cGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNs
YXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEZy
b250ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1l
c3BhY2UgSW5zcGVjdG9yIHsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQg
RmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xPYmplY3RzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBl
LWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRp
b25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFByb3RvY29s
IHsKKworCisKKworCisvLyBUeXBlZGVmcy4KK25hbWVzcGFjZSBSdW50aW1lIHsKKy8qIFVuaXF1
ZSBvYmplY3QgaWRlbnRpZmllci4gKi8KK3R5cGVkZWYgaW50IFJlbW90ZU9iamVjdElkOworfSAv
LyBSdW50aW1lCisvLyBFbmQgb2YgdHlwZWRlZnMuCisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90
b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sT2JqZWN0cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNl
ZC1wcmltaXRpdmUtdHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMu
aCIKKworI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisK
KworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
KworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorCisjIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNv
biBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbmNs
dWRlIDx3dGYvUmV0YWluUHRyLmg+CisKKworCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNr
ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERp
c3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNs
YXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90
b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJu
YWwuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbmNsdWRl
IDx3dGYvSlNPTlZhbHVlcy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3Bh
dGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFz
ZWQtcHJpbWl0aXZlLXR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KKworX19hdHRyaWJ1
dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbENv
bmZpZ3VyYXRpb24gOiBOU09iamVjdAorQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1
cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJh
dGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCisK
KyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xC
YWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURp
c3BhdGNoYWJsZUFnZW50Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUlu
c3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7
CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCit7CisgICAgQXVn
bWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKK30KKworLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVy
Kiljb250cm9sbGVyCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYp
CisgICAgICAgIHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250
cm9sbGVyID0gY29udHJvbGxlcjsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFs
bG9jCit7CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRl
cm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBv
cnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKwor
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2wuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0
aW9uLmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4K
KworCisKKworCisKKworCisKKworCisKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3Rv
Y29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1p
dGl2ZS10eXBlLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisj
aW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQ
cml2YXRlLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNv
bnRyb2xsZXIuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKKworCisKKyMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0
eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbiBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2lt
cG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgorCituYW1l
c3BhY2UgSW5zcGVjdG9yIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgorT3B0
aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1
ZSk7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlw
ZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9j
b2xUeXBlUGFyc2VyLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2Jq
ZWN0UHJpdmF0ZS5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW50ZXJmYWNl
IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoUnVudGltZURvbWFpbikKKworKyAodm9pZClf
cGFyc2VSZW1vdGVPYmplY3RJZDooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlk
KXBheWxvYWQ7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucyAoUnVudGltZURvbWFpbikKKworKyAodm9pZClfcGFyc2VSZW1vdGVPYmplY3RJZDoo
TlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJP
V19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU051bWJlciBjbGFzc10pOworICAg
ICpvdXRWYWx1ZSA9IChOU051bWJlciAqKXBheWxvYWQ7Cit9CisKK0BlbmQKKworCisjIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorCisjIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sVHlwZXMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0
eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbiBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFs
LmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8
V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKyNpbXBvcnQgPHd0
Zi9Bc3NlcnRpb25zLmg+CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1l
c3BhY2UgSW5zcGVjdG9yOworCisKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVz
Lm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24tcmVzdWx0IGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5
cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kZWJmZjc5
MThiYWIxOTVjNzk2MDIxYTM3MWVmNzZmZTRhZjVhYzRlCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUt
ZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uLXJlc3VsdApAQCAtMCwwICsxLDEwMTkgQEAKKyMj
IyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMuaW4KKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbiBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKy8vIERlYnVnZ2VyCitJbnNw
ZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJEZWJ1Z2dlciIsIG51bGwpOworSW5zcGVjdG9y
QmFja2VuZC5yZWdpc3RlckVudW0oIkRlYnVnZ2VyLlJlYXNvbiIsIHtEaWVkOiAiRGllZCIsIEZh
aW50ZWQ6ICJGYWludGVkIiwgSHVuZ3J5OiAiSHVuZ3J5In0pOworSW5zcGVjdG9yQmFja2VuZC5h
Y3RpdmF0ZURvbWFpbigiRGVidWdnZXIiLCBudWxsKTsKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9y
QmFja2VuZENvbW1hbmRzLmpzLmluCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBl
LWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKworbmFtZXNwYWNl
IEluc3BlY3RvciB7CisKK2NsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1Ymxp
YzoKKyAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hl
cj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNo
ZXIpOyB9CisgICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3Qg
eyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQorcHJpdmF0ZToKKyAgICBSZWZQ
dHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Cit9OworCisKKworCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQorIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERp
c3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXkt
dHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3R5cGVkZWYgU3Ry
aW5nIEVycm9yU3RyaW5nOworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5k
IEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJh
Y2tlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0
eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0QmFja2Vu
ZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9u
dGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3Rm
L05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCisjaWYg
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjaW5jbHVkZSAiVGVzdEFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgorI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK30g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0
Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10
eXBlLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDx3dGYv
SlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKKworY2xhc3MgRnJvbnRlbmRSb3V0ZXI7CisKK30gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisKKyMj
IyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbiBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+CisjaW5jbHVkZSA8d3RmL0Fz
c2VydGlvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCituYW1lc3BhY2UgUHJv
dG9jb2wgeworCisKKworLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCituYW1lc3BhY2UgRGVidWdn
ZXIgeworZW51bSBjbGFzcyBSZWFzb247Cit9IC8vIERlYnVnZ2VyCisvLyBFbmQgb2YgZm9yd2Fy
ZCBkZWNsYXJhdGlvbnMuCisKKworLy8gVHlwZWRlZnMuCituYW1lc3BhY2UgRGVidWdnZXIgewor
dHlwZWRlZiBpbnQgQnJlYWtwb2ludElkOworfSAvLyBEZWJ1Z2dlcgorCituYW1lc3BhY2UgUnVu
dGltZSB7Cit0eXBlZGVmIGludCBPYmplY3RJZDsKK3R5cGVkZWYgSlNPTjo6QXJyYXlPZjxpbnQ+
IEx1Y2t5TnVtYmVyczsKK3R5cGVkZWYgSlNPTjo6QXJyYXlPZjxTdHJpbmc+IEJhYnlOYW1lczsK
K3R5cGVkZWYgSlNPTjo6QXJyYXlPZjxpbnQ+IE5ld09iamVjdHM7Cit0eXBlZGVmIEpTT046OkFy
cmF5T2Y8aW50PiBPbGRPYmplY3RzOwordHlwZWRlZiBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb24+IFN0b3BSZWFzb25zOworfSAvLyBSdW50aW1lCisv
LyBFbmQgb2YgdHlwZWRlZnMuCisKK25hbWVzcGFjZSBUZXN0SGVscGVycyB7CisKK1N0cmluZyBn
ZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0
cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkKK3sKKyAgICByZXR1cm4gZ2V0
RW51bUNvbnN0YW50VmFsdWUoc3RhdGljX2Nhc3Q8aW50PihlbnVtVmFsdWUpKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKKworbmFtZXNwYWNlIERlYnVnZ2VyIHsKKworZW51bSBj
bGFzcyBSZWFzb24geworICAgIERpZWQgPSAwLAorICAgIEZhaW50ZWQgPSAxLAorICAgIEh1bmdy
eSA9IDIsCit9OyAvLyBlbnVtIGNsYXNzIFJlYXNvbgorCit9IC8vIERlYnVnZ2VyCisKKworCitu
YW1lc3BhY2UgVGVzdEhlbHBlcnMgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBQcm90b2NvbEVudW1U
eXBlPgorT3B0aW9uYWw8UHJvdG9jb2xFbnVtVHlwZT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5n
KGNvbnN0IFN0cmluZyYpOworCisvLyBFbnVtcyBpbiB0aGUgJ0RlYnVnZ2VyJyBEb21haW4KK3Rl
bXBsYXRlPD4KK09wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb24+
IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6
UmVhc29uPihjb25zdCBTdHJpbmcmKTsKKworfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKKwor
fSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKK25h
bWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7
CisKKy8vIEhhc2ggZGVjbGFyYXRpb25zIGluIHRoZSAnRGVidWdnZXInIERvbWFpbgordGVtcGxh
dGU8Pgorc3RydWN0IERlZmF1bHRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpS
ZWFzb24+IHsKKyAgICB0eXBlZGVmIEludEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdn
ZXI6OlJlYXNvbj4gSGFzaDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9i
amVjdHMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJh
dGlvbi1hcnJheS10eXBlLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5o
IgorCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKwor
bmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKKworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1f
Y29uc3RhbnRfdmFsdWVzW10gPSB7CisgICAgIkRpZWQiLAorICAgICJGYWludGVkIiwKKyAgICAi
SHVuZ3J5IiwKK307CisKK1N0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgewor
ICAgIHJldHVybiBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb2RlXTsKK30KKworLy8gRW51bXMgaW4g
dGhlICdEZWJ1Z2dlcicgRG9tYWluCisKK3RlbXBsYXRlPD4KK09wdGlvbmFsPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb24+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNw
ZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uPihjb25zdCBTdHJpbmcmIHByb3RvY29s
U3RyaW5nKQoreworICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsK
KyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uOjpE
aWVkLAorICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFz
b246OkZhaW50ZWQsCisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdn
ZXI6OlJlYXNvbjo6SHVuZ3J5LAorICAgIH07CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAz
OyArK2kpCisgICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVl
c1tjb25zdGFudFZhbHVlc1tpXV0pCisgICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRlYnVnZ2VyOjpSZWFzb24pY29uc3RhbnRWYWx1ZXNbaV07CisKKyAgICByZXR1cm4g
V1RGOjpudWxsb3B0OworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycworCisKKworfSAv
LyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5o
PgorCisKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKwor
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5q
c29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29u
ZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zLmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKworbmFtZXNwYWNl
IEluc3BlY3RvciB7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+
CisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBU
ZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKK0BlbmQKKworCisjIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbi5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgor
CisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29s
QmFja2VuZERpc3BhdGNoZXJzLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVE
aXNwYXRjaGFibGVBZ2VudC5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJ
bnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9y
OworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgoreworICAgIEF1
Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Cit9CisKKy0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxl
ciopY29udHJvbGxlcgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxm
KQorICAgICAgICByZXR1cm4gbmlsOworICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBfY29u
dHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVh
bGxvYworeworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKwor
I2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDx3dGYvSlNP
TlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisKKyMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xh
cmF0aW9uLWFycmF5LXR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCisjaW1wb3J0IDxXZWJJ
bnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+CisKKworCisKK3R5cGVkZWYgTlNfRU5V
TShOU0ludGVnZXIsIFRlc3RQcm90b2NvbERlYnVnZ2VyUmVhc29uKSB7CisgICAgVGVzdFByb3Rv
Y29sRGVidWdnZXJSZWFzb25EaWVkLAorICAgIFRlc3RQcm90b2NvbERlYnVnZ2VyUmVhc29uRmFp
bnRlZCwKKyAgICBUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbkh1bmdyeSwKK307CisKKworCisK
KworCisKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmls
aXR5T2JqZWN0cy5oPgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBv
cnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0
Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPHd0Zi9KU09O
VmFsdWVzLmg+CisKKworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAor
CisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNv
biBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQ
cm90b2NvbC5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJz
aW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgT2Jq
Q0VudW1UeXBlPgorT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29u
c3QgU3RyaW5nJiB2YWx1ZSk7CisKK2lubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0
UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbiB2YWx1ZSkKK3sKKyAgICBzd2l0Y2godmFsdWUpIHsKKyAg
ICBjYXNlIFRlc3RQcm90b2NvbERlYnVnZ2VyUmVhc29uRGllZDoKKyAgICAgICAgcmV0dXJuICJE
aWVkIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sRGVidWdnZXJSZWFzb25GYWludGVkOgorICAg
ICAgICByZXR1cm4gIkZhaW50ZWQiX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEZWJ1Z2dlclJl
YXNvbkh1bmdyeToKKyAgICAgICAgcmV0dXJuICJIdW5ncnkiX3M7CisgICAgfQorfQorCit0ZW1w
bGF0ZTw+CitpbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sRGVidWdnZXJSZWFzb24+IGZyb21Q
cm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSAi
RGllZCIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbkRpZWQ7Cisg
ICAgaWYgKHZhbHVlID09ICJGYWludGVkIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERl
YnVnZ2VyUmVhc29uRmFpbnRlZDsKKyAgICBpZiAodmFsdWUgPT0gIkh1bmdyeSIpCisgICAgICAg
IHJldHVybiBUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbkh1bmdyeTsKKyAgICByZXR1cm4gV1RG
OjpudWxsb3B0OworfQorCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKworIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29s
VHlwZVBhcnNlci5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVj
dFByaXZhdGUuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGludGVyZmFjZSBU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKERlYnVnZ2VyRG9tYWluKQorCisrICh2b2lkKV9w
YXJzZUJyZWFrcG9pbnRJZDooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBh
eWxvYWQ7CisrICh2b2lkKV9wYXJzZVJlYXNvbjooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBh
eWxvYWQ6KGlkKXBheWxvYWQ7CisKK0BlbmQKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zIChSdW50aW1lRG9tYWluKQorCisrICh2b2lkKV9wYXJzZU9iamVjdElkOihOU051
bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNl
THVja3lOdW1iZXJzOihOU0FycmF5Lyo8TlNOdW1iZXI+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxv
YWQ6KGlkKXBheWxvYWQ7CisrICh2b2lkKV9wYXJzZUJhYnlOYW1lczooTlNBcnJheS8qPE5TU3Ry
aW5nPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworKyAodm9pZClfcGFy
c2VOZXdPYmplY3RzOihOU0FycmF5Lyo8TlNOdW1iZXI+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxv
YWQ6KGlkKXBheWxvYWQ7CisrICh2b2lkKV9wYXJzZU9sZE9iamVjdHM6KE5TQXJyYXkvKjxOU051
bWJlcj4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3Bh
cnNlU3RvcFJlYXNvbnM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5
bG9hZDooaWQpcGF5bG9hZDsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zIChEZWJ1Z2dlckRvbWFpbikKKworKyAodm9pZClfcGFyc2VCcmVha3Bv
aW50SWQ6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7Cisg
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNOdW1iZXIgY2xhc3Nd
KTsKKyAgICAqb3V0VmFsdWUgPSAoTlNOdW1iZXIgKilwYXlsb2FkOworfQorCisrICh2b2lkKV9w
YXJzZVJlYXNvbjooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQK
K3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBj
bGFzc10pOworICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbERlYnVnZ2VyUmVhc29uPiByZXN1bHQg
PSBJbnNwZWN0b3I6OmZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNv
bj4ocGF5bG9hZCk7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfRU5VTV9WQUxVRShyZXN1
bHQsIEAiUmVhc29uIik7CisgICAgKm91dFZhbHVlID0gQChyZXN1bHQudmFsdWUoKSk7Cit9CisK
K0BlbmQKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFJ1bnRp
bWVEb21haW4pCisKKysgKHZvaWQpX3BhcnNlT2JqZWN0SWQ6KE5TTnVtYmVyICoqKW91dFZhbHVl
IGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURf
VFlQRShwYXlsb2FkLCBbTlNOdW1iZXIgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSAoTlNOdW1i
ZXIgKilwYXlsb2FkOworfQorCisrICh2b2lkKV9wYXJzZUx1Y2t5TnVtYmVyczooTlNBcnJheS8q
PE5TTnVtYmVyPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNBcnJheS8qPE5TTnVtYmVy
PiovIGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gKE5TQXJyYXkvKjxOU051bWJlcj4qLyAqKXBh
eWxvYWQ7Cit9CisKKysgKHZvaWQpX3BhcnNlQmFieU5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+
Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENF
UFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gY2xhc3Nd
KTsKKyAgICAqb3V0VmFsdWUgPSAoTlNBcnJheS8qPE5TU3RyaW5nPiovICopcGF5bG9hZDsKK30K
KworKyAodm9pZClfcGFyc2VOZXdPYmplY3RzOihOU0FycmF5Lyo8TlNOdW1iZXI+Ki8gKiopb3V0
VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9S
X0JBRF9UWVBFKHBheWxvYWQsIFtOU0FycmF5Lyo8TlNOdW1iZXI+Ki8gY2xhc3NdKTsKKyAgICAq
b3V0VmFsdWUgPSAoTlNBcnJheS8qPE5TTnVtYmVyPiovICopcGF5bG9hZDsKK30KKworKyAodm9p
ZClfcGFyc2VPbGRPYmplY3RzOihOU0FycmF5Lyo8TlNOdW1iZXI+Ki8gKiopb3V0VmFsdWUgZnJv
bVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBF
KHBheWxvYWQsIFtOU0FycmF5Lyo8TlNOdW1iZXI+Ki8gY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUg
PSAoTlNBcnJheS8qPE5TTnVtYmVyPiovICopcGF5bG9hZDsKK30KKworKyAodm9pZClfcGFyc2VT
dG9wUmVhc29uczooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2Fk
OihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2Fk
LCBbTlNBcnJheS8qPE5TU3RyaW5nPiovIGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gKE5TQXJy
YXkvKjxOU1N0cmluZz4qLyAqKXBheWxvYWQ7Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sVHlwZXMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRl
Y2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVBy
b3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKyNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Cisj
aW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwor
CisKKworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVk
L3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24t
ZW51bS10eXBlLmpzb24tcmVzdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFiN2EzOTgzNmFkNDg3ZTlkMWM3MDM3
NDZjNDFmNjAwZmZkYjJjYmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1lbnVt
LXR5cGUuanNvbi1yZXN1bHQKQEAgLTAsMCArMSwxMDMyIEBACisjIyMgQmVnaW4gRmlsZTogSW5z
cGVjdG9yQmFja2VuZENvbW1hbmRzLmpzLmluCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKy8vIFJ1bnRpbWUKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0
ZXJEb21haW4oIlJ1bnRpbWUiLCBudWxsKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVt
KCJSdW50aW1lLkZhcm1BbmltYWxzIiwge1BpZ3M6ICJQaWdzIiwgQ293czogIkNvd3MiLCBDYXRz
OiAiQ2F0cyIsIEhlbnM6ICJIZW5zIn0pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0o
IlJ1bnRpbWUuVHdvTGVnZ2VkQW5pbWFscyIsIHtEdWNrczogIkR1Y2tzIiwgSGVuczogIkhlbnMi
LCBDcm93czogIkNyb3dzIiwgRmxhbWluZ29zOiAiRmxhbWluZ29zIn0pOworSW5zcGVjdG9yQmFj
a2VuZC5hY3RpdmF0ZURvbWFpbigiUnVudGltZSIsIG51bGwpOworIyMjIEVuZCBGaWxlOiBJbnNw
ZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMuaW4KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5h
dGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisKK25hbWVz
cGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Citw
dWJsaWM6CisgICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3Bh
dGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNw
YXRjaGVyKTsgfQorICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNv
bnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KK3ByaXZhdGU6CisgICAg
UmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOworfTsKKworCisK
KworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tl
bmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJz
LmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVu
dW0tdHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3R5cGVkZWYg
U3RyaW5nIEVycm9yU3RyaW5nOworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMg
RW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVz
dEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RCYWNr
ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZy
b250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3
dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNp
ZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyNpbmNsdWRlICJUZXN0
QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKwor
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNw
YXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0t
dHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8d3Rm
L0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNw
YWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEZyb250ZW5kUm91dGVyOworCit9IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorCisj
IyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbiBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KKyNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK25hbWVzcGFjZSBQcm90
b2NvbCB7CisKKworCisvLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KK25hbWVzcGFjZSBSdW50aW1l
IHsKK2VudW0gY2xhc3MgRmFybUFuaW1hbHM7CitlbnVtIGNsYXNzIFR3b0xlZ2dlZEFuaW1hbHM7
Cit9IC8vIFJ1bnRpbWUKKy8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KKworCisKKwor
bmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKKworU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGlu
dCBjb2RlKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdldEVudW1Db25zdGFudFZh
bHVlKFQgZW51bVZhbHVlKQoreworICAgIHJldHVybiBnZXRFbnVtQ29uc3RhbnRWYWx1ZShzdGF0
aWNfY2FzdDxpbnQ+KGVudW1WYWx1ZSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVy
cworCituYW1lc3BhY2UgUnVudGltZSB7CisKK2VudW0gY2xhc3MgRmFybUFuaW1hbHMgeworICAg
IFBpZ3MgPSAwLAorICAgIENvd3MgPSAxLAorICAgIENhdHMgPSAyLAorICAgIEhlbnMgPSAzLAor
fTsgLy8gZW51bSBjbGFzcyBGYXJtQW5pbWFscworCitlbnVtIGNsYXNzIFR3b0xlZ2dlZEFuaW1h
bHMgeworICAgIER1Y2tzID0gNCwKKyAgICBIZW5zID0gMywKKyAgICBDcm93cyA9IDUsCisgICAg
RmxhbWluZ29zID0gNiwKK307IC8vIGVudW0gY2xhc3MgVHdvTGVnZ2VkQW5pbWFscworCit9IC8v
IFJ1bnRpbWUKKworCisKK25hbWVzcGFjZSBUZXN0SGVscGVycyB7CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFByb3RvY29sRW51bVR5cGU+CitPcHRpb25hbDxQcm90b2NvbEVudW1UeXBlPiBwYXJzZUVu
dW1WYWx1ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJik7CisKKy8vIEVudW1zIGluIHRoZSAnUnVu
dGltZScgRG9tYWluCit0ZW1wbGF0ZTw+CitPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpS
dW50aW1lOjpGYXJtQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzPihjb25zdCBTdHJpbmcmKTsKK3RlbXBsYXRl
PD4KK09wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1h
bHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1l
OjpUd29MZWdnZWRBbmltYWxzPihjb25zdCBTdHJpbmcmKTsKKworfSAvLyBuYW1lc3BhY2UgVGVz
dEhlbHBlcnMKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
RGVmYXVsdEhhc2g7CisKKy8vIEhhc2ggZGVjbGFyYXRpb25zIGluIHRoZSAnUnVudGltZScgRG9t
YWluCit0ZW1wbGF0ZTw+CitzdHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6
UnVudGltZTo6RmFybUFuaW1hbHM+IHsKKyAgICB0eXBlZGVmIEludEhhc2g8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM+IEhhc2g7Cit9OwordGVtcGxhdGU8Pgorc3Ry
dWN0IERlZmF1bHRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFu
aW1hbHM+IHsKKyAgICB0eXBlZGVmIEludEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGlt
ZTo6VHdvTGVnZ2VkQW5pbWFscz4gSGFzaDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbE9iamVjdHMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlw
ZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xP
YmplY3RzLmgiCisKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCituYW1lc3BhY2UgUHJvdG9j
b2wgeworCituYW1lc3BhY2UgVGVzdEhlbHBlcnMgeworCitzdGF0aWMgY29uc3QgY2hhciogY29u
c3QgZW51bV9jb25zdGFudF92YWx1ZXNbXSA9IHsKKyAgICAiUGlncyIsCisgICAgIkNvd3MiLAor
ICAgICJDYXRzIiwKKyAgICAiSGVucyIsCisgICAgIkR1Y2tzIiwKKyAgICAiQ3Jvd3MiLAorICAg
ICJGbGFtaW5nb3MiLAorfTsKKworU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2Rl
KSB7CisgICAgcmV0dXJuIGVudW1fY29uc3RhbnRfdmFsdWVzW2NvZGVdOworfQorCisvLyBFbnVt
cyBpbiB0aGUgJ1J1bnRpbWUnIERvbWFpbgorCit0ZW1wbGF0ZTw+CitPcHRpb25hbDxJbnNwZWN0
b3I6OlByb3RvY29sOjpSdW50aW1lOjpGYXJtQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9tU3Ry
aW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzPihjb25zdCBTdHJp
bmcmIHByb3RvY29sU3RyaW5nKQoreworICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3RhbnRW
YWx1ZXNbXSA9IHsKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1l
OjpGYXJtQW5pbWFsczo6UGlncywKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29s
OjpSdW50aW1lOjpGYXJtQW5pbWFsczo6Q293cywKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6
OlByb3RvY29sOjpSdW50aW1lOjpGYXJtQW5pbWFsczo6Q2F0cywKKyAgICAgICAgKHNpemVfdClJ
bnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpGYXJtQW5pbWFsczo6SGVucywKKyAgICB9Owor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgNDsgKytpKQorICAgICAgICBpZiAocHJvdG9jb2xT
dHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNbaV1dKQorICAgICAg
ICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpGYXJtQW5pbWFscylj
b25zdGFudFZhbHVlc1tpXTsKKworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK3RlbXBs
YXRlPD4KK09wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFu
aW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50
aW1lOjpUd29MZWdnZWRBbmltYWxzPihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQorewor
ICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsKKyAgICAgICAgKHNp
emVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxzOjpEdWNr
cywKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUd29MZWdn
ZWRBbmltYWxzOjpIZW5zLAorICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1
bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM6OkNyb3dzLAorICAgICAgICAoc2l6ZV90KUluc3BlY3Rv
cjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM6OkZsYW1pbmdvcywKKyAgICB9
OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgNDsgKytpKQorICAgICAgICBpZiAocHJvdG9j
b2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNbaV1dKQorICAg
ICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUd29MZWdnZWRB
bmltYWxzKWNvbnN0YW50VmFsdWVzW2ldOworCisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30K
KworfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKKworCisKK30gLy8gbmFtZXNwYWNlIFByb3Rv
Y29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbE9iamVjdHMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlz
cGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFy
YXRpb24tZW51bS10eXBlLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERp
c3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCisKKworbmFtZXNwYWNl
IEluc3BlY3RvciB7CisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRl
c3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSAiVGVzdFByb3RvY29s
SW50ZXJuYWwuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNp
bmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2Vu
ZERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0
aW9uLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9u
LWVudW0tdHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgorCitfX2F0dHJpYnV0ZV9fKCh2
aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJh
dGlvbiA6IE5TT2JqZWN0CitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25m
aWd1cmF0aW9uLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24u
bW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVu
dW0tdHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lt
cG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9j
b2xJbnRlcm5hbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgi
CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgor
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+
CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0
Y2hlcnMuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVycy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24g
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29u
dHJvbGxlciogX2NvbnRyb2xsZXI7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRy
b2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgoreworICAg
IHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmls
OworICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7
CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIFtzdXBlciBk
ZWFsbG9jXTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbi5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVy
cy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24t
ZW51bS10eXBlLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisj
aW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5h
bWVzcGFjZSBJbnNwZWN0b3I7CisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERp
c3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxGb3VuZGF0
aW9uL0ZvdW5kYXRpb24uaD4KKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNP
Tk9iamVjdC5oPgorCisKKworCit0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9j
b2xSdW50aW1lRmFybUFuaW1hbHMpIHsKKyAgICBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1h
bHNQaWdzLAorICAgIFRlc3RQcm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFsc0Nvd3MsCisgICAgVGVz
dFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzQ2F0cywKKyAgICBUZXN0UHJvdG9jb2xSdW50aW1l
RmFybUFuaW1hbHNIZW5zLAorfTsKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFBy
b3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHMpIHsKKyAgICBUZXN0UHJvdG9jb2xSdW50aW1l
VHdvTGVnZ2VkQW5pbWFsc0R1Y2tzLAorICAgIFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRB
bmltYWxzSGVucywKKyAgICBUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFsc0Nyb3dz
LAorICAgIFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzRmxhbWluZ29zLAorfTsK
KworCisKKworCisKKworCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENv
bXBhdGliaWxpdHlPYmplY3RzLmg+CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKKwor
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgi
CisjaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgorI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDx3
dGYvSlNPTlZhbHVlcy5oPgorCisKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVy
bmFsLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5
cGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlD
b252ZXJzaW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordGVtcGxhdGU8dHlwZW5h
bWUgT2JqQ0VudW1UeXBlPgorT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJp
bmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7CisKK2lubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmlu
ZyhUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHMgdmFsdWUpCit7CisgICAgc3dpdGNoKHZh
bHVlKSB7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHNQaWdzOgorICAg
ICAgICByZXR1cm4gIlBpZ3MiX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFu
aW1hbHNDb3dzOgorICAgICAgICByZXR1cm4gIkNvd3MiX3M7CisgICAgY2FzZSBUZXN0UHJvdG9j
b2xSdW50aW1lRmFybUFuaW1hbHNDYXRzOgorICAgICAgICByZXR1cm4gIkNhdHMiX3M7CisgICAg
Y2FzZSBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHNIZW5zOgorICAgICAgICByZXR1cm4g
IkhlbnMiX3M7CisgICAgfQorfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgT3B0aW9uYWw8VGVzdFBy
b3RvY29sUnVudGltZUZhcm1BbmltYWxzPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5n
JiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gIlBpZ3MiKQorICAgICAgICByZXR1cm4gVGVz
dFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzUGlnczsKKyAgICBpZiAodmFsdWUgPT0gIkNvd3Mi
KQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzQ293czsKKyAg
ICBpZiAodmFsdWUgPT0gIkNhdHMiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUnVudGlt
ZUZhcm1BbmltYWxzQ2F0czsKKyAgICBpZiAodmFsdWUgPT0gIkhlbnMiKQorICAgICAgICByZXR1
cm4gVGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzSGVuczsKKyAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworfQorCitpbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29s
UnVudGltZVR3b0xlZ2dlZEFuaW1hbHMgdmFsdWUpCit7CisgICAgc3dpdGNoKHZhbHVlKSB7Cisg
ICAgY2FzZSBUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFsc0R1Y2tzOgorICAgICAg
ICByZXR1cm4gIkR1Y2tzIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dl
ZEFuaW1hbHNIZW5zOgorICAgICAgICByZXR1cm4gIkhlbnMiX3M7CisgICAgY2FzZSBUZXN0UHJv
dG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFsc0Nyb3dzOgorICAgICAgICByZXR1cm4gIkNyb3dz
Il9zOworICAgIGNhc2UgVGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHNGbGFtaW5n
b3M6CisgICAgICAgIHJldHVybiAiRmxhbWluZ29zIl9zOworICAgIH0KK30KKwordGVtcGxhdGU8
PgoraW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzPiBm
cm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUg
PT0gIkR1Y2tzIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRB
bmltYWxzRHVja3M7CisgICAgaWYgKHZhbHVlID09ICJIZW5zIikKKyAgICAgICAgcmV0dXJuIFRl
c3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzSGVuczsKKyAgICBpZiAodmFsdWUgPT0g
IkNyb3dzIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmlt
YWxzQ3Jvd3M7CisgICAgaWYgKHZhbHVlID09ICJGbGFtaW5nb3MiKQorICAgICAgICByZXR1cm4g
VGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHNGbGFtaW5nb3M7CisgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKK30KKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKworIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xU
eXBlUGFyc2VyLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0
UHJpdmF0ZS5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW50ZXJmYWNlIFRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoUnVudGltZURvbWFpbikKKworKyAodm9pZClfcGFy
c2VGYXJtQW5pbWFsczooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxv
YWQ7CisrICh2b2lkKV9wYXJzZVR3b0xlZ2dlZEFuaW1hbHM6KE5TTnVtYmVyICoqKW91dFZhbHVl
IGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFJ1bnRpbWVEb21haW4pCisKKysgKHZvaWQpX3BhcnNl
RmFybUFuaW1hbHM6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2Fk
Cit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNTdHJpbmcg
Y2xhc3NdKTsKKyAgICBPcHRpb25hbDxUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHM+IHJl
c3VsdCA9IEluc3BlY3Rvcjo6ZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbFJ1bnRpbWVG
YXJtQW5pbWFscz4ocGF5bG9hZCk7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfRU5VTV9W
QUxVRShyZXN1bHQsIEAiRmFybUFuaW1hbHMiKTsKKyAgICAqb3V0VmFsdWUgPSBAKHJlc3VsdC52
YWx1ZSgpKTsKK30KKworKyAodm9pZClfcGFyc2VUd29MZWdnZWRBbmltYWxzOihOU051bWJlciAq
KilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TU3RyaW5nIGNsYXNzXSk7CisgICAgT3B0aW9uYWw8
VGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHM+IHJlc3VsdCA9IEluc3BlY3Rvcjo6
ZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzPihw
YXlsb2FkKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9FTlVNX1ZBTFVFKHJlc3VsdCwg
QCJUd29MZWdnZWRBbmltYWxzIik7CisgICAgKm91dFZhbHVlID0gQChyZXN1bHQudmFsdWUoKSk7
Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgi
CisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgor
I2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisK
K3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworCisKKyMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpz
b24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbi1yZXN1bHQKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMDAzMTRmM2ZlYmEyMWJmNjc0ZGU4ZGE4MDI0MWI0ZmU3NDY0NjFjNgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24tcmVzdWx0CkBAIC0wLDAg
KzEsMjM5NyBAQAorIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcy5p
bgorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2Jq
ZWN0LXR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKy8v
IERhdGFiYXNlCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJEYXRhYmFzZSIsIG51
bGwpOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIkRhdGFiYXNlLk1vdXNlQnV0dG9u
Iiwge05vbmU6ICJOb25lIiwgTGVmdDogIkxlZnQiLCBNaWRkbGU6ICJNaWRkbGUiLCBSaWdodDog
IlJpZ2h0In0pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIkRhdGFiYXNlLk9wdGlv
bmFsUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHkiLCB7TFRSOiAiTFRSIiwgUlRMOiAiUlRM
In0pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIkRhdGFiYXNlLlBhcmFtZXRlckJ1
bmRsZURpcmVjdGlvbmFsaXR5Iiwge0xUUjogIkxUUiIsIFJUTDogIlJUTCJ9KTsKK0luc3BlY3Rv
ckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkRhdGFiYXNlIiwgbnVsbCk7CisjIyMgRW5kIEZpbGU6
IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcy5pbgorCisjIyMgQmVnaW4gRmlsZTogVGVzdEFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVz
LmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIu
aD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgor
CituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXIgeworcHVibGljOgorICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tl
bmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1v
dmUoZGlzcGF0Y2hlcik7IH0KKyAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNo
ZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Citwcml2YXRl
OgorICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKK307
CisKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5h
dGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNw
YXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJh
dGlvbi1vYmplY3QtdHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisK
K3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4g
RmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgor
I2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorI2lu
Y2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNlbmRpZiAvLyBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0
QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlz
cGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFy
YXRpb24tb2JqZWN0LXR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgor
I2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBGcm9udGVuZFJvdXRlcjsKKwor
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3Bh
dGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0
LXR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRj
aGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUu
anNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgor
I2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisK
KworbmFtZXNwYWNlIFByb3RvY29sIHsKKworCisKKy8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgor
bmFtZXNwYWNlIERhdGFiYXNlIHsKK2NsYXNzIEVycm9yOworY2xhc3MgT3B0aW9uYWxQYXJhbWV0
ZXJCdW5kbGU7CitjbGFzcyBQYXJhbWV0ZXJCdW5kbGU7CitjbGFzcyBPYmplY3RXaXRoUHJvcGVy
dHlOYW1lQ29uZmxpY3RzOworY2xhc3MgRHVtbXlPYmplY3Q7CitlbnVtIGNsYXNzIE1vdXNlQnV0
dG9uOworfSAvLyBEYXRhYmFzZQorCituYW1lc3BhY2UgVGVzdCB7CitjbGFzcyBQYXJhbWV0ZXJC
dW5kbGU7Cit9IC8vIFRlc3QKKy8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KKworCisv
LyBUeXBlZGVmcy4KK25hbWVzcGFjZSBEYXRhYmFzZSB7Cit0eXBlZGVmIEpTT046OkFycmF5T2Y8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBFcnJvckxpc3Q7Cit9IC8vIERh
dGFiYXNlCisvLyBFbmQgb2YgdHlwZWRlZnMuCisKK25hbWVzcGFjZSBUZXN0SGVscGVycyB7CisK
K1N0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSk7CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IFN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkKK3sKKyAgICBy
ZXR1cm4gZ2V0RW51bUNvbnN0YW50VmFsdWUoc3RhdGljX2Nhc3Q8aW50PihlbnVtVmFsdWUpKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKKworbmFtZXNwYWNlIERhdGFiYXNlIHsK
KworLyogRGF0YWJhc2UgZXJyb3IuICovCitjbGFzcyBFcnJvciA6IHB1YmxpYyBKU09OOjpPYmpl
Y3RCYXNlIHsKK3B1YmxpYzoKKyAgICBlbnVtIHsKKyAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAor
ICAgICAgICBNZXNzYWdlU2V0ID0gMSA8PCAwLAorICAgICAgICBDb2RlU2V0ID0gMSA8PCAxLAor
ICAgICAgICBBbGxGaWVsZHNTZXQgPSAoTWVzc2FnZVNldCB8IENvZGVTZXQpCisgICAgfTsKKwor
ICAgIHRlbXBsYXRlPGludCBTVEFURT4KKyAgICBjbGFzcyBCdWlsZGVyIHsKKyAgICBwcml2YXRl
OgorICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBtX3Jlc3VsdDsKKworICAgICAgICB0ZW1w
bGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8
IFNURVA+Kj4odGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyKFJlZjwvKkVycm9y
Ki9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQorICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3Zl
KG9iamVjdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09
IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAgICAg
ICB9CisgICAgICAgIGZyaWVuZCBjbGFzcyBFcnJvcjsKKyAgICBwdWJsaWM6CisKKyAgICAgICAg
QnVpbGRlcjxTVEFURSB8IE1lc3NhZ2VTZXQ+JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYgdmFs
dWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNZXNz
YWdlU2V0KSwgcHJvcGVydHlfbWVzc2FnZV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0U3RyaW5nKCJtZXNzYWdlIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPE1lc3NhZ2VTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgQ29kZVNldD4mIHNldENvZGUoaW50IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29kZVNldCksIHByb3BlcnR5X2NvZGVfYWxyZWFk
eV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldEludGVnZXIoImNvZGUiX3MsIHZhbHVl
KTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29kZVNldD4oKTsKKyAgICAgICAgfQor
CisgICAgICAgIFJlZjxFcnJvcj4gcmVsZWFzZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7
CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoRXJyb3IpID09IHNpemVvZihKU09O
OjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7CisKKyAgICAgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+
IGpzb25SZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOworICAgICAgICAgICAgYXV0
byByZXN1bHQgPSBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxFcnJvcj4qPigmanNvblJl
c3VsdCkpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgIH07CisK
KyAgICAvKgorICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKKyAgICAgKiBSZWY8RXJyb3I+
IHJlc3VsdCA9IEVycm9yOjpjcmVhdGUoKQorICAgICAqICAgICAuc2V0TWVzc2FnZSguLi4pCisg
ICAgICogICAgIC5zZXRDb2RlKC4uLikKKyAgICAgKiAgICAgLnJlbGVhc2UoKTsKKyAgICAgKi8K
KyAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAg
IHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKKyAg
ICB9Cit9OworCisvKiBFbnVtZXJhdGVzIGRpZmZlcmVudCBtb3VzZSBidXR0b25zIHRoYXQgY2Fu
IGJlIHVzZWQuICovCitlbnVtIGNsYXNzIE1vdXNlQnV0dG9uIHsKKyAgICBOb25lID0gMCwKKyAg
ICBMZWZ0ID0gMSwKKyAgICBNaWRkbGUgPSAyLAorICAgIFJpZ2h0ID0gMywKK307IC8vIGVudW0g
Y2xhc3MgTW91c2VCdXR0b24KKworY2xhc3MgT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUgOiBwdWJs
aWMgSlNPTjo6T2JqZWN0QmFzZSB7CitwdWJsaWM6CisgICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVy
dHkgbmFtZSAnZGlyZWN0aW9uYWxpdHknIHdoaWxlIGdlbmVyYXRpbmcgT3B0aW9uYWxQYXJhbWV0
ZXJCdW5kbGUuCisgICAgZW51bSBjbGFzcyBEaXJlY3Rpb25hbGl0eSB7CisgICAgICAgIExUUiA9
IDQsCisgICAgICAgIFJUTCA9IDUsCisgICAgfTsgLy8gZW51bSBjbGFzcyBEaXJlY3Rpb25hbGl0
eQorICAgIGVudW0geworICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCisgICAgICAgIEFsbEZpZWxk
c1NldCA9IDAKKyAgICB9OworCisgICAgdGVtcGxhdGU8aW50IFNUQVRFPgorICAgIGNsYXNzIEJ1
aWxkZXIgeworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVz
dWx0OworCisgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4m
IGNhc3RTdGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRf
Y2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAg
IEJ1aWxkZXIoUmVmPC8qT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUqL0pTT046Ok9iamVjdD4mJiBv
YmplY3QpCisgICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKKyAgICAgICAg
eworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxk
ZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CisgICAgICAgIH0KKyAgICAgICAgZnJpZW5k
IGNsYXNzIE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOworICAgIHB1YmxpYzoKKworICAgICAgICBS
ZWY8T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU+IHJlbGVhc2UoKQorICAgICAgICB7CisgICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3Rf
cmVhZHkpOworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKE9wdGlvbmFsUGFyYW1l
dGVyQnVuZGxlKSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0KSwgY2Fubm90X2Nhc3QpOworCisgICAg
ICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uUmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5v
bk51bGwoKTsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gV1RGTW92ZSgqcmVpbnRlcnByZXRf
Y2FzdDxSZWY8T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU+Kj4oJmpzb25SZXN1bHQpKTsKKyAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyoKKyAgICAg
KiBTeW50aGV0aWMgY29uc3RydWN0b3I6CisgICAgICogUmVmPE9wdGlvbmFsUGFyYW1ldGVyQnVu
ZGxlPiByZXN1bHQgPSBPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTo6Y3JlYXRlKCkKKyAgICAgKiAg
ICAgLnJlbGVhc2UoKTsKKyAgICAgKi8KKyAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4g
Y3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICB9CisKKyAgICB2b2lkIHNldENvbHVtbk5hbWVzKFJl
ZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IHZhbHVlKQorICAgIHsKKyAgICAgICAgSlNPTjo6
T2JqZWN0QmFzZTo6c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBXVEZNb3ZlKHZhbHVlKSk7Cisg
ICAgfQorCisgICAgdm9pZCBzZXRCdXR0b25zKFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4+IHZhbHVlKQorICAgIHsKKyAgICAg
ICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0QXJyYXkoImJ1dHRvbnMiX3MsIFdURk1vdmUodmFsdWUp
KTsKKyAgICB9CisKKyAgICB2b2lkIHNldERpcmVjdGlvbmFsaXR5KERpcmVjdGlvbmFsaXR5IHZh
bHVlKQorICAgIHsKKyAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0U3RyaW5nKCJkaXJlY3Rp
b25hbGl0eSJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25z
dGFudFZhbHVlKHZhbHVlKSk7CisgICAgfQorCisgICAgdm9pZCBzZXROb3Rlcyhjb25zdCBTdHJp
bmcmIHZhbHVlKQorICAgIHsKKyAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0U3RyaW5nKCJu
b3RlcyJfcywgdmFsdWUpOworICAgIH0KKworICAgIHZvaWQgc2V0VGltZXN0YW1wKGRvdWJsZSB2
YWx1ZSkKKyAgICB7CisgICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldERvdWJsZSgidGltZXN0
YW1wIl9zLCB2YWx1ZSk7CisgICAgfQorCisgICAgdm9pZCBzZXRWYWx1ZXMoUmVmUHRyPEpTT046
Ok9iamVjdD4gdmFsdWUpCisgICAgeworICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRPYmpl
Y3QoInZhbHVlcyJfcywgV1RGTW92ZSh2YWx1ZSkpOworICAgIH0KKworICAgIHZvaWQgc2V0UGF5
bG9hZChSZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVlKQorICAgIHsKKyAgICAgICAgSlNPTjo6T2Jq
ZWN0QmFzZTo6c2V0VmFsdWUoInBheWxvYWQiX3MsIFdURk1vdmUodmFsdWUpKTsKKyAgICB9CisK
KyAgICB2b2lkIHNldEVycm9yKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6
RXJyb3I+IHZhbHVlKQorICAgIHsKKyAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0T2JqZWN0
KCJlcnJvciJfcywgV1RGTW92ZSh2YWx1ZSkpOworICAgIH0KKworICAgIHZvaWQgc2V0RXJyb3JM
aXN0KFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3JMaXN0PiB2YWx1
ZSkKKyAgICB7CisgICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldEFycmF5KCJlcnJvckxpc3Qi
X3MsIFdURk1vdmUodmFsdWUpKTsKKyAgICB9Cit9OworCitjbGFzcyBQYXJhbWV0ZXJCdW5kbGUg
OiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CitwdWJsaWM6CisgICAgLy8gTmFtZWQgYWZ0ZXIg
cHJvcGVydHkgbmFtZSAnZGlyZWN0aW9uYWxpdHknIHdoaWxlIGdlbmVyYXRpbmcgUGFyYW1ldGVy
QnVuZGxlLgorICAgIGVudW0gY2xhc3MgRGlyZWN0aW9uYWxpdHkgeworICAgICAgICBMVFIgPSA0
LAorICAgICAgICBSVEwgPSA1LAorICAgIH07IC8vIGVudW0gY2xhc3MgRGlyZWN0aW9uYWxpdHkK
KyAgICBlbnVtIHsKKyAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAorICAgICAgICBDb2x1bW5OYW1l
c1NldCA9IDEgPDwgMCwKKyAgICAgICAgQnV0dG9uc1NldCA9IDEgPDwgMSwKKyAgICAgICAgRGly
ZWN0aW9uYWxpdHlTZXQgPSAxIDw8IDIsCisgICAgICAgIE5vdGVzU2V0ID0gMSA8PCAzLAorICAg
ICAgICBUaW1lc3RhbXBTZXQgPSAxIDw8IDQsCisgICAgICAgIFZhbHVlc1NldCA9IDEgPDwgNSwK
KyAgICAgICAgUGF5bG9hZFNldCA9IDEgPDwgNiwKKyAgICAgICAgRXJyb3JTZXQgPSAxIDw8IDcs
CisgICAgICAgIEVycm9yTGlzdFNldCA9IDEgPDwgOCwKKyAgICAgICAgQWxsRmllbGRzU2V0ID0g
KENvbHVtbk5hbWVzU2V0IHwgQnV0dG9uc1NldCB8IERpcmVjdGlvbmFsaXR5U2V0IHwgTm90ZXNT
ZXQgfCBUaW1lc3RhbXBTZXQgfCBWYWx1ZXNTZXQgfCBQYXlsb2FkU2V0IHwgRXJyb3JTZXQgfCBF
cnJvckxpc3RTZXQpCisgICAgfTsKKworICAgIHRlbXBsYXRlPGludCBTVEFURT4KKyAgICBjbGFz
cyBCdWlsZGVyIHsKKyAgICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBt
X3Jlc3VsdDsKKworICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNU
RVA+JiBjYXN0U3RhdGUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJw
cmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CisgICAgICAgIH0KKworICAg
ICAgICBCdWlsZGVyKFJlZjwvKlBhcmFtZXRlckJ1bmRsZSovSlNPTjo6T2JqZWN0PiYmIG9iamVj
dCkKKyAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQorICAgICAgICB7Cisg
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9j
cmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKKyAgICAgICAgfQorICAgICAgICBmcmllbmQgY2xh
c3MgUGFyYW1ldGVyQnVuZGxlOworICAgIHB1YmxpYzoKKworICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgQ29sdW1uTmFtZXNTZXQ+JiBzZXRDb2x1bW5OYW1lcyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxT
dHJpbmc+PiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIENvbHVtbk5hbWVzU2V0KSwgcHJvcGVydHlfY29sdW1uTmFtZXNfYWxyZWFkeV9zZXQp
OworICAgICAgICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgdmFsdWUp
OworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb2x1bW5OYW1lc1NldD4oKTsKKyAgICAg
ICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBCdXR0b25zU2V0PiYgc2V0QnV0dG9ucyhS
ZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VC
dXR0b24+PiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIEJ1dHRvbnNTZXQpLCBwcm9wZXJ0eV9idXR0b25zX2FscmVhZHlfc2V0KTsKKyAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheSgiYnV0dG9ucyJfcywgdmFsdWUpOworICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxCdXR0b25zU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAg
QnVpbGRlcjxTVEFURSB8IERpcmVjdGlvbmFsaXR5U2V0PiYgc2V0RGlyZWN0aW9uYWxpdHkoRGly
ZWN0aW9uYWxpdHkgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBEaXJlY3Rpb25hbGl0eVNldCksIHByb3BlcnR5X2RpcmVjdGlvbmFsaXR5X2Fs
cmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImRpcmVjdGlvbmFs
aXR5Il9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50
VmFsdWUodmFsdWUpKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8RGlyZWN0aW9uYWxp
dHlTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTm90ZXNTZXQ+
JiBzZXROb3Rlcyhjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBD
T01QSUxFX0FTU0VSVCghKFNUQVRFICYgTm90ZXNTZXQpLCBwcm9wZXJ0eV9ub3Rlc19hbHJlYWR5
X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJub3RlcyJfcywgdmFsdWUp
OworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxOb3Rlc1NldD4oKTsKKyAgICAgICAgfQor
CisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUaW1lc3RhbXBTZXQ+JiBzZXRUaW1lc3RhbXAoZG91
YmxlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRF
ICYgVGltZXN0YW1wU2V0KSwgcHJvcGVydHlfdGltZXN0YW1wX2FscmVhZHlfc2V0KTsKKyAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgdmFsdWUpOworICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUaW1lc3RhbXBTZXQ+KCk7CisgICAgICAgIH0KKworICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgVmFsdWVzU2V0PiYgc2V0VmFsdWVzKFJlZlB0cjxKU09OOjpP
YmplY3Q+IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgVmFsdWVzU2V0KSwgcHJvcGVydHlfdmFsdWVzX2FscmVhZHlfc2V0KTsKKyAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgdmFsdWUpOworICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxWYWx1ZXNTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgUGF5bG9hZFNldD4mIHNldFBheWxvYWQoUmVmUHRyPEpTT046OlZhbHVlPiB2
YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFBh
eWxvYWRTZXQpLCBwcm9wZXJ0eV9wYXlsb2FkX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxQYXlsb2FkU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxT
VEFURSB8IEVycm9yU2V0PiYgc2V0RXJyb3IoUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpFcnJvcj4gdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBFcnJvclNldCksIHByb3BlcnR5X2Vycm9yX2FscmVhZHlfc2V0KTsKKyAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoImVycm9yIl9zLCB2YWx1ZSk7CisgICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPEVycm9yU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAg
QnVpbGRlcjxTVEFURSB8IEVycm9yTGlzdFNldD4mIHNldEVycm9yTGlzdChSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yTGlzdD4gdmFsdWUpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBFcnJvckxpc3RTZXQpLCBwcm9wZXJ0
eV9lcnJvckxpc3RfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldEFycmF5
KCJlcnJvckxpc3QiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8RXJy
b3JMaXN0U2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgUmVmPFBhcmFtZXRlckJ1bmRsZT4g
cmVsZWFzZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09
IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CisgICAgICAgICAgICBDT01QSUxF
X0FTU0VSVChzaXplb2YoUGFyYW1ldGVyQnVuZGxlKSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0KSwg
Y2Fubm90X2Nhc3QpOworCisgICAgICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uUmVzdWx0
ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0g
V1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8UGFyYW1ldGVyQnVuZGxlPio+KCZqc29uUmVz
dWx0KSk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgfTsKKwor
ICAgIC8qCisgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgorICAgICAqIFJlZjxQYXJhbWV0
ZXJCdW5kbGU+IHJlc3VsdCA9IFBhcmFtZXRlckJ1bmRsZTo6Y3JlYXRlKCkKKyAgICAgKiAgICAg
LnNldENvbHVtbk5hbWVzKC4uLikKKyAgICAgKiAgICAgLnNldEJ1dHRvbnMoLi4uKQorICAgICAq
ICAgICAuc2V0RGlyZWN0aW9uYWxpdHkoLi4uKQorICAgICAqICAgICAuc2V0Tm90ZXMoLi4uKQor
ICAgICAqICAgICAuc2V0VGltZXN0YW1wKC4uLikKKyAgICAgKiAgICAgLnNldFZhbHVlcyguLi4p
CisgICAgICogICAgIC5zZXRQYXlsb2FkKC4uLikKKyAgICAgKiAgICAgLnNldEVycm9yKC4uLikK
KyAgICAgKiAgICAgLnNldEVycm9yTGlzdCguLi4pCisgICAgICogICAgIC5yZWxlYXNlKCk7Cisg
ICAgICovCisgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCisgICAgewor
ICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KSk7CisgICAgfQorfTsKKworLyogQ29uZmxpY3RlZCBuYW1lcyBtYXkgY2F1c2UgZ2VuZXJhdGVk
IGdldHRlcnMvc2V0dGVycyB0byBjbGFzaCB3aXRoIGJ1aWx0LWluIEluc3BlY3Rvck9iamVjdCBt
ZXRob2RzLiAqLworY2xhc3MgT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cyA6IHB1Ymxp
YyBKU09OOjpPYmplY3RCYXNlIHsKK3B1YmxpYzoKKyAgICBlbnVtIHsKKyAgICAgICAgTm9GaWVs
ZHNTZXQgPSAwLAorICAgICAgICBJbnRlZ2VyU2V0ID0gMSA8PCAwLAorICAgICAgICBBcnJheVNl
dCA9IDEgPDwgMSwKKyAgICAgICAgU3RyaW5nU2V0ID0gMSA8PCAyLAorICAgICAgICBWYWx1ZVNl
dCA9IDEgPDwgMywKKyAgICAgICAgT2JqZWN0U2V0ID0gMSA8PCA0LAorICAgICAgICBBbGxGaWVs
ZHNTZXQgPSAoSW50ZWdlclNldCB8IEFycmF5U2V0IHwgU3RyaW5nU2V0IHwgVmFsdWVTZXQgfCBP
YmplY3RTZXQpCisgICAgfTsKKworICAgIHRlbXBsYXRlPGludCBTVEFURT4KKyAgICBjbGFzcyBC
dWlsZGVyIHsKKyAgICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBtX3Jl
c3VsdDsKKworICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+
JiBjYXN0U3RhdGUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0
X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CisgICAgICAgIH0KKworICAgICAg
ICBCdWlsZGVyKFJlZjwvKk9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHMqL0pTT046Ok9i
amVjdD4mJiBvYmplY3QpCisgICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkK
KyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNT
ZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CisgICAgICAgIH0KKyAgICAg
ICAgZnJpZW5kIGNsYXNzIE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHM7CisgICAgcHVi
bGljOgorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBJbnRlZ2VyU2V0PiYgc2V0SW50ZWdlcihj
b25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgSW50ZWdlclNldCksIHByb3BlcnR5X2ludGVnZXJfYWxyZWFkeV9zZXQpOwor
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygiaW50ZWdlciJfcywgdmFsdWUpOworICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxJbnRlZ2VyU2V0PigpOworICAgICAgICB9CisKKyAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IEFycmF5U2V0PiYgc2V0QXJyYXkoY29uc3QgU3RyaW5nJiB2
YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEFy
cmF5U2V0KSwgcHJvcGVydHlfYXJyYXlfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1
bHQtPnNldFN0cmluZygiYXJyYXkiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0
U3RhdGU8QXJyYXlTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
U3RyaW5nU2V0PiYgc2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTdHJpbmdTZXQpLCBwcm9wZXJ0eV9z
dHJpbmdfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygic3Ry
aW5nIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFN0cmluZ1NldD4o
KTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBWYWx1ZVNldD4mIHNldFZh
bHVlKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKCEoU1RBVEUgJiBWYWx1ZVNldCksIHByb3BlcnR5X3ZhbHVlX2FscmVhZHlfc2V0KTsK
KyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInZhbHVlIl9zLCB2YWx1ZSk7CisgICAg
ICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFZhbHVlU2V0PigpOworICAgICAgICB9CisKKyAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IE9iamVjdFNldD4mIHNldE9iamVjdChjb25zdCBTdHJpbmcmIHZh
bHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgT2Jq
ZWN0U2V0KSwgcHJvcGVydHlfb2JqZWN0X2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXRTdHJpbmcoIm9iamVjdCJfcywgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNh
c3RTdGF0ZTxPYmplY3RTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBSZWY8T2JqZWN0V2l0
aFByb3BlcnR5TmFtZUNvbmZsaWN0cz4gcmVsZWFzZSgpCisgICAgICAgIHsKKyAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFk
eSk7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoT2JqZWN0V2l0aFByb3BlcnR5
TmFtZUNvbmZsaWN0cykgPT0gc2l6ZW9mKEpTT046Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsKKwor
ICAgICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4ganNvblJlc3VsdCA9IG1fcmVzdWx0LnJlbGVh
c2VOb25OdWxsKCk7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFdURk1vdmUoKnJlaW50ZXJw
cmV0X2Nhc3Q8UmVmPE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHM+Kj4oJmpzb25SZXN1
bHQpKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICB9OworCisg
ICAgLyoKKyAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CisgICAgICogUmVmPE9iamVjdFdp
dGhQcm9wZXJ0eU5hbWVDb25mbGljdHM+IHJlc3VsdCA9IE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVD
b25mbGljdHM6OmNyZWF0ZSgpCisgICAgICogICAgIC5zZXRJbnRlZ2VyKC4uLikKKyAgICAgKiAg
ICAgLnNldEFycmF5KC4uLikKKyAgICAgKiAgICAgLnNldFN0cmluZyguLi4pCisgICAgICogICAg
IC5zZXRWYWx1ZSguLi4pCisgICAgICogICAgIC5zZXRPYmplY3QoLi4uKQorICAgICAqICAgICAu
cmVsZWFzZSgpOworICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVh
dGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9i
amVjdDo6Y3JlYXRlKCkpOworICAgIH0KK307CisKK30gLy8gRGF0YWJhc2UKKworbmFtZXNwYWNl
IFRlc3QgeworCitjbGFzcyBQYXJhbWV0ZXJCdW5kbGUgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFz
ZSB7CitwdWJsaWM6CisgICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAnZGlyZWN0aW9u
YWxpdHknIHdoaWxlIGdlbmVyYXRpbmcgUGFyYW1ldGVyQnVuZGxlLgorICAgIGVudW0gY2xhc3Mg
RGlyZWN0aW9uYWxpdHkgeworICAgICAgICBMVFIgPSA0LAorICAgICAgICBSVEwgPSA1LAorICAg
IH07IC8vIGVudW0gY2xhc3MgRGlyZWN0aW9uYWxpdHkKKyAgICBlbnVtIHsKKyAgICAgICAgTm9G
aWVsZHNTZXQgPSAwLAorICAgICAgICBEaXJlY3Rpb25hbGl0eVNldCA9IDEgPDwgMCwKKyAgICAg
ICAgQnV0dG9uc1NldCA9IDEgPDwgMSwKKyAgICAgICAgQ29sdW1uTmFtZXNTZXQgPSAxIDw8IDIs
CisgICAgICAgIE5vdGVzU2V0ID0gMSA8PCAzLAorICAgICAgICBUaW1lc3RhbXBTZXQgPSAxIDw8
IDQsCisgICAgICAgIFZhbHVlc1NldCA9IDEgPDwgNSwKKyAgICAgICAgUGF5bG9hZFNldCA9IDEg
PDwgNiwKKyAgICAgICAgRXJyb3JTZXQgPSAxIDw8IDcsCisgICAgICAgIEFsbEZpZWxkc1NldCA9
IChEaXJlY3Rpb25hbGl0eVNldCB8IEJ1dHRvbnNTZXQgfCBDb2x1bW5OYW1lc1NldCB8IE5vdGVz
U2V0IHwgVGltZXN0YW1wU2V0IHwgVmFsdWVzU2V0IHwgUGF5bG9hZFNldCB8IEVycm9yU2V0KQor
ICAgIH07CisKKyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CisgICAgY2xhc3MgQnVpbGRlciB7Cisg
ICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7CisKKyAg
ICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRl
KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxk
ZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcihS
ZWY8LypQYXJhbWV0ZXJCdW5kbGUqL0pTT046Ok9iamVjdD4mJiBvYmplY3QpCisgICAgICAgICAg
ICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25f
aW5pdF9zdGF0ZSk7CisgICAgICAgIH0KKyAgICAgICAgZnJpZW5kIGNsYXNzIFBhcmFtZXRlckJ1
bmRsZTsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IERpcmVjdGlvbmFs
aXR5U2V0PiYgc2V0RGlyZWN0aW9uYWxpdHkoRGlyZWN0aW9uYWxpdHkgdmFsdWUpCisgICAgICAg
IHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBEaXJlY3Rpb25hbGl0eVNl
dCksIHByb3BlcnR5X2RpcmVjdGlvbmFsaXR5X2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXRTdHJpbmcoImRpcmVjdGlvbmFsaXR5Il9zLCBJbnNwZWN0b3I6OlByb3RvY29s
OjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUodmFsdWUpKTsKKyAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8RGlyZWN0aW9uYWxpdHlTZXQ+KCk7CisgICAgICAgIH0KKworICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgQnV0dG9uc1NldD4mIHNldEJ1dHRvbnMoUmVmUHRyPEpTT046
OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPj4gdmFs
dWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBCdXR0
b25zU2V0KSwgcHJvcGVydHlfYnV0dG9uc19hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0QXJyYXkoImJ1dHRvbnMiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8QnV0dG9uc1NldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBDb2x1bW5OYW1lc1NldD4mIHNldENvbHVtbk5hbWVzKFJlZlB0cjxKU09OOjpBcnJheU9m
PFN0cmluZz4+IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgQ29sdW1uTmFtZXNTZXQpLCBwcm9wZXJ0eV9jb2x1bW5OYW1lc19hbHJlYWR5X3Nl
dCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB2YWx1
ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvbHVtbk5hbWVzU2V0PigpOworICAg
ICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IE5vdGVzU2V0PiYgc2V0Tm90ZXMoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
IShTVEFURSAmIE5vdGVzU2V0KSwgcHJvcGVydHlfbm90ZXNfYWxyZWFkeV9zZXQpOworICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibm90ZXMiX3MsIHZhbHVlKTsKKyAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8Tm90ZXNTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgVGltZXN0YW1wU2V0PiYgc2V0VGltZXN0YW1wKGRvdWJsZSB2YWx1ZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFRpbWVzdGFtcFNl
dCksIHByb3BlcnR5X3RpbWVzdGFtcF9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8VGltZXN0YW1wU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxT
VEFURSB8IFZhbHVlc1NldD4mIHNldFZhbHVlcyhSZWZQdHI8SlNPTjo6T2JqZWN0PiB2YWx1ZSkK
KyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFZhbHVlc1Nl
dCksIHByb3BlcnR5X3ZhbHVlc19hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3Rh
dGU8VmFsdWVzU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFBh
eWxvYWRTZXQ+JiBzZXRQYXlsb2FkKFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWUpCisgICAgICAg
IHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBQYXlsb2FkU2V0KSwgcHJv
cGVydHlfcGF5bG9hZF9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0VmFs
dWUoInBheWxvYWQiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8UGF5
bG9hZFNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBFcnJvclNl
dD4mIHNldEVycm9yKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+
IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
RXJyb3JTZXQpLCBwcm9wZXJ0eV9lcnJvcl9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0T2JqZWN0KCJlcnJvciJfcywgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNh
c3RTdGF0ZTxFcnJvclNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIFJlZjxQYXJhbWV0ZXJC
dW5kbGU+IHJlbGVhc2UoKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChT
VEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOworICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoc2l6ZW9mKFBhcmFtZXRlckJ1bmRsZSkgPT0gc2l6ZW9mKEpTT046Ok9i
amVjdCksIGNhbm5vdF9jYXN0KTsKKworICAgICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4ganNv
blJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgICAgICBhdXRvIHJl
c3VsdCA9IFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPFBhcmFtZXRlckJ1bmRsZT4qPigm
anNvblJlc3VsdCkpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAg
IH07CisKKyAgICAvKgorICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKKyAgICAgKiBSZWY8
UGFyYW1ldGVyQnVuZGxlPiByZXN1bHQgPSBQYXJhbWV0ZXJCdW5kbGU6OmNyZWF0ZSgpCisgICAg
ICogICAgIC5zZXREaXJlY3Rpb25hbGl0eSguLi4pCisgICAgICogICAgIC5zZXRCdXR0b25zKC4u
LikKKyAgICAgKiAgICAgLnNldENvbHVtbk5hbWVzKC4uLikKKyAgICAgKiAgICAgLnNldE5vdGVz
KC4uLikKKyAgICAgKiAgICAgLnNldFRpbWVzdGFtcCguLi4pCisgICAgICogICAgIC5zZXRWYWx1
ZXMoLi4uKQorICAgICAqICAgICAuc2V0UGF5bG9hZCguLi4pCisgICAgICogICAgIC5zZXRFcnJv
ciguLi4pCisgICAgICogICAgIC5yZWxlYXNlKCk7CisgICAgICovCisgICAgc3RhdGljIEJ1aWxk
ZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gQnVpbGRlcjxO
b0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7CisgICAgfQorfTsKKworfSAvLyBU
ZXN0CisKKworCituYW1lc3BhY2UgVGVzdEhlbHBlcnMgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBQ
cm90b2NvbEVudW1UeXBlPgorT3B0aW9uYWw8UHJvdG9jb2xFbnVtVHlwZT4gcGFyc2VFbnVtVmFs
dWVGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYpOworCisvLyBFbnVtcyBpbiB0aGUgJ0RhdGFiYXNl
JyBEb21haW4KK3RlbXBsYXRlPD4KK09wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFi
YXNlOjpNb3VzZUJ1dHRvbj4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4oY29uc3QgU3RyaW5nJik7Cit0ZW1wbGF0ZTw+
CitPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6T3B0aW9uYWxQYXJhbWV0
ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5PiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rp
b25hbGl0eT4oY29uc3QgU3RyaW5nJik7Cit0ZW1wbGF0ZTw+CitPcHRpb25hbDxJbnNwZWN0b3I6
OlByb3RvY29sOjpEYXRhYmFzZTo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4gcGFy
c2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQYXJh
bWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5Pihjb25zdCBTdHJpbmcmKTsKKworLy8gRW51bXMg
aW4gdGhlICdUZXN0JyBEb21haW4KK3RlbXBsYXRlPD4KK09wdGlvbmFsPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlRlc3Q6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+IHBhcnNlRW51bVZh
bHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpQYXJhbWV0ZXJCdW5kbGU6
OkRpcmVjdGlvbmFsaXR5Pihjb25zdCBTdHJpbmcmKTsKKworfSAvLyBuYW1lc3BhY2UgVGVzdEhl
bHBlcnMKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVm
YXVsdEhhc2g7CisKKy8vIEhhc2ggZGVjbGFyYXRpb25zIGluIHRoZSAnRGF0YWJhc2UnIERvbWFp
bgordGVtcGxhdGU8Pgorc3RydWN0IERlZmF1bHRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpNb3VzZUJ1dHRvbj4geworICAgIHR5cGVkZWYgSW50SGFzaDxJbnNwZWN0b3I6OlBy
b3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b24+IEhhc2g7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXVEYKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xPYmplY3RzLmgiCisKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCituYW1l
c3BhY2UgUHJvdG9jb2wgeworCituYW1lc3BhY2UgVGVzdEhlbHBlcnMgeworCitzdGF0aWMgY29u
c3QgY2hhciogY29uc3QgZW51bV9jb25zdGFudF92YWx1ZXNbXSA9IHsKKyAgICAiTm9uZSIsCisg
ICAgIkxlZnQiLAorICAgICJNaWRkbGUiLAorICAgICJSaWdodCIsCisgICAgIkxUUiIsCisgICAg
IlJUTCIsCit9OworCitTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsKKyAg
ICByZXR1cm4gZW51bV9jb25zdGFudF92YWx1ZXNbY29kZV07Cit9CisKKy8vIEVudW1zIGluIHRo
ZSAnRGF0YWJhc2UnIERvbWFpbgorCit0ZW1wbGF0ZTw+CitPcHRpb25hbDxJbnNwZWN0b3I6OlBy
b3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b24+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJ
bnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b24+KGNvbnN0IFN0cmluZyYg
cHJvdG9jb2xTdHJpbmcpCit7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVl
c1tdID0geworICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpN
b3VzZUJ1dHRvbjo6Tm9uZSwKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpE
YXRhYmFzZTo6TW91c2VCdXR0b246OkxlZnQsCisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uOjpNaWRkbGUsCisgICAgICAgIChzaXplX3Qp
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uOjpSaWdodCwKKyAgICB9
OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgNDsgKytpKQorICAgICAgICBpZiAocHJvdG9j
b2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNbaV1dKQorICAg
ICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0
b24pY29uc3RhbnRWYWx1ZXNbaV07CisKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCit0
ZW1wbGF0ZTw+CitPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6T3B0aW9u
YWxQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5PiBwYXJzZUVudW1WYWx1ZUZyb21TdHJp
bmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok9wdGlvbmFsUGFyYW1ldGVyQnVuZGxl
OjpEaXJlY3Rpb25hbGl0eT4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKK3sKKyAgICBz
dGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7CisgICAgICAgIChzaXplX3Qp
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpE
aXJlY3Rpb25hbGl0eTo6TFRSLAorICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk6OlJUTCwK
KyAgICB9OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMjsgKytpKQorICAgICAgICBpZiAo
cHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNbaV1d
KQorICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6T3B0
aW9uYWxQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5KWNvbnN0YW50VmFsdWVzW2ldOwor
CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKwordGVtcGxhdGU8PgorT3B0aW9uYWw8SW5z
cGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxp
dHk+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFz
ZTo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4oY29uc3QgU3RyaW5nJiBwcm90b2Nv
bFN0cmluZykKK3sKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7
CisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlBhcmFtZXRl
ckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk6OkxUUiwKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6
OlByb3RvY29sOjpEYXRhYmFzZTo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eTo6UlRM
LAorICAgIH07CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAyOyArK2kpCisgICAgICAgIGlm
IChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tp
XV0pCisgICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQ
YXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5KWNvbnN0YW50VmFsdWVzW2ldOworCisgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKworLy8gRW51bXMgaW4gdGhlICdUZXN0JyBEb21haW4K
KwordGVtcGxhdGU8PgorT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UGFyYW1l
dGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+KGNv
bnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCit7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBj
b25zdGFudFZhbHVlc1tdID0geworICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6
OlRlc3Q6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk6OkxUUiwKKyAgICAgICAgKHNp
emVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlv
bmFsaXR5OjpSVEwsCisgICAgfTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDI7ICsraSkK
KyAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0
YW50VmFsdWVzW2ldXSkKKyAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6
VGVzdDo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eSljb25zdGFudFZhbHVlc1tpXTsK
KworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RIZWxw
ZXJzCisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorCisjIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8
d3RmL1JldGFpblB0ci5oPgorCisKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERp
c3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRj
aGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRp
b24tb2JqZWN0LXR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3Bh
dGNoZXJzLmgiCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2luY2x1ZGUg
IlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVz
Lmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
KworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbiBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rv
ci9UZXN0UHJvdG9jb2wuaD4KKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQi
KSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAorQGVu
ZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbi5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2lt
cG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisjaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgorI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgorCit1c2luZyBu
YW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xs
ZXI7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxl
SW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5p
dF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIEFTU0VSVChjb250
cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAgcmV0dXJuIHNlbGY7
Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworQGVu
ZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorCisjIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbiBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90
b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5o
IgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3Rv
cjsKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKwor
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9u
Lmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KKwor
CitAY2xhc3MgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcjsKK0BjbGFzcyBUZXN0UHJvdG9jb2xE
YXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOworQGNsYXNzIFRlc3RQcm90b2NvbERhdGFi
YXNlUGFyYW1ldGVyQnVuZGxlOworQGNsYXNzIFRlc3RQcm90b2NvbERhdGFiYXNlT2JqZWN0V2l0
aFByb3BlcnR5TmFtZUNvbmZsaWN0czsKK0BjbGFzcyBUZXN0UHJvdG9jb2xEYXRhYmFzZUR1bW15
T2JqZWN0OworQGNsYXNzIFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGU7CisKK3R5cGVk
ZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VCdXR0b24pIHsK
KyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9uTm9uZSwKKyAgICBUZXN0UHJvdG9j
b2xEYXRhYmFzZU1vdXNlQnV0dG9uTGVmdCwKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNl
QnV0dG9uTWlkZGxlLAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VCdXR0b25SaWdodCwK
K307CisKK3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbERhdGFiYXNlT3B0
aW9uYWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSkgeworICAgIFRlc3RQcm90b2NvbERh
dGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eUxUUiwKKyAgICBUZXN0
UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHlSVEws
Cit9OworCit0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVBh
cmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5KSB7CisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VQ
YXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eUxUUiwKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFz
ZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5UlRMLAorfTsKK3R5cGVkZWYgTlNfRU5VTShO
U0ludGVnZXIsIFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSkg
eworICAgIFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eUxUUiwK
KyAgICBUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHlSVEwsCit9
OworCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2Ug
VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciA6IFJXSVByb3RvY29sSlNPTk9iamVjdAorLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAq
KXBheWxvYWQ7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJv
dG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aE1l
c3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBjb2RlOihpbnQpY29kZTsKKy8qIHJlcXVpcmVkICov
IEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqbWVzc2FnZTsKKy8qIHJlcXVp
cmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCBjb2RlOworQGVuZAorCitf
X2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFBy
b3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZSA6IFJXSVByb3RvY29sSlNPTk9i
amVjdAorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3Ry
aW5nICosIGlkPiAqKXBheWxvYWQ7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9i
amVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKKy8qIG9wdGlvbmFsICov
IEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmNvbHVt
bk5hbWVzOworLyogb3B0aW9uYWwgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TQXJy
YXkvKjxOU1N0cmluZz4qLyAqYnV0dG9uczsKKy8qIG9wdGlvbmFsICovIEBwcm9wZXJ0eSAobm9u
YXRvbWljLCBhc3NpZ24pIFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5k
bGVEaXJlY3Rpb25hbGl0eSBkaXJlY3Rpb25hbGl0eTsKKy8qIG9wdGlvbmFsICovIEBwcm9wZXJ0
eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqbm90ZXM7CisvKiBvcHRpb25hbCAqLyBAcHJv
cGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBkb3VibGUgdGltZXN0YW1wOworLyogb3B0aW9uYWwg
Ki8gQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgUldJUHJvdG9jb2xKU09OT2JqZWN0ICp2
YWx1ZXM7CisvKiBvcHRpb25hbCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluKSBSV0lQ
cm90b2NvbEpTT05PYmplY3QgKnBheWxvYWQ7CisvKiBvcHRpb25hbCAqLyBAcHJvcGVydHkgKG5v
bmF0b21pYywgcmV0YWluKSBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICplcnJvcjsKKy8qIG9w
dGlvbmFsICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU0FycmF5Lyo8VGVzdFByb3Rv
Y29sRGF0YWJhc2VFcnJvcj4qLyAqZXJyb3JMaXN0OworQGVuZAorCitfX2F0dHJpYnV0ZV9fKCh2
aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sRGF0YWJhc2VQ
YXJhbWV0ZXJCdW5kbGUgOiBSV0lQcm90b2NvbEpTT05PYmplY3QKKy0gKGluc3RhbmNldHlwZSlp
bml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkOwor
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9i
amVjdCAqKWpzb25PYmplY3Q7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb2x1bW5OYW1lczoo
TlNBcnJheS8qPE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMgYnV0dG9uczooTlNBcnJheS8qPE5T
U3RyaW5nPiovICopYnV0dG9ucyBkaXJlY3Rpb25hbGl0eTooVGVzdFByb3RvY29sRGF0YWJhc2VQ
YXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSlkaXJlY3Rpb25hbGl0eSBub3RlczooTlNTdHJp
bmcgKilub3RlcyB0aW1lc3RhbXA6KGRvdWJsZSl0aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90b2Nv
bEpTT05PYmplY3QgKil2YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5
bG9hZCBlcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKWVycm9yIGVycm9yTGlzdDoo
TlNBcnJheS8qPFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I+Ki8gKillcnJvckxpc3Q7CisvKiBy
ZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNBcnJheS8qPE5TU3RyaW5n
PiovICpjb2x1bW5OYW1lczsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBj
b3B5KSBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmJ1dHRvbnM7CisvKiByZXF1aXJlZCAqLyBAcHJv
cGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1
bmRsZURpcmVjdGlvbmFsaXR5IGRpcmVjdGlvbmFsaXR5OworLyogcmVxdWlyZWQgKi8gQHByb3Bl
cnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICpub3RlczsKKy8qIHJlcXVpcmVkICovIEBw
cm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGRvdWJsZSB0aW1lc3RhbXA7CisvKiByZXF1aXJl
ZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluKSBSV0lQcm90b2NvbEpTT05PYmplY3Qg
KnZhbHVlczsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIFJX
SVByb3RvY29sSlNPTk9iamVjdCAqcGF5bG9hZDsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAo
bm9uYXRvbWljLCByZXRhaW4pIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKmVycm9yOworLyog
cmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TQXJyYXkvKjxUZXN0UHJv
dG9jb2xEYXRhYmFzZUVycm9yPiovICplcnJvckxpc3Q7CitAZW5kCisKK19fYXR0cmlidXRlX18o
KHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xEYXRhYmFz
ZU9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHMgOiBSV0lQcm90b2NvbEpTT05PYmplY3QK
Ky0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAq
LCBpZD4gKilwYXlsb2FkOworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6
KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7CistIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhJbnRlZ2VyOihOU1N0cmluZyAqKWludGVnZXIgYXJyYXk6KE5TU3RyaW5nICopYXJyYXkg
c3RyaW5nOihOU1N0cmluZyAqKXN0cmluZyB2YWx1ZTooTlNTdHJpbmcgKil2YWx1ZSBvYmplY3Q6
KE5TU3RyaW5nICopb2JqZWN0OworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMs
IGNvcHkpIE5TU3RyaW5nICppbnRlZ2VyOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25h
dG9taWMsIGNvcHkpIE5TU3RyaW5nICphcnJheTsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAo
bm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqc3RyaW5nOworLyogcmVxdWlyZWQgKi8gQHByb3Bl
cnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICp2YWx1ZTsKKy8qIHJlcXVpcmVkICovIEBw
cm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqb2JqZWN0OworQGVuZAorCitfX2F0
dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3Rv
Y29sRGF0YWJhc2VEdW1teU9iamVjdCA6IFJXSVByb3RvY29sSlNPTk9iamVjdAorLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBh
eWxvYWQ7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9j
b2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKK0BlbmQKK19fYXR0cmlidXRlX18oKHZpc2liaWxp
dHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVu
ZGxlIDogUldJUHJvdG9jb2xKU09OT2JqZWN0CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXls
b2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKKy0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29u
T2JqZWN0OworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRGlyZWN0aW9uYWxpdHk6KFRlc3RQcm90
b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSlkaXJlY3Rpb25hbGl0eSBidXR0
b25zOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilidXR0b25zIGNvbHVtbk5hbWVzOihOU0FycmF5
Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcyBub3RlczooTlNTdHJpbmcgKilub3RlcyB0aW1l
c3RhbXA6KGRvdWJsZSl0aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKil2
YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZCBlcnJvcjooVGVz
dFByb3RvY29sRGF0YWJhc2VFcnJvciAqKWVycm9yOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5
IChub25hdG9taWMsIGFzc2lnbikgVGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZURpcmVj
dGlvbmFsaXR5IGRpcmVjdGlvbmFsaXR5OworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25h
dG9taWMsIGNvcHkpIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqYnV0dG9uczsKKy8qIHJlcXVpcmVk
ICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmNv
bHVtbk5hbWVzOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5T
U3RyaW5nICpub3RlczsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3Np
Z24pIGRvdWJsZSB0aW1lc3RhbXA7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21p
YywgcmV0YWluKSBSV0lQcm90b2NvbEpTT05PYmplY3QgKnZhbHVlczsKKy8qIHJlcXVpcmVkICov
IEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5
bG9hZDsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIFRlc3RQ
cm90b2NvbERhdGFiYXNlRXJyb3IgKmVycm9yOworQGVuZAorCisKKworCisKKworI2ltcG9ydCA8
V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgorCisj
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xJbnRlcm5hbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNs
YXJhdGlvbi1vYmplY3QtdHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xK
U09OT2JqZWN0UHJpdmF0ZS5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJ
bnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCisKKwor
CisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKworIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1w
b3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+CisKK25hbWVz
cGFjZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+CitPcHRp
b25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVl
KTsKKworaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbERhdGFiYXNl
TW91c2VCdXR0b24gdmFsdWUpCit7CisgICAgc3dpdGNoKHZhbHVlKSB7CisgICAgY2FzZSBUZXN0
UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9uTm9uZToKKyAgICAgICAgcmV0dXJuICJOb25lIl9z
OworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VNb3VzZUJ1dHRvbkxlZnQ6CisgICAgICAg
IHJldHVybiAiTGVmdCJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VCdXR0
b25NaWRkbGU6CisgICAgICAgIHJldHVybiAiTWlkZGxlIl9zOworICAgIGNhc2UgVGVzdFByb3Rv
Y29sRGF0YWJhc2VNb3VzZUJ1dHRvblJpZ2h0OgorICAgICAgICByZXR1cm4gIlJpZ2h0Il9zOwor
ICAgIH0KK30KKwordGVtcGxhdGU8PgoraW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFi
YXNlTW91c2VCdXR0b24+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQor
eworICAgIGlmICh2YWx1ZSA9PSAiTm9uZSIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xE
YXRhYmFzZU1vdXNlQnV0dG9uTm9uZTsKKyAgICBpZiAodmFsdWUgPT0gIkxlZnQiKQorICAgICAg
ICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VNb3VzZUJ1dHRvbkxlZnQ7CisgICAgaWYgKHZh
bHVlID09ICJNaWRkbGUiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VNb3Vz
ZUJ1dHRvbk1pZGRsZTsKKyAgICBpZiAodmFsdWUgPT0gIlJpZ2h0IikKKyAgICAgICAgcmV0dXJu
IFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VCdXR0b25SaWdodDsKKyAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworfQorCitpbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29s
RGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5IHZhbHVlKQorewor
ICAgIHN3aXRjaCh2YWx1ZSkgeworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25h
bFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5TFRSOgorICAgICAgICByZXR1cm4gIkxUUiJf
czsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGVE
aXJlY3Rpb25hbGl0eVJUTDoKKyAgICAgICAgcmV0dXJuICJSVEwiX3M7CisgICAgfQorfQorCit0
ZW1wbGF0ZTw+CitpbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBh
cmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5PiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gIkxUUiIpCisgICAgICAgIHJldHVybiBU
ZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHlM
VFI7CisgICAgaWYgKHZhbHVlID09ICJSVEwiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29s
RGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5UlRMOworICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK2lubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhU
ZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5IHZhbHVlKQor
eworICAgIHN3aXRjaCh2YWx1ZSkgeworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VQYXJh
bWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eUxUUjoKKyAgICAgICAgcmV0dXJuICJMVFIiX3M7Cisg
ICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5
UlRMOgorICAgICAgICByZXR1cm4gIlJUTCJfczsKKyAgICB9Cit9CisKK3RlbXBsYXRlPD4KK2lu
bGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlv
bmFsaXR5PiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBp
ZiAodmFsdWUgPT0gIkxUUiIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZVBh
cmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5TFRSOworICAgIGlmICh2YWx1ZSA9PSAiUlRMIikK
KyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlRGlyZWN0
aW9uYWxpdHlSVEw7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKworaW5saW5lIFN0cmlu
ZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rp
b25hbGl0eSB2YWx1ZSkKK3sKKyAgICBzd2l0Y2godmFsdWUpIHsKKyAgICBjYXNlIFRlc3RQcm90
b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eUxUUjoKKyAgICAgICAgcmV0dXJu
ICJMVFIiX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlRGlyZWN0
aW9uYWxpdHlSVEw6CisgICAgICAgIHJldHVybiAiUlRMIl9zOworICAgIH0KK30KKwordGVtcGxh
dGU8PgoraW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJl
Y3Rpb25hbGl0eT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7Cisg
ICAgaWYgKHZhbHVlID09ICJMVFIiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sVGVzdFBh
cmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5TFRSOworICAgIGlmICh2YWx1ZSA9PSAiUlRMIikK
KyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25h
bGl0eVJUTDsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCit9IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAor
CisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5q
c29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgor
I2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9y
L1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3Bl
Y3RvcjsKKworQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKERhdGFiYXNl
RG9tYWluKQorCisrICh2b2lkKV9wYXJzZUVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9y
ICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworKyAodm9pZClfcGFyc2VFcnJv
ckxpc3Q6KE5TQXJyYXkvKjxUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yPiovICoqKW91dFZhbHVl
IGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworKyAodm9pZClfcGFyc2VNb3VzZUJ1dHRvbjooTlNO
dW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisrICh2b2lkKV9wYXJz
ZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOihUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFy
YW1ldGVyQnVuZGxlICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworKyAodm9p
ZClfcGFyc2VQYXJhbWV0ZXJCdW5kbGU6KFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVu
ZGxlICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworKyAodm9pZClfcGFyc2VP
YmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzOihUZXN0UHJvdG9jb2xEYXRhYmFzZU9iamVj
dFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHMgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBh
eWxvYWQ7CisrICh2b2lkKV9wYXJzZUR1bW15T2JqZWN0OihUZXN0UHJvdG9jb2xEYXRhYmFzZUR1
bW15T2JqZWN0ICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworCitAZW5kCitA
aW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoVGVzdERvbWFpbikKKworKyAo
dm9pZClfcGFyc2VQYXJhbWV0ZXJCdW5kbGU6KFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5k
bGUgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisKK0BlbmQKKworQGltcGxl
bWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoRGF0YWJhc2VEb21haW4pCisK
KysgKHZvaWQpX3BhcnNlRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKiopb3V0VmFs
dWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JB
RF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSBb
W1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2Fk
XTsKK30KKworKyAodm9pZClfcGFyc2VFcnJvckxpc3Q6KE5TQXJyYXkvKjxUZXN0UHJvdG9jb2xE
YXRhYmFzZUVycm9yPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7Cisg
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNBcnJheS8qPFRlc3RQ
cm90b2NvbERhdGFiYXNlRXJyb3I+Ki8gY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSAoTlNBcnJh
eS8qPFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I+Ki8gKilwYXlsb2FkOworfQorCisrICh2b2lk
KV9wYXJzZU1vdXNlQnV0dG9uOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQp
cGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05T
U3RyaW5nIGNsYXNzXSk7CisgICAgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VNb3VzZUJ1
dHRvbj4gcmVzdWx0ID0gSW5zcGVjdG9yOjpmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29s
RGF0YWJhc2VNb3VzZUJ1dHRvbj4ocGF5bG9hZCk7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9C
QURfRU5VTV9WQUxVRShyZXN1bHQsIEAiTW91c2VCdXR0b24iKTsKKyAgICAqb3V0VmFsdWUgPSBA
KHJlc3VsdC52YWx1ZSgpKTsKK30KKworKyAodm9pZClfcGFyc2VPcHRpb25hbFBhcmFtZXRlckJ1
bmRsZTooVGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZSAqKilvdXRW
YWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
QkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOworICAgICpvdXRWYWx1ZSA9
IFtbVGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZSBhbGxvY10gaW5p
dFdpdGhQYXlsb2FkOnBheWxvYWRdOworfQorCisrICh2b2lkKV9wYXJzZVBhcmFtZXRlckJ1bmRs
ZTooVGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGUgKiopb3V0VmFsdWUgZnJvbVBh
eWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBh
eWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90
b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9h
ZF07Cit9CisKKysgKHZvaWQpX3BhcnNlT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0czoo
VGVzdFByb3RvY29sRGF0YWJhc2VPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzICoqKW91
dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9CQURfVFlQRShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7CisgICAgKm91dFZhbHVl
ID0gW1tUZXN0UHJvdG9jb2xEYXRhYmFzZU9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHMg
YWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKK30KKworKyAodm9pZClfcGFyc2VEdW1t
eU9iamVjdDooVGVzdFByb3RvY29sRGF0YWJhc2VEdW1teU9iamVjdCAqKilvdXRWYWx1ZSBmcm9t
UGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUo
cGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOworICAgICpvdXRWYWx1ZSA9IFtbVGVzdFBy
b3RvY29sRGF0YWJhc2VEdW1teU9iamVjdCBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRd
OworfQorCitAZW5kCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
IChUZXN0RG9tYWluKQorCisrICh2b2lkKV9wYXJzZVBhcmFtZXRlckJ1bmRsZTooVGVzdFByb3Rv
Y29sVGVzdFBhcmFtZXRlckJ1bmRsZSAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9h
ZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlv
bmFyeSBjbGFzc10pOworICAgICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sVGVzdFBhcmFtZXRl
ckJ1bmRsZSBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOworfQorCitAZW5kCisKKwor
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIK
KworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDxXZWJJ
bnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorI2ltcG9ydCA8d3RmL0Fz
c2VydGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFj
ZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9y
CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5
PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGlu
aXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVR
VUlSRURfUFJPUEVSVFkocGF5bG9hZFtAIm1lc3NhZ2UiXSwgQCJtZXNzYWdlIik7CisgICAgc2Vs
Zi5tZXNzYWdlID0gcGF5bG9hZFtAIm1lc3NhZ2UiXTsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImNvZGUiXSwgQCJjb2RlIik7CisgICAgc2Vs
Zi5jb2RlID0gW3BheWxvYWRbQCJjb2RlIl0gaW50ZWdlclZhbHVlXTsKKworICAgIHJldHVybiBz
ZWxmOworfQorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3Rv
Y29sSlNPTk9iamVjdCAqKW9iamVjdAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdp
dGhKU09OT2JqZWN0OltvYmplY3QgdG9KU09OT2JqZWN0XS5nZXQoKV0pKQorICAgICAgICByZXR1
cm4gbmlsOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0
aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBjb2RlOihpbnQpY29kZQoreworICAgIGlmICgh
KHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgVEhST1df
RVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShtZXNzYWdlLCBAIm1lc3NhZ2UiKTsKKwor
ICAgIHNlbGYubWVzc2FnZSA9IG1lc3NhZ2U7CisgICAgc2VsZi5jb2RlID0gY29kZTsKKworICAg
IHJldHVybiBzZWxmOworfQorCistICh2b2lkKXNldE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2Fn
ZQoreworICAgIFtzdXBlciBzZXRTdHJpbmc6bWVzc2FnZSBmb3JLZXk6QCJtZXNzYWdlIl07Cit9
CisKKy0gKE5TU3RyaW5nICopbWVzc2FnZQoreworICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9y
S2V5OkAibWVzc2FnZSJdOworfQorCistICh2b2lkKXNldENvZGU6KGludCljb2RlCit7CisgICAg
W3N1cGVyIHNldEludGVnZXI6Y29kZSBmb3JLZXk6QCJjb2RlIl07Cit9CisKKy0gKGludCljb2Rl
Cit7CisgICAgcmV0dXJuIFtzdXBlciBpbnRlZ2VyRm9yS2V5OkAiY29kZSJdOworfQorCitAZW5k
CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVy
QnVuZGxlCisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0
aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1
cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHNlbGYuY29sdW1uTmFtZXMg
PSBwYXlsb2FkW0AiY29sdW1uTmFtZXMiXTsKKworICAgIHNlbGYuYnV0dG9ucyA9IHBheWxvYWRb
QCJidXR0b25zIl07CisKKyAgICBPcHRpb25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFs
UGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHk+IGRpcmVjdGlvbmFsaXR5ID0gZnJvbVByb3Rv
Y29sU3RyaW5nPFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGVEaXJl
Y3Rpb25hbGl0eT4ocGF5bG9hZFtAImRpcmVjdGlvbmFsaXR5Il0pOworICAgIGlmIChkaXJlY3Rp
b25hbGl0eSkKKyAgICAgICAgc2VsZi5kaXJlY3Rpb25hbGl0eSA9IGRpcmVjdGlvbmFsaXR5LnZh
bHVlKCk7CisKKyAgICBzZWxmLm5vdGVzID0gcGF5bG9hZFtAIm5vdGVzIl07CisKKyAgICBzZWxm
LnRpbWVzdGFtcCA9IFtwYXlsb2FkW0AidGltZXN0YW1wIl0gZG91YmxlVmFsdWVdOworCisgICAg
c2VsZi52YWx1ZXMgPSBwYXlsb2FkW0AidmFsdWVzIl07CisKKyAgICBzZWxmLnBheWxvYWQgPSBw
YXlsb2FkW0AicGF5bG9hZCJdOworCisgICAgc2VsZi5lcnJvciA9IFtbVGVzdFByb3RvY29sRGF0
YWJhc2VFcnJvciBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRbQCJlcnJvciJdXTsKKwor
ICAgIHNlbGYuZXJyb3JMaXN0ID0gb2JqY0FycmF5RnJvbVBheWxvYWQ8VGVzdFByb3RvY29sRGF0
YWJhc2VFcnJvcj4ocGF5bG9hZFtAImVycm9yTGlzdCJdKTsKKworICAgIHJldHVybiBzZWxmOwor
fQorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNP
Tk9iamVjdCAqKW9iamVjdAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09O
T2JqZWN0OltvYmplY3QgdG9KU09OT2JqZWN0XS5nZXQoKV0pKQorICAgICAgICByZXR1cm4gbmls
OworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpc2V0Q29sdW1uTmFtZXM6KE5TQXJy
YXkvKjxOU1N0cmluZz4qLyAqKWNvbHVtbk5hbWVzCit7CisgICAgW3N1cGVyIHNldEpTT05BcnJh
eTp0b0pTT05TdHJpbmdBcnJheShjb2x1bW5OYW1lcykgZm9yS2V5OkAiY29sdW1uTmFtZXMiXTsK
K30KKworLSAoTlNBcnJheS8qPE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMKK3sKKyAgICByZXR1
cm4gdG9PYmpDU3RyaW5nQXJyYXkoW3N1cGVyIEpTT05BcnJheUZvcktleTpAImNvbHVtbk5hbWVz
Il0pOworfQorCistICh2b2lkKXNldEJ1dHRvbnM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWJ1
dHRvbnMKK3sKKyAgICBbc3VwZXIgc2V0SlNPTkFycmF5OnRvSlNPTlN0cmluZ0FycmF5KGJ1dHRv
bnMpIGZvcktleTpAImJ1dHRvbnMiXTsKK30KKworLSAoTlNBcnJheS8qPE5TU3RyaW5nPiovICop
YnV0dG9ucworeworICAgIHJldHVybiB0b09iakNTdHJpbmdBcnJheShbc3VwZXIgSlNPTkFycmF5
Rm9yS2V5OkAiYnV0dG9ucyJdKTsKK30KKworLSAodm9pZClzZXREaXJlY3Rpb25hbGl0eTooVGVz
dFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5KWRp
cmVjdGlvbmFsaXR5Cit7CisgICAgW3N1cGVyIHNldFN0cmluZzp0b1Byb3RvY29sU3RyaW5nKGRp
cmVjdGlvbmFsaXR5KSBmb3JLZXk6QCJkaXJlY3Rpb25hbGl0eSJdOworfQorCistIChUZXN0UHJv
dG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHkpZGlyZWN0
aW9uYWxpdHkKK3sKKyAgICByZXR1cm4gZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERh
dGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eT4oW3N1cGVyIHN0cmlu
Z0ZvcktleTpAImRpcmVjdGlvbmFsaXR5Il0pLnZhbHVlKCk7Cit9CisKKy0gKHZvaWQpc2V0Tm90
ZXM6KE5TU3RyaW5nICopbm90ZXMKK3sKKyAgICBbc3VwZXIgc2V0U3RyaW5nOm5vdGVzIGZvcktl
eTpAIm5vdGVzIl07Cit9CisKKy0gKE5TU3RyaW5nICopbm90ZXMKK3sKKyAgICByZXR1cm4gW3N1
cGVyIHN0cmluZ0ZvcktleTpAIm5vdGVzIl07Cit9CisKKy0gKHZvaWQpc2V0VGltZXN0YW1wOihk
b3VibGUpdGltZXN0YW1wCit7CisgICAgW3N1cGVyIHNldERvdWJsZTp0aW1lc3RhbXAgZm9yS2V5
OkAidGltZXN0YW1wIl07Cit9CisKKy0gKGRvdWJsZSl0aW1lc3RhbXAKK3sKKyAgICByZXR1cm4g
W3N1cGVyIGRvdWJsZUZvcktleTpAInRpbWVzdGFtcCJdOworfQorCistICh2b2lkKXNldFZhbHVl
czooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopdmFsdWVzCit7CisgICAgW3N1cGVyIHNldE9iamVj
dDp2YWx1ZXMgZm9yS2V5OkAidmFsdWVzIl07Cit9CisKKy0gKFJXSVByb3RvY29sSlNPTk9iamVj
dCAqKXZhbHVlcworeworICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb2JqZWN0ID0gW3N1cGVy
IG9iamVjdEZvcktleTpAInZhbHVlcyJdOworICAgIGlmICghb2JqZWN0KQorICAgICAgICByZXR1
cm4gbmlsOworICAgIHJldHVybiBbW1JXSVByb3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5pdFdp
dGhKU09OT2JqZWN0Oltbc3VwZXIgb2JqZWN0Rm9yS2V5OkAidmFsdWVzIl0gdG9KU09OT2JqZWN0
XS5nZXQoKV07Cit9CisKKy0gKHZvaWQpc2V0UGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0
ICopcGF5bG9hZAoreworICAgIFtzdXBlciBzZXRPYmplY3Q6cGF5bG9hZCBmb3JLZXk6QCJwYXls
b2FkIl07Cit9CisKKy0gKFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQKK3sKKyAgICBS
V0lQcm90b2NvbEpTT05PYmplY3QgKm9iamVjdCA9IFtzdXBlciBvYmplY3RGb3JLZXk6QCJwYXls
b2FkIl07CisgICAgaWYgKCFvYmplY3QpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgcmV0dXJu
IFtbUldJUHJvdG9jb2xKU09OT2JqZWN0IGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6W1tzdXBl
ciBvYmplY3RGb3JLZXk6QCJwYXlsb2FkIl0gdG9KU09OT2JqZWN0XS5nZXQoKV07Cit9CisKKy0g
KHZvaWQpc2V0RXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKillcnJvcgoreworICAg
IFtzdXBlciBzZXRPYmplY3Q6ZXJyb3IgZm9yS2V5OkAiZXJyb3IiXTsKK30KKworLSAoVGVzdFBy
b3RvY29sRGF0YWJhc2VFcnJvciAqKWVycm9yCit7CisgICAgUldJUHJvdG9jb2xKU09OT2JqZWN0
ICpvYmplY3QgPSBbc3VwZXIgb2JqZWN0Rm9yS2V5OkAiZXJyb3IiXTsKKyAgICBpZiAoIW9iamVj
dCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICByZXR1cm4gW1tUZXN0UHJvdG9jb2xEYXRhYmFz
ZUVycm9yIGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6W1tzdXBlciBvYmplY3RGb3JLZXk6QCJl
cnJvciJdIHRvSlNPTk9iamVjdF0uZ2V0KCldOworfQorCistICh2b2lkKXNldEVycm9yTGlzdDoo
TlNBcnJheS8qPFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I+Ki8gKillcnJvckxpc3QKK3sKKyAg
ICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFX0lOX0FSUkFZKGVycm9yTGlzdCwgW1Rlc3RQ
cm90b2NvbERhdGFiYXNlRXJyb3IgY2xhc3NdKTsKKyAgICBbc3VwZXIgc2V0SlNPTkFycmF5OnRv
SlNPTk9iamVjdEFycmF5KGVycm9yTGlzdCkgZm9yS2V5OkAiZXJyb3JMaXN0Il07Cit9CisKKy0g
KE5TQXJyYXkvKjxUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yPiovICopZXJyb3JMaXN0Cit7Cisg
ICAgcmV0dXJuIHRvT2JqQ0FycmF5PFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I+KFtzdXBlciBK
U09OQXJyYXlGb3JLZXk6QCJlcnJvckxpc3QiXSk7Cit9CisKK0BlbmQKKworQGltcGxlbWVudGF0
aW9uIFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlCisKKy0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAq
KXBheWxvYWQKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0
dXJuIG5pbDsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5
bG9hZFtAImNvbHVtbk5hbWVzIl0sIEAiY29sdW1uTmFtZXMiKTsKKyAgICBzZWxmLmNvbHVtbk5h
bWVzID0gcGF5bG9hZFtAImNvbHVtbk5hbWVzIl07CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9S
X1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJidXR0b25zIl0sIEAiYnV0dG9ucyIpOworICAg
IHNlbGYuYnV0dG9ucyA9IHBheWxvYWRbQCJidXR0b25zIl07CisKKyAgICBUSFJPV19FWENFUFRJ
T05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJkaXJlY3Rpb25hbGl0eSJdLCBAImRp
cmVjdGlvbmFsaXR5Iik7CisgICAgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0
ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eT4gZGlyZWN0aW9uYWxpdHkgPSBmcm9tUHJvdG9jb2xTdHJp
bmc8VGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eT4ocGF5
bG9hZFtAImRpcmVjdGlvbmFsaXR5Il0pOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX0VO
VU1fVkFMVUUoZGlyZWN0aW9uYWxpdHksIEAiZGlyZWN0aW9uYWxpdHkiKTsKKyAgICBzZWxmLmRp
cmVjdGlvbmFsaXR5ID0gZGlyZWN0aW9uYWxpdHkudmFsdWUoKTsKKworICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAIm5vdGVzIl0sIEAibm90ZXMiKTsK
KyAgICBzZWxmLm5vdGVzID0gcGF5bG9hZFtAIm5vdGVzIl07CisKKyAgICBUSFJPV19FWENFUFRJ
T05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJ0aW1lc3RhbXAiXSwgQCJ0aW1lc3Rh
bXAiKTsKKyAgICBzZWxmLnRpbWVzdGFtcCA9IFtwYXlsb2FkW0AidGltZXN0YW1wIl0gZG91Ymxl
VmFsdWVdOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXls
b2FkW0AidmFsdWVzIl0sIEAidmFsdWVzIik7CisgICAgc2VsZi52YWx1ZXMgPSBwYXlsb2FkW0Ai
dmFsdWVzIl07CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBh
eWxvYWRbQCJwYXlsb2FkIl0sIEAicGF5bG9hZCIpOworICAgIHNlbGYucGF5bG9hZCA9IHBheWxv
YWRbQCJwYXlsb2FkIl07CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BF
UlRZKHBheWxvYWRbQCJlcnJvciJdLCBAImVycm9yIik7CisgICAgc2VsZi5lcnJvciA9IFtbVGVz
dFByb3RvY29sRGF0YWJhc2VFcnJvciBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRbQCJl
cnJvciJdXTsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5
bG9hZFtAImVycm9yTGlzdCJdLCBAImVycm9yTGlzdCIpOworICAgIHNlbGYuZXJyb3JMaXN0ID0g
b2JqY0FycmF5RnJvbVBheWxvYWQ8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4ocGF5bG9hZFtA
ImVycm9yTGlzdCJdKTsKKworICAgIHJldHVybiBzZWxmOworfQorLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9iamVjdAorewor
ICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmplY3QgdG9KU09O
T2JqZWN0XS5nZXQoKV0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgcmV0dXJuIHNlbGY7
Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNT
dHJpbmc+Ki8gKiljb2x1bW5OYW1lcyBidXR0b25zOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKili
dXR0b25zIGRpcmVjdGlvbmFsaXR5OihUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRs
ZURpcmVjdGlvbmFsaXR5KWRpcmVjdGlvbmFsaXR5IG5vdGVzOihOU1N0cmluZyAqKW5vdGVzIHRp
bWVzdGFtcDooZG91YmxlKXRpbWVzdGFtcCB2YWx1ZXM6KFJXSVByb3RvY29sSlNPTk9iamVjdCAq
KXZhbHVlcyBwYXlsb2FkOihSV0lQcm90b2NvbEpTT05PYmplY3QgKilwYXlsb2FkIGVycm9yOihU
ZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICopZXJyb3IgZXJyb3JMaXN0OihOU0FycmF5Lyo8VGVz
dFByb3RvY29sRGF0YWJhc2VFcnJvcj4qLyAqKWVycm9yTGlzdAoreworICAgIGlmICghKHNlbGYg
PSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShjb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOwor
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkoYnV0dG9ucywgQCJidXR0
b25zIik7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShub3Rlcywg
QCJub3RlcyIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkodmFs
dWVzLCBAInZhbHVlcyIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVS
VFkocGF5bG9hZCwgQCJwYXlsb2FkIik7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJF
RF9QUk9QRVJUWShlcnJvciwgQCJlcnJvciIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVR
VUlSRURfUFJPUEVSVFkoZXJyb3JMaXN0LCBAImVycm9yTGlzdCIpOworICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfQkFEX1RZUEVfSU5fQVJSQVkoZXJyb3JMaXN0LCBbVGVzdFByb3RvY29sRGF0YWJh
c2VFcnJvciBjbGFzc10pOworCisgICAgc2VsZi5jb2x1bW5OYW1lcyA9IGNvbHVtbk5hbWVzOwor
ICAgIHNlbGYuYnV0dG9ucyA9IGJ1dHRvbnM7CisgICAgc2VsZi5kaXJlY3Rpb25hbGl0eSA9IGRp
cmVjdGlvbmFsaXR5OworICAgIHNlbGYubm90ZXMgPSBub3RlczsKKyAgICBzZWxmLnRpbWVzdGFt
cCA9IHRpbWVzdGFtcDsKKyAgICBzZWxmLnZhbHVlcyA9IHZhbHVlczsKKyAgICBzZWxmLnBheWxv
YWQgPSBwYXlsb2FkOworICAgIHNlbGYuZXJyb3IgPSBlcnJvcjsKKyAgICBzZWxmLmVycm9yTGlz
dCA9IGVycm9yTGlzdDsKKworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXNldENvbHVt
bk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcworeworICAgIFtzdXBl
ciBzZXRKU09OQXJyYXk6dG9KU09OU3RyaW5nQXJyYXkoY29sdW1uTmFtZXMpIGZvcktleTpAImNv
bHVtbk5hbWVzIl07Cit9CisKKy0gKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWNvbHVtbk5hbWVz
Cit7CisgICAgcmV0dXJuIHRvT2JqQ1N0cmluZ0FycmF5KFtzdXBlciBKU09OQXJyYXlGb3JLZXk6
QCJjb2x1bW5OYW1lcyJdKTsKK30KKworLSAodm9pZClzZXRCdXR0b25zOihOU0FycmF5Lyo8TlNT
dHJpbmc+Ki8gKilidXR0b25zCit7CisgICAgW3N1cGVyIHNldEpTT05BcnJheTp0b0pTT05TdHJp
bmdBcnJheShidXR0b25zKSBmb3JLZXk6QCJidXR0b25zIl07Cit9CisKKy0gKE5TQXJyYXkvKjxO
U1N0cmluZz4qLyAqKWJ1dHRvbnMKK3sKKyAgICByZXR1cm4gdG9PYmpDU3RyaW5nQXJyYXkoW3N1
cGVyIEpTT05BcnJheUZvcktleTpAImJ1dHRvbnMiXSk7Cit9CisKKy0gKHZvaWQpc2V0RGlyZWN0
aW9uYWxpdHk6KFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxp
dHkpZGlyZWN0aW9uYWxpdHkKK3sKKyAgICBbc3VwZXIgc2V0U3RyaW5nOnRvUHJvdG9jb2xTdHJp
bmcoZGlyZWN0aW9uYWxpdHkpIGZvcktleTpAImRpcmVjdGlvbmFsaXR5Il07Cit9CisKKy0gKFRl
c3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHkpZGlyZWN0aW9u
YWxpdHkKK3sKKyAgICByZXR1cm4gZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERhdGFi
YXNlUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHk+KFtzdXBlciBzdHJpbmdGb3JLZXk6QCJk
aXJlY3Rpb25hbGl0eSJdKS52YWx1ZSgpOworfQorCistICh2b2lkKXNldE5vdGVzOihOU1N0cmlu
ZyAqKW5vdGVzCit7CisgICAgW3N1cGVyIHNldFN0cmluZzpub3RlcyBmb3JLZXk6QCJub3RlcyJd
OworfQorCistIChOU1N0cmluZyAqKW5vdGVzCit7CisgICAgcmV0dXJuIFtzdXBlciBzdHJpbmdG
b3JLZXk6QCJub3RlcyJdOworfQorCistICh2b2lkKXNldFRpbWVzdGFtcDooZG91YmxlKXRpbWVz
dGFtcAoreworICAgIFtzdXBlciBzZXREb3VibGU6dGltZXN0YW1wIGZvcktleTpAInRpbWVzdGFt
cCJdOworfQorCistIChkb3VibGUpdGltZXN0YW1wCit7CisgICAgcmV0dXJuIFtzdXBlciBkb3Vi
bGVGb3JLZXk6QCJ0aW1lc3RhbXAiXTsKK30KKworLSAodm9pZClzZXRWYWx1ZXM6KFJXSVByb3Rv
Y29sSlNPTk9iamVjdCAqKXZhbHVlcworeworICAgIFtzdXBlciBzZXRPYmplY3Q6dmFsdWVzIGZv
cktleTpAInZhbHVlcyJdOworfQorCistIChSV0lQcm90b2NvbEpTT05PYmplY3QgKil2YWx1ZXMK
K3sKKyAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9iamVjdCA9IFtzdXBlciBvYmplY3RGb3JL
ZXk6QCJ2YWx1ZXMiXTsKKyAgICBpZiAoIW9iamVjdCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAg
ICByZXR1cm4gW1tSV0lQcm90b2NvbEpTT05PYmplY3QgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVj
dDpbW3N1cGVyIG9iamVjdEZvcktleTpAInZhbHVlcyJdIHRvSlNPTk9iamVjdF0uZ2V0KCldOwor
fQorCistICh2b2lkKXNldFBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQK
K3sKKyAgICBbc3VwZXIgc2V0T2JqZWN0OnBheWxvYWQgZm9yS2V5OkAicGF5bG9hZCJdOworfQor
CistIChSV0lQcm90b2NvbEpTT05PYmplY3QgKilwYXlsb2FkCit7CisgICAgUldJUHJvdG9jb2xK
U09OT2JqZWN0ICpvYmplY3QgPSBbc3VwZXIgb2JqZWN0Rm9yS2V5OkAicGF5bG9hZCJdOworICAg
IGlmICghb2JqZWN0KQorICAgICAgICByZXR1cm4gbmlsOworICAgIHJldHVybiBbW1JXSVByb3Rv
Y29sSlNPTk9iamVjdCBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0Oltbc3VwZXIgb2JqZWN0Rm9y
S2V5OkAicGF5bG9hZCJdIHRvSlNPTk9iamVjdF0uZ2V0KCldOworfQorCistICh2b2lkKXNldEVy
cm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICopZXJyb3IKK3sKKyAgICBbc3VwZXIgc2V0
T2JqZWN0OmVycm9yIGZvcktleTpAImVycm9yIl07Cit9CisKKy0gKFRlc3RQcm90b2NvbERhdGFi
YXNlRXJyb3IgKillcnJvcgoreworICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb2JqZWN0ID0g
W3N1cGVyIG9iamVjdEZvcktleTpAImVycm9yIl07CisgICAgaWYgKCFvYmplY3QpCisgICAgICAg
IHJldHVybiBuaWw7CisgICAgcmV0dXJuIFtbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBhbGxv
Y10gaW5pdFdpdGhKU09OT2JqZWN0Oltbc3VwZXIgb2JqZWN0Rm9yS2V5OkAiZXJyb3IiXSB0b0pT
T05PYmplY3RdLmdldCgpXTsKK30KKworLSAodm9pZClzZXRFcnJvckxpc3Q6KE5TQXJyYXkvKjxU
ZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yPiovICopZXJyb3JMaXN0Cit7CisgICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9CQURfVFlQRV9JTl9BUlJBWShlcnJvckxpc3QsIFtUZXN0UHJvdG9jb2xEYXRh
YmFzZUVycm9yIGNsYXNzXSk7CisgICAgW3N1cGVyIHNldEpTT05BcnJheTp0b0pTT05PYmplY3RB
cnJheShlcnJvckxpc3QpIGZvcktleTpAImVycm9yTGlzdCJdOworfQorCistIChOU0FycmF5Lyo8
VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4qLyAqKWVycm9yTGlzdAoreworICAgIHJldHVybiB0
b09iakNBcnJheTxUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yPihbc3VwZXIgSlNPTkFycmF5Rm9y
S2V5OkAiZXJyb3JMaXN0Il0pOworfQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJv
dG9jb2xEYXRhYmFzZU9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHMKKworLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwg
aWQ+ICopcGF5bG9hZAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAg
ICByZXR1cm4gbmlsOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJU
WShwYXlsb2FkW0AiaW50ZWdlciJdLCBAImludGVnZXIiKTsKKyAgICBzZWxmLmludGVnZXIgPSBw
YXlsb2FkW0AiaW50ZWdlciJdOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9Q
Uk9QRVJUWShwYXlsb2FkW0AiYXJyYXkiXSwgQCJhcnJheSIpOworICAgIHNlbGYuYXJyYXkgPSBw
YXlsb2FkW0AiYXJyYXkiXTsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJP
UEVSVFkocGF5bG9hZFtAInN0cmluZyJdLCBAInN0cmluZyIpOworICAgIHNlbGYuc3RyaW5nID0g
cGF5bG9hZFtAInN0cmluZyJdOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9Q
Uk9QRVJUWShwYXlsb2FkW0AidmFsdWUiXSwgQCJ2YWx1ZSIpOworICAgIHNlbGYudmFsdWUgPSBw
YXlsb2FkW0AidmFsdWUiXTsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJP
UEVSVFkocGF5bG9hZFtAIm9iamVjdCJdLCBAIm9iamVjdCIpOworICAgIHNlbGYub2JqZWN0ID0g
cGF5bG9hZFtAIm9iamVjdCJdOworCisgICAgcmV0dXJuIHNlbGY7Cit9CistIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopb2JqZWN0
Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEpTT05PYmplY3Q6W29iamVjdCB0
b0pTT05PYmplY3RdLmdldCgpXSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICByZXR1cm4g
c2VsZjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSW50ZWdlcjooTlNTdHJpbmcgKilp
bnRlZ2VyIGFycmF5OihOU1N0cmluZyAqKWFycmF5IHN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcg
dmFsdWU6KE5TU3RyaW5nICopdmFsdWUgb2JqZWN0OihOU1N0cmluZyAqKW9iamVjdAoreworICAg
IGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShpbnRlZ2VyLCBAImludGVnZXIi
KTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKGFycmF5LCBAImFy
cmF5Iik7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShzdHJpbmcs
IEAic3RyaW5nIik7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWSh2
YWx1ZSwgQCJ2YWx1ZSIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVS
VFkob2JqZWN0LCBAIm9iamVjdCIpOworCisgICAgc2VsZi5pbnRlZ2VyID0gaW50ZWdlcjsKKyAg
ICBzZWxmLmFycmF5ID0gYXJyYXk7CisgICAgc2VsZi5zdHJpbmcgPSBzdHJpbmc7CisgICAgc2Vs
Zi52YWx1ZSA9IHZhbHVlOworICAgIHNlbGYub2JqZWN0ID0gb2JqZWN0OworCisgICAgcmV0dXJu
IHNlbGY7Cit9CisKKy0gKHZvaWQpc2V0SW50ZWdlcjooTlNTdHJpbmcgKilpbnRlZ2VyCit7Cisg
ICAgW3N1cGVyIHNldFN0cmluZzppbnRlZ2VyIGZvcktleTpAImludGVnZXIiXTsKK30KKworLSAo
TlNTdHJpbmcgKilpbnRlZ2VyCit7CisgICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJp
bnRlZ2VyIl07Cit9CisKKy0gKHZvaWQpc2V0QXJyYXk6KE5TU3RyaW5nICopYXJyYXkKK3sKKyAg
ICBbc3VwZXIgc2V0U3RyaW5nOmFycmF5IGZvcktleTpAImFycmF5Il07Cit9CisKKy0gKE5TU3Ry
aW5nICopYXJyYXkKK3sKKyAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAImFycmF5Il07
Cit9CisKKy0gKHZvaWQpc2V0U3RyaW5nOihOU1N0cmluZyAqKXN0cmluZworeworICAgIFtzdXBl
ciBzZXRTdHJpbmc6c3RyaW5nIGZvcktleTpAInN0cmluZyJdOworfQorCistIChOU1N0cmluZyAq
KXN0cmluZworeworICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAic3RyaW5nIl07Cit9
CisKKy0gKHZvaWQpc2V0VmFsdWU6KE5TU3RyaW5nICopdmFsdWUKK3sKKyAgICBbc3VwZXIgc2V0
U3RyaW5nOnZhbHVlIGZvcktleTpAInZhbHVlIl07Cit9CisKKy0gKE5TU3RyaW5nICopdmFsdWUK
K3sKKyAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAInZhbHVlIl07Cit9CisKKy0gKHZv
aWQpc2V0T2JqZWN0OihOU1N0cmluZyAqKW9iamVjdAoreworICAgIFtzdXBlciBzZXRTdHJpbmc6
b2JqZWN0IGZvcktleTpAIm9iamVjdCJdOworfQorCistIChOU1N0cmluZyAqKW9iamVjdAorewor
ICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAib2JqZWN0Il07Cit9CisKK0BlbmQKKwor
QGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbERhdGFiYXNlRHVtbXlPYmplY3QKKworLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcg
KiwgaWQ+ICopcGF5bG9hZAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAg
ICAgICByZXR1cm4gbmlsOworCisgICAgcmV0dXJuIHNlbGY7Cit9CistIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopb2JqZWN0Cit7
CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEpTT05PYmplY3Q6W29iamVjdCB0b0pT
T05PYmplY3RdLmdldCgpXSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICByZXR1cm4gc2Vs
ZjsKK30KKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVGVzdFBhcmFtZXRl
ckJ1bmRsZQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGlj
dGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCit7CisgICAgaWYgKCEoc2VsZiA9IFtz
dXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBUSFJPV19FWENFUFRJT05f
Rk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJkaXJlY3Rpb25hbGl0eSJdLCBAImRpcmVj
dGlvbmFsaXR5Iik7CisgICAgT3B0aW9uYWw8VGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRs
ZURpcmVjdGlvbmFsaXR5PiBkaXJlY3Rpb25hbGl0eSA9IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0
UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHk+KHBheWxvYWRbQCJkaXJl
Y3Rpb25hbGl0eSJdKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9FTlVNX1ZBTFVFKGRp
cmVjdGlvbmFsaXR5LCBAImRpcmVjdGlvbmFsaXR5Iik7CisgICAgc2VsZi5kaXJlY3Rpb25hbGl0
eSA9IGRpcmVjdGlvbmFsaXR5LnZhbHVlKCk7CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JF
UVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJidXR0b25zIl0sIEAiYnV0dG9ucyIpOworICAgIHNl
bGYuYnV0dG9ucyA9IHBheWxvYWRbQCJidXR0b25zIl07CisKKyAgICBUSFJPV19FWENFUFRJT05f
Rk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJjb2x1bW5OYW1lcyJdLCBAImNvbHVtbk5h
bWVzIik7CisgICAgc2VsZi5jb2x1bW5OYW1lcyA9IHBheWxvYWRbQCJjb2x1bW5OYW1lcyJdOwor
CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0Aibm90
ZXMiXSwgQCJub3RlcyIpOworICAgIHNlbGYubm90ZXMgPSBwYXlsb2FkW0Aibm90ZXMiXTsKKwor
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAInRpbWVz
dGFtcCJdLCBAInRpbWVzdGFtcCIpOworICAgIHNlbGYudGltZXN0YW1wID0gW3BheWxvYWRbQCJ0
aW1lc3RhbXAiXSBkb3VibGVWYWx1ZV07CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJ
UkVEX1BST1BFUlRZKHBheWxvYWRbQCJ2YWx1ZXMiXSwgQCJ2YWx1ZXMiKTsKKyAgICBzZWxmLnZh
bHVlcyA9IHBheWxvYWRbQCJ2YWx1ZXMiXTsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVR
VUlSRURfUFJPUEVSVFkocGF5bG9hZFtAInBheWxvYWQiXSwgQCJwYXlsb2FkIik7CisgICAgc2Vs
Zi5wYXlsb2FkID0gcGF5bG9hZFtAInBheWxvYWQiXTsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImVycm9yIl0sIEAiZXJyb3IiKTsKKyAgICBz
ZWxmLmVycm9yID0gW1tUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGFsbG9jXSBpbml0V2l0aFBh
eWxvYWQ6cGF5bG9hZFtAImVycm9yIl1dOworCisgICAgcmV0dXJuIHNlbGY7Cit9CistIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICop
b2JqZWN0Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEpTT05PYmplY3Q6W29i
amVjdCB0b0pTT05PYmplY3RdLmdldCgpXSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBy
ZXR1cm4gc2VsZjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRGlyZWN0aW9uYWxpdHk6
KFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSlkaXJlY3Rpb25h
bGl0eSBidXR0b25zOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilidXR0b25zIGNvbHVtbk5hbWVz
OihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcyBub3RlczooTlNTdHJpbmcgKilu
b3RlcyB0aW1lc3RhbXA6KGRvdWJsZSl0aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90b2NvbEpTT05P
YmplY3QgKil2YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZCBl
cnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKWVycm9yCit7CisgICAgaWYgKCEoc2Vs
ZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBUSFJPV19FWENF
UFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKGJ1dHRvbnMsIEAiYnV0dG9ucyIpOworICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkoY29sdW1uTmFtZXMsIEAiY29sdW1u
TmFtZXMiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKG5vdGVz
LCBAIm5vdGVzIik7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWSh2
YWx1ZXMsIEAidmFsdWVzIik7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9Q
RVJUWShwYXlsb2FkLCBAInBheWxvYWQiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJ
UkVEX1BST1BFUlRZKGVycm9yLCBAImVycm9yIik7CisKKyAgICBzZWxmLmRpcmVjdGlvbmFsaXR5
ID0gZGlyZWN0aW9uYWxpdHk7CisgICAgc2VsZi5idXR0b25zID0gYnV0dG9uczsKKyAgICBzZWxm
LmNvbHVtbk5hbWVzID0gY29sdW1uTmFtZXM7CisgICAgc2VsZi5ub3RlcyA9IG5vdGVzOworICAg
IHNlbGYudGltZXN0YW1wID0gdGltZXN0YW1wOworICAgIHNlbGYudmFsdWVzID0gdmFsdWVzOwor
ICAgIHNlbGYucGF5bG9hZCA9IHBheWxvYWQ7CisgICAgc2VsZi5lcnJvciA9IGVycm9yOworCisg
ICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpc2V0RGlyZWN0aW9uYWxpdHk6KFRlc3RQcm90
b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSlkaXJlY3Rpb25hbGl0eQorewor
ICAgIFtzdXBlciBzZXRTdHJpbmc6dG9Qcm90b2NvbFN0cmluZyhkaXJlY3Rpb25hbGl0eSkgZm9y
S2V5OkAiZGlyZWN0aW9uYWxpdHkiXTsKK30KKworLSAoVGVzdFByb3RvY29sVGVzdFBhcmFtZXRl
ckJ1bmRsZURpcmVjdGlvbmFsaXR5KWRpcmVjdGlvbmFsaXR5Cit7CisgICAgcmV0dXJuIGZyb21Q
cm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxp
dHk+KFtzdXBlciBzdHJpbmdGb3JLZXk6QCJkaXJlY3Rpb25hbGl0eSJdKS52YWx1ZSgpOworfQor
CistICh2b2lkKXNldEJ1dHRvbnM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWJ1dHRvbnMKK3sK
KyAgICBbc3VwZXIgc2V0SlNPTkFycmF5OnRvSlNPTlN0cmluZ0FycmF5KGJ1dHRvbnMpIGZvcktl
eTpAImJ1dHRvbnMiXTsKK30KKworLSAoTlNBcnJheS8qPE5TU3RyaW5nPiovICopYnV0dG9ucwor
eworICAgIHJldHVybiB0b09iakNTdHJpbmdBcnJheShbc3VwZXIgSlNPTkFycmF5Rm9yS2V5OkAi
YnV0dG9ucyJdKTsKK30KKworLSAodm9pZClzZXRDb2x1bW5OYW1lczooTlNBcnJheS8qPE5TU3Ry
aW5nPiovICopY29sdW1uTmFtZXMKK3sKKyAgICBbc3VwZXIgc2V0SlNPTkFycmF5OnRvSlNPTlN0
cmluZ0FycmF5KGNvbHVtbk5hbWVzKSBmb3JLZXk6QCJjb2x1bW5OYW1lcyJdOworfQorCistIChO
U0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcworeworICAgIHJldHVybiB0b09iakNT
dHJpbmdBcnJheShbc3VwZXIgSlNPTkFycmF5Rm9yS2V5OkAiY29sdW1uTmFtZXMiXSk7Cit9CisK
Ky0gKHZvaWQpc2V0Tm90ZXM6KE5TU3RyaW5nICopbm90ZXMKK3sKKyAgICBbc3VwZXIgc2V0U3Ry
aW5nOm5vdGVzIGZvcktleTpAIm5vdGVzIl07Cit9CisKKy0gKE5TU3RyaW5nICopbm90ZXMKK3sK
KyAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAIm5vdGVzIl07Cit9CisKKy0gKHZvaWQp
c2V0VGltZXN0YW1wOihkb3VibGUpdGltZXN0YW1wCit7CisgICAgW3N1cGVyIHNldERvdWJsZTp0
aW1lc3RhbXAgZm9yS2V5OkAidGltZXN0YW1wIl07Cit9CisKKy0gKGRvdWJsZSl0aW1lc3RhbXAK
K3sKKyAgICByZXR1cm4gW3N1cGVyIGRvdWJsZUZvcktleTpAInRpbWVzdGFtcCJdOworfQorCist
ICh2b2lkKXNldFZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopdmFsdWVzCit7CisgICAg
W3N1cGVyIHNldE9iamVjdDp2YWx1ZXMgZm9yS2V5OkAidmFsdWVzIl07Cit9CisKKy0gKFJXSVBy
b3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcworeworICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAq
b2JqZWN0ID0gW3N1cGVyIG9iamVjdEZvcktleTpAInZhbHVlcyJdOworICAgIGlmICghb2JqZWN0
KQorICAgICAgICByZXR1cm4gbmlsOworICAgIHJldHVybiBbW1JXSVByb3RvY29sSlNPTk9iamVj
dCBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0Oltbc3VwZXIgb2JqZWN0Rm9yS2V5OkAidmFsdWVz
Il0gdG9KU09OT2JqZWN0XS5nZXQoKV07Cit9CisKKy0gKHZvaWQpc2V0UGF5bG9hZDooUldJUHJv
dG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZAoreworICAgIFtzdXBlciBzZXRPYmplY3Q6cGF5bG9h
ZCBmb3JLZXk6QCJwYXlsb2FkIl07Cit9CisKKy0gKFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBh
eWxvYWQKK3sKKyAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9iamVjdCA9IFtzdXBlciBvYmpl
Y3RGb3JLZXk6QCJwYXlsb2FkIl07CisgICAgaWYgKCFvYmplY3QpCisgICAgICAgIHJldHVybiBu
aWw7CisgICAgcmV0dXJuIFtbUldJUHJvdG9jb2xKU09OT2JqZWN0IGFsbG9jXSBpbml0V2l0aEpT
T05PYmplY3Q6W1tzdXBlciBvYmplY3RGb3JLZXk6QCJwYXlsb2FkIl0gdG9KU09OT2JqZWN0XS5n
ZXQoKV07Cit9CisKKy0gKHZvaWQpc2V0RXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3Ig
KillcnJvcgoreworICAgIFtzdXBlciBzZXRPYmplY3Q6ZXJyb3IgZm9yS2V5OkAiZXJyb3IiXTsK
K30KKworLSAoVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKWVycm9yCit7CisgICAgUldJUHJv
dG9jb2xKU09OT2JqZWN0ICpvYmplY3QgPSBbc3VwZXIgb2JqZWN0Rm9yS2V5OkAiZXJyb3IiXTsK
KyAgICBpZiAoIW9iamVjdCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICByZXR1cm4gW1tUZXN0
UHJvdG9jb2xEYXRhYmFzZUVycm9yIGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6W1tzdXBlciBv
YmplY3RGb3JLZXk6QCJlcnJvciJdIHRvSlNPTk9iamVjdF0uZ2V0KCldOworfQorCitAZW5kCisK
KworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtcmVx
dWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1yZXF1aXJpbmctcnVudGltZS1j
YXN0cy5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wMjAwNDQxN2EwMzY3NjFiOGZlZDlkNmQxZjMw
ODY0MzkwMmIwMDY2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2Fz
dHMuanNvbi1yZXN1bHQKQEAgLTAsMCArMSwxNTkzIEBACisjIyMgQmVnaW4gRmlsZTogSW5zcGVj
dG9yQmFja2VuZENvbW1hbmRzLmpzLmluCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworLy8gVGVzdAorSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRv
bWFpbigiVGVzdCIsIG51bGwpOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIlRlc3Qu
VW5jYXN0ZWRBbmltYWxzIiwge1BpZ3M6ICJQaWdzIiwgQ293czogIkNvd3MiLCBDYXRzOiAiQ2F0
cyIsIEhlbnM6ICJIZW5zIn0pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIlRlc3Qu
Q2FzdGVkQW5pbWFscyIsIHtEdWNrczogIkR1Y2tzIiwgSGVuczogIkhlbnMiLCBDcm93czogIkNy
b3dzIiwgRmxhbWluZ29zOiAiRmxhbWluZ29zIn0pOworSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0
ZURvbWFpbigiVGVzdCIsIG51bGwpOworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29t
bWFuZHMuanMuaW4KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0
Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5n
LXJ1bnRpbWUtY2FzdHMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKworbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CisKK2NsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2
b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNw
YXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9Cisg
ICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4g
bV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQorcHJpdmF0ZToKKyAgICBSZWZQdHI8QmFja2Vu
ZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Cit9OworCisKKworCit9IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQorIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJz
LmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNv
biBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0eXBlZGVmIFN0cmluZyBFcnJv
clN0cmluZzsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBU
ZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlz
cGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1
aXJpbmctcnVudGltZS1jYXN0cy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0
Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91
dGVyLmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJE
ZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUo
SU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyNpbmNsdWRlICJUZXN0QWx0ZXJuYXRl
QmFja2VuZERpc3BhdGNoZXJzLmgiCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5j
cHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpz
b24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZh
bHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5z
cGVjdG9yIHsKKworY2xhc3MgRnJvbnRlbmRSb3V0ZXI7CisKK30gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
CisKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0
aW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK25hbWVzcGFjZSBQcm90b2Nv
bCB7CisKKworCisvLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KK25hbWVzcGFjZSBUZXN0IHsKK2Ns
YXNzIFR5cGVOZWVkaW5nQ2FzdDsKK2NsYXNzIFJlY3Vyc2l2ZU9iamVjdDE7CitjbGFzcyBSZWN1
cnNpdmVPYmplY3QyOworZW51bSBjbGFzcyBVbmNhc3RlZEFuaW1hbHM7CitlbnVtIGNsYXNzIENh
c3RlZEFuaW1hbHM7Cit9IC8vIFRlc3QKKy8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4K
KworCisvLyBUeXBlZGVmcy4KK25hbWVzcGFjZSBUZXN0IHsKK3R5cGVkZWYgaW50IENhc3RlZE9i
amVjdElkOwordHlwZWRlZiBpbnQgVW5jYXN0ZWRPYmplY3RJZDsKK30gLy8gVGVzdAorLy8gRW5k
IG9mIHR5cGVkZWZzLgorCituYW1lc3BhY2UgVGVzdEhlbHBlcnMgeworCitTdHJpbmcgZ2V0RW51
bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcg
Z2V0RW51bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFsdWUpCit7CisgICAgcmV0dXJuIGdldEVudW1D
b25zdGFudFZhbHVlKHN0YXRpY19jYXN0PGludD4oZW51bVZhbHVlKSk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFRlc3RIZWxwZXJzCisKK25hbWVzcGFjZSBUZXN0IHsKKworLyogQSBkdW1teSB0eXBl
IHRoYXQgcmVxdWlyZXMgcnVudGltZSBjYXN0cywgYW5kIGZvcmNlcyBub24tcHJpbWl0aXZlIHJl
ZmVyZW5jZWQgdHlwZXMgdG8gYWxzbyBlbWl0IHJ1bnRpbWUgY2FzdCBoZWxwZXJzLiAqLworY2xh
c3MgVHlwZU5lZWRpbmdDYXN0IDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgeworcHVibGljOgor
ICAgIGVudW0geworICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCisgICAgICAgIFN0cmluZ1NldCA9
IDEgPDwgMCwKKyAgICAgICAgTnVtYmVyU2V0ID0gMSA8PCAxLAorICAgICAgICBBbmltYWxzU2V0
ID0gMSA8PCAyLAorICAgICAgICBJZFNldCA9IDEgPDwgMywKKyAgICAgICAgVHJlZVNldCA9IDEg
PDwgNCwKKyAgICAgICAgQWxsRmllbGRzU2V0ID0gKFN0cmluZ1NldCB8IE51bWJlclNldCB8IEFu
aW1hbHNTZXQgfCBJZFNldCB8IFRyZWVTZXQpCisgICAgfTsKKworICAgIHRlbXBsYXRlPGludCBT
VEFURT4KKyAgICBjbGFzcyBCdWlsZGVyIHsKKyAgICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8
SlNPTjo6T2JqZWN0PiBtX3Jlc3VsdDsKKworICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVp
bGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7Cisg
ICAgICAgIH0KKworICAgICAgICBCdWlsZGVyKFJlZjwvKlR5cGVOZWVkaW5nQ2FzdCovSlNPTjo6
T2JqZWN0PiYmIG9iamVjdCkKKyAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3Qp
KQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxk
c1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKKyAgICAgICAgfQorICAg
ICAgICBmcmllbmQgY2xhc3MgVHlwZU5lZWRpbmdDYXN0OworICAgIHB1YmxpYzoKKworICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgU3RyaW5nU2V0PiYgc2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgdmFs
dWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTdHJp
bmdTZXQpLCBwcm9wZXJ0eV9zdHJpbmdfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1
bHQtPnNldFN0cmluZygic3RyaW5nIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2Fz
dFN0YXRlPFN0cmluZ1NldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBOdW1iZXJTZXQ+JiBzZXROdW1iZXIoaW50IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTnVtYmVyU2V0KSwgcHJvcGVydHlfbnVtYmVyX2Fs
cmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2VyKCJudW1iZXIiX3Ms
IHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TnVtYmVyU2V0PigpOworICAg
ICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IEFuaW1hbHNTZXQ+JiBzZXRBbmltYWxz
KEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHMgdmFsdWUpCisgICAgICAg
IHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBBbmltYWxzU2V0KSwgcHJv
cGVydHlfYW5pbWFsc19hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3Ry
aW5nKCJhbmltYWxzIl9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51
bUNvbnN0YW50VmFsdWUodmFsdWUpKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8QW5p
bWFsc1NldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBJZFNldD4m
IHNldElkKGludCB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
IShTVEFURSAmIElkU2V0KSwgcHJvcGVydHlfaWRfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAg
bV9yZXN1bHQtPnNldEludGVnZXIoImlkIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPElkU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8
IFRyZWVTZXQ+JiBzZXRUcmVlKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1
cnNpdmVPYmplY3QxPiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIFRyZWVTZXQpLCBwcm9wZXJ0eV90cmVlX2FscmVhZHlfc2V0KTsKKyAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoInRyZWUiX3MsIHZhbHVlKTsKKyAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8VHJlZVNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIFJlZjxU
eXBlTmVlZGluZ0Nhc3Q+IHJlbGVhc2UoKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxF
X0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOworICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFR5cGVOZWVkaW5nQ2FzdCkgPT0gc2l6ZW9m
KEpTT046Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsKKworICAgICAgICAgICAgUmVmPEpTT046Ok9i
amVjdD4ganNvblJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgICAg
ICBhdXRvIHJlc3VsdCA9IFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPFR5cGVOZWVkaW5n
Q2FzdD4qPigmanNvblJlc3VsdCkpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAg
ICAgfQorICAgIH07CisKKyAgICAvKgorICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKKyAg
ICAgKiBSZWY8VHlwZU5lZWRpbmdDYXN0PiByZXN1bHQgPSBUeXBlTmVlZGluZ0Nhc3Q6OmNyZWF0
ZSgpCisgICAgICogICAgIC5zZXRTdHJpbmcoLi4uKQorICAgICAqICAgICAuc2V0TnVtYmVyKC4u
LikKKyAgICAgKiAgICAgLnNldEFuaW1hbHMoLi4uKQorICAgICAqICAgICAuc2V0SWQoLi4uKQor
ICAgICAqICAgICAuc2V0VHJlZSguLi4pCisgICAgICogICAgIC5yZWxlYXNlKCk7CisgICAgICov
CisgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCisgICAgeworICAgICAg
ICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7Cisg
ICAgfQorfTsKKworZW51bSBjbGFzcyBVbmNhc3RlZEFuaW1hbHMgeworICAgIFBpZ3MgPSA0LAor
ICAgIENvd3MgPSA1LAorICAgIENhdHMgPSA2LAorICAgIEhlbnMgPSAxLAorfTsgLy8gZW51bSBj
bGFzcyBVbmNhc3RlZEFuaW1hbHMKKworZW51bSBjbGFzcyBDYXN0ZWRBbmltYWxzIHsKKyAgICBE
dWNrcyA9IDAsCisgICAgSGVucyA9IDEsCisgICAgQ3Jvd3MgPSAyLAorICAgIEZsYW1pbmdvcyA9
IDMsCit9OyAvLyBlbnVtIGNsYXNzIENhc3RlZEFuaW1hbHMKKworY2xhc3MgUmVjdXJzaXZlT2Jq
ZWN0MSA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKK3B1YmxpYzoKKyAgICBlbnVtIHsKKyAg
ICAgICAgTm9GaWVsZHNTZXQgPSAwLAorICAgICAgICBBbGxGaWVsZHNTZXQgPSAwCisgICAgfTsK
KworICAgIHRlbXBsYXRlPGludCBTVEFURT4KKyAgICBjbGFzcyBCdWlsZGVyIHsKKyAgICBwcml2
YXRlOgorICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBtX3Jlc3VsdDsKKworICAgICAgICB0
ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFU
RSB8IFNURVA+Kj4odGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyKFJlZjwvKlJl
Y3Vyc2l2ZU9iamVjdDEqL0pTT046Ok9iamVjdD4mJiBvYmplY3QpCisgICAgICAgICAgICA6IG1f
cmVzdWx0KFdURk1vdmUob2JqZWN0KSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9z
dGF0ZSk7CisgICAgICAgIH0KKyAgICAgICAgZnJpZW5kIGNsYXNzIFJlY3Vyc2l2ZU9iamVjdDE7
CisgICAgcHVibGljOgorCisgICAgICAgIFJlZjxSZWN1cnNpdmVPYmplY3QxPiByZWxlYXNlKCkK
KyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRz
U2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNp
emVvZihSZWN1cnNpdmVPYmplY3QxKSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0KSwgY2Fubm90X2Nh
c3QpOworCisgICAgICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uUmVzdWx0ID0gbV9yZXN1
bHQucmVsZWFzZU5vbk51bGwoKTsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gV1RGTW92ZSgq
cmVpbnRlcnByZXRfY2FzdDxSZWY8UmVjdXJzaXZlT2JqZWN0MT4qPigmanNvblJlc3VsdCkpOwor
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvKgor
ICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKKyAgICAgKiBSZWY8UmVjdXJzaXZlT2JqZWN0
MT4gcmVzdWx0ID0gUmVjdXJzaXZlT2JqZWN0MTo6Y3JlYXRlKCkKKyAgICAgKiAgICAgLnJlbGVh
c2UoKTsKKyAgICAgKi8KKyAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkK
KyAgICB7CisgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpKTsKKyAgICB9CisKKyAgICB2b2lkIHNldE9iaihSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0Mj4gdmFsdWUpCisgICAgeworICAgICAgICBK
U09OOjpPYmplY3RCYXNlOjpzZXRPYmplY3QoIm9iaiJfcywgV1RGTW92ZSh2YWx1ZSkpOworICAg
IH0KK307CisKK2NsYXNzIFJlY3Vyc2l2ZU9iamVjdDIgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFz
ZSB7CitwdWJsaWM6CisgICAgZW51bSB7CisgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKKyAgICAg
ICAgQWxsRmllbGRzU2V0ID0gMAorICAgIH07CisKKyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+Cisg
ICAgY2xhc3MgQnVpbGRlciB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPEpTT046Ok9i
amVjdD4gbV9yZXN1bHQ7CisKKyAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RB
VEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICpy
ZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOworICAgICAgICB9
CisKKyAgICAgICAgQnVpbGRlcihSZWY8LypSZWN1cnNpdmVPYmplY3QyKi9KU09OOjpPYmplY3Q+
JiYgb2JqZWN0KQorICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBi
dWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAgICAgICB9CisgICAgICAgIGZy
aWVuZCBjbGFzcyBSZWN1cnNpdmVPYmplY3QyOworICAgIHB1YmxpYzoKKworICAgICAgICBSZWY8
UmVjdXJzaXZlT2JqZWN0Mj4gcmVsZWFzZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7Cisg
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoUmVjdXJzaXZlT2JqZWN0MikgPT0gc2l6
ZW9mKEpTT046Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsKKworICAgICAgICAgICAgUmVmPEpTT046
Ok9iamVjdD4ganNvblJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAg
ICAgICBhdXRvIHJlc3VsdCA9IFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPFJlY3Vyc2l2
ZU9iamVjdDI+Kj4oJmpzb25SZXN1bHQpKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgICAgIH0KKyAgICB9OworCisgICAgLyoKKyAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6
CisgICAgICogUmVmPFJlY3Vyc2l2ZU9iamVjdDI+IHJlc3VsdCA9IFJlY3Vyc2l2ZU9iamVjdDI6
OmNyZWF0ZSgpCisgICAgICogICAgIC5yZWxlYXNlKCk7CisgICAgICovCisgICAgc3RhdGljIEJ1
aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gQnVpbGRl
cjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7CisgICAgfQorCisgICAgdm9p
ZCBzZXRPYmooUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVj
dDE+IHZhbHVlKQorICAgIHsKKyAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0T2JqZWN0KCJv
YmoiX3MsIFdURk1vdmUodmFsdWUpKTsKKyAgICB9Cit9OworCit9IC8vIFRlc3QKKwordGVtcGxh
dGU8PiBzdHJ1Y3QgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0
ZWRBbmltYWxzPiB7CitzdGF0aWMgdm9pZCBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShKU09O
OjpWYWx1ZSopOworfTsKK3RlbXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9y
OjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0PiB7CitzdGF0aWMgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD4gcnVudGltZUNhc3QoUmVmUHRy
PEpTT046OlZhbHVlPiYmIHZhbHVlKTsKK3N0YXRpYyB2b2lkIGFzc2VydFZhbHVlSGFzRXhwZWN0
ZWRUeXBlKEpTT046OlZhbHVlKik7Cit9OwordGVtcGxhdGU8PiBzdHJ1Y3QgQmluZGluZ1RyYWl0
czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QxPiB7CitzdGF0aWMg
dm9pZCBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShKU09OOjpWYWx1ZSopOworfTsKK3RlbXBs
YXRlPD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVj
dXJzaXZlT2JqZWN0Mj4geworc3RhdGljIHZvaWQgYXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUo
SlNPTjo6VmFsdWUqKTsKK307CisKK25hbWVzcGFjZSBUZXN0SGVscGVycyB7CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFByb3RvY29sRW51bVR5cGU+CitPcHRpb25hbDxQcm90b2NvbEVudW1UeXBlPiBw
YXJzZUVudW1WYWx1ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJik7CisKKy8vIEVudW1zIGluIHRo
ZSAnVGVzdCcgRG9tYWluCit0ZW1wbGF0ZTw+CitPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29s
OjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0
b3I6OlByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM+KGNvbnN0IFN0cmluZyYpOwordGVt
cGxhdGU8PgorT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFs
cz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNh
c3RlZEFuaW1hbHM+KGNvbnN0IFN0cmluZyYpOworCit9IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVy
cworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
KworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0
SGFzaDsKKworLy8gSGFzaCBkZWNsYXJhdGlvbnMgaW4gdGhlICdUZXN0JyBEb21haW4KK3RlbXBs
YXRlPD4KK3N0cnVjdCBEZWZhdWx0SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNh
c3RlZEFuaW1hbHM+IHsKKyAgICB0eXBlZGVmIEludEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6
VGVzdDo6VW5jYXN0ZWRBbmltYWxzPiBIYXNoOworfTsKK3RlbXBsYXRlPD4KK3N0cnVjdCBEZWZh
dWx0SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPiB7CisgICAg
dHlwZWRlZiBJbnRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+
IEhhc2g7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKyMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sT2JqZWN0cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUt
Y2FzdHMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisKKyNpbmNs
dWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25h
bWVzcGFjZSBJbnNwZWN0b3IgeworCituYW1lc3BhY2UgUHJvdG9jb2wgeworCituYW1lc3BhY2Ug
VGVzdEhlbHBlcnMgeworCitzdGF0aWMgY29uc3QgY2hhciogY29uc3QgZW51bV9jb25zdGFudF92
YWx1ZXNbXSA9IHsKKyAgICAiRHVja3MiLAorICAgICJIZW5zIiwKKyAgICAiQ3Jvd3MiLAorICAg
ICJGbGFtaW5nb3MiLAorICAgICJQaWdzIiwKKyAgICAiQ293cyIsCisgICAgIkNhdHMiLAorfTsK
KworU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CisgICAgcmV0dXJuIGVu
dW1fY29uc3RhbnRfdmFsdWVzW2NvZGVdOworfQorCisvLyBFbnVtcyBpbiB0aGUgJ1Rlc3QnIERv
bWFpbgorCit0ZW1wbGF0ZTw+CitPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpV
bmNhc3RlZEFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcp
Cit7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0geworICAgICAg
ICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFsczo6UGln
cywKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFu
aW1hbHM6OkNvd3MsCisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6
VW5jYXN0ZWRBbmltYWxzOjpDYXRzLAorICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9j
b2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFsczo6SGVucywKKyAgICB9OworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgNDsgKytpKQorICAgICAgICBpZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9j
b25zdGFudF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNbaV1dKQorICAgICAgICAgICAgcmV0dXJuIChJ
bnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHMpY29uc3RhbnRWYWx1ZXNb
aV07CisKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCit0ZW1wbGF0ZTw+CitPcHRpb25h
bDxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPiBwYXJzZUVudW1WYWx1
ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz4oY29u
c3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKK3sKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNv
bnN0YW50VmFsdWVzW10gPSB7CisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6
VGVzdDo6Q2FzdGVkQW5pbWFsczo6RHVja3MsCisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQ
cm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFsczo6SGVucywKKyAgICAgICAgKHNpemVfdClJbnNw
ZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzOjpDcm93cywKKyAgICAgICAgKHNp
emVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzOjpGbGFtaW5nb3Ms
CisgICAgfTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDQ7ICsraSkKKyAgICAgICAgaWYg
KHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ld
XSkKKyAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVk
QW5pbWFscyljb25zdGFudFZhbHVlc1tpXTsKKworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCisKKworCit2b2lkIEJpbmRpbmdUcmFpdHM8
SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz46OmFzc2VydFZhbHVlSGFz
RXhwZWN0ZWRUeXBlKEpTT046OlZhbHVlKiB2YWx1ZSkKK3sKKyNpZiBBU1NFUlRfRU5BQkxFRAor
ICAgIEFTU0VSVF9BUkcodmFsdWUsIHZhbHVlKTsKKyAgICBTdHJpbmcgcmVzdWx0OworICAgIGJv
b2wgY2FzdFN1Y2NlZWRlZCA9IHZhbHVlLT5hc1N0cmluZyhyZXN1bHQpOworICAgIEFTU0VSVChj
YXN0U3VjY2VlZGVkKTsKKyAgICBBU1NFUlQocmVzdWx0ID09ICJEdWNrcyIgfHwgcmVzdWx0ID09
ICJIZW5zIiB8fCByZXN1bHQgPT0gIkNyb3dzIiB8fCByZXN1bHQgPT0gIkZsYW1pbmdvcyIpOwor
I2Vsc2UgLy8gQVNTRVJUX0VOQUJMRUQKKyAgICBVTlVTRURfUEFSQU0odmFsdWUpOworI2VuZGlm
IC8vIEFTU0VSVF9FTkFCTEVECit9CisKK3ZvaWQgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlBy
b3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlw
ZShKU09OOjpWYWx1ZSogdmFsdWUpCit7CisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICBBU1NFUlRf
QVJHKHZhbHVlLCB2YWx1ZSk7CisgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gb2JqZWN0OworICAg
IGJvb2wgY2FzdFN1Y2NlZWRlZCA9IHZhbHVlLT5hc09iamVjdChvYmplY3QpOworICAgIEFTU0VS
VF9VTlVTRUQoY2FzdFN1Y2NlZWRlZCwgY2FzdFN1Y2NlZWRlZCk7CisgICAgeworICAgICAgICBh
dXRvIHN0cmluZ1BvcyA9IG9iamVjdC0+ZmluZCgic3RyaW5nIl9zKTsKKyAgICAgICAgQVNTRVJU
KHN0cmluZ1BvcyAhPSBvYmplY3QtPmVuZCgpKTsKKyAgICAgICAgQmluZGluZ1RyYWl0czxTdHJp
bmc+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShzdHJpbmdQb3MtPnZhbHVlLmdldCgpKTsK
KyAgICB9CisgICAgeworICAgICAgICBhdXRvIG51bWJlclBvcyA9IG9iamVjdC0+ZmluZCgibnVt
YmVyIl9zKTsKKyAgICAgICAgQVNTRVJUKG51bWJlclBvcyAhPSBvYmplY3QtPmVuZCgpKTsKKyAg
ICAgICAgQmluZGluZ1RyYWl0czxpbnQ+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShudW1i
ZXJQb3MtPnZhbHVlLmdldCgpKTsKKyAgICB9CisgICAgeworICAgICAgICBhdXRvIGFuaW1hbHNQ
b3MgPSBvYmplY3QtPmZpbmQoImFuaW1hbHMiX3MpOworICAgICAgICBBU1NFUlQoYW5pbWFsc1Bv
cyAhPSBvYmplY3QtPmVuZCgpKTsKKyAgICAgICAgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlBy
b3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUo
YW5pbWFsc1Bvcy0+dmFsdWUuZ2V0KCkpOworICAgIH0KKyAgICB7CisgICAgICAgIGF1dG8gaWRQ
b3MgPSBvYmplY3QtPmZpbmQoImlkIl9zKTsKKyAgICAgICAgQVNTRVJUKGlkUG9zICE9IG9iamVj
dC0+ZW5kKCkpOworICAgICAgICBCaW5kaW5nVHJhaXRzPGludD46OmFzc2VydFZhbHVlSGFzRXhw
ZWN0ZWRUeXBlKGlkUG9zLT52YWx1ZS5nZXQoKSk7CisgICAgfQorICAgIHsKKyAgICAgICAgYXV0
byB0cmVlUG9zID0gb2JqZWN0LT5maW5kKCJ0cmVlIl9zKTsKKyAgICAgICAgQVNTRVJUKHRyZWVQ
b3MgIT0gb2JqZWN0LT5lbmQoKSk7CisgICAgICAgIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRU
eXBlKHRyZWVQb3MtPnZhbHVlLmdldCgpKTsKKyAgICB9CisKKyAgICBpbnQgZm91bmRQcm9wZXJ0
aWVzQ291bnQgPSA1OworICAgIGlmIChmb3VuZFByb3BlcnRpZXNDb3VudCAhPSBvYmplY3QtPnNp
emUoKSkKKyAgICAgICAgRkFUQUwoIlVuZXhwZWN0ZWQgcHJvcGVydGllcyBpbiBvYmplY3Q6ICVz
XG4iLCBvYmplY3QtPnRvSlNPTlN0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKKyNlbHNlIC8vIEFT
U0VSVF9FTkFCTEVECisgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKKyNlbmRpZiAvLyBBU1NFUlRf
RU5BQkxFRAorfQorCitSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRp
bmdDYXN0PiBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVk
aW5nQ2FzdD46OnJ1bnRpbWVDYXN0KFJlZlB0cjxKU09OOjpWYWx1ZT4mJiB2YWx1ZSkKK3sKKyAg
ICBSZWZQdHI8SlNPTjo6T2JqZWN0PiByZXN1bHQ7CisgICAgYm9vbCBjYXN0U3VjY2VlZGVkID0g
dmFsdWUtPmFzT2JqZWN0KHJlc3VsdCk7CisgICAgQVNTRVJUX1VOVVNFRChjYXN0U3VjY2VlZGVk
LCBjYXN0U3VjY2VlZGVkKTsKKyAgICBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKHJlc3Vs
dC5nZXQoKSk7CisgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdCkgPT0gc2l6ZW9mKEpTT046Ok9iamVjdEJhc2UpLCB0eXBl
X2Nhc3RfcHJvYmxlbSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdCo+KHN0YXRpY19jYXN0PEpTT046Ok9iamVjdEJhc2Uq
PihyZXN1bHQuZ2V0KCkpKTsKK30KKworCit2b2lkIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRU
eXBlKEpTT046OlZhbHVlKiB2YWx1ZSkKK3sKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgIEFTU0VS
VF9BUkcodmFsdWUsIHZhbHVlKTsKKyAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBvYmplY3Q7Cisg
ICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdmFsdWUtPmFzT2JqZWN0KG9iamVjdCk7CisgICAgQVNT
RVJUX1VOVVNFRChjYXN0U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsKKworICAgIGludCBmb3Vu
ZFByb3BlcnRpZXNDb3VudCA9IDA7CisgICAgeworICAgICAgICBhdXRvIG9ialBvcyA9IG9iamVj
dC0+ZmluZCgib2JqIl9zKTsKKyAgICAgICAgaWYgKG9ialBvcyAhPSBvYmplY3QtPmVuZCgpKSB7
CisgICAgICAgICAgICBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJl
Y3Vyc2l2ZU9iamVjdDI+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShvYmpQb3MtPnZhbHVl
LmdldCgpKTsKKyAgICAgICAgICAgICsrZm91bmRQcm9wZXJ0aWVzQ291bnQ7CisgICAgICAgIH0K
KyAgICB9CisgICAgaWYgKGZvdW5kUHJvcGVydGllc0NvdW50ICE9IG9iamVjdC0+c2l6ZSgpKQor
ICAgICAgICBGQVRBTCgiVW5leHBlY3RlZCBwcm9wZXJ0aWVzIGluIG9iamVjdDogJXNcbiIsIG9i
amVjdC0+dG9KU09OU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOworI2Vsc2UgLy8gQVNTRVJUX0VO
QUJMRUQKKyAgICBVTlVTRURfUEFSQU0odmFsdWUpOworI2VuZGlmIC8vIEFTU0VSVF9FTkFCTEVE
Cit9CisKK3ZvaWQgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1
cnNpdmVPYmplY3QyPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSlNPTjo6VmFsdWUqIHZh
bHVlKQoreworI2lmIEFTU0VSVF9FTkFCTEVECisgICAgQVNTRVJUX0FSRyh2YWx1ZSwgdmFsdWUp
OworICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG9iamVjdDsKKyAgICBib29sIGNhc3RTdWNjZWVk
ZWQgPSB2YWx1ZS0+YXNPYmplY3Qob2JqZWN0KTsKKyAgICBBU1NFUlRfVU5VU0VEKGNhc3RTdWNj
ZWVkZWQsIGNhc3RTdWNjZWVkZWQpOworCisgICAgaW50IGZvdW5kUHJvcGVydGllc0NvdW50ID0g
MDsKKyAgICB7CisgICAgICAgIGF1dG8gb2JqUG9zID0gb2JqZWN0LT5maW5kKCJvYmoiX3MpOwor
ICAgICAgICBpZiAob2JqUG9zICE9IG9iamVjdC0+ZW5kKCkpIHsKKyAgICAgICAgICAgIEJpbmRp
bmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT46OmFz
c2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKG9ialBvcy0+dmFsdWUuZ2V0KCkpOworICAgICAgICAg
ICAgKytmb3VuZFByb3BlcnRpZXNDb3VudDsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoZm91
bmRQcm9wZXJ0aWVzQ291bnQgIT0gb2JqZWN0LT5zaXplKCkpCisgICAgICAgIEZBVEFMKCJVbmV4
cGVjdGVkIHByb3BlcnRpZXMgaW4gb2JqZWN0OiAlc1xuIiwgb2JqZWN0LT50b0pTT05TdHJpbmco
KS5hc2NpaSgpLmRhdGEoKSk7CisjZWxzZSAvLyBBU1NFUlRfRU5BQkxFRAorICAgIFVOVVNFRF9Q
QVJBTSh2YWx1ZSk7CisjZW5kaWYgLy8gQVNTRVJUX0VOQUJMRUQKK30KKworfSAvLyBuYW1lc3Bh
Y2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJh
Y2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlw
ZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworCisK
K25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisj
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIK
KyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSAi
VGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorCituYW1lc3BhY2UgSW5zcGVj
dG9yIHsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xDb25maWd1cmF0aW9uLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBl
LXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+CisKK19f
YXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJv
dG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbi5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUt
cmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKKworI2lt
cG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tl
bmREaXNwYXRjaGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0
Y2hhYmxlQWdlbnQuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVj
dG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJu
YXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKwor
QGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KK3sKKyAgICBBdWdtZW50
YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworfQorCistIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNv
bnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAg
ICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xs
ZXIgPSBjb250cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MK
K3sKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bEV2ZW50RGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0
eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1w
b3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPHd0Zi9KU09OVmFs
dWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2wuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5n
LXJ1bnRpbWUtY2FzdHMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCisjaW1wb3J0IDxXZWJJbnNw
ZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+CisKKworQGNsYXNzIFRlc3RQcm90b2NvbFRl
c3RUeXBlTmVlZGluZ0Nhc3Q7CitAY2xhc3MgVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVj
dDE7CitAY2xhc3MgVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDI7CisKK3R5cGVkZWYg
TlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHMpIHsKKyAg
ICBUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzUGlncywKKyAgICBUZXN0UHJvdG9jb2xU
ZXN0VW5jYXN0ZWRBbmltYWxzQ293cywKKyAgICBUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmlt
YWxzQ2F0cywKKyAgICBUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzSGVucywKK307CisK
K3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxz
KSB7CisgICAgVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHNEdWNrcywKKyAgICBUZXN0UHJv
dG9jb2xUZXN0Q2FzdGVkQW5pbWFsc0hlbnMsCisgICAgVGVzdFByb3RvY29sVGVzdENhc3RlZEFu
aW1hbHNDcm93cywKKyAgICBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFsc0ZsYW1pbmdvcywK
K307CisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFj
ZSBUZXN0UHJvdG9jb2xUZXN0VHlwZU5lZWRpbmdDYXN0IDogUldJUHJvdG9jb2xKU09OT2JqZWN0
CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcg
KiwgaWQ+ICopcGF5bG9hZDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0
OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OworLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZyBudW1iZXI6KGludCludW1iZXIgYW5pbWFs
czooVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHMpYW5pbWFscyBpZGVudGlmaWVyOihpbnQp
aWRlbnRpZmllciB0cmVlOihUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSAqKXRyZWU7
CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKnN0
cmluZzsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCBu
dW1iZXI7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBUZXN0
UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFscyBhbmltYWxzOworLyogcmVxdWlyZWQgKi8gQHByb3Bl
cnR5IChub25hdG9taWMsIGFzc2lnbikgaW50IGlkZW50aWZpZXI7CisvKiByZXF1aXJlZCAqLyBA
cHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluKSBUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2Jq
ZWN0MSAqdHJlZTsKK0BlbmQKKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQi
KSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxIDogUldJUHJv
dG9jb2xKU09OT2JqZWN0CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rp
b25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0
aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OworLyog
b3B0aW9uYWwgKi8gQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgVGVzdFByb3RvY29sVGVz
dFJlY3Vyc2l2ZU9iamVjdDIgKm9iajsKK0BlbmQKKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0
eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmpl
Y3QyIDogUldJUHJvdG9jb2xKU09OT2JqZWN0CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXls
b2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKKy0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29u
T2JqZWN0OworLyogb3B0aW9uYWwgKi8gQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgVGVz
dFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgKm9iajsKK0BlbmQKKworCisKKworCisKKyNp
bXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMu
aD4KKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAorCisjIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sSW50ZXJuYWwuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5
cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFBy
b3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21l
bnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4K
KworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbiBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5o
IgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgor
CituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBl
PgorT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5n
JiB2YWx1ZSk7CisKK2lubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xU
ZXN0VW5jYXN0ZWRBbmltYWxzIHZhbHVlKQoreworICAgIHN3aXRjaCh2YWx1ZSkgeworICAgIGNh
c2UgVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc1BpZ3M6CisgICAgICAgIHJldHVybiAi
UGlncyJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHNDb3dzOgor
ICAgICAgICByZXR1cm4gIkNvd3MiX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xUZXN0VW5jYXN0
ZWRBbmltYWxzQ2F0czoKKyAgICAgICAgcmV0dXJuICJDYXRzIl9zOworICAgIGNhc2UgVGVzdFBy
b3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc0hlbnM6CisgICAgICAgIHJldHVybiAiSGVucyJfczsK
KyAgICB9Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xUZXN0
VW5jYXN0ZWRBbmltYWxzPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkK
K3sKKyAgICBpZiAodmFsdWUgPT0gIlBpZ3MiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29s
VGVzdFVuY2FzdGVkQW5pbWFsc1BpZ3M7CisgICAgaWYgKHZhbHVlID09ICJDb3dzIikKKyAgICAg
ICAgcmV0dXJuIFRlc3RQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHNDb3dzOworICAgIGlmICh2
YWx1ZSA9PSAiQ2F0cyIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRB
bmltYWxzQ2F0czsKKyAgICBpZiAodmFsdWUgPT0gIkhlbnMiKQorICAgICAgICByZXR1cm4gVGVz
dFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc0hlbnM7CisgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKK30KKworaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFRlc3RD
YXN0ZWRBbmltYWxzIHZhbHVlKQoreworICAgIHN3aXRjaCh2YWx1ZSkgeworICAgIGNhc2UgVGVz
dFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHNEdWNrczoKKyAgICAgICAgcmV0dXJuICJEdWNrcyJf
czsKKyAgICBjYXNlIFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzSGVuczoKKyAgICAgICAg
cmV0dXJuICJIZW5zIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHND
cm93czoKKyAgICAgICAgcmV0dXJuICJDcm93cyJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbFRl
c3RDYXN0ZWRBbmltYWxzRmxhbWluZ29zOgorICAgICAgICByZXR1cm4gIkZsYW1pbmdvcyJfczsK
KyAgICB9Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xUZXN0
Q2FzdGVkQW5pbWFscz4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7
CisgICAgaWYgKHZhbHVlID09ICJEdWNrcyIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xU
ZXN0Q2FzdGVkQW5pbWFsc0R1Y2tzOworICAgIGlmICh2YWx1ZSA9PSAiSGVucyIpCisgICAgICAg
IHJldHVybiBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFsc0hlbnM7CisgICAgaWYgKHZhbHVl
ID09ICJDcm93cyIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFs
c0Nyb3dzOworICAgIGlmICh2YWx1ZSA9PSAiRmxhbWluZ29zIikKKyAgICAgICAgcmV0dXJuIFRl
c3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzRmxhbWluZ29zOworICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0
eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIK
KworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFy
c2VyLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0
ZS5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW50ZXJmYWNlIFRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucyAoVGVzdERvbWFpbikKKworKyAodm9pZClfcGFyc2VUeXBlTmVl
ZGluZ0Nhc3Q6KFRlc3RQcm90b2NvbFRlc3RUeXBlTmVlZGluZ0Nhc3QgKiopb3V0VmFsdWUgZnJv
bVBheWxvYWQ6KGlkKXBheWxvYWQ7CisrICh2b2lkKV9wYXJzZUNhc3RlZE9iamVjdElkOihOU051
bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNl
VW5jYXN0ZWRPYmplY3RJZDooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBh
eWxvYWQ7CisrICh2b2lkKV9wYXJzZVVuY2FzdGVkQW5pbWFsczooTlNOdW1iZXIgKiopb3V0VmFs
dWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisrICh2b2lkKV9wYXJzZUNhc3RlZEFuaW1hbHM6
KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworKyAodm9pZClf
cGFyc2VSZWN1cnNpdmVPYmplY3QxOihUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSAq
KilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNlUmVjdXJz
aXZlT2JqZWN0MjooVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDIgKiopb3V0VmFsdWUg
ZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucyAoVGVzdERvbWFpbikKKworKyAodm9pZClfcGFyc2VUeXBl
TmVlZGluZ0Nhc3Q6KFRlc3RQcm90b2NvbFRlc3RUeXBlTmVlZGluZ0Nhc3QgKiopb3V0VmFsdWUg
ZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9U
WVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSBbW1Rl
c3RQcm90b2NvbFRlc3RUeXBlTmVlZGluZ0Nhc3QgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXls
b2FkXTsKK30KKworKyAodm9pZClfcGFyc2VDYXN0ZWRPYmplY3RJZDooTlNOdW1iZXIgKiopb3V0
VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9S
X0JBRF9UWVBFKHBheWxvYWQsIFtOU051bWJlciBjbGFzc10pOworICAgICpvdXRWYWx1ZSA9IChO
U051bWJlciAqKXBheWxvYWQ7Cit9CisKKysgKHZvaWQpX3BhcnNlVW5jYXN0ZWRPYmplY3RJZDoo
TlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJP
V19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU051bWJlciBjbGFzc10pOworICAg
ICpvdXRWYWx1ZSA9IChOU051bWJlciAqKXBheWxvYWQ7Cit9CisKKysgKHZvaWQpX3BhcnNlVW5j
YXN0ZWRBbmltYWxzOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9h
ZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TU3RyaW5n
IGNsYXNzXSk7CisgICAgT3B0aW9uYWw8VGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFscz4g
cmVzdWx0ID0gSW5zcGVjdG9yOjpmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sVGVzdFVu
Y2FzdGVkQW5pbWFscz4ocGF5bG9hZCk7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfRU5V
TV9WQUxVRShyZXN1bHQsIEAiVW5jYXN0ZWRBbmltYWxzIik7CisgICAgKm91dFZhbHVlID0gQChy
ZXN1bHQudmFsdWUoKSk7Cit9CisKKysgKHZvaWQpX3BhcnNlQ2FzdGVkQW5pbWFsczooTlNOdW1i
ZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENF
UFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBjbGFzc10pOworICAgIE9wdGlv
bmFsPFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzPiByZXN1bHQgPSBJbnNwZWN0b3I6OmZy
b21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFscz4ocGF5bG9hZCk7
CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfRU5VTV9WQUxVRShyZXN1bHQsIEAiQ2FzdGVk
QW5pbWFscyIpOworICAgICpvdXRWYWx1ZSA9IEAocmVzdWx0LnZhbHVlKCkpOworfQorCisrICh2
b2lkKV9wYXJzZVJlY3Vyc2l2ZU9iamVjdDE6KFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmpl
Y3QxICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7CisgICAg
Km91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSBhbGxvY10gaW5p
dFdpdGhQYXlsb2FkOnBheWxvYWRdOworfQorCisrICh2b2lkKV9wYXJzZVJlY3Vyc2l2ZU9iamVj
dDI6KFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QyICoqKW91dFZhbHVlIGZyb21QYXls
b2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXls
b2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9j
b2xUZXN0UmVjdXJzaXZlT2JqZWN0MiBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOwor
fQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMu
bW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgi
CisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgor
I2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisK
K3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9j
b2xUZXN0VHlwZU5lZWRpbmdDYXN0CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6
KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQKK3sKKyAgICBp
ZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAInN0cmluZyJdLCBA
InN0cmluZyIpOworICAgIHNlbGYuc3RyaW5nID0gcGF5bG9hZFtAInN0cmluZyJdOworCisgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AibnVtYmVyIl0s
IEAibnVtYmVyIik7CisgICAgc2VsZi5udW1iZXIgPSBbcGF5bG9hZFtAIm51bWJlciJdIGludGVn
ZXJWYWx1ZV07CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBh
eWxvYWRbQCJhbmltYWxzIl0sIEAiYW5pbWFscyIpOworICAgIE9wdGlvbmFsPFRlc3RQcm90b2Nv
bFRlc3RDYXN0ZWRBbmltYWxzPiBhbmltYWxzID0gZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90
b2NvbFRlc3RDYXN0ZWRBbmltYWxzPihwYXlsb2FkW0AiYW5pbWFscyJdKTsKKyAgICBUSFJPV19F
WENFUFRJT05fRk9SX0JBRF9FTlVNX1ZBTFVFKGFuaW1hbHMsIEAiYW5pbWFscyIpOworICAgIHNl
bGYuYW5pbWFscyA9IGFuaW1hbHMudmFsdWUoKTsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
UkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImlkIl0sIEAiaWQiKTsKKyAgICBzZWxmLmlkZW50
aWZpZXIgPSBbcGF5bG9hZFtAImlkIl0gaW50ZWdlclZhbHVlXTsKKworICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAInRyZWUiXSwgQCJ0cmVlIik7Cisg
ICAgc2VsZi50cmVlID0gW1tUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSBhbGxvY10g
aW5pdFdpdGhQYXlsb2FkOnBheWxvYWRbQCJ0cmVlIl1dOworCisgICAgcmV0dXJuIHNlbGY7Cit9
CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09O
T2JqZWN0ICopb2JqZWN0Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEpTT05P
YmplY3Q6W29iamVjdCB0b0pTT05PYmplY3RdLmdldCgpXSkpCisgICAgICAgIHJldHVybiBuaWw7
CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoU3RyaW5n
OihOU1N0cmluZyAqKXN0cmluZyBudW1iZXI6KGludCludW1iZXIgYW5pbWFsczooVGVzdFByb3Rv
Y29sVGVzdENhc3RlZEFuaW1hbHMpYW5pbWFscyBpZGVudGlmaWVyOihpbnQpaWRlbnRpZmllciB0
cmVlOihUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSAqKXRyZWUKK3sKKyAgICBpZiAo
IShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkoc3RyaW5nLCBAInN0cmluZyIpOworICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkodHJlZSwgQCJ0cmVlIik7CisK
KyAgICBzZWxmLnN0cmluZyA9IHN0cmluZzsKKyAgICBzZWxmLm51bWJlciA9IG51bWJlcjsKKyAg
ICBzZWxmLmFuaW1hbHMgPSBhbmltYWxzOworICAgIHNlbGYuaWRlbnRpZmllciA9IGlkZW50aWZp
ZXI7CisgICAgc2VsZi50cmVlID0gdHJlZTsKKworICAgIHJldHVybiBzZWxmOworfQorCistICh2
b2lkKXNldFN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcKK3sKKyAgICBbc3VwZXIgc2V0U3RyaW5n
OnN0cmluZyBmb3JLZXk6QCJzdHJpbmciXTsKK30KKworLSAoTlNTdHJpbmcgKilzdHJpbmcKK3sK
KyAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAInN0cmluZyJdOworfQorCistICh2b2lk
KXNldE51bWJlcjooaW50KW51bWJlcgoreworICAgIFtzdXBlciBzZXRJbnRlZ2VyOm51bWJlciBm
b3JLZXk6QCJudW1iZXIiXTsKK30KKworLSAoaW50KW51bWJlcgoreworICAgIHJldHVybiBbc3Vw
ZXIgaW50ZWdlckZvcktleTpAIm51bWJlciJdOworfQorCistICh2b2lkKXNldEFuaW1hbHM6KFRl
c3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzKWFuaW1hbHMKK3sKKyAgICBbc3VwZXIgc2V0U3Ry
aW5nOnRvUHJvdG9jb2xTdHJpbmcoYW5pbWFscykgZm9yS2V5OkAiYW5pbWFscyJdOworfQorCist
IChUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFscylhbmltYWxzCit7CisgICAgcmV0dXJuIGZy
b21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFscz4oW3N1cGVyIHN0
cmluZ0ZvcktleTpAImFuaW1hbHMiXSkudmFsdWUoKTsKK30KKworLSAodm9pZClzZXRJZGVudGlm
aWVyOihpbnQpaWRlbnRpZmllcgoreworICAgIFtzdXBlciBzZXRJbnRlZ2VyOmlkZW50aWZpZXIg
Zm9yS2V5OkAiaWQiXTsKK30KKworLSAoaW50KWlkZW50aWZpZXIKK3sKKyAgICByZXR1cm4gW3N1
cGVyIGludGVnZXJGb3JLZXk6QCJpZCJdOworfQorCistICh2b2lkKXNldFRyZWU6KFRlc3RQcm90
b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxICopdHJlZQoreworICAgIFtzdXBlciBzZXRPYmplY3Q6
dHJlZSBmb3JLZXk6QCJ0cmVlIl07Cit9CisKKy0gKFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVP
YmplY3QxICopdHJlZQoreworICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb2JqZWN0ID0gW3N1
cGVyIG9iamVjdEZvcktleTpAInRyZWUiXTsKKyAgICBpZiAoIW9iamVjdCkKKyAgICAgICAgcmV0
dXJuIG5pbDsKKyAgICByZXR1cm4gW1tUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSBh
bGxvY10gaW5pdFdpdGhKU09OT2JqZWN0Oltbc3VwZXIgb2JqZWN0Rm9yS2V5OkAidHJlZSJdIHRv
SlNPTk9iamVjdF0uZ2V0KCldOworfQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJv
dG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXls
b2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCit7Cisg
ICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAg
ICBzZWxmLm9iaiA9IFtbVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDIgYWxsb2NdIGlu
aXRXaXRoUGF5bG9hZDpwYXlsb2FkW0Aib2JqIl1dOworCisgICAgcmV0dXJuIHNlbGY7Cit9Cist
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2Jq
ZWN0ICopb2JqZWN0Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEpTT05PYmpl
Y3Q6W29iamVjdCB0b0pTT05PYmplY3RdLmdldCgpXSkpCisgICAgICAgIHJldHVybiBuaWw7CisK
KyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClzZXRPYmo6KFRlc3RQcm90b2NvbFRlc3RS
ZWN1cnNpdmVPYmplY3QyICopb2JqCit7CisgICAgW3N1cGVyIHNldE9iamVjdDpvYmogZm9yS2V5
OkAib2JqIl07Cit9CisKKy0gKFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QyICopb2Jq
Cit7CisgICAgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvYmplY3QgPSBbc3VwZXIgb2JqZWN0Rm9y
S2V5OkAib2JqIl07CisgICAgaWYgKCFvYmplY3QpCisgICAgICAgIHJldHVybiBuaWw7CisgICAg
cmV0dXJuIFtbVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDIgYWxsb2NdIGluaXRXaXRo
SlNPTk9iamVjdDpbW3N1cGVyIG9iamVjdEZvcktleTpAIm9iaiJdIHRvSlNPTk9iamVjdF0uZ2V0
KCldOworfQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUZXN0UmVjdXJz
aXZlT2JqZWN0MgorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5T
RGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCit7CisgICAgaWYgKCEoc2VsZiA9
IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBzZWxmLm9iaiA9IFtb
VGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpw
YXlsb2FkW0Aib2JqIl1dOworCisgICAgcmV0dXJuIHNlbGY7Cit9CistIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopb2JqZWN0Cit7
CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEpTT05PYmplY3Q6W29iamVjdCB0b0pT
T05PYmplY3RdLmdldCgpXSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICByZXR1cm4gc2Vs
ZjsKK30KKworLSAodm9pZClzZXRPYmo6KFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3Qx
ICopb2JqCit7CisgICAgW3N1cGVyIHNldE9iamVjdDpvYmogZm9yS2V5OkAib2JqIl07Cit9CisK
Ky0gKFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxICopb2JqCit7CisgICAgUldJUHJv
dG9jb2xKU09OT2JqZWN0ICpvYmplY3QgPSBbc3VwZXIgb2JqZWN0Rm9yS2V5OkAib2JqIl07Cisg
ICAgaWYgKCFvYmplY3QpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgcmV0dXJuIFtbVGVzdFBy
b3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDpbW3N1
cGVyIG9iamVjdEZvcktleTpAIm9iaiJdIHRvSlNPTk9iamVjdF0uZ2V0KCldOworfQorCitAZW5k
CisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUt
d2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVy
cy5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZDU3NzYyYThmZjhiZTRhOWFlNDlkYzllZjU0N2I5
ZDMyMTNkYzdiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNv
bi1yZXN1bHQKQEAgLTAsMCArMSwxMTEwIEBACisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFj
a2VuZENvbW1hbmRzLmpzLmluCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlw
ZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzLmluCisK
KyMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpz
b24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UK
KworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCisjaW5jbHVk
ZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckZyb250ZW5kUm91dGVyLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdm9pZCBzZXRCYWNrZW5kRGlz
cGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tl
bmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQorICAgIEJhY2tlbmREaXNwYXRj
aGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNo
ZXIuZ2V0KCk7IH0KK3ByaXZhdGU6CisgICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2Jh
Y2tlbmREaXNwYXRjaGVyOworfTsKKworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisK
KyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyMjIyBF
bmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSB0eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRlc3RQcm90
b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKKworCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVy
cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNv
biBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0Zi9K
U09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCisjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgor
I2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCituYW1l
c3BhY2UgSW5zcGVjdG9yIHsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMg
RW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBU
ZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xP
YmplY3RzLmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEZyb250ZW5k
Um91dGVyOworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEZy
b250ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0
Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRoLW9w
ZW4tcGFyYW1ldGVycy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJz
LmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7
CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVu
ZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5o
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRoLW9wZW4tcGFyYW1l
dGVycy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVz
Lmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7
CisKKworCituYW1lc3BhY2UgUHJvdG9jb2wgeworCisKKworLy8gRm9yd2FyZCBkZWNsYXJhdGlv
bnMuCituYW1lc3BhY2UgVGVzdCB7CitjbGFzcyBOb09wZW5QYXJhbWV0ZXJzOworY2xhc3MgT3Bl
blBhcmFtZXRlcnM7Cit9IC8vIFRlc3QKKy8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4K
KworCisKKworbmFtZXNwYWNlIFRlc3QgeworCitjbGFzcyBOb09wZW5QYXJhbWV0ZXJzIDogcHVi
bGljIEpTT046Ok9iamVjdEJhc2UgeworcHVibGljOgorICAgIGVudW0geworICAgICAgICBOb0Zp
ZWxkc1NldCA9IDAsCisgICAgICAgIE9uZVNldCA9IDEgPDwgMCwKKyAgICAgICAgVHdvU2V0ID0g
MSA8PCAxLAorICAgICAgICBBbGxGaWVsZHNTZXQgPSAoT25lU2V0IHwgVHdvU2V0KQorICAgIH07
CisKKyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CisgICAgY2xhc3MgQnVpbGRlciB7CisgICAgcHJp
dmF0ZToKKyAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7CisKKyAgICAgICAg
dGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RB
VEUgfCBTVEVQPio+KHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcihSZWY8LypO
b09wZW5QYXJhbWV0ZXJzKi9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQorICAgICAgICAgICAgOiBt
X3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRf
c3RhdGUpOworICAgICAgICB9CisgICAgICAgIGZyaWVuZCBjbGFzcyBOb09wZW5QYXJhbWV0ZXJz
OworICAgIHB1YmxpYzoKKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgT25lU2V0PiYgc2V0T25l
KGRvdWJsZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIE9uZVNldCksIHByb3BlcnR5X29uZV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0RG91YmxlKCJvbmUiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8T25lU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8
IFR3b1NldD4mIHNldFR3byhkb3VibGUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUd29TZXQpLCBwcm9wZXJ0eV90d29fYWxyZWFkeV9zZXQp
OworICAgICAgICAgICAgbV9yZXN1bHQtPnNldERvdWJsZSgidHdvIl9zLCB2YWx1ZSk7CisgICAg
ICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFR3b1NldD4oKTsKKyAgICAgICAgfQorCisgICAgICAg
IFJlZjxOb09wZW5QYXJhbWV0ZXJzPiByZWxlYXNlKCkKKyAgICAgICAgeworICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5
KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihOb09wZW5QYXJhbWV0ZXJzKSA9
PSBzaXplb2YoSlNPTjo6T2JqZWN0KSwgY2Fubm90X2Nhc3QpOworCisgICAgICAgICAgICBSZWY8
SlNPTjo6T2JqZWN0PiBqc29uUmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKKyAg
ICAgICAgICAgIGF1dG8gcmVzdWx0ID0gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8Tm9P
cGVuUGFyYW1ldGVycz4qPigmanNvblJlc3VsdCkpOworICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvKgorICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1
Y3RvcjoKKyAgICAgKiBSZWY8Tm9PcGVuUGFyYW1ldGVycz4gcmVzdWx0ID0gTm9PcGVuUGFyYW1l
dGVyczo6Y3JlYXRlKCkKKyAgICAgKiAgICAgLnNldE9uZSguLi4pCisgICAgICogICAgIC5zZXRU
d28oLi4uKQorICAgICAqICAgICAucmVsZWFzZSgpOworICAgICAqLworICAgIHN0YXRpYyBCdWls
ZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8
Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOworICAgIH0KK307CisKK2NsYXNz
IE9wZW5QYXJhbWV0ZXJzIDogcHVibGljIEpTT046Ok9iamVjdCB7CitwdWJsaWM6CisgICAgZW51
bSB7CisgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKKyAgICAgICAgQWxwaGFTZXQgPSAxIDw8IDAs
CisgICAgICAgIEJldGFTZXQgPSAxIDw8IDEsCisgICAgICAgIEFsbEZpZWxkc1NldCA9IChBbHBo
YVNldCB8IEJldGFTZXQpCisgICAgfTsKKworICAgIHRlbXBsYXRlPGludCBTVEFURT4KKyAgICBj
bGFzcyBCdWlsZGVyIHsKKyAgICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0
PiBtX3Jlc3VsdDsKKworICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8
IFNURVA+JiBjYXN0U3RhdGUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKnJlaW50
ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CisgICAgICAgIH0KKwor
ICAgICAgICBCdWlsZGVyKFJlZjwvKk9wZW5QYXJhbWV0ZXJzKi9KU09OOjpPYmplY3Q+JiYgb2Jq
ZWN0KQorICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCisgICAgICAgIHsK
KyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVy
X2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAgICAgICB9CisgICAgICAgIGZyaWVuZCBj
bGFzcyBPcGVuUGFyYW1ldGVyczsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IEFscGhhU2V0PiYgc2V0QWxwaGEoZG91YmxlIHZhbHVlKQorICAgICAgICB7CisgICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQWxwaGFTZXQpLCBwcm9wZXJ0eV9hbHBoYV9h
bHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0RG91YmxlKCJhbHBoYSJfcywg
dmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxBbHBoYVNldD4oKTsKKyAgICAg
ICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBCZXRhU2V0PiYgc2V0QmV0YShkb3VibGUg
dmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBC
ZXRhU2V0KSwgcHJvcGVydHlfYmV0YV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0RG91YmxlKCJiZXRhIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0
YXRlPEJldGFTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBSZWY8T3BlblBhcmFtZXRlcnM+
IHJlbGVhc2UoKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9
PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOworICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoc2l6ZW9mKE9wZW5QYXJhbWV0ZXJzKSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0KSwg
Y2Fubm90X2Nhc3QpOworCisgICAgICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uUmVzdWx0
ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0g
V1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8T3BlblBhcmFtZXRlcnM+Kj4oJmpzb25SZXN1
bHQpKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICB9OworCisg
ICAgLyoKKyAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CisgICAgICogUmVmPE9wZW5QYXJh
bWV0ZXJzPiByZXN1bHQgPSBPcGVuUGFyYW1ldGVyczo6Y3JlYXRlKCkKKyAgICAgKiAgICAgLnNl
dEFscGhhKC4uLikKKyAgICAgKiAgICAgLnNldEJldGEoLi4uKQorICAgICAqICAgICAucmVsZWFz
ZSgpOworICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6
Y3JlYXRlKCkpOworICAgIH0KKworICAgIC8vIFByb3BlcnR5IG5hbWVzIGZvciB0eXBlIGdlbmVy
YXRlZCBhcyBvcGVuLgorICAgIE5vbmUgc3RhdGljIGNvbnN0IGNoYXIqIEFscGhhOworfTsKKwor
fSAvLyBUZXN0CisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbiBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitu
YW1lc3BhY2UgUHJvdG9jb2wgeworCitjb25zdCBjaGFyKiBJbnNwZWN0b3I6OlByb3RvY29sOjpU
ZXN0OjpPcGVuUGFyYW1ldGVyczo6QWxwaGEgPSAiYWxwaGEiOworCit9IC8vIG5hbWVzcGFjZSBQ
cm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xPYmplY3RzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2Vu
ZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXdp
dGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2Vu
ZERpc3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCisKKworbmFtZXNw
YWNlIEluc3BlY3RvciB7CisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbiBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAi
VGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlICJUZXN0UHJvdG9j
b2xJbnRlcm5hbC5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgor
I2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNr
ZW5kRGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3Vy
YXRpb24uaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtd2l0aC1vcGVu
LXBhcmFtZXRlcnMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
KyNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KKworX19hdHRyaWJ1dGVfXygo
dmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3Vy
YXRpb24gOiBOU09iamVjdAorQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29u
ZmlndXJhdGlvbi5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9u
Lm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRoLW9wZW4tcGFy
YW1ldGVycy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lt
cG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9j
b2xJbnRlcm5hbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgi
CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgor
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+
CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0
Y2hlcnMuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVycy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24g
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29u
dHJvbGxlciogX2NvbnRyb2xsZXI7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRy
b2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgoreworICAg
IHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmls
OworICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7
CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIFtzdXBlciBk
ZWFsbG9jXTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbi5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVy
cy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtd2l0aC1vcGVuLXBh
cmFtZXRlcnMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNp
bXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFt
ZXNwYWNlIEluc3BlY3RvcjsKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlz
cGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8Rm91bmRhdGlv
bi9Gb3VuZGF0aW9uLmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05P
YmplY3QuaD4KKworCitAY2xhc3MgVGVzdFByb3RvY29sVGVzdE5vT3BlblBhcmFtZXRlcnM7CitA
Y2xhc3MgVGVzdFByb3RvY29sVGVzdE9wZW5QYXJhbWV0ZXJzOworCisKKworX19hdHRyaWJ1dGVf
XygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbFRlc3RO
b09wZW5QYXJhbWV0ZXJzIDogUldJUHJvdG9jb2xKU09OT2JqZWN0CistIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsK
Ky0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05P
YmplY3QgKilqc29uT2JqZWN0OworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoT25lOihkb3VibGUp
b25lIHR3bzooZG91YmxlKXR3bzsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWlj
LCBhc3NpZ24pIGRvdWJsZSBvbmU7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21p
YywgYXNzaWduKSBkb3VibGUgdHdvOworQGVuZAorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5
ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sVGVzdE9wZW5QYXJhbWV0ZXJz
IDogUldJUHJvdG9jb2xKU09OT2JqZWN0CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2Fk
OihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKKy0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2Jq
ZWN0OworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQWxwaGE6KGRvdWJsZSlhbHBoYSBiZXRhOihk
b3VibGUpYmV0YTsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24p
IGRvdWJsZSBhbHBoYTsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3Np
Z24pIGRvdWJsZSBiZXRhOworQGVuZAorCisKKworCisKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9y
L1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgorCisjIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5o
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRoLW9wZW4tcGFyYW1l
dGVycy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9y
dCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0
ZS5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9s
bGVyLmg+CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCisKKworCisjIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbEludGVybmFsLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13
aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3Iv
UldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Igewor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+CitPcHRpb25hbDxPYmpDRW51bVR5cGU+
IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKKworCisKK30gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0K
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXdpdGgtb3Blbi1wYXJhbWV0
ZXJzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0
ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29s
LmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCisjaW1wb3J0IDxXZWJJbnNw
ZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorCit1c2luZyBuYW1lc3BhY2Ug
SW5zcGVjdG9yOworCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoVGVz
dERvbWFpbikKKworKyAodm9pZClfcGFyc2VOb09wZW5QYXJhbWV0ZXJzOihUZXN0UHJvdG9jb2xU
ZXN0Tm9PcGVuUGFyYW1ldGVycyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsK
KysgKHZvaWQpX3BhcnNlT3BlblBhcmFtZXRlcnM6KFRlc3RQcm90b2NvbFRlc3RPcGVuUGFyYW1l
dGVycyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKworQGVuZAorCitAaW1w
bGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChUZXN0RG9tYWluKQorCisr
ICh2b2lkKV9wYXJzZU5vT3BlblBhcmFtZXRlcnM6KFRlc3RQcm90b2NvbFRlc3ROb09wZW5QYXJh
bWV0ZXJzICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1df
RVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7Cisg
ICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xUZXN0Tm9PcGVuUGFyYW1ldGVycyBhbGxvY10g
aW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOworfQorCisrICh2b2lkKV9wYXJzZU9wZW5QYXJhbWV0
ZXJzOihUZXN0UHJvdG9jb2xUZXN0T3BlblBhcmFtZXRlcnMgKiopb3V0VmFsdWUgZnJvbVBheWxv
YWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxv
YWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2Nv
bFRlc3RPcGVuUGFyYW1ldGVycyBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOworfQor
CitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0K
KworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50
ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1w
b3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorI2ltcG9y
dCA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5n
IG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUZXN0
Tm9PcGVuUGFyYW1ldGVycworCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25u
dWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCit7CisgICAgaWYgKCEo
c2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBUSFJPV19F
WENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJvbmUiXSwgQCJvbmUiKTsK
KyAgICBzZWxmLm9uZSA9IFtwYXlsb2FkW0Aib25lIl0gZG91YmxlVmFsdWVdOworCisgICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AidHdvIl0sIEAidHdv
Iik7CisgICAgc2VsZi50d28gPSBbcGF5bG9hZFtAInR3byJdIGRvdWJsZVZhbHVlXTsKKworICAg
IHJldHVybiBzZWxmOworfQorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6
KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9iamVjdAoreworICAgIGlmICghKHNlbGYgPSBbc3Vw
ZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmplY3QgdG9KU09OT2JqZWN0XS5nZXQoKV0pKQorICAg
ICAgICByZXR1cm4gbmlsOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aE9uZTooZG91YmxlKW9uZSB0d286KGRvdWJsZSl0d28KK3sKKyAgICBpZiAoIShz
ZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHNlbGYub25l
ID0gb25lOworICAgIHNlbGYudHdvID0gdHdvOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0g
KHZvaWQpc2V0T25lOihkb3VibGUpb25lCit7CisgICAgW3N1cGVyIHNldERvdWJsZTpvbmUgZm9y
S2V5OkAib25lIl07Cit9CisKKy0gKGRvdWJsZSlvbmUKK3sKKyAgICByZXR1cm4gW3N1cGVyIGRv
dWJsZUZvcktleTpAIm9uZSJdOworfQorCistICh2b2lkKXNldFR3bzooZG91YmxlKXR3bworewor
ICAgIFtzdXBlciBzZXREb3VibGU6dHdvIGZvcktleTpAInR3byJdOworfQorCistIChkb3VibGUp
dHdvCit7CisgICAgcmV0dXJuIFtzdXBlciBkb3VibGVGb3JLZXk6QCJ0d28iXTsKK30KKworQGVu
ZAorCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVGVzdE9wZW5QYXJhbWV0ZXJzCisKKy0g
KGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3Ry
aW5nICosIGlkPiAqKXBheWxvYWQKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkK
KyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURf
UFJPUEVSVFkocGF5bG9hZFtAImFscGhhIl0sIEAiYWxwaGEiKTsKKyAgICBzZWxmLmFscGhhID0g
W3BheWxvYWRbQCJhbHBoYSJdIGRvdWJsZVZhbHVlXTsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImJldGEiXSwgQCJiZXRhIik7CisgICAgc2Vs
Zi5iZXRhID0gW3BheWxvYWRbQCJiZXRhIl0gZG91YmxlVmFsdWVdOworCisgICAgcmV0dXJuIHNl
bGY7Cit9CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9j
b2xKU09OT2JqZWN0ICopb2JqZWN0Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0
aEpTT05PYmplY3Q6W29iamVjdCB0b0pTT05PYmplY3RdLmdldCgpXSkpCisgICAgICAgIHJldHVy
biBuaWw7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
QWxwaGE6KGRvdWJsZSlhbHBoYSBiZXRhOihkb3VibGUpYmV0YQoreworICAgIGlmICghKHNlbGYg
PSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgc2VsZi5hbHBoYSA9
IGFscGhhOworICAgIHNlbGYuYmV0YSA9IGJldGE7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKwor
LSAodm9pZClzZXRBbHBoYTooZG91YmxlKWFscGhhCit7CisgICAgW3N1cGVyIHNldERvdWJsZTph
bHBoYSBmb3JLZXk6QCJhbHBoYSJdOworfQorCistIChkb3VibGUpYWxwaGEKK3sKKyAgICByZXR1
cm4gW3N1cGVyIGRvdWJsZUZvcktleTpAImFscGhhIl07Cit9CisKKy0gKHZvaWQpc2V0QmV0YToo
ZG91YmxlKWJldGEKK3sKKyAgICBbc3VwZXIgc2V0RG91YmxlOmJldGEgZm9yS2V5OkAiYmV0YSJd
OworfQorCistIChkb3VibGUpYmV0YQoreworICAgIHJldHVybiBbc3VwZXIgZG91YmxlRm9yS2V5
OkAiYmV0YSJdOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBl
cy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL3ZlcnNpb24uanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdmVyc2lvbi5qc29uLXJlc3VsdApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5lZjc3OGEwNmM3ZjI1MTFmNmMyMzQxODY3MjU1MDU2ODM3ZmJmYTNmCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V4cGVjdGVkL3ZlcnNpb24uanNvbi1yZXN1bHQKQEAgLTAsMCArMSw4MjcgQEAKKyMjIyBC
ZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMuaW4KKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisvLyBWZXJzaW9uRG9tYWluCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lz
dGVyRG9tYWluKCJWZXJzaW9uRG9tYWluIiwgbnVsbCk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lz
dGVyVmVyc2lvbigiVmVyc2lvbkRvbWFpbiIsIDQyKTsKK0luc3BlY3RvckJhY2tlbmQuYWN0aXZh
dGVEb21haW4oIlZlcnNpb25Eb21haW4iLCBudWxsKTsKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9y
QmFja2VuZENvbW1hbmRzLmpzLmluCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJz
aW9uLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21h
IG9uY2UKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCisj
aW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFz
cyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdm9pZCBzZXRCYWNr
ZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBt
X2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQorICAgIEJhY2tlbmRE
aXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERp
c3BhdGNoZXIuZ2V0KCk7IH0KK3ByaXZhdGU6CisgICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVy
PiBtX2JhY2tlbmREaXNwYXRjaGVyOworfTsKKworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
KyMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMu
aCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9y
IHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKKworCit9IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHZlcnNpb24uanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0QmFja2VuZERp
c3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVu
ZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL05l
dmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCisjaWYgRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjaW5jbHVkZSAiVGVzdEFsdGVy
bmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgorI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK30gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hl
cnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lvbi5qc29uIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0
UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNz
IEZyb250ZW5kUm91dGVyOworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmls
ZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250
ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVy
c2lvbi5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCisKKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK30gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNo
ZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lvbi5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCituYW1lc3BhY2UgUHJvdG9jb2wg
eworCisvLyBWZXJzaW9ucy4KK25hbWVzcGFjZSBWZXJzaW9uRG9tYWluIHsKK3N0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgVkVSU0lPTiA9IDQyOworfSAvLyBWZXJzaW9uRG9tYWluCisvLyBFbmQg
b2YgdmVyc2lvbnMuCisKKworCisKKworCisKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKwor
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVj
dHMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVz
dFByb3RvY29sT2JqZWN0cy5oIgorCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNw
YWNlIFByb3RvY29sIHsKKworCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3Bw
CisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHZlcnNpb24uanNvbiBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWlu
UHRyLmg+CisKKworCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCit9IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMu
aAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lvbi5qc29uIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0
ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgIlRlc3RQcm90
b2NvbEludGVybmFsLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgi
CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisK
K30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJh
Y2tlbmREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbi5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lvbi5qc29u
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8V2ViSW5z
cGVjdG9yL1Rlc3RQcm90b2NvbC5oPgorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVm
YXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0
CitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKwor
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgi
CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9j
b2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0
ZURpc3BhdGNoYWJsZUFnZW50Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJs
ZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0
b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCit7CisgICAg
QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKK30KKworLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9s
bGVyKiljb250cm9sbGVyCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNl
bGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9j
b250cm9sbGVyID0gY29udHJvbGxlcjsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClk
ZWFsbG9jCit7CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCitAZW5kCisKKworIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gdmVyc2lvbi5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2lu
ZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZl
bnREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24u
aD4KKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgorCisK
KworCisKKworCisKKworCisKKworCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xC
dWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
LmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRl
c3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9B
dWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVz
Lmg+CisKKworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorCisjIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgPFdlYklu
c3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KKworbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KK09wdGlvbmFsPE9iakNF
bnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOworCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
Lm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lvbi5qc29uIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAi
VGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3Rv
Y29sSlNPTk9iamVjdFByaXZhdGUuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKwor
CisKKworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisK
KyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHZlcnNpb24uanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JX
SVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKyNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+
CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9y
OworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWNvbW1h
bmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbiBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWNvbW1hbmQt
dGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5kNmRmOWU0YmQ5YzMxN2QxYjZiYWY1ZWQ2YzVlMDM1ZTJhZjkzMTg3Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwt
b24tY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29u
CkBAIC0wLDAgKzEsOSBAQAorWworeworICAgICJkb21haW4iOiAiRG9tYWluIiwKKyAgICAiZGVi
dWdnYWJsZVR5cGVzIjogWyJqYXZhc2NyaXB0Il0sCisgICAgInRhcmdldFR5cGVzIjogWyJ3b3Jr
ZXIiXSwKKyAgICAiY29tbWFuZHMiOiBbeyJuYW1lIjogIkNvbW1hbmQifV0sCisgICAgImV2ZW50
cyI6IFt7Im5hbWUiOiAiRXZlbnQifV0KK30KK10KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlw
ZXMtdHlwZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2ZhaWwtb24tY29tbWFuZC10YXJnZXRUeXBlcy10eXBlLmpzb24KbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjQw
NTlmODRiY2YwY2ViYTBlODQwNjAwODdlYjUzMmFhZDZmMDJlNAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWNv
bW1hbmQtdGFyZ2V0VHlwZXMtdHlwZS5qc29uCkBAIC0wLDAgKzEsOSBAQAoreworICAgICJkb21h
aW4iOiAiRG9tYWluIiwKKyAgICAiY29tbWFuZHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAg
ICJuYW1lIjogIlBhZ2VPbmx5IiwKKyAgICAgICAgICAgICJ0YXJnZXRUeXBlcyI6ICJwYWdlZSIK
KyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlwZXMtdmFsdWUu
anNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWls
LW9uLWNvbW1hbmQtdGFyZ2V0VHlwZXMtdmFsdWUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MDIwNDQ3MmVj
OGY1ZTZiMDk5YzI4ZGJlMmExY2U4MzA3YjViMDZlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tY29tbWFuZC10
YXJnZXRUeXBlcy12YWx1ZS5qc29uCkBAIC0wLDAgKzEsOSBAQAoreworICAgICJkb21haW4iOiAi
RG9tYWluIiwKKyAgICAiY29tbWFuZHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1l
IjogIlBhZ2VPbmx5IiwKKyAgICAgICAgICAgICJ0YXJnZXRUeXBlcyI6IFsicGFnZWUiXQorICAg
ICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZG9tYWluLWRlYnVnZ2FibGVUeXBlcy10eXBlLmpz
b24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1v
bi1kb21haW4tZGVidWdnYWJsZVR5cGVzLXR5cGUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NzQ4ZjQyMzQ3
M2NkOWRkNjVhYmNlZTk0YTg4MTZiZDQ4MjkxM2VmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZG9tYWluLWRl
YnVnZ2FibGVUeXBlcy10eXBlLmpzb24KQEAgLTAsMCArMSw5IEBACit7CisgICAgImRvbWFpbiI6
ICJXZWJPbmx5IiwKKyAgICAiZGVidWdnYWJsZVR5cGVzIjogIndlYmIiLAorICAgICJjb21tYW5k
cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiZW5hYmxlIgorICAgICAgICB9
CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2ZhaWwtb24tZG9tYWluLWRlYnVnZ2FibGVUeXBlcy12YWx1ZS5qc29uIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZG9t
YWluLWRlYnVnZ2FibGVUeXBlcy12YWx1ZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIyNTJkZGJkODNkYWJi
N2RmNmU0NDEzNWM2MWYwOTM2NmUzMGU2MDQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kb21haW4tZGVidWdn
YWJsZVR5cGVzLXZhbHVlLmpzb24KQEAgLTAsMCArMSw5IEBACit7CisgICAgImRvbWFpbiI6ICJX
ZWJPbmx5IiwKKyAgICAiZGVidWdnYWJsZVR5cGVzIjogWyJ3ZWJiIl0sCisgICAgImNvbW1hbmRz
IjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJlbmFibGUiCisgICAgICAgIH0K
KyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVi
dWdnYWJsZVR5cGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9mYWlsLW9uLWRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dh
YmxlVHlwZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdhYTAyODA0NjU3NjllMjkzMTg5ODkzYzQzMzAyZmNi
ZDZmNDk4NmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21h
aW4tZGVidWdnYWJsZVR5cGUuanNvbgpAQCAtMCwwICsxLDggQEAKK1sKK3sKKyAgICAiZG9tYWlu
IjogIkRvbWFpbiIsCisgICAgImRlYnVnZ2FibGVUeXBlcyI6IFsiamF2YXNjcmlwdCJdLAorICAg
ICJjb21tYW5kcyI6IFt7Im5hbWUiOiAiQ29tbWFuZCIsICJ0YXJnZXRUeXBlcyI6IFsid29ya2Vy
Il19XSwKKyAgICAiZXZlbnRzIjogW3sibmFtZSI6ICJFdmVudCJ9XQorfQorXQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24t
ZG9tYWluLXRhcmdldFR5cGVzLXR5cGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWRvbWFpbi10YXJnZXRUeXBlcy10eXBlLmpzb24K
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZDgyMjI2NzQxNDYxNWQ0YjRhZTY0MjA5YzZjNmNkNzg2ZWYzYzg2NQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9mYWlsLW9uLWRvbWFpbi10YXJnZXRUeXBlcy10eXBlLmpzb24KQEAgLTAsMCArMSw5IEBA
Cit7CisgICAgImRvbWFpbiI6ICJQYWdlT25seSIsCisgICAgInRhcmdldFR5cGVzIjogInBhZ2Vl
IiwKKyAgICAiY29tbWFuZHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImVu
YWJsZSIKKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWRvbWFpbi10YXJnZXRUeXBlcy12
YWx1ZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2ZhaWwtb24tZG9tYWluLXRhcmdldFR5cGVzLXZhbHVlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTdiMTBk
N2YxNTRiOTg0MWFjOGYyNDM5NTYxOTYzMmIxOTc4Yzk0OQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWRvbWFp
bi10YXJnZXRUeXBlcy12YWx1ZS5qc29uCkBAIC0wLDAgKzEsOSBAQAoreworICAgICJkb21haW4i
OiAiUGFnZU9ubHkiLAorICAgICJ0YXJnZXRUeXBlcyI6IFsicGFnZWUiXSwKKyAgICAiY29tbWFu
ZHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImVuYWJsZSIKKyAgICAgICAg
fQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9mYWlsLW9uLWR1cGxpY2F0ZS1jb21tYW5kLWNhbGwtcGFyYW1ldGVyLW5h
bWVzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1jYWxsLXBhcmFtZXRlci1uYW1lcy5qc29uCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmJhYjc2Y2E2Mjc5Y2UzYTRhY2Y3OTg1NTAwYjMwYjdkMWNmYjhmMGQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1jYWxsLXBhcmFtZXRlci1uYW1lcy5qc29uCkBAIC0w
LDAgKzEsMTYgQEAKK3sKKyAgICAiZG9tYWluIjogIk92ZXJsYXkiLAorICAgICJjb21tYW5kcyI6
IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAicHJvY2Vzc1BvaW50cyIsCisgICAg
ICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBvaW50
IiwgInR5cGUiOiAibnVtYmVyIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicG9pbnQi
LCAidHlwZSI6ICJudW1iZXIiIH0KKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAicmV0dXJu
cyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInJlc3VsdDEiLCAidHlwZSI6ICJzdHJp
bmciIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJyZXN1bHQyIiwgInR5cGUiOiAic3Ry
aW5nIiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kdXBs
aWNhdGUtY29tbWFuZC1yZXR1cm4tcGFyYW1ldGVyLW5hbWVzLmpzb24gYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFu
ZC1yZXR1cm4tcGFyYW1ldGVyLW5hbWVzLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzhiYjE1YzA0YjY1OWI5
Y2I5YWZkZTM0Y2Q1NzIyYmE5YzZkNGRhOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWR1cGxpY2F0ZS1jb21t
YW5kLXJldHVybi1wYXJhbWV0ZXItbmFtZXMuanNvbgpAQCAtMCwwICsxLDE2IEBACit7CisgICAg
ImRvbWFpbiI6ICJPdmVybGF5IiwKKyAgICAiY29tbWFuZHMiOiBbCisgICAgICAgIHsKKyAgICAg
ICAgICAgICJuYW1lIjogInByb2Nlc3NQb2ludHMiLAorICAgICAgICAgICAgInBhcmFtZXRlcnMi
OiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwb2ludDEiLCAidHlwZSI6ICJudW1iZXIi
IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwb2ludDIiLCAidHlwZSI6ICJudW1iZXIi
IH0KKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAicmV0dXJucyI6IFsKKyAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInJlc3VsdCIsICJ0eXBlIjogInN0cmluZyIgfSwKKyAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInJlc3VsdCIsICJ0eXBlIjogInN0cmluZyIgfQorICAgICAgICAgICAg
XQorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZHVwbGljYXRlLWV2ZW50LXBhcmFtZXRl
ci1uYW1lcy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2ZhaWwtb24tZHVwbGljYXRlLWV2ZW50LXBhcmFtZXRlci1uYW1lcy5qc29uCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmQzZDNiM2NjNjQyM2NlYzI1YTY3ZGE5MTMyYTc2Njg2NzU1YTQ0NDAKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFp
bC1vbi1kdXBsaWNhdGUtZXZlbnQtcGFyYW1ldGVyLW5hbWVzLmpzb24KQEAgLTAsMCArMSwxMiBA
QAoreworICAgICJkb21haW4iOiAiT3ZlcmxheSIsCisgICAgImV2ZW50cyI6IFsKKyAgICAgICAg
eworICAgICAgICAgICAgIm5hbWUiOiAicHJvY2Vzc2VkUG9pbnRzIiwKKyAgICAgICAgICAgICJw
YXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicG9pbnQiLCAidHlwZSI6
ICJudW1iZXIiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwb2ludCIsICJ0eXBlIjog
Im51bWJlciIgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24t
ZHVwbGljYXRlLXR5cGUtZGVjbGFyYXRpb25zLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1kZWNsYXJhdGlv
bnMuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi43MDJmYzZhMzI3MGE2NDZhNDUwNDQ3ZmRjMDQwMTM5OTVhOTQy
YmYwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2ZhaWwtb24tZHVwbGljYXRlLXR5cGUtZGVjbGFyYXRpb25zLmpzb24KQEAg
LTAsMCArMSwxNSBAQAoreworICAgICJkb21haW4iOiAiUnVudGltZSIsCisgICAgInR5cGVzIjog
WworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiUmVtb3RlT2JqZWN0SWQiLAorICAgICAg
ICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlx
dWUgb2JqZWN0IGlkZW50aWZpZXIuIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAg
ICAiaWQiOiAiUmVtb3RlT2JqZWN0SWQiLAorICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwK
KyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIuIgor
ICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZHVwbGljYXRlLXR5cGUtbWVtYmVyLW5hbWVz
Lmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFp
bC1vbi1kdXBsaWNhdGUtdHlwZS1tZW1iZXItbmFtZXMuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZWJhY2Vl
OGIyM2UxZWEzNDA1ZDhhYzBhMDAxNjIwNzAxMGM5NDg1Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZHVwbGlj
YXRlLXR5cGUtbWVtYmVyLW5hbWVzLmpzb24KQEAgLTAsMCArMSwxNSBAQAorWworeworICAgICJk
b21haW4iOiAiT3ZlcmxheVR5cGVzIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAg
ICAgICAgICJpZCI6ICJQb2ludCIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAg
ICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ4Iiwg
InR5cGUiOiAiaW50ZWdlciIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIngiLCAidHlw
ZSI6ICJpbnRlZ2VyIiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdCit9CitdCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZmFpbC1vbi1lbnVtLXdpdGgtbm8tdmFsdWVzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1lbnVtLXdpdGgtbm8tdmFsdWVzLmpzb24K
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMjMyYTdjMzI0OWE0MGJkNDQ3ZTE5YTkyYThlNTY5MzBkM2Y4NTk1NwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9mYWlsLW9uLWVudW0td2l0aC1uby12YWx1ZXMuanNvbgpAQCAtMCwwICsxLDEwIEBACit7
CisgICAgImRvbWFpbiI6ICJEYXRhYmFzZSIsCisgICAgInR5cGVzIjogWworICAgICAgICB7Cisg
ICAgICAgICAgICAiaWQiOiAiUHJpbWFyeUNvbG9ycyIsCisgICAgICAgICAgICAidHlwZSI6ICJz
dHJpbmciLAorICAgICAgICAgICAgImVudW0iOiBbXQorICAgICAgICB9CisgICAgXQorfQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2Zh
aWwtb24tZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNv
biBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9u
LWV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uOTEzMmNlMDg4Mjg0ZGViOWE1NmUxMzQxNjY5ZDVhMmJkZGJlYWMyZAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBl
Lmpzb24KQEAgLTAsMCArMSw4IEBACitbCit7CisgICAgImRvbWFpbiI6ICJEb21haW4iLAorICAg
ICJkZWJ1Z2dhYmxlVHlwZXMiOiBbImphdmFzY3JpcHQiXSwKKyAgICAiY29tbWFuZHMiOiBbeyJu
YW1lIjogIkNvbW1hbmQifV0sCisgICAgImV2ZW50cyI6IFt7Im5hbWUiOiAiRXZlbnQiLCAidGFy
Z2V0VHlwZXMiOiBbIndvcmtlciJdfV0KK30KK10KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGVz
LXR5cGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGVzLXR5cGUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNTRlZDFm
NWM2YmY5ZjRhYjQxNWQxNDIyMzAyODlhOTFkY2ZlOGM2Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZXZlbnQt
dGFyZ2V0VHlwZXMtdHlwZS5qc29uCkBAIC0wLDAgKzEsOSBAQAoreworICAgICJkb21haW4iOiAi
RG9tYWluIiwKKyAgICAiZXZlbnRzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6
ICJQYWdlT25seSIsCisgICAgICAgICAgICAidGFyZ2V0VHlwZXMiOiAicGFnZWUiCisgICAgICAg
IH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1ldmVudC10YXJnZXRUeXBlcy12YWx1ZS5qc29uIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZXZlbnQt
dGFyZ2V0VHlwZXMtdmFsdWUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ODg0YmZkN2E2YjdiZDQ3NDhiMTAw
NzI5OTBhYWVlNTkwYzYwYTZmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlwZXMtdmFs
dWUuanNvbgpAQCAtMCwwICsxLDkgQEAKK3sKKyAgICAiZG9tYWluIjogIkRvbWFpbiIsCisgICAg
ImV2ZW50cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiUGFnZU9ubHkiLAor
ICAgICAgICAgICAgInRhcmdldFR5cGVzIjogWyJwYWdlZSJdCisgICAgICAgIH0KKyAgICBdCit9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbiBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLW51bWJl
ci10eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjczMDhkYjk5
MmQ2NTI1N2YyYjVjNjMyN2UwY2EzNTQ1MDJkNjE1NGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1udW1iZXIt
dHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbgpAQCAtMCwwICsxLDE4IEBACit7Cisg
ICAgImRvbWFpbiI6ICJEYXRhYmFzZSIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAg
ICAgICAgICAiaWQiOiAiRGF0YWJhc2VJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmci
LAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBpZGVudGlmaWVyIG9mIERhdGFi
YXNlIG9iamVjdC4iCisgICAgICAgIH0KKyAgICBdLAorICAgICJldmVudHMiOiBbCisgICAgICAg
IHsKKyAgICAgICAgICAgICJuYW1lIjogImRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMiLAor
ICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJj
b2x1bW5OYW1lcyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IDAgfQorICAgICAgICAg
ICAgXQorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tbnVtYmVyLXR5cGVkLW9wdGlvbmFs
LXR5cGUtbWVtYmVyLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNvbgpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5hZmVhNTU1ZWM0ZmUwODY2Mjc4ZTFmY2Q3MzM1NDI0MmRlZmQxYmQ0Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2ZhaWwtb24tbnVtYmVyLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24KQEAgLTAs
MCArMSwxNiBAQAorWworeworICAgICJkb21haW4iOiAiRGF0YWJhc2UiLAorICAgICJ0eXBlcyI6
IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkVycm9yIiwKKyAgICAgICAgICAgICJ0
eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRGF0YWJhc2UgZXJy
b3IuIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAibWVzc2FnZSIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBt
ZXNzYWdlLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvZGUiLCAidHlwZSI6ICJp
bnRlZ2VyIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIGNvZGUuIiwgIm9wdGlvbmFsIjogMCB9Cisg
ICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdCit9CitdCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1zdHJpbmctdHlw
ZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXN0cmluZy10eXBlZC1vcHRpb25hbC1wYXJh
bWV0ZXItZmxhZy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQwMTJjNzliNmIzOGMyMWRmZjYwN2ZlYzllZTkw
YjI4MDMxMGY5MDgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtcGFyYW1l
dGVyLWZsYWcuanNvbgpAQCAtMCwwICsxLDE4IEBACit7CisgICAgImRvbWFpbiI6ICJEYXRhYmFz
ZSIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiRGF0YWJh
c2VJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgImRlc2Ny
aXB0aW9uIjogIlVuaXF1ZSBpZGVudGlmaWVyIG9mIERhdGFiYXNlIG9iamVjdC4iCisgICAgICAg
IH0KKyAgICBdLAorICAgICJldmVudHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1l
IjogImRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMiLAorICAgICAgICAgICAgInBhcmFtZXRl
cnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjog
InN0cmluZyIsICJvcHRpb25hbCI6ICJ0cnVlIiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0K
KyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZmFpbC1vbi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNv
biBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9u
LXN0cmluZy10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29uCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNhM2Vm
MjhhOGY4ODE0Y2M2MTdmYjVkNWJjMjEzMDZkMGFhZDRmZDAKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1zdHJp
bmctdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNvbgpAQCAtMCwwICsxLDE2IEBACitbCit7
CisgICAgImRvbWFpbiI6ICJEYXRhYmFzZSIsCisgICAgInR5cGVzIjogWworICAgICAgICB7Cisg
ICAgICAgICAgICAiaWQiOiAiRXJyb3IiLAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwK
KyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJEYXRhYmFzZSBlcnJvci4iLAorICAgICAgICAg
ICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJtZXNzYWdlIiwg
InR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIG1lc3NhZ2UuIiB9LAorICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29kZSIsICJ0eXBlIjogImludGVnZXIiLCAiZGVzY3Jp
cHRpb24iOiAiRXJyb3IgY29kZS4iLCAib3B0aW9uYWwiOiAiZmFsc2UiIH0KKyAgICAgICAgICAg
IF0KKyAgICAgICAgfQorICAgIF0KK30KK10KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXR5cGUtZGVjbGFyYXRpb24tdXNp
bmctdHlwZS1yZWZlcmVuY2UuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9mYWlsLW9uLXR5cGUtZGVjbGFyYXRpb24tdXNpbmctdHlwZS1yZWZlcmVu
Y2UuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4xOWI3NTkwY2NjNmY2YmMzNDQzYTRhMjgzY2E2ZmNjZmRmMzI3
NzM0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2ZhaWwtb24tdHlwZS1kZWNsYXJhdGlvbi11c2luZy10eXBlLXJlZmVyZW5j
ZS5qc29uCkBAIC0wLDAgKzEsMTMgQEAKK1sKK3sKKyAgICAiZG9tYWluIjogIlJ1bnRpbWUiLAor
ICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlJlbW90ZU9iamVj
dElkIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAiJHJlZiI6
ICJTb21lVHlwZSIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIG9iamVjdCBp
ZGVudGlmaWVyLiIKKyAgICAgICAgfQorICAgIF0KK30KK10KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXR5cGUtcmVmZXJl
bmNlLWFzLXByaW1pdGl2ZS10eXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi10eXBlLXJlZmVyZW5jZS1hcy1wcmltaXRpdmUtdHlw
ZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjhjODNiYmZjZTQxMmI4YjA5ZGY3NDdhODc1ZTgwMzZkZmVjY2Jj
MzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZmFpbC1vbi10eXBlLXJlZmVyZW5jZS1hcy1wcmltaXRpdmUtdHlwZS5qc29u
CkBAIC0wLDAgKzEsMTggQEAKK3sKKyAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKKyAgICAidHlw
ZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJEYXRhYmFzZUlkIiwKKyAgICAg
ICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5p
cXVlIGlkZW50aWZpZXIgb2YgRGF0YWJhc2Ugb2JqZWN0LiIKKyAgICAgICAgfQorICAgIF0sCisg
ICAgImV2ZW50cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiZGlkRXhlY3V0
ZU9wdGlvbmFsUGFyYW1ldGVycyIsCisgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiRGF0YWJhc2VJZCIg
fQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdHlwZS13aXRo
LWxvd2VyY2FzZS1uYW1lLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZmFpbC1vbi10eXBlLXdpdGgtbG93ZXJjYXNlLW5hbWUuanNvbgpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi41MzE5MDFlNGE5YWQ5OTM2YjAxYmJhZWQ5N2ExZDRkYTM0ODQ3OGIwCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2Zh
aWwtb24tdHlwZS13aXRoLWxvd2VyY2FzZS1uYW1lLmpzb24KQEAgLTAsMCArMSwxMCBAQAorewor
ICAgICJkb21haW4iOiAiRGF0YWJhc2UiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAg
ICAgICAgICAgImlkIjogImRhdGFiYXNlSWQiLAorICAgICAgICAgICAgInR5cGUiOiAiaW50ZWdl
ciIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIGlkZW50aWZpZXIgb2YgRGF0
YWJhc2Ugb2JqZWN0LiIKKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXVua25vd24tdHlw
ZS1yZWZlcmVuY2UtaW4tdHlwZS1kZWNsYXJhdGlvbi5qc29uIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5j
ZS1pbi10eXBlLWRlY2xhcmF0aW9uLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDY4ODdhMjc0MTE5MDBhODBk
NTBmMDAzZWFjMzZjMTNhOTlmYWU1OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZl
cmVuY2UtaW4tdHlwZS1kZWNsYXJhdGlvbi5qc29uCkBAIC0wLDAgKzEsMTIgQEAKK1sKK3sKKyAg
ICAiZG9tYWluIjogIlJ1bnRpbWUiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAg
ICAgICAgImlkIjogIlJlbW90ZU9iamVjdElkIiwKKyAgICAgICAgICAgICJ0eXBlIjogImRyYWdv
biIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIG9iamVjdCBpZGVudGlmaWVy
LiIKKyAgICAgICAgfQorICAgIF0KK30KK10KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVu
Y2UtaW4tdHlwZS1tZW1iZXIuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1tZW1i
ZXIuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5iODE3ZGI1MDQ0ZGMxZjI4NTU3MDA4YzFmMTc2MWYxYjA2OGY0
Y2U2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLW1lbWJl
ci5qc29uCkBAIC0wLDAgKzEsMTUgQEAKK1sKK3sKKyAgICAiZG9tYWluIjogIkZhbnRhc3kiLAor
ICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkRyYWdvbkVnZyIs
CisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9u
IjogIkEgZHJhZ29uIGVnZy4iLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJjb2xvciIsICIkcmVmIjogIkNvbG9yIiB9CisgICAgICAgICAg
ICBdCisgICAgICAgIH0KKyAgICBdCit9CitdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1
cmUtZ3VhcmRzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNjdjZjhlNTgyZjY1YWU2ZmM2MTU2OTI4ODJjYjBmNjU3NDYwMTA4YQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgpAQCAtMCwwICsxLDM2IEBACitb
Cit7CisgICAgImRvbWFpbiI6ICJOZXR3b3JrMSIsCisgICAgImZlYXR1cmVHdWFyZCI6ICJQTEFU
Rk9STShXRUJfQ09NTUFORFMpIiwKKyAgICAiY29tbWFuZHMiOiBbCisgICAgICAgIHsKKyAgICAg
ICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJjZSIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24i
OiAiTG9hZHMgYSByZXNvdXJjZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNw
ZWN0ZWQgcGFnZSB3aXRob3V0IGNyb3NzIG9yaWdpbiBjaGVja3MuIgorICAgICAgICB9CisgICAg
XQorfSwKK3sKKyAgICAiZG9tYWluIjogIk5ldHdvcmsyIiwKKyAgICAiZmVhdHVyZUd1YXJkIjog
IlBMQVRGT1JNKFdFQl9UWVBFUykiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAg
ICAgICAgImlkIjogIk5ldHdvcmtFcnJvciIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3Qi
LAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJtZXNzYWdlIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIG1lc3Nh
Z2UuIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29kZSIsICJ0eXBlIjogImludGVn
ZXIiLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgY29kZS4iIH0KKyAgICAgICAgICAgIF0KKyAgICAg
ICAgfQorICAgIF0KK30sCit7CisgICAgImRvbWFpbiI6ICJOZXR3b3JrMyIsCisgICAgImZlYXR1
cmVHdWFyZCI6ICJQTEFURk9STShXRUJfRVZFTlRTKSIsCisgICAgImV2ZW50cyI6IFsKKyAgICAg
ICAgeworICAgICAgICAgICAgIm5hbWUiOiAicmVzb3VyY2VMb2FkZWQiLAorICAgICAgICAgICAg
ImRlc2NyaXB0aW9uIjogIkEgcmVzb3VyY2Ugd2FzIGxvYWRlZC4iCisgICAgICAgIH0KKyAgICBd
Cit9CitdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy9jb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVn
Z2FibGVUeXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy9jb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2Fi
bGVUeXBlLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyN2FiNjViOTJhYmVi
MWNiODQ2NTc0N2M3NjMwOGY4NmI2ZTE4MTYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dh
YmxlVHlwZS5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi1bCi17Ci0gICAgImRv
bWFpbiI6ICJEb21haW4iLAotICAgICJkZWJ1Z2dhYmxlVHlwZXMiOiBbInBhZ2UiXSwKLSAgICAi
dGFyZ2V0VHlwZXMiOiBbInBhZ2UiLCAid29ya2VyIl0sCi0gICAgImNvbW1hbmRzIjogW3sibmFt
ZSI6ICJDb21tYW5kIn1dLAotICAgICJldmVudHMiOiBbeyJuYW1lIjogIkV2ZW50In1dCi19Ci1d
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZ2VuZXJpYy9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvY29tbWFuZHMtd2l0
aC1hc3luYy1hdHRyaWJ1dGUuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTEy
NjJlODg5ZmE1YmQwYjRhZTU3ZTVmN2YxYmFjNmNmZjNmZTkzOS4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5q
c29uCisrKyAvZGV2L251bGwKQEAgLTEsMTA5ICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIkRh
dGFiYXNlIiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJE
YXRhYmFzZUlkIiwKLSAgICAgICAgICAgICJ0eXBlIjogImludGVnZXIiLAotICAgICAgICAgICAg
ImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBpZGVudGlmaWVyIG9mIERhdGFiYXNlIG9iamVjdC4iCi0g
ICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJQcmltYXJ5Q29sb3JzIiwK
LSAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCi0gICAgICAgICAgICAiZW51bSI6IFsicmVk
IiwgImdyZWVuIiwgImJsdWUiXQotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAi
aWQiOiAiQ29sb3JMaXN0IiwKLSAgICAgICAgICAgICJ0eXBlIjogImFycmF5IiwKLSAgICAgICAg
ICAgICJpdGVtcyI6IHsgIiRyZWYiOiAiUHJpbWFyeUNvbG9ycyIgfQotICAgICAgICB9LAotICAg
ICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiRXJyb3IiLAotICAgICAgICAgICAgInR5cGUiOiAi
b2JqZWN0IiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJEYXRhYmFzZSBlcnJvci4iLAot
ICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJt
ZXNzYWdlIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIG1lc3NhZ2Uu
IiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29kZSIsICJ0eXBlIjogImludGVnZXIi
LCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgY29kZS4iIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAg
fQotICAgIF0sCi0gICAgImNvbW1hbmRzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAibmFt
ZSI6ICJleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzIiwKLSAgICAgICAgICAgICJw
YXJhbWV0ZXJzIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIk
cmVmIjogIkRhdGFiYXNlSWQiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJxdWVyeSIs
ICJ0eXBlIjogInN0cmluZyIgfQotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJyZXR1cm5z
IjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJh
cnJheSIsICJvcHRpb25hbCI6IHRydWUsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0s
Ci0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIsICJv
cHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIs
ICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7
ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRydWUgfSwK
LSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiLCAib3B0
aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwg
IiRyZWYiOiAiRGF0YWJhc2VJZCIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiLCAib3B0aW9uYWwiOiB0cnVl
IH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVmIjogIlBy
aW1hcnlDb2xvcnMiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJhbHRlcm5hdGVDb2xvcnMiLCAiJHJlZiI6ICJDb2xvckxpc3QiLCAib3B0aW9uYWwiOiB0
cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAi
c3RyaW5nIiwgImVudW0iOiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSwg
Im9wdGlvbmFsIjogdHJ1ZSB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0sCi0gICAgICAgIHsK
LSAgICAgICAgICAgICJuYW1lIjogImV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVz
IiwKLSAgICAgICAgICAgICJhc3luYyI6IHRydWUsCi0gICAgICAgICAgICAicGFyYW1ldGVycyI6
IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRhdGFiYXNlSWQiLCAiJHJlZiI6ICJEYXRh
YmFzZUlkIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicXVlcnkiLCAidHlwZSI6ICJz
dHJpbmciIH0KLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAicmV0dXJucyI6IFsKLSAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAib3B0
aW9uYWwiOiB0cnVlLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAotICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0
cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJu
dW1iZXIiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2
YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiwgIm9wdGlvbmFsIjogdHJ1
ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRh
dGFiYXNlSWQiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJzcWxFcnJvciIsICIkcmVmIjogIkVycm9yIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6ICJQcmltYXJ5Q29sb3Jz
IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYWx0ZXJu
YXRlQ29sb3JzIiwgIiRyZWYiOiAiQ29sb3JMaXN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmluZyIsICJl
bnVtIjogWyJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93IiwgImJsYWNrIl0sICJvcHRpb25hbCI6
IHRydWUgfQotICAgICAgICAgICAgXQotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAg
ICAibmFtZSI6ICJleGVjdXRlU1FMU3luYyIsCi0gICAgICAgICAgICAicGFyYW1ldGVycyI6IFsK
LSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRhdGFiYXNlSWQiLCAiJHJlZiI6ICJEYXRhYmFz
ZUlkIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicXVlcnkiLCAidHlwZSI6ICJzdHJp
bmciIH0KLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAicmV0dXJucyI6IFsKLSAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMi
OiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90
ZXMiLCAidHlwZSI6ICJzdHJpbmciIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1l
c3RhbXAiLCAidHlwZSI6ICJudW1iZXIiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2
YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJw
YXlsb2FkIiwgInR5cGUiOiAiYW55IiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0
YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVycm9yIiB9LAotICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwgIiRyZWYiOiAiQ29sb3JMaXN0IiB9LAotICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6ICJQcmltYXJ5Q29sb3JzIiB9
LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmlu
ZyIsICJlbnVtIjogWyJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93IiwgImJsYWNrIl0gfQotICAg
ICAgICAgICAgXQotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJl
eGVjdXRlU1FMQXN5bmMiLAotICAgICAgICAgICAgImFzeW5jIjogdHJ1ZSwKLSAgICAgICAgICAg
ICJwYXJhbWV0ZXJzIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIs
ICIkcmVmIjogIkRhdGFiYXNlSWQiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJxdWVy
eSIsICJ0eXBlIjogInN0cmluZyIgfQotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJyZXR1
cm5zIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6
ICJhcnJheSIsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCi0gICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIgfSwKLSAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIgfSwKLSAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIgfSwKLSAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiIH0sCi0gICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIgfSwKLSAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiIH0sCi0gICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlDb2xv
cnMiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJhbHRlcm5hdGVDb2xvcnMiLCAiJHJl
ZiI6ICJDb2xvckxpc3QiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcmludENvbG9y
IiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ci
LCAiYmxhY2siXSB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJp
Yy9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbiBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2NvbW1h
bmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAzNjFkNTdkODIwZGU5MTZhNzNjYmRkOTgzODNkMTI2NDIwMzk4
ZjRhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2NvbW1hbmRz
LXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCisrKyAvZGV2L251bGwK
QEAgLTEsODUgKzAsMCBAQAotewotICAgICJkb21haW4iOiAiRGF0YWJhc2UiLAotICAgICJ0eXBl
cyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIkRhdGFiYXNlSWQiLAotICAgICAg
ICAgICAgInR5cGUiOiAiaW50ZWdlciIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5p
cXVlIGlkZW50aWZpZXIgb2YgRGF0YWJhc2Ugb2JqZWN0LiIKLSAgICAgICAgfSwKLSAgICAgICAg
ewotICAgICAgICAgICAgImlkIjogIlByaW1hcnlDb2xvcnMiLAotICAgICAgICAgICAgInR5cGUi
OiAic3RyaW5nIiwKLSAgICAgICAgICAgICJlbnVtIjogWyJyZWQiLCAiZ3JlZW4iLCAiYmx1ZSJd
Ci0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJDb2xvckxpc3QiLAot
ICAgICAgICAgICAgInR5cGUiOiAiYXJyYXkiLAotICAgICAgICAgICAgIml0ZW1zIjogeyAiJHJl
ZiI6ICJQcmltYXJ5Q29sb3JzIiB9Ci0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAg
ICJpZCI6ICJFcnJvciIsCi0gICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAotICAgICAgICAg
ICAgImRlc2NyaXB0aW9uIjogIkRhdGFiYXNlIGVycm9yLiIsCi0gICAgICAgICAgICAicHJvcGVy
dGllcyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm1lc3NhZ2UiLCAidHlwZSI6ICJz
dHJpbmciLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgbWVzc2FnZS4iIH0sCi0gICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJjb2RlIiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJF
cnJvciBjb2RlLiIgfQotICAgICAgICAgICAgXQotICAgICAgICB9Ci0gICAgXSwKLSAgICAiY29t
bWFuZHMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImV4ZWN1dGVBbGxPcHRp
b25hbFBhcmFtZXRlcnMiLAotICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCi0gICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIm9wdGlvbmFs
IjogdHJ1ZSwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwKLSAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZSB9
LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVy
IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVz
IiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIsICJvcHRpb25hbCI6IHRydWUgfSwK
LSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRhdGFiYXNlSWQiLCAiJHJlZiI6ICJEYXRhYmFz
ZUlkIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic3Fs
RXJyb3IiLCAiJHJlZiI6ICJFcnJvciIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInNjcmVlbkNvbG9yIiwgIiRyZWYiOiAiUHJpbWFyeUNvbG9ycyIsICJv
cHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImFsdGVybmF0ZUNv
bG9ycyIsICIkcmVmIjogIkNvbG9yTGlzdCIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInByaW50Q29sb3IiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6
IFsiY3lhbiIsICJtYWdlbnRhIiwgInllbGxvdyIsICJibGFjayJdLCAib3B0aW9uYWwiOiB0cnVl
IH0KLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAicmV0dXJucyI6IFsKLSAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAib3B0aW9uYWwi
OiB0cnVlLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAotICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVlIH0s
Ci0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIi
LCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMi
LCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAot
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNl
SWQiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzcWxF
cnJvciIsICIkcmVmIjogIkVycm9yIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6ICJQcmltYXJ5Q29sb3JzIiwgIm9w
dGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYWx0ZXJuYXRlQ29s
b3JzIiwgIiRyZWYiOiAiQ29sb3JMaXN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjog
WyJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93IiwgImJsYWNrIl0sICJvcHRpb25hbCI6IHRydWUg
fQotICAgICAgICAgICAgXQotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAibmFt
ZSI6ICJleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMiLAotICAgICAgICAgICAgInBhcmFtZXRl
cnMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjog
ImFycmF5IiwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwKLSAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiB9LAotICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiB9LAotICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiB9LAotICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIgfSwKLSAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogImRhdGFiYXNlSWQiLCAiJHJlZiI6ICJEYXRhYmFzZUlkIiB9LAotICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAic3FsRXJyb3IiLCAiJHJlZiI6ICJFcnJvciIgfSwKLSAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogInNjcmVlbkNvbG9yIiwgIiRyZWYiOiAiUHJpbWFyeUNvbG9y
cyIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImFsdGVybmF0ZUNvbG9ycyIsICIkcmVm
IjogIkNvbG9yTGlzdCIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInByaW50Q29sb3Ii
LCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsiY3lhbiIsICJtYWdlbnRhIiwgInllbGxvdyIs
ICJibGFjayJdIH0KLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAicmV0dXJucyI6IFsKLSAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAi
aXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiIH0sCi0gICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVycm9yIiB9LAotICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6ICJQcmltYXJ5Q29sb3JzIiB9LAotICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwgIiRyZWYiOiAiQ29sb3JM
aXN0IiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjog
InN0cmluZyIsICJlbnVtIjogWyJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93IiwgImJsYWNrIl0g
fQotICAgICAgICAgICAgXQotICAgICAgICB9Ci0gICAgXQotfQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZGVmaW5pdGlv
bnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpz
b24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxN2YxMzVlZTVhNzIwOTdhZTNlMTMx
YmRkNDBlNjAxNjk4YWIxMGMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgorKysgL2Rldi9udWxsCkBA
IC0xLDI4ICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIk5ldHdvcmsiLAotICAgICJ0eXBlcyI6
IFsKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIk5ldHdvcmtFcnJvciIsCi0gICAgICAg
ICAgICAidHlwZSI6ICJvYmplY3QiLAotICAgICAgICAgICAgInBsYXRmb3JtIjogIm1hY29zIiwK
LSAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
bWVzc2FnZSIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBtZXNzYWdl
LiIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvZGUiLCAidHlwZSI6ICJpbnRlZ2Vy
IiwgImRlc2NyaXB0aW9uIjogIkVycm9yIGNvZGUuIiB9Ci0gICAgICAgICAgICBdCi0gICAgICAg
IH0KLSAgICBdLAotICAgICJjb21tYW5kcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgIm5h
bWUiOiAibG9hZFJlc291cmNlIiwKLSAgICAgICAgICAgICJwbGF0Zm9ybSI6ICJtYWNvcyIsCi0g
ICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9hZHMgYSByZXNvdXJjZSBpbiB0aGUgY29udGV4
dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFnZSB3aXRob3V0IGNyb3NzIG9yaWdpbiBj
aGVja3MuIgotICAgICAgICB9Ci0gICAgXSwKLSAgICAiZXZlbnRzIjogWwotICAgICAgICB7Ci0g
ICAgICAgICAgICAibmFtZSI6ICJyZXNvdXJjZUxvYWRlZCIsCi0gICAgICAgICAgICAicGxhdGZv
cm0iOiAibWFjb3MiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkEgcmVzb3VyY2Ugd2Fz
IGxvYWRlZC4iCi0gICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9kb21haW4tZGVidWdnYWJs
ZVR5cGVzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZ2VuZXJpYy9kb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDFmZWIwYzlhMjdlNmQwM2QzOWNhYWJhZTBlMzk2NjQ3N2EwNGQxMGMuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZG9tYWluLWRlYnVnZ2Fi
bGVUeXBlcy5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1bCi17Ci0gICAgImRv
bWFpbiI6ICJEb21haW4iLAotICAgICJkZWJ1Z2dhYmxlVHlwZXMiOiBbIndlYi1wYWdlIl0sCi0g
ICAgImNvbW1hbmRzIjogW3sibmFtZSI6ICJDb21tYW5kIn1dLAotICAgICJldmVudHMiOiBbeyJu
YW1lIjogIkV2ZW50In1dCi19Ci1dCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9kb21haW4tdGFyZ2V0VHlwZS1tYXRjaGlu
Zy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2RvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRv
bWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBm
NjJmYjM4YmE3ODViMWViNDRjYTE4ODg2ZTA2ZDc5MjFiOWQwOTJjLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2RvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRv
bWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1b
Ci17Ci0gICAgImRvbWFpbiI6ICJEb21haW4iLAotICAgICJkZWJ1Z2dhYmxlVHlwZXMiOiBbInBh
Z2UiXSwKLSAgICAiY29tbWFuZHMiOiBbeyJuYW1lIjogIkNvbW1hbmQiLCAidGFyZ2V0VHlwZXMi
OiBbInBhZ2UiLCAid29ya2VyIl19XSwKLSAgICAiZXZlbnRzIjogW3sibmFtZSI6ICJFdmVudCJ9
XQotfQotXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2dlbmVyaWMvZG9tYWluLXRhcmdldFR5cGVzLmpzb24gYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9kb21haW4tdGFyZ2V0VHlw
ZXMuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmE2ZTQwZDYwYWRjMzU3ZjA2
NGZjYTE5NDc5N2NjYmFjYjBkN2U3NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZ2VuZXJpYy9kb21haW4tdGFyZ2V0VHlwZXMuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDgg
KzAsMCBAQAotWwotewotICAgICJkb21haW4iOiAiRG9tYWluIiwKLSAgICAidGFyZ2V0VHlwZXMi
OiBbInBhZ2UiXSwKLSAgICAiY29tbWFuZHMiOiBbeyJuYW1lIjogIkNvbW1hbmQiLCAidGFyZ2V0
VHlwZXMiOiBbInBhZ2UiXX1dLAotICAgICJldmVudHMiOiBbeyJuYW1lIjogIkV2ZW50IiwgInRh
cmdldFR5cGVzIjogWyJwYWdlIl19XQotfQotXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZG9tYWlucy13aXRoLXZhcnlp
bmctY29tbWFuZC1zaXplcy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5q
c29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NGE4ZWNiMTc2ZDNiOGVjOWJmOTY2
NzZlNjNjZWEwNTE0NjZiODY4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgorKysgL2Rldi9u
dWxsCkBAIC0xLDU0ICswLDAgQEAKLVsKLXsKLSAgICAiZG9tYWluIjogIk5ldHdvcmsxIiwKLSAg
ICAiY29tbWFuZHMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImxvYWRSZXNv
dXJjZTEiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4g
dGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9z
cyBvcmlnaW4gY2hlY2tzLiIKLSAgICAgICAgfQotICAgIF0KLX0sCi17Ci0gICAgImRvbWFpbiI6
ICJOZXR3b3JrMiIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQi
OiAiTG9hZGVySWQiLAotICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKLSAgICAgICAgICAg
ICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgbG9hZGVyIGlkZW50aWZpZXIuIgotICAgICAgICB9Ci0g
ICAgXQotfSwKLXsKLSAgICAiZG9tYWluIjogIk5ldHdvcmszIiwKLSAgICAiY29tbWFuZHMiOiBb
Ci0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJjZTEiLAotICAgICAg
ICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2Yg
YSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tz
LiIKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAibG9hZFJlc291
cmNlMiIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9hZHMgYSByZXNvdXJjZSBpbiB0
aGUgY29udGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFnZSB3aXRob3V0IGNyb3Nz
IG9yaWdpbiBjaGVja3MuIgotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAibmFt
ZSI6ICJsb2FkUmVzb3VyY2UzIiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBh
IHJlc291cmNlIGluIHRoZSBjb250ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGluc3BlY3RlZCBwYWdl
IHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNoZWNrcy4iCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAg
ICAgICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJjZTQiLAotICAgICAgICAgICAgImRlc2NyaXB0
aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUg
aW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKLSAgICAgICAgfSwK
LSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAibG9hZFJlc291cmNlNSIsCi0gICAgICAg
ICAgICAiZGVzY3JpcHRpb24iOiAiTG9hZHMgYSByZXNvdXJjZSBpbiB0aGUgY29udGV4dCBvZiBh
IGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFnZSB3aXRob3V0IGNyb3NzIG9yaWdpbiBjaGVja3Mu
IgotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJsb2FkUmVzb3Vy
Y2U2IiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBhIHJlc291cmNlIGluIHRo
ZSBjb250ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGluc3BlY3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mg
b3JpZ2luIGNoZWNrcy4iCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1l
IjogImxvYWRSZXNvdXJjZTciLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEg
cmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ug
d2l0aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKLSAgICAgICAgfQotICAgIF0KLX0KLV0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL2VudW0tdmFsdWVzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9lbnVtLXZhbHVlcy5qc29uCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBjZGFkNjFkZjdjOWY5Yzc2ZTY5Mjg5N2MzZGZlMGIwODIzZjkwZTRkLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2VudW0tdmFsdWVzLmpz
b24KKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi17ImRvbWFpbnMiOlsKLXsKLSAgICAi
ZG9tYWluIjogIlR5cGVEb21haW4iLAotICAgICJ0eXBlcyI6IFsKLSAgICAgICAgewotICAgICAg
ICAgICAgImlkIjogIlR5cGVEb21haW5FbnVtIiwKLSAgICAgICAgICAgICJ0eXBlIjogInN0cmlu
ZyIsCi0gICAgICAgICAgICAiZW51bSI6IFsic2hhcmVkIiwgInJlZCIsICJncmVlbiIsICJibHVl
Il0KLSAgICAgICAgfQotICAgIF0KLX0sCi17Ci0gICAgImRvbWFpbiI6ICJDb21tYW5kRG9tYWlu
IiwKLSAgICAiY29tbWFuZHMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImNv
bW1hbmRXaXRoRW51bVJldHVyblZhbHVlIiwKLSAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogW10s
Ci0gICAgICAgICAgICAicmV0dXJucyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInJl
dHVyblZhbHVlIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbInNoYXJlZCIsICJjeWFuIiwg
Im1hZ2VudGEiLCAieWVsbG93Il0gfQotICAgICAgICAgICAgXQotICAgICAgICB9Ci0gICAgXQot
fSwKLXsKLSAgICAiZG9tYWluIjogIkV2ZW50RG9tYWluIiwKLSAgICAiZXZlbnRzIjogWwotICAg
ICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJldmVudFdpdGhFbnVtUGFyYW1ldGVyIiwKLSAg
ICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGFy
YW1ldGVyIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbInNoYXJlZCIsICJibGFjayIsICJ3
aGl0ZSJdIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfQotICAgIF0KLX0KLV19CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJp
Yy9ldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXZl
bnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGRmZWQ0MWVkMjFmZjIyNDk2MDQ4ZjEyNDkzYTZhZjVh
MzBlNzczNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9ldmVu
dC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCisrKyAvZGV2
L251bGwKQEAgLTEsOCArMCwwIEBACi1bCi17Ci0gICAgImRvbWFpbiI6ICJEb21haW4iLAotICAg
ICJkZWJ1Z2dhYmxlVHlwZXMiOiBbInBhZ2UiXSwKLSAgICAiY29tbWFuZHMiOiBbeyJuYW1lIjog
IkNvbW1hbmQifV0sCi0gICAgImV2ZW50cyI6IFt7Im5hbWUiOiAiRXZlbnQiLCAidGFyZ2V0VHlw
ZXMiOiBbInBhZ2UiLCAid29ya2VyIl19XQotfQotXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXZlbnRzLXdpdGgtb3B0
aW9uYWwtcGFyYW1ldGVycy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29u
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYWJiZjEwYjgzNmY5ZmY3Y2Q5OTI1ZGI0
ZDZiNDFjNWRmYTg3YjQ4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmljL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgorKysgL2Rldi9udWxsCkBA
IC0xLDU5ICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKLSAgICAidHlwZXMi
OiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJEYXRhYmFzZUlkIiwKLSAgICAgICAg
ICAgICJ0eXBlIjogInN0cmluZyIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVl
IGlkZW50aWZpZXIgb2YgRGF0YWJhc2Ugb2JqZWN0LiIKLSAgICAgICAgfSwKLSAgICAgICAgewot
ICAgICAgICAgICAgImlkIjogIlByaW1hcnlDb2xvcnMiLAotICAgICAgICAgICAgInR5cGUiOiAi
c3RyaW5nIiwKLSAgICAgICAgICAgICJ2YWx1ZXMiOiBbInJlZCIsICJncmVlbiIsICJibHVlIl0K
LSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIkNvbG9yTGlzdCIsCi0g
ICAgICAgICAgICAidHlwZSI6ICJhcnJheSIsCi0gICAgICAgICAgICAiaXRlbXMiOiB7ICIkcmVm
IjogIlByaW1hcnlDb2xvcnMiIH0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAg
ImlkIjogIkVycm9yIiwKLSAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCi0gICAgICAgICAg
ICAiZGVzY3JpcHRpb24iOiAiRGF0YWJhc2UgZXJyb3IuIiwKLSAgICAgICAgICAgICJwcm9wZXJ0
aWVzIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibWVzc2FnZSIsICJ0eXBlIjogInN0
cmluZyIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBtZXNzYWdlLiIgfSwKLSAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogImNvZGUiLCAidHlwZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9uIjogIkVy
cm9yIGNvZGUuIiB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0KLSAgICBdLAotICAgICJldmVu
dHMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImRpZEV4ZWN1dGVPcHRpb25h
bFBhcmFtZXRlcnMiLAotICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCi0gICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIm9wdGlvbmFsIjog
dHJ1ZSwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwKLSAgICAgICAgICAgICAgICB7
ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAot
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiwg
Im9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVzIiwg
InR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiLCAib3B0
aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5Db2xvciIs
ICIkcmVmIjogIlByaW1hcnlDb2xvcnMiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJhbHRlcm5hdGVDb2xvcnMiLCAiJHJlZiI6ICJDb2xvckxpc3QiLCAi
b3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcmludENvbG9y
IiwgInR5cGUiOiAic3RyaW5nIiwgInZhbHVlcyI6IFsiY3lhbiIsICJtYWdlbnRhIiwgInllbGxv
dyIsICJibGFjayJdLCAib3B0aW9uYWwiOiB0cnVlIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAg
fSwKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiZGlkRXhlY3V0ZU5vT3B0aW9uYWxQ
YXJhbWV0ZXJzIiwKLSAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwotICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgInR5
cGUiOiAic3RyaW5nIiB9IH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0
eXBlIjogInN0cmluZyIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIs
ICJ0eXBlIjogIm51bWJlciIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIs
ICJ0eXBlIjogIm9iamVjdCIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxvYWQi
LCAidHlwZSI6ICJhbnkiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzcWxFcnJvciIs
ICIkcmVmIjogIkVycm9yIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2NyZWVuQ29s
b3IiLCAiJHJlZiI6ICJQcmltYXJ5Q29sb3JzIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAiYWx0ZXJuYXRlQ29sb3JzIiwgIiRyZWYiOiAiQ29sb3JMaXN0IiB9LAotICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmluZyIsICJ2YWx1ZXMiOiBb
ImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSB9Ci0gICAgICAgICAgICBdCi0g
ICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9jb21tYW5kLXRhcmdldFR5cGUt
bWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvY29tbWFu
ZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJlc3VsdApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDMxM2ZhOTE1MWU5MmNkMDNiMDA4YjNjMzVl
YWJkMzdkOTkxN2Y3ZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJp
Yy9leHBlY3RlZC9jb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVU
eXBlLmpzb24tcmVzdWx0CisrKyAvZGV2L251bGwKQEAgLTEsMTA2MyArMCwwIEBACi0jIyMgQmVn
aW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dh
YmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LS8vIERvbWFpbgotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiRG9tYWluIiwgWyJw
YWdlIiwgIndvcmtlciJdKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJEb21h
aW4uQ29tbWFuZCIsIG51bGwsIFtdLCBbXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZl
bnQoIkRvbWFpbi5FdmVudCIsIG51bGwsIFtdKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJE
b21haW5EaXNwYXRjaGVyID0gSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRpc3BhdGNoZXIuYmlu
ZChJbnNwZWN0b3JCYWNrZW5kLCAiRG9tYWluIik7Ci1JbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRl
RG9tYWluKCJEb21haW4iLCBbInBhZ2UiXSk7Ci0jIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tl
bmRDb21tYW5kcy5qcwotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNw
YXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZC10YXJn
ZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9j
b2xUeXBlcy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0
ZXIuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEFsdGVybmF0ZUJhY2tlbmRE
aXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0
cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIg
PSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9Ci0gICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmRE
aXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQot
cHJpdmF0ZToKLSAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNo
ZXI7Ci19OwotCi0KLWNsYXNzIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyIDogcHVi
bGljIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5B
bHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBD
b21tYW5kKGxvbmcgY2FsbElkKSA9IDA7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
LQotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotIyMj
IEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5
cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJh
Z21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdHlwZWRlZiBT
dHJpbmcgRXJyb3JTdHJpbmc7Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKLWNsYXNzIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyOwotI2VuZGlm
IC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi1jbGFzcyBEb21h
aW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewotcHVibGljOgotICAgIHZpcnR1YWwgdm9pZCBD
b21tYW5kKEVycm9yU3RyaW5nJikgPSAwOwotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgfkRvbWFp
bkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOwotfTsKLQotY2xhc3MgRG9tYWluQmFja2VuZERp
c3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewot
cHVibGljOgotICAgIHN0YXRpYyBSZWY8RG9tYWluQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShC
YWNrZW5kRGlzcGF0Y2hlciYsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAg
IHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8
SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOwotcHJpdmF0ZToKLSAgICB2b2lkIENvbW1h
bmQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0j
aWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi1wdWJsaWM6Ci0gICAg
dm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRj
aGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVy
bmF0ZURpc3BhdGNoZXI7IH0KLXByaXZhdGU6Ci0gICAgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERp
c3BhdGNoZXIqIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciB7IG51bGxwdHIgfTsKLSNlbmRpZgotcHJp
dmF0ZToKLSAgICBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYsIERv
bWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIERvbWFpbkJhY2tlbmREaXNwYXRj
aGVySGFuZGxlciogbV9hZ2VudCB7IG51bGxwdHIgfTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dh
YmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgi
Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgot
I2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVk
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jaWYgRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmRE
aXNwYXRjaGVycy5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1Eb21haW5C
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5Eb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIo
KSB7IH0KLQotUmVmPERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBEb21haW5CYWNrZW5kRGlzcGF0
Y2hlcjo6Y3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgRG9tYWlu
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsK
LX0KLQotRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkRvbWFpbkJhY2tlbmREaXNwYXRjaGVyKEJh
Y2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgRG9tYWluQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyKiBhZ2VudCkKLSAgICA6IFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJh
Y2tlbmREaXNwYXRjaGVyKQotICAgICwgbV9hZ2VudChhZ2VudCkKLXsKLSAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oIkRvbWFpbiJfcywgdGhpcyk7
Ci19Ci0KLXZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVz
dElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQot
ewotICAgIFJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7Ci0KLSAg
ICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOwotICAgIG1lc3NhZ2UtPmdldE9iamVj
dCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsKLQotICAgIGlmIChtZXRob2QgPT0gIkNvbW1hbmQi
KQotICAgICAgICBDb21tYW5kKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7Ci0gICAg
ZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJh
Y2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uIiArIG1ldGhvZCArICIn
IHdhcyBub3QgZm91bmQiKTsKLX0KLQotdm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29t
bWFuZChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKLXsKLSNpZiBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSAgICBpZiAobV9hbHRlcm5hdGVE
aXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+Q29tbWFuZChyZXF1
ZXN0SWQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBFcnJvclN0cmlu
ZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOwotICAgIG1fYWdlbnQtPkNvbW1hbmQoZXJyb3IpOwotCi0gICAgaWYgKCFlcnJvci5s
ZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVl
c3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2
ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
LQotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5
cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJh
Z21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDx3
dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1l
c3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgRnJvbnRlbmRSb3V0ZXI7Ci0KLWNsYXNzIERvbWFp
bkZyb250ZW5kRGlzcGF0Y2hlciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJs
aWM6Ci0gICAgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVyKEZyb250ZW5kUm91dGVyJiBmcm9udGVu
ZFJvdXRlcikgOiBtX2Zyb250ZW5kUm91dGVyKGZyb250ZW5kUm91dGVyKSB7IH0KLSAgICB2b2lk
IEV2ZW50KCk7Ci1wcml2YXRlOgotICAgIEZyb250ZW5kUm91dGVyJiBtX2Zyb250ZW5kUm91dGVy
OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9u
dGVuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNo
ZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmQtdGFyZ2V0
VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdm9pZCBEb21haW5Gcm9udGVuZERpc3BhdGNo
ZXI6OkV2ZW50KCkKLXsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9z
LCAiRG9tYWluLkV2ZW50Il9zKTsKLQotICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpz
b25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgotCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlw
ZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFn
bWEgb25jZQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBl
cy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewotCi0KLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLQotCi0KLQotCi0KLX0gLy8gbmFt
ZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9i
amVjdHMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZC10YXJn
ZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0KLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Igewot
Ci1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQot
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2Jq
ZWN0cy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVy
cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZC10YXJnZXRUeXBl
LW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRy
Lmg+Ci0KLUBwcm90b2NvbCBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyOwotCi1uYW1l
c3BhY2UgSW5zcGVjdG9yIHsKLQotCi1jbGFzcyBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERp
c3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIg
ewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIE9iakNJbnNwZWN0
b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5k
bGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9Ci0gICAgdm9pZCBDb21tYW5k
KGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKLXByaXZhdGU6Ci0gICAgUmV0YWluUHRyPGlkPFRlc3RQ
cm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwotfTsKLQotfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3Bh
dGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVy
cy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmQtdGFyZ2V0VHlw
ZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRl
c3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29s
SW50ZXJuYWwuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNp
bmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdm9p
ZCBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9uZyByZXF1
ZXN0SWQpCi17Ci0gICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVj
dG9yKENvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsKLSAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJh
Y2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uQ29tbWFuZCcgd2FzIG5v
dCBmb3VuZCJfcyk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJy
b3JzKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZCBlcnJvckNhbGxiYWNrID0g
XihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0
UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwg
ZXJyb3IpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygp
OwotICAgIH07Ci0KLSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5k
RGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpLCBmYWxzZSk7Ci0gICAgfTsKLQotICAgIFttX2RlbGVnYXRlIENvbW1hbmRXaXRoRXJyb3JD
YWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOwot
fQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbi5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFu
ZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rv
ci9UZXN0UHJvdG9jb2wuaD4KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQi
KSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAotQHBy
b3BlcnR5IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNldERvbWFpbkhhbmRsZXI6KSBpZDxU
ZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiBkb21haW5IYW5kbGVyOwotQHByb3BlcnR5
IChub25hdG9taWMsIHJlYWRvbmx5KSBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3Bh
dGNoZXIgKmRvbWFpbkV2ZW50RGlzcGF0Y2hlcjsKLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbi5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1h
bmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2xDb25maWd1cmF0aW9uLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0j
aW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+Ci0jaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2ltcG9y
dCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0KLXVzaW5n
IG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25m
aWd1cmF0aW9uCi17Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJv
bGxlcjsKLSAgICBpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiBfZG9tYWluSGFu
ZGxlcjsKLSAgICBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKl9kb21h
aW5FdmVudERpc3BhdGNoZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xs
ZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgotewotICAgIHNl
bGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwot
ICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0g
ICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAgIFtfZG9tYWluSGFu
ZGxlciByZWxlYXNlXTsKLSAgICBbX2RvbWFpbkV2ZW50RGlzcGF0Y2hlciByZWxlYXNlXTsKLSAg
ICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLS0gKHZvaWQpc2V0RG9tYWluSGFuZGxlcjooaWQ8VGVz
dFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4paGFuZGxlcgotewotICAgIGlmIChoYW5kbGVy
ID09IF9kb21haW5IYW5kbGVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBbX2RvbWFpbkhhbmRs
ZXIgcmVsZWFzZV07Ci0gICAgX2RvbWFpbkhhbmRsZXIgPSBbaGFuZGxlciByZXRhaW5dOwotCi0g
ICAgYXV0byBhbHRlcm5hdGVEaXNwYXRjaGVyID0gbWFrZVVuaXF1ZTxPYmpDSW5zcGVjdG9yRG9t
YWluQmFja2VuZERpc3BhdGNoZXI+KGhhbmRsZXIpOwotICAgIGF1dG8gYWx0ZXJuYXRlQWdlbnQg
PSBtYWtlVW5pcXVlPEFsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50PERvbWFpbkJhY2tlbmREaXNw
YXRjaGVyLCBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4+KCJEb21haW4iX3MsICpf
Y29udHJvbGxlciwgV1RGTW92ZShhbHRlcm5hdGVEaXNwYXRjaGVyKSk7Ci0gICAgX2NvbnRyb2xs
ZXItPmFwcGVuZEV4dHJhQWdlbnQoV1RGTW92ZShhbHRlcm5hdGVBZ2VudCkpOwotfQotCi0tIChp
ZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPilkb21haW5IYW5kbGVyCi17Ci0gICAg
cmV0dXJuIF9kb21haW5IYW5kbGVyOwotfQotCi0tIChUZXN0UHJvdG9jb2xEb21haW5Eb21haW5F
dmVudERpc3BhdGNoZXIgKilkb21haW5FdmVudERpc3BhdGNoZXIKLXsKLSAgICBpZiAoIV9kb21h
aW5FdmVudERpc3BhdGNoZXIpCi0gICAgICAgIF9kb21haW5FdmVudERpc3BhdGNoZXIgPSBbW1Rl
c3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciBhbGxvY10gaW5pdFdpdGhDb250
cm9sbGVyOl9jb250cm9sbGVyXTsKLSAgICByZXR1cm4gX2RvbWFpbkV2ZW50RGlzcGF0Y2hlcjsK
LX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5t
bQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGlu
Zy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1w
b3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPHd0Zi9KU09OVmFs
dWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBU
ZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIKLXsKLSAgICBBdWdtZW50YWJs
ZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotfQotCi0tIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRy
b2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAg
ICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRyb2xsZXIg
PSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKUV2ZW50Ci17Ci0g
ICAgY29uc3QgRnJvbnRlbmRSb3V0ZXImIHJvdXRlciA9IF9jb250cm9sbGVyLT5mcm9udGVuZFJv
dXRlcigpOwotCi0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmpl
Y3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRv
bWFpbi5FdmVudCJfcyk7Ci0gICAgcm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09O
U3RyaW5nKCkpOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVu
dERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1k
b21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2ltcG9y
dCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgotCi0KLQotCi10eXBlZGVm
IE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xQbGF0Zm9ybSkgewotICAgIFRlc3RQcm90
b2NvbFBsYXRmb3JtQWxsLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYywKLSAgICBU
ZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TLAot
fTsKLQotCi0KLQotCi1AcHJvdG9jb2wgVGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlciA8
TlNPYmplY3Q+Ci1Ab3B0aW9uYWwKLS0gKHZvaWQpQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOih2
b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZv
aWQoXikodm9pZCkpc3VjY2Vzc0NhbGxiYWNrOwotQGVuZAotCi1fX2F0dHJpYnV0ZV9fKCh2aXNp
YmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sRG9tYWluRG9tYWlu
RXZlbnREaXNwYXRjaGVyIDogTlNPYmplY3QKLS0gKHZvaWQpRXZlbnQ7Ci1AZW5kCi0KLQotI2lt
cG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5o
PgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xJbnRlcm5hbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29t
bWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90
b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKLSNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2lt
cG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xEb21haW5E
b21haW5FdmVudERpc3BhdGNoZXIgKFByaXZhdGUpCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhD
b250cm9sbGVyOihJbnNwZWN0b3I6OkF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29u
dHJvbGxlcjsKLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgK
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRv
bWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCA8V2ViSW5zcGVj
dG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9y
IHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgotT3B0aW9uYWw8T2JqQ0VudW1U
eXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0KLWlubGluZSBT
dHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xQbGF0Zm9ybSB2YWx1ZSkKLXsKLSAg
ICBzd2l0Y2godmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOgotICAg
ICAgICByZXR1cm4gImFsbCJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJp
YzoKLSAgICAgICAgcmV0dXJuICJnZW5lcmljIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxh
dGZvcm1JT1M6Ci0gICAgICAgIHJldHVybiAiaW9zIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29s
UGxhdGZvcm1NYWNPUzoKLSAgICAgICAgcmV0dXJuICJtYWNvcyJfczsKLSAgICB9Ci19Ci0KLXRl
bXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xQbGF0Zm9ybT4gZnJvbVByb3Rv
Y29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJhbGwi
KQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1BbGw7Ci0gICAgaWYgKHZhbHVl
ID09ICJnZW5lcmljIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJp
YzsKLSAgICBpZiAodmFsdWUgPT0gImlvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQ
bGF0Zm9ybUlPUzsKLSAgICBpZiAodmFsdWUgPT0gIm1hY29zIikKLSAgICAgICAgcmV0dXJuIFRl
c3RQcm90b2NvbFBsYXRmb3JtTWFjT1M7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmQtdGFyZ2V0
VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJv
dG9jb2xUeXBlUGFyc2VyLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09O
T2JqZWN0UHJpdmF0ZS5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLQotCi0K
LQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlw
ZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBv
cnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucy5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVj
dFByaXZhdGUuaD4KLSNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW1wb3J0IDx3dGYvSlNP
TlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLSMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgt
YXN5bmMtYXR0cmlidXRlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1hc3luYy1h
dHRyaWJ1dGUuanNvbi1yZXN1bHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjNWM0
MWRiNTNhYjZiYzQwY2E0YTUzNDdlYTcyYTg3YjczNDE4YTYuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRy
aWJ1dGUuanNvbi1yZXN1bHQKKysrIC9kZXYvbnVsbApAQCAtMSwxODA5ICswLDAgQEAKLSMjIyBC
ZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLS8vIERhdGFiYXNlCi1JbnNw
ZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJEYXRhYmFzZSIsIG51bGwpOwotSW5zcGVjdG9y
QmFja2VuZC5yZWdpc3RlckVudW0oIkRhdGFiYXNlLlByaW1hcnlDb2xvcnMiLCB7UmVkOiAicmVk
IiwgR3JlZW46ICJncmVlbiIsIEJsdWU6ICJibHVlIn0pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdp
c3RlckNvbW1hbmQoIkRhdGFiYXNlLmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMi
LCBudWxsLCBbeyJuYW1lIjogImRhdGFiYXNlSWQiLCAidHlwZSI6ICJudW1iZXIifSwgeyJuYW1l
IjogInF1ZXJ5IiwgInR5cGUiOiAic3RyaW5nIn1dLCBbImNvbHVtbk5hbWVzIiwgIm5vdGVzIiwg
InRpbWVzdGFtcCIsICJ2YWx1ZXMiLCAicGF5bG9hZCIsICJkYXRhYmFzZUlkIiwgInNxbEVycm9y
IiwgInNjcmVlbkNvbG9yIiwgImFsdGVybmF0ZUNvbG9ycyIsICJwcmludENvbG9yIl0pOwotSW5z
cGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIkRhdGFiYXNlLmV4ZWN1dGVTUUxBc3luY09w
dGlvbmFsUmV0dXJuVmFsdWVzIiwgbnVsbCwgW3sibmFtZSI6ICJkYXRhYmFzZUlkIiwgInR5cGUi
OiAibnVtYmVyIn0sIHsibmFtZSI6ICJxdWVyeSIsICJ0eXBlIjogInN0cmluZyJ9XSwgWyJjb2x1
bW5OYW1lcyIsICJub3RlcyIsICJ0aW1lc3RhbXAiLCAidmFsdWVzIiwgInBheWxvYWQiLCAiZGF0
YWJhc2VJZCIsICJzcWxFcnJvciIsICJzY3JlZW5Db2xvciIsICJhbHRlcm5hdGVDb2xvcnMiLCAi
cHJpbnRDb2xvciJdKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJEYXRhYmFz
ZS5leGVjdXRlU1FMU3luYyIsIG51bGwsIFt7Im5hbWUiOiAiZGF0YWJhc2VJZCIsICJ0eXBlIjog
Im51bWJlciJ9LCB7Im5hbWUiOiAicXVlcnkiLCAidHlwZSI6ICJzdHJpbmcifV0sIFsiY29sdW1u
TmFtZXMiLCAibm90ZXMiLCAidGltZXN0YW1wIiwgInZhbHVlcyIsICJwYXlsb2FkIiwgImRhdGFi
YXNlSWQiLCAic3FsRXJyb3IiLCAiYWx0ZXJuYXRlQ29sb3JzIiwgInNjcmVlbkNvbG9yIiwgInBy
aW50Q29sb3IiXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiRGF0YWJhc2Uu
ZXhlY3V0ZVNRTEFzeW5jIiwgbnVsbCwgW3sibmFtZSI6ICJkYXRhYmFzZUlkIiwgInR5cGUiOiAi
bnVtYmVyIn0sIHsibmFtZSI6ICJxdWVyeSIsICJ0eXBlIjogInN0cmluZyJ9XSwgWyJjb2x1bW5O
YW1lcyIsICJub3RlcyIsICJ0aW1lc3RhbXAiLCAidmFsdWVzIiwgInBheWxvYWQiLCAiZGF0YWJh
c2VJZCIsICJzcWxFcnJvciIsICJzY3JlZW5Db2xvciIsICJhbHRlcm5hdGVDb2xvcnMiLCAicHJp
bnRDb2xvciJdKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEYXRhYmFzZURpc3BhdGNoZXIg
PSBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRGlzcGF0Y2hlci5iaW5kKEluc3BlY3RvckJhY2tl
bmQsICJEYXRhYmFzZSIpOwotSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiRGF0YWJh
c2UiLCBudWxsKTsKLSMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0
ZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFn
bWEgb25jZQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0K
LSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNs
YXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2b2lkIHNldEJh
Y2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7
IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9Ci0gICAgQmFja2Vu
ZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5k
RGlzcGF0Y2hlci5nZXQoKTsgfQotcHJpdmF0ZToKLSAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNo
ZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Ci19OwotCi0KLWNsYXNzIEFsdGVybmF0ZURhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewot
cHVibGljOgotICAgIHZpcnR1YWwgfkFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIo
KSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVl
cyhsb25nIGNhbGxJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1
ZXMobG9uZyBjYWxsSWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxTeW5jKGxvbmcgY2FsbElkLCBpbnQg
aW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCBleGVjdXRlU1FMQXN5bmMobG9uZyBjYWxsSWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25z
dCBTdHJpbmcmIGluX3F1ZXJ5KSA9IDA7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
LQotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotIyMj
IEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRl
ICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
LQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwot
Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi1jbGFzcyBBbHRl
cm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOwotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi1jbGFzcyBEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVySGFuZGxlciB7Ci1wdWJsaWM6Ci0gICAgLy8gTmFtZWQgYWZ0ZXIgcGFyYW1ldGVyICdwcmlu
dENvbG9yJyB3aGlsZSBnZW5lcmF0aW5nIGNvbW1hbmQvZXZlbnQgZXhlY3V0ZVNRTFN5bmNPcHRp
b25hbFJldHVyblZhbHVlcy4KLSAgICBlbnVtIGNsYXNzIFByaW50Q29sb3IgewotICAgICAgICBD
eWFuID0gMywKLSAgICAgICAgTWFnZW50YSA9IDQsCi0gICAgICAgIFllbGxvdyA9IDUsCi0gICAg
ICAgIEJsYWNrID0gNiwKLSAgICB9OyAvLyBlbnVtIGNsYXNzIFByaW50Q29sb3IKLSAgICB2aXJ0
dWFsIHZvaWQgZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhFcnJvclN0cmluZyYs
IGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5LCBSZWZQdHI8SlNPTjo6
QXJyYXlPZjxTdHJpbmc+PiYgb3B0X291dF9jb2x1bW5OYW1lcywgT3B0aW9uYWw8U3RyaW5nPiYg
b3B0X291dF9ub3RlcywgT3B0aW9uYWw8ZG91YmxlPiYgb3B0X291dF90aW1lc3RhbXAsIE9wdGlv
bmFsPEpTT046Ok9iamVjdD4mIG9wdF9vdXRfdmFsdWVzLCBPcHRpb25hbDxKU09OOjpWYWx1ZT4m
IG9wdF9vdXRfcGF5bG9hZCwgT3B0aW9uYWw8aW50PiYgb3B0X291dF9kYXRhYmFzZUlkLCBSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYgb3B0X291dF9zcWxFcnJv
ciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMqIG9wdF9vdXRf
c2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JM
aXN0PiYgb3B0X291dF9hbHRlcm5hdGVDb2xvcnMsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyOjpQcmludENvbG9yKiBvcHRfb3V0X3ByaW50Q29sb3IpID0gMDsKLSAgICBjbGFzcyBF
eGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrIDogcHVibGljIEJhY2tl
bmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UgewotICAgIHB1YmxpYzoKLSAgICAgICAgRXhlY3V0
ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjayhSZWY8QmFja2VuZERpc3BhdGNo
ZXI+JiYsIGludCBpZCk7Ci0gICAgICAgIHZvaWQgc2VuZFN1Y2Nlc3MoUmVmUHRyPEpTT046OkFy
cmF5T2Y8U3RyaW5nPj4mJiBjb2x1bW5OYW1lcywgT3B0aW9uYWw8U3RyaW5nPiYgbm90ZXMsIE9w
dGlvbmFsPGRvdWJsZT4mIHRpbWVzdGFtcCwgT3B0aW9uYWw8SlNPTjo6T2JqZWN0PiYgdmFsdWVz
LCBPcHRpb25hbDxKU09OOjpWYWx1ZT4mIHBheWxvYWQsIE9wdGlvbmFsPGludD4mIGRhdGFiYXNl
SWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiYgc3FsRXJy
b3IsIE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3Jz
PiBzY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xv
ckxpc3Q+JiYgYWx0ZXJuYXRlQ29sb3JzLCBPcHRpb25hbDxEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVySGFuZGxlcjo6UHJpbnRDb2xvcj4gcHJpbnRDb2xvcik7Ci0gICAgfTsKLSAgICB2aXJ0dWFs
IHZvaWQgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMoaW50IGluX2RhdGFiYXNl
SWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnksIFJlZjxFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJl
dHVyblZhbHVlc0NhbGxiYWNrPiYmIGNhbGxiYWNrKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGV4
ZWN1dGVTUUxTeW5jKEVycm9yU3RyaW5nJiwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmlu
ZyYgaW5fcXVlcnksIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiBvdXRfY29sdW1uTmFt
ZXMsIFN0cmluZyogb3V0X25vdGVzLCBkb3VibGUqIG91dF90aW1lc3RhbXAsIEpTT046Ok9iamVj
dCogb3V0X3ZhbHVlcywgSlNPTjo6VmFsdWUqIG91dF9wYXlsb2FkLCBpbnQqIG91dF9kYXRhYmFz
ZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYgb3V0X3Nx
bEVycm9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4m
IG91dF9hbHRlcm5hdGVDb2xvcnMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmlt
YXJ5Q29sb3JzKiBvdXRfc2NyZWVuQ29sb3IsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyOjpQcmludENvbG9yKiBvdXRfcHJpbnRDb2xvcikgPSAwOwotICAgIGNsYXNzIEV4ZWN1dGVT
UUxBc3luY0NhbGxiYWNrIDogcHVibGljIEJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2Ug
ewotICAgIHB1YmxpYzoKLSAgICAgICAgRXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2soUmVmPEJhY2tl
bmREaXNwYXRjaGVyPiYmLCBpbnQgaWQpOwotICAgICAgICB2b2lkIHNlbmRTdWNjZXNzKFJlZlB0
cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiYgY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgbm90
ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIEpTT046Ok9iamVjdCB2YWx1ZXMsIEpTT046OlZhbHVlIHBh
eWxvYWQsIGludCBkYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6OkVycm9yPiYmIHNxbEVycm9yLCBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJp
bWFyeUNvbG9ycyBzY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFi
YXNlOjpDb2xvckxpc3Q+JiYgYWx0ZXJuYXRlQ29sb3JzLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVySGFuZGxlcjo6UHJpbnRDb2xvciBwcmludENvbG9yKTsKLSAgICB9OwotICAgIHZpcnR1YWwg
dm9pZCBleGVjdXRlU1FMQXN5bmMoaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5f
cXVlcnksIFJlZjxFeGVjdXRlU1FMQXN5bmNDYWxsYmFjaz4mJiBjYWxsYmFjaykgPSAwOwotcHJv
dGVjdGVkOgotICAgIHZpcnR1YWwgfkRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7
Ci19OwotCi1jbGFzcyBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1
cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPERh
dGFiYXNlQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIERhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdm9pZCBkaXNwYXRjaChsb25nIHJl
cXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2Fn
ZSkgZmluYWw7Ci1wcml2YXRlOgotICAgIHZvaWQgZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVy
blZhbHVlcyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJz
KTsKLSAgICB2b2lkIGV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcmVx
dWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwotICAgIHZvaWQgZXhl
Y3V0ZVNRTFN5bmMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1l
dGVycyk7Ci0gICAgdm9pZCBleGVjdXRlU1FMQXN5bmMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxK
U09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCi1wdWJsaWM6Ci0gICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVy
KEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIp
IHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQotcHJpdmF0
ZToKLSAgICBBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKiBtX2FsdGVybmF0ZURp
c3BhdGNoZXIgeyBudWxscHRyIH07Ci0jZW5kaWYKLXByaXZhdGU6Ci0gICAgRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYsIERhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyKik7Ci0gICAgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdl
bnQgeyBudWxscHRyIH07Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQg
RmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFj
a2VuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNv
bW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRl
IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0K
LSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSNpbmNsdWRlICJU
ZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIElu
c3BlY3RvciB7Ci0KLURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+RGF0YWJhc2VC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KLQotUmVmPERhdGFiYXNlQmFja2VuZERpc3Bh
dGNoZXI+IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hl
ciYgYmFja2VuZERpc3BhdGNoZXIsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBh
Z2VudCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOwotfQotCi1EYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVyOjpEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNr
ZW5kRGlzcGF0Y2hlciwgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQot
ICAgIDogU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCi0g
ICAgLCBtX2FnZW50KGFnZW50KQotewotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVy
RGlzcGF0Y2hlckZvckRvbWFpbigiRGF0YWJhc2UiX3MsIHRoaXMpOwotfQotCi12b2lkIERhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJp
bmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQotewotICAgIFJlZjxEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKLQotICAgIFJlZlB0cjxKU09O
OjpPYmplY3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3Ms
IHBhcmFtZXRlcnMpOwotCi0gICAgaWYgKG1ldGhvZCA9PSAiZXhlY3V0ZVNRTFN5bmNPcHRpb25h
bFJldHVyblZhbHVlcyIpCi0gICAgICAgIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1
ZXMocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKLSAgICBlbHNlIGlmIChtZXRob2Qg
PT0gImV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzIikKLSAgICAgICAgZXhlY3V0
ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRl
cnMpKTsKLSAgICBlbHNlIGlmIChtZXRob2QgPT0gImV4ZWN1dGVTUUxTeW5jIikKLSAgICAgICAg
ZXhlY3V0ZVNRTFN5bmMocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKLSAgICBlbHNl
IGlmIChtZXRob2QgPT0gImV4ZWN1dGVTUUxBc3luYyIpCi0gICAgICAgIGV4ZWN1dGVTUUxBc3lu
YyhyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOwotICAgIGVsc2UKLSAgICAgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6
TWV0aG9kTm90Rm91bmQsICInRGF0YWJhc2UuIiArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQi
KTsKLX0KLQotdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMU3luY09w
dGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYm
IHBhcmFtZXRlcnMpCi17Ci0gICAgaW50IGluX2RhdGFiYXNlSWQgPSBtX2JhY2tlbmREaXNwYXRj
aGVyLT5nZXRJbnRlZ2VyKHBhcmFtZXRlcnMuZ2V0KCksICJkYXRhYmFzZUlkIl9zLCBudWxscHRy
KTsKLSAgICBTdHJpbmcgaW5fcXVlcnkgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmco
cGFyYW1ldGVycy5nZXQoKSwgInF1ZXJ5Il9zLCBudWxscHRyKTsKLSAgICBpZiAobV9iYWNrZW5k
RGlzcGF0Y2hlci0+aGFzUHJvdG9jb2xFcnJvcnMoKSkgewotICAgICAgICBtX2JhY2tlbmREaXNw
YXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFy
YW1zLCAiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICdEYXRhYmFzZS5leGVjdXRlU1FMU3luY09w
dGlvbmFsUmV0dXJuVmFsdWVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiX3MpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
Ci0gICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURp
c3BhdGNoZXItPmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMocmVxdWVzdElkLCBp
bl9kYXRhYmFzZUlkLCBpbl9xdWVyeSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYK
LQotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9
IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5n
Pj4gb3V0X2NvbHVtbk5hbWVzOwotICAgIE9wdGlvbmFsPFN0cmluZz4gb3V0X25vdGVzOwotICAg
IE9wdGlvbmFsPGRvdWJsZT4gb3V0X3RpbWVzdGFtcDsKLSAgICBPcHRpb25hbDxKU09OOjpPYmpl
Y3Q+IG91dF92YWx1ZXM7Ci0gICAgT3B0aW9uYWw8SlNPTjo6VmFsdWU+IG91dF9wYXlsb2FkOwot
ICAgIE9wdGlvbmFsPGludD4gb3V0X2RhdGFiYXNlSWQ7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gb3V0X3NxbEVycm9yOwotICAgIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzIG91dF9zY3JlZW5Db2xvcjsKLSAgICBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4gb3V0X2FsdGVy
bmF0ZUNvbG9yczsKLSAgICBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRD
b2xvciBvdXRfcHJpbnRDb2xvcjsKLSAgICBtX2FnZW50LT5leGVjdXRlU1FMU3luY09wdGlvbmFs
UmV0dXJuVmFsdWVzKGVycm9yLCBpbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSwgb3V0X2NvbHVtbk5h
bWVzLCBvdXRfbm90ZXMsIG91dF90aW1lc3RhbXAsIG91dF92YWx1ZXMsIG91dF9wYXlsb2FkLCBv
dXRfZGF0YWJhc2VJZCwgb3V0X3NxbEVycm9yLCBvdXRfc2NyZWVuQ29sb3IsIG91dF9hbHRlcm5h
dGVDb2xvcnMsIG91dF9wcmludENvbG9yKTsKLQotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIHsK
LSAgICAgICAgaWYgKG91dF9jb2x1bW5OYW1lcykKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0QXJy
YXkoImNvbHVtbk5hbWVzIl9zLCBvdXRfY29sdW1uTmFtZXMpOwotICAgICAgICBpZiAob3V0X25v
dGVzLmhhc1ZhbHVlKCkpCi0gICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZygibm90ZXMiX3Ms
ICpvdXRfbm90ZXMpOwotICAgICAgICBpZiAob3V0X3RpbWVzdGFtcC5oYXNWYWx1ZSgpKQotICAg
ICAgICAgICAgcmVzdWx0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgKm91dF90aW1lc3RhbXAp
OwotICAgICAgICBpZiAob3V0X3ZhbHVlcy5oYXNWYWx1ZSgpKQotICAgICAgICAgICAgcmVzdWx0
LT5zZXRPYmplY3QoInZhbHVlcyJfcywgKm91dF92YWx1ZXMpOwotICAgICAgICBpZiAob3V0X3Bh
eWxvYWQuaGFzVmFsdWUoKSkKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoInBheWxvYWQi
X3MsICpvdXRfcGF5bG9hZCk7Ci0gICAgICAgIGlmIChvdXRfZGF0YWJhc2VJZC5oYXNWYWx1ZSgp
KQotICAgICAgICAgICAgcmVzdWx0LT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCAqb3V0X2Rh
dGFiYXNlSWQpOwotICAgICAgICBpZiAob3V0X3NxbEVycm9yKQotICAgICAgICAgICAgcmVzdWx0
LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBvdXRfc3FsRXJyb3IpOwotICAgICAgICBpZiAob3V0
X3NjcmVlbkNvbG9yLmhhc1ZhbHVlKCkpCi0gICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZygi
c2NyZWVuQ29sb3IiX3MsICpvdXRfc2NyZWVuQ29sb3IpOwotICAgICAgICBpZiAob3V0X2FsdGVy
bmF0ZUNvbG9ycykKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9y
cyJfcywgb3V0X2FsdGVybmF0ZUNvbG9ycyk7Ci0gICAgICAgIGlmIChvdXRfcHJpbnRDb2xvci5o
YXNWYWx1ZSgpKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3Ms
ICpvdXRfcHJpbnRDb2xvcik7Ci0gICAgfQotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0gICAg
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUo
cmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+
cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1v
dmUoZXJyb3IpKTsKLX0KLQotRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1
dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2s6OkV4ZWN1dGVTUUxBc3luY09w
dGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2soUmVmPEJhY2tlbmREaXNwYXRjaGVyPiYmIGJhY2tl
bmREaXNwYXRjaGVyLCBpbnQgaWQpIDogQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZShX
VEZNb3ZlKGJhY2tlbmREaXNwYXRjaGVyKSwgaWQpIHsgfQotCi12b2lkIERhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0Nh
bGxiYWNrOjpzZW5kU3VjY2VzcyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYmIGNvbHVt
bk5hbWVzLCBPcHRpb25hbDxTdHJpbmc+JiBub3RlcywgT3B0aW9uYWw8ZG91YmxlPiYgdGltZXN0
YW1wLCBPcHRpb25hbDxKU09OOjpPYmplY3Q+JiB2YWx1ZXMsIE9wdGlvbmFsPEpTT046OlZhbHVl
PiYgcGF5bG9hZCwgT3B0aW9uYWw8aW50PiYgZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mJiBzcWxFcnJvciwgT3B0aW9uYWw8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IHNjcmVlbkNvbG9yLCBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4mJiBhbHRlcm5hdGVDb2xv
cnMsIE9wdGlvbmFsPERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9y
PiBwcmludENvbG9yKQotewotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBpZiAoY29sdW1uTmFtZXMpCi0gICAgICAgIGpzb25N
ZXNzYWdlLT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIGNvbHVtbk5hbWVzKTsKLSAgICBpZiAo
bm90ZXMuaGFzVmFsdWUoKSkKLSAgICAgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibm90ZXMi
X3MsICpub3Rlcyk7Ci0gICAgaWYgKHRpbWVzdGFtcC5oYXNWYWx1ZSgpKQotICAgICAgICBqc29u
TWVzc2FnZS0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICp0aW1lc3RhbXApOwotICAgIGlmICh2
YWx1ZXMuaGFzVmFsdWUoKSkKLSAgICAgICAganNvbk1lc3NhZ2UtPnNldE9iamVjdCgidmFsdWVz
Il9zLCAqdmFsdWVzKTsKLSAgICBpZiAocGF5bG9hZC5oYXNWYWx1ZSgpKQotICAgICAgICBqc29u
TWVzc2FnZS0+c2V0VmFsdWUoInBheWxvYWQiX3MsICpwYXlsb2FkKTsKLSAgICBpZiAoZGF0YWJh
c2VJZC5oYXNWYWx1ZSgpKQotICAgICAgICBqc29uTWVzc2FnZS0+c2V0SW50ZWdlcigiZGF0YWJh
c2VJZCJfcywgKmRhdGFiYXNlSWQpOwotICAgIGlmIChzcWxFcnJvcikKLSAgICAgICAganNvbk1l
c3NhZ2UtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIHNxbEVycm9yKTsKLSAgICBpZiAoc2NyZWVu
Q29sb3IuaGFzVmFsdWUoKSkKLSAgICAgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygic2NyZWVu
Q29sb3IiX3MsICpzY3JlZW5Db2xvcik7Ci0gICAgaWYgKGFsdGVybmF0ZUNvbG9ycykKLSAgICAg
ICAganNvbk1lc3NhZ2UtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIGFsdGVybmF0ZUNv
bG9ycyk7Ci0gICAgaWYgKHByaW50Q29sb3IuaGFzVmFsdWUoKSkKLSAgICAgICAganNvbk1lc3Nh
Z2UtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgKnByaW50Q29sb3IpOwotICAgIENhbGxiYWNr
QmFzZTo6c2VuZFN1Y2Nlc3MoV1RGTW92ZShqc29uTWVzc2FnZSkpOwotfQotCi12b2lkIERhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVz
KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpCi17Ci0g
ICAgaW50IGluX2RhdGFiYXNlSWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRJbnRlZ2VyKHBh
cmFtZXRlcnMuZ2V0KCksICJkYXRhYmFzZUlkIl9zLCBudWxscHRyKTsKLSAgICBTdHJpbmcgaW5f
cXVlcnkgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwg
InF1ZXJ5Il9zLCBudWxscHRyKTsKLSAgICBpZiAobV9iYWNrZW5kRGlzcGF0Y2hlci0+aGFzUHJv
dG9jb2xFcnJvcnMoKSkgewotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90
b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCAiU29tZSBhcmd1bWVu
dHMgb2YgbWV0aG9kICdEYXRhYmFzZS5leGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVl
cycgY2FuJ3QgYmUgcHJvY2Vzc2VkIl9zKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotI2lm
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotICAgIGlmIChtX2FsdGVy
bmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5leGVjdXRl
U1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhyZXF1ZXN0SWQsIGluX2RhdGFiYXNlSWQsIGlu
X3F1ZXJ5KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAgUmVmPERhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVy
blZhbHVlc0NhbGxiYWNrPiBjYWxsYmFjayA9IGFkb3B0UmVmKCpuZXcgRGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2Fs
bGJhY2sobV9iYWNrZW5kRGlzcGF0Y2hlci5jb3B5UmVmKCksIHJlcXVlc3RJZCkpOwotICAgIG1f
YWdlbnQtPmV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGluX2RhdGFiYXNlSWQs
IGluX3F1ZXJ5LCBjYWxsYmFjay5jb3B5UmVmKCkpOwotCi19Ci0KLXZvaWQgRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTFN5bmMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09O
OjpPYmplY3Q+JiYgcGFyYW1ldGVycykKLXsKLSAgICBpbnQgaW5fZGF0YWJhc2VJZCA9IG1fYmFj
a2VuZERpc3BhdGNoZXItPmdldEludGVnZXIocGFyYW1ldGVycy5nZXQoKSwgImRhdGFiYXNlSWQi
X3MsIG51bGxwdHIpOwotICAgIFN0cmluZyBpbl9xdWVyeSA9IG1fYmFja2VuZERpc3BhdGNoZXIt
PmdldFN0cmluZyhwYXJhbWV0ZXJzLmdldCgpLCAicXVlcnkiX3MsIG51bGxwdHIpOwotICAgIGlm
IChtX2JhY2tlbmREaXNwYXRjaGVyLT5oYXNQcm90b2NvbEVycm9ycygpKSB7Ci0gICAgICAgIG1f
YmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6
OkludmFsaWRQYXJhbXMsICJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJ0RhdGFiYXNlLmV4ZWN1
dGVTUUxTeW5jJyBjYW4ndCBiZSBwcm9jZXNzZWQiX3MpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0gICAgaWYg
KG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXIt
PmV4ZWN1dGVTUUxTeW5jKHJlcXVlc3RJZCwgaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnkpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAg
ICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAg
IFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IG91dF9jb2x1bW5OYW1lczsKLSAgICBTdHJp
bmcgb3V0X25vdGVzOwotICAgIGRvdWJsZSBvdXRfdGltZXN0YW1wOwotICAgIEpTT046Ok9iamVj
dCBvdXRfdmFsdWVzOwotICAgIEpTT046OlZhbHVlIG91dF9wYXlsb2FkOwotICAgIGludCBvdXRf
ZGF0YWJhc2VJZDsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVy
cm9yPiBvdXRfc3FsRXJyb3I7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFi
YXNlOjpDb2xvckxpc3Q+IG91dF9hbHRlcm5hdGVDb2xvcnM7Ci0gICAgSW5zcGVjdG9yOjpQcm90
b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgb3V0X3NjcmVlbkNvbG9yOwotICAgIERhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yIG91dF9wcmludENvbG9yOwot
ICAgIG1fYWdlbnQtPmV4ZWN1dGVTUUxTeW5jKGVycm9yLCBpbl9kYXRhYmFzZUlkLCBpbl9xdWVy
eSwgb3V0X2NvbHVtbk5hbWVzLCAmb3V0X25vdGVzLCAmb3V0X3RpbWVzdGFtcCwgb3V0X3ZhbHVl
cywgJm91dF9wYXlsb2FkLCAmb3V0X2RhdGFiYXNlSWQsIG91dF9zcWxFcnJvciwgb3V0X2FsdGVy
bmF0ZUNvbG9ycywgJm91dF9zY3JlZW5Db2xvciwgJm91dF9wcmludENvbG9yKTsKLQotICAgIGlm
ICghZXJyb3IubGVuZ3RoKCkpIHsKLSAgICAgICAgcmVzdWx0LT5zZXRBcnJheSgiY29sdW1uTmFt
ZXMiX3MsIG91dF9jb2x1bW5OYW1lcyk7Ci0gICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJub3Rl
cyJfcywgb3V0X25vdGVzKTsKLSAgICAgICAgcmVzdWx0LT5zZXREb3VibGUoInRpbWVzdGFtcCJf
cywgb3V0X3RpbWVzdGFtcCk7Ci0gICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3Ms
IG91dF92YWx1ZXMpOwotICAgICAgICByZXN1bHQtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBvdXRf
cGF5bG9hZCk7Ci0gICAgICAgIHJlc3VsdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgb3V0
X2RhdGFiYXNlSWQpOwotICAgICAgICByZXN1bHQtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIG91
dF9zcWxFcnJvcik7Ci0gICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJf
cywgb3V0X2FsdGVybmF0ZUNvbG9ycyk7Ci0gICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJzY3Jl
ZW5Db2xvciJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25z
dGFudFZhbHVlKG91dF9zY3JlZW5Db2xvcikpOwotICAgICAgICByZXN1bHQtPnNldFN0cmluZygi
cHJpbnRDb2xvciJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1D
b25zdGFudFZhbHVlKG91dF9wcmludENvbG9yKSk7Ci0gICAgfQotICAgIGlmICghZXJyb3IubGVu
Z3RoKCkpCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0
SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVy
RXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKLX0KLQotRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXI6OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrOjpFeGVjdXRlU1FMQXN5bmNDYWxsYmFjayhS
ZWY8QmFja2VuZERpc3BhdGNoZXI+JiYgYmFja2VuZERpc3BhdGNoZXIsIGludCBpZCkgOiBCYWNr
ZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlKFdURk1vdmUoYmFja2VuZERpc3BhdGNoZXIpLCBp
ZCkgeyB9Ci0KLXZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVT
UUxBc3luY0NhbGxiYWNrOjpzZW5kU3VjY2VzcyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+
PiYmIGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBK
U09OOjpPYmplY3QgdmFsdWVzLCBKU09OOjpWYWx1ZSBwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mJiBzcWxFcnJvciwg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3Is
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYmIGFsdGVy
bmF0ZUNvbG9ycywgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3Ig
cHJpbnRDb2xvcikKLXsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldEFycmF5KCJjb2x1bW5OYW1l
cyJfcywgY29sdW1uTmFtZXMpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm5vdGVzIl9z
LCBub3Rlcyk7Ci0gICAganNvbk1lc3NhZ2UtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCB0aW1l
c3RhbXApOwotICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoInZhbHVlcyJfcywgdmFsdWVzKTsK
LSAgICBqc29uTWVzc2FnZS0+c2V0VmFsdWUoInBheWxvYWQiX3MsIHBheWxvYWQpOwotICAgIGpz
b25NZXNzYWdlLT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCBkYXRhYmFzZUlkKTsKLSAgICBq
c29uTWVzc2FnZS0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgc3FsRXJyb3IpOwotICAgIGpzb25N
ZXNzYWdlLT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpU
ZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoc2NyZWVuQ29sb3IpKTsKLSAgICBqc29u
TWVzc2FnZS0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgYWx0ZXJuYXRlQ29sb3JzKTsK
LSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCBJbnNwZWN0b3I6OlBy
b3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUocHJpbnRDb2xvcikpOwot
ICAgIENhbGxiYWNrQmFzZTo6c2VuZFN1Y2Nlc3MoV1RGTW92ZShqc29uTWVzc2FnZSkpOwotfQot
Ci12b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxBc3luYyhsb25nIHJl
cXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKQotewotICAgIGludCBp
bl9kYXRhYmFzZUlkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0SW50ZWdlcihwYXJhbWV0ZXJz
LmdldCgpLCAiZGF0YWJhc2VJZCJfcywgbnVsbHB0cik7Ci0gICAgU3RyaW5nIGluX3F1ZXJ5ID0g
bV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksICJxdWVyeSJf
cywgbnVsbHB0cik7Ci0gICAgaWYgKG1fYmFja2VuZERpc3BhdGNoZXItPmhhc1Byb3RvY29sRXJy
b3JzKCkpIHsKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJv
cihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgIlNvbWUgYXJndW1lbnRzIG9mIG1l
dGhvZCAnRGF0YWJhc2UuZXhlY3V0ZVNRTEFzeW5jJyBjYW4ndCBiZSBwcm9jZXNzZWQiX3MpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCi0gICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBt
X2FsdGVybmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVTUUxBc3luYyhyZXF1ZXN0SWQsIGluX2RhdGFi
YXNlSWQsIGluX3F1ZXJ5KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAg
UmVmPERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNDYWxs
YmFjaz4gY2FsbGJhY2sgPSBhZG9wdFJlZigqbmV3IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNDYWxsYmFjayhtX2JhY2tlbmREaXNwYXRjaGVyLmNvcHlS
ZWYoKSwgcmVxdWVzdElkKSk7Ci0gICAgbV9hZ2VudC0+ZXhlY3V0ZVNRTEFzeW5jKGluX2RhdGFi
YXNlSWQsIGluX3F1ZXJ5LCBjYWxsYmFjay5jb3B5UmVmKCkpOwotCi19Ci0KLX0gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3Bw
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9u
Y2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDx3dGYvSlNP
TlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKLQotY2xhc3MgRnJvbnRlbmRSb3V0ZXI7Ci0KLX0gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi19IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLQot
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi1uYW1l
c3BhY2UgUHJvdG9jb2wgewotCi0KLQotLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCi1uYW1lc3Bh
Y2UgRGF0YWJhc2UgewotY2xhc3MgRXJyb3I7Ci1lbnVtIGNsYXNzIFByaW1hcnlDb2xvcnM7Ci19
IC8vIERhdGFiYXNlCi0vLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCi0KLQotLy8gVHlw
ZWRlZnMuCi1uYW1lc3BhY2UgRGF0YWJhc2UgewotLyogVW5pcXVlIGlkZW50aWZpZXIgb2YgRGF0
YWJhc2Ugb2JqZWN0LiAqLwotdHlwZWRlZiBpbnQgRGF0YWJhc2VJZDsKLXR5cGVkZWYgSlNPTjo6
QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gQ29s
b3JMaXN0OwotfSAvLyBEYXRhYmFzZQotLy8gRW5kIG9mIHR5cGVkZWZzLgotCi1uYW1lc3BhY2Ug
VGVzdEhlbHBlcnMgewotCi1TdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpOwot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoVCBlbnVt
VmFsdWUpCi17Ci0gICAgcmV0dXJuIGdldEVudW1Db25zdGFudFZhbHVlKHN0YXRpY19jYXN0PGlu
dD4oZW51bVZhbHVlKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCi0KLW5hbWVz
cGFjZSBEYXRhYmFzZSB7Ci0vKiAgKi8KLWVudW0gY2xhc3MgUHJpbWFyeUNvbG9ycyB7Ci0gICAg
UmVkID0gMCwKLSAgICBHcmVlbiA9IDEsCi0gICAgQmx1ZSA9IDIsCi19OyAvLyBlbnVtIGNsYXNz
IFByaW1hcnlDb2xvcnMKLS8qIERhdGFiYXNlIGVycm9yLiAqLwotY2xhc3MgRXJyb3IgOiBwdWJs
aWMgSlNPTjo6T2JqZWN0QmFzZSB7Ci1wdWJsaWM6Ci0gICAgZW51bSB7Ci0gICAgICAgIE5vRmll
bGRzU2V0ID0gMCwKLSAgICAgICAgTWVzc2FnZVNldCA9IDEgPDwgMCwKLSAgICAgICAgQ29kZVNl
dCA9IDEgPDwgMSwKLSAgICAgICAgQWxsRmllbGRzU2V0ID0gKE1lc3NhZ2VTZXQgfCBDb2RlU2V0
KQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+Ci0gICAgY2xhc3MgQnVpbGRlciB7
Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7Ci0K
LSAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0
YXRlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1
aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRl
cihSZWY8LypFcnJvciovSlNPTjo6T2JqZWN0PiYmIG9iamVjdCkKLSAgICAgICAgICAgIDogbV9y
ZXN1bHQoV1RGTW92ZShvYmplY3QpKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FT
U0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0
YXRlKTsKLSAgICAgICAgfQotICAgICAgICBmcmllbmQgY2xhc3MgRXJyb3I7Ci0gICAgcHVibGlj
OgotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2FnZShjb25z
dCBTdHJpbmcmIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgTWVzc2FnZVNldCksIHByb3BlcnR5X21lc3NhZ2VfYWxyZWFkeV9zZXQpOwotICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibWVzc2FnZSJfcywgdmFsdWUpOwotICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNZXNzYWdlU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IENvZGVTZXQ+JiBzZXRDb2RlKGludCB2YWx1ZSkKLSAgICAgICAg
ewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENvZGVTZXQpLCBwcm9wZXJ0
eV9jb2RlX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2VyKCJj
b2RlIl9zLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvZGVTZXQ+KCk7
Ci0gICAgICAgIH0KLQotICAgICAgICBSZWY8RXJyb3I+IHJlbGVhc2UoKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9p
c19ub3RfcmVhZHkpOwotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEVycm9yKSA9
PSBzaXplb2YoSlNPTjo6T2JqZWN0KSwgY2Fubm90X2Nhc3QpOwotCi0gICAgICAgICAgICBSZWY8
SlNPTjo6T2JqZWN0PiBqc29uUmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKLSAg
ICAgICAgICAgIGF1dG8gcmVzdWx0ID0gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8RXJy
b3I+Kj4oJmpzb25SZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAg
IH0KLSAgICB9OwotCi0gICAgLyoKLSAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6Ci0gICAg
ICogUmVmPEVycm9yPiByZXN1bHQgPSBFcnJvcjo6Y3JlYXRlKCkKLSAgICAgKiAgICAgLnNldE1l
c3NhZ2UoLi4uKQotICAgICAqICAgICAuc2V0Q29kZSguLi4pCi0gICAgICogICAgIC5yZWxlYXNl
KCk7Ci0gICAgICovCi0gICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCi0g
ICAgewotICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKSk7Ci0gICAgfQotfTsKLQotfSAvLyBEYXRhYmFzZQotCi0KLQotbmFtZXNwYWNlIFRl
c3RIZWxwZXJzIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgUHJvdG9jb2xFbnVtVHlwZT4KLU9wdGlv
bmFsPFByb3RvY29sRW51bVR5cGU+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZyhjb25zdCBTdHJp
bmcmKTsKLQotLy8gRW51bXMgaW4gdGhlICdEYXRhYmFzZScgRG9tYWluCi10ZW1wbGF0ZTw+Ci1P
cHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gcGFy
c2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmlt
YXJ5Q29sb3JzPihjb25zdCBTdHJpbmcmKTsKLQotfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMK
LQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0K
LW5hbWVzcGFjZSBXVEYgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhh
c2g7Ci0KLS8vIEhhc2ggZGVjbGFyYXRpb25zIGluIHRoZSAnRGF0YWJhc2UnIERvbWFpbgotdGVt
cGxhdGU8Pgotc3RydWN0IERlZmF1bHRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNl
OjpQcmltYXJ5Q29sb3JzPiB7Ci0gICAgdHlwZWRlZiBJbnRIYXNoPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiBIYXNoOwotfTsKLQotfSAvLyBuYW1lc3BhY2Ug
V1RGCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0KLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1u
YW1lc3BhY2UgUHJvdG9jb2wgewotCi1uYW1lc3BhY2UgVGVzdEhlbHBlcnMgewotCi1zdGF0aWMg
Y29uc3QgY2hhciogY29uc3QgZW51bV9jb25zdGFudF92YWx1ZXNbXSA9IHsKLSAgICAicmVkIiwK
LSAgICAiZ3JlZW4iLAotICAgICJibHVlIiwKLSAgICAiY3lhbiIsCi0gICAgIm1hZ2VudGEiLAot
ICAgICJ5ZWxsb3ciLAotICAgICJibGFjayIsCi19OwotCi1TdHJpbmcgZ2V0RW51bUNvbnN0YW50
VmFsdWUoaW50IGNvZGUpIHsKLSAgICByZXR1cm4gZW51bV9jb25zdGFudF92YWx1ZXNbY29kZV07
Ci19Ci0KLS8vIEVudW1zIGluIHRoZSAnRGF0YWJhc2UnIERvbWFpbgotdGVtcGxhdGU8PgotT3B0
aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IHBhcnNl
RW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFy
eUNvbG9ycz4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKLXsKLSAgICBzdGF0aWMgY29u
c3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7Ci0gICAgICAgIChzaXplX3QpSW5zcGVjdG9y
OjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM6OlJlZCwKLSAgICAgICAgKHNpemVf
dClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9yczo6R3JlZW4sCi0g
ICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xv
cnM6OkJsdWUsCi0gICAgfTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDM7ICsraSkKLSAg
ICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50
VmFsdWVzW2ldXSkKLSAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0
YWJhc2U6OlByaW1hcnlDb2xvcnMpY29uc3RhbnRWYWx1ZXNbaV07Ci0KLSAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwotfQotCi0KLX0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCi0KLQotCi19IC8v
IG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWlu
UHRyLmg+Ci0KLUBwcm90b2NvbCBUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI7Ci0K
LW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLWNsYXNzIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXIgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIE9i
akNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbERhdGFi
YXNlRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQotICAg
IHZvaWQgZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHJlcXVlc3RJZCwg
aW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpIGZpbmFsOwotICAgIHZv
aWQgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0SWQsIGlu
dCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KSBmaW5hbDsKLSAgICB2b2lk
IGV4ZWN1dGVTUUxTeW5jKGxvbmcgcmVxdWVzdElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3Qg
U3RyaW5nJiBpbl9xdWVyeSkgZmluYWw7Ci0gICAgdm9pZCBleGVjdXRlU1FMQXN5bmMobG9uZyBy
ZXF1ZXN0SWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KSBmaW5h
bDsKLXByaXZhdGU6Ci0gICAgUmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWlu
SGFuZGxlcj4+IG1fZGVsZWdhdGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQot
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25m
aWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5j
bHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotCi1uYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKLQotdm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
cjo6ZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHJlcXVlc3RJZCwgaW50
IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpCi17Ci0gICAgaWYgKCFbbV9k
ZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGV4ZWN1dGVTUUxTeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXNXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6ZGF0YWJhc2VJ
ZDpxdWVyeTopXSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2Nv
bEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0Rh
dGFiYXNlLmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMnIHdhcyBub3QgZm91bmQi
X3MpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJp
bmcgKmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29s
RXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsK
LSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICB9
OwotCi0gICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKipj
b2x1bW5OYW1lcywgTlNTdHJpbmcgKipub3RlcywgZG91YmxlICp0aW1lc3RhbXAsIFJXSVByb3Rv
Y29sSlNPTk9iamVjdCAqKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqcGF5bG9hZCwg
aW50ICpkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqc3FsRXJyb3IsIFRl
c3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxO
U1N0cmluZz4qLyAqKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRl
U1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvciAqcHJpbnRDb2xvcikgewotICAg
ICAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHRPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIo
Y29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKG5vdGVzLCBAIm5vdGVzIik7Ci0gICAgICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUih2YWx1ZXMsIEAidmFsdWVzIik7
Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihwYXls
b2FkLCBAInBheWxvYWQiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9O
QUxfUEFSQU1FVEVSKHNxbEVycm9yLCBAInNxbEVycm9yIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihhbHRlcm5hdGVDb2xvcnMsIEAiYWx0ZXJu
YXRlQ29sb3JzIik7Ci0gICAgICAgIGlmIChjb2x1bW5OYW1lcykKLSAgICAgICAgICAgIHJlc3Vs
dE9iamVjdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB0b0pTT05TdHJpbmdBcnJheSgqY29s
dW1uTmFtZXMpKTsKLSAgICAgICAgaWYgKG5vdGVzKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0
LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCAqbm90ZXMpOwotICAgICAgICBpZiAodGltZXN0YW1wKQot
ICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgKnRpbWVz
dGFtcCk7Ci0gICAgICAgIGlmICh2YWx1ZXMpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNl
dE9iamVjdCgidmFsdWVzIl9zLCBbKnZhbHVlcyB0b0pTT05PYmplY3RdKTsKLSAgICAgICAgaWYg
KHBheWxvYWQpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFZhbHVlKCJwYXlsb2FkIl9z
LCBbKnBheWxvYWQgdG9KU09OT2JqZWN0XSk7Ci0gICAgICAgIGlmIChkYXRhYmFzZUlkKQotICAg
ICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCAqZGF0YWJh
c2VJZCk7Ci0gICAgICAgIGlmIChzcWxFcnJvcikKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+
c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgWypzcWxFcnJvciB0b0pTT05PYmplY3RdKTsKLSAgICAg
ICAgaWYgKHNjcmVlbkNvbG9yKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmco
InNjcmVlbkNvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKCpzY3JlZW5Db2xvcikpOwotICAgICAg
ICBpZiAoYWx0ZXJuYXRlQ29sb3JzKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJh
eSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCB0b0pTT05TdHJpbmdBcnJheSgqYWx0ZXJuYXRlQ29sb3Jz
KSk7Ci0gICAgICAgIGlmIChwcmludENvbG9yKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5z
ZXRTdHJpbmcoInByaW50Q29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcoKnByaW50Q29sb3IpKTsK
LSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RG
TW92ZShyZXN1bHRPYmplY3QpLCBmYWxzZSk7Ci0gICAgfTsKLQotICAgIGludCBvX2luX2RhdGFi
YXNlSWQgPSBpbl9kYXRhYmFzZUlkOwotICAgIE5TU3RyaW5nICpvX2luX3F1ZXJ5ID0gaW5fcXVl
cnk7Ci0KLSAgICBbbV9kZWxlZ2F0ZSBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVz
V2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0Nh
bGxiYWNrIGRhdGFiYXNlSWQ6b19pbl9kYXRhYmFzZUlkIHF1ZXJ5Om9faW5fcXVlcnldOwotfQot
Ci12b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FM
QXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHJlcXVlc3RJZCwgaW50IGluX2RhdGFiYXNl
SWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpCi17Ci0gICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNw
b25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFs
dWVzV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOmRhdGFiYXNlSWQ6cXVlcnk6KV0p
IHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1
ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS5leGVj
dXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcycgd2FzIG5vdCBmb3VuZCJfcyk7Ci0gICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3Ip
IHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1
ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwotICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgIH07Ci0KLSAgICBp
ZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmNvbHVtbk5hbWVz
LCBOU1N0cmluZyAqKm5vdGVzLCBkb3VibGUgKnRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2Jq
ZWN0ICoqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipwYXlsb2FkLCBpbnQgKmRhdGFi
YXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipzcWxFcnJvciwgVGVzdFByb3RvY29s
RGF0YWJhc2VQcmltYXJ5Q29sb3JzICpzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiov
ICoqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09w
dGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvciAqcHJpbnRDb2xvcikgewotICAgICAgICBSZWY8
SlNPTjo6T2JqZWN0PiByZXN1bHRPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAg
ICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoY29sdW1uTmFt
ZXMsIEAiY29sdW1uTmFtZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BU
SU9OQUxfUEFSQU1FVEVSKG5vdGVzLCBAIm5vdGVzIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUih2YWx1ZXMsIEAidmFsdWVzIik7Ci0gICAgICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihwYXlsb2FkLCBAInBh
eWxvYWQiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1F
VEVSKHNxbEVycm9yLCBAInNxbEVycm9yIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
QkFEX09QVElPTkFMX1BBUkFNRVRFUihhbHRlcm5hdGVDb2xvcnMsIEAiYWx0ZXJuYXRlQ29sb3Jz
Iik7Ci0gICAgICAgIGlmIChjb2x1bW5OYW1lcykKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+
c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB0b0pTT05TdHJpbmdBcnJheSgqY29sdW1uTmFtZXMp
KTsKLSAgICAgICAgaWYgKG5vdGVzKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJp
bmcoIm5vdGVzIl9zLCAqbm90ZXMpOwotICAgICAgICBpZiAodGltZXN0YW1wKQotICAgICAgICAg
ICAgcmVzdWx0T2JqZWN0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgKnRpbWVzdGFtcCk7Ci0g
ICAgICAgIGlmICh2YWx1ZXMpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdCgi
dmFsdWVzIl9zLCBbKnZhbHVlcyB0b0pTT05PYmplY3RdKTsKLSAgICAgICAgaWYgKHBheWxvYWQp
Ci0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBbKnBheWxv
YWQgdG9KU09OT2JqZWN0XSk7Ci0gICAgICAgIGlmIChkYXRhYmFzZUlkKQotICAgICAgICAgICAg
cmVzdWx0T2JqZWN0LT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCAqZGF0YWJhc2VJZCk7Ci0g
ICAgICAgIGlmIChzcWxFcnJvcikKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0
KCJzcWxFcnJvciJfcywgWypzcWxFcnJvciB0b0pTT05PYmplY3RdKTsKLSAgICAgICAgaWYgKHNj
cmVlbkNvbG9yKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNv
bG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKCpzY3JlZW5Db2xvcikpOwotICAgICAgICBpZiAoYWx0
ZXJuYXRlQ29sb3JzKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJu
YXRlQ29sb3JzIl9zLCB0b0pTT05TdHJpbmdBcnJheSgqYWx0ZXJuYXRlQ29sb3JzKSk7Ci0gICAg
ICAgIGlmIChwcmludENvbG9yKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmco
InByaW50Q29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcoKnByaW50Q29sb3IpKTsKLSAgICAgICAg
YmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1
bHRPYmplY3QpLCBmYWxzZSk7Ci0gICAgfTsKLQotICAgIGludCBvX2luX2RhdGFiYXNlSWQgPSBp
bl9kYXRhYmFzZUlkOwotICAgIE5TU3RyaW5nICpvX2luX3F1ZXJ5ID0gaW5fcXVlcnk7Ci0KLSAg
ICBbbV9kZWxlZ2F0ZSBleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1dpdGhFcnJv
ckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjayBk
YXRhYmFzZUlkOm9faW5fZGF0YWJhc2VJZCBxdWVyeTpvX2luX3F1ZXJ5XTsKLX0KLQotdm9pZCBP
YmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTFN5bmMobG9u
ZyByZXF1ZXN0SWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KQot
ewotICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihleGVj
dXRlU1FMU3luY1dpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazpkYXRhYmFzZUlkOnF1
ZXJ5OildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJy
b3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRGF0YWJh
c2UuZXhlY3V0ZVNRTFN5bmMnIHdhcyBub3QgZm91bmQiX3MpOwotICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAgICAgIGJh
Y2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5k
RGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICB9OwotCi0gICAgaWQgc3VjY2Vzc0NhbGxi
YWNrID0gXihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqbm90
ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqdmFsdWVzLCBSV0lQ
cm90b2NvbEpTT05PYmplY3QgKnBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xE
YXRhYmFzZUVycm9yICpzcWxFcnJvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICphbHRlcm5hdGVD
b2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyBzY3JlZW5Db2xvciwgVGVz
dFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3IgcHJpbnRDb2xvcikgewot
ICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHRPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihj
b2x1bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9S
X1JFUVVJUkVEX1BBUkFNRVRFUihub3RlcywgQCJub3RlcyIpOwotICAgICAgICBUSFJPV19FWENF
UFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUih2YWx1ZXMsIEAidmFsdWVzIik7Ci0gICAgICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHBheWxvYWQsIEAicGF5bG9h
ZCIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihzcWxF
cnJvciwgQCJzcWxFcnJvciIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVE
X1BBUkFNRVRFUihhbHRlcm5hdGVDb2xvcnMsIEAiYWx0ZXJuYXRlQ29sb3JzIik7Ci0gICAgICAg
IHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB0b0pTT05TdHJpbmdBcnJh
eShjb2x1bW5OYW1lcykpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygibm90ZXMi
X3MsIG5vdGVzKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXREb3VibGUoInRpbWVzdGFtcCJf
cywgdGltZXN0YW1wKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInZhbHVlcyJf
cywgW3ZhbHVlcyB0b0pTT05PYmplY3RdKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRWYWx1
ZSgicGF5bG9hZCJfcywgW3BheWxvYWQgdG9KU09OT2JqZWN0XSk7Ci0gICAgICAgIHJlc3VsdE9i
amVjdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgZGF0YWJhc2VJZCk7Ci0gICAgICAgIHJl
c3VsdE9iamVjdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgW3NxbEVycm9yIHRvSlNPTk9iamVj
dF0pOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3Ms
IHRvSlNPTlN0cmluZ0FycmF5KGFsdGVybmF0ZUNvbG9ycykpOwotICAgICAgICByZXN1bHRPYmpl
Y3QtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcoc2NyZWVuQ29s
b3IpKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsIHRv
UHJvdG9jb2xTdHJpbmcocHJpbnRDb2xvcikpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigp
LT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdE9iamVjdCksIGZhbHNlKTsK
LSAgICB9OwotCi0gICAgaW50IG9faW5fZGF0YWJhc2VJZCA9IGluX2RhdGFiYXNlSWQ7Ci0gICAg
TlNTdHJpbmcgKm9faW5fcXVlcnkgPSBpbl9xdWVyeTsKLQotICAgIFttX2RlbGVnYXRlIGV4ZWN1
dGVTUUxTeW5jV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6
c3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNlSWQ6b19pbl9kYXRhYmFzZUlkIHF1ZXJ5Om9faW5fcXVl
cnldOwotfQotCi12b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpl
eGVjdXRlU1FMQXN5bmMobG9uZyByZXF1ZXN0SWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBT
dHJpbmcmIGluX3F1ZXJ5KQotewotICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVj
dG9yOkBzZWxlY3RvcihleGVjdXRlU1FMQXN5bmNXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2Fs
bGJhY2s6ZGF0YWJhc2VJZDpxdWVyeTopXSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigp
LT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhv
ZE5vdEZvdW5kLCAiJ0RhdGFiYXNlLmV4ZWN1dGVTUUxBc3luYycgd2FzIG5vdCBmb3VuZCJfcyk7
Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAq
ZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJv
cihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwotICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgIH07Ci0K
LSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqY29sdW1u
TmFtZXMsIE5TU3RyaW5nICpub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09O
T2JqZWN0ICp2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5bG9hZCwgaW50IGRhdGFi
YXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xE
YXRhYmFzZVByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAq
YWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50
Q29sb3IgcHJpbnRDb2xvcikgewotICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHRPYmpl
Y3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9S
X1JFUVVJUkVEX1BBUkFNRVRFUihjb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOwotICAgICAg
ICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihub3RlcywgQCJub3RlcyIp
OwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUih2YWx1ZXMs
IEAidmFsdWVzIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1F
VEVSKHBheWxvYWQsIEAicGF5bG9hZCIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JF
UVVJUkVEX1BBUkFNRVRFUihzcWxFcnJvciwgQCJzcWxFcnJvciIpOwotICAgICAgICBUSFJPV19F
WENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihhbHRlcm5hdGVDb2xvcnMsIEAiYWx0ZXJu
YXRlQ29sb3JzIik7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVz
Il9zLCB0b0pTT05TdHJpbmdBcnJheShjb2x1bW5OYW1lcykpOwotICAgICAgICByZXN1bHRPYmpl
Y3QtPnNldFN0cmluZygibm90ZXMiX3MsIG5vdGVzKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5z
ZXREb3VibGUoInRpbWVzdGFtcCJfcywgdGltZXN0YW1wKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0
LT5zZXRPYmplY3QoInZhbHVlcyJfcywgW3ZhbHVlcyB0b0pTT05PYmplY3RdKTsKLSAgICAgICAg
cmVzdWx0T2JqZWN0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgW3BheWxvYWQgdG9KU09OT2JqZWN0
XSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgZGF0
YWJhc2VJZCk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywg
W3NxbEVycm9yIHRvSlNPTk9iamVjdF0pOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmlu
Zygic2NyZWVuQ29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcoc2NyZWVuQ29sb3IpKTsKLSAgICAg
ICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCB0b0pTT05TdHJp
bmdBcnJheShhbHRlcm5hdGVDb2xvcnMpKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJp
bmcoInByaW50Q29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcocHJpbnRDb2xvcikpOwotICAgICAg
ICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJl
c3VsdE9iamVjdCksIGZhbHNlKTsKLSAgICB9OwotCi0gICAgaW50IG9faW5fZGF0YWJhc2VJZCA9
IGluX2RhdGFiYXNlSWQ7Ci0gICAgTlNTdHJpbmcgKm9faW5fcXVlcnkgPSBpbl9xdWVyeTsKLQot
ICAgIFttX2RlbGVnYXRlIGV4ZWN1dGVTUUxBc3luY1dpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2Fs
bGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjayBkYXRhYmFzZUlkOm9faW5fZGF0
YWJhc2VJZCBxdWVyeTpvX2luX3F1ZXJ5XTsKLX0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLQot
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8V2Vi
SW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgi
ZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2Jq
ZWN0Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluLCBzZXR0ZXI9c2V0RGF0YWJhc2VIYW5k
bGVyOikgaWQ8VGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyPiBkYXRhYmFzZUhhbmRs
ZXI7Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgK
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQg
IlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50
ZXJuYWwuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotI2lt
cG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KLSNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2lt
cG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJz
Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMu
aD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24KLXsKLSAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xs
ZXIqIF9jb250cm9sbGVyOwotICAgIGlkPFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxl
cj4gX2RhdGFiYXNlSGFuZGxlcjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJv
bGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCi17Ci0gICAg
c2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7
Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIpOwotICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsK
LSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgW19kYXRhYmFz
ZUhhbmRsZXIgcmVsZWFzZV07Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi0tICh2b2lkKXNl
dERhdGFiYXNlSGFuZGxlcjooaWQ8VGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyPilo
YW5kbGVyCi17Ci0gICAgaWYgKGhhbmRsZXIgPT0gX2RhdGFiYXNlSGFuZGxlcikKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgW19kYXRhYmFzZUhhbmRsZXIgcmVsZWFzZV07Ci0gICAgX2RhdGFiYXNl
SGFuZGxlciA9IFtoYW5kbGVyIHJldGFpbl07Ci0KLSAgICBhdXRvIGFsdGVybmF0ZURpc3BhdGNo
ZXIgPSBtYWtlVW5pcXVlPE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiho
YW5kbGVyKTsKLSAgICBhdXRvIGFsdGVybmF0ZUFnZW50ID0gbWFrZVVuaXF1ZTxBbHRlcm5hdGVE
aXNwYXRjaGFibGVBZ2VudDxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyLCBBbHRlcm5hdGVEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVyPj4oIkRhdGFiYXNlIl9zLCAqX2NvbnRyb2xsZXIsIFdURk1v
dmUoYWx0ZXJuYXRlRGlzcGF0Y2hlcikpOwotICAgIF9jb250cm9sbGVyLT5hcHBlbmRFeHRyYUFn
ZW50KFdURk1vdmUoYWx0ZXJuYXRlQWdlbnQpKTsKLX0KLQotLSAoaWQ8VGVzdFByb3RvY29sRGF0
YWJhc2VEb21haW5IYW5kbGVyPilkYXRhYmFzZUhhbmRsZXIKLXsKLSAgICByZXR1cm4gX2RhdGFi
YXNlSGFuZGxlcjsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29u
ZmlndXJhdGlvbi5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRj
aGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgt
YXN5bmMtYXR0cmlidXRlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgot
Ci11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sRXZlbnREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0
dHJpYnV0ZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotCi0jaW1wb3J0IDxXZWJJbnNwZWN0
b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+Ci0KLQotQGNsYXNzIFRlc3RQcm90b2NvbERhdGFi
YXNlRXJyb3I7Ci0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbFBsYXRm
b3JtKSB7Ci0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1BbGwsCi0gICAgVGVzdFByb3RvY29sUGxh
dGZvcm1HZW5lcmljLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TLAotICAgIFRlc3RQcm90
b2NvbFBsYXRmb3JtTWFjT1MsCi19OwotCi0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRl
c3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycykgewotICAgIFRlc3RQcm90b2NvbERhdGFi
YXNlUHJpbWFyeUNvbG9yc1JlZCwKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xv
cnNHcmVlbiwKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNCbHVlLAotfTsK
LQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRl
U1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvcikgewotICAgIFRlc3RQcm90b2Nv
bERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JDeWFu
LAotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZh
bHVlc1ByaW50Q29sb3JNYWdlbnRhLAotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNR
TFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JZZWxsb3csCi0gICAgVGVzdFByb3Rv
Y29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvckJs
YWNrLAotfTsKLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGF0YWJh
c2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3IpIHsKLSAgICBU
ZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJp
bnRDb2xvckN5YW4sCi0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRp
b25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JNYWdlbnRhLAotICAgIFRlc3RQcm90b2NvbERhdGFi
YXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yWWVsbG93LAot
ICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1
ZXNQcmludENvbG9yQmxhY2ssCi19OwotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0
UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvcikgewotICAgIFRlc3RQcm90
b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yQ3lhbiwKLSAgICBUZXN0UHJvdG9j
b2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvck1hZ2VudGEsCi0gICAgVGVzdFByb3Rv
Y29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3JZZWxsb3csCi0gICAgVGVzdFByb3Rv
Y29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3JCbGFjaywKLX07Ci0KLXR5cGVkZWYg
TlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJp
bnRDb2xvcikgewotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRD
b2xvckN5YW4sCi0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENv
bG9yTWFnZW50YSwKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50
Q29sb3JZZWxsb3csCi0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmlu
dENvbG9yQmxhY2ssCi19OwotCi0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0
IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIDogUldJUHJvdG9jb2xK
U09OT2JqZWN0Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8
TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3Rv
Y29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OwotLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlIGNvZGU6KGludCljb2Rl
OwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICpt
ZXNzYWdlOwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgaW50
IGNvZGU7Ci1AZW5kCi0KLUBwcm90b2NvbCBUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRs
ZXIgPE5TT2JqZWN0PgotQG9wdGlvbmFsCi0tICh2b2lkKWV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxS
ZXR1cm5WYWx1ZXNXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVy
cm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0cmluZz4q
LyAqKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqKm5vdGVzLCBkb3VibGUgKnRpbWVzdGFtcCwgUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICoqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipwYXls
b2FkLCBpbnQgKmRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipzcWxFcnJv
ciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzICpzY3JlZW5Db2xvciwgTlNBcnJh
eS8qPE5TU3RyaW5nPiovICoqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yICpwcmludENvbG9yKSlz
dWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDooaW50KWRhdGFiYXNlSWQgcXVlcnk6KE5TU3RyaW5n
ICopcXVlcnk7Ci0tICh2b2lkKWV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzV2l0
aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1
Y2Nlc3NDYWxsYmFjazoodm9pZCheKShOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKipjb2x1bW5OYW1l
cywgTlNTdHJpbmcgKipub3RlcywgZG91YmxlICp0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9i
amVjdCAqKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqcGF5bG9hZCwgaW50ICpkYXRh
YmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqc3FsRXJyb3IsIFRlc3RQcm90b2Nv
bERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4q
LyAqKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNP
cHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3IgKnByaW50Q29sb3IpKXN1Y2Nlc3NDYWxsYmFj
ayBkYXRhYmFzZUlkOihpbnQpZGF0YWJhc2VJZCBxdWVyeTooTlNTdHJpbmcgKilxdWVyeTsKLS0g
KHZvaWQpZXhlY3V0ZVNRTFN5bmNXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAq
ZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKE5TQXJyYXkvKjxO
U1N0cmluZz4qLyAqY29sdW1uTmFtZXMsIE5TU3RyaW5nICpub3RlcywgZG91YmxlIHRpbWVzdGFt
cCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICp2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAq
cGF5bG9hZCwgaW50IGRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKnNxbEVy
cm9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29s
RGF0YWJhc2VQcmltYXJ5Q29sb3JzIHNjcmVlbkNvbG9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVTUUxTeW5jUHJpbnRDb2xvciBwcmludENvbG9yKSlzdWNjZXNzQ2FsbGJhY2sgZGF0YWJh
c2VJZDooaW50KWRhdGFiYXNlSWQgcXVlcnk6KE5TU3RyaW5nICopcXVlcnk7Ci0tICh2b2lkKWV4
ZWN1dGVTUUxBc3luY1dpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikp
ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoTlNBcnJheS8qPE5TU3RyaW5n
PiovICpjb2x1bW5OYW1lcywgTlNTdHJpbmcgKm5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSV0lQ
cm90b2NvbEpTT05PYmplY3QgKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2Fk
LCBpbnQgZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqc3FsRXJyb3IsIFRl
c3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyBzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5T
U3RyaW5nPiovICphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNR
TEFzeW5jUHJpbnRDb2xvciBwcmludENvbG9yKSlzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDoo
aW50KWRhdGFiYXNlSWQgcXVlcnk6KE5TU3RyaW5nICopcXVlcnk7Ci1AZW5kCi0KLQotCi0KLSNp
bXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMu
aD4KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sSW50ZXJuYWwuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNv
bW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJU
ZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVl
cy5oPgotCi0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0
UHJvdG9jb2wuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVy
c2lvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9i
akNFbnVtVHlwZT4KLU9wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNv
bnN0IFN0cmluZyYgdmFsdWUpOwotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVz
dFByb3RvY29sUGxhdGZvcm0gdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2Fz
ZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDoKLSAgICAgICAgcmV0dXJuICJhbGwiX3M7Ci0gICAg
Y2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM6Ci0gICAgICAgIHJldHVybiAiZ2VuZXJp
YyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOgotICAgICAgICByZXR1cm4g
ImlvcyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M6Ci0gICAgICAgIHJl
dHVybiAibWFjb3MiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8
VGVzdFByb3RvY29sUGxhdGZvcm0+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZh
bHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiYWxsIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90
b2NvbFBsYXRmb3JtQWxsOwotICAgIGlmICh2YWx1ZSA9PSAiZ2VuZXJpYyIpCi0gICAgICAgIHJl
dHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM7Ci0gICAgaWYgKHZhbHVlID09ICJpb3Mi
KQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1JT1M7Ci0gICAgaWYgKHZhbHVl
ID09ICJtYWNvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOwot
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29s
U3RyaW5nKFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyB2YWx1ZSkKLXsKLSAgICBz
d2l0Y2godmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9y
c1JlZDoKLSAgICAgICAgcmV0dXJuICJyZWQiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRh
YmFzZVByaW1hcnlDb2xvcnNHcmVlbjoKLSAgICAgICAgcmV0dXJuICJncmVlbiJfczsKLSAgICBj
YXNlIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc0JsdWU6Ci0gICAgICAgIHJldHVy
biAiYmx1ZSJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0
UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnM+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBT
dHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAicmVkIikKLSAgICAgICAgcmV0dXJu
IFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc1JlZDsKLSAgICBpZiAodmFsdWUgPT0g
ImdyZWVuIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9y
c0dyZWVuOwotICAgIGlmICh2YWx1ZSA9PSAiYmx1ZSIpCi0gICAgICAgIHJldHVybiBUZXN0UHJv
dG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNCbHVlOwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
Ci19Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFz
ZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yIHZhbHVlKQotewot
ICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRl
U1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvckN5YW46Ci0gICAgICAgIHJldHVy
biAiY3lhbiJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNP
cHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JNYWdlbnRhOgotICAgICAgICByZXR1cm4gIm1h
Z2VudGEiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0
aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yWWVsbG93OgotICAgICAgICByZXR1cm4gInllbGxv
dyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25h
bFJldHVyblZhbHVlc1ByaW50Q29sb3JCbGFjazoKLSAgICAgICAgcmV0dXJuICJibGFjayJfczsK
LSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xEYXRh
YmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yPiBmcm9tUHJv
dG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gImN5
YW4iKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09w
dGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvckN5YW47Ci0gICAgaWYgKHZhbHVlID09ICJtYWdl
bnRhIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNP
cHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JNYWdlbnRhOwotICAgIGlmICh2YWx1ZSA9PSAi
eWVsbG93IikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5
bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JZZWxsb3c7Ci0gICAgaWYgKHZhbHVlID09
ICJibGFjayIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxT
eW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yQmxhY2s7Ci0gICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKLX0KLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2Nv
bERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yIHZh
bHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJh
c2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JDeWFuOgotICAg
ICAgICByZXR1cm4gImN5YW4iX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvck1hZ2VudGE6Ci0gICAgICAg
IHJldHVybiAibWFnZW50YSJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0
ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yWWVsbG93OgotICAgICAgICBy
ZXR1cm4gInllbGxvdyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNR
TEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yQmxhY2s6Ci0gICAgICAgIHJldHVy
biAiYmxhY2siX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVz
dFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50
Q29sb3I+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlm
ICh2YWx1ZSA9PSAiY3lhbiIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvckN5YW47Ci0gICAgaWYg
KHZhbHVlID09ICJtYWdlbnRhIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNl
RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yTWFnZW50YTsKLSAg
ICBpZiAodmFsdWUgPT0gInllbGxvdyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRh
YmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvclllbGxvdzsK
LSAgICBpZiAodmFsdWUgPT0gImJsYWNrIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERh
dGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yQmxhY2s7
Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29s
U3RyaW5nKFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yIHZhbHVl
KQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VF
eGVjdXRlU1FMU3luY1ByaW50Q29sb3JDeWFuOgotICAgICAgICByZXR1cm4gImN5YW4iX3M7Ci0g
ICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvck1hZ2Vu
dGE6Ci0gICAgICAgIHJldHVybiAibWFnZW50YSJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERh
dGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yWWVsbG93OgotICAgICAgICByZXR1cm4gInll
bGxvdyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmlu
dENvbG9yQmxhY2s6Ci0gICAgICAgIHJldHVybiAiYmxhY2siX3M7Ci0gICAgfQotfQotCi10ZW1w
bGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3lu
Y1ByaW50Q29sb3I+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewot
ICAgIGlmICh2YWx1ZSA9PSAiY3lhbiIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRh
YmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvckN5YW47Ci0gICAgaWYgKHZhbHVlID09ICJtYWdl
bnRhIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQ
cmludENvbG9yTWFnZW50YTsKLSAgICBpZiAodmFsdWUgPT0gInllbGxvdyIpCi0gICAgICAgIHJl
dHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvclllbGxvdzsK
LSAgICBpZiAodmFsdWUgPT0gImJsYWNrIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERh
dGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yQmxhY2s7Ci0gICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKLX0KLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbERh
dGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvciB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFs
dWUpIHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRD
b2xvckN5YW46Ci0gICAgICAgIHJldHVybiAiY3lhbiJfczsKLSAgICBjYXNlIFRlc3RQcm90b2Nv
bERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvck1hZ2VudGE6Ci0gICAgICAgIHJldHVy
biAibWFnZW50YSJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFz
eW5jUHJpbnRDb2xvclllbGxvdzoKLSAgICAgICAgcmV0dXJuICJ5ZWxsb3ciX3M7Ci0gICAgY2Fz
ZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JCbGFjazoKLSAg
ICAgICAgcmV0dXJuICJibGFjayJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBP
cHRpb25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3I+IGZy
b21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9
PSAiY3lhbiIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxB
c3luY1ByaW50Q29sb3JDeWFuOwotICAgIGlmICh2YWx1ZSA9PSAibWFnZW50YSIpCi0gICAgICAg
IHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JNYWdl
bnRhOwotICAgIGlmICh2YWx1ZSA9PSAieWVsbG93IikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90
b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvclllbGxvdzsKLSAgICBpZiAodmFs
dWUgPT0gImJsYWNrIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0
ZVNRTEFzeW5jUHJpbnRDb2xvckJsYWNrOwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRo
LWFzeW5jLWF0dHJpYnV0ZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotCi0jaW1w
b3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIK
LSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0K
LXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zIChEYXRhYmFzZURvbWFpbikKLQotKyAodm9pZClfcGFyc2VEYXRhYmFzZUlk
OihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLSsgKHZvaWQp
X3BhcnNlUHJpbWFyeUNvbG9yczooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlk
KXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZUNvbG9yTGlzdDooTlNBcnJheS8qPE5TU3RyaW5nPiov
ICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotKyAodm9pZClfcGFyc2VFcnJv
cjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQp
cGF5bG9hZDsKLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zIChEYXRhYmFzZURvbWFpbikKLQotKyAodm9pZClfcGFyc2VEYXRhYmFzZUlkOihOU051
bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TTnVtYmVyIGNsYXNzXSk7Ci0gICAgKm91
dFZhbHVlID0gKE5TTnVtYmVyICopcGF5bG9hZDsKLX0KLQotKyAodm9pZClfcGFyc2VQcmltYXJ5
Q29sb3JzOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewot
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TU3RyaW5nIGNsYXNz
XSk7Ci0gICAgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzPiByZXN1
bHQgPSBJbnNwZWN0b3I6OmZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xEYXRhYmFzZVBy
aW1hcnlDb2xvcnM+KHBheWxvYWQpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX0VOVU1f
VkFMVUUocmVzdWx0LCBAIlByaW1hcnlDb2xvcnMiKTsKLSAgICAqb3V0VmFsdWUgPSBAKHJlc3Vs
dC52YWx1ZSgpKTsKLX0KLQotKyAodm9pZClfcGFyc2VDb2xvckxpc3Q6KE5TQXJyYXkvKjxOU1N0
cmluZz4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TQXJyYXkvKjxOU1N0cmluZz4qLyBj
bGFzc10pOwotICAgICpvdXRWYWx1ZSA9IChOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilwYXlsb2Fk
OwotfQotCi0rICh2b2lkKV9wYXJzZUVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoq
KW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7Ci0gICAgKm91dFZh
bHVlID0gW1tUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6
cGF5bG9hZF07Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJp
YnV0ZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNp
bXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9i
amVjdFByaXZhdGUuaD4KLSNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW1wb3J0IDx3dGYv
SlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLUBpbXBsZW1l
bnRhdGlvbiBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yCi0KLS0gKGluc3RhbmNldHlwZSlpbml0
V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxv
YWQKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5p
bDsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtA
Im1lc3NhZ2UiXSwgQCJtZXNzYWdlIik7Ci0gICAgc2VsZi5tZXNzYWdlID0gcGF5bG9hZFtAIm1l
c3NhZ2UiXTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5
bG9hZFtAImNvZGUiXSwgQCJjb2RlIik7Ci0gICAgc2VsZi5jb2RlID0gW3BheWxvYWRbQCJjb2Rl
Il0gaW50ZWdlclZhbHVlXTsKLQotICAgIHJldHVybiBzZWxmOwotfQotLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9iamVjdAot
ewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmplY3QgdG9K
U09OT2JqZWN0XS5nZXQoKV0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgcmV0dXJuIHNl
bGY7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVz
c2FnZSBjb2RlOihpbnQpY29kZQotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQot
ICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9Q
Uk9QRVJUWShtZXNzYWdlLCBAIm1lc3NhZ2UiKTsKLQotICAgIHNlbGYubWVzc2FnZSA9IG1lc3Nh
Z2U7Ci0gICAgc2VsZi5jb2RlID0gY29kZTsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2
b2lkKXNldE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZQotewotICAgIFtzdXBlciBzZXRTdHJp
bmc6bWVzc2FnZSBmb3JLZXk6QCJtZXNzYWdlIl07Ci19Ci0KLS0gKE5TU3RyaW5nICopbWVzc2Fn
ZQotewotICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAibWVzc2FnZSJdOwotfQotCi0t
ICh2b2lkKXNldENvZGU6KGludCljb2RlCi17Ci0gICAgW3N1cGVyIHNldEludGVnZXI6Y29kZSBm
b3JLZXk6QCJjb2RlIl07Ci19Ci0KLS0gKGludCljb2RlCi17Ci0gICAgcmV0dXJuIFtzdXBlciBp
bnRlZ2VyRm9yS2V5OkAiY29kZSJdOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1vcHRpb25h
bC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0
aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0CmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA4NTk0MWVkNTFmMTEyNDRiM2QzNDM3YzgwMDI1MDRmNTMxNDMx
MmU4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVk
L2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uLXJlc3Vs
dAorKysgL2Rldi9udWxsCkBAIC0xLDE2NzQgKzAsMCBAQAotIyMjIEJlZ2luIEZpbGU6IEluc3Bl
Y3RvckJhY2tlbmRDb21tYW5kcy5qcwotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLS8vIERhdGFiYXNlCi1JbnNw
ZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJEYXRhYmFzZSIsIG51bGwpOwotSW5zcGVjdG9y
QmFja2VuZC5yZWdpc3RlckVudW0oIkRhdGFiYXNlLlByaW1hcnlDb2xvcnMiLCB7UmVkOiAicmVk
IiwgR3JlZW46ICJncmVlbiIsIEJsdWU6ICJibHVlIn0pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdp
c3RlckNvbW1hbmQoIkRhdGFiYXNlLmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMiLCBudWxs
LCBbeyJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjog
dHJ1ZX0sIHsibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRy
dWV9LCB7Im5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFsIjog
dHJ1ZX0sIHsibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0
cnVlfSwgeyJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0
cnVlfSwgeyJuYW1lIjogImRhdGFiYXNlSWQiLCAidHlwZSI6ICJudW1iZXIiLCAib3B0aW9uYWwi
OiB0cnVlfSwgeyJuYW1lIjogInNxbEVycm9yIiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFs
IjogdHJ1ZX0sIHsibmFtZSI6ICJzY3JlZW5Db2xvciIsICJ0eXBlIjogInN0cmluZyIsICJvcHRp
b25hbCI6IHRydWV9LCB7Im5hbWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwgInR5cGUiOiAib2JqZWN0
IiwgIm9wdGlvbmFsIjogdHJ1ZX0sIHsibmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3Ry
aW5nIiwgIm9wdGlvbmFsIjogdHJ1ZX1dLCBbImNvbHVtbk5hbWVzIiwgIm5vdGVzIiwgInRpbWVz
dGFtcCIsICJ2YWx1ZXMiLCAicGF5bG9hZCIsICJkYXRhYmFzZUlkIiwgInNxbEVycm9yIiwgInNj
cmVlbkNvbG9yIiwgImFsdGVybmF0ZUNvbG9ycyIsICJwcmludENvbG9yIl0pOwotSW5zcGVjdG9y
QmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIkRhdGFiYXNlLmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1l
dGVycyIsIG51bGwsIFt7Im5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJvYmplY3QifSwg
eyJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIn0sIHsibmFtZSI6ICJ0aW1lc3RhbXAi
LCAidHlwZSI6ICJudW1iZXIifSwgeyJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCJ9
LCB7Im5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogIm9iamVjdCJ9LCB7Im5hbWUiOiAiZGF0YWJh
c2VJZCIsICJ0eXBlIjogIm51bWJlciJ9LCB7Im5hbWUiOiAic3FsRXJyb3IiLCAidHlwZSI6ICJv
YmplY3QifSwgeyJuYW1lIjogInNjcmVlbkNvbG9yIiwgInR5cGUiOiAic3RyaW5nIn0sIHsibmFt
ZSI6ICJhbHRlcm5hdGVDb2xvcnMiLCAidHlwZSI6ICJvYmplY3QifSwgeyJuYW1lIjogInByaW50
Q29sb3IiLCAidHlwZSI6ICJzdHJpbmcifV0sIFsiY29sdW1uTmFtZXMiLCAibm90ZXMiLCAidGlt
ZXN0YW1wIiwgInZhbHVlcyIsICJwYXlsb2FkIiwgImRhdGFiYXNlSWQiLCAic3FsRXJyb3IiLCAi
c2NyZWVuQ29sb3IiLCAiYWx0ZXJuYXRlQ29sb3JzIiwgInByaW50Q29sb3IiXSk7Ci1JbnNwZWN0
b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJEYXRhYmFzZSIsIG51bGwpOwotIyMjIEVuZCBGaWxl
OiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQot
Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0KLSNpbmNsdWRl
ICJUZXN0UHJvdG9jb2xUeXBlcy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
RnJvbnRlbmRSb3V0ZXIuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEFsdGVy
bmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2b2lkIHNldEJhY2tlbmREaXNw
YXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2Vu
ZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9Ci0gICAgQmFja2VuZERpc3BhdGNo
ZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hl
ci5nZXQoKTsgfQotcHJpdmF0ZToKLSAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFj
a2VuZERpc3BhdGNoZXI7Ci19OwotCi0KLWNsYXNzIEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgot
ICAgIHZpcnR1YWwgfkFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoKSB7IH0KLSAg
ICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhsb25nIGNhbGxJZCwg
Y29uc3QgSlNPTjo6QXJyYXkqIGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIGluX25vdGVz
LCBjb25zdCBkb3VibGUqIGluX3RpbWVzdGFtcCwgY29uc3QgSlNPTjo6T2JqZWN0KiBpbl92YWx1
ZXMsIGNvbnN0IEpTT046OlZhbHVlKiBpbl9wYXlsb2FkLCBjb25zdCBpbnQqIGluX2RhdGFiYXNl
SWQsIGNvbnN0IEpTT046Ok9iamVjdCogaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyogaW5fc2Ny
ZWVuQ29sb3IsIGNvbnN0IEpTT046OkFycmF5KiBpbl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0
cmluZyogaW5fcHJpbnRDb2xvcikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlTm9PcHRp
b25hbFBhcmFtZXRlcnMobG9uZyBjYWxsSWQsIGNvbnN0IEpTT046OkFycmF5JiBpbl9jb2x1bW5O
YW1lcywgY29uc3QgU3RyaW5nJiBpbl9ub3RlcywgZG91YmxlIGluX3RpbWVzdGFtcCwgY29uc3Qg
SlNPTjo6T2JqZWN0JiBpbl92YWx1ZXMsIEpTT046OlZhbHVlIGluX3BheWxvYWQsIGludCBpbl9k
YXRhYmFzZUlkLCBjb25zdCBKU09OOjpPYmplY3QmIGluX3NxbEVycm9yLCBjb25zdCBTdHJpbmcm
IGluX3NjcmVlbkNvbG9yLCBjb25zdCBKU09OOjpBcnJheSYgaW5fYWx0ZXJuYXRlQ29sb3JzLCBj
b25zdCBTdHJpbmcmIGluX3ByaW50Q29sb3IpID0gMDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgotCi0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCi0jIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJh
bWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXR5cGVk
ZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCi1jbGFzcyBBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOwot
I2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi1jbGFz
cyBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7Ci1wdWJsaWM6Ci0gICAgLy8gTmFt
ZWQgYWZ0ZXIgcGFyYW1ldGVyICdwcmludENvbG9yJyB3aGlsZSBnZW5lcmF0aW5nIGNvbW1hbmQv
ZXZlbnQgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycy4KLSAgICBlbnVtIGNsYXNzIFByaW50
Q29sb3IgewotICAgICAgICBDeWFuID0gMywKLSAgICAgICAgTWFnZW50YSA9IDQsCi0gICAgICAg
IFllbGxvdyA9IDUsCi0gICAgICAgIEJsYWNrID0gNiwKLSAgICB9OyAvLyBlbnVtIGNsYXNzIFBy
aW50Q29sb3IKLSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhF
cnJvclN0cmluZyYsIGNvbnN0IEpTT046OkFycmF5KiBvcHRfaW5fY29sdW1uTmFtZXMsIGNvbnN0
IFN0cmluZyogb3B0X2luX25vdGVzLCBjb25zdCBkb3VibGUqIG9wdF9pbl90aW1lc3RhbXAsIGNv
bnN0IEpTT046Ok9iamVjdCogb3B0X2luX3ZhbHVlcywgY29uc3QgSlNPTjo6VmFsdWUqIG9wdF9p
bl9wYXlsb2FkLCBjb25zdCBpbnQqIG9wdF9pbl9kYXRhYmFzZUlkLCBjb25zdCBKU09OOjpPYmpl
Y3QqIG9wdF9pbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nKiBvcHRfaW5fc2NyZWVuQ29sb3IsIGNv
bnN0IEpTT046OkFycmF5KiBvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcqIG9w
dF9pbl9wcmludENvbG9yLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYgb3B0X291dF9j
b2x1bW5OYW1lcywgT3B0aW9uYWw8U3RyaW5nPiYgb3B0X291dF9ub3RlcywgT3B0aW9uYWw8ZG91
YmxlPiYgb3B0X291dF90aW1lc3RhbXAsIE9wdGlvbmFsPEpTT046Ok9iamVjdD4mIG9wdF9vdXRf
dmFsdWVzLCBPcHRpb25hbDxKU09OOjpWYWx1ZT4mIG9wdF9vdXRfcGF5bG9hZCwgT3B0aW9uYWw8
aW50PiYgb3B0X291dF9kYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0
YWJhc2U6OkVycm9yPiYgb3B0X291dF9zcWxFcnJvciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0
YWJhc2U6OlByaW1hcnlDb2xvcnMqIG9wdF9vdXRfc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYgb3B0X291dF9hbHRlcm5hdGVDb2xv
cnMsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yKiBvcHRfb3V0
X3ByaW50Q29sb3IpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZU5vT3B0aW9uYWxQYXJh
bWV0ZXJzKEVycm9yU3RyaW5nJiwgY29uc3QgSlNPTjo6QXJyYXkmIGluX2NvbHVtbk5hbWVzLCBj
b25zdCBTdHJpbmcmIGluX25vdGVzLCBkb3VibGUgaW5fdGltZXN0YW1wLCBjb25zdCBKU09OOjpP
YmplY3QmIGluX3ZhbHVlcywgSlNPTjo6VmFsdWUgaW5fcGF5bG9hZCwgaW50IGluX2RhdGFiYXNl
SWQsIGNvbnN0IEpTT046Ok9iamVjdCYgaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgaW5fc2Ny
ZWVuQ29sb3IsIGNvbnN0IEpTT046OkFycmF5JiBpbl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0
cmluZyYgaW5fcHJpbnRDb2xvciwgUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mIG91dF9j
b2x1bW5OYW1lcywgU3RyaW5nKiBvdXRfbm90ZXMsIGRvdWJsZSogb3V0X3RpbWVzdGFtcCwgSlNP
Tjo6T2JqZWN0KiBvdXRfdmFsdWVzLCBKU09OOjpWYWx1ZSogb3V0X3BheWxvYWQsIGludCogb3V0
X2RhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+
JiBvdXRfc3FsRXJyb3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29s
b3JzKiBvdXRfc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFz
ZTo6Q29sb3JMaXN0PiYgb3V0X2FsdGVybmF0ZUNvbG9ycywgRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXI6OlByaW50Q29sb3IqIG91dF9wcmludENvbG9yKSA9IDA7Ci1wcm90ZWN0ZWQ6
Ci0gICAgdmlydHVhbCB+RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKLX07Ci0K
LWNsYXNzIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVu
dGFsQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8RGF0YWJhc2VC
YWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElk
LCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5h
bDsKLXByaXZhdGU6Ci0gICAgdm9pZCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcg
cmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwotICAgIHZvaWQg
ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6
T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQotcHVibGljOgotICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0Y2hlcihBbHRl
cm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1f
YWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KLXByaXZhdGU6Ci0g
ICAgQWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciogbV9hbHRlcm5hdGVEaXNwYXRj
aGVyIHsgbnVsbHB0ciB9OwotI2VuZGlmCi1wcml2YXRlOgotICAgIERhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlciopOwotICAgIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50IHsg
bnVsbHB0ciB9OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6
IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmRE
aXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5k
cy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5o
PgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQot
I2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNlbmRpZgotCi1u
YW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6
On5EYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQotCi1SZWY8RGF0YWJhc2VC
YWNrZW5kRGlzcGF0Y2hlcj4gRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEJhY2tl
bmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIqIGFnZW50KQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIsIGFnZW50KSk7Ci19Ci0KLURhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXI6OkRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3Bh
dGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxl
ciogYWdlbnQpCi0gICAgOiBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlz
cGF0Y2hlcikKLSAgICAsIG1fYWdlbnQoYWdlbnQpCi17Ci0gICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKCJEYXRhYmFzZSJfcywgdGhpcyk7Ci19Ci0K
LXZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQs
IGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCi17Ci0g
ICAgUmVmPERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwotCi0gICAg
UmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVyczsKLSAgICBtZXNzYWdlLT5nZXRPYmplY3Qo
InBhcmFtcyJfcywgcGFyYW1ldGVycyk7Ci0KLSAgICBpZiAobWV0aG9kID09ICJleGVjdXRlQWxs
T3B0aW9uYWxQYXJhbWV0ZXJzIikKLSAgICAgICAgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVy
cyhyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOwotICAgIGVsc2UgaWYgKG1ldGhvZCA9
PSAiZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIikKLSAgICAgICAgZXhlY3V0ZU5vT3B0aW9u
YWxQYXJhbWV0ZXJzKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7Ci0gICAgZWxzZQot
ICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmRE
aXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS4iICsgbWV0aG9kICsgIicgd2Fz
IG5vdCBmb3VuZCIpOwotfQotCi12b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1
dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+JiYgcGFyYW1ldGVycykKLXsKLSAgICBib29sIG9wdF9pbl9jb2x1bW5OYW1lc192YWx1ZUZv
dW5kID0gZmFsc2U7Ci0gICAgUmVmUHRyPEpTT046OkFycmF5PiBvcHRfaW5fY29sdW1uTmFtZXMg
PSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRBcnJheShwYXJhbWV0ZXJzLmdldCgpLCAiY29sdW1u
TmFtZXMiX3MsICZvcHRfaW5fY29sdW1uTmFtZXNfdmFsdWVGb3VuZCk7Ci0gICAgYm9vbCBvcHRf
aW5fbm90ZXNfdmFsdWVGb3VuZCA9IGZhbHNlOwotICAgIFN0cmluZyBvcHRfaW5fbm90ZXMgPSBt
X2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgIm5vdGVzIl9z
LCAmb3B0X2luX25vdGVzX3ZhbHVlRm91bmQpOwotICAgIGJvb2wgb3B0X2luX3RpbWVzdGFtcF92
YWx1ZUZvdW5kID0gZmFsc2U7Ci0gICAgZG91YmxlIG9wdF9pbl90aW1lc3RhbXAgPSBtX2JhY2tl
bmREaXNwYXRjaGVyLT5nZXREb3VibGUocGFyYW1ldGVycy5nZXQoKSwgInRpbWVzdGFtcCJfcywg
Jm9wdF9pbl90aW1lc3RhbXBfdmFsdWVGb3VuZCk7Ci0gICAgYm9vbCBvcHRfaW5fdmFsdWVzX3Zh
bHVlRm91bmQgPSBmYWxzZTsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBvcHRfaW5fdmFsdWVz
ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0T2JqZWN0KHBhcmFtZXRlcnMuZ2V0KCksICJ2YWx1
ZXMiX3MsICZvcHRfaW5fdmFsdWVzX3ZhbHVlRm91bmQpOwotICAgIGJvb2wgb3B0X2luX3BheWxv
YWRfdmFsdWVGb3VuZCA9IGZhbHNlOwotICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gb3B0X2luX3Bh
eWxvYWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRWYWx1ZShwYXJhbWV0ZXJzLmdldCgpLCAi
cGF5bG9hZCJfcywgJm9wdF9pbl9wYXlsb2FkX3ZhbHVlRm91bmQpOwotICAgIGJvb2wgb3B0X2lu
X2RhdGFiYXNlSWRfdmFsdWVGb3VuZCA9IGZhbHNlOwotICAgIGludCBvcHRfaW5fZGF0YWJhc2VJ
ZCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEludGVnZXIocGFyYW1ldGVycy5nZXQoKSwgImRh
dGFiYXNlSWQiX3MsICZvcHRfaW5fZGF0YWJhc2VJZF92YWx1ZUZvdW5kKTsKLSAgICBib29sIG9w
dF9pbl9zcWxFcnJvcl92YWx1ZUZvdW5kID0gZmFsc2U7Ci0gICAgUmVmUHRyPEpTT046Ok9iamVj
dD4gb3B0X2luX3NxbEVycm9yID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0T2JqZWN0KHBhcmFt
ZXRlcnMuZ2V0KCksICJzcWxFcnJvciJfcywgJm9wdF9pbl9zcWxFcnJvcl92YWx1ZUZvdW5kKTsK
LSAgICBib29sIG9wdF9pbl9zY3JlZW5Db2xvcl92YWx1ZUZvdW5kID0gZmFsc2U7Ci0gICAgU3Ry
aW5nIG9wdF9pbl9zY3JlZW5Db2xvciA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhw
YXJhbWV0ZXJzLmdldCgpLCAic2NyZWVuQ29sb3IiX3MsICZvcHRfaW5fc2NyZWVuQ29sb3JfdmFs
dWVGb3VuZCk7Ci0gICAgYm9vbCBvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzX3ZhbHVlRm91bmQgPSBm
YWxzZTsKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IG9wdF9pbl9hbHRlcm5hdGVDb2xvcnMgPSBt
X2JhY2tlbmREaXNwYXRjaGVyLT5nZXRBcnJheShwYXJhbWV0ZXJzLmdldCgpLCAiYWx0ZXJuYXRl
Q29sb3JzIl9zLCAmb3B0X2luX2FsdGVybmF0ZUNvbG9yc192YWx1ZUZvdW5kKTsKLSAgICBib29s
IG9wdF9pbl9wcmludENvbG9yX3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAgICBTdHJpbmcgb3B0X2lu
X3ByaW50Q29sb3IgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5n
ZXQoKSwgInByaW50Q29sb3IiX3MsICZvcHRfaW5fcHJpbnRDb2xvcl92YWx1ZUZvdW5kKTsKLSAg
ICBpZiAobV9iYWNrZW5kRGlzcGF0Y2hlci0+aGFzUHJvdG9jb2xFcnJvcnMoKSkgewotICAgICAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRj
aGVyOjpJbnZhbGlkUGFyYW1zLCAiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICdEYXRhYmFzZS5l
eGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzJyBjYW4ndCBiZSBwcm9jZXNzZWQiX3MpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCi0gICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2Fs
dGVybmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMocmVxdWVzdElk
LCBvcHRfaW5fY29sdW1uTmFtZXNfdmFsdWVGb3VuZCA/IG9wdF9pbl9jb2x1bW5OYW1lcy5nZXQo
KSA6IG51bGxwdHIsIG9wdF9pbl9ub3Rlc192YWx1ZUZvdW5kID8gJm9wdF9pbl9ub3RlcyA6IG51
bGxwdHIsIG9wdF9pbl90aW1lc3RhbXBfdmFsdWVGb3VuZCA/ICZvcHRfaW5fdGltZXN0YW1wIDog
bnVsbHB0ciwgb3B0X2luX3ZhbHVlc192YWx1ZUZvdW5kID8gb3B0X2luX3ZhbHVlcy5nZXQoKSA6
IG51bGxwdHIsIG9wdF9pbl9wYXlsb2FkX3ZhbHVlRm91bmQgPyBvcHRfaW5fcGF5bG9hZC5nZXQo
KSA6IG51bGxwdHIsIG9wdF9pbl9kYXRhYmFzZUlkX3ZhbHVlRm91bmQgPyAmb3B0X2luX2RhdGFi
YXNlSWQgOiBudWxscHRyLCBvcHRfaW5fc3FsRXJyb3JfdmFsdWVGb3VuZCA/IG9wdF9pbl9zcWxF
cnJvci5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9zY3JlZW5Db2xvcl92YWx1ZUZvdW5kID8gJm9w
dF9pbl9zY3JlZW5Db2xvciA6IG51bGxwdHIsIG9wdF9pbl9hbHRlcm5hdGVDb2xvcnNfdmFsdWVG
b3VuZCA/IG9wdF9pbl9hbHRlcm5hdGVDb2xvcnMuZ2V0KCkgOiBudWxscHRyLCBvcHRfaW5fcHJp
bnRDb2xvcl92YWx1ZUZvdW5kID8gJm9wdF9pbl9wcmludENvbG9yIDogbnVsbHB0cik7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAg
IFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAg
UmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gb3V0X2NvbHVtbk5hbWVzOwotICAgIE9wdGlv
bmFsPFN0cmluZz4gb3V0X25vdGVzOwotICAgIE9wdGlvbmFsPGRvdWJsZT4gb3V0X3RpbWVzdGFt
cDsKLSAgICBPcHRpb25hbDxKU09OOjpPYmplY3Q+IG91dF92YWx1ZXM7Ci0gICAgT3B0aW9uYWw8
SlNPTjo6VmFsdWU+IG91dF9wYXlsb2FkOwotICAgIE9wdGlvbmFsPGludD4gb3V0X2RhdGFiYXNl
SWQ7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gb3V0
X3NxbEVycm9yOwotICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29s
b3JzIG91dF9zY3JlZW5Db2xvcjsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0
YWJhc2U6OkNvbG9yTGlzdD4gb3V0X2FsdGVybmF0ZUNvbG9yczsKLSAgICBEYXRhYmFzZUJhY2tl
bmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciBvdXRfcHJpbnRDb2xvcjsKLSAgICBtX2Fn
ZW50LT5leGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGVycm9yLCBvcHRfaW5fY29sdW1uTmFt
ZXNfdmFsdWVGb3VuZCA/IG9wdF9pbl9jb2x1bW5OYW1lcy5nZXQoKSA6IG51bGxwdHIsIG9wdF9p
bl9ub3Rlc192YWx1ZUZvdW5kID8gJm9wdF9pbl9ub3RlcyA6IG51bGxwdHIsIG9wdF9pbl90aW1l
c3RhbXBfdmFsdWVGb3VuZCA/ICZvcHRfaW5fdGltZXN0YW1wIDogbnVsbHB0ciwgb3B0X2luX3Zh
bHVlc192YWx1ZUZvdW5kID8gb3B0X2luX3ZhbHVlcy5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9w
YXlsb2FkX3ZhbHVlRm91bmQgPyBvcHRfaW5fcGF5bG9hZC5nZXQoKSA6IG51bGxwdHIsIG9wdF9p
bl9kYXRhYmFzZUlkX3ZhbHVlRm91bmQgPyAmb3B0X2luX2RhdGFiYXNlSWQgOiBudWxscHRyLCBv
cHRfaW5fc3FsRXJyb3JfdmFsdWVGb3VuZCA/IG9wdF9pbl9zcWxFcnJvci5nZXQoKSA6IG51bGxw
dHIsIG9wdF9pbl9zY3JlZW5Db2xvcl92YWx1ZUZvdW5kID8gJm9wdF9pbl9zY3JlZW5Db2xvciA6
IG51bGxwdHIsIG9wdF9pbl9hbHRlcm5hdGVDb2xvcnNfdmFsdWVGb3VuZCA/IG9wdF9pbl9hbHRl
cm5hdGVDb2xvcnMuZ2V0KCkgOiBudWxscHRyLCBvcHRfaW5fcHJpbnRDb2xvcl92YWx1ZUZvdW5k
ID8gJm9wdF9pbl9wcmludENvbG9yIDogbnVsbHB0ciwgb3V0X2NvbHVtbk5hbWVzLCBvdXRfbm90
ZXMsIG91dF90aW1lc3RhbXAsIG91dF92YWx1ZXMsIG91dF9wYXlsb2FkLCBvdXRfZGF0YWJhc2VJ
ZCwgb3V0X3NxbEVycm9yLCBvdXRfc2NyZWVuQ29sb3IsIG91dF9hbHRlcm5hdGVDb2xvcnMsIG91
dF9wcmludENvbG9yKTsKLQotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIHsKLSAgICAgICAgaWYg
KG91dF9jb2x1bW5OYW1lcykKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoImNvbHVtbk5h
bWVzIl9zLCBvdXRfY29sdW1uTmFtZXMpOwotICAgICAgICBpZiAob3V0X25vdGVzLmhhc1ZhbHVl
KCkpCi0gICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZygibm90ZXMiX3MsICpvdXRfbm90ZXMp
OwotICAgICAgICBpZiAob3V0X3RpbWVzdGFtcC5oYXNWYWx1ZSgpKQotICAgICAgICAgICAgcmVz
dWx0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgKm91dF90aW1lc3RhbXApOwotICAgICAgICBp
ZiAob3V0X3ZhbHVlcy5oYXNWYWx1ZSgpKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRPYmplY3Qo
InZhbHVlcyJfcywgKm91dF92YWx1ZXMpOwotICAgICAgICBpZiAob3V0X3BheWxvYWQuaGFzVmFs
dWUoKSkKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsICpvdXRfcGF5
bG9hZCk7Ci0gICAgICAgIGlmIChvdXRfZGF0YWJhc2VJZC5oYXNWYWx1ZSgpKQotICAgICAgICAg
ICAgcmVzdWx0LT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCAqb3V0X2RhdGFiYXNlSWQpOwot
ICAgICAgICBpZiAob3V0X3NxbEVycm9yKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRPYmplY3Qo
InNxbEVycm9yIl9zLCBvdXRfc3FsRXJyb3IpOwotICAgICAgICBpZiAob3V0X3NjcmVlbkNvbG9y
Lmhhc1ZhbHVlKCkpCi0gICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZygic2NyZWVuQ29sb3Ii
X3MsICpvdXRfc2NyZWVuQ29sb3IpOwotICAgICAgICBpZiAob3V0X2FsdGVybmF0ZUNvbG9ycykK
LSAgICAgICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgb3V0X2Fs
dGVybmF0ZUNvbG9ycyk7Ci0gICAgICAgIGlmIChvdXRfcHJpbnRDb2xvci5oYXNWYWx1ZSgpKQot
ICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsICpvdXRfcHJpbnRD
b2xvcik7Ci0gICAgfQotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0gICAgICAgIG1fYmFja2Vu
ZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFs
c2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9j
b2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsK
LX0KLQotdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlTm9PcHRpb25hbFBh
cmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVy
cykKLXsKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGluX2NvbHVtbk5hbWVzID0gbV9iYWNrZW5k
RGlzcGF0Y2hlci0+Z2V0QXJyYXkocGFyYW1ldGVycy5nZXQoKSwgImNvbHVtbk5hbWVzIl9zLCBu
dWxscHRyKTsKLSAgICBTdHJpbmcgaW5fbm90ZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRT
dHJpbmcocGFyYW1ldGVycy5nZXQoKSwgIm5vdGVzIl9zLCBudWxscHRyKTsKLSAgICBkb3VibGUg
aW5fdGltZXN0YW1wID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0RG91YmxlKHBhcmFtZXRlcnMu
Z2V0KCksICJ0aW1lc3RhbXAiX3MsIG51bGxwdHIpOwotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+
IGluX3ZhbHVlcyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldE9iamVjdChwYXJhbWV0ZXJzLmdl
dCgpLCAidmFsdWVzIl9zLCBudWxscHRyKTsKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IGluX3Bh
eWxvYWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRWYWx1ZShwYXJhbWV0ZXJzLmdldCgpLCAi
cGF5bG9hZCJfcywgbnVsbHB0cik7Ci0gICAgaW50IGluX2RhdGFiYXNlSWQgPSBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5nZXRJbnRlZ2VyKHBhcmFtZXRlcnMuZ2V0KCksICJkYXRhYmFzZUlkIl9zLCBu
dWxscHRyKTsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBpbl9zcWxFcnJvciA9IG1fYmFja2Vu
ZERpc3BhdGNoZXItPmdldE9iamVjdChwYXJhbWV0ZXJzLmdldCgpLCAic3FsRXJyb3IiX3MsIG51
bGxwdHIpOwotICAgIFN0cmluZyBpbl9zY3JlZW5Db2xvciA9IG1fYmFja2VuZERpc3BhdGNoZXIt
PmdldFN0cmluZyhwYXJhbWV0ZXJzLmdldCgpLCAic2NyZWVuQ29sb3IiX3MsIG51bGxwdHIpOwot
ICAgIFJlZlB0cjxKU09OOjpBcnJheT4gaW5fYWx0ZXJuYXRlQ29sb3JzID0gbV9iYWNrZW5kRGlz
cGF0Y2hlci0+Z2V0QXJyYXkocGFyYW1ldGVycy5nZXQoKSwgImFsdGVybmF0ZUNvbG9ycyJfcywg
bnVsbHB0cik7Ci0gICAgU3RyaW5nIGluX3ByaW50Q29sb3IgPSBtX2JhY2tlbmREaXNwYXRjaGVy
LT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgInByaW50Q29sb3IiX3MsIG51bGxwdHIpOwot
ICAgIGlmIChtX2JhY2tlbmREaXNwYXRjaGVyLT5oYXNQcm90b2NvbEVycm9ycygpKSB7Ci0gICAg
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3Bh
dGNoZXI6OkludmFsaWRQYXJhbXMsICJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJ0RhdGFiYXNl
LmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycycgY2FuJ3QgYmUgcHJvY2Vzc2VkIl9zKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQotICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9h
bHRlcm5hdGVEaXNwYXRjaGVyLT5leGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMocmVxdWVzdElk
LCAqaW5fY29sdW1uTmFtZXMsIGluX25vdGVzLCBpbl90aW1lc3RhbXAsICppbl92YWx1ZXMsICpp
bl9wYXlsb2FkLCBpbl9kYXRhYmFzZUlkLCAqaW5fc3FsRXJyb3IsIGluX3NjcmVlbkNvbG9yLCAq
aW5fYWx0ZXJuYXRlQ29sb3JzLCBpbl9wcmludENvbG9yKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSNlbmRpZgotCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVj
dD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8SlNPTjo6QXJy
YXlPZjxTdHJpbmc+PiBvdXRfY29sdW1uTmFtZXM7Ci0gICAgU3RyaW5nIG91dF9ub3RlczsKLSAg
ICBkb3VibGUgb3V0X3RpbWVzdGFtcDsKLSAgICBKU09OOjpPYmplY3Qgb3V0X3ZhbHVlczsKLSAg
ICBKU09OOjpWYWx1ZSBvdXRfcGF5bG9hZDsKLSAgICBpbnQgb3V0X2RhdGFiYXNlSWQ7Ci0gICAg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gb3V0X3NxbEVycm9y
OwotICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzIG91dF9z
Y3JlZW5Db2xvcjsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNv
bG9yTGlzdD4gb3V0X2FsdGVybmF0ZUNvbG9yczsKLSAgICBEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVySGFuZGxlcjo6UHJpbnRDb2xvciBvdXRfcHJpbnRDb2xvcjsKLSAgICBtX2FnZW50LT5leGVj
dXRlTm9PcHRpb25hbFBhcmFtZXRlcnMoZXJyb3IsICppbl9jb2x1bW5OYW1lcywgaW5fbm90ZXMs
IGluX3RpbWVzdGFtcCwgKmluX3ZhbHVlcywgKmluX3BheWxvYWQsIGluX2RhdGFiYXNlSWQsICpp
bl9zcWxFcnJvciwgaW5fc2NyZWVuQ29sb3IsICppbl9hbHRlcm5hdGVDb2xvcnMsIGluX3ByaW50
Q29sb3IsIG91dF9jb2x1bW5OYW1lcywgJm91dF9ub3RlcywgJm91dF90aW1lc3RhbXAsIG91dF92
YWx1ZXMsICZvdXRfcGF5bG9hZCwgJm91dF9kYXRhYmFzZUlkLCBvdXRfc3FsRXJyb3IsICZvdXRf
c2NyZWVuQ29sb3IsIG91dF9hbHRlcm5hdGVDb2xvcnMsICZvdXRfcHJpbnRDb2xvcik7Ci0KLSAg
ICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7Ci0gICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoImNvbHVt
bk5hbWVzIl9zLCBvdXRfY29sdW1uTmFtZXMpOwotICAgICAgICByZXN1bHQtPnNldFN0cmluZygi
bm90ZXMiX3MsIG91dF9ub3Rlcyk7Ci0gICAgICAgIHJlc3VsdC0+c2V0RG91YmxlKCJ0aW1lc3Rh
bXAiX3MsIG91dF90aW1lc3RhbXApOwotICAgICAgICByZXN1bHQtPnNldE9iamVjdCgidmFsdWVz
Il9zLCBvdXRfdmFsdWVzKTsKLSAgICAgICAgcmVzdWx0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywg
b3V0X3BheWxvYWQpOwotICAgICAgICByZXN1bHQtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3Ms
IG91dF9kYXRhYmFzZUlkKTsKLSAgICAgICAgcmVzdWx0LT5zZXRPYmplY3QoInNxbEVycm9yIl9z
LCBvdXRfc3FsRXJyb3IpOwotICAgICAgICByZXN1bHQtPnNldFN0cmluZygic2NyZWVuQ29sb3Ii
X3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1
ZShvdXRfc2NyZWVuQ29sb3IpKTsKLSAgICAgICAgcmVzdWx0LT5zZXRBcnJheSgiYWx0ZXJuYXRl
Q29sb3JzIl9zLCBvdXRfYWx0ZXJuYXRlQ29sb3JzKTsKLSAgICAgICAgcmVzdWx0LT5zZXRTdHJp
bmcoInByaW50Q29sb3IiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRF
bnVtQ29uc3RhbnRWYWx1ZShvdXRfcHJpbnRDb2xvcikpOwotICAgIH0KLSAgICBpZiAoIWVycm9y
Lmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVx
dWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFj
a2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNl
cnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgotCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJz
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdt
YSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8d3Rm
L0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNw
YWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEZyb250ZW5kUm91dGVyOwotCi19IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1w
YXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJz
LmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7
Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVu
ZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5o
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25h
bC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4K
LQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0K
LQotLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCi1uYW1lc3BhY2UgRGF0YWJhc2UgewotY2xhc3Mg
RXJyb3I7Ci1lbnVtIGNsYXNzIFByaW1hcnlDb2xvcnM7Ci19IC8vIERhdGFiYXNlCi0vLyBFbmQg
b2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCi0KLQotLy8gVHlwZWRlZnMuCi1uYW1lc3BhY2UgRGF0
YWJhc2UgewotLyogVW5pcXVlIGlkZW50aWZpZXIgb2YgRGF0YWJhc2Ugb2JqZWN0LiAqLwotdHlw
ZWRlZiBpbnQgRGF0YWJhc2VJZDsKLXR5cGVkZWYgSlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gQ29sb3JMaXN0OwotfSAvLyBEYXRhYmFz
ZQotLy8gRW5kIG9mIHR5cGVkZWZzLgotCi1uYW1lc3BhY2UgVGVzdEhlbHBlcnMgewotCi1TdHJp
bmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFsdWUpCi17Ci0gICAgcmV0dXJu
IGdldEVudW1Db25zdGFudFZhbHVlKHN0YXRpY19jYXN0PGludD4oZW51bVZhbHVlKSk7Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCi0KLW5hbWVzcGFjZSBEYXRhYmFzZSB7Ci0vKiAg
Ki8KLWVudW0gY2xhc3MgUHJpbWFyeUNvbG9ycyB7Ci0gICAgUmVkID0gMCwKLSAgICBHcmVlbiA9
IDEsCi0gICAgQmx1ZSA9IDIsCi19OyAvLyBlbnVtIGNsYXNzIFByaW1hcnlDb2xvcnMKLS8qIERh
dGFiYXNlIGVycm9yLiAqLwotY2xhc3MgRXJyb3IgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7
Ci1wdWJsaWM6Ci0gICAgZW51bSB7Ci0gICAgICAgIE5vRmllbGRzU2V0ID0gMCwKLSAgICAgICAg
TWVzc2FnZVNldCA9IDEgPDwgMCwKLSAgICAgICAgQ29kZVNldCA9IDEgPDwgMSwKLSAgICAgICAg
QWxsRmllbGRzU2V0ID0gKE1lc3NhZ2VTZXQgfCBDb2RlU2V0KQotICAgIH07Ci0KLSAgICB0ZW1w
bGF0ZTxpbnQgU1RBVEU+Ci0gICAgY2xhc3MgQnVpbGRlciB7Ci0gICAgcHJpdmF0ZToKLSAgICAg
ICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7Ci0KLSAgICAgICAgdGVtcGxhdGU8aW50
IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+
KHRoaXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcihSZWY8LypFcnJvciovSlNPTjo6
T2JqZWN0PiYmIG9iamVjdCkKLSAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3Qp
KQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxk
c1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKLSAgICAgICAgfQotICAg
ICAgICBmcmllbmQgY2xhc3MgRXJyb3I7Ci0gICAgcHVibGljOgotCi0gICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIHZhbHVlKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTWVzc2FnZVNldCks
IHByb3BlcnR5X21lc3NhZ2VfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dFN0cmluZygibWVzc2FnZSJfcywgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0
ZTxNZXNzYWdlU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IENv
ZGVTZXQ+JiBzZXRDb2RlKGludCB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoIShTVEFURSAmIENvZGVTZXQpLCBwcm9wZXJ0eV9jb2RlX2FscmVhZHlfc2V0KTsK
LSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2VyKCJjb2RlIl9zLCB2YWx1ZSk7Ci0gICAg
ICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvZGVTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBSZWY8RXJyb3I+IHJlbGVhc2UoKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FT
U0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwotICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEVycm9yKSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0
KSwgY2Fubm90X2Nhc3QpOwotCi0gICAgICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uUmVz
dWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKLSAgICAgICAgICAgIGF1dG8gcmVzdWx0
ID0gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8RXJyb3I+Kj4oJmpzb25SZXN1bHQpKTsK
LSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgLyoK
LSAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6Ci0gICAgICogUmVmPEVycm9yPiByZXN1bHQg
PSBFcnJvcjo6Y3JlYXRlKCkKLSAgICAgKiAgICAgLnNldE1lc3NhZ2UoLi4uKQotICAgICAqICAg
ICAuc2V0Q29kZSguLi4pCi0gICAgICogICAgIC5yZWxlYXNlKCk7Ci0gICAgICovCi0gICAgc3Rh
dGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4g
QnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7Ci0gICAgfQotfTsK
LQotfSAvLyBEYXRhYmFzZQotCi0KLQotbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKLQotdGVtcGxh
dGU8dHlwZW5hbWUgUHJvdG9jb2xFbnVtVHlwZT4KLU9wdGlvbmFsPFByb3RvY29sRW51bVR5cGU+
IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZyhjb25zdCBTdHJpbmcmKTsKLQotLy8gRW51bXMgaW4g
dGhlICdEYXRhYmFzZScgRG9tYWluCi10ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlBy
b3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5n
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPihjb25zdCBTdHJp
bmcmKTsKLQotfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKLQotfSAvLyBuYW1lc3BhY2UgUHJv
dG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLW5hbWVzcGFjZSBXVEYgewotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Ci0KLS8vIEhhc2ggZGVjbGFy
YXRpb25zIGluIHRoZSAnRGF0YWJhc2UnIERvbWFpbgotdGVtcGxhdGU8Pgotc3RydWN0IERlZmF1
bHRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiB7Ci0g
ICAgdHlwZWRlZiBJbnRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5
Q29sb3JzPiBIYXNoOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0jIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbE9iamVjdHMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0
cy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9w
dGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVz
dFByb3RvY29sT2JqZWN0cy5oIgotCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotbmFtZXNw
YWNlIFByb3RvY29sIHsKLQotbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKLQotc3RhdGljIGNvbnN0
IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFsdWVzW10gPSB7Ci0gICAgInJlZCIsCi0gICAg
ImdyZWVuIiwKLSAgICAiYmx1ZSIsCi0gICAgImN5YW4iLAotICAgICJtYWdlbnRhIiwKLSAgICAi
eWVsbG93IiwKLSAgICAiYmxhY2siLAotfTsKLQotU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVl
KGludCBjb2RlKSB7Ci0gICAgcmV0dXJuIGVudW1fY29uc3RhbnRfdmFsdWVzW2NvZGVdOwotfQot
Ci0vLyBFbnVtcyBpbiB0aGUgJ0RhdGFiYXNlJyBEb21haW4KLXRlbXBsYXRlPD4KLU9wdGlvbmFs
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiBwYXJzZUVudW1W
YWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xv
cnM+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCi17Ci0gICAgc3RhdGljIGNvbnN0IHNp
emVfdCBjb25zdGFudFZhbHVlc1tdID0gewotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzOjpSZWQsCi0gICAgICAgIChzaXplX3QpSW5z
cGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM6OkdyZWVuLAotICAgICAg
ICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzOjpC
bHVlLAotICAgIH07Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAzOyArK2kpCi0gICAgICAg
IGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVl
c1tpXV0pCi0gICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNl
OjpQcmltYXJ5Q29sb3JzKWNvbnN0YW50VmFsdWVzW2ldOwotCi0gICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKLX0KLQotCi19IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwotCi0KLQotfSAvLyBuYW1l
c3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
Y29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2luY2x1ZGUg
PHd0Zi9SZXRhaW5QdHIuaD4KLQotQHByb3RvY29sIFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWlu
SGFuZGxlcjsKLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotY2xhc3MgT2JqQ0luc3BlY3Rv
ckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJuYXRlRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJs
aWM6Ci0gICAgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFBy
b3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5k
bGVyOyB9Ci0gICAgdm9pZCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVz
dElkLCBjb25zdCBKU09OOjpBcnJheSogaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyogaW5f
bm90ZXMsIGNvbnN0IGRvdWJsZSogaW5fdGltZXN0YW1wLCBjb25zdCBKU09OOjpPYmplY3QqIGlu
X3ZhbHVlcywgY29uc3QgSlNPTjo6VmFsdWUqIGluX3BheWxvYWQsIGNvbnN0IGludCogaW5fZGF0
YWJhc2VJZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nKiBp
bl9zY3JlZW5Db2xvciwgY29uc3QgSlNPTjo6QXJyYXkqIGluX2FsdGVybmF0ZUNvbG9ycywgY29u
c3QgU3RyaW5nKiBpbl9wcmludENvbG9yKSBmaW5hbDsKLSAgICB2b2lkIGV4ZWN1dGVOb09wdGlv
bmFsUGFyYW1ldGVycyhsb25nIHJlcXVlc3RJZCwgY29uc3QgSlNPTjo6QXJyYXkmIGluX2NvbHVt
bk5hbWVzLCBjb25zdCBTdHJpbmcmIGluX25vdGVzLCBkb3VibGUgaW5fdGltZXN0YW1wLCBjb25z
dCBKU09OOjpPYmplY3QmIGluX3ZhbHVlcywgSlNPTjo6VmFsdWUgaW5fcGF5bG9hZCwgaW50IGlu
X2RhdGFiYXNlSWQsIGNvbnN0IEpTT046Ok9iamVjdCYgaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmlu
ZyYgaW5fc2NyZWVuQ29sb3IsIGNvbnN0IEpTT046OkFycmF5JiBpbl9hbHRlcm5hdGVDb2xvcnMs
IGNvbnN0IFN0cmluZyYgaW5fcHJpbnRDb2xvcikgZmluYWw7Ci1wcml2YXRlOgotICAgIFJldGFp
blB0cjxpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwot
fTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJh
Y2tlbmREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNv
bW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgot
I2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0
b3IgewotCi12b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVj
dXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBjb25zdCBKU09OOjpBcnJh
eSogaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyogaW5fbm90ZXMsIGNvbnN0IGRvdWJsZSog
aW5fdGltZXN0YW1wLCBjb25zdCBKU09OOjpPYmplY3QqIGluX3ZhbHVlcywgY29uc3QgSlNPTjo6
VmFsdWUqIGluX3BheWxvYWQsIGNvbnN0IGludCogaW5fZGF0YWJhc2VJZCwgY29uc3QgSlNPTjo6
T2JqZWN0KiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nKiBpbl9zY3JlZW5Db2xvciwgY29uc3Qg
SlNPTjo6QXJyYXkqIGluX2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nKiBpbl9wcmludENv
bG9yKQotewotICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rv
cihleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0Nh
bGxiYWNrOmNvbHVtbk5hbWVzOm5vdGVzOnRpbWVzdGFtcDp2YWx1ZXM6cGF5bG9hZDpkYXRhYmFz
ZUlkOnNxbEVycm9yOnNjcmVlbkNvbG9yOmFsdGVybmF0ZUNvbG9yczpwcmludENvbG9yOildKSB7
Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVz
dElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRGF0YWJhc2UuZXhlY3V0
ZUFsbE9wdGlvbmFsUGFyYW1ldGVycycgd2FzIG5vdCBmb3VuZCJfcyk7Ci0gICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJh
Y2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwotICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgIH07Ci0KLSAgICBpZCBzdWNjZXNz
Q2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmNvbHVtbk5hbWVzLCBOU1N0cmlu
ZyAqKm5vdGVzLCBkb3VibGUgKnRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqdmFs
dWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipwYXlsb2FkLCBpbnQgKmRhdGFiYXNlSWQsIFRl
c3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQ
cmltYXJ5Q29sb3JzICpzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICoqYWx0ZXJu
YXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRl
cnNQcmludENvbG9yICpwcmludENvbG9yKSB7Ci0gICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IHJl
c3VsdE9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihjb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1l
cyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIo
bm90ZXMsIEAibm90ZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9O
QUxfUEFSQU1FVEVSKHZhbHVlcywgQCJ2YWx1ZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHBheWxvYWQsIEAicGF5bG9hZCIpOwotICAgICAg
ICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoc3FsRXJyb3IsIEAi
c3FsRXJyb3IiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFS
QU1FVEVSKGFsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsKLSAgICAgICAgaWYg
KGNvbHVtbk5hbWVzKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheSgiY29sdW1u
TmFtZXMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KCpjb2x1bW5OYW1lcykpOwotICAgICAgICBpZiAo
bm90ZXMpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygibm90ZXMiX3MsICpu
b3Rlcyk7Ci0gICAgICAgIGlmICh0aW1lc3RhbXApCi0gICAgICAgICAgICByZXN1bHRPYmplY3Qt
PnNldERvdWJsZSgidGltZXN0YW1wIl9zLCAqdGltZXN0YW1wKTsKLSAgICAgICAgaWYgKHZhbHVl
cykKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFsqdmFs
dWVzIHRvSlNPTk9iamVjdF0pOwotICAgICAgICBpZiAocGF5bG9hZCkKLSAgICAgICAgICAgIHJl
c3VsdE9iamVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFsqcGF5bG9hZCB0b0pTT05PYmplY3Rd
KTsKLSAgICAgICAgaWYgKGRhdGFiYXNlSWQpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNl
dEludGVnZXIoImRhdGFiYXNlSWQiX3MsICpkYXRhYmFzZUlkKTsKLSAgICAgICAgaWYgKHNxbEVy
cm9yKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBb
KnNxbEVycm9yIHRvSlNPTk9iamVjdF0pOwotICAgICAgICBpZiAoc2NyZWVuQ29sb3IpCi0gICAg
ICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsIHRvUHJvdG9j
b2xTdHJpbmcoKnNjcmVlbkNvbG9yKSk7Ci0gICAgICAgIGlmIChhbHRlcm5hdGVDb2xvcnMpCi0g
ICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIHRv
SlNPTlN0cmluZ0FycmF5KCphbHRlcm5hdGVDb2xvcnMpKTsKLSAgICAgICAgaWYgKHByaW50Q29s
b3IpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywg
dG9Qcm90b2NvbFN0cmluZygqcHJpbnRDb2xvcikpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdE9iamVjdCksIGZhbHNl
KTsKLSAgICB9OwotCi0gICAgTlNBcnJheS8qPE5TU3RyaW5nPiovICpvX2luX2NvbHVtbk5hbWVz
OwotICAgIGlmIChpbl9jb2x1bW5OYW1lcykKLSAgICAgICAgb19pbl9jb2x1bW5OYW1lcyA9IHRv
T2JqQ1N0cmluZ0FycmF5KGluX2NvbHVtbk5hbWVzKTsKLSAgICBOU1N0cmluZyAqb19pbl9ub3Rl
czsKLSAgICBpZiAoaW5fbm90ZXMpCi0gICAgICAgIG9faW5fbm90ZXMgPSAqaW5fbm90ZXM7Ci0g
ICAgZG91YmxlIG9faW5fdGltZXN0YW1wOwotICAgIGlmIChpbl90aW1lc3RhbXApCi0gICAgICAg
IG9faW5fdGltZXN0YW1wID0gKmluX3RpbWVzdGFtcDsKLSAgICBSV0lQcm90b2NvbEpTT05PYmpl
Y3QgKm9faW5fdmFsdWVzOwotICAgIGlmIChpbl92YWx1ZXMpCi0gICAgICAgIG9faW5fdmFsdWVz
ID0gW1tbUldJUHJvdG9jb2xKU09OT2JqZWN0IGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6aW5f
dmFsdWVzXSBhdXRvcmVsZWFzZV07Ci0gICAgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvX2luX3Bh
eWxvYWQ7Ci0gICAgaWYgKGluX3BheWxvYWQpCi0gICAgICAgIG9faW5fcGF5bG9hZCA9IFtbW1JX
SVByb3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0OmluX3BheWxvYWRd
IGF1dG9yZWxlYXNlXTsKLSAgICBpbnQgb19pbl9kYXRhYmFzZUlkOwotICAgIGlmIChpbl9kYXRh
YmFzZUlkKQotICAgICAgICBvX2luX2RhdGFiYXNlSWQgPSAqaW5fZGF0YWJhc2VJZDsKLSAgICBU
ZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpvX2luX3NxbEVycm9yOwotICAgIGlmIChpbl9zcWxF
cnJvcikKLSAgICAgICAgb19pbl9zcWxFcnJvciA9IFtbW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJy
b3IgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDppbl9zcWxFcnJvcl0gYXV0b3JlbGVhc2VdOwot
ICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycz4gb19pbl9zY3Jl
ZW5Db2xvcjsKLSAgICBpZiAoaW5fc2NyZWVuQ29sb3IpCi0gICAgICAgIG9faW5fc2NyZWVuQ29s
b3IgPSBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3Jz
PigqaW5fc2NyZWVuQ29sb3IpOwotICAgIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqb19pbl9hbHRl
cm5hdGVDb2xvcnM7Ci0gICAgaWYgKGluX2FsdGVybmF0ZUNvbG9ycykKLSAgICAgICAgb19pbl9h
bHRlcm5hdGVDb2xvcnMgPSB0b09iakNTdHJpbmdBcnJheShpbl9hbHRlcm5hdGVDb2xvcnMpOwot
ICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1l
dGVyc1ByaW50Q29sb3I+IG9faW5fcHJpbnRDb2xvcjsKLSAgICBpZiAoaW5fcHJpbnRDb2xvcikK
LSAgICAgICAgb19pbl9wcmludENvbG9yID0gZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2Nv
bERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3I+KCppbl9wcmlu
dENvbG9yKTsKLQotICAgIFttX2RlbGVnYXRlIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNX
aXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2Fs
bGJhY2sgY29sdW1uTmFtZXM6KGluX2NvbHVtbk5hbWVzID8gJm9faW5fY29sdW1uTmFtZXMgOiBu
aWwpIG5vdGVzOihpbl9ub3RlcyA/ICZvX2luX25vdGVzIDogbmlsKSB0aW1lc3RhbXA6KGluX3Rp
bWVzdGFtcCA/ICZvX2luX3RpbWVzdGFtcCA6IG5pbCkgdmFsdWVzOihpbl92YWx1ZXMgPyAmb19p
bl92YWx1ZXMgOiBuaWwpIHBheWxvYWQ6KGluX3BheWxvYWQgPyAmb19pbl9wYXlsb2FkIDogbmls
KSBkYXRhYmFzZUlkOihpbl9kYXRhYmFzZUlkID8gJm9faW5fZGF0YWJhc2VJZCA6IG5pbCkgc3Fs
RXJyb3I6KGluX3NxbEVycm9yID8gJm9faW5fc3FsRXJyb3IgOiBuaWwpIHNjcmVlbkNvbG9yOihp
bl9zY3JlZW5Db2xvciA/ICZvX2luX3NjcmVlbkNvbG9yLnZhbHVlKCkgOiBuaWwpIGFsdGVybmF0
ZUNvbG9yczooaW5fYWx0ZXJuYXRlQ29sb3JzID8gJm9faW5fYWx0ZXJuYXRlQ29sb3JzIDogbmls
KSBwcmludENvbG9yOihpbl9wcmludENvbG9yID8gJm9faW5fcHJpbnRDb2xvci52YWx1ZSgpIDog
bmlsKV07Ci19Ci0KLXZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6
OmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhsb25nIHJlcXVlc3RJZCwgY29uc3QgSlNPTjo6
QXJyYXkmIGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIGluX25vdGVzLCBkb3VibGUgaW5f
dGltZXN0YW1wLCBjb25zdCBKU09OOjpPYmplY3QmIGluX3ZhbHVlcywgSlNPTjo6VmFsdWUgaW5f
cGF5bG9hZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IEpTT046Ok9iamVjdCYgaW5fc3FsRXJy
b3IsIGNvbnN0IFN0cmluZyYgaW5fc2NyZWVuQ29sb3IsIGNvbnN0IEpTT046OkFycmF5JiBpbl9h
bHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgaW5fcHJpbnRDb2xvcikKLXsKLSAgICBpZiAo
IVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoZXhlY3V0ZU5vT3B0aW9u
YWxQYXJhbWV0ZXJzV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOmNvbHVtbk5hbWVz
Om5vdGVzOnRpbWVzdGFtcDp2YWx1ZXM6cGF5bG9hZDpkYXRhYmFzZUlkOnNxbEVycm9yOnNjcmVl
bkNvbG9yOmFsdGVybmF0ZUNvbG9yczpwcmludENvbG9yOildKSB7Ci0gICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0
Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRGF0YWJhc2UuZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0
ZXJzJyB3YXMgbm90IGZvdW5kIl9zKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2Vu
ZFBlbmRpbmdFcnJvcnMoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlkIGVycm9y
Q2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNl
cnZlckVycm9yLCBlcnJvcik7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5k
aW5nRXJyb3JzKCk7Ci0gICAgfTsKLQotICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oTlNBcnJh
eS8qPE5TU3RyaW5nPiovICpjb2x1bW5OYW1lcywgTlNTdHJpbmcgKm5vdGVzLCBkb3VibGUgdGlt
ZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2Jq
ZWN0ICpwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAq
c3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyBzY3JlZW5Db2xvciwg
TlNBcnJheS8qPE5TU3RyaW5nPiovICphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFi
YXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvciBwcmludENvbG9yKSB7Ci0g
ICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdE9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKGNv
bHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
UkVRVUlSRURfUEFSQU1FVEVSKG5vdGVzLCBAIm5vdGVzIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHZhbHVlcywgQCJ2YWx1ZXMiKTsKLSAgICAgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIocGF5bG9hZCwgQCJwYXlsb2Fk
Iik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHNxbEVy
cm9yLCBAInNxbEVycm9yIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURf
UEFSQU1FVEVSKGFsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsKLSAgICAgICAg
cmVzdWx0T2JqZWN0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0cmluZ0FycmF5
KGNvbHVtbk5hbWVzKSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJub3RlcyJf
cywgbm90ZXMpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldERvdWJsZSgidGltZXN0YW1wIl9z
LCB0aW1lc3RhbXApOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdCgidmFsdWVzIl9z
LCBbdmFsdWVzIHRvSlNPTk9iamVjdF0pOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldFZhbHVl
KCJwYXlsb2FkIl9zLCBbcGF5bG9hZCB0b0pTT05PYmplY3RdKTsKLSAgICAgICAgcmVzdWx0T2Jq
ZWN0LT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCBkYXRhYmFzZUlkKTsKLSAgICAgICAgcmVz
dWx0T2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBbc3FsRXJyb3IgdG9KU09OT2JqZWN0
XSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgdG9Q
cm90b2NvbFN0cmluZyhzY3JlZW5Db2xvcikpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldEFy
cmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KGFsdGVybmF0ZUNvbG9y
cykpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgdG9Q
cm90b2NvbFN0cmluZyhwcmludENvbG9yKSk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCkt
PnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0T2JqZWN0KSwgZmFsc2UpOwot
ICAgIH07Ci0KLSAgICBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKm9faW5fY29sdW1uTmFtZXMgPSB0
b09iakNTdHJpbmdBcnJheSgmaW5fY29sdW1uTmFtZXMpOwotICAgIE5TU3RyaW5nICpvX2luX25v
dGVzID0gaW5fbm90ZXM7Ci0gICAgZG91YmxlIG9faW5fdGltZXN0YW1wID0gaW5fdGltZXN0YW1w
OwotICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb19pbl92YWx1ZXMgPSBbW1tSV0lQcm90b2Nv
bEpTT05PYmplY3QgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDomaW5fdmFsdWVzXSBhdXRvcmVs
ZWFzZV07Ci0gICAgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvX2luX3BheWxvYWQgPSBbW1tSV0lQ
cm90b2NvbEpTT05PYmplY3QgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDomaW5fcGF5bG9hZF0g
YXV0b3JlbGVhc2VdOwotICAgIGludCBvX2luX2RhdGFiYXNlSWQgPSBpbl9kYXRhYmFzZUlkOwot
ICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKm9faW5fc3FsRXJyb3IgPSBbW1tUZXN0UHJv
dG9jb2xEYXRhYmFzZUVycm9yIGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6JmluX3NxbEVycm9y
XSBhdXRvcmVsZWFzZV07Ci0gICAgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5
Q29sb3JzPiBvX2luX3NjcmVlbkNvbG9yID0gZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2Nv
bERhdGFiYXNlUHJpbWFyeUNvbG9ycz4oaW5fc2NyZWVuQ29sb3IpOwotICAgIGlmICghb19pbl9z
Y3JlZW5Db2xvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2Nv
bEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCAiUGFyYW1ldGVyICdzY3Jl
ZW5Db2xvcicgb2YgbWV0aG9kICdEYXRhYmFzZS5leGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMn
IGNhbm5vdCBiZSBwcm9jZXNzZWQiX3MpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIE5T
QXJyYXkvKjxOU1N0cmluZz4qLyAqb19pbl9hbHRlcm5hdGVDb2xvcnMgPSB0b09iakNTdHJpbmdB
cnJheSgmaW5fYWx0ZXJuYXRlQ29sb3JzKTsKLSAgICBPcHRpb25hbDxUZXN0UHJvdG9jb2xEYXRh
YmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3I+IG9faW5fcHJpbnRDb2xv
ciA9IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlv
bmFsUGFyYW1ldGVyc1ByaW50Q29sb3I+KGluX3ByaW50Q29sb3IpOwotICAgIGlmICghb19pbl9w
cmludENvbG9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29s
RXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsICJQYXJhbWV0ZXIgJ3ByaW50
Q29sb3InIG9mIG1ldGhvZCAnRGF0YWJhc2UuZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzJyBj
YW5ub3QgYmUgcHJvY2Vzc2VkIl9zKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFtt
X2RlbGVnYXRlIGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1dpdGhFcnJvckNhbGxiYWNrOmVy
cm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjayBjb2x1bW5OYW1lczpv
X2luX2NvbHVtbk5hbWVzIG5vdGVzOm9faW5fbm90ZXMgdGltZXN0YW1wOm9faW5fdGltZXN0YW1w
IHZhbHVlczpvX2luX3ZhbHVlcyBwYXlsb2FkOm9faW5fcGF5bG9hZCBkYXRhYmFzZUlkOm9faW5f
ZGF0YWJhc2VJZCBzcWxFcnJvcjpvX2luX3NxbEVycm9yIHNjcmVlbkNvbG9yOm9faW5fc2NyZWVu
Q29sb3IudmFsdWUoKSBhbHRlcm5hdGVDb2xvcnM6b19pbl9hbHRlcm5hdGVDb2xvcnMgcHJpbnRD
b2xvcjpvX2luX3ByaW50Q29sb3IudmFsdWUoKV07Ci19Ci0KLQotfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1t
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0
dXJuLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+Ci0KLV9fYXR0cmli
dXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xD
b25maWd1cmF0aW9uIDogTlNPYmplY3QKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4sIHNl
dHRlcj1zZXREYXRhYmFzZUhhbmRsZXI6KSBpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhh
bmRsZXI+IGRhdGFiYXNlSGFuZGxlcjsKLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbENvbmZpZ3VyYXRpb24uaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbi5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdp
dGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3Vy
YXRpb24uaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbXBvcnQgIlRl
c3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1
Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLQotdXNpbmcgbmFtZXNwYWNl
IEluc3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24K
LXsKLSAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotICAg
IGlkPFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4gX2RhdGFiYXNlSGFuZGxlcjsK
LX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNw
ZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsK
LSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xs
ZXIpOwotICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1cm4gc2VsZjsKLX0K
LQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgW19kYXRhYmFzZUhhbmRsZXIgcmVsZWFzZV07Ci0g
ICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi0tICh2b2lkKXNldERhdGFiYXNlSGFuZGxlcjooaWQ8
VGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyPiloYW5kbGVyCi17Ci0gICAgaWYgKGhh
bmRsZXIgPT0gX2RhdGFiYXNlSGFuZGxlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgW19kYXRh
YmFzZUhhbmRsZXIgcmVsZWFzZV07Ci0gICAgX2RhdGFiYXNlSGFuZGxlciA9IFtoYW5kbGVyIHJl
dGFpbl07Ci0KLSAgICBhdXRvIGFsdGVybmF0ZURpc3BhdGNoZXIgPSBtYWtlVW5pcXVlPE9iakNJ
bnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPihoYW5kbGVyKTsKLSAgICBhdXRvIGFs
dGVybmF0ZUFnZW50ID0gbWFrZVVuaXF1ZTxBbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudDxEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVyLCBBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
Pj4oIkRhdGFiYXNlIl9zLCAqX2NvbnRyb2xsZXIsIFdURk1vdmUoYWx0ZXJuYXRlRGlzcGF0Y2hl
cikpOwotICAgIF9jb250cm9sbGVyLT5hcHBlbmRFeHRyYUFnZW50KFdURk1vdmUoYWx0ZXJuYXRl
QWdlbnQpKTsKLX0KLQotLSAoaWQ8VGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyPilk
YXRhYmFzZUhhbmRsZXIKLXsKLSAgICByZXR1cm4gX2RhdGFiYXNlSGFuZGxlcjsKLX0KLQotQGVu
ZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4t
cGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNp
bmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2
ZW50RGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxs
LXJldHVybi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLSNpbXBvcnQg
PFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KLQotCi1AY2xhc3MgVGVzdFBy
b3RvY29sRGF0YWJhc2VFcnJvcjsKLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFBy
b3RvY29sUGxhdGZvcm0pIHsKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbCwKLSAgICBUZXN0
UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWMsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1JT1MsCi0g
ICAgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUywKLX07Ci0KLQotdHlwZWRlZiBOU19FTlVNKE5T
SW50ZWdlciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzKSB7Ci0gICAgVGVzdFBy
b3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzUmVkLAotICAgIFRlc3RQcm90b2NvbERhdGFiYXNl
UHJpbWFyeUNvbG9yc0dyZWVuLAotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9y
c0JsdWUsCi19OwotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xEYXRh
YmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yKSB7Ci0gICAgVGVzdFBy
b3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckN5YW4s
Ci0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJp
bnRDb2xvck1hZ2VudGEsCi0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9u
YWxQYXJhbWV0ZXJzUHJpbnRDb2xvclllbGxvdywKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQmxhY2ssCi19OwotCi10eXBlZGVm
IE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25h
bFBhcmFtZXRlcnNQcmludENvbG9yKSB7Ci0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRl
QWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckN5YW4sCi0gICAgVGVzdFByb3RvY29sRGF0
YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvck1hZ2VudGEsCi0gICAg
VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xv
clllbGxvdywKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFt
ZXRlcnNQcmludENvbG9yQmxhY2ssCi19OwotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBU
ZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3Ip
IHsKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1By
aW50Q29sb3JDeWFuLAotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQ
YXJhbWV0ZXJzUHJpbnRDb2xvck1hZ2VudGEsCi0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVj
dXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yWWVsbG93LAotICAgIFRlc3RQcm90b2Nv
bERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckJsYWNrLAotfTsK
LQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRl
Tm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yKSB7Ci0gICAgVGVzdFByb3RvY29sRGF0YWJh
c2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQ3lhbiwKLSAgICBUZXN0UHJv
dG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JNYWdlbnRh
LAotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJp
bnRDb2xvclllbGxvdywKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFs
UGFyYW1ldGVyc1ByaW50Q29sb3JCbGFjaywKLX07Ci0KLQotX19hdHRyaWJ1dGVfXygodmlzaWJp
bGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3Ig
OiBSV0lQcm90b2NvbEpTT05PYmplY3QKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6
KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkOwotLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmpl
Y3Q7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2Ug
Y29kZTooaW50KWNvZGU7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29w
eSkgTlNTdHJpbmcgKm1lc3NhZ2U7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21p
YywgYXNzaWduKSBpbnQgY29kZTsKLUBlbmQKLQotQHByb3RvY29sIFRlc3RQcm90b2NvbERhdGFi
YXNlRG9tYWluSGFuZGxlciA8TlNPYmplY3Q+Ci1Ab3B0aW9uYWwKLS0gKHZvaWQpZXhlY3V0ZUFs
bE9wdGlvbmFsUGFyYW1ldGVyc1dpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICpl
cnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoTlNBcnJheS8qPE5T
U3RyaW5nPiovICoqY29sdW1uTmFtZXMsIE5TU3RyaW5nICoqbm90ZXMsIGRvdWJsZSAqdGltZXN0
YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKip2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVj
dCAqKnBheWxvYWQsIGludCAqZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAq
KnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgKnNjcmVlbkNvbG9y
LCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERh
dGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IgKnByaW50Q29sb3Ip
KXN1Y2Nlc3NDYWxsYmFjayBjb2x1bW5OYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKWNv
bHVtbk5hbWVzIG5vdGVzOihOU1N0cmluZyAqKilub3RlcyB0aW1lc3RhbXA6KGRvdWJsZSAqKXRp
bWVzdGFtcCB2YWx1ZXM6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKil2YWx1ZXMgcGF5bG9hZDoo
UldJUHJvdG9jb2xKU09OT2JqZWN0ICoqKXBheWxvYWQgZGF0YWJhc2VJZDooaW50ICopZGF0YWJh
c2VJZCBzcWxFcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKilzcWxFcnJvciBzY3Jl
ZW5Db2xvcjooVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzICopc2NyZWVuQ29sb3Ig
YWx0ZXJuYXRlQ29sb3JzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopYWx0ZXJuYXRlQ29sb3Jz
IHByaW50Q29sb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1l
dGVyc1ByaW50Q29sb3IgKilwcmludENvbG9yOwotLSAodm9pZClleGVjdXRlTm9PcHRpb25hbFBh
cmFtZXRlcnNXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9y
Q2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAq
Y29sdW1uTmFtZXMsIE5TU3RyaW5nICpub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUldJUHJvdG9j
b2xKU09OT2JqZWN0ICp2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5bG9hZCwgaW50
IGRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKnNxbEVycm9yLCBUZXN0UHJv
dG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0cmlu
Zz4qLyAqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlv
bmFsUGFyYW1ldGVyc1ByaW50Q29sb3IgcHJpbnRDb2xvcikpc3VjY2Vzc0NhbGxiYWNrIGNvbHVt
bk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcyBub3RlczooTlNTdHJp
bmcgKilub3RlcyB0aW1lc3RhbXA6KGRvdWJsZSl0aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90b2Nv
bEpTT05PYmplY3QgKil2YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5
bG9hZCBkYXRhYmFzZUlkOihpbnQpZGF0YWJhc2VJZCBzcWxFcnJvcjooVGVzdFByb3RvY29sRGF0
YWJhc2VFcnJvciAqKXNxbEVycm9yIHNjcmVlbkNvbG9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZVBy
aW1hcnlDb2xvcnMpc2NyZWVuQ29sb3IgYWx0ZXJuYXRlQ29sb3JzOihOU0FycmF5Lyo8TlNTdHJp
bmc+Ki8gKilhbHRlcm5hdGVDb2xvcnMgcHJpbnRDb2xvcjooVGVzdFByb3RvY29sRGF0YWJhc2VF
eGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yKXByaW50Q29sb3I7Ci1AZW5kCi0K
LQotCi0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0
eU9iamVjdHMuaD4KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRl
c3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIK
LSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5o
PgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xJbnRlcm5hbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdp
dGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2lt
cG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgotCi1uYW1l
c3BhY2UgSW5zcGVjdG9yIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgotT3B0
aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1
ZSk7Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xQbGF0Zm9y
bSB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBs
YXRmb3JtQWxsOgotICAgICAgICByZXR1cm4gImFsbCJfczsKLSAgICBjYXNlIFRlc3RQcm90b2Nv
bFBsYXRmb3JtR2VuZXJpYzoKLSAgICAgICAgcmV0dXJuICJnZW5lcmljIl9zOwotICAgIGNhc2Ug
VGVzdFByb3RvY29sUGxhdGZvcm1JT1M6Ci0gICAgICAgIHJldHVybiAiaW9zIl9zOwotICAgIGNh
c2UgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzoKLSAgICAgICAgcmV0dXJuICJtYWNvcyJfczsK
LSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xQbGF0
Zm9ybT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYg
KHZhbHVlID09ICJhbGwiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1BbGw7
Ci0gICAgaWYgKHZhbHVlID09ICJnZW5lcmljIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2Nv
bFBsYXRmb3JtR2VuZXJpYzsKLSAgICBpZiAodmFsdWUgPT0gImlvcyIpCi0gICAgICAgIHJldHVy
biBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzsKLSAgICBpZiAodmFsdWUgPT0gIm1hY29zIikKLSAg
ICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M7Ci0gICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKLX0KLQotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3Rv
Y29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewot
ICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzUmVkOgotICAgICAgICBy
ZXR1cm4gInJlZCJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9y
c0dyZWVuOgotICAgICAgICByZXR1cm4gImdyZWVuIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29s
RGF0YWJhc2VQcmltYXJ5Q29sb3JzQmx1ZToKLSAgICAgICAgcmV0dXJuICJibHVlIl9zOwotICAg
IH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNl
UHJpbWFyeUNvbG9ycz4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17
Ci0gICAgaWYgKHZhbHVlID09ICJyZWQiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0
YWJhc2VQcmltYXJ5Q29sb3JzUmVkOwotICAgIGlmICh2YWx1ZSA9PSAiZ3JlZW4iKQotICAgICAg
ICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzR3JlZW47Ci0gICAgaWYg
KHZhbHVlID09ICJibHVlIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlUHJp
bWFyeUNvbG9yc0JsdWU7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotaW5saW5lIFN0
cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlv
bmFsUGFyYW1ldGVyc1ByaW50Q29sb3IgdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0g
ICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQ
cmludENvbG9yQ3lhbjoKLSAgICAgICAgcmV0dXJuICJjeWFuIl9zOwotICAgIGNhc2UgVGVzdFBy
b3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvck1hZ2Vu
dGE6Ci0gICAgICAgIHJldHVybiAibWFnZW50YSJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERh
dGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JZZWxsb3c6Ci0gICAg
ICAgIHJldHVybiAieWVsbG93Il9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVj
dXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckJsYWNrOgotICAgICAgICByZXR1cm4g
ImJsYWNrIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQ
cm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3I+IGZy
b21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9
PSAiY3lhbiIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxP
cHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQ3lhbjsKLSAgICBpZiAodmFsdWUgPT0gIm1hZ2Vu
dGEiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9u
YWxQYXJhbWV0ZXJzUHJpbnRDb2xvck1hZ2VudGE7Ci0gICAgaWYgKHZhbHVlID09ICJ5ZWxsb3ci
KQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQ
YXJhbWV0ZXJzUHJpbnRDb2xvclllbGxvdzsKLSAgICBpZiAodmFsdWUgPT0gImJsYWNrIikKLSAg
ICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1l
dGVyc1ByaW50Q29sb3JCbGFjazsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi1pbmxp
bmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxs
T3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvciB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUp
IHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1l
dGVyc1ByaW50Q29sb3JDeWFuOgotICAgICAgICByZXR1cm4gImN5YW4iX3M7Ci0gICAgY2FzZSBU
ZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9y
TWFnZW50YToKLSAgICAgICAgcmV0dXJuICJtYWdlbnRhIl9zOwotICAgIGNhc2UgVGVzdFByb3Rv
Y29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvclllbGxvdzoK
LSAgICAgICAgcmV0dXJuICJ5ZWxsb3ciX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFz
ZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQmxhY2s6Ci0gICAgICAgIHJl
dHVybiAiYmxhY2siX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8
VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xv
cj4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZh
bHVlID09ICJjeWFuIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0
ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JDeWFuOwotICAgIGlmICh2YWx1ZSA9PSAi
bWFnZW50YSIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxP
cHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yTWFnZW50YTsKLSAgICBpZiAodmFsdWUgPT0gInll
bGxvdyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRp
b25hbFBhcmFtZXRlcnNQcmludENvbG9yWWVsbG93OwotICAgIGlmICh2YWx1ZSA9PSAiYmxhY2si
KQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQ
YXJhbWV0ZXJzUHJpbnRDb2xvckJsYWNrOwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0K
LWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IgdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZh
bHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFy
YW1ldGVyc1ByaW50Q29sb3JDeWFuOgotICAgICAgICByZXR1cm4gImN5YW4iX3M7Ci0gICAgY2Fz
ZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29s
b3JNYWdlbnRhOgotICAgICAgICByZXR1cm4gIm1hZ2VudGEiX3M7Ci0gICAgY2FzZSBUZXN0UHJv
dG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JZZWxsb3c6
Ci0gICAgICAgIHJldHVybiAieWVsbG93Il9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJh
c2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQmxhY2s6Ci0gICAgICAgIHJl
dHVybiAiYmxhY2siX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8
VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9y
PiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFs
dWUgPT0gImN5YW4iKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRl
Tm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQ3lhbjsKLSAgICBpZiAodmFsdWUgPT0gIm1h
Z2VudGEiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRp
b25hbFBhcmFtZXRlcnNQcmludENvbG9yTWFnZW50YTsKLSAgICBpZiAodmFsdWUgPT0gInllbGxv
dyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFs
UGFyYW1ldGVyc1ByaW50Q29sb3JZZWxsb3c7Ci0gICAgaWYgKHZhbHVlID09ICJibGFjayIpCi0g
ICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1l
dGVyc1ByaW50Q29sb3JCbGFjazsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi1pbmxp
bmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9P
cHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkg
ewotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRl
cnNQcmludENvbG9yQ3lhbjoKLSAgICAgICAgcmV0dXJuICJjeWFuIl9zOwotICAgIGNhc2UgVGVz
dFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yTWFn
ZW50YToKLSAgICAgICAgcmV0dXJuICJtYWdlbnRhIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29s
RGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yWWVsbG93OgotICAg
ICAgICByZXR1cm4gInllbGxvdyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhl
Y3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckJsYWNrOgotICAgICAgICByZXR1cm4g
ImJsYWNrIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQ
cm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvcj4gZnJv
bVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09
ICJjeWFuIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0
aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckN5YW47Ci0gICAgaWYgKHZhbHVlID09ICJtYWdlbnRh
IikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQ
YXJhbWV0ZXJzUHJpbnRDb2xvck1hZ2VudGE7Ci0gICAgaWYgKHZhbHVlID09ICJ5ZWxsb3ciKQot
ICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFt
ZXRlcnNQcmludENvbG9yWWVsbG93OwotICAgIGlmICh2YWx1ZSA9PSAiYmxhY2siKQotICAgICAg
ICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQ
cmludENvbG9yQmxhY2s7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwt
Y2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgot
Ci0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJz
ZXIuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRl
Lmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbnRlcmZhY2UgVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zIChEYXRhYmFzZURvbWFpbikKLQotKyAodm9pZClfcGFyc2VEYXRh
YmFzZUlkOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLSsg
KHZvaWQpX3BhcnNlUHJpbWFyeUNvbG9yczooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxv
YWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZUNvbG9yTGlzdDooTlNBcnJheS8qPE5TU3Ry
aW5nPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotKyAodm9pZClfcGFy
c2VFcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9h
ZDooaWQpcGF5bG9hZDsKLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zIChEYXRhYmFzZURvbWFpbikKLQotKyAodm9pZClfcGFyc2VEYXRhYmFzZUlk
OihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TTnVtYmVyIGNsYXNzXSk7Ci0g
ICAgKm91dFZhbHVlID0gKE5TTnVtYmVyICopcGF5bG9hZDsKLX0KLQotKyAodm9pZClfcGFyc2VQ
cmltYXJ5Q29sb3JzOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9h
ZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TU3RyaW5n
IGNsYXNzXSk7Ci0gICAgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3Jz
PiByZXN1bHQgPSBJbnNwZWN0b3I6OmZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xEYXRh
YmFzZVByaW1hcnlDb2xvcnM+KHBheWxvYWQpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFE
X0VOVU1fVkFMVUUocmVzdWx0LCBAIlByaW1hcnlDb2xvcnMiKTsKLSAgICAqb3V0VmFsdWUgPSBA
KHJlc3VsdC52YWx1ZSgpKTsKLX0KLQotKyAodm9pZClfcGFyc2VDb2xvckxpc3Q6KE5TQXJyYXkv
KjxOU1N0cmluZz4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TQXJyYXkvKjxOU1N0cmlu
Zz4qLyBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IChOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilw
YXlsb2FkOwotfQotCi0rICh2b2lkKV9wYXJzZUVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVy
cm9yICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7Ci0gICAg
Km91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGFsbG9jXSBpbml0V2l0aFBh
eWxvYWQ6cGF5bG9hZF07Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMu
bW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlv
bmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0j
aW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPFdlYkluc3Bl
Y3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0
aW9ucy5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIElu
c3BlY3RvcjsKLQotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcgot
Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxO
U1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0
XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJ
UkVEX1BST1BFUlRZKHBheWxvYWRbQCJtZXNzYWdlIl0sIEAibWVzc2FnZSIpOwotICAgIHNlbGYu
bWVzc2FnZSA9IHBheWxvYWRbQCJtZXNzYWdlIl07Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9S
X1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJjb2RlIl0sIEAiY29kZSIpOwotICAgIHNlbGYu
Y29kZSA9IFtwYXlsb2FkW0AiY29kZSJdIGludGVnZXJWYWx1ZV07Ci0KLSAgICByZXR1cm4gc2Vs
ZjsKLX0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2Nv
bEpTT05PYmplY3QgKilvYmplY3QKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRo
SlNPTk9iamVjdDpbb2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0KCldKSkKLSAgICAgICAgcmV0dXJu
IG5pbDsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhN
ZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZTooaW50KWNvZGUKLXsKLSAgICBpZiAoIShz
ZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkobWVzc2FnZSwgQCJtZXNzYWdlIik7Ci0KLSAg
ICBzZWxmLm1lc3NhZ2UgPSBtZXNzYWdlOwotICAgIHNlbGYuY29kZSA9IGNvZGU7Ci0KLSAgICBy
ZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClzZXRNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UK
LXsKLSAgICBbc3VwZXIgc2V0U3RyaW5nOm1lc3NhZ2UgZm9yS2V5OkAibWVzc2FnZSJdOwotfQot
Ci0tIChOU1N0cmluZyAqKW1lc3NhZ2UKLXsKLSAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0Zvcktl
eTpAIm1lc3NhZ2UiXTsKLX0KLQotLSAodm9pZClzZXRDb2RlOihpbnQpY29kZQotewotICAgIFtz
dXBlciBzZXRJbnRlZ2VyOmNvZGUgZm9yS2V5OkAiY29kZSJdOwotfQotCi0tIChpbnQpY29kZQot
ewotICAgIHJldHVybiBbc3VwZXIgaW50ZWdlckZvcktleTpAImNvZGUiXTsKLX0KLQotQGVuZAot
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVk
L2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZGVmaW5p
dGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbi1yZXN1bHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGQ0YzBmZTNmZTNjNmJiZGMxMDM2MmQxZTBjMzlmOThjN2FjMzZlNWQuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZGVmaW5pdGlv
bnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbi1yZXN1bHQKKysrIC9kZXYvbnVsbApAQCAtMSw4NzAg
KzAsMCBAQAotIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRm
b3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLSMjIyBF
bmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0KLSNpbmNsdWRlICJUZXN0UHJv
dG9jb2xUeXBlcy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRS
b3V0ZXIuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEFsdGVybmF0ZUJhY2tl
bmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJl
ZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNo
ZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9Ci0gICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tl
bmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsg
fQotcHJpdmF0ZToKLSAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3Bh
dGNoZXI7Ci19OwotCi0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotI2VuZGlmIC8v
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotIyMjIEVuZCBGaWxlOiBU
ZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRl
ZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9j
b2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNl
IEluc3BlY3RvciB7Ci0KLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCi0KLQotfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMu
aAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUg
PHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCi0jaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVy
cy5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAK
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25j
ZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPHd0Zi9KU09O
VmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJ
bnNwZWN0b3IgewotCi1jbGFzcyBGcm9udGVuZFJvdXRlcjsKLQotfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRl
IDx3dGYvQXNzZXJ0aW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLW5hbWVz
cGFjZSBQcm90b2NvbCB7Ci0KLQotCi0KLQotCi0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2Nv
bAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
T2JqZWN0cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRm
b3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLQotI2lu
Y2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQot
bmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLQotCi19IC8v
IG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWlu
UHRyLmg+Ci0KLQotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi19IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMu
aAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxh
dGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0j
aW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVy
cy5oIgotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgot
Ci1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rv
ci9UZXN0UHJvdG9jb2wuaD4KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQi
KSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAotQGVu
ZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJv
dG9jb2xDb25maWd1cmF0aW9uLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgi
Ci0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+Ci0jaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2lt
cG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0KLXVz
aW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xD
b25maWd1cmF0aW9uCi17Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29u
dHJvbGxlcjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVu
dGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtzdXBl
ciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJU
KGNvbnRyb2xsZXIpOwotICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1cm4g
c2VsZjsKLX0KLQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQot
Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0u
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0
ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMuaCIKLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFj
ZSBJbnNwZWN0b3I7Ci0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNo
ZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8Rm91bmRh
dGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpT
T05PYmplY3QuaD4KLQotCi0KLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3Rv
Y29sUGxhdGZvcm0pIHsKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbCwKLSAgICBUZXN0UHJv
dG9jb2xQbGF0Zm9ybUdlbmVyaWMsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1JT1MsCi0gICAg
VGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUywKLX07Ci0KLQotCi0KLQotCi0KLQotCi0KLSNpbXBv
cnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4K
LQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sSW50ZXJuYWwuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmlu
aXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0
UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVn
bWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5o
PgotCi0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJv
dG9jb2wuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lv
bnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9iakNF
bnVtVHlwZT4KLU9wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0
IFN0cmluZyYgdmFsdWUpOwotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFBy
b3RvY29sUGxhdGZvcm0gdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBU
ZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDoKLSAgICAgICAgcmV0dXJuICJhbGwiX3M7Ci0gICAgY2Fz
ZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM6Ci0gICAgICAgIHJldHVybiAiZ2VuZXJpYyJf
czsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOgotICAgICAgICByZXR1cm4gImlv
cyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M6Ci0gICAgICAgIHJldHVy
biAibWFjb3MiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVz
dFByb3RvY29sUGxhdGZvcm0+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVl
KQotewotICAgIGlmICh2YWx1ZSA9PSAiYWxsIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2Nv
bFBsYXRmb3JtQWxsOwotICAgIGlmICh2YWx1ZSA9PSAiZ2VuZXJpYyIpCi0gICAgICAgIHJldHVy
biBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM7Ci0gICAgaWYgKHZhbHVlID09ICJpb3MiKQot
ICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1JT1M7Ci0gICAgaWYgKHZhbHVlID09
ICJtYWNvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOwotICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0j
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQg
IlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90
b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0K
LQotCi0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQot
Ci0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90
b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5o
IgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4K
LSNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgot
Ci11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2RvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNv
bi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJpYy9leHBlY3RlZC9kb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24tcmVzdWx0CmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNWI1OTE3YWEwYjQxMWMyOTk3MjlkZjE4NTczN2Rl
NmViYzY3MzVlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4
cGVjdGVkL2RvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbi1yZXN1bHQKKysrIC9kZXYvbnVsbApA
QCAtMSwxMDYzICswLDAgQEAKLSMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFu
ZHMuanMKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJs
ZVR5cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
Ly8gRG9tYWluCi1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJEb21haW4iLCBudWxs
KTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJEb21haW4uQ29tbWFuZCIsIG51
bGwsIFtdLCBbXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnQoIkRvbWFpbi5FdmVu
dCIsIG51bGwsIFtdKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW5EaXNwYXRjaGVy
ID0gSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRpc3BhdGNoZXIuYmluZChJbnNwZWN0b3JCYWNr
ZW5kLCAiRG9tYWluIik7Ci1JbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJEb21haW4i
LCBbIndlYi1wYWdlIl0pOwotIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMu
anMKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMu
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21h
IG9uY2UKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi0j
aW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFz
cyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNr
ZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBt
X2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQotICAgIEJhY2tlbmRE
aXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERp
c3BhdGNoZXIuZ2V0KCk7IH0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVy
PiBtX2JhY2tlbmREaXNwYXRjaGVyOwotfTsKLQotCi1jbGFzcyBBbHRlcm5hdGVEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJs
aWM6Ci0gICAgdmlydHVhbCB+QWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIoKSB7IH0K
LSAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChsb25nIGNhbGxJZCkgPSAwOwotfTsKLQotfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKLSMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNl
Ci0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXR5cGVkZWYgU3RyaW5nIEVy
cm9yU3RyaW5nOwotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
Ci1jbGFzcyBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjsKLSNlbmRpZiAvLyBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQotY2xhc3MgRG9tYWluQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChF
cnJvclN0cmluZyYpID0gMDsKLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIH5Eb21haW5CYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIoKTsKLX07Ci0KLWNsYXNzIERvbWFpbkJhY2tlbmREaXNwYXRjaGVy
IGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoK
LSAgICBzdGF0aWMgUmVmPERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERp
c3BhdGNoZXImLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICB2b2lkIGRp
c3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9i
amVjdD4mJiBtZXNzYWdlKSBmaW5hbDsKLXByaXZhdGU6Ci0gICAgdm9pZCBDb21tYW5kKGxvbmcg
cmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwotI2lmIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotcHVibGljOgotICAgIHZvaWQgc2V0
QWx0ZXJuYXRlRGlzcGF0Y2hlcihBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciogYWx0
ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNw
YXRjaGVyOyB9Ci1wcml2YXRlOgotICAgIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVy
KiBtX2FsdGVybmF0ZURpc3BhdGNoZXIgeyBudWxscHRyIH07Ci0jZW5kaWYKLXByaXZhdGU6Ci0g
ICAgRG9tYWluQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImLCBEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIqIG1fYWdlbnQgeyBudWxscHRyIH07Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
LSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVz
dEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1
ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
LQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotI2luY2x1ZGUg
IlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKLQotRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+RG9tYWluQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9Ci0KLVJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hl
cj4gRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYgYmFj
a2VuZERpc3BhdGNoZXIsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCi17
Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRG9tYWluQmFja2VuZERpc3BhdGNoZXIoYmFja2Vu
ZERpc3BhdGNoZXIsIGFnZW50KSk7Ci19Ci0KLURvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpEb21h
aW5CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIs
IERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCi0gICAgOiBTdXBwbGVtZW50
YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKLSAgICAsIG1fYWdlbnQoYWdl
bnQpCi17Ci0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9t
YWluKCJEb21haW4iX3MsIHRoaXMpOwotfQotCi12b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVy
OjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09O
OjpPYmplY3Q+JiYgbWVzc2FnZSkKLXsKLSAgICBSZWY8RG9tYWluQmFja2VuZERpc3BhdGNoZXI+
IHByb3RlY3QoKnRoaXMpOwotCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVyczsK
LSAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFyYW1ldGVycyk7Ci0KLSAgICBp
ZiAobWV0aG9kID09ICJDb21tYW5kIikKLSAgICAgICAgQ29tbWFuZChyZXF1ZXN0SWQsIFdURk1v
dmUocGFyYW1ldGVycykpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+
cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICIn
RG9tYWluLiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7Ci19Ci0KLXZvaWQgRG9tYWlu
QmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpP
YmplY3Q+JiYpCi17Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
Ci0gICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURp
c3BhdGNoZXItPkNvbW1hbmQocmVxdWVzdElkKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNl
bmRpZgotCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVz
dWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtX2FnZW50LT5Db21tYW5kKGVycm9y
KTsKLQotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOwotICAg
IGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihC
YWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJsZVR5cGVzLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBv
bmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8d3RmL0pT
T05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNl
IEluc3BlY3RvciB7Ci0KLWNsYXNzIEZyb250ZW5kUm91dGVyOwotCi1jbGFzcyBEb21haW5Gcm9u
dGVuZERpc3BhdGNoZXIgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgot
ICAgIERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcihGcm9udGVuZFJvdXRlciYgZnJvbnRlbmRSb3V0
ZXIpIDogbV9mcm9udGVuZFJvdXRlcihmcm9udGVuZFJvdXRlcikgeyB9Ci0gICAgdm9pZCBFdmVu
dCgpOwotcHJpdmF0ZToKLSAgICBGcm9udGVuZFJvdXRlciYgbV9mcm9udGVuZFJvdXRlcjsKLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmRE
aXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5j
cHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJsZVR5
cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCi0K
LSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXZv
aWQgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVyOjpFdmVudCgpCi17Ci0gICAgUmVmPEpTT046Ok9i
amVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNz
YWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7Ci0KLSAgICBtX2Zy
b250ZW5kUm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwotfQot
Ci19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmRE
aXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMu
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21h
IG9uY2UKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMu
aD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsK
LQotCi0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLQotCi0KLQotCi0KLQotCi19IC8vIG5hbWVz
cGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sT2JqZWN0cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmpl
Y3RzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dh
YmxlVHlwZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgot
Ci0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0K
LX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0j
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0
ci5oPgotCi1AcHJvdG9jb2wgVGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcjsKLQotbmFt
ZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotY2xhc3MgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmRE
aXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVy
IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBPYmpDSW5zcGVj
dG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFu
ZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQotICAgIHZvaWQgQ29tbWFu
ZChsb25nIHJlcXVlc3RJZCkgZmluYWw7Ci1wcml2YXRlOgotICAgIFJldGFpblB0cjxpZDxUZXN0
UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKLX07Ci0KLX0gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNw
YXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hl
cnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJs
ZVR5cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hl
cnMuaCIKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW5jbHVkZSAiVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4K
LQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXZvaWQgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tl
bmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElkKQotewotICAgIGlmICghW21fZGVs
ZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihDb21tYW5kV2l0aEVycm9yQ2FsbGJh
Y2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJl
cG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90
Rm91bmQsICInRG9tYWluLkNvbW1hbmQnIHdhcyBub3QgZm91bmQiX3MpOwotICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBC
YWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKLSAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICB9OwotCi0gICAgaWQgc3VjY2Vz
c0NhbGxiYWNrID0gXnsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNl
KHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2UpOwotICAgIH07Ci0KLSAg
ICBbbV9kZWxlZ2F0ZSBDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNj
ZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKLX0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0K
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxXZWJJbnNw
ZWN0b3IvVGVzdFByb3RvY29sLmg+Ci0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZh
dWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QK
LUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4sIHNldHRlcj1zZXREb21haW5IYW5kbGVyOikg
aWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4gZG9tYWluSGFuZGxlcjsKLUBwcm9w
ZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnRE
aXNwYXRjaGVyICpkb21haW5FdmVudERpc3BhdGNoZXI7Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbENvbmZpZ3VyYXRpb24ubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBk
b21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgotCi0j
aW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFj
a2VuZERpc3BhdGNoZXJzLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNw
YXRjaGFibGVBZ2VudC5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNw
ZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwot
Ci1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgotewotICAgIEF1Z21l
bnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci0gICAgaWQ8VGVzdFByb3Rv
Y29sRG9tYWluRG9tYWluSGFuZGxlcj4gX2RvbWFpbkhhbmRsZXI7Ci0gICAgVGVzdFByb3RvY29s
RG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyICpfZG9tYWluRXZlbnREaXNwYXRjaGVyOwotfQot
Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3Rv
ckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAg
IGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7
Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQotCi0t
ICh2b2lkKWRlYWxsb2MKLXsKLSAgICBbX2RvbWFpbkhhbmRsZXIgcmVsZWFzZV07Ci0gICAgW19k
b21haW5FdmVudERpc3BhdGNoZXIgcmVsZWFzZV07Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQot
Ci0tICh2b2lkKXNldERvbWFpbkhhbmRsZXI6KGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhh
bmRsZXI+KWhhbmRsZXIKLXsKLSAgICBpZiAoaGFuZGxlciA9PSBfZG9tYWluSGFuZGxlcikKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgW19kb21haW5IYW5kbGVyIHJlbGVhc2VdOwotICAgIF9kb21h
aW5IYW5kbGVyID0gW2hhbmRsZXIgcmV0YWluXTsKLQotICAgIGF1dG8gYWx0ZXJuYXRlRGlzcGF0
Y2hlciA9IG1ha2VVbmlxdWU8T2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiho
YW5kbGVyKTsKLSAgICBhdXRvIGFsdGVybmF0ZUFnZW50ID0gbWFrZVVuaXF1ZTxBbHRlcm5hdGVE
aXNwYXRjaGFibGVBZ2VudDxEb21haW5CYWNrZW5kRGlzcGF0Y2hlciwgQWx0ZXJuYXRlRG9tYWlu
QmFja2VuZERpc3BhdGNoZXI+PigiRG9tYWluIl9zLCAqX2NvbnRyb2xsZXIsIFdURk1vdmUoYWx0
ZXJuYXRlRGlzcGF0Y2hlcikpOwotICAgIF9jb250cm9sbGVyLT5hcHBlbmRFeHRyYUFnZW50KFdU
Rk1vdmUoYWx0ZXJuYXRlQWdlbnQpKTsKLX0KLQotLSAoaWQ8VGVzdFByb3RvY29sRG9tYWluRG9t
YWluSGFuZGxlcj4pZG9tYWluSGFuZGxlcgotewotICAgIHJldHVybiBfZG9tYWluSGFuZGxlcjsK
LX0KLQotLSAoVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyICopZG9tYWlu
RXZlbnREaXNwYXRjaGVyCi17Ci0gICAgaWYgKCFfZG9tYWluRXZlbnREaXNwYXRjaGVyKQotICAg
ICAgICBfZG9tYWluRXZlbnREaXNwYXRjaGVyID0gW1tUZXN0UHJvdG9jb2xEb21haW5Eb21haW5F
dmVudERpc3BhdGNoZXIgYWxsb2NdIGluaXRXaXRoQ29udHJvbGxlcjpfY29udHJvbGxlcl07Ci0g
ICAgcmV0dXJuIF9kb21haW5FdmVudERpc3BhdGNoZXI7Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBkb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIK
LQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDx3dGYv
SlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW1wbGVtZW50
YXRpb24gVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyCi17Ci0gICAgQXVn
bWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKLX0KLQotLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVy
Kiljb250cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYp
Ci0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIpOwotICAgIF9jb250
cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClFdmVu
dAotewotICAgIGNvbnN0IEZyb250ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29udHJvbGxlci0+ZnJv
bnRlbmRSb3V0ZXIoKTsKLQotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2Qi
X3MsICJEb21haW4uRXZlbnQiX3MpOwotICAgIHJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2Ut
PnRvSlNPTlN0cmluZygpKTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sRXZlbnREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJsZVR5cGVz
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9y
dCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQ
cm90b2NvbEpTT05PYmplY3QuaD4KLQotCi0KLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwg
VGVzdFByb3RvY29sUGxhdGZvcm0pIHsKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbCwKLSAg
ICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWMsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1J
T1MsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUywKLX07Ci0KLQotCi0KLQotQHByb3Rv
Y29sIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXIgPE5TT2JqZWN0PgotQG9wdGlvbmFs
Ci0tICh2b2lkKUNvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJy
b3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKHZvaWQpKXN1Y2Nlc3ND
YWxsYmFjazsKLUBlbmQKLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkp
Ci1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciA6IE5T
T2JqZWN0Ci0tICh2b2lkKUV2ZW50OwotQGVuZAotCi0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9S
V0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4KLQotIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2wuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMu
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0
ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRl
LmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xs
ZXIuaD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLUBpbnRlcmZhY2UgVGVzdFByb3Rv
Y29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyIChQcml2YXRlKQotLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoQ29udHJvbGxlcjooSW5zcGVjdG9yOjpBdWdtZW50YWJsZUluc3BlY3RvckNvbnRy
b2xsZXIqKWNvbnRyb2xsZXI7Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJ
bnRlcm5hbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMu
aAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlw
ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1w
b3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFy
cmF5Q29udmVyc2lvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIE9iakNFbnVtVHlwZT4KLU9wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29s
U3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOwotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xT
dHJpbmcoVGVzdFByb3RvY29sUGxhdGZvcm0gdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7
Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDoKLSAgICAgICAgcmV0dXJuICJhbGwi
X3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM6Ci0gICAgICAgIHJldHVy
biAiZ2VuZXJpYyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOgotICAgICAg
ICByZXR1cm4gImlvcyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M6Ci0g
ICAgICAgIHJldHVybiAibWFjb3MiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUg
T3B0aW9uYWw8VGVzdFByb3RvY29sUGxhdGZvcm0+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBT
dHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiYWxsIikKLSAgICAgICAgcmV0dXJu
IFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOwotICAgIGlmICh2YWx1ZSA9PSAiZ2VuZXJpYyIpCi0g
ICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM7Ci0gICAgaWYgKHZhbHVl
ID09ICJpb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1JT1M7Ci0gICAg
aWYgKHZhbHVlID09ICJtYWNvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9y
bU1hY09TOwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2lt
cG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JX
SVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3Rv
cjsKLQotCi0KLQotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
Lm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIK
LSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0j
aW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQot
dXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9kb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1k
b21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9kb21haW4tdGFyZ2V0VHlw
ZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1yZXN1bHQKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGQzMGYyNGI1YzM1Mjg5Njk5NDVjZTdmZTE3OGIwMjEyYjVlNDhk
NTEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQv
ZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tcmVz
dWx0CisrKyAvZGV2L251bGwKQEAgLTEsMTA2MyArMCwwIEBACi0jIyMgQmVnaW4gRmlsZTogSW5z
cGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotLy8gRG9tYWluCi1J
bnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJEb21haW4iLCBudWxsKTsKLUluc3BlY3Rv
ckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJEb21haW4uQ29tbWFuZCIsIFsicGFnZSIsICJ3b3Jr
ZXIiXSwgW10sIFtdKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudCgiRG9tYWluLkV2
ZW50IiwgbnVsbCwgW10pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbkRpc3BhdGNo
ZXIgPSBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRGlzcGF0Y2hlci5iaW5kKEluc3BlY3RvckJh
Y2tlbmQsICJEb21haW4iKTsKLUluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkRvbWFp
biIsIFsicGFnZSJdKTsKLSMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpz
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZS1tYXRjaGlu
Zy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKLSNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0KLW5hbWVz
cGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1w
dWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3Bh
dGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNw
YXRjaGVyKTsgfQotICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNv
bnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KLXByaXZhdGU6Ci0gICAg
UmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwotfTsKLQotCi1j
bGFzcyBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+QWx0ZXJuYXRlRG9tYWlu
QmFja2VuZERpc3BhdGNoZXIoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChsb25nIGNh
bGxJZCkgPSAwOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSNlbmRpZiAvLyBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSMjIyBFbmQgRmlsZTogVGVz
dEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFj
a2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21h
aW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJp
bmc7Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLWNsYXNz
IEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyOwotI2VuZGlmIC8vIEVOQUJMRShJTlNQ
RUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi1jbGFzcyBEb21haW5CYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXIgewotcHVibGljOgotICAgIHZpcnR1YWwgdm9pZCBDb21tYW5kKEVycm9yU3Ry
aW5nJikgPSAwOwotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgfkRvbWFpbkJhY2tlbmREaXNwYXRj
aGVySGFuZGxlcigpOwotfTsKLQotY2xhc3MgRG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwg
OiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHN0
YXRpYyBSZWY8RG9tYWluQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hl
ciYsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIHZvaWQgZGlzcGF0Y2go
bG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYm
IG1lc3NhZ2UpIGZpbmFsOwotcHJpdmF0ZToKLSAgICB2b2lkIENvbW1hbmQobG9uZyByZXF1ZXN0
SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0jaWYgRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi1wdWJsaWM6Ci0gICAgdm9pZCBzZXRBbHRlcm5h
dGVEaXNwYXRjaGVyKEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVE
aXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7
IH0KLXByaXZhdGU6Ci0gICAgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIqIG1fYWx0
ZXJuYXRlRGlzcGF0Y2hlciB7IG51bGxwdHIgfTsKLSNlbmRpZgotcHJpdmF0ZToKLSAgICBEb21h
aW5CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYsIERvbWFpbkJhY2tlbmREaXNw
YXRjaGVySGFuZGxlciopOwotICAgIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9h
Z2VudCB7IG51bGxwdHIgfTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVu
ZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
ZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pT
T05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKLSNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCi0j
ZW5kaWYKLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLURvbWFpbkJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlcjo6fkRvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQotCi1SZWY8RG9t
YWluQmFja2VuZERpc3BhdGNoZXI+IERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoQmFj
a2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIqIGFnZW50KQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERvbWFpbkJhY2tl
bmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOwotfQotCi1Eb21haW5CYWNr
ZW5kRGlzcGF0Y2hlcjo6RG9tYWluQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXIm
IGJhY2tlbmREaXNwYXRjaGVyLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50
KQotICAgIDogU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIp
Ci0gICAgLCBtX2FnZW50KGFnZW50KQotewotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lz
dGVyRGlzcGF0Y2hlckZvckRvbWFpbigiRG9tYWluIl9zLCB0aGlzKTsKLX0KLQotdm9pZCBEb21h
aW5CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmlu
ZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCi17Ci0gICAgUmVmPERvbWFp
bkJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKLQotICAgIFJlZlB0cjxKU09OOjpP
YmplY3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBh
cmFtZXRlcnMpOwotCi0gICAgaWYgKG1ldGhvZCA9PSAiQ29tbWFuZCIpCi0gICAgICAgIENvbW1h
bmQocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKLSAgICBlbHNlCi0gICAgICAgIG1f
YmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6
Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIp
OwotfQotCi12b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVz
dElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQotewotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQotICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAg
ICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5Db21tYW5kKHJlcXVlc3RJZCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJl
ZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgbV9h
Z2VudC0+Q29tbWFuZChlcnJvcik7Ci0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJl
c3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJl
cG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3Zl
KGVycm9yKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6
IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlu
LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNs
dWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7
Ci0KLWNsYXNzIEZyb250ZW5kUm91dGVyOwotCi1jbGFzcyBEb21haW5Gcm9udGVuZERpc3BhdGNo
ZXIgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIERvbWFpbkZy
b250ZW5kRGlzcGF0Y2hlcihGcm9udGVuZFJvdXRlciYgZnJvbnRlbmRSb3V0ZXIpIDogbV9mcm9u
dGVuZFJvdXRlcihmcm9udGVuZFJvdXRlcikgeyB9Ci0gICAgdm9pZCBFdmVudCgpOwotcHJpdmF0
ZToKLSAgICBGcm9udGVuZFJvdXRlciYgbV9mcm9udGVuZFJvdXRlcjsKLX07Ci0KLX0gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5o
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21h
aW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlz
cGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5k
Um91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5z
cGVjdG9yIHsKLQotdm9pZCBEb21haW5Gcm9udGVuZERpc3BhdGNoZXI6OkV2ZW50KCkKLXsKLSAg
ICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9z
KTsKLQotICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05T
dHJpbmcoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6
IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sT2JqZWN0cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRh
cmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi1uYW1lc3BhY2Ug
UHJvdG9jb2wgewotCi0KLQotCi0KLQotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQot
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVj
dHMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21h
aW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2Jq
ZWN0cy5oIgotCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotbmFtZXNwYWNlIFByb3RvY29s
IHsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1
Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlz
cGF0Y2hlcnMuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLUBwcm90b2NvbCBUZXN0
UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyOwotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQot
Ci1jbGFzcyBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJs
aWMgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIgewotICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwotcHVibGljOgotICAgIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0
Y2hlcihpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVs
ZWdhdGUgPSBoYW5kbGVyOyB9Ci0gICAgdm9pZCBDb21tYW5kKGxvbmcgcmVxdWVzdElkKSBmaW5h
bDsKLXByaXZhdGU6Ci0gICAgUmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhh
bmRsZXI+PiBtX2RlbGVnYXRlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1
Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3Bh
dGNoZXJzLmgiCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2luY2x1ZGUg
IlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVz
Lmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi12b2lkIE9iakNJbnNwZWN0b3JEb21haW5C
YWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVlc3RJZCkKLXsKLSAgICBpZiAoIVtt
X2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoQ29tbWFuZFdpdGhFcnJvckNh
bGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigp
LT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhv
ZE5vdEZvdW5kLCAiJ0RvbWFpbi5Db21tYW5kJyB3YXMgbm90IGZvdW5kIl9zKTsKLSAgICAgICAg
YmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewot
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJ
ZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7Ci0gICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgfTsKLQotICAgIGlkIHN1
Y2Nlc3NDYWxsYmFjayA9IF57Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNw
b25zZShyZXF1ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKLSAgICB9Owot
Ci0gICAgW21fZGVsZWdhdGUgQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sg
c3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107Ci19Ci0KLQotfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJz
Lm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1k
b21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+Ci0KLV9f
YXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJv
dG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRh
aW4sIHNldHRlcj1zZXREb21haW5IYW5kbGVyOikgaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWlu
SGFuZGxlcj4gZG9tYWluSGFuZGxlcjsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkg
VGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyICpkb21haW5FdmVudERpc3Bh
dGNoZXI7Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9u
LmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1k
b21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCi0KLSNp
bXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNr
ZW5kRGlzcGF0Y2hlcnMuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3Bh
dGNoYWJsZUFnZW50Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3Bl
Y3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVy
bmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0K
LUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCi17Ci0gICAgQXVnbWVu
dGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKLSAgICBpZDxUZXN0UHJvdG9j
b2xEb21haW5Eb21haW5IYW5kbGVyPiBfZG9tYWluSGFuZGxlcjsKLSAgICBUZXN0UHJvdG9jb2xE
b21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKl9kb21haW5FdmVudERpc3BhdGNoZXI7Ci19Ci0K
LS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9y
Q29udHJvbGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAg
aWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsK
LSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0g
KHZvaWQpZGVhbGxvYwotewotICAgIFtfZG9tYWluSGFuZGxlciByZWxlYXNlXTsKLSAgICBbX2Rv
bWFpbkV2ZW50RGlzcGF0Y2hlciByZWxlYXNlXTsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0K
LS0gKHZvaWQpc2V0RG9tYWluSGFuZGxlcjooaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFu
ZGxlcj4paGFuZGxlcgotewotICAgIGlmIChoYW5kbGVyID09IF9kb21haW5IYW5kbGVyKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBbX2RvbWFpbkhhbmRsZXIgcmVsZWFzZV07Ci0gICAgX2RvbWFp
bkhhbmRsZXIgPSBbaGFuZGxlciByZXRhaW5dOwotCi0gICAgYXV0byBhbHRlcm5hdGVEaXNwYXRj
aGVyID0gbWFrZVVuaXF1ZTxPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXI+KGhh
bmRsZXIpOwotICAgIGF1dG8gYWx0ZXJuYXRlQWdlbnQgPSBtYWtlVW5pcXVlPEFsdGVybmF0ZURp
c3BhdGNoYWJsZUFnZW50PERvbWFpbkJhY2tlbmREaXNwYXRjaGVyLCBBbHRlcm5hdGVEb21haW5C
YWNrZW5kRGlzcGF0Y2hlcj4+KCJEb21haW4iX3MsICpfY29udHJvbGxlciwgV1RGTW92ZShhbHRl
cm5hdGVEaXNwYXRjaGVyKSk7Ci0gICAgX2NvbnRyb2xsZXItPmFwcGVuZEV4dHJhQWdlbnQoV1RG
TW92ZShhbHRlcm5hdGVBZ2VudCkpOwotfQotCi0tIChpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21h
aW5IYW5kbGVyPilkb21haW5IYW5kbGVyCi17Ci0gICAgcmV0dXJuIF9kb21haW5IYW5kbGVyOwot
fQotCi0tIChUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKilkb21haW5F
dmVudERpc3BhdGNoZXIKLXsKLSAgICBpZiAoIV9kb21haW5FdmVudERpc3BhdGNoZXIpCi0gICAg
ICAgIF9kb21haW5FdmVudERpc3BhdGNoZXIgPSBbW1Rlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2
ZW50RGlzcGF0Y2hlciBhbGxvY10gaW5pdFdpdGhDb250cm9sbGVyOl9jb250cm9sbGVyXTsKLSAg
ICByZXR1cm4gX2RvbWFpbkV2ZW50RGlzcGF0Y2hlcjsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQg
IlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5oIgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNl
IEluc3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2
ZW50RGlzcGF0Y2hlcgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2Nv
bnRyb2xsZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21l
bnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3Vw
ZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VS
VChjb250cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJu
IHNlbGY7Ci19Ci0KLS0gKHZvaWQpRXZlbnQKLXsKLSAgICBjb25zdCBGcm9udGVuZFJvdXRlciYg
cm91dGVyID0gX2NvbnRyb2xsZXItPmZyb250ZW5kUm91dGVyKCk7Ci0KLSAgICBSZWY8SlNPTjo6
T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1l
c3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9zKTsKLSAgICByb3V0
ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Ci19Ci0KLUBlbmQKLQot
Ci0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8Rm91
bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2Nv
bEpTT05PYmplY3QuaD4KLQotCi0KLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFBy
b3RvY29sUGxhdGZvcm0pIHsKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbCwKLSAgICBUZXN0
UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWMsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1JT1MsCi0g
ICAgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUywKLX07Ci0KLQotCi0KLQotQHByb3RvY29sIFRl
c3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXIgPE5TT2JqZWN0PgotQG9wdGlvbmFsCi0tICh2
b2lkKUNvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVy
cm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKHZvaWQpKXN1Y2Nlc3NDYWxsYmFj
azsKLUBlbmQKLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50
ZXJmYWNlIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciA6IE5TT2JqZWN0
Ci0tICh2b2lkKUV2ZW50OwotQGVuZAotCi0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90
b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2wuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRv
bWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3Rv
Y29sSlNPTk9iamVjdFByaXZhdGUuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRh
YmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQot
QGludGVyZmFjZSBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKFByaXZh
dGUpCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihJbnNwZWN0b3I6OkF1Z21l
bnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcjsKLUBlbmQKLQotCi0jIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
ZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFBy
b3RvY29sLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNp
b25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPYmpD
RW51bVR5cGU+Ci1PcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25z
dCBTdHJpbmcmIHZhbHVlKTsKLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQ
cm90b2NvbFBsYXRmb3JtIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2Ug
VGVzdFByb3RvY29sUGxhdGZvcm1BbGw6Ci0gICAgICAgIHJldHVybiAiYWxsIl9zOwotICAgIGNh
c2UgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOgotICAgICAgICByZXR1cm4gImdlbmVyaWMi
X3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzoKLSAgICAgICAgcmV0dXJuICJp
b3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOgotICAgICAgICByZXR1
cm4gIm1hY29zIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRl
c3RQcm90b2NvbFBsYXRmb3JtPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1
ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gImFsbCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9j
b2xQbGF0Zm9ybUFsbDsKLSAgICBpZiAodmFsdWUgPT0gImdlbmVyaWMiKQotICAgICAgICByZXR1
cm4gVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOwotICAgIGlmICh2YWx1ZSA9PSAiaW9zIikK
LSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOwotICAgIGlmICh2YWx1ZSA9
PSAibWFjb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzsKLSAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQot
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2Fi
bGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0KLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgotI2ltcG9ydCA8
V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLQotdXNpbmcgbmFt
ZXNwYWNlIEluc3BlY3RvcjsKLQotCi0KLQotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5t
bQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlLW1h
dGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0K
LSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8V2ViSW5z
cGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLSNpbXBvcnQgPHd0Zi9Bc3Nl
cnRpb25zLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2Ug
SW5zcGVjdG9yOwotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmljL2V4cGVjdGVkL2RvbWFpbi10YXJnZXRUeXBlcy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2RvbWFp
bi10YXJnZXRUeXBlcy5qc29uLXJlc3VsdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
Zjg5NDhhMmY3NDcwMTI1YmMyZDUzM2U5ZWQ1NDM0ODQ5ZDgyZGJmZC4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9kb21haW4tdGFyZ2V0VHlwZXMu
anNvbi1yZXN1bHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMDYzICswLDAgQEAKLSMjIyBCZWdpbiBG
aWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0vLyBEb21haW4KLUluc3BlY3RvckJhY2tlbmQucmVnaXN0
ZXJEb21haW4oIkRvbWFpbiIsIFsicGFnZSJdKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJD
b21tYW5kKCJEb21haW4uQ29tbWFuZCIsIFsicGFnZSJdLCBbXSwgW10pOwotSW5zcGVjdG9yQmFj
a2VuZC5yZWdpc3RlckV2ZW50KCJEb21haW4uRXZlbnQiLCBbInBhZ2UiXSwgW10pOwotSW5zcGVj
dG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbkRpc3BhdGNoZXIgPSBJbnNwZWN0b3JCYWNrZW5kLnJl
Z2lzdGVyRGlzcGF0Y2hlci5iaW5kKEluc3BlY3RvckJhY2tlbmQsICJEb21haW4iKTsKLUluc3Bl
Y3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkRvbWFpbiIsIG51bGwpOwotIyMjIEVuZCBGaWxl
OiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGRvbWFpbi10YXJnZXRUeXBlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgotI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLQotbmFtZXNw
YWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1
YmxpYzoKLSAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0
Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3Bh
dGNoZXIpOyB9Ci0gICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29u
c3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQotcHJpdmF0ZToKLSAgICBS
ZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Ci19OwotCi0KLWNs
YXNzIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5BbHRlcm5hdGVEb21haW5C
YWNrZW5kRGlzcGF0Y2hlcigpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBDb21tYW5kKGxvbmcgY2Fs
bElkKSA9IDA7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotI2VuZGlmIC8vIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotIyMjIEVuZCBGaWxlOiBUZXN0
QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNr
ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFp
bi10YXJnZXRUeXBlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgot
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Igewot
Ci10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQotY2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNo
ZXI7Ci0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0K
LWNsYXNzIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7Ci1wdWJsaWM6Ci0gICAgdmly
dHVhbCB2b2lkIENvbW1hbmQoRXJyb3JTdHJpbmcmKSA9IDA7Ci1wcm90ZWN0ZWQ6Ci0gICAgdmly
dHVhbCB+RG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7Ci19OwotCi1jbGFzcyBEb21h
aW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlz
cGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hl
cj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyKik7Ci0gICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBt
ZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkgZmluYWw7Ci1wcml2YXRlOgotICAg
IHZvaWQgQ29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJh
bWV0ZXJzKTsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLXB1
YmxpYzoKLSAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlRG9tYWluQmFj
a2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRj
aGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQotcHJpdmF0ZToKLSAgICBBbHRlcm5hdGVEb21h
aW5CYWNrZW5kRGlzcGF0Y2hlciogbV9hbHRlcm5hdGVEaXNwYXRjaGVyIHsgbnVsbHB0ciB9Owot
I2VuZGlmCi1wcml2YXRlOgotICAgIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNw
YXRjaGVyJiwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgRG9tYWluQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50IHsgbnVsbHB0ciB9OwotfTsKLQotfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMu
aAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZXMuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZh
bHVlcy5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENI
RVJTKQotI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNlbmRp
ZgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyOjp+RG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9Ci0KLVJlZjxEb21haW5C
YWNrZW5kRGlzcGF0Y2hlcj4gRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShCYWNrZW5k
RGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlciogYWdlbnQpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRG9tYWluQmFja2VuZERp
c3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIsIGFnZW50KSk7Ci19Ci0KLURvbWFpbkJhY2tlbmRE
aXNwYXRjaGVyOjpEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFj
a2VuZERpc3BhdGNoZXIsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCi0g
ICAgOiBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKLSAg
ICAsIG1fYWdlbnQoYWdlbnQpCi17Ci0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJE
aXNwYXRjaGVyRm9yRG9tYWluKCJEb21haW4iX3MsIHRoaXMpOwotfQotCi12b2lkIERvbWFpbkJh
Y2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBt
ZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKLXsKLSAgICBSZWY8RG9tYWluQmFj
a2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwotCi0gICAgUmVmUHRyPEpTT046Ok9iamVj
dD4gcGFyYW1ldGVyczsKLSAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFyYW1l
dGVycyk7Ci0KLSAgICBpZiAobWV0aG9kID09ICJDb21tYW5kIikKLSAgICAgICAgQ29tbWFuZChy
ZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0
aG9kTm90Rm91bmQsICInRG9tYWluLiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7Ci19
Ci0KLXZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9uZyByZXF1ZXN0SWQs
IFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCi17Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCi0gICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAg
ICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPkNvbW1hbmQocmVxdWVzdElkKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpT
T046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtX2FnZW50
LT5Db21tYW5kKGVycm9yKTsKLQotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0gICAgICAgIG1f
YmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0
KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0
UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJy
b3IpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVz
dEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERp
c3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFy
Z2V0VHlwZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNs
dWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgot
Ci1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgRnJvbnRlbmRSb3V0ZXI7Ci0KLWNsYXNz
IERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
Ci1wdWJsaWM6Ci0gICAgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVyKEZyb250ZW5kUm91dGVyJiBm
cm9udGVuZFJvdXRlcikgOiBtX2Zyb250ZW5kUm91dGVyKGZyb250ZW5kUm91dGVyKSB7IH0KLSAg
ICB2b2lkIEV2ZW50KCk7Ci1wcml2YXRlOgotICAgIEZyb250ZW5kUm91dGVyJiBtX2Zyb250ZW5k
Um91dGVyOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRl
c3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERp
c3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10
YXJnZXRUeXBlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVy
cy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewotCi12b2lkIERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcjo6RXZlbnQoKQotewotICAgIFJlZjxK
U09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBq
c29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOwotCi0g
ICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygp
KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEZy
b250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmpl
Y3RzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlw
ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJh
Z21hIG9uY2UKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlw
ZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9y
IHsKLQotCi0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLQotCi0KLQotCi0KLQotCi19IC8vIG5h
bWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xP
YmplY3RzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJn
ZXRUeXBlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0K
LSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQot
fSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4K
LQotQHByb3RvY29sIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI7Ci0KLW5hbWVzcGFj
ZSBJbnNwZWN0b3IgewotCi0KLWNsYXNzIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0
Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciB7Ci0g
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgT2JqQ0luc3BlY3RvckRv
bWFpbkJhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+
IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KLSAgICB2b2lkIENvbW1hbmQobG9u
ZyByZXF1ZXN0SWQpIGZpbmFsOwotcHJpdmF0ZToKLSAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3Rv
Y29sRG9tYWluRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7Ci19OwotCi19IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hl
cnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1t
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVzLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAi
Y29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQot
I2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLQotbmFtZXNw
YWNlIEluc3BlY3RvciB7Ci0KLXZvaWQgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRj
aGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElkKQotewotICAgIGlmICghW21fZGVsZWdhdGUgcmVz
cG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vz
c0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3Rv
Y29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICIn
RG9tYWluLkNvbW1hbmQnIHdhcyBub3QgZm91bmQiX3MpOwotICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlz
cGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICB9OwotCi0gICAgaWQgc3VjY2Vzc0NhbGxiYWNr
ID0gXnsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJ
ZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2UpOwotICAgIH07Ci0KLSAgICBbbV9kZWxl
Z2F0ZSBDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJh
Y2s6c3VjY2Vzc0NhbGxiYWNrXTsKLX0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQot
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJv
dG9jb2wuaD4KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50
ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAotQHByb3BlcnR5IChu
b25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNldERvbWFpbkhhbmRsZXI6KSBpZDxUZXN0UHJvdG9j
b2xEb21haW5Eb21haW5IYW5kbGVyPiBkb21haW5IYW5kbGVyOwotQHByb3BlcnR5IChub25hdG9t
aWMsIHJlYWRvbmx5KSBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKmRv
bWFpbkV2ZW50RGlzcGF0Y2hlcjsKLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24uaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJh
dGlvbi5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRU
eXBlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNp
bXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKLQotI2ltcG9ydCAiVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5o
IgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4K
LSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5o
PgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXJzLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcnMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9u
IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KLXsKLSAgICBBdWdtZW50YWJsZUluc3BlY3RvckNv
bnRyb2xsZXIqIF9jb250cm9sbGVyOwotICAgIGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhh
bmRsZXI+IF9kb21haW5IYW5kbGVyOwotICAgIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50
RGlzcGF0Y2hlciAqX2RvbWFpbkV2ZW50RGlzcGF0Y2hlcjsKLX0KLQotLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250
cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAg
ICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIpOwotICAgIF9jb250cm9sbGVy
ID0gY29udHJvbGxlcjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClkZWFsbG9jCi17
Ci0gICAgW19kb21haW5IYW5kbGVyIHJlbGVhc2VdOwotICAgIFtfZG9tYWluRXZlbnREaXNwYXRj
aGVyIHJlbGVhc2VdOwotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAodm9pZClzZXREb21h
aW5IYW5kbGVyOihpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiloYW5kbGVyCi17
Ci0gICAgaWYgKGhhbmRsZXIgPT0gX2RvbWFpbkhhbmRsZXIpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIFtfZG9tYWluSGFuZGxlciByZWxlYXNlXTsKLSAgICBfZG9tYWluSGFuZGxlciA9IFtoYW5k
bGVyIHJldGFpbl07Ci0KLSAgICBhdXRvIGFsdGVybmF0ZURpc3BhdGNoZXIgPSBtYWtlVW5pcXVl
PE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7Ci0gICAgYXV0
byBhbHRlcm5hdGVBZ2VudCA9IG1ha2VVbmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8
RG9tYWluQmFja2VuZERpc3BhdGNoZXIsIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVy
Pj4oIkRvbWFpbiJfcywgKl9jb250cm9sbGVyLCBXVEZNb3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIp
KTsKLSAgICBfY29udHJvbGxlci0+YXBwZW5kRXh0cmFBZ2VudChXVEZNb3ZlKGFsdGVybmF0ZUFn
ZW50KSk7Ci19Ci0KLS0gKGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+KWRvbWFp
bkhhbmRsZXIKLXsKLSAgICByZXR1cm4gX2RvbWFpbkhhbmRsZXI7Ci19Ci0KLS0gKFRlc3RQcm90
b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqKWRvbWFpbkV2ZW50RGlzcGF0Y2hlcgot
ewotICAgIGlmICghX2RvbWFpbkV2ZW50RGlzcGF0Y2hlcikKLSAgICAgICAgX2RvbWFpbkV2ZW50
RGlzcGF0Y2hlciA9IFtbVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyIGFs
bG9jXSBpbml0V2l0aENvbnRyb2xsZXI6X2NvbnRyb2xsZXJdOwotICAgIHJldHVybiBfZG9tYWlu
RXZlbnREaXNwYXRjaGVyOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xDb25maWd1cmF0aW9uLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERp
c3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRh
cmdldFR5cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2lu
ZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sRG9t
YWluRG9tYWluRXZlbnREaXNwYXRjaGVyCi17Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250
cm9sbGVyKiBfY29udHJvbGxlcjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJv
bGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCi17Ci0gICAg
c2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7
Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIpOwotICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsK
LSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClFdmVudAotewotICAgIGNvbnN0IEZyb250
ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29udHJvbGxlci0+ZnJvbnRlbmRSb3V0ZXIoKTsKLQotICAg
IFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
LSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3Mp
OwotICAgIHJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKLX0K
LQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5t
bQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24u
aD4KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgotCi0K
LQotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xQbGF0Zm9ybSkgewot
ICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtR2Vu
ZXJpYywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUywKLSAgICBUZXN0UHJvdG9jb2xQbGF0
Zm9ybU1hY09TLAotfTsKLQotCi0KLQotCi1AcHJvdG9jb2wgVGVzdFByb3RvY29sRG9tYWluRG9t
YWluSGFuZGxlciA8TlNPYmplY3Q+Ci1Ab3B0aW9uYWwKLS0gKHZvaWQpQ29tbWFuZFdpdGhFcnJv
ckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNz
Q2FsbGJhY2s6KHZvaWQoXikodm9pZCkpc3VjY2Vzc0NhbGxiYWNrOwotQGVuZAotCi1fX2F0dHJp
YnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29s
RG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyIDogTlNPYmplY3QKLS0gKHZvaWQpRXZlbnQ7Ci1A
ZW5kCi0KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmls
aXR5T2JqZWN0cy5oPgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJU
ZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVl
cy5oPgotCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hl
ciAoUHJpdmF0ZSkKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEluc3BlY3Rv
cjo6QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyOwotQGVuZAotCi0K
LSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgPFdl
Ykluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KLQotbmFtZXNwYWNlIElu
c3BlY3RvciB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KLU9wdGlvbmFsPE9i
akNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOwotCi1p
bmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sUGxhdGZvcm0gdmFsdWUp
Ci17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFs
bDoKLSAgICAgICAgcmV0dXJuICJhbGwiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9y
bUdlbmVyaWM6Ci0gICAgICAgIHJldHVybiAiZ2VuZXJpYyJfczsKLSAgICBjYXNlIFRlc3RQcm90
b2NvbFBsYXRmb3JtSU9TOgotICAgICAgICByZXR1cm4gImlvcyJfczsKLSAgICBjYXNlIFRlc3RQ
cm90b2NvbFBsYXRmb3JtTWFjT1M6Ci0gICAgICAgIHJldHVybiAibWFjb3MiX3M7Ci0gICAgfQot
fQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sUGxhdGZvcm0+IGZy
b21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9
PSAiYWxsIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOwotICAgIGlm
ICh2YWx1ZSA9PSAiZ2VuZXJpYyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9y
bUdlbmVyaWM7Ci0gICAgaWYgKHZhbHVlID09ICJpb3MiKQotICAgICAgICByZXR1cm4gVGVzdFBy
b3RvY29sUGxhdGZvcm1JT1M7Ci0gICAgaWYgKHZhbHVlID09ICJtYWNvcyIpCi0gICAgICAgIHJl
dHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4t
dGFyZ2V0VHlwZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLQotI2ltcG9ydCAi
VGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCi0jaW1w
b3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotCi11c2lu
ZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLQotCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5
cGVzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5
cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2lt
cG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2Jq
ZWN0UHJpdmF0ZS5oPgotI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQgPHd0Zi9K
U09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZG9tYWlucy13aXRo
LXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2RvbWFpbnMtd2l0aC12
YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbi1yZXN1bHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDJjMDdjYjEzNDdmM2M2MmM0OWVlYTQ3ZjQ1ZmE3MTlkZTU0ZGIyMGQuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZG9tYWlucy13aXRo
LXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uLXJlc3VsdAorKysgL2Rldi9udWxsCkBAIC0xLDE0
NTUgKzAsMCBAQAotIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNv
bW1hbmQtc2l6ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0vLyBOZXR3b3JrMQotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiTmV0d29y
azEiLCBudWxsKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMS5s
b2FkUmVzb3VyY2UxIiwgbnVsbCwgW10sIFtdKTsKLUluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVE
b21haW4oIk5ldHdvcmsxIiwgbnVsbCk7Ci0KLS8vIE5ldHdvcmszCi1JbnNwZWN0b3JCYWNrZW5k
LnJlZ2lzdGVyRG9tYWluKCJOZXR3b3JrMyIsIG51bGwpOwotSW5zcGVjdG9yQmFja2VuZC5yZWdp
c3RlckNvbW1hbmQoIk5ldHdvcmszLmxvYWRSZXNvdXJjZTEiLCBudWxsLCBbXSwgW10pOwotSW5z
cGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIk5ldHdvcmszLmxvYWRSZXNvdXJjZTIiLCBu
dWxsLCBbXSwgW10pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIk5ldHdvcmsz
LmxvYWRSZXNvdXJjZTMiLCBudWxsLCBbXSwgW10pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rl
ckNvbW1hbmQoIk5ldHdvcmszLmxvYWRSZXNvdXJjZTQiLCBudWxsLCBbXSwgW10pOwotSW5zcGVj
dG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIk5ldHdvcmszLmxvYWRSZXNvdXJjZTUiLCBudWxs
LCBbXSwgW10pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIk5ldHdvcmszLmxv
YWRSZXNvdXJjZTYiLCBudWxsLCBbXSwgW10pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNv
bW1hbmQoIk5ldHdvcmszLmxvYWRSZXNvdXJjZTciLCBudWxsLCBbXSwgW10pOwotSW5zcGVjdG9y
QmFja2VuZC5hY3RpdmF0ZURvbWFpbigiTmV0d29yazMiLCBudWxsKTsKLSMjIyBFbmQgRmlsZTog
SW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJu
YXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUo
SU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQotI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bFR5cGVzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRl
ci5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERp
c3BhdGNoZXIgewotcHVibGljOgotICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRy
PEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9
IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KLSAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERp
c3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Ci1w
cml2YXRlOgotICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hl
cjsKLX07Ci0KLQotY2xhc3MgQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciA6IHB1
YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+
QWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQotICAgIHZpcnR1YWwgdm9p
ZCBsb2FkUmVzb3VyY2UxKGxvbmcgY2FsbElkKSA9IDA7Ci19OwotY2xhc3MgQWx0ZXJuYXRlTmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hl
ciB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+QWx0ZXJuYXRlTmV0d29yazNCYWNrZW5kRGlzcGF0
Y2hlcigpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UxKGxvbmcgY2FsbElkKSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTIobG9uZyBjYWxsSWQpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMyhsb25nIGNhbGxJZCkgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBsb2FkUmVzb3VyY2U0KGxvbmcgY2FsbElkKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lk
IGxvYWRSZXNvdXJjZTUobG9uZyBjYWxsSWQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJl
c291cmNlNihsb25nIGNhbGxJZCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2U3
KGxvbmcgY2FsbElkKSA9IDA7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotI2Vu
ZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotIyMjIEVuZCBG
aWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUg
IlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgot
Ci1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0K
LSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLWNsYXNzIEFsdGVy
bmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI7Ci1jbGFzcyBBbHRlcm5hdGVOZXR3b3JrM0Jh
Y2tlbmREaXNwYXRjaGVyOwotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQotCi1jbGFzcyBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7Ci1w
dWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTEoRXJyb3JTdHJpbmcmKSA9IDA7
Ci1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB+TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIoKTsKLX07Ci0KLWNsYXNzIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKLXB1
YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMShFcnJvclN0cmluZyYpID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMihFcnJvclN0cmluZyYpID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMyhFcnJvclN0cmluZyYpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgbG9hZFJlc291cmNlNChFcnJvclN0cmluZyYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
bG9hZFJlc291cmNlNShFcnJvclN0cmluZyYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJl
c291cmNlNihFcnJvclN0cmluZyYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNl
NyhFcnJvclN0cmluZyYpID0gMDsKLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIH5OZXR3b3JrM0Jh
Y2tlbmREaXNwYXRjaGVySGFuZGxlcigpOwotfTsKLQotY2xhc3MgTmV0d29yazFCYWNrZW5kRGlz
cGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7Ci1w
dWJsaWM6Ci0gICAgc3RhdGljIFJlZjxOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUo
QmFja2VuZERpc3BhdGNoZXImLCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwot
ICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBS
ZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOwotcHJpdmF0ZToKLSAgICB2b2lkIGxv
YWRSZXNvdXJjZTEobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1l
dGVycyk7Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi1wdWJs
aWM6Ci0gICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZU5ldHdvcmsxQmFj
a2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRj
aGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQotcHJpdmF0ZToKLSAgICBBbHRlcm5hdGVOZXR3
b3JrMUJhY2tlbmREaXNwYXRjaGVyKiBtX2FsdGVybmF0ZURpc3BhdGNoZXIgeyBudWxscHRyIH07
Ci0jZW5kaWYKLXByaXZhdGU6Ci0gICAgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5k
RGlzcGF0Y2hlciYsIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgTmV0
d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQgeyBudWxscHRyIH07Ci19Owot
Ci1jbGFzcyBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1l
bnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE5ldHdvcmsz
QmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIE5ldHdvcmszQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJ
ZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkgZmlu
YWw7Ci1wcml2YXRlOgotICAgIHZvaWQgbG9hZFJlc291cmNlMShsb25nIHJlcXVlc3RJZCwgUmVm
UHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTIo
bG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0gICAg
dm9pZCBsb2FkUmVzb3VyY2UzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYm
IHBhcmFtZXRlcnMpOwotICAgIHZvaWQgbG9hZFJlc291cmNlNChsb25nIHJlcXVlc3RJZCwgUmVm
UHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTUo
bG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0gICAg
dm9pZCBsb2FkUmVzb3VyY2U2KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYm
IHBhcmFtZXRlcnMpOwotICAgIHZvaWQgbG9hZFJlc291cmNlNyhsb25nIHJlcXVlc3RJZCwgUmVm
UHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKLXB1YmxpYzoKLSAgICB2b2lkIHNldEFsdGVybmF0ZURpc3Bh
dGNoZXIoQWx0ZXJuYXRlTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0
Y2hlcikgeyBtX2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9Ci1w
cml2YXRlOgotICAgIEFsdGVybmF0ZU5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIqIG1fYWx0ZXJu
YXRlRGlzcGF0Y2hlciB7IG51bGxwdHIgfTsKLSNlbmRpZgotcHJpdmF0ZToKLSAgICBOZXR3b3Jr
M0JhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiwgTmV0d29yazNCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXIqKTsKLSAgICBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciog
bV9hZ2VudCB7IG51bGxwdHIgfTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMj
IEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRl
c3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+
Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0j
aW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgotI2VuZGlmCi0KLW5h
bWVzcGFjZSBJbnNwZWN0b3IgewotCi1OZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6
fk5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9Ci1OZXR3b3JrM0JhY2tlbmRE
aXNwYXRjaGVySGFuZGxlcjo6fk5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9
Ci0KLVJlZjxOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPiBOZXR3b3JrMUJhY2tlbmREaXNwYXRj
aGVyOjpjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBOZXR3b3Jr
MUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQp
KTsKLX0KLQotTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6TmV0d29yazFCYWNrZW5kRGlzcGF0
Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIE5ldHdvcmsxQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKLSAgICA6IFN1cHBsZW1lbnRhbEJhY2tlbmREaXNw
YXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQotICAgICwgbV9hZ2VudChhZ2VudCkKLXsKLSAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oIk5ldHdvcmsx
Il9zLCB0aGlzKTsKLX0KLQotdm9pZCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRj
aChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+
JiYgbWVzc2FnZSkKLXsKLSAgICBSZWY8TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVj
dCgqdGhpcyk7Ci0KLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOwotICAgIG1l
c3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsKLQotICAgIGlmIChtZXRo
b2QgPT0gImxvYWRSZXNvdXJjZTEiKQotICAgICAgICBsb2FkUmVzb3VyY2UxKHJlcXVlc3RJZCwg
V1RGTW92ZShwYXJhbWV0ZXJzKSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3Vu
ZCwgIidOZXR3b3JrMS4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOwotfQotCi12b2lk
IE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTEobG9uZyByZXF1ZXN0SWQs
IFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCi17Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCi0gICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAg
ICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZTEocmVxdWVzdElkKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAg
UmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBt
X2FnZW50LT5sb2FkUmVzb3VyY2UxKGVycm9yKTsKLQotICAgIGlmICghZXJyb3IubGVuZ3RoKCkp
Ci0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdU
Rk1vdmUocmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3Is
IFdURk1vdmUoZXJyb3IpKTsKLX0KLQotUmVmPE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI+IE5l
dHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2Vu
ZERpc3BhdGNoZXIsIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKLXsK
LSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyKGJhY2tl
bmREaXNwYXRjaGVyLCBhZ2VudCkpOwotfQotCi1OZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpO
ZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0
Y2hlciwgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQotICAgIDogU3Vw
cGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCi0gICAgLCBtX2Fn
ZW50KGFnZW50KQotewotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hl
ckZvckRvbWFpbigiTmV0d29yazMiX3MsIHRoaXMpOwotfQotCi12b2lkIE5ldHdvcmszQmFja2Vu
ZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhv
ZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQotewotICAgIFJlZjxOZXR3b3JrM0JhY2tl
bmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKLQotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+
IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRl
cnMpOwotCi0gICAgdHlwZWRlZiB2b2lkIChOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjoqQ2Fs
bEhhbmRsZXIpKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2Up
OwotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVyPiBEaXNwYXRjaE1hcDsK
LSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8RGlzcGF0Y2hNYXA+IGRpc3BhdGNoTWFwOwotICAg
IGlmIChkaXNwYXRjaE1hcC5nZXQoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgc3RhdGljIGNvbnN0
IHN0cnVjdCBNZXRob2RUYWJsZSB7Ci0gICAgICAgICAgICBjb25zdCBjaGFyKiBuYW1lOwotICAg
ICAgICAgICAgQ2FsbEhhbmRsZXIgaGFuZGxlcjsKLSAgICAgICAgfSBjb21tYW5kc1tdID0gewot
ICAgICAgICAgICAgeyAibG9hZFJlc291cmNlMSIsICZOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVy
Ojpsb2FkUmVzb3VyY2UxIH0sCi0gICAgICAgICAgICB7ICJsb2FkUmVzb3VyY2UyIiwgJk5ldHdv
cmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTIgfSwKLSAgICAgICAgICAgIHsgImxv
YWRSZXNvdXJjZTMiLCAmTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMyB9
LAotICAgICAgICAgICAgeyAibG9hZFJlc291cmNlNCIsICZOZXR3b3JrM0JhY2tlbmREaXNwYXRj
aGVyOjpsb2FkUmVzb3VyY2U0IH0sCi0gICAgICAgICAgICB7ICJsb2FkUmVzb3VyY2U1IiwgJk5l
dHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTUgfSwKLSAgICAgICAgICAgIHsg
ImxvYWRSZXNvdXJjZTYiLCAmTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNl
NiB9LAotICAgICAgICAgICAgeyAibG9hZFJlc291cmNlNyIsICZOZXR3b3JrM0JhY2tlbmREaXNw
YXRjaGVyOjpsb2FkUmVzb3VyY2U3IH0sCi0gICAgICAgIH07Ci0gICAgICAgIHNpemVfdCBsZW5n
dGggPSBXVEZfQVJSQVlfTEVOR1RIKGNvbW1hbmRzKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBsZW5ndGg7ICsraSkKLSAgICAgICAgICAgIGRpc3BhdGNoTWFwLmdldCgpLmFkZChj
b21tYW5kc1tpXS5uYW1lLCBjb21tYW5kc1tpXS5oYW5kbGVyKTsKLSAgICB9Ci0KLSAgICBhdXRv
IGZpbmRSZXN1bHQgPSBkaXNwYXRjaE1hcC5nZXQoKS5maW5kKG1ldGhvZCk7Ci0gICAgaWYgKGZp
bmRSZXN1bHQgPT0gZGlzcGF0Y2hNYXAuZ2V0KCkuZW5kKCkpIHsKLSAgICAgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9k
Tm90Rm91bmQsICInTmV0d29yazMuIiArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgICgoKnRoaXMpLipmaW5kUmVzdWx0LT52YWx1ZSko
cmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKLX0KLQotdm9pZCBOZXR3b3JrM0JhY2tl
bmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UxKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6
T2JqZWN0PiYmKQotewotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQotICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVE
aXNwYXRjaGVyLT5sb2FkUmVzb3VyY2UxKHJlcXVlc3RJZCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0jZW5kaWYKLQotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmpl
Y3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgbV9hZ2VudC0+bG9hZFJl
c291cmNlMShlcnJvcik7Ci0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCks
IGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFBy
b3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9y
KSk7Ci19Ci0KLXZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMihs
b25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKLXsKLSNpZiBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRj
aGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlMihyZXF1
ZXN0SWQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBFcnJvclN0cmlu
ZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOwotICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTIoZXJyb3IpOwotCi0gICAgaWYgKCFl
cnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNl
KHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVy
OjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOwotfQotCi12b2lkIE5ldHdvcmszQmFja2Vu
ZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpP
YmplY3Q+JiYpCi17Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
Ci0gICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURp
c3BhdGNoZXItPmxvYWRSZXNvdXJjZTMocmVxdWVzdElkKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSNlbmRpZgotCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVj
dD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtX2FnZW50LT5sb2FkUmVz
b3VyY2UzKGVycm9yKTsKLQotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0gICAgICAgIG1fYmFj
a2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwg
ZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJv
dG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3Ip
KTsKLX0KLQotdm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U0KGxv
bmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQotewotI2lmIEVOQUJMRShJTlNQ
RUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNo
ZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2U0KHJlcXVl
c3RJZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIEVycm9yU3RyaW5n
IGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7Ci0gICAgbV9hZ2VudC0+bG9hZFJlc291cmNlNChlcnJvcik7Ci0KLSAgICBpZiAoIWVy
cm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2Uo
cmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1f
YmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6
OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Ci19Ci0KLXZvaWQgTmV0d29yazNCYWNrZW5k
RGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9i
amVjdD4mJikKLXsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
LSAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlz
cGF0Y2hlci0+bG9hZFJlc291cmNlNShyZXF1ZXN0SWQpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotI2VuZGlmCi0KLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0
PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIG1fYWdlbnQtPmxvYWRSZXNv
dXJjZTUoZXJyb3IpOwotCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBm
YWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90
b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikp
OwotfQotCi12b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTYobG9u
ZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCi17Ci0jaWYgRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0gICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hl
cikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZTYocmVxdWVz
dElkKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAgRXJyb3JTdHJpbmcg
ZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKLSAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2U2KGVycm9yKTsKLQotICAgIGlmICghZXJy
b3IubGVuZ3RoKCkpCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShy
ZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6
U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKLX0KLQotdm9pZCBOZXR3b3JrM0JhY2tlbmRE
aXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U3KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmKQotewotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQot
ICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNw
YXRjaGVyLT5sb2FkUmVzb3VyY2U3KHJlcXVlc3RJZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0jZW5kaWYKLQotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+
IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgbV9hZ2VudC0+bG9hZFJlc291
cmNlNyhlcnJvcik7Ci0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZh
bHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3Rv
Y29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNr
ZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRj
aGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZh
cnlpbmctY29tbWFuZC1zaXplcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0
cy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBGcm9udGVuZFJvdXRl
cjsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVu
ZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJz
LmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5
aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlz
cGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5k
Um91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5z
cGVjdG9yIHsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVz
dEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xP
YmplY3RzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgt
dmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQot
bmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQot
Ci0KLS8vIFR5cGVkZWZzLgotbmFtZXNwYWNlIE5ldHdvcmsyIHsKLS8qIFVuaXF1ZSBsb2FkZXIg
aWRlbnRpZmllci4gKi8KLXR5cGVkZWYgU3RyaW5nIExvYWRlcklkOwotfSAvLyBOZXR3b3JrMgot
Ly8gRW5kIG9mIHR5cGVkZWZzLgotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMu
aAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVz
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLQotI2luY2x1
ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFt
ZXNwYWNlIEluc3BlY3RvciB7Ci0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLQotCi19IC8vIG5h
bWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRh
aW5QdHIuaD4KLQotQHByb3RvY29sIFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcjsK
LUBwcm90b2NvbCBUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkhhbmRsZXI7Ci0KLW5hbWVzcGFj
ZSBJbnNwZWN0b3IgewotCi0KLWNsYXNzIE9iakNJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNw
YXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIg
ewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIE9iakNJbnNwZWN0
b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWlu
SGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQotICAgIHZvaWQgbG9h
ZFJlc291cmNlMShsb25nIHJlcXVlc3RJZCkgZmluYWw7Ci1wcml2YXRlOgotICAgIFJldGFpblB0
cjxpZDxUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwotfTsK
LQotY2xhc3MgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBw
dWJsaWMgQWx0ZXJuYXRlTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlciB7Ci0gICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2Vu
ZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sTmV0d29yazNEb21haW5IYW5kbGVyPiBoYW5kbGVy
KSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2UxKGxvbmcg
cmVxdWVzdElkKSBmaW5hbDsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTIobG9uZyByZXF1ZXN0SWQp
IGZpbmFsOwotICAgIHZvaWQgbG9hZFJlc291cmNlMyhsb25nIHJlcXVlc3RJZCkgZmluYWw7Ci0g
ICAgdm9pZCBsb2FkUmVzb3VyY2U0KGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKLSAgICB2b2lkIGxv
YWRSZXNvdXJjZTUobG9uZyByZXF1ZXN0SWQpIGZpbmFsOwotICAgIHZvaWQgbG9hZFJlc291cmNl
Nihsb25nIHJlcXVlc3RJZCkgZmluYWw7Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2U3KGxvbmcgcmVx
dWVzdElkKSBmaW5hbDsKLXByaXZhdGU6Ci0gICAgUmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbE5l
dHdvcmszRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMu
aAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29t
bWFuZC1zaXplcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3Bh
dGNoZXJzLmgiCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2luY2x1ZGUg
IlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVz
Lmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3Jr
MUJhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UxKGxvbmcgcmVxdWVzdElkKQotewotICAg
IGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3Vy
Y2UxV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlz
cGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazEubG9hZFJlc291cmNlMScgd2FzIG5v
dCBmb3VuZCJfcyk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJy
b3JzKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZCBlcnJvckNhbGxiYWNrID0g
XihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0
UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwg
ZXJyb3IpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygp
OwotICAgIH07Ci0KLSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5k
RGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpLCBmYWxzZSk7Ci0gICAgfTsKLQotICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZTFXaXRo
RXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJh
Y2tdOwotfQotCi0KLXZvaWQgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6
OmxvYWRSZXNvdXJjZTEobG9uZyByZXF1ZXN0SWQpCi17Ci0gICAgaWYgKCFbbV9kZWxlZ2F0ZSBy
ZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGxvYWRSZXNvdXJjZTFXaXRoRXJyb3JDYWxsYmFj
azpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVw
b3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RG
b3VuZCwgIidOZXR3b3JrMy5sb2FkUmVzb3VyY2UxJyB3YXMgbm90IGZvdW5kIl9zKTsKLSAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikg
ewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVl
c3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7Ci0gICAgICAgIGJh
Y2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgfTsKLQotICAgIGlk
IHN1Y2Nlc3NDYWxsYmFjayA9IF57Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRS
ZXNwb25zZShyZXF1ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKLSAgICB9
OwotCi0gICAgW21fZGVsZWdhdGUgbG9hZFJlc291cmNlMVdpdGhFcnJvckNhbGxiYWNrOmVycm9y
Q2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107Ci19Ci0KLXZvaWQgT2Jq
Q0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTIobG9uZyBy
ZXF1ZXN0SWQpCi17Ci0gICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNl
bGVjdG9yKGxvYWRSZXNvdXJjZTJXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6KV0p
IHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1
ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMy5sb2Fk
UmVzb3VyY2UyJyB3YXMgbm90IGZvdW5kIl9zKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlk
IGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNo
ZXI6OlNlcnZlckVycm9yLCBlcnJvcik7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNl
bmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgfTsKLQotICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57
Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpT
T046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKLSAgICB9OwotCi0gICAgW21fZGVsZWdhdGUg
bG9hZFJlc291cmNlMldpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxi
YWNrOnN1Y2Nlc3NDYWxsYmFja107Ci19Ci0KLXZvaWQgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFj
a2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTMobG9uZyByZXF1ZXN0SWQpCi17Ci0gICAgaWYg
KCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGxvYWRSZXNvdXJjZTNX
aXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsKLSAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRj
aGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMy5sb2FkUmVzb3VyY2UzJyB3YXMgbm90IGZv
dW5kIl9zKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMo
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5T
U3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90
b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJv
cik7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0g
ICAgfTsKLQotICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57Ci0gICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCks
IGZhbHNlKTsKLSAgICB9OwotCi0gICAgW21fZGVsZWdhdGUgbG9hZFJlc291cmNlM1dpdGhFcnJv
ckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107
Ci19Ci0KLXZvaWQgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRS
ZXNvdXJjZTQobG9uZyByZXF1ZXN0SWQpCi17Ci0gICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25k
c1RvU2VsZWN0b3I6QHNlbGVjdG9yKGxvYWRSZXNvdXJjZTRXaXRoRXJyb3JDYWxsYmFjazpzdWNj
ZXNzQ2FsbGJhY2s6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJv
dG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwg
IidOZXR3b3JrMy5sb2FkUmVzb3VyY2U0JyB3YXMgbm90IGZvdW5kIl9zKTsKLSAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwg
QmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7Ci0gICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgfTsKLQotICAgIGlkIHN1Y2Nl
c3NDYWxsYmFjayA9IF57Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25z
ZShyZXF1ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKLSAgICB9OwotCi0g
ICAgW21fZGVsZWdhdGUgbG9hZFJlc291cmNlNFdpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJh
Y2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107Ci19Ci0KLXZvaWQgT2JqQ0luc3Bl
Y3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTUobG9uZyByZXF1ZXN0
SWQpCi17Ci0gICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9y
KGxvYWRSZXNvdXJjZTVXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsKLSAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQs
IEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMy5sb2FkUmVzb3Vy
Y2U1JyB3YXMgbm90IGZvdW5kIl9zKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2Vu
ZFBlbmRpbmdFcnJvcnMoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlkIGVycm9y
Q2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNl
cnZlckVycm9yLCBlcnJvcik7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5k
aW5nRXJyb3JzKCk7Ci0gICAgfTsKLQotICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57Ci0gICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpTT046Ok9i
amVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKLSAgICB9OwotCi0gICAgW21fZGVsZWdhdGUgbG9hZFJl
c291cmNlNVdpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1
Y2Nlc3NDYWxsYmFja107Ci19Ci0KLXZvaWQgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERp
c3BhdGNoZXI6OmxvYWRSZXNvdXJjZTYobG9uZyByZXF1ZXN0SWQpCi17Ci0gICAgaWYgKCFbbV9k
ZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGxvYWRSZXNvdXJjZTZXaXRoRXJy
b3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpN
ZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMy5sb2FkUmVzb3VyY2U2JyB3YXMgbm90IGZvdW5kIl9z
KTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5n
ICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVy
cm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7Ci0g
ICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgfTsK
LQotICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVy
KCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNl
KTsKLSAgICB9OwotCi0gICAgW21fZGVsZWdhdGUgbG9hZFJlc291cmNlNldpdGhFcnJvckNhbGxi
YWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107Ci19Ci0K
LXZvaWQgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJj
ZTcobG9uZyByZXF1ZXN0SWQpCi17Ci0gICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2Vs
ZWN0b3I6QHNlbGVjdG9yKGxvYWRSZXNvdXJjZTdXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2Fs
bGJhY2s6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xF
cnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3
b3JrMy5sb2FkUmVzb3VyY2U3JyB3YXMgbm90IGZvdW5kIl9zKTsKLSAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2Vu
ZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgfTsKLQotICAgIGlkIHN1Y2Nlc3NDYWxs
YmFjayA9IF57Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1
ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKLSAgICB9OwotCi0gICAgW21f
ZGVsZWdhdGUgbG9hZFJlc291cmNlN1dpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3Vj
Y2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107Ci19Ci0KLQotfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1t
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNp
emVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2lt
cG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgotCi1fX2F0dHJpYnV0ZV9fKCh2aXNp
YmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
biA6IE5TT2JqZWN0Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluLCBzZXR0ZXI9c2V0TmV0
d29yazFIYW5kbGVyOikgaWQ8VGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyPiBuZXR3
b3JrMUhhbmRsZXI7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluLCBzZXR0ZXI9c2V0TmV0
d29yazNIYW5kbGVyOikgaWQ8VGVzdFByb3RvY29sTmV0d29yazNEb21haW5IYW5kbGVyPiBuZXR3
b3JrM0hhbmRsZXI7Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1
cmF0aW9uLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0K
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1j
b21tYW5kLXNpemVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgotCi0jaW1wb3J0ICJU
ZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3Bh
dGNoZXJzLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVB
Z2VudC5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250
cm9sbGVyLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVycy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW1wbGVt
ZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgotewotICAgIEF1Z21lbnRhYmxlSW5z
cGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci0gICAgaWQ8VGVzdFByb3RvY29sTmV0d29y
azFEb21haW5IYW5kbGVyPiBfbmV0d29yazFIYW5kbGVyOwotICAgIGlkPFRlc3RQcm90b2NvbE5l
dHdvcmszRG9tYWluSGFuZGxlcj4gX25ldHdvcmszSGFuZGxlcjsKLX0KLQotLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKilj
b250cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0g
ICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIpOwotICAgIF9jb250cm9s
bGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClkZWFsbG9j
Ci17Ci0gICAgW19uZXR3b3JrMUhhbmRsZXIgcmVsZWFzZV07Ci0gICAgW19uZXR3b3JrM0hhbmRs
ZXIgcmVsZWFzZV07Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi0tICh2b2lkKXNldE5ldHdv
cmsxSGFuZGxlcjooaWQ8VGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyPiloYW5kbGVy
Ci17Ci0gICAgaWYgKGhhbmRsZXIgPT0gX25ldHdvcmsxSGFuZGxlcikKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgW19uZXR3b3JrMUhhbmRsZXIgcmVsZWFzZV07Ci0gICAgX25ldHdvcmsxSGFuZGxl
ciA9IFtoYW5kbGVyIHJldGFpbl07Ci0KLSAgICBhdXRvIGFsdGVybmF0ZURpc3BhdGNoZXIgPSBt
YWtlVW5pcXVlPE9iakNJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPihoYW5kbGVy
KTsKLSAgICBhdXRvIGFsdGVybmF0ZUFnZW50ID0gbWFrZVVuaXF1ZTxBbHRlcm5hdGVEaXNwYXRj
aGFibGVBZ2VudDxOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyLCBBbHRlcm5hdGVOZXR3b3JrMUJh
Y2tlbmREaXNwYXRjaGVyPj4oIk5ldHdvcmsxIl9zLCAqX2NvbnRyb2xsZXIsIFdURk1vdmUoYWx0
ZXJuYXRlRGlzcGF0Y2hlcikpOwotICAgIF9jb250cm9sbGVyLT5hcHBlbmRFeHRyYUFnZW50KFdU
Rk1vdmUoYWx0ZXJuYXRlQWdlbnQpKTsKLX0KLQotLSAoaWQ8VGVzdFByb3RvY29sTmV0d29yazFE
b21haW5IYW5kbGVyPiluZXR3b3JrMUhhbmRsZXIKLXsKLSAgICByZXR1cm4gX25ldHdvcmsxSGFu
ZGxlcjsKLX0KLQotLSAodm9pZClzZXROZXR3b3JrM0hhbmRsZXI6KGlkPFRlc3RQcm90b2NvbE5l
dHdvcmszRG9tYWluSGFuZGxlcj4paGFuZGxlcgotewotICAgIGlmIChoYW5kbGVyID09IF9uZXR3
b3JrM0hhbmRsZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIFtfbmV0d29yazNIYW5kbGVyIHJl
bGVhc2VdOwotICAgIF9uZXR3b3JrM0hhbmRsZXIgPSBbaGFuZGxlciByZXRhaW5dOwotCi0gICAg
YXV0byBhbHRlcm5hdGVEaXNwYXRjaGVyID0gbWFrZVVuaXF1ZTxPYmpDSW5zcGVjdG9yTmV0d29y
azNCYWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7Ci0gICAgYXV0byBhbHRlcm5hdGVBZ2VudCA9
IG1ha2VVbmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8TmV0d29yazNCYWNrZW5kRGlz
cGF0Y2hlciwgQWx0ZXJuYXRlTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcj4+KCJOZXR3b3JrMyJf
cywgKl9jb250cm9sbGVyLCBXVEZNb3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIpKTsKLSAgICBfY29u
dHJvbGxlci0+YXBwZW5kRXh0cmFBZ2VudChXVEZNb3ZlKGFsdGVybmF0ZUFnZW50KSk7Ci19Ci0K
LS0gKGlkPFRlc3RQcm90b2NvbE5ldHdvcmszRG9tYWluSGFuZGxlcj4pbmV0d29yazNIYW5kbGVy
Ci17Ci0gICAgcmV0dXJuIF9uZXR3b3JrM0hhbmRsZXI7Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29s
SW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0j
aW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwot
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3Vu
ZGF0aW9uLmg+Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3Qu
aD4KLQotCi0KLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sUGxhdGZv
cm0pIHsKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbCwKLSAgICBUZXN0UHJvdG9jb2xQbGF0
Zm9ybUdlbmVyaWMsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1JT1MsCi0gICAgVGVzdFByb3Rv
Y29sUGxhdGZvcm1NYWNPUywKLX07Ci0KLQotCi0KLQotQHByb3RvY29sIFRlc3RQcm90b2NvbE5l
dHdvcmsxRG9tYWluSGFuZGxlciA8TlNPYmplY3Q+Ci1Ab3B0aW9uYWwKLS0gKHZvaWQpbG9hZFJl
c291cmNlMVdpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JD
YWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikodm9pZCkpc3VjY2Vzc0NhbGxiYWNrOwot
QGVuZAotCi1AcHJvdG9jb2wgVGVzdFByb3RvY29sTmV0d29yazNEb21haW5IYW5kbGVyIDxOU09i
amVjdD4KLUBvcHRpb25hbAotLSAodm9pZClsb2FkUmVzb3VyY2UxV2l0aEVycm9yQ2FsbGJhY2s6
KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoo
dm9pZCheKSh2b2lkKSlzdWNjZXNzQ2FsbGJhY2s7Ci0tICh2b2lkKWxvYWRSZXNvdXJjZTJXaXRo
RXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3Vj
Y2Vzc0NhbGxiYWNrOih2b2lkKF4pKHZvaWQpKXN1Y2Nlc3NDYWxsYmFjazsKLS0gKHZvaWQpbG9h
ZFJlc291cmNlM1dpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJy
b3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikodm9pZCkpc3VjY2Vzc0NhbGxiYWNr
OwotLSAodm9pZClsb2FkUmVzb3VyY2U0V2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJp
bmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKSh2b2lkKSlz
dWNjZXNzQ2FsbGJhY2s7Ci0tICh2b2lkKWxvYWRSZXNvdXJjZTVXaXRoRXJyb3JDYWxsYmFjazoo
dm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2
b2lkKF4pKHZvaWQpKXN1Y2Nlc3NDYWxsYmFjazsKLS0gKHZvaWQpbG9hZFJlc291cmNlNldpdGhF
cnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNj
ZXNzQ2FsbGJhY2s6KHZvaWQoXikodm9pZCkpc3VjY2Vzc0NhbGxiYWNrOwotLSAodm9pZClsb2Fk
UmVzb3VyY2U3V2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJv
ckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKSh2b2lkKSlzdWNjZXNzQ2FsbGJhY2s7
Ci1AZW5kCi0KLQotCi0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29t
cGF0aWJpbGl0eU9iamVjdHMuaD4KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0
UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCi0j
aW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4K
LSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLQotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sSW50ZXJuYWwuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgt
dmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0IDxXZWJJbnNw
ZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0
b3IgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+Ci1PcHRpb25hbDxPYmpDRW51
bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKLQotaW5saW5l
IFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFBsYXRmb3JtIHZhbHVlKQotewot
ICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1BbGw6Ci0g
ICAgICAgIHJldHVybiAiYWxsIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5l
cmljOgotICAgICAgICByZXR1cm4gImdlbmVyaWMiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQ
bGF0Zm9ybUlPUzoKLSAgICAgICAgcmV0dXJuICJpb3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9j
b2xQbGF0Zm9ybU1hY09TOgotICAgICAgICByZXR1cm4gIm1hY29zIl9zOwotICAgIH0KLX0KLQot
dGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFBsYXRmb3JtPiBmcm9tUHJv
dG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gImFs
bCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDsKLSAgICBpZiAodmFs
dWUgPT0gImdlbmVyaWMiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1HZW5l
cmljOwotICAgIGlmICh2YWx1ZSA9PSAiaW9zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2Nv
bFBsYXRmb3JtSU9TOwotICAgIGlmICh2YWx1ZSA9PSAibWFjb3MiKQotICAgICAgICByZXR1cm4g
VGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQot
Ci0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMt
d2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMu
aCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBl
UGFyc2VyLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJp
dmF0ZS5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW50ZXJmYWNlIFRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucyAoTmV0d29yazJEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNl
TG9hZGVySWQ6KE5TU3RyaW5nICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwot
Ci1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKE5l
dHdvcmsyRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZUxvYWRlcklkOihOU1N0cmluZyAqKilvdXRW
YWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
QkFEX1RZUEUocGF5bG9hZCwgW05TU3RyaW5nIGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gKE5T
U3RyaW5nICopcGF5bG9hZDsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBl
cy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5
aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQ
cm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgot
I2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsK
LQotCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhw
ZWN0ZWQvZW51bS12YWx1ZXMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9lbnVtLXZhbHVlcy5qc29uLXJl
c3VsdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjA2ZmViYjc4ZDcxZWRhYjJmNWFi
NjlmZTg2ZmExNTRhOGMxNWM0Yy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJpYy9leHBlY3RlZC9lbnVtLXZhbHVlcy5qc29uLXJlc3VsdAorKysgL2Rldi9udWxsCkBA
IC0xLDEyMzYgKzAsMCBAQAotIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5k
cy5qcwotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotLy8gVHlwZURvbWFp
bgotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiVHlwZURvbWFpbiIsIG51bGwpOwot
SW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIlR5cGVEb21haW4uVHlwZURvbWFpbkVudW0i
LCB7U2hhcmVkOiAic2hhcmVkIiwgUmVkOiAicmVkIiwgR3JlZW46ICJncmVlbiIsIEJsdWU6ICJi
bHVlIn0pOwotSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiVHlwZURvbWFpbiIsIG51
bGwpOwotCi0vLyBDb21tYW5kRG9tYWluCi1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWlu
KCJDb21tYW5kRG9tYWluIiwgbnVsbCk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFu
ZCgiQ29tbWFuZERvbWFpbi5jb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZSIsIG51bGwsIFtdLCBb
InJldHVyblZhbHVlIl0pOwotSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiQ29tbWFu
ZERvbWFpbiIsIG51bGwpOwotCi0vLyBFdmVudERvbWFpbgotSW5zcGVjdG9yQmFja2VuZC5yZWdp
c3RlckRvbWFpbigiRXZlbnREb21haW4iLCBudWxsKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0
ZXJFbnVtKCJFdmVudERvbWFpbi5FdmVudFdpdGhFbnVtUGFyYW1ldGVyUGFyYW1ldGVyIiwge1No
YXJlZDogInNoYXJlZCIsIEJsYWNrOiAiYmxhY2siLCBXaGl0ZTogIndoaXRlIn0pOwotSW5zcGVj
dG9yQmFja2VuZC5yZWdpc3RlckV2ZW50KCJFdmVudERvbWFpbi5ldmVudFdpdGhFbnVtUGFyYW1l
dGVyIiwgbnVsbCwgWyJwYXJhbWV0ZXIiXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZl
bnREb21haW5EaXNwYXRjaGVyID0gSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRpc3BhdGNoZXIu
YmluZChJbnNwZWN0b3JCYWNrZW5kLCAiRXZlbnREb21haW4iKTsKLUluc3BlY3RvckJhY2tlbmQu
YWN0aXZhdGVEb21haW4oIkV2ZW50RG9tYWluIiwgbnVsbCk7Ci0jIyMgRW5kIEZpbGU6IEluc3Bl
Y3RvckJhY2tlbmRDb21tYW5kcy5qcwotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51
bS12YWx1ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENI
RVJTKQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewotCi1jbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdm9p
ZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0
Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQotICAg
IEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1f
YmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPEJhY2tlbmRE
aXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwotfTsKLQotCi1jbGFzcyBBbHRlcm5hdGVD
b21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERp
c3BhdGNoZXIgewotcHVibGljOgotICAgIHZpcnR1YWwgfkFsdGVybmF0ZUNvbW1hbmREb21haW5C
YWNrZW5kRGlzcGF0Y2hlcigpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBjb21tYW5kV2l0aEVudW1S
ZXR1cm5WYWx1ZShsb25nIGNhbGxJZCkgPSAwOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
LSMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29s
T2JqZWN0cy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJ
bnNwZWN0b3IgewotCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQotI2lmIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotY2xhc3MgQWx0ZXJuYXRlQ29tbWFuZERv
bWFpbkJhY2tlbmREaXNwYXRjaGVyOwotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQotCi1jbGFzcyBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyIHsKLXB1YmxpYzoKLSAgICAvLyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIgJ3JldHVyblZh
bHVlJyB3aGlsZSBnZW5lcmF0aW5nIGNvbW1hbmQvZXZlbnQgY29tbWFuZFdpdGhFbnVtUmV0dXJu
VmFsdWUuCi0gICAgZW51bSBjbGFzcyBSZXR1cm5WYWx1ZSB7Ci0gICAgICAgIFNoYXJlZCA9IDAs
Ci0gICAgICAgIEN5YW4gPSA2LAotICAgICAgICBNYWdlbnRhID0gNywKLSAgICAgICAgWWVsbG93
ID0gOCwKLSAgICB9OyAvLyBlbnVtIGNsYXNzIFJldHVyblZhbHVlCi0gICAgdmlydHVhbCB2b2lk
IGNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlKEVycm9yU3RyaW5nJiwgQ29tbWFuZERvbWFpbkJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UmV0dXJuVmFsdWUqIG91dF9yZXR1cm5WYWx1ZSkgPSAw
OwotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgfkNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIoKTsKLX07Ci0KLWNsYXNzIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlciBm
aW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0g
ICAgc3RhdGljIFJlZjxDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNr
ZW5kRGlzcGF0Y2hlciYsIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsK
LSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwg
UmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5hbDsKLXByaXZhdGU6Ci0gICAgdm9pZCBj
b21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9i
amVjdD4mJiBwYXJhbWV0ZXJzKTsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKLXB1YmxpYzoKLSAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJu
YXRlQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7
IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KLXByaXZhdGU6
Ci0gICAgQWx0ZXJuYXRlQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKiBtX2FsdGVybmF0
ZURpc3BhdGNoZXIgeyBudWxscHRyIH07Ci0jZW5kaWYKLXByaXZhdGU6Ci0gICAgQ29tbWFuZERv
bWFpbkJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiwgQ29tbWFuZERvbWFpbkJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXIqIG1fYWdlbnQgeyBudWxscHRyIH07Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRl
IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0K
LSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSNpbmNsdWRlICJU
ZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIElu
c3BlY3RvciB7Ci0KLUNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5Db21t
YW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9Ci0KLVJlZjxDb21tYW5kRG9t
YWluQmFja2VuZERpc3BhdGNoZXI+IENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Y3Jl
YXRlKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgQ29tbWFuZERvbWFpbkJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2Vu
dCkpOwotfQotCi1Db21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmREb21haW5C
YWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIENv
bW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQotICAgIDogU3VwcGxl
bWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCi0gICAgLCBtX2FnZW50
KGFnZW50KQotewotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZv
ckRvbWFpbigiQ29tbWFuZERvbWFpbiJfcywgdGhpcyk7Ci19Ci0KLXZvaWQgQ29tbWFuZERvbWFp
bkJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5n
JiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKLXsKLSAgICBSZWY8Q29tbWFu
ZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKLQotICAgIFJlZlB0cjxK
U09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMi
X3MsIHBhcmFtZXRlcnMpOwotCi0gICAgaWYgKG1ldGhvZCA9PSAiY29tbWFuZFdpdGhFbnVtUmV0
dXJuVmFsdWUiKQotICAgICAgICBjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShyZXF1ZXN0SWQs
IFdURk1vdmUocGFyYW1ldGVycykpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91
bmQsICInQ29tbWFuZERvbWFpbi4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOwotfQot
Ci12b2lkIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Y29tbWFuZFdpdGhFbnVtUmV0
dXJuVmFsdWUobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCi17Ci0jaWYg
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0gICAgaWYgKG1fYWx0ZXJu
YXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmNvbW1hbmRX
aXRoRW51bVJldHVyblZhbHVlKHJlcXVlc3RJZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0j
ZW5kaWYKLQotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJl
c3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgQ29tbWFuZERvbWFpbkJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlcjo6UmV0dXJuVmFsdWUgb3V0X3JldHVyblZhbHVlOwotICAgIG1fYWdl
bnQtPmNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlKGVycm9yLCAmb3V0X3JldHVyblZhbHVlKTsK
LQotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0gICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJy
ZXR1cm5WYWx1ZSJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1D
b25zdGFudFZhbHVlKG91dF9yZXR1cm5WYWx1ZSkpOwotCi0gICAgaWYgKCFlcnJvci5sZW5ndGgo
KSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwg
V1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNw
YXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJv
ciwgV1RGTW92ZShlcnJvcikpOwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMj
IEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGVudW0tdmFsdWVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgi
Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEZyb250ZW5kUm91dGVyOwot
Ci1jbGFzcyBFdmVudERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlciB7Ci0gICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgRXZlbnREb21haW5Gcm9udGVuZERpc3BhdGNoZXIo
RnJvbnRlbmRSb3V0ZXImIGZyb250ZW5kUm91dGVyKSA6IG1fZnJvbnRlbmRSb3V0ZXIoZnJvbnRl
bmRSb3V0ZXIpIHsgfQotICAgICAgICAvLyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIgJ3BhcmFtZXRl
cicgd2hpbGUgZ2VuZXJhdGluZyBjb21tYW5kL2V2ZW50IGV2ZW50V2l0aEVudW1QYXJhbWV0ZXIu
Ci0gICAgICAgIGVudW0gY2xhc3MgUGFyYW1ldGVyIHsKLSAgICAgICAgICAgIFNoYXJlZCA9IDAs
Ci0gICAgICAgICAgICBCbGFjayA9IDQsCi0gICAgICAgICAgICBXaGl0ZSA9IDUsCi0gICAgICAg
IH07IC8vIGVudW0gY2xhc3MgUGFyYW1ldGVyCi0gICAgdm9pZCBldmVudFdpdGhFbnVtUGFyYW1l
dGVyKFBhcmFtZXRlciBwYXJhbWV0ZXIpOwotcHJpdmF0ZToKLSAgICBGcm9udGVuZFJvdXRlciYg
bV9mcm9udGVuZFJvdXRlcjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVu
ZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBlbnVtLXZhbHVlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRj
aGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0
ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0
b3IgewotCi12b2lkIEV2ZW50RG9tYWluRnJvbnRlbmREaXNwYXRjaGVyOjpldmVudFdpdGhFbnVt
UGFyYW1ldGVyKFBhcmFtZXRlciBwYXJhbWV0ZXIpCi17Ci0gICAgUmVmPEpTT046Ok9iamVjdD4g
anNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5z
ZXRTdHJpbmcoIm1ldGhvZCJfcywgIkV2ZW50RG9tYWluLmV2ZW50V2l0aEVudW1QYXJhbWV0ZXIi
X3MpOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHBhcmFtc09iamVjdCA9IEpTT046Ok9iamVjdDo6
Y3JlYXRlKCk7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInBhcmFtZXRlciJfcywgSW5z
cGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKHBhcmFt
ZXRlcikpOwotICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyJfcywgV1RGTW92ZShw
YXJhbXNPYmplY3QpKTsKLQotICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNz
YWdlLT50b0pTT05TdHJpbmcoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0j
IyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZW51bS12YWx1ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
clByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotCi1uYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKLQotCi0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLQotCi0vLyBGb3J3
YXJkIGRlY2xhcmF0aW9ucy4KLW5hbWVzcGFjZSBUeXBlRG9tYWluIHsKLWVudW0gY2xhc3MgVHlw
ZURvbWFpbkVudW07Ci19IC8vIFR5cGVEb21haW4KLS8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0
aW9ucy4KLQotCi0KLQotbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKLQotU3RyaW5nIGdldEVudW1D
b25zdGFudFZhbHVlKGludCBjb2RlKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdl
dEVudW1Db25zdGFudFZhbHVlKFQgZW51bVZhbHVlKQotewotICAgIHJldHVybiBnZXRFbnVtQ29u
c3RhbnRWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KGVudW1WYWx1ZSkpOwotfQotCi19IC8vIG5hbWVz
cGFjZSBUZXN0SGVscGVycwotCi1uYW1lc3BhY2UgVHlwZURvbWFpbiB7Ci0vKiAgKi8KLWVudW0g
Y2xhc3MgVHlwZURvbWFpbkVudW0gewotICAgIFNoYXJlZCA9IDAsCi0gICAgUmVkID0gMSwKLSAg
ICBHcmVlbiA9IDIsCi0gICAgQmx1ZSA9IDMsCi19OyAvLyBlbnVtIGNsYXNzIFR5cGVEb21haW5F
bnVtCi19IC8vIFR5cGVEb21haW4KLQotCi0KLW5hbWVzcGFjZSBUZXN0SGVscGVycyB7Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIFByb3RvY29sRW51bVR5cGU+Ci1PcHRpb25hbDxQcm90b2NvbEVudW1U
eXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJik7Ci0KLS8vIEVudW1z
IGluIHRoZSAnVHlwZURvbWFpbicgRG9tYWluCi10ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0
b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51bT4gcGFyc2VFbnVtVmFsdWVG
cm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46OlR5cGVEb21haW5FbnVt
Pihjb25zdCBTdHJpbmcmKTsKLQotfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKLQotfSAvLyBu
YW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLW5hbWVzcGFj
ZSBXVEYgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Ci0KLS8v
IEhhc2ggZGVjbGFyYXRpb25zIGluIHRoZSAnVHlwZURvbWFpbicgRG9tYWluCi10ZW1wbGF0ZTw+
Ci1zdHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlw
ZURvbWFpbkVudW0+IHsKLSAgICB0eXBlZGVmIEludEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6
VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW0+IEhhc2g7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBX
VEYKLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGVudW0tdmFsdWVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVj
dHMuaCIKLQotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLW5hbWVzcGFjZSBQcm90b2NvbCB7
Ci0KLW5hbWVzcGFjZSBUZXN0SGVscGVycyB7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBl
bnVtX2NvbnN0YW50X3ZhbHVlc1tdID0gewotICAgICJzaGFyZWQiLAotICAgICJyZWQiLAotICAg
ICJncmVlbiIsCi0gICAgImJsdWUiLAotICAgICJibGFjayIsCi0gICAgIndoaXRlIiwKLSAgICAi
Y3lhbiIsCi0gICAgIm1hZ2VudGEiLAotICAgICJ5ZWxsb3ciLAotfTsKLQotU3RyaW5nIGdldEVu
dW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7Ci0gICAgcmV0dXJuIGVudW1fY29uc3RhbnRfdmFs
dWVzW2NvZGVdOwotfQotCi0vLyBFbnVtcyBpbiB0aGUgJ1R5cGVEb21haW4nIERvbWFpbgotdGVt
cGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURv
bWFpbkVudW0+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpU
eXBlRG9tYWluOjpUeXBlRG9tYWluRW51bT4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykK
LXsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7Ci0gICAgICAg
IChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW06
OlNoYXJlZCwKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWlu
OjpUeXBlRG9tYWluRW51bTo6UmVkLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9j
b2w6OlR5cGVEb21haW46OlR5cGVEb21haW5FbnVtOjpHcmVlbiwKLSAgICAgICAgKHNpemVfdClJ
bnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51bTo6Qmx1ZSwKLSAg
ICB9OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgNDsgKytpKQotICAgICAgICBpZiAocHJv
dG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNbaV1dKQot
ICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBl
RG9tYWluRW51bSljb25zdGFudFZhbHVlc1tpXTsKLQotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
Ci19Ci0KLQotfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKLQotCi0KLX0gLy8gbmFtZXNwYWNl
IFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbE9iamVjdHMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNr
ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0t
dmFsdWVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVycy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQotQHByb3RvY29sIFRlc3RQcm90
b2NvbENvbW1hbmREb21haW5Eb21haW5IYW5kbGVyOwotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsK
LQotCi1jbGFzcyBPYmpDSW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyIGZp
bmFsIDogcHVibGljIEFsdGVybmF0ZUNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlciB7Ci0g
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgT2JqQ0luc3BlY3RvckNv
bW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWlu
RG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQotICAgIHZv
aWQgY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUobG9uZyByZXF1ZXN0SWQpIGZpbmFsOwotcHJp
dmF0ZToKLSAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sQ29tbWFuZERvbWFpbkRvbWFpbkhh
bmRsZXI+PiBtX2RlbGVnYXRlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0
UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbElu
dGVybmFsLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW5j
bHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXZvaWQg
T2JqQ0luc3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Y29tbWFuZFdpdGhF
bnVtUmV0dXJuVmFsdWUobG9uZyByZXF1ZXN0SWQpCi17Ci0gICAgaWYgKCFbbV9kZWxlZ2F0ZSBy
ZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlV2l0
aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hl
cjo6TWV0aG9kTm90Rm91bmQsICInQ29tbWFuZERvbWFpbi5jb21tYW5kV2l0aEVudW1SZXR1cm5W
YWx1ZScgd2FzIG5vdCBmb3VuZCJfcyk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNl
bmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZCBlcnJv
ckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpT
ZXJ2ZXJFcnJvciwgZXJyb3IpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVu
ZGluZ0Vycm9ycygpOwotICAgIH07Ci0KLSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKFRlc3RQ
cm90b2NvbENvbW1hbmREb21haW5Db21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZVJldHVyblZhbHVl
IHJldHVyblZhbHVlKSB7Ci0gICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdE9iamVjdCA9
IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5n
KCJyZXR1cm5WYWx1ZSJfcywgdG9Qcm90b2NvbFN0cmluZyhyZXR1cm5WYWx1ZSkpOwotICAgICAg
ICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJl
c3VsdE9iamVjdCksIGZhbHNlKTsKLSAgICB9OwotCi0gICAgW21fZGVsZWdhdGUgY29tbWFuZFdp
dGhFbnVtUmV0dXJuVmFsdWVXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3ND
YWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOwotfQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3Rv
Y29sLmg+Ci0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVy
ZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKLUBwcm9wZXJ0eSAobm9u
YXRvbWljLCByZXRhaW4sIHNldHRlcj1zZXRDb21tYW5kRG9tYWluSGFuZGxlcjopIGlkPFRlc3RQ
cm90b2NvbENvbW1hbmREb21haW5Eb21haW5IYW5kbGVyPiBjb21tYW5kRG9tYWluSGFuZGxlcjsK
LUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgVGVzdFByb3RvY29sRXZlbnREb21haW5E
b21haW5FdmVudERpc3BhdGNoZXIgKmV2ZW50RG9tYWluRXZlbnREaXNwYXRjaGVyOwotQGVuZAot
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgi
Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0
ZURpc3BhdGNoYWJsZUFnZW50Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJs
ZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0
b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCi17Ci0gICAg
QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKLSAgICBpZDxUZXN0
UHJvdG9jb2xDb21tYW5kRG9tYWluRG9tYWluSGFuZGxlcj4gX2NvbW1hbmREb21haW5IYW5kbGVy
OwotICAgIFRlc3RQcm90b2NvbEV2ZW50RG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyICpfZXZl
bnREb21haW5FdmVudERpc3BhdGNoZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENv
bnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgotewot
ICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4g
bmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xs
ZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAgIFtfY29t
bWFuZERvbWFpbkhhbmRsZXIgcmVsZWFzZV07Ci0gICAgW19ldmVudERvbWFpbkV2ZW50RGlzcGF0
Y2hlciByZWxlYXNlXTsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLS0gKHZvaWQpc2V0Q29t
bWFuZERvbWFpbkhhbmRsZXI6KGlkPFRlc3RQcm90b2NvbENvbW1hbmREb21haW5Eb21haW5IYW5k
bGVyPiloYW5kbGVyCi17Ci0gICAgaWYgKGhhbmRsZXIgPT0gX2NvbW1hbmREb21haW5IYW5kbGVy
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBbX2NvbW1hbmREb21haW5IYW5kbGVyIHJlbGVhc2Vd
OwotICAgIF9jb21tYW5kRG9tYWluSGFuZGxlciA9IFtoYW5kbGVyIHJldGFpbl07Ci0KLSAgICBh
dXRvIGFsdGVybmF0ZURpc3BhdGNoZXIgPSBtYWtlVW5pcXVlPE9iakNJbnNwZWN0b3JDb21tYW5k
RG9tYWluQmFja2VuZERpc3BhdGNoZXI+KGhhbmRsZXIpOwotICAgIGF1dG8gYWx0ZXJuYXRlQWdl
bnQgPSBtYWtlVW5pcXVlPEFsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50PENvbW1hbmREb21haW5C
YWNrZW5kRGlzcGF0Y2hlciwgQWx0ZXJuYXRlQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVy
Pj4oIkNvbW1hbmREb21haW4iX3MsICpfY29udHJvbGxlciwgV1RGTW92ZShhbHRlcm5hdGVEaXNw
YXRjaGVyKSk7Ci0gICAgX2NvbnRyb2xsZXItPmFwcGVuZEV4dHJhQWdlbnQoV1RGTW92ZShhbHRl
cm5hdGVBZ2VudCkpOwotfQotCi0tIChpZDxUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluRG9tYWlu
SGFuZGxlcj4pY29tbWFuZERvbWFpbkhhbmRsZXIKLXsKLSAgICByZXR1cm4gX2NvbW1hbmREb21h
aW5IYW5kbGVyOwotfQotCi0tIChUZXN0UHJvdG9jb2xFdmVudERvbWFpbkRvbWFpbkV2ZW50RGlz
cGF0Y2hlciAqKWV2ZW50RG9tYWluRXZlbnREaXNwYXRjaGVyCi17Ci0gICAgaWYgKCFfZXZlbnRE
b21haW5FdmVudERpc3BhdGNoZXIpCi0gICAgICAgIF9ldmVudERvbWFpbkV2ZW50RGlzcGF0Y2hl
ciA9IFtbVGVzdFByb3RvY29sRXZlbnREb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgYWxsb2Nd
IGluaXRXaXRoQ29udHJvbGxlcjpfY29udHJvbGxlcl07Ci0gICAgcmV0dXJuIF9ldmVudERvbWFp
bkV2ZW50RGlzcGF0Y2hlcjsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sQ29uZmlndXJhdGlvbi5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnRE
aXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFs
dWVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2lt
cG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1l
c3BhY2UgSW5zcGVjdG9yOwotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sRXZlbnREb21h
aW5Eb21haW5FdmVudERpc3BhdGNoZXIKLXsKLSAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRy
b2xsZXIqIF9jb250cm9sbGVyOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9s
bGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBz
ZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsK
LSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwot
ICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWV2ZW50V2l0aEVudW1QYXJhbWV0ZXJXaXRo
UGFyYW1ldGVyOihUZXN0UHJvdG9jb2xFdmVudERvbWFpbkV2ZW50V2l0aEVudW1QYXJhbWV0ZXJQ
YXJhbWV0ZXIpcGFyYW1ldGVyCi17Ci0gICAgY29uc3QgRnJvbnRlbmRSb3V0ZXImIHJvdXRlciA9
IF9jb250cm9sbGVyLT5mcm9udGVuZFJvdXRlcigpOwotCi0gICAgUmVmPEpTT046Ok9iamVjdD4g
anNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5z
ZXRTdHJpbmcoIm1ldGhvZCJfcywgIkV2ZW50RG9tYWluLmV2ZW50V2l0aEVudW1QYXJhbWV0ZXIi
X3MpOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHBhcmFtc09iamVjdCA9IEpTT046Ok9iamVjdDo6
Y3JlYXRlKCk7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInBhcmFtZXRlciJfcywgdG9Q
cm90b2NvbFN0cmluZyhwYXJhbWV0ZXIpKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJw
YXJhbXMiX3MsIFdURk1vdmUocGFyYW1zT2JqZWN0KSk7Ci0gICAgcm91dGVyLnNlbmRFdmVudChq
c29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2wuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVz
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9y
dCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQ
cm90b2NvbEpTT05PYmplY3QuaD4KLQotCi0KLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwg
VGVzdFByb3RvY29sUGxhdGZvcm0pIHsKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbCwKLSAg
ICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWMsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1J
T1MsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUywKLX07Ci0KLQotdHlwZWRlZiBOU19F
TlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0pIHsKLSAgICBUZXN0UHJv
dG9jb2xUeXBlRG9tYWluRW51bVNoYXJlZCwKLSAgICBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51
bVJlZCwKLSAgICBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bUdyZWVuLAotICAgIFRlc3RQcm90
b2NvbFR5cGVEb21haW5FbnVtQmx1ZSwKLX07Ci0KLQotCi1AcHJvdG9jb2wgVGVzdFByb3RvY29s
Q29tbWFuZERvbWFpbkRvbWFpbkhhbmRsZXIgPE5TT2JqZWN0PgotQG9wdGlvbmFsCi0tICh2b2lk
KWNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNT
dHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKShUZXN0
UHJvdG9jb2xDb21tYW5kRG9tYWluQ29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWVSZXR1cm5WYWx1
ZSByZXR1cm5WYWx1ZSkpc3VjY2Vzc0NhbGxiYWNrOwotQGVuZAotCi1fX2F0dHJpYnV0ZV9fKCh2
aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sRXZlbnREb21h
aW5Eb21haW5FdmVudERpc3BhdGNoZXIgOiBOU09iamVjdAotLSAodm9pZClldmVudFdpdGhFbnVt
UGFyYW1ldGVyV2l0aFBhcmFtZXRlcjooVGVzdFByb3RvY29sRXZlbnREb21haW5FdmVudFdpdGhF
bnVtUGFyYW1ldGVyUGFyYW1ldGVyKXBhcmFtZXRlcjsKLUBlbmQKLQotCi0jaW1wb3J0IDxXZWJJ
bnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+Ci0KLSMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbElu
dGVybmFsLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQg
IlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUu
aCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxl
ci5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotQGludGVyZmFjZSBUZXN0UHJvdG9j
b2xFdmVudERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAoUHJpdmF0ZSkKLS0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEluc3BlY3Rvcjo6QXVnbWVudGFibGVJbnNwZWN0b3JD
b250cm9sbGVyKiljb250cm9sbGVyOwotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRl
c3RQcm90b2NvbC5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252
ZXJzaW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
T2JqQ0VudW1UeXBlPgotT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmco
Y29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhU
ZXN0UHJvdG9jb2xQbGF0Zm9ybSB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBj
YXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOgotICAgICAgICByZXR1cm4gImFsbCJfczsKLSAg
ICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzoKLSAgICAgICAgcmV0dXJuICJnZW5l
cmljIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1JT1M6Ci0gICAgICAgIHJldHVy
biAiaW9zIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzoKLSAgICAgICAg
cmV0dXJuICJtYWNvcyJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25h
bDxUZXN0UHJvdG9jb2xQbGF0Zm9ybT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYg
dmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJhbGwiKQotICAgICAgICByZXR1cm4gVGVzdFBy
b3RvY29sUGxhdGZvcm1BbGw7Ci0gICAgaWYgKHZhbHVlID09ICJnZW5lcmljIikKLSAgICAgICAg
cmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzsKLSAgICBpZiAodmFsdWUgPT0gImlv
cyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzsKLSAgICBpZiAodmFs
dWUgPT0gIm1hY29zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M7
Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9j
b2xTdHJpbmcoVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0gdmFsdWUpCi17Ci0gICAgc3dpdGNo
KHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bVNoYXJlZDoKLSAg
ICAgICAgcmV0dXJuICJzaGFyZWQiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xUeXBlRG9tYWlu
RW51bVJlZDoKLSAgICAgICAgcmV0dXJuICJyZWQiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xU
eXBlRG9tYWluRW51bUdyZWVuOgotICAgICAgICByZXR1cm4gImdyZWVuIl9zOwotICAgIGNhc2Ug
VGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1CbHVlOgotICAgICAgICByZXR1cm4gImJsdWUiX3M7
Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sVHlw
ZURvbWFpbkVudW0+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewot
ICAgIGlmICh2YWx1ZSA9PSAic2hhcmVkIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFR5
cGVEb21haW5FbnVtU2hhcmVkOwotICAgIGlmICh2YWx1ZSA9PSAicmVkIikKLSAgICAgICAgcmV0
dXJuIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtUmVkOwotICAgIGlmICh2YWx1ZSA9PSAiZ3Jl
ZW4iKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1HcmVlbjsKLSAg
ICBpZiAodmFsdWUgPT0gImJsdWUiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sVHlwZURv
bWFpbkVudW1CbHVlOwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQg
IlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90
b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0K
LUBpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChUeXBlRG9tYWluRG9tYWlu
KQotCi0rICh2b2lkKV9wYXJzZVR5cGVEb21haW5FbnVtOihOU051bWJlciAqKilvdXRWYWx1ZSBm
cm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zIChUeXBlRG9tYWluRG9tYWluKQotCi0rICh2b2lkKV9wYXJz
ZVR5cGVEb21haW5FbnVtOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5
bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TU3Ry
aW5nIGNsYXNzXSk7Ci0gICAgT3B0aW9uYWw8VGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0+IHJl
c3VsdCA9IEluc3BlY3Rvcjo6ZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbFR5cGVEb21h
aW5FbnVtPihwYXlsb2FkKTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9FTlVNX1ZBTFVF
KHJlc3VsdCwgQCJUeXBlRG9tYWluRW51bSIpOwotICAgICpvdXRWYWx1ZSA9IEAocmVzdWx0LnZh
bHVlKCkpOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbgotLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJ
bnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNp
bXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0jaW1w
b3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNp
bmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1k
b21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9ldmVudC10YXJnZXRUeXBl
LW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJlc3VsdApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggZDg5YTk3ZmY1NWRmZWM0Mzk3ZTBlYjc0YWI1ZGZkMWU0NDBlNzRm
Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9l
dmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJlc3Vs
dAorKysgL2Rldi9udWxsCkBAIC0xLDEwNjMgKzAsMCBAQAotIyMjIEJlZ2luIEZpbGU6IEluc3Bl
Y3RvckJhY2tlbmRDb21tYW5kcy5qcwotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotLy8gRG9tYWluCi1JbnNw
ZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJEb21haW4iLCBudWxsKTsKLUluc3BlY3RvckJh
Y2tlbmQucmVnaXN0ZXJDb21tYW5kKCJEb21haW4uQ29tbWFuZCIsIG51bGwsIFtdLCBbXSk7Ci1J
bnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnQoIkRvbWFpbi5FdmVudCIsIFsicGFnZSIsICJ3
b3JrZXIiXSwgW10pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbkRpc3BhdGNoZXIg
PSBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRGlzcGF0Y2hlci5iaW5kKEluc3BlY3RvckJhY2tl
bmQsICJEb21haW4iKTsKLUluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkRvbWFpbiIs
IFsicGFnZSJdKTsKLSMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRv
bWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgotI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLQotbmFtZXNwYWNl
IEluc3BlY3RvciB7Ci0KLWNsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1Ymxp
YzoKLSAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hl
cj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNo
ZXIpOyB9Ci0gICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3Qg
eyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQotcHJpdmF0ZToKLSAgICBSZWZQ
dHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Ci19OwotCi0KLWNsYXNz
IEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJhY2tl
bmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5BbHRlcm5hdGVEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlcigpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBDb21tYW5kKGxvbmcgY2FsbElk
KSA9IDA7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotI2VuZGlmIC8vIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotIyMjIEVuZCBGaWxlOiBUZXN0QWx0
ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5k
RGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRh
cmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRl
ICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
LQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwot
Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi1jbGFzcyBBbHRl
cm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjsKLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQotY2xhc3MgRG9tYWluQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChFcnJvclN0cmluZyYp
ID0gMDsKLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIH5Eb21haW5CYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXIoKTsKLX07Ci0KLWNsYXNzIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVi
bGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMg
UmVmPERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBE
b21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICB2b2lkIGRpc3BhdGNoKGxvbmcg
cmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNz
YWdlKSBmaW5hbDsKLXByaXZhdGU6Ci0gICAgdm9pZCBDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwotI2lmIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQotcHVibGljOgotICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlz
cGF0Y2hlcihBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0
Y2hlcikgeyBtX2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9Ci1w
cml2YXRlOgotICAgIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKiBtX2FsdGVybmF0
ZURpc3BhdGNoZXIgeyBudWxscHRyIH07Ci0jZW5kaWYKLXByaXZhdGU6Ci0gICAgRG9tYWluQmFj
a2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIqKTsKLSAgICBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQg
eyBudWxscHRyIH07Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmls
ZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2Vu
ZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50
LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1
ZXMuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKLSNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jZW5kaWYK
LQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLURvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxl
cjo6fkRvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQotCi1SZWY8RG9tYWluQmFj
a2VuZERpc3BhdGNoZXI+IERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoQmFja2VuZERp
c3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIqIGFnZW50KQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERvbWFpbkJhY2tlbmREaXNw
YXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOwotfQotCi1Eb21haW5CYWNrZW5kRGlz
cGF0Y2hlcjo6RG9tYWluQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tl
bmREaXNwYXRjaGVyLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQotICAg
IDogU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCi0gICAg
LCBtX2FnZW50KGFnZW50KQotewotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlz
cGF0Y2hlckZvckRvbWFpbigiRG9tYWluIl9zLCB0aGlzKTsKLX0KLQotdm9pZCBEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0
aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCi17Ci0gICAgUmVmPERvbWFpbkJhY2tl
bmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKLQotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+
IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRl
cnMpOwotCi0gICAgaWYgKG1ldGhvZCA9PSAiQ29tbWFuZCIpCi0gICAgICAgIENvbW1hbmQocmVx
dWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2Vu
ZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhv
ZE5vdEZvdW5kLCAiJ0RvbWFpbi4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOwotfQot
Ci12b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQotewotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQotICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAg
bV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5Db21tYW5kKHJlcXVlc3RJZCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09O
OjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgbV9hZ2VudC0+
Q29tbWFuZChlcnJvcik7Ci0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCks
IGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFBy
b3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9y
KSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNw
YXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0
VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRl
c3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xh
c3MgRnJvbnRlbmRSb3V0ZXI7Ci0KLWNsYXNzIERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlciB7Ci0g
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgRG9tYWluRnJvbnRlbmRE
aXNwYXRjaGVyKEZyb250ZW5kUm91dGVyJiBmcm9udGVuZFJvdXRlcikgOiBtX2Zyb250ZW5kUm91
dGVyKGZyb250ZW5kUm91dGVyKSB7IH0KLSAgICB2b2lkIEV2ZW50KCk7Ci1wcml2YXRlOgotICAg
IEZyb250ZW5kUm91dGVyJiBtX2Zyb250ZW5kUm91dGVyOwotfTsKLQotfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVn
Z2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJz
LmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7
Ci0KLXZvaWQgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVyOjpFdmVudCgpCi17Ci0gICAgUmVmPEpT
T046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpz
b25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7Ci0KLSAg
ICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkp
OwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0RnJv
bnRlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVj
dHMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRhcmdldFR5cGUt
bWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi1uYW1lc3BhY2UgUHJvdG9jb2wg
ewotCi0KLQotCi0KLQotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dh
YmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0K
LSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQot
fSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUu
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+
Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi1AcHJvdG9jb2wgVGVzdFByb3RvY29sRG9t
YWluRG9tYWluSGFuZGxlcjsKLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotY2xhc3MgT2Jq
Q0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0
ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
LXB1YmxpYzoKLSAgICBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXIoaWQ8VGVz
dFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFu
ZGxlcjsgfQotICAgIHZvaWQgQ29tbWFuZChsb25nIHJlcXVlc3RJZCkgZmluYWw7Ci1wcml2YXRl
OgotICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPj4gbV9k
ZWxlZ2F0ZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQg
ImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0K
LSNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLW5hbWVz
cGFjZSBJbnNwZWN0b3IgewotCi12b2lkIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0
Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVlc3RJZCkKLXsKLSAgICBpZiAoIVttX2RlbGVnYXRlIHJl
c3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nl
c3NDYWxsYmFjazopXSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90
b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAi
J0RvbWFpbi5Db21tYW5kJyB3YXMgbm90IGZvdW5kIl9zKTsKLSAgICAgICAgYmFja2VuZERpc3Bh
dGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERp
c3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVy
KCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgfTsKLQotICAgIGlkIHN1Y2Nlc3NDYWxsYmFj
ayA9IF57Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0
SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKLSAgICB9OwotCi0gICAgW21fZGVs
ZWdhdGUgQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxi
YWNrOnN1Y2Nlc3NDYWxsYmFja107Ci19Ci0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0K
LSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dh
YmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KLQotX19hdHRyaWJ1dGVfXygo
dmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3Vy
YXRpb24gOiBOU09iamVjdAotQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNl
dERvbWFpbkhhbmRsZXI6KSBpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiBkb21h
aW5IYW5kbGVyOwotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBUZXN0UHJvdG9jb2xE
b21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKmRvbWFpbkV2ZW50RGlzcGF0Y2hlcjsKLUBlbmQK
LQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2Fi
bGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgotCi0jaW1wb3J0ICJUZXN0UHJv
dG9jb2xJbnRlcm5hbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJz
LmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5o
PgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVy
Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlz
cGF0Y2hlcnMuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVycy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW1wbGVtZW50YXRp
b24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9y
Q29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci0gICAgaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWlu
SGFuZGxlcj4gX2RvbWFpbkhhbmRsZXI7Ci0gICAgVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZl
bnREaXNwYXRjaGVyICpfZG9tYWluRXZlbnREaXNwYXRjaGVyOwotfQotCi0tIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNv
bnRyb2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAg
ICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRyb2xs
ZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWRlYWxsb2MK
LXsKLSAgICBbX2RvbWFpbkhhbmRsZXIgcmVsZWFzZV07Ci0gICAgW19kb21haW5FdmVudERpc3Bh
dGNoZXIgcmVsZWFzZV07Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi0tICh2b2lkKXNldERv
bWFpbkhhbmRsZXI6KGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+KWhhbmRsZXIK
LXsKLSAgICBpZiAoaGFuZGxlciA9PSBfZG9tYWluSGFuZGxlcikKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgW19kb21haW5IYW5kbGVyIHJlbGVhc2VdOwotICAgIF9kb21haW5IYW5kbGVyID0gW2hh
bmRsZXIgcmV0YWluXTsKLQotICAgIGF1dG8gYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IG1ha2VVbmlx
dWU8T2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyPihoYW5kbGVyKTsKLSAgICBh
dXRvIGFsdGVybmF0ZUFnZW50ID0gbWFrZVVuaXF1ZTxBbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2Vu
dDxEb21haW5CYWNrZW5kRGlzcGF0Y2hlciwgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNo
ZXI+PigiRG9tYWluIl9zLCAqX2NvbnRyb2xsZXIsIFdURk1vdmUoYWx0ZXJuYXRlRGlzcGF0Y2hl
cikpOwotICAgIF9jb250cm9sbGVyLT5hcHBlbmRFeHRyYUFnZW50KFdURk1vdmUoYWx0ZXJuYXRl
QWdlbnQpKTsKLX0KLQotLSAoaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4pZG9t
YWluSGFuZGxlcgotewotICAgIHJldHVybiBfZG9tYWluSGFuZGxlcjsKLX0KLQotLSAoVGVzdFBy
b3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyICopZG9tYWluRXZlbnREaXNwYXRjaGVy
Ci17Ci0gICAgaWYgKCFfZG9tYWluRXZlbnREaXNwYXRjaGVyKQotICAgICAgICBfZG9tYWluRXZl
bnREaXNwYXRjaGVyID0gW1tUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIg
YWxsb2NdIGluaXRXaXRoQ29udHJvbGxlcjpfY29udHJvbGxlcl07Ci0gICAgcmV0dXJuIF9kb21h
aW5FdmVudERpc3BhdGNoZXI7Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbENvbmZpZ3VyYXRpb24ubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50
RGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudC10
YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbElu
dGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2lt
cG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQot
QGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlcgot
ewotICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci19Ci0K
LS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9y
Q29udHJvbGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAg
aWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsK
LSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0g
KHZvaWQpRXZlbnQKLXsKLSAgICBjb25zdCBGcm9udGVuZFJvdXRlciYgcm91dGVyID0gX2NvbnRy
b2xsZXItPmZyb250ZW5kUm91dGVyKCk7Ci0KLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVz
c2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmlu
ZygibWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9zKTsKLSAgICByb3V0ZXIuc2VuZEV2ZW50KGpz
b25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0
VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRp
b24uaD4KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgot
Ci0KLQotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xQbGF0Zm9ybSkg
ewotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3Jt
R2VuZXJpYywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUywKLSAgICBUZXN0UHJvdG9jb2xQ
bGF0Zm9ybU1hY09TLAotfTsKLQotCi0KLQotCi1AcHJvdG9jb2wgVGVzdFByb3RvY29sRG9tYWlu
RG9tYWluSGFuZGxlciA8TlNPYmplY3Q+Ci1Ab3B0aW9uYWwKLS0gKHZvaWQpQ29tbWFuZFdpdGhF
cnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNj
ZXNzQ2FsbGJhY2s6KHZvaWQoXikodm9pZCkpc3VjY2Vzc0NhbGxiYWNrOwotQGVuZAotCi1fX2F0
dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3Rv
Y29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyIDogTlNPYmplY3QKLS0gKHZvaWQpRXZlbnQ7
Ci1AZW5kCi0KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRp
YmlsaXR5T2JqZWN0cy5oPgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5
cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1w
b3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2
YXRlLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRy
b2xsZXIuaD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLUBpbnRlcmZhY2UgVGVzdFBy
b3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyIChQcml2YXRlKQotLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoQ29udHJvbGxlcjooSW5zcGVjdG9yOjpBdWdtZW50YWJsZUluc3BlY3RvckNv
bnRyb2xsZXIqKWNvbnRyb2xsZXI7Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xJbnRlcm5hbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRhcmdldFR5cGUt
bWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0
IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+Ci0KLW5hbWVzcGFj
ZSBJbnNwZWN0b3IgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+Ci1PcHRpb25h
bDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsK
LQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFBsYXRmb3JtIHZh
bHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZv
cm1BbGw6Ci0gICAgICAgIHJldHVybiAiYWxsIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxh
dGZvcm1HZW5lcmljOgotICAgICAgICByZXR1cm4gImdlbmVyaWMiX3M7Ci0gICAgY2FzZSBUZXN0
UHJvdG9jb2xQbGF0Zm9ybUlPUzoKLSAgICAgICAgcmV0dXJuICJpb3MiX3M7Ci0gICAgY2FzZSBU
ZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOgotICAgICAgICByZXR1cm4gIm1hY29zIl9zOwotICAg
IH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFBsYXRmb3Jt
PiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFs
dWUgPT0gImFsbCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDsKLSAg
ICBpZiAodmFsdWUgPT0gImdlbmVyaWMiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxh
dGZvcm1HZW5lcmljOwotICAgIGlmICh2YWx1ZSA9PSAiaW9zIikKLSAgICAgICAgcmV0dXJuIFRl
c3RQcm90b2NvbFBsYXRmb3JtSU9TOwotICAgIGlmICh2YWx1ZSA9PSAibWFjb3MiKQotICAgICAg
ICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzsKLSAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZl
bnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0
ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJv
dG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwot
Ci0KLQotCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0K
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdn
YWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpT
T05PYmplY3RQcml2YXRlLmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8
d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9ldmVudHMt
d2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZXZlbnRzLXdpdGgt
b3B0aW9uYWwtcGFyYW1ldGVycy5qc29uLXJlc3VsdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggOGE5NWJhNTU4Y2Y0NjM4ZWRkM2ZiMmEzMTE2Y2RlMDMzMjI5MWEzNS4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9ldmVudHMtd2l0aC1v
cHRpb25hbC1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0CisrKyAvZGV2L251bGwKQEAgLTEsMTIxNyAr
MCwwIEBACi0jIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1l
dGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLS8v
IERhdGFiYXNlCi1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJEYXRhYmFzZSIsIG51
bGwpOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckV2ZW50KCJEYXRhYmFzZS5kaWRFeGVjdXRl
T3B0aW9uYWxQYXJhbWV0ZXJzIiwgbnVsbCwgWyJjb2x1bW5OYW1lcyIsICJub3RlcyIsICJ0aW1l
c3RhbXAiLCAidmFsdWVzIiwgInBheWxvYWQiLCAic3FsRXJyb3IiLCAic2NyZWVuQ29sb3IiLCAi
YWx0ZXJuYXRlQ29sb3JzIiwgInByaW50Q29sb3IiXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lz
dGVyRXZlbnQoIkRhdGFiYXNlLmRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyIsIG51bGws
IFsiY29sdW1uTmFtZXMiLCAibm90ZXMiLCAidGltZXN0YW1wIiwgInZhbHVlcyIsICJwYXlsb2Fk
IiwgInNxbEVycm9yIiwgInNjcmVlbkNvbG9yIiwgImFsdGVybmF0ZUNvbG9ycyIsICJwcmludENv
bG9yIl0pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRhdGFiYXNlRGlzcGF0Y2hlciA9IElu
c3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEaXNwYXRjaGVyLmJpbmQoSW5zcGVjdG9yQmFja2VuZCwg
IkRhdGFiYXNlIik7Ci1JbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJEYXRhYmFzZSIs
IG51bGwpOwotIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMu
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21h
IG9uY2UKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi0j
aW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFz
cyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNr
ZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBt
X2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQotICAgIEJhY2tlbmRE
aXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERp
c3BhdGNoZXIuZ2V0KCk7IH0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVy
PiBtX2JhY2tlbmREaXNwYXRjaGVyOwotfTsKLQotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
LSMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNp
bmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXR5cGVkZWYgU3RyaW5nIEVycm9yU3Ry
aW5nOwotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1v
cHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlz
cGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5k
Um91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvTmV2
ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNpZiBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSNpbmNsdWRlICJUZXN0QWx0ZXJu
YXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIEluc3BlY3RvciB7
Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0QmFj
a2VuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0
Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9w
dGlvbmFsLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMu
aCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgRnJvbnRlbmRSb3V0ZXI7
Ci0KLWNsYXNzIERhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyIHsKLSAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBEYXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hlcihGcm9u
dGVuZFJvdXRlciYgZnJvbnRlbmRSb3V0ZXIpIDogbV9mcm9udGVuZFJvdXRlcihmcm9udGVuZFJv
dXRlcikgeyB9Ci0gICAgdm9pZCBkaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzKFJlZlB0cjxK
U09OOjpBcnJheU9mPFN0cmluZz4+IGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIG5vdGVzLCBj
b25zdCBkb3VibGUqIHRpbWVzdGFtcCwgUmVmUHRyPEpTT046Ok9iamVjdD4gdmFsdWVzLCBSZWZQ
dHI8SlNPTjo6VmFsdWU+IHBheWxvYWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6RXJyb3I+IHNxbEVycm9yLCBjb25zdCBTdHJpbmcqIHNjcmVlbkNvbG9yLCBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4gYWx0ZXJuYXRlQ29sb3Jz
LCBjb25zdCBTdHJpbmcqIHByaW50Q29sb3IpOwotICAgIHZvaWQgZGlkRXhlY3V0ZU5vT3B0aW9u
YWxQYXJhbWV0ZXJzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IGNvbHVtbk5hbWVzLCBj
b25zdCBTdHJpbmcmIG5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSZWZQdHI8SlNPTjo6T2JqZWN0
PiB2YWx1ZXMsIFJlZlB0cjxKU09OOjpWYWx1ZT4gcGF5bG9hZCwgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgc2NyZWVu
Q29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiBh
bHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgcHJpbnRDb2xvcik7Ci1wcml2YXRlOgotICAg
IEZyb250ZW5kUm91dGVyJiBtX2Zyb250ZW5kUm91dGVyOwotfTsKLQotfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdm9pZCBEYXRhYmFz
ZUZyb250ZW5kRGlzcGF0Y2hlcjo6ZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyhSZWZQdHI8
SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nKiBub3Rlcywg
Y29uc3QgZG91YmxlKiB0aW1lc3RhbXAsIFJlZlB0cjxKU09OOjpPYmplY3Q+IHZhbHVlcywgUmVm
UHRyPEpTT046OlZhbHVlPiBwYXlsb2FkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0
YWJhc2U6OkVycm9yPiBzcWxFcnJvciwgY29uc3QgU3RyaW5nKiBzY3JlZW5Db2xvciwgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IGFsdGVybmF0ZUNvbG9y
cywgY29uc3QgU3RyaW5nKiBwcmludENvbG9yKQotewotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpz
b25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0
U3RyaW5nKCJtZXRob2QiX3MsICJEYXRhYmFzZS5kaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJz
Il9zKTsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBwYXJhbXNPYmplY3QgPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOwotICAgIGlmIChjb2x1bW5OYW1lcykKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5z
ZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIGNvbHVtbk5hbWVzKTsKLSAgICBpZiAobm90ZXMpCi0g
ICAgICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJub3RlcyJfcywgKm5vdGVzKTsKLSAgICBp
ZiAodGltZXN0YW1wKQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldERvdWJsZSgidGltZXN0YW1w
Il9zLCAqdGltZXN0YW1wKTsKLSAgICBpZiAodmFsdWVzKQotICAgICAgICBwYXJhbXNPYmplY3Qt
PnNldE9iamVjdCgidmFsdWVzIl9zLCB2YWx1ZXMpOwotICAgIGlmIChwYXlsb2FkKQotICAgICAg
ICBwYXJhbXNPYmplY3QtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCAqcGF5bG9hZCk7Ci0gICAgaWYg
KHNxbEVycm9yKQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgic3FsRXJyb3IiX3Ms
IHNxbEVycm9yKTsKLSAgICBpZiAoc2NyZWVuQ29sb3IpCi0gICAgICAgIHBhcmFtc09iamVjdC0+
c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgKnNjcmVlbkNvbG9yKTsKLSAgICBpZiAoYWx0ZXJu
YXRlQ29sb3JzKQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xv
cnMiX3MsIGFsdGVybmF0ZUNvbG9ycyk7Ci0gICAgaWYgKHByaW50Q29sb3IpCi0gICAgICAgIHBh
cmFtc09iamVjdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCAqcHJpbnRDb2xvcik7Ci0gICAg
anNvbk1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIl9zLCBXVEZNb3ZlKHBhcmFtc09iamVjdCkp
OwotCi0gICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0
cmluZygpKTsKLX0KLQotdm9pZCBEYXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hlcjo6ZGlkRXhlY3V0
ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IGNvbHVt
bk5hbWVzLCBjb25zdCBTdHJpbmcmIG5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiB2YWx1ZXMsIFJlZlB0cjxKU09OOjpWYWx1ZT4gcGF5bG9hZCwgUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gc3FsRXJyb3IsIGNvbnN0IFN0cmlu
ZyYgc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29s
b3JMaXN0PiBhbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgcHJpbnRDb2xvcikKLXsKLSAg
ICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRGF0YWJhc2UuZGlkRXhl
Y3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIl9zKTsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBwYXJh
bXNPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIHBhcmFtc09iamVjdC0+c2V0
QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBjb2x1bW5OYW1lcyk7Ci0gICAgcGFyYW1zT2JqZWN0LT5z
ZXRTdHJpbmcoIm5vdGVzIl9zLCBub3Rlcyk7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXREb3VibGUo
InRpbWVzdGFtcCJfcywgdGltZXN0YW1wKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgi
dmFsdWVzIl9zLCB2YWx1ZXMpOwotICAgIHBhcmFtc09iamVjdC0+c2V0VmFsdWUoInBheWxvYWQi
X3MsIHBheWxvYWQpOwotICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywg
c3FsRXJyb3IpOwotICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywg
c2NyZWVuQ29sb3IpOwotICAgIHBhcmFtc09iamVjdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9y
cyJfcywgYWx0ZXJuYXRlQ29sb3JzKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygicHJp
bnRDb2xvciJfcywgcHJpbnRDb2xvcik7Ci0gICAganNvbk1lc3NhZ2UtPnNldE9iamVjdCgicGFy
YW1zIl9zLCBXVEZNb3ZlKHBhcmFtc09iamVjdCkpOwotCi0gICAgbV9mcm9udGVuZFJvdXRlci5z
ZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3Bw
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNl
Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0j
aW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQot
Ci1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCi1u
YW1lc3BhY2UgRGF0YWJhc2UgewotY2xhc3MgRXJyb3I7Ci19IC8vIERhdGFiYXNlCi0vLyBFbmQg
b2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCi0KLQotLy8gVHlwZWRlZnMuCi1uYW1lc3BhY2UgRGF0
YWJhc2UgewotLyogVW5pcXVlIGlkZW50aWZpZXIgb2YgRGF0YWJhc2Ugb2JqZWN0LiAqLwotdHlw
ZWRlZiBTdHJpbmcgRGF0YWJhc2VJZDsKLXR5cGVkZWYgU3RyaW5nIFByaW1hcnlDb2xvcnM7Ci10
eXBlZGVmIEpTT046OkFycmF5T2Y8U3RyaW5nPiBDb2xvckxpc3Q7Ci19IC8vIERhdGFiYXNlCi0v
LyBFbmQgb2YgdHlwZWRlZnMuCi0KLW5hbWVzcGFjZSBEYXRhYmFzZSB7Ci0vKiBEYXRhYmFzZSBl
cnJvci4gKi8KLWNsYXNzIEVycm9yIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewotcHVibGlj
OgotICAgIGVudW0gewotICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCi0gICAgICAgIE1lc3NhZ2VT
ZXQgPSAxIDw8IDAsCi0gICAgICAgIENvZGVTZXQgPSAxIDw8IDEsCi0gICAgICAgIEFsbEZpZWxk
c1NldCA9IChNZXNzYWdlU2V0IHwgQ29kZVNldCkKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8aW50
IFNUQVRFPgotICAgIGNsYXNzIEJ1aWxkZXIgewotICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0
cjxKU09OOjpPYmplY3Q+IG1fcmVzdWx0OwotCi0gICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBC
dWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsK
LSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXIoUmVmPC8qRXJyb3IqL0pTT046Ok9iamVjdD4m
JiBvYmplY3QpCi0gICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKLSAgICAg
ICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1
aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZnJp
ZW5kIGNsYXNzIEVycm9yOwotICAgIHB1YmxpYzoKLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
TWVzc2FnZVNldD4mIHNldE1lc3NhZ2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICAgICAgewot
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE1lc3NhZ2VTZXQpLCBwcm9wZXJ0
eV9tZXNzYWdlX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmco
Im1lc3NhZ2UiX3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TWVzc2Fn
ZVNldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2RlU2V0PiYg
c2V0Q29kZShpbnQgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBDb2RlU2V0KSwgcHJvcGVydHlfY29kZV9hbHJlYWR5X3NldCk7Ci0gICAgICAg
ICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcigiY29kZSJfcywgdmFsdWUpOwotICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxDb2RlU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgUmVmPEVy
cm9yPiByZWxlYXNlKCkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RB
VEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKLSAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKHNpemVvZihFcnJvcikgPT0gc2l6ZW9mKEpTT046Ok9iamVjdCksIGNhbm5v
dF9jYXN0KTsKLQotICAgICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4ganNvblJlc3VsdCA9IG1f
cmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7Ci0gICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFdURk1v
dmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPEVycm9yPio+KCZqc29uUmVzdWx0KSk7Ci0gICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIC8qCi0gICAgICog
U3ludGhldGljIGNvbnN0cnVjdG9yOgotICAgICAqIFJlZjxFcnJvcj4gcmVzdWx0ID0gRXJyb3I6
OmNyZWF0ZSgpCi0gICAgICogICAgIC5zZXRNZXNzYWdlKC4uLikKLSAgICAgKiAgICAgLnNldENv
ZGUoLi4uKQotICAgICAqICAgICAucmVsZWFzZSgpOwotICAgICAqLwotICAgIHN0YXRpYyBCdWls
ZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEJ1aWxkZXI8
Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOwotICAgIH0KLX07Ci0KLX0gLy8g
RGF0YWJhc2UKLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0KLSNpbmNsdWRlIDx3dGYvT3B0aW9u
YWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0
b3IgewotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9j
b2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sT2JqZWN0cy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNw
YXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgt
b3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLQotCi1u
YW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZp
Zy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNs
dWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLW5hbWVzcGFjZSBJ
bnNwZWN0b3IgewotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24uaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3Rv
Y29sLmg+Ci0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVy
ZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKLUBwcm9wZXJ0eSAobm9u
YXRvbWljLCByZWFkb25seSkgVGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5FdmVudERpc3BhdGNo
ZXIgKmRhdGFiYXNlRXZlbnREaXNwYXRjaGVyOwotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xD
b25maWd1cmF0aW9uLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRz
LXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIK
LQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2Nv
bEJhY2tlbmREaXNwYXRjaGVycy5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRl
RGlzcGF0Y2hhYmxlQWdlbnQuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxl
SW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3Rv
cjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KLXsKLSAgICBB
dWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotICAgIFRlc3RQcm90
b2NvbERhdGFiYXNlRG9tYWluRXZlbnREaXNwYXRjaGVyICpfZGF0YWJhc2VFdmVudERpc3BhdGNo
ZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxl
SW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5p
dF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250
cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7
Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAgIFtfZGF0YWJhc2VFdmVudERpc3BhdGNoZXIg
cmVsZWFzZV07Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi0tIChUZXN0UHJvdG9jb2xEYXRh
YmFzZURvbWFpbkV2ZW50RGlzcGF0Y2hlciAqKWRhdGFiYXNlRXZlbnREaXNwYXRjaGVyCi17Ci0g
ICAgaWYgKCFfZGF0YWJhc2VFdmVudERpc3BhdGNoZXIpCi0gICAgICAgIF9kYXRhYmFzZUV2ZW50
RGlzcGF0Y2hlciA9IFtbVGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5FdmVudERpc3BhdGNoZXIg
YWxsb2NdIGluaXRXaXRoQ29udHJvbGxlcjpfY29udHJvbGxlcl07Ci0gICAgcmV0dXJuIF9kYXRh
YmFzZUV2ZW50RGlzcGF0Y2hlcjsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbi5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZl
bnREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50
cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0j
aW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPHd0Zi9KU09O
VmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlv
biBUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkV2ZW50RGlzcGF0Y2hlcgotewotICAgIEF1Z21l
bnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci19Ci0KLS0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciop
Y29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQot
ICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBfY29udHJv
bGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGlkRXhl
Y3V0ZU9wdGlvbmFsUGFyYW1ldGVyc1dpdGhDb2x1bW5OYW1lczooTlNBcnJheS8qPE5TU3RyaW5n
PiovICoqKWNvbHVtbk5hbWVzIG5vdGVzOihOU1N0cmluZyAqKilub3RlcyB0aW1lc3RhbXA6KGRv
dWJsZSAqKXRpbWVzdGFtcCB2YWx1ZXM6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKil2YWx1ZXMg
cGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqKXBheWxvYWQgc3FsRXJyb3I6KFRlc3RQ
cm90b2NvbERhdGFiYXNlRXJyb3IgKiopc3FsRXJyb3Igc2NyZWVuQ29sb3I6KE5TU3RyaW5nICoq
KXNjcmVlbkNvbG9yIGFsdGVybmF0ZUNvbG9yczooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKWFs
dGVybmF0ZUNvbG9ycyBwcmludENvbG9yOihOU1N0cmluZyAqKilwcmludENvbG9yCi17Ci0gICAg
Y29uc3QgRnJvbnRlbmRSb3V0ZXImIHJvdXRlciA9IF9jb250cm9sbGVyLT5mcm9udGVuZFJvdXRl
cigpOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKGNv
bHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURf
T1BUSU9OQUxfUEFSQU1FVEVSKG5vdGVzLCBAIm5vdGVzIik7Ci0gICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHZhbHVlcywgQCJ2YWx1ZXMiKTsKLSAgICBUSFJP
V19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIocGF5bG9hZCwgQCJwYXlsb2Fk
Iik7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHNxbEVy
cm9yLCBAInNxbEVycm9yIik7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxf
UEFSQU1FVEVSKHNjcmVlbkNvbG9yLCBAInNjcmVlbkNvbG9yIik7Ci0gICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKGFsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5h
dGVDb2xvcnMiKTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVU
RVIocHJpbnRDb2xvciwgQCJwcmludENvbG9yIik7Ci0KLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBq
c29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNl
dFN0cmluZygibWV0aG9kIl9zLCAiRGF0YWJhc2UuZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVy
cyJfcyk7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKTsKLSAgICBpZiAoY29sdW1uTmFtZXMpCi0gICAgICAgIHBhcmFtc09iamVjdC0+
c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB0b0pTT05TdHJpbmdBcnJheSgoKmNvbHVtbk5hbWVz
KSkpOwotICAgIGlmIChub3RlcykKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoIm5v
dGVzIl9zLCAoKm5vdGVzKSk7Ci0gICAgaWYgKHRpbWVzdGFtcCkKLSAgICAgICAgcGFyYW1zT2Jq
ZWN0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgKCp0aW1lc3RhbXApKTsKLSAgICBpZiAodmFs
dWVzKQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgidmFsdWVzIl9zLCBbKCp2YWx1
ZXMpIHRvSlNPTk9iamVjdF0pOwotICAgIGlmIChwYXlsb2FkKQotICAgICAgICBwYXJhbXNPYmpl
Y3QtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBbKCpwYXlsb2FkKSB0b0pTT05PYmplY3RdKTsKLSAg
ICBpZiAoc3FsRXJyb3IpCi0gICAgICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJzcWxFcnJv
ciJfcywgWygqc3FsRXJyb3IpIHRvSlNPTk9iamVjdF0pOwotICAgIGlmIChzY3JlZW5Db2xvcikK
LSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCAoKnNjcmVl
bkNvbG9yKSk7Ci0gICAgaWYgKGFsdGVybmF0ZUNvbG9ycykKLSAgICAgICAgcGFyYW1zT2JqZWN0
LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCB0b0pTT05TdHJpbmdBcnJheSgoKmFsdGVy
bmF0ZUNvbG9ycykpKTsKLSAgICBpZiAocHJpbnRDb2xvcikKLSAgICAgICAgcGFyYW1zT2JqZWN0
LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsICgqcHJpbnRDb2xvcikpOwotICAgIGpzb25NZXNz
YWdlLT5zZXRPYmplY3QoInBhcmFtcyJfcywgV1RGTW92ZShwYXJhbXNPYmplY3QpKTsKLSAgICBy
b3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Ci19Ci0KLS0gKHZv
aWQpZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzV2l0aENvbHVtbk5hbWVzOihOU0FycmF5
Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcyBub3RlczooTlNTdHJpbmcgKilub3RlcyB0aW1l
c3RhbXA6KGRvdWJsZSl0aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKil2
YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZCBzcWxFcnJvcjoo
VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKXNxbEVycm9yIHNjcmVlbkNvbG9yOihOU1N0cmlu
ZyAqKXNjcmVlbkNvbG9yIGFsdGVybmF0ZUNvbG9yczooTlNBcnJheS8qPE5TU3RyaW5nPiovICop
YWx0ZXJuYXRlQ29sb3JzIHByaW50Q29sb3I6KE5TU3RyaW5nICopcHJpbnRDb2xvcgotewotICAg
IGNvbnN0IEZyb250ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29udHJvbGxlci0+ZnJvbnRlbmRSb3V0
ZXIoKTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKGNvbHVt
bk5hbWVzLCBAImNvbHVtbk5hbWVzIik7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJF
RF9QQVJBTUVURVIobm90ZXMsIEAibm90ZXMiKTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JF
UVVJUkVEX1BBUkFNRVRFUih2YWx1ZXMsIEAidmFsdWVzIik7Ci0gICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIocGF5bG9hZCwgQCJwYXlsb2FkIik7Ci0gICAgVEhST1df
RVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoc3FsRXJyb3IsIEAic3FsRXJyb3IiKTsK
LSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihzY3JlZW5Db2xvciwg
QCJzY3JlZW5Db2xvciIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1F
VEVSKGFsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsKLSAgICBUSFJPV19FWENF
UFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihwcmludENvbG9yLCBAInByaW50Q29sb3IiKTsK
LQotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEYXRhYmFzZS5k
aWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMiX3MpOwotICAgIFJlZjxKU09OOjpPYmplY3Q+
IHBhcmFtc09iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgcGFyYW1zT2JqZWN0
LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KGNvbHVtbk5hbWVz
KSk7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBub3Rlcyk7Ci0gICAg
cGFyYW1zT2JqZWN0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgdGltZXN0YW1wKTsKLSAgICBw
YXJhbXNPYmplY3QtPnNldE9iamVjdCgidmFsdWVzIl9zLCBbdmFsdWVzIHRvSlNPTk9iamVjdF0p
OwotICAgIHBhcmFtc09iamVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFtwYXlsb2FkIHRvSlNP
Tk9iamVjdF0pOwotICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgW3Nx
bEVycm9yIHRvSlNPTk9iamVjdF0pOwotICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJzY3Jl
ZW5Db2xvciJfcywgc2NyZWVuQ29sb3IpOwotICAgIHBhcmFtc09iamVjdC0+c2V0QXJyYXkoImFs
dGVybmF0ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5nQXJyYXkoYWx0ZXJuYXRlQ29sb3JzKSk7Ci0g
ICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsIHByaW50Q29sb3IpOwot
ICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyJfcywgV1RGTW92ZShwYXJhbXNPYmpl
Y3QpKTsKLSAgICByb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7
Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hl
cnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPEZvdW5k
YXRpb24vRm91bmRhdGlvbi5oPgotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xK
U09OT2JqZWN0Lmg+Ci0KLQotQGNsYXNzIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I7Ci0KLXR5
cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbFBsYXRmb3JtKSB7Ci0gICAgVGVz
dFByb3RvY29sUGxhdGZvcm1BbGwsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljLAot
ICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFj
T1MsCi19OwotCi0KLQotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkK
LUBpbnRlcmZhY2UgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciA6IFJXSVByb3RvY29sSlNPTk9i
amVjdAotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3Ry
aW5nICosIGlkPiAqKXBheWxvYWQ7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9i
amVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKLS0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBjb2RlOihpbnQpY29kZTsKLS8q
IHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqbWVzc2Fn
ZTsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCBjb2Rl
OwotQGVuZAotCi0KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1A
aW50ZXJmYWNlIFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluRXZlbnREaXNwYXRjaGVyIDogTlNP
YmplY3QKLS0gKHZvaWQpZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVyc1dpdGhDb2x1bW5OYW1l
czooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKWNvbHVtbk5hbWVzIG5vdGVzOihOU1N0cmluZyAq
Kilub3RlcyB0aW1lc3RhbXA6KGRvdWJsZSAqKXRpbWVzdGFtcCB2YWx1ZXM6KFJXSVByb3RvY29s
SlNPTk9iamVjdCAqKil2YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqKXBh
eWxvYWQgc3FsRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKiopc3FsRXJyb3Igc2Ny
ZWVuQ29sb3I6KE5TU3RyaW5nICoqKXNjcmVlbkNvbG9yIGFsdGVybmF0ZUNvbG9yczooTlNBcnJh
eS8qPE5TU3RyaW5nPiovICoqKWFsdGVybmF0ZUNvbG9ycyBwcmludENvbG9yOihOU1N0cmluZyAq
KilwcmludENvbG9yOwotLSAodm9pZClkaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNXaXRo
Q29sdW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWNvbHVtbk5hbWVzIG5vdGVzOihO
U1N0cmluZyAqKW5vdGVzIHRpbWVzdGFtcDooZG91YmxlKXRpbWVzdGFtcCB2YWx1ZXM6KFJXSVBy
b3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcyBwYXlsb2FkOihSV0lQcm90b2NvbEpTT05PYmplY3Qg
KilwYXlsb2FkIHNxbEVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICopc3FsRXJyb3Ig
c2NyZWVuQ29sb3I6KE5TU3RyaW5nICopc2NyZWVuQ29sb3IgYWx0ZXJuYXRlQ29sb3JzOihOU0Fy
cmF5Lyo8TlNTdHJpbmc+Ki8gKilhbHRlcm5hdGVDb2xvcnMgcHJpbnRDb2xvcjooTlNTdHJpbmcg
KilwcmludENvbG9yOwotQGVuZAotCi0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2Nv
bEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2wuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMu
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0
ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRl
LmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xs
ZXIuaD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLUBpbnRlcmZhY2UgVGVzdFByb3Rv
Y29sRGF0YWJhc2VEb21haW5FdmVudERpc3BhdGNoZXIgKFByaXZhdGUpCi0tIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhDb250cm9sbGVyOihJbnNwZWN0b3I6OkF1Z21lbnRhYmxlSW5zcGVjdG9yQ29u
dHJvbGxlciopY29udHJvbGxlcjsKLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bEludGVybmFsLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9u
YWwtcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JX
SVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQot
dGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgotT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBm
cm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0KLWlubGluZSBTdHJpbmcg
dG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xQbGF0Zm9ybSB2YWx1ZSkKLXsKLSAgICBzd2l0
Y2godmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOgotICAgICAgICBy
ZXR1cm4gImFsbCJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzoKLSAg
ICAgICAgcmV0dXJuICJnZW5lcmljIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1J
T1M6Ci0gICAgICAgIHJldHVybiAiaW9zIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZv
cm1NYWNPUzoKLSAgICAgICAgcmV0dXJuICJtYWNvcyJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRl
PD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xQbGF0Zm9ybT4gZnJvbVByb3RvY29sU3Ry
aW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJhbGwiKQotICAg
ICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1BbGw7Ci0gICAgaWYgKHZhbHVlID09ICJn
ZW5lcmljIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzsKLSAg
ICBpZiAodmFsdWUgPT0gImlvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9y
bUlPUzsKLSAgICBpZiAodmFsdWUgPT0gIm1hY29zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90
b2NvbFBsYXRmb3JtTWFjT1M7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotCi0KLX0g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRp
b25hbC1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0KLSNpbXBv
cnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgot
I2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLQot
dXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMgKERhdGFiYXNlRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZURhdGFiYXNlSWQ6
KE5TU3RyaW5nICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotKyAodm9pZClf
cGFyc2VQcmltYXJ5Q29sb3JzOihOU1N0cmluZyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQp
cGF5bG9hZDsKLSsgKHZvaWQpX3BhcnNlQ29sb3JMaXN0OihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8g
Kiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZUVycm9y
OihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClw
YXlsb2FkOwotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMgKERhdGFiYXNlRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZURhdGFiYXNlSWQ6KE5TU3Ry
aW5nICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKLSAgICAqb3V0
VmFsdWUgPSAoTlNTdHJpbmcgKilwYXlsb2FkOwotfQotCi0rICh2b2lkKV9wYXJzZVByaW1hcnlD
b2xvcnM6KE5TU3RyaW5nICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0g
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3Nd
KTsKLSAgICAqb3V0VmFsdWUgPSAoTlNTdHJpbmcgKilwYXlsb2FkOwotfQotCi0rICh2b2lkKV9w
YXJzZUNvbG9yTGlzdDooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKW91dFZhbHVlIGZyb21QYXls
b2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXls
b2FkLCBbTlNBcnJheS8qPE5TU3RyaW5nPiovIGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gKE5T
QXJyYXkvKjxOU1N0cmluZz4qLyAqKXBheWxvYWQ7Ci19Ci0KLSsgKHZvaWQpX3BhcnNlRXJyb3I6
KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBh
eWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0Rp
Y3Rpb25hcnkgY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbERhdGFiYXNl
RXJyb3IgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKLX0KLQotQGVuZAotCi0KLSMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5h
bC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQg
PFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0jaW1wb3J0IDx3
dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFt
ZXNwYWNlIEluc3BlY3RvcjsKLQotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sRGF0YWJh
c2VFcnJvcgotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGlj
dGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtz
dXBlciBpbml0XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBUSFJPV19FWENFUFRJT05f
Rk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJtZXNzYWdlIl0sIEAibWVzc2FnZSIpOwot
ICAgIHNlbGYubWVzc2FnZSA9IHBheWxvYWRbQCJtZXNzYWdlIl07Ci0KLSAgICBUSFJPV19FWENF
UFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJjb2RlIl0sIEAiY29kZSIpOwot
ICAgIHNlbGYuY29kZSA9IFtwYXlsb2FkW0AiY29kZSJdIGludGVnZXJWYWx1ZV07Ci0KLSAgICBy
ZXR1cm4gc2VsZjsKLX0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihS
V0lQcm90b2NvbEpTT05PYmplY3QgKilvYmplY3QKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVy
IGluaXRXaXRoSlNPTk9iamVjdDpbb2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0KCldKSkKLSAgICAg
ICAgcmV0dXJuIG5pbDsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZTooaW50KWNvZGUKLXsKLSAg
ICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkobWVzc2FnZSwgQCJtZXNzYWdl
Iik7Ci0KLSAgICBzZWxmLm1lc3NhZ2UgPSBtZXNzYWdlOwotICAgIHNlbGYuY29kZSA9IGNvZGU7
Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClzZXRNZXNzYWdlOihOU1N0cmluZyAq
KW1lc3NhZ2UKLXsKLSAgICBbc3VwZXIgc2V0U3RyaW5nOm1lc3NhZ2UgZm9yS2V5OkAibWVzc2Fn
ZSJdOwotfQotCi0tIChOU1N0cmluZyAqKW1lc3NhZ2UKLXsKLSAgICByZXR1cm4gW3N1cGVyIHN0
cmluZ0ZvcktleTpAIm1lc3NhZ2UiXTsKLX0KLQotLSAodm9pZClzZXRDb2RlOihpbnQpY29kZQot
ewotICAgIFtzdXBlciBzZXRJbnRlZ2VyOmNvZGUgZm9yS2V5OkAiY29kZSJdOwotfQotCi0tIChp
bnQpY29kZQotewotICAgIHJldHVybiBbc3VwZXIgaW50ZWdlckZvcktleTpAImNvZGUiXTsKLX0K
LQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2V4cGVjdGVkL2ZhaWwtb24tY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1
Z2dhYmxlVHlwZS5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1jb21tYW5kLXRhcmdldFR5cGUt
bWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tZXJyb3IKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGExMzBhZDcwYzQwODI0NGUyNzI2ZDRiNGExMjRkOTBiMzJhMmM2MjMu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFp
bC1vbi1jb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpz
b24tZXJyb3IKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1FUlJPUjogTWFsZm9ybWVkIGRv
bWFpbiBzcGVjaWZpY2F0aW9uOiBkb21haW4gRG9tYWluIGhhcyBhbiBpdGVtIGluIHRhcmdldFR5
cGVzICJbdSd3b3JrZXInXSIgdGhhdCBpcyBub3Qgc3VwcG9ydGVkIGJ5IGFueSB2YWx1ZSBpbiBk
ZWJ1Z2dhYmxlVHlwZXMgIlt1J2phdmFzY3JpcHQnXSIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWls
LW9uLWNvbW1hbmQtdGFyZ2V0VHlwZXMtdHlwZS5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1j
b21tYW5kLXRhcmdldFR5cGVzLXR5cGUuanNvbi1lcnJvcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggOTlmNWUxYTRhOGU0NzQzM2VmNzVlZThiNTRjNDkzYzViYzBhNmQwMy4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWNv
bW1hbmQtdGFyZ2V0VHlwZXMtdHlwZS5qc29uLWVycm9yCisrKyAvZGV2L251bGwKQEAgLTEgKzAs
MCBAQAotRVJST1I6IE1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjogdGFyZ2V0VHlwZXMg
bGlzdCBmb3IgY29tbWFuZCBQYWdlT25seSBpcyBub3QgYW4gYXJyYXkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVj
dGVkL2ZhaWwtb24tY29tbWFuZC10YXJnZXRUeXBlcy12YWx1ZS5qc29uLWVycm9yIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQv
ZmFpbC1vbi1jb21tYW5kLXRhcmdldFR5cGVzLXZhbHVlLmpzb24tZXJyb3IKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDIxYTM2NTY5OTI2YjJlNDBhOTg3ZTI5MWI1MmI1MzkzZDhjMjJm
OWEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQv
ZmFpbC1vbi1jb21tYW5kLXRhcmdldFR5cGVzLXZhbHVlLmpzb24tZXJyb3IKKysrIC9kZXYvbnVs
bApAQCAtMSArMCwwIEBACi1FUlJPUjogTWFsZm9ybWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9uOiB0
YXJnZXRUeXBlcyBsaXN0IGZvciBjb21tYW5kIFBhZ2VPbmx5IGlzIGFuIHVuc3VwcG9ydGVkIHN0
cmluZy4gV2FzOiAiW3UncGFnZWUnXSIsIEFsbG93ZWQgdmFsdWVzOiBzZXJ2aWNlLXdvcmtlciwg
amF2YXNjcmlwdCwgd29ya2VyLCBwYWdlLCB3ZWItcGFnZQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFp
bC1vbi1jb21tYW5kLXdpdGgtaW52YWxpZC1wbGF0Zm9ybS5qc29uLWVycm9yIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFp
bC1vbi1jb21tYW5kLXdpdGgtaW52YWxpZC1wbGF0Zm9ybS5qc29uLWVycm9yCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBlYzYzNmM1NGI3YzVjMTA3MDllMGMzYjY1OTRhOTJlNTFkYzJj
NzUwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVk
L2ZhaWwtb24tY29tbWFuZC13aXRoLWludmFsaWQtcGxhdGZvcm0uanNvbi1lcnJvcgorKysgL2Rl
di9udWxsCkBAIC0xICswLDAgQEAKLUVSUk9SOiBVbmtub3duIHBsYXRmb3JtOiBpbnZhbGlkCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMtdHlwZS5qc29u
LWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4tZGVidWdnYWJsZVR5cGVzLXR5cGUuanNvbi1l
cnJvcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmI4OThiYTdiZTdkZmE3MmJjNjNm
ZDhiZGU5Y2VkNWY4NGE4MTk3Ny4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMtdHlwZS5qc29u
LWVycm9yCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotRVJST1I6IE1hbGZvcm1lZCBkb21h
aW4gc3BlY2lmaWNhdGlvbjogZGVidWdnYWJsZVR5cGVzIGZvciBkb21haW4gV2ViT25seSBpcyBu
b3QgYW4gYXJyYXkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZG9tYWluLWRlYnVnZ2FibGVU
eXBlcy12YWx1ZS5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4tZGVidWdnYWJsZVR5
cGVzLXZhbHVlLmpzb24tZXJyb3IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmNzFk
NDcwY2JkMzk4NTU5NzM2NThiMzEzN2I3YTJhOWM3MTg0ZmYuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4tZGVidWdnYWJs
ZVR5cGVzLXZhbHVlLmpzb24tZXJyb3IKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1FUlJP
UjogTWFsZm9ybWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9uOiBkZWJ1Z2dhYmxlVHlwZXMgZm9yIGRv
bWFpbiBXZWJPbmx5IGlzIGFuIHVuc3VwcG9ydGVkIHN0cmluZy4gV2FzOiAiW3Und2ViYiddIiwg
QWxsb3dlZCB2YWx1ZXM6IHNlcnZpY2Utd29ya2VyLCBqYXZhc2NyaXB0LCBwYWdlLCB3ZWItcGFn
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1k
b21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZG9tYWluLXRh
cmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tZXJyb3IKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2N2UzNTAwODk4NjQ4ODlmZDBkY2QxOGFiYzliZDUw
ZjljMWRlYzEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhw
ZWN0ZWQvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJs
ZVR5cGUuanNvbi1lcnJvcgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUVSUk9SOiBNYWxm
b3JtZWQgZG9tYWluIHNwZWNpZmljYXRpb246IGNvbW1hbmQgQ29tbWFuZCBoYXMgYW4gaXRlbSBp
biB0YXJnZXRUeXBlcyAiW3Und29ya2VyJ10iIHRoYXQgaXMgbm90IHN1cHBvcnRlZCBieSBhbnkg
dmFsdWUgaW4gZGVidWdnYWJsZVR5cGVzICJbdSdqYXZhc2NyaXB0J10iLgpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhw
ZWN0ZWQvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZXMtdHlwZS5qc29uLWVycm9yIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQv
ZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZXMtdHlwZS5qc29uLWVycm9yCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBlOWEzNTkzM2EzNTQwYWUxMGIxZWFlMmQ3YTAzZGMzZjIzMzA5MjVj
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2Zh
aWwtb24tZG9tYWluLXRhcmdldFR5cGVzLXR5cGUuanNvbi1lcnJvcgorKysgL2Rldi9udWxsCkBA
IC0xICswLDAgQEAKLUVSUk9SOiBNYWxmb3JtZWQgZG9tYWluIHNwZWNpZmljYXRpb246IHRhcmdl
dFR5cGVzIGZvciBkb21haW4gUGFnZU9ubHkgaXMgbm90IGFuIGFycmF5CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBl
Y3RlZC9mYWlsLW9uLWRvbWFpbi10YXJnZXRUeXBlcy12YWx1ZS5qc29uLWVycm9yIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQv
ZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZXMtdmFsdWUuanNvbi1lcnJvcgpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggNDY4MDdmNzJmYzQ2OGEyOWRiZjc0ZmMyMmEyOTc3YWJiYmFjZTVi
OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9m
YWlsLW9uLWRvbWFpbi10YXJnZXRUeXBlcy12YWx1ZS5qc29uLWVycm9yCisrKyAvZGV2L251bGwK
QEAgLTEgKzAsMCBAQAotRVJST1I6IE1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjogdGFy
Z2V0VHlwZXMgZm9yIGRvbWFpbiBQYWdlT25seSBpcyBhbiB1bnN1cHBvcnRlZCBzdHJpbmcuIFdh
czogIlt1J3BhZ2VlJ10iLCBBbGxvd2VkIHZhbHVlczogc2VydmljZS13b3JrZXIsIGphdmFzY3Jp
cHQsIHdvcmtlciwgcGFnZSwgd2ViLXBhZ2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZHVw
bGljYXRlLWNvbW1hbmQtY2FsbC1wYXJhbWV0ZXItbmFtZXMuanNvbi1lcnJvciBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2Zh
aWwtb24tZHVwbGljYXRlLWNvbW1hbmQtY2FsbC1wYXJhbWV0ZXItbmFtZXMuanNvbi1lcnJvcgpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2Y3NTZkZTMyNTA1MGMzM2E0OTJjZDUwZDll
YWRmNDIzMDM1YjYxMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJp
Yy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS1jb21tYW5kLWNhbGwtcGFyYW1ldGVyLW5hbWVz
Lmpzb24tZXJyb3IKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1FUlJPUjogTWFsZm9ybWVk
IGRvbWFpbiBzcGVjaWZpY2F0aW9uOiBjYWxsIHBhcmFtZXRlciBsaXN0IGZvciBjb21tYW5kIHBy
b2Nlc3NQb2ludHMgaGFzIGR1cGxpY2F0ZSBwYXJhbWV0ZXIgbmFtZXMKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVj
dGVkL2ZhaWwtb24tZHVwbGljYXRlLWNvbW1hbmQtcmV0dXJuLXBhcmFtZXRlci1uYW1lcy5qc29u
LWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1yZXR1cm4tcGFyYW1ldGVy
LW5hbWVzLmpzb24tZXJyb3IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhMTQ4ZmY2
N2M5NjA5NDg4YTgwZTZmYTI1ZDNiZmE3NzhmNWRhMGEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1y
ZXR1cm4tcGFyYW1ldGVyLW5hbWVzLmpzb24tZXJyb3IKKysrIC9kZXYvbnVsbApAQCAtMSArMCww
IEBACi1FUlJPUjogTWFsZm9ybWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9uOiByZXR1cm4gcGFyYW1l
dGVyIGxpc3QgZm9yIGNvbW1hbmQgcHJvY2Vzc1BvaW50cyBoYXMgZHVwbGljYXRlIHBhcmFtZXRl
ciBuYW1lcwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtZXZlbnQtcGFyYW1l
dGVyLW5hbWVzLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS1ldmVudC1wYXJh
bWV0ZXItbmFtZXMuanNvbi1lcnJvcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzcx
YmJkMjFjMmNmMGMzYjAzODAxZDk2MzdhNGU2ZDBmYzI1YWM0NC4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS1ldmVu
dC1wYXJhbWV0ZXItbmFtZXMuanNvbi1lcnJvcgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAK
LUVSUk9SOiBNYWxmb3JtZWQgZG9tYWluIHNwZWNpZmljYXRpb246IHBhcmFtZXRlciBsaXN0IGZv
ciBldmVudCBwcm9jZXNzZWRQb2ludHMgaGFzIGR1cGxpY2F0ZSBwYXJhbWV0ZXIgbmFtZXMKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLXR5cGUtZGVjbGFyYXRpb25zLmpzb24t
ZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2Vu
ZXJpYy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLWRlY2xhcmF0aW9ucy5qc29uLWVy
cm9yCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NDdjZGY4ZTI4ZTg1NjYxMGEyNmY4
MTU0OTQzZjM2Y2Y4YjdkMWY0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLXR5cGUtZGVjbGFyYXRpb25zLmpzb24t
ZXJyb3IKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1FUlJPUjogRHVwbGljYXRlIHR5cGUg
ZGVjbGFyYXRpb246IFJ1bnRpbWUuUmVtb3RlT2JqZWN0SWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2Zh
aWwtb24tZHVwbGljYXRlLXR5cGUtbWVtYmVyLW5hbWVzLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWls
LW9uLWR1cGxpY2F0ZS10eXBlLW1lbWJlci1uYW1lcy5qc29uLWVycm9yCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBkNTM3NmE3N2E0NTVmZDE1ZjY3ZDhiY2I5MzVhNmJhNDM4YzBhNTRj
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2Zh
aWwtb24tZHVwbGljYXRlLXR5cGUtbWVtYmVyLW5hbWVzLmpzb24tZXJyb3IKKysrIC9kZXYvbnVs
bApAQCAtMSArMCwwIEBACi1FUlJPUjogTWFsZm9ybWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9uOiB0
eXBlIGRlY2xhcmF0aW9uIGZvciBQb2ludCBoYXMgZHVwbGljYXRlIG1lbWJlciBuYW1lcwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1lbnVtLXdpdGgtbm8tdmFsdWVzLmpzb24tZXJyb3IgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBl
Y3RlZC9mYWlsLW9uLWVudW0td2l0aC1uby12YWx1ZXMuanNvbi1lcnJvcgpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMjY1NWMyYjkwN2UwMmUzZTg0Y2IzZjY2ZmExZjU4ZTEzZDliN2I1
My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9m
YWlsLW9uLWVudW0td2l0aC1uby12YWx1ZXMuanNvbi1lcnJvcgorKysgL2Rldi9udWxsCkBAIC0x
ICswLDAgQEAKLUVSUk9SOiBUeXBlIHJlZmVyZW5jZSB3aXRoIGVudW0gdmFsdWVzIG11c3QgaGF2
ZSBhdCBsZWFzdCBvbmUgZW51bSB2YWx1ZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZXZl
bnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1lcnJvciBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4
cGVjdGVkL2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJs
ZVR5cGUuanNvbi1lcnJvcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjY1ZDdhMGQx
OTZkNDBhODliNmVlNTg0YThjNmMwNWI5NzI1Y2FkYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGUtbWF0
Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tZXJyb3IKKysrIC9kZXYvbnVsbApAQCAt
MSArMCwwIEBACi1FUlJPUjogTWFsZm9ybWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9uOiBldmVudCBF
dmVudCBoYXMgYW4gaXRlbSBpbiB0YXJnZXRUeXBlcyAiW3Und29ya2VyJ10iIHRoYXQgaXMgbm90
IHN1cHBvcnRlZCBieSBhbnkgdmFsdWUgaW4gZGVidWdnYWJsZVR5cGVzICJbdSdqYXZhc2NyaXB0
J10iLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1ldmVudC10YXJnZXRUeXBlcy10eXBlLmpz
b24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGVzLXR5cGUuanNvbi1lcnJv
cgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzQwM2UxM2E4MDk4OTRhMTg2OTk1NjZl
Nzc2Y2Y2NTM2NDJmODA5Ni4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2Vu
ZXJpYy9leHBlY3RlZC9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGVzLXR5cGUuanNvbi1lcnJvcgor
KysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUVSUk9SOiBNYWxmb3JtZWQgZG9tYWluIHNwZWNp
ZmljYXRpb246IHRhcmdldFR5cGVzIGZvciBldmVudCBQYWdlT25seSBpcyBub3QgYW4gYXJyYXkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlwZXMtdmFsdWUuanNvbi1l
cnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmljL2V4cGVjdGVkL2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlwZXMtdmFsdWUuanNvbi1lcnJvcgpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODMwMTJhOWZlNGU4OTMwMjFhYjhhZjM0NTI0
NmIxMDBiM2U0MTVmYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJp
Yy9leHBlY3RlZC9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGVzLXZhbHVlLmpzb24tZXJyb3IKKysr
IC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1FUlJPUjogTWFsZm9ybWVkIGRvbWFpbiBzcGVjaWZp
Y2F0aW9uOiB0YXJnZXRUeXBlcyBmb3IgZXZlbnQgUGFnZU9ubHkgaXMgYW4gdW5zdXBwb3J0ZWQg
c3RyaW5nLiBXYXM6ICJbdSdwYWdlZSddIiwgQWxsb3dlZCB2YWx1ZXM6IHNlcnZpY2Utd29ya2Vy
LCBqYXZhc2NyaXB0LCB3b3JrZXIsIHBhZ2UsIHdlYi1wYWdlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9m
YWlsLW9uLW51bWJlci10eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29uLWVycm9yIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhw
ZWN0ZWQvZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbi1l
cnJvcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdiMmFmMGU0N2U5M2Y4MDQ5Nzk0
NDQ3MjU3ZGYzMjcyM2YwNjgyNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXIt
ZmxhZy5qc29uLWVycm9yCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotRVJST1I6IFRoZSAn
b3B0aW9uYWwnIGZsYWcgZm9yIGEgcGFyYW1ldGVyIG11c3QgYmUgYSBib29sZWFuIGxpdGVyYWwu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRpb25hbC10eXBlLW1l
bWJlci5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtdHlw
ZS1tZW1iZXIuanNvbi1lcnJvcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODZkZjM3
NTBjMWE3Nzk3ODkzY2JmYjdlMjg3NmQ5MmNjZWNjMmY5MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRp
b25hbC10eXBlLW1lbWJlci5qc29uLWVycm9yCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAot
RVJST1I6IFRoZSAnb3B0aW9uYWwnIGZsYWcgZm9yIGEgdHlwZSBtZW1iZXIgbXVzdCBiZSBhIGJv
b2xlYW4gbGl0ZXJhbC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9w
dGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXN0cmluZy10
eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29uLWVycm9yCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA5N2IyYWYwZTQ3ZTkzZjgwNDk3OTQ0NDcyNTdkZjMyNzIzZjA2ODI0Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwt
b24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24tZXJyb3IKKysrIC9k
ZXYvbnVsbApAQCAtMSArMCwwIEBACi1FUlJPUjogVGhlICdvcHRpb25hbCcgZmxhZyBmb3IgYSBw
YXJhbWV0ZXIgbXVzdCBiZSBhIGJvb2xlYW4gbGl0ZXJhbC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2Zh
aWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24tZXJyb3IgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3Rl
ZC9mYWlsLW9uLXN0cmluZy10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29uLWVycm9yCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NmRmMzc1MGMxYTc3OTc4OTNjYmZiN2UyODc2
ZDkyY2NlY2MyZjkxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2V4cGVjdGVkL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24t
ZXJyb3IKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1FUlJPUjogVGhlICdvcHRpb25hbCcg
ZmxhZyBmb3IgYSB0eXBlIG1lbWJlciBtdXN0IGJlIGEgYm9vbGVhbiBsaXRlcmFsLgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVy
aWMvZXhwZWN0ZWQvZmFpbC1vbi10eXBlLWRlY2xhcmF0aW9uLXVzaW5nLXR5cGUtcmVmZXJlbmNl
Lmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXR5cGUtZGVjbGFyYXRpb24tdXNpbmctdHlwZS1y
ZWZlcmVuY2UuanNvbi1lcnJvcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDJmNTc1
M2E0Mzk2MTQ0ZWI1NjZjNWM1OTY4ZDA0OWFlYzYxODJkYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXR5cGUtZGVjbGFyYXRpb24t
dXNpbmctdHlwZS1yZWZlcmVuY2UuanNvbi1lcnJvcgorKysgL2Rldi9udWxsCkBAIC0xICswLDAg
QEAKLUVSUk9SOiBUeXBlIHJlZmVyZW5jZSBjYW5ub3QgaGF2ZSBib3RoICd0eXBlJyBhbmQgJyRy
ZWYnIGtleXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXR5cGUtcmVmZXJlbmNlLWFzLXBy
aW1pdGl2ZS10eXBlLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXR5cGUtcmVmZXJlbmNlLWFz
LXByaW1pdGl2ZS10eXBlLmpzb24tZXJyb3IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGQ3NmJjMWM3NzczYWEwZGE5ODg0OWM5M2MzNGMzOTJmMTYyNzYzOTguLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi10eXBlLXJlZmVy
ZW5jZS1hcy1wcmltaXRpdmUtdHlwZS5qc29uLWVycm9yCisrKyAvZGV2L251bGwKQEAgLTEgKzAs
MCBAQAotRVJST1I6IFR5cGUgcmVmZXJlbmNlICdEYXRhYmFzZUlkJyBpcyBub3QgYSBwcmltaXRp
dmUgdHlwZS4gQWxsb3dlZCB2YWx1ZXM6IGludGVnZXIsIG51bWJlciwgc3RyaW5nLCBib29sZWFu
LCBlbnVtLCBvYmplY3QsIGFycmF5LCBhbnkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tdHlw
ZS13aXRoLWludmFsaWQtcGxhdGZvcm0uanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS13
aXRoLWludmFsaWQtcGxhdGZvcm0uanNvbi1lcnJvcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggZWM2MzZjNTRiN2M1YzEwNzA5ZTBjM2I2NTk0YTkyZTUxZGMyYzc1MC4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXR5cGUt
d2l0aC1pbnZhbGlkLXBsYXRmb3JtLmpzb24tZXJyb3IKKysrIC9kZXYvbnVsbApAQCAtMSArMCww
IEBACi1FUlJPUjogVW5rbm93biBwbGF0Zm9ybTogaW52YWxpZApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQv
ZmFpbC1vbi10eXBlLXdpdGgtbG93ZXJjYXNlLW5hbWUuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwt
b24tdHlwZS13aXRoLWxvd2VyY2FzZS1uYW1lLmpzb24tZXJyb3IKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDRlNDYyMjUwYzBhZjgwYTE3OWUwNmFhZjQ1ZDIxZWI1NDZkYjg4MTQuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1v
bi10eXBlLXdpdGgtbG93ZXJjYXNlLW5hbWUuanNvbi1lcnJvcgorKysgL2Rldi9udWxsCkBAIC0x
ICswLDAgQEAKLUVSUk9SOiBUeXBlcyBtdXN0IGJlZ2luIHdpdGggYW4gdXBwZXJjYXNlIGNoYXJh
Y3Rlci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1p
bi10eXBlLWRlY2xhcmF0aW9uLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXVua25vd24tdHlw
ZS1yZWZlcmVuY2UtaW4tdHlwZS1kZWNsYXJhdGlvbi5qc29uLWVycm9yCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAyZDM4ZTY0Njc1ZGE1YWU1YzI2M2Q1NDZlODUzNGI0OWYzYjVlOWM5
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2Zh
aWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLWRlY2xhcmF0aW9uLmpzb24tZXJy
b3IKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1FUlJPUjogVHlwZSByZWZlcmVuY2UgJ2Ry
YWdvbicgaXMgbm90IGEgcHJpbWl0aXZlIHR5cGUuIEFsbG93ZWQgdmFsdWVzOiBpbnRlZ2VyLCBu
dW1iZXIsIHN0cmluZywgYm9vbGVhbiwgZW51bSwgb2JqZWN0LCBhcnJheSwgYW55CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJp
Yy9leHBlY3RlZC9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1tZW1iZXIu
anNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBl
LW1lbWJlci5qc29uLWVycm9yCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYWY2Njcy
Y2JlZjA5NjMwZmQ5YmU4ZmZhZGFjZTEyYzU2MTFjY2E4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVy
ZW5jZS1pbi10eXBlLW1lbWJlci5qc29uLWVycm9yCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBA
QAotRVJST1I6IExvb2t1cCBmYWlsZWQgZm9yIHR5cGUgcmVmZXJlbmNlOiBDb2xvciAocmVmZXJl
bmNlZCBmcm9tIGRvbWFpbjogRmFudGFzeSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2dlbmVyYXRlLWRv
bWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2dlbmVyYXRlLWRv
bWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uLXJlc3VsdApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDk0NmI1M2UzZjgxNzdkNzY2NjY1ODE3ZmM5YjI0MjViNDU5OGZiZi4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9nZW5lcmF0
ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbi1yZXN1bHQKKysrIC9kZXYvbnVsbApA
QCAtMSwxMjQ1ICswLDAgQEAKLSMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFu
ZHMuanMKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5z
LXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0vLyBOZXR3b3JrMQotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFp
bigiTmV0d29yazEiLCBudWxsKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJO
ZXR3b3JrMS5sb2FkUmVzb3VyY2UiLCBudWxsLCBbXSwgW10pOwotSW5zcGVjdG9yQmFja2VuZC5h
Y3RpdmF0ZURvbWFpbigiTmV0d29yazEiLCBudWxsKTsKLQotLy8gTmV0d29yazMKLUluc3BlY3Rv
ckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIk5ldHdvcmszIiwgbnVsbCk7Ci1JbnNwZWN0b3JCYWNr
ZW5kLnJlZ2lzdGVyRXZlbnQoIk5ldHdvcmszLnJlc291cmNlTG9hZGVkIiwgbnVsbCwgW10pOwot
SW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rlck5ldHdvcmszRGlzcGF0Y2hlciA9IEluc3BlY3RvckJh
Y2tlbmQucmVnaXN0ZXJEaXNwYXRjaGVyLmJpbmQoSW5zcGVjdG9yQmFja2VuZCwgIk5ldHdvcmsz
Iik7Ci1JbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJOZXR3b3JrMyIsIG51bGwpOwot
IyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25j
ZQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0KLSNpbmNs
dWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yRnJvbnRlbmRSb3V0ZXIuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2b2lkIHNldEJhY2tlbmRE
aXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFj
a2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9Ci0gICAgQmFja2VuZERpc3Bh
dGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0
Y2hlci5nZXQoKTsgfQotcHJpdmF0ZToKLSAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1f
YmFja2VuZERpc3BhdGNoZXI7Ci19OwotCi0KLSNpZiBQTEFURk9STShXRUJfQ09NTUFORFMpCi1j
bGFzcyBBbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5BbHRlcm5hdGVOZXR3
b3JrMUJhY2tlbmREaXNwYXRjaGVyKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJj
ZShsb25nIGNhbGxJZCkgPSAwOwotfTsKLSNlbmRpZiAvLyBQTEFURk9STShXRUJfQ09NTUFORFMp
Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVy
cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13
aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3Rz
LmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3Rv
ciB7Ci0KLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCi0jaWYgRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jaWYgUExBVEZPUk0oV0VCX0NPTU1BTkRTKQotY2xh
c3MgQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjsKLSNlbmRpZiAvLyBQTEFURk9S
TShXRUJfQ09NTUFORFMpCi0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCi0KLSNpZiBQTEFURk9STShXRUJfQ09NTUFORFMpCi1jbGFzcyBOZXR3b3JrMUJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlciB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRS
ZXNvdXJjZShFcnJvclN0cmluZyYpID0gMDsKLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIH5OZXR3
b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOwotfTsKLSNlbmRpZiAvLyBQTEFURk9STShX
RUJfQ09NTUFORFMpCi0KLSNpZiBQTEFURk9STShXRUJfQ09NTUFORFMpCi1jbGFzcyBOZXR3b3Jr
MUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNw
YXRjaGVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE5ldHdvcmsxQmFja2VuZERpc3BhdGNo
ZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyKik7Ci0gICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5n
JiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkgZmluYWw7Ci1wcml2YXRlOgot
ICAgIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0
PiYmIHBhcmFtZXRlcnMpOwotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENI
RVJTKQotcHVibGljOgotICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0Y2hlcihBbHRlcm5hdGVO
ZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJu
YXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KLXByaXZhdGU6Ci0gICAgQWx0
ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciogbV9hbHRlcm5hdGVEaXNwYXRjaGVyIHsg
bnVsbHB0ciB9OwotI2VuZGlmCi1wcml2YXRlOgotICAgIE5ldHdvcmsxQmFja2VuZERpc3BhdGNo
ZXIoQmFja2VuZERpc3BhdGNoZXImLCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciop
OwotICAgIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50IHsgbnVsbHB0
ciB9OwotfTsKLSNlbmRpZiAvLyBQTEFURk9STShXRUJfQ09NTUFORFMpCi0KLX0gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLQot
IyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRz
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVk
ZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVS
TkFURV9ESVNQQVRDSEVSUykKLSNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXJzLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLSNpZiBQTEFURk9STShX
RUJfQ09NTUFORFMpCi1OZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6fk5ldHdvcmsx
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9Ci0jZW5kaWYgLy8gUExBVEZPUk0oV0VCX0NP
TU1BTkRTKQotCi0jaWYgUExBVEZPUk0oV0VCX0NPTU1BTkRTKQotUmVmPE5ldHdvcmsxQmFja2Vu
ZERpc3BhdGNoZXI+IE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShCYWNrZW5kRGlz
cGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyKiBhZ2VudCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBOZXR3b3JrMUJhY2tlbmRE
aXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOwotfQotCi1OZXR3b3JrMUJhY2tl
bmREaXNwYXRjaGVyOjpOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVy
JiBiYWNrZW5kRGlzcGF0Y2hlciwgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFn
ZW50KQotICAgIDogU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNo
ZXIpCi0gICAgLCBtX2FnZW50KGFnZW50KQotewotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJl
Z2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbigiTmV0d29yazEiX3MsIHRoaXMpOwotfQotCi12b2lk
IE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25z
dCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQotewotICAgIFJl
ZjxOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKLQotICAgIFJlZlB0
cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJh
bXMiX3MsIHBhcmFtZXRlcnMpOwotCi0gICAgaWYgKG1ldGhvZCA9PSAibG9hZFJlc291cmNlIikK
LSAgICAgICAgbG9hZFJlc291cmNlKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7Ci0g
ICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9y
KEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMS4iICsgbWV0aG9k
ICsgIicgd2FzIG5vdCBmb3VuZCIpOwotfQotCi12b2lkIE5ldHdvcmsxQmFja2VuZERpc3BhdGNo
ZXI6OmxvYWRSZXNvdXJjZShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikK
LXsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSAgICBpZiAo
bV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+
bG9hZFJlc291cmNlKHJlcXVlc3RJZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYK
LQotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9
IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgbV9hZ2VudC0+bG9hZFJlc291cmNlKGVycm9y
KTsKLQotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOwotICAg
IGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihC
YWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKLX0KLSNlbmRp
ZiAvLyBQTEFURk9STShXRUJfQ09NTUFORFMpCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgot
Ci0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNp
bmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3Rv
ciB7Ci0KLWNsYXNzIEZyb250ZW5kUm91dGVyOwotCi0jaWYgUExBVEZPUk0oV0VCX0VWRU5UUykK
LWNsYXNzIE5ldHdvcmszRnJvbnRlbmREaXNwYXRjaGVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKLXB1YmxpYzoKLSAgICBOZXR3b3JrM0Zyb250ZW5kRGlzcGF0Y2hlcihGcm9udGVu
ZFJvdXRlciYgZnJvbnRlbmRSb3V0ZXIpIDogbV9mcm9udGVuZFJvdXRlcihmcm9udGVuZFJvdXRl
cikgeyB9Ci0gICAgdm9pZCByZXNvdXJjZUxvYWRlZCgpOwotcHJpdmF0ZToKLSAgICBGcm9udGVu
ZFJvdXRlciYgbV9mcm9udGVuZFJvdXRlcjsKLX07Ci0jZW5kaWYgLy8gUExBVEZPUk0oV0VCX0VW
RU5UUykKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9u
dGVuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNo
ZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFp
bnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJv
bnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFj
ZSBJbnNwZWN0b3IgewotCi0jaWYgUExBVEZPUk0oV0VCX0VWRU5UUykKLXZvaWQgTmV0d29yazNG
cm9udGVuZERpc3BhdGNoZXI6OnJlc291cmNlTG9hZGVkKCkKLXsKLSAgICBSZWY8SlNPTjo6T2Jq
ZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3Nh
Z2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiTmV0d29yazMucmVzb3VyY2VMb2FkZWQiX3MpOwot
Ci0gICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmlu
ZygpKTsKLX0KLSNlbmRpZiAvLyBQTEFURk9STShXRUJfRVZFTlRTKQotCi19IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAK
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEg
b25jZQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5o
PgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Igewot
Ci0KLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLS8vIEZvcndhcmQgZGVjbGFyYXRpb25z
LgotI2lmIFBMQVRGT1JNKFdFQl9UWVBFUykKLW5hbWVzcGFjZSBOZXR3b3JrMiB7Ci1jbGFzcyBO
ZXR3b3JrRXJyb3I7Ci19IC8vIE5ldHdvcmsyCi0jZW5kaWYgLy8gUExBVEZPUk0oV0VCX1RZUEVT
KQotLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgotCi0KLQotCi0jaWYgUExBVEZPUk0o
V0VCX1RZUEVTKQotbmFtZXNwYWNlIE5ldHdvcmsyIHsKLWNsYXNzIE5ldHdvcmtFcnJvciA6IHB1
YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKLXB1YmxpYzoKLSAgICBlbnVtIHsKLSAgICAgICAgTm9G
aWVsZHNTZXQgPSAwLAotICAgICAgICBNZXNzYWdlU2V0ID0gMSA8PCAwLAotICAgICAgICBDb2Rl
U2V0ID0gMSA8PCAxLAotICAgICAgICBBbGxGaWVsZHNTZXQgPSAoTWVzc2FnZVNldCB8IENvZGVT
ZXQpCi0gICAgfTsKLQotICAgIHRlbXBsYXRlPGludCBTVEFURT4KLSAgICBjbGFzcyBCdWlsZGVy
IHsKLSAgICBwcml2YXRlOgotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBtX3Jlc3VsdDsK
LQotICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0
U3RhdGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8
QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWls
ZGVyKFJlZjwvKk5ldHdvcmtFcnJvciovSlNPTjo6T2JqZWN0PiYmIG9iamVjdCkKLSAgICAgICAg
ICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQotICAgICAgICB7Ci0gICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25v
bl9pbml0X3N0YXRlKTsKLSAgICAgICAgfQotICAgICAgICBmcmllbmQgY2xhc3MgTmV0d29ya0Vy
cm9yOwotICAgIHB1YmxpYzoKLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTWVzc2FnZVNldD4m
IHNldE1lc3NhZ2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIE1lc3NhZ2VTZXQpLCBwcm9wZXJ0eV9tZXNzYWdlX2Fs
cmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1lc3NhZ2UiX3Ms
IHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TWVzc2FnZVNldD4oKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2RlU2V0PiYgc2V0Q29kZShpbnQg
dmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBD
b2RlU2V0KSwgcHJvcGVydHlfY29kZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0SW50ZWdlcigiY29kZSJfcywgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxDb2RlU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgUmVmPE5ldHdvcmtFcnJvcj4g
cmVsZWFzZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09
IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7Ci0gICAgICAgICAgICBDT01QSUxF
X0FTU0VSVChzaXplb2YoTmV0d29ya0Vycm9yKSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0KSwgY2Fu
bm90X2Nhc3QpOwotCi0gICAgICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uUmVzdWx0ID0g
bV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKLSAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gV1RG
TW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8TmV0d29ya0Vycm9yPio+KCZqc29uUmVzdWx0KSk7
Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIC8q
Ci0gICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgotICAgICAqIFJlZjxOZXR3b3JrRXJyb3I+
IHJlc3VsdCA9IE5ldHdvcmtFcnJvcjo6Y3JlYXRlKCkKLSAgICAgKiAgICAgLnNldE1lc3NhZ2Uo
Li4uKQotICAgICAqICAgICAuc2V0Q29kZSguLi4pCi0gICAgICogICAgIC5yZWxlYXNlKCk7Ci0g
ICAgICovCi0gICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCi0gICAgewot
ICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KSk7Ci0gICAgfQotfTsKLQotfSAvLyBOZXR3b3JrMgotI2VuZGlmIC8vIFBMQVRGT1JNKFdFQl9U
WVBFUykKLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLQotI2luY2x1ZGUgPHd0Zi9PcHRp
b25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3Bl
Y3RvciB7Ci0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90
b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xPYmplY3RzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERp
c3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1k
b21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0
ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgot
Ci1AcHJvdG9jb2wgVGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyOwotCi1uYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKLQotCi0jaWYgUExBVEZPUk0oV0VCX0NPTU1BTkRTKQotY2xhc3MgT2Jq
Q0luc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJu
YXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7Ci1wdWJsaWM6Ci0gICAgT2JqQ0luc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIo
aWQ8VGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdh
dGUgPSBoYW5kbGVyOyB9Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0SWQpIGZp
bmFsOwotcHJpdmF0ZToKLSAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sTmV0d29yazFEb21h
aW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKLX07Ci0jZW5kaWYgLy8gUExBVEZPUk0oV0VCX0NPTU1B
TkRTKQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
QmFja2VuZERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
Z2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0
ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgIlRlc3RQcm90
b2NvbEludGVybmFsLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgi
Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0K
LSNpZiBQTEFURk9STShXRUJfQ09NTUFORFMpCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrMUJh
Y2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0SWQpCi17Ci0gICAgaWYg
KCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGxvYWRSZXNvdXJjZVdp
dGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgewotICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNo
ZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmsxLmxvYWRSZXNvdXJjZScgd2FzIG5vdCBmb3Vu
ZCJfcyk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0
cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9j
b2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3Ip
OwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAg
IH07Ci0KLSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBm
YWxzZSk7Ci0gICAgfTsKLQotICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZVdpdGhFcnJvckNh
bGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107Ci19
Ci0KLSNlbmRpZiAvLyBQTEFURk9STShXRUJfQ09NTUFORFMpCi0KLX0gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5t
bQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUt
Z3VhcmRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgotCi1fX2F0dHJpYnV0ZV9fKCh2
aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJh
dGlvbiA6IE5TT2JqZWN0Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluLCBzZXR0ZXI9c2V0
TmV0d29yazFIYW5kbGVyOikgaWQ8VGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyPiBu
ZXR3b3JrMUhhbmRsZXI7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFRlc3RQcm90
b2NvbE5ldHdvcmszRG9tYWluRXZlbnREaXNwYXRjaGVyICpuZXR3b3JrM0V2ZW50RGlzcGF0Y2hl
cjsKLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAot
Ci0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1
YXJkcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNp
bXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKLQotI2ltcG9ydCAiVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5o
IgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4K
LSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5o
PgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXJzLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcnMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9u
IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KLXsKLSAgICBBdWdtZW50YWJsZUluc3BlY3RvckNv
bnRyb2xsZXIqIF9jb250cm9sbGVyOwotICAgIGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWlu
SGFuZGxlcj4gX25ldHdvcmsxSGFuZGxlcjsKLSAgICBUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFp
bkV2ZW50RGlzcGF0Y2hlciAqX25ldHdvcmszRXZlbnREaXNwYXRjaGVyOwotfQotCi0tIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xs
ZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2Vs
ZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2Nv
bnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWRl
YWxsb2MKLXsKLSAgICBbX25ldHdvcmsxSGFuZGxlciByZWxlYXNlXTsKLSAgICBbX25ldHdvcmsz
RXZlbnREaXNwYXRjaGVyIHJlbGVhc2VdOwotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAo
dm9pZClzZXROZXR3b3JrMUhhbmRsZXI6KGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFu
ZGxlcj4paGFuZGxlcgotewotICAgIGlmIChoYW5kbGVyID09IF9uZXR3b3JrMUhhbmRsZXIpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIFtfbmV0d29yazFIYW5kbGVyIHJlbGVhc2VdOwotICAgIF9u
ZXR3b3JrMUhhbmRsZXIgPSBbaGFuZGxlciByZXRhaW5dOwotCi0gICAgYXV0byBhbHRlcm5hdGVE
aXNwYXRjaGVyID0gbWFrZVVuaXF1ZTxPYmpDSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0
Y2hlcj4oaGFuZGxlcik7Ci0gICAgYXV0byBhbHRlcm5hdGVBZ2VudCA9IG1ha2VVbmlxdWU8QWx0
ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciwgQWx0ZXJu
YXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4+KCJOZXR3b3JrMSJfcywgKl9jb250cm9sbGVy
LCBXVEZNb3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIpKTsKLSAgICBfY29udHJvbGxlci0+YXBwZW5k
RXh0cmFBZ2VudChXVEZNb3ZlKGFsdGVybmF0ZUFnZW50KSk7Ci19Ci0KLS0gKGlkPFRlc3RQcm90
b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4pbmV0d29yazFIYW5kbGVyCi17Ci0gICAgcmV0dXJu
IF9uZXR3b3JrMUhhbmRsZXI7Ci19Ci0KLS0gKFRlc3RQcm90b2NvbE5ldHdvcmszRG9tYWluRXZl
bnREaXNwYXRjaGVyICopbmV0d29yazNFdmVudERpc3BhdGNoZXIKLXsKLSAgICBpZiAoIV9uZXR3
b3JrM0V2ZW50RGlzcGF0Y2hlcikKLSAgICAgICAgX25ldHdvcmszRXZlbnREaXNwYXRjaGVyID0g
W1tUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkV2ZW50RGlzcGF0Y2hlciBhbGxvY10gaW5pdFdp
dGhDb250cm9sbGVyOl9jb250cm9sbGVyXTsKLSAgICByZXR1cm4gX25ldHdvcmszRXZlbnREaXNw
YXRjaGVyOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1
cmF0aW9uLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJz
Lm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13
aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAi
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5o
PgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW1wbGVtZW50YXRpb24gVGVzdFBy
b3RvY29sTmV0d29yazNEb21haW5FdmVudERpc3BhdGNoZXIKLXsKLSAgICBBdWdtZW50YWJsZUlu
c3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xs
ZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAg
cmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRyb2xsZXIgPSBj
b250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKXJlc291cmNlTG9hZGVk
Ci17Ci0gICAgY29uc3QgRnJvbnRlbmRSb3V0ZXImIHJvdXRlciA9IF9jb250cm9sbGVyLT5mcm9u
dGVuZFJvdXRlcigpOwotCi0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJf
cywgIk5ldHdvcmszLnJlc291cmNlTG9hZGVkIl9zKTsKLSAgICByb3V0ZXIuc2VuZEV2ZW50KGpz
b25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9t
YWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLSNp
bXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KLQotCi1AY2xhc3Mg
VGVzdFByb3RvY29sTmV0d29yazJOZXR3b3JrRXJyb3I7Ci0KLXR5cGVkZWYgTlNfRU5VTShOU0lu
dGVnZXIsIFRlc3RQcm90b2NvbFBsYXRmb3JtKSB7Ci0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1B
bGwsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljLAotICAgIFRlc3RQcm90b2NvbFBs
YXRmb3JtSU9TLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1MsCi19OwotCi0KLQotCi1f
X2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFBy
b3RvY29sTmV0d29yazJOZXR3b3JrRXJyb3IgOiBSV0lQcm90b2NvbEpTT05PYmplY3QKLS0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4g
KilwYXlsb2FkOwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVBy
b3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhN
ZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZTooaW50KWNvZGU7Ci0vKiByZXF1aXJlZCAq
LyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKm1lc3NhZ2U7Ci0vKiByZXF1
aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQgY29kZTsKLUBlbmQKLQot
QHByb3RvY29sIFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlciA8TlNPYmplY3Q+Ci1A
b3B0aW9uYWwKLS0gKHZvaWQpbG9hZFJlc291cmNlV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXiko
TlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKSh2
b2lkKSlzdWNjZXNzQ2FsbGJhY2s7Ci1AZW5kCi0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkg
KCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkV2ZW50
RGlzcGF0Y2hlciA6IE5TT2JqZWN0Ci0tICh2b2lkKXJlc291cmNlTG9hZGVkOwotQGVuZAotCi0K
LSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVj
dHMuaD4KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sSW50ZXJuYWwuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgot
I2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKLSNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8d3Rm
L0pTT05WYWx1ZXMuaD4KLQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkV2
ZW50RGlzcGF0Y2hlciAoUHJpdmF0ZSkKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xs
ZXI6KEluc3BlY3Rvcjo6QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVy
OwotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMu
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0
ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5
Q29udmVyc2lvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIE9iakNFbnVtVHlwZT4KLU9wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3Ry
aW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOwotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJp
bmcoVGVzdFByb3RvY29sUGxhdGZvcm0gdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0g
ICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDoKLSAgICAgICAgcmV0dXJuICJhbGwiX3M7
Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM6Ci0gICAgICAgIHJldHVybiAi
Z2VuZXJpYyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOgotICAgICAgICBy
ZXR1cm4gImlvcyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M6Ci0gICAg
ICAgIHJldHVybiAibWFjb3MiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0
aW9uYWw8VGVzdFByb3RvY29sUGxhdGZvcm0+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJp
bmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiYWxsIikKLSAgICAgICAgcmV0dXJuIFRl
c3RQcm90b2NvbFBsYXRmb3JtQWxsOwotICAgIGlmICh2YWx1ZSA9PSAiZ2VuZXJpYyIpCi0gICAg
ICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM7Ci0gICAgaWYgKHZhbHVlID09
ICJpb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1JT1M7Ci0gICAgaWYg
KHZhbHVlID09ICJtYWNvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1h
Y09TOwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAot
Ci0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUt
Z3VhcmRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0KLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgotI2ltcG9ydCA8
V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLQotdXNpbmcgbmFt
ZXNwYWNlIEluc3BlY3RvcjsKLQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMgKE5ldHdvcmsyRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZU5ldHdvcmtFcnJvcjooVGVzdFBy
b3RvY29sTmV0d29yazJOZXR3b3JrRXJyb3IgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBh
eWxvYWQ7Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucyAoTmV0d29yazJEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlTmV0d29ya0Vycm9yOihUZXN0
UHJvdG9jb2xOZXR3b3JrMk5ldHdvcmtFcnJvciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQp
cGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05T
RGljdGlvbmFyeSBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sTmV0d29y
azJOZXR3b3JrRXJyb3IgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKLX0KLQotQGVu
ZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0KLSMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUu
aD4KLSNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5o
PgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0
UHJvdG9jb2xOZXR3b3JrMk5ldHdvcmtFcnJvcgotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQ
YXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCi17
Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0K
LSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJtZXNz
YWdlIl0sIEAibWVzc2FnZSIpOwotICAgIHNlbGYubWVzc2FnZSA9IHBheWxvYWRbQCJtZXNzYWdl
Il07Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRb
QCJjb2RlIl0sIEAiY29kZSIpOwotICAgIHNlbGYuY29kZSA9IFtwYXlsb2FkW0AiY29kZSJdIGlu
dGVnZXJWYWx1ZV07Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLS0gKGluc3RhbmNldHlwZSlpbml0
V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilvYmplY3QKLXsKLSAg
ICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoSlNPTk9iamVjdDpbb2JqZWN0IHRvSlNPTk9i
amVjdF0uZ2V0KCldKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIHJldHVybiBzZWxmOwot
fQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2Ug
Y29kZTooaW50KWNvZGUKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAg
ICAgcmV0dXJuIG5pbDsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVS
VFkobWVzc2FnZSwgQCJtZXNzYWdlIik7Ci0KLSAgICBzZWxmLm1lc3NhZ2UgPSBtZXNzYWdlOwot
ICAgIHNlbGYuY29kZSA9IGNvZGU7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClz
ZXRNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UKLXsKLSAgICBbc3VwZXIgc2V0U3RyaW5nOm1l
c3NhZ2UgZm9yS2V5OkAibWVzc2FnZSJdOwotfQotCi0tIChOU1N0cmluZyAqKW1lc3NhZ2UKLXsK
LSAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAIm1lc3NhZ2UiXTsKLX0KLQotLSAodm9p
ZClzZXRDb2RlOihpbnQpY29kZQotewotICAgIFtzdXBlciBzZXRJbnRlZ2VyOmNvZGUgZm9yS2V5
OkAiY29kZSJdOwotfQotCi0tIChpbnQpY29kZQotewotICAgIHJldHVybiBbc3VwZXIgaW50ZWdl
ckZvcktleTpAImNvZGUiXTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3NhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9t
YWluLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNv
bi1yZXN1bHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5NDAyMTExMzgyYWVjN2M1
ZWYwZGVjOTgxYjIxYTY0ODg0NWFkZTUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2dlbmVyaWMvZXhwZWN0ZWQvc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbi1y
ZXN1bHQKKysrIC9kZXYvbnVsbApAQCAtMSw5MTQgKzAsMCBAQAotIyMjIEJlZ2luIEZpbGU6IElu
c3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLSMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENv
bW1hbmRzLmpzCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlm
ZmVyZW50LWRvbWFpbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgotI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLQotbmFtZXNwYWNlIEluc3Bl
Y3RvciB7Ci0KLWNsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAg
ICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBk
aXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9
Ci0gICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1
cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQotcHJpdmF0ZToKLSAgICBSZWZQdHI8QmFj
a2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Ci19OwotCi0KLQotCi19IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKLQotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQotIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWlu
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdt
YSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXR5cGVkZWYgU3Ry
aW5nIEVycm9yU3RyaW5nOwotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5k
IEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJh
Y2tlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBz
YW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0
QmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVk
ZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgot
Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jaW5jbHVkZSAi
VGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBJ
bnNwZWN0b3IgewotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmls
ZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9u
dGVuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1l
LXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29s
T2JqZWN0cy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBGcm9udGVu
ZFJvdXRlcjsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RG
cm9udGVuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3Bh
dGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1p
ZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RGcm9udGVuZERp
c3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVu
ZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIElu
c3BlY3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRl
c3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
T2JqZWN0cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlk
LWRpZmZlcmVudC1kb21haW4uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotCi1uYW1l
c3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLQotCi0KLQot
Ly8gVHlwZWRlZnMuCi1uYW1lc3BhY2UgUnVudGltZSB7Ci0vKiBVbmlxdWUgb2JqZWN0IGlkZW50
aWZpZXIuICovCi10eXBlZGVmIFN0cmluZyBSZW1vdGVPYmplY3RJZDsKLX0gLy8gUnVudGltZQot
Ci1uYW1lc3BhY2UgUnVudGltZTIgewotLyogVW5pcXVlIG9iamVjdCBpZGVudGlmaWVyLiAqLwot
dHlwZWRlZiBTdHJpbmcgUmVtb3RlT2JqZWN0SWQ7Ci19IC8vIFJ1bnRpbWUyCi0vLyBFbmQgb2Yg
dHlwZWRlZnMuCi0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLQotI2luY2x1ZGUgPHd0Zi9PcHRpb25h
bC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3Rv
ciB7Ci0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2Nv
bAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xPYmplY3RzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3Bh
dGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQt
ZGlmZmVyZW50LWRvbWFpbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLQotCi1uYW1l
c3BhY2UgSW5zcGVjdG9yIHsKLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIK
LSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSAi
VGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotCi1uYW1lc3BhY2UgSW5zcGVj
dG9yIHsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xDb25maWd1cmF0aW9uLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1l
LXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4K
LQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRl
c3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAotQGVuZAotCi0KLSMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xDb25maWd1cmF0aW9uLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
c2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9u
LmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW1wb3J0ICJUZXN0UHJv
dG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVy
bmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50
YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNw
ZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCi17Ci0g
ICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKLX0KLQotLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250
cm9sbGVyKiljb250cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAo
IXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIpOwotICAg
IF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9p
ZClkZWFsbG9jCi17Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi1AZW5kCi0KLQotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRl
cm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBv
cnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQot
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2wuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+
Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KLQotCi0K
LQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sUGxhdGZvcm0pIHsKLSAg
ICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbCwKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVy
aWMsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1JT1MsCi0gICAgVGVzdFByb3RvY29sUGxhdGZv
cm1NYWNPUywKLX07Ci0KLQotCi0KLQotCi0KLQotCi0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9S
V0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4KLQotIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2wuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQt
ZG9tYWluLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0
UHJpdmF0ZS5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JD
b250cm9sbGVyLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi0KLQotCi0jIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
c2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQg
PFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KLQotbmFtZXNwYWNl
IEluc3BlY3RvciB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KLU9wdGlvbmFs
PE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOwot
Ci1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sUGxhdGZvcm0gdmFs
dWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9y
bUFsbDoKLSAgICAgICAgcmV0dXJuICJhbGwiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0
Zm9ybUdlbmVyaWM6Ci0gICAgICAgIHJldHVybiAiZ2VuZXJpYyJfczsKLSAgICBjYXNlIFRlc3RQ
cm90b2NvbFBsYXRmb3JtSU9TOgotICAgICAgICByZXR1cm4gImlvcyJfczsKLSAgICBjYXNlIFRl
c3RQcm90b2NvbFBsYXRmb3JtTWFjT1M6Ci0gICAgICAgIHJldHVybiAibWFjb3MiX3M7Ci0gICAg
fQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sUGxhdGZvcm0+
IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1
ZSA9PSAiYWxsIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOwotICAg
IGlmICh2YWx1ZSA9PSAiZ2VuZXJpYyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0
Zm9ybUdlbmVyaWM7Ci0gICAgaWYgKHZhbHVlID09ICJpb3MiKQotICAgICAgICByZXR1cm4gVGVz
dFByb3RvY29sUGxhdGZvcm1JT1M7Ci0gICAgaWYgKHZhbHVlID09ICJtYWNvcyIpCi0gICAgICAg
IHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOwotICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7Ci19Ci0KLQotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3Rv
Y29sVHlwZVBhcnNlci5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9i
amVjdFByaXZhdGUuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGludGVyZmFj
ZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFJ1bnRpbWVEb21haW4pCi0KLSsgKHZvaWQp
X3BhcnNlUmVtb3RlT2JqZWN0SWQ6KE5TU3RyaW5nICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihp
ZClwYXlsb2FkOwotCi1AZW5kCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cyAoUnVudGltZTJEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlUmVtb3RlT2JqZWN0SWQ6KE5TU3Ry
aW5nICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotCi1AZW5kCi0KLUBpbXBs
ZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFJ1bnRpbWVEb21haW4pCi0K
LSsgKHZvaWQpX3BhcnNlUmVtb3RlT2JqZWN0SWQ6KE5TU3RyaW5nICoqKW91dFZhbHVlIGZyb21Q
YXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShw
YXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSAoTlNTdHJpbmcgKilw
YXlsb2FkOwotfQotCi1AZW5kCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zIChSdW50aW1lMkRvbWFpbikKLQotKyAodm9pZClfcGFyc2VSZW1vdGVPYmplY3RJZDoo
TlNTdHJpbmcgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJP
V19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBjbGFzc10pOwotICAg
ICpvdXRWYWx1ZSA9IChOU1N0cmluZyAqKXBheWxvYWQ7Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sVHlwZXMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBz
YW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0K
LSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8V2ViSW5z
cGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLSNpbXBvcnQgPHd0Zi9Bc3Nl
cnRpb25zLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2Ug
SW5zcGVjdG9yOwotCi0KLQotCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5t
bQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2dlbmVyaWMvZXhwZWN0ZWQvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24t
cmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvZXhwZWN0ZWQvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24tcmVzdWx0
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YmRiMmQ0MTE5ZmFjNGJmMWQwNjFlMWFm
ODBjYzFkMDE3NWU1YjcxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmljL2V4cGVjdGVkL3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uLXJlc3VsdAor
KysgL2Rldi9udWxsCkBAIC0xLDExMjQgKzAsMCBAQAotIyMjIEJlZ2luIEZpbGU6IEluc3BlY3Rv
ckJhY2tlbmRDb21tYW5kcy5qcwotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNo
YWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0jIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5k
cy5qcwotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5o
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlw
ZS1zZXR0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCi0jaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9y
IHsKLQotY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZv
aWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3Bh
dGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KLSAg
ICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBt
X2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Ci1wcml2YXRlOgotICAgIFJlZlB0cjxCYWNrZW5k
RGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKLX07Ci0KLQotCi0KLX0gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgotCi0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCi0jIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMu
aAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBv
bmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXR5cGVkZWYgU3RyaW5n
IEVycm9yU3RyaW5nOwotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZp
bGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tl
bmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFk
b3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEJh
Y2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
RnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUg
PHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQot
I2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotI2luY2x1ZGUgIlRl
c3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgSW5z
cGVjdG9yIHsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6
IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93
ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xP
YmplY3RzLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEZyb250ZW5k
Um91dGVyOwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEZy
b250ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0
Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0
aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RGcm9udGVuZERp
c3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVu
ZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIElu
c3BlY3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRl
c3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
T2JqZWN0cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0
aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFt
ZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotLy8g
Rm9yd2FyZCBkZWNsYXJhdGlvbnMuCi1uYW1lc3BhY2UgUnVudGltZSB7Ci1jbGFzcyBLZXlQYXRo
OwotfSAvLyBSdW50aW1lCi0vLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCi0KLQotCi0K
LW5hbWVzcGFjZSBUZXN0SGVscGVycyB7Ci0KLVN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShp
bnQgY29kZSk7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRFbnVtQ29uc3RhbnRW
YWx1ZShUIGVudW1WYWx1ZSkKLXsKLSAgICByZXR1cm4gZ2V0RW51bUNvbnN0YW50VmFsdWUoc3Rh
dGljX2Nhc3Q8aW50PihlbnVtVmFsdWUpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBl
cnMKLQotbmFtZXNwYWNlIFJ1bnRpbWUgewotLyogS2V5IHBhdGguICovCi1jbGFzcyBLZXlQYXRo
IDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewotcHVibGljOgotICAgIC8vIE5hbWVkIGFmdGVy
IHByb3BlcnR5IG5hbWUgJ3R5cGUnIHdoaWxlIGdlbmVyYXRpbmcgS2V5UGF0aC4KLSAgICBlbnVt
IGNsYXNzIFR5cGUgewotICAgICAgICBOdWxsID0gMCwKLSAgICAgICAgU3RyaW5nID0gMSwKLSAg
ICAgICAgQXJyYXkgPSAyLAotICAgIH07IC8vIGVudW0gY2xhc3MgVHlwZQotICAgIGVudW0gewot
ICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCi0gICAgICAgIFR5cGVTZXQgPSAxIDw8IDAsCi0gICAg
ICAgIEFsbEZpZWxkc1NldCA9IChUeXBlU2V0KQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTxpbnQg
U1RBVEU+Ci0gICAgY2xhc3MgQnVpbGRlciB7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRy
PEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7Ci0KLSAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1
aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcihSZWY8LypLZXlQYXRoKi9KU09OOjpPYmplY3Q+
JiYgb2JqZWN0KQotICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBi
dWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwotICAgICAgICB9Ci0gICAgICAgIGZy
aWVuZCBjbGFzcyBLZXlQYXRoOwotICAgIHB1YmxpYzoKLQotICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgVHlwZVNldD4mIHNldFR5cGUoVHlwZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIFR5cGVTZXQpLCBwcm9wZXJ0eV90eXBlX2FscmVhZHlf
c2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInR5cGUiX3MsIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSh2YWx1ZSkpOwot
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUeXBlU2V0PigpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgUmVmPEtleVBhdGg+IHJlbGVhc2UoKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwot
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEtleVBhdGgpID09IHNpemVvZihKU09O
OjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7Ci0KLSAgICAgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+
IGpzb25SZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOwotICAgICAgICAgICAgYXV0
byByZXN1bHQgPSBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxLZXlQYXRoPio+KCZqc29u
UmVzdWx0KSk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgfTsK
LQotICAgIC8qCi0gICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgotICAgICAqIFJlZjxLZXlQ
YXRoPiByZXN1bHQgPSBLZXlQYXRoOjpjcmVhdGUoKQotICAgICAqICAgICAuc2V0VHlwZSguLi4p
Ci0gICAgICogICAgIC5yZWxlYXNlKCk7Ci0gICAgICovCi0gICAgc3RhdGljIEJ1aWxkZXI8Tm9G
aWVsZHNTZXQ+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxk
c1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRTdHJp
bmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEpTT046Ok9iamVjdEJhc2U6
OnNldFN0cmluZygic3RyaW5nIl9zLCB2YWx1ZSk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRBcnJh
eShSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEpT
T046Ok9iamVjdEJhc2U6OnNldEFycmF5KCJhcnJheSJfcywgV1RGTW92ZSh2YWx1ZSkpOwotICAg
IH0KLX07Ci0KLX0gLy8gUnVudGltZQotCi0KLQotbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKLQot
dGVtcGxhdGU8dHlwZW5hbWUgUHJvdG9jb2xFbnVtVHlwZT4KLU9wdGlvbmFsPFByb3RvY29sRW51
bVR5cGU+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZyhjb25zdCBTdHJpbmcmKTsKLQotLy8gRW51
bXMgaW4gdGhlICdSdW50aW1lJyBEb21haW4KLXRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6OlR5cGU+IHBhcnNlRW51bVZhbHVlRnJvbVN0
cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlPihjb25zdCBT
dHJpbmcmKTsKLQotfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKLQotfSAvLyBuYW1lc3BhY2Ug
UHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbE9iamVjdHMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5j
cHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25hbC10
eXBlLXNldHRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5o
IgotCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQot
bmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1f
Y29uc3RhbnRfdmFsdWVzW10gPSB7Ci0gICAgIm51bGwiLAotICAgICJzdHJpbmciLAotICAgICJh
cnJheSIsCi19OwotCi1TdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsKLSAg
ICByZXR1cm4gZW51bV9jb25zdGFudF92YWx1ZXNbY29kZV07Ci19Ci0KLS8vIEVudW1zIGluIHRo
ZSAnUnVudGltZScgRG9tYWluCi10ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5z
cGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZT4oY29uc3QgU3RyaW5nJiBw
cm90b2NvbFN0cmluZykKLXsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVz
W10gPSB7Ci0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6S2V5
UGF0aDo6VHlwZTo6TnVsbCwKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpS
dW50aW1lOjpLZXlQYXRoOjpUeXBlOjpTdHJpbmcsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9y
OjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZTo6QXJyYXksCi0gICAgfTsKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IDM7ICsraSkKLSAgICAgICAgaWYgKHByb3RvY29sU3RyaW5n
ID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAgICAgICAg
IHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZSljb25z
dGFudFZhbHVlc1tpXTsKLQotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLQotfSAvLyBu
YW1lc3BhY2UgVGVzdEhlbHBlcnMKLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVj
dHMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMu
aAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5
cGUtc2V0dGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlz
cGF0Y2hlcnMuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLQotCi1uYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1w
b3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbEludGVybmFsLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
LmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7
Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bEJhY2tlbmREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29u
ZmlndXJhdGlvbi5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQt
b3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgotCi1f
X2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24ubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFk
b3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgi
Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0
ZURpc3BhdGNoYWJsZUFnZW50Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJs
ZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0
b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCi17Ci0gICAg
QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKLX0KLQotLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9s
bGVyKiljb250cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNl
bGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIpOwotICAgIF9j
b250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClk
ZWFsbG9jCi17Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJu
YWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0
IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLSMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBz
aGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4K
LQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgotCi0KLUBj
bGFzcyBUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aDsKLQotdHlwZWRlZiBOU19FTlVNKE5TSW50
ZWdlciwgVGVzdFByb3RvY29sUGxhdGZvcm0pIHsKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFs
bCwKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWMsCi0gICAgVGVzdFByb3RvY29sUGxh
dGZvcm1JT1MsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUywKLX07Ci0KLQotdHlwZWRl
ZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlKSB7Ci0g
ICAgVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlTnVsbCwKLSAgICBUZXN0UHJvdG9jb2xS
dW50aW1lS2V5UGF0aFR5cGVTdHJpbmcsCi0gICAgVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhU
eXBlQXJyYXksCi19OwotCi0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0Iikp
KQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aCA6IFJXSVByb3RvY29sSlNP
Tk9iamVjdAotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5T
U3RyaW5nICosIGlkPiAqKXBheWxvYWQ7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2Nv
bE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKLS0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aFR5cGU6KFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZSl0eXBlOwot
LyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgVGVzdFByb3RvY29s
UnVudGltZUtleVBhdGhUeXBlIHR5cGU7Ci0vKiBvcHRpb25hbCAqLyBAcHJvcGVydHkgKG5vbmF0
b21pYywgY29weSkgTlNTdHJpbmcgKnN0cmluZzsKLS8qIG9wdGlvbmFsICovIEBwcm9wZXJ0eSAo
bm9uYXRvbWljLCBjb3B5KSBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmFycmF5OwotQGVuZAotCi0K
LQotCi0KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmls
aXR5T2JqZWN0cy5oPgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgi
Ci0jaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgotI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDx3
dGYvSlNPTlZhbHVlcy5oPgotCi0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVy
bmFsLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1z
ZXR0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9j
b2xBcnJheUNvbnZlcnNpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+Ci1PcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90
b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKLQotaW5saW5lIFN0cmluZyB0b1Byb3Rv
Y29sU3RyaW5nKFRlc3RQcm90b2NvbFBsYXRmb3JtIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1
ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1BbGw6Ci0gICAgICAgIHJldHVybiAi
YWxsIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOgotICAgICAgICBy
ZXR1cm4gImdlbmVyaWMiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzoKLSAg
ICAgICAgcmV0dXJuICJpb3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09T
OgotICAgICAgICByZXR1cm4gIm1hY29zIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5s
aW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFBsYXRmb3JtPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gImFsbCIpCi0gICAgICAgIHJl
dHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDsKLSAgICBpZiAodmFsdWUgPT0gImdlbmVyaWMi
KQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOwotICAgIGlmICh2
YWx1ZSA9PSAiaW9zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOwot
ICAgIGlmICh2YWx1ZSA9PSAibWFjb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxh
dGZvcm1NYWNPUzsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi0KLWlubGluZSBTdHJp
bmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGUgdmFsdWUp
Ci17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xSdW50aW1lS2V5
UGF0aFR5cGVOdWxsOgotICAgICAgICByZXR1cm4gIm51bGwiX3M7Ci0gICAgY2FzZSBUZXN0UHJv
dG9jb2xSdW50aW1lS2V5UGF0aFR5cGVTdHJpbmc6Ci0gICAgICAgIHJldHVybiAic3RyaW5nIl9z
OwotICAgIGNhc2UgVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlQXJyYXk6Ci0gICAgICAg
IHJldHVybiAiYXJyYXkiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9u
YWw8VGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gIm51bGwiKQotICAgICAgICBy
ZXR1cm4gVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlTnVsbDsKLSAgICBpZiAodmFsdWUg
PT0gInN0cmluZyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5
cGVTdHJpbmc7Ci0gICAgaWYgKHZhbHVlID09ICJhcnJheSIpCi0gICAgICAgIHJldHVybiBUZXN0
UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGVBcnJheTsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93
ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgi
Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBh
cnNlci5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZh
dGUuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGludGVyZmFjZSBUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMgKFJ1bnRpbWVEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlS2V5
UGF0aDooVGVzdFByb3RvY29sUnVudGltZUtleVBhdGggKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6
KGlkKXBheWxvYWQ7Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucyAoUnVudGltZURvbWFpbikKLQotKyAodm9pZClfcGFyc2VLZXlQYXRoOihUZXN0
UHJvdG9jb2xSdW50aW1lS2V5UGF0aCAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9h
ZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlv
bmFyeSBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sUnVudGltZUtleVBh
dGggYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKLX0KLQotQGVuZAotCi0KLSMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xUeXBlcy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgi
Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8V2Vi
SW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLSNpbXBvcnQgPHd0Zi9B
c3NlcnRpb25zLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yOwotCi0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xSdW50aW1lS2V5
UGF0aAotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlv
bmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBl
ciBpbml0XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9S
X1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJ0eXBlIl0sIEAidHlwZSIpOwotICAgIE9wdGlv
bmFsPFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZT4gdHlwZSA9IGZyb21Qcm90b2NvbFN0
cmluZzxUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGU+KHBheWxvYWRbQCJ0eXBlIl0pOwot
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX0VOVU1fVkFMVUUodHlwZSwgQCJ0eXBlIik7Ci0g
ICAgc2VsZi50eXBlID0gdHlwZS52YWx1ZSgpOwotCi0gICAgc2VsZi5zdHJpbmcgPSBwYXlsb2Fk
W0Aic3RyaW5nIl07Ci0KLSAgICBzZWxmLmFycmF5ID0gcGF5bG9hZFtAImFycmF5Il07Ci0KLSAg
ICByZXR1cm4gc2VsZjsKLX0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0
OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilvYmplY3QKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1
cGVyIGluaXRXaXRoSlNPTk9iamVjdDpbb2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0KCldKSkKLSAg
ICAgICAgcmV0dXJuIG5pbDsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhUeXBlOihUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGUpdHlwZQotewot
ICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0g
ICAgc2VsZi50eXBlID0gdHlwZTsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKXNl
dFR5cGU6KFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZSl0eXBlCi17Ci0gICAgW3N1cGVy
IHNldFN0cmluZzp0b1Byb3RvY29sU3RyaW5nKHR5cGUpIGZvcktleTpAInR5cGUiXTsKLX0KLQot
LSAoVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlKXR5cGUKLXsKLSAgICByZXR1cm4gZnJv
bVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZT4oW3N1cGVyIHN0
cmluZ0ZvcktleTpAInR5cGUiXSkudmFsdWUoKTsKLX0KLQotLSAodm9pZClzZXRTdHJpbmc6KE5T
U3RyaW5nICopc3RyaW5nCi17Ci0gICAgW3N1cGVyIHNldFN0cmluZzpzdHJpbmcgZm9yS2V5OkAi
c3RyaW5nIl07Ci19Ci0KLS0gKE5TU3RyaW5nICopc3RyaW5nCi17Ci0gICAgcmV0dXJuIFtzdXBl
ciBzdHJpbmdGb3JLZXk6QCJzdHJpbmciXTsKLX0KLQotLSAodm9pZClzZXRBcnJheTooTlNBcnJh
eS8qPE5TU3RyaW5nPiovICopYXJyYXkKLXsKLSAgICBbc3VwZXIgc2V0SlNPTkFycmF5OnRvSlNP
TlN0cmluZ0FycmF5KGFycmF5KSBmb3JLZXk6QCJhcnJheSJdOwotfQotCi0tIChOU0FycmF5Lyo8
TlNTdHJpbmc+Ki8gKilhcnJheQotewotICAgIHJldHVybiB0b09iakNTdHJpbmdBcnJheShbc3Vw
ZXIgSlNPTkFycmF5Rm9yS2V5OkAiYXJyYXkiXSk7Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9zaG91bGQtc3RyaXAt
Y29tbWVudHMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9zaG91bGQtc3RyaXAtY29tbWVudHMuanNvbi1y
ZXN1bHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhMWZiN2Q0ZjlkOWI3ZmZjYWM0
MGEwNjRhNTRhYmQ4Y2NkZWVkNTIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvZXhwZWN0ZWQvc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24tcmVzdWx0CisrKyAv
ZGV2L251bGwKQEAgLTEsODcwICswLDAgQEAKLSMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNr
ZW5kQ29tbWFuZHMuanMKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaG91bGQt
c3RyaXAtY29tbWVudHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNob3VsZC1zdHJpcC1jb21tZW50cy5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaWYg
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0KLSNpbmNsdWRlICJUZXN0
UHJvdG9jb2xUeXBlcy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRl
bmRSb3V0ZXIuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVy
KFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3Bh
dGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9Ci0gICAgQmFja2VuZERpc3BhdGNoZXIqIGJh
Y2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQo
KTsgfQotcHJpdmF0ZToKLSAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERp
c3BhdGNoZXI7Ci19OwotCi0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotI2VuZGlm
IC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotIyMjIEVuZCBGaWxl
OiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRl
c3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHNob3VsZC1zdHJpcC1jb21tZW50cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2Jq
ZWN0cy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNw
ZWN0b3IgewotCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQotCi0KLX0gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLQot
IyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1
ZXMuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKLSNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jZW5kaWYK
LQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
LQotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHNob3VsZC1zdHJpcC1jb21tZW50cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFBy
b3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBG
cm9udGVuZFJvdXRlcjsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6
IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVu
ZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNob3Vs
ZC1zdHJpcC1jb21tZW50cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNw
YXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRS
b3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNw
ZWN0b3IgewotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0
RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9i
amVjdHMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNob3VsZC1zdHJpcC1j
b21tZW50cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9j
b2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNw
ZWN0b3IgewotCi0KLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLQotCi0KLQotCi0KLX0g
Ly8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbE9iamVjdHMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxk
LXN0cmlwLWNvbW1lbnRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVj
dHMuaCIKLQotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLW5hbWVzcGFjZSBQcm90b2NvbCB7
Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBzaG91bGQtc3RyaXAtY29tbWVudHMuanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW5jbHVkZSA8d3RmL1Jl
dGFpblB0ci5oPgotCi0KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNo
ZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5t
bQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNob3VsZC1zdHJpcC1jb21tZW50
cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBv
cnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgi
Ci0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2luY2x1ZGUgIlRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLW5h
bWVzcGFjZSBJbnNwZWN0b3IgewotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHNob3VsZC1zdHJpcC1jb21tZW50cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9j
b2wuaD4KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJm
YWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAotQGVuZAotCi0KLSMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5o
IgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2ltcG9ydCAiVGVzdFByb3Rv
Y29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5h
dGVEaXNwYXRjaGFibGVBZ2VudC5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFi
bGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVj
dG9yOwotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgotewotICAg
IEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci19Ci0KLS0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJv
bGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFz
ZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBf
Y29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQp
ZGVhbGxvYwotewotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIHNob3VsZC1zdHJpcC1jb21tZW50cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0K
LSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8d3RmL0pT
T05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0jIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0
cmlwLWNvbW1lbnRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLSNpbXBvcnQgPFdlYklu
c3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KLQotCi0KLQotdHlwZWRlZiBOU19FTlVN
KE5TSW50ZWdlciwgVGVzdFByb3RvY29sUGxhdGZvcm0pIHsKLSAgICBUZXN0UHJvdG9jb2xQbGF0
Zm9ybUFsbCwKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWMsCi0gICAgVGVzdFByb3Rv
Y29sUGxhdGZvcm1JT1MsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUywKLX07Ci0KLQot
Ci0KLQotCi0KLQotCi0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29t
cGF0aWJpbGl0eU9iamVjdHMuaD4KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHNob3VsZC1zdHJpcC1jb21tZW50cy5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgot
I2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKLSNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8d3Rm
L0pTT05WYWx1ZXMuaD4KLQotCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5h
bC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNob3VsZC1zdHJpcC1jb21tZW50cy5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRl
c3RQcm90b2NvbC5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252
ZXJzaW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
T2JqQ0VudW1UeXBlPgotT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmco
Y29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhU
ZXN0UHJvdG9jb2xQbGF0Zm9ybSB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBj
YXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOgotICAgICAgICByZXR1cm4gImFsbCJfczsKLSAg
ICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzoKLSAgICAgICAgcmV0dXJuICJnZW5l
cmljIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1JT1M6Ci0gICAgICAgIHJldHVy
biAiaW9zIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzoKLSAgICAgICAg
cmV0dXJuICJtYWNvcyJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25h
bDxUZXN0UHJvdG9jb2xQbGF0Zm9ybT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYg
dmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJhbGwiKQotICAgICAgICByZXR1cm4gVGVzdFBy
b3RvY29sUGxhdGZvcm1BbGw7Ci0gICAgaWYgKHZhbHVlID09ICJnZW5lcmljIikKLSAgICAgICAg
cmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzsKLSAgICBpZiAodmFsdWUgPT0gImlv
cyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzsKLSAgICBpZiAodmFs
dWUgPT0gIm1hY29zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M7
Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHNob3VsZC1zdHJpcC1jb21tZW50cy5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucy5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRl
c3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2Nv
bEpTT05PYmplY3RQcml2YXRlLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQot
Ci0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBzaG91bGQtc3RyaXAtY29tbWVudHMuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5h
bC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQg
PFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0jaW1wb3J0IDx3
dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFt
ZXNwYWNlIEluc3BlY3RvcjsKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1t
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZ2VuZXJpYy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5
cGUuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZl
LXR5cGUuanNvbi1yZXN1bHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1NjY2Mzc5
Y2E3NDZiNjY4NzM5NzZiMDNlNzQxOGNkYTQyYTQ2MWUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXBy
aW1pdGl2ZS10eXBlLmpzb24tcmVzdWx0CisrKyAvZGV2L251bGwKQEAgLTEsODkxICswLDAgQEAK
LSMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZl
LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotIyMj
IEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25j
ZQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0KLSNpbmNs
dWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yRnJvbnRlbmRSb3V0ZXIuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2b2lkIHNldEJhY2tlbmRE
aXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFj
a2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9Ci0gICAgQmFja2VuZERpc3Bh
dGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0
Y2hlci5nZXQoKTsgfQotcHJpdmF0ZToKLSAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1f
YmFja2VuZERpc3BhdGNoZXI7Ci19OwotCi0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
LQotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotIyMj
IEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQot
Ci0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10eXBlZGVmIFN0cmluZyBFcnJv
clN0cmluZzsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBU
ZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlz
cGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNs
YXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRl
c3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNs
dWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSNpbmNsdWRl
ICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNl
IEluc3BlY3RvciB7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBG
aWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZy
b250ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5
cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAi
VGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1j
bGFzcyBGcm9udGVuZFJvdXRlcjsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5k
IEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RG
cm9udGVuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQot
Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2lu
Y2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQot
bmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLQotCi0vLyBUeXBlZGVmcy4KLW5hbWVzcGFjZSBS
dW50aW1lIHsKLS8qIFVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4gKi8KLXR5cGVkZWYgaW50IFJl
bW90ZU9iamVjdElkOwotfSAvLyBSdW50aW1lCi0vLyBFbmQgb2YgdHlwZWRlZnMuCi0KLQotCi19
IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xPYmplY3RzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUt
ZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0KLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1u
YW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0
cy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5o
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlh
c2VkLXByaW1pdGl2ZS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVycy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQotCi0KLW5h
bWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUu
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0
ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgot
Ci0jaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotCi1uYW1l
c3BhY2UgSW5zcGVjdG9yIHsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxXZWJJbnNw
ZWN0b3IvVGVzdFByb3RvY29sLmg+Ci0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZh
dWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QK
LUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUt
dHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNp
bXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKLQotI2ltcG9ydCAiVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5o
IgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4K
LSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5o
PgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXJzLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcnMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9u
IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KLXsKLSAgICBBdWdtZW50YWJsZUluc3BlY3RvckNv
bnRyb2xsZXIqIF9jb250cm9sbGVyOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250
cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAg
ICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5p
bDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVy
OwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBbc3VwZXIg
ZGVhbGxvY107Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZp
Z3VyYXRpb24ubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hl
cnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9u
LWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1w
b3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPHd0Zi9KU09OVmFs
dWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2wuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRp
b24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotCi0j
aW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+Ci0KLQotCi0KLXR5
cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbFBsYXRmb3JtKSB7Ci0gICAgVGVz
dFByb3RvY29sUGxhdGZvcm1BbGwsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljLAot
ICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFj
T1MsCi19OwotCi0KLQotCi0KLQotCi0KLQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJv
dG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJp
bWl0aXZlLXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05P
YmplY3RQcml2YXRlLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3Bl
Y3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLQotCi0KLSMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2wuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMu
aD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVt
VHlwZT4KLU9wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0
cmluZyYgdmFsdWUpOwotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3Rv
Y29sUGxhdGZvcm0gdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0
UHJvdG9jb2xQbGF0Zm9ybUFsbDoKLSAgICAgICAgcmV0dXJuICJhbGwiX3M7Ci0gICAgY2FzZSBU
ZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM6Ci0gICAgICAgIHJldHVybiAiZ2VuZXJpYyJfczsK
LSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOgotICAgICAgICByZXR1cm4gImlvcyJf
czsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M6Ci0gICAgICAgIHJldHVybiAi
bWFjb3MiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFBy
b3RvY29sUGxhdGZvcm0+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQot
ewotICAgIGlmICh2YWx1ZSA9PSAiYWxsIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBs
YXRmb3JtQWxsOwotICAgIGlmICh2YWx1ZSA9PSAiZ2VuZXJpYyIpCi0gICAgICAgIHJldHVybiBU
ZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM7Ci0gICAgaWYgKHZhbHVlID09ICJpb3MiKQotICAg
ICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1JT1M7Ci0gICAgaWYgKHZhbHVlID09ICJt
YWNvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOwotICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQot
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAi
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5o
IgotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgotI2ltcG9ydCA8V2ViSW5zcGVj
dG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLQotdXNpbmcgbmFtZXNwYWNlIElu
c3BlY3RvcjsKLQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFJ1bnRp
bWVEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlUmVtb3RlT2JqZWN0SWQ6KE5TTnVtYmVyICoqKW91
dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlv
biBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFJ1bnRpbWVEb21haW4pCi0KLSsgKHZvaWQp
X3BhcnNlUmVtb3RlT2JqZWN0SWQ6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihp
ZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBb
TlNOdW1iZXIgY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSAoTlNOdW1iZXIgKilwYXlsb2FkOwot
fQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMu
bW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10
eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2lt
cG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2Jq
ZWN0UHJpdmF0ZS5oPgotI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQgPHd0Zi9K
U09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotCi0KLSMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtZGVj
bGFyYXRpb24tYXJyYXktdHlwZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24t
YXJyYXktdHlwZS5qc29uLXJlc3VsdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTRl
NWM3ZTQwOTE4YWJkODc1ZTFmOWVkNjNlMmY5OWE3MjgyOGM1MC4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFycmF5
LXR5cGUuanNvbi1yZXN1bHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMDczICswLDAgQEAKLSMjIyBC
ZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0vLyBEZWJ1Z2dlcgotSW5zcGVj
dG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiRGVidWdnZXIiLCBudWxsKTsKLUluc3BlY3RvckJh
Y2tlbmQucmVnaXN0ZXJFbnVtKCJEZWJ1Z2dlci5SZWFzb24iLCB7RGllZDogIkRpZWQiLCBGYWlu
dGVkOiAiRmFpbnRlZCIsIEh1bmdyeTogIkh1bmdyeSJ9KTsKLUluc3BlY3RvckJhY2tlbmQuYWN0
aXZhdGVEb21haW4oIkRlYnVnZ2VyIiwgbnVsbCk7Ci0jIyMgRW5kIEZpbGU6IEluc3BlY3RvckJh
Y2tlbmRDb21tYW5kcy5qcwotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmRE
aXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNs
YXJhdGlvbi1hcnJheS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCi0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotCi1uYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKLQotY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGlj
OgotICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVy
PiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hl
cik7IH0KLSAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7
IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Ci1wcml2YXRlOgotICAgIFJlZlB0
cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKLX07Ci0KLQotCi0KLX0g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCi0jIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlz
cGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10
eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3By
YWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXR5cGVkZWYg
U3RyaW5nIEVycm9yU3RyaW5nOwotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMg
RW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVz
dEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1
ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
LQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotI2luY2x1ZGUg
IlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZp
bGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJv
bnRlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlw
ZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xP
YmplY3RzLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEZyb250ZW5k
Um91dGVyOwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEZy
b250ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0
Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJh
dGlvbi1hcnJheS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3Bh
dGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJv
dXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3Bl
Y3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RG
cm9udGVuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2Jq
ZWN0cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlv
bi1hcnJheS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQ
cm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFtZXNwYWNl
IEluc3BlY3RvciB7Ci0KLQotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotLy8gRm9yd2Fy
ZCBkZWNsYXJhdGlvbnMuCi1uYW1lc3BhY2UgRGVidWdnZXIgewotZW51bSBjbGFzcyBSZWFzb247
Ci19IC8vIERlYnVnZ2VyCi0vLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCi0KLQotLy8g
VHlwZWRlZnMuCi1uYW1lc3BhY2UgRGVidWdnZXIgewotdHlwZWRlZiBpbnQgQnJlYWtwb2ludElk
OwotfSAvLyBEZWJ1Z2dlcgotCi1uYW1lc3BhY2UgUnVudGltZSB7Ci10eXBlZGVmIGludCBPYmpl
Y3RJZDsKLXR5cGVkZWYgSlNPTjo6QXJyYXlPZjxpbnQ+IEx1Y2t5TnVtYmVyczsKLXR5cGVkZWYg
SlNPTjo6QXJyYXlPZjxTdHJpbmc+IEJhYnlOYW1lczsKLXR5cGVkZWYgSlNPTjo6QXJyYXlPZjxp
bnQ+IE5ld09iamVjdHM7Ci10eXBlZGVmIEpTT046OkFycmF5T2Y8aW50PiBPbGRPYmplY3RzOwot
dHlwZWRlZiBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFz
b24+IFN0b3BSZWFzb25zOwotfSAvLyBSdW50aW1lCi0vLyBFbmQgb2YgdHlwZWRlZnMuCi0KLW5h
bWVzcGFjZSBUZXN0SGVscGVycyB7Ci0KLVN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQg
Y29kZSk7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1
ZShUIGVudW1WYWx1ZSkKLXsKLSAgICByZXR1cm4gZ2V0RW51bUNvbnN0YW50VmFsdWUoc3RhdGlj
X2Nhc3Q8aW50PihlbnVtVmFsdWUpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMK
LQotbmFtZXNwYWNlIERlYnVnZ2VyIHsKLS8qICAqLwotZW51bSBjbGFzcyBSZWFzb24gewotICAg
IERpZWQgPSAwLAotICAgIEZhaW50ZWQgPSAxLAotICAgIEh1bmdyeSA9IDIsCi19OyAvLyBlbnVt
IGNsYXNzIFJlYXNvbgotfSAvLyBEZWJ1Z2dlcgotCi0KLQotbmFtZXNwYWNlIFRlc3RIZWxwZXJz
IHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgUHJvdG9jb2xFbnVtVHlwZT4KLU9wdGlvbmFsPFByb3Rv
Y29sRW51bVR5cGU+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZyhjb25zdCBTdHJpbmcmKTsKLQot
Ly8gRW51bXMgaW4gdGhlICdEZWJ1Z2dlcicgRG9tYWluCi10ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJ
bnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uPiBwYXJzZUVudW1WYWx1ZUZyb21T
dHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbj4oY29uc3QgU3RyaW5n
Jik7Ci0KLX0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCi0KLX0gLy8gbmFtZXNwYWNlIFByb3Rv
Y29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi1uYW1lc3BhY2UgV1RGIHsKLQotdGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwotCi0vLyBIYXNoIGRlY2xhcmF0
aW9ucyBpbiB0aGUgJ0RlYnVnZ2VyJyBEb21haW4KLXRlbXBsYXRlPD4KLXN0cnVjdCBEZWZhdWx0
SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uPiB7Ci0gICAgdHlwZWRl
ZiBJbnRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb24+IEhhc2g7Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBXVEYKLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0
cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0KLSNpbmNsdWRlIDx3
dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFj
ZSBJbnNwZWN0b3IgewotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi1uYW1lc3BhY2UgVGVzdEhl
bHBlcnMgewotCi1zdGF0aWMgY29uc3QgY2hhciogY29uc3QgZW51bV9jb25zdGFudF92YWx1ZXNb
XSA9IHsKLSAgICAiRGllZCIsCi0gICAgIkZhaW50ZWQiLAotICAgICJIdW5ncnkiLAotfTsKLQot
U3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7Ci0gICAgcmV0dXJuIGVudW1f
Y29uc3RhbnRfdmFsdWVzW2NvZGVdOwotfQotCi0vLyBFbnVtcyBpbiB0aGUgJ0RlYnVnZ2VyJyBE
b21haW4KLXRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2Vy
OjpSZWFzb24+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpE
ZWJ1Z2dlcjo6UmVhc29uPihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQotewotICAgIHN0
YXRpYyBjb25zdCBzaXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsKLSAgICAgICAgKHNpemVfdClJ
bnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uOjpEaWVkLAotICAgICAgICAoc2l6
ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb246OkZhaW50ZWQsCi0gICAg
ICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbjo6SHVuZ3J5
LAotICAgIH07Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAzOyArK2kpCi0gICAgICAgIGlm
IChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tp
XV0pCi0gICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpS
ZWFzb24pY29uc3RhbnRWYWx1ZXNbaV07Ci0KLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQot
Ci0KLX0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCi0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90
b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xPYmplY3RzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERp
c3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xh
cmF0aW9uLWFycmF5LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXJzLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi0KLQotbmFt
ZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgot
I2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0
b3IgewotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24uaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUt
ZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KLQot
X19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xDb25maWd1cmF0aW9uLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlw
ZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgot
Ci0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29s
QmFja2VuZERpc3BhdGNoZXJzLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVE
aXNwYXRjaGFibGVBZ2VudC5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJ
bnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9y
OwotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgotewotICAgIEF1
Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci19Ci0KLS0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxl
ciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxm
KQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBfY29u
dHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVh
bGxvYwotewotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgi
Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8d3Rm
L0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0jIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1k
ZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLSNpbXBv
cnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KLQotCi0KLQotdHlwZWRl
ZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sUGxhdGZvcm0pIHsKLSAgICBUZXN0UHJv
dG9jb2xQbGF0Zm9ybUFsbCwKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWMsCi0gICAg
VGVzdFByb3RvY29sUGxhdGZvcm1JT1MsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUywK
LX07Ci0KLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGVidWdnZXJS
ZWFzb24pIHsKLSAgICBUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbkRpZWQsCi0gICAgVGVzdFBy
b3RvY29sRGVidWdnZXJSZWFzb25GYWludGVkLAotICAgIFRlc3RQcm90b2NvbERlYnVnZ2VyUmVh
c29uSHVuZ3J5LAotfTsKLQotCi0KLQotCi0KLQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJ
UHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+Ci0KLSMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5
cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1w
b3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2
YXRlLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRy
b2xsZXIuaD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLQotCi0KLSMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBl
LWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgPFdlYklu
c3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KLQotbmFtZXNwYWNlIEluc3Bl
Y3RvciB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KLU9wdGlvbmFsPE9iakNF
bnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOwotCi1pbmxp
bmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sUGxhdGZvcm0gdmFsdWUpCi17
Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDoK
LSAgICAgICAgcmV0dXJuICJhbGwiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdl
bmVyaWM6Ci0gICAgICAgIHJldHVybiAiZ2VuZXJpYyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2Nv
bFBsYXRmb3JtSU9TOgotICAgICAgICByZXR1cm4gImlvcyJfczsKLSAgICBjYXNlIFRlc3RQcm90
b2NvbFBsYXRmb3JtTWFjT1M6Ci0gICAgICAgIHJldHVybiAibWFjb3MiX3M7Ci0gICAgfQotfQot
Ci10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sUGxhdGZvcm0+IGZyb21Q
cm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAi
YWxsIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOwotICAgIGlmICh2
YWx1ZSA9PSAiZ2VuZXJpYyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdl
bmVyaWM7Ci0gICAgaWYgKHZhbHVlID09ICJpb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3Rv
Y29sUGxhdGZvcm1JT1M7Ci0gICAgaWYgKHZhbHVlID09ICJtYWNvcyIpCi0gICAgICAgIHJldHVy
biBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19
Ci0KLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbERlYnVnZ2Vy
UmVhc29uIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3Rv
Y29sRGVidWdnZXJSZWFzb25EaWVkOgotICAgICAgICByZXR1cm4gIkRpZWQiX3M7Ci0gICAgY2Fz
ZSBUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbkZhaW50ZWQ6Ci0gICAgICAgIHJldHVybiAiRmFp
bnRlZCJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERlYnVnZ2VyUmVhc29uSHVuZ3J5OgotICAg
ICAgICByZXR1cm4gIkh1bmdyeSJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBP
cHRpb25hbDxUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbj4gZnJvbVByb3RvY29sU3RyaW5nKGNv
bnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJEaWVkIikKLSAgICAgICAg
cmV0dXJuIFRlc3RQcm90b2NvbERlYnVnZ2VyUmVhc29uRGllZDsKLSAgICBpZiAodmFsdWUgPT0g
IkZhaW50ZWQiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGVidWdnZXJSZWFzb25GYWlu
dGVkOwotICAgIGlmICh2YWx1ZSA9PSAiSHVuZ3J5IikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90
b2NvbERlYnVnZ2VyUmVhc29uSHVuZ3J5OwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0K
LQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNs
YXJhdGlvbi1hcnJheS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0KLSNp
bXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5o
IgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4K
LQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMgKERlYnVnZ2VyRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZUJyZWFrcG9p
bnRJZDooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2
b2lkKV9wYXJzZVJlYXNvbjooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBh
eWxvYWQ7Ci0KLUBlbmQKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChS
dW50aW1lRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZU9iamVjdElkOihOU051bWJlciAqKilvdXRW
YWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLSsgKHZvaWQpX3BhcnNlTHVja3lOdW1iZXJz
OihOU0FycmF5Lyo8TlNOdW1iZXI+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxv
YWQ7Ci0rICh2b2lkKV9wYXJzZUJhYnlOYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKW91
dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotKyAodm9pZClfcGFyc2VOZXdPYmplY3Rz
OihOU0FycmF5Lyo8TlNOdW1iZXI+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxv
YWQ7Ci0rICh2b2lkKV9wYXJzZU9sZE9iamVjdHM6KE5TQXJyYXkvKjxOU051bWJlcj4qLyAqKilv
dXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLSsgKHZvaWQpX3BhcnNlU3RvcFJlYXNv
bnM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5
bG9hZDsKLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zIChEZWJ1Z2dlckRvbWFpbikKLQotKyAodm9pZClfcGFyc2VCcmVha3BvaW50SWQ6KE5TTnVt
YmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNOdW1iZXIgY2xhc3NdKTsKLSAgICAqb3V0
VmFsdWUgPSAoTlNOdW1iZXIgKilwYXlsb2FkOwotfQotCi0rICh2b2lkKV9wYXJzZVJlYXNvbjoo
TlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJP
V19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBjbGFzc10pOwotICAg
IE9wdGlvbmFsPFRlc3RQcm90b2NvbERlYnVnZ2VyUmVhc29uPiByZXN1bHQgPSBJbnNwZWN0b3I6
OmZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbj4ocGF5bG9hZCk7
Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfRU5VTV9WQUxVRShyZXN1bHQsIEAiUmVhc29u
Iik7Ci0gICAgKm91dFZhbHVlID0gQChyZXN1bHQudmFsdWUoKSk7Ci19Ci0KLUBlbmQKLUBpbXBs
ZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFJ1bnRpbWVEb21haW4pCi0K
LSsgKHZvaWQpX3BhcnNlT2JqZWN0SWQ6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2Fk
OihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2Fk
LCBbTlNOdW1iZXIgY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSAoTlNOdW1iZXIgKilwYXlsb2Fk
OwotfQotCi0rICh2b2lkKV9wYXJzZUx1Y2t5TnVtYmVyczooTlNBcnJheS8qPE5TTnVtYmVyPiov
ICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNBcnJheS8qPE5TTnVtYmVyPiovIGNsYXNzXSk7
Ci0gICAgKm91dFZhbHVlID0gKE5TQXJyYXkvKjxOU051bWJlcj4qLyAqKXBheWxvYWQ7Ci19Ci0K
LSsgKHZvaWQpX3BhcnNlQmFieU5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopb3V0VmFs
dWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JB
RF9UWVBFKHBheWxvYWQsIFtOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gY2xhc3NdKTsKLSAgICAqb3V0
VmFsdWUgPSAoTlNBcnJheS8qPE5TU3RyaW5nPiovICopcGF5bG9hZDsKLX0KLQotKyAodm9pZClf
cGFyc2VOZXdPYmplY3RzOihOU0FycmF5Lyo8TlNOdW1iZXI+Ki8gKiopb3V0VmFsdWUgZnJvbVBh
eWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBh
eWxvYWQsIFtOU0FycmF5Lyo8TlNOdW1iZXI+Ki8gY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSAo
TlNBcnJheS8qPE5TTnVtYmVyPiovICopcGF5bG9hZDsKLX0KLQotKyAodm9pZClfcGFyc2VPbGRP
YmplY3RzOihOU0FycmF5Lyo8TlNOdW1iZXI+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlk
KXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtO
U0FycmF5Lyo8TlNOdW1iZXI+Ki8gY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSAoTlNBcnJheS8q
PE5TTnVtYmVyPiovICopcGF5bG9hZDsKLX0KLQotKyAodm9pZClfcGFyc2VTdG9wUmVhc29uczoo
TlNBcnJheS8qPE5TU3RyaW5nPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2Fk
Ci17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNBcnJheS8q
PE5TU3RyaW5nPiovIGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gKE5TQXJyYXkvKjxOU1N0cmlu
Zz4qLyAqKXBheWxvYWQ7Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMu
bW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFy
cmF5LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpT
T05PYmplY3RQcml2YXRlLmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8
d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0KLQot
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVk
L3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvdHlwZS1kZWNs
YXJhdGlvbi1lbnVtLXR5cGUuanNvbi1yZXN1bHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDg5NzllOGRiZTJmYzc4OTUwMmMwOTcxZDk4MTJjZTcxYmYwMjhjZTAuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlv
bi1lbnVtLXR5cGUuanNvbi1yZXN1bHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMDg2ICswLDAgQEAK
LSMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLS8vIFJ1bnRpbWUKLUlu
c3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIlJ1bnRpbWUiLCBudWxsKTsKLUluc3BlY3Rv
ckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJSdW50aW1lLkZhcm1BbmltYWxzIiwge1BpZ3M6ICJQaWdz
IiwgQ293czogIkNvd3MiLCBDYXRzOiAiQ2F0cyIsIEhlbnM6ICJIZW5zIn0pOwotSW5zcGVjdG9y
QmFja2VuZC5yZWdpc3RlckVudW0oIlJ1bnRpbWUuVHdvTGVnZ2VkQW5pbWFscyIsIHtEdWNrczog
IkR1Y2tzIiwgSGVuczogIkhlbnMiLCBDcm93czogIkNyb3dzIiwgRmxhbWluZ29zOiAiRmxhbWlu
Z29zIn0pOwotSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiUnVudGltZSIsIG51bGwp
OwotIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNp
ZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQotI2luY2x1ZGUgIlRl
c3RQcm90b2NvbFR5cGVzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9u
dGVuZFJvdXRlci5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgQWx0ZXJuYXRl
QmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNo
ZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlz
cGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KLSAgICBCYWNrZW5kRGlzcGF0Y2hlciog
YmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdl
dCgpOyB9Ci1wcml2YXRlOgotICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5k
RGlzcGF0Y2hlcjsKLX07Ci0KLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jZW5k
aWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jIyMgRW5kIEZp
bGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90
b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKLQotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KLQotCi19IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVy
cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8
d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKLSNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJz
LmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi19IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAot
Ci0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0K
LSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1
ZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3Bl
Y3RvciB7Ci0KLWNsYXNzIEZyb250ZW5kUm91dGVyOwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotbmFtZXNwYWNlIFByb3Rv
Y29sIHsKLQotCi0KLS8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgotbmFtZXNwYWNlIFJ1bnRpbWUg
ewotZW51bSBjbGFzcyBGYXJtQW5pbWFsczsKLWVudW0gY2xhc3MgVHdvTGVnZ2VkQW5pbWFsczsK
LX0gLy8gUnVudGltZQotLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgotCi0KLQotCi1u
YW1lc3BhY2UgVGVzdEhlbHBlcnMgewotCi1TdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50
IGNvZGUpOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFs
dWUoVCBlbnVtVmFsdWUpCi17Ci0gICAgcmV0dXJuIGdldEVudW1Db25zdGFudFZhbHVlKHN0YXRp
Y19jYXN0PGludD4oZW51bVZhbHVlKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJz
Ci0KLW5hbWVzcGFjZSBSdW50aW1lIHsKLS8qICAqLwotZW51bSBjbGFzcyBGYXJtQW5pbWFscyB7
Ci0gICAgUGlncyA9IDAsCi0gICAgQ293cyA9IDEsCi0gICAgQ2F0cyA9IDIsCi0gICAgSGVucyA9
IDMsCi19OyAvLyBlbnVtIGNsYXNzIEZhcm1BbmltYWxzCi0vKiAgKi8KLWVudW0gY2xhc3MgVHdv
TGVnZ2VkQW5pbWFscyB7Ci0gICAgRHVja3MgPSA0LAotICAgIEhlbnMgPSAzLAotICAgIENyb3dz
ID0gNSwKLSAgICBGbGFtaW5nb3MgPSA2LAotfTsgLy8gZW51bSBjbGFzcyBUd29MZWdnZWRBbmlt
YWxzCi19IC8vIFJ1bnRpbWUKLQotCi0KLW5hbWVzcGFjZSBUZXN0SGVscGVycyB7Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIFByb3RvY29sRW51bVR5cGU+Ci1PcHRpb25hbDxQcm90b2NvbEVudW1UeXBl
PiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJik7Ci0KLS8vIEVudW1zIGlu
IHRoZSAnUnVudGltZScgRG9tYWluCi10ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlBy
b3RvY29sOjpSdW50aW1lOjpGYXJtQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzPihjb25zdCBTdHJpbmcmKTsK
LXRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xl
Z2dlZEFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29s
OjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxzPihjb25zdCBTdHJpbmcmKTsKLQotfSAvLyBuYW1l
c3BhY2UgVGVzdEhlbHBlcnMKLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCi0KLW5hbWVzcGFjZSBXVEYgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Ci0KLS8vIEhhc2ggZGVjbGFyYXRpb25zIGluIHRoZSAnUnVu
dGltZScgRG9tYWluCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM+IHsKLSAgICB0eXBlZGVmIEludEhhc2g8SW5z
cGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM+IEhhc2g7Ci19OwotdGVtcGxh
dGU8Pgotc3RydWN0IERlZmF1bHRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3
b0xlZ2dlZEFuaW1hbHM+IHsKLSAgICB0eXBlZGVmIEludEhhc2g8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFscz4gSGFzaDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IFdURgotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
VGVzdFByb3RvY29sT2JqZWN0cy5oIgotCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotbmFt
ZXNwYWNlIFByb3RvY29sIHsKLQotbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKLQotc3RhdGljIGNv
bnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFsdWVzW10gPSB7Ci0gICAgIlBpZ3MiLAot
ICAgICJDb3dzIiwKLSAgICAiQ2F0cyIsCi0gICAgIkhlbnMiLAotICAgICJEdWNrcyIsCi0gICAg
IkNyb3dzIiwKLSAgICAiRmxhbWluZ29zIiwKLX07Ci0KLVN0cmluZyBnZXRFbnVtQ29uc3RhbnRW
YWx1ZShpbnQgY29kZSkgewotICAgIHJldHVybiBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb2RlXTsK
LX0KLQotLy8gRW51bXMgaW4gdGhlICdSdW50aW1lJyBEb21haW4KLXRlbXBsYXRlPD4KLU9wdGlv
bmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzPiBwYXJzZUVudW1W
YWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM+
KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCi17Ci0gICAgc3RhdGljIGNvbnN0IHNpemVf
dCBjb25zdGFudFZhbHVlc1tdID0gewotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9j
b2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzOjpQaWdzLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rv
cjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzOjpDb3dzLAotICAgICAgICAoc2l6ZV90
KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzOjpDYXRzLAotICAgICAg
ICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzOjpIZW5z
LAotICAgIH07Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCA0OyArK2kpCi0gICAgICAgIGlm
IChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tp
XV0pCi0gICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZh
cm1BbmltYWxzKWNvbnN0YW50VmFsdWVzW2ldOwotCi0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
LX0KLQotdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6
VHdvTGVnZ2VkQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xT
dHJpbmcpCi17Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0gewot
ICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFu
aW1hbHM6OkR1Y2tzLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRp
bWU6OlR3b0xlZ2dlZEFuaW1hbHM6OkhlbnMsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQ
cm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFsczo6Q3Jvd3MsCi0gICAgICAgIChzaXpl
X3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFsczo6RmxhbWlu
Z29zLAotICAgIH07Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCA0OyArK2kpCi0gICAgICAg
IGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVl
c1tpXV0pCi0gICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6
OlR3b0xlZ2dlZEFuaW1hbHMpY29uc3RhbnRWYWx1ZXNbaV07Ci0KLSAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwotfQotCi0KLX0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCi0KLQotCi19IC8vIG5h
bWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+
Ci0KLQotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJj
b25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0j
aW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotCi1uYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9j
b2wuaD4KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJm
YWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAotQGVuZAotCi0KLSMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0
aW9uLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW1wb3J0ICJUZXN0
UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0Fs
dGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdt
ZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJ
bnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCi17
Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKLX0KLQot
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JD
b250cm9sbGVyKiljb250cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBp
ZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIpOwot
ICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAo
dm9pZClkZWFsbG9jCi17Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi1AZW5kCi0KLQotIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRl
cm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBv
cnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQot
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2wuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0K
LSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KLQotCi0KLQot
dHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sUGxhdGZvcm0pIHsKLSAgICBU
ZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbCwKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWMs
Ci0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1JT1MsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1N
YWNPUywKLX07Ci0KLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sUnVu
dGltZUZhcm1BbmltYWxzKSB7Ci0gICAgVGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzUGln
cywKLSAgICBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHNDb3dzLAotICAgIFRlc3RQcm90
b2NvbFJ1bnRpbWVGYXJtQW5pbWFsc0NhdHMsCi0gICAgVGVzdFByb3RvY29sUnVudGltZUZhcm1B
bmltYWxzSGVucywKLX07Ci0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2Nv
bFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzKSB7Ci0gICAgVGVzdFByb3RvY29sUnVudGltZVR3b0xl
Z2dlZEFuaW1hbHNEdWNrcywKLSAgICBUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFs
c0hlbnMsCi0gICAgVGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHNDcm93cywKLSAg
ICBUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFsc0ZsYW1pbmdvcywKLX07Ci0KLQot
Ci0KLQotCi0KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRp
YmlsaXR5T2JqZWN0cy5oPgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIK
LSNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCi0jaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPHd0
Zi9KU09OVmFsdWVzLmg+Ci0KLQotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJu
YWwuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlw
ZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBv
cnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJy
YXlDb252ZXJzaW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdGVtcGxhdGU8dHlw
ZW5hbWUgT2JqQ0VudW1UeXBlPgotT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xT
dHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0
cmluZyhUZXN0UHJvdG9jb2xQbGF0Zm9ybSB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsK
LSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOgotICAgICAgICByZXR1cm4gImFsbCJf
czsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzoKLSAgICAgICAgcmV0dXJu
ICJnZW5lcmljIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1JT1M6Ci0gICAgICAg
IHJldHVybiAiaW9zIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzoKLSAg
ICAgICAgcmV0dXJuICJtYWNvcyJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBP
cHRpb25hbDxUZXN0UHJvdG9jb2xQbGF0Zm9ybT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0
cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJhbGwiKQotICAgICAgICByZXR1cm4g
VGVzdFByb3RvY29sUGxhdGZvcm1BbGw7Ci0gICAgaWYgKHZhbHVlID09ICJnZW5lcmljIikKLSAg
ICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzsKLSAgICBpZiAodmFsdWUg
PT0gImlvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzsKLSAgICBp
ZiAodmFsdWUgPT0gIm1hY29zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3Jt
TWFjT1M7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotCi1pbmxpbmUgU3RyaW5nIHRv
UHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzIHZhbHVlKQotewot
ICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sUnVudGltZUZhcm1Bbmlt
YWxzUGlnczoKLSAgICAgICAgcmV0dXJuICJQaWdzIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29s
UnVudGltZUZhcm1BbmltYWxzQ293czoKLSAgICAgICAgcmV0dXJuICJDb3dzIl9zOwotICAgIGNh
c2UgVGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzQ2F0czoKLSAgICAgICAgcmV0dXJuICJD
YXRzIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzSGVuczoKLSAg
ICAgICAgcmV0dXJuICJIZW5zIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9w
dGlvbmFsPFRlc3RQcm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFscz4gZnJvbVByb3RvY29sU3RyaW5n
KGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJQaWdzIikKLSAgICAg
ICAgcmV0dXJuIFRlc3RQcm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFsc1BpZ3M7Ci0gICAgaWYgKHZh
bHVlID09ICJDb3dzIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFJ1bnRpbWVGYXJtQW5p
bWFsc0Nvd3M7Ci0gICAgaWYgKHZhbHVlID09ICJDYXRzIikKLSAgICAgICAgcmV0dXJuIFRlc3RQ
cm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFsc0NhdHM7Ci0gICAgaWYgKHZhbHVlID09ICJIZW5zIikK
LSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFsc0hlbnM7Ci0gICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5n
KFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzIHZhbHVlKQotewotICAgIHN3aXRj
aCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHNE
dWNrczoKLSAgICAgICAgcmV0dXJuICJEdWNrcyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFJ1
bnRpbWVUd29MZWdnZWRBbmltYWxzSGVuczoKLSAgICAgICAgcmV0dXJuICJIZW5zIl9zOwotICAg
IGNhc2UgVGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHNDcm93czoKLSAgICAgICAg
cmV0dXJuICJDcm93cyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRB
bmltYWxzRmxhbWluZ29zOgotICAgICAgICByZXR1cm4gIkZsYW1pbmdvcyJfczsKLSAgICB9Ci19
Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVn
Z2VkQW5pbWFscz4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0g
ICAgaWYgKHZhbHVlID09ICJEdWNrcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xSdW50
aW1lVHdvTGVnZ2VkQW5pbWFsc0R1Y2tzOwotICAgIGlmICh2YWx1ZSA9PSAiSGVucyIpCi0gICAg
ICAgIHJldHVybiBUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFsc0hlbnM7Ci0gICAg
aWYgKHZhbHVlID09ICJDcm93cyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xSdW50aW1l
VHdvTGVnZ2VkQW5pbWFsc0Nyb3dzOwotICAgIGlmICh2YWx1ZSA9PSAiRmxhbWluZ29zIikKLSAg
ICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzRmxhbWluZ29z
OwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBv
cnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQ
cm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7
Ci0KLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChSdW50aW1lRG9tYWlu
KQotCi0rICh2b2lkKV9wYXJzZUZhcm1BbmltYWxzOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9t
UGF5bG9hZDooaWQpcGF5bG9hZDsKLSsgKHZvaWQpX3BhcnNlVHdvTGVnZ2VkQW5pbWFsczooTlNO
dW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0KLUBlbmQKLQotQGlt
cGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoUnVudGltZURvbWFpbikK
LQotKyAodm9pZClfcGFyc2VGYXJtQW5pbWFsczooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBh
eWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBh
eWxvYWQsIFtOU1N0cmluZyBjbGFzc10pOwotICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbFJ1bnRp
bWVGYXJtQW5pbWFscz4gcmVzdWx0ID0gSW5zcGVjdG9yOjpmcm9tUHJvdG9jb2xTdHJpbmc8VGVz
dFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzPihwYXlsb2FkKTsKLSAgICBUSFJPV19FWENFUFRJ
T05fRk9SX0JBRF9FTlVNX1ZBTFVFKHJlc3VsdCwgQCJGYXJtQW5pbWFscyIpOwotICAgICpvdXRW
YWx1ZSA9IEAocmVzdWx0LnZhbHVlKCkpOwotfQotCi0rICh2b2lkKV9wYXJzZVR3b0xlZ2dlZEFu
aW1hbHM6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0g
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3Nd
KTsKLSAgICBPcHRpb25hbDxUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFscz4gcmVz
dWx0ID0gSW5zcGVjdG9yOjpmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sUnVudGltZVR3
b0xlZ2dlZEFuaW1hbHM+KHBheWxvYWQpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX0VO
VU1fVkFMVUUocmVzdWx0LCBAIlR3b0xlZ2dlZEFuaW1hbHMiKTsKLSAgICAqb3V0VmFsdWUgPSBA
KHJlc3VsdC52YWx1ZSgpKTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBl
cy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24t
ZW51bS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xK
U09OT2JqZWN0UHJpdmF0ZS5oPgotI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQg
PHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotCi0K
LSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5
cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC90eXBlLWRlY2xh
cmF0aW9uLW9iamVjdC10eXBlLmpzb24tcmVzdWx0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA0MmU2ZGEyYmJjODk4MTQ0ZDVlM2Y1YzM2Y2QwNDhjOWNjYWMzZjA2Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRp
b24tb2JqZWN0LXR5cGUuanNvbi1yZXN1bHQKKysrIC9kZXYvbnVsbApAQCAtMSwyNDU1ICswLDAg
QEAKLSMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotLy8gRGF0YWJh
c2UKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIkRhdGFiYXNlIiwgbnVsbCk7Ci1J
bnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiRGF0YWJhc2UuTW91c2VCdXR0b24iLCB7Tm9u
ZTogIk5vbmUiLCBMZWZ0OiAiTGVmdCIsIE1pZGRsZTogIk1pZGRsZSIsIFJpZ2h0OiAiUmlnaHQi
fSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiRGF0YWJhc2UuT3B0aW9uYWxQYXJh
bWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSIsIHtMVFI6ICJMVFIiLCBSVEw6ICJSVEwifSk7Ci1J
bnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiRGF0YWJhc2UuUGFyYW1ldGVyQnVuZGxlRGly
ZWN0aW9uYWxpdHkiLCB7TFRSOiAiTFRSIiwgUlRMOiAiUlRMIn0pOwotSW5zcGVjdG9yQmFja2Vu
ZC5hY3RpdmF0ZURvbWFpbigiRGF0YWJhc2UiLCBudWxsKTsKLSMjIyBFbmQgRmlsZTogSW5zcGVj
dG9yQmFja2VuZENvbW1hbmRzLmpzCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBl
LWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCi0j
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotCi1uYW1l
c3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewot
cHVibGljOgotICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNw
YXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlz
cGF0Y2hlcik7IH0KLSAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBj
b25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Ci1wcml2YXRlOgotICAg
IFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKLX07Ci0KLQot
Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVy
cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1v
YmplY3QtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10
eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+
Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0j
aW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgotI2VuZGlmCi0KLW5h
bWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMj
IyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0
UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNz
IEZyb250ZW5kUm91dGVyOwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmls
ZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250
ZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlw
ZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0RnJv
bnRlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
RnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVz
cGFjZSBJbnNwZWN0b3IgewotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBG
aWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbE9iamVjdHMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUt
ZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgot
Ci1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLQot
Ci0vLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KLW5hbWVzcGFjZSBEYXRhYmFzZSB7Ci1jbGFzcyBF
cnJvcjsKLWNsYXNzIE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOwotY2xhc3MgUGFyYW1ldGVyQnVu
ZGxlOwotY2xhc3MgT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0czsKLWNsYXNzIER1bW15
T2JqZWN0OwotZW51bSBjbGFzcyBNb3VzZUJ1dHRvbjsKLX0gLy8gRGF0YWJhc2UKLQotbmFtZXNw
YWNlIFRlc3QgewotY2xhc3MgUGFyYW1ldGVyQnVuZGxlOwotfSAvLyBUZXN0Ci0vLyBFbmQgb2Yg
Zm9yd2FyZCBkZWNsYXJhdGlvbnMuCi0KLQotLy8gVHlwZWRlZnMuCi1uYW1lc3BhY2UgRGF0YWJh
c2UgewotdHlwZWRlZiBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNl
OjpFcnJvcj4gRXJyb3JMaXN0OwotfSAvLyBEYXRhYmFzZQotLy8gRW5kIG9mIHR5cGVkZWZzLgot
Ci1uYW1lc3BhY2UgVGVzdEhlbHBlcnMgewotCi1TdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUo
aW50IGNvZGUpOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgZ2V0RW51bUNvbnN0YW50
VmFsdWUoVCBlbnVtVmFsdWUpCi17Ci0gICAgcmV0dXJuIGdldEVudW1Db25zdGFudFZhbHVlKHN0
YXRpY19jYXN0PGludD4oZW51bVZhbHVlKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFRlc3RIZWxw
ZXJzCi0KLW5hbWVzcGFjZSBEYXRhYmFzZSB7Ci0vKiBEYXRhYmFzZSBlcnJvci4gKi8KLWNsYXNz
IEVycm9yIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewotcHVibGljOgotICAgIGVudW0gewot
ICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCi0gICAgICAgIE1lc3NhZ2VTZXQgPSAxIDw8IDAsCi0g
ICAgICAgIENvZGVTZXQgPSAxIDw8IDEsCi0gICAgICAgIEFsbEZpZWxkc1NldCA9IChNZXNzYWdl
U2V0IHwgQ29kZVNldCkKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8aW50IFNUQVRFPgotICAgIGNs
YXNzIEJ1aWxkZXIgewotICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+
IG1fcmVzdWx0OwotCi0gICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwg
U1RFUD4mIGNhc3RTdGF0ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAqcmVpbnRl
cnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIEJ1aWxkZXIoUmVmPC8qRXJyb3IqL0pTT046Ok9iamVjdD4mJiBvYmplY3QpCi0gICAg
ICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKLSAgICAgICAgewotICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9p
bl9ub25faW5pdF9zdGF0ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZnJpZW5kIGNsYXNzIEVycm9y
OwotICAgIHB1YmxpYzoKLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTWVzc2FnZVNldD4mIHNl
dE1lc3NhZ2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIE1lc3NhZ2VTZXQpLCBwcm9wZXJ0eV9tZXNzYWdlX2FscmVh
ZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1lc3NhZ2UiX3MsIHZh
bHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TWVzc2FnZVNldD4oKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2RlU2V0PiYgc2V0Q29kZShpbnQgdmFs
dWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2Rl
U2V0KSwgcHJvcGVydHlfY29kZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0SW50ZWdlcigiY29kZSJfcywgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0
ZTxDb2RlU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgUmVmPEVycm9yPiByZWxlYXNlKCkK
LSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRz
U2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNp
emVvZihFcnJvcikgPT0gc2l6ZW9mKEpTT046Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsKLQotICAg
ICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4ganNvblJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VO
b25OdWxsKCk7Ci0gICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFdURk1vdmUoKnJlaW50ZXJwcmV0
X2Nhc3Q8UmVmPEVycm9yPio+KCZqc29uUmVzdWx0KSk7Ci0gICAgICAgICAgICByZXR1cm4gcmVz
dWx0OwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIC8qCi0gICAgICogU3ludGhldGljIGNvbnN0
cnVjdG9yOgotICAgICAqIFJlZjxFcnJvcj4gcmVzdWx0ID0gRXJyb3I6OmNyZWF0ZSgpCi0gICAg
ICogICAgIC5zZXRNZXNzYWdlKC4uLikKLSAgICAgKiAgICAgLnNldENvZGUoLi4uKQotICAgICAq
ICAgICAucmVsZWFzZSgpOwotICAgICAqLwotICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0
PiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpT
T046Ok9iamVjdDo6Y3JlYXRlKCkpOwotICAgIH0KLX07Ci0KLS8qIEVudW1lcmF0ZXMgZGlmZmVy
ZW50IG1vdXNlIGJ1dHRvbnMgdGhhdCBjYW4gYmUgdXNlZC4gKi8KLWVudW0gY2xhc3MgTW91c2VC
dXR0b24gewotICAgIE5vbmUgPSAwLAotICAgIExlZnQgPSAxLAotICAgIE1pZGRsZSA9IDIsCi0g
ICAgUmlnaHQgPSAzLAotfTsgLy8gZW51bSBjbGFzcyBNb3VzZUJ1dHRvbgotY2xhc3MgT3B0aW9u
YWxQYXJhbWV0ZXJCdW5kbGUgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7Ci1wdWJsaWM6Ci0g
ICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAnZGlyZWN0aW9uYWxpdHknIHdoaWxlIGdl
bmVyYXRpbmcgT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUuCi0gICAgZW51bSBjbGFzcyBEaXJlY3Rp
b25hbGl0eSB7Ci0gICAgICAgIExUUiA9IDQsCi0gICAgICAgIFJUTCA9IDUsCi0gICAgfTsgLy8g
ZW51bSBjbGFzcyBEaXJlY3Rpb25hbGl0eQotICAgIGVudW0gewotICAgICAgICBOb0ZpZWxkc1Nl
dCA9IDAsCi0gICAgICAgIEFsbEZpZWxkc1NldCA9IDAKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8
aW50IFNUQVRFPgotICAgIGNsYXNzIEJ1aWxkZXIgewotICAgIHByaXZhdGU6Ci0gICAgICAgIFJl
ZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVzdWx0OwotCi0gICAgICAgIHRlbXBsYXRlPGludCBTVEVQ
PiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlz
KTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXIoUmVmPC8qT3B0aW9uYWxQYXJhbWV0ZXJC
dW5kbGUqL0pTT046Ok9iamVjdD4mJiBvYmplY3QpCi0gICAgICAgICAgICA6IG1fcmVzdWx0KFdU
Rk1vdmUob2JqZWN0KSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RB
VEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgZnJpZW5kIGNsYXNzIE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOwot
ICAgIHB1YmxpYzoKLQotICAgICAgICBSZWY8T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU+IHJlbGVh
c2UoKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxG
aWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwotICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoc2l6ZW9mKE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlKSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0
KSwgY2Fubm90X2Nhc3QpOwotCi0gICAgICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uUmVz
dWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKLSAgICAgICAgICAgIGF1dG8gcmVzdWx0
ID0gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU+
Kj4oJmpzb25SZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0K
LSAgICB9OwotCi0gICAgLyoKLSAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6Ci0gICAgICog
UmVmPE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlPiByZXN1bHQgPSBPcHRpb25hbFBhcmFtZXRlckJ1
bmRsZTo6Y3JlYXRlKCkKLSAgICAgKiAgICAgLnJlbGVhc2UoKTsKLSAgICAgKi8KLSAgICBzdGF0
aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBC
dWlsZGVyPE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKLSAgICB9Ci0KLSAg
ICB2b2lkIHNldENvbHVtbk5hbWVzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IHZhbHVl
KQotICAgIHsKLSAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0QXJyYXkoImNvbHVtbk5hbWVz
Il9zLCBXVEZNb3ZlKHZhbHVlKSk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRCdXR0b25zKFJlZlB0
cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRv
bj4+IHZhbHVlKQotICAgIHsKLSAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0QXJyYXkoImJ1
dHRvbnMiX3MsIFdURk1vdmUodmFsdWUpKTsKLSAgICB9Ci0KLSAgICB2b2lkIHNldERpcmVjdGlv
bmFsaXR5KERpcmVjdGlvbmFsaXR5IHZhbHVlKQotICAgIHsKLSAgICAgICAgSlNPTjo6T2JqZWN0
QmFzZTo6c2V0U3RyaW5nKCJkaXJlY3Rpb25hbGl0eSJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6
VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKHZhbHVlKSk7Ci0gICAgfQotCi0gICAg
dm9pZCBzZXROb3Rlcyhjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgIHsKLSAgICAgICAgSlNPTjo6
T2JqZWN0QmFzZTo6c2V0U3RyaW5nKCJub3RlcyJfcywgdmFsdWUpOwotICAgIH0KLQotICAgIHZv
aWQgc2V0VGltZXN0YW1wKGRvdWJsZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEpTT046Ok9iamVj
dEJhc2U6OnNldERvdWJsZSgidGltZXN0YW1wIl9zLCB2YWx1ZSk7Ci0gICAgfQotCi0gICAgdm9p
ZCBzZXRWYWx1ZXMoUmVmUHRyPEpTT046Ok9iamVjdD4gdmFsdWUpCi0gICAgewotICAgICAgICBK
U09OOjpPYmplY3RCYXNlOjpzZXRPYmplY3QoInZhbHVlcyJfcywgV1RGTW92ZSh2YWx1ZSkpOwot
ICAgIH0KLQotICAgIHZvaWQgc2V0UGF5bG9hZChSZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVlKQot
ICAgIHsKLSAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0VmFsdWUoInBheWxvYWQiX3MsIFdU
Rk1vdmUodmFsdWUpKTsKLSAgICB9Ci0KLSAgICB2b2lkIHNldEVycm9yKFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHZhbHVlKQotICAgIHsKLSAgICAgICAgSlNP
Tjo6T2JqZWN0QmFzZTo6c2V0T2JqZWN0KCJlcnJvciJfcywgV1RGTW92ZSh2YWx1ZSkpOwotICAg
IH0KLQotICAgIHZvaWQgc2V0RXJyb3JMaXN0KFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpE
YXRhYmFzZTo6RXJyb3JMaXN0PiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEpTT046Ok9iamVjdEJh
c2U6OnNldEFycmF5KCJlcnJvckxpc3QiX3MsIFdURk1vdmUodmFsdWUpKTsKLSAgICB9Ci19Owot
Ci1jbGFzcyBQYXJhbWV0ZXJCdW5kbGUgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7Ci1wdWJs
aWM6Ci0gICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAnZGlyZWN0aW9uYWxpdHknIHdo
aWxlIGdlbmVyYXRpbmcgUGFyYW1ldGVyQnVuZGxlLgotICAgIGVudW0gY2xhc3MgRGlyZWN0aW9u
YWxpdHkgewotICAgICAgICBMVFIgPSA0LAotICAgICAgICBSVEwgPSA1LAotICAgIH07IC8vIGVu
dW0gY2xhc3MgRGlyZWN0aW9uYWxpdHkKLSAgICBlbnVtIHsKLSAgICAgICAgTm9GaWVsZHNTZXQg
PSAwLAotICAgICAgICBDb2x1bW5OYW1lc1NldCA9IDEgPDwgMCwKLSAgICAgICAgQnV0dG9uc1Nl
dCA9IDEgPDwgMSwKLSAgICAgICAgRGlyZWN0aW9uYWxpdHlTZXQgPSAxIDw8IDIsCi0gICAgICAg
IE5vdGVzU2V0ID0gMSA8PCAzLAotICAgICAgICBUaW1lc3RhbXBTZXQgPSAxIDw8IDQsCi0gICAg
ICAgIFZhbHVlc1NldCA9IDEgPDwgNSwKLSAgICAgICAgUGF5bG9hZFNldCA9IDEgPDwgNiwKLSAg
ICAgICAgRXJyb3JTZXQgPSAxIDw8IDcsCi0gICAgICAgIEVycm9yTGlzdFNldCA9IDEgPDwgOCwK
LSAgICAgICAgQWxsRmllbGRzU2V0ID0gKENvbHVtbk5hbWVzU2V0IHwgQnV0dG9uc1NldCB8IERp
cmVjdGlvbmFsaXR5U2V0IHwgTm90ZXNTZXQgfCBUaW1lc3RhbXBTZXQgfCBWYWx1ZXNTZXQgfCBQ
YXlsb2FkU2V0IHwgRXJyb3JTZXQgfCBFcnJvckxpc3RTZXQpCi0gICAgfTsKLQotICAgIHRlbXBs
YXRlPGludCBTVEFURT4KLSAgICBjbGFzcyBCdWlsZGVyIHsKLSAgICBwcml2YXRlOgotICAgICAg
ICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBtX3Jlc3VsdDsKLQotICAgICAgICB0ZW1wbGF0ZTxpbnQg
U1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4o
dGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyKFJlZjwvKlBhcmFtZXRlckJ1bmRs
ZSovSlNPTjo6T2JqZWN0PiYmIG9iamVjdCkKLSAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92
ZShvYmplY3QpKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9
PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKLSAgICAg
ICAgfQotICAgICAgICBmcmllbmQgY2xhc3MgUGFyYW1ldGVyQnVuZGxlOwotICAgIHB1YmxpYzoK
LQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29sdW1uTmFtZXNTZXQ+JiBzZXRDb2x1bW5OYW1l
cyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiB2YWx1ZSkKLSAgICAgICAgewotICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENvbHVtbk5hbWVzU2V0KSwgcHJvcGVydHlf
Y29sdW1uTmFtZXNfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldEFycmF5
KCJjb2x1bW5OYW1lcyJfcywgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxD
b2x1bW5OYW1lc1NldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBC
dXR0b25zU2V0PiYgc2V0QnV0dG9ucyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b24+PiB2YWx1ZSkKLSAgICAgICAgewotICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEJ1dHRvbnNTZXQpLCBwcm9wZXJ0eV9idXR0
b25zX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheSgiYnV0dG9u
cyJfcywgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxCdXR0b25zU2V0Pigp
OwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IERpcmVjdGlvbmFsaXR5U2V0
PiYgc2V0RGlyZWN0aW9uYWxpdHkoRGlyZWN0aW9uYWxpdHkgdmFsdWUpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBEaXJlY3Rpb25hbGl0eVNldCksIHBy
b3BlcnR5X2RpcmVjdGlvbmFsaXR5X2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXRTdHJpbmcoImRpcmVjdGlvbmFsaXR5Il9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0
SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUodmFsdWUpKTsKLSAgICAgICAgICAgIHJldHVy
biBjYXN0U3RhdGU8RGlyZWN0aW9uYWxpdHlTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgTm90ZXNTZXQ+JiBzZXROb3Rlcyhjb25zdCBTdHJpbmcmIHZhbHVlKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTm90ZXNTZXQp
LCBwcm9wZXJ0eV9ub3Rlc19hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
U3RyaW5nKCJub3RlcyJfcywgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxO
b3Rlc1NldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUaW1lc3Rh
bXBTZXQ+JiBzZXRUaW1lc3RhbXAoZG91YmxlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVGltZXN0YW1wU2V0KSwgcHJvcGVydHlfdGltZXN0
YW1wX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXREb3VibGUoInRpbWVz
dGFtcCJfcywgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUaW1lc3RhbXBT
ZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVmFsdWVzU2V0PiYg
c2V0VmFsdWVzKFJlZlB0cjxKU09OOjpPYmplY3Q+IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVmFsdWVzU2V0KSwgcHJvcGVydHlfdmFsdWVz
X2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoInZhbHVlcyJf
cywgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxWYWx1ZXNTZXQ+KCk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgUGF5bG9hZFNldD4mIHNldFBheWxv
YWQoUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIFBheWxvYWRTZXQpLCBwcm9wZXJ0eV9wYXlsb2FkX2FscmVh
ZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgdmFs
dWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxQYXlsb2FkU2V0PigpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IEVycm9yU2V0PiYgc2V0RXJyb3IoUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gdmFsdWUpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBFcnJvclNldCksIHByb3BlcnR5
X2Vycm9yX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoImVy
cm9yIl9zLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEVycm9yU2V0Pigp
OwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IEVycm9yTGlzdFNldD4mIHNl
dEVycm9yTGlzdChSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yTGlz
dD4gdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUg
JiBFcnJvckxpc3RTZXQpLCBwcm9wZXJ0eV9lcnJvckxpc3RfYWxyZWFkeV9zZXQpOwotICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJlcnJvckxpc3QiX3MsIHZhbHVlKTsKLSAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8RXJyb3JMaXN0U2V0PigpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgUmVmPFBhcmFtZXRlckJ1bmRsZT4gcmVsZWFzZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFk
eSk7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoUGFyYW1ldGVyQnVuZGxlKSA9
PSBzaXplb2YoSlNPTjo6T2JqZWN0KSwgY2Fubm90X2Nhc3QpOwotCi0gICAgICAgICAgICBSZWY8
SlNPTjo6T2JqZWN0PiBqc29uUmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKLSAg
ICAgICAgICAgIGF1dG8gcmVzdWx0ID0gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8UGFy
YW1ldGVyQnVuZGxlPio+KCZqc29uUmVzdWx0KSk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0
OwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIC8qCi0gICAgICogU3ludGhldGljIGNvbnN0cnVj
dG9yOgotICAgICAqIFJlZjxQYXJhbWV0ZXJCdW5kbGU+IHJlc3VsdCA9IFBhcmFtZXRlckJ1bmRs
ZTo6Y3JlYXRlKCkKLSAgICAgKiAgICAgLnNldENvbHVtbk5hbWVzKC4uLikKLSAgICAgKiAgICAg
LnNldEJ1dHRvbnMoLi4uKQotICAgICAqICAgICAuc2V0RGlyZWN0aW9uYWxpdHkoLi4uKQotICAg
ICAqICAgICAuc2V0Tm90ZXMoLi4uKQotICAgICAqICAgICAuc2V0VGltZXN0YW1wKC4uLikKLSAg
ICAgKiAgICAgLnNldFZhbHVlcyguLi4pCi0gICAgICogICAgIC5zZXRQYXlsb2FkKC4uLikKLSAg
ICAgKiAgICAgLnNldEVycm9yKC4uLikKLSAgICAgKiAgICAgLnNldEVycm9yTGlzdCguLi4pCi0g
ICAgICogICAgIC5yZWxlYXNlKCk7Ci0gICAgICovCi0gICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVs
ZHNTZXQ+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1Nl
dD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7Ci0gICAgfQotfTsKLQotLyogQ29uZmxpY3RlZCBu
YW1lcyBtYXkgY2F1c2UgZ2VuZXJhdGVkIGdldHRlcnMvc2V0dGVycyB0byBjbGFzaCB3aXRoIGJ1
aWx0LWluIEluc3BlY3Rvck9iamVjdCBtZXRob2RzLiAqLwotY2xhc3MgT2JqZWN0V2l0aFByb3Bl
cnR5TmFtZUNvbmZsaWN0cyA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKLXB1YmxpYzoKLSAg
ICBlbnVtIHsKLSAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAotICAgICAgICBJbnRlZ2VyU2V0ID0g
MSA8PCAwLAotICAgICAgICBBcnJheVNldCA9IDEgPDwgMSwKLSAgICAgICAgU3RyaW5nU2V0ID0g
MSA8PCAyLAotICAgICAgICBWYWx1ZVNldCA9IDEgPDwgMywKLSAgICAgICAgT2JqZWN0U2V0ID0g
MSA8PCA0LAotICAgICAgICBBbGxGaWVsZHNTZXQgPSAoSW50ZWdlclNldCB8IEFycmF5U2V0IHwg
U3RyaW5nU2V0IHwgVmFsdWVTZXQgfCBPYmplY3RTZXQpCi0gICAgfTsKLQotICAgIHRlbXBsYXRl
PGludCBTVEFURT4KLSAgICBjbGFzcyBCdWlsZGVyIHsKLSAgICBwcml2YXRlOgotICAgICAgICBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiBtX3Jlc3VsdDsKLQotICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RF
UD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhp
cyk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyKFJlZjwvKk9iamVjdFdpdGhQcm9wZXJ0
eU5hbWVDb25mbGljdHMqL0pTT046Ok9iamVjdD4mJiBvYmplY3QpCi0gICAgICAgICAgICA6IG1f
cmVzdWx0KFdURk1vdmUob2JqZWN0KSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9z
dGF0ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZnJpZW5kIGNsYXNzIE9iamVjdFdpdGhQcm9wZXJ0
eU5hbWVDb25mbGljdHM7Ci0gICAgcHVibGljOgotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBJ
bnRlZ2VyU2V0PiYgc2V0SW50ZWdlcihjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgSW50ZWdlclNldCksIHByb3BlcnR5
X2ludGVnZXJfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygi
aW50ZWdlciJfcywgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxJbnRlZ2Vy
U2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IEFycmF5U2V0PiYg
c2V0QXJyYXkoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIEFycmF5U2V0KSwgcHJvcGVydHlfYXJyYXlfYWxyZWFkeV9z
ZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygiYXJyYXkiX3MsIHZhbHVlKTsK
LSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8QXJyYXlTZXQ+KCk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU3RyaW5nU2V0PiYgc2V0U3RyaW5nKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUg
JiBTdHJpbmdTZXQpLCBwcm9wZXJ0eV9zdHJpbmdfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAg
bV9yZXN1bHQtPnNldFN0cmluZygic3RyaW5nIl9zLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPFN0cmluZ1NldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBWYWx1ZVNldD4mIHNldFZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBWYWx1ZVNldCksIHByb3Bl
cnR5X3ZhbHVlX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmco
InZhbHVlIl9zLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFZhbHVlU2V0
PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IE9iamVjdFNldD4mIHNl
dE9iamVjdChjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVCghKFNUQVRFICYgT2JqZWN0U2V0KSwgcHJvcGVydHlfb2JqZWN0X2FscmVhZHlf
c2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm9iamVjdCJfcywgdmFsdWUp
OwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxPYmplY3RTZXQ+KCk7Ci0gICAgICAgIH0K
LQotICAgICAgICBSZWY8T2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cz4gcmVsZWFzZSgp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxk
c1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChz
aXplb2YoT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cykgPT0gc2l6ZW9mKEpTT046Ok9i
amVjdCksIGNhbm5vdF9jYXN0KTsKLQotICAgICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4ganNv
blJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7Ci0gICAgICAgICAgICBhdXRvIHJl
c3VsdCA9IFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPE9iamVjdFdpdGhQcm9wZXJ0eU5h
bWVDb25mbGljdHM+Kj4oJmpzb25SZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgLyoKLSAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0
b3I6Ci0gICAgICogUmVmPE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHM+IHJlc3VsdCA9
IE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHM6OmNyZWF0ZSgpCi0gICAgICogICAgIC5z
ZXRJbnRlZ2VyKC4uLikKLSAgICAgKiAgICAgLnNldEFycmF5KC4uLikKLSAgICAgKiAgICAgLnNl
dFN0cmluZyguLi4pCi0gICAgICogICAgIC5zZXRWYWx1ZSguLi4pCi0gICAgICogICAgIC5zZXRP
YmplY3QoLi4uKQotICAgICAqICAgICAucmVsZWFzZSgpOwotICAgICAqLwotICAgIHN0YXRpYyBC
dWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEJ1aWxk
ZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOwotICAgIH0KLX07Ci0KLX0g
Ly8gRGF0YWJhc2UKLQotbmFtZXNwYWNlIFRlc3QgewotY2xhc3MgUGFyYW1ldGVyQnVuZGxlIDog
cHVibGljIEpTT046Ok9iamVjdEJhc2UgewotcHVibGljOgotICAgIC8vIE5hbWVkIGFmdGVyIHBy
b3BlcnR5IG5hbWUgJ2RpcmVjdGlvbmFsaXR5JyB3aGlsZSBnZW5lcmF0aW5nIFBhcmFtZXRlckJ1
bmRsZS4KLSAgICBlbnVtIGNsYXNzIERpcmVjdGlvbmFsaXR5IHsKLSAgICAgICAgTFRSID0gNCwK
LSAgICAgICAgUlRMID0gNSwKLSAgICB9OyAvLyBlbnVtIGNsYXNzIERpcmVjdGlvbmFsaXR5Ci0g
ICAgZW51bSB7Ci0gICAgICAgIE5vRmllbGRzU2V0ID0gMCwKLSAgICAgICAgRGlyZWN0aW9uYWxp
dHlTZXQgPSAxIDw8IDAsCi0gICAgICAgIEJ1dHRvbnNTZXQgPSAxIDw8IDEsCi0gICAgICAgIENv
bHVtbk5hbWVzU2V0ID0gMSA8PCAyLAotICAgICAgICBOb3Rlc1NldCA9IDEgPDwgMywKLSAgICAg
ICAgVGltZXN0YW1wU2V0ID0gMSA8PCA0LAotICAgICAgICBWYWx1ZXNTZXQgPSAxIDw8IDUsCi0g
ICAgICAgIFBheWxvYWRTZXQgPSAxIDw8IDYsCi0gICAgICAgIEVycm9yU2V0ID0gMSA8PCA3LAot
ICAgICAgICBBbGxGaWVsZHNTZXQgPSAoRGlyZWN0aW9uYWxpdHlTZXQgfCBCdXR0b25zU2V0IHwg
Q29sdW1uTmFtZXNTZXQgfCBOb3Rlc1NldCB8IFRpbWVzdGFtcFNldCB8IFZhbHVlc1NldCB8IFBh
eWxvYWRTZXQgfCBFcnJvclNldCkKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8aW50IFNUQVRFPgot
ICAgIGNsYXNzIEJ1aWxkZXIgewotICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0cjxKU09OOjpP
YmplY3Q+IG1fcmVzdWx0OwotCi0gICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNU
QVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAq
cmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKLSAgICAgICAg
fQotCi0gICAgICAgIEJ1aWxkZXIoUmVmPC8qUGFyYW1ldGVyQnVuZGxlKi9KU09OOjpPYmplY3Q+
JiYgb2JqZWN0KQotICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBi
dWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwotICAgICAgICB9Ci0gICAgICAgIGZy
aWVuZCBjbGFzcyBQYXJhbWV0ZXJCdW5kbGU7Ci0gICAgcHVibGljOgotCi0gICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBEaXJlY3Rpb25hbGl0eVNldD4mIHNldERpcmVjdGlvbmFsaXR5KERpcmVjdGlv
bmFsaXR5IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgRGlyZWN0aW9uYWxpdHlTZXQpLCBwcm9wZXJ0eV9kaXJlY3Rpb25hbGl0eV9hbHJlYWR5
X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJkaXJlY3Rpb25hbGl0eSJf
cywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVl
KHZhbHVlKSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPERpcmVjdGlvbmFsaXR5U2V0
PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IEJ1dHRvbnNTZXQ+JiBz
ZXRCdXR0b25zKFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFi
YXNlOjpNb3VzZUJ1dHRvbj4+IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxF
X0FTU0VSVCghKFNUQVRFICYgQnV0dG9uc1NldCksIHByb3BlcnR5X2J1dHRvbnNfYWxyZWFkeV9z
ZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJidXR0b25zIl9zLCB2YWx1ZSk7
Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEJ1dHRvbnNTZXQ+KCk7Ci0gICAgICAgIH0K
LQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29sdW1uTmFtZXNTZXQ+JiBzZXRDb2x1bW5OYW1l
cyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiB2YWx1ZSkKLSAgICAgICAgewotICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENvbHVtbk5hbWVzU2V0KSwgcHJvcGVydHlf
Y29sdW1uTmFtZXNfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldEFycmF5
KCJjb2x1bW5OYW1lcyJfcywgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxD
b2x1bW5OYW1lc1NldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBO
b3Rlc1NldD4mIHNldE5vdGVzKGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBOb3Rlc1NldCksIHByb3BlcnR5X25vdGVz
X2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm5vdGVzIl9z
LCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE5vdGVzU2V0PigpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IFRpbWVzdGFtcFNldD4mIHNldFRpbWVz
dGFtcChkb3VibGUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBUaW1lc3RhbXBTZXQpLCBwcm9wZXJ0eV90aW1lc3RhbXBfYWxyZWFkeV9zZXQp
OwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCB2YWx1ZSk7
Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFRpbWVzdGFtcFNldD4oKTsKLSAgICAgICAg
fQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBWYWx1ZXNTZXQ+JiBzZXRWYWx1ZXMoUmVmUHRy
PEpTT046Ok9iamVjdD4gdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBWYWx1ZXNTZXQpLCBwcm9wZXJ0eV92YWx1ZXNfYWxyZWFkeV9zZXQpOwot
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdCgidmFsdWVzIl9zLCB2YWx1ZSk7Ci0gICAg
ICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFZhbHVlc1NldD4oKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBQYXlsb2FkU2V0PiYgc2V0UGF5bG9hZChSZWZQdHI8SlNPTjo6
VmFsdWU+IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgUGF5bG9hZFNldCksIHByb3BlcnR5X3BheWxvYWRfYWxyZWFkeV9zZXQpOwotICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCB2YWx1ZSk7Ci0gICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPFBheWxvYWRTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgRXJyb3JTZXQ+JiBzZXRFcnJvcihSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6RGF0YWJhc2U6OkVycm9yPiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIEVycm9yU2V0KSwgcHJvcGVydHlfZXJyb3JfYWxyZWFkeV9z
ZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdCgiZXJyb3IiX3MsIHZhbHVlKTsK
LSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8RXJyb3JTZXQ+KCk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBSZWY8UGFyYW1ldGVyQnVuZGxlPiByZWxlYXNlKCkKLSAgICAgICAgewotICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90
X3JlYWR5KTsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihQYXJhbWV0ZXJCdW5k
bGUpID09IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7Ci0KLSAgICAgICAgICAg
IFJlZjxKU09OOjpPYmplY3Q+IGpzb25SZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgp
OwotICAgICAgICAgICAgYXV0byByZXN1bHQgPSBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJl
ZjxQYXJhbWV0ZXJCdW5kbGU+Kj4oJmpzb25SZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgLyoKLSAgICAgKiBTeW50aGV0aWMgY29u
c3RydWN0b3I6Ci0gICAgICogUmVmPFBhcmFtZXRlckJ1bmRsZT4gcmVzdWx0ID0gUGFyYW1ldGVy
QnVuZGxlOjpjcmVhdGUoKQotICAgICAqICAgICAuc2V0RGlyZWN0aW9uYWxpdHkoLi4uKQotICAg
ICAqICAgICAuc2V0QnV0dG9ucyguLi4pCi0gICAgICogICAgIC5zZXRDb2x1bW5OYW1lcyguLi4p
Ci0gICAgICogICAgIC5zZXROb3RlcyguLi4pCi0gICAgICogICAgIC5zZXRUaW1lc3RhbXAoLi4u
KQotICAgICAqICAgICAuc2V0VmFsdWVzKC4uLikKLSAgICAgKiAgICAgLnNldFBheWxvYWQoLi4u
KQotICAgICAqICAgICAuc2V0RXJyb3IoLi4uKQotICAgICAqICAgICAucmVsZWFzZSgpOwotICAg
ICAqLwotICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkp
OwotICAgIH0KLX07Ci0KLX0gLy8gVGVzdAotCi0KLQotbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsK
LQotdGVtcGxhdGU8dHlwZW5hbWUgUHJvdG9jb2xFbnVtVHlwZT4KLU9wdGlvbmFsPFByb3RvY29s
RW51bVR5cGU+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZyhjb25zdCBTdHJpbmcmKTsKLQotLy8g
RW51bXMgaW4gdGhlICdEYXRhYmFzZScgRG9tYWluCi10ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNw
ZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b24+IHBhcnNlRW51bVZhbHVlRnJv
bVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b24+KGNvbnN0
IFN0cmluZyYpOwotdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0
YWJhc2U6Ok9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4gcGFyc2VFbnVt
VmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpPcHRpb25hbFBh
cmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+KGNvbnN0IFN0cmluZyYpOwotdGVtcGxhdGU8
PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlBhcmFtZXRlckJ1bmRs
ZTo6RGlyZWN0aW9uYWxpdHk+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlBy
b3RvY29sOjpEYXRhYmFzZTo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4oY29uc3Qg
U3RyaW5nJik7Ci0KLS8vIEVudW1zIGluIHRoZSAnVGVzdCcgRG9tYWluCi10ZW1wbGF0ZTw+Ci1P
cHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVj
dGlvbmFsaXR5PiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6
VGVzdDo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4oY29uc3QgU3RyaW5nJik7Ci0K
LX0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0K
LX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi1uYW1lc3BhY2UgV1RGIHsKLQotdGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwotCi0vLyBIYXNoIGRlY2xhcmF0aW9ucyBp
biB0aGUgJ0RhdGFiYXNlJyBEb21haW4KLXRlbXBsYXRlPD4KLXN0cnVjdCBEZWZhdWx0SGFzaDxJ
bnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b24+IHsKLSAgICB0eXBlZGVm
IEludEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPiBIYXNo
OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9i
amVjdHMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBl
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLQotI2luY2x1
ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFt
ZXNwYWNlIEluc3BlY3RvciB7Ci0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLW5hbWVzcGFjZSBU
ZXN0SGVscGVycyB7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBlbnVtX2NvbnN0YW50X3Zh
bHVlc1tdID0gewotICAgICJOb25lIiwKLSAgICAiTGVmdCIsCi0gICAgIk1pZGRsZSIsCi0gICAg
IlJpZ2h0IiwKLSAgICAiTFRSIiwKLSAgICAiUlRMIiwKLX07Ci0KLVN0cmluZyBnZXRFbnVtQ29u
c3RhbnRWYWx1ZShpbnQgY29kZSkgewotICAgIHJldHVybiBlbnVtX2NvbnN0YW50X3ZhbHVlc1tj
b2RlXTsKLX0KLQotLy8gRW51bXMgaW4gdGhlICdEYXRhYmFzZScgRG9tYWluCi10ZW1wbGF0ZTw+
Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b24+IHBh
cnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6TW91
c2VCdXR0b24+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCi17Ci0gICAgc3RhdGljIGNv
bnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0gewotICAgICAgICAoc2l6ZV90KUluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbjo6Tm9uZSwKLSAgICAgICAgKHNpemVf
dClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b246OkxlZnQsCi0gICAg
ICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uOjpN
aWRkbGUsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1v
dXNlQnV0dG9uOjpSaWdodCwKLSAgICB9OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgNDsg
KytpKQotICAgICAgICBpZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNb
Y29uc3RhbnRWYWx1ZXNbaV1dKQotICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b24pY29uc3RhbnRWYWx1ZXNbaV07Ci0KLSAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwotfQotCi10ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlBy
b3RvY29sOjpEYXRhYmFzZTo6T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5
PiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6
Ok9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4oY29uc3QgU3RyaW5nJiBw
cm90b2NvbFN0cmluZykKLXsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVz
W10gPSB7Ci0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok9w
dGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eTo6TFRSLAotICAgICAgICAoc2l6
ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpPcHRpb25hbFBhcmFtZXRlckJ1bmRs
ZTo6RGlyZWN0aW9uYWxpdHk6OlJUTCwKLSAgICB9OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgMjsgKytpKQotICAgICAgICBpZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92
YWx1ZXNbY29uc3RhbnRWYWx1ZXNbaV1dKQotICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6
OlByb3RvY29sOjpEYXRhYmFzZTo6T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFs
aXR5KWNvbnN0YW50VmFsdWVzW2ldOwotCi0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQot
dGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlBhcmFt
ZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNw
ZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0
eT4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKLXsKLSAgICBzdGF0aWMgY29uc3Qgc2l6
ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7Ci0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90
b2NvbDo6RGF0YWJhc2U6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk6OkxUUiwKLSAg
ICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UGFyYW1ldGVyQnVu
ZGxlOjpEaXJlY3Rpb25hbGl0eTo6UlRMLAotICAgIH07Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCAyOyArK2kpCi0gICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50
X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCi0gICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5KWNv
bnN0YW50VmFsdWVzW2ldOwotCi0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotCi0vLyBF
bnVtcyBpbiB0aGUgJ1Rlc3QnIERvbWFpbgotdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9y
OjpQcm90b2NvbDo6VGVzdDo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4gcGFyc2VF
bnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlBhcmFtZXRlckJ1
bmRsZTo6RGlyZWN0aW9uYWxpdHk+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCi17Ci0g
ICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0gewotICAgICAgICAoc2l6
ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9u
YWxpdHk6OkxUUiwKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpQ
YXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5OjpSVEwsCi0gICAgfTsKLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IDI7ICsraSkKLSAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVu
dW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAgICAgICAgIHJldHVy
biAoSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25h
bGl0eSljb25zdGFudFZhbHVlc1tpXTsKLQotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0K
LQotfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3Rv
Y29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbE9iamVjdHMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlz
cGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFy
YXRpb24tb2JqZWN0LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXJzLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi0KLQotbmFt
ZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIK
LSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSAi
VGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotCi1uYW1lc3BhY2UgSW5zcGVj
dG9yIHsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xDb25maWd1cmF0aW9uLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBl
LWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgot
Ci1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVz
dFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbENvbmZpZ3VyYXRpb24ubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0
eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5o
IgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2ltcG9ydCAiVGVzdFByb3Rv
Y29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5h
dGVEaXNwYXRjaGFibGVBZ2VudC5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFi
bGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVj
dG9yOwotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgotewotICAg
IEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci19Ci0KLS0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJv
bGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFz
ZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBf
Y29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQp
ZGVhbGxvYwotewotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5h
bC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQg
PHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2wuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5
cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQot
I2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgotCi0KLUBjbGFz
cyBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yOwotQGNsYXNzIFRlc3RQcm90b2NvbERhdGFiYXNl
T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU7Ci1AY2xhc3MgVGVzdFByb3RvY29sRGF0YWJhc2VQYXJh
bWV0ZXJCdW5kbGU7Ci1AY2xhc3MgVGVzdFByb3RvY29sRGF0YWJhc2VPYmplY3RXaXRoUHJvcGVy
dHlOYW1lQ29uZmxpY3RzOwotQGNsYXNzIFRlc3RQcm90b2NvbERhdGFiYXNlRHVtbXlPYmplY3Q7
Ci1AY2xhc3MgVGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZTsKLQotdHlwZWRlZiBOU19F
TlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sUGxhdGZvcm0pIHsKLSAgICBUZXN0UHJvdG9jb2xQ
bGF0Zm9ybUFsbCwKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWMsCi0gICAgVGVzdFBy
b3RvY29sUGxhdGZvcm1JT1MsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUywKLX07Ci0K
LQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGF0YWJhc2VNb3VzZUJ1
dHRvbikgewotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VCdXR0b25Ob25lLAotICAgIFRl
c3RQcm90b2NvbERhdGFiYXNlTW91c2VCdXR0b25MZWZ0LAotICAgIFRlc3RQcm90b2NvbERhdGFi
YXNlTW91c2VCdXR0b25NaWRkbGUsCi0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VNb3VzZUJ1dHRv
blJpZ2h0LAotfTsKLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGF0
YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5KSB7Ci0gICAgVGVzdFBy
b3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5TFRSLAot
ICAgIFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25h
bGl0eVJUTCwKLX07Ci0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbERh
dGFiYXNlUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHkpIHsKLSAgICBUZXN0UHJvdG9jb2xE
YXRhYmFzZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5TFRSLAotICAgIFRlc3RQcm90b2Nv
bERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHlSVEwsCi19OwotCi10eXBlZGVm
IE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlRGlyZWN0
aW9uYWxpdHkpIHsKLSAgICBUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9u
YWxpdHlMVFIsCi0gICAgVGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFs
aXR5UlRMLAotfTsKLQotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkK
LUBpbnRlcmZhY2UgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciA6IFJXSVByb3RvY29sSlNPTk9i
amVjdAotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3Ry
aW5nICosIGlkPiAqKXBheWxvYWQ7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9i
amVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKLS0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBjb2RlOihpbnQpY29kZTsKLS8q
IHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqbWVzc2Fn
ZTsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCBjb2Rl
OwotQGVuZAotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRl
cmZhY2UgVGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZSA6IFJXSVBy
b3RvY29sSlNPTk9iamVjdAotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0
aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQ7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKLS8q
IG9wdGlvbmFsICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU0FycmF5Lyo8TlNTdHJp
bmc+Ki8gKmNvbHVtbk5hbWVzOwotLyogb3B0aW9uYWwgKi8gQHByb3BlcnR5IChub25hdG9taWMs
IGNvcHkpIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqYnV0dG9uczsKLS8qIG9wdGlvbmFsICovIEBw
cm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQ
YXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSBkaXJlY3Rpb25hbGl0eTsKLS8qIG9wdGlvbmFs
ICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqbm90ZXM7Ci0vKiBvcHRp
b25hbCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBkb3VibGUgdGltZXN0YW1wOwot
Lyogb3B0aW9uYWwgKi8gQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgUldJUHJvdG9jb2xK
U09OT2JqZWN0ICp2YWx1ZXM7Ci0vKiBvcHRpb25hbCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywg
cmV0YWluKSBSV0lQcm90b2NvbEpTT05PYmplY3QgKnBheWxvYWQ7Ci0vKiBvcHRpb25hbCAqLyBA
cHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluKSBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpl
cnJvcjsKLS8qIG9wdGlvbmFsICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU0FycmF5
Lyo8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4qLyAqZXJyb3JMaXN0OwotQGVuZAotCi1fX2F0
dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3Rv
Y29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGUgOiBSV0lQcm90b2NvbEpTT05PYmplY3QKLS0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4g
KilwYXlsb2FkOwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVBy
b3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhD
b2x1bW5OYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMgYnV0dG9uczoo
TlNBcnJheS8qPE5TU3RyaW5nPiovICopYnV0dG9ucyBkaXJlY3Rpb25hbGl0eTooVGVzdFByb3Rv
Y29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSlkaXJlY3Rpb25hbGl0eSBu
b3RlczooTlNTdHJpbmcgKilub3RlcyB0aW1lc3RhbXA6KGRvdWJsZSl0aW1lc3RhbXAgdmFsdWVz
OihSV0lQcm90b2NvbEpTT05PYmplY3QgKil2YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xKU09O
T2JqZWN0ICopcGF5bG9hZCBlcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKWVycm9y
IGVycm9yTGlzdDooTlNBcnJheS8qPFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I+Ki8gKillcnJv
ckxpc3Q7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNBcnJh
eS8qPE5TU3RyaW5nPiovICpjb2x1bW5OYW1lczsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAo
bm9uYXRvbWljLCBjb3B5KSBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmJ1dHRvbnM7Ci0vKiByZXF1
aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBUZXN0UHJvdG9jb2xEYXRhYmFz
ZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5IGRpcmVjdGlvbmFsaXR5OwotLyogcmVxdWly
ZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICpub3RlczsKLS8qIHJl
cXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGRvdWJsZSB0aW1lc3RhbXA7
Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluKSBSV0lQcm90b2Nv
bEpTT05PYmplY3QgKnZhbHVlczsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWlj
LCByZXRhaW4pIFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5bG9hZDsKLS8qIHJlcXVpcmVkICov
IEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3Ig
KmVycm9yOwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TQXJy
YXkvKjxUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yPiovICplcnJvckxpc3Q7Ci1AZW5kCi0KLV9f
YXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJv
dG9jb2xEYXRhYmFzZU9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHMgOiBSV0lQcm90b2Nv
bEpTT05PYmplY3QKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFy
eTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkOwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJv
dG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7Ci0tIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhJbnRlZ2VyOihOU1N0cmluZyAqKWludGVnZXIgYXJyYXk6KE5TU3Ry
aW5nICopYXJyYXkgc3RyaW5nOihOU1N0cmluZyAqKXN0cmluZyB2YWx1ZTooTlNTdHJpbmcgKil2
YWx1ZSBvYmplY3Q6KE5TU3RyaW5nICopb2JqZWN0OwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5
IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICppbnRlZ2VyOwotLyogcmVxdWlyZWQgKi8gQHBy
b3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICphcnJheTsKLS8qIHJlcXVpcmVkICov
IEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqc3RyaW5nOwotLyogcmVxdWly
ZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICp2YWx1ZTsKLS8qIHJl
cXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqb2JqZWN0Owot
QGVuZAotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZh
Y2UgVGVzdFByb3RvY29sRGF0YWJhc2VEdW1teU9iamVjdCA6IFJXSVByb3RvY29sSlNPTk9iamVj
dAotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3RyaW5n
ICosIGlkPiAqKXBheWxvYWQ7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVj
dDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKLUBlbmQKLQotX19hdHRyaWJ1
dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbFRl
c3RQYXJhbWV0ZXJCdW5kbGUgOiBSV0lQcm90b2NvbEpTT05PYmplY3QKLS0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2Fk
OwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNP
Tk9iamVjdCAqKWpzb25PYmplY3Q7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhEaXJlY3Rpb25h
bGl0eTooVGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5KWRpcmVj
dGlvbmFsaXR5IGJ1dHRvbnM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWJ1dHRvbnMgY29sdW1u
TmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWNvbHVtbk5hbWVzIG5vdGVzOihOU1N0cmlu
ZyAqKW5vdGVzIHRpbWVzdGFtcDooZG91YmxlKXRpbWVzdGFtcCB2YWx1ZXM6KFJXSVByb3RvY29s
SlNPTk9iamVjdCAqKXZhbHVlcyBwYXlsb2FkOihSV0lQcm90b2NvbEpTT05PYmplY3QgKilwYXls
b2FkIGVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICopZXJyb3I7Ci0vKiByZXF1aXJl
ZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBUZXN0UHJvdG9jb2xUZXN0UGFyYW1l
dGVyQnVuZGxlRGlyZWN0aW9uYWxpdHkgZGlyZWN0aW9uYWxpdHk7Ci0vKiByZXF1aXJlZCAqLyBA
cHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNBcnJheS8qPE5TU3RyaW5nPiovICpidXR0b25z
OwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TQXJyYXkvKjxO
U1N0cmluZz4qLyAqY29sdW1uTmFtZXM7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0
b21pYywgY29weSkgTlNTdHJpbmcgKm5vdGVzOwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChu
b25hdG9taWMsIGFzc2lnbikgZG91YmxlIHRpbWVzdGFtcDsKLS8qIHJlcXVpcmVkICovIEBwcm9w
ZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIFJXSVByb3RvY29sSlNPTk9iamVjdCAqdmFsdWVzOwot
LyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgUldJUHJvdG9jb2xK
U09OT2JqZWN0ICpwYXlsb2FkOwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMs
IHJldGFpbikgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqZXJyb3I7Ci1AZW5kCi0KLQotCi0K
LQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlP
YmplY3RzLmg+Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1w
b3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgotI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDx3dGYvSlNP
TlZhbHVlcy5oPgotCi0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgK
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQg
IlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlD
b252ZXJzaW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdGVtcGxhdGU8dHlwZW5h
bWUgT2JqQ0VudW1UeXBlPgotT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJp
bmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmlu
ZyhUZXN0UHJvdG9jb2xQbGF0Zm9ybSB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAg
ICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOgotICAgICAgICByZXR1cm4gImFsbCJfczsK
LSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzoKLSAgICAgICAgcmV0dXJuICJn
ZW5lcmljIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1JT1M6Ci0gICAgICAgIHJl
dHVybiAiaW9zIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzoKLSAgICAg
ICAgcmV0dXJuICJtYWNvcyJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRp
b25hbDxUZXN0UHJvdG9jb2xQbGF0Zm9ybT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJhbGwiKQotICAgICAgICByZXR1cm4gVGVz
dFByb3RvY29sUGxhdGZvcm1BbGw7Ci0gICAgaWYgKHZhbHVlID09ICJnZW5lcmljIikKLSAgICAg
ICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzsKLSAgICBpZiAodmFsdWUgPT0g
ImlvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzsKLSAgICBpZiAo
dmFsdWUgPT0gIm1hY29zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFj
T1M7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotCi1pbmxpbmUgU3RyaW5nIHRvUHJv
dG9jb2xTdHJpbmcoVGVzdFByb3RvY29sRGF0YWJhc2VNb3VzZUJ1dHRvbiB2YWx1ZSkKLXsKLSAg
ICBzd2l0Y2godmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VCdXR0
b25Ob25lOgotICAgICAgICByZXR1cm4gIk5vbmUiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xE
YXRhYmFzZU1vdXNlQnV0dG9uTGVmdDoKLSAgICAgICAgcmV0dXJuICJMZWZ0Il9zOwotICAgIGNh
c2UgVGVzdFByb3RvY29sRGF0YWJhc2VNb3VzZUJ1dHRvbk1pZGRsZToKLSAgICAgICAgcmV0dXJu
ICJNaWRkbGUiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9uUmln
aHQ6Ci0gICAgICAgIHJldHVybiAiUmlnaHQiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1p
bmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VNb3VzZUJ1dHRvbj4gZnJvbVByb3Rv
Y29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJOb25l
IikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VCdXR0b25Ob25lOwot
ICAgIGlmICh2YWx1ZSA9PSAiTGVmdCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRh
YmFzZU1vdXNlQnV0dG9uTGVmdDsKLSAgICBpZiAodmFsdWUgPT0gIk1pZGRsZSIpCi0gICAgICAg
IHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9uTWlkZGxlOwotICAgIGlmICh2
YWx1ZSA9PSAiUmlnaHQiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VNb3Vz
ZUJ1dHRvblJpZ2h0OwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLWlubGluZSBTdHJp
bmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVy
QnVuZGxlRGlyZWN0aW9uYWxpdHkgdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAg
Y2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9u
YWxpdHlMVFI6Ci0gICAgICAgIHJldHVybiAiTFRSIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29s
RGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5UlRMOgotICAgICAg
ICByZXR1cm4gIlJUTCJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25h
bDxUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxp
dHk+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2
YWx1ZSA9PSAiTFRSIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9u
YWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eUxUUjsKLSAgICBpZiAodmFsdWUgPT0gIlJU
TCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVy
QnVuZGxlRGlyZWN0aW9uYWxpdHlSVEw7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQot
aW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1l
dGVyQnVuZGxlRGlyZWN0aW9uYWxpdHkgdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0g
ICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5
TFRSOgotICAgICAgICByZXR1cm4gIkxUUiJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFi
YXNlUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHlSVEw6Ci0gICAgICAgIHJldHVybiAiUlRM
Il9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2Nv
bERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHk+IGZyb21Qcm90b2NvbFN0cmlu
Zyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiTFRSIikKLSAgICAg
ICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxp
dHlMVFI7Ci0gICAgaWYgKHZhbHVlID09ICJSVEwiKQotICAgICAgICByZXR1cm4gVGVzdFByb3Rv
Y29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eVJUTDsKLSAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwotfQotCi0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0
UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHkgdmFsdWUpCi17Ci0gICAg
c3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxl
RGlyZWN0aW9uYWxpdHlMVFI6Ci0gICAgICAgIHJldHVybiAiTFRSIl9zOwotICAgIGNhc2UgVGVz
dFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5UlRMOgotICAgICAgICBy
ZXR1cm4gIlJUTCJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxU
ZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHk+IGZyb21Qcm90b2Nv
bFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiTFRSIikK
LSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25h
bGl0eUxUUjsKLSAgICBpZiAodmFsdWUgPT0gIlJUTCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJv
dG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHlSVEw7Ci0gICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2xUeXBlUGFyc2VyLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2Jq
ZWN0UHJpdmF0ZS5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW50ZXJmYWNl
IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoRGF0YWJhc2VEb21haW4pCi0KLSsgKHZvaWQp
X3BhcnNlRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKiopb3V0VmFsdWUgZnJvbVBh
eWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZUVycm9yTGlzdDooTlNBcnJheS8qPFRl
c3RQcm90b2NvbERhdGFiYXNlRXJyb3I+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBh
eWxvYWQ7Ci0rICh2b2lkKV9wYXJzZU1vdXNlQnV0dG9uOihOU051bWJlciAqKilvdXRWYWx1ZSBm
cm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLSsgKHZvaWQpX3BhcnNlT3B0aW9uYWxQYXJhbWV0ZXJC
dW5kbGU6KFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUgKiopb3V0
VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZVBhcmFtZXRlckJ1
bmRsZTooVGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGUgKiopb3V0VmFsdWUgZnJv
bVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZU9iamVjdFdpdGhQcm9wZXJ0eU5h
bWVDb25mbGljdHM6KFRlc3RQcm90b2NvbERhdGFiYXNlT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNv
bmZsaWN0cyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLSsgKHZvaWQpX3Bh
cnNlRHVtbXlPYmplY3Q6KFRlc3RQcm90b2NvbERhdGFiYXNlRHVtbXlPYmplY3QgKiopb3V0VmFs
dWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0KLUBlbmQKLUBpbnRlcmZhY2UgVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zIChUZXN0RG9tYWluKQotCi0rICh2b2lkKV9wYXJzZVBhcmFtZXRl
ckJ1bmRsZTooVGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZSAqKilvdXRWYWx1ZSBmcm9t
UGF5bG9hZDooaWQpcGF5bG9hZDsKLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zIChEYXRhYmFzZURvbWFpbikKLQotKyAodm9pZClfcGFyc2VFcnJv
cjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQp
cGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05T
RGljdGlvbmFyeSBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sRGF0YWJh
c2VFcnJvciBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOwotfQotCi0rICh2b2lkKV9w
YXJzZUVycm9yTGlzdDooTlNBcnJheS8qPFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I+Ki8gKiop
b3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05f
Rk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0FycmF5Lyo8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJv
cj4qLyBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IChOU0FycmF5Lyo8VGVzdFByb3RvY29sRGF0
YWJhc2VFcnJvcj4qLyAqKXBheWxvYWQ7Ci19Ci0KLSsgKHZvaWQpX3BhcnNlTW91c2VCdXR0b246
KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKLSAg
ICBPcHRpb25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9uPiByZXN1bHQgPSBJbnNw
ZWN0b3I6OmZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9u
PihwYXlsb2FkKTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9FTlVNX1ZBTFVFKHJlc3Vs
dCwgQCJNb3VzZUJ1dHRvbiIpOwotICAgICpvdXRWYWx1ZSA9IEAocmVzdWx0LnZhbHVlKCkpOwot
fQotCi0rICh2b2lkKV9wYXJzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOihUZXN0UHJvdG9jb2xE
YXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihp
ZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBb
TlNEaWN0aW9uYXJ5IGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xEYXRh
YmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9h
ZF07Ci19Ci0KLSsgKHZvaWQpX3BhcnNlUGFyYW1ldGVyQnVuZGxlOihUZXN0UHJvdG9jb2xEYXRh
YmFzZVBhcmFtZXRlckJ1bmRsZSAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAot
ewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFy
eSBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0
ZXJCdW5kbGUgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKLX0KLQotKyAodm9pZClf
cGFyc2VPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzOihUZXN0UHJvdG9jb2xEYXRhYmFz
ZU9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHMgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6
KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQs
IFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbERh
dGFiYXNlT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cyBhbGxvY10gaW5pdFdpdGhQYXls
b2FkOnBheWxvYWRdOwotfQotCi0rICh2b2lkKV9wYXJzZUR1bW15T2JqZWN0OihUZXN0UHJvdG9j
b2xEYXRhYmFzZUR1bW15T2JqZWN0ICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2Fk
Ci17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNEaWN0aW9u
YXJ5IGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xEYXRhYmFzZUR1bW15
T2JqZWN0IGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07Ci19Ci0KLUBlbmQKLUBpbXBs
ZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFRlc3REb21haW4pCi0KLSsg
KHZvaWQpX3BhcnNlUGFyYW1ldGVyQnVuZGxlOihUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVu
ZGxlICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7Ci0gICAg
Km91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlIGFsbG9jXSBpbml0
V2l0aFBheWxvYWQ6cGF5bG9hZF07Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
VHlwZXMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0
aW9uLW9iamVjdC10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJv
dG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNp
bXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0K
LQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IKLQotLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwg
aWQ+ICopcGF5bG9hZAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAg
ICByZXR1cm4gbmlsOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJU
WShwYXlsb2FkW0AibWVzc2FnZSJdLCBAIm1lc3NhZ2UiKTsKLSAgICBzZWxmLm1lc3NhZ2UgPSBw
YXlsb2FkW0AibWVzc2FnZSJdOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9Q
Uk9QRVJUWShwYXlsb2FkW0AiY29kZSJdLCBAImNvZGUiKTsKLSAgICBzZWxmLmNvZGUgPSBbcGF5
bG9hZFtAImNvZGUiXSBpbnRlZ2VyVmFsdWVdOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0tIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0
ICopb2JqZWN0Ci17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEpTT05PYmplY3Q6
W29iamVjdCB0b0pTT05PYmplY3RdLmdldCgpXSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAg
ICByZXR1cm4gc2VsZjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTWVzc2FnZTooTlNT
dHJpbmcgKiltZXNzYWdlIGNvZGU6KGludCljb2RlCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBl
ciBpbml0XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9S
X1JFUVVJUkVEX1BST1BFUlRZKG1lc3NhZ2UsIEAibWVzc2FnZSIpOwotCi0gICAgc2VsZi5tZXNz
YWdlID0gbWVzc2FnZTsKLSAgICBzZWxmLmNvZGUgPSBjb2RlOwotCi0gICAgcmV0dXJuIHNlbGY7
Ci19Ci0KLS0gKHZvaWQpc2V0TWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlCi17Ci0gICAgW3N1
cGVyIHNldFN0cmluZzptZXNzYWdlIGZvcktleTpAIm1lc3NhZ2UiXTsKLX0KLQotLSAoTlNTdHJp
bmcgKiltZXNzYWdlCi17Ci0gICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJtZXNzYWdl
Il07Ci19Ci0KLS0gKHZvaWQpc2V0Q29kZTooaW50KWNvZGUKLXsKLSAgICBbc3VwZXIgc2V0SW50
ZWdlcjpjb2RlIGZvcktleTpAImNvZGUiXTsKLX0KLQotLSAoaW50KWNvZGUKLXsKLSAgICByZXR1
cm4gW3N1cGVyIGludGVnZXJGb3JLZXk6QCJjb2RlIl07Ci19Ci0KLUBlbmQKLQotQGltcGxlbWVu
dGF0aW9uIFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUKLQotLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJp
bmcgKiwgaWQ+ICopcGF5bG9hZAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQot
ICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgc2VsZi5jb2x1bW5OYW1lcyA9IHBheWxvYWRbQCJj
b2x1bW5OYW1lcyJdOwotCi0gICAgc2VsZi5idXR0b25zID0gcGF5bG9hZFtAImJ1dHRvbnMiXTsK
LQotICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5k
bGVEaXJlY3Rpb25hbGl0eT4gZGlyZWN0aW9uYWxpdHkgPSBmcm9tUHJvdG9jb2xTdHJpbmc8VGVz
dFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5Pihw
YXlsb2FkW0AiZGlyZWN0aW9uYWxpdHkiXSk7Ci0gICAgaWYgKGRpcmVjdGlvbmFsaXR5KQotICAg
ICAgICBzZWxmLmRpcmVjdGlvbmFsaXR5ID0gZGlyZWN0aW9uYWxpdHkudmFsdWUoKTsKLQotICAg
IHNlbGYubm90ZXMgPSBwYXlsb2FkW0Aibm90ZXMiXTsKLQotICAgIHNlbGYudGltZXN0YW1wID0g
W3BheWxvYWRbQCJ0aW1lc3RhbXAiXSBkb3VibGVWYWx1ZV07Ci0KLSAgICBzZWxmLnZhbHVlcyA9
IHBheWxvYWRbQCJ2YWx1ZXMiXTsKLQotICAgIHNlbGYucGF5bG9hZCA9IHBheWxvYWRbQCJwYXls
b2FkIl07Ci0KLSAgICBzZWxmLmVycm9yID0gW1tUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGFs
bG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZFtAImVycm9yIl1dOwotCi0gICAgc2VsZi5lcnJv
ckxpc3QgPSBvYmpjQXJyYXlGcm9tUGF5bG9hZDxUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yPihw
YXlsb2FkW0AiZXJyb3JMaXN0Il0pOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0tIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopb2Jq
ZWN0Ci17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEpTT05PYmplY3Q6W29iamVj
dCB0b0pTT05PYmplY3RdLmdldCgpXSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICByZXR1
cm4gc2VsZjsKLX0KLQotLSAodm9pZClzZXRDb2x1bW5OYW1lczooTlNBcnJheS8qPE5TU3RyaW5n
PiovICopY29sdW1uTmFtZXMKLXsKLSAgICBbc3VwZXIgc2V0SlNPTkFycmF5OnRvSlNPTlN0cmlu
Z0FycmF5KGNvbHVtbk5hbWVzKSBmb3JLZXk6QCJjb2x1bW5OYW1lcyJdOwotfQotCi0tIChOU0Fy
cmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcwotewotICAgIHJldHVybiB0b09iakNTdHJp
bmdBcnJheShbc3VwZXIgSlNPTkFycmF5Rm9yS2V5OkAiY29sdW1uTmFtZXMiXSk7Ci19Ci0KLS0g
KHZvaWQpc2V0QnV0dG9uczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopYnV0dG9ucwotewotICAg
IFtzdXBlciBzZXRKU09OQXJyYXk6dG9KU09OU3RyaW5nQXJyYXkoYnV0dG9ucykgZm9yS2V5OkAi
YnV0dG9ucyJdOwotfQotCi0tIChOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilidXR0b25zCi17Ci0g
ICAgcmV0dXJuIHRvT2JqQ1N0cmluZ0FycmF5KFtzdXBlciBKU09OQXJyYXlGb3JLZXk6QCJidXR0
b25zIl0pOwotfQotCi0tICh2b2lkKXNldERpcmVjdGlvbmFsaXR5OihUZXN0UHJvdG9jb2xEYXRh
YmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHkpZGlyZWN0aW9uYWxpdHkK
LXsKLSAgICBbc3VwZXIgc2V0U3RyaW5nOnRvUHJvdG9jb2xTdHJpbmcoZGlyZWN0aW9uYWxpdHkp
IGZvcktleTpAImRpcmVjdGlvbmFsaXR5Il07Ci19Ci0KLS0gKFRlc3RQcm90b2NvbERhdGFiYXNl
T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSlkaXJlY3Rpb25hbGl0eQotewot
ICAgIHJldHVybiBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25h
bFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5Pihbc3VwZXIgc3RyaW5nRm9yS2V5OkAiZGly
ZWN0aW9uYWxpdHkiXSkudmFsdWUoKTsKLX0KLQotLSAodm9pZClzZXROb3RlczooTlNTdHJpbmcg
Kilub3RlcwotewotICAgIFtzdXBlciBzZXRTdHJpbmc6bm90ZXMgZm9yS2V5OkAibm90ZXMiXTsK
LX0KLQotLSAoTlNTdHJpbmcgKilub3RlcwotewotICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9y
S2V5OkAibm90ZXMiXTsKLX0KLQotLSAodm9pZClzZXRUaW1lc3RhbXA6KGRvdWJsZSl0aW1lc3Rh
bXAKLXsKLSAgICBbc3VwZXIgc2V0RG91YmxlOnRpbWVzdGFtcCBmb3JLZXk6QCJ0aW1lc3RhbXAi
XTsKLX0KLQotLSAoZG91YmxlKXRpbWVzdGFtcAotewotICAgIHJldHVybiBbc3VwZXIgZG91Ymxl
Rm9yS2V5OkAidGltZXN0YW1wIl07Ci19Ci0KLS0gKHZvaWQpc2V0VmFsdWVzOihSV0lQcm90b2Nv
bEpTT05PYmplY3QgKil2YWx1ZXMKLXsKLSAgICBbc3VwZXIgc2V0T2JqZWN0OnZhbHVlcyBmb3JL
ZXk6QCJ2YWx1ZXMiXTsKLX0KLQotLSAoUldJUHJvdG9jb2xKU09OT2JqZWN0ICopdmFsdWVzCi17
Ci0gICAgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvYmplY3QgPSBbc3VwZXIgb2JqZWN0Rm9yS2V5
OkAidmFsdWVzIl07Ci0gICAgaWYgKCFvYmplY3QpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAg
cmV0dXJuIFtbUldJUHJvdG9jb2xKU09OT2JqZWN0IGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6
W1tzdXBlciBvYmplY3RGb3JLZXk6QCJ2YWx1ZXMiXSB0b0pTT05PYmplY3RdLmdldCgpXTsKLX0K
LQotLSAodm9pZClzZXRQYXlsb2FkOihSV0lQcm90b2NvbEpTT05PYmplY3QgKilwYXlsb2FkCi17
Ci0gICAgW3N1cGVyIHNldE9iamVjdDpwYXlsb2FkIGZvcktleTpAInBheWxvYWQiXTsKLX0KLQot
LSAoUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZAotewotICAgIFJXSVByb3RvY29sSlNP
Tk9iamVjdCAqb2JqZWN0ID0gW3N1cGVyIG9iamVjdEZvcktleTpAInBheWxvYWQiXTsKLSAgICBp
ZiAoIW9iamVjdCkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4gW1tSV0lQcm90b2Nv
bEpTT05PYmplY3QgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDpbW3N1cGVyIG9iamVjdEZvcktl
eTpAInBheWxvYWQiXSB0b0pTT05PYmplY3RdLmdldCgpXTsKLX0KLQotLSAodm9pZClzZXRFcnJv
cjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKWVycm9yCi17Ci0gICAgW3N1cGVyIHNldE9i
amVjdDplcnJvciBmb3JLZXk6QCJlcnJvciJdOwotfQotCi0tIChUZXN0UHJvdG9jb2xEYXRhYmFz
ZUVycm9yICopZXJyb3IKLXsKLSAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9iamVjdCA9IFtz
dXBlciBvYmplY3RGb3JLZXk6QCJlcnJvciJdOwotICAgIGlmICghb2JqZWN0KQotICAgICAgICBy
ZXR1cm4gbmlsOwotICAgIHJldHVybiBbW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgYWxsb2Nd
IGluaXRXaXRoSlNPTk9iamVjdDpbW3N1cGVyIG9iamVjdEZvcktleTpAImVycm9yIl0gdG9KU09O
T2JqZWN0XS5nZXQoKV07Ci19Ci0KLS0gKHZvaWQpc2V0RXJyb3JMaXN0OihOU0FycmF5Lyo8VGVz
dFByb3RvY29sRGF0YWJhc2VFcnJvcj4qLyAqKWVycm9yTGlzdAotewotICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfQkFEX1RZUEVfSU5fQVJSQVkoZXJyb3JMaXN0LCBbVGVzdFByb3RvY29sRGF0YWJh
c2VFcnJvciBjbGFzc10pOwotICAgIFtzdXBlciBzZXRKU09OQXJyYXk6dG9KU09OT2JqZWN0QXJy
YXkoZXJyb3JMaXN0KSBmb3JLZXk6QCJlcnJvckxpc3QiXTsKLX0KLQotLSAoTlNBcnJheS8qPFRl
c3RQcm90b2NvbERhdGFiYXNlRXJyb3I+Ki8gKillcnJvckxpc3QKLXsKLSAgICByZXR1cm4gdG9P
YmpDQXJyYXk8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4oW3N1cGVyIEpTT05BcnJheUZvcktl
eTpAImVycm9yTGlzdCJdKTsKLX0KLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3Rv
Y29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGUKLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5
bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZAotewot
ICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0g
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiY29sdW1u
TmFtZXMiXSwgQCJjb2x1bW5OYW1lcyIpOwotICAgIHNlbGYuY29sdW1uTmFtZXMgPSBwYXlsb2Fk
W0AiY29sdW1uTmFtZXMiXTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJP
UEVSVFkocGF5bG9hZFtAImJ1dHRvbnMiXSwgQCJidXR0b25zIik7Ci0gICAgc2VsZi5idXR0b25z
ID0gcGF5bG9hZFtAImJ1dHRvbnMiXTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlS
RURfUFJPUEVSVFkocGF5bG9hZFtAImRpcmVjdGlvbmFsaXR5Il0sIEAiZGlyZWN0aW9uYWxpdHki
KTsKLSAgICBPcHRpb25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZURpcmVj
dGlvbmFsaXR5PiBkaXJlY3Rpb25hbGl0eSA9IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9j
b2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5PihwYXlsb2FkW0AiZGlyZWN0
aW9uYWxpdHkiXSk7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfRU5VTV9WQUxVRShkaXJl
Y3Rpb25hbGl0eSwgQCJkaXJlY3Rpb25hbGl0eSIpOwotICAgIHNlbGYuZGlyZWN0aW9uYWxpdHkg
PSBkaXJlY3Rpb25hbGl0eS52YWx1ZSgpOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFV
SVJFRF9QUk9QRVJUWShwYXlsb2FkW0Aibm90ZXMiXSwgQCJub3RlcyIpOwotICAgIHNlbGYubm90
ZXMgPSBwYXlsb2FkW0Aibm90ZXMiXTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlS
RURfUFJPUEVSVFkocGF5bG9hZFtAInRpbWVzdGFtcCJdLCBAInRpbWVzdGFtcCIpOwotICAgIHNl
bGYudGltZXN0YW1wID0gW3BheWxvYWRbQCJ0aW1lc3RhbXAiXSBkb3VibGVWYWx1ZV07Ci0KLSAg
ICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJ2YWx1ZXMi
XSwgQCJ2YWx1ZXMiKTsKLSAgICBzZWxmLnZhbHVlcyA9IHBheWxvYWRbQCJ2YWx1ZXMiXTsKLQot
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAInBheWxv
YWQiXSwgQCJwYXlsb2FkIik7Ci0gICAgc2VsZi5wYXlsb2FkID0gcGF5bG9hZFtAInBheWxvYWQi
XTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtA
ImVycm9yIl0sIEAiZXJyb3IiKTsKLSAgICBzZWxmLmVycm9yID0gW1tUZXN0UHJvdG9jb2xEYXRh
YmFzZUVycm9yIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZFtAImVycm9yIl1dOwotCi0g
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiZXJyb3JM
aXN0Il0sIEAiZXJyb3JMaXN0Iik7Ci0gICAgc2VsZi5lcnJvckxpc3QgPSBvYmpjQXJyYXlGcm9t
UGF5bG9hZDxUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yPihwYXlsb2FkW0AiZXJyb3JMaXN0Il0p
OwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2Nv
bE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopb2JqZWN0Ci17Ci0gICAgaWYgKCEoc2Vs
ZiA9IFtzdXBlciBpbml0V2l0aEpTT05PYmplY3Q6W29iamVjdCB0b0pTT05PYmplY3RdLmdldCgp
XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoQ29sdW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWNv
bHVtbk5hbWVzIGJ1dHRvbnM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWJ1dHRvbnMgZGlyZWN0
aW9uYWxpdHk6KFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxp
dHkpZGlyZWN0aW9uYWxpdHkgbm90ZXM6KE5TU3RyaW5nICopbm90ZXMgdGltZXN0YW1wOihkb3Vi
bGUpdGltZXN0YW1wIHZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopdmFsdWVzIHBheWxv
YWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQgZXJyb3I6KFRlc3RQcm90b2NvbERh
dGFiYXNlRXJyb3IgKillcnJvciBlcnJvckxpc3Q6KE5TQXJyYXkvKjxUZXN0UHJvdG9jb2xEYXRh
YmFzZUVycm9yPiovICopZXJyb3JMaXN0Ci17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0
XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJ
UkVEX1BST1BFUlRZKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7Ci0gICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShidXR0b25zLCBAImJ1dHRvbnMiKTsKLSAgICBU
SFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKG5vdGVzLCBAIm5vdGVzIik7Ci0g
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWSh2YWx1ZXMsIEAidmFsdWVz
Iik7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkLCBA
InBheWxvYWQiKTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKGVy
cm9yLCBAImVycm9yIik7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJU
WShlcnJvckxpc3QsIEAiZXJyb3JMaXN0Iik7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURf
VFlQRV9JTl9BUlJBWShlcnJvckxpc3QsIFtUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGNsYXNz
XSk7Ci0KLSAgICBzZWxmLmNvbHVtbk5hbWVzID0gY29sdW1uTmFtZXM7Ci0gICAgc2VsZi5idXR0
b25zID0gYnV0dG9uczsKLSAgICBzZWxmLmRpcmVjdGlvbmFsaXR5ID0gZGlyZWN0aW9uYWxpdHk7
Ci0gICAgc2VsZi5ub3RlcyA9IG5vdGVzOwotICAgIHNlbGYudGltZXN0YW1wID0gdGltZXN0YW1w
OwotICAgIHNlbGYudmFsdWVzID0gdmFsdWVzOwotICAgIHNlbGYucGF5bG9hZCA9IHBheWxvYWQ7
Ci0gICAgc2VsZi5lcnJvciA9IGVycm9yOwotICAgIHNlbGYuZXJyb3JMaXN0ID0gZXJyb3JMaXN0
OwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpc2V0Q29sdW1uTmFtZXM6KE5TQXJy
YXkvKjxOU1N0cmluZz4qLyAqKWNvbHVtbk5hbWVzCi17Ci0gICAgW3N1cGVyIHNldEpTT05BcnJh
eTp0b0pTT05TdHJpbmdBcnJheShjb2x1bW5OYW1lcykgZm9yS2V5OkAiY29sdW1uTmFtZXMiXTsK
LX0KLQotLSAoTlNBcnJheS8qPE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMKLXsKLSAgICByZXR1
cm4gdG9PYmpDU3RyaW5nQXJyYXkoW3N1cGVyIEpTT05BcnJheUZvcktleTpAImNvbHVtbk5hbWVz
Il0pOwotfQotCi0tICh2b2lkKXNldEJ1dHRvbnM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWJ1
dHRvbnMKLXsKLSAgICBbc3VwZXIgc2V0SlNPTkFycmF5OnRvSlNPTlN0cmluZ0FycmF5KGJ1dHRv
bnMpIGZvcktleTpAImJ1dHRvbnMiXTsKLX0KLQotLSAoTlNBcnJheS8qPE5TU3RyaW5nPiovICop
YnV0dG9ucwotewotICAgIHJldHVybiB0b09iakNTdHJpbmdBcnJheShbc3VwZXIgSlNPTkFycmF5
Rm9yS2V5OkAiYnV0dG9ucyJdKTsKLX0KLQotLSAodm9pZClzZXREaXJlY3Rpb25hbGl0eTooVGVz
dFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSlkaXJlY3Rpb25h
bGl0eQotewotICAgIFtzdXBlciBzZXRTdHJpbmc6dG9Qcm90b2NvbFN0cmluZyhkaXJlY3Rpb25h
bGl0eSkgZm9yS2V5OkAiZGlyZWN0aW9uYWxpdHkiXTsKLX0KLQotLSAoVGVzdFByb3RvY29sRGF0
YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSlkaXJlY3Rpb25hbGl0eQotewotICAg
IHJldHVybiBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJC
dW5kbGVEaXJlY3Rpb25hbGl0eT4oW3N1cGVyIHN0cmluZ0ZvcktleTpAImRpcmVjdGlvbmFsaXR5
Il0pLnZhbHVlKCk7Ci19Ci0KLS0gKHZvaWQpc2V0Tm90ZXM6KE5TU3RyaW5nICopbm90ZXMKLXsK
LSAgICBbc3VwZXIgc2V0U3RyaW5nOm5vdGVzIGZvcktleTpAIm5vdGVzIl07Ci19Ci0KLS0gKE5T
U3RyaW5nICopbm90ZXMKLXsKLSAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAIm5vdGVz
Il07Ci19Ci0KLS0gKHZvaWQpc2V0VGltZXN0YW1wOihkb3VibGUpdGltZXN0YW1wCi17Ci0gICAg
W3N1cGVyIHNldERvdWJsZTp0aW1lc3RhbXAgZm9yS2V5OkAidGltZXN0YW1wIl07Ci19Ci0KLS0g
KGRvdWJsZSl0aW1lc3RhbXAKLXsKLSAgICByZXR1cm4gW3N1cGVyIGRvdWJsZUZvcktleTpAInRp
bWVzdGFtcCJdOwotfQotCi0tICh2b2lkKXNldFZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0
ICopdmFsdWVzCi17Ci0gICAgW3N1cGVyIHNldE9iamVjdDp2YWx1ZXMgZm9yS2V5OkAidmFsdWVz
Il07Ci19Ci0KLS0gKFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcwotewotICAgIFJXSVBy
b3RvY29sSlNPTk9iamVjdCAqb2JqZWN0ID0gW3N1cGVyIG9iamVjdEZvcktleTpAInZhbHVlcyJd
OwotICAgIGlmICghb2JqZWN0KQotICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiBbW1JX
SVByb3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0Oltbc3VwZXIgb2Jq
ZWN0Rm9yS2V5OkAidmFsdWVzIl0gdG9KU09OT2JqZWN0XS5nZXQoKV07Ci19Ci0KLS0gKHZvaWQp
c2V0UGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZAotewotICAgIFtzdXBl
ciBzZXRPYmplY3Q6cGF5bG9hZCBmb3JLZXk6QCJwYXlsb2FkIl07Ci19Ci0KLS0gKFJXSVByb3Rv
Y29sSlNPTk9iamVjdCAqKXBheWxvYWQKLXsKLSAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9i
amVjdCA9IFtzdXBlciBvYmplY3RGb3JLZXk6QCJwYXlsb2FkIl07Ci0gICAgaWYgKCFvYmplY3Qp
Ci0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgcmV0dXJuIFtbUldJUHJvdG9jb2xKU09OT2JqZWN0
IGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6W1tzdXBlciBvYmplY3RGb3JLZXk6QCJwYXlsb2Fk
Il0gdG9KU09OT2JqZWN0XS5nZXQoKV07Ci19Ci0KLS0gKHZvaWQpc2V0RXJyb3I6KFRlc3RQcm90
b2NvbERhdGFiYXNlRXJyb3IgKillcnJvcgotewotICAgIFtzdXBlciBzZXRPYmplY3Q6ZXJyb3Ig
Zm9yS2V5OkAiZXJyb3IiXTsKLX0KLQotLSAoVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKWVy
cm9yCi17Ci0gICAgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvYmplY3QgPSBbc3VwZXIgb2JqZWN0
Rm9yS2V5OkAiZXJyb3IiXTsKLSAgICBpZiAoIW9iamVjdCkKLSAgICAgICAgcmV0dXJuIG5pbDsK
LSAgICByZXR1cm4gW1tUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGFsbG9jXSBpbml0V2l0aEpT
T05PYmplY3Q6W1tzdXBlciBvYmplY3RGb3JLZXk6QCJlcnJvciJdIHRvSlNPTk9iamVjdF0uZ2V0
KCldOwotfQotCi0tICh2b2lkKXNldEVycm9yTGlzdDooTlNBcnJheS8qPFRlc3RQcm90b2NvbERh
dGFiYXNlRXJyb3I+Ki8gKillcnJvckxpc3QKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JB
RF9UWVBFX0lOX0FSUkFZKGVycm9yTGlzdCwgW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgY2xh
c3NdKTsKLSAgICBbc3VwZXIgc2V0SlNPTkFycmF5OnRvSlNPTk9iamVjdEFycmF5KGVycm9yTGlz
dCkgZm9yS2V5OkAiZXJyb3JMaXN0Il07Ci19Ci0KLS0gKE5TQXJyYXkvKjxUZXN0UHJvdG9jb2xE
YXRhYmFzZUVycm9yPiovICopZXJyb3JMaXN0Ci17Ci0gICAgcmV0dXJuIHRvT2JqQ0FycmF5PFRl
c3RQcm90b2NvbERhdGFiYXNlRXJyb3I+KFtzdXBlciBKU09OQXJyYXlGb3JLZXk6QCJlcnJvckxp
c3QiXSk7Ci19Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbERhdGFiYXNl
T2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cwotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2Fk
Ci17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJldHVybiBuaWw7
Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJp
bnRlZ2VyIl0sIEAiaW50ZWdlciIpOwotICAgIHNlbGYuaW50ZWdlciA9IHBheWxvYWRbQCJpbnRl
Z2VyIl07Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxv
YWRbQCJhcnJheSJdLCBAImFycmF5Iik7Ci0gICAgc2VsZi5hcnJheSA9IHBheWxvYWRbQCJhcnJh
eSJdOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2Fk
W0Aic3RyaW5nIl0sIEAic3RyaW5nIik7Ci0gICAgc2VsZi5zdHJpbmcgPSBwYXlsb2FkW0Aic3Ry
aW5nIl07Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxv
YWRbQCJ2YWx1ZSJdLCBAInZhbHVlIik7Ci0gICAgc2VsZi52YWx1ZSA9IHBheWxvYWRbQCJ2YWx1
ZSJdOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2Fk
W0Aib2JqZWN0Il0sIEAib2JqZWN0Iik7Ci0gICAgc2VsZi5vYmplY3QgPSBwYXlsb2FkW0Aib2Jq
ZWN0Il07Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBy
b3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilvYmplY3QKLXsKLSAgICBpZiAo
IShzZWxmID0gW3N1cGVyIGluaXRXaXRoSlNPTk9iamVjdDpbb2JqZWN0IHRvSlNPTk9iamVjdF0u
Z2V0KCldKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0t
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhJbnRlZ2VyOihOU1N0cmluZyAqKWludGVnZXIgYXJyYXk6
KE5TU3RyaW5nICopYXJyYXkgc3RyaW5nOihOU1N0cmluZyAqKXN0cmluZyB2YWx1ZTooTlNTdHJp
bmcgKil2YWx1ZSBvYmplY3Q6KE5TU3RyaW5nICopb2JqZWN0Ci17Ci0gICAgaWYgKCEoc2VsZiA9
IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBUSFJPV19FWENFUFRJ
T05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKGludGVnZXIsIEAiaW50ZWdlciIpOwotICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkoYXJyYXksIEAiYXJyYXkiKTsKLSAgICBU
SFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHN0cmluZywgQCJzdHJpbmciKTsK
LSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHZhbHVlLCBAInZhbHVl
Iik7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShvYmplY3QsIEAi
b2JqZWN0Iik7Ci0KLSAgICBzZWxmLmludGVnZXIgPSBpbnRlZ2VyOwotICAgIHNlbGYuYXJyYXkg
PSBhcnJheTsKLSAgICBzZWxmLnN0cmluZyA9IHN0cmluZzsKLSAgICBzZWxmLnZhbHVlID0gdmFs
dWU7Ci0gICAgc2VsZi5vYmplY3QgPSBvYmplY3Q7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQot
LSAodm9pZClzZXRJbnRlZ2VyOihOU1N0cmluZyAqKWludGVnZXIKLXsKLSAgICBbc3VwZXIgc2V0
U3RyaW5nOmludGVnZXIgZm9yS2V5OkAiaW50ZWdlciJdOwotfQotCi0tIChOU1N0cmluZyAqKWlu
dGVnZXIKLXsKLSAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAImludGVnZXIiXTsKLX0K
LQotLSAodm9pZClzZXRBcnJheTooTlNTdHJpbmcgKilhcnJheQotewotICAgIFtzdXBlciBzZXRT
dHJpbmc6YXJyYXkgZm9yS2V5OkAiYXJyYXkiXTsKLX0KLQotLSAoTlNTdHJpbmcgKilhcnJheQot
ewotICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAiYXJyYXkiXTsKLX0KLQotLSAodm9p
ZClzZXRTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nCi17Ci0gICAgW3N1cGVyIHNldFN0cmluZzpz
dHJpbmcgZm9yS2V5OkAic3RyaW5nIl07Ci19Ci0KLS0gKE5TU3RyaW5nICopc3RyaW5nCi17Ci0g
ICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJzdHJpbmciXTsKLX0KLQotLSAodm9pZClz
ZXRWYWx1ZTooTlNTdHJpbmcgKil2YWx1ZQotewotICAgIFtzdXBlciBzZXRTdHJpbmc6dmFsdWUg
Zm9yS2V5OkAidmFsdWUiXTsKLX0KLQotLSAoTlNTdHJpbmcgKil2YWx1ZQotewotICAgIHJldHVy
biBbc3VwZXIgc3RyaW5nRm9yS2V5OkAidmFsdWUiXTsKLX0KLQotLSAodm9pZClzZXRPYmplY3Q6
KE5TU3RyaW5nICopb2JqZWN0Ci17Ci0gICAgW3N1cGVyIHNldFN0cmluZzpvYmplY3QgZm9yS2V5
OkAib2JqZWN0Il07Ci19Ci0KLS0gKE5TU3RyaW5nICopb2JqZWN0Ci17Ci0gICAgcmV0dXJuIFtz
dXBlciBzdHJpbmdGb3JLZXk6QCJvYmplY3QiXTsKLX0KLQotQGVuZAotCi1AaW1wbGVtZW50YXRp
b24gVGVzdFByb3RvY29sRGF0YWJhc2VEdW1teU9iamVjdAotCi0tIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXls
b2FkCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJldHVybiBu
aWw7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3Rv
Y29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilvYmplY3QKLXsKLSAgICBpZiAoIShz
ZWxmID0gW3N1cGVyIGluaXRXaXRoSlNPTk9iamVjdDpbb2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0
KCldKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi1AZW5k
Ci0KLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGUKLQot
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNT
dHJpbmcgKiwgaWQ+ICopcGF5bG9hZAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0p
KQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJF
RF9QUk9QRVJUWShwYXlsb2FkW0AiZGlyZWN0aW9uYWxpdHkiXSwgQCJkaXJlY3Rpb25hbGl0eSIp
OwotICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25h
bGl0eT4gZGlyZWN0aW9uYWxpdHkgPSBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sVGVz
dFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5PihwYXlsb2FkW0AiZGlyZWN0aW9uYWxpdHki
XSk7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfRU5VTV9WQUxVRShkaXJlY3Rpb25hbGl0
eSwgQCJkaXJlY3Rpb25hbGl0eSIpOwotICAgIHNlbGYuZGlyZWN0aW9uYWxpdHkgPSBkaXJlY3Rp
b25hbGl0eS52YWx1ZSgpOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9Q
RVJUWShwYXlsb2FkW0AiYnV0dG9ucyJdLCBAImJ1dHRvbnMiKTsKLSAgICBzZWxmLmJ1dHRvbnMg
PSBwYXlsb2FkW0AiYnV0dG9ucyJdOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJF
RF9QUk9QRVJUWShwYXlsb2FkW0AiY29sdW1uTmFtZXMiXSwgQCJjb2x1bW5OYW1lcyIpOwotICAg
IHNlbGYuY29sdW1uTmFtZXMgPSBwYXlsb2FkW0AiY29sdW1uTmFtZXMiXTsKLQotICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAIm5vdGVzIl0sIEAibm90
ZXMiKTsKLSAgICBzZWxmLm5vdGVzID0gcGF5bG9hZFtAIm5vdGVzIl07Ci0KLSAgICBUSFJPV19F
WENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJ0aW1lc3RhbXAiXSwgQCJ0
aW1lc3RhbXAiKTsKLSAgICBzZWxmLnRpbWVzdGFtcCA9IFtwYXlsb2FkW0AidGltZXN0YW1wIl0g
ZG91YmxlVmFsdWVdOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJU
WShwYXlsb2FkW0AidmFsdWVzIl0sIEAidmFsdWVzIik7Ci0gICAgc2VsZi52YWx1ZXMgPSBwYXls
b2FkW0AidmFsdWVzIl07Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BF
UlRZKHBheWxvYWRbQCJwYXlsb2FkIl0sIEAicGF5bG9hZCIpOwotICAgIHNlbGYucGF5bG9hZCA9
IHBheWxvYWRbQCJwYXlsb2FkIl07Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVE
X1BST1BFUlRZKHBheWxvYWRbQCJlcnJvciJdLCBAImVycm9yIik7Ci0gICAgc2VsZi5lcnJvciA9
IFtbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxv
YWRbQCJlcnJvciJdXTsKLQotICAgIHJldHVybiBzZWxmOwotfQotLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9iamVjdAotewot
ICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmplY3QgdG9KU09O
T2JqZWN0XS5nZXQoKV0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgcmV0dXJuIHNlbGY7
Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aERpcmVjdGlvbmFsaXR5OihUZXN0UHJvdG9j
b2xUZXN0UGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHkpZGlyZWN0aW9uYWxpdHkgYnV0dG9u
czooTlNBcnJheS8qPE5TU3RyaW5nPiovICopYnV0dG9ucyBjb2x1bW5OYW1lczooTlNBcnJheS8q
PE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMgbm90ZXM6KE5TU3RyaW5nICopbm90ZXMgdGltZXN0
YW1wOihkb3VibGUpdGltZXN0YW1wIHZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopdmFs
dWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQgZXJyb3I6KFRlc3RQ
cm90b2NvbERhdGFiYXNlRXJyb3IgKillcnJvcgotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIg
aW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9S
RVFVSVJFRF9QUk9QRVJUWShidXR0b25zLCBAImJ1dHRvbnMiKTsKLSAgICBUSFJPV19FWENFUFRJ
T05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7Ci0g
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShub3RlcywgQCJub3RlcyIp
OwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkodmFsdWVzLCBAInZh
bHVlcyIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9h
ZCwgQCJwYXlsb2FkIik7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJU
WShlcnJvciwgQCJlcnJvciIpOwotCi0gICAgc2VsZi5kaXJlY3Rpb25hbGl0eSA9IGRpcmVjdGlv
bmFsaXR5OwotICAgIHNlbGYuYnV0dG9ucyA9IGJ1dHRvbnM7Ci0gICAgc2VsZi5jb2x1bW5OYW1l
cyA9IGNvbHVtbk5hbWVzOwotICAgIHNlbGYubm90ZXMgPSBub3RlczsKLSAgICBzZWxmLnRpbWVz
dGFtcCA9IHRpbWVzdGFtcDsKLSAgICBzZWxmLnZhbHVlcyA9IHZhbHVlczsKLSAgICBzZWxmLnBh
eWxvYWQgPSBwYXlsb2FkOwotICAgIHNlbGYuZXJyb3IgPSBlcnJvcjsKLQotICAgIHJldHVybiBz
ZWxmOwotfQotCi0tICh2b2lkKXNldERpcmVjdGlvbmFsaXR5OihUZXN0UHJvdG9jb2xUZXN0UGFy
YW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHkpZGlyZWN0aW9uYWxpdHkKLXsKLSAgICBbc3VwZXIg
c2V0U3RyaW5nOnRvUHJvdG9jb2xTdHJpbmcoZGlyZWN0aW9uYWxpdHkpIGZvcktleTpAImRpcmVj
dGlvbmFsaXR5Il07Ci19Ci0KLS0gKFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJl
Y3Rpb25hbGl0eSlkaXJlY3Rpb25hbGl0eQotewotICAgIHJldHVybiBmcm9tUHJvdG9jb2xTdHJp
bmc8VGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5Pihbc3VwZXIg
c3RyaW5nRm9yS2V5OkAiZGlyZWN0aW9uYWxpdHkiXSkudmFsdWUoKTsKLX0KLQotLSAodm9pZClz
ZXRCdXR0b25zOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilidXR0b25zCi17Ci0gICAgW3N1cGVy
IHNldEpTT05BcnJheTp0b0pTT05TdHJpbmdBcnJheShidXR0b25zKSBmb3JLZXk6QCJidXR0b25z
Il07Ci19Ci0KLS0gKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWJ1dHRvbnMKLXsKLSAgICByZXR1
cm4gdG9PYmpDU3RyaW5nQXJyYXkoW3N1cGVyIEpTT05BcnJheUZvcktleTpAImJ1dHRvbnMiXSk7
Ci19Ci0KLS0gKHZvaWQpc2V0Q29sdW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWNv
bHVtbk5hbWVzCi17Ci0gICAgW3N1cGVyIHNldEpTT05BcnJheTp0b0pTT05TdHJpbmdBcnJheShj
b2x1bW5OYW1lcykgZm9yS2V5OkAiY29sdW1uTmFtZXMiXTsKLX0KLQotLSAoTlNBcnJheS8qPE5T
U3RyaW5nPiovICopY29sdW1uTmFtZXMKLXsKLSAgICByZXR1cm4gdG9PYmpDU3RyaW5nQXJyYXko
W3N1cGVyIEpTT05BcnJheUZvcktleTpAImNvbHVtbk5hbWVzIl0pOwotfQotCi0tICh2b2lkKXNl
dE5vdGVzOihOU1N0cmluZyAqKW5vdGVzCi17Ci0gICAgW3N1cGVyIHNldFN0cmluZzpub3RlcyBm
b3JLZXk6QCJub3RlcyJdOwotfQotCi0tIChOU1N0cmluZyAqKW5vdGVzCi17Ci0gICAgcmV0dXJu
IFtzdXBlciBzdHJpbmdGb3JLZXk6QCJub3RlcyJdOwotfQotCi0tICh2b2lkKXNldFRpbWVzdGFt
cDooZG91YmxlKXRpbWVzdGFtcAotewotICAgIFtzdXBlciBzZXREb3VibGU6dGltZXN0YW1wIGZv
cktleTpAInRpbWVzdGFtcCJdOwotfQotCi0tIChkb3VibGUpdGltZXN0YW1wCi17Ci0gICAgcmV0
dXJuIFtzdXBlciBkb3VibGVGb3JLZXk6QCJ0aW1lc3RhbXAiXTsKLX0KLQotLSAodm9pZClzZXRW
YWx1ZXM6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcwotewotICAgIFtzdXBlciBzZXRP
YmplY3Q6dmFsdWVzIGZvcktleTpAInZhbHVlcyJdOwotfQotCi0tIChSV0lQcm90b2NvbEpTT05P
YmplY3QgKil2YWx1ZXMKLXsKLSAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9iamVjdCA9IFtz
dXBlciBvYmplY3RGb3JLZXk6QCJ2YWx1ZXMiXTsKLSAgICBpZiAoIW9iamVjdCkKLSAgICAgICAg
cmV0dXJuIG5pbDsKLSAgICByZXR1cm4gW1tSV0lQcm90b2NvbEpTT05PYmplY3QgYWxsb2NdIGlu
aXRXaXRoSlNPTk9iamVjdDpbW3N1cGVyIG9iamVjdEZvcktleTpAInZhbHVlcyJdIHRvSlNPTk9i
amVjdF0uZ2V0KCldOwotfQotCi0tICh2b2lkKXNldFBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9i
amVjdCAqKXBheWxvYWQKLXsKLSAgICBbc3VwZXIgc2V0T2JqZWN0OnBheWxvYWQgZm9yS2V5OkAi
cGF5bG9hZCJdOwotfQotCi0tIChSV0lQcm90b2NvbEpTT05PYmplY3QgKilwYXlsb2FkCi17Ci0g
ICAgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvYmplY3QgPSBbc3VwZXIgb2JqZWN0Rm9yS2V5OkAi
cGF5bG9hZCJdOwotICAgIGlmICghb2JqZWN0KQotICAgICAgICByZXR1cm4gbmlsOwotICAgIHJl
dHVybiBbW1JXSVByb3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0Oltb
c3VwZXIgb2JqZWN0Rm9yS2V5OkAicGF5bG9hZCJdIHRvSlNPTk9iamVjdF0uZ2V0KCldOwotfQot
Ci0tICh2b2lkKXNldEVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICopZXJyb3IKLXsK
LSAgICBbc3VwZXIgc2V0T2JqZWN0OmVycm9yIGZvcktleTpAImVycm9yIl07Ci19Ci0KLS0gKFRl
c3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKillcnJvcgotewotICAgIFJXSVByb3RvY29sSlNPTk9i
amVjdCAqb2JqZWN0ID0gW3N1cGVyIG9iamVjdEZvcktleTpAImVycm9yIl07Ci0gICAgaWYgKCFv
YmplY3QpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgcmV0dXJuIFtbVGVzdFByb3RvY29sRGF0
YWJhc2VFcnJvciBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0Oltbc3VwZXIgb2JqZWN0Rm9yS2V5
OkAiZXJyb3IiXSB0b0pTT05PYmplY3RdLmdldCgpXTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtcmVxdWly
aW5nLXJ1bnRpbWUtY2FzdHMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC90eXBlLXJlcXVpcmluZy1ydW50
aW1lLWNhc3RzLmpzb24tcmVzdWx0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlODRk
YWNkY2FmNzk4MTgyNjM2NzkxM2U4ZGQwZjk2ODQ0MmQxZGUyLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUt
Y2FzdHMuanNvbi1yZXN1bHQKKysrIC9kZXYvbnVsbApAQCAtMSwxNjQ5ICswLDAgQEAKLSMjIyBC
ZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotLy8gVGVzdAotSW5zcGVjdG9y
QmFja2VuZC5yZWdpc3RlckRvbWFpbigiVGVzdCIsIG51bGwpOwotSW5zcGVjdG9yQmFja2VuZC5y
ZWdpc3RlckVudW0oIlRlc3QuVW5jYXN0ZWRBbmltYWxzIiwge1BpZ3M6ICJQaWdzIiwgQ293czog
IkNvd3MiLCBDYXRzOiAiQ2F0cyIsIEhlbnM6ICJIZW5zIn0pOwotSW5zcGVjdG9yQmFja2VuZC5y
ZWdpc3RlckVudW0oIlRlc3QuQ2FzdGVkQW5pbWFscyIsIHtEdWNrczogIkR1Y2tzIiwgSGVuczog
IkhlbnMiLCBDcm93czogIkNyb3dzIiwgRmxhbWluZ29zOiAiRmxhbWluZ29zIn0pOwotSW5zcGVj
dG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiVGVzdCIsIG51bGwpOwotIyMjIEVuZCBGaWxlOiBJ
bnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5h
dGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMu
aCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5o
PgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0K
LW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hl
ciB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2Vu
ZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92
ZShkaXNwYXRjaGVyKTsgfQotICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hl
cigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KLXByaXZhdGU6
Ci0gICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwotfTsK
LQotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3Bh
dGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmlu
Zy1ydW50aW1lLWNhc3RzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgi
Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7
Ci0KLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1
ZXMuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKLSNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jZW5kaWYK
LQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
LQotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUg
IlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQot
Y2xhc3MgRnJvbnRlbmRSb3V0ZXI7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVu
ZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRl
c3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQot
bmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMg
RW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sT2JqZWN0cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
dHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25z
Lmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotbmFtZXNwYWNlIFByb3RvY29sIHsK
LQotCi0KLS8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgotbmFtZXNwYWNlIFRlc3QgewotY2xhc3Mg
VHlwZU5lZWRpbmdDYXN0OwotY2xhc3MgUmVjdXJzaXZlT2JqZWN0MTsKLWNsYXNzIFJlY3Vyc2l2
ZU9iamVjdDI7Ci1lbnVtIGNsYXNzIFVuY2FzdGVkQW5pbWFsczsKLWVudW0gY2xhc3MgQ2FzdGVk
QW5pbWFsczsKLX0gLy8gVGVzdAotLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgotCi0K
LS8vIFR5cGVkZWZzLgotbmFtZXNwYWNlIFRlc3QgewotdHlwZWRlZiBpbnQgQ2FzdGVkT2JqZWN0
SWQ7Ci10eXBlZGVmIGludCBVbmNhc3RlZE9iamVjdElkOwotfSAvLyBUZXN0Ci0vLyBFbmQgb2Yg
dHlwZWRlZnMuCi0KLW5hbWVzcGFjZSBUZXN0SGVscGVycyB7Ci0KLVN0cmluZyBnZXRFbnVtQ29u
c3RhbnRWYWx1ZShpbnQgY29kZSk7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRF
bnVtQ29uc3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkKLXsKLSAgICByZXR1cm4gZ2V0RW51bUNvbnN0
YW50VmFsdWUoc3RhdGljX2Nhc3Q8aW50PihlbnVtVmFsdWUpKTsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgVGVzdEhlbHBlcnMKLQotbmFtZXNwYWNlIFRlc3QgewotLyogQSBkdW1teSB0eXBlIHRoYXQg
cmVxdWlyZXMgcnVudGltZSBjYXN0cywgYW5kIGZvcmNlcyBub24tcHJpbWl0aXZlIHJlZmVyZW5j
ZWQgdHlwZXMgdG8gYWxzbyBlbWl0IHJ1bnRpbWUgY2FzdCBoZWxwZXJzLiAqLwotY2xhc3MgVHlw
ZU5lZWRpbmdDYXN0IDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewotcHVibGljOgotICAgIGVu
dW0gewotICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCi0gICAgICAgIFN0cmluZ1NldCA9IDEgPDwg
MCwKLSAgICAgICAgTnVtYmVyU2V0ID0gMSA8PCAxLAotICAgICAgICBBbmltYWxzU2V0ID0gMSA8
PCAyLAotICAgICAgICBJZFNldCA9IDEgPDwgMywKLSAgICAgICAgVHJlZVNldCA9IDEgPDwgNCwK
LSAgICAgICAgQWxsRmllbGRzU2V0ID0gKFN0cmluZ1NldCB8IE51bWJlclNldCB8IEFuaW1hbHNT
ZXQgfCBJZFNldCB8IFRyZWVTZXQpCi0gICAgfTsKLQotICAgIHRlbXBsYXRlPGludCBTVEFURT4K
LSAgICBjbGFzcyBCdWlsZGVyIHsKLSAgICBwcml2YXRlOgotICAgICAgICBSZWZQdHI8SlNPTjo6
T2JqZWN0PiBtX3Jlc3VsdDsKLQotICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxT
VEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
KnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7Ci0gICAgICAg
IH0KLQotICAgICAgICBCdWlsZGVyKFJlZjwvKlR5cGVOZWVkaW5nQ2FzdCovSlNPTjo6T2JqZWN0
PiYmIG9iamVjdCkKLSAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwg
YnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKLSAgICAgICAgfQotICAgICAgICBm
cmllbmQgY2xhc3MgVHlwZU5lZWRpbmdDYXN0OwotICAgIHB1YmxpYzoKLQotICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgU3RyaW5nU2V0PiYgc2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTdHJpbmdTZXQp
LCBwcm9wZXJ0eV9zdHJpbmdfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dFN0cmluZygic3RyaW5nIl9zLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PFN0cmluZ1NldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBOdW1i
ZXJTZXQ+JiBzZXROdW1iZXIoaW50IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVCghKFNUQVRFICYgTnVtYmVyU2V0KSwgcHJvcGVydHlfbnVtYmVyX2FscmVhZHlf
c2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2VyKCJudW1iZXIiX3MsIHZhbHVl
KTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TnVtYmVyU2V0PigpOwotICAgICAgICB9
Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IEFuaW1hbHNTZXQ+JiBzZXRBbmltYWxzKEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHMgdmFsdWUpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBBbmltYWxzU2V0KSwgcHJvcGVydHlf
YW5pbWFsc19hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJh
bmltYWxzIl9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0
YW50VmFsdWUodmFsdWUpKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8QW5pbWFsc1Nl
dD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBJZFNldD4mIHNldElk
KGludCB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIElkU2V0KSwgcHJvcGVydHlfaWRfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1
bHQtPnNldEludGVnZXIoImlkIl9zLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0
YXRlPElkU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IFRyZWVT
ZXQ+JiBzZXRUcmVlKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVP
YmplY3QxPiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIFRyZWVTZXQpLCBwcm9wZXJ0eV90cmVlX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXRPYmplY3QoInRyZWUiX3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVy
biBjYXN0U3RhdGU8VHJlZVNldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIFJlZjxUeXBlTmVl
ZGluZ0Nhc3Q+IHJlbGVhc2UoKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VS
VChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwotICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFR5cGVOZWVkaW5nQ2FzdCkgPT0gc2l6ZW9mKEpTT046
Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsKLQotICAgICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4g
anNvblJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7Ci0gICAgICAgICAgICBhdXRv
IHJlc3VsdCA9IFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPFR5cGVOZWVkaW5nQ2FzdD4q
PigmanNvblJlc3VsdCkpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQot
ICAgIH07Ci0KLSAgICAvKgotICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKLSAgICAgKiBS
ZWY8VHlwZU5lZWRpbmdDYXN0PiByZXN1bHQgPSBUeXBlTmVlZGluZ0Nhc3Q6OmNyZWF0ZSgpCi0g
ICAgICogICAgIC5zZXRTdHJpbmcoLi4uKQotICAgICAqICAgICAuc2V0TnVtYmVyKC4uLikKLSAg
ICAgKiAgICAgLnNldEFuaW1hbHMoLi4uKQotICAgICAqICAgICAuc2V0SWQoLi4uKQotICAgICAq
ICAgICAuc2V0VHJlZSguLi4pCi0gICAgICogICAgIC5yZWxlYXNlKCk7Ci0gICAgICovCi0gICAg
c3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1
cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7Ci0gICAgfQot
fTsKLQotLyogICovCi1lbnVtIGNsYXNzIFVuY2FzdGVkQW5pbWFscyB7Ci0gICAgUGlncyA9IDQs
Ci0gICAgQ293cyA9IDUsCi0gICAgQ2F0cyA9IDYsCi0gICAgSGVucyA9IDEsCi19OyAvLyBlbnVt
IGNsYXNzIFVuY2FzdGVkQW5pbWFscwotLyogICovCi1lbnVtIGNsYXNzIENhc3RlZEFuaW1hbHMg
ewotICAgIER1Y2tzID0gMCwKLSAgICBIZW5zID0gMSwKLSAgICBDcm93cyA9IDIsCi0gICAgRmxh
bWluZ29zID0gMywKLX07IC8vIGVudW0gY2xhc3MgQ2FzdGVkQW5pbWFscwotY2xhc3MgUmVjdXJz
aXZlT2JqZWN0MSA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKLXB1YmxpYzoKLSAgICBlbnVt
IHsKLSAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAotICAgICAgICBBbGxGaWVsZHNTZXQgPSAwCi0g
ICAgfTsKLQotICAgIHRlbXBsYXRlPGludCBTVEFURT4KLSAgICBjbGFzcyBCdWlsZGVyIHsKLSAg
ICBwcml2YXRlOgotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBtX3Jlc3VsdDsKLQotICAg
ICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUo
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRl
cjxTVEFURSB8IFNURVA+Kj4odGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyKFJl
ZjwvKlJlY3Vyc2l2ZU9iamVjdDEqL0pTT046Ok9iamVjdD4mJiBvYmplY3QpCi0gICAgICAgICAg
ICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25f
aW5pdF9zdGF0ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZnJpZW5kIGNsYXNzIFJlY3Vyc2l2ZU9i
amVjdDE7Ci0gICAgcHVibGljOgotCi0gICAgICAgIFJlZjxSZWN1cnNpdmVPYmplY3QxPiByZWxl
YXNlKCkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxs
RmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKLSAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKHNpemVvZihSZWN1cnNpdmVPYmplY3QxKSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0KSwgY2Fu
bm90X2Nhc3QpOwotCi0gICAgICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uUmVzdWx0ID0g
bV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKLSAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gV1RG
TW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8UmVjdXJzaXZlT2JqZWN0MT4qPigmanNvblJlc3Vs
dCkpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgIH07Ci0KLSAg
ICAvKgotICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKLSAgICAgKiBSZWY8UmVjdXJzaXZl
T2JqZWN0MT4gcmVzdWx0ID0gUmVjdXJzaXZlT2JqZWN0MTo6Y3JlYXRlKCkKLSAgICAgKiAgICAg
LnJlbGVhc2UoKTsKLSAgICAgKi8KLSAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3Jl
YXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpKTsKLSAgICB9Ci0KLSAgICB2b2lkIHNldE9iaihSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0Mj4gdmFsdWUpCi0gICAgewotICAg
ICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRPYmplY3QoIm9iaiJfcywgV1RGTW92ZSh2YWx1ZSkp
OwotICAgIH0KLX07Ci0KLWNsYXNzIFJlY3Vyc2l2ZU9iamVjdDIgOiBwdWJsaWMgSlNPTjo6T2Jq
ZWN0QmFzZSB7Ci1wdWJsaWM6Ci0gICAgZW51bSB7Ci0gICAgICAgIE5vRmllbGRzU2V0ID0gMCwK
LSAgICAgICAgQWxsRmllbGRzU2V0ID0gMAotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTxpbnQgU1RB
VEU+Ci0gICAgY2xhc3MgQnVpbGRlciB7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPEpT
T046Ok9iamVjdD4gbV9yZXN1bHQ7Ci0KLSAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxk
ZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcihSZWY8LypSZWN1cnNpdmVPYmplY3QyKi9KU09OOjpP
YmplY3Q+JiYgb2JqZWN0KQotICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRz
U2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwotICAgICAgICB9Ci0gICAg
ICAgIGZyaWVuZCBjbGFzcyBSZWN1cnNpdmVPYmplY3QyOwotICAgIHB1YmxpYzoKLQotICAgICAg
ICBSZWY8UmVjdXJzaXZlT2JqZWN0Mj4gcmVsZWFzZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFk
eSk7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoUmVjdXJzaXZlT2JqZWN0Mikg
PT0gc2l6ZW9mKEpTT046Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsKLQotICAgICAgICAgICAgUmVm
PEpTT046Ok9iamVjdD4ganNvblJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7Ci0g
ICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPFJl
Y3Vyc2l2ZU9iamVjdDI+Kj4oJmpzb25SZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVybiByZXN1
bHQ7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgLyoKLSAgICAgKiBTeW50aGV0aWMgY29uc3Ry
dWN0b3I6Ci0gICAgICogUmVmPFJlY3Vyc2l2ZU9iamVjdDI+IHJlc3VsdCA9IFJlY3Vyc2l2ZU9i
amVjdDI6OmNyZWF0ZSgpCi0gICAgICogICAgIC5yZWxlYXNlKCk7Ci0gICAgICovCi0gICAgc3Rh
dGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4g
QnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7Ci0gICAgfQotCi0g
ICAgdm9pZCBzZXRPYmooUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2
ZU9iamVjdDE+IHZhbHVlKQotICAgIHsKLSAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0T2Jq
ZWN0KCJvYmoiX3MsIFdURk1vdmUodmFsdWUpKTsKLSAgICB9Ci19OwotCi19IC8vIFRlc3QKLQot
dGVtcGxhdGU8PiBzdHJ1Y3QgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0
OjpDYXN0ZWRBbmltYWxzPiB7Ci1zdGF0aWMgdm9pZCBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlw
ZShKU09OOjpWYWx1ZSopOwotfTsKLXRlbXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8SW5z
cGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0PiB7Ci1zdGF0aWMgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD4gcnVudGltZUNhc3Qo
UmVmUHRyPEpTT046OlZhbHVlPiYmIHZhbHVlKTsKLXN0YXRpYyB2b2lkIGFzc2VydFZhbHVlSGFz
RXhwZWN0ZWRUeXBlKEpTT046OlZhbHVlKik7Ci19OwotdGVtcGxhdGU8PiBzdHJ1Y3QgQmluZGlu
Z1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QxPiB7Ci1z
dGF0aWMgdm9pZCBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShKU09OOjpWYWx1ZSopOwotfTsK
LXRlbXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVz
dDo6UmVjdXJzaXZlT2JqZWN0Mj4gewotc3RhdGljIHZvaWQgYXNzZXJ0VmFsdWVIYXNFeHBlY3Rl
ZFR5cGUoSlNPTjo6VmFsdWUqKTsKLX07Ci0KLW5hbWVzcGFjZSBUZXN0SGVscGVycyB7Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIFByb3RvY29sRW51bVR5cGU+Ci1PcHRpb25hbDxQcm90b2NvbEVudW1U
eXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJik7Ci0KLS8vIEVudW1z
IGluIHRoZSAnVGVzdCcgRG9tYWluCi10ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlBy
b3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJ
bnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM+KGNvbnN0IFN0cmluZyYp
OwotdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVk
QW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRl
c3Q6OkNhc3RlZEFuaW1hbHM+KGNvbnN0IFN0cmluZyYpOwotCi19IC8vIG5hbWVzcGFjZSBUZXN0
SGVscGVycwotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKLQotbmFtZXNwYWNlIFdURiB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBE
ZWZhdWx0SGFzaDsKLQotLy8gSGFzaCBkZWNsYXJhdGlvbnMgaW4gdGhlICdUZXN0JyBEb21haW4K
LXRlbXBsYXRlPD4KLXN0cnVjdCBEZWZhdWx0SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0
OjpVbmNhc3RlZEFuaW1hbHM+IHsKLSAgICB0eXBlZGVmIEludEhhc2g8SW5zcGVjdG9yOjpQcm90
b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzPiBIYXNoOwotfTsKLXRlbXBsYXRlPD4KLXN0cnVj
dCBEZWZhdWx0SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPiB7
Ci0gICAgdHlwZWRlZiBJbnRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFu
aW1hbHM+IEhhc2g7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXVEYKLSMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sT2JqZWN0cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3Rz
LmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1
bnRpbWUtY2FzdHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5o
IgotCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQot
bmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1f
Y29uc3RhbnRfdmFsdWVzW10gPSB7Ci0gICAgIkR1Y2tzIiwKLSAgICAiSGVucyIsCi0gICAgIkNy
b3dzIiwKLSAgICAiRmxhbWluZ29zIiwKLSAgICAiUGlncyIsCi0gICAgIkNvd3MiLAotICAgICJD
YXRzIiwKLX07Ci0KLVN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgewotICAg
IHJldHVybiBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb2RlXTsKLX0KLQotLy8gRW51bXMgaW4gdGhl
ICdUZXN0JyBEb21haW4KLXRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlRlc3Q6OlVuY2FzdGVkQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFscz4oY29uc3QgU3RyaW5nJiBwcm90b2Nv
bFN0cmluZykKLXsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7
Ci0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmlt
YWxzOjpQaWdzLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlVu
Y2FzdGVkQW5pbWFsczo6Q293cywKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29s
OjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM6OkNhdHMsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9y
OjpQcm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzOjpIZW5zLAotICAgIH07Ci0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCA0OyArK2kpCi0gICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9
PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCi0gICAgICAgICAgICBy
ZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFscyljb25zdGFu
dFZhbHVlc1tpXTsKLQotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLXRlbXBsYXRlPD4K
LU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+IHBhcnNl
RW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmlt
YWxzPihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQotewotICAgIHN0YXRpYyBjb25zdCBz
aXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlBy
b3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzOjpEdWNrcywKLSAgICAgICAgKHNpemVfdClJbnNw
ZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzOjpIZW5zLAotICAgICAgICAoc2l6
ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM6OkNyb3dzLAotICAg
ICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM6OkZs
YW1pbmdvcywKLSAgICB9OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgNDsgKytpKQotICAg
ICAgICBpZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRW
YWx1ZXNbaV1dKQotICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0
OjpDYXN0ZWRBbmltYWxzKWNvbnN0YW50VmFsdWVzW2ldOwotCi0gICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKLX0KLQotCi19IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwotCi0KLQotdm9pZCBCaW5k
aW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+Ojphc3Nl
cnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShKU09OOjpWYWx1ZSogdmFsdWUpCi17Ci0jaWYgQVNTRVJU
X0VOQUJMRUQKLSAgICBBU1NFUlRfQVJHKHZhbHVlLCB2YWx1ZSk7Ci0gICAgU3RyaW5nIHJlc3Vs
dDsKLSAgICBib29sIGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNTdHJpbmcocmVzdWx0KTsKLSAg
ICBBU1NFUlQoY2FzdFN1Y2NlZWRlZCk7Ci0gICAgQVNTRVJUKHJlc3VsdCA9PSAiRHVja3MiIHx8
IHJlc3VsdCA9PSAiSGVucyIgfHwgcmVzdWx0ID09ICJDcm93cyIgfHwgcmVzdWx0ID09ICJGbGFt
aW5nb3MiKTsKLSNlbHNlIC8vIEFTU0VSVF9FTkFCTEVECi0gICAgVU5VU0VEX1BBUkFNKHZhbHVl
KTsKLSNlbmRpZiAvLyBBU1NFUlRfRU5BQkxFRAotfQotCi12b2lkIEJpbmRpbmdUcmFpdHM8SW5z
cGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0Pjo6YXNzZXJ0VmFsdWVIYXNF
eHBlY3RlZFR5cGUoSlNPTjo6VmFsdWUqIHZhbHVlKQotewotI2lmIEFTU0VSVF9FTkFCTEVECi0g
ICAgQVNTRVJUX0FSRyh2YWx1ZSwgdmFsdWUpOwotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG9i
amVjdDsKLSAgICBib29sIGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNPYmplY3Qob2JqZWN0KTsK
LSAgICBBU1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQpOwotICAgIHsK
LSAgICAgICAgYXV0byBzdHJpbmdQb3MgPSBvYmplY3QtPmZpbmQoInN0cmluZyJfcyk7Ci0gICAg
ICAgIEFTU0VSVChzdHJpbmdQb3MgIT0gb2JqZWN0LT5lbmQoKSk7Ci0gICAgICAgIEJpbmRpbmdU
cmFpdHM8U3RyaW5nPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoc3RyaW5nUG9zLT52YWx1
ZS5nZXQoKSk7Ci0gICAgfQotICAgIHsKLSAgICAgICAgYXV0byBudW1iZXJQb3MgPSBvYmplY3Qt
PmZpbmQoIm51bWJlciJfcyk7Ci0gICAgICAgIEFTU0VSVChudW1iZXJQb3MgIT0gb2JqZWN0LT5l
bmQoKSk7Ci0gICAgICAgIEJpbmRpbmdUcmFpdHM8aW50Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3Rl
ZFR5cGUobnVtYmVyUG9zLT52YWx1ZS5nZXQoKSk7Ci0gICAgfQotICAgIHsKLSAgICAgICAgYXV0
byBhbmltYWxzUG9zID0gb2JqZWN0LT5maW5kKCJhbmltYWxzIl9zKTsKLSAgICAgICAgQVNTRVJU
KGFuaW1hbHNQb3MgIT0gb2JqZWN0LT5lbmQoKSk7Ci0gICAgICAgIEJpbmRpbmdUcmFpdHM8SW5z
cGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz46OmFzc2VydFZhbHVlSGFzRXhw
ZWN0ZWRUeXBlKGFuaW1hbHNQb3MtPnZhbHVlLmdldCgpKTsKLSAgICB9Ci0gICAgewotICAgICAg
ICBhdXRvIGlkUG9zID0gb2JqZWN0LT5maW5kKCJpZCJfcyk7Ci0gICAgICAgIEFTU0VSVChpZFBv
cyAhPSBvYmplY3QtPmVuZCgpKTsKLSAgICAgICAgQmluZGluZ1RyYWl0czxpbnQ+Ojphc3NlcnRW
YWx1ZUhhc0V4cGVjdGVkVHlwZShpZFBvcy0+dmFsdWUuZ2V0KCkpOwotICAgIH0KLSAgICB7Ci0g
ICAgICAgIGF1dG8gdHJlZVBvcyA9IG9iamVjdC0+ZmluZCgidHJlZSJfcyk7Ci0gICAgICAgIEFT
U0VSVCh0cmVlUG9zICE9IG9iamVjdC0+ZW5kKCkpOwotICAgICAgICBCaW5kaW5nVHJhaXRzPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+Ojphc3NlcnRWYWx1ZUhh
c0V4cGVjdGVkVHlwZSh0cmVlUG9zLT52YWx1ZS5nZXQoKSk7Ci0gICAgfQotCi0gICAgaW50IGZv
dW5kUHJvcGVydGllc0NvdW50ID0gNTsKLSAgICBpZiAoZm91bmRQcm9wZXJ0aWVzQ291bnQgIT0g
b2JqZWN0LT5zaXplKCkpCi0gICAgICAgIEZBVEFMKCJVbmV4cGVjdGVkIHByb3BlcnRpZXMgaW4g
b2JqZWN0OiAlc1xuIiwgb2JqZWN0LT50b0pTT05TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7Ci0j
ZWxzZSAvLyBBU1NFUlRfRU5BQkxFRAotICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7Ci0jZW5kaWYg
Ly8gQVNTRVJUX0VOQUJMRUQKLX0KLQotUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6
OlR5cGVOZWVkaW5nQ2FzdD4gQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0
OjpUeXBlTmVlZGluZ0Nhc3Q+OjpydW50aW1lQ2FzdChSZWZQdHI8SlNPTjo6VmFsdWU+JiYgdmFs
dWUpCi17Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcmVzdWx0OwotICAgIGJvb2wgY2FzdFN1
Y2NlZWRlZCA9IHZhbHVlLT5hc09iamVjdChyZXN1bHQpOwotICAgIEFTU0VSVF9VTlVTRUQoY2Fz
dFN1Y2NlZWRlZCwgY2FzdFN1Y2NlZWRlZCk7Ci0gICAgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6
OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVk
VHlwZShyZXN1bHQuZ2V0KCkpOwotICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihJbnNwZWN0b3I6
OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3QpID09IHNpemVvZihKU09OOjpPYmplY3RC
YXNlKSwgdHlwZV9jYXN0X3Byb2JsZW0pOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxJbnNwZWN0
b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3QqPihzdGF0aWNfY2FzdDxKU09OOjpP
YmplY3RCYXNlKj4ocmVzdWx0LmdldCgpKSk7Ci19Ci0KLQotdm9pZCBCaW5kaW5nVHJhaXRzPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+Ojphc3NlcnRWYWx1ZUhh
c0V4cGVjdGVkVHlwZShKU09OOjpWYWx1ZSogdmFsdWUpCi17Ci0jaWYgQVNTRVJUX0VOQUJMRUQK
LSAgICBBU1NFUlRfQVJHKHZhbHVlLCB2YWx1ZSk7Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4g
b2JqZWN0OwotICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9IHZhbHVlLT5hc09iamVjdChvYmplY3Qp
OwotICAgIEFTU0VSVF9VTlVTRUQoY2FzdFN1Y2NlZWRlZCwgY2FzdFN1Y2NlZWRlZCk7Ci0KLSAg
ICBpbnQgZm91bmRQcm9wZXJ0aWVzQ291bnQgPSAwOwotICAgIHsKLSAgICAgICAgYXV0byBvYmpQ
b3MgPSBvYmplY3QtPmZpbmQoIm9iaiJfcyk7Ci0gICAgICAgIGlmIChvYmpQb3MgIT0gb2JqZWN0
LT5lbmQoKSkgewotICAgICAgICAgICAgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29s
OjpUZXN0OjpSZWN1cnNpdmVPYmplY3QyPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUob2Jq
UG9zLT52YWx1ZS5nZXQoKSk7Ci0gICAgICAgICAgICArK2ZvdW5kUHJvcGVydGllc0NvdW50Owot
ICAgICAgICB9Ci0gICAgfQotICAgIGlmIChmb3VuZFByb3BlcnRpZXNDb3VudCAhPSBvYmplY3Qt
PnNpemUoKSkKLSAgICAgICAgRkFUQUwoIlVuZXhwZWN0ZWQgcHJvcGVydGllcyBpbiBvYmplY3Q6
ICVzXG4iLCBvYmplY3QtPnRvSlNPTlN0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKLSNlbHNlIC8v
IEFTU0VSVF9FTkFCTEVECi0gICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKLSNlbmRpZiAvLyBBU1NF
UlRfRU5BQkxFRAotfQotCi12b2lkIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6
VGVzdDo6UmVjdXJzaXZlT2JqZWN0Mj46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEpTT046
OlZhbHVlKiB2YWx1ZSkKLXsKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIEFTU0VSVF9BUkcodmFs
dWUsIHZhbHVlKTsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBvYmplY3Q7Ci0gICAgYm9vbCBj
YXN0U3VjY2VlZGVkID0gdmFsdWUtPmFzT2JqZWN0KG9iamVjdCk7Ci0gICAgQVNTRVJUX1VOVVNF
RChjYXN0U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsKLQotICAgIGludCBmb3VuZFByb3BlcnRp
ZXNDb3VudCA9IDA7Ci0gICAgewotICAgICAgICBhdXRvIG9ialBvcyA9IG9iamVjdC0+ZmluZCgi
b2JqIl9zKTsKLSAgICAgICAgaWYgKG9ialBvcyAhPSBvYmplY3QtPmVuZCgpKSB7Ci0gICAgICAg
ICAgICBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9i
amVjdDE+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShvYmpQb3MtPnZhbHVlLmdldCgpKTsK
LSAgICAgICAgICAgICsrZm91bmRQcm9wZXJ0aWVzQ291bnQ7Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgaWYgKGZvdW5kUHJvcGVydGllc0NvdW50ICE9IG9iamVjdC0+c2l6ZSgpKQotICAgICAgICBG
QVRBTCgiVW5leHBlY3RlZCBwcm9wZXJ0aWVzIGluIG9iamVjdDogJXNcbiIsIG9iamVjdC0+dG9K
U09OU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOwotI2Vsc2UgLy8gQVNTRVJUX0VOQUJMRUQKLSAg
ICBVTlVTRURfUEFSQU0odmFsdWUpOwotI2VuZGlmIC8vIEFTU0VSVF9FTkFCTEVECi19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFp
blB0ci5oPgotCi0KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJz
LmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUt
Y2FzdHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0j
aW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVy
cy5oIgotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgot
Ci1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9y
L1Rlc3RQcm90b2NvbC5oPgotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIp
KSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0Ci1AZW5k
Ci0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3Rv
Y29sQ29uZmlndXJhdGlvbi5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgot
I2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgotI2ltcG9ydCA8SmF2YVNj
cmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgotCi11c2lu
ZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29u
ZmlndXJhdGlvbgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRy
b2xsZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRh
YmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIg
aW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChj
b250cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNl
bGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQot
QGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJU
ZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMuaCIKLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJ
bnNwZWN0b3I7Ci0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJz
Lm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxGb3VuZGF0aW9u
L0ZvdW5kYXRpb24uaD4KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9i
amVjdC5oPgotCi0KLUBjbGFzcyBUZXN0UHJvdG9jb2xUZXN0VHlwZU5lZWRpbmdDYXN0OwotQGNs
YXNzIFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxOwotQGNsYXNzIFRlc3RQcm90b2Nv
bFRlc3RSZWN1cnNpdmVPYmplY3QyOwotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0
UHJvdG9jb2xQbGF0Zm9ybSkgewotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsLAotICAgIFRl
c3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUywK
LSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TLAotfTsKLQotCi10eXBlZGVmIE5TX0VOVU0o
TlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzKSB7Ci0gICAgVGVzdFBy
b3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc1BpZ3MsCi0gICAgVGVzdFByb3RvY29sVGVzdFVuY2Fz
dGVkQW5pbWFsc0Nvd3MsCi0gICAgVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc0NhdHMs
Ci0gICAgVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc0hlbnMsCi19OwotCi10eXBlZGVm
IE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFscykgewotICAg
IFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzRHVja3MsCi0gICAgVGVzdFByb3RvY29sVGVz
dENhc3RlZEFuaW1hbHNIZW5zLAotICAgIFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzQ3Jv
d3MsCi0gICAgVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHNGbGFtaW5nb3MsCi19OwotCi0K
LV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0
UHJvdG9jb2xUZXN0VHlwZU5lZWRpbmdDYXN0IDogUldJUHJvdG9jb2xKU09OT2JqZWN0Ci0tIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+
ICopcGF5bG9hZDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQ
cm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
U3RyaW5nOihOU1N0cmluZyAqKXN0cmluZyBudW1iZXI6KGludCludW1iZXIgYW5pbWFsczooVGVz
dFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHMpYW5pbWFscyBpZGVudGlmaWVyOihpbnQpaWRlbnRp
ZmllciB0cmVlOihUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSAqKXRyZWU7Ci0vKiBy
ZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKnN0cmluZzsK
LS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCBudW1iZXI7
Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBUZXN0UHJvdG9j
b2xUZXN0Q2FzdGVkQW5pbWFscyBhbmltYWxzOwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChu
b25hdG9taWMsIGFzc2lnbikgaW50IGlkZW50aWZpZXI7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVy
dHkgKG5vbmF0b21pYywgcmV0YWluKSBUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSAq
dHJlZTsKLUBlbmQKLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1A
aW50ZXJmYWNlIFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxIDogUldJUHJvdG9jb2xK
U09OT2JqZWN0Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8
TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3Rv
Y29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OwotLyogb3B0aW9u
YWwgKi8gQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgVGVzdFByb3RvY29sVGVzdFJlY3Vy
c2l2ZU9iamVjdDIgKm9iajsKLUBlbmQKLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRl
ZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QyIDog
UldJUHJvdG9jb2xKU09OT2JqZWN0Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihO
U0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKLS0gKGluc3RhbmNldHlwZSlp
bml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0
OwotLyogb3B0aW9uYWwgKi8gQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgVGVzdFByb3Rv
Y29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgKm9iajsKLUBlbmQKLQotCi0KLQotCi0KLSNpbXBvcnQg
PFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4KLQot
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVx
dWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90
b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50
YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0K
LQotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29s
LmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+
Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5
cGU+Ci1PcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJp
bmcmIHZhbHVlKTsKLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2Nv
bFBsYXRmb3JtIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFBy
b3RvY29sUGxhdGZvcm1BbGw6Ci0gICAgICAgIHJldHVybiAiYWxsIl9zOwotICAgIGNhc2UgVGVz
dFByb3RvY29sUGxhdGZvcm1HZW5lcmljOgotICAgICAgICByZXR1cm4gImdlbmVyaWMiX3M7Ci0g
ICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzoKLSAgICAgICAgcmV0dXJuICJpb3MiX3M7
Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOgotICAgICAgICByZXR1cm4gIm1h
Y29zIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90
b2NvbFBsYXRmb3JtPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsK
LSAgICBpZiAodmFsdWUgPT0gImFsbCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0
Zm9ybUFsbDsKLSAgICBpZiAodmFsdWUgPT0gImdlbmVyaWMiKQotICAgICAgICByZXR1cm4gVGVz
dFByb3RvY29sUGxhdGZvcm1HZW5lcmljOwotICAgIGlmICh2YWx1ZSA9PSAiaW9zIikKLSAgICAg
ICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOwotICAgIGlmICh2YWx1ZSA9PSAibWFj
b3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzsKLSAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwotfQotCi0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhU
ZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1
ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc1BpZ3M6Ci0gICAg
ICAgIHJldHVybiAiUGlncyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFRlc3RVbmNhc3RlZEFu
aW1hbHNDb3dzOgotICAgICAgICByZXR1cm4gIkNvd3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9j
b2xUZXN0VW5jYXN0ZWRBbmltYWxzQ2F0czoKLSAgICAgICAgcmV0dXJuICJDYXRzIl9zOwotICAg
IGNhc2UgVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc0hlbnM6Ci0gICAgICAgIHJldHVy
biAiSGVucyJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0
UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gIlBpZ3MiKQotICAgICAgICByZXR1cm4g
VGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc1BpZ3M7Ci0gICAgaWYgKHZhbHVlID09ICJD
b3dzIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHNDb3dz
OwotICAgIGlmICh2YWx1ZSA9PSAiQ2F0cyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xU
ZXN0VW5jYXN0ZWRBbmltYWxzQ2F0czsKLSAgICBpZiAodmFsdWUgPT0gIkhlbnMiKQotICAgICAg
ICByZXR1cm4gVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc0hlbnM7Ci0gICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKLX0KLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQ
cm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewot
ICAgIGNhc2UgVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHNEdWNrczoKLSAgICAgICAgcmV0
dXJuICJEdWNrcyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzSGVu
czoKLSAgICAgICAgcmV0dXJuICJIZW5zIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sVGVzdENh
c3RlZEFuaW1hbHNDcm93czoKLSAgICAgICAgcmV0dXJuICJDcm93cyJfczsKLSAgICBjYXNlIFRl
c3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzRmxhbWluZ29zOgotICAgICAgICByZXR1cm4gIkZs
YW1pbmdvcyJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0
UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFscz4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJEdWNrcyIpCi0gICAgICAgIHJldHVybiBU
ZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFsc0R1Y2tzOwotICAgIGlmICh2YWx1ZSA9PSAiSGVu
cyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFsc0hlbnM7Ci0g
ICAgaWYgKHZhbHVlID09ICJDcm93cyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xUZXN0
Q2FzdGVkQW5pbWFsc0Nyb3dzOwotICAgIGlmICh2YWx1ZSA9PSAiRmxhbWluZ29zIikKLSAgICAg
ICAgcmV0dXJuIFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzRmxhbWluZ29zOwotICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVz
dFByb3RvY29sVHlwZVBhcnNlci5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29s
SlNPTk9iamVjdFByaXZhdGUuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGlu
dGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFRlc3REb21haW4pCi0KLSsgKHZv
aWQpX3BhcnNlVHlwZU5lZWRpbmdDYXN0OihUZXN0UHJvdG9jb2xUZXN0VHlwZU5lZWRpbmdDYXN0
ICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotKyAodm9pZClfcGFyc2VDYXN0
ZWRPYmplY3RJZDooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7
Ci0rICh2b2lkKV9wYXJzZVVuY2FzdGVkT2JqZWN0SWQ6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZy
b21QYXlsb2FkOihpZClwYXlsb2FkOwotKyAodm9pZClfcGFyc2VVbmNhc3RlZEFuaW1hbHM6KE5T
TnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotKyAodm9pZClfcGFy
c2VDYXN0ZWRBbmltYWxzOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5
bG9hZDsKLSsgKHZvaWQpX3BhcnNlUmVjdXJzaXZlT2JqZWN0MTooVGVzdFByb3RvY29sVGVzdFJl
Y3Vyc2l2ZU9iamVjdDEgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2
b2lkKV9wYXJzZVJlY3Vyc2l2ZU9iamVjdDI6KFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmpl
Y3QyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotCi1AZW5kCi0KLUBpbXBs
ZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFRlc3REb21haW4pCi0KLSsg
KHZvaWQpX3BhcnNlVHlwZU5lZWRpbmdDYXN0OihUZXN0UHJvdG9jb2xUZXN0VHlwZU5lZWRpbmdD
YXN0ICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7Ci0gICAg
Km91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xUZXN0VHlwZU5lZWRpbmdDYXN0IGFsbG9jXSBpbml0
V2l0aFBheWxvYWQ6cGF5bG9hZF07Ci19Ci0KLSsgKHZvaWQpX3BhcnNlQ2FzdGVkT2JqZWN0SWQ6
KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNOdW1iZXIgY2xhc3NdKTsKLSAg
ICAqb3V0VmFsdWUgPSAoTlNOdW1iZXIgKilwYXlsb2FkOwotfQotCi0rICh2b2lkKV9wYXJzZVVu
Y2FzdGVkT2JqZWN0SWQ6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXls
b2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNOdW1i
ZXIgY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSAoTlNOdW1iZXIgKilwYXlsb2FkOwotfQotCi0r
ICh2b2lkKV9wYXJzZVVuY2FzdGVkQW5pbWFsczooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBh
eWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBh
eWxvYWQsIFtOU1N0cmluZyBjbGFzc10pOwotICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbFRlc3RV
bmNhc3RlZEFuaW1hbHM+IHJlc3VsdCA9IEluc3BlY3Rvcjo6ZnJvbVByb3RvY29sU3RyaW5nPFRl
c3RQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHM+KHBheWxvYWQpOwotICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfQkFEX0VOVU1fVkFMVUUocmVzdWx0LCBAIlVuY2FzdGVkQW5pbWFscyIpOwotICAg
ICpvdXRWYWx1ZSA9IEAocmVzdWx0LnZhbHVlKCkpOwotfQotCi0rICh2b2lkKV9wYXJzZUNhc3Rl
ZEFuaW1hbHM6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17
Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNTdHJpbmcgY2xh
c3NdKTsKLSAgICBPcHRpb25hbDxUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFscz4gcmVzdWx0
ID0gSW5zcGVjdG9yOjpmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sVGVzdENhc3RlZEFu
aW1hbHM+KHBheWxvYWQpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX0VOVU1fVkFMVUUo
cmVzdWx0LCBAIkNhc3RlZEFuaW1hbHMiKTsKLSAgICAqb3V0VmFsdWUgPSBAKHJlc3VsdC52YWx1
ZSgpKTsKLX0KLQotKyAodm9pZClfcGFyc2VSZWN1cnNpdmVPYmplY3QxOihUZXN0UHJvdG9jb2xU
ZXN0UmVjdXJzaXZlT2JqZWN0MSAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAot
ewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFy
eSBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9i
amVjdDEgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKLX0KLQotKyAodm9pZClfcGFy
c2VSZWN1cnNpdmVPYmplY3QyOihUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MiAqKilv
dXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOwotICAgICpvdXRWYWx1
ZSA9IFtbVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDIgYWxsb2NdIGluaXRXaXRoUGF5
bG9hZDpwYXlsb2FkXTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5t
bQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRp
bWUtY2FzdHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpT
T05PYmplY3RQcml2YXRlLmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8
d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi1AaW1w
bGVtZW50YXRpb24gVGVzdFByb3RvY29sVGVzdFR5cGVOZWVkaW5nQ2FzdAotCi0tIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBp
ZD4gKilwYXlsb2FkCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAg
IHJldHVybiBuaWw7Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZ
KHBheWxvYWRbQCJzdHJpbmciXSwgQCJzdHJpbmciKTsKLSAgICBzZWxmLnN0cmluZyA9IHBheWxv
YWRbQCJzdHJpbmciXTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVS
VFkocGF5bG9hZFtAIm51bWJlciJdLCBAIm51bWJlciIpOwotICAgIHNlbGYubnVtYmVyID0gW3Bh
eWxvYWRbQCJudW1iZXIiXSBpbnRlZ2VyVmFsdWVdOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiYW5pbWFscyJdLCBAImFuaW1hbHMiKTsKLSAg
ICBPcHRpb25hbDxUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFscz4gYW5pbWFscyA9IGZyb21Q
cm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFscz4ocGF5bG9hZFtAImFu
aW1hbHMiXSk7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfRU5VTV9WQUxVRShhbmltYWxz
LCBAImFuaW1hbHMiKTsKLSAgICBzZWxmLmFuaW1hbHMgPSBhbmltYWxzLnZhbHVlKCk7Ci0KLSAg
ICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJpZCJdLCBA
ImlkIik7Ci0gICAgc2VsZi5pZGVudGlmaWVyID0gW3BheWxvYWRbQCJpZCJdIGludGVnZXJWYWx1
ZV07Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRb
QCJ0cmVlIl0sIEAidHJlZSIpOwotICAgIHNlbGYudHJlZSA9IFtbVGVzdFByb3RvY29sVGVzdFJl
Y3Vyc2l2ZU9iamVjdDEgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkW0AidHJlZSJdXTsK
LQotICAgIHJldHVybiBzZWxmOwotfQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xP
YmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9iamVjdAotewotICAgIGlmICghKHNlbGYg
PSBbc3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmplY3QgdG9KU09OT2JqZWN0XS5nZXQoKV0p
KQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aFN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcgbnVtYmVyOihpbnQpbnVt
YmVyIGFuaW1hbHM6KFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzKWFuaW1hbHMgaWRlbnRp
ZmllcjooaW50KWlkZW50aWZpZXIgdHJlZTooVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVj
dDEgKil0cmVlCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJl
dHVybiBuaWw7Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHN0
cmluZywgQCJzdHJpbmciKTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BF
UlRZKHRyZWUsIEAidHJlZSIpOwotCi0gICAgc2VsZi5zdHJpbmcgPSBzdHJpbmc7Ci0gICAgc2Vs
Zi5udW1iZXIgPSBudW1iZXI7Ci0gICAgc2VsZi5hbmltYWxzID0gYW5pbWFsczsKLSAgICBzZWxm
LmlkZW50aWZpZXIgPSBpZGVudGlmaWVyOwotICAgIHNlbGYudHJlZSA9IHRyZWU7Ci0KLSAgICBy
ZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClzZXRTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nCi17
Ci0gICAgW3N1cGVyIHNldFN0cmluZzpzdHJpbmcgZm9yS2V5OkAic3RyaW5nIl07Ci19Ci0KLS0g
KE5TU3RyaW5nICopc3RyaW5nCi17Ci0gICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJz
dHJpbmciXTsKLX0KLQotLSAodm9pZClzZXROdW1iZXI6KGludCludW1iZXIKLXsKLSAgICBbc3Vw
ZXIgc2V0SW50ZWdlcjpudW1iZXIgZm9yS2V5OkAibnVtYmVyIl07Ci19Ci0KLS0gKGludCludW1i
ZXIKLXsKLSAgICByZXR1cm4gW3N1cGVyIGludGVnZXJGb3JLZXk6QCJudW1iZXIiXTsKLX0KLQot
LSAodm9pZClzZXRBbmltYWxzOihUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFscylhbmltYWxz
Ci17Ci0gICAgW3N1cGVyIHNldFN0cmluZzp0b1Byb3RvY29sU3RyaW5nKGFuaW1hbHMpIGZvcktl
eTpAImFuaW1hbHMiXTsKLX0KLQotLSAoVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHMpYW5p
bWFscwotewotICAgIHJldHVybiBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sVGVzdENh
c3RlZEFuaW1hbHM+KFtzdXBlciBzdHJpbmdGb3JLZXk6QCJhbmltYWxzIl0pLnZhbHVlKCk7Ci19
Ci0KLS0gKHZvaWQpc2V0SWRlbnRpZmllcjooaW50KWlkZW50aWZpZXIKLXsKLSAgICBbc3VwZXIg
c2V0SW50ZWdlcjppZGVudGlmaWVyIGZvcktleTpAImlkIl07Ci19Ci0KLS0gKGludClpZGVudGlm
aWVyCi17Ci0gICAgcmV0dXJuIFtzdXBlciBpbnRlZ2VyRm9yS2V5OkAiaWQiXTsKLX0KLQotLSAo
dm9pZClzZXRUcmVlOihUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSAqKXRyZWUKLXsK
LSAgICBbc3VwZXIgc2V0T2JqZWN0OnRyZWUgZm9yS2V5OkAidHJlZSJdOwotfQotCi0tIChUZXN0
UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSAqKXRyZWUKLXsKLSAgICBSV0lQcm90b2NvbEpT
T05PYmplY3QgKm9iamVjdCA9IFtzdXBlciBvYmplY3RGb3JLZXk6QCJ0cmVlIl07Ci0gICAgaWYg
KCFvYmplY3QpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgcmV0dXJuIFtbVGVzdFByb3RvY29s
VGVzdFJlY3Vyc2l2ZU9iamVjdDEgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDpbW3N1cGVyIG9i
amVjdEZvcktleTpAInRyZWUiXSB0b0pTT05PYmplY3RdLmdldCgpXTsKLX0KLQotQGVuZAotCi1A
aW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEKLQotLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcg
KiwgaWQ+ICopcGF5bG9hZAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAg
ICAgICByZXR1cm4gbmlsOwotCi0gICAgc2VsZi5vYmogPSBbW1Rlc3RQcm90b2NvbFRlc3RSZWN1
cnNpdmVPYmplY3QyIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZFtAIm9iaiJdXTsKLQot
ICAgIHJldHVybiBzZWxmOwotfQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmpl
Y3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9iamVjdAotewotICAgIGlmICghKHNlbGYgPSBb
c3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmplY3QgdG9KU09OT2JqZWN0XS5nZXQoKV0pKQot
ICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpc2V0
T2JqOihUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MiAqKW9iagotewotICAgIFtzdXBl
ciBzZXRPYmplY3Q6b2JqIGZvcktleTpAIm9iaiJdOwotfQotCi0tIChUZXN0UHJvdG9jb2xUZXN0
UmVjdXJzaXZlT2JqZWN0MiAqKW9iagotewotICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb2Jq
ZWN0ID0gW3N1cGVyIG9iamVjdEZvcktleTpAIm9iaiJdOwotICAgIGlmICghb2JqZWN0KQotICAg
ICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiBbW1Rlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVP
YmplY3QyIGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6W1tzdXBlciBvYmplY3RGb3JLZXk6QCJv
YmoiXSB0b0pTT05PYmplY3RdLmdldCgpXTsKLX0KLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24g
VGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDIKLQotLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoUGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9h
ZAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmls
OwotCi0gICAgc2VsZi5vYmogPSBbW1Rlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxIGFs
bG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZFtAIm9iaiJdXTsKLQotICAgIHJldHVybiBzZWxm
OwotfQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29s
SlNPTk9iamVjdCAqKW9iamVjdAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhK
U09OT2JqZWN0OltvYmplY3QgdG9KU09OT2JqZWN0XS5nZXQoKV0pKQotICAgICAgICByZXR1cm4g
bmlsOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpc2V0T2JqOihUZXN0UHJvdG9j
b2xUZXN0UmVjdXJzaXZlT2JqZWN0MSAqKW9iagotewotICAgIFtzdXBlciBzZXRPYmplY3Q6b2Jq
IGZvcktleTpAIm9iaiJdOwotfQotCi0tIChUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0
MSAqKW9iagotewotICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb2JqZWN0ID0gW3N1cGVyIG9i
amVjdEZvcktleTpAIm9iaiJdOwotICAgIGlmICghb2JqZWN0KQotICAgICAgICByZXR1cm4gbmls
OwotICAgIHJldHVybiBbW1Rlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxIGFsbG9jXSBp
bml0V2l0aEpTT05PYmplY3Q6W1tzdXBlciBvYmplY3RGb3JLZXk6QCJvYmoiXSB0b0pTT05PYmpl
Y3RdLmdldCgpXTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlw
ZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbi1y
ZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2Vu
ZXJpYy9leHBlY3RlZC90eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0CmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNDMwZWRlNTA4YmI1YzgxZDc2ZDQ5OTRhMjcwZDEx
MjA3Nzk1MWM1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4
cGVjdGVkL3R5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQKKysrIC9kZXYvbnVs
bApAQCAtMSwxMTY0ICswLDAgQEAKLSMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29t
bWFuZHMuanMKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXdpdGgtb3Bl
bi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLSMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNp
ZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQotI2luY2x1ZGUgIlRl
c3RQcm90b2NvbFR5cGVzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9u
dGVuZFJvdXRlci5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgQWx0ZXJuYXRl
QmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNo
ZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlz
cGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KLSAgICBCYWNrZW5kRGlzcGF0Y2hlciog
YmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdl
dCgpOyB9Ci1wcml2YXRlOgotICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5k
RGlzcGF0Y2hlcjsKLX07Ci0KLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jZW5k
aWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jIyMgRW5kIEZp
bGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3Rv
Y29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFj
ZSBJbnNwZWN0b3IgewotCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQotCi0KLX0gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJz
LmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0
Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCi0jaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5o
IgotI2VuZGlmCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLQot
IyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNp
bmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3Rv
ciB7Ci0KLWNsYXNzIEZyb250ZW5kUm91dGVyOwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
LSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQot
IyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9u
cy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLW5hbWVzcGFjZSBQcm90b2NvbCB7
Ci0KLQotCi0vLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KLW5hbWVzcGFjZSBUZXN0IHsKLWNsYXNz
IE5vT3BlblBhcmFtZXRlcnM7Ci1jbGFzcyBPcGVuUGFyYW1ldGVyczsKLX0gLy8gVGVzdAotLy8g
RW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgotCi0KLQotCi1uYW1lc3BhY2UgVGVzdCB7Ci1j
bGFzcyBOb09wZW5QYXJhbWV0ZXJzIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewotcHVibGlj
OgotICAgIGVudW0gewotICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCi0gICAgICAgIE9uZVNldCA9
IDEgPDwgMCwKLSAgICAgICAgVHdvU2V0ID0gMSA8PCAxLAotICAgICAgICBBbGxGaWVsZHNTZXQg
PSAoT25lU2V0IHwgVHdvU2V0KQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+Ci0g
ICAgY2xhc3MgQnVpbGRlciB7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPEpTT046Ok9i
amVjdD4gbV9yZXN1bHQ7Ci0KLSAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RB
VEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICpy
ZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwotICAgICAgICB9
Ci0KLSAgICAgICAgQnVpbGRlcihSZWY8LypOb09wZW5QYXJhbWV0ZXJzKi9KU09OOjpPYmplY3Q+
JiYgb2JqZWN0KQotICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBi
dWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwotICAgICAgICB9Ci0gICAgICAgIGZy
aWVuZCBjbGFzcyBOb09wZW5QYXJhbWV0ZXJzOwotICAgIHB1YmxpYzoKLQotICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgT25lU2V0PiYgc2V0T25lKGRvdWJsZSB2YWx1ZSkKLSAgICAgICAgewotICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE9uZVNldCksIHByb3BlcnR5X29uZV9h
bHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0RG91YmxlKCJvbmUiX3MsIHZh
bHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8T25lU2V0PigpOwotICAgICAgICB9
Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IFR3b1NldD4mIHNldFR3byhkb3VibGUgdmFsdWUp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUd29TZXQp
LCBwcm9wZXJ0eV90d29fYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldERv
dWJsZSgidHdvIl9zLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFR3b1Nl
dD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIFJlZjxOb09wZW5QYXJhbWV0ZXJzPiByZWxlYXNl
KCkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmll
bGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KHNpemVvZihOb09wZW5QYXJhbWV0ZXJzKSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0KSwgY2Fubm90
X2Nhc3QpOwotCi0gICAgICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uUmVzdWx0ID0gbV9y
ZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKLSAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gV1RGTW92
ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8Tm9PcGVuUGFyYW1ldGVycz4qPigmanNvblJlc3VsdCkp
OwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICAv
KgotICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKLSAgICAgKiBSZWY8Tm9PcGVuUGFyYW1l
dGVycz4gcmVzdWx0ID0gTm9PcGVuUGFyYW1ldGVyczo6Y3JlYXRlKCkKLSAgICAgKiAgICAgLnNl
dE9uZSguLi4pCi0gICAgICogICAgIC5zZXRUd28oLi4uKQotICAgICAqICAgICAucmVsZWFzZSgp
OwotICAgICAqLwotICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCkpOwotICAgIH0KLX07Ci0KLWNsYXNzIE9wZW5QYXJhbWV0ZXJzIDogcHVibGljIEpTT046
Ok9iamVjdCB7Ci1wdWJsaWM6Ci0gICAgZW51bSB7Ci0gICAgICAgIE5vRmllbGRzU2V0ID0gMCwK
LSAgICAgICAgQWxwaGFTZXQgPSAxIDw8IDAsCi0gICAgICAgIEJldGFTZXQgPSAxIDw8IDEsCi0g
ICAgICAgIEFsbEZpZWxkc1NldCA9IChBbHBoYVNldCB8IEJldGFTZXQpCi0gICAgfTsKLQotICAg
IHRlbXBsYXRlPGludCBTVEFURT4KLSAgICBjbGFzcyBCdWlsZGVyIHsKLSAgICBwcml2YXRlOgot
ICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBtX3Jlc3VsdDsKLQotICAgICAgICB0ZW1wbGF0
ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNU
RVA+Kj4odGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyKFJlZjwvKk9wZW5QYXJh
bWV0ZXJzKi9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQotICAgICAgICAgICAgOiBtX3Jlc3VsdChX
VEZNb3ZlKG9iamVjdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNU
QVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwot
ICAgICAgICB9Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBPcGVuUGFyYW1ldGVyczsKLSAgICBwdWJs
aWM6Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IEFscGhhU2V0PiYgc2V0QWxwaGEoZG91Ymxl
IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
QWxwaGFTZXQpLCBwcm9wZXJ0eV9hbHBoYV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0RG91YmxlKCJhbHBoYSJfcywgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNh
c3RTdGF0ZTxBbHBoYVNldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBCZXRhU2V0PiYgc2V0QmV0YShkb3VibGUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBCZXRhU2V0KSwgcHJvcGVydHlfYmV0YV9hbHJlYWR5
X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0RG91YmxlKCJiZXRhIl9zLCB2YWx1ZSk7
Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEJldGFTZXQ+KCk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBSZWY8T3BlblBhcmFtZXRlcnM+IHJlbGVhc2UoKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3Rf
cmVhZHkpOwotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKE9wZW5QYXJhbWV0ZXJz
KSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0KSwgY2Fubm90X2Nhc3QpOwotCi0gICAgICAgICAgICBS
ZWY8SlNPTjo6T2JqZWN0PiBqc29uUmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsK
LSAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8
T3BlblBhcmFtZXRlcnM+Kj4oJmpzb25SZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVybiByZXN1
bHQ7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgLyoKLSAgICAgKiBTeW50aGV0aWMgY29uc3Ry
dWN0b3I6Ci0gICAgICogUmVmPE9wZW5QYXJhbWV0ZXJzPiByZXN1bHQgPSBPcGVuUGFyYW1ldGVy
czo6Y3JlYXRlKCkKLSAgICAgKiAgICAgLnNldEFscGhhKC4uLikKLSAgICAgKiAgICAgLnNldEJl
dGEoLi4uKQotICAgICAqICAgICAucmVsZWFzZSgpOwotICAgICAqLwotICAgIHN0YXRpYyBCdWls
ZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEJ1aWxkZXI8
Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOwotICAgIH0KLQotICAgIC8vIFBy
b3BlcnR5IG5hbWVzIGZvciB0eXBlIGdlbmVyYXRlZCBhcyBvcGVuLgotICAgIE5vbmUgc3RhdGlj
IGNvbnN0IGNoYXIqIEFscGhhOwotfTsKLQotfSAvLyBUZXN0Ci0KLQotCi19IC8vIG5hbWVzcGFj
ZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sT2JqZWN0cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3Rz
LmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtd2l0aC1vcGVuLXBh
cmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgot
Ci0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotY29u
c3QgY2hhciogSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6T3BlblBhcmFtZXRlcnM6OkFscGhh
ID0gImFscGhhIjsKLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbmNs
dWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLQotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi19
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNr
ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERp
c3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRo
LW9wZW4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2Vu
ZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2luY2x1ZGUgPHd0Zi9KU09O
VmFsdWVzLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi19IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0K
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxXZWJJ
bnNwZWN0b3IvVGVzdFByb3RvY29sLmg+Ci0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJk
ZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmpl
Y3QKLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAot
Ci0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0
UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFs
LmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+Ci0jaW1wb3J0IDxK
YXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgot
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0K
LXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9j
b2xDb25maWd1cmF0aW9uCi17Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBf
Y29udHJvbGxlcjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVn
bWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtz
dXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNT
RVJUKGNvbnRyb2xsZXIpOwotICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1
cm4gc2VsZjsKLX0KLQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwot
fQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1t
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQg
IlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5oIgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNl
IEluc3BlY3RvcjsKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hl
cnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPEZvdW5kYXRpb24v
Rm91bmRhdGlvbi5oPgotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2Jq
ZWN0Lmg+Ci0KLQotQGNsYXNzIFRlc3RQcm90b2NvbFRlc3ROb09wZW5QYXJhbWV0ZXJzOwotQGNs
YXNzIFRlc3RQcm90b2NvbFRlc3RPcGVuUGFyYW1ldGVyczsKLQotdHlwZWRlZiBOU19FTlVNKE5T
SW50ZWdlciwgVGVzdFByb3RvY29sUGxhdGZvcm0pIHsKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9y
bUFsbCwKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWMsCi0gICAgVGVzdFByb3RvY29s
UGxhdGZvcm1JT1MsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUywKLX07Ci0KLQotCi0K
LV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0
UHJvdG9jb2xUZXN0Tm9PcGVuUGFyYW1ldGVycyA6IFJXSVByb3RvY29sSlNPTk9iamVjdAotLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlk
PiAqKXBheWxvYWQ7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0
aE9uZTooZG91YmxlKW9uZSB0d286KGRvdWJsZSl0d287Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVy
dHkgKG5vbmF0b21pYywgYXNzaWduKSBkb3VibGUgb25lOwotLyogcmVxdWlyZWQgKi8gQHByb3Bl
cnR5IChub25hdG9taWMsIGFzc2lnbikgZG91YmxlIHR3bzsKLUBlbmQKLQotX19hdHRyaWJ1dGVf
XygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbFRlc3RP
cGVuUGFyYW1ldGVycyA6IFJXSVByb3RvY29sSlNPTk9iamVjdAotLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQ7Ci0t
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2Jq
ZWN0ICopanNvbk9iamVjdDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aEFscGhhOihkb3VibGUp
YWxwaGEgYmV0YTooZG91YmxlKWJldGE7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0
b21pYywgYXNzaWduKSBkb3VibGUgYWxwaGE7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5v
bmF0b21pYywgYXNzaWduKSBkb3VibGUgYmV0YTsKLUBlbmQKLQotCi0KLQotCi0KLSNpbXBvcnQg
PFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4KLQot
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtd2l0
aC1vcGVuLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2Nv
bEpTT05PYmplY3RQcml2YXRlLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJs
ZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLQot
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSB0eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0j
aW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+Ci0KLW5h
bWVzcGFjZSBJbnNwZWN0b3IgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+Ci1P
cHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZh
bHVlKTsKLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFBsYXRm
b3JtIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29s
UGxhdGZvcm1BbGw6Ci0gICAgICAgIHJldHVybiAiYWxsIl9zOwotICAgIGNhc2UgVGVzdFByb3Rv
Y29sUGxhdGZvcm1HZW5lcmljOgotICAgICAgICByZXR1cm4gImdlbmVyaWMiX3M7Ci0gICAgY2Fz
ZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzoKLSAgICAgICAgcmV0dXJuICJpb3MiX3M7Ci0gICAg
Y2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOgotICAgICAgICByZXR1cm4gIm1hY29zIl9z
OwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFBs
YXRmb3JtPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBp
ZiAodmFsdWUgPT0gImFsbCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFs
bDsKLSAgICBpZiAodmFsdWUgPT0gImdlbmVyaWMiKQotICAgICAgICByZXR1cm4gVGVzdFByb3Rv
Y29sUGxhdGZvcm1HZW5lcmljOwotICAgIGlmICh2YWx1ZSA9PSAiaW9zIikKLSAgICAgICAgcmV0
dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOwotICAgIGlmICh2YWx1ZSA9PSAibWFjb3MiKQot
ICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzsKLSAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwotfQotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2xUeXBlUGFyc2VyLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2Jq
ZWN0UHJpdmF0ZS5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW50ZXJmYWNl
IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoVGVzdERvbWFpbikKLQotKyAodm9pZClfcGFy
c2VOb09wZW5QYXJhbWV0ZXJzOihUZXN0UHJvdG9jb2xUZXN0Tm9PcGVuUGFyYW1ldGVycyAqKilv
dXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLSsgKHZvaWQpX3BhcnNlT3BlblBhcmFt
ZXRlcnM6KFRlc3RQcm90b2NvbFRlc3RPcGVuUGFyYW1ldGVycyAqKilvdXRWYWx1ZSBmcm9tUGF5
bG9hZDooaWQpcGF5bG9hZDsKLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zIChUZXN0RG9tYWluKQotCi0rICh2b2lkKV9wYXJzZU5vT3BlblBhcmFt
ZXRlcnM6KFRlc3RQcm90b2NvbFRlc3ROb09wZW5QYXJhbWV0ZXJzICoqKW91dFZhbHVlIGZyb21Q
YXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShw
YXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gW1tUZXN0UHJv
dG9jb2xUZXN0Tm9PcGVuUGFyYW1ldGVycyBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRd
OwotfQotCi0rICh2b2lkKV9wYXJzZU9wZW5QYXJhbWV0ZXJzOihUZXN0UHJvdG9jb2xUZXN0T3Bl
blBhcmFtZXRlcnMgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBU
SFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3Nd
KTsKLSAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbFRlc3RPcGVuUGFyYW1ldGVycyBhbGxv
Y10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbFR5cGVzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13
aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQg
IlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JX
SVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLSNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+
Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9y
OwotCi0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUZXN0Tm9PcGVuUGFyYW1ldGVycwot
Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxO
U1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0
XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJ
UkVEX1BST1BFUlRZKHBheWxvYWRbQCJvbmUiXSwgQCJvbmUiKTsKLSAgICBzZWxmLm9uZSA9IFtw
YXlsb2FkW0Aib25lIl0gZG91YmxlVmFsdWVdOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9S
RVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AidHdvIl0sIEAidHdvIik7Ci0gICAgc2VsZi50d28g
PSBbcGF5bG9hZFtAInR3byJdIGRvdWJsZVZhbHVlXTsKLQotICAgIHJldHVybiBzZWxmOwotfQot
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9i
amVjdCAqKW9iamVjdAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09OT2Jq
ZWN0OltvYmplY3QgdG9KU09OT2JqZWN0XS5nZXQoKV0pKQotICAgICAgICByZXR1cm4gbmlsOwot
Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aE9uZTooZG91
YmxlKW9uZSB0d286KGRvdWJsZSl0d28KLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRd
KSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIHNlbGYub25lID0gb25lOwotICAgIHNlbGYu
dHdvID0gdHdvOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpc2V0T25lOihkb3Vi
bGUpb25lCi17Ci0gICAgW3N1cGVyIHNldERvdWJsZTpvbmUgZm9yS2V5OkAib25lIl07Ci19Ci0K
LS0gKGRvdWJsZSlvbmUKLXsKLSAgICByZXR1cm4gW3N1cGVyIGRvdWJsZUZvcktleTpAIm9uZSJd
OwotfQotCi0tICh2b2lkKXNldFR3bzooZG91YmxlKXR3bwotewotICAgIFtzdXBlciBzZXREb3Vi
bGU6dHdvIGZvcktleTpAInR3byJdOwotfQotCi0tIChkb3VibGUpdHdvCi17Ci0gICAgcmV0dXJu
IFtzdXBlciBkb3VibGVGb3JLZXk6QCJ0d28iXTsKLX0KLQotQGVuZAotCi1AaW1wbGVtZW50YXRp
b24gVGVzdFByb3RvY29sVGVzdE9wZW5QYXJhbWV0ZXJzCi0KLS0gKGluc3RhbmNldHlwZSlpbml0
V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxv
YWQKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5p
bDsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtA
ImFscGhhIl0sIEAiYWxwaGEiKTsKLSAgICBzZWxmLmFscGhhID0gW3BheWxvYWRbQCJhbHBoYSJd
IGRvdWJsZVZhbHVlXTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVS
VFkocGF5bG9hZFtAImJldGEiXSwgQCJiZXRhIik7Ci0gICAgc2VsZi5iZXRhID0gW3BheWxvYWRb
QCJiZXRhIl0gZG91YmxlVmFsdWVdOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0tIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopb2Jq
ZWN0Ci17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEpTT05PYmplY3Q6W29iamVj
dCB0b0pTT05PYmplY3RdLmdldCgpXSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICByZXR1
cm4gc2VsZjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQWxwaGE6KGRvdWJsZSlhbHBo
YSBiZXRhOihkb3VibGUpYmV0YQotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQot
ICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgc2VsZi5hbHBoYSA9IGFscGhhOwotICAgIHNlbGYu
YmV0YSA9IGJldGE7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClzZXRBbHBoYToo
ZG91YmxlKWFscGhhCi17Ci0gICAgW3N1cGVyIHNldERvdWJsZTphbHBoYSBmb3JLZXk6QCJhbHBo
YSJdOwotfQotCi0tIChkb3VibGUpYWxwaGEKLXsKLSAgICByZXR1cm4gW3N1cGVyIGRvdWJsZUZv
cktleTpAImFscGhhIl07Ci19Ci0KLS0gKHZvaWQpc2V0QmV0YTooZG91YmxlKWJldGEKLXsKLSAg
ICBbc3VwZXIgc2V0RG91YmxlOmJldGEgZm9yS2V5OkAiYmV0YSJdOwotfQotCi0tIChkb3VibGUp
YmV0YQotewotICAgIHJldHVybiBbc3VwZXIgZG91YmxlRm9yS2V5OkAiYmV0YSJdOwotfQotCi1A
ZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhw
ZWN0ZWQvdmVyc2lvbi5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3ZlcnNpb24uanNvbi1yZXN1bHQKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0ZTg3ZGM0NzM5YjM1MWM0ZDExNGIwMGFiMTk3
ZjJkZDY4NjZhMTMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMv
ZXhwZWN0ZWQvdmVyc2lvbi5qc29uLXJlc3VsdAorKysgL2Rldi9udWxsCkBAIC0xLDg4MCArMCww
IEBACi0jIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lvbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLS8vIFZlcnNpb25Eb21haW4KLUluc3BlY3RvckJh
Y2tlbmQucmVnaXN0ZXJEb21haW4oIlZlcnNpb25Eb21haW4iLCBudWxsKTsKLUluc3BlY3RvckJh
Y2tlbmQucmVnaXN0ZXJWZXJzaW9uKCJWZXJzaW9uRG9tYWluIiwgNDIpOwotSW5zcGVjdG9yQmFj
a2VuZC5hY3RpdmF0ZURvbWFpbigiVmVyc2lvbkRvbWFpbiIsIG51bGwpOwotIyMjIEVuZCBGaWxl
OiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHZlcnNpb24uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKLSNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0
b3IgewotCi1jbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAg
dm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlz
cGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQot
ICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJu
IG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPEJhY2tl
bmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwotfTsKLQotCi0KLQotfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKLSMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVy
cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0
UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFt
ZXNwYWNlIEluc3BlY3RvciB7Ci0KLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCi0KLQot
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0
Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMu
aD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
LSNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jZW5kaWYKLQot
bmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQot
IyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIHZlcnNpb24uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIK
LSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgRnJvbnRlbmRSb3V0ZXI7Ci0K
LX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNw
YXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gdmVyc2lvbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5h
bWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotLy8gVmVy
c2lvbnMuCi1uYW1lc3BhY2UgVmVyc2lvbkRvbWFpbiB7Ci1zdGF0aWMgY29uc3RleHByIHVuc2ln
bmVkIFZFUlNJT04gPSA0MjsKLX0gLy8gVmVyc2lvbkRvbWFpbgotLy8gRW5kIG9mIHZlcnNpb25z
LgotCi0KLQotCi0KLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gdmVyc2lvbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9j
b2xPYmplY3RzLmgiCi0KLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1uYW1lc3BhY2UgUHJv
dG9jb2wgewotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lvbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRy
Lmg+Ci0KLQotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi19IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAot
Ci0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lvbi5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9y
dCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlICJUZXN0UHJv
dG9jb2xJbnRlcm5hbC5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5o
IgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Igewot
Ci19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xC
YWNrZW5kRGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZp
Z3VyYXRpb24uaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHZlcnNpb24uanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxX
ZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+Ci0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkg
KCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNP
YmplY3QKLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24u
aAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHZlcnNpb24uanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1
cmF0aW9uLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW1wb3J0ICJU
ZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9B
dWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2ltcG9ydCA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0KLXVzaW5nIG5hbWVzcGFj
ZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9u
Ci17Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKLX0K
LQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0
b3JDb250cm9sbGVyKiljb250cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAg
ICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIp
OwotICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQot
LSAodm9pZClkZWFsbG9jCi17Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi1AZW5kCi0KLQot
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gdmVyc2lvbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBv
cnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8d3RmL0pTT05WYWx1
ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0jIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lvbi5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPEZvdW5k
YXRpb24vRm91bmRhdGlvbi5oPgotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xK
U09OT2JqZWN0Lmg+Ci0KLQotCi0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90
b2NvbFBsYXRmb3JtKSB7Ci0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1BbGwsCi0gICAgVGVzdFBy
b3RvY29sUGxhdGZvcm1HZW5lcmljLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TLAotICAg
IFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1MsCi19OwotCi0KLQotCi0KLQotCi0KLQotCi0jaW1w
b3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbEludGVybmFsLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJz
aW9uLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2lt
cG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJp
dmF0ZS5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250
cm9sbGVyLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi0KLQotCi0jIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVy
c2lvbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNp
bXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29s
QXJyYXlDb252ZXJzaW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdGVtcGxhdGU8
dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgotT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9j
b2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2Nv
bFN0cmluZyhUZXN0UHJvdG9jb2xQbGF0Zm9ybSB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUp
IHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOgotICAgICAgICByZXR1cm4gImFs
bCJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzoKLSAgICAgICAgcmV0
dXJuICJnZW5lcmljIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1JT1M6Ci0gICAg
ICAgIHJldHVybiAiaW9zIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzoK
LSAgICAgICAgcmV0dXJuICJtYWNvcyJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGlu
ZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xQbGF0Zm9ybT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0
IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJhbGwiKQotICAgICAgICByZXR1
cm4gVGVzdFByb3RvY29sUGxhdGZvcm1BbGw7Ci0gICAgaWYgKHZhbHVlID09ICJnZW5lcmljIikK
LSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzsKLSAgICBpZiAodmFs
dWUgPT0gImlvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzsKLSAg
ICBpZiAodmFsdWUgPT0gIm1hY29zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRm
b3JtTWFjT1M7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgK
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHZlcnNpb24uanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJv
dG9jb2xUeXBlUGFyc2VyLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09O
T2JqZWN0UHJpdmF0ZS5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLQotCi0K
LQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gdmVyc2lvbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVBy
b3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLSNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0j
aW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwot
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24t
Y29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFp
bC1vbi1jb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpz
b24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2ZGY5ZTRiZDljMzE3ZDFiNmJhZjVl
ZDZjNWUwMzVlMmFmOTMxODcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvZmFpbC1vbi1jb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2Fi
bGVUeXBlLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLVsKLXsKLSAgICAiZG9t
YWluIjogIkRvbWFpbiIsCi0gICAgImRlYnVnZ2FibGVUeXBlcyI6IFsiamF2YXNjcmlwdCJdLAot
ICAgICJ0YXJnZXRUeXBlcyI6IFsid29ya2VyIl0sCi0gICAgImNvbW1hbmRzIjogW3sibmFtZSI6
ICJDb21tYW5kIn1dLAotICAgICJldmVudHMiOiBbeyJuYW1lIjogIkV2ZW50In1dCi19Ci1dCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJpYy9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlwZXMtdHlwZS5qc29uIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1jb21t
YW5kLXRhcmdldFR5cGVzLXR5cGUuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NjQwNTlmODRiY2YwY2ViYTBlODQwNjAwODdlYjUzMmFhZDZmMDJlNC4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlwZXMt
dHlwZS5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi17Ci0gICAgImRvbWFpbiI6
ICJEb21haW4iLAotICAgICJjb21tYW5kcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgIm5h
bWUiOiAiUGFnZU9ubHkiLAotICAgICAgICAgICAgInRhcmdldFR5cGVzIjogInBhZ2VlIgotICAg
ICAgICB9Ci0gICAgXQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1jb21tYW5kLXRhcmdldFR5cGVzLXZh
bHVlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJpYy9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlwZXMtdmFsdWUuanNvbgpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNTAyMDQ0NzJlYzhmNWU2YjA5OWMyOGRiZTJhMWNlODMwN2I1
YjA2ZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9u
LWNvbW1hbmQtdGFyZ2V0VHlwZXMtdmFsdWUuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAs
MCBAQAotewotICAgICJkb21haW4iOiAiRG9tYWluIiwKLSAgICAiY29tbWFuZHMiOiBbCi0gICAg
ICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogIlBhZ2VPbmx5IiwKLSAgICAgICAgICAgICJ0YXJn
ZXRUeXBlcyI6IFsicGFnZWUiXQotICAgICAgICB9Ci0gICAgXQotfQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1v
bi1jb21tYW5kLXdpdGgtaW52YWxpZC1wbGF0Zm9ybS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1jb21tYW5kLXdpdGgt
aW52YWxpZC1wbGF0Zm9ybS5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMTgw
Y2FlOWJmZjhkYTI0ZjA2Y2YyMTA1ZWQ1OTg0NTRjZjVlY2ZiLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tY29tbWFuZC13aXRoLWludmFsaWQtcGxh
dGZvcm0uanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLXsKLSAgICAiZG9tYWlu
IjogIk92ZXJsYXkiLAotICAgICJjb21tYW5kcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAg
Im5hbWUiOiAicHJvY2Vzc1BvaW50cyIsCi0gICAgICAgICAgICAicGxhdGZvcm0iOiAiaW52YWxp
ZCIsCi0gICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1l
IjogInBvaW50MSIsICJ0eXBlIjogIm51bWJlciIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1l
IjogInBvaW50MiIsICJ0eXBlIjogIm51bWJlciIgfQotICAgICAgICAgICAgXSwKLSAgICAgICAg
ICAgICJyZXR1cm5zIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicmVzdWx0IiwgInR5
cGUiOiAic3RyaW5nIiB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0KLSAgICBdCi19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2Vu
ZXJpYy9mYWlsLW9uLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMtdHlwZS5qc29uIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kb21h
aW4tZGVidWdnYWJsZVR5cGVzLXR5cGUuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggOTc0OGY0MjM0NzNjZDlkZDY1YWJjZWU5NGE4ODE2YmQ0ODI5MTNlZi4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWRvbWFpbi1kZWJ1Z2dhYmxl
VHlwZXMtdHlwZS5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi17Ci0gICAgImRv
bWFpbiI6ICJXZWJPbmx5IiwKLSAgICAiZGVidWdnYWJsZVR5cGVzIjogIndlYmIiLAotICAgICJj
b21tYW5kcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiZW5hYmxlIgotICAg
ICAgICB9Ci0gICAgXQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kb21haW4tZGVidWdnYWJsZVR5cGVz
LXZhbHVlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZ2VuZXJpYy9mYWlsLW9uLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMtdmFsdWUuanNvbgpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjI1MmRkYmQ4M2RhYmI3ZGY2ZTQ0MTM1YzYxZjA5
MzY2ZTMwZTYwNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9m
YWlsLW9uLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMtdmFsdWUuanNvbgorKysgL2Rldi9udWxsCkBA
IC0xLDkgKzAsMCBAQAotewotICAgICJkb21haW4iOiAiV2ViT25seSIsCi0gICAgImRlYnVnZ2Fi
bGVUeXBlcyI6IFsid2ViYiJdLAotICAgICJjb21tYW5kcyI6IFsKLSAgICAgICAgewotICAgICAg
ICAgICAgIm5hbWUiOiAiZW5hYmxlIgotICAgICAgICB9Ci0gICAgXQotfQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFp
bC1vbi1kb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNv
biBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2ZhaWwtb24tZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBl
Lmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhYTAyODA0NjU3NjllMjkzMTg5
ODkzYzQzMzAyZmNiZDZmNDk4NmMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdn
YWJsZVR5cGUuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotWwotewotICAgICJk
b21haW4iOiAiRG9tYWluIiwKLSAgICAiZGVidWdnYWJsZVR5cGVzIjogWyJqYXZhc2NyaXB0Il0s
Ci0gICAgImNvbW1hbmRzIjogW3sibmFtZSI6ICJDb21tYW5kIiwgInRhcmdldFR5cGVzIjogWyJ3
b3JrZXIiXX1dLAotICAgICJldmVudHMiOiBbeyJuYW1lIjogIkV2ZW50In1dCi19Ci1dCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2Vu
ZXJpYy9mYWlsLW9uLWRvbWFpbi10YXJnZXRUeXBlcy10eXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWRvbWFpbi10
YXJnZXRUeXBlcy10eXBlLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4MjIy
Njc0MTQ2MTVkNGI0YWU2NDIwOWM2YzZjZDc4NmVmM2M4NjUuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZXMtdHlwZS5q
c29uCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi17Ci0gICAgImRvbWFpbiI6ICJQYWdl
T25seSIsCi0gICAgInRhcmdldFR5cGVzIjogInBhZ2VlIiwKLSAgICAiY29tbWFuZHMiOiBbCi0g
ICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImVuYWJsZSIKLSAgICAgICAgfQotICAgIF0K
LX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9nZW5lcmljL2ZhaWwtb24tZG9tYWluLXRhcmdldFR5cGVzLXZhbHVlLmpzb24gYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9u
LWRvbWFpbi10YXJnZXRUeXBlcy12YWx1ZS5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBlN2IxMGQ3ZjE1NGI5ODQxYWM4ZjI0Mzk1NjE5NjMyYjE5NzhjOTQ5Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZG9tYWluLXRhcmdldFR5
cGVzLXZhbHVlLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLXsKLSAgICAiZG9t
YWluIjogIlBhZ2VPbmx5IiwKLSAgICAidGFyZ2V0VHlwZXMiOiBbInBhZ2VlIl0sCi0gICAgImNv
bW1hbmRzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJlbmFibGUiCi0gICAg
ICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWR1cGxpY2F0ZS1jb21tYW5kLWNhbGwt
cGFyYW1ldGVyLW5hbWVzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWR1cGxpY2F0ZS1jb21tYW5kLWNhbGwtcGFyYW1l
dGVyLW5hbWVzLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhYjc2Y2E2Mjc5
Y2UzYTRhY2Y3OTg1NTAwYjMwYjdkMWNmYjhmMGQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1jYWxsLXBhcmFtZXRl
ci1uYW1lcy5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotewotICAgICJkb21h
aW4iOiAiT3ZlcmxheSIsCi0gICAgImNvbW1hbmRzIjogWwotICAgICAgICB7Ci0gICAgICAgICAg
ICAibmFtZSI6ICJwcm9jZXNzUG9pbnRzIiwKLSAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwot
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicG9pbnQiLCAidHlwZSI6ICJudW1iZXIiIH0sCi0g
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwb2ludCIsICJ0eXBlIjogIm51bWJlciIgfQotICAg
ICAgICAgICAgXSwKLSAgICAgICAgICAgICJyZXR1cm5zIjogWwotICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAicmVzdWx0MSIsICJ0eXBlIjogInN0cmluZyIgfSwKLSAgICAgICAgICAgICAgICB7
ICJuYW1lIjogInJlc3VsdDIiLCAidHlwZSI6ICJzdHJpbmciIH0KLSAgICAgICAgICAgIF0KLSAg
ICAgICAgfQotICAgIF0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZHVwbGljYXRlLWNvbW1hbmQtcmV0
dXJuLXBhcmFtZXRlci1uYW1lcy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1yZXR1cm4t
cGFyYW1ldGVyLW5hbWVzLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4YmIx
NWMwNGI2NTliOWNiOWFmZGUzNGNkNTcyMmJhOWM2ZDRkYTkuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1yZXR1cm4t
cGFyYW1ldGVyLW5hbWVzLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi17Ci0g
ICAgImRvbWFpbiI6ICJPdmVybGF5IiwKLSAgICAiY29tbWFuZHMiOiBbCi0gICAgICAgIHsKLSAg
ICAgICAgICAgICJuYW1lIjogInByb2Nlc3NQb2ludHMiLAotICAgICAgICAgICAgInBhcmFtZXRl
cnMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwb2ludDEiLCAidHlwZSI6ICJudW1i
ZXIiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwb2ludDIiLCAidHlwZSI6ICJudW1i
ZXIiIH0KLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAicmV0dXJucyI6IFsKLSAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInJlc3VsdCIsICJ0eXBlIjogInN0cmluZyIgfSwKLSAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInJlc3VsdCIsICJ0eXBlIjogInN0cmluZyIgfQotICAgICAgICAg
ICAgXQotICAgICAgICB9Ci0gICAgXQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kdXBsaWNhdGUtZXZl
bnQtcGFyYW1ldGVyLW5hbWVzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWR1cGxpY2F0ZS1ldmVudC1wYXJhbWV0ZXIt
bmFtZXMuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDNkM2IzY2M2NDIzY2Vj
MjVhNjdkYTkxMzJhNzY2ODY3NTVhNDQ0MC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWR1cGxpY2F0ZS1ldmVudC1wYXJhbWV0ZXItbmFtZXMuanNv
bgorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIk92ZXJs
YXkiLAotICAgICJldmVudHMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogInBy
b2Nlc3NlZFBvaW50cyIsCi0gICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKLSAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInBvaW50IiwgInR5cGUiOiAibnVtYmVyIiB9LAotICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAicG9pbnQiLCAidHlwZSI6ICJudW1iZXIiIH0KLSAgICAgICAgICAgIF0K
LSAgICAgICAgfQotICAgIF0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZHVwbGljYXRlLXR5cGUtZGVj
bGFyYXRpb25zLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLWRlY2xhcmF0aW9ucy5qc29uCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MDJmYzZhMzI3MGE2NDZhNDUwNDQ3ZmRjMDQw
MTM5OTVhOTQyYmYwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2ZhaWwtb24tZHVwbGljYXRlLXR5cGUtZGVjbGFyYXRpb25zLmpzb24KKysrIC9kZXYvbnVsbApA
QCAtMSwxNSArMCwwIEBACi17Ci0gICAgImRvbWFpbiI6ICJSdW50aW1lIiwKLSAgICAidHlwZXMi
OiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJSZW1vdGVPYmplY3RJZCIsCi0gICAg
ICAgICAgICAidHlwZSI6ICJzdHJpbmciLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVu
aXF1ZSBvYmplY3QgaWRlbnRpZmllci4iCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAg
ICAgICJpZCI6ICJSZW1vdGVPYmplY3RJZCIsCi0gICAgICAgICAgICAidHlwZSI6ICJzdHJpbmci
LAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4i
Ci0gICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLW1l
bWJlci1uYW1lcy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1tZW1iZXItbmFtZXMuanNvbgpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWViYWNlZThiMjNlMWVhMzQwNWQ4YWMwYTAw
MTYyMDcwMTBjOTQ4NS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJp
Yy9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLW1lbWJlci1uYW1lcy5qc29uCisrKyAvZGV2L251bGwK
QEAgLTEsMTUgKzAsMCBAQAotWwotewotICAgICJkb21haW4iOiAiT3ZlcmxheVR5cGVzIiwKLSAg
ICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJQb2ludCIsCi0gICAg
ICAgICAgICAidHlwZSI6ICJvYmplY3QiLAotICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCi0g
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ4IiwgInR5cGUiOiAiaW50ZWdlciIgfSwKLSAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogIngiLCAidHlwZSI6ICJpbnRlZ2VyIiB9Ci0gICAgICAgICAg
ICBdCi0gICAgICAgIH0KLSAgICBdCi19Ci1dCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWVudW0td2l0aC1u
by12YWx1ZXMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9nZW5lcmljL2ZhaWwtb24tZW51bS13aXRoLW5vLXZhbHVlcy5qc29uCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAyMzJhN2MzMjQ5YTQwYmQ0NDdlMTlhOTJhOGU1NjkzMGQzZjg1
OTU3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24t
ZW51bS13aXRoLW5vLXZhbHVlcy5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAot
ewotICAgICJkb21haW4iOiAiRGF0YWJhc2UiLAotICAgICJ0eXBlcyI6IFsKLSAgICAgICAgewot
ICAgICAgICAgICAgImlkIjogIlByaW1hcnlDb2xvcnMiLAotICAgICAgICAgICAgInR5cGUiOiAi
c3RyaW5nIiwKLSAgICAgICAgICAgICJlbnVtIjogW10KLSAgICAgICAgfQotICAgIF0KLX0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJs
ZVR5cGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9nZW5lcmljL2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdn
YWJsZVR5cGUuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTEzMmNlMDg4Mjg0
ZGViOWE1NmUxMzQxNjY5ZDVhMmJkZGJlYWMyZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWlu
LWRlYnVnZ2FibGVUeXBlLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLVsKLXsK
LSAgICAiZG9tYWluIjogIkRvbWFpbiIsCi0gICAgImRlYnVnZ2FibGVUeXBlcyI6IFsiamF2YXNj
cmlwdCJdLAotICAgICJjb21tYW5kcyI6IFt7Im5hbWUiOiAiQ29tbWFuZCJ9XSwKLSAgICAiZXZl
bnRzIjogW3sibmFtZSI6ICJFdmVudCIsICJ0YXJnZXRUeXBlcyI6IFsid29ya2VyIl19XQotfQot
XQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2dlbmVyaWMvZmFpbC1vbi1ldmVudC10YXJnZXRUeXBlcy10eXBlLmpzb24gYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWV2
ZW50LXRhcmdldFR5cGVzLXR5cGUuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ZTU0ZWQxZjVjNmJmOWY0YWI0MTVkMTQyMjMwMjg5YTkxZGNmZThjNi4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGVzLXR5
cGUuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotewotICAgICJkb21haW4iOiAi
RG9tYWluIiwKLSAgICAiZXZlbnRzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6
ICJQYWdlT25seSIsCi0gICAgICAgICAgICAidGFyZ2V0VHlwZXMiOiAicGFnZWUiCi0gICAgICAg
IH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGVzLXZhbHVlLmpz
b24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJp
Yy9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGVzLXZhbHVlLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDU4ODRiZmQ3YTZiN2JkNDc0OGIxMDA3Mjk5MGFhZWU1OTBjNjBhNmYuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1ldmVudC10
YXJnZXRUeXBlcy12YWx1ZS5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi17Ci0g
ICAgImRvbWFpbiI6ICJEb21haW4iLAotICAgICJldmVudHMiOiBbCi0gICAgICAgIHsKLSAgICAg
ICAgICAgICJuYW1lIjogIlBhZ2VPbmx5IiwKLSAgICAgICAgICAgICJ0YXJnZXRUeXBlcyI6IFsi
cGFnZWUiXQotICAgICAgICB9Ci0gICAgXQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1udW1iZXItdHlw
ZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tbnVtYmVyLXR5cGVkLW9wdGlv
bmFsLXBhcmFtZXRlci1mbGFnLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcz
MDhkYjk5MmQ2NTI1N2YyYjVjNjMyN2UwY2EzNTQ1MDJkNjE1NGEuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwt
cGFyYW1ldGVyLWZsYWcuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLXsKLSAg
ICAiZG9tYWluIjogIkRhdGFiYXNlIiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAg
ICAgICAgICJpZCI6ICJEYXRhYmFzZUlkIiwKLSAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIs
Ci0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIGlkZW50aWZpZXIgb2YgRGF0YWJh
c2Ugb2JqZWN0LiIKLSAgICAgICAgfQotICAgIF0sCi0gICAgImV2ZW50cyI6IFsKLSAgICAgICAg
ewotICAgICAgICAgICAgIm5hbWUiOiAiZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyIsCi0g
ICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNv
bHVtbk5hbWVzIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogMCB9Ci0gICAgICAgICAg
ICBdCi0gICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLW51bWJlci10eXBlZC1v
cHRpb25hbC10eXBlLW1lbWJlci5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtdHlw
ZS1tZW1iZXIuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWZlYTU1NWVjNGZl
MDg2NjI3OGUxZmNkNzMzNTQyNDJkZWZkMWJkNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJl
ci5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotWwotewotICAgICJkb21haW4i
OiAiRGF0YWJhc2UiLAotICAgICJ0eXBlcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgImlk
IjogIkVycm9yIiwKLSAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCi0gICAgICAgICAgICAi
ZGVzY3JpcHRpb24iOiAiRGF0YWJhc2UgZXJyb3IuIiwKLSAgICAgICAgICAgICJwcm9wZXJ0aWVz
IjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibWVzc2FnZSIsICJ0eXBlIjogInN0cmlu
ZyIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBtZXNzYWdlLiIgfSwKLSAgICAgICAgICAgICAgICB7
ICJuYW1lIjogImNvZGUiLCAidHlwZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9uIjogIkVycm9y
IGNvZGUuIiwgIm9wdGlvbmFsIjogMCB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0KLSAgICBd
Ci19Ci1dCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLXN0cmluZy10eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXIt
ZmxhZy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvZmFpbC1vbi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNv
bgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDAxMmM3OWI2YjM4YzIxZGZmNjA3ZmVj
OWVlOTBiMjgwMzEwZjkwOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2Vu
ZXJpYy9mYWlsLW9uLXN0cmluZy10eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29uCisr
KyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotewotICAgICJkb21haW4iOiAiRGF0YWJhc2Ui
LAotICAgICJ0eXBlcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIkRhdGFiYXNl
SWQiLAotICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKLSAgICAgICAgICAgICJkZXNjcmlw
dGlvbiI6ICJVbmlxdWUgaWRlbnRpZmllciBvZiBEYXRhYmFzZSBvYmplY3QuIgotICAgICAgICB9
Ci0gICAgXSwKLSAgICAiZXZlbnRzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6
ICJkaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzIiwKLSAgICAgICAgICAgICJwYXJhbWV0ZXJz
IjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJz
dHJpbmciLCAib3B0aW9uYWwiOiAidHJ1ZSIgfQotICAgICAgICAgICAgXQotICAgICAgICB9Ci0g
ICAgXQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1i
ZXIuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24KZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhM2VmMjhhOGY4ODE0Y2M2MTdmYjVkNWJjMjEz
MDZkMGFhZDRmZDAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMv
ZmFpbC1vbi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNvbgorKysgL2Rldi9u
dWxsCkBAIC0xLDE2ICswLDAgQEAKLVsKLXsKLSAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKLSAg
ICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJFcnJvciIsCi0gICAg
ICAgICAgICAidHlwZSI6ICJvYmplY3QiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkRh
dGFiYXNlIGVycm9yLiIsCi0gICAgICAgICAgICAicHJvcGVydGllcyI6IFsKLSAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogIm1lc3NhZ2UiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24i
OiAiRXJyb3IgbWVzc2FnZS4iIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2RlIiwg
InR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBjb2RlLiIsICJvcHRpb25h
bCI6ICJmYWxzZSIgfQotICAgICAgICAgICAgXQotICAgICAgICB9Ci0gICAgXQotfQotXQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvZmFpbC1vbi10eXBlLWRlY2xhcmF0aW9uLXVzaW5nLXR5cGUtcmVmZXJlbmNlLmpzb24g
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9m
YWlsLW9uLXR5cGUtZGVjbGFyYXRpb24tdXNpbmctdHlwZS1yZWZlcmVuY2UuanNvbgpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTliNzU5MGNjYzZmNmJjMzQ0M2E0YTI4M2NhNmZjY2Zk
ZjMyNzczNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWls
LW9uLXR5cGUtZGVjbGFyYXRpb24tdXNpbmctdHlwZS1yZWZlcmVuY2UuanNvbgorKysgL2Rldi9u
dWxsCkBAIC0xLDEzICswLDAgQEAKLVsKLXsKLSAgICAiZG9tYWluIjogIlJ1bnRpbWUiLAotICAg
ICJ0eXBlcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIlJlbW90ZU9iamVjdElk
IiwKLSAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCi0gICAgICAgICAgICAiJHJlZiI6ICJT
b21lVHlwZSIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIG9iamVjdCBpZGVu
dGlmaWVyLiIKLSAgICAgICAgfQotICAgIF0KLX0KLV0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tdHlwZS1y
ZWZlcmVuY2UtYXMtcHJpbWl0aXZlLXR5cGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tdHlwZS1yZWZlcmVuY2UtYXMt
cHJpbWl0aXZlLXR5cGUuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGM4M2Ji
ZmNlNDEyYjhiMDlkZjc0N2E4NzVlODAzNmRmZWNjYmMzNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLXR5cGUtcmVmZXJlbmNlLWFzLXByaW1pdGl2
ZS10eXBlLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi17Ci0gICAgImRvbWFp
biI6ICJEYXRhYmFzZSIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAi
aWQiOiAiRGF0YWJhc2VJZCIsCi0gICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAotICAgICAg
ICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBpZGVudGlmaWVyIG9mIERhdGFiYXNlIG9iamVj
dC4iCi0gICAgICAgIH0KLSAgICBdLAotICAgICJldmVudHMiOiBbCi0gICAgICAgIHsKLSAgICAg
ICAgICAgICJuYW1lIjogImRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMiLAotICAgICAgICAg
ICAgInBhcmFtZXRlcnMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1l
cyIsICJ0eXBlIjogIkRhdGFiYXNlSWQiIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfQotICAg
IF0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tdHlwZS13aXRoLWludmFsaWQtcGxhdGZvcm0uanNvbiBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2Zh
aWwtb24tdHlwZS13aXRoLWludmFsaWQtcGxhdGZvcm0uanNvbgpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggYTlmZDJlOTk1NjFkZTBjZTNjNzY2ZWU2ODgyMWNhMjNjNjRkNWM5MS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLXR5cGUtd2l0
aC1pbnZhbGlkLXBsYXRmb3JtLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi17
Ci0gICAgImRvbWFpbiI6ICJSdW50aW1lIiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAg
ICAgICAgICAgICJpZCI6ICJSZW1vdGVPYmplY3RJZCIsCi0gICAgICAgICAgICAidHlwZSI6ICJz
dHJpbmciLAotICAgICAgICAgICAgInBsYXRmb3JtIjogImludmFsaWQiLAotICAgICAgICAgICAg
ImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4iCi0gICAgICAgIH0KLSAg
ICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLXR5cGUtd2l0aC1sb3dlcmNhc2UtbmFtZS5qc29uIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFp
bC1vbi10eXBlLXdpdGgtbG93ZXJjYXNlLW5hbWUuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNTMxOTAxZTRhOWFkOTkzNmIwMWJiYWVkOTdhMWQ0ZGEzNDg0NzhiMC4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLXR5cGUtd2l0aC1s
b3dlcmNhc2UtbmFtZS5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotewotICAg
ICJkb21haW4iOiAiRGF0YWJhc2UiLAotICAgICJ0eXBlcyI6IFsKLSAgICAgICAgewotICAgICAg
ICAgICAgImlkIjogImRhdGFiYXNlSWQiLAotICAgICAgICAgICAgInR5cGUiOiAiaW50ZWdlciIs
Ci0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIGlkZW50aWZpZXIgb2YgRGF0YWJh
c2Ugb2JqZWN0LiIKLSAgICAgICAgfQotICAgIF0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tdW5rbm93
bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLWRlY2xhcmF0aW9uLmpzb24gYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLXVua25vd24t
dHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1kZWNsYXJhdGlvbi5qc29uCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBkNjg4N2EyNzQxMTkwMGE4MGQ1MGYwMDNlYWMzNmMxM2E5OWZhZTU4Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tdW5rbm93
bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLWRlY2xhcmF0aW9uLmpzb24KKysrIC9kZXYvbnVsbApA
QCAtMSwxMiArMCwwIEBACi1bCi17Ci0gICAgImRvbWFpbiI6ICJSdW50aW1lIiwKLSAgICAidHlw
ZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJSZW1vdGVPYmplY3RJZCIsCi0g
ICAgICAgICAgICAidHlwZSI6ICJkcmFnb24iLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjog
IlVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4iCi0gICAgICAgIH0KLSAgICBdCi19Ci1dCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2Vu
ZXJpYy9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1tZW1iZXIuanNvbiBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2Zh
aWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLW1lbWJlci5qc29uCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiODE3ZGI1MDQ0ZGMxZjI4NTU3MDA4YzFmMTc2MWYxYjA2
OGY0Y2U2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwt
b24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLW1lbWJlci5qc29uCisrKyAvZGV2L251
bGwKQEAgLTEsMTUgKzAsMCBAQAotWwotewotICAgICJkb21haW4iOiAiRmFudGFzeSIsCi0gICAg
InR5cGVzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiRHJhZ29uRWdnIiwKLSAg
ICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAi
QSBkcmFnb24gZWdnLiIsCi0gICAgICAgICAgICAicHJvcGVydGllcyI6IFsKLSAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogImNvbG9yIiwgIiRyZWYiOiAiQ29sb3IiIH0KLSAgICAgICAgICAgIF0K
LSAgICAgICAgfQotICAgIF0KLX0KLV0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2dlbmVyYXRlLWRvbWFpbnMtd2l0aC1m
ZWF0dXJlLWd1YXJkcy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2dlbmVyaWMvZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpz
b24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3Y2Y4ZTU4MmY2NWFlNmZjNjE1Njky
ODgyY2IwZjY1NzQ2MDEwOGEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KKysrIC9kZXYv
bnVsbApAQCAtMSwzNiArMCwwIEBACi1bCi17Ci0gICAgImRvbWFpbiI6ICJOZXR3b3JrMSIsCi0g
ICAgImZlYXR1cmVHdWFyZCI6ICJQTEFURk9STShXRUJfQ09NTUFORFMpIiwKLSAgICAiY29tbWFu
ZHMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJjZSIsCi0g
ICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9hZHMgYSByZXNvdXJjZSBpbiB0aGUgY29udGV4
dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFnZSB3aXRob3V0IGNyb3NzIG9yaWdpbiBj
aGVja3MuIgotICAgICAgICB9Ci0gICAgXQotfSwKLXsKLSAgICAiZG9tYWluIjogIk5ldHdvcmsy
IiwKLSAgICAiZmVhdHVyZUd1YXJkIjogIlBMQVRGT1JNKFdFQl9UWVBFUykiLAotICAgICJ0eXBl
cyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIk5ldHdvcmtFcnJvciIsCi0gICAg
ICAgICAgICAidHlwZSI6ICJvYmplY3QiLAotICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCi0g
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJtZXNzYWdlIiwgInR5cGUiOiAic3RyaW5nIiwgImRl
c2NyaXB0aW9uIjogIkVycm9yIG1lc3NhZ2UuIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAiY29kZSIsICJ0eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgY29kZS4i
IH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfQotICAgIF0KLX0sCi17Ci0gICAgImRvbWFpbiI6
ICJOZXR3b3JrMyIsCi0gICAgImZlYXR1cmVHdWFyZCI6ICJQTEFURk9STShXRUJfRVZFTlRTKSIs
Ci0gICAgImV2ZW50cyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAicmVzb3Vy
Y2VMb2FkZWQiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkEgcmVzb3VyY2Ugd2FzIGxv
YWRlZC4iCi0gICAgICAgIH0KLSAgICBdCi19Ci1dCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9zYW1lLXR5cGUtaWQtZGlm
ZmVyZW50LWRvbWFpbi5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2dlbmVyaWMvc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2JmNGRmZjVjY2MyOWQwZThjMWZhNGIyZGQzMjgz
ZTc3MTYzMmM3ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9z
YW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsMjIg
KzAsMCBAQAotWwotewotICAgICJkb21haW4iOiAiUnVudGltZSIsCi0gICAgInR5cGVzIjogWwot
ICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiUmVtb3RlT2JqZWN0SWQiLAotICAgICAgICAg
ICAgInR5cGUiOiAic3RyaW5nIiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUg
b2JqZWN0IGlkZW50aWZpZXIuIgotICAgICAgICB9Ci0gICAgXQotfSwKLXsKLSAgICAiZG9tYWlu
IjogIlJ1bnRpbWUyIiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJp
ZCI6ICJSZW1vdGVPYmplY3RJZCIsCi0gICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAotICAg
ICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4iCi0gICAg
ICAgIH0KLSAgICBdCi19Ci1dCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9zaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRl
cnMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAyMGEwYzE1NTI3NTBmNjI4Mjg4Y2ZmNDE5Mzk2YmQ2ZjZhZjc0OWZl
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL3NoYWRvd2VkLW9w
dGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAot
ewotICAgICJkb21haW4iOiAiUnVudGltZSIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7Ci0g
ICAgICAgICAgICAiaWQiOiAiS2V5UGF0aCIsCi0gICAgICAgICAgICAidHlwZSI6ICJvYmplY3Qi
LAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIktleSBwYXRoLiIsCi0gICAgICAgICAgICAi
cHJvcGVydGllcyI6IFsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJu
YW1lIjogInR5cGUiLAotICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAotICAg
ICAgICAgICAgICAgICAgICAiZW51bSI6IFsibnVsbCIsICJzdHJpbmciLCAiYXJyYXkiXSwKLSAg
ICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIktleSBwYXRoIHR5cGUuIgotICAgICAg
ICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibmFt
ZSI6ICJzdHJpbmciLAotICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAotICAg
ICAgICAgICAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgICAgICAgICAgICAgICAi
ZGVzY3JpcHRpb24iOiAiU3RyaW5nIHZhbHVlLiIKLSAgICAgICAgICAgICAgICB9LAotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiYXJyYXkiLAotICAgICAg
ICAgICAgICAgICAgICAidHlwZSI6ICJhcnJheSIsCi0gICAgICAgICAgICAgICAgICAgICJvcHRp
b25hbCI6IHRydWUsCi0gICAgICAgICAgICAgICAgICAgICJpdGVtcyI6IHsgInR5cGUiOiAic3Ry
aW5nIiB9LAotICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQXJyYXkgdmFsdWUu
IgotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfQotICAgIF0KLX0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9nZW5lcmljL3Nob3VsZC1zdHJpcC1jb21tZW50cy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvc2hvdWxkLXN0cmlwLWNvbW1lbnRz
Lmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjZTFkY2ZjNjFjZDBiYTA5NmNh
OTE4YTQ0OGJlMTMzOTMzYzIwMWEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw1
ICswLDAgQEAKLXsKLSAgICAvKiBhYm92ZSAqLwotICAgIC8qIGJlZm9yZSAqLyAiZG9tYWluIiAv
KiBpbiAqLyA6IC8qIGluICovICJDb21tZW50IiAvKiBhZnRlciAqLwotICAgIC8qIGJlbG93ICov
Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy90eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNv
biBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBjYmM5ZDUzOTQ3OGRiNDk1Yzk2MDY3ZWNkNTRhOTViZTUyZjhk
MDcwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL3R5cGUtZGVj
bGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCisrKyAvZGV2L251bGwKQEAgLTEs
MTAgKzAsMCBAQAotewotICAgICJkb21haW4iOiAiUnVudGltZSIsCi0gICAgInR5cGVzIjogWwot
ICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiUmVtb3RlT2JqZWN0SWQiLAotICAgICAgICAg
ICAgInR5cGUiOiAiaW50ZWdlciIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVl
IG9iamVjdCBpZGVudGlmaWVyLiIKLSAgICAgICAgfQotICAgIF0KLX0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL3R5cGUt
ZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpz
b24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmYjA4YmQ5NDBiNjRmYjY2MDM5NjVj
ZTFiMDRkM2ZjOTc0OWVhOTAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KKysrIC9kZXYvbnVsbApAQCAt
MSw1MCArMCwwIEBACi1bCi17Ci0gICAgImRvbWFpbiI6ICJEZWJ1Z2dlciIsCi0gICAgInR5cGVz
IjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiQnJlYWtwb2ludElkIiwKLSAgICAg
ICAgICAgICJ0eXBlIjogImludGVnZXIiCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAg
ICAgICJpZCI6ICJSZWFzb24iLAotICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKLSAgICAg
ICAgICAgICJlbnVtIjogWyJEaWVkIiwgIkZhaW50ZWQiLCAiSHVuZ3J5Il0KLSAgICAgICAgfQot
ICAgIF0KLX0sCi17Ci0gICAgImRvbWFpbiI6ICJSdW50aW1lIiwKLSAgICAidHlwZXMiOiBbCi0g
ICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJPYmplY3RJZCIsCi0gICAgICAgICAgICAidHlw
ZSI6ICJpbnRlZ2VyIgotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAi
THVja3lOdW1iZXJzIiwKLSAgICAgICAgICAgICJ0eXBlIjogImFycmF5IiwKLSAgICAgICAgICAg
ICJpdGVtcyI6IHsgInR5cGUiOiAiaW50ZWdlciIgfQotICAgICAgICB9LAotICAgICAgICB7Ci0g
ICAgICAgICAgICAiaWQiOiAiQmFieU5hbWVzIiwKLSAgICAgICAgICAgICJ0eXBlIjogImFycmF5
IiwKLSAgICAgICAgICAgICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9Ci0gICAgICAgIH0s
Ci0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJOZXdPYmplY3RzIiwKLSAgICAgICAgICAg
ICJ0eXBlIjogImFycmF5IiwKLSAgICAgICAgICAgICJpdGVtcyI6IHsgIiRyZWYiOiAiT2JqZWN0
SWQiIH0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIk9sZE9iamVj
dHMiLAotICAgICAgICAgICAgInR5cGUiOiAiYXJyYXkiLAotICAgICAgICAgICAgIml0ZW1zIjog
eyAiJHJlZiI6ICJEZWJ1Z2dlci5CcmVha3BvaW50SWQiIH0KLSAgICAgICAgfSwKLSAgICAgICAg
ewotICAgICAgICAgICAgImlkIjogIlN0b3BSZWFzb25zIiwKLSAgICAgICAgICAgICJ0eXBlIjog
ImFycmF5IiwKLSAgICAgICAgICAgICJpdGVtcyI6IHsgIiRyZWYiOiAiRGVidWdnZXIuUmVhc29u
IiB9Ci0gICAgICAgIH0KLSAgICBdCi19Ci1dCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy90eXBlLWRlY2xhcmF0aW9uLWVu
dW0tdHlwZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2dlbmVyaWMvdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggOWYwYWVlOWM5MWI5NWFiYWYzODdlNzJhOTFhMzMzOGI1NzlkYTlh
YS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy90eXBlLWRlY2xh
cmF0aW9uLWVudW0tdHlwZS5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotewot
ICAgICJkb21haW4iOiAiUnVudGltZSIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7Ci0gICAg
ICAgICAgICAiaWQiOiAiRmFybUFuaW1hbHMiLAotICAgICAgICAgICAgInR5cGUiOiAic3RyaW5n
IiwKLSAgICAgICAgICAgICJlbnVtIjogWyJQaWdzIiwgIkNvd3MiLCAiQ2F0cyIsICJIZW5zIl0K
LSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIlR3b0xlZ2dlZEFuaW1h
bHMiLAotICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKLSAgICAgICAgICAgICJlbnVtIjog
WyJEdWNrcyIsICJIZW5zIiwgIkNyb3dzIiwgIkZsYW1pbmdvcyJdCi0gICAgICAgIH0KLSAgICBd
Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy90eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24gYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy90eXBlLWRlY2xh
cmF0aW9uLW9iamVjdC10eXBlLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJj
NDNjMzMwOTkyZGU2NzVkYjgwZDI5OGZmMzMxYTZlZjU4OTkzNWYuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5q
c29uCisrKyAvZGV2L251bGwKQEAgLTEsMTAwICswLDAgQEAKLVsKLXsKLSAgICAiZG9tYWluIjog
IkRhdGFiYXNlIiwKLSAgICAiZGVzY3JpcHRpb24iOiAiVGVzdCB0eXBlIGJ1aWxkZXIgZ2VuZXJh
dGlvbiBvZiB2YXJpb3VzIG9iamVjdCB0eXBlcy4iLAotICAgICJ0eXBlcyI6IFsKLSAgICAgICAg
ewotICAgICAgICAgICAgImlkIjogIkVycm9yIiwKLSAgICAgICAgICAgICJ0eXBlIjogIm9iamVj
dCIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRGF0YWJhc2UgZXJyb3IuIiwKLSAgICAg
ICAgICAgICJwcm9wZXJ0aWVzIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibWVzc2Fn
ZSIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBtZXNzYWdlLiIgfSwK
LSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvZGUiLCAidHlwZSI6ICJpbnRlZ2VyIiwgImRl
c2NyaXB0aW9uIjogIkVycm9yIGNvZGUuIiB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0sCi0g
ICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJFcnJvckxpc3QiLAotICAgICAgICAgICAgInR5
cGUiOiAiYXJyYXkiLAotICAgICAgICAgICAgIml0ZW1zIjogeyAiJHJlZiI6ICJFcnJvciIgfQot
ICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiTW91c2VCdXR0b24iLAot
ICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6
ICJFbnVtZXJhdGVzIGRpZmZlcmVudCBtb3VzZSBidXR0b25zIHRoYXQgY2FuIGJlIHVzZWQuIiwK
LSAgICAgICAgICAgICJlbnVtIjogWwotICAgICAgICAgICAgICAgICJOb25lIiwKLSAgICAgICAg
ICAgICAgICAiTGVmdCIsCi0gICAgICAgICAgICAgICAgIk1pZGRsZSIsCi0gICAgICAgICAgICAg
ICAgIlJpZ2h0IgotICAgICAgICAgICAgXQotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAg
ICAgICAiaWQiOiAiT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUiLAotICAgICAgICAgICAgInR5cGUi
OiAib2JqZWN0IiwKLSAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwotICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJvcHRpb25hbCI6IHRy
dWUsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCi0gICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJidXR0b25zIiwgInR5cGUiOiAiYXJyYXkiLCAib3B0aW9uYWwiOiB0cnVlLCAiaXRl
bXMiOiB7ICIkcmVmIjogIk1vdXNlQnV0dG9uIiB9IH0sCi0gICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJkaXJlY3Rpb25hbGl0eSIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJMVFIiLCAi
UlRMIl0sICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5v
dGVzIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFsIjog
dHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2Jq
ZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5
bG9hZCIsICJ0eXBlIjogImFueSIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogImVycm9yIiwgIiRyZWYiOiAiRXJyb3IiLCAib3B0aW9uYWwiOiB0cnVlIH0s
Ci0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJlcnJvckxpc3QiLCAiJHJlZiI6ICJFcnJvckxp
c3QiLCAib3B0aW9uYWwiOiB0cnVlIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfSwKLSAgICAg
ICAgewotICAgICAgICAgICAgImlkIjogIlBhcmFtZXRlckJ1bmRsZSIsCi0gICAgICAgICAgICAi
dHlwZSI6ICJvYmplY3QiLAotICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCi0gICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjog
eyAidHlwZSI6ICJzdHJpbmciIH0gfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImJ1dHRv
bnMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgIiRyZWYiOiAiTW91c2VCdXR0b24iIH0g
fSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRpcmVjdGlvbmFsaXR5IiwgInR5cGUiOiAi
c3RyaW5nIiwgImVudW0iOiBbIkxUUiIsICJSVEwiXSB9LAotICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciIH0sCi0gICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiIH0sCi0gICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiIH0sCi0gICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiB9LAotICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAiZXJyb3IiLCAiJHJlZiI6ICJFcnJvciIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1l
IjogImVycm9yTGlzdCIsICIkcmVmIjogIkVycm9yTGlzdCIgfQotICAgICAgICAgICAgXQotICAg
ICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiT2JqZWN0V2l0aFByb3BlcnR5
TmFtZUNvbmZsaWN0cyIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQ29uZmxpY3RlZCBu
YW1lcyBtYXkgY2F1c2UgZ2VuZXJhdGVkIGdldHRlcnMvc2V0dGVycyB0byBjbGFzaCB3aXRoIGJ1
aWx0LWluIEluc3BlY3Rvck9iamVjdCBtZXRob2RzLiIsCi0gICAgICAgICAgICAidHlwZSI6ICJv
YmplY3QiLAotICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCi0gICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJpbnRlZ2VyIiwgInR5cGUiOiAic3RyaW5nIiB9LAotICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAiYXJyYXkiLCAidHlwZSI6ICJzdHJpbmciIH0sCi0gICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJzdHJpbmciLCAidHlwZSI6ICJzdHJpbmciIH0sCi0gICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJ2YWx1ZSIsICJ0eXBlIjogInN0cmluZyIgfSwKLSAgICAgICAgICAgICAgICB7ICJu
YW1lIjogIm9iamVjdCIsICJ0eXBlIjogInN0cmluZyIgfQotICAgICAgICAgICAgXQotICAgICAg
ICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiRHVtbXlPYmplY3QiLAotICAgICAg
ICAgICAgImRlc2NyaXB0aW9uIjogIkFuIG9wZW4gb2JqZWN0IHRoYXQgZG9lc24ndCBoYXZlIGFu
eSBwcmVkZWZpbmVkIGZpZWxkcy4iLAotICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IgotICAg
ICAgICB9Ci0gICAgXQotfSwKLXsKLSAgICAiZG9tYWluIjogIlRlc3QiLAotICAgICJkZXNjcmlw
dGlvbiI6ICJUZXN0IHRoZSBnZW5lcmF0aW9uIG9mIHNwZWNpYWwgYmVoYXZpb3JzIHRoYXQgb25s
eSBhcHBseSB0byBzcGVjaWZpYyBjbGFzc2VzLiIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7
Ci0gICAgICAgICAgICAiaWQiOiAiUGFyYW1ldGVyQnVuZGxlIiwKLSAgICAgICAgICAgICJ0eXBl
IjogIm9iamVjdCIsCi0gICAgICAgICAgICAicHJvcGVydGllcyI6IFsKLSAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogImRpcmVjdGlvbmFsaXR5IiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBb
IkxUUiIsICJSVEwiXSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYnV0dG9ucyIsICJ0
eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAiJHJlZiI6ICJEYXRhYmFzZS5Nb3VzZUJ1dHRvbiIg
fSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJh
cnJheSIsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCi0gICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIgfSwKLSAgICAgICAgICAgICAgICB7
ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIgfSwKLSAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIgfSwKLSAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiIH0sCi0gICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJlcnJvciIsICIkcmVmIjogIkRhdGFiYXNlLkVycm9yIiB9Ci0gICAgICAgICAg
ICBdCi0gICAgICAgIH0KLSAgICBdCi19Ci1dCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy90eXBlLXJlcXVpcmluZy1ydW50
aW1lLWNhc3RzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy90eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzZDk0YmU4OTdkMjJjYzA1OGJiNjQ2ZmVjZDlhNDczMDM3
YjZiOTIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvdHlwZS1y
ZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBA
QAotWwotewotICAgICJkb21haW4iOiAiVGVzdCIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7
Ci0gICAgICAgICAgICAiaWQiOiAiVHlwZU5lZWRpbmdDYXN0IiwKLSAgICAgICAgICAgICJ0eXBl
IjogIm9iamVjdCIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQSBkdW1teSB0eXBlIHRo
YXQgcmVxdWlyZXMgcnVudGltZSBjYXN0cywgYW5kIGZvcmNlcyBub24tcHJpbWl0aXZlIHJlZmVy
ZW5jZWQgdHlwZXMgdG8gYWxzbyBlbWl0IHJ1bnRpbWUgY2FzdCBoZWxwZXJzLiIsCi0gICAgICAg
ICAgICAicHJvcGVydGllcyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInN0cmluZyIs
ICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJTdHJpbmcgbWVtYmVyLiIgfSwKLSAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogIm51bWJlciIsICJ0eXBlIjogImludGVnZXIiLCAiZGVz
Y3JpcHRpb24iOiAiTnVtYmVyIG1lbWJlci4iIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJhbmltYWxzIiwgIiRyZWYiOiAiQ2FzdGVkQW5pbWFscyIsICJkZXNjcmlwdGlvbiI6ICJFbnVt
IG1lbWJlci4iIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJpZCIsICIkcmVmIjogIkNh
c3RlZE9iamVjdElkIiwgImRlc2NyaXB0aW9uIjogIkFsaWFzZWQgbWVtYmVyLiIgfSwKLSAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogInRyZWUiLCAiJHJlZiI6ICJSZWN1cnNpdmVPYmplY3QxIiwg
ImRlc2NyaXB0aW9uIjogIlJlY3Vyc2l2ZSBvYmplY3QgbWVtYmVyLiIgfQotICAgICAgICAgICAg
XQotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiQ2FzdGVkT2JqZWN0
SWQiLAotICAgICAgICAgICAgInR5cGUiOiAiaW50ZWdlciIKLSAgICAgICAgfSwKLSAgICAgICAg
ewotICAgICAgICAgICAgImlkIjogIlVuY2FzdGVkT2JqZWN0SWQiLAotICAgICAgICAgICAgInR5
cGUiOiAiaW50ZWdlciIKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjog
IlVuY2FzdGVkQW5pbWFscyIsCi0gICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAotICAgICAg
ICAgICAgImVudW0iOiBbIlBpZ3MiLCAiQ293cyIsICJDYXRzIiwgIkhlbnMiXQotICAgICAgICB9
LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiQ2FzdGVkQW5pbWFscyIsCi0gICAgICAg
ICAgICAidHlwZSI6ICJzdHJpbmciLAotICAgICAgICAgICAgImVudW0iOiBbIkR1Y2tzIiwgIkhl
bnMiLCAiQ3Jvd3MiLCAiRmxhbWluZ29zIl0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAg
ICAgICAgImlkIjogIlJlY3Vyc2l2ZU9iamVjdDEiLAotICAgICAgICAgICAgInR5cGUiOiAib2Jq
ZWN0IiwKLSAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwotICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAib2JqIiwgIiRyZWYiOiAiUmVjdXJzaXZlT2JqZWN0MiIsICJvcHRpb25hbCI6IHRydWUg
fQotICAgICAgICAgICAgXQotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQi
OiAiUmVjdXJzaXZlT2JqZWN0MiIsCi0gICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAotICAg
ICAgICAgICAgInByb3BlcnRpZXMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJvYmoi
LCAiJHJlZiI6ICJSZWN1cnNpdmVPYmplY3QxIiwgIm9wdGlvbmFsIjogdHJ1ZSB9Ci0gICAgICAg
ICAgICBdCi0gICAgICAgIH0KLSAgICBdCi19Ci1dCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy90eXBlLXdpdGgtb3Blbi1w
YXJhbWV0ZXJzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy90eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24KZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDk5YjAyMjBkMzEyYjQ2NGM0ODE0MzdiNTcxNjUzZjgwOGRmZThm
YjcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvdHlwZS13aXRo
LW9wZW4tcGFyYW1ldGVycy5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotewot
ICAgICJkb21haW4iOiAiVGVzdCIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7Ci0gICAgICAg
ICAgICAiaWQiOiAiTm9PcGVuUGFyYW1ldGVycyIsCi0gICAgICAgICAgICAidHlwZSI6ICJvYmpl
Y3QiLAotICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJvbmUiLCAidHlwZSI6ICJudW1iZXIiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJ0d28iLCAidHlwZSI6ICJudW1iZXIiIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfSwKLSAg
ICAgICAgewotICAgICAgICAgICAgImlkIjogIk9wZW5QYXJhbWV0ZXJzIiwKLSAgICAgICAgICAg
ICJ0eXBlIjogIm9iamVjdCIsCi0gICAgICAgICAgICAicHJvcGVydGllcyI6IFsKLSAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogImFscGhhIiwgInR5cGUiOiAibnVtYmVyIiB9LAotICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAiYmV0YSIsICJ0eXBlIjogIm51bWJlciIgfQotICAgICAgICAgICAg
XQotICAgICAgICB9Ci0gICAgXQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvdmVyc2lvbi5qc29uIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvdmVyc2lvbi5qc29u
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MDdhNWQ5MDE3NmI4ZmRmMzM3MThiMzJk
YjMzYjNhMGFhMzU2MDA5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmljL3ZlcnNpb24uanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAoteyJkb21haW5z
IjpbCi17Ci0gICAgImRvbWFpbiI6ICJWZXJzaW9uRG9tYWluIiwKLSAgICAidmVyc2lvbiI6IDQy
Ci19Ci1dfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2lvcy9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2lvcy9kZWZpbml0aW9ucy13
aXRoLW1hYy1wbGF0Zm9ybS5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MTdm
MTM1ZWU1YTcyMDk3YWUzZTEzMWJkZDQwZTYwMTY5OGFiMTBjLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9pb3MvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgor
KysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIk5ldHdvcmsi
LAotICAgICJ0eXBlcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIk5ldHdvcmtF
cnJvciIsCi0gICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAotICAgICAgICAgICAgInBsYXRm
b3JtIjogIm1hY29zIiwKLSAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwotICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAibWVzc2FnZSIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6
ICJFcnJvciBtZXNzYWdlLiIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvZGUiLCAi
dHlwZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIGNvZGUuIiB9Ci0gICAgICAg
ICAgICBdCi0gICAgICAgIH0KLSAgICBdLAotICAgICJjb21tYW5kcyI6IFsKLSAgICAgICAgewot
ICAgICAgICAgICAgIm5hbWUiOiAibG9hZFJlc291cmNlIiwKLSAgICAgICAgICAgICJwbGF0Zm9y
bSI6ICJtYWNvcyIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9hZHMgYSByZXNvdXJj
ZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFnZSB3aXRob3V0
IGNyb3NzIG9yaWdpbiBjaGVja3MuIgotICAgICAgICB9Ci0gICAgXSwKLSAgICAiZXZlbnRzIjog
WwotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJyZXNvdXJjZUxvYWRlZCIsCi0gICAg
ICAgICAgICAicGxhdGZvcm0iOiAibWFjb3MiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjog
IkEgcmVzb3VyY2Ugd2FzIGxvYWRlZC4iCi0gICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvaW9zL2V4cGVj
dGVkL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24tcmVzdWx0IGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2lvcy9leHBlY3RlZC9kZWZpbml0
aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uLXJlc3VsdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggZDRjMGZlM2ZlM2M2YmJkYzEwMzYyZDFlMGMzOWY5OGM3YWMzNmU1ZC4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvaW9zL2V4cGVjdGVkL2RlZmluaXRpb25zLXdp
dGgtbWFjLXBsYXRmb3JtLmpzb24tcmVzdWx0CisrKyAvZGV2L251bGwKQEAgLTEsODcwICswLDAg
QEAKLSMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0jIyMgRW5kIEZp
bGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29s
VHlwZXMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVy
Lmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlz
cGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8
QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0g
V1RGTW92ZShkaXNwYXRjaGVyKTsgfQotICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlz
cGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KLXBy
aXZhdGU6Ci0gICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVy
OwotfTsKLQotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSNlbmRpZiAvLyBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSMjIyBFbmQgRmlsZTogVGVzdEFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2Vu
ZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0
aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2Jq
ZWN0cy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNw
ZWN0b3IgewotCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQotCi0KLX0gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLQot
IyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYv
SlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQotI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIK
LSNlbmRpZgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMj
IyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQot
I2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVl
cy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVj
dG9yIHsKLQotY2xhc3MgRnJvbnRlbmRSb3V0ZXI7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi1uYW1lc3BhY2Ug
UHJvdG9jb2wgewotCi0KLQotCi0KLQotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQot
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVj
dHMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0KLSNpbmNsdWRl
IDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVz
cGFjZSBJbnNwZWN0b3IgewotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotfSAvLyBuYW1l
c3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
ZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5o
PgotCi0KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLQot
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3Jt
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9y
dCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIK
LQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW5jbHVkZSAiVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLQotbmFt
ZXNwYWNlIEluc3BlY3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVz
dFByb3RvY29sLmg+Ci0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQot
QGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKLUBlbmQKLQot
Ci0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbi5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2lt
cG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgotI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgotCi11c2luZyBu
YW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xs
ZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxl
SW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5p
dF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250
cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7
Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotQGVu
ZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVz
dFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zLmgiCi0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5z
cGVjdG9yOwotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5t
bQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPEZvdW5kYXRpb24v
Rm91bmRhdGlvbi5oPgotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2Jq
ZWN0Lmg+Ci0KLQotCi0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbFBs
YXRmb3JtKSB7Ci0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1BbGwsCi0gICAgVGVzdFByb3RvY29s
UGxhdGZvcm1HZW5lcmljLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TLAotICAgIFRlc3RQ
cm90b2NvbFBsYXRmb3JtTWFjT1MsCi19OwotCi0KLQotCi0KLQotCi0KLQotCi0jaW1wb3J0IDxX
ZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+Ci0KLSMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bEludGVybmFsLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9u
cy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3Rv
Y29sSlNPTk9iamVjdFByaXZhdGUuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRh
YmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQot
Ci0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29s
LmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+
Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5
cGU+Ci1PcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJp
bmcmIHZhbHVlKTsKLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2Nv
bFBsYXRmb3JtIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFBy
b3RvY29sUGxhdGZvcm1BbGw6Ci0gICAgICAgIHJldHVybiAiYWxsIl9zOwotICAgIGNhc2UgVGVz
dFByb3RvY29sUGxhdGZvcm1HZW5lcmljOgotICAgICAgICByZXR1cm4gImdlbmVyaWMiX3M7Ci0g
ICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzoKLSAgICAgICAgcmV0dXJuICJpb3MiX3M7
Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOgotICAgICAgICByZXR1cm4gIm1h
Y29zIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90
b2NvbFBsYXRmb3JtPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsK
LSAgICBpZiAodmFsdWUgPT0gImFsbCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0
Zm9ybUFsbDsKLSAgICBpZiAodmFsdWUgPT0gImdlbmVyaWMiKQotICAgICAgICByZXR1cm4gVGVz
dFByb3RvY29sUGxhdGZvcm1HZW5lcmljOwotICAgIGlmICh2YWx1ZSA9PSAiaW9zIikKLSAgICAg
ICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOwotICAgIGlmICh2YWx1ZSA9PSAibWFj
b3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzsKLSAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0
UHJvdG9jb2xUeXBlUGFyc2VyLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xK
U09OT2JqZWN0UHJpdmF0ZS5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLQot
Ci0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJ
bnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNp
bXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0jaW1w
b3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNp
bmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5
cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvbWFjL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24gYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvbWFjL2RlZmluaXRpb25zLXdp
dGgtbWFjLXBsYXRmb3JtLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxN2Yx
MzVlZTVhNzIwOTdhZTNlMTMxYmRkNDBlNjAxNjk4YWIxMGMuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL21hYy9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCisr
KyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotewotICAgICJkb21haW4iOiAiTmV0d29yayIs
Ci0gICAgInR5cGVzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiTmV0d29ya0Vy
cm9yIiwKLSAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCi0gICAgICAgICAgICAicGxhdGZv
cm0iOiAibWFjb3MiLAotICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCi0gICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJtZXNzYWdlIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjog
IkVycm9yIG1lc3NhZ2UuIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29kZSIsICJ0
eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgY29kZS4iIH0KLSAgICAgICAg
ICAgIF0KLSAgICAgICAgfQotICAgIF0sCi0gICAgImNvbW1hbmRzIjogWwotICAgICAgICB7Ci0g
ICAgICAgICAgICAibmFtZSI6ICJsb2FkUmVzb3VyY2UiLAotICAgICAgICAgICAgInBsYXRmb3Jt
IjogIm1hY29zIiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBhIHJlc291cmNl
IGluIHRoZSBjb250ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGluc3BlY3RlZCBwYWdlIHdpdGhvdXQg
Y3Jvc3Mgb3JpZ2luIGNoZWNrcy4iCi0gICAgICAgIH0KLSAgICBdLAotICAgICJldmVudHMiOiBb
Ci0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogInJlc291cmNlTG9hZGVkIiwKLSAgICAg
ICAgICAgICJwbGF0Zm9ybSI6ICJtYWNvcyIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAi
QSByZXNvdXJjZSB3YXMgbG9hZGVkLiIKLSAgICAgICAgfQotICAgIF0KLX0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9tYWMvZXhwZWN0
ZWQvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvbWFjL2V4cGVjdGVkL2RlZmluaXRp
b25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24tcmVzdWx0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBjNmU2OGY0YTlhZWRkM2Q4NDM2NzBhMjJmMGNiODM1MzE3ZWY2NDA0Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9tYWMvZXhwZWN0ZWQvZGVmaW5pdGlvbnMtd2l0
aC1tYWMtcGxhdGZvcm0uanNvbi1yZXN1bHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMjE3ICswLDAg
QEAKLSMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLS8vIE5ldHdv
cmsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIk5ldHdvcmsiLCBudWxsKTsKLUlu
c3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrLmxvYWRSZXNvdXJjZSIsIG51
bGwsIFtdLCBbXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnQoIk5ldHdvcmsucmVz
b3VyY2VMb2FkZWQiLCBudWxsLCBbXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyTmV0d29y
a0Rpc3BhdGNoZXIgPSBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRGlzcGF0Y2hlci5iaW5kKElu
c3BlY3RvckJhY2tlbmQsICJOZXR3b3JrIik7Ci1JbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9t
YWluKCJOZXR3b3JrIiwgbnVsbCk7Ci0jIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21t
YW5kcy5qcwotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVy
cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1t
YWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKLSNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0
b3IgewotCi1jbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAg
dm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlz
cGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQot
ICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJu
IG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPEJhY2tl
bmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwotfTsKLQotCi1jbGFzcyBBbHRlcm5h
dGVOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXIgewotcHVibGljOgotICAgIHZpcnR1YWwgfkFsdGVybmF0ZU5ldHdvcmtCYWNrZW5kRGlz
cGF0Y2hlcigpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UobG9uZyBjYWxsSWQp
ID0gMDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jZW5kaWYgLy8gRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jIyMgRW5kIEZpbGU6IFRlc3RBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmRE
aXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlv
bnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVj
dHMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVj
dG9yIHsKLQotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KLSNpZiBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLWNsYXNzIEFsdGVybmF0ZU5ldHdvcmtCYWNrZW5k
RGlzcGF0Y2hlcjsKLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKLQotY2xhc3MgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7Ci1wdWJsaWM6
Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZShFcnJvclN0cmluZyYpID0gMDsKLXByb3Rl
Y3RlZDoKLSAgICB2aXJ0dWFsIH5OZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7Ci19
OwotCi1jbGFzcyBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxl
bWVudGFsQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8TmV0d29y
a0JhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBOZXR3b3JrQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJ
ZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkgZmlu
YWw7Ci1wcml2YXRlOgotICAgIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkLCBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQotcHVibGljOgotICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0
Y2hlcihBbHRlcm5hdGVOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNo
ZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQotcHJp
dmF0ZToKLSAgICBBbHRlcm5hdGVOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIqIG1fYWx0ZXJuYXRl
RGlzcGF0Y2hlciB7IG51bGxwdHIgfTsKLSNlbmRpZgotcHJpdmF0ZToKLSAgICBOZXR3b3JrQmFj
a2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImLCBOZXR3b3JrQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyKik7Ci0gICAgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2Vu
dCB7IG51bGxwdHIgfTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBG
aWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNr
ZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVm
aW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEJh
Y2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
RnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUg
PHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQot
I2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotI2luY2x1ZGUgIlRl
c3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgSW5z
cGVjdG9yIHsKLQotTmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6fk5ldHdvcmtCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KLQotUmVmPE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hl
cj4gTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImIGJh
Y2tlbmREaXNwYXRjaGVyLCBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkK
LXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIoYmFj
a2VuZERpc3BhdGNoZXIsIGFnZW50KSk7Ci19Ci0KLU5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjo6
TmV0d29ya0JhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0
Y2hlciwgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCi0gICAgOiBTdXBw
bGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKLSAgICAsIG1fYWdl
bnQoYWdlbnQpCi17Ci0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVy
Rm9yRG9tYWluKCJOZXR3b3JrIl9zLCB0aGlzKTsKLX0KLQotdm9pZCBOZXR3b3JrQmFja2VuZERp
c3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwg
UmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQotewotICAgIFJlZjxOZXR3b3JrQmFja2VuZERp
c3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwotCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFy
YW1ldGVyczsKLSAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFyYW1ldGVycyk7
Ci0KLSAgICBpZiAobWV0aG9kID09ICJsb2FkUmVzb3VyY2UiKQotICAgICAgICBsb2FkUmVzb3Vy
Y2UocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKLSAgICBlbHNlCi0gICAgICAgIG1f
YmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6
Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmsuIiArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQi
KTsKLX0KLQotdm9pZCBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZShsb25n
IHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKLXsKLSNpZiBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVy
KSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlKHJlcXVlc3RJ
ZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIEVycm9yU3RyaW5nIGVy
cm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRl
KCk7Ci0gICAgbV9hZ2VudC0+bG9hZFJlc291cmNlKGVycm9yKTsKLQotICAgIGlmICghZXJyb3Iu
bGVuZ3RoKCkpCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1
ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2Vy
dmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVk
ZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Igewot
Ci1jbGFzcyBGcm9udGVuZFJvdXRlcjsKLQotY2xhc3MgTmV0d29ya0Zyb250ZW5kRGlzcGF0Y2hl
ciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgTmV0d29ya0Zy
b250ZW5kRGlzcGF0Y2hlcihGcm9udGVuZFJvdXRlciYgZnJvbnRlbmRSb3V0ZXIpIDogbV9mcm9u
dGVuZFJvdXRlcihmcm9udGVuZFJvdXRlcikgeyB9Ci0gICAgdm9pZCByZXNvdXJjZUxvYWRlZCgp
OwotcHJpdmF0ZToKLSAgICBGcm9udGVuZFJvdXRlciYgbV9mcm9udGVuZFJvdXRlcjsKLX07Ci0K
LX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNw
YXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1w
bGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5o
IgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Igewot
Ci12b2lkIE5ldHdvcmtGcm9udGVuZERpc3BhdGNoZXI6OnJlc291cmNlTG9hZGVkKCkKLXsKLSAg
ICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiTmV0d29yay5yZXNvdXJj
ZUxvYWRlZCJfcyk7Ci0KLSAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChqc29uTWVzc2Fn
ZS0+dG9KU09OU3RyaW5nKCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMj
IEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbE9iamVjdHMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi1uYW1lc3BhY2UgUHJvdG9jb2wg
ewotCi0KLQotLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCi1uYW1lc3BhY2UgTmV0d29yayB7Ci1j
bGFzcyBOZXR3b3JrRXJyb3I7Ci19IC8vIE5ldHdvcmsKLS8vIEVuZCBvZiBmb3J3YXJkIGRlY2xh
cmF0aW9ucy4KLQotCi0KLQotbmFtZXNwYWNlIE5ldHdvcmsgewotY2xhc3MgTmV0d29ya0Vycm9y
IDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewotcHVibGljOgotICAgIGVudW0gewotICAgICAg
ICBOb0ZpZWxkc1NldCA9IDAsCi0gICAgICAgIE1lc3NhZ2VTZXQgPSAxIDw8IDAsCi0gICAgICAg
IENvZGVTZXQgPSAxIDw8IDEsCi0gICAgICAgIEFsbEZpZWxkc1NldCA9IChNZXNzYWdlU2V0IHwg
Q29kZVNldCkKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8aW50IFNUQVRFPgotICAgIGNsYXNzIEJ1
aWxkZXIgewotICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVz
dWx0OwotCi0gICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4m
IGNhc3RTdGF0ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRf
Y2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAg
IEJ1aWxkZXIoUmVmPC8qTmV0d29ya0Vycm9yKi9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQotICAg
ICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRf
aW5fbm9uX2luaXRfc3RhdGUpOwotICAgICAgICB9Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBOZXR3
b3JrRXJyb3I7Ci0gICAgcHVibGljOgotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNZXNzYWdl
U2V0PiYgc2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTWVzc2FnZVNldCksIHByb3BlcnR5X21lc3Nh
Z2VfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibWVzc2Fn
ZSJfcywgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNZXNzYWdlU2V0Pigp
OwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvZGVTZXQ+JiBzZXRDb2Rl
KGludCB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIENvZGVTZXQpLCBwcm9wZXJ0eV9jb2RlX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXRJbnRlZ2VyKCJjb2RlIl9zLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPENvZGVTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBSZWY8TmV0d29ya0Vy
cm9yPiByZWxlYXNlKCkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RB
VEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKLSAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKHNpemVvZihOZXR3b3JrRXJyb3IpID09IHNpemVvZihKU09OOjpPYmplY3Qp
LCBjYW5ub3RfY2FzdCk7Ci0KLSAgICAgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25SZXN1
bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOwotICAgICAgICAgICAgYXV0byByZXN1bHQg
PSBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxOZXR3b3JrRXJyb3I+Kj4oJmpzb25SZXN1
bHQpKTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICB9OwotCi0g
ICAgLyoKLSAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6Ci0gICAgICogUmVmPE5ldHdvcmtF
cnJvcj4gcmVzdWx0ID0gTmV0d29ya0Vycm9yOjpjcmVhdGUoKQotICAgICAqICAgICAuc2V0TWVz
c2FnZSguLi4pCi0gICAgICogICAgIC5zZXRDb2RlKC4uLikKLSAgICAgKiAgICAgLnJlbGVhc2Uo
KTsKLSAgICAgKi8KLSAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpKTsKLSAgICB9Ci19OwotCi19IC8vIE5ldHdvcmsKLQotCi0KLX0gLy8gbmFtZXNwYWNl
IFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xPYmplY3RzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMu
Y3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1t
YWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5o
IgotCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQot
Ci0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgot
Ci0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2luY2x1ZGUgPHd0
Zi9SZXRhaW5QdHIuaD4KLQotQHByb3RvY29sIFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5IYW5k
bGVyOwotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi1jbGFzcyBPYmpDSW5zcGVjdG9yTmV0
d29ya0JhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZU5ldHdvcmtCYWNr
ZW5kRGlzcGF0Y2hlciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0g
ICAgT2JqQ0luc3BlY3Rvck5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xO
ZXR3b3JrRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQot
ICAgIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKLXByaXZhdGU6Ci0g
ICAgUmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5IYW5kbGVyPj4gbV9kZWxl
Z2F0ZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAi
VGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9j
b2xJbnRlcm5hbC5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgot
I2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi12
b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZShs
b25nIHJlcXVlc3RJZCkKLXsKLSAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3Rv
cjpAc2VsZWN0b3IobG9hZFJlc291cmNlV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNr
OildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3Io
cmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yay5s
b2FkUmVzb3VyY2UnIHdhcyBub3QgZm91bmQiX3MpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
aWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0
Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICB9OwotCi0gICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0g
XnsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwg
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2UpOwotICAgIH07Ci0KLSAgICBbbV9kZWxlZ2F0
ZSBsb2FkUmVzb3VyY2VXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxs
YmFjazpzdWNjZXNzQ2FsbGJhY2tdOwotfQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgot
Ci0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxXZWJJbnNw
ZWN0b3IvVGVzdFByb3RvY29sLmg+Ci0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZh
dWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QK
LUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4sIHNldHRlcj1zZXROZXR3b3JrSGFuZGxlcjop
IGlkPFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5IYW5kbGVyPiBuZXR3b3JrSGFuZGxlcjsKLUBw
cm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgVGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkV2
ZW50RGlzcGF0Y2hlciAqbmV0d29ya0V2ZW50RGlzcGF0Y2hlcjsKLUBlbmQKLQotCi0jIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJh
dGlvbi5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2ltcG9ydCAiVGVz
dFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9B
bHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVn
bWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgotCi11c2luZyBuYW1lc3BhY2Ug
SW5zcGVjdG9yOwotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgot
ewotICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci0gICAg
aWQ8VGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkhhbmRsZXI+IF9uZXR3b3JrSGFuZGxlcjsKLSAg
ICBUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluRXZlbnREaXNwYXRjaGVyICpfbmV0d29ya0V2ZW50
RGlzcGF0Y2hlcjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVn
bWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtz
dXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNT
RVJUKGNvbnRyb2xsZXIpOwotICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1
cm4gc2VsZjsKLX0KLQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgW19uZXR3b3JrSGFuZGxlciBy
ZWxlYXNlXTsKLSAgICBbX25ldHdvcmtFdmVudERpc3BhdGNoZXIgcmVsZWFzZV07Ci0gICAgW3N1
cGVyIGRlYWxsb2NdOwotfQotCi0tICh2b2lkKXNldE5ldHdvcmtIYW5kbGVyOihpZDxUZXN0UHJv
dG9jb2xOZXR3b3JrRG9tYWluSGFuZGxlcj4paGFuZGxlcgotewotICAgIGlmIChoYW5kbGVyID09
IF9uZXR3b3JrSGFuZGxlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgW19uZXR3b3JrSGFuZGxl
ciByZWxlYXNlXTsKLSAgICBfbmV0d29ya0hhbmRsZXIgPSBbaGFuZGxlciByZXRhaW5dOwotCi0g
ICAgYXV0byBhbHRlcm5hdGVEaXNwYXRjaGVyID0gbWFrZVVuaXF1ZTxPYmpDSW5zcGVjdG9yTmV0
d29ya0JhY2tlbmREaXNwYXRjaGVyPihoYW5kbGVyKTsKLSAgICBhdXRvIGFsdGVybmF0ZUFnZW50
ID0gbWFrZVVuaXF1ZTxBbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudDxOZXR3b3JrQmFja2VuZERp
c3BhdGNoZXIsIEFsdGVybmF0ZU5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcj4+KCJOZXR3b3JrIl9z
LCAqX2NvbnRyb2xsZXIsIFdURk1vdmUoYWx0ZXJuYXRlRGlzcGF0Y2hlcikpOwotICAgIF9jb250
cm9sbGVyLT5hcHBlbmRFeHRyYUFnZW50KFdURk1vdmUoYWx0ZXJuYXRlQWdlbnQpKTsKLX0KLQot
LSAoaWQ8VGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkhhbmRsZXI+KW5ldHdvcmtIYW5kbGVyCi17
Ci0gICAgcmV0dXJuIF9uZXR3b3JrSGFuZGxlcjsKLX0KLQotLSAoVGVzdFByb3RvY29sTmV0d29y
a0RvbWFpbkV2ZW50RGlzcGF0Y2hlciAqKW5ldHdvcmtFdmVudERpc3BhdGNoZXIKLXsKLSAgICBp
ZiAoIV9uZXR3b3JrRXZlbnREaXNwYXRjaGVyKQotICAgICAgICBfbmV0d29ya0V2ZW50RGlzcGF0
Y2hlciA9IFtbVGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkV2ZW50RGlzcGF0Y2hlciBhbGxvY10g
aW5pdFdpdGhDb250cm9sbGVyOl9jb250cm9sbGVyXTsKLSAgICByZXR1cm4gX25ldHdvcmtFdmVu
dERpc3BhdGNoZXI7Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENv
bmZpZ3VyYXRpb24ubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0
Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13
aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4K
LQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90
b2NvbE5ldHdvcmtEb21haW5FdmVudERpc3BhdGNoZXIKLXsKLSAgICBBdWdtZW50YWJsZUluc3Bl
Y3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIK
LXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0
dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250
cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKXJlc291cmNlTG9hZGVkCi17
Ci0gICAgY29uc3QgRnJvbnRlbmRSb3V0ZXImIHJvdXRlciA9IF9jb250cm9sbGVyLT5mcm9udGVu
ZFJvdXRlcigpOwotCi0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywg
Ik5ldHdvcmsucmVzb3VyY2VMb2FkZWQiX3MpOwotICAgIHJvdXRlci5zZW5kRXZlbnQoanNvbk1l
c3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRo
LW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotCi0jaW1wb3J0IDxXZWJJ
bnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+Ci0KLQotQGNsYXNzIFRlc3RQcm90b2Nv
bE5ldHdvcmtFcnJvcjsKLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29s
UGxhdGZvcm0pIHsKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbCwKLSAgICBUZXN0UHJvdG9j
b2xQbGF0Zm9ybUdlbmVyaWMsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1JT1MsCi0gICAgVGVz
dFByb3RvY29sUGxhdGZvcm1NYWNPUywKLX07Ci0KLQotCi0KLV9fYXR0cmlidXRlX18oKHZpc2li
aWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xOZXR3b3JrRXJyb3Ig
OiBSV0lQcm90b2NvbEpTT05PYmplY3QKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6
KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkOwotLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmpl
Y3Q7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2Ug
Y29kZTooaW50KWNvZGU7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29w
eSkgTlNTdHJpbmcgKm1lc3NhZ2U7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21p
YywgYXNzaWduKSBpbnQgY29kZTsKLUBlbmQKLQotQHByb3RvY29sIFRlc3RQcm90b2NvbE5ldHdv
cmtEb21haW5IYW5kbGVyIDxOU09iamVjdD4KLUBvcHRpb25hbAotLSAodm9pZClsb2FkUmVzb3Vy
Y2VXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJh
Y2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKHZvaWQpKXN1Y2Nlc3NDYWxsYmFjazsKLUBlbmQK
LQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRl
c3RQcm90b2NvbE5ldHdvcmtEb21haW5FdmVudERpc3BhdGNoZXIgOiBOU09iamVjdAotLSAodm9p
ZClyZXNvdXJjZUxvYWRlZDsKLUBlbmQKLQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJv
dG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9y
bS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBv
cnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZh
dGUuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJv
bGxlci5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotQGludGVyZmFjZSBUZXN0UHJv
dG9jb2xOZXR3b3JrRG9tYWluRXZlbnREaXNwYXRjaGVyIChQcml2YXRlKQotLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoQ29udHJvbGxlcjooSW5zcGVjdG9yOjpBdWdtZW50YWJsZUluc3BlY3RvckNv
bnRyb2xsZXIqKWNvbnRyb2xsZXI7Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xJbnRlcm5hbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgt
bWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJ
UHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+Ci1PcHRpb25hbDxPYmpDRW51bVR5cGU+IGZy
b21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKLQotaW5saW5lIFN0cmluZyB0
b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFBsYXRmb3JtIHZhbHVlKQotewotICAgIHN3aXRj
aCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1BbGw6Ci0gICAgICAgIHJl
dHVybiAiYWxsIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOgotICAg
ICAgICByZXR1cm4gImdlbmVyaWMiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlP
UzoKLSAgICAgICAgcmV0dXJuICJpb3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9y
bU1hY09TOgotICAgICAgICByZXR1cm4gIm1hY29zIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8
PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFBsYXRmb3JtPiBmcm9tUHJvdG9jb2xTdHJp
bmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gImFsbCIpCi0gICAg
ICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDsKLSAgICBpZiAodmFsdWUgPT0gImdl
bmVyaWMiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOwotICAg
IGlmICh2YWx1ZSA9PSAiaW9zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3Jt
SU9TOwotICAgIGlmICh2YWx1ZSA9PSAibWFjb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3Rv
Y29sUGxhdGZvcm1NYWNPUzsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi0KLQotfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgt
bWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0KLSNpbXBvcnQg
IlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgotI2lt
cG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLQotdXNp
bmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMgKE5ldHdvcmtEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlTmV0d29ya0Vycm9yOihU
ZXN0UHJvdG9jb2xOZXR3b3JrRXJyb3IgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxv
YWQ7Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cyAoTmV0d29ya0RvbWFpbikKLQotKyAodm9pZClfcGFyc2VOZXR3b3JrRXJyb3I6KFRlc3RQcm90
b2NvbE5ldHdvcmtFcnJvciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewot
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBj
bGFzc10pOwotICAgICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sTmV0d29ya0Vycm9yIGFsbG9j
XSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sVHlwZXMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0
aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBv
cnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9y
L1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLSNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25z
Lmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVj
dG9yOwotCi0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xOZXR3b3JrRXJyb3IKLQotLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJp
bmcgKiwgaWQ+ICopcGF5bG9hZAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQot
ICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9Q
Uk9QRVJUWShwYXlsb2FkW0AibWVzc2FnZSJdLCBAIm1lc3NhZ2UiKTsKLSAgICBzZWxmLm1lc3Nh
Z2UgPSBwYXlsb2FkW0AibWVzc2FnZSJdOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFV
SVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiY29kZSJdLCBAImNvZGUiKTsKLSAgICBzZWxmLmNvZGUg
PSBbcGF5bG9hZFtAImNvZGUiXSBpbnRlZ2VyVmFsdWVdOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19
Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09O
T2JqZWN0ICopb2JqZWN0Ci17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEpTT05P
YmplY3Q6W29iamVjdCB0b0pTT05PYmplY3RdLmdldCgpXSkpCi0gICAgICAgIHJldHVybiBuaWw7
Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTWVzc2Fn
ZTooTlNTdHJpbmcgKiltZXNzYWdlIGNvZGU6KGludCljb2RlCi17Ci0gICAgaWYgKCEoc2VsZiA9
IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBUSFJPV19FWENFUFRJ
T05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKG1lc3NhZ2UsIEAibWVzc2FnZSIpOwotCi0gICAgc2Vs
Zi5tZXNzYWdlID0gbWVzc2FnZTsKLSAgICBzZWxmLmNvZGUgPSBjb2RlOwotCi0gICAgcmV0dXJu
IHNlbGY7Ci19Ci0KLS0gKHZvaWQpc2V0TWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlCi17Ci0g
ICAgW3N1cGVyIHNldFN0cmluZzptZXNzYWdlIGZvcktleTpAIm1lc3NhZ2UiXTsKLX0KLQotLSAo
TlNTdHJpbmcgKiltZXNzYWdlCi17Ci0gICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJt
ZXNzYWdlIl07Ci19Ci0KLS0gKHZvaWQpc2V0Q29kZTooaW50KWNvZGUKLXsKLSAgICBbc3VwZXIg
c2V0SW50ZWdlcjpjb2RlIGZvcktleTpAImNvZGUiXTsKLX0KLQotLSAoaW50KWNvZGUKLXsKLSAg
ICByZXR1cm4gW3N1cGVyIGludGVnZXJGb3JLZXk6QCJjb2RlIl07Ci19Ci0KLUBlbmQKLQotCi0j
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvc2FtZS10eXBlLWlkLWRpZmZlcmVu
dC1kb21haW4uanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNiZjRk
ZmY1Y2NjMjlkMGU4YzFmYTRiMmRkMzI4M2U3NzE2MzJjN2QKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvc2FtZS10eXBlLWlk
LWRpZmZlcmVudC1kb21haW4uanNvbgpAQCAtMCwwICsxLDIyIEBACitbCit7CisgICAgImRvbWFp
biI6ICJSdW50aW1lIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJp
ZCI6ICJSZW1vdGVPYmplY3RJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAorICAg
ICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4iCisgICAg
ICAgIH0KKyAgICBdCit9LAoreworICAgICJkb21haW4iOiAiUnVudGltZTIiLAorICAgICJ0eXBl
cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlJlbW90ZU9iamVjdElkIiwKKyAg
ICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAi
VW5pcXVlIG9iamVjdCBpZGVudGlmaWVyLiIKKyAgICAgICAgfQorICAgIF0KK30KK10KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9zaGFk
b3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9zaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNv
bgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4yMGEwYzE1NTI3NTBmNjI4Mjg4Y2ZmNDE5Mzk2YmQ2ZjZhZjc0OWZlCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCkBAIC0wLDAgKzEsMzEg
QEAKK3sKKyAgICAiZG9tYWluIjogIlJ1bnRpbWUiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAg
eworICAgICAgICAgICAgImlkIjogIktleVBhdGgiLAorICAgICAgICAgICAgInR5cGUiOiAib2Jq
ZWN0IiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJLZXkgcGF0aC4iLAorICAgICAgICAg
ICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAibmFtZSI6ICJ0eXBlIiwKKyAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwK
KyAgICAgICAgICAgICAgICAgICAgImVudW0iOiBbIm51bGwiLCAic3RyaW5nIiwgImFycmF5Il0s
CisgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJLZXkgcGF0aCB0eXBlLiIKKyAg
ICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
Im5hbWUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwK
KyAgICAgICAgICAgICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICAgICAgICAgICAg
ICAgImRlc2NyaXB0aW9uIjogIlN0cmluZyB2YWx1ZS4iCisgICAgICAgICAgICAgICAgfSwKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJuYW1lIjogImFycmF5IiwKKyAg
ICAgICAgICAgICAgICAgICAgInR5cGUiOiAiYXJyYXkiLAorICAgICAgICAgICAgICAgICAgICAi
b3B0aW9uYWwiOiB0cnVlLAorICAgICAgICAgICAgICAgICAgICAiaXRlbXMiOiB7ICJ0eXBlIjog
InN0cmluZyIgfSwKKyAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkFycmF5IHZh
bHVlLiIKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBd
Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZWNlMWRjZmM2MWNkMGJhMDk2Y2E5MThhNDQ4YmUxMzM5MzNjMjAxYQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9z
aG91bGQtc3RyaXAtY29tbWVudHMuanNvbgpAQCAtMCwwICsxLDUgQEAKK3sKKyAgICAvKiBhYm92
ZSAqLworICAgIC8qIGJlZm9yZSAqLyAiZG9tYWluIiAvKiBpbiAqLyA6IC8qIGluICovICJDb21t
ZW50IiAvKiBhZnRlciAqLworICAgIC8qIGJlbG93ICovCit9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1kZWNsYXJhdGlvbi1h
bGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBl
Lmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uY2JjOWQ1Mzk0NzhkYjQ5NWM5NjA2N2VjZDU0YTk1YmU1MmY4ZDA3
MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgpA
QCAtMCwwICsxLDEwIEBACit7CisgICAgImRvbWFpbiI6ICJSdW50aW1lIiwKKyAgICAidHlwZXMi
OiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJSZW1vdGVPYmplY3RJZCIsCisgICAg
ICAgICAgICAidHlwZSI6ICJpbnRlZ2VyIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJV
bmlxdWUgb2JqZWN0IGlkZW50aWZpZXIuIgorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtZGVj
bGFyYXRpb24tYXJyYXktdHlwZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmNmYjA4YmQ5NDBiNjRmYjY2MDM5NjVjZTFiMDRkM2ZjOTc0OWVhOTAKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlw
ZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KQEAgLTAsMCArMSw1MCBAQAorWworeworICAg
ICJkb21haW4iOiAiRGVidWdnZXIiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAg
ICAgICAgImlkIjogIkJyZWFrcG9pbnRJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJpbnRlZ2Vy
IgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiUmVhc29uIiwKKyAg
ICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAiZW51bSI6IFsiRGllZCIs
ICJGYWludGVkIiwgIkh1bmdyeSJdCisgICAgICAgIH0KKyAgICBdCit9LAoreworICAgICJkb21h
aW4iOiAiUnVudGltZSIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAi
aWQiOiAiT2JqZWN0SWQiLAorICAgICAgICAgICAgInR5cGUiOiAiaW50ZWdlciIKKyAgICAgICAg
fSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkx1Y2t5TnVtYmVycyIsCisgICAgICAg
ICAgICAidHlwZSI6ICJhcnJheSIsCisgICAgICAgICAgICAiaXRlbXMiOiB7ICJ0eXBlIjogImlu
dGVnZXIiIH0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkJhYnlO
YW1lcyIsCisgICAgICAgICAgICAidHlwZSI6ICJhcnJheSIsCisgICAgICAgICAgICAiaXRlbXMi
OiB7ICJ0eXBlIjogInN0cmluZyIgfQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAg
ICAiaWQiOiAiTmV3T2JqZWN0cyIsCisgICAgICAgICAgICAidHlwZSI6ICJhcnJheSIsCisgICAg
ICAgICAgICAiaXRlbXMiOiB7ICIkcmVmIjogIk9iamVjdElkIiB9CisgICAgICAgIH0sCisgICAg
ICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJPbGRPYmplY3RzIiwKKyAgICAgICAgICAgICJ0eXBl
IjogImFycmF5IiwKKyAgICAgICAgICAgICJpdGVtcyI6IHsgIiRyZWYiOiAiRGVidWdnZXIuQnJl
YWtwb2ludElkIiB9CisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJT
dG9wUmVhc29ucyIsCisgICAgICAgICAgICAidHlwZSI6ICJhcnJheSIsCisgICAgICAgICAgICAi
aXRlbXMiOiB7ICIkcmVmIjogIkRlYnVnZ2VyLlJlYXNvbiIgfQorICAgICAgICB9CisgICAgXQor
fQorXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUu
anNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi45ZjBhZWU5YzkxYjk1YWJhZjM4N2U3MmE5MWEzMzM4YjU3OWRhOWFh
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KQEAgLTAsMCArMSwxNSBA
QAoreworICAgICJkb21haW4iOiAiUnVudGltZSIsCisgICAgInR5cGVzIjogWworICAgICAgICB7
CisgICAgICAgICAgICAiaWQiOiAiRmFybUFuaW1hbHMiLAorICAgICAgICAgICAgInR5cGUiOiAi
c3RyaW5nIiwKKyAgICAgICAgICAgICJlbnVtIjogWyJQaWdzIiwgIkNvd3MiLCAiQ2F0cyIsICJI
ZW5zIl0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlR3b0xlZ2dl
ZEFuaW1hbHMiLAorICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICJl
bnVtIjogWyJEdWNrcyIsICJIZW5zIiwgIkNyb3dzIiwgIkZsYW1pbmdvcyJdCisgICAgICAgIH0K
KyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRpb24tb2Jq
ZWN0LXR5cGUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yYzQzYzMzMDk5MmRlNjc1ZGI4MGQyOThmZjMzMWE2
ZWY1ODk5MzVmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgpAQCAt
MCwwICsxLDEwMCBAQAorWworeworICAgICJkb21haW4iOiAiRGF0YWJhc2UiLAorICAgICJkZXNj
cmlwdGlvbiI6ICJUZXN0IHR5cGUgYnVpbGRlciBnZW5lcmF0aW9uIG9mIHZhcmlvdXMgb2JqZWN0
IHR5cGVzLiIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAi
RXJyb3IiLAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAgICJkZXNj
cmlwdGlvbiI6ICJEYXRhYmFzZSBlcnJvci4iLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiBb
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJtZXNzYWdlIiwgInR5cGUiOiAic3RyaW5nIiwg
ImRlc2NyaXB0aW9uIjogIkVycm9yIG1lc3NhZ2UuIiB9LAorICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAiY29kZSIsICJ0eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgY29k
ZS4iIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAg
ImlkIjogIkVycm9yTGlzdCIsCisgICAgICAgICAgICAidHlwZSI6ICJhcnJheSIsCisgICAgICAg
ICAgICAiaXRlbXMiOiB7ICIkcmVmIjogIkVycm9yIiB9CisgICAgICAgIH0sCisgICAgICAgIHsK
KyAgICAgICAgICAgICJpZCI6ICJNb3VzZUJ1dHRvbiIsCisgICAgICAgICAgICAidHlwZSI6ICJz
dHJpbmciLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkVudW1lcmF0ZXMgZGlmZmVyZW50
IG1vdXNlIGJ1dHRvbnMgdGhhdCBjYW4gYmUgdXNlZC4iLAorICAgICAgICAgICAgImVudW0iOiBb
CisgICAgICAgICAgICAgICAgIk5vbmUiLAorICAgICAgICAgICAgICAgICJMZWZ0IiwKKyAgICAg
ICAgICAgICAgICAiTWlkZGxlIiwKKyAgICAgICAgICAgICAgICAiUmlnaHQiCisgICAgICAgICAg
ICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJPcHRpb25hbFBh
cmFtZXRlckJ1bmRsZSIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAg
ICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1l
cyIsICJ0eXBlIjogImFycmF5IiwgIm9wdGlvbmFsIjogdHJ1ZSwgIml0ZW1zIjogeyAidHlwZSI6
ICJzdHJpbmciIH0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImJ1dHRvbnMiLCAidHlw
ZSI6ICJhcnJheSIsICJvcHRpb25hbCI6IHRydWUsICJpdGVtcyI6IHsgIiRyZWYiOiAiTW91c2VC
dXR0b24iIH0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRpcmVjdGlvbmFsaXR5Iiwg
InR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbIkxUUiIsICJSVEwiXSwgIm9wdGlvbmFsIjogdHJ1
ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmci
LCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3Rh
bXAiLCAidHlwZSI6ICJudW1iZXIiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0cnVl
IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55Iiwg
Im9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZXJyb3IiLCAi
JHJlZiI6ICJFcnJvciIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJu
YW1lIjogImVycm9yTGlzdCIsICIkcmVmIjogIkVycm9yTGlzdCIsICJvcHRpb25hbCI6IHRydWUg
fQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQi
OiAiUGFyYW1ldGVyQnVuZGxlIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAg
ICAgICAgICAicHJvcGVydGllcyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVt
bk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9
LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYnV0dG9ucyIsICJ0eXBlIjogImFycmF5Iiwg
Iml0ZW1zIjogeyAiJHJlZiI6ICJNb3VzZUJ1dHRvbiIgfSB9LAorICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAiZGlyZWN0aW9uYWxpdHkiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsiTFRS
IiwgIlJUTCJdIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjog
InN0cmluZyIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBl
IjogIm51bWJlciIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBl
IjogIm9iamVjdCIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlw
ZSI6ICJhbnkiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJlcnJvciIsICIkcmVmIjog
IkVycm9yIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZXJyb3JMaXN0IiwgIiRyZWYi
OiAiRXJyb3JMaXN0IiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAg
ICAgICAgICAgICJpZCI6ICJPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzIiwKKyAgICAg
ICAgICAgICJkZXNjcmlwdGlvbiI6ICJDb25mbGljdGVkIG5hbWVzIG1heSBjYXVzZSBnZW5lcmF0
ZWQgZ2V0dGVycy9zZXR0ZXJzIHRvIGNsYXNoIHdpdGggYnVpbHQtaW4gSW5zcGVjdG9yT2JqZWN0
IG1ldGhvZHMuIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAi
cHJvcGVydGllcyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImludGVnZXIiLCAidHlw
ZSI6ICJzdHJpbmciIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJhcnJheSIsICJ0eXBl
IjogInN0cmluZyIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInN0cmluZyIsICJ0eXBl
IjogInN0cmluZyIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlIiwgInR5cGUi
OiAic3RyaW5nIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAib2JqZWN0IiwgInR5cGUi
OiAic3RyaW5nIiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAg
ICAgICAgICJpZCI6ICJEdW1teU9iamVjdCIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAi
QW4gb3BlbiBvYmplY3QgdGhhdCBkb2Vzbid0IGhhdmUgYW55IHByZWRlZmluZWQgZmllbGRzLiIs
CisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiCisgICAgICAgIH0KKyAgICBdCit9LAorewor
ICAgICJkb21haW4iOiAiVGVzdCIsCisgICAgImRlc2NyaXB0aW9uIjogIlRlc3QgdGhlIGdlbmVy
YXRpb24gb2Ygc3BlY2lhbCBiZWhhdmlvcnMgdGhhdCBvbmx5IGFwcGx5IHRvIHNwZWNpZmljIGNs
YXNzZXMuIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJQ
YXJhbWV0ZXJCdW5kbGUiLAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAg
ICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGlyZWN0aW9u
YWxpdHkiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsiTFRSIiwgIlJUTCJdIH0sCisgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJidXR0b25zIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMi
OiB7ICIkcmVmIjogIkRhdGFiYXNlLk1vdXNlQnV0dG9uIiB9IH0sCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAidHlw
ZSI6ICJzdHJpbmciIH0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vdGVzIiwgInR5
cGUiOiAic3RyaW5nIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwg
InR5cGUiOiAibnVtYmVyIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVzIiwg
InR5cGUiOiAib2JqZWN0IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5bG9hZCIs
ICJ0eXBlIjogImFueSIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImVycm9yIiwgIiRy
ZWYiOiAiRGF0YWJhc2UuRXJyb3IiIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0K
K30KK10KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy90eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24gYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1yZXF1aXJpbmctcnVudGltZS1j
YXN0cy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgzZDk0YmU4OTdkMjJjYzA1OGJiNjQ2ZmVjZDlhNDczMDM3
YjZiOTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCkBAIC0wLDAg
KzEsNTEgQEAKK1sKK3sKKyAgICAiZG9tYWluIjogIlRlc3QiLAorICAgICJ0eXBlcyI6IFsKKyAg
ICAgICAgeworICAgICAgICAgICAgImlkIjogIlR5cGVOZWVkaW5nQ2FzdCIsCisgICAgICAgICAg
ICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkEgZHVtbXkg
dHlwZSB0aGF0IHJlcXVpcmVzIHJ1bnRpbWUgY2FzdHMsIGFuZCBmb3JjZXMgbm9uLXByaW1pdGl2
ZSByZWZlcmVuY2VkIHR5cGVzIHRvIGFsc28gZW1pdCBydW50aW1lIGNhc3QgaGVscGVycy4iLAor
ICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJz
dHJpbmciLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiU3RyaW5nIG1lbWJlci4i
IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJudW1iZXIiLCAidHlwZSI6ICJpbnRlZ2Vy
IiwgImRlc2NyaXB0aW9uIjogIk51bWJlciBtZW1iZXIuIiB9LAorICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAiYW5pbWFscyIsICIkcmVmIjogIkNhc3RlZEFuaW1hbHMiLCAiZGVzY3JpcHRpb24i
OiAiRW51bSBtZW1iZXIuIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiaWQiLCAiJHJl
ZiI6ICJDYXN0ZWRPYmplY3RJZCIsICJkZXNjcmlwdGlvbiI6ICJBbGlhc2VkIG1lbWJlci4iIH0s
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0cmVlIiwgIiRyZWYiOiAiUmVjdXJzaXZlT2Jq
ZWN0MSIsICJkZXNjcmlwdGlvbiI6ICJSZWN1cnNpdmUgb2JqZWN0IG1lbWJlci4iIH0KKyAgICAg
ICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkNhc3Rl
ZE9iamVjdElkIiwKKyAgICAgICAgICAgICJ0eXBlIjogImludGVnZXIiCisgICAgICAgIH0sCisg
ICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJVbmNhc3RlZE9iamVjdElkIiwKKyAgICAgICAg
ICAgICJ0eXBlIjogImludGVnZXIiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAg
ICJpZCI6ICJVbmNhc3RlZEFuaW1hbHMiLAorICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwK
KyAgICAgICAgICAgICJlbnVtIjogWyJQaWdzIiwgIkNvd3MiLCAiQ2F0cyIsICJIZW5zIl0KKyAg
ICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkNhc3RlZEFuaW1hbHMiLAor
ICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICJlbnVtIjogWyJEdWNr
cyIsICJIZW5zIiwgIkNyb3dzIiwgIkZsYW1pbmdvcyJdCisgICAgICAgIH0sCisgICAgICAgIHsK
KyAgICAgICAgICAgICJpZCI6ICJSZWN1cnNpdmVPYmplY3QxIiwKKyAgICAgICAgICAgICJ0eXBl
IjogIm9iamVjdCIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogIm9iaiIsICIkcmVmIjogIlJlY3Vyc2l2ZU9iamVjdDIiLCAib3B0aW9uYWwi
OiB0cnVlIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAg
ICAgImlkIjogIlJlY3Vyc2l2ZU9iamVjdDIiLAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0
IiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAib2JqIiwgIiRyZWYiOiAiUmVjdXJzaXZlT2JqZWN0MSIsICJvcHRpb25hbCI6IHRydWUgfQor
ICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXQorfQorXQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtd2l0aC1vcGVuLXBh
cmFtZXRlcnMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy90eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTliMDIyMGQz
MTJiNDY0YzQ4MTQzN2I1NzE2NTNmODA4ZGZlOGZiNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLXdpdGgtb3Blbi1w
YXJhbWV0ZXJzLmpzb24KQEAgLTAsMCArMSwyMSBAQAoreworICAgICJkb21haW4iOiAiVGVzdCIs
CisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiTm9PcGVuUGFy
YW1ldGVycyIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgInBy
b3BlcnRpZXMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJvbmUiLCAidHlwZSI6ICJu
dW1iZXIiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0d28iLCAidHlwZSI6ICJudW1i
ZXIiIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAg
ImlkIjogIk9wZW5QYXJhbWV0ZXJzIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisg
ICAgICAgICAgICAicHJvcGVydGllcyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImFs
cGhhIiwgInR5cGUiOiAibnVtYmVyIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYmV0
YSIsICJ0eXBlIjogIm51bWJlciIgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXQor
fQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL3ZlcnNpb24uanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy92ZXJzaW9uLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTA3YTVkOTAxNzZiOGZkZjMzNzE4YjMy
ZGIzM2IzYTBhYTM1NjAwOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy92ZXJzaW9uLmpzb24KQEAgLTAsMCArMSw2IEBACit7
ImRvbWFpbnMiOlsKK3sKKyAgICAiZG9tYWluIjogIlZlcnNpb25Eb21haW4iLAorICAgICJ2ZXJz
aW9uIjogNDIKK30KK119CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Db25maWd1cmF0aW9u
cy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZpZyBiL1NvdXJjZS9XZWJDb3JlL0NvbmZpZ3VyYXRpb25z
L0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnCmluZGV4IGI0Zjc4NzlhZTRjZDU5NTFiN2VjNzMxMDMx
ZTFiMDk1OWE5NGU2MzkuLjY3OWQzMmExZmI0ZTY4MDNlYTAxZGNhZTlkMmVkNjU3ZWJhOGNiZGQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVz
LnhjY29uZmlnCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZp
bmVzLnhjY29uZmlnCkBAIC0zODMsNiArMzgzLDggQEAgRU5BQkxFX1ZJREVPX1RSQUNLID0gRU5B
QkxFX1ZJREVPX1RSQUNLOwogRU5BQkxFX1ZJREVPX1VTRVNfRUxFTUVOVF9GVUxMU0NSRUVOID0g
JChFTkFCTEVfVklERU9fVVNFU19FTEVNRU5UX0ZVTExTQ1JFRU5fJChXS19QTEFURk9STV9OQU1F
KSk7CiBFTkFCTEVfVklERU9fVVNFU19FTEVNRU5UX0ZVTExTQ1JFRU5fbWFjb3N4ID0gRU5BQkxF
X1ZJREVPX1VTRVNfRUxFTUVOVF9GVUxMU0NSRUVOOwogCitFTkFCTEVfV0VCX0FSQ0hJVkUgPSBF
TkFCTEVfV0VCX0FSQ0hJVkU7CisKIEVOQUJMRV9XRUJEUklWRVJfTU9VU0VfSU5URVJBQ1RJT05T
ID0gJChFTkFCTEVfV0VCRFJJVkVSX01PVVNFX0lOVEVSQUNUSU9OU18kKFdLX1BMQVRGT1JNX05B
TUUpKTsKIEVOQUJMRV9XRUJEUklWRVJfTU9VU0VfSU5URVJBQ1RJT05TX21hY29zeCA9IEVOQUJM
RV9XRUJEUklWRVJfTU9VU0VfSU5URVJBQ1RJT05TOwogCkBAIC00MjUsNCArNDI3LDQgQEAgRU5B
QkxFX1dJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCA9IEVOQUJMRV9XSVJFTEVTU19QTEFZQkFDS19U
QVJHRVQ7CiAKIEVOQUJMRV9YU0xUID0gRU5BQkxFX1hTTFQ7CiAKLUZFQVRVUkVfREVGSU5FUyA9
ICQoRU5BQkxFXzNEX1RSQU5TRk9STVMpICQoRU5BQkxFX0FDQ0VMRVJBVEVEXzJEX0NBTlZBUykg
JChFTkFCTEVfQUNDRVNTSUJJTElUWV9JU09MQVRFRF9UUkVFKSAkKEVOQUJMRV9BUFBMRV9QQVkp
ICQoRU5BQkxFX0FQUExFX1BBWV9TRVNTSU9OX1YzKSAkKEVOQUJMRV9BUFBMRV9QQVlfU0VTU0lP
Tl9WNCkgJChFTkFCTEVfQVBQTEVfUEFZX1NFU1NJT05fVjkpICQoRU5BQkxFX0FQUExJQ0FUSU9O
X01BTklGRVNUKSAkKEVOQUJMRV9BVFRBQ0hNRU5UX0VMRU1FTlQpICQoRU5BQkxFX0FWRl9DQVBU
SU9OUykgJChFTkFCTEVfQ0FDSEVfUEFSVElUSU9OSU5HKSAkKEVOQUJMRV9DSEFOTkVMX01FU1NB
R0lORykgJChFTkFCTEVfQ09OVEVOVF9GSUxURVJJTkcpICQoRU5BQkxFX0NTUzNfVEVYVCkgJChF
TkFCTEVfQ1NTX0JPWF9ERUNPUkFUSU9OX0JSRUFLKSAkKEVOQUJMRV9DU1NfQ09NUE9TSVRJTkcp
ICQoRU5BQkxFX0NTU19DT05JQ19HUkFESUVOVFMpICQoRU5BQkxFX0NTU19JTUFHRV9SRVNPTFVU
SU9OKSAkKEVOQUJMRV9DU1NfUEFJTlRJTkdfQVBJKSAkKEVOQUJMRV9DU1NfU0NST0xMX1NOQVAp
ICQoRU5BQkxFX0NTU19TRUxFQ1RPUlNfTEVWRUw0KSAkKEVOQUJMRV9DU1NfVFJBSUxJTkdfV09S
RCkgJChFTkFCTEVfQ1NTX1RZUEVEX09NKSAkKEVOQUJMRV9DVVJTT1JfVklTSUJJTElUWSkgJChF
TkFCTEVfQ19MT09QKSAkKEVOQUJMRV9EQVJLX01PREVfQ1NTKSAkKEVOQUJMRV9EQVRBQ1VFX1ZB
TFVFKSAkKEVOQUJMRV9EQVRBTElTVF9FTEVNRU5UKSAkKEVOQUJMRV9EQVRBX0lOVEVSQUNUSU9O
KSAkKEVOQUJMRV9ERVZJQ0VfT1JJRU5UQVRJT04pICQoRU5BQkxFX0RSQUdfU1VQUE9SVCkgJChF
TkFCTEVfRURJVEFCTEVfUkVHSU9OKSAkKEVOQUJMRV9FTkNSWVBURURfTUVESUEpICQoRU5BQkxF
X0VYUEVSSU1FTlRBTF9GRUFUVVJFUykgJChFTkFCTEVfRklMVEVSU19MRVZFTF8yKSAkKEVOQUJM
RV9GVUxMU0NSRUVOX0FQSSkgJChFTkFCTEVfUElDVFVSRV9JTl9QSUNUVVJFX0FQSSkgJChFTkFC
TEVfR0FNRVBBRCkgJChFTkFCTEVfR0VPTE9DQVRJT04pICQoRU5BQkxFX0dQVV9QUk9DRVNTKSAk
KEVOQUJMRV9JTkRFWEVEX0RBVEFCQVNFKSAkKEVOQUJMRV9JTkRFWEVEX0RBVEFCQVNFX0lOX1dP
UktFUlMpICQoRU5BQkxFX0lOUFVUX1RZUEVfQ09MT1IpICQoRU5BQkxFX0lOUFVUX1RZUEVfREFU
RSkgJChFTkFCTEVfSU5QVVRfVFlQRV9EQVRFVElNRUxPQ0FMKSAkKEVOQUJMRV9JTlBVVF9UWVBF
X0RBVEVUSU1FX0lOQ09NUExFVEUpICQoRU5BQkxFX0lOUFVUX1RZUEVfTU9OVEgpICQoRU5BQkxF
X0lOUFVUX1RZUEVfVElNRSkgJChFTkFCTEVfSU5QVVRfVFlQRV9XRUVLKSAkKEVOQUJMRV9JTlNQ
RUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKSAkKEVOQUJMRV9JTlNQRUNUT1JfVEVMRU1FVFJZ
KSAkKEVOQUJMRV9JTlRFUlNFQ1RJT05fT0JTRVJWRVIpICQoRU5BQkxFX0lPU19HRVNUVVJFX0VW
RU5UUykgJChFTkFCTEVfSU9TX1RPVUNIX0VWRU5UUykgJChFTkFCTEVfTEFZT1VUX0ZPUk1BVFRJ
TkdfQ09OVEVYVCkgJChFTkFCTEVfTEVHQUNZX0NTU19WRU5ET1JfUFJFRklYRVMpICQoRU5BQkxF
X0xFR0FDWV9DVVNUT01fUFJPVE9DT0xfTUFOQUdFUikgJChFTkFCTEVfTEVHQUNZX0VOQ1JZUFRF
RF9NRURJQSkgJChFTkFCTEVfTEVUVEVSUFJFU1MpICQoRU5BQkxFX01BQ19HRVNUVVJFX0VWRU5U
UykgJChFTkFCTEVfTUFUSE1MKSAkKEVOQUJMRV9NRURJQV9DQVBUVVJFKSAkKEVOQUJMRV9NRURJ
QV9DT05UUk9MU19TQ1JJUFQpICQoRU5BQkxFX01FRElBX1NFU1NJT04pICQoRU5BQkxFX01FRElB
X1NPVVJDRSkgJChFTkFCTEVfTUVESUFfU1RBVElTVElDUykgJChFTkFCTEVfTUVESUFfU1RSRUFN
KSAkKEVOQUJMRV9NRU1PUllfU0FNUExFUikgJChFTkFCTEVfTUVURVJfRUxFTUVOVCkgJChFTkFC
TEVfTUhUTUwpICQoRU5BQkxFX01PVVNFX0NVUlNPUl9TQ0FMRSkgJChFTkFCTEVfTkFWSUdBVE9S
X1NUQU5EQUxPTkUpICQoRU5BQkxFX05FVFdPUktfQ0FDSEVfU1BFQ1VMQVRJVkVfUkVWQUxJREFU
SU9OKSAkKEVOQUJMRV9ORVRXT1JLX0NBQ0hFX1NUQUxFX1dISUxFX1JFVkFMSURBVEUpICQoRU5B
QkxFX05PVElGSUNBVElPTlMpICQoRU5BQkxFX09GRlNDUkVFTl9DQU5WQVMpICQoRU5BQkxFX09W
RVJGTE9XX1NDUk9MTElOR19UT1VDSCkgJChFTkFCTEVfUEFZTUVOVF9SRVFVRVNUKSAkKEVOQUJM
RV9QREZLSVRfUExVR0lOKSAkKEVOQUJMRV9QT0lOVEVSX0xPQ0spICQoRU5BQkxFX1BVQkxJQ19T
VUZGSVhfTElTVCkgJChFTkFCTEVfUVVPVEEpICQoRU5BQkxFX1JFTU9URV9JTlNQRUNUT1IpICQo
RU5BQkxFX1JFU0laRV9PQlNFUlZFUikgJChFTkFCTEVfUkVTT0xVVElPTl9NRURJQV9RVUVSWSkg
JChFTkFCTEVfUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKSAkKEVOQUJMRV9SRVNPVVJDRV9VU0FH
RSkgJChFTkFCTEVfUlVCQkVSX0JBTkRJTkcpICQoRU5BQkxFX1NBTkRCT1hfRVhURU5TSU9OUykg
JChFTkFCTEVfU0VSVkVSX1BSRUNPTk5FQ1QpICQoRU5BQkxFX1NFUlZJQ0VfQ09OVFJPTFMpICQo
RU5BQkxFX1NFUlZJQ0VfV09SS0VSKSAkKEVOQUJMRV9TSEFSRUFCTEVfUkVTT1VSQ0UpICQoRU5B
QkxFX1NQRUVDSF9TWU5USEVTSVMpICQoRU5BQkxFX1NUUkVBTVNfQVBJKSAkKEVOQUJMRV9TVkdf
Rk9OVFMpICQoRU5BQkxFX1RFTEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKSAkKEVOQUJMRV9URVhU
X0FVVE9TSVpJTkcpICQoRU5BQkxFX1RPVUNIX0VWRU5UUykgJChFTkFCTEVfVVNFUlNFTEVDVF9B
TEwpICQoRU5BQkxFX1VTRVJfTUVTU0FHRV9IQU5ETEVSUykgJChFTkFCTEVfVkFSSUFUSU9OX0ZP
TlRTKSAkKEVOQUJMRV9WSURFTykgJChFTkFCTEVfVklERU9fUFJFU0VOVEFUSU9OX01PREUpICQo
RU5BQkxFX1ZJREVPX1RSQUNLKSAkKEVOQUJMRV9WSURFT19VU0VTX0VMRU1FTlRfRlVMTFNDUkVF
TikgJChFTkFCTEVfV0VCRFJJVkVSX01PVVNFX0lOVEVSQUNUSU9OUykgJChFTkFCTEVfV0VCRFJJ
VkVSX0tFWUJPQVJEX0lOVEVSQUNUSU9OUykgJChFTkFCTEVfV0VCRFJJVkVSX1RPVUNIX0lOVEVS
QUNUSU9OUykgJChFTkFCTEVfV0VCR0wpICQoRU5BQkxFX1dFQkdMMikgJChFTkFCTEVfV0VCR1BV
KSAkKEVOQUJMRV9XRUJYUikgJChFTkFCTEVfV0VCX0FQSV9TVEFUSVNUSUNTKSAkKEVOQUJMRV9X
RUJfQVVESU8pICQoRU5BQkxFX1dFQl9BVVRITikgJChFTkFCTEVfV0VCX0NSWVBUTykgJChFTkFC
TEVfV0VCX1JUQykgJChFTkFCTEVfV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKSAkKEVOQUJMRV9Y
U0xUKTsKK0ZFQVRVUkVfREVGSU5FUyA9ICQoRU5BQkxFXzNEX1RSQU5TRk9STVMpICQoRU5BQkxF
X0FDQ0VMRVJBVEVEXzJEX0NBTlZBUykgJChFTkFCTEVfQUNDRVNTSUJJTElUWV9JU09MQVRFRF9U
UkVFKSAkKEVOQUJMRV9BUFBMRV9QQVkpICQoRU5BQkxFX0FQUExFX1BBWV9TRVNTSU9OX1YzKSAk
KEVOQUJMRV9BUFBMRV9QQVlfU0VTU0lPTl9WNCkgJChFTkFCTEVfQVBQTEVfUEFZX1NFU1NJT05f
VjkpICQoRU5BQkxFX0FQUExJQ0FUSU9OX01BTklGRVNUKSAkKEVOQUJMRV9BVFRBQ0hNRU5UX0VM
RU1FTlQpICQoRU5BQkxFX0FWRl9DQVBUSU9OUykgJChFTkFCTEVfQ0FDSEVfUEFSVElUSU9OSU5H
KSAkKEVOQUJMRV9DSEFOTkVMX01FU1NBR0lORykgJChFTkFCTEVfQ09OVEVOVF9GSUxURVJJTkcp
ICQoRU5BQkxFX0NTUzNfVEVYVCkgJChFTkFCTEVfQ1NTX0JPWF9ERUNPUkFUSU9OX0JSRUFLKSAk
KEVOQUJMRV9DU1NfQ09NUE9TSVRJTkcpICQoRU5BQkxFX0NTU19DT05JQ19HUkFESUVOVFMpICQo
RU5BQkxFX0NTU19JTUFHRV9SRVNPTFVUSU9OKSAkKEVOQUJMRV9DU1NfUEFJTlRJTkdfQVBJKSAk
KEVOQUJMRV9DU1NfU0NST0xMX1NOQVApICQoRU5BQkxFX0NTU19TRUxFQ1RPUlNfTEVWRUw0KSAk
KEVOQUJMRV9DU1NfVFJBSUxJTkdfV09SRCkgJChFTkFCTEVfQ1NTX1RZUEVEX09NKSAkKEVOQUJM
RV9DVVJTT1JfVklTSUJJTElUWSkgJChFTkFCTEVfQ19MT09QKSAkKEVOQUJMRV9EQVJLX01PREVf
Q1NTKSAkKEVOQUJMRV9EQVRBQ1VFX1ZBTFVFKSAkKEVOQUJMRV9EQVRBTElTVF9FTEVNRU5UKSAk
KEVOQUJMRV9EQVRBX0lOVEVSQUNUSU9OKSAkKEVOQUJMRV9ERVZJQ0VfT1JJRU5UQVRJT04pICQo
RU5BQkxFX0RSQUdfU1VQUE9SVCkgJChFTkFCTEVfRURJVEFCTEVfUkVHSU9OKSAkKEVOQUJMRV9F
TkNSWVBURURfTUVESUEpICQoRU5BQkxFX0VYUEVSSU1FTlRBTF9GRUFUVVJFUykgJChFTkFCTEVf
RklMVEVSU19MRVZFTF8yKSAkKEVOQUJMRV9GVUxMU0NSRUVOX0FQSSkgJChFTkFCTEVfUElDVFVS
RV9JTl9QSUNUVVJFX0FQSSkgJChFTkFCTEVfR0FNRVBBRCkgJChFTkFCTEVfR0VPTE9DQVRJT04p
ICQoRU5BQkxFX0dQVV9QUk9DRVNTKSAkKEVOQUJMRV9JTkRFWEVEX0RBVEFCQVNFKSAkKEVOQUJM
RV9JTkRFWEVEX0RBVEFCQVNFX0lOX1dPUktFUlMpICQoRU5BQkxFX0lOUFVUX1RZUEVfQ09MT1Ip
ICQoRU5BQkxFX0lOUFVUX1RZUEVfREFURSkgJChFTkFCTEVfSU5QVVRfVFlQRV9EQVRFVElNRUxP
Q0FMKSAkKEVOQUJMRV9JTlBVVF9UWVBFX0RBVEVUSU1FX0lOQ09NUExFVEUpICQoRU5BQkxFX0lO
UFVUX1RZUEVfTU9OVEgpICQoRU5BQkxFX0lOUFVUX1RZUEVfVElNRSkgJChFTkFCTEVfSU5QVVRf
VFlQRV9XRUVLKSAkKEVOQUJMRV9JTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKSAkKEVO
QUJMRV9JTlNQRUNUT1JfVEVMRU1FVFJZKSAkKEVOQUJMRV9JTlRFUlNFQ1RJT05fT0JTRVJWRVIp
ICQoRU5BQkxFX0lPU19HRVNUVVJFX0VWRU5UUykgJChFTkFCTEVfSU9TX1RPVUNIX0VWRU5UUykg
JChFTkFCTEVfTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkgJChFTkFCTEVfTEVHQUNZX0NTU19W
RU5ET1JfUFJFRklYRVMpICQoRU5BQkxFX0xFR0FDWV9DVVNUT01fUFJPVE9DT0xfTUFOQUdFUikg
JChFTkFCTEVfTEVHQUNZX0VOQ1JZUFRFRF9NRURJQSkgJChFTkFCTEVfTEVUVEVSUFJFU1MpICQo
RU5BQkxFX01BQ19HRVNUVVJFX0VWRU5UUykgJChFTkFCTEVfTUFUSE1MKSAkKEVOQUJMRV9NRURJ
QV9DQVBUVVJFKSAkKEVOQUJMRV9NRURJQV9DT05UUk9MU19TQ1JJUFQpICQoRU5BQkxFX01FRElB
X1NFU1NJT04pICQoRU5BQkxFX01FRElBX1NPVVJDRSkgJChFTkFCTEVfTUVESUFfU1RBVElTVElD
UykgJChFTkFCTEVfTUVESUFfU1RSRUFNKSAkKEVOQUJMRV9NRU1PUllfU0FNUExFUikgJChFTkFC
TEVfTUVURVJfRUxFTUVOVCkgJChFTkFCTEVfTUhUTUwpICQoRU5BQkxFX01PVVNFX0NVUlNPUl9T
Q0FMRSkgJChFTkFCTEVfTkFWSUdBVE9SX1NUQU5EQUxPTkUpICQoRU5BQkxFX05FVFdPUktfQ0FD
SEVfU1BFQ1VMQVRJVkVfUkVWQUxJREFUSU9OKSAkKEVOQUJMRV9ORVRXT1JLX0NBQ0hFX1NUQUxF
X1dISUxFX1JFVkFMSURBVEUpICQoRU5BQkxFX05PVElGSUNBVElPTlMpICQoRU5BQkxFX09GRlND
UkVFTl9DQU5WQVMpICQoRU5BQkxFX09WRVJGTE9XX1NDUk9MTElOR19UT1VDSCkgJChFTkFCTEVf
UEFZTUVOVF9SRVFVRVNUKSAkKEVOQUJMRV9QREZLSVRfUExVR0lOKSAkKEVOQUJMRV9QT0lOVEVS
X0xPQ0spICQoRU5BQkxFX1BVQkxJQ19TVUZGSVhfTElTVCkgJChFTkFCTEVfUVVPVEEpICQoRU5B
QkxFX1JFTU9URV9JTlNQRUNUT1IpICQoRU5BQkxFX1JFU0laRV9PQlNFUlZFUikgJChFTkFCTEVf
UkVTT0xVVElPTl9NRURJQV9RVUVSWSkgJChFTkFCTEVfUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNT
KSAkKEVOQUJMRV9SRVNPVVJDRV9VU0FHRSkgJChFTkFCTEVfUlVCQkVSX0JBTkRJTkcpICQoRU5B
QkxFX1NBTkRCT1hfRVhURU5TSU9OUykgJChFTkFCTEVfU0VSVkVSX1BSRUNPTk5FQ1QpICQoRU5B
QkxFX1NFUlZJQ0VfQ09OVFJPTFMpICQoRU5BQkxFX1NFUlZJQ0VfV09SS0VSKSAkKEVOQUJMRV9T
SEFSRUFCTEVfUkVTT1VSQ0UpICQoRU5BQkxFX1NQRUVDSF9TWU5USEVTSVMpICQoRU5BQkxFX1NU
UkVBTVNfQVBJKSAkKEVOQUJMRV9TVkdfRk9OVFMpICQoRU5BQkxFX1RFTEVQSE9ORV9OVU1CRVJf
REVURUNUSU9OKSAkKEVOQUJMRV9URVhUX0FVVE9TSVpJTkcpICQoRU5BQkxFX1RPVUNIX0VWRU5U
UykgJChFTkFCTEVfVVNFUlNFTEVDVF9BTEwpICQoRU5BQkxFX1VTRVJfTUVTU0FHRV9IQU5ETEVS
UykgJChFTkFCTEVfVkFSSUFUSU9OX0ZPTlRTKSAkKEVOQUJMRV9WSURFTykgJChFTkFCTEVfVklE
RU9fUFJFU0VOVEFUSU9OX01PREUpICQoRU5BQkxFX1ZJREVPX1RSQUNLKSAkKEVOQUJMRV9WSURF
T19VU0VTX0VMRU1FTlRfRlVMTFNDUkVFTikgJChFTkFCTEVfV0VCX0FSQ0hJVkUpICQoRU5BQkxF
X1dFQkRSSVZFUl9NT1VTRV9JTlRFUkFDVElPTlMpICQoRU5BQkxFX1dFQkRSSVZFUl9LRVlCT0FS
RF9JTlRFUkFDVElPTlMpICQoRU5BQkxFX1dFQkRSSVZFUl9UT1VDSF9JTlRFUkFDVElPTlMpICQo
RU5BQkxFX1dFQkdMKSAkKEVOQUJMRV9XRUJHTDIpICQoRU5BQkxFX1dFQkdQVSkgJChFTkFCTEVf
V0VCWFIpICQoRU5BQkxFX1dFQl9BUElfU1RBVElTVElDUykgJChFTkFCTEVfV0VCX0FVRElPKSAk
KEVOQUJMRV9XRUJfQVVUSE4pICQoRU5BQkxFX1dFQl9DUllQVE8pICQoRU5BQkxFX1dFQl9SVEMp
ICQoRU5BQkxFX1dJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkgJChFTkFCTEVfWFNMVCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvQ29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmluZXMu
eGNjb25maWcgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvQ29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmlu
ZXMueGNjb25maWcKaW5kZXggYjRmNzg3OWFlNGNkNTk1MWI3ZWM3MzEwMzFlMWIwOTU5YTk0ZTYz
OS4uNjc5ZDMyYTFmYjRlNjgwM2VhMDFkY2FlOWQyZWQ2NTdlYmE4Y2JkZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvUEFML0NvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmln
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9Db25maWd1cmF0aW9ucy9GZWF0dXJlRGVmaW5lcy54
Y2NvbmZpZwpAQCAtMzgzLDYgKzM4Myw4IEBAIEVOQUJMRV9WSURFT19UUkFDSyA9IEVOQUJMRV9W
SURFT19UUkFDSzsKIEVOQUJMRV9WSURFT19VU0VTX0VMRU1FTlRfRlVMTFNDUkVFTiA9ICQoRU5B
QkxFX1ZJREVPX1VTRVNfRUxFTUVOVF9GVUxMU0NSRUVOXyQoV0tfUExBVEZPUk1fTkFNRSkpOwog
RU5BQkxFX1ZJREVPX1VTRVNfRUxFTUVOVF9GVUxMU0NSRUVOX21hY29zeCA9IEVOQUJMRV9WSURF
T19VU0VTX0VMRU1FTlRfRlVMTFNDUkVFTjsKIAorRU5BQkxFX1dFQl9BUkNISVZFID0gRU5BQkxF
X1dFQl9BUkNISVZFOworCiBFTkFCTEVfV0VCRFJJVkVSX01PVVNFX0lOVEVSQUNUSU9OUyA9ICQo
RU5BQkxFX1dFQkRSSVZFUl9NT1VTRV9JTlRFUkFDVElPTlNfJChXS19QTEFURk9STV9OQU1FKSk7
CiBFTkFCTEVfV0VCRFJJVkVSX01PVVNFX0lOVEVSQUNUSU9OU19tYWNvc3ggPSBFTkFCTEVfV0VC
RFJJVkVSX01PVVNFX0lOVEVSQUNUSU9OUzsKIApAQCAtNDI1LDQgKzQyNyw0IEBAIEVOQUJMRV9X
SVJFTEVTU19QTEFZQkFDS19UQVJHRVQgPSBFTkFCTEVfV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VU
OwogCiBFTkFCTEVfWFNMVCA9IEVOQUJMRV9YU0xUOwogCi1GRUFUVVJFX0RFRklORVMgPSAkKEVO
QUJMRV8zRF9UUkFOU0ZPUk1TKSAkKEVOQUJMRV9BQ0NFTEVSQVRFRF8yRF9DQU5WQVMpICQoRU5B
QkxFX0FDQ0VTU0lCSUxJVFlfSVNPTEFURURfVFJFRSkgJChFTkFCTEVfQVBQTEVfUEFZKSAkKEVO
QUJMRV9BUFBMRV9QQVlfU0VTU0lPTl9WMykgJChFTkFCTEVfQVBQTEVfUEFZX1NFU1NJT05fVjQp
ICQoRU5BQkxFX0FQUExFX1BBWV9TRVNTSU9OX1Y5KSAkKEVOQUJMRV9BUFBMSUNBVElPTl9NQU5J
RkVTVCkgJChFTkFCTEVfQVRUQUNITUVOVF9FTEVNRU5UKSAkKEVOQUJMRV9BVkZfQ0FQVElPTlMp
ICQoRU5BQkxFX0NBQ0hFX1BBUlRJVElPTklORykgJChFTkFCTEVfQ0hBTk5FTF9NRVNTQUdJTkcp
ICQoRU5BQkxFX0NPTlRFTlRfRklMVEVSSU5HKSAkKEVOQUJMRV9DU1MzX1RFWFQpICQoRU5BQkxF
X0NTU19CT1hfREVDT1JBVElPTl9CUkVBSykgJChFTkFCTEVfQ1NTX0NPTVBPU0lUSU5HKSAkKEVO
QUJMRV9DU1NfQ09OSUNfR1JBRElFTlRTKSAkKEVOQUJMRV9DU1NfSU1BR0VfUkVTT0xVVElPTikg
JChFTkFCTEVfQ1NTX1BBSU5USU5HX0FQSSkgJChFTkFCTEVfQ1NTX1NDUk9MTF9TTkFQKSAkKEVO
QUJMRV9DU1NfU0VMRUNUT1JTX0xFVkVMNCkgJChFTkFCTEVfQ1NTX1RSQUlMSU5HX1dPUkQpICQo
RU5BQkxFX0NTU19UWVBFRF9PTSkgJChFTkFCTEVfQ1VSU09SX1ZJU0lCSUxJVFkpICQoRU5BQkxF
X0NfTE9PUCkgJChFTkFCTEVfREFSS19NT0RFX0NTUykgJChFTkFCTEVfREFUQUNVRV9WQUxVRSkg
JChFTkFCTEVfREFUQUxJU1RfRUxFTUVOVCkgJChFTkFCTEVfREFUQV9JTlRFUkFDVElPTikgJChF
TkFCTEVfREVWSUNFX09SSUVOVEFUSU9OKSAkKEVOQUJMRV9EUkFHX1NVUFBPUlQpICQoRU5BQkxF
X0VESVRBQkxFX1JFR0lPTikgJChFTkFCTEVfRU5DUllQVEVEX01FRElBKSAkKEVOQUJMRV9FWFBF
UklNRU5UQUxfRkVBVFVSRVMpICQoRU5BQkxFX0ZJTFRFUlNfTEVWRUxfMikgJChFTkFCTEVfRlVM
TFNDUkVFTl9BUEkpICQoRU5BQkxFX1BJQ1RVUkVfSU5fUElDVFVSRV9BUEkpICQoRU5BQkxFX0dB
TUVQQUQpICQoRU5BQkxFX0dFT0xPQ0FUSU9OKSAkKEVOQUJMRV9HUFVfUFJPQ0VTUykgJChFTkFC
TEVfSU5ERVhFRF9EQVRBQkFTRSkgJChFTkFCTEVfSU5ERVhFRF9EQVRBQkFTRV9JTl9XT1JLRVJT
KSAkKEVOQUJMRV9JTlBVVF9UWVBFX0NPTE9SKSAkKEVOQUJMRV9JTlBVVF9UWVBFX0RBVEUpICQo
RU5BQkxFX0lOUFVUX1RZUEVfREFURVRJTUVMT0NBTCkgJChFTkFCTEVfSU5QVVRfVFlQRV9EQVRF
VElNRV9JTkNPTVBMRVRFKSAkKEVOQUJMRV9JTlBVVF9UWVBFX01PTlRIKSAkKEVOQUJMRV9JTlBV
VF9UWVBFX1RJTUUpICQoRU5BQkxFX0lOUFVUX1RZUEVfV0VFSykgJChFTkFCTEVfSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykgJChFTkFCTEVfSU5TUEVDVE9SX1RFTEVNRVRSWSkgJChF
TkFCTEVfSU5URVJTRUNUSU9OX09CU0VSVkVSKSAkKEVOQUJMRV9JT1NfR0VTVFVSRV9FVkVOVFMp
ICQoRU5BQkxFX0lPU19UT1VDSF9FVkVOVFMpICQoRU5BQkxFX0xBWU9VVF9GT1JNQVRUSU5HX0NP
TlRFWFQpICQoRU5BQkxFX0xFR0FDWV9DU1NfVkVORE9SX1BSRUZJWEVTKSAkKEVOQUJMRV9MRUdB
Q1lfQ1VTVE9NX1BST1RPQ09MX01BTkFHRVIpICQoRU5BQkxFX0xFR0FDWV9FTkNSWVBURURfTUVE
SUEpICQoRU5BQkxFX0xFVFRFUlBSRVNTKSAkKEVOQUJMRV9NQUNfR0VTVFVSRV9FVkVOVFMpICQo
RU5BQkxFX01BVEhNTCkgJChFTkFCTEVfTUVESUFfQ0FQVFVSRSkgJChFTkFCTEVfTUVESUFfQ09O
VFJPTFNfU0NSSVBUKSAkKEVOQUJMRV9NRURJQV9TRVNTSU9OKSAkKEVOQUJMRV9NRURJQV9TT1VS
Q0UpICQoRU5BQkxFX01FRElBX1NUQVRJU1RJQ1MpICQoRU5BQkxFX01FRElBX1NUUkVBTSkgJChF
TkFCTEVfTUVNT1JZX1NBTVBMRVIpICQoRU5BQkxFX01FVEVSX0VMRU1FTlQpICQoRU5BQkxFX01I
VE1MKSAkKEVOQUJMRV9NT1VTRV9DVVJTT1JfU0NBTEUpICQoRU5BQkxFX05BVklHQVRPUl9TVEFO
REFMT05FKSAkKEVOQUJMRV9ORVRXT1JLX0NBQ0hFX1NQRUNVTEFUSVZFX1JFVkFMSURBVElPTikg
JChFTkFCTEVfTkVUV09SS19DQUNIRV9TVEFMRV9XSElMRV9SRVZBTElEQVRFKSAkKEVOQUJMRV9O
T1RJRklDQVRJT05TKSAkKEVOQUJMRV9PRkZTQ1JFRU5fQ0FOVkFTKSAkKEVOQUJMRV9PVkVSRkxP
V19TQ1JPTExJTkdfVE9VQ0gpICQoRU5BQkxFX1BBWU1FTlRfUkVRVUVTVCkgJChFTkFCTEVfUERG
S0lUX1BMVUdJTikgJChFTkFCTEVfUE9JTlRFUl9MT0NLKSAkKEVOQUJMRV9QVUJMSUNfU1VGRklY
X0xJU1QpICQoRU5BQkxFX1FVT1RBKSAkKEVOQUJMRV9SRU1PVEVfSU5TUEVDVE9SKSAkKEVOQUJM
RV9SRVNJWkVfT0JTRVJWRVIpICQoRU5BQkxFX1JFU09MVVRJT05fTUVESUFfUVVFUlkpICQoRU5B
QkxFX1JFU09VUkNFX0xPQURfU1RBVElTVElDUykgJChFTkFCTEVfUkVTT1VSQ0VfVVNBR0UpICQo
RU5BQkxFX1JVQkJFUl9CQU5ESU5HKSAkKEVOQUJMRV9TQU5EQk9YX0VYVEVOU0lPTlMpICQoRU5B
QkxFX1NFUlZFUl9QUkVDT05ORUNUKSAkKEVOQUJMRV9TRVJWSUNFX0NPTlRST0xTKSAkKEVOQUJM
RV9TRVJWSUNFX1dPUktFUikgJChFTkFCTEVfU0hBUkVBQkxFX1JFU09VUkNFKSAkKEVOQUJMRV9T
UEVFQ0hfU1lOVEhFU0lTKSAkKEVOQUJMRV9TVFJFQU1TX0FQSSkgJChFTkFCTEVfU1ZHX0ZPTlRT
KSAkKEVOQUJMRV9URUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikgJChFTkFCTEVfVEVYVF9BVVRP
U0laSU5HKSAkKEVOQUJMRV9UT1VDSF9FVkVOVFMpICQoRU5BQkxFX1VTRVJTRUxFQ1RfQUxMKSAk
KEVOQUJMRV9VU0VSX01FU1NBR0VfSEFORExFUlMpICQoRU5BQkxFX1ZBUklBVElPTl9GT05UUykg
JChFTkFCTEVfVklERU8pICQoRU5BQkxFX1ZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSAkKEVOQUJM
RV9WSURFT19UUkFDSykgJChFTkFCTEVfVklERU9fVVNFU19FTEVNRU5UX0ZVTExTQ1JFRU4pICQo
RU5BQkxFX1dFQkRSSVZFUl9NT1VTRV9JTlRFUkFDVElPTlMpICQoRU5BQkxFX1dFQkRSSVZFUl9L
RVlCT0FSRF9JTlRFUkFDVElPTlMpICQoRU5BQkxFX1dFQkRSSVZFUl9UT1VDSF9JTlRFUkFDVElP
TlMpICQoRU5BQkxFX1dFQkdMKSAkKEVOQUJMRV9XRUJHTDIpICQoRU5BQkxFX1dFQkdQVSkgJChF
TkFCTEVfV0VCWFIpICQoRU5BQkxFX1dFQl9BUElfU1RBVElTVElDUykgJChFTkFCTEVfV0VCX0FV
RElPKSAkKEVOQUJMRV9XRUJfQVVUSE4pICQoRU5BQkxFX1dFQl9DUllQVE8pICQoRU5BQkxFX1dF
Ql9SVEMpICQoRU5BQkxFX1dJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkgJChFTkFCTEVfWFNMVCk7
CitGRUFUVVJFX0RFRklORVMgPSAkKEVOQUJMRV8zRF9UUkFOU0ZPUk1TKSAkKEVOQUJMRV9BQ0NF
TEVSQVRFRF8yRF9DQU5WQVMpICQoRU5BQkxFX0FDQ0VTU0lCSUxJVFlfSVNPTEFURURfVFJFRSkg
JChFTkFCTEVfQVBQTEVfUEFZKSAkKEVOQUJMRV9BUFBMRV9QQVlfU0VTU0lPTl9WMykgJChFTkFC
TEVfQVBQTEVfUEFZX1NFU1NJT05fVjQpICQoRU5BQkxFX0FQUExFX1BBWV9TRVNTSU9OX1Y5KSAk
KEVOQUJMRV9BUFBMSUNBVElPTl9NQU5JRkVTVCkgJChFTkFCTEVfQVRUQUNITUVOVF9FTEVNRU5U
KSAkKEVOQUJMRV9BVkZfQ0FQVElPTlMpICQoRU5BQkxFX0NBQ0hFX1BBUlRJVElPTklORykgJChF
TkFCTEVfQ0hBTk5FTF9NRVNTQUdJTkcpICQoRU5BQkxFX0NPTlRFTlRfRklMVEVSSU5HKSAkKEVO
QUJMRV9DU1MzX1RFWFQpICQoRU5BQkxFX0NTU19CT1hfREVDT1JBVElPTl9CUkVBSykgJChFTkFC
TEVfQ1NTX0NPTVBPU0lUSU5HKSAkKEVOQUJMRV9DU1NfQ09OSUNfR1JBRElFTlRTKSAkKEVOQUJM
RV9DU1NfSU1BR0VfUkVTT0xVVElPTikgJChFTkFCTEVfQ1NTX1BBSU5USU5HX0FQSSkgJChFTkFC
TEVfQ1NTX1NDUk9MTF9TTkFQKSAkKEVOQUJMRV9DU1NfU0VMRUNUT1JTX0xFVkVMNCkgJChFTkFC
TEVfQ1NTX1RSQUlMSU5HX1dPUkQpICQoRU5BQkxFX0NTU19UWVBFRF9PTSkgJChFTkFCTEVfQ1VS
U09SX1ZJU0lCSUxJVFkpICQoRU5BQkxFX0NfTE9PUCkgJChFTkFCTEVfREFSS19NT0RFX0NTUykg
JChFTkFCTEVfREFUQUNVRV9WQUxVRSkgJChFTkFCTEVfREFUQUxJU1RfRUxFTUVOVCkgJChFTkFC
TEVfREFUQV9JTlRFUkFDVElPTikgJChFTkFCTEVfREVWSUNFX09SSUVOVEFUSU9OKSAkKEVOQUJM
RV9EUkFHX1NVUFBPUlQpICQoRU5BQkxFX0VESVRBQkxFX1JFR0lPTikgJChFTkFCTEVfRU5DUllQ
VEVEX01FRElBKSAkKEVOQUJMRV9FWFBFUklNRU5UQUxfRkVBVFVSRVMpICQoRU5BQkxFX0ZJTFRF
UlNfTEVWRUxfMikgJChFTkFCTEVfRlVMTFNDUkVFTl9BUEkpICQoRU5BQkxFX1BJQ1RVUkVfSU5f
UElDVFVSRV9BUEkpICQoRU5BQkxFX0dBTUVQQUQpICQoRU5BQkxFX0dFT0xPQ0FUSU9OKSAkKEVO
QUJMRV9HUFVfUFJPQ0VTUykgJChFTkFCTEVfSU5ERVhFRF9EQVRBQkFTRSkgJChFTkFCTEVfSU5E
RVhFRF9EQVRBQkFTRV9JTl9XT1JLRVJTKSAkKEVOQUJMRV9JTlBVVF9UWVBFX0NPTE9SKSAkKEVO
QUJMRV9JTlBVVF9UWVBFX0RBVEUpICQoRU5BQkxFX0lOUFVUX1RZUEVfREFURVRJTUVMT0NBTCkg
JChFTkFCTEVfSU5QVVRfVFlQRV9EQVRFVElNRV9JTkNPTVBMRVRFKSAkKEVOQUJMRV9JTlBVVF9U
WVBFX01PTlRIKSAkKEVOQUJMRV9JTlBVVF9UWVBFX1RJTUUpICQoRU5BQkxFX0lOUFVUX1RZUEVf
V0VFSykgJChFTkFCTEVfSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykgJChFTkFCTEVf
SU5TUEVDVE9SX1RFTEVNRVRSWSkgJChFTkFCTEVfSU5URVJTRUNUSU9OX09CU0VSVkVSKSAkKEVO
QUJMRV9JT1NfR0VTVFVSRV9FVkVOVFMpICQoRU5BQkxFX0lPU19UT1VDSF9FVkVOVFMpICQoRU5B
QkxFX0xBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpICQoRU5BQkxFX0xFR0FDWV9DU1NfVkVORE9S
X1BSRUZJWEVTKSAkKEVOQUJMRV9MRUdBQ1lfQ1VTVE9NX1BST1RPQ09MX01BTkFHRVIpICQoRU5B
QkxFX0xFR0FDWV9FTkNSWVBURURfTUVESUEpICQoRU5BQkxFX0xFVFRFUlBSRVNTKSAkKEVOQUJM
RV9NQUNfR0VTVFVSRV9FVkVOVFMpICQoRU5BQkxFX01BVEhNTCkgJChFTkFCTEVfTUVESUFfQ0FQ
VFVSRSkgJChFTkFCTEVfTUVESUFfQ09OVFJPTFNfU0NSSVBUKSAkKEVOQUJMRV9NRURJQV9TRVNT
SU9OKSAkKEVOQUJMRV9NRURJQV9TT1VSQ0UpICQoRU5BQkxFX01FRElBX1NUQVRJU1RJQ1MpICQo
RU5BQkxFX01FRElBX1NUUkVBTSkgJChFTkFCTEVfTUVNT1JZX1NBTVBMRVIpICQoRU5BQkxFX01F
VEVSX0VMRU1FTlQpICQoRU5BQkxFX01IVE1MKSAkKEVOQUJMRV9NT1VTRV9DVVJTT1JfU0NBTEUp
ICQoRU5BQkxFX05BVklHQVRPUl9TVEFOREFMT05FKSAkKEVOQUJMRV9ORVRXT1JLX0NBQ0hFX1NQ
RUNVTEFUSVZFX1JFVkFMSURBVElPTikgJChFTkFCTEVfTkVUV09SS19DQUNIRV9TVEFMRV9XSElM
RV9SRVZBTElEQVRFKSAkKEVOQUJMRV9OT1RJRklDQVRJT05TKSAkKEVOQUJMRV9PRkZTQ1JFRU5f
Q0FOVkFTKSAkKEVOQUJMRV9PVkVSRkxPV19TQ1JPTExJTkdfVE9VQ0gpICQoRU5BQkxFX1BBWU1F
TlRfUkVRVUVTVCkgJChFTkFCTEVfUERGS0lUX1BMVUdJTikgJChFTkFCTEVfUE9JTlRFUl9MT0NL
KSAkKEVOQUJMRV9QVUJMSUNfU1VGRklYX0xJU1QpICQoRU5BQkxFX1FVT1RBKSAkKEVOQUJMRV9S
RU1PVEVfSU5TUEVDVE9SKSAkKEVOQUJMRV9SRVNJWkVfT0JTRVJWRVIpICQoRU5BQkxFX1JFU09M
VVRJT05fTUVESUFfUVVFUlkpICQoRU5BQkxFX1JFU09VUkNFX0xPQURfU1RBVElTVElDUykgJChF
TkFCTEVfUkVTT1VSQ0VfVVNBR0UpICQoRU5BQkxFX1JVQkJFUl9CQU5ESU5HKSAkKEVOQUJMRV9T
QU5EQk9YX0VYVEVOU0lPTlMpICQoRU5BQkxFX1NFUlZFUl9QUkVDT05ORUNUKSAkKEVOQUJMRV9T
RVJWSUNFX0NPTlRST0xTKSAkKEVOQUJMRV9TRVJWSUNFX1dPUktFUikgJChFTkFCTEVfU0hBUkVB
QkxFX1JFU09VUkNFKSAkKEVOQUJMRV9TUEVFQ0hfU1lOVEhFU0lTKSAkKEVOQUJMRV9TVFJFQU1T
X0FQSSkgJChFTkFCTEVfU1ZHX0ZPTlRTKSAkKEVOQUJMRV9URUxFUEhPTkVfTlVNQkVSX0RFVEVD
VElPTikgJChFTkFCTEVfVEVYVF9BVVRPU0laSU5HKSAkKEVOQUJMRV9UT1VDSF9FVkVOVFMpICQo
RU5BQkxFX1VTRVJTRUxFQ1RfQUxMKSAkKEVOQUJMRV9VU0VSX01FU1NBR0VfSEFORExFUlMpICQo
RU5BQkxFX1ZBUklBVElPTl9GT05UUykgJChFTkFCTEVfVklERU8pICQoRU5BQkxFX1ZJREVPX1BS
RVNFTlRBVElPTl9NT0RFKSAkKEVOQUJMRV9WSURFT19UUkFDSykgJChFTkFCTEVfVklERU9fVVNF
U19FTEVNRU5UX0ZVTExTQ1JFRU4pICQoRU5BQkxFX1dFQl9BUkNISVZFKSAkKEVOQUJMRV9XRUJE
UklWRVJfTU9VU0VfSU5URVJBQ1RJT05TKSAkKEVOQUJMRV9XRUJEUklWRVJfS0VZQk9BUkRfSU5U
RVJBQ1RJT05TKSAkKEVOQUJMRV9XRUJEUklWRVJfVE9VQ0hfSU5URVJBQ1RJT05TKSAkKEVOQUJM
RV9XRUJHTCkgJChFTkFCTEVfV0VCR0wyKSAkKEVOQUJMRV9XRUJHUFUpICQoRU5BQkxFX1dFQlhS
KSAkKEVOQUJMRV9XRUJfQVBJX1NUQVRJU1RJQ1MpICQoRU5BQkxFX1dFQl9BVURJTykgJChFTkFC
TEVfV0VCX0FVVEhOKSAkKEVOQUJMRV9XRUJfQ1JZUFRPKSAkKEVOQUJMRV9XRUJfUlRDKSAkKEVO
QUJMRV9XSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpICQoRU5BQkxFX1hTTFQpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5pZGwgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmlkbAppbmRleCBl
NzhjMTg5MTk2MjllN2NmMTE5NDIzZDI2OGExYTRlOWNlZTJkOTU4Li4yY2NhMWI3MDMyYmFlY2I5
ZTJiNzE5YTllNWU1NzRlYjQzMDA5ZTRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmlkbApAQCAtOTMsOSArOTMsNyBAQAogICAgIGJv
b2xlYW4gaXNCZWluZ0luc3BlY3RlZCgpOwogCiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGJvb2xl
YW4gc3VwcG9ydHNEaWFnbm9zdGljTG9nZ2luZzsKLSNpZiBFTkFCTEVfSU5TUEVDVE9SX1RFTEVN
RVRSWQotICAgIHZvaWQgbG9nRGlhZ25vc3RpY0V2ZW50KERPTVN0cmluZyBldmVudE5hbWUsIERP
TVN0cmluZyBjb250ZW50KTsKLSNlbmRpZgorICAgIFtDb25kaXRpb25hbD1JTlNQRUNUT1JfVEVM
RU1FVFJZXSB2b2lkIGxvZ0RpYWdub3N0aWNFdmVudChET01TdHJpbmcgZXZlbnROYW1lLCBET01T
dHJpbmcgY29udGVudCk7CiB9OwogCiBkaWN0aW9uYXJ5IENvbnRleHRNZW51SXRlbSB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24u
Y3BwCmluZGV4IDBjNDQyZWU5MDg4NzdkMjA2N2Q2NWU4NzQ0MTY1MmE4Y2YwMGM4OGUuLmFjYTkz
Mjg2YWE0YTMyYTYzNDE2OTA4NWJlNDcyMjRjNGJjYWY4ZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwCkBAIC03OTMs
MTEgKzc5MywxMyBAQCB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZnJhbWVDbGVhcmVk
U2NoZWR1bGVkTmF2aWdhdGlvbkltcGwoSW5zdHJ1bWVudGluZwogICAgICAgICBpbnNwZWN0b3JQ
YWdlQWdlbnQtPmZyYW1lQ2xlYXJlZFNjaGVkdWxlZE5hdmlnYXRpb24oZnJhbWUpOwogfQogCisj
aWYgRU5BQkxFKERBUktfTU9ERV9DU1MpIHx8IEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCiB2
b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGVmYXVsdEFwcGVhcmFuY2VEaWRDaGFuZ2VJ
bXBsKEluc3RydW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMsIGJvb2wgdXNlRGFy
a0FwcGVhcmFuY2UpCiB7CiAgICAgaWYgKEluc3BlY3RvclBhZ2VBZ2VudCogaW5zcGVjdG9yUGFn
ZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JQYWdlQWdlbnQoKSkKICAgICAg
ICAgaW5zcGVjdG9yUGFnZUFnZW50LT5kZWZhdWx0QXBwZWFyYW5jZURpZENoYW5nZSh1c2VEYXJr
QXBwZWFyYW5jZSk7CiB9CisjZW5kaWYKIAogdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OndpbGxEZXN0cm95Q2FjaGVkUmVzb3VyY2VJbXBsKENhY2hlZFJlc291cmNlJiBjYWNoZWRSZXNv
dXJjZSkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0
cnVtZW50YXRpb24uaAppbmRleCAwM2JkZDU1Y2M5MzBkZTBjZmM2MWY4ZDllNDIxMGY0OTUyYWE0
NjMzLi4xODg5NTY0NzhlMTJlNWJhNGNlZDQ1NjhhOGU0ZmE0ZGQ5NzdiM2EyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oCkBA
IC0yMjksNyArMjI5LDkgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGZyYW1lU3RvcHBlZExv
YWRpbmcoRnJhbWUmKTsKICAgICBzdGF0aWMgdm9pZCBmcmFtZVNjaGVkdWxlZE5hdmlnYXRpb24o
RnJhbWUmLCBTZWNvbmRzIGRlbGF5KTsKICAgICBzdGF0aWMgdm9pZCBmcmFtZUNsZWFyZWRTY2hl
ZHVsZWROYXZpZ2F0aW9uKEZyYW1lJik7CisjaWYgRU5BQkxFKERBUktfTU9ERV9DU1MpIHx8IEhB
VkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCiAgICAgc3RhdGljIHZvaWQgZGVmYXVsdEFwcGVhcmFu
Y2VEaWRDaGFuZ2UoUGFnZSYsIGJvb2wgdXNlRGFya0FwcGVhcmFuY2UpOworI2VuZGlmCiAgICAg
c3RhdGljIHZvaWQgd2lsbERlc3Ryb3lDYWNoZWRSZXNvdXJjZShDYWNoZWRSZXNvdXJjZSYpOwog
CiAgICAgc3RhdGljIGJvb2wgd2lsbEludGVyY2VwdFJlcXVlc3QoY29uc3QgRnJhbWUqLCBjb25z
dCBSZXNvdXJjZVJlcXVlc3QmKTsKQEAgLTQzNCw3ICs0MzYsOSBAQCBwcml2YXRlOgogICAgIHN0
YXRpYyB2b2lkIGZyYW1lU3RvcHBlZExvYWRpbmdJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmLCBG
cmFtZSYpOwogICAgIHN0YXRpYyB2b2lkIGZyYW1lU2NoZWR1bGVkTmF2aWdhdGlvbkltcGwoSW5z
dHJ1bWVudGluZ0FnZW50cyYsIEZyYW1lJiwgU2Vjb25kcyBkZWxheSk7CiAgICAgc3RhdGljIHZv
aWQgZnJhbWVDbGVhcmVkU2NoZWR1bGVkTmF2aWdhdGlvbkltcGwoSW5zdHJ1bWVudGluZ0FnZW50
cyYsIEZyYW1lJik7CisjaWYgRU5BQkxFKERBUktfTU9ERV9DU1MpIHx8IEhBVkUoT1NfREFSS19N
T0RFX1NVUFBPUlQpCiAgICAgc3RhdGljIHZvaWQgZGVmYXVsdEFwcGVhcmFuY2VEaWRDaGFuZ2VJ
bXBsKEluc3RydW1lbnRpbmdBZ2VudHMmLCBib29sIHVzZURhcmtBcHBlYXJhbmNlKTsKKyNlbmRp
ZgogICAgIHN0YXRpYyB2b2lkIHdpbGxEZXN0cm95Q2FjaGVkUmVzb3VyY2VJbXBsKENhY2hlZFJl
c291cmNlJik7CiAKICAgICBzdGF0aWMgYm9vbCB3aWxsSW50ZXJjZXB0UmVxdWVzdEltcGwoSW5z
dHJ1bWVudGluZ0FnZW50cyYsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYpOwpAQCAtMTIzNywxMSAr
MTI0MSwxMyBAQCBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmZyYW1lQ2xl
YXJlZFNjaGVkdWxlZE5hdmlnYXRpb24oRnJhbWUmIGZyYQogICAgICAgICBmcmFtZUNsZWFyZWRT
Y2hlZHVsZWROYXZpZ2F0aW9uSW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgZnJhbWUpOwogfQog
CisjaWYgRU5BQkxFKERBUktfTU9ERV9DU1MpIHx8IEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQp
CiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRlZmF1bHRBcHBlYXJhbmNl
RGlkQ2hhbmdlKFBhZ2UmIHBhZ2UsIGJvb2wgdXNlRGFya0FwcGVhcmFuY2UpCiB7CiAgICAgRkFT
VF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7CiAgICAgZGVmYXVsdEFwcGVhcmFuY2VE
aWRDaGFuZ2VJbXBsKGluc3RydW1lbnRpbmdBZ2VudHNGb3JQYWdlKHBhZ2UpLCB1c2VEYXJrQXBw
ZWFyYW5jZSk7CiB9CisjZW5kaWYKIAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjp3aWxsRGVzdHJveUNhY2hlZFJlc291cmNlKENhY2hlZFJlc291cmNlJiBjYWNoZWRSZXNv
dXJjZSkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JT
aGFkZXJQcm9ncmFtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTaGFk
ZXJQcm9ncmFtLmNwcAppbmRleCAyOTFiZDI0YjA2ZjM3ZDNiNDQ4ZTdiN2VjMzc4NjQ4NDE3OWFl
ZTU2Li5mODE2YmI2ZjQzNmYyNmY3Yjg2M2YxMTllYjFjOTAxNGQ3MGZmODgxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU2hhZGVyUHJvZ3JhbS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclNoYWRlclByb2dyYW0uY3BwCkBA
IC0yNiw2ICsyNiw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9y
U2hhZGVyUHJvZ3JhbS5oIgogCisjaWYgRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKQor
CiAjaW5jbHVkZSAiSW5zcGVjdG9yQ2FudmFzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SWRlbnRpZmllcnNGYWN0b3J5Lmg+CiAjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CkBAIC0xNTIs
MTAgKzE1NCw2IEBAIHN0YXRpYyBSZWZQdHI8V2ViR1BVU2hhZGVyTW9kdWxlPiBzaGFkZXJGb3JU
eXBlKFdlYkdQVVBpcGVsaW5lJiBwaXBlbGluZSwgSW5zcGVjCiAKIFN0cmluZyBJbnNwZWN0b3JT
aGFkZXJQcm9ncmFtOjpyZXF1ZXN0U2hhZGVyU291cmNlKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNh
bnZhczo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlKQogewotI2lmICFFTkFCTEUoV0VCR0wpICYmICFF
TkFCTEUoV0VCR1BVKQotICAgIFVOVVNFRF9QQVJBTShzaGFkZXJUeXBlKTsKLSNlbmRpZgotCiAg
ICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9wcm9ncmFtLAogI2lmIEVOQUJMRShXRUJHTCkKICAg
ICAgICAgWyZdIChzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFdlYkdMUHJvZ3JhbT4gcHJvZ3JhbVdy
YXBwZXIpIHsKQEAgLTE4NCwxMSArMTgyLDYgQEAgU3RyaW5nIEluc3BlY3RvclNoYWRlclByb2dy
YW06OnJlcXVlc3RTaGFkZXJTb3VyY2UoSW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjoKIAog
Ym9vbCBJbnNwZWN0b3JTaGFkZXJQcm9ncmFtOjp1cGRhdGVTaGFkZXIoSW5zcGVjdG9yOjpQcm90
b2NvbDo6Q2FudmFzOjpTaGFkZXJUeXBlIHNoYWRlclR5cGUsIGNvbnN0IFN0cmluZyYgc291cmNl
KQogewotI2lmICFFTkFCTEUoV0VCR0wpICYmICFFTkFCTEUoV0VCR1BVKQotICAgIFVOVVNFRF9Q
QVJBTShzaGFkZXJUeXBlKTsKLSAgICBVTlVTRURfUEFSQU0oc291cmNlKTsKLSNlbmRpZgotCiAg
ICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9wcm9ncmFtLAogI2lmIEVOQUJMRShXRUJHTCkKICAg
ICAgICAgWyZdIChzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFdlYkdMUHJvZ3JhbT4gcHJvZ3JhbVdy
YXBwZXIpIHsKQEAgLTI4MSwzICsyNzQsNSBAQCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q2Fu
dmFzOjpTaGFkZXJQcm9ncmFtPiBJbnNwZWN0b3JTaGFkZXJQcm9ncmFtOjpidWlsZE9iagogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpIHx8IEVO
QUJMRShXRUJHUFUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yU2hhZGVyUHJvZ3JhbS5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclNo
YWRlclByb2dyYW0uaAppbmRleCA2ZGYxM2RmZmRlYjQwMDQwZmQ4YWE4OWJiZjQwNjVhZTgwNGZi
NjY2Li5jY2M3M2NlZjM3NDY3MDY3MGQ1OTZhOTNiMzJmZTA5YTU1ZDQzNWJiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU2hhZGVyUHJvZ3JhbS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTaGFkZXJQcm9ncmFtLmgKQEAgLTI1
LDYgKzI1LDggQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpZiBFTkFCTEUoV0VCR0wpIHx8IEVOQUJM
RShXRUJHUFUpCisKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbE9i
amVjdHMuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+CkBAIC05OSwzICsxMDEsNSBAQCBwcml2YXRlOgogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDYW52YXNB
Z2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNhbnZh
c0FnZW50LmNwcAppbmRleCAxZDM5OGM1NDdjYzJmZjI5MTgwNTY3YjYyMDgwOGVhOTYxZTI2NWY1
Li43MmI3MzdmOTQyN2IyMWM2NTAwMGE4NGEwNjg2ZTMyMjg1YzRkN2I3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNhbnZhc0FnZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNhbnZhc0FnZW50
LmNwcApAQCAtODgsNyArODgsOSBAQCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6SW5zcGVjdG9yQ2Fu
dmFzQWdlbnQoUGFnZUFnZW50Q29udGV4dCYgY29udGV4dCkKICAgICAsIG1faW5qZWN0ZWRTY3Jp
cHRNYW5hZ2VyKGNvbnRleHQuaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKQogICAgICwgbV9pbnNwZWN0
ZWRQYWdlKGNvbnRleHQuaW5zcGVjdGVkUGFnZSkKICAgICAsIG1fY2FudmFzRGVzdHJveWVkVGlt
ZXIoKnRoaXMsICZJbnNwZWN0b3JDYW52YXNBZ2VudDo6Y2FudmFzRGVzdHJveWVkVGltZXJGaXJl
ZCkKKyNpZiBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpCiAgICAgLCBtX3Byb2dyYW1E
ZXN0cm95ZWRUaW1lcigqdGhpcywgJkluc3BlY3RvckNhbnZhc0FnZW50Ojpwcm9ncmFtRGVzdHJv
eWVkVGltZXJGaXJlZCkKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUp
CiB7CiB9CiAKQEAgLTEzMiw3ICsxMzQsNyBAQCB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50Ojpl
bmFibGUoRXJyb3JTdHJpbmcmKQogICAgICAgICAgICAgLy8gVGhlIGFjdHVhbCAiY29udGV4dCIg
Zm9yIFdlYkdQVSBpcyB0aGUgYFdlYkdQVURldmljZWAsIG5vdCB0aGUgPGNhbnZhcz4uCiAgICAg
ICAgICAgICBpZiAoaXM8R1BVQ2FudmFzQ29udGV4dD4oY29udGV4dCkpCiAgICAgICAgICAgICAg
ICAgY29udGludWU7Ci0jZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR1BVKQogCiAgICAgICAg
ICAgICBpZiAoZXhpc3RzSW5DdXJyZW50UGFnZShjb250ZXh0LT5jYW52YXNCYXNlKCkuc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpKSkKICAgICAgICAgICAgICAgICBiaW5kQ2FudmFzKCpjb250ZXh0
LCBmYWxzZSk7CkBAIC0xNDcsNyArMTQ5LDcgQEAgdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6
ZW5hYmxlKEVycm9yU3RyaW5nJikKICAgICAgICAgICAgICAgICBiaW5kQ2FudmFzKCpkZXZpY2Us
IGZhbHNlKTsKICAgICAgICAgfQogICAgIH0KLSNlbmRpZgorI2VuZGlmIC8vIEVOQUJMRShXRUJH
UFUpCiAKICNpZiBFTkFCTEUoV0VCR0wpCiAgICAgewpAQCAtMTU3LDcgKzE1OSw3IEBAIHZvaWQg
SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYpCiAgICAgICAgICAgICAg
ICAgZGlkQ3JlYXRlV2ViR0xQcm9ncmFtKCpjb250ZXh0V2ViR0xCYXNlLCAqcHJvZ3JhbSk7CiAg
ICAgICAgIH0KICAgICB9Ci0jZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCiAKICNpZiBF
TkFCTEUoV0VCR1BVKQogICAgIHsKQEAgLTE2Nyw3ICsxNjksNyBAQCB2b2lkIEluc3BlY3RvckNh
bnZhc0FnZW50OjplbmFibGUoRXJyb3JTdHJpbmcmKQogICAgICAgICAgICAgICAgIGRpZENyZWF0
ZVdlYkdQVVBpcGVsaW5lKCpkZXZpY2UsICpwaXBlbGluZSk7CiAgICAgICAgIH0KICAgICB9Ci0j
ZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR1BVKQogfQogCiB2b2lkIEluc3BlY3RvckNhbnZh
c0FnZW50OjpkaXNhYmxlKEVycm9yU3RyaW5nJikKQEAgLTMwMyw2ICszMDUsNyBAQCB2b2lkIElu
c3BlY3RvckNhbnZhc0FnZW50OjpzdG9wUmVjb3JkaW5nKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgY29uc3QgU3RyaW5nJgogICAgIGRpZEZpbmlzaFJlY29yZGluZ0NhbnZhc0ZyYW1lKCpjb250
ZXh0LCB0cnVlKTsKIH0KIAorI2lmIEVOQUJMRShXRUJHTCkgfHwgRU5BQkxFKFdFQkdQVSkKIHZv
aWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnJlcXVlc3RTaGFkZXJTb3VyY2UoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHByb2dyYW1JZCwgY29uc3QgU3RyaW5nJiBzaGFk
ZXJUeXBlU3RyaW5nLCBTdHJpbmcqIG91dFNvdXJjZSkKIHsKICAgICBhdXRvIGluc3BlY3RvclBy
b2dyYW0gPSBhc3NlcnRJbnNwZWN0b3JQcm9ncmFtKGVycm9yU3RyaW5nLCBwcm9ncmFtSWQpOwpA
QCAtMzQwLDYgKzM0Myw3IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnVwZGF0ZVNoYWRl
cihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYKICAgICAgICAgZXJyb3JT
dHJpbmcgPSAiRmFpbGVkIHRvIHVwZGF0ZSBzaGFkZXIgb2YgZ2l2ZW4gc2hhZGVyVHlwZSBmb3Ig
Z2l2ZW4gcHJvZ3JhbUlkIl9zOwogfQogCisjaWYgRU5BQkxFKFdFQkdMKQogdm9pZCBJbnNwZWN0
b3JDYW52YXNBZ2VudDo6c2V0U2hhZGVyUHJvZ3JhbURpc2FibGVkKEVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgY29uc3QgU3RyaW5nJiBwcm9ncmFtSWQsIGJvb2wgZGlzYWJsZWQpCiB7CiAgICAg
YXV0byBpbnNwZWN0b3JQcm9ncmFtID0gYXNzZXJ0SW5zcGVjdG9yUHJvZ3JhbShlcnJvclN0cmlu
ZywgcHJvZ3JhbUlkKTsKQEAgLTM1Nyw2ICszNjEsOCBAQCB2b2lkIEluc3BlY3RvckNhbnZhc0Fn
ZW50OjpzZXRTaGFkZXJQcm9ncmFtSGlnaGxpZ2h0ZWQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
LAogCiAgICAgaW5zcGVjdG9yUHJvZ3JhbS0+c2V0SGlnaGxpZ2h0ZWQoaGlnaGxpZ2h0ZWQpOwog
fQorI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpIHx8IEVO
QUJMRShXRUJHUFUpCiAKIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmZyYW1lTmF2aWdhdGVk
KEZyYW1lJiBmcmFtZSkKIHsKQEAgLTYyNSw3ICs2MzEsNyBAQCBib29sIEluc3BlY3RvckNhbnZh
c0FnZW50Ojppc1dlYkdMUHJvZ3JhbUhpZ2hsaWdodGVkKFdlYkdMUHJvZ3JhbSYgcHJvZ3JhbSkK
IAogICAgIHJldHVybiBpbnNwZWN0b3JQcm9ncmFtLT5oaWdobGlnaHRlZCgpOwogfQotI2VuZGlm
CisjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIHZvaWQgSW5z
cGVjdG9yQ2FudmFzQWdlbnQ6OmRpZENyZWF0ZVdlYkdQVURldmljZShXZWJHUFVEZXZpY2UmIGRl
dmljZSkKQEAgLTY4OCw3ICs2OTQsNyBAQCB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50Ojp3aWxs
RGVzdHJveVdlYkdQVVBpcGVsaW5lKFdlYkdQVVBpcGVsaW5lJiBwaXBlbGluZSkKIAogICAgIHVu
YmluZFByb2dyYW0oKmluc3BlY3RvclByb2dyYW0pOwogfQotI2VuZGlmCisjZW5kaWYgLy8gRU5B
QkxFKFdFQkdQVSkKIAogdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6c3RhcnRSZWNvcmRpbmco
SW5zcGVjdG9yQ2FudmFzJiBpbnNwZWN0b3JDYW52YXMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJl
Y29yZGluZzo6SW5pdGlhdG9yIGluaXRpYXRvciwgUmVjb3JkaW5nT3B0aW9ucyYmIHJlY29yZGlu
Z09wdGlvbnMpCiB7CkBAIC03MDAsMTAgKzcwNiwxMCBAQCB2b2lkIEluc3BlY3RvckNhbnZhc0Fn
ZW50OjpzdGFydFJlY29yZGluZyhJbnNwZWN0b3JDYW52YXMmIGluc3BlY3RvckNhbnZhcywgSW5z
cAogICAgICAgICAmJiAhaXM8SW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0Pihjb250ZXh0KQog
I2lmIEVOQUJMRShXRUJHTCkKICAgICAgICAgJiYgIWlzPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4o
Y29udGV4dCkKLSNlbmRpZgorI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKICNpZiBFTkFCTEUoV0VC
R0wyKQogICAgICAgICAmJiAhaXM8V2ViR0wyUmVuZGVyaW5nQ29udGV4dD4oY29udGV4dCkKLSNl
bmRpZgorI2VuZGlmIC8vIEVOQUJMRShXRUJHTDIpCiAgICAgKQogICAgICAgICByZXR1cm47CiAK
QEAgLTczMyw2ICs3MzksNyBAQCB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpjYW52YXNEZXN0
cm95ZWRUaW1lckZpcmVkKCkKICAgICBtX3JlbW92ZWRDYW52YXNJZGVudGlmaWVycy5jbGVhcigp
OwogfQogCisjaWYgRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKQogdm9pZCBJbnNwZWN0
b3JDYW52YXNBZ2VudDo6cHJvZ3JhbURlc3Ryb3llZFRpbWVyRmlyZWQoKQogewogICAgIGlmICgh
bV9yZW1vdmVkUHJvZ3JhbUlkZW50aWZpZXJzLnNpemUoKSkKQEAgLTc0Myw2ICs3NTAsNyBAQCB2
b2lkIEluc3BlY3RvckNhbnZhc0FnZW50Ojpwcm9ncmFtRGVzdHJveWVkVGltZXJGaXJlZCgpCiAK
ICAgICBtX3JlbW92ZWRQcm9ncmFtSWRlbnRpZmllcnMuY2xlYXIoKTsKIH0KKyNlbmRpZiAvLyBF
TkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpCiAKIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdl
bnQ6OnJlc2V0KCkKIHsKQEAgLTc1NiwxMCArNzY0LDEyIEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFz
QWdlbnQ6OnJlc2V0KCkKICAgICBpZiAobV9jYW52YXNEZXN0cm95ZWRUaW1lci5pc0FjdGl2ZSgp
KQogICAgICAgICBtX2NhbnZhc0Rlc3Ryb3llZFRpbWVyLnN0b3AoKTsKIAorI2lmIEVOQUJMRShX
RUJHTCkgfHwgRU5BQkxFKFdFQkdQVSkKICAgICBtX2lkZW50aWZpZXJUb0luc3BlY3RvclByb2dy
YW0uY2xlYXIoKTsKICAgICBtX3JlbW92ZWRQcm9ncmFtSWRlbnRpZmllcnMuY2xlYXIoKTsKICAg
ICBpZiAobV9wcm9ncmFtRGVzdHJveWVkVGltZXIuaXNBY3RpdmUoKSkKICAgICAgICAgbV9wcm9n
cmFtRGVzdHJveWVkVGltZXIuc3RvcCgpOworI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkgfHwgRU5B
QkxFKFdFQkdQVSkKIAogICAgIG1fcmVjb3JkaW5nQ2FudmFzSWRlbnRpZmllcnMuY2xlYXIoKTsK
IH0KQEAgLTc5OCw3ICs4MDgsNyBAQCBJbnNwZWN0b3JDYW52YXMmIEluc3BlY3RvckNhbnZhc0Fn
ZW50OjpiaW5kQ2FudmFzKFdlYkdQVURldmljZSYgZGV2aWNlLCBib29sIGNhcAogCiAgICAgcmV0
dXJuIGluc3BlY3RvckNhbnZhczsKIH0KLSNlbmRpZgorI2VuZGlmIC8vIEVOQUJMRShXRUJHUFUp
CiAKIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnVuYmluZENhbnZhcyhJbnNwZWN0b3JDYW52
YXMmIGluc3BlY3RvckNhbnZhcykKIHsKQEAgLTgxMSw3ICs4MjEsNyBAQCB2b2lkIEluc3BlY3Rv
ckNhbnZhc0FnZW50Ojp1bmJpbmRDYW52YXMoSW5zcGVjdG9yQ2FudmFzJiBpbnNwZWN0b3JDYW52
YXMpCiAKICAgICBmb3IgKGF1dG8qIGluc3BlY3RvclByb2dyYW0gOiBwcm9ncmFtc1RvUmVtb3Zl
KQogICAgICAgICB1bmJpbmRQcm9ncmFtKCppbnNwZWN0b3JQcm9ncmFtKTsKLSNlbmRpZgorI2Vu
ZGlmIC8vIEVOQUJMRShXRUJHTCkKIAogICAgIGlmIChhdXRvKiBjb250ZXh0ID0gaW5zcGVjdG9y
Q2FudmFzLmNhbnZhc0NvbnRleHQoKSkKICAgICAgICAgY29udGV4dC0+Y2FudmFzQmFzZSgpLnJl
bW92ZU9ic2VydmVyKCp0aGlzKTsKQEAgLTg1Niw4ICs4NjYsOSBAQCBSZWZQdHI8SW5zcGVjdG9y
Q2FudmFzPiBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZmluZEluc3BlY3RvckNhbnZhcyhXZWJHUFVE
ZXZpY2UmCiAgICAgfQogICAgIHJldHVybiBudWxscHRyOwogfQotI2VuZGlmCisjZW5kaWYgLy8g
RU5BQkxFKFdFQkdQVSkKIAorI2lmIEVOQUJMRShXRUJHTCkgfHwgRU5BQkxFKFdFQkdQVSkKIHZv
aWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnVuYmluZFByb2dyYW0oSW5zcGVjdG9yU2hhZGVyUHJv
Z3JhbSYgaW5zcGVjdG9yUHJvZ3JhbSkKIHsKICAgICBTdHJpbmcgaWRlbnRpZmllciA9IGluc3Bl
Y3RvclByb2dyYW0uaWRlbnRpZmllcigpOwpAQCAtODkxLDcgKzkwMiw3IEBAIFJlZlB0cjxJbnNw
ZWN0b3JTaGFkZXJQcm9ncmFtPiBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZmluZEluc3BlY3RvclBy
b2dyYW0oV2ViR0xQCiAgICAgfQogICAgIHJldHVybiBudWxscHRyOwogfQotI2VuZGlmCisjZW5k
aWYgLy8gRU5BQkxFKFdFQkdMKQogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIFJlZlB0cjxJbnNwZWN0
b3JTaGFkZXJQcm9ncmFtPiBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZmluZEluc3BlY3RvclByb2dy
YW0oV2ViR1BVUGlwZWxpbmUmIHBpcGVsaW5lKQpAQCAtOTAyLDYgKzkxMyw3IEBAIFJlZlB0cjxJ
bnNwZWN0b3JTaGFkZXJQcm9ncmFtPiBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZmluZEluc3BlY3Rv
clByb2dyYW0oV2ViR1BVCiAgICAgfQogICAgIHJldHVybiBudWxscHRyOwogfQotI2VuZGlmCisj
ZW5kaWYgLy8gRU5BQkxFKFdFQkdQVSkKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpIHx8IEVOQUJM
RShXRUJHUFUpCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ2FudmFzQWdlbnQuaCBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ2FudmFzQWdlbnQuaAppbmRleCBmZjlh
NTMzZTA0ODE0Mzg1MGI5YTk2OTBjYjE5OWFlNDdjMjNiNTc2Li4wZWYxYWVmYjY0N2VhZDk5Yjdk
MGViMjQzZmQwYjQwOGNlNDViNjBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvYWdlbnRzL0luc3BlY3RvckNhbnZhc0FnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDYW52YXNBZ2VudC5oCkBAIC00MywxNyArNDMsMTkgQEAg
Y2xhc3MgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFz
cyBDYW52YXNSZW5kZXJpbmdDb250ZXh0OworI2lmIEVOQUJMRShXRUJHTCkgfHwgRU5BQkxFKFdF
QkdQVSkKIGNsYXNzIEluc3BlY3RvclNoYWRlclByb2dyYW07CiAjaWYgRU5BQkxFKFdFQkdMKQog
Y2xhc3MgV2ViR0xQcm9ncmFtOwogY2xhc3MgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTsKLSNl
bmRpZgorI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKICNpZiBFTkFCTEUoV0VCR1BVKQogY2xhc3Mg
R1BVQ2FudmFzQ29udGV4dDsKIGNsYXNzIFdlYkdQVURldmljZTsKIGNsYXNzIFdlYkdQVVBpcGVs
aW5lOwogY2xhc3MgV2ViR1BVU3dhcENoYWluOwotI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxFKFdF
QkdQVSkKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpCiAKIHR5cGVk
ZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogCkBAIC03OSwxMCArODEsMTQgQEAgcHVibGljOgogICAg
IHZvaWQgc2V0UmVjb3JkaW5nQXV0b0NhcHR1cmVGcmFtZUNvdW50KEVycm9yU3RyaW5nJiwgaW50
IGNvdW50KSBvdmVycmlkZTsKICAgICB2b2lkIHN0YXJ0UmVjb3JkaW5nKEVycm9yU3RyaW5nJiwg
Y29uc3QgU3RyaW5nJiBjYW52YXNJZCwgY29uc3QgaW50KiBmcmFtZUNvdW50LCBjb25zdCBpbnQq
IG1lbW9yeUxpbWl0KSBvdmVycmlkZTsKICAgICB2b2lkIHN0b3BSZWNvcmRpbmcoRXJyb3JTdHJp
bmcmLCBjb25zdCBTdHJpbmcmIGNhbnZhc0lkKSBvdmVycmlkZTsKKyNpZiBFTkFCTEUoV0VCR0wp
IHx8IEVOQUJMRShXRUJHUFUpCiAgICAgdm9pZCByZXF1ZXN0U2hhZGVyU291cmNlKEVycm9yU3Ry
aW5nJiwgY29uc3QgU3RyaW5nJiBwcm9ncmFtSWQsIGNvbnN0IFN0cmluZyYgc2hhZGVyVHlwZSwg
U3RyaW5nKiBzb3VyY2UpIG92ZXJyaWRlOwogICAgIHZvaWQgdXBkYXRlU2hhZGVyKEVycm9yU3Ry
aW5nJiwgY29uc3QgU3RyaW5nJiBwcm9ncmFtSWQsIGNvbnN0IFN0cmluZyYgc2hhZGVyVHlwZSwg
Y29uc3QgU3RyaW5nJiBzb3VyY2UpIG92ZXJyaWRlOworI2lmIEVOQUJMRShXRUJHTCkKICAgICB2
b2lkIHNldFNoYWRlclByb2dyYW1EaXNhYmxlZChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYg
cHJvZ3JhbUlkLCBib29sIGRpc2FibGVkKSBvdmVycmlkZTsKICAgICB2b2lkIHNldFNoYWRlclBy
b2dyYW1IaWdobGlnaHRlZChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgcHJvZ3JhbUlkLCBi
b29sIGhpZ2hsaWdodGVkKSBvdmVycmlkZTsKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCisjZW5k
aWYgLy8gRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKQogCiAgICAgLy8gQ2FudmFzT2Jz
ZXJ2ZXIKICAgICB2b2lkIGNhbnZhc0NoYW5nZWQoQ2FudmFzQmFzZSYsIGNvbnN0IEZsb2F0UmVj
dCYpIG92ZXJyaWRlOwpAQCAtMTA0LDE0ICsxMTAsMTQgQEAgcHVibGljOgogICAgIHZvaWQgd2ls
bERlc3Ryb3lXZWJHTFByb2dyYW0oV2ViR0xQcm9ncmFtJik7CiAgICAgYm9vbCBpc1dlYkdMUHJv
Z3JhbURpc2FibGVkKFdlYkdMUHJvZ3JhbSYpOwogICAgIGJvb2wgaXNXZWJHTFByb2dyYW1IaWdo
bGlnaHRlZChXZWJHTFByb2dyYW0mKTsKLSNlbmRpZgorI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkK
ICNpZiBFTkFCTEUoV0VCR1BVKQogICAgIHZvaWQgZGlkQ3JlYXRlV2ViR1BVRGV2aWNlKFdlYkdQ
VURldmljZSYpOwogICAgIHZvaWQgd2lsbERlc3Ryb3lXZWJHUFVEZXZpY2UoV2ViR1BVRGV2aWNl
Jik7CiAgICAgdm9pZCB3aWxsQ29uZmlndXJlU3dhcENoYWluKEdQVUNhbnZhc0NvbnRleHQmLCBX
ZWJHUFVTd2FwQ2hhaW4mKTsKICAgICB2b2lkIGRpZENyZWF0ZVdlYkdQVVBpcGVsaW5lKFdlYkdQ
VURldmljZSYsIFdlYkdQVVBpcGVsaW5lJik7CiAgICAgdm9pZCB3aWxsRGVzdHJveVdlYkdQVVBp
cGVsaW5lKFdlYkdQVVBpcGVsaW5lJik7Ci0jZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR1BV
KQogCiBwcml2YXRlOgogICAgIHN0cnVjdCBSZWNvcmRpbmdPcHRpb25zIHsKQEAgLTEyMiwyOCAr
MTI4LDMyIEBAIHByaXZhdGU6CiAgICAgdm9pZCBzdGFydFJlY29yZGluZyhJbnNwZWN0b3JDYW52
YXMmLCBJbnNwZWN0b3I6OlByb3RvY29sOjpSZWNvcmRpbmc6OkluaXRpYXRvciwgUmVjb3JkaW5n
T3B0aW9ucyYmID0geyB9KTsKIAogICAgIHZvaWQgY2FudmFzRGVzdHJveWVkVGltZXJGaXJlZCgp
OworI2lmIEVOQUJMRShXRUJHTCkgfHwgRU5BQkxFKFdFQkdQVSkKICAgICB2b2lkIHByb2dyYW1E
ZXN0cm95ZWRUaW1lckZpcmVkKCk7CisjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUo
V0VCR1BVKQogICAgIHZvaWQgcmVzZXQoKTsKIAogICAgIEluc3BlY3RvckNhbnZhcyYgYmluZENh
bnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0JiwgYm9vbCBjYXB0dXJlQmFja3RyYWNlKTsKICNp
ZiBFTkFCTEUoV0VCR1BVKQogICAgIEluc3BlY3RvckNhbnZhcyYgYmluZENhbnZhcyhXZWJHUFVE
ZXZpY2UmLCBib29sIGNhcHR1cmVCYWNrdHJhY2UpOwotI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxF
KFdFQkdQVSkKICAgICB2b2lkIHVuYmluZENhbnZhcyhJbnNwZWN0b3JDYW52YXMmKTsKICAgICBS
ZWZQdHI8SW5zcGVjdG9yQ2FudmFzPiBhc3NlcnRJbnNwZWN0b3JDYW52YXMoRXJyb3JTdHJpbmcm
LCBjb25zdCBTdHJpbmcmIGNhbnZhc0lkKTsKICAgICBSZWZQdHI8SW5zcGVjdG9yQ2FudmFzPiBm
aW5kSW5zcGVjdG9yQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQmKTsKICNpZiBFTkFCTEUo
V0VCR1BVKQogICAgIFJlZlB0cjxJbnNwZWN0b3JDYW52YXM+IGZpbmRJbnNwZWN0b3JDYW52YXMo
V2ViR1BVRGV2aWNlJik7Ci0jZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR1BVKQogCisjaWYg
RU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKQogICAgIHZvaWQgdW5iaW5kUHJvZ3JhbShJ
bnNwZWN0b3JTaGFkZXJQcm9ncmFtJik7CiAgICAgUmVmUHRyPEluc3BlY3RvclNoYWRlclByb2dy
YW0+IGFzc2VydEluc3BlY3RvclByb2dyYW0oRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHBy
b2dyYW1JZCk7CiAjaWYgRU5BQkxFKFdFQkdMKQogICAgIFJlZlB0cjxJbnNwZWN0b3JTaGFkZXJQ
cm9ncmFtPiBmaW5kSW5zcGVjdG9yUHJvZ3JhbShXZWJHTFByb2dyYW0mKTsKLSNlbmRpZgorI2Vu
ZGlmIC8vIEVOQUJMRShXRUJHTCkKICNpZiBFTkFCTEUoV0VCR1BVKQogICAgIFJlZlB0cjxJbnNw
ZWN0b3JTaGFkZXJQcm9ncmFtPiBmaW5kSW5zcGVjdG9yUHJvZ3JhbShXZWJHUFVQaXBlbGluZSYp
OwotI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdQVSkKKyNlbmRpZiAvLyBFTkFCTEUoV0VC
R0wpIHx8IEVOQUJMRShXRUJHUFUpCiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yOjpD
YW52YXNGcm9udGVuZERpc3BhdGNoZXI+IG1fZnJvbnRlbmREaXNwYXRjaGVyOwogICAgIFJlZlB0
cjxJbnNwZWN0b3I6OkNhbnZhc0JhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVy
OwpAQCAtMTU1LDkgKzE2NSwxMSBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxTdHJpbmc+IG1fcmVt
b3ZlZENhbnZhc0lkZW50aWZpZXJzOwogICAgIFRpbWVyIG1fY2FudmFzRGVzdHJveWVkVGltZXI7
CiAKKyNpZiBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpCiAgICAgSGFzaE1hcDxTdHJp
bmcsIFJlZlB0cjxJbnNwZWN0b3JTaGFkZXJQcm9ncmFtPj4gbV9pZGVudGlmaWVyVG9JbnNwZWN0
b3JQcm9ncmFtOwogICAgIFZlY3RvcjxTdHJpbmc+IG1fcmVtb3ZlZFByb2dyYW1JZGVudGlmaWVy
czsKICAgICBUaW1lciBtX3Byb2dyYW1EZXN0cm95ZWRUaW1lcjsKKyNlbmRpZiAvLyBFTkFCTEUo
V0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpCiAKICAgICBIYXNoU2V0PFN0cmluZz4gbV9yZWNvcmRp
bmdDYW52YXNJZGVudGlmaWVyczsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcAppbmRleCBhMmY4ZGZhMTYyNGRkZmY0MmUz
NTljODYyZTA3NDhlNzJlY2JjOTZjLi5jMzVhMDU4Yjk0YTlhOGVhZmI0MWUzY2I4MjM1MTA1YTMx
YWRkOGVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3RvckRPTUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3RvckRPTUFnZW50LmNwcApAQCAtMTIwNywxMCArMTIwNywxNyBAQCBzdGQ6OnVuaXF1ZV9w
dHI8SGlnaGxpZ2h0Q29uZmlnPiBJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0Q29uZmlnRnJv
bUluc3BlY3RvcgogICAgIHJldHVybiBoaWdobGlnaHRDb25maWc7CiB9CiAKKyNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQordm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0SW5zcGVjdE1vZGVFbmFi
bGVkKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgYm9vbCBlbmFibGVkLCBjb25zdCBKU09OOjpP
YmplY3QqIGhpZ2hsaWdodENvbmZpZykKK3sKKyAgICBzZXRTZWFyY2hpbmdGb3JOb2RlKGVycm9y
U3RyaW5nLCBlbmFibGVkLCBoaWdobGlnaHRDb25maWcgPyBoaWdobGlnaHRDb25maWcgOiBudWxs
cHRyLCBmYWxzZSk7Cit9CisjZWxzZQogdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0SW5zcGVj
dE1vZGVFbmFibGVkKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgYm9vbCBlbmFibGVkLCBjb25z
dCBKU09OOjpPYmplY3QqIGhpZ2hsaWdodENvbmZpZywgY29uc3QgYm9vbCogc2hvd1J1bGVycykK
IHsKICAgICBzZXRTZWFyY2hpbmdGb3JOb2RlKGVycm9yU3RyaW5nLCBlbmFibGVkLCBoaWdobGln
aHRDb25maWcgPyBoaWdobGlnaHRDb25maWcgOiBudWxscHRyLCBzaG93UnVsZXJzICYmICpzaG93
UnVsZXJzKTsKIH0KKyNlbmRpZgogCiB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHRS
ZWN0KEVycm9yU3RyaW5nJiwgaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGNv
bnN0IEpTT046Ok9iamVjdCogY29sb3IsIGNvbnN0IEpTT046Ok9iamVjdCogb3V0bGluZUNvbG9y
LCBjb25zdCBib29sKiB1c2VQYWdlQ29vcmRpbmF0ZXMpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmgKaW5kZXggN2RmMGU4M2Vi
NTNkNzVjNDFjNTU0ZjE0MDEyMzViYTIxNzE5NDE0Yy4uZThhNzRmNmQwMDczNjJlYWI3MzkyMzQz
YTk1MTFjMjQyOTYwNDhkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JET01BZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9h
Z2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuaApAQCAtMTMxLDcgKzEzMSwxMSBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBkaXNjYXJkU2VhcmNoUmVzdWx0cyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYg
c2VhcmNoSWQpIG92ZXJyaWRlOwogICAgIHZvaWQgcmVzb2x2ZU5vZGUoRXJyb3JTdHJpbmcmLCBp
bnQgbm9kZUlkLCBjb25zdCBTdHJpbmcqIG9iamVjdEdyb3VwLCBSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0KSBvdmVycmlkZTsKICAgICB2
b2lkIGdldEF0dHJpYnV0ZXMoRXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBSZWZQdHI8SlNPTjo6
QXJyYXlPZjxTdHJpbmc+PiYgcmVzdWx0KSBvdmVycmlkZTsKKyNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQorICAgIHZvaWQgc2V0SW5zcGVjdE1vZGVFbmFibGVkKEVycm9yU3RyaW5nJiwgYm9vbCBl
bmFibGVkLCBjb25zdCBKU09OOjpPYmplY3QqIGhpZ2hsaWdodENvbmZpZykgb3ZlcnJpZGU7Cisj
ZWxzZQogICAgIHZvaWQgc2V0SW5zcGVjdE1vZGVFbmFibGVkKEVycm9yU3RyaW5nJiwgYm9vbCBl
bmFibGVkLCBjb25zdCBKU09OOjpPYmplY3QqIGhpZ2hsaWdodENvbmZpZywgY29uc3QgYm9vbCog
c2hvd1J1bGVycykgb3ZlcnJpZGU7CisjZW5kaWYKICAgICB2b2lkIHJlcXVlc3ROb2RlKEVycm9y
U3RyaW5nJiwgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgaW50KiBub2RlSWQpIG92ZXJyaWRlOwog
ICAgIHZvaWQgcHVzaE5vZGVCeVBhdGhUb0Zyb250ZW5kKEVycm9yU3RyaW5nJiwgY29uc3QgU3Ry
aW5nJiBwYXRoLCBpbnQqIG5vZGVJZCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBoaWRlSGlnaGxpZ2h0
KEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvYWdlbnRzL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvYWdlbnRzL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKaW5kZXggMDJlZGQ0Mzg1OTYwOWNj
MGZjZDc5YmFiYWJkNmYzMzk1NTA3MGRhOS4uNDM1MjI4OTRlMGY5MzAwZjAxOGY3MjVhNDJiYmM0
YzU5Yzc0Nzg0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JQYWdlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvSW5zcGVjdG9yUGFnZUFnZW50LmNwcApAQCAtMzU2LDcgKzM1Niw3IEBAIHZvaWQgSW5zcGVj
dG9yUGFnZUFnZW50OjplbmFibGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQogICAgIHN0b3B3
YXRjaC5yZXNldCgpOwogICAgIHN0b3B3YXRjaC5zdGFydCgpOwogCi0jaWYgSEFWRShPU19EQVJL
X01PREVfU1VQUE9SVCkKKyNpZiBFTkFCTEUoREFSS19NT0RFX0NTUykgfHwgSEFWRShPU19EQVJL
X01PREVfU1VQUE9SVCkKICAgICBkZWZhdWx0QXBwZWFyYW5jZURpZENoYW5nZShtX2luc3BlY3Rl
ZFBhZ2UuZGVmYXVsdFVzZURhcmtBcHBlYXJhbmNlKCkpOwogI2VuZGlmCiB9CkBAIC0zNjcsMTAg
KzM2NywxNCBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYp
CiAKICAgICBFcnJvclN0cmluZyB1bnVzZWQ7CiAgICAgc2V0U2hvd1BhaW50UmVjdHModW51c2Vk
LCBmYWxzZSk7CisjaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgc2V0U2hvd1J1bGVycyh1
bnVzZWQsIGZhbHNlKTsKKyNlbmRpZgogICAgIG92ZXJyaWRlVXNlckFnZW50KHVudXNlZCwgbnVs
bHB0cik7CiAgICAgc2V0RW11bGF0ZWRNZWRpYSh1bnVzZWQsIGVtcHR5U3RyaW5nKCkpOworI2lm
IEVOQUJMRShEQVJLX01PREVfQ1NTKSB8fCBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQogICAg
IHNldEZvcmNlZEFwcGVhcmFuY2UodW51c2VkLCBlbXB0eVN0cmluZygpKTsKKyNlbmRpZgogCiAg
ICAgYXV0byYgaW5zcGVjdGVkUGFnZVNldHRpbmdzID0gbV9pbnNwZWN0ZWRQYWdlLnNldHRpbmdz
KCk7CiAgICAgaW5zcGVjdGVkUGFnZVNldHRpbmdzLnNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFi
bGVkSW5zcGVjdG9yT3ZlcnJpZGUoV1RGOjpudWxsb3B0KTsKQEAgLTc3MCwxMCArNzc0LDEyIEBA
IHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzZWFyY2hJblJlc291cmNlcyhFcnJvclN0cmluZyYs
IGNvbnN0IFN0cmluZyYgdGV4dCwgY29uCiAgICAgICAgIG5ldHdvcmtBZ2VudC0+c2VhcmNoT3Ro
ZXJSZXF1ZXN0cyhyZWdleCwgcmVzdWx0KTsKIH0KIAorI2lmICFQTEFURk9STShJT1NfRkFNSUxZ
KQogdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNldFNob3dSdWxlcnMoRXJyb3JTdHJpbmcmLCBi
b29sIHNob3dSdWxlcnMpCiB7CiAgICAgbV9vdmVybGF5LT5zZXRTaG93UnVsZXJzKHNob3dSdWxl
cnMpOwogfQorI2VuZGlmCiAKIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzZXRTaG93UGFpbnRS
ZWN0cyhFcnJvclN0cmluZyYsIGJvb2wgc2hvdykKIHsKQEAgLTg2OSwxMCArODc1LDEyIEBAIHZv
aWQgSW5zcGVjdG9yUGFnZUFnZW50OjpmcmFtZUNsZWFyZWRTY2hlZHVsZWROYXZpZ2F0aW9uKEZy
YW1lJiBmcmFtZSkKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+ZnJhbWVDbGVhcmVkU2NoZWR1
bGVkTmF2aWdhdGlvbihmcmFtZUlkKCZmcmFtZSkpOwogfQogCisjaWYgRU5BQkxFKERBUktfTU9E
RV9DU1MpIHx8IEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCiB2b2lkIEluc3BlY3RvclBhZ2VB
Z2VudDo6ZGVmYXVsdEFwcGVhcmFuY2VEaWRDaGFuZ2UoYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSkK
IHsKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+ZGVmYXVsdEFwcGVhcmFuY2VEaWRDaGFuZ2Uo
dXNlRGFya0FwcGVhcmFuY2UgPyBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpBcHBlYXJhbmNl
OjpEYXJrIDogSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6QXBwZWFyYW5jZTo6TGlnaHQpOwog
fQorI2VuZGlmCiAKIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpkaWRDbGVhcldpbmRvd09iamVj
dEluV29ybGQoRnJhbWUmIGZyYW1lLCBET01XcmFwcGVyV29ybGQmIHdvcmxkKQogewpAQCAtMTAw
OCwxMyArMTAxNiw5IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzZXRFbXVsYXRlZE1lZGlh
KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBtZWRpYSkKICAgICBkb2N1bWVudC0+ZXZhbHVh
dGVNZWRpYVF1ZXJpZXNBbmRSZXBvcnRDaGFuZ2VzKCk7CiB9CiAKKyNpZiBFTkFCTEUoREFSS19N
T0RFX0NTUykgfHwgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKIHZvaWQgSW5zcGVjdG9yUGFn
ZUFnZW50OjpzZXRGb3JjZWRBcHBlYXJhbmNlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBh
cHBlYXJhbmNlKQogewotICAgIGlmIChhcHBlYXJhbmNlID09IG1fZm9yY2VkQXBwZWFyYW5jZSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9mb3JjZWRBcHBlYXJhbmNlID0gYXBwZWFyYW5jZTsK
LQogICAgIGlmIChhcHBlYXJhbmNlID09ICJMaWdodCJfcykKICAgICAgICAgbV9pbnNwZWN0ZWRQ
YWdlLnNldFVzZURhcmtBcHBlYXJhbmNlT3ZlcnJpZGUoZmFsc2UpOwogICAgIGVsc2UgaWYgKGFw
cGVhcmFuY2UgPT0gIkRhcmsiX3MpCkBAIC0xMDIyLDYgKzEwMjYsNyBAQCB2b2lkIEluc3BlY3Rv
clBhZ2VBZ2VudDo6c2V0Rm9yY2VkQXBwZWFyYW5jZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmlu
ZyYgYXBwZWFyYQogICAgIGVsc2UKICAgICAgICAgbV9pbnNwZWN0ZWRQYWdlLnNldFVzZURhcmtB
cHBlYXJhbmNlT3ZlcnJpZGUoV1RGOjpudWxsb3B0KTsKIH0KKyNlbmRpZgogCiB2b2lkIEluc3Bl
Y3RvclBhZ2VBZ2VudDo6YXBwbHlVc2VyQWdlbnRPdmVycmlkZShTdHJpbmcmIHVzZXJBZ2VudCkK
IHsKQEAgLTEwNjksOSArMTA3NCw5IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzbmFwc2hv
dFJlY3QoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgeCwgaW50IHksIGluCiAgICAgKm91
dERhdGFVUkwgPSBzbmFwc2hvdC0+dG9EYXRhVVJMKCJpbWFnZS9wbmciX3MsIFdURjo6bnVsbG9w
dCwgUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpOwogfQogCisjaWYgRU5BQkxFKFdFQl9BUkNISVZF
KSAmJiBVU0UoQ0YpCiB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6YXJjaGl2ZShFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIFN0cmluZyogZGF0YSkKIHsKLSNpZiBFTkFCTEUoV0VCX0FSQ0hJVkUp
ICYmIFVTRShDRikKICAgICBhdXRvIGFyY2hpdmUgPSBMZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGUo
bV9pbnNwZWN0ZWRQYWdlLm1haW5GcmFtZSgpKTsKICAgICBpZiAoIWFyY2hpdmUpIHsKICAgICAg
ICAgZXJyb3JTdHJpbmcgPSAiQ291bGQgbm90IGNyZWF0ZSB3ZWIgYXJjaGl2ZSBmb3IgbWFpbiBm
cmFtZSJfczsKQEAgLTEwODAsMTAgKzEwODUsNyBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6
YXJjaGl2ZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFN0cmluZyogZGF0YSkKIAogICAgIFJl
dGFpblB0cjxDRkRhdGFSZWY+IGJ1ZmZlciA9IGFyY2hpdmUtPnJhd0RhdGFSZXByZXNlbnRhdGlv
bigpOwogICAgICpkYXRhID0gYmFzZTY0RW5jb2RlKENGRGF0YUdldEJ5dGVQdHIoYnVmZmVyLmdl
dCgpKSwgQ0ZEYXRhR2V0TGVuZ3RoKGJ1ZmZlci5nZXQoKSkpOwotI2Vsc2UKLSAgICBVTlVTRURf
UEFSQU0oZGF0YSk7Ci0gICAgZXJyb3JTdHJpbmcgPSAiTm90IHN1cHBvcnRlZCJfczsKLSNlbmRp
ZgogfQorI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUGFnZUFnZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclBhZ2VBZ2VudC5oCmluZGV4IDZjNzU4
Mjk1MDIzMzZiMDgwNmRiMjUzMWU3ODE4NmQyYzU1OWU0NGMuLjNiY2QwNDg3Y2ZjODc2NmJhYTAx
Yzc4MDQxNzNhMTU3NDdiNDdiMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9hZ2VudHMvSW5zcGVjdG9yUGFnZUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JQYWdlQWdlbnQuaApAQCAtMTA4LDEzICsxMDgsMTkgQEAgcHVi
bGljOgogICAgIHZvaWQgc2V0Qm9vdHN0cmFwU2NyaXB0KEVycm9yU3RyaW5nJiwgY29uc3QgU3Ry
aW5nKiBvcHRpb25hbFNvdXJjZSkgZmluYWw7CiAgICAgdm9pZCBzZWFyY2hJblJlc291cmNlKEVy
cm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIHVybCwgY29u
c3QgU3RyaW5nJiBxdWVyeSwgY29uc3QgYm9vbCogb3B0aW9uYWxDYXNlU2Vuc2l0aXZlLCBjb25z
dCBib29sKiBvcHRpb25hbElzUmVnZXgsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxSZXF1ZXN0SWQs
IFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkdlbmVyaWNUeXBlczo6
U2VhcmNoTWF0Y2g+PiYpIG92ZXJyaWRlOwogICAgIHZvaWQgc2VhcmNoSW5SZXNvdXJjZXMoRXJy
b3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBib29sKiBjYXNlU2Vuc2l0aXZlLCBjb25z
dCBib29sKiBpc1JlZ2V4LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29s
OjpQYWdlOjpTZWFyY2hSZXN1bHQ+PiYpIG92ZXJyaWRlOworI2lmICFQTEFURk9STShJT1NfRkFN
SUxZKQogICAgIHZvaWQgc2V0U2hvd1J1bGVycyhFcnJvclN0cmluZyYsIGJvb2wpIG92ZXJyaWRl
OworI2VuZGlmCiAgICAgdm9pZCBzZXRTaG93UGFpbnRSZWN0cyhFcnJvclN0cmluZyYsIGJvb2wg
c2hvdykgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRFbXVsYXRlZE1lZGlhKEVycm9yU3RyaW5nJiwg
Y29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7CisjaWYgRU5BQkxFKERBUktfTU9ERV9DU1MpIHx8IEhB
VkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCiAgICAgdm9pZCBzZXRGb3JjZWRBcHBlYXJhbmNlKEVy
cm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7CisjZW5kaWYKICAgICB2b2lkIHNu
YXBzaG90Tm9kZShFcnJvclN0cmluZyYsIGludCBub2RlSWQsIFN0cmluZyogb3V0RGF0YVVSTCkg
b3ZlcnJpZGU7CiAgICAgdm9pZCBzbmFwc2hvdFJlY3QoRXJyb3JTdHJpbmcmLCBpbnQgeCwgaW50
IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwgY29uc3QgU3RyaW5nJiBjb29yZGluYXRlU3lzdGVt
LCBTdHJpbmcqIG91dERhdGFVUkwpIG92ZXJyaWRlOworI2lmIEVOQUJMRShXRUJfQVJDSElWRSkg
JiYgVVNFKENGKQogICAgIHZvaWQgYXJjaGl2ZShFcnJvclN0cmluZyYsIFN0cmluZyogZGF0YSkg
b3ZlcnJpZGU7CisjZW5kaWYKIAogICAgIC8vIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbgogICAg
IHZvaWQgZG9tQ29udGVudEV2ZW50RmlyZWQoKTsKQEAgLTEyNiw3ICsxMzIsOSBAQCBwdWJsaWM6
CiAgICAgdm9pZCBmcmFtZVN0b3BwZWRMb2FkaW5nKEZyYW1lJik7CiAgICAgdm9pZCBmcmFtZVNj
aGVkdWxlZE5hdmlnYXRpb24oRnJhbWUmLCBTZWNvbmRzIGRlbGF5KTsKICAgICB2b2lkIGZyYW1l
Q2xlYXJlZFNjaGVkdWxlZE5hdmlnYXRpb24oRnJhbWUmKTsKKyNpZiBFTkFCTEUoREFSS19NT0RF
X0NTUykgfHwgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKICAgICB2b2lkIGRlZmF1bHRBcHBl
YXJhbmNlRGlkQ2hhbmdlKGJvb2wgdXNlRGFya0FwcGVhcmFuY2UpOworI2VuZGlmCiAgICAgdm9p
ZCBhcHBseVVzZXJBZ2VudE92ZXJyaWRlKFN0cmluZyYpOwogICAgIHZvaWQgYXBwbHlFbXVsYXRl
ZE1lZGlhKFN0cmluZyYpOwogICAgIHZvaWQgZGlkQ2xlYXJXaW5kb3dPYmplY3RJbldvcmxkKEZy
YW1lJiwgRE9NV3JhcHBlcldvcmxkJik7CkBAIC0xNjEsNyArMTY5LDYgQEAgcHJpdmF0ZToKICAg
ICBIYXNoTWFwPERvY3VtZW50TG9hZGVyKiwgU3RyaW5nPiBtX2xvYWRlclRvSWRlbnRpZmllcjsK
ICAgICBTdHJpbmcgbV91c2VyQWdlbnRPdmVycmlkZTsKICAgICBTdHJpbmcgbV9lbXVsYXRlZE1l
ZGlhOwotICAgIFN0cmluZyBtX2ZvcmNlZEFwcGVhcmFuY2U7CiAgICAgU3RyaW5nIG1fYm9vdHN0
cmFwU2NyaXB0OwogICAgIGJvb2wgbV9pc0ZpcnN0TGF5b3V0QWZ0ZXJPbkxvYWQgeyBmYWxzZSB9
OwogICAgIGJvb2wgbV9zaG93UGFpbnRSZWN0cyB7IGZhbHNlIH07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
Q01ha2VMaXN0cy50eHQKaW5kZXggNzM1YTRkNWE5MjQ2MTJmMThhMjc1NzY4MDYyYzIzZDE5M2E0
ODc1Yy4uMThmNGNhZGZhYzk0YTQ5ZmQ2ZDZiZDRmN2E3MDM4YjBlMzliMDYwOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkluc3BlY3RvclVJL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9DTWFrZUxpc3RzLnR4dApAQCAtNDksNiArNDksNyBAQCBXRUJLSVRfSU5DTFVE
RV9DT05GSUdfRklMRVNfSUZfRVhJU1RTKCkKIGFkZF9jdXN0b21fY29tbWFuZCgKICAgICBPVVRQ
VVQgJHtXZWJJbnNwZWN0b3JVSV9ERVJJVkVEX1NPVVJDRVNfRElSfS9Vc2VySW50ZXJmYWNlL1By
b3RvY29sL0luc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwogICAgIERFUEVORFMgSmF2YVNjcmlw
dENvcmUKKyAgICAgICAgICAgIEluc3BlY3RvckJhY2tlbmRDb21tYW5kcwogICAgICAgICAgICAg
JHtKYXZhU2NyaXB0Q29yZV9ERVJJVkVEX1NPVVJDRVNfRElSfS9pbnNwZWN0b3IvSW5zcGVjdG9y
QmFja2VuZENvbW1hbmRzLmpzCiAgICAgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1FIGNvcHkg
JHtKYXZhU2NyaXB0Q29yZV9ERVJJVkVEX1NPVVJDRVNfRElSfS9pbnNwZWN0b3IvSW5zcGVjdG9y
QmFja2VuZENvbW1hbmRzLmpzICR7V2ViSW5zcGVjdG9yVUlfREVSSVZFRF9TT1VSQ0VTX0RJUn0v
VXNlckludGVyZmFjZS9Qcm90b2NvbC9JbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKICAgICBW
RVJCQVRJTQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
QmFzZS9NYWluLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQmFzZS9N
YWluLmpzCmluZGV4IGU1YjQzMmMyY2I4OWMwOGJiOWIwMzc2YTA0OTZiY2M1MzY2OGNkYjcuLjM1
NDM5MThjMTcyNGY1YjBhZmE0YjQxNzZmNzZkN2NiYWE5MjBhNDAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Jhc2UvTWFpbi5qcworKysgYi9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9CYXNlL01haW4uanMKQEAgLTIzOTMsNyArMjM5
Myw3IEBAIFdJLl91cGRhdGVEb3dubG9hZFRhYkJhckJ1dHRvbiA9IGZ1bmN0aW9uKCkKICAgICBp
ZiAoIVdJLl9yZWxvYWRUYWJCYXJCdXR0b24pCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICgh
SW5zcGVjdG9yQmFja2VuZC5oYXNEb21haW4oIlBhZ2UiKSkgeworICAgIGlmICghSW5zcGVjdG9y
QmFja2VuZC5oYXNDb21tYW5kKCJQYWdlLmFyY2hpdmUiKSkgewogICAgICAgICBXSS5fZG93bmxv
YWRUYWJCYXJCdXR0b24uaGlkZGVuID0gdHJ1ZTsKICAgICAgICAgV0kuX3VwZGF0ZVRhYkJhckRp
dmlkZXJzKCk7CiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ29u
ZmlndXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25maWcgYi9Tb3VyY2UvV2ViS2l0L0NvbmZp
Z3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnCmluZGV4IGI0Zjc4NzlhZTRjZDU5NTFi
N2VjNzMxMDMxZTFiMDk1OWE5NGU2MzkuLjY3OWQzMmExZmI0ZTY4MDNlYTAxZGNhZTlkMmVkNjU3
ZWJhOGNiZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ29uZmlndXJhdGlvbnMvRmVhdHVy
ZURlZmluZXMueGNjb25maWcKKysrIGIvU291cmNlL1dlYktpdC9Db25maWd1cmF0aW9ucy9GZWF0
dXJlRGVmaW5lcy54Y2NvbmZpZwpAQCAtMzgzLDYgKzM4Myw4IEBAIEVOQUJMRV9WSURFT19UUkFD
SyA9IEVOQUJMRV9WSURFT19UUkFDSzsKIEVOQUJMRV9WSURFT19VU0VTX0VMRU1FTlRfRlVMTFND
UkVFTiA9ICQoRU5BQkxFX1ZJREVPX1VTRVNfRUxFTUVOVF9GVUxMU0NSRUVOXyQoV0tfUExBVEZP
Uk1fTkFNRSkpOwogRU5BQkxFX1ZJREVPX1VTRVNfRUxFTUVOVF9GVUxMU0NSRUVOX21hY29zeCA9
IEVOQUJMRV9WSURFT19VU0VTX0VMRU1FTlRfRlVMTFNDUkVFTjsKIAorRU5BQkxFX1dFQl9BUkNI
SVZFID0gRU5BQkxFX1dFQl9BUkNISVZFOworCiBFTkFCTEVfV0VCRFJJVkVSX01PVVNFX0lOVEVS
QUNUSU9OUyA9ICQoRU5BQkxFX1dFQkRSSVZFUl9NT1VTRV9JTlRFUkFDVElPTlNfJChXS19QTEFU
Rk9STV9OQU1FKSk7CiBFTkFCTEVfV0VCRFJJVkVSX01PVVNFX0lOVEVSQUNUSU9OU19tYWNvc3gg
PSBFTkFCTEVfV0VCRFJJVkVSX01PVVNFX0lOVEVSQUNUSU9OUzsKIApAQCAtNDI1LDQgKzQyNyw0
IEBAIEVOQUJMRV9XSVJFTEVTU19QTEFZQkFDS19UQVJHRVQgPSBFTkFCTEVfV0lSRUxFU1NfUExB
WUJBQ0tfVEFSR0VUOwogCiBFTkFCTEVfWFNMVCA9IEVOQUJMRV9YU0xUOwogCi1GRUFUVVJFX0RF
RklORVMgPSAkKEVOQUJMRV8zRF9UUkFOU0ZPUk1TKSAkKEVOQUJMRV9BQ0NFTEVSQVRFRF8yRF9D
QU5WQVMpICQoRU5BQkxFX0FDQ0VTU0lCSUxJVFlfSVNPTEFURURfVFJFRSkgJChFTkFCTEVfQVBQ
TEVfUEFZKSAkKEVOQUJMRV9BUFBMRV9QQVlfU0VTU0lPTl9WMykgJChFTkFCTEVfQVBQTEVfUEFZ
X1NFU1NJT05fVjQpICQoRU5BQkxFX0FQUExFX1BBWV9TRVNTSU9OX1Y5KSAkKEVOQUJMRV9BUFBM
SUNBVElPTl9NQU5JRkVTVCkgJChFTkFCTEVfQVRUQUNITUVOVF9FTEVNRU5UKSAkKEVOQUJMRV9B
VkZfQ0FQVElPTlMpICQoRU5BQkxFX0NBQ0hFX1BBUlRJVElPTklORykgJChFTkFCTEVfQ0hBTk5F
TF9NRVNTQUdJTkcpICQoRU5BQkxFX0NPTlRFTlRfRklMVEVSSU5HKSAkKEVOQUJMRV9DU1MzX1RF
WFQpICQoRU5BQkxFX0NTU19CT1hfREVDT1JBVElPTl9CUkVBSykgJChFTkFCTEVfQ1NTX0NPTVBP
U0lUSU5HKSAkKEVOQUJMRV9DU1NfQ09OSUNfR1JBRElFTlRTKSAkKEVOQUJMRV9DU1NfSU1BR0Vf
UkVTT0xVVElPTikgJChFTkFCTEVfQ1NTX1BBSU5USU5HX0FQSSkgJChFTkFCTEVfQ1NTX1NDUk9M
TF9TTkFQKSAkKEVOQUJMRV9DU1NfU0VMRUNUT1JTX0xFVkVMNCkgJChFTkFCTEVfQ1NTX1RSQUlM
SU5HX1dPUkQpICQoRU5BQkxFX0NTU19UWVBFRF9PTSkgJChFTkFCTEVfQ1VSU09SX1ZJU0lCSUxJ
VFkpICQoRU5BQkxFX0NfTE9PUCkgJChFTkFCTEVfREFSS19NT0RFX0NTUykgJChFTkFCTEVfREFU
QUNVRV9WQUxVRSkgJChFTkFCTEVfREFUQUxJU1RfRUxFTUVOVCkgJChFTkFCTEVfREFUQV9JTlRF
UkFDVElPTikgJChFTkFCTEVfREVWSUNFX09SSUVOVEFUSU9OKSAkKEVOQUJMRV9EUkFHX1NVUFBP
UlQpICQoRU5BQkxFX0VESVRBQkxFX1JFR0lPTikgJChFTkFCTEVfRU5DUllQVEVEX01FRElBKSAk
KEVOQUJMRV9FWFBFUklNRU5UQUxfRkVBVFVSRVMpICQoRU5BQkxFX0ZJTFRFUlNfTEVWRUxfMikg
JChFTkFCTEVfRlVMTFNDUkVFTl9BUEkpICQoRU5BQkxFX1BJQ1RVUkVfSU5fUElDVFVSRV9BUEkp
ICQoRU5BQkxFX0dBTUVQQUQpICQoRU5BQkxFX0dFT0xPQ0FUSU9OKSAkKEVOQUJMRV9HUFVfUFJP
Q0VTUykgJChFTkFCTEVfSU5ERVhFRF9EQVRBQkFTRSkgJChFTkFCTEVfSU5ERVhFRF9EQVRBQkFT
RV9JTl9XT1JLRVJTKSAkKEVOQUJMRV9JTlBVVF9UWVBFX0NPTE9SKSAkKEVOQUJMRV9JTlBVVF9U
WVBFX0RBVEUpICQoRU5BQkxFX0lOUFVUX1RZUEVfREFURVRJTUVMT0NBTCkgJChFTkFCTEVfSU5Q
VVRfVFlQRV9EQVRFVElNRV9JTkNPTVBMRVRFKSAkKEVOQUJMRV9JTlBVVF9UWVBFX01PTlRIKSAk
KEVOQUJMRV9JTlBVVF9UWVBFX1RJTUUpICQoRU5BQkxFX0lOUFVUX1RZUEVfV0VFSykgJChFTkFC
TEVfSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykgJChFTkFCTEVfSU5TUEVDVE9SX1RF
TEVNRVRSWSkgJChFTkFCTEVfSU5URVJTRUNUSU9OX09CU0VSVkVSKSAkKEVOQUJMRV9JT1NfR0VT
VFVSRV9FVkVOVFMpICQoRU5BQkxFX0lPU19UT1VDSF9FVkVOVFMpICQoRU5BQkxFX0xBWU9VVF9G
T1JNQVRUSU5HX0NPTlRFWFQpICQoRU5BQkxFX0xFR0FDWV9DU1NfVkVORE9SX1BSRUZJWEVTKSAk
KEVOQUJMRV9MRUdBQ1lfQ1VTVE9NX1BST1RPQ09MX01BTkFHRVIpICQoRU5BQkxFX0xFR0FDWV9F
TkNSWVBURURfTUVESUEpICQoRU5BQkxFX0xFVFRFUlBSRVNTKSAkKEVOQUJMRV9NQUNfR0VTVFVS
RV9FVkVOVFMpICQoRU5BQkxFX01BVEhNTCkgJChFTkFCTEVfTUVESUFfQ0FQVFVSRSkgJChFTkFC
TEVfTUVESUFfQ09OVFJPTFNfU0NSSVBUKSAkKEVOQUJMRV9NRURJQV9TRVNTSU9OKSAkKEVOQUJM
RV9NRURJQV9TT1VSQ0UpICQoRU5BQkxFX01FRElBX1NUQVRJU1RJQ1MpICQoRU5BQkxFX01FRElB
X1NUUkVBTSkgJChFTkFCTEVfTUVNT1JZX1NBTVBMRVIpICQoRU5BQkxFX01FVEVSX0VMRU1FTlQp
ICQoRU5BQkxFX01IVE1MKSAkKEVOQUJMRV9NT1VTRV9DVVJTT1JfU0NBTEUpICQoRU5BQkxFX05B
VklHQVRPUl9TVEFOREFMT05FKSAkKEVOQUJMRV9ORVRXT1JLX0NBQ0hFX1NQRUNVTEFUSVZFX1JF
VkFMSURBVElPTikgJChFTkFCTEVfTkVUV09SS19DQUNIRV9TVEFMRV9XSElMRV9SRVZBTElEQVRF
KSAkKEVOQUJMRV9OT1RJRklDQVRJT05TKSAkKEVOQUJMRV9PRkZTQ1JFRU5fQ0FOVkFTKSAkKEVO
QUJMRV9PVkVSRkxPV19TQ1JPTExJTkdfVE9VQ0gpICQoRU5BQkxFX1BBWU1FTlRfUkVRVUVTVCkg
JChFTkFCTEVfUERGS0lUX1BMVUdJTikgJChFTkFCTEVfUE9JTlRFUl9MT0NLKSAkKEVOQUJMRV9Q
VUJMSUNfU1VGRklYX0xJU1QpICQoRU5BQkxFX1FVT1RBKSAkKEVOQUJMRV9SRU1PVEVfSU5TUEVD
VE9SKSAkKEVOQUJMRV9SRVNJWkVfT0JTRVJWRVIpICQoRU5BQkxFX1JFU09MVVRJT05fTUVESUFf
UVVFUlkpICQoRU5BQkxFX1JFU09VUkNFX0xPQURfU1RBVElTVElDUykgJChFTkFCTEVfUkVTT1VS
Q0VfVVNBR0UpICQoRU5BQkxFX1JVQkJFUl9CQU5ESU5HKSAkKEVOQUJMRV9TQU5EQk9YX0VYVEVO
U0lPTlMpICQoRU5BQkxFX1NFUlZFUl9QUkVDT05ORUNUKSAkKEVOQUJMRV9TRVJWSUNFX0NPTlRS
T0xTKSAkKEVOQUJMRV9TRVJWSUNFX1dPUktFUikgJChFTkFCTEVfU0hBUkVBQkxFX1JFU09VUkNF
KSAkKEVOQUJMRV9TUEVFQ0hfU1lOVEhFU0lTKSAkKEVOQUJMRV9TVFJFQU1TX0FQSSkgJChFTkFC
TEVfU1ZHX0ZPTlRTKSAkKEVOQUJMRV9URUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikgJChFTkFC
TEVfVEVYVF9BVVRPU0laSU5HKSAkKEVOQUJMRV9UT1VDSF9FVkVOVFMpICQoRU5BQkxFX1VTRVJT
RUxFQ1RfQUxMKSAkKEVOQUJMRV9VU0VSX01FU1NBR0VfSEFORExFUlMpICQoRU5BQkxFX1ZBUklB
VElPTl9GT05UUykgJChFTkFCTEVfVklERU8pICQoRU5BQkxFX1ZJREVPX1BSRVNFTlRBVElPTl9N
T0RFKSAkKEVOQUJMRV9WSURFT19UUkFDSykgJChFTkFCTEVfVklERU9fVVNFU19FTEVNRU5UX0ZV
TExTQ1JFRU4pICQoRU5BQkxFX1dFQkRSSVZFUl9NT1VTRV9JTlRFUkFDVElPTlMpICQoRU5BQkxF
X1dFQkRSSVZFUl9LRVlCT0FSRF9JTlRFUkFDVElPTlMpICQoRU5BQkxFX1dFQkRSSVZFUl9UT1VD
SF9JTlRFUkFDVElPTlMpICQoRU5BQkxFX1dFQkdMKSAkKEVOQUJMRV9XRUJHTDIpICQoRU5BQkxF
X1dFQkdQVSkgJChFTkFCTEVfV0VCWFIpICQoRU5BQkxFX1dFQl9BUElfU1RBVElTVElDUykgJChF
TkFCTEVfV0VCX0FVRElPKSAkKEVOQUJMRV9XRUJfQVVUSE4pICQoRU5BQkxFX1dFQl9DUllQVE8p
ICQoRU5BQkxFX1dFQl9SVEMpICQoRU5BQkxFX1dJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkgJChF
TkFCTEVfWFNMVCk7CitGRUFUVVJFX0RFRklORVMgPSAkKEVOQUJMRV8zRF9UUkFOU0ZPUk1TKSAk
KEVOQUJMRV9BQ0NFTEVSQVRFRF8yRF9DQU5WQVMpICQoRU5BQkxFX0FDQ0VTU0lCSUxJVFlfSVNP
TEFURURfVFJFRSkgJChFTkFCTEVfQVBQTEVfUEFZKSAkKEVOQUJMRV9BUFBMRV9QQVlfU0VTU0lP
Tl9WMykgJChFTkFCTEVfQVBQTEVfUEFZX1NFU1NJT05fVjQpICQoRU5BQkxFX0FQUExFX1BBWV9T
RVNTSU9OX1Y5KSAkKEVOQUJMRV9BUFBMSUNBVElPTl9NQU5JRkVTVCkgJChFTkFCTEVfQVRUQUNI
TUVOVF9FTEVNRU5UKSAkKEVOQUJMRV9BVkZfQ0FQVElPTlMpICQoRU5BQkxFX0NBQ0hFX1BBUlRJ
VElPTklORykgJChFTkFCTEVfQ0hBTk5FTF9NRVNTQUdJTkcpICQoRU5BQkxFX0NPTlRFTlRfRklM
VEVSSU5HKSAkKEVOQUJMRV9DU1MzX1RFWFQpICQoRU5BQkxFX0NTU19CT1hfREVDT1JBVElPTl9C
UkVBSykgJChFTkFCTEVfQ1NTX0NPTVBPU0lUSU5HKSAkKEVOQUJMRV9DU1NfQ09OSUNfR1JBRElF
TlRTKSAkKEVOQUJMRV9DU1NfSU1BR0VfUkVTT0xVVElPTikgJChFTkFCTEVfQ1NTX1BBSU5USU5H
X0FQSSkgJChFTkFCTEVfQ1NTX1NDUk9MTF9TTkFQKSAkKEVOQUJMRV9DU1NfU0VMRUNUT1JTX0xF
VkVMNCkgJChFTkFCTEVfQ1NTX1RSQUlMSU5HX1dPUkQpICQoRU5BQkxFX0NTU19UWVBFRF9PTSkg
JChFTkFCTEVfQ1VSU09SX1ZJU0lCSUxJVFkpICQoRU5BQkxFX0NfTE9PUCkgJChFTkFCTEVfREFS
S19NT0RFX0NTUykgJChFTkFCTEVfREFUQUNVRV9WQUxVRSkgJChFTkFCTEVfREFUQUxJU1RfRUxF
TUVOVCkgJChFTkFCTEVfREFUQV9JTlRFUkFDVElPTikgJChFTkFCTEVfREVWSUNFX09SSUVOVEFU
SU9OKSAkKEVOQUJMRV9EUkFHX1NVUFBPUlQpICQoRU5BQkxFX0VESVRBQkxFX1JFR0lPTikgJChF
TkFCTEVfRU5DUllQVEVEX01FRElBKSAkKEVOQUJMRV9FWFBFUklNRU5UQUxfRkVBVFVSRVMpICQo
RU5BQkxFX0ZJTFRFUlNfTEVWRUxfMikgJChFTkFCTEVfRlVMTFNDUkVFTl9BUEkpICQoRU5BQkxF
X1BJQ1RVUkVfSU5fUElDVFVSRV9BUEkpICQoRU5BQkxFX0dBTUVQQUQpICQoRU5BQkxFX0dFT0xP
Q0FUSU9OKSAkKEVOQUJMRV9HUFVfUFJPQ0VTUykgJChFTkFCTEVfSU5ERVhFRF9EQVRBQkFTRSkg
JChFTkFCTEVfSU5ERVhFRF9EQVRBQkFTRV9JTl9XT1JLRVJTKSAkKEVOQUJMRV9JTlBVVF9UWVBF
X0NPTE9SKSAkKEVOQUJMRV9JTlBVVF9UWVBFX0RBVEUpICQoRU5BQkxFX0lOUFVUX1RZUEVfREFU
RVRJTUVMT0NBTCkgJChFTkFCTEVfSU5QVVRfVFlQRV9EQVRFVElNRV9JTkNPTVBMRVRFKSAkKEVO
QUJMRV9JTlBVVF9UWVBFX01PTlRIKSAkKEVOQUJMRV9JTlBVVF9UWVBFX1RJTUUpICQoRU5BQkxF
X0lOUFVUX1RZUEVfV0VFSykgJChFTkFCTEVfSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykgJChFTkFCTEVfSU5TUEVDVE9SX1RFTEVNRVRSWSkgJChFTkFCTEVfSU5URVJTRUNUSU9OX09C
U0VSVkVSKSAkKEVOQUJMRV9JT1NfR0VTVFVSRV9FVkVOVFMpICQoRU5BQkxFX0lPU19UT1VDSF9F
VkVOVFMpICQoRU5BQkxFX0xBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpICQoRU5BQkxFX0xFR0FD
WV9DU1NfVkVORE9SX1BSRUZJWEVTKSAkKEVOQUJMRV9MRUdBQ1lfQ1VTVE9NX1BST1RPQ09MX01B
TkFHRVIpICQoRU5BQkxFX0xFR0FDWV9FTkNSWVBURURfTUVESUEpICQoRU5BQkxFX0xFVFRFUlBS
RVNTKSAkKEVOQUJMRV9NQUNfR0VTVFVSRV9FVkVOVFMpICQoRU5BQkxFX01BVEhNTCkgJChFTkFC
TEVfTUVESUFfQ0FQVFVSRSkgJChFTkFCTEVfTUVESUFfQ09OVFJPTFNfU0NSSVBUKSAkKEVOQUJM
RV9NRURJQV9TRVNTSU9OKSAkKEVOQUJMRV9NRURJQV9TT1VSQ0UpICQoRU5BQkxFX01FRElBX1NU
QVRJU1RJQ1MpICQoRU5BQkxFX01FRElBX1NUUkVBTSkgJChFTkFCTEVfTUVNT1JZX1NBTVBMRVIp
ICQoRU5BQkxFX01FVEVSX0VMRU1FTlQpICQoRU5BQkxFX01IVE1MKSAkKEVOQUJMRV9NT1VTRV9D
VVJTT1JfU0NBTEUpICQoRU5BQkxFX05BVklHQVRPUl9TVEFOREFMT05FKSAkKEVOQUJMRV9ORVRX
T1JLX0NBQ0hFX1NQRUNVTEFUSVZFX1JFVkFMSURBVElPTikgJChFTkFCTEVfTkVUV09SS19DQUNI
RV9TVEFMRV9XSElMRV9SRVZBTElEQVRFKSAkKEVOQUJMRV9OT1RJRklDQVRJT05TKSAkKEVOQUJM
RV9PRkZTQ1JFRU5fQ0FOVkFTKSAkKEVOQUJMRV9PVkVSRkxPV19TQ1JPTExJTkdfVE9VQ0gpICQo
RU5BQkxFX1BBWU1FTlRfUkVRVUVTVCkgJChFTkFCTEVfUERGS0lUX1BMVUdJTikgJChFTkFCTEVf
UE9JTlRFUl9MT0NLKSAkKEVOQUJMRV9QVUJMSUNfU1VGRklYX0xJU1QpICQoRU5BQkxFX1FVT1RB
KSAkKEVOQUJMRV9SRU1PVEVfSU5TUEVDVE9SKSAkKEVOQUJMRV9SRVNJWkVfT0JTRVJWRVIpICQo
RU5BQkxFX1JFU09MVVRJT05fTUVESUFfUVVFUlkpICQoRU5BQkxFX1JFU09VUkNFX0xPQURfU1RB
VElTVElDUykgJChFTkFCTEVfUkVTT1VSQ0VfVVNBR0UpICQoRU5BQkxFX1JVQkJFUl9CQU5ESU5H
KSAkKEVOQUJMRV9TQU5EQk9YX0VYVEVOU0lPTlMpICQoRU5BQkxFX1NFUlZFUl9QUkVDT05ORUNU
KSAkKEVOQUJMRV9TRVJWSUNFX0NPTlRST0xTKSAkKEVOQUJMRV9TRVJWSUNFX1dPUktFUikgJChF
TkFCTEVfU0hBUkVBQkxFX1JFU09VUkNFKSAkKEVOQUJMRV9TUEVFQ0hfU1lOVEhFU0lTKSAkKEVO
QUJMRV9TVFJFQU1TX0FQSSkgJChFTkFCTEVfU1ZHX0ZPTlRTKSAkKEVOQUJMRV9URUxFUEhPTkVf
TlVNQkVSX0RFVEVDVElPTikgJChFTkFCTEVfVEVYVF9BVVRPU0laSU5HKSAkKEVOQUJMRV9UT1VD
SF9FVkVOVFMpICQoRU5BQkxFX1VTRVJTRUxFQ1RfQUxMKSAkKEVOQUJMRV9VU0VSX01FU1NBR0Vf
SEFORExFUlMpICQoRU5BQkxFX1ZBUklBVElPTl9GT05UUykgJChFTkFCTEVfVklERU8pICQoRU5B
QkxFX1ZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSAkKEVOQUJMRV9WSURFT19UUkFDSykgJChFTkFC
TEVfVklERU9fVVNFU19FTEVNRU5UX0ZVTExTQ1JFRU4pICQoRU5BQkxFX1dFQl9BUkNISVZFKSAk
KEVOQUJMRV9XRUJEUklWRVJfTU9VU0VfSU5URVJBQ1RJT05TKSAkKEVOQUJMRV9XRUJEUklWRVJf
S0VZQk9BUkRfSU5URVJBQ1RJT05TKSAkKEVOQUJMRV9XRUJEUklWRVJfVE9VQ0hfSU5URVJBQ1RJ
T05TKSAkKEVOQUJMRV9XRUJHTCkgJChFTkFCTEVfV0VCR0wyKSAkKEVOQUJMRV9XRUJHUFUpICQo
RU5BQkxFX1dFQlhSKSAkKEVOQUJMRV9XRUJfQVBJX1NUQVRJU1RJQ1MpICQoRU5BQkxFX1dFQl9B
VURJTykgJChFTkFCTEVfV0VCX0FVVEhOKSAkKEVOQUJMRV9XRUJfQ1JZUFRPKSAkKEVOQUJMRV9X
RUJfUlRDKSAkKEVOQUJMRV9XSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpICQoRU5BQkxFX1hTTFQp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy5tYWtlIGIvU291cmNl
L1dlYktpdC9EZXJpdmVkU291cmNlcy5tYWtlCmluZGV4IGExMmI3ODYzYzkyNTc5MjM4NjFiMzBm
NmIwMjcwNTIwZjFkNmFjYjEuLjhjNThhNTc3MTQ2NDgyZWNmMGEyODUwNDJkZjcwODUzYzZlZWRk
MDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMubWFrZQorKysgYi9T
b3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UKQEAgLTMxNywxNyArMzE3LDkgQEAgQVVU
T01BVElPTl9QUk9UT0NPTF9PVVRQVVRfRklMRVMgPSBcCiAjCiBBVVRPTUFUSU9OX1BST1RPQ09M
X09VVFBVVF9QQVRURVJOUyA9ICQoc3Vic3QgLiwlLCQoQVVUT01BVElPTl9QUk9UT0NPTF9PVVRQ
VVRfRklMRVMpKQogCi1pZmVxICgkKE9TKSxNQUNPUykKLWlmZXEgKCQoc2hlbGwgJChDQykgLXN0
ZD1nbnUrKzF6IC14IGMrKyAtRSAtUCAtZE0gJChTREtfRkxBR1MpICQoVEFSR0VUX1RSSVBMRV9G
TEFHUykgJChGUkFNRVdPUktfRkxBR1MpICQoSEVBREVSX0ZMQUdTKSAtaW5jbHVkZSAid3RmL1Bs
YXRmb3JtLmgiIC9kZXYvbnVsbCB8IGdyZXAgJyBXVEZfUExBVEZPUk1fSU9TX0ZBTUlMWSAnIHwg
Y3V0IC1kJyAnIC1mMyksIDEpCi0JQVVUT01BVElPTl9CQUNLRU5EX1BMQVRGT1JNX0FSR1VNRU5U
UyA9IC0tcGxhdGZvcm0gaU9TCi1lbHNlCi0JQVVUT01BVElPTl9CQUNLRU5EX1BMQVRGT1JNX0FS
R1VNRU5UUyA9IC0tcGxhdGZvcm0gbWFjT1MKLWVuZGlmCi1lbmRpZiAjIE1BQ09TCi0KICMgSlNP
Ti1SUEMgRnJvbnRlbmQgRGlzcGF0Y2hlcnMsIEJhY2tlbmQgRGlzcGF0Y2hlcnMsIFR5cGUgQnVp
bGRlcnMKICQoQVVUT01BVElPTl9QUk9UT0NPTF9PVVRQVVRfUEFUVEVSTlMpIDogJChBVVRPTUFU
SU9OX1BST1RPQ09MX0lOUFVUX0ZJTEVTKSAkKEFVVE9NQVRJT05fUFJPVE9DT0xfR0VORVJBVE9S
X1NDUklQVFMpCi0JJChQWVRIT04pICQoSmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVIpL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weSAtLWZyYW1ld29yayBXZWJLaXQgJChB
VVRPTUFUSU9OX0JBQ0tFTkRfUExBVEZPUk1fQVJHVU1FTlRTKSAtLWJhY2tlbmQgLS1vdXRwdXRE
aXIgLiAkKEFVVE9NQVRJT05fUFJPVE9DT0xfSU5QVVRfRklMRVMpCisJJChQWVRIT04pICQoSmF2
YVNjcmlwdENvcmVfU0NSSVBUU19ESVIpL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weSAtLWZyYW1ld29yayBXZWJLaXQgLS1iYWNrZW5kIC0tb3V0cHV0RGlyIC4gJChBVVRP
TUFUSU9OX1BST1RPQ09MX0lOUFVUX0ZJTEVTKQogCiBhbGwgOiAkKEFVVE9NQVRJT05fUFJPVE9D
T0xfT1VUUFVUX0ZJTEVTKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtTWFj
LmNtYWtlIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybU1hYy5jbWFrZQppbmRleCA0OGUxNjAxM2Rj
YjNhMTNkZmYwZDViY2U3NWYzYWNlNTQxMDQ5NDJiLi40YzJkMzBiZWJmNzQ4MzEzNTYwOGI0NDhm
NjIzZDdiZTVmZWRiZjkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtTWFjLmNt
YWtlCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1NYWMuY21ha2UKQEAgLTQ4MCwxMCArNDgw
LDYgQEAgZm9yZWFjaCAoX2ZpbGUgJHtPYmpDRm9yd2FyZGluZ0hlYWRlcnN9KQogICAgIGZpbGUo
V1JJVEUgJHtGT1JXQVJESU5HX0hFQURFUlNfRElSfS9XZWJLaXQvJHtfZmlsZX0gIiNpbXBvcnQg
PFdlYktpdExlZ2FjeS8ke19maWxlfT4iKQogZW5kZm9yZWFjaCAoKQogCi1saXN0KEFQUEVORCBX
ZWJLaXRfQVVUT01BVElPTl9QUk9UT0NPTF9HRU5FUkFUT1JfRVhUUkFfRkxBR1MKLSAgICAtLXBs
YXRmb3JtPW1hY09TCi0pCi0KIHNldChTZWNJdGVtU2hpbURpcmVjdG9yeSAke0NNQUtFX0xJQlJB
UllfT1VUUFVUX0RJUkVDVE9SWX0vV2ViS2l0LmZyYW1ld29yay9WZXJzaW9ucy9BL0ZyYW1ld29y
a3MpCiBhZGRfbGlicmFyeShTZWNJdGVtU2hpbSBTSEFSRUQgV2ViUHJvY2Vzcy9tYWMvU2VjSXRl
bVNoaW1MaWJyYXJ5Lm1tKQogV0VCS0lUX0NSRUFURV9TWU1MSU5LKFNlY0l0ZW1TaGltICR7U2Vj
SXRlbVNoaW1EaXJlY3Rvcnl9ICR7Q01BS0VfTElCUkFSWV9PVVRQVVRfRElSRUNUT1JZfS9XZWJL
aXQuZnJhbWV3b3JrL0ZyYW1ld29ya3MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BdXRvbWF0aW9uL0F1dG9tYXRpb24uanNvbiBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0F1dG9tYXRpb24vQXV0b21hdGlvbi5qc29uCmluZGV4IDdmNTUyNTcwNWVmMjhlZTI5Zjg4NTMw
YjUyMDQ4MDQzYWM5ZTE0NmYuLjNkY2IyMTQxZWIwZDI3OTQ3MDdkZTI4NGM4NzA3MTBlODc3MjFj
MzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vQXV0b21h
dGlvbi5qc29uCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vQXV0b21h
dGlvbi5qc29uCkBAIC00MzcsNyArNDM3LDcgQEAKICAgICAgICAgewogICAgICAgICAgICAgIm5h
bWUiOiAiaW5zcGVjdEJyb3dzaW5nQ29udGV4dCIsCiAgICAgICAgICAgICAiZGVzY3JpcHRpb24i
OiAiSW5zcGVjdCB0aGUgc3BlY2lmaWVkIGJyb3dzaW5nIGNvbnRleHQgdXNpbmcgV2ViIEluc3Bl
Y3Rvci4iLAotICAgICAgICAgICAgInBsYXRmb3JtIjogIm1hY29zIiwKKyAgICAgICAgICAgICJj
b25kaXRpb24iOiAiZGVmaW5lZChXVEZfUExBVEZPUk1fTUFDKSAmJiBXVEZfUExBVEZPUk1fTUFD
IiwKICAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwogICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAiaGFuZGxlIiwgIiRyZWYiOiAiQnJvd3NpbmdDb250ZXh0SGFuZGxlIiwgImRlc2NyaXB0aW9u
IjogIlRoZSBoYW5kbGUgZm9yIHRoZSBicm93c2luZyBjb250ZXh0IHRoYXQgc2hvdWxkIGJlIGlu
c3BlY3RlZC4iIH0sCiAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJlbmFibGVBdXRvQ2FwdHVy
aW5nIiwgInR5cGUiOiAiYm9vbGVhbiIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6
ICJJZiB0aGlzIG9wdGlvbiBpcyBwcmVzZW50IGFuZCBzZXQgdG8gdHJ1ZSwgdGhlIFdlYiBJbnNw
ZWN0b3Igd2lsbCBhdXRvbWF0aWNhbGx5IHN0YXJ0IGEgdGltZWxpbmUgcmVjb3JkaW5nIG9mIHRo
ZSBzcGVjaWZpZWQgYnJvd3NpbmcgY29udGV4dCBvbmNlIGl0IGlzIGF0dGFjaGVkLiBOb3RlIHRo
YXQgdGhpcyBkaXNhYmxlcyB0aGUgZGVidWdnZXIgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgcmVj
b3JkaW5nLiIgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlv
bi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21h
dGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5oCmluZGV4IDIzYjk5MmYzY2U0NWY4MmYwZGNkZWRl
NjAwN2EyZTNhNDZiN2IwYjYuLjJjOTE4YTdkZDI1OTdiNmMxN2U3MzdmZGY1NjlmOTNmY2M1YzNj
MjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0
b21hdGlvblNlc3Npb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9u
L1dlYkF1dG9tYXRpb25TZXNzaW9uLmgKQEAgLTIwMCw3ICsyMDAsNiBAQCBwdWJsaWM6CiAgICAg
dm9pZCBnZXRTZXNzaW9uUGVybWlzc2lvbnMoSW5zcGVjdG9yOjpFcnJvclN0cmluZyYsIFJlZlB0
cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OlNlc3Npb25Q
ZXJtaXNzaW9uRGF0YT4+JiBvdXRfcGVybWlzc2lvbnMpIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0
U2Vzc2lvblBlcm1pc3Npb25zKEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmLCBjb25zdCBKU09OOjpB
cnJheSYgaW5fcGVybWlzc2lvbnMpIG92ZXJyaWRlOwogCi0gICAgLy8gUGxhdGZvcm06IG1hY09T
CiAjaWYgUExBVEZPUk0oTUFDKQogICAgIHZvaWQgaW5zcGVjdEJyb3dzaW5nQ29udGV4dChjb25z
dCBTdHJpbmcmLCBjb25zdCBib29sKiBvcHRpb25hbEVuYWJsZUF1dG9DYXB0dXJpbmcsIFJlZjxJ
bnNwZWN0QnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYpIG92ZXJyaWRlOwogI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL21hYy9XZWJBdXRvbWF0
aW9uU2Vzc2lvbk1hYy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vbWFj
L1dlYkF1dG9tYXRpb25TZXNzaW9uTWFjLm1tCmluZGV4IGU3ZWIwNzhjMmRiMWRhY2EzMzU1NmJh
MzYxMmNlOGVhNmQ1N2I1NzAuLjhjN2Y1ODVlMmFjZGNiYmQ4NDQwZjg3MGMzMTEyMzJlMjNmNDRm
YzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vbWFjL1dl
YkF1dG9tYXRpb25TZXNzaW9uTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1
dG9tYXRpb24vbWFjL1dlYkF1dG9tYXRpb25TZXNzaW9uTWFjLm1tCkBAIC00Miw3ICs0Miw3IEBA
CiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi0jcHJhZ21h
IG1hcmsgQ29tbWFuZHMgZm9yIFBsYXRmb3JtOiAnbWFjT1MnCisjcHJhZ21hIG1hcmsgQ29tbWFu
ZHMgZm9yICdQTEFURk9STShNQUMpJwogCiB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjppbnNw
ZWN0QnJvd3NpbmdDb250ZXh0KGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb25zdCBib29sKiBvcHRp
b25hbEVuYWJsZUF1dG9DYXB0dXJpbmcsIFJlZjxJbnNwZWN0QnJvd3NpbmdDb250ZXh0Q2FsbGJh
Y2s+JiYgY2FsbGJhY2spCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9D
b25maWd1cmF0aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZpZyBiL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL0NvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnCmluZGV4IGI0Zjc4
NzlhZTRjZDU5NTFiN2VjNzMxMDMxZTFiMDk1OWE5NGU2MzkuLjY3OWQzMmExZmI0ZTY4MDNlYTAx
ZGNhZTlkMmVkNjU3ZWJhOGNiZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L0NvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnCisrKyBiL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL0NvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnCkBAIC0z
ODMsNiArMzgzLDggQEAgRU5BQkxFX1ZJREVPX1RSQUNLID0gRU5BQkxFX1ZJREVPX1RSQUNLOwog
RU5BQkxFX1ZJREVPX1VTRVNfRUxFTUVOVF9GVUxMU0NSRUVOID0gJChFTkFCTEVfVklERU9fVVNF
U19FTEVNRU5UX0ZVTExTQ1JFRU5fJChXS19QTEFURk9STV9OQU1FKSk7CiBFTkFCTEVfVklERU9f
VVNFU19FTEVNRU5UX0ZVTExTQ1JFRU5fbWFjb3N4ID0gRU5BQkxFX1ZJREVPX1VTRVNfRUxFTUVO
VF9GVUxMU0NSRUVOOwogCitFTkFCTEVfV0VCX0FSQ0hJVkUgPSBFTkFCTEVfV0VCX0FSQ0hJVkU7
CisKIEVOQUJMRV9XRUJEUklWRVJfTU9VU0VfSU5URVJBQ1RJT05TID0gJChFTkFCTEVfV0VCRFJJ
VkVSX01PVVNFX0lOVEVSQUNUSU9OU18kKFdLX1BMQVRGT1JNX05BTUUpKTsKIEVOQUJMRV9XRUJE
UklWRVJfTU9VU0VfSU5URVJBQ1RJT05TX21hY29zeCA9IEVOQUJMRV9XRUJEUklWRVJfTU9VU0Vf
SU5URVJBQ1RJT05TOwogCkBAIC00MjUsNCArNDI3LDQgQEAgRU5BQkxFX1dJUkVMRVNTX1BMQVlC
QUNLX1RBUkdFVCA9IEVOQUJMRV9XSVJFTEVTU19QTEFZQkFDS19UQVJHRVQ7CiAKIEVOQUJMRV9Y
U0xUID0gRU5BQkxFX1hTTFQ7CiAKLUZFQVRVUkVfREVGSU5FUyA9ICQoRU5BQkxFXzNEX1RSQU5T
Rk9STVMpICQoRU5BQkxFX0FDQ0VMRVJBVEVEXzJEX0NBTlZBUykgJChFTkFCTEVfQUNDRVNTSUJJ
TElUWV9JU09MQVRFRF9UUkVFKSAkKEVOQUJMRV9BUFBMRV9QQVkpICQoRU5BQkxFX0FQUExFX1BB
WV9TRVNTSU9OX1YzKSAkKEVOQUJMRV9BUFBMRV9QQVlfU0VTU0lPTl9WNCkgJChFTkFCTEVfQVBQ
TEVfUEFZX1NFU1NJT05fVjkpICQoRU5BQkxFX0FQUExJQ0FUSU9OX01BTklGRVNUKSAkKEVOQUJM
RV9BVFRBQ0hNRU5UX0VMRU1FTlQpICQoRU5BQkxFX0FWRl9DQVBUSU9OUykgJChFTkFCTEVfQ0FD
SEVfUEFSVElUSU9OSU5HKSAkKEVOQUJMRV9DSEFOTkVMX01FU1NBR0lORykgJChFTkFCTEVfQ09O
VEVOVF9GSUxURVJJTkcpICQoRU5BQkxFX0NTUzNfVEVYVCkgJChFTkFCTEVfQ1NTX0JPWF9ERUNP
UkFUSU9OX0JSRUFLKSAkKEVOQUJMRV9DU1NfQ09NUE9TSVRJTkcpICQoRU5BQkxFX0NTU19DT05J
Q19HUkFESUVOVFMpICQoRU5BQkxFX0NTU19JTUFHRV9SRVNPTFVUSU9OKSAkKEVOQUJMRV9DU1Nf
UEFJTlRJTkdfQVBJKSAkKEVOQUJMRV9DU1NfU0NST0xMX1NOQVApICQoRU5BQkxFX0NTU19TRUxF
Q1RPUlNfTEVWRUw0KSAkKEVOQUJMRV9DU1NfVFJBSUxJTkdfV09SRCkgJChFTkFCTEVfQ1NTX1RZ
UEVEX09NKSAkKEVOQUJMRV9DVVJTT1JfVklTSUJJTElUWSkgJChFTkFCTEVfQ19MT09QKSAkKEVO
QUJMRV9EQVJLX01PREVfQ1NTKSAkKEVOQUJMRV9EQVRBQ1VFX1ZBTFVFKSAkKEVOQUJMRV9EQVRB
TElTVF9FTEVNRU5UKSAkKEVOQUJMRV9EQVRBX0lOVEVSQUNUSU9OKSAkKEVOQUJMRV9ERVZJQ0Vf
T1JJRU5UQVRJT04pICQoRU5BQkxFX0RSQUdfU1VQUE9SVCkgJChFTkFCTEVfRURJVEFCTEVfUkVH
SU9OKSAkKEVOQUJMRV9FTkNSWVBURURfTUVESUEpICQoRU5BQkxFX0VYUEVSSU1FTlRBTF9GRUFU
VVJFUykgJChFTkFCTEVfRklMVEVSU19MRVZFTF8yKSAkKEVOQUJMRV9GVUxMU0NSRUVOX0FQSSkg
JChFTkFCTEVfUElDVFVSRV9JTl9QSUNUVVJFX0FQSSkgJChFTkFCTEVfR0FNRVBBRCkgJChFTkFC
TEVfR0VPTE9DQVRJT04pICQoRU5BQkxFX0dQVV9QUk9DRVNTKSAkKEVOQUJMRV9JTkRFWEVEX0RB
VEFCQVNFKSAkKEVOQUJMRV9JTkRFWEVEX0RBVEFCQVNFX0lOX1dPUktFUlMpICQoRU5BQkxFX0lO
UFVUX1RZUEVfQ09MT1IpICQoRU5BQkxFX0lOUFVUX1RZUEVfREFURSkgJChFTkFCTEVfSU5QVVRf
VFlQRV9EQVRFVElNRUxPQ0FMKSAkKEVOQUJMRV9JTlBVVF9UWVBFX0RBVEVUSU1FX0lOQ09NUExF
VEUpICQoRU5BQkxFX0lOUFVUX1RZUEVfTU9OVEgpICQoRU5BQkxFX0lOUFVUX1RZUEVfVElNRSkg
JChFTkFCTEVfSU5QVVRfVFlQRV9XRUVLKSAkKEVOQUJMRV9JTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKSAkKEVOQUJMRV9JTlNQRUNUT1JfVEVMRU1FVFJZKSAkKEVOQUJMRV9JTlRFUlNF
Q1RJT05fT0JTRVJWRVIpICQoRU5BQkxFX0lPU19HRVNUVVJFX0VWRU5UUykgJChFTkFCTEVfSU9T
X1RPVUNIX0VWRU5UUykgJChFTkFCTEVfTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkgJChFTkFC
TEVfTEVHQUNZX0NTU19WRU5ET1JfUFJFRklYRVMpICQoRU5BQkxFX0xFR0FDWV9DVVNUT01fUFJP
VE9DT0xfTUFOQUdFUikgJChFTkFCTEVfTEVHQUNZX0VOQ1JZUFRFRF9NRURJQSkgJChFTkFCTEVf
TEVUVEVSUFJFU1MpICQoRU5BQkxFX01BQ19HRVNUVVJFX0VWRU5UUykgJChFTkFCTEVfTUFUSE1M
KSAkKEVOQUJMRV9NRURJQV9DQVBUVVJFKSAkKEVOQUJMRV9NRURJQV9DT05UUk9MU19TQ1JJUFQp
ICQoRU5BQkxFX01FRElBX1NFU1NJT04pICQoRU5BQkxFX01FRElBX1NPVVJDRSkgJChFTkFCTEVf
TUVESUFfU1RBVElTVElDUykgJChFTkFCTEVfTUVESUFfU1RSRUFNKSAkKEVOQUJMRV9NRU1PUllf
U0FNUExFUikgJChFTkFCTEVfTUVURVJfRUxFTUVOVCkgJChFTkFCTEVfTUhUTUwpICQoRU5BQkxF
X01PVVNFX0NVUlNPUl9TQ0FMRSkgJChFTkFCTEVfTkFWSUdBVE9SX1NUQU5EQUxPTkUpICQoRU5B
QkxFX05FVFdPUktfQ0FDSEVfU1BFQ1VMQVRJVkVfUkVWQUxJREFUSU9OKSAkKEVOQUJMRV9ORVRX
T1JLX0NBQ0hFX1NUQUxFX1dISUxFX1JFVkFMSURBVEUpICQoRU5BQkxFX05PVElGSUNBVElPTlMp
ICQoRU5BQkxFX09GRlNDUkVFTl9DQU5WQVMpICQoRU5BQkxFX09WRVJGTE9XX1NDUk9MTElOR19U
T1VDSCkgJChFTkFCTEVfUEFZTUVOVF9SRVFVRVNUKSAkKEVOQUJMRV9QREZLSVRfUExVR0lOKSAk
KEVOQUJMRV9QT0lOVEVSX0xPQ0spICQoRU5BQkxFX1BVQkxJQ19TVUZGSVhfTElTVCkgJChFTkFC
TEVfUVVPVEEpICQoRU5BQkxFX1JFTU9URV9JTlNQRUNUT1IpICQoRU5BQkxFX1JFU0laRV9PQlNF
UlZFUikgJChFTkFCTEVfUkVTT0xVVElPTl9NRURJQV9RVUVSWSkgJChFTkFCTEVfUkVTT1VSQ0Vf
TE9BRF9TVEFUSVNUSUNTKSAkKEVOQUJMRV9SRVNPVVJDRV9VU0FHRSkgJChFTkFCTEVfUlVCQkVS
X0JBTkRJTkcpICQoRU5BQkxFX1NBTkRCT1hfRVhURU5TSU9OUykgJChFTkFCTEVfU0VSVkVSX1BS
RUNPTk5FQ1QpICQoRU5BQkxFX1NFUlZJQ0VfQ09OVFJPTFMpICQoRU5BQkxFX1NFUlZJQ0VfV09S
S0VSKSAkKEVOQUJMRV9TSEFSRUFCTEVfUkVTT1VSQ0UpICQoRU5BQkxFX1NQRUVDSF9TWU5USEVT
SVMpICQoRU5BQkxFX1NUUkVBTVNfQVBJKSAkKEVOQUJMRV9TVkdfRk9OVFMpICQoRU5BQkxFX1RF
TEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKSAkKEVOQUJMRV9URVhUX0FVVE9TSVpJTkcpICQoRU5B
QkxFX1RPVUNIX0VWRU5UUykgJChFTkFCTEVfVVNFUlNFTEVDVF9BTEwpICQoRU5BQkxFX1VTRVJf
TUVTU0FHRV9IQU5ETEVSUykgJChFTkFCTEVfVkFSSUFUSU9OX0ZPTlRTKSAkKEVOQUJMRV9WSURF
TykgJChFTkFCTEVfVklERU9fUFJFU0VOVEFUSU9OX01PREUpICQoRU5BQkxFX1ZJREVPX1RSQUNL
KSAkKEVOQUJMRV9WSURFT19VU0VTX0VMRU1FTlRfRlVMTFNDUkVFTikgJChFTkFCTEVfV0VCRFJJ
VkVSX01PVVNFX0lOVEVSQUNUSU9OUykgJChFTkFCTEVfV0VCRFJJVkVSX0tFWUJPQVJEX0lOVEVS
QUNUSU9OUykgJChFTkFCTEVfV0VCRFJJVkVSX1RPVUNIX0lOVEVSQUNUSU9OUykgJChFTkFCTEVf
V0VCR0wpICQoRU5BQkxFX1dFQkdMMikgJChFTkFCTEVfV0VCR1BVKSAkKEVOQUJMRV9XRUJYUikg
JChFTkFCTEVfV0VCX0FQSV9TVEFUSVNUSUNTKSAkKEVOQUJMRV9XRUJfQVVESU8pICQoRU5BQkxF
X1dFQl9BVVRITikgJChFTkFCTEVfV0VCX0NSWVBUTykgJChFTkFCTEVfV0VCX1JUQykgJChFTkFC
TEVfV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKSAkKEVOQUJMRV9YU0xUKTsKK0ZFQVRVUkVfREVG
SU5FUyA9ICQoRU5BQkxFXzNEX1RSQU5TRk9STVMpICQoRU5BQkxFX0FDQ0VMRVJBVEVEXzJEX0NB
TlZBUykgJChFTkFCTEVfQUNDRVNTSUJJTElUWV9JU09MQVRFRF9UUkVFKSAkKEVOQUJMRV9BUFBM
RV9QQVkpICQoRU5BQkxFX0FQUExFX1BBWV9TRVNTSU9OX1YzKSAkKEVOQUJMRV9BUFBMRV9QQVlf
U0VTU0lPTl9WNCkgJChFTkFCTEVfQVBQTEVfUEFZX1NFU1NJT05fVjkpICQoRU5BQkxFX0FQUExJ
Q0FUSU9OX01BTklGRVNUKSAkKEVOQUJMRV9BVFRBQ0hNRU5UX0VMRU1FTlQpICQoRU5BQkxFX0FW
Rl9DQVBUSU9OUykgJChFTkFCTEVfQ0FDSEVfUEFSVElUSU9OSU5HKSAkKEVOQUJMRV9DSEFOTkVM
X01FU1NBR0lORykgJChFTkFCTEVfQ09OVEVOVF9GSUxURVJJTkcpICQoRU5BQkxFX0NTUzNfVEVY
VCkgJChFTkFCTEVfQ1NTX0JPWF9ERUNPUkFUSU9OX0JSRUFLKSAkKEVOQUJMRV9DU1NfQ09NUE9T
SVRJTkcpICQoRU5BQkxFX0NTU19DT05JQ19HUkFESUVOVFMpICQoRU5BQkxFX0NTU19JTUFHRV9S
RVNPTFVUSU9OKSAkKEVOQUJMRV9DU1NfUEFJTlRJTkdfQVBJKSAkKEVOQUJMRV9DU1NfU0NST0xM
X1NOQVApICQoRU5BQkxFX0NTU19TRUxFQ1RPUlNfTEVWRUw0KSAkKEVOQUJMRV9DU1NfVFJBSUxJ
TkdfV09SRCkgJChFTkFCTEVfQ1NTX1RZUEVEX09NKSAkKEVOQUJMRV9DVVJTT1JfVklTSUJJTElU
WSkgJChFTkFCTEVfQ19MT09QKSAkKEVOQUJMRV9EQVJLX01PREVfQ1NTKSAkKEVOQUJMRV9EQVRB
Q1VFX1ZBTFVFKSAkKEVOQUJMRV9EQVRBTElTVF9FTEVNRU5UKSAkKEVOQUJMRV9EQVRBX0lOVEVS
QUNUSU9OKSAkKEVOQUJMRV9ERVZJQ0VfT1JJRU5UQVRJT04pICQoRU5BQkxFX0RSQUdfU1VQUE9S
VCkgJChFTkFCTEVfRURJVEFCTEVfUkVHSU9OKSAkKEVOQUJMRV9FTkNSWVBURURfTUVESUEpICQo
RU5BQkxFX0VYUEVSSU1FTlRBTF9GRUFUVVJFUykgJChFTkFCTEVfRklMVEVSU19MRVZFTF8yKSAk
KEVOQUJMRV9GVUxMU0NSRUVOX0FQSSkgJChFTkFCTEVfUElDVFVSRV9JTl9QSUNUVVJFX0FQSSkg
JChFTkFCTEVfR0FNRVBBRCkgJChFTkFCTEVfR0VPTE9DQVRJT04pICQoRU5BQkxFX0dQVV9QUk9D
RVNTKSAkKEVOQUJMRV9JTkRFWEVEX0RBVEFCQVNFKSAkKEVOQUJMRV9JTkRFWEVEX0RBVEFCQVNF
X0lOX1dPUktFUlMpICQoRU5BQkxFX0lOUFVUX1RZUEVfQ09MT1IpICQoRU5BQkxFX0lOUFVUX1RZ
UEVfREFURSkgJChFTkFCTEVfSU5QVVRfVFlQRV9EQVRFVElNRUxPQ0FMKSAkKEVOQUJMRV9JTlBV
VF9UWVBFX0RBVEVUSU1FX0lOQ09NUExFVEUpICQoRU5BQkxFX0lOUFVUX1RZUEVfTU9OVEgpICQo
RU5BQkxFX0lOUFVUX1RZUEVfVElNRSkgJChFTkFCTEVfSU5QVVRfVFlQRV9XRUVLKSAkKEVOQUJM
RV9JTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKSAkKEVOQUJMRV9JTlNQRUNUT1JfVEVM
RU1FVFJZKSAkKEVOQUJMRV9JTlRFUlNFQ1RJT05fT0JTRVJWRVIpICQoRU5BQkxFX0lPU19HRVNU
VVJFX0VWRU5UUykgJChFTkFCTEVfSU9TX1RPVUNIX0VWRU5UUykgJChFTkFCTEVfTEFZT1VUX0ZP
Uk1BVFRJTkdfQ09OVEVYVCkgJChFTkFCTEVfTEVHQUNZX0NTU19WRU5ET1JfUFJFRklYRVMpICQo
RU5BQkxFX0xFR0FDWV9DVVNUT01fUFJPVE9DT0xfTUFOQUdFUikgJChFTkFCTEVfTEVHQUNZX0VO
Q1JZUFRFRF9NRURJQSkgJChFTkFCTEVfTEVUVEVSUFJFU1MpICQoRU5BQkxFX01BQ19HRVNUVVJF
X0VWRU5UUykgJChFTkFCTEVfTUFUSE1MKSAkKEVOQUJMRV9NRURJQV9DQVBUVVJFKSAkKEVOQUJM
RV9NRURJQV9DT05UUk9MU19TQ1JJUFQpICQoRU5BQkxFX01FRElBX1NFU1NJT04pICQoRU5BQkxF
X01FRElBX1NPVVJDRSkgJChFTkFCTEVfTUVESUFfU1RBVElTVElDUykgJChFTkFCTEVfTUVESUFf
U1RSRUFNKSAkKEVOQUJMRV9NRU1PUllfU0FNUExFUikgJChFTkFCTEVfTUVURVJfRUxFTUVOVCkg
JChFTkFCTEVfTUhUTUwpICQoRU5BQkxFX01PVVNFX0NVUlNPUl9TQ0FMRSkgJChFTkFCTEVfTkFW
SUdBVE9SX1NUQU5EQUxPTkUpICQoRU5BQkxFX05FVFdPUktfQ0FDSEVfU1BFQ1VMQVRJVkVfUkVW
QUxJREFUSU9OKSAkKEVOQUJMRV9ORVRXT1JLX0NBQ0hFX1NUQUxFX1dISUxFX1JFVkFMSURBVEUp
ICQoRU5BQkxFX05PVElGSUNBVElPTlMpICQoRU5BQkxFX09GRlNDUkVFTl9DQU5WQVMpICQoRU5B
QkxFX09WRVJGTE9XX1NDUk9MTElOR19UT1VDSCkgJChFTkFCTEVfUEFZTUVOVF9SRVFVRVNUKSAk
KEVOQUJMRV9QREZLSVRfUExVR0lOKSAkKEVOQUJMRV9QT0lOVEVSX0xPQ0spICQoRU5BQkxFX1BV
QkxJQ19TVUZGSVhfTElTVCkgJChFTkFCTEVfUVVPVEEpICQoRU5BQkxFX1JFTU9URV9JTlNQRUNU
T1IpICQoRU5BQkxFX1JFU0laRV9PQlNFUlZFUikgJChFTkFCTEVfUkVTT0xVVElPTl9NRURJQV9R
VUVSWSkgJChFTkFCTEVfUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKSAkKEVOQUJMRV9SRVNPVVJD
RV9VU0FHRSkgJChFTkFCTEVfUlVCQkVSX0JBTkRJTkcpICQoRU5BQkxFX1NBTkRCT1hfRVhURU5T
SU9OUykgJChFTkFCTEVfU0VSVkVSX1BSRUNPTk5FQ1QpICQoRU5BQkxFX1NFUlZJQ0VfQ09OVFJP
TFMpICQoRU5BQkxFX1NFUlZJQ0VfV09SS0VSKSAkKEVOQUJMRV9TSEFSRUFCTEVfUkVTT1VSQ0Up
ICQoRU5BQkxFX1NQRUVDSF9TWU5USEVTSVMpICQoRU5BQkxFX1NUUkVBTVNfQVBJKSAkKEVOQUJM
RV9TVkdfRk9OVFMpICQoRU5BQkxFX1RFTEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKSAkKEVOQUJM
RV9URVhUX0FVVE9TSVpJTkcpICQoRU5BQkxFX1RPVUNIX0VWRU5UUykgJChFTkFCTEVfVVNFUlNF
TEVDVF9BTEwpICQoRU5BQkxFX1VTRVJfTUVTU0FHRV9IQU5ETEVSUykgJChFTkFCTEVfVkFSSUFU
SU9OX0ZPTlRTKSAkKEVOQUJMRV9WSURFTykgJChFTkFCTEVfVklERU9fUFJFU0VOVEFUSU9OX01P
REUpICQoRU5BQkxFX1ZJREVPX1RSQUNLKSAkKEVOQUJMRV9WSURFT19VU0VTX0VMRU1FTlRfRlVM
TFNDUkVFTikgJChFTkFCTEVfV0VCX0FSQ0hJVkUpICQoRU5BQkxFX1dFQkRSSVZFUl9NT1VTRV9J
TlRFUkFDVElPTlMpICQoRU5BQkxFX1dFQkRSSVZFUl9LRVlCT0FSRF9JTlRFUkFDVElPTlMpICQo
RU5BQkxFX1dFQkRSSVZFUl9UT1VDSF9JTlRFUkFDVElPTlMpICQoRU5BQkxFX1dFQkdMKSAkKEVO
QUJMRV9XRUJHTDIpICQoRU5BQkxFX1dFQkdQVSkgJChFTkFCTEVfV0VCWFIpICQoRU5BQkxFX1dF
Ql9BUElfU1RBVElTVElDUykgJChFTkFCTEVfV0VCX0FVRElPKSAkKEVOQUJMRV9XRUJfQVVUSE4p
ICQoRU5BQkxFX1dFQl9DUllQVE8pICQoRU5BQkxFX1dFQl9SVEMpICQoRU5BQkxFX1dJUkVMRVNT
X1BMQVlCQUNLX1RBUkdFVCkgJChFTkFCTEVfWFNMVCk7CmRpZmYgLS1naXQgYS9Ub29scy9DaGFu
Z2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYjdlOTc3ZGI3ZGFiZmMwNmE0YTBjMGE0Y2Y1
NzUyNjllZWZhYmI1MC4uZTQ3NGVhMjUyZTRjMGRlMTIzNmMwYThmZDE4NDdkOGUyMTMwYjU0YiAx
MDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDMwIEBACisyMDIwLTA1LTIxICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4K
KworICAgICAgICBXZWIgSW5zcGVjdG9yOiByZXBsYWNlIGBmZWF0dXJlR3VhcmRgIGFuZCBgYXZh
aWxhYmlsaXR5YCB3aXRoIGEgY29tYmluZWQgYGNvbmRpdGlvbmAgdGhhdCBhY2NlcHRzIGFueSBt
YWNybworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEw
MDE0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUHJl
dmlvdXNseSwgdGhlIGdlbmVyYXRlZCBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMgd291bGQg
aW5jbHVkZSBjb2RlIGZvciB0aGluZ3MgdGhhdCB0aGUKKyAgICAgICAgYmFja2VuZCBkb2Vzbid0
IGFjdHVhbGx5IHN1cHBvcnQuIEJ5IHVzaW5nIGFjdHVhbCBtYWNyb3MgYW5kIHByZXByb2Nlc3Np
bmcgdGhhdCBmaWxlLCB3ZSBjYW4KKyAgICAgICAgZW5zdXJlIHRoYXQgdGhlIGZyb250ZW5kIGRv
ZXNuJ3QgaW5jb3JyZWN0bHkgdGhpbmsgdGhhdCBzb21ldGhpbmcgaXMgc3VwcG9ydGVkIGJ5IHRo
ZSBwYWdlCisgICAgICAgIGJlaW5nIGluc3BlY3RlZDoKKyAgICAgICAgIC0gdGhlIGBDYW52YXNg
IGNvbW1hbmRzIGFuZCBldmVudHMgcmVsYXRlZCB0byBzaGFkZXIgcHJvZ3JhbXMvcGlwZWxpbmVz
IHNob3VsZCBvbmx5IGV4aXN0CisgICAgICAgICAgIHdoZW4gdGhlIGNvcnJlc3BvbmRpbmcgY29u
dGV4dCB0eXBlIGV4aXN0cywgbmFtZWx5IGBFTkFCTEUoV0VCR0wpYCBhbmQgYEVOQUJMRShXRUJH
UFUpYC4KKyAgICAgICAgIC0gaU9TIGRvZXNuJ3Qgc3VwcG9ydCBzaG93aW5nIHJ1bGVycywgc28g
Y3JlYXRlIGEgdmFyaWFudCBvZiBgRE9NLnNldEluc3BlY3RNb2RlRW5hYmxlZGAKKyAgICAgICAg
ICAgdGhhdCBvbmx5IGV4aXN0cyBmb3IgYFBMQVRGT1JNKElPU19GQU1JTFkpYCB0aGF0IGRvZXNu
J3QgaGF2ZSB0aGUgYHNob3dSdWxlcnNgIG9wdGlvbmFsCisgICAgICAgICAgIHBhcmFtZXRlciwg
YXMgd2VsbCBhcyByZW1vdmluZyBgUGFnZS5zZXRTaG93UnVsZXJzYCBlbnRpcmVseS4KKyAgICAg
ICAgIC0gc2V0dGluZyB0aGUgZm9yY2VkIGFwcGVhcmFuY2Ugc2hvdWxkIG9ubHkgYmUgcG9zc2li
bGUgaWYgZGFyayBtb2RlIGlzIHN1cHBvcnRlZC4KKyAgICAgICAgIC0gd2ViIGFyY2hpdmVzIG9u
bHkgZXhpc3QgaWYgQ0YgaXMgdXNlZC4KKworICAgICAgICAqIENvbmZpZ3VyYXRpb25zL0ZlYXR1
cmVEZWZpbmVzLnhjY29uZmlnOgorICAgICAgICBBZGQgYEVOQUJMRV9XRUJfQVJDSElWRWAgc2lu
Y2UgaXQncyBhbHdheXMgZW5hYmxlZCBpbiB3dGYvUGxhdGZvcm1FbmFibGVDb2NvYS5oLgorCisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS9pbnNwZWN0b3IvbWFpbi5weToKKyAgICAgICAgKElu
c3BlY3RvckdlbmVyYXRvclRlc3RzLmdlbmVyYXRlX2Zyb21fanNvbik6CisgICAgICAgIChJbnNw
ZWN0b3JHZW5lcmF0b3JUZXN0cy5ydW5fdGVzdHMpOgorICAgICAgICAoSW5zcGVjdG9yR2VuZXJh
dG9yVGVzdHMubWFpbik6CisKIDIwMjAtMDUtMTUgIFJ5YW4gSGFkZGFkICA8cnlhbmhhZGRhZEBh
cHBsZS5jb20+CiAKICAgICAgICAgW2lPUyBFV1NdIFRlc3RXZWJLaXRBUEkuV0tXZWJzaXRlRGF0
YVN0b3JlLlJlbW92ZUFuZEZldGNoRGF0YSBpcyBmYWlsaW5nCmRpZmYgLS1naXQgYS9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2luc3BlY3Rvci9tYWluLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9pbnNwZWN0b3IvbWFpbi5weQppbmRleCAxNDYyZDgwMTlkOTQxMmY0NTZjNjcxNDA0OTkyMjhm
NmM5Y2E3YjNjLi45ZTA5MDRjMjBmZjZlMjljMTI0ZmVkNDVkM2M4ZDEzYjlhMDAzZDI1IDEwMDY0
NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2luc3BlY3Rvci9tYWluLnB5CisrKyBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvaW5zcGVjdG9yL21haW4ucHkKQEAgLTM4LDE0ICszOCwxMyBA
QCBjbGFzcyBJbnNwZWN0b3JHZW5lcmF0b3JUZXN0czoKICAgICAgICAgc2VsZi5yZXNldF9yZXN1
bHRzID0gcmVzZXRfcmVzdWx0cwogICAgICAgICBzZWxmLmV4ZWN1dGl2ZSA9IGV4ZWN1dGl2ZQog
Ci0gICAgZGVmIGdlbmVyYXRlX2Zyb21fanNvbihzZWxmLCBqc29uX2ZpbGUsIHBsYXRmb3JtLCBv
dXRwdXRfZGlyZWN0b3J5KToKKyAgICBkZWYgZ2VuZXJhdGVfZnJvbV9qc29uKHNlbGYsIGpzb25f
ZmlsZSwgb3V0cHV0X2RpcmVjdG9yeSk6CiAgICAgICAgIGNtZCA9IFsncHl0aG9uJywKICAgICAg
ICAgICAgICAgICdKYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHknLAogICAgICAgICAgICAgICAgJy0tb3V0cHV0RGly
Jywgb3V0cHV0X2RpcmVjdG9yeSwKICAgICAgICAgICAgICAgICctLWZvcmNlJywKICAgICAgICAg
ICAgICAgICctLWZyYW1ld29yaycsICdUZXN0JywKICAgICAgICAgICAgICAgICctLXRlc3QnLAot
ICAgICAgICAgICAgICAgJy0tcGxhdGZvcm0nLCBwbGF0Zm9ybSwKICAgICAgICAgICAgICAgIGpz
b25fZmlsZV0KIAogICAgICAgICBleGl0X2NvZGUgPSAwCkBAIC04OCw3ICs4Nyw3IEBAIGNsYXNz
IEluc3BlY3RvckdlbmVyYXRvclRlc3RzOgogICAgICAgICAgICAgICAgIHByaW50KCdQQVNTOiAl
cycgJSBvdXRwdXRfZmlsZSkKICAgICAgICAgcmV0dXJuIGNoYW5nZXNfZm91bmQKIAotICAgIGRl
ZiBydW5fdGVzdHMoc2VsZiwgcGxhdGZvcm0sIGlucHV0X2RpcmVjdG9yeSwgcmVmZXJlbmNlX2Rp
cmVjdG9yeSk6CisgICAgZGVmIHJ1bl90ZXN0cyhzZWxmLCBpbnB1dF9kaXJlY3RvcnksIHJlZmVy
ZW5jZV9kaXJlY3RvcnkpOgogICAgICAgICB3b3JrX2RpcmVjdG9yeSA9IHJlZmVyZW5jZV9kaXJl
Y3RvcnkKIAogICAgICAgICBwYXNzZWQgPSBUcnVlCkBAIC0xMDEsNyArMTAwLDcgQEAgY2xhc3Mg
SW5zcGVjdG9yR2VuZXJhdG9yVGVzdHM6CiAgICAgICAgICAgICBpZiBub3Qgc2VsZi5yZXNldF9y
ZXN1bHRzOgogICAgICAgICAgICAgICAgIHdvcmtfZGlyZWN0b3J5ID0gdGVtcGZpbGUubWtkdGVt
cCgpCiAKLSAgICAgICAgICAgIGlmIHNlbGYuZ2VuZXJhdGVfZnJvbV9qc29uKG9zLnBhdGguam9p
bihpbnB1dF9kaXJlY3RvcnksIGlucHV0X2ZpbGUpLCBwbGF0Zm9ybSwgd29ya19kaXJlY3Rvcnkp
OgorICAgICAgICAgICAgaWYgc2VsZi5nZW5lcmF0ZV9mcm9tX2pzb24ob3MucGF0aC5qb2luKGlu
cHV0X2RpcmVjdG9yeSwgaW5wdXRfZmlsZSksIHdvcmtfZGlyZWN0b3J5KToKICAgICAgICAgICAg
ICAgICBwYXNzZWQgPSBGYWxzZQogCiAgICAgICAgICAgICBpZiBzZWxmLnJlc2V0X3Jlc3VsdHM6
CkBAIC0xMjIsMjEgKzEyMSwxMCBAQCBjbGFzcyBJbnNwZWN0b3JHZW5lcmF0b3JUZXN0czoKICAg
ICAgICAgYWxsX3Rlc3RzX3Bhc3NlZCA9IFRydWUKIAogICAgICAgICBiYXNlX2RpcmVjdG9yeSA9
IG9zLnBhdGguam9pbignSmF2YVNjcmlwdENvcmUnLCAnaW5zcGVjdG9yJywgJ3NjcmlwdHMnLCAn
dGVzdHMnKQotCi0gICAgICAgIHBsYXRmb3JtX2RpcmVjdG9yaWVzID0gewotICAgICAgICAgICAg
J21hY29zJzogJ21hYycsCi0gICAgICAgICAgICAnaW9zJzogJ2lvcycsCi0gICAgICAgICAgICAn
Z2VuZXJpYyc6ICdnZW5lcmljJywKLSAgICAgICAgICAgICdhbGwnOiAnYWxsJywKLSAgICAgICAg
fQotCi0gICAgICAgIGZvciBwbGF0Zm9ybV9uYW1lLCBwbGF0Zm9ybV9kaXJlY3RvcnkgaW4gcGxh
dGZvcm1fZGlyZWN0b3JpZXMuaXRlcml0ZW1zKCk6Ci0gICAgICAgICAgICBpbnB1dF9kaXJlY3Rv
cnkgPSBvcy5wYXRoLmpvaW4oYmFzZV9kaXJlY3RvcnksIHBsYXRmb3JtX2RpcmVjdG9yeSkKLSAg
ICAgICAgICAgIHJlZmVyZW5jZV9kaXJlY3RvcnkgPSBvcy5wYXRoLmpvaW4oaW5wdXRfZGlyZWN0
b3J5LCAnZXhwZWN0ZWQnKQotICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIoaW5wdXRf
ZGlyZWN0b3J5KSBvciBub3Qgb3MucGF0aC5pc2RpcihyZWZlcmVuY2VfZGlyZWN0b3J5KToKLSAg
ICAgICAgICAgICAgICBjb250aW51ZQotCi0gICAgICAgICAgICBhbGxfdGVzdHNfcGFzc2VkID0g
YWxsX3Rlc3RzX3Bhc3NlZCBhbmQgc2VsZi5ydW5fdGVzdHMocGxhdGZvcm1fbmFtZSwgaW5wdXRf
ZGlyZWN0b3J5LCByZWZlcmVuY2VfZGlyZWN0b3J5KQorICAgICAgICBpbnB1dF9kaXJlY3Rvcnkg
PSBiYXNlX2RpcmVjdG9yeQorICAgICAgICByZWZlcmVuY2VfZGlyZWN0b3J5ID0gb3MucGF0aC5q
b2luKGlucHV0X2RpcmVjdG9yeSwgJ2V4cGVjdGVkJykKKyAgICAgICAgaWYgb3MucGF0aC5pc2Rp
cihpbnB1dF9kaXJlY3RvcnkpIGFuZCBvcy5wYXRoLmlzZGlyKHJlZmVyZW5jZV9kaXJlY3Rvcnkp
OgorICAgICAgICAgICAgYWxsX3Rlc3RzX3Bhc3NlZCA9IHNlbGYucnVuX3Rlc3RzKGlucHV0X2Rp
cmVjdG9yeSwgcmVmZXJlbmNlX2RpcmVjdG9yeSkKIAogICAgICAgICBwcmludCgnJykKICAgICAg
ICAgaWYgYWxsX3Rlc3RzX3Bhc3NlZDoKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
Q29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25maWcgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL0NvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnCmluZGV4IGI0Zjc4Nzlh
ZTRjZDU5NTFiN2VjNzMxMDMxZTFiMDk1OWE5NGU2MzkuLjY3OWQzMmExZmI0ZTY4MDNlYTAxZGNh
ZTlkMmVkNjU3ZWJhOGNiZGQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvQ29uZmln
dXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25maWcKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9Db25maWd1cmF0aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZpZwpAQCAtMzgzLDYgKzM4Myw4
IEBAIEVOQUJMRV9WSURFT19UUkFDSyA9IEVOQUJMRV9WSURFT19UUkFDSzsKIEVOQUJMRV9WSURF
T19VU0VTX0VMRU1FTlRfRlVMTFNDUkVFTiA9ICQoRU5BQkxFX1ZJREVPX1VTRVNfRUxFTUVOVF9G
VUxMU0NSRUVOXyQoV0tfUExBVEZPUk1fTkFNRSkpOwogRU5BQkxFX1ZJREVPX1VTRVNfRUxFTUVO
VF9GVUxMU0NSRUVOX21hY29zeCA9IEVOQUJMRV9WSURFT19VU0VTX0VMRU1FTlRfRlVMTFNDUkVF
TjsKIAorRU5BQkxFX1dFQl9BUkNISVZFID0gRU5BQkxFX1dFQl9BUkNISVZFOworCiBFTkFCTEVf
V0VCRFJJVkVSX01PVVNFX0lOVEVSQUNUSU9OUyA9ICQoRU5BQkxFX1dFQkRSSVZFUl9NT1VTRV9J
TlRFUkFDVElPTlNfJChXS19QTEFURk9STV9OQU1FKSk7CiBFTkFCTEVfV0VCRFJJVkVSX01PVVNF
X0lOVEVSQUNUSU9OU19tYWNvc3ggPSBFTkFCTEVfV0VCRFJJVkVSX01PVVNFX0lOVEVSQUNUSU9O
UzsKIApAQCAtNDI1LDQgKzQyNyw0IEBAIEVOQUJMRV9XSVJFTEVTU19QTEFZQkFDS19UQVJHRVQg
PSBFTkFCTEVfV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUOwogCiBFTkFCTEVfWFNMVCA9IEVOQUJM
RV9YU0xUOwogCi1GRUFUVVJFX0RFRklORVMgPSAkKEVOQUJMRV8zRF9UUkFOU0ZPUk1TKSAkKEVO
QUJMRV9BQ0NFTEVSQVRFRF8yRF9DQU5WQVMpICQoRU5BQkxFX0FDQ0VTU0lCSUxJVFlfSVNPTEFU
RURfVFJFRSkgJChFTkFCTEVfQVBQTEVfUEFZKSAkKEVOQUJMRV9BUFBMRV9QQVlfU0VTU0lPTl9W
MykgJChFTkFCTEVfQVBQTEVfUEFZX1NFU1NJT05fVjQpICQoRU5BQkxFX0FQUExFX1BBWV9TRVNT
SU9OX1Y5KSAkKEVOQUJMRV9BUFBMSUNBVElPTl9NQU5JRkVTVCkgJChFTkFCTEVfQVRUQUNITUVO
VF9FTEVNRU5UKSAkKEVOQUJMRV9BVkZfQ0FQVElPTlMpICQoRU5BQkxFX0NBQ0hFX1BBUlRJVElP
TklORykgJChFTkFCTEVfQ0hBTk5FTF9NRVNTQUdJTkcpICQoRU5BQkxFX0NPTlRFTlRfRklMVEVS
SU5HKSAkKEVOQUJMRV9DU1MzX1RFWFQpICQoRU5BQkxFX0NTU19CT1hfREVDT1JBVElPTl9CUkVB
SykgJChFTkFCTEVfQ1NTX0NPTVBPU0lUSU5HKSAkKEVOQUJMRV9DU1NfQ09OSUNfR1JBRElFTlRT
KSAkKEVOQUJMRV9DU1NfSU1BR0VfUkVTT0xVVElPTikgJChFTkFCTEVfQ1NTX1BBSU5USU5HX0FQ
SSkgJChFTkFCTEVfQ1NTX1NDUk9MTF9TTkFQKSAkKEVOQUJMRV9DU1NfU0VMRUNUT1JTX0xFVkVM
NCkgJChFTkFCTEVfQ1NTX1RSQUlMSU5HX1dPUkQpICQoRU5BQkxFX0NTU19UWVBFRF9PTSkgJChF
TkFCTEVfQ1VSU09SX1ZJU0lCSUxJVFkpICQoRU5BQkxFX0NfTE9PUCkgJChFTkFCTEVfREFSS19N
T0RFX0NTUykgJChFTkFCTEVfREFUQUNVRV9WQUxVRSkgJChFTkFCTEVfREFUQUxJU1RfRUxFTUVO
VCkgJChFTkFCTEVfREFUQV9JTlRFUkFDVElPTikgJChFTkFCTEVfREVWSUNFX09SSUVOVEFUSU9O
KSAkKEVOQUJMRV9EUkFHX1NVUFBPUlQpICQoRU5BQkxFX0VESVRBQkxFX1JFR0lPTikgJChFTkFC
TEVfRU5DUllQVEVEX01FRElBKSAkKEVOQUJMRV9FWFBFUklNRU5UQUxfRkVBVFVSRVMpICQoRU5B
QkxFX0ZJTFRFUlNfTEVWRUxfMikgJChFTkFCTEVfRlVMTFNDUkVFTl9BUEkpICQoRU5BQkxFX1BJ
Q1RVUkVfSU5fUElDVFVSRV9BUEkpICQoRU5BQkxFX0dBTUVQQUQpICQoRU5BQkxFX0dFT0xPQ0FU
SU9OKSAkKEVOQUJMRV9HUFVfUFJPQ0VTUykgJChFTkFCTEVfSU5ERVhFRF9EQVRBQkFTRSkgJChF
TkFCTEVfSU5ERVhFRF9EQVRBQkFTRV9JTl9XT1JLRVJTKSAkKEVOQUJMRV9JTlBVVF9UWVBFX0NP
TE9SKSAkKEVOQUJMRV9JTlBVVF9UWVBFX0RBVEUpICQoRU5BQkxFX0lOUFVUX1RZUEVfREFURVRJ
TUVMT0NBTCkgJChFTkFCTEVfSU5QVVRfVFlQRV9EQVRFVElNRV9JTkNPTVBMRVRFKSAkKEVOQUJM
RV9JTlBVVF9UWVBFX01PTlRIKSAkKEVOQUJMRV9JTlBVVF9UWVBFX1RJTUUpICQoRU5BQkxFX0lO
UFVUX1RZUEVfV0VFSykgJChFTkFCTEVfSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykg
JChFTkFCTEVfSU5TUEVDVE9SX1RFTEVNRVRSWSkgJChFTkFCTEVfSU5URVJTRUNUSU9OX09CU0VS
VkVSKSAkKEVOQUJMRV9JT1NfR0VTVFVSRV9FVkVOVFMpICQoRU5BQkxFX0lPU19UT1VDSF9FVkVO
VFMpICQoRU5BQkxFX0xBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpICQoRU5BQkxFX0xFR0FDWV9D
U1NfVkVORE9SX1BSRUZJWEVTKSAkKEVOQUJMRV9MRUdBQ1lfQ1VTVE9NX1BST1RPQ09MX01BTkFH
RVIpICQoRU5BQkxFX0xFR0FDWV9FTkNSWVBURURfTUVESUEpICQoRU5BQkxFX0xFVFRFUlBSRVNT
KSAkKEVOQUJMRV9NQUNfR0VTVFVSRV9FVkVOVFMpICQoRU5BQkxFX01BVEhNTCkgJChFTkFCTEVf
TUVESUFfQ0FQVFVSRSkgJChFTkFCTEVfTUVESUFfQ09OVFJPTFNfU0NSSVBUKSAkKEVOQUJMRV9N
RURJQV9TRVNTSU9OKSAkKEVOQUJMRV9NRURJQV9TT1VSQ0UpICQoRU5BQkxFX01FRElBX1NUQVRJ
U1RJQ1MpICQoRU5BQkxFX01FRElBX1NUUkVBTSkgJChFTkFCTEVfTUVNT1JZX1NBTVBMRVIpICQo
RU5BQkxFX01FVEVSX0VMRU1FTlQpICQoRU5BQkxFX01IVE1MKSAkKEVOQUJMRV9NT1VTRV9DVVJT
T1JfU0NBTEUpICQoRU5BQkxFX05BVklHQVRPUl9TVEFOREFMT05FKSAkKEVOQUJMRV9ORVRXT1JL
X0NBQ0hFX1NQRUNVTEFUSVZFX1JFVkFMSURBVElPTikgJChFTkFCTEVfTkVUV09SS19DQUNIRV9T
VEFMRV9XSElMRV9SRVZBTElEQVRFKSAkKEVOQUJMRV9OT1RJRklDQVRJT05TKSAkKEVOQUJMRV9P
RkZTQ1JFRU5fQ0FOVkFTKSAkKEVOQUJMRV9PVkVSRkxPV19TQ1JPTExJTkdfVE9VQ0gpICQoRU5B
QkxFX1BBWU1FTlRfUkVRVUVTVCkgJChFTkFCTEVfUERGS0lUX1BMVUdJTikgJChFTkFCTEVfUE9J
TlRFUl9MT0NLKSAkKEVOQUJMRV9QVUJMSUNfU1VGRklYX0xJU1QpICQoRU5BQkxFX1FVT1RBKSAk
KEVOQUJMRV9SRU1PVEVfSU5TUEVDVE9SKSAkKEVOQUJMRV9SRVNJWkVfT0JTRVJWRVIpICQoRU5B
QkxFX1JFU09MVVRJT05fTUVESUFfUVVFUlkpICQoRU5BQkxFX1JFU09VUkNFX0xPQURfU1RBVElT
VElDUykgJChFTkFCTEVfUkVTT1VSQ0VfVVNBR0UpICQoRU5BQkxFX1JVQkJFUl9CQU5ESU5HKSAk
KEVOQUJMRV9TQU5EQk9YX0VYVEVOU0lPTlMpICQoRU5BQkxFX1NFUlZFUl9QUkVDT05ORUNUKSAk
KEVOQUJMRV9TRVJWSUNFX0NPTlRST0xTKSAkKEVOQUJMRV9TRVJWSUNFX1dPUktFUikgJChFTkFC
TEVfU0hBUkVBQkxFX1JFU09VUkNFKSAkKEVOQUJMRV9TUEVFQ0hfU1lOVEhFU0lTKSAkKEVOQUJM
RV9TVFJFQU1TX0FQSSkgJChFTkFCTEVfU1ZHX0ZPTlRTKSAkKEVOQUJMRV9URUxFUEhPTkVfTlVN
QkVSX0RFVEVDVElPTikgJChFTkFCTEVfVEVYVF9BVVRPU0laSU5HKSAkKEVOQUJMRV9UT1VDSF9F
VkVOVFMpICQoRU5BQkxFX1VTRVJTRUxFQ1RfQUxMKSAkKEVOQUJMRV9VU0VSX01FU1NBR0VfSEFO
RExFUlMpICQoRU5BQkxFX1ZBUklBVElPTl9GT05UUykgJChFTkFCTEVfVklERU8pICQoRU5BQkxF
X1ZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSAkKEVOQUJMRV9WSURFT19UUkFDSykgJChFTkFCTEVf
VklERU9fVVNFU19FTEVNRU5UX0ZVTExTQ1JFRU4pICQoRU5BQkxFX1dFQkRSSVZFUl9NT1VTRV9J
TlRFUkFDVElPTlMpICQoRU5BQkxFX1dFQkRSSVZFUl9LRVlCT0FSRF9JTlRFUkFDVElPTlMpICQo
RU5BQkxFX1dFQkRSSVZFUl9UT1VDSF9JTlRFUkFDVElPTlMpICQoRU5BQkxFX1dFQkdMKSAkKEVO
QUJMRV9XRUJHTDIpICQoRU5BQkxFX1dFQkdQVSkgJChFTkFCTEVfV0VCWFIpICQoRU5BQkxFX1dF
Ql9BUElfU1RBVElTVElDUykgJChFTkFCTEVfV0VCX0FVRElPKSAkKEVOQUJMRV9XRUJfQVVUSE4p
ICQoRU5BQkxFX1dFQl9DUllQVE8pICQoRU5BQkxFX1dFQl9SVEMpICQoRU5BQkxFX1dJUkVMRVNT
X1BMQVlCQUNLX1RBUkdFVCkgJChFTkFCTEVfWFNMVCk7CitGRUFUVVJFX0RFRklORVMgPSAkKEVO
QUJMRV8zRF9UUkFOU0ZPUk1TKSAkKEVOQUJMRV9BQ0NFTEVSQVRFRF8yRF9DQU5WQVMpICQoRU5B
QkxFX0FDQ0VTU0lCSUxJVFlfSVNPTEFURURfVFJFRSkgJChFTkFCTEVfQVBQTEVfUEFZKSAkKEVO
QUJMRV9BUFBMRV9QQVlfU0VTU0lPTl9WMykgJChFTkFCTEVfQVBQTEVfUEFZX1NFU1NJT05fVjQp
ICQoRU5BQkxFX0FQUExFX1BBWV9TRVNTSU9OX1Y5KSAkKEVOQUJMRV9BUFBMSUNBVElPTl9NQU5J
RkVTVCkgJChFTkFCTEVfQVRUQUNITUVOVF9FTEVNRU5UKSAkKEVOQUJMRV9BVkZfQ0FQVElPTlMp
ICQoRU5BQkxFX0NBQ0hFX1BBUlRJVElPTklORykgJChFTkFCTEVfQ0hBTk5FTF9NRVNTQUdJTkcp
ICQoRU5BQkxFX0NPTlRFTlRfRklMVEVSSU5HKSAkKEVOQUJMRV9DU1MzX1RFWFQpICQoRU5BQkxF
X0NTU19CT1hfREVDT1JBVElPTl9CUkVBSykgJChFTkFCTEVfQ1NTX0NPTVBPU0lUSU5HKSAkKEVO
QUJMRV9DU1NfQ09OSUNfR1JBRElFTlRTKSAkKEVOQUJMRV9DU1NfSU1BR0VfUkVTT0xVVElPTikg
JChFTkFCTEVfQ1NTX1BBSU5USU5HX0FQSSkgJChFTkFCTEVfQ1NTX1NDUk9MTF9TTkFQKSAkKEVO
QUJMRV9DU1NfU0VMRUNUT1JTX0xFVkVMNCkgJChFTkFCTEVfQ1NTX1RSQUlMSU5HX1dPUkQpICQo
RU5BQkxFX0NTU19UWVBFRF9PTSkgJChFTkFCTEVfQ1VSU09SX1ZJU0lCSUxJVFkpICQoRU5BQkxF
X0NfTE9PUCkgJChFTkFCTEVfREFSS19NT0RFX0NTUykgJChFTkFCTEVfREFUQUNVRV9WQUxVRSkg
JChFTkFCTEVfREFUQUxJU1RfRUxFTUVOVCkgJChFTkFCTEVfREFUQV9JTlRFUkFDVElPTikgJChF
TkFCTEVfREVWSUNFX09SSUVOVEFUSU9OKSAkKEVOQUJMRV9EUkFHX1NVUFBPUlQpICQoRU5BQkxF
X0VESVRBQkxFX1JFR0lPTikgJChFTkFCTEVfRU5DUllQVEVEX01FRElBKSAkKEVOQUJMRV9FWFBF
UklNRU5UQUxfRkVBVFVSRVMpICQoRU5BQkxFX0ZJTFRFUlNfTEVWRUxfMikgJChFTkFCTEVfRlVM
TFNDUkVFTl9BUEkpICQoRU5BQkxFX1BJQ1RVUkVfSU5fUElDVFVSRV9BUEkpICQoRU5BQkxFX0dB
TUVQQUQpICQoRU5BQkxFX0dFT0xPQ0FUSU9OKSAkKEVOQUJMRV9HUFVfUFJPQ0VTUykgJChFTkFC
TEVfSU5ERVhFRF9EQVRBQkFTRSkgJChFTkFCTEVfSU5ERVhFRF9EQVRBQkFTRV9JTl9XT1JLRVJT
KSAkKEVOQUJMRV9JTlBVVF9UWVBFX0NPTE9SKSAkKEVOQUJMRV9JTlBVVF9UWVBFX0RBVEUpICQo
RU5BQkxFX0lOUFVUX1RZUEVfREFURVRJTUVMT0NBTCkgJChFTkFCTEVfSU5QVVRfVFlQRV9EQVRF
VElNRV9JTkNPTVBMRVRFKSAkKEVOQUJMRV9JTlBVVF9UWVBFX01PTlRIKSAkKEVOQUJMRV9JTlBV
VF9UWVBFX1RJTUUpICQoRU5BQkxFX0lOUFVUX1RZUEVfV0VFSykgJChFTkFCTEVfSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykgJChFTkFCTEVfSU5TUEVDVE9SX1RFTEVNRVRSWSkgJChF
TkFCTEVfSU5URVJTRUNUSU9OX09CU0VSVkVSKSAkKEVOQUJMRV9JT1NfR0VTVFVSRV9FVkVOVFMp
ICQoRU5BQkxFX0lPU19UT1VDSF9FVkVOVFMpICQoRU5BQkxFX0xBWU9VVF9GT1JNQVRUSU5HX0NP
TlRFWFQpICQoRU5BQkxFX0xFR0FDWV9DU1NfVkVORE9SX1BSRUZJWEVTKSAkKEVOQUJMRV9MRUdB
Q1lfQ1VTVE9NX1BST1RPQ09MX01BTkFHRVIpICQoRU5BQkxFX0xFR0FDWV9FTkNSWVBURURfTUVE
SUEpICQoRU5BQkxFX0xFVFRFUlBSRVNTKSAkKEVOQUJMRV9NQUNfR0VTVFVSRV9FVkVOVFMpICQo
RU5BQkxFX01BVEhNTCkgJChFTkFCTEVfTUVESUFfQ0FQVFVSRSkgJChFTkFCTEVfTUVESUFfQ09O
VFJPTFNfU0NSSVBUKSAkKEVOQUJMRV9NRURJQV9TRVNTSU9OKSAkKEVOQUJMRV9NRURJQV9TT1VS
Q0UpICQoRU5BQkxFX01FRElBX1NUQVRJU1RJQ1MpICQoRU5BQkxFX01FRElBX1NUUkVBTSkgJChF
TkFCTEVfTUVNT1JZX1NBTVBMRVIpICQoRU5BQkxFX01FVEVSX0VMRU1FTlQpICQoRU5BQkxFX01I
VE1MKSAkKEVOQUJMRV9NT1VTRV9DVVJTT1JfU0NBTEUpICQoRU5BQkxFX05BVklHQVRPUl9TVEFO
REFMT05FKSAkKEVOQUJMRV9ORVRXT1JLX0NBQ0hFX1NQRUNVTEFUSVZFX1JFVkFMSURBVElPTikg
JChFTkFCTEVfTkVUV09SS19DQUNIRV9TVEFMRV9XSElMRV9SRVZBTElEQVRFKSAkKEVOQUJMRV9O
T1RJRklDQVRJT05TKSAkKEVOQUJMRV9PRkZTQ1JFRU5fQ0FOVkFTKSAkKEVOQUJMRV9PVkVSRkxP
V19TQ1JPTExJTkdfVE9VQ0gpICQoRU5BQkxFX1BBWU1FTlRfUkVRVUVTVCkgJChFTkFCTEVfUERG
S0lUX1BMVUdJTikgJChFTkFCTEVfUE9JTlRFUl9MT0NLKSAkKEVOQUJMRV9QVUJMSUNfU1VGRklY
X0xJU1QpICQoRU5BQkxFX1FVT1RBKSAkKEVOQUJMRV9SRU1PVEVfSU5TUEVDVE9SKSAkKEVOQUJM
RV9SRVNJWkVfT0JTRVJWRVIpICQoRU5BQkxFX1JFU09MVVRJT05fTUVESUFfUVVFUlkpICQoRU5B
QkxFX1JFU09VUkNFX0xPQURfU1RBVElTVElDUykgJChFTkFCTEVfUkVTT1VSQ0VfVVNBR0UpICQo
RU5BQkxFX1JVQkJFUl9CQU5ESU5HKSAkKEVOQUJMRV9TQU5EQk9YX0VYVEVOU0lPTlMpICQoRU5B
QkxFX1NFUlZFUl9QUkVDT05ORUNUKSAkKEVOQUJMRV9TRVJWSUNFX0NPTlRST0xTKSAkKEVOQUJM
RV9TRVJWSUNFX1dPUktFUikgJChFTkFCTEVfU0hBUkVBQkxFX1JFU09VUkNFKSAkKEVOQUJMRV9T
UEVFQ0hfU1lOVEhFU0lTKSAkKEVOQUJMRV9TVFJFQU1TX0FQSSkgJChFTkFCTEVfU1ZHX0ZPTlRT
KSAkKEVOQUJMRV9URUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikgJChFTkFCTEVfVEVYVF9BVVRP
U0laSU5HKSAkKEVOQUJMRV9UT1VDSF9FVkVOVFMpICQoRU5BQkxFX1VTRVJTRUxFQ1RfQUxMKSAk
KEVOQUJMRV9VU0VSX01FU1NBR0VfSEFORExFUlMpICQoRU5BQkxFX1ZBUklBVElPTl9GT05UUykg
JChFTkFCTEVfVklERU8pICQoRU5BQkxFX1ZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSAkKEVOQUJM
RV9WSURFT19UUkFDSykgJChFTkFCTEVfVklERU9fVVNFU19FTEVNRU5UX0ZVTExTQ1JFRU4pICQo
RU5BQkxFX1dFQl9BUkNISVZFKSAkKEVOQUJMRV9XRUJEUklWRVJfTU9VU0VfSU5URVJBQ1RJT05T
KSAkKEVOQUJMRV9XRUJEUklWRVJfS0VZQk9BUkRfSU5URVJBQ1RJT05TKSAkKEVOQUJMRV9XRUJE
UklWRVJfVE9VQ0hfSU5URVJBQ1RJT05TKSAkKEVOQUJMRV9XRUJHTCkgJChFTkFCTEVfV0VCR0wy
KSAkKEVOQUJMRV9XRUJHUFUpICQoRU5BQkxFX1dFQlhSKSAkKEVOQUJMRV9XRUJfQVBJX1NUQVRJ
U1RJQ1MpICQoRU5BQkxFX1dFQl9BVURJTykgJChFTkFCTEVfV0VCX0FVVEhOKSAkKEVOQUJMRV9X
RUJfQ1JZUFRPKSAkKEVOQUJMRV9XRUJfUlRDKSAkKEVOQUJMRV9XSVJFTEVTU19QTEFZQkFDS19U
QVJHRVQpICQoRU5BQkxFX1hTTFQpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400009</attachid>
            <date>2020-05-21 18:45:02 -0700</date>
            <delta_ts>2020-05-27 11:09:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-210014-20200521194451.patch</filename>
            <type>text/plain</type>
            <size>2809190</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDA5ZjdjZDI5ZDAzMjhjZGU1Y2RlNGE0MTgzMzI2
MjIzMmM2ZDA0Y2QuLmFmZWNiZmI2M2U4YmRhOGYzM2U1MmMwNmU3NTViOTI5Zjk4MzNjNTggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2NCBAQAorMjAyMC0wNS0yMSAgRGV2
aW4gUm91c3NvICA8ZHJvdXNzb0BhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3Rvcjog
cmVwbGFjZSBgZmVhdHVyZUd1YXJkYCBhbmQgYGF2YWlsYWJpbGl0eWAgd2l0aCBhIGNvbWJpbmVk
IGBjb25kaXRpb25gIHRoYXQgYWNjZXB0cyBhbnkgbWFjcm8KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMDAxNAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFByZXZpb3VzbHksIHRoZSBnZW5lcmF0ZWQgSW5z
cGVjdG9yQmFja2VuZENvbW1hbmRzLmpzIHdvdWxkIGluY2x1ZGUgY29kZSBmb3IgdGhpbmdzIHRo
YXQgdGhlCisgICAgICAgIGJhY2tlbmQgZG9lc24ndCBhY3R1YWxseSBzdXBwb3J0LiBCeSB1c2lu
ZyBhY3R1YWwgbWFjcm9zIGFuZCBwcmVwcm9jZXNzaW5nIHRoYXQgZmlsZSwgd2UgY2FuCisgICAg
ICAgIGVuc3VyZSB0aGF0IHRoZSBmcm9udGVuZCBkb2Vzbid0IGluY29ycmVjdGx5IHRoaW5rIHRo
YXQgc29tZXRoaW5nIGlzIHN1cHBvcnRlZCBieSB0aGUgcGFnZQorICAgICAgICBiZWluZyBpbnNw
ZWN0ZWQ6CisgICAgICAgICAtIHRoZSBgQ2FudmFzYCBjb21tYW5kcyBhbmQgZXZlbnRzIHJlbGF0
ZWQgdG8gc2hhZGVyIHByb2dyYW1zL3BpcGVsaW5lcyBzaG91bGQgb25seSBleGlzdAorICAgICAg
ICAgICB3aGVuIHRoZSBjb3JyZXNwb25kaW5nIGNvbnRleHQgdHlwZSBleGlzdHMsIG5hbWVseSBg
RU5BQkxFKFdFQkdMKWAgYW5kIGBFTkFCTEUoV0VCR1BVKWAuCisgICAgICAgICAtIGlPUyBkb2Vz
bid0IHN1cHBvcnQgc2hvd2luZyBydWxlcnMsIHNvIGNyZWF0ZSBhIHZhcmlhbnQgb2YgYERPTS5z
ZXRJbnNwZWN0TW9kZUVuYWJsZWRgCisgICAgICAgICAgIHRoYXQgb25seSBleGlzdHMgZm9yIGBQ
TEFURk9STShJT1NfRkFNSUxZKWAgdGhhdCBkb2Vzbid0IGhhdmUgdGhlIGBzaG93UnVsZXJzYCBv
cHRpb25hbAorICAgICAgICAgICBwYXJhbWV0ZXIsIGFzIHdlbGwgYXMgcmVtb3ZpbmcgYFBhZ2Uu
c2V0U2hvd1J1bGVyc2AgZW50aXJlbHkuCisgICAgICAgICAtIHNldHRpbmcgdGhlIGZvcmNlZCBh
cHBlYXJhbmNlIHNob3VsZCBvbmx5IGJlIHBvc3NpYmxlIGlmIGRhcmsgbW9kZSBpcyBzdXBwb3J0
ZWQuCisgICAgICAgICAtIHdlYiBhcmNoaXZlcyBvbmx5IGV4aXN0IGlmIENGIGlzIHVzZWQuCisK
KyAgICAgICAgKiBpbnNwZWN0b3IvcHJvdG9jb2wvQ1BVUHJvZmlsZXIuanNvbjoKKyAgICAgICAg
KiBpbnNwZWN0b3IvcHJvdG9jb2wvQ2FudmFzLmpzb246CisgICAgICAgICogaW5zcGVjdG9yL3By
b3RvY29sL0RPTS5qc29uOgorICAgICAgICAqIGluc3BlY3Rvci9wcm90b2NvbC9JbmRleGVkREIu
anNvbjoKKyAgICAgICAgKiBpbnNwZWN0b3IvcHJvdG9jb2wvSW5zcGVjdG9yLmpzb246CisgICAg
ICAgICogaW5zcGVjdG9yL3Byb3RvY29sL01lbW9yeS5qc29uOgorICAgICAgICAqIGluc3BlY3Rv
ci9wcm90b2NvbC9QYWdlLmpzb246CisgICAgICAgICogaW5zcGVjdG9yL3Byb3RvY29sL1NlcnZp
Y2VXb3JrZXIuanNvbjoKKworICAgICAgICAqIFNjcmlwdHMvZ2VuZXJhdGUtZGVyaXZlZC1zb3Vy
Y2VzLnNoOgorICAgICAgICBTZXQgYENDYCBpZiBpdCBoYXNuJ3QgYWxyZWFkeSBiZWVuIHNldC4K
KworICAgICAgICAqIERlcml2ZWRTb3VyY2VzLm1ha2U6CisgICAgICAgICogRGVyaXZlZFNvdXJj
ZXMtaW5wdXQueGNmaWxlbGlzdDoKKyAgICAgICAgUHJlcHJvY2VzcyBgSW5zcGVjdG9yQmFja2Vu
ZENvbW1hbmRzLmpzLmluYCB0byBnZXQgYW4gYWNjdXJhdGUgYEluc3BlY3RvckJhY2tlbmRDb21t
YW5kcy5qc2AKKyAgICAgICAgdGhhdCBmb2xsb3dzIHRoZSBsb2dpYy9kZXNjcmlwdGlvbiBhYm92
ZS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICBDcmVhdGUgYSBuZXcgYElu
c3BlY3RvckJhY2tlbmRDb21tYW5kc2AgdGFyZ2V0IG5vdyB0aGF0IGBJbnNwZWN0b3JCYWNrZW5k
Q29tbWFuZHMuanNgIGlzCisgICAgICAgIGdlbmVyYXRlZCBzZXByYXRlbHkgZnJvbSB0aGUgcmVz
dCBvZiB0aGUgcHJvdG9jb2wgZmlsZXMuCisKKyAgICAgICAgKiBDb25maWd1cmF0aW9ucy9GZWF0
dXJlRGVmaW5lcy54Y2NvbmZpZzoKKyAgICAgICAgQWRkIGBFTkFCTEVfV0VCX0FSQ0hJVkVgIHNp
bmNlIGl0J3MgYWx3YXlzIGVuYWJsZWQgaW4gd3RmL1BsYXRmb3JtRW5hYmxlQ29jb2EuaC4KKwor
ICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weToKKyAgICAgICAgKGdlbmVyYXRlX2Zyb21fc3BlY2lmaWNhdGlvbik6CisgICAg
ICAgIChnZW5lcmF0ZV9mcm9tX3NwZWNpZmljYXRpb24ubG9hZF9zcGVjaWZpY2F0aW9uKToKKyAg
ICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRvci5weToKKyAgICAgICAg
KEdlbmVyYXRvci5fX2luaXRfXyk6CisgICAgICAgIChHZW5lcmF0b3IubW9kZWwpOgorICAgICAg
ICAoR2VuZXJhdG9yLnNldF9nZW5lcmF0b3Jfc2V0dGluZyk6CisgICAgICAgIChHZW5lcmF0b3Iu
dHlwZV9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbik6CisgICAgICAgIChHZW5lcmF0b3IuY29tbWFu
ZHNfZm9yX2RvbWFpbik6CisgICAgICAgIChHZW5lcmF0b3IuZXZlbnRzX2Zvcl9kb21haW4pOgor
ICAgICAgICAoR2VuZXJhdG9yLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKTogQWRkZWQu
CisgICAgICAgIChHZW5lcmF0b3IucGxhdGZvcm0pOiBEZWxldGVkLgorICAgICAgICAoR2VuZXJh
dG9yLmNhbl9nZW5lcmF0ZV9wbGF0Zm9ybSk6IERlbGV0ZWQuCisgICAgICAgIChHZW5lcmF0b3Iu
d3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4pOiBEZWxldGVkLgorICAgICAgICAoR2VuZXJhdG9y
LndyYXBfd2l0aF9ndWFyZCk6IERlbGV0ZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9tb2RlbHMucHk6CisgICAgICAgIChGcmFtZXdvcmtzKToKKyAgICAgICAgKFByb3Rv
Y29sLnBhcnNlX2RvbWFpbik6CisgICAgICAgIChQcm90b2NvbC5wYXJzZV90eXBlX2RlY2xhcmF0
aW9uKToKKyAgICAgICAgKFByb3RvY29sLnBhcnNlX2NvbW1hbmQpOgorICAgICAgICAoUHJvdG9j
b2wucGFyc2VfZXZlbnQpOgorICAgICAgICAoRG9tYWluLl9faW5pdF9fKToKKyAgICAgICAgKFR5
cGVEZWNsYXJhdGlvbi5fX2luaXRfXyk6CisgICAgICAgIChDb21tYW5kLl9faW5pdF9fKToKKyAg
ICAgICAgKEV2ZW50Ll9faW5pdF9fKToKKyAgICAgICAgKFBsYXRmb3JtKTogRGVsZXRlZC4KKyAg
ICAgICAgKFBsYXRmb3JtLl9faW5pdF9fKTogRGVsZXRlZC4KKyAgICAgICAgKFBsYXRmb3JtLmZy
b21TdHJpbmcpOiBEZWxldGVkLgorICAgICAgICAoUGxhdGZvcm1zKTogRGVsZXRlZC4KKyAgICAg
ICAgKFBsYXRmb3Jtcy5fX21ldGFjbGFzc19fKTogRGVsZXRlZC4KKyAgICAgICAgKFBsYXRmb3Jt
cy5fX21ldGFjbGFzc19fLl9faXRlcl9fKTogRGVsZXRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRvcl90ZW1wbGF0ZXMucHk6CisgICAgICAgIFJlbW92ZSBg
cGxhdGZvcm1gIGFzIGl0IGlzIGhhbmRsZWQgYnkgYGNvbmRpdGlvbmAuCisKKyAgICAgICAgKiBp
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL3ByZXByb2Nlc3MucGw6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvcHJlcHJvY2Vzc29yLnBtLgorCisgICAgICAgICog
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9qc19iYWNrZW5kX2NvbW1hbmRzLnB5
OgorICAgICAgICAoSlNCYWNrZW5kQ29tbWFuZHNHZW5lcmF0b3Iub3V0cHV0X2ZpbGVuYW1lKToK
KyAgICAgICAgKEpTQmFja2VuZENvbW1hbmRzR2VuZXJhdG9yLmdlbmVyYXRlX2RvbWFpbik6Cisg
ICAgICAgIE91dHB1dCB0byBgSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzLmluYCB0aGF0IGlu
Y2x1ZGVzIGAjaWZgIGZvciBwcmVwcm9jZXNzaW5nLgorCisgICAgICAgICogaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weToKKyAgICAgICAgKiBpbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9hbHRlcm5hdGVfYmFja2VuZF9kaXNw
YXRjaGVyX2hlYWRlci5weToKKyAgICAgICAgKENwcEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVy
SGVhZGVyR2VuZXJhdG9yLmdlbmVyYXRlX291dHB1dCk6CisgICAgICAgIChDcHBBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfaGFuZGxlcl9kZWNsYXJh
dGlvbnNfZm9yX2RvbWFpbik6CisgICAgICAgIChDcHBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hl
ckhlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfaGFuZGxlcl9kZWNsYXJhdGlvbl9mb3JfY29tbWFu
ZCk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFj
a2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVy
SGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9hbHRlcm5hdGVfaGFuZGxlcl9mb3J3YXJkX2RlY2xh
cmF0aW9uc19mb3JfZG9tYWlucy5BbHRlcm5hdGUpOgorICAgICAgICAoQ3BwQmFja2VuZERpc3Bh
dGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX2hhbmRsZXJfZGVjbGFyYXRpb25zX2Zvcl9k
b21haW4pOgorICAgICAgICAoQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dl
bmVyYXRlX2hhbmRsZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQpOgorICAgICAgICAoQ3BwQmFj
a2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX2FzeW5jX2hhbmRsZXJfZGVj
bGFyYXRpb25fZm9yX2NvbW1hbmQpOgorICAgICAgICAoQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFk
ZXJHZW5lcmF0b3IuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4p
OgorICAgICAgICAoQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRl
X2Rpc3BhdGNoZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQpOgorICAgICAgICAqIGluc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1l
bnRhdGlvbi5weToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25H
ZW5lcmF0b3IuZ2VuZXJhdGVfb3V0cHV0KToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVy
SW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2hhbmRsZXJfY2xhc3NfZGVzdHJ1Y3Rv
cl9mb3JfZG9tYWluKToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRp
b25HZW5lcmF0b3IuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25zX2Zvcl9kb21h
aW4pOgorICAgICAgICAoQ3BwQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRv
ci5fZ2VuZXJhdGVfc21hbGxfZGlzcGF0Y2hlcl9zd2l0Y2hfaW1wbGVtZW50YXRpb25fZm9yX2Rv
bWFpbik6CisgICAgICAgIChDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJh
dG9yLl9nZW5lcmF0ZV9sYXJnZV9kaXNwYXRjaGVyX3N3aXRjaF9pbXBsZW1lbnRhdGlvbl9mb3Jf
ZG9tYWluKToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5l
cmF0b3IuX2dlbmVyYXRlX2FzeW5jX2Rpc3BhdGNoZXJfY2xhc3NfZm9yX2RvbWFpbik6CisgICAg
ICAgIChDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0
ZV9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uX2Zvcl9jb21tYW5kKToKKyAgICAgICAgKiBpbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2hl
YWRlci5weToKKyAgICAgICAgKENwcEZyb250ZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5f
Z2VuZXJhdGVfZGlzcGF0Y2hlcl9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbik6CisgICAgICAgIChD
cHBGcm9udGVuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX2Rpc3BhdGNoZXJf
ZGVjbGFyYXRpb25fZm9yX2V2ZW50KToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5Ogor
ICAgICAgICAoQ3BwRnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dl
bmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25zX2Zvcl9kb21haW4pOgorICAgICAgICAo
Q3BwRnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2Rp
c3BhdGNoZXJfaW1wbGVtZW50YXRpb25fZm9yX2V2ZW50KToKKyAgICAgICAgKiBpbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19oZWFkZXIucHk6Cisg
ICAgICAgIChDcHBQcm90b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV92ZXJzaW9u
cyk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJv
dG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHk6CisgICAgICAgIChDcHBQcm90b2NvbFR5cGVz
SW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2VudW1fY29udmVyc2lvbl9tZXRob2Rz
X2Zvcl9kb21haW4uZ2VuZXJhdGVfY29udmVyc2lvbl9tZXRob2RfYm9keSk6CisgICAgICAgIChD
cHBQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2VudW1fY29u
dmVyc2lvbl9tZXRob2RzX2Zvcl9kb21haW4pOgorICAgICAgICAoQ3BwUHJvdG9jb2xUeXBlc0lt
cGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9vcGVuX2ZpZWxkX25hbWVzKToKKyAgICAg
ICAgKENwcFByb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfYnVp
bGRlcnNfZm9yX2RvbWFpbik6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9v
YmpjX2dlbmVyYXRvcl90ZW1wbGF0ZXMucHk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9nZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHk6CisgICAg
ICAgIChPYmpDQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX29iamNf
aGFuZGxlcl9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbik6CisgICAgICAgIChPYmpDQmFja2VuZERp
c3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX29iamNfaGFuZGxlcl9kZWNsYXJhdGlv
bl9mb3JfY29tbWFuZCk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weToKKyAgICAgICAg
KE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9o
YW5kbGVyX2ltcGxlbWVudGF0aW9uX2Zvcl9kb21haW4pOgorICAgICAgICAoT2JqQ0JhY2tlbmRE
aXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2hhbmRsZXJfaW1wbGVt
ZW50YXRpb25fZm9yX2NvbW1hbmQpOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVn
ZW4vZ2VuZXJhdGVfb2JqY19oZWFkZXIucHk6CisgICAgICAgIChhZGRfbmV3bGluZSk6CisgICAg
ICAgIChPYmpDSGVhZGVyR2VuZXJhdG9yLmdlbmVyYXRlX291dHB1dCk6CisgICAgICAgIChPYmpD
SGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9mb3J3YXJkX2RlY2xhcmF0aW9ucyk6CisgICAgICAg
IChPYmpDSGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9lbnVtcyk6CisgICAgICAgIChPYmpDSGVh
ZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV90eXBlcyk6CisgICAgICAgIChPYmpDSGVhZGVyR2VuZXJh
dG9yLl9nZW5lcmF0ZV90eXBlX2ludGVyZmFjZSk6CisgICAgICAgIChPYmpDSGVhZGVyR2VuZXJh
dG9yLl9nZW5lcmF0ZV9jb21tYW5kX3Byb3RvY29scyk6CisgICAgICAgIChPYmpDSGVhZGVyR2Vu
ZXJhdG9yLl9nZW5lcmF0ZV9zaW5nbGVfY29tbWFuZF9wcm90b2NvbCk6CisgICAgICAgIChPYmpD
SGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9ldmVudF9pbnRlcmZhY2VzKToKKyAgICAgICAgKE9i
akNIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX3NpbmdsZV9ldmVudF9pbnRlcmZhY2UpOgorICAg
ICAgICAoT2JqQ0hlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfZW51bV9mb3JfcGxhdGZvcm1zKTog
RGVsZXRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29i
amNfcHJvdG9jb2xfdHlwZV9jb252ZXJzaW9uc19oZWFkZXIucHk6CisgICAgICAgIChhZGRfbmV3
bGluZSk6CisgICAgICAgIChPYmpDUHJvdG9jb2xUeXBlQ29udmVyc2lvbnNIZWFkZXJHZW5lcmF0
b3IuZ2VuZXJhdGVfb3V0cHV0KToKKyAgICAgICAgKE9iakNQcm90b2NvbFR5cGVDb252ZXJzaW9u
c0hlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfZW51bV9jb252ZXJzaW9uX2Z1bmN0aW9ucyk6Cisg
ICAgICAgIChPYmpDUHJvdG9jb2xUeXBlQ29udmVyc2lvbnNIZWFkZXJHZW5lcmF0b3IuX2dlbmVy
YXRlX2VudW1fY29udmVyc2lvbl9mb3JfcGxhdGZvcm1zKTogRGVsZXRlZC4KKyAgICAgICAgKiBp
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfcHJvdG9jb2xfdHlwZV9jb252
ZXJzaW9uc19pbXBsZW1lbnRhdGlvbi5weToKKyAgICAgICAgKGFkZF9uZXdsaW5lKToKKyAgICAg
ICAgKE9iakNQcm90b2NvbFR5cGVDb252ZXJzaW9uc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9n
ZW5lcmF0ZV90eXBlX2ZhY3RvcnlfY2F0ZWdvcnlfaW50ZXJmYWNlKToKKyAgICAgICAgKE9iakNQ
cm90b2NvbFR5cGVDb252ZXJzaW9uc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV90
eXBlX2ZhY3RvcnlfbWV0aG9kX2RlY2xhcmF0aW9uKToKKyAgICAgICAgKE9iakNQcm90b2NvbFR5
cGVDb252ZXJzaW9uc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV90eXBlX2ZhY3Rv
cnlfY2F0ZWdvcnlfaW1wbGVtZW50YXRpb24pOgorICAgICAgICAoT2JqQ1Byb3RvY29sVHlwZUNv
bnZlcnNpb25zSW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX3R5cGVfZmFjdG9yeV9t
ZXRob2RfaW1wbGVtZW50YXRpb24pOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVn
ZW4vZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weToKKyAgICAg
ICAgKGFkZF9uZXdsaW5lKToKKyAgICAgICAgKE9iakNQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRp
b25HZW5lcmF0b3IuZ2VuZXJhdGVfdHlwZV9pbXBsZW1lbnRhdGlvbnMpOgorICAgICAgICAoT2Jq
Q1Byb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5nZW5lcmF0ZV90eXBlX2ltcGxl
bWVudGF0aW9uKToKKyAgICAgICAgV3JhcCBlYWNoIGRvbWFpbiwgdHlwZSwgY29tbWFuZCwgYW5k
IGV2ZW50IHdpdGggdGhlIGFzc29jaWF0ZWQgYGNvbmRpdGlvbmAgKGlmIGl0IGV4aXN0cykuCisK
KyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9jb21tYW5kLXRhcmdldFR5cGUtbWF0
Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb246IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9jb21tYW5kLXRhcmdl
dFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24uCisgICAgICAgICogaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbjog
UmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9nZW5lcmljL2NvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24uCisgICAgICAgICog
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVy
bi1wYXJhbWV0ZXJzLmpzb246IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwt
cmV0dXJuLXBhcmFtZXRlcnMuanNvbi4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uOiBSZW5hbWVkIGZyb20gU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL21hYy9kZWZpbml0aW9ucy13
aXRoLW1hYy1wbGF0Zm9ybS5qc29uLgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2RvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbjogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2RvbWFpbi1kZWJ1Z2dhYmxl
VHlwZXMuanNvbi4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9kb21haW4tdGFy
Z2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbjogUmVuYW1lZCBmcm9t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2Rv
bWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLgorICAg
ICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2RvbWFpbi10YXJnZXRUeXBlcy5qc29uOiBS
ZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvZG9tYWluLXRhcmdldFR5cGVzLmpzb24uCisgICAgICAgICogaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uOiBSZW5h
bWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uLgorICAgICAgICAq
IGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2VudW0tdmFsdWVzLmpzb246IFJlbmFtZWQgZnJvbSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9lbnVt
LXZhbHVlcy5qc29uLgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V2ZW50LXRh
cmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb246IFJlbmFtZWQgZnJv
bSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9l
dmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLgorICAg
ICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFt
ZXRlcnMuanNvbjogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9nZW5lcmljL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNv
bi4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kLXRh
cmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tcmVzdWx0OiBSZW5h
bWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvZXhwZWN0ZWQvY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dh
YmxlVHlwZS5qc29uLXJlc3VsdC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uLXJlc3VsdDogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmljL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24tcmVzdWx0Lgor
ICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgt
b3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uLXJlc3VsdDogUmVuYW1lZCBmcm9t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4
cGVjdGVkL2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29u
LXJlc3VsdC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kZWZp
bml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uLXJlc3VsdDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9tYWMvZXhwZWN0ZWQvZGVm
aW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbi1yZXN1bHQuCisgICAgICAgICogaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uLXJl
c3VsdDogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2RvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbi1yZXN1
bHQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWluLXRh
cmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tcmVzdWx0OiBSZW5h
bWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvZXhwZWN0ZWQvZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2Fi
bGVUeXBlLmpzb24tcmVzdWx0LgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4
cGVjdGVkL2RvbWFpbi10YXJnZXRUeXBlcy5qc29uLXJlc3VsdDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVk
L2RvbWFpbi10YXJnZXRUeXBlcy5qc29uLXJlc3VsdC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpz
b24tcmVzdWx0OiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFu
ZC1zaXplcy5qc29uLXJlc3VsdC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC9lbnVtLXZhbHVlcy5qc29uLXJlc3VsdDogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2VudW0t
dmFsdWVzLmpzb24tcmVzdWx0LgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4
cGVjdGVkL2V2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpz
b24tcmVzdWx0OiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1k
b21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1yZXN1bHQuCisgICAgICAgICogaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29u
LXJlc3VsdDogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRl
cnMuanNvbi1yZXN1bHQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvZmFpbC1vbi1jb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVU
eXBlLmpzb24tZXJyb3I6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0
VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1lcnJvci4KKyAgICAgICAg
KiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0
VHlwZXMtdHlwZS5qc29uLWVycm9yOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1jb21tYW5k
LXRhcmdldFR5cGVzLXR5cGUuanNvbi1lcnJvci4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlwZXMtdmFsdWUuanNvbi1l
cnJvcjogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tY29tbWFuZC10YXJnZXRUeXBlcy12YWx1
ZS5qc29uLWVycm9yLgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVk
L2ZhaWwtb24tZG9tYWluLWRlYnVnZ2FibGVUeXBlcy10eXBlLmpzb24tZXJyb3I6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJp
Yy9leHBlY3RlZC9mYWlsLW9uLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMtdHlwZS5qc29uLWVycm9y
LgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZG9t
YWluLWRlYnVnZ2FibGVUeXBlcy12YWx1ZS5qc29uLWVycm9yOiBSZW5hbWVkIGZyb20gU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQv
ZmFpbC1vbi1kb21haW4tZGVidWdnYWJsZVR5cGVzLXZhbHVlLmpzb24tZXJyb3IuCisgICAgICAg
ICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4tdGFyZ2V0
VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1lcnJvcjogUmVuYW1lZCBm
cm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2V4cGVjdGVkL2ZhaWwtb24tZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVn
Z2FibGVUeXBlLmpzb24tZXJyb3IuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZXMtdHlwZS5qc29uLWVycm9yOiBSZW5h
bWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZXMtdHlwZS5qc29uLWVycm9y
LgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZG9t
YWluLXRhcmdldFR5cGVzLXZhbHVlLmpzb24tZXJyb3I6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWls
LW9uLWRvbWFpbi10YXJnZXRUeXBlcy12YWx1ZS5qc29uLWVycm9yLgorICAgICAgICAqIGluc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLWNvbW1hbmQtY2Fs
bC1wYXJhbWV0ZXItbmFtZXMuanNvbi1lcnJvcjogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24t
ZHVwbGljYXRlLWNvbW1hbmQtY2FsbC1wYXJhbWV0ZXItbmFtZXMuanNvbi1lcnJvci4KKyAgICAg
ICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS1j
b21tYW5kLXJldHVybi1wYXJhbWV0ZXItbmFtZXMuanNvbi1lcnJvcjogUmVuYW1lZCBmcm9tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVj
dGVkL2ZhaWwtb24tZHVwbGljYXRlLWNvbW1hbmQtcmV0dXJuLXBhcmFtZXRlci1uYW1lcy5qc29u
LWVycm9yLgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwt
b24tZHVwbGljYXRlLWV2ZW50LXBhcmFtZXRlci1uYW1lcy5qc29uLWVycm9yOiBSZW5hbWVkIGZy
b20gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMv
ZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtZXZlbnQtcGFyYW1ldGVyLW5hbWVzLmpzb24tZXJy
b3IuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1k
dXBsaWNhdGUtdHlwZS1kZWNsYXJhdGlvbnMuanNvbi1lcnJvcjogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVk
L2ZhaWwtb24tZHVwbGljYXRlLXR5cGUtZGVjbGFyYXRpb25zLmpzb24tZXJyb3IuCisgICAgICAg
ICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtdHlw
ZS1tZW1iZXItbmFtZXMuanNvbi1lcnJvcjogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZHVw
bGljYXRlLXR5cGUtbWVtYmVyLW5hbWVzLmpzb24tZXJyb3IuCisgICAgICAgICogaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1lbnVtLXdpdGgtbm8tdmFsdWVzLmpzb24t
ZXJyb3I6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWVudW0td2l0aC1uby12YWx1ZXMuanNv
bi1lcnJvci4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWls
LW9uLWV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24t
ZXJyb3I6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGUtbWF0Y2hp
bmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tZXJyb3IuCisgICAgICAgICogaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1ldmVudC10YXJnZXRUeXBlcy10eXBlLmpz
b24tZXJyb3I6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGVzLXR5
cGUuanNvbi1lcnJvci4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGVzLXZhbHVlLmpzb24tZXJyb3I6IFJlbmFtZWQgZnJv
bSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9l
eHBlY3RlZC9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGVzLXZhbHVlLmpzb24tZXJyb3IuCisgICAg
ICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1udW1iZXItdHlw
ZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbi1lcnJvcjogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVk
L2ZhaWwtb24tbnVtYmVyLXR5cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24tZXJyb3Iu
CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1udW1i
ZXItdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNvbi1lcnJvcjogUmVuYW1lZCBmcm9tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVj
dGVkL2ZhaWwtb24tbnVtYmVyLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24tZXJyb3Iu
CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1zdHJp
bmctdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbi1lcnJvcjogUmVuYW1lZCBmcm9t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4
cGVjdGVkL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24t
ZXJyb3IuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1v
bi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNvbi1lcnJvcjogUmVuYW1lZCBm
cm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2V4cGVjdGVkL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24t
ZXJyb3IuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1v
bi10eXBlLWRlY2xhcmF0aW9uLXVzaW5nLXR5cGUtcmVmZXJlbmNlLmpzb24tZXJyb3I6IFJlbmFt
ZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2Vu
ZXJpYy9leHBlY3RlZC9mYWlsLW9uLXR5cGUtZGVjbGFyYXRpb24tdXNpbmctdHlwZS1yZWZlcmVu
Y2UuanNvbi1lcnJvci4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC9mYWlsLW9uLXR5cGUtcmVmZXJlbmNlLWFzLXByaW1pdGl2ZS10eXBlLmpzb24tZXJyb3I6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXR5cGUtcmVmZXJlbmNlLWFzLXByaW1pdGl2ZS10eXBl
Lmpzb24tZXJyb3IuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
ZmFpbC1vbi10eXBlLXdpdGgtbG93ZXJjYXNlLW5hbWUuanNvbi1lcnJvcjogUmVuYW1lZCBmcm9t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4
cGVjdGVkL2ZhaWwtb24tdHlwZS13aXRoLWxvd2VyY2FzZS1uYW1lLmpzb24tZXJyb3IuCisgICAg
ICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi11bmtub3duLXR5
cGUtcmVmZXJlbmNlLWluLXR5cGUtZGVjbGFyYXRpb24uanNvbi1lcnJvcjogUmVuYW1lZCBmcm9t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4
cGVjdGVkL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLWRlY2xhcmF0aW9u
Lmpzb24tZXJyb3IuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
ZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtbWVtYmVyLmpzb24tZXJyb3I6
IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlw
ZS1tZW1iZXIuanNvbi1lcnJvci4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC9nZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbi1yZXN1bHQ6
IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZ2VuZXJpYy9leHBlY3RlZC9nZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMu
anNvbi1yZXN1bHQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
c2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbi1yZXN1bHQ6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBl
Y3RlZC9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uLXJlc3VsdC4KKyAgICAgICAg
KiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zaGFkb3dlZC1vcHRpb25hbC10eXBl
LXNldHRlcnMuanNvbi1yZXN1bHQ6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9zaGFkb3dlZC1vcHRpb25h
bC10eXBlLXNldHRlcnMuanNvbi1yZXN1bHQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24tcmVzdWx0OiBSZW5hbWVk
IGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVy
aWMvZXhwZWN0ZWQvc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24tcmVzdWx0LgorICAgICAgICAq
IGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNl
ZC1wcmltaXRpdmUtdHlwZS5qc29uLXJlc3VsdDogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtZGVj
bGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uLXJlc3VsdC4KKyAgICAgICAgKiBp
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5
cGUuanNvbi1yZXN1bHQ6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFycmF5
LXR5cGUuanNvbi1yZXN1bHQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbi1yZXN1bHQ6IFJlbmFtZWQgZnJv
bSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9l
eHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uLXJlc3VsdC4KKyAgICAgICAg
KiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLW9iamVj
dC10eXBlLmpzb24tcmVzdWx0OiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1v
YmplY3QtdHlwZS5qc29uLXJlc3VsdC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9leHBlY3RlZC90eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24tcmVzdWx0OiBSZW5h
bWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvZXhwZWN0ZWQvdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uLXJlc3VsdC4K
KyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLXdpdGgtb3Bl
bi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0OiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvdHlwZS13aXRoLW9w
ZW4tcGFyYW1ldGVycy5qc29uLXJlc3VsdC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC92ZXJzaW9uLmpzb24tcmVzdWx0OiBSZW5hbWVkIGZyb20gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvdmVy
c2lvbi5qc29uLXJlc3VsdC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWls
LW9uLWNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNv
bjogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9nZW5lcmljL2ZhaWwtb24tY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1k
ZWJ1Z2dhYmxlVHlwZS5qc29uLgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2Zh
aWwtb24tY29tbWFuZC10YXJnZXRUeXBlcy10eXBlLmpzb246IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWNv
bW1hbmQtdGFyZ2V0VHlwZXMtdHlwZS5qc29uLgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2ZhaWwtb24tY29tbWFuZC10YXJnZXRUeXBlcy12YWx1ZS5qc29uOiBSZW5hbWVkIGZy
b20gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMv
ZmFpbC1vbi1jb21tYW5kLXRhcmdldFR5cGVzLXZhbHVlLmpzb24uCisgICAgICAgICogaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kb21haW4tZGVidWdnYWJsZVR5cGVzLXR5cGUuanNv
bjogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9nZW5lcmljL2ZhaWwtb24tZG9tYWluLWRlYnVnZ2FibGVUeXBlcy10eXBlLmpzb24uCisg
ICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kb21haW4tZGVidWdnYWJs
ZVR5cGVzLXZhbHVlLmpzb246IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWRvbWFpbi1kZWJ1Z2dhYmxlVHlw
ZXMtdmFsdWUuanNvbi4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9u
LWRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uOiBS
ZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdn
YWJsZVR5cGUuanNvbi4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9u
LWRvbWFpbi10YXJnZXRUeXBlcy10eXBlLmpzb246IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWRvbWFpbi10
YXJnZXRUeXBlcy10eXBlLmpzb24uCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZXMtdmFsdWUuanNvbjogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24t
ZG9tYWluLXRhcmdldFR5cGVzLXZhbHVlLmpzb24uCisgICAgICAgICogaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1jYWxsLXBhcmFtZXRlci1uYW1lcy5q
c29uOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1jYWxsLXBhcmFtZXRlci1u
YW1lcy5qc29uLgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZHVw
bGljYXRlLWNvbW1hbmQtcmV0dXJuLXBhcmFtZXRlci1uYW1lcy5qc29uOiBSZW5hbWVkIGZyb20g
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFp
bC1vbi1kdXBsaWNhdGUtY29tbWFuZC1yZXR1cm4tcGFyYW1ldGVyLW5hbWVzLmpzb24uCisgICAg
ICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kdXBsaWNhdGUtZXZlbnQtcGFy
YW1ldGVyLW5hbWVzLmpzb246IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWR1cGxpY2F0ZS1ldmVudC1wYXJh
bWV0ZXItbmFtZXMuanNvbi4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWls
LW9uLWR1cGxpY2F0ZS10eXBlLWRlY2xhcmF0aW9ucy5qc29uOiBSZW5hbWVkIGZyb20gU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1k
dXBsaWNhdGUtdHlwZS1kZWNsYXJhdGlvbnMuanNvbi4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLW1lbWJlci1uYW1lcy5qc29uOiBSZW5h
bWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1tZW1iZXItbmFtZXMuanNvbi4KKyAgICAgICAg
KiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWVudW0td2l0aC1uby12YWx1ZXMuanNv
bjogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9nZW5lcmljL2ZhaWwtb24tZW51bS13aXRoLW5vLXZhbHVlcy5qc29uLgorICAgICAgICAq
IGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGlu
Zy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbjogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZXZlbnQtdGFy
Z2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi4KKyAgICAgICAgKiBp
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGVzLXR5cGUuanNv
bjogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9nZW5lcmljL2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlwZXMtdHlwZS5qc29uLgorICAgICAg
ICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlwZXMtdmFs
dWUuanNvbjogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlwZXMtdmFsdWUuanNvbi4K
KyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLW51bWJlci10eXBlZC1v
cHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29uOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1udW1iZXItdHlw
ZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbi4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29u
OiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2dlbmVyaWMvZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNv
bi4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXN0cmluZy10eXBl
ZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29uOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1zdHJpbmct
dHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbi4KKyAgICAgICAgKiBpbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9mYWlsLW9uLXN0cmluZy10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5q
c29uOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIu
anNvbi4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXR5cGUtZGVj
bGFyYXRpb24tdXNpbmctdHlwZS1yZWZlcmVuY2UuanNvbjogUmVuYW1lZCBmcm9tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tdHlw
ZS1kZWNsYXJhdGlvbi11c2luZy10eXBlLXJlZmVyZW5jZS5qc29uLgorICAgICAgICAqIGluc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdHlwZS1yZWZlcmVuY2UtYXMtcHJpbWl0aXZlLXR5
cGUuanNvbjogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tdHlwZS1yZWZlcmVuY2UtYXMtcHJpbWl0aXZlLXR5
cGUuanNvbi4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXR5cGUt
d2l0aC1sb3dlcmNhc2UtbmFtZS5qc29uOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi10eXBlLXdpdGgtbG93
ZXJjYXNlLW5hbWUuanNvbi4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWls
LW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1kZWNsYXJhdGlvbi5qc29uOiBSZW5h
bWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtZGVjbGFyYXRpb24u
anNvbi4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXVua25vd24t
dHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1tZW1iZXIuanNvbjogUmVuYW1lZCBmcm9tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tdW5r
bm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLW1lbWJlci5qc29uLgorICAgICAgICAqIGluc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5q
c29uOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24u
CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvc2FtZS10eXBlLWlkLWRpZmZlcmVu
dC1kb21haW4uanNvbjogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL3NhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpz
b24uCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvc2hhZG93ZWQtb3B0aW9uYWwt
dHlwZS1zZXR0ZXJzLmpzb246IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9zaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRl
cnMuanNvbi4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9zaG91bGQtc3RyaXAt
Y29tbWVudHMuanNvbjogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL3Nob3VsZC1zdHJpcC1jb21tZW50cy5qc29uLgorICAg
ICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1w
cmltaXRpdmUtdHlwZS5qc29uOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXBy
aW1pdGl2ZS10eXBlLmpzb24uCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlw
ZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb246IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy90eXBlLWRlY2xhcmF0aW9u
LWFycmF5LXR5cGUuanNvbi4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBl
LWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvdHlwZS1kZWNsYXJhdGlvbi1l
bnVtLXR5cGUuanNvbi4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLWRl
Y2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb246IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy90eXBlLWRlY2xhcmF0aW9uLW9i
amVjdC10eXBlLmpzb24uCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1y
ZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvdHlwZS1yZXF1aXJpbmctcnVu
dGltZS1jYXN0cy5qc29uLgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUt
d2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbjogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL3R5cGUtd2l0aC1vcGVuLXBhcmFt
ZXRlcnMuanNvbi4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy92ZXJzaW9uLmpz
b246IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy92ZXJzaW9uLmpzb24uCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uOiBSZW1vdmVk
LgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZGVm
aW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbi1yZXN1bHQ6IFJlbW92ZWQuCisgICAgICAg
ICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWNvbW1hbmQtd2l0aC1p
bnZhbGlkLXBsYXRmb3JtLmpzb246IFJlbW92ZWQuCisgICAgICAgICogaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWNvbW1hbmQtd2l0aC1pbnZhbGlkLXBs
YXRmb3JtLmpzb24tZXJyb3I6IFJlbW92ZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy9mYWlsLW9uLXR5cGUtd2l0aC1pbnZhbGlkLXBsYXRmb3JtLmpzb246IFJl
bW92ZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3Rl
ZC9mYWlsLW9uLXR5cGUtd2l0aC1pbnZhbGlkLXBsYXRmb3JtLmpzb24tZXJyb3I6IFJlbW92ZWQu
CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvaW9zL2RlZmluaXRpb25zLXdpdGgt
bWFjLXBsYXRmb3JtLmpzb246IFJlbW92ZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvaW9zL2V4cGVjdGVkL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24tcmVz
dWx0OiBSZW1vdmVkLgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2FsbC9kZWZp
bml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uOiBSZW1vdmVkLgorICAgICAgICAqIGluc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2FsbC9leHBlY3RlZC9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0
Zm9ybS5qc29uLXJlc3VsdDogUmVtb3ZlZC4KKyAgICAgICAgRG9uJ3Qgc2VwYXJhdGUgdGhlIGlu
c3BlY3RvciBnZW5lcmF0b3IgdGVzdHMgYnkgcGxhdGZvcm0uCisKIDIwMjAtMDUtMjEgIFJvYmlu
IE1vcmlzc2V0ICA8cm1vcmlzc2V0QGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgQXNzZW1i
bGVyQnVmZmVyV2l0aENvbnN0YW50UG9vbC5oIChhcyBpdCBoYXMgYmVlbiBkZWFkIGZvciB5ZWFy
cykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwppbmRleCBlZDYxMmRiMjMwZDEyNjBhNzU1YWJlYzM4ZTg4ODIwMGQxYzhlMjc5
Li4xMWUyNThhNWRlMGJkMzM1ZTVjYjY3MTJkNThiMmM3ZTFhNTIxYjZmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsNTEgQEAKKzIwMjAtMDUtMjEgIERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUu
Y29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IHJlcGxhY2UgYGZlYXR1cmVHdWFyZGAgYW5k
IGBhdmFpbGFiaWxpdHlgIHdpdGggYSBjb21iaW5lZCBgY29uZGl0aW9uYCB0aGF0IGFjY2VwdHMg
YW55IG1hY3JvCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMTAwMTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBQcmV2aW91c2x5LCB0aGUgZ2VuZXJhdGVkIEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcyB3
b3VsZCBpbmNsdWRlIGNvZGUgZm9yIHRoaW5ncyB0aGF0IHRoZQorICAgICAgICBiYWNrZW5kIGRv
ZXNuJ3QgYWN0dWFsbHkgc3VwcG9ydC4gQnkgdXNpbmcgYWN0dWFsIG1hY3JvcyBhbmQgcHJlcHJv
Y2Vzc2luZyB0aGF0IGZpbGUsIHdlIGNhbgorICAgICAgICBlbnN1cmUgdGhhdCB0aGUgZnJvbnRl
bmQgZG9lc24ndCBpbmNvcnJlY3RseSB0aGluayB0aGF0IHNvbWV0aGluZyBpcyBzdXBwb3J0ZWQg
YnkgdGhlIHBhZ2UKKyAgICAgICAgYmVpbmcgaW5zcGVjdGVkOgorICAgICAgICAgLSB0aGUgYENh
bnZhc2AgY29tbWFuZHMgYW5kIGV2ZW50cyByZWxhdGVkIHRvIHNoYWRlciBwcm9ncmFtcy9waXBl
bGluZXMgc2hvdWxkIG9ubHkgZXhpc3QKKyAgICAgICAgICAgd2hlbiB0aGUgY29ycmVzcG9uZGlu
ZyBjb250ZXh0IHR5cGUgZXhpc3RzLCBuYW1lbHkgYEVOQUJMRShXRUJHTClgIGFuZCBgRU5BQkxF
KFdFQkdQVSlgLgorICAgICAgICAgLSBpT1MgZG9lc24ndCBzdXBwb3J0IHNob3dpbmcgcnVsZXJz
LCBzbyBjcmVhdGUgYSB2YXJpYW50IG9mIGBET00uc2V0SW5zcGVjdE1vZGVFbmFibGVkYAorICAg
ICAgICAgICB0aGF0IG9ubHkgZXhpc3RzIGZvciBgUExBVEZPUk0oSU9TX0ZBTUlMWSlgIHRoYXQg
ZG9lc24ndCBoYXZlIHRoZSBgc2hvd1J1bGVyc2Agb3B0aW9uYWwKKyAgICAgICAgICAgcGFyYW1l
dGVyLCBhcyB3ZWxsIGFzIHJlbW92aW5nIGBQYWdlLnNldFNob3dSdWxlcnNgIGVudGlyZWx5Lgor
ICAgICAgICAgLSBzZXR0aW5nIHRoZSBmb3JjZWQgYXBwZWFyYW5jZSBzaG91bGQgb25seSBiZSBw
b3NzaWJsZSBpZiBkYXJrIG1vZGUgaXMgc3VwcG9ydGVkLgorICAgICAgICAgLSB3ZWIgYXJjaGl2
ZXMgb25seSBleGlzdCBpZiBDRiBpcyB1c2VkLgorCisgICAgICAgICogaW5zcGVjdG9yL0luc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbi5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JJbnN0
cnVtZW50YXRpb24uY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ2Fu
dmFzQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNhbnZhc0Fn
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50OjpJbnNwZWN0
b3JDYW52YXNBZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDYW52YXNBZ2VudDo6
ZW5hYmxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50OjpzdGFydFJl
Y29yZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDYW52YXNBZ2VudDo6cmVzZXQp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnVuYmluZENhbnZhcyk6
CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclNoYWRlclByb2dyYW0uaDoKKyAgICAgICAg
KiBpbnNwZWN0b3IvSW5zcGVjdG9yU2hhZGVyUHJvZ3JhbS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JTaGFkZXJQcm9ncmFtOjpyZXF1ZXN0U2hhZGVyU291cmNlKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvclNoYWRlclByb2dyYW06OnVwZGF0ZVNoYWRlcik6CisgICAgICAg
ICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5oOgorICAgICAgICAqIGluc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yRE9NQWdlbnQ6OnNldEluc3BlY3RNb2RlRW5hYmxlZCk6CisgICAgICAgICogaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JQYWdlQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdl
bnRzL0luc3BlY3RvclBhZ2VBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQ
YWdlQWdlbnQ6OmVuYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6
OmRpc2FibGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpzZXRGb3Jj
ZWRBcHBlYXJhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclBhZ2VBZ2VudDo6YXJj
aGl2ZSk6CisKKyAgICAgICAgKiBDb25maWd1cmF0aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZp
ZzoKKyAgICAgICAgQWRkIGBFTkFCTEVfV0VCX0FSQ0hJVkVgIHNpbmNlIGl0J3MgYWx3YXlzIGVu
YWJsZWQgaW4gd3RmL1BsYXRmb3JtRW5hYmxlQ29jb2EuaC4KKworICAgICAgICAqIGluc3BlY3Rv
ci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuaWRsOgorICAgICAgICBEcml2ZS1ieTogcmVwbGFjZSB0
aGUgYCNpZmAgd2l0aCB0aGUgSURMIGBbQ29uZGl0aW9uYWw9XWAuCisKIDIwMjAtMDUtMjEgIFBl
bmcgTGl1ICA8cGVuZy5saXU2QGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggaXNzdWVzIG9mIHRo
ZSBQaWN0dXJlLWluLVBpY3R1cmUgQVBJIHVuZGVyIHN0cmVzcyB0ZXN0cwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VM
b2cKaW5kZXggMGNlNWJiNmNmZmVkYWM2MWUwYzE2OWVjYTYyODcwNTNjODFhM2RlZS4uYTBiOGMz
MWYxMjlmYTg5YTNkNDBkNGNjZmVlNmQxNGJjZWYxZGE0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvUEFML0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMjUgQEAKKzIwMjAtMDUtMjEgIERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUu
Y29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IHJlcGxhY2UgYGZlYXR1cmVHdWFyZGAgYW5k
IGBhdmFpbGFiaWxpdHlgIHdpdGggYSBjb21iaW5lZCBgY29uZGl0aW9uYCB0aGF0IGFjY2VwdHMg
YW55IG1hY3JvCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMTAwMTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBQcmV2aW91c2x5LCB0aGUgZ2VuZXJhdGVkIEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcyB3
b3VsZCBpbmNsdWRlIGNvZGUgZm9yIHRoaW5ncyB0aGF0IHRoZQorICAgICAgICBiYWNrZW5kIGRv
ZXNuJ3QgYWN0dWFsbHkgc3VwcG9ydC4gQnkgdXNpbmcgYWN0dWFsIG1hY3JvcyBhbmQgcHJlcHJv
Y2Vzc2luZyB0aGF0IGZpbGUsIHdlIGNhbgorICAgICAgICBlbnN1cmUgdGhhdCB0aGUgZnJvbnRl
bmQgZG9lc24ndCBpbmNvcnJlY3RseSB0aGluayB0aGF0IHNvbWV0aGluZyBpcyBzdXBwb3J0ZWQg
YnkgdGhlIHBhZ2UKKyAgICAgICAgYmVpbmcgaW5zcGVjdGVkOgorICAgICAgICAgLSB0aGUgYENh
bnZhc2AgY29tbWFuZHMgYW5kIGV2ZW50cyByZWxhdGVkIHRvIHNoYWRlciBwcm9ncmFtcy9waXBl
bGluZXMgc2hvdWxkIG9ubHkgZXhpc3QKKyAgICAgICAgICAgd2hlbiB0aGUgY29ycmVzcG9uZGlu
ZyBjb250ZXh0IHR5cGUgZXhpc3RzLCBuYW1lbHkgYEVOQUJMRShXRUJHTClgIGFuZCBgRU5BQkxF
KFdFQkdQVSlgLgorICAgICAgICAgLSBpT1MgZG9lc24ndCBzdXBwb3J0IHNob3dpbmcgcnVsZXJz
LCBzbyBjcmVhdGUgYSB2YXJpYW50IG9mIGBET00uc2V0SW5zcGVjdE1vZGVFbmFibGVkYAorICAg
ICAgICAgICB0aGF0IG9ubHkgZXhpc3RzIGZvciBgUExBVEZPUk0oSU9TX0ZBTUlMWSlgIHRoYXQg
ZG9lc24ndCBoYXZlIHRoZSBgc2hvd1J1bGVyc2Agb3B0aW9uYWwKKyAgICAgICAgICAgcGFyYW1l
dGVyLCBhcyB3ZWxsIGFzIHJlbW92aW5nIGBQYWdlLnNldFNob3dSdWxlcnNgIGVudGlyZWx5Lgor
ICAgICAgICAgLSBzZXR0aW5nIHRoZSBmb3JjZWQgYXBwZWFyYW5jZSBzaG91bGQgb25seSBiZSBw
b3NzaWJsZSBpZiBkYXJrIG1vZGUgaXMgc3VwcG9ydGVkLgorICAgICAgICAgLSB3ZWIgYXJjaGl2
ZXMgb25seSBleGlzdCBpZiBDRiBpcyB1c2VkLgorCisgICAgICAgICogQ29uZmlndXJhdGlvbnMv
RmVhdHVyZURlZmluZXMueGNjb25maWc6CisgICAgICAgIEFkZCBgRU5BQkxFX1dFQl9BUkNISVZF
YCBzaW5jZSBpdCdzIGFsd2F5cyBlbmFibGVkIGluIHd0Zi9QbGF0Zm9ybUVuYWJsZUNvY29hLmgu
CisKIDIwMjAtMDUtMjAgIEFuZHkgRXN0ZXMgIDxhZXN0ZXNAYXBwbGUuY29tPgogCiAgICAgICAg
IFtNYWNdIFVJIHByb2Nlc3NlcyBzcGluIHdoZW4gY3JlYXRpbmcgdGhlICJTaGFyZSIgY29udGV4
dCBtZW51IGl0ZW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IDdlYzM3OTk3YzU1OGUxZTIw
ZjYxYjVjNjllMmNiOWE4ZjUxZjMxYTUuLjdjODMxMWQ2MzcxNTgwZWI0MjBmNzkzOWNjN2Y4YTNl
MTQwYWIxYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDIw
LTA1LTIxICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIg
SW5zcGVjdG9yOiByZXBsYWNlIGBmZWF0dXJlR3VhcmRgIGFuZCBgYXZhaWxhYmlsaXR5YCB3aXRo
IGEgY29tYmluZWQgYGNvbmRpdGlvbmAgdGhhdCBhY2NlcHRzIGFueSBtYWNybworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwMDE0CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUHJldmlvdXNseSwgdGhlIGdl
bmVyYXRlZCBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMgd291bGQgaW5jbHVkZSBjb2RlIGZv
ciB0aGluZ3MgdGhhdCB0aGUKKyAgICAgICAgYmFja2VuZCBkb2Vzbid0IGFjdHVhbGx5IHN1cHBv
cnQuIEJ5IHVzaW5nIGFjdHVhbCBtYWNyb3MgYW5kIHByZXByb2Nlc3NpbmcgdGhhdCBmaWxlLCB3
ZSBjYW4KKyAgICAgICAgZW5zdXJlIHRoYXQgdGhlIGZyb250ZW5kIGRvZXNuJ3QgaW5jb3JyZWN0
bHkgdGhpbmsgdGhhdCBzb21ldGhpbmcgaXMgc3VwcG9ydGVkIGJ5IHRoZSBwYWdlCisgICAgICAg
IGJlaW5nIGluc3BlY3RlZDoKKyAgICAgICAgIC0gdGhlIGBDYW52YXNgIGNvbW1hbmRzIGFuZCBl
dmVudHMgcmVsYXRlZCB0byBzaGFkZXIgcHJvZ3JhbXMvcGlwZWxpbmVzIHNob3VsZCBvbmx5IGV4
aXN0CisgICAgICAgICAgIHdoZW4gdGhlIGNvcnJlc3BvbmRpbmcgY29udGV4dCB0eXBlIGV4aXN0
cywgbmFtZWx5IGBFTkFCTEUoV0VCR0wpYCBhbmQgYEVOQUJMRShXRUJHUFUpYC4KKyAgICAgICAg
IC0gaU9TIGRvZXNuJ3Qgc3VwcG9ydCBzaG93aW5nIHJ1bGVycywgc28gY3JlYXRlIGEgdmFyaWFu
dCBvZiBgRE9NLnNldEluc3BlY3RNb2RlRW5hYmxlZGAKKyAgICAgICAgICAgdGhhdCBvbmx5IGV4
aXN0cyBmb3IgYFBMQVRGT1JNKElPU19GQU1JTFkpYCB0aGF0IGRvZXNuJ3QgaGF2ZSB0aGUgYHNo
b3dSdWxlcnNgIG9wdGlvbmFsCisgICAgICAgICAgIHBhcmFtZXRlciwgYXMgd2VsbCBhcyByZW1v
dmluZyBgUGFnZS5zZXRTaG93UnVsZXJzYCBlbnRpcmVseS4KKyAgICAgICAgIC0gc2V0dGluZyB0
aGUgZm9yY2VkIGFwcGVhcmFuY2Ugc2hvdWxkIG9ubHkgYmUgcG9zc2libGUgaWYgZGFyayBtb2Rl
IGlzIHN1cHBvcnRlZC4KKyAgICAgICAgIC0gd2ViIGFyY2hpdmVzIG9ubHkgZXhpc3QgaWYgQ0Yg
aXMgdXNlZC4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICBBZGQgYSBkZXBl
bmRlbmN5IG9uIHRoZSBuZXcgYEluc3BlY3RvckJhY2tlbmRDb21tYW5kc2AgdGFyZ2V0LgorCisg
ICAgICAgICogVXNlckludGVyZmFjZS9CYXNlL01haW4uanM6CisgICAgICAgIChXSS5fdXBkYXRl
RG93bmxvYWRUYWJCYXJCdXR0b24pOgorCiAyMDIwLTA1LTIwICBOaWtpdGEgVmFzaWx5ZXYgIDxu
dmFzaWx5ZXZAYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IExlZnQvUmlnaHQg
YXJyb3cga2V5cyBzaG91bGQgY29sbGFwc2UvZXhwYW5kIGRldGFpbHMgc2VjdGlvbnMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cK
aW5kZXggZmNlNmIwMTMwODJlN2NlMTgzNzcyZDRhNDBmODY2ZjI3ODcxNmJmNi4uODI3Yzg2YTky
YjVlMTI2OTI3ZmI1NjE3ZDEyZTJmMWI5ZjUyMTRlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMSBA
QAorMjAyMC0wNS0yMSAgRGV2aW4gUm91c3NvICA8ZHJvdXNzb0BhcHBsZS5jb20+CisKKyAgICAg
ICAgV2ViIEluc3BlY3RvcjogcmVwbGFjZSBgZmVhdHVyZUd1YXJkYCBhbmQgYGF2YWlsYWJpbGl0
eWAgd2l0aCBhIGNvbWJpbmVkIGBjb25kaXRpb25gIHRoYXQgYWNjZXB0cyBhbnkgbWFjcm8KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMDAxNAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFByZXZpb3VzbHks
IHRoZSBnZW5lcmF0ZWQgSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzIHdvdWxkIGluY2x1ZGUg
Y29kZSBmb3IgdGhpbmdzIHRoYXQgdGhlCisgICAgICAgIGJhY2tlbmQgZG9lc24ndCBhY3R1YWxs
eSBzdXBwb3J0LiBCeSB1c2luZyBhY3R1YWwgbWFjcm9zIGFuZCBwcmVwcm9jZXNzaW5nIHRoYXQg
ZmlsZSwgd2UgY2FuCisgICAgICAgIGVuc3VyZSB0aGF0IHRoZSBmcm9udGVuZCBkb2Vzbid0IGlu
Y29ycmVjdGx5IHRoaW5rIHRoYXQgc29tZXRoaW5nIGlzIHN1cHBvcnRlZCBieSB0aGUgcGFnZQor
ICAgICAgICBiZWluZyBpbnNwZWN0ZWQ6CisgICAgICAgICAtIHRoZSBgQ2FudmFzYCBjb21tYW5k
cyBhbmQgZXZlbnRzIHJlbGF0ZWQgdG8gc2hhZGVyIHByb2dyYW1zL3BpcGVsaW5lcyBzaG91bGQg
b25seSBleGlzdAorICAgICAgICAgICB3aGVuIHRoZSBjb3JyZXNwb25kaW5nIGNvbnRleHQgdHlw
ZSBleGlzdHMsIG5hbWVseSBgRU5BQkxFKFdFQkdMKWAgYW5kIGBFTkFCTEUoV0VCR1BVKWAuCisg
ICAgICAgICAtIGlPUyBkb2Vzbid0IHN1cHBvcnQgc2hvd2luZyBydWxlcnMsIHNvIGNyZWF0ZSBh
IHZhcmlhbnQgb2YgYERPTS5zZXRJbnNwZWN0TW9kZUVuYWJsZWRgCisgICAgICAgICAgIHRoYXQg
b25seSBleGlzdHMgZm9yIGBQTEFURk9STShJT1NfRkFNSUxZKWAgdGhhdCBkb2Vzbid0IGhhdmUg
dGhlIGBzaG93UnVsZXJzYCBvcHRpb25hbAorICAgICAgICAgICBwYXJhbWV0ZXIsIGFzIHdlbGwg
YXMgcmVtb3ZpbmcgYFBhZ2Uuc2V0U2hvd1J1bGVyc2AgZW50aXJlbHkuCisgICAgICAgICAtIHNl
dHRpbmcgdGhlIGZvcmNlZCBhcHBlYXJhbmNlIHNob3VsZCBvbmx5IGJlIHBvc3NpYmxlIGlmIGRh
cmsgbW9kZSBpcyBzdXBwb3J0ZWQuCisgICAgICAgICAtIHdlYiBhcmNoaXZlcyBvbmx5IGV4aXN0
IGlmIENGIGlzIHVzZWQuCisKKyAgICAgICAgKiBDb25maWd1cmF0aW9ucy9GZWF0dXJlRGVmaW5l
cy54Y2NvbmZpZzoKKyAgICAgICAgQWRkIGBFTkFCTEVfV0VCX0FSQ0hJVkVgIHNpbmNlIGl0J3Mg
YWx3YXlzIGVuYWJsZWQgaW4gd3RmL1BsYXRmb3JtRW5hYmxlQ29jb2EuaC4KKworICAgICAgICAq
IERlcml2ZWRTb3VyY2VzLm1ha2U6CisgICAgICAgICogUGxhdGZvcm1NYWMuY21ha2U6CisgICAg
ICAgIFJlbW92ZSBgcGxhdGZvcm1gIGFzIGl0IGlzIGhhbmRsZWQgYnkgYGNvbmRpdGlvbmAuCisK
KyAgICAgICAgKiBVSVByb2Nlc3MvQXV0b21hdGlvbi9BdXRvbWF0aW9uLmpzb246CisKIDIwMjAt
MDUtMjEgIFBlbmcgTGl1ICA8cGVuZy5saXU2QGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggaXNz
dWVzIG9mIHRoZSBQaWN0dXJlLWluLVBpY3R1cmUgQVBJIHVuZGVyIHN0cmVzcyB0ZXN0cwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvQ2hhbmdlTG9nCmluZGV4IGJkZWE5MGQyZDRkOTc3OTg5NmNjNThjZWJjYTJh
MTBlNzgwYmJjYmMuLjY4MmViODY5ZmJlZGIyNWMzOTUwZmE1YjJiMTU1NDdlNzE0MjU4MDQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNSBAQAorMjAyMC0wNS0yMSAg
RGV2aW4gUm91c3NvICA8ZHJvdXNzb0BhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3Rv
cjogcmVwbGFjZSBgZmVhdHVyZUd1YXJkYCBhbmQgYGF2YWlsYWJpbGl0eWAgd2l0aCBhIGNvbWJp
bmVkIGBjb25kaXRpb25gIHRoYXQgYWNjZXB0cyBhbnkgbWFjcm8KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMDAxNAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFByZXZpb3VzbHksIHRoZSBnZW5lcmF0ZWQg
SW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzIHdvdWxkIGluY2x1ZGUgY29kZSBmb3IgdGhpbmdz
IHRoYXQgdGhlCisgICAgICAgIGJhY2tlbmQgZG9lc24ndCBhY3R1YWxseSBzdXBwb3J0LiBCeSB1
c2luZyBhY3R1YWwgbWFjcm9zIGFuZCBwcmVwcm9jZXNzaW5nIHRoYXQgZmlsZSwgd2UgY2FuCisg
ICAgICAgIGVuc3VyZSB0aGF0IHRoZSBmcm9udGVuZCBkb2Vzbid0IGluY29ycmVjdGx5IHRoaW5r
IHRoYXQgc29tZXRoaW5nIGlzIHN1cHBvcnRlZCBieSB0aGUgcGFnZQorICAgICAgICBiZWluZyBp
bnNwZWN0ZWQ6CisgICAgICAgICAtIHRoZSBgQ2FudmFzYCBjb21tYW5kcyBhbmQgZXZlbnRzIHJl
bGF0ZWQgdG8gc2hhZGVyIHByb2dyYW1zL3BpcGVsaW5lcyBzaG91bGQgb25seSBleGlzdAorICAg
ICAgICAgICB3aGVuIHRoZSBjb3JyZXNwb25kaW5nIGNvbnRleHQgdHlwZSBleGlzdHMsIG5hbWVs
eSBgRU5BQkxFKFdFQkdMKWAgYW5kIGBFTkFCTEUoV0VCR1BVKWAuCisgICAgICAgICAtIGlPUyBk
b2Vzbid0IHN1cHBvcnQgc2hvd2luZyBydWxlcnMsIHNvIGNyZWF0ZSBhIHZhcmlhbnQgb2YgYERP
TS5zZXRJbnNwZWN0TW9kZUVuYWJsZWRgCisgICAgICAgICAgIHRoYXQgb25seSBleGlzdHMgZm9y
IGBQTEFURk9STShJT1NfRkFNSUxZKWAgdGhhdCBkb2Vzbid0IGhhdmUgdGhlIGBzaG93UnVsZXJz
YCBvcHRpb25hbAorICAgICAgICAgICBwYXJhbWV0ZXIsIGFzIHdlbGwgYXMgcmVtb3ZpbmcgYFBh
Z2Uuc2V0U2hvd1J1bGVyc2AgZW50aXJlbHkuCisgICAgICAgICAtIHNldHRpbmcgdGhlIGZvcmNl
ZCBhcHBlYXJhbmNlIHNob3VsZCBvbmx5IGJlIHBvc3NpYmxlIGlmIGRhcmsgbW9kZSBpcyBzdXBw
b3J0ZWQuCisgICAgICAgICAtIHdlYiBhcmNoaXZlcyBvbmx5IGV4aXN0IGlmIENGIGlzIHVzZWQu
CisKKyAgICAgICAgKiBDb25maWd1cmF0aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZpZzoKKyAg
ICAgICAgQWRkIGBFTkFCTEVfV0VCX0FSQ0hJVkVgIHNpbmNlIGl0J3MgYWx3YXlzIGVuYWJsZWQg
aW4gd3RmL1BsYXRmb3JtRW5hYmxlQ29jb2EuaC4KKwogMjAyMC0wNS0yMSAgUGlua2kgR3lhbmNo
YW5kYW5pICA8cGd5YW5jaGFuZGFuaUBhcHBsZS5jb20+CiAKICAgICAgICAgTnVsbCBQdHIgRGVy
ZWYgQCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlOjpwbGF0Zm9ybUxhenlJbml0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggNjQ5OGI1YjFlNWQxOWRhZWZjNmNhZTdmNmFm
ZDUxMzJmMzZkMjg5NS4uOTFhNmUzYTFiMDQwZTBhZWZlY2Q5MzUzMjdmZGFkNmU5MjEzMzlkNCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTE1MCwxMiArMTE1MCwxNSBA
QCBzZXQoSmF2YVNjcmlwdENvcmVfSU5TUEVDVE9SX1BST1RPQ09MX1NDUklQVFMKICAgICAke0ph
dmFTY3JpcHRDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0vY29kZWdlbi9nZW5lcmF0b3JfdGVt
cGxhdGVzLnB5CiAgICAgJHtKYXZhU2NyaXB0Q29yZV9JTlNQRUNUT1JfU0NSSVBUU19ESVJ9L2Nv
ZGVnZW4vX19pbml0X18ucHkKICAgICAke0phdmFTY3JpcHRDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRT
X0RJUn0vY29kZWdlbi9tb2RlbHMucHkKKyAgICAke0phdmFTY3JpcHRDb3JlX0lOU1BFQ1RPUl9T
Q1JJUFRTX0RJUn0vY29kZWdlbi9wcmVwcm9jZXNzLnBsCiApCiAKIHNldChKYXZhU2NyaXB0Q29y
ZV9JTlNQRUNUT1JfRE9NQUlOUwogICAgICR7SkFWQVNDUklQVENPUkVfRElSfS9pbnNwZWN0b3Iv
cHJvdG9jb2wvQW5pbWF0aW9uLmpzb24KICAgICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vaW5zcGVj
dG9yL3Byb3RvY29sL0FwcGxpY2F0aW9uQ2FjaGUuanNvbgogICAgICR7SkFWQVNDUklQVENPUkVf
RElSfS9pbnNwZWN0b3IvcHJvdG9jb2wvQXVkaXQuanNvbgorICAgICR7SkFWQVNDUklQVENPUkVf
RElSfS9pbnNwZWN0b3IvcHJvdG9jb2wvQnJvd3Nlci5qc29uCisgICAgJHtKQVZBU0NSSVBUQ09S
RV9ESVJ9L2luc3BlY3Rvci9wcm90b2NvbC9DUFVQcm9maWxlci5qc29uCiAgICAgJHtKQVZBU0NS
SVBUQ09SRV9ESVJ9L2luc3BlY3Rvci9wcm90b2NvbC9DU1MuanNvbgogICAgICR7SkFWQVNDUklQ
VENPUkVfRElSfS9pbnNwZWN0b3IvcHJvdG9jb2wvQ2FudmFzLmpzb24KICAgICAke0pBVkFTQ1JJ
UFRDT1JFX0RJUn0vaW5zcGVjdG9yL3Byb3RvY29sL0NvbnNvbGUuanNvbgpAQCAtMTE2NCw0MSAr
MTE2NywyNCBAQCBzZXQoSmF2YVNjcmlwdENvcmVfSU5TUEVDVE9SX0RPTUFJTlMKICAgICAke0pB
VkFTQ1JJUFRDT1JFX0RJUn0vaW5zcGVjdG9yL3Byb3RvY29sL0RPTVN0b3JhZ2UuanNvbgogICAg
ICR7SkFWQVNDUklQVENPUkVfRElSfS9pbnNwZWN0b3IvcHJvdG9jb2wvRGF0YWJhc2UuanNvbgog
ICAgICR7SkFWQVNDUklQVENPUkVfRElSfS9pbnNwZWN0b3IvcHJvdG9jb2wvRGVidWdnZXIuanNv
bgotICAgICR7SkFWQVNDUklQVENPUkVfRElSfS9pbnNwZWN0b3IvcHJvdG9jb2wvQnJvd3Nlci5q
c29uCiAgICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2luc3BlY3Rvci9wcm90b2NvbC9HZW5lcmlj
VHlwZXMuanNvbgogICAgICR7SkFWQVNDUklQVENPUkVfRElSfS9pbnNwZWN0b3IvcHJvdG9jb2wv
SGVhcC5qc29uCisgICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2luc3BlY3Rvci9wcm90b2NvbC9J
bmRleGVkREIuanNvbgogICAgICR7SkFWQVNDUklQVENPUkVfRElSfS9pbnNwZWN0b3IvcHJvdG9j
b2wvSW5zcGVjdG9yLmpzb24KICAgICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vaW5zcGVjdG9yL3By
b3RvY29sL0xheWVyVHJlZS5qc29uCisgICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2luc3BlY3Rv
ci9wcm90b2NvbC9NZW1vcnkuanNvbgogICAgICR7SkFWQVNDUklQVENPUkVfRElSfS9pbnNwZWN0
b3IvcHJvdG9jb2wvTmV0d29yay5qc29uCiAgICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2luc3Bl
Y3Rvci9wcm90b2NvbC9QYWdlLmpzb24KICAgICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vaW5zcGVj
dG9yL3Byb3RvY29sL1JlY29yZGluZy5qc29uCiAgICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2lu
c3BlY3Rvci9wcm90b2NvbC9SdW50aW1lLmpzb24KICAgICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0v
aW5zcGVjdG9yL3Byb3RvY29sL1NjcmlwdFByb2ZpbGVyLmpzb24KICAgICAke0pBVkFTQ1JJUFRD
T1JFX0RJUn0vaW5zcGVjdG9yL3Byb3RvY29sL1NlY3VyaXR5Lmpzb24KKyAgICAke0pBVkFTQ1JJ
UFRDT1JFX0RJUn0vaW5zcGVjdG9yL3Byb3RvY29sL1NlcnZpY2VXb3JrZXIuanNvbgogICAgICR7
SkFWQVNDUklQVENPUkVfRElSfS9pbnNwZWN0b3IvcHJvdG9jb2wvVGFyZ2V0Lmpzb24KICAgICAk
e0pBVkFTQ1JJUFRDT1JFX0RJUn0vaW5zcGVjdG9yL3Byb3RvY29sL1RpbWVsaW5lLmpzb24KICAg
ICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vaW5zcGVjdG9yL3Byb3RvY29sL1dvcmtlci5qc29uCiAp
CiAKLWlmIChFTkFCTEVfSU5ERVhFRF9EQVRBQkFTRSkKLSAgICBsaXN0KEFQUEVORCBKYXZhU2Ny
aXB0Q29yZV9JTlNQRUNUT1JfRE9NQUlOUwotICAgICAgICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0v
aW5zcGVjdG9yL3Byb3RvY29sL0luZGV4ZWREQi5qc29uCi0gICAgKQotZW5kaWYgKCkKLQotaWYg
KEVOQUJMRV9SRVNPVVJDRV9VU0FHRSkKLSAgICBsaXN0KEFQUEVORCBKYXZhU2NyaXB0Q29yZV9J
TlNQRUNUT1JfRE9NQUlOUwotICAgICAgICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vaW5zcGVjdG9y
L3Byb3RvY29sL0NQVVByb2ZpbGVyLmpzb24KLSAgICAgICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9
L2luc3BlY3Rvci9wcm90b2NvbC9NZW1vcnkuanNvbgotICAgICkKLWVuZGlmICgpCi0KLWlmIChF
TkFCTEVfU0VSVklDRV9XT1JLRVIpCi0gICAgbGlzdChBUFBFTkQgSmF2YVNjcmlwdENvcmVfSU5T
UEVDVE9SX0RPTUFJTlMKLSAgICAgICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2luc3BlY3Rvci9w
cm90b2NvbC9TZXJ2aWNlV29ya2VyLmpzb24KLSAgICApCi1lbmRpZiAoKQotCiBhZGRfY3VzdG9t
X2NvbW1hbmQoCiAgICAgT1VUUFVUICR7SmF2YVNjcmlwdENvcmVfREVSSVZFRF9TT1VSQ0VTX0RJ
Un0vQ29tYmluZWREb21haW5zLmpzb24KICAgICBNQUlOX0RFUEVOREVOQ1kgJHtKYXZhU2NyaXB0
Q29yZV9TQ1JJUFRTX0RJUn0vZ2VuZXJhdGUtY29tYmluZWQtaW5zcGVjdG9yLWpzb24ucHkKQEAg
LTEyMTYsMTEgKzEyMDIsMTkgQEAgYWRkX2N1c3RvbV9jb21tYW5kKAogICAgICAgICAgICAke0ph
dmFTY3JpcHRDb3JlX0RFUklWRURfU09VUkNFU19ESVJ9L2luc3BlY3Rvci9JbnNwZWN0b3JGcm9u
dGVuZERpc3BhdGNoZXJzLmgKICAgICAgICAgICAgJHtKYXZhU2NyaXB0Q29yZV9ERVJJVkVEX1NP
VVJDRVNfRElSfS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xPYmplY3RzLmNwcAogICAgICAg
ICAgICAke0phdmFTY3JpcHRDb3JlX0RFUklWRURfU09VUkNFU19ESVJ9L2luc3BlY3Rvci9JbnNw
ZWN0b3JQcm90b2NvbE9iamVjdHMuaAotICAgICAgICAgICAke0phdmFTY3JpcHRDb3JlX0RFUklW
RURfU09VUkNFU19ESVJ9L2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKICAg
ICBNQUlOX0RFUEVOREVOQ1kgJHtKYXZhU2NyaXB0Q29yZV9ERVJJVkVEX1NPVVJDRVNfRElSfS9D
b21iaW5lZERvbWFpbnMuanNvbgogICAgIERFUEVORFMgJHtKYXZhU2NyaXB0Q29yZV9JTlNQRUNU
T1JfUFJPVE9DT0xfU0NSSVBUU30KICAgICBDT01NQU5EICR7UFlUSE9OX0VYRUNVVEFCTEV9ICR7
SmF2YVNjcmlwdENvcmVfSU5TUEVDVE9SX1NDUklQVFNfRElSfS9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkgLS1vdXRwdXREaXIgIiR7SmF2YVNjcmlwdENvcmVfREVSSVZF
RF9TT1VSQ0VTX0RJUn0vaW5zcGVjdG9yIiAtLWZyYW1ld29yayBKYXZhU2NyaXB0Q29yZSAke0ph
dmFTY3JpcHRDb3JlX0RFUklWRURfU09VUkNFU19ESVJ9L0NvbWJpbmVkRG9tYWlucy5qc29uCiAg
ICAgVkVSQkFUSU0pCithZGRfY3VzdG9tX2NvbW1hbmQoCisgICAgT1VUUFVUICR7SmF2YVNjcmlw
dENvcmVfREVSSVZFRF9TT1VSQ0VTX0RJUn0vaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmRDb21t
YW5kcy5qcworICAgICAgICAgICAke0phdmFTY3JpcHRDb3JlX0RFUklWRURfU09VUkNFU19ESVJ9
L2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMuaW4KKyAgICBNQUlOX0RFUEVO
REVOQ1kgJHtKYXZhU2NyaXB0Q29yZV9ERVJJVkVEX1NPVVJDRVNfRElSfS9Db21iaW5lZERvbWFp
bnMuanNvbgorICAgIERFUEVORFMgJHtKYXZhU2NyaXB0Q29yZV9JTlNQRUNUT1JfUFJPVE9DT0xf
U0NSSVBUU30KKyAgICBDT01NQU5EICR7UFlUSE9OX0VYRUNVVEFCTEV9ICR7SmF2YVNjcmlwdENv
cmVfSU5TUEVDVE9SX1NDUklQVFNfRElSfS9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkgLS1vdXRwdXREaXIgJHtKYXZhU2NyaXB0Q29yZV9ERVJJVkVEX1NPVVJDRVNfRElS
fS9pbnNwZWN0b3IgLS1mcmFtZXdvcmsgV2ViSW5zcGVjdG9yVUkgJHtKYXZhU2NyaXB0Q29yZV9E
RVJJVkVEX1NPVVJDRVNfRElSfS9Db21iaW5lZERvbWFpbnMuanNvbgorICAgIENPTU1BTkQgJHtQ
RVJMX0VYRUNVVEFCTEV9ICR7SmF2YVNjcmlwdENvcmVfSU5TUEVDVE9SX1NDUklQVFNfRElSfS9j
b2RlZ2VuL3ByZXByb2Nlc3MucGwgLS1pbnB1dCAke0phdmFTY3JpcHRDb3JlX0RFUklWRURfU09V
UkNFU19ESVJ9L2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMuaW4gLS1kZWZp
bmVzICIke0ZFQVRVUkVfREVGSU5FU19XSVRIX1NQQUNFX1NFUEFSQVRPUn0iIC0tcHJlcHJvY2Vz
c29yICIke0NPREVfR0VORVJBVE9SX1BSRVBST0NFU1NPUn0iIC0tb3V0cHV0ICR7SmF2YVNjcmlw
dENvcmVfREVSSVZFRF9TT1VSQ0VTX0RJUn0vaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmRDb21t
YW5kcy5qcworICAgIFZFUkJBVElNKQorYWRkX2N1c3RvbV90YXJnZXQoSW5zcGVjdG9yQmFja2Vu
ZENvbW1hbmRzIERFUEVORFMgIiR7SmF2YVNjcmlwdENvcmVfREVSSVZFRF9TT1VSQ0VTX0RJUn0v
aW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcyIpCiAKICMgSlNDQnVpbHRpbnMK
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NvbmZpZ3VyYXRpb25zL0ZlYXR1
cmVEZWZpbmVzLnhjY29uZmlnIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NvbmZpZ3VyYXRpb25z
L0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnCmluZGV4IDBiZTQyMDdiZmMzNDdkOGJiYzhiMzM1Y2Iy
NjBkYjdjMzAxMWYwOGYuLjNlNjk3OGVjYTI2ZDg2ZDdiMjEyNjZiNGQyZDcxNmE0OGFiMzRmZTkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Db25maWd1cmF0aW9ucy9GZWF0dXJl
RGVmaW5lcy54Y2NvbmZpZworKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ29uZmlndXJhdGlv
bnMvRmVhdHVyZURlZmluZXMueGNjb25maWcKQEAgLTM3Nyw2ICszNzcsOCBAQCBFTkFCTEVfVklE
RU9fVFJBQ0sgPSBFTkFCTEVfVklERU9fVFJBQ0s7CiBFTkFCTEVfVklERU9fVVNFU19FTEVNRU5U
X0ZVTExTQ1JFRU4gPSAkKEVOQUJMRV9WSURFT19VU0VTX0VMRU1FTlRfRlVMTFNDUkVFTl8kKFdL
X1BMQVRGT1JNX05BTUUpKTsKIEVOQUJMRV9WSURFT19VU0VTX0VMRU1FTlRfRlVMTFNDUkVFTl9t
YWNvc3ggPSBFTkFCTEVfVklERU9fVVNFU19FTEVNRU5UX0ZVTExTQ1JFRU47CiAKK0VOQUJMRV9X
RUJfQVJDSElWRSA9IEVOQUJMRV9XRUJfQVJDSElWRTsKKwogRU5BQkxFX1dFQkRSSVZFUl9NT1VT
RV9JTlRFUkFDVElPTlMgPSAkKEVOQUJMRV9XRUJEUklWRVJfTU9VU0VfSU5URVJBQ1RJT05TXyQo
V0tfUExBVEZPUk1fTkFNRSkpOwogRU5BQkxFX1dFQkRSSVZFUl9NT1VTRV9JTlRFUkFDVElPTlNf
bWFjb3N4ID0gRU5BQkxFX1dFQkRSSVZFUl9NT1VTRV9JTlRFUkFDVElPTlM7CiAKQEAgLTQxOSw0
ICs0MjEsNCBAQCBFTkFCTEVfV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUID0gRU5BQkxFX1dJUkVM
RVNTX1BMQVlCQUNLX1RBUkdFVDsKIAogRU5BQkxFX1hTTFQgPSBFTkFCTEVfWFNMVDsKIAotRkVB
VFVSRV9ERUZJTkVTID0gJChFTkFCTEVfM0RfVFJBTlNGT1JNUykgJChFTkFCTEVfQUNDRUxFUkFU
RURfMkRfQ0FOVkFTKSAkKEVOQUJMRV9BQ0NFU1NJQklMSVRZX0lTT0xBVEVEX1RSRUUpICQoRU5B
QkxFX0FQUExFX1BBWSkgJChFTkFCTEVfQVBQTEVfUEFZX1NFU1NJT05fVjMpICQoRU5BQkxFX0FQ
UExFX1BBWV9TRVNTSU9OX1Y0KSAkKEVOQUJMRV9BUFBMSUNBVElPTl9NQU5JRkVTVCkgJChFTkFC
TEVfQVRUQUNITUVOVF9FTEVNRU5UKSAkKEVOQUJMRV9BVkZfQ0FQVElPTlMpICQoRU5BQkxFX0NB
Q0hFX1BBUlRJVElPTklORykgJChFTkFCTEVfQ0hBTk5FTF9NRVNTQUdJTkcpICQoRU5BQkxFX0NP
TlRFTlRfRklMVEVSSU5HKSAkKEVOQUJMRV9DU1MzX1RFWFQpICQoRU5BQkxFX0NTU19CT1hfREVD
T1JBVElPTl9CUkVBSykgJChFTkFCTEVfQ1NTX0NPTVBPU0lUSU5HKSAkKEVOQUJMRV9DU1NfQ09O
SUNfR1JBRElFTlRTKSAkKEVOQUJMRV9DU1NfSU1BR0VfUkVTT0xVVElPTikgJChFTkFCTEVfQ1NT
X1BBSU5USU5HX0FQSSkgJChFTkFCTEVfQ1NTX1NDUk9MTF9TTkFQKSAkKEVOQUJMRV9DU1NfU0VM
RUNUT1JTX0xFVkVMNCkgJChFTkFCTEVfQ1NTX1RSQUlMSU5HX1dPUkQpICQoRU5BQkxFX0NTU19U
WVBFRF9PTSkgJChFTkFCTEVfQ1VSU09SX1ZJU0lCSUxJVFkpICQoRU5BQkxFX0NfTE9PUCkgJChF
TkFCTEVfREFSS19NT0RFX0NTUykgJChFTkFCTEVfREFUQUNVRV9WQUxVRSkgJChFTkFCTEVfREFU
QUxJU1RfRUxFTUVOVCkgJChFTkFCTEVfREFUQV9JTlRFUkFDVElPTikgJChFTkFCTEVfREVWSUNF
X09SSUVOVEFUSU9OKSAkKEVOQUJMRV9EUkFHX1NVUFBPUlQpICQoRU5BQkxFX0VESVRBQkxFX1JF
R0lPTikgJChFTkFCTEVfRU5DUllQVEVEX01FRElBKSAkKEVOQUJMRV9FWFBFUklNRU5UQUxfRkVB
VFVSRVMpICQoRU5BQkxFX0ZJTFRFUlNfTEVWRUxfMikgJChFTkFCTEVfRlVMTFNDUkVFTl9BUEkp
ICQoRU5BQkxFX1BJQ1RVUkVfSU5fUElDVFVSRV9BUEkpICQoRU5BQkxFX0dBTUVQQUQpICQoRU5B
QkxFX0dFT0xPQ0FUSU9OKSAkKEVOQUJMRV9HUFVfUFJPQ0VTUykgJChFTkFCTEVfSU5ERVhFRF9E
QVRBQkFTRSkgJChFTkFCTEVfSU5ERVhFRF9EQVRBQkFTRV9JTl9XT1JLRVJTKSAkKEVOQUJMRV9J
TlBVVF9UWVBFX0NPTE9SKSAkKEVOQUJMRV9JTlBVVF9UWVBFX0RBVEUpICQoRU5BQkxFX0lOUFVU
X1RZUEVfREFURVRJTUVMT0NBTCkgJChFTkFCTEVfSU5QVVRfVFlQRV9EQVRFVElNRV9JTkNPTVBM
RVRFKSAkKEVOQUJMRV9JTlBVVF9UWVBFX01PTlRIKSAkKEVOQUJMRV9JTlBVVF9UWVBFX1RJTUUp
ICQoRU5BQkxFX0lOUFVUX1RZUEVfV0VFSykgJChFTkFCTEVfSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykgJChFTkFCTEVfSU5TUEVDVE9SX1RFTEVNRVRSWSkgJChFTkFCTEVfSU5URVJT
RUNUSU9OX09CU0VSVkVSKSAkKEVOQUJMRV9JT1NfR0VTVFVSRV9FVkVOVFMpICQoRU5BQkxFX0lP
U19UT1VDSF9FVkVOVFMpICQoRU5BQkxFX0xBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpICQoRU5B
QkxFX0xFR0FDWV9DU1NfVkVORE9SX1BSRUZJWEVTKSAkKEVOQUJMRV9MRUdBQ1lfQ1VTVE9NX1BS
T1RPQ09MX01BTkFHRVIpICQoRU5BQkxFX0xFR0FDWV9FTkNSWVBURURfTUVESUEpICQoRU5BQkxF
X0xFVFRFUlBSRVNTKSAkKEVOQUJMRV9NQUNfR0VTVFVSRV9FVkVOVFMpICQoRU5BQkxFX01BVEhN
TCkgJChFTkFCTEVfTUVESUFfQ0FQVFVSRSkgJChFTkFCTEVfTUVESUFfQ09OVFJPTFNfU0NSSVBU
KSAkKEVOQUJMRV9NRURJQV9TRVNTSU9OKSAkKEVOQUJMRV9NRURJQV9TT1VSQ0UpICQoRU5BQkxF
X01FRElBX1NUQVRJU1RJQ1MpICQoRU5BQkxFX01FRElBX1NUUkVBTSkgJChFTkFCTEVfTUVNT1JZ
X1NBTVBMRVIpICQoRU5BQkxFX01FVEVSX0VMRU1FTlQpICQoRU5BQkxFX01IVE1MKSAkKEVOQUJM
RV9NT1VTRV9DVVJTT1JfU0NBTEUpICQoRU5BQkxFX05BVklHQVRPUl9TVEFOREFMT05FKSAkKEVO
QUJMRV9ORVRXT1JLX0NBQ0hFX1NQRUNVTEFUSVZFX1JFVkFMSURBVElPTikgJChFTkFCTEVfTkVU
V09SS19DQUNIRV9TVEFMRV9XSElMRV9SRVZBTElEQVRFKSAkKEVOQUJMRV9OT1RJRklDQVRJT05T
KSAkKEVOQUJMRV9PRkZTQ1JFRU5fQ0FOVkFTKSAkKEVOQUJMRV9PVkVSRkxPV19TQ1JPTExJTkdf
VE9VQ0gpICQoRU5BQkxFX1BBWU1FTlRfUkVRVUVTVCkgJChFTkFCTEVfUERGS0lUX1BMVUdJTikg
JChFTkFCTEVfUE9JTlRFUl9MT0NLKSAkKEVOQUJMRV9QVUJMSUNfU1VGRklYX0xJU1QpICQoRU5B
QkxFX1FVT1RBKSAkKEVOQUJMRV9SRU1PVEVfSU5TUEVDVE9SKSAkKEVOQUJMRV9SRVNJWkVfT0JT
RVJWRVIpICQoRU5BQkxFX1JFU09MVVRJT05fTUVESUFfUVVFUlkpICQoRU5BQkxFX1JFU09VUkNF
X0xPQURfU1RBVElTVElDUykgJChFTkFCTEVfUkVTT1VSQ0VfVVNBR0UpICQoRU5BQkxFX1JVQkJF
Ul9CQU5ESU5HKSAkKEVOQUJMRV9TQU5EQk9YX0VYVEVOU0lPTlMpICQoRU5BQkxFX1NFUlZFUl9Q
UkVDT05ORUNUKSAkKEVOQUJMRV9TRVJWSUNFX0NPTlRST0xTKSAkKEVOQUJMRV9TRVJWSUNFX1dP
UktFUikgJChFTkFCTEVfU0hBUkVBQkxFX1JFU09VUkNFKSAkKEVOQUJMRV9TUEVFQ0hfU1lOVEhF
U0lTKSAkKEVOQUJMRV9TVFJFQU1TX0FQSSkgJChFTkFCTEVfU1ZHX0ZPTlRTKSAkKEVOQUJMRV9U
RUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikgJChFTkFCTEVfVEVYVF9BVVRPU0laSU5HKSAkKEVO
QUJMRV9UT1VDSF9FVkVOVFMpICQoRU5BQkxFX1VTRVJTRUxFQ1RfQUxMKSAkKEVOQUJMRV9VU0VS
X01FU1NBR0VfSEFORExFUlMpICQoRU5BQkxFX1ZBUklBVElPTl9GT05UUykgJChFTkFCTEVfVklE
RU8pICQoRU5BQkxFX1ZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSAkKEVOQUJMRV9WSURFT19UUkFD
SykgJChFTkFCTEVfVklERU9fVVNFU19FTEVNRU5UX0ZVTExTQ1JFRU4pICQoRU5BQkxFX1dFQkRS
SVZFUl9NT1VTRV9JTlRFUkFDVElPTlMpICQoRU5BQkxFX1dFQkRSSVZFUl9LRVlCT0FSRF9JTlRF
UkFDVElPTlMpICQoRU5BQkxFX1dFQkRSSVZFUl9UT1VDSF9JTlRFUkFDVElPTlMpICQoRU5BQkxF
X1dFQkdMKSAkKEVOQUJMRV9XRUJHTDIpICQoRU5BQkxFX1dFQkdQVSkgJChFTkFCTEVfV0VCWFIp
ICQoRU5BQkxFX1dFQl9BUElfU1RBVElTVElDUykgJChFTkFCTEVfV0VCX0FVRElPKSAkKEVOQUJM
RV9XRUJfQVVUSE4pICQoRU5BQkxFX1dFQl9DUllQVE8pICQoRU5BQkxFX1dFQl9SVEMpICQoRU5B
QkxFX1dJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkgJChFTkFCTEVfWFNMVCk7CitGRUFUVVJFX0RF
RklORVMgPSAkKEVOQUJMRV8zRF9UUkFOU0ZPUk1TKSAkKEVOQUJMRV9BQ0NFTEVSQVRFRF8yRF9D
QU5WQVMpICQoRU5BQkxFX0FDQ0VTU0lCSUxJVFlfSVNPTEFURURfVFJFRSkgJChFTkFCTEVfQVBQ
TEVfUEFZKSAkKEVOQUJMRV9BUFBMRV9QQVlfU0VTU0lPTl9WMykgJChFTkFCTEVfQVBQTEVfUEFZ
X1NFU1NJT05fVjQpICQoRU5BQkxFX0FQUExJQ0FUSU9OX01BTklGRVNUKSAkKEVOQUJMRV9BVFRB
Q0hNRU5UX0VMRU1FTlQpICQoRU5BQkxFX0FWRl9DQVBUSU9OUykgJChFTkFCTEVfQ0FDSEVfUEFS
VElUSU9OSU5HKSAkKEVOQUJMRV9DSEFOTkVMX01FU1NBR0lORykgJChFTkFCTEVfQ09OVEVOVF9G
SUxURVJJTkcpICQoRU5BQkxFX0NTUzNfVEVYVCkgJChFTkFCTEVfQ1NTX0JPWF9ERUNPUkFUSU9O
X0JSRUFLKSAkKEVOQUJMRV9DU1NfQ09NUE9TSVRJTkcpICQoRU5BQkxFX0NTU19DT05JQ19HUkFE
SUVOVFMpICQoRU5BQkxFX0NTU19JTUFHRV9SRVNPTFVUSU9OKSAkKEVOQUJMRV9DU1NfUEFJTlRJ
TkdfQVBJKSAkKEVOQUJMRV9DU1NfU0NST0xMX1NOQVApICQoRU5BQkxFX0NTU19TRUxFQ1RPUlNf
TEVWRUw0KSAkKEVOQUJMRV9DU1NfVFJBSUxJTkdfV09SRCkgJChFTkFCTEVfQ1NTX1RZUEVEX09N
KSAkKEVOQUJMRV9DVVJTT1JfVklTSUJJTElUWSkgJChFTkFCTEVfQ19MT09QKSAkKEVOQUJMRV9E
QVJLX01PREVfQ1NTKSAkKEVOQUJMRV9EQVRBQ1VFX1ZBTFVFKSAkKEVOQUJMRV9EQVRBTElTVF9F
TEVNRU5UKSAkKEVOQUJMRV9EQVRBX0lOVEVSQUNUSU9OKSAkKEVOQUJMRV9ERVZJQ0VfT1JJRU5U
QVRJT04pICQoRU5BQkxFX0RSQUdfU1VQUE9SVCkgJChFTkFCTEVfRURJVEFCTEVfUkVHSU9OKSAk
KEVOQUJMRV9FTkNSWVBURURfTUVESUEpICQoRU5BQkxFX0VYUEVSSU1FTlRBTF9GRUFUVVJFUykg
JChFTkFCTEVfRklMVEVSU19MRVZFTF8yKSAkKEVOQUJMRV9GVUxMU0NSRUVOX0FQSSkgJChFTkFC
TEVfUElDVFVSRV9JTl9QSUNUVVJFX0FQSSkgJChFTkFCTEVfR0FNRVBBRCkgJChFTkFCTEVfR0VP
TE9DQVRJT04pICQoRU5BQkxFX0dQVV9QUk9DRVNTKSAkKEVOQUJMRV9JTkRFWEVEX0RBVEFCQVNF
KSAkKEVOQUJMRV9JTkRFWEVEX0RBVEFCQVNFX0lOX1dPUktFUlMpICQoRU5BQkxFX0lOUFVUX1RZ
UEVfQ09MT1IpICQoRU5BQkxFX0lOUFVUX1RZUEVfREFURSkgJChFTkFCTEVfSU5QVVRfVFlQRV9E
QVRFVElNRUxPQ0FMKSAkKEVOQUJMRV9JTlBVVF9UWVBFX0RBVEVUSU1FX0lOQ09NUExFVEUpICQo
RU5BQkxFX0lOUFVUX1RZUEVfTU9OVEgpICQoRU5BQkxFX0lOUFVUX1RZUEVfVElNRSkgJChFTkFC
TEVfSU5QVVRfVFlQRV9XRUVLKSAkKEVOQUJMRV9JTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENI
RVJTKSAkKEVOQUJMRV9JTlNQRUNUT1JfVEVMRU1FVFJZKSAkKEVOQUJMRV9JTlRFUlNFQ1RJT05f
T0JTRVJWRVIpICQoRU5BQkxFX0lPU19HRVNUVVJFX0VWRU5UUykgJChFTkFCTEVfSU9TX1RPVUNI
X0VWRU5UUykgJChFTkFCTEVfTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkgJChFTkFCTEVfTEVH
QUNZX0NTU19WRU5ET1JfUFJFRklYRVMpICQoRU5BQkxFX0xFR0FDWV9DVVNUT01fUFJPVE9DT0xf
TUFOQUdFUikgJChFTkFCTEVfTEVHQUNZX0VOQ1JZUFRFRF9NRURJQSkgJChFTkFCTEVfTEVUVEVS
UFJFU1MpICQoRU5BQkxFX01BQ19HRVNUVVJFX0VWRU5UUykgJChFTkFCTEVfTUFUSE1MKSAkKEVO
QUJMRV9NRURJQV9DQVBUVVJFKSAkKEVOQUJMRV9NRURJQV9DT05UUk9MU19TQ1JJUFQpICQoRU5B
QkxFX01FRElBX1NFU1NJT04pICQoRU5BQkxFX01FRElBX1NPVVJDRSkgJChFTkFCTEVfTUVESUFf
U1RBVElTVElDUykgJChFTkFCTEVfTUVESUFfU1RSRUFNKSAkKEVOQUJMRV9NRU1PUllfU0FNUExF
UikgJChFTkFCTEVfTUVURVJfRUxFTUVOVCkgJChFTkFCTEVfTUhUTUwpICQoRU5BQkxFX01PVVNF
X0NVUlNPUl9TQ0FMRSkgJChFTkFCTEVfTkFWSUdBVE9SX1NUQU5EQUxPTkUpICQoRU5BQkxFX05F
VFdPUktfQ0FDSEVfU1BFQ1VMQVRJVkVfUkVWQUxJREFUSU9OKSAkKEVOQUJMRV9ORVRXT1JLX0NB
Q0hFX1NUQUxFX1dISUxFX1JFVkFMSURBVEUpICQoRU5BQkxFX05PVElGSUNBVElPTlMpICQoRU5B
QkxFX09GRlNDUkVFTl9DQU5WQVMpICQoRU5BQkxFX09WRVJGTE9XX1NDUk9MTElOR19UT1VDSCkg
JChFTkFCTEVfUEFZTUVOVF9SRVFVRVNUKSAkKEVOQUJMRV9QREZLSVRfUExVR0lOKSAkKEVOQUJM
RV9QT0lOVEVSX0xPQ0spICQoRU5BQkxFX1BVQkxJQ19TVUZGSVhfTElTVCkgJChFTkFCTEVfUVVP
VEEpICQoRU5BQkxFX1JFTU9URV9JTlNQRUNUT1IpICQoRU5BQkxFX1JFU0laRV9PQlNFUlZFUikg
JChFTkFCTEVfUkVTT0xVVElPTl9NRURJQV9RVUVSWSkgJChFTkFCTEVfUkVTT1VSQ0VfTE9BRF9T
VEFUSVNUSUNTKSAkKEVOQUJMRV9SRVNPVVJDRV9VU0FHRSkgJChFTkFCTEVfUlVCQkVSX0JBTkRJ
TkcpICQoRU5BQkxFX1NBTkRCT1hfRVhURU5TSU9OUykgJChFTkFCTEVfU0VSVkVSX1BSRUNPTk5F
Q1QpICQoRU5BQkxFX1NFUlZJQ0VfQ09OVFJPTFMpICQoRU5BQkxFX1NFUlZJQ0VfV09SS0VSKSAk
KEVOQUJMRV9TSEFSRUFCTEVfUkVTT1VSQ0UpICQoRU5BQkxFX1NQRUVDSF9TWU5USEVTSVMpICQo
RU5BQkxFX1NUUkVBTVNfQVBJKSAkKEVOQUJMRV9TVkdfRk9OVFMpICQoRU5BQkxFX1RFTEVQSE9O
RV9OVU1CRVJfREVURUNUSU9OKSAkKEVOQUJMRV9URVhUX0FVVE9TSVpJTkcpICQoRU5BQkxFX1RP
VUNIX0VWRU5UUykgJChFTkFCTEVfVVNFUlNFTEVDVF9BTEwpICQoRU5BQkxFX1VTRVJfTUVTU0FH
RV9IQU5ETEVSUykgJChFTkFCTEVfVkFSSUFUSU9OX0ZPTlRTKSAkKEVOQUJMRV9WSURFTykgJChF
TkFCTEVfVklERU9fUFJFU0VOVEFUSU9OX01PREUpICQoRU5BQkxFX1ZJREVPX1RSQUNLKSAkKEVO
QUJMRV9WSURFT19VU0VTX0VMRU1FTlRfRlVMTFNDUkVFTikgJChFTkFCTEVfV0VCX0FSQ0hJVkUp
ICQoRU5BQkxFX1dFQkRSSVZFUl9NT1VTRV9JTlRFUkFDVElPTlMpICQoRU5BQkxFX1dFQkRSSVZF
Ul9LRVlCT0FSRF9JTlRFUkFDVElPTlMpICQoRU5BQkxFX1dFQkRSSVZFUl9UT1VDSF9JTlRFUkFD
VElPTlMpICQoRU5BQkxFX1dFQkdMKSAkKEVOQUJMRV9XRUJHTDIpICQoRU5BQkxFX1dFQkdQVSkg
JChFTkFCTEVfV0VCWFIpICQoRU5BQkxFX1dFQl9BUElfU1RBVElTVElDUykgJChFTkFCTEVfV0VC
X0FVRElPKSAkKEVOQUJMRV9XRUJfQVVUSE4pICQoRU5BQkxFX1dFQl9DUllQVE8pICQoRU5BQkxF
X1dFQl9SVEMpICQoRU5BQkxFX1dJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkgJChFTkFCTEVfWFNM
VCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMtaW5w
dXQueGNmaWxlbGlzdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy1pbnB1
dC54Y2ZpbGVsaXN0CmluZGV4IGZlYTQwNDVkZjM1ZDlhZGYwNDZhMmVmZDZjODhjOGQ4ZDAwZmI3
M2UuLmE2NWNmZDVhOTBiYzg1YmM3MDI1MWNmMGRkZjE0MTQ1ZGU5ZWNmMDcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0Cisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0
CkBAIC0xLDQgKzEsNSBAQAogIyBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGJ5IHRoZSBnZW5lcmF0
ZS14Y2ZpbGVsaXN0cyBzY3JpcHQuCiskKFBST0pFQ1RfRElSKS9Db25maWd1cmF0aW9ucy9GZWF0
dXJlRGVmaW5lcy54Y2NvbmZpZwogJChQUk9KRUNUX0RJUikvRGVyaXZlZFNvdXJjZXMubWFrZQog
JChQUk9KRUNUX0RJUikvS2V5d29yZExvb2t1cEdlbmVyYXRvci5weQogJChQUk9KRUNUX0RJUikv
U2NyaXB0cy9VcGRhdGVDb250ZW50cy5weQpAQCAtODAsNiArODEsNyBAQCAkKFBST0pFQ1RfRElS
KS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRTb3VyY2UuanMKICQoUFJPSkVDVF9ESVIpL2luc3Bl
Y3Rvci9wcm90b2NvbC9BbmltYXRpb24uanNvbgogJChQUk9KRUNUX0RJUikvaW5zcGVjdG9yL3By
b3RvY29sL0FwcGxpY2F0aW9uQ2FjaGUuanNvbgogJChQUk9KRUNUX0RJUikvaW5zcGVjdG9yL3By
b3RvY29sL0F1ZGl0Lmpzb24KKyQoUFJPSkVDVF9ESVIpL2luc3BlY3Rvci9wcm90b2NvbC9Ccm93
c2VyLmpzb24KICQoUFJPSkVDVF9ESVIpL2luc3BlY3Rvci9wcm90b2NvbC9DUFVQcm9maWxlci5q
c29uCiAkKFBST0pFQ1RfRElSKS9pbnNwZWN0b3IvcHJvdG9jb2wvQ1NTLmpzb24KICQoUFJPSkVD
VF9ESVIpL2luc3BlY3Rvci9wcm90b2NvbC9DYW52YXMuanNvbgpAQCAtODksNyArOTEsNiBAQCAk
KFBST0pFQ1RfRElSKS9pbnNwZWN0b3IvcHJvdG9jb2wvRE9NRGVidWdnZXIuanNvbgogJChQUk9K
RUNUX0RJUikvaW5zcGVjdG9yL3Byb3RvY29sL0RPTVN0b3JhZ2UuanNvbgogJChQUk9KRUNUX0RJ
UikvaW5zcGVjdG9yL3Byb3RvY29sL0RhdGFiYXNlLmpzb24KICQoUFJPSkVDVF9ESVIpL2luc3Bl
Y3Rvci9wcm90b2NvbC9EZWJ1Z2dlci5qc29uCi0kKFBST0pFQ1RfRElSKS9pbnNwZWN0b3IvcHJv
dG9jb2wvQnJvd3Nlci5qc29uCiAkKFBST0pFQ1RfRElSKS9pbnNwZWN0b3IvcHJvdG9jb2wvR2Vu
ZXJpY1R5cGVzLmpzb24KICQoUFJPSkVDVF9ESVIpL2luc3BlY3Rvci9wcm90b2NvbC9IZWFwLmpz
b24KICQoUFJPSkVDVF9ESVIpL2luc3BlY3Rvci9wcm90b2NvbC9JbmRleGVkREIuanNvbgpAQCAt
MTE5LDYgKzEyMCw3IEBAICQoUFJPSkVDVF9ESVIpL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGVfanNfYmFja2VuZF9jb21tYW5kcy5weQogJChQUk9KRUNUX0RJUikvaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3IucHkKICQoUFJPSkVDVF9ESVIpL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yX3RlbXBsYXRlcy5weQogJChQUk9KRUNUX0RJUikvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9tb2RlbHMucHkKKyQoUFJPSkVDVF9ESVIpL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vcHJlcHJvY2Vzcy5wbAogJChQUk9KRUNUX0RJUikvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CiAkKFBST0pF
Q1RfRElSKS9wYXJzZXIvS2V5d29yZHMudGFibGUKICQoUFJPSkVDVF9ESVIpL3J1bnRpbWUvQXJy
YXlDb25zdHJ1Y3Rvci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJp
dmVkU291cmNlcy5tYWtlIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1h
a2UKaW5kZXggMDBkMmE1N2IzZWQyZGMzYzI5OTc0Mjk4NGU1MDU3YWE2YTFjM2VkZS4uMjI0YWFk
ZjU2ODk5YTI3YTgyN2Q5Y2QwZTk4Mzg3MjhlM2Q5MDg1MyAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKQEAgLTQ2LDYgKzQ2LDQ1IEBAIGVsc2UKICAgICBERUxF
VEUgPSBybSAtZgogZW5kaWYKIAorUFJFUFJPQ0VTU09SX0RFRklORVMgPSAkKEZFQVRVUkVfREVG
SU5FUykKKworRlJBTUVXT1JLX0ZMQUdTID0gJChzaGVsbCBlY2hvICQoQlVJTFRfUFJPRFVDVFNf
RElSKSAkKEZSQU1FV09SS19TRUFSQ0hfUEFUSFMpICQoU1lTVEVNX0ZSQU1FV09SS19TRUFSQ0hf
UEFUSFMpIHwgcGVybCAtZSAncHJpbnQgIi1GICIgLiBqb2luKCIgLUYgIiwgc3BsaXQoIiAiLCA8
PikpOycpCitIRUFERVJfRkxBR1MgPSAkKHNoZWxsIGVjaG8gJChCVUlMVF9QUk9EVUNUU19ESVIp
ICQoSEVBREVSX1NFQVJDSF9QQVRIUykgJChTWVNURU1fSEVBREVSX1NFQVJDSF9QQVRIUykgfCBw
ZXJsIC1lICdwcmludCAiLUkiIC4gam9pbigiIC1JIiwgc3BsaXQoIiAiLCA8PikpOycpCisKK2lm
bmVxICgkKFNES1JPT1QpLCkKKyAgICBTREtfRkxBR1M9LWlzeXNyb290ICQoU0RLUk9PVCkKK2Vu
ZGlmCisKK2lmZXEgKCQoVVNFX0xMVk1fVEFSR0VUX1RSSVBMRVNfRk9SX0NMQU5HKSxZRVMpCisg
ICAgV0tfQ1VSUkVOVF9BUkNIPSQod29yZCAxLCAkKEFSQ0hTKSkKKyAgICBUQVJHRVRfVFJJUExF
X0ZMQUdTPS10YXJnZXQgJChXS19DVVJSRU5UX0FSQ0gpLSQoTExWTV9UQVJHRVRfVFJJUExFX1ZF
TkRPUiktJChMTFZNX1RBUkdFVF9UUklQTEVfT1NfVkVSU0lPTikkKExMVk1fVEFSR0VUX1RSSVBM
RV9TVUZGSVgpCitlbmRpZgorCitpZmVxICgkKHNoZWxsICQoQ0MpIC1zdGQ9Z251KysxeiAteCBj
KysgLUUgLVAgLWRNICQoU0RLX0ZMQUdTKSAkKFRBUkdFVF9UUklQTEVfRkxBR1MpICQoRlJBTUVX
T1JLX0ZMQUdTKSAkKEhFQURFUl9GTEFHUykgLWluY2x1ZGUgInd0Zi9QbGF0Zm9ybS5oIiAvZGV2
L251bGwgfCBncmVwICcgV1RGX1BMQVRGT1JNX01BQyAnIHwgY3V0IC1kJyAnIC1mMyksIDEpCisg
ICAgUFJFUFJPQ0VTU09SX0RFRklORVMgKz0gV1RGX1BMQVRGT1JNX01BQworZW5kaWYKKworaWZl
cSAoJChzaGVsbCAkKENDKSAtc3RkPWdudSsrMXogLXggYysrIC1FIC1QIC1kTSAkKFNES19GTEFH
UykgJChUQVJHRVRfVFJJUExFX0ZMQUdTKSAkKEZSQU1FV09SS19GTEFHUykgJChIRUFERVJfRkxB
R1MpIC1pbmNsdWRlICJ3dGYvUGxhdGZvcm0uaCIgL2Rldi9udWxsIHwgZ3JlcCAnIFdURl9QTEFU
Rk9STV9JT1NfRkFNSUxZICcgfCBjdXQgLWQnICcgLWYzKSwgMSkKKyAgICBQUkVQUk9DRVNTT1Jf
REVGSU5FUyArPSBXVEZfUExBVEZPUk1fSU9TX0ZBTUlMWQorZW5kaWYKKworaWZlcSAoJChzaGVs
bCAkKENDKSAtc3RkPWdudSsrMXogLXggYysrIC1FIC1QIC1kTSAkKFNES19GTEFHUykgJChUQVJH
RVRfVFJJUExFX0ZMQUdTKSAkKEZSQU1FV09SS19GTEFHUykgJChIRUFERVJfRkxBR1MpIC1pbmNs
dWRlICJ3dGYvUGxhdGZvcm0uaCIgL2Rldi9udWxsIHwgZ3JlcCAnIFVTRV9DRiAnIHwgY3V0IC1k
JyAnIC1mMyksIDEpCisgICAgUFJFUFJPQ0VTU09SX0RFRklORVMgKz0gVVNFX0NGCitlbmRpZgor
CitpZmVxICgkKHNoZWxsICQoQ0MpIC1zdGQ9Z251KysxeiAteCBjKysgLUUgLVAgLWRNICQoU0RL
X0ZMQUdTKSAkKFRBUkdFVF9UUklQTEVfRkxBR1MpICQoRlJBTUVXT1JLX0ZMQUdTKSAkKEhFQURF
Ul9GTEFHUykgLWluY2x1ZGUgInd0Zi9QbGF0Zm9ybS5oIiAvZGV2L251bGwgfCBncmVwIEhBVkVf
T1NfREFSS19NT0RFX1NVUFBPUlQgfCBjdXQgLWQnICcgLWYzKSwgMSkKKyAgICBQUkVQUk9DRVNT
T1JfREVGSU5FUyArPSBIQVZFX09TX0RBUktfTU9ERV9TVVBQT1JUCitlbHNlCitlbmRpZgorCitp
ZmVxICgkKFBMQVRGT1JNX0ZFQVRVUkVfREVGSU5FUyksKQoraWZlcSAoJChPUyksIFdpbmRvd3Nf
TlQpCitQTEFURk9STV9GRUFUVVJFX0RFRklORVMgPSAkKFdFQktJVF9MSUJSQVJJRVMpL3Rvb2xz
L3ZzcHJvcHMvRmVhdHVyZURlZmluZXMucHJvcHMKK2Vsc2UKK1BMQVRGT1JNX0ZFQVRVUkVfREVG
SU5FUyA9IENvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnCitlbmRpZgorZW5k
aWYKKwogIyAtLS0tLS0tLQogCiAuUEhPTlkgOiBhbGwKQEAgLTI0Myw2ICsyODIsOCBAQCBJTlNQ
RUNUT1JfRE9NQUlOUyA6PSBcCiAgICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3Rv
Y29sL0FuaW1hdGlvbi5qc29uIFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJv
dG9jb2wvQXBwbGljYXRpb25DYWNoZS5qc29uIFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9pbnNw
ZWN0b3IvcHJvdG9jb2wvQXVkaXQuanNvbiBcCisgICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVj
dG9yL3Byb3RvY29sL0Jyb3dzZXIuanNvbiBcCisgICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVj
dG9yL3Byb3RvY29sL0NQVVByb2ZpbGVyLmpzb24gXAogICAgICQoSmF2YVNjcmlwdENvcmUpL2lu
c3BlY3Rvci9wcm90b2NvbC9DU1MuanNvbiBcCiAgICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVj
dG9yL3Byb3RvY29sL0NhbnZhcy5qc29uIFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0
b3IvcHJvdG9jb2wvQ29uc29sZS5qc29uIFwKQEAgLTI1MSwzNSArMjkyLDI0IEBAIElOU1BFQ1RP
Ul9ET01BSU5TIDo9IFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wv
RE9NU3RvcmFnZS5qc29uIFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9j
b2wvRGF0YWJhc2UuanNvbiBcCiAgICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Byb3Rv
Y29sL0RlYnVnZ2VyLmpzb24gXAotICAgICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9wcm90
b2NvbC9Ccm93c2VyLmpzb24gXAogICAgICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9wcm90
b2NvbC9HZW5lcmljVHlwZXMuanNvbiBcCiAgICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9y
L3Byb3RvY29sL0hlYXAuanNvbiBcCisgICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3By
b3RvY29sL0luZGV4ZWREQi5qc29uIFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3Iv
cHJvdG9jb2wvSW5zcGVjdG9yLmpzb24gXAogICAgICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rv
ci9wcm90b2NvbC9MYXllclRyZWUuanNvbiBcCisgICAgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVj
dG9yL3Byb3RvY29sL01lbW9yeS5qc29uIFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0
b3IvcHJvdG9jb2wvTmV0d29yay5qc29uIFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0
b3IvcHJvdG9jb2wvUGFnZS5qc29uIFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3Iv
cHJvdG9jb2wvUmVjb3JkaW5nLmpzb24gXAogICAgICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rv
ci9wcm90b2NvbC9SdW50aW1lLmpzb24gXAogICAgICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rv
ci9wcm90b2NvbC9TY3JpcHRQcm9maWxlci5qc29uIFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9p
bnNwZWN0b3IvcHJvdG9jb2wvU2VjdXJpdHkuanNvbiBcCisgICAgJChKYXZhU2NyaXB0Q29yZSkv
aW5zcGVjdG9yL3Byb3RvY29sL1NlcnZpY2VXb3JrZXIuanNvbiBcCiAgICAgJChKYXZhU2NyaXB0
Q29yZSkvaW5zcGVjdG9yL3Byb3RvY29sL1RhcmdldC5qc29uIFwKICAgICAkKEphdmFTY3JpcHRD
b3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wvVGltZWxpbmUuanNvbiBcCiAgICAgJChKYXZhU2NyaXB0
Q29yZSkvaW5zcGVjdG9yL3Byb3RvY29sL1dvcmtlci5qc29uIFwKICMKIAotaWZlcSAoJChmaW5k
c3RyaW5nIEVOQUJMRV9JTkRFWEVEX0RBVEFCQVNFLCQoRkVBVFVSRV9ERUZJTkVTKSksIEVOQUJM
RV9JTkRFWEVEX0RBVEFCQVNFKQotICAgIElOU1BFQ1RPUl9ET01BSU5TIDo9ICQoSU5TUEVDVE9S
X0RPTUFJTlMpICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9wcm90b2NvbC9JbmRleGVkREIu
anNvbgotZW5kaWYKLQotaWZlcSAoJChmaW5kc3RyaW5nIEVOQUJMRV9SRVNPVVJDRV9VU0FHRSwk
KEZFQVRVUkVfREVGSU5FUykpLCBFTkFCTEVfUkVTT1VSQ0VfVVNBR0UpCi0gICAgSU5TUEVDVE9S
X0RPTUFJTlMgOj0gJChJTlNQRUNUT1JfRE9NQUlOUykgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVj
dG9yL3Byb3RvY29sL0NQVVByb2ZpbGVyLmpzb24KLSAgICBJTlNQRUNUT1JfRE9NQUlOUyA6PSAk
KElOU1BFQ1RPUl9ET01BSU5TKSAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvcHJvdG9jb2wv
TWVtb3J5Lmpzb24KLWVuZGlmCi0KLWlmZXEgKCQoZmluZHN0cmluZyBFTkFCTEVfU0VSVklDRV9X
T1JLRVIsJChGRUFUVVJFX0RFRklORVMpKSwgRU5BQkxFX1NFUlZJQ0VfV09SS0VSKQotICAgIElO
U1BFQ1RPUl9ET01BSU5TIDo9ICQoSU5TUEVDVE9SX0RPTUFJTlMpICQoSmF2YVNjcmlwdENvcmUp
L2luc3BlY3Rvci9wcm90b2NvbC9TZXJ2aWNlV29ya2VyLmpzb24KLWVuZGlmCi0KIElOU1BFQ1RP
Ul9HRU5FUkFUT1JfU0NSSVBUUyA9IFwKIAkkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL19faW5pdF9fLnB5IFwKIAkkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5IFwKQEAgLTI5NCw2ICsz
MjQsNyBAQCBJTlNQRUNUT1JfR0VORVJBVE9SX1NDUklQVFMgPSBcCiAJJChKYXZhU2NyaXB0Q29y
ZSkvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5IFwKIAkk
KEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRvci5weSBc
CiAJJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9tb2RlbHMucHkg
XAorCSQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vcHJlcHJvY2Vz
cy5wbCBcCiAJJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5IFwKIAkkKEphdmFTY3JpcHRDb3JlX1NDUklQVFNf
RElSKS9nZW5lcmF0ZS1jb21iaW5lZC1pbnNwZWN0b3ItanNvbi5weSBcCiAjCkBAIC0zMDIsNyAr
MzMzLDYgQEAgSU5TUEVDVE9SX0dFTkVSQVRPUl9TQ1JJUFRTID0gXAogIyBnZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkgYW5kIC4vQ29tYmluZWREb21haW5zLmpzb24/CiBJ
TlNQRUNUT1JfRElTUEFUQ0hFUl9GSUxFUyA9IFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yQWx0
ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmggXAotICAgIGluc3BlY3Rvci9JbnNwZWN0b3JCYWNr
ZW5kQ29tbWFuZHMuanMgXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cnMuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmggXAog
ICAgIGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZERpc3BhdGNoZXJzLmNwcCBcCkBAIC0zMTIs
NyArMzQyLDcgQEAgSU5TUEVDVE9SX0RJU1BBVENIRVJfRklMRVMgPSBcCiAjCiBJTlNQRUNUT1Jf
RElTUEFUQ0hFUl9GSUxFU19QQVRURVJOUyA9ICQoc3Vic3QgLiwlLCQoSU5TUEVDVE9SX0RJU1BB
VENIRVJfRklMRVMpKQogCi1hbGwgOiAkKElOU1BFQ1RPUl9ESVNQQVRDSEVSX0ZJTEVTKQorYWxs
IDogJChJTlNQRUNUT1JfRElTUEFUQ0hFUl9GSUxFUykgaW5zcGVjdG9yL0luc3BlY3RvckJhY2tl
bmRDb21tYW5kcy5qcwogCiAjIFRoZSBjb21iaW5lZCBKU09OIGZpbGUgZGVwZW5kcyBvbiB0aGUg
YWN0dWFsIHNldCBvZiBkb21haW5zIGFuZCB0aGVpciBmaWxlIGNvbnRlbnRzLCBzbyB0aGF0CiAj
IGFkZGluZywgbW9kaWZ5aW5nLCBvciByZW1vdmluZyBkb21haW5zIHdpbGwgdHJpZ2dlciByZWdl
bmVyYXRpb24gb2YgaW5zcGVjdG9yIGZpbGVzLgpAQCAtMzI4LDYgKzM1OCwxMiBAQCBDb21iaW5l
ZERvbWFpbnMuanNvbiA6ICQoSmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVIpL2dlbmVyYXRlLWNv
bWJpbmVkLWluc3BlY3RvcgogJChJTlNQRUNUT1JfRElTUEFUQ0hFUl9GSUxFU19QQVRURVJOUykg
OiBDb21iaW5lZERvbWFpbnMuanNvbiAkKElOU1BFQ1RPUl9HRU5FUkFUT1JfU0NSSVBUUykKIAkk
KFBZVEhPTikgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5IC0tZnJhbWV3b3JrIEphdmFTY3JpcHRDb3JlIC0t
b3V0cHV0RGlyIGluc3BlY3RvciAuL0NvbWJpbmVkRG9tYWlucy5qc29uCiAKK2luc3BlY3Rvci9J
bnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMgOiBDb21iaW5lZERvbWFpbnMuanNvbiAkKElOU1BF
Q1RPUl9HRU5FUkFUT1JfU0NSSVBUUykgJChQTEFURk9STV9GRUFUVVJFX0RFRklORVMpCisJJChQ
WVRIT04pICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weSAtLWZyYW1ld29yayBXZWJJbnNwZWN0b3JVSSAtLW91
dHB1dERpciBpbnNwZWN0b3IgLi9Db21iaW5lZERvbWFpbnMuanNvbgorCUBlY2hvIFByZS1wcm9j
ZXNzaW5nIEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy4uLgorCSQoUEVSTCkgJChKYXZhU2NyaXB0
Q29yZSkvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9wcmVwcm9jZXNzLnBsIC0taW5wdXQgaW5z
cGVjdG9yL0luc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcy5pbiAtLWRlZmluZXMgIiQoUFJFUFJP
Q0VTU09SX0RFRklORVMpIiAtLW91dHB1dCBpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZENvbW1h
bmRzLmpzCisJJChERUxFVEUpIGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMu
aW4KKwogSW5qZWN0ZWRTY3JpcHRTb3VyY2UuaCA6IGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdFNv
dXJjZS5qcyAkKEphdmFTY3JpcHRDb3JlX1NDUklQVFNfRElSKS9qc21pbi5weSAkKEphdmFTY3Jp
cHRDb3JlX1NDUklQVFNfRElSKS94eGQucGwKIAllY2hvICIvLyMgc291cmNlVVJMPV9fSW5qZWN0
ZWRTY3JpcHRfSW5qZWN0ZWRTY3JpcHRTb3VyY2UuanMiID4gLi9JbmplY3RlZFNjcmlwdFNvdXJj
ZS5taW4uanMKIAkkKFBZVEhPTikgJChKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUikvanNtaW4u
cHkgPCAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRTb3VyY2UuanMg
Pj4gLi9JbmplY3RlZFNjcmlwdFNvdXJjZS5taW4uanMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9TY3JpcHRzL2dlbmVyYXRlLWRlcml2ZWQtc291cmNlcy5zaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9TY3JpcHRzL2dlbmVyYXRlLWRlcml2ZWQtc291cmNlcy5zaAppbmRleCA5
MzYxZjU4ZWM0ZmUyZjdmYzlhZjJjMTEwYjk0MmExODkwZWFhMGZkLi4yNDE0NzY1NDMxZDliYjVk
NDFjZTQ4NDA1OWI5Zjk1NTk0ZGVlYTcwIDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvU2NyaXB0cy9nZW5lcmF0ZS1kZXJpdmVkLXNvdXJjZXMuc2gKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL1NjcmlwdHMvZ2VuZXJhdGUtZGVyaXZlZC1zb3VyY2VzLnNoCkBAIC0xMSw0ICsx
MSw4IEBAIGNkICIke0JVSUxUX1BST0RVQ1RTX0RJUn0vRGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlw
dENvcmUiCiBleHBvcnQgSmF2YVNjcmlwdENvcmU9IkphdmFTY3JpcHRDb3JlIgogZXhwb3J0IEJV
SUxUX1BST0RVQ1RTX0RJUj0iLi4vLi4iCiAKK2lmIFsgISAkQ0MgXTsgdGhlbgorICAgIGV4cG9y
dCBDQz0iYHhjcnVuIC1maW5kIGNsYW5nYCIKK2ZpCisKIG1ha2UgLS1uby1idWlsdGluLXJ1bGVz
IC1mICJKYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlIiAtaiBgL3Vzci9zYmluL3N5
c2N0bCAtbiBody5uY3B1YCAiJHtBUkdTW0BdfSIKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvQ1BVUHJvZmlsZXIuanNvbiBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvQ1BVUHJvZmlsZXIuanNvbgppbmRleCBjZmFj
ZDAxZGI3MzBiNmM0YzYxZGExZDRkZjVkYzg2ZjNiMzhlYzBjLi5hZGM2YzZhZmVkNzIwZWUyZTFl
YWYwZWVmZDFmNjMzNjY5Y2ZiNjU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3Byb3RvY29sL0NQVVByb2ZpbGVyLmpzb24KKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9DUFVQcm9maWxlci5qc29uCkBAIC0xLDcgKzEsNyBA
QAogewogICAgICJkb21haW4iOiAiQ1BVUHJvZmlsZXIiLAogICAgICJkZXNjcmlwdGlvbiI6ICJD
UFVQcm9maWxlciBkb21haW4gZXhwb3NlcyBjcHUgdXNhZ2UgdHJhY2tpbmcuIiwKLSAgICAiZmVh
dHVyZUd1YXJkIjogIkVOQUJMRShSRVNPVVJDRV9VU0FHRSkiLAorICAgICJjb25kaXRpb24iOiAi
ZGVmaW5lZChFTkFCTEVfUkVTT1VSQ0VfVVNBR0UpICYmIEVOQUJMRV9SRVNPVVJDRV9VU0FHRSIs
CiAgICAgImRlYnVnZ2FibGVUeXBlcyI6IFsicGFnZSIsICJ3ZWItcGFnZSJdLAogICAgICJ0YXJn
ZXRUeXBlcyI6IFsicGFnZSJdLAogICAgICJ0eXBlcyI6IFsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvQ2FudmFzLmpzb24gYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL0NhbnZhcy5qc29uCmluZGV4IGFiNTQ0NDBm
MDRhZjEwMzU1MzAzOWEzZGZhNzQ4N2EzZmIyMmRmMmUuLjA4YzEwMDUxNzZhOTYwZTczNDFkNDBh
OWQ3NTI1ZmE2NTFiMzRiZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvcHJvdG9jb2wvQ2FudmFzLmpzb24KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9wcm90b2NvbC9DYW52YXMuanNvbgpAQCAtMTEsNiArMTEsNyBAQAogICAgICAgICB9
LAogICAgICAgICB7CiAgICAgICAgICAgICAiaWQiOiAiUHJvZ3JhbUlkIiwKKyAgICAgICAgICAg
ICJjb25kaXRpb24iOiAiKGRlZmluZWQoRU5BQkxFX1dFQkdMKSAmJiBFTkFCTEVfV0VCR0wpIHx8
IChkZWZpbmVkKEVOQUJMRV9XRUJHUFUpICYmIEVOQUJMRV9XRUJHUFUpIiwKICAgICAgICAgICAg
ICJ0eXBlIjogInN0cmluZyIsCiAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIHNo
YWRlciBwcm9ncmFtIGlkZW50aWZpZXIuIgogICAgICAgICB9LApAQCAtMjIsMTEgKzIzLDEzIEBA
CiAgICAgICAgIH0sCiAgICAgICAgIHsKICAgICAgICAgICAgICJpZCI6ICJQcm9ncmFtVHlwZSIs
CisgICAgICAgICAgICAiY29uZGl0aW9uIjogIihkZWZpbmVkKEVOQUJMRV9XRUJHTCkgJiYgRU5B
QkxFX1dFQkdMKSB8fCAoZGVmaW5lZChFTkFCTEVfV0VCR1BVKSAmJiBFTkFCTEVfV0VCR1BVKSIs
CiAgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAogICAgICAgICAgICAgImVudW0iOiBbImNv
bXB1dGUiLCAicmVuZGVyIl0KICAgICAgICAgfSwKICAgICAgICAgewogICAgICAgICAgICAgImlk
IjogIlNoYWRlclR5cGUiLAorICAgICAgICAgICAgImNvbmRpdGlvbiI6ICIoZGVmaW5lZChFTkFC
TEVfV0VCR0wpICYmIEVOQUJMRV9XRUJHTCkgfHwgKGRlZmluZWQoRU5BQkxFX1dFQkdQVSkgJiYg
RU5BQkxFX1dFQkdQVSkiLAogICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKICAgICAgICAg
ICAgICJlbnVtIjogWyJjb21wdXRlIiwgImZyYWdtZW50IiwgInZlcnRleCJdCiAgICAgICAgIH0s
CkBAIC02MSw4ICs2NCw5IEBACiAgICAgICAgIH0sCiAgICAgICAgIHsKICAgICAgICAgICAgICJp
ZCI6ICJTaGFkZXJQcm9ncmFtIiwKLSAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCiAgICAg
ICAgICAgICAiZGVzY3JpcHRpb24iOiAiSW5mb3JtYXRpb24gYWJvdXQgYSBXZWJHTC9XZWJHTDIg
c2hhZGVyIHByb2dyYW0gb3IgV2ViR1BVIHNoYWRlciBwaXBlbGluZS4iLAorICAgICAgICAgICAg
ImNvbmRpdGlvbiI6ICIoZGVmaW5lZChFTkFCTEVfV0VCR0wpICYmIEVOQUJMRV9XRUJHTCkgfHwg
KGRlZmluZWQoRU5BQkxFX1dFQkdQVSkgJiYgRU5BQkxFX1dFQkdQVSkiLAorICAgICAgICAgICAg
InR5cGUiOiAib2JqZWN0IiwKICAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwogICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAicHJvZ3JhbUlkIiwgIiRyZWYiOiAiUHJvZ3JhbUlkIiB9LAogICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJvZ3JhbVR5cGUiLCAiJHJlZiI6ICJQcm9ncmFtVHlw
ZSIgfSwKQEAgLTE0Nyw2ICsxNTEsNyBAQAogICAgICAgICB7CiAgICAgICAgICAgICAibmFtZSI6
ICJyZXF1ZXN0U2hhZGVyU291cmNlIiwKICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJSZXF1
ZXN0cyB0aGUgc291cmNlIG9mIHRoZSBzaGFkZXIgb2YgdGhlIGdpdmVuIHR5cGUgZnJvbSB0aGUg
cHJvZ3JhbSB3aXRoIHRoZSBnaXZlbiBpZC4iLAorICAgICAgICAgICAgImNvbmRpdGlvbiI6ICIo
ZGVmaW5lZChFTkFCTEVfV0VCR0wpICYmIEVOQUJMRV9XRUJHTCkgfHwgKGRlZmluZWQoRU5BQkxF
X1dFQkdQVSkgJiYgRU5BQkxFX1dFQkdQVSkiLAogICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBb
CiAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcm9ncmFtSWQiLCAiJHJlZiI6ICJQcm9ncmFt
SWQiIH0sCiAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzaGFkZXJUeXBlIiwgIiRyZWYiOiAi
U2hhZGVyVHlwZSIgfQpAQCAtMTU4LDYgKzE2Myw3IEBACiAgICAgICAgIHsKICAgICAgICAgICAg
ICJuYW1lIjogInVwZGF0ZVNoYWRlciIsCiAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQ29t
cGlsZXMgYW5kIGxpbmtzIHRoZSBzaGFkZXIgd2l0aCBpZGVudGlmaWVyIGFuZCB0eXBlIHdpdGgg
dGhlIGdpdmVuIHNvdXJjZSBjb2RlLiIsCisgICAgICAgICAgICAiY29uZGl0aW9uIjogIihkZWZp
bmVkKEVOQUJMRV9XRUJHTCkgJiYgRU5BQkxFX1dFQkdMKSB8fCAoZGVmaW5lZChFTkFCTEVfV0VC
R1BVKSAmJiBFTkFCTEVfV0VCR1BVKSIsCiAgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKICAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogInByb2dyYW1JZCIsICIkcmVmIjogIlByb2dyYW1JZCIg
fSwKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNoYWRlclR5cGUiLCAiJHJlZiI6ICJTaGFk
ZXJUeXBlIiB9LApAQCAtMTY3LDYgKzE3Myw3IEBACiAgICAgICAgIHsKICAgICAgICAgICAgICJu
YW1lIjogInNldFNoYWRlclByb2dyYW1EaXNhYmxlZCIsCiAgICAgICAgICAgICAiZGVzY3JpcHRp
b24iOiAiRW5hYmxlL2Rpc2FibGUgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGdpdmVuIHNoYWRlciBw
cm9ncmFtLiIsCisgICAgICAgICAgICAiY29uZGl0aW9uIjogImRlZmluZWQoRU5BQkxFX1dFQkdM
KSAmJiBFTkFCTEVfV0VCR0wiLAogICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCiAgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJwcm9ncmFtSWQiLCAiJHJlZiI6ICJQcm9ncmFtSWQiIH0sCiAg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkaXNhYmxlZCIsICJ0eXBlIjogImJvb2xlYW4iIH0K
QEAgLTE3NSw2ICsxODIsNyBAQAogICAgICAgICB7CiAgICAgICAgICAgICAibmFtZSI6ICJzZXRT
aGFkZXJQcm9ncmFtSGlnaGxpZ2h0ZWQiLAogICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkVu
YWJsZS9kaXNhYmxlIGhpZ2hsaWdodGluZyBvZiB0aGUgZ2l2ZW4gc2hhZGVyIHByb2dyYW0uIiwK
KyAgICAgICAgICAgICJjb25kaXRpb24iOiAiZGVmaW5lZChFTkFCTEVfV0VCR0wpICYmIEVOQUJM
RV9XRUJHTCIsCiAgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKICAgICAgICAgICAgICAgICB7
ICJuYW1lIjogInByb2dyYW1JZCIsICIkcmVmIjogIlByb2dyYW1JZCIgfSwKICAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogImhpZ2hsaWdodGVkIiwgInR5cGUiOiAiYm9vbGVhbiIgfQpAQCAtMjM4
LDEyICsyNDYsMTQgQEAKICAgICAgICAgfSwKICAgICAgICAgewogICAgICAgICAgICAgIm5hbWUi
OiAicHJvZ3JhbUNyZWF0ZWQiLAorICAgICAgICAgICAgImNvbmRpdGlvbiI6ICIoZGVmaW5lZChF
TkFCTEVfV0VCR0wpICYmIEVOQUJMRV9XRUJHTCkgfHwgKGRlZmluZWQoRU5BQkxFX1dFQkdQVSkg
JiYgRU5BQkxFX1dFQkdQVSkiLAogICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCiAgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJzaGFkZXJQcm9ncmFtIiwgIiRyZWYiOiAiU2hhZGVyUHJvZ3Jh
bSIgfQogICAgICAgICAgICAgXQogICAgICAgICB9LAogICAgICAgICB7CiAgICAgICAgICAgICAi
bmFtZSI6ICJwcm9ncmFtRGVsZXRlZCIsCisgICAgICAgICAgICAiY29uZGl0aW9uIjogIihkZWZp
bmVkKEVOQUJMRV9XRUJHTCkgJiYgRU5BQkxFX1dFQkdMKSB8fCAoZGVmaW5lZChFTkFCTEVfV0VC
R1BVKSAmJiBFTkFCTEVfV0VCR1BVKSIsCiAgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKICAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogInByb2dyYW1JZCIsICIkcmVmIjogIlByb2dyYW1JZCIg
fQogICAgICAgICAgICAgXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9wcm90b2NvbC9ET00uanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
cHJvdG9jb2wvRE9NLmpzb24KaW5kZXggMzhjYjQ4YmVkZjJiMTY4MTQ5ZmY3OTQyM2I3ZmFmYzFl
NjNjZThiMy4uMzI5YjMyNTA2YzhjNmIwNDFhYTVjZTRlMGI2MWE2NzIzNGU3YjI4MCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9ET00uanNvbgor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL0RPTS5qc29uCkBA
IC0zOTksNiArMzk5LDE2IEBACiAgICAgICAgIHsKICAgICAgICAgICAgICJuYW1lIjogInNldElu
c3BlY3RNb2RlRW5hYmxlZCIsCiAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRW50ZXJzIHRo
ZSAnaW5zcGVjdCcgbW9kZS4gSW4gdGhpcyBtb2RlLCBlbGVtZW50cyB0aGF0IHVzZXIgaXMgaG92
ZXJpbmcgb3ZlciBhcmUgaGlnaGxpZ2h0ZWQuIEJhY2tlbmQgdGhlbiBnZW5lcmF0ZXMgJ2luc3Bl
Y3QnIGNvbW1hbmQgdXBvbiBlbGVtZW50IHNlbGVjdGlvbi4iLAorICAgICAgICAgICAgImNvbmRp
dGlvbiI6ICJkZWZpbmVkKFdURl9QTEFURk9STV9JT1NfRkFNSUxZKSAmJiBXVEZfUExBVEZPUk1f
SU9TX0ZBTUlMWSIsCisgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogImVuYWJsZWQiLCAidHlwZSI6ICJib29sZWFuIiwgImRlc2NyaXB0aW9uIjog
IlRydWUgdG8gZW5hYmxlIGluc3BlY3Rpb24gbW9kZSwgZmFsc2UgdG8gZGlzYWJsZSBpdC4iIH0s
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJoaWdobGlnaHRDb25maWciLCAiJHJlZiI6ICJI
aWdobGlnaHRDb25maWciLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiQSBkZXNj
cmlwdG9yIGZvciB0aGUgaGlnaGxpZ2h0IGFwcGVhcmFuY2Ugb2YgaG92ZXJlZC1vdmVyIG5vZGVz
LiBNYXkgYmUgb21pdHRlZCBpZiA8Y29kZT5lbmFibGVkID09IGZhbHNlPC9jb2RlPi4iIH0KKyAg
ICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAi
c2V0SW5zcGVjdE1vZGVFbmFibGVkIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJFbnRl
cnMgdGhlICdpbnNwZWN0JyBtb2RlLiBJbiB0aGlzIG1vZGUsIGVsZW1lbnRzIHRoYXQgdXNlciBp
cyBob3ZlcmluZyBvdmVyIGFyZSBoaWdobGlnaHRlZC4gQmFja2VuZCB0aGVuIGdlbmVyYXRlcyAn
aW5zcGVjdCcgY29tbWFuZCB1cG9uIGVsZW1lbnQgc2VsZWN0aW9uLiIsCisgICAgICAgICAgICAi
Y29uZGl0aW9uIjogIiEoZGVmaW5lZChXVEZfUExBVEZPUk1fSU9TX0ZBTUlMWSkgJiYgV1RGX1BM
QVRGT1JNX0lPU19GQU1JTFkpIiwKICAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwogICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAiZW5hYmxlZCIsICJ0eXBlIjogImJvb2xlYW4iLCAiZGVzY3Jp
cHRpb24iOiAiVHJ1ZSB0byBlbmFibGUgaW5zcGVjdGlvbiBtb2RlLCBmYWxzZSB0byBkaXNhYmxl
IGl0LiIgfSwKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImhpZ2hsaWdodENvbmZpZyIsICIk
cmVmIjogIkhpZ2hsaWdodENvbmZpZyIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6
ICJBIGRlc2NyaXB0b3IgZm9yIHRoZSBoaWdobGlnaHQgYXBwZWFyYW5jZSBvZiBob3ZlcmVkLW92
ZXIgbm9kZXMuIE1heSBiZSBvbWl0dGVkIGlmIDxjb2RlPmVuYWJsZWQgPT0gZmFsc2U8L2NvZGU+
LiIgfSwKQEAgLTY4OCw2ICs2OTgsNyBAQAogICAgICAgICB7CiAgICAgICAgICAgICAibmFtZSI6
ICJwb3dlckVmZmljaWVudFBsYXliYWNrU3RhdGVDaGFuZ2VkIiwKICAgICAgICAgICAgICJkZXNj
cmlwdGlvbiI6ICJDYWxsZWQgd2hlbiBhbiBlbGVtZW50IGVudGVycy9leGl0cyBhIHBvd2VyIGVm
ZmljaWVudCBwbGF5YmFjayBzdGF0ZS4iLAorICAgICAgICAgICAgImNvbmRpdGlvbiI6ICJkZWZp
bmVkKEVOQUJMRV9WSURFTykgJiYgRU5BQkxFX1ZJREVPIiwKICAgICAgICAgICAgICJwYXJhbWV0
ZXJzIjogWwogICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm9kZUlkIiwgIiRyZWYiOiAiTm9k
ZUlkIiB9LAogICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgIiRyZWYiOiAi
TmV0d29yay5UaW1lc3RhbXAiIH0sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3Byb3RvY29sL0luZGV4ZWREQi5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9wcm90b2NvbC9JbmRleGVkREIuanNvbgppbmRleCA5ZDIzMDA4OTMwNzE1YWY4
ZTRkMzBkMDc0NmI2NWZlOTI3NDBiNjhkLi45NzFlNzAyN2IwM2NmM2I5ZDQzODgxNThmN2YxMTBl
NDNlZjdhYzk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3By
b3RvY29sL0luZGV4ZWREQi5qc29uCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3IvcHJvdG9jb2wvSW5kZXhlZERCLmpzb24KQEAgLTEsNiArMSw2IEBACiB7CiAgICAgImRvbWFp
biI6ICJJbmRleGVkREIiLAotICAgICJmZWF0dXJlR3VhcmQiOiAiRU5BQkxFKElOREVYRURfREFU
QUJBU0UpIiwKKyAgICAiY29uZGl0aW9uIjogImRlZmluZWQoRU5BQkxFX0lOREVYRURfREFUQUJB
U0UpICYmIEVOQUJMRV9JTkRFWEVEX0RBVEFCQVNFIiwKICAgICAiZGVidWdnYWJsZVR5cGVzIjog
WyJwYWdlIiwgIndlYi1wYWdlIl0sCiAgICAgInRhcmdldFR5cGVzIjogWyJwYWdlIl0sCiAgICAg
InR5cGVzIjogWwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9w
cm90b2NvbC9JbnNwZWN0b3IuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
cHJvdG9jb2wvSW5zcGVjdG9yLmpzb24KaW5kZXggMmJiOGQ2Mjg1NWE2ODg2NjY0MThlODVlZGMz
YzRkYTNmNjZjYjMxYy4uN2FlMmU5OTMxZjFiYzg2YzljZmU4MTM0M2YzZmI2YWVmYjY2MTQwNSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9JbnNw
ZWN0b3IuanNvbgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29s
L0luc3BlY3Rvci5qc29uCkBAIC0zMyw2ICszMyw3IEBACiAgICAgICAgIHsKICAgICAgICAgICAg
ICJuYW1lIjogImFjdGl2YXRlRXh0cmFEb21haW5zIiwKICAgICAgICAgICAgICJkZXNjcmlwdGlv
biI6ICJGaXJlZCB3aGVuIHRoZSBiYWNrZW5kIGhhcyBhbHRlcm5hdGUgZG9tYWlucyB0aGF0IG5l
ZWQgdG8gYmUgYWN0aXZhdGVkLiIsCisgICAgICAgICAgICAiY29uZGl0aW9uIjogImRlZmluZWQo
RU5BQkxFX0lOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpICYmIEVOQUJMRV9JTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTIiwKICAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwog
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZG9tYWlucyIsICJ0eXBlIjogImFycmF5IiwgIml0
ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0sICJkZXNjcmlwdGlvbiI6ICJEb21haW4gbmFtZXMg
dGhhdCBuZWVkIGFjdGl2YXRpb24iIH0KICAgICAgICAgICAgIF0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvTWVtb3J5Lmpzb24gYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL01lbW9yeS5qc29uCmluZGV4IDBjM2Q5
MTQzODcxOWFlOWY4YWE0ZWQ2NWRjOTNjNzU1YmM0ZGM1NTMuLjhiZWFhNDAzMDQwODE0YzBiODlk
NjdlNGVhOTk2Mjg2NDNjMGM1N2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvcHJvdG9jb2wvTWVtb3J5Lmpzb24KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9wcm90b2NvbC9NZW1vcnkuanNvbgpAQCAtMSw3ICsxLDcgQEAKIHsKICAgICAi
ZG9tYWluIjogIk1lbW9yeSIsCiAgICAgImRlc2NyaXB0aW9uIjogIk1lbW9yeSBkb21haW4gZXhw
b3NlcyBwYWdlIG1lbW9yeSB0cmFja2luZy4iLAotICAgICJmZWF0dXJlR3VhcmQiOiAiRU5BQkxF
KFJFU09VUkNFX1VTQUdFKSIsCisgICAgImNvbmRpdGlvbiI6ICJkZWZpbmVkKEVOQUJMRV9SRVNP
VVJDRV9VU0FHRSkgJiYgRU5BQkxFX1JFU09VUkNFX1VTQUdFIiwKICAgICAiZGVidWdnYWJsZVR5
cGVzIjogWyJwYWdlIiwgIndlYi1wYWdlIl0sCiAgICAgInRhcmdldFR5cGVzIjogWyJwYWdlIl0s
CiAgICAgInR5cGVzIjogWwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9wcm90b2NvbC9QYWdlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3Byb3RvY29sL1BhZ2UuanNvbgppbmRleCBkMjc1MTJhNGYwMDc3OWI4ZjExNzE5OTk5NTNmZGM3
NjEwN2E5ODE1Li40ZjcwOTc3MWRjM2QwNjExZmZmYzk1OTIxZTM4YjIwNjQ5YWViZDljIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL1BhZ2UuanNv
bgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL1BhZ2UuanNv
bgpAQCAtNDUsNiArNDUsNyBAQAogICAgICAgICB7CiAgICAgICAgICAgICAiaWQiOiAiQXBwZWFy
YW5jZSIsCiAgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgImNvbmRp
dGlvbiI6ICIoZGVmaW5lZChFTkFCTEVfREFSS19NT0RFX0NTUykgJiYgRU5BQkxFX0RBUktfTU9E
RV9DU1MpIHx8IChkZWZpbmVkKEhBVkVfT1NfREFSS19NT0RFX1NVUFBPUlQpICYmIEhBVkVfT1Nf
REFSS19NT0RFX1NVUFBPUlQpIiwKICAgICAgICAgICAgICJlbnVtIjogWyJMaWdodCIsICJEYXJr
Il0sCiAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiUGFnZSBhcHBlYXJhbmNlIG5hbWUuIgog
ICAgICAgICB9LApAQCAtMjI5LDYgKzIzMCw3IEBACiAgICAgICAgIHsKICAgICAgICAgICAgICJu
YW1lIjogInNldFNob3dSdWxlcnMiLAogICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlJlcXVl
c3RzIHRoYXQgYmFja2VuZCBkcmF3IHJ1bGVycyBpbiB0aGUgaW5zcGVjdG9yIG92ZXJsYXkiLAor
ICAgICAgICAgICAgImNvbmRpdGlvbiI6ICIhKGRlZmluZWQoV1RGX1BMQVRGT1JNX0lPU19GQU1J
TFkpICYmIFdURl9QTEFURk9STV9JT1NfRkFNSUxZKSIsCiAgICAgICAgICAgICAicGFyYW1ldGVy
cyI6IFsKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInJlc3VsdCIsICJ0eXBlIjogImJvb2xl
YW4iLCAiZGVzY3JpcHRpb24iOiAiVHJ1ZSBmb3Igc2hvd2luZyBydWxlcnMiIH0KICAgICAgICAg
ICAgIF0KQEAgLTI1MCw2ICsyNTIsNyBAQAogICAgICAgICB7CiAgICAgICAgICAgICAibmFtZSI6
ICJzZXRGb3JjZWRBcHBlYXJhbmNlIiwKICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJGb3Jj
ZXMgdGhlIGdpdmVuIGFwcGVhcmFuY2UgZm9yIHRoZSBwYWdlLiIsCisgICAgICAgICAgICAiY29u
ZGl0aW9uIjogIihkZWZpbmVkKEVOQUJMRV9EQVJLX01PREVfQ1NTKSAmJiBFTkFCTEVfREFSS19N
T0RFX0NTUykgfHwgKGRlZmluZWQoSEFWRV9PU19EQVJLX01PREVfU1VQUE9SVCkgJiYgSEFWRV9P
U19EQVJLX01PREVfU1VQUE9SVCkiLAogICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCiAgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJhcHBlYXJhbmNlIiwgIiRyZWYiOiAiQXBwZWFyYW5jZSIs
ICJkZXNjcmlwdGlvbiI6ICJBcHBlYXJhbmNlIG5hbWUgdG8gZm9yY2UuIEVtcHR5IHN0cmluZyBk
aXNhYmxlcyB0aGUgb3ZlcnJpZGUuIiB9CiAgICAgICAgICAgICBdCkBAIC0yODEsNiArMjg0LDcg
QEAKICAgICAgICAgewogICAgICAgICAgICAgIm5hbWUiOiAiYXJjaGl2ZSIsCiAgICAgICAgICAg
ICAiZGVzY3JpcHRpb24iOiAiR3JhYiBhbiBhcmNoaXZlIG9mIHRoZSBwYWdlLiIsCisgICAgICAg
ICAgICAiY29uZGl0aW9uIjogIihkZWZpbmVkKEVOQUJMRV9XRUJfQVJDSElWRSkgJiYgRU5BQkxF
X1dFQl9BUkNISVZFKSAmJiAoZGVmaW5lZChVU0VfQ0YpICYmIFVTRV9DRikiLAogICAgICAgICAg
ICAgInJldHVybnMiOiBbCiAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhIiwgInR5cGUi
OiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIkJhc2U2NC1lbmNvZGVkIHdlYiBhcmNoaXZlLiIg
fQogICAgICAgICAgICAgXQpAQCAtMzQ1LDYgKzM0OSw3IEBACiAgICAgICAgIHsKICAgICAgICAg
ICAgICJuYW1lIjogImRlZmF1bHRBcHBlYXJhbmNlRGlkQ2hhbmdlIiwKICAgICAgICAgICAgICJk
ZXNjcmlwdGlvbiI6ICJGaXJlZCB3aGVuIHBhZ2UncyBkZWZhdWx0IGFwcGVhcmFuY2UgY2hhbmdl
cywgZXZlbiBpZiB0aGVyZSBpcyBhIGZvcmNlZCBhcHBlYXJhbmNlLiIsCisgICAgICAgICAgICAi
Y29uZGl0aW9uIjogIihkZWZpbmVkKEVOQUJMRV9EQVJLX01PREVfQ1NTKSAmJiBFTkFCTEVfREFS
S19NT0RFX0NTUykgfHwgKGRlZmluZWQoSEFWRV9PU19EQVJLX01PREVfU1VQUE9SVCkgJiYgSEFW
RV9PU19EQVJLX01PREVfU1VQUE9SVCkiLAogICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCiAg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJhcHBlYXJhbmNlIiwgIiRyZWYiOiAiQXBwZWFyYW5j
ZSIsICJkZXNjcmlwdGlvbiI6ICJOYW1lIG9mIHRoZSBhcHBlYXJhbmNlIHRoYXQgaXMgYWN0aXZl
IChub3QgY29uc2lkZXJpbmcgYW55IGZvcmNlZCBhcHBlYXJhbmNlLikiIH0KICAgICAgICAgICAg
IF0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wv
U2VydmljZVdvcmtlci5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90
b2NvbC9TZXJ2aWNlV29ya2VyLmpzb24KaW5kZXggOGFjM2Q0ZjdkNmIyMjBhOTRkMmYxNGZiN2I2
MjhlYTdhNWY4MjQwNS4uZDAzMzFiZTE3MGViODQ3M2IxYjdmNjI1NzYxMDQxOWNjMDA2MWI4MCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9TZXJ2
aWNlV29ya2VyLmpzb24KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90
b2NvbC9TZXJ2aWNlV29ya2VyLmpzb24KQEAgLTEsNiArMSw3IEBACiB7CiAgICAgImRvbWFpbiI6
ICJTZXJ2aWNlV29ya2VyIiwKICAgICAiZGVzY3JpcHRpb24iOiAiQWN0aW9ucyBhbmQgZXZlbnRz
IHJlbGF0ZWQgdG8gdGhlIGluc3BlY3RlZCBzZXJ2aWNlIHdvcmtlci4iLAorICAgICJjb25kaXRp
b24iOiAiZGVmaW5lZChFTkFCTEVfU0VSVklDRV9XT1JLRVIpICYmIEVOQUJMRV9TRVJWSUNFX1dP
UktFUiIsCiAgICAgImRlYnVnZ2FibGVUeXBlcyI6IFsic2VydmljZS13b3JrZXIiXSwKICAgICAi
dGFyZ2V0VHlwZXMiOiBbInNlcnZpY2Utd29ya2VyIl0sCiAgICAgInR5cGVzIjogWwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vY3Bw
X2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weQppbmRleCA5NmI1NWU0
MTYyYzY2ODA0OWNhYTY0NzM2YjY0MTlhZjQ0NTY4OGRiLi5kMGM3YmU2ZDQ5MTY4Y2E2OTM1M2Vk
YzQyZjNiMmI1ZjIzNGQzY2U4IDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weQorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJh
dG9yX3RlbXBsYXRlcy5weQpAQCAtMTA4LDcgKzEwOCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNl
dEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRj
aGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVy
bmF0ZURpc3BhdGNoZXI7IH0KIHByaXZhdGU6CiAgICAgQWx0ZXJuYXRlJHtkb21haW5OYW1lfUJh
Y2tlbmREaXNwYXRjaGVyKiBtX2FsdGVybmF0ZURpc3BhdGNoZXIgeyBudWxscHRyIH07Ci0jZW5k
aWYiIiIpCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
IiIiKQogCiAgICAgQmFja2VuZERpc3BhdGNoZXJIZWFkZXJBc3luY0NvbW1hbmREZWNsYXJhdGlv
biA9ICgKICAgICAiIiIgICAgJHtjbGFzc0FuZEV4cG9ydE1hY3JvfSAke2NhbGxiYWNrTmFtZX0g
OiBwdWJsaWMgQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZSB7CkBAIC0xMjcsOCArMTI3
LDggQEAgcHJpdmF0ZToKICAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFyYW1l
dGVycyk7CiAKICR7ZGlzcGF0Y2hDYXNlc30KLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5v
dEZvdW5kLCAiJyR7ZG9tYWluTmFtZX0uIiArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsK
KworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERp
c3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJyR7ZG9tYWluTmFtZX0uIiArIG1ldGhvZCArICIn
IHdhcyBub3QgZm91bmQiKTsKIH0iIiIpCiAKICAgICBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVu
dGF0aW9uTGFyZ2VTd2l0Y2ggPSAoCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYWx0ZXJuYXRlX2JhY2tlbmRf
ZGlzcGF0Y2hlcl9oZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYWx0ZXJuYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9o
ZWFkZXIucHkKaW5kZXggZTYyNzg4MGUxMzNlMjExNDk1NzBmYzY3ZDk3NTk5NmM0YTk1OWM0ZC4u
ZTFhNjYxYmEzNzljZGVhNDA2NGM2Zjc3YzRlZmNiMTE2MmFjZWZjMCAxMDA3NTUKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3Bw
X2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9hbHRlcm5h
dGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQpAQCAtNTYsNyArNTYsNyBAQCBjbGFzcyBD
cHBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3Ip
OgogICAgICAgICBzZWN0aW9ucyA9IFtdCiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdl
bmVyYXRlX2xpY2Vuc2UoKSkKICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKENwcFRl
bXBsYXRlcy5BbHRlcm5hdGVEaXNwYXRjaGVyc0hlYWRlclByZWx1ZGUpLnN1YnN0aXR1dGUoTm9u
ZSwgKip0ZW1wbGF0ZV9hcmdzKSkKLSAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCdcbicuam9pbihb
X2YgZm9yIF9mIGluIG1hcChzZWxmLl9nZW5lcmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uc19mb3Jf
ZG9tYWluLCBkb21haW5zKSBpZiBfZl0pKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoJ1xuXG4n
LmpvaW4oW19mIGZvciBfZiBpbiBtYXAoc2VsZi5fZ2VuZXJhdGVfaGFuZGxlcl9kZWNsYXJhdGlv
bnNfZm9yX2RvbWFpbiwgZG9tYWlucykgaWYgX2ZdKSkKICAgICAgICAgc2VjdGlvbnMuYXBwZW5k
KFRlbXBsYXRlKENwcFRlbXBsYXRlcy5BbHRlcm5hdGVEaXNwYXRjaGVyc0hlYWRlclBvc3RsdWRl
KS5zdWJzdGl0dXRlKE5vbmUsICoqdGVtcGxhdGVfYXJncykpCiAgICAgICAgIHJldHVybiAnXG5c
bicuam9pbihzZWN0aW9ucykKIApAQCAtODcsNyArODcsNyBAQCBjbGFzcyBDcHBBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICAg
ICAgJ2NvbW1hbmREZWNsYXJhdGlvbnMnOiAnXG4nLmpvaW4oY29tbWFuZF9kZWNsYXJhdGlvbnMp
LAogICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9k
b21haW4oZG9tYWluLCBUZW1wbGF0ZShDcHBUZW1wbGF0ZXMuQWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXJIZWFkZXJEb21haW5IYW5kbGVySW50ZXJmYWNlRGVjbGFyYXRpb24pLnN1YnN0aXR1dGUo
Tm9uZSwgKipoYW5kbGVyX2FyZ3MpKQorICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3Vh
cmRfZm9yX2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9uLCBUZW1wbGF0ZShDcHBUZW1wbGF0ZXMu
QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJIZWFkZXJEb21haW5IYW5kbGVySW50ZXJmYWNlRGVj
bGFyYXRpb24pLnN1YnN0aXR1dGUoTm9uZSwgKipoYW5kbGVyX2FyZ3MpKQogCiAgICAgZGVmIF9n
ZW5lcmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKHNlbGYsIGNvbW1hbmQpOgog
ICAgICAgICBsaW5lcyA9IFtdCkBAIC0xMDAsNCArMTAwLDQgQEAgY2xhc3MgQ3BwQWx0ZXJuYXRl
QmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAg
ICAgICdwYXJhbWV0ZXJzJzogJywgJy5qb2luKHBhcmFtZXRlcnMpLAogICAgICAgICB9CiAgICAg
ICAgIGxpbmVzLmFwcGVuZCgnICAgIHZpcnR1YWwgdm9pZCAlKGNvbW1hbmROYW1lKXMoJShwYXJh
bWV0ZXJzKXMpID0gMDsnICUgY29tbWFuZF9hcmdzKQotICAgICAgICByZXR1cm4gJ1xuJy5qb2lu
KGxpbmVzKQorICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlv
bihjb21tYW5kLmNvbmRpdGlvbiwgJ1xuJy5qb2luKGxpbmVzKSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9i
YWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFk
ZXIucHkKaW5kZXggZTNmZTRlMTAwNDJlOGI0NWRiMzk1MDc1M2QxZTI5NDQ0YThlMTg1My4uMTBk
OGYxNGJkNWZlYmViOGExYjA2YjAxNzY3NWExNDNhOGQ0ZjczOCAxMDA3NTUKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Jh
Y2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9o
ZWFkZXIucHkKQEAgLTkxLDcgKzkxLDcgQEAgY2xhc3MgQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFk
ZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgbGluZXMgPSBbXQogICAgICAgICBs
aW5lcy5hcHBlbmQoJyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykn
KQogICAgICAgICBmb3IgZG9tYWluIGluIGRvbWFpbnM6Ci0gICAgICAgICAgICBsaW5lcy5hcHBl
bmQoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4sICdjbGFzcyBBbHRlcm5h
dGUlc0JhY2tlbmREaXNwYXRjaGVyOycgJSBkb21haW4uZG9tYWluX25hbWUpKQorICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZG9tYWlu
LmNvbmRpdGlvbiwgJ2NsYXNzIEFsdGVybmF0ZSVzQmFja2VuZERpc3BhdGNoZXI7JyAlIGRvbWFp
bi5kb21haW5fbmFtZSkpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnI2VuZGlmIC8vIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKScpCiAgICAgICAgIHJldHVybiAnXG4nLmpv
aW4obGluZXMpCiAKQEAgLTExMyw3ICsxMTMsNyBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hl
ckhlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICAgICAgJ2NvbW1hbmREZWNs
YXJhdGlvbnMnOiAiXG4iLmpvaW4oY29tbWFuZF9kZWNsYXJhdGlvbnMpCiAgICAgICAgIH0KIAot
ICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4sIFRl
bXBsYXRlKENwcFRlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hlckhlYWRlckRvbWFpbkhhbmRsZXJE
ZWNsYXJhdGlvbikuc3Vic3RpdHV0ZShOb25lLCAqKmhhbmRsZXJfYXJncykpCisgICAgICAgIHJl
dHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRvbWFpbi5jb25kaXRpb24s
IFRlbXBsYXRlKENwcFRlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hlckhlYWRlckRvbWFpbkhhbmRs
ZXJEZWNsYXJhdGlvbikuc3Vic3RpdHV0ZShOb25lLCAqKmhhbmRsZXJfYXJncykpCiAKICAgICBk
ZWYgX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2Zvcl9wYXJhbWV0ZXIoc2VsZiwgcGFyYW1ldGVy
LCBjb21tYW5kKToKICAgICAgICAgZW51bV9hcmdzID0gewpAQCAtMTYxLDcgKzE2MSw3IEBAIGNs
YXNzIENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAg
ICAgICAgICAgICAncGFyYW1ldGVycyc6ICIsICIuam9pbihwYXJhbWV0ZXJzKQogICAgICAgICB9
CiAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHZpcnR1YWwgdm9pZCAlKGNvbW1hbmROYW1lKXMo
JShwYXJhbWV0ZXJzKXMpID0gMDsnICUgY29tbWFuZF9hcmdzKQotICAgICAgICByZXR1cm4gJ1xu
Jy5qb2luKGxpbmVzKQorICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2Nv
bmRpdGlvbihjb21tYW5kLmNvbmRpdGlvbiwgJ1xuJy5qb2luKGxpbmVzKSkKIAogICAgIGRlZiBf
Z2VuZXJhdGVfYXN5bmNfaGFuZGxlcl9kZWNsYXJhdGlvbl9mb3JfY29tbWFuZChzZWxmLCBjb21t
YW5kKToKICAgICAgICAgY2FsbGJhY2tOYW1lID0gIiVzQ2FsbGJhY2siICUgdWNmaXJzdChjb21t
YW5kLmNvbW1hbmRfbmFtZSkKQEAgLTE5Miw3ICsxOTIsNyBAQCBjbGFzcyBDcHBCYWNrZW5kRGlz
cGF0Y2hlckhlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICAgICAgJ291dFBh
cmFtZXRlcnMnOiAiLCAiLmpvaW4ob3V0X3BhcmFtZXRlcnMpLAogICAgICAgICB9CiAKLSAgICAg
ICAgcmV0dXJuIFRlbXBsYXRlKENwcFRlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hlckhlYWRlckFz
eW5jQ29tbWFuZERlY2xhcmF0aW9uKS5zdWJzdGl0dXRlKE5vbmUsICoqY29tbWFuZF9hcmdzKQor
ICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihjb21tYW5k
LmNvbmRpdGlvbiwgVGVtcGxhdGUoQ3BwVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVySGVhZGVy
QXN5bmNDb21tYW5kRGVjbGFyYXRpb24pLnN1YnN0aXR1dGUoTm9uZSwgKipjb21tYW5kX2FyZ3Mp
KQogCiAgICAgZGVmIF9nZW5lcmF0ZV9kaXNwYXRjaGVyX2RlY2xhcmF0aW9uc19mb3JfZG9tYWlu
KHNlbGYsIGRvbWFpbik6CiAgICAgICAgIGNsYXNzQ29tcG9uZW50cyA9IFsnY2xhc3MnXQpAQCAt
MjIwLDcgKzIyMCw3IEBAIGNsYXNzIENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9y
KENwcEdlbmVyYXRvcik6CiAgICAgICAgICAgICAnY29tbWFuZERlY2xhcmF0aW9ucyc6ICJcbiIu
am9pbihkZWNsYXJhdGlvbnMpCiAgICAgICAgIH0KIAotICAgICAgICByZXR1cm4gc2VsZi53cmFw
X3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4sIFRlbXBsYXRlKENwcFRlbXBsYXRlcy5CYWNr
ZW5kRGlzcGF0Y2hlckhlYWRlckRvbWFpbkRpc3BhdGNoZXJEZWNsYXJhdGlvbikuc3Vic3RpdHV0
ZShOb25lLCAqKmhhbmRsZXJfYXJncykpCisgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9n
dWFyZF9mb3JfY29uZGl0aW9uKGRvbWFpbi5jb25kaXRpb24sIFRlbXBsYXRlKENwcFRlbXBsYXRl
cy5CYWNrZW5kRGlzcGF0Y2hlckhlYWRlckRvbWFpbkRpc3BhdGNoZXJEZWNsYXJhdGlvbikuc3Vi
c3RpdHV0ZShOb25lLCAqKmhhbmRsZXJfYXJncykpCiAKICAgICBkZWYgX2dlbmVyYXRlX2Rpc3Bh
dGNoZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQoc2VsZiwgY29tbWFuZCk6Ci0gICAgICAgIHJl
dHVybiAiICAgIHZvaWQgJXMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYg
cGFyYW1ldGVycyk7IiAlIGNvbW1hbmQuY29tbWFuZF9uYW1lCisgICAgICAgIHJldHVybiBzZWxm
LndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGNvbW1hbmQuY29uZGl0aW9uLCAiICAgIHZv
aWQgJXMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7
IiAlIGNvbW1hbmQuY29tbWFuZF9uYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0
Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50
YXRpb24ucHkKaW5kZXggYTE1OTYxYTY0NzQ0ZTExMWI1ODBjOGQxYTBmYTgwNTU4ZWUxY2U0Yi4u
ZGFmMTljOTUwZmIwN2FhYTJkOGIzMWEyZjQ5YzdjYWI1MDcwMmM2MCAxMDA3NTUKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3Bw
X2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9k
aXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CkBAIC02MCw3ICs2MCw3IEBAIGNsYXNzIENwcEJh
Y2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAg
ICAgICAgICAgIHNlY29uZGFyeV9pbmNsdWRlcy5hcHBlbmQoJycpCiAgICAgICAgICAgICBzZWNv
bmRhcnlfaW5jbHVkZXMuYXBwZW5kKCcjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpJykKICAgICAgICAgICAgIHNlY29uZGFyeV9pbmNsdWRlcy5hcHBlbmQoJyNpbmNs
dWRlICIlc0FsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIicgJSBzZWxmLnByb3RvY29sX25h
bWUoKSkKLSAgICAgICAgICAgIHNlY29uZGFyeV9pbmNsdWRlcy5hcHBlbmQoJyNlbmRpZicpCisg
ICAgICAgICAgICBzZWNvbmRhcnlfaW5jbHVkZXMuYXBwZW5kKCcjZW5kaWYgLy8gRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpJykKIAogICAgICAgICBoZWFkZXJfYXJncyA9
IHsKICAgICAgICAgICAgICdwcmltYXJ5SW5jbHVkZSc6ICciJXNCYWNrZW5kRGlzcGF0Y2hlcnMu
aCInICUgc2VsZi5wcm90b2NvbF9uYW1lKCksCkBAIC05Myw3ICs5Myw3IEBAIGNsYXNzIENwcEJh
Y2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAg
ICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lCiAgICAgICAgIH0KICAg
ICAgICAgZGVzdHJ1Y3RvciA9ICclKGRvbWFpbk5hbWUpc0JhY2tlbmREaXNwYXRjaGVySGFuZGxl
cjo6fiUoZG9tYWluTmFtZSlzQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9JyAlIGRlc3Ry
dWN0b3JfYXJncwotICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFp
bihkb21haW4sIGRlc3RydWN0b3IpCisgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFy
ZF9mb3JfY29uZGl0aW9uKGRvbWFpbi5jb25kaXRpb24sIGRlc3RydWN0b3IpCiAKICAgICBkZWYg
X2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25zX2Zvcl9kb21haW4oc2VsZiwgZG9t
YWluKToKICAgICAgICAgaW1wbGVtZW50YXRpb25zID0gW10KQEAgLTExNSwxNyArMTE1LDI5IEBA
IGNsYXNzIENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoQ3BwR2Vu
ZXJhdG9yKToKICAgICAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbnMuYXBwZW5kKHNlbGYuX2dl
bmVyYXRlX2FzeW5jX2Rpc3BhdGNoZXJfY2xhc3NfZm9yX2RvbWFpbihjb21tYW5kLCBkb21haW4p
KQogICAgICAgICAgICAgaW1wbGVtZW50YXRpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9kaXNw
YXRjaGVyX2ltcGxlbWVudGF0aW9uX2Zvcl9jb21tYW5kKGNvbW1hbmQsIGRvbWFpbikpCiAKLSAg
ICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCAnXG5c
bicuam9pbihpbXBsZW1lbnRhdGlvbnMpKQorICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhf
Z3VhcmRfZm9yX2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9uLCAnXG5cbicuam9pbihpbXBsZW1l
bnRhdGlvbnMpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9zbWFsbF9kaXNwYXRjaGVyX3N3aXRjaF9p
bXBsZW1lbnRhdGlvbl9mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6CiAgICAgICAgIGNvbW1hbmRz
ID0gc2VsZi5jb21tYW5kc19mb3JfZG9tYWluKGRvbWFpbikKIAogICAgICAgICBjYXNlcyA9IFtd
Ci0gICAgICAgIGNhc2VzLmFwcGVuZCgnICAgIGlmIChtZXRob2QgPT0gIiVzIiknICUgY29tbWFu
ZHNbMF0uY29tbWFuZF9uYW1lKQotICAgICAgICBjYXNlcy5hcHBlbmQoJyAgICAgICAgJXMocmVx
dWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsnICUgY29tbWFuZHNbMF0uY29tbWFuZF9uYW1l
KQorCisgICAgICAgIGZpcnN0X2NvbW1hbmRfc3RyaW5nID0gIlxuIi5qb2luKFsKKyAgICAgICAg
ICAgICcgICAgaWYgKG1ldGhvZCA9PSAiJXMiKSB7JyAlIGNvbW1hbmRzWzBdLmNvbW1hbmRfbmFt
ZSwKKyAgICAgICAgICAgICcgICAgICAgICVzKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJz
KSk7JyAlIGNvbW1hbmRzWzBdLmNvbW1hbmRfbmFtZSwKKyAgICAgICAgICAgICcgICAgICAgIHJl
dHVybjsnLAorICAgICAgICAgICAgJyAgICB9JywKKyAgICAgICAgXSkKKyAgICAgICAgY2FzZXMu
YXBwZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oY29tbWFuZHNbMF0uY29u
ZGl0aW9uLCBmaXJzdF9jb21tYW5kX3N0cmluZykpCisKICAgICAgICAgZm9yIGNvbW1hbmQgaW4g
Y29tbWFuZHNbMTpdOgotICAgICAgICAgICAgY2FzZXMuYXBwZW5kKCcgICAgZWxzZSBpZiAobWV0
aG9kID09ICIlcyIpJyAlIGNvbW1hbmQuY29tbWFuZF9uYW1lKQotICAgICAgICAgICAgY2FzZXMu
YXBwZW5kKCcgICAgICAgICVzKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7JyAlIGNv
bW1hbmQuY29tbWFuZF9uYW1lKQorICAgICAgICAgICAgYWRkaXRpb25hbF9jb21tYW5kX3N0cmlu
ZyA9ICJcbiIuam9pbihbCisgICAgICAgICAgICAgICAgJyAgICBpZiAobWV0aG9kID09ICIlcyIp
IHsnICUgY29tbWFuZC5jb21tYW5kX25hbWUsCisgICAgICAgICAgICAgICAgJyAgICAgICAgJXMo
cmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsnICUgY29tbWFuZC5jb21tYW5kX25hbWUs
CisgICAgICAgICAgICAgICAgJyAgICAgICAgcmV0dXJuOycsCisgICAgICAgICAgICAgICAgJyAg
ICB9JywKKyAgICAgICAgICAgIF0pCisgICAgICAgICAgICBjYXNlcy5hcHBlbmQoc2VsZi53cmFw
X3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihjb21tYW5kLmNvbmRpdGlvbiwgYWRkaXRpb25hbF9j
b21tYW5kX3N0cmluZykpCiAKICAgICAgICAgc3dpdGNoX2FyZ3MgPSB7CiAgICAgICAgICAgICAn
ZG9tYWluTmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZSwKQEAgLTE0Myw3ICsxNTUsNyBAQCBjbGFz
cyBDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKENwcEdlbmVyYXRv
cik6CiAgICAgICAgICAgICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUsCiAg
ICAgICAgICAgICAgICAgJ2NvbW1hbmROYW1lJzogY29tbWFuZC5jb21tYW5kX25hbWUKICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGNhc2VzLmFwcGVuZCgnICAgICAgICAgICAgeyAiJShjb21t
YW5kTmFtZSlzIiwgJiUoZG9tYWluTmFtZSlzQmFja2VuZERpc3BhdGNoZXI6OiUoY29tbWFuZE5h
bWUpcyB9LCcgJSBhcmdzKQorICAgICAgICAgICAgY2FzZXMuYXBwZW5kKHNlbGYud3JhcF93aXRo
X2d1YXJkX2Zvcl9jb25kaXRpb24oY29tbWFuZC5jb25kaXRpb24sICcgICAgICAgICAgICB7ICIl
KGNvbW1hbmROYW1lKXMiLCAmJShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0Y2hlcjo6JShjb21t
YW5kTmFtZSlzIH0sJyAlIGFyZ3MpKQogCiAgICAgICAgIHN3aXRjaF9hcmdzID0gewogICAgICAg
ICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUsCkBAIC0xODUsNyArMTk3LDcg
QEAgY2xhc3MgQ3BwQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihDcHBH
ZW5lcmF0b3IpOgogICAgICAgICAgICAgJ2Zvcm1hbFBhcmFtZXRlcnMnOiAiLCAiLmpvaW4oZm9y
bWFsX3BhcmFtZXRlcnMpLAogICAgICAgICAgICAgJ291dFBhcmFtZXRlckFzc2lnbm1lbnRzJzog
IlxuIi5qb2luKG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMpCiAgICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIFRlbXBsYXRlKENwcFRlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0
aW9uQXN5bmNDb21tYW5kKS5zdWJzdGl0dXRlKE5vbmUsICoqYXN5bmNfYXJncykKKyAgICAgICAg
cmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oY29tbWFuZC5jb25kaXRp
b24sIFRlbXBsYXRlKENwcFRlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9u
QXN5bmNDb21tYW5kKS5zdWJzdGl0dXRlKE5vbmUsICoqYXN5bmNfYXJncykpCiAKICAgICBkZWYg
X2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25fZm9yX2NvbW1hbmQoc2VsZiwgY29t
bWFuZCwgZG9tYWluKToKICAgICAgICAgaW5fcGFyYW1ldGVyX2RlY2xhcmF0aW9ucyA9IFtdCkBA
IC0zMDQsNyArMzE2LDcgQEAgY2xhc3MgQ3BwQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlv
bkdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAg
ICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+JShjb21tYW5kTmFtZSlzKCUoYWx0ZXJuYXRlSW52
b2NhdGlvblBhcmFtZXRlcnMpcyk7JyAlIGNvbW1hbmRfYXJncykKICAgICAgICAgICAgIGxpbmVz
LmFwcGVuZCgnICAgICAgICByZXR1cm47JykKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAg
IH0nKQotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcjZW5kaWYnKQorICAgICAgICAgICAgbGlu
ZXMuYXBwZW5kKCcjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpJykKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKIAogICAgICAgICBpZiBjb21tYW5k
LmlzX2FzeW5jOgpAQCAtMzM0LDQgKzM0Niw0IEBAIGNsYXNzIENwcEJhY2tlbmREaXNwYXRjaGVy
SW1wbGVtZW50YXRpb25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgICAgIGxpbmVz
LmFwcGVuZCgnICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9y
KEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOycpCiAKICAg
ICAgICAgbGluZXMuYXBwZW5kKCd9JykKLSAgICAgICAgcmV0dXJuICJcbiIuam9pbihsaW5lcykK
KyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oY29tbWFu
ZC5jb25kaXRpb24sICJcbiIuam9pbihsaW5lcykpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRf
ZGlzcGF0Y2hlcl9oZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkK
aW5kZXggNWNmNzQ3ODU0MzM2OGFjYThhMjM0YjM1NTRlMDY5NGMxMDAxODUyZi4uMTE5ZDIzYzM4
Y2RmMjRjZjU2ZDBmZmM2NmQ1N2I4YTNkNGUyZGE0NCAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5k
X2Rpc3BhdGNoZXJfaGVhZGVyLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRl
ci5weQpAQCAtMTExLDcgKzExMSw3IEBAIGNsYXNzIENwcEZyb250ZW5kRGlzcGF0Y2hlckhlYWRl
ckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICAgICAgJ2V2ZW50RGVjbGFyYXRpb25z
JzogIlxuIi5qb2luKGV2ZW50X2RlY2xhcmF0aW9ucykKICAgICAgICAgfQogCi0gICAgICAgIHJl
dHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgVGVtcGxhdGUoQ3Bw
VGVtcGxhdGVzLkZyb250ZW5kRGlzcGF0Y2hlckRvbWFpbkRpc3BhdGNoZXJEZWNsYXJhdGlvbiku
c3Vic3RpdHV0ZShOb25lLCAqKmhhbmRsZXJfYXJncykpCisgICAgICAgIHJldHVybiBzZWxmLndy
YXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRvbWFpbi5jb25kaXRpb24sIFRlbXBsYXRlKENw
cFRlbXBsYXRlcy5Gcm9udGVuZERpc3BhdGNoZXJEb21haW5EaXNwYXRjaGVyRGVjbGFyYXRpb24p
LnN1YnN0aXR1dGUoTm9uZSwgKipoYW5kbGVyX2FyZ3MpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9k
aXNwYXRjaGVyX2RlY2xhcmF0aW9uX2Zvcl9ldmVudChzZWxmLCBldmVudCwgZG9tYWluLCB1c2Vk
X2VudW1fbmFtZXMpOgogICAgICAgICBmb3JtYWxfcGFyYW1ldGVycyA9IFtdCkBAIC0xMjMsNCAr
MTIzLDQgQEAgY2xhc3MgQ3BwRnJvbnRlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKENwcEdl
bmVyYXRvcik6CiAgICAgICAgICAgICAgICAgdXNlZF9lbnVtX25hbWVzLmFkZChwYXJhbWV0ZXIu
cGFyYW1ldGVyX25hbWUpCiAKICAgICAgICAgbGluZXMuYXBwZW5kKCIgICAgdm9pZCAlcyglcyk7
IiAlIChldmVudC5ldmVudF9uYW1lLCAiLCAiLmpvaW4oZm9ybWFsX3BhcmFtZXRlcnMpKSkKLSAg
ICAgICAgcmV0dXJuICJcbiIuam9pbihsaW5lcykKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93
aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZXZlbnQuY29uZGl0aW9uLCAiXG4iLmpvaW4obGluZXMp
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQppbmRleCA5MDRkMjI3
YTZlOTM4ZDNkMGFkYzFiYmYzMGY1MzBjMzdlZTkwOWRmLi42NmRjNmUxODVjZmUyYjYxYjFlY2E3
NzU3M2NlMTY3NGU2YjM1YTQ5IDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9p
bXBsZW1lbnRhdGlvbi5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRh
dGlvbi5weQpAQCAtODIsNyArODIsNyBAQCBjbGFzcyBDcHBGcm9udGVuZERpc3BhdGNoZXJJbXBs
ZW1lbnRhdGlvbkdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICBmb3IgZXZlbnQgaW4g
ZXZlbnRzOgogICAgICAgICAgICAgaW1wbGVtZW50YXRpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0
ZV9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uX2Zvcl9ldmVudChldmVudCwgZG9tYWluKSkKIAot
ICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4sICdc
blxuJy5qb2luKGltcGxlbWVudGF0aW9ucykpCisgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0
aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRvbWFpbi5jb25kaXRpb24sICdcblxuJy5qb2luKGltcGxl
bWVudGF0aW9ucykpCiAKICAgICBkZWYgX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRp
b25fZm9yX2V2ZW50KHNlbGYsIGV2ZW50LCBkb21haW4pOgogICAgICAgICBsaW5lcyA9IFtdCkBA
IC0xMzEsNCArMTMxLDQgQEAgY2xhc3MgQ3BwRnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRp
b25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQogICAg
ICAgICBsaW5lcy5hcHBlbmQoJyAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChqc29uTWVz
c2FnZS0+dG9KU09OU3RyaW5nKCkpOycpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnfScpCi0gICAg
ICAgIHJldHVybiAiXG4iLmpvaW4obGluZXMpCisgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0
aF9ndWFyZF9mb3JfY29uZGl0aW9uKGV2ZW50LmNvbmRpdGlvbiwgIlxuIi5qb2luKGxpbmVzKSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19oZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xf
dHlwZXNfaGVhZGVyLnB5CmluZGV4IDQyM2Q3YTIzMDA4OGU1NmU3N2QxZGQyOGMxNDljMzA5YTE3
MWQyYjMuLjk5ZjYwMWE3ZDkyMzdlM2M3OTM5ZjA4ZTZiMzY3ODczNmYwNmFiYmIgMTAwNzU1Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRlX2NwcF9wcm90b2NvbF90eXBlc19oZWFkZXIucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVz
X2hlYWRlci5weQpAQCAtMTA1LDcgKzEwNSw3IEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNIZWFk
ZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgICAgICAgICBkb21haW5fbGluZXMu
YXBwZW5kKCdzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFZFUlNJT04gPSAlczsnICUgdmVyc2lv
bikKIAogICAgICAgICAgICAgZG9tYWluX2xpbmVzLmFwcGVuZCgnfSAvLyAlcycgJSBkb21haW4u
ZG9tYWluX25hbWUpCi0gICAgICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi53cmFwX3dpdGhf
Z3VhcmRfZm9yX2RvbWFpbihkb21haW4sICdcbicuam9pbihkb21haW5fbGluZXMpKSkKKyAgICAg
ICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9u
KGRvbWFpbi5jb25kaXRpb24sICdcbicuam9pbihkb21haW5fbGluZXMpKSkKIAogICAgICAgICBp
ZiBsZW4oc2VjdGlvbnMpID09IDA6CiAgICAgICAgICAgICByZXR1cm4gJycKQEAgLTEzMiwxMCAr
MTMyLDEwIEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJh
dG9yKToKICAgICAgICAgICAgIGRvbWFpbl9saW5lcy5hcHBlbmQoJ25hbWVzcGFjZSAlcyB7JyAl
IGRvbWFpbi5kb21haW5fbmFtZSkKIAogICAgICAgICAgICAgIyBGb3J3YXJkLWRlY2xhcmUgYWxs
IGNsYXNzZXMgc28gdGhlIHR5cGUgYnVpbGRlcnMgd29uJ3QgYnJlYWsgaWYgcmVhcnJhbmdlZC4K
LSAgICAgICAgICAgIGRvbWFpbl9saW5lcy5leHRlbmQoJ2NsYXNzICVzOycgJSBvYmplY3RfdHlw
ZS5yYXdfbmFtZSgpIGZvciBvYmplY3RfdHlwZSBpbiBvYmplY3RfdHlwZXMpCi0gICAgICAgICAg
ICBkb21haW5fbGluZXMuZXh0ZW5kKCdlbnVtIGNsYXNzICVzOycgJSBlbnVtX3R5cGUucmF3X25h
bWUoKSBmb3IgZW51bV90eXBlIGluIGVudW1fdHlwZXMpCisgICAgICAgICAgICBkb21haW5fbGlu
ZXMuZXh0ZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24ob2JqZWN0X3R5cGUu
ZGVjbGFyYXRpb24oKS5jb25kaXRpb24sICdjbGFzcyAlczsnICUgb2JqZWN0X3R5cGUucmF3X25h
bWUoKSkgZm9yIG9iamVjdF90eXBlIGluIG9iamVjdF90eXBlcykKKyAgICAgICAgICAgIGRvbWFp
bl9saW5lcy5leHRlbmQoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihlbnVtX3R5
cGUuZGVjbGFyYXRpb24oKS5jb25kaXRpb24sICdlbnVtIGNsYXNzICVzOycgJSBlbnVtX3R5cGUu
cmF3X25hbWUoKSkgZm9yIGVudW1fdHlwZSBpbiBlbnVtX3R5cGVzKQogICAgICAgICAgICAgZG9t
YWluX2xpbmVzLmFwcGVuZCgnfSAvLyAlcycgJSBkb21haW4uZG9tYWluX25hbWUpCi0gICAgICAg
ICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihkb21h
aW4sICdcbicuam9pbihkb21haW5fbGluZXMpKSkKKyAgICAgICAgICAgIHNlY3Rpb25zLmFwcGVu
ZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRvbWFpbi5jb25kaXRpb24sICdc
bicuam9pbihkb21haW5fbGluZXMpKSkKIAogICAgICAgICBpZiBsZW4oc2VjdGlvbnMpID09IDA6
CiAgICAgICAgICAgICByZXR1cm4gJycKQEAgLTE3MCw3ICsxNzAsNyBAQCBjbGFzcyBDcHBQcm90
b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgICAgICBpZiBs
ZW4oZGVjbGFyYXRpb24uZGVzY3JpcHRpb24pID4gMDoKICAgICAgICAgICAgICAgICB0eXBlZGVm
X2xpbmVzLmFwcGVuZCgnLyogJXMgKi8nICUgZGVjbGFyYXRpb24uZGVzY3JpcHRpb24pCiAgICAg
ICAgICAgICB0eXBlZGVmX2xpbmVzLmFwcGVuZCgndHlwZWRlZiAlcyAlczsnICUgKHByaW1pdGl2
ZV9uYW1lLCBkZWNsYXJhdGlvbi50eXBlX25hbWUpKQotICAgICAgICAgICAgc2VjdGlvbnMuYXBw
ZW5kKCdcbicuam9pbih0eXBlZGVmX2xpbmVzKSkKKyAgICAgICAgICAgIHNlY3Rpb25zLmFwcGVu
ZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRlY2xhcmF0aW9uLmNvbmRpdGlv
biwgJ1xuJy5qb2luKHR5cGVkZWZfbGluZXMpKSkKIAogICAgICAgICBmb3IgZGVjbGFyYXRpb24g
aW4gYXJyYXlfZGVjbGFyYXRpb25zOgogICAgICAgICAgICAgZWxlbWVudF90eXBlID0gQ3BwR2Vu
ZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKGRlY2xhcmF0aW9uLnR5cGUuZWxlbWVu
dF90eXBlKQpAQCAtMTc4LDEzICsxNzgsMTMgQEAgY2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0hlYWRl
ckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICAgICAgaWYgbGVuKGRlY2xhcmF0aW9u
LmRlc2NyaXB0aW9uKSA+IDA6CiAgICAgICAgICAgICAgICAgdHlwZWRlZl9saW5lcy5hcHBlbmQo
Jy8qICVzICovJyAlIGRlY2xhcmF0aW9uLmRlc2NyaXB0aW9uKQogICAgICAgICAgICAgdHlwZWRl
Zl9saW5lcy5hcHBlbmQoJ3R5cGVkZWYgSlNPTjo6QXJyYXlPZjwlcz4gJXM7JyAlIChlbGVtZW50
X3R5cGUsIGRlY2xhcmF0aW9uLnR5cGVfbmFtZSkpCi0gICAgICAgICAgICBzZWN0aW9ucy5hcHBl
bmQoJ1xuJy5qb2luKHR5cGVkZWZfbGluZXMpKQorICAgICAgICAgICAgc2VjdGlvbnMuYXBwZW5k
KHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZGVjbGFyYXRpb24uY29uZGl0aW9u
LCAnXG4nLmpvaW4odHlwZWRlZl9saW5lcykpKQogCiAgICAgICAgIGxpbmVzID0gW10KICAgICAg
ICAgbGluZXMuYXBwZW5kKCduYW1lc3BhY2UgJXMgeycgJSBkb21haW4uZG9tYWluX25hbWUpCiAg
ICAgICAgIGxpbmVzLmFwcGVuZCgnXG4nLmpvaW4oc2VjdGlvbnMpKQogICAgICAgICBsaW5lcy5h
cHBlbmQoJ30gLy8gJXMnICUgZG9tYWluLmRvbWFpbl9uYW1lKQotICAgICAgICByZXR1cm4gc2Vs
Zi53cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4sICdcbicuam9pbihsaW5lcykpCisg
ICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRvbWFpbi5j
b25kaXRpb24sICdcbicuam9pbihsaW5lcykpCiAKICAgICBkZWYgX2dlbmVyYXRlX2VudW1fY29u
c3RhbnRfdmFsdWVfY29udmVyc2lvbl9tZXRob2RzKHNlbGYpOgogICAgICAgICBpZiBub3Qgc2Vs
Zi5hc3NpZ25lZF9lbnVtX3ZhbHVlcygpOgpAQCAtMjI1LDkgKzIyNSwxMSBAQCBjbGFzcyBDcHBQ
cm90b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAKICAgICAgICAgbGlu
ZXMgPSBbXQogICAgICAgICBsaW5lcy5hcHBlbmQoJ25hbWVzcGFjZSAlcyB7JyAlIGRvbWFpbi5k
b21haW5fbmFtZSkKLSAgICAgICAgbGluZXMuYXBwZW5kKCdcbicuam9pbihzZWN0aW9ucykpCisg
ICAgICAgIGxpbmVzLmFwcGVuZCgnJykKKyAgICAgICAgbGluZXMuYXBwZW5kKCdcblxuJy5qb2lu
KHNlY3Rpb25zKSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCcnKQogICAgICAgICBsaW5lcy5hcHBl
bmQoJ30gLy8gJXMnICUgZG9tYWluLmRvbWFpbl9uYW1lKQotICAgICAgICByZXR1cm4gc2VsZi53
cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4sICdcbicuam9pbihsaW5lcykpCisgICAg
ICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRvbWFpbi5jb25k
aXRpb24sICdcbicuam9pbihsaW5lcykpCiAKICAgICBkZWYgX2dlbmVyYXRlX2NsYXNzX2Zvcl9v
YmplY3RfZGVjbGFyYXRpb24oc2VsZiwgdHlwZV9kZWNsYXJhdGlvbiwgZG9tYWluKToKICAgICAg
ICAgaWYgbGVuKHR5cGVfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzKSA9PSAwOgpAQCAtMjc4LDE0
ICsyODAsMTQgQEAgY2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0hlYWRlckdlbmVyYXRvcihDcHBHZW5l
cmF0b3IpOgogICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICVzIHN0YXRpYyBjb25z
dCBjaGFyKiAlczsnICUgKGV4cG9ydF9tYWNybywgdWNmaXJzdCh0eXBlX21lbWJlci5tZW1iZXJf
bmFtZSkpKQogCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnfTsnKQotICAgICAgICBsaW5lcy5hcHBl
bmQoJycpCi0gICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisgICAgICAgIHJldHVybiBz
ZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKHR5cGVfZGVjbGFyYXRpb24uY29uZGl0
aW9uLCAnXG4nLmpvaW4obGluZXMpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9zdHJ1Y3RfZm9yX2Vu
dW1fZGVjbGFyYXRpb24oc2VsZiwgZW51bV9kZWNsYXJhdGlvbik6CiAgICAgICAgIGxpbmVzID0g
W10KLSAgICAgICAgbGluZXMuYXBwZW5kKCcvKiAlcyAqLycgJSBlbnVtX2RlY2xhcmF0aW9uLmRl
c2NyaXB0aW9uKQorICAgICAgICBpZiBsZW4oZW51bV9kZWNsYXJhdGlvbi5kZXNjcmlwdGlvbik6
CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJy8qICVzICovJyAlIGVudW1fZGVjbGFyYXRpb24u
ZGVzY3JpcHRpb24pCiAgICAgICAgIGxpbmVzLmV4dGVuZChzZWxmLl9nZW5lcmF0ZV9zdHJ1Y3Rf
Zm9yX2VudW1fdHlwZShlbnVtX2RlY2xhcmF0aW9uLnR5cGVfbmFtZSwgZW51bV9kZWNsYXJhdGlv
bi50eXBlKSkKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKyAgICAgICAgcmV0dXJu
IHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZW51bV9kZWNsYXJhdGlvbi5jb25k
aXRpb24sICdcbicuam9pbihsaW5lcykpCiAKICAgICBkZWYgX2dlbmVyYXRlX3N0cnVjdF9mb3Jf
YW5vbnltb3VzX2VudW1fbWVtYmVyKHNlbGYsIGVudW1fbWVtYmVyKToKICAgICAgICAgZGVmIGFw
cGx5X2luZGVudGF0aW9uKGxpbmUpOgpAQCAtMzgxLDEwICszODMsMTAgQEAgY2xhc3MgQ3BwUHJv
dG9jb2xUeXBlc0hlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICAgICAgZm9y
IHR5cGVfZGVjbGFyYXRpb24gaW4gZGVjbGFyYXRpb25zX3RvX2dlbmVyYXRlOgogICAgICAgICAg
ICAgICAgIGZvciB0eXBlX21lbWJlciBpbiB0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVyczoK
ICAgICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh0eXBlX21lbWJlci50eXBlLCBFbnVt
VHlwZSk6Ci0gICAgICAgICAgICAgICAgICAgICAgICB0eXBlX2FyZ3VtZW50cy5hcHBlbmQoKENw
cEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZV9tZW1iZXIodHlwZV9tZW1iZXIs
IHR5cGVfZGVjbGFyYXRpb24pLCBGYWxzZSkpCisgICAgICAgICAgICAgICAgICAgICAgICB0eXBl
X2FyZ3VtZW50cy5hcHBlbmQoKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24odHlw
ZV9kZWNsYXJhdGlvbi5jb25kaXRpb24sIENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9m
b3JfdHlwZV9tZW1iZXIodHlwZV9tZW1iZXIsIHR5cGVfZGVjbGFyYXRpb24pKSwgRmFsc2UpKQog
CiAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh0eXBlX2RlY2xhcmF0aW9uLnR5cGUsIE9i
amVjdFR5cGUpOgotICAgICAgICAgICAgICAgICAgICB0eXBlX2FyZ3VtZW50cy5hcHBlbmQoKENw
cEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZSh0eXBlX2RlY2xhcmF0aW9uLnR5
cGUpLCBHZW5lcmF0b3IudHlwZV9uZWVkc19ydW50aW1lX2Nhc3RzKHR5cGVfZGVjbGFyYXRpb24u
dHlwZSkpKQorICAgICAgICAgICAgICAgICAgICB0eXBlX2FyZ3VtZW50cy5hcHBlbmQoKHNlbGYu
d3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24odHlwZV9kZWNsYXJhdGlvbi5jb25kaXRpb24s
IENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZSh0eXBlX2RlY2xhcmF0aW9u
LnR5cGUpKSwgR2VuZXJhdG9yLnR5cGVfbmVlZHNfcnVudGltZV9jYXN0cyh0eXBlX2RlY2xhcmF0
aW9uLnR5cGUpKSkKIAogICAgICAgICBzdHJ1Y3Rfa2V5d29yZHMgPSBbJ3N0cnVjdCddCiAgICAg
ICAgIGZ1bmN0aW9uX2tleXdvcmRzID0gWydzdGF0aWMgdm9pZCddCkBAIC00MzcsMTkgKzQzOSwy
MCBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6
CiAgICAgICAgICAgICBkb21haW5fbGluZXMuYXBwZW5kKCIvLyBFbnVtcyBpbiB0aGUgJyVzJyBE
b21haW4iICUgZG9tYWluLmRvbWFpbl9uYW1lKQogICAgICAgICAgICAgZm9yIGVudW1fdHlwZSBp
biBlbnVtX3R5cGVzOgogICAgICAgICAgICAgICAgIGNwcF9wcm90b2NvbF90eXBlID0gQ3BwR2Vu
ZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKGVudW1fdHlwZSkKLSAgICAgICAgICAg
ICAgICBkb21haW5fbGluZXMuYXBwZW5kKCd0ZW1wbGF0ZTw+JykKLSAgICAgICAgICAgICAgICBk
b21haW5fbGluZXMuYXBwZW5kKCclcyBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8JXM+KGNvbnN0
IFN0cmluZyYpOycgJSAocmV0dXJuX3R5cGVfd2l0aF9leHBvcnRfbWFjcm8oY3BwX3Byb3RvY29s
X3R5cGUpLCBjcHBfcHJvdG9jb2xfdHlwZSkpCisgICAgICAgICAgICAgICAgZG9tYWluX2xpbmVz
LmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGVudW1fdHlwZS5kZWNs
YXJhdGlvbigpLmNvbmRpdGlvbiwgJ3RlbXBsYXRlPD5cbiVzIHBhcnNlRW51bVZhbHVlRnJvbVN0
cmluZzwlcz4oY29uc3QgU3RyaW5nJik7JyAlIChyZXR1cm5fdHlwZV93aXRoX2V4cG9ydF9tYWNy
byhjcHBfcHJvdG9jb2xfdHlwZSksIGNwcF9wcm90b2NvbF90eXBlKSkpCiAKICAgICAgICAgICAg
IGZvciBvYmplY3RfdHlwZSBpbiBvYmplY3RfdHlwZXM6CisgICAgICAgICAgICAgICAgb2JqZWN0
X2xpbmVzID0gW10KICAgICAgICAgICAgICAgICBmb3IgZW51bV9tZW1iZXIgaW4gZmlsdGVyKHR5
cGVfbWVtYmVyX2lzX2Fub255bW91c19lbnVtX3R5cGUsIG9iamVjdF90eXBlLm1lbWJlcnMpOgog
ICAgICAgICAgICAgICAgICAgICBjcHBfcHJvdG9jb2xfdHlwZSA9IENwcEdlbmVyYXRvci5jcHBf
cHJvdG9jb2xfdHlwZV9mb3JfdHlwZV9tZW1iZXIoZW51bV9tZW1iZXIsIG9iamVjdF90eXBlLmRl
Y2xhcmF0aW9uKCkpCi0gICAgICAgICAgICAgICAgICAgIGRvbWFpbl9saW5lcy5hcHBlbmQoJ3Rl
bXBsYXRlPD4nKQotICAgICAgICAgICAgICAgICAgICBkb21haW5fbGluZXMuYXBwZW5kKCclcyBw
YXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8JXM+KGNvbnN0IFN0cmluZyYpOycgJSAocmV0dXJuX3R5
cGVfd2l0aF9leHBvcnRfbWFjcm8oY3BwX3Byb3RvY29sX3R5cGUpLCBjcHBfcHJvdG9jb2xfdHlw
ZSkpCisgICAgICAgICAgICAgICAgICAgIG9iamVjdF9saW5lcy5hcHBlbmQoJ3RlbXBsYXRlPD5c
biVzIHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzwlcz4oY29uc3QgU3RyaW5nJik7JyAlIChyZXR1
cm5fdHlwZV93aXRoX2V4cG9ydF9tYWNybyhjcHBfcHJvdG9jb2xfdHlwZSksIGNwcF9wcm90b2Nv
bF90eXBlKSkKKyAgICAgICAgICAgICAgICBpZiBsZW4ob2JqZWN0X2xpbmVzKToKKyAgICAgICAg
ICAgICAgICAgICAgZG9tYWluX2xpbmVzLmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3Jf
Y29uZGl0aW9uKG9iamVjdF90eXBlLmRlY2xhcmF0aW9uKCkuY29uZGl0aW9uLCAnXG4nLmpvaW4o
b2JqZWN0X2xpbmVzKSkpCiAKICAgICAgICAgICAgIGlmIGxlbihkb21haW5fbGluZXMpID09IDE6
CiAgICAgICAgICAgICAgICAgY29udGludWUgICMgTm8gcmVhbCBkZWNsYXJhdGlvbnMgdG8gZW1p
dCwganVzdCB0aGUgZG9tYWluIGNvbW1lbnQuIFNraXAuCiAKLSAgICAgICAgICAgIHNlY3Rpb25z
LmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgJ1xuJy5qb2lu
KGRvbWFpbl9saW5lcykpKQorICAgICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYud3JhcF93
aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZG9tYWluLmNvbmRpdGlvbiwgJ1xuJy5qb2luKGRvbWFp
bl9saW5lcykpKQogCiAgICAgICAgIGlmIGxlbihzZWN0aW9ucykgPT0gMToKICAgICAgICAgICAg
IHJldHVybiBbXSAjIE5vIHJlYWwgc2VjdGlvbnMgdG8gZW1pdCwganVzdCB0aGUgbmFtZXNwYWNl
IGFuZCB0ZW1wbGF0ZSBkZWNsYXJhdGlvbi4gU2tpcC4KQEAgLTQ3NCwxNCArNDc3LDIwIEBAIGNs
YXNzIENwcFByb3RvY29sVHlwZXNIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAg
ICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycpCiAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCd0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7JykKIAotICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKCcnKQotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCIvLyBIYXNoIGRl
Y2xhcmF0aW9ucyBpbiB0aGUgJyVzJyBEb21haW4iICUgZG9tYWluLmRvbWFpbl9uYW1lKQorICAg
ICAgICAgICAgZG9tYWluX2xpbmVzID0gW10KKworICAgICAgICAgICAgZG9tYWluX2xpbmVzLmFw
cGVuZCgnJykKKyAgICAgICAgICAgIGRvbWFpbl9saW5lcy5hcHBlbmQoIi8vIEhhc2ggZGVjbGFy
YXRpb25zIGluIHRoZSAnJXMnIERvbWFpbiIgJSBkb21haW4uZG9tYWluX25hbWUpCiAKICAgICAg
ICAgICAgIGZvciBlbnVtX3R5cGUgaW4gZW51bV90eXBlczoKLSAgICAgICAgICAgICAgICBsaW5l
cy5hcHBlbmQoJ3RlbXBsYXRlPD4nKQotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnc3Ry
dWN0IERlZmF1bHRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OiVzOjolcz4geycgJSAoZG9tYWlu
LmRvbWFpbl9uYW1lLCBlbnVtX3R5cGUucmF3X25hbWUoKSkpCi0gICAgICAgICAgICAgICAgbGlu
ZXMuYXBwZW5kKCcgICAgdHlwZWRlZiBJbnRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OiVzOjol
cz4gSGFzaDsnICUgKGRvbWFpbi5kb21haW5fbmFtZSwgZW51bV90eXBlLnJhd19uYW1lKCkpKQot
ICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnfTsnKQorICAgICAgICAgICAgICAgIGVudW1f
bGluZXMgPSBbXQorICAgICAgICAgICAgICAgIGVudW1fbGluZXMuYXBwZW5kKCd0ZW1wbGF0ZTw+
JykKKyAgICAgICAgICAgICAgICBlbnVtX2xpbmVzLmFwcGVuZCgnc3RydWN0IERlZmF1bHRIYXNo
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OiVzOjolcz4geycgJSAoZG9tYWluLmRvbWFpbl9uYW1lLCBl
bnVtX3R5cGUucmF3X25hbWUoKSkpCisgICAgICAgICAgICAgICAgZW51bV9saW5lcy5hcHBlbmQo
JyAgICB0eXBlZGVmIEludEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6JXM6OiVzPiBIYXNoOycg
JSAoZG9tYWluLmRvbWFpbl9uYW1lLCBlbnVtX3R5cGUucmF3X25hbWUoKSkpCisgICAgICAgICAg
ICAgICAgZW51bV9saW5lcy5hcHBlbmQoJ307JykKKyAgICAgICAgICAgICAgICBkb21haW5fbGlu
ZXMuYXBwZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZW51bV90eXBlLmRl
Y2xhcmF0aW9uKCkuY29uZGl0aW9uLCAnXG4nLmpvaW4oZW51bV9saW5lcykpKQorCisgICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihkb21h
aW4uY29uZGl0aW9uLCAnXG4nLmpvaW4oZG9tYWluX2xpbmVzKSkpCiAKICAgICAgICAgaWYgbGVu
KGxpbmVzKSA9PSAwOgogICAgICAgICAgICAgcmV0dXJuIFtdCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJv
dG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaW1wbGVt
ZW50YXRpb24ucHkKaW5kZXggNjVjZWJmNTgzZWU4YmEzYzc4ZTliNGM3NDIwN2M2NDE2NmE4YWQx
MS4uNWRkNTM0Njk0NDg1NTE1NDhkNjdhYTBiNDU2YzZhMWE2NjU4ZDU5MyAxMDA3NTUKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVf
Y3BwX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5CisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90
eXBlc19pbXBsZW1lbnRhdGlvbi5weQpAQCAtMTI4LDkgKzEyOCw4IEBAIGNsYXNzIENwcFByb3Rv
Y29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICAg
ICAgICAgICcnLAogICAgICAgICAgICAgICAgICcgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsnLAog
ICAgICAgICAgICAgICAgICd9JywKLSAgICAgICAgICAgICAgICAnJywKICAgICAgICAgICAgIF0p
Ci0gICAgICAgICAgICByZXR1cm4gYm9keV9saW5lcworICAgICAgICAgICAgcmV0dXJuICdcbicu
am9pbihib2R5X2xpbmVzKQogCiAgICAgICAgIHR5cGVfZGVjbGFyYXRpb25zID0gc2VsZi50eXBl
X2RlY2xhcmF0aW9uc19mb3JfZG9tYWluKGRvbWFpbikKICAgICAgICAgZGVjbGFyYXRpb25fdHlw
ZXMgPSBbZGVjbC50eXBlIGZvciBkZWNsIGluIHR5cGVfZGVjbGFyYXRpb25zXQpAQCAtMTQ2LDE3
ICsxNDUsMjMgQEAgY2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9y
KENwcEdlbmVyYXRvcik6CiAgICAgICAgIGxpbmVzLmFwcGVuZCgiLy8gRW51bXMgaW4gdGhlICcl
cycgRG9tYWluIiAlIGRvbWFpbi5kb21haW5fbmFtZSkKICAgICAgICAgZm9yIGVudW1fdHlwZSBp
biBlbnVtX3R5cGVzOgogICAgICAgICAgICAgY3BwX3Byb3RvY29sX3R5cGUgPSBDcHBHZW5lcmF0
b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGUoZW51bV90eXBlKQotICAgICAgICAgICAgbGlu
ZXMuZXh0ZW5kKGdlbmVyYXRlX2NvbnZlcnNpb25fbWV0aG9kX2JvZHkoZW51bV90eXBlLCBjcHBf
cHJvdG9jb2xfdHlwZSkpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycpCisgICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihlbnVtX3R5
cGUuZGVjbGFyYXRpb24oKS5jb25kaXRpb24sIGdlbmVyYXRlX2NvbnZlcnNpb25fbWV0aG9kX2Jv
ZHkoZW51bV90eXBlLCBjcHBfcHJvdG9jb2xfdHlwZSkpKQogCiAgICAgICAgIGZvciBvYmplY3Rf
dHlwZSBpbiBvYmplY3RfdHlwZXM6CisgICAgICAgICAgICBvYmplY3RfbGluZXMgPSBbXQogICAg
ICAgICAgICAgZm9yIGVudW1fbWVtYmVyIGluIGZpbHRlcih0eXBlX21lbWJlcl9pc19hbm9ueW1v
dXNfZW51bV90eXBlLCBvYmplY3RfdHlwZS5tZW1iZXJzKToKICAgICAgICAgICAgICAgICBjcHBf
cHJvdG9jb2xfdHlwZSA9IENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZV9t
ZW1iZXIoZW51bV9tZW1iZXIsIG9iamVjdF90eXBlLmRlY2xhcmF0aW9uKCkpCi0gICAgICAgICAg
ICAgICAgbGluZXMuZXh0ZW5kKGdlbmVyYXRlX2NvbnZlcnNpb25fbWV0aG9kX2JvZHkoZW51bV9t
ZW1iZXIudHlwZSwgY3BwX3Byb3RvY29sX3R5cGUpKQorICAgICAgICAgICAgICAgIG9iamVjdF9s
aW5lcy5hcHBlbmQoZ2VuZXJhdGVfY29udmVyc2lvbl9tZXRob2RfYm9keShlbnVtX21lbWJlci50
eXBlLCBjcHBfcHJvdG9jb2xfdHlwZSkpCisgICAgICAgICAgICBpZiBsZW4ob2JqZWN0X2xpbmVz
KToKKyAgICAgICAgICAgICAgICBpZiBsZW4obGluZXMpOgorICAgICAgICAgICAgICAgICAgICBs
aW5lcy5hcHBlbmQoJycpCisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYud3JhcF93
aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24ob2JqZWN0X3R5cGUuZGVjbGFyYXRpb24oKS5jb25kaXRp
b24sICdcbicuam9pbihvYmplY3RfbGluZXMpKSkKIAogICAgICAgICBpZiBsZW4obGluZXMpID09
IDE6CiAgICAgICAgICAgICByZXR1cm4gJycgICMgTm8gcmVhbCBkZWNsYXJhdGlvbnMgdG8gZW1p
dCwganVzdCB0aGUgZG9tYWluIGNvbW1lbnQuCiAKLSAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93
aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCAnXG4nLmpvaW4obGluZXMpKQorICAgICAgICBy
ZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9u
LCAnXG4nLmpvaW4obGluZXMpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9lbnVtX21hcHBpbmdfYW5k
X2NvbnZlcnNpb25fbWV0aG9kcyhzZWxmLCBkb21haW5zKToKICAgICAgICAgc2VjdGlvbnMgPSBb
XQpAQCAtMTczLDEyICsxNzgsMTUgQEAgY2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0
aW9uR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgZGVmIF9nZW5lcmF0ZV9vcGVuX2ZpZWxk
X25hbWVzKHNlbGYpOgogICAgICAgICBsaW5lcyA9IFtdCiAgICAgICAgIGZvciBkb21haW4gaW4g
c2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCk6CisgICAgICAgICAgICBkb21haW5fbGluZXMgPSBb
XQogICAgICAgICAgICAgdHlwZV9kZWNsYXJhdGlvbnMgPSBzZWxmLnR5cGVfZGVjbGFyYXRpb25z
X2Zvcl9kb21haW4oZG9tYWluKQogICAgICAgICAgICAgZm9yIHR5cGVfZGVjbGFyYXRpb24gaW4g
W2RlY2wgZm9yIGRlY2wgaW4gdHlwZV9kZWNsYXJhdGlvbnMgaWYgR2VuZXJhdG9yLnR5cGVfaGFz
X29wZW5fZmllbGRzKGRlY2wudHlwZSldOgogICAgICAgICAgICAgICAgIG9wZW5fbWVtYmVycyA9
IEdlbmVyYXRvci5vcGVuX2ZpZWxkcyh0eXBlX2RlY2xhcmF0aW9uKQogICAgICAgICAgICAgICAg
IGZvciB0eXBlX21lbWJlciBpbiBzb3J0ZWQob3Blbl9tZW1iZXJzLCBrZXk9bGFtYmRhIG1lbWJl
cjogbWVtYmVyLm1lbWJlcl9uYW1lKToKICAgICAgICAgICAgICAgICAgICAgZmllbGRfbmFtZSA9
ICc6Oicuam9pbihbJ0luc3BlY3RvcicsICdQcm90b2NvbCcsIGRvbWFpbi5kb21haW5fbmFtZSwg
dWNmaXJzdCh0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbmFtZSksIHVjZmlyc3QodHlwZV9tZW1iZXIu
bWVtYmVyX25hbWUpXSkKLSAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdjb25zdCBj
aGFyKiAlcyA9ICIlcyI7JyAlIChmaWVsZF9uYW1lLCB0eXBlX21lbWJlci5tZW1iZXJfbmFtZSkp
CisgICAgICAgICAgICAgICAgICAgIGRvbWFpbl9saW5lcy5hcHBlbmQoJ2NvbnN0IGNoYXIqICVz
ID0gIiVzIjsnICUgKGZpZWxkX25hbWUsIHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lKSkKKyAgICAg
ICAgICAgIGlmIGxlbihkb21haW5fbGluZXMpOgorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVu
ZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRvbWFpbi5jb25kaXRpb24sICdc
bicuam9pbihkb21haW5fbGluZXMpKSkKIAogICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVz
KQogCkBAIC0xODgsMTYgKzE5NiwyMiBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVzSW1wbGVtZW50
YXRpb25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgZGVjbGFyYXRpb25zX3RvX2dl
bmVyYXRlID0gW2RlY2wgZm9yIGRlY2wgaW4gdHlwZV9kZWNsYXJhdGlvbnMgaWYgc2VsZi50eXBl
X25lZWRzX3NoYXBlX2Fzc2VydGlvbnMoZGVjbC50eXBlKV0KIAogICAgICAgICBmb3IgdHlwZV9k
ZWNsYXJhdGlvbiBpbiBkZWNsYXJhdGlvbnNfdG9fZ2VuZXJhdGU6CisgICAgICAgICAgICB0eXBl
X2xpbmVzID0gW10KICAgICAgICAgICAgIGZvciB0eXBlX21lbWJlciBpbiB0eXBlX2RlY2xhcmF0
aW9uLnR5cGVfbWVtYmVyczoKICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGVfbWVt
YmVyLnR5cGUsIEVudW1UeXBlKToKLSAgICAgICAgICAgICAgICAgICAgc2VjdGlvbnMuYXBwZW5k
KHNlbGYuX2dlbmVyYXRlX2Fzc2VydGlvbl9mb3JfZW51bSh0eXBlX21lbWJlciwgdHlwZV9kZWNs
YXJhdGlvbikpCisgICAgICAgICAgICAgICAgICAgIHR5cGVfbGluZXMuYXBwZW5kKHNlbGYuX2dl
bmVyYXRlX2Fzc2VydGlvbl9mb3JfZW51bSh0eXBlX21lbWJlciwgdHlwZV9kZWNsYXJhdGlvbikp
CiAKICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodHlwZV9kZWNsYXJhdGlvbi50eXBlLCBPYmpl
Y3RUeXBlKToKLSAgICAgICAgICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVf
YXNzZXJ0aW9uX2Zvcl9vYmplY3RfZGVjbGFyYXRpb24odHlwZV9kZWNsYXJhdGlvbikpCisgICAg
ICAgICAgICAgICAgdHlwZV9saW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYXNzZXJ0aW9uX2Zv
cl9vYmplY3RfZGVjbGFyYXRpb24odHlwZV9kZWNsYXJhdGlvbikpCiAgICAgICAgICAgICAgICAg
aWYgR2VuZXJhdG9yLnR5cGVfbmVlZHNfcnVudGltZV9jYXN0cyh0eXBlX2RlY2xhcmF0aW9uLnR5
cGUpOgotICAgICAgICAgICAgICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVf
cnVudGltZV9jYXN0X2Zvcl9vYmplY3RfZGVjbGFyYXRpb24odHlwZV9kZWNsYXJhdGlvbikpCisg
ICAgICAgICAgICAgICAgICAgIHR5cGVfbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX3J1bnRp
bWVfY2FzdF9mb3Jfb2JqZWN0X2RlY2xhcmF0aW9uKHR5cGVfZGVjbGFyYXRpb24pKQorICAgICAg
ICAgICAgaWYgbGVuKHR5cGVfbGluZXMpOgorICAgICAgICAgICAgICAgIHNlY3Rpb25zLmFwcGVu
ZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKHR5cGVfZGVjbGFyYXRpb24uY29u
ZGl0aW9uLCAnXG5cbicuam9pbih0eXBlX2xpbmVzKSkpCiAKLSAgICAgICAgcmV0dXJuICdcblxu
Jy5qb2luKHNlY3Rpb25zKQorICAgICAgICBpZiBub3QgbGVuKHNlY3Rpb25zKToKKyAgICAgICAg
ICAgIHJldHVybiAnJworCisgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3Jf
Y29uZGl0aW9uKGRvbWFpbi5jb25kaXRpb24sICdcblxuJy5qb2luKHNlY3Rpb25zKSkKIAogICAg
IGRlZiBfZ2VuZXJhdGVfcnVudGltZV9jYXN0X2Zvcl9vYmplY3RfZGVjbGFyYXRpb24oc2VsZiwg
b2JqZWN0X2RlY2xhcmF0aW9uKToKICAgICAgICAgYXJncyA9IHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2pzX2Jh
Y2tlbmRfY29tbWFuZHMucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9nZW5lcmF0ZV9qc19iYWNrZW5kX2NvbW1hbmRzLnB5CmluZGV4IGJiZjc2Zjky
OTExMzJhM2E1ZDU5YWU4ZTE2MTU0ZDg4OTllMDZjYTIuLmVhNmZmZmIyMjM4MWIwMDVlN2I3MGMw
NGE0MDI5Yjc1Njk2NDllZTAgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2pzX2JhY2tlbmRfY29tbWFuZHMucHkKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJh
dGVfanNfYmFja2VuZF9jb21tYW5kcy5weQpAQCAtNDcsNyArNDcsNyBAQCBjbGFzcyBKU0JhY2tl
bmRDb21tYW5kc0dlbmVyYXRvcihHZW5lcmF0b3IpOgogICAgICAgICBHZW5lcmF0b3IuX19pbml0
X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKQogCiAgICAgZGVmIG91dHB1dF9maWxlbmFtZShzZWxm
KToKLSAgICAgICAgcmV0dXJuICJJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMiCisgICAgICAg
IHJldHVybiAiSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzLmluIgogCiAgICAgZGVmIHNob3Vs
ZF9nZW5lcmF0ZV9kb21haW4oc2VsZiwgZG9tYWluKToKICAgICAgICAgdHlwZV9kZWNsYXJhdGlv
bnMgPSBzZWxmLnR5cGVfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4oZG9tYWluKQpAQCAtOTYsNyAr
OTYsNyBAQCBjbGFzcyBKU0JhY2tlbmRDb21tYW5kc0dlbmVyYXRvcihHZW5lcmF0b3IpOgogICAg
ICAgICAgICAgICAgICAgICAnZW51bU5hbWUnOiBkZWNsYXJhdGlvbi50eXBlX25hbWUsCiAgICAg
ICAgICAgICAgICAgICAgICdlbnVtTWFwJzogIiwgIi5qb2luKFsnJXM6ICIlcyInICUgKEdlbmVy
YXRvci5zdHlsaXplZF9uYW1lX2Zvcl9lbnVtX3ZhbHVlKGVudW1fdmFsdWUpLCBlbnVtX3ZhbHVl
KSBmb3IgZW51bV92YWx1ZSBpbiBkZWNsYXJhdGlvbi50eXBlLmVudW1fdmFsdWVzKCldKQogICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0luc3BlY3RvckJh
Y2tlbmQucmVnaXN0ZXJFbnVtKCIlKGRvbWFpbk5hbWUpcy4lKGVudW1OYW1lKXMiLCB7JShlbnVt
TWFwKXN9KTsnICUgZW51bV9hcmdzKQorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxm
LndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRlY2xhcmF0aW9uLmNvbmRpdGlvbiwgJ0lu
c3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCIlKGRvbWFpbk5hbWUpcy4lKGVudW1OYW1lKXMi
LCB7JShlbnVtTWFwKXN9KTsnICUgZW51bV9hcmdzKSkKIAogICAgICAgICAgICAgZGVmIGlzX2Fu
b255bW91c19lbnVtX21lbWJlcih0eXBlX21lbWJlcik6CiAgICAgICAgICAgICAgICAgcmV0dXJu
IGlzaW5zdGFuY2UodHlwZV9tZW1iZXIudHlwZSwgRW51bVR5cGUpIGFuZCB0eXBlX21lbWJlci50
eXBlLmlzX2Fub255bW91cwpAQCAtMTI4LDE2ICsxMjgsMTggQEAgY2xhc3MgSlNCYWNrZW5kQ29t
bWFuZHNHZW5lcmF0b3IoR2VuZXJhdG9yKToKICAgICAgICAgICAgICAgICAnY2FsbFBhcmFtcyc6
ICIsICIuam9pbihbZ2VuZXJhdGVfcGFyYW1ldGVyX29iamVjdChwYXJhbWV0ZXIpIGZvciBwYXJh
bWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnNdKSwKICAgICAgICAgICAgICAgICAncmV0
dXJuUGFyYW1zJzogIiwgIi5qb2luKFsnIiVzIicgJSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUg
Zm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzXSksCiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJD
b21tYW5kKCIlKGRvbWFpbk5hbWUpcy4lKGNvbW1hbmROYW1lKXMiLCAlKHRhcmdldFR5cGVzKXMs
IFslKGNhbGxQYXJhbXMpc10sIFslKHJldHVyblBhcmFtcylzXSk7JyAlIGNvbW1hbmRfYXJncykK
KyAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0
aW9uKGNvbW1hbmQuY29uZGl0aW9uLCAnSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQo
IiUoZG9tYWluTmFtZSlzLiUoY29tbWFuZE5hbWUpcyIsICUodGFyZ2V0VHlwZXMpcywgWyUoY2Fs
bFBhcmFtcylzXSwgWyUocmV0dXJuUGFyYW1zKXNdKTsnICUgY29tbWFuZF9hcmdzKSkKIAogICAg
ICAgICBmb3IgZXZlbnQgaW4gZXZlbnRzOgorICAgICAgICAgICAgZXZlbnRfbGluZXMgPSBbXQor
CiAgICAgICAgICAgICBmb3IgcGFyYW0gaW4gZmlsdGVyKGlzX2Fub255bW91c19lbnVtX3BhcmFt
LCBldmVudC5ldmVudF9wYXJhbWV0ZXJzKToKICAgICAgICAgICAgICAgICBlbnVtX2FyZ3MgPSB7
CiAgICAgICAgICAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLAog
ICAgICAgICAgICAgICAgICAgICAnZW51bU5hbWUnOiAnJXMlcycgJSAodWNmaXJzdChldmVudC5l
dmVudF9uYW1lKSwgdWNmaXJzdChwYXJhbS5wYXJhbWV0ZXJfbmFtZSkpLAogICAgICAgICAgICAg
ICAgICAgICAnZW51bU1hcCc6ICIsICIuam9pbihbJyVzOiAiJXMiJyAlIChHZW5lcmF0b3Iuc3R5
bGl6ZWRfbmFtZV9mb3JfZW51bV92YWx1ZShlbnVtX3ZhbHVlKSwgZW51bV92YWx1ZSkgZm9yIGVu
dW1fdmFsdWUgaW4gcGFyYW0udHlwZS5lbnVtX3ZhbHVlcygpXSksCiAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnSW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rl
ckVudW0oIiUoZG9tYWluTmFtZSlzLiUoZW51bU5hbWUpcyIsIHslKGVudW1NYXApc30pOycgJSBl
bnVtX2FyZ3MpCisgICAgICAgICAgICAgICAgZXZlbnRfbGluZXMuYXBwZW5kKCdJbnNwZWN0b3JC
YWNrZW5kLnJlZ2lzdGVyRW51bSgiJShkb21haW5OYW1lKXMuJShlbnVtTmFtZSlzIiwgeyUoZW51
bU1hcClzfSk7JyAlIGVudW1fYXJncykKIAogICAgICAgICAgICAgZXZlbnRfYXJncyA9IHsKICAg
ICAgICAgICAgICAgICAnZG9tYWluTmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZSwKQEAgLTE0NSw3
ICsxNDcsOSBAQCBjbGFzcyBKU0JhY2tlbmRDb21tYW5kc0dlbmVyYXRvcihHZW5lcmF0b3IpOgog
ICAgICAgICAgICAgICAgICd0YXJnZXRUeXBlcyc6IGpzb24uZHVtcHMoZXZlbnQudGFyZ2V0X3R5
cGVzKSwKICAgICAgICAgICAgICAgICAncGFyYW1zJzogIiwgIi5qb2luKFsnIiVzIicgJSBwYXJh
bWV0ZXIucGFyYW1ldGVyX25hbWUgZm9yIHBhcmFtZXRlciBpbiBldmVudC5ldmVudF9wYXJhbWV0
ZXJzXSksCiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0luc3BlY3Rv
ckJhY2tlbmQucmVnaXN0ZXJFdmVudCgiJShkb21haW5OYW1lKXMuJShldmVudE5hbWUpcyIsICUo
dGFyZ2V0VHlwZXMpcywgWyUocGFyYW1zKXNdKTsnICUgZXZlbnRfYXJncykKKyAgICAgICAgICAg
IGV2ZW50X2xpbmVzLmFwcGVuZCgnSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckV2ZW50KCIlKGRv
bWFpbk5hbWUpcy4lKGV2ZW50TmFtZSlzIiwgJSh0YXJnZXRUeXBlcylzLCBbJShwYXJhbXMpc10p
OycgJSBldmVudF9hcmdzKQorCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi53cmFwX3dp
dGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihldmVudC5jb25kaXRpb24sICdcbicuam9pbihldmVudF9s
aW5lcykpKQogCiAgICAgICAgIGhhc19hc3luY19jb21tYW5kcyA9IGFueShbY29tbWFuZC5pc19h
c3luYyBmb3IgY29tbWFuZCBpbiBjb21tYW5kc10pCiAgICAgICAgIGlmIGxlbihldmVudHMpID4g
MCBvciBoYXNfYXN5bmNfY29tbWFuZHM6CkBAIC0xNjAsNCArMTY0LDQgQEAgY2xhc3MgSlNCYWNr
ZW5kQ29tbWFuZHNHZW5lcmF0b3IoR2VuZXJhdG9yKToKICAgICAgICAgfQogICAgICAgICBsaW5l
cy5hcHBlbmQoJ0luc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIiUoZG9tYWluTmFtZSlz
IiwgJShkZWJ1Z2dhYmxlVHlwZXMpcyk7JyAlIGFjdGl2YXRlX2FyZ3MpCiAKLSAgICAgICAgcmV0
dXJuICJcbiIuam9pbihsaW5lcykKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJk
X2Zvcl9jb25kaXRpb24oZG9tYWluLmNvbmRpdGlvbiwgIlxuIi5qb2luKGxpbmVzKSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dl
bmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfYmFja2VuZF9k
aXNwYXRjaGVyX2hlYWRlci5weQppbmRleCBlZDhjYzU5NmQzMTAzMDNiYzJmMTZiN2NhNWJmNzA2
NDdjMGI0NDBmLi5lYTJmYzExMjc0ZTI1NDViZDU3MTJiMGZlNDc4MTM1OGExMmZiNGJlIDEwMDc1
NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9n
ZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNr
ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CkBAIC05OSw3ICs5OSw3IEBAIGNsYXNzIE9iakNCYWNr
ZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKICAgICAgICAgICAg
ICdvYmpjUHJlZml4Jzogc2VsZi5vYmpjX3ByZWZpeCgpLAogICAgICAgICB9CiAKLSAgICAgICAg
cmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCBUZW1wbGF0ZShP
YmpDVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVySGVhZGVyRG9tYWluSGFuZGxlck9iakNEZWNs
YXJhdGlvbikuc3Vic3RpdHV0ZShOb25lLCAqKmhhbmRsZXJfYXJncykpCisgICAgICAgIHJldHVy
biBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRvbWFpbi5jb25kaXRpb24sIFRl
bXBsYXRlKE9iakNUZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNoZXJIZWFkZXJEb21haW5IYW5kbGVy
T2JqQ0RlY2xhcmF0aW9uKS5zdWJzdGl0dXRlKE5vbmUsICoqaGFuZGxlcl9hcmdzKSkKIAogICAg
IGRlZiBfZ2VuZXJhdGVfb2JqY19oYW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKHNlbGYs
IGNvbW1hbmQpOgogICAgICAgICBsaW5lcyA9IFtdCkBAIC0xMTIsNCArMTEyLDQgQEAgY2xhc3Mg
T2JqQ0JhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogICAg
ICAgICAgICAgJ3BhcmFtZXRlcnMnOiAnLCAnLmpvaW4ocGFyYW1ldGVycyksCiAgICAgICAgIH0K
ICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgdm9pZCAlKGNvbW1hbmROYW1lKXMoJShwYXJhbWV0
ZXJzKXMpIGZpbmFsOycgJSBjb21tYW5kX2FyZ3MpCi0gICAgICAgIHJldHVybiAnXG4nLmpvaW4o
bGluZXMpCisgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9u
KGNvbW1hbmQuY29uZGl0aW9uLCAnXG4nLmpvaW4obGluZXMpKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19i
YWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0
Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQppbmRleCBhMWI5ZTE3OTcwNTgxMjViYzc3ZmRkNTJmZDU1
ODQyOGI4M2JkMjA3Li5mNWVlOGU1ODM5OGQ2OWJhZTRiZWI0YzE4NjcwNjNjY2Q1MjIwOWVjIDEw
MDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQpAQCAtODYsNyArODYs
NyBAQCBjbGFzcyBPYmpDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihP
YmpDR2VuZXJhdG9yKToKICAgICAgICAgZm9yIGNvbW1hbmQgaW4gY29tbWFuZHM6CiAgICAgICAg
ICAgICBjb21tYW5kX2RlY2xhcmF0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfaGFuZGxlcl9p
bXBsZW1lbnRhdGlvbl9mb3JfY29tbWFuZChkb21haW4sIGNvbW1hbmQpKQogCi0gICAgICAgIHJl
dHVybiAnXG4nLmpvaW4oY29tbWFuZF9kZWNsYXJhdGlvbnMpCisgICAgICAgIHJldHVybiBzZWxm
LndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRvbWFpbi5jb25kaXRpb24sICdcblxuJy5q
b2luKGNvbW1hbmRfZGVjbGFyYXRpb25zKSkKIAogICAgIGRlZiBfZ2VuZXJhdGVfaGFuZGxlcl9p
bXBsZW1lbnRhdGlvbl9mb3JfY29tbWFuZChzZWxmLCBkb21haW4sIGNvbW1hbmQpOgogICAgICAg
ICBsaW5lcyA9IFtdCkBAIC0xMDQsNyArMTA0LDcgQEAgY2xhc3MgT2JqQ0JhY2tlbmREaXNwYXRj
aGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgICAgICAgICAn
aW52b2NhdGlvbic6IHNlbGYuX2dlbmVyYXRlX2ludm9jYXRpb25fZm9yX2NvbW1hbmQoZG9tYWlu
LCBjb21tYW5kKSwKICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9n
dWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgVGVtcGxhdGUoT2JqQ1RlbXBsYXRlcy5CYWNrZW5kRGlz
cGF0Y2hlckhlYWRlckRvbWFpbkhhbmRsZXJJbXBsZW1lbnRhdGlvbikuc3Vic3RpdHV0ZShOb25l
LCAqKmNvbW1hbmRfYXJncykpCisgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9m
b3JfY29uZGl0aW9uKGNvbW1hbmQuY29uZGl0aW9uLCBUZW1wbGF0ZShPYmpDVGVtcGxhdGVzLkJh
Y2tlbmREaXNwYXRjaGVySGVhZGVyRG9tYWluSGFuZGxlckltcGxlbWVudGF0aW9uKS5zdWJzdGl0
dXRlKE5vbmUsICoqY29tbWFuZF9hcmdzKSkKIAogICAgIGRlZiBfZ2VuZXJhdGVfcmVzcG9uZHNf
dG9fc2VsZWN0b3JfZm9yX2NvbW1hbmQoc2VsZiwgZG9tYWluLCBjb21tYW5kKToKICAgICAgICAg
cmV0dXJuICdbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKCVzV2l0aEVy
cm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOiVzKV0nICUgKGNvbW1hbmQuY29tbWFuZF9uYW1l
LCAnJy5qb2luKG1hcChsYW1iZGEgcGFyYW1ldGVyOiAnJXM6JyAlIHBhcmFtZXRlci5wYXJhbWV0
ZXJfbmFtZSwgY29tbWFuZC5jYWxsX3BhcmFtZXRlcnMpKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfaGVh
ZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGVfb2JqY19oZWFkZXIucHkKaW5kZXggMTVmYjc0YmU4YmZiMTRjNDE5ZmJkYzNlZDk3
ZWRjYzI2MGZiNDllNy4uMTViZjYxZDJkNDUzNzk5ZWE1MTY0OGNiY2MwNzI2ZmQ0MDE4NTJlMSAx
MDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVn
ZW4vZ2VuZXJhdGVfb2JqY19oZWFkZXIucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19oZWFkZXIucHkKQEAgLTMxLDEy
ICszMSwxMiBAQCBmcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKIAogdHJ5OgogICAgIGZyb20g
LmdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0Ci0gICAgZnJvbSAubW9kZWxzIGlt
cG9ydCBPYmplY3RUeXBlLCBFbnVtVHlwZSwgUGxhdGZvcm1zCisgICAgZnJvbSAubW9kZWxzIGlt
cG9ydCBPYmplY3RUeXBlLCBFbnVtVHlwZQogICAgIGZyb20gLm9iamNfZ2VuZXJhdG9yIGltcG9y
dCBPYmpDR2VuZXJhdG9yLCBqb2luX3R5cGVfYW5kX25hbWUKICAgICBmcm9tIC5vYmpjX2dlbmVy
YXRvcl90ZW1wbGF0ZXMgaW1wb3J0IE9iakNHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgT2JqQ1RlbXBs
YXRlcwogZXhjZXB0IFZhbHVlRXJyb3I6CiAgICAgZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVy
YXRvciwgdWNmaXJzdAotICAgIGZyb20gbW9kZWxzIGltcG9ydCBPYmplY3RUeXBlLCBFbnVtVHlw
ZSwgUGxhdGZvcm1zCisgICAgZnJvbSBtb2RlbHMgaW1wb3J0IE9iamVjdFR5cGUsIEVudW1UeXBl
CiAgICAgZnJvbSBvYmpjX2dlbmVyYXRvciBpbXBvcnQgT2JqQ0dlbmVyYXRvciwgam9pbl90eXBl
X2FuZF9uYW1lCiAgICAgZnJvbSBvYmpjX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IE9iakNH
ZW5lcmF0b3JUZW1wbGF0ZXMgYXMgT2JqQ1RlbXBsYXRlcwogCkBAIC00NCw3ICs0NCw3IEBAIGxv
ZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQogCiAKIGRlZiBhZGRfbmV3bGluZShsaW5l
cyk6Ci0gICAgaWYgbGluZXMgYW5kIGxpbmVzWy0xXSA9PSAnJzoKKyAgICBpZiBub3QgbGVuKGxp
bmVzKSBvciBsaW5lc1stMV0gPT0gJyc6CiAgICAgICAgIHJldHVybgogICAgIGxpbmVzLmFwcGVu
ZCgnJykKIApAQCAtODcsNyArODcsNiBAQCBjbGFzcyBPYmpDSGVhZGVyR2VuZXJhdG9yKE9iakNH
ZW5lcmF0b3IpOgogICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9saWNlbnNl
KCkpCiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShPYmpDVGVtcGxhdGVzLkhlYWRl
clByZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJQcmVsdWRlX2FyZ3MpKQogICAgICAg
ICBzZWN0aW9ucy5hcHBlbmQoJ1xuJy5qb2luKFtfZiBmb3IgX2YgaW4gbWFwKHNlbGYuX2dlbmVy
YXRlX2ZvcndhcmRfZGVjbGFyYXRpb25zLCB0eXBlX2RvbWFpbnMpIGlmIF9mXSkpCi0gICAgICAg
IHNlY3Rpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9lbnVtX2Zvcl9wbGF0Zm9ybXMoKSkKICAg
ICAgICAgc2VjdGlvbnMuYXBwZW5kKCdcbicuam9pbihbX2YgZm9yIF9mIGluIG1hcChzZWxmLl9n
ZW5lcmF0ZV9lbnVtcywgdHlwZV9kb21haW5zKSBpZiBfZl0pKQogICAgICAgICBzZWN0aW9ucy5h
cHBlbmQoJ1xuJy5qb2luKFtfZiBmb3IgX2YgaW4gbWFwKHNlbGYuX2dlbmVyYXRlX3R5cGVzLCB0
eXBlX2RvbWFpbnMpIGlmIF9mXSkpCiAKQEAgLTEwMyw0MiArMTAyLDUxIEBAIGNsYXNzIE9iakNI
ZWFkZXJHZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgICAgIGZvciBkZWNsYXJhdGlvbiBp
biBzZWxmLnR5cGVfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4oZG9tYWluKToKICAgICAgICAgICAg
IGlmIChpc2luc3RhbmNlKGRlY2xhcmF0aW9uLnR5cGUsIE9iamVjdFR5cGUpKToKICAgICAgICAg
ICAgICAgICBvYmpjX25hbWUgPSBzZWxmLm9iamNfbmFtZV9mb3JfdHlwZShkZWNsYXJhdGlvbi50
eXBlKQotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnQGNsYXNzICVzOycgJSBvYmpjX25h
bWUpCi0gICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisgICAgICAgICAgICAgICAgbGlu
ZXMuYXBwZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZGVjbGFyYXRpb24u
Y29uZGl0aW9uLCAnQGNsYXNzICVzOycgJSBvYmpjX25hbWUpKQorICAgICAgICByZXR1cm4gc2Vs
Zi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9uLCAnXG4nLmpv
aW4obGluZXMpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9lbnVtcyhzZWxmLCBkb21haW4pOgogICAg
ICAgICBsaW5lcyA9IFtdCiAKICAgICAgICAgIyBUeXBlIGVudW1zIGFuZCBtZW1iZXIgZW51bXMu
CiAgICAgICAgIGZvciBkZWNsYXJhdGlvbiBpbiBzZWxmLnR5cGVfZGVjbGFyYXRpb25zX2Zvcl9k
b21haW4oZG9tYWluKToKKyAgICAgICAgICAgIGRlY2xhcmF0aW9uX2xpbmVzID0gW10KICAgICAg
ICAgICAgIGlmIGlzaW5zdGFuY2UoZGVjbGFyYXRpb24udHlwZSwgRW51bVR5cGUpOgotICAgICAg
ICAgICAgICAgIGFkZF9uZXdsaW5lKGxpbmVzKQotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVu
ZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfZGVjbGFyYXRpb24oZG9tYWluLCBk
ZWNsYXJhdGlvbikpCisgICAgICAgICAgICAgICAgYWRkX25ld2xpbmUoZGVjbGFyYXRpb25fbGlu
ZXMpCisgICAgICAgICAgICAgICAgZGVjbGFyYXRpb25fbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVy
YXRlX2Fub255bW91c19lbnVtX2Zvcl9kZWNsYXJhdGlvbihkb21haW4sIGRlY2xhcmF0aW9uKSkK
ICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgZm9yIG1lbWJlciBpbiBkZWNsYXJh
dGlvbi50eXBlX21lbWJlcnM6CiAgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UobWVt
YmVyLnR5cGUsIEVudW1UeXBlKSBhbmQgbWVtYmVyLnR5cGUuaXNfYW5vbnltb3VzOgotICAgICAg
ICAgICAgICAgICAgICAgICAgYWRkX25ld2xpbmUobGluZXMpCi0gICAgICAgICAgICAgICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX21lbWJl
cihkb21haW4sIGRlY2xhcmF0aW9uLCBtZW1iZXIpKQorICAgICAgICAgICAgICAgICAgICAgICAg
YWRkX25ld2xpbmUoZGVjbGFyYXRpb25fbGluZXMpCisgICAgICAgICAgICAgICAgICAgICAgICBk
ZWNsYXJhdGlvbl9saW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fZm9y
X21lbWJlcihkb21haW4sIGRlY2xhcmF0aW9uLCBtZW1iZXIpKQorICAgICAgICAgICAgaWYgbGVu
KGRlY2xhcmF0aW9uX2xpbmVzKToKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi53
cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihkZWNsYXJhdGlvbi5jb25kaXRpb24sICdcblxu
Jy5qb2luKGRlY2xhcmF0aW9uX2xpbmVzKSkpCiAKICAgICAgICAgIyBBbm9ueW1vdXMgY29tbWFu
ZCBlbnVtcy4KICAgICAgICAgZm9yIGNvbW1hbmQgaW4gc2VsZi5jb21tYW5kc19mb3JfZG9tYWlu
KGRvbWFpbik6CisgICAgICAgICAgICBjb21tYW5kX2xpbmVzID0gW10KICAgICAgICAgICAgIGZv
ciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6CiAgICAgICAgICAgICAgICAg
aWYgaXNpbnN0YW5jZShwYXJhbWV0ZXIudHlwZSwgRW51bVR5cGUpIGFuZCBwYXJhbWV0ZXIudHlw
ZS5pc19hbm9ueW1vdXM6Ci0gICAgICAgICAgICAgICAgICAgIGFkZF9uZXdsaW5lKGxpbmVzKQot
ICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnltb3Vz
X2VudW1fZm9yX3BhcmFtZXRlcihkb21haW4sIGNvbW1hbmQuY29tbWFuZF9uYW1lLCBwYXJhbWV0
ZXIpKQorICAgICAgICAgICAgICAgICAgICBhZGRfbmV3bGluZShjb21tYW5kX2xpbmVzKQorICAg
ICAgICAgICAgICAgICAgICBjb21tYW5kX2xpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9u
eW1vdXNfZW51bV9mb3JfcGFyYW1ldGVyKGRvbWFpbiwgY29tbWFuZC5jb21tYW5kX25hbWUsIHBh
cmFtZXRlcikpCiAgICAgICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQucmV0dXJuX3Bh
cmFtZXRlcnM6CiAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShwYXJhbWV0ZXIudHlwZSwg
RW51bVR5cGUpIGFuZCBwYXJhbWV0ZXIudHlwZS5pc19hbm9ueW1vdXM6Ci0gICAgICAgICAgICAg
ICAgICAgIGFkZF9uZXdsaW5lKGxpbmVzKQotICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBl
bmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX3BhcmFtZXRlcihkb21haW4sIGNv
bW1hbmQuY29tbWFuZF9uYW1lLCBwYXJhbWV0ZXIpKQorICAgICAgICAgICAgICAgICAgICBhZGRf
bmV3bGluZShjb21tYW5kX2xpbmVzKQorICAgICAgICAgICAgICAgICAgICBjb21tYW5kX2xpbmVz
LmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfcGFyYW1ldGVyKGRvbWFp
biwgY29tbWFuZC5jb21tYW5kX25hbWUsIHBhcmFtZXRlcikpCisgICAgICAgICAgICBpZiBsZW4o
Y29tbWFuZF9saW5lcyk6CisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYud3JhcF93
aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oY29tbWFuZC5jb25kaXRpb24sICdcblxuJy5qb2luKGNv
bW1hbmRfbGluZXMpKSkKIAogICAgICAgICAjIEFub255bW91cyBldmVudCBlbnVtcy4KICAgICAg
ICAgZm9yIGV2ZW50IGluIHNlbGYuZXZlbnRzX2Zvcl9kb21haW4oZG9tYWluKToKKyAgICAgICAg
ICAgIGV2ZW50X2xpbmVzID0gW10KICAgICAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gZXZlbnQu
ZXZlbnRfcGFyYW1ldGVyczoKICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHBhcmFtZXRl
ci50eXBlLCBFbnVtVHlwZSkgYW5kIHBhcmFtZXRlci50eXBlLmlzX2Fub255bW91czoKLSAgICAg
ICAgICAgICAgICAgICAgYWRkX25ld2xpbmUobGluZXMpCi0gICAgICAgICAgICAgICAgICAgIGxp
bmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfcGFyYW1ldGVyKGRv
bWFpbiwgZXZlbnQuZXZlbnRfbmFtZSwgcGFyYW1ldGVyKSkKKyAgICAgICAgICAgICAgICAgICAg
YWRkX25ld2xpbmUoZXZlbnRfbGluZXMpCisgICAgICAgICAgICAgICAgICAgIGV2ZW50X2xpbmVz
LmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfcGFyYW1ldGVyKGRvbWFp
biwgZXZlbnQuZXZlbnRfbmFtZSwgcGFyYW1ldGVyKSkKKyAgICAgICAgICAgIGlmIGxlbihldmVu
dF9saW5lcyk6CisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYud3JhcF93aXRoX2d1
YXJkX2Zvcl9jb25kaXRpb24oZXZlbnQuY29uZGl0aW9uLCAnXG5cbicuam9pbihldmVudF9saW5l
cykpKQogCi0gICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisgICAgICAgIHJldHVybiBz
ZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRvbWFpbi5jb25kaXRpb24sICdcblxu
Jy5qb2luKGxpbmVzKSkKIAogICAgIGRlZiBfZ2VuZXJhdGVfdHlwZXMoc2VsZiwgZG9tYWluKToK
ICAgICAgICAgbGluZXMgPSBbXQpAQCAtMTQ3LDEyICsxNTUsNyBAQCBjbGFzcyBPYmpDSGVhZGVy
R2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShkZWNs
YXJhdGlvbi50eXBlLCBPYmplY3RUeXBlKToKICAgICAgICAgICAgICAgICBhZGRfbmV3bGluZShs
aW5lcykKICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfdHlwZV9p
bnRlcmZhY2UoZG9tYWluLCBkZWNsYXJhdGlvbikpCi0gICAgICAgIHJldHVybiAnXG4nLmpvaW4o
bGluZXMpCi0KLSAgICBkZWYgX2dlbmVyYXRlX2VudW1fZm9yX3BsYXRmb3JtcyhzZWxmKToKLSAg
ICAgICAgb2JqY19lbnVtX25hbWUgPSAnJXNQbGF0Zm9ybScgJSBzZWxmLm9iamNfcHJlZml4KCkK
LSAgICAgICAgZW51bV92YWx1ZXMgPSBbcGxhdGZvcm0ubmFtZSBmb3IgcGxhdGZvcm0gaW4gUGxh
dGZvcm1zXQotICAgICAgICByZXR1cm4gc2VsZi5fZ2VuZXJhdGVfZW51bShvYmpjX2VudW1fbmFt
ZSwgZW51bV92YWx1ZXMpCisgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3Jf
Y29uZGl0aW9uKGRvbWFpbi5jb25kaXRpb24sICdcbicuam9pbihsaW5lcykpCiAKICAgICBkZWYg
X2dlbmVyYXRlX2Fub255bW91c19lbnVtX2Zvcl9kZWNsYXJhdGlvbihzZWxmLCBkb21haW4sIGRl
Y2xhcmF0aW9uKToKICAgICAgICAgb2JqY19lbnVtX25hbWUgPSBzZWxmLm9iamNfZW51bV9uYW1l
X2Zvcl9hbm9ueW1vdXNfZW51bV9kZWNsYXJhdGlvbihkZWNsYXJhdGlvbikKQEAgLTE5NCw3ICsx
OTcsNyBAQCBjbGFzcyBPYmpDSGVhZGVyR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogICAgICAg
ICBmb3IgbWVtYmVyIGluIG9wdGlvbmFsX21lbWJlcnM6CiAgICAgICAgICAgICBsaW5lcy5hcHBl
bmQoJy8qIG9wdGlvbmFsICovICcgKyBzZWxmLl9nZW5lcmF0ZV9tZW1iZXJfcHJvcGVydHkoZGVj
bGFyYXRpb24sIG1lbWJlcikpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnQGVuZCcpCi0gICAgICAg
IHJldHVybiAnXG4nLmpvaW4obGluZXMpCisgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9n
dWFyZF9mb3JfY29uZGl0aW9uKGRlY2xhcmF0aW9uLmNvbmRpdGlvbiwgJ1xuJy5qb2luKGxpbmVz
KSkKIAogICAgIGRlZiBfZ2VuZXJhdGVfaW5pdF9tZXRob2RfZm9yX3JlcXVpcmVkX21lbWJlcnMo
c2VsZiwgZG9tYWluLCBkZWNsYXJhdGlvbiwgcmVxdWlyZWRfbWVtYmVycyk6CiAgICAgICAgIHBh
aXJzID0gW10KQEAgLTIxOSw3ICsyMjIsNyBAQCBjbGFzcyBPYmpDSGVhZGVyR2VuZXJhdG9yKE9i
akNHZW5lcmF0b3IpOgogICAgICAgICAgICAgZm9yIGNvbW1hbmQgaW4gc2VsZi5jb21tYW5kc19m
b3JfZG9tYWluKGRvbWFpbik6CiAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dl
bmVyYXRlX3NpbmdsZV9jb21tYW5kX3Byb3RvY29sKGRvbWFpbiwgY29tbWFuZCkpCiAgICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoJ0BlbmQnKQotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVz
KQorICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihkb21h
aW4uY29uZGl0aW9uLCAnXG4nLmpvaW4obGluZXMpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9zaW5n
bGVfY29tbWFuZF9wcm90b2NvbChzZWxmLCBkb21haW4sIGNvbW1hbmQpOgogICAgICAgICBwYWly
cyA9IFtdCkBAIC0yMjgsNyArMjMxLDcgQEAgY2xhc3MgT2JqQ0hlYWRlckdlbmVyYXRvcihPYmpD
R2VuZXJhdG9yKToKICAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLmNhbGxfcGFyYW1l
dGVyczoKICAgICAgICAgICAgIHBhcmFtX25hbWUgPSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUK
ICAgICAgICAgICAgIHBhaXJzLmFwcGVuZCgnJXM6KCVzKSVzJyAlIChwYXJhbV9uYW1lLCBzZWxm
Lm9iamNfdHlwZV9mb3JfcGFyYW0oZG9tYWluLCBjb21tYW5kLmNvbW1hbmRfbmFtZSwgcGFyYW1l
dGVyKSwgcGFyYW1fbmFtZSkpCi0gICAgICAgIHJldHVybiAnLSAodm9pZCklc1dpdGglczsnICUg
KGNvbW1hbmQuY29tbWFuZF9uYW1lLCAnICcuam9pbihwYWlycykpCisgICAgICAgIHJldHVybiBz
ZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGNvbW1hbmQuY29uZGl0aW9uLCAnLSAo
dm9pZCklc1dpdGglczsnICUgKGNvbW1hbmQuY29tbWFuZF9uYW1lLCAnICcuam9pbihwYWlycykp
KQogCiAgICAgZGVmIF9jYWxsYmFja19ibG9ja19mb3JfY29tbWFuZChzZWxmLCBkb21haW4sIGNv
bW1hbmQpOgogICAgICAgICBwYWlycyA9IFtdCkBAIC0yNDksNyArMjUyLDcgQEAgY2xhc3MgT2Jq
Q0hlYWRlckdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKICAgICAgICAgICAgIGZvciBldmVudCBp
biBldmVudHM6CiAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX3Np
bmdsZV9ldmVudF9pbnRlcmZhY2UoZG9tYWluLCBldmVudCkpCiAgICAgICAgICAgICBsaW5lcy5h
cHBlbmQoJ0BlbmQnKQotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorICAgICAgICBy
ZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9u
LCAnXG4nLmpvaW4obGluZXMpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9zaW5nbGVfZXZlbnRfaW50
ZXJmYWNlKHNlbGYsIGRvbWFpbiwgZXZlbnQpOgogICAgICAgICBpZiBub3QgZXZlbnQuZXZlbnRf
cGFyYW1ldGVyczoKQEAgLTI1OSw0ICsyNjIsNCBAQCBjbGFzcyBPYmpDSGVhZGVyR2VuZXJhdG9y
KE9iakNHZW5lcmF0b3IpOgogICAgICAgICAgICAgcGFyYW1fbmFtZSA9IHBhcmFtZXRlci5wYXJh
bWV0ZXJfbmFtZQogICAgICAgICAgICAgcGFpcnMuYXBwZW5kKCclczooJXMpJXMnICUgKHBhcmFt
X25hbWUsIHNlbGYub2JqY190eXBlX2Zvcl9wYXJhbShkb21haW4sIGV2ZW50LmV2ZW50X25hbWUs
IHBhcmFtZXRlciksIHBhcmFtX25hbWUpKQogICAgICAgICBwYWlyc1swXSA9IHVjZmlyc3QocGFp
cnNbMF0pCi0gICAgICAgIHJldHVybiAnLSAodm9pZCklc1dpdGglczsnICUgKGV2ZW50LmV2ZW50
X25hbWUsICcgJy5qb2luKHBhaXJzKSkKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1
YXJkX2Zvcl9jb25kaXRpb24oZXZlbnQuY29uZGl0aW9uLCAnLSAodm9pZCklc1dpdGglczsnICUg
KGV2ZW50LmV2ZW50X25hbWUsICcgJy5qb2luKHBhaXJzKSkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX3By
b3RvY29sX3R5cGVfY29udmVyc2lvbnNfaGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBlX2Nv
bnZlcnNpb25zX2hlYWRlci5weQppbmRleCAyNTcxZjRiMjJhODY5ZDg1NzQ0OGEyODg1NTIxYjlm
MjA0MGMxOTg2Li41YzUyY2RlYTliMzQyMGJmNTg3MGFkOWIyMTBhNTRlNDg2M2UwNjcwIDEwMDc1
NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9n
ZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVfY29udmVyc2lvbnNfaGVhZGVyLnB5CisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29i
amNfcHJvdG9jb2xfdHlwZV9jb252ZXJzaW9uc19oZWFkZXIucHkKQEAgLTMxLDEyICszMSwxMiBA
QCBmcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKIAogdHJ5OgogICAgIGZyb20gLmdlbmVyYXRv
ciBpbXBvcnQgR2VuZXJhdG9yCi0gICAgZnJvbSAubW9kZWxzIGltcG9ydCBFbnVtVHlwZSwgRnJh
bWV3b3JrcywgUGxhdGZvcm1zCisgICAgZnJvbSAubW9kZWxzIGltcG9ydCBFbnVtVHlwZSwgRnJh
bWV3b3JrcwogICAgIGZyb20gLm9iamNfZ2VuZXJhdG9yIGltcG9ydCBPYmpDR2VuZXJhdG9yCiAg
ICAgZnJvbSAub2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBPYmpDR2VuZXJhdG9yVGVt
cGxhdGVzIGFzIE9iakNUZW1wbGF0ZXMKIGV4Y2VwdCBWYWx1ZUVycm9yOgogICAgIGZyb20gZ2Vu
ZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IKLSAgICBmcm9tIG1vZGVscyBpbXBvcnQgRW51bVR5cGUs
IEZyYW1ld29ya3MsIFBsYXRmb3JtcworICAgIGZyb20gbW9kZWxzIGltcG9ydCBFbnVtVHlwZSwg
RnJhbWV3b3JrcwogICAgIGZyb20gb2JqY19nZW5lcmF0b3IgaW1wb3J0IE9iakNHZW5lcmF0b3IK
ICAgICBmcm9tIG9iamNfZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgT2JqQ0dlbmVyYXRvclRl
bXBsYXRlcyBhcyBPYmpDVGVtcGxhdGVzCiAKQEAgLTQ0LDcgKzQ0LDcgQEAgbG9nID0gbG9nZ2lu
Zy5nZXRMb2dnZXIoJ2dsb2JhbCcpCiAKIAogZGVmIGFkZF9uZXdsaW5lKGxpbmVzKToKLSAgICBp
ZiBsaW5lcyBhbmQgbGluZXNbLTFdID09ICcnOgorICAgIGlmIG5vdCBsZW4obGluZXMpIG9yIGxp
bmVzWy0xXSA9PSAnJzoKICAgICAgICAgcmV0dXJuCiAgICAgbGluZXMuYXBwZW5kKCcnKQogCkBA
IC03NSw3ICs3NSw2IEBAIGNsYXNzIE9iakNQcm90b2NvbFR5cGVDb252ZXJzaW9uc0hlYWRlckdl
bmVyYXRvcihPYmpDR2VuZXJhdG9yKToKICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2Vu
ZXJhdGVfbGljZW5zZSgpKQogICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoT2JqQ1Rl
bXBsYXRlcy5UeXBlQ29udmVyc2lvbnNIZWFkZXJQcmVsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoq
aGVhZGVyX2FyZ3MpKQogICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoT2JqQ1RlbXBs
YXRlcy5UeXBlQ29udmVyc2lvbnNIZWFkZXJTdGFuZGFyZCkuc3Vic3RpdHV0ZShOb25lKSkKLSAg
ICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2VudW1fY29udmVyc2lvbl9mb3Jf
cGxhdGZvcm1zKCkpCiAgICAgICAgIHNlY3Rpb25zLmV4dGVuZChsaXN0KG1hcChzZWxmLl9nZW5l
cmF0ZV9lbnVtX2NvbnZlcnNpb25fZnVuY3Rpb25zLCBkb21haW5zKSkpCiAgICAgICAgIHNlY3Rp
b25zLmFwcGVuZChUZW1wbGF0ZShPYmpDVGVtcGxhdGVzLlR5cGVDb252ZXJzaW9uc0hlYWRlclBv
c3RsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQogICAgICAgICByZXR1cm4g
J1xuXG4nLmpvaW4oc2VjdGlvbnMpCkBAIC04NSw0MiArODQsNDMgQEAgY2xhc3MgT2JqQ1Byb3Rv
Y29sVHlwZUNvbnZlcnNpb25zSGVhZGVyR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogCiAgICAg
ICAgICMgVHlwZSBlbnVtcyBhbmQgbWVtYmVyIGVudW1zLgogICAgICAgICBmb3IgZGVjbGFyYXRp
b24gaW4gc2VsZi50eXBlX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluKGRvbWFpbik6CisgICAgICAg
ICAgICBkZWNsYXJhdGlvbl9saW5lcyA9IFtdCiAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGRl
Y2xhcmF0aW9uLnR5cGUsIEVudW1UeXBlKToKLSAgICAgICAgICAgICAgICBhZGRfbmV3bGluZShs
aW5lcykKLSAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnlt
b3VzX2VudW1fY29udmVyc2lvbl9mb3JfZGVjbGFyYXRpb24oZG9tYWluLCBkZWNsYXJhdGlvbikp
CisgICAgICAgICAgICAgICAgYWRkX25ld2xpbmUoZGVjbGFyYXRpb25fbGluZXMpCisgICAgICAg
ICAgICAgICAgZGVjbGFyYXRpb25fbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255bW91
c19lbnVtX2NvbnZlcnNpb25fZm9yX2RlY2xhcmF0aW9uKGRvbWFpbiwgZGVjbGFyYXRpb24pKQog
ICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBmb3IgbWVtYmVyIGluIGRlY2xhcmF0
aW9uLnR5cGVfbWVtYmVyczoKICAgICAgICAgICAgICAgICAgICAgaWYgKGlzaW5zdGFuY2UobWVt
YmVyLnR5cGUsIEVudW1UeXBlKSBhbmQgbWVtYmVyLnR5cGUuaXNfYW5vbnltb3VzKToKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGFkZF9uZXdsaW5lKGxpbmVzKQotICAgICAgICAgICAgICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2NvbnZlcnNp
b25fZm9yX21lbWJlcihkb21haW4sIGRlY2xhcmF0aW9uLCBtZW1iZXIpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgYWRkX25ld2xpbmUoZGVjbGFyYXRpb25fbGluZXMpCisgICAgICAgICAgICAg
ICAgICAgICAgICBkZWNsYXJhdGlvbl9saW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnlt
b3VzX2VudW1fY29udmVyc2lvbl9mb3JfbWVtYmVyKGRvbWFpbiwgZGVjbGFyYXRpb24sIG1lbWJl
cikpCisgICAgICAgICAgICBpZiBsZW4oZGVjbGFyYXRpb25fbGluZXMpOgorICAgICAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRlY2xh
cmF0aW9uLmNvbmRpdGlvbiwgJ1xuXG4nLmpvaW4oZGVjbGFyYXRpb25fbGluZXMpKSkKIAogICAg
ICAgICAjIEFub255bW91cyBjb21tYW5kIGVudW1zLgogICAgICAgICBmb3IgY29tbWFuZCBpbiBz
ZWxmLmNvbW1hbmRzX2Zvcl9kb21haW4oZG9tYWluKToKKyAgICAgICAgICAgIGNvbW1hbmRfbGlu
ZXMgPSBbXQogICAgICAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLmNhbGxfcGFyYW1l
dGVyczoKICAgICAgICAgICAgICAgICBpZiAoaXNpbnN0YW5jZShwYXJhbWV0ZXIudHlwZSwgRW51
bVR5cGUpIGFuZCBwYXJhbWV0ZXIudHlwZS5pc19hbm9ueW1vdXMpOgotICAgICAgICAgICAgICAg
ICAgICBhZGRfbmV3bGluZShsaW5lcykKLSAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5k
KHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2NvbnZlcnNpb25fZm9yX3BhcmFtZXRlcihk
b21haW4sIGNvbW1hbmQuY29tbWFuZF9uYW1lLCBwYXJhbWV0ZXIpKQorICAgICAgICAgICAgICAg
ICAgICBhZGRfbmV3bGluZShjb21tYW5kX2xpbmVzKQorICAgICAgICAgICAgICAgICAgICBjb21t
YW5kX2xpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9jb252ZXJzaW9u
X2Zvcl9wYXJhbWV0ZXIoZG9tYWluLCBjb21tYW5kLmNvbW1hbmRfbmFtZSwgcGFyYW1ldGVyKSkK
ICAgICAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVyczoK
ICAgICAgICAgICAgICAgICBpZiAoaXNpbnN0YW5jZShwYXJhbWV0ZXIudHlwZSwgRW51bVR5cGUp
IGFuZCBwYXJhbWV0ZXIudHlwZS5pc19hbm9ueW1vdXMpOgotICAgICAgICAgICAgICAgICAgICBh
ZGRfbmV3bGluZShsaW5lcykKLSAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYu
X2dlbmVyYXRlX2Fub255bW91c19lbnVtX2NvbnZlcnNpb25fZm9yX3BhcmFtZXRlcihkb21haW4s
IGNvbW1hbmQuY29tbWFuZF9uYW1lLCBwYXJhbWV0ZXIpKQorICAgICAgICAgICAgICAgICAgICBh
ZGRfbmV3bGluZShjb21tYW5kX2xpbmVzKQorICAgICAgICAgICAgICAgICAgICBjb21tYW5kX2xp
bmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9jb252ZXJzaW9uX2Zvcl9w
YXJhbWV0ZXIoZG9tYWluLCBjb21tYW5kLmNvbW1hbmRfbmFtZSwgcGFyYW1ldGVyKSkKKyAgICAg
ICAgICAgIGlmIGxlbihjb21tYW5kX2xpbmVzKToKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBl
bmQoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihjb21tYW5kLmNvbmRpdGlvbiwg
J1xuXG4nLmpvaW4oY29tbWFuZF9saW5lcykpKQogCiAgICAgICAgICMgQW5vbnltb3VzIGV2ZW50
IGVudW1zLgogICAgICAgICBmb3IgZXZlbnQgaW4gc2VsZi5ldmVudHNfZm9yX2RvbWFpbihkb21h
aW4pOgorICAgICAgICAgICAgZXZlbnRfbGluZXMgPSBbXQogICAgICAgICAgICAgZm9yIHBhcmFt
ZXRlciBpbiBldmVudC5ldmVudF9wYXJhbWV0ZXJzOgogICAgICAgICAgICAgICAgIGlmIChpc2lu
c3RhbmNlKHBhcmFtZXRlci50eXBlLCBFbnVtVHlwZSkgYW5kIHBhcmFtZXRlci50eXBlLmlzX2Fu
b255bW91cyk6Ci0gICAgICAgICAgICAgICAgICAgIGFkZF9uZXdsaW5lKGxpbmVzKQotICAgICAg
ICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1f
Y29udmVyc2lvbl9mb3JfcGFyYW1ldGVyKGRvbWFpbiwgZXZlbnQuZXZlbnRfbmFtZSwgcGFyYW1l
dGVyKSkKKyAgICAgICAgICAgICAgICAgICAgYWRkX25ld2xpbmUoZXZlbnRfbGluZXMpCisgICAg
ICAgICAgICAgICAgICAgIGV2ZW50X2xpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1v
dXNfZW51bV9jb252ZXJzaW9uX2Zvcl9wYXJhbWV0ZXIoZG9tYWluLCBldmVudC5ldmVudF9uYW1l
LCBwYXJhbWV0ZXIpKQorICAgICAgICAgICAgaWYgbGVuKGV2ZW50X2xpbmVzKToKKyAgICAgICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihl
dmVudC5jb25kaXRpb24sICdcblxuJy5qb2luKGV2ZW50X2xpbmVzKSkpCiAKLSAgICAgICAgcmV0
dXJuICdcbicuam9pbihsaW5lcykKLQotICAgIGRlZiBfZ2VuZXJhdGVfZW51bV9jb252ZXJzaW9u
X2Zvcl9wbGF0Zm9ybXMoc2VsZik6Ci0gICAgICAgIG9iamNfZW51bV9uYW1lID0gJyVzUGxhdGZv
cm0nICUgc2VsZi5vYmpjX3ByZWZpeCgpCi0gICAgICAgIGVudW1fdmFsdWVzID0gW3BsYXRmb3Jt
Lm5hbWUgZm9yIHBsYXRmb3JtIGluIFBsYXRmb3Jtc10KLSAgICAgICAgbGluZXMgPSBbXQotICAg
ICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfZW51bV9vYmpjX3RvX3Byb3RvY29sX3N0
cmluZyhvYmpjX2VudW1fbmFtZSwgZW51bV92YWx1ZXMpKQotICAgICAgICBsaW5lcy5hcHBlbmQo
c2VsZi5fZ2VuZXJhdGVfZW51bV9mcm9tX3Byb3RvY29sX3N0cmluZyhvYmpjX2VudW1fbmFtZSwg
ZW51bV92YWx1ZXMpKQotICAgICAgICByZXR1cm4gJ1xuXG4nLmpvaW4obGluZXMpCisgICAgICAg
IHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRvbWFpbi5jb25kaXRp
b24sICdcblxuJy5qb2luKGxpbmVzKSkKIAogICAgIGRlZiBfZ2VuZXJhdGVfYW5vbnltb3VzX2Vu
dW1fY29udmVyc2lvbl9mb3JfZGVjbGFyYXRpb24oc2VsZiwgZG9tYWluLCBkZWNsYXJhdGlvbik6
CiAgICAgICAgIG9iamNfZW51bV9uYW1lID0gc2VsZi5vYmpjX2VudW1fbmFtZV9mb3JfYW5vbnlt
b3VzX2VudW1fZGVjbGFyYXRpb24oZGVjbGFyYXRpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX3Byb3Rv
Y29sX3R5cGVfY29udmVyc2lvbnNfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5
cGVfY29udmVyc2lvbnNfaW1wbGVtZW50YXRpb24ucHkKaW5kZXggYTM2ZDgxM2VjZWVlYTExNGJl
OTRiZjYxZDVmNmE1NTMyZmRmZTE1NC4uOGMxMDc3MDljYjNhMGY3MmU1NjlhZTQxYTkyMThiZTM4
ZGI1MTcxMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBlX2NvbnZlcnNpb25zX2ltcGxl
bWVudGF0aW9uLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfcHJvdG9jb2xfdHlwZV9jb252ZXJzaW9uc19pbXBsZW1l
bnRhdGlvbi5weQpAQCAtNDMsNyArNDMsNyBAQCBsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xv
YmFsJykKIAogCiBkZWYgYWRkX25ld2xpbmUobGluZXMpOgotICAgIGlmIGxpbmVzIGFuZCBsaW5l
c1stMV0gPT0gJyc6CisgICAgaWYgbm90IGxlbihsaW5lcykgb3IgbGluZXNbLTFdID09ICcnOgog
ICAgICAgICByZXR1cm4KICAgICBsaW5lcy5hcHBlbmQoJycpCiAKQEAgLTgzLDE1ICs4MywxNiBA
QCBjbGFzcyBPYmpDUHJvdG9jb2xUeXBlQ29udmVyc2lvbnNJbXBsZW1lbnRhdGlvbkdlbmVyYXRv
cihPYmpDR2VuZXJhdG9yKToKICAgICBkZWYgX2dlbmVyYXRlX3R5cGVfZmFjdG9yeV9jYXRlZ29y
eV9pbnRlcmZhY2Uoc2VsZiwgZG9tYWlucyk6CiAgICAgICAgIGxpbmVzID0gW10KICAgICAgICAg
Zm9yIGRvbWFpbiBpbiBkb21haW5zOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdAaW50ZXJm
YWNlICVzVHlwZUNvbnZlcnNpb25zICglc0RvbWFpbiknICUgKHNlbGYucHJvdG9jb2xfbmFtZSgp
LCBkb21haW4uZG9tYWluX25hbWUpKQotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQorICAg
ICAgICAgICAgZG9tYWluX2xpbmVzID0gW10KKyAgICAgICAgICAgIGRvbWFpbl9saW5lcy5hcHBl
bmQoJ0BpbnRlcmZhY2UgJXNUeXBlQ29udmVyc2lvbnMgKCVzRG9tYWluKScgJSAoc2VsZi5wcm90
b2NvbF9uYW1lKCksIGRvbWFpbi5kb21haW5fbmFtZSkpCisgICAgICAgICAgICBhZGRfbmV3bGlu
ZShkb21haW5fbGluZXMpCiAKICAgICAgICAgICAgIGZvciBkZWNsYXJhdGlvbiBpbiBzZWxmLnR5
cGVfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4oZG9tYWluKToKLSAgICAgICAgICAgICAgICBsaW5l
cy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfdHlwZV9mYWN0b3J5X21ldGhvZF9kZWNsYXJhdGlvbihk
b21haW4sIGRlY2xhcmF0aW9uKSkKLQotICAgICAgICAgICAgYWRkX25ld2xpbmUobGluZXMpCi0g
ICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0BlbmQnKQorICAgICAgICAgICAgICAgIGRvbWFpbl9s
aW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfdHlwZV9mYWN0b3J5X21ldGhvZF9kZWNsYXJhdGlv
bihkb21haW4sIGRlY2xhcmF0aW9uKSkKIAorICAgICAgICAgICAgYWRkX25ld2xpbmUoZG9tYWlu
X2xpbmVzKQorICAgICAgICAgICAgZG9tYWluX2xpbmVzLmFwcGVuZCgnQGVuZCcpCisgICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihkb21h
aW4uY29uZGl0aW9uLCAnXG4nLmpvaW4oZG9tYWluX2xpbmVzKSkpCiAgICAgICAgIHJldHVybiAn
XG4nLmpvaW4obGluZXMpCiAKICAgICBkZWYgX2dlbmVyYXRlX3R5cGVfZmFjdG9yeV9tZXRob2Rf
ZGVjbGFyYXRpb24oc2VsZiwgZG9tYWluLCBkZWNsYXJhdGlvbik6CkBAIC0xMDAsMjAgKzEwMSwy
MyBAQCBjbGFzcyBPYmpDUHJvdG9jb2xUeXBlQ29udmVyc2lvbnNJbXBsZW1lbnRhdGlvbkdlbmVy
YXRvcihPYmpDR2VuZXJhdG9yKToKICAgICAgICAgICAgIHJlc29sdmVkX3R5cGUgPSByZXNvbHZl
ZF90eXBlLmFsaWFzZWRfdHlwZQogICAgICAgICBpZiBpc2luc3RhbmNlKHJlc29sdmVkX3R5cGUs
IChPYmplY3RUeXBlLCBBcnJheVR5cGUsIFByaW1pdGl2ZVR5cGUpKToKICAgICAgICAgICAgIG9i
amNfdHlwZSA9IHNlbGYub2JqY19jbGFzc19mb3JfdHlwZShyZXNvbHZlZF90eXBlKQotICAgICAg
ICAgICAgcmV0dXJuICcrICh2b2lkKV9wYXJzZSVzOiglcyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9h
ZDooaWQpcGF5bG9hZDsnICUgKGRlY2xhcmF0aW9uLnR5cGUucmF3X25hbWUoKSwgb2JqY190eXBl
KQorICAgICAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24o
ZGVjbGFyYXRpb24uY29uZGl0aW9uLCAnKyAodm9pZClfcGFyc2UlczooJXMgKiopb3V0VmFsdWUg
ZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7JyAlIChkZWNsYXJhdGlvbi50eXBlLnJhd19uYW1lKCks
IG9iamNfdHlwZSkpCiAgICAgICAgIGlmIGlzaW5zdGFuY2UocmVzb2x2ZWRfdHlwZSwgRW51bVR5
cGUpOgotICAgICAgICAgICAgcmV0dXJuICcrICh2b2lkKV9wYXJzZSVzOihOU051bWJlciAqKilv
dXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsnICUgZGVjbGFyYXRpb24udHlwZS5yYXdf
bmFtZSgpCisgICAgICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRp
dGlvbihkZWNsYXJhdGlvbi5jb25kaXRpb24sICcrICh2b2lkKV9wYXJzZSVzOihOU051bWJlciAq
KilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsnICUgZGVjbGFyYXRpb24udHlwZS5y
YXdfbmFtZSgpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV90eXBlX2ZhY3RvcnlfY2F0ZWdvcnlfaW1w
bGVtZW50YXRpb24oc2VsZiwgZG9tYWlucyk6CiAgICAgICAgIGxpbmVzID0gW10KICAgICAgICAg
Zm9yIGRvbWFpbiBpbiBkb21haW5zOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdAaW1wbGVt
ZW50YXRpb24gJXNUeXBlQ29udmVyc2lvbnMgKCVzRG9tYWluKScgJSAoc2VsZi5wcm90b2NvbF9u
YW1lKCksIGRvbWFpbi5kb21haW5fbmFtZSkpCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycp
CisgICAgICAgICAgICBkb21haW5fbGluZXMgPSBbXQorICAgICAgICAgICAgZG9tYWluX2xpbmVz
LmFwcGVuZCgnQGltcGxlbWVudGF0aW9uICVzVHlwZUNvbnZlcnNpb25zICglc0RvbWFpbiknICUg
KHNlbGYucHJvdG9jb2xfbmFtZSgpLCBkb21haW4uZG9tYWluX25hbWUpKQorICAgICAgICAgICAg
YWRkX25ld2xpbmUoZG9tYWluX2xpbmVzKQogCiAgICAgICAgICAgICBmb3IgZGVjbGFyYXRpb24g
aW4gc2VsZi50eXBlX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluKGRvbWFpbik6Ci0gICAgICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX3R5cGVfZmFjdG9yeV9tZXRob2RfaW1w
bGVtZW50YXRpb24oZG9tYWluLCBkZWNsYXJhdGlvbikpCi0gICAgICAgICAgICAgICAgYWRkX25l
d2xpbmUobGluZXMpCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0BlbmQnKQorICAgICAgICAg
ICAgICAgIGRvbWFpbl9saW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfdHlwZV9mYWN0b3J5X21l
dGhvZF9pbXBsZW1lbnRhdGlvbihkb21haW4sIGRlY2xhcmF0aW9uKSkKKyAgICAgICAgICAgICAg
ICBhZGRfbmV3bGluZShkb21haW5fbGluZXMpCisKKyAgICAgICAgICAgIGRvbWFpbl9saW5lcy5h
cHBlbmQoJ0BlbmQnKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYud3JhcF93aXRoX2d1
YXJkX2Zvcl9jb25kaXRpb24oZG9tYWluLmNvbmRpdGlvbiwgJ1xuJy5qb2luKGRvbWFpbl9saW5l
cykpKQogICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQogCiAgICAgZGVmIF9nZW5lcmF0
ZV90eXBlX2ZhY3RvcnlfbWV0aG9kX2ltcGxlbWVudGF0aW9uKHNlbGYsIGRvbWFpbiwgZGVjbGFy
YXRpb24pOgpAQCAtMTQxLDQgKzE0NSw0IEBAIGNsYXNzIE9iakNQcm90b2NvbFR5cGVDb252ZXJz
aW9uc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogICAgICAgICAgICAg
bGluZXMuYXBwZW5kKCcgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBb
TlNEaWN0aW9uYXJ5IGNsYXNzXSk7JykKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICpv
dXRWYWx1ZSA9IFtbJXMgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsnICUgKG9iamNf
Y2xhc3MpKQogICAgICAgICBsaW5lcy5hcHBlbmQoJ30nKQotICAgICAgICByZXR1cm4gJ1xuJy5q
b2luKGxpbmVzKQorICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRp
dGlvbihkZWNsYXJhdGlvbi5jb25kaXRpb24sICdcbicuam9pbihsaW5lcykpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZV9vYmpjX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5IGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90
eXBlc19pbXBsZW1lbnRhdGlvbi5weQppbmRleCBjODcwODgxYWJkODBkMmI2ZWRhYTg4MTI1OThj
ODM2MjgzYTY2NWIwLi5hMGU3YjkwMDQ0NTViYmU3ZTExZThhMGJjNWVkNTExMGZlMWExYTQ0IDEw
MDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5CisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29i
amNfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkKQEAgLTQ0LDcgKzQ0LDcgQEAgbG9n
ID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCiAKIAogZGVmIGFkZF9uZXdsaW5lKGxpbmVz
KToKLSAgICBpZiBsaW5lcyBhbmQgbGluZXNbLTFdID09ICcnOgorICAgIGlmIG5vdCBsZW4obGlu
ZXMpIG9yIGxpbmVzWy0xXSA9PSAnJzoKICAgICAgICAgcmV0dXJuCiAgICAgbGluZXMuYXBwZW5k
KCcnKQogCkBAIC05MSw3ICs5MSw3IEBAIGNsYXNzIE9iakNQcm90b2NvbFR5cGVzSW1wbGVtZW50
YXRpb25HZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgICAgICAgICBpZiAoaXNpbnN0YW5j
ZShkZWNsYXJhdGlvbi50eXBlLCBPYmplY3RUeXBlKSk6CiAgICAgICAgICAgICAgICAgYWRkX25l
d2xpbmUobGluZXMpCiAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVf
dHlwZV9pbXBsZW1lbnRhdGlvbihkb21haW4sIGRlY2xhcmF0aW9uKSkKLSAgICAgICAgcmV0dXJu
ICdcbicuam9pbihsaW5lcykKKyAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zv
cl9jb25kaXRpb24oZG9tYWluLmNvbmRpdGlvbiwgJ1xuJy5qb2luKGxpbmVzKSkKIAogICAgIGRl
ZiBnZW5lcmF0ZV90eXBlX2ltcGxlbWVudGF0aW9uKHNlbGYsIGRvbWFpbiwgZGVjbGFyYXRpb24p
OgogICAgICAgICBsaW5lcyA9IFtdCkBAIC0xMTIsNyArMTEyLDcgQEAgY2xhc3MgT2JqQ1Byb3Rv
Y29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKICAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9nZXR0ZXJfZm9yX21lbWJlcihkb21haW4s
IGRlY2xhcmF0aW9uLCBtZW1iZXIpKQogICAgICAgICBsaW5lcy5hcHBlbmQoJycpCiAgICAgICAg
IGxpbmVzLmFwcGVuZCgnQGVuZCcpCi0gICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisg
ICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRlY2xhcmF0
aW9uLmNvbmRpdGlvbiwgJ1xuJy5qb2luKGxpbmVzKSkKIAogICAgIGRlZiBfZ2VuZXJhdGVfaW5p
dF9tZXRob2RfZm9yX3Byb3RvY29sX29iamVjdChzZWxmLCBkb21haW4sIGRlY2xhcmF0aW9uKToK
ICAgICAgICAgbGluZXMgPSBbXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yLnB5IGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yLnB5CmluZGV4IDhjMmZiYjhi
YzUyOTc1YjYxYzdlMzc1YThmY2UxYjE3ZDBlZGE4NWEuLjk0ZDE4ZDlkNjYxOTRkMTU4NWMwZTEw
YzA0OTRiYjRiMWExM2I5NTUgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRvci5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3IucHkKQEAgLTMxLDEwICsz
MSwxMCBAQCBmcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKIAogdHJ5OgogICAgIGZyb20gLmdl
bmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IEdlbmVyYXRvclRlbXBsYXRlcyBhcyBUZW1wbGF0ZXMK
LSAgICBmcm9tIC5tb2RlbHMgaW1wb3J0IFByaW1pdGl2ZVR5cGUsIE9iamVjdFR5cGUsIEFycmF5
VHlwZSwgRW51bVR5cGUsIEFsaWFzZWRUeXBlLCBGcmFtZXdvcmtzLCBQbGF0Zm9ybXMKKyAgICBm
cm9tIC5tb2RlbHMgaW1wb3J0IFByaW1pdGl2ZVR5cGUsIE9iamVjdFR5cGUsIEFycmF5VHlwZSwg
RW51bVR5cGUsIEFsaWFzZWRUeXBlLCBGcmFtZXdvcmtzCiBleGNlcHQgVmFsdWVFcnJvcjoKICAg
ICBmcm9tIGdlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IEdlbmVyYXRvclRlbXBsYXRlcyBhcyBU
ZW1wbGF0ZXMKLSAgICBmcm9tIG1vZGVscyBpbXBvcnQgUHJpbWl0aXZlVHlwZSwgT2JqZWN0VHlw
ZSwgQXJyYXlUeXBlLCBFbnVtVHlwZSwgQWxpYXNlZFR5cGUsIEZyYW1ld29ya3MsIFBsYXRmb3Jt
cworICAgIGZyb20gbW9kZWxzIGltcG9ydCBQcmltaXRpdmVUeXBlLCBPYmplY3RUeXBlLCBBcnJh
eVR5cGUsIEVudW1UeXBlLCBBbGlhc2VkVHlwZSwgRnJhbWV3b3JrcwogCiBsb2cgPSBsb2dnaW5n
LmdldExvZ2dlcignZ2xvYmFsJykKIApAQCAtOTQsMzUgKzk0LDI4IEBAIF9UWVBFU19XSVRIX09Q
RU5fRklFTERTID0gewogfQogCiBjbGFzcyBHZW5lcmF0b3I6Ci0gICAgZGVmIF9faW5pdF9fKHNl
bGYsIG1vZGVsLCBwbGF0Zm9ybSwgaW5wdXRfZmlsZXBhdGgpOgorICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpOgogICAgICAgICBzZWxmLl9tb2RlbCA9IG1vZGVs
Ci0gICAgICAgIHNlbGYuX3BsYXRmb3JtID0gcGxhdGZvcm0KICAgICAgICAgc2VsZi5faW5wdXRf
ZmlsZXBhdGggPSBpbnB1dF9maWxlcGF0aAogICAgICAgICBzZWxmLl9zZXR0aW5ncyA9IHt9CiAK
ICAgICBkZWYgbW9kZWwoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLl9tb2RlbAogCi0gICAg
ZGVmIHBsYXRmb3JtKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5fcGxhdGZvcm0KLQogICAg
IGRlZiBzZXRfZ2VuZXJhdG9yX3NldHRpbmcoc2VsZiwga2V5LCB2YWx1ZSk6CiAgICAgICAgIHNl
bGYuX3NldHRpbmdzW2tleV0gPSB2YWx1ZQogCi0gICAgZGVmIGNhbl9nZW5lcmF0ZV9wbGF0Zm9y
bShzZWxmLCBtb2RlbF9wbGF0Zm9ybSk6Ci0gICAgICAgIHJldHVybiBtb2RlbF9wbGF0Zm9ybSBp
cyBQbGF0Zm9ybXMuR2VuZXJpYyBvciBzZWxmLl9wbGF0Zm9ybSBpcyBQbGF0Zm9ybXMuQWxsIG9y
IG1vZGVsX3BsYXRmb3JtIGlzIHNlbGYuX3BsYXRmb3JtCi0KICAgICBkZWYgdmVyc2lvbl9mb3Jf
ZG9tYWluKHNlbGYsIGRvbWFpbik6CiAgICAgICAgIHJldHVybiBkb21haW4udmVyc2lvbigpCiAK
ICAgICBkZWYgdHlwZV9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgotICAg
ICAgICByZXR1cm4gW3R5cGVfZGVjbGFyYXRpb24gZm9yIHR5cGVfZGVjbGFyYXRpb24gaW4gZG9t
YWluLmFsbF90eXBlX2RlY2xhcmF0aW9ucygpIGlmIHNlbGYuY2FuX2dlbmVyYXRlX3BsYXRmb3Jt
KHR5cGVfZGVjbGFyYXRpb24ucGxhdGZvcm0pXQorICAgICAgICByZXR1cm4gZG9tYWluLmFsbF90
eXBlX2RlY2xhcmF0aW9ucygpCiAKICAgICBkZWYgY29tbWFuZHNfZm9yX2RvbWFpbihzZWxmLCBk
b21haW4pOgotICAgICAgICByZXR1cm4gW2NvbW1hbmQgZm9yIGNvbW1hbmQgaW4gZG9tYWluLmFs
bF9jb21tYW5kcygpIGlmIHNlbGYuY2FuX2dlbmVyYXRlX3BsYXRmb3JtKGNvbW1hbmQucGxhdGZv
cm0pXQorICAgICAgICByZXR1cm4gZG9tYWluLmFsbF9jb21tYW5kcygpCiAKICAgICBkZWYgZXZl
bnRzX2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToKLSAgICAgICAgcmV0dXJuIFtldmVudCBmb3Ig
ZXZlbnQgaW4gZG9tYWluLmFsbF9ldmVudHMoKSBpZiBzZWxmLmNhbl9nZW5lcmF0ZV9wbGF0Zm9y
bShldmVudC5wbGF0Zm9ybSldCisgICAgICAgIHJldHVybiBkb21haW4uYWxsX2V2ZW50cygpCiAK
ICAgICAjIFRoZSBnb29meSBuYW1lIGlzIHRvIGRpc2FtYmlndWF0ZSBnZW5lcmF0b3Igc2V0dGlu
Z3MgZnJvbSBmcmFtZXdvcmsgc2V0dGluZ3MuCiAgICAgZGVmIGdldF9nZW5lcmF0b3Jfc2V0dGlu
ZyhzZWxmLCBrZXksIGRlZmF1bHQ9Tm9uZSk6CkBAIC0yNjcsMjIgKzI2MCwxNSBAQCBjbGFzcyBH
ZW5lcmF0b3I6CiAgICAgICAgIHNlbGYuX2Fzc2lnbmVkX2VudW1fdmFsdWVzLmFwcGVuZChlbnVt
X3ZhbHVlKQogCiAgICAgIyBNaXNjZWxsYW5lb3VzIHRleHQgbWFuaXB1bGF0aW9uIHJvdXRpbmVz
LgotICAgIGRlZiB3cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihzZWxmLCBkb21haW4sIHRleHQp
OgotICAgICAgICBpZiBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrIGlzIEZyYW1ld29ya3MuV2ViSW5z
cGVjdG9yOgotICAgICAgICAgICAgcmV0dXJuIHRleHQKLSAgICAgICAgZ3VhcmQgPSBkb21haW4u
ZmVhdHVyZV9ndWFyZAotICAgICAgICBpZiBndWFyZDoKLSAgICAgICAgICAgIHJldHVybiBHZW5l
cmF0b3Iud3JhcF93aXRoX2d1YXJkKGd1YXJkLCB0ZXh0KQorICAgIGRlZiB3cmFwX3dpdGhfZ3Vh
cmRfZm9yX2NvbmRpdGlvbihzZWxmLCBjb25kaXRpb24sIHRleHQpOgorICAgICAgICBpZiBjb25k
aXRpb246CisgICAgICAgICAgICByZXR1cm4gJ1xuJy5qb2luKFsKKyAgICAgICAgICAgICAgICAn
I2lmICVzJyAlIGNvbmRpdGlvbiwKKyAgICAgICAgICAgICAgICB0ZXh0LAorICAgICAgICAgICAg
ICAgICcjZW5kaWYgLy8gJXMnICUgY29uZGl0aW9uLAorICAgICAgICAgICAgXSkKICAgICAgICAg
cmV0dXJuIHRleHQKIAotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgd3JhcF93aXRoX2d1YXJk
KGd1YXJkLCB0ZXh0KToKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihbCi0gICAgICAgICAgICAn
I2lmICVzJyAlIGd1YXJkLAotICAgICAgICAgICAgdGV4dCwKLSAgICAgICAgICAgICcjZW5kaWYg
Ly8gJXMnICUgZ3VhcmQsCi0gICAgICAgIF0pCi0KICAgICBAc3RhdGljbWV0aG9kCiAgICAgZGVm
IHN0eWxpemVkX25hbWVfZm9yX2VudW1fdmFsdWUoZW51bV92YWx1ZSk6CiAgICAgICAgIHJlZ2V4
ID0gJyglcyknICUgInwiLmpvaW4oX0FMV0FZU19TUEVDSUFMQ0FTRURfRU5VTV9WQUxVRV9TVUJT
VFJJTkdTKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkKaW5kZXgg
ODkxNjgxZmZkNzFmNTQ5NTc2Y2ZmMWFhNTAyMDJlMTI5YjkyZWU4OC4uODQ3YTkyZDA5MTU1OGUz
MWZjOTdmODk4ZWFjNGM5OTk4YWY3NDZlYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yX3RlbXBsYXRlcy5weQorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
b3JfdGVtcGxhdGVzLnB5CkBAIC01Nyw1ICs1Nyw0IEBAIGNsYXNzIEdlbmVyYXRvclRlbXBsYXRl
czoKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gJHtpbnB1
dEZpbGVuYW1lfQotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weSIiIikK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSAke2lucHV0RmlsZW5hbWV9IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkiIiIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9tb2RlbHMucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9tb2RlbHMucHkKaW5kZXggNmQ5N2EwOTNjMzRmNzg5NjIzYjAyMWRlYTY3
OWFmNDA2NGRjNjJhNS4uMWRmMmJkZjY2NWEwYzFkYjZlMzhlM2FkNTM0YTI3ZmFmZTA0ZmY5ZCAx
MDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVn
ZW4vbW9kZWxzLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL21vZGVscy5weQpAQCAtMTM2LDQxICsxMzYsNiBAQCBjbGFzcyBGcmFtZXdvcmtz
OgogICAgIFRlc3QgPSBGcmFtZXdvcmsoIlRlc3QiKQogCiAKLWNsYXNzIFBsYXRmb3JtOgotICAg
IGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lKToKLSAgICAgICAgc2VsZi5uYW1lID0gbmFtZQotCi0g
ICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBmcm9tU3RyaW5nKHBsYXRmb3JtU3RyaW5nKToKLSAg
ICAgICAgcGxhdGZvcm1TdHJpbmcgPSBwbGF0Zm9ybVN0cmluZy5sb3dlcigpCi0gICAgICAgIGlm
IHBsYXRmb3JtU3RyaW5nID09ICJpb3MiOgotICAgICAgICAgICAgcmV0dXJuIFBsYXRmb3Jtcy5p
T1MKLQotICAgICAgICBpZiBwbGF0Zm9ybVN0cmluZyA9PSAibWFjb3MiOgotICAgICAgICAgICAg
cmV0dXJuIFBsYXRmb3Jtcy5tYWNPUwotCi0gICAgICAgIGlmIHBsYXRmb3JtU3RyaW5nID09ICJh
bGwiOgotICAgICAgICAgICAgcmV0dXJuIFBsYXRmb3Jtcy5BbGwKLQotICAgICAgICBpZiBwbGF0
Zm9ybVN0cmluZyA9PSAiZ2VuZXJpYyIgb3Igbm90IHBsYXRmb3JtU3RyaW5nOgotICAgICAgICAg
ICAgcmV0dXJuIFBsYXRmb3Jtcy5HZW5lcmljCi0KLSAgICAgICAgcmFpc2UgUGFyc2VFeGNlcHRp
b24oIlVua25vd24gcGxhdGZvcm06ICVzIiAlIHBsYXRmb3JtU3RyaW5nKQotCi0KLWNsYXNzIFBs
YXRmb3JtczoKLSAgICBBbGwgPSBQbGF0Zm9ybSgiYWxsIikKLSAgICBHZW5lcmljID0gUGxhdGZv
cm0oImdlbmVyaWMiKQotICAgIGlPUyA9IFBsYXRmb3JtKCJpb3MiKQotICAgIG1hY09TID0gUGxh
dGZvcm0oIm1hY29zIikKLQotICAgICMgQWxsb3cgaXRlcmF0aW9uIG92ZXIgYWxsIHBsYXRmb3Jt
cy4gU2VlIDxodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzU0MzQ0MDAvPi4KLSAg
ICBjbGFzcyBfX21ldGFjbGFzc19fKHR5cGUpOgotICAgICAgICBkZWYgX19pdGVyX18oc2VsZik6
Ci0gICAgICAgICAgICBmb3IgYXR0ciBpbiBkaXIoUGxhdGZvcm1zKToKLSAgICAgICAgICAgICAg
ICBpZiBub3QgYXR0ci5zdGFydHN3aXRoKCJfXyIpOgotICAgICAgICAgICAgICAgICAgICB5aWVs
ZCBnZXRhdHRyKFBsYXRmb3JtcywgYXR0cikKLQogY2xhc3MgVHlwZVJlZmVyZW5jZToKICAgICBk
ZWYgX19pbml0X18oc2VsZiwgdHlwZV9raW5kLCByZWZlcmVuY2VkX3R5cGVfbmFtZSwgZW51bV92
YWx1ZXMsIGFycmF5X2l0ZW1zKToKICAgICAgICAgc2VsZi50eXBlX2tpbmQgPSB0eXBlX2tpbmQK
QEAgLTQzOSw3ICs0MDQsNyBAQCBjbGFzcyBQcm90b2NvbDoKICAgICAgICAgICAgICAgICByYWlz
ZSBQYXJzZUV4Y2VwdGlvbigiTWFsZm9ybWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9uOiBldmVudHMg
aXMgbm90IGFuIGFycmF5IikKICAgICAgICAgICAgIGV2ZW50cy5leHRlbmQoW3NlbGYucGFyc2Vf
ZXZlbnQoZXZlbnQsIGRlYnVnZ2FibGVfdHlwZXMpIGZvciBldmVudCBpbiBqc29uWydldmVudHMn
XV0pCiAKLSAgICAgICAgc2VsZi5kb21haW5zLmFwcGVuZChEb21haW4oanNvblsnZG9tYWluJ10s
IGpzb24uZ2V0KCdkZXNjcmlwdGlvbicsICcnKSwganNvbi5nZXQoJ2ZlYXR1cmVHdWFyZCcpLCBk
ZWJ1Z2dhYmxlX3R5cGVzLCB0YXJnZXRfdHlwZXMsIGlzU3VwcGxlbWVudGFsLCB2ZXJzaW9uLCB0
eXBlcywgY29tbWFuZHMsIGV2ZW50cykpCisgICAgICAgIHNlbGYuZG9tYWlucy5hcHBlbmQoRG9t
YWluKGpzb25bJ2RvbWFpbiddLCBqc29uLmdldCgnZGVzY3JpcHRpb24nLCAnJyksIGpzb24uZ2V0
KCdjb25kaXRpb24nKSwgZGVidWdnYWJsZV90eXBlcywgdGFyZ2V0X3R5cGVzLCBpc1N1cHBsZW1l
bnRhbCwgdmVyc2lvbiwgdHlwZXMsIGNvbW1hbmRzLCBldmVudHMpKQogCiAgICAgZGVmIHBhcnNl
X3R5cGVfZGVjbGFyYXRpb24oc2VsZiwganNvbik6CiAgICAgICAgIGNoZWNrX2Zvcl9yZXF1aXJl
ZF9wcm9wZXJ0aWVzKFsnaWQnLCAndHlwZSddLCBqc29uLCAidHlwZSIpCkBAIC00NTcsOCArNDIy
LDcgQEAgY2xhc3MgUHJvdG9jb2w6CiAgICAgICAgICAgICByYWlzZSBQYXJzZUV4Y2VwdGlvbigi
TWFsZm9ybWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9uOiB0eXBlIGRlY2xhcmF0aW9uIGZvciAlcyBo
YXMgZHVwbGljYXRlIG1lbWJlciBuYW1lcyIgJSBqc29uWydpZCddKQogCiAgICAgICAgIHR5cGVf
cmVmID0gVHlwZVJlZmVyZW5jZShqc29uWyd0eXBlJ10sIGpzb24uZ2V0KCckcmVmJyksIGpzb24u
Z2V0KCdlbnVtJyksIGpzb24uZ2V0KCdpdGVtcycpKQotICAgICAgICBwbGF0Zm9ybSA9IFBsYXRm
b3JtLmZyb21TdHJpbmcoanNvbi5nZXQoJ3BsYXRmb3JtJywgJ2dlbmVyaWMnKSkKLSAgICAgICAg
cmV0dXJuIFR5cGVEZWNsYXJhdGlvbihqc29uWydpZCddLCB0eXBlX3JlZiwganNvbi5nZXQoImRl
c2NyaXB0aW9uIiwgIiIpLCBwbGF0Zm9ybSwgdHlwZV9tZW1iZXJzKQorICAgICAgICByZXR1cm4g
VHlwZURlY2xhcmF0aW9uKGpzb25bJ2lkJ10sIHR5cGVfcmVmLCBqc29uLmdldCgiZGVzY3JpcHRp
b24iLCAiIiksIGpzb24uZ2V0KCdjb25kaXRpb24nKSwgdHlwZV9tZW1iZXJzKQogCiAgICAgZGVm
IHBhcnNlX3R5cGVfbWVtYmVyKHNlbGYsIGpzb24pOgogICAgICAgICBjaGVja19mb3JfcmVxdWly
ZWRfcHJvcGVydGllcyhbJ25hbWUnXSwganNvbiwgInR5cGUgbWVtYmVyIikKQEAgLTUwOSw4ICs0
NzMsNyBAQCBjbGFzcyBQcm90b2NvbDoKICAgICAgICAgICAgIGlmIGxlbihkdXBsaWNhdGVfbmFt
ZXMpID4gMDoKICAgICAgICAgICAgICAgICByYWlzZSBQYXJzZUV4Y2VwdGlvbigiTWFsZm9ybWVk
IGRvbWFpbiBzcGVjaWZpY2F0aW9uOiByZXR1cm4gcGFyYW1ldGVyIGxpc3QgZm9yIGNvbW1hbmQg
JXMgaGFzIGR1cGxpY2F0ZSBwYXJhbWV0ZXIgbmFtZXMiICUganNvblsnbmFtZSddKQogCi0gICAg
ICAgIHBsYXRmb3JtID0gUGxhdGZvcm0uZnJvbVN0cmluZyhqc29uLmdldCgncGxhdGZvcm0nLCAn
Z2VuZXJpYycpKQotICAgICAgICByZXR1cm4gQ29tbWFuZChqc29uWyduYW1lJ10sIHRhcmdldF90
eXBlcywgY2FsbF9wYXJhbWV0ZXJzLCByZXR1cm5fcGFyYW1ldGVycywganNvbi5nZXQoJ2Rlc2Ny
aXB0aW9uJywgIiIpLCBwbGF0Zm9ybSwganNvbi5nZXQoJ2FzeW5jJywgRmFsc2UpKQorICAgICAg
ICByZXR1cm4gQ29tbWFuZChqc29uWyduYW1lJ10sIHRhcmdldF90eXBlcywgY2FsbF9wYXJhbWV0
ZXJzLCByZXR1cm5fcGFyYW1ldGVycywganNvbi5nZXQoJ2Rlc2NyaXB0aW9uJywgIiIpLCBqc29u
LmdldCgnY29uZGl0aW9uJyksIGpzb24uZ2V0KCdhc3luYycsIEZhbHNlKSkKIAogICAgIGRlZiBw
YXJzZV9ldmVudChzZWxmLCBqc29uLCBkZWJ1Z2dhYmxlX3R5cGVzKToKICAgICAgICAgY2hlY2tf
Zm9yX3JlcXVpcmVkX3Byb3BlcnRpZXMoWyduYW1lJ10sIGpzb24sICJldmVudCIpCkBAIC01NDQs
OCArNTA3LDcgQEAgY2xhc3MgUHJvdG9jb2w6CiAgICAgICAgICAgICBpZiBsZW4oZHVwbGljYXRl
X25hbWVzKSA+IDA6CiAgICAgICAgICAgICAgICAgcmFpc2UgUGFyc2VFeGNlcHRpb24oIk1hbGZv
cm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjogcGFyYW1ldGVyIGxpc3QgZm9yIGV2ZW50ICVzIGhh
cyBkdXBsaWNhdGUgcGFyYW1ldGVyIG5hbWVzIiAlIGpzb25bJ25hbWUnXSkKIAotICAgICAgICBw
bGF0Zm9ybSA9IFBsYXRmb3JtLmZyb21TdHJpbmcoanNvbi5nZXQoJ3BsYXRmb3JtJywgJ2dlbmVy
aWMnKSkKLSAgICAgICAgcmV0dXJuIEV2ZW50KGpzb25bJ25hbWUnXSwgdGFyZ2V0X3R5cGVzLCBl
dmVudF9wYXJhbWV0ZXJzLCBqc29uLmdldCgnZGVzY3JpcHRpb24nLCAiIiksIHBsYXRmb3JtKQor
ICAgICAgICByZXR1cm4gRXZlbnQoanNvblsnbmFtZSddLCB0YXJnZXRfdHlwZXMsIGV2ZW50X3Bh
cmFtZXRlcnMsIGpzb24uZ2V0KCdkZXNjcmlwdGlvbicsICIiKSwganNvbi5nZXQoJ2NvbmRpdGlv
bicpKQogCiAgICAgZGVmIHBhcnNlX2NhbGxfb3JfcmV0dXJuX3BhcmFtZXRlcihzZWxmLCBqc29u
KToKICAgICAgICAgY2hlY2tfZm9yX3JlcXVpcmVkX3Byb3BlcnRpZXMoWyduYW1lJ10sIGpzb24s
ICJwYXJhbWV0ZXIiKQpAQCAtNjQzLDEwICs2MDUsMTAgQEAgY2xhc3MgUHJvdG9jb2w6CiAKIAog
Y2xhc3MgRG9tYWluOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkb21haW5fbmFtZSwgZGVzY3Jp
cHRpb24sIGZlYXR1cmVfZ3VhcmQsIGRlYnVnZ2FibGVfdHlwZXMsIHRhcmdldF90eXBlcywgaXNT
dXBwbGVtZW50YWwsIHZlcnNpb24sIHR5cGVfZGVjbGFyYXRpb25zLCBjb21tYW5kcywgZXZlbnRz
KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZG9tYWluX25hbWUsIGRlc2NyaXB0aW9uLCBjb25k
aXRpb24sIGRlYnVnZ2FibGVfdHlwZXMsIHRhcmdldF90eXBlcywgaXNTdXBwbGVtZW50YWwsIHZl
cnNpb24sIHR5cGVfZGVjbGFyYXRpb25zLCBjb21tYW5kcywgZXZlbnRzKToKICAgICAgICAgc2Vs
Zi5kb21haW5fbmFtZSA9IGRvbWFpbl9uYW1lCiAgICAgICAgIHNlbGYuZGVzY3JpcHRpb24gPSBk
ZXNjcmlwdGlvbgotICAgICAgICBzZWxmLmZlYXR1cmVfZ3VhcmQgPSBmZWF0dXJlX2d1YXJkCisg
ICAgICAgIHNlbGYuY29uZGl0aW9uID0gY29uZGl0aW9uCiAgICAgICAgIHNlbGYuZGVidWdnYWJs
ZV90eXBlcyA9IGRlYnVnZ2FibGVfdHlwZXMKICAgICAgICAgc2VsZi50YXJnZXRfdHlwZXMgPSB0
YXJnZXRfdHlwZXMKICAgICAgICAgc2VsZi5pc19zdXBwbGVtZW50YWwgPSBpc1N1cHBsZW1lbnRh
bApAQCAtNjg2LDExICs2NDgsMTEgQEAgY2xhc3MgRG9tYWluczoKIAogCiBjbGFzcyBUeXBlRGVj
bGFyYXRpb246Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHR5cGVfbmFtZSwgdHlwZV9yZWYsIGRl
c2NyaXB0aW9uLCBwbGF0Zm9ybSwgdHlwZV9tZW1iZXJzKToKKyAgICBkZWYgX19pbml0X18oc2Vs
ZiwgdHlwZV9uYW1lLCB0eXBlX3JlZiwgZGVzY3JpcHRpb24sIGNvbmRpdGlvbiwgdHlwZV9tZW1i
ZXJzKToKICAgICAgICAgc2VsZi50eXBlX25hbWUgPSB0eXBlX25hbWUKICAgICAgICAgc2VsZi50
eXBlX3JlZiA9IHR5cGVfcmVmCiAgICAgICAgIHNlbGYuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlv
bgotICAgICAgICBzZWxmLnBsYXRmb3JtID0gcGxhdGZvcm0KKyAgICAgICAgc2VsZi5jb25kaXRp
b24gPSBjb25kaXRpb24KICAgICAgICAgc2VsZi50eXBlX21lbWJlcnMgPSB0eXBlX21lbWJlcnMK
IAogICAgICAgICBpZiBzZWxmLnR5cGVfbmFtZSAhPSB1Y2ZpcnN0KHNlbGYudHlwZV9uYW1lKToK
QEAgLTczNCwxMyArNjk2LDEzIEBAIGNsYXNzIFBhcmFtZXRlcjoKIAogCiBjbGFzcyBDb21tYW5k
OgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb21tYW5kX25hbWUsIHRhcmdldF90eXBlcywgY2Fs
bF9wYXJhbWV0ZXJzLCByZXR1cm5fcGFyYW1ldGVycywgZGVzY3JpcHRpb24sIHBsYXRmb3JtLCBp
c19hc3luYyk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbW1hbmRfbmFtZSwgdGFyZ2V0X3R5
cGVzLCBjYWxsX3BhcmFtZXRlcnMsIHJldHVybl9wYXJhbWV0ZXJzLCBkZXNjcmlwdGlvbiwgY29u
ZGl0aW9uLCBpc19hc3luYyk6CiAgICAgICAgIHNlbGYuY29tbWFuZF9uYW1lID0gY29tbWFuZF9u
YW1lCiAgICAgICAgIHNlbGYudGFyZ2V0X3R5cGVzID0gdGFyZ2V0X3R5cGVzCiAgICAgICAgIHNl
bGYuY2FsbF9wYXJhbWV0ZXJzID0gY2FsbF9wYXJhbWV0ZXJzCiAgICAgICAgIHNlbGYucmV0dXJu
X3BhcmFtZXRlcnMgPSByZXR1cm5fcGFyYW1ldGVycwogICAgICAgICBzZWxmLmRlc2NyaXB0aW9u
ID0gZGVzY3JpcHRpb24KLSAgICAgICAgc2VsZi5wbGF0Zm9ybSA9IHBsYXRmb3JtCisgICAgICAg
IHNlbGYuY29uZGl0aW9uID0gY29uZGl0aW9uCiAgICAgICAgIHNlbGYuaXNfYXN5bmMgPSBpc19h
c3luYwogCiAgICAgZGVmIHJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKHNlbGYsIHByb3RvY29sLCBk
b21haW4pOgpAQCAtNzU0LDEyICs3MTYsMTIgQEAgY2xhc3MgQ29tbWFuZDoKIAogCiBjbGFzcyBF
dmVudDoKLSAgICBkZWYgX19pbml0X18oc2VsZiwgZXZlbnRfbmFtZSwgdGFyZ2V0X3R5cGVzLCBl
dmVudF9wYXJhbWV0ZXJzLCBkZXNjcmlwdGlvbiwgcGxhdGZvcm0pOgorICAgIGRlZiBfX2luaXRf
XyhzZWxmLCBldmVudF9uYW1lLCB0YXJnZXRfdHlwZXMsIGV2ZW50X3BhcmFtZXRlcnMsIGRlc2Ny
aXB0aW9uLCBjb25kaXRpb24pOgogICAgICAgICBzZWxmLmV2ZW50X25hbWUgPSBldmVudF9uYW1l
CiAgICAgICAgIHNlbGYudGFyZ2V0X3R5cGVzID0gdGFyZ2V0X3R5cGVzCiAgICAgICAgIHNlbGYu
ZXZlbnRfcGFyYW1ldGVycyA9IGV2ZW50X3BhcmFtZXRlcnMKICAgICAgICAgc2VsZi5kZXNjcmlw
dGlvbiA9IGRlc2NyaXB0aW9uCi0gICAgICAgIHNlbGYucGxhdGZvcm0gPSBwbGF0Zm9ybQorICAg
ICAgICBzZWxmLmNvbmRpdGlvbiA9IGNvbmRpdGlvbgogCiAgICAgZGVmIHJlc29sdmVfdHlwZV9y
ZWZlcmVuY2VzKHNlbGYsIHByb3RvY29sLCBkb21haW4pOgogICAgICAgICBsb2cuZGVidWcoIj4+
IFJlc29sdmluZyB0eXBlIHJlZmVyZW5jZXMgZm9yIHBhcmFtZXRlcnMgaW4gZXZlbnQ6ICVzIiAl
IHNlbGYuZXZlbnRfbmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL29iamNfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL29iamNfZ2VuZXJhdG9y
X3RlbXBsYXRlcy5weQppbmRleCAyMjc0MjE1MTk5NGYyNDNmNGVkMTNiYzc2ZmE4YTZiNTc3NTVh
NTMyLi40MjFjYjFiYTI2MzE0NjM4ZTI4ZTA1MzEzODJmMjQ2MmU0ZmU1ZDMwIDEwMDc1NQotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9vYmpjX2dl
bmVyYXRvcl90ZW1wbGF0ZXMucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vb2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzLnB5CkBAIC0xMjcsOCAr
MTI3LDcgQEAgcHJpdmF0ZToKICR7c3VjY2Vzc0NhbGxiYWNrfQogJHtjb252ZXJzaW9uc30KICR7
aW52b2NhdGlvbn0KLX0KLSIiIikKK30iIiIpCiAKICAgICBDb25maWd1cmF0aW9uQ29tbWFuZFBy
b3BlcnR5ID0gKAogICAgICIiIkBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4sIHNldHRlcj1z
ZXQke2RvbWFpbk5hbWV9SGFuZGxlcjopIGlkPCR7b2JqY1ByZWZpeH0ke2RvbWFpbk5hbWV9RG9t
YWluSGFuZGxlcj4gJHt2YXJpYWJsZU5hbWVQcmVmaXh9SGFuZGxlcjsiIiIpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9wcmVwcm9j
ZXNzLnBsIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
cHJlcHJvY2Vzcy5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wYjA4ZDJhYWQwNzM3YzE2YzZkNjc5MDcxMjVkNGM2
MDhkZWUxOTJhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vcHJlcHJvY2Vzcy5wbApAQCAtMCwwICsxLDExNSBAQAorIyEg
L3Vzci9iaW4vZW52IHBlcmwKKyMKKyMgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0
IHByb2plY3QKKyMKKyMgICBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorIworIyAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIyAgIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIyAgIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMK
KyMgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyMgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisjICAgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjICAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorIyAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisjICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyMgICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKKwordXNlIENvbmZpZzsK
K3VzZSBHZXRvcHQ6Okxvbmc7Cit1c2UgSVBDOjpPcGVuMjsKK3VzZSBJUEM6Ok9wZW4zOwordXNl
IFRleHQ6OlBhcnNlV29yZHM7CisKK215ICRpbnB1dFBhdGg7CitteSAkZGVmaW5lczsKK215ICRw
cmVwcm9jZXNzb3I7CitteSAkb3V0cHV0UGF0aDsKK0dldE9wdGlvbnMoJ2lucHV0PXMnID0+IFwk
aW5wdXRQYXRoLAorICAgICAgICAgICAnZGVmaW5lcz1zJyA9PiBcJGRlZmluZXMsCisgICAgICAg
ICAgICdwcmVwcm9jZXNzb3I9cycgPT4gXCRwcmVwcm9jZXNzb3IsCisgICAgICAgICAgICdvdXRw
dXQ9cycgPT4gXCRvdXRwdXRQYXRoKTsKKworbXkgQGFyZ3MgPSAoKTsKK2lmICghJHByZXByb2Nl
c3NvcikgeworICAgIGlmICgkQ29uZmlnOjpDb25maWd7Im9zbmFtZSJ9IGVxICJNU1dpbjMyIikg
eworICAgICAgICAkcHJlcHJvY2Vzc29yID0gJEVOVntDQ30gfHwgImNsIjsKKyAgICAgICAgcHVz
aChAYXJncywgcXcoL25vbG9nbyAvRVAgL1RQIC9DKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
JHByZXByb2Nlc3NvciA9ICRFTlZ7Q0N9IHx8ICgteCAiL3Vzci9iaW4vY2xhbmciID8gIi91c3Iv
YmluL2NsYW5nIiA6ICIvdXNyL2Jpbi9nY2MiKTsKKyAgICAgICAgcHVzaChAYXJncywgcXcoLUUg
LVAgLXggYysrIC1DKSk7CisgICAgfQorfQorCitpZiAoJENvbmZpZzo6Q29uZmlneyJvc25hbWUi
fSBlcSAiZGFyd2luIikgeworICAgIHB1c2goQGFyZ3MsICItSSIgLiAkRU5We0JVSUxUX1BST0RV
Q1RTX0RJUn0gLiAiL3Vzci9sb2NhbC9pbmNsdWRlIikgaWYgJEVOVntCVUlMVF9QUk9EVUNUU19E
SVJ9OworICAgIHB1c2goQGFyZ3MsICItaXN5c3Jvb3QiLCAkRU5We1NES1JPT1R9KSBpZiAkRU5W
e1NES1JPT1R9OworfQorCisjIFJlbW92ZSBkb3VibGUgcXVvdGF0aW9ucyBmcm9tICRkZWZpbmVz
IGFuZCBleHRyYWN0IG1hY3Jvcy4KKyMgRm9yIGV4YW1wbGUsIGlmICRkZWZpbmVzIGlzICcgIkE9
MSIgIkI9MSIgQz0xICIiICAgIEQgICcsCisjIHRoZW4gaXQgaXMgY29udmVydGVkIGludG8gZm91
ciBtYWNyb3MgLURBPTEsIC1EQj0xLCAtREM9MSBhbmQgLURELgorJGRlZmluZXMgPX4gcy9cIi8v
ZzsKK215IEBtYWNyb3MgPSBncmVwIHsgJF8gfSBzcGxpdCgvXHMrLywgJGRlZmluZXMpOyAjIGdy
ZXAgc2tpcHMgZW1wdHkgbWFjcm9zLgorQG1hY3JvcyA9IG1hcCB7ICItRCRfIiB9IEBtYWNyb3M7
CisKK215ICRwaWQgPSAwOworaWYgKCRDb25maWd7b3NuYW1lfSBlcSAiY3lnd2luIikgeworICAg
ICRFTlZ7UEFUSH0gPSAiJEVOVntQQVRIfTovY3lnZHJpdmUvYy9jeWd3aW4vYmluIjsKKyAgICBt
eSBAcHJlcHJvY2Vzc29yQW5kRmxhZ3M7CisgICAgaWYgKCRwcmVwcm9jZXNzb3IgZXEgIi91c3Iv
YmluL2djYyIpIHsKKyAgICAgICAgQHByZXByb2Nlc3NvckFuZEZsYWdzID0gc3BsaXQoJyAnLCAk
cHJlcHJvY2Vzc29yKTsKKyAgICB9IGVsc2UgeworICAgICAgICAkcHJlcHJvY2Vzc29yID1+IC8i
KC4qKSIvOworICAgICAgICBjaG9tcChteSAkcHJlcHJvY2Vzc29yID0gYGN5Z3BhdGggLXUgJyQx
J2ApIGlmIChkZWZpbmVkICQxKTsKKyAgICAgICAgY2hvbXAoJGlucHV0UGF0aCA9IGBjeWdwYXRo
IC13ICckaW5wdXRQYXRoJ2ApOworICAgICAgICBAcHJlcHJvY2Vzc29yQW5kRmxhZ3MgPSAoJHBy
ZXByb2Nlc3NvciwgIi9ub2xvZ28iLCAiL0VQIiwgIi9UUCIsICIvQyIpOworICAgIH0KKworICAg
ICMgVGhpcyBjYWxsIGNhbiBmYWlsIGlmIFdpbmRvd3MgcmViYXNlcyBjeWd3aW4sIHNvIHJldHJ5
IGEgZmV3IHRpbWVzIHVudGlsIGl0IHN1Y2NlZWRzLgorICAgIGZvciAobXkgJHRyaWVzID0gMDsg
ISRwaWQgJiYgKCR0cmllcyA8IDIwKTsgJHRyaWVzKyspIHsKKyAgICAgICAgZXZhbCB7CisgICAg
ICAgICAgICAjIFN1cHByZXNzIFNUREVSUiBzbyB0aGF0IGlmIHdlJ3JlIHVzaW5nIGNsLmV4ZSwg
dGhlIG91dHB1dAorICAgICAgICAgICAgIyBuYW1lIGlzbid0IG5lZWRsZXNzbHkgZWNob2VkLgor
ICAgICAgICAgICAgdXNlIFN5bWJvbCAnZ2Vuc3ltJzsgbXkgJGVyciA9IGdlbnN5bTsKKyAgICAg
ICAgICAgICRwaWQgPSBvcGVuMyhcKlBQX0lOLCBcKlBQX09VVCwgJGVyciwgQHByZXByb2Nlc3Nv
ckFuZEZsYWdzLCBAYXJncywgQG1hY3JvcywgJGlucHV0UGF0aCk7CisgICAgICAgICAgICAxOwor
ICAgICAgICB9IG9yIGRvIHsKKyAgICAgICAgICAgIHNsZWVwIDE7CisgICAgICAgIH0KKyAgICB9
Cit9IGVsc2lmICgkQ29uZmlnOjpDb25maWd7Im9zbmFtZSJ9IGVxICJNU1dpbjMyIikgeworICAg
ICMgU3VwcHJlc3MgU1RERVJSIHNvIHRoYXQgaWYgd2UncmUgdXNpbmcgY2wuZXhlLCB0aGUgb3V0
cHV0CisgICAgIyBuYW1lIGlzbid0IG5lZWRsZXNzbHkgZWNob2VkLgorICAgIHVzZSBTeW1ib2wg
J2dlbnN5bSc7IG15ICRlcnIgPSBnZW5zeW07CisgICAgJHBpZCA9IG9wZW4zKFwqUFBfSU4sIFwq
UFBfT1VULCAkZXJyLCAkcHJlcHJvY2Vzc29yLCBAYXJncywgQG1hY3JvcywgJGlucHV0UGF0aCk7
Cit9IGVsc2UgeworICAgICRwaWQgPSBvcGVuMihcKlBQX09VVCwgXCpQUF9JTiwgc2hlbGx3b3Jk
cygkcHJlcHJvY2Vzc29yKSwgQGFyZ3MsIEBtYWNyb3MsICRpbnB1dFBhdGgpOworfQorY2xvc2Ug
UFBfSU47CitteSBAbGluZXMgPSA8UFBfT1VUPjsKK2Nsb3NlIFBQX09VVDsKK3dhaXRwaWQoJHBp
ZCwgMCk7CisKK29wZW4gT1VUUFVULCAiPiRvdXRwdXRQYXRoIiB8fCBkaWUgIkNvdWxkIG5vdCBv
cGVuICRvdXRwdXRQYXRoIGZvciB3cml0aW5nIjsKK2ZvcmVhY2ggbXkgJGxpbmUgKEBsaW5lcykg
eworICAgICMgSWdub3JlIHdoaXRlc3BhY2UgbGluZXMuCisgICAgaWYgKCRsaW5lID1+IC9eXHMq
JC8pIHsKKyAgICAgICAgbmV4dDsKKyAgICB9CisKKyAgICAjIEFkZCBuZXdsaW5lcyBiZWZvcmUg
Y29tbWVudHMuCisgICAgaWYgKCRsaW5lID1+IC9eXC9cLy8pIHsKKyAgICAgICAgcHJpbnQgT1VU
UFVUICJcbiI7CisgICAgfQorCisgICAgcHJpbnQgT1VUUFVUICRsaW5lOworfQorY2xvc2UgT1VU
UFVUOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weSBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKaW5kZXggMmIxZDg3ODJjYjJhN2U5MmM4MmJjYjU3MzNiMTlhZGQ0OTVkMjlkNS4u
OGNlZjAwOTVmN2U5NGFiNjg4NWUwZmM3MzQzMWUzZDZjODJlZWMxOSAxMDA3NTUKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CkBAIC0xMTcs
NyArMTE3LDYgQEAgZGVmIGdlbmVyYXRlX2Zyb21fc3BlY2lmaWNhdGlvbihwcmltYXJ5X3NwZWNp
ZmljYXRpb25fZmlsZXBhdGg9Tm9uZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
b3V0cHV0X2RpcnBhdGg9Tm9uZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9y
Y2Vfb3V0cHV0PUZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXdv
cmtfbmFtZT0iIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhdGZvcm1fbmFt
ZT0iIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVfZnJvbnRlbmQ9
VHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVfYmFja2VuZD1U
cnVlKToKIApAQCAtMTMwLDcgKzEyOSw2IEBAIGRlZiBnZW5lcmF0ZV9mcm9tX3NwZWNpZmljYXRp
b24ocHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoPU5vbmUsCiAgICAgICAgIGV4Y2VwdCBW
YWx1ZUVycm9yIGFzIGU6CiAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkVycm9yIHBhcnNp
bmcgdmFsaWQgSlNPTiBpbiBmaWxlOiAiICsgZmlsZXBhdGggKyAiXG5QYXJzZSBlcnJvcjogIiAr
IHN0cihlKSkKIAotICAgIHBsYXRmb3JtID0gUGxhdGZvcm0uZnJvbVN0cmluZyhwbGF0Zm9ybV9u
YW1lKQogICAgIHByb3RvY29sID0gbW9kZWxzLlByb3RvY29sKGZyYW1ld29ya19uYW1lKQogICAg
IGZvciBzcGVjaWZpY2F0aW9uIGluIHN1cHBsZW1lbnRhbF9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRo
czoKICAgICAgICAgbG9hZF9zcGVjaWZpY2F0aW9uKHByb3RvY29sLCBzcGVjaWZpY2F0aW9uLCBp
c1N1cHBsZW1lbnRhbD1UcnVlKQpAQCAtMTM4LDcgKzEzNiw3IEBAIGRlZiBnZW5lcmF0ZV9mcm9t
X3NwZWNpZmljYXRpb24ocHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoPU5vbmUsCiAKICAg
ICBwcm90b2NvbC5yZXNvbHZlX3R5cGVzKCkKIAotICAgIGdlbmVyYXRvcl9hcmd1bWVudHMgPSBb
cHJvdG9jb2wsIHBsYXRmb3JtLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGhdCisgICAg
Z2VuZXJhdG9yX2FyZ3VtZW50cyA9IFtwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2Zp
bGVwYXRoXQogICAgIGdlbmVyYXRvcnMgPSBbXQogCiAgICAgaWYgcHJvdG9jb2wuZnJhbWV3b3Jr
IGlzIEZyYW1ld29ya3MuVGVzdDoKQEAgLTE2Miw3ICsxNjAsNiBAQCBkZWYgZ2VuZXJhdGVfZnJv
bV9zcGVjaWZpY2F0aW9uKHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aD1Ob25lLAogICAg
ICAgICBnZW5lcmF0b3JzLmFwcGVuZChPYmpDUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2Vu
ZXJhdG9yKCpnZW5lcmF0b3JfYXJndW1lbnRzKSkKIAogICAgIGVsaWYgcHJvdG9jb2wuZnJhbWV3
b3JrIGlzIEZyYW1ld29ya3MuSmF2YVNjcmlwdENvcmU6Ci0gICAgICAgIGdlbmVyYXRvcnMuYXBw
ZW5kKEpTQmFja2VuZENvbW1hbmRzR2VuZXJhdG9yKCpnZW5lcmF0b3JfYXJndW1lbnRzKSkKICAg
ICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoQ3BwQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJIZWFk
ZXJHZW5lcmF0b3IoKmdlbmVyYXRvcl9hcmd1bWVudHMpKQogICAgICAgICBnZW5lcmF0b3JzLmFw
cGVuZChDcHBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcigqZ2VuZXJhdG9yX2FyZ3Vt
ZW50cykpCiAgICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKENwcEJhY2tlbmREaXNwYXRjaGVySW1w
bGVtZW50YXRpb25HZW5lcmF0b3IoKmdlbmVyYXRvcl9hcmd1bWVudHMpKQpAQCAtMjI5LDcgKzIy
Niw2IEBAIGRlZiBnZW5lcmF0ZV9mcm9tX3NwZWNpZmljYXRpb24ocHJpbWFyeV9zcGVjaWZpY2F0
aW9uX2ZpbGVwYXRoPU5vbmUsCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgYWxs
b3dlZF9mcmFtZXdvcmtfbmFtZXMgPSBbJ0phdmFTY3JpcHRDb3JlJywgJ1dlYkluc3BlY3Rvcics
ICdXZWJJbnNwZWN0b3JVSScsICdXZWJLaXQnLCAnVGVzdCddCi0gICAgYWxsb3dlZF9wbGF0Zm9y
bV9uYW1lcyA9IFsnaU9TJywgJ21hY09TJywgJ2FsbCcsICdnZW5lcmljJ10KICAgICBjbGlfcGFy
c2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKHVzYWdlPSJ1c2FnZTogJXByb2cgW29wdGlvbnNd
IFByaW1hcnlQcm90b2NvbC5qc29uIFtTdXBwbGVtZW50YWxQcm90b2NvbC5qc29uIC4uLl0iKQog
ICAgIGNsaV9wYXJzZXIuYWRkX29wdGlvbigiLW8iLCAiLS1vdXRwdXREaXIiLCBoZWxwPSJEaXJl
Y3Rvcnkgd2hlcmUgZ2VuZXJhdGVkIGZpbGVzIHNob3VsZCBiZSB3cml0dGVuLiIpCiAgICAgY2xp
X3BhcnNlci5hZGRfb3B0aW9uKCItLWZyYW1ld29yayIsIHR5cGU9ImNob2ljZSIsIGNob2ljZXM9
YWxsb3dlZF9mcmFtZXdvcmtfbmFtZXMsIGhlbHA9IlRoZSBmcmFtZXdvcmsgdGhhdCB0aGUgcHJp
bWFyeSBzcGVjaWZpY2F0aW9uIGJlbG9uZ3MgdG8uIikKQEAgLTIzOCw3ICsyMzQsNiBAQCBpZiBf
X25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIGNsaV9wYXJzZXIuYWRkX29wdGlvbigiLXQiLCAi
LS10ZXN0IiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgaGVscD0iRW5hYmxlIHRlc3QgbW9kZS4gVXNl
IHVuaXF1ZSBvdXRwdXQgZmlsZW5hbWVzIGNyZWF0ZWQgYnkgcHJlcGVuZGluZyB0aGUgaW5wdXQg
ZmlsZW5hbWUuIikKICAgICBjbGlfcGFyc2VyLmFkZF9vcHRpb24oIi0tZnJvbnRlbmQiLCBhY3Rp
b249InN0b3JlX3RydWUiLCBoZWxwPSJHZW5lcmF0ZSBjb2RlIGZvciB0aGUgZnJvbnRlbmQtc2lk
ZSBvZiB0aGUgcHJvdG9jb2wgb25seS4iKQogICAgIGNsaV9wYXJzZXIuYWRkX29wdGlvbigiLS1i
YWNrZW5kIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgaGVscD0iR2VuZXJhdGUgY29kZSBmb3IgdGhl
IGJhY2tlbmQtc2lkZSBvZiB0aGUgcHJvdG9jb2wgb25seS4iKQotICAgIGNsaV9wYXJzZXIuYWRk
X29wdGlvbigiLS1wbGF0Zm9ybSIsIGRlZmF1bHQ9ImdlbmVyaWMiLCBoZWxwPSJUaGUgcGxhdGZv
cm0gb2YgdGhlIGJhY2tlbmQgYmVpbmcgZ2VuZXJhdGVkLiBGb3IgZXhhbXBsZSwgd2UgY29tcGls
ZSBXZWJLaXQyIGZvciBlaXRoZXIgbWFjT1Mgb3IgaU9TLiBUaGlzIHZhbHVlIGlzIGNhc2UtaW5z
ZW5zaXRpdmUuIEFsbG93ZWQgdmFsdWVzOiAlcyIgJSAiLCAiLmpvaW4oYWxsb3dlZF9wbGF0Zm9y
bV9uYW1lcykpCiAgICAgb3B0aW9ucyA9IE5vbmUKIAogICAgIGFyZ19vcHRpb25zLCBhcmdfdmFs
dWVzID0gY2xpX3BhcnNlci5wYXJzZV9hcmdzKCkKQEAgLTI2NCw3ICsyNTksNiBAQCBpZiBfX25h
bWVfXyA9PSAnX19tYWluX18nOgogICAgICAgICAnb3V0cHV0X2RpcnBhdGgnOiBhcmdfb3B0aW9u
cy5vdXRwdXREaXIsCiAgICAgICAgICdjb25jYXRlbmF0ZV9vdXRwdXQnOiBhcmdfb3B0aW9ucy50
ZXN0LAogICAgICAgICAnZnJhbWV3b3JrX25hbWUnOiBhcmdfb3B0aW9ucy5mcmFtZXdvcmssCi0g
ICAgICAgICdwbGF0Zm9ybV9uYW1lJzogYXJnX29wdGlvbnMucGxhdGZvcm0sCiAgICAgICAgICdm
b3JjZV9vdXRwdXQnOiBhcmdfb3B0aW9ucy5mb3JjZSwKICAgICAgICAgJ2dlbmVyYXRlX2JhY2tl
bmQnOiBnZW5lcmF0ZV9iYWNrZW5kLAogICAgICAgICAnZ2VuZXJhdGVfZnJvbnRlbmQnOiBnZW5l
cmF0ZV9mcm9udGVuZCwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9hbGwvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbiBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9hbGwvZGVmaW5p
dGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggODE3ZjEzNWVlNWE3MjA5N2FlM2UxMzFiZGQ0MGU2MDE2OThhYjEwYy4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvYWxsL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3Jt
Lmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi17Ci0gICAgImRvbWFpbiI6ICJO
ZXR3b3JrIiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJO
ZXR3b3JrRXJyb3IiLAotICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKLSAgICAgICAgICAg
ICJwbGF0Zm9ybSI6ICJtYWNvcyIsCi0gICAgICAgICAgICAicHJvcGVydGllcyI6IFsKLSAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogIm1lc3NhZ2UiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3Jp
cHRpb24iOiAiRXJyb3IgbWVzc2FnZS4iIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJj
b2RlIiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBjb2RlLiIgfQot
ICAgICAgICAgICAgXQotICAgICAgICB9Ci0gICAgXSwKLSAgICAiY29tbWFuZHMiOiBbCi0gICAg
ICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJjZSIsCi0gICAgICAgICAgICAi
cGxhdGZvcm0iOiAibWFjb3MiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEg
cmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ug
d2l0aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKLSAgICAgICAgfQotICAgIF0sCi0gICAgImV2
ZW50cyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAicmVzb3VyY2VMb2FkZWQi
LAotICAgICAgICAgICAgInBsYXRmb3JtIjogIm1hY29zIiwKLSAgICAgICAgICAgICJkZXNjcmlw
dGlvbiI6ICJBIHJlc291cmNlIHdhcyBsb2FkZWQuIgotICAgICAgICB9Ci0gICAgXQotfQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2Fs
bC9leHBlY3RlZC9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uLXJlc3VsdCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9hbGwvZXhwZWN0ZWQv
ZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbi1yZXN1bHQKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGM2ZTY4ZjRhOWFlZGQzZDg0MzY3MGEyMmYwY2I4MzUzMTdlZjY0MDQu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2FsbC9leHBlY3RlZC9kZWZpbml0
aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uLXJlc3VsdAorKysgL2Rldi9udWxsCkBAIC0xLDEy
MTcgKzAsMCBAQAotIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBs
YXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
Ly8gTmV0d29yawotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiTmV0d29yayIsIG51
bGwpOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIk5ldHdvcmsubG9hZFJlc291
cmNlIiwgbnVsbCwgW10sIFtdKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudCgiTmV0
d29yay5yZXNvdXJjZUxvYWRlZCIsIG51bGwsIFtdKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0
ZXJOZXR3b3JrRGlzcGF0Y2hlciA9IEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEaXNwYXRjaGVy
LmJpbmQoSW5zcGVjdG9yQmFja2VuZCwgIk5ldHdvcmsiKTsKLUluc3BlY3RvckJhY2tlbmQuYWN0
aXZhdGVEb21haW4oIk5ldHdvcmsiLCBudWxsKTsKLSMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFj
a2VuZENvbW1hbmRzLmpzCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERp
c3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9u
cy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgotI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLQotbmFtZXNwYWNl
IEluc3BlY3RvciB7Ci0KLWNsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1Ymxp
YzoKLSAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hl
cj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNo
ZXIpOyB9Ci0gICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3Qg
eyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQotcHJpdmF0ZToKLSAgICBSZWZQ
dHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Ci19OwotCi0KLWNsYXNz
IEFsdGVybmF0ZU5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+QWx0ZXJuYXRlTmV0d29ya0Jh
Y2tlbmREaXNwYXRjaGVyKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZShsb25n
IGNhbGxJZCkgPSAwOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSNlbmRpZiAv
LyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSMjIyBFbmQgRmlsZTog
VGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
QmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBk
ZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3Rv
Y29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFj
ZSBJbnNwZWN0b3IgewotCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQotI2lmIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotY2xhc3MgQWx0ZXJuYXRlTmV0d29y
a0JhY2tlbmREaXNwYXRjaGVyOwotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQotCi1jbGFzcyBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsK
LXB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlKEVycm9yU3RyaW5nJikgPSAw
OwotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgfk5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIoKTsKLX07Ci0KLWNsYXNzIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1Ymxp
YyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJl
ZjxOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIE5l
dHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICB2b2lkIGRpc3BhdGNoKGxvbmcg
cmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNz
YWdlKSBmaW5hbDsKLXByaXZhdGU6Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0
SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0jaWYgRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi1wdWJsaWM6Ci0gICAgdm9pZCBzZXRBbHRlcm5h
dGVEaXNwYXRjaGVyKEFsdGVybmF0ZU5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRl
RGlzcGF0Y2hlcikgeyBtX2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVy
OyB9Ci1wcml2YXRlOgotICAgIEFsdGVybmF0ZU5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlciogbV9h
bHRlcm5hdGVEaXNwYXRjaGVyIHsgbnVsbHB0ciB9OwotI2VuZGlmCi1wcml2YXRlOgotICAgIE5l
dHdvcmtCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYsIE5ldHdvcmtCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
KiBtX2FnZW50IHsgbnVsbHB0ciB9OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0j
IyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0j
aW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jaW5j
bHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgotI2VuZGlmCi0KLW5hbWVz
cGFjZSBJbnNwZWN0b3IgewotCi1OZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+TmV0
d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQotCi1SZWY8TmV0d29ya0JhY2tlbmRE
aXNwYXRjaGVyPiBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShCYWNrZW5kRGlzcGF0
Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIq
IGFnZW50KQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE5ldHdvcmtCYWNrZW5kRGlzcGF0
Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKLX0KLQotTmV0d29ya0JhY2tlbmREaXNw
YXRjaGVyOjpOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tl
bmREaXNwYXRjaGVyLCBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKLSAg
ICA6IFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQotICAg
ICwgbV9hZ2VudChhZ2VudCkKLXsKLSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRp
c3BhdGNoZXJGb3JEb21haW4oIk5ldHdvcmsiX3MsIHRoaXMpOwotfQotCi12b2lkIE5ldHdvcmtC
YWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYg
bWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCi17Ci0gICAgUmVmPE5ldHdvcmtC
YWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7Ci0KLSAgICBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiBwYXJhbWV0ZXJzOwotICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJh
bWV0ZXJzKTsKLQotICAgIGlmIChtZXRob2QgPT0gImxvYWRSZXNvdXJjZSIpCi0gICAgICAgIGxv
YWRSZXNvdXJjZShyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOwotICAgIGVsc2UKLSAg
ICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlz
cGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yay4iICsgbWV0aG9kICsgIicgd2FzIG5v
dCBmb3VuZCIpOwotfQotCi12b2lkIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291
cmNlKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQotewotI2lmIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotICAgIGlmIChtX2FsdGVybmF0ZURp
c3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2Uo
cmVxdWVzdElkKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAgRXJyb3JT
dHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKTsKLSAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2UoZXJyb3IpOwotCi0gICAgaWYg
KCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3Bv
bnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRj
aGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOwotfQotCi19IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0K
LSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1
ZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3Bl
Y3RvciB7Ci0KLWNsYXNzIEZyb250ZW5kUm91dGVyOwotCi1jbGFzcyBOZXR3b3JrRnJvbnRlbmRE
aXNwYXRjaGVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBO
ZXR3b3JrRnJvbnRlbmREaXNwYXRjaGVyKEZyb250ZW5kUm91dGVyJiBmcm9udGVuZFJvdXRlcikg
OiBtX2Zyb250ZW5kUm91dGVyKGZyb250ZW5kUm91dGVyKSB7IH0KLSAgICB2b2lkIHJlc291cmNl
TG9hZGVkKCk7Ci1wcml2YXRlOgotICAgIEZyb250ZW5kUm91dGVyJiBtX2Zyb250ZW5kUm91dGVy
OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9u
dGVuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNo
ZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdp
dGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3Bh
dGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJv
dXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3Bl
Y3RvciB7Ci0KLXZvaWQgTmV0d29ya0Zyb250ZW5kRGlzcGF0Y2hlcjo6cmVzb3VyY2VMb2FkZWQo
KQotewotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJOZXR3b3Jr
LnJlc291cmNlTG9hZGVkIl9zKTsKLQotICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpz
b25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgotCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYv
QXNzZXJ0aW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLW5hbWVzcGFjZSBQ
cm90b2NvbCB7Ci0KLQotCi0vLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KLW5hbWVzcGFjZSBOZXR3
b3JrIHsKLWNsYXNzIE5ldHdvcmtFcnJvcjsKLX0gLy8gTmV0d29yawotLy8gRW5kIG9mIGZvcndh
cmQgZGVjbGFyYXRpb25zLgotCi0KLQotCi1uYW1lc3BhY2UgTmV0d29yayB7Ci1jbGFzcyBOZXR3
b3JrRXJyb3IgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7Ci1wdWJsaWM6Ci0gICAgZW51bSB7
Ci0gICAgICAgIE5vRmllbGRzU2V0ID0gMCwKLSAgICAgICAgTWVzc2FnZVNldCA9IDEgPDwgMCwK
LSAgICAgICAgQ29kZVNldCA9IDEgPDwgMSwKLSAgICAgICAgQWxsRmllbGRzU2V0ID0gKE1lc3Nh
Z2VTZXQgfCBDb2RlU2V0KQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+Ci0gICAg
Y2xhc3MgQnVpbGRlciB7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVj
dD4gbV9yZXN1bHQ7Ci0KLSAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUg
fCBTVEVQPiYgY2FzdFN0YXRlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICpyZWlu
dGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwotICAgICAgICB9Ci0K
LSAgICAgICAgQnVpbGRlcihSZWY8LypOZXR3b3JrRXJyb3IqL0pTT046Ok9iamVjdD4mJiBvYmpl
Y3QpCi0gICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKLSAgICAgICAgewot
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJf
Y3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZnJpZW5kIGNs
YXNzIE5ldHdvcmtFcnJvcjsKLSAgICBwdWJsaWM6Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8
IE1lc3NhZ2VTZXQ+JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNZXNzYWdlU2V0KSwgcHJvcGVy
dHlfbWVzc2FnZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5n
KCJtZXNzYWdlIl9zLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1lc3Nh
Z2VTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29kZVNldD4m
IHNldENvZGUoaW50IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgQ29kZVNldCksIHByb3BlcnR5X2NvZGVfYWxyZWFkeV9zZXQpOwotICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldEludGVnZXIoImNvZGUiX3MsIHZhbHVlKTsKLSAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8Q29kZVNldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIFJlZjxO
ZXR3b3JrRXJyb3I+IHJlbGVhc2UoKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FT
U0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwotICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKE5ldHdvcmtFcnJvcikgPT0gc2l6ZW9mKEpTT046
Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsKLQotICAgICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4g
anNvblJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7Ci0gICAgICAgICAgICBhdXRv
IHJlc3VsdCA9IFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPE5ldHdvcmtFcnJvcj4qPigm
anNvblJlc3VsdCkpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAg
IH07Ci0KLSAgICAvKgotICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKLSAgICAgKiBSZWY8
TmV0d29ya0Vycm9yPiByZXN1bHQgPSBOZXR3b3JrRXJyb3I6OmNyZWF0ZSgpCi0gICAgICogICAg
IC5zZXRNZXNzYWdlKC4uLikKLSAgICAgKiAgICAgLnNldENvZGUoLi4uKQotICAgICAqICAgICAu
cmVsZWFzZSgpOwotICAgICAqLwotICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVh
dGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9i
amVjdDo6Y3JlYXRlKCkpOwotICAgIH0KLX07Ci0KLX0gLy8gTmV0d29yawotCi0KLQotfSAvLyBu
YW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
T2JqZWN0cy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9u
cy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xP
YmplY3RzLmgiCi0KLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1uYW1lc3BhY2UgUHJvdG9j
b2wgewotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW5j
bHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi1AcHJvdG9jb2wgVGVzdFByb3RvY29sTmV0d29ya0Rv
bWFpbkhhbmRsZXI7Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLWNsYXNzIE9iakNJbnNw
ZWN0b3JOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJuYXRlTmV0
d29ya0JhY2tlbmREaXNwYXRjaGVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1
YmxpYzoKLSAgICBPYmpDSW5zcGVjdG9yTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQ
cm90b2NvbE5ldHdvcmtEb21haW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5k
bGVyOyB9Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0SWQpIGZpbmFsOwotcHJp
dmF0ZToKLSAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkhhbmRsZXI+
PiBtX2RlbGVnYXRlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmlnLmgiCi0j
aW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgIlRl
c3RQcm90b2NvbEludGVybmFsLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3Rv
ciB7Ci0KLXZvaWQgT2JqQ0luc3BlY3Rvck5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJl
c291cmNlKGxvbmcgcmVxdWVzdElkKQotewotICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNU
b1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2VXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNz
Q2FsbGJhY2s6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9j
b2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidO
ZXR3b3JrLmxvYWRSZXNvdXJjZScgd2FzIG5vdCBmb3VuZCJfcyk7Ci0gICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAg
YmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tl
bmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwotICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgIH07Ci0KLSAgICBpZCBzdWNjZXNzQ2Fs
bGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVx
dWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7Ci0gICAgfTsKLQotICAgIFtt
X2RlbGVnYXRlIGxvYWRSZXNvdXJjZVdpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3Vj
Y2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107Ci19Ci0KLQotfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1t
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQg
PFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0
eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBO
U09iamVjdAotQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNldE5ldHdvcmtI
YW5kbGVyOikgaWQ8VGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkhhbmRsZXI+IG5ldHdvcmtIYW5k
bGVyOwotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBUZXN0UHJvdG9jb2xOZXR3b3Jr
RG9tYWluRXZlbnREaXNwYXRjaGVyICpuZXR3b3JrRXZlbnREaXNwYXRjaGVyOwotQGVuZAotCi0K
LSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xD
b25maWd1cmF0aW9uLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW1w
b3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0
Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0KLXVzaW5nIG5h
bWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1
cmF0aW9uCi17Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxl
cjsKLSAgICBpZDxUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluSGFuZGxlcj4gX25ldHdvcmtIYW5k
bGVyOwotICAgIFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5FdmVudERpc3BhdGNoZXIgKl9uZXR3
b3JrRXZlbnREaXNwYXRjaGVyOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9s
bGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBz
ZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsK
LSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwot
ICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBbX25ldHdvcmtI
YW5kbGVyIHJlbGVhc2VdOwotICAgIFtfbmV0d29ya0V2ZW50RGlzcGF0Y2hlciByZWxlYXNlXTsK
LSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLS0gKHZvaWQpc2V0TmV0d29ya0hhbmRsZXI6KGlk
PFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5IYW5kbGVyPiloYW5kbGVyCi17Ci0gICAgaWYgKGhh
bmRsZXIgPT0gX25ldHdvcmtIYW5kbGVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBbX25ldHdv
cmtIYW5kbGVyIHJlbGVhc2VdOwotICAgIF9uZXR3b3JrSGFuZGxlciA9IFtoYW5kbGVyIHJldGFp
bl07Ci0KLSAgICBhdXRvIGFsdGVybmF0ZURpc3BhdGNoZXIgPSBtYWtlVW5pcXVlPE9iakNJbnNw
ZWN0b3JOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI+KGhhbmRsZXIpOwotICAgIGF1dG8gYWx0ZXJu
YXRlQWdlbnQgPSBtYWtlVW5pcXVlPEFsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50PE5ldHdvcmtC
YWNrZW5kRGlzcGF0Y2hlciwgQWx0ZXJuYXRlTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyPj4oIk5l
dHdvcmsiX3MsICpfY29udHJvbGxlciwgV1RGTW92ZShhbHRlcm5hdGVEaXNwYXRjaGVyKSk7Ci0g
ICAgX2NvbnRyb2xsZXItPmFwcGVuZEV4dHJhQWdlbnQoV1RGTW92ZShhbHRlcm5hdGVBZ2VudCkp
OwotfQotCi0tIChpZDxUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluSGFuZGxlcj4pbmV0d29ya0hh
bmRsZXIKLXsKLSAgICByZXR1cm4gX25ldHdvcmtIYW5kbGVyOwotfQotCi0tIChUZXN0UHJvdG9j
b2xOZXR3b3JrRG9tYWluRXZlbnREaXNwYXRjaGVyICopbmV0d29ya0V2ZW50RGlzcGF0Y2hlcgot
ewotICAgIGlmICghX25ldHdvcmtFdmVudERpc3BhdGNoZXIpCi0gICAgICAgIF9uZXR3b3JrRXZl
bnREaXNwYXRjaGVyID0gW1tUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluRXZlbnREaXNwYXRjaGVy
IGFsbG9jXSBpbml0V2l0aENvbnRyb2xsZXI6X2NvbnRyb2xsZXJdOwotICAgIHJldHVybiBfbmV0
d29ya0V2ZW50RGlzcGF0Y2hlcjsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbi5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZl
bnREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmlu
aXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2lt
cG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDx3dGYvSlNPTlZh
bHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW1wbGVtZW50YXRpb24g
VGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkV2ZW50RGlzcGF0Y2hlcgotewotICAgIEF1Z21lbnRh
YmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29u
dHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAg
ICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBfY29udHJvbGxl
ciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpcmVzb3VyY2VM
b2FkZWQKLXsKLSAgICBjb25zdCBGcm9udGVuZFJvdXRlciYgcm91dGVyID0gX2NvbnRyb2xsZXIt
PmZyb250ZW5kUm91dGVyKCk7Ci0KLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9
IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0
aG9kIl9zLCAiTmV0d29yay5yZXNvdXJjZUxvYWRlZCJfcyk7Ci0gICAgcm91dGVyLnNlbmRFdmVu
dChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2wuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRp
b25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLSNpbXBv
cnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KLQotCi1AY2xhc3MgVGVz
dFByb3RvY29sTmV0d29ya0Vycm9yOwotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0
UHJvdG9jb2xQbGF0Zm9ybSkgewotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsLAotICAgIFRl
c3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUywK
LSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TLAotfTsKLQotCi0KLQotX19hdHRyaWJ1dGVf
XygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbE5ldHdv
cmtFcnJvciA6IFJXSVByb3RvY29sSlNPTk9iamVjdAotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
UGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQ7Ci0tIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICop
anNvbk9iamVjdDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICop
bWVzc2FnZSBjb2RlOihpbnQpY29kZTsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRv
bWljLCBjb3B5KSBOU1N0cmluZyAqbWVzc2FnZTsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAo
bm9uYXRvbWljLCBhc3NpZ24pIGludCBjb2RlOwotQGVuZAotCi1AcHJvdG9jb2wgVGVzdFByb3Rv
Y29sTmV0d29ya0RvbWFpbkhhbmRsZXIgPE5TT2JqZWN0PgotQG9wdGlvbmFsCi0tICh2b2lkKWxv
YWRSZXNvdXJjZVdpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJy
b3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikodm9pZCkpc3VjY2Vzc0NhbGxiYWNr
OwotQGVuZAotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRl
cmZhY2UgVGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkV2ZW50RGlzcGF0Y2hlciA6IE5TT2JqZWN0
Ci0tICh2b2lkKXJlc291cmNlTG9hZGVkOwotQGVuZAotCi0KLSNpbXBvcnQgPFdlYkluc3BlY3Rv
ci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4KLQotIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2wuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwu
aAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFj
LXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2Jq
ZWN0UHJpdmF0ZS5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0
b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi1AaW50ZXJmYWNl
IFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5FdmVudERpc3BhdGNoZXIgKFByaXZhdGUpCi0tIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihJbnNwZWN0b3I6OkF1Z21lbnRhYmxlSW5z
cGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcjsKLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbEludGVybmFsLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlv
bnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgPFdlYkluc3Bl
Y3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3Rv
ciB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KLU9wdGlvbmFsPE9iakNFbnVt
VHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOwotCi1pbmxpbmUg
U3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sUGxhdGZvcm0gdmFsdWUpCi17Ci0g
ICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDoKLSAg
ICAgICAgcmV0dXJuICJhbGwiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVy
aWM6Ci0gICAgICAgIHJldHVybiAiZ2VuZXJpYyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBs
YXRmb3JtSU9TOgotICAgICAgICByZXR1cm4gImlvcyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2Nv
bFBsYXRmb3JtTWFjT1M6Ci0gICAgICAgIHJldHVybiAibWFjb3MiX3M7Ci0gICAgfQotfQotCi10
ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sUGxhdGZvcm0+IGZyb21Qcm90
b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiYWxs
IikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOwotICAgIGlmICh2YWx1
ZSA9PSAiZ2VuZXJpYyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVy
aWM7Ci0gICAgaWYgKHZhbHVlID09ICJpb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29s
UGxhdGZvcm1JT1M7Ci0gICAgaWYgKHZhbHVlID09ICJtYWNvcyIpCi0gICAgICAgIHJldHVybiBU
ZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0K
LQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlv
bnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLQot
I2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2Vy
LmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5o
PgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW50ZXJmYWNlIFRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucyAoTmV0d29ya0RvbWFpbikKLQotKyAodm9pZClfcGFyc2VOZXR3b3Jr
RXJyb3I6KFRlc3RQcm90b2NvbE5ldHdvcmtFcnJvciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDoo
aWQpcGF5bG9hZDsKLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zIChOZXR3b3JrRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZU5ldHdvcmtFcnJvcjoo
VGVzdFByb3RvY29sTmV0d29ya0Vycm9yICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXls
b2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNEaWN0
aW9uYXJ5IGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xOZXR3b3JrRXJy
b3IgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKLX0KLQotQGVuZAotCi0KLSMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xUeXBlcy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIK
LQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDxXZWJJ
bnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotI2ltcG9ydCA8d3RmL0Fz
c2VydGlvbnMuaD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFj
ZSBJbnNwZWN0b3I7Ci0KLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbE5ldHdvcmtFcnJv
cgotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFy
eTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBp
bml0XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JF
UVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJtZXNzYWdlIl0sIEAibWVzc2FnZSIpOwotICAgIHNl
bGYubWVzc2FnZSA9IHBheWxvYWRbQCJtZXNzYWdlIl07Ci0KLSAgICBUSFJPV19FWENFUFRJT05f
Rk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJjb2RlIl0sIEAiY29kZSIpOwotICAgIHNl
bGYuY29kZSA9IFtwYXlsb2FkW0AiY29kZSJdIGludGVnZXJWYWx1ZV07Ci0KLSAgICByZXR1cm4g
c2VsZjsKLX0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90
b2NvbEpTT05PYmplY3QgKilvYmplY3QKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRX
aXRoSlNPTk9iamVjdDpbb2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0KCldKSkKLSAgICAgICAgcmV0
dXJuIG5pbDsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZTooaW50KWNvZGUKLXsKLSAgICBpZiAo
IShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkobWVzc2FnZSwgQCJtZXNzYWdlIik7Ci0K
LSAgICBzZWxmLm1lc3NhZ2UgPSBtZXNzYWdlOwotICAgIHNlbGYuY29kZSA9IGNvZGU7Ci0KLSAg
ICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClzZXRNZXNzYWdlOihOU1N0cmluZyAqKW1lc3Nh
Z2UKLXsKLSAgICBbc3VwZXIgc2V0U3RyaW5nOm1lc3NhZ2UgZm9yS2V5OkAibWVzc2FnZSJdOwot
fQotCi0tIChOU1N0cmluZyAqKW1lc3NhZ2UKLXsKLSAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0Zv
cktleTpAIm1lc3NhZ2UiXTsKLX0KLQotLSAodm9pZClzZXRDb2RlOihpbnQpY29kZQotewotICAg
IFtzdXBlciBzZXRJbnRlZ2VyOmNvZGUgZm9yS2V5OkAiY29kZSJdOwotfQotCi0tIChpbnQpY29k
ZQotewotICAgIHJldHVybiBbc3VwZXIgaW50ZWdlckZvcktleTpAImNvZGUiXTsKLX0KLQotQGVu
ZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9jb21tYW5kLXRhcmdl
dFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvY29tbWFuZC10YXJnZXRUeXBlLW1hdGNo
aW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQyN2FiNjViOTJhYmVi
MWNiODQ2NTc0N2M3NjMwOGY4NmI2ZTE4MTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvY29tbWFuZC10YXJnZXRUeXBlLW1h
dGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCkBAIC0wLDAgKzEsOSBAQAorWworewor
ICAgICJkb21haW4iOiAiRG9tYWluIiwKKyAgICAiZGVidWdnYWJsZVR5cGVzIjogWyJwYWdlIl0s
CisgICAgInRhcmdldFR5cGVzIjogWyJwYWdlIiwgIndvcmtlciJdLAorICAgICJjb21tYW5kcyI6
IFt7Im5hbWUiOiAiQ29tbWFuZCJ9XSwKKyAgICAiZXZlbnRzIjogW3sibmFtZSI6ICJFdmVudCJ9
XQorfQorXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2NvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24gYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvY29tbWFuZHMtd2l0aC1hc3luYy1h
dHRyaWJ1dGUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMTI2MmU4ODlmYTViZDBiNGFlNTdlNWY3ZjFiYWM2
Y2ZmM2ZlOTM5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2NvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KQEAg
LTAsMCArMSwxMDkgQEAKK3sKKyAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKKyAgICAidHlwZXMi
OiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJEYXRhYmFzZUlkIiwKKyAgICAgICAg
ICAgICJ0eXBlIjogImludGVnZXIiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1
ZSBpZGVudGlmaWVyIG9mIERhdGFiYXNlIG9iamVjdC4iCisgICAgICAgIH0sCisgICAgICAgIHsK
KyAgICAgICAgICAgICJpZCI6ICJQcmltYXJ5Q29sb3JzIiwKKyAgICAgICAgICAgICJ0eXBlIjog
InN0cmluZyIsCisgICAgICAgICAgICAiZW51bSI6IFsicmVkIiwgImdyZWVuIiwgImJsdWUiXQor
ICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiQ29sb3JMaXN0IiwKKyAg
ICAgICAgICAgICJ0eXBlIjogImFycmF5IiwKKyAgICAgICAgICAgICJpdGVtcyI6IHsgIiRyZWYi
OiAiUHJpbWFyeUNvbG9ycyIgfQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAi
aWQiOiAiRXJyb3IiLAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAg
ICJkZXNjcmlwdGlvbiI6ICJEYXRhYmFzZSBlcnJvci4iLAorICAgICAgICAgICAgInByb3BlcnRp
ZXMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJtZXNzYWdlIiwgInR5cGUiOiAic3Ry
aW5nIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIG1lc3NhZ2UuIiB9LAorICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAiY29kZSIsICJ0eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAiRXJy
b3IgY29kZS4iIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgImNvbW1h
bmRzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJleGVjdXRlU1FMU3luY09w
dGlvbmFsUmV0dXJuVmFsdWVzIiwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiIH0s
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJxdWVyeSIsICJ0eXBlIjogInN0cmluZyIgfQor
ICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJyZXR1cm5zIjogWworICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJvcHRpb25hbCI6IHRy
dWUsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCisgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIsICJv
cHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0
eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJu
YW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIs
ICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNxbEVycm9y
IiwgIiRyZWYiOiAiRXJyb3IiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlDb2xvcnMiLCAib3B0aW9u
YWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJhbHRlcm5hdGVDb2xvcnMi
LCAiJHJlZiI6ICJDb2xvckxpc3QiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbImN5
YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSwgIm9wdGlvbmFsIjogdHJ1ZSB9Cisg
ICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjog
ImV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzIiwKKyAgICAgICAgICAgICJhc3lu
YyI6IHRydWUsCisgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAgICB7
ICJuYW1lIjogImRhdGFiYXNlSWQiLCAiJHJlZiI6ICJEYXRhYmFzZUlkIiB9LAorICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAicXVlcnkiLCAidHlwZSI6ICJzdHJpbmciIH0KKyAgICAgICAgICAg
IF0sCisgICAgICAgICAgICAicmV0dXJucyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjog
ImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAib3B0aW9uYWwiOiB0cnVlLCAiaXRlbXMi
OiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90
ZXMiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiLCAib3B0aW9uYWwiOiB0
cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmpl
Y3QiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXls
b2FkIiwgInR5cGUiOiAiYW55IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiLCAib3B0aW9uYWwi
OiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjog
IkVycm9yIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
c2NyZWVuQ29sb3IiLCAiJHJlZiI6ICJQcmltYXJ5Q29sb3JzIiwgIm9wdGlvbmFsIjogdHJ1ZSB9
LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwgIiRyZWYiOiAi
Q29sb3JMaXN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJjeWFuIiwgIm1hZ2Vu
dGEiLCAieWVsbG93IiwgImJsYWNrIl0sICJvcHRpb25hbCI6IHRydWUgfQorICAgICAgICAgICAg
XQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJleGVjdXRlU1FM
U3luYyIsCisgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAgICB7ICJu
YW1lIjogImRhdGFiYXNlSWQiLCAiJHJlZiI6ICJEYXRhYmFzZUlkIiB9LAorICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAicXVlcnkiLCAidHlwZSI6ICJzdHJpbmciIH0KKyAgICAgICAgICAgIF0s
CisgICAgICAgICAgICAicmV0dXJucyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNv
bHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIg
fSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmci
IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1i
ZXIiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmpl
Y3QiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55
IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRh
dGFiYXNlSWQiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVm
IjogIkVycm9yIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYWx0ZXJuYXRlQ29sb3Jz
IiwgIiRyZWYiOiAiQ29sb3JMaXN0IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2Ny
ZWVuQ29sb3IiLCAiJHJlZiI6ICJQcmltYXJ5Q29sb3JzIiB9LAorICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJjeWFuIiwg
Im1hZ2VudGEiLCAieWVsbG93IiwgImJsYWNrIl0gfQorICAgICAgICAgICAgXQorICAgICAgICB9
LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJleGVjdXRlU1FMQXN5bmMiLAorICAg
ICAgICAgICAgImFzeW5jIjogdHJ1ZSwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQi
IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJxdWVyeSIsICJ0eXBlIjogInN0cmluZyIg
fQorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJyZXR1cm5zIjogWworICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsg
InR5cGUiOiAic3RyaW5nIiB9IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIs
ICJ0eXBlIjogInN0cmluZyIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFt
cCIsICJ0eXBlIjogIm51bWJlciIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVl
cyIsICJ0eXBlIjogIm9iamVjdCIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxv
YWQiLCAidHlwZSI6ICJhbnkiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFz
ZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjog
InNxbEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJzY3JlZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlDb2xvcnMiIH0sCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJhbHRlcm5hdGVDb2xvcnMiLCAiJHJlZiI6ICJDb2xvckxpc3QiIH0sCisg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwg
ImVudW0iOiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSB9CisgICAgICAg
ICAgICBdCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxs
LXJldHVybi1wYXJhbWV0ZXJzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0
ZXJzLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMzYxZDU3ZDgyMGRlOTE2YTczY2JkZDk4MzgzZDEyNjQyMDM5
OGY0YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRl
cnMuanNvbgpAQCAtMCwwICsxLDg1IEBACit7CisgICAgImRvbWFpbiI6ICJEYXRhYmFzZSIsCisg
ICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiRGF0YWJhc2VJZCIs
CisgICAgICAgICAgICAidHlwZSI6ICJpbnRlZ2VyIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlv
biI6ICJVbmlxdWUgaWRlbnRpZmllciBvZiBEYXRhYmFzZSBvYmplY3QuIgorICAgICAgICB9LAor
ICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiUHJpbWFyeUNvbG9ycyIsCisgICAgICAgICAg
ICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgImVudW0iOiBbInJlZCIsICJncmVlbiIs
ICJibHVlIl0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkNvbG9y
TGlzdCIsCisgICAgICAgICAgICAidHlwZSI6ICJhcnJheSIsCisgICAgICAgICAgICAiaXRlbXMi
OiB7ICIkcmVmIjogIlByaW1hcnlDb2xvcnMiIH0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAg
ICAgICAgICAgImlkIjogIkVycm9yIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisg
ICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRGF0YWJhc2UgZXJyb3IuIiwKKyAgICAgICAgICAg
ICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibWVzc2FnZSIsICJ0
eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBtZXNzYWdlLiIgfSwKKyAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogImNvZGUiLCAidHlwZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0
aW9uIjogIkVycm9yIGNvZGUuIiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAor
ICAgICJjb21tYW5kcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiZXhlY3V0
ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyIsCisgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAi
b3B0aW9uYWwiOiB0cnVlLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAorICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwi
OiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6
ICJudW1iZXIiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiwgIm9wdGlvbmFsIjog
dHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjog
IkRhdGFiYXNlSWQiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVycm9yIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6ICJQcmltYXJ5Q29s
b3JzIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYWx0
ZXJuYXRlQ29sb3JzIiwgIiRyZWYiOiAiQ29sb3JMaXN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAor
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmluZyIs
ICJlbnVtIjogWyJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93IiwgImJsYWNrIl0sICJvcHRpb25h
bCI6IHRydWUgfQorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJyZXR1cm5zIjogWworICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJv
cHRpb25hbCI6IHRydWUsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6
IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjog
Im51bWJlciIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjog
InZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiLCAib3B0aW9uYWwiOiB0
cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAi
RGF0YWJhc2VJZCIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogInNxbEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlDb2xv
cnMiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJhbHRl
cm5hdGVDb2xvcnMiLCAiJHJlZiI6ICJDb2xvckxpc3QiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwg
ImVudW0iOiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSwgIm9wdGlvbmFs
IjogdHJ1ZSB9CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAg
ICAgICJuYW1lIjogImV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyIsCisgICAgICAgICAgICAi
cGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwg
InR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAorICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciIH0sCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiIH0sCisgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiIH0sCisgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiB9LAorICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiIH0s
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVycm9yIiB9
LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6ICJQcmlt
YXJ5Q29sb3JzIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYWx0ZXJuYXRlQ29sb3Jz
IiwgIiRyZWYiOiAiQ29sb3JMaXN0IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJp
bnRDb2xvciIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJjeWFuIiwgIm1hZ2VudGEiLCAi
eWVsbG93IiwgImJsYWNrIl0gfQorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJyZXR1cm5z
IjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJh
cnJheSIsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIgfSwKKyAgICAgICAgICAgICAgICB7
ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIgfSwKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIgfSwKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiIH0sCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIgfSwKKyAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiIH0sCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlDb2xvcnMi
IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJhbHRlcm5hdGVDb2xvcnMiLCAiJHJlZiI6
ICJDb2xvckxpc3QiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcmludENvbG9yIiwg
InR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciLCAi
YmxhY2siXSB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZGVmaW5pdGlv
bnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjliZTQ2YTE3YWQxMjlmNmVjMGQyMWIxOTljNDg1NmY0MDkzNzY3NjcKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgpAQCAtMCwwICsxLDI4IEBACit7Cisg
ICAgImRvbWFpbiI6ICJOZXR3b3JrIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAg
ICAgICAgICJpZCI6ICJOZXR3b3JrRXJyb3IiLAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0
IiwKKyAgICAgICAgICAgICJjb25kaXRpb24iOiAiUExBVEZPUk0oTUFDKSIsCisgICAgICAgICAg
ICAicHJvcGVydGllcyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm1lc3NhZ2UiLCAi
dHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgbWVzc2FnZS4iIH0sCisgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJjb2RlIiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlw
dGlvbiI6ICJFcnJvciBjb2RlLiIgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwK
KyAgICAiY29tbWFuZHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImxvYWRS
ZXNvdXJjZSIsCisgICAgICAgICAgICAiY29uZGl0aW9uIjogIlBMQVRGT1JNKE1BQykiLAorICAg
ICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRleHQg
b2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4gY2hl
Y2tzLiIKKyAgICAgICAgfQorICAgIF0sCisgICAgImV2ZW50cyI6IFsKKyAgICAgICAgeworICAg
ICAgICAgICAgIm5hbWUiOiAicmVzb3VyY2VMb2FkZWQiLAorICAgICAgICAgICAgImNvbmRpdGlv
biI6ICJQTEFURk9STShNQUMpIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJBIHJlc291
cmNlIHdhcyBsb2FkZWQuIgorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2RvbWFpbi1kZWJ1Z2dhYmxl
VHlwZXMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9kb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWZlYjBjOWEyN2U2ZDAz
ZDM5Y2FhYmFlMGUzOTY2NDc3YTA0ZDEwYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9kb21haW4tZGVidWdnYWJsZVR5cGVz
Lmpzb24KQEAgLTAsMCArMSw4IEBACitbCit7CisgICAgImRvbWFpbiI6ICJEb21haW4iLAorICAg
ICJkZWJ1Z2dhYmxlVHlwZXMiOiBbIndlYi1wYWdlIl0sCisgICAgImNvbW1hbmRzIjogW3sibmFt
ZSI6ICJDb21tYW5kIn1dLAorICAgICJldmVudHMiOiBbeyJuYW1lIjogIkV2ZW50In1dCit9Citd
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24g
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZG9tYWluLXRh
cmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZjYyZmIzOGJhNzg1YjFlYjQ0Y2ExODg4NmUwNmQ3OTIxYjlkMDkyYwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9kb21haW4t
dGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgpAQCAtMCwwICsx
LDggQEAKK1sKK3sKKyAgICAiZG9tYWluIjogIkRvbWFpbiIsCisgICAgImRlYnVnZ2FibGVUeXBl
cyI6IFsicGFnZSJdLAorICAgICJjb21tYW5kcyI6IFt7Im5hbWUiOiAiQ29tbWFuZCIsICJ0YXJn
ZXRUeXBlcyI6IFsicGFnZSIsICJ3b3JrZXIiXX1dLAorICAgICJldmVudHMiOiBbeyJuYW1lIjog
IkV2ZW50In1dCit9CitdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZG9tYWluLXRhcmdldFR5cGVzLmpzb24gYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZG9tYWluLXRhcmdldFR5cGVzLmpzb24K
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNmE2ZTQwZDYwYWRjMzU3ZjA2NGZjYTE5NDc5N2NjYmFjYjBkN2U3NAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9kb21haW4tdGFyZ2V0VHlwZXMuanNvbgpAQCAtMCwwICsxLDggQEAKK1sKK3sKKyAgICAi
ZG9tYWluIjogIkRvbWFpbiIsCisgICAgInRhcmdldFR5cGVzIjogWyJwYWdlIl0sCisgICAgImNv
bW1hbmRzIjogW3sibmFtZSI6ICJDb21tYW5kIiwgInRhcmdldFR5cGVzIjogWyJwYWdlIl19XSwK
KyAgICAiZXZlbnRzIjogW3sibmFtZSI6ICJFdmVudCIsICJ0YXJnZXRUeXBlcyI6IFsicGFnZSJd
fV0KK30KK10KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24gYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZG9tYWlucy13aXRoLXZh
cnlpbmctY29tbWFuZC1zaXplcy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk0YThlY2IxNzZkM2I4ZWM5YmY5
NjY3NmU2M2NlYTA1MTQ2NmI4NjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFu
ZC1zaXplcy5qc29uCkBAIC0wLDAgKzEsNTQgQEAKK1sKK3sKKyAgICAiZG9tYWluIjogIk5ldHdv
cmsxIiwKKyAgICAiY29tbWFuZHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjog
ImxvYWRSZXNvdXJjZTEiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVz
b3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0
aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKKyAgICAgICAgfQorICAgIF0KK30sCit7CisgICAg
ImRvbWFpbiI6ICJOZXR3b3JrMiIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAg
ICAgICAiaWQiOiAiTG9hZGVySWQiLAorICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAg
ICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgbG9hZGVyIGlkZW50aWZpZXIuIgorICAg
ICAgICB9CisgICAgXQorfSwKK3sKKyAgICAiZG9tYWluIjogIk5ldHdvcmszIiwKKyAgICAiY29t
bWFuZHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJjZTEi
LAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNv
bnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmln
aW4gY2hlY2tzLiIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAi
bG9hZFJlc291cmNlMiIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9hZHMgYSByZXNv
dXJjZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFnZSB3aXRo
b3V0IGNyb3NzIG9yaWdpbiBjaGVja3MuIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAg
ICAgICAibmFtZSI6ICJsb2FkUmVzb3VyY2UzIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6
ICJMb2FkcyBhIHJlc291cmNlIGluIHRoZSBjb250ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGluc3Bl
Y3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNoZWNrcy4iCisgICAgICAgIH0sCisgICAg
ICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJjZTQiLAorICAgICAgICAgICAg
ImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFt
ZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKKyAg
ICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAibG9hZFJlc291cmNlNSIs
CisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9hZHMgYSByZXNvdXJjZSBpbiB0aGUgY29u
dGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFnZSB3aXRob3V0IGNyb3NzIG9yaWdp
biBjaGVja3MuIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJs
b2FkUmVzb3VyY2U2IiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBhIHJlc291
cmNlIGluIHRoZSBjb250ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGluc3BlY3RlZCBwYWdlIHdpdGhv
dXQgY3Jvc3Mgb3JpZ2luIGNoZWNrcy4iCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAg
ICAgICJuYW1lIjogImxvYWRSZXNvdXJjZTciLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjog
IkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVj
dGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKKyAgICAgICAgfQorICAgIF0K
K30KK10KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9lbnVtLXZhbHVlcy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2VudW0tdmFsdWVzLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2RhZDYxZGY3Yzlm
OWM3NmU2OTI4OTdjM2RmZTBiMDgyM2Y5MGU0ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9lbnVtLXZhbHVlcy5qc29uCkBA
IC0wLDAgKzEsMzUgQEAKK3siZG9tYWlucyI6WworeworICAgICJkb21haW4iOiAiVHlwZURvbWFp
biIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiVHlwZURv
bWFpbkVudW0iLAorICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICJl
bnVtIjogWyJzaGFyZWQiLCAicmVkIiwgImdyZWVuIiwgImJsdWUiXQorICAgICAgICB9CisgICAg
XQorfSwKK3sKKyAgICAiZG9tYWluIjogIkNvbW1hbmREb21haW4iLAorICAgICJjb21tYW5kcyI6
IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiY29tbWFuZFdpdGhFbnVtUmV0dXJu
VmFsdWUiLAorICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbXSwKKyAgICAgICAgICAgICJyZXR1
cm5zIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicmV0dXJuVmFsdWUiLCAidHlwZSI6
ICJzdHJpbmciLCAiZW51bSI6IFsic2hhcmVkIiwgImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ci
XSB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdCit9LAoreworICAgICJkb21haW4i
OiAiRXZlbnREb21haW4iLAorICAgICJldmVudHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAg
ICJuYW1lIjogImV2ZW50V2l0aEVudW1QYXJhbWV0ZXIiLAorICAgICAgICAgICAgInBhcmFtZXRl
cnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXJhbWV0ZXIiLCAidHlwZSI6ICJz
dHJpbmciLCAiZW51bSI6IFsic2hhcmVkIiwgImJsYWNrIiwgIndoaXRlIl0gfQorICAgICAgICAg
ICAgXQorICAgICAgICB9CisgICAgXQorfQorXX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9ldmVudC10YXJnZXRUeXBlLW1hdGNoaW5n
LWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVn
Z2FibGVUeXBlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGRmZWQ0MWVkMjFmZjIyNDk2MDQ4ZjEyNDkzYTZh
ZjVhMzBlNzczNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9ldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1
Z2dhYmxlVHlwZS5qc29uCkBAIC0wLDAgKzEsOCBAQAorWworeworICAgICJkb21haW4iOiAiRG9t
YWluIiwKKyAgICAiZGVidWdnYWJsZVR5cGVzIjogWyJwYWdlIl0sCisgICAgImNvbW1hbmRzIjog
W3sibmFtZSI6ICJDb21tYW5kIn1dLAorICAgICJldmVudHMiOiBbeyJuYW1lIjogIkV2ZW50Iiwg
InRhcmdldFR5cGVzIjogWyJwYWdlIiwgIndvcmtlciJdfV0KK30KK10KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9ldmVudHMtd2l0aC1v
cHRpb25hbC1wYXJhbWV0ZXJzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmNhYmJmMTBiODM2ZjlmZjdjZDk5MjVkYjRkNmI0MWM1ZGZhODdiNDgKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCkBAIC0wLDAgKzEsNTkgQEAKK3sK
KyAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAg
ICAgICAgICAgICJpZCI6ICJEYXRhYmFzZUlkIiwKKyAgICAgICAgICAgICJ0eXBlIjogInN0cmlu
ZyIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIGlkZW50aWZpZXIgb2YgRGF0
YWJhc2Ugb2JqZWN0LiIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjog
IlByaW1hcnlDb2xvcnMiLAorICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAg
ICAgICJ2YWx1ZXMiOiBbInJlZCIsICJncmVlbiIsICJibHVlIl0KKyAgICAgICAgfSwKKyAgICAg
ICAgeworICAgICAgICAgICAgImlkIjogIkNvbG9yTGlzdCIsCisgICAgICAgICAgICAidHlwZSI6
ICJhcnJheSIsCisgICAgICAgICAgICAiaXRlbXMiOiB7ICIkcmVmIjogIlByaW1hcnlDb2xvcnMi
IH0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkVycm9yIiwKKyAg
ICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAi
RGF0YWJhc2UgZXJyb3IuIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAibWVzc2FnZSIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlv
biI6ICJFcnJvciBtZXNzYWdlLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvZGUi
LCAidHlwZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIGNvZGUuIiB9CisgICAg
ICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJldmVudHMiOiBbCisgICAgICAgIHsK
KyAgICAgICAgICAgICJuYW1lIjogImRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMiLAorICAg
ICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1
bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIm9wdGlvbmFsIjogdHJ1ZSwgIml0ZW1zIjogeyAi
dHlwZSI6ICJzdHJpbmciIH0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vdGVzIiwg
InR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFsIjogdHJ1ZSB9
LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0Iiwg
Im9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5bG9hZCIs
ICJ0eXBlIjogImFueSIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJu
YW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlD
b2xvcnMiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJh
bHRlcm5hdGVDb2xvcnMiLCAiJHJlZiI6ICJDb2xvckxpc3QiLCAib3B0aW9uYWwiOiB0cnVlIH0s
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5n
IiwgInZhbHVlcyI6IFsiY3lhbiIsICJtYWdlbnRhIiwgInllbGxvdyIsICJibGFjayJdLCAib3B0
aW9uYWwiOiB0cnVlIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAg
ICAgICAgICAgIm5hbWUiOiAiZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIiwKKyAgICAg
ICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1u
TmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0s
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIgfSwK
KyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIg
fSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIg
fSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiIH0s
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVycm9yIiB9
LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6ICJQcmlt
YXJ5Q29sb3JzIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYWx0ZXJuYXRlQ29sb3Jz
IiwgIiRyZWYiOiAiQ29sb3JMaXN0IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJp
bnRDb2xvciIsICJ0eXBlIjogInN0cmluZyIsICJ2YWx1ZXMiOiBbImN5YW4iLCAibWFnZW50YSIs
ICJ5ZWxsb3ciLCAiYmxhY2siXSB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdCit9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZXhwZWN0ZWQvY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxl
VHlwZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVn
Z2FibGVUeXBlLmpzb24tcmVzdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAxNjViYTU0NWZlM2FmMGI4NzY3ZWMy
NjQ4OWZjYzY1ZDgwNzE4YzIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZC10YXJnZXRUeXBlLW1h
dGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJlc3VsdApAQCAtMCwwICsxLDEwMTEg
QEAKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMuaW4KKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmct
ZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisvLyBEb21haW4KK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIkRv
bWFpbiIsIFsicGFnZSIsICJ3b3JrZXIiXSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29t
bWFuZCgiRG9tYWluLkNvbW1hbmQiLCBudWxsLCBbXSwgW10pOworSW5zcGVjdG9yQmFja2VuZC5y
ZWdpc3RlckV2ZW50KCJEb21haW4uRXZlbnQiLCBudWxsLCBbXSk7CitJbnNwZWN0b3JCYWNrZW5k
LnJlZ2lzdGVyRG9tYWluRGlzcGF0Y2hlciA9IEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEaXNw
YXRjaGVyLmJpbmQoSW5zcGVjdG9yQmFja2VuZCwgIkRvbWFpbiIpOworSW5zcGVjdG9yQmFja2Vu
ZC5hY3RpdmF0ZURvbWFpbigiRG9tYWluIiwgWyJwYWdlIl0pOworIyMjIEVuZCBGaWxlOiBJbnNw
ZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMuaW4KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5h
dGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbiBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisj
aWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJv
bnRlbmRSb3V0ZXIuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRj
aGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERp
c3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9CisgICAgQmFja2VuZERpc3BhdGNoZXIq
IGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5n
ZXQoKTsgfQorcHJpdmF0ZToKKyAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2Vu
ZERpc3BhdGNoZXI7Cit9OworCisKK2NsYXNzIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRj
aGVyIDogcHVibGljIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2
aXJ0dWFsIH5BbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQorICAgIHZpcnR1
YWwgdm9pZCBDb21tYW5kKGxvbmcgY2FsbElkKSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENI
RVJTKQorIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKwor
IyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVi
dWdnYWJsZVR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0eXBl
ZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQorY2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXI7Cisj
ZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKK2NsYXNz
IERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2
b2lkIENvbW1hbmQoRXJyb3JTdHJpbmcmKSA9IDA7Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+
RG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7Cit9OworCitjbGFzcyBEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hl
ciB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gY3Jl
YXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7
CisgICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2Qs
IFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkgZmluYWw7Citwcml2YXRlOgorICAgIHZvaWQg
Q29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJz
KTsKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK3B1YmxpYzoK
KyAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlRG9tYWluQmFja2VuZERp
c3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0g
YWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQorcHJpdmF0ZToKKyAgICBBbHRlcm5hdGVEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlciogbV9hbHRlcm5hdGVEaXNwYXRjaGVyIHsgbnVsbHB0ciB9OworI2VuZGlm
IC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorcHJpdmF0ZToKKyAg
ICBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYsIERvbWFpbkJhY2tl
bmREaXNwYXRjaGVySGFuZGxlciopOworICAgIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxl
ciogbV9hZ2VudCB7IG51bGxwdHIgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgor
IyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6
IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5q
c29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3Rm
L0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKKyNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgi
CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKK25h
bWVzcGFjZSBJbnNwZWN0b3IgeworCitEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5E
b21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KKworUmVmPERvbWFpbkJhY2tlbmRE
aXNwYXRjaGVyPiBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEJhY2tlbmREaXNwYXRj
aGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBh
Z2VudCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEb21haW5CYWNrZW5kRGlzcGF0Y2hl
cihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKK30KKworRG9tYWluQmFja2VuZERpc3BhdGNo
ZXI6OkRvbWFpbkJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlz
cGF0Y2hlciwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKKyAgICA6IFN1
cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQorICAgICwgbV9h
Z2VudChhZ2VudCkKK3sKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNo
ZXJGb3JEb21haW4oIkRvbWFpbiJfcywgdGhpcyk7Cit9CisKK3ZvaWQgRG9tYWluQmFja2VuZERp
c3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwg
UmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQoreworICAgIFJlZjxEb21haW5CYWNrZW5kRGlz
cGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CisKKyAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJh
bWV0ZXJzOworICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsK
KworICAgIGlmIChtZXRob2QgPT0gIkNvbW1hbmQiKSB7CisgICAgICAgIENvbW1hbmQocmVxdWVz
dElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNo
ZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3Vu
ZCIpOworfQorCit2b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVx
dWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQoreworI2lmIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQorICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsK
KyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5Db21tYW5kKHJlcXVlc3RJZCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCisKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWY8SlNPTjo6T2Jq
ZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYWdlbnQtPkNvbW1h
bmQoZXJyb3IpOworCisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKKyAgICAgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxz
ZSk7CisgICAgZWxzZQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2Nv
bEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0QmFja2Vu
ZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hl
cnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmQtdGFyZ2V0VHlw
ZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFByb3Rv
Y29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBGcm9u
dGVuZFJvdXRlcjsKKworY2xhc3MgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVyIHsKKyAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBEb21haW5Gcm9udGVuZERpc3BhdGNo
ZXIoRnJvbnRlbmRSb3V0ZXImIGZyb250ZW5kUm91dGVyKSA6IG1fZnJvbnRlbmRSb3V0ZXIoZnJv
bnRlbmRSb3V0ZXIpIHsgfQorICAgIHZvaWQgRXZlbnQoKTsKK3ByaXZhdGU6CisgICAgRnJvbnRl
bmRSb3V0ZXImIG1fZnJvbnRlbmRSb3V0ZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4g
RmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxl
VHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCisKKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3ZvaWQg
RG9tYWluRnJvbnRlbmREaXNwYXRjaGVyOjpFdmVudCgpCit7CisgICAgUmVmPEpTT046Ok9iamVj
dD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGpzb25NZXNzYWdl
LT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7CisKKyAgICBtX2Zyb250
ZW5kUm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworfQorCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNw
YXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGlu
Zy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yUHJvdG9jb2xUeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25h
bWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworCisKKwor
CisKKworCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKworIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5q
c29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKworI2luY2x1ZGUgPHd0
Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNl
IEluc3BlY3RvciB7CisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKworCit9IC8vIG5hbWVzcGFj
ZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFj
a2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21t
YW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8d3Rm
L1JldGFpblB0ci5oPgorCitAcHJvdG9jb2wgVGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxl
cjsKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworY2xhc3MgT2JqQ0luc3BlY3RvckRvbWFp
bkJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZURvbWFpbkJhY2tlbmRE
aXNwYXRjaGVyIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBP
YmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sRG9tYWlu
RG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQorICAgIHZv
aWQgQ29tbWFuZChsb25nIHJlcXVlc3RJZCkgZmluYWw7Citwcml2YXRlOgorICAgIFJldGFpblB0
cjxpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKK307CisK
K30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJh
Y2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5k
RGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5k
LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBv
cnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSAiVGVzdFBy
b3RvY29sSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMu
aCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsK
Kwordm9pZCBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9u
ZyByZXF1ZXN0SWQpCit7CisgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6
QHNlbGVjdG9yKENvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsK
KyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0
SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uQ29tbWFuZCcg
d2FzIG5vdCBmb3VuZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5k
aW5nRXJyb3JzKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZCBlcnJvckNhbGxi
YWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJF
cnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vy
cm9ycygpOworICAgIH07CisKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeeworICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgfTsKKworICAgIFttX2RlbGVnYXRlIENvbW1hbmRXaXRo
RXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJh
Y2tdOworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbENvbmZpZ3VyYXRpb24uaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNv
bW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbiBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rv
ci9UZXN0UHJvdG9jb2wuaD4KKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQi
KSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAorQHBy
b3BlcnR5IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNldERvbWFpbkhhbmRsZXI6KSBpZDxU
ZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiBkb21haW5IYW5kbGVyOworQHByb3BlcnR5
IChub25hdG9taWMsIHJlYWRvbmx5KSBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3Bh
dGNoZXIgKmRvbWFpbkV2ZW50RGlzcGF0Y2hlcjsKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbi5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1h
bmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbiBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbENv
bmZpZ3VyYXRpb24uaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbXBv
cnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRD
b3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW1wb3J0IDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKwordXNpbmcgbmFt
ZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3Vy
YXRpb24KK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVy
OworICAgIGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IF9kb21haW5IYW5kbGVy
OworICAgIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqX2RvbWFpbkV2
ZW50RGlzcGF0Y2hlcjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjoo
QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCit7CisgICAgc2VsZiA9
IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAg
QVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKKyAgICBy
ZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgW19kb21haW5IYW5kbGVy
IHJlbGVhc2VdOworICAgIFtfZG9tYWluRXZlbnREaXNwYXRjaGVyIHJlbGVhc2VdOworICAgIFtz
dXBlciBkZWFsbG9jXTsKK30KKworLSAodm9pZClzZXREb21haW5IYW5kbGVyOihpZDxUZXN0UHJv
dG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiloYW5kbGVyCit7CisgICAgaWYgKGhhbmRsZXIgPT0g
X2RvbWFpbkhhbmRsZXIpCisgICAgICAgIHJldHVybjsKKworICAgIFtfZG9tYWluSGFuZGxlciBy
ZWxlYXNlXTsKKyAgICBfZG9tYWluSGFuZGxlciA9IFtoYW5kbGVyIHJldGFpbl07CisKKyAgICBh
dXRvIGFsdGVybmF0ZURpc3BhdGNoZXIgPSBtYWtlVW5pcXVlPE9iakNJbnNwZWN0b3JEb21haW5C
YWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7CisgICAgYXV0byBhbHRlcm5hdGVBZ2VudCA9IG1h
a2VVbmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8RG9tYWluQmFja2VuZERpc3BhdGNo
ZXIsIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyPj4oIkRvbWFpbiJfcywgKl9jb250
cm9sbGVyLCBXVEZNb3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIpKTsKKyAgICBfY29udHJvbGxlci0+
YXBwZW5kRXh0cmFBZ2VudChXVEZNb3ZlKGFsdGVybmF0ZUFnZW50KSk7Cit9CisKKy0gKGlkPFRl
c3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+KWRvbWFpbkhhbmRsZXIKK3sKKyAgICByZXR1
cm4gX2RvbWFpbkhhbmRsZXI7Cit9CisKKy0gKFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50
RGlzcGF0Y2hlciAqKWRvbWFpbkV2ZW50RGlzcGF0Y2hlcgoreworICAgIGlmICghX2RvbWFpbkV2
ZW50RGlzcGF0Y2hlcikKKyAgICAgICAgX2RvbWFpbkV2ZW50RGlzcGF0Y2hlciA9IFtbVGVzdFBy
b3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyIGFsbG9jXSBpbml0V2l0aENvbnRyb2xs
ZXI6X2NvbnRyb2xsZXJdOworICAgIHJldHVybiBfZG9tYWluRXZlbnREaXNwYXRjaGVyOworfQor
CitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisK
KyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRv
bWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgor
Cit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3Rv
Y29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyCit7CisgICAgQXVnbWVudGFibGVJbnNwZWN0
b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
Q29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCit7
CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVy
biBuaWw7CisgICAgQVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250cm9sbGVyID0gY29udHJv
bGxlcjsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClFdmVudAoreworICAgIGNvbnN0
IEZyb250ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29udHJvbGxlci0+ZnJvbnRlbmRSb3V0ZXIoKTsK
KworICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4uRXZl
bnQiX3MpOworICAgIHJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygp
KTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRj
aGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRl
YnVnZ2FibGVUeXBlLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKworI2ltcG9ydCA8V2ViSW5zcGVj
dG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgorCisKKworCisKKworCisKK0Bwcm90b2NvbCBU
ZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyIDxOU09iamVjdD4KK0BvcHRpb25hbAorLSAo
dm9pZClDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSll
cnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKSh2b2lkKSlzdWNjZXNzQ2FsbGJh
Y2s7CitAZW5kCisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGlu
dGVyZmFjZSBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgOiBOU09iamVj
dAorLSAodm9pZClFdmVudDsKK0BlbmQKKworCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJv
dG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+CisKKyMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmct
ZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2Nv
bEpTT05PYmplY3RQcml2YXRlLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJs
ZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK0Bp
bnRlcmZhY2UgVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyIChQcml2YXRl
KQorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooSW5zcGVjdG9yOjpBdWdtZW50
YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXI7CitAZW5kCisKKworIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNv
bW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbiBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2Nv
bC5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5o
PgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1U
eXBlPgorT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3Ry
aW5nJiB2YWx1ZSk7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1w
b3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJ
UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9y
OworCisKKworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMu
bW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1k
ZWJ1Z2dhYmxlVHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xK
U09OT2JqZWN0UHJpdmF0ZS5oPgorI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbXBvcnQg
PHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgt
YXN5bmMtYXR0cmlidXRlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRl
Lmpzb24tcmVzdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgyYzU5MDZjMTdiYTBhYjExNWI1YTFjM2ZkZWY1NDQz
MGI1Nzc0YjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUu
anNvbi1yZXN1bHQKQEAgLTAsMCArMSwxNzYwIEBACisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9y
QmFja2VuZENvbW1hbmRzLmpzLmluCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
Y29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKy8vIERhdGFiYXNlCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVy
RG9tYWluKCJEYXRhYmFzZSIsIG51bGwpOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0o
IkRhdGFiYXNlLlByaW1hcnlDb2xvcnMiLCB7UmVkOiAicmVkIiwgR3JlZW46ICJncmVlbiIsIEJs
dWU6ICJibHVlIn0pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIkRhdGFiYXNl
LmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMiLCBudWxsLCBbeyJuYW1lIjogImRh
dGFiYXNlSWQiLCAidHlwZSI6ICJudW1iZXIifSwgeyJuYW1lIjogInF1ZXJ5IiwgInR5cGUiOiAi
c3RyaW5nIn1dLCBbImNvbHVtbk5hbWVzIiwgIm5vdGVzIiwgInRpbWVzdGFtcCIsICJ2YWx1ZXMi
LCAicGF5bG9hZCIsICJkYXRhYmFzZUlkIiwgInNxbEVycm9yIiwgInNjcmVlbkNvbG9yIiwgImFs
dGVybmF0ZUNvbG9ycyIsICJwcmludENvbG9yIl0pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rl
ckNvbW1hbmQoIkRhdGFiYXNlLmV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzIiwg
bnVsbCwgW3sibmFtZSI6ICJkYXRhYmFzZUlkIiwgInR5cGUiOiAibnVtYmVyIn0sIHsibmFtZSI6
ICJxdWVyeSIsICJ0eXBlIjogInN0cmluZyJ9XSwgWyJjb2x1bW5OYW1lcyIsICJub3RlcyIsICJ0
aW1lc3RhbXAiLCAidmFsdWVzIiwgInBheWxvYWQiLCAiZGF0YWJhc2VJZCIsICJzcWxFcnJvciIs
ICJzY3JlZW5Db2xvciIsICJhbHRlcm5hdGVDb2xvcnMiLCAicHJpbnRDb2xvciJdKTsKK0luc3Bl
Y3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJEYXRhYmFzZS5leGVjdXRlU1FMU3luYyIsIG51
bGwsIFt7Im5hbWUiOiAiZGF0YWJhc2VJZCIsICJ0eXBlIjogIm51bWJlciJ9LCB7Im5hbWUiOiAi
cXVlcnkiLCAidHlwZSI6ICJzdHJpbmcifV0sIFsiY29sdW1uTmFtZXMiLCAibm90ZXMiLCAidGlt
ZXN0YW1wIiwgInZhbHVlcyIsICJwYXlsb2FkIiwgImRhdGFiYXNlSWQiLCAic3FsRXJyb3IiLCAi
YWx0ZXJuYXRlQ29sb3JzIiwgInNjcmVlbkNvbG9yIiwgInByaW50Q29sb3IiXSk7CitJbnNwZWN0
b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiRGF0YWJhc2UuZXhlY3V0ZVNRTEFzeW5jIiwgbnVs
bCwgW3sibmFtZSI6ICJkYXRhYmFzZUlkIiwgInR5cGUiOiAibnVtYmVyIn0sIHsibmFtZSI6ICJx
dWVyeSIsICJ0eXBlIjogInN0cmluZyJ9XSwgWyJjb2x1bW5OYW1lcyIsICJub3RlcyIsICJ0aW1l
c3RhbXAiLCAidmFsdWVzIiwgInBheWxvYWQiLCAiZGF0YWJhc2VJZCIsICJzcWxFcnJvciIsICJz
Y3JlZW5Db2xvciIsICJhbHRlcm5hdGVDb2xvcnMiLCAicHJpbnRDb2xvciJdKTsKK0luc3BlY3Rv
ckJhY2tlbmQucmVnaXN0ZXJEYXRhYmFzZURpc3BhdGNoZXIgPSBJbnNwZWN0b3JCYWNrZW5kLnJl
Z2lzdGVyRGlzcGF0Y2hlci5iaW5kKEluc3BlY3RvckJhY2tlbmQsICJEYXRhYmFzZSIpOworSW5z
cGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiRGF0YWJhc2UiLCBudWxsKTsKKyMjIyBFbmQg
RmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzLmluCisKKyMjIyBCZWdpbiBGaWxlOiBU
ZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUo
SU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bFR5cGVzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRl
ci5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERp
c3BhdGNoZXIgeworcHVibGljOgorICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRy
PEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9
IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KKyAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERp
c3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Citw
cml2YXRlOgorICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hl
cjsKK307CisKKworY2xhc3MgQWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciA6IHB1
YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+
QWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQorICAgIHZpcnR1YWwgdm9p
ZCBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgY2FsbElkLCBpbnQgaW5f
ZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIGNhbGxJZCwgaW50IGlu
X2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgZXhlY3V0ZVNRTFN5bmMobG9uZyBjYWxsSWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBT
dHJpbmcmIGluX3F1ZXJ5KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxBc3luYyhs
b25nIGNhbGxJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpID0g
MDsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5h
dGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNw
YXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0
aC1hc3luYy1hdHRyaWJ1dGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Igewor
Cit0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQorY2xhc3MgQWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlcjsKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
KworY2xhc3MgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgeworcHVibGljOgorICAg
IC8vIE5hbWVkIGFmdGVyIHBhcmFtZXRlciAncHJpbnRDb2xvcicgd2hpbGUgZ2VuZXJhdGluZyBj
b21tYW5kL2V2ZW50IGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMuCisgICAgZW51
bSBjbGFzcyBQcmludENvbG9yIHsKKyAgICAgICAgQ3lhbiA9IDMsCisgICAgICAgIE1hZ2VudGEg
PSA0LAorICAgICAgICBZZWxsb3cgPSA1LAorICAgICAgICBCbGFjayA9IDYsCisgICAgfTsgLy8g
ZW51bSBjbGFzcyBQcmludENvbG9yCisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxTeW5jT3B0
aW9uYWxSZXR1cm5WYWx1ZXMoRXJyb3JTdHJpbmcmLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3Qg
U3RyaW5nJiBpbl9xdWVyeSwgUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mIG9wdF9vdXRf
Y29sdW1uTmFtZXMsIE9wdGlvbmFsPFN0cmluZz4mIG9wdF9vdXRfbm90ZXMsIE9wdGlvbmFsPGRv
dWJsZT4mIG9wdF9vdXRfdGltZXN0YW1wLCBPcHRpb25hbDxKU09OOjpPYmplY3Q+JiBvcHRfb3V0
X3ZhbHVlcywgT3B0aW9uYWw8SlNPTjo6VmFsdWU+JiBvcHRfb3V0X3BheWxvYWQsIE9wdGlvbmFs
PGludD4mIG9wdF9vdXRfZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpFcnJvcj4mIG9wdF9vdXRfc3FsRXJyb3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpQcmltYXJ5Q29sb3JzKiBvcHRfb3V0X3NjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4mIG9wdF9vdXRfYWx0ZXJuYXRlQ29s
b3JzLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciogb3B0X291
dF9wcmludENvbG9yKSA9IDA7CisgICAgY2xhc3MgRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1
cm5WYWx1ZXNDYWxsYmFjayA6IHB1YmxpYyBCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNl
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIEV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFs
dWVzQ2FsbGJhY2soUmVmPEJhY2tlbmREaXNwYXRjaGVyPiYmLCBpbnQgaWQpOworICAgICAgICB2
b2lkIHNlbmRTdWNjZXNzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiYgY29sdW1uTmFt
ZXMsIE9wdGlvbmFsPFN0cmluZz4mIG5vdGVzLCBPcHRpb25hbDxkb3VibGU+JiB0aW1lc3RhbXAs
IE9wdGlvbmFsPEpTT046Ok9iamVjdD4mIHZhbHVlcywgT3B0aW9uYWw8SlNPTjo6VmFsdWU+JiBw
YXlsb2FkLCBPcHRpb25hbDxpbnQ+JiBkYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYmIHNxbEVycm9yLCBPcHRpb25hbDxJbnNwZWN0b3I6OlBy
b3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYmIGFsdGVybmF0ZUNvbG9ycywg
T3B0aW9uYWw8RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3I+IHBy
aW50Q29sb3IpOworICAgIH07CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxBc3luY09wdGlv
bmFsUmV0dXJuVmFsdWVzKGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5
LCBSZWY8RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjaz4mJiBjYWxs
YmFjaykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMU3luYyhFcnJvclN0cmluZyYs
IGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5LCBSZWZQdHI8SlNPTjo6
QXJyYXlPZjxTdHJpbmc+PiYgb3V0X2NvbHVtbk5hbWVzLCBTdHJpbmcqIG91dF9ub3RlcywgZG91
YmxlKiBvdXRfdGltZXN0YW1wLCBKU09OOjpPYmplY3QqIG91dF92YWx1ZXMsIEpTT046OlZhbHVl
KiBvdXRfcGF5bG9hZCwgaW50KiBvdXRfZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mIG91dF9zcWxFcnJvciwgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiBvdXRfYWx0ZXJuYXRlQ29sb3JzLCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyogb3V0X3NjcmVlbkNvbG9y
LCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciogb3V0X3ByaW50
Q29sb3IpID0gMDsKKyAgICBjbGFzcyBFeGVjdXRlU1FMQXN5bmNDYWxsYmFjayA6IHB1YmxpYyBC
YWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEV4
ZWN1dGVTUUxBc3luY0NhbGxiYWNrKFJlZjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiwgaW50IGlkKTsK
KyAgICAgICAgdm9pZCBzZW5kU3VjY2VzcyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYm
IGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBKU09O
OjpPYmplY3QgdmFsdWVzLCBKU09OOjpWYWx1ZSBwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mJiBzcWxFcnJvciwgSW5z
cGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYmIGFsdGVybmF0
ZUNvbG9ycywgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3IgcHJp
bnRDb2xvcik7CisgICAgfTsKKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTEFzeW5jKGludCBp
bl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5LCBSZWY8RXhlY3V0ZVNRTEFzeW5j
Q2FsbGJhY2s+JiYgY2FsbGJhY2spID0gMDsKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5EYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOworfTsKKworY2xhc3MgRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hl
ciB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBj
cmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxl
ciopOworICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0
aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOworcHJpdmF0ZToKKyAgICB2
b2lkIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0SWQsIFJl
ZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisgICAgdm9pZCBleGVjdXRlU1FMQXN5
bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBwYXJhbWV0ZXJzKTsKKyAgICB2b2lkIGV4ZWN1dGVTUUxTeW5jKGxvbmcgcmVxdWVzdElk
LCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOworICAgIHZvaWQgZXhlY3V0ZVNR
TEFzeW5jKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMp
OworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorcHVibGljOgor
ICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0Y2hlcihBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9
IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KK3ByaXZhdGU6CisgICAgQWx0ZXJuYXRlRGF0YWJhc2VC
YWNrZW5kRGlzcGF0Y2hlciogbV9hbHRlcm5hdGVEaXNwYXRjaGVyIHsgbnVsbHB0ciB9OworI2Vu
ZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorcHJpdmF0ZToK
KyAgICBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiwgRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICBEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVySGFuZGxlciogbV9hZ2VudCB7IG51bGxwdHIgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbiBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVz
Lmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
CisjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgorI2VuZGlmIC8v
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCituYW1lc3BhY2UgSW5z
cGVjdG9yIHsKKworRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5EYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQorCitSZWY8RGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlcj4gRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEJhY2tlbmREaXNwYXRjaGVy
JiBiYWNrZW5kRGlzcGF0Y2hlciwgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFn
ZW50KQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXIoYmFja2VuZERpc3BhdGNoZXIsIGFnZW50KSk7Cit9CisKK0RhdGFiYXNlQmFja2VuZERpc3Bh
dGNoZXI6OkRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tl
bmREaXNwYXRjaGVyLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCisg
ICAgOiBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKKyAg
ICAsIG1fYWdlbnQoYWdlbnQpCit7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJE
aXNwYXRjaGVyRm9yRG9tYWluKCJEYXRhYmFzZSJfcywgdGhpcyk7Cit9CisKK3ZvaWQgRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmlu
ZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCit7CisgICAgUmVmPERhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOworCisgICAgUmVmUHRyPEpTT046
Ok9iamVjdD4gcGFyYW1ldGVyczsKKyAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywg
cGFyYW1ldGVycyk7CisKKyAgICBpZiAobWV0aG9kID09ICJleGVjdXRlU1FMU3luY09wdGlvbmFs
UmV0dXJuVmFsdWVzIikgeworICAgICAgICBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFs
dWVzKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgaWYgKG1ldGhvZCA9PSAiZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1
ZXMiKSB7CisgICAgICAgIGV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKHJlcXVl
c3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
aWYgKG1ldGhvZCA9PSAiZXhlY3V0ZVNRTFN5bmMiKSB7CisgICAgICAgIGV4ZWN1dGVTUUxTeW5j
KHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgaWYgKG1ldGhvZCA9PSAiZXhlY3V0ZVNRTEFzeW5jIikgeworICAgICAgICBleGVjdXRl
U1FMQXN5bmMocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3Io
QmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RhdGFiYXNlLiIgKyBtZXRob2Qg
KyAiJyB3YXMgbm90IGZvdW5kIik7Cit9CisKK3ZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
cjo6ZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHJlcXVlc3RJZCwgUmVm
UHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKQoreworICAgIGludCBpbl9kYXRhYmFzZUlk
ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0SW50ZWdlcihwYXJhbWV0ZXJzLmdldCgpLCAiZGF0
YWJhc2VJZCJfcywgbnVsbHB0cik7CisgICAgU3RyaW5nIGluX3F1ZXJ5ID0gbV9iYWNrZW5kRGlz
cGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksICJxdWVyeSJfcywgbnVsbHB0cik7
CisgICAgaWYgKG1fYmFja2VuZERpc3BhdGNoZXItPmhhc1Byb3RvY29sRXJyb3JzKCkpIHsKKyAg
ICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlz
cGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnRGF0YWJh
c2UuZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcycgY2FuJ3QgYmUgcHJvY2Vzc2Vk
Il9zKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQorICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKKyAg
ICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5leGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJu
VmFsdWVzKHJlcXVlc3RJZCwgaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnkpOworICAgICAgICByZXR1
cm47CisgICAgfQorI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENI
RVJTKQorCisgICAgRXJyb3JTdHJpbmcgZXJyb3I7CisgICAgUmVmPEpTT046Ok9iamVjdD4gcmVz
dWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxT
dHJpbmc+PiBvdXRfY29sdW1uTmFtZXM7CisgICAgT3B0aW9uYWw8U3RyaW5nPiBvdXRfbm90ZXM7
CisgICAgT3B0aW9uYWw8ZG91YmxlPiBvdXRfdGltZXN0YW1wOworICAgIE9wdGlvbmFsPEpTT046
Ok9iamVjdD4gb3V0X3ZhbHVlczsKKyAgICBPcHRpb25hbDxKU09OOjpWYWx1ZT4gb3V0X3BheWxv
YWQ7CisgICAgT3B0aW9uYWw8aW50PiBvdXRfZGF0YWJhc2VJZDsKKyAgICBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBvdXRfc3FsRXJyb3I7CisgICAgSW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgb3V0X3NjcmVlbkNvbG9yOwor
ICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiBvdXRf
YWx0ZXJuYXRlQ29sb3JzOworICAgIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQ
cmludENvbG9yIG91dF9wcmludENvbG9yOworICAgIG1fYWdlbnQtPmV4ZWN1dGVTUUxTeW5jT3B0
aW9uYWxSZXR1cm5WYWx1ZXMoZXJyb3IsIGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5LCBvdXRfY29s
dW1uTmFtZXMsIG91dF9ub3Rlcywgb3V0X3RpbWVzdGFtcCwgb3V0X3ZhbHVlcywgb3V0X3BheWxv
YWQsIG91dF9kYXRhYmFzZUlkLCBvdXRfc3FsRXJyb3IsIG91dF9zY3JlZW5Db2xvciwgb3V0X2Fs
dGVybmF0ZUNvbG9ycywgb3V0X3ByaW50Q29sb3IpOworCisgICAgaWYgKCFlcnJvci5sZW5ndGgo
KSkgeworICAgICAgICBpZiAob3V0X2NvbHVtbk5hbWVzKQorICAgICAgICAgICAgcmVzdWx0LT5z
ZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIG91dF9jb2x1bW5OYW1lcyk7CisgICAgICAgIGlmIChv
dXRfbm90ZXMuaGFzVmFsdWUoKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJub3Rl
cyJfcywgKm91dF9ub3Rlcyk7CisgICAgICAgIGlmIChvdXRfdGltZXN0YW1wLmhhc1ZhbHVlKCkp
CisgICAgICAgICAgICByZXN1bHQtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCAqb3V0X3RpbWVz
dGFtcCk7CisgICAgICAgIGlmIChvdXRfdmFsdWVzLmhhc1ZhbHVlKCkpCisgICAgICAgICAgICBy
ZXN1bHQtPnNldE9iamVjdCgidmFsdWVzIl9zLCAqb3V0X3ZhbHVlcyk7CisgICAgICAgIGlmIChv
dXRfcGF5bG9hZC5oYXNWYWx1ZSgpKQorICAgICAgICAgICAgcmVzdWx0LT5zZXRWYWx1ZSgicGF5
bG9hZCJfcywgKm91dF9wYXlsb2FkKTsKKyAgICAgICAgaWYgKG91dF9kYXRhYmFzZUlkLmhhc1Zh
bHVlKCkpCisgICAgICAgICAgICByZXN1bHQtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsICpv
dXRfZGF0YWJhc2VJZCk7CisgICAgICAgIGlmIChvdXRfc3FsRXJyb3IpCisgICAgICAgICAgICBy
ZXN1bHQtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIG91dF9zcWxFcnJvcik7CisgICAgICAgIGlm
IChvdXRfc2NyZWVuQ29sb3IuaGFzVmFsdWUoKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0U3Ry
aW5nKCJzY3JlZW5Db2xvciJfcywgKm91dF9zY3JlZW5Db2xvcik7CisgICAgICAgIGlmIChvdXRf
YWx0ZXJuYXRlQ29sb3JzKQorICAgICAgICAgICAgcmVzdWx0LT5zZXRBcnJheSgiYWx0ZXJuYXRl
Q29sb3JzIl9zLCBvdXRfYWx0ZXJuYXRlQ29sb3JzKTsKKyAgICAgICAgaWYgKG91dF9wcmludENv
bG9yLmhhc1ZhbHVlKCkpCisgICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZygicHJpbnRDb2xv
ciJfcywgKm91dF9wcmludENvbG9yKTsKKyAgICB9CisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkK
KyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RG
TW92ZShyZXN1bHQpLCBmYWxzZSk7CisgICAgZWxzZQorICAgICAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwg
V1RGTW92ZShlcnJvcikpOworfQorCitEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6
RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjazo6RXhlY3V0ZVNRTEFz
eW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjayhSZWY8QmFja2VuZERpc3BhdGNoZXI+JiYg
YmFja2VuZERpc3BhdGNoZXIsIGludCBpZCkgOiBCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tC
YXNlKFdURk1vdmUoYmFja2VuZERpc3BhdGNoZXIpLCBpZCkgeyB9CisKK3ZvaWQgRGF0YWJhc2VC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFs
dWVzQ2FsbGJhY2s6OnNlbmRTdWNjZXNzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiYg
Y29sdW1uTmFtZXMsIE9wdGlvbmFsPFN0cmluZz4mIG5vdGVzLCBPcHRpb25hbDxkb3VibGU+JiB0
aW1lc3RhbXAsIE9wdGlvbmFsPEpTT046Ok9iamVjdD4mIHZhbHVlcywgT3B0aW9uYWw8SlNPTjo6
VmFsdWU+JiBwYXlsb2FkLCBPcHRpb25hbDxpbnQ+JiBkYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYmIHNxbEVycm9yLCBPcHRpb25hbDxJbnNw
ZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gc2NyZWVuQ29sb3IsIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYmIGFsdGVybmF0
ZUNvbG9ycywgT3B0aW9uYWw8RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50
Q29sb3I+IHByaW50Q29sb3IpCit7CisgICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2Ug
PSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGlmIChjb2x1bW5OYW1lcykKKyAgICAgICAg
anNvbk1lc3NhZ2UtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgY29sdW1uTmFtZXMpOworICAg
IGlmIChub3Rlcy5oYXNWYWx1ZSgpKQorICAgICAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJu
b3RlcyJfcywgKm5vdGVzKTsKKyAgICBpZiAodGltZXN0YW1wLmhhc1ZhbHVlKCkpCisgICAgICAg
IGpzb25NZXNzYWdlLT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgKnRpbWVzdGFtcCk7CisgICAg
aWYgKHZhbHVlcy5oYXNWYWx1ZSgpKQorICAgICAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJ2
YWx1ZXMiX3MsICp2YWx1ZXMpOworICAgIGlmIChwYXlsb2FkLmhhc1ZhbHVlKCkpCisgICAgICAg
IGpzb25NZXNzYWdlLT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgKnBheWxvYWQpOworICAgIGlmIChk
YXRhYmFzZUlkLmhhc1ZhbHVlKCkpCisgICAgICAgIGpzb25NZXNzYWdlLT5zZXRJbnRlZ2VyKCJk
YXRhYmFzZUlkIl9zLCAqZGF0YWJhc2VJZCk7CisgICAgaWYgKHNxbEVycm9yKQorICAgICAgICBq
c29uTWVzc2FnZS0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgc3FsRXJyb3IpOworICAgIGlmIChz
Y3JlZW5Db2xvci5oYXNWYWx1ZSgpKQorICAgICAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJz
Y3JlZW5Db2xvciJfcywgKnNjcmVlbkNvbG9yKTsKKyAgICBpZiAoYWx0ZXJuYXRlQ29sb3JzKQor
ICAgICAgICBqc29uTWVzc2FnZS0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgYWx0ZXJu
YXRlQ29sb3JzKTsKKyAgICBpZiAocHJpbnRDb2xvci5oYXNWYWx1ZSgpKQorICAgICAgICBqc29u
TWVzc2FnZS0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCAqcHJpbnRDb2xvcik7CisgICAgQ2Fs
bGJhY2tCYXNlOjpzZW5kU3VjY2VzcyhXVEZNb3ZlKGpzb25NZXNzYWdlKSk7Cit9CisKK3ZvaWQg
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycykK
K3sKKyAgICBpbnQgaW5fZGF0YWJhc2VJZCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEludGVn
ZXIocGFyYW1ldGVycy5nZXQoKSwgImRhdGFiYXNlSWQiX3MsIG51bGxwdHIpOworICAgIFN0cmlu
ZyBpbl9xdWVyeSA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwYXJhbWV0ZXJzLmdl
dCgpLCAicXVlcnkiX3MsIG51bGxwdHIpOworICAgIGlmIChtX2JhY2tlbmREaXNwYXRjaGVyLT5o
YXNQcm90b2NvbEVycm9ycygpKSB7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9y
dFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsICJTb21lIGFy
Z3VtZW50cyBvZiBtZXRob2QgJ0RhdGFiYXNlLmV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJu
VmFsdWVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiX3MpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisgICAgaWYgKG1f
YWx0ZXJuYXRlRGlzcGF0Y2hlcikgeworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmV4
ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKHJlcXVlc3RJZCwgaW5fZGF0YWJhc2VJ
ZCwgaW5fcXVlcnkpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmIC8vIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCisgICAgUmVmPERhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0Nh
bGxiYWNrPiBjYWxsYmFjayA9IGFkb3B0UmVmKCpuZXcgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2sobV9i
YWNrZW5kRGlzcGF0Y2hlci5jb3B5UmVmKCksIHJlcXVlc3RJZCkpOworICAgIG1fYWdlbnQtPmV4
ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5
LCBjYWxsYmFjay5jb3B5UmVmKCkpOworCit9CisKK3ZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlcjo6ZXhlY3V0ZVNRTFN5bmMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+
JiYgcGFyYW1ldGVycykKK3sKKyAgICBpbnQgaW5fZGF0YWJhc2VJZCA9IG1fYmFja2VuZERpc3Bh
dGNoZXItPmdldEludGVnZXIocGFyYW1ldGVycy5nZXQoKSwgImRhdGFiYXNlSWQiX3MsIG51bGxw
dHIpOworICAgIFN0cmluZyBpbl9xdWVyeSA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmlu
ZyhwYXJhbWV0ZXJzLmdldCgpLCAicXVlcnkiX3MsIG51bGxwdHIpOworICAgIGlmIChtX2JhY2tl
bmREaXNwYXRjaGVyLT5oYXNQcm90b2NvbEVycm9ycygpKSB7CisgICAgICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQ
YXJhbXMsICJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJ0RhdGFiYXNlLmV4ZWN1dGVTUUxTeW5j
JyBjYW4ndCBiZSBwcm9jZXNzZWQiX3MpOworICAgICAgICByZXR1cm47CisgICAgfQorCisjaWYg
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisgICAgaWYgKG1fYWx0ZXJu
YXRlRGlzcGF0Y2hlcikgeworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVT
UUxTeW5jKHJlcXVlc3RJZCwgaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnkpOworICAgICAgICByZXR1
cm47CisgICAgfQorI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENI
RVJTKQorCisgICAgRXJyb3JTdHJpbmcgZXJyb3I7CisgICAgUmVmPEpTT046Ok9iamVjdD4gcmVz
dWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxT
dHJpbmc+PiBvdXRfY29sdW1uTmFtZXM7CisgICAgU3RyaW5nIG91dF9ub3RlczsKKyAgICBkb3Vi
bGUgb3V0X3RpbWVzdGFtcDsKKyAgICBKU09OOjpPYmplY3Qgb3V0X3ZhbHVlczsKKyAgICBKU09O
OjpWYWx1ZSBvdXRfcGF5bG9hZDsKKyAgICBpbnQgb3V0X2RhdGFiYXNlSWQ7CisgICAgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gb3V0X3NxbEVycm9yOworICAg
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiBvdXRfYWx0
ZXJuYXRlQ29sb3JzOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5
Q29sb3JzIG91dF9zY3JlZW5Db2xvcjsKKyAgICBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlcjo6UHJpbnRDb2xvciBvdXRfcHJpbnRDb2xvcjsKKyAgICBtX2FnZW50LT5leGVjdXRlU1FM
U3luYyhlcnJvciwgaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnksIG91dF9jb2x1bW5OYW1lcywgJm91
dF9ub3RlcywgJm91dF90aW1lc3RhbXAsIG91dF92YWx1ZXMsICZvdXRfcGF5bG9hZCwgJm91dF9k
YXRhYmFzZUlkLCBvdXRfc3FsRXJyb3IsIG91dF9hbHRlcm5hdGVDb2xvcnMsICZvdXRfc2NyZWVu
Q29sb3IsICZvdXRfcHJpbnRDb2xvcik7CisKKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7Cisg
ICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBvdXRfY29sdW1uTmFtZXMp
OworICAgICAgICByZXN1bHQtPnNldFN0cmluZygibm90ZXMiX3MsIG91dF9ub3Rlcyk7CisgICAg
ICAgIHJlc3VsdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIG91dF90aW1lc3RhbXApOworICAg
ICAgICByZXN1bHQtPnNldE9iamVjdCgidmFsdWVzIl9zLCBvdXRfdmFsdWVzKTsKKyAgICAgICAg
cmVzdWx0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgb3V0X3BheWxvYWQpOworICAgICAgICByZXN1
bHQtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsIG91dF9kYXRhYmFzZUlkKTsKKyAgICAgICAg
cmVzdWx0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBvdXRfc3FsRXJyb3IpOworICAgICAgICBy
ZXN1bHQtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIG91dF9hbHRlcm5hdGVDb2xvcnMp
OworICAgICAgICByZXN1bHQtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShvdXRfc2NyZWVuQ29s
b3IpKTsKKyAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShvdXRfcHJpbnRD
b2xvcikpOworICAgIH0KKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQorICAgICAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZh
bHNlKTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3Rv
Y29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7
Cit9CisKK0RhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmND
YWxsYmFjazo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2soUmVmPEJhY2tlbmREaXNwYXRjaGVyPiYm
IGJhY2tlbmREaXNwYXRjaGVyLCBpbnQgaWQpIDogQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNr
QmFzZShXVEZNb3ZlKGJhY2tlbmREaXNwYXRjaGVyKSwgaWQpIHsgfQorCit2b2lkIERhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNDYWxsYmFjazo6c2VuZFN1
Y2Nlc3MoUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mJiBjb2x1bW5OYW1lcywgY29uc3Qg
U3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgSlNPTjo6T2JqZWN0IHZhbHVlcywgSlNP
Tjo6VmFsdWUgcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEYXRhYmFzZTo6RXJyb3I+JiYgc3FsRXJyb3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpQcmltYXJ5Q29sb3JzIHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4mJiBhbHRlcm5hdGVDb2xvcnMsIERhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yIHByaW50Q29sb3IpCit7CisgICAgUmVm
PEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAg
IGpzb25NZXNzYWdlLT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIGNvbHVtbk5hbWVzKTsKKyAg
ICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJub3RlcyJfcywgbm90ZXMpOworICAgIGpzb25NZXNz
YWdlLT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgdGltZXN0YW1wKTsKKyAgICBqc29uTWVzc2Fn
ZS0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIHZhbHVlcyk7CisgICAganNvbk1lc3NhZ2UtPnNldFZh
bHVlKCJwYXlsb2FkIl9zLCBwYXlsb2FkKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0SW50ZWdlcigi
ZGF0YWJhc2VJZCJfcywgZGF0YWJhc2VJZCk7CisgICAganNvbk1lc3NhZ2UtPnNldE9iamVjdCgi
c3FsRXJyb3IiX3MsIHNxbEVycm9yKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJzY3Jl
ZW5Db2xvciJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25z
dGFudFZhbHVlKHNjcmVlbkNvbG9yKSk7CisgICAganNvbk1lc3NhZ2UtPnNldEFycmF5KCJhbHRl
cm5hdGVDb2xvcnMiX3MsIGFsdGVybmF0ZUNvbG9ycyk7CisgICAganNvbk1lc3NhZ2UtPnNldFN0
cmluZygicHJpbnRDb2xvciJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6Omdl
dEVudW1Db25zdGFudFZhbHVlKHByaW50Q29sb3IpKTsKKyAgICBDYWxsYmFja0Jhc2U6OnNlbmRT
dWNjZXNzKFdURk1vdmUoanNvbk1lc3NhZ2UpKTsKK30KKwordm9pZCBEYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVyOjpleGVjdXRlU1FMQXN5bmMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpP
YmplY3Q+JiYgcGFyYW1ldGVycykKK3sKKyAgICBpbnQgaW5fZGF0YWJhc2VJZCA9IG1fYmFja2Vu
ZERpc3BhdGNoZXItPmdldEludGVnZXIocGFyYW1ldGVycy5nZXQoKSwgImRhdGFiYXNlSWQiX3Ms
IG51bGxwdHIpOworICAgIFN0cmluZyBpbl9xdWVyeSA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdl
dFN0cmluZyhwYXJhbWV0ZXJzLmdldCgpLCAicXVlcnkiX3MsIG51bGxwdHIpOworICAgIGlmICht
X2JhY2tlbmREaXNwYXRjaGVyLT5oYXNQcm90b2NvbEVycm9ycygpKSB7CisgICAgICAgIG1fYmFj
a2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Oklu
dmFsaWRQYXJhbXMsICJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJ0RhdGFiYXNlLmV4ZWN1dGVT
UUxBc3luYycgY2FuJ3QgYmUgcHJvY2Vzc2VkIl9zKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorICAgIGlmICht
X2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5l
eGVjdXRlU1FMQXN5bmMocmVxdWVzdElkLCBpbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCisKKyAgICBSZWY8RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6
OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrPiBjYWxsYmFjayA9IGFkb3B0UmVmKCpuZXcgRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrKG1fYmFj
a2VuZERpc3BhdGNoZXIuY29weVJlZigpLCByZXF1ZXN0SWQpKTsKKyAgICBtX2FnZW50LT5leGVj
dXRlU1FMQXN5bmMoaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnksIGNhbGxiYWNrLmNvcHlSZWYoKSk7
CisKK30KKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEJh
Y2tlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3Bh
dGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRo
LWFzeW5jLWF0dHJpYnV0ZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisj
aW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEZyb250ZW5kUm91dGVyOworCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0
Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRy
aWJ1dGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRj
aGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRl
Lmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4K
KyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwor
CisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKworCisvLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4K
K25hbWVzcGFjZSBEYXRhYmFzZSB7CitjbGFzcyBFcnJvcjsKK2VudW0gY2xhc3MgUHJpbWFyeUNv
bG9yczsKK30gLy8gRGF0YWJhc2UKKy8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KKwor
CisvLyBUeXBlZGVmcy4KK25hbWVzcGFjZSBEYXRhYmFzZSB7CisvKiBVbmlxdWUgaWRlbnRpZmll
ciBvZiBEYXRhYmFzZSBvYmplY3QuICovCit0eXBlZGVmIGludCBEYXRhYmFzZUlkOwordHlwZWRl
ZiBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29s
b3JzPiBDb2xvckxpc3Q7Cit9IC8vIERhdGFiYXNlCisvLyBFbmQgb2YgdHlwZWRlZnMuCisKK25h
bWVzcGFjZSBUZXN0SGVscGVycyB7CisKK1N0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQg
Y29kZSk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1
ZShUIGVudW1WYWx1ZSkKK3sKKyAgICByZXR1cm4gZ2V0RW51bUNvbnN0YW50VmFsdWUoc3RhdGlj
X2Nhc3Q8aW50PihlbnVtVmFsdWUpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMK
KworbmFtZXNwYWNlIERhdGFiYXNlIHsKKworZW51bSBjbGFzcyBQcmltYXJ5Q29sb3JzIHsKKyAg
ICBSZWQgPSAwLAorICAgIEdyZWVuID0gMSwKKyAgICBCbHVlID0gMiwKK307IC8vIGVudW0gY2xh
c3MgUHJpbWFyeUNvbG9ycworCisvKiBEYXRhYmFzZSBlcnJvci4gKi8KK2NsYXNzIEVycm9yIDog
cHVibGljIEpTT046Ok9iamVjdEJhc2UgeworcHVibGljOgorICAgIGVudW0geworICAgICAgICBO
b0ZpZWxkc1NldCA9IDAsCisgICAgICAgIE1lc3NhZ2VTZXQgPSAxIDw8IDAsCisgICAgICAgIENv
ZGVTZXQgPSAxIDw8IDEsCisgICAgICAgIEFsbEZpZWxkc1NldCA9IChNZXNzYWdlU2V0IHwgQ29k
ZVNldCkKKyAgICB9OworCisgICAgdGVtcGxhdGU8aW50IFNUQVRFPgorICAgIGNsYXNzIEJ1aWxk
ZXIgeworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVzdWx0
OworCisgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNh
c3RTdGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2Fz
dDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1
aWxkZXIoUmVmPC8qRXJyb3IqL0pTT046Ok9iamVjdD4mJiBvYmplY3QpCisgICAgICAgICAgICA6
IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5p
dF9zdGF0ZSk7CisgICAgICAgIH0KKyAgICAgICAgZnJpZW5kIGNsYXNzIEVycm9yOworICAgIHB1
YmxpYzoKKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTWVzc2FnZVNldD4mIHNldE1lc3NhZ2Uo
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIE1lc3NhZ2VTZXQpLCBwcm9wZXJ0eV9tZXNzYWdlX2FscmVhZHlfc2V0KTsK
KyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1lc3NhZ2UiX3MsIHZhbHVlKTsKKyAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TWVzc2FnZVNldD4oKTsKKyAgICAgICAgfQorCisg
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2RlU2V0PiYgc2V0Q29kZShpbnQgdmFsdWUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2RlU2V0KSwgcHJv
cGVydHlfY29kZV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdl
cigiY29kZSJfcywgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb2RlU2V0
PigpOworICAgICAgICB9CisKKyAgICAgICAgUmVmPEVycm9yPiByZWxlYXNlKCkKKyAgICAgICAg
eworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1
bHRfaXNfbm90X3JlYWR5KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihFcnJv
cikgPT0gc2l6ZW9mKEpTT046Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsKKworICAgICAgICAgICAg
UmVmPEpTT046Ok9iamVjdD4ganNvblJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7
CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVm
PEVycm9yPio+KCZqc29uUmVzdWx0KSk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
ICAgICB9CisgICAgfTsKKworICAgIC8qCisgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgor
ICAgICAqIFJlZjxFcnJvcj4gcmVzdWx0ID0gRXJyb3I6OmNyZWF0ZSgpCisgICAgICogICAgIC5z
ZXRNZXNzYWdlKC4uLikKKyAgICAgKiAgICAgLnNldENvZGUoLi4uKQorICAgICAqICAgICAucmVs
ZWFzZSgpOworICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVj
dDo6Y3JlYXRlKCkpOworICAgIH0KK307CisKK30gLy8gRGF0YWJhc2UKKworCisKK25hbWVzcGFj
ZSBUZXN0SGVscGVycyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFByb3RvY29sRW51bVR5cGU+CitP
cHRpb25hbDxQcm90b2NvbEVudW1UeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmcoY29uc3Qg
U3RyaW5nJik7CisKKy8vIEVudW1zIGluIHRoZSAnRGF0YWJhc2UnIERvbWFpbgordGVtcGxhdGU8
PgorT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+
IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6
UHJpbWFyeUNvbG9ycz4oY29uc3QgU3RyaW5nJik7CisKK30gLy8gbmFtZXNwYWNlIFRlc3RIZWxw
ZXJzCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1
bHRIYXNoOworCisvLyBIYXNoIGRlY2xhcmF0aW9ucyBpbiB0aGUgJ0RhdGFiYXNlJyBEb21haW4K
K3RlbXBsYXRlPD4KK3N0cnVjdCBEZWZhdWx0SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6UHJpbWFyeUNvbG9ycz4geworICAgIHR5cGVkZWYgSW50SGFzaDxJbnNwZWN0b3I6OlBy
b3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gSGFzaDsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdURgorIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbiBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitu
YW1lc3BhY2UgUHJvdG9jb2wgeworCituYW1lc3BhY2UgVGVzdEhlbHBlcnMgeworCitzdGF0aWMg
Y29uc3QgY2hhciogY29uc3QgZW51bV9jb25zdGFudF92YWx1ZXNbXSA9IHsKKyAgICAicmVkIiwK
KyAgICAiZ3JlZW4iLAorICAgICJibHVlIiwKKyAgICAiY3lhbiIsCisgICAgIm1hZ2VudGEiLAor
ICAgICJ5ZWxsb3ciLAorICAgICJibGFjayIsCit9OworCitTdHJpbmcgZ2V0RW51bUNvbnN0YW50
VmFsdWUoaW50IGNvZGUpIHsKKyAgICByZXR1cm4gZW51bV9jb25zdGFudF92YWx1ZXNbY29kZV07
Cit9CisKKy8vIEVudW1zIGluIHRoZSAnRGF0YWJhc2UnIERvbWFpbgorCit0ZW1wbGF0ZTw+CitP
cHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gcGFy
c2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmlt
YXJ5Q29sb3JzPihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQoreworICAgIHN0YXRpYyBj
b25zdCBzaXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsKKyAgICAgICAgKHNpemVfdClJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9yczo6UmVkLAorICAgICAgICAoc2l6
ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzOjpHcmVlbiwK
KyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNv
bG9yczo6Qmx1ZSwKKyAgICB9OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMzsgKytpKQor
ICAgICAgICBpZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3Rh
bnRWYWx1ZXNbaV1dKQorICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpE
YXRhYmFzZTo6UHJpbWFyeUNvbG9ycyljb25zdGFudFZhbHVlc1tpXTsKKworICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCisKKworCit9IC8v
IG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIu
aD4KKworQHByb3RvY29sIFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcjsKKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKKworY2xhc3MgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgT2JqQ0lu
c3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sRGF0YWJhc2VE
b21haW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9CisgICAgdm9p
ZCBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVzdElkLCBpbnQg
aW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkgZmluYWw7CisgICAgdm9pZCBl
eGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHJlcXVlc3RJZCwgaW50IGlu
X2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpIGZpbmFsOworICAgIHZvaWQgZXhl
Y3V0ZVNRTFN5bmMobG9uZyByZXF1ZXN0SWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJp
bmcmIGluX3F1ZXJ5KSBmaW5hbDsKKyAgICB2b2lkIGV4ZWN1dGVTUUxBc3luYyhsb25nIHJlcXVl
c3RJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpIGZpbmFsOwor
cHJpdmF0ZToKKyAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5k
bGVyPj4gbV9kZWxlZ2F0ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisj
aW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgIlRl
c3RQcm90b2NvbEludGVybmFsLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zLmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKworbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CisKK3ZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1
dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0SWQsIGludCBpbl9kYXRh
YmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KQoreworICAgIGlmICghW21fZGVsZWdhdGUg
cmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJu
VmFsdWVzV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOmRhdGFiYXNlSWQ6cXVlcnk6
KV0pIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihy
ZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS5l
eGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJv
cikgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJl
cXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgfTsKKworICAg
IGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiovICoqY29sdW1uTmFt
ZXMsIE5TU3RyaW5nICoqbm90ZXMsIGRvdWJsZSAqdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05P
YmplY3QgKip2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnBheWxvYWQsIGludCAqZGF0
YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKnNxbEVycm9yLCBUZXN0UHJvdG9j
b2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgKnNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+
Ki8gKiphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNP
cHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3IgKnByaW50Q29sb3IpIHsKKyAgICAgICAgUmVm
PEpTT046Ok9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAg
ICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKGNvbHVtbk5h
bWVzLCBAImNvbHVtbk5hbWVzIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09Q
VElPTkFMX1BBUkFNRVRFUihub3RlcywgQCJub3RlcyIpOworICAgICAgICBUSFJPV19FWENFUFRJ
T05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIodmFsdWVzLCBAInZhbHVlcyIpOworICAgICAg
ICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIocGF5bG9hZCwgQCJw
YXlsb2FkIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFN
RVRFUihzcWxFcnJvciwgQCJzcWxFcnJvciIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9S
X0JBRF9PUFRJT05BTF9QQVJBTUVURVIoYWx0ZXJuYXRlQ29sb3JzLCBAImFsdGVybmF0ZUNvbG9y
cyIpOworICAgICAgICBpZiAoY29sdW1uTmFtZXMpCisgICAgICAgICAgICByZXN1bHRPYmplY3Qt
PnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgdG9KU09OU3RyaW5nQXJyYXkoKmNvbHVtbk5hbWVz
KSk7CisgICAgICAgIGlmIChub3RlcykKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3Ry
aW5nKCJub3RlcyJfcywgKm5vdGVzKTsKKyAgICAgICAgaWYgKHRpbWVzdGFtcCkKKyAgICAgICAg
ICAgIHJlc3VsdE9iamVjdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICp0aW1lc3RhbXApOwor
ICAgICAgICBpZiAodmFsdWVzKQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3Qo
InZhbHVlcyJfcywgWyp2YWx1ZXMgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIGlmIChwYXlsb2Fk
KQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgWypwYXls
b2FkIHRvSlNPTk9iamVjdF0pOworICAgICAgICBpZiAoZGF0YWJhc2VJZCkKKyAgICAgICAgICAg
IHJlc3VsdE9iamVjdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgKmRhdGFiYXNlSWQpOwor
ICAgICAgICBpZiAoc3FsRXJyb3IpCisgICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVj
dCgic3FsRXJyb3IiX3MsIFsqc3FsRXJyb3IgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIGlmIChz
Y3JlZW5Db2xvcikKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJzY3JlZW5D
b2xvciJfcywgdG9Qcm90b2NvbFN0cmluZygqc2NyZWVuQ29sb3IpKTsKKyAgICAgICAgaWYgKGFs
dGVybmF0ZUNvbG9ycykKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoImFsdGVy
bmF0ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5nQXJyYXkoKmFsdGVybmF0ZUNvbG9ycykpOworICAg
ICAgICBpZiAocHJpbnRDb2xvcikKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5n
KCJwcmludENvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKCpwcmludENvbG9yKSk7CisgICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVz
dWx0T2JqZWN0KSwgZmFsc2UpOworICAgIH07CisKKyAgICBpbnQgb19pbl9kYXRhYmFzZUlkID0g
aW5fZGF0YWJhc2VJZDsKKyAgICBOU1N0cmluZyAqb19pbl9xdWVyeSA9IGluX3F1ZXJ5OworCisg
ICAgW21fZGVsZWdhdGUgZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1dpdGhFcnJv
ckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjayBk
YXRhYmFzZUlkOm9faW5fZGF0YWJhc2VJZCBxdWVyeTpvX2luX3F1ZXJ5XTsKK30KKwordm9pZCBP
YmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTEFzeW5jT3B0
aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0SWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25z
dCBTdHJpbmcmIGluX3F1ZXJ5KQoreworICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1Nl
bGVjdG9yOkBzZWxlY3RvcihleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1dpdGhF
cnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazpkYXRhYmFzZUlkOnF1ZXJ5OildKSB7CisgICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBC
YWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRGF0YWJhc2UuZXhlY3V0ZVNRTEFz
eW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7CisgICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBC
YWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICB9OworCisgICAgaWQgc3VjY2Vz
c0NhbGxiYWNrID0gXihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKipjb2x1bW5OYW1lcywgTlNTdHJp
bmcgKipub3RlcywgZG91YmxlICp0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnZh
bHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqcGF5bG9hZCwgaW50ICpkYXRhYmFzZUlkLCBU
ZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqc3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNl
UHJpbWFyeUNvbG9ycyAqc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmFsdGVy
bmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJl
dHVyblZhbHVlc1ByaW50Q29sb3IgKnByaW50Q29sb3IpIHsKKyAgICAgICAgUmVmPEpTT046Ok9i
amVjdD4gcmVzdWx0T2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKGNvbHVtbk5hbWVzLCBAImNv
bHVtbk5hbWVzIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BB
UkFNRVRFUihub3RlcywgQCJub3RlcyIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JB
RF9PUFRJT05BTF9QQVJBTUVURVIodmFsdWVzLCBAInZhbHVlcyIpOworICAgICAgICBUSFJPV19F
WENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIocGF5bG9hZCwgQCJwYXlsb2FkIik7
CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihzcWxF
cnJvciwgQCJzcWxFcnJvciIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJ
T05BTF9QQVJBTUVURVIoYWx0ZXJuYXRlQ29sb3JzLCBAImFsdGVybmF0ZUNvbG9ycyIpOworICAg
ICAgICBpZiAoY29sdW1uTmFtZXMpCisgICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5
KCJjb2x1bW5OYW1lcyJfcywgdG9KU09OU3RyaW5nQXJyYXkoKmNvbHVtbk5hbWVzKSk7CisgICAg
ICAgIGlmIChub3RlcykKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJub3Rl
cyJfcywgKm5vdGVzKTsKKyAgICAgICAgaWYgKHRpbWVzdGFtcCkKKyAgICAgICAgICAgIHJlc3Vs
dE9iamVjdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICp0aW1lc3RhbXApOworICAgICAgICBp
ZiAodmFsdWVzKQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInZhbHVlcyJf
cywgWyp2YWx1ZXMgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIGlmIChwYXlsb2FkKQorICAgICAg
ICAgICAgcmVzdWx0T2JqZWN0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgWypwYXlsb2FkIHRvSlNP
Tk9iamVjdF0pOworICAgICAgICBpZiAoZGF0YWJhc2VJZCkKKyAgICAgICAgICAgIHJlc3VsdE9i
amVjdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgKmRhdGFiYXNlSWQpOworICAgICAgICBp
ZiAoc3FsRXJyb3IpCisgICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdCgic3FsRXJy
b3IiX3MsIFsqc3FsRXJyb3IgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIGlmIChzY3JlZW5Db2xv
cikKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywg
dG9Qcm90b2NvbFN0cmluZygqc2NyZWVuQ29sb3IpKTsKKyAgICAgICAgaWYgKGFsdGVybmF0ZUNv
bG9ycykKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9y
cyJfcywgdG9KU09OU3RyaW5nQXJyYXkoKmFsdGVybmF0ZUNvbG9ycykpOworICAgICAgICBpZiAo
cHJpbnRDb2xvcikKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJwcmludENv
bG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKCpwcmludENvbG9yKSk7CisgICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0T2JqZWN0
KSwgZmFsc2UpOworICAgIH07CisKKyAgICBpbnQgb19pbl9kYXRhYmFzZUlkID0gaW5fZGF0YWJh
c2VJZDsKKyAgICBOU1N0cmluZyAqb19pbl9xdWVyeSA9IGluX3F1ZXJ5OworCisgICAgW21fZGVs
ZWdhdGUgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNXaXRoRXJyb3JDYWxsYmFj
azplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJ
ZDpvX2luX2RhdGFiYXNlSWQgcXVlcnk6b19pbl9xdWVyeV07Cit9CisKK3ZvaWQgT2JqQ0luc3Bl
Y3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5jKGxvbmcgcmVxdWVz
dElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkKK3sKKyAgICBp
ZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoZXhlY3V0ZVNRTFN5
bmNXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6ZGF0YWJhc2VJZDpxdWVyeTopXSkg
eworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVl
c3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RhdGFiYXNlLmV4ZWN1
dGVTUUxTeW5jJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlk
IGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgeworICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNo
ZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNl
bmRQZW5kaW5nRXJyb3JzKCk7CisgICAgfTsKKworICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4o
TlNBcnJheS8qPE5TU3RyaW5nPiovICpjb2x1bW5OYW1lcywgTlNTdHJpbmcgKm5vdGVzLCBkb3Vi
bGUgdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnZhbHVlcywgUldJUHJvdG9jb2xK
U09OT2JqZWN0ICpwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VF
cnJvciAqc3FsRXJyb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqYWx0ZXJuYXRlQ29sb3JzLCBU
ZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIFRlc3RQcm90b2Nv
bERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yIHByaW50Q29sb3IpIHsKKyAgICAgICAg
UmVmPEpTT046Ok9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
KyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoY29sdW1uTmFt
ZXMsIEAiY29sdW1uTmFtZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJF
RF9QQVJBTUVURVIobm90ZXMsIEAibm90ZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9SRVFVSVJFRF9QQVJBTUVURVIodmFsdWVzLCBAInZhbHVlcyIpOworICAgICAgICBUSFJPV19F
WENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihwYXlsb2FkLCBAInBheWxvYWQiKTsKKyAg
ICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoc3FsRXJyb3IsIEAi
c3FsRXJyb3IiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVU
RVIoYWx0ZXJuYXRlQ29sb3JzLCBAImFsdGVybmF0ZUNvbG9ycyIpOworICAgICAgICByZXN1bHRP
YmplY3QtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgdG9KU09OU3RyaW5nQXJyYXkoY29sdW1u
TmFtZXMpKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBub3Rl
cyk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIHRpbWVz
dGFtcCk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFt2YWx1
ZXMgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0VmFsdWUoInBheWxv
YWQiX3MsIFtwYXlsb2FkIHRvSlNPTk9iamVjdF0pOworICAgICAgICByZXN1bHRPYmplY3QtPnNl
dEludGVnZXIoImRhdGFiYXNlSWQiX3MsIGRhdGFiYXNlSWQpOworICAgICAgICByZXN1bHRPYmpl
Y3QtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIFtzcWxFcnJvciB0b0pTT05PYmplY3RdKTsKKyAg
ICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCB0b0pTT05T
dHJpbmdBcnJheShhbHRlcm5hdGVDb2xvcnMpKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRT
dHJpbmcoInNjcmVlbkNvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKHNjcmVlbkNvbG9yKSk7Cisg
ICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCB0b1Byb3RvY29s
U3RyaW5nKHByaW50Q29sb3IpKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJl
c3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHRPYmplY3QpLCBmYWxzZSk7CisgICAgfTsK
KworICAgIGludCBvX2luX2RhdGFiYXNlSWQgPSBpbl9kYXRhYmFzZUlkOworICAgIE5TU3RyaW5n
ICpvX2luX3F1ZXJ5ID0gaW5fcXVlcnk7CisKKyAgICBbbV9kZWxlZ2F0ZSBleGVjdXRlU1FMU3lu
Y1dpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3ND
YWxsYmFjayBkYXRhYmFzZUlkOm9faW5fZGF0YWJhc2VJZCBxdWVyeTpvX2luX3F1ZXJ5XTsKK30K
Kwordm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNR
TEFzeW5jKGxvbmcgcmVxdWVzdElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBp
bl9xdWVyeSkKK3sKKyAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2Vs
ZWN0b3IoZXhlY3V0ZVNRTEFzeW5jV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOmRh
dGFiYXNlSWQ6cXVlcnk6KV0pIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0
UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3Vu
ZCwgIidEYXRhYmFzZS5leGVjdXRlU1FMQXN5bmMnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAg
ICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7
CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVz
dElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICB9OworCisgICAgaWQg
c3VjY2Vzc0NhbGxiYWNrID0gXihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmNvbHVtbk5hbWVzLCBO
U1N0cmluZyAqbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAq
dmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBU
ZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQ
cmltYXJ5Q29sb3JzIHNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmFsdGVybmF0
ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yIHBy
aW50Q29sb3IpIHsKKyAgICAgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJF
RF9QQVJBTUVURVIoY29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsKKyAgICAgICAgVEhST1df
RVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIobm90ZXMsIEAibm90ZXMiKTsKKyAgICAg
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIodmFsdWVzLCBAInZhbHVl
cyIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihwYXls
b2FkLCBAInBheWxvYWQiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9Q
QVJBTUVURVIoc3FsRXJyb3IsIEAic3FsRXJyb3IiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoYWx0ZXJuYXRlQ29sb3JzLCBAImFsdGVybmF0ZUNvbG9y
cyIpOworICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgdG9K
U09OU3RyaW5nQXJyYXkoY29sdW1uTmFtZXMpKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRT
dHJpbmcoIm5vdGVzIl9zLCBub3Rlcyk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0RG91Ymxl
KCJ0aW1lc3RhbXAiX3MsIHRpbWVzdGFtcCk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2Jq
ZWN0KCJ2YWx1ZXMiX3MsIFt2YWx1ZXMgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIHJlc3VsdE9i
amVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFtwYXlsb2FkIHRvSlNPTk9iamVjdF0pOworICAg
ICAgICByZXN1bHRPYmplY3QtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsIGRhdGFiYXNlSWQp
OworICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIFtzcWxFcnJv
ciB0b0pTT05PYmplY3RdKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInNjcmVl
bkNvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKHNjcmVlbkNvbG9yKSk7CisgICAgICAgIHJlc3Vs
dE9iamVjdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5nQXJyYXko
YWx0ZXJuYXRlQ29sb3JzKSk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJwcmlu
dENvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKHByaW50Q29sb3IpKTsKKyAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHRPYmpl
Y3QpLCBmYWxzZSk7CisgICAgfTsKKworICAgIGludCBvX2luX2RhdGFiYXNlSWQgPSBpbl9kYXRh
YmFzZUlkOworICAgIE5TU3RyaW5nICpvX2luX3F1ZXJ5ID0gaW5fcXVlcnk7CisKKyAgICBbbV9k
ZWxlZ2F0ZSBleGVjdXRlU1FMQXN5bmNXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1
Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDpvX2luX2RhdGFiYXNlSWQg
cXVlcnk6b19pbl9xdWVyeV07Cit9CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbiBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0
UHJvdG9jb2wuaD4KKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitA
aW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAorQHByb3BlcnR5
IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNldERhdGFiYXNlSGFuZGxlcjopIGlkPFRlc3RQ
cm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4gZGF0YWJhc2VIYW5kbGVyOworQGVuZAorCisK
KyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbiBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZp
Z3VyYXRpb24uaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENv
cmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKwordXNpbmcgbmFtZXNw
YWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRp
b24KK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwor
ICAgIGlkPFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4gX2RhdGFiYXNlSGFuZGxl
cjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJ
bnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0
XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNvbnRy
b2xsZXIpOworICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKKyAgICByZXR1cm4gc2VsZjsK
K30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgW19kYXRhYmFzZUhhbmRsZXIgcmVsZWFzZV07
CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistICh2b2lkKXNldERhdGFiYXNlSGFuZGxlcjoo
aWQ8VGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyPiloYW5kbGVyCit7CisgICAgaWYg
KGhhbmRsZXIgPT0gX2RhdGFiYXNlSGFuZGxlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgW19k
YXRhYmFzZUhhbmRsZXIgcmVsZWFzZV07CisgICAgX2RhdGFiYXNlSGFuZGxlciA9IFtoYW5kbGVy
IHJldGFpbl07CisKKyAgICBhdXRvIGFsdGVybmF0ZURpc3BhdGNoZXIgPSBtYWtlVW5pcXVlPE9i
akNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPihoYW5kbGVyKTsKKyAgICBhdXRv
IGFsdGVybmF0ZUFnZW50ID0gbWFrZVVuaXF1ZTxBbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudDxE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyLCBBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVyPj4oIkRhdGFiYXNlIl9zLCAqX2NvbnRyb2xsZXIsIFdURk1vdmUoYWx0ZXJuYXRlRGlzcGF0
Y2hlcikpOworICAgIF9jb250cm9sbGVyLT5hcHBlbmRFeHRyYUFnZW50KFdURk1vdmUoYWx0ZXJu
YXRlQWdlbnQpKTsKK30KKworLSAoaWQ8VGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVy
PilkYXRhYmFzZUhhbmRsZXIKK3sKKyAgICByZXR1cm4gX2RhdGFiYXNlSGFuZGxlcjsKK30KKwor
QGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorCisj
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpz
b24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0
UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMuaCIKKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNw
ZWN0b3I7CisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1t
CisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5k
YXRpb24uaD4KKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5o
PgorCisKK0BjbGFzcyBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yOworCit0eXBlZGVmIE5TX0VO
VU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMpIHsKKyAgICBU
ZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNSZWQsCisgICAgVGVzdFByb3RvY29sRGF0
YWJhc2VQcmltYXJ5Q29sb3JzR3JlZW4sCisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5
Q29sb3JzQmx1ZSwKK307CisKK3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2Nv
bERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3IpIHsK
KyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1
ZXNQcmludENvbG9yQ3lhbiwKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5j
T3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yTWFnZW50YSwKKyAgICBUZXN0UHJvdG9jb2xE
YXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yWWVsbG93
LAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZh
bHVlc1ByaW50Q29sb3JCbGFjaywKK307CisKK3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRl
c3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmlu
dENvbG9yKSB7CisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25h
bFJldHVyblZhbHVlc1ByaW50Q29sb3JDeWFuLAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhl
Y3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yTWFnZW50YSwKKyAgICBU
ZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJp
bnRDb2xvclllbGxvdywKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09w
dGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvckJsYWNrLAorfTsKKwordHlwZWRlZiBOU19FTlVN
KE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3Ip
IHsKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvckN5YW4s
CisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3JNYWdlbnRh
LAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yWWVsbG93
LAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yQmxhY2ss
Cit9OworCit0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVTUUxBc3luY1ByaW50Q29sb3IpIHsKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVTUUxBc3luY1ByaW50Q29sb3JDeWFuLAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0
ZVNRTEFzeW5jUHJpbnRDb2xvck1hZ2VudGEsCisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVj
dXRlU1FMQXN5bmNQcmludENvbG9yWWVsbG93LAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhl
Y3V0ZVNRTEFzeW5jUHJpbnRDb2xvckJsYWNrLAorfTsKKworX19hdHRyaWJ1dGVfXygodmlzaWJp
bGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3Ig
OiBSV0lQcm90b2NvbEpTT05PYmplY3QKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6
KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkOworLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmpl
Y3Q7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2Ug
Y29kZTooaW50KWNvZGU7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29w
eSkgTlNTdHJpbmcgKm1lc3NhZ2U7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21p
YywgYXNzaWduKSBpbnQgY29kZTsKK0BlbmQKKworQHByb3RvY29sIFRlc3RQcm90b2NvbERhdGFi
YXNlRG9tYWluSGFuZGxlciA8TlNPYmplY3Q+CitAb3B0aW9uYWwKKy0gKHZvaWQpZXhlY3V0ZVNR
TFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1dpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3Ry
aW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoTlNBcnJh
eS8qPE5TU3RyaW5nPiovICoqY29sdW1uTmFtZXMsIE5TU3RyaW5nICoqbm90ZXMsIGRvdWJsZSAq
dGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKip2YWx1ZXMsIFJXSVByb3RvY29sSlNP
Tk9iamVjdCAqKnBheWxvYWQsIGludCAqZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VF
cnJvciAqKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgKnNjcmVl
bkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90
b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3Ig
KnByaW50Q29sb3IpKXN1Y2Nlc3NDYWxsYmFjayBkYXRhYmFzZUlkOihpbnQpZGF0YWJhc2VJZCBx
dWVyeTooTlNTdHJpbmcgKilxdWVyeTsKKy0gKHZvaWQpZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxS
ZXR1cm5WYWx1ZXNXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVy
cm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0cmluZz4q
LyAqKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqKm5vdGVzLCBkb3VibGUgKnRpbWVzdGFtcCwgUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICoqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipwYXls
b2FkLCBpbnQgKmRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipzcWxFcnJv
ciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzICpzY3JlZW5Db2xvciwgTlNBcnJh
eS8qPE5TU3RyaW5nPiovICoqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvciAqcHJpbnRDb2xvcikp
c3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNlSWQ6KGludClkYXRhYmFzZUlkIHF1ZXJ5OihOU1N0cmlu
ZyAqKXF1ZXJ5OworLSAodm9pZClleGVjdXRlU1FMU3luY1dpdGhFcnJvckNhbGxiYWNrOih2b2lk
KF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQo
XikoTlNBcnJheS8qPE5TU3RyaW5nPiovICpjb2x1bW5OYW1lcywgTlNTdHJpbmcgKm5vdGVzLCBk
b3VibGUgdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnZhbHVlcywgUldJUHJvdG9j
b2xKU09OT2JqZWN0ICpwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJh
c2VFcnJvciAqc3FsRXJyb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqYWx0ZXJuYXRlQ29sb3Jz
LCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIFRlc3RQcm90
b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yIHByaW50Q29sb3IpKXN1Y2Nlc3ND
YWxsYmFjayBkYXRhYmFzZUlkOihpbnQpZGF0YWJhc2VJZCBxdWVyeTooTlNTdHJpbmcgKilxdWVy
eTsKKy0gKHZvaWQpZXhlY3V0ZVNRTEFzeW5jV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNT
dHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKShOU0Fy
cmF5Lyo8TlNTdHJpbmc+Ki8gKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqbm90ZXMsIGRvdWJsZSB0
aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05P
YmplY3QgKnBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9y
ICpzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzIHNjcmVlbkNvbG9y
LCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0
YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yIHByaW50Q29sb3IpKXN1Y2Nlc3NDYWxsYmFj
ayBkYXRhYmFzZUlkOihpbnQpZGF0YWJhc2VJZCBxdWVyeTooTlNTdHJpbmcgKilxdWVyeTsKK0Bl
bmQKKworCisKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRp
YmlsaXR5T2JqZWN0cy5oPgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbiBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgor
I2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKKyNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8d3Rm
L0pTT05WYWx1ZXMuaD4KKworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5h
bC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmli
dXRlLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0
ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5
Q29udmVyc2lvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3RlbXBsYXRlPHR5cGVu
YW1lIE9iakNFbnVtVHlwZT4KK09wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3Ry
aW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOworCitpbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJp
bmcoVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzIHZhbHVlKQoreworICAgIHN3aXRj
aCh2YWx1ZSkgeworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzUmVk
OgorICAgICAgICByZXR1cm4gInJlZCJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNl
UHJpbWFyeUNvbG9yc0dyZWVuOgorICAgICAgICByZXR1cm4gImdyZWVuIl9zOworICAgIGNhc2Ug
VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzQmx1ZToKKyAgICAgICAgcmV0dXJuICJi
bHVlIl9zOworICAgIH0KK30KKwordGVtcGxhdGU8PgoraW5saW5lIE9wdGlvbmFsPFRlc3RQcm90
b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycz4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09ICJyZWQiKQorICAgICAgICByZXR1cm4gVGVz
dFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzUmVkOworICAgIGlmICh2YWx1ZSA9PSAiZ3Jl
ZW4iKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzR3Jl
ZW47CisgICAgaWYgKHZhbHVlID09ICJibHVlIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2Nv
bERhdGFiYXNlUHJpbWFyeUNvbG9yc0JsdWU7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30K
KworaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbERhdGFiYXNlRXhl
Y3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3IgdmFsdWUpCit7CisgICAg
c3dpdGNoKHZhbHVlKSB7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxT
eW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yQ3lhbjoKKyAgICAgICAgcmV0dXJuICJj
eWFuIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlv
bmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvck1hZ2VudGE6CisgICAgICAgIHJldHVybiAibWFnZW50
YSJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25h
bFJldHVyblZhbHVlc1ByaW50Q29sb3JZZWxsb3c6CisgICAgICAgIHJldHVybiAieWVsbG93Il9z
OworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0
dXJuVmFsdWVzUHJpbnRDb2xvckJsYWNrOgorICAgICAgICByZXR1cm4gImJsYWNrIl9zOworICAg
IH0KK30KKwordGVtcGxhdGU8PgoraW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNl
RXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3I+IGZyb21Qcm90b2Nv
bFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSAiY3lhbiIp
CisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXNQcmludENvbG9yQ3lhbjsKKyAgICBpZiAodmFsdWUgPT0gIm1hZ2VudGEi
KQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlv
bmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvck1hZ2VudGE7CisgICAgaWYgKHZhbHVlID09ICJ5ZWxs
b3ciKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09w
dGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvclllbGxvdzsKKyAgICBpZiAodmFsdWUgPT0gImJs
YWNrIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNP
cHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JCbGFjazsKKyAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworfQorCitpbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sRGF0
YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3IgdmFsdWUp
Cit7CisgICAgc3dpdGNoKHZhbHVlKSB7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvckN5YW46CisgICAgICAg
IHJldHVybiAiY3lhbiJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNR
TEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yTWFnZW50YToKKyAgICAgICAgcmV0
dXJuICJtYWdlbnRhIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FM
QXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JZZWxsb3c6CisgICAgICAgIHJldHVy
biAieWVsbG93Il9zOworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5
bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JCbGFjazoKKyAgICAgICAgcmV0dXJuICJi
bGFjayJfczsKKyAgICB9Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBPcHRpb25hbDxUZXN0UHJv
dG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xv
cj4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgaWYgKHZh
bHVlID09ICJjeWFuIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0
ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yQ3lhbjsKKyAgICBpZiAodmFs
dWUgPT0gIm1hZ2VudGEiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVj
dXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JNYWdlbnRhOworICAgIGlm
ICh2YWx1ZSA9PSAieWVsbG93IikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNl
RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yWWVsbG93OworICAg
IGlmICh2YWx1ZSA9PSAiYmxhY2siKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJh
c2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JCbGFjazsKKyAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCitpbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJp
bmcoVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3IgdmFsdWUpCit7
CisgICAgc3dpdGNoKHZhbHVlKSB7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVTUUxTeW5jUHJpbnRDb2xvckN5YW46CisgICAgICAgIHJldHVybiAiY3lhbiJfczsKKyAgICBj
YXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yTWFnZW50YToK
KyAgICAgICAgcmV0dXJuICJtYWdlbnRhIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJh
c2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3JZZWxsb3c6CisgICAgICAgIHJldHVybiAieWVsbG93
Il9zOworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29s
b3JCbGFjazoKKyAgICAgICAgcmV0dXJuICJibGFjayJfczsKKyAgICB9Cit9CisKK3RlbXBsYXRl
PD4KK2lubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJp
bnRDb2xvcj4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAg
aWYgKHZhbHVlID09ICJjeWFuIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNl
RXhlY3V0ZVNRTFN5bmNQcmludENvbG9yQ3lhbjsKKyAgICBpZiAodmFsdWUgPT0gIm1hZ2VudGEi
KQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50
Q29sb3JNYWdlbnRhOworICAgIGlmICh2YWx1ZSA9PSAieWVsbG93IikKKyAgICAgICAgcmV0dXJu
IFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yWWVsbG93OworICAg
IGlmICh2YWx1ZSA9PSAiYmxhY2siKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJh
c2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3JCbGFjazsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0
OworfQorCitpbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sRGF0YWJh
c2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yIHZhbHVlKQoreworICAgIHN3aXRjaCh2YWx1ZSkg
eworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9y
Q3lhbjoKKyAgICAgICAgcmV0dXJuICJjeWFuIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0
YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yTWFnZW50YToKKyAgICAgICAgcmV0dXJuICJt
YWdlbnRhIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQ
cmludENvbG9yWWVsbG93OgorICAgICAgICByZXR1cm4gInllbGxvdyJfczsKKyAgICBjYXNlIFRl
c3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvckJsYWNrOgorICAgICAg
ICByZXR1cm4gImJsYWNrIl9zOworICAgIH0KK30KKwordGVtcGxhdGU8PgoraW5saW5lIE9wdGlv
bmFsPFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvcj4gZnJvbVBy
b3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09ICJj
eWFuIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5j
UHJpbnRDb2xvckN5YW47CisgICAgaWYgKHZhbHVlID09ICJtYWdlbnRhIikKKyAgICAgICAgcmV0
dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvck1hZ2VudGE7
CisgICAgaWYgKHZhbHVlID09ICJ5ZWxsb3ciKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29s
RGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yWWVsbG93OworICAgIGlmICh2YWx1ZSA9
PSAiYmxhY2siKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FM
QXN5bmNQcmludENvbG9yQmxhY2s7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKworfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5
bmMtYXR0cmlidXRlLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKworI2ltcG9ydCAiVGVz
dFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCisjaW1wb3J0
IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorCit1c2luZyBu
YW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucyAoRGF0YWJhc2VEb21haW4pCisKKysgKHZvaWQpX3BhcnNlRGF0YWJhc2VJZDooTlNOdW1i
ZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisrICh2b2lkKV9wYXJzZVBy
aW1hcnlDb2xvcnM6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2Fk
OworKyAodm9pZClfcGFyc2VDb2xvckxpc3Q6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKilvdXRW
YWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNlRXJyb3I6KFRlc3RQ
cm90b2NvbERhdGFiYXNlRXJyb3IgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7
CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAo
RGF0YWJhc2VEb21haW4pCisKKysgKHZvaWQpX3BhcnNlRGF0YWJhc2VJZDooTlNOdW1iZXIgKiop
b3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05f
Rk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU051bWJlciBjbGFzc10pOworICAgICpvdXRWYWx1ZSA9
IChOU051bWJlciAqKXBheWxvYWQ7Cit9CisKKysgKHZvaWQpX3BhcnNlUHJpbWFyeUNvbG9yczoo
TlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJP
V19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBjbGFzc10pOworICAg
IE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycz4gcmVzdWx0ID0gSW5z
cGVjdG9yOjpmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29s
b3JzPihwYXlsb2FkKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9FTlVNX1ZBTFVFKHJl
c3VsdCwgQCJQcmltYXJ5Q29sb3JzIik7CisgICAgKm91dFZhbHVlID0gQChyZXN1bHQudmFsdWUo
KSk7Cit9CisKKysgKHZvaWQpX3BhcnNlQ29sb3JMaXN0OihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8g
Kiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJ
T05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gY2xhc3NdKTsK
KyAgICAqb3V0VmFsdWUgPSAoTlNBcnJheS8qPE5TU3RyaW5nPiovICopcGF5bG9hZDsKK30KKwor
KyAodm9pZClfcGFyc2VFcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKilvdXRWYWx1
ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFE
X1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOworICAgICpvdXRWYWx1ZSA9IFtb
VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRd
OworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNv
biBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQ
cm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUu
aD4KKyNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5o
PgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFBy
b3RvY29sRGF0YWJhc2VFcnJvcgorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihu
b25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCit7CisgICAgaWYg
KCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBUSFJP
V19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJtZXNzYWdlIl0sIEAi
bWVzc2FnZSIpOworICAgIHNlbGYubWVzc2FnZSA9IHBheWxvYWRbQCJtZXNzYWdlIl07CisKKyAg
ICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJjb2RlIl0s
IEAiY29kZSIpOworICAgIHNlbGYuY29kZSA9IFtwYXlsb2FkW0AiY29kZSJdIGludGVnZXJWYWx1
ZV07CisKKyAgICByZXR1cm4gc2VsZjsKK30KKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3Rv
Y29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilvYmplY3QKK3sKKyAgICBpZiAoIShz
ZWxmID0gW3N1cGVyIGluaXRXaXRoSlNPTk9iamVjdDpbb2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0
KCldKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHJldHVybiBzZWxmOworfQorCistIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZTooaW50
KWNvZGUKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJu
IG5pbDsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkobWVzc2Fn
ZSwgQCJtZXNzYWdlIik7CisKKyAgICBzZWxmLm1lc3NhZ2UgPSBtZXNzYWdlOworICAgIHNlbGYu
Y29kZSA9IGNvZGU7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClzZXRNZXNzYWdl
OihOU1N0cmluZyAqKW1lc3NhZ2UKK3sKKyAgICBbc3VwZXIgc2V0U3RyaW5nOm1lc3NhZ2UgZm9y
S2V5OkAibWVzc2FnZSJdOworfQorCistIChOU1N0cmluZyAqKW1lc3NhZ2UKK3sKKyAgICByZXR1
cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAIm1lc3NhZ2UiXTsKK30KKworLSAodm9pZClzZXRDb2Rl
OihpbnQpY29kZQoreworICAgIFtzdXBlciBzZXRJbnRlZ2VyOmNvZGUgZm9yS2V5OkAiY29kZSJd
OworfQorCistIChpbnQpY29kZQoreworICAgIHJldHVybiBbc3VwZXIgaW50ZWdlckZvcktleTpA
ImNvZGUiXTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMu
bW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRl
cnMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0
ZXJzLmpzb24tcmVzdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjViNDdjYzAyZGRlOWFiZTcwODJiMmQ3NzgzZDRh
ZTIxN2FlYzVhYjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxs
LXJldHVybi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0CkBAIC0wLDAgKzEsMTYyOSBAQAorIyMjIEJl
Z2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcy5pbgorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFy
YW1ldGVycy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworLy8g
RGF0YWJhc2UKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIkRhdGFiYXNlIiwgbnVs
bCk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiRGF0YWJhc2UuUHJpbWFyeUNvbG9y
cyIsIHtSZWQ6ICJyZWQiLCBHcmVlbjogImdyZWVuIiwgQmx1ZTogImJsdWUifSk7CitJbnNwZWN0
b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiRGF0YWJhc2UuZXhlY3V0ZUFsbE9wdGlvbmFsUGFy
YW1ldGVycyIsIG51bGwsIFt7Im5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJvYmplY3Qi
LCAib3B0aW9uYWwiOiB0cnVlfSwgeyJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiwg
Im9wdGlvbmFsIjogdHJ1ZX0sIHsibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIi
LCAib3B0aW9uYWwiOiB0cnVlfSwgeyJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIs
ICJvcHRpb25hbCI6IHRydWV9LCB7Im5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogIm9iamVjdCIs
ICJvcHRpb25hbCI6IHRydWV9LCB7Im5hbWUiOiAiZGF0YWJhc2VJZCIsICJ0eXBlIjogIm51bWJl
ciIsICJvcHRpb25hbCI6IHRydWV9LCB7Im5hbWUiOiAic3FsRXJyb3IiLCAidHlwZSI6ICJvYmpl
Y3QiLCAib3B0aW9uYWwiOiB0cnVlfSwgeyJuYW1lIjogInNjcmVlbkNvbG9yIiwgInR5cGUiOiAi
c3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZX0sIHsibmFtZSI6ICJhbHRlcm5hdGVDb2xvcnMiLCAi
dHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0cnVlfSwgeyJuYW1lIjogInByaW50Q29sb3Ii
LCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVlfV0sIFsiY29sdW1uTmFtZXMiLCAi
bm90ZXMiLCAidGltZXN0YW1wIiwgInZhbHVlcyIsICJwYXlsb2FkIiwgImRhdGFiYXNlSWQiLCAi
c3FsRXJyb3IiLCAic2NyZWVuQ29sb3IiLCAiYWx0ZXJuYXRlQ29sb3JzIiwgInByaW50Q29sb3Ii
XSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiRGF0YWJhc2UuZXhlY3V0ZU5v
T3B0aW9uYWxQYXJhbWV0ZXJzIiwgbnVsbCwgW3sibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBl
IjogIm9iamVjdCJ9LCB7Im5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmcifSwgeyJuYW1l
IjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciJ9LCB7Im5hbWUiOiAidmFsdWVzIiwgInR5
cGUiOiAib2JqZWN0In0sIHsibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAib2JqZWN0In0sIHsi
bmFtZSI6ICJkYXRhYmFzZUlkIiwgInR5cGUiOiAibnVtYmVyIn0sIHsibmFtZSI6ICJzcWxFcnJv
ciIsICJ0eXBlIjogIm9iamVjdCJ9LCB7Im5hbWUiOiAic2NyZWVuQ29sb3IiLCAidHlwZSI6ICJz
dHJpbmcifSwgeyJuYW1lIjogImFsdGVybmF0ZUNvbG9ycyIsICJ0eXBlIjogIm9iamVjdCJ9LCB7
Im5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmluZyJ9XSwgWyJjb2x1bW5OYW1lcyIs
ICJub3RlcyIsICJ0aW1lc3RhbXAiLCAidmFsdWVzIiwgInBheWxvYWQiLCAiZGF0YWJhc2VJZCIs
ICJzcWxFcnJvciIsICJzY3JlZW5Db2xvciIsICJhbHRlcm5hdGVDb2xvcnMiLCAicHJpbnRDb2xv
ciJdKTsKK0luc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkRhdGFiYXNlIiwgbnVsbCk7
CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcy5pbgorCisjIyMgQmVn
aW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1w
YXJhbWV0ZXJzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisj
cHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Igewor
CitjbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdm9pZCBz
ZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hl
cikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQorICAgIEJh
Y2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFj
a2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KK3ByaXZhdGU6CisgICAgUmVmUHRyPEJhY2tlbmREaXNw
YXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOworfTsKKworCitjbGFzcyBBbHRlcm5hdGVEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVy
IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5BbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVyKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMo
bG9uZyBjYWxsSWQsIGNvbnN0IEpTT046OkFycmF5KiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3Ry
aW5nKiBpbl9ub3RlcywgY29uc3QgZG91YmxlKiBpbl90aW1lc3RhbXAsIGNvbnN0IEpTT046Ok9i
amVjdCogaW5fdmFsdWVzLCBjb25zdCBKU09OOjpWYWx1ZSogaW5fcGF5bG9hZCwgY29uc3QgaW50
KiBpbl9kYXRhYmFzZUlkLCBjb25zdCBKU09OOjpPYmplY3QqIGluX3NxbEVycm9yLCBjb25zdCBT
dHJpbmcqIGluX3NjcmVlbkNvbG9yLCBjb25zdCBKU09OOjpBcnJheSogaW5fYWx0ZXJuYXRlQ29s
b3JzLCBjb25zdCBTdHJpbmcqIGluX3ByaW50Q29sb3IpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgY2FsbElkLCBjb25zdCBKU09OOjpBcnJh
eSYgaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgaW5fbm90ZXMsIGRvdWJsZSBpbl90aW1l
c3RhbXAsIGNvbnN0IEpTT046Ok9iamVjdCYgaW5fdmFsdWVzLCBKU09OOjpWYWx1ZSBpbl9wYXls
b2FkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgSlNPTjo6T2JqZWN0JiBpbl9zcWxFcnJvciwg
Y29uc3QgU3RyaW5nJiBpbl9zY3JlZW5Db2xvciwgY29uc3QgSlNPTjo6QXJyYXkmIGluX2FsdGVy
bmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBpbl9wcmludENvbG9yKSA9IDA7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQorIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2Fs
bC1yZXR1cm4tcGFyYW1ldGVycy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgi
CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7
CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCitjbGFzcyBBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVyOworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQorCitjbGFzcyBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CitwdWJsaWM6Cisg
ICAgLy8gTmFtZWQgYWZ0ZXIgcGFyYW1ldGVyICdwcmludENvbG9yJyB3aGlsZSBnZW5lcmF0aW5n
IGNvbW1hbmQvZXZlbnQgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycy4KKyAgICBlbnVtIGNs
YXNzIFByaW50Q29sb3IgeworICAgICAgICBDeWFuID0gMywKKyAgICAgICAgTWFnZW50YSA9IDQs
CisgICAgICAgIFllbGxvdyA9IDUsCisgICAgICAgIEJsYWNrID0gNiwKKyAgICB9OyAvLyBlbnVt
IGNsYXNzIFByaW50Q29sb3IKKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZUFsbE9wdGlvbmFsUGFy
YW1ldGVycyhFcnJvclN0cmluZyYsIGNvbnN0IEpTT046OkFycmF5KiBvcHRfaW5fY29sdW1uTmFt
ZXMsIGNvbnN0IFN0cmluZyogb3B0X2luX25vdGVzLCBjb25zdCBkb3VibGUqIG9wdF9pbl90aW1l
c3RhbXAsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0X2luX3ZhbHVlcywgY29uc3QgSlNPTjo6VmFs
dWUqIG9wdF9pbl9wYXlsb2FkLCBjb25zdCBpbnQqIG9wdF9pbl9kYXRhYmFzZUlkLCBjb25zdCBK
U09OOjpPYmplY3QqIG9wdF9pbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nKiBvcHRfaW5fc2NyZWVu
Q29sb3IsIGNvbnN0IEpTT046OkFycmF5KiBvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBT
dHJpbmcqIG9wdF9pbl9wcmludENvbG9yLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYg
b3B0X291dF9jb2x1bW5OYW1lcywgT3B0aW9uYWw8U3RyaW5nPiYgb3B0X291dF9ub3RlcywgT3B0
aW9uYWw8ZG91YmxlPiYgb3B0X291dF90aW1lc3RhbXAsIE9wdGlvbmFsPEpTT046Ok9iamVjdD4m
IG9wdF9vdXRfdmFsdWVzLCBPcHRpb25hbDxKU09OOjpWYWx1ZT4mIG9wdF9vdXRfcGF5bG9hZCwg
T3B0aW9uYWw8aW50PiYgb3B0X291dF9kYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYgb3B0X291dF9zcWxFcnJvciwgSW5zcGVjdG9yOjpQcm90
b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMqIG9wdF9vdXRfc2NyZWVuQ29sb3IsIFJlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYgb3B0X291dF9hbHRl
cm5hdGVDb2xvcnMsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9y
KiBvcHRfb3V0X3ByaW50Q29sb3IpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZU5vT3B0
aW9uYWxQYXJhbWV0ZXJzKEVycm9yU3RyaW5nJiwgY29uc3QgSlNPTjo6QXJyYXkmIGluX2NvbHVt
bk5hbWVzLCBjb25zdCBTdHJpbmcmIGluX25vdGVzLCBkb3VibGUgaW5fdGltZXN0YW1wLCBjb25z
dCBKU09OOjpPYmplY3QmIGluX3ZhbHVlcywgSlNPTjo6VmFsdWUgaW5fcGF5bG9hZCwgaW50IGlu
X2RhdGFiYXNlSWQsIGNvbnN0IEpTT046Ok9iamVjdCYgaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmlu
ZyYgaW5fc2NyZWVuQ29sb3IsIGNvbnN0IEpTT046OkFycmF5JiBpbl9hbHRlcm5hdGVDb2xvcnMs
IGNvbnN0IFN0cmluZyYgaW5fcHJpbnRDb2xvciwgUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5n
Pj4mIG91dF9jb2x1bW5OYW1lcywgU3RyaW5nKiBvdXRfbm90ZXMsIGRvdWJsZSogb3V0X3RpbWVz
dGFtcCwgSlNPTjo6T2JqZWN0KiBvdXRfdmFsdWVzLCBKU09OOjpWYWx1ZSogb3V0X3BheWxvYWQs
IGludCogb3V0X2RhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFz
ZTo6RXJyb3I+JiBvdXRfc3FsRXJyb3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQ
cmltYXJ5Q29sb3JzKiBvdXRfc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYgb3V0X2FsdGVybmF0ZUNvbG9ycywgRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3IqIG91dF9wcmludENvbG9yKSA9IDA7Citw
cm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIo
KTsKK307CisKK2NsYXNzIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMg
U3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICB2b2lkIGRpc3BhdGNoKGxvbmcg
cmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNz
YWdlKSBmaW5hbDsKK3ByaXZhdGU6CisgICAgdm9pZCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0
ZXJzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwor
ICAgIHZvaWQgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQorcHVibGljOgorICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0
Y2hlcihBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRj
aGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KK3By
aXZhdGU6CisgICAgQWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciogbV9hbHRlcm5h
dGVEaXNwYXRjaGVyIHsgbnVsbHB0ciB9OworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQorcHJpdmF0ZToKKyAgICBEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVyKEJhY2tlbmREaXNwYXRjaGVyJiwgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIq
KTsKKyAgICBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2VudCB7IG51bGxw
dHIgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0
QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0
Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0
aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVz
dEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1
ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
KworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorI2luY2x1ZGUg
IlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNlbmRpZiAvLyBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisK
K0RhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+RGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXIoKSB7IH0KKworUmVmPERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+IERhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERp
c3BhdGNoZXIsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKK3sKKyAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmRE
aXNwYXRjaGVyLCBhZ2VudCkpOworfQorCitEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hl
ciwgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQorICAgIDogU3VwcGxl
bWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCisgICAgLCBtX2FnZW50
KGFnZW50KQoreworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZv
ckRvbWFpbigiRGF0YWJhc2UiX3MsIHRoaXMpOworfQorCit2b2lkIERhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwg
UmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQoreworICAgIFJlZjxEYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKKworICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBh
cmFtZXRlcnM7CisgICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRlcnMp
OworCisgICAgaWYgKG1ldGhvZCA9PSAiZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyIpIHsK
KyAgICAgICAgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhyZXF1ZXN0SWQsIFdURk1vdmUo
cGFyYW1ldGVycykpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChtZXRob2QgPT0g
ImV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyIpIHsKKyAgICAgICAgZXhlY3V0ZU5vT3B0aW9u
YWxQYXJhbWV0ZXJzKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVy
cm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS4iICsgbWV0
aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOworfQorCit2b2lkIERhdGFiYXNlQmFja2VuZERpc3Bh
dGNoZXI6OmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIFJlZlB0
cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycykKK3sKKyAgICBib29sIG9wdF9pbl9jb2x1bW5O
YW1lc192YWx1ZUZvdW5kID0gZmFsc2U7CisgICAgUmVmUHRyPEpTT046OkFycmF5PiBvcHRfaW5f
Y29sdW1uTmFtZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRBcnJheShwYXJhbWV0ZXJzLmdl
dCgpLCAiY29sdW1uTmFtZXMiX3MsICZvcHRfaW5fY29sdW1uTmFtZXNfdmFsdWVGb3VuZCk7Cisg
ICAgYm9vbCBvcHRfaW5fbm90ZXNfdmFsdWVGb3VuZCA9IGZhbHNlOworICAgIFN0cmluZyBvcHRf
aW5fbm90ZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQo
KSwgIm5vdGVzIl9zLCAmb3B0X2luX25vdGVzX3ZhbHVlRm91bmQpOworICAgIGJvb2wgb3B0X2lu
X3RpbWVzdGFtcF92YWx1ZUZvdW5kID0gZmFsc2U7CisgICAgZG91YmxlIG9wdF9pbl90aW1lc3Rh
bXAgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXREb3VibGUocGFyYW1ldGVycy5nZXQoKSwgInRp
bWVzdGFtcCJfcywgJm9wdF9pbl90aW1lc3RhbXBfdmFsdWVGb3VuZCk7CisgICAgYm9vbCBvcHRf
aW5fdmFsdWVzX3ZhbHVlRm91bmQgPSBmYWxzZTsKKyAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBv
cHRfaW5fdmFsdWVzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0T2JqZWN0KHBhcmFtZXRlcnMu
Z2V0KCksICJ2YWx1ZXMiX3MsICZvcHRfaW5fdmFsdWVzX3ZhbHVlRm91bmQpOworICAgIGJvb2wg
b3B0X2luX3BheWxvYWRfdmFsdWVGb3VuZCA9IGZhbHNlOworICAgIFJlZlB0cjxKU09OOjpWYWx1
ZT4gb3B0X2luX3BheWxvYWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRWYWx1ZShwYXJhbWV0
ZXJzLmdldCgpLCAicGF5bG9hZCJfcywgJm9wdF9pbl9wYXlsb2FkX3ZhbHVlRm91bmQpOworICAg
IGJvb2wgb3B0X2luX2RhdGFiYXNlSWRfdmFsdWVGb3VuZCA9IGZhbHNlOworICAgIGludCBvcHRf
aW5fZGF0YWJhc2VJZCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEludGVnZXIocGFyYW1ldGVy
cy5nZXQoKSwgImRhdGFiYXNlSWQiX3MsICZvcHRfaW5fZGF0YWJhc2VJZF92YWx1ZUZvdW5kKTsK
KyAgICBib29sIG9wdF9pbl9zcWxFcnJvcl92YWx1ZUZvdW5kID0gZmFsc2U7CisgICAgUmVmUHRy
PEpTT046Ok9iamVjdD4gb3B0X2luX3NxbEVycm9yID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0
T2JqZWN0KHBhcmFtZXRlcnMuZ2V0KCksICJzcWxFcnJvciJfcywgJm9wdF9pbl9zcWxFcnJvcl92
YWx1ZUZvdW5kKTsKKyAgICBib29sIG9wdF9pbl9zY3JlZW5Db2xvcl92YWx1ZUZvdW5kID0gZmFs
c2U7CisgICAgU3RyaW5nIG9wdF9pbl9zY3JlZW5Db2xvciA9IG1fYmFja2VuZERpc3BhdGNoZXIt
PmdldFN0cmluZyhwYXJhbWV0ZXJzLmdldCgpLCAic2NyZWVuQ29sb3IiX3MsICZvcHRfaW5fc2Ny
ZWVuQ29sb3JfdmFsdWVGb3VuZCk7CisgICAgYm9vbCBvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzX3Zh
bHVlRm91bmQgPSBmYWxzZTsKKyAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IG9wdF9pbl9hbHRlcm5h
dGVDb2xvcnMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRBcnJheShwYXJhbWV0ZXJzLmdldCgp
LCAiYWx0ZXJuYXRlQ29sb3JzIl9zLCAmb3B0X2luX2FsdGVybmF0ZUNvbG9yc192YWx1ZUZvdW5k
KTsKKyAgICBib29sIG9wdF9pbl9wcmludENvbG9yX3ZhbHVlRm91bmQgPSBmYWxzZTsKKyAgICBT
dHJpbmcgb3B0X2luX3ByaW50Q29sb3IgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmco
cGFyYW1ldGVycy5nZXQoKSwgInByaW50Q29sb3IiX3MsICZvcHRfaW5fcHJpbnRDb2xvcl92YWx1
ZUZvdW5kKTsKKyAgICBpZiAobV9iYWNrZW5kRGlzcGF0Y2hlci0+aGFzUHJvdG9jb2xFcnJvcnMo
KSkgeworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJh
Y2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCAiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9k
ICdEYXRhYmFzZS5leGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzJyBjYW4ndCBiZSBwcm9jZXNz
ZWQiX3MpOworICAgICAgICByZXR1cm47CisgICAgfQorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCisgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewor
ICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRl
cnMocmVxdWVzdElkLCBvcHRfaW5fY29sdW1uTmFtZXNfdmFsdWVGb3VuZCA/IG9wdF9pbl9jb2x1
bW5OYW1lcy5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9ub3Rlc192YWx1ZUZvdW5kID8gJm9wdF9p
bl9ub3RlcyA6IG51bGxwdHIsIG9wdF9pbl90aW1lc3RhbXBfdmFsdWVGb3VuZCA/ICZvcHRfaW5f
dGltZXN0YW1wIDogbnVsbHB0ciwgb3B0X2luX3ZhbHVlc192YWx1ZUZvdW5kID8gb3B0X2luX3Zh
bHVlcy5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9wYXlsb2FkX3ZhbHVlRm91bmQgPyBvcHRfaW5f
cGF5bG9hZC5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9kYXRhYmFzZUlkX3ZhbHVlRm91bmQgPyAm
b3B0X2luX2RhdGFiYXNlSWQgOiBudWxscHRyLCBvcHRfaW5fc3FsRXJyb3JfdmFsdWVGb3VuZCA/
IG9wdF9pbl9zcWxFcnJvci5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9zY3JlZW5Db2xvcl92YWx1
ZUZvdW5kID8gJm9wdF9pbl9zY3JlZW5Db2xvciA6IG51bGxwdHIsIG9wdF9pbl9hbHRlcm5hdGVD
b2xvcnNfdmFsdWVGb3VuZCA/IG9wdF9pbl9hbHRlcm5hdGVDb2xvcnMuZ2V0KCkgOiBudWxscHRy
LCBvcHRfaW5fcHJpbnRDb2xvcl92YWx1ZUZvdW5kID8gJm9wdF9pbl9wcmludENvbG9yIDogbnVs
bHB0cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBS
ZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJl
ZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IG91dF9jb2x1bW5OYW1lczsKKyAgICBPcHRpb25h
bDxTdHJpbmc+IG91dF9ub3RlczsKKyAgICBPcHRpb25hbDxkb3VibGU+IG91dF90aW1lc3RhbXA7
CisgICAgT3B0aW9uYWw8SlNPTjo6T2JqZWN0PiBvdXRfdmFsdWVzOworICAgIE9wdGlvbmFsPEpT
T046OlZhbHVlPiBvdXRfcGF5bG9hZDsKKyAgICBPcHRpb25hbDxpbnQ+IG91dF9kYXRhYmFzZUlk
OworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IG91dF9z
cWxFcnJvcjsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9y
cyBvdXRfc2NyZWVuQ29sb3I7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFi
YXNlOjpDb2xvckxpc3Q+IG91dF9hbHRlcm5hdGVDb2xvcnM7CisgICAgRGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3Igb3V0X3ByaW50Q29sb3I7CisgICAgbV9hZ2Vu
dC0+ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhlcnJvciwgb3B0X2luX2NvbHVtbk5hbWVz
X3ZhbHVlRm91bmQgPyBvcHRfaW5fY29sdW1uTmFtZXMuZ2V0KCkgOiBudWxscHRyLCBvcHRfaW5f
bm90ZXNfdmFsdWVGb3VuZCA/ICZvcHRfaW5fbm90ZXMgOiBudWxscHRyLCBvcHRfaW5fdGltZXN0
YW1wX3ZhbHVlRm91bmQgPyAmb3B0X2luX3RpbWVzdGFtcCA6IG51bGxwdHIsIG9wdF9pbl92YWx1
ZXNfdmFsdWVGb3VuZCA/IG9wdF9pbl92YWx1ZXMuZ2V0KCkgOiBudWxscHRyLCBvcHRfaW5fcGF5
bG9hZF92YWx1ZUZvdW5kID8gb3B0X2luX3BheWxvYWQuZ2V0KCkgOiBudWxscHRyLCBvcHRfaW5f
ZGF0YWJhc2VJZF92YWx1ZUZvdW5kID8gJm9wdF9pbl9kYXRhYmFzZUlkIDogbnVsbHB0ciwgb3B0
X2luX3NxbEVycm9yX3ZhbHVlRm91bmQgPyBvcHRfaW5fc3FsRXJyb3IuZ2V0KCkgOiBudWxscHRy
LCBvcHRfaW5fc2NyZWVuQ29sb3JfdmFsdWVGb3VuZCA/ICZvcHRfaW5fc2NyZWVuQ29sb3IgOiBu
dWxscHRyLCBvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzX3ZhbHVlRm91bmQgPyBvcHRfaW5fYWx0ZXJu
YXRlQ29sb3JzLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX3ByaW50Q29sb3JfdmFsdWVGb3VuZCA/
ICZvcHRfaW5fcHJpbnRDb2xvciA6IG51bGxwdHIsIG91dF9jb2x1bW5OYW1lcywgb3V0X25vdGVz
LCBvdXRfdGltZXN0YW1wLCBvdXRfdmFsdWVzLCBvdXRfcGF5bG9hZCwgb3V0X2RhdGFiYXNlSWQs
IG91dF9zcWxFcnJvciwgb3V0X3NjcmVlbkNvbG9yLCBvdXRfYWx0ZXJuYXRlQ29sb3JzLCBvdXRf
cHJpbnRDb2xvcik7CisKKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7CisgICAgICAgIGlmIChv
dXRfY29sdW1uTmFtZXMpCisgICAgICAgICAgICByZXN1bHQtPnNldEFycmF5KCJjb2x1bW5OYW1l
cyJfcywgb3V0X2NvbHVtbk5hbWVzKTsKKyAgICAgICAgaWYgKG91dF9ub3Rlcy5oYXNWYWx1ZSgp
KQorICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCAqb3V0X25vdGVzKTsK
KyAgICAgICAgaWYgKG91dF90aW1lc3RhbXAuaGFzVmFsdWUoKSkKKyAgICAgICAgICAgIHJlc3Vs
dC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICpvdXRfdGltZXN0YW1wKTsKKyAgICAgICAgaWYg
KG91dF92YWx1ZXMuaGFzVmFsdWUoKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJ2
YWx1ZXMiX3MsICpvdXRfdmFsdWVzKTsKKyAgICAgICAgaWYgKG91dF9wYXlsb2FkLmhhc1ZhbHVl
KCkpCisgICAgICAgICAgICByZXN1bHQtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCAqb3V0X3BheWxv
YWQpOworICAgICAgICBpZiAob3V0X2RhdGFiYXNlSWQuaGFzVmFsdWUoKSkKKyAgICAgICAgICAg
IHJlc3VsdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgKm91dF9kYXRhYmFzZUlkKTsKKyAg
ICAgICAgaWYgKG91dF9zcWxFcnJvcikKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJz
cWxFcnJvciJfcywgb3V0X3NxbEVycm9yKTsKKyAgICAgICAgaWYgKG91dF9zY3JlZW5Db2xvci5o
YXNWYWx1ZSgpKQorICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9z
LCAqb3V0X3NjcmVlbkNvbG9yKTsKKyAgICAgICAgaWYgKG91dF9hbHRlcm5hdGVDb2xvcnMpCisg
ICAgICAgICAgICByZXN1bHQtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIG91dF9hbHRl
cm5hdGVDb2xvcnMpOworICAgICAgICBpZiAob3V0X3ByaW50Q29sb3IuaGFzVmFsdWUoKSkKKyAg
ICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCAqb3V0X3ByaW50Q29s
b3IpOworICAgIH0KKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQorICAgICAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNl
KTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29s
RXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Cit9
CisKK3ZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZU5vT3B0aW9uYWxQYXJh
bWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMp
Cit7CisgICAgUmVmUHRyPEpTT046OkFycmF5PiBpbl9jb2x1bW5OYW1lcyA9IG1fYmFja2VuZERp
c3BhdGNoZXItPmdldEFycmF5KHBhcmFtZXRlcnMuZ2V0KCksICJjb2x1bW5OYW1lcyJfcywgbnVs
bHB0cik7CisgICAgU3RyaW5nIGluX25vdGVzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3Ry
aW5nKHBhcmFtZXRlcnMuZ2V0KCksICJub3RlcyJfcywgbnVsbHB0cik7CisgICAgZG91YmxlIGlu
X3RpbWVzdGFtcCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldERvdWJsZShwYXJhbWV0ZXJzLmdl
dCgpLCAidGltZXN0YW1wIl9zLCBudWxscHRyKTsKKyAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBp
bl92YWx1ZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRPYmplY3QocGFyYW1ldGVycy5nZXQo
KSwgInZhbHVlcyJfcywgbnVsbHB0cik7CisgICAgUmVmUHRyPEpTT046OlZhbHVlPiBpbl9wYXls
b2FkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0VmFsdWUocGFyYW1ldGVycy5nZXQoKSwgInBh
eWxvYWQiX3MsIG51bGxwdHIpOworICAgIGludCBpbl9kYXRhYmFzZUlkID0gbV9iYWNrZW5kRGlz
cGF0Y2hlci0+Z2V0SW50ZWdlcihwYXJhbWV0ZXJzLmdldCgpLCAiZGF0YWJhc2VJZCJfcywgbnVs
bHB0cik7CisgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gaW5fc3FsRXJyb3IgPSBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5nZXRPYmplY3QocGFyYW1ldGVycy5nZXQoKSwgInNxbEVycm9yIl9zLCBudWxs
cHRyKTsKKyAgICBTdHJpbmcgaW5fc2NyZWVuQ29sb3IgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5n
ZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgInNjcmVlbkNvbG9yIl9zLCBudWxscHRyKTsKKyAg
ICBSZWZQdHI8SlNPTjo6QXJyYXk+IGluX2FsdGVybmF0ZUNvbG9ycyA9IG1fYmFja2VuZERpc3Bh
dGNoZXItPmdldEFycmF5KHBhcmFtZXRlcnMuZ2V0KCksICJhbHRlcm5hdGVDb2xvcnMiX3MsIG51
bGxwdHIpOworICAgIFN0cmluZyBpbl9wcmludENvbG9yID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+
Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksICJwcmludENvbG9yIl9zLCBudWxscHRyKTsKKyAg
ICBpZiAobV9iYWNrZW5kRGlzcGF0Y2hlci0+aGFzUHJvdG9jb2xFcnJvcnMoKSkgeworICAgICAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRj
aGVyOjpJbnZhbGlkUGFyYW1zLCAiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICdEYXRhYmFzZS5l
eGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMnIGNhbid0IGJlIHByb2Nlc3NlZCJfcyk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKKyAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7CisgICAgICAgIG1fYWx0
ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKHJlcXVlc3RJZCwg
KmluX2NvbHVtbk5hbWVzLCBpbl9ub3RlcywgaW5fdGltZXN0YW1wLCAqaW5fdmFsdWVzLCAqaW5f
cGF5bG9hZCwgaW5fZGF0YWJhc2VJZCwgKmluX3NxbEVycm9yLCBpbl9zY3JlZW5Db2xvciwgKmlu
X2FsdGVybmF0ZUNvbG9ycywgaW5fcHJpbnRDb2xvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyAg
ICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IG91
dF9jb2x1bW5OYW1lczsKKyAgICBTdHJpbmcgb3V0X25vdGVzOworICAgIGRvdWJsZSBvdXRfdGlt
ZXN0YW1wOworICAgIEpTT046Ok9iamVjdCBvdXRfdmFsdWVzOworICAgIEpTT046OlZhbHVlIG91
dF9wYXlsb2FkOworICAgIGludCBvdXRfZGF0YWJhc2VJZDsKKyAgICBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBvdXRfc3FsRXJyb3I7CisgICAgSW5zcGVjdG9y
OjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgb3V0X3NjcmVlbkNvbG9yOworICAg
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiBvdXRfYWx0
ZXJuYXRlQ29sb3JzOworICAgIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmlu
dENvbG9yIG91dF9wcmludENvbG9yOworICAgIG1fYWdlbnQtPmV4ZWN1dGVOb09wdGlvbmFsUGFy
YW1ldGVycyhlcnJvciwgKmluX2NvbHVtbk5hbWVzLCBpbl9ub3RlcywgaW5fdGltZXN0YW1wLCAq
aW5fdmFsdWVzLCAqaW5fcGF5bG9hZCwgaW5fZGF0YWJhc2VJZCwgKmluX3NxbEVycm9yLCBpbl9z
Y3JlZW5Db2xvciwgKmluX2FsdGVybmF0ZUNvbG9ycywgaW5fcHJpbnRDb2xvciwgb3V0X2NvbHVt
bk5hbWVzLCAmb3V0X25vdGVzLCAmb3V0X3RpbWVzdGFtcCwgb3V0X3ZhbHVlcywgJm91dF9wYXls
b2FkLCAmb3V0X2RhdGFiYXNlSWQsIG91dF9zcWxFcnJvciwgJm91dF9zY3JlZW5Db2xvciwgb3V0
X2FsdGVybmF0ZUNvbG9ycywgJm91dF9wcmludENvbG9yKTsKKworICAgIGlmICghZXJyb3IubGVu
Z3RoKCkpIHsKKyAgICAgICAgcmVzdWx0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIG91dF9j
b2x1bW5OYW1lcyk7CisgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJub3RlcyJfcywgb3V0X25v
dGVzKTsKKyAgICAgICAgcmVzdWx0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgb3V0X3RpbWVz
dGFtcCk7CisgICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIG91dF92YWx1ZXMp
OworICAgICAgICByZXN1bHQtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBvdXRfcGF5bG9hZCk7Cisg
ICAgICAgIHJlc3VsdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgb3V0X2RhdGFiYXNlSWQp
OworICAgICAgICByZXN1bHQtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIG91dF9zcWxFcnJvcik7
CisgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKG91dF9zY3JlZW5Db2xv
cikpOworICAgICAgICByZXN1bHQtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIG91dF9h
bHRlcm5hdGVDb2xvcnMpOworICAgICAgICByZXN1bHQtPnNldFN0cmluZygicHJpbnRDb2xvciJf
cywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVl
KG91dF9wcmludENvbG9yKSk7CisgICAgfQorICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCisgICAg
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUo
cmVzdWx0KSwgZmFsc2UpOworICAgIGVsc2UKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+
cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1v
dmUoZXJyb3IpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmls
ZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9u
dGVuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21t
YW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbiBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAi
VGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitj
bGFzcyBGcm9udGVuZFJvdXRlcjsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5k
IEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RG
cm9udGVuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK30gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorCisjIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJz
Lmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4K
KyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwor
CisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKworCisvLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4K
K25hbWVzcGFjZSBEYXRhYmFzZSB7CitjbGFzcyBFcnJvcjsKK2VudW0gY2xhc3MgUHJpbWFyeUNv
bG9yczsKK30gLy8gRGF0YWJhc2UKKy8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KKwor
CisvLyBUeXBlZGVmcy4KK25hbWVzcGFjZSBEYXRhYmFzZSB7CisvKiBVbmlxdWUgaWRlbnRpZmll
ciBvZiBEYXRhYmFzZSBvYmplY3QuICovCit0eXBlZGVmIGludCBEYXRhYmFzZUlkOwordHlwZWRl
ZiBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29s
b3JzPiBDb2xvckxpc3Q7Cit9IC8vIERhdGFiYXNlCisvLyBFbmQgb2YgdHlwZWRlZnMuCisKK25h
bWVzcGFjZSBUZXN0SGVscGVycyB7CisKK1N0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQg
Y29kZSk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1
ZShUIGVudW1WYWx1ZSkKK3sKKyAgICByZXR1cm4gZ2V0RW51bUNvbnN0YW50VmFsdWUoc3RhdGlj
X2Nhc3Q8aW50PihlbnVtVmFsdWUpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMK
KworbmFtZXNwYWNlIERhdGFiYXNlIHsKKworZW51bSBjbGFzcyBQcmltYXJ5Q29sb3JzIHsKKyAg
ICBSZWQgPSAwLAorICAgIEdyZWVuID0gMSwKKyAgICBCbHVlID0gMiwKK307IC8vIGVudW0gY2xh
c3MgUHJpbWFyeUNvbG9ycworCisvKiBEYXRhYmFzZSBlcnJvci4gKi8KK2NsYXNzIEVycm9yIDog
cHVibGljIEpTT046Ok9iamVjdEJhc2UgeworcHVibGljOgorICAgIGVudW0geworICAgICAgICBO
b0ZpZWxkc1NldCA9IDAsCisgICAgICAgIE1lc3NhZ2VTZXQgPSAxIDw8IDAsCisgICAgICAgIENv
ZGVTZXQgPSAxIDw8IDEsCisgICAgICAgIEFsbEZpZWxkc1NldCA9IChNZXNzYWdlU2V0IHwgQ29k
ZVNldCkKKyAgICB9OworCisgICAgdGVtcGxhdGU8aW50IFNUQVRFPgorICAgIGNsYXNzIEJ1aWxk
ZXIgeworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVzdWx0
OworCisgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNh
c3RTdGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2Fz
dDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1
aWxkZXIoUmVmPC8qRXJyb3IqL0pTT046Ok9iamVjdD4mJiBvYmplY3QpCisgICAgICAgICAgICA6
IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5p
dF9zdGF0ZSk7CisgICAgICAgIH0KKyAgICAgICAgZnJpZW5kIGNsYXNzIEVycm9yOworICAgIHB1
YmxpYzoKKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTWVzc2FnZVNldD4mIHNldE1lc3NhZ2Uo
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIE1lc3NhZ2VTZXQpLCBwcm9wZXJ0eV9tZXNzYWdlX2FscmVhZHlfc2V0KTsK
KyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1lc3NhZ2UiX3MsIHZhbHVlKTsKKyAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TWVzc2FnZVNldD4oKTsKKyAgICAgICAgfQorCisg
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2RlU2V0PiYgc2V0Q29kZShpbnQgdmFsdWUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2RlU2V0KSwgcHJv
cGVydHlfY29kZV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdl
cigiY29kZSJfcywgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb2RlU2V0
PigpOworICAgICAgICB9CisKKyAgICAgICAgUmVmPEVycm9yPiByZWxlYXNlKCkKKyAgICAgICAg
eworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1
bHRfaXNfbm90X3JlYWR5KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihFcnJv
cikgPT0gc2l6ZW9mKEpTT046Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsKKworICAgICAgICAgICAg
UmVmPEpTT046Ok9iamVjdD4ganNvblJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7
CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVm
PEVycm9yPio+KCZqc29uUmVzdWx0KSk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
ICAgICB9CisgICAgfTsKKworICAgIC8qCisgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgor
ICAgICAqIFJlZjxFcnJvcj4gcmVzdWx0ID0gRXJyb3I6OmNyZWF0ZSgpCisgICAgICogICAgIC5z
ZXRNZXNzYWdlKC4uLikKKyAgICAgKiAgICAgLnNldENvZGUoLi4uKQorICAgICAqICAgICAucmVs
ZWFzZSgpOworICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVj
dDo6Y3JlYXRlKCkpOworICAgIH0KK307CisKK30gLy8gRGF0YWJhc2UKKworCisKK25hbWVzcGFj
ZSBUZXN0SGVscGVycyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFByb3RvY29sRW51bVR5cGU+CitP
cHRpb25hbDxQcm90b2NvbEVudW1UeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmcoY29uc3Qg
U3RyaW5nJik7CisKKy8vIEVudW1zIGluIHRoZSAnRGF0YWJhc2UnIERvbWFpbgordGVtcGxhdGU8
PgorT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+
IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6
UHJpbWFyeUNvbG9ycz4oY29uc3QgU3RyaW5nJik7CisKK30gLy8gbmFtZXNwYWNlIFRlc3RIZWxw
ZXJzCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1
bHRIYXNoOworCisvLyBIYXNoIGRlY2xhcmF0aW9ucyBpbiB0aGUgJ0RhdGFiYXNlJyBEb21haW4K
K3RlbXBsYXRlPD4KK3N0cnVjdCBEZWZhdWx0SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6UHJpbWFyeUNvbG9ycz4geworICAgIHR5cGVkZWYgSW50SGFzaDxJbnNwZWN0b3I6OlBy
b3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gSGFzaDsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdURgorIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpz
b24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorCisjaW5jbHVkZSA8d3Rm
L09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworbmFtZXNwYWNlIFRlc3RIZWxw
ZXJzIHsKKworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFsdWVzW10g
PSB7CisgICAgInJlZCIsCisgICAgImdyZWVuIiwKKyAgICAiYmx1ZSIsCisgICAgImN5YW4iLAor
ICAgICJtYWdlbnRhIiwKKyAgICAieWVsbG93IiwKKyAgICAiYmxhY2siLAorfTsKKworU3RyaW5n
IGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CisgICAgcmV0dXJuIGVudW1fY29uc3Rh
bnRfdmFsdWVzW2NvZGVdOworfQorCisvLyBFbnVtcyBpbiB0aGUgJ0RhdGFiYXNlJyBEb21haW4K
KwordGVtcGxhdGU8PgorT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlBy
aW1hcnlDb2xvcnM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29s
OjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykK
K3sKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7CisgICAgICAg
IChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM6OlJl
ZCwKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFy
eUNvbG9yczo6R3JlZW4sCisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0
YWJhc2U6OlByaW1hcnlDb2xvcnM6OkJsdWUsCisgICAgfTsKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IDM7ICsraSkKKyAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3Rh
bnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKKyAgICAgICAgICAgIHJldHVybiAoSW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMpY29uc3RhbnRWYWx1ZXNbaV07
CisKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0SGVs
cGVycworCisKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1w
YXJhbWV0ZXJzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXJzLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCitAcHJvdG9jb2wgVGVzdFByb3Rv
Y29sRGF0YWJhc2VEb21haW5IYW5kbGVyOworCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCitj
bGFzcyBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1Ymxp
YyBBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyIHsKKyAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsg
bV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KKyAgICB2b2lkIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFt
ZXRlcnMobG9uZyByZXF1ZXN0SWQsIGNvbnN0IEpTT046OkFycmF5KiBpbl9jb2x1bW5OYW1lcywg
Y29uc3QgU3RyaW5nKiBpbl9ub3RlcywgY29uc3QgZG91YmxlKiBpbl90aW1lc3RhbXAsIGNvbnN0
IEpTT046Ok9iamVjdCogaW5fdmFsdWVzLCBjb25zdCBKU09OOjpWYWx1ZSogaW5fcGF5bG9hZCwg
Y29uc3QgaW50KiBpbl9kYXRhYmFzZUlkLCBjb25zdCBKU09OOjpPYmplY3QqIGluX3NxbEVycm9y
LCBjb25zdCBTdHJpbmcqIGluX3NjcmVlbkNvbG9yLCBjb25zdCBKU09OOjpBcnJheSogaW5fYWx0
ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcqIGluX3ByaW50Q29sb3IpIGZpbmFsOworICAgIHZv
aWQgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBjb25zdCBKU09O
OjpBcnJheSYgaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgaW5fbm90ZXMsIGRvdWJsZSBp
bl90aW1lc3RhbXAsIGNvbnN0IEpTT046Ok9iamVjdCYgaW5fdmFsdWVzLCBKU09OOjpWYWx1ZSBp
bl9wYXlsb2FkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgSlNPTjo6T2JqZWN0JiBpbl9zcWxF
cnJvciwgY29uc3QgU3RyaW5nJiBpbl9zY3JlZW5Db2xvciwgY29uc3QgSlNPTjo6QXJyYXkmIGlu
X2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBpbl9wcmludENvbG9yKSBmaW5hbDsKK3By
aXZhdGU6CisgICAgUmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxl
cj4+IG1fZGVsZWdhdGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0
ZXJzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0
ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgor
CisjaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorCituYW1l
c3BhY2UgSW5zcGVjdG9yIHsKKwordm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlcjo6ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhsb25nIHJlcXVlc3RJZCwgY29u
c3QgSlNPTjo6QXJyYXkqIGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIGluX25vdGVzLCBj
b25zdCBkb3VibGUqIGluX3RpbWVzdGFtcCwgY29uc3QgSlNPTjo6T2JqZWN0KiBpbl92YWx1ZXMs
IGNvbnN0IEpTT046OlZhbHVlKiBpbl9wYXlsb2FkLCBjb25zdCBpbnQqIGluX2RhdGFiYXNlSWQs
IGNvbnN0IEpTT046Ok9iamVjdCogaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyogaW5fc2NyZWVu
Q29sb3IsIGNvbnN0IEpTT046OkFycmF5KiBpbl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmlu
ZyogaW5fcHJpbnRDb2xvcikKK3sKKyAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxl
Y3RvcjpAc2VsZWN0b3IoZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1dpdGhFcnJvckNhbGxi
YWNrOnN1Y2Nlc3NDYWxsYmFjazpjb2x1bW5OYW1lczpub3Rlczp0aW1lc3RhbXA6dmFsdWVzOnBh
eWxvYWQ6ZGF0YWJhc2VJZDpzcWxFcnJvcjpzY3JlZW5Db2xvcjphbHRlcm5hdGVDb2xvcnM6cHJp
bnRDb2xvcjopXSkgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2Nv
bEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0Rh
dGFiYXNlLmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMnIHdhcyBub3QgZm91bmQiX3MpOwor
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVy
cm9yKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3Io
cmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICB9OworCisg
ICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKipjb2x1bW5O
YW1lcywgTlNTdHJpbmcgKipub3RlcywgZG91YmxlICp0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNP
Tk9iamVjdCAqKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqcGF5bG9hZCwgaW50ICpk
YXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqc3FsRXJyb3IsIFRlc3RQcm90
b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0cmlu
Zz4qLyAqKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0
aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvciAqcHJpbnRDb2xvcikgeworICAgICAgICBSZWY8SlNP
Tjo6T2JqZWN0PiByZXN1bHRPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAg
ICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoY29sdW1uTmFtZXMs
IEAiY29sdW1uTmFtZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9O
QUxfUEFSQU1FVEVSKG5vdGVzLCBAIm5vdGVzIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUih2YWx1ZXMsIEAidmFsdWVzIik7CisgICAgICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihwYXlsb2FkLCBAInBheWxv
YWQiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVS
KHNxbEVycm9yLCBAInNxbEVycm9yIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFE
X09QVElPTkFMX1BBUkFNRVRFUihhbHRlcm5hdGVDb2xvcnMsIEAiYWx0ZXJuYXRlQ29sb3JzIik7
CisgICAgICAgIGlmIChjb2x1bW5OYW1lcykKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0
QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB0b0pTT05TdHJpbmdBcnJheSgqY29sdW1uTmFtZXMpKTsK
KyAgICAgICAgaWYgKG5vdGVzKQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmco
Im5vdGVzIl9zLCAqbm90ZXMpOworICAgICAgICBpZiAodGltZXN0YW1wKQorICAgICAgICAgICAg
cmVzdWx0T2JqZWN0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgKnRpbWVzdGFtcCk7CisgICAg
ICAgIGlmICh2YWx1ZXMpCisgICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdCgidmFs
dWVzIl9zLCBbKnZhbHVlcyB0b0pTT05PYmplY3RdKTsKKyAgICAgICAgaWYgKHBheWxvYWQpCisg
ICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBbKnBheWxvYWQg
dG9KU09OT2JqZWN0XSk7CisgICAgICAgIGlmIChkYXRhYmFzZUlkKQorICAgICAgICAgICAgcmVz
dWx0T2JqZWN0LT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCAqZGF0YWJhc2VJZCk7CisgICAg
ICAgIGlmIChzcWxFcnJvcikKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KCJz
cWxFcnJvciJfcywgWypzcWxFcnJvciB0b0pTT05PYmplY3RdKTsKKyAgICAgICAgaWYgKHNjcmVl
bkNvbG9yKQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9y
Il9zLCB0b1Byb3RvY29sU3RyaW5nKCpzY3JlZW5Db2xvcikpOworICAgICAgICBpZiAoYWx0ZXJu
YXRlQ29sb3JzKQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJuYXRl
Q29sb3JzIl9zLCB0b0pTT05TdHJpbmdBcnJheSgqYWx0ZXJuYXRlQ29sb3JzKSk7CisgICAgICAg
IGlmIChwcmludENvbG9yKQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInBy
aW50Q29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcoKnByaW50Q29sb3IpKTsKKyAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHRP
YmplY3QpLCBmYWxzZSk7CisgICAgfTsKKworICAgIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqb19p
bl9jb2x1bW5OYW1lczsKKyAgICBpZiAoaW5fY29sdW1uTmFtZXMpCisgICAgICAgIG9faW5fY29s
dW1uTmFtZXMgPSB0b09iakNTdHJpbmdBcnJheShpbl9jb2x1bW5OYW1lcyk7CisgICAgTlNTdHJp
bmcgKm9faW5fbm90ZXM7CisgICAgaWYgKGluX25vdGVzKQorICAgICAgICBvX2luX25vdGVzID0g
KmluX25vdGVzOworICAgIGRvdWJsZSBvX2luX3RpbWVzdGFtcDsKKyAgICBpZiAoaW5fdGltZXN0
YW1wKQorICAgICAgICBvX2luX3RpbWVzdGFtcCA9ICppbl90aW1lc3RhbXA7CisgICAgUldJUHJv
dG9jb2xKU09OT2JqZWN0ICpvX2luX3ZhbHVlczsKKyAgICBpZiAoaW5fdmFsdWVzKQorICAgICAg
ICBvX2luX3ZhbHVlcyA9IFtbW1JXSVByb3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5pdFdpdGhK
U09OT2JqZWN0OmluX3ZhbHVlc10gYXV0b3JlbGVhc2VdOworICAgIFJXSVByb3RvY29sSlNPTk9i
amVjdCAqb19pbl9wYXlsb2FkOworICAgIGlmIChpbl9wYXlsb2FkKQorICAgICAgICBvX2luX3Bh
eWxvYWQgPSBbW1tSV0lQcm90b2NvbEpTT05PYmplY3QgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVj
dDppbl9wYXlsb2FkXSBhdXRvcmVsZWFzZV07CisgICAgaW50IG9faW5fZGF0YWJhc2VJZDsKKyAg
ICBpZiAoaW5fZGF0YWJhc2VJZCkKKyAgICAgICAgb19pbl9kYXRhYmFzZUlkID0gKmluX2RhdGFi
YXNlSWQ7CisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqb19pbl9zcWxFcnJvcjsKKyAg
ICBpZiAoaW5fc3FsRXJyb3IpCisgICAgICAgIG9faW5fc3FsRXJyb3IgPSBbW1tUZXN0UHJvdG9j
b2xEYXRhYmFzZUVycm9yIGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6aW5fc3FsRXJyb3JdIGF1
dG9yZWxlYXNlXTsKKyAgICBPcHRpb25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xv
cnM+IG9faW5fc2NyZWVuQ29sb3I7CisgICAgaWYgKGluX3NjcmVlbkNvbG9yKQorICAgICAgICBv
X2luX3NjcmVlbkNvbG9yID0gZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERhdGFiYXNl
UHJpbWFyeUNvbG9ycz4oKmluX3NjcmVlbkNvbG9yKTsKKyAgICBOU0FycmF5Lyo8TlNTdHJpbmc+
Ki8gKm9faW5fYWx0ZXJuYXRlQ29sb3JzOworICAgIGlmIChpbl9hbHRlcm5hdGVDb2xvcnMpCisg
ICAgICAgIG9faW5fYWx0ZXJuYXRlQ29sb3JzID0gdG9PYmpDU3RyaW5nQXJyYXkoaW5fYWx0ZXJu
YXRlQ29sb3JzKTsKKyAgICBPcHRpb25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxP
cHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yPiBvX2luX3ByaW50Q29sb3I7CisgICAgaWYgKGlu
X3ByaW50Q29sb3IpCisgICAgICAgIG9faW5fcHJpbnRDb2xvciA9IGZyb21Qcm90b2NvbFN0cmlu
ZzxUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENv
bG9yPigqaW5fcHJpbnRDb2xvcik7CisKKyAgICBbbV9kZWxlZ2F0ZSBleGVjdXRlQWxsT3B0aW9u
YWxQYXJhbWV0ZXJzV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJh
Y2s6c3VjY2Vzc0NhbGxiYWNrIGNvbHVtbk5hbWVzOihpbl9jb2x1bW5OYW1lcyA/ICZvX2luX2Nv
bHVtbk5hbWVzIDogbmlsKSBub3RlczooaW5fbm90ZXMgPyAmb19pbl9ub3RlcyA6IG5pbCkgdGlt
ZXN0YW1wOihpbl90aW1lc3RhbXAgPyAmb19pbl90aW1lc3RhbXAgOiBuaWwpIHZhbHVlczooaW5f
dmFsdWVzID8gJm9faW5fdmFsdWVzIDogbmlsKSBwYXlsb2FkOihpbl9wYXlsb2FkID8gJm9faW5f
cGF5bG9hZCA6IG5pbCkgZGF0YWJhc2VJZDooaW5fZGF0YWJhc2VJZCA/ICZvX2luX2RhdGFiYXNl
SWQgOiBuaWwpIHNxbEVycm9yOihpbl9zcWxFcnJvciA/ICZvX2luX3NxbEVycm9yIDogbmlsKSBz
Y3JlZW5Db2xvcjooaW5fc2NyZWVuQ29sb3IgPyAmb19pbl9zY3JlZW5Db2xvci52YWx1ZSgpIDog
bmlsKSBhbHRlcm5hdGVDb2xvcnM6KGluX2FsdGVybmF0ZUNvbG9ycyA/ICZvX2luX2FsdGVybmF0
ZUNvbG9ycyA6IG5pbCkgcHJpbnRDb2xvcjooaW5fcHJpbnRDb2xvciA/ICZvX2luX3ByaW50Q29s
b3IudmFsdWUoKSA6IG5pbCldOworfQorCit2b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tl
bmREaXNwYXRjaGVyOjpleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQs
IGNvbnN0IEpTT046OkFycmF5JiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBpbl9ub3Rl
cywgZG91YmxlIGluX3RpbWVzdGFtcCwgY29uc3QgSlNPTjo6T2JqZWN0JiBpbl92YWx1ZXMsIEpT
T046OlZhbHVlIGluX3BheWxvYWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBKU09OOjpPYmpl
Y3QmIGluX3NxbEVycm9yLCBjb25zdCBTdHJpbmcmIGluX3NjcmVlbkNvbG9yLCBjb25zdCBKU09O
OjpBcnJheSYgaW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcmIGluX3ByaW50Q29sb3Ip
Cit7CisgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGV4
ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1dpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFj
azpjb2x1bW5OYW1lczpub3Rlczp0aW1lc3RhbXA6dmFsdWVzOnBheWxvYWQ6ZGF0YWJhc2VJZDpz
cWxFcnJvcjpzY3JlZW5Db2xvcjphbHRlcm5hdGVDb2xvcnM6cHJpbnRDb2xvcjopXSkgeworICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwg
QmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RhdGFiYXNlLmV4ZWN1dGVOb09w
dGlvbmFsUGFyYW1ldGVycycgd2FzIG5vdCBmb3VuZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKKyAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmRE
aXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgIH07CisKKyAgICBpZCBzdWNjZXNzQ2FsbGJh
Y2sgPSBeKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqY29sdW1uTmFtZXMsIE5TU3RyaW5nICpub3Rl
cywgZG91YmxlIHRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICp2YWx1ZXMsIFJXSVBy
b3RvY29sSlNPTk9iamVjdCAqcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERh
dGFiYXNlRXJyb3IgKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMg
c2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0
UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IgcHJp
bnRDb2xvcikgeworICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHRPYmplY3QgPSBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVE
X1BBUkFNRVRFUihjb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOworICAgICAgICBUSFJPV19F
WENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihub3RlcywgQCJub3RlcyIpOworICAgICAg
ICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUih2YWx1ZXMsIEAidmFsdWVz
Iik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHBheWxv
YWQsIEAicGF5bG9hZCIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BB
UkFNRVRFUihzcWxFcnJvciwgQCJzcWxFcnJvciIpOworICAgICAgICBUSFJPV19FWENFUFRJT05f
Rk9SX1JFUVVJUkVEX1BBUkFNRVRFUihhbHRlcm5hdGVDb2xvcnMsIEAiYWx0ZXJuYXRlQ29sb3Jz
Iik7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB0b0pT
T05TdHJpbmdBcnJheShjb2x1bW5OYW1lcykpOworICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0
cmluZygibm90ZXMiX3MsIG5vdGVzKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXREb3VibGUo
InRpbWVzdGFtcCJfcywgdGltZXN0YW1wKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmpl
Y3QoInZhbHVlcyJfcywgW3ZhbHVlcyB0b0pTT05PYmplY3RdKTsKKyAgICAgICAgcmVzdWx0T2Jq
ZWN0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgW3BheWxvYWQgdG9KU09OT2JqZWN0XSk7CisgICAg
ICAgIHJlc3VsdE9iamVjdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgZGF0YWJhc2VJZCk7
CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgW3NxbEVycm9y
IHRvSlNPTk9iamVjdF0pOworICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygic2NyZWVu
Q29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcoc2NyZWVuQ29sb3IpKTsKKyAgICAgICAgcmVzdWx0
T2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCB0b0pTT05TdHJpbmdBcnJheShh
bHRlcm5hdGVDb2xvcnMpKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInByaW50
Q29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcocHJpbnRDb2xvcikpOworICAgICAgICBiYWNrZW5k
RGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdE9iamVj
dCksIGZhbHNlKTsKKyAgICB9OworCisgICAgTlNBcnJheS8qPE5TU3RyaW5nPiovICpvX2luX2Nv
bHVtbk5hbWVzID0gdG9PYmpDU3RyaW5nQXJyYXkoJmluX2NvbHVtbk5hbWVzKTsKKyAgICBOU1N0
cmluZyAqb19pbl9ub3RlcyA9IGluX25vdGVzOworICAgIGRvdWJsZSBvX2luX3RpbWVzdGFtcCA9
IGluX3RpbWVzdGFtcDsKKyAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9faW5fdmFsdWVzID0g
W1tbUldJUHJvdG9jb2xKU09OT2JqZWN0IGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6JmluX3Zh
bHVlc10gYXV0b3JlbGVhc2VdOworICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb19pbl9wYXls
b2FkID0gW1tbUldJUHJvdG9jb2xKU09OT2JqZWN0IGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6
JmluX3BheWxvYWRdIGF1dG9yZWxlYXNlXTsKKyAgICBpbnQgb19pbl9kYXRhYmFzZUlkID0gaW5f
ZGF0YWJhc2VJZDsKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpvX2luX3NxbEVycm9y
ID0gW1tbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0
OiZpbl9zcWxFcnJvcl0gYXV0b3JlbGVhc2VdOworICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbERh
dGFiYXNlUHJpbWFyeUNvbG9ycz4gb19pbl9zY3JlZW5Db2xvciA9IGZyb21Qcm90b2NvbFN0cmlu
ZzxUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnM+KGluX3NjcmVlbkNvbG9yKTsKKyAg
ICBpZiAoIW9faW5fc2NyZWVuQ29sb3IpIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgIlBh
cmFtZXRlciAnc2NyZWVuQ29sb3InIG9mIG1ldGhvZCAnRGF0YWJhc2UuZXhlY3V0ZU5vT3B0aW9u
YWxQYXJhbWV0ZXJzJyBjYW5ub3QgYmUgcHJvY2Vzc2VkIl9zKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKm9faW5fYWx0ZXJuYXRlQ29sb3JzID0g
dG9PYmpDU3RyaW5nQXJyYXkoJmluX2FsdGVybmF0ZUNvbG9ycyk7CisgICAgT3B0aW9uYWw8VGVz
dFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yPiBv
X2luX3ByaW50Q29sb3IgPSBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sRGF0YWJhc2VF
eGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yPihpbl9wcmludENvbG9yKTsKKyAg
ICBpZiAoIW9faW5fcHJpbnRDb2xvcikgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5y
ZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCAiUGFy
YW1ldGVyICdwcmludENvbG9yJyBvZiBtZXRob2QgJ0RhdGFiYXNlLmV4ZWN1dGVOb09wdGlvbmFs
UGFyYW1ldGVycycgY2Fubm90IGJlIHByb2Nlc3NlZCJfcyk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBbbV9kZWxlZ2F0ZSBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNXaXRoRXJy
b3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2sg
Y29sdW1uTmFtZXM6b19pbl9jb2x1bW5OYW1lcyBub3RlczpvX2luX25vdGVzIHRpbWVzdGFtcDpv
X2luX3RpbWVzdGFtcCB2YWx1ZXM6b19pbl92YWx1ZXMgcGF5bG9hZDpvX2luX3BheWxvYWQgZGF0
YWJhc2VJZDpvX2luX2RhdGFiYXNlSWQgc3FsRXJyb3I6b19pbl9zcWxFcnJvciBzY3JlZW5Db2xv
cjpvX2luX3NjcmVlbkNvbG9yLnZhbHVlKCkgYWx0ZXJuYXRlQ29sb3JzOm9faW5fYWx0ZXJuYXRl
Q29sb3JzIHByaW50Q29sb3I6b19pbl9wcmludENvbG9yLnZhbHVlKCldOworfQorCit9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlz
cGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24u
aAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9u
YWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgorCitf
X2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0
YWluLCBzZXR0ZXI9c2V0RGF0YWJhc2VIYW5kbGVyOikgaWQ8VGVzdFByb3RvY29sRGF0YWJhc2VE
b21haW5IYW5kbGVyPiBkYXRhYmFzZUhhbmRsZXI7CitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24ubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21t
YW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbiBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZp
Z3VyYXRpb24uaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENv
cmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKwordXNpbmcgbmFtZXNw
YWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRp
b24KK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwor
ICAgIGlkPFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4gX2RhdGFiYXNlSGFuZGxl
cjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJ
bnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0
XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNvbnRy
b2xsZXIpOworICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKKyAgICByZXR1cm4gc2VsZjsK
K30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgW19kYXRhYmFzZUhhbmRsZXIgcmVsZWFzZV07
CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistICh2b2lkKXNldERhdGFiYXNlSGFuZGxlcjoo
aWQ8VGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyPiloYW5kbGVyCit7CisgICAgaWYg
KGhhbmRsZXIgPT0gX2RhdGFiYXNlSGFuZGxlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgW19k
YXRhYmFzZUhhbmRsZXIgcmVsZWFzZV07CisgICAgX2RhdGFiYXNlSGFuZGxlciA9IFtoYW5kbGVy
IHJldGFpbl07CisKKyAgICBhdXRvIGFsdGVybmF0ZURpc3BhdGNoZXIgPSBtYWtlVW5pcXVlPE9i
akNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPihoYW5kbGVyKTsKKyAgICBhdXRv
IGFsdGVybmF0ZUFnZW50ID0gbWFrZVVuaXF1ZTxBbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudDxE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyLCBBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVyPj4oIkRhdGFiYXNlIl9zLCAqX2NvbnRyb2xsZXIsIFdURk1vdmUoYWx0ZXJuYXRlRGlzcGF0
Y2hlcikpOworICAgIF9jb250cm9sbGVyLT5hcHBlbmRFeHRyYUFnZW50KFdURk1vdmUoYWx0ZXJu
YXRlQWdlbnQpKTsKK30KKworLSAoaWQ8VGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVy
PilkYXRhYmFzZUhhbmRsZXIKK3sKKyAgICByZXR1cm4gX2RhdGFiYXNlSGFuZGxlcjsKK30KKwor
QGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorCisj
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1
cm4tcGFyYW1ldGVycy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2lu
ZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZl
bnREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwt
cmV0dXJuLXBhcmFtZXRlcnMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCisjaW1wb3J0IDxXZWJJ
bnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+CisKKworQGNsYXNzIFRlc3RQcm90b2Nv
bERhdGFiYXNlRXJyb3I7CisKK3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2Nv
bERhdGFiYXNlUHJpbWFyeUNvbG9ycykgeworICAgIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFy
eUNvbG9yc1JlZCwKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNHcmVlbiwK
KyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNCbHVlLAorfTsKKwordHlwZWRl
ZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9u
YWxQYXJhbWV0ZXJzUHJpbnRDb2xvcikgeworICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0
ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JDeWFuLAorICAgIFRlc3RQcm90b2NvbERh
dGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JNYWdlbnRhLAorICAg
IFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29s
b3JZZWxsb3csCisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJh
bWV0ZXJzUHJpbnRDb2xvckJsYWNrLAorfTsKKworCisKK3R5cGVkZWYgTlNfRU5VTShOU0ludGVn
ZXIsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50
Q29sb3IpIHsKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFt
ZXRlcnNQcmludENvbG9yQ3lhbiwKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxP
cHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yTWFnZW50YSwKKyAgICBUZXN0UHJvdG9jb2xEYXRh
YmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yWWVsbG93LAorICAgIFRl
c3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JC
bGFjaywKK307CisKK3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbERhdGFi
YXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvcikgeworICAgIFRlc3RQcm90
b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckN5YW4sCisg
ICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENv
bG9yTWFnZW50YSwKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFy
YW1ldGVyc1ByaW50Q29sb3JZZWxsb3csCisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRl
Tm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQmxhY2ssCit9OworCisKKwordHlwZWRlZiBO
U19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBh
cmFtZXRlcnNQcmludENvbG9yKSB7CisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9P
cHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQ3lhbiwKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFz
ZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JNYWdlbnRhLAorICAgIFRlc3RQ
cm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvclllbGxv
dywKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1By
aW50Q29sb3JCbGFjaywKK307CisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0
IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIDogUldJUHJvdG9jb2xK
U09OT2JqZWN0CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8
TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3Rv
Y29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OworLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlIGNvZGU6KGludCljb2Rl
OworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICpt
ZXNzYWdlOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgaW50
IGNvZGU7CitAZW5kCisKK0Bwcm90b2NvbCBUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRs
ZXIgPE5TT2JqZWN0PgorQG9wdGlvbmFsCistICh2b2lkKWV4ZWN1dGVBbGxPcHRpb25hbFBhcmFt
ZXRlcnNXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2Fs
bGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmNv
bHVtbk5hbWVzLCBOU1N0cmluZyAqKm5vdGVzLCBkb3VibGUgKnRpbWVzdGFtcCwgUldJUHJvdG9j
b2xKU09OT2JqZWN0ICoqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipwYXlsb2FkLCBp
bnQgKmRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipzcWxFcnJvciwgVGVz
dFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzICpzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5T
U3RyaW5nPiovICoqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVB
bGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yICpwcmludENvbG9yKSlzdWNjZXNzQ2FsbGJh
Y2sgY29sdW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKiljb2x1bW5OYW1lcyBub3Rl
czooTlNTdHJpbmcgKiopbm90ZXMgdGltZXN0YW1wOihkb3VibGUgKil0aW1lc3RhbXAgdmFsdWVz
OihSV0lQcm90b2NvbEpTT05PYmplY3QgKiopdmFsdWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNP
Tk9iamVjdCAqKilwYXlsb2FkIGRhdGFiYXNlSWQ6KGludCAqKWRhdGFiYXNlSWQgc3FsRXJyb3I6
KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKiopc3FsRXJyb3Igc2NyZWVuQ29sb3I6KFRlc3RQ
cm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqKXNjcmVlbkNvbG9yIGFsdGVybmF0ZUNvbG9y
czooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKWFsdGVybmF0ZUNvbG9ycyBwcmludENvbG9yOihU
ZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9y
ICopcHJpbnRDb2xvcjsKKy0gKHZvaWQpZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzV2l0aEVy
cm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nl
c3NDYWxsYmFjazoodm9pZCheKShOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmNvbHVtbk5hbWVzLCBO
U1N0cmluZyAqbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAq
dmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBU
ZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQ
cmltYXJ5Q29sb3JzIHNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmFsdGVybmF0
ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQ
cmludENvbG9yIHByaW50Q29sb3IpKXN1Y2Nlc3NDYWxsYmFjayBjb2x1bW5OYW1lczooTlNBcnJh
eS8qPE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMgbm90ZXM6KE5TU3RyaW5nICopbm90ZXMgdGlt
ZXN0YW1wOihkb3VibGUpdGltZXN0YW1wIHZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0ICop
dmFsdWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQgZGF0YWJhc2VJ
ZDooaW50KWRhdGFiYXNlSWQgc3FsRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKilz
cWxFcnJvciBzY3JlZW5Db2xvcjooVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzKXNj
cmVlbkNvbG9yIGFsdGVybmF0ZUNvbG9yczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopYWx0ZXJu
YXRlQ29sb3JzIHByaW50Q29sb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9u
YWxQYXJhbWV0ZXJzUHJpbnRDb2xvcilwcmludENvbG9yOworQGVuZAorCisKKworCisjaW1wb3J0
IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+CisK
KyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbEludGVybmFsLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5k
cy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbiBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2lt
cG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKKyNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8d3RmL0pT
T05WYWx1ZXMuaD4KKworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5o
CisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1y
ZXR1cm4tcGFyYW1ldGVycy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJ
UHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+CitPcHRpb25hbDxPYmpDRW51bVR5cGU+IGZy
b21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKKworaW5saW5lIFN0cmluZyB0
b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyB2YWx1ZSkK
K3sKKyAgICBzd2l0Y2godmFsdWUpIHsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlUHJp
bWFyeUNvbG9yc1JlZDoKKyAgICAgICAgcmV0dXJuICJyZWQiX3M7CisgICAgY2FzZSBUZXN0UHJv
dG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNHcmVlbjoKKyAgICAgICAgcmV0dXJuICJncmVlbiJf
czsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc0JsdWU6CisgICAg
ICAgIHJldHVybiAiYmx1ZSJfczsKKyAgICB9Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBPcHRp
b25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnM+IGZyb21Qcm90b2NvbFN0cmlu
Zyhjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSAicmVkIikKKyAgICAg
ICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc1JlZDsKKyAgICBpZiAo
dmFsdWUgPT0gImdyZWVuIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlUHJp
bWFyeUNvbG9yc0dyZWVuOworICAgIGlmICh2YWx1ZSA9PSAiYmx1ZSIpCisgICAgICAgIHJldHVy
biBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNCbHVlOworICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7Cit9CisKK2lubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9j
b2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yIHZhbHVlKQor
eworICAgIHN3aXRjaCh2YWx1ZSkgeworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVj
dXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckN5YW46CisgICAgICAgIHJldHVybiAi
Y3lhbiJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFs
UGFyYW1ldGVyc1ByaW50Q29sb3JNYWdlbnRhOgorICAgICAgICByZXR1cm4gIm1hZ2VudGEiX3M7
CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRl
cnNQcmludENvbG9yWWVsbG93OgorICAgICAgICByZXR1cm4gInllbGxvdyJfczsKKyAgICBjYXNl
IFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29s
b3JCbGFjazoKKyAgICAgICAgcmV0dXJuICJibGFjayJfczsKKyAgICB9Cit9CisKK3RlbXBsYXRl
PD4KK2lubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25h
bFBhcmFtZXRlcnNQcmludENvbG9yPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2
YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gImN5YW4iKQorICAgICAgICByZXR1cm4gVGVzdFBy
b3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckN5YW47
CisgICAgaWYgKHZhbHVlID09ICJtYWdlbnRhIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2Nv
bERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JNYWdlbnRhOwor
ICAgIGlmICh2YWx1ZSA9PSAieWVsbG93IikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERh
dGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JZZWxsb3c7CisgICAg
aWYgKHZhbHVlID09ICJibGFjayIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFz
ZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQmxhY2s7CisgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKK30KKworCisKK2lubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhU
ZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9y
IHZhbHVlKQoreworICAgIHN3aXRjaCh2YWx1ZSkgeworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0
YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckN5YW46CisgICAgICAg
IHJldHVybiAiY3lhbiJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFs
bE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JNYWdlbnRhOgorICAgICAgICByZXR1cm4gIm1h
Z2VudGEiX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25h
bFBhcmFtZXRlcnNQcmludENvbG9yWWVsbG93OgorICAgICAgICByZXR1cm4gInllbGxvdyJfczsK
KyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVy
c1ByaW50Q29sb3JCbGFjazoKKyAgICAgICAgcmV0dXJuICJibGFjayJfczsKKyAgICB9Cit9CisK
K3RlbXBsYXRlPD4KK2lubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVB
bGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gImN5YW4iKQorICAgICAgICByZXR1
cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRD
b2xvckN5YW47CisgICAgaWYgKHZhbHVlID09ICJtYWdlbnRhIikKKyAgICAgICAgcmV0dXJuIFRl
c3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JN
YWdlbnRhOworICAgIGlmICh2YWx1ZSA9PSAieWVsbG93IikKKyAgICAgICAgcmV0dXJuIFRlc3RQ
cm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JZZWxs
b3c7CisgICAgaWYgKHZhbHVlID09ICJibGFjayIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9j
b2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQmxhY2s7Cisg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKworaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3Ry
aW5nKFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRD
b2xvciB2YWx1ZSkKK3sKKyAgICBzd2l0Y2godmFsdWUpIHsKKyAgICBjYXNlIFRlc3RQcm90b2Nv
bERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckN5YW46CisgICAg
ICAgIHJldHVybiAiY3lhbiJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0
ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvck1hZ2VudGE6CisgICAgICAgIHJldHVybiAi
bWFnZW50YSJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9u
YWxQYXJhbWV0ZXJzUHJpbnRDb2xvclllbGxvdzoKKyAgICAgICAgcmV0dXJuICJ5ZWxsb3ciX3M7
CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVy
c1ByaW50Q29sb3JCbGFjazoKKyAgICAgICAgcmV0dXJuICJibGFjayJfczsKKyAgICB9Cit9CisK
K3RlbXBsYXRlPD4KK2lubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVO
b09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3I+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBT
dHJpbmcmIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSAiY3lhbiIpCisgICAgICAgIHJldHVy
biBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29s
b3JDeWFuOworICAgIGlmICh2YWx1ZSA9PSAibWFnZW50YSIpCisgICAgICAgIHJldHVybiBUZXN0
UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JNYWdl
bnRhOworICAgIGlmICh2YWx1ZSA9PSAieWVsbG93IikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90
b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvclllbGxvdzsK
KyAgICBpZiAodmFsdWUgPT0gImJsYWNrIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERh
dGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckJsYWNrOworICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7Cit9CisKKworCitpbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJp
bmcoVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENv
bG9yIHZhbHVlKQoreworICAgIHN3aXRjaCh2YWx1ZSkgeworICAgIGNhc2UgVGVzdFByb3RvY29s
RGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQ3lhbjoKKyAgICAg
ICAgcmV0dXJuICJjeWFuIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRl
Tm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yTWFnZW50YToKKyAgICAgICAgcmV0dXJuICJt
YWdlbnRhIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25h
bFBhcmFtZXRlcnNQcmludENvbG9yWWVsbG93OgorICAgICAgICByZXR1cm4gInllbGxvdyJfczsK
KyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJz
UHJpbnRDb2xvckJsYWNrOgorICAgICAgICByZXR1cm4gImJsYWNrIl9zOworICAgIH0KK30KKwor
dGVtcGxhdGU8PgoraW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5v
T3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvcj4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0
cmluZyYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09ICJjeWFuIikKKyAgICAgICAgcmV0dXJu
IFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xv
ckN5YW47CisgICAgaWYgKHZhbHVlID09ICJtYWdlbnRhIikKKyAgICAgICAgcmV0dXJuIFRlc3RQ
cm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvck1hZ2Vu
dGE7CisgICAgaWYgKHZhbHVlID09ICJ5ZWxsb3ciKQorICAgICAgICByZXR1cm4gVGVzdFByb3Rv
Y29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yWWVsbG93Owor
ICAgIGlmICh2YWx1ZSA9PSAiYmxhY2siKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0
YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQmxhY2s7CisgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKK30KKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKworIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5q
c29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgor
I2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9y
L1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3Bl
Y3RvcjsKKworQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKERhdGFiYXNl
RG9tYWluKQorCisrICh2b2lkKV9wYXJzZURhdGFiYXNlSWQ6KE5TTnVtYmVyICoqKW91dFZhbHVl
IGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworKyAodm9pZClfcGFyc2VQcmltYXJ5Q29sb3JzOihO
U051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3Bh
cnNlQ29sb3JMaXN0OihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxv
YWQ6KGlkKXBheWxvYWQ7CisrICh2b2lkKV9wYXJzZUVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFz
ZUVycm9yICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworCitAZW5kCisKK0Bp
bXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKERhdGFiYXNlRG9tYWlu
KQorCisrICh2b2lkKV9wYXJzZURhdGFiYXNlSWQ6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21Q
YXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShw
YXlsb2FkLCBbTlNOdW1iZXIgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSAoTlNOdW1iZXIgKilw
YXlsb2FkOworfQorCisrICh2b2lkKV9wYXJzZVByaW1hcnlDb2xvcnM6KE5TTnVtYmVyICoqKW91
dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9CQURfVFlQRShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKKyAgICBPcHRpb25hbDxUZXN0
UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnM+IHJlc3VsdCA9IEluc3BlY3Rvcjo6ZnJvbVBy
b3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycz4ocGF5bG9hZCk7
CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfRU5VTV9WQUxVRShyZXN1bHQsIEAiUHJpbWFy
eUNvbG9ycyIpOworICAgICpvdXRWYWx1ZSA9IEAocmVzdWx0LnZhbHVlKCkpOworfQorCisrICh2
b2lkKV9wYXJzZUNvbG9yTGlzdDooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKW91dFZhbHVlIGZy
b21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQ
RShwYXlsb2FkLCBbTlNBcnJheS8qPE5TU3RyaW5nPiovIGNsYXNzXSk7CisgICAgKm91dFZhbHVl
ID0gKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKXBheWxvYWQ7Cit9CisKKysgKHZvaWQpX3BhcnNl
RXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6
KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQs
IFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbERh
dGFiYXNlRXJyb3IgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKK30KKworQGVuZAor
CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5q
c29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVz
dFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0
ZS5oPgorI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVz
Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0
UHJvdG9jb2xEYXRhYmFzZUVycm9yCisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6
KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQKK3sKKyAgICBp
ZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAIm1lc3NhZ2UiXSwg
QCJtZXNzYWdlIik7CisgICAgc2VsZi5tZXNzYWdlID0gcGF5bG9hZFtAIm1lc3NhZ2UiXTsKKwor
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImNvZGUi
XSwgQCJjb2RlIik7CisgICAgc2VsZi5jb2RlID0gW3BheWxvYWRbQCJjb2RlIl0gaW50ZWdlclZh
bHVlXTsKKworICAgIHJldHVybiBzZWxmOworfQorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJv
dG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9iamVjdAoreworICAgIGlmICgh
KHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmplY3QgdG9KU09OT2JqZWN0XS5n
ZXQoKV0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0g
KGluc3RhbmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBjb2RlOihp
bnQpY29kZQoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1
cm4gbmlsOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShtZXNz
YWdlLCBAIm1lc3NhZ2UiKTsKKworICAgIHNlbGYubWVzc2FnZSA9IG1lc3NhZ2U7CisgICAgc2Vs
Zi5jb2RlID0gY29kZTsKKworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXNldE1lc3Nh
Z2U6KE5TU3RyaW5nICopbWVzc2FnZQoreworICAgIFtzdXBlciBzZXRTdHJpbmc6bWVzc2FnZSBm
b3JLZXk6QCJtZXNzYWdlIl07Cit9CisKKy0gKE5TU3RyaW5nICopbWVzc2FnZQoreworICAgIHJl
dHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAibWVzc2FnZSJdOworfQorCistICh2b2lkKXNldENv
ZGU6KGludCljb2RlCit7CisgICAgW3N1cGVyIHNldEludGVnZXI6Y29kZSBmb3JLZXk6QCJjb2Rl
Il07Cit9CisKKy0gKGludCljb2RlCit7CisgICAgcmV0dXJuIFtzdXBlciBpbnRlZ2VyRm9yS2V5
OkAiY29kZSJdOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBl
cy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24tcmVzdWx0
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVk
L2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24tcmVzdWx0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY2
OWI2ZGU3ZTFhOWI5ZWQ5M2JiZjkwNTNjMjE0NjM5OWMwMWFkN2YKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
ZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbi1yZXN1bHQKQEAgLTAsMCArMSwxMjAy
IEBACisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzLmluCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZv
cm0uanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKy8vIE5ldHdv
cmsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIk5ldHdvcmsiLCBudWxsKTsKKyNp
ZiBQTEFURk9STShNQUMpCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiTmV0d29y
ay5sb2FkUmVzb3VyY2UiLCBudWxsLCBbXSwgW10pOworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykK
KyNpZiBQTEFURk9STShNQUMpCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnQoIk5ldHdv
cmsucmVzb3VyY2VMb2FkZWQiLCBudWxsLCBbXSk7CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQor
SW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rlck5ldHdvcmtEaXNwYXRjaGVyID0gSW5zcGVjdG9yQmFj
a2VuZC5yZWdpc3RlckRpc3BhdGNoZXIuYmluZChJbnNwZWN0b3JCYWNrZW5kLCAiTmV0d29yayIp
OworSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiTmV0d29yayIsIG51bGwpOworIyMj
IEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMuaW4KKworIyMjIEJlZ2luIEZp
bGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2lmIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCisjaW5jbHVkZSAiVGVzdFBy
b3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5k
Um91dGVyLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihS
ZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRj
aGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQorICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNr
ZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7
IH0KK3ByaXZhdGU6CisgICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNw
YXRjaGVyOworfTsKKworCitjbGFzcyBBbHRlcm5hdGVOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIg
OiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHZpcnR1
YWwgfkFsdGVybmF0ZU5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQorI2lmIFBMQVRGT1JN
KE1BQykKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgY2FsbElkKSA9IDA7Cisj
ZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisK
KyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyMjIyBF
bmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0
UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCisjaWYg
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCitjbGFzcyBBbHRlcm5hdGVO
ZXR3b3JrQmFja2VuZERpc3BhdGNoZXI7CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCisKK2NsYXNzIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIgeworcHVibGljOgorI2lmIFBMQVRGT1JNKE1BQykKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJl
c291cmNlKEVycm9yU3RyaW5nJikgPSAwOworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKK3Byb3Rl
Y3RlZDoKKyAgICB2aXJ0dWFsIH5OZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7Cit9
OworCitjbGFzcyBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxl
bWVudGFsQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8TmV0d29y
a0JhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBOZXR3b3JrQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJ
ZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkgZmlu
YWw7Citwcml2YXRlOgorI2lmIFBMQVRGT1JNKE1BQykKKyAgICB2b2lkIGxvYWRSZXNvdXJjZShs
b25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyNlbmRp
ZiAvLyBQTEFURk9STShNQUMpCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCitwdWJsaWM6CisgICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0
ZU5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVy
bmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9Citwcml2YXRlOgorICAgIEFs
dGVybmF0ZU5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlciogbV9hbHRlcm5hdGVEaXNwYXRjaGVyIHsg
bnVsbHB0ciB9OworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENI
RVJTKQorcHJpdmF0ZToKKyAgICBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3Bh
dGNoZXImLCBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgTmV0d29ya0Jh
Y2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2VudCB7IG51bGxwdHIgfTsKK307CisKK30gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJz
LmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0u
anNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0
Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCisjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5o
IgorI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCitu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKKworTmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6
fk5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KKworUmVmPE5ldHdvcmtCYWNr
ZW5kRGlzcGF0Y2hlcj4gTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoQmFja2VuZERp
c3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyKiBhZ2VudCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBOZXR3b3JrQmFja2VuZERp
c3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIsIGFnZW50KSk7Cit9CisKK05ldHdvcmtCYWNrZW5k
RGlzcGF0Y2hlcjo6TmV0d29ya0JhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBi
YWNrZW5kRGlzcGF0Y2hlciwgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQp
CisgICAgOiBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikK
KyAgICAsIG1fYWdlbnQoYWdlbnQpCit7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0
ZXJEaXNwYXRjaGVyRm9yRG9tYWluKCJOZXR3b3JrIl9zLCB0aGlzKTsKK30KKwordm9pZCBOZXR3
b3JrQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJp
bmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQoreworICAgIFJlZjxOZXR3
b3JrQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOworCisgICAgUmVmUHRyPEpTT046
Ok9iamVjdD4gcGFyYW1ldGVyczsKKyAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywg
cGFyYW1ldGVycyk7CisKKyNpZiBQTEFURk9STShNQUMpCisgICAgaWYgKG1ldGhvZCA9PSAibG9h
ZFJlc291cmNlIikgeworICAgICAgICBsb2FkUmVzb3VyY2UocmVxdWVzdElkLCBXVEZNb3ZlKHBh
cmFtZXRlcnMpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZiAvLyBQTEFURk9STShN
QUMpCisKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tl
bmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrLiIgKyBtZXRob2QgKyAiJyB3
YXMgbm90IGZvdW5kIik7Cit9CisKKyNpZiBQTEFURk9STShNQUMpCit2b2lkIE5ldHdvcmtCYWNr
ZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6
T2JqZWN0PiYmKQoreworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQorICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKKyAgICAgICAgbV9hbHRlcm5hdGVE
aXNwYXRjaGVyLT5sb2FkUmVzb3VyY2UocmVxdWVzdElkKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKwor
ICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpT
T046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9hZ2VudC0+bG9hZFJlc291cmNlKGVycm9yKTsK
KworICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOworICAgIGVs
c2UKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNr
ZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKK30KKyNlbmRpZiAv
LyBQTEFURk9STShNQUMpCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZp
bGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJv
bnRlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVm
aW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2Jq
ZWN0cy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBGcm9udGVuZFJv
dXRlcjsKKworY2xhc3MgTmV0d29ya0Zyb250ZW5kRGlzcGF0Y2hlciB7CisgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgTmV0d29ya0Zyb250ZW5kRGlzcGF0Y2hlcihG
cm9udGVuZFJvdXRlciYgZnJvbnRlbmRSb3V0ZXIpIDogbV9mcm9udGVuZFJvdXRlcihmcm9udGVu
ZFJvdXRlcikgeyB9CisjaWYgUExBVEZPUk0oTUFDKQorICAgIHZvaWQgcmVzb3VyY2VMb2FkZWQo
KTsKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCitwcml2YXRlOgorICAgIEZyb250ZW5kUm91dGVy
JiBtX2Zyb250ZW5kUm91dGVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMg
RW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRl
c3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVz
dEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCitu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKKworI2lmIFBMQVRGT1JNKE1BQykKK3ZvaWQgTmV0d29ya0Zy
b250ZW5kRGlzcGF0Y2hlcjo6cmVzb3VyY2VMb2FkZWQoKQoreworICAgIFJlZjxKU09OOjpPYmpl
Y3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBqc29uTWVzc2Fn
ZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJOZXR3b3JrLnJlc291cmNlTG9hZGVkIl9zKTsKKwor
ICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmco
KSk7Cit9CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KKyNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK25hbWVzcGFjZSBQcm90
b2NvbCB7CisKKworCisvLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KK25hbWVzcGFjZSBOZXR3b3Jr
IHsKKyNpZiBQTEFURk9STShNQUMpCitjbGFzcyBOZXR3b3JrRXJyb3I7CisjZW5kaWYgLy8gUExB
VEZPUk0oTUFDKQorfSAvLyBOZXR3b3JrCisvLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMu
CisKKworCisKK25hbWVzcGFjZSBOZXR3b3JrIHsKKworI2lmIFBMQVRGT1JNKE1BQykKK2NsYXNz
IE5ldHdvcmtFcnJvciA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKK3B1YmxpYzoKKyAgICBl
bnVtIHsKKyAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAorICAgICAgICBNZXNzYWdlU2V0ID0gMSA8
PCAwLAorICAgICAgICBDb2RlU2V0ID0gMSA8PCAxLAorICAgICAgICBBbGxGaWVsZHNTZXQgPSAo
TWVzc2FnZVNldCB8IENvZGVTZXQpCisgICAgfTsKKworICAgIHRlbXBsYXRlPGludCBTVEFURT4K
KyAgICBjbGFzcyBCdWlsZGVyIHsKKyAgICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8SlNPTjo6
T2JqZWN0PiBtX3Jlc3VsdDsKKworICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxT
VEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
KnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CisgICAgICAg
IH0KKworICAgICAgICBCdWlsZGVyKFJlZjwvKk5ldHdvcmtFcnJvciovSlNPTjo6T2JqZWN0PiYm
IG9iamVjdCkKKyAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQorICAgICAg
ICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVp
bGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKKyAgICAgICAgfQorICAgICAgICBmcmll
bmQgY2xhc3MgTmV0d29ya0Vycm9yOworICAgIHB1YmxpYzoKKworICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgTWVzc2FnZVNldD4mIHNldE1lc3NhZ2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE1lc3NhZ2VTZXQpLCBw
cm9wZXJ0eV9tZXNzYWdlX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRT
dHJpbmcoIm1lc3NhZ2UiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8
TWVzc2FnZVNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2Rl
U2V0PiYgc2V0Q29kZShpbnQgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKCEoU1RBVEUgJiBDb2RlU2V0KSwgcHJvcGVydHlfY29kZV9hbHJlYWR5X3NldCk7Cisg
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcigiY29kZSJfcywgdmFsdWUpOworICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb2RlU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAg
UmVmPE5ldHdvcmtFcnJvcj4gcmVsZWFzZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7Cisg
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoTmV0d29ya0Vycm9yKSA9PSBzaXplb2Yo
SlNPTjo6T2JqZWN0KSwgY2Fubm90X2Nhc3QpOworCisgICAgICAgICAgICBSZWY8SlNPTjo6T2Jq
ZWN0PiBqc29uUmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKKyAgICAgICAgICAg
IGF1dG8gcmVzdWx0ID0gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8TmV0d29ya0Vycm9y
Pio+KCZqc29uUmVzdWx0KSk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9
CisgICAgfTsKKworICAgIC8qCisgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgorICAgICAq
IFJlZjxOZXR3b3JrRXJyb3I+IHJlc3VsdCA9IE5ldHdvcmtFcnJvcjo6Y3JlYXRlKCkKKyAgICAg
KiAgICAgLnNldE1lc3NhZ2UoLi4uKQorICAgICAqICAgICAuc2V0Q29kZSguLi4pCisgICAgICog
ICAgIC5yZWxlYXNlKCk7CisgICAgICovCisgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+
IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKSk7CisgICAgfQorfTsKKyNlbmRpZiAvLyBQTEFURk9STShNQUMp
CisKK30gLy8gTmV0d29yaworCisKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAor
CisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKworI2luY2x1ZGUgPHd0Zi9PcHRp
b25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90
b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xPYmplY3RzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERp
c3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9u
cy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tl
bmREaXNwYXRjaGVycy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworQHByb3RvY29s
IFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5IYW5kbGVyOworCituYW1lc3BhY2UgSW5zcGVjdG9y
IHsKKworCitjbGFzcyBPYmpDSW5zcGVjdG9yTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyIGZpbmFs
IDogcHVibGljIEFsdGVybmF0ZU5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlciB7CisgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgT2JqQ0luc3BlY3Rvck5ldHdvcmtCYWNr
ZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluSGFuZGxlcj4gaGFuZGxl
cikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQorI2lmIFBMQVRGT1JNKE1BQykKKyAgICB2b2lk
IGxvYWRSZXNvdXJjZShsb25nIHJlcXVlc3RJZCkgZmluYWw7CisjZW5kaWYgLy8gUExBVEZPUk0o
TUFDKQorcHJpdmF0ZToKKyAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sTmV0d29ya0RvbWFp
bkhhbmRsZXI+PiBtX2RlbGVnYXRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisK
KyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcu
aCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVk
ZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorCituYW1lc3BhY2UgSW5z
cGVjdG9yIHsKKworI2lmIFBMQVRGT1JNKE1BQykKK3ZvaWQgT2JqQ0luc3BlY3Rvck5ldHdvcmtC
YWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkKQoreworICAgIGlm
ICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2VX
aXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsKKyAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRj
aGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrLmxvYWRSZXNvdXJjZScgd2FzIG5vdCBmb3Vu
ZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0
cmluZyAqZXJyb3IpIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9j
b2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3Ip
OworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAg
IH07CisKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeeworICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBm
YWxzZSk7CisgICAgfTsKKworICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZVdpdGhFcnJvckNh
bGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107Cit9
CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKwor
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3Iv
VGVzdFByb3RvY29sLmg+CisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0Iikp
KQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKK0Bwcm9w
ZXJ0eSAobm9uYXRvbWljLCByZXRhaW4sIHNldHRlcj1zZXROZXR3b3JrSGFuZGxlcjopIGlkPFRl
c3RQcm90b2NvbE5ldHdvcmtEb21haW5IYW5kbGVyPiBuZXR3b3JrSGFuZGxlcjsKK0Bwcm9wZXJ0
eSAobm9uYXRvbWljLCByZWFkb25seSkgVGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkV2ZW50RGlz
cGF0Y2hlciAqbmV0d29ya0V2ZW50RGlzcGF0Y2hlcjsKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sQ29uZmlndXJhdGlvbi5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRl
ZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCisK
KyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xC
YWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURp
c3BhdGNoYWJsZUFnZW50Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUlu
c3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7
CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCit7CisgICAgQXVn
bWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKKyAgICBpZDxUZXN0UHJv
dG9jb2xOZXR3b3JrRG9tYWluSGFuZGxlcj4gX25ldHdvcmtIYW5kbGVyOworICAgIFRlc3RQcm90
b2NvbE5ldHdvcmtEb21haW5FdmVudERpc3BhdGNoZXIgKl9uZXR3b3JrRXZlbnREaXNwYXRjaGVy
OworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUlu
c3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRd
OworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJv
bGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVybiBzZWxmOwor
fQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbX25ldHdvcmtIYW5kbGVyIHJlbGVhc2VdOwor
ICAgIFtfbmV0d29ya0V2ZW50RGlzcGF0Y2hlciByZWxlYXNlXTsKKyAgICBbc3VwZXIgZGVhbGxv
Y107Cit9CisKKy0gKHZvaWQpc2V0TmV0d29ya0hhbmRsZXI6KGlkPFRlc3RQcm90b2NvbE5ldHdv
cmtEb21haW5IYW5kbGVyPiloYW5kbGVyCit7CisgICAgaWYgKGhhbmRsZXIgPT0gX25ldHdvcmtI
YW5kbGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBbX25ldHdvcmtIYW5kbGVyIHJlbGVhc2Vd
OworICAgIF9uZXR3b3JrSGFuZGxlciA9IFtoYW5kbGVyIHJldGFpbl07CisKKyAgICBhdXRvIGFs
dGVybmF0ZURpc3BhdGNoZXIgPSBtYWtlVW5pcXVlPE9iakNJbnNwZWN0b3JOZXR3b3JrQmFja2Vu
ZERpc3BhdGNoZXI+KGhhbmRsZXIpOworICAgIGF1dG8gYWx0ZXJuYXRlQWdlbnQgPSBtYWtlVW5p
cXVlPEFsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50PE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlciwg
QWx0ZXJuYXRlTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyPj4oIk5ldHdvcmsiX3MsICpfY29udHJv
bGxlciwgV1RGTW92ZShhbHRlcm5hdGVEaXNwYXRjaGVyKSk7CisgICAgX2NvbnRyb2xsZXItPmFw
cGVuZEV4dHJhQWdlbnQoV1RGTW92ZShhbHRlcm5hdGVBZ2VudCkpOworfQorCistIChpZDxUZXN0
UHJvdG9jb2xOZXR3b3JrRG9tYWluSGFuZGxlcj4pbmV0d29ya0hhbmRsZXIKK3sKKyAgICByZXR1
cm4gX25ldHdvcmtIYW5kbGVyOworfQorCistIChUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluRXZl
bnREaXNwYXRjaGVyICopbmV0d29ya0V2ZW50RGlzcGF0Y2hlcgoreworICAgIGlmICghX25ldHdv
cmtFdmVudERpc3BhdGNoZXIpCisgICAgICAgIF9uZXR3b3JrRXZlbnREaXNwYXRjaGVyID0gW1tU
ZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluRXZlbnREaXNwYXRjaGVyIGFsbG9jXSBpbml0V2l0aENv
bnRyb2xsZXI6X2NvbnRyb2xsZXJdOworICAgIHJldHVybiBfbmV0d29ya0V2ZW50RGlzcGF0Y2hl
cjsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
bi5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBs
YXRmb3JtLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1w
b3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVz
cGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xOZXR3b3JrRG9t
YWluRXZlbnREaXNwYXRjaGVyCit7CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVy
KiBfY29udHJvbGxlcjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjoo
QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCit7CisgICAgc2VsZiA9
IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAg
QVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKKyAgICBy
ZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClyZXNvdXJjZUxvYWRlZAoreworICAgIGNvbnN0IEZy
b250ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29udHJvbGxlci0+ZnJvbnRlbmRSb3V0ZXIoKTsKKwor
ICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KTsKKyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJOZXR3b3JrLnJlc291
cmNlTG9hZGVkIl9zKTsKKyAgICByb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05T
dHJpbmcoKSk7Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50
RGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0u
anNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPEZv
dW5kYXRpb24vRm91bmRhdGlvbi5oPgorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9j
b2xKU09OT2JqZWN0Lmg+CisKKworI2lmIFBMQVRGT1JNKE1BQykKK0BjbGFzcyBUZXN0UHJvdG9j
b2xOZXR3b3JrRXJyb3I7CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorCisKKworI2lmIFBMQVRG
T1JNKE1BQykKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVy
ZmFjZSBUZXN0UHJvdG9jb2xOZXR3b3JrRXJyb3IgOiBSV0lQcm90b2NvbEpTT05PYmplY3QKKy0g
KGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBp
ZD4gKilwYXlsb2FkOworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJX
SVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7CistIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZTooaW50KWNvZGU7CisvKiByZXF1aXJl
ZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKm1lc3NhZ2U7CisvKiBy
ZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQgY29kZTsKK0BlbmQK
KyNlbmRpZiAvLyBQTEFURk9STShNQUMpCisKK0Bwcm90b2NvbCBUZXN0UHJvdG9jb2xOZXR3b3Jr
RG9tYWluSGFuZGxlciA8TlNPYmplY3Q+CitAb3B0aW9uYWwKKyNpZiBQTEFURk9STShNQUMpCist
ICh2b2lkKWxvYWRSZXNvdXJjZVdpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICpl
cnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikodm9pZCkpc3VjY2Vz
c0NhbGxiYWNrOworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKK0BlbmQKKworX19hdHRyaWJ1dGVf
XygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbE5ldHdv
cmtEb21haW5FdmVudERpc3BhdGNoZXIgOiBOU09iamVjdAorLSAodm9pZClyZXNvdXJjZUxvYWRl
ZDsKK0BlbmQKKworCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBh
dGliaWxpdHlPYmplY3RzLmg+CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgi
CisjaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgorI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDx3
dGYvSlNPTlZhbHVlcy5oPgorCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5F
dmVudERpc3BhdGNoZXIgKFByaXZhdGUpCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9s
bGVyOihJbnNwZWN0b3I6OkF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxl
cjsKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbiBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90
b2NvbC5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9u
cy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0Vu
dW1UeXBlPgorT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3Qg
U3RyaW5nJiB2YWx1ZSk7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorCisjIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbiBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90
b2NvbFR5cGVQYXJzZXIuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05P
YmplY3RQcml2YXRlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbnRlcmZh
Y2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChOZXR3b3JrRG9tYWluKQorCisjaWYgUExB
VEZPUk0oTUFDKQorKyAodm9pZClfcGFyc2VOZXR3b3JrRXJyb3I6KFRlc3RQcm90b2NvbE5ldHdv
cmtFcnJvciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKyNlbmRpZiAvLyBQ
TEFURk9STShNQUMpCisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucyAoTmV0d29ya0RvbWFpbikKKworI2lmIFBMQVRGT1JNKE1BQykKKysgKHZvaWQp
X3BhcnNlTmV0d29ya0Vycm9yOihUZXN0UHJvdG9jb2xOZXR3b3JrRXJyb3IgKiopb3V0VmFsdWUg
ZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9U
WVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSBbW1Rl
c3RQcm90b2NvbE5ldHdvcmtFcnJvciBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOwor
fQorI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xUeXBlcy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25z
LXdpdGgtbWFjLXBsYXRmb3JtLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90
b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2lt
cG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKwor
I2lmIFBMQVRGT1JNKE1BQykKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xOZXR3b3JrRXJy
b3IKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25h
cnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIg
aW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9S
RVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AibWVzc2FnZSJdLCBAIm1lc3NhZ2UiKTsKKyAgICBz
ZWxmLm1lc3NhZ2UgPSBwYXlsb2FkW0AibWVzc2FnZSJdOworCisgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiY29kZSJdLCBAImNvZGUiKTsKKyAgICBz
ZWxmLmNvZGUgPSBbcGF5bG9hZFtAImNvZGUiXSBpbnRlZ2VyVmFsdWVdOworCisgICAgcmV0dXJu
IHNlbGY7Cit9CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJv
dG9jb2xKU09OT2JqZWN0ICopb2JqZWN0Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0
V2l0aEpTT05PYmplY3Q6W29iamVjdCB0b0pTT05PYmplY3RdLmdldCgpXSkpCisgICAgICAgIHJl
dHVybiBuaWw7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlIGNvZGU6KGludCljb2RlCit7CisgICAgaWYg
KCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBUSFJP
V19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKG1lc3NhZ2UsIEAibWVzc2FnZSIpOwor
CisgICAgc2VsZi5tZXNzYWdlID0gbWVzc2FnZTsKKyAgICBzZWxmLmNvZGUgPSBjb2RlOworCisg
ICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpc2V0TWVzc2FnZTooTlNTdHJpbmcgKiltZXNz
YWdlCit7CisgICAgW3N1cGVyIHNldFN0cmluZzptZXNzYWdlIGZvcktleTpAIm1lc3NhZ2UiXTsK
K30KKworLSAoTlNTdHJpbmcgKiltZXNzYWdlCit7CisgICAgcmV0dXJuIFtzdXBlciBzdHJpbmdG
b3JLZXk6QCJtZXNzYWdlIl07Cit9CisKKy0gKHZvaWQpc2V0Q29kZTooaW50KWNvZGUKK3sKKyAg
ICBbc3VwZXIgc2V0SW50ZWdlcjpjb2RlIGZvcktleTpAImNvZGUiXTsKK30KKworLSAoaW50KWNv
ZGUKK3sKKyAgICByZXR1cm4gW3N1cGVyIGludGVnZXJGb3JLZXk6QCJjb2RlIl07Cit9CisKK0Bl
bmQKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbi1yZXN1bHQg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
ZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NzYwMzdiNDBm
MGY1MGFhOTgwNDZhMTQyMjI2YzBkYjFlNWNlN2ZiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RvbWFpbi1k
ZWJ1Z2dhYmxlVHlwZXMuanNvbi1yZXN1bHQKQEAgLTAsMCArMSwxMDExIEBACisjIyMgQmVnaW4g
RmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzLmluCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworLy8gRG9tYWluCitJbnNwZWN0b3JCYWNrZW5kLnJl
Z2lzdGVyRG9tYWluKCJEb21haW4iLCBudWxsKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJD
b21tYW5kKCJEb21haW4uQ29tbWFuZCIsIG51bGwsIFtdLCBbXSk7CitJbnNwZWN0b3JCYWNrZW5k
LnJlZ2lzdGVyRXZlbnQoIkRvbWFpbi5FdmVudCIsIG51bGwsIFtdKTsKK0luc3BlY3RvckJhY2tl
bmQucmVnaXN0ZXJEb21haW5EaXNwYXRjaGVyID0gSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRp
c3BhdGNoZXIuYmluZChJbnNwZWN0b3JCYWNrZW5kLCAiRG9tYWluIik7CitJbnNwZWN0b3JCYWNr
ZW5kLmFjdGl2YXRlRG9tYWluKCJEb21haW4iLCBbIndlYi1wYWdlIl0pOworIyMjIEVuZCBGaWxl
OiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMuaW4KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Cisj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsK
K3B1YmxpYzoKKyAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlz
cGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRp
c3BhdGNoZXIpOyB9CisgICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkg
Y29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQorcHJpdmF0ZToKKyAg
ICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Cit9OworCisK
K2NsYXNzIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5BbHRlcm5hdGVEb21h
aW5CYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBDb21tYW5kKGxvbmcg
Y2FsbElkKSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8v
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorIyMjIEVuZCBGaWxlOiBU
ZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRv
bWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5o
IgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Ig
eworCit0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKworI2lmIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQorY2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3Bh
dGNoZXI7CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
CisKK2NsYXNzIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CitwdWJsaWM6CisgICAg
dmlydHVhbCB2b2lkIENvbW1hbmQoRXJyb3JTdHJpbmcmKSA9IDA7Citwcm90ZWN0ZWQ6CisgICAg
dmlydHVhbCB+RG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7Cit9OworCitjbGFzcyBE
b21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5k
RGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxEb21haW5CYWNrZW5kRGlzcGF0
Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyKik7CisgICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5n
JiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkgZmluYWw7Citwcml2YXRlOgor
ICAgIHZvaWQgQ29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBw
YXJhbWV0ZXJzKTsKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
K3B1YmxpYzoKKyAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlRG9tYWlu
QmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNw
YXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQorcHJpdmF0ZToKKyAgICBBbHRlcm5hdGVE
b21haW5CYWNrZW5kRGlzcGF0Y2hlciogbV9hbHRlcm5hdGVEaXNwYXRjaGVyIHsgbnVsbHB0ciB9
OworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorcHJp
dmF0ZToKKyAgICBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYsIERv
bWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIERvbWFpbkJhY2tlbmREaXNwYXRj
aGVySGFuZGxlciogbV9hZ2VudCB7IG51bGxwdHIgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNp
bmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyNpbmNs
dWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCisjZW5kaWYgLy8gRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKK25hbWVzcGFjZSBJbnNwZWN0b3Ig
eworCitEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5Eb21haW5CYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXIoKSB7IH0KKworUmVmPERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBEb21haW5C
YWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0
Y2hlciwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKK3sKKyAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hl
ciwgYWdlbnQpKTsKK30KKworRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkRvbWFpbkJhY2tlbmRE
aXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgRG9tYWluQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKKyAgICA6IFN1cHBsZW1lbnRhbEJhY2tlbmRE
aXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQorICAgICwgbV9hZ2VudChhZ2VudCkKK3sKKyAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oIkRvbWFp
biJfcywgdGhpcyk7Cit9CisKK3ZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNo
KGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4m
JiBtZXNzYWdlKQoreworICAgIFJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgq
dGhpcyk7CisKKyAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOworICAgIG1lc3Nh
Z2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsKKworICAgIGlmIChtZXRob2Qg
PT0gIkNvbW1hbmQiKSB7CisgICAgICAgIENvbW1hbmQocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFt
ZXRlcnMpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5k
LCAiJ0RvbWFpbi4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOworfQorCit2b2lkIERv
bWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiYmKQoreworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENI
RVJTKQorICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKKyAgICAgICAgbV9hbHRlcm5h
dGVEaXNwYXRjaGVyLT5Db21tYW5kKHJlcXVlc3RJZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyAg
ICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYWdlbnQtPkNvbW1hbmQoZXJyb3IpOworCisgICAg
aWYgKCFlcnJvci5sZW5ndGgoKSkKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJl
c3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7CisgICAgZWxzZQorICAg
ICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNw
YXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAor
CisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbiBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Igewor
CitjbGFzcyBGcm9udGVuZFJvdXRlcjsKKworY2xhc3MgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVy
IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBEb21haW5Gcm9u
dGVuZERpc3BhdGNoZXIoRnJvbnRlbmRSb3V0ZXImIGZyb250ZW5kUm91dGVyKSA6IG1fZnJvbnRl
bmRSb3V0ZXIoZnJvbnRlbmRSb3V0ZXIpIHsgfQorICAgIHZvaWQgRXZlbnQoKTsKK3ByaXZhdGU6
CisgICAgRnJvbnRlbmRSb3V0ZXImIG1fZnJvbnRlbmRSb3V0ZXI7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAor
CisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3ZvaWQgRG9tYWluRnJvbnRlbmRE
aXNwYXRjaGVyOjpFdmVudCgpCit7CisgICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2Ug
PSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1l
dGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7CisKKyAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRF
dmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKwor
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbiBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFByb3Rv
Y29sIHsKKworCisKKworCisKKworCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgK
KworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKworI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7
CisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAor
Cit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xP
YmplY3RzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNo
ZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJs
ZVR5cGVzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJz
Lmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCitAcHJvdG9jb2wgVGVzdFByb3RvY29s
RG9tYWluRG9tYWluSGFuZGxlcjsKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworY2xhc3Mg
T2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVy
bmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKK3B1YmxpYzoKKyAgICBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXIoaWQ8
VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0g
aGFuZGxlcjsgfQorICAgIHZvaWQgQ29tbWFuZChsb25nIHJlcXVlc3RJZCkgZmluYWw7Citwcml2
YXRlOgorICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPj4g
bV9kZWxlZ2F0ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQ
cm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sSW50
ZXJuYWwuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbmNs
dWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordm9pZCBP
YmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9uZyByZXF1ZXN0
SWQpCit7CisgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9y
KENvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsKKyAgICAgICAg
YmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tl
bmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uQ29tbWFuZCcgd2FzIG5vdCBm
b3VuZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3Jz
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZCBlcnJvckNhbGxiYWNrID0gXihO
U1N0cmluZyAqZXJyb3IpIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJv
dG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJy
b3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwor
ICAgIH07CisKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeeworICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
LCBmYWxzZSk7CisgICAgfTsKKworICAgIFttX2RlbGVnYXRlIENvbW1hbmRXaXRoRXJyb3JDYWxs
YmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOworfQor
Cit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xC
YWNrZW5kRGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZp
Z3VyYXRpb24uaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1
Z2dhYmxlVHlwZXMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
KyNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KKworX19hdHRyaWJ1dGVfXygo
dmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3Vy
YXRpb24gOiBOU09iamVjdAorQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNl
dERvbWFpbkhhbmRsZXI6KSBpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiBkb21h
aW5IYW5kbGVyOworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBUZXN0UHJvdG9jb2xE
b21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKmRvbWFpbkV2ZW50RGlzcGF0Y2hlcjsKK0BlbmQK
KworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorCisjIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbiBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3Vy
YXRpb24uaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbXBvcnQgIlRl
c3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1
Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKwordXNpbmcgbmFtZXNwYWNl
IEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24K
K3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworICAg
IGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IF9kb21haW5IYW5kbGVyOworICAg
IFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqX2RvbWFpbkV2ZW50RGlz
cGF0Y2hlcjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVu
dGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCit7CisgICAgc2VsZiA9IFtzdXBl
ciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgQVNTRVJU
KGNvbnRyb2xsZXIpOworICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKKyAgICByZXR1cm4g
c2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgW19kb21haW5IYW5kbGVyIHJlbGVh
c2VdOworICAgIFtfZG9tYWluRXZlbnREaXNwYXRjaGVyIHJlbGVhc2VdOworICAgIFtzdXBlciBk
ZWFsbG9jXTsKK30KKworLSAodm9pZClzZXREb21haW5IYW5kbGVyOihpZDxUZXN0UHJvdG9jb2xE
b21haW5Eb21haW5IYW5kbGVyPiloYW5kbGVyCit7CisgICAgaWYgKGhhbmRsZXIgPT0gX2RvbWFp
bkhhbmRsZXIpCisgICAgICAgIHJldHVybjsKKworICAgIFtfZG9tYWluSGFuZGxlciByZWxlYXNl
XTsKKyAgICBfZG9tYWluSGFuZGxlciA9IFtoYW5kbGVyIHJldGFpbl07CisKKyAgICBhdXRvIGFs
dGVybmF0ZURpc3BhdGNoZXIgPSBtYWtlVW5pcXVlPE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5k
RGlzcGF0Y2hlcj4oaGFuZGxlcik7CisgICAgYXV0byBhbHRlcm5hdGVBZ2VudCA9IG1ha2VVbmlx
dWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8RG9tYWluQmFja2VuZERpc3BhdGNoZXIsIEFs
dGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyPj4oIkRvbWFpbiJfcywgKl9jb250cm9sbGVy
LCBXVEZNb3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIpKTsKKyAgICBfY29udHJvbGxlci0+YXBwZW5k
RXh0cmFBZ2VudChXVEZNb3ZlKGFsdGVybmF0ZUFnZW50KSk7Cit9CisKKy0gKGlkPFRlc3RQcm90
b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+KWRvbWFpbkhhbmRsZXIKK3sKKyAgICByZXR1cm4gX2Rv
bWFpbkhhbmRsZXI7Cit9CisKKy0gKFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0
Y2hlciAqKWRvbWFpbkV2ZW50RGlzcGF0Y2hlcgoreworICAgIGlmICghX2RvbWFpbkV2ZW50RGlz
cGF0Y2hlcikKKyAgICAgICAgX2RvbWFpbkV2ZW50RGlzcGF0Y2hlciA9IFtbVGVzdFByb3RvY29s
RG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyIGFsbG9jXSBpbml0V2l0aENvbnRyb2xsZXI6X2Nv
bnRyb2xsZXJdOworICAgIHJldHVybiBfZG9tYWluRXZlbnREaXNwYXRjaGVyOworfQorCitAZW5k
CisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50
ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1w
b3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitA
aW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyCit7
CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKK30KKwor
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JD
b250cm9sbGVyKiljb250cm9sbGVyCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBp
ZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNvbnRyb2xsZXIpOwor
ICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAo
dm9pZClFdmVudAoreworICAgIGNvbnN0IEZyb250ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29udHJv
bGxlci0+ZnJvbnRlbmRSb3V0ZXIoKTsKKworICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNz
YWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5n
KCJtZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOworICAgIHJvdXRlci5zZW5kRXZlbnQoanNv
bk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdn
YWJsZVR5cGVzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisj
aW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKworI2ltcG9ydCA8V2ViSW5zcGVjdG9y
L1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgorCisKKworCisKKworCisKK0Bwcm90b2NvbCBUZXN0
UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyIDxOU09iamVjdD4KK0BvcHRpb25hbAorLSAodm9p
ZClDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJv
ckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKSh2b2lkKSlzdWNjZXNzQ2FsbGJhY2s7
CitAZW5kCisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVy
ZmFjZSBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgOiBOU09iamVjdAor
LSAodm9pZClFdmVudDsKK0BlbmQKKworCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9j
b2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9j
b2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCisjaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBv
cnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sRG9tYWluRG9t
YWluRXZlbnREaXNwYXRjaGVyIChQcml2YXRlKQorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29u
dHJvbGxlcjooSW5zcGVjdG9yOjpBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRy
b2xsZXI7CitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisK
KyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbiBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2Nv
bC5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5o
PgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1U
eXBlPgorT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3Ry
aW5nJiB2YWx1ZSk7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBkb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKwor
I2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2Vy
LmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5o
PgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisKKworCisKKworIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbFR5cGVzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlu
LWRlYnVnZ2FibGVUeXBlcy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9j
b2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbXBv
cnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKwor
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RvbWFpbi10YXJn
ZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJlc3VsdCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW4t
dGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1yZXN1bHQKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMTYxZTZiYzJmOGFjOGUzNmJjYWI0ZTY4MzYyYmNjNzA1MWM5ODVlZQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9leHBlY3RlZC9kb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5
cGUuanNvbi1yZXN1bHQKQEAgLTAsMCArMSwxMDExIEBACisjIyMgQmVnaW4gRmlsZTogSW5zcGVj
dG9yQmFja2VuZENvbW1hbmRzLmpzLmluCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisvLyBEb21haW4KK0luc3Bl
Y3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIkRvbWFpbiIsIG51bGwpOworSW5zcGVjdG9yQmFj
a2VuZC5yZWdpc3RlckNvbW1hbmQoIkRvbWFpbi5Db21tYW5kIiwgWyJwYWdlIiwgIndvcmtlciJd
LCBbXSwgW10pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckV2ZW50KCJEb21haW4uRXZlbnQi
LCBudWxsLCBbXSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluRGlzcGF0Y2hlciA9
IEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEaXNwYXRjaGVyLmJpbmQoSW5zcGVjdG9yQmFja2Vu
ZCwgIkRvbWFpbiIpOworSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiRG9tYWluIiwg
WyJwYWdlIl0pOworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMuaW4K
KworIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5n
LWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorCituYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKKworY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVibGlj
OgorICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVy
PiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hl
cik7IH0KKyAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7
IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Citwcml2YXRlOgorICAgIFJlZlB0
cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKK307CisKKworY2xhc3Mg
QWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2Vu
ZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgfkFsdGVybmF0ZURvbWFpbkJhY2tl
bmREaXNwYXRjaGVyKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIENvbW1hbmQobG9uZyBjYWxsSWQp
ID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjIyMgRW5kIEZpbGU6IFRlc3RBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmRE
aXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRh
cmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRl
c3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCitu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKKyNp
ZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK2NsYXNzIEFsdGVybmF0
ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyOworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQorCitjbGFzcyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBDb21tYW5kKEVycm9yU3RyaW5nJikgPSAw
OworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgfkRvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxl
cigpOworfTsKKworY2xhc3MgRG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMg
U3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8
RG9tYWluQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIERvbWFp
bkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1
ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2Up
IGZpbmFsOworcHJpdmF0ZToKKyAgICB2b2lkIENvbW1hbmQobG9uZyByZXF1ZXN0SWQsIFJlZlB0
cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCitwdWJsaWM6CisgICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRj
aGVyKEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVy
KSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KK3ByaXZh
dGU6CisgICAgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIqIG1fYWx0ZXJuYXRlRGlz
cGF0Y2hlciB7IG51bGxwdHIgfTsKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKK3ByaXZhdGU6CisgICAgRG9tYWluQmFja2VuZERpc3BhdGNoZXIoQmFj
a2VuZERpc3BhdGNoZXImLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICBE
b21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQgeyBudWxscHRyIH07Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNw
YXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlLW1hdGNo
aW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RCYWNrZW5k
RGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250
ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYv
TmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpZiBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyNpbmNsdWRlICJUZXN0QWx0
ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitEb21haW5C
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5Eb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIo
KSB7IH0KKworUmVmPERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBEb21haW5CYWNrZW5kRGlzcGF0
Y2hlcjo6Y3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgRG9tYWlu
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsK
K30KKworRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkRvbWFpbkJhY2tlbmREaXNwYXRjaGVyKEJh
Y2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgRG9tYWluQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyKiBhZ2VudCkKKyAgICA6IFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJh
Y2tlbmREaXNwYXRjaGVyKQorICAgICwgbV9hZ2VudChhZ2VudCkKK3sKKyAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oIkRvbWFpbiJfcywgdGhpcyk7
Cit9CisKK3ZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVz
dElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQor
eworICAgIFJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CisKKyAg
ICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOworICAgIG1lc3NhZ2UtPmdldE9iamVj
dCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsKKworICAgIGlmIChtZXRob2QgPT0gIkNvbW1hbmQi
KSB7CisgICAgICAgIENvbW1hbmQocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFBy
b3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi4i
ICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOworfQorCit2b2lkIERvbWFpbkJhY2tlbmRE
aXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYm
KQoreworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorICAgIGlm
IChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVy
LT5Db21tYW5kKHJlcXVlc3RJZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYgLy8g
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyAgICBFcnJvclN0cmlu
ZyBlcnJvcjsKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOworICAgIG1fYWdlbnQtPkNvbW1hbmQoZXJyb3IpOworCisgICAgaWYgKCFlcnJvci5s
ZW5ndGgoKSkKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVl
c3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7CisgICAgZWxzZQorICAgICAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2
ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
KworIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4g
RmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlw
ZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8d3RmL0pT
T05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNl
IEluc3BlY3RvciB7CisKK2NsYXNzIEZyb250ZW5kUm91dGVyOworCitjbGFzcyBEb21haW5Gcm9u
dGVuZERpc3BhdGNoZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgor
ICAgIERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcihGcm9udGVuZFJvdXRlciYgZnJvbnRlbmRSb3V0
ZXIpIDogbV9mcm9udGVuZFJvdXRlcihmcm9udGVuZFJvdXRlcikgeyB9CisgICAgdm9pZCBFdmVu
dCgpOworcHJpdmF0ZToKKyAgICBGcm9udGVuZFJvdXRlciYgbV9mcm9udGVuZFJvdXRlcjsKK307
CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmRE
aXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5j
cHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZS1t
YXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0RnJv
bnRlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
RnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVz
cGFjZSBJbnNwZWN0b3IgeworCit2b2lkIERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcjo6RXZlbnQo
KQoreworICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4u
RXZlbnQiX3MpOworCisgICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2Ut
PnRvSlNPTlN0cmluZygpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBF
bmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xPYmplY3RzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBk
b21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbiBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgorI2luY2x1ZGUg
PHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNw
YWNlIFByb3RvY29sIHsKKworCisKKworCisKKworCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29s
CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xP
YmplY3RzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmct
ZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2Jq
ZWN0cy5oIgorCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFByb3RvY29s
IHsKKworCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1
Z2dhYmxlVHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVycy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworQHByb3RvY29sIFRlc3RQcm90
b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI7CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKK2Ns
YXNzIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBB
bHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CitwdWJsaWM6CisgICAgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVy
KGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0
ZSA9IGhhbmRsZXI7IH0KKyAgICB2b2lkIENvbW1hbmQobG9uZyByZXF1ZXN0SWQpIGZpbmFsOwor
cHJpdmF0ZToKKyAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxl
cj4+IG1fZGVsZWdhdGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2Fi
bGVUeXBlLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1w
b3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5o
IgorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorCitu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordm9pZCBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERp
c3BhdGNoZXI6OkNvbW1hbmQobG9uZyByZXF1ZXN0SWQpCit7CisgICAgaWYgKCFbbV9kZWxlZ2F0
ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKENvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazpz
dWNjZXNzQ2FsbGJhY2s6KV0pIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0
UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3Vu
ZCwgIidEb21haW4uQ29tbWFuZCcgd2FzIG5vdCBmb3VuZCJfcyk7CisgICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKKyAgICAgICAg
YmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tl
bmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgIH07CisKKyAgICBpZCBzdWNjZXNzQ2Fs
bGJhY2sgPSBeeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVx
dWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgfTsKKworICAgIFtt
X2RlbGVnYXRlIENvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3ND
YWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
KworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1
Z2dhYmxlVHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgorCitfX2F0dHJpYnV0ZV9fKCh2
aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJh
dGlvbiA6IE5TT2JqZWN0CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluLCBzZXR0ZXI9c2V0
RG9tYWluSGFuZGxlcjopIGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IGRvbWFp
bkhhbmRsZXI7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFRlc3RQcm90b2NvbERv
bWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqZG9tYWluRXZlbnREaXNwYXRjaGVyOworQGVuZAor
CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2Fi
bGVUeXBlLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1w
b3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2Nv
bEludGVybmFsLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIK
KyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+Cisj
aW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4K
KyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVycy5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXJzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBU
ZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCit7CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250
cm9sbGVyKiBfY29udHJvbGxlcjsKKyAgICBpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5k
bGVyPiBfZG9tYWluSGFuZGxlcjsKKyAgICBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERp
c3BhdGNoZXIgKl9kb21haW5FdmVudERpc3BhdGNoZXI7Cit9CisKKy0gKGluc3RhbmNldHlwZSlp
bml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJv
bGxlcgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAg
ICByZXR1cm4gbmlsOworICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9
IGNvbnRyb2xsZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworewor
ICAgIFtfZG9tYWluSGFuZGxlciByZWxlYXNlXTsKKyAgICBbX2RvbWFpbkV2ZW50RGlzcGF0Y2hl
ciByZWxlYXNlXTsKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0gKHZvaWQpc2V0RG9tYWlu
SGFuZGxlcjooaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4paGFuZGxlcgorewor
ICAgIGlmIChoYW5kbGVyID09IF9kb21haW5IYW5kbGVyKQorICAgICAgICByZXR1cm47CisKKyAg
ICBbX2RvbWFpbkhhbmRsZXIgcmVsZWFzZV07CisgICAgX2RvbWFpbkhhbmRsZXIgPSBbaGFuZGxl
ciByZXRhaW5dOworCisgICAgYXV0byBhbHRlcm5hdGVEaXNwYXRjaGVyID0gbWFrZVVuaXF1ZTxP
YmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXI+KGhhbmRsZXIpOworICAgIGF1dG8g
YWx0ZXJuYXRlQWdlbnQgPSBtYWtlVW5pcXVlPEFsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50PERv
bWFpbkJhY2tlbmREaXNwYXRjaGVyLCBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4+
KCJEb21haW4iX3MsICpfY29udHJvbGxlciwgV1RGTW92ZShhbHRlcm5hdGVEaXNwYXRjaGVyKSk7
CisgICAgX2NvbnRyb2xsZXItPmFwcGVuZEV4dHJhQWdlbnQoV1RGTW92ZShhbHRlcm5hdGVBZ2Vu
dCkpOworfQorCistIChpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPilkb21haW5I
YW5kbGVyCit7CisgICAgcmV0dXJuIF9kb21haW5IYW5kbGVyOworfQorCistIChUZXN0UHJvdG9j
b2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKilkb21haW5FdmVudERpc3BhdGNoZXIKK3sK
KyAgICBpZiAoIV9kb21haW5FdmVudERpc3BhdGNoZXIpCisgICAgICAgIF9kb21haW5FdmVudERp
c3BhdGNoZXIgPSBbW1Rlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciBhbGxv
Y10gaW5pdFdpdGhDb250cm9sbGVyOl9jb250cm9sbGVyXTsKKyAgICByZXR1cm4gX2RvbWFpbkV2
ZW50RGlzcGF0Y2hlcjsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbi5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNw
YXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJn
ZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwu
aCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDx3
dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVt
ZW50YXRpb24gVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyCit7CisgICAg
QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKK30KKworLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9s
bGVyKiljb250cm9sbGVyCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNl
bGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9j
b250cm9sbGVyID0gY29udHJvbGxlcjsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClF
dmVudAoreworICAgIGNvbnN0IEZyb250ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29udHJvbGxlci0+
ZnJvbnRlbmRSb3V0ZXIoKTsKKworICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0g
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRo
b2QiX3MsICJEb21haW4uRXZlbnQiX3MpOworICAgIHJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3Nh
Z2UtPnRvSlNPTlN0cmluZygpKTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
LmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZS1t
YXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCisj
aW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+CisKKworCisKKwor
CisKKworQHByb3RvY29sIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXIgPE5TT2JqZWN0
PgorQG9wdGlvbmFsCistICh2b2lkKUNvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShO
U1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKHZv
aWQpKXN1Y2Nlc3NDYWxsYmFjazsKK0BlbmQKKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAo
ImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlz
cGF0Y2hlciA6IE5TT2JqZWN0CistICh2b2lkKUV2ZW50OworQGVuZAorCisKKyNpbXBvcnQgPFdl
Ykluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4KKworIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
SW50ZXJuYWwuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJn
ZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1w
b3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgorI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDx3dGYvSlNP
TlZhbHVlcy5oPgorCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlz
cGF0Y2hlciAoUHJpdmF0ZSkKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KElu
c3BlY3Rvcjo6QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyOworQGVu
ZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorCisjIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJs
ZVR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBv
cnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJy
YXlDb252ZXJzaW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgT2JqQ0VudW1UeXBlPgorT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xT
dHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgor
CisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdn
YWJsZVR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNp
bXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorCisjaW1wb3J0ICJUZXN0UHJv
dG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKKyNpbXBvcnQgPFdl
Ykluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisKK3VzaW5nIG5hbWVz
cGFjZSBJbnNwZWN0b3I7CisKKworCisKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0K
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZS1tYXRj
aGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBv
cnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9y
L1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKyNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25z
Lmg+CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVj
dG9yOworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9k
b21haW4tdGFyZ2V0VHlwZXMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWluLXRhcmdldFR5cGVzLmpzb24tcmVz
dWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjBkY2NjYWU2ODY5YmJiNmI5Nzc0YjNhYzg4NjZmMzJjNTE4MDkyNWMK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWluLXRhcmdldFR5cGVzLmpzb24tcmVzdWx0CkBAIC0wLDAg
KzEsMTAxMSBAQAorIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcy5p
bgorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlcy5q
c29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworLy8gRG9tYWluCitJ
bnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJEb21haW4iLCBbInBhZ2UiXSk7CitJbnNw
ZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiRG9tYWluLkNvbW1hbmQiLCBbInBhZ2UiXSwg
W10sIFtdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudCgiRG9tYWluLkV2ZW50Iiwg
WyJwYWdlIl0sIFtdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW5EaXNwYXRjaGVy
ID0gSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRpc3BhdGNoZXIuYmluZChJbnNwZWN0b3JCYWNr
ZW5kLCAiRG9tYWluIik7CitJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJEb21haW4i
LCBudWxsKTsKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzLmluCisK
KyMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZXMuanNvbiBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaWYg
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyNpbmNsdWRlICJUZXN0
UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRl
bmRSb3V0ZXIuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVy
KFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3Bh
dGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9CisgICAgQmFja2VuZERpc3BhdGNoZXIqIGJh
Y2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQo
KTsgfQorcHJpdmF0ZToKKyAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERp
c3BhdGNoZXI7Cit9OworCisKK2NsYXNzIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVy
IDogcHVibGljIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0
dWFsIH5BbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQorICAgIHZpcnR1YWwg
dm9pZCBDb21tYW5kKGxvbmcgY2FsbElkKSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQorIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlcy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJv
dG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNw
YWNlIEluc3BlY3RvciB7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCisjaWYgRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCitjbGFzcyBBbHRlcm5hdGVEb21h
aW5CYWNrZW5kRGlzcGF0Y2hlcjsKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKKworY2xhc3MgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsK
K3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChFcnJvclN0cmluZyYpID0gMDsKK3By
b3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5Eb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsK
K307CisKK2NsYXNzIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBs
ZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPERvbWFp
bkJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElk
LCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5h
bDsKK3ByaXZhdGU6CisgICAgdm9pZCBDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQorcHVibGljOgorICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0Y2hlcihB
bHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBt
X2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9Citwcml2YXRlOgor
ICAgIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKiBtX2FsdGVybmF0ZURpc3BhdGNo
ZXIgeyBudWxscHRyIH07CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCitwcml2YXRlOgorICAgIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmRE
aXNwYXRjaGVyJiwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgRG9tYWlu
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50IHsgbnVsbHB0ciB9OworfTsKKworfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hl
cnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZXMuanNvbiBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFs
dWVzLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCisjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgorI2VuZGlm
IC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCituYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKKworRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+RG9tYWluQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9CisKK1JlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hl
cj4gRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYgYmFj
a2VuZERpc3BhdGNoZXIsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCit7
CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRG9tYWluQmFja2VuZERpc3BhdGNoZXIoYmFja2Vu
ZERpc3BhdGNoZXIsIGFnZW50KSk7Cit9CisKK0RvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpEb21h
aW5CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIs
IERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCisgICAgOiBTdXBwbGVtZW50
YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKKyAgICAsIG1fYWdlbnQoYWdl
bnQpCit7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9t
YWluKCJEb21haW4iX3MsIHRoaXMpOworfQorCit2b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVy
OjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09O
OjpPYmplY3Q+JiYgbWVzc2FnZSkKK3sKKyAgICBSZWY8RG9tYWluQmFja2VuZERpc3BhdGNoZXI+
IHByb3RlY3QoKnRoaXMpOworCisgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVyczsK
KyAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFyYW1ldGVycyk7CisKKyAgICBp
ZiAobWV0aG9kID09ICJDb21tYW5kIikgeworICAgICAgICBDb21tYW5kKHJlcXVlc3RJZCwgV1RG
TW92ZShwYXJhbWV0ZXJzKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRo
b2ROb3RGb3VuZCwgIidEb21haW4uIiArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKK30K
Kwordm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVlc3RJZCwg
UmVmUHRyPEpTT046Ok9iamVjdD4mJikKK3sKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKKyAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7CisgICAgICAg
IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+Q29tbWFuZChyZXF1ZXN0SWQpOworICAgICAgICByZXR1
cm47CisgICAgfQorI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENI
RVJTKQorCisgICAgRXJyb3JTdHJpbmcgZXJyb3I7CisgICAgUmVmPEpTT046Ok9iamVjdD4gcmVz
dWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBtX2FnZW50LT5Db21tYW5kKGVycm9y
KTsKKworICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOworICAg
IGVsc2UKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihC
YWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZXMuanNvbiBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVz
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0
b3IgeworCitjbGFzcyBGcm9udGVuZFJvdXRlcjsKKworY2xhc3MgRG9tYWluRnJvbnRlbmREaXNw
YXRjaGVyIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBEb21h
aW5Gcm9udGVuZERpc3BhdGNoZXIoRnJvbnRlbmRSb3V0ZXImIGZyb250ZW5kUm91dGVyKSA6IG1f
ZnJvbnRlbmRSb3V0ZXIoZnJvbnRlbmRSb3V0ZXIpIHsgfQorICAgIHZvaWQgRXZlbnQoKTsKK3By
aXZhdGU6CisgICAgRnJvbnRlbmRSb3V0ZXImIG1fZnJvbnRlbmRSb3V0ZXI7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hl
cnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVzLmpzb24gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordm9pZCBEb21haW5Gcm9udGVu
ZERpc3BhdGNoZXI6OkV2ZW50KCkKK3sKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2Fn
ZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygi
bWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9zKTsKKworICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2Vu
ZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAor
CisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVzLmpzb24gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0
aW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK25hbWVzcGFjZSBQcm90b2Nv
bCB7CisKKworCisKKworCisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisK
KyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlcy5qc29uIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKworI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK25h
bWVzcGFjZSBQcm90b2NvbCB7CisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3Rz
LmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZXMuanNv
biBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbmNs
dWRlIDx3dGYvUmV0YWluUHRyLmg+CisKK0Bwcm90b2NvbCBUZXN0UHJvdG9jb2xEb21haW5Eb21h
aW5IYW5kbGVyOworCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCitjbGFzcyBPYmpDSW5zcGVj
dG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJuYXRlRG9tYWlu
QmFja2VuZERpc3BhdGNoZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGlj
OgorICAgIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9j
b2xEb21haW5Eb21haW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9
CisgICAgdm9pZCBDb21tYW5kKGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKK3ByaXZhdGU6CisgICAg
UmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRl
OworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bEJhY2tlbmREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGRvbWFpbi10YXJnZXRUeXBlcy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5k
RGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW5j
bHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW5jbHVkZSA8d3RmL0pTT05W
YWx1ZXMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3ZvaWQgT2JqQ0luc3BlY3RvckRv
bWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElkKQoreworICAgIGlm
ICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihDb21tYW5kV2l0aEVy
cm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6
TWV0aG9kTm90Rm91bmQsICInRG9tYWluLkNvbW1hbmQnIHdhcyBub3QgZm91bmQiX3MpOworICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9y
KSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVx
dWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAg
YmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICB9OworCisgICAg
aWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2Vu
ZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2UpOworICAg
IH07CisKKyAgICBbbV9kZWxlZ2F0ZSBDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxs
YmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNo
ZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZXMuanNvbiBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPFdlYkluc3Bl
Y3Rvci9UZXN0UHJvdG9jb2wuaD4KKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1
bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAor
QHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNldERvbWFpbkhhbmRsZXI6KSBp
ZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiBkb21haW5IYW5kbGVyOworQHByb3Bl
cnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERp
c3BhdGNoZXIgKmRvbWFpbkV2ZW50RGlzcGF0Y2hlcjsKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sQ29uZmlndXJhdGlvbi5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRv
bWFpbi10YXJnZXRUeXBlcy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgorCisjaW1wb3J0ICJU
ZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3Bh
dGNoZXJzLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVB
Z2VudC5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250
cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVycy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVt
ZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgoreworICAgIEF1Z21lbnRhYmxlSW5z
cGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7CisgICAgaWQ8VGVzdFByb3RvY29sRG9tYWlu
RG9tYWluSGFuZGxlcj4gX2RvbWFpbkhhbmRsZXI7CisgICAgVGVzdFByb3RvY29sRG9tYWluRG9t
YWluRXZlbnREaXNwYXRjaGVyICpfZG9tYWluRXZlbnREaXNwYXRjaGVyOworfQorCistIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xs
ZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2Vs
ZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2Nv
bnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRl
YWxsb2MKK3sKKyAgICBbX2RvbWFpbkhhbmRsZXIgcmVsZWFzZV07CisgICAgW19kb21haW5FdmVu
dERpc3BhdGNoZXIgcmVsZWFzZV07CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistICh2b2lk
KXNldERvbWFpbkhhbmRsZXI6KGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+KWhh
bmRsZXIKK3sKKyAgICBpZiAoaGFuZGxlciA9PSBfZG9tYWluSGFuZGxlcikKKyAgICAgICAgcmV0
dXJuOworCisgICAgW19kb21haW5IYW5kbGVyIHJlbGVhc2VdOworICAgIF9kb21haW5IYW5kbGVy
ID0gW2hhbmRsZXIgcmV0YWluXTsKKworICAgIGF1dG8gYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IG1h
a2VVbmlxdWU8T2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyPihoYW5kbGVyKTsK
KyAgICBhdXRvIGFsdGVybmF0ZUFnZW50ID0gbWFrZVVuaXF1ZTxBbHRlcm5hdGVEaXNwYXRjaGFi
bGVBZ2VudDxEb21haW5CYWNrZW5kRGlzcGF0Y2hlciwgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERp
c3BhdGNoZXI+PigiRG9tYWluIl9zLCAqX2NvbnRyb2xsZXIsIFdURk1vdmUoYWx0ZXJuYXRlRGlz
cGF0Y2hlcikpOworICAgIF9jb250cm9sbGVyLT5hcHBlbmRFeHRyYUFnZW50KFdURk1vdmUoYWx0
ZXJuYXRlQWdlbnQpKTsKK30KKworLSAoaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxl
cj4pZG9tYWluSGFuZGxlcgoreworICAgIHJldHVybiBfZG9tYWluSGFuZGxlcjsKK30KKworLSAo
VGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyICopZG9tYWluRXZlbnREaXNw
YXRjaGVyCit7CisgICAgaWYgKCFfZG9tYWluRXZlbnREaXNwYXRjaGVyKQorICAgICAgICBfZG9t
YWluRXZlbnREaXNwYXRjaGVyID0gW1tUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3Bh
dGNoZXIgYWxsb2NdIGluaXRXaXRoQ29udHJvbGxlcjpfY29udHJvbGxlcl07CisgICAgcmV0dXJu
IF9kb21haW5FdmVudERpc3BhdGNoZXI7Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bEV2ZW50RGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBk
b21haW4tdGFyZ2V0VHlwZXMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwor
dXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2Nv
bERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlcgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9y
Q29udHJvbGxlciogX2NvbnRyb2xsZXI7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENv
bnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgorewor
ICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4g
bmlsOworICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xs
ZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpRXZlbnQKK3sKKyAgICBjb25zdCBG
cm9udGVuZFJvdXRlciYgcm91dGVyID0gX2NvbnRyb2xsZXItPmZyb250ZW5kUm91dGVyKCk7CisK
KyAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRl
KCk7CisgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50
Il9zKTsKKyAgICByb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7
Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hl
cnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVzLmpzb24gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24u
aD4KKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgorCisK
KworCisKKworCisKK0Bwcm90b2NvbCBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyIDxO
U09iamVjdD4KK0BvcHRpb25hbAorLSAodm9pZClDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6KHZv
aWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9p
ZCheKSh2b2lkKSlzdWNjZXNzQ2FsbGJhY2s7CitAZW5kCisKK19fYXR0cmlidXRlX18oKHZpc2li
aWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5F
dmVudERpc3BhdGNoZXIgOiBOU09iamVjdAorLSAodm9pZClFdmVudDsKK0BlbmQKKworCisjaW1w
b3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+
CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbEludGVybmFsLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21h
aW4tdGFyZ2V0VHlwZXMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9i
amVjdFByaXZhdGUuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVj
dG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKworQGludGVyZmFj
ZSBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKFByaXZhdGUpCistIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihJbnNwZWN0b3I6OkF1Z21lbnRhYmxlSW5z
cGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcjsKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbEludGVybmFsLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRh
cmdldFR5cGVzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisj
aW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2Nv
bEFycmF5Q29udmVyc2lvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3RlbXBsYXRl
PHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KK09wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3Rv
Y29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorCisjIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVzLmpzb24gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJv
dG9jb2xUeXBlUGFyc2VyLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09O
T2JqZWN0UHJpdmF0ZS5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisKKworCisK
KworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1w
b3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rv
ci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisjaW1wb3J0IDx3dGYvQXNzZXJ0aW9u
cy5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3Bl
Y3RvcjsKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
ZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uLXJlc3VsdCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW5zLXdp
dGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24tcmVzdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJiMThjNDA0
ODg0NGU4NzZiM2ZhZDc2ZDc0MmQyYWIyOWE2MjgwMDUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWlu
cy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uLXJlc3VsdApAQCAtMCwwICsxLDE0MDMg
QEAKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMuaW4KKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5k
LXNpemVzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisvLyBO
ZXR3b3JrMQorSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiTmV0d29yazEiLCBudWxs
KTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMS5sb2FkUmVzb3Vy
Y2UxIiwgbnVsbCwgW10sIFtdKTsKK0luc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIk5l
dHdvcmsxIiwgbnVsbCk7CisKKy8vIE5ldHdvcmszCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVy
RG9tYWluKCJOZXR3b3JrMyIsIG51bGwpOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1h
bmQoIk5ldHdvcmszLmxvYWRSZXNvdXJjZTEiLCBudWxsLCBbXSwgW10pOworSW5zcGVjdG9yQmFj
a2VuZC5yZWdpc3RlckNvbW1hbmQoIk5ldHdvcmszLmxvYWRSZXNvdXJjZTIiLCBudWxsLCBbXSwg
W10pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIk5ldHdvcmszLmxvYWRSZXNv
dXJjZTMiLCBudWxsLCBbXSwgW10pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQo
Ik5ldHdvcmszLmxvYWRSZXNvdXJjZTQiLCBudWxsLCBbXSwgW10pOworSW5zcGVjdG9yQmFja2Vu
ZC5yZWdpc3RlckNvbW1hbmQoIk5ldHdvcmszLmxvYWRSZXNvdXJjZTUiLCBudWxsLCBbXSwgW10p
OworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIk5ldHdvcmszLmxvYWRSZXNvdXJj
ZTYiLCBudWxsLCBbXSwgW10pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIk5l
dHdvcmszLmxvYWRSZXNvdXJjZTciLCBudWxsLCBbXSwgW10pOworSW5zcGVjdG9yQmFja2VuZC5h
Y3RpdmF0ZURvbWFpbigiTmV0d29yazMiLCBudWxsKTsKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9y
QmFja2VuZENvbW1hbmRzLmpzLmluCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21h
aW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIK
KyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisKK25h
bWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7
CitwdWJsaWM6CisgICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERp
c3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShk
aXNwYXRjaGVyKTsgfQorICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigp
IGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KK3ByaXZhdGU6Cisg
ICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOworfTsKKwor
CitjbGFzcyBBbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVy
bmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5BbHRlcm5hdGVO
ZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNv
dXJjZTEobG9uZyBjYWxsSWQpID0gMDsKK307CisKK2NsYXNzIEFsdGVybmF0ZU5ldHdvcmszQmFj
a2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVi
bGljOgorICAgIHZpcnR1YWwgfkFsdGVybmF0ZU5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIoKSB7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMShsb25nIGNhbGxJZCkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UyKGxvbmcgY2FsbElkKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGxvYWRSZXNvdXJjZTMobG9uZyBjYWxsSWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
bG9hZFJlc291cmNlNChsb25nIGNhbGxJZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVz
b3VyY2U1KGxvbmcgY2FsbElkKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTYo
bG9uZyBjYWxsSWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlNyhsb25nIGNh
bGxJZCkgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyMjIyBFbmQgRmlsZTogVGVz
dEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFj
a2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21h
aW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bE9iamVjdHMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKKyNpZiBFTkFCTEUo
SU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK2NsYXNzIEFsdGVybmF0ZU5ldHdvcmsx
QmFja2VuZERpc3BhdGNoZXI7CitjbGFzcyBBbHRlcm5hdGVOZXR3b3JrM0JhY2tlbmREaXNwYXRj
aGVyOworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQor
CitjbGFzcyBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CitwdWJsaWM6CisgICAg
dmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTEoRXJyb3JTdHJpbmcmKSA9IDA7Citwcm90ZWN0ZWQ6
CisgICAgdmlydHVhbCB+TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKK307CisK
K2NsYXNzIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKK3B1YmxpYzoKKyAgICB2
aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMShFcnJvclN0cmluZyYpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgbG9hZFJlc291cmNlMihFcnJvclN0cmluZyYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
bG9hZFJlc291cmNlMyhFcnJvclN0cmluZyYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJl
c291cmNlNChFcnJvclN0cmluZyYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNl
NShFcnJvclN0cmluZyYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlNihFcnJv
clN0cmluZyYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlNyhFcnJvclN0cmlu
ZyYpID0gMDsKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5OZXR3b3JrM0JhY2tlbmREaXNwYXRj
aGVySGFuZGxlcigpOworfTsKKworY2xhc3MgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciBmaW5h
bCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAg
c3RhdGljIFJlZjxOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3Bh
dGNoZXImLCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIHZvaWQgZGlz
cGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2Jq
ZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOworcHJpdmF0ZToKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTEo
bG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisjaWYg
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCitwdWJsaWM6CisgICAgdm9p
ZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNo
ZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJu
YXRlRGlzcGF0Y2hlcjsgfQorcHJpdmF0ZToKKyAgICBBbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmRE
aXNwYXRjaGVyKiBtX2FsdGVybmF0ZURpc3BhdGNoZXIgeyBudWxscHRyIH07CisjZW5kaWYgLy8g
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCitwcml2YXRlOgorICAgIE5l
dHdvcmsxQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImLCBOZXR3b3JrMUJhY2tl
bmREaXNwYXRjaGVySGFuZGxlciopOworICAgIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyKiBtX2FnZW50IHsgbnVsbHB0ciB9OworfTsKKworY2xhc3MgTmV0d29yazNCYWNrZW5kRGlz
cGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7Citw
dWJsaWM6CisgICAgc3RhdGljIFJlZjxOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUo
QmFja2VuZERpc3BhdGNoZXImLCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwor
ICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBS
ZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOworcHJpdmF0ZToKKyAgICB2b2lkIGxv
YWRSZXNvdXJjZTEobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1l
dGVycyk7CisgICAgdm9pZCBsb2FkUmVzb3VyY2UyKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOworICAgIHZvaWQgbG9hZFJlc291cmNlMyhsb25nIHJl
cXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyAgICB2b2lkIGxv
YWRSZXNvdXJjZTQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1l
dGVycyk7CisgICAgdm9pZCBsb2FkUmVzb3VyY2U1KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOworICAgIHZvaWQgbG9hZFJlc291cmNlNihsb25nIHJl
cXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyAgICB2b2lkIGxv
YWRSZXNvdXJjZTcobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1l
dGVycyk7CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCitwdWJs
aWM6CisgICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZU5ldHdvcmszQmFj
a2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRj
aGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQorcHJpdmF0ZToKKyAgICBBbHRlcm5hdGVOZXR3
b3JrM0JhY2tlbmREaXNwYXRjaGVyKiBtX2FsdGVybmF0ZURpc3BhdGNoZXIgeyBudWxscHRyIH07
CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCitwcml2
YXRlOgorICAgIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImLCBO
ZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIE5ldHdvcmszQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50IHsgbnVsbHB0ciB9OworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisj
IyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpz
b24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYv
SlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQorI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIK
KyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKK05ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+
TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KK05ldHdvcmszQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyOjp+TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0K
KworUmVmPE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI+IE5ldHdvcmsxQmFja2VuZERpc3BhdGNo
ZXI6OmNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIE5ldHdvcmsx
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkp
OworfQorCitOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpOZXR3b3JrMUJhY2tlbmREaXNwYXRj
aGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgTmV0d29yazFCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQorICAgIDogU3VwcGxlbWVudGFsQmFja2VuZERpc3Bh
dGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCisgICAgLCBtX2FnZW50KGFnZW50KQoreworICAgIG1f
YmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbigiTmV0d29yazEi
X3MsIHRoaXMpOworfQorCit2b2lkIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNo
KGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4m
JiBtZXNzYWdlKQoreworICAgIFJlZjxOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0
KCp0aGlzKTsKKworICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7CisgICAgbWVz
c2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRlcnMpOworCisgICAgaWYgKG1ldGhv
ZCA9PSAibG9hZFJlc291cmNlMSIpIHsKKyAgICAgICAgbG9hZFJlc291cmNlMShyZXF1ZXN0SWQs
IFdURk1vdmUocGFyYW1ldGVycykpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6
TWV0aG9kTm90Rm91bmQsICInTmV0d29yazEuIiArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQi
KTsKK30KKwordm9pZCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UxKGxv
bmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQoreworI2lmIEVOQUJMRShJTlNQ
RUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNo
ZXIpIHsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2UxKHJlcXVl
c3RJZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBS
ZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1f
YWdlbnQtPmxvYWRSZXNvdXJjZTEoZXJyb3IpOworCisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkK
KyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RG
TW92ZShyZXN1bHQpLCBmYWxzZSk7CisgICAgZWxzZQorICAgICAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwg
V1RGTW92ZShlcnJvcikpOworfQorCitSZWY8TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcj4gTmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5k
RGlzcGF0Y2hlciwgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQorewor
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIoYmFja2Vu
ZERpc3BhdGNoZXIsIGFnZW50KSk7Cit9CisKK05ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6Ok5l
dHdvcmszQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRj
aGVyLCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCisgICAgOiBTdXBw
bGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKKyAgICAsIG1fYWdl
bnQoYWdlbnQpCit7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVy
Rm9yRG9tYWluKCJOZXR3b3JrMyJfcywgdGhpcyk7Cit9CisKK3ZvaWQgTmV0d29yazNCYWNrZW5k
RGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9k
LCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCit7CisgICAgUmVmPE5ldHdvcmszQmFja2Vu
ZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOworCisgICAgUmVmUHRyPEpTT046Ok9iamVjdD4g
cGFyYW1ldGVyczsKKyAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFyYW1ldGVy
cyk7CisKKyAgICB0eXBlZGVmIHZvaWQgKE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OipDYWxs
SGFuZGxlcikobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSk7
CisgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+IERpc3BhdGNoTWFwOwor
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxEaXNwYXRjaE1hcD4gZGlzcGF0Y2hNYXA7CisgICAg
aWYgKGRpc3BhdGNoTWFwLmdldCgpLmlzRW1wdHkoKSkgeworICAgICAgICBzdGF0aWMgY29uc3Qg
c3RydWN0IE1ldGhvZFRhYmxlIHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIG5hbWU7CisgICAg
ICAgICAgICBDYWxsSGFuZGxlciBoYW5kbGVyOworICAgICAgICB9IGNvbW1hbmRzW10gPSB7Cisg
ICAgICAgICAgICB7ICJsb2FkUmVzb3VyY2UxIiwgJk5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6
OmxvYWRSZXNvdXJjZTEgfSwKKyAgICAgICAgICAgIHsgImxvYWRSZXNvdXJjZTIiLCAmTmV0d29y
azNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMiB9LAorICAgICAgICAgICAgeyAibG9h
ZFJlc291cmNlMyIsICZOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UzIH0s
CisgICAgICAgICAgICB7ICJsb2FkUmVzb3VyY2U0IiwgJk5ldHdvcmszQmFja2VuZERpc3BhdGNo
ZXI6OmxvYWRSZXNvdXJjZTQgfSwKKyAgICAgICAgICAgIHsgImxvYWRSZXNvdXJjZTUiLCAmTmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNSB9LAorICAgICAgICAgICAgeyAi
bG9hZFJlc291cmNlNiIsICZOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U2
IH0sCisgICAgICAgICAgICB7ICJsb2FkUmVzb3VyY2U3IiwgJk5ldHdvcmszQmFja2VuZERpc3Bh
dGNoZXI6OmxvYWRSZXNvdXJjZTcgfSwKKyAgICAgICAgfTsKKyAgICAgICAgc2l6ZV90IGxlbmd0
aCA9IFdURl9BUlJBWV9MRU5HVEgoY29tbWFuZHMpOworICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGxlbmd0aDsgKytpKQorICAgICAgICAgICAgZGlzcGF0Y2hNYXAuZ2V0KCkuYWRkKGNv
bW1hbmRzW2ldLm5hbWUsIGNvbW1hbmRzW2ldLmhhbmRsZXIpOworICAgIH0KKworICAgIGF1dG8g
ZmluZFJlc3VsdCA9IGRpc3BhdGNoTWFwLmdldCgpLmZpbmQobWV0aG9kKTsKKyAgICBpZiAoZmlu
ZFJlc3VsdCA9PSBkaXNwYXRjaE1hcC5nZXQoKS5lbmQoKSkgeworICAgICAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2RO
b3RGb3VuZCwgIidOZXR3b3JrMy4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgKCgqdGhpcykuKmZpbmRSZXN1bHQtPnZhbHVlKShy
ZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOworfQorCit2b2lkIE5ldHdvcmszQmFja2Vu
ZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTEobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpP
YmplY3Q+JiYpCit7CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
CisgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeworICAgICAgICBtX2FsdGVybmF0ZURp
c3BhdGNoZXItPmxvYWRSZXNvdXJjZTEocmVxdWVzdElkKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKwor
ICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpT
T046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9hZ2VudC0+bG9hZFJlc291cmNlMShlcnJvcik7
CisKKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKKyAgICBl
bHNlCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFj
a2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Cit9CisKK3ZvaWQg
TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMihsb25nIHJlcXVlc3RJZCwg
UmVmUHRyPEpTT046Ok9iamVjdD4mJikKK3sKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKKyAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7CisgICAgICAg
IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlMihyZXF1ZXN0SWQpOworICAgICAg
ICByZXR1cm47CisgICAgfQorI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQorCisgICAgRXJyb3JTdHJpbmcgZXJyb3I7CisgICAgUmVmPEpTT046Ok9iamVj
dD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBtX2FnZW50LT5sb2FkUmVz
b3VyY2UyKGVycm9yKTsKKworICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCisgICAgICAgIG1fYmFj
a2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwg
ZmFsc2UpOworICAgIGVsc2UKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJv
dG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3Ip
KTsKK30KKwordm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UzKGxv
bmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQoreworI2lmIEVOQUJMRShJTlNQ
RUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNo
ZXIpIHsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2UzKHJlcXVl
c3RJZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBS
ZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1f
YWdlbnQtPmxvYWRSZXNvdXJjZTMoZXJyb3IpOworCisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkK
KyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RG
TW92ZShyZXN1bHQpLCBmYWxzZSk7CisgICAgZWxzZQorICAgICAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwg
V1RGTW92ZShlcnJvcikpOworfQorCit2b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6Omxv
YWRSZXNvdXJjZTQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCit7Cisj
aWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisgICAgaWYgKG1fYWx0
ZXJuYXRlRGlzcGF0Y2hlcikgeworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRS
ZXNvdXJjZTQocmVxdWVzdElkKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZiAvLyBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworICAgIEVycm9yU3RyaW5n
IGVycm9yOworICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7CisgICAgbV9hZ2VudC0+bG9hZFJlc291cmNlNChlcnJvcik7CisKKyAgICBpZiAoIWVy
cm9yLmxlbmd0aCgpKQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2Uo
cmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKKyAgICBlbHNlCisgICAgICAgIG1f
YmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6
OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Cit9CisKK3ZvaWQgTmV0d29yazNCYWNrZW5k
RGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9i
amVjdD4mJikKK3sKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
KyAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlz
cGF0Y2hlci0+bG9hZFJlc291cmNlNShyZXF1ZXN0SWQpOworICAgICAgICByZXR1cm47CisgICAg
fQorI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCisg
ICAgRXJyb3JTdHJpbmcgZXJyb3I7CisgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2U1KGVycm9yKTsK
KworICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOworICAgIGVs
c2UKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNr
ZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKK30KKwordm9pZCBO
ZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U2KGxvbmcgcmVxdWVzdElkLCBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQoreworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQorICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKKyAgICAgICAg
bV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2U2KHJlcXVlc3RJZCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCisKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWY8SlNPTjo6T2JqZWN0
PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYWdlbnQtPmxvYWRSZXNv
dXJjZTYoZXJyb3IpOworCisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKKyAgICAgICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBm
YWxzZSk7CisgICAgZWxzZQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90
b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikp
OworfQorCit2b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTcobG9u
ZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCit7CisjaWYgRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hl
cikgeworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZTcocmVxdWVz
dElkKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgIFJl
ZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9h
Z2VudC0+bG9hZFJlc291cmNlNyhlcnJvcik7CisKKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQor
ICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZN
b3ZlKHJlc3VsdCksIGZhbHNlKTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBX
VEZNb3ZlKGVycm9yKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5k
IEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0
RnJvbnRlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
ZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJv
dG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEZy
b250ZW5kUm91dGVyOworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTog
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5k
RGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlu
cy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RGcm9u
dGVuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JG
cm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNw
YWNlIEluc3BlY3RvciB7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZp
bGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sT2JqZWN0cy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlu
cy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4K
KworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCituYW1lc3BhY2UgUHJvdG9jb2wgeworCisK
KworCisKKy8vIFR5cGVkZWZzLgorbmFtZXNwYWNlIE5ldHdvcmsyIHsKKy8qIFVuaXF1ZSBsb2Fk
ZXIgaWRlbnRpZmllci4gKi8KK3R5cGVkZWYgU3RyaW5nIExvYWRlcklkOworfSAvLyBOZXR3b3Jr
MgorLy8gRW5kIG9mIHR5cGVkZWZzLgorCisKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKwor
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVj
dHMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNp
emVzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorCisjaW5jbHVk
ZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1l
c3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworCisKK30gLy8gbmFt
ZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbiBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRy
Lmg+CisKK0Bwcm90b2NvbCBUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI7CitAcHJv
dG9jb2wgVGVzdFByb3RvY29sTmV0d29yazNEb21haW5IYW5kbGVyOworCituYW1lc3BhY2UgSW5z
cGVjdG9yIHsKKworCitjbGFzcyBPYmpDSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hl
ciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyIHsKKyAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBPYmpDSW5zcGVjdG9yTmV0
d29yazFCYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRs
ZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KKyAgICB2b2lkIGxvYWRSZXNv
dXJjZTEobG9uZyByZXF1ZXN0SWQpIGZpbmFsOworcHJpdmF0ZToKKyAgICBSZXRhaW5QdHI8aWQ8
VGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKK307CisKK2Ns
YXNzIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGlj
IEFsdGVybmF0ZU5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIgeworICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOworcHVibGljOgorICAgIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNw
YXRjaGVyKGlkPFRlc3RQcm90b2NvbE5ldHdvcmszRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBt
X2RlbGVnYXRlID0gaGFuZGxlcjsgfQorICAgIHZvaWQgbG9hZFJlc291cmNlMShsb25nIHJlcXVl
c3RJZCkgZmluYWw7CisgICAgdm9pZCBsb2FkUmVzb3VyY2UyKGxvbmcgcmVxdWVzdElkKSBmaW5h
bDsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTMobG9uZyByZXF1ZXN0SWQpIGZpbmFsOworICAgIHZv
aWQgbG9hZFJlc291cmNlNChsb25nIHJlcXVlc3RJZCkgZmluYWw7CisgICAgdm9pZCBsb2FkUmVz
b3VyY2U1KGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTYobG9u
ZyByZXF1ZXN0SWQpIGZpbmFsOworICAgIHZvaWQgbG9hZFJlc291cmNlNyhsb25nIHJlcXVlc3RJ
ZCkgZmluYWw7Citwcml2YXRlOgorICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xOZXR3b3Jr
M0RvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKwor
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQt
c2l6ZXMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBv
cnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgi
CisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2luY2x1ZGUgIlRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisKK25h
bWVzcGFjZSBJbnNwZWN0b3IgeworCit2b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmRE
aXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UxKGxvbmcgcmVxdWVzdElkKQoreworICAgIGlmICghW21f
ZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2UxV2l0aEVy
cm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6
TWV0aG9kTm90Rm91bmQsICInTmV0d29yazEubG9hZFJlc291cmNlMScgd2FzIG5vdCBmb3VuZCJf
cyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmlu
ZyAqZXJyb3IpIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xF
cnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwor
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgIH07
CisKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxz
ZSk7CisgICAgfTsKKworICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZTFXaXRoRXJyb3JDYWxs
YmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOworfQor
Cit2b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3Vy
Y2UxKGxvbmcgcmVxdWVzdElkKQoreworICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1Nl
bGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2UxV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0Nh
bGxiYWNrOildKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29s
RXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0
d29yazMubG9hZFJlc291cmNlMScgd2FzIG5vdCBmb3VuZCJfcyk7CisgICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKKyAgICAgICAg
YmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tl
bmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgIH07CisKKyAgICBpZCBzdWNjZXNzQ2Fs
bGJhY2sgPSBeeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVx
dWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgfTsKKworICAgIFtt
X2RlbGVnYXRlIGxvYWRSZXNvdXJjZTFXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1
Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOworfQorCit2b2lkIE9iakNJbnNwZWN0b3JO
ZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UyKGxvbmcgcmVxdWVzdElkKQor
eworICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2Fk
UmVzb3VyY2UyV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7CisgICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNr
ZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMubG9hZFJlc291cmNlMicg
d2FzIG5vdCBmb3VuZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5k
aW5nRXJyb3JzKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZCBlcnJvckNhbGxi
YWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJF
cnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vy
cm9ycygpOworICAgIH07CisKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeeworICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgfTsKKworICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJj
ZTJXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNz
Q2FsbGJhY2tdOworfQorCit2b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRj
aGVyOjpsb2FkUmVzb3VyY2UzKGxvbmcgcmVxdWVzdElkKQoreworICAgIGlmICghW21fZGVsZWdh
dGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2UzV2l0aEVycm9yQ2Fs
bGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCkt
PnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9k
Tm90Rm91bmQsICInTmV0d29yazMubG9hZFJlc291cmNlMycgd2FzIG5vdCBmb3VuZCJfcyk7Cisg
ICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJy
b3IpIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihy
ZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAg
ICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgIH07CisKKyAg
ICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5z
ZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7Cisg
ICAgfTsKKworICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZTNXaXRoRXJyb3JDYWxsYmFjazpl
cnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOworfQorCit2b2lk
IE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U0KGxv
bmcgcmVxdWVzdElkKQoreworICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9y
OkBzZWxlY3Rvcihsb2FkUmVzb3VyY2U0V2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNr
OildKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3Io
cmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMu
bG9hZFJlc291cmNlNCcgd2FzIG5vdCBmb3VuZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKKyAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNw
YXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigp
LT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgIH07CisKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sg
PSBeeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElk
LCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgfTsKKworICAgIFttX2RlbGVn
YXRlIGxvYWRSZXNvdXJjZTRXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3ND
YWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOworfQorCit2b2lkIE9iakNJbnNwZWN0b3JOZXR3b3Jr
M0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U1KGxvbmcgcmVxdWVzdElkKQoreworICAg
IGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3Vy
Y2U1V2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7CisgICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlz
cGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMubG9hZFJlc291cmNlNScgd2FzIG5v
dCBmb3VuZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJy
b3JzKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZCBlcnJvckNhbGxiYWNrID0g
XihOU1N0cmluZyAqZXJyb3IpIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0
UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwg
ZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygp
OworICAgIH07CisKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeeworICAgICAgICBiYWNrZW5k
RGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpLCBmYWxzZSk7CisgICAgfTsKKworICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZTVXaXRo
RXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJh
Y2tdOworfQorCit2b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjps
b2FkUmVzb3VyY2U2KGxvbmcgcmVxdWVzdElkKQoreworICAgIGlmICghW21fZGVsZWdhdGUgcmVz
cG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2U2V2l0aEVycm9yQ2FsbGJhY2s6
c3VjY2Vzc0NhbGxiYWNrOildKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9y
dFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91
bmQsICInTmV0d29yazMubG9hZFJlc291cmNlNicgd2FzIG5vdCBmb3VuZCJfcyk7CisgICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsK
KyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0
SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgIH07CisKKyAgICBpZCBz
dWNjZXNzQ2FsbGJhY2sgPSBeeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVz
cG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgfTsK
KworICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZTZXaXRoRXJyb3JDYWxsYmFjazplcnJvckNh
bGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOworfQorCit2b2lkIE9iakNJ
bnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U3KGxvbmcgcmVx
dWVzdElkKQoreworICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxl
Y3Rvcihsb2FkUmVzb3VyY2U3V2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7
CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVz
dElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMubG9hZFJl
c291cmNlNycgd2FzIG5vdCBmb3VuZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCkt
PnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZCBl
cnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKKyAgICAgICAgYmFja2VuZERpc3Bh
dGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVy
OjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5k
UGVuZGluZ0Vycm9ycygpOworICAgIH07CisKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeewor
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgfTsKKworICAgIFttX2RlbGVnYXRlIGxv
YWRSZXNvdXJjZTdXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFj
azpzdWNjZXNzQ2FsbGJhY2tdOworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbiBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rv
ci9UZXN0UHJvdG9jb2wuaD4KKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQi
KSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAorQHBy
b3BlcnR5IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNldE5ldHdvcmsxSGFuZGxlcjopIGlk
PFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4gbmV0d29yazFIYW5kbGVyOworQHBy
b3BlcnR5IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNldE5ldHdvcmszSGFuZGxlcjopIGlk
PFRlc3RQcm90b2NvbE5ldHdvcmszRG9tYWluSGFuZGxlcj4gbmV0d29yazNIYW5kbGVyOworQGVu
ZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29u
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbi5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5o
IgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisjaW1wb3J0IDxK
YXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgorI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgorCit1
c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2Nv
bnRyb2xsZXI7CisgICAgaWQ8VGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyPiBfbmV0
d29yazFIYW5kbGVyOworICAgIGlkPFRlc3RQcm90b2NvbE5ldHdvcmszRG9tYWluSGFuZGxlcj4g
X25ldHdvcmszSGFuZGxlcjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxl
cjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCit7CisgICAgc2Vs
ZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7Cisg
ICAgQVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKKyAg
ICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgW19uZXR3b3JrMUhh
bmRsZXIgcmVsZWFzZV07CisgICAgW19uZXR3b3JrM0hhbmRsZXIgcmVsZWFzZV07CisgICAgW3N1
cGVyIGRlYWxsb2NdOworfQorCistICh2b2lkKXNldE5ldHdvcmsxSGFuZGxlcjooaWQ8VGVzdFBy
b3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyPiloYW5kbGVyCit7CisgICAgaWYgKGhhbmRsZXIg
PT0gX25ldHdvcmsxSGFuZGxlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgW19uZXR3b3JrMUhh
bmRsZXIgcmVsZWFzZV07CisgICAgX25ldHdvcmsxSGFuZGxlciA9IFtoYW5kbGVyIHJldGFpbl07
CisKKyAgICBhdXRvIGFsdGVybmF0ZURpc3BhdGNoZXIgPSBtYWtlVW5pcXVlPE9iakNJbnNwZWN0
b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPihoYW5kbGVyKTsKKyAgICBhdXRvIGFsdGVybmF0
ZUFnZW50ID0gbWFrZVVuaXF1ZTxBbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudDxOZXR3b3JrMUJh
Y2tlbmREaXNwYXRjaGVyLCBBbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPj4oIk5l
dHdvcmsxIl9zLCAqX2NvbnRyb2xsZXIsIFdURk1vdmUoYWx0ZXJuYXRlRGlzcGF0Y2hlcikpOwor
ICAgIF9jb250cm9sbGVyLT5hcHBlbmRFeHRyYUFnZW50KFdURk1vdmUoYWx0ZXJuYXRlQWdlbnQp
KTsKK30KKworLSAoaWQ8VGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyPiluZXR3b3Jr
MUhhbmRsZXIKK3sKKyAgICByZXR1cm4gX25ldHdvcmsxSGFuZGxlcjsKK30KKworLSAodm9pZClz
ZXROZXR3b3JrM0hhbmRsZXI6KGlkPFRlc3RQcm90b2NvbE5ldHdvcmszRG9tYWluSGFuZGxlcj4p
aGFuZGxlcgoreworICAgIGlmIChoYW5kbGVyID09IF9uZXR3b3JrM0hhbmRsZXIpCisgICAgICAg
IHJldHVybjsKKworICAgIFtfbmV0d29yazNIYW5kbGVyIHJlbGVhc2VdOworICAgIF9uZXR3b3Jr
M0hhbmRsZXIgPSBbaGFuZGxlciByZXRhaW5dOworCisgICAgYXV0byBhbHRlcm5hdGVEaXNwYXRj
aGVyID0gbWFrZVVuaXF1ZTxPYmpDSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcj4o
aGFuZGxlcik7CisgICAgYXV0byBhbHRlcm5hdGVBZ2VudCA9IG1ha2VVbmlxdWU8QWx0ZXJuYXRl
RGlzcGF0Y2hhYmxlQWdlbnQ8TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlciwgQWx0ZXJuYXRlTmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlcj4+KCJOZXR3b3JrMyJfcywgKl9jb250cm9sbGVyLCBXVEZN
b3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIpKTsKKyAgICBfY29udHJvbGxlci0+YXBwZW5kRXh0cmFB
Z2VudChXVEZNb3ZlKGFsdGVybmF0ZUFnZW50KSk7Cit9CisKKy0gKGlkPFRlc3RQcm90b2NvbE5l
dHdvcmszRG9tYWluSGFuZGxlcj4pbmV0d29yazNIYW5kbGVyCit7CisgICAgcmV0dXJuIF9uZXR3
b3JrM0hhbmRsZXI7Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENv
bmZpZ3VyYXRpb24ubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0
Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgt
dmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+
CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wu
aAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5n
LWNvbW1hbmQtc2l6ZXMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCisjaW1wb3J0IDxXZWJJbnNw
ZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+CisKKworCisKKworCisKKworQHByb3RvY29s
IFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlciA8TlNPYmplY3Q+CitAb3B0aW9uYWwK
Ky0gKHZvaWQpbG9hZFJlc291cmNlMVdpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5n
ICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikodm9pZCkpc3Vj
Y2Vzc0NhbGxiYWNrOworQGVuZAorCitAcHJvdG9jb2wgVGVzdFByb3RvY29sTmV0d29yazNEb21h
aW5IYW5kbGVyIDxOU09iamVjdD4KK0BvcHRpb25hbAorLSAodm9pZClsb2FkUmVzb3VyY2UxV2l0
aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1
Y2Nlc3NDYWxsYmFjazoodm9pZCheKSh2b2lkKSlzdWNjZXNzQ2FsbGJhY2s7CistICh2b2lkKWxv
YWRSZXNvdXJjZTJXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVy
cm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKHZvaWQpKXN1Y2Nlc3NDYWxsYmFj
azsKKy0gKHZvaWQpbG9hZFJlc291cmNlM1dpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3Ry
aW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikodm9pZCkp
c3VjY2Vzc0NhbGxiYWNrOworLSAodm9pZClsb2FkUmVzb3VyY2U0V2l0aEVycm9yQ2FsbGJhY2s6
KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoo
dm9pZCheKSh2b2lkKSlzdWNjZXNzQ2FsbGJhY2s7CistICh2b2lkKWxvYWRSZXNvdXJjZTVXaXRo
RXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3Vj
Y2Vzc0NhbGxiYWNrOih2b2lkKF4pKHZvaWQpKXN1Y2Nlc3NDYWxsYmFjazsKKy0gKHZvaWQpbG9h
ZFJlc291cmNlNldpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJy
b3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikodm9pZCkpc3VjY2Vzc0NhbGxiYWNr
OworLSAodm9pZClsb2FkUmVzb3VyY2U3V2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJp
bmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKSh2b2lkKSlz
dWNjZXNzQ2FsbGJhY2s7CitAZW5kCisKKworCisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQ
cm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4KKworIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2wuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1h
bmQtc2l6ZXMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNp
bXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFBy
aXZhdGUuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29u
dHJvbGxlci5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKworCisKKworIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRv
bWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCA8
V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgorCituYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgorT3B0aW9uYWw8
T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7CisK
KworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13
aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisK
KyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNl
ci5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUu
aD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGludGVyZmFjZSBUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMgKE5ldHdvcmsyRG9tYWluKQorCisrICh2b2lkKV9wYXJzZUxvYWRl
cklkOihOU1N0cmluZyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKworQGVu
ZAorCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChOZXR3b3Jr
MkRvbWFpbikKKworKyAodm9pZClfcGFyc2VMb2FkZXJJZDooTlNTdHJpbmcgKiopb3V0VmFsdWUg
ZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9U
WVBFKHBheWxvYWQsIFtOU1N0cmluZyBjbGFzc10pOworICAgICpvdXRWYWx1ZSA9IChOU1N0cmlu
ZyAqKXBheWxvYWQ7Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0K
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1j
b21tYW5kLXNpemVzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpT
T05PYmplY3RQcml2YXRlLmg+CisjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2ltcG9ydCA8
d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisKKwor
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2VudW0tdmFsdWVz
Lmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V4cGVjdGVkL2VudW0tdmFsdWVzLmpzb24tcmVzdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjExNDgzMzli
YjIxMGZjYzczOGZkZjhhNTM4ODllNjU2MmJkMWRkYzkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZW51bS12
YWx1ZXMuanNvbi1yZXN1bHQKQEAgLTAsMCArMSwxMTgzIEBACisjIyMgQmVnaW4gRmlsZTogSW5z
cGVjdG9yQmFja2VuZENvbW1hbmRzLmpzLmluCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gZW51bS12YWx1ZXMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKy8vIFR5cGVEb21haW4KK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIlR5
cGVEb21haW4iLCBudWxsKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJUeXBlRG9t
YWluLlR5cGVEb21haW5FbnVtIiwge1NoYXJlZDogInNoYXJlZCIsIFJlZDogInJlZCIsIEdyZWVu
OiAiZ3JlZW4iLCBCbHVlOiAiYmx1ZSJ9KTsKK0luc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21h
aW4oIlR5cGVEb21haW4iLCBudWxsKTsKKworLy8gQ29tbWFuZERvbWFpbgorSW5zcGVjdG9yQmFj
a2VuZC5yZWdpc3RlckRvbWFpbigiQ29tbWFuZERvbWFpbiIsIG51bGwpOworSW5zcGVjdG9yQmFj
a2VuZC5yZWdpc3RlckNvbW1hbmQoIkNvbW1hbmREb21haW4uY29tbWFuZFdpdGhFbnVtUmV0dXJu
VmFsdWUiLCBudWxsLCBbXSwgWyJyZXR1cm5WYWx1ZSJdKTsKK0luc3BlY3RvckJhY2tlbmQuYWN0
aXZhdGVEb21haW4oIkNvbW1hbmREb21haW4iLCBudWxsKTsKKworLy8gRXZlbnREb21haW4KK0lu
c3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIkV2ZW50RG9tYWluIiwgbnVsbCk7CitJbnNw
ZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiRXZlbnREb21haW4uRXZlbnRXaXRoRW51bVBhcmFt
ZXRlclBhcmFtZXRlciIsIHtTaGFyZWQ6ICJzaGFyZWQiLCBCbGFjazogImJsYWNrIiwgV2hpdGU6
ICJ3aGl0ZSJ9KTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudCgiRXZlbnREb21haW4u
ZXZlbnRXaXRoRW51bVBhcmFtZXRlciIsIG51bGwsIFsicGFyYW1ldGVyIl0pOworSW5zcGVjdG9y
QmFja2VuZC5yZWdpc3RlckV2ZW50RG9tYWluRGlzcGF0Y2hlciA9IEluc3BlY3RvckJhY2tlbmQu
cmVnaXN0ZXJEaXNwYXRjaGVyLmJpbmQoSW5zcGVjdG9yQmFja2VuZCwgIkV2ZW50RG9tYWluIik7
CitJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJFdmVudERvbWFpbiIsIG51bGwpOwor
IyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMuaW4KKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIK
KyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisKK25h
bWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7
CitwdWJsaWM6CisgICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERp
c3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShk
aXNwYXRjaGVyKTsgfQorICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigp
IGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KK3ByaXZhdGU6Cisg
ICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOworfTsKKwor
CitjbGFzcyBBbHRlcm5hdGVDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMg
QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgfkFsdGVy
bmF0ZUNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQorICAgIHZpcnR1YWwgdm9p
ZCBjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShsb25nIGNhbGxJZCkgPSAwOworfTsKKworfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVS
TkFURV9ESVNQQVRDSEVSUykKKyMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNw
YXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
KworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwor
CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCitjbGFzcyBBbHRl
cm5hdGVDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI7CisjZW5kaWYgLy8gRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKK2NsYXNzIENvbW1hbmREb21haW5CYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIgeworcHVibGljOgorICAgIC8vIE5hbWVkIGFmdGVyIHBhcmFt
ZXRlciAncmV0dXJuVmFsdWUnIHdoaWxlIGdlbmVyYXRpbmcgY29tbWFuZC9ldmVudCBjb21tYW5k
V2l0aEVudW1SZXR1cm5WYWx1ZS4KKyAgICBlbnVtIGNsYXNzIFJldHVyblZhbHVlIHsKKyAgICAg
ICAgU2hhcmVkID0gMCwKKyAgICAgICAgQ3lhbiA9IDYsCisgICAgICAgIE1hZ2VudGEgPSA3LAor
ICAgICAgICBZZWxsb3cgPSA4LAorICAgIH07IC8vIGVudW0gY2xhc3MgUmV0dXJuVmFsdWUKKyAg
ICB2aXJ0dWFsIHZvaWQgY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUoRXJyb3JTdHJpbmcmLCBD
b21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpSZXR1cm5WYWx1ZSogb3V0X3Jl
dHVyblZhbHVlKSA9IDA7Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+Q29tbWFuZERvbWFpbkJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlcigpOworfTsKKworY2xhc3MgQ29tbWFuZERvbWFpbkJhY2tl
bmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVy
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hl
cj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRj
aGVySGFuZGxlciopOworICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0
cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOworcHJpdmF0
ZToKKyAgICB2b2lkIGNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlKGxvbmcgcmVxdWVzdElkLCBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOworI2lmIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQorcHVibGljOgorICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlz
cGF0Y2hlcihBbHRlcm5hdGVDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0
ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hl
cjsgfQorcHJpdmF0ZToKKyAgICBBbHRlcm5hdGVDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNo
ZXIqIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciB7IG51bGxwdHIgfTsKKyNlbmRpZiAvLyBFTkFCTEUo
SU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK3ByaXZhdGU6CisgICAgQ29tbWFuZERv
bWFpbkJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiwgQ29tbWFuZERvbWFpbkJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXIqIG1fYWdlbnQgeyBudWxscHRyIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEJhY2tl
bmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJv
bnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0
Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lm
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorI2luY2x1ZGUgIlRlc3RB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK0NvbW1h
bmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5Db21tYW5kRG9tYWluQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyKCkgeyB9CisKK1JlZjxDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNo
ZXI+IENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEJhY2tlbmREaXNwYXRj
aGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlciogYWdlbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ29tbWFuZERvbWFpbkJh
Y2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOworfQorCitDb21tYW5k
RG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcihC
YWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIENvbW1hbmREb21haW5CYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQorICAgIDogU3VwcGxlbWVudGFsQmFja2VuZERpc3Bh
dGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCisgICAgLCBtX2FnZW50KGFnZW50KQoreworICAgIG1f
YmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbigiQ29tbWFuZERv
bWFpbiJfcywgdGhpcyk7Cit9CisKK3ZvaWQgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVy
OjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09O
OjpPYmplY3Q+JiYgbWVzc2FnZSkKK3sKKyAgICBSZWY8Q29tbWFuZERvbWFpbkJhY2tlbmREaXNw
YXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKKworICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFt
ZXRlcnM7CisgICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRlcnMpOwor
CisgICAgaWYgKG1ldGhvZCA9PSAiY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUiKSB7CisgICAg
ICAgIGNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0
ZXJzKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwg
IidDb21tYW5kRG9tYWluLiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7Cit9CisKK3Zv
aWQgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpjb21tYW5kV2l0aEVudW1SZXR1cm5W
YWx1ZShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKK3sKKyNpZiBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyAgICBpZiAobV9hbHRlcm5hdGVE
aXNwYXRjaGVyKSB7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+Y29tbWFuZFdpdGhF
bnVtUmV0dXJuVmFsdWUocmVxdWVzdElkKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRp
ZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworICAgIEVycm9y
U3RyaW5nIGVycm9yOworICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVj
dDo6Y3JlYXRlKCk7CisgICAgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6
UmV0dXJuVmFsdWUgb3V0X3JldHVyblZhbHVlOworICAgIG1fYWdlbnQtPmNvbW1hbmRXaXRoRW51
bVJldHVyblZhbHVlKGVycm9yLCAmb3V0X3JldHVyblZhbHVlKTsKKworICAgIGlmICghZXJyb3Iu
bGVuZ3RoKCkpCisgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJyZXR1cm5WYWx1ZSJfcywgSW5z
cGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKG91dF9y
ZXR1cm5WYWx1ZSkpOworCisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKKyAgICAgICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBm
YWxzZSk7CisgICAgZWxzZQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90
b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikp
OworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0QmFj
a2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0
Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpz
b24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZh
bHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5z
cGVjdG9yIHsKKworY2xhc3MgRnJvbnRlbmRSb3V0ZXI7CisKK2NsYXNzIEV2ZW50RG9tYWluRnJv
bnRlbmREaXNwYXRjaGVyIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoK
KyAgICBFdmVudERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcihGcm9udGVuZFJvdXRlciYgZnJvbnRl
bmRSb3V0ZXIpIDogbV9mcm9udGVuZFJvdXRlcihmcm9udGVuZFJvdXRlcikgeyB9CisgICAgICAg
IC8vIE5hbWVkIGFmdGVyIHBhcmFtZXRlciAncGFyYW1ldGVyJyB3aGlsZSBnZW5lcmF0aW5nIGNv
bW1hbmQvZXZlbnQgZXZlbnRXaXRoRW51bVBhcmFtZXRlci4KKyAgICAgICAgZW51bSBjbGFzcyBQ
YXJhbWV0ZXIgeworICAgICAgICAgICAgU2hhcmVkID0gMCwKKyAgICAgICAgICAgIEJsYWNrID0g
NCwKKyAgICAgICAgICAgIFdoaXRlID0gNSwKKyAgICAgICAgfTsgLy8gZW51bSBjbGFzcyBQYXJh
bWV0ZXIKKyAgICB2b2lkIGV2ZW50V2l0aEVudW1QYXJhbWV0ZXIoUGFyYW1ldGVyIHBhcmFtZXRl
cik7Citwcml2YXRlOgorICAgIEZyb250ZW5kUm91dGVyJiBtX2Zyb250ZW5kUm91dGVyOworfTsK
KworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERp
c3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNw
cAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordm9pZCBFdmVudERvbWFpbkZy
b250ZW5kRGlzcGF0Y2hlcjo6ZXZlbnRXaXRoRW51bVBhcmFtZXRlcihQYXJhbWV0ZXIgcGFyYW1l
dGVyKQoreworICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJFdmVu
dERvbWFpbi5ldmVudFdpdGhFbnVtUGFyYW1ldGVyIl9zKTsKKyAgICBSZWY8SlNPTjo6T2JqZWN0
PiBwYXJhbXNPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIHBhcmFtc09iamVj
dC0+c2V0U3RyaW5nKCJwYXJhbWV0ZXIiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxw
ZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShwYXJhbWV0ZXIpKTsKKyAgICBqc29uTWVzc2FnZS0+
c2V0T2JqZWN0KCJwYXJhbXMiX3MsIFdURk1vdmUocGFyYW1zT2JqZWN0KSk7CisKKyAgICBtX2Zy
b250ZW5kUm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmRE
aXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KKyNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK25hbWVzcGFj
ZSBQcm90b2NvbCB7CisKKworCisvLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KK25hbWVzcGFjZSBU
eXBlRG9tYWluIHsKK2VudW0gY2xhc3MgVHlwZURvbWFpbkVudW07Cit9IC8vIFR5cGVEb21haW4K
Ky8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KKworCisKKworbmFtZXNwYWNlIFRlc3RI
ZWxwZXJzIHsKKworU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKTsKKwordGVt
cGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKFQgZW51bVZhbHVl
KQoreworICAgIHJldHVybiBnZXRFbnVtQ29uc3RhbnRWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KGVu
dW1WYWx1ZSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycworCituYW1lc3BhY2Ug
VHlwZURvbWFpbiB7CisKK2VudW0gY2xhc3MgVHlwZURvbWFpbkVudW0geworICAgIFNoYXJlZCA9
IDAsCisgICAgUmVkID0gMSwKKyAgICBHcmVlbiA9IDIsCisgICAgQmx1ZSA9IDMsCit9OyAvLyBl
bnVtIGNsYXNzIFR5cGVEb21haW5FbnVtCisKK30gLy8gVHlwZURvbWFpbgorCisKKworbmFtZXNw
YWNlIFRlc3RIZWxwZXJzIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgUHJvdG9jb2xFbnVtVHlwZT4K
K09wdGlvbmFsPFByb3RvY29sRW51bVR5cGU+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZyhjb25z
dCBTdHJpbmcmKTsKKworLy8gRW51bXMgaW4gdGhlICdUeXBlRG9tYWluJyBEb21haW4KK3RlbXBs
YXRlPD4KK09wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46OlR5cGVEb21h
aW5FbnVtPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6VHlw
ZURvbWFpbjo6VHlwZURvbWFpbkVudW0+KGNvbnN0IFN0cmluZyYpOworCit9IC8vIG5hbWVzcGFj
ZSBUZXN0SGVscGVycworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBEZWZhdWx0SGFzaDsKKworLy8gSGFzaCBkZWNsYXJhdGlvbnMgaW4gdGhlICdUeXBlRG9t
YWluJyBEb21haW4KK3RlbXBsYXRlPD4KK3N0cnVjdCBEZWZhdWx0SGFzaDxJbnNwZWN0b3I6OlBy
b3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51bT4geworICAgIHR5cGVkZWYgSW50SGFz
aDxJbnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51bT4gSGFzaDsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdURgorIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmpl
Y3RzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbiBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitu
YW1lc3BhY2UgUHJvdG9jb2wgeworCituYW1lc3BhY2UgVGVzdEhlbHBlcnMgeworCitzdGF0aWMg
Y29uc3QgY2hhciogY29uc3QgZW51bV9jb25zdGFudF92YWx1ZXNbXSA9IHsKKyAgICAic2hhcmVk
IiwKKyAgICAicmVkIiwKKyAgICAiZ3JlZW4iLAorICAgICJibHVlIiwKKyAgICAiYmxhY2siLAor
ICAgICJ3aGl0ZSIsCisgICAgImN5YW4iLAorICAgICJtYWdlbnRhIiwKKyAgICAieWVsbG93IiwK
K307CisKK1N0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgeworICAgIHJldHVy
biBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb2RlXTsKK30KKworLy8gRW51bXMgaW4gdGhlICdUeXBl
RG9tYWluJyBEb21haW4KKwordGVtcGxhdGU8PgorT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW0+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJ
bnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51bT4oY29uc3QgU3Ry
aW5nJiBwcm90b2NvbFN0cmluZykKK3sKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50
VmFsdWVzW10gPSB7CisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURv
bWFpbjo6VHlwZURvbWFpbkVudW06OlNoYXJlZCwKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6
OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51bTo6UmVkLAorICAgICAgICAoc2l6
ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46OlR5cGVEb21haW5FbnVtOjpHcmVl
biwKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBl
RG9tYWluRW51bTo6Qmx1ZSwKKyAgICB9OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgNDsg
KytpKQorICAgICAgICBpZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNb
Y29uc3RhbnRWYWx1ZXNbaV1dKQorICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3Rv
Y29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51bSljb25zdGFudFZhbHVlc1tpXTsKKworICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCisK
KworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
KworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorCisjIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworQHBy
b3RvY29sIFRlc3RQcm90b2NvbENvbW1hbmREb21haW5Eb21haW5IYW5kbGVyOworCituYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKKworCitjbGFzcyBPYmpDSW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tl
bmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZUNvbW1hbmREb21haW5CYWNrZW5k
RGlzcGF0Y2hlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAg
T2JqQ0luc3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9j
b2xDb21tYW5kRG9tYWluRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFu
ZGxlcjsgfQorICAgIHZvaWQgY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUobG9uZyByZXF1ZXN0
SWQpIGZpbmFsOworcHJpdmF0ZToKKyAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sQ29tbWFu
ZERvbWFpbkRvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJz
LmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNp
bXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSAiVGVz
dFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9y
IHsKKwordm9pZCBPYmpDSW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpj
b21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShsb25nIHJlcXVlc3RJZCkKK3sKKyAgICBpZiAoIVtt
X2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoY29tbWFuZFdpdGhFbnVtUmV0
dXJuVmFsdWVXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsKKyAgICAgICAg
YmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tl
bmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidDb21tYW5kRG9tYWluLmNvbW1hbmRXaXRo
RW51bVJldHVyblZhbHVlJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2VuZERpc3Bh
dGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgeworICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERp
c3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVy
KCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgfTsKKworICAgIGlkIHN1Y2Nlc3NDYWxsYmFj
ayA9IF4oVGVzdFByb3RvY29sQ29tbWFuZERvbWFpbkNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVl
UmV0dXJuVmFsdWUgcmV0dXJuVmFsdWUpIHsKKyAgICAgICAgUmVmPEpTT046Ok9iamVjdD4gcmVz
dWx0T2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0
LT5zZXRTdHJpbmcoInJldHVyblZhbHVlIl9zLCB0b1Byb3RvY29sU3RyaW5nKHJldHVyblZhbHVl
KSk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQs
IFdURk1vdmUocmVzdWx0T2JqZWN0KSwgZmFsc2UpOworICAgIH07CisKKyAgICBbbV9kZWxlZ2F0
ZSBjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZVdpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJh
Y2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107Cit9CisKK30gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVy
cy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbiBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0
UHJvdG9jb2wuaD4KKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitA
aW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAorQHByb3BlcnR5
IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNldENvbW1hbmREb21haW5IYW5kbGVyOikgaWQ8
VGVzdFByb3RvY29sQ29tbWFuZERvbWFpbkRvbWFpbkhhbmRsZXI+IGNvbW1hbmREb21haW5IYW5k
bGVyOworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBUZXN0UHJvdG9jb2xFdmVudERv
bWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqZXZlbnREb21haW5FdmVudERpc3BhdGNoZXI7CitA
ZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5o
IgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2ltcG9ydCAiVGVzdFByb3Rv
Y29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5h
dGVEaXNwYXRjaGFibGVBZ2VudC5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFi
bGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVj
dG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgoreworICAg
IEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7CisgICAgaWQ8VGVz
dFByb3RvY29sQ29tbWFuZERvbWFpbkRvbWFpbkhhbmRsZXI+IF9jb21tYW5kRG9tYWluSGFuZGxl
cjsKKyAgICBUZXN0UHJvdG9jb2xFdmVudERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqX2V2
ZW50RG9tYWluRXZlbnREaXNwYXRjaGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhD
b250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sK
KyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJu
IG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9s
bGVyOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbX2Nv
bW1hbmREb21haW5IYW5kbGVyIHJlbGVhc2VdOworICAgIFtfZXZlbnREb21haW5FdmVudERpc3Bh
dGNoZXIgcmVsZWFzZV07CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistICh2b2lkKXNldENv
bW1hbmREb21haW5IYW5kbGVyOihpZDxUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluRG9tYWluSGFu
ZGxlcj4paGFuZGxlcgoreworICAgIGlmIChoYW5kbGVyID09IF9jb21tYW5kRG9tYWluSGFuZGxl
cikKKyAgICAgICAgcmV0dXJuOworCisgICAgW19jb21tYW5kRG9tYWluSGFuZGxlciByZWxlYXNl
XTsKKyAgICBfY29tbWFuZERvbWFpbkhhbmRsZXIgPSBbaGFuZGxlciByZXRhaW5dOworCisgICAg
YXV0byBhbHRlcm5hdGVEaXNwYXRjaGVyID0gbWFrZVVuaXF1ZTxPYmpDSW5zcGVjdG9yQ29tbWFu
ZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPihoYW5kbGVyKTsKKyAgICBhdXRvIGFsdGVybmF0ZUFn
ZW50ID0gbWFrZVVuaXF1ZTxBbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudDxDb21tYW5kRG9tYWlu
QmFja2VuZERpc3BhdGNoZXIsIEFsdGVybmF0ZUNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hl
cj4+KCJDb21tYW5kRG9tYWluIl9zLCAqX2NvbnRyb2xsZXIsIFdURk1vdmUoYWx0ZXJuYXRlRGlz
cGF0Y2hlcikpOworICAgIF9jb250cm9sbGVyLT5hcHBlbmRFeHRyYUFnZW50KFdURk1vdmUoYWx0
ZXJuYXRlQWdlbnQpKTsKK30KKworLSAoaWQ8VGVzdFByb3RvY29sQ29tbWFuZERvbWFpbkRvbWFp
bkhhbmRsZXI+KWNvbW1hbmREb21haW5IYW5kbGVyCit7CisgICAgcmV0dXJuIF9jb21tYW5kRG9t
YWluSGFuZGxlcjsKK30KKworLSAoVGVzdFByb3RvY29sRXZlbnREb21haW5Eb21haW5FdmVudERp
c3BhdGNoZXIgKilldmVudERvbWFpbkV2ZW50RGlzcGF0Y2hlcgoreworICAgIGlmICghX2V2ZW50
RG9tYWluRXZlbnREaXNwYXRjaGVyKQorICAgICAgICBfZXZlbnREb21haW5FdmVudERpc3BhdGNo
ZXIgPSBbW1Rlc3RQcm90b2NvbEV2ZW50RG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyIGFsbG9j
XSBpbml0V2l0aENvbnRyb2xsZXI6X2NvbnRyb2xsZXJdOworICAgIHJldHVybiBfZXZlbnREb21h
aW5FdmVudERpc3BhdGNoZXI7Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbENvbmZpZ3VyYXRpb24ubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50
RGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZh
bHVlcy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9y
dCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLmgiCisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sRXZlbnREb21haW5E
b21haW5FdmVudERpc3BhdGNoZXIKK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xs
ZXIqIF9jb250cm9sbGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVy
OihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxm
ID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAg
ICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAg
IHJldHVybiBzZWxmOworfQorCistICh2b2lkKWV2ZW50V2l0aEVudW1QYXJhbWV0ZXJXaXRoUGFy
YW1ldGVyOihUZXN0UHJvdG9jb2xFdmVudERvbWFpbkV2ZW50V2l0aEVudW1QYXJhbWV0ZXJQYXJh
bWV0ZXIpcGFyYW1ldGVyCit7CisgICAgY29uc3QgRnJvbnRlbmRSb3V0ZXImIHJvdXRlciA9IF9j
b250cm9sbGVyLT5mcm9udGVuZFJvdXRlcigpOworCisgICAgUmVmPEpTT046Ok9iamVjdD4ganNv
bk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGpzb25NZXNzYWdlLT5zZXRT
dHJpbmcoIm1ldGhvZCJfcywgIkV2ZW50RG9tYWluLmV2ZW50V2l0aEVudW1QYXJhbWV0ZXIiX3Mp
OworICAgIFJlZjxKU09OOjpPYmplY3Q+IHBhcmFtc09iamVjdCA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7CisgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInBhcmFtZXRlciJfcywgdG9Qcm90
b2NvbFN0cmluZyhwYXJhbWV0ZXIpKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJh
bXMiX3MsIFdURk1vdmUocGFyYW1zT2JqZWN0KSk7CisgICAgcm91dGVyLnNlbmRFdmVudChqc29u
TWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2wuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpz
b24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxGb3Vu
ZGF0aW9uL0ZvdW5kYXRpb24uaD4KKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29s
SlNPTk9iamVjdC5oPgorCisKKworCit0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJv
dG9jb2xUeXBlRG9tYWluRW51bSkgeworICAgIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtU2hh
cmVkLAorICAgIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtUmVkLAorICAgIFRlc3RQcm90b2Nv
bFR5cGVEb21haW5FbnVtR3JlZW4sCisgICAgVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1CbHVl
LAorfTsKKworCisKK0Bwcm90b2NvbCBUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluRG9tYWluSGFu
ZGxlciA8TlNPYmplY3Q+CitAb3B0aW9uYWwKKy0gKHZvaWQpY29tbWFuZFdpdGhFbnVtUmV0dXJu
VmFsdWVXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2Fs
bGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKFRlc3RQcm90b2NvbENvbW1hbmREb21haW5D
b21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZVJldHVyblZhbHVlIHJldHVyblZhbHVlKSlzdWNjZXNz
Q2FsbGJhY2s7CitAZW5kCisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0Iikp
KQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xFdmVudERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hl
ciA6IE5TT2JqZWN0CistICh2b2lkKWV2ZW50V2l0aEVudW1QYXJhbWV0ZXJXaXRoUGFyYW1ldGVy
OihUZXN0UHJvdG9jb2xFdmVudERvbWFpbkV2ZW50V2l0aEVudW1QYXJhbWV0ZXJQYXJhbWV0ZXIp
cGFyYW1ldGVyOworQGVuZAorCisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1
aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4KKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wu
aAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFs
dWVzLmg+CisKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sRXZlbnREb21haW5Eb21haW5FdmVudERp
c3BhdGNoZXIgKFByaXZhdGUpCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihJ
bnNwZWN0b3I6OkF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcjsKK0Bl
bmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCA8V2ViSW5z
cGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVj
dG9yIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgorT3B0aW9uYWw8T2JqQ0Vu
dW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7CisKK2lubGlu
ZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bSB2YWx1
ZSkKK3sKKyAgICBzd2l0Y2godmFsdWUpIHsKKyAgICBjYXNlIFRlc3RQcm90b2NvbFR5cGVEb21h
aW5FbnVtU2hhcmVkOgorICAgICAgICByZXR1cm4gInNoYXJlZCJfczsKKyAgICBjYXNlIFRlc3RQ
cm90b2NvbFR5cGVEb21haW5FbnVtUmVkOgorICAgICAgICByZXR1cm4gInJlZCJfczsKKyAgICBj
YXNlIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtR3JlZW46CisgICAgICAgIHJldHVybiAiZ3Jl
ZW4iX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bUJsdWU6CisgICAgICAg
IHJldHVybiAiYmx1ZSJfczsKKyAgICB9Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBPcHRpb25h
bDxUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0
cmluZyYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09ICJzaGFyZWQiKQorICAgICAgICByZXR1
cm4gVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1TaGFyZWQ7CisgICAgaWYgKHZhbHVlID09ICJy
ZWQiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1SZWQ7CisgICAg
aWYgKHZhbHVlID09ICJncmVlbiIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xUeXBlRG9t
YWluRW51bUdyZWVuOworICAgIGlmICh2YWx1ZSA9PSAiYmx1ZSIpCisgICAgICAgIHJldHVybiBU
ZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bUJsdWU7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
K30KKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFs
dWVzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0
ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29s
LmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCisjaW1wb3J0IDxXZWJJbnNw
ZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorCit1c2luZyBuYW1lc3BhY2Ug
SW5zcGVjdG9yOworCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoVHlw
ZURvbWFpbkRvbWFpbikKKworKyAodm9pZClfcGFyc2VUeXBlRG9tYWluRW51bTooTlNOdW1iZXIg
Kiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisKK0BlbmQKKworQGltcGxlbWVu
dGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoVHlwZURvbWFpbkRvbWFpbikKKwor
KyAodm9pZClfcGFyc2VUeXBlRG9tYWluRW51bTooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBh
eWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBh
eWxvYWQsIFtOU1N0cmluZyBjbGFzc10pOworICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbFR5cGVE
b21haW5FbnVtPiByZXN1bHQgPSBJbnNwZWN0b3I6OmZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJv
dG9jb2xUeXBlRG9tYWluRW51bT4ocGF5bG9hZCk7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9C
QURfRU5VTV9WQUxVRShyZXN1bHQsIEAiVHlwZURvbWFpbkVudW0iKTsKKyAgICAqb3V0VmFsdWUg
PSBAKHJlc3VsdC52YWx1ZSgpKTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xU
eXBlcy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpz
b24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0
UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRl
Lmg+CisjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMu
aD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisKKworIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2V2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmct
ZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2V2ZW50LXRhcmdldFR5cGUtbWF0Y2hp
bmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tcmVzdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI0NDFlYTFi
MTM0NjNhMWQzODk0MjUzNjMxODU2NDY5MDI2YjJlNDcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnQt
dGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1yZXN1bHQKQEAg
LTAsMCArMSwxMDExIEBACisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRz
LmpzLmluCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0VHlw
ZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKy8vIERvbWFpbgorSW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rl
ckRvbWFpbigiRG9tYWluIiwgbnVsbCk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFu
ZCgiRG9tYWluLkNvbW1hbmQiLCBudWxsLCBbXSwgW10pOworSW5zcGVjdG9yQmFja2VuZC5yZWdp
c3RlckV2ZW50KCJEb21haW4uRXZlbnQiLCBbInBhZ2UiLCAid29ya2VyIl0sIFtdKTsKK0luc3Bl
Y3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW5EaXNwYXRjaGVyID0gSW5zcGVjdG9yQmFja2VuZC5y
ZWdpc3RlckRpc3BhdGNoZXIuYmluZChJbnNwZWN0b3JCYWNrZW5kLCAiRG9tYWluIik7CitJbnNw
ZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJEb21haW4iLCBbInBhZ2UiXSk7CisjIyMgRW5k
IEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcy5pbgorCisjIyMgQmVnaW4gRmlsZTog
VGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5
cGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEg
b25jZQorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyNp
bmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNz
IEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldEJhY2tl
bmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1f
YmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9CisgICAgQmFja2VuZERp
c3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlz
cGF0Y2hlci5nZXQoKTsgfQorcHJpdmF0ZToKKyAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+
IG1fYmFja2VuZERpc3BhdGNoZXI7Cit9OworCisKK2NsYXNzIEFsdGVybmF0ZURvbWFpbkJhY2tl
bmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1Ymxp
YzoKKyAgICB2aXJ0dWFsIH5BbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQor
ICAgIHZpcnR1YWwgdm9pZCBDb21tYW5kKGxvbmcgY2FsbElkKSA9IDA7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQorIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9t
YWluLWRlYnVnZ2FibGVUeXBlLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIK
KyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsK
KwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKK2NsYXNzIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRj
aGVyOworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQor
CitjbGFzcyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgeworcHVibGljOgorICAgIHZp
cnR1YWwgdm9pZCBDb21tYW5kKEVycm9yU3RyaW5nJikgPSAwOworcHJvdGVjdGVkOgorICAgIHZp
cnR1YWwgfkRvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOworfTsKKworY2xhc3MgRG9t
YWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERp
c3BhdGNoZXIgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8RG9tYWluQmFja2VuZERpc3BhdGNo
ZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlciopOworICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYg
bWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOworcHJpdmF0ZToKKyAg
ICB2b2lkIENvbW1hbmQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFy
YW1ldGVycyk7CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCitw
dWJsaWM6CisgICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZURvbWFpbkJh
Y2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0
Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KK3ByaXZhdGU6CisgICAgQWx0ZXJuYXRlRG9t
YWluQmFja2VuZERpc3BhdGNoZXIqIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciB7IG51bGxwdHIgfTsK
KyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK3ByaXZh
dGU6CisgICAgRG9tYWluQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImLCBEb21h
aW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICBEb21haW5CYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIqIG1fYWdlbnQgeyBudWxscHRyIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVU
eXBlLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRl
IDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQorI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hl
cnMuaCIKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
KworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK0RvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxl
cjo6fkRvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQorCitSZWY8RG9tYWluQmFj
a2VuZERpc3BhdGNoZXI+IERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoQmFja2VuZERp
c3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIqIGFnZW50KQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERvbWFpbkJhY2tlbmREaXNw
YXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOworfQorCitEb21haW5CYWNrZW5kRGlz
cGF0Y2hlcjo6RG9tYWluQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tl
bmREaXNwYXRjaGVyLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQorICAg
IDogU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCisgICAg
LCBtX2FnZW50KGFnZW50KQoreworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlz
cGF0Y2hlckZvckRvbWFpbigiRG9tYWluIl9zLCB0aGlzKTsKK30KKwordm9pZCBEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0
aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCit7CisgICAgUmVmPERvbWFpbkJhY2tl
bmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKKworICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+
IHBhcmFtZXRlcnM7CisgICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRl
cnMpOworCisgICAgaWYgKG1ldGhvZCA9PSAiQ29tbWFuZCIpIHsKKyAgICAgICAgQ29tbWFuZChy
ZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlz
cGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRG9tYWluLiIgKyBtZXRob2QgKyAiJyB3YXMgbm90
IGZvdW5kIik7Cit9CisKK3ZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9u
ZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCit7CisjaWYgRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hl
cikgeworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPkNvbW1hbmQocmVxdWVzdElkKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVS
TkFURV9ESVNQQVRDSEVSUykKKworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgIFJlZjxKU09O
OjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9hZ2VudC0+
Q29tbWFuZChlcnJvcik7CisKKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQorICAgICAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCks
IGZhbHNlKTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFBy
b3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9y
KSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNw
YXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0
VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFBy
b3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBG
cm9udGVuZFJvdXRlcjsKKworY2xhc3MgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVyIHsKKyAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBEb21haW5Gcm9udGVuZERpc3Bh
dGNoZXIoRnJvbnRlbmRSb3V0ZXImIGZyb250ZW5kUm91dGVyKSA6IG1fZnJvbnRlbmRSb3V0ZXIo
ZnJvbnRlbmRSb3V0ZXIpIHsgfQorICAgIHZvaWQgRXZlbnQoKTsKK3ByaXZhdGU6CisgICAgRnJv
bnRlbmRSb3V0ZXImIG1fZnJvbnRlbmRSb3V0ZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVn
aW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJs
ZVR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit2b2lk
IERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcjo6RXZlbnQoKQoreworICAgIFJlZjxKU09OOjpPYmpl
Y3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBqc29uTWVzc2Fn
ZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOworCisgICAgbV9mcm9u
dGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlz
cGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudC10YXJnZXRUeXBlLW1hdGNoaW5n
LWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JQcm90b2NvbFR5cGVzLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKKworCituYW1lc3BhY2UgUHJvdG9jb2wgeworCisKKworCisK
KworCisKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorCisjIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29u
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKworI2luY2x1ZGUgPHd0Zi9P
cHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIElu
c3BlY3RvciB7CisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKworCit9IC8vIG5hbWVzcGFjZSBQ
cm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xPYmplY3RzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2Vu
ZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudC10
YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRh
aW5QdHIuaD4KKworQHByb3RvY29sIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI7CisK
K25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKK2NsYXNzIE9iakNJbnNwZWN0b3JEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0
Y2hlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgT2JqQ0lu
c3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFp
bkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KKyAgICB2b2lkIENv
bW1hbmQobG9uZyByZXF1ZXN0SWQpIGZpbmFsOworcHJpdmF0ZToKKyAgICBSZXRhaW5QdHI8aWQ8
VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5k
RGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3Bh
dGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0
VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVz
dFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xJ
bnRlcm5hbC5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2lu
Y2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit2b2lk
IE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVl
c3RJZCkKK3sKKyAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0
b3IoQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgeworICAgICAg
ICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFj
a2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi5Db21tYW5kJyB3YXMgbm90
IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJv
cnMoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBe
KE5TU3RyaW5nICplcnJvcikgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQ
cm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBl
cnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7
CisgICAgfTsKKworICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57CisgICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRl
KCksIGZhbHNlKTsKKyAgICB9OworCisgICAgW21fZGVsZWdhdGUgQ29tbWFuZFdpdGhFcnJvckNh
bGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107Cit9
CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bEJhY2tlbmREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29u
ZmlndXJhdGlvbi5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnQtdGFy
Z2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbiBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJv
dG9jb2wuaD4KKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50
ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAorQHByb3BlcnR5IChu
b25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNldERvbWFpbkhhbmRsZXI6KSBpZDxUZXN0UHJvdG9j
b2xEb21haW5Eb21haW5IYW5kbGVyPiBkb21haW5IYW5kbGVyOworQHByb3BlcnR5IChub25hdG9t
aWMsIHJlYWRvbmx5KSBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKmRv
bWFpbkV2ZW50RGlzcGF0Y2hlcjsKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24uaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJh
dGlvbi5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRhcmdldFR5
cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9u
LmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW1wb3J0ICJUZXN0UHJv
dG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVy
bmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50
YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNw
ZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCit7Cisg
ICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKKyAgICBpZDxU
ZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiBfZG9tYWluSGFuZGxlcjsKKyAgICBUZXN0
UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKl9kb21haW5FdmVudERpc3BhdGNo
ZXI7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxl
SW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5p
dF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIEFTU0VSVChjb250
cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAgcmV0dXJuIHNlbGY7
Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIFtfZG9tYWluSGFuZGxlciByZWxlYXNlXTsK
KyAgICBbX2RvbWFpbkV2ZW50RGlzcGF0Y2hlciByZWxlYXNlXTsKKyAgICBbc3VwZXIgZGVhbGxv
Y107Cit9CisKKy0gKHZvaWQpc2V0RG9tYWluSGFuZGxlcjooaWQ8VGVzdFByb3RvY29sRG9tYWlu
RG9tYWluSGFuZGxlcj4paGFuZGxlcgoreworICAgIGlmIChoYW5kbGVyID09IF9kb21haW5IYW5k
bGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBbX2RvbWFpbkhhbmRsZXIgcmVsZWFzZV07Cisg
ICAgX2RvbWFpbkhhbmRsZXIgPSBbaGFuZGxlciByZXRhaW5dOworCisgICAgYXV0byBhbHRlcm5h
dGVEaXNwYXRjaGVyID0gbWFrZVVuaXF1ZTxPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3Bh
dGNoZXI+KGhhbmRsZXIpOworICAgIGF1dG8gYWx0ZXJuYXRlQWdlbnQgPSBtYWtlVW5pcXVlPEFs
dGVybmF0ZURpc3BhdGNoYWJsZUFnZW50PERvbWFpbkJhY2tlbmREaXNwYXRjaGVyLCBBbHRlcm5h
dGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4+KCJEb21haW4iX3MsICpfY29udHJvbGxlciwgV1RG
TW92ZShhbHRlcm5hdGVEaXNwYXRjaGVyKSk7CisgICAgX2NvbnRyb2xsZXItPmFwcGVuZEV4dHJh
QWdlbnQoV1RGTW92ZShhbHRlcm5hdGVBZ2VudCkpOworfQorCistIChpZDxUZXN0UHJvdG9jb2xE
b21haW5Eb21haW5IYW5kbGVyPilkb21haW5IYW5kbGVyCit7CisgICAgcmV0dXJuIF9kb21haW5I
YW5kbGVyOworfQorCistIChUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIg
Kilkb21haW5FdmVudERpc3BhdGNoZXIKK3sKKyAgICBpZiAoIV9kb21haW5FdmVudERpc3BhdGNo
ZXIpCisgICAgICAgIF9kb21haW5FdmVudERpc3BhdGNoZXIgPSBbW1Rlc3RQcm90b2NvbERvbWFp
bkRvbWFpbkV2ZW50RGlzcGF0Y2hlciBhbGxvY10gaW5pdFdpdGhDb250cm9sbGVyOl9jb250cm9s
bGVyXTsKKyAgICByZXR1cm4gX2RvbWFpbkV2ZW50RGlzcGF0Y2hlcjsKK30KKworQGVuZAorCisK
KyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorCisjIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2Fi
bGVUeXBlLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1w
b3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVz
cGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xEb21haW5Eb21h
aW5FdmVudERpc3BhdGNoZXIKK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIq
IF9jb250cm9sbGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihB
dWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0g
W3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBB
U1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJl
dHVybiBzZWxmOworfQorCistICh2b2lkKUV2ZW50Cit7CisgICAgY29uc3QgRnJvbnRlbmRSb3V0
ZXImIHJvdXRlciA9IF9jb250cm9sbGVyLT5mcm9udGVuZFJvdXRlcigpOworCisgICAgUmVmPEpT
T046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGpz
b25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7CisgICAg
cm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworfQorCitAZW5k
CisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisKKyMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpz
b24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxGb3Vu
ZGF0aW9uL0ZvdW5kYXRpb24uaD4KKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29s
SlNPTk9iamVjdC5oPgorCisKKworCisKKworCisKK0Bwcm90b2NvbCBUZXN0UHJvdG9jb2xEb21h
aW5Eb21haW5IYW5kbGVyIDxOU09iamVjdD4KK0BvcHRpb25hbAorLSAodm9pZClDb21tYW5kV2l0
aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1
Y2Nlc3NDYWxsYmFjazoodm9pZCheKSh2b2lkKSlzdWNjZXNzQ2FsbGJhY2s7CitAZW5kCisKK19f
YXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJv
dG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgOiBOU09iamVjdAorLSAodm9pZClFdmVu
dDsKK0BlbmQKKworCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBh
dGliaWxpdHlPYmplY3RzLmg+CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxl
VHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9y
dCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0
ZS5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9s
bGVyLmg+CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCitAaW50ZXJmYWNlIFRlc3RQcm90
b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAoUHJpdmF0ZSkKKy0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aENvbnRyb2xsZXI6KEluc3BlY3Rvcjo6QXVnbWVudGFibGVJbnNwZWN0b3JDb250
cm9sbGVyKiljb250cm9sbGVyOworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
SW50ZXJuYWwuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
LmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudC10YXJnZXRUeXBlLW1h
dGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0IDxXZWJJ
bnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+CisKK25hbWVzcGFjZSBJbnNw
ZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+CitPcHRpb25hbDxPYmpD
RW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKKworfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRhcmdldFR5cGUt
bWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMu
aCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBl
UGFyc2VyLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJp
dmF0ZS5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisKKworCisKKworIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKworIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbFR5cGVzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
ZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbiBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2Nv
bEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgor
I2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKyNp
bXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1
c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
VHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC9ldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24t
cmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4
cGVjdGVkL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYjg5NDNlMDk0OWQ2YTdjY2ZiYTk0NTc1YTk3NWI4ZWU4NjJlYzA1ZAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC9ldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0CkBAIC0w
LDAgKzEsMTE2MyBAQAorIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5q
cy5pbgorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlv
bmFsLXBhcmFtZXRlcnMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKy8vIERhdGFiYXNlCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJEYXRhYmFz
ZSIsIG51bGwpOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckV2ZW50KCJEYXRhYmFzZS5kaWRF
eGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzIiwgbnVsbCwgWyJjb2x1bW5OYW1lcyIsICJub3RlcyIs
ICJ0aW1lc3RhbXAiLCAidmFsdWVzIiwgInBheWxvYWQiLCAic3FsRXJyb3IiLCAic2NyZWVuQ29s
b3IiLCAiYWx0ZXJuYXRlQ29sb3JzIiwgInByaW50Q29sb3IiXSk7CitJbnNwZWN0b3JCYWNrZW5k
LnJlZ2lzdGVyRXZlbnQoIkRhdGFiYXNlLmRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyIs
IG51bGwsIFsiY29sdW1uTmFtZXMiLCAibm90ZXMiLCAidGltZXN0YW1wIiwgInZhbHVlcyIsICJw
YXlsb2FkIiwgInNxbEVycm9yIiwgInNjcmVlbkNvbG9yIiwgImFsdGVybmF0ZUNvbG9ycyIsICJw
cmludENvbG9yIl0pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRhdGFiYXNlRGlzcGF0Y2hl
ciA9IEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEaXNwYXRjaGVyLmJpbmQoSW5zcGVjdG9yQmFj
a2VuZCwgIkRhdGFiYXNlIik7CitJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJEYXRh
YmFzZSIsIG51bGwpOworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMu
aW4KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBh
cmFtZXRlcnMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNw
cmFnbWEgb25jZQorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
CisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisK
K2NsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIHNl
dEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVy
KSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9CisgICAgQmFj
a2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNr
ZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQorcHJpdmF0ZToKKyAgICBSZWZQdHI8QmFja2VuZERpc3Bh
dGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Cit9OworCisKKworCit9IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENI
RVJTKQorIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKwor
IyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbiBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0eXBlZGVmIFN0cmluZyBFcnJvclN0
cmluZzsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0
QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0
Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgt
b3B0aW9uYWwtcGFyYW1ldGVycy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0
Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91
dGVyLmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJE
ZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUo
SU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyNpbmNsdWRlICJUZXN0QWx0ZXJuYXRl
QmFja2VuZERpc3BhdGNoZXJzLmgiCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5j
cHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJz
Lmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDx3dGYvSlNP
TlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKKworY2xhc3MgRnJvbnRlbmRSb3V0ZXI7CisKK2NsYXNzIERhdGFiYXNlRnJv
bnRlbmREaXNwYXRjaGVyIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoK
KyAgICBEYXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hlcihGcm9udGVuZFJvdXRlciYgZnJvbnRlbmRS
b3V0ZXIpIDogbV9mcm9udGVuZFJvdXRlcihmcm9udGVuZFJvdXRlcikgeyB9CisgICAgdm9pZCBk
aWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+
IGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIG5vdGVzLCBjb25zdCBkb3VibGUqIHRpbWVzdGFt
cCwgUmVmUHRyPEpTT046Ok9iamVjdD4gdmFsdWVzLCBSZWZQdHI8SlNPTjo6VmFsdWU+IHBheWxv
YWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVycm9y
LCBjb25zdCBTdHJpbmcqIHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6OkNvbG9yTGlzdD4gYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcqIHByaW50
Q29sb3IpOworICAgIHZvaWQgZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKFJlZlB0cjxK
U09OOjpBcnJheU9mPFN0cmluZz4+IGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG5vdGVzLCBk
b3VibGUgdGltZXN0YW1wLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiB2YWx1ZXMsIFJlZlB0cjxKU09O
OjpWYWx1ZT4gcGF5bG9hZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpF
cnJvcj4gc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiBhbHRlcm5hdGVDb2xvcnMsIGNvbnN0
IFN0cmluZyYgcHJpbnRDb2xvcik7Citwcml2YXRlOgorICAgIEZyb250ZW5kUm91dGVyJiBtX2Zy
b250ZW5kUm91dGVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZp
bGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9u
dGVuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2
ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0RnJv
bnRlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
RnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVz
cGFjZSBJbnNwZWN0b3IgeworCit2b2lkIERhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyOjpkaWRF
eGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IGNv
bHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIG5vdGVzLCBjb25zdCBkb3VibGUqIHRpbWVzdGFtcCwg
UmVmUHRyPEpTT046Ok9iamVjdD4gdmFsdWVzLCBSZWZQdHI8SlNPTjo6VmFsdWU+IHBheWxvYWQs
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVycm9yLCBj
b25zdCBTdHJpbmcqIHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0
YWJhc2U6OkNvbG9yTGlzdD4gYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcqIHByaW50Q29s
b3IpCit7CisgICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOworICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRhdGFi
YXNlLmRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMiX3MpOworICAgIFJlZjxKU09OOjpPYmpl
Y3Q+IHBhcmFtc09iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgaWYgKGNvbHVt
bk5hbWVzKQorICAgICAgICBwYXJhbXNPYmplY3QtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywg
Y29sdW1uTmFtZXMpOworICAgIGlmIChub3RlcykKKyAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRT
dHJpbmcoIm5vdGVzIl9zLCAqbm90ZXMpOworICAgIGlmICh0aW1lc3RhbXApCisgICAgICAgIHBh
cmFtc09iamVjdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICp0aW1lc3RhbXApOworICAgIGlm
ICh2YWx1ZXMpCisgICAgICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIHZh
bHVlcyk7CisgICAgaWYgKHBheWxvYWQpCisgICAgICAgIHBhcmFtc09iamVjdC0+c2V0VmFsdWUo
InBheWxvYWQiX3MsICpwYXlsb2FkKTsKKyAgICBpZiAoc3FsRXJyb3IpCisgICAgICAgIHBhcmFt
c09iamVjdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgc3FsRXJyb3IpOworICAgIGlmIChzY3Jl
ZW5Db2xvcikKKyAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9z
LCAqc2NyZWVuQ29sb3IpOworICAgIGlmIChhbHRlcm5hdGVDb2xvcnMpCisgICAgICAgIHBhcmFt
c09iamVjdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgYWx0ZXJuYXRlQ29sb3JzKTsK
KyAgICBpZiAocHJpbnRDb2xvcikKKyAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInBy
aW50Q29sb3IiX3MsICpwcmludENvbG9yKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJw
YXJhbXMiX3MsIFdURk1vdmUocGFyYW1zT2JqZWN0KSk7CisKKyAgICBtX2Zyb250ZW5kUm91dGVy
LnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworfQorCit2b2lkIERhdGFi
YXNlRnJvbnRlbmREaXNwYXRjaGVyOjpkaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMoUmVm
UHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgbm90
ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJlZlB0cjxKU09OOjpPYmplY3Q+IHZhbHVlcywgUmVmUHRy
PEpTT046OlZhbHVlPiBwYXlsb2FkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6OkVycm9yPiBzcWxFcnJvciwgY29uc3QgU3RyaW5nJiBzY3JlZW5Db2xvciwgUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IGFsdGVybmF0ZUNvbG9ycywg
Y29uc3QgU3RyaW5nJiBwcmludENvbG9yKQoreworICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25N
ZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0U3Ry
aW5nKCJtZXRob2QiX3MsICJEYXRhYmFzZS5kaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMi
X3MpOworICAgIFJlZjxKU09OOjpPYmplY3Q+IHBhcmFtc09iamVjdCA9IEpTT046Ok9iamVjdDo6
Y3JlYXRlKCk7CisgICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIGNv
bHVtbk5hbWVzKTsKKyAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygibm90ZXMiX3MsIG5vdGVz
KTsKKyAgICBwYXJhbXNPYmplY3QtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCB0aW1lc3RhbXAp
OworICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIHZhbHVlcyk7CisgICAg
cGFyYW1zT2JqZWN0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgcGF5bG9hZCk7CisgICAgcGFyYW1z
T2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBzcWxFcnJvcik7CisgICAgcGFyYW1zT2Jq
ZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCBzY3JlZW5Db2xvcik7CisgICAgcGFyYW1z
T2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCBhbHRlcm5hdGVDb2xvcnMpOwor
ICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCBwcmludENvbG9yKTsK
KyAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiX3MsIFdURk1vdmUocGFyYW1zT2Jq
ZWN0KSk7CisKKyAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9K
U09OU3RyaW5nKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBG
aWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbE9iamVjdHMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50
cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisK
K25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworCisK
Ky8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgorbmFtZXNwYWNlIERhdGFiYXNlIHsKK2NsYXNzIEVy
cm9yOworfSAvLyBEYXRhYmFzZQorLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgorCisK
Ky8vIFR5cGVkZWZzLgorbmFtZXNwYWNlIERhdGFiYXNlIHsKKy8qIFVuaXF1ZSBpZGVudGlmaWVy
IG9mIERhdGFiYXNlIG9iamVjdC4gKi8KK3R5cGVkZWYgU3RyaW5nIERhdGFiYXNlSWQ7Cit0eXBl
ZGVmIFN0cmluZyBQcmltYXJ5Q29sb3JzOwordHlwZWRlZiBKU09OOjpBcnJheU9mPFN0cmluZz4g
Q29sb3JMaXN0OworfSAvLyBEYXRhYmFzZQorLy8gRW5kIG9mIHR5cGVkZWZzLgorCituYW1lc3Bh
Y2UgRGF0YWJhc2UgeworCisvKiBEYXRhYmFzZSBlcnJvci4gKi8KK2NsYXNzIEVycm9yIDogcHVi
bGljIEpTT046Ok9iamVjdEJhc2UgeworcHVibGljOgorICAgIGVudW0geworICAgICAgICBOb0Zp
ZWxkc1NldCA9IDAsCisgICAgICAgIE1lc3NhZ2VTZXQgPSAxIDw8IDAsCisgICAgICAgIENvZGVT
ZXQgPSAxIDw8IDEsCisgICAgICAgIEFsbEZpZWxkc1NldCA9IChNZXNzYWdlU2V0IHwgQ29kZVNl
dCkKKyAgICB9OworCisgICAgdGVtcGxhdGU8aW50IFNUQVRFPgorICAgIGNsYXNzIEJ1aWxkZXIg
eworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVzdWx0Owor
CisgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RT
dGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxC
dWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxk
ZXIoUmVmPC8qRXJyb3IqL0pTT046Ok9iamVjdD4mJiBvYmplY3QpCisgICAgICAgICAgICA6IG1f
cmVzdWx0KFdURk1vdmUob2JqZWN0KSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9z
dGF0ZSk7CisgICAgICAgIH0KKyAgICAgICAgZnJpZW5kIGNsYXNzIEVycm9yOworICAgIHB1Ymxp
YzoKKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTWVzc2FnZVNldD4mIHNldE1lc3NhZ2UoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
IShTVEFURSAmIE1lc3NhZ2VTZXQpLCBwcm9wZXJ0eV9tZXNzYWdlX2FscmVhZHlfc2V0KTsKKyAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1lc3NhZ2UiX3MsIHZhbHVlKTsKKyAgICAg
ICAgICAgIHJldHVybiBjYXN0U3RhdGU8TWVzc2FnZVNldD4oKTsKKyAgICAgICAgfQorCisgICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2RlU2V0PiYgc2V0Q29kZShpbnQgdmFsdWUpCisgICAgICAg
IHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2RlU2V0KSwgcHJvcGVy
dHlfY29kZV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcigi
Y29kZSJfcywgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb2RlU2V0Pigp
OworICAgICAgICB9CisKKyAgICAgICAgUmVmPEVycm9yPiByZWxlYXNlKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRf
aXNfbm90X3JlYWR5KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihFcnJvcikg
PT0gc2l6ZW9mKEpTT046Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsKKworICAgICAgICAgICAgUmVm
PEpTT046Ok9iamVjdD4ganNvblJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7Cisg
ICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPEVy
cm9yPio+KCZqc29uUmVzdWx0KSk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAg
ICB9CisgICAgfTsKKworICAgIC8qCisgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgorICAg
ICAqIFJlZjxFcnJvcj4gcmVzdWx0ID0gRXJyb3I6OmNyZWF0ZSgpCisgICAgICogICAgIC5zZXRN
ZXNzYWdlKC4uLikKKyAgICAgKiAgICAgLnNldENvZGUoLi4uKQorICAgICAqICAgICAucmVsZWFz
ZSgpOworICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6
Y3JlYXRlKCkpOworICAgIH0KK307CisKK30gLy8gRGF0YWJhc2UKKworCisKK30gLy8gbmFtZXNw
YWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xPYmplY3RzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVj
dHMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0
aW9uYWwtcGFyYW1ldGVycy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMu
aCIKKworI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisK
KworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
KworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorCisjIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8d3Rm
L1JldGFpblB0ci5oPgorCisKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3Bh
dGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVy
cy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlv
bmFsLXBhcmFtZXRlcnMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3Bh
dGNoZXJzLmgiCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2luY2x1ZGUg
IlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVz
Lmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
KworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbiBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPFdlYkluc3Bl
Y3Rvci9UZXN0UHJvdG9jb2wuaD4KKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1
bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAor
QHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFp
bkV2ZW50RGlzcGF0Y2hlciAqZGF0YWJhc2VFdmVudERpc3BhdGNoZXI7CitAZW5kCisKKworIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKworIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1
cmF0aW9uLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW1wb3J0ICJU
ZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9B
dWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2ltcG9ydCA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+CisKK3VzaW5nIG5hbWVzcGFj
ZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9u
Cit7CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKKyAg
ICBUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkV2ZW50RGlzcGF0Y2hlciAqX2RhdGFiYXNlRXZl
bnREaXNwYXRjaGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihB
dWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0g
W3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBB
U1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJl
dHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbX2RhdGFiYXNlRXZlbnRE
aXNwYXRjaGVyIHJlbGVhc2VdOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAoVGVzdFBy
b3RvY29sRGF0YWJhc2VEb21haW5FdmVudERpc3BhdGNoZXIgKilkYXRhYmFzZUV2ZW50RGlzcGF0
Y2hlcgoreworICAgIGlmICghX2RhdGFiYXNlRXZlbnREaXNwYXRjaGVyKQorICAgICAgICBfZGF0
YWJhc2VFdmVudERpc3BhdGNoZXIgPSBbW1Rlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluRXZlbnRE
aXNwYXRjaGVyIGFsbG9jXSBpbml0V2l0aENvbnRyb2xsZXI6X2NvbnRyb2xsZXJdOworICAgIHJl
dHVybiBfZGF0YWJhc2VFdmVudERpc3BhdGNoZXI7Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5o
IgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPHd0
Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1l
bnRhdGlvbiBUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkV2ZW50RGlzcGF0Y2hlcgoreworICAg
IEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Cit9CisKKy0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJv
bGxlciopY29udHJvbGxlcgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFz
ZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBf
Y29udHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQp
ZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVyc1dpdGhDb2x1bW5OYW1lczooTlNBcnJheS8qPE5T
U3RyaW5nPiovICoqKWNvbHVtbk5hbWVzIG5vdGVzOihOU1N0cmluZyAqKilub3RlcyB0aW1lc3Rh
bXA6KGRvdWJsZSAqKXRpbWVzdGFtcCB2YWx1ZXM6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKil2
YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqKXBheWxvYWQgc3FsRXJyb3I6
KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKiopc3FsRXJyb3Igc2NyZWVuQ29sb3I6KE5TU3Ry
aW5nICoqKXNjcmVlbkNvbG9yIGFsdGVybmF0ZUNvbG9yczooTlNBcnJheS8qPE5TU3RyaW5nPiov
ICoqKWFsdGVybmF0ZUNvbG9ycyBwcmludENvbG9yOihOU1N0cmluZyAqKilwcmludENvbG9yCit7
CisgICAgY29uc3QgRnJvbnRlbmRSb3V0ZXImIHJvdXRlciA9IF9jb250cm9sbGVyLT5mcm9udGVu
ZFJvdXRlcigpOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1F
VEVSKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKG5vdGVzLCBAIm5vdGVzIik7CisgICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHZhbHVlcywgQCJ2YWx1ZXMiKTsKKyAg
ICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIocGF5bG9hZCwgQCJw
YXlsb2FkIik7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVS
KHNxbEVycm9yLCBAInNxbEVycm9yIik7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BU
SU9OQUxfUEFSQU1FVEVSKHNjcmVlbkNvbG9yLCBAInNjcmVlbkNvbG9yIik7CisgICAgVEhST1df
RVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKGFsdGVybmF0ZUNvbG9ycywgQCJh
bHRlcm5hdGVDb2xvcnMiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9Q
QVJBTUVURVIocHJpbnRDb2xvciwgQCJwcmludENvbG9yIik7CisKKyAgICBSZWY8SlNPTjo6T2Jq
ZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAganNvbk1lc3Nh
Z2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRGF0YWJhc2UuZGlkRXhlY3V0ZU9wdGlvbmFsUGFy
YW1ldGVycyJfcyk7CisgICAgUmVmPEpTT046Ok9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBpZiAoY29sdW1uTmFtZXMpCisgICAgICAgIHBhcmFtc09i
amVjdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB0b0pTT05TdHJpbmdBcnJheSgoKmNvbHVt
bk5hbWVzKSkpOworICAgIGlmIChub3RlcykKKyAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJp
bmcoIm5vdGVzIl9zLCAoKm5vdGVzKSk7CisgICAgaWYgKHRpbWVzdGFtcCkKKyAgICAgICAgcGFy
YW1zT2JqZWN0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgKCp0aW1lc3RhbXApKTsKKyAgICBp
ZiAodmFsdWVzKQorICAgICAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgidmFsdWVzIl9zLCBb
KCp2YWx1ZXMpIHRvSlNPTk9iamVjdF0pOworICAgIGlmIChwYXlsb2FkKQorICAgICAgICBwYXJh
bXNPYmplY3QtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBbKCpwYXlsb2FkKSB0b0pTT05PYmplY3Rd
KTsKKyAgICBpZiAoc3FsRXJyb3IpCisgICAgICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJz
cWxFcnJvciJfcywgWygqc3FsRXJyb3IpIHRvSlNPTk9iamVjdF0pOworICAgIGlmIChzY3JlZW5D
b2xvcikKKyAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCAo
KnNjcmVlbkNvbG9yKSk7CisgICAgaWYgKGFsdGVybmF0ZUNvbG9ycykKKyAgICAgICAgcGFyYW1z
T2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCB0b0pTT05TdHJpbmdBcnJheSgo
KmFsdGVybmF0ZUNvbG9ycykpKTsKKyAgICBpZiAocHJpbnRDb2xvcikKKyAgICAgICAgcGFyYW1z
T2JqZWN0LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsICgqcHJpbnRDb2xvcikpOworICAgIGpz
b25NZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyJfcywgV1RGTW92ZShwYXJhbXNPYmplY3QpKTsK
KyAgICByb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cit9CisK
Ky0gKHZvaWQpZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzV2l0aENvbHVtbk5hbWVzOihO
U0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcyBub3RlczooTlNTdHJpbmcgKilub3Rl
cyB0aW1lc3RhbXA6KGRvdWJsZSl0aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmpl
Y3QgKil2YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZCBzcWxF
cnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKXNxbEVycm9yIHNjcmVlbkNvbG9yOihO
U1N0cmluZyAqKXNjcmVlbkNvbG9yIGFsdGVybmF0ZUNvbG9yczooTlNBcnJheS8qPE5TU3RyaW5n
PiovICopYWx0ZXJuYXRlQ29sb3JzIHByaW50Q29sb3I6KE5TU3RyaW5nICopcHJpbnRDb2xvcgor
eworICAgIGNvbnN0IEZyb250ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29udHJvbGxlci0+ZnJvbnRl
bmRSb3V0ZXIoKTsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVS
KGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9S
RVFVSVJFRF9QQVJBTUVURVIobm90ZXMsIEAibm90ZXMiKTsKKyAgICBUSFJPV19FWENFUFRJT05f
Rk9SX1JFUVVJUkVEX1BBUkFNRVRFUih2YWx1ZXMsIEAidmFsdWVzIik7CisgICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIocGF5bG9hZCwgQCJwYXlsb2FkIik7CisgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoc3FsRXJyb3IsIEAic3FsRXJy
b3IiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihzY3JlZW5D
b2xvciwgQCJzY3JlZW5Db2xvciIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURf
UEFSQU1FVEVSKGFsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsKKyAgICBUSFJP
V19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihwcmludENvbG9yLCBAInByaW50Q29s
b3IiKTsKKworICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEYXRh
YmFzZS5kaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMiX3MpOworICAgIFJlZjxKU09OOjpP
YmplY3Q+IHBhcmFtc09iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgcGFyYW1z
T2JqZWN0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KGNvbHVt
bk5hbWVzKSk7CisgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBub3Rlcyk7
CisgICAgcGFyYW1zT2JqZWN0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgdGltZXN0YW1wKTsK
KyAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgidmFsdWVzIl9zLCBbdmFsdWVzIHRvSlNPTk9i
amVjdF0pOworICAgIHBhcmFtc09iamVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFtwYXlsb2Fk
IHRvSlNPTk9iamVjdF0pOworICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJf
cywgW3NxbEVycm9yIHRvSlNPTk9iamVjdF0pOworICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5n
KCJzY3JlZW5Db2xvciJfcywgc2NyZWVuQ29sb3IpOworICAgIHBhcmFtc09iamVjdC0+c2V0QXJy
YXkoImFsdGVybmF0ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5nQXJyYXkoYWx0ZXJuYXRlQ29sb3Jz
KSk7CisgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsIHByaW50Q29s
b3IpOworICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyJfcywgV1RGTW92ZShwYXJh
bXNPYmplY3QpKTsKKyAgICByb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJp
bmcoKSk7Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlz
cGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5q
c29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8Rm91
bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2Nv
bEpTT05PYmplY3QuaD4KKworCitAY2xhc3MgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcjsKKwor
CisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBU
ZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIDogUldJUHJvdG9jb2xKU09OT2JqZWN0CistIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICop
cGF5bG9hZDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90
b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTWVz
c2FnZTooTlNTdHJpbmcgKiltZXNzYWdlIGNvZGU6KGludCljb2RlOworLyogcmVxdWlyZWQgKi8g
QHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICptZXNzYWdlOworLyogcmVxdWly
ZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgaW50IGNvZGU7CitAZW5kCisKKwor
CitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVz
dFByb3RvY29sRGF0YWJhc2VEb21haW5FdmVudERpc3BhdGNoZXIgOiBOU09iamVjdAorLSAodm9p
ZClkaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzV2l0aENvbHVtbk5hbWVzOihOU0FycmF5Lyo8
TlNTdHJpbmc+Ki8gKiopY29sdW1uTmFtZXMgbm90ZXM6KE5TU3RyaW5nICoqKW5vdGVzIHRpbWVz
dGFtcDooZG91YmxlICopdGltZXN0YW1wIHZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0ICoq
KXZhbHVlcyBwYXlsb2FkOihSV0lQcm90b2NvbEpTT05PYmplY3QgKiopcGF5bG9hZCBzcWxFcnJv
cjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKilzcWxFcnJvciBzY3JlZW5Db2xvcjooTlNT
dHJpbmcgKiopc2NyZWVuQ29sb3IgYWx0ZXJuYXRlQ29sb3JzOihOU0FycmF5Lyo8TlNTdHJpbmc+
Ki8gKiopYWx0ZXJuYXRlQ29sb3JzIHByaW50Q29sb3I6KE5TU3RyaW5nICoqKXByaW50Q29sb3I7
CistICh2b2lkKWRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1dpdGhDb2x1bW5OYW1lczoo
TlNBcnJheS8qPE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMgbm90ZXM6KE5TU3RyaW5nICopbm90
ZXMgdGltZXN0YW1wOihkb3VibGUpdGltZXN0YW1wIHZhbHVlczooUldJUHJvdG9jb2xKU09OT2Jq
ZWN0ICopdmFsdWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQgc3Fs
RXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKilzcWxFcnJvciBzY3JlZW5Db2xvcjoo
TlNTdHJpbmcgKilzY3JlZW5Db2xvciBhbHRlcm5hdGVDb2xvcnM6KE5TQXJyYXkvKjxOU1N0cmlu
Zz4qLyAqKWFsdGVybmF0ZUNvbG9ycyBwcmludENvbG9yOihOU1N0cmluZyAqKXByaW50Q29sb3I7
CitAZW5kCisKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRp
YmlsaXR5T2JqZWN0cy5oPgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgi
CisjaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgorI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDx3
dGYvSlNPTlZhbHVlcy5oPgorCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWlu
RXZlbnREaXNwYXRjaGVyIChQcml2YXRlKQorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJv
bGxlcjooSW5zcGVjdG9yOjpBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xs
ZXI7CitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisKKyMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNv
biBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQ
cm90b2NvbC5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJz
aW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgT2Jq
Q0VudW1UeXBlPgorT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29u
c3QgU3RyaW5nJiB2YWx1ZSk7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorCisjIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVz
dFByb3RvY29sVHlwZVBhcnNlci5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29s
SlNPTk9iamVjdFByaXZhdGUuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGlu
dGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKERhdGFiYXNlRG9tYWluKQorCisr
ICh2b2lkKV9wYXJzZURhdGFiYXNlSWQ6KE5TU3RyaW5nICoqKW91dFZhbHVlIGZyb21QYXlsb2Fk
OihpZClwYXlsb2FkOworKyAodm9pZClfcGFyc2VQcmltYXJ5Q29sb3JzOihOU1N0cmluZyAqKilv
dXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNlQ29sb3JMaXN0
OihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxv
YWQ7CisrICh2b2lkKV9wYXJzZUVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqKW91
dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlv
biBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKERhdGFiYXNlRG9tYWluKQorCisrICh2b2lk
KV9wYXJzZURhdGFiYXNlSWQ6KE5TU3RyaW5nICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClw
YXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNT
dHJpbmcgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSAoTlNTdHJpbmcgKilwYXlsb2FkOworfQor
CisrICh2b2lkKV9wYXJzZVByaW1hcnlDb2xvcnM6KE5TU3RyaW5nICoqKW91dFZhbHVlIGZyb21Q
YXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShw
YXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSAoTlNTdHJpbmcgKilw
YXlsb2FkOworfQorCisrICh2b2lkKV9wYXJzZUNvbG9yTGlzdDooTlNBcnJheS8qPE5TU3RyaW5n
PiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNBcnJheS8qPE5TU3RyaW5nPiovIGNsYXNz
XSk7CisgICAgKm91dFZhbHVlID0gKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKXBheWxvYWQ7Cit9
CisKKysgKHZvaWQpX3BhcnNlRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKiopb3V0
VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9S
X0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUg
PSBbW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXls
b2FkXTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRl
cnMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFBy
aXZhdGUuaD4KKyNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW1wb3J0IDx3dGYvSlNPTlZh
bHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24g
VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcgorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXls
b2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCit7Cisg
ICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAg
ICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJtZXNzYWdl
Il0sIEAibWVzc2FnZSIpOworICAgIHNlbGYubWVzc2FnZSA9IHBheWxvYWRbQCJtZXNzYWdlIl07
CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJj
b2RlIl0sIEAiY29kZSIpOworICAgIHNlbGYuY29kZSA9IFtwYXlsb2FkW0AiY29kZSJdIGludGVn
ZXJWYWx1ZV07CisKKyAgICByZXR1cm4gc2VsZjsKK30KKy0gKGluc3RhbmNldHlwZSlpbml0V2l0
aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilvYmplY3QKK3sKKyAgICBp
ZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoSlNPTk9iamVjdDpbb2JqZWN0IHRvSlNPTk9iamVj
dF0uZ2V0KCldKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHJldHVybiBzZWxmOworfQor
CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29k
ZTooaW50KWNvZGUKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAg
cmV0dXJuIG5pbDsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFko
bWVzc2FnZSwgQCJtZXNzYWdlIik7CisKKyAgICBzZWxmLm1lc3NhZ2UgPSBtZXNzYWdlOworICAg
IHNlbGYuY29kZSA9IGNvZGU7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClzZXRN
ZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UKK3sKKyAgICBbc3VwZXIgc2V0U3RyaW5nOm1lc3Nh
Z2UgZm9yS2V5OkAibWVzc2FnZSJdOworfQorCistIChOU1N0cmluZyAqKW1lc3NhZ2UKK3sKKyAg
ICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAIm1lc3NhZ2UiXTsKK30KKworLSAodm9pZClz
ZXRDb2RlOihpbnQpY29kZQoreworICAgIFtzdXBlciBzZXRJbnRlZ2VyOmNvZGUgZm9yS2V5OkAi
Y29kZSJdOworfQorCistIChpbnQpY29kZQoreworICAgIHJldHVybiBbc3VwZXIgaW50ZWdlckZv
cktleTpAImNvZGUiXTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
VHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1k
b21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlw
ZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1lcnJvcgpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5h
MTMwYWQ3MGM0MDgyNDRlMjcyNmQ0YjRhMTI0ZDkwYjMyYTJjNjIzCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVk
L2ZhaWwtb24tY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlw
ZS5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBNYWxmb3JtZWQgZG9tYWluIHNwZWNp
ZmljYXRpb246IGRvbWFpbiBEb21haW4gaGFzIGFuIGl0ZW0gaW4gdGFyZ2V0VHlwZXMgIlt1J3dv
cmtlciddIiB0aGF0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgYW55IHZhbHVlIGluIGRlYnVnZ2FibGVU
eXBlcyAiW3UnamF2YXNjcmlwdCddIi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0
VHlwZXMtdHlwZS5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tY29tbWFuZC10YXJnZXRUeXBlcy10eXBlLmpz
b24tZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uOTlmNWUxYTRhOGU0NzQzM2VmNzVlZThiNTRjNDkzYzViYzBh
NmQwMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlwZXMtdHlwZS5q
c29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBNYWxmb3JtZWQgZG9tYWluIHNwZWNpZmlj
YXRpb246IHRhcmdldFR5cGVzIGxpc3QgZm9yIGNvbW1hbmQgUGFnZU9ubHkgaXMgbm90IGFuIGFy
cmF5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1jb21tYW5kLXRhcmdldFR5cGVzLXZhbHVlLmpzb24tZXJy
b3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvZmFpbC1vbi1jb21tYW5kLXRhcmdldFR5cGVzLXZhbHVlLmpzb24tZXJyb3IKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMjFhMzY1Njk5MjZiMmU0MGE5ODdlMjkxYjUyYjUzOTNkOGMyMmY5YQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlwZXMtdmFsdWUuanNvbi1lcnJvcgpAQCAtMCww
ICsxIEBACitFUlJPUjogTWFsZm9ybWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9uOiB0YXJnZXRUeXBl
cyBsaXN0IGZvciBjb21tYW5kIFBhZ2VPbmx5IGlzIGFuIHVuc3VwcG9ydGVkIHN0cmluZy4gV2Fz
OiAiW3UncGFnZWUnXSIsIEFsbG93ZWQgdmFsdWVzOiBzZXJ2aWNlLXdvcmtlciwgamF2YXNjcmlw
dCwgd29ya2VyLCBwYWdlLCB3ZWItcGFnZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZG9tYWluLWRlYnVn
Z2FibGVUeXBlcy10eXBlLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4tZGVidWdnYWJsZVR5cGVz
LXR5cGUuanNvbi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yYjg5OGJhN2JlN2RmYTcyYmM2M2ZkOGJkZTlj
ZWQ1Zjg0YTgxOTc3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZG9tYWluLWRlYnVnZ2FibGVU
eXBlcy10eXBlLmpzb24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6IE1hbGZvcm1lZCBkb21h
aW4gc3BlY2lmaWNhdGlvbjogZGVidWdnYWJsZVR5cGVzIGZvciBkb21haW4gV2ViT25seSBpcyBu
b3QgYW4gYXJyYXkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMtdmFs
dWUuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMtdmFsdWUuanNvbi1l
cnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5iZjcxZDQ3MGNiZDM5ODU1OTczNjU4YjMxMzdiN2EyYTljNzE4NGZm
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZG9tYWluLWRlYnVnZ2FibGVUeXBlcy12YWx1ZS5q
c29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBNYWxmb3JtZWQgZG9tYWluIHNwZWNpZmlj
YXRpb246IGRlYnVnZ2FibGVUeXBlcyBmb3IgZG9tYWluIFdlYk9ubHkgaXMgYW4gdW5zdXBwb3J0
ZWQgc3RyaW5nLiBXYXM6ICJbdSd3ZWJiJ10iLCBBbGxvd2VkIHZhbHVlczogc2VydmljZS13b3Jr
ZXIsIGphdmFzY3JpcHQsIHBhZ2UsIHdlYi1wYWdlCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4t
dGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1lcnJvciBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWls
LW9uLWRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29u
LWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjg2N2UzNTAwODk4NjQ4ODlmZDBkY2QxOGFiYzliZDUwZjljMWRl
YzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1k
b21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjogTWFs
Zm9ybWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9uOiBjb21tYW5kIENvbW1hbmQgaGFzIGFuIGl0ZW0g
aW4gdGFyZ2V0VHlwZXMgIlt1J3dvcmtlciddIiB0aGF0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgYW55
IHZhbHVlIGluIGRlYnVnZ2FibGVUeXBlcyAiW3UnamF2YXNjcmlwdCddIi4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9m
YWlsLW9uLWRvbWFpbi10YXJnZXRUeXBlcy10eXBlLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4t
dGFyZ2V0VHlwZXMtdHlwZS5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU5YTM1OTMzYTM1NDBhZTEw
YjFlYWUyZDdhMDNkYzNmMjMzMDkyNWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4t
dGFyZ2V0VHlwZXMtdHlwZS5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBNYWxmb3Jt
ZWQgZG9tYWluIHNwZWNpZmljYXRpb246IHRhcmdldFR5cGVzIGZvciBkb21haW4gUGFnZU9ubHkg
aXMgbm90IGFuIGFycmF5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZXMtdmFs
dWUuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWRvbWFpbi10YXJnZXRUeXBlcy12YWx1ZS5qc29uLWVycm9y
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjQ2ODA3ZjcyZmM0NjhhMjlkYmY3NGZjMjJhMjk3N2FiYmJhY2U1YjkKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZXMtdmFsdWUuanNvbi1lcnJv
cgpAQCAtMCwwICsxIEBACitFUlJPUjogTWFsZm9ybWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9uOiB0
YXJnZXRUeXBlcyBmb3IgZG9tYWluIFBhZ2VPbmx5IGlzIGFuIHVuc3VwcG9ydGVkIHN0cmluZy4g
V2FzOiAiW3UncGFnZWUnXSIsIEFsbG93ZWQgdmFsdWVzOiBzZXJ2aWNlLXdvcmtlciwgamF2YXNj
cmlwdCwgd29ya2VyLCBwYWdlLCB3ZWItcGFnZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRl
LWNvbW1hbmQtY2FsbC1wYXJhbWV0ZXItbmFtZXMuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0
ZS1jb21tYW5kLWNhbGwtcGFyYW1ldGVyLW5hbWVzLmpzb24tZXJyb3IKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2Y3
NTZkZTMyNTA1MGMzM2E0OTJjZDUwZDllYWRmNDIzMDM1YjYxMAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9m
YWlsLW9uLWR1cGxpY2F0ZS1jb21tYW5kLWNhbGwtcGFyYW1ldGVyLW5hbWVzLmpzb24tZXJyb3IK
QEAgLTAsMCArMSBAQAorRVJST1I6IE1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjogY2Fs
bCBwYXJhbWV0ZXIgbGlzdCBmb3IgY29tbWFuZCBwcm9jZXNzUG9pbnRzIGhhcyBkdXBsaWNhdGUg
cGFyYW1ldGVyIG5hbWVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1yZXR1
cm4tcGFyYW1ldGVyLW5hbWVzLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1y
ZXR1cm4tcGFyYW1ldGVyLW5hbWVzLmpzb24tZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWExNDhmZjY3Yzk2
MDk0ODhhODBlNmZhMjVkM2JmYTc3OGY1ZGEwYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWR1
cGxpY2F0ZS1jb21tYW5kLXJldHVybi1wYXJhbWV0ZXItbmFtZXMuanNvbi1lcnJvcgpAQCAtMCww
ICsxIEBACitFUlJPUjogTWFsZm9ybWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9uOiByZXR1cm4gcGFy
YW1ldGVyIGxpc3QgZm9yIGNvbW1hbmQgcHJvY2Vzc1BvaW50cyBoYXMgZHVwbGljYXRlIHBhcmFt
ZXRlciBuYW1lcwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLWV2ZW50LXBhcmFtZXRlci1u
YW1lcy5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLWV2ZW50LXBhcmFtZXRlci1uYW1lcy5q
c29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM3MWJiZDIxYzJjZjBjM2IwMzgwMWQ5NjM3YTRlNmQwZmMy
NWFjNDQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtZXZlbnQtcGFyYW1ldGVy
LW5hbWVzLmpzb24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6IE1hbGZvcm1lZCBkb21haW4g
c3BlY2lmaWNhdGlvbjogcGFyYW1ldGVyIGxpc3QgZm9yIGV2ZW50IHByb2Nlc3NlZFBvaW50cyBo
YXMgZHVwbGljYXRlIHBhcmFtZXRlciBuYW1lcwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRl
LXR5cGUtZGVjbGFyYXRpb25zLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1kZWNs
YXJhdGlvbnMuanNvbi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NDdjZGY4ZTI4ZTg1NjYxMGEyNmY4MTU0
OTQzZjM2Y2Y4YjdkMWY0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLXR5cGUt
ZGVjbGFyYXRpb25zLmpzb24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6IER1cGxpY2F0ZSB0
eXBlIGRlY2xhcmF0aW9uOiBSdW50aW1lLlJlbW90ZU9iamVjdElkCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1v
bi1kdXBsaWNhdGUtdHlwZS1tZW1iZXItbmFtZXMuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0
ZS10eXBlLW1lbWJlci1uYW1lcy5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ1Mzc2YTc3YTQ1NWZk
MTVmNjdkOGJjYjkzNWE2YmE0MzhjMGE1NGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBs
aWNhdGUtdHlwZS1tZW1iZXItbmFtZXMuanNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjog
TWFsZm9ybWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9uOiB0eXBlIGRlY2xhcmF0aW9uIGZvciBQb2lu
dCBoYXMgZHVwbGljYXRlIG1lbWJlciBuYW1lcwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZW51bS13aXRo
LW5vLXZhbHVlcy5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZW51bS13aXRoLW5vLXZhbHVlcy5qc29uLWVy
cm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjI2NTVjMmI5MDdlMDJlM2U4NGNiM2Y2NmZhMWY1OGUxM2Q5YjdiNTMK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1lbnVtLXdpdGgtbm8tdmFsdWVzLmpzb24tZXJyb3IK
QEAgLTAsMCArMSBAQAorRVJST1I6IFR5cGUgcmVmZXJlbmNlIHdpdGggZW51bSB2YWx1ZXMgbXVz
dCBoYXZlIGF0IGxlYXN0IG9uZSBlbnVtIHZhbHVlLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZXZlbnQt
dGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1lcnJvciBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWls
LW9uLWV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24t
ZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYjY1ZDdhMGQxOTZkNDBhODliNmVlNTg0YThjNmMwNWI5NzI1Y2Fk
YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9t
YWluLWRlYnVnZ2FibGVUeXBlLmpzb24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6IE1hbGZv
cm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjogZXZlbnQgRXZlbnQgaGFzIGFuIGl0ZW0gaW4gdGFy
Z2V0VHlwZXMgIlt1J3dvcmtlciddIiB0aGF0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgYW55IHZhbHVl
IGluIGRlYnVnZ2FibGVUeXBlcyAiW3UnamF2YXNjcmlwdCddIi4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9u
LWV2ZW50LXRhcmdldFR5cGVzLXR5cGUuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWV2ZW50LXRhcmdldFR5
cGVzLXR5cGUuanNvbi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NDAzZTEzYTgwOTg5NGExODY5OTU2NmU3
NzZjZjY1MzY0MmY4MDk2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlw
ZXMtdHlwZS5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBNYWxmb3JtZWQgZG9tYWlu
IHNwZWNpZmljYXRpb246IHRhcmdldFR5cGVzIGZvciBldmVudCBQYWdlT25seSBpcyBub3QgYW4g
YXJyYXkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGVzLXZhbHVlLmpzb24tZXJy
b3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvZmFpbC1vbi1ldmVudC10YXJnZXRUeXBlcy12YWx1ZS5qc29uLWVycm9yCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjgzMDEyYTlmZTRlODkzMDIxYWI4YWYzNDUyNDZiMTAwYjNlNDE1ZmEKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvZmFpbC1vbi1ldmVudC10YXJnZXRUeXBlcy12YWx1ZS5qc29uLWVycm9yCkBAIC0wLDAgKzEg
QEAKK0VSUk9SOiBNYWxmb3JtZWQgZG9tYWluIHNwZWNpZmljYXRpb246IHRhcmdldFR5cGVzIGZv
ciBldmVudCBQYWdlT25seSBpcyBhbiB1bnN1cHBvcnRlZCBzdHJpbmcuIFdhczogIlt1J3BhZ2Vl
J10iLCBBbGxvd2VkIHZhbHVlczogc2VydmljZS13b3JrZXIsIGphdmFzY3JpcHQsIHdvcmtlciwg
cGFnZSwgd2ViLXBhZ2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRpb25hbC1w
YXJhbWV0ZXItZmxhZy5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tbnVtYmVyLXR5cGVkLW9wdGlvbmFsLXBh
cmFtZXRlci1mbGFnLmpzb24tZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTdiMmFmMGU0N2U5M2Y4MDQ5Nzk0
NDQ3MjU3ZGYzMjcyM2YwNjgyNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLW51bWJlci10eXBl
ZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9S
OiBUaGUgJ29wdGlvbmFsJyBmbGFnIGZvciBhIHBhcmFtZXRlciBtdXN0IGJlIGEgYm9vbGVhbiBs
aXRlcmFsLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tbnVtYmVyLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVt
YmVyLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIu
anNvbi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NmRmMzc1MGMxYTc3OTc4OTNjYmZiN2UyODc2ZDkyY2Nl
Y2MyZjkxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tbnVtYmVyLXR5cGVkLW9wdGlvbmFsLXR5
cGUtbWVtYmVyLmpzb24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6IFRoZSAnb3B0aW9uYWwn
IGZsYWcgZm9yIGEgdHlwZSBtZW1iZXIgbXVzdCBiZSBhIGJvb2xlYW4gbGl0ZXJhbC4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC9mYWlsLW9uLXN0cmluZy10eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29uLWVy
cm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVj
dGVkL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24tZXJy
b3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uOTdiMmFmMGU0N2U5M2Y4MDQ5Nzk0NDQ3MjU3ZGYzMjcyM2YwNjgyNAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXN0cmluZy10eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXIt
ZmxhZy5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBUaGUgJ29wdGlvbmFsJyBmbGFn
IGZvciBhIHBhcmFtZXRlciBtdXN0IGJlIGEgYm9vbGVhbiBsaXRlcmFsLgpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2Zh
aWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24tZXJyb3IgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1v
bi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNvbi1lcnJvcgpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li44NmRmMzc1MGMxYTc3OTc4OTNjYmZiN2UyODc2ZDkyY2NlY2MyZjkxCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVj
dGVkL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24tZXJyb3IK
QEAgLTAsMCArMSBAQAorRVJST1I6IFRoZSAnb3B0aW9uYWwnIGZsYWcgZm9yIGEgdHlwZSBtZW1i
ZXIgbXVzdCBiZSBhIGJvb2xlYW4gbGl0ZXJhbC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXR5cGUtZGVj
bGFyYXRpb24tdXNpbmctdHlwZS1yZWZlcmVuY2UuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXR5cGUtZGVj
bGFyYXRpb24tdXNpbmctdHlwZS1yZWZlcmVuY2UuanNvbi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MmY1
NzUzYTQzOTYxNDRlYjU2NmM1YzU5NjhkMDQ5YWVjNjE4MmRiCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2Zh
aWwtb24tdHlwZS1kZWNsYXJhdGlvbi11c2luZy10eXBlLXJlZmVyZW5jZS5qc29uLWVycm9yCkBA
IC0wLDAgKzEgQEAKK0VSUk9SOiBUeXBlIHJlZmVyZW5jZSBjYW5ub3QgaGF2ZSBib3RoICd0eXBl
JyBhbmQgJyRyZWYnIGtleXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi10eXBlLXJlZmVyZW5jZS1hcy1w
cmltaXRpdmUtdHlwZS5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS1yZWZlcmVuY2UtYXMtcHJpbWl0
aXZlLXR5cGUuanNvbi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNzZiYzFjNzc3M2FhMGRhOTg4NDljOTNj
MzRjMzkyZjE2Mjc2Mzk4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS1yZWZlcmVuY2Ut
YXMtcHJpbWl0aXZlLXR5cGUuanNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjogVHlwZSBy
ZWZlcmVuY2UgJ0RhdGFiYXNlSWQnIGlzIG5vdCBhIHByaW1pdGl2ZSB0eXBlLiBBbGxvd2VkIHZh
bHVlczogaW50ZWdlciwgbnVtYmVyLCBzdHJpbmcsIGJvb2xlYW4sIGVudW0sIG9iamVjdCwgYXJy
YXksIGFueQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS13aXRoLWxvd2VyY2FzZS1uYW1lLmpzb24t
ZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvZmFpbC1vbi10eXBlLXdpdGgtbG93ZXJjYXNlLW5hbWUuanNvbi1lcnJvcgpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi40ZTQ2MjI1MGMwYWY4MGExNzllMDZhYWY0NWQyMWViNTQ2ZGI4ODE0Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4
cGVjdGVkL2ZhaWwtb24tdHlwZS13aXRoLWxvd2VyY2FzZS1uYW1lLmpzb24tZXJyb3IKQEAgLTAs
MCArMSBAQAorRVJST1I6IFR5cGVzIG11c3QgYmVnaW4gd2l0aCBhbiB1cHBlcmNhc2UgY2hhcmFj
dGVyLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLWRl
Y2xhcmF0aW9uLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5
cGUtZGVjbGFyYXRpb24uanNvbi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yZDM4ZTY0Njc1ZGE1YWU1YzI2
M2Q1NDZlODUzNGI0OWYzYjVlOWM5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tdW5rbm93bi10
eXBlLXJlZmVyZW5jZS1pbi10eXBlLWRlY2xhcmF0aW9uLmpzb24tZXJyb3IKQEAgLTAsMCArMSBA
QAorRVJST1I6IFR5cGUgcmVmZXJlbmNlICdkcmFnb24nIGlzIG5vdCBhIHByaW1pdGl2ZSB0eXBl
LiBBbGxvd2VkIHZhbHVlczogaW50ZWdlciwgbnVtYmVyLCBzdHJpbmcsIGJvb2xlYW4sIGVudW0s
IG9iamVjdCwgYXJyYXksIGFueQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVy
ZW5jZS1pbi10eXBlLW1lbWJlci5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVy
ZW5jZS1pbi10eXBlLW1lbWJlci5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZhZjY2NzJjYmVmMDk2
MzBmZDliZThmZmFkYWNlMTJjNTYxMWNjYTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi11bmtu
b3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtbWVtYmVyLmpzb24tZXJyb3IKQEAgLTAsMCArMSBA
QAorRVJST1I6IExvb2t1cCBmYWlsZWQgZm9yIHR5cGUgcmVmZXJlbmNlOiBDb2xvciAocmVmZXJl
bmNlZCBmcm9tIGRvbWFpbjogRmFudGFzeSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9nZW5lcmF0ZS1kb21haW5zLXdp
dGgtZmVhdHVyZS1ndWFyZHMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1
cmUtZ3VhcmRzLmpzb24tcmVzdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM0ZjI1MTE5NTJiZWEyMzhmZjg2NDA2
ZjI4ZTVmYzIwODU4MDM1NmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZ2VuZXJhdGUtZG9tYWlucy13aXRo
LWZlYXR1cmUtZ3VhcmRzLmpzb24tcmVzdWx0CkBAIC0wLDAgKzEsMTE2OCBAQAorIyMjIEJlZ2lu
IEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcy5pbgorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29u
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworLy8gTmV0d29yazEKK0lu
c3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIk5ldHdvcmsxIiwgbnVsbCk7CitJbnNwZWN0
b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiTmV0d29yazEubG9hZFJlc291cmNlIiwgbnVsbCwg
W10sIFtdKTsKK0luc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIk5ldHdvcmsxIiwgbnVs
bCk7CisKKy8vIE5ldHdvcmszCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJOZXR3
b3JrMyIsIG51bGwpOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckV2ZW50KCJOZXR3b3JrMy5y
ZXNvdXJjZUxvYWRlZCIsIG51bGwsIFtdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJOZXR3
b3JrM0Rpc3BhdGNoZXIgPSBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRGlzcGF0Y2hlci5iaW5k
KEluc3BlY3RvckJhY2tlbmQsICJOZXR3b3JrMyIpOworSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0
ZURvbWFpbigiTmV0d29yazMiLCBudWxsKTsKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2Vu
ZENvbW1hbmRzLmpzLmluCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERp
c3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1k
b21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgorI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKworbmFtZXNw
YWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1
YmxpYzoKKyAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0
Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3Bh
dGNoZXIpOyB9CisgICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29u
c3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQorcHJpdmF0ZToKKyAgICBS
ZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Cit9OworCisKK2Ns
YXNzIEFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRl
QmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgfkFsdGVybmF0ZU5ldHdv
cmsxQmFja2VuZERpc3BhdGNoZXIoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNl
KGxvbmcgY2FsbElkKSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2Vu
ZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorIyMjIEVuZCBG
aWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6
IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwor
bmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCisj
aWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCitjbGFzcyBBbHRlcm5h
dGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQorCitjbGFzcyBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZShFcnJvclN0
cmluZyYpID0gMDsKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5OZXR3b3JrMUJhY2tlbmREaXNw
YXRjaGVySGFuZGxlcigpOworfTsKKworY2xhc3MgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciBm
aW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFJlZjxOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERp
c3BhdGNoZXImLCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIHZvaWQg
ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6
T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOworcHJpdmF0ZToKKyAgICB2b2lkIGxvYWRSZXNvdXJj
ZShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyNp
ZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK3B1YmxpYzoKKyAgICB2
b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0
Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRl
cm5hdGVEaXNwYXRjaGVyOyB9Citwcml2YXRlOgorICAgIEFsdGVybmF0ZU5ldHdvcmsxQmFja2Vu
ZERpc3BhdGNoZXIqIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciB7IG51bGxwdHIgfTsKKyNlbmRpZiAv
LyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK3ByaXZhdGU6CisgICAg
TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYsIE5ldHdvcmsxQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXIqIG1fYWdlbnQgeyBudWxscHRyIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1
ZXMuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKKyNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCisjZW5kaWYg
Ly8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKK25hbWVzcGFjZSBJ
bnNwZWN0b3IgeworCitOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6fk5ldHdvcmsx
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9CisKK1JlZjxOZXR3b3JrMUJhY2tlbmREaXNw
YXRjaGVyPiBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoQmFja2VuZERpc3BhdGNo
ZXImIGJhY2tlbmREaXNwYXRjaGVyLCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciog
YWdlbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTmV0d29yazFCYWNrZW5kRGlzcGF0
Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKK30KKworTmV0d29yazFCYWNrZW5kRGlz
cGF0Y2hlcjo6TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFj
a2VuZERpc3BhdGNoZXIsIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkK
KyAgICA6IFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQor
ICAgICwgbV9hZ2VudChhZ2VudCkKK3sKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3Rl
ckRpc3BhdGNoZXJGb3JEb21haW4oIk5ldHdvcmsxIl9zLCB0aGlzKTsKK30KKwordm9pZCBOZXR3
b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3Ry
aW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKK3sKKyAgICBSZWY8TmV0
d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CisKKyAgICBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiBwYXJhbWV0ZXJzOworICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9z
LCBwYXJhbWV0ZXJzKTsKKworICAgIGlmIChtZXRob2QgPT0gImxvYWRSZXNvdXJjZSIpIHsKKyAg
ICAgICAgbG9hZFJlc291cmNlKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90
b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMS4i
ICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOworfQorCit2b2lkIE5ldHdvcmsxQmFja2Vu
ZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9i
amVjdD4mJikKK3sKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
KyAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlz
cGF0Y2hlci0+bG9hZFJlc291cmNlKHJlcXVlc3RJZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyAg
ICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZShlcnJvcik7CisK
KyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5z
ZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKKyAgICBlbHNl
CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2Vu
ZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMu
Y3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUt
Z3VhcmRzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDx3
dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1l
c3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgRnJvbnRlbmRSb3V0ZXI7CisKK2NsYXNzIE5ldHdv
cmszRnJvbnRlbmREaXNwYXRjaGVyIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1
YmxpYzoKKyAgICBOZXR3b3JrM0Zyb250ZW5kRGlzcGF0Y2hlcihGcm9udGVuZFJvdXRlciYgZnJv
bnRlbmRSb3V0ZXIpIDogbV9mcm9udGVuZFJvdXRlcihmcm9udGVuZFJvdXRlcikgeyB9CisgICAg
dm9pZCByZXNvdXJjZUxvYWRlZCgpOworcHJpdmF0ZToKKyAgICBGcm9udGVuZFJvdXRlciYgbV9m
cm9udGVuZFJvdXRlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBG
aWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJv
bnRlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBn
ZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbiBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJU
ZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisK
K25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit2b2lkIE5ldHdvcmszRnJvbnRlbmREaXNwYXRjaGVy
OjpyZXNvdXJjZUxvYWRlZCgpCit7CisgICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2Ug
PSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1l
dGhvZCJfcywgIk5ldHdvcmszLnJlc291cmNlTG9hZGVkIl9zKTsKKworICAgIG1fZnJvbnRlbmRS
b3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNo
ZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUt
Z3VhcmRzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlw
ZXMuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9y
IHsKKworCisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKworCisvLyBGb3J3YXJkIGRlY2xhcmF0
aW9ucy4KK25hbWVzcGFjZSBOZXR3b3JrMiB7CitjbGFzcyBOZXR3b3JrRXJyb3I7Cit9IC8vIE5l
dHdvcmsyCisvLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCisKKworCisKK25hbWVzcGFj
ZSBOZXR3b3JrMiB7CisKK2NsYXNzIE5ldHdvcmtFcnJvciA6IHB1YmxpYyBKU09OOjpPYmplY3RC
YXNlIHsKK3B1YmxpYzoKKyAgICBlbnVtIHsKKyAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAorICAg
ICAgICBNZXNzYWdlU2V0ID0gMSA8PCAwLAorICAgICAgICBDb2RlU2V0ID0gMSA8PCAxLAorICAg
ICAgICBBbGxGaWVsZHNTZXQgPSAoTWVzc2FnZVNldCB8IENvZGVTZXQpCisgICAgfTsKKworICAg
IHRlbXBsYXRlPGludCBTVEFURT4KKyAgICBjbGFzcyBCdWlsZGVyIHsKKyAgICBwcml2YXRlOgor
ICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBtX3Jlc3VsdDsKKworICAgICAgICB0ZW1wbGF0
ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNU
RVA+Kj4odGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyKFJlZjwvKk5ldHdvcmtF
cnJvciovSlNPTjo6T2JqZWN0PiYmIG9iamVjdCkKKyAgICAgICAgICAgIDogbV9yZXN1bHQoV1RG
TW92ZShvYmplY3QpKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFU
RSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKKyAg
ICAgICAgfQorICAgICAgICBmcmllbmQgY2xhc3MgTmV0d29ya0Vycm9yOworICAgIHB1YmxpYzoK
KworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTWVzc2FnZVNldD4mIHNldE1lc3NhZ2UoY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIE1lc3NhZ2VTZXQpLCBwcm9wZXJ0eV9tZXNzYWdlX2FscmVhZHlfc2V0KTsKKyAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1lc3NhZ2UiX3MsIHZhbHVlKTsKKyAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8TWVzc2FnZVNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAg
IEJ1aWxkZXI8U1RBVEUgfCBDb2RlU2V0PiYgc2V0Q29kZShpbnQgdmFsdWUpCisgICAgICAgIHsK
KyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2RlU2V0KSwgcHJvcGVydHlf
Y29kZV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcigiY29k
ZSJfcywgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb2RlU2V0PigpOwor
ICAgICAgICB9CisKKyAgICAgICAgUmVmPE5ldHdvcmtFcnJvcj4gcmVsZWFzZSgpCisgICAgICAg
IHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVz
dWx0X2lzX25vdF9yZWFkeSk7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoTmV0
d29ya0Vycm9yKSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0KSwgY2Fubm90X2Nhc3QpOworCisgICAg
ICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uUmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5v
bk51bGwoKTsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gV1RGTW92ZSgqcmVpbnRlcnByZXRf
Y2FzdDxSZWY8TmV0d29ya0Vycm9yPio+KCZqc29uUmVzdWx0KSk7CisgICAgICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgICAgICB9CisgICAgfTsKKworICAgIC8qCisgICAgICogU3ludGhldGlj
IGNvbnN0cnVjdG9yOgorICAgICAqIFJlZjxOZXR3b3JrRXJyb3I+IHJlc3VsdCA9IE5ldHdvcmtF
cnJvcjo6Y3JlYXRlKCkKKyAgICAgKiAgICAgLnNldE1lc3NhZ2UoLi4uKQorICAgICAqICAgICAu
c2V0Q29kZSguLi4pCisgICAgICogICAgIC5yZWxlYXNlKCk7CisgICAgICovCisgICAgc3RhdGlj
IEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gQnVp
bGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7CisgICAgfQorfTsKKwor
fSAvLyBOZXR3b3JrMgorCisKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorCisj
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNv
biBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisKKyNpbmNsdWRlIDx3dGYv
T3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJ
bnNwZWN0b3IgeworCituYW1lc3BhY2UgUHJvdG9jb2wgeworCisKKworfSAvLyBuYW1lc3BhY2Ug
UHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sT2JqZWN0cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tl
bmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJh
dGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0
ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgor
CitAcHJvdG9jb2wgVGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyOworCituYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKKworCitjbGFzcyBPYmpDSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlz
cGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVy
IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBPYmpDSW5zcGVj
dG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFp
bkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KKyAgICB2b2lkIGxv
YWRSZXNvdXJjZShsb25nIHJlcXVlc3RJZCkgZmluYWw7Citwcml2YXRlOgorICAgIFJldGFpblB0
cjxpZDxUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOworfTsK
KworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tl
bmREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVy
YXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJv
dG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVy
bmFsLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW5jbHVk
ZSA8d3RmL0pTT05WYWx1ZXMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3ZvaWQgT2Jq
Q0luc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZShsb25nIHJl
cXVlc3RJZCkKK3sKKyAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2Vs
ZWN0b3IobG9hZFJlc291cmNlV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7
CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVz
dElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazEubG9hZFJl
c291cmNlJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlkIGVy
cm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgeworICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6
OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQ
ZW5kaW5nRXJyb3JzKCk7CisgICAgfTsKKworICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57Cisg
ICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpTT046
Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKKyAgICB9OworCisgICAgW21fZGVsZWdhdGUgbG9h
ZFJlc291cmNlV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6
c3VjY2Vzc0NhbGxiYWNrXTsKK30KKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbiBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rv
ci9UZXN0UHJvdG9jb2wuaD4KKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQi
KSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAorQHBy
b3BlcnR5IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNldE5ldHdvcmsxSGFuZGxlcjopIGlk
PFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4gbmV0d29yazFIYW5kbGVyOworQHBy
b3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkV2
ZW50RGlzcGF0Y2hlciAqbmV0d29yazNFdmVudERpc3BhdGNoZXI7CitAZW5kCisKKworIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKworIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbiBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZp
Z3VyYXRpb24uaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENv
cmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKwordXNpbmcgbmFtZXNw
YWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRp
b24KK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwor
ICAgIGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4gX25ldHdvcmsxSGFuZGxl
cjsKKyAgICBUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkV2ZW50RGlzcGF0Y2hlciAqX25ldHdv
cmszRXZlbnREaXNwYXRjaGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9s
bGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBz
ZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsK
KyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwor
ICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbX25ldHdvcmsx
SGFuZGxlciByZWxlYXNlXTsKKyAgICBbX25ldHdvcmszRXZlbnREaXNwYXRjaGVyIHJlbGVhc2Vd
OworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAodm9pZClzZXROZXR3b3JrMUhhbmRsZXI6
KGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4paGFuZGxlcgoreworICAgIGlm
IChoYW5kbGVyID09IF9uZXR3b3JrMUhhbmRsZXIpCisgICAgICAgIHJldHVybjsKKworICAgIFtf
bmV0d29yazFIYW5kbGVyIHJlbGVhc2VdOworICAgIF9uZXR3b3JrMUhhbmRsZXIgPSBbaGFuZGxl
ciByZXRhaW5dOworCisgICAgYXV0byBhbHRlcm5hdGVEaXNwYXRjaGVyID0gbWFrZVVuaXF1ZTxP
YmpDSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7CisgICAgYXV0
byBhbHRlcm5hdGVBZ2VudCA9IG1ha2VVbmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8
TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciwgQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0
Y2hlcj4+KCJOZXR3b3JrMSJfcywgKl9jb250cm9sbGVyLCBXVEZNb3ZlKGFsdGVybmF0ZURpc3Bh
dGNoZXIpKTsKKyAgICBfY29udHJvbGxlci0+YXBwZW5kRXh0cmFBZ2VudChXVEZNb3ZlKGFsdGVy
bmF0ZUFnZW50KSk7Cit9CisKKy0gKGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxl
cj4pbmV0d29yazFIYW5kbGVyCit7CisgICAgcmV0dXJuIF9uZXR3b3JrMUhhbmRsZXI7Cit9CisK
Ky0gKFRlc3RQcm90b2NvbE5ldHdvcmszRG9tYWluRXZlbnREaXNwYXRjaGVyICopbmV0d29yazNF
dmVudERpc3BhdGNoZXIKK3sKKyAgICBpZiAoIV9uZXR3b3JrM0V2ZW50RGlzcGF0Y2hlcikKKyAg
ICAgICAgX25ldHdvcmszRXZlbnREaXNwYXRjaGVyID0gW1tUZXN0UHJvdG9jb2xOZXR3b3JrM0Rv
bWFpbkV2ZW50RGlzcGF0Y2hlciBhbGxvY10gaW5pdFdpdGhDb250cm9sbGVyOl9jb250cm9sbGVy
XTsKKyAgICByZXR1cm4gX25ldHdvcmszRXZlbnREaXNwYXRjaGVyOworfQorCitAZW5kCisKKwor
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJv
dG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMu
aCIKKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0
b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkV2ZW50RGlz
cGF0Y2hlcgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xs
ZXI7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxl
SW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5p
dF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIEFTU0VSVChjb250
cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAgcmV0dXJuIHNlbGY7
Cit9CisKKy0gKHZvaWQpcmVzb3VyY2VMb2FkZWQKK3sKKyAgICBjb25zdCBGcm9udGVuZFJvdXRl
ciYgcm91dGVyID0gX2NvbnRyb2xsZXItPmZyb250ZW5kUm91dGVyKCk7CisKKyAgICBSZWY8SlNP
Tjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAganNv
bk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiTmV0d29yazMucmVzb3VyY2VMb2FkZWQi
X3MpOworICAgIHJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsK
K30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVy
cy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNv
biBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPEZvdW5k
YXRpb24vRm91bmRhdGlvbi5oPgorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xK
U09OT2JqZWN0Lmg+CisKKworQGNsYXNzIFRlc3RQcm90b2NvbE5ldHdvcmsyTmV0d29ya0Vycm9y
OworCisKKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJm
YWNlIFRlc3RQcm90b2NvbE5ldHdvcmsyTmV0d29ya0Vycm9yIDogUldJUHJvdG9jb2xKU09OT2Jq
ZWN0CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJp
bmcgKiwgaWQ+ICopcGF5bG9hZDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2Jq
ZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OworLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlIGNvZGU6KGludCljb2RlOworLyog
cmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICptZXNzYWdl
OworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgaW50IGNvZGU7
CitAZW5kCisKK0Bwcm90b2NvbCBUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXIgPE5T
T2JqZWN0PgorQG9wdGlvbmFsCistICh2b2lkKWxvYWRSZXNvdXJjZVdpdGhFcnJvckNhbGxiYWNr
Oih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6
KHZvaWQoXikodm9pZCkpc3VjY2Vzc0NhbGxiYWNrOworQGVuZAorCitfX2F0dHJpYnV0ZV9fKCh2
aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sTmV0d29yazNE
b21haW5FdmVudERpc3BhdGNoZXIgOiBOU09iamVjdAorLSAodm9pZClyZXNvdXJjZUxvYWRlZDsK
K0BlbmQKKworCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGli
aWxpdHlPYmplY3RzLmg+CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbiBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2Nv
bC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKKyNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9y
dCA8d3RmL0pTT05WYWx1ZXMuaD4KKworQGludGVyZmFjZSBUZXN0UHJvdG9jb2xOZXR3b3JrM0Rv
bWFpbkV2ZW50RGlzcGF0Y2hlciAoUHJpdmF0ZSkKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENv
bnRyb2xsZXI6KEluc3BlY3Rvcjo6QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250
cm9sbGVyOworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAor
CisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1n
dWFyZHMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBv
cnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJy
YXlDb252ZXJzaW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgT2JqQ0VudW1UeXBlPgorT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xT
dHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorCisjIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRz
Lmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgi
CisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0
b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5z
cGVjdG9yOworCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoTmV0d29y
azJEb21haW4pCisKKysgKHZvaWQpX3BhcnNlTmV0d29ya0Vycm9yOihUZXN0UHJvdG9jb2xOZXR3
b3JrMk5ldHdvcmtFcnJvciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKwor
QGVuZAorCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChOZXR3
b3JrMkRvbWFpbikKKworKyAodm9pZClfcGFyc2VOZXR3b3JrRXJyb3I6KFRlc3RQcm90b2NvbE5l
dHdvcmsyTmV0d29ya0Vycm9yICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7
CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5
IGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xOZXR3b3JrMk5ldHdvcmtF
cnJvciBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOworfQorCitAZW5kCisKKworIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKworIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5h
bC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQg
PFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisjaW1wb3J0IDx3
dGYvQXNzZXJ0aW9ucy5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFt
ZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbE5ldHdvcmsy
TmV0d29ya0Vycm9yCisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwg
TlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQKK3sKKyAgICBpZiAoIShzZWxm
ID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAIm1lc3NhZ2UiXSwgQCJtZXNzYWdl
Iik7CisgICAgc2VsZi5tZXNzYWdlID0gcGF5bG9hZFtAIm1lc3NhZ2UiXTsKKworICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImNvZGUiXSwgQCJjb2Rl
Iik7CisgICAgc2VsZi5jb2RlID0gW3BheWxvYWRbQCJjb2RlIl0gaW50ZWdlclZhbHVlXTsKKwor
ICAgIHJldHVybiBzZWxmOworfQorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmpl
Y3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9iamVjdAoreworICAgIGlmICghKHNlbGYgPSBb
c3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmplY3QgdG9KU09OT2JqZWN0XS5nZXQoKV0pKQor
ICAgICAgICByZXR1cm4gbmlsOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBjb2RlOihpbnQpY29kZQor
eworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOwor
CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShtZXNzYWdlLCBAIm1l
c3NhZ2UiKTsKKworICAgIHNlbGYubWVzc2FnZSA9IG1lc3NhZ2U7CisgICAgc2VsZi5jb2RlID0g
Y29kZTsKKworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXNldE1lc3NhZ2U6KE5TU3Ry
aW5nICopbWVzc2FnZQoreworICAgIFtzdXBlciBzZXRTdHJpbmc6bWVzc2FnZSBmb3JLZXk6QCJt
ZXNzYWdlIl07Cit9CisKKy0gKE5TU3RyaW5nICopbWVzc2FnZQoreworICAgIHJldHVybiBbc3Vw
ZXIgc3RyaW5nRm9yS2V5OkAibWVzc2FnZSJdOworfQorCistICh2b2lkKXNldENvZGU6KGludClj
b2RlCit7CisgICAgW3N1cGVyIHNldEludGVnZXI6Y29kZSBmb3JLZXk6QCJjb2RlIl07Cit9CisK
Ky0gKGludCljb2RlCit7CisgICAgcmV0dXJuIFtzdXBlciBpbnRlZ2VyRm9yS2V5OkAiY29kZSJd
OworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4
cGVjdGVkL3NhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24tcmVzdWx0IGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3NhbWUtdHlw
ZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24tcmVzdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFmZDBjNjZjMDhh
NmU0ZGEwYzA0MThiYzFiZDM2Mjg5NTk5MWFlMzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2FtZS10eXBl
LWlkLWRpZmZlcmVudC1kb21haW4uanNvbi1yZXN1bHQKQEAgLTAsMCArMSw4NjEgQEAKKyMjIyBC
ZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMuaW4KKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKyMjIyBFbmQgRmlsZTogSW5zcGVj
dG9yQmFja2VuZENvbW1hbmRzLmpzLmluCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRl
QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBz
YW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorCituYW1l
c3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewor
cHVibGljOgorICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNw
YXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlz
cGF0Y2hlcik7IH0KKyAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBj
b25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Citwcml2YXRlOgorICAg
IFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKK307CisKKwor
CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVy
cy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZl
cmVudC1kb21haW4uanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0eXBl
ZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgor
IyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6
IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbiBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJU
ZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5j
bHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjaW5jbHVk
ZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgorI2VuZGlmIC8vIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsK
KworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNr
ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRj
aGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRp
ZmZlcmVudC1kb21haW4uanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2lu
Y2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBGcm9udGVuZFJvdXRlcjsKKworfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNo
ZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9t
YWluLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hl
cnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5q
c29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Cisj
aW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKwor
CituYW1lc3BhY2UgUHJvdG9jb2wgeworCisKKworCisKKy8vIFR5cGVkZWZzLgorbmFtZXNwYWNl
IFJ1bnRpbWUgeworLyogVW5pcXVlIG9iamVjdCBpZGVudGlmaWVyLiAqLwordHlwZWRlZiBTdHJp
bmcgUmVtb3RlT2JqZWN0SWQ7Cit9IC8vIFJ1bnRpbWUKKworbmFtZXNwYWNlIFJ1bnRpbWUyIHsK
Ky8qIFVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4gKi8KK3R5cGVkZWYgU3RyaW5nIFJlbW90ZU9i
amVjdElkOworfSAvLyBSdW50aW1lMgorLy8gRW5kIG9mIHR5cGVkZWZzLgorCisKKworfSAvLyBu
YW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
T2JqZWN0cy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUt
aWQtZGlmZmVyZW50LWRvbWFpbi5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVj
dHMuaCIKKworI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK25hbWVzcGFjZSBQcm90b2NvbCB7
CisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorCisjIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2luY2x1ZGUgPHd0
Zi9SZXRhaW5QdHIuaD4KKworCisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKK30gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNw
YXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hl
cnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlm
ZmVyZW50LWRvbWFpbi5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0
Y2hlcnMuaCIKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW5jbHVkZSAi
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMu
aD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgor
CisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorCisjIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbiBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rv
ci9UZXN0UHJvdG9jb2wuaD4KKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQi
KSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAorQGVu
ZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbiBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24uaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNp
bXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorI2ltcG9ydCA8SmF2YVNj
cmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKwordXNpbmcg
bmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZp
Z3VyYXRpb24KK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9s
bGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJs
ZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGlu
aXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29u
dHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVybiBzZWxm
OworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKK0Bl
bmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29u
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFBy
b3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
LmgiCisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVj
dG9yOworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQor
CisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0
aW9uLmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4K
KworCisKKworCisKKworCisKKworCisKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3Rv
Y29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4u
anNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRl
c3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIK
KyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5o
PgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xJbnRlcm5hbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1p
ZC1kaWZmZXJlbnQtZG9tYWluLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9S
V0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisK
K3RlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KK09wdGlvbmFsPE9iakNFbnVtVHlwZT4g
ZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOworCisKKworCisKK30gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMu
bW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVy
ZW50LWRvbWFpbi5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisKKyNpbXBvcnQgIlRlc3RQ
cm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgorI2ltcG9ydCA8
V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKwordXNpbmcgbmFt
ZXNwYWNlIEluc3BlY3RvcjsKKworQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMgKFJ1bnRpbWVEb21haW4pCisKKysgKHZvaWQpX3BhcnNlUmVtb3RlT2JqZWN0SWQ6KE5TU3Ry
aW5nICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworCitAZW5kCitAaW50ZXJm
YWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoUnVudGltZTJEb21haW4pCisKKysgKHZv
aWQpX3BhcnNlUmVtb3RlT2JqZWN0SWQ6KE5TU3RyaW5nICoqKW91dFZhbHVlIGZyb21QYXlsb2Fk
OihpZClwYXlsb2FkOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMgKFJ1bnRpbWVEb21haW4pCisKKysgKHZvaWQpX3BhcnNlUmVtb3RlT2JqZWN0
SWQ6KE5TU3RyaW5nICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsK
KyAgICAqb3V0VmFsdWUgPSAoTlNTdHJpbmcgKilwYXlsb2FkOworfQorCitAZW5kCitAaW1wbGVt
ZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChSdW50aW1lMkRvbWFpbikKKwor
KyAodm9pZClfcGFyc2VSZW1vdGVPYmplY3RJZDooTlNTdHJpbmcgKiopb3V0VmFsdWUgZnJvbVBh
eWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBh
eWxvYWQsIFtOU1N0cmluZyBjbGFzc10pOworICAgICpvdXRWYWx1ZSA9IChOU1N0cmluZyAqKXBh
eWxvYWQ7Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFp
bi5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAi
VGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJp
dmF0ZS5oPgorI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFs
dWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworCisKKworCisjIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2hhZG93ZWQtb3B0aW9uYWwt
dHlwZS1zZXR0ZXJzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5q
c29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ZjJjZDc5MzMwNDI0N2U3NjU1ZjNlOTgxZWE3MDBmNTdj
NzcwZmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5q
c29uLXJlc3VsdApAQCAtMCwwICsxLDEwNjggQEAKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JC
YWNrZW5kQ29tbWFuZHMuanMuaW4KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBz
aGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5q
cy5pbgorCisjIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5o
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlw
ZS1zZXR0ZXJzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisj
cHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Igewor
CitjbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdm9pZCBz
ZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hl
cikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQorICAgIEJh
Y2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFj
a2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KK3ByaXZhdGU6CisgICAgUmVmUHRyPEJhY2tlbmREaXNw
YXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOworfTsKKworCisKKworfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKKyMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisK
KyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbiBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0eXBlZGVmIFN0cmluZyBFcnJvclN0
cmluZzsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0
QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0
Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0
aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0
ZXIuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRl
c3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCit9IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNw
cAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5q
c29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8d3RmL0pTT05W
YWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIElu
c3BlY3RvciB7CisKK2NsYXNzIEZyb250ZW5kUm91dGVyOworCit9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVn
aW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbiBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9B
c3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFBy
b3RvY29sIHsKKworCisKKy8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgorbmFtZXNwYWNlIFJ1bnRp
bWUgeworY2xhc3MgS2V5UGF0aDsKK30gLy8gUnVudGltZQorLy8gRW5kIG9mIGZvcndhcmQgZGVj
bGFyYXRpb25zLgorCisKKworCituYW1lc3BhY2UgVGVzdEhlbHBlcnMgeworCitTdHJpbmcgZ2V0
RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJp
bmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFsdWUpCit7CisgICAgcmV0dXJuIGdldEVu
dW1Db25zdGFudFZhbHVlKHN0YXRpY19jYXN0PGludD4oZW51bVZhbHVlKSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFRlc3RIZWxwZXJzCisKK25hbWVzcGFjZSBSdW50aW1lIHsKKworLyogS2V5IHBh
dGguICovCitjbGFzcyBLZXlQYXRoIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgeworcHVibGlj
OgorICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ3R5cGUnIHdoaWxlIGdlbmVyYXRp
bmcgS2V5UGF0aC4KKyAgICBlbnVtIGNsYXNzIFR5cGUgeworICAgICAgICBOdWxsID0gMCwKKyAg
ICAgICAgU3RyaW5nID0gMSwKKyAgICAgICAgQXJyYXkgPSAyLAorICAgIH07IC8vIGVudW0gY2xh
c3MgVHlwZQorICAgIGVudW0geworICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCisgICAgICAgIFR5
cGVTZXQgPSAxIDw8IDAsCisgICAgICAgIEFsbEZpZWxkc1NldCA9IChUeXBlU2V0KQorICAgIH07
CisKKyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CisgICAgY2xhc3MgQnVpbGRlciB7CisgICAgcHJp
dmF0ZToKKyAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7CisKKyAgICAgICAg
dGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RB
VEUgfCBTVEVQPio+KHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcihSZWY8LypL
ZXlQYXRoKi9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQorICAgICAgICAgICAgOiBtX3Jlc3VsdChX
VEZNb3ZlKG9iamVjdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNU
QVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwor
ICAgICAgICB9CisgICAgICAgIGZyaWVuZCBjbGFzcyBLZXlQYXRoOworICAgIHB1YmxpYzoKKwor
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVHlwZVNldD4mIHNldFR5cGUoVHlwZSB2YWx1ZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFR5cGVTZXQpLCBw
cm9wZXJ0eV90eXBlX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJp
bmcoInR5cGUiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29u
c3RhbnRWYWx1ZSh2YWx1ZSkpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUeXBlU2V0
PigpOworICAgICAgICB9CisKKyAgICAgICAgUmVmPEtleVBhdGg+IHJlbGVhc2UoKQorICAgICAg
ICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJl
c3VsdF9pc19ub3RfcmVhZHkpOworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEtl
eVBhdGgpID09IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7CisKKyAgICAgICAg
ICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25SZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVs
bCgpOworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0
PFJlZjxLZXlQYXRoPio+KCZqc29uUmVzdWx0KSk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgICAgICB9CisgICAgfTsKKworICAgIC8qCisgICAgICogU3ludGhldGljIGNvbnN0cnVj
dG9yOgorICAgICAqIFJlZjxLZXlQYXRoPiByZXN1bHQgPSBLZXlQYXRoOjpjcmVhdGUoKQorICAg
ICAqICAgICAuc2V0VHlwZSguLi4pCisgICAgICogICAgIC5yZWxlYXNlKCk7CisgICAgICovCisg
ICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCisgICAgeworICAgICAgICBy
ZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7CisgICAg
fQorCisgICAgdm9pZCBzZXRTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIEpTT046Ok9iamVjdEJhc2U6OnNldFN0cmluZygic3RyaW5nIl9zLCB2YWx1ZSk7CisgICAg
fQorCisgICAgdm9pZCBzZXRBcnJheShSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiB2YWx1
ZSkKKyAgICB7CisgICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldEFycmF5KCJhcnJheSJfcywg
V1RGTW92ZSh2YWx1ZSkpOworICAgIH0KK307CisKK30gLy8gUnVudGltZQorCisKKworbmFtZXNw
YWNlIFRlc3RIZWxwZXJzIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgUHJvdG9jb2xFbnVtVHlwZT4K
K09wdGlvbmFsPFByb3RvY29sRW51bVR5cGU+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZyhjb25z
dCBTdHJpbmcmKTsKKworLy8gRW51bXMgaW4gdGhlICdSdW50aW1lJyBEb21haW4KK3RlbXBsYXRl
PD4KK09wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6OlR5cGU+
IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpL
ZXlQYXRoOjpUeXBlPihjb25zdCBTdHJpbmcmKTsKKworfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBl
cnMKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
CisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorCisjIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBzaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0
UHJvdG9jb2xPYmplY3RzLmgiCisKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCituYW1lc3Bh
Y2UgUHJvdG9jb2wgeworCituYW1lc3BhY2UgVGVzdEhlbHBlcnMgeworCitzdGF0aWMgY29uc3Qg
Y2hhciogY29uc3QgZW51bV9jb25zdGFudF92YWx1ZXNbXSA9IHsKKyAgICAibnVsbCIsCisgICAg
InN0cmluZyIsCisgICAgImFycmF5IiwKK307CisKK1N0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1
ZShpbnQgY29kZSkgeworICAgIHJldHVybiBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb2RlXTsKK30K
KworLy8gRW51bXMgaW4gdGhlICdSdW50aW1lJyBEb21haW4KKwordGVtcGxhdGU8PgorT3B0aW9u
YWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZT4gcGFyc2VFbnVt
VmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6OlR5
cGU+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCit7CisgICAgc3RhdGljIGNvbnN0IHNp
emVfdCBjb25zdGFudFZhbHVlc1tdID0geworICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJv
dG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6OlR5cGU6Ok51bGwsCisgICAgICAgIChzaXplX3QpSW5z
cGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZTo6U3RyaW5nLAorICAgICAg
ICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6OlR5cGU6OkFy
cmF5LAorICAgIH07CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAzOyArK2kpCisgICAgICAg
IGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVl
c1tpXV0pCisgICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6
OktleVBhdGg6OlR5cGUpY29uc3RhbnRWYWx1ZXNbaV07CisKKyAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycworCisKKworfSAvLyBuYW1lc3Bh
Y2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJh
Y2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hh
ZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJu
YXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCisK
KworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisK
KyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29u
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmln
LmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1
ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKworbmFtZXNwYWNlIElu
c3BlY3RvciB7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbi5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
c2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+
CisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBU
ZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKK0BlbmQKKworCisjIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbi5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5o
IgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2ltcG9ydCAiVGVzdFByb3Rv
Y29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5h
dGVEaXNwYXRjaGFibGVBZ2VudC5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFi
bGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVj
dG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgoreworICAg
IEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Cit9CisKKy0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJv
bGxlciopY29udHJvbGxlcgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFz
ZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBf
Y29udHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQp
ZGVhbGxvYworeworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworQGVuZAorCisKKyMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwu
aCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDx3
dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisKKyMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFk
b3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCisjaW1w
b3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+CisKKworQGNsYXNzIFRl
c3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoOworCit0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBU
ZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGUpIHsKKyAgICBUZXN0UHJvdG9jb2xSdW50aW1l
S2V5UGF0aFR5cGVOdWxsLAorICAgIFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZVN0cmlu
ZywKKyAgICBUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGVBcnJheSwKK307CisKK19fYXR0
cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9j
b2xSdW50aW1lS2V5UGF0aCA6IFJXSVByb3RvY29sSlNPTk9iamVjdAorLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQ7
CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09O
T2JqZWN0ICopanNvbk9iamVjdDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFR5cGU6KFRlc3RQ
cm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZSl0eXBlOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5
IChub25hdG9taWMsIGFzc2lnbikgVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlIHR5cGU7
CisvKiBvcHRpb25hbCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKnN0
cmluZzsKKy8qIG9wdGlvbmFsICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU0FycmF5
Lyo8TlNTdHJpbmc+Ki8gKmFycmF5OworQGVuZAorCisKKworCisKKworI2ltcG9ydCA8V2ViSW5z
cGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgorCisjIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRl
cm5hbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9u
YWwtdHlwZS1zZXR0ZXJzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05P
YmplY3RQcml2YXRlLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3Bl
Y3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKKworCisKKyMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorCisjIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBzaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbiBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9y
dCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgorCituYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgorT3B0aW9u
YWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7
CisKK2lubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xSdW50aW1lS2V5
UGF0aFR5cGUgdmFsdWUpCit7CisgICAgc3dpdGNoKHZhbHVlKSB7CisgICAgY2FzZSBUZXN0UHJv
dG9jb2xSdW50aW1lS2V5UGF0aFR5cGVOdWxsOgorICAgICAgICByZXR1cm4gIm51bGwiX3M7Cisg
ICAgY2FzZSBUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGVTdHJpbmc6CisgICAgICAgIHJl
dHVybiAic3RyaW5nIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBl
QXJyYXk6CisgICAgICAgIHJldHVybiAiYXJyYXkiX3M7CisgICAgfQorfQorCit0ZW1wbGF0ZTw+
CitpbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlPiBmcm9tUHJv
dG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gIm51
bGwiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlTnVsbDsK
KyAgICBpZiAodmFsdWUgPT0gInN0cmluZyIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xS
dW50aW1lS2V5UGF0aFR5cGVTdHJpbmc7CisgICAgaWYgKHZhbHVlID09ICJhcnJheSIpCisgICAg
ICAgIHJldHVybiBUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGVBcnJheTsKKyAgICByZXR1
cm4gV1RGOjpudWxsb3B0OworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorCisjIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJv
dG9jb2xUeXBlUGFyc2VyLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09O
T2JqZWN0UHJpdmF0ZS5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW50ZXJm
YWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoUnVudGltZURvbWFpbikKKworKyAodm9p
ZClfcGFyc2VLZXlQYXRoOihUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aCAqKilvdXRWYWx1ZSBm
cm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zIChSdW50aW1lRG9tYWluKQorCisrICh2b2lkKV9wYXJzZUtl
eVBhdGg6KFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoICoqKW91dFZhbHVlIGZyb21QYXlsb2Fk
OihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2Fk
LCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xS
dW50aW1lS2V5UGF0aCBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOworfQorCitAZW5k
CisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRl
cm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBv
cnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisjaW1wb3J0
IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcg
bmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFJ1bnRp
bWVLZXlQYXRoCisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNE
aWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQKK3sKKyAgICBpZiAoIShzZWxmID0g
W3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAInR5cGUiXSwgQCJ0eXBlIik7CisgICAg
T3B0aW9uYWw8VGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlPiB0eXBlID0gZnJvbVByb3Rv
Y29sU3RyaW5nPFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZT4ocGF5bG9hZFtAInR5cGUi
XSk7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfRU5VTV9WQUxVRSh0eXBlLCBAInR5cGUi
KTsKKyAgICBzZWxmLnR5cGUgPSB0eXBlLnZhbHVlKCk7CisKKyAgICBzZWxmLnN0cmluZyA9IHBh
eWxvYWRbQCJzdHJpbmciXTsKKworICAgIHNlbGYuYXJyYXkgPSBwYXlsb2FkW0AiYXJyYXkiXTsK
KworICAgIHJldHVybiBzZWxmOworfQorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xP
YmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9iamVjdAoreworICAgIGlmICghKHNlbGYg
PSBbc3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmplY3QgdG9KU09OT2JqZWN0XS5nZXQoKV0p
KQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aFR5cGU6KFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZSl0eXBl
Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7
CisKKyAgICBzZWxmLnR5cGUgPSB0eXBlOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZv
aWQpc2V0VHlwZTooVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlKXR5cGUKK3sKKyAgICBb
c3VwZXIgc2V0U3RyaW5nOnRvUHJvdG9jb2xTdHJpbmcodHlwZSkgZm9yS2V5OkAidHlwZSJdOwor
fQorCistIChUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGUpdHlwZQoreworICAgIHJldHVy
biBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlPihbc3Vw
ZXIgc3RyaW5nRm9yS2V5OkAidHlwZSJdKS52YWx1ZSgpOworfQorCistICh2b2lkKXNldFN0cmlu
ZzooTlNTdHJpbmcgKilzdHJpbmcKK3sKKyAgICBbc3VwZXIgc2V0U3RyaW5nOnN0cmluZyBmb3JL
ZXk6QCJzdHJpbmciXTsKK30KKworLSAoTlNTdHJpbmcgKilzdHJpbmcKK3sKKyAgICByZXR1cm4g
W3N1cGVyIHN0cmluZ0ZvcktleTpAInN0cmluZyJdOworfQorCistICh2b2lkKXNldEFycmF5OihO
U0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilhcnJheQoreworICAgIFtzdXBlciBzZXRKU09OQXJyYXk6
dG9KU09OU3RyaW5nQXJyYXkoYXJyYXkpIGZvcktleTpAImFycmF5Il07Cit9CisKKy0gKE5TQXJy
YXkvKjxOU1N0cmluZz4qLyAqKWFycmF5Cit7CisgICAgcmV0dXJuIHRvT2JqQ1N0cmluZ0FycmF5
KFtzdXBlciBKU09OQXJyYXlGb3JLZXk6QCJhcnJheSJdKTsKK30KKworQGVuZAorCisKKyMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zaG91bGQtc3RyaXAtY29t
bWVudHMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24tcmVzdWx0Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjM0OGFjZTkzYmFiMDk0N2RhZjg1YjQ1ZjU5YzlmY2FhNjcwMmRlMDAKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24tcmVzdWx0CkBAIC0wLDAgKzEsODE3
IEBACisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzLmluCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorIyMjIEVuZCBGaWxlOiBJbnNw
ZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMuaW4KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5h
dGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHNob3VsZC1zdHJpcC1jb21tZW50cy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorCituYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKKworY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVibGlj
OgorICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVy
PiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hl
cik7IH0KKyAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7
IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Citwcml2YXRlOgorICAgIFJlZlB0
cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKK307CisKKworCisKK30g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCisjIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlz
cGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpz
b24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJy
b3JTdHJpbmc7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTog
VGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERp
c3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNob3VsZC1z
dHJpcC1jb21tZW50cy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMu
aCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+
CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95
ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2Vu
ZERpc3BhdGNoZXJzLmgiCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKwor
IyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBzaG91bGQtc3RyaXAtY29tbWVudHMuanNvbiBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAi
VGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitj
bGFzcyBGcm9udGVuZFJvdXRlcjsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5k
IEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RG
cm9udGVuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHNob3VsZC1zdHJpcC1jb21tZW50cy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RGcm9udGVuZERp
c3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVu
ZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIElu
c3BlY3RvciB7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRl
c3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
T2JqZWN0cy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlw
LWNvbW1lbnRzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29s
VHlwZXMuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVj
dG9yIHsKKworCisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKworCisKKworCisKKworCit9IC8v
IG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xPYmplY3RzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNob3VsZC1z
dHJpcC1jb21tZW50cy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIK
KworI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKwor
Cit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKwor
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorCisjIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBzaG91bGQtc3RyaXAtY29tbWVudHMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+
CisKKworCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisj
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIK
KyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSAi
VGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorCituYW1lc3BhY2UgSW5zcGVj
dG9yIHsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xDb25maWd1cmF0aW9uLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaG91
bGQtc3RyaXAtY29tbWVudHMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KKworX19hdHRyaWJ1
dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbENv
bmZpZ3VyYXRpb24gOiBOU09iamVjdAorQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1
cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlw
LWNvbW1lbnRzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisj
aW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90
b2NvbEludGVybmFsLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMu
aCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+
CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIu
aD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNw
YXRjaGVycy5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXJzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlv
biBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCit7CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JD
b250cm9sbGVyKiBfY29udHJvbGxlcjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29u
dHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCit7Cisg
ICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBu
aWw7CisgICAgQVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250cm9sbGVyID0gY29udHJvbGxl
cjsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgW3N1cGVy
IGRlYWxsb2NdOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25m
aWd1cmF0aW9uLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNo
ZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlwLWNv
bW1lbnRzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1w
b3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVz
cGFjZSBJbnNwZWN0b3I7CisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3Bh
dGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNob3VsZC1zdHJpcC1jb21tZW50cy5qc29uIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3Vu
ZGF0aW9uLmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3Qu
aD4KKworCisKKworCisKKworCisKKworCisKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVBy
b3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgorCisjIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJv
dG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCisjaW1w
b3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNp
bXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKKworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaG91bGQtc3RyaXAtY29t
bWVudHMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBv
cnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJy
YXlDb252ZXJzaW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgT2JqQ0VudW1UeXBlPgorT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xT
dHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgor
CisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBzaG91bGQtc3RyaXAtY29tbWVudHMuanNvbiBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90
b2NvbFR5cGVQYXJzZXIuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05P
YmplY3RQcml2YXRlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworCisKKwor
CisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorCisjIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBzaG91bGQtc3RyaXAtY29tbWVudHMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNp
bXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8V2ViSW5zcGVj
dG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKyNpbXBvcnQgPHd0Zi9Bc3NlcnRp
b25zLmg+CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5z
cGVjdG9yOworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC90eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbi1yZXN1bHQgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlw
ZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24tcmVzdWx0Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjI3MDAwYTExMWNhY2Q3N2M1NjI5NDA5YzA5MWY4ZDI0MTEwNmE5OGMKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24tcmVzdWx0
CkBAIC0wLDAgKzEsODM4IEBACisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1h
bmRzLmpzLmluCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJh
dGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMu
aW4KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNl
ZC1wcmltaXRpdmUtdHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorCituYW1lc3BhY2UgSW5zcGVj
dG9yIHsKKworY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAg
IHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRp
c3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0K
KyAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVy
biBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Citwcml2YXRlOgorICAgIFJlZlB0cjxCYWNr
ZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKK307CisKKworCisKK30gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCisjIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hl
cnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1p
dGl2ZS10eXBlLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRl
ZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMj
IyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBU
ZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMu
aD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
KyNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCisjZW5kaWYgLy8g
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKK25hbWVzcGFjZSBJbnNw
ZWN0b3IgeworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTog
VGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVu
ZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRl
Y2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFByb3Rv
Y29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBGcm9u
dGVuZFJvdXRlcjsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRl
c3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERp
c3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVj
bGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RG
cm9udGVuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5k
IEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sT2JqZWN0cy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlw
ZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0
aW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK25hbWVzcGFjZSBQcm90b2Nv
bCB7CisKKworCisKKworLy8gVHlwZWRlZnMuCituYW1lc3BhY2UgUnVudGltZSB7CisvKiBVbmlx
dWUgb2JqZWN0IGlkZW50aWZpZXIuICovCit0eXBlZGVmIGludCBSZW1vdGVPYmplY3RJZDsKK30g
Ly8gUnVudGltZQorLy8gRW5kIG9mIHR5cGVkZWZzLgorCisKKworfSAvLyBuYW1lc3BhY2UgUHJv
dG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbE9iamVjdHMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFz
ZWQtcHJpbWl0aXZlLXR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3Rz
LmgiCisKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCituYW1lc3BhY2UgUHJvdG9jb2wgewor
CisKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKworIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpz
b24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW5j
bHVkZSA8d3RmL1JldGFpblB0ci5oPgorCisKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKwor
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFj
a2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmRE
aXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVj
bGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJv
dG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVy
bmFsLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW5jbHVk
ZSA8d3RmL0pTT05WYWx1ZXMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK30gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNw
YXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5o
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlh
c2VkLXByaW1pdGl2ZS10eXBlLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+CisKK19fYXR0cmli
dXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xD
b25maWd1cmF0aW9uIDogTlNPYmplY3QKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbENvbmZpZ3VyYXRpb24uaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbi5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFy
YXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgor
CisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29s
QmFja2VuZERpc3BhdGNoZXJzLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVE
aXNwYXRjaGFibGVBZ2VudC5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJ
bnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9y
OworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgoreworICAgIEF1
Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Cit9CisKKy0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxl
ciopY29udHJvbGxlcgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxm
KQorICAgICAgICByZXR1cm4gbmlsOworICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBfY29u
dHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVh
bGxvYworeworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50
ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1w
b3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisK
KyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorCisjIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbiBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRh
dGlvbi5oPgorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+
CisKKworCisKKworCisKKworCisKKworCisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90
b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4KKworIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2wuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmlt
aXRpdmUtdHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0
UHJpdmF0ZS5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JD
b250cm9sbGVyLmg+CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCisKKworCisjIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
dHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNp
bXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KK09w
dGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFs
dWUpOworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5
cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3Rv
Y29sVHlwZVBhcnNlci5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9i
amVjdFByaXZhdGUuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGludGVyZmFj
ZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFJ1bnRpbWVEb21haW4pCisKKysgKHZvaWQp
X3BhcnNlUmVtb3RlT2JqZWN0SWQ6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihp
ZClwYXlsb2FkOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMgKFJ1bnRpbWVEb21haW4pCisKKysgKHZvaWQpX3BhcnNlUmVtb3RlT2JqZWN0SWQ6
KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNOdW1iZXIgY2xhc3NdKTsKKyAg
ICAqb3V0VmFsdWUgPSAoTlNOdW1iZXIgKilwYXlsb2FkOworfQorCitAZW5kCisKKworIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKworIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbFR5cGVzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
dHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5h
bC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQg
PFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisjaW1wb3J0IDx3
dGYvQXNzZXJ0aW9ucy5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFt
ZXNwYWNlIEluc3BlY3RvcjsKKworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBl
cy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uLXJlc3VsdCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90
eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbi1yZXN1bHQKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGViZmY3
OTE4YmFiMTk1Yzc5NjAyMWEzNzFlZjc2ZmU0YWY1YWM0ZQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBl
LWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbi1yZXN1bHQKQEAgLTAsMCArMSwxMDE5IEBACisj
IyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzLmluCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisvLyBEZWJ1Z2dlcgorSW5z
cGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiRGVidWdnZXIiLCBudWxsKTsKK0luc3BlY3Rv
ckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJEZWJ1Z2dlci5SZWFzb24iLCB7RGllZDogIkRpZWQiLCBG
YWludGVkOiAiRmFpbnRlZCIsIEh1bmdyeTogIkh1bmdyeSJ9KTsKK0luc3BlY3RvckJhY2tlbmQu
YWN0aXZhdGVEb21haW4oIkRlYnVnZ2VyIiwgbnVsbCk7CisjIyMgRW5kIEZpbGU6IEluc3BlY3Rv
ckJhY2tlbmRDb21tYW5kcy5qcy5pbgorCisjIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlw
ZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisKK25hbWVzcGFj
ZSBJbnNwZWN0b3IgeworCitjbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJs
aWM6CisgICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNo
ZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRj
aGVyKTsgfQorICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0
IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KK3ByaXZhdGU6CisgICAgUmVm
UHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOworfTsKKworCisKKwor
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKKyMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmRE
aXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5
LXR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0eXBlZGVmIFN0
cmluZyBFcnJvclN0cmluZzsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVu
ZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
dHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEJhY2tl
bmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJv
bnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0
Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lm
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorI2luY2x1ZGUgIlRlc3RB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3Bh
dGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXkt
dHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8d3Rm
L0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNw
YWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEZyb250ZW5kUm91dGVyOworCit9IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorCisj
IyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbiBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9B
c3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFBy
b3RvY29sIHsKKworCisKKy8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgorbmFtZXNwYWNlIERlYnVn
Z2VyIHsKK2VudW0gY2xhc3MgUmVhc29uOworfSAvLyBEZWJ1Z2dlcgorLy8gRW5kIG9mIGZvcndh
cmQgZGVjbGFyYXRpb25zLgorCisKKy8vIFR5cGVkZWZzLgorbmFtZXNwYWNlIERlYnVnZ2VyIHsK
K3R5cGVkZWYgaW50IEJyZWFrcG9pbnRJZDsKK30gLy8gRGVidWdnZXIKKworbmFtZXNwYWNlIFJ1
bnRpbWUgewordHlwZWRlZiBpbnQgT2JqZWN0SWQ7Cit0eXBlZGVmIEpTT046OkFycmF5T2Y8aW50
PiBMdWNreU51bWJlcnM7Cit0eXBlZGVmIEpTT046OkFycmF5T2Y8U3RyaW5nPiBCYWJ5TmFtZXM7
Cit0eXBlZGVmIEpTT046OkFycmF5T2Y8aW50PiBOZXdPYmplY3RzOwordHlwZWRlZiBKU09OOjpB
cnJheU9mPGludD4gT2xkT2JqZWN0czsKK3R5cGVkZWYgSlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6
OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uPiBTdG9wUmVhc29uczsKK30gLy8gUnVudGltZQor
Ly8gRW5kIG9mIHR5cGVkZWZzLgorCituYW1lc3BhY2UgVGVzdEhlbHBlcnMgeworCitTdHJpbmcg
Z2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBT
dHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFsdWUpCit7CisgICAgcmV0dXJuIGdl
dEVudW1Db25zdGFudFZhbHVlKHN0YXRpY19jYXN0PGludD4oZW51bVZhbHVlKSk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCisKK25hbWVzcGFjZSBEZWJ1Z2dlciB7CisKK2VudW0g
Y2xhc3MgUmVhc29uIHsKKyAgICBEaWVkID0gMCwKKyAgICBGYWludGVkID0gMSwKKyAgICBIdW5n
cnkgPSAyLAorfTsgLy8gZW51bSBjbGFzcyBSZWFzb24KKworfSAvLyBEZWJ1Z2dlcgorCisKKwor
bmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgUHJvdG9jb2xFbnVt
VHlwZT4KK09wdGlvbmFsPFByb3RvY29sRW51bVR5cGU+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmlu
Zyhjb25zdCBTdHJpbmcmKTsKKworLy8gRW51bXMgaW4gdGhlICdEZWJ1Z2dlcicgRG9tYWluCit0
ZW1wbGF0ZTw+CitPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29u
PiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6
OlJlYXNvbj4oY29uc3QgU3RyaW5nJik7CisKK30gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCisK
K30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCitu
YW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNo
OworCisvLyBIYXNoIGRlY2xhcmF0aW9ucyBpbiB0aGUgJ0RlYnVnZ2VyJyBEb21haW4KK3RlbXBs
YXRlPD4KK3N0cnVjdCBEZWZhdWx0SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6
UmVhc29uPiB7CisgICAgdHlwZWRlZiBJbnRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVn
Z2VyOjpSZWFzb24+IEhhc2g7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKyMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xP
YmplY3RzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFy
YXRpb24tYXJyYXktdHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMu
aCIKKworI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisK
K25hbWVzcGFjZSBUZXN0SGVscGVycyB7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBlbnVt
X2NvbnN0YW50X3ZhbHVlc1tdID0geworICAgICJEaWVkIiwKKyAgICAiRmFpbnRlZCIsCisgICAg
Ikh1bmdyeSIsCit9OworCitTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsK
KyAgICByZXR1cm4gZW51bV9jb25zdGFudF92YWx1ZXNbY29kZV07Cit9CisKKy8vIEVudW1zIGlu
IHRoZSAnRGVidWdnZXInIERvbWFpbgorCit0ZW1wbGF0ZTw+CitPcHRpb25hbDxJbnNwZWN0b3I6
OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5z
cGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbj4oY29uc3QgU3RyaW5nJiBwcm90b2Nv
bFN0cmluZykKK3sKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7
CisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbjo6
RGllZCwKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVh
c29uOjpGYWludGVkLAorICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVn
Z2VyOjpSZWFzb246Okh1bmdyeSwKKyAgICB9OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
MzsgKytpKQorICAgICAgICBpZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1
ZXNbY29uc3RhbnRWYWx1ZXNbaV1dKQorICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlBy
b3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uKWNvbnN0YW50VmFsdWVzW2ldOworCisgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKK30KKworfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKKworCisKK30g
Ly8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIu
aD4KKworCisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKK30gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisK
KyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUu
anNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNv
bmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNp
bmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisKK25hbWVzcGFj
ZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5o
PgorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2Ug
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0CitAZW5kCisKKworIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIK
KworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2Nv
bEJhY2tlbmREaXNwYXRjaGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRl
RGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxl
SW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3Rv
cjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KK3sKKyAgICBB
dWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworfQorCistIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xs
ZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2Vs
ZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2Nv
bnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRl
YWxsb2MKK3sKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisK
KyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8d3RmL0pT
T05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisjIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNs
YXJhdGlvbi1hcnJheS10eXBlLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKworI2ltcG9ydCA8V2Vi
SW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgorCisKKworCit0eXBlZGVmIE5TX0VO
VU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbikgeworICAgIFRlc3RQcm90
b2NvbERlYnVnZ2VyUmVhc29uRGllZCwKKyAgICBUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbkZh
aW50ZWQsCisgICAgVGVzdFByb3RvY29sRGVidWdnZXJSZWFzb25IdW5ncnksCit9OworCisKKwor
CisKKworCisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJp
bGl0eU9iamVjdHMuaD4KKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAorCisjIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1w
b3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgorI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDx3dGYvSlNP
TlZhbHVlcy5oPgorCisKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgK
KworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpz
b24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0
UHJvdG9jb2wuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVy
c2lvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIE9i
akNFbnVtVHlwZT4KK09wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNv
bnN0IFN0cmluZyYgdmFsdWUpOworCitpbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVz
dFByb3RvY29sRGVidWdnZXJSZWFzb24gdmFsdWUpCit7CisgICAgc3dpdGNoKHZhbHVlKSB7Cisg
ICAgY2FzZSBUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbkRpZWQ6CisgICAgICAgIHJldHVybiAi
RGllZCJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERlYnVnZ2VyUmVhc29uRmFpbnRlZDoKKyAg
ICAgICAgcmV0dXJuICJGYWludGVkIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sRGVidWdnZXJS
ZWFzb25IdW5ncnk6CisgICAgICAgIHJldHVybiAiSHVuZ3J5Il9zOworICAgIH0KK30KKwordGVt
cGxhdGU8PgoraW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbERlYnVnZ2VyUmVhc29uPiBmcm9t
UHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0g
IkRpZWQiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGVidWdnZXJSZWFzb25EaWVkOwor
ICAgIGlmICh2YWx1ZSA9PSAiRmFpbnRlZCIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xE
ZWJ1Z2dlclJlYXNvbkZhaW50ZWQ7CisgICAgaWYgKHZhbHVlID09ICJIdW5ncnkiKQorICAgICAg
ICByZXR1cm4gVGVzdFByb3RvY29sRGVidWdnZXJSZWFzb25IdW5ncnk7CisgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKK30KKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisKKyMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucy5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2Nv
bFR5cGVQYXJzZXIuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmpl
Y3RQcml2YXRlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbnRlcmZhY2Ug
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChEZWJ1Z2dlckRvbWFpbikKKworKyAodm9pZClf
cGFyc2VCcmVha3BvaW50SWQ6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClw
YXlsb2FkOworKyAodm9pZClfcGFyc2VSZWFzb246KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21Q
YXlsb2FkOihpZClwYXlsb2FkOworCitAZW5kCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucyAoUnVudGltZURvbWFpbikKKworKyAodm9pZClfcGFyc2VPYmplY3RJZDooTlNO
dW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisrICh2b2lkKV9wYXJz
ZUx1Y2t5TnVtYmVyczooTlNBcnJheS8qPE5TTnVtYmVyPiovICoqKW91dFZhbHVlIGZyb21QYXls
b2FkOihpZClwYXlsb2FkOworKyAodm9pZClfcGFyc2VCYWJ5TmFtZXM6KE5TQXJyYXkvKjxOU1N0
cmluZz4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3Bh
cnNlTmV3T2JqZWN0czooTlNBcnJheS8qPE5TTnVtYmVyPiovICoqKW91dFZhbHVlIGZyb21QYXls
b2FkOihpZClwYXlsb2FkOworKyAodm9pZClfcGFyc2VPbGRPYmplY3RzOihOU0FycmF5Lyo8TlNO
dW1iZXI+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisrICh2b2lkKV9w
YXJzZVN0b3BSZWFzb25zOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopb3V0VmFsdWUgZnJvbVBh
eWxvYWQ6KGlkKXBheWxvYWQ7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucyAoRGVidWdnZXJEb21haW4pCisKKysgKHZvaWQpX3BhcnNlQnJlYWtw
b2ludElkOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAorewor
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TTnVtYmVyIGNsYXNz
XSk7CisgICAgKm91dFZhbHVlID0gKE5TTnVtYmVyICopcGF5bG9hZDsKK30KKworKyAodm9pZClf
cGFyc2VSZWFzb246KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2Fk
Cit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNTdHJpbmcg
Y2xhc3NdKTsKKyAgICBPcHRpb25hbDxUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbj4gcmVzdWx0
ID0gSW5zcGVjdG9yOjpmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sRGVidWdnZXJSZWFz
b24+KHBheWxvYWQpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX0VOVU1fVkFMVUUocmVz
dWx0LCBAIlJlYXNvbiIpOworICAgICpvdXRWYWx1ZSA9IEAocmVzdWx0LnZhbHVlKCkpOworfQor
CitAZW5kCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChSdW50
aW1lRG9tYWluKQorCisrICh2b2lkKV9wYXJzZU9iamVjdElkOihOU051bWJlciAqKilvdXRWYWx1
ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFE
X1RZUEUocGF5bG9hZCwgW05TTnVtYmVyIGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gKE5TTnVt
YmVyICopcGF5bG9hZDsKK30KKworKyAodm9pZClfcGFyc2VMdWNreU51bWJlcnM6KE5TQXJyYXkv
KjxOU051bWJlcj4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TQXJyYXkvKjxOU051bWJl
cj4qLyBjbGFzc10pOworICAgICpvdXRWYWx1ZSA9IChOU0FycmF5Lyo8TlNOdW1iZXI+Ki8gKilw
YXlsb2FkOworfQorCisrICh2b2lkKV9wYXJzZUJhYnlOYW1lczooTlNBcnJheS8qPE5TU3RyaW5n
PiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNBcnJheS8qPE5TU3RyaW5nPiovIGNsYXNz
XSk7CisgICAgKm91dFZhbHVlID0gKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKXBheWxvYWQ7Cit9
CisKKysgKHZvaWQpX3BhcnNlTmV3T2JqZWN0czooTlNBcnJheS8qPE5TTnVtYmVyPiovICoqKW91
dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9CQURfVFlQRShwYXlsb2FkLCBbTlNBcnJheS8qPE5TTnVtYmVyPiovIGNsYXNzXSk7CisgICAg
Km91dFZhbHVlID0gKE5TQXJyYXkvKjxOU051bWJlcj4qLyAqKXBheWxvYWQ7Cit9CisKKysgKHZv
aWQpX3BhcnNlT2xkT2JqZWN0czooTlNBcnJheS8qPE5TTnVtYmVyPiovICoqKW91dFZhbHVlIGZy
b21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQ
RShwYXlsb2FkLCBbTlNBcnJheS8qPE5TTnVtYmVyPiovIGNsYXNzXSk7CisgICAgKm91dFZhbHVl
ID0gKE5TQXJyYXkvKjxOU051bWJlcj4qLyAqKXBheWxvYWQ7Cit9CisKKysgKHZvaWQpX3BhcnNl
U3RvcFJlYXNvbnM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9h
ZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9h
ZCwgW05TQXJyYXkvKjxOU1N0cmluZz4qLyBjbGFzc10pOworICAgICpvdXRWYWx1ZSA9IChOU0Fy
cmF5Lyo8TlNTdHJpbmc+Ki8gKilwYXlsb2FkOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbFR5cGVzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1k
ZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQ
cm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgor
I2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsK
KworCisKKworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC90eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9u
LWVudW0tdHlwZS5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hYjdhMzk4MzZhZDQ4N2U5ZDFjNzAz
NzQ2YzQxZjYwMGZmZGIyY2JmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tZW51
bS10eXBlLmpzb24tcmVzdWx0CkBAIC0wLDAgKzEsMTAzMiBAQAorIyMjIEJlZ2luIEZpbGU6IElu
c3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcy5pbgorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQorCisvLyBSdW50aW1lCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lz
dGVyRG9tYWluKCJSdW50aW1lIiwgbnVsbCk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51
bSgiUnVudGltZS5GYXJtQW5pbWFscyIsIHtQaWdzOiAiUGlncyIsIENvd3M6ICJDb3dzIiwgQ2F0
czogIkNhdHMiLCBIZW5zOiAiSGVucyJ9KTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVt
KCJSdW50aW1lLlR3b0xlZ2dlZEFuaW1hbHMiLCB7RHVja3M6ICJEdWNrcyIsIEhlbnM6ICJIZW5z
IiwgQ3Jvd3M6ICJDcm93cyIsIEZsYW1pbmdvczogIkZsYW1pbmdvcyJ9KTsKK0luc3BlY3RvckJh
Y2tlbmQuYWN0aXZhdGVEb21haW4oIlJ1bnRpbWUiLCBudWxsKTsKKyMjIyBFbmQgRmlsZTogSW5z
cGVjdG9yQmFja2VuZENvbW1hbmRzLmpzLmluCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJu
YXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorCituYW1l
c3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewor
cHVibGljOgorICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNw
YXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlz
cGF0Y2hlcik7IH0KKyAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBj
b25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Citwcml2YXRlOgorICAg
IFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKK307CisKKwor
CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVy
cy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1l
bnVtLXR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0eXBlZGVm
IFN0cmluZyBFcnJvclN0cmluZzsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMj
IEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRl
c3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0QmFj
a2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JG
cm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8
d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCisj
aWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjaW5jbHVkZSAiVGVz
dEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgorI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisK
K30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlz
cGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5o
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVt
LXR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPHd0
Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVz
cGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBGcm9udGVuZFJvdXRlcjsKKworfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKwor
IyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+CisjaW5jbHVkZSA8d3RmL0Fz
c2VydGlvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCituYW1lc3BhY2UgUHJv
dG9jb2wgeworCisKKworLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCituYW1lc3BhY2UgUnVudGlt
ZSB7CitlbnVtIGNsYXNzIEZhcm1BbmltYWxzOworZW51bSBjbGFzcyBUd29MZWdnZWRBbmltYWxz
OworfSAvLyBSdW50aW1lCisvLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCisKKworCisK
K25hbWVzcGFjZSBUZXN0SGVscGVycyB7CisKK1N0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShp
bnQgY29kZSk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRFbnVtQ29uc3RhbnRW
YWx1ZShUIGVudW1WYWx1ZSkKK3sKKyAgICByZXR1cm4gZ2V0RW51bUNvbnN0YW50VmFsdWUoc3Rh
dGljX2Nhc3Q8aW50PihlbnVtVmFsdWUpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBl
cnMKKworbmFtZXNwYWNlIFJ1bnRpbWUgeworCitlbnVtIGNsYXNzIEZhcm1BbmltYWxzIHsKKyAg
ICBQaWdzID0gMCwKKyAgICBDb3dzID0gMSwKKyAgICBDYXRzID0gMiwKKyAgICBIZW5zID0gMywK
K307IC8vIGVudW0gY2xhc3MgRmFybUFuaW1hbHMKKworZW51bSBjbGFzcyBUd29MZWdnZWRBbmlt
YWxzIHsKKyAgICBEdWNrcyA9IDQsCisgICAgSGVucyA9IDMsCisgICAgQ3Jvd3MgPSA1LAorICAg
IEZsYW1pbmdvcyA9IDYsCit9OyAvLyBlbnVtIGNsYXNzIFR3b0xlZ2dlZEFuaW1hbHMKKworfSAv
LyBSdW50aW1lCisKKworCituYW1lc3BhY2UgVGVzdEhlbHBlcnMgeworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBQcm90b2NvbEVudW1UeXBlPgorT3B0aW9uYWw8UHJvdG9jb2xFbnVtVHlwZT4gcGFyc2VF
bnVtVmFsdWVGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYpOworCisvLyBFbnVtcyBpbiB0aGUgJ1J1
bnRpbWUnIERvbWFpbgordGVtcGxhdGU8PgorT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6
UnVudGltZTo6RmFybUFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6
OlByb3RvY29sOjpSdW50aW1lOjpGYXJtQW5pbWFscz4oY29uc3QgU3RyaW5nJik7Cit0ZW1wbGF0
ZTw+CitPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUd29MZWdnZWRBbmlt
YWxzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGlt
ZTo6VHdvTGVnZ2VkQW5pbWFscz4oY29uc3QgU3RyaW5nJik7CisKK30gLy8gbmFtZXNwYWNlIFRl
c3RIZWxwZXJzCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0
IERlZmF1bHRIYXNoOworCisvLyBIYXNoIGRlY2xhcmF0aW9ucyBpbiB0aGUgJ1J1bnRpbWUnIERv
bWFpbgordGVtcGxhdGU8Pgorc3RydWN0IERlZmF1bHRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlJ1bnRpbWU6OkZhcm1BbmltYWxzPiB7CisgICAgdHlwZWRlZiBJbnRIYXNoPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzPiBIYXNoOworfTsKK3RlbXBsYXRlPD4KK3N0
cnVjdCBEZWZhdWx0SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUd29MZWdnZWRB
bmltYWxzPiB7CisgICAgdHlwZWRlZiBJbnRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRp
bWU6OlR3b0xlZ2dlZEFuaW1hbHM+IEhhc2g7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKyMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xPYmplY3RzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5
cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29s
T2JqZWN0cy5oIgorCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFByb3Rv
Y29sIHsKKworbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKKworc3RhdGljIGNvbnN0IGNoYXIqIGNv
bnN0IGVudW1fY29uc3RhbnRfdmFsdWVzW10gPSB7CisgICAgIlBpZ3MiLAorICAgICJDb3dzIiwK
KyAgICAiQ2F0cyIsCisgICAgIkhlbnMiLAorICAgICJEdWNrcyIsCisgICAgIkNyb3dzIiwKKyAg
ICAiRmxhbWluZ29zIiwKK307CisKK1N0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29k
ZSkgeworICAgIHJldHVybiBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb2RlXTsKK30KKworLy8gRW51
bXMgaW4gdGhlICdSdW50aW1lJyBEb21haW4KKwordGVtcGxhdGU8PgorT3B0aW9uYWw8SW5zcGVj
dG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0
cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpGYXJtQW5pbWFscz4oY29uc3QgU3Ry
aW5nJiBwcm90b2NvbFN0cmluZykKK3sKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50
VmFsdWVzW10gPSB7CisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGlt
ZTo6RmFybUFuaW1hbHM6OlBpZ3MsCisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2Nv
bDo6UnVudGltZTo6RmFybUFuaW1hbHM6OkNvd3MsCisgICAgICAgIChzaXplX3QpSW5zcGVjdG9y
OjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM6OkNhdHMsCisgICAgICAgIChzaXplX3Qp
SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM6OkhlbnMsCisgICAgfTsK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDQ7ICsraSkKKyAgICAgICAgaWYgKHByb3RvY29s
U3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKKyAgICAg
ICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHMp
Y29uc3RhbnRWYWx1ZXNbaV07CisKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCit0ZW1w
bGF0ZTw+CitPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUd29MZWdnZWRB
bmltYWxzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVu
dGltZTo6VHdvTGVnZ2VkQW5pbWFscz4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKK3sK
KyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7CisgICAgICAgIChz
aXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFsczo6RHVj
a3MsCisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHdvTGVn
Z2VkQW5pbWFsczo6SGVucywKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpS
dW50aW1lOjpUd29MZWdnZWRBbmltYWxzOjpDcm93cywKKyAgICAgICAgKHNpemVfdClJbnNwZWN0
b3I6OlByb3RvY29sOjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxzOjpGbGFtaW5nb3MsCisgICAg
fTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDQ7ICsraSkKKyAgICAgICAgaWYgKHByb3Rv
Y29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKKyAg
ICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2Vk
QW5pbWFscyljb25zdGFudFZhbHVlc1tpXTsKKworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90
b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xPYmplY3RzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERp
c3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xh
cmF0aW9uLWVudW0tdHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmRE
aXNwYXRjaGVycy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworCisKK25hbWVzcGFj
ZSBJbnNwZWN0b3IgeworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJU
ZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bEludGVybmFsLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisj
aW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK30g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tl
bmREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJh
dGlvbi5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlv
bi1lbnVtLXR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
KyNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KKworX19hdHRyaWJ1dGVfXygo
dmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3Vy
YXRpb24gOiBOU09iamVjdAorQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29u
ZmlndXJhdGlvbi5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9u
Lm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1l
bnVtLXR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNp
bXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKKworI2ltcG9ydCAiVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5o
IgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4K
KyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5o
PgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXJzLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9u
IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNv
bnRyb2xsZXIqIF9jb250cm9sbGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250
cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAg
ICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5p
bDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVy
OworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbc3VwZXIg
ZGVhbGxvY107Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZp
Z3VyYXRpb24ubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hl
cnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9u
LWVudW0tdHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBu
YW1lc3BhY2UgSW5zcGVjdG9yOworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnRE
aXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29u
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8Rm91bmRh
dGlvbi9Gb3VuZGF0aW9uLmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpT
T05PYmplY3QuaD4KKworCisKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3Rv
Y29sUnVudGltZUZhcm1BbmltYWxzKSB7CisgICAgVGVzdFByb3RvY29sUnVudGltZUZhcm1Bbmlt
YWxzUGlncywKKyAgICBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHNDb3dzLAorICAgIFRl
c3RQcm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFsc0NhdHMsCisgICAgVGVzdFByb3RvY29sUnVudGlt
ZUZhcm1BbmltYWxzSGVucywKK307CisKK3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQ
cm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzKSB7CisgICAgVGVzdFByb3RvY29sUnVudGlt
ZVR3b0xlZ2dlZEFuaW1hbHNEdWNrcywKKyAgICBUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2Vk
QW5pbWFsc0hlbnMsCisgICAgVGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHNDcm93
cywKKyAgICBUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFsc0ZsYW1pbmdvcywKK307
CisKKworCisKKworCisKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRD
b21wYXRpYmlsaXR5T2JqZWN0cy5oPgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCisK
KyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbiBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5o
IgorI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKKyNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8
d3RmL0pTT05WYWx1ZXMuaD4KKworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRl
cm5hbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10
eXBlLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0
ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5
Q29udmVyc2lvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3RlbXBsYXRlPHR5cGVu
YW1lIE9iakNFbnVtVHlwZT4KK09wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3Ry
aW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOworCitpbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJp
bmcoVGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzIHZhbHVlKQoreworICAgIHN3aXRjaCh2
YWx1ZSkgeworICAgIGNhc2UgVGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzUGlnczoKKyAg
ICAgICAgcmV0dXJuICJQaWdzIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sUnVudGltZUZhcm1B
bmltYWxzQ293czoKKyAgICAgICAgcmV0dXJuICJDb3dzIl9zOworICAgIGNhc2UgVGVzdFByb3Rv
Y29sUnVudGltZUZhcm1BbmltYWxzQ2F0czoKKyAgICAgICAgcmV0dXJuICJDYXRzIl9zOworICAg
IGNhc2UgVGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzSGVuczoKKyAgICAgICAgcmV0dXJu
ICJIZW5zIl9zOworICAgIH0KK30KKwordGVtcGxhdGU8PgoraW5saW5lIE9wdGlvbmFsPFRlc3RQ
cm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFscz4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09ICJQaWdzIikKKyAgICAgICAgcmV0dXJuIFRl
c3RQcm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFsc1BpZ3M7CisgICAgaWYgKHZhbHVlID09ICJDb3dz
IikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFsc0Nvd3M7Cisg
ICAgaWYgKHZhbHVlID09ICJDYXRzIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFJ1bnRp
bWVGYXJtQW5pbWFsc0NhdHM7CisgICAgaWYgKHZhbHVlID09ICJIZW5zIikKKyAgICAgICAgcmV0
dXJuIFRlc3RQcm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFsc0hlbnM7CisgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKK30KKworaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2Nv
bFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzIHZhbHVlKQoreworICAgIHN3aXRjaCh2YWx1ZSkgewor
ICAgIGNhc2UgVGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHNEdWNrczoKKyAgICAg
ICAgcmV0dXJuICJEdWNrcyJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdn
ZWRBbmltYWxzSGVuczoKKyAgICAgICAgcmV0dXJuICJIZW5zIl9zOworICAgIGNhc2UgVGVzdFBy
b3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHNDcm93czoKKyAgICAgICAgcmV0dXJuICJDcm93
cyJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzRmxhbWlu
Z29zOgorICAgICAgICByZXR1cm4gIkZsYW1pbmdvcyJfczsKKyAgICB9Cit9CisKK3RlbXBsYXRl
PD4KK2lubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFscz4g
ZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVl
ID09ICJEdWNrcyIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2Vk
QW5pbWFsc0R1Y2tzOworICAgIGlmICh2YWx1ZSA9PSAiSGVucyIpCisgICAgICAgIHJldHVybiBU
ZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFsc0hlbnM7CisgICAgaWYgKHZhbHVlID09
ICJDcm93cyIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5p
bWFsc0Nyb3dzOworICAgIGlmICh2YWx1ZSA9PSAiRmxhbWluZ29zIikKKyAgICAgICAgcmV0dXJu
IFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzRmxhbWluZ29zOworICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisKKyMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29s
VHlwZVBhcnNlci5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVj
dFByaXZhdGUuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGludGVyZmFjZSBU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFJ1bnRpbWVEb21haW4pCisKKysgKHZvaWQpX3Bh
cnNlRmFybUFuaW1hbHM6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXls
b2FkOworKyAodm9pZClfcGFyc2VUd29MZWdnZWRBbmltYWxzOihOU051bWJlciAqKilvdXRWYWx1
ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChSdW50aW1lRG9tYWluKQorCisrICh2b2lkKV9wYXJz
ZUZhcm1BbmltYWxzOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9h
ZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TU3RyaW5n
IGNsYXNzXSk7CisgICAgT3B0aW9uYWw8VGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzPiBy
ZXN1bHQgPSBJbnNwZWN0b3I6OmZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xSdW50aW1l
RmFybUFuaW1hbHM+KHBheWxvYWQpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX0VOVU1f
VkFMVUUocmVzdWx0LCBAIkZhcm1BbmltYWxzIik7CisgICAgKm91dFZhbHVlID0gQChyZXN1bHQu
dmFsdWUoKSk7Cit9CisKKysgKHZvaWQpX3BhcnNlVHdvTGVnZ2VkQW5pbWFsczooTlNOdW1iZXIg
Kiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJ
T05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBjbGFzc10pOworICAgIE9wdGlvbmFs
PFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzPiByZXN1bHQgPSBJbnNwZWN0b3I6
OmZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFscz4o
cGF5bG9hZCk7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfRU5VTV9WQUxVRShyZXN1bHQs
IEAiVHdvTGVnZ2VkQW5pbWFscyIpOworICAgICpvdXRWYWx1ZSA9IEAocmVzdWx0LnZhbHVlKCkp
OworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbiBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90
b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5o
IgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4K
KyNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgor
Cit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5q
c29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24tcmVzdWx0Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjAwMzE0ZjNmZWJhMjFiZjY3NGRlOGRhODAyNDFiNGZlNzQ2NDYxYzYKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uLXJlc3VsdApAQCAtMCww
ICsxLDIzOTcgQEAKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMu
aW4KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9i
amVjdC10eXBlLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisv
LyBEYXRhYmFzZQorSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiRGF0YWJhc2UiLCBu
dWxsKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJEYXRhYmFzZS5Nb3VzZUJ1dHRv
biIsIHtOb25lOiAiTm9uZSIsIExlZnQ6ICJMZWZ0IiwgTWlkZGxlOiAiTWlkZGxlIiwgUmlnaHQ6
ICJSaWdodCJ9KTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJEYXRhYmFzZS5PcHRp
b25hbFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5Iiwge0xUUjogIkxUUiIsIFJUTDogIlJU
TCJ9KTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJEYXRhYmFzZS5QYXJhbWV0ZXJC
dW5kbGVEaXJlY3Rpb25hbGl0eSIsIHtMVFI6ICJMVFIiLCBSVEw6ICJSVEwifSk7CitJbnNwZWN0
b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJEYXRhYmFzZSIsIG51bGwpOworIyMjIEVuZCBGaWxl
OiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMuaW4KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBl
cy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
Lmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4K
KworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNr
ZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZN
b3ZlKGRpc3BhdGNoZXIpOyB9CisgICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRj
aGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQorcHJpdmF0
ZToKKyAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Cit9
OworCisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJu
YXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlz
cGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFy
YXRpb24tb2JqZWN0LXR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Igewor
Cit0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4K
KyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyNp
bmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCisjZW5kaWYgLy8gRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKK25hbWVzcGFjZSBJbnNwZWN0
b3IgeworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVz
dEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERp
c3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xh
cmF0aW9uLW9iamVjdC10eXBlLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIK
KyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgRnJvbnRlbmRSb3V0ZXI7CisK
K30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNw
YXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVj
dC10eXBlLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKKwor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0
Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBl
Lmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4K
KyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwor
CisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKworCisvLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4K
K25hbWVzcGFjZSBEYXRhYmFzZSB7CitjbGFzcyBFcnJvcjsKK2NsYXNzIE9wdGlvbmFsUGFyYW1l
dGVyQnVuZGxlOworY2xhc3MgUGFyYW1ldGVyQnVuZGxlOworY2xhc3MgT2JqZWN0V2l0aFByb3Bl
cnR5TmFtZUNvbmZsaWN0czsKK2NsYXNzIER1bW15T2JqZWN0OworZW51bSBjbGFzcyBNb3VzZUJ1
dHRvbjsKK30gLy8gRGF0YWJhc2UKKworbmFtZXNwYWNlIFRlc3QgeworY2xhc3MgUGFyYW1ldGVy
QnVuZGxlOworfSAvLyBUZXN0CisvLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCisKKwor
Ly8gVHlwZWRlZnMuCituYW1lc3BhY2UgRGF0YWJhc2UgewordHlwZWRlZiBKU09OOjpBcnJheU9m
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gRXJyb3JMaXN0OworfSAvLyBE
YXRhYmFzZQorLy8gRW5kIG9mIHR5cGVkZWZzLgorCituYW1lc3BhY2UgVGVzdEhlbHBlcnMgewor
CitTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpOworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFsdWUpCit7CisgICAg
cmV0dXJuIGdldEVudW1Db25zdGFudFZhbHVlKHN0YXRpY19jYXN0PGludD4oZW51bVZhbHVlKSk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCisKK25hbWVzcGFjZSBEYXRhYmFzZSB7
CisKKy8qIERhdGFiYXNlIGVycm9yLiAqLworY2xhc3MgRXJyb3IgOiBwdWJsaWMgSlNPTjo6T2Jq
ZWN0QmFzZSB7CitwdWJsaWM6CisgICAgZW51bSB7CisgICAgICAgIE5vRmllbGRzU2V0ID0gMCwK
KyAgICAgICAgTWVzc2FnZVNldCA9IDEgPDwgMCwKKyAgICAgICAgQ29kZVNldCA9IDEgPDwgMSwK
KyAgICAgICAgQWxsRmllbGRzU2V0ID0gKE1lc3NhZ2VTZXQgfCBDb2RlU2V0KQorICAgIH07CisK
KyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CisgICAgY2xhc3MgQnVpbGRlciB7CisgICAgcHJpdmF0
ZToKKyAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7CisKKyAgICAgICAgdGVt
cGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUg
fCBTVEVQPio+KHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcihSZWY8LypFcnJv
ciovSlNPTjo6T2JqZWN0PiYmIG9iamVjdCkKKyAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92
ZShvYmplY3QpKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9
PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKKyAgICAg
ICAgfQorICAgICAgICBmcmllbmQgY2xhc3MgRXJyb3I7CisgICAgcHVibGljOgorCisgICAgICAg
IEJ1aWxkZXI8U1RBVEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIHZh
bHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTWVz
c2FnZVNldCksIHByb3BlcnR5X21lc3NhZ2VfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldFN0cmluZygibWVzc2FnZSJfcywgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxNZXNzYWdlU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxT
VEFURSB8IENvZGVTZXQ+JiBzZXRDb2RlKGludCB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENvZGVTZXQpLCBwcm9wZXJ0eV9jb2RlX2FscmVh
ZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2VyKCJjb2RlIl9zLCB2YWx1
ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvZGVTZXQ+KCk7CisgICAgICAgIH0K
KworICAgICAgICBSZWY8RXJyb3I+IHJlbGVhc2UoKQorICAgICAgICB7CisgICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkp
OworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEVycm9yKSA9PSBzaXplb2YoSlNP
Tjo6T2JqZWN0KSwgY2Fubm90X2Nhc3QpOworCisgICAgICAgICAgICBSZWY8SlNPTjo6T2JqZWN0
PiBqc29uUmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKKyAgICAgICAgICAgIGF1
dG8gcmVzdWx0ID0gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8RXJyb3I+Kj4oJmpzb25S
ZXN1bHQpKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICB9Owor
CisgICAgLyoKKyAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CisgICAgICogUmVmPEVycm9y
PiByZXN1bHQgPSBFcnJvcjo6Y3JlYXRlKCkKKyAgICAgKiAgICAgLnNldE1lc3NhZ2UoLi4uKQor
ICAgICAqICAgICAuc2V0Q29kZSguLi4pCisgICAgICogICAgIC5yZWxlYXNlKCk7CisgICAgICov
CisgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCisgICAgeworICAgICAg
ICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7Cisg
ICAgfQorfTsKKworLyogRW51bWVyYXRlcyBkaWZmZXJlbnQgbW91c2UgYnV0dG9ucyB0aGF0IGNh
biBiZSB1c2VkLiAqLworZW51bSBjbGFzcyBNb3VzZUJ1dHRvbiB7CisgICAgTm9uZSA9IDAsCisg
ICAgTGVmdCA9IDEsCisgICAgTWlkZGxlID0gMiwKKyAgICBSaWdodCA9IDMsCit9OyAvLyBlbnVt
IGNsYXNzIE1vdXNlQnV0dG9uCisKK2NsYXNzIE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlIDogcHVi
bGljIEpTT046Ok9iamVjdEJhc2UgeworcHVibGljOgorICAgIC8vIE5hbWVkIGFmdGVyIHByb3Bl
cnR5IG5hbWUgJ2RpcmVjdGlvbmFsaXR5JyB3aGlsZSBnZW5lcmF0aW5nIE9wdGlvbmFsUGFyYW1l
dGVyQnVuZGxlLgorICAgIGVudW0gY2xhc3MgRGlyZWN0aW9uYWxpdHkgeworICAgICAgICBMVFIg
PSA0LAorICAgICAgICBSVEwgPSA1LAorICAgIH07IC8vIGVudW0gY2xhc3MgRGlyZWN0aW9uYWxp
dHkKKyAgICBlbnVtIHsKKyAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAorICAgICAgICBBbGxGaWVs
ZHNTZXQgPSAwCisgICAgfTsKKworICAgIHRlbXBsYXRlPGludCBTVEFURT4KKyAgICBjbGFzcyBC
dWlsZGVyIHsKKyAgICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBtX3Jl
c3VsdDsKKworICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+
JiBjYXN0U3RhdGUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0
X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CisgICAgICAgIH0KKworICAgICAg
ICBCdWlsZGVyKFJlZjwvKk9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlKi9KU09OOjpPYmplY3Q+JiYg
b2JqZWN0KQorICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCisgICAgICAg
IHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWls
ZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAgICAgICB9CisgICAgICAgIGZyaWVu
ZCBjbGFzcyBPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTsKKyAgICBwdWJsaWM6CisKKyAgICAgICAg
UmVmPE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlPiByZWxlYXNlKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90
X3JlYWR5KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihPcHRpb25hbFBhcmFt
ZXRlckJ1bmRsZSkgPT0gc2l6ZW9mKEpTT046Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsKKworICAg
ICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4ganNvblJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VO
b25OdWxsKCk7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFdURk1vdmUoKnJlaW50ZXJwcmV0
X2Nhc3Q8UmVmPE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlPio+KCZqc29uUmVzdWx0KSk7CisgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgfTsKKworICAgIC8qCisgICAg
ICogU3ludGhldGljIGNvbnN0cnVjdG9yOgorICAgICAqIFJlZjxPcHRpb25hbFBhcmFtZXRlckJ1
bmRsZT4gcmVzdWx0ID0gT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU6OmNyZWF0ZSgpCisgICAgICog
ICAgIC5yZWxlYXNlKCk7CisgICAgICovCisgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+
IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKSk7CisgICAgfQorCisgICAgdm9pZCBzZXRDb2x1bW5OYW1lcyhS
ZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiB2YWx1ZSkKKyAgICB7CisgICAgICAgIEpTT046
Ok9iamVjdEJhc2U6OnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgV1RGTW92ZSh2YWx1ZSkpOwor
ICAgIH0KKworICAgIHZvaWQgc2V0QnV0dG9ucyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b24+PiB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIEpTT046Ok9iamVjdEJhc2U6OnNldEFycmF5KCJidXR0b25zIl9zLCBXVEZNb3ZlKHZhbHVl
KSk7CisgICAgfQorCisgICAgdm9pZCBzZXREaXJlY3Rpb25hbGl0eShEaXJlY3Rpb25hbGl0eSB2
YWx1ZSkKKyAgICB7CisgICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldFN0cmluZygiZGlyZWN0
aW9uYWxpdHkiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29u
c3RhbnRWYWx1ZSh2YWx1ZSkpOworICAgIH0KKworICAgIHZvaWQgc2V0Tm90ZXMoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldFN0cmluZygi
bm90ZXMiX3MsIHZhbHVlKTsKKyAgICB9CisKKyAgICB2b2lkIHNldFRpbWVzdGFtcChkb3VibGUg
dmFsdWUpCisgICAgeworICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXREb3VibGUoInRpbWVz
dGFtcCJfcywgdmFsdWUpOworICAgIH0KKworICAgIHZvaWQgc2V0VmFsdWVzKFJlZlB0cjxKU09O
OjpPYmplY3Q+IHZhbHVlKQorICAgIHsKKyAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0T2Jq
ZWN0KCJ2YWx1ZXMiX3MsIFdURk1vdmUodmFsdWUpKTsKKyAgICB9CisKKyAgICB2b2lkIHNldFBh
eWxvYWQoUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZSkKKyAgICB7CisgICAgICAgIEpTT046Ok9i
amVjdEJhc2U6OnNldFZhbHVlKCJwYXlsb2FkIl9zLCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgfQor
CisgICAgdm9pZCBzZXRFcnJvcihSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6
OkVycm9yPiB2YWx1ZSkKKyAgICB7CisgICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldE9iamVj
dCgiZXJyb3IiX3MsIFdURk1vdmUodmFsdWUpKTsKKyAgICB9CisKKyAgICB2b2lkIHNldEVycm9y
TGlzdChSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yTGlzdD4gdmFs
dWUpCisgICAgeworICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRBcnJheSgiZXJyb3JMaXN0
Il9zLCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgfQorfTsKKworY2xhc3MgUGFyYW1ldGVyQnVuZGxl
IDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgeworcHVibGljOgorICAgIC8vIE5hbWVkIGFmdGVy
IHByb3BlcnR5IG5hbWUgJ2RpcmVjdGlvbmFsaXR5JyB3aGlsZSBnZW5lcmF0aW5nIFBhcmFtZXRl
ckJ1bmRsZS4KKyAgICBlbnVtIGNsYXNzIERpcmVjdGlvbmFsaXR5IHsKKyAgICAgICAgTFRSID0g
NCwKKyAgICAgICAgUlRMID0gNSwKKyAgICB9OyAvLyBlbnVtIGNsYXNzIERpcmVjdGlvbmFsaXR5
CisgICAgZW51bSB7CisgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKKyAgICAgICAgQ29sdW1uTmFt
ZXNTZXQgPSAxIDw8IDAsCisgICAgICAgIEJ1dHRvbnNTZXQgPSAxIDw8IDEsCisgICAgICAgIERp
cmVjdGlvbmFsaXR5U2V0ID0gMSA8PCAyLAorICAgICAgICBOb3Rlc1NldCA9IDEgPDwgMywKKyAg
ICAgICAgVGltZXN0YW1wU2V0ID0gMSA8PCA0LAorICAgICAgICBWYWx1ZXNTZXQgPSAxIDw8IDUs
CisgICAgICAgIFBheWxvYWRTZXQgPSAxIDw8IDYsCisgICAgICAgIEVycm9yU2V0ID0gMSA8PCA3
LAorICAgICAgICBFcnJvckxpc3RTZXQgPSAxIDw8IDgsCisgICAgICAgIEFsbEZpZWxkc1NldCA9
IChDb2x1bW5OYW1lc1NldCB8IEJ1dHRvbnNTZXQgfCBEaXJlY3Rpb25hbGl0eVNldCB8IE5vdGVz
U2V0IHwgVGltZXN0YW1wU2V0IHwgVmFsdWVzU2V0IHwgUGF5bG9hZFNldCB8IEVycm9yU2V0IHwg
RXJyb3JMaXN0U2V0KQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CisgICAgY2xh
c3MgQnVpbGRlciB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4g
bV9yZXN1bHQ7CisKKyAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBT
VEVQPiYgY2FzdFN0YXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICpyZWludGVy
cHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOworICAgICAgICB9CisKKyAg
ICAgICAgQnVpbGRlcihSZWY8LypQYXJhbWV0ZXJCdW5kbGUqL0pTT046Ok9iamVjdD4mJiBvYmpl
Y3QpCisgICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKKyAgICAgICAgewor
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJf
Y3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CisgICAgICAgIH0KKyAgICAgICAgZnJpZW5kIGNs
YXNzIFBhcmFtZXRlckJ1bmRsZTsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IENvbHVtbk5hbWVzU2V0PiYgc2V0Q29sdW1uTmFtZXMoUmVmUHRyPEpTT046OkFycmF5T2Y8
U3RyaW5nPj4gdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBDb2x1bW5OYW1lc1NldCksIHByb3BlcnR5X2NvbHVtbk5hbWVzX2FscmVhZHlfc2V0
KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIHZhbHVl
KTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29sdW1uTmFtZXNTZXQ+KCk7CisgICAg
ICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQnV0dG9uc1NldD4mIHNldEJ1dHRvbnMo
UmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNl
QnV0dG9uPj4gdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBCdXR0b25zU2V0KSwgcHJvcGVydHlfYnV0dG9uc19hbHJlYWR5X3NldCk7CisgICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoImJ1dHRvbnMiX3MsIHZhbHVlKTsKKyAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8QnV0dG9uc1NldD4oKTsKKyAgICAgICAgfQorCisgICAgICAg
IEJ1aWxkZXI8U1RBVEUgfCBEaXJlY3Rpb25hbGl0eVNldD4mIHNldERpcmVjdGlvbmFsaXR5KERp
cmVjdGlvbmFsaXR5IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgRGlyZWN0aW9uYWxpdHlTZXQpLCBwcm9wZXJ0eV9kaXJlY3Rpb25hbGl0eV9h
bHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJkaXJlY3Rpb25h
bGl0eSJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFu
dFZhbHVlKHZhbHVlKSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPERpcmVjdGlvbmFs
aXR5U2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IE5vdGVzU2V0
PiYgc2V0Tm90ZXMoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIE5vdGVzU2V0KSwgcHJvcGVydHlfbm90ZXNfYWxyZWFk
eV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibm90ZXMiX3MsIHZhbHVl
KTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Tm90ZXNTZXQ+KCk7CisgICAgICAgIH0K
KworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVGltZXN0YW1wU2V0PiYgc2V0VGltZXN0YW1wKGRv
dWJsZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIFRpbWVzdGFtcFNldCksIHByb3BlcnR5X3RpbWVzdGFtcF9hbHJlYWR5X3NldCk7CisgICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIHZhbHVlKTsKKyAgICAg
ICAgICAgIHJldHVybiBjYXN0U3RhdGU8VGltZXN0YW1wU2V0PigpOworICAgICAgICB9CisKKyAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IFZhbHVlc1NldD4mIHNldFZhbHVlcyhSZWZQdHI8SlNPTjo6
T2JqZWN0PiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIFZhbHVlc1NldCksIHByb3BlcnR5X3ZhbHVlc19hbHJlYWR5X3NldCk7CisgICAgICAg
ICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIHZhbHVlKTsKKyAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8VmFsdWVzU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVp
bGRlcjxTVEFURSB8IFBheWxvYWRTZXQ+JiBzZXRQYXlsb2FkKFJlZlB0cjxKU09OOjpWYWx1ZT4g
dmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBQ
YXlsb2FkU2V0KSwgcHJvcGVydHlfcGF5bG9hZF9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVy
biBjYXN0U3RhdGU8UGF5bG9hZFNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBFcnJvclNldD4mIHNldEVycm9yKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpE
YXRhYmFzZTo6RXJyb3I+IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgRXJyb3JTZXQpLCBwcm9wZXJ0eV9lcnJvcl9hbHJlYWR5X3NldCk7Cisg
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJlcnJvciJfcywgdmFsdWUpOworICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxFcnJvclNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAg
IEJ1aWxkZXI8U1RBVEUgfCBFcnJvckxpc3RTZXQ+JiBzZXRFcnJvckxpc3QoUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvckxpc3Q+IHZhbHVlKQorICAgICAgICB7Cisg
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRXJyb3JMaXN0U2V0KSwgcHJvcGVy
dHlfZXJyb3JMaXN0X2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJh
eSgiZXJyb3JMaXN0Il9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEVy
cm9yTGlzdFNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIFJlZjxQYXJhbWV0ZXJCdW5kbGU+
IHJlbGVhc2UoKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9
PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOworICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoc2l6ZW9mKFBhcmFtZXRlckJ1bmRsZSkgPT0gc2l6ZW9mKEpTT046Ok9iamVjdCks
IGNhbm5vdF9jYXN0KTsKKworICAgICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4ganNvblJlc3Vs
dCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9
IFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPFBhcmFtZXRlckJ1bmRsZT4qPigmanNvblJl
c3VsdCkpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgIH07CisK
KyAgICAvKgorICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKKyAgICAgKiBSZWY8UGFyYW1l
dGVyQnVuZGxlPiByZXN1bHQgPSBQYXJhbWV0ZXJCdW5kbGU6OmNyZWF0ZSgpCisgICAgICogICAg
IC5zZXRDb2x1bW5OYW1lcyguLi4pCisgICAgICogICAgIC5zZXRCdXR0b25zKC4uLikKKyAgICAg
KiAgICAgLnNldERpcmVjdGlvbmFsaXR5KC4uLikKKyAgICAgKiAgICAgLnNldE5vdGVzKC4uLikK
KyAgICAgKiAgICAgLnNldFRpbWVzdGFtcCguLi4pCisgICAgICogICAgIC5zZXRWYWx1ZXMoLi4u
KQorICAgICAqICAgICAuc2V0UGF5bG9hZCguLi4pCisgICAgICogICAgIC5zZXRFcnJvciguLi4p
CisgICAgICogICAgIC5zZXRFcnJvckxpc3QoLi4uKQorICAgICAqICAgICAucmVsZWFzZSgpOwor
ICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRl
KCkpOworICAgIH0KK307CisKKy8qIENvbmZsaWN0ZWQgbmFtZXMgbWF5IGNhdXNlIGdlbmVyYXRl
ZCBnZXR0ZXJzL3NldHRlcnMgdG8gY2xhc2ggd2l0aCBidWlsdC1pbiBJbnNwZWN0b3JPYmplY3Qg
bWV0aG9kcy4gKi8KK2NsYXNzIE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHMgOiBwdWJs
aWMgSlNPTjo6T2JqZWN0QmFzZSB7CitwdWJsaWM6CisgICAgZW51bSB7CisgICAgICAgIE5vRmll
bGRzU2V0ID0gMCwKKyAgICAgICAgSW50ZWdlclNldCA9IDEgPDwgMCwKKyAgICAgICAgQXJyYXlT
ZXQgPSAxIDw8IDEsCisgICAgICAgIFN0cmluZ1NldCA9IDEgPDwgMiwKKyAgICAgICAgVmFsdWVT
ZXQgPSAxIDw8IDMsCisgICAgICAgIE9iamVjdFNldCA9IDEgPDwgNCwKKyAgICAgICAgQWxsRmll
bGRzU2V0ID0gKEludGVnZXJTZXQgfCBBcnJheVNldCB8IFN0cmluZ1NldCB8IFZhbHVlU2V0IHwg
T2JqZWN0U2V0KQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CisgICAgY2xhc3Mg
QnVpbGRlciB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbV9y
ZXN1bHQ7CisKKyAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQ
PiYgY2FzdFN0YXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJl
dF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOworICAgICAgICB9CisKKyAgICAg
ICAgQnVpbGRlcihSZWY8LypPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzKi9KU09OOjpP
YmplY3Q+JiYgb2JqZWN0KQorICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkp
CisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRz
U2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAgICAgICB9CisgICAg
ICAgIGZyaWVuZCBjbGFzcyBPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzOworICAgIHB1
YmxpYzoKKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgSW50ZWdlclNldD4mIHNldEludGVnZXIo
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIEludGVnZXJTZXQpLCBwcm9wZXJ0eV9pbnRlZ2VyX2FscmVhZHlfc2V0KTsK
KyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImludGVnZXIiX3MsIHZhbHVlKTsKKyAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8SW50ZWdlclNldD4oKTsKKyAgICAgICAgfQorCisg
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBBcnJheVNldD4mIHNldEFycmF5KGNvbnN0IFN0cmluZyYg
dmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBB
cnJheVNldCksIHByb3BlcnR5X2FycmF5X2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXRTdHJpbmcoImFycmF5Il9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2Fz
dFN0YXRlPEFycmF5U2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8
IFN0cmluZ1NldD4mIHNldFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAgICB7Cisg
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU3RyaW5nU2V0KSwgcHJvcGVydHlf
c3RyaW5nX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInN0
cmluZyJfcywgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTdHJpbmdTZXQ+
KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVmFsdWVTZXQ+JiBzZXRW
YWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxF
X0FTU0VSVCghKFNUQVRFICYgVmFsdWVTZXQpLCBwcm9wZXJ0eV92YWx1ZV9hbHJlYWR5X3NldCk7
CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ2YWx1ZSJfcywgdmFsdWUpOworICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxWYWx1ZVNldD4oKTsKKyAgICAgICAgfQorCisgICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBPYmplY3RTZXQ+JiBzZXRPYmplY3QoY29uc3QgU3RyaW5nJiB2
YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE9i
amVjdFNldCksIHByb3BlcnR5X29iamVjdF9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0U3RyaW5nKCJvYmplY3QiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8T2JqZWN0U2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgUmVmPE9iamVjdFdp
dGhQcm9wZXJ0eU5hbWVDb25mbGljdHM+IHJlbGVhc2UoKQorICAgICAgICB7CisgICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVh
ZHkpOworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKE9iamVjdFdpdGhQcm9wZXJ0
eU5hbWVDb25mbGljdHMpID09IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7CisK
KyAgICAgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25SZXN1bHQgPSBtX3Jlc3VsdC5yZWxl
YXNlTm9uTnVsbCgpOworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBXVEZNb3ZlKCpyZWludGVy
cHJldF9jYXN0PFJlZjxPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzPio+KCZqc29uUmVz
dWx0KSk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgfTsKKwor
ICAgIC8qCisgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgorICAgICAqIFJlZjxPYmplY3RX
aXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzPiByZXN1bHQgPSBPYmplY3RXaXRoUHJvcGVydHlOYW1l
Q29uZmxpY3RzOjpjcmVhdGUoKQorICAgICAqICAgICAuc2V0SW50ZWdlciguLi4pCisgICAgICog
ICAgIC5zZXRBcnJheSguLi4pCisgICAgICogICAgIC5zZXRTdHJpbmcoLi4uKQorICAgICAqICAg
ICAuc2V0VmFsdWUoLi4uKQorICAgICAqICAgICAuc2V0T2JqZWN0KC4uLikKKyAgICAgKiAgICAg
LnJlbGVhc2UoKTsKKyAgICAgKi8KKyAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3Jl
YXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpKTsKKyAgICB9Cit9OworCit9IC8vIERhdGFiYXNlCisKK25hbWVzcGFj
ZSBUZXN0IHsKKworY2xhc3MgUGFyYW1ldGVyQnVuZGxlIDogcHVibGljIEpTT046Ok9iamVjdEJh
c2UgeworcHVibGljOgorICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ2RpcmVjdGlv
bmFsaXR5JyB3aGlsZSBnZW5lcmF0aW5nIFBhcmFtZXRlckJ1bmRsZS4KKyAgICBlbnVtIGNsYXNz
IERpcmVjdGlvbmFsaXR5IHsKKyAgICAgICAgTFRSID0gNCwKKyAgICAgICAgUlRMID0gNSwKKyAg
ICB9OyAvLyBlbnVtIGNsYXNzIERpcmVjdGlvbmFsaXR5CisgICAgZW51bSB7CisgICAgICAgIE5v
RmllbGRzU2V0ID0gMCwKKyAgICAgICAgRGlyZWN0aW9uYWxpdHlTZXQgPSAxIDw8IDAsCisgICAg
ICAgIEJ1dHRvbnNTZXQgPSAxIDw8IDEsCisgICAgICAgIENvbHVtbk5hbWVzU2V0ID0gMSA8PCAy
LAorICAgICAgICBOb3Rlc1NldCA9IDEgPDwgMywKKyAgICAgICAgVGltZXN0YW1wU2V0ID0gMSA8
PCA0LAorICAgICAgICBWYWx1ZXNTZXQgPSAxIDw8IDUsCisgICAgICAgIFBheWxvYWRTZXQgPSAx
IDw8IDYsCisgICAgICAgIEVycm9yU2V0ID0gMSA8PCA3LAorICAgICAgICBBbGxGaWVsZHNTZXQg
PSAoRGlyZWN0aW9uYWxpdHlTZXQgfCBCdXR0b25zU2V0IHwgQ29sdW1uTmFtZXNTZXQgfCBOb3Rl
c1NldCB8IFRpbWVzdGFtcFNldCB8IFZhbHVlc1NldCB8IFBheWxvYWRTZXQgfCBFcnJvclNldCkK
KyAgICB9OworCisgICAgdGVtcGxhdGU8aW50IFNUQVRFPgorICAgIGNsYXNzIEJ1aWxkZXIgewor
ICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVzdWx0OworCisg
ICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0
ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWls
ZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXIo
UmVmPC8qUGFyYW1ldGVyQnVuZGxlKi9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQorICAgICAgICAg
ICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9u
X2luaXRfc3RhdGUpOworICAgICAgICB9CisgICAgICAgIGZyaWVuZCBjbGFzcyBQYXJhbWV0ZXJC
dW5kbGU7CisgICAgcHVibGljOgorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBEaXJlY3Rpb25h
bGl0eVNldD4mIHNldERpcmVjdGlvbmFsaXR5KERpcmVjdGlvbmFsaXR5IHZhbHVlKQorICAgICAg
ICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRGlyZWN0aW9uYWxpdHlT
ZXQpLCBwcm9wZXJ0eV9kaXJlY3Rpb25hbGl0eV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0U3RyaW5nKCJkaXJlY3Rpb25hbGl0eSJfcywgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKHZhbHVlKSk7CisgICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPERpcmVjdGlvbmFsaXR5U2V0PigpOworICAgICAgICB9CisKKyAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IEJ1dHRvbnNTZXQ+JiBzZXRCdXR0b25zKFJlZlB0cjxKU09O
OjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4+IHZh
bHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQnV0
dG9uc1NldCksIHByb3BlcnR5X2J1dHRvbnNfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldEFycmF5KCJidXR0b25zIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPEJ1dHRvbnNTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgQ29sdW1uTmFtZXNTZXQ+JiBzZXRDb2x1bW5OYW1lcyhSZWZQdHI8SlNPTjo6QXJyYXlP
ZjxTdHJpbmc+PiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
IShTVEFURSAmIENvbHVtbk5hbWVzU2V0KSwgcHJvcGVydHlfY29sdW1uTmFtZXNfYWxyZWFkeV9z
ZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgdmFs
dWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb2x1bW5OYW1lc1NldD4oKTsKKyAg
ICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBOb3Rlc1NldD4mIHNldE5vdGVzKGNv
bnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBOb3Rlc1NldCksIHByb3BlcnR5X25vdGVzX2FscmVhZHlfc2V0KTsKKyAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCB2YWx1ZSk7CisgICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPE5vdGVzU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVp
bGRlcjxTVEFURSB8IFRpbWVzdGFtcFNldD4mIHNldFRpbWVzdGFtcChkb3VibGUgdmFsdWUpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUaW1lc3RhbXBT
ZXQpLCBwcm9wZXJ0eV90aW1lc3RhbXBfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1
bHQtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPFRpbWVzdGFtcFNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBWYWx1ZXNTZXQ+JiBzZXRWYWx1ZXMoUmVmUHRyPEpTT046Ok9iamVjdD4gdmFsdWUp
CisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBWYWx1ZXNT
ZXQpLCBwcm9wZXJ0eV92YWx1ZXNfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQt
PnNldE9iamVjdCgidmFsdWVzIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0
YXRlPFZhbHVlc1NldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBQ
YXlsb2FkU2V0PiYgc2V0UGF5bG9hZChSZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVlKQorICAgICAg
ICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgUGF5bG9hZFNldCksIHBy
b3BlcnR5X3BheWxvYWRfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFZh
bHVlKCJwYXlsb2FkIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFBh
eWxvYWRTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRXJyb3JT
ZXQ+JiBzZXRFcnJvcihSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9y
PiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IEVycm9yU2V0KSwgcHJvcGVydHlfZXJyb3JfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldE9iamVjdCgiZXJyb3IiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8RXJyb3JTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBSZWY8UGFyYW1ldGVy
QnVuZGxlPiByZWxlYXNlKCkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
U1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKHNpemVvZihQYXJhbWV0ZXJCdW5kbGUpID09IHNpemVvZihKU09OOjpP
YmplY3QpLCBjYW5ub3RfY2FzdCk7CisKKyAgICAgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IGpz
b25SZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOworICAgICAgICAgICAgYXV0byBy
ZXN1bHQgPSBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxQYXJhbWV0ZXJCdW5kbGU+Kj4o
Jmpzb25SZXN1bHQpKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAg
ICB9OworCisgICAgLyoKKyAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CisgICAgICogUmVm
PFBhcmFtZXRlckJ1bmRsZT4gcmVzdWx0ID0gUGFyYW1ldGVyQnVuZGxlOjpjcmVhdGUoKQorICAg
ICAqICAgICAuc2V0RGlyZWN0aW9uYWxpdHkoLi4uKQorICAgICAqICAgICAuc2V0QnV0dG9ucygu
Li4pCisgICAgICogICAgIC5zZXRDb2x1bW5OYW1lcyguLi4pCisgICAgICogICAgIC5zZXROb3Rl
cyguLi4pCisgICAgICogICAgIC5zZXRUaW1lc3RhbXAoLi4uKQorICAgICAqICAgICAuc2V0VmFs
dWVzKC4uLikKKyAgICAgKiAgICAgLnNldFBheWxvYWQoLi4uKQorICAgICAqICAgICAuc2V0RXJy
b3IoLi4uKQorICAgICAqICAgICAucmVsZWFzZSgpOworICAgICAqLworICAgIHN0YXRpYyBCdWls
ZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8
Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOworICAgIH0KK307CisKK30gLy8g
VGVzdAorCisKKworbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKKwordGVtcGxhdGU8dHlwZW5hbWUg
UHJvdG9jb2xFbnVtVHlwZT4KK09wdGlvbmFsPFByb3RvY29sRW51bVR5cGU+IHBhcnNlRW51bVZh
bHVlRnJvbVN0cmluZyhjb25zdCBTdHJpbmcmKTsKKworLy8gRW51bXMgaW4gdGhlICdEYXRhYmFz
ZScgRG9tYWluCit0ZW1wbGF0ZTw+CitPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6TW91c2VCdXR0b24+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlBy
b3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b24+KGNvbnN0IFN0cmluZyYpOwordGVtcGxhdGU8
PgorT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok9wdGlvbmFsUGFyYW1l
dGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0
aW9uYWxpdHk+KGNvbnN0IFN0cmluZyYpOwordGVtcGxhdGU8PgorT3B0aW9uYWw8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RGF0YWJhc2U6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+IHBh
cnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UGFy
YW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4oY29uc3QgU3RyaW5nJik7CisKKy8vIEVudW1z
IGluIHRoZSAnVGVzdCcgRG9tYWluCit0ZW1wbGF0ZTw+CitPcHRpb25hbDxJbnNwZWN0b3I6OlBy
b3RvY29sOjpUZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5PiBwYXJzZUVudW1W
YWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UGFyYW1ldGVyQnVuZGxl
OjpEaXJlY3Rpb25hbGl0eT4oY29uc3QgU3RyaW5nJik7CisKK30gLy8gbmFtZXNwYWNlIFRlc3RI
ZWxwZXJzCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERl
ZmF1bHRIYXNoOworCisvLyBIYXNoIGRlY2xhcmF0aW9ucyBpbiB0aGUgJ0RhdGFiYXNlJyBEb21h
aW4KK3RlbXBsYXRlPD4KK3N0cnVjdCBEZWZhdWx0SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpE
YXRhYmFzZTo6TW91c2VCdXR0b24+IHsKKyAgICB0eXBlZGVmIEludEhhc2g8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPiBIYXNoOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV1RGCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorCisjIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
VGVzdFByb3RvY29sT2JqZWN0cy5oIgorCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFt
ZXNwYWNlIFByb3RvY29sIHsKKworbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKKworc3RhdGljIGNv
bnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFsdWVzW10gPSB7CisgICAgIk5vbmUiLAor
ICAgICJMZWZ0IiwKKyAgICAiTWlkZGxlIiwKKyAgICAiUmlnaHQiLAorICAgICJMVFIiLAorICAg
ICJSVEwiLAorfTsKKworU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7Cisg
ICAgcmV0dXJuIGVudW1fY29uc3RhbnRfdmFsdWVzW2NvZGVdOworfQorCisvLyBFbnVtcyBpbiB0
aGUgJ0RhdGFiYXNlJyBEb21haW4KKwordGVtcGxhdGU8PgorT3B0aW9uYWw8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPihjb25zdCBTdHJpbmcm
IHByb3RvY29sU3RyaW5nKQoreworICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3RhbnRWYWx1
ZXNbXSA9IHsKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6
TW91c2VCdXR0b246Ok5vbmUsCisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6Ok1vdXNlQnV0dG9uOjpMZWZ0LAorICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbjo6TWlkZGxlLAorICAgICAgICAoc2l6ZV90
KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbjo6UmlnaHQsCisgICAg
fTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDQ7ICsraSkKKyAgICAgICAgaWYgKHByb3Rv
Y29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKKyAg
ICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0
dG9uKWNvbnN0YW50VmFsdWVzW2ldOworCisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKwor
dGVtcGxhdGU8PgorT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok9wdGlv
bmFsUGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4gcGFyc2VFbnVtVmFsdWVGcm9tU3Ry
aW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpPcHRpb25hbFBhcmFtZXRlckJ1bmRs
ZTo6RGlyZWN0aW9uYWxpdHk+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCit7CisgICAg
c3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0geworICAgICAgICAoc2l6ZV90
KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTo6
RGlyZWN0aW9uYWxpdHk6OkxUUiwKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29s
OjpEYXRhYmFzZTo6T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5OjpSVEws
CisgICAgfTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDI7ICsraSkKKyAgICAgICAgaWYg
KHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ld
XSkKKyAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok9w
dGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eSljb25zdGFudFZhbHVlc1tpXTsK
KworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK3RlbXBsYXRlPD4KK09wdGlvbmFsPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFs
aXR5PiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+KGNvbnN0IFN0cmluZyYgcHJvdG9j
b2xTdHJpbmcpCit7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0g
eworICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQYXJhbWV0
ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5OjpMVFIsCisgICAgICAgIChzaXplX3QpSW5zcGVjdG9y
OjpQcm90b2NvbDo6RGF0YWJhc2U6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk6OlJU
TCwKKyAgICB9OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMjsgKytpKQorICAgICAgICBp
ZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNb
aV1dKQorICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6
UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eSljb25zdGFudFZhbHVlc1tpXTsKKworICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKKy8vIEVudW1zIGluIHRoZSAnVGVzdCcgRG9tYWlu
CisKK3RlbXBsYXRlPD4KK09wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlBhcmFt
ZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNw
ZWN0b3I6OlByb3RvY29sOjpUZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5Pihj
b25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQoreworICAgIHN0YXRpYyBjb25zdCBzaXplX3Qg
Y29uc3RhbnRWYWx1ZXNbXSA9IHsKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29s
OjpUZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5OjpMVFIsCisgICAgICAgIChz
aXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rp
b25hbGl0eTo6UlRMLAorICAgIH07CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAyOyArK2kp
CisgICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25z
dGFudFZhbHVlc1tpXV0pCisgICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlRlc3Q6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHkpY29uc3RhbnRWYWx1ZXNbaV07
CisKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0SGVs
cGVycworCisKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2luY2x1ZGUg
PHd0Zi9SZXRhaW5QdHIuaD4KKworCisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKK30gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmRE
aXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0
Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0
aW9uLW9iamVjdC10eXBlLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNw
YXRjaGVycy5oIgorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbmNsdWRl
ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVl
cy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisKKyMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxXZWJJbnNwZWN0
b3IvVGVzdFByb3RvY29sLmg+CisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0
IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKK0Bl
bmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorCisjIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbiBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24uaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNp
bXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorI2ltcG9ydCA8SmF2YVNj
cmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKwordXNpbmcg
bmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZp
Z3VyYXRpb24KK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9s
bGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJs
ZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGlu
aXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29u
dHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVybiBzZWxm
OworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKK0Bl
bmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJv
dG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMu
aCIKKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0
b3I7CisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisK
KyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbiBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlv
bi5oPgorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+CisK
KworQGNsYXNzIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I7CitAY2xhc3MgVGVzdFByb3RvY29s
RGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTsKK0BjbGFzcyBUZXN0UHJvdG9jb2xEYXRh
YmFzZVBhcmFtZXRlckJ1bmRsZTsKK0BjbGFzcyBUZXN0UHJvdG9jb2xEYXRhYmFzZU9iamVjdFdp
dGhQcm9wZXJ0eU5hbWVDb25mbGljdHM7CitAY2xhc3MgVGVzdFByb3RvY29sRGF0YWJhc2VEdW1t
eU9iamVjdDsKK0BjbGFzcyBUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlOworCit0eXBl
ZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9uKSB7
CisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VNb3VzZUJ1dHRvbk5vbmUsCisgICAgVGVzdFByb3Rv
Y29sRGF0YWJhc2VNb3VzZUJ1dHRvbkxlZnQsCisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VNb3Vz
ZUJ1dHRvbk1pZGRsZSwKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9uUmlnaHQs
Cit9OworCit0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xEYXRhYmFzZU9w
dGlvbmFsUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHkpIHsKKyAgICBUZXN0UHJvdG9jb2xE
YXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHlMVFIsCisgICAgVGVz
dFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5UlRM
LAorfTsKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGF0YWJhc2VQ
YXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSkgeworICAgIFRlc3RQcm90b2NvbERhdGFiYXNl
UGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHlMVFIsCisgICAgVGVzdFByb3RvY29sRGF0YWJh
c2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eVJUTCwKK307Cit0eXBlZGVmIE5TX0VOVU0o
TlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHkp
IHsKKyAgICBUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHlMVFIs
CisgICAgVGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5UlRMLAor
fTsKKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNl
IFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgOiBSV0lQcm90b2NvbEpTT05PYmplY3QKKy0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4g
KilwYXlsb2FkOworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVBy
b3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhN
ZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZTooaW50KWNvZGU7CisvKiByZXF1aXJlZCAq
LyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKm1lc3NhZ2U7CisvKiByZXF1
aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQgY29kZTsKK0BlbmQKKwor
X19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQ
cm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUgOiBSV0lQcm90b2NvbEpTT05P
YmplY3QKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0
cmluZyAqLCBpZD4gKilwYXlsb2FkOworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xP
YmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7CisvKiBvcHRpb25hbCAq
LyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNBcnJheS8qPE5TU3RyaW5nPiovICpjb2x1
bW5OYW1lczsKKy8qIG9wdGlvbmFsICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU0Fy
cmF5Lyo8TlNTdHJpbmc+Ki8gKmJ1dHRvbnM7CisvKiBvcHRpb25hbCAqLyBAcHJvcGVydHkgKG5v
bmF0b21pYywgYXNzaWduKSBUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVu
ZGxlRGlyZWN0aW9uYWxpdHkgZGlyZWN0aW9uYWxpdHk7CisvKiBvcHRpb25hbCAqLyBAcHJvcGVy
dHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKm5vdGVzOworLyogb3B0aW9uYWwgKi8gQHBy
b3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgZG91YmxlIHRpbWVzdGFtcDsKKy8qIG9wdGlvbmFs
ICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIFJXSVByb3RvY29sSlNPTk9iamVjdCAq
dmFsdWVzOworLyogb3B0aW9uYWwgKi8gQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkOworLyogb3B0aW9uYWwgKi8gQHByb3BlcnR5IChu
b25hdG9taWMsIHJldGFpbikgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqZXJyb3I7CisvKiBv
cHRpb25hbCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNBcnJheS8qPFRlc3RQcm90
b2NvbERhdGFiYXNlRXJyb3I+Ki8gKmVycm9yTGlzdDsKK0BlbmQKKworX19hdHRyaWJ1dGVfXygo
dmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbERhdGFiYXNl
UGFyYW1ldGVyQnVuZGxlIDogUldJUHJvdG9jb2xKU09OT2JqZWN0CistIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsK
Ky0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05P
YmplY3QgKilqc29uT2JqZWN0OworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29sdW1uTmFtZXM6
KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWNvbHVtbk5hbWVzIGJ1dHRvbnM6KE5TQXJyYXkvKjxO
U1N0cmluZz4qLyAqKWJ1dHRvbnMgZGlyZWN0aW9uYWxpdHk6KFRlc3RQcm90b2NvbERhdGFiYXNl
UGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHkpZGlyZWN0aW9uYWxpdHkgbm90ZXM6KE5TU3Ry
aW5nICopbm90ZXMgdGltZXN0YW1wOihkb3VibGUpdGltZXN0YW1wIHZhbHVlczooUldJUHJvdG9j
b2xKU09OT2JqZWN0ICopdmFsdWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBh
eWxvYWQgZXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKillcnJvciBlcnJvckxpc3Q6
KE5TQXJyYXkvKjxUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yPiovICopZXJyb3JMaXN0OworLyog
cmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TQXJyYXkvKjxOU1N0cmlu
Zz4qLyAqY29sdW1uTmFtZXM7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywg
Y29weSkgTlNBcnJheS8qPE5TU3RyaW5nPiovICpidXR0b25zOworLyogcmVxdWlyZWQgKi8gQHBy
b3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgVGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJC
dW5kbGVEaXJlY3Rpb25hbGl0eSBkaXJlY3Rpb25hbGl0eTsKKy8qIHJlcXVpcmVkICovIEBwcm9w
ZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqbm90ZXM7CisvKiByZXF1aXJlZCAqLyBA
cHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBkb3VibGUgdGltZXN0YW1wOworLyogcmVxdWly
ZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgUldJUHJvdG9jb2xKU09OT2JqZWN0
ICp2YWx1ZXM7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluKSBS
V0lQcm90b2NvbEpTT05PYmplY3QgKnBheWxvYWQ7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkg
KG5vbmF0b21pYywgcmV0YWluKSBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICplcnJvcjsKKy8q
IHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU0FycmF5Lyo8VGVzdFBy
b3RvY29sRGF0YWJhc2VFcnJvcj4qLyAqZXJyb3JMaXN0OworQGVuZAorCitfX2F0dHJpYnV0ZV9f
KCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sRGF0YWJh
c2VPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzIDogUldJUHJvdG9jb2xKU09OT2JqZWN0
CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcg
KiwgaWQ+ICopcGF5bG9hZDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0
OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OworLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoSW50ZWdlcjooTlNTdHJpbmcgKilpbnRlZ2VyIGFycmF5OihOU1N0cmluZyAqKWFycmF5
IHN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcgdmFsdWU6KE5TU3RyaW5nICopdmFsdWUgb2JqZWN0
OihOU1N0cmluZyAqKW9iamVjdDsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWlj
LCBjb3B5KSBOU1N0cmluZyAqaW50ZWdlcjsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9u
YXRvbWljLCBjb3B5KSBOU1N0cmluZyAqYXJyYXk7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkg
KG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKnN0cmluZzsKKy8qIHJlcXVpcmVkICovIEBwcm9w
ZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqdmFsdWU7CisvKiByZXF1aXJlZCAqLyBA
cHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKm9iamVjdDsKK0BlbmQKKworX19h
dHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90
b2NvbERhdGFiYXNlRHVtbXlPYmplY3QgOiBSV0lQcm90b2NvbEpTT05PYmplY3QKKy0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilw
YXlsb2FkOworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3Rv
Y29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7CitAZW5kCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmls
aXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1
bmRsZSA6IFJXSVByb3RvY29sSlNPTk9iamVjdAorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5
bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQ7CistIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNv
bk9iamVjdDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aERpcmVjdGlvbmFsaXR5OihUZXN0UHJv
dG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHkpZGlyZWN0aW9uYWxpdHkgYnV0
dG9uczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopYnV0dG9ucyBjb2x1bW5OYW1lczooTlNBcnJh
eS8qPE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMgbm90ZXM6KE5TU3RyaW5nICopbm90ZXMgdGlt
ZXN0YW1wOihkb3VibGUpdGltZXN0YW1wIHZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0ICop
dmFsdWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQgZXJyb3I6KFRl
c3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKillcnJvcjsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0
eSAobm9uYXRvbWljLCBhc3NpZ24pIFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJl
Y3Rpb25hbGl0eSBkaXJlY3Rpb25hbGl0eTsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9u
YXRvbWljLCBjb3B5KSBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmJ1dHRvbnM7CisvKiByZXF1aXJl
ZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNBcnJheS8qPE5TU3RyaW5nPiovICpj
b2x1bW5OYW1lczsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBO
U1N0cmluZyAqbm90ZXM7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNz
aWduKSBkb3VibGUgdGltZXN0YW1wOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9t
aWMsIHJldGFpbikgUldJUHJvdG9jb2xKU09OT2JqZWN0ICp2YWx1ZXM7CisvKiByZXF1aXJlZCAq
LyBAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluKSBSV0lQcm90b2NvbEpTT05PYmplY3QgKnBh
eWxvYWQ7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluKSBUZXN0
UHJvdG9jb2xEYXRhYmFzZUVycm9yICplcnJvcjsKK0BlbmQKKworCisKKworCisKKyNpbXBvcnQg
PFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4KKwor
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVj
bGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29s
SlNPTk9iamVjdFByaXZhdGUuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxl
SW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKworCisK
KworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisKKyMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbiBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2lt
cG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgorCituYW1l
c3BhY2UgSW5zcGVjdG9yIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgorT3B0
aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1
ZSk7CisKK2lubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFz
ZU1vdXNlQnV0dG9uIHZhbHVlKQoreworICAgIHN3aXRjaCh2YWx1ZSkgeworICAgIGNhc2UgVGVz
dFByb3RvY29sRGF0YWJhc2VNb3VzZUJ1dHRvbk5vbmU6CisgICAgICAgIHJldHVybiAiTm9uZSJf
czsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VCdXR0b25MZWZ0OgorICAgICAg
ICByZXR1cm4gIkxlZnQiX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0
dG9uTWlkZGxlOgorICAgICAgICByZXR1cm4gIk1pZGRsZSJfczsKKyAgICBjYXNlIFRlc3RQcm90
b2NvbERhdGFiYXNlTW91c2VCdXR0b25SaWdodDoKKyAgICAgICAgcmV0dXJuICJSaWdodCJfczsK
KyAgICB9Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xEYXRh
YmFzZU1vdXNlQnV0dG9uPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkK
K3sKKyAgICBpZiAodmFsdWUgPT0gIk5vbmUiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29s
RGF0YWJhc2VNb3VzZUJ1dHRvbk5vbmU7CisgICAgaWYgKHZhbHVlID09ICJMZWZ0IikKKyAgICAg
ICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VCdXR0b25MZWZ0OworICAgIGlmICh2
YWx1ZSA9PSAiTWlkZGxlIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlTW91
c2VCdXR0b25NaWRkbGU7CisgICAgaWYgKHZhbHVlID09ICJSaWdodCIpCisgICAgICAgIHJldHVy
biBUZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9uUmlnaHQ7CisgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKK30KKworaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2Nv
bERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSB2YWx1ZSkKK3sK
KyAgICBzd2l0Y2godmFsdWUpIHsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9u
YWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eUxUUjoKKyAgICAgICAgcmV0dXJuICJMVFIi
X3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxl
RGlyZWN0aW9uYWxpdHlSVEw6CisgICAgICAgIHJldHVybiAiUlRMIl9zOworICAgIH0KK30KKwor
dGVtcGxhdGU8PgoraW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQ
YXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0
cmluZyYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09ICJMVFIiKQorICAgICAgICByZXR1cm4g
VGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5
TFRSOworICAgIGlmICh2YWx1ZSA9PSAiUlRMIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2Nv
bERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eVJUTDsKKyAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworfQorCitpbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmco
VGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSB2YWx1ZSkK
K3sKKyAgICBzd2l0Y2godmFsdWUpIHsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlUGFy
YW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHlMVFI6CisgICAgICAgIHJldHVybiAiTFRSIl9zOwor
ICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0
eVJUTDoKKyAgICAgICAgcmV0dXJuICJSVEwiX3M7CisgICAgfQorfQorCit0ZW1wbGF0ZTw+Citp
bmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rp
b25hbGl0eT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAg
aWYgKHZhbHVlID09ICJMVFIiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VQ
YXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eUxUUjsKKyAgICBpZiAodmFsdWUgPT0gIlJUTCIp
CisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZURpcmVj
dGlvbmFsaXR5UlRMOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK2lubGluZSBTdHJp
bmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlRGlyZWN0
aW9uYWxpdHkgdmFsdWUpCit7CisgICAgc3dpdGNoKHZhbHVlKSB7CisgICAgY2FzZSBUZXN0UHJv
dG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHlMVFI6CisgICAgICAgIHJldHVy
biAiTFRSIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZURpcmVj
dGlvbmFsaXR5UlRMOgorICAgICAgICByZXR1cm4gIlJUTCJfczsKKyAgICB9Cit9CisKK3RlbXBs
YXRlPD4KK2lubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlRGly
ZWN0aW9uYWxpdHk+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQorewor
ICAgIGlmICh2YWx1ZSA9PSAiTFRSIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFRlc3RQ
YXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eUxUUjsKKyAgICBpZiAodmFsdWUgPT0gIlJUTCIp
CisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9u
YWxpdHlSVEw7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKworfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgK
KworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUu
anNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIK
KyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rv
ci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNw
ZWN0b3I7CisKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChEYXRhYmFz
ZURvbWFpbikKKworKyAodm9pZClfcGFyc2VFcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJv
ciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNlRXJy
b3JMaXN0OihOU0FycmF5Lyo8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4qLyAqKilvdXRWYWx1
ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNlTW91c2VCdXR0b246KE5T
TnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworKyAodm9pZClfcGFy
c2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTooVGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBh
cmFtZXRlckJ1bmRsZSAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZv
aWQpX3BhcnNlUGFyYW1ldGVyQnVuZGxlOihUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1
bmRsZSAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNl
T2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0czooVGVzdFByb3RvY29sRGF0YWJhc2VPYmpl
Y3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClw
YXlsb2FkOworKyAodm9pZClfcGFyc2VEdW1teU9iamVjdDooVGVzdFByb3RvY29sRGF0YWJhc2VE
dW1teU9iamVjdCAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKworQGVuZAor
QGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFRlc3REb21haW4pCisKKysg
KHZvaWQpX3BhcnNlUGFyYW1ldGVyQnVuZGxlOihUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVu
ZGxlICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworCitAZW5kCisKK0BpbXBs
ZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKERhdGFiYXNlRG9tYWluKQor
CisrICh2b2lkKV9wYXJzZUVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqKW91dFZh
bHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9C
QURfVFlQRShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0g
W1tUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9h
ZF07Cit9CisKKysgKHZvaWQpX3BhcnNlRXJyb3JMaXN0OihOU0FycmF5Lyo8VGVzdFByb3RvY29s
RGF0YWJhc2VFcnJvcj4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAorewor
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TQXJyYXkvKjxUZXN0
UHJvdG9jb2xEYXRhYmFzZUVycm9yPiovIGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gKE5TQXJy
YXkvKjxUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yPiovICopcGF5bG9hZDsKK30KKworKyAodm9p
ZClfcGFyc2VNb3VzZUJ1dHRvbjooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlk
KXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtO
U1N0cmluZyBjbGFzc10pOworICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VC
dXR0b24+IHJlc3VsdCA9IEluc3BlY3Rvcjo6ZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2Nv
bERhdGFiYXNlTW91c2VCdXR0b24+KHBheWxvYWQpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
QkFEX0VOVU1fVkFMVUUocmVzdWx0LCBAIk1vdXNlQnV0dG9uIik7CisgICAgKm91dFZhbHVlID0g
QChyZXN1bHQudmFsdWUoKSk7Cit9CisKKysgKHZvaWQpX3BhcnNlT3B0aW9uYWxQYXJhbWV0ZXJC
dW5kbGU6KFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUgKiopb3V0
VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9S
X0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUg
PSBbW1Rlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUgYWxsb2NdIGlu
aXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKK30KKworKyAodm9pZClfcGFyc2VQYXJhbWV0ZXJCdW5k
bGU6KFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlICoqKW91dFZhbHVlIGZyb21Q
YXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShw
YXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gW1tUZXN0UHJv
dG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZSBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxv
YWRdOworfQorCisrICh2b2lkKV9wYXJzZU9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHM6
KFRlc3RQcm90b2NvbERhdGFiYXNlT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cyAqKilv
dXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOworICAgICpvdXRWYWx1
ZSA9IFtbVGVzdFByb3RvY29sRGF0YWJhc2VPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3Rz
IGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07Cit9CisKKysgKHZvaWQpX3BhcnNlRHVt
bXlPYmplY3Q6KFRlc3RQcm90b2NvbERhdGFiYXNlRHVtbXlPYmplY3QgKiopb3V0VmFsdWUgZnJv
bVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBF
KHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQ
cm90b2NvbERhdGFiYXNlRHVtbXlPYmplY3QgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2Fk
XTsKK30KKworQGVuZAorQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cyAoVGVzdERvbWFpbikKKworKyAodm9pZClfcGFyc2VQYXJhbWV0ZXJCdW5kbGU6KFRlc3RQcm90
b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGUgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxv
YWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rp
b25hcnkgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbFRlc3RQYXJhbWV0
ZXJCdW5kbGUgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKK30KKworQGVuZAorCisK
KyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbiBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgi
CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8V2Vi
SW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKyNpbXBvcnQgPHd0Zi9B
c3NlcnRpb25zLmg+CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2luZyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sRGF0YWJhc2VFcnJv
cgorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFy
eTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBp
bml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JF
UVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJtZXNzYWdlIl0sIEAibWVzc2FnZSIpOworICAgIHNl
bGYubWVzc2FnZSA9IHBheWxvYWRbQCJtZXNzYWdlIl07CisKKyAgICBUSFJPV19FWENFUFRJT05f
Rk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJjb2RlIl0sIEAiY29kZSIpOworICAgIHNl
bGYuY29kZSA9IFtwYXlsb2FkW0AiY29kZSJdIGludGVnZXJWYWx1ZV07CisKKyAgICByZXR1cm4g
c2VsZjsKK30KKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90
b2NvbEpTT05PYmplY3QgKilvYmplY3QKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRX
aXRoSlNPTk9iamVjdDpbb2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0KCldKSkKKyAgICAgICAgcmV0
dXJuIG5pbDsKKworICAgIHJldHVybiBzZWxmOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZTooaW50KWNvZGUKK3sKKyAgICBpZiAo
IShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkobWVzc2FnZSwgQCJtZXNzYWdlIik7CisK
KyAgICBzZWxmLm1lc3NhZ2UgPSBtZXNzYWdlOworICAgIHNlbGYuY29kZSA9IGNvZGU7CisKKyAg
ICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClzZXRNZXNzYWdlOihOU1N0cmluZyAqKW1lc3Nh
Z2UKK3sKKyAgICBbc3VwZXIgc2V0U3RyaW5nOm1lc3NhZ2UgZm9yS2V5OkAibWVzc2FnZSJdOwor
fQorCistIChOU1N0cmluZyAqKW1lc3NhZ2UKK3sKKyAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0Zv
cktleTpAIm1lc3NhZ2UiXTsKK30KKworLSAodm9pZClzZXRDb2RlOihpbnQpY29kZQoreworICAg
IFtzdXBlciBzZXRJbnRlZ2VyOmNvZGUgZm9yS2V5OkAiY29kZSJdOworfQorCistIChpbnQpY29k
ZQoreworICAgIHJldHVybiBbc3VwZXIgaW50ZWdlckZvcktleTpAImNvZGUiXTsKK30KKworQGVu
ZAorCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFtZXRl
ckJ1bmRsZQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGlj
dGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCit7CisgICAgaWYgKCEoc2VsZiA9IFtz
dXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBzZWxmLmNvbHVtbk5hbWVz
ID0gcGF5bG9hZFtAImNvbHVtbk5hbWVzIl07CisKKyAgICBzZWxmLmJ1dHRvbnMgPSBwYXlsb2Fk
W0AiYnV0dG9ucyJdOworCisgICAgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25h
bFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5PiBkaXJlY3Rpb25hbGl0eSA9IGZyb21Qcm90
b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlRGly
ZWN0aW9uYWxpdHk+KHBheWxvYWRbQCJkaXJlY3Rpb25hbGl0eSJdKTsKKyAgICBpZiAoZGlyZWN0
aW9uYWxpdHkpCisgICAgICAgIHNlbGYuZGlyZWN0aW9uYWxpdHkgPSBkaXJlY3Rpb25hbGl0eS52
YWx1ZSgpOworCisgICAgc2VsZi5ub3RlcyA9IHBheWxvYWRbQCJub3RlcyJdOworCisgICAgc2Vs
Zi50aW1lc3RhbXAgPSBbcGF5bG9hZFtAInRpbWVzdGFtcCJdIGRvdWJsZVZhbHVlXTsKKworICAg
IHNlbGYudmFsdWVzID0gcGF5bG9hZFtAInZhbHVlcyJdOworCisgICAgc2VsZi5wYXlsb2FkID0g
cGF5bG9hZFtAInBheWxvYWQiXTsKKworICAgIHNlbGYuZXJyb3IgPSBbW1Rlc3RQcm90b2NvbERh
dGFiYXNlRXJyb3IgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkW0AiZXJyb3IiXV07CisK
KyAgICBzZWxmLmVycm9yTGlzdCA9IG9iamNBcnJheUZyb21QYXlsb2FkPFRlc3RQcm90b2NvbERh
dGFiYXNlRXJyb3I+KHBheWxvYWRbQCJlcnJvckxpc3QiXSk7CisKKyAgICByZXR1cm4gc2VsZjsK
K30KKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpT
T05PYmplY3QgKilvYmplY3QKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoSlNP
Tk9iamVjdDpbb2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0KCldKSkKKyAgICAgICAgcmV0dXJuIG5p
bDsKKworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXNldENvbHVtbk5hbWVzOihOU0Fy
cmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcworeworICAgIFtzdXBlciBzZXRKU09OQXJy
YXk6dG9KU09OU3RyaW5nQXJyYXkoY29sdW1uTmFtZXMpIGZvcktleTpAImNvbHVtbk5hbWVzIl07
Cit9CisKKy0gKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWNvbHVtbk5hbWVzCit7CisgICAgcmV0
dXJuIHRvT2JqQ1N0cmluZ0FycmF5KFtzdXBlciBKU09OQXJyYXlGb3JLZXk6QCJjb2x1bW5OYW1l
cyJdKTsKK30KKworLSAodm9pZClzZXRCdXR0b25zOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKili
dXR0b25zCit7CisgICAgW3N1cGVyIHNldEpTT05BcnJheTp0b0pTT05TdHJpbmdBcnJheShidXR0
b25zKSBmb3JLZXk6QCJidXR0b25zIl07Cit9CisKKy0gKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAq
KWJ1dHRvbnMKK3sKKyAgICByZXR1cm4gdG9PYmpDU3RyaW5nQXJyYXkoW3N1cGVyIEpTT05BcnJh
eUZvcktleTpAImJ1dHRvbnMiXSk7Cit9CisKKy0gKHZvaWQpc2V0RGlyZWN0aW9uYWxpdHk6KFRl
c3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSlk
aXJlY3Rpb25hbGl0eQoreworICAgIFtzdXBlciBzZXRTdHJpbmc6dG9Qcm90b2NvbFN0cmluZyhk
aXJlY3Rpb25hbGl0eSkgZm9yS2V5OkAiZGlyZWN0aW9uYWxpdHkiXTsKK30KKworLSAoVGVzdFBy
b3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5KWRpcmVj
dGlvbmFsaXR5Cit7CisgICAgcmV0dXJuIGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xE
YXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHk+KFtzdXBlciBzdHJp
bmdGb3JLZXk6QCJkaXJlY3Rpb25hbGl0eSJdKS52YWx1ZSgpOworfQorCistICh2b2lkKXNldE5v
dGVzOihOU1N0cmluZyAqKW5vdGVzCit7CisgICAgW3N1cGVyIHNldFN0cmluZzpub3RlcyBmb3JL
ZXk6QCJub3RlcyJdOworfQorCistIChOU1N0cmluZyAqKW5vdGVzCit7CisgICAgcmV0dXJuIFtz
dXBlciBzdHJpbmdGb3JLZXk6QCJub3RlcyJdOworfQorCistICh2b2lkKXNldFRpbWVzdGFtcDoo
ZG91YmxlKXRpbWVzdGFtcAoreworICAgIFtzdXBlciBzZXREb3VibGU6dGltZXN0YW1wIGZvcktl
eTpAInRpbWVzdGFtcCJdOworfQorCistIChkb3VibGUpdGltZXN0YW1wCit7CisgICAgcmV0dXJu
IFtzdXBlciBkb3VibGVGb3JLZXk6QCJ0aW1lc3RhbXAiXTsKK30KKworLSAodm9pZClzZXRWYWx1
ZXM6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcworeworICAgIFtzdXBlciBzZXRPYmpl
Y3Q6dmFsdWVzIGZvcktleTpAInZhbHVlcyJdOworfQorCistIChSV0lQcm90b2NvbEpTT05PYmpl
Y3QgKil2YWx1ZXMKK3sKKyAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9iamVjdCA9IFtzdXBl
ciBvYmplY3RGb3JLZXk6QCJ2YWx1ZXMiXTsKKyAgICBpZiAoIW9iamVjdCkKKyAgICAgICAgcmV0
dXJuIG5pbDsKKyAgICByZXR1cm4gW1tSV0lQcm90b2NvbEpTT05PYmplY3QgYWxsb2NdIGluaXRX
aXRoSlNPTk9iamVjdDpbW3N1cGVyIG9iamVjdEZvcktleTpAInZhbHVlcyJdIHRvSlNPTk9iamVj
dF0uZ2V0KCldOworfQorCistICh2b2lkKXNldFBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVj
dCAqKXBheWxvYWQKK3sKKyAgICBbc3VwZXIgc2V0T2JqZWN0OnBheWxvYWQgZm9yS2V5OkAicGF5
bG9hZCJdOworfQorCistIChSV0lQcm90b2NvbEpTT05PYmplY3QgKilwYXlsb2FkCit7CisgICAg
UldJUHJvdG9jb2xKU09OT2JqZWN0ICpvYmplY3QgPSBbc3VwZXIgb2JqZWN0Rm9yS2V5OkAicGF5
bG9hZCJdOworICAgIGlmICghb2JqZWN0KQorICAgICAgICByZXR1cm4gbmlsOworICAgIHJldHVy
biBbW1JXSVByb3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0Oltbc3Vw
ZXIgb2JqZWN0Rm9yS2V5OkAicGF5bG9hZCJdIHRvSlNPTk9iamVjdF0uZ2V0KCldOworfQorCist
ICh2b2lkKXNldEVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICopZXJyb3IKK3sKKyAg
ICBbc3VwZXIgc2V0T2JqZWN0OmVycm9yIGZvcktleTpAImVycm9yIl07Cit9CisKKy0gKFRlc3RQ
cm90b2NvbERhdGFiYXNlRXJyb3IgKillcnJvcgoreworICAgIFJXSVByb3RvY29sSlNPTk9iamVj
dCAqb2JqZWN0ID0gW3N1cGVyIG9iamVjdEZvcktleTpAImVycm9yIl07CisgICAgaWYgKCFvYmpl
Y3QpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgcmV0dXJuIFtbVGVzdFByb3RvY29sRGF0YWJh
c2VFcnJvciBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0Oltbc3VwZXIgb2JqZWN0Rm9yS2V5OkAi
ZXJyb3IiXSB0b0pTT05PYmplY3RdLmdldCgpXTsKK30KKworLSAodm9pZClzZXRFcnJvckxpc3Q6
KE5TQXJyYXkvKjxUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yPiovICopZXJyb3JMaXN0Cit7Cisg
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRV9JTl9BUlJBWShlcnJvckxpc3QsIFtUZXN0
UHJvdG9jb2xEYXRhYmFzZUVycm9yIGNsYXNzXSk7CisgICAgW3N1cGVyIHNldEpTT05BcnJheTp0
b0pTT05PYmplY3RBcnJheShlcnJvckxpc3QpIGZvcktleTpAImVycm9yTGlzdCJdOworfQorCist
IChOU0FycmF5Lyo8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4qLyAqKWVycm9yTGlzdAorewor
ICAgIHJldHVybiB0b09iakNBcnJheTxUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yPihbc3VwZXIg
SlNPTkFycmF5Rm9yS2V5OkAiZXJyb3JMaXN0Il0pOworfQorCitAZW5kCisKK0BpbXBsZW1lbnRh
dGlvbiBUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZQorCistIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4g
KilwYXlsb2FkCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJl
dHVybiBuaWw7CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBh
eWxvYWRbQCJjb2x1bW5OYW1lcyJdLCBAImNvbHVtbk5hbWVzIik7CisgICAgc2VsZi5jb2x1bW5O
YW1lcyA9IHBheWxvYWRbQCJjb2x1bW5OYW1lcyJdOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiYnV0dG9ucyJdLCBAImJ1dHRvbnMiKTsKKyAg
ICBzZWxmLmJ1dHRvbnMgPSBwYXlsb2FkW0AiYnV0dG9ucyJdOworCisgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiZGlyZWN0aW9uYWxpdHkiXSwgQCJk
aXJlY3Rpb25hbGl0eSIpOworICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1l
dGVyQnVuZGxlRGlyZWN0aW9uYWxpdHk+IGRpcmVjdGlvbmFsaXR5ID0gZnJvbVByb3RvY29sU3Ry
aW5nPFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHk+KHBh
eWxvYWRbQCJkaXJlY3Rpb25hbGl0eSJdKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9F
TlVNX1ZBTFVFKGRpcmVjdGlvbmFsaXR5LCBAImRpcmVjdGlvbmFsaXR5Iik7CisgICAgc2VsZi5k
aXJlY3Rpb25hbGl0eSA9IGRpcmVjdGlvbmFsaXR5LnZhbHVlKCk7CisKKyAgICBUSFJPV19FWENF
UFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJub3RlcyJdLCBAIm5vdGVzIik7
CisgICAgc2VsZi5ub3RlcyA9IHBheWxvYWRbQCJub3RlcyJdOworCisgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AidGltZXN0YW1wIl0sIEAidGltZXN0
YW1wIik7CisgICAgc2VsZi50aW1lc3RhbXAgPSBbcGF5bG9hZFtAInRpbWVzdGFtcCJdIGRvdWJs
ZVZhbHVlXTsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5
bG9hZFtAInZhbHVlcyJdLCBAInZhbHVlcyIpOworICAgIHNlbGYudmFsdWVzID0gcGF5bG9hZFtA
InZhbHVlcyJdOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShw
YXlsb2FkW0AicGF5bG9hZCJdLCBAInBheWxvYWQiKTsKKyAgICBzZWxmLnBheWxvYWQgPSBwYXls
b2FkW0AicGF5bG9hZCJdOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9Q
RVJUWShwYXlsb2FkW0AiZXJyb3IiXSwgQCJlcnJvciIpOworICAgIHNlbGYuZXJyb3IgPSBbW1Rl
c3RQcm90b2NvbERhdGFiYXNlRXJyb3IgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkW0Ai
ZXJyb3IiXV07CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBh
eWxvYWRbQCJlcnJvckxpc3QiXSwgQCJlcnJvckxpc3QiKTsKKyAgICBzZWxmLmVycm9yTGlzdCA9
IG9iamNBcnJheUZyb21QYXlsb2FkPFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I+KHBheWxvYWRb
QCJlcnJvckxpc3QiXSk7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKy0gKGluc3RhbmNldHlwZSlp
bml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilvYmplY3QKK3sK
KyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoSlNPTk9iamVjdDpbb2JqZWN0IHRvSlNP
Tk9iamVjdF0uZ2V0KCldKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHJldHVybiBzZWxm
OworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb2x1bW5OYW1lczooTlNBcnJheS8qPE5T
U3RyaW5nPiovICopY29sdW1uTmFtZXMgYnV0dG9uczooTlNBcnJheS8qPE5TU3RyaW5nPiovICop
YnV0dG9ucyBkaXJlY3Rpb25hbGl0eTooVGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5k
bGVEaXJlY3Rpb25hbGl0eSlkaXJlY3Rpb25hbGl0eSBub3RlczooTlNTdHJpbmcgKilub3RlcyB0
aW1lc3RhbXA6KGRvdWJsZSl0aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3Qg
Kil2YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZCBlcnJvcjoo
VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKWVycm9yIGVycm9yTGlzdDooTlNBcnJheS8qPFRl
c3RQcm90b2NvbERhdGFiYXNlRXJyb3I+Ki8gKillcnJvckxpc3QKK3sKKyAgICBpZiAoIShzZWxm
ID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkoY29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsK
KyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKGJ1dHRvbnMsIEAiYnV0
dG9ucyIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkobm90ZXMs
IEAibm90ZXMiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHZh
bHVlcywgQCJ2YWx1ZXMiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BF
UlRZKHBheWxvYWQsIEAicGF5bG9hZCIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlS
RURfUFJPUEVSVFkoZXJyb3IsIEAiZXJyb3IiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JF
UVVJUkVEX1BST1BFUlRZKGVycm9yTGlzdCwgQCJlcnJvckxpc3QiKTsKKyAgICBUSFJPV19FWENF
UFRJT05fRk9SX0JBRF9UWVBFX0lOX0FSUkFZKGVycm9yTGlzdCwgW1Rlc3RQcm90b2NvbERhdGFi
YXNlRXJyb3IgY2xhc3NdKTsKKworICAgIHNlbGYuY29sdW1uTmFtZXMgPSBjb2x1bW5OYW1lczsK
KyAgICBzZWxmLmJ1dHRvbnMgPSBidXR0b25zOworICAgIHNlbGYuZGlyZWN0aW9uYWxpdHkgPSBk
aXJlY3Rpb25hbGl0eTsKKyAgICBzZWxmLm5vdGVzID0gbm90ZXM7CisgICAgc2VsZi50aW1lc3Rh
bXAgPSB0aW1lc3RhbXA7CisgICAgc2VsZi52YWx1ZXMgPSB2YWx1ZXM7CisgICAgc2VsZi5wYXls
b2FkID0gcGF5bG9hZDsKKyAgICBzZWxmLmVycm9yID0gZXJyb3I7CisgICAgc2VsZi5lcnJvckxp
c3QgPSBlcnJvckxpc3Q7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClzZXRDb2x1
bW5OYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMKK3sKKyAgICBbc3Vw
ZXIgc2V0SlNPTkFycmF5OnRvSlNPTlN0cmluZ0FycmF5KGNvbHVtbk5hbWVzKSBmb3JLZXk6QCJj
b2x1bW5OYW1lcyJdOworfQorCistIChOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1l
cworeworICAgIHJldHVybiB0b09iakNTdHJpbmdBcnJheShbc3VwZXIgSlNPTkFycmF5Rm9yS2V5
OkAiY29sdW1uTmFtZXMiXSk7Cit9CisKKy0gKHZvaWQpc2V0QnV0dG9uczooTlNBcnJheS8qPE5T
U3RyaW5nPiovICopYnV0dG9ucworeworICAgIFtzdXBlciBzZXRKU09OQXJyYXk6dG9KU09OU3Ry
aW5nQXJyYXkoYnV0dG9ucykgZm9yS2V5OkAiYnV0dG9ucyJdOworfQorCistIChOU0FycmF5Lyo8
TlNTdHJpbmc+Ki8gKilidXR0b25zCit7CisgICAgcmV0dXJuIHRvT2JqQ1N0cmluZ0FycmF5KFtz
dXBlciBKU09OQXJyYXlGb3JLZXk6QCJidXR0b25zIl0pOworfQorCistICh2b2lkKXNldERpcmVj
dGlvbmFsaXR5OihUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFs
aXR5KWRpcmVjdGlvbmFsaXR5Cit7CisgICAgW3N1cGVyIHNldFN0cmluZzp0b1Byb3RvY29sU3Ry
aW5nKGRpcmVjdGlvbmFsaXR5KSBmb3JLZXk6QCJkaXJlY3Rpb25hbGl0eSJdOworfQorCistIChU
ZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5KWRpcmVjdGlv
bmFsaXR5Cit7CisgICAgcmV0dXJuIGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xEYXRh
YmFzZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5Pihbc3VwZXIgc3RyaW5nRm9yS2V5OkAi
ZGlyZWN0aW9uYWxpdHkiXSkudmFsdWUoKTsKK30KKworLSAodm9pZClzZXROb3RlczooTlNTdHJp
bmcgKilub3RlcworeworICAgIFtzdXBlciBzZXRTdHJpbmc6bm90ZXMgZm9yS2V5OkAibm90ZXMi
XTsKK30KKworLSAoTlNTdHJpbmcgKilub3RlcworeworICAgIHJldHVybiBbc3VwZXIgc3RyaW5n
Rm9yS2V5OkAibm90ZXMiXTsKK30KKworLSAodm9pZClzZXRUaW1lc3RhbXA6KGRvdWJsZSl0aW1l
c3RhbXAKK3sKKyAgICBbc3VwZXIgc2V0RG91YmxlOnRpbWVzdGFtcCBmb3JLZXk6QCJ0aW1lc3Rh
bXAiXTsKK30KKworLSAoZG91YmxlKXRpbWVzdGFtcAoreworICAgIHJldHVybiBbc3VwZXIgZG91
YmxlRm9yS2V5OkAidGltZXN0YW1wIl07Cit9CisKKy0gKHZvaWQpc2V0VmFsdWVzOihSV0lQcm90
b2NvbEpTT05PYmplY3QgKil2YWx1ZXMKK3sKKyAgICBbc3VwZXIgc2V0T2JqZWN0OnZhbHVlcyBm
b3JLZXk6QCJ2YWx1ZXMiXTsKK30KKworLSAoUldJUHJvdG9jb2xKU09OT2JqZWN0ICopdmFsdWVz
Cit7CisgICAgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvYmplY3QgPSBbc3VwZXIgb2JqZWN0Rm9y
S2V5OkAidmFsdWVzIl07CisgICAgaWYgKCFvYmplY3QpCisgICAgICAgIHJldHVybiBuaWw7Cisg
ICAgcmV0dXJuIFtbUldJUHJvdG9jb2xKU09OT2JqZWN0IGFsbG9jXSBpbml0V2l0aEpTT05PYmpl
Y3Q6W1tzdXBlciBvYmplY3RGb3JLZXk6QCJ2YWx1ZXMiXSB0b0pTT05PYmplY3RdLmdldCgpXTsK
K30KKworLSAodm9pZClzZXRQYXlsb2FkOihSV0lQcm90b2NvbEpTT05PYmplY3QgKilwYXlsb2Fk
Cit7CisgICAgW3N1cGVyIHNldE9iamVjdDpwYXlsb2FkIGZvcktleTpAInBheWxvYWQiXTsKK30K
KworLSAoUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZAoreworICAgIFJXSVByb3RvY29s
SlNPTk9iamVjdCAqb2JqZWN0ID0gW3N1cGVyIG9iamVjdEZvcktleTpAInBheWxvYWQiXTsKKyAg
ICBpZiAoIW9iamVjdCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICByZXR1cm4gW1tSV0lQcm90
b2NvbEpTT05PYmplY3QgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDpbW3N1cGVyIG9iamVjdEZv
cktleTpAInBheWxvYWQiXSB0b0pTT05PYmplY3RdLmdldCgpXTsKK30KKworLSAodm9pZClzZXRF
cnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKWVycm9yCit7CisgICAgW3N1cGVyIHNl
dE9iamVjdDplcnJvciBmb3JLZXk6QCJlcnJvciJdOworfQorCistIChUZXN0UHJvdG9jb2xEYXRh
YmFzZUVycm9yICopZXJyb3IKK3sKKyAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9iamVjdCA9
IFtzdXBlciBvYmplY3RGb3JLZXk6QCJlcnJvciJdOworICAgIGlmICghb2JqZWN0KQorICAgICAg
ICByZXR1cm4gbmlsOworICAgIHJldHVybiBbW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgYWxs
b2NdIGluaXRXaXRoSlNPTk9iamVjdDpbW3N1cGVyIG9iamVjdEZvcktleTpAImVycm9yIl0gdG9K
U09OT2JqZWN0XS5nZXQoKV07Cit9CisKKy0gKHZvaWQpc2V0RXJyb3JMaXN0OihOU0FycmF5Lyo8
VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4qLyAqKWVycm9yTGlzdAoreworICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfQkFEX1RZUEVfSU5fQVJSQVkoZXJyb3JMaXN0LCBbVGVzdFByb3RvY29sRGF0
YWJhc2VFcnJvciBjbGFzc10pOworICAgIFtzdXBlciBzZXRKU09OQXJyYXk6dG9KU09OT2JqZWN0
QXJyYXkoZXJyb3JMaXN0KSBmb3JLZXk6QCJlcnJvckxpc3QiXTsKK30KKworLSAoTlNBcnJheS8q
PFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I+Ki8gKillcnJvckxpc3QKK3sKKyAgICByZXR1cm4g
dG9PYmpDQXJyYXk8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4oW3N1cGVyIEpTT05BcnJheUZv
cktleTpAImVycm9yTGlzdCJdKTsKK30KKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gVGVzdFBy
b3RvY29sRGF0YWJhc2VPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzCisKKy0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICos
IGlkPiAqKXBheWxvYWQKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAg
ICAgcmV0dXJuIG5pbDsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVS
VFkocGF5bG9hZFtAImludGVnZXIiXSwgQCJpbnRlZ2VyIik7CisgICAgc2VsZi5pbnRlZ2VyID0g
cGF5bG9hZFtAImludGVnZXIiXTsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURf
UFJPUEVSVFkocGF5bG9hZFtAImFycmF5Il0sIEAiYXJyYXkiKTsKKyAgICBzZWxmLmFycmF5ID0g
cGF5bG9hZFtAImFycmF5Il07CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BS
T1BFUlRZKHBheWxvYWRbQCJzdHJpbmciXSwgQCJzdHJpbmciKTsKKyAgICBzZWxmLnN0cmluZyA9
IHBheWxvYWRbQCJzdHJpbmciXTsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURf
UFJPUEVSVFkocGF5bG9hZFtAInZhbHVlIl0sIEAidmFsdWUiKTsKKyAgICBzZWxmLnZhbHVlID0g
cGF5bG9hZFtAInZhbHVlIl07CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BS
T1BFUlRZKHBheWxvYWRbQCJvYmplY3QiXSwgQCJvYmplY3QiKTsKKyAgICBzZWxmLm9iamVjdCA9
IHBheWxvYWRbQCJvYmplY3QiXTsKKworICAgIHJldHVybiBzZWxmOworfQorLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9iamVj
dAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmplY3Qg
dG9KU09OT2JqZWN0XS5nZXQoKV0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgcmV0dXJu
IHNlbGY7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aEludGVnZXI6KE5TU3RyaW5nICop
aW50ZWdlciBhcnJheTooTlNTdHJpbmcgKilhcnJheSBzdHJpbmc6KE5TU3RyaW5nICopc3RyaW5n
IHZhbHVlOihOU1N0cmluZyAqKXZhbHVlIG9iamVjdDooTlNTdHJpbmcgKilvYmplY3QKK3sKKyAg
ICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkoaW50ZWdlciwgQCJpbnRlZ2Vy
Iik7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShhcnJheSwgQCJh
cnJheSIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkoc3RyaW5n
LCBAInN0cmluZyIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFko
dmFsdWUsIEAidmFsdWUiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BF
UlRZKG9iamVjdCwgQCJvYmplY3QiKTsKKworICAgIHNlbGYuaW50ZWdlciA9IGludGVnZXI7Cisg
ICAgc2VsZi5hcnJheSA9IGFycmF5OworICAgIHNlbGYuc3RyaW5nID0gc3RyaW5nOworICAgIHNl
bGYudmFsdWUgPSB2YWx1ZTsKKyAgICBzZWxmLm9iamVjdCA9IG9iamVjdDsKKworICAgIHJldHVy
biBzZWxmOworfQorCistICh2b2lkKXNldEludGVnZXI6KE5TU3RyaW5nICopaW50ZWdlcgorewor
ICAgIFtzdXBlciBzZXRTdHJpbmc6aW50ZWdlciBmb3JLZXk6QCJpbnRlZ2VyIl07Cit9CisKKy0g
KE5TU3RyaW5nICopaW50ZWdlcgoreworICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAi
aW50ZWdlciJdOworfQorCistICh2b2lkKXNldEFycmF5OihOU1N0cmluZyAqKWFycmF5Cit7Cisg
ICAgW3N1cGVyIHNldFN0cmluZzphcnJheSBmb3JLZXk6QCJhcnJheSJdOworfQorCistIChOU1N0
cmluZyAqKWFycmF5Cit7CisgICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJhcnJheSJd
OworfQorCistICh2b2lkKXNldFN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcKK3sKKyAgICBbc3Vw
ZXIgc2V0U3RyaW5nOnN0cmluZyBmb3JLZXk6QCJzdHJpbmciXTsKK30KKworLSAoTlNTdHJpbmcg
KilzdHJpbmcKK3sKKyAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAInN0cmluZyJdOwor
fQorCistICh2b2lkKXNldFZhbHVlOihOU1N0cmluZyAqKXZhbHVlCit7CisgICAgW3N1cGVyIHNl
dFN0cmluZzp2YWx1ZSBmb3JLZXk6QCJ2YWx1ZSJdOworfQorCistIChOU1N0cmluZyAqKXZhbHVl
Cit7CisgICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJ2YWx1ZSJdOworfQorCistICh2
b2lkKXNldE9iamVjdDooTlNTdHJpbmcgKilvYmplY3QKK3sKKyAgICBbc3VwZXIgc2V0U3RyaW5n
Om9iamVjdCBmb3JLZXk6QCJvYmplY3QiXTsKK30KKworLSAoTlNTdHJpbmcgKilvYmplY3QKK3sK
KyAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAIm9iamVjdCJdOworfQorCitAZW5kCisK
K0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xEYXRhYmFzZUR1bW15T2JqZWN0CisKKy0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5n
ICosIGlkPiAqKXBheWxvYWQKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAg
ICAgICAgcmV0dXJuIG5pbDsKKworICAgIHJldHVybiBzZWxmOworfQorLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9iamVjdAor
eworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmplY3QgdG9K
U09OT2JqZWN0XS5nZXQoKV0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgcmV0dXJuIHNl
bGY7Cit9CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0
ZXJCdW5kbGUKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBOU0Rp
Y3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZAoreworICAgIGlmICghKHNlbGYgPSBb
c3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiZGlyZWN0aW9uYWxpdHkiXSwgQCJkaXJl
Y3Rpb25hbGl0eSIpOworICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5k
bGVEaXJlY3Rpb25hbGl0eT4gZGlyZWN0aW9uYWxpdHkgPSBmcm9tUHJvdG9jb2xTdHJpbmc8VGVz
dFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5PihwYXlsb2FkW0AiZGly
ZWN0aW9uYWxpdHkiXSk7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfRU5VTV9WQUxVRShk
aXJlY3Rpb25hbGl0eSwgQCJkaXJlY3Rpb25hbGl0eSIpOworICAgIHNlbGYuZGlyZWN0aW9uYWxp
dHkgPSBkaXJlY3Rpb25hbGl0eS52YWx1ZSgpOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9S
RVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiYnV0dG9ucyJdLCBAImJ1dHRvbnMiKTsKKyAgICBz
ZWxmLmJ1dHRvbnMgPSBwYXlsb2FkW0AiYnV0dG9ucyJdOworCisgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiY29sdW1uTmFtZXMiXSwgQCJjb2x1bW5O
YW1lcyIpOworICAgIHNlbGYuY29sdW1uTmFtZXMgPSBwYXlsb2FkW0AiY29sdW1uTmFtZXMiXTsK
KworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAIm5v
dGVzIl0sIEAibm90ZXMiKTsKKyAgICBzZWxmLm5vdGVzID0gcGF5bG9hZFtAIm5vdGVzIl07CisK
KyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJ0aW1l
c3RhbXAiXSwgQCJ0aW1lc3RhbXAiKTsKKyAgICBzZWxmLnRpbWVzdGFtcCA9IFtwYXlsb2FkW0Ai
dGltZXN0YW1wIl0gZG91YmxlVmFsdWVdOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFV
SVJFRF9QUk9QRVJUWShwYXlsb2FkW0AidmFsdWVzIl0sIEAidmFsdWVzIik7CisgICAgc2VsZi52
YWx1ZXMgPSBwYXlsb2FkW0AidmFsdWVzIl07CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JF
UVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJwYXlsb2FkIl0sIEAicGF5bG9hZCIpOworICAgIHNl
bGYucGF5bG9hZCA9IHBheWxvYWRbQCJwYXlsb2FkIl07CisKKyAgICBUSFJPV19FWENFUFRJT05f
Rk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJlcnJvciJdLCBAImVycm9yIik7CisgICAg
c2VsZi5lcnJvciA9IFtbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBhbGxvY10gaW5pdFdpdGhQ
YXlsb2FkOnBheWxvYWRbQCJlcnJvciJdXTsKKworICAgIHJldHVybiBzZWxmOworfQorLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAq
KW9iamVjdAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0Oltv
YmplY3QgdG9KU09OT2JqZWN0XS5nZXQoKV0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAg
cmV0dXJuIHNlbGY7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aERpcmVjdGlvbmFsaXR5
OihUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHkpZGlyZWN0aW9u
YWxpdHkgYnV0dG9uczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopYnV0dG9ucyBjb2x1bW5OYW1l
czooTlNBcnJheS8qPE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMgbm90ZXM6KE5TU3RyaW5nICop
bm90ZXMgdGltZXN0YW1wOihkb3VibGUpdGltZXN0YW1wIHZhbHVlczooUldJUHJvdG9jb2xKU09O
T2JqZWN0ICopdmFsdWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQg
ZXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKillcnJvcgoreworICAgIGlmICghKHNl
bGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShidXR0b25zLCBAImJ1dHRvbnMiKTsKKyAgICBU
SFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKGNvbHVtbk5hbWVzLCBAImNvbHVt
bk5hbWVzIik7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShub3Rl
cywgQCJub3RlcyIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFko
dmFsdWVzLCBAInZhbHVlcyIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJP
UEVSVFkocGF5bG9hZCwgQCJwYXlsb2FkIik7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFV
SVJFRF9QUk9QRVJUWShlcnJvciwgQCJlcnJvciIpOworCisgICAgc2VsZi5kaXJlY3Rpb25hbGl0
eSA9IGRpcmVjdGlvbmFsaXR5OworICAgIHNlbGYuYnV0dG9ucyA9IGJ1dHRvbnM7CisgICAgc2Vs
Zi5jb2x1bW5OYW1lcyA9IGNvbHVtbk5hbWVzOworICAgIHNlbGYubm90ZXMgPSBub3RlczsKKyAg
ICBzZWxmLnRpbWVzdGFtcCA9IHRpbWVzdGFtcDsKKyAgICBzZWxmLnZhbHVlcyA9IHZhbHVlczsK
KyAgICBzZWxmLnBheWxvYWQgPSBwYXlsb2FkOworICAgIHNlbGYuZXJyb3IgPSBlcnJvcjsKKwor
ICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXNldERpcmVjdGlvbmFsaXR5OihUZXN0UHJv
dG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHkpZGlyZWN0aW9uYWxpdHkKK3sK
KyAgICBbc3VwZXIgc2V0U3RyaW5nOnRvUHJvdG9jb2xTdHJpbmcoZGlyZWN0aW9uYWxpdHkpIGZv
cktleTpAImRpcmVjdGlvbmFsaXR5Il07Cit9CisKKy0gKFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0
ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSlkaXJlY3Rpb25hbGl0eQoreworICAgIHJldHVybiBmcm9t
UHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFs
aXR5Pihbc3VwZXIgc3RyaW5nRm9yS2V5OkAiZGlyZWN0aW9uYWxpdHkiXSkudmFsdWUoKTsKK30K
KworLSAodm9pZClzZXRCdXR0b25zOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilidXR0b25zCit7
CisgICAgW3N1cGVyIHNldEpTT05BcnJheTp0b0pTT05TdHJpbmdBcnJheShidXR0b25zKSBmb3JL
ZXk6QCJidXR0b25zIl07Cit9CisKKy0gKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWJ1dHRvbnMK
K3sKKyAgICByZXR1cm4gdG9PYmpDU3RyaW5nQXJyYXkoW3N1cGVyIEpTT05BcnJheUZvcktleTpA
ImJ1dHRvbnMiXSk7Cit9CisKKy0gKHZvaWQpc2V0Q29sdW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0
cmluZz4qLyAqKWNvbHVtbk5hbWVzCit7CisgICAgW3N1cGVyIHNldEpTT05BcnJheTp0b0pTT05T
dHJpbmdBcnJheShjb2x1bW5OYW1lcykgZm9yS2V5OkAiY29sdW1uTmFtZXMiXTsKK30KKworLSAo
TlNBcnJheS8qPE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMKK3sKKyAgICByZXR1cm4gdG9PYmpD
U3RyaW5nQXJyYXkoW3N1cGVyIEpTT05BcnJheUZvcktleTpAImNvbHVtbk5hbWVzIl0pOworfQor
CistICh2b2lkKXNldE5vdGVzOihOU1N0cmluZyAqKW5vdGVzCit7CisgICAgW3N1cGVyIHNldFN0
cmluZzpub3RlcyBmb3JLZXk6QCJub3RlcyJdOworfQorCistIChOU1N0cmluZyAqKW5vdGVzCit7
CisgICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJub3RlcyJdOworfQorCistICh2b2lk
KXNldFRpbWVzdGFtcDooZG91YmxlKXRpbWVzdGFtcAoreworICAgIFtzdXBlciBzZXREb3VibGU6
dGltZXN0YW1wIGZvcktleTpAInRpbWVzdGFtcCJdOworfQorCistIChkb3VibGUpdGltZXN0YW1w
Cit7CisgICAgcmV0dXJuIFtzdXBlciBkb3VibGVGb3JLZXk6QCJ0aW1lc3RhbXAiXTsKK30KKwor
LSAodm9pZClzZXRWYWx1ZXM6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcworeworICAg
IFtzdXBlciBzZXRPYmplY3Q6dmFsdWVzIGZvcktleTpAInZhbHVlcyJdOworfQorCistIChSV0lQ
cm90b2NvbEpTT05PYmplY3QgKil2YWx1ZXMKK3sKKyAgICBSV0lQcm90b2NvbEpTT05PYmplY3Qg
Km9iamVjdCA9IFtzdXBlciBvYmplY3RGb3JLZXk6QCJ2YWx1ZXMiXTsKKyAgICBpZiAoIW9iamVj
dCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICByZXR1cm4gW1tSV0lQcm90b2NvbEpTT05PYmpl
Y3QgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDpbW3N1cGVyIG9iamVjdEZvcktleTpAInZhbHVl
cyJdIHRvSlNPTk9iamVjdF0uZ2V0KCldOworfQorCistICh2b2lkKXNldFBheWxvYWQ6KFJXSVBy
b3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQKK3sKKyAgICBbc3VwZXIgc2V0T2JqZWN0OnBheWxv
YWQgZm9yS2V5OkAicGF5bG9hZCJdOworfQorCistIChSV0lQcm90b2NvbEpTT05PYmplY3QgKilw
YXlsb2FkCit7CisgICAgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvYmplY3QgPSBbc3VwZXIgb2Jq
ZWN0Rm9yS2V5OkAicGF5bG9hZCJdOworICAgIGlmICghb2JqZWN0KQorICAgICAgICByZXR1cm4g
bmlsOworICAgIHJldHVybiBbW1JXSVByb3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5pdFdpdGhK
U09OT2JqZWN0Oltbc3VwZXIgb2JqZWN0Rm9yS2V5OkAicGF5bG9hZCJdIHRvSlNPTk9iamVjdF0u
Z2V0KCldOworfQorCistICh2b2lkKXNldEVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9y
ICopZXJyb3IKK3sKKyAgICBbc3VwZXIgc2V0T2JqZWN0OmVycm9yIGZvcktleTpAImVycm9yIl07
Cit9CisKKy0gKFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKillcnJvcgoreworICAgIFJXSVBy
b3RvY29sSlNPTk9iamVjdCAqb2JqZWN0ID0gW3N1cGVyIG9iamVjdEZvcktleTpAImVycm9yIl07
CisgICAgaWYgKCFvYmplY3QpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgcmV0dXJuIFtbVGVz
dFByb3RvY29sRGF0YWJhc2VFcnJvciBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0Oltbc3VwZXIg
b2JqZWN0Rm9yS2V5OkAiZXJyb3IiXSB0b0pTT05PYmplY3RdLmdldCgpXTsKK30KKworQGVuZAor
CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLXJl
cXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUt
Y2FzdHMuanNvbi1yZXN1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDIwMDQ0MTdhMDM2NzYxYjhmZWQ5ZDZkMWYz
MDg2NDM5MDJiMDA2NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLXJlcXVpcmluZy1ydW50aW1lLWNh
c3RzLmpzb24tcmVzdWx0CkBAIC0wLDAgKzEsMTU5MyBAQAorIyMjIEJlZ2luIEZpbGU6IEluc3Bl
Y3RvckJhY2tlbmRDb21tYW5kcy5qcy5pbgorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKy8vIFRlc3QKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJE
b21haW4oIlRlc3QiLCBudWxsKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJUZXN0
LlVuY2FzdGVkQW5pbWFscyIsIHtQaWdzOiAiUGlncyIsIENvd3M6ICJDb3dzIiwgQ2F0czogIkNh
dHMiLCBIZW5zOiAiSGVucyJ9KTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJUZXN0
LkNhc3RlZEFuaW1hbHMiLCB7RHVja3M6ICJEdWNrcyIsIEhlbnM6ICJIZW5zIiwgQ3Jvd3M6ICJD
cm93cyIsIEZsYW1pbmdvczogIkZsYW1pbmdvcyJ9KTsKK0luc3BlY3RvckJhY2tlbmQuYWN0aXZh
dGVEb21haW4oIlRlc3QiLCBudWxsKTsKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENv
bW1hbmRzLmpzLmluCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmlu
Zy1ydW50aW1lLWNhc3RzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0
b3IgeworCitjbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAg
dm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlz
cGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQor
ICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJu
IG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KK3ByaXZhdGU6CisgICAgUmVmUHRyPEJhY2tl
bmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOworfTsKKworCisKKworfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKKyMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVy
cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpz
b24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJy
b3JTdHJpbmc7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTog
VGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERp
c3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVx
dWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0QmFja2VuZERpc3Bh
dGNoZXJzLmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJv
dXRlci5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL05ldmVy
RGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCisjaWYgRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjaW5jbHVkZSAiVGVzdEFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVycy5oIgorI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK30gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMu
Y3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5q
c29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8d3RmL0pTT05W
YWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIElu
c3BlY3RvciB7CisKK2NsYXNzIEZyb250ZW5kUm91dGVyOworCit9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVn
aW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgorCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2Vy
dGlvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCituYW1lc3BhY2UgUHJvdG9j
b2wgeworCisKKworLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCituYW1lc3BhY2UgVGVzdCB7Citj
bGFzcyBUeXBlTmVlZGluZ0Nhc3Q7CitjbGFzcyBSZWN1cnNpdmVPYmplY3QxOworY2xhc3MgUmVj
dXJzaXZlT2JqZWN0MjsKK2VudW0gY2xhc3MgVW5jYXN0ZWRBbmltYWxzOworZW51bSBjbGFzcyBD
YXN0ZWRBbmltYWxzOworfSAvLyBUZXN0CisvLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMu
CisKKworLy8gVHlwZWRlZnMuCituYW1lc3BhY2UgVGVzdCB7Cit0eXBlZGVmIGludCBDYXN0ZWRP
YmplY3RJZDsKK3R5cGVkZWYgaW50IFVuY2FzdGVkT2JqZWN0SWQ7Cit9IC8vIFRlc3QKKy8vIEVu
ZCBvZiB0eXBlZGVmcy4KKworbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKKworU3RyaW5nIGdldEVu
dW1Db25zdGFudFZhbHVlKGludCBjb2RlKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5n
IGdldEVudW1Db25zdGFudFZhbHVlKFQgZW51bVZhbHVlKQoreworICAgIHJldHVybiBnZXRFbnVt
Q29uc3RhbnRWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KGVudW1WYWx1ZSkpOworfQorCit9IC8vIG5h
bWVzcGFjZSBUZXN0SGVscGVycworCituYW1lc3BhY2UgVGVzdCB7CisKKy8qIEEgZHVtbXkgdHlw
ZSB0aGF0IHJlcXVpcmVzIHJ1bnRpbWUgY2FzdHMsIGFuZCBmb3JjZXMgbm9uLXByaW1pdGl2ZSBy
ZWZlcmVuY2VkIHR5cGVzIHRvIGFsc28gZW1pdCBydW50aW1lIGNhc3QgaGVscGVycy4gKi8KK2Ns
YXNzIFR5cGVOZWVkaW5nQ2FzdCA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKK3B1YmxpYzoK
KyAgICBlbnVtIHsKKyAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAorICAgICAgICBTdHJpbmdTZXQg
PSAxIDw8IDAsCisgICAgICAgIE51bWJlclNldCA9IDEgPDwgMSwKKyAgICAgICAgQW5pbWFsc1Nl
dCA9IDEgPDwgMiwKKyAgICAgICAgSWRTZXQgPSAxIDw8IDMsCisgICAgICAgIFRyZWVTZXQgPSAx
IDw8IDQsCisgICAgICAgIEFsbEZpZWxkc1NldCA9IChTdHJpbmdTZXQgfCBOdW1iZXJTZXQgfCBB
bmltYWxzU2V0IHwgSWRTZXQgfCBUcmVlU2V0KQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTxpbnQg
U1RBVEU+CisgICAgY2xhc3MgQnVpbGRlciB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRy
PEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7CisKKyAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1
aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwor
ICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcihSZWY8LypUeXBlTmVlZGluZ0Nhc3QqL0pTT046
Ok9iamVjdD4mJiBvYmplY3QpCisgICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0
KSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVs
ZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CisgICAgICAgIH0KKyAg
ICAgICAgZnJpZW5kIGNsYXNzIFR5cGVOZWVkaW5nQ2FzdDsKKyAgICBwdWJsaWM6CisKKyAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IFN0cmluZ1NldD4mIHNldFN0cmluZyhjb25zdCBTdHJpbmcmIHZh
bHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU3Ry
aW5nU2V0KSwgcHJvcGVydHlfc3RyaW5nX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXRTdHJpbmcoInN0cmluZyJfcywgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNh
c3RTdGF0ZTxTdHJpbmdTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgTnVtYmVyU2V0PiYgc2V0TnVtYmVyKGludCB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE51bWJlclNldCksIHByb3BlcnR5X251bWJlcl9h
bHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcigibnVtYmVyIl9z
LCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE51bWJlclNldD4oKTsKKyAg
ICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBBbmltYWxzU2V0PiYgc2V0QW5pbWFs
cyhJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzIHZhbHVlKQorICAgICAg
ICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQW5pbWFsc1NldCksIHBy
b3BlcnR5X2FuaW1hbHNfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0
cmluZygiYW5pbWFscyJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVu
dW1Db25zdGFudFZhbHVlKHZhbHVlKSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEFu
aW1hbHNTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgSWRTZXQ+
JiBzZXRJZChpbnQgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBJZFNldCksIHByb3BlcnR5X2lkX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXRJbnRlZ2VyKCJpZCJfcywgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxJZFNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBUcmVlU2V0PiYgc2V0VHJlZShSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVj
dXJzaXZlT2JqZWN0MT4gdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBUcmVlU2V0KSwgcHJvcGVydHlfdHJlZV9hbHJlYWR5X3NldCk7CisgICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJ0cmVlIl9zLCB2YWx1ZSk7CisgICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPFRyZWVTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBSZWY8
VHlwZU5lZWRpbmdDYXN0PiByZWxlYXNlKCkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihUeXBlTmVlZGluZ0Nhc3QpID09IHNpemVv
ZihKU09OOjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7CisKKyAgICAgICAgICAgIFJlZjxKU09OOjpP
YmplY3Q+IGpzb25SZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOworICAgICAgICAg
ICAgYXV0byByZXN1bHQgPSBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxUeXBlTmVlZGlu
Z0Nhc3Q+Kj4oJmpzb25SZXN1bHQpKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
ICAgIH0KKyAgICB9OworCisgICAgLyoKKyAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6Cisg
ICAgICogUmVmPFR5cGVOZWVkaW5nQ2FzdD4gcmVzdWx0ID0gVHlwZU5lZWRpbmdDYXN0OjpjcmVh
dGUoKQorICAgICAqICAgICAuc2V0U3RyaW5nKC4uLikKKyAgICAgKiAgICAgLnNldE51bWJlcigu
Li4pCisgICAgICogICAgIC5zZXRBbmltYWxzKC4uLikKKyAgICAgKiAgICAgLnNldElkKC4uLikK
KyAgICAgKiAgICAgLnNldFRyZWUoLi4uKQorICAgICAqICAgICAucmVsZWFzZSgpOworICAgICAq
LworICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOwor
ICAgIH0KK307CisKK2VudW0gY2xhc3MgVW5jYXN0ZWRBbmltYWxzIHsKKyAgICBQaWdzID0gNCwK
KyAgICBDb3dzID0gNSwKKyAgICBDYXRzID0gNiwKKyAgICBIZW5zID0gMSwKK307IC8vIGVudW0g
Y2xhc3MgVW5jYXN0ZWRBbmltYWxzCisKK2VudW0gY2xhc3MgQ2FzdGVkQW5pbWFscyB7CisgICAg
RHVja3MgPSAwLAorICAgIEhlbnMgPSAxLAorICAgIENyb3dzID0gMiwKKyAgICBGbGFtaW5nb3Mg
PSAzLAorfTsgLy8gZW51bSBjbGFzcyBDYXN0ZWRBbmltYWxzCisKK2NsYXNzIFJlY3Vyc2l2ZU9i
amVjdDEgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CitwdWJsaWM6CisgICAgZW51bSB7Cisg
ICAgICAgIE5vRmllbGRzU2V0ID0gMCwKKyAgICAgICAgQWxsRmllbGRzU2V0ID0gMAorICAgIH07
CisKKyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CisgICAgY2xhc3MgQnVpbGRlciB7CisgICAgcHJp
dmF0ZToKKyAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7CisKKyAgICAgICAg
dGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RB
VEUgfCBTVEVQPio+KHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcihSZWY8LypS
ZWN1cnNpdmVPYmplY3QxKi9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQorICAgICAgICAgICAgOiBt
X3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRf
c3RhdGUpOworICAgICAgICB9CisgICAgICAgIGZyaWVuZCBjbGFzcyBSZWN1cnNpdmVPYmplY3Qx
OworICAgIHB1YmxpYzoKKworICAgICAgICBSZWY8UmVjdXJzaXZlT2JqZWN0MT4gcmVsZWFzZSgp
CisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxk
c1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChz
aXplb2YoUmVjdXJzaXZlT2JqZWN0MSkgPT0gc2l6ZW9mKEpTT046Ok9iamVjdCksIGNhbm5vdF9j
YXN0KTsKKworICAgICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4ganNvblJlc3VsdCA9IG1fcmVz
dWx0LnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFdURk1vdmUo
KnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPFJlY3Vyc2l2ZU9iamVjdDE+Kj4oJmpzb25SZXN1bHQpKTsK
KyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyoK
KyAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CisgICAgICogUmVmPFJlY3Vyc2l2ZU9iamVj
dDE+IHJlc3VsdCA9IFJlY3Vyc2l2ZU9iamVjdDE6OmNyZWF0ZSgpCisgICAgICogICAgIC5yZWxl
YXNlKCk7CisgICAgICovCisgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgp
CisgICAgeworICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKSk7CisgICAgfQorCisgICAgdm9pZCBzZXRPYmooUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDI+IHZhbHVlKQorICAgIHsKKyAgICAgICAg
SlNPTjo6T2JqZWN0QmFzZTo6c2V0T2JqZWN0KCJvYmoiX3MsIFdURk1vdmUodmFsdWUpKTsKKyAg
ICB9Cit9OworCitjbGFzcyBSZWN1cnNpdmVPYmplY3QyIDogcHVibGljIEpTT046Ok9iamVjdEJh
c2UgeworcHVibGljOgorICAgIGVudW0geworICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCisgICAg
ICAgIEFsbEZpZWxkc1NldCA9IDAKKyAgICB9OworCisgICAgdGVtcGxhdGU8aW50IFNUQVRFPgor
ICAgIGNsYXNzIEJ1aWxkZXIgeworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxKU09OOjpP
YmplY3Q+IG1fcmVzdWx0OworCisgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNU
QVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAq
cmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKKyAgICAgICAg
fQorCisgICAgICAgIEJ1aWxkZXIoUmVmPC8qUmVjdXJzaXZlT2JqZWN0MiovSlNPTjo6T2JqZWN0
PiYmIG9iamVjdCkKKyAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQorICAg
ICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwg
YnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKKyAgICAgICAgfQorICAgICAgICBm
cmllbmQgY2xhc3MgUmVjdXJzaXZlT2JqZWN0MjsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgUmVm
PFJlY3Vyc2l2ZU9iamVjdDI+IHJlbGVhc2UoKQorICAgICAgICB7CisgICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwor
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFJlY3Vyc2l2ZU9iamVjdDIpID09IHNp
emVvZihKU09OOjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7CisKKyAgICAgICAgICAgIFJlZjxKU09O
OjpPYmplY3Q+IGpzb25SZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOworICAgICAg
ICAgICAgYXV0byByZXN1bHQgPSBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxSZWN1cnNp
dmVPYmplY3QyPio+KCZqc29uUmVzdWx0KSk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgICAgICB9CisgICAgfTsKKworICAgIC8qCisgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9y
OgorICAgICAqIFJlZjxSZWN1cnNpdmVPYmplY3QyPiByZXN1bHQgPSBSZWN1cnNpdmVPYmplY3Qy
OjpjcmVhdGUoKQorICAgICAqICAgICAucmVsZWFzZSgpOworICAgICAqLworICAgIHN0YXRpYyBC
dWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxk
ZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOworICAgIH0KKworICAgIHZv
aWQgc2V0T2JqKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmpl
Y3QxPiB2YWx1ZSkKKyAgICB7CisgICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldE9iamVjdCgi
b2JqIl9zLCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgfQorfTsKKworfSAvLyBUZXN0CisKK3RlbXBs
YXRlPD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2Fz
dGVkQW5pbWFscz4geworc3RhdGljIHZvaWQgYXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSlNP
Tjo6VmFsdWUqKTsKK307Cit0ZW1wbGF0ZTw+IHN0cnVjdCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD4geworc3RhdGljIFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+IHJ1bnRpbWVDYXN0KFJlZlB0
cjxKU09OOjpWYWx1ZT4mJiB2YWx1ZSk7CitzdGF0aWMgdm9pZCBhc3NlcnRWYWx1ZUhhc0V4cGVj
dGVkVHlwZShKU09OOjpWYWx1ZSopOworfTsKK3RlbXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFp
dHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT4geworc3RhdGlj
IHZvaWQgYXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSlNPTjo6VmFsdWUqKTsKK307Cit0ZW1w
bGF0ZTw+IHN0cnVjdCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJl
Y3Vyc2l2ZU9iamVjdDI+IHsKK3N0YXRpYyB2b2lkIGFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBl
KEpTT046OlZhbHVlKik7Cit9OworCituYW1lc3BhY2UgVGVzdEhlbHBlcnMgeworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBQcm90b2NvbEVudW1UeXBlPgorT3B0aW9uYWw8UHJvdG9jb2xFbnVtVHlwZT4g
cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYpOworCisvLyBFbnVtcyBpbiB0
aGUgJ1Rlc3QnIERvbWFpbgordGVtcGxhdGU8PgorT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVj
dG9yOjpQcm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzPihjb25zdCBTdHJpbmcmKTsKK3Rl
bXBsYXRlPD4KK09wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1h
bHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpD
YXN0ZWRBbmltYWxzPihjb25zdCBTdHJpbmcmKTsKKworfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBl
cnMKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
CisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVs
dEhhc2g7CisKKy8vIEhhc2ggZGVjbGFyYXRpb25zIGluIHRoZSAnVGVzdCcgRG9tYWluCit0ZW1w
bGF0ZTw+CitzdHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VW5j
YXN0ZWRBbmltYWxzPiB7CisgICAgdHlwZWRlZiBJbnRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlRlc3Q6OlVuY2FzdGVkQW5pbWFscz4gSGFzaDsKK307Cit0ZW1wbGF0ZTw+CitzdHJ1Y3QgRGVm
YXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz4geworICAg
IHR5cGVkZWYgSW50SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxz
PiBIYXNoOworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbE9iamVjdHMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1l
LWNhc3RzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorCisjaW5j
bHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCitu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworbmFtZXNwYWNl
IFRlc3RIZWxwZXJzIHsKKworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRf
dmFsdWVzW10gPSB7CisgICAgIkR1Y2tzIiwKKyAgICAiSGVucyIsCisgICAgIkNyb3dzIiwKKyAg
ICAiRmxhbWluZ29zIiwKKyAgICAiUGlncyIsCisgICAgIkNvd3MiLAorICAgICJDYXRzIiwKK307
CisKK1N0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgeworICAgIHJldHVybiBl
bnVtX2NvbnN0YW50X3ZhbHVlc1tjb2RlXTsKK30KKworLy8gRW51bXMgaW4gdGhlICdUZXN0JyBE
b21haW4KKwordGVtcGxhdGU8PgorT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6
VW5jYXN0ZWRBbmltYWxzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90
b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzPihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5n
KQoreworICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsKKyAgICAg
ICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM6OlBp
Z3MsCisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRB
bmltYWxzOjpDb3dzLAorICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6
OlVuY2FzdGVkQW5pbWFsczo6Q2F0cywKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3Rv
Y29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM6OkhlbnMsCisgICAgfTsKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IDQ7ICsraSkKKyAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1f
Y29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKKyAgICAgICAgICAgIHJldHVybiAo
SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzKWNvbnN0YW50VmFsdWVz
W2ldOworCisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKwordGVtcGxhdGU8PgorT3B0aW9u
YWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz4gcGFyc2VFbnVtVmFs
dWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+KGNv
bnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCit7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBj
b25zdGFudFZhbHVlc1tdID0geworICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6
OlRlc3Q6OkNhc3RlZEFuaW1hbHM6OkR1Y2tzLAorICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6
UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM6OkhlbnMsCisgICAgICAgIChzaXplX3QpSW5z
cGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFsczo6Q3Jvd3MsCisgICAgICAgIChz
aXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFsczo6RmxhbWluZ29z
LAorICAgIH07CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCA0OyArK2kpCisgICAgICAgIGlm
IChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tp
XV0pCisgICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3Rl
ZEFuaW1hbHMpY29uc3RhbnRWYWx1ZXNbaV07CisKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
fQorCit9IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycworCisKKwordm9pZCBCaW5kaW5nVHJhaXRz
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+Ojphc3NlcnRWYWx1ZUhh
c0V4cGVjdGVkVHlwZShKU09OOjpWYWx1ZSogdmFsdWUpCit7CisjaWYgQVNTRVJUX0VOQUJMRUQK
KyAgICBBU1NFUlRfQVJHKHZhbHVlLCB2YWx1ZSk7CisgICAgU3RyaW5nIHJlc3VsdDsKKyAgICBi
b29sIGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNTdHJpbmcocmVzdWx0KTsKKyAgICBBU1NFUlQo
Y2FzdFN1Y2NlZWRlZCk7CisgICAgQVNTRVJUKHJlc3VsdCA9PSAiRHVja3MiIHx8IHJlc3VsdCA9
PSAiSGVucyIgfHwgcmVzdWx0ID09ICJDcm93cyIgfHwgcmVzdWx0ID09ICJGbGFtaW5nb3MiKTsK
KyNlbHNlIC8vIEFTU0VSVF9FTkFCTEVECisgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKKyNlbmRp
ZiAvLyBBU1NFUlRfRU5BQkxFRAorfQorCit2b2lkIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5
cGUoSlNPTjo6VmFsdWUqIHZhbHVlKQoreworI2lmIEFTU0VSVF9FTkFCTEVECisgICAgQVNTRVJU
X0FSRyh2YWx1ZSwgdmFsdWUpOworICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG9iamVjdDsKKyAg
ICBib29sIGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNPYmplY3Qob2JqZWN0KTsKKyAgICBBU1NF
UlRfVU5VU0VEKGNhc3RTdWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQpOworICAgIHsKKyAgICAgICAg
YXV0byBzdHJpbmdQb3MgPSBvYmplY3QtPmZpbmQoInN0cmluZyJfcyk7CisgICAgICAgIEFTU0VS
VChzdHJpbmdQb3MgIT0gb2JqZWN0LT5lbmQoKSk7CisgICAgICAgIEJpbmRpbmdUcmFpdHM8U3Ry
aW5nPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoc3RyaW5nUG9zLT52YWx1ZS5nZXQoKSk7
CisgICAgfQorICAgIHsKKyAgICAgICAgYXV0byBudW1iZXJQb3MgPSBvYmplY3QtPmZpbmQoIm51
bWJlciJfcyk7CisgICAgICAgIEFTU0VSVChudW1iZXJQb3MgIT0gb2JqZWN0LT5lbmQoKSk7Cisg
ICAgICAgIEJpbmRpbmdUcmFpdHM8aW50Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUobnVt
YmVyUG9zLT52YWx1ZS5nZXQoKSk7CisgICAgfQorICAgIHsKKyAgICAgICAgYXV0byBhbmltYWxz
UG9zID0gb2JqZWN0LT5maW5kKCJhbmltYWxzIl9zKTsKKyAgICAgICAgQVNTRVJUKGFuaW1hbHNQ
b3MgIT0gb2JqZWN0LT5lbmQoKSk7CisgICAgICAgIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBl
KGFuaW1hbHNQb3MtPnZhbHVlLmdldCgpKTsKKyAgICB9CisgICAgeworICAgICAgICBhdXRvIGlk
UG9zID0gb2JqZWN0LT5maW5kKCJpZCJfcyk7CisgICAgICAgIEFTU0VSVChpZFBvcyAhPSBvYmpl
Y3QtPmVuZCgpKTsKKyAgICAgICAgQmluZGluZ1RyYWl0czxpbnQ+Ojphc3NlcnRWYWx1ZUhhc0V4
cGVjdGVkVHlwZShpZFBvcy0+dmFsdWUuZ2V0KCkpOworICAgIH0KKyAgICB7CisgICAgICAgIGF1
dG8gdHJlZVBvcyA9IG9iamVjdC0+ZmluZCgidHJlZSJfcyk7CisgICAgICAgIEFTU0VSVCh0cmVl
UG9zICE9IG9iamVjdC0+ZW5kKCkpOworICAgICAgICBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVk
VHlwZSh0cmVlUG9zLT52YWx1ZS5nZXQoKSk7CisgICAgfQorCisgICAgaW50IGZvdW5kUHJvcGVy
dGllc0NvdW50ID0gNTsKKyAgICBpZiAoZm91bmRQcm9wZXJ0aWVzQ291bnQgIT0gb2JqZWN0LT5z
aXplKCkpCisgICAgICAgIEZBVEFMKCJVbmV4cGVjdGVkIHByb3BlcnRpZXMgaW4gb2JqZWN0OiAl
c1xuIiwgb2JqZWN0LT50b0pTT05TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7CisjZWxzZSAvLyBB
U1NFUlRfRU5BQkxFRAorICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7CisjZW5kaWYgLy8gQVNTRVJU
X0VOQUJMRUQKK30KKworUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVk
aW5nQ2FzdD4gQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVl
ZGluZ0Nhc3Q+OjpydW50aW1lQ2FzdChSZWZQdHI8SlNPTjo6VmFsdWU+JiYgdmFsdWUpCit7Cisg
ICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcmVzdWx0OworICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9
IHZhbHVlLT5hc09iamVjdChyZXN1bHQpOworICAgIEFTU0VSVF9VTlVTRUQoY2FzdFN1Y2NlZWRl
ZCwgY2FzdFN1Y2NlZWRlZCk7CisgICAgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29s
OjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShyZXN1
bHQuZ2V0KCkpOworICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihJbnNwZWN0b3I6OlByb3RvY29s
OjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3QpID09IHNpemVvZihKU09OOjpPYmplY3RCYXNlKSwgdHlw
ZV9jYXN0X3Byb2JsZW0pOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3QqPihzdGF0aWNfY2FzdDxKU09OOjpPYmplY3RCYXNl
Kj4ocmVzdWx0LmdldCgpKSk7Cit9CisKKwordm9pZCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVk
VHlwZShKU09OOjpWYWx1ZSogdmFsdWUpCit7CisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICBBU1NF
UlRfQVJHKHZhbHVlLCB2YWx1ZSk7CisgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gb2JqZWN0Owor
ICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9IHZhbHVlLT5hc09iamVjdChvYmplY3QpOworICAgIEFT
U0VSVF9VTlVTRUQoY2FzdFN1Y2NlZWRlZCwgY2FzdFN1Y2NlZWRlZCk7CisKKyAgICBpbnQgZm91
bmRQcm9wZXJ0aWVzQ291bnQgPSAwOworICAgIHsKKyAgICAgICAgYXV0byBvYmpQb3MgPSBvYmpl
Y3QtPmZpbmQoIm9iaiJfcyk7CisgICAgICAgIGlmIChvYmpQb3MgIT0gb2JqZWN0LT5lbmQoKSkg
eworICAgICAgICAgICAgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpS
ZWN1cnNpdmVPYmplY3QyPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUob2JqUG9zLT52YWx1
ZS5nZXQoKSk7CisgICAgICAgICAgICArK2ZvdW5kUHJvcGVydGllc0NvdW50OworICAgICAgICB9
CisgICAgfQorICAgIGlmIChmb3VuZFByb3BlcnRpZXNDb3VudCAhPSBvYmplY3QtPnNpemUoKSkK
KyAgICAgICAgRkFUQUwoIlVuZXhwZWN0ZWQgcHJvcGVydGllcyBpbiBvYmplY3Q6ICVzXG4iLCBv
YmplY3QtPnRvSlNPTlN0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKKyNlbHNlIC8vIEFTU0VSVF9F
TkFCTEVECisgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKKyNlbmRpZiAvLyBBU1NFUlRfRU5BQkxF
RAorfQorCit2b2lkIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVj
dXJzaXZlT2JqZWN0Mj46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEpTT046OlZhbHVlKiB2
YWx1ZSkKK3sKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgIEFTU0VSVF9BUkcodmFsdWUsIHZhbHVl
KTsKKyAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBvYmplY3Q7CisgICAgYm9vbCBjYXN0U3VjY2Vl
ZGVkID0gdmFsdWUtPmFzT2JqZWN0KG9iamVjdCk7CisgICAgQVNTRVJUX1VOVVNFRChjYXN0U3Vj
Y2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsKKworICAgIGludCBmb3VuZFByb3BlcnRpZXNDb3VudCA9
IDA7CisgICAgeworICAgICAgICBhdXRvIG9ialBvcyA9IG9iamVjdC0+ZmluZCgib2JqIl9zKTsK
KyAgICAgICAgaWYgKG9ialBvcyAhPSBvYmplY3QtPmVuZCgpKSB7CisgICAgICAgICAgICBCaW5k
aW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+Ojph
c3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShvYmpQb3MtPnZhbHVlLmdldCgpKTsKKyAgICAgICAg
ICAgICsrZm91bmRQcm9wZXJ0aWVzQ291bnQ7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGZv
dW5kUHJvcGVydGllc0NvdW50ICE9IG9iamVjdC0+c2l6ZSgpKQorICAgICAgICBGQVRBTCgiVW5l
eHBlY3RlZCBwcm9wZXJ0aWVzIGluIG9iamVjdDogJXNcbiIsIG9iamVjdC0+dG9KU09OU3RyaW5n
KCkuYXNjaWkoKS5kYXRhKCkpOworI2Vsc2UgLy8gQVNTRVJUX0VOQUJMRUQKKyAgICBVTlVTRURf
UEFSQU0odmFsdWUpOworI2VuZGlmIC8vIEFTU0VSVF9FTkFCTEVECit9CisKK30gLy8gbmFtZXNw
YWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xC
YWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5
cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5h
dGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKKwor
CituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKwor
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgi
CisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUg
IlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLmgiCisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKworbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sQ29uZmlndXJhdGlvbi5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlw
ZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgorCitf
X2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0CitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24ubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBl
LXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCisKKyNp
bXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNr
ZW5kRGlzcGF0Y2hlcnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3Bh
dGNoYWJsZUFnZW50Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3Bl
Y3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVy
bmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXJzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisK
K0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCit7CisgICAgQXVnbWVu
dGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKK30KKworLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKilj
b250cm9sbGVyCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisg
ICAgICAgIHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250cm9s
bGVyID0gY29udHJvbGxlcjsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9j
Cit7CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xFdmVudERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
dHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2lt
cG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDx3dGYvSlNPTlZh
bHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisKKyMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmlu
Zy1ydW50aW1lLWNhc3RzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKworI2ltcG9ydCA8V2ViSW5z
cGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgorCisKK0BjbGFzcyBUZXN0UHJvdG9jb2xU
ZXN0VHlwZU5lZWRpbmdDYXN0OworQGNsYXNzIFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmpl
Y3QxOworQGNsYXNzIFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QyOworCit0eXBlZGVm
IE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzKSB7Cisg
ICAgVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc1BpZ3MsCisgICAgVGVzdFByb3RvY29s
VGVzdFVuY2FzdGVkQW5pbWFsc0Nvd3MsCisgICAgVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5p
bWFsc0NhdHMsCisgICAgVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc0hlbnMsCit9Owor
Cit0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFs
cykgeworICAgIFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzRHVja3MsCisgICAgVGVzdFBy
b3RvY29sVGVzdENhc3RlZEFuaW1hbHNIZW5zLAorICAgIFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRB
bmltYWxzQ3Jvd3MsCisgICAgVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHNGbGFtaW5nb3Ms
Cit9OworCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZh
Y2UgVGVzdFByb3RvY29sVGVzdFR5cGVOZWVkaW5nQ2FzdCA6IFJXSVByb3RvY29sSlNPTk9iamVj
dAorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3RyaW5n
ICosIGlkPiAqKXBheWxvYWQ7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVj
dDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKKy0gKGluc3RhbmNldHlwZSlp
bml0V2l0aFN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcgbnVtYmVyOihpbnQpbnVtYmVyIGFuaW1h
bHM6KFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzKWFuaW1hbHMgaWRlbnRpZmllcjooaW50
KWlkZW50aWZpZXIgdHJlZTooVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgKil0cmVl
OworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICpz
dHJpbmc7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQg
bnVtYmVyOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgVGVz
dFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHMgYW5pbWFsczsKKy8qIHJlcXVpcmVkICovIEBwcm9w
ZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCBpZGVudGlmaWVyOworLyogcmVxdWlyZWQgKi8g
QHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9i
amVjdDEgKnRyZWU7CitAZW5kCisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0
IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSA6IFJXSVBy
b3RvY29sSlNPTk9iamVjdAorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0
aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQ7CistIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKKy8q
IG9wdGlvbmFsICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIFRlc3RQcm90b2NvbFRl
c3RSZWN1cnNpdmVPYmplY3QyICpvYmo7CitAZW5kCisKK19fYXR0cmlidXRlX18oKHZpc2liaWxp
dHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2Jq
ZWN0MiA6IFJXSVByb3RvY29sSlNPTk9iamVjdAorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5
bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQ7CistIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNv
bk9iamVjdDsKKy8qIG9wdGlvbmFsICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIFRl
c3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxICpvYmo7CitAZW5kCisKKworCisKKworCisj
aW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3Rz
Lmg+CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKKworIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbEludGVybmFsLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0
eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQ
cm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdt
ZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+
CisKKworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorCisjIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wu
aCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4K
KworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlw
ZT4KK09wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpOworCitpbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29s
VGVzdFVuY2FzdGVkQW5pbWFscyB2YWx1ZSkKK3sKKyAgICBzd2l0Y2godmFsdWUpIHsKKyAgICBj
YXNlIFRlc3RQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHNQaWdzOgorICAgICAgICByZXR1cm4g
IlBpZ3MiX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzQ293czoK
KyAgICAgICAgcmV0dXJuICJDb3dzIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sVGVzdFVuY2Fz
dGVkQW5pbWFsc0NhdHM6CisgICAgICAgIHJldHVybiAiQ2F0cyJfczsKKyAgICBjYXNlIFRlc3RQ
cm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHNIZW5zOgorICAgICAgICByZXR1cm4gIkhlbnMiX3M7
CisgICAgfQorfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sVGVz
dFVuY2FzdGVkQW5pbWFscz4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUp
Cit7CisgICAgaWYgKHZhbHVlID09ICJQaWdzIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2Nv
bFRlc3RVbmNhc3RlZEFuaW1hbHNQaWdzOworICAgIGlmICh2YWx1ZSA9PSAiQ293cyIpCisgICAg
ICAgIHJldHVybiBUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzQ293czsKKyAgICBpZiAo
dmFsdWUgPT0gIkNhdHMiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sVGVzdFVuY2FzdGVk
QW5pbWFsc0NhdHM7CisgICAgaWYgKHZhbHVlID09ICJIZW5zIikKKyAgICAgICAgcmV0dXJuIFRl
c3RQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHNIZW5zOworICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7Cit9CisKK2lubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xUZXN0
Q2FzdGVkQW5pbWFscyB2YWx1ZSkKK3sKKyAgICBzd2l0Y2godmFsdWUpIHsKKyAgICBjYXNlIFRl
c3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzRHVja3M6CisgICAgICAgIHJldHVybiAiRHVja3Mi
X3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFsc0hlbnM6CisgICAgICAg
IHJldHVybiAiSGVucyJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxz
Q3Jvd3M6CisgICAgICAgIHJldHVybiAiQ3Jvd3MiX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xU
ZXN0Q2FzdGVkQW5pbWFsc0ZsYW1pbmdvczoKKyAgICAgICAgcmV0dXJuICJGbGFtaW5nb3MiX3M7
CisgICAgfQorfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sVGVz
dENhc3RlZEFuaW1hbHM+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQor
eworICAgIGlmICh2YWx1ZSA9PSAiRHVja3MiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29s
VGVzdENhc3RlZEFuaW1hbHNEdWNrczsKKyAgICBpZiAodmFsdWUgPT0gIkhlbnMiKQorICAgICAg
ICByZXR1cm4gVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHNIZW5zOworICAgIGlmICh2YWx1
ZSA9PSAiQ3Jvd3MiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1h
bHNDcm93czsKKyAgICBpZiAodmFsdWUgPT0gIkZsYW1pbmdvcyIpCisgICAgICAgIHJldHVybiBU
ZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFsc0ZsYW1pbmdvczsKKyAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
dHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgi
CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBh
cnNlci5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZh
dGUuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGludGVyZmFjZSBUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMgKFRlc3REb21haW4pCisKKysgKHZvaWQpX3BhcnNlVHlwZU5l
ZWRpbmdDYXN0OihUZXN0UHJvdG9jb2xUZXN0VHlwZU5lZWRpbmdDYXN0ICoqKW91dFZhbHVlIGZy
b21QYXlsb2FkOihpZClwYXlsb2FkOworKyAodm9pZClfcGFyc2VDYXN0ZWRPYmplY3RJZDooTlNO
dW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisrICh2b2lkKV9wYXJz
ZVVuY2FzdGVkT2JqZWN0SWQ6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClw
YXlsb2FkOworKyAodm9pZClfcGFyc2VVbmNhc3RlZEFuaW1hbHM6KE5TTnVtYmVyICoqKW91dFZh
bHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworKyAodm9pZClfcGFyc2VDYXN0ZWRBbmltYWxz
OihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQp
X3BhcnNlUmVjdXJzaXZlT2JqZWN0MTooVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEg
Kiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisrICh2b2lkKV9wYXJzZVJlY3Vy
c2l2ZU9iamVjdDI6KFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QyICoqKW91dFZhbHVl
IGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFRlc3REb21haW4pCisKKysgKHZvaWQpX3BhcnNlVHlw
ZU5lZWRpbmdDYXN0OihUZXN0UHJvdG9jb2xUZXN0VHlwZU5lZWRpbmdDYXN0ICoqKW91dFZhbHVl
IGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURf
VFlQRShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gW1tU
ZXN0UHJvdG9jb2xUZXN0VHlwZU5lZWRpbmdDYXN0IGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5
bG9hZF07Cit9CisKKysgKHZvaWQpX3BhcnNlQ2FzdGVkT2JqZWN0SWQ6KE5TTnVtYmVyICoqKW91
dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9CQURfVFlQRShwYXlsb2FkLCBbTlNOdW1iZXIgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSAo
TlNOdW1iZXIgKilwYXlsb2FkOworfQorCisrICh2b2lkKV9wYXJzZVVuY2FzdGVkT2JqZWN0SWQ6
KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNOdW1iZXIgY2xhc3NdKTsKKyAg
ICAqb3V0VmFsdWUgPSAoTlNOdW1iZXIgKilwYXlsb2FkOworfQorCisrICh2b2lkKV9wYXJzZVVu
Y2FzdGVkQW5pbWFsczooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxv
YWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmlu
ZyBjbGFzc10pOworICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHM+
IHJlc3VsdCA9IEluc3BlY3Rvcjo6ZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbFRlc3RV
bmNhc3RlZEFuaW1hbHM+KHBheWxvYWQpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX0VO
VU1fVkFMVUUocmVzdWx0LCBAIlVuY2FzdGVkQW5pbWFscyIpOworICAgICpvdXRWYWx1ZSA9IEAo
cmVzdWx0LnZhbHVlKCkpOworfQorCisrICh2b2lkKV9wYXJzZUNhc3RlZEFuaW1hbHM6KE5TTnVt
YmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKKyAgICBPcHRp
b25hbDxUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFscz4gcmVzdWx0ID0gSW5zcGVjdG9yOjpm
cm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHM+KHBheWxvYWQp
OworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX0VOVU1fVkFMVUUocmVzdWx0LCBAIkNhc3Rl
ZEFuaW1hbHMiKTsKKyAgICAqb3V0VmFsdWUgPSBAKHJlc3VsdC52YWx1ZSgpKTsKK30KKworKyAo
dm9pZClfcGFyc2VSZWN1cnNpdmVPYmplY3QxOihUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2Jq
ZWN0MSAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOworICAg
ICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgYWxsb2NdIGlu
aXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKK30KKworKyAodm9pZClfcGFyc2VSZWN1cnNpdmVPYmpl
Y3QyOihUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MiAqKilvdXRWYWx1ZSBmcm9tUGF5
bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5
bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOworICAgICpvdXRWYWx1ZSA9IFtbVGVzdFByb3Rv
Y29sVGVzdFJlY3Vyc2l2ZU9iamVjdDIgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsK
K30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
Lm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbiBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90
b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5o
IgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4K
KyNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgor
Cit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3Rv
Y29sVGVzdFR5cGVOZWVkaW5nQ2FzdAorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2Fk
Oihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCit7CisgICAg
aWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBU
SFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJzdHJpbmciXSwg
QCJzdHJpbmciKTsKKyAgICBzZWxmLnN0cmluZyA9IHBheWxvYWRbQCJzdHJpbmciXTsKKworICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAIm51bWJlciJd
LCBAIm51bWJlciIpOworICAgIHNlbGYubnVtYmVyID0gW3BheWxvYWRbQCJudW1iZXIiXSBpbnRl
Z2VyVmFsdWVdOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShw
YXlsb2FkW0AiYW5pbWFscyJdLCBAImFuaW1hbHMiKTsKKyAgICBPcHRpb25hbDxUZXN0UHJvdG9j
b2xUZXN0Q2FzdGVkQW5pbWFscz4gYW5pbWFscyA9IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJv
dG9jb2xUZXN0Q2FzdGVkQW5pbWFscz4ocGF5bG9hZFtAImFuaW1hbHMiXSk7CisgICAgVEhST1df
RVhDRVBUSU9OX0ZPUl9CQURfRU5VTV9WQUxVRShhbmltYWxzLCBAImFuaW1hbHMiKTsKKyAgICBz
ZWxmLmFuaW1hbHMgPSBhbmltYWxzLnZhbHVlKCk7CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9S
X1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJpZCJdLCBAImlkIik7CisgICAgc2VsZi5pZGVu
dGlmaWVyID0gW3BheWxvYWRbQCJpZCJdIGludGVnZXJWYWx1ZV07CisKKyAgICBUSFJPV19FWENF
UFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJ0cmVlIl0sIEAidHJlZSIpOwor
ICAgIHNlbGYudHJlZSA9IFtbVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgYWxsb2Nd
IGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkW0AidHJlZSJdXTsKKworICAgIHJldHVybiBzZWxmOwor
fQorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNP
Tk9iamVjdCAqKW9iamVjdAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09O
T2JqZWN0OltvYmplY3QgdG9KU09OT2JqZWN0XS5nZXQoKV0pKQorICAgICAgICByZXR1cm4gbmls
OworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFN0cmlu
ZzooTlNTdHJpbmcgKilzdHJpbmcgbnVtYmVyOihpbnQpbnVtYmVyIGFuaW1hbHM6KFRlc3RQcm90
b2NvbFRlc3RDYXN0ZWRBbmltYWxzKWFuaW1hbHMgaWRlbnRpZmllcjooaW50KWlkZW50aWZpZXIg
dHJlZTooVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgKil0cmVlCit7CisgICAgaWYg
KCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBUSFJP
V19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHN0cmluZywgQCJzdHJpbmciKTsKKyAg
ICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHRyZWUsIEAidHJlZSIpOwor
CisgICAgc2VsZi5zdHJpbmcgPSBzdHJpbmc7CisgICAgc2VsZi5udW1iZXIgPSBudW1iZXI7Cisg
ICAgc2VsZi5hbmltYWxzID0gYW5pbWFsczsKKyAgICBzZWxmLmlkZW50aWZpZXIgPSBpZGVudGlm
aWVyOworICAgIHNlbGYudHJlZSA9IHRyZWU7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAo
dm9pZClzZXRTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nCit7CisgICAgW3N1cGVyIHNldFN0cmlu
ZzpzdHJpbmcgZm9yS2V5OkAic3RyaW5nIl07Cit9CisKKy0gKE5TU3RyaW5nICopc3RyaW5nCit7
CisgICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJzdHJpbmciXTsKK30KKworLSAodm9p
ZClzZXROdW1iZXI6KGludCludW1iZXIKK3sKKyAgICBbc3VwZXIgc2V0SW50ZWdlcjpudW1iZXIg
Zm9yS2V5OkAibnVtYmVyIl07Cit9CisKKy0gKGludCludW1iZXIKK3sKKyAgICByZXR1cm4gW3N1
cGVyIGludGVnZXJGb3JLZXk6QCJudW1iZXIiXTsKK30KKworLSAodm9pZClzZXRBbmltYWxzOihU
ZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFscylhbmltYWxzCit7CisgICAgW3N1cGVyIHNldFN0
cmluZzp0b1Byb3RvY29sU3RyaW5nKGFuaW1hbHMpIGZvcktleTpAImFuaW1hbHMiXTsKK30KKwor
LSAoVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHMpYW5pbWFscworeworICAgIHJldHVybiBm
cm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHM+KFtzdXBlciBz
dHJpbmdGb3JLZXk6QCJhbmltYWxzIl0pLnZhbHVlKCk7Cit9CisKKy0gKHZvaWQpc2V0SWRlbnRp
ZmllcjooaW50KWlkZW50aWZpZXIKK3sKKyAgICBbc3VwZXIgc2V0SW50ZWdlcjppZGVudGlmaWVy
IGZvcktleTpAImlkIl07Cit9CisKKy0gKGludClpZGVudGlmaWVyCit7CisgICAgcmV0dXJuIFtz
dXBlciBpbnRlZ2VyRm9yS2V5OkAiaWQiXTsKK30KKworLSAodm9pZClzZXRUcmVlOihUZXN0UHJv
dG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSAqKXRyZWUKK3sKKyAgICBbc3VwZXIgc2V0T2JqZWN0
OnRyZWUgZm9yS2V5OkAidHJlZSJdOworfQorCistIChUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZl
T2JqZWN0MSAqKXRyZWUKK3sKKyAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9iamVjdCA9IFtz
dXBlciBvYmplY3RGb3JLZXk6QCJ0cmVlIl07CisgICAgaWYgKCFvYmplY3QpCisgICAgICAgIHJl
dHVybiBuaWw7CisgICAgcmV0dXJuIFtbVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEg
YWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDpbW3N1cGVyIG9iamVjdEZvcktleTpAInRyZWUiXSB0
b0pTT05PYmplY3RdLmdldCgpXTsKK30KKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gVGVzdFBy
b3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5
bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZAorewor
ICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisg
ICAgc2VsZi5vYmogPSBbW1Rlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QyIGFsbG9jXSBp
bml0V2l0aFBheWxvYWQ6cGF5bG9hZFtAIm9iaiJdXTsKKworICAgIHJldHVybiBzZWxmOworfQor
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9i
amVjdCAqKW9iamVjdAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09OT2Jq
ZWN0OltvYmplY3QgdG9KU09OT2JqZWN0XS5nZXQoKV0pKQorICAgICAgICByZXR1cm4gbmlsOwor
CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpc2V0T2JqOihUZXN0UHJvdG9jb2xUZXN0
UmVjdXJzaXZlT2JqZWN0MiAqKW9iagoreworICAgIFtzdXBlciBzZXRPYmplY3Q6b2JqIGZvcktl
eTpAIm9iaiJdOworfQorCistIChUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MiAqKW9i
agoreworICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb2JqZWN0ID0gW3N1cGVyIG9iamVjdEZv
cktleTpAIm9iaiJdOworICAgIGlmICghb2JqZWN0KQorICAgICAgICByZXR1cm4gbmlsOworICAg
IHJldHVybiBbW1Rlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QyIGFsbG9jXSBpbml0V2l0
aEpTT05PYmplY3Q6W1tzdXBlciBvYmplY3RGb3JLZXk6QCJvYmoiXSB0b0pTT05PYmplY3RdLmdl
dCgpXTsKK30KKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVGVzdFJlY3Vy
c2l2ZU9iamVjdDIKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBO
U0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZAoreworICAgIGlmICghKHNlbGYg
PSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgc2VsZi5vYmogPSBb
W1Rlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6
cGF5bG9hZFtAIm9iaiJdXTsKKworICAgIHJldHVybiBzZWxmOworfQorLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9iamVjdAor
eworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmplY3QgdG9K
U09OT2JqZWN0XS5nZXQoKV0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgcmV0dXJuIHNl
bGY7Cit9CisKKy0gKHZvaWQpc2V0T2JqOihUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0
MSAqKW9iagoreworICAgIFtzdXBlciBzZXRPYmplY3Q6b2JqIGZvcktleTpAIm9iaiJdOworfQor
CistIChUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSAqKW9iagoreworICAgIFJXSVBy
b3RvY29sSlNPTk9iamVjdCAqb2JqZWN0ID0gW3N1cGVyIG9iamVjdEZvcktleTpAIm9iaiJdOwor
ICAgIGlmICghb2JqZWN0KQorICAgICAgICByZXR1cm4gbmlsOworICAgIHJldHVybiBbW1Rlc3RQ
cm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxIGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6W1tz
dXBlciBvYmplY3RGb3JLZXk6QCJvYmoiXSB0b0pTT05PYmplY3RdLmdldCgpXTsKK30KKworQGVu
ZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBl
LXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtd2l0aC1vcGVuLXBhcmFtZXRl
cnMuanNvbi1yZXN1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2Q1Nzc2MmE4ZmY4YmU0YTlhZTQ5ZGM5ZWY1NDdi
OWQzMjEzZGM3YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpz
b24tcmVzdWx0CkBAIC0wLDAgKzEsMTExMCBAQAorIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJh
Y2tlbmRDb21tYW5kcy5qcy5pbgorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5
cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcy5pbgor
CisjIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5q
c29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNl
CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworI2luY2x1
ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JGcm9udGVuZFJvdXRlci5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgQWx0
ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHZvaWQgc2V0QmFja2VuZERp
c3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNr
ZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KKyAgICBCYWNrZW5kRGlzcGF0
Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRj
aGVyLmdldCgpOyB9Citwcml2YXRlOgorICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9i
YWNrZW5kRGlzcGF0Y2hlcjsKK307CisKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgor
CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjIyMg
RW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4g
RmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJv
dG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNw
YWNlIEluc3BlY3RvciB7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCisKKworfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hl
cnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpz
b24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYv
SlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQorI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIK
KyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMj
IEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTog
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29s
T2JqZWN0cy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBGcm9udGVu
ZFJvdXRlcjsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RG
cm9udGVuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3Bh
dGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtd2l0aC1v
cGVuLXBhcmFtZXRlcnMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVy
cy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Ig
eworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMu
aAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtd2l0aC1vcGVuLXBhcmFt
ZXRlcnMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBl
cy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Ig
eworCisKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworCisKKy8vIEZvcndhcmQgZGVjbGFyYXRp
b25zLgorbmFtZXNwYWNlIFRlc3QgeworY2xhc3MgTm9PcGVuUGFyYW1ldGVyczsKK2NsYXNzIE9w
ZW5QYXJhbWV0ZXJzOworfSAvLyBUZXN0CisvLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMu
CisKKworCisKK25hbWVzcGFjZSBUZXN0IHsKKworY2xhc3MgTm9PcGVuUGFyYW1ldGVycyA6IHB1
YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKK3B1YmxpYzoKKyAgICBlbnVtIHsKKyAgICAgICAgTm9G
aWVsZHNTZXQgPSAwLAorICAgICAgICBPbmVTZXQgPSAxIDw8IDAsCisgICAgICAgIFR3b1NldCA9
IDEgPDwgMSwKKyAgICAgICAgQWxsRmllbGRzU2V0ID0gKE9uZVNldCB8IFR3b1NldCkKKyAgICB9
OworCisgICAgdGVtcGxhdGU8aW50IFNUQVRFPgorICAgIGNsYXNzIEJ1aWxkZXIgeworICAgIHBy
aXZhdGU6CisgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVzdWx0OworCisgICAgICAg
IHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNU
QVRFIHwgU1RFUD4qPih0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXIoUmVmPC8q
Tm9PcGVuUGFyYW1ldGVycyovSlNPTjo6T2JqZWN0PiYmIG9iamVjdCkKKyAgICAgICAgICAgIDog
bV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxF
X0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0
X3N0YXRlKTsKKyAgICAgICAgfQorICAgICAgICBmcmllbmQgY2xhc3MgTm9PcGVuUGFyYW1ldGVy
czsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IE9uZVNldD4mIHNldE9u
ZShkb3VibGUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBPbmVTZXQpLCBwcm9wZXJ0eV9vbmVfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAg
bV9yZXN1bHQtPnNldERvdWJsZSgib25lIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPE9uZVNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBUd29TZXQ+JiBzZXRUd28oZG91YmxlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBD
T01QSUxFX0FTU0VSVCghKFNUQVRFICYgVHdvU2V0KSwgcHJvcGVydHlfdHdvX2FscmVhZHlfc2V0
KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXREb3VibGUoInR3byJfcywgdmFsdWUpOworICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUd29TZXQ+KCk7CisgICAgICAgIH0KKworICAgICAg
ICBSZWY8Tm9PcGVuUGFyYW1ldGVycz4gcmVsZWFzZSgpCisgICAgICAgIHsKKyAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFk
eSk7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoTm9PcGVuUGFyYW1ldGVycykg
PT0gc2l6ZW9mKEpTT046Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsKKworICAgICAgICAgICAgUmVm
PEpTT046Ok9iamVjdD4ganNvblJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7Cisg
ICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPE5v
T3BlblBhcmFtZXRlcnM+Kj4oJmpzb25SZXN1bHQpKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyoKKyAgICAgKiBTeW50aGV0aWMgY29uc3Ry
dWN0b3I6CisgICAgICogUmVmPE5vT3BlblBhcmFtZXRlcnM+IHJlc3VsdCA9IE5vT3BlblBhcmFt
ZXRlcnM6OmNyZWF0ZSgpCisgICAgICogICAgIC5zZXRPbmUoLi4uKQorICAgICAqICAgICAuc2V0
VHdvKC4uLikKKyAgICAgKiAgICAgLnJlbGVhc2UoKTsKKyAgICAgKi8KKyAgICBzdGF0aWMgQnVp
bGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBCdWlsZGVy
PE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICB9Cit9OworCitjbGFz
cyBPcGVuUGFyYW1ldGVycyA6IHB1YmxpYyBKU09OOjpPYmplY3QgeworcHVibGljOgorICAgIGVu
dW0geworICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCisgICAgICAgIEFscGhhU2V0ID0gMSA8PCAw
LAorICAgICAgICBCZXRhU2V0ID0gMSA8PCAxLAorICAgICAgICBBbGxGaWVsZHNTZXQgPSAoQWxw
aGFTZXQgfCBCZXRhU2V0KQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CisgICAg
Y2xhc3MgQnVpbGRlciB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPEpTT046Ok9iamVj
dD4gbV9yZXN1bHQ7CisKKyAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUg
fCBTVEVQPiYgY2FzdFN0YXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICpyZWlu
dGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOworICAgICAgICB9CisK
KyAgICAgICAgQnVpbGRlcihSZWY8LypPcGVuUGFyYW1ldGVycyovSlNPTjo6T2JqZWN0PiYmIG9i
amVjdCkKKyAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQorICAgICAgICB7
CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRl
cl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKKyAgICAgICAgfQorICAgICAgICBmcmllbmQg
Y2xhc3MgT3BlblBhcmFtZXRlcnM7CisgICAgcHVibGljOgorCisgICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBBbHBoYVNldD4mIHNldEFscGhhKGRvdWJsZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEFscGhhU2V0KSwgcHJvcGVydHlfYWxwaGFf
YWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldERvdWJsZSgiYWxwaGEiX3Ms
IHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8QWxwaGFTZXQ+KCk7CisgICAg
ICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQmV0YVNldD4mIHNldEJldGEoZG91Ymxl
IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
QmV0YVNldCksIHByb3BlcnR5X2JldGFfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1
bHQtPnNldERvdWJsZSgiYmV0YSJfcywgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxCZXRhU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgUmVmPE9wZW5QYXJhbWV0ZXJz
PiByZWxlYXNlKCkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUg
PT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKHNpemVvZihPcGVuUGFyYW1ldGVycykgPT0gc2l6ZW9mKEpTT046Ok9iamVjdCks
IGNhbm5vdF9jYXN0KTsKKworICAgICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4ganNvblJlc3Vs
dCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9
IFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPE9wZW5QYXJhbWV0ZXJzPio+KCZqc29uUmVz
dWx0KSk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgfTsKKwor
ICAgIC8qCisgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgorICAgICAqIFJlZjxPcGVuUGFy
YW1ldGVycz4gcmVzdWx0ID0gT3BlblBhcmFtZXRlcnM6OmNyZWF0ZSgpCisgICAgICogICAgIC5z
ZXRBbHBoYSguLi4pCisgICAgICogICAgIC5zZXRCZXRhKC4uLikKKyAgICAgKiAgICAgLnJlbGVh
c2UoKTsKKyAgICAgKi8KKyAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkK
KyAgICB7CisgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpKTsKKyAgICB9CisKKyAgICAvLyBQcm9wZXJ0eSBuYW1lcyBmb3IgdHlwZSBnZW5l
cmF0ZWQgYXMgb3Blbi4KKyAgICBOb25lIHN0YXRpYyBjb25zdCBjaGFyKiBBbHBoYTsKK307CisK
K30gLy8gVGVzdAorCisKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorCisjIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSB0eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwor
bmFtZXNwYWNlIFByb3RvY29sIHsKKworY29uc3QgY2hhciogSW5zcGVjdG9yOjpQcm90b2NvbDo6
VGVzdDo6T3BlblBhcmFtZXRlcnM6OkFscGhhID0gImFscGhhIjsKKworfSAvLyBuYW1lc3BhY2Ug
UHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sT2JqZWN0cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tl
bmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13
aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tl
bmREaXNwYXRjaGVycy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworCisKK25hbWVz
cGFjZSBJbnNwZWN0b3IgeworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSB0eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSAiVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIK
KyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwor
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFj
a2VuZERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1
cmF0aW9uLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXdpdGgtb3Bl
bi1wYXJhbWV0ZXJzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+CisKK19fYXR0cmlidXRlX18o
KHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1
cmF0aW9uIDogTlNPYmplY3QKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENv
bmZpZ3VyYXRpb24uaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
bi5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtd2l0aC1vcGVuLXBh
cmFtZXRlcnMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNp
bXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKKworI2ltcG9ydCAiVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5o
IgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4K
KyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5o
PgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXJzLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9u
IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNv
bnRyb2xsZXIqIF9jb250cm9sbGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250
cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAg
ICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5p
bDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVy
OworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbc3VwZXIg
ZGVhbGxvY107Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZp
Z3VyYXRpb24ubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hl
cnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXdpdGgtb3Blbi1w
YXJhbWV0ZXJzLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisj
aW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CisKK3VzaW5nIG5h
bWVzcGFjZSBJbnNwZWN0b3I7CisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERp
c3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbiBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPEZvdW5kYXRp
b24vRm91bmRhdGlvbi5oPgorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09O
T2JqZWN0Lmg+CisKKworQGNsYXNzIFRlc3RQcm90b2NvbFRlc3ROb09wZW5QYXJhbWV0ZXJzOwor
QGNsYXNzIFRlc3RQcm90b2NvbFRlc3RPcGVuUGFyYW1ldGVyczsKKworCisKK19fYXR0cmlidXRl
X18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUZXN0
Tm9PcGVuUGFyYW1ldGVycyA6IFJXSVByb3RvY29sSlNPTk9iamVjdAorLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQ7
CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09O
T2JqZWN0ICopanNvbk9iamVjdDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aE9uZTooZG91Ymxl
KW9uZSB0d286KGRvdWJsZSl0d287CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21p
YywgYXNzaWduKSBkb3VibGUgb25lOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9t
aWMsIGFzc2lnbikgZG91YmxlIHR3bzsKK0BlbmQKKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0
eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbFRlc3RPcGVuUGFyYW1ldGVy
cyA6IFJXSVByb3RvY29sSlNPTk9iamVjdAorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9h
ZDooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQ7CistIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9i
amVjdDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aEFscGhhOihkb3VibGUpYWxwaGEgYmV0YToo
ZG91YmxlKWJldGE7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWdu
KSBkb3VibGUgYWxwaGE7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNz
aWduKSBkb3VibGUgYmV0YTsKK0BlbmQKKworCisKKworCisKKyNpbXBvcnQgPFdlYkluc3BlY3Rv
ci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMuaD4KKworIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2wuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwu
aAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtd2l0aC1vcGVuLXBhcmFt
ZXRlcnMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBv
cnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZh
dGUuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJv
bGxlci5oPgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKworCisKKworIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUt
d2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9y
L1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsK
KwordGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgorT3B0aW9uYWw8T2JqQ0VudW1UeXBl
PiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7CisKKworCit9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1t
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRoLW9wZW4tcGFyYW1l
dGVycy5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9y
dCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2Nv
bC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgorI2ltcG9ydCA8V2ViSW5z
cGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKwordXNpbmcgbmFtZXNwYWNl
IEluc3BlY3RvcjsKKworQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFRl
c3REb21haW4pCisKKysgKHZvaWQpX3BhcnNlTm9PcGVuUGFyYW1ldGVyczooVGVzdFByb3RvY29s
VGVzdE5vT3BlblBhcmFtZXRlcnMgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7
CisrICh2b2lkKV9wYXJzZU9wZW5QYXJhbWV0ZXJzOihUZXN0UHJvdG9jb2xUZXN0T3BlblBhcmFt
ZXRlcnMgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisKK0BlbmQKKworQGlt
cGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoVGVzdERvbWFpbikKKwor
KyAodm9pZClfcGFyc2VOb09wZW5QYXJhbWV0ZXJzOihUZXN0UHJvdG9jb2xUZXN0Tm9PcGVuUGFy
YW1ldGVycyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOwor
ICAgICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sVGVzdE5vT3BlblBhcmFtZXRlcnMgYWxsb2Nd
IGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKK30KKworKyAodm9pZClfcGFyc2VPcGVuUGFyYW1l
dGVyczooVGVzdFByb3RvY29sVGVzdE9wZW5QYXJhbWV0ZXJzICoqKW91dFZhbHVlIGZyb21QYXls
b2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXls
b2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9j
b2xUZXN0T3BlblBhcmFtZXRlcnMgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKK30K
KworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1t
CisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbiBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbElu
dGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2lt
cG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKyNpbXBv
cnQgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgorCit1c2lu
ZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVGVz
dE5vT3BlblBhcmFtZXRlcnMKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9u
bnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZAoreworICAgIGlmICgh
KHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgVEhST1df
RVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0Aib25lIl0sIEAib25lIik7
CisgICAgc2VsZi5vbmUgPSBbcGF5bG9hZFtAIm9uZSJdIGRvdWJsZVZhbHVlXTsKKworICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAInR3byJdLCBAInR3
byIpOworICAgIHNlbGYudHdvID0gW3BheWxvYWRbQCJ0d28iXSBkb3VibGVWYWx1ZV07CisKKyAg
ICByZXR1cm4gc2VsZjsKK30KKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0
OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilvYmplY3QKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1
cGVyIGluaXRXaXRoSlNPTk9iamVjdDpbb2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0KCldKSkKKyAg
ICAgICAgcmV0dXJuIG5pbDsKKworICAgIHJldHVybiBzZWxmOworfQorCistIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhPbmU6KGRvdWJsZSlvbmUgdHdvOihkb3VibGUpdHdvCit7CisgICAgaWYgKCEo
c2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBzZWxmLm9u
ZSA9IG9uZTsKKyAgICBzZWxmLnR3byA9IHR3bzsKKworICAgIHJldHVybiBzZWxmOworfQorCist
ICh2b2lkKXNldE9uZTooZG91YmxlKW9uZQoreworICAgIFtzdXBlciBzZXREb3VibGU6b25lIGZv
cktleTpAIm9uZSJdOworfQorCistIChkb3VibGUpb25lCit7CisgICAgcmV0dXJuIFtzdXBlciBk
b3VibGVGb3JLZXk6QCJvbmUiXTsKK30KKworLSAodm9pZClzZXRUd286KGRvdWJsZSl0d28KK3sK
KyAgICBbc3VwZXIgc2V0RG91YmxlOnR3byBmb3JLZXk6QCJ0d28iXTsKK30KKworLSAoZG91Ymxl
KXR3bworeworICAgIHJldHVybiBbc3VwZXIgZG91YmxlRm9yS2V5OkAidHdvIl07Cit9CisKK0Bl
bmQKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFRlc3RPcGVuUGFyYW1ldGVycworCist
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0
cmluZyAqLCBpZD4gKilwYXlsb2FkCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkp
CisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVE
X1BST1BFUlRZKHBheWxvYWRbQCJhbHBoYSJdLCBAImFscGhhIik7CisgICAgc2VsZi5hbHBoYSA9
IFtwYXlsb2FkW0AiYWxwaGEiXSBkb3VibGVWYWx1ZV07CisKKyAgICBUSFJPV19FWENFUFRJT05f
Rk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJiZXRhIl0sIEAiYmV0YSIpOworICAgIHNl
bGYuYmV0YSA9IFtwYXlsb2FkW0AiYmV0YSJdIGRvdWJsZVZhbHVlXTsKKworICAgIHJldHVybiBz
ZWxmOworfQorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3Rv
Y29sSlNPTk9iamVjdCAqKW9iamVjdAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdp
dGhKU09OT2JqZWN0OltvYmplY3QgdG9KU09OT2JqZWN0XS5nZXQoKV0pKQorICAgICAgICByZXR1
cm4gbmlsOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0
aEFscGhhOihkb3VibGUpYWxwaGEgYmV0YTooZG91YmxlKWJldGEKK3sKKyAgICBpZiAoIShzZWxm
ID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHNlbGYuYWxwaGEg
PSBhbHBoYTsKKyAgICBzZWxmLmJldGEgPSBiZXRhOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisK
Ky0gKHZvaWQpc2V0QWxwaGE6KGRvdWJsZSlhbHBoYQoreworICAgIFtzdXBlciBzZXREb3VibGU6
YWxwaGEgZm9yS2V5OkAiYWxwaGEiXTsKK30KKworLSAoZG91YmxlKWFscGhhCit7CisgICAgcmV0
dXJuIFtzdXBlciBkb3VibGVGb3JLZXk6QCJhbHBoYSJdOworfQorCistICh2b2lkKXNldEJldGE6
KGRvdWJsZSliZXRhCit7CisgICAgW3N1cGVyIHNldERvdWJsZTpiZXRhIGZvcktleTpAImJldGEi
XTsKK30KKworLSAoZG91YmxlKWJldGEKK3sKKyAgICByZXR1cm4gW3N1cGVyIGRvdWJsZUZvcktl
eTpAImJldGEiXTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlw
ZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9leHBlY3RlZC92ZXJzaW9uLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3ZlcnNpb24uanNvbi1yZXN1bHQK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZWY3NzhhMDZjN2YyNTExZjZjMjM0MTg2NzI1NTA1NjgzN2ZiZmEzZgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC92ZXJzaW9uLmpzb24tcmVzdWx0CkBAIC0wLDAgKzEsODI3IEBACisjIyMg
QmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzLmluCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lvbi5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworLy8gVmVyc2lvbkRvbWFpbgorSW5zcGVjdG9yQmFja2VuZC5yZWdp
c3RlckRvbWFpbigiVmVyc2lvbkRvbWFpbiIsIG51bGwpOworSW5zcGVjdG9yQmFja2VuZC5yZWdp
c3RlclZlcnNpb24oIlZlcnNpb25Eb21haW4iLCA0Mik7CitJbnNwZWN0b3JCYWNrZW5kLmFjdGl2
YXRlRG9tYWluKCJWZXJzaW9uRG9tYWluIiwgbnVsbCk7CisjIyMgRW5kIEZpbGU6IEluc3BlY3Rv
ckJhY2tlbmRDb21tYW5kcy5qcy5pbgorCisjIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVy
c2lvbi5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdt
YSBvbmNlCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKwor
I2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xh
c3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHZvaWQgc2V0QmFj
a2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsg
bV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KKyAgICBCYWNrZW5k
RGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmRE
aXNwYXRjaGVyLmdldCgpOyB9Citwcml2YXRlOgorICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hl
cj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKK307CisKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
CisjIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMg
QmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gdmVyc2lvbi5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3Rz
LmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCisKKworfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMg
QmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEJhY2tlbmRE
aXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRl
bmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9O
ZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorI2luY2x1ZGUgIlRlc3RBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNo
ZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHZlcnNpb24uanNvbiBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVz
dFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFz
cyBGcm9udGVuZFJvdXRlcjsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZp
bGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9u
dGVuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHZl
cnNpb24uanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRj
aGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHZlcnNpb24uanNvbiBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRp
b25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFByb3RvY29s
IHsKKworLy8gVmVyc2lvbnMuCituYW1lc3BhY2UgVmVyc2lvbkRvbWFpbiB7CitzdGF0aWMgY29u
c3RleHByIHVuc2lnbmVkIFZFUlNJT04gPSA0MjsKK30gLy8gVmVyc2lvbkRvbWFpbgorLy8gRW5k
IG9mIHZlcnNpb25zLgorCisKKworCisKKworCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisK
K30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmpl
Y3RzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lvbi5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRl
c3RQcm90b2NvbE9iamVjdHMuaCIKKworI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK25hbWVz
cGFjZSBQcm90b2NvbCB7CisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNw
cAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8d3RmL1JldGFp
blB0ci5oPgorCisKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJz
LmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHZlcnNpb24uanNvbiBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9y
dCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlICJUZXN0UHJv
dG9jb2xJbnRlcm5hbC5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5o
IgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Igewor
Cit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xC
YWNrZW5kRGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZp
Z3VyYXRpb24uaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHZlcnNpb24uanNv
biBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPFdlYklu
c3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRl
ZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVj
dAorQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisK
KyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lvbi5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5o
IgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2ltcG9ydCAiVGVzdFByb3Rv
Y29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5h
dGVEaXNwYXRjaGFibGVBZ2VudC5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFi
bGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVj
dG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgoreworICAg
IEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Cit9CisKKy0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJv
bGxlciopY29udHJvbGxlcgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFz
ZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBf
Y29udHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQp
ZGVhbGxvYworeworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworQGVuZAorCisKKyMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIHZlcnNpb24uanNvbiBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNp
bmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2
ZW50RGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lvbi5qc29uIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9u
Lmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KKwor
CisKKworCisKKworCisKKworCisKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29s
QnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lvbi5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJU
ZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDx3dGYvSlNPTlZhbHVl
cy5oPgorCisKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lvbi5qc29uIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0IDxXZWJJ
bnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+CisKK25hbWVzcGFjZSBJbnNw
ZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+CitPcHRpb25hbDxPYmpD
RW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKKworfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHZlcnNpb24uanNvbiBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90
b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisK
KworCisKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQor
CisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0
ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9S
V0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5o
PgorI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3Rv
cjsKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1jb21t
YW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24gYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1jb21tYW5k
LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZDZkZjllNGJkOWMzMTdkMWI2YmFmNWVkNmM1ZTAzNWUyYWY5MzE4NwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWls
LW9uLWNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNv
bgpAQCAtMCwwICsxLDkgQEAKK1sKK3sKKyAgICAiZG9tYWluIjogIkRvbWFpbiIsCisgICAgImRl
YnVnZ2FibGVUeXBlcyI6IFsiamF2YXNjcmlwdCJdLAorICAgICJ0YXJnZXRUeXBlcyI6IFsid29y
a2VyIl0sCisgICAgImNvbW1hbmRzIjogW3sibmFtZSI6ICJDb21tYW5kIn1dLAorICAgICJldmVu
dHMiOiBbeyJuYW1lIjogIkV2ZW50In1dCit9CitdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1jb21tYW5kLXRhcmdldFR5
cGVzLXR5cGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlwZXMtdHlwZS5qc29uCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY0
MDU5Zjg0YmNmMGNlYmEwZTg0MDYwMDg3ZWI1MzJhYWQ2ZjAyZTQKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1j
b21tYW5kLXRhcmdldFR5cGVzLXR5cGUuanNvbgpAQCAtMCwwICsxLDkgQEAKK3sKKyAgICAiZG9t
YWluIjogIkRvbWFpbiIsCisgICAgImNvbW1hbmRzIjogWworICAgICAgICB7CisgICAgICAgICAg
ICAibmFtZSI6ICJQYWdlT25seSIsCisgICAgICAgICAgICAidGFyZ2V0VHlwZXMiOiAicGFnZWUi
CisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1jb21tYW5kLXRhcmdldFR5cGVzLXZhbHVl
Lmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFp
bC1vbi1jb21tYW5kLXRhcmdldFR5cGVzLXZhbHVlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTAyMDQ0NzJl
YzhmNWU2YjA5OWMyOGRiZTJhMWNlODMwN2I1YjA2ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWNvbW1hbmQt
dGFyZ2V0VHlwZXMtdmFsdWUuanNvbgpAQCAtMCwwICsxLDkgQEAKK3sKKyAgICAiZG9tYWluIjog
IkRvbWFpbiIsCisgICAgImNvbW1hbmRzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFt
ZSI6ICJQYWdlT25seSIsCisgICAgICAgICAgICAidGFyZ2V0VHlwZXMiOiBbInBhZ2VlIl0KKyAg
ICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMtdHlwZS5q
c29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwt
b24tZG9tYWluLWRlYnVnZ2FibGVUeXBlcy10eXBlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTc0OGY0MjM0
NzNjZDlkZDY1YWJjZWU5NGE4ODE2YmQ0ODI5MTNlZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWRvbWFpbi1k
ZWJ1Z2dhYmxlVHlwZXMtdHlwZS5qc29uCkBAIC0wLDAgKzEsOSBAQAoreworICAgICJkb21haW4i
OiAiV2ViT25seSIsCisgICAgImRlYnVnZ2FibGVUeXBlcyI6ICJ3ZWJiIiwKKyAgICAiY29tbWFu
ZHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImVuYWJsZSIKKyAgICAgICAg
fQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9mYWlsLW9uLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMtdmFsdWUuanNvbiBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWRv
bWFpbi1kZWJ1Z2dhYmxlVHlwZXMtdmFsdWUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMjUyZGRiZDgzZGFi
YjdkZjZlNDQxMzVjNjFmMDkzNjZlMzBlNjA0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZG9tYWluLWRlYnVn
Z2FibGVUeXBlcy12YWx1ZS5qc29uCkBAIC0wLDAgKzEsOSBAQAoreworICAgICJkb21haW4iOiAi
V2ViT25seSIsCisgICAgImRlYnVnZ2FibGVUeXBlcyI6IFsid2ViYiJdLAorICAgICJjb21tYW5k
cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiZW5hYmxlIgorICAgICAgICB9
CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2ZhaWwtb24tZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRl
YnVnZ2FibGVUeXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdn
YWJsZVR5cGUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43YWEwMjgwNDY1NzY5ZTI5MzE4OTg5M2M0MzMwMmZj
YmQ2ZjQ5ODZjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9t
YWluLWRlYnVnZ2FibGVUeXBlLmpzb24KQEAgLTAsMCArMSw4IEBACitbCit7CisgICAgImRvbWFp
biI6ICJEb21haW4iLAorICAgICJkZWJ1Z2dhYmxlVHlwZXMiOiBbImphdmFzY3JpcHQiXSwKKyAg
ICAiY29tbWFuZHMiOiBbeyJuYW1lIjogIkNvbW1hbmQiLCAidGFyZ2V0VHlwZXMiOiBbIndvcmtl
ciJdfV0sCisgICAgImV2ZW50cyI6IFt7Im5hbWUiOiAiRXZlbnQifV0KK30KK10KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9u
LWRvbWFpbi10YXJnZXRUeXBlcy10eXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZXMtdHlwZS5qc29u
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmQ4MjIyNjc0MTQ2MTVkNGI0YWU2NDIwOWM2YzZjZDc4NmVmM2M4NjUKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZXMtdHlwZS5qc29uCkBAIC0wLDAgKzEsOSBA
QAoreworICAgICJkb21haW4iOiAiUGFnZU9ubHkiLAorICAgICJ0YXJnZXRUeXBlcyI6ICJwYWdl
ZSIsCisgICAgImNvbW1hbmRzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJl
bmFibGUiCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZXMt
dmFsdWUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9mYWlsLW9uLWRvbWFpbi10YXJnZXRUeXBlcy12YWx1ZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU3YjEw
ZDdmMTU0Yjk4NDFhYzhmMjQzOTU2MTk2MzJiMTk3OGM5NDkKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kb21h
aW4tdGFyZ2V0VHlwZXMtdmFsdWUuanNvbgpAQCAtMCwwICsxLDkgQEAKK3sKKyAgICAiZG9tYWlu
IjogIlBhZ2VPbmx5IiwKKyAgICAidGFyZ2V0VHlwZXMiOiBbInBhZ2VlIl0sCisgICAgImNvbW1h
bmRzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJlbmFibGUiCisgICAgICAg
IH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1jYWxsLXBhcmFtZXRlci1u
YW1lcy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2ZhaWwtb24tZHVwbGljYXRlLWNvbW1hbmQtY2FsbC1wYXJhbWV0ZXItbmFtZXMuanNvbgpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5iYWI3NmNhNjI3OWNlM2E0YWNmNzk4NTUwMGIzMGI3ZDFjZmI4ZjBkCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2ZhaWwtb24tZHVwbGljYXRlLWNvbW1hbmQtY2FsbC1wYXJhbWV0ZXItbmFtZXMuanNvbgpAQCAt
MCwwICsxLDE2IEBACit7CisgICAgImRvbWFpbiI6ICJPdmVybGF5IiwKKyAgICAiY29tbWFuZHMi
OiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogInByb2Nlc3NQb2ludHMiLAorICAg
ICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwb2lu
dCIsICJ0eXBlIjogIm51bWJlciIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBvaW50
IiwgInR5cGUiOiAibnVtYmVyIiB9CisgICAgICAgICAgICBdLAorICAgICAgICAgICAgInJldHVy
bnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJyZXN1bHQxIiwgInR5cGUiOiAic3Ry
aW5nIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicmVzdWx0MiIsICJ0eXBlIjogInN0
cmluZyIgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZHVw
bGljYXRlLWNvbW1hbmQtcmV0dXJuLXBhcmFtZXRlci1uYW1lcy5qc29uIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZHVwbGljYXRlLWNvbW1h
bmQtcmV0dXJuLXBhcmFtZXRlci1uYW1lcy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM4YmIxNWMwNGI2NTli
OWNiOWFmZGUzNGNkNTcyMmJhOWM2ZDRkYTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kdXBsaWNhdGUtY29t
bWFuZC1yZXR1cm4tcGFyYW1ldGVyLW5hbWVzLmpzb24KQEAgLTAsMCArMSwxNiBAQAoreworICAg
ICJkb21haW4iOiAiT3ZlcmxheSIsCisgICAgImNvbW1hbmRzIjogWworICAgICAgICB7CisgICAg
ICAgICAgICAibmFtZSI6ICJwcm9jZXNzUG9pbnRzIiwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJz
IjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicG9pbnQxIiwgInR5cGUiOiAibnVtYmVy
IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicG9pbnQyIiwgInR5cGUiOiAibnVtYmVy
IiB9CisgICAgICAgICAgICBdLAorICAgICAgICAgICAgInJldHVybnMiOiBbCisgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJyZXN1bHQiLCAidHlwZSI6ICJzdHJpbmciIH0sCisgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJyZXN1bHQiLCAidHlwZSI6ICJzdHJpbmciIH0KKyAgICAgICAgICAg
IF0KKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWR1cGxpY2F0ZS1ldmVudC1wYXJhbWV0
ZXItbmFtZXMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9mYWlsLW9uLWR1cGxpY2F0ZS1ldmVudC1wYXJhbWV0ZXItbmFtZXMuanNvbgpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5kM2QzYjNjYzY0MjNjZWMyNWE2N2RhOTEzMmE3NjY4Njc1NWE0NDQwCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2Zh
aWwtb24tZHVwbGljYXRlLWV2ZW50LXBhcmFtZXRlci1uYW1lcy5qc29uCkBAIC0wLDAgKzEsMTIg
QEAKK3sKKyAgICAiZG9tYWluIjogIk92ZXJsYXkiLAorICAgICJldmVudHMiOiBbCisgICAgICAg
IHsKKyAgICAgICAgICAgICJuYW1lIjogInByb2Nlc3NlZFBvaW50cyIsCisgICAgICAgICAgICAi
cGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBvaW50IiwgInR5cGUi
OiAibnVtYmVyIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicG9pbnQiLCAidHlwZSI6
ICJudW1iZXIiIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9u
LWR1cGxpY2F0ZS10eXBlLWRlY2xhcmF0aW9ucy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZHVwbGljYXRlLXR5cGUtZGVjbGFyYXRp
b25zLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNzAyZmM2YTMyNzBhNjQ2YTQ1MDQ0N2ZkYzA0MDEzOTk1YTk0
MmJmMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLWRlY2xhcmF0aW9ucy5qc29uCkBA
IC0wLDAgKzEsMTUgQEAKK3sKKyAgICAiZG9tYWluIjogIlJ1bnRpbWUiLAorICAgICJ0eXBlcyI6
IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlJlbW90ZU9iamVjdElkIiwKKyAgICAg
ICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5p
cXVlIG9iamVjdCBpZGVudGlmaWVyLiIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAg
ICAgImlkIjogIlJlbW90ZU9iamVjdElkIiwKKyAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIs
CisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIG9iamVjdCBpZGVudGlmaWVyLiIK
KyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLW1lbWJlci1uYW1l
cy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2Zh
aWwtb24tZHVwbGljYXRlLXR5cGUtbWVtYmVyLW5hbWVzLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWViYWNl
ZThiMjNlMWVhMzQwNWQ4YWMwYTAwMTYyMDcwMTBjOTQ4NQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWR1cGxp
Y2F0ZS10eXBlLW1lbWJlci1uYW1lcy5qc29uCkBAIC0wLDAgKzEsMTUgQEAKK1sKK3sKKyAgICAi
ZG9tYWluIjogIk92ZXJsYXlUeXBlcyIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAg
ICAgICAgICAiaWQiOiAiUG9pbnQiLAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAg
ICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAieCIs
ICJ0eXBlIjogImludGVnZXIiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ4IiwgInR5
cGUiOiAiaW50ZWdlciIgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXQorfQorXQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2ZhaWwtb24tZW51bS13aXRoLW5vLXZhbHVlcy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZW51bS13aXRoLW5vLXZhbHVlcy5qc29u
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjIzMmE3YzMyNDlhNDBiZDQ0N2UxOWE5MmE4ZTU2OTMwZDNmODU5NTcKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZmFpbC1vbi1lbnVtLXdpdGgtbm8tdmFsdWVzLmpzb24KQEAgLTAsMCArMSwxMCBAQAor
eworICAgICJkb21haW4iOiAiRGF0YWJhc2UiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgewor
ICAgICAgICAgICAgImlkIjogIlByaW1hcnlDb2xvcnMiLAorICAgICAgICAgICAgInR5cGUiOiAi
c3RyaW5nIiwKKyAgICAgICAgICAgICJlbnVtIjogW10KKyAgICAgICAgfQorICAgIF0KK30KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9m
YWlsLW9uLWV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpz
b24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1v
bi1ldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjkxMzJjZTA4ODI4NGRlYjlhNTZlMTM0MTY2OWQ1YTJiZGRiZWFjMmQKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZmFpbC1vbi1ldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlw
ZS5qc29uCkBAIC0wLDAgKzEsOCBAQAorWworeworICAgICJkb21haW4iOiAiRG9tYWluIiwKKyAg
ICAiZGVidWdnYWJsZVR5cGVzIjogWyJqYXZhc2NyaXB0Il0sCisgICAgImNvbW1hbmRzIjogW3si
bmFtZSI6ICJDb21tYW5kIn1dLAorICAgICJldmVudHMiOiBbeyJuYW1lIjogIkV2ZW50IiwgInRh
cmdldFR5cGVzIjogWyJ3b3JrZXIiXX1dCit9CitdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1ldmVudC10YXJnZXRUeXBl
cy10eXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZmFpbC1vbi1ldmVudC10YXJnZXRUeXBlcy10eXBlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTU0ZWQx
ZjVjNmJmOWY0YWI0MTVkMTQyMjMwMjg5YTkxZGNmZThjNgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWV2ZW50
LXRhcmdldFR5cGVzLXR5cGUuanNvbgpAQCAtMCwwICsxLDkgQEAKK3sKKyAgICAiZG9tYWluIjog
IkRvbWFpbiIsCisgICAgImV2ZW50cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUi
OiAiUGFnZU9ubHkiLAorICAgICAgICAgICAgInRhcmdldFR5cGVzIjogInBhZ2VlIgorICAgICAg
ICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlwZXMtdmFsdWUuanNvbiBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWV2ZW50
LXRhcmdldFR5cGVzLXZhbHVlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTg4NGJmZDdhNmI3YmQ0NzQ4YjEw
MDcyOTkwYWFlZTU5MGM2MGE2ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGVzLXZh
bHVlLmpzb24KQEAgLTAsMCArMSw5IEBACit7CisgICAgImRvbWFpbiI6ICJEb21haW4iLAorICAg
ICJldmVudHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIlBhZ2VPbmx5IiwK
KyAgICAgICAgICAgICJ0YXJnZXRUeXBlcyI6IFsicGFnZWUiXQorICAgICAgICB9CisgICAgXQor
fQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2ZhaWwtb24tbnVtYmVyLXR5cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24gYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1udW1i
ZXItdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MzA4ZGI5
OTJkNjUyNTdmMmI1YzYzMjdlMGNhMzU0NTAyZDYxNTRhCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tbnVtYmVy
LXR5cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24KQEAgLTAsMCArMSwxOCBAQAorewor
ICAgICJkb21haW4iOiAiRGF0YWJhc2UiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAg
ICAgICAgICAgImlkIjogIkRhdGFiYXNlSWQiLAorICAgICAgICAgICAgInR5cGUiOiAic3RyaW5n
IiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgaWRlbnRpZmllciBvZiBEYXRh
YmFzZSBvYmplY3QuIgorICAgICAgICB9CisgICAgXSwKKyAgICAiZXZlbnRzIjogWworICAgICAg
ICB7CisgICAgICAgICAgICAibmFtZSI6ICJkaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzIiwK
KyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
Y29sdW1uTmFtZXMiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiAwIH0KKyAgICAgICAg
ICAgIF0KKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRpb25h
bC10eXBlLW1lbWJlci5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2ZhaWwtb24tbnVtYmVyLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24K
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYWZlYTU1NWVjNGZlMDg2NjI3OGUxZmNkNzMzNTQyNDJkZWZkMWJkNAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29uCkBAIC0w
LDAgKzEsMTYgQEAKK1sKK3sKKyAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKKyAgICAidHlwZXMi
OiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJFcnJvciIsCisgICAgICAgICAgICAi
dHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkRhdGFiYXNlIGVy
cm9yLiIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKKyAgICAgICAgICAgICAgICB7ICJu
YW1lIjogIm1lc3NhZ2UiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiRXJyb3Ig
bWVzc2FnZS4iIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2RlIiwgInR5cGUiOiAi
aW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBjb2RlLiIsICJvcHRpb25hbCI6IDAgfQor
ICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXQorfQorXQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tc3RyaW5nLXR5
cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtcGFy
YW1ldGVyLWZsYWcuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MDEyYzc5YjZiMzhjMjFkZmY2MDdmZWM5ZWU5
MGIyODAzMTBmOTA4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXBhcmFt
ZXRlci1mbGFnLmpzb24KQEAgLTAsMCArMSwxOCBAQAoreworICAgICJkb21haW4iOiAiRGF0YWJh
c2UiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkRhdGFi
YXNlSWQiLAorICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICJkZXNj
cmlwdGlvbiI6ICJVbmlxdWUgaWRlbnRpZmllciBvZiBEYXRhYmFzZSBvYmplY3QuIgorICAgICAg
ICB9CisgICAgXSwKKyAgICAiZXZlbnRzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFt
ZSI6ICJkaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzIiwKKyAgICAgICAgICAgICJwYXJhbWV0
ZXJzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6
ICJzdHJpbmciLCAib3B0aW9uYWwiOiAidHJ1ZSIgfQorICAgICAgICAgICAgXQorICAgICAgICB9
CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpz
b24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1v
bi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNvbgpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jYTNl
ZjI4YThmODgxNGNjNjE3ZmI1ZDViYzIxMzA2ZDBhYWQ0ZmQwCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tc3Ry
aW5nLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24KQEAgLTAsMCArMSwxNiBAQAorWwor
eworICAgICJkb21haW4iOiAiRGF0YWJhc2UiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgewor
ICAgICAgICAgICAgImlkIjogIkVycm9yIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIs
CisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRGF0YWJhc2UgZXJyb3IuIiwKKyAgICAgICAg
ICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibWVzc2FnZSIs
ICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBtZXNzYWdlLiIgfSwKKyAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogImNvZGUiLCAidHlwZSI6ICJpbnRlZ2VyIiwgImRlc2Ny
aXB0aW9uIjogIkVycm9yIGNvZGUuIiwgIm9wdGlvbmFsIjogImZhbHNlIiB9CisgICAgICAgICAg
ICBdCisgICAgICAgIH0KKyAgICBdCit9CitdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi10eXBlLWRlY2xhcmF0aW9uLXVz
aW5nLXR5cGUtcmVmZXJlbmNlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZmFpbC1vbi10eXBlLWRlY2xhcmF0aW9uLXVzaW5nLXR5cGUtcmVmZXJl
bmNlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMTliNzU5MGNjYzZmNmJjMzQ0M2E0YTI4M2NhNmZjY2ZkZjMy
NzczNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9mYWlsLW9uLXR5cGUtZGVjbGFyYXRpb24tdXNpbmctdHlwZS1yZWZlcmVu
Y2UuanNvbgpAQCAtMCwwICsxLDEzIEBACitbCit7CisgICAgImRvbWFpbiI6ICJSdW50aW1lIiwK
KyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJSZW1vdGVPYmpl
Y3RJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgIiRyZWYi
OiAiU29tZVR5cGUiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBvYmplY3Qg
aWRlbnRpZmllci4iCisgICAgICAgIH0KKyAgICBdCit9CitdCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi10eXBlLXJlZmVy
ZW5jZS1hcy1wcmltaXRpdmUtdHlwZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdHlwZS1yZWZlcmVuY2UtYXMtcHJpbWl0aXZlLXR5
cGUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi44YzgzYmJmY2U0MTJiOGIwOWRmNzQ3YTg3NWU4MDM2ZGZlY2Ni
YzM2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2ZhaWwtb24tdHlwZS1yZWZlcmVuY2UtYXMtcHJpbWl0aXZlLXR5cGUuanNv
bgpAQCAtMCwwICsxLDE4IEBACit7CisgICAgImRvbWFpbiI6ICJEYXRhYmFzZSIsCisgICAgInR5
cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiRGF0YWJhc2VJZCIsCisgICAg
ICAgICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVu
aXF1ZSBpZGVudGlmaWVyIG9mIERhdGFiYXNlIG9iamVjdC4iCisgICAgICAgIH0KKyAgICBdLAor
ICAgICJldmVudHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImRpZEV4ZWN1
dGVPcHRpb25hbFBhcmFtZXRlcnMiLAorICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogIkRhdGFiYXNlSWQi
IH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXR5cGUtd2l0
aC1sb3dlcmNhc2UtbmFtZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2ZhaWwtb24tdHlwZS13aXRoLWxvd2VyY2FzZS1uYW1lLmpzb24KbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNTMxOTAxZTRhOWFkOTkzNmIwMWJiYWVkOTdhMWQ0ZGEzNDg0NzhiMAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9m
YWlsLW9uLXR5cGUtd2l0aC1sb3dlcmNhc2UtbmFtZS5qc29uCkBAIC0wLDAgKzEsMTAgQEAKK3sK
KyAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAg
ICAgICAgICAgICJpZCI6ICJkYXRhYmFzZUlkIiwKKyAgICAgICAgICAgICJ0eXBlIjogImludGVn
ZXIiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBpZGVudGlmaWVyIG9mIERh
dGFiYXNlIG9iamVjdC4iCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi11bmtub3duLXR5
cGUtcmVmZXJlbmNlLWluLXR5cGUtZGVjbGFyYXRpb24uanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVu
Y2UtaW4tdHlwZS1kZWNsYXJhdGlvbi5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ2ODg3YTI3NDExOTAwYTgw
ZDUwZjAwM2VhYzM2YzEzYTk5ZmFlNTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi11bmtub3duLXR5cGUtcmVm
ZXJlbmNlLWluLXR5cGUtZGVjbGFyYXRpb24uanNvbgpAQCAtMCwwICsxLDEyIEBACitbCit7Cisg
ICAgImRvbWFpbiI6ICJSdW50aW1lIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAg
ICAgICAgICJpZCI6ICJSZW1vdGVPYmplY3RJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJkcmFn
b24iLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBvYmplY3QgaWRlbnRpZmll
ci4iCisgICAgICAgIH0KKyAgICBdCit9CitdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJl
bmNlLWluLXR5cGUtbWVtYmVyLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtbWVt
YmVyLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYjgxN2RiNTA0NGRjMWYyODU1NzAwOGMxZjE3NjFmMWIwNjhm
NGNlNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1tZW1i
ZXIuanNvbgpAQCAtMCwwICsxLDE1IEBACitbCit7CisgICAgImRvbWFpbiI6ICJGYW50YXN5IiwK
KyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJEcmFnb25FZ2ci
LAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlv
biI6ICJBIGRyYWdvbiBlZ2cuIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAiY29sb3IiLCAiJHJlZiI6ICJDb2xvciIgfQorICAgICAgICAg
ICAgXQorICAgICAgICB9CisgICAgXQorfQorXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0
dXJlLWd1YXJkcy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjY3Y2Y4ZTU4MmY2NWFlNmZjNjE1NjkyODgyY2IwZjY1NzQ2MDEwOGEKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2Vu
ZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KQEAgLTAsMCArMSwzNiBAQAor
WworeworICAgICJkb21haW4iOiAiTmV0d29yazEiLAorICAgICJmZWF0dXJlR3VhcmQiOiAiUExB
VEZPUk0oV0VCX0NPTU1BTkRTKSIsCisgICAgImNvbW1hbmRzIjogWworICAgICAgICB7CisgICAg
ICAgICAgICAibmFtZSI6ICJsb2FkUmVzb3VyY2UiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9u
IjogIkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5z
cGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKKyAgICAgICAgfQorICAg
IF0KK30sCit7CisgICAgImRvbWFpbiI6ICJOZXR3b3JrMiIsCisgICAgImZlYXR1cmVHdWFyZCI6
ICJQTEFURk9STShXRUJfVFlQRVMpIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAg
ICAgICAgICJpZCI6ICJOZXR3b3JrRXJyb3IiLAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0
IiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAibWVzc2FnZSIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBtZXNz
YWdlLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvZGUiLCAidHlwZSI6ICJpbnRl
Z2VyIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIGNvZGUuIiB9CisgICAgICAgICAgICBdCisgICAg
ICAgIH0KKyAgICBdCit9LAoreworICAgICJkb21haW4iOiAiTmV0d29yazMiLAorICAgICJmZWF0
dXJlR3VhcmQiOiAiUExBVEZPUk0oV0VCX0VWRU5UUykiLAorICAgICJldmVudHMiOiBbCisgICAg
ICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogInJlc291cmNlTG9hZGVkIiwKKyAgICAgICAgICAg
ICJkZXNjcmlwdGlvbiI6ICJBIHJlc291cmNlIHdhcyBsb2FkZWQuIgorICAgICAgICB9CisgICAg
XQorfQorXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2dlbmVyaWMvY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1
Z2dhYmxlVHlwZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dh
YmxlVHlwZS5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjdhYjY1YjkyYWJl
YjFjYjg0NjU3NDdjNzYzMDhmODZiNmUxODE2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL2NvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdn
YWJsZVR5cGUuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotWwotewotICAgICJk
b21haW4iOiAiRG9tYWluIiwKLSAgICAiZGVidWdnYWJsZVR5cGVzIjogWyJwYWdlIl0sCi0gICAg
InRhcmdldFR5cGVzIjogWyJwYWdlIiwgIndvcmtlciJdLAotICAgICJjb21tYW5kcyI6IFt7Im5h
bWUiOiAiQ29tbWFuZCJ9XSwKLSAgICAiZXZlbnRzIjogW3sibmFtZSI6ICJFdmVudCJ9XQotfQot
XQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2dlbmVyaWMvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbiBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2NvbW1hbmRzLXdp
dGgtYXN5bmMtYXR0cmlidXRlLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEx
MjYyZTg4OWZhNWJkMGI0YWU1N2U1ZjdmMWJhYzZjZmYzZmU5MzkuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUu
anNvbgorKysgL2Rldi9udWxsCkBAIC0xLDEwOSArMCwwIEBACi17Ci0gICAgImRvbWFpbiI6ICJE
YXRhYmFzZSIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAi
RGF0YWJhc2VJZCIsCi0gICAgICAgICAgICAidHlwZSI6ICJpbnRlZ2VyIiwKLSAgICAgICAgICAg
ICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgaWRlbnRpZmllciBvZiBEYXRhYmFzZSBvYmplY3QuIgot
ICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiUHJpbWFyeUNvbG9ycyIs
Ci0gICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAotICAgICAgICAgICAgImVudW0iOiBbInJl
ZCIsICJncmVlbiIsICJibHVlIl0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAg
ImlkIjogIkNvbG9yTGlzdCIsCi0gICAgICAgICAgICAidHlwZSI6ICJhcnJheSIsCi0gICAgICAg
ICAgICAiaXRlbXMiOiB7ICIkcmVmIjogIlByaW1hcnlDb2xvcnMiIH0KLSAgICAgICAgfSwKLSAg
ICAgICAgewotICAgICAgICAgICAgImlkIjogIkVycm9yIiwKLSAgICAgICAgICAgICJ0eXBlIjog
Im9iamVjdCIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRGF0YWJhc2UgZXJyb3IuIiwK
LSAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
bWVzc2FnZSIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBtZXNzYWdl
LiIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvZGUiLCAidHlwZSI6ICJpbnRlZ2Vy
IiwgImRlc2NyaXB0aW9uIjogIkVycm9yIGNvZGUuIiB9Ci0gICAgICAgICAgICBdCi0gICAgICAg
IH0KLSAgICBdLAotICAgICJjb21tYW5kcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgIm5h
bWUiOiAiZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyIsCi0gICAgICAgICAgICAi
cGFyYW1ldGVycyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRhdGFiYXNlSWQiLCAi
JHJlZiI6ICJEYXRhYmFzZUlkIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicXVlcnki
LCAidHlwZSI6ICJzdHJpbmciIH0KLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAicmV0dXJu
cyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAi
YXJyYXkiLCAib3B0aW9uYWwiOiB0cnVlLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9
LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciLCAi
b3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAi
LCAidHlwZSI6ICJudW1iZXIiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0cnVlIH0s
Ci0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiwgIm9w
dGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIs
ICIkcmVmIjogIkRhdGFiYXNlSWQiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVycm9yIiwgIm9wdGlvbmFsIjogdHJ1
ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6ICJQ
cmltYXJ5Q29sb3JzIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwgIiRyZWYiOiAiQ29sb3JMaXN0IiwgIm9wdGlvbmFsIjog
dHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjog
InN0cmluZyIsICJlbnVtIjogWyJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93IiwgImJsYWNrIl0s
ICJvcHRpb25hbCI6IHRydWUgfQotICAgICAgICAgICAgXQotICAgICAgICB9LAotICAgICAgICB7
Ci0gICAgICAgICAgICAibmFtZSI6ICJleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVl
cyIsCi0gICAgICAgICAgICAiYXN5bmMiOiB0cnVlLAotICAgICAgICAgICAgInBhcmFtZXRlcnMi
OiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0
YWJhc2VJZCIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInF1ZXJ5IiwgInR5cGUiOiAi
c3RyaW5nIiB9Ci0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInJldHVybnMiOiBbCi0gICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIm9w
dGlvbmFsIjogdHJ1ZSwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwKLSAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjog
dHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAi
bnVtYmVyIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
dmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIsICJvcHRpb25hbCI6IHRy
dWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRhdGFiYXNlSWQiLCAiJHJlZiI6ICJE
YXRhYmFzZUlkIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAic3FsRXJyb3IiLCAiJHJlZiI6ICJFcnJvciIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogInNjcmVlbkNvbG9yIiwgIiRyZWYiOiAiUHJpbWFyeUNvbG9y
cyIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImFsdGVy
bmF0ZUNvbG9ycyIsICIkcmVmIjogIkNvbG9yTGlzdCIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogInByaW50Q29sb3IiLCAidHlwZSI6ICJzdHJpbmciLCAi
ZW51bSI6IFsiY3lhbiIsICJtYWdlbnRhIiwgInllbGxvdyIsICJibGFjayJdLCAib3B0aW9uYWwi
OiB0cnVlIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAg
ICAgIm5hbWUiOiAiZXhlY3V0ZVNRTFN5bmMiLAotICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBb
Ci0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJh
c2VJZCIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInF1ZXJ5IiwgInR5cGUiOiAic3Ry
aW5nIiB9Ci0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInJldHVybnMiOiBbCi0gICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1z
IjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5v
dGVzIiwgInR5cGUiOiAic3RyaW5nIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGlt
ZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
dmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
cGF5bG9hZCIsICJ0eXBlIjogImFueSIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRh
dGFiYXNlSWQiLCAiJHJlZiI6ICJEYXRhYmFzZUlkIiB9LAotICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAic3FsRXJyb3IiLCAiJHJlZiI6ICJFcnJvciIgfSwKLSAgICAgICAgICAgICAgICB7ICJu
YW1lIjogImFsdGVybmF0ZUNvbG9ycyIsICIkcmVmIjogIkNvbG9yTGlzdCIgfSwKLSAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInNjcmVlbkNvbG9yIiwgIiRyZWYiOiAiUHJpbWFyeUNvbG9ycyIg
fSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInByaW50Q29sb3IiLCAidHlwZSI6ICJzdHJp
bmciLCAiZW51bSI6IFsiY3lhbiIsICJtYWdlbnRhIiwgInllbGxvdyIsICJibGFjayJdIH0KLSAg
ICAgICAgICAgIF0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAi
ZXhlY3V0ZVNRTEFzeW5jIiwKLSAgICAgICAgICAgICJhc3luYyI6IHRydWUsCi0gICAgICAgICAg
ICAicGFyYW1ldGVycyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRhdGFiYXNlSWQi
LCAiJHJlZiI6ICJEYXRhYmFzZUlkIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicXVl
cnkiLCAidHlwZSI6ICJzdHJpbmciIH0KLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAicmV0
dXJucyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUi
OiAiYXJyYXkiLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAotICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciIH0sCi0gICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiIH0sCi0gICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiIH0sCi0gICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiB9LAotICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiIH0sCi0gICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVycm9yIiB9LAotICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6ICJQcmltYXJ5Q29s
b3JzIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwgIiRy
ZWYiOiAiQ29sb3JMaXN0IiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJpbnRDb2xv
ciIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93
IiwgImJsYWNrIl0gfQotICAgICAgICAgICAgXQotICAgICAgICB9Ci0gICAgXQotfQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVy
aWMvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24gYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9jb21t
YW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMzYxZDU3ZDgyMGRlOTE2YTczY2JkZDk4MzgzZDEyNjQyMDM5
OGY0YS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9jb21tYW5k
cy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgorKysgL2Rldi9udWxs
CkBAIC0xLDg1ICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKLSAgICAidHlw
ZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJEYXRhYmFzZUlkIiwKLSAgICAg
ICAgICAgICJ0eXBlIjogImludGVnZXIiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVu
aXF1ZSBpZGVudGlmaWVyIG9mIERhdGFiYXNlIG9iamVjdC4iCi0gICAgICAgIH0sCi0gICAgICAg
IHsKLSAgICAgICAgICAgICJpZCI6ICJQcmltYXJ5Q29sb3JzIiwKLSAgICAgICAgICAgICJ0eXBl
IjogInN0cmluZyIsCi0gICAgICAgICAgICAiZW51bSI6IFsicmVkIiwgImdyZWVuIiwgImJsdWUi
XQotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiQ29sb3JMaXN0IiwK
LSAgICAgICAgICAgICJ0eXBlIjogImFycmF5IiwKLSAgICAgICAgICAgICJpdGVtcyI6IHsgIiRy
ZWYiOiAiUHJpbWFyeUNvbG9ycyIgfQotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAg
ICAiaWQiOiAiRXJyb3IiLAotICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKLSAgICAgICAg
ICAgICJkZXNjcmlwdGlvbiI6ICJEYXRhYmFzZSBlcnJvci4iLAotICAgICAgICAgICAgInByb3Bl
cnRpZXMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJtZXNzYWdlIiwgInR5cGUiOiAi
c3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIG1lc3NhZ2UuIiB9LAotICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAiY29kZSIsICJ0eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAi
RXJyb3IgY29kZS4iIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfQotICAgIF0sCi0gICAgImNv
bW1hbmRzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJleGVjdXRlQWxsT3B0
aW9uYWxQYXJhbWV0ZXJzIiwKLSAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwotICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJvcHRpb25h
bCI6IHRydWUsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCi0gICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWUg
fSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJl
ciIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVl
cyIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiLCAib3B0aW9uYWwiOiB0cnVlIH0s
Ci0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJh
c2VJZCIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNx
bEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlDb2xvcnMiLCAi
b3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJhbHRlcm5hdGVD
b2xvcnMiLCAiJHJlZiI6ICJDb2xvckxpc3QiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0i
OiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSwgIm9wdGlvbmFsIjogdHJ1
ZSB9Ci0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInJldHVybnMiOiBbCi0gICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIm9wdGlvbmFs
IjogdHJ1ZSwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwKLSAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZSB9
LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVy
IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVz
IiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIsICJvcHRpb25hbCI6IHRydWUgfSwK
LSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRhdGFiYXNlSWQiLCAiJHJlZiI6ICJEYXRhYmFz
ZUlkIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic3Fs
RXJyb3IiLCAiJHJlZiI6ICJFcnJvciIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInNjcmVlbkNvbG9yIiwgIiRyZWYiOiAiUHJpbWFyeUNvbG9ycyIsICJv
cHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImFsdGVybmF0ZUNv
bG9ycyIsICIkcmVmIjogIkNvbG9yTGlzdCIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInByaW50Q29sb3IiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6
IFsiY3lhbiIsICJtYWdlbnRhIiwgInllbGxvdyIsICJibGFjayJdLCAib3B0aW9uYWwiOiB0cnVl
IH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgIm5h
bWUiOiAiZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIiwKLSAgICAgICAgICAgICJwYXJhbWV0
ZXJzIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6
ICJhcnJheSIsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCi0gICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIgfSwKLSAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIgfSwKLSAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIgfSwKLSAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiIH0sCi0gICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIgfSwKLSAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiIH0sCi0gICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlDb2xv
cnMiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJhbHRlcm5hdGVDb2xvcnMiLCAiJHJl
ZiI6ICJDb2xvckxpc3QiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcmludENvbG9y
IiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ci
LCAiYmxhY2siXSB9Ci0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInJldHVybnMiOiBbCi0g
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5Iiwg
Iml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1l
IjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiB9LAotICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiB9LAotICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1l
IjogImRhdGFiYXNlSWQiLCAiJHJlZiI6ICJEYXRhYmFzZUlkIiB9LAotICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAic3FsRXJyb3IiLCAiJHJlZiI6ICJFcnJvciIgfSwKLSAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInNjcmVlbkNvbG9yIiwgIiRyZWYiOiAiUHJpbWFyeUNvbG9ycyIgfSwKLSAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogImFsdGVybmF0ZUNvbG9ycyIsICIkcmVmIjogIkNvbG9y
TGlzdCIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInByaW50Q29sb3IiLCAidHlwZSI6
ICJzdHJpbmciLCAiZW51bSI6IFsiY3lhbiIsICJtYWdlbnRhIiwgInllbGxvdyIsICJibGFjayJd
IH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfQotICAgIF0KLX0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2RlZmluaXRp
b25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5q
c29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MTdmMTM1ZWU1YTcyMDk3YWUzZTEz
MWJkZDQwZTYwMTY5OGFiMTBjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKysrIC9kZXYvbnVsbApA
QCAtMSwyOCArMCwwIEBACi17Ci0gICAgImRvbWFpbiI6ICJOZXR3b3JrIiwKLSAgICAidHlwZXMi
OiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJOZXR3b3JrRXJyb3IiLAotICAgICAg
ICAgICAgInR5cGUiOiAib2JqZWN0IiwKLSAgICAgICAgICAgICJwbGF0Zm9ybSI6ICJtYWNvcyIs
Ci0gICAgICAgICAgICAicHJvcGVydGllcyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjog
Im1lc3NhZ2UiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgbWVzc2Fn
ZS4iIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2RlIiwgInR5cGUiOiAiaW50ZWdl
ciIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBjb2RlLiIgfQotICAgICAgICAgICAgXQotICAgICAg
ICB9Ci0gICAgXSwKLSAgICAiY29tbWFuZHMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJu
YW1lIjogImxvYWRSZXNvdXJjZSIsCi0gICAgICAgICAgICAicGxhdGZvcm0iOiAibWFjb3MiLAot
ICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRl
eHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4g
Y2hlY2tzLiIKLSAgICAgICAgfQotICAgIF0sCi0gICAgImV2ZW50cyI6IFsKLSAgICAgICAgewot
ICAgICAgICAgICAgIm5hbWUiOiAicmVzb3VyY2VMb2FkZWQiLAotICAgICAgICAgICAgInBsYXRm
b3JtIjogIm1hY29zIiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJBIHJlc291cmNlIHdh
cyBsb2FkZWQuIgotICAgICAgICB9Ci0gICAgXQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZG9tYWluLWRlYnVnZ2Fi
bGVUeXBlcy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2dlbmVyaWMvZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAxZmViMGM5YTI3ZTZkMDNkMzljYWFiYWUwZTM5NjY0NzdhMDRkMTBjLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2RvbWFpbi1kZWJ1Z2dh
YmxlVHlwZXMuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotWwotewotICAgICJk
b21haW4iOiAiRG9tYWluIiwKLSAgICAiZGVidWdnYWJsZVR5cGVzIjogWyJ3ZWItcGFnZSJdLAot
ICAgICJjb21tYW5kcyI6IFt7Im5hbWUiOiAiQ29tbWFuZCJ9XSwKLSAgICAiZXZlbnRzIjogW3si
bmFtZSI6ICJFdmVudCJ9XQotfQotXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hp
bmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9kb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1k
b21haW4tZGVidWdnYWJsZVR5cGUuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ZjYyZmIzOGJhNzg1YjFlYjQ0Y2ExODg4NmUwNmQ3OTIxYjlkMDkyYy4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9kb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1k
b21haW4tZGVidWdnYWJsZVR5cGUuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAot
WwotewotICAgICJkb21haW4iOiAiRG9tYWluIiwKLSAgICAiZGVidWdnYWJsZVR5cGVzIjogWyJw
YWdlIl0sCi0gICAgImNvbW1hbmRzIjogW3sibmFtZSI6ICJDb21tYW5kIiwgInRhcmdldFR5cGVz
IjogWyJwYWdlIiwgIndvcmtlciJdfV0sCi0gICAgImV2ZW50cyI6IFt7Im5hbWUiOiAiRXZlbnQi
fV0KLX0KLV0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL2RvbWFpbi10YXJnZXRUeXBlcy5qc29uIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZG9tYWluLXRhcmdldFR5
cGVzLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhNmU0MGQ2MGFkYzM1N2Yw
NjRmY2ExOTQ3OTdjY2JhY2IwZDdlNzQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2dlbmVyaWMvZG9tYWluLXRhcmdldFR5cGVzLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw4
ICswLDAgQEAKLVsKLXsKLSAgICAiZG9tYWluIjogIkRvbWFpbiIsCi0gICAgInRhcmdldFR5cGVz
IjogWyJwYWdlIl0sCi0gICAgImNvbW1hbmRzIjogW3sibmFtZSI6ICJDb21tYW5kIiwgInRhcmdl
dFR5cGVzIjogWyJwYWdlIl19XSwKLSAgICAiZXZlbnRzIjogW3sibmFtZSI6ICJFdmVudCIsICJ0
YXJnZXRUeXBlcyI6IFsicGFnZSJdfV0KLX0KLV0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2RvbWFpbnMtd2l0aC12YXJ5
aW5nLWNvbW1hbmQtc2l6ZXMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9nZW5lcmljL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMu
anNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTRhOGVjYjE3NmQzYjhlYzliZjk2
Njc2ZTYzY2VhMDUxNDY2Yjg2OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJpYy9kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KKysrIC9kZXYv
bnVsbApAQCAtMSw1NCArMCwwIEBACi1bCi17Ci0gICAgImRvbWFpbiI6ICJOZXR3b3JrMSIsCi0g
ICAgImNvbW1hbmRzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJsb2FkUmVz
b3VyY2UxIiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBhIHJlc291cmNlIGlu
IHRoZSBjb250ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGluc3BlY3RlZCBwYWdlIHdpdGhvdXQgY3Jv
c3Mgb3JpZ2luIGNoZWNrcy4iCi0gICAgICAgIH0KLSAgICBdCi19LAotewotICAgICJkb21haW4i
OiAiTmV0d29yazIiLAotICAgICJ0eXBlcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgImlk
IjogIkxvYWRlcklkIiwKLSAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCi0gICAgICAgICAg
ICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIGxvYWRlciBpZGVudGlmaWVyLiIKLSAgICAgICAgfQot
ICAgIF0KLX0sCi17Ci0gICAgImRvbWFpbiI6ICJOZXR3b3JrMyIsCi0gICAgImNvbW1hbmRzIjog
WwotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJsb2FkUmVzb3VyY2UxIiwKLSAgICAg
ICAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBhIHJlc291cmNlIGluIHRoZSBjb250ZXh0IG9m
IGEgZnJhbWUgb24gdGhlIGluc3BlY3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNoZWNr
cy4iCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImxvYWRSZXNv
dXJjZTIiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4g
dGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9z
cyBvcmlnaW4gY2hlY2tzLiIKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgIm5h
bWUiOiAibG9hZFJlc291cmNlMyIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9hZHMg
YSByZXNvdXJjZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFn
ZSB3aXRob3V0IGNyb3NzIG9yaWdpbiBjaGVja3MuIgotICAgICAgICB9LAotICAgICAgICB7Ci0g
ICAgICAgICAgICAibmFtZSI6ICJsb2FkUmVzb3VyY2U0IiwKLSAgICAgICAgICAgICJkZXNjcmlw
dGlvbiI6ICJMb2FkcyBhIHJlc291cmNlIGluIHRoZSBjb250ZXh0IG9mIGEgZnJhbWUgb24gdGhl
IGluc3BlY3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNoZWNrcy4iCi0gICAgICAgIH0s
Ci0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJjZTUiLAotICAgICAg
ICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2Yg
YSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tz
LiIKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAibG9hZFJlc291
cmNlNiIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9hZHMgYSByZXNvdXJjZSBpbiB0
aGUgY29udGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFnZSB3aXRob3V0IGNyb3Nz
IG9yaWdpbiBjaGVja3MuIgotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAibmFt
ZSI6ICJsb2FkUmVzb3VyY2U3IiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBh
IHJlc291cmNlIGluIHRoZSBjb250ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGluc3BlY3RlZCBwYWdl
IHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNoZWNrcy4iCi0gICAgICAgIH0KLSAgICBdCi19Ci1dCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJpYy9lbnVtLXZhbHVlcy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZW51bS12YWx1ZXMuanNvbgpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggY2RhZDYxZGY3YzlmOWM3NmU2OTI4OTdjM2RmZTBiMDgyM2Y5MGU0ZC4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9lbnVtLXZhbHVlcy5q
c29uCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAoteyJkb21haW5zIjpbCi17Ci0gICAg
ImRvbWFpbiI6ICJUeXBlRG9tYWluIiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAg
ICAgICAgICJpZCI6ICJUeXBlRG9tYWluRW51bSIsCi0gICAgICAgICAgICAidHlwZSI6ICJzdHJp
bmciLAotICAgICAgICAgICAgImVudW0iOiBbInNoYXJlZCIsICJyZWQiLCAiZ3JlZW4iLCAiYmx1
ZSJdCi0gICAgICAgIH0KLSAgICBdCi19LAotewotICAgICJkb21haW4iOiAiQ29tbWFuZERvbWFp
biIsCi0gICAgImNvbW1hbmRzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJj
b21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZSIsCi0gICAgICAgICAgICAicGFyYW1ldGVycyI6IFtd
LAotICAgICAgICAgICAgInJldHVybnMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJy
ZXR1cm5WYWx1ZSIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJzaGFyZWQiLCAiY3lhbiIs
ICJtYWdlbnRhIiwgInllbGxvdyJdIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfQotICAgIF0K
LX0sCi17Ci0gICAgImRvbWFpbiI6ICJFdmVudERvbWFpbiIsCi0gICAgImV2ZW50cyI6IFsKLSAg
ICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiZXZlbnRXaXRoRW51bVBhcmFtZXRlciIsCi0g
ICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBh
cmFtZXRlciIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJzaGFyZWQiLCAiYmxhY2siLCAi
d2hpdGUiXSB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0KLSAgICBdCi19Ci1dfQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVy
aWMvZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbiBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V2
ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkZmVkNDFlZDIxZmYyMjQ5NjA0OGYxMjQ5M2E2YWY1
YTMwZTc3MzYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXZl
bnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgorKysgL2Rl
di9udWxsCkBAIC0xLDggKzAsMCBAQAotWwotewotICAgICJkb21haW4iOiAiRG9tYWluIiwKLSAg
ICAiZGVidWdnYWJsZVR5cGVzIjogWyJwYWdlIl0sCi0gICAgImNvbW1hbmRzIjogW3sibmFtZSI6
ICJDb21tYW5kIn1dLAotICAgICJldmVudHMiOiBbeyJuYW1lIjogIkV2ZW50IiwgInRhcmdldFR5
cGVzIjogWyJwYWdlIiwgIndvcmtlciJdfV0KLX0KLV0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V2ZW50cy13aXRoLW9w
dGlvbmFsLXBhcmFtZXRlcnMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9nZW5lcmljL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNv
bgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2FiYmYxMGI4MzZmOWZmN2NkOTkyNWRi
NGQ2YjQxYzVkZmE4N2I0OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2Vu
ZXJpYy9ldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KKysrIC9kZXYvbnVsbApA
QCAtMSw1OSArMCwwIEBACi17Ci0gICAgImRvbWFpbiI6ICJEYXRhYmFzZSIsCi0gICAgInR5cGVz
IjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiRGF0YWJhc2VJZCIsCi0gICAgICAg
ICAgICAidHlwZSI6ICJzdHJpbmciLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1
ZSBpZGVudGlmaWVyIG9mIERhdGFiYXNlIG9iamVjdC4iCi0gICAgICAgIH0sCi0gICAgICAgIHsK
LSAgICAgICAgICAgICJpZCI6ICJQcmltYXJ5Q29sb3JzIiwKLSAgICAgICAgICAgICJ0eXBlIjog
InN0cmluZyIsCi0gICAgICAgICAgICAidmFsdWVzIjogWyJyZWQiLCAiZ3JlZW4iLCAiYmx1ZSJd
Ci0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJDb2xvckxpc3QiLAot
ICAgICAgICAgICAgInR5cGUiOiAiYXJyYXkiLAotICAgICAgICAgICAgIml0ZW1zIjogeyAiJHJl
ZiI6ICJQcmltYXJ5Q29sb3JzIiB9Ci0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAg
ICJpZCI6ICJFcnJvciIsCi0gICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAotICAgICAgICAg
ICAgImRlc2NyaXB0aW9uIjogIkRhdGFiYXNlIGVycm9yLiIsCi0gICAgICAgICAgICAicHJvcGVy
dGllcyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm1lc3NhZ2UiLCAidHlwZSI6ICJz
dHJpbmciLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgbWVzc2FnZS4iIH0sCi0gICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJjb2RlIiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJF
cnJvciBjb2RlLiIgfQotICAgICAgICAgICAgXQotICAgICAgICB9Ci0gICAgXSwKLSAgICAiZXZl
bnRzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJkaWRFeGVjdXRlT3B0aW9u
YWxQYXJhbWV0ZXJzIiwKLSAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwotICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJvcHRpb25hbCI6
IHRydWUsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCi0gICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWUgfSwK
LSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIs
ICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIs
ICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7
ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0g
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVycm9yIiwgIm9w
dGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2NyZWVuQ29sb3Ii
LCAiJHJlZiI6ICJQcmltYXJ5Q29sb3JzIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwgIiRyZWYiOiAiQ29sb3JMaXN0Iiwg
Im9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJpbnRDb2xv
ciIsICJ0eXBlIjogInN0cmluZyIsICJ2YWx1ZXMiOiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxs
b3ciLCAiYmxhY2siXSwgIm9wdGlvbmFsIjogdHJ1ZSB9Ci0gICAgICAgICAgICBdCi0gICAgICAg
IH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImRpZEV4ZWN1dGVOb09wdGlvbmFs
UGFyYW1ldGVycyIsCi0gICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKLSAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICJ0
eXBlIjogInN0cmluZyIgfSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAi
dHlwZSI6ICJzdHJpbmciIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAi
LCAidHlwZSI6ICJudW1iZXIiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMi
LCAidHlwZSI6ICJvYmplY3QiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2Fk
IiwgInR5cGUiOiAiYW55IiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic3FsRXJyb3Ii
LCAiJHJlZiI6ICJFcnJvciIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNjcmVlbkNv
bG9yIiwgIiRyZWYiOiAiUHJpbWFyeUNvbG9ycyIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1l
IjogImFsdGVybmF0ZUNvbG9ycyIsICIkcmVmIjogIkNvbG9yTGlzdCIgfSwKLSAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInByaW50Q29sb3IiLCAidHlwZSI6ICJzdHJpbmciLCAidmFsdWVzIjog
WyJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93IiwgImJsYWNrIl0gfQotICAgICAgICAgICAgXQot
ICAgICAgICB9Ci0gICAgXQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvY29tbWFuZC10YXJnZXRUeXBl
LW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2NvbW1h
bmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1yZXN1bHQK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzMTNmYTkxNTFlOTJjZDAzYjAwOGIzYzM1
ZWFiZDM3ZDk5MTdmN2UuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVy
aWMvZXhwZWN0ZWQvY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxl
VHlwZS5qc29uLXJlc3VsdAorKysgL2Rldi9udWxsCkBAIC0xLDEwNjMgKzAsMCBAQAotIyMjIEJl
Z2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdn
YWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0vLyBEb21haW4KLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIkRvbWFpbiIsIFsi
cGFnZSIsICJ3b3JrZXIiXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiRG9t
YWluLkNvbW1hbmQiLCBudWxsLCBbXSwgW10pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckV2
ZW50KCJEb21haW4uRXZlbnQiLCBudWxsLCBbXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVy
RG9tYWluRGlzcGF0Y2hlciA9IEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEaXNwYXRjaGVyLmJp
bmQoSW5zcGVjdG9yQmFja2VuZCwgIkRvbWFpbiIpOwotSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0
ZURvbWFpbigiRG9tYWluIiwgWyJwYWdlIl0pOwotIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNr
ZW5kQ29tbWFuZHMuanMKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlz
cGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmQtdGFy
Z2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi0jaW5jbHVkZSAiVGVzdFByb3Rv
Y29sVHlwZXMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91
dGVyLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBBbHRlcm5hdGVCYWNrZW5k
RGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQ
dHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVy
ID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQotICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5k
RGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0K
LXByaXZhdGU6Ci0gICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRj
aGVyOwotfTsKLQotCi1jbGFzcyBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciA6IHB1
YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+
QWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQg
Q29tbWFuZChsb25nIGNhbGxJZCkgPSAwOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
Ci0KLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSMj
IyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVU
eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3By
YWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXR5cGVkZWYg
U3RyaW5nIEVycm9yU3RyaW5nOwotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCi1jbGFzcyBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjsKLSNlbmRp
ZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQotY2xhc3MgRG9t
YWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQg
Q29tbWFuZChFcnJvclN0cmluZyYpID0gMDsKLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIH5Eb21h
aW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKLX07Ci0KLWNsYXNzIERvbWFpbkJhY2tlbmRE
aXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsK
LXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUo
QmFja2VuZERpc3BhdGNoZXImLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAg
ICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVm
PEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5hbDsKLXByaXZhdGU6Ci0gICAgdm9pZCBDb21t
YW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwot
I2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotcHVibGljOgotICAg
IHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0Y2hlcihBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0
Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRl
cm5hdGVEaXNwYXRjaGVyOyB9Ci1wcml2YXRlOgotICAgIEFsdGVybmF0ZURvbWFpbkJhY2tlbmRE
aXNwYXRjaGVyKiBtX2FsdGVybmF0ZURpc3BhdGNoZXIgeyBudWxscHRyIH07Ci0jZW5kaWYKLXBy
aXZhdGU6Ci0gICAgRG9tYWluQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImLCBE
b21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICBEb21haW5CYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXIqIG1fYWdlbnQgeyBudWxscHRyIH07Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdn
YWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5o
IgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4K
LSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3ll
ZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2lmIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5k
RGlzcGF0Y2hlcnMuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotRG9tYWlu
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+RG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
KCkgeyB9Ci0KLVJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gRG9tYWluQmFja2VuZERpc3Bh
dGNoZXI6OmNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIERvbWFp
bkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgRG9tYWluQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIsIGFnZW50KSk7
Ci19Ci0KLURvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihC
YWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIERvbWFpbkJhY2tlbmREaXNwYXRj
aGVySGFuZGxlciogYWdlbnQpCi0gICAgOiBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihi
YWNrZW5kRGlzcGF0Y2hlcikKLSAgICAsIG1fYWdlbnQoYWdlbnQpCi17Ci0gICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKCJEb21haW4iX3MsIHRoaXMp
OwotfQotCi12b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVl
c3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkK
LXsKLSAgICBSZWY8RG9tYWluQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwotCi0g
ICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVyczsKLSAgICBtZXNzYWdlLT5nZXRPYmpl
Y3QoInBhcmFtcyJfcywgcGFyYW1ldGVycyk7Ci0KLSAgICBpZiAobWV0aG9kID09ICJDb21tYW5k
IikKLSAgICAgICAgQ29tbWFuZChyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOwotICAg
IGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihC
YWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRG9tYWluLiIgKyBtZXRob2QgKyAi
JyB3YXMgbm90IGZvdW5kIik7Ci19Ci0KLXZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNv
bW1hbmQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCi17Ci0jaWYgRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0gICAgaWYgKG1fYWx0ZXJuYXRl
RGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPkNvbW1hbmQocmVx
dWVzdElkKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAgRXJyb3JTdHJp
bmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKTsKLSAgICBtX2FnZW50LT5Db21tYW5kKGVycm9yKTsKLQotICAgIGlmICghZXJyb3Iu
bGVuZ3RoKCkpCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1
ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2Vy
dmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVU
eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3By
YWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8
d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFt
ZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEZyb250ZW5kUm91dGVyOwotCi1jbGFzcyBEb21h
aW5Gcm9udGVuZERpc3BhdGNoZXIgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVi
bGljOgotICAgIERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcihGcm9udGVuZFJvdXRlciYgZnJvbnRl
bmRSb3V0ZXIpIDogbV9mcm9udGVuZFJvdXRlcihmcm9udGVuZFJvdXRlcikgeyB9Ci0gICAgdm9p
ZCBFdmVudCgpOwotcHJpdmF0ZToKLSAgICBGcm9udGVuZFJvdXRlciYgbV9mcm9udGVuZFJvdXRl
cjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0RnJv
bnRlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRj
aGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdl
dFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXZvaWQgRG9tYWluRnJvbnRlbmREaXNwYXRj
aGVyOjpFdmVudCgpCi17Ci0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJf
cywgIkRvbWFpbi5FdmVudCJfcyk7Ci0KLSAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChq
c29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5
cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJh
Z21hIG9uY2UKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlw
ZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9y
IHsKLQotCi0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLQotCi0KLQotCi0KLQotCi19IC8vIG5h
bWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xP
YmplY3RzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmQtdGFy
Z2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsK
LQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0K
LX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9i
amVjdHMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hl
cnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmQtdGFyZ2V0VHlw
ZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0
ci5oPgotCi1AcHJvdG9jb2wgVGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcjsKLQotbmFt
ZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotY2xhc3MgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmRE
aXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVy
IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBPYmpDSW5zcGVj
dG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFu
ZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQotICAgIHZvaWQgQ29tbWFu
ZChsb25nIHJlcXVlc3RJZCkgZmluYWw7Ci1wcml2YXRlOgotICAgIFJldGFpblB0cjxpZDxUZXN0
UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKLX07Ci0KLX0gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNw
YXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hl
cnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5
cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJU
ZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bEludGVybmFsLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0j
aW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXZv
aWQgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVx
dWVzdElkKQotewotICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxl
Y3RvcihDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0gICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBC
YWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRG9tYWluLkNvbW1hbmQnIHdhcyBu
b3QgZm91bmQiX3MpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vy
cm9ycygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWQgZXJyb3JDYWxsYmFjayA9
IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9y
dFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3Is
IGVycm9yKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMo
KTsKLSAgICB9OwotCi0gICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKSwgZmFsc2UpOwotICAgIH07Ci0KLSAgICBbbV9kZWxlZ2F0ZSBDb21tYW5kV2l0aEVycm9y
Q2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsK
LX0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24uaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1h
bmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0
b3IvVGVzdFByb3RvY29sLmg+Ci0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0
IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKLUBw
cm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4sIHNldHRlcj1zZXREb21haW5IYW5kbGVyOikgaWQ8
VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4gZG9tYWluSGFuZGxlcjsKLUBwcm9wZXJ0
eSAobm9uYXRvbWljLCByZWFkb25seSkgVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNw
YXRjaGVyICpkb21haW5FdmVudERpc3BhdGNoZXI7Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24ubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21t
YW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3Rv
Y29sQ29uZmlndXJhdGlvbi5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgot
I2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgotI2ltcG9ydCA8SmF2YVNj
cmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgotCi11c2lu
ZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29u
ZmlndXJhdGlvbgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRy
b2xsZXI7Ci0gICAgaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4gX2RvbWFpbkhh
bmRsZXI7Ci0gICAgVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyICpfZG9t
YWluRXZlbnREaXNwYXRjaGVyOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9s
bGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBz
ZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsK
LSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwot
ICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBbX2RvbWFpbkhh
bmRsZXIgcmVsZWFzZV07Ci0gICAgW19kb21haW5FdmVudERpc3BhdGNoZXIgcmVsZWFzZV07Ci0g
ICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi0tICh2b2lkKXNldERvbWFpbkhhbmRsZXI6KGlkPFRl
c3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+KWhhbmRsZXIKLXsKLSAgICBpZiAoaGFuZGxl
ciA9PSBfZG9tYWluSGFuZGxlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgW19kb21haW5IYW5k
bGVyIHJlbGVhc2VdOwotICAgIF9kb21haW5IYW5kbGVyID0gW2hhbmRsZXIgcmV0YWluXTsKLQot
ICAgIGF1dG8gYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IG1ha2VVbmlxdWU8T2JqQ0luc3BlY3RvckRv
bWFpbkJhY2tlbmREaXNwYXRjaGVyPihoYW5kbGVyKTsKLSAgICBhdXRvIGFsdGVybmF0ZUFnZW50
ID0gbWFrZVVuaXF1ZTxBbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudDxEb21haW5CYWNrZW5kRGlz
cGF0Y2hlciwgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXI+PigiRG9tYWluIl9zLCAq
X2NvbnRyb2xsZXIsIFdURk1vdmUoYWx0ZXJuYXRlRGlzcGF0Y2hlcikpOwotICAgIF9jb250cm9s
bGVyLT5hcHBlbmRFeHRyYUFnZW50KFdURk1vdmUoYWx0ZXJuYXRlQWdlbnQpKTsKLX0KLQotLSAo
aWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4pZG9tYWluSGFuZGxlcgotewotICAg
IHJldHVybiBfZG9tYWluSGFuZGxlcjsKLX0KLQotLSAoVGVzdFByb3RvY29sRG9tYWluRG9tYWlu
RXZlbnREaXNwYXRjaGVyICopZG9tYWluRXZlbnREaXNwYXRjaGVyCi17Ci0gICAgaWYgKCFfZG9t
YWluRXZlbnREaXNwYXRjaGVyKQotICAgICAgICBfZG9tYWluRXZlbnREaXNwYXRjaGVyID0gW1tU
ZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgYWxsb2NdIGluaXRXaXRoQ29u
dHJvbGxlcjpfY29udHJvbGxlcl07Ci0gICAgcmV0dXJuIF9kb21haW5FdmVudERpc3BhdGNoZXI7
Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24u
bW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hp
bmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2lt
cG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDx3dGYvSlNPTlZh
bHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW1wbGVtZW50YXRpb24g
VGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyCi17Ci0gICAgQXVnbWVudGFi
bGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKLX0KLQotLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250
cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAg
ICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIpOwotICAgIF9jb250cm9sbGVy
ID0gY29udHJvbGxlcjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClFdmVudAotewot
ICAgIGNvbnN0IEZyb250ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29udHJvbGxlci0+ZnJvbnRlbmRS
b3V0ZXIoKTsKLQotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJE
b21haW4uRXZlbnQiX3MpOwotICAgIHJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNP
TlN0cmluZygpKTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZl
bnREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmct
ZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLSNpbXBv
cnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KLQotCi0KLQotdHlwZWRl
ZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sUGxhdGZvcm0pIHsKLSAgICBUZXN0UHJv
dG9jb2xQbGF0Zm9ybUFsbCwKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWMsCi0gICAg
VGVzdFByb3RvY29sUGxhdGZvcm1JT1MsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUywK
LX07Ci0KLQotCi0KLQotQHByb3RvY29sIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXIg
PE5TT2JqZWN0PgotQG9wdGlvbmFsCi0tICh2b2lkKUNvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazoo
dm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2
b2lkKF4pKHZvaWQpKXN1Y2Nlc3NDYWxsYmFjazsKLUBlbmQKLQotX19hdHRyaWJ1dGVfXygodmlz
aWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbERvbWFpbkRvbWFp
bkV2ZW50RGlzcGF0Y2hlciA6IE5TT2JqZWN0Ci0tICh2b2lkKUV2ZW50OwotQGVuZAotCi0KLSNp
bXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJpbGl0eU9iamVjdHMu
aD4KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sSW50ZXJuYWwuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNv
bW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJv
dG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCi0jaW1w
b3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNp
bXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sRG9tYWlu
RG9tYWluRXZlbnREaXNwYXRjaGVyIChQcml2YXRlKQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
Q29udHJvbGxlcjooSW5zcGVjdG9yOjpBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNv
bnRyb2xsZXI7Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5o
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1k
b21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgPFdlYkluc3Bl
Y3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3Rv
ciB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KLU9wdGlvbmFsPE9iakNFbnVt
VHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOwotCi1pbmxpbmUg
U3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sUGxhdGZvcm0gdmFsdWUpCi17Ci0g
ICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDoKLSAg
ICAgICAgcmV0dXJuICJhbGwiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVy
aWM6Ci0gICAgICAgIHJldHVybiAiZ2VuZXJpYyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBs
YXRmb3JtSU9TOgotICAgICAgICByZXR1cm4gImlvcyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2Nv
bFBsYXRmb3JtTWFjT1M6Ci0gICAgICAgIHJldHVybiAibWFjb3MiX3M7Ci0gICAgfQotfQotCi10
ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sUGxhdGZvcm0+IGZyb21Qcm90
b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiYWxs
IikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOwotICAgIGlmICh2YWx1
ZSA9PSAiZ2VuZXJpYyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVy
aWM7Ci0gICAgaWYgKHZhbHVlID09ICJpb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29s
UGxhdGZvcm1JT1M7Ci0gICAgaWYgKHZhbHVlID09ICJtYWNvcyIpCi0gICAgICAgIHJldHVybiBU
ZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kLXRhcmdl
dFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFBy
b3RvY29sVHlwZVBhcnNlci5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNP
Tk9iamVjdFByaXZhdGUuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0KLQot
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5
cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1w
b3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmpl
Y3RQcml2YXRlLmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3RmL0pT
T05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0jIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9jb21tYW5kcy13aXRo
LWFzeW5jLWF0dHJpYnV0ZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtYXN5bmMt
YXR0cmlidXRlLmpzb24tcmVzdWx0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYzVj
NDFkYjUzYWI2YmM0MGNhNGE1MzQ3ZWE3MmE4N2I3MzQxOGE2Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtYXN5bmMtYXR0
cmlidXRlLmpzb24tcmVzdWx0CisrKyAvZGV2L251bGwKQEAgLTEsMTgwOSArMCwwIEBACi0jIyMg
QmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0vLyBEYXRhYmFzZQotSW5z
cGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiRGF0YWJhc2UiLCBudWxsKTsKLUluc3BlY3Rv
ckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJEYXRhYmFzZS5QcmltYXJ5Q29sb3JzIiwge1JlZDogInJl
ZCIsIEdyZWVuOiAiZ3JlZW4iLCBCbHVlOiAiYmx1ZSJ9KTsKLUluc3BlY3RvckJhY2tlbmQucmVn
aXN0ZXJDb21tYW5kKCJEYXRhYmFzZS5leGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVz
IiwgbnVsbCwgW3sibmFtZSI6ICJkYXRhYmFzZUlkIiwgInR5cGUiOiAibnVtYmVyIn0sIHsibmFt
ZSI6ICJxdWVyeSIsICJ0eXBlIjogInN0cmluZyJ9XSwgWyJjb2x1bW5OYW1lcyIsICJub3RlcyIs
ICJ0aW1lc3RhbXAiLCAidmFsdWVzIiwgInBheWxvYWQiLCAiZGF0YWJhc2VJZCIsICJzcWxFcnJv
ciIsICJzY3JlZW5Db2xvciIsICJhbHRlcm5hdGVDb2xvcnMiLCAicHJpbnRDb2xvciJdKTsKLUlu
c3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJEYXRhYmFzZS5leGVjdXRlU1FMQXN5bmNP
cHRpb25hbFJldHVyblZhbHVlcyIsIG51bGwsIFt7Im5hbWUiOiAiZGF0YWJhc2VJZCIsICJ0eXBl
IjogIm51bWJlciJ9LCB7Im5hbWUiOiAicXVlcnkiLCAidHlwZSI6ICJzdHJpbmcifV0sIFsiY29s
dW1uTmFtZXMiLCAibm90ZXMiLCAidGltZXN0YW1wIiwgInZhbHVlcyIsICJwYXlsb2FkIiwgImRh
dGFiYXNlSWQiLCAic3FsRXJyb3IiLCAic2NyZWVuQ29sb3IiLCAiYWx0ZXJuYXRlQ29sb3JzIiwg
InByaW50Q29sb3IiXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiRGF0YWJh
c2UuZXhlY3V0ZVNRTFN5bmMiLCBudWxsLCBbeyJuYW1lIjogImRhdGFiYXNlSWQiLCAidHlwZSI6
ICJudW1iZXIifSwgeyJuYW1lIjogInF1ZXJ5IiwgInR5cGUiOiAic3RyaW5nIn1dLCBbImNvbHVt
bk5hbWVzIiwgIm5vdGVzIiwgInRpbWVzdGFtcCIsICJ2YWx1ZXMiLCAicGF5bG9hZCIsICJkYXRh
YmFzZUlkIiwgInNxbEVycm9yIiwgImFsdGVybmF0ZUNvbG9ycyIsICJzY3JlZW5Db2xvciIsICJw
cmludENvbG9yIl0pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIkRhdGFiYXNl
LmV4ZWN1dGVTUUxBc3luYyIsIG51bGwsIFt7Im5hbWUiOiAiZGF0YWJhc2VJZCIsICJ0eXBlIjog
Im51bWJlciJ9LCB7Im5hbWUiOiAicXVlcnkiLCAidHlwZSI6ICJzdHJpbmcifV0sIFsiY29sdW1u
TmFtZXMiLCAibm90ZXMiLCAidGltZXN0YW1wIiwgInZhbHVlcyIsICJwYXlsb2FkIiwgImRhdGFi
YXNlSWQiLCAic3FsRXJyb3IiLCAic2NyZWVuQ29sb3IiLCAiYWx0ZXJuYXRlQ29sb3JzIiwgInBy
aW50Q29sb3IiXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRGF0YWJhc2VEaXNwYXRjaGVy
ID0gSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRpc3BhdGNoZXIuYmluZChJbnNwZWN0b3JCYWNr
ZW5kLCAiRGF0YWJhc2UiKTsKLUluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkRhdGFi
YXNlIiwgbnVsbCk7Ci0jIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwot
Ci0jIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1
dGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJh
Z21hIG9uY2UKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQot
Ci0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1j
bGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBzZXRC
YWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikg
eyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQotICAgIEJhY2tl
bmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2Vu
ZERpc3BhdGNoZXIuZ2V0KCk7IH0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPEJhY2tlbmREaXNwYXRj
aGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwotfTsKLQotCi1jbGFzcyBBbHRlcm5hdGVEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsK
LXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5BbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
KCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1
ZXMobG9uZyBjYWxsSWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFs
dWVzKGxvbmcgY2FsbElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVy
eSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMU3luYyhsb25nIGNhbGxJZCwgaW50
IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgZXhlY3V0ZVNRTEFzeW5jKGxvbmcgY2FsbElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29u
c3QgU3RyaW5nJiBpbl9xdWVyeSkgPSAwOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
Ci0KLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSMj
IyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVk
ZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsK
LQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotY2xhc3MgQWx0
ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjsKLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQotY2xhc3MgRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXIgewotcHVibGljOgotICAgIC8vIE5hbWVkIGFmdGVyIHBhcmFtZXRlciAncHJp
bnRDb2xvcicgd2hpbGUgZ2VuZXJhdGluZyBjb21tYW5kL2V2ZW50IGV4ZWN1dGVTUUxTeW5jT3B0
aW9uYWxSZXR1cm5WYWx1ZXMuCi0gICAgZW51bSBjbGFzcyBQcmludENvbG9yIHsKLSAgICAgICAg
Q3lhbiA9IDMsCi0gICAgICAgIE1hZ2VudGEgPSA0LAotICAgICAgICBZZWxsb3cgPSA1LAotICAg
ICAgICBCbGFjayA9IDYsCi0gICAgfTsgLy8gZW51bSBjbGFzcyBQcmludENvbG9yCi0gICAgdmly
dHVhbCB2b2lkIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMoRXJyb3JTdHJpbmcm
LCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSwgUmVmUHRyPEpTT046
OkFycmF5T2Y8U3RyaW5nPj4mIG9wdF9vdXRfY29sdW1uTmFtZXMsIE9wdGlvbmFsPFN0cmluZz4m
IG9wdF9vdXRfbm90ZXMsIE9wdGlvbmFsPGRvdWJsZT4mIG9wdF9vdXRfdGltZXN0YW1wLCBPcHRp
b25hbDxKU09OOjpPYmplY3Q+JiBvcHRfb3V0X3ZhbHVlcywgT3B0aW9uYWw8SlNPTjo6VmFsdWU+
JiBvcHRfb3V0X3BheWxvYWQsIE9wdGlvbmFsPGludD4mIG9wdF9vdXRfZGF0YWJhc2VJZCwgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mIG9wdF9vdXRfc3FsRXJy
b3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzKiBvcHRfb3V0
X3NjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9y
TGlzdD4mIG9wdF9vdXRfYWx0ZXJuYXRlQ29sb3JzLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlcjo6UHJpbnRDb2xvciogb3B0X291dF9wcmludENvbG9yKSA9IDA7Ci0gICAgY2xhc3Mg
RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjayA6IHB1YmxpYyBCYWNr
ZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEV4ZWN1
dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2soUmVmPEJhY2tlbmREaXNwYXRj
aGVyPiYmLCBpbnQgaWQpOwotICAgICAgICB2b2lkIHNlbmRTdWNjZXNzKFJlZlB0cjxKU09OOjpB
cnJheU9mPFN0cmluZz4+JiYgY29sdW1uTmFtZXMsIE9wdGlvbmFsPFN0cmluZz4mIG5vdGVzLCBP
cHRpb25hbDxkb3VibGU+JiB0aW1lc3RhbXAsIE9wdGlvbmFsPEpTT046Ok9iamVjdD4mIHZhbHVl
cywgT3B0aW9uYWw8SlNPTjo6VmFsdWU+JiBwYXlsb2FkLCBPcHRpb25hbDxpbnQ+JiBkYXRhYmFz
ZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYmIHNxbEVy
cm9yLCBPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9y
cz4gc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29s
b3JMaXN0PiYmIGFsdGVybmF0ZUNvbG9ycywgT3B0aW9uYWw8RGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXI6OlByaW50Q29sb3I+IHByaW50Q29sb3IpOwotICAgIH07Ci0gICAgdmlydHVh
bCB2b2lkIGV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGludCBpbl9kYXRhYmFz
ZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5LCBSZWY8RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxS
ZXR1cm5WYWx1ZXNDYWxsYmFjaz4mJiBjYWxsYmFjaykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBl
eGVjdXRlU1FMU3luYyhFcnJvclN0cmluZyYsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJp
bmcmIGluX3F1ZXJ5LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYgb3V0X2NvbHVtbk5h
bWVzLCBTdHJpbmcqIG91dF9ub3RlcywgZG91YmxlKiBvdXRfdGltZXN0YW1wLCBKU09OOjpPYmpl
Y3QqIG91dF92YWx1ZXMsIEpTT046OlZhbHVlKiBvdXRfcGF5bG9hZCwgaW50KiBvdXRfZGF0YWJh
c2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mIG91dF9z
cWxFcnJvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+
JiBvdXRfYWx0ZXJuYXRlQ29sb3JzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJp
bWFyeUNvbG9ycyogb3V0X3NjcmVlbkNvbG9yLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlcjo6UHJpbnRDb2xvciogb3V0X3ByaW50Q29sb3IpID0gMDsKLSAgICBjbGFzcyBFeGVjdXRl
U1FMQXN5bmNDYWxsYmFjayA6IHB1YmxpYyBCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNl
IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrKFJlZjxCYWNr
ZW5kRGlzcGF0Y2hlcj4mJiwgaW50IGlkKTsKLSAgICAgICAgdm9pZCBzZW5kU3VjY2VzcyhSZWZQ
dHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYmIGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG5v
dGVzLCBkb3VibGUgdGltZXN0YW1wLCBKU09OOjpPYmplY3QgdmFsdWVzLCBKU09OOjpWYWx1ZSBw
YXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFi
YXNlOjpFcnJvcj4mJiBzcWxFcnJvciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlBy
aW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6Q29sb3JMaXN0PiYmIGFsdGVybmF0ZUNvbG9ycywgRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXI6OlByaW50Q29sb3IgcHJpbnRDb2xvcik7Ci0gICAgfTsKLSAgICB2aXJ0dWFs
IHZvaWQgZXhlY3V0ZVNRTEFzeW5jKGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGlu
X3F1ZXJ5LCBSZWY8RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2s+JiYgY2FsbGJhY2spID0gMDsKLXBy
b3RlY3RlZDoKLSAgICB2aXJ0dWFsIH5EYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigp
OwotfTsKLQotY2xhc3MgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBT
dXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIHZvaWQgZGlzcGF0Y2gobG9uZyBy
ZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3Nh
Z2UpIGZpbmFsOwotcHJpdmF0ZToKLSAgICB2b2lkIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1
cm5WYWx1ZXMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVy
cyk7Ci0gICAgdm9pZCBleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHJl
cXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKLSAgICB2b2lkIGV4
ZWN1dGVTUUxTeW5jKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFt
ZXRlcnMpOwotICAgIHZvaWQgZXhlY3V0ZVNRTEFzeW5jKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8
SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQotcHVibGljOgotICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0Y2hl
cihBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVy
KSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KLXByaXZh
dGU6Ci0gICAgQWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciogbV9hbHRlcm5hdGVE
aXNwYXRjaGVyIHsgbnVsbHB0ciB9OwotI2VuZGlmCi1wcml2YXRlOgotICAgIERhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVySGFuZGxlciopOwotICAgIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2Fn
ZW50IHsgbnVsbHB0ciB9OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5k
IEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJh
Y2tlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBj
b21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0
QmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVk
ZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgot
Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jaW5jbHVkZSAi
VGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBJ
bnNwZWN0b3IgewotCi1EYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6fkRhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9Ci0KLVJlZjxEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVyPiBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoQmFja2VuZERpc3BhdGNo
ZXImIGJhY2tlbmREaXNwYXRjaGVyLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciog
YWdlbnQpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKLX0KLQotRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlcjo6RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFj
a2VuZERpc3BhdGNoZXIsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkK
LSAgICA6IFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQot
ICAgICwgbV9hZ2VudChhZ2VudCkKLXsKLSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3Rl
ckRpc3BhdGNoZXJGb3JEb21haW4oIkRhdGFiYXNlIl9zLCB0aGlzKTsKLX0KLQotdm9pZCBEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3Ry
aW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKLXsKLSAgICBSZWY8RGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7Ci0KLSAgICBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiBwYXJhbWV0ZXJzOwotICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9z
LCBwYXJhbWV0ZXJzKTsKLQotICAgIGlmIChtZXRob2QgPT0gImV4ZWN1dGVTUUxTeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXMiKQotICAgICAgICBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFs
dWVzKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7Ci0gICAgZWxzZSBpZiAobWV0aG9k
ID09ICJleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyIpCi0gICAgICAgIGV4ZWN1
dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0
ZXJzKSk7Ci0gICAgZWxzZSBpZiAobWV0aG9kID09ICJleGVjdXRlU1FMU3luYyIpCi0gICAgICAg
IGV4ZWN1dGVTUUxTeW5jKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7Ci0gICAgZWxz
ZSBpZiAobWV0aG9kID09ICJleGVjdXRlU1FMQXN5bmMiKQotICAgICAgICBleGVjdXRlU1FMQXN5
bmMocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKLSAgICBlbHNlCi0gICAgICAgIG1f
YmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6
Ok1ldGhvZE5vdEZvdW5kLCAiJ0RhdGFiYXNlLiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5k
Iik7Ci19Ci0KLXZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTFN5bmNP
cHRpb25hbFJldHVyblZhbHVlcyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4m
JiBwYXJhbWV0ZXJzKQotewotICAgIGludCBpbl9kYXRhYmFzZUlkID0gbV9iYWNrZW5kRGlzcGF0
Y2hlci0+Z2V0SW50ZWdlcihwYXJhbWV0ZXJzLmdldCgpLCAiZGF0YWJhc2VJZCJfcywgbnVsbHB0
cik7Ci0gICAgU3RyaW5nIGluX3F1ZXJ5ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5n
KHBhcmFtZXRlcnMuZ2V0KCksICJxdWVyeSJfcywgbnVsbHB0cik7Ci0gICAgaWYgKG1fYmFja2Vu
ZERpc3BhdGNoZXItPmhhc1Byb3RvY29sRXJyb3JzKCkpIHsKLSAgICAgICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBh
cmFtcywgIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnRGF0YWJhc2UuZXhlY3V0ZVNRTFN5bmNP
cHRpb25hbFJldHVyblZhbHVlcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIl9zKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQotICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVE
aXNwYXRjaGVyLT5leGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKHJlcXVlc3RJZCwg
aW5fZGF0YWJhc2VJZCwgaW5fcXVlcnkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlm
Ci0KLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQg
PSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmlu
Zz4+IG91dF9jb2x1bW5OYW1lczsKLSAgICBPcHRpb25hbDxTdHJpbmc+IG91dF9ub3RlczsKLSAg
ICBPcHRpb25hbDxkb3VibGU+IG91dF90aW1lc3RhbXA7Ci0gICAgT3B0aW9uYWw8SlNPTjo6T2Jq
ZWN0PiBvdXRfdmFsdWVzOwotICAgIE9wdGlvbmFsPEpTT046OlZhbHVlPiBvdXRfcGF5bG9hZDsK
LSAgICBPcHRpb25hbDxpbnQ+IG91dF9kYXRhYmFzZUlkOwotICAgIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IG91dF9zcWxFcnJvcjsKLSAgICBJbnNwZWN0b3I6
OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyBvdXRfc2NyZWVuQ29sb3I7Ci0gICAg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IG91dF9hbHRl
cm5hdGVDb2xvcnM7Ci0gICAgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50
Q29sb3Igb3V0X3ByaW50Q29sb3I7Ci0gICAgbV9hZ2VudC0+ZXhlY3V0ZVNRTFN5bmNPcHRpb25h
bFJldHVyblZhbHVlcyhlcnJvciwgaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnksIG91dF9jb2x1bW5O
YW1lcywgb3V0X25vdGVzLCBvdXRfdGltZXN0YW1wLCBvdXRfdmFsdWVzLCBvdXRfcGF5bG9hZCwg
b3V0X2RhdGFiYXNlSWQsIG91dF9zcWxFcnJvciwgb3V0X3NjcmVlbkNvbG9yLCBvdXRfYWx0ZXJu
YXRlQ29sb3JzLCBvdXRfcHJpbnRDb2xvcik7Ci0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7
Ci0gICAgICAgIGlmIChvdXRfY29sdW1uTmFtZXMpCi0gICAgICAgICAgICByZXN1bHQtPnNldEFy
cmF5KCJjb2x1bW5OYW1lcyJfcywgb3V0X2NvbHVtbk5hbWVzKTsKLSAgICAgICAgaWYgKG91dF9u
b3Rlcy5oYXNWYWx1ZSgpKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoIm5vdGVzIl9z
LCAqb3V0X25vdGVzKTsKLSAgICAgICAgaWYgKG91dF90aW1lc3RhbXAuaGFzVmFsdWUoKSkKLSAg
ICAgICAgICAgIHJlc3VsdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICpvdXRfdGltZXN0YW1w
KTsKLSAgICAgICAgaWYgKG91dF92YWx1ZXMuaGFzVmFsdWUoKSkKLSAgICAgICAgICAgIHJlc3Vs
dC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsICpvdXRfdmFsdWVzKTsKLSAgICAgICAgaWYgKG91dF9w
YXlsb2FkLmhhc1ZhbHVlKCkpCi0gICAgICAgICAgICByZXN1bHQtPnNldFZhbHVlKCJwYXlsb2Fk
Il9zLCAqb3V0X3BheWxvYWQpOwotICAgICAgICBpZiAob3V0X2RhdGFiYXNlSWQuaGFzVmFsdWUo
KSkKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgKm91dF9k
YXRhYmFzZUlkKTsKLSAgICAgICAgaWYgKG91dF9zcWxFcnJvcikKLSAgICAgICAgICAgIHJlc3Vs
dC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgb3V0X3NxbEVycm9yKTsKLSAgICAgICAgaWYgKG91
dF9zY3JlZW5Db2xvci5oYXNWYWx1ZSgpKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmco
InNjcmVlbkNvbG9yIl9zLCAqb3V0X3NjcmVlbkNvbG9yKTsKLSAgICAgICAgaWYgKG91dF9hbHRl
cm5hdGVDb2xvcnMpCi0gICAgICAgICAgICByZXN1bHQtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xv
cnMiX3MsIG91dF9hbHRlcm5hdGVDb2xvcnMpOwotICAgICAgICBpZiAob3V0X3ByaW50Q29sb3Iu
aGFzVmFsdWUoKSkKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9z
LCAqb3V0X3ByaW50Q29sb3IpOwotICAgIH0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAg
ICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3Zl
KHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZN
b3ZlKGVycm9yKSk7Ci19Ci0KLURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVj
dXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrOjpFeGVjdXRlU1FMQXN5bmNP
cHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrKFJlZjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBiYWNr
ZW5kRGlzcGF0Y2hlciwgaW50IGlkKSA6IEJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2Uo
V1RGTW92ZShiYWNrZW5kRGlzcGF0Y2hlciksIGlkKSB7IH0KLQotdm9pZCBEYXRhYmFzZUJhY2tl
bmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXND
YWxsYmFjazo6c2VuZFN1Y2Nlc3MoUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mJiBjb2x1
bW5OYW1lcywgT3B0aW9uYWw8U3RyaW5nPiYgbm90ZXMsIE9wdGlvbmFsPGRvdWJsZT4mIHRpbWVz
dGFtcCwgT3B0aW9uYWw8SlNPTjo6T2JqZWN0PiYgdmFsdWVzLCBPcHRpb25hbDxKU09OOjpWYWx1
ZT4mIHBheWxvYWQsIE9wdGlvbmFsPGludD4mIGRhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiYgc3FsRXJyb3IsIE9wdGlvbmFsPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiBzY3JlZW5Db2xvciwgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiYgYWx0ZXJuYXRlQ29s
b3JzLCBPcHRpb25hbDxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xv
cj4gcHJpbnRDb2xvcikKLXsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpT
T046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgaWYgKGNvbHVtbk5hbWVzKQotICAgICAgICBqc29u
TWVzc2FnZS0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBjb2x1bW5OYW1lcyk7Ci0gICAgaWYg
KG5vdGVzLmhhc1ZhbHVlKCkpCi0gICAgICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm5vdGVz
Il9zLCAqbm90ZXMpOwotICAgIGlmICh0aW1lc3RhbXAuaGFzVmFsdWUoKSkKLSAgICAgICAganNv
bk1lc3NhZ2UtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCAqdGltZXN0YW1wKTsKLSAgICBpZiAo
dmFsdWVzLmhhc1ZhbHVlKCkpCi0gICAgICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoInZhbHVl
cyJfcywgKnZhbHVlcyk7Ci0gICAgaWYgKHBheWxvYWQuaGFzVmFsdWUoKSkKLSAgICAgICAganNv
bk1lc3NhZ2UtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCAqcGF5bG9hZCk7Ci0gICAgaWYgKGRhdGFi
YXNlSWQuaGFzVmFsdWUoKSkKLSAgICAgICAganNvbk1lc3NhZ2UtPnNldEludGVnZXIoImRhdGFi
YXNlSWQiX3MsICpkYXRhYmFzZUlkKTsKLSAgICBpZiAoc3FsRXJyb3IpCi0gICAgICAgIGpzb25N
ZXNzYWdlLT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBzcWxFcnJvcik7Ci0gICAgaWYgKHNjcmVl
bkNvbG9yLmhhc1ZhbHVlKCkpCi0gICAgICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoInNjcmVl
bkNvbG9yIl9zLCAqc2NyZWVuQ29sb3IpOwotICAgIGlmIChhbHRlcm5hdGVDb2xvcnMpCi0gICAg
ICAgIGpzb25NZXNzYWdlLT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCBhbHRlcm5hdGVD
b2xvcnMpOwotICAgIGlmIChwcmludENvbG9yLmhhc1ZhbHVlKCkpCi0gICAgICAgIGpzb25NZXNz
YWdlLT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsICpwcmludENvbG9yKTsKLSAgICBDYWxsYmFj
a0Jhc2U6OnNlbmRTdWNjZXNzKFdURk1vdmUoanNvbk1lc3NhZ2UpKTsKLX0KLQotdm9pZCBEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVl
cyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKQotewot
ICAgIGludCBpbl9kYXRhYmFzZUlkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0SW50ZWdlcihw
YXJhbWV0ZXJzLmdldCgpLCAiZGF0YWJhc2VJZCJfcywgbnVsbHB0cik7Ci0gICAgU3RyaW5nIGlu
X3F1ZXJ5ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCks
ICJxdWVyeSJfcywgbnVsbHB0cik7Ci0gICAgaWYgKG1fYmFja2VuZERpc3BhdGNoZXItPmhhc1By
b3RvY29sRXJyb3JzKCkpIHsKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJv
dG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgIlNvbWUgYXJndW1l
bnRzIG9mIG1ldGhvZCAnRGF0YWJhc2UuZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1
ZXMnIGNhbid0IGJlIHByb2Nlc3NlZCJfcyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSNp
ZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSAgICBpZiAobV9hbHRl
cm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0
ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMocmVxdWVzdElkLCBpbl9kYXRhYmFzZUlkLCBp
bl9xdWVyeSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIFJlZjxEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1
cm5WYWx1ZXNDYWxsYmFjaz4gY2FsbGJhY2sgPSBhZG9wdFJlZigqbmV3IERhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0Nh
bGxiYWNrKG1fYmFja2VuZERpc3BhdGNoZXIuY29weVJlZigpLCByZXF1ZXN0SWQpKTsKLSAgICBt
X2FnZW50LT5leGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhpbl9kYXRhYmFzZUlk
LCBpbl9xdWVyeSwgY2FsbGJhY2suY29weVJlZigpKTsKLQotfQotCi12b2lkIERhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5jKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpCi17Ci0gICAgaW50IGluX2RhdGFiYXNlSWQgPSBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5nZXRJbnRlZ2VyKHBhcmFtZXRlcnMuZ2V0KCksICJkYXRhYmFzZUlk
Il9zLCBudWxscHRyKTsKLSAgICBTdHJpbmcgaW5fcXVlcnkgPSBtX2JhY2tlbmREaXNwYXRjaGVy
LT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgInF1ZXJ5Il9zLCBudWxscHRyKTsKLSAgICBp
ZiAobV9iYWNrZW5kRGlzcGF0Y2hlci0+aGFzUHJvdG9jb2xFcnJvcnMoKSkgewotICAgICAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVy
OjpJbnZhbGlkUGFyYW1zLCAiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICdEYXRhYmFzZS5leGVj
dXRlU1FMU3luYycgY2FuJ3QgYmUgcHJvY2Vzc2VkIl9zKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotICAgIGlm
IChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVy
LT5leGVjdXRlU1FMU3luYyhyZXF1ZXN0SWQsIGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5KTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0g
ICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAg
ICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiBvdXRfY29sdW1uTmFtZXM7Ci0gICAgU3Ry
aW5nIG91dF9ub3RlczsKLSAgICBkb3VibGUgb3V0X3RpbWVzdGFtcDsKLSAgICBKU09OOjpPYmpl
Y3Qgb3V0X3ZhbHVlczsKLSAgICBKU09OOjpWYWx1ZSBvdXRfcGF5bG9hZDsKLSAgICBpbnQgb3V0
X2RhdGFiYXNlSWQ7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpF
cnJvcj4gb3V0X3NxbEVycm9yOwotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6Q29sb3JMaXN0PiBvdXRfYWx0ZXJuYXRlQ29sb3JzOwotICAgIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzIG91dF9zY3JlZW5Db2xvcjsKLSAgICBEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciBvdXRfcHJpbnRDb2xvcjsK
LSAgICBtX2FnZW50LT5leGVjdXRlU1FMU3luYyhlcnJvciwgaW5fZGF0YWJhc2VJZCwgaW5fcXVl
cnksIG91dF9jb2x1bW5OYW1lcywgJm91dF9ub3RlcywgJm91dF90aW1lc3RhbXAsIG91dF92YWx1
ZXMsICZvdXRfcGF5bG9hZCwgJm91dF9kYXRhYmFzZUlkLCBvdXRfc3FsRXJyb3IsIG91dF9hbHRl
cm5hdGVDb2xvcnMsICZvdXRfc2NyZWVuQ29sb3IsICZvdXRfcHJpbnRDb2xvcik7Ci0KLSAgICBp
ZiAoIWVycm9yLmxlbmd0aCgpKSB7Ci0gICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoImNvbHVtbk5h
bWVzIl9zLCBvdXRfY29sdW1uTmFtZXMpOwotICAgICAgICByZXN1bHQtPnNldFN0cmluZygibm90
ZXMiX3MsIG91dF9ub3Rlcyk7Ci0gICAgICAgIHJlc3VsdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAi
X3MsIG91dF90aW1lc3RhbXApOwotICAgICAgICByZXN1bHQtPnNldE9iamVjdCgidmFsdWVzIl9z
LCBvdXRfdmFsdWVzKTsKLSAgICAgICAgcmVzdWx0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgb3V0
X3BheWxvYWQpOwotICAgICAgICByZXN1bHQtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsIG91
dF9kYXRhYmFzZUlkKTsKLSAgICAgICAgcmVzdWx0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBv
dXRfc3FsRXJyb3IpOwotICAgICAgICByZXN1bHQtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMi
X3MsIG91dF9hbHRlcm5hdGVDb2xvcnMpOwotICAgICAgICByZXN1bHQtPnNldFN0cmluZygic2Ny
ZWVuQ29sb3IiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29u
c3RhbnRWYWx1ZShvdXRfc2NyZWVuQ29sb3IpKTsKLSAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmco
InByaW50Q29sb3IiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVt
Q29uc3RhbnRWYWx1ZShvdXRfcHJpbnRDb2xvcikpOwotICAgIH0KLSAgICBpZiAoIWVycm9yLmxl
bmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVz
dElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2Vu
ZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZl
ckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Ci19Ci0KLURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNDYWxsYmFjazo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2so
UmVmPEJhY2tlbmREaXNwYXRjaGVyPiYmIGJhY2tlbmREaXNwYXRjaGVyLCBpbnQgaWQpIDogQmFj
a2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZShXVEZNb3ZlKGJhY2tlbmREaXNwYXRjaGVyKSwg
aWQpIHsgfQotCi12b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRl
U1FMQXN5bmNDYWxsYmFjazo6c2VuZFN1Y2Nlc3MoUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5n
Pj4mJiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwg
SlNPTjo6T2JqZWN0IHZhbHVlcywgSlNPTjo6VmFsdWUgcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQs
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiYgc3FsRXJyb3Is
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzIHNjcmVlbkNvbG9y
LCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4mJiBhbHRl
cm5hdGVDb2xvcnMsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9y
IHByaW50Q29sb3IpCi17Ci0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRBcnJheSgiY29sdW1uTmFt
ZXMiX3MsIGNvbHVtbk5hbWVzKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJub3RlcyJf
cywgbm90ZXMpOwotICAgIGpzb25NZXNzYWdlLT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgdGlt
ZXN0YW1wKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIHZhbHVlcyk7
Ci0gICAganNvbk1lc3NhZ2UtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBwYXlsb2FkKTsKLSAgICBq
c29uTWVzc2FnZS0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgZGF0YWJhc2VJZCk7Ci0gICAg
anNvbk1lc3NhZ2UtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIHNxbEVycm9yKTsKLSAgICBqc29u
TWVzc2FnZS0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6
VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKHNjcmVlbkNvbG9yKSk7Ci0gICAganNv
bk1lc3NhZ2UtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIGFsdGVybmF0ZUNvbG9ycyk7
Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKHByaW50Q29sb3IpKTsK
LSAgICBDYWxsYmFja0Jhc2U6OnNlbmRTdWNjZXNzKFdURk1vdmUoanNvbk1lc3NhZ2UpKTsKLX0K
LQotdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMQXN5bmMobG9uZyBy
ZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycykKLXsKLSAgICBpbnQg
aW5fZGF0YWJhc2VJZCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEludGVnZXIocGFyYW1ldGVy
cy5nZXQoKSwgImRhdGFiYXNlSWQiX3MsIG51bGxwdHIpOwotICAgIFN0cmluZyBpbl9xdWVyeSA9
IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwYXJhbWV0ZXJzLmdldCgpLCAicXVlcnki
X3MsIG51bGxwdHIpOwotICAgIGlmIChtX2JhY2tlbmREaXNwYXRjaGVyLT5oYXNQcm90b2NvbEVy
cm9ycygpKSB7Ci0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJy
b3IoQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsICJTb21lIGFyZ3VtZW50cyBvZiBt
ZXRob2QgJ0RhdGFiYXNlLmV4ZWN1dGVTUUxBc3luYycgY2FuJ3QgYmUgcHJvY2Vzc2VkIl9zKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQotICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAg
bV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5leGVjdXRlU1FMQXN5bmMocmVxdWVzdElkLCBpbl9kYXRh
YmFzZUlkLCBpbl9xdWVyeSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAg
IFJlZjxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jQ2Fs
bGJhY2s+IGNhbGxiYWNrID0gYWRvcHRSZWYoKm5ldyBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2sobV9iYWNrZW5kRGlzcGF0Y2hlci5jb3B5
UmVmKCksIHJlcXVlc3RJZCkpOwotICAgIG1fYWdlbnQtPmV4ZWN1dGVTUUxBc3luYyhpbl9kYXRh
YmFzZUlkLCBpbl9xdWVyeSwgY2FsbGJhY2suY29weVJlZigpKTsKLQotfQotCi19IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNw
cAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBv
bmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8d3RmL0pT
T05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNl
IEluc3BlY3RvciB7Ci0KLWNsYXNzIEZyb250ZW5kUm91dGVyOwotCi19IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0j
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1
ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotbmFt
ZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLS8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgotbmFtZXNw
YWNlIERhdGFiYXNlIHsKLWNsYXNzIEVycm9yOwotZW51bSBjbGFzcyBQcmltYXJ5Q29sb3JzOwot
fSAvLyBEYXRhYmFzZQotLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgotCi0KLS8vIFR5
cGVkZWZzLgotbmFtZXNwYWNlIERhdGFiYXNlIHsKLS8qIFVuaXF1ZSBpZGVudGlmaWVyIG9mIERh
dGFiYXNlIG9iamVjdC4gKi8KLXR5cGVkZWYgaW50IERhdGFiYXNlSWQ7Ci10eXBlZGVmIEpTT046
OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IENv
bG9yTGlzdDsKLX0gLy8gRGF0YWJhc2UKLS8vIEVuZCBvZiB0eXBlZGVmcy4KLQotbmFtZXNwYWNl
IFRlc3RIZWxwZXJzIHsKLQotU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKTsK
LQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKFQgZW51
bVZhbHVlKQotewotICAgIHJldHVybiBnZXRFbnVtQ29uc3RhbnRWYWx1ZShzdGF0aWNfY2FzdDxp
bnQ+KGVudW1WYWx1ZSkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwotCi1uYW1l
c3BhY2UgRGF0YWJhc2UgewotLyogICovCi1lbnVtIGNsYXNzIFByaW1hcnlDb2xvcnMgewotICAg
IFJlZCA9IDAsCi0gICAgR3JlZW4gPSAxLAotICAgIEJsdWUgPSAyLAotfTsgLy8gZW51bSBjbGFz
cyBQcmltYXJ5Q29sb3JzCi0vKiBEYXRhYmFzZSBlcnJvci4gKi8KLWNsYXNzIEVycm9yIDogcHVi
bGljIEpTT046Ok9iamVjdEJhc2UgewotcHVibGljOgotICAgIGVudW0gewotICAgICAgICBOb0Zp
ZWxkc1NldCA9IDAsCi0gICAgICAgIE1lc3NhZ2VTZXQgPSAxIDw8IDAsCi0gICAgICAgIENvZGVT
ZXQgPSAxIDw8IDEsCi0gICAgICAgIEFsbEZpZWxkc1NldCA9IChNZXNzYWdlU2V0IHwgQ29kZVNl
dCkKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8aW50IFNUQVRFPgotICAgIGNsYXNzIEJ1aWxkZXIg
ewotICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVzdWx0Owot
Ci0gICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RT
dGF0ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxC
dWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxk
ZXIoUmVmPC8qRXJyb3IqL0pTT046Ok9iamVjdD4mJiBvYmplY3QpCi0gICAgICAgICAgICA6IG1f
cmVzdWx0KFdURk1vdmUob2JqZWN0KSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9z
dGF0ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZnJpZW5kIGNsYXNzIEVycm9yOwotICAgIHB1Ymxp
YzoKLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTWVzc2FnZVNldD4mIHNldE1lc3NhZ2UoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
IShTVEFURSAmIE1lc3NhZ2VTZXQpLCBwcm9wZXJ0eV9tZXNzYWdlX2FscmVhZHlfc2V0KTsKLSAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1lc3NhZ2UiX3MsIHZhbHVlKTsKLSAgICAg
ICAgICAgIHJldHVybiBjYXN0U3RhdGU8TWVzc2FnZVNldD4oKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2RlU2V0PiYgc2V0Q29kZShpbnQgdmFsdWUpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2RlU2V0KSwgcHJvcGVy
dHlfY29kZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcigi
Y29kZSJfcywgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb2RlU2V0Pigp
OwotICAgICAgICB9Ci0KLSAgICAgICAgUmVmPEVycm9yPiByZWxlYXNlKCkKLSAgICAgICAgewot
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRf
aXNfbm90X3JlYWR5KTsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihFcnJvcikg
PT0gc2l6ZW9mKEpTT046Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsKLQotICAgICAgICAgICAgUmVm
PEpTT046Ok9iamVjdD4ganNvblJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7Ci0g
ICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPEVy
cm9yPio+KCZqc29uUmVzdWx0KSk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAg
ICB9Ci0gICAgfTsKLQotICAgIC8qCi0gICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgotICAg
ICAqIFJlZjxFcnJvcj4gcmVzdWx0ID0gRXJyb3I6OmNyZWF0ZSgpCi0gICAgICogICAgIC5zZXRN
ZXNzYWdlKC4uLikKLSAgICAgKiAgICAgLnNldENvZGUoLi4uKQotICAgICAqICAgICAucmVsZWFz
ZSgpOwotICAgICAqLwotICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6
Y3JlYXRlKCkpOwotICAgIH0KLX07Ci0KLX0gLy8gRGF0YWJhc2UKLQotCi0KLW5hbWVzcGFjZSBU
ZXN0SGVscGVycyB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFByb3RvY29sRW51bVR5cGU+Ci1PcHRp
b25hbDxQcm90b2NvbEVudW1UeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmcoY29uc3QgU3Ry
aW5nJik7Ci0KLS8vIEVudW1zIGluIHRoZSAnRGF0YWJhc2UnIERvbWFpbgotdGVtcGxhdGU8Pgot
T3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IHBh
cnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJp
bWFyeUNvbG9ycz4oY29uc3QgU3RyaW5nJik7Ci0KLX0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJz
Ci0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgot
Ci1uYW1lc3BhY2UgV1RGIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRI
YXNoOwotCi0vLyBIYXNoIGRlY2xhcmF0aW9ucyBpbiB0aGUgJ0RhdGFiYXNlJyBEb21haW4KLXRl
bXBsYXRlPD4KLXN0cnVjdCBEZWZhdWx0SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFz
ZTo6UHJpbWFyeUNvbG9ycz4gewotICAgIHR5cGVkZWYgSW50SGFzaDxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gSGFzaDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IFdURgotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQot
bmFtZXNwYWNlIFByb3RvY29sIHsKLQotbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKLQotc3RhdGlj
IGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFsdWVzW10gPSB7Ci0gICAgInJlZCIs
Ci0gICAgImdyZWVuIiwKLSAgICAiYmx1ZSIsCi0gICAgImN5YW4iLAotICAgICJtYWdlbnRhIiwK
LSAgICAieWVsbG93IiwKLSAgICAiYmxhY2siLAotfTsKLQotU3RyaW5nIGdldEVudW1Db25zdGFu
dFZhbHVlKGludCBjb2RlKSB7Ci0gICAgcmV0dXJuIGVudW1fY29uc3RhbnRfdmFsdWVzW2NvZGVd
OwotfQotCi0vLyBFbnVtcyBpbiB0aGUgJ0RhdGFiYXNlJyBEb21haW4KLXRlbXBsYXRlPD4KLU9w
dGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiBwYXJz
ZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1h
cnlDb2xvcnM+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCi17Ci0gICAgc3RhdGljIGNv
bnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0gewotICAgICAgICAoc2l6ZV90KUluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzOjpSZWQsCi0gICAgICAgIChzaXpl
X3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM6OkdyZWVuLAot
ICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29s
b3JzOjpCbHVlLAotICAgIH07Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAzOyArK2kpCi0g
ICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFu
dFZhbHVlc1tpXV0pCi0gICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpQcmltYXJ5Q29sb3JzKWNvbnN0YW50VmFsdWVzW2ldOwotCi0gICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKLX0KLQotCi19IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwotCi0KLQotfSAv
LyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFp
blB0ci5oPgotCi1AcHJvdG9jb2wgVGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyOwot
Ci1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi1jbGFzcyBPYmpDSW5zcGVjdG9yRGF0YWJhc2VC
YWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBP
YmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xEYXRh
YmFzZURvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KLSAg
ICB2b2lkIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0SWQs
IGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KSBmaW5hbDsKLSAgICB2
b2lkIGV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVzdElkLCBp
bnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkgZmluYWw7Ci0gICAgdm9p
ZCBleGVjdXRlU1FMU3luYyhsb25nIHJlcXVlc3RJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0
IFN0cmluZyYgaW5fcXVlcnkpIGZpbmFsOwotICAgIHZvaWQgZXhlY3V0ZVNRTEFzeW5jKGxvbmcg
cmVxdWVzdElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkgZmlu
YWw7Ci1wcml2YXRlOgotICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFp
bkhhbmRsZXI+PiBtX2RlbGVnYXRlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0K
LSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29u
ZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLQotbmFtZXNwYWNl
IEluc3BlY3RvciB7Ci0KLXZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXI6OmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0SWQsIGlu
dCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KQotewotICAgIGlmICghW21f
ZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihleGVjdXRlU1FMU3luY09wdGlv
bmFsUmV0dXJuVmFsdWVzV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOmRhdGFiYXNl
SWQ6cXVlcnk6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9j
b2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidE
YXRhYmFzZS5leGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzJyB3YXMgbm90IGZvdW5k
Il9zKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3Ry
aW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2Nv
bEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7
Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAg
fTsKLQotICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiovICoq
Y29sdW1uTmFtZXMsIE5TU3RyaW5nICoqbm90ZXMsIGRvdWJsZSAqdGltZXN0YW1wLCBSV0lQcm90
b2NvbEpTT05PYmplY3QgKip2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnBheWxvYWQs
IGludCAqZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKnNxbEVycm9yLCBU
ZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgKnNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8
TlNTdHJpbmc+Ki8gKiphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0
ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3IgKnByaW50Q29sb3IpIHsKLSAg
ICAgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVS
KGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihub3RlcywgQCJub3RlcyIpOwotICAgICAgICBUSFJP
V19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIodmFsdWVzLCBAInZhbHVlcyIp
OwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIocGF5
bG9hZCwgQCJwYXlsb2FkIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElP
TkFMX1BBUkFNRVRFUihzcWxFcnJvciwgQCJzcWxFcnJvciIpOwotICAgICAgICBUSFJPV19FWENF
UFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoYWx0ZXJuYXRlQ29sb3JzLCBAImFsdGVy
bmF0ZUNvbG9ycyIpOwotICAgICAgICBpZiAoY29sdW1uTmFtZXMpCi0gICAgICAgICAgICByZXN1
bHRPYmplY3QtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgdG9KU09OU3RyaW5nQXJyYXkoKmNv
bHVtbk5hbWVzKSk7Ci0gICAgICAgIGlmIChub3RlcykKLSAgICAgICAgICAgIHJlc3VsdE9iamVj
dC0+c2V0U3RyaW5nKCJub3RlcyJfcywgKm5vdGVzKTsKLSAgICAgICAgaWYgKHRpbWVzdGFtcCkK
LSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICp0aW1l
c3RhbXApOwotICAgICAgICBpZiAodmFsdWVzKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5z
ZXRPYmplY3QoInZhbHVlcyJfcywgWyp2YWx1ZXMgdG9KU09OT2JqZWN0XSk7Ci0gICAgICAgIGlm
IChwYXlsb2FkKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRWYWx1ZSgicGF5bG9hZCJf
cywgWypwYXlsb2FkIHRvSlNPTk9iamVjdF0pOwotICAgICAgICBpZiAoZGF0YWJhc2VJZCkKLSAg
ICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgKmRhdGFi
YXNlSWQpOwotICAgICAgICBpZiAoc3FsRXJyb3IpCi0gICAgICAgICAgICByZXN1bHRPYmplY3Qt
PnNldE9iamVjdCgic3FsRXJyb3IiX3MsIFsqc3FsRXJyb3IgdG9KU09OT2JqZWN0XSk7Ci0gICAg
ICAgIGlmIChzY3JlZW5Db2xvcikKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5n
KCJzY3JlZW5Db2xvciJfcywgdG9Qcm90b2NvbFN0cmluZygqc2NyZWVuQ29sb3IpKTsKLSAgICAg
ICAgaWYgKGFsdGVybmF0ZUNvbG9ycykKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJy
YXkoImFsdGVybmF0ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5nQXJyYXkoKmFsdGVybmF0ZUNvbG9y
cykpOwotICAgICAgICBpZiAocHJpbnRDb2xvcikKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+
c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKCpwcmludENvbG9yKSk7
Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdU
Rk1vdmUocmVzdWx0T2JqZWN0KSwgZmFsc2UpOwotICAgIH07Ci0KLSAgICBpbnQgb19pbl9kYXRh
YmFzZUlkID0gaW5fZGF0YWJhc2VJZDsKLSAgICBOU1N0cmluZyAqb19pbl9xdWVyeSA9IGluX3F1
ZXJ5OwotCi0gICAgW21fZGVsZWdhdGUgZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVl
c1dpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3ND
YWxsYmFjayBkYXRhYmFzZUlkOm9faW5fZGF0YWJhc2VJZCBxdWVyeTpvX2luX3F1ZXJ5XTsKLX0K
LQotdm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNR
TEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0SWQsIGludCBpbl9kYXRhYmFz
ZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KQotewotICAgIGlmICghW21fZGVsZWdhdGUgcmVz
cG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZh
bHVlc1dpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazpkYXRhYmFzZUlkOnF1ZXJ5Oild
KSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVx
dWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRGF0YWJhc2UuZXhl
Y3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMnIHdhcyBub3QgZm91bmQiX3MpOwotICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9y
KSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVx
dWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKLSAgICAgICAg
YmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICB9OwotCi0gICAg
aWQgc3VjY2Vzc0NhbGxiYWNrID0gXihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKipjb2x1bW5OYW1l
cywgTlNTdHJpbmcgKipub3RlcywgZG91YmxlICp0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9i
amVjdCAqKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqcGF5bG9hZCwgaW50ICpkYXRh
YmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqc3FsRXJyb3IsIFRlc3RQcm90b2Nv
bERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4q
LyAqKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNP
cHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3IgKnByaW50Q29sb3IpIHsKLSAgICAgICAgUmVm
PEpTT046Ok9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAg
ICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKGNvbHVtbk5h
bWVzLCBAImNvbHVtbk5hbWVzIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09Q
VElPTkFMX1BBUkFNRVRFUihub3RlcywgQCJub3RlcyIpOwotICAgICAgICBUSFJPV19FWENFUFRJ
T05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIodmFsdWVzLCBAInZhbHVlcyIpOwotICAgICAg
ICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIocGF5bG9hZCwgQCJw
YXlsb2FkIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFN
RVRFUihzcWxFcnJvciwgQCJzcWxFcnJvciIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9S
X0JBRF9PUFRJT05BTF9QQVJBTUVURVIoYWx0ZXJuYXRlQ29sb3JzLCBAImFsdGVybmF0ZUNvbG9y
cyIpOwotICAgICAgICBpZiAoY29sdW1uTmFtZXMpCi0gICAgICAgICAgICByZXN1bHRPYmplY3Qt
PnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgdG9KU09OU3RyaW5nQXJyYXkoKmNvbHVtbk5hbWVz
KSk7Ci0gICAgICAgIGlmIChub3RlcykKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3Ry
aW5nKCJub3RlcyJfcywgKm5vdGVzKTsKLSAgICAgICAgaWYgKHRpbWVzdGFtcCkKLSAgICAgICAg
ICAgIHJlc3VsdE9iamVjdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICp0aW1lc3RhbXApOwot
ICAgICAgICBpZiAodmFsdWVzKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3Qo
InZhbHVlcyJfcywgWyp2YWx1ZXMgdG9KU09OT2JqZWN0XSk7Ci0gICAgICAgIGlmIChwYXlsb2Fk
KQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgWypwYXls
b2FkIHRvSlNPTk9iamVjdF0pOwotICAgICAgICBpZiAoZGF0YWJhc2VJZCkKLSAgICAgICAgICAg
IHJlc3VsdE9iamVjdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgKmRhdGFiYXNlSWQpOwot
ICAgICAgICBpZiAoc3FsRXJyb3IpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVj
dCgic3FsRXJyb3IiX3MsIFsqc3FsRXJyb3IgdG9KU09OT2JqZWN0XSk7Ci0gICAgICAgIGlmIChz
Y3JlZW5Db2xvcikKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJzY3JlZW5D
b2xvciJfcywgdG9Qcm90b2NvbFN0cmluZygqc2NyZWVuQ29sb3IpKTsKLSAgICAgICAgaWYgKGFs
dGVybmF0ZUNvbG9ycykKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoImFsdGVy
bmF0ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5nQXJyYXkoKmFsdGVybmF0ZUNvbG9ycykpOwotICAg
ICAgICBpZiAocHJpbnRDb2xvcikKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5n
KCJwcmludENvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKCpwcmludENvbG9yKSk7Ci0gICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVz
dWx0T2JqZWN0KSwgZmFsc2UpOwotICAgIH07Ci0KLSAgICBpbnQgb19pbl9kYXRhYmFzZUlkID0g
aW5fZGF0YWJhc2VJZDsKLSAgICBOU1N0cmluZyAqb19pbl9xdWVyeSA9IGluX3F1ZXJ5OwotCi0g
ICAgW21fZGVsZWdhdGUgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNXaXRoRXJy
b3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2sg
ZGF0YWJhc2VJZDpvX2luX2RhdGFiYXNlSWQgcXVlcnk6b19pbl9xdWVyeV07Ci19Ci0KLXZvaWQg
T2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5jKGxv
bmcgcmVxdWVzdElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkK
LXsKLSAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoZXhl
Y3V0ZVNRTFN5bmNXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6ZGF0YWJhc2VJZDpx
dWVyeTopXSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVy
cm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RhdGFi
YXNlLmV4ZWN1dGVTUUxTeW5jJyB3YXMgbm90IGZvdW5kIl9zKTsKLSAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2Vu
ZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgfTsKLQotICAgIGlkIHN1Y2Nlc3NDYWxs
YmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiovICpjb2x1bW5OYW1lcywgTlNTdHJpbmcgKm5v
dGVzLCBkb3VibGUgdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnZhbHVlcywgUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgVGVzdFByb3RvY29s
RGF0YWJhc2VFcnJvciAqc3FsRXJyb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqYWx0ZXJuYXRl
Q29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIFRl
c3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yIHByaW50Q29sb3IpIHsK
LSAgICAgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIo
Y29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9SRVFVSVJFRF9QQVJBTUVURVIobm90ZXMsIEAibm90ZXMiKTsKLSAgICAgICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIodmFsdWVzLCBAInZhbHVlcyIpOwotICAgICAg
ICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihwYXlsb2FkLCBAInBheWxv
YWQiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoc3Fs
RXJyb3IsIEAic3FsRXJyb3IiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJF
RF9QQVJBTUVURVIoYWx0ZXJuYXRlQ29sb3JzLCBAImFsdGVybmF0ZUNvbG9ycyIpOwotICAgICAg
ICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgdG9KU09OU3RyaW5nQXJy
YXkoY29sdW1uTmFtZXMpKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoIm5vdGVz
Il9zLCBub3Rlcyk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAi
X3MsIHRpbWVzdGFtcCk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMi
X3MsIFt2YWx1ZXMgdG9KU09OT2JqZWN0XSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0VmFs
dWUoInBheWxvYWQiX3MsIFtwYXlsb2FkIHRvSlNPTk9iamVjdF0pOwotICAgICAgICByZXN1bHRP
YmplY3QtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsIGRhdGFiYXNlSWQpOwotICAgICAgICBy
ZXN1bHRPYmplY3QtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIFtzcWxFcnJvciB0b0pTT05PYmpl
Y3RdKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9z
LCB0b0pTT05TdHJpbmdBcnJheShhbHRlcm5hdGVDb2xvcnMpKTsKLSAgICAgICAgcmVzdWx0T2Jq
ZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKHNjcmVlbkNv
bG9yKSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCB0
b1Byb3RvY29sU3RyaW5nKHByaW50Q29sb3IpKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHRPYmplY3QpLCBmYWxzZSk7
Ci0gICAgfTsKLQotICAgIGludCBvX2luX2RhdGFiYXNlSWQgPSBpbl9kYXRhYmFzZUlkOwotICAg
IE5TU3RyaW5nICpvX2luX3F1ZXJ5ID0gaW5fcXVlcnk7Ci0KLSAgICBbbV9kZWxlZ2F0ZSBleGVj
dXRlU1FMU3luY1dpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNr
OnN1Y2Nlc3NDYWxsYmFjayBkYXRhYmFzZUlkOm9faW5fZGF0YWJhc2VJZCBxdWVyeTpvX2luX3F1
ZXJ5XTsKLX0KLQotdm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6
ZXhlY3V0ZVNRTEFzeW5jKGxvbmcgcmVxdWVzdElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3Qg
U3RyaW5nJiBpbl9xdWVyeSkKLXsKLSAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxl
Y3RvcjpAc2VsZWN0b3IoZXhlY3V0ZVNRTEFzeW5jV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0Nh
bGxiYWNrOmRhdGFiYXNlSWQ6cXVlcnk6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRo
b2ROb3RGb3VuZCwgIidEYXRhYmFzZS5leGVjdXRlU1FMQXN5bmMnIHdhcyBub3QgZm91bmQiX3Mp
OwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcg
KmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJy
b3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKLSAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICB9Owot
Ci0gICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmNvbHVt
bk5hbWVzLCBOU1N0cmluZyAqbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNP
Tk9iamVjdCAqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnBheWxvYWQsIGludCBkYXRh
YmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpzcWxFcnJvciwgVGVzdFByb3RvY29s
RGF0YWJhc2VQcmltYXJ5Q29sb3JzIHNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8g
KmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmlu
dENvbG9yIHByaW50Q29sb3IpIHsKLSAgICAgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0T2Jq
ZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9SRVFVSVJFRF9QQVJBTUVURVIoY29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsKLSAgICAg
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIobm90ZXMsIEAibm90ZXMi
KTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIodmFsdWVz
LCBAInZhbHVlcyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFN
RVRFUihwYXlsb2FkLCBAInBheWxvYWQiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9S
RVFVSVJFRF9QQVJBTUVURVIoc3FsRXJyb3IsIEAic3FsRXJyb3IiKTsKLSAgICAgICAgVEhST1df
RVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoYWx0ZXJuYXRlQ29sb3JzLCBAImFsdGVy
bmF0ZUNvbG9ycyIpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJjb2x1bW5OYW1l
cyJfcywgdG9KU09OU3RyaW5nQXJyYXkoY29sdW1uTmFtZXMpKTsKLSAgICAgICAgcmVzdWx0T2Jq
ZWN0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBub3Rlcyk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+
c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIHRpbWVzdGFtcCk7Ci0gICAgICAgIHJlc3VsdE9iamVj
dC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFt2YWx1ZXMgdG9KU09OT2JqZWN0XSk7Ci0gICAgICAg
IHJlc3VsdE9iamVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFtwYXlsb2FkIHRvSlNPTk9iamVj
dF0pOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsIGRh
dGFiYXNlSWQpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdCgic3FsRXJyb3IiX3Ms
IFtzcWxFcnJvciB0b0pTT05PYmplY3RdKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJp
bmcoInNjcmVlbkNvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKHNjcmVlbkNvbG9yKSk7Ci0gICAg
ICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgdG9KU09OU3Ry
aW5nQXJyYXkoYWx0ZXJuYXRlQ29sb3JzKSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3Ry
aW5nKCJwcmludENvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKHByaW50Q29sb3IpKTsKLSAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShy
ZXN1bHRPYmplY3QpLCBmYWxzZSk7Ci0gICAgfTsKLQotICAgIGludCBvX2luX2RhdGFiYXNlSWQg
PSBpbl9kYXRhYmFzZUlkOwotICAgIE5TU3RyaW5nICpvX2luX3F1ZXJ5ID0gaW5fcXVlcnk7Ci0K
LSAgICBbbV9kZWxlZ2F0ZSBleGVjdXRlU1FMQXN5bmNXaXRoRXJyb3JDYWxsYmFjazplcnJvckNh
bGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDpvX2luX2Rh
dGFiYXNlSWQgcXVlcnk6b19pbl9xdWVyeV07Ci19Ci0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPFdl
Ykluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAo
ImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09i
amVjdAotQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNldERhdGFiYXNlSGFu
ZGxlcjopIGlkPFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4gZGF0YWJhc2VIYW5k
bGVyOwotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5o
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUu
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0
ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbElu
dGVybmFsLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+Ci0jaW1w
b3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVy
cy5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJz
Lmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0
UHJvdG9jb2xDb25maWd1cmF0aW9uCi17Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9s
bGVyKiBfY29udHJvbGxlcjsKLSAgICBpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRs
ZXI+IF9kYXRhYmFzZUhhbmRsZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRy
b2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgotewotICAg
IHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmls
OwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7
Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAgIFtfZGF0YWJh
c2VIYW5kbGVyIHJlbGVhc2VdOwotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAodm9pZClz
ZXREYXRhYmFzZUhhbmRsZXI6KGlkPFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4p
aGFuZGxlcgotewotICAgIGlmIChoYW5kbGVyID09IF9kYXRhYmFzZUhhbmRsZXIpCi0gICAgICAg
IHJldHVybjsKLQotICAgIFtfZGF0YWJhc2VIYW5kbGVyIHJlbGVhc2VdOwotICAgIF9kYXRhYmFz
ZUhhbmRsZXIgPSBbaGFuZGxlciByZXRhaW5dOwotCi0gICAgYXV0byBhbHRlcm5hdGVEaXNwYXRj
aGVyID0gbWFrZVVuaXF1ZTxPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4o
aGFuZGxlcik7Ci0gICAgYXV0byBhbHRlcm5hdGVBZ2VudCA9IG1ha2VVbmlxdWU8QWx0ZXJuYXRl
RGlzcGF0Y2hhYmxlQWdlbnQ8RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciwgQWx0ZXJuYXRlRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4+KCJEYXRhYmFzZSJfcywgKl9jb250cm9sbGVyLCBXVEZN
b3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIpKTsKLSAgICBfY29udHJvbGxlci0+YXBwZW5kRXh0cmFB
Z2VudChXVEZNb3ZlKGFsdGVybmF0ZUFnZW50KSk7Ci19Ci0KLS0gKGlkPFRlc3RQcm90b2NvbERh
dGFiYXNlRG9tYWluSGFuZGxlcj4pZGF0YWJhc2VIYW5kbGVyCi17Ci0gICAgcmV0dXJuIF9kYXRh
YmFzZUhhbmRsZXI7Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENv
bmZpZ3VyYXRpb24ubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0
Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRo
LWFzeW5jLWF0dHJpYnV0ZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4K
LQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5o
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1h
dHRyaWJ1dGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2ltcG9ydCA8V2ViSW5zcGVj
dG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgotCi0KLUBjbGFzcyBUZXN0UHJvdG9jb2xEYXRh
YmFzZUVycm9yOwotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xQbGF0
Zm9ybSkgewotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsLAotICAgIFRlc3RQcm90b2NvbFBs
YXRmb3JtR2VuZXJpYywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUywKLSAgICBUZXN0UHJv
dG9jb2xQbGF0Zm9ybU1hY09TLAotfTsKLQotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBU
ZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMpIHsKLSAgICBUZXN0UHJvdG9jb2xEYXRh
YmFzZVByaW1hcnlDb2xvcnNSZWQsCi0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29s
b3JzR3JlZW4sCi0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzQmx1ZSwKLX07
Ci0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0
ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3IpIHsKLSAgICBUZXN0UHJvdG9j
b2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yQ3lh
biwKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXNQcmludENvbG9yTWFnZW50YSwKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVT
UUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yWWVsbG93LAotICAgIFRlc3RQcm90
b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JC
bGFjaywKLX07Ci0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbERhdGFi
YXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yKSB7Ci0gICAg
VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1By
aW50Q29sb3JDeWFuLAotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0
aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yTWFnZW50YSwKLSAgICBUZXN0UHJvdG9jb2xEYXRh
YmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvclllbGxvdywK
LSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFs
dWVzUHJpbnRDb2xvckJsYWNrLAotfTsKLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVz
dFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3IpIHsKLSAgICBUZXN0UHJv
dG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvckN5YW4sCi0gICAgVGVzdFByb3Rv
Y29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3JNYWdlbnRhLAotICAgIFRlc3RQcm90
b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yWWVsbG93LAotICAgIFRlc3RQcm90
b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yQmxhY2ssCi19OwotCi10eXBlZGVm
IE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1By
aW50Q29sb3IpIHsKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50
Q29sb3JDeWFuLAotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRD
b2xvck1hZ2VudGEsCi0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmlu
dENvbG9yWWVsbG93LAotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJp
bnRDb2xvckJsYWNrLAotfTsKLQotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVs
dCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciA6IFJXSVByb3RvY29s
SlNPTk9iamVjdAotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5
PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQ7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90
b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKLS0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBjb2RlOihpbnQpY29k
ZTsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAq
bWVzc2FnZTsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGlu
dCBjb2RlOwotQGVuZAotCi1AcHJvdG9jb2wgVGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5k
bGVyIDxOU09iamVjdD4KLUBvcHRpb25hbAotLSAodm9pZClleGVjdXRlU1FMU3luY09wdGlvbmFs
UmV0dXJuVmFsdWVzV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSll
cnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKShOU0FycmF5Lyo8TlNTdHJpbmc+
Ki8gKipjb2x1bW5OYW1lcywgTlNTdHJpbmcgKipub3RlcywgZG91YmxlICp0aW1lc3RhbXAsIFJX
SVByb3RvY29sSlNPTk9iamVjdCAqKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqcGF5
bG9hZCwgaW50ICpkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqc3FsRXJy
b3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqc2NyZWVuQ29sb3IsIE5TQXJy
YXkvKjxOU1N0cmluZz4qLyAqKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VF
eGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvciAqcHJpbnRDb2xvcikp
c3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNlSWQ6KGludClkYXRhYmFzZUlkIHF1ZXJ5OihOU1N0cmlu
ZyAqKXF1ZXJ5OwotLSAodm9pZClleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1dp
dGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBz
dWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoTlNBcnJheS8qPE5TU3RyaW5nPiovICoqY29sdW1uTmFt
ZXMsIE5TU3RyaW5nICoqbm90ZXMsIGRvdWJsZSAqdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05P
YmplY3QgKip2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnBheWxvYWQsIGludCAqZGF0
YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKnNxbEVycm9yLCBUZXN0UHJvdG9j
b2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgKnNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+
Ki8gKiphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5j
T3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yICpwcmludENvbG9yKSlzdWNjZXNzQ2FsbGJh
Y2sgZGF0YWJhc2VJZDooaW50KWRhdGFiYXNlSWQgcXVlcnk6KE5TU3RyaW5nICopcXVlcnk7Ci0t
ICh2b2lkKWV4ZWN1dGVTUUxTeW5jV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcg
KmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKShOU0FycmF5Lyo8
TlNTdHJpbmc+Ki8gKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqbm90ZXMsIGRvdWJsZSB0aW1lc3Rh
bXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3Qg
KnBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpzcWxF
cnJvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2Nv
bERhdGFiYXNlUHJpbWFyeUNvbG9ycyBzY3JlZW5Db2xvciwgVGVzdFByb3RvY29sRGF0YWJhc2VF
eGVjdXRlU1FMU3luY1ByaW50Q29sb3IgcHJpbnRDb2xvcikpc3VjY2Vzc0NhbGxiYWNrIGRhdGFi
YXNlSWQ6KGludClkYXRhYmFzZUlkIHF1ZXJ5OihOU1N0cmluZyAqKXF1ZXJ5OwotLSAodm9pZCll
eGVjdXRlU1FMQXN5bmNXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3Ip
KWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0cmlu
Zz4qLyAqY29sdW1uTmFtZXMsIE5TU3RyaW5nICpub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICp2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5bG9h
ZCwgaW50IGRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKnNxbEVycm9yLCBU
ZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxO
U1N0cmluZz4qLyAqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVT
UUxBc3luY1ByaW50Q29sb3IgcHJpbnRDb2xvcikpc3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNlSWQ6
KGludClkYXRhYmFzZUlkIHF1ZXJ5OihOU1N0cmluZyAqKXF1ZXJ5OwotQGVuZAotCi0KLQotCi0j
aW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3Rz
Lmg+Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbEludGVybmFsLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBj
b21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAi
VGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1
ZXMuaD4KLQotCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0KLSMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVz
dFByb3RvY29sLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZl
cnNpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBP
YmpDRW51bVR5cGU+Ci1PcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhj
b25zdCBTdHJpbmcmIHZhbHVlKTsKLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRl
c3RQcm90b2NvbFBsYXRmb3JtIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNh
c2UgVGVzdFByb3RvY29sUGxhdGZvcm1BbGw6Ci0gICAgICAgIHJldHVybiAiYWxsIl9zOwotICAg
IGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOgotICAgICAgICByZXR1cm4gImdlbmVy
aWMiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzoKLSAgICAgICAgcmV0dXJu
ICJpb3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOgotICAgICAgICBy
ZXR1cm4gIm1hY29zIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFs
PFRlc3RQcm90b2NvbFBsYXRmb3JtPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2
YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gImFsbCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJv
dG9jb2xQbGF0Zm9ybUFsbDsKLSAgICBpZiAodmFsdWUgPT0gImdlbmVyaWMiKQotICAgICAgICBy
ZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOwotICAgIGlmICh2YWx1ZSA9PSAiaW9z
IikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOwotICAgIGlmICh2YWx1
ZSA9PSAibWFjb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzsK
LSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2Nv
bFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgdmFsdWUpCi17Ci0gICAg
c3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xv
cnNSZWQ6Ci0gICAgICAgIHJldHVybiAicmVkIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0
YWJhc2VQcmltYXJ5Q29sb3JzR3JlZW46Ci0gICAgICAgIHJldHVybiAiZ3JlZW4iX3M7Ci0gICAg
Y2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNCbHVlOgotICAgICAgICByZXR1
cm4gImJsdWUiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVz
dFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gInJlZCIpCi0gICAgICAgIHJldHVy
biBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNSZWQ7Ci0gICAgaWYgKHZhbHVlID09
ICJncmVlbiIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xv
cnNHcmVlbjsKLSAgICBpZiAodmFsdWUgPT0gImJsdWUiKQotICAgICAgICByZXR1cm4gVGVzdFBy
b3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzQmx1ZTsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwotfQotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sRGF0YWJh
c2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvciB2YWx1ZSkKLXsK
LSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0
ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JDeWFuOgotICAgICAgICByZXR1
cm4gImN5YW4iX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5j
T3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yTWFnZW50YToKLSAgICAgICAgcmV0dXJuICJt
YWdlbnRhIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09w
dGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvclllbGxvdzoKLSAgICAgICAgcmV0dXJuICJ5ZWxs
b3ciX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXNQcmludENvbG9yQmxhY2s6Ci0gICAgICAgIHJldHVybiAiYmxhY2siX3M7
Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0
YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvcj4gZnJvbVBy
b3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJj
eWFuIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNP
cHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JDeWFuOwotICAgIGlmICh2YWx1ZSA9PSAibWFn
ZW50YSIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5j
T3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yTWFnZW50YTsKLSAgICBpZiAodmFsdWUgPT0g
InllbGxvdyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxT
eW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yWWVsbG93OwotICAgIGlmICh2YWx1ZSA9
PSAiYmxhY2siKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FM
U3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvckJsYWNrOwotICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7Ci19Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9j
b2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvciB2
YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFi
YXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yQ3lhbjoKLSAg
ICAgICAgcmV0dXJuICJjeWFuIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVj
dXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JNYWdlbnRhOgotICAgICAg
ICByZXR1cm4gIm1hZ2VudGEiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvclllbGxvdzoKLSAgICAgICAg
cmV0dXJuICJ5ZWxsb3ciX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVT
UUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvckJsYWNrOgotICAgICAgICByZXR1
cm4gImJsYWNrIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRl
c3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmlu
dENvbG9yPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBp
ZiAodmFsdWUgPT0gImN5YW4iKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VF
eGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JDeWFuOwotICAgIGlm
ICh2YWx1ZSA9PSAibWFnZW50YSIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFz
ZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvck1hZ2VudGE7Ci0g
ICAgaWYgKHZhbHVlID09ICJ5ZWxsb3ciKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0
YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JZZWxsb3c7
Ci0gICAgaWYgKHZhbHVlID09ICJibGFjayIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xE
YXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvckJsYWNr
OwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2Nv
bFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvciB2YWx1
ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNl
RXhlY3V0ZVNRTFN5bmNQcmludENvbG9yQ3lhbjoKLSAgICAgICAgcmV0dXJuICJjeWFuIl9zOwot
ICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3JNYWdl
bnRhOgotICAgICAgICByZXR1cm4gIm1hZ2VudGEiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xE
YXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvclllbGxvdzoKLSAgICAgICAgcmV0dXJuICJ5
ZWxsb3ciX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJp
bnRDb2xvckJsYWNrOgotICAgICAgICByZXR1cm4gImJsYWNrIl9zOwotICAgIH0KLX0KLQotdGVt
cGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5
bmNQcmludENvbG9yPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsK
LSAgICBpZiAodmFsdWUgPT0gImN5YW4iKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0
YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3JDeWFuOwotICAgIGlmICh2YWx1ZSA9PSAibWFn
ZW50YSIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5j
UHJpbnRDb2xvck1hZ2VudGE7Ci0gICAgaWYgKHZhbHVlID09ICJ5ZWxsb3ciKQotICAgICAgICBy
ZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3JZZWxsb3c7
Ci0gICAgaWYgKHZhbHVlID09ICJibGFjayIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xE
YXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvckJsYWNrOwotICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7Ci19Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xE
YXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3IgdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZh
bHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50
Q29sb3JDeWFuOgotICAgICAgICByZXR1cm4gImN5YW4iX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9j
b2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JNYWdlbnRhOgotICAgICAgICByZXR1
cm4gIm1hZ2VudGEiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxB
c3luY1ByaW50Q29sb3JZZWxsb3c6Ci0gICAgICAgIHJldHVybiAieWVsbG93Il9zOwotICAgIGNh
c2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yQmxhY2s6Ci0g
ICAgICAgIHJldHVybiAiYmxhY2siX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUg
T3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yPiBm
cm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUg
PT0gImN5YW4iKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FM
QXN5bmNQcmludENvbG9yQ3lhbjsKLSAgICBpZiAodmFsdWUgPT0gIm1hZ2VudGEiKQotICAgICAg
ICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yTWFn
ZW50YTsKLSAgICBpZiAodmFsdWUgPT0gInllbGxvdyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJv
dG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JZZWxsb3c7Ci0gICAgaWYgKHZh
bHVlID09ICJibGFjayIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVTUUxBc3luY1ByaW50Q29sb3JCbGFjazsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQot
Ci19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0
aC1hc3luYy1hdHRyaWJ1dGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLQotI2lt
cG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgi
Ci0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgot
Ci11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucyAoRGF0YWJhc2VEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlRGF0YWJhc2VJ
ZDooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lk
KV9wYXJzZVByaW1hcnlDb2xvcnM6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihp
ZClwYXlsb2FkOwotKyAodm9pZClfcGFyc2VDb2xvckxpc3Q6KE5TQXJyYXkvKjxOU1N0cmluZz4q
LyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLSsgKHZvaWQpX3BhcnNlRXJy
b3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlk
KXBheWxvYWQ7Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucyAoRGF0YWJhc2VEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlRGF0YWJhc2VJZDooTlNO
dW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19F
WENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU051bWJlciBjbGFzc10pOwotICAgICpv
dXRWYWx1ZSA9IChOU051bWJlciAqKXBheWxvYWQ7Ci19Ci0KLSsgKHZvaWQpX3BhcnNlUHJpbWFy
eUNvbG9yczooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsK
LSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBjbGFz
c10pOwotICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycz4gcmVz
dWx0ID0gSW5zcGVjdG9yOjpmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sRGF0YWJhc2VQ
cmltYXJ5Q29sb3JzPihwYXlsb2FkKTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9FTlVN
X1ZBTFVFKHJlc3VsdCwgQCJQcmltYXJ5Q29sb3JzIik7Ci0gICAgKm91dFZhbHVlID0gQChyZXN1
bHQudmFsdWUoKSk7Ci19Ci0KLSsgKHZvaWQpX3BhcnNlQ29sb3JMaXN0OihOU0FycmF5Lyo8TlNT
dHJpbmc+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJP
V19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0FycmF5Lyo8TlNTdHJpbmc+Ki8g
Y2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSAoTlNBcnJheS8qPE5TU3RyaW5nPiovICopcGF5bG9h
ZDsKLX0KLQotKyAodm9pZClfcGFyc2VFcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAq
KilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOwotICAgICpvdXRW
YWx1ZSA9IFtbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBhbGxvY10gaW5pdFdpdGhQYXlsb2Fk
OnBheWxvYWRdOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRy
aWJ1dGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0j
aW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05P
YmplY3RQcml2YXRlLmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3Rm
L0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi1AaW1wbGVt
ZW50YXRpb24gVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcgotCi0tIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXls
b2FkCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJldHVybiBu
aWw7Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRb
QCJtZXNzYWdlIl0sIEAibWVzc2FnZSIpOwotICAgIHNlbGYubWVzc2FnZSA9IHBheWxvYWRbQCJt
ZXNzYWdlIl07Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBh
eWxvYWRbQCJjb2RlIl0sIEAiY29kZSIpOwotICAgIHNlbGYuY29kZSA9IFtwYXlsb2FkW0AiY29k
ZSJdIGludGVnZXJWYWx1ZV07Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLS0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilvYmplY3QK
LXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoSlNPTk9iamVjdDpbb2JqZWN0IHRv
SlNPTk9iamVjdF0uZ2V0KCldKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIHJldHVybiBz
ZWxmOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1l
c3NhZ2UgY29kZTooaW50KWNvZGUKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkK
LSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURf
UFJPUEVSVFkobWVzc2FnZSwgQCJtZXNzYWdlIik7Ci0KLSAgICBzZWxmLm1lc3NhZ2UgPSBtZXNz
YWdlOwotICAgIHNlbGYuY29kZSA9IGNvZGU7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAo
dm9pZClzZXRNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UKLXsKLSAgICBbc3VwZXIgc2V0U3Ry
aW5nOm1lc3NhZ2UgZm9yS2V5OkAibWVzc2FnZSJdOwotfQotCi0tIChOU1N0cmluZyAqKW1lc3Nh
Z2UKLXsKLSAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAIm1lc3NhZ2UiXTsKLX0KLQot
LSAodm9pZClzZXRDb2RlOihpbnQpY29kZQotewotICAgIFtzdXBlciBzZXRJbnRlZ2VyOmNvZGUg
Zm9yS2V5OkAiY29kZSJdOwotfQotCi0tIChpbnQpY29kZQotewotICAgIHJldHVybiBbc3VwZXIg
aW50ZWdlckZvcktleTpAImNvZGUiXTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtb3B0aW9u
YWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2NvbW1hbmRzLXdp
dGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uLXJlc3VsdApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggODU5NDFlZDUxZjExMjQ0YjNkMzQzN2M4MDAyNTA0ZjUzMTQz
MTJlOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3Rl
ZC9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbi1yZXN1
bHQKKysrIC9kZXYvbnVsbApAQCAtMSwxNjc0ICswLDAgQEAKLSMjIyBCZWdpbiBGaWxlOiBJbnNw
ZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0vLyBEYXRhYmFzZQotSW5z
cGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiRGF0YWJhc2UiLCBudWxsKTsKLUluc3BlY3Rv
ckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJEYXRhYmFzZS5QcmltYXJ5Q29sb3JzIiwge1JlZDogInJl
ZCIsIEdyZWVuOiAiZ3JlZW4iLCBCbHVlOiAiYmx1ZSJ9KTsKLUluc3BlY3RvckJhY2tlbmQucmVn
aXN0ZXJDb21tYW5kKCJEYXRhYmFzZS5leGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzIiwgbnVs
bCwgW3sibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6
IHRydWV9LCB7Im5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0
cnVlfSwgeyJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6
IHRydWV9LCB7Im5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjog
dHJ1ZX0sIHsibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjog
dHJ1ZX0sIHsibmFtZSI6ICJkYXRhYmFzZUlkIiwgInR5cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFs
IjogdHJ1ZX0sIHsibmFtZSI6ICJzcWxFcnJvciIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25h
bCI6IHRydWV9LCB7Im5hbWUiOiAic2NyZWVuQ29sb3IiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0
aW9uYWwiOiB0cnVlfSwgeyJuYW1lIjogImFsdGVybmF0ZUNvbG9ycyIsICJ0eXBlIjogIm9iamVj
dCIsICJvcHRpb25hbCI6IHRydWV9LCB7Im5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0
cmluZyIsICJvcHRpb25hbCI6IHRydWV9XSwgWyJjb2x1bW5OYW1lcyIsICJub3RlcyIsICJ0aW1l
c3RhbXAiLCAidmFsdWVzIiwgInBheWxvYWQiLCAiZGF0YWJhc2VJZCIsICJzcWxFcnJvciIsICJz
Y3JlZW5Db2xvciIsICJhbHRlcm5hdGVDb2xvcnMiLCAicHJpbnRDb2xvciJdKTsKLUluc3BlY3Rv
ckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJEYXRhYmFzZS5leGVjdXRlTm9PcHRpb25hbFBhcmFt
ZXRlcnMiLCBudWxsLCBbeyJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAib2JqZWN0In0s
IHsibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyJ9LCB7Im5hbWUiOiAidGltZXN0YW1w
IiwgInR5cGUiOiAibnVtYmVyIn0sIHsibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3Qi
fSwgeyJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJvYmplY3QifSwgeyJuYW1lIjogImRhdGFi
YXNlSWQiLCAidHlwZSI6ICJudW1iZXIifSwgeyJuYW1lIjogInNxbEVycm9yIiwgInR5cGUiOiAi
b2JqZWN0In0sIHsibmFtZSI6ICJzY3JlZW5Db2xvciIsICJ0eXBlIjogInN0cmluZyJ9LCB7Im5h
bWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwgInR5cGUiOiAib2JqZWN0In0sIHsibmFtZSI6ICJwcmlu
dENvbG9yIiwgInR5cGUiOiAic3RyaW5nIn1dLCBbImNvbHVtbk5hbWVzIiwgIm5vdGVzIiwgInRp
bWVzdGFtcCIsICJ2YWx1ZXMiLCAicGF5bG9hZCIsICJkYXRhYmFzZUlkIiwgInNxbEVycm9yIiwg
InNjcmVlbkNvbG9yIiwgImFsdGVybmF0ZUNvbG9ycyIsICJwcmludENvbG9yIl0pOwotSW5zcGVj
dG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiRGF0YWJhc2UiLCBudWxsKTsKLSMjIyBFbmQgRmls
ZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0
ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UK
LQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi0jaW5jbHVk
ZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckZyb250ZW5kUm91dGVyLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNrZW5kRGlz
cGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tl
bmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQotICAgIEJhY2tlbmREaXNwYXRj
aGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNo
ZXIuZ2V0KCk7IH0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2Jh
Y2tlbmREaXNwYXRjaGVyOwotfTsKLQotCi1jbGFzcyBBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoK
LSAgICB2aXJ0dWFsIH5BbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKCkgeyB9Ci0g
ICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyBjYWxsSWQs
IGNvbnN0IEpTT046OkFycmF5KiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nKiBpbl9ub3Rl
cywgY29uc3QgZG91YmxlKiBpbl90aW1lc3RhbXAsIGNvbnN0IEpTT046Ok9iamVjdCogaW5fdmFs
dWVzLCBjb25zdCBKU09OOjpWYWx1ZSogaW5fcGF5bG9hZCwgY29uc3QgaW50KiBpbl9kYXRhYmFz
ZUlkLCBjb25zdCBKU09OOjpPYmplY3QqIGluX3NxbEVycm9yLCBjb25zdCBTdHJpbmcqIGluX3Nj
cmVlbkNvbG9yLCBjb25zdCBKU09OOjpBcnJheSogaW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBT
dHJpbmcqIGluX3ByaW50Q29sb3IpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZU5vT3B0
aW9uYWxQYXJhbWV0ZXJzKGxvbmcgY2FsbElkLCBjb25zdCBKU09OOjpBcnJheSYgaW5fY29sdW1u
TmFtZXMsIGNvbnN0IFN0cmluZyYgaW5fbm90ZXMsIGRvdWJsZSBpbl90aW1lc3RhbXAsIGNvbnN0
IEpTT046Ok9iamVjdCYgaW5fdmFsdWVzLCBKU09OOjpWYWx1ZSBpbl9wYXlsb2FkLCBpbnQgaW5f
ZGF0YWJhc2VJZCwgY29uc3QgSlNPTjo6T2JqZWN0JiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5n
JiBpbl9zY3JlZW5Db2xvciwgY29uc3QgSlNPTjo6QXJyYXkmIGluX2FsdGVybmF0ZUNvbG9ycywg
Y29uc3QgU3RyaW5nJiBpbl9wcmludENvbG9yKSA9IDA7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKLQotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENI
RVJTKQotIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLQot
IyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFy
YW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10eXBl
ZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQotY2xhc3MgQWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjsK
LSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQotY2xh
c3MgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewotcHVibGljOgotICAgIC8vIE5h
bWVkIGFmdGVyIHBhcmFtZXRlciAncHJpbnRDb2xvcicgd2hpbGUgZ2VuZXJhdGluZyBjb21tYW5k
L2V2ZW50IGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMuCi0gICAgZW51bSBjbGFzcyBQcmlu
dENvbG9yIHsKLSAgICAgICAgQ3lhbiA9IDMsCi0gICAgICAgIE1hZ2VudGEgPSA0LAotICAgICAg
ICBZZWxsb3cgPSA1LAotICAgICAgICBCbGFjayA9IDYsCi0gICAgfTsgLy8gZW51bSBjbGFzcyBQ
cmludENvbG9yCi0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMo
RXJyb3JTdHJpbmcmLCBjb25zdCBKU09OOjpBcnJheSogb3B0X2luX2NvbHVtbk5hbWVzLCBjb25z
dCBTdHJpbmcqIG9wdF9pbl9ub3RlcywgY29uc3QgZG91YmxlKiBvcHRfaW5fdGltZXN0YW1wLCBj
b25zdCBKU09OOjpPYmplY3QqIG9wdF9pbl92YWx1ZXMsIGNvbnN0IEpTT046OlZhbHVlKiBvcHRf
aW5fcGF5bG9hZCwgY29uc3QgaW50KiBvcHRfaW5fZGF0YWJhc2VJZCwgY29uc3QgSlNPTjo6T2Jq
ZWN0KiBvcHRfaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyogb3B0X2luX3NjcmVlbkNvbG9yLCBj
b25zdCBKU09OOjpBcnJheSogb3B0X2luX2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nKiBv
cHRfaW5fcHJpbnRDb2xvciwgUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mIG9wdF9vdXRf
Y29sdW1uTmFtZXMsIE9wdGlvbmFsPFN0cmluZz4mIG9wdF9vdXRfbm90ZXMsIE9wdGlvbmFsPGRv
dWJsZT4mIG9wdF9vdXRfdGltZXN0YW1wLCBPcHRpb25hbDxKU09OOjpPYmplY3Q+JiBvcHRfb3V0
X3ZhbHVlcywgT3B0aW9uYWw8SlNPTjo6VmFsdWU+JiBvcHRfb3V0X3BheWxvYWQsIE9wdGlvbmFs
PGludD4mIG9wdF9vdXRfZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpFcnJvcj4mIG9wdF9vdXRfc3FsRXJyb3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpQcmltYXJ5Q29sb3JzKiBvcHRfb3V0X3NjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4mIG9wdF9vdXRfYWx0ZXJuYXRlQ29s
b3JzLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciogb3B0X291
dF9wcmludENvbG9yKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVOb09wdGlvbmFsUGFy
YW1ldGVycyhFcnJvclN0cmluZyYsIGNvbnN0IEpTT046OkFycmF5JiBpbl9jb2x1bW5OYW1lcywg
Y29uc3QgU3RyaW5nJiBpbl9ub3RlcywgZG91YmxlIGluX3RpbWVzdGFtcCwgY29uc3QgSlNPTjo6
T2JqZWN0JiBpbl92YWx1ZXMsIEpTT046OlZhbHVlIGluX3BheWxvYWQsIGludCBpbl9kYXRhYmFz
ZUlkLCBjb25zdCBKU09OOjpPYmplY3QmIGluX3NxbEVycm9yLCBjb25zdCBTdHJpbmcmIGluX3Nj
cmVlbkNvbG9yLCBjb25zdCBKU09OOjpBcnJheSYgaW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBT
dHJpbmcmIGluX3ByaW50Q29sb3IsIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiBvdXRf
Y29sdW1uTmFtZXMsIFN0cmluZyogb3V0X25vdGVzLCBkb3VibGUqIG91dF90aW1lc3RhbXAsIEpT
T046Ok9iamVjdCogb3V0X3ZhbHVlcywgSlNPTjo6VmFsdWUqIG91dF9wYXlsb2FkLCBpbnQqIG91
dF9kYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9y
PiYgb3V0X3NxbEVycm9yLCBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNv
bG9ycyogb3V0X3NjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6OkNvbG9yTGlzdD4mIG91dF9hbHRlcm5hdGVDb2xvcnMsIERhdGFiYXNlQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyOjpQcmludENvbG9yKiBvdXRfcHJpbnRDb2xvcikgPSAwOwotcHJvdGVjdGVk
OgotICAgIHZpcnR1YWwgfkRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7Ci19Owot
Ci1jbGFzcyBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1l
bnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPERhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIERhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJ
ZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkgZmlu
YWw7Ci1wcml2YXRlOgotICAgIHZvaWQgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhsb25n
IHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKLSAgICB2b2lk
IGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046
Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKLXB1YmxpYzoKLSAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0
ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBt
X2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9Ci1wcml2YXRlOgot
ICAgIEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIqIG1fYWx0ZXJuYXRlRGlzcGF0
Y2hlciB7IG51bGxwdHIgfTsKLSNlbmRpZgotcHJpdmF0ZToKLSAgICBEYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiwgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXIqKTsKLSAgICBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2VudCB7
IG51bGxwdHIgfTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxl
OiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5k
RGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFu
ZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMu
aD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
LSNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jZW5kaWYKLQot
bmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
Ojp+RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KLQotUmVmPERhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXI+IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShCYWNr
ZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIERhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyKiBhZ2VudCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOwotfQotCi1EYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVyOjpEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNw
YXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIqIGFnZW50KQotICAgIDogU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERp
c3BhdGNoZXIpCi0gICAgLCBtX2FnZW50KGFnZW50KQotewotICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbigiRGF0YWJhc2UiX3MsIHRoaXMpOwotfQot
Ci12b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElk
LCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQotewot
ICAgIFJlZjxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKLQotICAg
IFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0
KCJwYXJhbXMiX3MsIHBhcmFtZXRlcnMpOwotCi0gICAgaWYgKG1ldGhvZCA9PSAiZXhlY3V0ZUFs
bE9wdGlvbmFsUGFyYW1ldGVycyIpCi0gICAgICAgIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRl
cnMocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKLSAgICBlbHNlIGlmIChtZXRob2Qg
PT0gImV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyIpCi0gICAgICAgIGV4ZWN1dGVOb09wdGlv
bmFsUGFyYW1ldGVycyhyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOwotICAgIGVsc2UK
LSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5k
RGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRGF0YWJhc2UuIiArIG1ldGhvZCArICInIHdh
cyBub3QgZm91bmQiKTsKLX0KLQotdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVj
dXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmIHBhcmFtZXRlcnMpCi17Ci0gICAgYm9vbCBvcHRfaW5fY29sdW1uTmFtZXNfdmFsdWVG
b3VuZCA9IGZhbHNlOwotICAgIFJlZlB0cjxKU09OOjpBcnJheT4gb3B0X2luX2NvbHVtbk5hbWVz
ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0QXJyYXkocGFyYW1ldGVycy5nZXQoKSwgImNvbHVt
bk5hbWVzIl9zLCAmb3B0X2luX2NvbHVtbk5hbWVzX3ZhbHVlRm91bmQpOwotICAgIGJvb2wgb3B0
X2luX25vdGVzX3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAgICBTdHJpbmcgb3B0X2luX25vdGVzID0g
bV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksICJub3RlcyJf
cywgJm9wdF9pbl9ub3Rlc192YWx1ZUZvdW5kKTsKLSAgICBib29sIG9wdF9pbl90aW1lc3RhbXBf
dmFsdWVGb3VuZCA9IGZhbHNlOwotICAgIGRvdWJsZSBvcHRfaW5fdGltZXN0YW1wID0gbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+Z2V0RG91YmxlKHBhcmFtZXRlcnMuZ2V0KCksICJ0aW1lc3RhbXAiX3Ms
ICZvcHRfaW5fdGltZXN0YW1wX3ZhbHVlRm91bmQpOwotICAgIGJvb2wgb3B0X2luX3ZhbHVlc192
YWx1ZUZvdW5kID0gZmFsc2U7Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gb3B0X2luX3ZhbHVl
cyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldE9iamVjdChwYXJhbWV0ZXJzLmdldCgpLCAidmFs
dWVzIl9zLCAmb3B0X2luX3ZhbHVlc192YWx1ZUZvdW5kKTsKLSAgICBib29sIG9wdF9pbl9wYXls
b2FkX3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IG9wdF9pbl9w
YXlsb2FkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0VmFsdWUocGFyYW1ldGVycy5nZXQoKSwg
InBheWxvYWQiX3MsICZvcHRfaW5fcGF5bG9hZF92YWx1ZUZvdW5kKTsKLSAgICBib29sIG9wdF9p
bl9kYXRhYmFzZUlkX3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAgICBpbnQgb3B0X2luX2RhdGFiYXNl
SWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRJbnRlZ2VyKHBhcmFtZXRlcnMuZ2V0KCksICJk
YXRhYmFzZUlkIl9zLCAmb3B0X2luX2RhdGFiYXNlSWRfdmFsdWVGb3VuZCk7Ci0gICAgYm9vbCBv
cHRfaW5fc3FsRXJyb3JfdmFsdWVGb3VuZCA9IGZhbHNlOwotICAgIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+IG9wdF9pbl9zcWxFcnJvciA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldE9iamVjdChwYXJh
bWV0ZXJzLmdldCgpLCAic3FsRXJyb3IiX3MsICZvcHRfaW5fc3FsRXJyb3JfdmFsdWVGb3VuZCk7
Ci0gICAgYm9vbCBvcHRfaW5fc2NyZWVuQ29sb3JfdmFsdWVGb3VuZCA9IGZhbHNlOwotICAgIFN0
cmluZyBvcHRfaW5fc2NyZWVuQ29sb3IgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmco
cGFyYW1ldGVycy5nZXQoKSwgInNjcmVlbkNvbG9yIl9zLCAmb3B0X2luX3NjcmVlbkNvbG9yX3Zh
bHVlRm91bmQpOwotICAgIGJvb2wgb3B0X2luX2FsdGVybmF0ZUNvbG9yc192YWx1ZUZvdW5kID0g
ZmFsc2U7Ci0gICAgUmVmUHRyPEpTT046OkFycmF5PiBvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzID0g
bV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0QXJyYXkocGFyYW1ldGVycy5nZXQoKSwgImFsdGVybmF0
ZUNvbG9ycyJfcywgJm9wdF9pbl9hbHRlcm5hdGVDb2xvcnNfdmFsdWVGb3VuZCk7Ci0gICAgYm9v
bCBvcHRfaW5fcHJpbnRDb2xvcl92YWx1ZUZvdW5kID0gZmFsc2U7Ci0gICAgU3RyaW5nIG9wdF9p
bl9wcmludENvbG9yID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMu
Z2V0KCksICJwcmludENvbG9yIl9zLCAmb3B0X2luX3ByaW50Q29sb3JfdmFsdWVGb3VuZCk7Ci0g
ICAgaWYgKG1fYmFja2VuZERpc3BhdGNoZXItPmhhc1Byb3RvY29sRXJyb3JzKCkpIHsKLSAgICAg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0
Y2hlcjo6SW52YWxpZFBhcmFtcywgIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnRGF0YWJhc2Uu
ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycycgY2FuJ3QgYmUgcHJvY2Vzc2VkIl9zKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQotICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9h
bHRlcm5hdGVEaXNwYXRjaGVyLT5leGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKHJlcXVlc3RJ
ZCwgb3B0X2luX2NvbHVtbk5hbWVzX3ZhbHVlRm91bmQgPyBvcHRfaW5fY29sdW1uTmFtZXMuZ2V0
KCkgOiBudWxscHRyLCBvcHRfaW5fbm90ZXNfdmFsdWVGb3VuZCA/ICZvcHRfaW5fbm90ZXMgOiBu
dWxscHRyLCBvcHRfaW5fdGltZXN0YW1wX3ZhbHVlRm91bmQgPyAmb3B0X2luX3RpbWVzdGFtcCA6
IG51bGxwdHIsIG9wdF9pbl92YWx1ZXNfdmFsdWVGb3VuZCA/IG9wdF9pbl92YWx1ZXMuZ2V0KCkg
OiBudWxscHRyLCBvcHRfaW5fcGF5bG9hZF92YWx1ZUZvdW5kID8gb3B0X2luX3BheWxvYWQuZ2V0
KCkgOiBudWxscHRyLCBvcHRfaW5fZGF0YWJhc2VJZF92YWx1ZUZvdW5kID8gJm9wdF9pbl9kYXRh
YmFzZUlkIDogbnVsbHB0ciwgb3B0X2luX3NxbEVycm9yX3ZhbHVlRm91bmQgPyBvcHRfaW5fc3Fs
RXJyb3IuZ2V0KCkgOiBudWxscHRyLCBvcHRfaW5fc2NyZWVuQ29sb3JfdmFsdWVGb3VuZCA/ICZv
cHRfaW5fc2NyZWVuQ29sb3IgOiBudWxscHRyLCBvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzX3ZhbHVl
Rm91bmQgPyBvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX3By
aW50Q29sb3JfdmFsdWVGb3VuZCA/ICZvcHRfaW5fcHJpbnRDb2xvciA6IG51bGxwdHIpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAg
ICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAg
IFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IG91dF9jb2x1bW5OYW1lczsKLSAgICBPcHRp
b25hbDxTdHJpbmc+IG91dF9ub3RlczsKLSAgICBPcHRpb25hbDxkb3VibGU+IG91dF90aW1lc3Rh
bXA7Ci0gICAgT3B0aW9uYWw8SlNPTjo6T2JqZWN0PiBvdXRfdmFsdWVzOwotICAgIE9wdGlvbmFs
PEpTT046OlZhbHVlPiBvdXRfcGF5bG9hZDsKLSAgICBPcHRpb25hbDxpbnQ+IG91dF9kYXRhYmFz
ZUlkOwotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IG91
dF9zcWxFcnJvcjsKLSAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNv
bG9ycyBvdXRfc2NyZWVuQ29sb3I7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpDb2xvckxpc3Q+IG91dF9hbHRlcm5hdGVDb2xvcnM7Ci0gICAgRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3Igb3V0X3ByaW50Q29sb3I7Ci0gICAgbV9h
Z2VudC0+ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhlcnJvciwgb3B0X2luX2NvbHVtbk5h
bWVzX3ZhbHVlRm91bmQgPyBvcHRfaW5fY29sdW1uTmFtZXMuZ2V0KCkgOiBudWxscHRyLCBvcHRf
aW5fbm90ZXNfdmFsdWVGb3VuZCA/ICZvcHRfaW5fbm90ZXMgOiBudWxscHRyLCBvcHRfaW5fdGlt
ZXN0YW1wX3ZhbHVlRm91bmQgPyAmb3B0X2luX3RpbWVzdGFtcCA6IG51bGxwdHIsIG9wdF9pbl92
YWx1ZXNfdmFsdWVGb3VuZCA/IG9wdF9pbl92YWx1ZXMuZ2V0KCkgOiBudWxscHRyLCBvcHRfaW5f
cGF5bG9hZF92YWx1ZUZvdW5kID8gb3B0X2luX3BheWxvYWQuZ2V0KCkgOiBudWxscHRyLCBvcHRf
aW5fZGF0YWJhc2VJZF92YWx1ZUZvdW5kID8gJm9wdF9pbl9kYXRhYmFzZUlkIDogbnVsbHB0ciwg
b3B0X2luX3NxbEVycm9yX3ZhbHVlRm91bmQgPyBvcHRfaW5fc3FsRXJyb3IuZ2V0KCkgOiBudWxs
cHRyLCBvcHRfaW5fc2NyZWVuQ29sb3JfdmFsdWVGb3VuZCA/ICZvcHRfaW5fc2NyZWVuQ29sb3Ig
OiBudWxscHRyLCBvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzX3ZhbHVlRm91bmQgPyBvcHRfaW5fYWx0
ZXJuYXRlQ29sb3JzLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX3ByaW50Q29sb3JfdmFsdWVGb3Vu
ZCA/ICZvcHRfaW5fcHJpbnRDb2xvciA6IG51bGxwdHIsIG91dF9jb2x1bW5OYW1lcywgb3V0X25v
dGVzLCBvdXRfdGltZXN0YW1wLCBvdXRfdmFsdWVzLCBvdXRfcGF5bG9hZCwgb3V0X2RhdGFiYXNl
SWQsIG91dF9zcWxFcnJvciwgb3V0X3NjcmVlbkNvbG9yLCBvdXRfYWx0ZXJuYXRlQ29sb3JzLCBv
dXRfcHJpbnRDb2xvcik7Ci0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7Ci0gICAgICAgIGlm
IChvdXRfY29sdW1uTmFtZXMpCi0gICAgICAgICAgICByZXN1bHQtPnNldEFycmF5KCJjb2x1bW5O
YW1lcyJfcywgb3V0X2NvbHVtbk5hbWVzKTsKLSAgICAgICAgaWYgKG91dF9ub3Rlcy5oYXNWYWx1
ZSgpKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCAqb3V0X25vdGVz
KTsKLSAgICAgICAgaWYgKG91dF90aW1lc3RhbXAuaGFzVmFsdWUoKSkKLSAgICAgICAgICAgIHJl
c3VsdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICpvdXRfdGltZXN0YW1wKTsKLSAgICAgICAg
aWYgKG91dF92YWx1ZXMuaGFzVmFsdWUoKSkKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0
KCJ2YWx1ZXMiX3MsICpvdXRfdmFsdWVzKTsKLSAgICAgICAgaWYgKG91dF9wYXlsb2FkLmhhc1Zh
bHVlKCkpCi0gICAgICAgICAgICByZXN1bHQtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCAqb3V0X3Bh
eWxvYWQpOwotICAgICAgICBpZiAob3V0X2RhdGFiYXNlSWQuaGFzVmFsdWUoKSkKLSAgICAgICAg
ICAgIHJlc3VsdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgKm91dF9kYXRhYmFzZUlkKTsK
LSAgICAgICAgaWYgKG91dF9zcWxFcnJvcikKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0
KCJzcWxFcnJvciJfcywgb3V0X3NxbEVycm9yKTsKLSAgICAgICAgaWYgKG91dF9zY3JlZW5Db2xv
ci5oYXNWYWx1ZSgpKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9y
Il9zLCAqb3V0X3NjcmVlbkNvbG9yKTsKLSAgICAgICAgaWYgKG91dF9hbHRlcm5hdGVDb2xvcnMp
Ci0gICAgICAgICAgICByZXN1bHQtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIG91dF9h
bHRlcm5hdGVDb2xvcnMpOwotICAgICAgICBpZiAob3V0X3ByaW50Q29sb3IuaGFzVmFsdWUoKSkK
LSAgICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCAqb3V0X3ByaW50
Q29sb3IpOwotICAgIH0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZh
bHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3Rv
Y29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7
Ci19Ci0KLXZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZU5vT3B0aW9uYWxQ
YXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRl
cnMpCi17Ci0gICAgUmVmUHRyPEpTT046OkFycmF5PiBpbl9jb2x1bW5OYW1lcyA9IG1fYmFja2Vu
ZERpc3BhdGNoZXItPmdldEFycmF5KHBhcmFtZXRlcnMuZ2V0KCksICJjb2x1bW5OYW1lcyJfcywg
bnVsbHB0cik7Ci0gICAgU3RyaW5nIGluX25vdGVzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0
U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksICJub3RlcyJfcywgbnVsbHB0cik7Ci0gICAgZG91Ymxl
IGluX3RpbWVzdGFtcCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldERvdWJsZShwYXJhbWV0ZXJz
LmdldCgpLCAidGltZXN0YW1wIl9zLCBudWxscHRyKTsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0
PiBpbl92YWx1ZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRPYmplY3QocGFyYW1ldGVycy5n
ZXQoKSwgInZhbHVlcyJfcywgbnVsbHB0cik7Ci0gICAgUmVmUHRyPEpTT046OlZhbHVlPiBpbl9w
YXlsb2FkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0VmFsdWUocGFyYW1ldGVycy5nZXQoKSwg
InBheWxvYWQiX3MsIG51bGxwdHIpOwotICAgIGludCBpbl9kYXRhYmFzZUlkID0gbV9iYWNrZW5k
RGlzcGF0Y2hlci0+Z2V0SW50ZWdlcihwYXJhbWV0ZXJzLmdldCgpLCAiZGF0YWJhc2VJZCJfcywg
bnVsbHB0cik7Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gaW5fc3FsRXJyb3IgPSBtX2JhY2tl
bmREaXNwYXRjaGVyLT5nZXRPYmplY3QocGFyYW1ldGVycy5nZXQoKSwgInNxbEVycm9yIl9zLCBu
dWxscHRyKTsKLSAgICBTdHJpbmcgaW5fc2NyZWVuQ29sb3IgPSBtX2JhY2tlbmREaXNwYXRjaGVy
LT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgInNjcmVlbkNvbG9yIl9zLCBudWxscHRyKTsK
LSAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGluX2FsdGVybmF0ZUNvbG9ycyA9IG1fYmFja2VuZERp
c3BhdGNoZXItPmdldEFycmF5KHBhcmFtZXRlcnMuZ2V0KCksICJhbHRlcm5hdGVDb2xvcnMiX3Ms
IG51bGxwdHIpOwotICAgIFN0cmluZyBpbl9wcmludENvbG9yID0gbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksICJwcmludENvbG9yIl9zLCBudWxscHRyKTsK
LSAgICBpZiAobV9iYWNrZW5kRGlzcGF0Y2hlci0+aGFzUHJvdG9jb2xFcnJvcnMoKSkgewotICAg
ICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNw
YXRjaGVyOjpJbnZhbGlkUGFyYW1zLCAiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICdEYXRhYmFz
ZS5leGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMnIGNhbid0IGJlIHByb2Nlc3NlZCJfcyk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKLSAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1f
YWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKHJlcXVlc3RJ
ZCwgKmluX2NvbHVtbk5hbWVzLCBpbl9ub3RlcywgaW5fdGltZXN0YW1wLCAqaW5fdmFsdWVzLCAq
aW5fcGF5bG9hZCwgaW5fZGF0YWJhc2VJZCwgKmluX3NxbEVycm9yLCBpbl9zY3JlZW5Db2xvciwg
KmluX2FsdGVybmF0ZUNvbG9ycywgaW5fcHJpbnRDb2xvcik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0jZW5kaWYKLQotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmpl
Y3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgUmVmUHRyPEpTT046OkFy
cmF5T2Y8U3RyaW5nPj4gb3V0X2NvbHVtbk5hbWVzOwotICAgIFN0cmluZyBvdXRfbm90ZXM7Ci0g
ICAgZG91YmxlIG91dF90aW1lc3RhbXA7Ci0gICAgSlNPTjo6T2JqZWN0IG91dF92YWx1ZXM7Ci0g
ICAgSlNPTjo6VmFsdWUgb3V0X3BheWxvYWQ7Ci0gICAgaW50IG91dF9kYXRhYmFzZUlkOwotICAg
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IG91dF9zcWxFcnJv
cjsKLSAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyBvdXRf
c2NyZWVuQ29sb3I7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpD
b2xvckxpc3Q+IG91dF9hbHRlcm5hdGVDb2xvcnM7Ci0gICAgRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXI6OlByaW50Q29sb3Igb3V0X3ByaW50Q29sb3I7Ci0gICAgbV9hZ2VudC0+ZXhl
Y3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGVycm9yLCAqaW5fY29sdW1uTmFtZXMsIGluX25vdGVz
LCBpbl90aW1lc3RhbXAsICppbl92YWx1ZXMsICppbl9wYXlsb2FkLCBpbl9kYXRhYmFzZUlkLCAq
aW5fc3FsRXJyb3IsIGluX3NjcmVlbkNvbG9yLCAqaW5fYWx0ZXJuYXRlQ29sb3JzLCBpbl9wcmlu
dENvbG9yLCBvdXRfY29sdW1uTmFtZXMsICZvdXRfbm90ZXMsICZvdXRfdGltZXN0YW1wLCBvdXRf
dmFsdWVzLCAmb3V0X3BheWxvYWQsICZvdXRfZGF0YWJhc2VJZCwgb3V0X3NxbEVycm9yLCAmb3V0
X3NjcmVlbkNvbG9yLCBvdXRfYWx0ZXJuYXRlQ29sb3JzLCAmb3V0X3ByaW50Q29sb3IpOwotCi0g
ICAgaWYgKCFlcnJvci5sZW5ndGgoKSkgewotICAgICAgICByZXN1bHQtPnNldEFycmF5KCJjb2x1
bW5OYW1lcyJfcywgb3V0X2NvbHVtbk5hbWVzKTsKLSAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmco
Im5vdGVzIl9zLCBvdXRfbm90ZXMpOwotICAgICAgICByZXN1bHQtPnNldERvdWJsZSgidGltZXN0
YW1wIl9zLCBvdXRfdGltZXN0YW1wKTsKLSAgICAgICAgcmVzdWx0LT5zZXRPYmplY3QoInZhbHVl
cyJfcywgb3V0X3ZhbHVlcyk7Ci0gICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoInBheWxvYWQiX3Ms
IG91dF9wYXlsb2FkKTsKLSAgICAgICAgcmVzdWx0LT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9z
LCBvdXRfZGF0YWJhc2VJZCk7Ci0gICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJf
cywgb3V0X3NxbEVycm9yKTsKLSAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9y
Il9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFs
dWUob3V0X3NjcmVlbkNvbG9yKSk7Ci0gICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoImFsdGVybmF0
ZUNvbG9ycyJfcywgb3V0X2FsdGVybmF0ZUNvbG9ycyk7Ci0gICAgICAgIHJlc3VsdC0+c2V0U3Ry
aW5nKCJwcmludENvbG9yIl9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0
RW51bUNvbnN0YW50VmFsdWUob3V0X3ByaW50Q29sb3IpKTsKLSAgICB9Ci0gICAgaWYgKCFlcnJv
ci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJl
cXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpT
ZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVy
cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFn
bWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPHd0
Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVz
cGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBGcm9udGVuZFJvdXRlcjsKLQotfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLQot
IyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4t
cGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVy
cy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMu
aAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9u
YWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+
Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQot
Ci0KLS8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgotbmFtZXNwYWNlIERhdGFiYXNlIHsKLWNsYXNz
IEVycm9yOwotZW51bSBjbGFzcyBQcmltYXJ5Q29sb3JzOwotfSAvLyBEYXRhYmFzZQotLy8gRW5k
IG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgotCi0KLS8vIFR5cGVkZWZzLgotbmFtZXNwYWNlIERh
dGFiYXNlIHsKLS8qIFVuaXF1ZSBpZGVudGlmaWVyIG9mIERhdGFiYXNlIG9iamVjdC4gKi8KLXR5
cGVkZWYgaW50IERhdGFiYXNlSWQ7Ci10eXBlZGVmIEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IENvbG9yTGlzdDsKLX0gLy8gRGF0YWJh
c2UKLS8vIEVuZCBvZiB0eXBlZGVmcy4KLQotbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKLQotU3Ry
aW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
VD4gU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKFQgZW51bVZhbHVlKQotewotICAgIHJldHVy
biBnZXRFbnVtQ29uc3RhbnRWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KGVudW1WYWx1ZSkpOwotfQot
Ci19IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwotCi1uYW1lc3BhY2UgRGF0YWJhc2UgewotLyog
ICovCi1lbnVtIGNsYXNzIFByaW1hcnlDb2xvcnMgewotICAgIFJlZCA9IDAsCi0gICAgR3JlZW4g
PSAxLAotICAgIEJsdWUgPSAyLAotfTsgLy8gZW51bSBjbGFzcyBQcmltYXJ5Q29sb3JzCi0vKiBE
YXRhYmFzZSBlcnJvci4gKi8KLWNsYXNzIEVycm9yIDogcHVibGljIEpTT046Ok9iamVjdEJhc2Ug
ewotcHVibGljOgotICAgIGVudW0gewotICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCi0gICAgICAg
IE1lc3NhZ2VTZXQgPSAxIDw8IDAsCi0gICAgICAgIENvZGVTZXQgPSAxIDw8IDEsCi0gICAgICAg
IEFsbEZpZWxkc1NldCA9IChNZXNzYWdlU2V0IHwgQ29kZVNldCkKLSAgICB9OwotCi0gICAgdGVt
cGxhdGU8aW50IFNUQVRFPgotICAgIGNsYXNzIEJ1aWxkZXIgewotICAgIHByaXZhdGU6Ci0gICAg
ICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVzdWx0OwotCi0gICAgICAgIHRlbXBsYXRlPGlu
dCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4q
Pih0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXIoUmVmPC8qRXJyb3IqL0pTT046
Ok9iamVjdD4mJiBvYmplY3QpCi0gICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0
KSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVs
ZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7Ci0gICAgICAgIH0KLSAg
ICAgICAgZnJpZW5kIGNsYXNzIEVycm9yOwotICAgIHB1YmxpYzoKLQotICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgTWVzc2FnZVNldD4mIHNldE1lc3NhZ2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAg
ICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE1lc3NhZ2VTZXQp
LCBwcm9wZXJ0eV9tZXNzYWdlX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXRTdHJpbmcoIm1lc3NhZ2UiX3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3Rh
dGU8TWVzc2FnZVNldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBD
b2RlU2V0PiYgc2V0Q29kZShpbnQgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBDb2RlU2V0KSwgcHJvcGVydHlfY29kZV9hbHJlYWR5X3NldCk7
Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcigiY29kZSJfcywgdmFsdWUpOwotICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb2RlU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgUmVmPEVycm9yPiByZWxlYXNlKCkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKLSAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihFcnJvcikgPT0gc2l6ZW9mKEpTT046Ok9iamVj
dCksIGNhbm5vdF9jYXN0KTsKLQotICAgICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4ganNvblJl
c3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7Ci0gICAgICAgICAgICBhdXRvIHJlc3Vs
dCA9IFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPEVycm9yPio+KCZqc29uUmVzdWx0KSk7
Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIC8q
Ci0gICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgotICAgICAqIFJlZjxFcnJvcj4gcmVzdWx0
ID0gRXJyb3I6OmNyZWF0ZSgpCi0gICAgICogICAgIC5zZXRNZXNzYWdlKC4uLikKLSAgICAgKiAg
ICAgLnNldENvZGUoLi4uKQotICAgICAqICAgICAucmVsZWFzZSgpOwotICAgICAqLwotICAgIHN0
YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOwotICAgIH0KLX07
Ci0KLX0gLy8gRGF0YWJhc2UKLQotCi0KLW5hbWVzcGFjZSBUZXN0SGVscGVycyB7Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIFByb3RvY29sRW51bVR5cGU+Ci1PcHRpb25hbDxQcm90b2NvbEVudW1UeXBl
PiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJik7Ci0KLS8vIEVudW1zIGlu
IHRoZSAnRGF0YWJhc2UnIERvbWFpbgotdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmlu
ZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4oY29uc3QgU3Ry
aW5nJik7Ci0KLX0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCi0KLX0gLy8gbmFtZXNwYWNlIFBy
b3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi1uYW1lc3BhY2UgV1RGIHsKLQot
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwotCi0vLyBIYXNoIGRlY2xh
cmF0aW9ucyBpbiB0aGUgJ0RhdGFiYXNlJyBEb21haW4KLXRlbXBsYXRlPD4KLXN0cnVjdCBEZWZh
dWx0SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gewot
ICAgIHR5cGVkZWYgSW50SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFy
eUNvbG9ycz4gSGFzaDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgotIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xPYmplY3RzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVj
dHMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1v
cHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRl
c3RQcm90b2NvbE9iamVjdHMuaCIKLQotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLW5hbWVz
cGFjZSBQcm90b2NvbCB7Ci0KLW5hbWVzcGFjZSBUZXN0SGVscGVycyB7Ci0KLXN0YXRpYyBjb25z
dCBjaGFyKiBjb25zdCBlbnVtX2NvbnN0YW50X3ZhbHVlc1tdID0gewotICAgICJyZWQiLAotICAg
ICJncmVlbiIsCi0gICAgImJsdWUiLAotICAgICJjeWFuIiwKLSAgICAibWFnZW50YSIsCi0gICAg
InllbGxvdyIsCi0gICAgImJsYWNrIiwKLX07Ci0KLVN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1
ZShpbnQgY29kZSkgewotICAgIHJldHVybiBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb2RlXTsKLX0K
LQotLy8gRW51bXMgaW4gdGhlICdEYXRhYmFzZScgRG9tYWluCi10ZW1wbGF0ZTw+Ci1PcHRpb25h
bDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gcGFyc2VFbnVt
VmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29s
b3JzPihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQotewotICAgIHN0YXRpYyBjb25zdCBz
aXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlBy
b3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9yczo6UmVkLAotICAgICAgICAoc2l6ZV90KUlu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzOjpHcmVlbiwKLSAgICAg
ICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9yczo6
Qmx1ZSwKLSAgICB9OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMzsgKytpKQotICAgICAg
ICBpZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRWYWx1
ZXNbaV1dKQotICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFz
ZTo6UHJpbWFyeUNvbG9ycyljb25zdGFudFZhbHVlc1tpXTsKLQotICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7Ci19Ci0KLQotfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKLQotCi0KLX0gLy8gbmFt
ZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbmNsdWRl
IDx3dGYvUmV0YWluUHRyLmg+Ci0KLUBwcm90b2NvbCBUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFp
bkhhbmRsZXI7Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLWNsYXNzIE9iakNJbnNwZWN0
b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZURhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXIgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVi
bGljOgotICAgIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQ
cm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFu
ZGxlcjsgfQotICAgIHZvaWQgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhsb25nIHJlcXVl
c3RJZCwgY29uc3QgSlNPTjo6QXJyYXkqIGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIGlu
X25vdGVzLCBjb25zdCBkb3VibGUqIGluX3RpbWVzdGFtcCwgY29uc3QgSlNPTjo6T2JqZWN0KiBp
bl92YWx1ZXMsIGNvbnN0IEpTT046OlZhbHVlKiBpbl9wYXlsb2FkLCBjb25zdCBpbnQqIGluX2Rh
dGFiYXNlSWQsIGNvbnN0IEpTT046Ok9iamVjdCogaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyog
aW5fc2NyZWVuQ29sb3IsIGNvbnN0IEpTT046OkFycmF5KiBpbl9hbHRlcm5hdGVDb2xvcnMsIGNv
bnN0IFN0cmluZyogaW5fcHJpbnRDb2xvcikgZmluYWw7Ci0gICAgdm9pZCBleGVjdXRlTm9PcHRp
b25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIGNvbnN0IEpTT046OkFycmF5JiBpbl9jb2x1
bW5OYW1lcywgY29uc3QgU3RyaW5nJiBpbl9ub3RlcywgZG91YmxlIGluX3RpbWVzdGFtcCwgY29u
c3QgSlNPTjo6T2JqZWN0JiBpbl92YWx1ZXMsIEpTT046OlZhbHVlIGluX3BheWxvYWQsIGludCBp
bl9kYXRhYmFzZUlkLCBjb25zdCBKU09OOjpPYmplY3QmIGluX3NxbEVycm9yLCBjb25zdCBTdHJp
bmcmIGluX3NjcmVlbkNvbG9yLCBjb25zdCBKU09OOjpBcnJheSYgaW5fYWx0ZXJuYXRlQ29sb3Jz
LCBjb25zdCBTdHJpbmcmIGluX3ByaW50Q29sb3IpIGZpbmFsOwotcHJpdmF0ZToKLSAgICBSZXRh
aW5QdHI8aWQ8VGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xC
YWNrZW5kRGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBj
b21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIK
LSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSAi
VGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotCi1uYW1lc3BhY2UgSW5zcGVj
dG9yIHsKLQotdm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhl
Y3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhsb25nIHJlcXVlc3RJZCwgY29uc3QgSlNPTjo6QXJy
YXkqIGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIGluX25vdGVzLCBjb25zdCBkb3VibGUq
IGluX3RpbWVzdGFtcCwgY29uc3QgSlNPTjo6T2JqZWN0KiBpbl92YWx1ZXMsIGNvbnN0IEpTT046
OlZhbHVlKiBpbl9wYXlsb2FkLCBjb25zdCBpbnQqIGluX2RhdGFiYXNlSWQsIGNvbnN0IEpTT046
Ok9iamVjdCogaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyogaW5fc2NyZWVuQ29sb3IsIGNvbnN0
IEpTT046OkFycmF5KiBpbl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyogaW5fcHJpbnRD
b2xvcikKLXsKLSAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0
b3IoZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1dpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3ND
YWxsYmFjazpjb2x1bW5OYW1lczpub3Rlczp0aW1lc3RhbXA6dmFsdWVzOnBheWxvYWQ6ZGF0YWJh
c2VJZDpzcWxFcnJvcjpzY3JlZW5Db2xvcjphbHRlcm5hdGVDb2xvcnM6cHJpbnRDb2xvcjopXSkg
ewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVl
c3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RhdGFiYXNlLmV4ZWN1
dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMnIHdhcyBub3QgZm91bmQiX3MpOwotICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBC
YWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKLSAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICB9OwotCi0gICAgaWQgc3VjY2Vz
c0NhbGxiYWNrID0gXihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKipjb2x1bW5OYW1lcywgTlNTdHJp
bmcgKipub3RlcywgZG91YmxlICp0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnZh
bHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqcGF5bG9hZCwgaW50ICpkYXRhYmFzZUlkLCBU
ZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqc3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNl
UHJpbWFyeUNvbG9ycyAqc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmFsdGVy
bmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0
ZXJzUHJpbnRDb2xvciAqcHJpbnRDb2xvcikgewotICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiBy
ZXN1bHRPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgICAgICBUSFJPV19FWENF
UFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoY29sdW1uTmFtZXMsIEAiY29sdW1uTmFt
ZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVS
KG5vdGVzLCBAIm5vdGVzIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElP
TkFMX1BBUkFNRVRFUih2YWx1ZXMsIEAidmFsdWVzIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihwYXlsb2FkLCBAInBheWxvYWQiKTsKLSAgICAg
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHNxbEVycm9yLCBA
InNxbEVycm9yIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BB
UkFNRVRFUihhbHRlcm5hdGVDb2xvcnMsIEAiYWx0ZXJuYXRlQ29sb3JzIik7Ci0gICAgICAgIGlm
IChjb2x1bW5OYW1lcykKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoImNvbHVt
bk5hbWVzIl9zLCB0b0pTT05TdHJpbmdBcnJheSgqY29sdW1uTmFtZXMpKTsKLSAgICAgICAgaWYg
KG5vdGVzKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCAq
bm90ZXMpOwotICAgICAgICBpZiAodGltZXN0YW1wKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0
LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgKnRpbWVzdGFtcCk7Ci0gICAgICAgIGlmICh2YWx1
ZXMpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdCgidmFsdWVzIl9zLCBbKnZh
bHVlcyB0b0pTT05PYmplY3RdKTsKLSAgICAgICAgaWYgKHBheWxvYWQpCi0gICAgICAgICAgICBy
ZXN1bHRPYmplY3QtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBbKnBheWxvYWQgdG9KU09OT2JqZWN0
XSk7Ci0gICAgICAgIGlmIChkYXRhYmFzZUlkKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5z
ZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCAqZGF0YWJhc2VJZCk7Ci0gICAgICAgIGlmIChzcWxF
cnJvcikKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywg
WypzcWxFcnJvciB0b0pTT05PYmplY3RdKTsKLSAgICAgICAgaWYgKHNjcmVlbkNvbG9yKQotICAg
ICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCB0b1Byb3Rv
Y29sU3RyaW5nKCpzY3JlZW5Db2xvcikpOwotICAgICAgICBpZiAoYWx0ZXJuYXRlQ29sb3JzKQot
ICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCB0
b0pTT05TdHJpbmdBcnJheSgqYWx0ZXJuYXRlQ29sb3JzKSk7Ci0gICAgICAgIGlmIChwcmludENv
bG9yKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3Ms
IHRvUHJvdG9jb2xTdHJpbmcoKnByaW50Q29sb3IpKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHRPYmplY3QpLCBmYWxz
ZSk7Ci0gICAgfTsKLQotICAgIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqb19pbl9jb2x1bW5OYW1l
czsKLSAgICBpZiAoaW5fY29sdW1uTmFtZXMpCi0gICAgICAgIG9faW5fY29sdW1uTmFtZXMgPSB0
b09iakNTdHJpbmdBcnJheShpbl9jb2x1bW5OYW1lcyk7Ci0gICAgTlNTdHJpbmcgKm9faW5fbm90
ZXM7Ci0gICAgaWYgKGluX25vdGVzKQotICAgICAgICBvX2luX25vdGVzID0gKmluX25vdGVzOwot
ICAgIGRvdWJsZSBvX2luX3RpbWVzdGFtcDsKLSAgICBpZiAoaW5fdGltZXN0YW1wKQotICAgICAg
ICBvX2luX3RpbWVzdGFtcCA9ICppbl90aW1lc3RhbXA7Ci0gICAgUldJUHJvdG9jb2xKU09OT2Jq
ZWN0ICpvX2luX3ZhbHVlczsKLSAgICBpZiAoaW5fdmFsdWVzKQotICAgICAgICBvX2luX3ZhbHVl
cyA9IFtbW1JXSVByb3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0Omlu
X3ZhbHVlc10gYXV0b3JlbGVhc2VdOwotICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb19pbl9w
YXlsb2FkOwotICAgIGlmIChpbl9wYXlsb2FkKQotICAgICAgICBvX2luX3BheWxvYWQgPSBbW1tS
V0lQcm90b2NvbEpTT05PYmplY3QgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDppbl9wYXlsb2Fk
XSBhdXRvcmVsZWFzZV07Ci0gICAgaW50IG9faW5fZGF0YWJhc2VJZDsKLSAgICBpZiAoaW5fZGF0
YWJhc2VJZCkKLSAgICAgICAgb19pbl9kYXRhYmFzZUlkID0gKmluX2RhdGFiYXNlSWQ7Ci0gICAg
VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqb19pbl9zcWxFcnJvcjsKLSAgICBpZiAoaW5fc3Fs
RXJyb3IpCi0gICAgICAgIG9faW5fc3FsRXJyb3IgPSBbW1tUZXN0UHJvdG9jb2xEYXRhYmFzZUVy
cm9yIGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6aW5fc3FsRXJyb3JdIGF1dG9yZWxlYXNlXTsK
LSAgICBPcHRpb25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnM+IG9faW5fc2Ny
ZWVuQ29sb3I7Ci0gICAgaWYgKGluX3NjcmVlbkNvbG9yKQotICAgICAgICBvX2luX3NjcmVlbkNv
bG9yID0gZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9y
cz4oKmluX3NjcmVlbkNvbG9yKTsKLSAgICBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKm9faW5fYWx0
ZXJuYXRlQ29sb3JzOwotICAgIGlmIChpbl9hbHRlcm5hdGVDb2xvcnMpCi0gICAgICAgIG9faW5f
YWx0ZXJuYXRlQ29sb3JzID0gdG9PYmpDU3RyaW5nQXJyYXkoaW5fYWx0ZXJuYXRlQ29sb3JzKTsK
LSAgICBPcHRpb25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFt
ZXRlcnNQcmludENvbG9yPiBvX2luX3ByaW50Q29sb3I7Ci0gICAgaWYgKGluX3ByaW50Q29sb3Ip
Ci0gICAgICAgIG9faW5fcHJpbnRDb2xvciA9IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9j
b2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yPigqaW5fcHJp
bnRDb2xvcik7Ci0KLSAgICBbbV9kZWxlZ2F0ZSBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJz
V2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0Nh
bGxiYWNrIGNvbHVtbk5hbWVzOihpbl9jb2x1bW5OYW1lcyA/ICZvX2luX2NvbHVtbk5hbWVzIDog
bmlsKSBub3RlczooaW5fbm90ZXMgPyAmb19pbl9ub3RlcyA6IG5pbCkgdGltZXN0YW1wOihpbl90
aW1lc3RhbXAgPyAmb19pbl90aW1lc3RhbXAgOiBuaWwpIHZhbHVlczooaW5fdmFsdWVzID8gJm9f
aW5fdmFsdWVzIDogbmlsKSBwYXlsb2FkOihpbl9wYXlsb2FkID8gJm9faW5fcGF5bG9hZCA6IG5p
bCkgZGF0YWJhc2VJZDooaW5fZGF0YWJhc2VJZCA/ICZvX2luX2RhdGFiYXNlSWQgOiBuaWwpIHNx
bEVycm9yOihpbl9zcWxFcnJvciA/ICZvX2luX3NxbEVycm9yIDogbmlsKSBzY3JlZW5Db2xvcjoo
aW5fc2NyZWVuQ29sb3IgPyAmb19pbl9zY3JlZW5Db2xvci52YWx1ZSgpIDogbmlsKSBhbHRlcm5h
dGVDb2xvcnM6KGluX2FsdGVybmF0ZUNvbG9ycyA/ICZvX2luX2FsdGVybmF0ZUNvbG9ycyA6IG5p
bCkgcHJpbnRDb2xvcjooaW5fcHJpbnRDb2xvciA/ICZvX2luX3ByaW50Q29sb3IudmFsdWUoKSA6
IG5pbCldOwotfQotCi12b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
OjpleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIGNvbnN0IEpTT046
OkFycmF5JiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBpbl9ub3RlcywgZG91YmxlIGlu
X3RpbWVzdGFtcCwgY29uc3QgSlNPTjo6T2JqZWN0JiBpbl92YWx1ZXMsIEpTT046OlZhbHVlIGlu
X3BheWxvYWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBKU09OOjpPYmplY3QmIGluX3NxbEVy
cm9yLCBjb25zdCBTdHJpbmcmIGluX3NjcmVlbkNvbG9yLCBjb25zdCBKU09OOjpBcnJheSYgaW5f
YWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcmIGluX3ByaW50Q29sb3IpCi17Ci0gICAgaWYg
KCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGV4ZWN1dGVOb09wdGlv
bmFsUGFyYW1ldGVyc1dpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazpjb2x1bW5OYW1l
czpub3Rlczp0aW1lc3RhbXA6dmFsdWVzOnBheWxvYWQ6ZGF0YWJhc2VJZDpzcWxFcnJvcjpzY3Jl
ZW5Db2xvcjphbHRlcm5hdGVDb2xvcnM6cHJpbnRDb2xvcjopXSkgewotICAgICAgICBiYWNrZW5k
RGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3Bh
dGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RhdGFiYXNlLmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1l
dGVycycgd2FzIG5vdCBmb3VuZCJfcyk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNl
bmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZCBlcnJv
ckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpT
ZXJ2ZXJFcnJvciwgZXJyb3IpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVu
ZGluZ0Vycm9ycygpOwotICAgIH07Ci0KLSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKE5TQXJy
YXkvKjxOU1N0cmluZz4qLyAqY29sdW1uTmFtZXMsIE5TU3RyaW5nICpub3RlcywgZG91YmxlIHRp
bWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICp2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9i
amVjdCAqcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3Ig
KnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3Is
IE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRh
YmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IgcHJpbnRDb2xvcikgewot
ICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHRPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihj
b2x1bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9S
X1JFUVVJUkVEX1BBUkFNRVRFUihub3RlcywgQCJub3RlcyIpOwotICAgICAgICBUSFJPV19FWENF
UFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUih2YWx1ZXMsIEAidmFsdWVzIik7Ci0gICAgICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHBheWxvYWQsIEAicGF5bG9h
ZCIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihzcWxF
cnJvciwgQCJzcWxFcnJvciIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVE
X1BBUkFNRVRFUihhbHRlcm5hdGVDb2xvcnMsIEAiYWx0ZXJuYXRlQ29sb3JzIik7Ci0gICAgICAg
IHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB0b0pTT05TdHJpbmdBcnJh
eShjb2x1bW5OYW1lcykpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygibm90ZXMi
X3MsIG5vdGVzKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXREb3VibGUoInRpbWVzdGFtcCJf
cywgdGltZXN0YW1wKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInZhbHVlcyJf
cywgW3ZhbHVlcyB0b0pTT05PYmplY3RdKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRWYWx1
ZSgicGF5bG9hZCJfcywgW3BheWxvYWQgdG9KU09OT2JqZWN0XSk7Ci0gICAgICAgIHJlc3VsdE9i
amVjdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgZGF0YWJhc2VJZCk7Ci0gICAgICAgIHJl
c3VsdE9iamVjdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgW3NxbEVycm9yIHRvSlNPTk9iamVj
dF0pOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsIHRv
UHJvdG9jb2xTdHJpbmcoc2NyZWVuQ29sb3IpKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRB
cnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCB0b0pTT05TdHJpbmdBcnJheShhbHRlcm5hdGVDb2xv
cnMpKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsIHRv
UHJvdG9jb2xTdHJpbmcocHJpbnRDb2xvcikpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigp
LT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdE9iamVjdCksIGZhbHNlKTsK
LSAgICB9OwotCi0gICAgTlNBcnJheS8qPE5TU3RyaW5nPiovICpvX2luX2NvbHVtbk5hbWVzID0g
dG9PYmpDU3RyaW5nQXJyYXkoJmluX2NvbHVtbk5hbWVzKTsKLSAgICBOU1N0cmluZyAqb19pbl9u
b3RlcyA9IGluX25vdGVzOwotICAgIGRvdWJsZSBvX2luX3RpbWVzdGFtcCA9IGluX3RpbWVzdGFt
cDsKLSAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9faW5fdmFsdWVzID0gW1tbUldJUHJvdG9j
b2xKU09OT2JqZWN0IGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6JmluX3ZhbHVlc10gYXV0b3Jl
bGVhc2VdOwotICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb19pbl9wYXlsb2FkID0gW1tbUldJ
UHJvdG9jb2xKU09OT2JqZWN0IGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6JmluX3BheWxvYWRd
IGF1dG9yZWxlYXNlXTsKLSAgICBpbnQgb19pbl9kYXRhYmFzZUlkID0gaW5fZGF0YWJhc2VJZDsK
LSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpvX2luX3NxbEVycm9yID0gW1tbVGVzdFBy
b3RvY29sRGF0YWJhc2VFcnJvciBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0OiZpbl9zcWxFcnJv
cl0gYXV0b3JlbGVhc2VdOwotICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFy
eUNvbG9ycz4gb19pbl9zY3JlZW5Db2xvciA9IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9j
b2xEYXRhYmFzZVByaW1hcnlDb2xvcnM+KGluX3NjcmVlbkNvbG9yKTsKLSAgICBpZiAoIW9faW5f
c2NyZWVuQ29sb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9j
b2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgIlBhcmFtZXRlciAnc2Ny
ZWVuQ29sb3InIG9mIG1ldGhvZCAnRGF0YWJhc2UuZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJz
JyBjYW5ub3QgYmUgcHJvY2Vzc2VkIl9zKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBO
U0FycmF5Lyo8TlNTdHJpbmc+Ki8gKm9faW5fYWx0ZXJuYXRlQ29sb3JzID0gdG9PYmpDU3RyaW5n
QXJyYXkoJmluX2FsdGVybmF0ZUNvbG9ycyk7Ci0gICAgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0
YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yPiBvX2luX3ByaW50Q29s
b3IgPSBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRp
b25hbFBhcmFtZXRlcnNQcmludENvbG9yPihpbl9wcmludENvbG9yKTsKLSAgICBpZiAoIW9faW5f
cHJpbnRDb2xvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2Nv
bEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCAiUGFyYW1ldGVyICdwcmlu
dENvbG9yJyBvZiBtZXRob2QgJ0RhdGFiYXNlLmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycycg
Y2Fubm90IGJlIHByb2Nlc3NlZCJfcyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBb
bV9kZWxlZ2F0ZSBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNXaXRoRXJyb3JDYWxsYmFjazpl
cnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2sgY29sdW1uTmFtZXM6
b19pbl9jb2x1bW5OYW1lcyBub3RlczpvX2luX25vdGVzIHRpbWVzdGFtcDpvX2luX3RpbWVzdGFt
cCB2YWx1ZXM6b19pbl92YWx1ZXMgcGF5bG9hZDpvX2luX3BheWxvYWQgZGF0YWJhc2VJZDpvX2lu
X2RhdGFiYXNlSWQgc3FsRXJyb3I6b19pbl9zcWxFcnJvciBzY3JlZW5Db2xvcjpvX2luX3NjcmVl
bkNvbG9yLnZhbHVlKCkgYWx0ZXJuYXRlQ29sb3JzOm9faW5fYWx0ZXJuYXRlQ29sb3JzIHByaW50
Q29sb3I6b19pbl9wcmludENvbG9yLnZhbHVlKCldOwotfQotCi0KLX0gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5t
bQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJl
dHVybi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgotCi1fX2F0dHJp
YnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbiA6IE5TT2JqZWN0Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluLCBz
ZXR0ZXI9c2V0RGF0YWJhc2VIYW5kbGVyOikgaWQ8VGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5I
YW5kbGVyPiBkYXRhYmFzZUhhbmRsZXI7Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xDb25maWd1cmF0aW9uLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZp
Z3VyYXRpb24ubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13
aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1
cmF0aW9uLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW1wb3J0ICJU
ZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9B
dWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2ltcG9ydCA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0KLXVzaW5nIG5hbWVzcGFj
ZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9u
Ci17Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKLSAg
ICBpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+IF9kYXRhYmFzZUhhbmRsZXI7
Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5z
cGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07
Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9s
bGVyKTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19
Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAgIFtfZGF0YWJhc2VIYW5kbGVyIHJlbGVhc2VdOwot
ICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAodm9pZClzZXREYXRhYmFzZUhhbmRsZXI6KGlk
PFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4paGFuZGxlcgotewotICAgIGlmICho
YW5kbGVyID09IF9kYXRhYmFzZUhhbmRsZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIFtfZGF0
YWJhc2VIYW5kbGVyIHJlbGVhc2VdOwotICAgIF9kYXRhYmFzZUhhbmRsZXIgPSBbaGFuZGxlciBy
ZXRhaW5dOwotCi0gICAgYXV0byBhbHRlcm5hdGVEaXNwYXRjaGVyID0gbWFrZVVuaXF1ZTxPYmpD
SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7Ci0gICAgYXV0byBh
bHRlcm5hdGVBZ2VudCA9IG1ha2VVbmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8RGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciwgQWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
cj4+KCJEYXRhYmFzZSJfcywgKl9jb250cm9sbGVyLCBXVEZNb3ZlKGFsdGVybmF0ZURpc3BhdGNo
ZXIpKTsKLSAgICBfY29udHJvbGxlci0+YXBwZW5kRXh0cmFBZ2VudChXVEZNb3ZlKGFsdGVybmF0
ZUFnZW50KSk7Ci19Ci0KLS0gKGlkPFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4p
ZGF0YWJhc2VIYW5kbGVyCi17Ci0gICAgcmV0dXJuIF9kYXRhYmFzZUhhbmRsZXI7Ci19Ci0KLUBl
bmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJu
LXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVz
aW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xF
dmVudERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2Fs
bC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotCi0jaW1wb3J0
IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+Ci0KLQotQGNsYXNzIFRlc3RQ
cm90b2NvbERhdGFiYXNlRXJyb3I7Ci0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQ
cm90b2NvbFBsYXRmb3JtKSB7Ci0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1BbGwsCi0gICAgVGVz
dFByb3RvY29sUGxhdGZvcm1HZW5lcmljLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TLAot
ICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1MsCi19OwotCi0KLXR5cGVkZWYgTlNfRU5VTShO
U0ludGVnZXIsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycykgewotICAgIFRlc3RQ
cm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc1JlZCwKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFz
ZVByaW1hcnlDb2xvcnNHcmVlbiwKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xv
cnNCbHVlLAotfTsKLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGF0
YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvcikgewotICAgIFRlc3RQ
cm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JDeWFu
LAotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1By
aW50Q29sb3JNYWdlbnRhLAotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlv
bmFsUGFyYW1ldGVyc1ByaW50Q29sb3JZZWxsb3csCi0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VF
eGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckJsYWNrLAotfTsKLQotdHlwZWRl
ZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9u
YWxQYXJhbWV0ZXJzUHJpbnRDb2xvcikgewotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0
ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JDeWFuLAotICAgIFRlc3RQcm90b2NvbERh
dGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JNYWdlbnRhLAotICAg
IFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29s
b3JZZWxsb3csCi0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJh
bWV0ZXJzUHJpbnRDb2xvckJsYWNrLAotfTsKLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwg
VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9y
KSB7Ci0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQ
cmludENvbG9yQ3lhbiwKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFs
UGFyYW1ldGVyc1ByaW50Q29sb3JNYWdlbnRhLAotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhl
Y3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvclllbGxvdywKLSAgICBUZXN0UHJvdG9j
b2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JCbGFjaywKLX07
Ci0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0
ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvcikgewotICAgIFRlc3RQcm90b2NvbERhdGFi
YXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckN5YW4sCi0gICAgVGVzdFBy
b3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yTWFnZW50
YSwKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1By
aW50Q29sb3JZZWxsb3csCi0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25h
bFBhcmFtZXRlcnNQcmludENvbG9yQmxhY2ssCi19OwotCi0KLV9fYXR0cmlidXRlX18oKHZpc2li
aWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9y
IDogUldJUHJvdG9jb2xKU09OT2JqZWN0Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2Fk
OihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKLS0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2Jq
ZWN0OwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdl
IGNvZGU6KGludCljb2RlOwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNv
cHkpIE5TU3RyaW5nICptZXNzYWdlOwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9t
aWMsIGFzc2lnbikgaW50IGNvZGU7Ci1AZW5kCi0KLUBwcm90b2NvbCBUZXN0UHJvdG9jb2xEYXRh
YmFzZURvbWFpbkhhbmRsZXIgPE5TT2JqZWN0PgotQG9wdGlvbmFsCi0tICh2b2lkKWV4ZWN1dGVB
bGxPcHRpb25hbFBhcmFtZXRlcnNXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAq
ZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKE5TQXJyYXkvKjxO
U1N0cmluZz4qLyAqKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqKm5vdGVzLCBkb3VibGUgKnRpbWVz
dGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmpl
Y3QgKipwYXlsb2FkLCBpbnQgKmRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3Ig
KipzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzICpzY3JlZW5Db2xv
ciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICoqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xE
YXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yICpwcmludENvbG9y
KSlzdWNjZXNzQ2FsbGJhY2sgY29sdW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKilj
b2x1bW5OYW1lcyBub3RlczooTlNTdHJpbmcgKiopbm90ZXMgdGltZXN0YW1wOihkb3VibGUgKil0
aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKiopdmFsdWVzIHBheWxvYWQ6
KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKilwYXlsb2FkIGRhdGFiYXNlSWQ6KGludCAqKWRhdGFi
YXNlSWQgc3FsRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKiopc3FsRXJyb3Igc2Ny
ZWVuQ29sb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqKXNjcmVlbkNvbG9y
IGFsdGVybmF0ZUNvbG9yczooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKWFsdGVybmF0ZUNvbG9y
cyBwcmludENvbG9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFt
ZXRlcnNQcmludENvbG9yICopcHJpbnRDb2xvcjsKLS0gKHZvaWQpZXhlY3V0ZU5vT3B0aW9uYWxQ
YXJhbWV0ZXJzV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJv
ckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKShOU0FycmF5Lyo8TlNTdHJpbmc+Ki8g
KmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJXSVByb3Rv
Y29sSlNPTk9iamVjdCAqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnBheWxvYWQsIGlu
dCBkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpzcWxFcnJvciwgVGVzdFBy
b3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzIHNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJp
bmc+Ki8gKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRp
b25hbFBhcmFtZXRlcnNQcmludENvbG9yIHByaW50Q29sb3IpKXN1Y2Nlc3NDYWxsYmFjayBjb2x1
bW5OYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMgbm90ZXM6KE5TU3Ry
aW5nICopbm90ZXMgdGltZXN0YW1wOihkb3VibGUpdGltZXN0YW1wIHZhbHVlczooUldJUHJvdG9j
b2xKU09OT2JqZWN0ICopdmFsdWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBh
eWxvYWQgZGF0YWJhc2VJZDooaW50KWRhdGFiYXNlSWQgc3FsRXJyb3I6KFRlc3RQcm90b2NvbERh
dGFiYXNlRXJyb3IgKilzcWxFcnJvciBzY3JlZW5Db2xvcjooVGVzdFByb3RvY29sRGF0YWJhc2VQ
cmltYXJ5Q29sb3JzKXNjcmVlbkNvbG9yIGFsdGVybmF0ZUNvbG9yczooTlNBcnJheS8qPE5TU3Ry
aW5nPiovICopYWx0ZXJuYXRlQ29sb3JzIHByaW50Q29sb3I6KFRlc3RQcm90b2NvbERhdGFiYXNl
RXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvcilwcmludENvbG9yOwotQGVuZAot
Ci0KLQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxp
dHlPYmplY3RzLmg+Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJU
ZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgi
Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIu
aD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLQotCi0KLSMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sSW50ZXJuYWwuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13
aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNp
bXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KLQotbmFt
ZXNwYWNlIEluc3BlY3RvciB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KLU9w
dGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFs
dWUpOwotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sUGxhdGZv
cm0gdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQ
bGF0Zm9ybUFsbDoKLSAgICAgICAgcmV0dXJuICJhbGwiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9j
b2xQbGF0Zm9ybUdlbmVyaWM6Ci0gICAgICAgIHJldHVybiAiZ2VuZXJpYyJfczsKLSAgICBjYXNl
IFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOgotICAgICAgICByZXR1cm4gImlvcyJfczsKLSAgICBj
YXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M6Ci0gICAgICAgIHJldHVybiAibWFjb3MiX3M7
Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sUGxh
dGZvcm0+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlm
ICh2YWx1ZSA9PSAiYWxsIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxs
OwotICAgIGlmICh2YWx1ZSA9PSAiZ2VuZXJpYyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9j
b2xQbGF0Zm9ybUdlbmVyaWM7Ci0gICAgaWYgKHZhbHVlID09ICJpb3MiKQotICAgICAgICByZXR1
cm4gVGVzdFByb3RvY29sUGxhdGZvcm1JT1M7Ci0gICAgaWYgKHZhbHVlID09ICJtYWNvcyIpCi0g
ICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOwotICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7Ci19Ci0KLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90
b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsK
LSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc1JlZDoKLSAgICAgICAg
cmV0dXJuICJyZWQiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xv
cnNHcmVlbjoKLSAgICAgICAgcmV0dXJuICJncmVlbiJfczsKLSAgICBjYXNlIFRlc3RQcm90b2Nv
bERhdGFiYXNlUHJpbWFyeUNvbG9yc0JsdWU6Ci0gICAgICAgIHJldHVybiAiYmx1ZSJfczsKLSAg
ICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xEYXRhYmFz
ZVByaW1hcnlDb2xvcnM+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQot
ewotICAgIGlmICh2YWx1ZSA9PSAicmVkIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERh
dGFiYXNlUHJpbWFyeUNvbG9yc1JlZDsKLSAgICBpZiAodmFsdWUgPT0gImdyZWVuIikKLSAgICAg
ICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc0dyZWVuOwotICAgIGlm
ICh2YWx1ZSA9PSAiYmx1ZSIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZVBy
aW1hcnlDb2xvcnNCbHVlOwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLWlubGluZSBT
dHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRp
b25hbFBhcmFtZXRlcnNQcmludENvbG9yIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewot
ICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJz
UHJpbnRDb2xvckN5YW46Ci0gICAgICAgIHJldHVybiAiY3lhbiJfczsKLSAgICBjYXNlIFRlc3RQ
cm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JNYWdl
bnRhOgotICAgICAgICByZXR1cm4gIm1hZ2VudGEiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xE
YXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yWWVsbG93OgotICAg
ICAgICByZXR1cm4gInllbGxvdyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhl
Y3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JCbGFjazoKLSAgICAgICAgcmV0dXJu
ICJibGFjayJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0
UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yPiBm
cm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUg
PT0gImN5YW4iKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxs
T3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckN5YW47Ci0gICAgaWYgKHZhbHVlID09ICJtYWdl
bnRhIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlv
bmFsUGFyYW1ldGVyc1ByaW50Q29sb3JNYWdlbnRhOwotICAgIGlmICh2YWx1ZSA9PSAieWVsbG93
IikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFs
UGFyYW1ldGVyc1ByaW50Q29sb3JZZWxsb3c7Ci0gICAgaWYgKHZhbHVlID09ICJibGFjayIpCi0g
ICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFt
ZXRlcnNQcmludENvbG9yQmxhY2s7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotaW5s
aW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFs
bE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IgdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVl
KSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFt
ZXRlcnNQcmludENvbG9yQ3lhbjoKLSAgICAgICAgcmV0dXJuICJjeWFuIl9zOwotICAgIGNhc2Ug
VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xv
ck1hZ2VudGE6Ci0gICAgICAgIHJldHVybiAibWFnZW50YSJfczsKLSAgICBjYXNlIFRlc3RQcm90
b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JZZWxsb3c6
Ci0gICAgICAgIHJldHVybiAieWVsbG93Il9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJh
c2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckJsYWNrOgotICAgICAgICBy
ZXR1cm4gImJsYWNrIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFs
PFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29s
b3I+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2
YWx1ZSA9PSAiY3lhbiIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQ3lhbjsKLSAgICBpZiAodmFsdWUgPT0g
Im1hZ2VudGEiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxs
T3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvck1hZ2VudGE7Ci0gICAgaWYgKHZhbHVlID09ICJ5
ZWxsb3ciKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0
aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvclllbGxvdzsKLSAgICBpZiAodmFsdWUgPT0gImJsYWNr
IikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFs
UGFyYW1ldGVyc1ByaW50Q29sb3JCbGFjazsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQot
Ci1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sRGF0YWJhc2VFeGVj
dXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yIHZhbHVlKQotewotICAgIHN3aXRjaCh2
YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBh
cmFtZXRlcnNQcmludENvbG9yQ3lhbjoKLSAgICAgICAgcmV0dXJuICJjeWFuIl9zOwotICAgIGNh
c2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENv
bG9yTWFnZW50YToKLSAgICAgICAgcmV0dXJuICJtYWdlbnRhIl9zOwotICAgIGNhc2UgVGVzdFBy
b3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yWWVsbG93
OgotICAgICAgICByZXR1cm4gInllbGxvdyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFi
YXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckJsYWNrOgotICAgICAgICBy
ZXR1cm4gImJsYWNrIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFs
PFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xv
cj4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZh
bHVlID09ICJjeWFuIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0
ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckN5YW47Ci0gICAgaWYgKHZhbHVlID09ICJt
YWdlbnRhIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0
aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvck1hZ2VudGE7Ci0gICAgaWYgKHZhbHVlID09ICJ5ZWxs
b3ciKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25h
bFBhcmFtZXRlcnNQcmludENvbG9yWWVsbG93OwotICAgIGlmICh2YWx1ZSA9PSAiYmxhY2siKQot
ICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFt
ZXRlcnNQcmludENvbG9yQmxhY2s7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotaW5s
aW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5v
T3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvciB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUp
IHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0
ZXJzUHJpbnRDb2xvckN5YW46Ci0gICAgICAgIHJldHVybiAiY3lhbiJfczsKLSAgICBjYXNlIFRl
c3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvck1h
Z2VudGE6Ci0gICAgICAgIHJldHVybiAibWFnZW50YSJfczsKLSAgICBjYXNlIFRlc3RQcm90b2Nv
bERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvclllbGxvdzoKLSAg
ICAgICAgcmV0dXJuICJ5ZWxsb3ciX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JCbGFjazoKLSAgICAgICAgcmV0dXJu
ICJibGFjayJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0
UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3I+IGZy
b21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9
PSAiY3lhbiIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09w
dGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JDeWFuOwotICAgIGlmICh2YWx1ZSA9PSAibWFnZW50
YSIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFs
UGFyYW1ldGVyc1ByaW50Q29sb3JNYWdlbnRhOwotICAgIGlmICh2YWx1ZSA9PSAieWVsbG93IikK
LSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJh
bWV0ZXJzUHJpbnRDb2xvclllbGxvdzsKLSAgICBpZiAodmFsdWUgPT0gImJsYWNrIikKLSAgICAg
ICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJz
UHJpbnRDb2xvckJsYWNrOwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0K
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFs
LWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIK
LQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFy
c2VyLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0
ZS5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW50ZXJmYWNlIFRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucyAoRGF0YWJhc2VEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlRGF0
YWJhc2VJZDooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0r
ICh2b2lkKV9wYXJzZVByaW1hcnlDb2xvcnM6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXls
b2FkOihpZClwYXlsb2FkOwotKyAodm9pZClfcGFyc2VDb2xvckxpc3Q6KE5TQXJyYXkvKjxOU1N0
cmluZz4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLSsgKHZvaWQpX3Bh
cnNlRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKiopb3V0VmFsdWUgZnJvbVBheWxv
YWQ6KGlkKXBheWxvYWQ7Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucyAoRGF0YWJhc2VEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlRGF0YWJhc2VJ
ZDooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBU
SFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU051bWJlciBjbGFzc10pOwot
ICAgICpvdXRWYWx1ZSA9IChOU051bWJlciAqKXBheWxvYWQ7Ci19Ci0KLSsgKHZvaWQpX3BhcnNl
UHJpbWFyeUNvbG9yczooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxv
YWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmlu
ZyBjbGFzc10pOwotICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9y
cz4gcmVzdWx0ID0gSW5zcGVjdG9yOjpmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sRGF0
YWJhc2VQcmltYXJ5Q29sb3JzPihwYXlsb2FkKTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JB
RF9FTlVNX1ZBTFVFKHJlc3VsdCwgQCJQcmltYXJ5Q29sb3JzIik7Ci0gICAgKm91dFZhbHVlID0g
QChyZXN1bHQudmFsdWUoKSk7Ci19Ci0KLSsgKHZvaWQpX3BhcnNlQ29sb3JMaXN0OihOU0FycmF5
Lyo8TlNTdHJpbmc+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAg
ICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0FycmF5Lyo8TlNTdHJp
bmc+Ki8gY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSAoTlNBcnJheS8qPE5TU3RyaW5nPiovICop
cGF5bG9hZDsKLX0KLQotKyAodm9pZClfcGFyc2VFcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VF
cnJvciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOwotICAg
ICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBhbGxvY10gaW5pdFdpdGhQ
YXlsb2FkOnBheWxvYWRdOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVz
Lm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRp
b25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQot
I2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDxXZWJJbnNw
ZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotI2ltcG9ydCA8d3RmL0Fzc2Vy
dGlvbnMuaD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJ
bnNwZWN0b3I7Ci0KLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IK
LQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8
TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5p
dF0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFV
SVJFRF9QUk9QRVJUWShwYXlsb2FkW0AibWVzc2FnZSJdLCBAIm1lc3NhZ2UiKTsKLSAgICBzZWxm
Lm1lc3NhZ2UgPSBwYXlsb2FkW0AibWVzc2FnZSJdOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiY29kZSJdLCBAImNvZGUiKTsKLSAgICBzZWxm
LmNvZGUgPSBbcGF5bG9hZFtAImNvZGUiXSBpbnRlZ2VyVmFsdWVdOwotCi0gICAgcmV0dXJuIHNl
bGY7Ci19Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9j
b2xKU09OT2JqZWN0ICopb2JqZWN0Ci17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0
aEpTT05PYmplY3Q6W29iamVjdCB0b0pTT05PYmplY3RdLmdldCgpXSkpCi0gICAgICAgIHJldHVy
biBuaWw7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
TWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlIGNvZGU6KGludCljb2RlCi17Ci0gICAgaWYgKCEo
c2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBUSFJPV19F
WENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKG1lc3NhZ2UsIEAibWVzc2FnZSIpOwotCi0g
ICAgc2VsZi5tZXNzYWdlID0gbWVzc2FnZTsKLSAgICBzZWxmLmNvZGUgPSBjb2RlOwotCi0gICAg
cmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpc2V0TWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdl
Ci17Ci0gICAgW3N1cGVyIHNldFN0cmluZzptZXNzYWdlIGZvcktleTpAIm1lc3NhZ2UiXTsKLX0K
LQotLSAoTlNTdHJpbmcgKiltZXNzYWdlCi17Ci0gICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JL
ZXk6QCJtZXNzYWdlIl07Ci19Ci0KLS0gKHZvaWQpc2V0Q29kZTooaW50KWNvZGUKLXsKLSAgICBb
c3VwZXIgc2V0SW50ZWdlcjpjb2RlIGZvcktleTpAImNvZGUiXTsKLX0KLQotLSAoaW50KWNvZGUK
LXsKLSAgICByZXR1cm4gW3N1cGVyIGludGVnZXJGb3JLZXk6QCJjb2RlIl07Ci19Ci0KLUBlbmQK
LQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3Rl
ZC9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2RlZmlu
aXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24tcmVzdWx0CmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBkNGMwZmUzZmUzYzZiYmRjMTAzNjJkMWUwYzM5Zjk4YzdhYzM2ZTVkLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2RlZmluaXRp
b25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24tcmVzdWx0CisrKyAvZGV2L251bGwKQEAgLTEsODcw
ICswLDAgQEAKLSMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0
Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0jIyMg
RW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi0jaW5jbHVkZSAiVGVzdFBy
b3RvY29sVHlwZXMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5k
Um91dGVyLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihS
ZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRj
aGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQotICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNr
ZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7
IH0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNw
YXRjaGVyOwotfTsKLQotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSNlbmRpZiAv
LyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSMjIyBFbmQgRmlsZTog
VGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
QmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBk
ZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3Rv
Y29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFj
ZSBJbnNwZWN0b3IgewotCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQotCi0KLX0gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJz
LmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0u
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRl
IDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQotI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hl
cnMuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLX0gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3Bw
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9u
Y2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDx3dGYvSlNP
TlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKLQotY2xhc3MgRnJvbnRlbmRSb3V0ZXI7Ci0KLX0gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi19IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLQot
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi1uYW1l
c3BhY2UgUHJvdG9jb2wgewotCi0KLQotCi0KLQotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9j
b2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bE9iamVjdHMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0
Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0KLSNp
bmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0K
LW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotfSAv
LyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFp
blB0ci5oPgotCi0KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJz
LmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBs
YXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hl
cnMuaCIKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW5jbHVkZSAiVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4K
LQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0j
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0
b3IvVGVzdFByb3RvY29sLmg+Ci0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0
IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKLUBl
bmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbi5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5o
IgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jaW1wb3J0IDxK
YXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgotI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgotCi11
c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2Nv
bnRyb2xsZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21l
bnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3Vw
ZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VS
VChjb250cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJu
IHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0K
LQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQot
Ci0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3Jt
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9y
dCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLmgiCi0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yOwotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRj
aGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPEZvdW5k
YXRpb24vRm91bmRhdGlvbi5oPgotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xK
U09OT2JqZWN0Lmg+Ci0KLQotCi0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90
b2NvbFBsYXRmb3JtKSB7Ci0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1BbGwsCi0gICAgVGVzdFBy
b3RvY29sUGxhdGZvcm1HZW5lcmljLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TLAotICAg
IFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1MsCi19OwotCi0KLQotCi0KLQotCi0KLQotCi0jaW1w
b3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbEludGVybmFsLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZp
bml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVz
dFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1
Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMu
aD4KLQotCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFBy
b3RvY29sLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNp
b25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPYmpD
RW51bVR5cGU+Ci1PcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25z
dCBTdHJpbmcmIHZhbHVlKTsKLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQ
cm90b2NvbFBsYXRmb3JtIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2Ug
VGVzdFByb3RvY29sUGxhdGZvcm1BbGw6Ci0gICAgICAgIHJldHVybiAiYWxsIl9zOwotICAgIGNh
c2UgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOgotICAgICAgICByZXR1cm4gImdlbmVyaWMi
X3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzoKLSAgICAgICAgcmV0dXJuICJp
b3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOgotICAgICAgICByZXR1
cm4gIm1hY29zIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRl
c3RQcm90b2NvbFBsYXRmb3JtPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1
ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gImFsbCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9j
b2xQbGF0Zm9ybUFsbDsKLSAgICBpZiAodmFsdWUgPT0gImdlbmVyaWMiKQotICAgICAgICByZXR1
cm4gVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOwotICAgIGlmICh2YWx1ZSA9PSAiaW9zIikK
LSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOwotICAgIGlmICh2YWx1ZSA9
PSAibWFjb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzsKLSAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQot
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0
ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJv
dG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwot
Ci0KLQotCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0K
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJv
dG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMu
aCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+
Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4K
LQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9kb21haW4tZGVidWdnYWJsZVR5cGVzLmpz
b24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvZXhwZWN0ZWQvZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uLXJlc3VsdApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjViNTkxN2FhMGI0MTFjMjk5NzI5ZGYxODU3Mzdk
ZTZlYmM2NzM1ZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9l
eHBlY3RlZC9kb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24tcmVzdWx0CisrKyAvZGV2L251bGwK
QEAgLTEsMTA2MyArMCwwIEBACi0jIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1h
bmRzLmpzCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLWRlYnVnZ2Fi
bGVUeXBlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LS8vIERvbWFpbgotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiRG9tYWluIiwgbnVs
bCk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiRG9tYWluLkNvbW1hbmQiLCBu
dWxsLCBbXSwgW10pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckV2ZW50KCJEb21haW4uRXZl
bnQiLCBudWxsLCBbXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluRGlzcGF0Y2hl
ciA9IEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEaXNwYXRjaGVyLmJpbmQoSW5zcGVjdG9yQmFj
a2VuZCwgIkRvbWFpbiIpOwotSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiRG9tYWlu
IiwgWyJ3ZWItcGFnZSJdKTsKLSMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRz
LmpzCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJsZVR5cGVz
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdt
YSBvbmNlCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQot
I2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xh
c3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZvaWQgc2V0QmFj
a2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsg
bV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KLSAgICBCYWNrZW5k
RGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmRE
aXNwYXRjaGVyLmdldCgpOyB9Ci1wcml2YXRlOgotICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hl
cj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKLX07Ci0KLQotY2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFj
a2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVi
bGljOgotICAgIHZpcnR1YWwgfkFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKCkgeyB9
Ci0gICAgdmlydHVhbCB2b2lkIENvbW1hbmQobG9uZyBjYWxsSWQpID0gMDsKLX07Ci0KLX0gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgotCi0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCi0jIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0
Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25j
ZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10eXBlZGVmIFN0cmluZyBF
cnJvclN0cmluZzsKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQotY2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXI7Ci0jZW5kaWYgLy8gRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0KLWNsYXNzIERvbWFpbkJhY2tl
bmREaXNwYXRjaGVySGFuZGxlciB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIENvbW1hbmQo
RXJyb3JTdHJpbmcmKSA9IDA7Ci1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB+RG9tYWluQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyKCk7Ci19OwotCi1jbGFzcyBEb21haW5CYWNrZW5kRGlzcGF0Y2hl
ciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6
Ci0gICAgc3RhdGljIFJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmRE
aXNwYXRjaGVyJiwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdm9pZCBk
aXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpP
YmplY3Q+JiYgbWVzc2FnZSkgZmluYWw7Ci1wcml2YXRlOgotICAgIHZvaWQgQ29tbWFuZChsb25n
IHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKLSNpZiBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLXB1YmxpYzoKLSAgICB2b2lkIHNl
dEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIqIGFs
dGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlz
cGF0Y2hlcjsgfQotcHJpdmF0ZToKLSAgICBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hl
ciogbV9hbHRlcm5hdGVEaXNwYXRjaGVyIHsgbnVsbHB0ciB9OwotI2VuZGlmCi1wcml2YXRlOgot
ICAgIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiwgRG9tYWluQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyKiBtX2FnZW50IHsgbnVsbHB0ciB9OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
Ci0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBkb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRl
c3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNs
dWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSNpbmNsdWRl
ICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNl
IEluc3BlY3RvciB7Ci0KLURvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6fkRvbWFpbkJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQotCi1SZWY8RG9tYWluQmFja2VuZERpc3BhdGNo
ZXI+IERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImIGJh
Y2tlbmREaXNwYXRjaGVyLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQot
ewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKGJhY2tl
bmREaXNwYXRjaGVyLCBhZ2VudCkpOwotfQotCi1Eb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6RG9t
YWluQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVy
LCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQotICAgIDogU3VwcGxlbWVu
dGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCi0gICAgLCBtX2FnZW50KGFn
ZW50KQotewotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRv
bWFpbigiRG9tYWluIl9zLCB0aGlzKTsKLX0KLQotdm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hl
cjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNP
Tjo6T2JqZWN0PiYmIG1lc3NhZ2UpCi17Ci0gICAgUmVmPERvbWFpbkJhY2tlbmREaXNwYXRjaGVy
PiBwcm90ZWN0KCp0aGlzKTsKLQotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7
Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRlcnMpOwotCi0gICAg
aWYgKG1ldGhvZCA9PSAiQ29tbWFuZCIpCi0gICAgICAgIENvbW1hbmQocmVxdWVzdElkLCBXVEZN
b3ZlKHBhcmFtZXRlcnMpKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAi
J0RvbWFpbi4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOwotfQotCi12b2lkIERvbWFp
bkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6
T2JqZWN0PiYmKQotewotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQotICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVE
aXNwYXRjaGVyLT5Db21tYW5kKHJlcXVlc3RJZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0j
ZW5kaWYKLQotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJl
c3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgbV9hZ2VudC0+Q29tbWFuZChlcnJv
cik7Ci0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAg
ICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3Io
QmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0
Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEg
b25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPHd0Zi9K
U09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFj
ZSBJbnNwZWN0b3IgewotCi1jbGFzcyBGcm9udGVuZFJvdXRlcjsKLQotY2xhc3MgRG9tYWluRnJv
bnRlbmREaXNwYXRjaGVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoK
LSAgICBEb21haW5Gcm9udGVuZERpc3BhdGNoZXIoRnJvbnRlbmRSb3V0ZXImIGZyb250ZW5kUm91
dGVyKSA6IG1fZnJvbnRlbmRSb3V0ZXIoZnJvbnRlbmRSb3V0ZXIpIHsgfQotICAgIHZvaWQgRXZl
bnQoKTsKLXByaXZhdGU6Ci0gICAgRnJvbnRlbmRSb3V0ZXImIG1fZnJvbnRlbmRSb3V0ZXI7Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5k
RGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMu
Y3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLWRlYnVnZ2FibGVU
eXBlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgot
Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi12
b2lkIERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcjo6RXZlbnQoKQotewotICAgIFJlZjxKU09OOjpP
YmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVz
c2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOwotCi0gICAgbV9m
cm9udGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5k
RGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJsZVR5cGVz
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdt
YSBvbmNlCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVz
Lmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7
Ci0KLQotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotCi0KLQotCi0KLQotfSAvLyBuYW1l
c3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbE9iamVjdHMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2Jq
ZWN0cy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdn
YWJsZVR5cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIK
LQotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLQot
Ci19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQot
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5Q
dHIuaD4KLQotQHByb3RvY29sIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI7Ci0KLW5h
bWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLWNsYXNzIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5k
RGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hl
ciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgT2JqQ0luc3Bl
Y3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhh
bmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KLSAgICB2b2lkIENvbW1h
bmQobG9uZyByZXF1ZXN0SWQpIGZpbmFsOwotcHJpdmF0ZToKLSAgICBSZXRhaW5QdHI8aWQ8VGVz
dFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7Ci19OwotCi19IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlz
cGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNo
ZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLWRlYnVnZ2Fi
bGVUeXBlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNo
ZXJzLmgiCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2luY2x1ZGUgIlRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+
Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi12b2lkIE9iakNJbnNwZWN0b3JEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVlc3RJZCkKLXsKLSAgICBpZiAoIVttX2Rl
bGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoQ29tbWFuZFdpdGhFcnJvckNhbGxi
YWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5y
ZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5v
dEZvdW5kLCAiJ0RvbWFpbi5Db21tYW5kJyB3YXMgbm90IGZvdW5kIl9zKTsKLSAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwg
QmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7Ci0gICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgfTsKLQotICAgIGlkIHN1Y2Nl
c3NDYWxsYmFjayA9IF57Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25z
ZShyZXF1ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKLSAgICB9OwotCi0g
ICAgW21fZGVsZWdhdGUgQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3Vj
Y2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107Ci19Ci0KLQotfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1t
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8V2ViSW5z
cGVjdG9yL1Rlc3RQcm90b2NvbC5oPgotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVm
YXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0
Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluLCBzZXR0ZXI9c2V0RG9tYWluSGFuZGxlcjop
IGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IGRvbWFpbkhhbmRsZXI7Ci1AcHJv
cGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50
RGlzcGF0Y2hlciAqZG9tYWluRXZlbnREaXNwYXRjaGVyOwotQGVuZAotCi0KLSMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xDb25maWd1cmF0aW9uLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
ZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKLQot
I2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJh
Y2tlbmREaXNwYXRjaGVycy5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlz
cGF0Y2hhYmxlQWdlbnQuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5z
cGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0
ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsK
LQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KLXsKLSAgICBBdWdt
ZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotICAgIGlkPFRlc3RQcm90
b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IF9kb21haW5IYW5kbGVyOwotICAgIFRlc3RQcm90b2Nv
bERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqX2RvbWFpbkV2ZW50RGlzcGF0Y2hlcjsKLX0K
LQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0
b3JDb250cm9sbGVyKiljb250cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAg
ICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIp
OwotICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQot
LSAodm9pZClkZWFsbG9jCi17Ci0gICAgW19kb21haW5IYW5kbGVyIHJlbGVhc2VdOwotICAgIFtf
ZG9tYWluRXZlbnREaXNwYXRjaGVyIHJlbGVhc2VdOwotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0K
LQotLSAodm9pZClzZXREb21haW5IYW5kbGVyOihpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5I
YW5kbGVyPiloYW5kbGVyCi17Ci0gICAgaWYgKGhhbmRsZXIgPT0gX2RvbWFpbkhhbmRsZXIpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIFtfZG9tYWluSGFuZGxlciByZWxlYXNlXTsKLSAgICBfZG9t
YWluSGFuZGxlciA9IFtoYW5kbGVyIHJldGFpbl07Ci0KLSAgICBhdXRvIGFsdGVybmF0ZURpc3Bh
dGNoZXIgPSBtYWtlVW5pcXVlPE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4o
aGFuZGxlcik7Ci0gICAgYXV0byBhbHRlcm5hdGVBZ2VudCA9IG1ha2VVbmlxdWU8QWx0ZXJuYXRl
RGlzcGF0Y2hhYmxlQWdlbnQ8RG9tYWluQmFja2VuZERpc3BhdGNoZXIsIEFsdGVybmF0ZURvbWFp
bkJhY2tlbmREaXNwYXRjaGVyPj4oIkRvbWFpbiJfcywgKl9jb250cm9sbGVyLCBXVEZNb3ZlKGFs
dGVybmF0ZURpc3BhdGNoZXIpKTsKLSAgICBfY29udHJvbGxlci0+YXBwZW5kRXh0cmFBZ2VudChX
VEZNb3ZlKGFsdGVybmF0ZUFnZW50KSk7Ci19Ci0KLS0gKGlkPFRlc3RQcm90b2NvbERvbWFpbkRv
bWFpbkhhbmRsZXI+KWRvbWFpbkhhbmRsZXIKLXsKLSAgICByZXR1cm4gX2RvbWFpbkhhbmRsZXI7
Ci19Ci0KLS0gKFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqKWRvbWFp
bkV2ZW50RGlzcGF0Y2hlcgotewotICAgIGlmICghX2RvbWFpbkV2ZW50RGlzcGF0Y2hlcikKLSAg
ICAgICAgX2RvbWFpbkV2ZW50RGlzcGF0Y2hlciA9IFtbVGVzdFByb3RvY29sRG9tYWluRG9tYWlu
RXZlbnREaXNwYXRjaGVyIGFsbG9jXSBpbml0V2l0aENvbnRyb2xsZXI6X2NvbnRyb2xsZXJdOwot
ICAgIHJldHVybiBfZG9tYWluRXZlbnREaXNwYXRjaGVyOwotfQotCi1AZW5kCi0KLQotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgi
Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8d3Rm
L0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGltcGxlbWVu
dGF0aW9uIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlcgotewotICAgIEF1
Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci19Ci0KLS0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxl
ciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxm
KQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBfY29u
dHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpRXZl
bnQKLXsKLSAgICBjb25zdCBGcm9udGVuZFJvdXRlciYgcm91dGVyID0gX2NvbnRyb2xsZXItPmZy
b250ZW5kUm91dGVyKCk7Ci0KLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpT
T046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9k
Il9zLCAiRG9tYWluLkV2ZW50Il9zKTsKLSAgICByb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdl
LT50b0pTT05TdHJpbmcoKSk7Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5o
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLWRlYnVnZ2FibGVUeXBl
cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBv
cnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJ
UHJvdG9jb2xKU09OT2JqZWN0Lmg+Ci0KLQotCi0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIs
IFRlc3RQcm90b2NvbFBsYXRmb3JtKSB7Ci0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1BbGwsCi0g
ICAgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3Jt
SU9TLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1MsCi19OwotCi0KLQotCi0KLUBwcm90
b2NvbCBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyIDxOU09iamVjdD4KLUBvcHRpb25h
bAotLSAodm9pZClDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVy
cm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKSh2b2lkKSlzdWNjZXNz
Q2FsbGJhY2s7Ci1AZW5kCi0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0Iikp
KQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgOiBO
U09iamVjdAotLSAodm9pZClFdmVudDsKLUBlbmQKLQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3Iv
UldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+Ci0KLSMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJsZVR5cGVz
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9y
dCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0
ZS5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9s
bGVyLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi1AaW50ZXJmYWNlIFRlc3RQcm90
b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAoUHJpdmF0ZSkKLS0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aENvbnRyb2xsZXI6KEluc3BlY3Rvcjo6QXVnbWVudGFibGVJbnNwZWN0b3JDb250
cm9sbGVyKiljb250cm9sbGVyOwotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
SW50ZXJuYWwuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
LmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJsZVR5
cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2lt
cG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xB
cnJheUNvbnZlcnNpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBPYmpDRW51bVR5cGU+Ci1PcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2Nv
bFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29s
U3RyaW5nKFRlc3RQcm90b2NvbFBsYXRmb3JtIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkg
ewotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1BbGw6Ci0gICAgICAgIHJldHVybiAiYWxs
Il9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOgotICAgICAgICByZXR1
cm4gImdlbmVyaWMiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzoKLSAgICAg
ICAgcmV0dXJuICJpb3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOgot
ICAgICAgICByZXR1cm4gIm1hY29zIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5l
IE9wdGlvbmFsPFRlc3RQcm90b2NvbFBsYXRmb3JtPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gImFsbCIpCi0gICAgICAgIHJldHVy
biBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDsKLSAgICBpZiAodmFsdWUgPT0gImdlbmVyaWMiKQot
ICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOwotICAgIGlmICh2YWx1
ZSA9PSAiaW9zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOwotICAg
IGlmICh2YWx1ZSA9PSAibWFjb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZv
cm1NYWNPUzsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi19IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAot
Ci0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNp
bXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9S
V0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0
b3I7Ci0KLQotCi0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgi
Ci0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgot
I2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0K
LXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmct
ZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZG9tYWluLXRhcmdldFR5
cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tcmVzdWx0CmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBkMzBmMjRiNWMzNTI4OTY5OTQ1Y2U3ZmUxNzhiMDIxMmI1ZTQ4
ZDUxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVk
L2RvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJl
c3VsdAorKysgL2Rldi9udWxsCkBAIC0xLDEwNjMgKzAsMCBAQAotIyMjIEJlZ2luIEZpbGU6IElu
c3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLS8vIERvbWFpbgot
SW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiRG9tYWluIiwgbnVsbCk7Ci1JbnNwZWN0
b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiRG9tYWluLkNvbW1hbmQiLCBbInBhZ2UiLCAid29y
a2VyIl0sIFtdLCBbXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnQoIkRvbWFpbi5F
dmVudCIsIG51bGwsIFtdKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW5EaXNwYXRj
aGVyID0gSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRpc3BhdGNoZXIuYmluZChJbnNwZWN0b3JC
YWNrZW5kLCAiRG9tYWluIik7Ci1JbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJEb21h
aW4iLCBbInBhZ2UiXSk7Ci0jIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5q
cwotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hp
bmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCi0j
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotCi1uYW1l
c3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewot
cHVibGljOgotICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNw
YXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlz
cGF0Y2hlcik7IH0KLSAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBj
b25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Ci1wcml2YXRlOgotICAg
IFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKLX07Ci0KLQot
Y2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRl
QmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZpcnR1YWwgfkFsdGVybmF0ZURvbWFp
bkJhY2tlbmREaXNwYXRjaGVyKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIENvbW1hbmQobG9uZyBj
YWxsSWQpID0gMDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jZW5kaWYgLy8g
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jIyMgRW5kIEZpbGU6IFRl
c3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJh
Y2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9t
YWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNp
bmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXR5cGVkZWYgU3RyaW5nIEVycm9yU3Ry
aW5nOwotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi1jbGFz
cyBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjsKLSNlbmRpZiAvLyBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQotY2xhc3MgRG9tYWluQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChFcnJvclN0
cmluZyYpID0gMDsKLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIH5Eb21haW5CYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXIoKTsKLX07Ci0KLWNsYXNzIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyIGZpbmFs
IDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICBz
dGF0aWMgUmVmPERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNo
ZXImLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICB2b2lkIGRpc3BhdGNo
KGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4m
JiBtZXNzYWdlKSBmaW5hbDsKLXByaXZhdGU6Ci0gICAgdm9pZCBDb21tYW5kKGxvbmcgcmVxdWVz
dElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwotI2lmIEVOQUJMRShJTlNQ
RUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotcHVibGljOgotICAgIHZvaWQgc2V0QWx0ZXJu
YXRlRGlzcGF0Y2hlcihBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRl
RGlzcGF0Y2hlcikgeyBtX2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVy
OyB9Ci1wcml2YXRlOgotICAgIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKiBtX2Fs
dGVybmF0ZURpc3BhdGNoZXIgeyBudWxscHRyIH07Ci0jZW5kaWYKLXByaXZhdGU6Ci0gICAgRG9t
YWluQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImLCBEb21haW5CYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXIqKTsKLSAgICBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1f
YWdlbnQgeyBudWxscHRyIH07Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBF
bmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
QmFja2VuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9K
U09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCi0jaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgot
I2VuZGlmCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1Eb21haW5CYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXI6On5Eb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KLQotUmVmPERv
bWFpbkJhY2tlbmREaXNwYXRjaGVyPiBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEJh
Y2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgRG9tYWluQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyKiBhZ2VudCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKLX0KLQotRG9tYWluQmFj
a2VuZERpc3BhdGNoZXI6OkRvbWFpbkJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVy
JiBiYWNrZW5kRGlzcGF0Y2hlciwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2Vu
dCkKLSAgICA6IFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVy
KQotICAgICwgbV9hZ2VudChhZ2VudCkKLXsKLSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdp
c3RlckRpc3BhdGNoZXJGb3JEb21haW4oIkRvbWFpbiJfcywgdGhpcyk7Ci19Ci0KLXZvaWQgRG9t
YWluQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJp
bmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQotewotICAgIFJlZjxEb21h
aW5CYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7Ci0KLSAgICBSZWZQdHI8SlNPTjo6
T2JqZWN0PiBwYXJhbWV0ZXJzOwotICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBw
YXJhbWV0ZXJzKTsKLQotICAgIGlmIChtZXRob2QgPT0gIkNvbW1hbmQiKQotICAgICAgICBDb21t
YW5kKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7Ci0gICAgZWxzZQotICAgICAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVy
OjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uIiArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQi
KTsKLX0KLQotdm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVl
c3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKLXsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKLSAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0g
ICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+Q29tbWFuZChyZXF1ZXN0SWQpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBS
ZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIG1f
YWdlbnQtPkNvbW1hbmQoZXJyb3IpOwotCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShy
ZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5y
ZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92
ZShlcnJvcikpOwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxl
OiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250
ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFp
bi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5j
bHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewotCi1jbGFzcyBGcm9udGVuZFJvdXRlcjsKLQotY2xhc3MgRG9tYWluRnJvbnRlbmREaXNwYXRj
aGVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBEb21haW5G
cm9udGVuZERpc3BhdGNoZXIoRnJvbnRlbmRSb3V0ZXImIGZyb250ZW5kUm91dGVyKSA6IG1fZnJv
bnRlbmRSb3V0ZXIoZnJvbnRlbmRSb3V0ZXIpIHsgfQotICAgIHZvaWQgRXZlbnQoKTsKLXByaXZh
dGU6Ci0gICAgRnJvbnRlbmRSb3V0ZXImIG1fZnJvbnRlbmRSb3V0ZXI7Ci19OwotCi19IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMu
aAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9t
YWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RGcm9udGVuZERp
c3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVu
ZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIElu
c3BlY3RvciB7Ci0KLXZvaWQgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVyOjpFdmVudCgpCi17Ci0g
ICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJf
cyk7Ci0KLSAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09O
U3RyaW5nKCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxl
OiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbE9iamVjdHMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10
YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0
Zi9Bc3NlcnRpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotbmFtZXNwYWNl
IFByb3RvY29sIHsKLQotCi0KLQotCi0KLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0K
LX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmpl
Y3RzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9t
YWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9i
amVjdHMuaCIKLQotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLW5hbWVzcGFjZSBQcm90b2Nv
bCB7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVi
dWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERp
c3BhdGNoZXJzLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi1AcHJvdG9jb2wgVGVz
dFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcjsKLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0K
LQotY2xhc3MgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVi
bGljIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyIHsKLSAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3Bh
dGNoZXIoaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2Rl
bGVnYXRlID0gaGFuZGxlcjsgfQotICAgIHZvaWQgQ29tbWFuZChsb25nIHJlcXVlc3RJZCkgZmlu
YWw7Ci1wcml2YXRlOgotICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5I
YW5kbGVyPj4gbV9kZWxlZ2F0ZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0j
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVi
dWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNw
YXRjaGVycy5oIgotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbmNsdWRl
ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVl
cy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdm9pZCBPYmpDSW5zcGVjdG9yRG9tYWlu
QmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9uZyByZXF1ZXN0SWQpCi17Ci0gICAgaWYgKCFb
bV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKENvbW1hbmRXaXRoRXJyb3JD
YWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRo
b2ROb3RGb3VuZCwgIidEb21haW4uQ29tbWFuZCcgd2FzIG5vdCBmb3VuZCJfcyk7Ci0gICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsK
LSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0
SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwotICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgIH07Ci0KLSAgICBpZCBz
dWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVz
cG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7Ci0gICAgfTsK
LQotICAgIFttX2RlbGVnYXRlIENvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNr
IHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOwotfQotCi0KLX0gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVy
cy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmct
ZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgotCi1f
X2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmV0
YWluLCBzZXR0ZXI9c2V0RG9tYWluSGFuZGxlcjopIGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFp
bkhhbmRsZXI+IGRvbWFpbkhhbmRsZXI7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkp
IFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqZG9tYWluRXZlbnREaXNw
YXRjaGVyOwotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
bi5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmct
ZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgotCi0j
aW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFj
a2VuZERpc3BhdGNoZXJzLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNw
YXRjaGFibGVBZ2VudC5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNw
ZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwot
Ci1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgotewotICAgIEF1Z21l
bnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci0gICAgaWQ8VGVzdFByb3Rv
Y29sRG9tYWluRG9tYWluSGFuZGxlcj4gX2RvbWFpbkhhbmRsZXI7Ci0gICAgVGVzdFByb3RvY29s
RG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyICpfZG9tYWluRXZlbnREaXNwYXRjaGVyOwotfQot
Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3Rv
ckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAg
IGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7
Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQotCi0t
ICh2b2lkKWRlYWxsb2MKLXsKLSAgICBbX2RvbWFpbkhhbmRsZXIgcmVsZWFzZV07Ci0gICAgW19k
b21haW5FdmVudERpc3BhdGNoZXIgcmVsZWFzZV07Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQot
Ci0tICh2b2lkKXNldERvbWFpbkhhbmRsZXI6KGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhh
bmRsZXI+KWhhbmRsZXIKLXsKLSAgICBpZiAoaGFuZGxlciA9PSBfZG9tYWluSGFuZGxlcikKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgW19kb21haW5IYW5kbGVyIHJlbGVhc2VdOwotICAgIF9kb21h
aW5IYW5kbGVyID0gW2hhbmRsZXIgcmV0YWluXTsKLQotICAgIGF1dG8gYWx0ZXJuYXRlRGlzcGF0
Y2hlciA9IG1ha2VVbmlxdWU8T2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiho
YW5kbGVyKTsKLSAgICBhdXRvIGFsdGVybmF0ZUFnZW50ID0gbWFrZVVuaXF1ZTxBbHRlcm5hdGVE
aXNwYXRjaGFibGVBZ2VudDxEb21haW5CYWNrZW5kRGlzcGF0Y2hlciwgQWx0ZXJuYXRlRG9tYWlu
QmFja2VuZERpc3BhdGNoZXI+PigiRG9tYWluIl9zLCAqX2NvbnRyb2xsZXIsIFdURk1vdmUoYWx0
ZXJuYXRlRGlzcGF0Y2hlcikpOwotICAgIF9jb250cm9sbGVyLT5hcHBlbmRFeHRyYUFnZW50KFdU
Rk1vdmUoYWx0ZXJuYXRlQWdlbnQpKTsKLX0KLQotLSAoaWQ8VGVzdFByb3RvY29sRG9tYWluRG9t
YWluSGFuZGxlcj4pZG9tYWluSGFuZGxlcgotewotICAgIHJldHVybiBfZG9tYWluSGFuZGxlcjsK
LX0KLQotLSAoVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyICopZG9tYWlu
RXZlbnREaXNwYXRjaGVyCi17Ci0gICAgaWYgKCFfZG9tYWluRXZlbnREaXNwYXRjaGVyKQotICAg
ICAgICBfZG9tYWluRXZlbnREaXNwYXRjaGVyID0gW1tUZXN0UHJvdG9jb2xEb21haW5Eb21haW5F
dmVudERpc3BhdGNoZXIgYWxsb2NdIGluaXRXaXRoQ29udHJvbGxlcjpfY29udHJvbGxlcl07Ci0g
ICAgcmV0dXJuIF9kb21haW5FdmVudERpc3BhdGNoZXI7Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUu
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0
ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMuaCIKLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFj
ZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5F
dmVudERpc3BhdGNoZXIKLXsKLSAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9j
b250cm9sbGVyOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdt
ZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBzZWxmID0gW3N1
cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NF
UlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVy
biBzZWxmOwotfQotCi0tICh2b2lkKUV2ZW50Ci17Ci0gICAgY29uc3QgRnJvbnRlbmRSb3V0ZXIm
IHJvdXRlciA9IF9jb250cm9sbGVyLT5mcm9udGVuZFJvdXRlcigpOwotCi0gICAgUmVmPEpTT046
Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25N
ZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7Ci0gICAgcm91
dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwotfQotCi1AZW5kCi0K
LQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPEZv
dW5kYXRpb24vRm91bmRhdGlvbi5oPgotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9j
b2xKU09OT2JqZWN0Lmg+Ci0KLQotCi0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQ
cm90b2NvbFBsYXRmb3JtKSB7Ci0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1BbGwsCi0gICAgVGVz
dFByb3RvY29sUGxhdGZvcm1HZW5lcmljLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TLAot
ICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1MsCi19OwotCi0KLQotCi0KLUBwcm90b2NvbCBU
ZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyIDxOU09iamVjdD4KLUBvcHRpb25hbAotLSAo
dm9pZClDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSll
cnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKSh2b2lkKSlzdWNjZXNzQ2FsbGJh
Y2s7Ci1AZW5kCi0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGlu
dGVyZmFjZSBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgOiBOU09iamVj
dAotLSAodm9pZClFdmVudDsKLUBlbmQKLQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJv
dG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1k
b21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90
b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50
YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0K
LUBpbnRlcmZhY2UgVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyIChQcml2
YXRlKQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooSW5zcGVjdG9yOjpBdWdt
ZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXI7Ci1AZW5kCi0KLQotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbC5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJz
aW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgT2Jq
Q0VudW1UeXBlPgotT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29u
c3QgU3RyaW5nJiB2YWx1ZSk7Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0
UHJvdG9jb2xQbGF0Zm9ybSB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBjYXNl
IFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOgotICAgICAgICByZXR1cm4gImFsbCJfczsKLSAgICBj
YXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzoKLSAgICAgICAgcmV0dXJuICJnZW5lcmlj
Il9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1JT1M6Ci0gICAgICAgIHJldHVybiAi
aW9zIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzoKLSAgICAgICAgcmV0
dXJuICJtYWNvcyJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxU
ZXN0UHJvdG9jb2xQbGF0Zm9ybT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFs
dWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJhbGwiKQotICAgICAgICByZXR1cm4gVGVzdFByb3Rv
Y29sUGxhdGZvcm1BbGw7Ci0gICAgaWYgKHZhbHVlID09ICJnZW5lcmljIikKLSAgICAgICAgcmV0
dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzsKLSAgICBpZiAodmFsdWUgPT0gImlvcyIp
Ci0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzsKLSAgICBpZiAodmFsdWUg
PT0gIm1hY29zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M7Ci0g
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0K
LSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dh
YmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotCi0jaW1wb3J0ICJUZXN0
UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKLSNpbXBvcnQg
PFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0KLXVzaW5nIG5h
bWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotCi0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMu
bW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZS1t
YXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgot
Ci0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPFdlYklu
c3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0jaW1wb3J0IDx3dGYvQXNz
ZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNl
IEluc3BlY3RvcjsKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2Vu
ZXJpYy9leHBlY3RlZC9kb21haW4tdGFyZ2V0VHlwZXMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9kb21h
aW4tdGFyZ2V0VHlwZXMuanNvbi1yZXN1bHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGY4OTQ4YTJmNzQ3MDEyNWJjMmQ1MzNlOWVkNTQzNDg0OWQ4MmRiZmQuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZG9tYWluLXRhcmdldFR5cGVz
Lmpzb24tcmVzdWx0CisrKyAvZGV2L251bGwKQEAgLTEsMTA2MyArMCwwIEBACi0jIyMgQmVnaW4g
RmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotLy8gRG9tYWluCi1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lz
dGVyRG9tYWluKCJEb21haW4iLCBbInBhZ2UiXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVy
Q29tbWFuZCgiRG9tYWluLkNvbW1hbmQiLCBbInBhZ2UiXSwgW10sIFtdKTsKLUluc3BlY3RvckJh
Y2tlbmQucmVnaXN0ZXJFdmVudCgiRG9tYWluLkV2ZW50IiwgWyJwYWdlIl0sIFtdKTsKLUluc3Bl
Y3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW5EaXNwYXRjaGVyID0gSW5zcGVjdG9yQmFja2VuZC5y
ZWdpc3RlckRpc3BhdGNoZXIuYmluZChJbnNwZWN0b3JCYWNrZW5kLCAiRG9tYWluIik7Ci1JbnNw
ZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJEb21haW4iLCBudWxsKTsKLSMjIyBFbmQgRmls
ZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0
ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBkb21haW4tdGFyZ2V0VHlwZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKLSNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0KLW5hbWVz
cGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1w
dWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3Bh
dGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNw
YXRjaGVyKTsgfQotICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNv
bnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KLXByaXZhdGU6Ci0gICAg
UmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwotfTsKLQotCi1j
bGFzcyBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+QWx0ZXJuYXRlRG9tYWlu
QmFja2VuZERpc3BhdGNoZXIoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChsb25nIGNh
bGxJZCkgPSAwOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSNlbmRpZiAvLyBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSMjIyBFbmQgRmlsZTogVGVz
dEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFj
a2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21h
aW4tdGFyZ2V0VHlwZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIK
LSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsK
LQotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKLWNsYXNzIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRj
aGVyOwotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQot
Ci1jbGFzcyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewotcHVibGljOgotICAgIHZp
cnR1YWwgdm9pZCBDb21tYW5kKEVycm9yU3RyaW5nJikgPSAwOwotcHJvdGVjdGVkOgotICAgIHZp
cnR1YWwgfkRvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOwotfTsKLQotY2xhc3MgRG9t
YWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERp
c3BhdGNoZXIgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8RG9tYWluQmFja2VuZERpc3BhdGNo
ZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlciopOwotICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYg
bWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOwotcHJpdmF0ZToKLSAg
ICB2b2lkIENvbW1hbmQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFy
YW1ldGVycyk7Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi1w
dWJsaWM6Ci0gICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZURvbWFpbkJh
Y2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0
Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KLXByaXZhdGU6Ci0gICAgQWx0ZXJuYXRlRG9t
YWluQmFja2VuZERpc3BhdGNoZXIqIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciB7IG51bGxwdHIgfTsK
LSNlbmRpZgotcHJpdmF0ZToKLSAgICBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlz
cGF0Y2hlciYsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIERvbWFpbkJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2VudCB7IG51bGxwdHIgfTsKLX07Ci0KLX0gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJz
LmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVzLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05W
YWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKLSNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jZW5k
aWYKLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLURvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlcjo6fkRvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQotCi1SZWY8RG9tYWlu
QmFja2VuZERpc3BhdGNoZXI+IERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoQmFja2Vu
ZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXIqIGFnZW50KQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERvbWFpbkJhY2tlbmRE
aXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOwotfQotCi1Eb21haW5CYWNrZW5k
RGlzcGF0Y2hlcjo6RG9tYWluQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJh
Y2tlbmREaXNwYXRjaGVyLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQot
ICAgIDogU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCi0g
ICAgLCBtX2FnZW50KGFnZW50KQotewotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVy
RGlzcGF0Y2hlckZvckRvbWFpbigiRG9tYWluIl9zLCB0aGlzKTsKLX0KLQotdm9pZCBEb21haW5C
YWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYg
bWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCi17Ci0gICAgUmVmPERvbWFpbkJh
Y2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKLQotICAgIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFt
ZXRlcnMpOwotCi0gICAgaWYgKG1ldGhvZCA9PSAiQ29tbWFuZCIpCi0gICAgICAgIENvbW1hbmQo
cmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFj
a2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1l
dGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOwot
fQotCi12b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElk
LCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQotewotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQotICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAg
ICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5Db21tYW5kKHJlcXVlc3RJZCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxK
U09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgbV9hZ2Vu
dC0+Q29tbWFuZChlcnJvcik7Ci0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3Vs
dCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9y
dFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVy
cm9yKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRl
c3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmRE
aXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRh
cmdldFR5cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5j
bHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
LQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEZyb250ZW5kUm91dGVyOwotCi1jbGFz
cyBEb21haW5Gcm9udGVuZERpc3BhdGNoZXIgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwotcHVibGljOgotICAgIERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcihGcm9udGVuZFJvdXRlciYg
ZnJvbnRlbmRSb3V0ZXIpIDogbV9mcm9udGVuZFJvdXRlcihmcm9udGVuZFJvdXRlcikgeyB9Ci0g
ICAgdm9pZCBFdmVudCgpOwotcHJpdmF0ZToKLSAgICBGcm9udGVuZFJvdXRlciYgbV9mcm9udGVu
ZFJvdXRlcjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBU
ZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmRE
aXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4t
dGFyZ2V0VHlwZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hl
cnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVy
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9y
IHsKLQotdm9pZCBEb21haW5Gcm9udGVuZERpc3BhdGNoZXI6OkV2ZW50KCkKLXsKLSAgICBSZWY8
SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAg
anNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9zKTsKLQot
ICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmco
KSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RG
cm9udGVuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2Jq
ZWN0cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5
cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3By
YWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5
cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3Rv
ciB7Ci0KLQotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotCi0KLQotCi0KLQotfSAvLyBu
YW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
T2JqZWN0cy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFy
Z2V0VHlwZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgot
Ci0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0K
LX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0j
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+
Ci0KLUBwcm90b2NvbCBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyOwotCi1uYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKLQotCi1jbGFzcyBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3Bh
dGNoZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIgewot
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIE9iakNJbnNwZWN0b3JE
b21haW5CYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVy
PiBoYW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9Ci0gICAgdm9pZCBDb21tYW5kKGxv
bmcgcmVxdWVzdElkKSBmaW5hbDsKLXByaXZhdGU6Ci0gICAgUmV0YWluUHRyPGlkPFRlc3RQcm90
b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwotfTsKLQotfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNo
ZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5t
bQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlcy5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQg
ImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0K
LSNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLW5hbWVz
cGFjZSBJbnNwZWN0b3IgewotCi12b2lkIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0
Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVlc3RJZCkKLXsKLSAgICBpZiAoIVttX2RlbGVnYXRlIHJl
c3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nl
c3NDYWxsYmFjazopXSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90
b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAi
J0RvbWFpbi5Db21tYW5kJyB3YXMgbm90IGZvdW5kIl9zKTsKLSAgICAgICAgYmFja2VuZERpc3Bh
dGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERp
c3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVy
KCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgfTsKLQotICAgIGlkIHN1Y2Nlc3NDYWxsYmFj
ayA9IF57Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0
SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKLSAgICB9OwotCi0gICAgW21fZGVs
ZWdhdGUgQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxi
YWNrOnN1Y2Nlc3NDYWxsYmFja107Ci19Ci0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0K
LSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0VHlwZXMuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFBy
b3RvY29sLmg+Ci0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGlu
dGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKLUBwcm9wZXJ0eSAo
bm9uYXRvbWljLCByZXRhaW4sIHNldHRlcj1zZXREb21haW5IYW5kbGVyOikgaWQ8VGVzdFByb3Rv
Y29sRG9tYWluRG9tYWluSGFuZGxlcj4gZG9tYWluSGFuZGxlcjsKLUBwcm9wZXJ0eSAobm9uYXRv
bWljLCByZWFkb25seSkgVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyICpk
b21haW5FdmVudERpc3BhdGNoZXI7Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xDb25maWd1cmF0aW9uLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3Vy
YXRpb24ubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW4tdGFyZ2V0
VHlwZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0j
aW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90
b2NvbEludGVybmFsLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMu
aCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+
Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIu
aD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNw
YXRjaGVycy5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXJzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlv
biBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCi17Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JD
b250cm9sbGVyKiBfY29udHJvbGxlcjsKLSAgICBpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5I
YW5kbGVyPiBfZG9tYWluSGFuZGxlcjsKLSAgICBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVu
dERpc3BhdGNoZXIgKl9kb21haW5FdmVudERpc3BhdGNoZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29u
dHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAg
ICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBfY29udHJvbGxl
ciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwot
ewotICAgIFtfZG9tYWluSGFuZGxlciByZWxlYXNlXTsKLSAgICBbX2RvbWFpbkV2ZW50RGlzcGF0
Y2hlciByZWxlYXNlXTsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLS0gKHZvaWQpc2V0RG9t
YWluSGFuZGxlcjooaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4paGFuZGxlcgot
ewotICAgIGlmIChoYW5kbGVyID09IF9kb21haW5IYW5kbGVyKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBbX2RvbWFpbkhhbmRsZXIgcmVsZWFzZV07Ci0gICAgX2RvbWFpbkhhbmRsZXIgPSBbaGFu
ZGxlciByZXRhaW5dOwotCi0gICAgYXV0byBhbHRlcm5hdGVEaXNwYXRjaGVyID0gbWFrZVVuaXF1
ZTxPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXI+KGhhbmRsZXIpOwotICAgIGF1
dG8gYWx0ZXJuYXRlQWdlbnQgPSBtYWtlVW5pcXVlPEFsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50
PERvbWFpbkJhY2tlbmREaXNwYXRjaGVyLCBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hl
cj4+KCJEb21haW4iX3MsICpfY29udHJvbGxlciwgV1RGTW92ZShhbHRlcm5hdGVEaXNwYXRjaGVy
KSk7Ci0gICAgX2NvbnRyb2xsZXItPmFwcGVuZEV4dHJhQWdlbnQoV1RGTW92ZShhbHRlcm5hdGVB
Z2VudCkpOwotfQotCi0tIChpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPilkb21h
aW5IYW5kbGVyCi17Ci0gICAgcmV0dXJuIF9kb21haW5IYW5kbGVyOwotfQotCi0tIChUZXN0UHJv
dG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKilkb21haW5FdmVudERpc3BhdGNoZXIK
LXsKLSAgICBpZiAoIV9kb21haW5FdmVudERpc3BhdGNoZXIpCi0gICAgICAgIF9kb21haW5FdmVu
dERpc3BhdGNoZXIgPSBbW1Rlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciBh
bGxvY10gaW5pdFdpdGhDb250cm9sbGVyOl9jb250cm9sbGVyXTsKLSAgICByZXR1cm4gX2RvbWFp
bkV2ZW50RGlzcGF0Y2hlcjsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sQ29uZmlndXJhdGlvbi5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnRE
aXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10
YXJnZXRUeXBlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNp
bmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbERv
bWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlcgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29u
dHJvbGxlciogX2NvbnRyb2xsZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRy
b2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgotewotICAg
IHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmls
OwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7
Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpRXZlbnQKLXsKLSAgICBjb25zdCBGcm9u
dGVuZFJvdXRlciYgcm91dGVyID0gX2NvbnRyb2xsZXItPmZyb250ZW5kUm91dGVyKCk7Ci0KLSAg
ICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9z
KTsKLSAgICByb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Ci19
Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMu
bW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9u
Lmg+Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KLQot
Ci0KLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sUGxhdGZvcm0pIHsK
LSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbCwKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdl
bmVyaWMsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1JT1MsCi0gICAgVGVzdFByb3RvY29sUGxh
dGZvcm1NYWNPUywKLX07Ci0KLQotCi0KLQotQHByb3RvY29sIFRlc3RQcm90b2NvbERvbWFpbkRv
bWFpbkhhbmRsZXIgPE5TT2JqZWN0PgotQG9wdGlvbmFsCi0tICh2b2lkKUNvbW1hbmRXaXRoRXJy
b3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vz
c0NhbGxiYWNrOih2b2lkKF4pKHZvaWQpKXN1Y2Nlc3NDYWxsYmFjazsKLUBlbmQKLQotX19hdHRy
aWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2Nv
bERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciA6IE5TT2JqZWN0Ci0tICh2b2lkKUV2ZW50Owot
QGVuZAotCi0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJp
bGl0eU9iamVjdHMuaD4KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGRvbWFpbi10YXJnZXRUeXBlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAi
VGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1
ZXMuaD4KLQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNo
ZXIgKFByaXZhdGUpCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihJbnNwZWN0
b3I6OkF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcjsKLUBlbmQKLQot
Ci0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZG9tYWluLXRhcmdldFR5cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0IDxX
ZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+Ci0KLW5hbWVzcGFjZSBJ
bnNwZWN0b3IgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+Ci1PcHRpb25hbDxP
YmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKLQot
aW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFBsYXRmb3JtIHZhbHVl
KQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1B
bGw6Ci0gICAgICAgIHJldHVybiAiYWxsIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZv
cm1HZW5lcmljOgotICAgICAgICByZXR1cm4gImdlbmVyaWMiX3M7Ci0gICAgY2FzZSBUZXN0UHJv
dG9jb2xQbGF0Zm9ybUlPUzoKLSAgICAgICAgcmV0dXJuICJpb3MiX3M7Ci0gICAgY2FzZSBUZXN0
UHJvdG9jb2xQbGF0Zm9ybU1hY09TOgotICAgICAgICByZXR1cm4gIm1hY29zIl9zOwotICAgIH0K
LX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFBsYXRmb3JtPiBm
cm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUg
PT0gImFsbCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDsKLSAgICBp
ZiAodmFsdWUgPT0gImdlbmVyaWMiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZv
cm1HZW5lcmljOwotICAgIGlmICh2YWx1ZSA9PSAiaW9zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQ
cm90b2NvbFBsYXRmb3JtSU9TOwotICAgIGlmICh2YWx1ZSA9PSAibWFjb3MiKQotICAgICAgICBy
ZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlu
LXRhcmdldFR5cGVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0KLSNpbXBvcnQg
IlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgotI2lt
cG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLQotdXNp
bmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0KLQotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xU
eXBlcy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbi10YXJnZXRU
eXBlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNp
bXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9i
amVjdFByaXZhdGUuaD4KLSNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW1wb3J0IDx3dGYv
SlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLSMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2RvbWFpbnMtd2l0
aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9kb21haW5zLXdpdGgt
dmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24tcmVzdWx0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAyYzA3Y2IxMzQ3ZjNjNjJjNDllZWE0N2Y0NWZhNzE5ZGU1NGRiMjBkLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2RvbWFpbnMtd2l0
aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbi1yZXN1bHQKKysrIC9kZXYvbnVsbApAQCAtMSwx
NDU1ICswLDAgQEAKLSMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1j
b21tYW5kLXNpemVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotLy8gTmV0d29yazEKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIk5ldHdv
cmsxIiwgbnVsbCk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiTmV0d29yazEu
bG9hZFJlc291cmNlMSIsIG51bGwsIFtdLCBbXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRl
RG9tYWluKCJOZXR3b3JrMSIsIG51bGwpOwotCi0vLyBOZXR3b3JrMwotSW5zcGVjdG9yQmFja2Vu
ZC5yZWdpc3RlckRvbWFpbigiTmV0d29yazMiLCBudWxsKTsKLUluc3BlY3RvckJhY2tlbmQucmVn
aXN0ZXJDb21tYW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2UxIiwgbnVsbCwgW10sIFtdKTsKLUlu
c3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2UyIiwg
bnVsbCwgW10sIFtdKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3Jr
My5sb2FkUmVzb3VyY2UzIiwgbnVsbCwgW10sIFtdKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0
ZXJDb21tYW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2U0IiwgbnVsbCwgW10sIFtdKTsKLUluc3Bl
Y3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2U1IiwgbnVs
bCwgW10sIFtdKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMy5s
b2FkUmVzb3VyY2U2IiwgbnVsbCwgW10sIFtdKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJD
b21tYW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2U3IiwgbnVsbCwgW10sIFtdKTsKLUluc3BlY3Rv
ckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIk5ldHdvcmszIiwgbnVsbCk7Ci0jIyMgRW5kIEZpbGU6
IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVy
bmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9j
b2xUeXBlcy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0
ZXIuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEFsdGVybmF0ZUJhY2tlbmRE
aXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0
cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIg
PSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9Ci0gICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmRE
aXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQot
cHJpdmF0ZToKLSAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNo
ZXI7Ci19OwotCi0KLWNsYXNzIEFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIgOiBw
dWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZpcnR1YWwg
fkFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoKSB7IH0KLSAgICB2aXJ0dWFsIHZv
aWQgbG9hZFJlc291cmNlMShsb25nIGNhbGxJZCkgPSAwOwotfTsKLWNsYXNzIEFsdGVybmF0ZU5l
dHdvcmszQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXIgewotcHVibGljOgotICAgIHZpcnR1YWwgfkFsdGVybmF0ZU5ldHdvcmszQmFja2VuZERpc3Bh
dGNoZXIoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMShsb25nIGNhbGxJZCkg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UyKGxvbmcgY2FsbElkKSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTMobG9uZyBjYWxsSWQpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgbG9hZFJlc291cmNlNChsb25nIGNhbGxJZCkgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBsb2FkUmVzb3VyY2U1KGxvbmcgY2FsbElkKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRS
ZXNvdXJjZTYobG9uZyBjYWxsSWQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNl
Nyhsb25nIGNhbGxJZCkgPSAwOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSNl
bmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSMjIyBFbmQg
RmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRl
ICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
LQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwot
Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi1jbGFzcyBBbHRl
cm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOwotY2xhc3MgQWx0ZXJuYXRlTmV0d29yazNC
YWNrZW5kRGlzcGF0Y2hlcjsKLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKLQotY2xhc3MgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewot
cHVibGljOgotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UxKEVycm9yU3RyaW5nJikgPSAw
OwotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgfk5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyKCk7Ci19OwotCi1jbGFzcyBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7Ci1w
dWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTEoRXJyb3JTdHJpbmcmKSA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTIoRXJyb3JTdHJpbmcmKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTMoRXJyb3JTdHJpbmcmKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIGxvYWRSZXNvdXJjZTQoRXJyb3JTdHJpbmcmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lk
IGxvYWRSZXNvdXJjZTUoRXJyb3JTdHJpbmcmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRS
ZXNvdXJjZTYoRXJyb3JTdHJpbmcmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJj
ZTcoRXJyb3JTdHJpbmcmKSA9IDA7Ci1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB+TmV0d29yazNC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKLX07Ci0KLWNsYXNzIE5ldHdvcmsxQmFja2VuZERp
c3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewot
cHVibGljOgotICAgIHN0YXRpYyBSZWY8TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRl
KEJhY2tlbmREaXNwYXRjaGVyJiwgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsK
LSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwg
UmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5hbDsKLXByaXZhdGU6Ci0gICAgdm9pZCBs
b2FkUmVzb3VyY2UxKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFt
ZXRlcnMpOwotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotcHVi
bGljOgotICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0Y2hlcihBbHRlcm5hdGVOZXR3b3JrMUJh
Y2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0
Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KLXByaXZhdGU6Ci0gICAgQWx0ZXJuYXRlTmV0
d29yazFCYWNrZW5kRGlzcGF0Y2hlciogbV9hbHRlcm5hdGVEaXNwYXRjaGVyIHsgbnVsbHB0ciB9
OwotI2VuZGlmCi1wcml2YXRlOgotICAgIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoQmFja2Vu
ZERpc3BhdGNoZXImLCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIE5l
dHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50IHsgbnVsbHB0ciB9OwotfTsK
LQotY2xhc3MgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVt
ZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxOZXR3b3Jr
M0JhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBOZXR3b3JrM0Jh
Y2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0
SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZp
bmFsOwotcHJpdmF0ZToKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTEobG9uZyByZXF1ZXN0SWQsIFJl
ZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2Uy
KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwotICAg
IHZvaWQgbG9hZFJlc291cmNlMyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4m
JiBwYXJhbWV0ZXJzKTsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTQobG9uZyByZXF1ZXN0SWQsIFJl
ZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2U1
KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwotICAg
IHZvaWQgbG9hZFJlc291cmNlNihsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4m
JiBwYXJhbWV0ZXJzKTsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTcobG9uZyByZXF1ZXN0SWQsIFJl
ZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCi1wdWJsaWM6Ci0gICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNw
YXRjaGVyKEFsdGVybmF0ZU5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3Bh
dGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQot
cHJpdmF0ZToKLSAgICBBbHRlcm5hdGVOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyKiBtX2FsdGVy
bmF0ZURpc3BhdGNoZXIgeyBudWxscHRyIH07Ci0jZW5kaWYKLXByaXZhdGU6Ci0gICAgTmV0d29y
azNCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYsIE5ldHdvcmszQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIq
IG1fYWdlbnQgeyBudWxscHRyIH07Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMj
IyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5o
PgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQot
I2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNlbmRpZgotCi1u
YW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6
On5OZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQotTmV0d29yazNCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXI6On5OZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsg
fQotCi1SZWY8TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4gTmV0d29yazFCYWNrZW5kRGlzcGF0
Y2hlcjo6Y3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgTmV0d29y
azFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQotewotICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIsIGFnZW50
KSk7Ci19Ci0KLU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6Ok5ldHdvcmsxQmFja2VuZERpc3Bh
dGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBOZXR3b3JrMUJhY2tl
bmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCi0gICAgOiBTdXBwbGVtZW50YWxCYWNrZW5kRGlz
cGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKLSAgICAsIG1fYWdlbnQoYWdlbnQpCi17Ci0gICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKCJOZXR3b3Jr
MSJfcywgdGhpcyk7Ci19Ci0KLXZvaWQgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0
Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0
PiYmIG1lc3NhZ2UpCi17Ci0gICAgUmVmPE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI+IHByb3Rl
Y3QoKnRoaXMpOwotCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVyczsKLSAgICBt
ZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFyYW1ldGVycyk7Ci0KLSAgICBpZiAobWV0
aG9kID09ICJsb2FkUmVzb3VyY2UxIikKLSAgICAgICAgbG9hZFJlc291cmNlMShyZXF1ZXN0SWQs
IFdURk1vdmUocGFyYW1ldGVycykpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91
bmQsICInTmV0d29yazEuIiArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKLX0KLQotdm9p
ZCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UxKGxvbmcgcmVxdWVzdElk
LCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQotewotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQotICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAg
ICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2UxKHJlcXVlc3RJZCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAg
IFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAg
bV9hZ2VudC0+bG9hZFJlc291cmNlMShlcnJvcik7Ci0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgp
KQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBX
VEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3Bh
dGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9y
LCBXVEZNb3ZlKGVycm9yKSk7Ci19Ci0KLVJlZjxOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyPiBO
ZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImIGJhY2tl
bmREaXNwYXRjaGVyLCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCi17
Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcihiYWNr
ZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKLX0KLQotTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6
TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3Bh
dGNoZXIsIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKLSAgICA6IFN1
cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQotICAgICwgbV9h
Z2VudChhZ2VudCkKLXsKLSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNo
ZXJGb3JEb21haW4oIk5ldHdvcmszIl9zLCB0aGlzKTsKLX0KLQotdm9pZCBOZXR3b3JrM0JhY2tl
bmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRo
b2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKLXsKLSAgICBSZWY8TmV0d29yazNCYWNr
ZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7Ci0KLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0
PiBwYXJhbWV0ZXJzOwotICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0
ZXJzKTsKLQotICAgIHR5cGVkZWYgdm9pZCAoTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6KkNh
bGxIYW5kbGVyKShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBtZXNzYWdl
KTsKLSAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxlcj4gRGlzcGF0Y2hNYXA7
Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPERpc3BhdGNoTWFwPiBkaXNwYXRjaE1hcDsKLSAg
ICBpZiAoZGlzcGF0Y2hNYXAuZ2V0KCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHN0YXRpYyBjb25z
dCBzdHJ1Y3QgTWV0aG9kVGFibGUgewotICAgICAgICAgICAgY29uc3QgY2hhciogbmFtZTsKLSAg
ICAgICAgICAgIENhbGxIYW5kbGVyIGhhbmRsZXI7Ci0gICAgICAgIH0gY29tbWFuZHNbXSA9IHsK
LSAgICAgICAgICAgIHsgImxvYWRSZXNvdXJjZTEiLCAmTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hl
cjo6bG9hZFJlc291cmNlMSB9LAotICAgICAgICAgICAgeyAibG9hZFJlc291cmNlMiIsICZOZXR3
b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UyIH0sCi0gICAgICAgICAgICB7ICJs
b2FkUmVzb3VyY2UzIiwgJk5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTMg
fSwKLSAgICAgICAgICAgIHsgImxvYWRSZXNvdXJjZTQiLCAmTmV0d29yazNCYWNrZW5kRGlzcGF0
Y2hlcjo6bG9hZFJlc291cmNlNCB9LAotICAgICAgICAgICAgeyAibG9hZFJlc291cmNlNSIsICZO
ZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U1IH0sCi0gICAgICAgICAgICB7
ICJsb2FkUmVzb3VyY2U2IiwgJk5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJj
ZTYgfSwKLSAgICAgICAgICAgIHsgImxvYWRSZXNvdXJjZTciLCAmTmV0d29yazNCYWNrZW5kRGlz
cGF0Y2hlcjo6bG9hZFJlc291cmNlNyB9LAotICAgICAgICB9OwotICAgICAgICBzaXplX3QgbGVu
Z3RoID0gV1RGX0FSUkFZX0xFTkdUSChjb21tYW5kcyk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAgICAgICBkaXNwYXRjaE1hcC5nZXQoKS5hZGQo
Y29tbWFuZHNbaV0ubmFtZSwgY29tbWFuZHNbaV0uaGFuZGxlcik7Ci0gICAgfQotCi0gICAgYXV0
byBmaW5kUmVzdWx0ID0gZGlzcGF0Y2hNYXAuZ2V0KCkuZmluZChtZXRob2QpOwotICAgIGlmIChm
aW5kUmVzdWx0ID09IGRpc3BhdGNoTWFwLmdldCgpLmVuZCgpKSB7Ci0gICAgICAgIG1fYmFja2Vu
ZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhv
ZE5vdEZvdW5kLCAiJ05ldHdvcmszLiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAoKCp0aGlzKS4qZmluZFJlc3VsdC0+dmFsdWUp
KHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7Ci19Ci0KLXZvaWQgTmV0d29yazNCYWNr
ZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046
Ok9iamVjdD4mJikKLXsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKLSAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRl
RGlzcGF0Y2hlci0+bG9hZFJlc291cmNlMShyZXF1ZXN0SWQpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotI2VuZGlmCi0KLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2Jq
ZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIG1fYWdlbnQtPmxvYWRS
ZXNvdXJjZTEoZXJyb3IpOwotCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQp
LCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQ
cm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJv
cikpOwotfQotCi12b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTIo
bG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCi17Ci0jaWYgRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0gICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0
Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZTIocmVx
dWVzdElkKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAgRXJyb3JTdHJp
bmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKTsKLSAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2UyKGVycm9yKTsKLQotICAgIGlmICgh
ZXJyb3IubGVuZ3RoKCkpCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25z
ZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hl
cjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKLX0KLQotdm9pZCBOZXR3b3JrM0JhY2tl
bmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6
T2JqZWN0PiYmKQotewotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQotICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVE
aXNwYXRjaGVyLT5sb2FkUmVzb3VyY2UzKHJlcXVlc3RJZCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0jZW5kaWYKLQotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmpl
Y3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgbV9hZ2VudC0+bG9hZFJl
c291cmNlMyhlcnJvcik7Ci0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCks
IGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFBy
b3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9y
KSk7Ci19Ci0KLXZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNChs
b25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKLXsKLSNpZiBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRj
aGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlNChyZXF1
ZXN0SWQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBFcnJvclN0cmlu
ZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOwotICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTQoZXJyb3IpOwotCi0gICAgaWYgKCFl
cnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNl
KHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVy
OjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOwotfQotCi12b2lkIE5ldHdvcmszQmFja2Vu
ZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTUobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpP
YmplY3Q+JiYpCi17Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
Ci0gICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURp
c3BhdGNoZXItPmxvYWRSZXNvdXJjZTUocmVxdWVzdElkKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSNlbmRpZgotCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVj
dD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtX2FnZW50LT5sb2FkUmVz
b3VyY2U1KGVycm9yKTsKLQotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0gICAgICAgIG1fYmFj
a2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwg
ZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJv
dG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3Ip
KTsKLX0KLQotdm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U2KGxv
bmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQotewotI2lmIEVOQUJMRShJTlNQ
RUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNo
ZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2U2KHJlcXVl
c3RJZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIEVycm9yU3RyaW5n
IGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7Ci0gICAgbV9hZ2VudC0+bG9hZFJlc291cmNlNihlcnJvcik7Ci0KLSAgICBpZiAoIWVy
cm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2Uo
cmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1f
YmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6
OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Ci19Ci0KLXZvaWQgTmV0d29yazNCYWNrZW5k
RGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9i
amVjdD4mJikKLXsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
LSAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlz
cGF0Y2hlci0+bG9hZFJlc291cmNlNyhyZXF1ZXN0SWQpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotI2VuZGlmCi0KLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0
PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIG1fYWdlbnQtPmxvYWRSZXNv
dXJjZTcoZXJyb3IpOwotCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBm
YWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90
b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikp
OwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0QmFj
a2VuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0
Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12
YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVj
dHMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgRnJvbnRlbmRSb3V0
ZXI7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVy
cy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFy
eWluZy1jb21tYW5kLXNpemVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RGcm9udGVuZERp
c3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVu
ZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIElu
c3BlY3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRl
c3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
T2JqZWN0cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRo
LXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0K
LW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0K
LQotCi0vLyBUeXBlZGVmcy4KLW5hbWVzcGFjZSBOZXR3b3JrMiB7Ci0vKiBVbmlxdWUgbG9hZGVy
IGlkZW50aWZpZXIuICovCi10eXBlZGVmIFN0cmluZyBMb2FkZXJJZDsKLX0gLy8gTmV0d29yazIK
LS8vIEVuZCBvZiB0eXBlZGVmcy4KLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3Rz
LmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXpl
cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0KLSNpbmNs
dWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5h
bWVzcGFjZSBJbnNwZWN0b3IgewotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotfSAvLyBu
YW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbmNsdWRlIDx3dGYvUmV0
YWluUHRyLmg+Ci0KLUBwcm90b2NvbCBUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI7
Ci1AcHJvdG9jb2wgVGVzdFByb3RvY29sTmV0d29yazNEb21haW5IYW5kbGVyOwotCi1uYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKLQotCi1jbGFzcyBPYmpDSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlz
cGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVy
IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBPYmpDSW5zcGVj
dG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFp
bkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KLSAgICB2b2lkIGxv
YWRSZXNvdXJjZTEobG9uZyByZXF1ZXN0SWQpIGZpbmFsOwotcHJpdmF0ZToKLSAgICBSZXRhaW5Q
dHI8aWQ8VGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKLX07
Ci0KLWNsYXNzIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDog
cHVibGljIEFsdGVybmF0ZU5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIgewotICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tl
bmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbE5ldHdvcmszRG9tYWluSGFuZGxlcj4gaGFuZGxl
cikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQotICAgIHZvaWQgbG9hZFJlc291cmNlMShsb25n
IHJlcXVlc3RJZCkgZmluYWw7Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2UyKGxvbmcgcmVxdWVzdElk
KSBmaW5hbDsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTMobG9uZyByZXF1ZXN0SWQpIGZpbmFsOwot
ICAgIHZvaWQgbG9hZFJlc291cmNlNChsb25nIHJlcXVlc3RJZCkgZmluYWw7Ci0gICAgdm9pZCBs
b2FkUmVzb3VyY2U1KGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKLSAgICB2b2lkIGxvYWRSZXNvdXJj
ZTYobG9uZyByZXF1ZXN0SWQpIGZpbmFsOwotICAgIHZvaWQgbG9hZFJlc291cmNlNyhsb25nIHJl
cXVlc3RJZCkgZmluYWw7Ci1wcml2YXRlOgotICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xO
ZXR3b3JrM0RvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwotfTsKLQotfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJz
LmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNv
bW1hbmQtc2l6ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNw
YXRjaGVycy5oIgotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbmNsdWRl
ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVl
cy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdm9pZCBPYmpDSW5zcGVjdG9yTmV0d29y
azFCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMShsb25nIHJlcXVlc3RJZCkKLXsKLSAg
ICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IobG9hZFJlc291
cmNlMVdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgewotICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERp
c3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmsxLmxvYWRSZXNvdXJjZTEnIHdhcyBu
b3QgZm91bmQiX3MpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vy
cm9ycygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWQgZXJyb3JDYWxsYmFjayA9
IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9y
dFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3Is
IGVycm9yKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMo
KTsKLSAgICB9OwotCi0gICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKSwgZmFsc2UpOwotICAgIH07Ci0KLSAgICBbbV9kZWxlZ2F0ZSBsb2FkUmVzb3VyY2UxV2l0
aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxi
YWNrXTsKLX0KLQotCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVy
Ojpsb2FkUmVzb3VyY2UxKGxvbmcgcmVxdWVzdElkKQotewotICAgIGlmICghW21fZGVsZWdhdGUg
cmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2UxV2l0aEVycm9yQ2FsbGJh
Y2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJl
cG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90
Rm91bmQsICInTmV0d29yazMubG9hZFJlc291cmNlMScgd2FzIG5vdCBmb3VuZCJfcyk7Ci0gICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3Ip
IHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1
ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwotICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgIH07Ci0KLSAgICBp
ZCBzdWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5k
UmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7Ci0gICAg
fTsKLQotICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZTFXaXRoRXJyb3JDYWxsYmFjazplcnJv
ckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOwotfQotCi12b2lkIE9i
akNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UyKGxvbmcg
cmVxdWVzdElkKQotewotICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBz
ZWxlY3Rvcihsb2FkUmVzb3VyY2UyV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOild
KSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVx
dWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMubG9h
ZFJlc291cmNlMicgd2FzIG5vdCBmb3VuZCJfcyk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVy
KCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBp
ZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRj
aGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5z
ZW5kUGVuZGluZ0Vycm9ycygpOwotICAgIH07Ci0KLSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBe
ewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBK
U09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7Ci0gICAgfTsKLQotICAgIFttX2RlbGVnYXRl
IGxvYWRSZXNvdXJjZTJXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxs
YmFjazpzdWNjZXNzQ2FsbGJhY2tdOwotfQotCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0Jh
Y2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UzKGxvbmcgcmVxdWVzdElkKQotewotICAgIGlm
ICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2Uz
V2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0
Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMubG9hZFJlc291cmNlMycgd2FzIG5vdCBm
b3VuZCJfcyk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3Jz
KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZCBlcnJvckNhbGxiYWNrID0gXihO
U1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJv
dG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJy
b3IpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwot
ICAgIH07Ci0KLSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
LCBmYWxzZSk7Ci0gICAgfTsKLQotICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZTNXaXRoRXJy
b3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2td
OwotfQotCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2Fk
UmVzb3VyY2U0KGxvbmcgcmVxdWVzdElkKQotewotICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9u
ZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2U0V2l0aEVycm9yQ2FsbGJhY2s6c3Vj
Y2Vzc0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFBy
b3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQs
ICInTmV0d29yazMubG9hZFJlc291cmNlNCcgd2FzIG5vdCBmb3VuZCJfcyk7Ci0gICAgICAgIGJh
Y2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQs
IEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwotICAgICAgICBiYWNrZW5k
RGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgIH07Ci0KLSAgICBpZCBzdWNj
ZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9u
c2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7Ci0gICAgfTsKLQot
ICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZTRXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxi
YWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOwotfQotCi12b2lkIE9iakNJbnNw
ZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U1KGxvbmcgcmVxdWVz
dElkKQotewotICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rv
cihsb2FkUmVzb3VyY2U1V2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0g
ICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElk
LCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMubG9hZFJlc291
cmNlNScgd2FzIG5vdCBmb3VuZCJfcyk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNl
bmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZCBlcnJv
ckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpT
ZXJ2ZXJFcnJvciwgZXJyb3IpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVu
ZGluZ0Vycm9ycygpOwotICAgIH07Ci0KLSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeewotICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7Ci0gICAgfTsKLQotICAgIFttX2RlbGVnYXRlIGxvYWRS
ZXNvdXJjZTVXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpz
dWNjZXNzQ2FsbGJhY2tdOwotfQotCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmRE
aXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U2KGxvbmcgcmVxdWVzdElkKQotewotICAgIGlmICghW21f
ZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2U2V2l0aEVy
cm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6
TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMubG9hZFJlc291cmNlNicgd2FzIG5vdCBmb3VuZCJf
cyk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmlu
ZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xF
cnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwot
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgIH07
Ci0KLSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxz
ZSk7Ci0gICAgfTsKLQotICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZTZXaXRoRXJyb3JDYWxs
YmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOwotfQot
Ci12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3Vy
Y2U3KGxvbmcgcmVxdWVzdElkKQotewotICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1Nl
bGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2U3V2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0Nh
bGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29s
RXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0
d29yazMubG9hZFJlc291cmNlNycgd2FzIG5vdCBmb3VuZCJfcyk7Ci0gICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAg
YmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tl
bmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwotICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgIH07Ci0KLSAgICBpZCBzdWNjZXNzQ2Fs
bGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVx
dWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7Ci0gICAgfTsKLQotICAgIFtt
X2RlbGVnYXRlIGxvYWRSZXNvdXJjZTdXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1
Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOwotfQotCi0KLX0gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5t
bQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1z
aXplcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNp
bXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KLQotX19hdHRyaWJ1dGVfXygodmlz
aWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRp
b24gOiBOU09iamVjdAotQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNldE5l
dHdvcmsxSGFuZGxlcjopIGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4gbmV0
d29yazFIYW5kbGVyOwotQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNldE5l
dHdvcmszSGFuZGxlcjopIGlkPFRlc3RQcm90b2NvbE5ldHdvcmszRG9tYWluSGFuZGxlcj4gbmV0
d29yazNIYW5kbGVyOwotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbi5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1t
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmct
Y29tbWFuZC1zaXplcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKLQotI2ltcG9ydCAi
VGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNw
YXRjaGVycy5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxl
QWdlbnQuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29u
dHJvbGxlci5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXJzLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcnMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGltcGxl
bWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KLXsKLSAgICBBdWdtZW50YWJsZUlu
c3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotICAgIGlkPFRlc3RQcm90b2NvbE5ldHdv
cmsxRG9tYWluSGFuZGxlcj4gX25ldHdvcmsxSGFuZGxlcjsKLSAgICBpZDxUZXN0UHJvdG9jb2xO
ZXR3b3JrM0RvbWFpbkhhbmRsZXI+IF9uZXR3b3JrM0hhbmRsZXI7Ci19Ci0KLS0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciop
Y29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQot
ICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBfY29udHJv
bGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxv
YwotewotICAgIFtfbmV0d29yazFIYW5kbGVyIHJlbGVhc2VdOwotICAgIFtfbmV0d29yazNIYW5k
bGVyIHJlbGVhc2VdOwotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAodm9pZClzZXROZXR3
b3JrMUhhbmRsZXI6KGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4paGFuZGxl
cgotewotICAgIGlmIChoYW5kbGVyID09IF9uZXR3b3JrMUhhbmRsZXIpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIFtfbmV0d29yazFIYW5kbGVyIHJlbGVhc2VdOwotICAgIF9uZXR3b3JrMUhhbmRs
ZXIgPSBbaGFuZGxlciByZXRhaW5dOwotCi0gICAgYXV0byBhbHRlcm5hdGVEaXNwYXRjaGVyID0g
bWFrZVVuaXF1ZTxPYmpDSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxl
cik7Ci0gICAgYXV0byBhbHRlcm5hdGVBZ2VudCA9IG1ha2VVbmlxdWU8QWx0ZXJuYXRlRGlzcGF0
Y2hhYmxlQWdlbnQ8TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciwgQWx0ZXJuYXRlTmV0d29yazFC
YWNrZW5kRGlzcGF0Y2hlcj4+KCJOZXR3b3JrMSJfcywgKl9jb250cm9sbGVyLCBXVEZNb3ZlKGFs
dGVybmF0ZURpc3BhdGNoZXIpKTsKLSAgICBfY29udHJvbGxlci0+YXBwZW5kRXh0cmFBZ2VudChX
VEZNb3ZlKGFsdGVybmF0ZUFnZW50KSk7Ci19Ci0KLS0gKGlkPFRlc3RQcm90b2NvbE5ldHdvcmsx
RG9tYWluSGFuZGxlcj4pbmV0d29yazFIYW5kbGVyCi17Ci0gICAgcmV0dXJuIF9uZXR3b3JrMUhh
bmRsZXI7Ci19Ci0KLS0gKHZvaWQpc2V0TmV0d29yazNIYW5kbGVyOihpZDxUZXN0UHJvdG9jb2xO
ZXR3b3JrM0RvbWFpbkhhbmRsZXI+KWhhbmRsZXIKLXsKLSAgICBpZiAoaGFuZGxlciA9PSBfbmV0
d29yazNIYW5kbGVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBbX25ldHdvcmszSGFuZGxlciBy
ZWxlYXNlXTsKLSAgICBfbmV0d29yazNIYW5kbGVyID0gW2hhbmRsZXIgcmV0YWluXTsKLQotICAg
IGF1dG8gYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IG1ha2VVbmlxdWU8T2JqQ0luc3BlY3Rvck5ldHdv
cmszQmFja2VuZERpc3BhdGNoZXI+KGhhbmRsZXIpOwotICAgIGF1dG8gYWx0ZXJuYXRlQWdlbnQg
PSBtYWtlVW5pcXVlPEFsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50PE5ldHdvcmszQmFja2VuZERp
c3BhdGNoZXIsIEFsdGVybmF0ZU5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI+PigiTmV0d29yazMi
X3MsICpfY29udHJvbGxlciwgV1RGTW92ZShhbHRlcm5hdGVEaXNwYXRjaGVyKSk7Ci0gICAgX2Nv
bnRyb2xsZXItPmFwcGVuZEV4dHJhQWdlbnQoV1RGTW92ZShhbHRlcm5hdGVBZ2VudCkpOwotfQot
Ci0tIChpZDxUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkhhbmRsZXI+KW5ldHdvcmszSGFuZGxl
cgotewotICAgIHJldHVybiBfbmV0d29yazNIYW5kbGVyOwotfQotCi1AZW5kCi0KLQotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2Nv
bEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgot
I2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsK
LQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91
bmRhdGlvbi5oPgotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0
Lmg+Ci0KLQotCi0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbFBsYXRm
b3JtKSB7Ci0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1BbGwsCi0gICAgVGVzdFByb3RvY29sUGxh
dGZvcm1HZW5lcmljLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TLAotICAgIFRlc3RQcm90
b2NvbFBsYXRmb3JtTWFjT1MsCi19OwotCi0KLQotCi0KLUBwcm90b2NvbCBUZXN0UHJvdG9jb2xO
ZXR3b3JrMURvbWFpbkhhbmRsZXIgPE5TT2JqZWN0PgotQG9wdGlvbmFsCi0tICh2b2lkKWxvYWRS
ZXNvdXJjZTFXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9y
Q2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKHZvaWQpKXN1Y2Nlc3NDYWxsYmFjazsK
LUBlbmQKLQotQHByb3RvY29sIFRlc3RQcm90b2NvbE5ldHdvcmszRG9tYWluSGFuZGxlciA8TlNP
YmplY3Q+Ci1Ab3B0aW9uYWwKLS0gKHZvaWQpbG9hZFJlc291cmNlMVdpdGhFcnJvckNhbGxiYWNr
Oih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6
KHZvaWQoXikodm9pZCkpc3VjY2Vzc0NhbGxiYWNrOwotLSAodm9pZClsb2FkUmVzb3VyY2UyV2l0
aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1
Y2Nlc3NDYWxsYmFjazoodm9pZCheKSh2b2lkKSlzdWNjZXNzQ2FsbGJhY2s7Ci0tICh2b2lkKWxv
YWRSZXNvdXJjZTNXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVy
cm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKHZvaWQpKXN1Y2Nlc3NDYWxsYmFj
azsKLS0gKHZvaWQpbG9hZFJlc291cmNlNFdpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3Ry
aW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikodm9pZCkp
c3VjY2Vzc0NhbGxiYWNrOwotLSAodm9pZClsb2FkUmVzb3VyY2U1V2l0aEVycm9yQ2FsbGJhY2s6
KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoo
dm9pZCheKSh2b2lkKSlzdWNjZXNzQ2FsbGJhY2s7Ci0tICh2b2lkKWxvYWRSZXNvdXJjZTZXaXRo
RXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3Vj
Y2Vzc0NhbGxiYWNrOih2b2lkKF4pKHZvaWQpKXN1Y2Nlc3NDYWxsYmFjazsKLS0gKHZvaWQpbG9h
ZFJlc291cmNlN1dpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJy
b3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikodm9pZCkpc3VjY2Vzc0NhbGxiYWNr
OwotQGVuZAotCi0KLQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENv
bXBhdGliaWxpdHlPYmplY3RzLmg+Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKLQot
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVz
dFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgot
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+
Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbEludGVybmFsLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRo
LXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCA8V2ViSW5z
cGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVj
dG9yIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgotT3B0aW9uYWw8T2JqQ0Vu
dW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0KLWlubGlu
ZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xQbGF0Zm9ybSB2YWx1ZSkKLXsK
LSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOgot
ICAgICAgICByZXR1cm4gImFsbCJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtR2Vu
ZXJpYzoKLSAgICAgICAgcmV0dXJuICJnZW5lcmljIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29s
UGxhdGZvcm1JT1M6Ci0gICAgICAgIHJldHVybiAiaW9zIl9zOwotICAgIGNhc2UgVGVzdFByb3Rv
Y29sUGxhdGZvcm1NYWNPUzoKLSAgICAgICAgcmV0dXJuICJtYWNvcyJfczsKLSAgICB9Ci19Ci0K
LXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xQbGF0Zm9ybT4gZnJvbVBy
b3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJh
bGwiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1BbGw7Ci0gICAgaWYgKHZh
bHVlID09ICJnZW5lcmljIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtR2Vu
ZXJpYzsKLSAgICBpZiAodmFsdWUgPT0gImlvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9j
b2xQbGF0Zm9ybUlPUzsKLSAgICBpZiAodmFsdWUgPT0gIm1hY29zIikKLSAgICAgICAgcmV0dXJu
IFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0K
LQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5z
LXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
LmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlw
ZVBhcnNlci5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFBy
aXZhdGUuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGludGVyZmFjZSBUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKE5ldHdvcmsyRG9tYWluKQotCi0rICh2b2lkKV9wYXJz
ZUxvYWRlcklkOihOU1N0cmluZyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsK
LQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChO
ZXR3b3JrMkRvbWFpbikKLQotKyAodm9pZClfcGFyc2VMb2FkZXJJZDooTlNTdHJpbmcgKiopb3V0
VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9S
X0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IChO
U1N0cmluZyAqKXBheWxvYWQ7Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlw
ZXMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFy
eWluZy1jb21tYW5kLXNpemVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAi
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJ
UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4K
LSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7
Ci0KLQotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4
cGVjdGVkL2VudW0tdmFsdWVzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZW51bS12YWx1ZXMuanNvbi1y
ZXN1bHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwNmZlYmI3OGQ3MWVkYWIyZjVh
YjY5ZmU4NmZhMTU0YThjMTVjNGMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvZXhwZWN0ZWQvZW51bS12YWx1ZXMuanNvbi1yZXN1bHQKKysrIC9kZXYvbnVsbApA
QCAtMSwxMjM2ICswLDAgQEAKLSMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFu
ZHMuanMKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLS8vIFR5cGVEb21h
aW4KLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIlR5cGVEb21haW4iLCBudWxsKTsK
LUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJUeXBlRG9tYWluLlR5cGVEb21haW5FbnVt
Iiwge1NoYXJlZDogInNoYXJlZCIsIFJlZDogInJlZCIsIEdyZWVuOiAiZ3JlZW4iLCBCbHVlOiAi
Ymx1ZSJ9KTsKLUluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIlR5cGVEb21haW4iLCBu
dWxsKTsKLQotLy8gQ29tbWFuZERvbWFpbgotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFp
bigiQ29tbWFuZERvbWFpbiIsIG51bGwpOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1h
bmQoIkNvbW1hbmREb21haW4uY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUiLCBudWxsLCBbXSwg
WyJyZXR1cm5WYWx1ZSJdKTsKLUluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkNvbW1h
bmREb21haW4iLCBudWxsKTsKLQotLy8gRXZlbnREb21haW4KLUluc3BlY3RvckJhY2tlbmQucmVn
aXN0ZXJEb21haW4oIkV2ZW50RG9tYWluIiwgbnVsbCk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lz
dGVyRW51bSgiRXZlbnREb21haW4uRXZlbnRXaXRoRW51bVBhcmFtZXRlclBhcmFtZXRlciIsIHtT
aGFyZWQ6ICJzaGFyZWQiLCBCbGFjazogImJsYWNrIiwgV2hpdGU6ICJ3aGl0ZSJ9KTsKLUluc3Bl
Y3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudCgiRXZlbnREb21haW4uZXZlbnRXaXRoRW51bVBhcmFt
ZXRlciIsIG51bGwsIFsicGFyYW1ldGVyIl0pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckV2
ZW50RG9tYWluRGlzcGF0Y2hlciA9IEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEaXNwYXRjaGVy
LmJpbmQoSW5zcGVjdG9yQmFja2VuZCwgIkV2ZW50RG9tYWluIik7Ci1JbnNwZWN0b3JCYWNrZW5k
LmFjdGl2YXRlRG9tYWluKCJFdmVudERvbWFpbiIsIG51bGwpOwotIyMjIEVuZCBGaWxlOiBJbnNw
ZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVu
dW0tdmFsdWVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCi0jaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9y
IHsKLQotY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZv
aWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3Bh
dGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KLSAg
ICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBt
X2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Ci1wcml2YXRlOgotICAgIFJlZlB0cjxCYWNrZW5k
RGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKLX07Ci0KLQotY2xhc3MgQWx0ZXJuYXRl
Q29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJhY2tlbmRE
aXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5BbHRlcm5hdGVDb21tYW5kRG9tYWlu
QmFja2VuZERpc3BhdGNoZXIoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgY29tbWFuZFdpdGhFbnVt
UmV0dXJuVmFsdWUobG9uZyBjYWxsSWQpID0gMDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgotCi0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
Ci0jIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bE9iamVjdHMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKLQotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KLSNpZiBFTkFCTEUo
SU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLWNsYXNzIEFsdGVybmF0ZUNvbW1hbmRE
b21haW5CYWNrZW5kRGlzcGF0Y2hlcjsKLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVS
TkFURV9ESVNQQVRDSEVSUykKLQotY2xhc3MgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlciB7Ci1wdWJsaWM6Ci0gICAgLy8gTmFtZWQgYWZ0ZXIgcGFyYW1ldGVyICdyZXR1cm5W
YWx1ZScgd2hpbGUgZ2VuZXJhdGluZyBjb21tYW5kL2V2ZW50IGNvbW1hbmRXaXRoRW51bVJldHVy
blZhbHVlLgotICAgIGVudW0gY2xhc3MgUmV0dXJuVmFsdWUgewotICAgICAgICBTaGFyZWQgPSAw
LAotICAgICAgICBDeWFuID0gNiwKLSAgICAgICAgTWFnZW50YSA9IDcsCi0gICAgICAgIFllbGxv
dyA9IDgsCi0gICAgfTsgLy8gZW51bSBjbGFzcyBSZXR1cm5WYWx1ZQotICAgIHZpcnR1YWwgdm9p
ZCBjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShFcnJvclN0cmluZyYsIENvbW1hbmREb21haW5C
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlJldHVyblZhbHVlKiBvdXRfcmV0dXJuVmFsdWUpID0g
MDsKLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIH5Db21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyKCk7Ci19OwotCi1jbGFzcyBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIg
ZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgot
ICAgIHN0YXRpYyBSZWY8Q29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFj
a2VuZERpc3BhdGNoZXImLCBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7
Ci0gICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2Qs
IFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkgZmluYWw7Ci1wcml2YXRlOgotICAgIHZvaWQg
Y29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpP
YmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCi1wdWJsaWM6Ci0gICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVy
bmF0ZUNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikg
eyBtX2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9Ci1wcml2YXRl
OgotICAgIEFsdGVybmF0ZUNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlciogbV9hbHRlcm5h
dGVEaXNwYXRjaGVyIHsgbnVsbHB0ciB9OwotI2VuZGlmCi1wcml2YXRlOgotICAgIENvbW1hbmRE
b21haW5CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYsIENvbW1hbmREb21haW5C
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICBDb21tYW5kRG9tYWluQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyKiBtX2FnZW50IHsgbnVsbHB0ciB9OwotfTsKLQotfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0
QmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVk
ZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgot
Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jaW5jbHVkZSAi
VGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBJ
bnNwZWN0b3IgewotCi1Db21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+Q29t
bWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQotCi1SZWY8Q29tbWFuZERv
bWFpbkJhY2tlbmREaXNwYXRjaGVyPiBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmNy
ZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIENvbW1hbmREb21haW5C
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQotewotICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdl
bnQpKTsKLX0KLQotQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kRG9tYWlu
QmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBD
b21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKLSAgICA6IFN1cHBs
ZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQotICAgICwgbV9hZ2Vu
dChhZ2VudCkKLXsKLSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJG
b3JEb21haW4oIkNvbW1hbmREb21haW4iX3MsIHRoaXMpOwotfQotCi12b2lkIENvbW1hbmREb21h
aW5CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmlu
ZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCi17Ci0gICAgUmVmPENvbW1h
bmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7Ci0KLSAgICBSZWZQdHI8
SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOwotICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1z
Il9zLCBwYXJhbWV0ZXJzKTsKLQotICAgIGlmIChtZXRob2QgPT0gImNvbW1hbmRXaXRoRW51bVJl
dHVyblZhbHVlIikKLSAgICAgICAgY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUocmVxdWVzdElk
LCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3Bh
dGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZv
dW5kLCAiJ0NvbW1hbmREb21haW4uIiArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKLX0K
LQotdm9pZCBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmNvbW1hbmRXaXRoRW51bVJl
dHVyblZhbHVlKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQotewotI2lm
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotICAgIGlmIChtX2FsdGVy
bmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5jb21tYW5k
V2l0aEVudW1SZXR1cm5WYWx1ZShyZXF1ZXN0SWQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
I2VuZGlmCi0KLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBy
ZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIENvbW1hbmREb21haW5CYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXI6OlJldHVyblZhbHVlIG91dF9yZXR1cm5WYWx1ZTsKLSAgICBtX2Fn
ZW50LT5jb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShlcnJvciwgJm91dF9yZXR1cm5WYWx1ZSk7
Ci0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICByZXN1bHQtPnNldFN0cmluZygi
cmV0dXJuVmFsdWUiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVt
Q29uc3RhbnRWYWx1ZShvdXRfcmV0dXJuVmFsdWUpKTsKLQotICAgIGlmICghZXJyb3IubGVuZ3Ro
KCkpCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQs
IFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJy
b3IsIFdURk1vdmUoZXJyb3IpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMj
IyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBlbnVtLXZhbHVlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5o
IgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBGcm9udGVuZFJvdXRlcjsK
LQotY2xhc3MgRXZlbnREb21haW5Gcm9udGVuZERpc3BhdGNoZXIgewotICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIEV2ZW50RG9tYWluRnJvbnRlbmREaXNwYXRjaGVy
KEZyb250ZW5kUm91dGVyJiBmcm9udGVuZFJvdXRlcikgOiBtX2Zyb250ZW5kUm91dGVyKGZyb250
ZW5kUm91dGVyKSB7IH0KLSAgICAgICAgLy8gTmFtZWQgYWZ0ZXIgcGFyYW1ldGVyICdwYXJhbWV0
ZXInIHdoaWxlIGdlbmVyYXRpbmcgY29tbWFuZC9ldmVudCBldmVudFdpdGhFbnVtUGFyYW1ldGVy
LgotICAgICAgICBlbnVtIGNsYXNzIFBhcmFtZXRlciB7Ci0gICAgICAgICAgICBTaGFyZWQgPSAw
LAotICAgICAgICAgICAgQmxhY2sgPSA0LAotICAgICAgICAgICAgV2hpdGUgPSA1LAotICAgICAg
ICB9OyAvLyBlbnVtIGNsYXNzIFBhcmFtZXRlcgotICAgIHZvaWQgZXZlbnRXaXRoRW51bVBhcmFt
ZXRlcihQYXJhbWV0ZXIgcGFyYW1ldGVyKTsKLXByaXZhdGU6Ci0gICAgRnJvbnRlbmRSb3V0ZXIm
IG1fZnJvbnRlbmRSb3V0ZXI7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBF
bmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZW51bS12YWx1ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0
Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91
dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVj
dG9yIHsKLQotdm9pZCBFdmVudERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcjo6ZXZlbnRXaXRoRW51
bVBhcmFtZXRlcihQYXJhbWV0ZXIgcGFyYW1ldGVyKQotewotICAgIFJlZjxKU09OOjpPYmplY3Q+
IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+
c2V0U3RyaW5nKCJtZXRob2QiX3MsICJFdmVudERvbWFpbi5ldmVudFdpdGhFbnVtUGFyYW1ldGVy
Il9zKTsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBwYXJhbXNPYmplY3QgPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOwotICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJwYXJhbWV0ZXIiX3MsIElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShwYXJh
bWV0ZXIpKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiX3MsIFdURk1vdmUo
cGFyYW1zT2JqZWN0KSk7Ci0KLSAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChqc29uTWVz
c2FnZS0+dG9KU09OU3RyaW5nKCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQot
IyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGVudW0tdmFsdWVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFtZXNw
YWNlIEluc3BlY3RvciB7Ci0KLQotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotLy8gRm9y
d2FyZCBkZWNsYXJhdGlvbnMuCi1uYW1lc3BhY2UgVHlwZURvbWFpbiB7Ci1lbnVtIGNsYXNzIFR5
cGVEb21haW5FbnVtOwotfSAvLyBUeXBlRG9tYWluCi0vLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJh
dGlvbnMuCi0KLQotCi0KLW5hbWVzcGFjZSBUZXN0SGVscGVycyB7Ci0KLVN0cmluZyBnZXRFbnVt
Q29uc3RhbnRWYWx1ZShpbnQgY29kZSk7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBn
ZXRFbnVtQ29uc3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkKLXsKLSAgICByZXR1cm4gZ2V0RW51bUNv
bnN0YW50VmFsdWUoc3RhdGljX2Nhc3Q8aW50PihlbnVtVmFsdWUpKTsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgVGVzdEhlbHBlcnMKLQotbmFtZXNwYWNlIFR5cGVEb21haW4gewotLyogICovCi1lbnVt
IGNsYXNzIFR5cGVEb21haW5FbnVtIHsKLSAgICBTaGFyZWQgPSAwLAotICAgIFJlZCA9IDEsCi0g
ICAgR3JlZW4gPSAyLAotICAgIEJsdWUgPSAzLAotfTsgLy8gZW51bSBjbGFzcyBUeXBlRG9tYWlu
RW51bQotfSAvLyBUeXBlRG9tYWluCi0KLQotCi1uYW1lc3BhY2UgVGVzdEhlbHBlcnMgewotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBQcm90b2NvbEVudW1UeXBlPgotT3B0aW9uYWw8UHJvdG9jb2xFbnVt
VHlwZT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYpOwotCi0vLyBFbnVt
cyBpbiB0aGUgJ1R5cGVEb21haW4nIERvbWFpbgotdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVj
dG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW0+IHBhcnNlRW51bVZhbHVl
RnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51
bT4oY29uc3QgU3RyaW5nJik7Ci0KLX0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCi0KLX0gLy8g
bmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi1uYW1lc3Bh
Y2UgV1RGIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwotCi0v
LyBIYXNoIGRlY2xhcmF0aW9ucyBpbiB0aGUgJ1R5cGVEb21haW4nIERvbWFpbgotdGVtcGxhdGU8
Pgotc3RydWN0IERlZmF1bHRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46OlR5
cGVEb21haW5FbnVtPiB7Ci0gICAgdHlwZWRlZiBJbnRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlR5cGVEb21haW46OlR5cGVEb21haW5FbnVtPiBIYXNoOwotfTsKLQotfSAvLyBuYW1lc3BhY2Ug
V1RGCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBlbnVtLXZhbHVlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmpl
Y3RzLmgiCi0KLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1uYW1lc3BhY2UgUHJvdG9jb2wg
ewotCi1uYW1lc3BhY2UgVGVzdEhlbHBlcnMgewotCi1zdGF0aWMgY29uc3QgY2hhciogY29uc3Qg
ZW51bV9jb25zdGFudF92YWx1ZXNbXSA9IHsKLSAgICAic2hhcmVkIiwKLSAgICAicmVkIiwKLSAg
ICAiZ3JlZW4iLAotICAgICJibHVlIiwKLSAgICAiYmxhY2siLAotICAgICJ3aGl0ZSIsCi0gICAg
ImN5YW4iLAotICAgICJtYWdlbnRhIiwKLSAgICAieWVsbG93IiwKLX07Ci0KLVN0cmluZyBnZXRF
bnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgewotICAgIHJldHVybiBlbnVtX2NvbnN0YW50X3Zh
bHVlc1tjb2RlXTsKLX0KLQotLy8gRW51bXMgaW4gdGhlICdUeXBlRG9tYWluJyBEb21haW4KLXRl
bXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46OlR5cGVE
b21haW5FbnVtPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6
VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW0+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcp
Ci17Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0gewotICAgICAg
ICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46OlR5cGVEb21haW5FbnVt
OjpTaGFyZWQsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFp
bjo6VHlwZURvbWFpbkVudW06OlJlZCwKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3Rv
Y29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51bTo6R3JlZW4sCi0gICAgICAgIChzaXplX3Qp
SW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW06OkJsdWUsCi0g
ICAgfTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDQ7ICsraSkKLSAgICAgICAgaWYgKHBy
b3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkK
LSAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlw
ZURvbWFpbkVudW0pY29uc3RhbnRWYWx1ZXNbaV07Ci0KLSAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwotfQotCi0KLX0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCi0KLQotCi19IC8vIG5hbWVzcGFj
ZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFj
a2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVt
LXZhbHVlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0
Y2hlcnMuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLUBwcm90b2NvbCBUZXN0UHJv
dG9jb2xDb21tYW5kRG9tYWluRG9tYWluSGFuZGxlcjsKLQotbmFtZXNwYWNlIEluc3BlY3RvciB7
Ci0KLQotY2xhc3MgT2JqQ0luc3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlciBm
aW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIgewot
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIE9iakNJbnNwZWN0b3JD
b21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sQ29tbWFuZERvbWFp
bkRvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KLSAgICB2
b2lkIGNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlKGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKLXBy
aXZhdGU6Ci0gICAgUmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbENvbW1hbmREb21haW5Eb21haW5I
YW5kbGVyPj4gbV9kZWxlZ2F0ZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0j
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVz
dFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xJ
bnRlcm5hbC5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2lu
Y2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi12b2lk
IE9iakNJbnNwZWN0b3JDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmNvbW1hbmRXaXRo
RW51bVJldHVyblZhbHVlKGxvbmcgcmVxdWVzdElkKQotewotICAgIGlmICghW21fZGVsZWdhdGUg
cmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZVdp
dGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgewotICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNo
ZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0NvbW1hbmREb21haW4uY29tbWFuZFdpdGhFbnVtUmV0dXJu
VmFsdWUnIHdhcyBub3QgZm91bmQiX3MpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5z
ZW5kUGVuZGluZ0Vycm9ycygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWQgZXJy
b3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6
U2VydmVyRXJyb3IsIGVycm9yKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBl
bmRpbmdFcnJvcnMoKTsKLSAgICB9OwotCi0gICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihUZXN0
UHJvdG9jb2xDb21tYW5kRG9tYWluQ29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWVSZXR1cm5WYWx1
ZSByZXR1cm5WYWx1ZSkgewotICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHRPYmplY3Qg
PSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmlu
ZygicmV0dXJuVmFsdWUiX3MsIHRvUHJvdG9jb2xTdHJpbmcocmV0dXJuVmFsdWUpKTsKLSAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShy
ZXN1bHRPYmplY3QpLCBmYWxzZSk7Ci0gICAgfTsKLQotICAgIFttX2RlbGVnYXRlIGNvbW1hbmRX
aXRoRW51bVJldHVyblZhbHVlV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNz
Q2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKLX0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLQot
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90
b2NvbC5oPgotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRl
cmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0Ci1AcHJvcGVydHkgKG5v
bmF0b21pYywgcmV0YWluLCBzZXR0ZXI9c2V0Q29tbWFuZERvbWFpbkhhbmRsZXI6KSBpZDxUZXN0
UHJvdG9jb2xDb21tYW5kRG9tYWluRG9tYWluSGFuZGxlcj4gY29tbWFuZERvbWFpbkhhbmRsZXI7
Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFRlc3RQcm90b2NvbEV2ZW50RG9tYWlu
RG9tYWluRXZlbnREaXNwYXRjaGVyICpldmVudERvbWFpbkV2ZW50RGlzcGF0Y2hlcjsKLUBlbmQK
LQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5o
IgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2ltcG9ydCAiVGVzdFByb3Rv
Y29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5h
dGVEaXNwYXRjaGFibGVBZ2VudC5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFi
bGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVj
dG9yOwotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgotewotICAg
IEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci0gICAgaWQ8VGVz
dFByb3RvY29sQ29tbWFuZERvbWFpbkRvbWFpbkhhbmRsZXI+IF9jb21tYW5kRG9tYWluSGFuZGxl
cjsKLSAgICBUZXN0UHJvdG9jb2xFdmVudERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqX2V2
ZW50RG9tYWluRXZlbnREaXNwYXRjaGVyOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhD
b250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsK
LSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJu
IG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250cm9s
bGVyOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBbX2Nv
bW1hbmREb21haW5IYW5kbGVyIHJlbGVhc2VdOwotICAgIFtfZXZlbnREb21haW5FdmVudERpc3Bh
dGNoZXIgcmVsZWFzZV07Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi0tICh2b2lkKXNldENv
bW1hbmREb21haW5IYW5kbGVyOihpZDxUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluRG9tYWluSGFu
ZGxlcj4paGFuZGxlcgotewotICAgIGlmIChoYW5kbGVyID09IF9jb21tYW5kRG9tYWluSGFuZGxl
cikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgW19jb21tYW5kRG9tYWluSGFuZGxlciByZWxlYXNl
XTsKLSAgICBfY29tbWFuZERvbWFpbkhhbmRsZXIgPSBbaGFuZGxlciByZXRhaW5dOwotCi0gICAg
YXV0byBhbHRlcm5hdGVEaXNwYXRjaGVyID0gbWFrZVVuaXF1ZTxPYmpDSW5zcGVjdG9yQ29tbWFu
ZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPihoYW5kbGVyKTsKLSAgICBhdXRvIGFsdGVybmF0ZUFn
ZW50ID0gbWFrZVVuaXF1ZTxBbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudDxDb21tYW5kRG9tYWlu
QmFja2VuZERpc3BhdGNoZXIsIEFsdGVybmF0ZUNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hl
cj4+KCJDb21tYW5kRG9tYWluIl9zLCAqX2NvbnRyb2xsZXIsIFdURk1vdmUoYWx0ZXJuYXRlRGlz
cGF0Y2hlcikpOwotICAgIF9jb250cm9sbGVyLT5hcHBlbmRFeHRyYUFnZW50KFdURk1vdmUoYWx0
ZXJuYXRlQWdlbnQpKTsKLX0KLQotLSAoaWQ8VGVzdFByb3RvY29sQ29tbWFuZERvbWFpbkRvbWFp
bkhhbmRsZXI+KWNvbW1hbmREb21haW5IYW5kbGVyCi17Ci0gICAgcmV0dXJuIF9jb21tYW5kRG9t
YWluSGFuZGxlcjsKLX0KLQotLSAoVGVzdFByb3RvY29sRXZlbnREb21haW5Eb21haW5FdmVudERp
c3BhdGNoZXIgKilldmVudERvbWFpbkV2ZW50RGlzcGF0Y2hlcgotewotICAgIGlmICghX2V2ZW50
RG9tYWluRXZlbnREaXNwYXRjaGVyKQotICAgICAgICBfZXZlbnREb21haW5FdmVudERpc3BhdGNo
ZXIgPSBbW1Rlc3RQcm90b2NvbEV2ZW50RG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyIGFsbG9j
XSBpbml0V2l0aENvbnRyb2xsZXI6X2NvbnRyb2xsZXJdOwotICAgIHJldHVybiBfZXZlbnREb21h
aW5FdmVudERpc3BhdGNoZXI7Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbENvbmZpZ3VyYXRpb24ubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50
RGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZh
bHVlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNp
bXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFt
ZXNwYWNlIEluc3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbEV2ZW50RG9t
YWluRG9tYWluRXZlbnREaXNwYXRjaGVyCi17Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250
cm9sbGVyKiBfY29udHJvbGxlcjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJv
bGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCi17Ci0gICAg
c2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7
Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIpOwotICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsK
LSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClldmVudFdpdGhFbnVtUGFyYW1ldGVyV2l0
aFBhcmFtZXRlcjooVGVzdFByb3RvY29sRXZlbnREb21haW5FdmVudFdpdGhFbnVtUGFyYW1ldGVy
UGFyYW1ldGVyKXBhcmFtZXRlcgotewotICAgIGNvbnN0IEZyb250ZW5kUm91dGVyJiByb3V0ZXIg
PSBfY29udHJvbGxlci0+ZnJvbnRlbmRSb3V0ZXIoKTsKLQotICAgIFJlZjxKU09OOjpPYmplY3Q+
IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+
c2V0U3RyaW5nKCJtZXRob2QiX3MsICJFdmVudERvbWFpbi5ldmVudFdpdGhFbnVtUGFyYW1ldGVy
Il9zKTsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBwYXJhbXNPYmplY3QgPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOwotICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJwYXJhbWV0ZXIiX3MsIHRv
UHJvdG9jb2xTdHJpbmcocGFyYW1ldGVyKSk7Ci0gICAganNvbk1lc3NhZ2UtPnNldE9iamVjdCgi
cGFyYW1zIl9zLCBXVEZNb3ZlKHBhcmFtc09iamVjdCkpOwotICAgIHJvdXRlci5zZW5kRXZlbnQo
anNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVl
cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBv
cnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJ
UHJvdG9jb2xKU09OT2JqZWN0Lmg+Ci0KLQotCi0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIs
IFRlc3RQcm90b2NvbFBsYXRmb3JtKSB7Ci0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1BbGwsCi0g
ICAgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3Jt
SU9TLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1MsCi19OwotCi0KLXR5cGVkZWYgTlNf
RU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtKSB7Ci0gICAgVGVzdFBy
b3RvY29sVHlwZURvbWFpbkVudW1TaGFyZWQsCi0gICAgVGVzdFByb3RvY29sVHlwZURvbWFpbkVu
dW1SZWQsCi0gICAgVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1HcmVlbiwKLSAgICBUZXN0UHJv
dG9jb2xUeXBlRG9tYWluRW51bUJsdWUsCi19OwotCi0KLQotQHByb3RvY29sIFRlc3RQcm90b2Nv
bENvbW1hbmREb21haW5Eb21haW5IYW5kbGVyIDxOU09iamVjdD4KLUBvcHRpb25hbAotLSAodm9p
ZCljb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZVdpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5T
U3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoVGVz
dFByb3RvY29sQ29tbWFuZERvbWFpbkNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlUmV0dXJuVmFs
dWUgcmV0dXJuVmFsdWUpKXN1Y2Nlc3NDYWxsYmFjazsKLUBlbmQKLQotX19hdHRyaWJ1dGVfXygo
dmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbEV2ZW50RG9t
YWluRG9tYWluRXZlbnREaXNwYXRjaGVyIDogTlNPYmplY3QKLS0gKHZvaWQpZXZlbnRXaXRoRW51
bVBhcmFtZXRlcldpdGhQYXJhbWV0ZXI6KFRlc3RQcm90b2NvbEV2ZW50RG9tYWluRXZlbnRXaXRo
RW51bVBhcmFtZXRlclBhcmFtZXRlcilwYXJhbWV0ZXI7Ci1AZW5kCi0KLQotI2ltcG9ydCA8V2Vi
SW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgotCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJ
bnRlcm5hbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMu
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0
ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRl
LmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xs
ZXIuaD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLUBpbnRlcmZhY2UgVGVzdFByb3Rv
Y29sRXZlbnREb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKFByaXZhdGUpCi0tIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihJbnNwZWN0b3I6OkF1Z21lbnRhYmxlSW5zcGVjdG9y
Q29udHJvbGxlciopY29udHJvbGxlcjsKLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbEludGVybmFsLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJU
ZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29u
dmVyc2lvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IE9iakNFbnVtVHlwZT4KLU9wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5n
KGNvbnN0IFN0cmluZyYgdmFsdWUpOwotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmco
VGVzdFByb3RvY29sUGxhdGZvcm0gdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAg
Y2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDoKLSAgICAgICAgcmV0dXJuICJhbGwiX3M7Ci0g
ICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM6Ci0gICAgICAgIHJldHVybiAiZ2Vu
ZXJpYyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOgotICAgICAgICByZXR1
cm4gImlvcyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M6Ci0gICAgICAg
IHJldHVybiAibWFjb3MiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9u
YWw8VGVzdFByb3RvY29sUGxhdGZvcm0+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcm
IHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiYWxsIikKLSAgICAgICAgcmV0dXJuIFRlc3RQ
cm90b2NvbFBsYXRmb3JtQWxsOwotICAgIGlmICh2YWx1ZSA9PSAiZ2VuZXJpYyIpCi0gICAgICAg
IHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM7Ci0gICAgaWYgKHZhbHVlID09ICJp
b3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1JT1M7Ci0gICAgaWYgKHZh
bHVlID09ICJtYWNvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09T
OwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLQotaW5saW5lIFN0cmluZyB0b1Byb3Rv
Y29sU3RyaW5nKFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtIHZhbHVlKQotewotICAgIHN3aXRj
aCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1TaGFyZWQ6Ci0g
ICAgICAgIHJldHVybiAic2hhcmVkIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sVHlwZURvbWFp
bkVudW1SZWQ6Ci0gICAgICAgIHJldHVybiAicmVkIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29s
VHlwZURvbWFpbkVudW1HcmVlbjoKLSAgICAgICAgcmV0dXJuICJncmVlbiJfczsKLSAgICBjYXNl
IFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtQmx1ZToKLSAgICAgICAgcmV0dXJuICJibHVlIl9z
OwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFR5
cGVEb21haW5FbnVtPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsK
LSAgICBpZiAodmFsdWUgPT0gInNoYXJlZCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xU
eXBlRG9tYWluRW51bVNoYXJlZDsKLSAgICBpZiAodmFsdWUgPT0gInJlZCIpCi0gICAgICAgIHJl
dHVybiBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bVJlZDsKLSAgICBpZiAodmFsdWUgPT0gImdy
ZWVuIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtR3JlZW47Ci0g
ICAgaWYgKHZhbHVlID09ICJibHVlIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFR5cGVE
b21haW5FbnVtQmx1ZTsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi19IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0
ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJv
dG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwot
Ci1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoVHlwZURvbWFpbkRvbWFp
bikKLQotKyAodm9pZClfcGFyc2VUeXBlRG9tYWluRW51bTooTlNOdW1iZXIgKiopb3V0VmFsdWUg
ZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucyAoVHlwZURvbWFpbkRvbWFpbikKLQotKyAodm9pZClfcGFy
c2VUeXBlRG9tYWluRW51bTooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBh
eWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0
cmluZyBjbGFzc10pOwotICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtPiBy
ZXN1bHQgPSBJbnNwZWN0b3I6OmZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xUeXBlRG9t
YWluRW51bT4ocGF5bG9hZCk7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfRU5VTV9WQUxV
RShyZXN1bHQsIEAiVHlwZURvbWFpbkVudW0iKTsKLSAgICAqb3V0VmFsdWUgPSBAKHJlc3VsdC52
YWx1ZSgpKTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29s
SW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0j
aW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotI2lt
cG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVz
aW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2V2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmct
ZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZXZlbnQtdGFyZ2V0VHlw
ZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1yZXN1bHQKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGQ4OWE5N2ZmNTVkZmVjNDM5N2UwZWI3NGFiNWRmZDFlNDQwZTc0
ZmIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQv
ZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1yZXN1
bHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMDYzICswLDAgQEAKLSMjIyBCZWdpbiBGaWxlOiBJbnNw
ZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLS8vIERvbWFpbgotSW5z
cGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiRG9tYWluIiwgbnVsbCk7Ci1JbnNwZWN0b3JC
YWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiRG9tYWluLkNvbW1hbmQiLCBudWxsLCBbXSwgW10pOwot
SW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckV2ZW50KCJEb21haW4uRXZlbnQiLCBbInBhZ2UiLCAi
d29ya2VyIl0sIFtdKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW5EaXNwYXRjaGVy
ID0gSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRpc3BhdGNoZXIuYmluZChJbnNwZWN0b3JCYWNr
ZW5kLCAiRG9tYWluIik7Ci1JbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJEb21haW4i
LCBbInBhZ2UiXSk7Ci0jIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwot
Ci0jIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1k
b21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKLSNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0KLW5hbWVzcGFj
ZSBJbnNwZWN0b3IgewotCi1jbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJs
aWM6Ci0gICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNo
ZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRj
aGVyKTsgfQotICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0
IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KLXByaXZhdGU6Ci0gICAgUmVm
UHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwotfTsKLQotCi1jbGFz
cyBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+QWx0ZXJuYXRlRG9tYWluQmFj
a2VuZERpc3BhdGNoZXIoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChsb25nIGNhbGxJ
ZCkgPSAwOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSNlbmRpZiAvLyBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSMjIyBFbmQgRmlsZTogVGVzdEFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2Vu
ZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudC10
YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVk
ZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsK
LQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotY2xhc3MgQWx0
ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXI7Ci0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0KLWNsYXNzIERvbWFpbkJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlciB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIENvbW1hbmQoRXJyb3JTdHJpbmcm
KSA9IDA7Ci1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB+RG9tYWluQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyKCk7Ci19OwotCi1jbGFzcyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1
YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGlj
IFJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwg
RG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdm9pZCBkaXNwYXRjaChsb25n
IHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVz
c2FnZSkgZmluYWw7Ci1wcml2YXRlOgotICAgIHZvaWQgQ29tbWFuZChsb25nIHJlcXVlc3RJZCwg
UmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKLSNpZiBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLXB1YmxpYzoKLSAgICB2b2lkIHNldEFsdGVybmF0ZURp
c3BhdGNoZXIoQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3Bh
dGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQot
cHJpdmF0ZToKLSAgICBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciogbV9hbHRlcm5h
dGVEaXNwYXRjaGVyIHsgbnVsbHB0ciB9OwotI2VuZGlmCi1wcml2YXRlOgotICAgIERvbWFpbkJh
Y2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiwgRG9tYWluQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyKik7Ci0gICAgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50
IHsgbnVsbHB0ciB9OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZp
bGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tl
bmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVu
dC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFs
dWVzLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCi0jaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgotI2VuZGlm
Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1Eb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXI6On5Eb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KLQotUmVmPERvbWFpbkJh
Y2tlbmREaXNwYXRjaGVyPiBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEJhY2tlbmRE
aXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyKiBhZ2VudCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEb21haW5CYWNrZW5kRGlz
cGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKLX0KLQotRG9tYWluQmFja2VuZERp
c3BhdGNoZXI6OkRvbWFpbkJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNr
ZW5kRGlzcGF0Y2hlciwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKLSAg
ICA6IFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQotICAg
ICwgbV9hZ2VudChhZ2VudCkKLXsKLSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRp
c3BhdGNoZXJGb3JEb21haW4oIkRvbWFpbiJfcywgdGhpcyk7Ci19Ci0KLXZvaWQgRG9tYWluQmFj
a2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1l
dGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQotewotICAgIFJlZjxEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7Ci0KLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0
PiBwYXJhbWV0ZXJzOwotICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0
ZXJzKTsKLQotICAgIGlmIChtZXRob2QgPT0gIkNvbW1hbmQiKQotICAgICAgICBDb21tYW5kKHJl
cXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRo
b2ROb3RGb3VuZCwgIidEb21haW4uIiArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKLX0K
LQotdm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVlc3RJZCwg
UmVmUHRyPEpTT046Ok9iamVjdD4mJikKLXsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKLSAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAg
IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+Q29tbWFuZChyZXF1ZXN0SWQpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNP
Tjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIG1fYWdlbnQt
PkNvbW1hbmQoZXJyb3IpOwotCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQp
LCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQ
cm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJv
cikpOwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0
QmFja2VuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlz
cGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRhcmdl
dFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNs
YXNzIEZyb250ZW5kUm91dGVyOwotCi1jbGFzcyBEb21haW5Gcm9udGVuZERpc3BhdGNoZXIgewot
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIERvbWFpbkZyb250ZW5k
RGlzcGF0Y2hlcihGcm9udGVuZFJvdXRlciYgZnJvbnRlbmRSb3V0ZXIpIDogbV9mcm9udGVuZFJv
dXRlcihmcm9udGVuZFJvdXRlcikgeyB9Ci0gICAgdm9pZCBFdmVudCgpOwotcHJpdmF0ZToKLSAg
ICBGcm9udGVuZFJvdXRlciYgbV9mcm9udGVuZFJvdXRlcjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0KLSMj
IyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1
Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVy
cy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewotCi12b2lkIERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcjo6RXZlbnQoKQotewotICAgIFJlZjxK
U09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBq
c29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOwotCi0g
ICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygp
KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEZy
b250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmpl
Y3RzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudC10YXJnZXRUeXBl
LW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRp
b25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotbmFtZXNwYWNlIFByb3RvY29s
IHsKLQotCi0KLQotCi0KLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLQot
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdn
YWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgot
Ci0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0K
LX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0j
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBl
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5o
PgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQotQHByb3RvY29sIFRlc3RQcm90b2NvbERv
bWFpbkRvbWFpbkhhbmRsZXI7Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLWNsYXNzIE9i
akNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5h
dGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
Ci1wdWJsaWM6Ci0gICAgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyKGlkPFRl
c3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhh
bmRsZXI7IH0KLSAgICB2b2lkIENvbW1hbmQobG9uZyByZXF1ZXN0SWQpIGZpbmFsOwotcHJpdmF0
ZToKLSAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4+IG1f
ZGVsZWdhdGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUu
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0
ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgot
Ci0jaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotCi1uYW1l
c3BhY2UgSW5zcGVjdG9yIHsKLQotdm9pZCBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3Bh
dGNoZXI6OkNvbW1hbmQobG9uZyByZXF1ZXN0SWQpCi17Ci0gICAgaWYgKCFbbV9kZWxlZ2F0ZSBy
ZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKENvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazpzdWNj
ZXNzQ2FsbGJhY2s6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJv
dG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwg
IidEb21haW4uQ29tbWFuZCcgd2FzIG5vdCBmb3VuZCJfcyk7Ci0gICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmRE
aXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgIH07Ci0KLSAgICBpZCBzdWNjZXNzQ2FsbGJh
Y2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVz
dElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7Ci0gICAgfTsKLQotICAgIFttX2Rl
bGVnYXRlIENvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxs
YmFjazpzdWNjZXNzQ2FsbGJhY2tdOwotfQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgot
Ci0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdn
YWJsZVR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+Ci0KLV9fYXR0cmlidXRlX18o
KHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1
cmF0aW9uIDogTlNPYmplY3QKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4sIHNldHRlcj1z
ZXREb21haW5IYW5kbGVyOikgaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4gZG9t
YWluSGFuZGxlcjsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgVGVzdFByb3RvY29s
RG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyICpkb21haW5FdmVudERpc3BhdGNoZXI7Ci1AZW5k
Ci0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dh
YmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKLQotI2ltcG9ydCAiVGVzdFBy
b3RvY29sSW50ZXJuYWwuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVy
cy5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQu
aD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxl
ci5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERp
c3BhdGNoZXJzLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcnMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGltcGxlbWVudGF0
aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KLXsKLSAgICBBdWdtZW50YWJsZUluc3BlY3Rv
ckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotICAgIGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFp
bkhhbmRsZXI+IF9kb21haW5IYW5kbGVyOwotICAgIFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkV2
ZW50RGlzcGF0Y2hlciAqX2RvbWFpbkV2ZW50RGlzcGF0Y2hlcjsKLX0KLQotLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKilj
b250cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0g
ICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIpOwotICAgIF9jb250cm9s
bGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClkZWFsbG9j
Ci17Ci0gICAgW19kb21haW5IYW5kbGVyIHJlbGVhc2VdOwotICAgIFtfZG9tYWluRXZlbnREaXNw
YXRjaGVyIHJlbGVhc2VdOwotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAodm9pZClzZXRE
b21haW5IYW5kbGVyOihpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiloYW5kbGVy
Ci17Ci0gICAgaWYgKGhhbmRsZXIgPT0gX2RvbWFpbkhhbmRsZXIpCi0gICAgICAgIHJldHVybjsK
LQotICAgIFtfZG9tYWluSGFuZGxlciByZWxlYXNlXTsKLSAgICBfZG9tYWluSGFuZGxlciA9IFto
YW5kbGVyIHJldGFpbl07Ci0KLSAgICBhdXRvIGFsdGVybmF0ZURpc3BhdGNoZXIgPSBtYWtlVW5p
cXVlPE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7Ci0gICAg
YXV0byBhbHRlcm5hdGVBZ2VudCA9IG1ha2VVbmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdl
bnQ8RG9tYWluQmFja2VuZERpc3BhdGNoZXIsIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRj
aGVyPj4oIkRvbWFpbiJfcywgKl9jb250cm9sbGVyLCBXVEZNb3ZlKGFsdGVybmF0ZURpc3BhdGNo
ZXIpKTsKLSAgICBfY29udHJvbGxlci0+YXBwZW5kRXh0cmFBZ2VudChXVEZNb3ZlKGFsdGVybmF0
ZUFnZW50KSk7Ci19Ci0KLS0gKGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+KWRv
bWFpbkhhbmRsZXIKLXsKLSAgICByZXR1cm4gX2RvbWFpbkhhbmRsZXI7Ci19Ci0KLS0gKFRlc3RQ
cm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqKWRvbWFpbkV2ZW50RGlzcGF0Y2hl
cgotewotICAgIGlmICghX2RvbWFpbkV2ZW50RGlzcGF0Y2hlcikKLSAgICAgICAgX2RvbWFpbkV2
ZW50RGlzcGF0Y2hlciA9IFtbVGVzdFByb3RvY29sRG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVy
IGFsbG9jXSBpbml0V2l0aENvbnRyb2xsZXI6X2NvbnRyb2xsZXJdOwotICAgIHJldHVybiBfZG9t
YWluRXZlbnREaXNwYXRjaGVyOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xDb25maWd1cmF0aW9uLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVu
dERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnQt
dGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbgotLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJ
bnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNp
bXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0K
LUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xEb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIK
LXsKLSAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotfQot
Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3Rv
ckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAg
IGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7
Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQotCi0t
ICh2b2lkKUV2ZW50Ci17Ci0gICAgY29uc3QgRnJvbnRlbmRSb3V0ZXImIHJvdXRlciA9IF9jb250
cm9sbGVyLT5mcm9udGVuZFJvdXRlcigpOwotCi0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1l
c3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJp
bmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7Ci0gICAgcm91dGVyLnNlbmRFdmVudChq
c29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2wuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRhcmdl
dFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0
aW9uLmg+Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4K
LQotCi0KLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sUGxhdGZvcm0p
IHsKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbCwKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9y
bUdlbmVyaWMsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1JT1MsCi0gICAgVGVzdFByb3RvY29s
UGxhdGZvcm1NYWNPUywKLX07Ci0KLQotCi0KLQotQHByb3RvY29sIFRlc3RQcm90b2NvbERvbWFp
bkRvbWFpbkhhbmRsZXIgPE5TT2JqZWN0PgotQG9wdGlvbmFsCi0tICh2b2lkKUNvbW1hbmRXaXRo
RXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3Vj
Y2Vzc0NhbGxiYWNrOih2b2lkKF4pKHZvaWQpKXN1Y2Nlc3NDYWxsYmFjazsKLUBlbmQKLQotX19h
dHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90
b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciA6IE5TT2JqZWN0Ci0tICh2b2lkKUV2ZW50
OwotQGVuZAotCi0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0
aWJpbGl0eU9iamVjdHMuaD4KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVU
eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2lt
cG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJp
dmF0ZS5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250
cm9sbGVyLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi1AaW50ZXJmYWNlIFRlc3RQ
cm90b2NvbERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAoUHJpdmF0ZSkKLS0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEluc3BlY3Rvcjo6QXVnbWVudGFibGVJbnNwZWN0b3JD
b250cm9sbGVyKiljb250cm9sbGVyOwotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudC10YXJnZXRUeXBl
LW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9y
dCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgotCi1uYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgotT3B0aW9u
YWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7
Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xQbGF0Zm9ybSB2
YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRm
b3JtQWxsOgotICAgICAgICByZXR1cm4gImFsbCJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBs
YXRmb3JtR2VuZXJpYzoKLSAgICAgICAgcmV0dXJuICJnZW5lcmljIl9zOwotICAgIGNhc2UgVGVz
dFByb3RvY29sUGxhdGZvcm1JT1M6Ci0gICAgICAgIHJldHVybiAiaW9zIl9zOwotICAgIGNhc2Ug
VGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzoKLSAgICAgICAgcmV0dXJuICJtYWNvcyJfczsKLSAg
ICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xQbGF0Zm9y
bT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZh
bHVlID09ICJhbGwiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1BbGw7Ci0g
ICAgaWYgKHZhbHVlID09ICJnZW5lcmljIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBs
YXRmb3JtR2VuZXJpYzsKLSAgICBpZiAodmFsdWUgPT0gImlvcyIpCi0gICAgICAgIHJldHVybiBU
ZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzsKLSAgICBpZiAodmFsdWUgPT0gIm1hY29zIikKLSAgICAg
ICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M7Ci0gICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2
ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9y
dCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVBy
b3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsK
LQotCi0KLQotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1t
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVn
Z2FibGVUeXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xK
U09OT2JqZWN0UHJpdmF0ZS5oPgotI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQg
PHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZXZlbnRz
LXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2V2ZW50cy13aXRo
LW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDhhOTViYTU1OGNmNDYzOGVkZDNmYjJhMzExNmNkZTAzMzIyOTFhMzUuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZXZlbnRzLXdpdGgt
b3B0aW9uYWwtcGFyYW1ldGVycy5qc29uLXJlc3VsdAorKysgL2Rldi9udWxsCkBAIC0xLDEyMTcg
KzAsMCBAQAotIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFt
ZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0v
LyBEYXRhYmFzZQotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiRGF0YWJhc2UiLCBu
dWxsKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudCgiRGF0YWJhc2UuZGlkRXhlY3V0
ZU9wdGlvbmFsUGFyYW1ldGVycyIsIG51bGwsIFsiY29sdW1uTmFtZXMiLCAibm90ZXMiLCAidGlt
ZXN0YW1wIiwgInZhbHVlcyIsICJwYXlsb2FkIiwgInNxbEVycm9yIiwgInNjcmVlbkNvbG9yIiwg
ImFsdGVybmF0ZUNvbG9ycyIsICJwcmludENvbG9yIl0pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdp
c3RlckV2ZW50KCJEYXRhYmFzZS5kaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMiLCBudWxs
LCBbImNvbHVtbk5hbWVzIiwgIm5vdGVzIiwgInRpbWVzdGFtcCIsICJ2YWx1ZXMiLCAicGF5bG9h
ZCIsICJzcWxFcnJvciIsICJzY3JlZW5Db2xvciIsICJhbHRlcm5hdGVDb2xvcnMiLCAicHJpbnRD
b2xvciJdKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEYXRhYmFzZURpc3BhdGNoZXIgPSBJ
bnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRGlzcGF0Y2hlci5iaW5kKEluc3BlY3RvckJhY2tlbmQs
ICJEYXRhYmFzZSIpOwotSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiRGF0YWJhc2Ui
LCBudWxsKTsKLSMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0KLSMj
IyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJz
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdt
YSBvbmNlCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQot
I2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xh
c3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZvaWQgc2V0QmFj
a2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsg
bV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KLSAgICBCYWNrZW5k
RGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmRE
aXNwYXRjaGVyLmdldCgpOyB9Ci1wcml2YXRlOgotICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hl
cj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKLX07Ci0KLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgotCi0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
Ci0jIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0j
aW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10eXBlZGVmIFN0cmluZyBFcnJvclN0
cmluZzsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0
QmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0
Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgt
b3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0QmFja2VuZERp
c3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVu
ZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL05l
dmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jaWYgRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jaW5jbHVkZSAiVGVzdEFsdGVy
bmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEJh
Y2tlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3Bh
dGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1v
cHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3Rz
LmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEZyb250ZW5kUm91dGVy
OwotCi1jbGFzcyBEYXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hlciB7Ci0gICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgRGF0YWJhc2VGcm9udGVuZERpc3BhdGNoZXIoRnJv
bnRlbmRSb3V0ZXImIGZyb250ZW5kUm91dGVyKSA6IG1fZnJvbnRlbmRSb3V0ZXIoZnJvbnRlbmRS
b3V0ZXIpIHsgfQotICAgIHZvaWQgZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyhSZWZQdHI8
SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nKiBub3Rlcywg
Y29uc3QgZG91YmxlKiB0aW1lc3RhbXAsIFJlZlB0cjxKU09OOjpPYmplY3Q+IHZhbHVlcywgUmVm
UHRyPEpTT046OlZhbHVlPiBwYXlsb2FkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0
YWJhc2U6OkVycm9yPiBzcWxFcnJvciwgY29uc3QgU3RyaW5nKiBzY3JlZW5Db2xvciwgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IGFsdGVybmF0ZUNvbG9y
cywgY29uc3QgU3RyaW5nKiBwcmludENvbG9yKTsKLSAgICB2b2lkIGRpZEV4ZWN1dGVOb09wdGlv
bmFsUGFyYW1ldGVycyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiBjb2x1bW5OYW1lcywg
Y29uc3QgU3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUmVmUHRyPEpTT046Ok9iamVj
dD4gdmFsdWVzLCBSZWZQdHI8SlNPTjo6VmFsdWU+IHBheWxvYWQsIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVycm9yLCBjb25zdCBTdHJpbmcmIHNjcmVl
bkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4g
YWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcmIHByaW50Q29sb3IpOwotcHJpdmF0ZToKLSAg
ICBGcm9udGVuZFJvdXRlciYgbV9mcm9udGVuZFJvdXRlcjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0KLSMj
IyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXZvaWQgRGF0YWJh
c2VGcm9udGVuZERpc3BhdGNoZXI6OmRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMoUmVmUHRy
PEpTT046OkFycmF5T2Y8U3RyaW5nPj4gY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyogbm90ZXMs
IGNvbnN0IGRvdWJsZSogdGltZXN0YW1wLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiB2YWx1ZXMsIFJl
ZlB0cjxKU09OOjpWYWx1ZT4gcGF5bG9hZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpFcnJvcj4gc3FsRXJyb3IsIGNvbnN0IFN0cmluZyogc2NyZWVuQ29sb3IsIFJlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiBhbHRlcm5hdGVDb2xv
cnMsIGNvbnN0IFN0cmluZyogcHJpbnRDb2xvcikKLXsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBq
c29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNl
dFN0cmluZygibWV0aG9kIl9zLCAiRGF0YWJhc2UuZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVy
cyJfcyk7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKTsKLSAgICBpZiAoY29sdW1uTmFtZXMpCi0gICAgICAgIHBhcmFtc09iamVjdC0+
c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBjb2x1bW5OYW1lcyk7Ci0gICAgaWYgKG5vdGVzKQot
ICAgICAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygibm90ZXMiX3MsICpub3Rlcyk7Ci0gICAg
aWYgKHRpbWVzdGFtcCkKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXREb3VibGUoInRpbWVzdGFt
cCJfcywgKnRpbWVzdGFtcCk7Ci0gICAgaWYgKHZhbHVlcykKLSAgICAgICAgcGFyYW1zT2JqZWN0
LT5zZXRPYmplY3QoInZhbHVlcyJfcywgdmFsdWVzKTsKLSAgICBpZiAocGF5bG9hZCkKLSAgICAg
ICAgcGFyYW1zT2JqZWN0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgKnBheWxvYWQpOwotICAgIGlm
IChzcWxFcnJvcikKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9z
LCBzcWxFcnJvcik7Ci0gICAgaWYgKHNjcmVlbkNvbG9yKQotICAgICAgICBwYXJhbXNPYmplY3Qt
PnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsICpzY3JlZW5Db2xvcik7Ci0gICAgaWYgKGFsdGVy
bmF0ZUNvbG9ycykKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29s
b3JzIl9zLCBhbHRlcm5hdGVDb2xvcnMpOwotICAgIGlmIChwcmludENvbG9yKQotICAgICAgICBw
YXJhbXNPYmplY3QtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgKnByaW50Q29sb3IpOwotICAg
IGpzb25NZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyJfcywgV1RGTW92ZShwYXJhbXNPYmplY3Qp
KTsKLQotICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05T
dHJpbmcoKSk7Ci19Ci0KLXZvaWQgRGF0YWJhc2VGcm9udGVuZERpc3BhdGNoZXI6OmRpZEV4ZWN1
dGVOb09wdGlvbmFsUGFyYW1ldGVycyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiBjb2x1
bW5OYW1lcywgY29uc3QgU3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUmVmUHRyPEpT
T046Ok9iamVjdD4gdmFsdWVzLCBSZWZQdHI8SlNPTjo6VmFsdWU+IHBheWxvYWQsIFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVycm9yLCBjb25zdCBTdHJp
bmcmIHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNv
bG9yTGlzdD4gYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcmIHByaW50Q29sb3IpCi17Ci0g
ICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRhdGFiYXNlLmRpZEV4
ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyJfcyk7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcGFy
YW1zT2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBwYXJhbXNPYmplY3QtPnNl
dEFycmF5KCJjb2x1bW5OYW1lcyJfcywgY29sdW1uTmFtZXMpOwotICAgIHBhcmFtc09iamVjdC0+
c2V0U3RyaW5nKCJub3RlcyJfcywgbm90ZXMpOwotICAgIHBhcmFtc09iamVjdC0+c2V0RG91Ymxl
KCJ0aW1lc3RhbXAiX3MsIHRpbWVzdGFtcCk7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3Qo
InZhbHVlcyJfcywgdmFsdWVzKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldFZhbHVlKCJwYXlsb2Fk
Il9zLCBwYXlsb2FkKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgic3FsRXJyb3IiX3Ms
IHNxbEVycm9yKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3Ms
IHNjcmVlbkNvbG9yKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xv
cnMiX3MsIGFsdGVybmF0ZUNvbG9ycyk7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInBy
aW50Q29sb3IiX3MsIHByaW50Q29sb3IpOwotICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoInBh
cmFtcyJfcywgV1RGTW92ZShwYXJhbXNPYmplY3QpKTsKLQotICAgIG1fZnJvbnRlbmRSb3V0ZXIu
c2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNw
cAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25j
ZQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgot
I2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0K
LQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLS8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgot
bmFtZXNwYWNlIERhdGFiYXNlIHsKLWNsYXNzIEVycm9yOwotfSAvLyBEYXRhYmFzZQotLy8gRW5k
IG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgotCi0KLS8vIFR5cGVkZWZzLgotbmFtZXNwYWNlIERh
dGFiYXNlIHsKLS8qIFVuaXF1ZSBpZGVudGlmaWVyIG9mIERhdGFiYXNlIG9iamVjdC4gKi8KLXR5
cGVkZWYgU3RyaW5nIERhdGFiYXNlSWQ7Ci10eXBlZGVmIFN0cmluZyBQcmltYXJ5Q29sb3JzOwot
dHlwZWRlZiBKU09OOjpBcnJheU9mPFN0cmluZz4gQ29sb3JMaXN0OwotfSAvLyBEYXRhYmFzZQot
Ly8gRW5kIG9mIHR5cGVkZWZzLgotCi1uYW1lc3BhY2UgRGF0YWJhc2UgewotLyogRGF0YWJhc2Ug
ZXJyb3IuICovCi1jbGFzcyBFcnJvciA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKLXB1Ymxp
YzoKLSAgICBlbnVtIHsKLSAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAotICAgICAgICBNZXNzYWdl
U2V0ID0gMSA8PCAwLAotICAgICAgICBDb2RlU2V0ID0gMSA8PCAxLAotICAgICAgICBBbGxGaWVs
ZHNTZXQgPSAoTWVzc2FnZVNldCB8IENvZGVTZXQpCi0gICAgfTsKLQotICAgIHRlbXBsYXRlPGlu
dCBTVEFURT4KLSAgICBjbGFzcyBCdWlsZGVyIHsKLSAgICBwcml2YXRlOgotICAgICAgICBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiBtX3Jlc3VsdDsKLQotICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4g
QnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7
Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyKFJlZjwvKkVycm9yKi9KU09OOjpPYmplY3Q+
JiYgb2JqZWN0KQotICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBi
dWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwotICAgICAgICB9Ci0gICAgICAgIGZy
aWVuZCBjbGFzcyBFcnJvcjsKLSAgICBwdWJsaWM6Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8
IE1lc3NhZ2VTZXQ+JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNZXNzYWdlU2V0KSwgcHJvcGVy
dHlfbWVzc2FnZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5n
KCJtZXNzYWdlIl9zLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1lc3Nh
Z2VTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29kZVNldD4m
IHNldENvZGUoaW50IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgQ29kZVNldCksIHByb3BlcnR5X2NvZGVfYWxyZWFkeV9zZXQpOwotICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldEludGVnZXIoImNvZGUiX3MsIHZhbHVlKTsKLSAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8Q29kZVNldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIFJlZjxF
cnJvcj4gcmVsZWFzZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNU
QVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7Ci0gICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChzaXplb2YoRXJyb3IpID09IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5u
b3RfY2FzdCk7Ci0KLSAgICAgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25SZXN1bHQgPSBt
X3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOwotICAgICAgICAgICAgYXV0byByZXN1bHQgPSBXVEZN
b3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxFcnJvcj4qPigmanNvblJlc3VsdCkpOwotICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICAvKgotICAgICAq
IFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKLSAgICAgKiBSZWY8RXJyb3I+IHJlc3VsdCA9IEVycm9y
OjpjcmVhdGUoKQotICAgICAqICAgICAuc2V0TWVzc2FnZSguLi4pCi0gICAgICogICAgIC5zZXRD
b2RlKC4uLikKLSAgICAgKiAgICAgLnJlbGVhc2UoKTsKLSAgICAgKi8KLSAgICBzdGF0aWMgQnVp
bGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBCdWlsZGVy
PE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKLSAgICB9Ci19OwotCi19IC8v
IERhdGFiYXNlCi0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotCi0jaW5jbHVkZSA8d3RmL09wdGlv
bmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVj
dG9yIHsKLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3Rv
Y29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbE9iamVjdHMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlz
cGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRo
LW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRl
QmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi0KLQot
bmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25m
aWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5j
bHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotCi1uYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90
b2NvbC5oPgotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRl
cmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0Ci1AcHJvcGVydHkgKG5v
bmF0b21pYywgcmVhZG9ubHkpIFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluRXZlbnREaXNwYXRj
aGVyICpkYXRhYmFzZUV2ZW50RGlzcGF0Y2hlcjsKLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbi5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50
cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgi
Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0
ZURpc3BhdGNoYWJsZUFnZW50Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJs
ZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0
b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCi17Ci0gICAg
QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKLSAgICBUZXN0UHJv
dG9jb2xEYXRhYmFzZURvbWFpbkV2ZW50RGlzcGF0Y2hlciAqX2RhdGFiYXNlRXZlbnREaXNwYXRj
aGVyOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJs
ZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGlu
aXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29u
dHJvbGxlcik7Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxm
OwotfQotCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBbX2RhdGFiYXNlRXZlbnREaXNwYXRjaGVy
IHJlbGVhc2VdOwotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAoVGVzdFByb3RvY29sRGF0
YWJhc2VEb21haW5FdmVudERpc3BhdGNoZXIgKilkYXRhYmFzZUV2ZW50RGlzcGF0Y2hlcgotewot
ICAgIGlmICghX2RhdGFiYXNlRXZlbnREaXNwYXRjaGVyKQotICAgICAgICBfZGF0YWJhc2VFdmVu
dERpc3BhdGNoZXIgPSBbW1Rlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluRXZlbnREaXNwYXRjaGVy
IGFsbG9jXSBpbml0V2l0aENvbnRyb2xsZXI6X2NvbnRyb2xsZXJdOwotICAgIHJldHVybiBfZGF0
YWJhc2VFdmVudERpc3BhdGNoZXI7Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2
ZW50RGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVu
dHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQot
I2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDx3dGYvSlNP
TlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW1wbGVtZW50YXRp
b24gVGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5FdmVudERpc3BhdGNoZXIKLXsKLSAgICBBdWdt
ZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotfQotCi0tIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIq
KWNvbnRyb2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikK
LSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRy
b2xsZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWRpZEV4
ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnNXaXRoQ29sdW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmlu
Zz4qLyAqKiljb2x1bW5OYW1lcyBub3RlczooTlNTdHJpbmcgKiopbm90ZXMgdGltZXN0YW1wOihk
b3VibGUgKil0aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKiopdmFsdWVz
IHBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKilwYXlsb2FkIHNxbEVycm9yOihUZXN0
UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqKXNxbEVycm9yIHNjcmVlbkNvbG9yOihOU1N0cmluZyAq
KilzY3JlZW5Db2xvciBhbHRlcm5hdGVDb2xvcnM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKilh
bHRlcm5hdGVDb2xvcnMgcHJpbnRDb2xvcjooTlNTdHJpbmcgKiopcHJpbnRDb2xvcgotewotICAg
IGNvbnN0IEZyb250ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29udHJvbGxlci0+ZnJvbnRlbmRSb3V0
ZXIoKTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihj
b2x1bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFE
X09QVElPTkFMX1BBUkFNRVRFUihub3RlcywgQCJub3RlcyIpOwotICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUih2YWx1ZXMsIEAidmFsdWVzIik7Ci0gICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHBheWxvYWQsIEAicGF5bG9h
ZCIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihzcWxF
cnJvciwgQCJzcWxFcnJvciIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFM
X1BBUkFNRVRFUihzY3JlZW5Db2xvciwgQCJzY3JlZW5Db2xvciIpOwotICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihhbHRlcm5hdGVDb2xvcnMsIEAiYWx0ZXJu
YXRlQ29sb3JzIik7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1F
VEVSKHByaW50Q29sb3IsIEAicHJpbnRDb2xvciIpOwotCi0gICAgUmVmPEpTT046Ok9iamVjdD4g
anNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5z
ZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRhdGFiYXNlLmRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRl
cnMiX3MpOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHBhcmFtc09iamVjdCA9IEpTT046Ok9iamVj
dDo6Y3JlYXRlKCk7Ci0gICAgaWYgKGNvbHVtbk5hbWVzKQotICAgICAgICBwYXJhbXNPYmplY3Qt
PnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgdG9KU09OU3RyaW5nQXJyYXkoKCpjb2x1bW5OYW1l
cykpKTsKLSAgICBpZiAobm90ZXMpCi0gICAgICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJu
b3RlcyJfcywgKCpub3RlcykpOwotICAgIGlmICh0aW1lc3RhbXApCi0gICAgICAgIHBhcmFtc09i
amVjdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICgqdGltZXN0YW1wKSk7Ci0gICAgaWYgKHZh
bHVlcykKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgWygqdmFs
dWVzKSB0b0pTT05PYmplY3RdKTsKLSAgICBpZiAocGF5bG9hZCkKLSAgICAgICAgcGFyYW1zT2Jq
ZWN0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgWygqcGF5bG9hZCkgdG9KU09OT2JqZWN0XSk7Ci0g
ICAgaWYgKHNxbEVycm9yKQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgic3FsRXJy
b3IiX3MsIFsoKnNxbEVycm9yKSB0b0pTT05PYmplY3RdKTsKLSAgICBpZiAoc2NyZWVuQ29sb3Ip
Ci0gICAgICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgKCpzY3Jl
ZW5Db2xvcikpOwotICAgIGlmIChhbHRlcm5hdGVDb2xvcnMpCi0gICAgICAgIHBhcmFtc09iamVj
dC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5nQXJyYXkoKCphbHRl
cm5hdGVDb2xvcnMpKSk7Ci0gICAgaWYgKHByaW50Q29sb3IpCi0gICAgICAgIHBhcmFtc09iamVj
dC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCAoKnByaW50Q29sb3IpKTsKLSAgICBqc29uTWVz
c2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiX3MsIFdURk1vdmUocGFyYW1zT2JqZWN0KSk7Ci0gICAg
cm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwotfQotCi0tICh2
b2lkKWRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1dpdGhDb2x1bW5OYW1lczooTlNBcnJh
eS8qPE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMgbm90ZXM6KE5TU3RyaW5nICopbm90ZXMgdGlt
ZXN0YW1wOihkb3VibGUpdGltZXN0YW1wIHZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0ICop
dmFsdWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQgc3FsRXJyb3I6
KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKilzcWxFcnJvciBzY3JlZW5Db2xvcjooTlNTdHJp
bmcgKilzY3JlZW5Db2xvciBhbHRlcm5hdGVDb2xvcnM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAq
KWFsdGVybmF0ZUNvbG9ycyBwcmludENvbG9yOihOU1N0cmluZyAqKXByaW50Q29sb3IKLXsKLSAg
ICBjb25zdCBGcm9udGVuZFJvdXRlciYgcm91dGVyID0gX2NvbnRyb2xsZXItPmZyb250ZW5kUm91
dGVyKCk7Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihjb2x1
bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlS
RURfUEFSQU1FVEVSKG5vdGVzLCBAIm5vdGVzIik7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9S
RVFVSVJFRF9QQVJBTUVURVIodmFsdWVzLCBAInZhbHVlcyIpOwotICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHBheWxvYWQsIEAicGF5bG9hZCIpOwotICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHNxbEVycm9yLCBAInNxbEVycm9yIik7
Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoc2NyZWVuQ29sb3Is
IEAic2NyZWVuQ29sb3IiKTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFN
RVRFUihhbHRlcm5hdGVDb2xvcnMsIEAiYWx0ZXJuYXRlQ29sb3JzIik7Ci0gICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIocHJpbnRDb2xvciwgQCJwcmludENvbG9yIik7
Ci0KLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRGF0YWJhc2Uu
ZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIl9zKTsKLSAgICBSZWY8SlNPTjo6T2JqZWN0
PiBwYXJhbXNPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIHBhcmFtc09iamVj
dC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB0b0pTT05TdHJpbmdBcnJheShjb2x1bW5OYW1l
cykpOwotICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJub3RlcyJfcywgbm90ZXMpOwotICAg
IHBhcmFtc09iamVjdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIHRpbWVzdGFtcCk7Ci0gICAg
cGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgW3ZhbHVlcyB0b0pTT05PYmplY3Rd
KTsKLSAgICBwYXJhbXNPYmplY3QtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBbcGF5bG9hZCB0b0pT
T05PYmplY3RdKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIFtz
cWxFcnJvciB0b0pTT05PYmplY3RdKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygic2Ny
ZWVuQ29sb3IiX3MsIHNjcmVlbkNvbG9yKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldEFycmF5KCJh
bHRlcm5hdGVDb2xvcnMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KGFsdGVybmF0ZUNvbG9ycykpOwot
ICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCBwcmludENvbG9yKTsK
LSAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiX3MsIFdURk1vdmUocGFyYW1zT2Jq
ZWN0KSk7Ci0gICAgcm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkp
OwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNo
ZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxGb3Vu
ZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29s
SlNPTk9iamVjdC5oPgotCi0KLUBjbGFzcyBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yOwotCi10
eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xQbGF0Zm9ybSkgewotICAgIFRl
c3RQcm90b2NvbFBsYXRmb3JtQWxsLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYywK
LSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1h
Y09TLAotfTsKLQotCi0KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkp
Ci1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgOiBSV0lQcm90b2NvbEpTT05P
YmplY3QKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0
cmluZyAqLCBpZD4gKilwYXlsb2FkOwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xP
YmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7Ci0tIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZTooaW50KWNvZGU7Ci0v
KiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKm1lc3Nh
Z2U7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQgY29k
ZTsKLUBlbmQKLQotCi0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQot
QGludGVyZmFjZSBUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkV2ZW50RGlzcGF0Y2hlciA6IE5T
T2JqZWN0Ci0tICh2b2lkKWRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnNXaXRoQ29sdW1uTmFt
ZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKiljb2x1bW5OYW1lcyBub3RlczooTlNTdHJpbmcg
Kiopbm90ZXMgdGltZXN0YW1wOihkb3VibGUgKil0aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90b2Nv
bEpTT05PYmplY3QgKiopdmFsdWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKilw
YXlsb2FkIHNxbEVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqKXNxbEVycm9yIHNj
cmVlbkNvbG9yOihOU1N0cmluZyAqKilzY3JlZW5Db2xvciBhbHRlcm5hdGVDb2xvcnM6KE5TQXJy
YXkvKjxOU1N0cmluZz4qLyAqKilhbHRlcm5hdGVDb2xvcnMgcHJpbnRDb2xvcjooTlNTdHJpbmcg
KiopcHJpbnRDb2xvcjsKLS0gKHZvaWQpZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzV2l0
aENvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcyBub3Rlczoo
TlNTdHJpbmcgKilub3RlcyB0aW1lc3RhbXA6KGRvdWJsZSl0aW1lc3RhbXAgdmFsdWVzOihSV0lQ
cm90b2NvbEpTT05PYmplY3QgKil2YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0
ICopcGF5bG9hZCBzcWxFcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKXNxbEVycm9y
IHNjcmVlbkNvbG9yOihOU1N0cmluZyAqKXNjcmVlbkNvbG9yIGFsdGVybmF0ZUNvbG9yczooTlNB
cnJheS8qPE5TU3RyaW5nPiovICopYWx0ZXJuYXRlQ29sb3JzIHByaW50Q29sb3I6KE5TU3RyaW5n
ICopcHJpbnRDb2xvcjsKLUBlbmQKLQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9j
b2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJz
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9y
dCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0
ZS5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9s
bGVyLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi1AaW50ZXJmYWNlIFRlc3RQcm90
b2NvbERhdGFiYXNlRG9tYWluRXZlbnREaXNwYXRjaGVyIChQcml2YXRlKQotLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoQ29udHJvbGxlcjooSW5zcGVjdG9yOjpBdWdtZW50YWJsZUluc3BlY3RvckNv
bnRyb2xsZXIqKWNvbnRyb2xsZXI7Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xJbnRlcm5hbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlv
bmFsLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9S
V0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KLU9wdGlvbmFsPE9iakNFbnVtVHlwZT4g
ZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOwotCi1pbmxpbmUgU3RyaW5n
IHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sUGxhdGZvcm0gdmFsdWUpCi17Ci0gICAgc3dp
dGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDoKLSAgICAgICAg
cmV0dXJuICJhbGwiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM6Ci0g
ICAgICAgIHJldHVybiAiZ2VuZXJpYyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3Jt
SU9TOgotICAgICAgICByZXR1cm4gImlvcyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRm
b3JtTWFjT1M6Ci0gICAgICAgIHJldHVybiAibWFjb3MiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0
ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sUGxhdGZvcm0+IGZyb21Qcm90b2NvbFN0
cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiYWxsIikKLSAg
ICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOwotICAgIGlmICh2YWx1ZSA9PSAi
Z2VuZXJpYyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM7Ci0g
ICAgaWYgKHZhbHVlID09ICJpb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZv
cm1JT1M7Ci0gICAgaWYgKHZhbHVlID09ICJtYWNvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJv
dG9jb2xQbGF0Zm9ybU1hY09TOwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLQotCi19
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0
aW9uYWwtcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotCi0jaW1w
b3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIK
LSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0K
LXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zIChEYXRhYmFzZURvbWFpbikKLQotKyAodm9pZClfcGFyc2VEYXRhYmFzZUlk
OihOU1N0cmluZyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLSsgKHZvaWQp
X3BhcnNlUHJpbWFyeUNvbG9yczooTlNTdHJpbmcgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlk
KXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZUNvbG9yTGlzdDooTlNBcnJheS8qPE5TU3RyaW5nPiov
ICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotKyAodm9pZClfcGFyc2VFcnJv
cjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQp
cGF5bG9hZDsKLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zIChEYXRhYmFzZURvbWFpbikKLQotKyAodm9pZClfcGFyc2VEYXRhYmFzZUlkOihOU1N0
cmluZyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TU3RyaW5nIGNsYXNzXSk7Ci0gICAgKm91
dFZhbHVlID0gKE5TU3RyaW5nICopcGF5bG9hZDsKLX0KLQotKyAodm9pZClfcGFyc2VQcmltYXJ5
Q29sb3JzOihOU1N0cmluZyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewot
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TU3RyaW5nIGNsYXNz
XSk7Ci0gICAgKm91dFZhbHVlID0gKE5TU3RyaW5nICopcGF5bG9hZDsKLX0KLQotKyAodm9pZClf
cGFyc2VDb2xvckxpc3Q6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5
bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5
bG9hZCwgW05TQXJyYXkvKjxOU1N0cmluZz4qLyBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IChO
U0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilwYXlsb2FkOwotfQotCi0rICh2b2lkKV9wYXJzZUVycm9y
OihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClw
YXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNE
aWN0aW9uYXJ5IGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xEYXRhYmFz
ZUVycm9yIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07Ci19Ci0KLUBlbmQKLQotCi0j
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJu
YWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0
IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotI2ltcG9ydCA8
d3RmL0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5h
bWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbERhdGFi
YXNlRXJyb3IKLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBOU0Rp
Y3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZAotewotICAgIGlmICghKHNlbGYgPSBb
c3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AibWVzc2FnZSJdLCBAIm1lc3NhZ2UiKTsK
LSAgICBzZWxmLm1lc3NhZ2UgPSBwYXlsb2FkW0AibWVzc2FnZSJdOwotCi0gICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiY29kZSJdLCBAImNvZGUiKTsK
LSAgICBzZWxmLmNvZGUgPSBbcGF5bG9hZFtAImNvZGUiXSBpbnRlZ2VyVmFsdWVdOwotCi0gICAg
cmV0dXJuIHNlbGY7Ci19Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDoo
UldJUHJvdG9jb2xKU09OT2JqZWN0ICopb2JqZWN0Ci17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBl
ciBpbml0V2l0aEpTT05PYmplY3Q6W29iamVjdCB0b0pTT05PYmplY3RdLmdldCgpXSkpCi0gICAg
ICAgIHJldHVybiBuaWw7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlIGNvZGU6KGludCljb2RlCi17Ci0g
ICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAg
ICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKG1lc3NhZ2UsIEAibWVzc2Fn
ZSIpOwotCi0gICAgc2VsZi5tZXNzYWdlID0gbWVzc2FnZTsKLSAgICBzZWxmLmNvZGUgPSBjb2Rl
OwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpc2V0TWVzc2FnZTooTlNTdHJpbmcg
KiltZXNzYWdlCi17Ci0gICAgW3N1cGVyIHNldFN0cmluZzptZXNzYWdlIGZvcktleTpAIm1lc3Nh
Z2UiXTsKLX0KLQotLSAoTlNTdHJpbmcgKiltZXNzYWdlCi17Ci0gICAgcmV0dXJuIFtzdXBlciBz
dHJpbmdGb3JLZXk6QCJtZXNzYWdlIl07Ci19Ci0KLS0gKHZvaWQpc2V0Q29kZTooaW50KWNvZGUK
LXsKLSAgICBbc3VwZXIgc2V0SW50ZWdlcjpjb2RlIGZvcktleTpAImNvZGUiXTsKLX0KLQotLSAo
aW50KWNvZGUKLXsKLSAgICByZXR1cm4gW3N1cGVyIGludGVnZXJGb3JLZXk6QCJjb2RlIl07Ci19
Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJp
Yy9leHBlY3RlZC9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVi
dWdnYWJsZVR5cGUuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tY29tbWFuZC10YXJnZXRUeXBl
LW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLWVycm9yCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBhMTMwYWQ3MGM0MDgyNDRlMjcyNmQ0YjRhMTI0ZDkwYjMyYTJjNjIz
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2Zh
aWwtb24tY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5q
c29uLWVycm9yCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotRVJST1I6IE1hbGZvcm1lZCBk
b21haW4gc3BlY2lmaWNhdGlvbjogZG9tYWluIERvbWFpbiBoYXMgYW4gaXRlbSBpbiB0YXJnZXRU
eXBlcyAiW3Und29ya2VyJ10iIHRoYXQgaXMgbm90IHN1cHBvcnRlZCBieSBhbnkgdmFsdWUgaW4g
ZGVidWdnYWJsZVR5cGVzICJbdSdqYXZhc2NyaXB0J10iLgpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFp
bC1vbi1jb21tYW5kLXRhcmdldFR5cGVzLXR5cGUuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24t
Y29tbWFuZC10YXJnZXRUeXBlcy10eXBlLmpzb24tZXJyb3IKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDk5ZjVlMWE0YThlNDc0MzNlZjc1ZWU4YjU0YzQ5M2M1YmMwYTZkMDMuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1j
b21tYW5kLXRhcmdldFR5cGVzLXR5cGUuanNvbi1lcnJvcgorKysgL2Rldi9udWxsCkBAIC0xICsw
LDAgQEAKLUVSUk9SOiBNYWxmb3JtZWQgZG9tYWluIHNwZWNpZmljYXRpb246IHRhcmdldFR5cGVz
IGxpc3QgZm9yIGNvbW1hbmQgUGFnZU9ubHkgaXMgbm90IGFuIGFycmF5CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBl
Y3RlZC9mYWlsLW9uLWNvbW1hbmQtdGFyZ2V0VHlwZXMtdmFsdWUuanNvbi1lcnJvciBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVk
L2ZhaWwtb24tY29tbWFuZC10YXJnZXRUeXBlcy12YWx1ZS5qc29uLWVycm9yCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAyMWEzNjU2OTkyNmIyZTQwYTk4N2UyOTFiNTJiNTM5M2Q4YzIy
ZjlhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVk
L2ZhaWwtb24tY29tbWFuZC10YXJnZXRUeXBlcy12YWx1ZS5qc29uLWVycm9yCisrKyAvZGV2L251
bGwKQEAgLTEgKzAsMCBAQAotRVJST1I6IE1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjog
dGFyZ2V0VHlwZXMgbGlzdCBmb3IgY29tbWFuZCBQYWdlT25seSBpcyBhbiB1bnN1cHBvcnRlZCBz
dHJpbmcuIFdhczogIlt1J3BhZ2VlJ10iLCBBbGxvd2VkIHZhbHVlczogc2VydmljZS13b3JrZXIs
IGphdmFzY3JpcHQsIHdvcmtlciwgcGFnZSwgd2ViLXBhZ2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2Zh
aWwtb24tY29tbWFuZC13aXRoLWludmFsaWQtcGxhdGZvcm0uanNvbi1lcnJvciBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2Zh
aWwtb24tY29tbWFuZC13aXRoLWludmFsaWQtcGxhdGZvcm0uanNvbi1lcnJvcgpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggZWM2MzZjNTRiN2M1YzEwNzA5ZTBjM2I2NTk0YTkyZTUxZGMy
Yzc1MC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3Rl
ZC9mYWlsLW9uLWNvbW1hbmQtd2l0aC1pbnZhbGlkLXBsYXRmb3JtLmpzb24tZXJyb3IKKysrIC9k
ZXYvbnVsbApAQCAtMSArMCwwIEBACi1FUlJPUjogVW5rbm93biBwbGF0Zm9ybTogaW52YWxpZApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4tZGVidWdnYWJsZVR5cGVzLXR5cGUuanNv
bi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZG9tYWluLWRlYnVnZ2FibGVUeXBlcy10eXBlLmpzb24t
ZXJyb3IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiODk4YmE3YmU3ZGZhNzJiYzYz
ZmQ4YmRlOWNlZDVmODRhODE5NzcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4tZGVidWdnYWJsZVR5cGVzLXR5cGUuanNv
bi1lcnJvcgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUVSUk9SOiBNYWxmb3JtZWQgZG9t
YWluIHNwZWNpZmljYXRpb246IGRlYnVnZ2FibGVUeXBlcyBmb3IgZG9tYWluIFdlYk9ubHkgaXMg
bm90IGFuIGFycmF5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWRvbWFpbi1kZWJ1Z2dhYmxl
VHlwZXMtdmFsdWUuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZG9tYWluLWRlYnVnZ2FibGVU
eXBlcy12YWx1ZS5qc29uLWVycm9yCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjcx
ZDQ3MGNiZDM5ODU1OTczNjU4YjMxMzdiN2EyYTljNzE4NGZmLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZG9tYWluLWRlYnVnZ2Fi
bGVUeXBlcy12YWx1ZS5qc29uLWVycm9yCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotRVJS
T1I6IE1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjogZGVidWdnYWJsZVR5cGVzIGZvciBk
b21haW4gV2ViT25seSBpcyBhbiB1bnN1cHBvcnRlZCBzdHJpbmcuIFdhczogIlt1J3dlYmInXSIs
IEFsbG93ZWQgdmFsdWVzOiBzZXJ2aWNlLXdvcmtlciwgamF2YXNjcmlwdCwgcGFnZSwgd2ViLXBh
Z2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmct
ZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWRvbWFpbi10
YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLWVycm9yCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NjdlMzUwMDg5ODY0ODg5ZmQwZGNkMThhYmM5YmQ1
MGY5YzFkZWMxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4
cGVjdGVkL2ZhaWwtb24tZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2Fi
bGVUeXBlLmpzb24tZXJyb3IKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1FUlJPUjogTWFs
Zm9ybWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9uOiBjb21tYW5kIENvbW1hbmQgaGFzIGFuIGl0ZW0g
aW4gdGFyZ2V0VHlwZXMgIlt1J3dvcmtlciddIiB0aGF0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgYW55
IHZhbHVlIGluIGRlYnVnZ2FibGVUeXBlcyAiW3UnamF2YXNjcmlwdCddIi4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4
cGVjdGVkL2ZhaWwtb24tZG9tYWluLXRhcmdldFR5cGVzLXR5cGUuanNvbi1lcnJvciBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVk
L2ZhaWwtb24tZG9tYWluLXRhcmdldFR5cGVzLXR5cGUuanNvbi1lcnJvcgpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggZTlhMzU5MzNhMzU0MGFlMTBiMWVhZTJkN2EwM2RjM2YyMzMwOTI1
Yy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9m
YWlsLW9uLWRvbWFpbi10YXJnZXRUeXBlcy10eXBlLmpzb24tZXJyb3IKKysrIC9kZXYvbnVsbApA
QCAtMSArMCwwIEBACi1FUlJPUjogTWFsZm9ybWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9uOiB0YXJn
ZXRUeXBlcyBmb3IgZG9tYWluIFBhZ2VPbmx5IGlzIG5vdCBhbiBhcnJheQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhw
ZWN0ZWQvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZXMtdmFsdWUuanNvbi1lcnJvciBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVk
L2ZhaWwtb24tZG9tYWluLXRhcmdldFR5cGVzLXZhbHVlLmpzb24tZXJyb3IKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDQ2ODA3ZjcyZmM0NjhhMjlkYmY3NGZjMjJhMjk3N2FiYmJhY2U1
YjkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQv
ZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZXMtdmFsdWUuanNvbi1lcnJvcgorKysgL2Rldi9udWxs
CkBAIC0xICswLDAgQEAKLUVSUk9SOiBNYWxmb3JtZWQgZG9tYWluIHNwZWNpZmljYXRpb246IHRh
cmdldFR5cGVzIGZvciBkb21haW4gUGFnZU9ubHkgaXMgYW4gdW5zdXBwb3J0ZWQgc3RyaW5nLiBX
YXM6ICJbdSdwYWdlZSddIiwgQWxsb3dlZCB2YWx1ZXM6IHNlcnZpY2Utd29ya2VyLCBqYXZhc2Ny
aXB0LCB3b3JrZXIsIHBhZ2UsIHdlYi1wYWdlCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWR1
cGxpY2F0ZS1jb21tYW5kLWNhbGwtcGFyYW1ldGVyLW5hbWVzLmpzb24tZXJyb3IgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9m
YWlsLW9uLWR1cGxpY2F0ZS1jb21tYW5kLWNhbGwtcGFyYW1ldGVyLW5hbWVzLmpzb24tZXJyb3IK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmNzU2ZGUzMjUwNTBjMzNhNDkyY2Q1MGQ5
ZWFkZjQyMzAzNWI2MTAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVy
aWMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1jYWxsLXBhcmFtZXRlci1uYW1l
cy5qc29uLWVycm9yCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotRVJST1I6IE1hbGZvcm1l
ZCBkb21haW4gc3BlY2lmaWNhdGlvbjogY2FsbCBwYXJhbWV0ZXIgbGlzdCBmb3IgY29tbWFuZCBw
cm9jZXNzUG9pbnRzIGhhcyBkdXBsaWNhdGUgcGFyYW1ldGVyIG5hbWVzCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBl
Y3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS1jb21tYW5kLXJldHVybi1wYXJhbWV0ZXItbmFtZXMuanNv
bi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLWNvbW1hbmQtcmV0dXJuLXBhcmFtZXRl
ci1uYW1lcy5qc29uLWVycm9yCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYTE0OGZm
NjdjOTYwOTQ4OGE4MGU2ZmEyNWQzYmZhNzc4ZjVkYTBhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLWNvbW1hbmQt
cmV0dXJuLXBhcmFtZXRlci1uYW1lcy5qc29uLWVycm9yCisrKyAvZGV2L251bGwKQEAgLTEgKzAs
MCBAQAotRVJST1I6IE1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjogcmV0dXJuIHBhcmFt
ZXRlciBsaXN0IGZvciBjb21tYW5kIHByb2Nlc3NQb2ludHMgaGFzIGR1cGxpY2F0ZSBwYXJhbWV0
ZXIgbmFtZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLWV2ZW50LXBhcmFt
ZXRlci1uYW1lcy5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtZXZlbnQtcGFy
YW1ldGVyLW5hbWVzLmpzb24tZXJyb3IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3
MWJiZDIxYzJjZjBjM2IwMzgwMWQ5NjM3YTRlNmQwZmMyNWFjNDQuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtZXZl
bnQtcGFyYW1ldGVyLW5hbWVzLmpzb24tZXJyb3IKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBA
Ci1FUlJPUjogTWFsZm9ybWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9uOiBwYXJhbWV0ZXIgbGlzdCBm
b3IgZXZlbnQgcHJvY2Vzc2VkUG9pbnRzIGhhcyBkdXBsaWNhdGUgcGFyYW1ldGVyIG5hbWVzCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLWRlY2xhcmF0aW9ucy5qc29u
LWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1kZWNsYXJhdGlvbnMuanNvbi1l
cnJvcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDQ3Y2RmOGUyOGU4NTY2MTBhMjZm
ODE1NDk0M2YzNmNmOGI3ZDFmNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLWRlY2xhcmF0aW9ucy5qc29u
LWVycm9yCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotRVJST1I6IER1cGxpY2F0ZSB0eXBl
IGRlY2xhcmF0aW9uOiBSdW50aW1lLlJlbW90ZU9iamVjdElkCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9m
YWlsLW9uLWR1cGxpY2F0ZS10eXBlLW1lbWJlci1uYW1lcy5qc29uLWVycm9yIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFp
bC1vbi1kdXBsaWNhdGUtdHlwZS1tZW1iZXItbmFtZXMuanNvbi1lcnJvcgpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggZDUzNzZhNzdhNDU1ZmQxNWY2N2Q4YmNiOTM1YTZiYTQzOGMwYTU0
Yy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9m
YWlsLW9uLWR1cGxpY2F0ZS10eXBlLW1lbWJlci1uYW1lcy5qc29uLWVycm9yCisrKyAvZGV2L251
bGwKQEAgLTEgKzAsMCBAQAotRVJST1I6IE1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjog
dHlwZSBkZWNsYXJhdGlvbiBmb3IgUG9pbnQgaGFzIGR1cGxpY2F0ZSBtZW1iZXIgbmFtZXMKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZW51bS13aXRoLW5vLXZhbHVlcy5qc29uLWVycm9yIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhw
ZWN0ZWQvZmFpbC1vbi1lbnVtLXdpdGgtbm8tdmFsdWVzLmpzb24tZXJyb3IKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDI2NTVjMmI5MDdlMDJlM2U4NGNiM2Y2NmZhMWY1OGUxM2Q5Yjdi
NTMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQv
ZmFpbC1vbi1lbnVtLXdpdGgtbm8tdmFsdWVzLmpzb24tZXJyb3IKKysrIC9kZXYvbnVsbApAQCAt
MSArMCwwIEBACi1FUlJPUjogVHlwZSByZWZlcmVuY2Ugd2l0aCBlbnVtIHZhbHVlcyBtdXN0IGhh
dmUgYXQgbGVhc3Qgb25lIGVudW0gdmFsdWUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWV2
ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tZXJyb3Ig
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9l
eHBlY3RlZC9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2Fi
bGVUeXBlLmpzb24tZXJyb3IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2NWQ3YTBk
MTk2ZDQwYTg5YjZlZTU4NGE4YzZjMDViOTcyNWNhZGMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1ldmVudC10YXJnZXRUeXBlLW1h
dGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLWVycm9yCisrKyAvZGV2L251bGwKQEAg
LTEgKzAsMCBAQAotRVJST1I6IE1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjogZXZlbnQg
RXZlbnQgaGFzIGFuIGl0ZW0gaW4gdGFyZ2V0VHlwZXMgIlt1J3dvcmtlciddIiB0aGF0IGlzIG5v
dCBzdXBwb3J0ZWQgYnkgYW55IHZhbHVlIGluIGRlYnVnZ2FibGVUeXBlcyAiW3UnamF2YXNjcmlw
dCddIi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlwZXMtdHlwZS5q
c29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1ldmVudC10YXJnZXRUeXBlcy10eXBlLmpzb24tZXJy
b3IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0MDNlMTNhODA5ODk0YTE4Njk5NTY2
ZTc3NmNmNjUzNjQyZjgwOTYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1ldmVudC10YXJnZXRUeXBlcy10eXBlLmpzb24tZXJyb3IK
KysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1FUlJPUjogTWFsZm9ybWVkIGRvbWFpbiBzcGVj
aWZpY2F0aW9uOiB0YXJnZXRUeXBlcyBmb3IgZXZlbnQgUGFnZU9ubHkgaXMgbm90IGFuIGFycmF5
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGVzLXZhbHVlLmpzb24t
ZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2Vu
ZXJpYy9leHBlY3RlZC9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGVzLXZhbHVlLmpzb24tZXJyb3IK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzMDEyYTlmZTRlODkzMDIxYWI4YWYzNDUy
NDZiMTAwYjNlNDE1ZmEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVy
aWMvZXhwZWN0ZWQvZmFpbC1vbi1ldmVudC10YXJnZXRUeXBlcy12YWx1ZS5qc29uLWVycm9yCisr
KyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotRVJST1I6IE1hbGZvcm1lZCBkb21haW4gc3BlY2lm
aWNhdGlvbjogdGFyZ2V0VHlwZXMgZm9yIGV2ZW50IFBhZ2VPbmx5IGlzIGFuIHVuc3VwcG9ydGVk
IHN0cmluZy4gV2FzOiAiW3UncGFnZWUnXSIsIEFsbG93ZWQgdmFsdWVzOiBzZXJ2aWNlLXdvcmtl
ciwgamF2YXNjcmlwdCwgd29ya2VyLCBwYWdlLCB3ZWItcGFnZQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQv
ZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbi1lcnJvciBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4
cGVjdGVkL2ZhaWwtb24tbnVtYmVyLXR5cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24t
ZXJyb3IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3YjJhZjBlNDdlOTNmODA0OTc5
NDQ0NzI1N2RmMzI3MjNmMDY4MjQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVy
LWZsYWcuanNvbi1lcnJvcgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUVSUk9SOiBUaGUg
J29wdGlvbmFsJyBmbGFnIGZvciBhIHBhcmFtZXRlciBtdXN0IGJlIGEgYm9vbGVhbiBsaXRlcmFs
LgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtdHlwZS1t
ZW1iZXIuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tbnVtYmVyLXR5cGVkLW9wdGlvbmFsLXR5
cGUtbWVtYmVyLmpzb24tZXJyb3IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2ZGYz
NzUwYzFhNzc5Nzg5M2NiZmI3ZTI4NzZkOTJjY2VjYzJmOTEuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0
aW9uYWwtdHlwZS1tZW1iZXIuanNvbi1lcnJvcgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAK
LUVSUk9SOiBUaGUgJ29wdGlvbmFsJyBmbGFnIGZvciBhIHR5cGUgbWVtYmVyIG11c3QgYmUgYSBi
b29sZWFuIGxpdGVyYWwuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXN0cmluZy10eXBlZC1v
cHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1zdHJpbmct
dHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbi1lcnJvcgpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggOTdiMmFmMGU0N2U5M2Y4MDQ5Nzk0NDQ3MjU3ZGYzMjcyM2YwNjgyNC4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWls
LW9uLXN0cmluZy10eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29uLWVycm9yCisrKyAv
ZGV2L251bGwKQEAgLTEgKzAsMCBAQAotRVJST1I6IFRoZSAnb3B0aW9uYWwnIGZsYWcgZm9yIGEg
cGFyYW1ldGVyIG11c3QgYmUgYSBib29sZWFuIGxpdGVyYWwuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9m
YWlsLW9uLXN0cmluZy10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29uLWVycm9yIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0
ZWQvZmFpbC1vbi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNvbi1lcnJvcgpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODZkZjM3NTBjMWE3Nzk3ODkzY2JmYjdlMjg3
NmQ5MmNjZWNjMmY5MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJp
Yy9leHBlY3RlZC9mYWlsLW9uLXN0cmluZy10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29u
LWVycm9yCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotRVJST1I6IFRoZSAnb3B0aW9uYWwn
IGZsYWcgZm9yIGEgdHlwZSBtZW1iZXIgbXVzdCBiZSBhIGJvb2xlYW4gbGl0ZXJhbC4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmljL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS1kZWNsYXJhdGlvbi11c2luZy10eXBlLXJlZmVyZW5j
ZS5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi10eXBlLWRlY2xhcmF0aW9uLXVzaW5nLXR5cGUt
cmVmZXJlbmNlLmpzb24tZXJyb3IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyZjU3
NTNhNDM5NjE0NGViNTY2YzVjNTk2OGQwNDlhZWM2MTgyZGIuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi10eXBlLWRlY2xhcmF0aW9u
LXVzaW5nLXR5cGUtcmVmZXJlbmNlLmpzb24tZXJyb3IKKysrIC9kZXYvbnVsbApAQCAtMSArMCww
IEBACi1FUlJPUjogVHlwZSByZWZlcmVuY2UgY2Fubm90IGhhdmUgYm90aCAndHlwZScgYW5kICck
cmVmJyBrZXlzLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi10eXBlLXJlZmVyZW5jZS1hcy1w
cmltaXRpdmUtdHlwZS5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi10eXBlLXJlZmVyZW5jZS1h
cy1wcmltaXRpdmUtdHlwZS5qc29uLWVycm9yCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBkNzZiYzFjNzc3M2FhMGRhOTg4NDljOTNjMzRjMzkyZjE2Mjc2Mzk4Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS1yZWZl
cmVuY2UtYXMtcHJpbWl0aXZlLXR5cGUuanNvbi1lcnJvcgorKysgL2Rldi9udWxsCkBAIC0xICsw
LDAgQEAKLUVSUk9SOiBUeXBlIHJlZmVyZW5jZSAnRGF0YWJhc2VJZCcgaXMgbm90IGEgcHJpbWl0
aXZlIHR5cGUuIEFsbG93ZWQgdmFsdWVzOiBpbnRlZ2VyLCBudW1iZXIsIHN0cmluZywgYm9vbGVh
biwgZW51bSwgb2JqZWN0LCBhcnJheSwgYW55CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXR5
cGUtd2l0aC1pbnZhbGlkLXBsYXRmb3JtLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXR5cGUt
d2l0aC1pbnZhbGlkLXBsYXRmb3JtLmpzb24tZXJyb3IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGVjNjM2YzU0YjdjNWMxMDcwOWUwYzNiNjU5NGE5MmU1MWRjMmM3NTAuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi10eXBl
LXdpdGgtaW52YWxpZC1wbGF0Zm9ybS5qc29uLWVycm9yCisrKyAvZGV2L251bGwKQEAgLTEgKzAs
MCBAQAotRVJST1I6IFVua25vd24gcGxhdGZvcm06IGludmFsaWQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVk
L2ZhaWwtb24tdHlwZS13aXRoLWxvd2VyY2FzZS1uYW1lLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWls
LW9uLXR5cGUtd2l0aC1sb3dlcmNhc2UtbmFtZS5qc29uLWVycm9yCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA0ZTQ2MjI1MGMwYWY4MGExNzllMDZhYWY0NWQyMWViNTQ2ZGI4ODE0Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwt
b24tdHlwZS13aXRoLWxvd2VyY2FzZS1uYW1lLmpzb24tZXJyb3IKKysrIC9kZXYvbnVsbApAQCAt
MSArMCwwIEBACi1FUlJPUjogVHlwZXMgbXVzdCBiZWdpbiB3aXRoIGFuIHVwcGVyY2FzZSBjaGFy
YWN0ZXIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2Ut
aW4tdHlwZS1kZWNsYXJhdGlvbi5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi11bmtub3duLXR5
cGUtcmVmZXJlbmNlLWluLXR5cGUtZGVjbGFyYXRpb24uanNvbi1lcnJvcgpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMmQzOGU2NDY3NWRhNWFlNWMyNjNkNTQ2ZTg1MzRiNDlmM2I1ZTlj
OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9m
YWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1kZWNsYXJhdGlvbi5qc29uLWVy
cm9yCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotRVJST1I6IFR5cGUgcmVmZXJlbmNlICdk
cmFnb24nIGlzIG5vdCBhIHByaW1pdGl2ZSB0eXBlLiBBbGxvd2VkIHZhbHVlczogaW50ZWdlciwg
bnVtYmVyLCBzdHJpbmcsIGJvb2xlYW4sIGVudW0sIG9iamVjdCwgYXJyYXksIGFueQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVy
aWMvZXhwZWN0ZWQvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtbWVtYmVy
Lmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlw
ZS1tZW1iZXIuanNvbi1lcnJvcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmFmNjY3
MmNiZWYwOTYzMGZkOWJlOGZmYWRhY2UxMmM1NjExY2NhOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZl
cmVuY2UtaW4tdHlwZS1tZW1iZXIuanNvbi1lcnJvcgorKysgL2Rldi9udWxsCkBAIC0xICswLDAg
QEAKLUVSUk9SOiBMb29rdXAgZmFpbGVkIGZvciB0eXBlIHJlZmVyZW5jZTogQ29sb3IgKHJlZmVy
ZW5jZWQgZnJvbSBkb21haW46IEZhbnRhc3kpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9nZW5lcmF0ZS1k
b21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9nZW5lcmF0ZS1k
b21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbi1yZXN1bHQKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDA5NDZiNTNlM2Y4MTc3ZDc2NjY2NTgxN2ZjOWIyNDI1YjQ1OThmYmYuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZ2VuZXJh
dGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24tcmVzdWx0CisrKyAvZGV2L251bGwK
QEAgLTEsMTI0NSArMCwwIEBACi0jIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1h
bmRzLmpzCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlu
cy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotLy8gTmV0d29yazEKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21h
aW4oIk5ldHdvcmsxIiwgbnVsbCk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgi
TmV0d29yazEubG9hZFJlc291cmNlIiwgbnVsbCwgW10sIFtdKTsKLUluc3BlY3RvckJhY2tlbmQu
YWN0aXZhdGVEb21haW4oIk5ldHdvcmsxIiwgbnVsbCk7Ci0KLS8vIE5ldHdvcmszCi1JbnNwZWN0
b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJOZXR3b3JrMyIsIG51bGwpOwotSW5zcGVjdG9yQmFj
a2VuZC5yZWdpc3RlckV2ZW50KCJOZXR3b3JrMy5yZXNvdXJjZUxvYWRlZCIsIG51bGwsIFtdKTsK
LUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJOZXR3b3JrM0Rpc3BhdGNoZXIgPSBJbnNwZWN0b3JC
YWNrZW5kLnJlZ2lzdGVyRGlzcGF0Y2hlci5iaW5kKEluc3BlY3RvckJhY2tlbmQsICJOZXR3b3Jr
MyIpOwotSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiTmV0d29yazMiLCBudWxsKTsK
LSMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9u
Y2UKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi0jaW5j
bHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckZyb250ZW5kUm91dGVyLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNrZW5k
RGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2Jh
Y2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQotICAgIEJhY2tlbmREaXNw
YXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3Bh
dGNoZXIuZ2V0KCk7IH0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBt
X2JhY2tlbmREaXNwYXRjaGVyOwotfTsKLQotCi0jaWYgUExBVEZPUk0oV0VCX0NPTU1BTkRTKQot
Y2xhc3MgQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5h
dGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+QWx0ZXJuYXRlTmV0
d29yazFCYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3Vy
Y2UobG9uZyBjYWxsSWQpID0gMDsKLX07Ci0jZW5kaWYgLy8gUExBVEZPUk0oV0VCX0NPTU1BTkRT
KQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hl
cnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMt
d2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0
cy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0
b3IgewotCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQotI2lmIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotI2lmIFBMQVRGT1JNKFdFQl9DT01NQU5EUykKLWNs
YXNzIEFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI7Ci0jZW5kaWYgLy8gUExBVEZP
Uk0oV0VCX0NPTU1BTkRTKQotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQotCi0jaWYgUExBVEZPUk0oV0VCX0NPTU1BTkRTKQotY2xhc3MgTmV0d29yazFC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewotcHVibGljOgotICAgIHZpcnR1YWwgdm9pZCBsb2Fk
UmVzb3VyY2UoRXJyb3JTdHJpbmcmKSA9IDA7Ci1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB+TmV0
d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKLX07Ci0jZW5kaWYgLy8gUExBVEZPUk0o
V0VCX0NPTU1BTkRTKQotCi0jaWYgUExBVEZPUk0oV0VCX0NPTU1BTkRTKQotY2xhc3MgTmV0d29y
azFCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlz
cGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxOZXR3b3JrMUJhY2tlbmREaXNwYXRj
aGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlciopOwotICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmlu
ZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOwotcHJpdmF0ZToK
LSAgICB2b2lkIGxvYWRSZXNvdXJjZShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBwYXJhbWV0ZXJzKTsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKLXB1YmxpYzoKLSAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRl
TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVy
bmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9Ci1wcml2YXRlOgotICAgIEFs
dGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIqIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciB7
IG51bGxwdHIgfTsKLSNlbmRpZgotcHJpdmF0ZToKLSAgICBOZXR3b3JrMUJhY2tlbmREaXNwYXRj
aGVyKEJhY2tlbmREaXNwYXRjaGVyJiwgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIq
KTsKLSAgICBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2VudCB7IG51bGxw
dHIgfTsKLX07Ci0jZW5kaWYgLy8gUExBVEZPUk0oV0VCX0NPTU1BTkRTKQotCi19IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJk
cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1
ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCi0jaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVycy5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0jaWYgUExBVEZPUk0o
V0VCX0NPTU1BTkRTKQotTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5OZXR3b3Jr
MUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQotI2VuZGlmIC8vIFBMQVRGT1JNKFdFQl9D
T01NQU5EUykKLQotI2lmIFBMQVRGT1JNKFdFQl9DT01NQU5EUykKLVJlZjxOZXR3b3JrMUJhY2tl
bmREaXNwYXRjaGVyPiBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoQmFja2VuZERp
c3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlciogYWdlbnQpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTmV0d29yazFCYWNrZW5k
RGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKLX0KLQotTmV0d29yazFCYWNr
ZW5kRGlzcGF0Y2hlcjo6TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hl
ciYgYmFja2VuZERpc3BhdGNoZXIsIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBh
Z2VudCkKLSAgICA6IFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRj
aGVyKQotICAgICwgbV9hZ2VudChhZ2VudCkKLXsKLSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5y
ZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oIk5ldHdvcmsxIl9zLCB0aGlzKTsKLX0KLQotdm9p
ZCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29u
c3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKLXsKLSAgICBS
ZWY8TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7Ci0KLSAgICBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOwotICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFy
YW1zIl9zLCBwYXJhbWV0ZXJzKTsKLQotICAgIGlmIChtZXRob2QgPT0gImxvYWRSZXNvdXJjZSIp
Ci0gICAgICAgIGxvYWRSZXNvdXJjZShyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOwot
ICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJv
cihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazEuIiArIG1ldGhv
ZCArICInIHdhcyBub3QgZm91bmQiKTsKLX0KLQotdm9pZCBOZXR3b3JrMUJhY2tlbmREaXNwYXRj
aGVyOjpsb2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYp
Ci17Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0gICAgaWYg
KG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXIt
PmxvYWRSZXNvdXJjZShyZXF1ZXN0SWQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlm
Ci0KLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQg
PSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZShlcnJv
cik7Ci0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAg
ICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3Io
QmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Ci19Ci0jZW5k
aWYgLy8gUExBVEZPUk0oV0VCX0NPTU1BTkRTKQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
LQotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0j
aW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVz
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0
b3IgewotCi1jbGFzcyBGcm9udGVuZFJvdXRlcjsKLQotI2lmIFBMQVRGT1JNKFdFQl9FVkVOVFMp
Ci1jbGFzcyBOZXR3b3JrM0Zyb250ZW5kRGlzcGF0Y2hlciB7Ci0gICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgTmV0d29yazNGcm9udGVuZERpc3BhdGNoZXIoRnJvbnRl
bmRSb3V0ZXImIGZyb250ZW5kUm91dGVyKSA6IG1fZnJvbnRlbmRSb3V0ZXIoZnJvbnRlbmRSb3V0
ZXIpIHsgfQotICAgIHZvaWQgcmVzb3VyY2VMb2FkZWQoKTsKLXByaXZhdGU6Ci0gICAgRnJvbnRl
bmRSb3V0ZXImIG1fZnJvbnRlbmRSb3V0ZXI7Ci19OwotI2VuZGlmIC8vIFBMQVRGT1JNKFdFQl9F
VkVOVFMpCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0RnJv
bnRlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRj
aGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21h
aW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEZyb250
ZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZy
b250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKLQotI2lmIFBMQVRGT1JNKFdFQl9FVkVOVFMpCi12b2lkIE5ldHdvcmsz
RnJvbnRlbmREaXNwYXRjaGVyOjpyZXNvdXJjZUxvYWRlZCgpCi17Ci0gICAgUmVmPEpTT046Ok9i
amVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNz
YWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIk5ldHdvcmszLnJlc291cmNlTG9hZGVkIl9zKTsK
LQotICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJp
bmcoKSk7Ci19Ci0jZW5kaWYgLy8gUExBVEZPUk0oV0VCX0VWRU5UUykKLQotfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3Bw
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMu
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21h
IG9uY2UKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMu
aD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsK
LQotCi0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLQotCi0vLyBGb3J3YXJkIGRlY2xhcmF0aW9u
cy4KLSNpZiBQTEFURk9STShXRUJfVFlQRVMpCi1uYW1lc3BhY2UgTmV0d29yazIgewotY2xhc3Mg
TmV0d29ya0Vycm9yOwotfSAvLyBOZXR3b3JrMgotI2VuZGlmIC8vIFBMQVRGT1JNKFdFQl9UWVBF
UykKLS8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KLQotCi0KLQotI2lmIFBMQVRGT1JN
KFdFQl9UWVBFUykKLW5hbWVzcGFjZSBOZXR3b3JrMiB7Ci1jbGFzcyBOZXR3b3JrRXJyb3IgOiBw
dWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7Ci1wdWJsaWM6Ci0gICAgZW51bSB7Ci0gICAgICAgIE5v
RmllbGRzU2V0ID0gMCwKLSAgICAgICAgTWVzc2FnZVNldCA9IDEgPDwgMCwKLSAgICAgICAgQ29k
ZVNldCA9IDEgPDwgMSwKLSAgICAgICAgQWxsRmllbGRzU2V0ID0gKE1lc3NhZ2VTZXQgfCBDb2Rl
U2V0KQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+Ci0gICAgY2xhc3MgQnVpbGRl
ciB7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7
Ci0KLSAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2Fz
dFN0YXRlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0
PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVp
bGRlcihSZWY8LypOZXR3b3JrRXJyb3IqL0pTT046Ok9iamVjdD4mJiBvYmplY3QpCi0gICAgICAg
ICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKLSAgICAgICAgewotICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9u
b25faW5pdF9zdGF0ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZnJpZW5kIGNsYXNzIE5ldHdvcmtF
cnJvcjsKLSAgICBwdWJsaWM6Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1lc3NhZ2VTZXQ+
JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNZXNzYWdlU2V0KSwgcHJvcGVydHlfbWVzc2FnZV9h
bHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJtZXNzYWdlIl9z
LCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1lc3NhZ2VTZXQ+KCk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29kZVNldD4mIHNldENvZGUoaW50
IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
Q29kZVNldCksIHByb3BlcnR5X2NvZGVfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1
bHQtPnNldEludGVnZXIoImNvZGUiX3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0
U3RhdGU8Q29kZVNldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIFJlZjxOZXR3b3JrRXJyb3I+
IHJlbGVhc2UoKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9
PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwotICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoc2l6ZW9mKE5ldHdvcmtFcnJvcikgPT0gc2l6ZW9mKEpTT046Ok9iamVjdCksIGNh
bm5vdF9jYXN0KTsKLQotICAgICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4ganNvblJlc3VsdCA9
IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7Ci0gICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFdU
Rk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPE5ldHdvcmtFcnJvcj4qPigmanNvblJlc3VsdCkp
OwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICAv
KgotICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKLSAgICAgKiBSZWY8TmV0d29ya0Vycm9y
PiByZXN1bHQgPSBOZXR3b3JrRXJyb3I6OmNyZWF0ZSgpCi0gICAgICogICAgIC5zZXRNZXNzYWdl
KC4uLikKLSAgICAgKiAgICAgLnNldENvZGUoLi4uKQotICAgICAqICAgICAucmVsZWFzZSgpOwot
ICAgICAqLwotICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRl
KCkpOwotICAgIH0KLX07Ci0KLX0gLy8gTmV0d29yazIKLSNlbmRpZiAvLyBQTEFURk9STShXRUJf
VFlQRVMpCi0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0KLSNpbmNsdWRlIDx3dGYvT3B0
aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNw
ZWN0b3IgewotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJv
dG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sT2JqZWN0cy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmRE
aXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUt
ZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4K
LQotQHByb3RvY29sIFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcjsKLQotbmFtZXNw
YWNlIEluc3BlY3RvciB7Ci0KLQotI2lmIFBMQVRGT1JNKFdFQl9DT01NQU5EUykKLWNsYXNzIE9i
akNJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVy
bmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwotcHVibGljOgotICAgIE9iakNJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVy
KGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVn
YXRlID0gaGFuZGxlcjsgfQotICAgIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkKSBm
aW5hbDsKLXByaXZhdGU6Ci0gICAgUmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9t
YWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7Ci19OwotI2VuZGlmIC8vIFBMQVRGT1JNKFdFQl9DT01N
QU5EUykKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bEJhY2tlbmREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9y
dCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlICJUZXN0UHJv
dG9jb2xJbnRlcm5hbC5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5o
IgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Igewot
Ci0jaWYgUExBVEZPUk0oV0VCX0NPTU1BTkRTKQotdm9pZCBPYmpDSW5zcGVjdG9yTmV0d29yazFC
YWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkKQotewotICAgIGlm
ICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2VX
aXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsKLSAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRj
aGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMS5sb2FkUmVzb3VyY2UnIHdhcyBub3QgZm91
bmQiX3MpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNT
dHJpbmcgKmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3Rv
Y29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9y
KTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAg
ICB9OwotCi0gICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAgICAgICAgYmFja2VuZERpc3Bh
dGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwg
ZmFsc2UpOwotICAgIH07Ci0KLSAgICBbbV9kZWxlZ2F0ZSBsb2FkUmVzb3VyY2VXaXRoRXJyb3JD
YWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOwot
fQotCi0jZW5kaWYgLy8gUExBVEZPUk0oV0VCX0NPTU1BTkRTKQotCi19IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMu
bW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJl
LWd1YXJkcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KLQotX19hdHRyaWJ1dGVfXygo
dmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3Vy
YXRpb24gOiBOU09iamVjdAotQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNl
dE5ldHdvcmsxSGFuZGxlcjopIGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4g
bmV0d29yazFIYW5kbGVyOwotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBUZXN0UHJv
dG9jb2xOZXR3b3JrM0RvbWFpbkV2ZW50RGlzcGF0Y2hlciAqbmV0d29yazNFdmVudERpc3BhdGNo
ZXI7Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgK
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1n
dWFyZHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0j
aW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90
b2NvbEludGVybmFsLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMu
aCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+
Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIu
aD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNw
YXRjaGVycy5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXJzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlv
biBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCi17Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JD
b250cm9sbGVyKiBfY29udHJvbGxlcjsKLSAgICBpZDxUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFp
bkhhbmRsZXI+IF9uZXR3b3JrMUhhbmRsZXI7Ci0gICAgVGVzdFByb3RvY29sTmV0d29yazNEb21h
aW5FdmVudERpc3BhdGNoZXIgKl9uZXR3b3JrM0V2ZW50RGlzcGF0Y2hlcjsKLX0KLQotLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9s
bGVyKiljb250cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNl
bGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIpOwotICAgIF9j
b250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClk
ZWFsbG9jCi17Ci0gICAgW19uZXR3b3JrMUhhbmRsZXIgcmVsZWFzZV07Ci0gICAgW19uZXR3b3Jr
M0V2ZW50RGlzcGF0Y2hlciByZWxlYXNlXTsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLS0g
KHZvaWQpc2V0TmV0d29yazFIYW5kbGVyOihpZDxUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhh
bmRsZXI+KWhhbmRsZXIKLXsKLSAgICBpZiAoaGFuZGxlciA9PSBfbmV0d29yazFIYW5kbGVyKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBbX25ldHdvcmsxSGFuZGxlciByZWxlYXNlXTsKLSAgICBf
bmV0d29yazFIYW5kbGVyID0gW2hhbmRsZXIgcmV0YWluXTsKLQotICAgIGF1dG8gYWx0ZXJuYXRl
RGlzcGF0Y2hlciA9IG1ha2VVbmlxdWU8T2JqQ0luc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3Bh
dGNoZXI+KGhhbmRsZXIpOwotICAgIGF1dG8gYWx0ZXJuYXRlQWdlbnQgPSBtYWtlVW5pcXVlPEFs
dGVybmF0ZURpc3BhdGNoYWJsZUFnZW50PE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIsIEFsdGVy
bmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI+PigiTmV0d29yazEiX3MsICpfY29udHJvbGxl
ciwgV1RGTW92ZShhbHRlcm5hdGVEaXNwYXRjaGVyKSk7Ci0gICAgX2NvbnRyb2xsZXItPmFwcGVu
ZEV4dHJhQWdlbnQoV1RGTW92ZShhbHRlcm5hdGVBZ2VudCkpOwotfQotCi0tIChpZDxUZXN0UHJv
dG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+KW5ldHdvcmsxSGFuZGxlcgotewotICAgIHJldHVy
biBfbmV0d29yazFIYW5kbGVyOwotfQotCi0tIChUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkV2
ZW50RGlzcGF0Y2hlciAqKW5ldHdvcmszRXZlbnREaXNwYXRjaGVyCi17Ci0gICAgaWYgKCFfbmV0
d29yazNFdmVudERpc3BhdGNoZXIpCi0gICAgICAgIF9uZXR3b3JrM0V2ZW50RGlzcGF0Y2hlciA9
IFtbVGVzdFByb3RvY29sTmV0d29yazNEb21haW5FdmVudERpc3BhdGNoZXIgYWxsb2NdIGluaXRX
aXRoQ29udHJvbGxlcjpfY29udHJvbGxlcl07Ci0gICAgcmV0dXJuIF9uZXR3b3JrM0V2ZW50RGlz
cGF0Y2hlcjsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbi5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVy
cy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMt
d2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQg
IlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMu
aD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQ
cm90b2NvbE5ldHdvcmszRG9tYWluRXZlbnREaXNwYXRjaGVyCi17Ci0gICAgQXVnbWVudGFibGVJ
bnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9s
bGVyCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAg
IHJldHVybiBuaWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIpOwotICAgIF9jb250cm9sbGVyID0g
Y29udHJvbGxlcjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClyZXNvdXJjZUxvYWRl
ZAotewotICAgIGNvbnN0IEZyb250ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29udHJvbGxlci0+ZnJv
bnRlbmRSb3V0ZXIoKTsKLQotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2Qi
X3MsICJOZXR3b3JrMy5yZXNvdXJjZUxvYWRlZCJfcyk7Ci0gICAgcm91dGVyLnNlbmRFdmVudChq
c29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2wuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRv
bWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotCi0j
aW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+Ci0KLQotQGNsYXNz
IFRlc3RQcm90b2NvbE5ldHdvcmsyTmV0d29ya0Vycm9yOwotCi10eXBlZGVmIE5TX0VOVU0oTlNJ
bnRlZ2VyLCBUZXN0UHJvdG9jb2xQbGF0Zm9ybSkgewotICAgIFRlc3RQcm90b2NvbFBsYXRmb3Jt
QWxsLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYywKLSAgICBUZXN0UHJvdG9jb2xQ
bGF0Zm9ybUlPUywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TLAotfTsKLQotCi0KLQot
X19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQ
cm90b2NvbE5ldHdvcmsyTmV0d29ya0Vycm9yIDogUldJUHJvdG9jb2xKU09OT2JqZWN0Ci0tIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+
ICopcGF5bG9hZDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQ
cm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
TWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlIGNvZGU6KGludCljb2RlOwotLyogcmVxdWlyZWQg
Ki8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICptZXNzYWdlOwotLyogcmVx
dWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgaW50IGNvZGU7Ci1AZW5kCi0K
LUBwcm90b2NvbCBUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXIgPE5TT2JqZWN0Pgot
QG9wdGlvbmFsCi0tICh2b2lkKWxvYWRSZXNvdXJjZVdpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4p
KE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXiko
dm9pZCkpc3VjY2Vzc0NhbGxiYWNrOwotQGVuZAotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5
ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sTmV0d29yazNEb21haW5FdmVu
dERpc3BhdGNoZXIgOiBOU09iamVjdAotLSAodm9pZClyZXNvdXJjZUxvYWRlZDsKLUBlbmQKLQot
Ci0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmpl
Y3RzLmg+Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbEludGVybmFsLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIK
LSNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCi0jaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPHd0
Zi9KU09OVmFsdWVzLmg+Ci0KLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sTmV0d29yazNEb21haW5F
dmVudERpc3BhdGNoZXIgKFByaXZhdGUpCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9s
bGVyOihJbnNwZWN0b3I6OkF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxl
cjsKLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRz
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9y
dCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJh
eUNvbnZlcnNpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBPYmpDRW51bVR5cGU+Ci1PcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0
cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3Ry
aW5nKFRlc3RQcm90b2NvbFBsYXRmb3JtIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewot
ICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1BbGw6Ci0gICAgICAgIHJldHVybiAiYWxsIl9z
OwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOgotICAgICAgICByZXR1cm4g
ImdlbmVyaWMiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzoKLSAgICAgICAg
cmV0dXJuICJpb3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOgotICAg
ICAgICByZXR1cm4gIm1hY29zIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9w
dGlvbmFsPFRlc3RQcm90b2NvbFBsYXRmb3JtPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gImFsbCIpCi0gICAgICAgIHJldHVybiBU
ZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDsKLSAgICBpZiAodmFsdWUgPT0gImdlbmVyaWMiKQotICAg
ICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOwotICAgIGlmICh2YWx1ZSA9
PSAiaW9zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOwotICAgIGlm
ICh2YWx1ZSA9PSAibWFjb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1N
YWNPUzsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi0KLQotfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgK
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJl
LWd1YXJkcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotCi0jaW1wb3J0ICJUZXN0
UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKLSNpbXBvcnQg
PFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0KLXVzaW5nIG5h
bWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zIChOZXR3b3JrMkRvbWFpbikKLQotKyAodm9pZClfcGFyc2VOZXR3b3JrRXJyb3I6KFRlc3RQ
cm90b2NvbE5ldHdvcmsyTmV0d29ya0Vycm9yICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClw
YXlsb2FkOwotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMgKE5ldHdvcmsyRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZU5ldHdvcmtFcnJvcjooVGVz
dFByb3RvY29sTmV0d29yazJOZXR3b3JrRXJyb3IgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlk
KXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtO
U0RpY3Rpb25hcnkgY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbE5ldHdv
cmsyTmV0d29ya0Vycm9yIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07Ci19Ci0KLUBl
bmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0
UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRl
Lmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMu
aD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi1AaW1wbGVtZW50YXRpb24gVGVz
dFByb3RvY29sTmV0d29yazJOZXR3b3JrRXJyb3IKLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
UGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZAot
ewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwot
Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AibWVz
c2FnZSJdLCBAIm1lc3NhZ2UiKTsKLSAgICBzZWxmLm1lc3NhZ2UgPSBwYXlsb2FkW0AibWVzc2Fn
ZSJdOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2Fk
W0AiY29kZSJdLCBAImNvZGUiKTsKLSAgICBzZWxmLmNvZGUgPSBbcGF5bG9hZFtAImNvZGUiXSBp
bnRlZ2VyVmFsdWVdOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0tIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopb2JqZWN0Ci17Ci0g
ICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEpTT05PYmplY3Q6W29iamVjdCB0b0pTT05P
YmplY3RdLmdldCgpXSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICByZXR1cm4gc2VsZjsK
LX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdl
IGNvZGU6KGludCljb2RlCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAg
ICAgIHJldHVybiBuaWw7Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BF
UlRZKG1lc3NhZ2UsIEAibWVzc2FnZSIpOwotCi0gICAgc2VsZi5tZXNzYWdlID0gbWVzc2FnZTsK
LSAgICBzZWxmLmNvZGUgPSBjb2RlOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQp
c2V0TWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlCi17Ci0gICAgW3N1cGVyIHNldFN0cmluZzpt
ZXNzYWdlIGZvcktleTpAIm1lc3NhZ2UiXTsKLX0KLQotLSAoTlNTdHJpbmcgKiltZXNzYWdlCi17
Ci0gICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJtZXNzYWdlIl07Ci19Ci0KLS0gKHZv
aWQpc2V0Q29kZTooaW50KWNvZGUKLXsKLSAgICBbc3VwZXIgc2V0SW50ZWdlcjpjb2RlIGZvcktl
eTpAImNvZGUiXTsKLX0KLQotLSAoaW50KWNvZGUKLXsKLSAgICByZXR1cm4gW3N1cGVyIGludGVn
ZXJGb3JLZXk6QCJjb2RlIl07Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRv
bWFpbi5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3NhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpz
b24tcmVzdWx0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTQwMjExMTM4MmFlYzdj
NWVmMGRlYzk4MWIyMWE2NDg4NDVhZGU1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3NhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24t
cmVzdWx0CisrKyAvZGV2L251bGwKQEAgLTEsOTE0ICswLDAgQEAKLSMjIyBCZWdpbiBGaWxlOiBJ
bnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0jIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRD
b21tYW5kcy5qcwotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRp
ZmZlcmVudC1kb21haW4uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKLSNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0KLW5hbWVzcGFjZSBJbnNw
ZWN0b3IgewotCi1jbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0g
ICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYg
ZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsg
fQotICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0
dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPEJh
Y2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwotfTsKLQotCi0KLQotfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKLSMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFp
bi5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFn
bWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10eXBlZGVmIFN0
cmluZyBFcnJvclN0cmluZzsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVu
ZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
c2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVz
dEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1
ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
LQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotI2luY2x1ZGUg
IlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZp
bGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJv
bnRlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2Ft
ZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bE9iamVjdHMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgRnJvbnRl
bmRSb3V0ZXI7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0
RnJvbnRlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNw
YXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUt
aWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0RnJvbnRlbmRE
aXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRl
bmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJ
bnNwZWN0b3IgewotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBU
ZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bE9iamVjdHMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1p
ZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFt
ZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotCi0K
LS8vIFR5cGVkZWZzLgotbmFtZXNwYWNlIFJ1bnRpbWUgewotLyogVW5pcXVlIG9iamVjdCBpZGVu
dGlmaWVyLiAqLwotdHlwZWRlZiBTdHJpbmcgUmVtb3RlT2JqZWN0SWQ7Ci19IC8vIFJ1bnRpbWUK
LQotbmFtZXNwYWNlIFJ1bnRpbWUyIHsKLS8qIFVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4gKi8K
LXR5cGVkZWYgU3RyaW5nIFJlbW90ZU9iamVjdElkOwotfSAvLyBSdW50aW1lMgotLy8gRW5kIG9m
IHR5cGVkZWZzLgotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0KLSNpbmNsdWRlIDx3dGYvT3B0aW9u
YWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0
b3IgewotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9j
b2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sT2JqZWN0cy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNw
YXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlk
LWRpZmZlcmVudC1kb21haW4uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXJzLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi0KLQotbmFt
ZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmlnLmgi
Ci0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUg
IlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLQotbmFtZXNwYWNlIEluc3Bl
Y3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sQ29uZmlndXJhdGlvbi5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2Ft
ZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+
Ci0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBU
ZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKLUBlbmQKLQotCi0jIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbi5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
bi5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2ltcG9ydCAiVGVzdFBy
b3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRl
cm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVu
dGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5z
cGVjdG9yOwotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgotewot
ICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci19Ci0KLS0g
KGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29u
dHJvbGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYg
KCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAg
ICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZv
aWQpZGVhbGxvYwotewotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotQGVuZAotCi0KLSMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50
ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1w
b3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0K
LSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5o
PgotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+Ci0KLQot
Ci0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbFBsYXRmb3JtKSB7Ci0g
ICAgVGVzdFByb3RvY29sUGxhdGZvcm1BbGwsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5l
cmljLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TLAotICAgIFRlc3RQcm90b2NvbFBsYXRm
b3JtTWFjT1MsCi19OwotCi0KLQotCi0KLQotCi0KLQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3Iv
UldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+Ci0KLSMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50
LWRvbWFpbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVj
dFByaXZhdGUuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9y
Q29udHJvbGxlci5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotCi0KLQotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0
IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+Ci0KLW5hbWVzcGFj
ZSBJbnNwZWN0b3IgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+Ci1PcHRpb25h
bDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsK
LQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFBsYXRmb3JtIHZh
bHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZv
cm1BbGw6Ci0gICAgICAgIHJldHVybiAiYWxsIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxh
dGZvcm1HZW5lcmljOgotICAgICAgICByZXR1cm4gImdlbmVyaWMiX3M7Ci0gICAgY2FzZSBUZXN0
UHJvdG9jb2xQbGF0Zm9ybUlPUzoKLSAgICAgICAgcmV0dXJuICJpb3MiX3M7Ci0gICAgY2FzZSBU
ZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOgotICAgICAgICByZXR1cm4gIm1hY29zIl9zOwotICAg
IH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFBsYXRmb3Jt
PiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFs
dWUgPT0gImFsbCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDsKLSAg
ICBpZiAodmFsdWUgPT0gImdlbmVyaWMiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxh
dGZvcm1HZW5lcmljOwotICAgIGlmICh2YWx1ZSA9PSAiaW9zIikKLSAgICAgICAgcmV0dXJuIFRl
c3RQcm90b2NvbFBsYXRmb3JtSU9TOwotICAgIGlmICh2YWx1ZSA9PSAibWFjb3MiKQotICAgICAg
ICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzsKLSAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwotfQotCi0KLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90
b2NvbFR5cGVQYXJzZXIuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05P
YmplY3RQcml2YXRlLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbnRlcmZh
Y2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChSdW50aW1lRG9tYWluKQotCi0rICh2b2lk
KV9wYXJzZVJlbW90ZU9iamVjdElkOihOU1N0cmluZyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDoo
aWQpcGF5bG9hZDsKLQotQGVuZAotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMgKFJ1bnRpbWUyRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZVJlbW90ZU9iamVjdElkOihOU1N0
cmluZyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLQotQGVuZAotCi1AaW1w
bGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChSdW50aW1lRG9tYWluKQot
Ci0rICh2b2lkKV9wYXJzZVJlbW90ZU9iamVjdElkOihOU1N0cmluZyAqKilvdXRWYWx1ZSBmcm9t
UGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUo
cGF5bG9hZCwgW05TU3RyaW5nIGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gKE5TU3RyaW5nICop
cGF5bG9hZDsKLX0KLQotQGVuZAotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucyAoUnVudGltZTJEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlUmVtb3RlT2JqZWN0SWQ6
KE5TU3RyaW5nICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKLSAg
ICAqb3V0VmFsdWUgPSAoTlNTdHJpbmcgKilwYXlsb2FkOwotfQotCi1AZW5kCi0KLQotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbFR5cGVzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
c2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgot
Ci0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPFdlYklu
c3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0jaW1wb3J0IDx3dGYvQXNz
ZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNl
IEluc3BlY3RvcjsKLQotCi0KLQotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMu
bW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29u
LXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL2V4cGVjdGVkL3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uLXJlc3Vs
dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGJkYjJkNDExOWZhYzRiZjFkMDYxZTFh
ZjgwY2MxZDAxNzVlNWI3MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2Vu
ZXJpYy9leHBlY3RlZC9zaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbi1yZXN1bHQK
KysrIC9kZXYvbnVsbApAQCAtMSwxMTI0ICswLDAgQEAKLSMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0
b3JCYWNrZW5kQ29tbWFuZHMuanMKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBz
aGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFu
ZHMuanMKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMu
aAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5
cGUtc2V0dGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgotI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLQotbmFtZXNwYWNlIEluc3BlY3Rv
ciB7Ci0KLWNsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2
b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNw
YXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9Ci0g
ICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4g
bV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQotcHJpdmF0ZToKLSAgICBSZWZQdHI8QmFja2Vu
ZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Ci19OwotCi0KLQotCi19IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKLQotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQotIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJz
LmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEg
b25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10eXBlZGVmIFN0cmlu
ZyBFcnJvclN0cmluZzsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBG
aWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNr
ZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hh
ZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRl
IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0K
LSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSNpbmNsdWRlICJU
ZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIElu
c3BlY3RvciB7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxl
OiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250
ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRv
d2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29s
T2JqZWN0cy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBGcm9udGVu
ZFJvdXRlcjsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RG
cm9udGVuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3Bh
dGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9w
dGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0RnJvbnRlbmRE
aXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRl
bmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJ
bnNwZWN0b3IgewotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBU
ZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bE9iamVjdHMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9w
dGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5h
bWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLS8v
IEZvcndhcmQgZGVjbGFyYXRpb25zLgotbmFtZXNwYWNlIFJ1bnRpbWUgewotY2xhc3MgS2V5UGF0
aDsKLX0gLy8gUnVudGltZQotLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgotCi0KLQot
Ci1uYW1lc3BhY2UgVGVzdEhlbHBlcnMgewotCi1TdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUo
aW50IGNvZGUpOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgZ2V0RW51bUNvbnN0YW50
VmFsdWUoVCBlbnVtVmFsdWUpCi17Ci0gICAgcmV0dXJuIGdldEVudW1Db25zdGFudFZhbHVlKHN0
YXRpY19jYXN0PGludD4oZW51bVZhbHVlKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFRlc3RIZWxw
ZXJzCi0KLW5hbWVzcGFjZSBSdW50aW1lIHsKLS8qIEtleSBwYXRoLiAqLwotY2xhc3MgS2V5UGF0
aCA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKLXB1YmxpYzoKLSAgICAvLyBOYW1lZCBhZnRl
ciBwcm9wZXJ0eSBuYW1lICd0eXBlJyB3aGlsZSBnZW5lcmF0aW5nIEtleVBhdGguCi0gICAgZW51
bSBjbGFzcyBUeXBlIHsKLSAgICAgICAgTnVsbCA9IDAsCi0gICAgICAgIFN0cmluZyA9IDEsCi0g
ICAgICAgIEFycmF5ID0gMiwKLSAgICB9OyAvLyBlbnVtIGNsYXNzIFR5cGUKLSAgICBlbnVtIHsK
LSAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAotICAgICAgICBUeXBlU2V0ID0gMSA8PCAwLAotICAg
ICAgICBBbGxGaWVsZHNTZXQgPSAoVHlwZVNldCkKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8aW50
IFNUQVRFPgotICAgIGNsYXNzIEJ1aWxkZXIgewotICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0
cjxKU09OOjpPYmplY3Q+IG1fcmVzdWx0OwotCi0gICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBC
dWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsK
LSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXIoUmVmPC8qS2V5UGF0aCovSlNPTjo6T2JqZWN0
PiYmIG9iamVjdCkKLSAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwg
YnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKLSAgICAgICAgfQotICAgICAgICBm
cmllbmQgY2xhc3MgS2V5UGF0aDsKLSAgICBwdWJsaWM6Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IFR5cGVTZXQ+JiBzZXRUeXBlKFR5cGUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUeXBlU2V0KSwgcHJvcGVydHlfdHlwZV9hbHJlYWR5
X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ0eXBlIl9zLCBJbnNwZWN0
b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUodmFsdWUpKTsK
LSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VHlwZVNldD4oKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIFJlZjxLZXlQYXRoPiByZWxlYXNlKCkKLSAgICAgICAgewotICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsK
LSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihLZXlQYXRoKSA9PSBzaXplb2YoSlNP
Tjo6T2JqZWN0KSwgY2Fubm90X2Nhc3QpOwotCi0gICAgICAgICAgICBSZWY8SlNPTjo6T2JqZWN0
PiBqc29uUmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKLSAgICAgICAgICAgIGF1
dG8gcmVzdWx0ID0gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8S2V5UGF0aD4qPigmanNv
blJlc3VsdCkpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgIH07
Ci0KLSAgICAvKgotICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKLSAgICAgKiBSZWY8S2V5
UGF0aD4gcmVzdWx0ID0gS2V5UGF0aDo6Y3JlYXRlKCkKLSAgICAgKiAgICAgLnNldFR5cGUoLi4u
KQotICAgICAqICAgICAucmVsZWFzZSgpOwotICAgICAqLwotICAgIHN0YXRpYyBCdWlsZGVyPE5v
RmllbGRzU2V0PiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVs
ZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOwotICAgIH0KLQotICAgIHZvaWQgc2V0U3Ry
aW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgewotICAgICAgICBKU09OOjpPYmplY3RCYXNl
OjpzZXRTdHJpbmcoInN0cmluZyJfcywgdmFsdWUpOwotICAgIH0KLQotICAgIHZvaWQgc2V0QXJy
YXkoUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gdmFsdWUpCi0gICAgewotICAgICAgICBK
U09OOjpPYmplY3RCYXNlOjpzZXRBcnJheSgiYXJyYXkiX3MsIFdURk1vdmUodmFsdWUpKTsKLSAg
ICB9Ci19OwotCi19IC8vIFJ1bnRpbWUKLQotCi0KLW5hbWVzcGFjZSBUZXN0SGVscGVycyB7Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIFByb3RvY29sRW51bVR5cGU+Ci1PcHRpb25hbDxQcm90b2NvbEVu
dW1UeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJik7Ci0KLS8vIEVu
dW1zIGluIHRoZSAnUnVudGltZScgRG9tYWluCi10ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0
b3I6OlByb3RvY29sOjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21T
dHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZT4oY29uc3Qg
U3RyaW5nJik7Ci0KLX0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCi0KLX0gLy8gbmFtZXNwYWNl
IFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xPYmplY3RzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMu
Y3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwt
dHlwZS1zZXR0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMu
aCIKLQotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0K
LW5hbWVzcGFjZSBUZXN0SGVscGVycyB7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBlbnVt
X2NvbnN0YW50X3ZhbHVlc1tdID0gewotICAgICJudWxsIiwKLSAgICAic3RyaW5nIiwKLSAgICAi
YXJyYXkiLAotfTsKLQotU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7Ci0g
ICAgcmV0dXJuIGVudW1fY29uc3RhbnRfdmFsdWVzW2NvZGVdOwotfQotCi0vLyBFbnVtcyBpbiB0
aGUgJ1J1bnRpbWUnIERvbWFpbgotdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90
b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6OlR5cGU+KGNvbnN0IFN0cmluZyYg
cHJvdG9jb2xTdHJpbmcpCi17Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVl
c1tdID0gewotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6Oktl
eVBhdGg6OlR5cGU6Ok51bGwsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6
UnVudGltZTo6S2V5UGF0aDo6VHlwZTo6U3RyaW5nLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rv
cjo6UHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6OlR5cGU6OkFycmF5LAotICAgIH07Ci0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCAzOyArK2kpCi0gICAgICAgIGlmIChwcm90b2NvbFN0cmlu
ZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCi0gICAgICAgICAg
ICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6OlR5cGUpY29u
c3RhbnRWYWx1ZXNbaV07Ci0KLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi0KLX0gLy8g
bmFtZXNwYWNlIFRlc3RIZWxwZXJzCi0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmpl
Y3RzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJz
LmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25hbC10
eXBlLXNldHRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERp
c3BhdGNoZXJzLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi0KLQotbmFtZXNwYWNl
IEluc3BlY3RvciB7Ci0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2lt
cG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlICJUZXN0
UHJvdG9jb2xJbnRlcm5hbC5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENv
bmZpZ3VyYXRpb24uaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2Vk
LW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KLQot
X19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xDb25maWd1cmF0aW9uLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hh
ZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5o
IgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2ltcG9ydCAiVGVzdFByb3Rv
Y29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5h
dGVEaXNwYXRjaGFibGVBZ2VudC5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFi
bGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVj
dG9yOwotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgotewotICAg
IEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci19Ci0KLS0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJv
bGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFz
ZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBf
Y29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQp
ZGVhbGxvYwotewotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVy
bmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9y
dCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0j
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
c2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+
Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KLQotCi1A
Y2xhc3MgVGVzdFByb3RvY29sUnVudGltZUtleVBhdGg7Ci0KLXR5cGVkZWYgTlNfRU5VTShOU0lu
dGVnZXIsIFRlc3RQcm90b2NvbFBsYXRmb3JtKSB7Ci0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1B
bGwsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljLAotICAgIFRlc3RQcm90b2NvbFBs
YXRmb3JtSU9TLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1MsCi19OwotCi0KLXR5cGVk
ZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZSkgewot
ICAgIFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZU51bGwsCi0gICAgVGVzdFByb3RvY29s
UnVudGltZUtleVBhdGhUeXBlU3RyaW5nLAotICAgIFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRo
VHlwZUFycmF5LAotfTsKLQotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIp
KSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sUnVudGltZUtleVBhdGggOiBSV0lQcm90b2NvbEpT
T05PYmplY3QKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxO
U1N0cmluZyAqLCBpZD4gKilwYXlsb2FkOwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9j
b2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7Ci0tIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhUeXBlOihUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGUpdHlwZTsK
LS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIFRlc3RQcm90b2Nv
bFJ1bnRpbWVLZXlQYXRoVHlwZSB0eXBlOwotLyogb3B0aW9uYWwgKi8gQHByb3BlcnR5IChub25h
dG9taWMsIGNvcHkpIE5TU3RyaW5nICpzdHJpbmc7Ci0vKiBvcHRpb25hbCAqLyBAcHJvcGVydHkg
KG5vbmF0b21pYywgY29weSkgTlNBcnJheS8qPE5TU3RyaW5nPiovICphcnJheTsKLUBlbmQKLQot
Ci0KLQotCi0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0aWJp
bGl0eU9iamVjdHMuaD4KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5o
IgotI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKLSNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8
d3RmL0pTT05WYWx1ZXMuaD4KLQotCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRl
cm5hbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUt
c2V0dGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3Rv
Y29sQXJyYXlDb252ZXJzaW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdGVtcGxh
dGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgotT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJv
dG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90
b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xQbGF0Zm9ybSB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFs
dWUpIHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOgotICAgICAgICByZXR1cm4g
ImFsbCJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzoKLSAgICAgICAg
cmV0dXJuICJnZW5lcmljIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1JT1M6Ci0g
ICAgICAgIHJldHVybiAiaW9zIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNP
UzoKLSAgICAgICAgcmV0dXJuICJtYWNvcyJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlu
bGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xQbGF0Zm9ybT4gZnJvbVByb3RvY29sU3RyaW5nKGNv
bnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJhbGwiKQotICAgICAgICBy
ZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1BbGw7Ci0gICAgaWYgKHZhbHVlID09ICJnZW5lcmlj
IikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzsKLSAgICBpZiAo
dmFsdWUgPT0gImlvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzsK
LSAgICBpZiAodmFsdWUgPT0gIm1hY29zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBs
YXRmb3JtTWFjT1M7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotCi1pbmxpbmUgU3Ry
aW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlIHZhbHVl
KQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sUnVudGltZUtl
eVBhdGhUeXBlTnVsbDoKLSAgICAgICAgcmV0dXJuICJudWxsIl9zOwotICAgIGNhc2UgVGVzdFBy
b3RvY29sUnVudGltZUtleVBhdGhUeXBlU3RyaW5nOgotICAgICAgICByZXR1cm4gInN0cmluZyJf
czsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZUFycmF5OgotICAgICAg
ICByZXR1cm4gImFycmF5Il9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlv
bmFsPFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZT4gZnJvbVByb3RvY29sU3RyaW5nKGNv
bnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJudWxsIikKLSAgICAgICAg
cmV0dXJuIFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZU51bGw7Ci0gICAgaWYgKHZhbHVl
ID09ICJzdHJpbmciKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhU
eXBlU3RyaW5nOwotICAgIGlmICh2YWx1ZSA9PSAiYXJyYXkiKQotICAgICAgICByZXR1cm4gVGVz
dFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlQXJyYXk7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRv
d2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5o
IgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQ
YXJzZXIuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2
YXRlLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbnRlcmZhY2UgVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zIChSdW50aW1lRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZUtl
eVBhdGg6KFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoICoqKW91dFZhbHVlIGZyb21QYXlsb2Fk
OihpZClwYXlsb2FkOwotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMgKFJ1bnRpbWVEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlS2V5UGF0aDooVGVz
dFByb3RvY29sUnVudGltZUtleVBhdGggKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxv
YWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rp
b25hcnkgY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbFJ1bnRpbWVLZXlQ
YXRoIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07Ci19Ci0KLUBlbmQKLQotCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sVHlwZXMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBzaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5o
IgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPFdl
Ykluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0jaW1wb3J0IDx3dGYv
QXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNw
YWNlIEluc3BlY3RvcjsKLQotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sUnVudGltZUtl
eVBhdGgKLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rp
b25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZAotewotICAgIGlmICghKHNlbGYgPSBbc3Vw
ZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AidHlwZSJdLCBAInR5cGUiKTsKLSAgICBPcHRp
b25hbDxUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGU+IHR5cGUgPSBmcm9tUHJvdG9jb2xT
dHJpbmc8VGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlPihwYXlsb2FkW0AidHlwZSJdKTsK
LSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9FTlVNX1ZBTFVFKHR5cGUsIEAidHlwZSIpOwot
ICAgIHNlbGYudHlwZSA9IHR5cGUudmFsdWUoKTsKLQotICAgIHNlbGYuc3RyaW5nID0gcGF5bG9h
ZFtAInN0cmluZyJdOwotCi0gICAgc2VsZi5hcnJheSA9IHBheWxvYWRbQCJhcnJheSJdOwotCi0g
ICAgcmV0dXJuIHNlbGY7Ci19Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVj
dDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopb2JqZWN0Ci17Ci0gICAgaWYgKCEoc2VsZiA9IFtz
dXBlciBpbml0V2l0aEpTT05PYmplY3Q6W29iamVjdCB0b0pTT05PYmplY3RdLmdldCgpXSkpCi0g
ICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoVHlwZTooVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlKXR5cGUKLXsK
LSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQot
ICAgIHNlbGYudHlwZSA9IHR5cGU7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClz
ZXRUeXBlOihUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGUpdHlwZQotewotICAgIFtzdXBl
ciBzZXRTdHJpbmc6dG9Qcm90b2NvbFN0cmluZyh0eXBlKSBmb3JLZXk6QCJ0eXBlIl07Ci19Ci0K
LS0gKFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZSl0eXBlCi17Ci0gICAgcmV0dXJuIGZy
b21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGU+KFtzdXBlciBz
dHJpbmdGb3JLZXk6QCJ0eXBlIl0pLnZhbHVlKCk7Ci19Ci0KLS0gKHZvaWQpc2V0U3RyaW5nOihO
U1N0cmluZyAqKXN0cmluZwotewotICAgIFtzdXBlciBzZXRTdHJpbmc6c3RyaW5nIGZvcktleTpA
InN0cmluZyJdOwotfQotCi0tIChOU1N0cmluZyAqKXN0cmluZwotewotICAgIHJldHVybiBbc3Vw
ZXIgc3RyaW5nRm9yS2V5OkAic3RyaW5nIl07Ci19Ci0KLS0gKHZvaWQpc2V0QXJyYXk6KE5TQXJy
YXkvKjxOU1N0cmluZz4qLyAqKWFycmF5Ci17Ci0gICAgW3N1cGVyIHNldEpTT05BcnJheTp0b0pT
T05TdHJpbmdBcnJheShhcnJheSkgZm9yS2V5OkAiYXJyYXkiXTsKLX0KLQotLSAoTlNBcnJheS8q
PE5TU3RyaW5nPiovICopYXJyYXkKLXsKLSAgICByZXR1cm4gdG9PYmpDU3RyaW5nQXJyYXkoW3N1
cGVyIEpTT05BcnJheUZvcktleTpAImFycmF5Il0pOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvc2hvdWxkLXN0cmlw
LWNvbW1lbnRzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24t
cmVzdWx0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YTFmYjdkNGY5ZDliN2ZmY2Fj
NDBhMDY0YTU0YWJkOGNjZGVlZDUyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9nZW5lcmljL2V4cGVjdGVkL3Nob3VsZC1zdHJpcC1jb21tZW50cy5qc29uLXJlc3VsdAorKysg
L2Rldi9udWxsCkBAIC0xLDg3MCArMCwwIEBACi0jIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFj
a2VuZENvbW1hbmRzLmpzCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxk
LXN0cmlwLWNvbW1lbnRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLSMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaG91bGQtc3RyaXAtY29tbWVudHMuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2lm
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi0jaW5jbHVkZSAiVGVz
dFByb3RvY29sVHlwZXMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250
ZW5kUm91dGVyLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hl
cihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNw
YXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQotICAgIEJhY2tlbmREaXNwYXRjaGVyKiBi
YWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0
KCk7IH0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmRE
aXNwYXRjaGVyOwotfTsKLQotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSNlbmRp
ZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSMjIyBFbmQgRmls
ZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBzaG91bGQtc3RyaXAtY29tbWVudHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9i
amVjdHMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5z
cGVjdG9yIHsKLQotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KLQotCi19IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNob3VsZC1zdHJpcC1jb21tZW50cy5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFs
dWVzLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCi0jaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgotI2VuZGlm
Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBzaG91bGQtc3RyaXAtY29tbWVudHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3Mg
RnJvbnRlbmRSb3V0ZXI7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxl
OiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaG91
bGQtc3RyaXAtY29tbWVudHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlz
cGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5k
Um91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5z
cGVjdG9yIHsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVz
dEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xP
YmplY3RzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaG91bGQtc3RyaXAt
Y29tbWVudHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3Rv
Y29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotCi1uYW1lc3BhY2UgSW5z
cGVjdG9yIHsKLQotCi0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLQotCi0KLQotCi0KLQotCi19
IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xPYmplY3RzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNob3Vs
ZC1zdHJpcC1jb21tZW50cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmpl
Y3RzLmgiCi0KLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1uYW1lc3BhY2UgUHJvdG9jb2wg
ewotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2luY2x1ZGUgPHd0Zi9S
ZXRhaW5QdHIuaD4KLQotCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLX0gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRj
aGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMu
bW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaG91bGQtc3RyaXAtY29tbWVu
dHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1w
b3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5o
IgotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotCi1u
YW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBzaG91bGQtc3RyaXAtY29tbWVudHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3Rv
Y29sLmg+Ci0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVy
ZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKLUBlbmQKLQotCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIHNob3VsZC1zdHJpcC1jb21tZW50cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24u
aCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbXBvcnQgIlRlc3RQcm90
b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJu
YXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRh
YmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3Bl
Y3RvcjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KLXsKLSAg
ICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotfQotCi0tIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRy
b2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICgh
c2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAg
X2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lk
KWRlYWxsb2MKLXsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBzaG91bGQtc3RyaXAtY29tbWVudHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgot
Ci0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPHd0Zi9K
U09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2wuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNob3VsZC1z
dHJpcC1jb21tZW50cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotCi0jaW1wb3J0IDxXZWJJ
bnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+Ci0KLQotCi0KLXR5cGVkZWYgTlNfRU5V
TShOU0ludGVnZXIsIFRlc3RQcm90b2NvbFBsYXRmb3JtKSB7Ci0gICAgVGVzdFByb3RvY29sUGxh
dGZvcm1BbGwsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljLAotICAgIFRlc3RQcm90
b2NvbFBsYXRmb3JtSU9TLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1MsCi19OwotCi0K
LQotCi0KLQotCi0KLQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENv
bXBhdGliaWxpdHlPYmplY3RzLmg+Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKLQot
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBzaG91bGQtc3RyaXAtY29tbWVudHMuanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIK
LSNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCi0jaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPHd0
Zi9KU09OVmFsdWVzLmg+Ci0KLQotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJu
YWwuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaG91bGQtc3RyaXAtY29tbWVudHMuanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJU
ZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29u
dmVyc2lvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IE9iakNFbnVtVHlwZT4KLU9wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3RyaW5n
KGNvbnN0IFN0cmluZyYgdmFsdWUpOwotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmco
VGVzdFByb3RvY29sUGxhdGZvcm0gdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAg
Y2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDoKLSAgICAgICAgcmV0dXJuICJhbGwiX3M7Ci0g
ICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM6Ci0gICAgICAgIHJldHVybiAiZ2Vu
ZXJpYyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOgotICAgICAgICByZXR1
cm4gImlvcyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M6Ci0gICAgICAg
IHJldHVybiAibWFjb3MiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9u
YWw8VGVzdFByb3RvY29sUGxhdGZvcm0+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcm
IHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiYWxsIikKLSAgICAgICAgcmV0dXJuIFRlc3RQ
cm90b2NvbFBsYXRmb3JtQWxsOwotICAgIGlmICh2YWx1ZSA9PSAiZ2VuZXJpYyIpCi0gICAgICAg
IHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM7Ci0gICAgaWYgKHZhbHVlID09ICJp
b3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1JT1M7Ci0gICAgaWYgKHZh
bHVlID09ICJtYWNvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09T
OwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBzaG91bGQtc3RyaXAtY29tbWVudHMuanNvbgotLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJU
ZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9j
b2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0K
LQotCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLQot
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJu
YWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0
IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotI2ltcG9ydCA8
d3RmL0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5h
bWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5t
bQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2dlbmVyaWMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10
eXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2
ZS10eXBlLmpzb24tcmVzdWx0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNTY2NjM3
OWNhNzQ2YjY2ODczOTc2YjAzZTc0MThjZGE0MmE0NjFlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1w
cmltaXRpdmUtdHlwZS5qc29uLXJlc3VsdAorKysgL2Rldi9udWxsCkBAIC0xLDg5MSArMCwwIEBA
Ci0jIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2
ZS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLSMj
IyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9u
Y2UKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi0jaW5j
bHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckZyb250ZW5kUm91dGVyLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNrZW5k
RGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2Jh
Y2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQotICAgIEJhY2tlbmREaXNw
YXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3Bh
dGNoZXIuZ2V0KCk7IH0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBt
X2JhY2tlbmREaXNwYXRjaGVyOwotfTsKLQotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
Ci0KLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSMj
IyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UK
LQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdHlwZWRlZiBTdHJpbmcgRXJy
b3JTdHJpbmc7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTog
VGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERp
c3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVj
bGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJU
ZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5j
bHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jaW5jbHVk
ZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgotI2VuZGlmCi0KLW5hbWVzcGFj
ZSBJbnNwZWN0b3IgewotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQg
RmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RG
cm9udGVuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0
eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUg
IlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQot
Y2xhc3MgRnJvbnRlbmRSb3V0ZXI7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVu
ZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgotLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UK
LQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNp
bmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0K
LW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLQotCi0KLQotLy8gVHlwZWRlZnMuCi1uYW1lc3BhY2Ug
UnVudGltZSB7Ci0vKiBVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIuICovCi10eXBlZGVmIGludCBS
ZW1vdGVPYmplY3RJZDsKLX0gLy8gUnVudGltZQotLy8gRW5kIG9mIHR5cGVkZWZzLgotCi0KLQot
fSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sT2JqZWN0cy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBl
LWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQot
bmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVj
dHMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMu
aAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxp
YXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLQotCi1u
YW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBl
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9y
dCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIK
LQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW5jbHVkZSAiVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLQotbmFt
ZXNwYWNlIEluc3BlY3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8V2ViSW5z
cGVjdG9yL1Rlc3RQcm90b2NvbC5oPgotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVm
YXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0
Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLQot
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZl
LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0j
aW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90
b2NvbEludGVybmFsLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMu
aCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+
Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIu
aD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNw
YXRjaGVycy5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXJzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlv
biBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCi17Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JD
b250cm9sbGVyKiBfY29udHJvbGxlcjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29u
dHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCi17Ci0g
ICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBu
aWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIpOwotICAgIF9jb250cm9sbGVyID0gY29udHJvbGxl
cjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgW3N1cGVy
IGRlYWxsb2NdOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25m
aWd1cmF0aW9uLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNo
ZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlv
bi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2lt
cG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDx3dGYvSlNPTlZh
bHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLSMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0
aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQot
I2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgotCi0KLQotCi10
eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xQbGF0Zm9ybSkgewotICAgIFRl
c3RQcm90b2NvbFBsYXRmb3JtQWxsLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYywK
LSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1h
Y09TLAotfTsKLQotCi0KLQotCi0KLQotCi0KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVBy
b3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXBy
aW1pdGl2ZS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09O
T2JqZWN0UHJpdmF0ZS5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNw
ZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi0KLQotCi0j
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3Rv
Y29sLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25z
Lmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51
bVR5cGU+Ci1PcHRpb25hbDxPYmpDRW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBT
dHJpbmcmIHZhbHVlKTsKLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90
b2NvbFBsYXRmb3JtIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVz
dFByb3RvY29sUGxhdGZvcm1BbGw6Ci0gICAgICAgIHJldHVybiAiYWxsIl9zOwotICAgIGNhc2Ug
VGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOgotICAgICAgICByZXR1cm4gImdlbmVyaWMiX3M7
Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzoKLSAgICAgICAgcmV0dXJuICJpb3Mi
X3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TOgotICAgICAgICByZXR1cm4g
Im1hY29zIl9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQ
cm90b2NvbFBsYXRmb3JtPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkK
LXsKLSAgICBpZiAodmFsdWUgPT0gImFsbCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQ
bGF0Zm9ybUFsbDsKLSAgICBpZiAodmFsdWUgPT0gImdlbmVyaWMiKQotICAgICAgICByZXR1cm4g
VGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljOwotICAgIGlmICh2YWx1ZSA9PSAiaW9zIikKLSAg
ICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOwotICAgIGlmICh2YWx1ZSA9PSAi
bWFjb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzsKLSAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0K
LSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQg
IlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wu
aCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKLSNpbXBvcnQgPFdlYkluc3Bl
Y3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJ
bnNwZWN0b3I7Ci0KLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChSdW50
aW1lRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZVJlbW90ZU9iamVjdElkOihOU051bWJlciAqKilv
dXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLQotQGVuZAotCi1AaW1wbGVtZW50YXRp
b24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChSdW50aW1lRG9tYWluKQotCi0rICh2b2lk
KV9wYXJzZVJlbW90ZU9iamVjdElkOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDoo
aWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwg
W05TTnVtYmVyIGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gKE5TTnVtYmVyICopcGF5bG9hZDsK
LX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
Lm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUt
dHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNp
bXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9i
amVjdFByaXZhdGUuaD4KLSNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW1wb3J0IDx3dGYv
SlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLQotCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC90eXBlLWRl
Y2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9u
LWFycmF5LXR5cGUuanNvbi1yZXN1bHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0
ZTVjN2U0MDkxOGFiZDg3NWUxZjllZDYzZTJmOTlhNzI4MjhjNTAuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hcnJh
eS10eXBlLmpzb24tcmVzdWx0CisrKyAvZGV2L251bGwKQEAgLTEsMTA3MyArMCwwIEBACi0jIyMg
QmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotLy8gRGVidWdnZXIKLUluc3Bl
Y3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIkRlYnVnZ2VyIiwgbnVsbCk7Ci1JbnNwZWN0b3JC
YWNrZW5kLnJlZ2lzdGVyRW51bSgiRGVidWdnZXIuUmVhc29uIiwge0RpZWQ6ICJEaWVkIiwgRmFp
bnRlZDogIkZhaW50ZWQiLCBIdW5ncnk6ICJIdW5ncnkifSk7Ci1JbnNwZWN0b3JCYWNrZW5kLmFj
dGl2YXRlRG9tYWluKCJEZWJ1Z2dlciIsIG51bGwpOwotIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JC
YWNrZW5kQ29tbWFuZHMuanMKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5k
RGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVj
bGFyYXRpb24tYXJyYXktdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgotI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLQotbmFtZXNwYWNl
IEluc3BlY3RvciB7Ci0KLWNsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1Ymxp
YzoKLSAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hl
cj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNo
ZXIpOyB9Ci0gICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3Qg
eyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQotcHJpdmF0ZToKLSAgICBSZWZQ
dHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Ci19OwotCi0KLQotCi19
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQotIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERp
c3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXkt
dHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNw
cmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10eXBlZGVm
IFN0cmluZyBFcnJvclN0cmluZzsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMj
IEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRl
c3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRl
c3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNs
dWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSNpbmNsdWRl
ICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNl
IEluc3BlY3RvciB7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBG
aWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZy
b250ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5
cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29s
T2JqZWN0cy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBGcm9udGVu
ZFJvdXRlcjsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RG
cm9udGVuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3Bh
dGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFy
YXRpb24tYXJyYXktdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNw
YXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRS
b3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNw
ZWN0b3IgewotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0
RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9i
amVjdHMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRp
b24tYXJyYXktdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
UHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5hbWVzcGFj
ZSBJbnNwZWN0b3IgewotCi0KLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLS8vIEZvcndh
cmQgZGVjbGFyYXRpb25zLgotbmFtZXNwYWNlIERlYnVnZ2VyIHsKLWVudW0gY2xhc3MgUmVhc29u
OwotfSAvLyBEZWJ1Z2dlcgotLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgotCi0KLS8v
IFR5cGVkZWZzLgotbmFtZXNwYWNlIERlYnVnZ2VyIHsKLXR5cGVkZWYgaW50IEJyZWFrcG9pbnRJ
ZDsKLX0gLy8gRGVidWdnZXIKLQotbmFtZXNwYWNlIFJ1bnRpbWUgewotdHlwZWRlZiBpbnQgT2Jq
ZWN0SWQ7Ci10eXBlZGVmIEpTT046OkFycmF5T2Y8aW50PiBMdWNreU51bWJlcnM7Ci10eXBlZGVm
IEpTT046OkFycmF5T2Y8U3RyaW5nPiBCYWJ5TmFtZXM7Ci10eXBlZGVmIEpTT046OkFycmF5T2Y8
aW50PiBOZXdPYmplY3RzOwotdHlwZWRlZiBKU09OOjpBcnJheU9mPGludD4gT2xkT2JqZWN0czsK
LXR5cGVkZWYgSlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVh
c29uPiBTdG9wUmVhc29uczsKLX0gLy8gUnVudGltZQotLy8gRW5kIG9mIHR5cGVkZWZzLgotCi1u
YW1lc3BhY2UgVGVzdEhlbHBlcnMgewotCi1TdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50
IGNvZGUpOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFs
dWUoVCBlbnVtVmFsdWUpCi17Ci0gICAgcmV0dXJuIGdldEVudW1Db25zdGFudFZhbHVlKHN0YXRp
Y19jYXN0PGludD4oZW51bVZhbHVlKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJz
Ci0KLW5hbWVzcGFjZSBEZWJ1Z2dlciB7Ci0vKiAgKi8KLWVudW0gY2xhc3MgUmVhc29uIHsKLSAg
ICBEaWVkID0gMCwKLSAgICBGYWludGVkID0gMSwKLSAgICBIdW5ncnkgPSAyLAotfTsgLy8gZW51
bSBjbGFzcyBSZWFzb24KLX0gLy8gRGVidWdnZXIKLQotCi0KLW5hbWVzcGFjZSBUZXN0SGVscGVy
cyB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFByb3RvY29sRW51bVR5cGU+Ci1PcHRpb25hbDxQcm90
b2NvbEVudW1UeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJik7Ci0K
LS8vIEVudW1zIGluIHRoZSAnRGVidWdnZXInIERvbWFpbgotdGVtcGxhdGU8PgotT3B0aW9uYWw8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbj4gcGFyc2VFbnVtVmFsdWVGcm9t
U3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb24+KGNvbnN0IFN0cmlu
ZyYpOwotCi19IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwotCi19IC8vIG5hbWVzcGFjZSBQcm90
b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotbmFtZXNwYWNlIFdURiB7Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKLQotLy8gSGFzaCBkZWNsYXJh
dGlvbnMgaW4gdGhlICdEZWJ1Z2dlcicgRG9tYWluCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgRGVmYXVs
dEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbj4gewotICAgIHR5cGVk
ZWYgSW50SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uPiBIYXNoOwot
fTsKLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVj
dHMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotCi0jaW5jbHVkZSA8
d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotbmFtZXNwYWNlIFRlc3RI
ZWxwZXJzIHsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFsdWVz
W10gPSB7Ci0gICAgIkRpZWQiLAotICAgICJGYWludGVkIiwKLSAgICAiSHVuZ3J5IiwKLX07Ci0K
LVN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgewotICAgIHJldHVybiBlbnVt
X2NvbnN0YW50X3ZhbHVlc1tjb2RlXTsKLX0KLQotLy8gRW51bXMgaW4gdGhlICdEZWJ1Z2dlcicg
RG9tYWluCi10ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dl
cjo6UmVhc29uPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RGVidWdnZXI6OlJlYXNvbj4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKLXsKLSAgICBz
dGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7Ci0gICAgICAgIChzaXplX3Qp
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbjo6RGllZCwKLSAgICAgICAgKHNp
emVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uOjpGYWludGVkLAotICAg
ICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb246Okh1bmdy
eSwKLSAgICB9OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMzsgKytpKQotICAgICAgICBp
ZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNb
aV1dKQotICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6
UmVhc29uKWNvbnN0YW50VmFsdWVzW2ldOwotCi0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0K
LQotCi19IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJv
dG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sT2JqZWN0cy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmRE
aXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNs
YXJhdGlvbi1hcnJheS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVycy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQotCi0KLW5h
bWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIK
LSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSAi
VGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotCi1uYW1lc3BhY2UgSW5zcGVj
dG9yIHsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xDb25maWd1cmF0aW9uLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBl
LWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+Ci0K
LV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0
UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sQ29uZmlndXJhdGlvbi5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5
cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIK
LQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2Nv
bEJhY2tlbmREaXNwYXRjaGVycy5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRl
RGlzcGF0Y2hhYmxlQWdlbnQuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxl
SW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3Rv
cjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KLXsKLSAgICBB
dWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotfQotCi0tIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xs
ZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2Vs
ZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2Nv
bnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWRl
YWxsb2MKLXsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5o
IgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPHd0
Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2wuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUt
ZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotCi0jaW1w
b3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+Ci0KLQotCi0KLXR5cGVk
ZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbFBsYXRmb3JtKSB7Ci0gICAgVGVzdFBy
b3RvY29sUGxhdGZvcm1BbGwsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljLAotICAg
IFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1Ms
Ci19OwotCi0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbERlYnVnZ2Vy
UmVhc29uKSB7Ci0gICAgVGVzdFByb3RvY29sRGVidWdnZXJSZWFzb25EaWVkLAotICAgIFRlc3RQ
cm90b2NvbERlYnVnZ2VyUmVhc29uRmFpbnRlZCwKLSAgICBUZXN0UHJvdG9jb2xEZWJ1Z2dlclJl
YXNvbkh1bmdyeSwKLX07Ci0KLQotCi0KLQotCi0KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JX
SVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgotCi0jIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10
eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2lt
cG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJp
dmF0ZS5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250
cm9sbGVyLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi0KLQotCi0jIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlw
ZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0IDxXZWJJ
bnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNw
ZWN0b3IgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+Ci1PcHRpb25hbDxPYmpD
RW51bVR5cGU+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKLQotaW5s
aW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFBsYXRmb3JtIHZhbHVlKQot
ewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1BbGw6
Ci0gICAgICAgIHJldHVybiAiYWxsIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1H
ZW5lcmljOgotICAgICAgICByZXR1cm4gImdlbmVyaWMiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9j
b2xQbGF0Zm9ybUlPUzoKLSAgICAgICAgcmV0dXJuICJpb3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJv
dG9jb2xQbGF0Zm9ybU1hY09TOgotICAgICAgICByZXR1cm4gIm1hY29zIl9zOwotICAgIH0KLX0K
LQotdGVtcGxhdGU8PgotaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFBsYXRmb3JtPiBmcm9t
UHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0g
ImFsbCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDsKLSAgICBpZiAo
dmFsdWUgPT0gImdlbmVyaWMiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1H
ZW5lcmljOwotICAgIGlmICh2YWx1ZSA9PSAiaW9zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90
b2NvbFBsYXRmb3JtSU9TOwotICAgIGlmICh2YWx1ZSA9PSAibWFjb3MiKQotICAgICAgICByZXR1
cm4gVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0Owot
fQotCi0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEZWJ1Z2dl
clJlYXNvbiB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQcm90
b2NvbERlYnVnZ2VyUmVhc29uRGllZDoKLSAgICAgICAgcmV0dXJuICJEaWVkIl9zOwotICAgIGNh
c2UgVGVzdFByb3RvY29sRGVidWdnZXJSZWFzb25GYWludGVkOgotICAgICAgICByZXR1cm4gIkZh
aW50ZWQiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbkh1bmdyeToKLSAg
ICAgICAgcmV0dXJuICJIdW5ncnkiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUg
T3B0aW9uYWw8VGVzdFByb3RvY29sRGVidWdnZXJSZWFzb24+IGZyb21Qcm90b2NvbFN0cmluZyhj
b25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiRGllZCIpCi0gICAgICAg
IHJldHVybiBUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbkRpZWQ7Ci0gICAgaWYgKHZhbHVlID09
ICJGYWludGVkIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERlYnVnZ2VyUmVhc29uRmFp
bnRlZDsKLSAgICBpZiAodmFsdWUgPT0gIkh1bmdyeSIpCi0gICAgICAgIHJldHVybiBUZXN0UHJv
dG9jb2xEZWJ1Z2dlclJlYXNvbkh1bmdyeTsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQot
Ci0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVj
bGFyYXRpb24tYXJyYXktdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotCi0j
aW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIu
aCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+
Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbnRlcmZhY2UgVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zIChEZWJ1Z2dlckRvbWFpbikKLQotKyAodm9pZClfcGFyc2VCcmVha3Bv
aW50SWQ6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotKyAo
dm9pZClfcGFyc2VSZWFzb246KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClw
YXlsb2FkOwotCi1AZW5kCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAo
UnVudGltZURvbWFpbikKLQotKyAodm9pZClfcGFyc2VPYmplY3RJZDooTlNOdW1iZXIgKiopb3V0
VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZUx1Y2t5TnVtYmVy
czooTlNBcnJheS8qPE5TTnVtYmVyPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXls
b2FkOwotKyAodm9pZClfcGFyc2VCYWJ5TmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKilv
dXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLSsgKHZvaWQpX3BhcnNlTmV3T2JqZWN0
czooTlNBcnJheS8qPE5TTnVtYmVyPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXls
b2FkOwotKyAodm9pZClfcGFyc2VPbGRPYmplY3RzOihOU0FycmF5Lyo8TlNOdW1iZXI+Ki8gKiop
b3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZVN0b3BSZWFz
b25zOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBh
eWxvYWQ7Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucyAoRGVidWdnZXJEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlQnJlYWtwb2ludElkOihOU051
bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TTnVtYmVyIGNsYXNzXSk7Ci0gICAgKm91
dFZhbHVlID0gKE5TTnVtYmVyICopcGF5bG9hZDsKLX0KLQotKyAodm9pZClfcGFyc2VSZWFzb246
KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKLSAg
ICBPcHRpb25hbDxUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbj4gcmVzdWx0ID0gSW5zcGVjdG9y
Ojpmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sRGVidWdnZXJSZWFzb24+KHBheWxvYWQp
OwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX0VOVU1fVkFMVUUocmVzdWx0LCBAIlJlYXNv
biIpOwotICAgICpvdXRWYWx1ZSA9IEAocmVzdWx0LnZhbHVlKCkpOwotfQotCi1AZW5kCi1AaW1w
bGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChSdW50aW1lRG9tYWluKQot
Ci0rICh2b2lkKV9wYXJzZU9iamVjdElkOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9h
ZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9h
ZCwgW05TTnVtYmVyIGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gKE5TTnVtYmVyICopcGF5bG9h
ZDsKLX0KLQotKyAodm9pZClfcGFyc2VMdWNreU51bWJlcnM6KE5TQXJyYXkvKjxOU051bWJlcj4q
LyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TQXJyYXkvKjxOU051bWJlcj4qLyBjbGFzc10p
OwotICAgICpvdXRWYWx1ZSA9IChOU0FycmF5Lyo8TlNOdW1iZXI+Ki8gKilwYXlsb2FkOwotfQot
Ci0rICh2b2lkKV9wYXJzZUJhYnlOYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKW91dFZh
bHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9C
QURfVFlQRShwYXlsb2FkLCBbTlNBcnJheS8qPE5TU3RyaW5nPiovIGNsYXNzXSk7Ci0gICAgKm91
dFZhbHVlID0gKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKXBheWxvYWQ7Ci19Ci0KLSsgKHZvaWQp
X3BhcnNlTmV3T2JqZWN0czooTlNBcnJheS8qPE5TTnVtYmVyPiovICoqKW91dFZhbHVlIGZyb21Q
YXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShw
YXlsb2FkLCBbTlNBcnJheS8qPE5TTnVtYmVyPiovIGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0g
KE5TQXJyYXkvKjxOU051bWJlcj4qLyAqKXBheWxvYWQ7Ci19Ci0KLSsgKHZvaWQpX3BhcnNlT2xk
T2JqZWN0czooTlNBcnJheS8qPE5TTnVtYmVyPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihp
ZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBb
TlNBcnJheS8qPE5TTnVtYmVyPiovIGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gKE5TQXJyYXkv
KjxOU051bWJlcj4qLyAqKXBheWxvYWQ7Ci19Ci0KLSsgKHZvaWQpX3BhcnNlU3RvcFJlYXNvbnM6
KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9h
ZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TQXJyYXkv
KjxOU1N0cmluZz4qLyBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IChOU0FycmF5Lyo8TlNTdHJp
bmc+Ki8gKilwYXlsb2FkOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVz
Lm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1h
cnJheS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xK
U09OT2JqZWN0UHJpdmF0ZS5oPgotI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQg
PHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotCi0K
LQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3Rl
ZC90eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtZGVj
bGFyYXRpb24tZW51bS10eXBlLmpzb24tcmVzdWx0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA4OTc5ZThkYmUyZmM3ODk1MDJjMDk3MWQ5ODEyY2U3MWJmMDI4Y2UwLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRp
b24tZW51bS10eXBlLmpzb24tcmVzdWx0CisrKyAvZGV2L251bGwKQEAgLTEsMTA4NiArMCwwIEBA
Ci0jIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0vLyBSdW50aW1lCi1J
bnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJSdW50aW1lIiwgbnVsbCk7Ci1JbnNwZWN0
b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiUnVudGltZS5GYXJtQW5pbWFscyIsIHtQaWdzOiAiUGln
cyIsIENvd3M6ICJDb3dzIiwgQ2F0czogIkNhdHMiLCBIZW5zOiAiSGVucyJ9KTsKLUluc3BlY3Rv
ckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJSdW50aW1lLlR3b0xlZ2dlZEFuaW1hbHMiLCB7RHVja3M6
ICJEdWNrcyIsIEhlbnM6ICJIZW5zIiwgQ3Jvd3M6ICJDcm93cyIsIEZsYW1pbmdvczogIkZsYW1p
bmdvcyJ9KTsKLUluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIlJ1bnRpbWUiLCBudWxs
KTsKLSMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0j
aWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0KLSNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xUeXBlcy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJv
bnRlbmRSb3V0ZXIuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRj
aGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERp
c3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9Ci0gICAgQmFja2VuZERpc3BhdGNoZXIq
IGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5n
ZXQoKTsgfQotcHJpdmF0ZToKLSAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2Vu
ZERpc3BhdGNoZXI7Ci19OwotCi0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotI2Vu
ZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotIyMjIEVuZCBG
aWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJv
dG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNw
YWNlIEluc3BlY3RvciB7Ci0KLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCi0KLQotfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hl
cnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUg
PHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCi0jaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVy
cy5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAK
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQot
Ci0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFs
dWVzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNw
ZWN0b3IgewotCi1jbGFzcyBGcm9udGVuZFJvdXRlcjsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgotCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLW5hbWVzcGFjZSBQcm90
b2NvbCB7Ci0KLQotCi0vLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KLW5hbWVzcGFjZSBSdW50aW1l
IHsKLWVudW0gY2xhc3MgRmFybUFuaW1hbHM7Ci1lbnVtIGNsYXNzIFR3b0xlZ2dlZEFuaW1hbHM7
Ci19IC8vIFJ1bnRpbWUKLS8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KLQotCi0KLQot
bmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKLQotU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGlu
dCBjb2RlKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdldEVudW1Db25zdGFudFZh
bHVlKFQgZW51bVZhbHVlKQotewotICAgIHJldHVybiBnZXRFbnVtQ29uc3RhbnRWYWx1ZShzdGF0
aWNfY2FzdDxpbnQ+KGVudW1WYWx1ZSkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVy
cwotCi1uYW1lc3BhY2UgUnVudGltZSB7Ci0vKiAgKi8KLWVudW0gY2xhc3MgRmFybUFuaW1hbHMg
ewotICAgIFBpZ3MgPSAwLAotICAgIENvd3MgPSAxLAotICAgIENhdHMgPSAyLAotICAgIEhlbnMg
PSAzLAotfTsgLy8gZW51bSBjbGFzcyBGYXJtQW5pbWFscwotLyogICovCi1lbnVtIGNsYXNzIFR3
b0xlZ2dlZEFuaW1hbHMgewotICAgIER1Y2tzID0gNCwKLSAgICBIZW5zID0gMywKLSAgICBDcm93
cyA9IDUsCi0gICAgRmxhbWluZ29zID0gNiwKLX07IC8vIGVudW0gY2xhc3MgVHdvTGVnZ2VkQW5p
bWFscwotfSAvLyBSdW50aW1lCi0KLQotCi1uYW1lc3BhY2UgVGVzdEhlbHBlcnMgewotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBQcm90b2NvbEVudW1UeXBlPgotT3B0aW9uYWw8UHJvdG9jb2xFbnVtVHlw
ZT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYpOwotCi0vLyBFbnVtcyBp
biB0aGUgJ1J1bnRpbWUnIERvbWFpbgotdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJ
bnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpGYXJtQW5pbWFscz4oY29uc3QgU3RyaW5nJik7
Ci10ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUd29M
ZWdnZWRBbmltYWxzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFscz4oY29uc3QgU3RyaW5nJik7Ci0KLX0gLy8gbmFt
ZXNwYWNlIFRlc3RIZWxwZXJzCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgotCi1uYW1lc3BhY2UgV1RGIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RydWN0IERlZmF1bHRIYXNoOwotCi0vLyBIYXNoIGRlY2xhcmF0aW9ucyBpbiB0aGUgJ1J1
bnRpbWUnIERvbWFpbgotdGVtcGxhdGU8Pgotc3RydWN0IERlZmF1bHRIYXNoPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzPiB7Ci0gICAgdHlwZWRlZiBJbnRIYXNoPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzPiBIYXNoOwotfTsKLXRlbXBs
YXRlPD4KLXN0cnVjdCBEZWZhdWx0SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpU
d29MZWdnZWRBbmltYWxzPiB7Ci0gICAgdHlwZWRlZiBJbnRIYXNoPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM+IEhhc2g7Ci19OwotCi19IC8vIG5hbWVzcGFj
ZSBXVEYKLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLQotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLW5h
bWVzcGFjZSBQcm90b2NvbCB7Ci0KLW5hbWVzcGFjZSBUZXN0SGVscGVycyB7Ci0KLXN0YXRpYyBj
b25zdCBjaGFyKiBjb25zdCBlbnVtX2NvbnN0YW50X3ZhbHVlc1tdID0gewotICAgICJQaWdzIiwK
LSAgICAiQ293cyIsCi0gICAgIkNhdHMiLAotICAgICJIZW5zIiwKLSAgICAiRHVja3MiLAotICAg
ICJDcm93cyIsCi0gICAgIkZsYW1pbmdvcyIsCi19OwotCi1TdHJpbmcgZ2V0RW51bUNvbnN0YW50
VmFsdWUoaW50IGNvZGUpIHsKLSAgICByZXR1cm4gZW51bV9jb25zdGFudF92YWx1ZXNbY29kZV07
Ci19Ci0KLS8vIEVudW1zIGluIHRoZSAnUnVudGltZScgRG9tYWluCi10ZW1wbGF0ZTw+Ci1PcHRp
b25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpGYXJtQW5pbWFscz4gcGFyc2VFbnVt
VmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxz
Pihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQotewotICAgIHN0YXRpYyBjb25zdCBzaXpl
X3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3Rv
Y29sOjpSdW50aW1lOjpGYXJtQW5pbWFsczo6UGlncywKLSAgICAgICAgKHNpemVfdClJbnNwZWN0
b3I6OlByb3RvY29sOjpSdW50aW1lOjpGYXJtQW5pbWFsczo6Q293cywKLSAgICAgICAgKHNpemVf
dClJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpGYXJtQW5pbWFsczo6Q2F0cywKLSAgICAg
ICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpGYXJtQW5pbWFsczo6SGVu
cywKLSAgICB9OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgNDsgKytpKQotICAgICAgICBp
ZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNb
aV1dKQotICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpG
YXJtQW5pbWFscyljb25zdGFudFZhbHVlc1tpXTsKLQotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
Ci19Ci0KLXRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6
OlR3b0xlZ2dlZEFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlBy
b3RvY29sOjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxzPihjb25zdCBTdHJpbmcmIHByb3RvY29s
U3RyaW5nKQotewotICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsK
LSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUd29MZWdnZWRB
bmltYWxzOjpEdWNrcywKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50
aW1lOjpUd29MZWdnZWRBbmltYWxzOjpIZW5zLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6
UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM6OkNyb3dzLAotICAgICAgICAoc2l6
ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM6OkZsYW1p
bmdvcywKLSAgICB9OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgNDsgKytpKQotICAgICAg
ICBpZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRWYWx1
ZXNbaV1dKQotICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1l
OjpUd29MZWdnZWRBbmltYWxzKWNvbnN0YW50VmFsdWVzW2ldOwotCi0gICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKLX0KLQotCi19IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwotCi0KLQotfSAvLyBu
YW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5o
PgotCi0KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLQot
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAi
Y29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQot
I2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLQotbmFtZXNw
YWNlIEluc3BlY3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3Rv
Y29sLmg+Ci0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVy
ZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKLUBlbmQKLQotCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJh
dGlvbi5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2ltcG9ydCAiVGVz
dFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9B
bHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVn
bWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgotCi11c2luZyBuYW1lc3BhY2Ug
SW5zcGVjdG9yOwotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgot
ewotICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci19Ci0K
LS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9y
Q29udHJvbGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAg
aWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsK
LSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0g
KHZvaWQpZGVhbGxvYwotewotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotQGVuZAotCi0KLSMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50
ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1w
b3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0K
LSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgot
Ci0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+Ci0KLQotCi0K
LXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbFBsYXRmb3JtKSB7Ci0gICAg
VGVzdFByb3RvY29sUGxhdGZvcm1BbGwsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmlj
LAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3Jt
TWFjT1MsCi19OwotCi0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbFJ1
bnRpbWVGYXJtQW5pbWFscykgewotICAgIFRlc3RQcm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFsc1Bp
Z3MsCi0gICAgVGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzQ293cywKLSAgICBUZXN0UHJv
dG9jb2xSdW50aW1lRmFybUFuaW1hbHNDYXRzLAotICAgIFRlc3RQcm90b2NvbFJ1bnRpbWVGYXJt
QW5pbWFsc0hlbnMsCi19OwotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9j
b2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFscykgewotICAgIFRlc3RQcm90b2NvbFJ1bnRpbWVUd29M
ZWdnZWRBbmltYWxzRHVja3MsCi0gICAgVGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1h
bHNIZW5zLAotICAgIFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzQ3Jvd3MsCi0g
ICAgVGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHNGbGFtaW5nb3MsCi19OwotCi0K
LQotCi0KLQotCi0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEJ1aWxkQ29tcGF0
aWJpbGl0eU9iamVjdHMuaD4KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgi
Ci0jaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgotI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDx3
dGYvSlNPTlZhbHVlcy5oPgotCi0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVy
bmFsLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5
cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1w
b3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFy
cmF5Q29udmVyc2lvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIE9iakNFbnVtVHlwZT4KLU9wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29s
U3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOwotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xT
dHJpbmcoVGVzdFByb3RvY29sUGxhdGZvcm0gdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7
Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDoKLSAgICAgICAgcmV0dXJuICJhbGwi
X3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM6Ci0gICAgICAgIHJldHVy
biAiZ2VuZXJpYyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOgotICAgICAg
ICByZXR1cm4gImlvcyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M6Ci0g
ICAgICAgIHJldHVybiAibWFjb3MiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUg
T3B0aW9uYWw8VGVzdFByb3RvY29sUGxhdGZvcm0+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBT
dHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiYWxsIikKLSAgICAgICAgcmV0dXJu
IFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOwotICAgIGlmICh2YWx1ZSA9PSAiZ2VuZXJpYyIpCi0g
ICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM7Ci0gICAgaWYgKHZhbHVl
ID09ICJpb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1JT1M7Ci0gICAg
aWYgKHZhbHVlID09ICJtYWNvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9y
bU1hY09TOwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLQotaW5saW5lIFN0cmluZyB0
b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFscyB2YWx1ZSkKLXsK
LSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFJ1bnRpbWVGYXJtQW5p
bWFsc1BpZ3M6Ci0gICAgICAgIHJldHVybiAiUGlncyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2Nv
bFJ1bnRpbWVGYXJtQW5pbWFsc0Nvd3M6Ci0gICAgICAgIHJldHVybiAiQ293cyJfczsKLSAgICBj
YXNlIFRlc3RQcm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFsc0NhdHM6Ci0gICAgICAgIHJldHVybiAi
Q2F0cyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFsc0hlbnM6Ci0g
ICAgICAgIHJldHVybiAiSGVucyJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBP
cHRpb25hbDxUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHM+IGZyb21Qcm90b2NvbFN0cmlu
Zyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiUGlncyIpCi0gICAg
ICAgIHJldHVybiBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHNQaWdzOwotICAgIGlmICh2
YWx1ZSA9PSAiQ293cyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFu
aW1hbHNDb3dzOwotICAgIGlmICh2YWx1ZSA9PSAiQ2F0cyIpCi0gICAgICAgIHJldHVybiBUZXN0
UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHNDYXRzOwotICAgIGlmICh2YWx1ZSA9PSAiSGVucyIp
Ci0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHNIZW5zOwotICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmlu
ZyhUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFscyB2YWx1ZSkKLXsKLSAgICBzd2l0
Y2godmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxz
RHVja3M6Ci0gICAgICAgIHJldHVybiAiRHVja3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xS
dW50aW1lVHdvTGVnZ2VkQW5pbWFsc0hlbnM6Ci0gICAgICAgIHJldHVybiAiSGVucyJfczsKLSAg
ICBjYXNlIFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzQ3Jvd3M6Ci0gICAgICAg
IHJldHVybiAiQ3Jvd3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2Vk
QW5pbWFsc0ZsYW1pbmdvczoKLSAgICAgICAgcmV0dXJuICJGbGFtaW5nb3MiX3M7Ci0gICAgfQot
fQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sUnVudGltZVR3b0xl
Z2dlZEFuaW1hbHM+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewot
ICAgIGlmICh2YWx1ZSA9PSAiRHVja3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUnVu
dGltZVR3b0xlZ2dlZEFuaW1hbHNEdWNrczsKLSAgICBpZiAodmFsdWUgPT0gIkhlbnMiKQotICAg
ICAgICByZXR1cm4gVGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHNIZW5zOwotICAg
IGlmICh2YWx1ZSA9PSAiQ3Jvd3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUnVudGlt
ZVR3b0xlZ2dlZEFuaW1hbHNDcm93czsKLSAgICBpZiAodmFsdWUgPT0gIkZsYW1pbmdvcyIpCi0g
ICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFsc0ZsYW1pbmdv
czsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1w
b3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJ
UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9y
OwotCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoUnVudGltZURvbWFp
bikKLQotKyAodm9pZClfcGFyc2VGYXJtQW5pbWFsczooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJv
bVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZVR3b0xlZ2dlZEFuaW1hbHM6KE5T
TnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotCi1AZW5kCi0KLUBp
bXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFJ1bnRpbWVEb21haW4p
Ci0KLSsgKHZvaWQpX3BhcnNlRmFybUFuaW1hbHM6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21Q
YXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShw
YXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKLSAgICBPcHRpb25hbDxUZXN0UHJvdG9jb2xSdW50
aW1lRmFybUFuaW1hbHM+IHJlc3VsdCA9IEluc3BlY3Rvcjo6ZnJvbVByb3RvY29sU3RyaW5nPFRl
c3RQcm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFscz4ocGF5bG9hZCk7Ci0gICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9CQURfRU5VTV9WQUxVRShyZXN1bHQsIEAiRmFybUFuaW1hbHMiKTsKLSAgICAqb3V0
VmFsdWUgPSBAKHJlc3VsdC52YWx1ZSgpKTsKLX0KLQotKyAodm9pZClfcGFyc2VUd29MZWdnZWRB
bmltYWxzOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewot
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TU3RyaW5nIGNsYXNz
XSk7Ci0gICAgT3B0aW9uYWw8VGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHM+IHJl
c3VsdCA9IEluc3BlY3Rvcjo6ZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbFJ1bnRpbWVU
d29MZWdnZWRBbmltYWxzPihwYXlsb2FkKTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9F
TlVNX1ZBTFVFKHJlc3VsdCwgQCJUd29MZWdnZWRBbmltYWxzIik7Ci0gICAgKm91dFZhbHVlID0g
QChyZXN1bHQudmFsdWUoKSk7Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlw
ZXMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9u
LWVudW0tdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29s
SlNPTk9iamVjdFByaXZhdGUuaD4KLSNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW1wb3J0
IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLQot
Ci0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC90
eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvdHlwZS1kZWNs
YXJhdGlvbi1vYmplY3QtdHlwZS5qc29uLXJlc3VsdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggNDJlNmRhMmJiYzg5ODE0NGQ1ZTNmNWMzNmNkMDQ4YzljY2FjM2YwNi4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC90eXBlLWRlY2xhcmF0
aW9uLW9iamVjdC10eXBlLmpzb24tcmVzdWx0CisrKyAvZGV2L251bGwKQEAgLTEsMjQ1NSArMCww
IEBACi0jIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLS8vIERhdGFi
YXNlCi1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJEYXRhYmFzZSIsIG51bGwpOwot
SW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIkRhdGFiYXNlLk1vdXNlQnV0dG9uIiwge05v
bmU6ICJOb25lIiwgTGVmdDogIkxlZnQiLCBNaWRkbGU6ICJNaWRkbGUiLCBSaWdodDogIlJpZ2h0
In0pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIkRhdGFiYXNlLk9wdGlvbmFsUGFy
YW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHkiLCB7TFRSOiAiTFRSIiwgUlRMOiAiUlRMIn0pOwot
SW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIkRhdGFiYXNlLlBhcmFtZXRlckJ1bmRsZURp
cmVjdGlvbmFsaXR5Iiwge0xUUjogIkxUUiIsIFJUTDogIlJUTCJ9KTsKLUluc3BlY3RvckJhY2tl
bmQuYWN0aXZhdGVEb21haW4oIkRhdGFiYXNlIiwgbnVsbCk7Ci0jIyMgRW5kIEZpbGU6IEluc3Bl
Y3RvckJhY2tlbmRDb21tYW5kcy5qcwotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlw
ZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgot
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0j
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLQotbmFt
ZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsK
LXB1YmxpYzoKLSAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlz
cGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRp
c3BhdGNoZXIpOyB9Ci0gICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkg
Y29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQotcHJpdmF0ZToKLSAg
ICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Ci19OwotCi0K
LQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hl
cnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24t
b2JqZWN0LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQot
dHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5o
PgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQot
I2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNlbmRpZgotCi1u
YW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0j
IyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVz
dFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFz
cyBGcm9udGVuZFJvdXRlcjsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZp
bGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9u
dGVuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5
cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEZy
b250ZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1l
c3BhY2UgSW5zcGVjdG9yIHsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQg
RmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xPYmplY3RzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBl
LWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4K
LQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0K
LQotLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCi1uYW1lc3BhY2UgRGF0YWJhc2UgewotY2xhc3Mg
RXJyb3I7Ci1jbGFzcyBPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTsKLWNsYXNzIFBhcmFtZXRlckJ1
bmRsZTsKLWNsYXNzIE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHM7Ci1jbGFzcyBEdW1t
eU9iamVjdDsKLWVudW0gY2xhc3MgTW91c2VCdXR0b247Ci19IC8vIERhdGFiYXNlCi0KLW5hbWVz
cGFjZSBUZXN0IHsKLWNsYXNzIFBhcmFtZXRlckJ1bmRsZTsKLX0gLy8gVGVzdAotLy8gRW5kIG9m
IGZvcndhcmQgZGVjbGFyYXRpb25zLgotCi0KLS8vIFR5cGVkZWZzLgotbmFtZXNwYWNlIERhdGFi
YXNlIHsKLXR5cGVkZWYgSlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFz
ZTo6RXJyb3I+IEVycm9yTGlzdDsKLX0gLy8gRGF0YWJhc2UKLS8vIEVuZCBvZiB0eXBlZGVmcy4K
LQotbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKLQotU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVl
KGludCBjb2RlKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdldEVudW1Db25zdGFu
dFZhbHVlKFQgZW51bVZhbHVlKQotewotICAgIHJldHVybiBnZXRFbnVtQ29uc3RhbnRWYWx1ZShz
dGF0aWNfY2FzdDxpbnQ+KGVudW1WYWx1ZSkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBUZXN0SGVs
cGVycwotCi1uYW1lc3BhY2UgRGF0YWJhc2UgewotLyogRGF0YWJhc2UgZXJyb3IuICovCi1jbGFz
cyBFcnJvciA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKLXB1YmxpYzoKLSAgICBlbnVtIHsK
LSAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAotICAgICAgICBNZXNzYWdlU2V0ID0gMSA8PCAwLAot
ICAgICAgICBDb2RlU2V0ID0gMSA8PCAxLAotICAgICAgICBBbGxGaWVsZHNTZXQgPSAoTWVzc2Fn
ZVNldCB8IENvZGVTZXQpCi0gICAgfTsKLQotICAgIHRlbXBsYXRlPGludCBTVEFURT4KLSAgICBj
bGFzcyBCdWlsZGVyIHsKLSAgICBwcml2YXRlOgotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0
PiBtX3Jlc3VsdDsKLQotICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8
IFNURVA+JiBjYXN0U3RhdGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKnJlaW50
ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBCdWlsZGVyKFJlZjwvKkVycm9yKi9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQotICAg
ICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRf
aW5fbm9uX2luaXRfc3RhdGUpOwotICAgICAgICB9Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBFcnJv
cjsKLSAgICBwdWJsaWM6Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1lc3NhZ2VTZXQ+JiBz
ZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNZXNzYWdlU2V0KSwgcHJvcGVydHlfbWVzc2FnZV9hbHJl
YWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJtZXNzYWdlIl9zLCB2
YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1lc3NhZ2VTZXQ+KCk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29kZVNldD4mIHNldENvZGUoaW50IHZh
bHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29k
ZVNldCksIHByb3BlcnR5X2NvZGVfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQt
PnNldEludGVnZXIoImNvZGUiX3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3Rh
dGU8Q29kZVNldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIFJlZjxFcnJvcj4gcmVsZWFzZSgp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxk
c1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChz
aXplb2YoRXJyb3IpID09IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7Ci0KLSAg
ICAgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25SZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNl
Tm9uTnVsbCgpOwotICAgICAgICAgICAgYXV0byByZXN1bHQgPSBXVEZNb3ZlKCpyZWludGVycHJl
dF9jYXN0PFJlZjxFcnJvcj4qPigmanNvblJlc3VsdCkpOwotICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICAvKgotICAgICAqIFN5bnRoZXRpYyBjb25z
dHJ1Y3RvcjoKLSAgICAgKiBSZWY8RXJyb3I+IHJlc3VsdCA9IEVycm9yOjpjcmVhdGUoKQotICAg
ICAqICAgICAuc2V0TWVzc2FnZSguLi4pCi0gICAgICogICAgIC5zZXRDb2RlKC4uLikKLSAgICAg
KiAgICAgLnJlbGVhc2UoKTsKLSAgICAgKi8KLSAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1Nl
dD4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihK
U09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKLSAgICB9Ci19OwotCi0vKiBFbnVtZXJhdGVzIGRpZmZl
cmVudCBtb3VzZSBidXR0b25zIHRoYXQgY2FuIGJlIHVzZWQuICovCi1lbnVtIGNsYXNzIE1vdXNl
QnV0dG9uIHsKLSAgICBOb25lID0gMCwKLSAgICBMZWZ0ID0gMSwKLSAgICBNaWRkbGUgPSAyLAot
ICAgIFJpZ2h0ID0gMywKLX07IC8vIGVudW0gY2xhc3MgTW91c2VCdXR0b24KLWNsYXNzIE9wdGlv
bmFsUGFyYW1ldGVyQnVuZGxlIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewotcHVibGljOgot
ICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ2RpcmVjdGlvbmFsaXR5JyB3aGlsZSBn
ZW5lcmF0aW5nIE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlLgotICAgIGVudW0gY2xhc3MgRGlyZWN0
aW9uYWxpdHkgewotICAgICAgICBMVFIgPSA0LAotICAgICAgICBSVEwgPSA1LAotICAgIH07IC8v
IGVudW0gY2xhc3MgRGlyZWN0aW9uYWxpdHkKLSAgICBlbnVtIHsKLSAgICAgICAgTm9GaWVsZHNT
ZXQgPSAwLAotICAgICAgICBBbGxGaWVsZHNTZXQgPSAwCi0gICAgfTsKLQotICAgIHRlbXBsYXRl
PGludCBTVEFURT4KLSAgICBjbGFzcyBCdWlsZGVyIHsKLSAgICBwcml2YXRlOgotICAgICAgICBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiBtX3Jlc3VsdDsKLQotICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RF
UD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhp
cyk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyKFJlZjwvKk9wdGlvbmFsUGFyYW1ldGVy
QnVuZGxlKi9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQotICAgICAgICAgICAgOiBtX3Jlc3VsdChX
VEZNb3ZlKG9iamVjdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNU
QVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwot
ICAgICAgICB9Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTsK
LSAgICBwdWJsaWM6Ci0KLSAgICAgICAgUmVmPE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlPiByZWxl
YXNlKCkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxs
RmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKLSAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKHNpemVvZihPcHRpb25hbFBhcmFtZXRlckJ1bmRsZSkgPT0gc2l6ZW9mKEpTT046Ok9iamVj
dCksIGNhbm5vdF9jYXN0KTsKLQotICAgICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4ganNvblJl
c3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7Ci0gICAgICAgICAgICBhdXRvIHJlc3Vs
dCA9IFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxl
Pio+KCZqc29uUmVzdWx0KSk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9
Ci0gICAgfTsKLQotICAgIC8qCi0gICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgotICAgICAq
IFJlZjxPcHRpb25hbFBhcmFtZXRlckJ1bmRsZT4gcmVzdWx0ID0gT3B0aW9uYWxQYXJhbWV0ZXJC
dW5kbGU6OmNyZWF0ZSgpCi0gICAgICogICAgIC5yZWxlYXNlKCk7Ci0gICAgICovCi0gICAgc3Rh
dGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4g
QnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7Ci0gICAgfQotCi0g
ICAgdm9pZCBzZXRDb2x1bW5OYW1lcyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiB2YWx1
ZSkKLSAgICB7Ci0gICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldEFycmF5KCJjb2x1bW5OYW1l
cyJfcywgV1RGTW92ZSh2YWx1ZSkpOwotICAgIH0KLQotICAgIHZvaWQgc2V0QnV0dG9ucyhSZWZQ
dHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0
b24+PiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldEFycmF5KCJi
dXR0b25zIl9zLCBXVEZNb3ZlKHZhbHVlKSk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXREaXJlY3Rp
b25hbGl0eShEaXJlY3Rpb25hbGl0eSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEpTT046Ok9iamVj
dEJhc2U6OnNldFN0cmluZygiZGlyZWN0aW9uYWxpdHkiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSh2YWx1ZSkpOwotICAgIH0KLQotICAg
IHZvaWQgc2V0Tm90ZXMoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEpTT046
Ok9iamVjdEJhc2U6OnNldFN0cmluZygibm90ZXMiX3MsIHZhbHVlKTsKLSAgICB9Ci0KLSAgICB2
b2lkIHNldFRpbWVzdGFtcChkb3VibGUgdmFsdWUpCi0gICAgewotICAgICAgICBKU09OOjpPYmpl
Y3RCYXNlOjpzZXREb3VibGUoInRpbWVzdGFtcCJfcywgdmFsdWUpOwotICAgIH0KLQotICAgIHZv
aWQgc2V0VmFsdWVzKFJlZlB0cjxKU09OOjpPYmplY3Q+IHZhbHVlKQotICAgIHsKLSAgICAgICAg
SlNPTjo6T2JqZWN0QmFzZTo6c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFdURk1vdmUodmFsdWUpKTsK
LSAgICB9Ci0KLSAgICB2b2lkIHNldFBheWxvYWQoUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZSkK
LSAgICB7Ci0gICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldFZhbHVlKCJwYXlsb2FkIl9zLCBX
VEZNb3ZlKHZhbHVlKSk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRFcnJvcihSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEpT
T046Ok9iamVjdEJhc2U6OnNldE9iamVjdCgiZXJyb3IiX3MsIFdURk1vdmUodmFsdWUpKTsKLSAg
ICB9Ci0KLSAgICB2b2lkIHNldEVycm9yTGlzdChSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6OkVycm9yTGlzdD4gdmFsdWUpCi0gICAgewotICAgICAgICBKU09OOjpPYmplY3RC
YXNlOjpzZXRBcnJheSgiZXJyb3JMaXN0Il9zLCBXVEZNb3ZlKHZhbHVlKSk7Ci0gICAgfQotfTsK
LQotY2xhc3MgUGFyYW1ldGVyQnVuZGxlIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewotcHVi
bGljOgotICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ2RpcmVjdGlvbmFsaXR5JyB3
aGlsZSBnZW5lcmF0aW5nIFBhcmFtZXRlckJ1bmRsZS4KLSAgICBlbnVtIGNsYXNzIERpcmVjdGlv
bmFsaXR5IHsKLSAgICAgICAgTFRSID0gNCwKLSAgICAgICAgUlRMID0gNSwKLSAgICB9OyAvLyBl
bnVtIGNsYXNzIERpcmVjdGlvbmFsaXR5Ci0gICAgZW51bSB7Ci0gICAgICAgIE5vRmllbGRzU2V0
ID0gMCwKLSAgICAgICAgQ29sdW1uTmFtZXNTZXQgPSAxIDw8IDAsCi0gICAgICAgIEJ1dHRvbnNT
ZXQgPSAxIDw8IDEsCi0gICAgICAgIERpcmVjdGlvbmFsaXR5U2V0ID0gMSA8PCAyLAotICAgICAg
ICBOb3Rlc1NldCA9IDEgPDwgMywKLSAgICAgICAgVGltZXN0YW1wU2V0ID0gMSA8PCA0LAotICAg
ICAgICBWYWx1ZXNTZXQgPSAxIDw8IDUsCi0gICAgICAgIFBheWxvYWRTZXQgPSAxIDw8IDYsCi0g
ICAgICAgIEVycm9yU2V0ID0gMSA8PCA3LAotICAgICAgICBFcnJvckxpc3RTZXQgPSAxIDw8IDgs
Ci0gICAgICAgIEFsbEZpZWxkc1NldCA9IChDb2x1bW5OYW1lc1NldCB8IEJ1dHRvbnNTZXQgfCBE
aXJlY3Rpb25hbGl0eVNldCB8IE5vdGVzU2V0IHwgVGltZXN0YW1wU2V0IHwgVmFsdWVzU2V0IHwg
UGF5bG9hZFNldCB8IEVycm9yU2V0IHwgRXJyb3JMaXN0U2V0KQotICAgIH07Ci0KLSAgICB0ZW1w
bGF0ZTxpbnQgU1RBVEU+Ci0gICAgY2xhc3MgQnVpbGRlciB7Ci0gICAgcHJpdmF0ZToKLSAgICAg
ICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7Ci0KLSAgICAgICAgdGVtcGxhdGU8aW50
IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+
KHRoaXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcihSZWY8LypQYXJhbWV0ZXJCdW5k
bGUqL0pTT046Ok9iamVjdD4mJiBvYmplY3QpCi0gICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1v
dmUob2JqZWN0KSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUg
PT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgZnJpZW5kIGNsYXNzIFBhcmFtZXRlckJ1bmRsZTsKLSAgICBwdWJsaWM6
Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvbHVtbk5hbWVzU2V0PiYgc2V0Q29sdW1uTmFt
ZXMoUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gdmFsdWUpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2x1bW5OYW1lc1NldCksIHByb3BlcnR5
X2NvbHVtbk5hbWVzX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJh
eSgiY29sdW1uTmFtZXMiX3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8
Q29sdW1uTmFtZXNTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
QnV0dG9uc1NldD4mIHNldEJ1dHRvbnMoUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPj4gdmFsdWUpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBCdXR0b25zU2V0KSwgcHJvcGVydHlfYnV0
dG9uc19hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoImJ1dHRv
bnMiX3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8QnV0dG9uc1NldD4o
KTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBEaXJlY3Rpb25hbGl0eVNl
dD4mIHNldERpcmVjdGlvbmFsaXR5KERpcmVjdGlvbmFsaXR5IHZhbHVlKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRGlyZWN0aW9uYWxpdHlTZXQpLCBw
cm9wZXJ0eV9kaXJlY3Rpb25hbGl0eV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0U3RyaW5nKCJkaXJlY3Rpb25hbGl0eSJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVz
dEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKHZhbHVlKSk7Ci0gICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPERpcmVjdGlvbmFsaXR5U2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAg
QnVpbGRlcjxTVEFURSB8IE5vdGVzU2V0PiYgc2V0Tm90ZXMoY29uc3QgU3RyaW5nJiB2YWx1ZSkK
LSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE5vdGVzU2V0
KSwgcHJvcGVydHlfbm90ZXNfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dFN0cmluZygibm90ZXMiX3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8
Tm90ZXNTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVGltZXN0
YW1wU2V0PiYgc2V0VGltZXN0YW1wKGRvdWJsZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFRpbWVzdGFtcFNldCksIHByb3BlcnR5X3RpbWVz
dGFtcF9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0RG91YmxlKCJ0aW1l
c3RhbXAiX3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VGltZXN0YW1w
U2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IFZhbHVlc1NldD4m
IHNldFZhbHVlcyhSZWZQdHI8SlNPTjo6T2JqZWN0PiB2YWx1ZSkKLSAgICAgICAgewotICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFZhbHVlc1NldCksIHByb3BlcnR5X3ZhbHVl
c19hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJ2YWx1ZXMi
X3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VmFsdWVzU2V0PigpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IFBheWxvYWRTZXQ+JiBzZXRQYXls
b2FkKFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBQYXlsb2FkU2V0KSwgcHJvcGVydHlfcGF5bG9hZF9hbHJl
YWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIHZh
bHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8UGF5bG9hZFNldD4oKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBFcnJvclNldD4mIHNldEVycm9yKFJlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHZhbHVlKQotICAgICAgICB7
Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRXJyb3JTZXQpLCBwcm9wZXJ0
eV9lcnJvcl9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJl
cnJvciJfcywgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxFcnJvclNldD4o
KTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBFcnJvckxpc3RTZXQ+JiBz
ZXRFcnJvckxpc3QoUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvckxp
c3Q+IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRF
ICYgRXJyb3JMaXN0U2V0KSwgcHJvcGVydHlfZXJyb3JMaXN0X2FscmVhZHlfc2V0KTsKLSAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheSgiZXJyb3JMaXN0Il9zLCB2YWx1ZSk7Ci0gICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPEVycm9yTGlzdFNldD4oKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIFJlZjxQYXJhbWV0ZXJCdW5kbGU+IHJlbGVhc2UoKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVh
ZHkpOwotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFBhcmFtZXRlckJ1bmRsZSkg
PT0gc2l6ZW9mKEpTT046Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsKLQotICAgICAgICAgICAgUmVm
PEpTT046Ok9iamVjdD4ganNvblJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7Ci0g
ICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPFBh
cmFtZXRlckJ1bmRsZT4qPigmanNvblJlc3VsdCkpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICAvKgotICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1
Y3RvcjoKLSAgICAgKiBSZWY8UGFyYW1ldGVyQnVuZGxlPiByZXN1bHQgPSBQYXJhbWV0ZXJCdW5k
bGU6OmNyZWF0ZSgpCi0gICAgICogICAgIC5zZXRDb2x1bW5OYW1lcyguLi4pCi0gICAgICogICAg
IC5zZXRCdXR0b25zKC4uLikKLSAgICAgKiAgICAgLnNldERpcmVjdGlvbmFsaXR5KC4uLikKLSAg
ICAgKiAgICAgLnNldE5vdGVzKC4uLikKLSAgICAgKiAgICAgLnNldFRpbWVzdGFtcCguLi4pCi0g
ICAgICogICAgIC5zZXRWYWx1ZXMoLi4uKQotICAgICAqICAgICAuc2V0UGF5bG9hZCguLi4pCi0g
ICAgICogICAgIC5zZXRFcnJvciguLi4pCi0gICAgICogICAgIC5zZXRFcnJvckxpc3QoLi4uKQot
ICAgICAqICAgICAucmVsZWFzZSgpOwotICAgICAqLwotICAgIHN0YXRpYyBCdWlsZGVyPE5vRmll
bGRzU2V0PiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNT
ZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOwotICAgIH0KLX07Ci0KLS8qIENvbmZsaWN0ZWQg
bmFtZXMgbWF5IGNhdXNlIGdlbmVyYXRlZCBnZXR0ZXJzL3NldHRlcnMgdG8gY2xhc2ggd2l0aCBi
dWlsdC1pbiBJbnNwZWN0b3JPYmplY3QgbWV0aG9kcy4gKi8KLWNsYXNzIE9iamVjdFdpdGhQcm9w
ZXJ0eU5hbWVDb25mbGljdHMgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7Ci1wdWJsaWM6Ci0g
ICAgZW51bSB7Ci0gICAgICAgIE5vRmllbGRzU2V0ID0gMCwKLSAgICAgICAgSW50ZWdlclNldCA9
IDEgPDwgMCwKLSAgICAgICAgQXJyYXlTZXQgPSAxIDw8IDEsCi0gICAgICAgIFN0cmluZ1NldCA9
IDEgPDwgMiwKLSAgICAgICAgVmFsdWVTZXQgPSAxIDw8IDMsCi0gICAgICAgIE9iamVjdFNldCA9
IDEgPDwgNCwKLSAgICAgICAgQWxsRmllbGRzU2V0ID0gKEludGVnZXJTZXQgfCBBcnJheVNldCB8
IFN0cmluZ1NldCB8IFZhbHVlU2V0IHwgT2JqZWN0U2V0KQotICAgIH07Ci0KLSAgICB0ZW1wbGF0
ZTxpbnQgU1RBVEU+Ci0gICAgY2xhc3MgQnVpbGRlciB7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAg
UmVmUHRyPEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7Ci0KLSAgICAgICAgdGVtcGxhdGU8aW50IFNU
RVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRo
aXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcihSZWY8LypPYmplY3RXaXRoUHJvcGVy
dHlOYW1lQ29uZmxpY3RzKi9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQotICAgICAgICAgICAgOiBt
X3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRf
c3RhdGUpOwotICAgICAgICB9Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBPYmplY3RXaXRoUHJvcGVy
dHlOYW1lQ29uZmxpY3RzOwotICAgIHB1YmxpYzoKLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
SW50ZWdlclNldD4mIHNldEludGVnZXIoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICAgICAgewot
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEludGVnZXJTZXQpLCBwcm9wZXJ0
eV9pbnRlZ2VyX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmco
ImludGVnZXIiX3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8SW50ZWdl
clNldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBBcnJheVNldD4m
IHNldEFycmF5KGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBBcnJheVNldCksIHByb3BlcnR5X2FycmF5X2FscmVhZHlf
c2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImFycmF5Il9zLCB2YWx1ZSk7
Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEFycmF5U2V0PigpOwotICAgICAgICB9Ci0K
LSAgICAgICAgQnVpbGRlcjxTVEFURSB8IFN0cmluZ1NldD4mIHNldFN0cmluZyhjb25zdCBTdHJp
bmcmIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRF
ICYgU3RyaW5nU2V0KSwgcHJvcGVydHlfc3RyaW5nX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXRTdHJpbmcoInN0cmluZyJfcywgdmFsdWUpOwotICAgICAgICAgICAgcmV0
dXJuIGNhc3RTdGF0ZTxTdHJpbmdTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgVmFsdWVTZXQ+JiBzZXRWYWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVmFsdWVTZXQpLCBwcm9w
ZXJ0eV92YWx1ZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5n
KCJ2YWx1ZSJfcywgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxWYWx1ZVNl
dD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBPYmplY3RTZXQ+JiBz
ZXRPYmplY3QoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIE9iamVjdFNldCksIHByb3BlcnR5X29iamVjdF9hbHJlYWR5
X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJvYmplY3QiX3MsIHZhbHVl
KTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8T2JqZWN0U2V0PigpOwotICAgICAgICB9
Ci0KLSAgICAgICAgUmVmPE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHM+IHJlbGVhc2Uo
KQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVs
ZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
c2l6ZW9mKE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHMpID09IHNpemVvZihKU09OOjpP
YmplY3QpLCBjYW5ub3RfY2FzdCk7Ci0KLSAgICAgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IGpz
b25SZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOwotICAgICAgICAgICAgYXV0byBy
ZXN1bHQgPSBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxPYmplY3RXaXRoUHJvcGVydHlO
YW1lQ29uZmxpY3RzPio+KCZqc29uUmVzdWx0KSk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0
OwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIC8qCi0gICAgICogU3ludGhldGljIGNvbnN0cnVj
dG9yOgotICAgICAqIFJlZjxPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzPiByZXN1bHQg
PSBPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzOjpjcmVhdGUoKQotICAgICAqICAgICAu
c2V0SW50ZWdlciguLi4pCi0gICAgICogICAgIC5zZXRBcnJheSguLi4pCi0gICAgICogICAgIC5z
ZXRTdHJpbmcoLi4uKQotICAgICAqICAgICAuc2V0VmFsdWUoLi4uKQotICAgICAqICAgICAuc2V0
T2JqZWN0KC4uLikKLSAgICAgKiAgICAgLnJlbGVhc2UoKTsKLSAgICAgKi8KLSAgICBzdGF0aWMg
QnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBCdWls
ZGVyPE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKLSAgICB9Ci19OwotCi19
IC8vIERhdGFiYXNlCi0KLW5hbWVzcGFjZSBUZXN0IHsKLWNsYXNzIFBhcmFtZXRlckJ1bmRsZSA6
IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKLXB1YmxpYzoKLSAgICAvLyBOYW1lZCBhZnRlciBw
cm9wZXJ0eSBuYW1lICdkaXJlY3Rpb25hbGl0eScgd2hpbGUgZ2VuZXJhdGluZyBQYXJhbWV0ZXJC
dW5kbGUuCi0gICAgZW51bSBjbGFzcyBEaXJlY3Rpb25hbGl0eSB7Ci0gICAgICAgIExUUiA9IDQs
Ci0gICAgICAgIFJUTCA9IDUsCi0gICAgfTsgLy8gZW51bSBjbGFzcyBEaXJlY3Rpb25hbGl0eQot
ICAgIGVudW0gewotICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCi0gICAgICAgIERpcmVjdGlvbmFs
aXR5U2V0ID0gMSA8PCAwLAotICAgICAgICBCdXR0b25zU2V0ID0gMSA8PCAxLAotICAgICAgICBD
b2x1bW5OYW1lc1NldCA9IDEgPDwgMiwKLSAgICAgICAgTm90ZXNTZXQgPSAxIDw8IDMsCi0gICAg
ICAgIFRpbWVzdGFtcFNldCA9IDEgPDwgNCwKLSAgICAgICAgVmFsdWVzU2V0ID0gMSA8PCA1LAot
ICAgICAgICBQYXlsb2FkU2V0ID0gMSA8PCA2LAotICAgICAgICBFcnJvclNldCA9IDEgPDwgNywK
LSAgICAgICAgQWxsRmllbGRzU2V0ID0gKERpcmVjdGlvbmFsaXR5U2V0IHwgQnV0dG9uc1NldCB8
IENvbHVtbk5hbWVzU2V0IHwgTm90ZXNTZXQgfCBUaW1lc3RhbXBTZXQgfCBWYWx1ZXNTZXQgfCBQ
YXlsb2FkU2V0IHwgRXJyb3JTZXQpCi0gICAgfTsKLQotICAgIHRlbXBsYXRlPGludCBTVEFURT4K
LSAgICBjbGFzcyBCdWlsZGVyIHsKLSAgICBwcml2YXRlOgotICAgICAgICBSZWZQdHI8SlNPTjo6
T2JqZWN0PiBtX3Jlc3VsdDsKLQotICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxT
VEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
KnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7Ci0gICAgICAg
IH0KLQotICAgICAgICBCdWlsZGVyKFJlZjwvKlBhcmFtZXRlckJ1bmRsZSovSlNPTjo6T2JqZWN0
PiYmIG9iamVjdCkKLSAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwg
YnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKLSAgICAgICAgfQotICAgICAgICBm
cmllbmQgY2xhc3MgUGFyYW1ldGVyQnVuZGxlOwotICAgIHB1YmxpYzoKLQotICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgRGlyZWN0aW9uYWxpdHlTZXQ+JiBzZXREaXJlY3Rpb25hbGl0eShEaXJlY3Rp
b25hbGl0eSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIERpcmVjdGlvbmFsaXR5U2V0KSwgcHJvcGVydHlfZGlyZWN0aW9uYWxpdHlfYWxyZWFk
eV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygiZGlyZWN0aW9uYWxpdHki
X3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1
ZSh2YWx1ZSkpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxEaXJlY3Rpb25hbGl0eVNl
dD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBCdXR0b25zU2V0PiYg
c2V0QnV0dG9ucyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6TW91c2VCdXR0b24+PiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoIShTVEFURSAmIEJ1dHRvbnNTZXQpLCBwcm9wZXJ0eV9idXR0b25zX2FscmVhZHlf
c2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheSgiYnV0dG9ucyJfcywgdmFsdWUp
OwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxCdXR0b25zU2V0PigpOwotICAgICAgICB9
Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvbHVtbk5hbWVzU2V0PiYgc2V0Q29sdW1uTmFt
ZXMoUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gdmFsdWUpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2x1bW5OYW1lc1NldCksIHByb3BlcnR5
X2NvbHVtbk5hbWVzX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJh
eSgiY29sdW1uTmFtZXMiX3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8
Q29sdW1uTmFtZXNTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
Tm90ZXNTZXQ+JiBzZXROb3Rlcyhjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTm90ZXNTZXQpLCBwcm9wZXJ0eV9ub3Rl
c19hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJub3RlcyJf
cywgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxOb3Rlc1NldD4oKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUaW1lc3RhbXBTZXQ+JiBzZXRUaW1l
c3RhbXAoZG91YmxlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgVGltZXN0YW1wU2V0KSwgcHJvcGVydHlfdGltZXN0YW1wX2FscmVhZHlfc2V0
KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgdmFsdWUp
OwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUaW1lc3RhbXBTZXQ+KCk7Ci0gICAgICAg
IH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVmFsdWVzU2V0PiYgc2V0VmFsdWVzKFJlZlB0
cjxKU09OOjpPYmplY3Q+IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgVmFsdWVzU2V0KSwgcHJvcGVydHlfdmFsdWVzX2FscmVhZHlfc2V0KTsK
LSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgdmFsdWUpOwotICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxWYWx1ZXNTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgUGF5bG9hZFNldD4mIHNldFBheWxvYWQoUmVmUHRyPEpTT046
OlZhbHVlPiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIFBheWxvYWRTZXQpLCBwcm9wZXJ0eV9wYXlsb2FkX2FscmVhZHlfc2V0KTsKLSAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgdmFsdWUpOwotICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxQYXlsb2FkU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAg
QnVpbGRlcjxTVEFURSB8IEVycm9yU2V0PiYgc2V0RXJyb3IoUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBFcnJvclNldCksIHByb3BlcnR5X2Vycm9yX2FscmVhZHlf
c2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoImVycm9yIl9zLCB2YWx1ZSk7
Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEVycm9yU2V0PigpOwotICAgICAgICB9Ci0K
LSAgICAgICAgUmVmPFBhcmFtZXRlckJ1bmRsZT4gcmVsZWFzZSgpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25v
dF9yZWFkeSk7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoUGFyYW1ldGVyQnVu
ZGxlKSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0KSwgY2Fubm90X2Nhc3QpOwotCi0gICAgICAgICAg
ICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uUmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwo
KTsKLSAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxS
ZWY8UGFyYW1ldGVyQnVuZGxlPio+KCZqc29uUmVzdWx0KSk7Ci0gICAgICAgICAgICByZXR1cm4g
cmVzdWx0OwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIC8qCi0gICAgICogU3ludGhldGljIGNv
bnN0cnVjdG9yOgotICAgICAqIFJlZjxQYXJhbWV0ZXJCdW5kbGU+IHJlc3VsdCA9IFBhcmFtZXRl
ckJ1bmRsZTo6Y3JlYXRlKCkKLSAgICAgKiAgICAgLnNldERpcmVjdGlvbmFsaXR5KC4uLikKLSAg
ICAgKiAgICAgLnNldEJ1dHRvbnMoLi4uKQotICAgICAqICAgICAuc2V0Q29sdW1uTmFtZXMoLi4u
KQotICAgICAqICAgICAuc2V0Tm90ZXMoLi4uKQotICAgICAqICAgICAuc2V0VGltZXN0YW1wKC4u
LikKLSAgICAgKiAgICAgLnNldFZhbHVlcyguLi4pCi0gICAgICogICAgIC5zZXRQYXlsb2FkKC4u
LikKLSAgICAgKiAgICAgLnNldEVycm9yKC4uLikKLSAgICAgKiAgICAgLnJlbGVhc2UoKTsKLSAg
ICAgKi8KLSAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
KTsKLSAgICB9Ci19OwotCi19IC8vIFRlc3QKLQotCi0KLW5hbWVzcGFjZSBUZXN0SGVscGVycyB7
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFByb3RvY29sRW51bVR5cGU+Ci1PcHRpb25hbDxQcm90b2Nv
bEVudW1UeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJik7Ci0KLS8v
IEVudW1zIGluIHRoZSAnRGF0YWJhc2UnIERvbWFpbgotdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5z
cGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPiBwYXJzZUVudW1WYWx1ZUZy
b21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPihjb25z
dCBTdHJpbmcmKTsKLXRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+IHBhcnNlRW51
bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6T3B0aW9uYWxQ
YXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5Pihjb25zdCBTdHJpbmcmKTsKLXRlbXBsYXRl
PD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQYXJhbWV0ZXJCdW5k
bGU6OkRpcmVjdGlvbmFsaXR5PiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGF0YWJhc2U6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+KGNvbnN0
IFN0cmluZyYpOwotCi0vLyBFbnVtcyBpbiB0aGUgJ1Rlc3QnIERvbWFpbgotdGVtcGxhdGU8Pgot
T3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UGFyYW1ldGVyQnVuZGxlOjpEaXJl
Y3Rpb25hbGl0eT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlRlc3Q6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+KGNvbnN0IFN0cmluZyYpOwot
Ci19IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAot
Ci19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotbmFtZXNwYWNlIFdURiB7Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKLQotLy8gSGFzaCBkZWNsYXJhdGlvbnMg
aW4gdGhlICdEYXRhYmFzZScgRG9tYWluCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgRGVmYXVsdEhhc2g8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPiB7Ci0gICAgdHlwZWRl
ZiBJbnRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4gSGFz
aDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xP
YmplY3RzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlw
ZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0KLSNpbmNs
dWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5h
bWVzcGFjZSBJbnNwZWN0b3IgewotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi1uYW1lc3BhY2Ug
VGVzdEhlbHBlcnMgewotCi1zdGF0aWMgY29uc3QgY2hhciogY29uc3QgZW51bV9jb25zdGFudF92
YWx1ZXNbXSA9IHsKLSAgICAiTm9uZSIsCi0gICAgIkxlZnQiLAotICAgICJNaWRkbGUiLAotICAg
ICJSaWdodCIsCi0gICAgIkxUUiIsCi0gICAgIlJUTCIsCi19OwotCi1TdHJpbmcgZ2V0RW51bUNv
bnN0YW50VmFsdWUoaW50IGNvZGUpIHsKLSAgICByZXR1cm4gZW51bV9jb25zdGFudF92YWx1ZXNb
Y29kZV07Ci19Ci0KLS8vIEVudW1zIGluIHRoZSAnRGF0YWJhc2UnIERvbWFpbgotdGVtcGxhdGU8
PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPiBw
YXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1v
dXNlQnV0dG9uPihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQotewotICAgIHN0YXRpYyBj
b25zdCBzaXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsKLSAgICAgICAgKHNpemVfdClJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b246Ok5vbmUsCi0gICAgICAgIChzaXpl
X3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uOjpMZWZ0LAotICAg
ICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbjo6
TWlkZGxlLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpN
b3VzZUJ1dHRvbjo6UmlnaHQsCi0gICAgfTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDQ7
ICsraSkKLSAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVz
W2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90
b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uKWNvbnN0YW50VmFsdWVzW2ldOwotCi0gICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGF0YWJhc2U6Ok9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0
eT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNl
OjpPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+KGNvbnN0IFN0cmluZyYg
cHJvdG9jb2xTdHJpbmcpCi17Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVl
c1tdID0gewotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpP
cHRpb25hbFBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk6OkxUUiwKLSAgICAgICAgKHNp
emVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6T3B0aW9uYWxQYXJhbWV0ZXJCdW5k
bGU6OkRpcmVjdGlvbmFsaXR5OjpSVEwsCi0gICAgfTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IDI7ICsraSkKLSAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRf
dmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9y
OjpQcm90b2NvbDo6RGF0YWJhc2U6Ok9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25h
bGl0eSljb25zdGFudFZhbHVlc1tpXTsKLQotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0K
LXRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQYXJh
bWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5PiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5z
cGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxp
dHk+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCi17Ci0gICAgc3RhdGljIGNvbnN0IHNp
emVfdCBjb25zdGFudFZhbHVlc1tdID0gewotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5OjpMVFIsCi0g
ICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlBhcmFtZXRlckJ1
bmRsZTo6RGlyZWN0aW9uYWxpdHk6OlJUTCwKLSAgICB9OwotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgMjsgKytpKQotICAgICAgICBpZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFu
dF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNbaV1dKQotICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eSlj
b25zdGFudFZhbHVlc1tpXTsKLQotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLQotLy8g
RW51bXMgaW4gdGhlICdUZXN0JyBEb21haW4KLXRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlRlc3Q6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+IHBhcnNl
RW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpQYXJhbWV0ZXJC
dW5kbGU6OkRpcmVjdGlvbmFsaXR5Pihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQotewot
ICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsKLSAgICAgICAgKHNp
emVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlv
bmFsaXR5OjpMVFIsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6
UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eTo6UlRMLAotICAgIH07Ci0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCAyOyArK2kpCi0gICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBl
bnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCi0gICAgICAgICAgICByZXR1
cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9u
YWxpdHkpY29uc3RhbnRWYWx1ZXNbaV07Ci0KLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQot
Ci0KLX0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCi0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90
b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xPYmplY3RzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERp
c3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xh
cmF0aW9uLW9iamVjdC10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVycy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQotCi0KLW5h
bWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmlnLmgi
Ci0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUg
IlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLQotbmFtZXNwYWNlIEluc3Bl
Y3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sQ29uZmlndXJhdGlvbi5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlw
ZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4K
LQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRl
c3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAotQGVuZAotCi0KLSMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xDb25maWd1cmF0aW9uLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
dHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24u
aCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbXBvcnQgIlRlc3RQcm90
b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJu
YXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRh
YmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3Bl
Y3RvcjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KLXsKLSAg
ICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotfQotCi0tIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRy
b2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICgh
c2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAg
X2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lk
KWRlYWxsb2MKLXsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJu
YWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0
IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLSMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0
eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0K
LSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KLQotCi1AY2xh
c3MgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcjsKLUBjbGFzcyBUZXN0UHJvdG9jb2xEYXRhYmFz
ZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOwotQGNsYXNzIFRlc3RQcm90b2NvbERhdGFiYXNlUGFy
YW1ldGVyQnVuZGxlOwotQGNsYXNzIFRlc3RQcm90b2NvbERhdGFiYXNlT2JqZWN0V2l0aFByb3Bl
cnR5TmFtZUNvbmZsaWN0czsKLUBjbGFzcyBUZXN0UHJvdG9jb2xEYXRhYmFzZUR1bW15T2JqZWN0
OwotQGNsYXNzIFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGU7Ci0KLXR5cGVkZWYgTlNf
RU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbFBsYXRmb3JtKSB7Ci0gICAgVGVzdFByb3RvY29s
UGxhdGZvcm1BbGwsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljLAotICAgIFRlc3RQ
cm90b2NvbFBsYXRmb3JtSU9TLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1MsCi19Owot
Ci0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VC
dXR0b24pIHsKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9uTm9uZSwKLSAgICBU
ZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9uTGVmdCwKLSAgICBUZXN0UHJvdG9jb2xEYXRh
YmFzZU1vdXNlQnV0dG9uTWlkZGxlLAotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VCdXR0
b25SaWdodCwKLX07Ci0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbERh
dGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSkgewotICAgIFRlc3RQ
cm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eUxUUiwK
LSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9u
YWxpdHlSVEwsCi19OwotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xE
YXRhYmFzZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5KSB7Ci0gICAgVGVzdFByb3RvY29s
RGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eUxUUiwKLSAgICBUZXN0UHJvdG9j
b2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5UlRMLAotfTsKLQotdHlwZWRl
ZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZURpcmVj
dGlvbmFsaXR5KSB7Ci0gICAgVGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZURpcmVjdGlv
bmFsaXR5TFRSLAotICAgIFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25h
bGl0eVJUTCwKLX07Ci0KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkp
Ci1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgOiBSV0lQcm90b2NvbEpTT05P
YmplY3QKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0
cmluZyAqLCBpZD4gKilwYXlsb2FkOwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xP
YmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7Ci0tIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZTooaW50KWNvZGU7Ci0v
KiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKm1lc3Nh
Z2U7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQgY29k
ZTsKLUBlbmQKLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50
ZXJmYWNlIFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUgOiBSV0lQ
cm90b2NvbEpTT05PYmplY3QKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGlj
dGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkOwotLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7Ci0v
KiBvcHRpb25hbCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNBcnJheS8qPE5TU3Ry
aW5nPiovICpjb2x1bW5OYW1lczsKLS8qIG9wdGlvbmFsICovIEBwcm9wZXJ0eSAobm9uYXRvbWlj
LCBjb3B5KSBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmJ1dHRvbnM7Ci0vKiBvcHRpb25hbCAqLyBA
cHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFs
UGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHkgZGlyZWN0aW9uYWxpdHk7Ci0vKiBvcHRpb25h
bCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKm5vdGVzOwotLyogb3B0
aW9uYWwgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgZG91YmxlIHRpbWVzdGFtcDsK
LS8qIG9wdGlvbmFsICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIFJXSVByb3RvY29s
SlNPTk9iamVjdCAqdmFsdWVzOwotLyogb3B0aW9uYWwgKi8gQHByb3BlcnR5IChub25hdG9taWMs
IHJldGFpbikgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkOwotLyogb3B0aW9uYWwgKi8g
QHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAq
ZXJyb3I7Ci0vKiBvcHRpb25hbCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNBcnJh
eS8qPFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I+Ki8gKmVycm9yTGlzdDsKLUBlbmQKLQotX19h
dHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90
b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlIDogUldJUHJvdG9jb2xKU09OT2JqZWN0Ci0tIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+
ICopcGF5bG9hZDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQ
cm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
Q29sdW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWNvbHVtbk5hbWVzIGJ1dHRvbnM6
KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWJ1dHRvbnMgZGlyZWN0aW9uYWxpdHk6KFRlc3RQcm90
b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHkpZGlyZWN0aW9uYWxpdHkg
bm90ZXM6KE5TU3RyaW5nICopbm90ZXMgdGltZXN0YW1wOihkb3VibGUpdGltZXN0YW1wIHZhbHVl
czooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopdmFsdWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNP
Tk9iamVjdCAqKXBheWxvYWQgZXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKillcnJv
ciBlcnJvckxpc3Q6KE5TQXJyYXkvKjxUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yPiovICopZXJy
b3JMaXN0OwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TQXJy
YXkvKjxOU1N0cmluZz4qLyAqY29sdW1uTmFtZXM7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkg
KG5vbmF0b21pYywgY29weSkgTlNBcnJheS8qPE5TU3RyaW5nPiovICpidXR0b25zOwotLyogcmVx
dWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgVGVzdFByb3RvY29sRGF0YWJh
c2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSBkaXJlY3Rpb25hbGl0eTsKLS8qIHJlcXVp
cmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqbm90ZXM7Ci0vKiBy
ZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBkb3VibGUgdGltZXN0YW1w
OwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgUldJUHJvdG9j
b2xKU09OT2JqZWN0ICp2YWx1ZXM7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21p
YywgcmV0YWluKSBSV0lQcm90b2NvbEpTT05PYmplY3QgKnBheWxvYWQ7Ci0vKiByZXF1aXJlZCAq
LyBAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluKSBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9y
ICplcnJvcjsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU0Fy
cmF5Lyo8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4qLyAqZXJyb3JMaXN0OwotQGVuZAotCi1f
X2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFBy
b3RvY29sRGF0YWJhc2VPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzIDogUldJUHJvdG9j
b2xKU09OT2JqZWN0Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25h
cnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBy
b3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OwotLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoSW50ZWdlcjooTlNTdHJpbmcgKilpbnRlZ2VyIGFycmF5OihOU1N0
cmluZyAqKWFycmF5IHN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcgdmFsdWU6KE5TU3RyaW5nICop
dmFsdWUgb2JqZWN0OihOU1N0cmluZyAqKW9iamVjdDsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0
eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqaW50ZWdlcjsKLS8qIHJlcXVpcmVkICovIEBw
cm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqYXJyYXk7Ci0vKiByZXF1aXJlZCAq
LyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKnN0cmluZzsKLS8qIHJlcXVp
cmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqdmFsdWU7Ci0vKiBy
ZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKm9iamVjdDsK
LUBlbmQKLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJm
YWNlIFRlc3RQcm90b2NvbERhdGFiYXNlRHVtbXlPYmplY3QgOiBSV0lQcm90b2NvbEpTT05PYmpl
Y3QKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmlu
ZyAqLCBpZD4gKilwYXlsb2FkOwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmpl
Y3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7Ci1AZW5kCi0KLV9fYXR0cmli
dXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xU
ZXN0UGFyYW1ldGVyQnVuZGxlIDogUldJUHJvdG9jb2xKU09OT2JqZWN0Ci0tIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9h
ZDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpT
T05PYmplY3QgKilqc29uT2JqZWN0OwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRGlyZWN0aW9u
YWxpdHk6KFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eSlkaXJl
Y3Rpb25hbGl0eSBidXR0b25zOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilidXR0b25zIGNvbHVt
bk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcyBub3RlczooTlNTdHJp
bmcgKilub3RlcyB0aW1lc3RhbXA6KGRvdWJsZSl0aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90b2Nv
bEpTT05PYmplY3QgKil2YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5
bG9hZCBlcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKWVycm9yOwotLyogcmVxdWly
ZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgVGVzdFByb3RvY29sVGVzdFBhcmFt
ZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5IGRpcmVjdGlvbmFsaXR5OwotLyogcmVxdWlyZWQgKi8g
QHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqYnV0dG9u
czsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU0FycmF5Lyo8
TlNTdHJpbmc+Ki8gKmNvbHVtbk5hbWVzOwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25h
dG9taWMsIGNvcHkpIE5TU3RyaW5nICpub3RlczsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAo
bm9uYXRvbWljLCBhc3NpZ24pIGRvdWJsZSB0aW1lc3RhbXA7Ci0vKiByZXF1aXJlZCAqLyBAcHJv
cGVydHkgKG5vbmF0b21pYywgcmV0YWluKSBSV0lQcm90b2NvbEpTT05PYmplY3QgKnZhbHVlczsK
LS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIFJXSVByb3RvY29s
SlNPTk9iamVjdCAqcGF5bG9hZDsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWlj
LCByZXRhaW4pIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKmVycm9yOwotQGVuZAotCi0KLQot
Ci0KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5
T2JqZWN0cy5oPgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2lt
cG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKLSNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8d3RmL0pT
T05WYWx1ZXMuaD4KLQotCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5o
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUu
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0
ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5
Q29udmVyc2lvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIE9iakNFbnVtVHlwZT4KLU9wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3RvY29sU3Ry
aW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOwotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJp
bmcoVGVzdFByb3RvY29sUGxhdGZvcm0gdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0g
ICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDoKLSAgICAgICAgcmV0dXJuICJhbGwiX3M7
Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM6Ci0gICAgICAgIHJldHVybiAi
Z2VuZXJpYyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOgotICAgICAgICBy
ZXR1cm4gImlvcyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M6Ci0gICAg
ICAgIHJldHVybiAibWFjb3MiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0
aW9uYWw8VGVzdFByb3RvY29sUGxhdGZvcm0+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJp
bmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiYWxsIikKLSAgICAgICAgcmV0dXJuIFRl
c3RQcm90b2NvbFBsYXRmb3JtQWxsOwotICAgIGlmICh2YWx1ZSA9PSAiZ2VuZXJpYyIpCi0gICAg
ICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM7Ci0gICAgaWYgKHZhbHVlID09
ICJpb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1JT1M7Ci0gICAgaWYg
KHZhbHVlID09ICJtYWNvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1h
Y09TOwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLQotaW5saW5lIFN0cmluZyB0b1By
b3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VCdXR0b24gdmFsdWUpCi17Ci0g
ICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0
dG9uTm9uZToKLSAgICAgICAgcmV0dXJuICJOb25lIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29s
RGF0YWJhc2VNb3VzZUJ1dHRvbkxlZnQ6Ci0gICAgICAgIHJldHVybiAiTGVmdCJfczsKLSAgICBj
YXNlIFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VCdXR0b25NaWRkbGU6Ci0gICAgICAgIHJldHVy
biAiTWlkZGxlIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VNb3VzZUJ1dHRvblJp
Z2h0OgotICAgICAgICByZXR1cm4gIlJpZ2h0Il9zOwotICAgIH0KLX0KLQotdGVtcGxhdGU8Pgot
aW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlTW91c2VCdXR0b24+IGZyb21Qcm90
b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiTm9u
ZSIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZU1vdXNlQnV0dG9uTm9uZTsK
LSAgICBpZiAodmFsdWUgPT0gIkxlZnQiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0
YWJhc2VNb3VzZUJ1dHRvbkxlZnQ7Ci0gICAgaWYgKHZhbHVlID09ICJNaWRkbGUiKQotICAgICAg
ICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VNb3VzZUJ1dHRvbk1pZGRsZTsKLSAgICBpZiAo
dmFsdWUgPT0gIlJpZ2h0IikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlTW91
c2VCdXR0b25SaWdodDsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi1pbmxpbmUgU3Ry
aW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFtZXRl
ckJ1bmRsZURpcmVjdGlvbmFsaXR5IHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAg
IGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZURpcmVjdGlv
bmFsaXR5TFRSOgotICAgICAgICByZXR1cm4gIkxUUiJfczsKLSAgICBjYXNlIFRlc3RQcm90b2Nv
bERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eVJUTDoKLSAgICAg
ICAgcmV0dXJuICJSVEwiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9u
YWw8VGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFs
aXR5PiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAo
dmFsdWUgPT0gIkxUUiIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlv
bmFsUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHlMVFI7Ci0gICAgaWYgKHZhbHVlID09ICJS
VEwiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFtZXRl
ckJ1bmRsZURpcmVjdGlvbmFsaXR5UlRMOwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0K
LWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFt
ZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5IHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewot
ICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0
eUxUUjoKLSAgICAgICAgcmV0dXJuICJMVFIiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRh
YmFzZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5UlRMOgotICAgICAgICByZXR1cm4gIlJU
TCJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJvdG9j
b2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5PiBmcm9tUHJvdG9jb2xTdHJp
bmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gIkxUUiIpCi0gICAg
ICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFs
aXR5TFRSOwotICAgIGlmICh2YWx1ZSA9PSAiUlRMIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90
b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHlSVEw7Ci0gICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKLX0KLQotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVz
dFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5IHZhbHVlKQotewotICAg
IHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRs
ZURpcmVjdGlvbmFsaXR5TFRSOgotICAgICAgICByZXR1cm4gIkxUUiJfczsKLSAgICBjYXNlIFRl
c3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eVJUTDoKLSAgICAgICAg
cmV0dXJuICJSVEwiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8
VGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5PiBmcm9tUHJvdG9j
b2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gIkxUUiIp
Ci0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9u
YWxpdHlMVFI7Ci0gICAgaWYgKHZhbHVlID09ICJSVEwiKQotICAgICAgICByZXR1cm4gVGVzdFBy
b3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5UlRMOwotICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3Rv
Y29sVHlwZVBhcnNlci5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9i
amVjdFByaXZhdGUuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGludGVyZmFj
ZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKERhdGFiYXNlRG9tYWluKQotCi0rICh2b2lk
KV9wYXJzZUVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqKW91dFZhbHVlIGZyb21Q
YXlsb2FkOihpZClwYXlsb2FkOwotKyAodm9pZClfcGFyc2VFcnJvckxpc3Q6KE5TQXJyYXkvKjxU
ZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClw
YXlsb2FkOwotKyAodm9pZClfcGFyc2VNb3VzZUJ1dHRvbjooTlNOdW1iZXIgKiopb3V0VmFsdWUg
ZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZU9wdGlvbmFsUGFyYW1ldGVy
QnVuZGxlOihUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlICoqKW91
dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotKyAodm9pZClfcGFyc2VQYXJhbWV0ZXJC
dW5kbGU6KFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlICoqKW91dFZhbHVlIGZy
b21QYXlsb2FkOihpZClwYXlsb2FkOwotKyAodm9pZClfcGFyc2VPYmplY3RXaXRoUHJvcGVydHlO
YW1lQ29uZmxpY3RzOihUZXN0UHJvdG9jb2xEYXRhYmFzZU9iamVjdFdpdGhQcm9wZXJ0eU5hbWVD
b25mbGljdHMgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9w
YXJzZUR1bW15T2JqZWN0OihUZXN0UHJvdG9jb2xEYXRhYmFzZUR1bW15T2JqZWN0ICoqKW91dFZh
bHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotCi1AZW5kCi1AaW50ZXJmYWNlIFRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucyAoVGVzdERvbWFpbikKLQotKyAodm9pZClfcGFyc2VQYXJhbWV0
ZXJCdW5kbGU6KFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGUgKiopb3V0VmFsdWUgZnJv
bVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucyAoRGF0YWJhc2VEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlRXJy
b3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlk
KXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtO
U0RpY3Rpb25hcnkgY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbERhdGFi
YXNlRXJyb3IgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKLX0KLQotKyAodm9pZClf
cGFyc2VFcnJvckxpc3Q6KE5TQXJyYXkvKjxUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yPiovICoq
KW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNBcnJheS8qPFRlc3RQcm90b2NvbERhdGFiYXNlRXJy
b3I+Ki8gY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSAoTlNBcnJheS8qPFRlc3RQcm90b2NvbERh
dGFiYXNlRXJyb3I+Ki8gKilwYXlsb2FkOwotfQotCi0rICh2b2lkKV9wYXJzZU1vdXNlQnV0dG9u
OihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TU3RyaW5nIGNsYXNzXSk7Ci0g
ICAgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VNb3VzZUJ1dHRvbj4gcmVzdWx0ID0gSW5z
cGVjdG9yOjpmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sRGF0YWJhc2VNb3VzZUJ1dHRv
bj4ocGF5bG9hZCk7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfRU5VTV9WQUxVRShyZXN1
bHQsIEAiTW91c2VCdXR0b24iKTsKLSAgICAqb3V0VmFsdWUgPSBAKHJlc3VsdC52YWx1ZSgpKTsK
LX0KLQotKyAodm9pZClfcGFyc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTooVGVzdFByb3RvY29s
RGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZSAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDoo
aWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwg
W05TRGljdGlvbmFyeSBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sRGF0
YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZSBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxv
YWRdOwotfQotCi0rICh2b2lkKV9wYXJzZVBhcmFtZXRlckJ1bmRsZTooVGVzdFByb3RvY29sRGF0
YWJhc2VQYXJhbWV0ZXJCdW5kbGUgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQK
LXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25h
cnkgY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1l
dGVyQnVuZGxlIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07Ci19Ci0KLSsgKHZvaWQp
X3BhcnNlT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0czooVGVzdFByb3RvY29sRGF0YWJh
c2VPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzICoqKW91dFZhbHVlIGZyb21QYXlsb2Fk
OihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2Fk
LCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xE
YXRhYmFzZU9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHMgYWxsb2NdIGluaXRXaXRoUGF5
bG9hZDpwYXlsb2FkXTsKLX0KLQotKyAodm9pZClfcGFyc2VEdW1teU9iamVjdDooVGVzdFByb3Rv
Y29sRGF0YWJhc2VEdW1teU9iamVjdCAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9h
ZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlv
bmFyeSBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sRGF0YWJhc2VEdW1t
eU9iamVjdCBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOwotfQotCi1AZW5kCi1AaW1w
bGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChUZXN0RG9tYWluKQotCi0r
ICh2b2lkKV9wYXJzZVBhcmFtZXRlckJ1bmRsZTooVGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1
bmRsZSAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOwotICAg
ICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZSBhbGxvY10gaW5p
dFdpdGhQYXlsb2FkOnBheWxvYWRdOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJh
dGlvbi1vYmplY3QtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVBy
b3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLSNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0j
aW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwot
Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yCi0KLS0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICos
IGlkPiAqKXBheWxvYWQKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAg
ICAgcmV0dXJuIG5pbDsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVS
VFkocGF5bG9hZFtAIm1lc3NhZ2UiXSwgQCJtZXNzYWdlIik7Ci0gICAgc2VsZi5tZXNzYWdlID0g
cGF5bG9hZFtAIm1lc3NhZ2UiXTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURf
UFJPUEVSVFkocGF5bG9hZFtAImNvZGUiXSwgQCJjb2RlIik7Ci0gICAgc2VsZi5jb2RlID0gW3Bh
eWxvYWRbQCJjb2RlIl0gaW50ZWdlclZhbHVlXTsKLQotICAgIHJldHVybiBzZWxmOwotfQotLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVj
dCAqKW9iamVjdAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0
OltvYmplY3QgdG9KU09OT2JqZWN0XS5nZXQoKV0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0g
ICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6KE5T
U3RyaW5nICopbWVzc2FnZSBjb2RlOihpbnQpY29kZQotewotICAgIGlmICghKHNlbGYgPSBbc3Vw
ZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9SRVFVSVJFRF9QUk9QRVJUWShtZXNzYWdlLCBAIm1lc3NhZ2UiKTsKLQotICAgIHNlbGYubWVz
c2FnZSA9IG1lc3NhZ2U7Ci0gICAgc2VsZi5jb2RlID0gY29kZTsKLQotICAgIHJldHVybiBzZWxm
OwotfQotCi0tICh2b2lkKXNldE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZQotewotICAgIFtz
dXBlciBzZXRTdHJpbmc6bWVzc2FnZSBmb3JLZXk6QCJtZXNzYWdlIl07Ci19Ci0KLS0gKE5TU3Ry
aW5nICopbWVzc2FnZQotewotICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAibWVzc2Fn
ZSJdOwotfQotCi0tICh2b2lkKXNldENvZGU6KGludCljb2RlCi17Ci0gICAgW3N1cGVyIHNldElu
dGVnZXI6Y29kZSBmb3JLZXk6QCJjb2RlIl07Ci19Ci0KLS0gKGludCljb2RlCi17Ci0gICAgcmV0
dXJuIFtzdXBlciBpbnRlZ2VyRm9yS2V5OkAiY29kZSJdOwotfQotCi1AZW5kCi0KLUBpbXBsZW1l
bnRhdGlvbiBUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlCi0KLS0g
KGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3Ry
aW5nICosIGlkPiAqKXBheWxvYWQKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkK
LSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIHNlbGYuY29sdW1uTmFtZXMgPSBwYXlsb2FkW0Ai
Y29sdW1uTmFtZXMiXTsKLQotICAgIHNlbGYuYnV0dG9ucyA9IHBheWxvYWRbQCJidXR0b25zIl07
Ci0KLSAgICBPcHRpb25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVu
ZGxlRGlyZWN0aW9uYWxpdHk+IGRpcmVjdGlvbmFsaXR5ID0gZnJvbVByb3RvY29sU3RyaW5nPFRl
c3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eT4o
cGF5bG9hZFtAImRpcmVjdGlvbmFsaXR5Il0pOwotICAgIGlmIChkaXJlY3Rpb25hbGl0eSkKLSAg
ICAgICAgc2VsZi5kaXJlY3Rpb25hbGl0eSA9IGRpcmVjdGlvbmFsaXR5LnZhbHVlKCk7Ci0KLSAg
ICBzZWxmLm5vdGVzID0gcGF5bG9hZFtAIm5vdGVzIl07Ci0KLSAgICBzZWxmLnRpbWVzdGFtcCA9
IFtwYXlsb2FkW0AidGltZXN0YW1wIl0gZG91YmxlVmFsdWVdOwotCi0gICAgc2VsZi52YWx1ZXMg
PSBwYXlsb2FkW0AidmFsdWVzIl07Ci0KLSAgICBzZWxmLnBheWxvYWQgPSBwYXlsb2FkW0AicGF5
bG9hZCJdOwotCi0gICAgc2VsZi5lcnJvciA9IFtbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBh
bGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRbQCJlcnJvciJdXTsKLQotICAgIHNlbGYuZXJy
b3JMaXN0ID0gb2JqY0FycmF5RnJvbVBheWxvYWQ8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4o
cGF5bG9hZFtAImVycm9yTGlzdCJdKTsKLQotICAgIHJldHVybiBzZWxmOwotfQotLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9i
amVjdAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmpl
Y3QgdG9KU09OT2JqZWN0XS5nZXQoKV0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgcmV0
dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpc2V0Q29sdW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmlu
Zz4qLyAqKWNvbHVtbk5hbWVzCi17Ci0gICAgW3N1cGVyIHNldEpTT05BcnJheTp0b0pTT05TdHJp
bmdBcnJheShjb2x1bW5OYW1lcykgZm9yS2V5OkAiY29sdW1uTmFtZXMiXTsKLX0KLQotLSAoTlNB
cnJheS8qPE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMKLXsKLSAgICByZXR1cm4gdG9PYmpDU3Ry
aW5nQXJyYXkoW3N1cGVyIEpTT05BcnJheUZvcktleTpAImNvbHVtbk5hbWVzIl0pOwotfQotCi0t
ICh2b2lkKXNldEJ1dHRvbnM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWJ1dHRvbnMKLXsKLSAg
ICBbc3VwZXIgc2V0SlNPTkFycmF5OnRvSlNPTlN0cmluZ0FycmF5KGJ1dHRvbnMpIGZvcktleTpA
ImJ1dHRvbnMiXTsKLX0KLQotLSAoTlNBcnJheS8qPE5TU3RyaW5nPiovICopYnV0dG9ucwotewot
ICAgIHJldHVybiB0b09iakNTdHJpbmdBcnJheShbc3VwZXIgSlNPTkFycmF5Rm9yS2V5OkAiYnV0
dG9ucyJdKTsKLX0KLQotLSAodm9pZClzZXREaXJlY3Rpb25hbGl0eTooVGVzdFByb3RvY29sRGF0
YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5KWRpcmVjdGlvbmFsaXR5
Ci17Ci0gICAgW3N1cGVyIHNldFN0cmluZzp0b1Byb3RvY29sU3RyaW5nKGRpcmVjdGlvbmFsaXR5
KSBmb3JLZXk6QCJkaXJlY3Rpb25hbGl0eSJdOwotfQotCi0tIChUZXN0UHJvdG9jb2xEYXRhYmFz
ZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHkpZGlyZWN0aW9uYWxpdHkKLXsK
LSAgICByZXR1cm4gZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9u
YWxQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eT4oW3N1cGVyIHN0cmluZ0ZvcktleTpAImRp
cmVjdGlvbmFsaXR5Il0pLnZhbHVlKCk7Ci19Ci0KLS0gKHZvaWQpc2V0Tm90ZXM6KE5TU3RyaW5n
ICopbm90ZXMKLXsKLSAgICBbc3VwZXIgc2V0U3RyaW5nOm5vdGVzIGZvcktleTpAIm5vdGVzIl07
Ci19Ci0KLS0gKE5TU3RyaW5nICopbm90ZXMKLXsKLSAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0Zv
cktleTpAIm5vdGVzIl07Ci19Ci0KLS0gKHZvaWQpc2V0VGltZXN0YW1wOihkb3VibGUpdGltZXN0
YW1wCi17Ci0gICAgW3N1cGVyIHNldERvdWJsZTp0aW1lc3RhbXAgZm9yS2V5OkAidGltZXN0YW1w
Il07Ci19Ci0KLS0gKGRvdWJsZSl0aW1lc3RhbXAKLXsKLSAgICByZXR1cm4gW3N1cGVyIGRvdWJs
ZUZvcktleTpAInRpbWVzdGFtcCJdOwotfQotCi0tICh2b2lkKXNldFZhbHVlczooUldJUHJvdG9j
b2xKU09OT2JqZWN0ICopdmFsdWVzCi17Ci0gICAgW3N1cGVyIHNldE9iamVjdDp2YWx1ZXMgZm9y
S2V5OkAidmFsdWVzIl07Ci19Ci0KLS0gKFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcwot
ewotICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb2JqZWN0ID0gW3N1cGVyIG9iamVjdEZvcktl
eTpAInZhbHVlcyJdOwotICAgIGlmICghb2JqZWN0KQotICAgICAgICByZXR1cm4gbmlsOwotICAg
IHJldHVybiBbW1JXSVByb3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0
Oltbc3VwZXIgb2JqZWN0Rm9yS2V5OkAidmFsdWVzIl0gdG9KU09OT2JqZWN0XS5nZXQoKV07Ci19
Ci0KLS0gKHZvaWQpc2V0UGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZAot
ewotICAgIFtzdXBlciBzZXRPYmplY3Q6cGF5bG9hZCBmb3JLZXk6QCJwYXlsb2FkIl07Ci19Ci0K
LS0gKFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQKLXsKLSAgICBSV0lQcm90b2NvbEpT
T05PYmplY3QgKm9iamVjdCA9IFtzdXBlciBvYmplY3RGb3JLZXk6QCJwYXlsb2FkIl07Ci0gICAg
aWYgKCFvYmplY3QpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgcmV0dXJuIFtbUldJUHJvdG9j
b2xKU09OT2JqZWN0IGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6W1tzdXBlciBvYmplY3RGb3JL
ZXk6QCJwYXlsb2FkIl0gdG9KU09OT2JqZWN0XS5nZXQoKV07Ci19Ci0KLS0gKHZvaWQpc2V0RXJy
b3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKillcnJvcgotewotICAgIFtzdXBlciBzZXRP
YmplY3Q6ZXJyb3IgZm9yS2V5OkAiZXJyb3IiXTsKLX0KLQotLSAoVGVzdFByb3RvY29sRGF0YWJh
c2VFcnJvciAqKWVycm9yCi17Ci0gICAgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvYmplY3QgPSBb
c3VwZXIgb2JqZWN0Rm9yS2V5OkAiZXJyb3IiXTsKLSAgICBpZiAoIW9iamVjdCkKLSAgICAgICAg
cmV0dXJuIG5pbDsKLSAgICByZXR1cm4gW1tUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGFsbG9j
XSBpbml0V2l0aEpTT05PYmplY3Q6W1tzdXBlciBvYmplY3RGb3JLZXk6QCJlcnJvciJdIHRvSlNP
Tk9iamVjdF0uZ2V0KCldOwotfQotCi0tICh2b2lkKXNldEVycm9yTGlzdDooTlNBcnJheS8qPFRl
c3RQcm90b2NvbERhdGFiYXNlRXJyb3I+Ki8gKillcnJvckxpc3QKLXsKLSAgICBUSFJPV19FWENF
UFRJT05fRk9SX0JBRF9UWVBFX0lOX0FSUkFZKGVycm9yTGlzdCwgW1Rlc3RQcm90b2NvbERhdGFi
YXNlRXJyb3IgY2xhc3NdKTsKLSAgICBbc3VwZXIgc2V0SlNPTkFycmF5OnRvSlNPTk9iamVjdEFy
cmF5KGVycm9yTGlzdCkgZm9yS2V5OkAiZXJyb3JMaXN0Il07Ci19Ci0KLS0gKE5TQXJyYXkvKjxU
ZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yPiovICopZXJyb3JMaXN0Ci17Ci0gICAgcmV0dXJuIHRv
T2JqQ0FycmF5PFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I+KFtzdXBlciBKU09OQXJyYXlGb3JL
ZXk6QCJlcnJvckxpc3QiXSk7Ci19Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90
b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlCi0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBh
eWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQKLXsK
LSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQot
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImNvbHVt
bk5hbWVzIl0sIEAiY29sdW1uTmFtZXMiKTsKLSAgICBzZWxmLmNvbHVtbk5hbWVzID0gcGF5bG9h
ZFtAImNvbHVtbk5hbWVzIl07Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BS
T1BFUlRZKHBheWxvYWRbQCJidXR0b25zIl0sIEAiYnV0dG9ucyIpOwotICAgIHNlbGYuYnV0dG9u
cyA9IHBheWxvYWRbQCJidXR0b25zIl07Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJ
UkVEX1BST1BFUlRZKHBheWxvYWRbQCJkaXJlY3Rpb25hbGl0eSJdLCBAImRpcmVjdGlvbmFsaXR5
Iik7Ci0gICAgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJl
Y3Rpb25hbGl0eT4gZGlyZWN0aW9uYWxpdHkgPSBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3Rv
Y29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eT4ocGF5bG9hZFtAImRpcmVj
dGlvbmFsaXR5Il0pOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX0VOVU1fVkFMVUUoZGly
ZWN0aW9uYWxpdHksIEAiZGlyZWN0aW9uYWxpdHkiKTsKLSAgICBzZWxmLmRpcmVjdGlvbmFsaXR5
ID0gZGlyZWN0aW9uYWxpdHkudmFsdWUoKTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVR
VUlSRURfUFJPUEVSVFkocGF5bG9hZFtAIm5vdGVzIl0sIEAibm90ZXMiKTsKLSAgICBzZWxmLm5v
dGVzID0gcGF5bG9hZFtAIm5vdGVzIl07Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJ
UkVEX1BST1BFUlRZKHBheWxvYWRbQCJ0aW1lc3RhbXAiXSwgQCJ0aW1lc3RhbXAiKTsKLSAgICBz
ZWxmLnRpbWVzdGFtcCA9IFtwYXlsb2FkW0AidGltZXN0YW1wIl0gZG91YmxlVmFsdWVdOwotCi0g
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AidmFsdWVz
Il0sIEAidmFsdWVzIik7Ci0gICAgc2VsZi52YWx1ZXMgPSBwYXlsb2FkW0AidmFsdWVzIl07Ci0K
LSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJwYXls
b2FkIl0sIEAicGF5bG9hZCIpOwotICAgIHNlbGYucGF5bG9hZCA9IHBheWxvYWRbQCJwYXlsb2Fk
Il07Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRb
QCJlcnJvciJdLCBAImVycm9yIik7Ci0gICAgc2VsZi5lcnJvciA9IFtbVGVzdFByb3RvY29sRGF0
YWJhc2VFcnJvciBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRbQCJlcnJvciJdXTsKLQot
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImVycm9y
TGlzdCJdLCBAImVycm9yTGlzdCIpOwotICAgIHNlbGYuZXJyb3JMaXN0ID0gb2JqY0FycmF5RnJv
bVBheWxvYWQ8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4ocGF5bG9hZFtAImVycm9yTGlzdCJd
KTsKLQotICAgIHJldHVybiBzZWxmOwotfQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9j
b2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9iamVjdAotewotICAgIGlmICghKHNl
bGYgPSBbc3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmplY3QgdG9KU09OT2JqZWN0XS5nZXQo
KV0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aENvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilj
b2x1bW5OYW1lcyBidXR0b25zOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilidXR0b25zIGRpcmVj
dGlvbmFsaXR5OihUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFs
aXR5KWRpcmVjdGlvbmFsaXR5IG5vdGVzOihOU1N0cmluZyAqKW5vdGVzIHRpbWVzdGFtcDooZG91
YmxlKXRpbWVzdGFtcCB2YWx1ZXM6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcyBwYXls
b2FkOihSV0lQcm90b2NvbEpTT05PYmplY3QgKilwYXlsb2FkIGVycm9yOihUZXN0UHJvdG9jb2xE
YXRhYmFzZUVycm9yICopZXJyb3IgZXJyb3JMaXN0OihOU0FycmF5Lyo8VGVzdFByb3RvY29sRGF0
YWJhc2VFcnJvcj4qLyAqKWVycm9yTGlzdAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5p
dF0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFV
SVJFRF9QUk9QRVJUWShjb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOwotICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkoYnV0dG9ucywgQCJidXR0b25zIik7Ci0gICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShub3RlcywgQCJub3RlcyIpOwot
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkodmFsdWVzLCBAInZhbHVl
cyIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZCwg
QCJwYXlsb2FkIik7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShl
cnJvciwgQCJlcnJvciIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVS
VFkoZXJyb3JMaXN0LCBAImVycm9yTGlzdCIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFE
X1RZUEVfSU5fQVJSQVkoZXJyb3JMaXN0LCBbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBjbGFz
c10pOwotCi0gICAgc2VsZi5jb2x1bW5OYW1lcyA9IGNvbHVtbk5hbWVzOwotICAgIHNlbGYuYnV0
dG9ucyA9IGJ1dHRvbnM7Ci0gICAgc2VsZi5kaXJlY3Rpb25hbGl0eSA9IGRpcmVjdGlvbmFsaXR5
OwotICAgIHNlbGYubm90ZXMgPSBub3RlczsKLSAgICBzZWxmLnRpbWVzdGFtcCA9IHRpbWVzdGFt
cDsKLSAgICBzZWxmLnZhbHVlcyA9IHZhbHVlczsKLSAgICBzZWxmLnBheWxvYWQgPSBwYXlsb2Fk
OwotICAgIHNlbGYuZXJyb3IgPSBlcnJvcjsKLSAgICBzZWxmLmVycm9yTGlzdCA9IGVycm9yTGlz
dDsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKXNldENvbHVtbk5hbWVzOihOU0Fy
cmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcwotewotICAgIFtzdXBlciBzZXRKU09OQXJy
YXk6dG9KU09OU3RyaW5nQXJyYXkoY29sdW1uTmFtZXMpIGZvcktleTpAImNvbHVtbk5hbWVzIl07
Ci19Ci0KLS0gKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWNvbHVtbk5hbWVzCi17Ci0gICAgcmV0
dXJuIHRvT2JqQ1N0cmluZ0FycmF5KFtzdXBlciBKU09OQXJyYXlGb3JLZXk6QCJjb2x1bW5OYW1l
cyJdKTsKLX0KLQotLSAodm9pZClzZXRCdXR0b25zOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKili
dXR0b25zCi17Ci0gICAgW3N1cGVyIHNldEpTT05BcnJheTp0b0pTT05TdHJpbmdBcnJheShidXR0
b25zKSBmb3JLZXk6QCJidXR0b25zIl07Ci19Ci0KLS0gKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAq
KWJ1dHRvbnMKLXsKLSAgICByZXR1cm4gdG9PYmpDU3RyaW5nQXJyYXkoW3N1cGVyIEpTT05BcnJh
eUZvcktleTpAImJ1dHRvbnMiXSk7Ci19Ci0KLS0gKHZvaWQpc2V0RGlyZWN0aW9uYWxpdHk6KFRl
c3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHkpZGlyZWN0aW9u
YWxpdHkKLXsKLSAgICBbc3VwZXIgc2V0U3RyaW5nOnRvUHJvdG9jb2xTdHJpbmcoZGlyZWN0aW9u
YWxpdHkpIGZvcktleTpAImRpcmVjdGlvbmFsaXR5Il07Ci19Ci0KLS0gKFRlc3RQcm90b2NvbERh
dGFiYXNlUGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9uYWxpdHkpZGlyZWN0aW9uYWxpdHkKLXsKLSAg
ICByZXR1cm4gZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVy
QnVuZGxlRGlyZWN0aW9uYWxpdHk+KFtzdXBlciBzdHJpbmdGb3JLZXk6QCJkaXJlY3Rpb25hbGl0
eSJdKS52YWx1ZSgpOwotfQotCi0tICh2b2lkKXNldE5vdGVzOihOU1N0cmluZyAqKW5vdGVzCi17
Ci0gICAgW3N1cGVyIHNldFN0cmluZzpub3RlcyBmb3JLZXk6QCJub3RlcyJdOwotfQotCi0tIChO
U1N0cmluZyAqKW5vdGVzCi17Ci0gICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJub3Rl
cyJdOwotfQotCi0tICh2b2lkKXNldFRpbWVzdGFtcDooZG91YmxlKXRpbWVzdGFtcAotewotICAg
IFtzdXBlciBzZXREb3VibGU6dGltZXN0YW1wIGZvcktleTpAInRpbWVzdGFtcCJdOwotfQotCi0t
IChkb3VibGUpdGltZXN0YW1wCi17Ci0gICAgcmV0dXJuIFtzdXBlciBkb3VibGVGb3JLZXk6QCJ0
aW1lc3RhbXAiXTsKLX0KLQotLSAodm9pZClzZXRWYWx1ZXM6KFJXSVByb3RvY29sSlNPTk9iamVj
dCAqKXZhbHVlcwotewotICAgIFtzdXBlciBzZXRPYmplY3Q6dmFsdWVzIGZvcktleTpAInZhbHVl
cyJdOwotfQotCi0tIChSV0lQcm90b2NvbEpTT05PYmplY3QgKil2YWx1ZXMKLXsKLSAgICBSV0lQ
cm90b2NvbEpTT05PYmplY3QgKm9iamVjdCA9IFtzdXBlciBvYmplY3RGb3JLZXk6QCJ2YWx1ZXMi
XTsKLSAgICBpZiAoIW9iamVjdCkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4gW1tS
V0lQcm90b2NvbEpTT05PYmplY3QgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDpbW3N1cGVyIG9i
amVjdEZvcktleTpAInZhbHVlcyJdIHRvSlNPTk9iamVjdF0uZ2V0KCldOwotfQotCi0tICh2b2lk
KXNldFBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQKLXsKLSAgICBbc3Vw
ZXIgc2V0T2JqZWN0OnBheWxvYWQgZm9yS2V5OkAicGF5bG9hZCJdOwotfQotCi0tIChSV0lQcm90
b2NvbEpTT05PYmplY3QgKilwYXlsb2FkCi17Ci0gICAgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpv
YmplY3QgPSBbc3VwZXIgb2JqZWN0Rm9yS2V5OkAicGF5bG9hZCJdOwotICAgIGlmICghb2JqZWN0
KQotICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiBbW1JXSVByb3RvY29sSlNPTk9iamVj
dCBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0Oltbc3VwZXIgb2JqZWN0Rm9yS2V5OkAicGF5bG9h
ZCJdIHRvSlNPTk9iamVjdF0uZ2V0KCldOwotfQotCi0tICh2b2lkKXNldEVycm9yOihUZXN0UHJv
dG9jb2xEYXRhYmFzZUVycm9yICopZXJyb3IKLXsKLSAgICBbc3VwZXIgc2V0T2JqZWN0OmVycm9y
IGZvcktleTpAImVycm9yIl07Ci19Ci0KLS0gKFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKill
cnJvcgotewotICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb2JqZWN0ID0gW3N1cGVyIG9iamVj
dEZvcktleTpAImVycm9yIl07Ci0gICAgaWYgKCFvYmplY3QpCi0gICAgICAgIHJldHVybiBuaWw7
Ci0gICAgcmV0dXJuIFtbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBhbGxvY10gaW5pdFdpdGhK
U09OT2JqZWN0Oltbc3VwZXIgb2JqZWN0Rm9yS2V5OkAiZXJyb3IiXSB0b0pTT05PYmplY3RdLmdl
dCgpXTsKLX0KLQotLSAodm9pZClzZXRFcnJvckxpc3Q6KE5TQXJyYXkvKjxUZXN0UHJvdG9jb2xE
YXRhYmFzZUVycm9yPiovICopZXJyb3JMaXN0Ci17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9C
QURfVFlQRV9JTl9BUlJBWShlcnJvckxpc3QsIFtUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGNs
YXNzXSk7Ci0gICAgW3N1cGVyIHNldEpTT05BcnJheTp0b0pTT05PYmplY3RBcnJheShlcnJvckxp
c3QpIGZvcktleTpAImVycm9yTGlzdCJdOwotfQotCi0tIChOU0FycmF5Lyo8VGVzdFByb3RvY29s
RGF0YWJhc2VFcnJvcj4qLyAqKWVycm9yTGlzdAotewotICAgIHJldHVybiB0b09iakNBcnJheTxU
ZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yPihbc3VwZXIgSlNPTkFycmF5Rm9yS2V5OkAiZXJyb3JM
aXN0Il0pOwotfQotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xEYXRhYmFz
ZU9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHMKLQotLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoUGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9h
ZAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmls
OwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0Ai
aW50ZWdlciJdLCBAImludGVnZXIiKTsKLSAgICBzZWxmLmludGVnZXIgPSBwYXlsb2FkW0AiaW50
ZWdlciJdOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXls
b2FkW0AiYXJyYXkiXSwgQCJhcnJheSIpOwotICAgIHNlbGYuYXJyYXkgPSBwYXlsb2FkW0AiYXJy
YXkiXTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9h
ZFtAInN0cmluZyJdLCBAInN0cmluZyIpOwotICAgIHNlbGYuc3RyaW5nID0gcGF5bG9hZFtAInN0
cmluZyJdOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXls
b2FkW0AidmFsdWUiXSwgQCJ2YWx1ZSIpOwotICAgIHNlbGYudmFsdWUgPSBwYXlsb2FkW0AidmFs
dWUiXTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9h
ZFtAIm9iamVjdCJdLCBAIm9iamVjdCIpOwotICAgIHNlbGYub2JqZWN0ID0gcGF5bG9hZFtAIm9i
amVjdCJdOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQ
cm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopb2JqZWN0Ci17Ci0gICAgaWYg
KCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEpTT05PYmplY3Q6W29iamVjdCB0b0pTT05PYmplY3Rd
LmdldCgpXSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQot
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSW50ZWdlcjooTlNTdHJpbmcgKilpbnRlZ2VyIGFycmF5
OihOU1N0cmluZyAqKWFycmF5IHN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcgdmFsdWU6KE5TU3Ry
aW5nICopdmFsdWUgb2JqZWN0OihOU1N0cmluZyAqKW9iamVjdAotewotICAgIGlmICghKHNlbGYg
PSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShpbnRlZ2VyLCBAImludGVnZXIiKTsKLSAgICBUSFJP
V19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKGFycmF5LCBAImFycmF5Iik7Ci0gICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShzdHJpbmcsIEAic3RyaW5nIik7
Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWSh2YWx1ZSwgQCJ2YWx1
ZSIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkob2JqZWN0LCBA
Im9iamVjdCIpOwotCi0gICAgc2VsZi5pbnRlZ2VyID0gaW50ZWdlcjsKLSAgICBzZWxmLmFycmF5
ID0gYXJyYXk7Ci0gICAgc2VsZi5zdHJpbmcgPSBzdHJpbmc7Ci0gICAgc2VsZi52YWx1ZSA9IHZh
bHVlOwotICAgIHNlbGYub2JqZWN0ID0gb2JqZWN0OwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0K
LS0gKHZvaWQpc2V0SW50ZWdlcjooTlNTdHJpbmcgKilpbnRlZ2VyCi17Ci0gICAgW3N1cGVyIHNl
dFN0cmluZzppbnRlZ2VyIGZvcktleTpAImludGVnZXIiXTsKLX0KLQotLSAoTlNTdHJpbmcgKilp
bnRlZ2VyCi17Ci0gICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJpbnRlZ2VyIl07Ci19
Ci0KLS0gKHZvaWQpc2V0QXJyYXk6KE5TU3RyaW5nICopYXJyYXkKLXsKLSAgICBbc3VwZXIgc2V0
U3RyaW5nOmFycmF5IGZvcktleTpAImFycmF5Il07Ci19Ci0KLS0gKE5TU3RyaW5nICopYXJyYXkK
LXsKLSAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAImFycmF5Il07Ci19Ci0KLS0gKHZv
aWQpc2V0U3RyaW5nOihOU1N0cmluZyAqKXN0cmluZwotewotICAgIFtzdXBlciBzZXRTdHJpbmc6
c3RyaW5nIGZvcktleTpAInN0cmluZyJdOwotfQotCi0tIChOU1N0cmluZyAqKXN0cmluZwotewot
ICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAic3RyaW5nIl07Ci19Ci0KLS0gKHZvaWQp
c2V0VmFsdWU6KE5TU3RyaW5nICopdmFsdWUKLXsKLSAgICBbc3VwZXIgc2V0U3RyaW5nOnZhbHVl
IGZvcktleTpAInZhbHVlIl07Ci19Ci0KLS0gKE5TU3RyaW5nICopdmFsdWUKLXsKLSAgICByZXR1
cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAInZhbHVlIl07Ci19Ci0KLS0gKHZvaWQpc2V0T2JqZWN0
OihOU1N0cmluZyAqKW9iamVjdAotewotICAgIFtzdXBlciBzZXRTdHJpbmc6b2JqZWN0IGZvcktl
eTpAIm9iamVjdCJdOwotfQotCi0tIChOU1N0cmluZyAqKW9iamVjdAotewotICAgIHJldHVybiBb
c3VwZXIgc3RyaW5nRm9yS2V5OkAib2JqZWN0Il07Ci19Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0
aW9uIFRlc3RQcm90b2NvbERhdGFiYXNlRHVtbXlPYmplY3QKLQotLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoUGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5
bG9hZAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4g
bmlsOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90
b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopb2JqZWN0Ci17Ci0gICAgaWYgKCEo
c2VsZiA9IFtzdXBlciBpbml0V2l0aEpTT05PYmplY3Q6W29iamVjdCB0b0pTT05PYmplY3RdLmdl
dCgpXSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotQGVu
ZAotCi0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlCi0K
LS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5T
U3RyaW5nICosIGlkPiAqKXBheWxvYWQKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRd
KSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlS
RURfUFJPUEVSVFkocGF5bG9hZFtAImRpcmVjdGlvbmFsaXR5Il0sIEAiZGlyZWN0aW9uYWxpdHki
KTsKLSAgICBPcHRpb25hbDxUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlRGlyZWN0aW9u
YWxpdHk+IGRpcmVjdGlvbmFsaXR5ID0gZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbFRl
c3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eT4ocGF5bG9hZFtAImRpcmVjdGlvbmFsaXR5
Il0pOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX0VOVU1fVkFMVUUoZGlyZWN0aW9uYWxp
dHksIEAiZGlyZWN0aW9uYWxpdHkiKTsKLSAgICBzZWxmLmRpcmVjdGlvbmFsaXR5ID0gZGlyZWN0
aW9uYWxpdHkudmFsdWUoKTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJP
UEVSVFkocGF5bG9hZFtAImJ1dHRvbnMiXSwgQCJidXR0b25zIik7Ci0gICAgc2VsZi5idXR0b25z
ID0gcGF5bG9hZFtAImJ1dHRvbnMiXTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlS
RURfUFJPUEVSVFkocGF5bG9hZFtAImNvbHVtbk5hbWVzIl0sIEAiY29sdW1uTmFtZXMiKTsKLSAg
ICBzZWxmLmNvbHVtbk5hbWVzID0gcGF5bG9hZFtAImNvbHVtbk5hbWVzIl07Ci0KLSAgICBUSFJP
V19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJub3RlcyJdLCBAIm5v
dGVzIik7Ci0gICAgc2VsZi5ub3RlcyA9IHBheWxvYWRbQCJub3RlcyJdOwotCi0gICAgVEhST1df
RVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AidGltZXN0YW1wIl0sIEAi
dGltZXN0YW1wIik7Ci0gICAgc2VsZi50aW1lc3RhbXAgPSBbcGF5bG9hZFtAInRpbWVzdGFtcCJd
IGRvdWJsZVZhbHVlXTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVS
VFkocGF5bG9hZFtAInZhbHVlcyJdLCBAInZhbHVlcyIpOwotICAgIHNlbGYudmFsdWVzID0gcGF5
bG9hZFtAInZhbHVlcyJdOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9Q
RVJUWShwYXlsb2FkW0AicGF5bG9hZCJdLCBAInBheWxvYWQiKTsKLSAgICBzZWxmLnBheWxvYWQg
PSBwYXlsb2FkW0AicGF5bG9hZCJdOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJF
RF9QUk9QRVJUWShwYXlsb2FkW0AiZXJyb3IiXSwgQCJlcnJvciIpOwotICAgIHNlbGYuZXJyb3Ig
PSBbW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXls
b2FkW0AiZXJyb3IiXV07Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLS0gKGluc3RhbmNldHlwZSlp
bml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilvYmplY3QKLXsK
LSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoSlNPTk9iamVjdDpbb2JqZWN0IHRvSlNP
Tk9iamVjdF0uZ2V0KCldKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIHJldHVybiBzZWxm
OwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhEaXJlY3Rpb25hbGl0eTooVGVzdFByb3Rv
Y29sVGVzdFBhcmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5KWRpcmVjdGlvbmFsaXR5IGJ1dHRv
bnM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWJ1dHRvbnMgY29sdW1uTmFtZXM6KE5TQXJyYXkv
KjxOU1N0cmluZz4qLyAqKWNvbHVtbk5hbWVzIG5vdGVzOihOU1N0cmluZyAqKW5vdGVzIHRpbWVz
dGFtcDooZG91YmxlKXRpbWVzdGFtcCB2YWx1ZXM6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXZh
bHVlcyBwYXlsb2FkOihSV0lQcm90b2NvbEpTT05PYmplY3QgKilwYXlsb2FkIGVycm9yOihUZXN0
UHJvdG9jb2xEYXRhYmFzZUVycm9yICopZXJyb3IKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVy
IGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
UkVRVUlSRURfUFJPUEVSVFkoYnV0dG9ucywgQCJidXR0b25zIik7Ci0gICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShjb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOwot
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkobm90ZXMsIEAibm90ZXMi
KTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHZhbHVlcywgQCJ2
YWx1ZXMiKTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxv
YWQsIEAicGF5bG9hZCIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVS
VFkoZXJyb3IsIEAiZXJyb3IiKTsKLQotICAgIHNlbGYuZGlyZWN0aW9uYWxpdHkgPSBkaXJlY3Rp
b25hbGl0eTsKLSAgICBzZWxmLmJ1dHRvbnMgPSBidXR0b25zOwotICAgIHNlbGYuY29sdW1uTmFt
ZXMgPSBjb2x1bW5OYW1lczsKLSAgICBzZWxmLm5vdGVzID0gbm90ZXM7Ci0gICAgc2VsZi50aW1l
c3RhbXAgPSB0aW1lc3RhbXA7Ci0gICAgc2VsZi52YWx1ZXMgPSB2YWx1ZXM7Ci0gICAgc2VsZi5w
YXlsb2FkID0gcGF5bG9hZDsKLSAgICBzZWxmLmVycm9yID0gZXJyb3I7Ci0KLSAgICByZXR1cm4g
c2VsZjsKLX0KLQotLSAodm9pZClzZXREaXJlY3Rpb25hbGl0eTooVGVzdFByb3RvY29sVGVzdFBh
cmFtZXRlckJ1bmRsZURpcmVjdGlvbmFsaXR5KWRpcmVjdGlvbmFsaXR5Ci17Ci0gICAgW3N1cGVy
IHNldFN0cmluZzp0b1Byb3RvY29sU3RyaW5nKGRpcmVjdGlvbmFsaXR5KSBmb3JLZXk6QCJkaXJl
Y3Rpb25hbGl0eSJdOwotfQotCi0tIChUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlRGly
ZWN0aW9uYWxpdHkpZGlyZWN0aW9uYWxpdHkKLXsKLSAgICByZXR1cm4gZnJvbVByb3RvY29sU3Ry
aW5nPFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGVEaXJlY3Rpb25hbGl0eT4oW3N1cGVy
IHN0cmluZ0ZvcktleTpAImRpcmVjdGlvbmFsaXR5Il0pLnZhbHVlKCk7Ci19Ci0KLS0gKHZvaWQp
c2V0QnV0dG9uczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopYnV0dG9ucwotewotICAgIFtzdXBl
ciBzZXRKU09OQXJyYXk6dG9KU09OU3RyaW5nQXJyYXkoYnV0dG9ucykgZm9yS2V5OkAiYnV0dG9u
cyJdOwotfQotCi0tIChOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilidXR0b25zCi17Ci0gICAgcmV0
dXJuIHRvT2JqQ1N0cmluZ0FycmF5KFtzdXBlciBKU09OQXJyYXlGb3JLZXk6QCJidXR0b25zIl0p
OwotfQotCi0tICh2b2lkKXNldENvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilj
b2x1bW5OYW1lcwotewotICAgIFtzdXBlciBzZXRKU09OQXJyYXk6dG9KU09OU3RyaW5nQXJyYXko
Y29sdW1uTmFtZXMpIGZvcktleTpAImNvbHVtbk5hbWVzIl07Ci19Ci0KLS0gKE5TQXJyYXkvKjxO
U1N0cmluZz4qLyAqKWNvbHVtbk5hbWVzCi17Ci0gICAgcmV0dXJuIHRvT2JqQ1N0cmluZ0FycmF5
KFtzdXBlciBKU09OQXJyYXlGb3JLZXk6QCJjb2x1bW5OYW1lcyJdKTsKLX0KLQotLSAodm9pZClz
ZXROb3RlczooTlNTdHJpbmcgKilub3RlcwotewotICAgIFtzdXBlciBzZXRTdHJpbmc6bm90ZXMg
Zm9yS2V5OkAibm90ZXMiXTsKLX0KLQotLSAoTlNTdHJpbmcgKilub3RlcwotewotICAgIHJldHVy
biBbc3VwZXIgc3RyaW5nRm9yS2V5OkAibm90ZXMiXTsKLX0KLQotLSAodm9pZClzZXRUaW1lc3Rh
bXA6KGRvdWJsZSl0aW1lc3RhbXAKLXsKLSAgICBbc3VwZXIgc2V0RG91YmxlOnRpbWVzdGFtcCBm
b3JLZXk6QCJ0aW1lc3RhbXAiXTsKLX0KLQotLSAoZG91YmxlKXRpbWVzdGFtcAotewotICAgIHJl
dHVybiBbc3VwZXIgZG91YmxlRm9yS2V5OkAidGltZXN0YW1wIl07Ci19Ci0KLS0gKHZvaWQpc2V0
VmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKil2YWx1ZXMKLXsKLSAgICBbc3VwZXIgc2V0
T2JqZWN0OnZhbHVlcyBmb3JLZXk6QCJ2YWx1ZXMiXTsKLX0KLQotLSAoUldJUHJvdG9jb2xKU09O
T2JqZWN0ICopdmFsdWVzCi17Ci0gICAgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvYmplY3QgPSBb
c3VwZXIgb2JqZWN0Rm9yS2V5OkAidmFsdWVzIl07Ci0gICAgaWYgKCFvYmplY3QpCi0gICAgICAg
IHJldHVybiBuaWw7Ci0gICAgcmV0dXJuIFtbUldJUHJvdG9jb2xKU09OT2JqZWN0IGFsbG9jXSBp
bml0V2l0aEpTT05PYmplY3Q6W1tzdXBlciBvYmplY3RGb3JLZXk6QCJ2YWx1ZXMiXSB0b0pTT05P
YmplY3RdLmdldCgpXTsKLX0KLQotLSAodm9pZClzZXRQYXlsb2FkOihSV0lQcm90b2NvbEpTT05P
YmplY3QgKilwYXlsb2FkCi17Ci0gICAgW3N1cGVyIHNldE9iamVjdDpwYXlsb2FkIGZvcktleTpA
InBheWxvYWQiXTsKLX0KLQotLSAoUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZAotewot
ICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb2JqZWN0ID0gW3N1cGVyIG9iamVjdEZvcktleTpA
InBheWxvYWQiXTsKLSAgICBpZiAoIW9iamVjdCkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBy
ZXR1cm4gW1tSV0lQcm90b2NvbEpTT05PYmplY3QgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDpb
W3N1cGVyIG9iamVjdEZvcktleTpAInBheWxvYWQiXSB0b0pTT05PYmplY3RdLmdldCgpXTsKLX0K
LQotLSAodm9pZClzZXRFcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKWVycm9yCi17
Ci0gICAgW3N1cGVyIHNldE9iamVjdDplcnJvciBmb3JLZXk6QCJlcnJvciJdOwotfQotCi0tIChU
ZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICopZXJyb3IKLXsKLSAgICBSV0lQcm90b2NvbEpTT05P
YmplY3QgKm9iamVjdCA9IFtzdXBlciBvYmplY3RGb3JLZXk6QCJlcnJvciJdOwotICAgIGlmICgh
b2JqZWN0KQotICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiBbW1Rlc3RQcm90b2NvbERh
dGFiYXNlRXJyb3IgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDpbW3N1cGVyIG9iamVjdEZvcktl
eTpAImVycm9yIl0gdG9KU09OT2JqZWN0XS5nZXQoKV07Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC90eXBlLXJlcXVp
cmluZy1ydW50aW1lLWNhc3RzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvdHlwZS1yZXF1aXJpbmctcnVu
dGltZS1jYXN0cy5qc29uLXJlc3VsdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTg0
ZGFjZGNhZjc5ODE4MjYzNjc5MTNlOGRkMGY5Njg0NDJkMWRlMi4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC90eXBlLXJlcXVpcmluZy1ydW50aW1l
LWNhc3RzLmpzb24tcmVzdWx0CisrKyAvZGV2L251bGwKQEAgLTEsMTY0OSArMCwwIEBACi0jIyMg
QmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLS8vIFRlc3QKLUluc3BlY3Rv
ckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIlRlc3QiLCBudWxsKTsKLUluc3BlY3RvckJhY2tlbmQu
cmVnaXN0ZXJFbnVtKCJUZXN0LlVuY2FzdGVkQW5pbWFscyIsIHtQaWdzOiAiUGlncyIsIENvd3M6
ICJDb3dzIiwgQ2F0czogIkNhdHMiLCBIZW5zOiAiSGVucyJ9KTsKLUluc3BlY3RvckJhY2tlbmQu
cmVnaXN0ZXJFbnVtKCJUZXN0LkNhc3RlZEFuaW1hbHMiLCB7RHVja3M6ICJEdWNrcyIsIEhlbnM6
ICJIZW5zIiwgQ3Jvd3M6ICJDcm93cyIsIEZsYW1pbmdvczogIkZsYW1pbmdvcyJ9KTsKLUluc3Bl
Y3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIlRlc3QiLCBudWxsKTsKLSMjIyBFbmQgRmlsZTog
SW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJu
YXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVz
LmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIu
aD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgot
Ci1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXIgewotcHVibGljOgotICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tl
bmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1v
dmUoZGlzcGF0Y2hlcik7IH0KLSAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNo
ZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Ci1wcml2YXRl
OgotICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKLX07
Ci0KLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jZW5kaWYgLy8gRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5h
dGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNw
YXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJp
bmctcnVudGltZS1jYXN0cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5o
IgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewotCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFs
dWVzLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCi0jaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgotI2VuZGlm
Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRl
ICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0K
LWNsYXNzIEZyb250ZW5kUm91dGVyOwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBF
bmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJU
ZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0K
LW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMj
IEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbE9iamVjdHMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9u
cy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLW5hbWVzcGFjZSBQcm90b2NvbCB7
Ci0KLQotCi0vLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KLW5hbWVzcGFjZSBUZXN0IHsKLWNsYXNz
IFR5cGVOZWVkaW5nQ2FzdDsKLWNsYXNzIFJlY3Vyc2l2ZU9iamVjdDE7Ci1jbGFzcyBSZWN1cnNp
dmVPYmplY3QyOwotZW51bSBjbGFzcyBVbmNhc3RlZEFuaW1hbHM7Ci1lbnVtIGNsYXNzIENhc3Rl
ZEFuaW1hbHM7Ci19IC8vIFRlc3QKLS8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KLQot
Ci0vLyBUeXBlZGVmcy4KLW5hbWVzcGFjZSBUZXN0IHsKLXR5cGVkZWYgaW50IENhc3RlZE9iamVj
dElkOwotdHlwZWRlZiBpbnQgVW5jYXN0ZWRPYmplY3RJZDsKLX0gLy8gVGVzdAotLy8gRW5kIG9m
IHR5cGVkZWZzLgotCi1uYW1lc3BhY2UgVGVzdEhlbHBlcnMgewotCi1TdHJpbmcgZ2V0RW51bUNv
bnN0YW50VmFsdWUoaW50IGNvZGUpOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgZ2V0
RW51bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFsdWUpCi17Ci0gICAgcmV0dXJuIGdldEVudW1Db25z
dGFudFZhbHVlKHN0YXRpY19jYXN0PGludD4oZW51bVZhbHVlKSk7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFRlc3RIZWxwZXJzCi0KLW5hbWVzcGFjZSBUZXN0IHsKLS8qIEEgZHVtbXkgdHlwZSB0aGF0
IHJlcXVpcmVzIHJ1bnRpbWUgY2FzdHMsIGFuZCBmb3JjZXMgbm9uLXByaW1pdGl2ZSByZWZlcmVu
Y2VkIHR5cGVzIHRvIGFsc28gZW1pdCBydW50aW1lIGNhc3QgaGVscGVycy4gKi8KLWNsYXNzIFR5
cGVOZWVkaW5nQ2FzdCA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKLXB1YmxpYzoKLSAgICBl
bnVtIHsKLSAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAotICAgICAgICBTdHJpbmdTZXQgPSAxIDw8
IDAsCi0gICAgICAgIE51bWJlclNldCA9IDEgPDwgMSwKLSAgICAgICAgQW5pbWFsc1NldCA9IDEg
PDwgMiwKLSAgICAgICAgSWRTZXQgPSAxIDw8IDMsCi0gICAgICAgIFRyZWVTZXQgPSAxIDw8IDQs
Ci0gICAgICAgIEFsbEZpZWxkc1NldCA9IChTdHJpbmdTZXQgfCBOdW1iZXJTZXQgfCBBbmltYWxz
U2V0IHwgSWRTZXQgfCBUcmVlU2V0KQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+
Ci0gICAgY2xhc3MgQnVpbGRlciB7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPEpTT046
Ok9iamVjdD4gbV9yZXN1bHQ7Ci0KLSAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8
U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
ICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgQnVpbGRlcihSZWY8LypUeXBlTmVlZGluZ0Nhc3QqL0pTT046Ok9iamVj
dD4mJiBvYmplY3QpCi0gICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKLSAg
ICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQs
IGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7Ci0gICAgICAgIH0KLSAgICAgICAg
ZnJpZW5kIGNsYXNzIFR5cGVOZWVkaW5nQ2FzdDsKLSAgICBwdWJsaWM6Ci0KLSAgICAgICAgQnVp
bGRlcjxTVEFURSB8IFN0cmluZ1NldD4mIHNldFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU3RyaW5nU2V0
KSwgcHJvcGVydHlfc3RyaW5nX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXRTdHJpbmcoInN0cmluZyJfcywgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0
ZTxTdHJpbmdTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTnVt
YmVyU2V0PiYgc2V0TnVtYmVyKGludCB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIE51bWJlclNldCksIHByb3BlcnR5X251bWJlcl9hbHJlYWR5
X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcigibnVtYmVyIl9zLCB2YWx1
ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE51bWJlclNldD4oKTsKLSAgICAgICAg
fQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBBbmltYWxzU2V0PiYgc2V0QW5pbWFscyhJbnNw
ZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzIHZhbHVlKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQW5pbWFsc1NldCksIHByb3BlcnR5
X2FuaW1hbHNfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygi
YW5pbWFscyJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25z
dGFudFZhbHVlKHZhbHVlKSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEFuaW1hbHNT
ZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgSWRTZXQ+JiBzZXRJ
ZChpbnQgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBJZFNldCksIHByb3BlcnR5X2lkX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXRJbnRlZ2VyKCJpZCJfcywgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxJZFNldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUcmVl
U2V0PiYgc2V0VHJlZShSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZl
T2JqZWN0MT4gdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBUcmVlU2V0KSwgcHJvcGVydHlfdHJlZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAg
ICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJ0cmVlIl9zLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPFRyZWVTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBSZWY8VHlwZU5l
ZWRpbmdDYXN0PiByZWxlYXNlKCkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKLSAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihUeXBlTmVlZGluZ0Nhc3QpID09IHNpemVvZihKU09O
OjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7Ci0KLSAgICAgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+
IGpzb25SZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOwotICAgICAgICAgICAgYXV0
byByZXN1bHQgPSBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxUeXBlTmVlZGluZ0Nhc3Q+
Kj4oJmpzb25SZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0K
LSAgICB9OwotCi0gICAgLyoKLSAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6Ci0gICAgICog
UmVmPFR5cGVOZWVkaW5nQ2FzdD4gcmVzdWx0ID0gVHlwZU5lZWRpbmdDYXN0OjpjcmVhdGUoKQot
ICAgICAqICAgICAuc2V0U3RyaW5nKC4uLikKLSAgICAgKiAgICAgLnNldE51bWJlciguLi4pCi0g
ICAgICogICAgIC5zZXRBbmltYWxzKC4uLikKLSAgICAgKiAgICAgLnNldElkKC4uLikKLSAgICAg
KiAgICAgLnNldFRyZWUoLi4uKQotICAgICAqICAgICAucmVsZWFzZSgpOwotICAgICAqLwotICAg
IHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOwotICAgIH0K
LX07Ci0KLS8qICAqLwotZW51bSBjbGFzcyBVbmNhc3RlZEFuaW1hbHMgewotICAgIFBpZ3MgPSA0
LAotICAgIENvd3MgPSA1LAotICAgIENhdHMgPSA2LAotICAgIEhlbnMgPSAxLAotfTsgLy8gZW51
bSBjbGFzcyBVbmNhc3RlZEFuaW1hbHMKLS8qICAqLwotZW51bSBjbGFzcyBDYXN0ZWRBbmltYWxz
IHsKLSAgICBEdWNrcyA9IDAsCi0gICAgSGVucyA9IDEsCi0gICAgQ3Jvd3MgPSAyLAotICAgIEZs
YW1pbmdvcyA9IDMsCi19OyAvLyBlbnVtIGNsYXNzIENhc3RlZEFuaW1hbHMKLWNsYXNzIFJlY3Vy
c2l2ZU9iamVjdDEgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7Ci1wdWJsaWM6Ci0gICAgZW51
bSB7Ci0gICAgICAgIE5vRmllbGRzU2V0ID0gMCwKLSAgICAgICAgQWxsRmllbGRzU2V0ID0gMAot
ICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+Ci0gICAgY2xhc3MgQnVpbGRlciB7Ci0g
ICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7Ci0KLSAg
ICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRl
KCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxk
ZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcihS
ZWY8LypSZWN1cnNpdmVPYmplY3QxKi9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQotICAgICAgICAg
ICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9u
X2luaXRfc3RhdGUpOwotICAgICAgICB9Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBSZWN1cnNpdmVP
YmplY3QxOwotICAgIHB1YmxpYzoKLQotICAgICAgICBSZWY8UmVjdXJzaXZlT2JqZWN0MT4gcmVs
ZWFzZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFs
bEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7Ci0gICAgICAgICAgICBDT01QSUxFX0FT
U0VSVChzaXplb2YoUmVjdXJzaXZlT2JqZWN0MSkgPT0gc2l6ZW9mKEpTT046Ok9iamVjdCksIGNh
bm5vdF9jYXN0KTsKLQotICAgICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4ganNvblJlc3VsdCA9
IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7Ci0gICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFdU
Rk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPFJlY3Vyc2l2ZU9iamVjdDE+Kj4oJmpzb25SZXN1
bHQpKTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICB9OwotCi0g
ICAgLyoKLSAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6Ci0gICAgICogUmVmPFJlY3Vyc2l2
ZU9iamVjdDE+IHJlc3VsdCA9IFJlY3Vyc2l2ZU9iamVjdDE6OmNyZWF0ZSgpCi0gICAgICogICAg
IC5yZWxlYXNlKCk7Ci0gICAgICovCi0gICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNy
ZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKSk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRPYmooUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDI+IHZhbHVlKQotICAgIHsKLSAg
ICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0T2JqZWN0KCJvYmoiX3MsIFdURk1vdmUodmFsdWUp
KTsKLSAgICB9Ci19OwotCi1jbGFzcyBSZWN1cnNpdmVPYmplY3QyIDogcHVibGljIEpTT046Ok9i
amVjdEJhc2UgewotcHVibGljOgotICAgIGVudW0gewotICAgICAgICBOb0ZpZWxkc1NldCA9IDAs
Ci0gICAgICAgIEFsbEZpZWxkc1NldCA9IDAKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8aW50IFNU
QVRFPgotICAgIGNsYXNzIEJ1aWxkZXIgewotICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0cjxK
U09OOjpPYmplY3Q+IG1fcmVzdWx0OwotCi0gICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWls
ZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXIoUmVmPC8qUmVjdXJzaXZlT2JqZWN0MiovSlNPTjo6
T2JqZWN0PiYmIG9iamVjdCkKLSAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3Qp
KQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxk
c1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKLSAgICAgICAgfQotICAg
ICAgICBmcmllbmQgY2xhc3MgUmVjdXJzaXZlT2JqZWN0MjsKLSAgICBwdWJsaWM6Ci0KLSAgICAg
ICAgUmVmPFJlY3Vyc2l2ZU9iamVjdDI+IHJlbGVhc2UoKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVh
ZHkpOwotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFJlY3Vyc2l2ZU9iamVjdDIp
ID09IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7Ci0KLSAgICAgICAgICAgIFJl
ZjxKU09OOjpPYmplY3Q+IGpzb25SZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOwot
ICAgICAgICAgICAgYXV0byByZXN1bHQgPSBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxS
ZWN1cnNpdmVPYmplY3QyPio+KCZqc29uUmVzdWx0KSk7Ci0gICAgICAgICAgICByZXR1cm4gcmVz
dWx0OwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIC8qCi0gICAgICogU3ludGhldGljIGNvbnN0
cnVjdG9yOgotICAgICAqIFJlZjxSZWN1cnNpdmVPYmplY3QyPiByZXN1bHQgPSBSZWN1cnNpdmVP
YmplY3QyOjpjcmVhdGUoKQotICAgICAqICAgICAucmVsZWFzZSgpOwotICAgICAqLwotICAgIHN0
YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOwotICAgIH0KLQot
ICAgIHZvaWQgc2V0T2JqKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNp
dmVPYmplY3QxPiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldE9i
amVjdCgib2JqIl9zLCBXVEZNb3ZlKHZhbHVlKSk7Ci0gICAgfQotfTsKLQotfSAvLyBUZXN0Ci0K
LXRlbXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVz
dDo6Q2FzdGVkQW5pbWFscz4gewotc3RhdGljIHZvaWQgYXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5
cGUoSlNPTjo6VmFsdWUqKTsKLX07Ci10ZW1wbGF0ZTw+IHN0cnVjdCBCaW5kaW5nVHJhaXRzPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD4gewotc3RhdGljIFJlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+IHJ1bnRpbWVDYXN0
KFJlZlB0cjxKU09OOjpWYWx1ZT4mJiB2YWx1ZSk7Ci1zdGF0aWMgdm9pZCBhc3NlcnRWYWx1ZUhh
c0V4cGVjdGVkVHlwZShKU09OOjpWYWx1ZSopOwotfTsKLXRlbXBsYXRlPD4gc3RydWN0IEJpbmRp
bmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT4gewot
c3RhdGljIHZvaWQgYXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSlNPTjo6VmFsdWUqKTsKLX07
Ci10ZW1wbGF0ZTw+IHN0cnVjdCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRl
c3Q6OlJlY3Vyc2l2ZU9iamVjdDI+IHsKLXN0YXRpYyB2b2lkIGFzc2VydFZhbHVlSGFzRXhwZWN0
ZWRUeXBlKEpTT046OlZhbHVlKik7Ci19OwotCi1uYW1lc3BhY2UgVGVzdEhlbHBlcnMgewotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBQcm90b2NvbEVudW1UeXBlPgotT3B0aW9uYWw8UHJvdG9jb2xFbnVt
VHlwZT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYpOwotCi0vLyBFbnVt
cyBpbiB0aGUgJ1Rlc3QnIERvbWFpbgotdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8
SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzPihjb25zdCBTdHJpbmcm
KTsKLXRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3Rl
ZEFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpU
ZXN0OjpDYXN0ZWRBbmltYWxzPihjb25zdCBTdHJpbmcmKTsKLQotfSAvLyBuYW1lc3BhY2UgVGVz
dEhlbHBlcnMKLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCi0KLW5hbWVzcGFjZSBXVEYgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
RGVmYXVsdEhhc2g7Ci0KLS8vIEhhc2ggZGVjbGFyYXRpb25zIGluIHRoZSAnVGVzdCcgRG9tYWlu
Ci10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVz
dDo6VW5jYXN0ZWRBbmltYWxzPiB7Ci0gICAgdHlwZWRlZiBJbnRIYXNoPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFscz4gSGFzaDsKLX07Ci10ZW1wbGF0ZTw+Ci1zdHJ1
Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz4g
ewotICAgIHR5cGVkZWYgSW50SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRB
bmltYWxzPiBIYXNoOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0jIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbE9iamVjdHMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0
cy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1y
dW50aW1lLWNhc3RzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMu
aCIKLQotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0K
LW5hbWVzcGFjZSBUZXN0SGVscGVycyB7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBlbnVt
X2NvbnN0YW50X3ZhbHVlc1tdID0gewotICAgICJEdWNrcyIsCi0gICAgIkhlbnMiLAotICAgICJD
cm93cyIsCi0gICAgIkZsYW1pbmdvcyIsCi0gICAgIlBpZ3MiLAotICAgICJDb3dzIiwKLSAgICAi
Q2F0cyIsCi19OwotCi1TdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsKLSAg
ICByZXR1cm4gZW51bV9jb25zdGFudF92YWx1ZXNbY29kZV07Ci19Ci0KLS8vIEVudW1zIGluIHRo
ZSAnVGVzdCcgRG9tYWluCi10ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29s
OjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0
b3I6OlByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM+KGNvbnN0IFN0cmluZyYgcHJvdG9j
b2xTdHJpbmcpCi17Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0g
ewotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5p
bWFsczo6UGlncywKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpV
bmNhc3RlZEFuaW1hbHM6OkNvd3MsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2Nv
bDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzOjpDYXRzLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rv
cjo6UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFsczo6SGVucywKLSAgICB9OwotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgNDsgKytpKQotICAgICAgICBpZiAocHJvdG9jb2xTdHJpbmcg
PT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNbaV1dKQotICAgICAgICAgICAg
cmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHMpY29uc3Rh
bnRWYWx1ZXNbaV07Ci0KLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi10ZW1wbGF0ZTw+
Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPiBwYXJz
ZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5p
bWFscz4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKLXsKLSAgICBzdGF0aWMgY29uc3Qg
c2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7Ci0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQ
cm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFsczo6RHVja3MsCi0gICAgICAgIChzaXplX3QpSW5z
cGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFsczo6SGVucywKLSAgICAgICAgKHNp
emVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzOjpDcm93cywKLSAg
ICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzOjpG
bGFtaW5nb3MsCi0gICAgfTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDQ7ICsraSkKLSAg
ICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50
VmFsdWVzW2ldXSkKLSAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVz
dDo6Q2FzdGVkQW5pbWFscyljb25zdGFudFZhbHVlc1tpXTsKLQotICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7Ci19Ci0KLQotfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKLQotCi0KLXZvaWQgQmlu
ZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPjo6YXNz
ZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSlNPTjo6VmFsdWUqIHZhbHVlKQotewotI2lmIEFTU0VS
VF9FTkFCTEVECi0gICAgQVNTRVJUX0FSRyh2YWx1ZSwgdmFsdWUpOwotICAgIFN0cmluZyByZXN1
bHQ7Ci0gICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdmFsdWUtPmFzU3RyaW5nKHJlc3VsdCk7Ci0g
ICAgQVNTRVJUKGNhc3RTdWNjZWVkZWQpOwotICAgIEFTU0VSVChyZXN1bHQgPT0gIkR1Y2tzIiB8
fCByZXN1bHQgPT0gIkhlbnMiIHx8IHJlc3VsdCA9PSAiQ3Jvd3MiIHx8IHJlc3VsdCA9PSAiRmxh
bWluZ29zIik7Ci0jZWxzZSAvLyBBU1NFUlRfRU5BQkxFRAotICAgIFVOVVNFRF9QQVJBTSh2YWx1
ZSk7Ci0jZW5kaWYgLy8gQVNTRVJUX0VOQUJMRUQKLX0KLQotdm9pZCBCaW5kaW5nVHJhaXRzPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD46OmFzc2VydFZhbHVlSGFz
RXhwZWN0ZWRUeXBlKEpTT046OlZhbHVlKiB2YWx1ZSkKLXsKLSNpZiBBU1NFUlRfRU5BQkxFRAot
ICAgIEFTU0VSVF9BUkcodmFsdWUsIHZhbHVlKTsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBv
YmplY3Q7Ci0gICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdmFsdWUtPmFzT2JqZWN0KG9iamVjdCk7
Ci0gICAgQVNTRVJUX1VOVVNFRChjYXN0U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsKLSAgICB7
Ci0gICAgICAgIGF1dG8gc3RyaW5nUG9zID0gb2JqZWN0LT5maW5kKCJzdHJpbmciX3MpOwotICAg
ICAgICBBU1NFUlQoc3RyaW5nUG9zICE9IG9iamVjdC0+ZW5kKCkpOwotICAgICAgICBCaW5kaW5n
VHJhaXRzPFN0cmluZz46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKHN0cmluZ1Bvcy0+dmFs
dWUuZ2V0KCkpOwotICAgIH0KLSAgICB7Ci0gICAgICAgIGF1dG8gbnVtYmVyUG9zID0gb2JqZWN0
LT5maW5kKCJudW1iZXIiX3MpOwotICAgICAgICBBU1NFUlQobnVtYmVyUG9zICE9IG9iamVjdC0+
ZW5kKCkpOwotICAgICAgICBCaW5kaW5nVHJhaXRzPGludD46OmFzc2VydFZhbHVlSGFzRXhwZWN0
ZWRUeXBlKG51bWJlclBvcy0+dmFsdWUuZ2V0KCkpOwotICAgIH0KLSAgICB7Ci0gICAgICAgIGF1
dG8gYW5pbWFsc1BvcyA9IG9iamVjdC0+ZmluZCgiYW5pbWFscyJfcyk7Ci0gICAgICAgIEFTU0VS
VChhbmltYWxzUG9zICE9IG9iamVjdC0+ZW5kKCkpOwotICAgICAgICBCaW5kaW5nVHJhaXRzPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+Ojphc3NlcnRWYWx1ZUhhc0V4
cGVjdGVkVHlwZShhbmltYWxzUG9zLT52YWx1ZS5nZXQoKSk7Ci0gICAgfQotICAgIHsKLSAgICAg
ICAgYXV0byBpZFBvcyA9IG9iamVjdC0+ZmluZCgiaWQiX3MpOwotICAgICAgICBBU1NFUlQoaWRQ
b3MgIT0gb2JqZWN0LT5lbmQoKSk7Ci0gICAgICAgIEJpbmRpbmdUcmFpdHM8aW50Pjo6YXNzZXJ0
VmFsdWVIYXNFeHBlY3RlZFR5cGUoaWRQb3MtPnZhbHVlLmdldCgpKTsKLSAgICB9Ci0gICAgewot
ICAgICAgICBhdXRvIHRyZWVQb3MgPSBvYmplY3QtPmZpbmQoInRyZWUiX3MpOwotICAgICAgICBB
U1NFUlQodHJlZVBvcyAhPSBvYmplY3QtPmVuZCgpKTsKLSAgICAgICAgQmluZGluZ1RyYWl0czxJ
bnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QxPjo6YXNzZXJ0VmFsdWVI
YXNFeHBlY3RlZFR5cGUodHJlZVBvcy0+dmFsdWUuZ2V0KCkpOwotICAgIH0KLQotICAgIGludCBm
b3VuZFByb3BlcnRpZXNDb3VudCA9IDU7Ci0gICAgaWYgKGZvdW5kUHJvcGVydGllc0NvdW50ICE9
IG9iamVjdC0+c2l6ZSgpKQotICAgICAgICBGQVRBTCgiVW5leHBlY3RlZCBwcm9wZXJ0aWVzIGlu
IG9iamVjdDogJXNcbiIsIG9iamVjdC0+dG9KU09OU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOwot
I2Vsc2UgLy8gQVNTRVJUX0VOQUJMRUQKLSAgICBVTlVTRURfUEFSQU0odmFsdWUpOwotI2VuZGlm
IC8vIEFTU0VSVF9FTkFCTEVECi19Ci0KLVJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0
OjpUeXBlTmVlZGluZ0Nhc3Q+IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVz
dDo6VHlwZU5lZWRpbmdDYXN0Pjo6cnVudGltZUNhc3QoUmVmUHRyPEpTT046OlZhbHVlPiYmIHZh
bHVlKQotewotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHJlc3VsdDsKLSAgICBib29sIGNhc3RT
dWNjZWVkZWQgPSB2YWx1ZS0+YXNPYmplY3QocmVzdWx0KTsKLSAgICBBU1NFUlRfVU5VU0VEKGNh
c3RTdWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQpOwotICAgIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9y
OjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3Rl
ZFR5cGUocmVzdWx0LmdldCgpKTsKLSAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoSW5zcGVjdG9y
OjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0KSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0
QmFzZSksIHR5cGVfY2FzdF9wcm9ibGVtKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SW5zcGVj
dG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0Kj4oc3RhdGljX2Nhc3Q8SlNPTjo6
T2JqZWN0QmFzZSo+KHJlc3VsdC5nZXQoKSkpOwotfQotCi0KLXZvaWQgQmluZGluZ1RyYWl0czxJ
bnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QxPjo6YXNzZXJ0VmFsdWVI
YXNFeHBlY3RlZFR5cGUoSlNPTjo6VmFsdWUqIHZhbHVlKQotewotI2lmIEFTU0VSVF9FTkFCTEVE
Ci0gICAgQVNTRVJUX0FSRyh2YWx1ZSwgdmFsdWUpOwotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+
IG9iamVjdDsKLSAgICBib29sIGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNPYmplY3Qob2JqZWN0
KTsKLSAgICBBU1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQpOwotCi0g
ICAgaW50IGZvdW5kUHJvcGVydGllc0NvdW50ID0gMDsKLSAgICB7Ci0gICAgICAgIGF1dG8gb2Jq
UG9zID0gb2JqZWN0LT5maW5kKCJvYmoiX3MpOwotICAgICAgICBpZiAob2JqUG9zICE9IG9iamVj
dC0+ZW5kKCkpIHsKLSAgICAgICAgICAgIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0Mj46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKG9i
alBvcy0+dmFsdWUuZ2V0KCkpOwotICAgICAgICAgICAgKytmb3VuZFByb3BlcnRpZXNDb3VudDsK
LSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoZm91bmRQcm9wZXJ0aWVzQ291bnQgIT0gb2JqZWN0
LT5zaXplKCkpCi0gICAgICAgIEZBVEFMKCJVbmV4cGVjdGVkIHByb3BlcnRpZXMgaW4gb2JqZWN0
OiAlc1xuIiwgb2JqZWN0LT50b0pTT05TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7Ci0jZWxzZSAv
LyBBU1NFUlRfRU5BQkxFRAotICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7Ci0jZW5kaWYgLy8gQVNT
RVJUX0VOQUJMRUQKLX0KLQotdm9pZCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDI+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShKU09O
OjpWYWx1ZSogdmFsdWUpCi17Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBBU1NFUlRfQVJHKHZh
bHVlLCB2YWx1ZSk7Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gb2JqZWN0OwotICAgIGJvb2wg
Y2FzdFN1Y2NlZWRlZCA9IHZhbHVlLT5hc09iamVjdChvYmplY3QpOwotICAgIEFTU0VSVF9VTlVT
RUQoY2FzdFN1Y2NlZWRlZCwgY2FzdFN1Y2NlZWRlZCk7Ci0KLSAgICBpbnQgZm91bmRQcm9wZXJ0
aWVzQ291bnQgPSAwOwotICAgIHsKLSAgICAgICAgYXV0byBvYmpQb3MgPSBvYmplY3QtPmZpbmQo
Im9iaiJfcyk7Ci0gICAgICAgIGlmIChvYmpQb3MgIT0gb2JqZWN0LT5lbmQoKSkgewotICAgICAg
ICAgICAgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVP
YmplY3QxPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUob2JqUG9zLT52YWx1ZS5nZXQoKSk7
Ci0gICAgICAgICAgICArK2ZvdW5kUHJvcGVydGllc0NvdW50OwotICAgICAgICB9Ci0gICAgfQot
ICAgIGlmIChmb3VuZFByb3BlcnRpZXNDb3VudCAhPSBvYmplY3QtPnNpemUoKSkKLSAgICAgICAg
RkFUQUwoIlVuZXhwZWN0ZWQgcHJvcGVydGllcyBpbiBvYmplY3Q6ICVzXG4iLCBvYmplY3QtPnRv
SlNPTlN0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKLSNlbHNlIC8vIEFTU0VSVF9FTkFCTEVECi0g
ICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKLSNlbmRpZiAvLyBBU1NFUlRfRU5BQkxFRAotfQotCi19
IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRh
aW5QdHIuaD4KLQotCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLX0gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVy
cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0K
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1l
LWNhc3RzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hl
cnMuaCIKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW5jbHVkZSAiVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4K
LQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0j
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rv
ci9UZXN0UHJvdG9jb2wuaD4KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQi
KSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAotQGVu
ZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90
b2NvbENvbmZpZ3VyYXRpb24uaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIK
LSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KLSNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW1w
b3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLQotdXNp
bmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENv
bmZpZ3VyYXRpb24KLXsKLSAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250
cm9sbGVyOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50
YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVy
IGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQo
Y29udHJvbGxlcik7Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVybiBz
ZWxmOwotfQotCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0K
LUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLQot
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAi
VGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLmgiCi0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2Ug
SW5zcGVjdG9yOwotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVy
cy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8Rm91bmRhdGlv
bi9Gb3VuZGF0aW9uLmg+Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05P
YmplY3QuaD4KLQotCi1AY2xhc3MgVGVzdFByb3RvY29sVGVzdFR5cGVOZWVkaW5nQ2FzdDsKLUBj
bGFzcyBUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MTsKLUBjbGFzcyBUZXN0UHJvdG9j
b2xUZXN0UmVjdXJzaXZlT2JqZWN0MjsKLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVz
dFByb3RvY29sUGxhdGZvcm0pIHsKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbCwKLSAgICBU
ZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWMsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1JT1Ms
Ci0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUywKLX07Ci0KLQotdHlwZWRlZiBOU19FTlVN
KE5TSW50ZWdlciwgVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFscykgewotICAgIFRlc3RQ
cm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHNQaWdzLAotICAgIFRlc3RQcm90b2NvbFRlc3RVbmNh
c3RlZEFuaW1hbHNDb3dzLAotICAgIFRlc3RQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHNDYXRz
LAotICAgIFRlc3RQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHNIZW5zLAotfTsKLQotdHlwZWRl
ZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHMpIHsKLSAg
ICBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFsc0R1Y2tzLAotICAgIFRlc3RQcm90b2NvbFRl
c3RDYXN0ZWRBbmltYWxzSGVucywKLSAgICBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFsc0Ny
b3dzLAotICAgIFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzRmxhbWluZ29zLAotfTsKLQot
Ci1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVz
dFByb3RvY29sVGVzdFR5cGVOZWVkaW5nQ2FzdCA6IFJXSVByb3RvY29sSlNPTk9iamVjdAotLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlk
PiAqKXBheWxvYWQ7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0
aFN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcgbnVtYmVyOihpbnQpbnVtYmVyIGFuaW1hbHM6KFRl
c3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzKWFuaW1hbHMgaWRlbnRpZmllcjooaW50KWlkZW50
aWZpZXIgdHJlZTooVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgKil0cmVlOwotLyog
cmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICpzdHJpbmc7
Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQgbnVtYmVy
OwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgVGVzdFByb3Rv
Y29sVGVzdENhc3RlZEFuaW1hbHMgYW5pbWFsczsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAo
bm9uYXRvbWljLCBhc3NpZ24pIGludCBpZGVudGlmaWVyOwotLyogcmVxdWlyZWQgKi8gQHByb3Bl
cnR5IChub25hdG9taWMsIHJldGFpbikgVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEg
KnRyZWU7Ci1AZW5kCi0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQot
QGludGVyZmFjZSBUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSA6IFJXSVByb3RvY29s
SlNPTk9iamVjdAotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5
PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQ7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm90
b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKLS8qIG9wdGlv
bmFsICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIFRlc3RQcm90b2NvbFRlc3RSZWN1
cnNpdmVPYmplY3QyICpvYmo7Ci1AZW5kCi0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJk
ZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MiA6
IFJXSVByb3RvY29sSlNPTk9iamVjdAotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoo
TlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQ7Ci0tIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhQcm90b2NvbE9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVj
dDsKLS8qIG9wdGlvbmFsICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIFRlc3RQcm90
b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxICpvYmo7Ci1AZW5kCi0KLQotCi0KLQotCi0jaW1wb3J0
IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+Ci0K
LSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbEludGVybmFsLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJl
cXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJv
dG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVu
dGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgot
Ci0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2Nv
bC5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5o
PgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1U
eXBlPgotT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3Ry
aW5nJiB2YWx1ZSk7Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9j
b2xQbGF0Zm9ybSB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQ
cm90b2NvbFBsYXRmb3JtQWxsOgotICAgICAgICByZXR1cm4gImFsbCJfczsKLSAgICBjYXNlIFRl
c3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzoKLSAgICAgICAgcmV0dXJuICJnZW5lcmljIl9zOwot
ICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1JT1M6Ci0gICAgICAgIHJldHVybiAiaW9zIl9z
OwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzoKLSAgICAgICAgcmV0dXJuICJt
YWNvcyJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJv
dG9jb2xQbGF0Zm9ybT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17
Ci0gICAgaWYgKHZhbHVlID09ICJhbGwiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxh
dGZvcm1BbGw7Ci0gICAgaWYgKHZhbHVlID09ICJnZW5lcmljIikKLSAgICAgICAgcmV0dXJuIFRl
c3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzsKLSAgICBpZiAodmFsdWUgPT0gImlvcyIpCi0gICAg
ICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzsKLSAgICBpZiAodmFsdWUgPT0gIm1h
Y29zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M7Ci0gICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmco
VGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFscyB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFs
dWUpIHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHNQaWdzOgotICAg
ICAgICByZXR1cm4gIlBpZ3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRB
bmltYWxzQ293czoKLSAgICAgICAgcmV0dXJuICJDb3dzIl9zOwotICAgIGNhc2UgVGVzdFByb3Rv
Y29sVGVzdFVuY2FzdGVkQW5pbWFsc0NhdHM6Ci0gICAgICAgIHJldHVybiAiQ2F0cyJfczsKLSAg
ICBjYXNlIFRlc3RQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHNIZW5zOgotICAgICAgICByZXR1
cm4gIkhlbnMiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVz
dFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFscz4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0
cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJQaWdzIikKLSAgICAgICAgcmV0dXJu
IFRlc3RQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHNQaWdzOwotICAgIGlmICh2YWx1ZSA9PSAi
Q293cyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzQ293
czsKLSAgICBpZiAodmFsdWUgPT0gIkNhdHMiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29s
VGVzdFVuY2FzdGVkQW5pbWFsc0NhdHM7Ci0gICAgaWYgKHZhbHVlID09ICJIZW5zIikKLSAgICAg
ICAgcmV0dXJuIFRlc3RQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHNIZW5zOwotICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7Ci19Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0
UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFscyB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsK
LSAgICBjYXNlIFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzRHVja3M6Ci0gICAgICAgIHJl
dHVybiAiRHVja3MiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFsc0hl
bnM6Ci0gICAgICAgIHJldHVybiAiSGVucyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFRlc3RD
YXN0ZWRBbmltYWxzQ3Jvd3M6Ci0gICAgICAgIHJldHVybiAiQ3Jvd3MiX3M7Ci0gICAgY2FzZSBU
ZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFsc0ZsYW1pbmdvczoKLSAgICAgICAgcmV0dXJuICJG
bGFtaW5nb3MiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgT3B0aW9uYWw8VGVz
dFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHM+IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJp
bmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiRHVja3MiKQotICAgICAgICByZXR1cm4g
VGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHNEdWNrczsKLSAgICBpZiAodmFsdWUgPT0gIkhl
bnMiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHNIZW5zOwot
ICAgIGlmICh2YWx1ZSA9PSAiQ3Jvd3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sVGVz
dENhc3RlZEFuaW1hbHNDcm93czsKLSAgICBpZiAodmFsdWUgPT0gIkZsYW1pbmdvcyIpCi0gICAg
ICAgIHJldHVybiBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFsc0ZsYW1pbmdvczsKLSAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucy5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRl
c3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2Nv
bEpTT05PYmplY3RQcml2YXRlLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBp
bnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChUZXN0RG9tYWluKQotCi0rICh2
b2lkKV9wYXJzZVR5cGVOZWVkaW5nQ2FzdDooVGVzdFByb3RvY29sVGVzdFR5cGVOZWVkaW5nQ2Fz
dCAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLSsgKHZvaWQpX3BhcnNlQ2Fz
dGVkT2JqZWN0SWQ6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2Fk
OwotKyAodm9pZClfcGFyc2VVbmNhc3RlZE9iamVjdElkOihOU051bWJlciAqKilvdXRWYWx1ZSBm
cm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLSsgKHZvaWQpX3BhcnNlVW5jYXN0ZWRBbmltYWxzOihO
U051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLSsgKHZvaWQpX3Bh
cnNlQ2FzdGVkQW5pbWFsczooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBh
eWxvYWQ7Ci0rICh2b2lkKV9wYXJzZVJlY3Vyc2l2ZU9iamVjdDE6KFRlc3RQcm90b2NvbFRlc3RS
ZWN1cnNpdmVPYmplY3QxICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotKyAo
dm9pZClfcGFyc2VSZWN1cnNpdmVPYmplY3QyOihUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2Jq
ZWN0MiAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLQotQGVuZAotCi1AaW1w
bGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChUZXN0RG9tYWluKQotCi0r
ICh2b2lkKV9wYXJzZVR5cGVOZWVkaW5nQ2FzdDooVGVzdFByb3RvY29sVGVzdFR5cGVOZWVkaW5n
Q2FzdCAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOwotICAg
ICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sVGVzdFR5cGVOZWVkaW5nQ2FzdCBhbGxvY10gaW5p
dFdpdGhQYXlsb2FkOnBheWxvYWRdOwotfQotCi0rICh2b2lkKV9wYXJzZUNhc3RlZE9iamVjdElk
OihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TTnVtYmVyIGNsYXNzXSk7Ci0g
ICAgKm91dFZhbHVlID0gKE5TTnVtYmVyICopcGF5bG9hZDsKLX0KLQotKyAodm9pZClfcGFyc2VV
bmNhc3RlZE9iamVjdElkOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5
bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TTnVt
YmVyIGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gKE5TTnVtYmVyICopcGF5bG9hZDsKLX0KLQot
KyAodm9pZClfcGFyc2VVbmNhc3RlZEFuaW1hbHM6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21Q
YXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShw
YXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKLSAgICBPcHRpb25hbDxUZXN0UHJvdG9jb2xUZXN0
VW5jYXN0ZWRBbmltYWxzPiByZXN1bHQgPSBJbnNwZWN0b3I6OmZyb21Qcm90b2NvbFN0cmluZzxU
ZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzPihwYXlsb2FkKTsKLSAgICBUSFJPV19FWENF
UFRJT05fRk9SX0JBRF9FTlVNX1ZBTFVFKHJlc3VsdCwgQCJVbmNhc3RlZEFuaW1hbHMiKTsKLSAg
ICAqb3V0VmFsdWUgPSBAKHJlc3VsdC52YWx1ZSgpKTsKLX0KLQotKyAodm9pZClfcGFyc2VDYXN0
ZWRBbmltYWxzOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAot
ewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TU3RyaW5nIGNs
YXNzXSk7Ci0gICAgT3B0aW9uYWw8VGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHM+IHJlc3Vs
dCA9IEluc3BlY3Rvcjo6ZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRB
bmltYWxzPihwYXlsb2FkKTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9FTlVNX1ZBTFVF
KHJlc3VsdCwgQCJDYXN0ZWRBbmltYWxzIik7Ci0gICAgKm91dFZhbHVlID0gQChyZXN1bHQudmFs
dWUoKSk7Ci19Ci0KLSsgKHZvaWQpX3BhcnNlUmVjdXJzaXZlT2JqZWN0MTooVGVzdFByb3RvY29s
VGVzdFJlY3Vyc2l2ZU9iamVjdDEgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQK
LXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25h
cnkgY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVP
YmplY3QxIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07Ci19Ci0KLSsgKHZvaWQpX3Bh
cnNlUmVjdXJzaXZlT2JqZWN0MjooVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDIgKiop
b3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05f
Rk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKLSAgICAqb3V0VmFs
dWUgPSBbW1Rlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QyIGFsbG9jXSBpbml0V2l0aFBh
eWxvYWQ6cGF5bG9hZF07Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMu
bW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50
aW1lLWNhc3RzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xK
U09OT2JqZWN0UHJpdmF0ZS5oPgotI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQg
PHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotQGlt
cGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFRlc3RUeXBlTmVlZGluZ0Nhc3QKLQotLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwg
aWQ+ICopcGF5bG9hZAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAg
ICByZXR1cm4gbmlsOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJU
WShwYXlsb2FkW0Aic3RyaW5nIl0sIEAic3RyaW5nIik7Ci0gICAgc2VsZi5zdHJpbmcgPSBwYXls
b2FkW0Aic3RyaW5nIl07Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BF
UlRZKHBheWxvYWRbQCJudW1iZXIiXSwgQCJudW1iZXIiKTsKLSAgICBzZWxmLm51bWJlciA9IFtw
YXlsb2FkW0AibnVtYmVyIl0gaW50ZWdlclZhbHVlXTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImFuaW1hbHMiXSwgQCJhbmltYWxzIik7Ci0g
ICAgT3B0aW9uYWw8VGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHM+IGFuaW1hbHMgPSBmcm9t
UHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHM+KHBheWxvYWRbQCJh
bmltYWxzIl0pOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX0VOVU1fVkFMVUUoYW5pbWFs
cywgQCJhbmltYWxzIik7Ci0gICAgc2VsZi5hbmltYWxzID0gYW5pbWFscy52YWx1ZSgpOwotCi0g
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiaWQiXSwg
QCJpZCIpOwotICAgIHNlbGYuaWRlbnRpZmllciA9IFtwYXlsb2FkW0AiaWQiXSBpbnRlZ2VyVmFs
dWVdOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2Fk
W0AidHJlZSJdLCBAInRyZWUiKTsKLSAgICBzZWxmLnRyZWUgPSBbW1Rlc3RQcm90b2NvbFRlc3RS
ZWN1cnNpdmVPYmplY3QxIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZFtAInRyZWUiXV07
Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29s
T2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilvYmplY3QKLXsKLSAgICBpZiAoIShzZWxm
ID0gW3N1cGVyIGluaXRXaXRoSlNPTk9iamVjdDpbb2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0KCld
KSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nIG51bWJlcjooaW50KW51
bWJlciBhbmltYWxzOihUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFscylhbmltYWxzIGlkZW50
aWZpZXI6KGludClpZGVudGlmaWVyIHRyZWU6KFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmpl
Y3QxICopdHJlZQotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICBy
ZXR1cm4gbmlsOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShz
dHJpbmcsIEAic3RyaW5nIik7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9Q
RVJUWSh0cmVlLCBAInRyZWUiKTsKLQotICAgIHNlbGYuc3RyaW5nID0gc3RyaW5nOwotICAgIHNl
bGYubnVtYmVyID0gbnVtYmVyOwotICAgIHNlbGYuYW5pbWFscyA9IGFuaW1hbHM7Ci0gICAgc2Vs
Zi5pZGVudGlmaWVyID0gaWRlbnRpZmllcjsKLSAgICBzZWxmLnRyZWUgPSB0cmVlOwotCi0gICAg
cmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpc2V0U3RyaW5nOihOU1N0cmluZyAqKXN0cmluZwot
ewotICAgIFtzdXBlciBzZXRTdHJpbmc6c3RyaW5nIGZvcktleTpAInN0cmluZyJdOwotfQotCi0t
IChOU1N0cmluZyAqKXN0cmluZwotewotICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAi
c3RyaW5nIl07Ci19Ci0KLS0gKHZvaWQpc2V0TnVtYmVyOihpbnQpbnVtYmVyCi17Ci0gICAgW3N1
cGVyIHNldEludGVnZXI6bnVtYmVyIGZvcktleTpAIm51bWJlciJdOwotfQotCi0tIChpbnQpbnVt
YmVyCi17Ci0gICAgcmV0dXJuIFtzdXBlciBpbnRlZ2VyRm9yS2V5OkAibnVtYmVyIl07Ci19Ci0K
LS0gKHZvaWQpc2V0QW5pbWFsczooVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHMpYW5pbWFs
cwotewotICAgIFtzdXBlciBzZXRTdHJpbmc6dG9Qcm90b2NvbFN0cmluZyhhbmltYWxzKSBmb3JL
ZXk6QCJhbmltYWxzIl07Ci19Ci0KLS0gKFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzKWFu
aW1hbHMKLXsKLSAgICByZXR1cm4gZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbFRlc3RD
YXN0ZWRBbmltYWxzPihbc3VwZXIgc3RyaW5nRm9yS2V5OkAiYW5pbWFscyJdKS52YWx1ZSgpOwot
fQotCi0tICh2b2lkKXNldElkZW50aWZpZXI6KGludClpZGVudGlmaWVyCi17Ci0gICAgW3N1cGVy
IHNldEludGVnZXI6aWRlbnRpZmllciBmb3JLZXk6QCJpZCJdOwotfQotCi0tIChpbnQpaWRlbnRp
ZmllcgotewotICAgIHJldHVybiBbc3VwZXIgaW50ZWdlckZvcktleTpAImlkIl07Ci19Ci0KLS0g
KHZvaWQpc2V0VHJlZTooVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgKil0cmVlCi17
Ci0gICAgW3N1cGVyIHNldE9iamVjdDp0cmVlIGZvcktleTpAInRyZWUiXTsKLX0KLQotLSAoVGVz
dFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgKil0cmVlCi17Ci0gICAgUldJUHJvdG9jb2xK
U09OT2JqZWN0ICpvYmplY3QgPSBbc3VwZXIgb2JqZWN0Rm9yS2V5OkAidHJlZSJdOwotICAgIGlm
ICghb2JqZWN0KQotICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiBbW1Rlc3RQcm90b2Nv
bFRlc3RSZWN1cnNpdmVPYmplY3QxIGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6W1tzdXBlciBv
YmplY3RGb3JLZXk6QCJ0cmVlIl0gdG9KU09OT2JqZWN0XS5nZXQoKV07Ci19Ci0KLUBlbmQKLQot
QGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxCi0KLS0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5n
ICosIGlkPiAqKXBheWxvYWQKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAg
ICAgICAgcmV0dXJuIG5pbDsKLQotICAgIHNlbGYub2JqID0gW1tUZXN0UHJvdG9jb2xUZXN0UmVj
dXJzaXZlT2JqZWN0MiBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRbQCJvYmoiXV07Ci0K
LSAgICByZXR1cm4gc2VsZjsKLX0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2Jq
ZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilvYmplY3QKLXsKLSAgICBpZiAoIShzZWxmID0g
W3N1cGVyIGluaXRXaXRoSlNPTk9iamVjdDpbb2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0KCldKSkK
LSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKXNl
dE9iajooVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDIgKilvYmoKLXsKLSAgICBbc3Vw
ZXIgc2V0T2JqZWN0Om9iaiBmb3JLZXk6QCJvYmoiXTsKLX0KLQotLSAoVGVzdFByb3RvY29sVGVz
dFJlY3Vyc2l2ZU9iamVjdDIgKilvYmoKLXsKLSAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9i
amVjdCA9IFtzdXBlciBvYmplY3RGb3JLZXk6QCJvYmoiXTsKLSAgICBpZiAoIW9iamVjdCkKLSAg
ICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4gW1tUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZl
T2JqZWN0MiBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0Oltbc3VwZXIgb2JqZWN0Rm9yS2V5OkAi
b2JqIl0gdG9KU09OT2JqZWN0XS5nZXQoKV07Ci19Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9u
IFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QyCi0KLS0gKGluc3RhbmNldHlwZSlpbml0
V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxv
YWQKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5p
bDsKLQotICAgIHNlbGYub2JqID0gW1tUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSBh
bGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRbQCJvYmoiXV07Ci0KLSAgICByZXR1cm4gc2Vs
ZjsKLX0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2Nv
bEpTT05PYmplY3QgKilvYmplY3QKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRo
SlNPTk9iamVjdDpbb2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0KCldKSkKLSAgICAgICAgcmV0dXJu
IG5pbDsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKXNldE9iajooVGVzdFByb3Rv
Y29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgKilvYmoKLXsKLSAgICBbc3VwZXIgc2V0T2JqZWN0Om9i
aiBmb3JLZXk6QCJvYmoiXTsKLX0KLQotLSAoVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVj
dDEgKilvYmoKLXsKLSAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9iamVjdCA9IFtzdXBlciBv
YmplY3RGb3JLZXk6QCJvYmoiXTsKLSAgICBpZiAoIW9iamVjdCkKLSAgICAgICAgcmV0dXJuIG5p
bDsKLSAgICByZXR1cm4gW1tUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSBhbGxvY10g
aW5pdFdpdGhKU09OT2JqZWN0Oltbc3VwZXIgb2JqZWN0Rm9yS2V5OkAib2JqIl0gdG9KU09OT2Jq
ZWN0XS5nZXQoKV07Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5
cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC90eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24t
cmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvZXhwZWN0ZWQvdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uLXJlc3VsdApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTQzMGVkZTUwOGJiNWM4MWQ3NmQ0OTk0YTI3MGQx
MTIwNzc5NTFjNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9l
eHBlY3RlZC90eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0CisrKyAvZGV2L251
bGwKQEAgLTEsMTE2NCArMCwwIEBACi0jIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENv
bW1hbmRzLmpzCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRoLW9w
ZW4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0jIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0j
aWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0KLSNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xUeXBlcy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJv
bnRlbmRSb3V0ZXIuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRj
aGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERp
c3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9Ci0gICAgQmFja2VuZERpc3BhdGNoZXIq
IGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5n
ZXQoKTsgfQotcHJpdmF0ZToKLSAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2Vu
ZERpc3BhdGNoZXI7Ci19OwotCi0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotI2Vu
ZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotIyMjIEVuZCBG
aWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90
b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKLQotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KLQotCi19IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVy
cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3
dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQotI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMu
aCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLX0gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0j
aW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVz
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0
b3IgewotCi1jbGFzcyBGcm9udGVuZFJvdXRlcjsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
Ci0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0K
LSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSB0eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi1uYW1lc3BhY2UgUHJvdG9jb2wg
ewotCi0KLQotLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCi1uYW1lc3BhY2UgVGVzdCB7Ci1jbGFz
cyBOb09wZW5QYXJhbWV0ZXJzOwotY2xhc3MgT3BlblBhcmFtZXRlcnM7Ci19IC8vIFRlc3QKLS8v
IEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KLQotCi0KLQotbmFtZXNwYWNlIFRlc3Qgewot
Y2xhc3MgTm9PcGVuUGFyYW1ldGVycyA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKLXB1Ymxp
YzoKLSAgICBlbnVtIHsKLSAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAotICAgICAgICBPbmVTZXQg
PSAxIDw8IDAsCi0gICAgICAgIFR3b1NldCA9IDEgPDwgMSwKLSAgICAgICAgQWxsRmllbGRzU2V0
ID0gKE9uZVNldCB8IFR3b1NldCkKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8aW50IFNUQVRFPgot
ICAgIGNsYXNzIEJ1aWxkZXIgewotICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0cjxKU09OOjpP
YmplY3Q+IG1fcmVzdWx0OwotCi0gICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNU
QVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAq
cmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKLSAgICAgICAg
fQotCi0gICAgICAgIEJ1aWxkZXIoUmVmPC8qTm9PcGVuUGFyYW1ldGVycyovSlNPTjo6T2JqZWN0
PiYmIG9iamVjdCkKLSAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwg
YnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKLSAgICAgICAgfQotICAgICAgICBm
cmllbmQgY2xhc3MgTm9PcGVuUGFyYW1ldGVyczsKLSAgICBwdWJsaWM6Ci0KLSAgICAgICAgQnVp
bGRlcjxTVEFURSB8IE9uZVNldD4mIHNldE9uZShkb3VibGUgdmFsdWUpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBPbmVTZXQpLCBwcm9wZXJ0eV9vbmVf
YWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldERvdWJsZSgib25lIl9zLCB2
YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE9uZVNldD4oKTsKLSAgICAgICAg
fQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUd29TZXQ+JiBzZXRUd28oZG91YmxlIHZhbHVl
KQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVHdvU2V0
KSwgcHJvcGVydHlfdHdvX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRE
b3VibGUoInR3byJfcywgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUd29T
ZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBSZWY8Tm9PcGVuUGFyYW1ldGVycz4gcmVsZWFz
ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZp
ZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VS
VChzaXplb2YoTm9PcGVuUGFyYW1ldGVycykgPT0gc2l6ZW9mKEpTT046Ok9iamVjdCksIGNhbm5v
dF9jYXN0KTsKLQotICAgICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4ganNvblJlc3VsdCA9IG1f
cmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7Ci0gICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFdURk1v
dmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPE5vT3BlblBhcmFtZXRlcnM+Kj4oJmpzb25SZXN1bHQp
KTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAg
LyoKLSAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6Ci0gICAgICogUmVmPE5vT3BlblBhcmFt
ZXRlcnM+IHJlc3VsdCA9IE5vT3BlblBhcmFtZXRlcnM6OmNyZWF0ZSgpCi0gICAgICogICAgIC5z
ZXRPbmUoLi4uKQotICAgICAqICAgICAuc2V0VHdvKC4uLikKLSAgICAgKiAgICAgLnJlbGVhc2Uo
KTsKLSAgICAgKi8KLSAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpKTsKLSAgICB9Ci19OwotCi1jbGFzcyBPcGVuUGFyYW1ldGVycyA6IHB1YmxpYyBKU09O
OjpPYmplY3QgewotcHVibGljOgotICAgIGVudW0gewotICAgICAgICBOb0ZpZWxkc1NldCA9IDAs
Ci0gICAgICAgIEFscGhhU2V0ID0gMSA8PCAwLAotICAgICAgICBCZXRhU2V0ID0gMSA8PCAxLAot
ICAgICAgICBBbGxGaWVsZHNTZXQgPSAoQWxwaGFTZXQgfCBCZXRhU2V0KQotICAgIH07Ci0KLSAg
ICB0ZW1wbGF0ZTxpbnQgU1RBVEU+Ci0gICAgY2xhc3MgQnVpbGRlciB7Ci0gICAgcHJpdmF0ZToK
LSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7Ci0KLSAgICAgICAgdGVtcGxh
dGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBT
VEVQPio+KHRoaXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcihSZWY8LypPcGVuUGFy
YW1ldGVycyovSlNPTjo6T2JqZWN0PiYmIG9iamVjdCkKLSAgICAgICAgICAgIDogbV9yZXN1bHQo
V1RGTW92ZShvYmplY3QpKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChT
VEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsK
LSAgICAgICAgfQotICAgICAgICBmcmllbmQgY2xhc3MgT3BlblBhcmFtZXRlcnM7Ci0gICAgcHVi
bGljOgotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBBbHBoYVNldD4mIHNldEFscGhhKGRvdWJs
ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IEFscGhhU2V0KSwgcHJvcGVydHlfYWxwaGFfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldERvdWJsZSgiYWxwaGEiX3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8QWxwaGFTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgQmV0YVNldD4mIHNldEJldGEoZG91YmxlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQmV0YVNldCksIHByb3BlcnR5X2JldGFfYWxyZWFk
eV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldERvdWJsZSgiYmV0YSJfcywgdmFsdWUp
OwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxCZXRhU2V0PigpOwotICAgICAgICB9Ci0K
LSAgICAgICAgUmVmPE9wZW5QYXJhbWV0ZXJzPiByZWxlYXNlKCkKLSAgICAgICAgewotICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90
X3JlYWR5KTsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihPcGVuUGFyYW1ldGVy
cykgPT0gc2l6ZW9mKEpTT046Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsKLQotICAgICAgICAgICAg
UmVmPEpTT046Ok9iamVjdD4ganNvblJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7
Ci0gICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVm
PE9wZW5QYXJhbWV0ZXJzPio+KCZqc29uUmVzdWx0KSk7Ci0gICAgICAgICAgICByZXR1cm4gcmVz
dWx0OwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIC8qCi0gICAgICogU3ludGhldGljIGNvbnN0
cnVjdG9yOgotICAgICAqIFJlZjxPcGVuUGFyYW1ldGVycz4gcmVzdWx0ID0gT3BlblBhcmFtZXRl
cnM6OmNyZWF0ZSgpCi0gICAgICogICAgIC5zZXRBbHBoYSguLi4pCi0gICAgICogICAgIC5zZXRC
ZXRhKC4uLikKLSAgICAgKiAgICAgLnJlbGVhc2UoKTsKLSAgICAgKi8KLSAgICBzdGF0aWMgQnVp
bGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBCdWlsZGVy
PE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKLSAgICB9Ci0KLSAgICAvLyBQ
cm9wZXJ0eSBuYW1lcyBmb3IgdHlwZSBnZW5lcmF0ZWQgYXMgb3Blbi4KLSAgICBOb25lIHN0YXRp
YyBjb25zdCBjaGFyKiBBbHBoYTsKLX07Ci0KLX0gLy8gVGVzdAotCi0KLQotfSAvLyBuYW1lc3Bh
Y2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbE9iamVjdHMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0
cy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXdpdGgtb3Blbi1w
YXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIK
LQotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLWNv
bnN0IGNoYXIqIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6Ok9wZW5QYXJhbWV0ZXJzOjpBbHBo
YSA9ICJhbHBoYSI7Ci0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0KLSMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW5j
bHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi0KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQot
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFj
a2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmRE
aXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtd2l0
aC1vcGVuLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tl
bmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNp
bmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbmNsdWRlIDx3dGYvSlNP
TlZhbHVlcy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1t
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8V2Vi
SW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgi
ZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2Jq
ZWN0Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgK
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVz
dFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5h
bC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgotI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4K
LSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgot
Ci11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3Rv
Y29sQ29uZmlndXJhdGlvbgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciog
X2NvbnRyb2xsZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1
Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBb
c3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFT
U0VSVChjb250cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0
dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAgIFtzdXBlciBkZWFsbG9jXTsK
LX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5t
bQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMu
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0
ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMuaCIKLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFj
ZSBJbnNwZWN0b3I7Ci0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNo
ZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxGb3VuZGF0aW9u
L0ZvdW5kYXRpb24uaD4KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9i
amVjdC5oPgotCi0KLUBjbGFzcyBUZXN0UHJvdG9jb2xUZXN0Tm9PcGVuUGFyYW1ldGVyczsKLUBj
bGFzcyBUZXN0UHJvdG9jb2xUZXN0T3BlblBhcmFtZXRlcnM7Ci0KLXR5cGVkZWYgTlNfRU5VTShO
U0ludGVnZXIsIFRlc3RQcm90b2NvbFBsYXRmb3JtKSB7Ci0gICAgVGVzdFByb3RvY29sUGxhdGZv
cm1BbGwsCi0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1HZW5lcmljLAotICAgIFRlc3RQcm90b2Nv
bFBsYXRmb3JtSU9TLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1MsCi19OwotCi0KLQot
Ci1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVz
dFByb3RvY29sVGVzdE5vT3BlblBhcmFtZXRlcnMgOiBSV0lQcm90b2NvbEpTT05PYmplY3QKLS0g
KGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBp
ZD4gKilwYXlsb2FkOwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJX
SVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhPbmU6KGRvdWJsZSlvbmUgdHdvOihkb3VibGUpdHdvOwotLyogcmVxdWlyZWQgKi8gQHByb3Bl
cnR5IChub25hdG9taWMsIGFzc2lnbikgZG91YmxlIG9uZTsKLS8qIHJlcXVpcmVkICovIEBwcm9w
ZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGRvdWJsZSB0d287Ci1AZW5kCi0KLV9fYXR0cmlidXRl
X18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUZXN0
T3BlblBhcmFtZXRlcnMgOiBSV0lQcm90b2NvbEpTT05PYmplY3QKLS0gKGluc3RhbmNldHlwZSlp
bml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkOwot
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9i
amVjdCAqKWpzb25PYmplY3Q7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhBbHBoYTooZG91Ymxl
KWFscGhhIGJldGE6KGRvdWJsZSliZXRhOwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25h
dG9taWMsIGFzc2lnbikgZG91YmxlIGFscGhhOwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChu
b25hdG9taWMsIGFzc2lnbikgZG91YmxlIGJldGE7Ci1AZW5kCi0KLQotCi0KLQotCi0jaW1wb3J0
IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xCdWlsZENvbXBhdGliaWxpdHlPYmplY3RzLmg+Ci0K
LSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbEludGVybmFsLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXdp
dGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2xKU09OT2JqZWN0UHJpdmF0ZS5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFi
bGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDx3dGYvSlNPTlZhbHVlcy5oPgotCi0K
LQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgot
I2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgotCi1u
YW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgot
T3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2
YWx1ZSk7Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xQbGF0
Zm9ybSB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQcm90b2Nv
bFBsYXRmb3JtQWxsOgotICAgICAgICByZXR1cm4gImFsbCJfczsKLSAgICBjYXNlIFRlc3RQcm90
b2NvbFBsYXRmb3JtR2VuZXJpYzoKLSAgICAgICAgcmV0dXJuICJnZW5lcmljIl9zOwotICAgIGNh
c2UgVGVzdFByb3RvY29sUGxhdGZvcm1JT1M6Ci0gICAgICAgIHJldHVybiAiaW9zIl9zOwotICAg
IGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzoKLSAgICAgICAgcmV0dXJuICJtYWNvcyJf
czsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xQ
bGF0Zm9ybT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAg
aWYgKHZhbHVlID09ICJhbGwiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1B
bGw7Ci0gICAgaWYgKHZhbHVlID09ICJnZW5lcmljIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90
b2NvbFBsYXRmb3JtR2VuZXJpYzsKLSAgICBpZiAodmFsdWUgPT0gImlvcyIpCi0gICAgICAgIHJl
dHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzsKLSAgICBpZiAodmFsdWUgPT0gIm1hY29zIikK
LSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M7Ci0gICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKLX0KLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSB0eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3Rv
Y29sVHlwZVBhcnNlci5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9i
amVjdFByaXZhdGUuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGludGVyZmFj
ZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFRlc3REb21haW4pCi0KLSsgKHZvaWQpX3Bh
cnNlTm9PcGVuUGFyYW1ldGVyczooVGVzdFByb3RvY29sVGVzdE5vT3BlblBhcmFtZXRlcnMgKiop
b3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZU9wZW5QYXJh
bWV0ZXJzOihUZXN0UHJvdG9jb2xUZXN0T3BlblBhcmFtZXRlcnMgKiopb3V0VmFsdWUgZnJvbVBh
eWxvYWQ6KGlkKXBheWxvYWQ7Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucyAoVGVzdERvbWFpbikKLQotKyAodm9pZClfcGFyc2VOb09wZW5QYXJh
bWV0ZXJzOihUZXN0UHJvdG9jb2xUZXN0Tm9PcGVuUGFyYW1ldGVycyAqKilvdXRWYWx1ZSBmcm9t
UGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUo
cGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IFtbVGVzdFBy
b3RvY29sVGVzdE5vT3BlblBhcmFtZXRlcnMgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2Fk
XTsKLX0KLQotKyAodm9pZClfcGFyc2VPcGVuUGFyYW1ldGVyczooVGVzdFByb3RvY29sVGVzdE9w
ZW5QYXJhbWV0ZXJzICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNz
XSk7Ci0gICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xUZXN0T3BlblBhcmFtZXRlcnMgYWxs
b2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xUeXBlcy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUt
d2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0
ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9S
V0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5o
PgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3Rv
cjsKLQotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVGVzdE5vT3BlblBhcmFtZXRlcnMK
LQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8
TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5p
dF0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFV
SVJFRF9QUk9QRVJUWShwYXlsb2FkW0Aib25lIl0sIEAib25lIik7Ci0gICAgc2VsZi5vbmUgPSBb
cGF5bG9hZFtAIm9uZSJdIGRvdWJsZVZhbHVlXTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
UkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAInR3byJdLCBAInR3byIpOwotICAgIHNlbGYudHdv
ID0gW3BheWxvYWRbQCJ0d28iXSBkb3VibGVWYWx1ZV07Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0K
LS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05P
YmplY3QgKilvYmplY3QKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoSlNPTk9i
amVjdDpbb2JqZWN0IHRvSlNPTk9iamVjdF0uZ2V0KCldKSkKLSAgICAgICAgcmV0dXJuIG5pbDsK
LQotICAgIHJldHVybiBzZWxmOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhPbmU6KGRv
dWJsZSlvbmUgdHdvOihkb3VibGUpdHdvCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0
XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBzZWxmLm9uZSA9IG9uZTsKLSAgICBzZWxm
LnR3byA9IHR3bzsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKXNldE9uZTooZG91
YmxlKW9uZQotewotICAgIFtzdXBlciBzZXREb3VibGU6b25lIGZvcktleTpAIm9uZSJdOwotfQot
Ci0tIChkb3VibGUpb25lCi17Ci0gICAgcmV0dXJuIFtzdXBlciBkb3VibGVGb3JLZXk6QCJvbmUi
XTsKLX0KLQotLSAodm9pZClzZXRUd286KGRvdWJsZSl0d28KLXsKLSAgICBbc3VwZXIgc2V0RG91
YmxlOnR3byBmb3JLZXk6QCJ0d28iXTsKLX0KLQotLSAoZG91YmxlKXR3bwotewotICAgIHJldHVy
biBbc3VwZXIgZG91YmxlRm9yS2V5OkAidHdvIl07Ci19Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0
aW9uIFRlc3RQcm90b2NvbFRlc3RPcGVuUGFyYW1ldGVycwotCi0tIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXls
b2FkCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJldHVybiBu
aWw7Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRb
QCJhbHBoYSJdLCBAImFscGhhIik7Ci0gICAgc2VsZi5hbHBoYSA9IFtwYXlsb2FkW0AiYWxwaGEi
XSBkb3VibGVWYWx1ZV07Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BF
UlRZKHBheWxvYWRbQCJiZXRhIl0sIEAiYmV0YSIpOwotICAgIHNlbGYuYmV0YSA9IFtwYXlsb2Fk
W0AiYmV0YSJdIGRvdWJsZVZhbHVlXTsKLQotICAgIHJldHVybiBzZWxmOwotfQotLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKW9i
amVjdAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09OT2JqZWN0OltvYmpl
Y3QgdG9KU09OT2JqZWN0XS5nZXQoKV0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgcmV0
dXJuIHNlbGY7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aEFscGhhOihkb3VibGUpYWxw
aGEgYmV0YTooZG91YmxlKWJldGEKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkK
LSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIHNlbGYuYWxwaGEgPSBhbHBoYTsKLSAgICBzZWxm
LmJldGEgPSBiZXRhOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpc2V0QWxwaGE6
KGRvdWJsZSlhbHBoYQotewotICAgIFtzdXBlciBzZXREb3VibGU6YWxwaGEgZm9yS2V5OkAiYWxw
aGEiXTsKLX0KLQotLSAoZG91YmxlKWFscGhhCi17Ci0gICAgcmV0dXJuIFtzdXBlciBkb3VibGVG
b3JLZXk6QCJhbHBoYSJdOwotfQotCi0tICh2b2lkKXNldEJldGE6KGRvdWJsZSliZXRhCi17Ci0g
ICAgW3N1cGVyIHNldERvdWJsZTpiZXRhIGZvcktleTpAImJldGEiXTsKLX0KLQotLSAoZG91Ymxl
KWJldGEKLXsKLSAgICByZXR1cm4gW3N1cGVyIGRvdWJsZUZvcktleTpAImJldGEiXTsKLX0KLQot
QGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4
cGVjdGVkL3ZlcnNpb24uanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC92ZXJzaW9uLmpzb24tcmVzdWx0CmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNGU4N2RjNDczOWIzNTFjNGQxMTRiMDBhYjE5
N2YyZGQ2ODY2YTEzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2V4cGVjdGVkL3ZlcnNpb24uanNvbi1yZXN1bHQKKysrIC9kZXYvbnVsbApAQCAtMSw4ODAgKzAs
MCBAQAotIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHZlcnNpb24uanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0vLyBWZXJzaW9uRG9tYWluCi1JbnNwZWN0b3JC
YWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJWZXJzaW9uRG9tYWluIiwgbnVsbCk7Ci1JbnNwZWN0b3JC
YWNrZW5kLnJlZ2lzdGVyVmVyc2lvbigiVmVyc2lvbkRvbWFpbiIsIDQyKTsKLUluc3BlY3RvckJh
Y2tlbmQuYWN0aXZhdGVEb21haW4oIlZlcnNpb25Eb21haW4iLCBudWxsKTsKLSMjIyBFbmQgRmls
ZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0
ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSB2ZXJzaW9uLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCi0jaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotCi1uYW1lc3BhY2UgSW5zcGVj
dG9yIHsKLQotY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAg
IHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRp
c3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0K
LSAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVy
biBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Ci1wcml2YXRlOgotICAgIFJlZlB0cjxCYWNr
ZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKLX07Ci0KLQotCi0KLX0gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgotCi0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCi0jIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hl
cnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lvbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVz
dFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5h
bWVzcGFjZSBJbnNwZWN0b3IgewotCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQotCi0K
LX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3Bh
dGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lvbi5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVz
Lmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
Ci0jaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgotI2VuZGlmCi0K
LW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0K
LSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSB2ZXJzaW9uLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgi
Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEZyb250ZW5kUm91dGVyOwot
Ci19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlz
cGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3Bw
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVyc2lvbi5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi19IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHZlcnNpb24uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotCi1u
YW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLS8vIFZl
cnNpb25zLgotbmFtZXNwYWNlIFZlcnNpb25Eb21haW4gewotc3RhdGljIGNvbnN0ZXhwciB1bnNp
Z25lZCBWRVJTSU9OID0gNDI7Ci19IC8vIFZlcnNpb25Eb21haW4KLS8vIEVuZCBvZiB2ZXJzaW9u
cy4KLQotCi0KLQotCi0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0KLSMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHZlcnNpb24uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdFByb3Rv
Y29sT2JqZWN0cy5oIgotCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotbmFtZXNwYWNlIFBy
b3RvY29sIHsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0KLSMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHZlcnNpb24uanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0
ci5oPgotCi0KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgK
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHZlcnNpb24uanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBv
cnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSAiVGVzdFBy
b3RvY29sSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMu
aCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsK
LQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
QmFja2VuZERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25m
aWd1cmF0aW9uLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8
V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5
ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5T
T2JqZWN0Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9u
LmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbi5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2ltcG9ydCAi
VGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgotCi11c2luZyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yOwotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
bgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci19
Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVj
dG9yQ29udHJvbGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0g
ICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVy
KTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0K
LS0gKHZvaWQpZGVhbGxvYwotewotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotQGVuZAotCi0K
LSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHZlcnNpb24uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1w
b3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPHd0Zi9KU09OVmFs
dWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2wuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHZlcnNpb24uanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxGb3Vu
ZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29s
SlNPTk9iamVjdC5oPgotCi0KLQotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJv
dG9jb2xQbGF0Zm9ybSkgewotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsLAotICAgIFRlc3RQ
cm90b2NvbFBsYXRmb3JtR2VuZXJpYywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUywKLSAg
ICBUZXN0UHJvdG9jb2xQbGF0Zm9ybU1hY09TLAotfTsKLQotCi0KLQotCi0KLQotCi0KLQotI2lt
cG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5o
PgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xJbnRlcm5hbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdmVy
c2lvbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNp
bXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFBy
aXZhdGUuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29u
dHJvbGxlci5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotCi0KLQotIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHZl
cnNpb24uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0j
aW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2Nv
bEFycmF5Q29udmVyc2lvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KLU9wdGlvbmFsPE9iakNFbnVtVHlwZT4gZnJvbVByb3Rv
Y29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOwotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9j
b2xTdHJpbmcoVGVzdFByb3RvY29sUGxhdGZvcm0gdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVl
KSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUFsbDoKLSAgICAgICAgcmV0dXJuICJh
bGwiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM6Ci0gICAgICAgIHJl
dHVybiAiZ2VuZXJpYyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TOgotICAg
ICAgICByZXR1cm4gImlvcyJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M6
Ci0gICAgICAgIHJldHVybiAibWFjb3MiX3M7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxp
bmUgT3B0aW9uYWw8VGVzdFByb3RvY29sUGxhdGZvcm0+IGZyb21Qcm90b2NvbFN0cmluZyhjb25z
dCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiYWxsIikKLSAgICAgICAgcmV0
dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOwotICAgIGlmICh2YWx1ZSA9PSAiZ2VuZXJpYyIp
Ci0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUdlbmVyaWM7Ci0gICAgaWYgKHZh
bHVlID09ICJpb3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1JT1M7Ci0g
ICAgaWYgKHZhbHVlID09ICJtYWNvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0
Zm9ybU1hY09TOwotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5o
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB2ZXJzaW9uLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFBy
b3RvY29sVHlwZVBhcnNlci5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNP
Tk9iamVjdFByaXZhdGUuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0KLQot
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHZlcnNpb24uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQ
cm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgot
I2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsK
LQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9u
LWNvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbiBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2Zh
aWwtb24tY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5q
c29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNmRmOWU0YmQ5YzMxN2QxYjZiYWY1
ZWQ2YzVlMDM1ZTJhZjkzMTg3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL2ZhaWwtb24tY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dh
YmxlVHlwZS5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi1bCi17Ci0gICAgImRv
bWFpbiI6ICJEb21haW4iLAotICAgICJkZWJ1Z2dhYmxlVHlwZXMiOiBbImphdmFzY3JpcHQiXSwK
LSAgICAidGFyZ2V0VHlwZXMiOiBbIndvcmtlciJdLAotICAgICJjb21tYW5kcyI6IFt7Im5hbWUi
OiAiQ29tbWFuZCJ9XSwKLSAgICAiZXZlbnRzIjogW3sibmFtZSI6ICJFdmVudCJ9XQotfQotXQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvZmFpbC1vbi1jb21tYW5kLXRhcmdldFR5cGVzLXR5cGUuanNvbiBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tY29t
bWFuZC10YXJnZXRUeXBlcy10eXBlLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDY0MDU5Zjg0YmNmMGNlYmEwZTg0MDYwMDg3ZWI1MzJhYWQ2ZjAyZTQuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1jb21tYW5kLXRhcmdldFR5cGVz
LXR5cGUuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotewotICAgICJkb21haW4i
OiAiRG9tYWluIiwKLSAgICAiY29tbWFuZHMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJu
YW1lIjogIlBhZ2VPbmx5IiwKLSAgICAgICAgICAgICJ0YXJnZXRUeXBlcyI6ICJwYWdlZSIKLSAg
ICAgICAgfQotICAgIF0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tY29tbWFuZC10YXJnZXRUeXBlcy12
YWx1ZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvZmFpbC1vbi1jb21tYW5kLXRhcmdldFR5cGVzLXZhbHVlLmpzb24KZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwMjA0NDcyZWM4ZjVlNmIwOTljMjhkYmUyYTFjZTgzMDdi
NWIwNmUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1v
bi1jb21tYW5kLXRhcmdldFR5cGVzLXZhbHVlLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw5ICsw
LDAgQEAKLXsKLSAgICAiZG9tYWluIjogIkRvbWFpbiIsCi0gICAgImNvbW1hbmRzIjogWwotICAg
ICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJQYWdlT25seSIsCi0gICAgICAgICAgICAidGFy
Z2V0VHlwZXMiOiBbInBhZ2VlIl0KLSAgICAgICAgfQotICAgIF0KLX0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwt
b24tY29tbWFuZC13aXRoLWludmFsaWQtcGxhdGZvcm0uanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tY29tbWFuZC13aXRo
LWludmFsaWQtcGxhdGZvcm0uanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTE4
MGNhZTliZmY4ZGEyNGYwNmNmMjEwNWVkNTk4NDU0Y2Y1ZWNmYi4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWNvbW1hbmQtd2l0aC1pbnZhbGlkLXBs
YXRmb3JtLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi17Ci0gICAgImRvbWFp
biI6ICJPdmVybGF5IiwKLSAgICAiY29tbWFuZHMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAg
ICJuYW1lIjogInByb2Nlc3NQb2ludHMiLAotICAgICAgICAgICAgInBsYXRmb3JtIjogImludmFs
aWQiLAotICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJwb2ludDEiLCAidHlwZSI6ICJudW1iZXIiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJwb2ludDIiLCAidHlwZSI6ICJudW1iZXIiIH0KLSAgICAgICAgICAgIF0sCi0gICAgICAg
ICAgICAicmV0dXJucyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInJlc3VsdCIsICJ0
eXBlIjogInN0cmluZyIgfQotICAgICAgICAgICAgXQotICAgICAgICB9Ci0gICAgXQotfQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvZmFpbC1vbi1kb21haW4tZGVidWdnYWJsZVR5cGVzLXR5cGUuanNvbiBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZG9t
YWluLWRlYnVnZ2FibGVUeXBlcy10eXBlLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDk3NDhmNDIzNDczY2Q5ZGQ2NWFiY2VlOTRhODgxNmJkNDgyOTEzZWYuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kb21haW4tZGVidWdnYWJs
ZVR5cGVzLXR5cGUuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotewotICAgICJk
b21haW4iOiAiV2ViT25seSIsCi0gICAgImRlYnVnZ2FibGVUeXBlcyI6ICJ3ZWJiIiwKLSAgICAi
Y29tbWFuZHMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImVuYWJsZSIKLSAg
ICAgICAgfQotICAgIF0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZG9tYWluLWRlYnVnZ2FibGVUeXBl
cy12YWx1ZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2dlbmVyaWMvZmFpbC1vbi1kb21haW4tZGVidWdnYWJsZVR5cGVzLXZhbHVlLmpzb24KZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyNTJkZGJkODNkYWJiN2RmNmU0NDEzNWM2MWYw
OTM2NmUzMGU2MDQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMv
ZmFpbC1vbi1kb21haW4tZGVidWdnYWJsZVR5cGVzLXZhbHVlLmpzb24KKysrIC9kZXYvbnVsbApA
QCAtMSw5ICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIldlYk9ubHkiLAotICAgICJkZWJ1Z2dh
YmxlVHlwZXMiOiBbIndlYmIiXSwKLSAgICAiY29tbWFuZHMiOiBbCi0gICAgICAgIHsKLSAgICAg
ICAgICAgICJuYW1lIjogImVuYWJsZSIKLSAgICAgICAgfQotICAgIF0KLX0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2Zh
aWwtb24tZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpz
b24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJp
Yy9mYWlsLW9uLWRvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlw
ZS5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YWEwMjgwNDY1NzY5ZTI5MzE4
OTg5M2M0MzMwMmZjYmQ2ZjQ5ODZjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9nZW5lcmljL2ZhaWwtb24tZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVn
Z2FibGVUeXBlLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLVsKLXsKLSAgICAi
ZG9tYWluIjogIkRvbWFpbiIsCi0gICAgImRlYnVnZ2FibGVUeXBlcyI6IFsiamF2YXNjcmlwdCJd
LAotICAgICJjb21tYW5kcyI6IFt7Im5hbWUiOiAiQ29tbWFuZCIsICJ0YXJnZXRUeXBlcyI6IFsi
d29ya2VyIl19XSwKLSAgICAiZXZlbnRzIjogW3sibmFtZSI6ICJFdmVudCJ9XQotfQotXQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvZmFpbC1vbi1kb21haW4tdGFyZ2V0VHlwZXMtdHlwZS5qc29uIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kb21haW4t
dGFyZ2V0VHlwZXMtdHlwZS5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkODIy
MjY3NDE0NjE1ZDRiNGFlNjQyMDljNmM2Y2Q3ODZlZjNjODY1Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZG9tYWluLXRhcmdldFR5cGVzLXR5cGUu
anNvbgorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotewotICAgICJkb21haW4iOiAiUGFn
ZU9ubHkiLAotICAgICJ0YXJnZXRUeXBlcyI6ICJwYWdlZSIsCi0gICAgImNvbW1hbmRzIjogWwot
ICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJlbmFibGUiCi0gICAgICAgIH0KLSAgICBd
Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWRvbWFpbi10YXJnZXRUeXBlcy12YWx1ZS5qc29uIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1v
bi1kb21haW4tdGFyZ2V0VHlwZXMtdmFsdWUuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggZTdiMTBkN2YxNTRiOTg0MWFjOGYyNDM5NTYxOTYzMmIxOTc4Yzk0OS4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWRvbWFpbi10YXJnZXRU
eXBlcy12YWx1ZS5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi17Ci0gICAgImRv
bWFpbiI6ICJQYWdlT25seSIsCi0gICAgInRhcmdldFR5cGVzIjogWyJwYWdlZSJdLAotICAgICJj
b21tYW5kcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiZW5hYmxlIgotICAg
ICAgICB9Ci0gICAgXQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1jYWxs
LXBhcmFtZXRlci1uYW1lcy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1jYWxsLXBhcmFt
ZXRlci1uYW1lcy5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYWI3NmNhNjI3
OWNlM2E0YWNmNzk4NTUwMGIzMGI3ZDFjZmI4ZjBkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZHVwbGljYXRlLWNvbW1hbmQtY2FsbC1wYXJhbWV0
ZXItbmFtZXMuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLXsKLSAgICAiZG9t
YWluIjogIk92ZXJsYXkiLAotICAgICJjb21tYW5kcyI6IFsKLSAgICAgICAgewotICAgICAgICAg
ICAgIm5hbWUiOiAicHJvY2Vzc1BvaW50cyIsCi0gICAgICAgICAgICAicGFyYW1ldGVycyI6IFsK
LSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBvaW50IiwgInR5cGUiOiAibnVtYmVyIiB9LAot
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicG9pbnQiLCAidHlwZSI6ICJudW1iZXIiIH0KLSAg
ICAgICAgICAgIF0sCi0gICAgICAgICAgICAicmV0dXJucyI6IFsKLSAgICAgICAgICAgICAgICB7
ICJuYW1lIjogInJlc3VsdDEiLCAidHlwZSI6ICJzdHJpbmciIH0sCi0gICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJyZXN1bHQyIiwgInR5cGUiOiAic3RyaW5nIiB9Ci0gICAgICAgICAgICBdCi0g
ICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWR1cGxpY2F0ZS1jb21tYW5kLXJl
dHVybi1wYXJhbWV0ZXItbmFtZXMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZHVwbGljYXRlLWNvbW1hbmQtcmV0dXJu
LXBhcmFtZXRlci1uYW1lcy5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOGJi
MTVjMDRiNjU5YjljYjlhZmRlMzRjZDU3MjJiYTljNmQ0ZGE5Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZHVwbGljYXRlLWNvbW1hbmQtcmV0dXJu
LXBhcmFtZXRlci1uYW1lcy5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotewot
ICAgICJkb21haW4iOiAiT3ZlcmxheSIsCi0gICAgImNvbW1hbmRzIjogWwotICAgICAgICB7Ci0g
ICAgICAgICAgICAibmFtZSI6ICJwcm9jZXNzUG9pbnRzIiwKLSAgICAgICAgICAgICJwYXJhbWV0
ZXJzIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicG9pbnQxIiwgInR5cGUiOiAibnVt
YmVyIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicG9pbnQyIiwgInR5cGUiOiAibnVt
YmVyIiB9Ci0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInJldHVybnMiOiBbCi0gICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJyZXN1bHQiLCAidHlwZSI6ICJzdHJpbmciIH0sCi0gICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJyZXN1bHQiLCAidHlwZSI6ICJzdHJpbmciIH0KLSAgICAgICAg
ICAgIF0KLSAgICAgICAgfQotICAgIF0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZHVwbGljYXRlLWV2
ZW50LXBhcmFtZXRlci1uYW1lcy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kdXBsaWNhdGUtZXZlbnQtcGFyYW1ldGVy
LW5hbWVzLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzZDNiM2NjNjQyM2Nl
YzI1YTY3ZGE5MTMyYTc2Njg2NzU1YTQ0NDAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kdXBsaWNhdGUtZXZlbnQtcGFyYW1ldGVyLW5hbWVzLmpz
b24KKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi17Ci0gICAgImRvbWFpbiI6ICJPdmVy
bGF5IiwKLSAgICAiZXZlbnRzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJw
cm9jZXNzZWRQb2ludHMiLAotICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCi0gICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJwb2ludCIsICJ0eXBlIjogIm51bWJlciIgfSwKLSAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInBvaW50IiwgInR5cGUiOiAibnVtYmVyIiB9Ci0gICAgICAgICAgICBd
Ci0gICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLWRl
Y2xhcmF0aW9ucy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1kZWNsYXJhdGlvbnMuanNvbgpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzAyZmM2YTMyNzBhNjQ2YTQ1MDQ0N2ZkYzA0
MDEzOTk1YTk0MmJmMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJp
Yy9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLWRlY2xhcmF0aW9ucy5qc29uCisrKyAvZGV2L251bGwK
QEAgLTEsMTUgKzAsMCBAQAotewotICAgICJkb21haW4iOiAiUnVudGltZSIsCi0gICAgInR5cGVz
IjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiUmVtb3RlT2JqZWN0SWQiLAotICAg
ICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJV
bmlxdWUgb2JqZWN0IGlkZW50aWZpZXIuIgotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAg
ICAgICAiaWQiOiAiUmVtb3RlT2JqZWN0SWQiLAotICAgICAgICAgICAgInR5cGUiOiAic3RyaW5n
IiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIu
IgotICAgICAgICB9Ci0gICAgXQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1t
ZW1iZXItbmFtZXMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZHVwbGljYXRlLXR5cGUtbWVtYmVyLW5hbWVzLmpzb24K
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlYmFjZWU4YjIzZTFlYTM0MDVkOGFjMGEw
MDE2MjA3MDEwYzk0ODUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVy
aWMvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1tZW1iZXItbmFtZXMuanNvbgorKysgL2Rldi9udWxs
CkBAIC0xLDE1ICswLDAgQEAKLVsKLXsKLSAgICAiZG9tYWluIjogIk92ZXJsYXlUeXBlcyIsCi0g
ICAgInR5cGVzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiUG9pbnQiLAotICAg
ICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKLSAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwot
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAieCIsICJ0eXBlIjogImludGVnZXIiIH0sCi0gICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJ4IiwgInR5cGUiOiAiaW50ZWdlciIgfQotICAgICAgICAg
ICAgXQotICAgICAgICB9Ci0gICAgXQotfQotXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1lbnVtLXdpdGgt
bm8tdmFsdWVzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWVudW0td2l0aC1uby12YWx1ZXMuanNvbgpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMjMyYTdjMzI0OWE0MGJkNDQ3ZTE5YTkyYThlNTY5MzBkM2Y4
NTk1Ny4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9u
LWVudW0td2l0aC1uby12YWx1ZXMuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAK
LXsKLSAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAgIHsK
LSAgICAgICAgICAgICJpZCI6ICJQcmltYXJ5Q29sb3JzIiwKLSAgICAgICAgICAgICJ0eXBlIjog
InN0cmluZyIsCi0gICAgICAgICAgICAiZW51bSI6IFtdCi0gICAgICAgIH0KLSAgICBdCi19CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJpYy9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2Fi
bGVUeXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZ2VuZXJpYy9mYWlsLW9uLWV2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVn
Z2FibGVUeXBlLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxMzJjZTA4ODI4
NGRlYjlhNTZlMTM0MTY2OWQ1YTJiZGRiZWFjMmQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1ldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFp
bi1kZWJ1Z2dhYmxlVHlwZS5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1bCi17
Ci0gICAgImRvbWFpbiI6ICJEb21haW4iLAotICAgICJkZWJ1Z2dhYmxlVHlwZXMiOiBbImphdmFz
Y3JpcHQiXSwKLSAgICAiY29tbWFuZHMiOiBbeyJuYW1lIjogIkNvbW1hbmQifV0sCi0gICAgImV2
ZW50cyI6IFt7Im5hbWUiOiAiRXZlbnQiLCAidGFyZ2V0VHlwZXMiOiBbIndvcmtlciJdfV0KLX0K
LV0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9nZW5lcmljL2ZhaWwtb24tZXZlbnQtdGFyZ2V0VHlwZXMtdHlwZS5qc29uIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1l
dmVudC10YXJnZXRUeXBlcy10eXBlLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGU1NGVkMWY1YzZiZjlmNGFiNDE1ZDE0MjIzMDI4OWE5MWRjZmU4YzYuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1ldmVudC10YXJnZXRUeXBlcy10
eXBlLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjog
IkRvbWFpbiIsCi0gICAgImV2ZW50cyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUi
OiAiUGFnZU9ubHkiLAotICAgICAgICAgICAgInRhcmdldFR5cGVzIjogInBhZ2VlIgotICAgICAg
ICB9Ci0gICAgXQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1ldmVudC10YXJnZXRUeXBlcy12YWx1ZS5q
c29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVy
aWMvZmFpbC1vbi1ldmVudC10YXJnZXRUeXBlcy12YWx1ZS5qc29uCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA1ODg0YmZkN2E2YjdiZDQ3NDhiMTAwNzI5OTBhYWVlNTkwYzYwYTZmLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZXZlbnQt
dGFyZ2V0VHlwZXMtdmFsdWUuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotewot
ICAgICJkb21haW4iOiAiRG9tYWluIiwKLSAgICAiZXZlbnRzIjogWwotICAgICAgICB7Ci0gICAg
ICAgICAgICAibmFtZSI6ICJQYWdlT25seSIsCi0gICAgICAgICAgICAidGFyZ2V0VHlwZXMiOiBb
InBhZ2VlIl0KLSAgICAgICAgfQotICAgIF0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tbnVtYmVyLXR5
cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRp
b25hbC1wYXJhbWV0ZXItZmxhZy5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3
MzA4ZGI5OTJkNjUyNTdmMmI1YzYzMjdlMGNhMzU0NTAyZDYxNTRhLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tbnVtYmVyLXR5cGVkLW9wdGlvbmFs
LXBhcmFtZXRlci1mbGFnLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi17Ci0g
ICAgImRvbWFpbiI6ICJEYXRhYmFzZSIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7Ci0gICAg
ICAgICAgICAiaWQiOiAiRGF0YWJhc2VJZCIsCi0gICAgICAgICAgICAidHlwZSI6ICJzdHJpbmci
LAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBpZGVudGlmaWVyIG9mIERhdGFi
YXNlIG9iamVjdC4iCi0gICAgICAgIH0KLSAgICBdLAotICAgICJldmVudHMiOiBbCi0gICAgICAg
IHsKLSAgICAgICAgICAgICJuYW1lIjogImRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMiLAot
ICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJj
b2x1bW5OYW1lcyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IDAgfQotICAgICAgICAg
ICAgXQotICAgICAgICB9Ci0gICAgXQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1udW1iZXItdHlwZWQt
b3B0aW9uYWwtdHlwZS1tZW1iZXIuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tbnVtYmVyLXR5cGVkLW9wdGlvbmFsLXR5
cGUtbWVtYmVyLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmZWE1NTVlYzRm
ZTA4NjYyNzhlMWZjZDczMzU0MjQyZGVmZDFiZDQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1i
ZXIuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLVsKLXsKLSAgICAiZG9tYWlu
IjogIkRhdGFiYXNlIiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJp
ZCI6ICJFcnJvciIsCi0gICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAotICAgICAgICAgICAg
ImRlc2NyaXB0aW9uIjogIkRhdGFiYXNlIGVycm9yLiIsCi0gICAgICAgICAgICAicHJvcGVydGll
cyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm1lc3NhZ2UiLCAidHlwZSI6ICJzdHJp
bmciLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgbWVzc2FnZS4iIH0sCi0gICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJjb2RlIiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJFcnJv
ciBjb2RlLiIsICJvcHRpb25hbCI6IDAgfQotICAgICAgICAgICAgXQotICAgICAgICB9Ci0gICAg
XQotfQotXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVy
LWZsYWcuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9nZW5lcmljL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1mbGFnLmpz
b24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwMTJjNzliNmIzOGMyMWRmZjYwN2Zl
YzllZTkwYjI4MDMxMGY5MDguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvZmFpbC1vbi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbgor
KysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIkRhdGFiYXNl
IiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJEYXRhYmFz
ZUlkIiwKLSAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCi0gICAgICAgICAgICAiZGVzY3Jp
cHRpb24iOiAiVW5pcXVlIGlkZW50aWZpZXIgb2YgRGF0YWJhc2Ugb2JqZWN0LiIKLSAgICAgICAg
fQotICAgIF0sCi0gICAgImV2ZW50cyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUi
OiAiZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyIsCi0gICAgICAgICAgICAicGFyYW1ldGVy
cyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAi
c3RyaW5nIiwgIm9wdGlvbmFsIjogInRydWUiIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfQot
ICAgIF0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVt
YmVyLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJpYy9mYWlsLW9uLXN0cmluZy10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29uCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYTNlZjI4YThmODgxNGNjNjE3ZmI1ZDViYzIx
MzA2ZDBhYWQ0ZmQwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24KKysrIC9kZXYv
bnVsbApAQCAtMSwxNiArMCwwIEBACi1bCi17Ci0gICAgImRvbWFpbiI6ICJEYXRhYmFzZSIsCi0g
ICAgInR5cGVzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiRXJyb3IiLAotICAg
ICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJE
YXRhYmFzZSBlcnJvci4iLAotICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCi0gICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJtZXNzYWdlIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9u
IjogIkVycm9yIG1lc3NhZ2UuIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29kZSIs
ICJ0eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgY29kZS4iLCAib3B0aW9u
YWwiOiAiZmFsc2UiIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfQotICAgIF0KLX0KLV0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL2ZhaWwtb24tdHlwZS1kZWNsYXJhdGlvbi11c2luZy10eXBlLXJlZmVyZW5jZS5qc29u
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMv
ZmFpbC1vbi10eXBlLWRlY2xhcmF0aW9uLXVzaW5nLXR5cGUtcmVmZXJlbmNlLmpzb24KZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5Yjc1OTBjY2M2ZjZiYzM0NDNhNGEyODNjYTZmY2Nm
ZGYzMjc3MzQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFp
bC1vbi10eXBlLWRlY2xhcmF0aW9uLXVzaW5nLXR5cGUtcmVmZXJlbmNlLmpzb24KKysrIC9kZXYv
bnVsbApAQCAtMSwxMyArMCwwIEBACi1bCi17Ci0gICAgImRvbWFpbiI6ICJSdW50aW1lIiwKLSAg
ICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJSZW1vdGVPYmplY3RJ
ZCIsCi0gICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAotICAgICAgICAgICAgIiRyZWYiOiAi
U29tZVR5cGUiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBvYmplY3QgaWRl
bnRpZmllci4iCi0gICAgICAgIH0KLSAgICBdCi19Ci1dCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLXR5cGUt
cmVmZXJlbmNlLWFzLXByaW1pdGl2ZS10eXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLXR5cGUtcmVmZXJlbmNlLWFz
LXByaW1pdGl2ZS10eXBlLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjODNi
YmZjZTQxMmI4YjA5ZGY3NDdhODc1ZTgwMzZkZmVjY2JjMzYuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi10eXBlLXJlZmVyZW5jZS1hcy1wcmltaXRp
dmUtdHlwZS5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotewotICAgICJkb21h
aW4iOiAiRGF0YWJhc2UiLAotICAgICJ0eXBlcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAg
ImlkIjogIkRhdGFiYXNlSWQiLAotICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKLSAgICAg
ICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgaWRlbnRpZmllciBvZiBEYXRhYmFzZSBvYmpl
Y3QuIgotICAgICAgICB9Ci0gICAgXSwKLSAgICAiZXZlbnRzIjogWwotICAgICAgICB7Ci0gICAg
ICAgICAgICAibmFtZSI6ICJkaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzIiwKLSAgICAgICAg
ICAgICJwYXJhbWV0ZXJzIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFt
ZXMiLCAidHlwZSI6ICJEYXRhYmFzZUlkIiB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0KLSAg
ICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLXR5cGUtd2l0aC1pbnZhbGlkLXBsYXRmb3JtLmpzb24g
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9m
YWlsLW9uLXR5cGUtd2l0aC1pbnZhbGlkLXBsYXRmb3JtLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGE5ZmQyZTk5NTYxZGUwY2UzYzc2NmVlNjg4MjFjYTIzYzY0ZDVjOTEuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi10eXBlLXdp
dGgtaW52YWxpZC1wbGF0Zm9ybS5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAot
ewotICAgICJkb21haW4iOiAiUnVudGltZSIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7Ci0g
ICAgICAgICAgICAiaWQiOiAiUmVtb3RlT2JqZWN0SWQiLAotICAgICAgICAgICAgInR5cGUiOiAi
c3RyaW5nIiwKLSAgICAgICAgICAgICJwbGF0Zm9ybSI6ICJpbnZhbGlkIiwKLSAgICAgICAgICAg
ICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIuIgotICAgICAgICB9Ci0g
ICAgXQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi10eXBlLXdpdGgtbG93ZXJjYXNlLW5hbWUuanNvbiBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2Zh
aWwtb24tdHlwZS13aXRoLWxvd2VyY2FzZS1uYW1lLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDUzMTkwMWU0YTlhZDk5MzZiMDFiYmFlZDk3YTFkNGRhMzQ4NDc4YjAuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi10eXBlLXdpdGgt
bG93ZXJjYXNlLW5hbWUuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLXsKLSAg
ICAiZG9tYWluIjogIkRhdGFiYXNlIiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAg
ICAgICAgICJpZCI6ICJkYXRhYmFzZUlkIiwKLSAgICAgICAgICAgICJ0eXBlIjogImludGVnZXIi
LAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBpZGVudGlmaWVyIG9mIERhdGFi
YXNlIG9iamVjdC4iCi0gICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLXVua25v
d24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1kZWNsYXJhdGlvbi5qc29uIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi11bmtub3du
LXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtZGVjbGFyYXRpb24uanNvbgpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggZDY4ODdhMjc0MTE5MDBhODBkNTBmMDAzZWFjMzZjMTNhOTlmYWU1OC4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLXVua25v
d24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1kZWNsYXJhdGlvbi5qc29uCisrKyAvZGV2L251bGwK
QEAgLTEsMTIgKzAsMCBAQAotWwotewotICAgICJkb21haW4iOiAiUnVudGltZSIsCi0gICAgInR5
cGVzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiUmVtb3RlT2JqZWN0SWQiLAot
ICAgICAgICAgICAgInR5cGUiOiAiZHJhZ29uIiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6
ICJVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIuIgotICAgICAgICB9Ci0gICAgXQotfQotXQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtbWVtYmVyLmpzb24g
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9m
YWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1tZW1iZXIuanNvbgpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjgxN2RiNTA0NGRjMWYyODU1NzAwOGMxZjE3NjFmMWIw
NjhmNGNlNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWls
LW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1tZW1iZXIuanNvbgorKysgL2Rldi9u
dWxsCkBAIC0xLDE1ICswLDAgQEAKLVsKLXsKLSAgICAiZG9tYWluIjogIkZhbnRhc3kiLAotICAg
ICJ0eXBlcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIkRyYWdvbkVnZyIsCi0g
ICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjog
IkEgZHJhZ29uIGVnZy4iLAotICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCi0gICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJjb2xvciIsICIkcmVmIjogIkNvbG9yIiB9Ci0gICAgICAgICAgICBd
Ci0gICAgICAgIH0KLSAgICBdCi19Ci1dCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9nZW5lcmF0ZS1kb21haW5zLXdpdGgt
ZmVhdHVyZS1ndWFyZHMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL2dlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5q
c29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2N2NmOGU1ODJmNjVhZTZmYzYxNTY5
Mjg4MmNiMGY2NTc0NjAxMDhhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL2dlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCisrKyAvZGV2
L251bGwKQEAgLTEsMzYgKzAsMCBAQAotWwotewotICAgICJkb21haW4iOiAiTmV0d29yazEiLAot
ICAgICJmZWF0dXJlR3VhcmQiOiAiUExBVEZPUk0oV0VCX0NPTU1BTkRTKSIsCi0gICAgImNvbW1h
bmRzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJsb2FkUmVzb3VyY2UiLAot
ICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRl
eHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4g
Y2hlY2tzLiIKLSAgICAgICAgfQotICAgIF0KLX0sCi17Ci0gICAgImRvbWFpbiI6ICJOZXR3b3Jr
MiIsCi0gICAgImZlYXR1cmVHdWFyZCI6ICJQTEFURk9STShXRUJfVFlQRVMpIiwKLSAgICAidHlw
ZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJOZXR3b3JrRXJyb3IiLAotICAg
ICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKLSAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwot
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibWVzc2FnZSIsICJ0eXBlIjogInN0cmluZyIsICJk
ZXNjcmlwdGlvbiI6ICJFcnJvciBtZXNzYWdlLiIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1l
IjogImNvZGUiLCAidHlwZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIGNvZGUu
IiB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0KLSAgICBdCi19LAotewotICAgICJkb21haW4i
OiAiTmV0d29yazMiLAotICAgICJmZWF0dXJlR3VhcmQiOiAiUExBVEZPUk0oV0VCX0VWRU5UUyki
LAotICAgICJldmVudHMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogInJlc291
cmNlTG9hZGVkIiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJBIHJlc291cmNlIHdhcyBs
b2FkZWQuIgotICAgICAgICB9Ci0gICAgXQotfQotXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvc2FtZS10eXBlLWlkLWRp
ZmZlcmVudC1kb21haW4uanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL3NhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiZjRkZmY1Y2NjMjlkMGU4YzFmYTRiMmRkMzI4
M2U3NzE2MzJjN2QuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMv
c2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDIy
ICswLDAgQEAKLVsKLXsKLSAgICAiZG9tYWluIjogIlJ1bnRpbWUiLAotICAgICJ0eXBlcyI6IFsK
LSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIlJlbW90ZU9iamVjdElkIiwKLSAgICAgICAg
ICAgICJ0eXBlIjogInN0cmluZyIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVl
IG9iamVjdCBpZGVudGlmaWVyLiIKLSAgICAgICAgfQotICAgIF0KLX0sCi17Ci0gICAgImRvbWFp
biI6ICJSdW50aW1lMiIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAi
aWQiOiAiUmVtb3RlT2JqZWN0SWQiLAotICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKLSAg
ICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIuIgotICAg
ICAgICB9Ci0gICAgXQotfQotXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0
ZXJzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJpYy9zaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMjBhMGMxNTUyNzUwZjYyODI4OGNmZjQxOTM5NmJkNmY2YWY3NDlm
ZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9zaGFkb3dlZC1v
cHRpb25hbC10eXBlLXNldHRlcnMuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAK
LXsKLSAgICAiZG9tYWluIjogIlJ1bnRpbWUiLAotICAgICJ0eXBlcyI6IFsKLSAgICAgICAgewot
ICAgICAgICAgICAgImlkIjogIktleVBhdGgiLAotICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0
IiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJLZXkgcGF0aC4iLAotICAgICAgICAgICAg
InByb3BlcnRpZXMiOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAi
bmFtZSI6ICJ0eXBlIiwKLSAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKLSAg
ICAgICAgICAgICAgICAgICAgImVudW0iOiBbIm51bGwiLCAic3RyaW5nIiwgImFycmF5Il0sCi0g
ICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJLZXkgcGF0aCB0eXBlLiIKLSAgICAg
ICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIm5h
bWUiOiAic3RyaW5nIiwKLSAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKLSAg
ICAgICAgICAgICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAg
ImRlc2NyaXB0aW9uIjogIlN0cmluZyB2YWx1ZS4iCi0gICAgICAgICAgICAgICAgfSwKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogImFycmF5IiwKLSAgICAg
ICAgICAgICAgICAgICAgInR5cGUiOiAiYXJyYXkiLAotICAgICAgICAgICAgICAgICAgICAib3B0
aW9uYWwiOiB0cnVlLAotICAgICAgICAgICAgICAgICAgICAiaXRlbXMiOiB7ICJ0eXBlIjogInN0
cmluZyIgfSwKLSAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkFycmF5IHZhbHVl
LiIKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0KLSAgICBdCi19
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZ2VuZXJpYy9zaG91bGQtc3RyaXAtY29tbWVudHMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL3Nob3VsZC1zdHJpcC1jb21tZW50
cy5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlY2UxZGNmYzYxY2QwYmEwOTZj
YTkxOGE0NDhiZTEzMzkzM2MyMDFhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9nZW5lcmljL3Nob3VsZC1zdHJpcC1jb21tZW50cy5qc29uCisrKyAvZGV2L251bGwKQEAgLTEs
NSArMCwwIEBACi17Ci0gICAgLyogYWJvdmUgKi8KLSAgICAvKiBiZWZvcmUgKi8gImRvbWFpbiIg
LyogaW4gKi8gOiAvKiBpbiAqLyAiQ29tbWVudCIgLyogYWZ0ZXIgKi8KLSAgICAvKiBiZWxvdyAq
LwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpz
b24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJp
Yy90eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggY2JjOWQ1Mzk0NzhkYjQ5NWM5NjA2N2VjZDU0YTk1YmU1MmY4
ZDA3MC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy90eXBlLWRl
Y2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgorKysgL2Rldi9udWxsCkBAIC0x
LDEwICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIlJ1bnRpbWUiLAotICAgICJ0eXBlcyI6IFsK
LSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIlJlbW90ZU9iamVjdElkIiwKLSAgICAgICAg
ICAgICJ0eXBlIjogImludGVnZXIiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1
ZSBvYmplY3QgaWRlbnRpZmllci4iCi0gICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy90eXBl
LWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL3R5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5q
c29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZmIwOGJkOTQwYjY0ZmI2NjAzOTY1
Y2UxYjA0ZDNmYzk3NDllYTkwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL3R5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCisrKyAvZGV2L251bGwKQEAg
LTEsNTAgKzAsMCBAQAotWwotewotICAgICJkb21haW4iOiAiRGVidWdnZXIiLAotICAgICJ0eXBl
cyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIkJyZWFrcG9pbnRJZCIsCi0gICAg
ICAgICAgICAidHlwZSI6ICJpbnRlZ2VyIgotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAg
ICAgICAiaWQiOiAiUmVhc29uIiwKLSAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCi0gICAg
ICAgICAgICAiZW51bSI6IFsiRGllZCIsICJGYWludGVkIiwgIkh1bmdyeSJdCi0gICAgICAgIH0K
LSAgICBdCi19LAotewotICAgICJkb21haW4iOiAiUnVudGltZSIsCi0gICAgInR5cGVzIjogWwot
ICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiT2JqZWN0SWQiLAotICAgICAgICAgICAgInR5
cGUiOiAiaW50ZWdlciIKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjog
Ikx1Y2t5TnVtYmVycyIsCi0gICAgICAgICAgICAidHlwZSI6ICJhcnJheSIsCi0gICAgICAgICAg
ICAiaXRlbXMiOiB7ICJ0eXBlIjogImludGVnZXIiIH0KLSAgICAgICAgfSwKLSAgICAgICAgewot
ICAgICAgICAgICAgImlkIjogIkJhYnlOYW1lcyIsCi0gICAgICAgICAgICAidHlwZSI6ICJhcnJh
eSIsCi0gICAgICAgICAgICAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfQotICAgICAgICB9
LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiTmV3T2JqZWN0cyIsCi0gICAgICAgICAg
ICAidHlwZSI6ICJhcnJheSIsCi0gICAgICAgICAgICAiaXRlbXMiOiB7ICIkcmVmIjogIk9iamVj
dElkIiB9Ci0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJPbGRPYmpl
Y3RzIiwKLSAgICAgICAgICAgICJ0eXBlIjogImFycmF5IiwKLSAgICAgICAgICAgICJpdGVtcyI6
IHsgIiRyZWYiOiAiRGVidWdnZXIuQnJlYWtwb2ludElkIiB9Ci0gICAgICAgIH0sCi0gICAgICAg
IHsKLSAgICAgICAgICAgICJpZCI6ICJTdG9wUmVhc29ucyIsCi0gICAgICAgICAgICAidHlwZSI6
ICJhcnJheSIsCi0gICAgICAgICAgICAiaXRlbXMiOiB7ICIkcmVmIjogIkRlYnVnZ2VyLlJlYXNv
biIgfQotICAgICAgICB9Ci0gICAgXQotfQotXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvdHlwZS1kZWNsYXJhdGlvbi1l
bnVtLXR5cGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9nZW5lcmljL3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDlmMGFlZTljOTFiOTVhYmFmMzg3ZTcyYTkxYTMzMzhiNTc5ZGE5
YWEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvdHlwZS1kZWNs
YXJhdGlvbi1lbnVtLXR5cGUuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLXsK
LSAgICAiZG9tYWluIjogIlJ1bnRpbWUiLAotICAgICJ0eXBlcyI6IFsKLSAgICAgICAgewotICAg
ICAgICAgICAgImlkIjogIkZhcm1BbmltYWxzIiwKLSAgICAgICAgICAgICJ0eXBlIjogInN0cmlu
ZyIsCi0gICAgICAgICAgICAiZW51bSI6IFsiUGlncyIsICJDb3dzIiwgIkNhdHMiLCAiSGVucyJd
Ci0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJUd29MZWdnZWRBbmlt
YWxzIiwKLSAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCi0gICAgICAgICAgICAiZW51bSI6
IFsiRHVja3MiLCAiSGVucyIsICJDcm93cyIsICJGbGFtaW5nb3MiXQotICAgICAgICB9Ci0gICAg
XQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvdHlwZS1kZWNs
YXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAy
YzQzYzMzMDk5MmRlNjc1ZGI4MGQyOThmZjMzMWE2ZWY1ODk5MzVmLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUu
anNvbgorKysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi1bCi17Ci0gICAgImRvbWFpbiI6
ICJEYXRhYmFzZSIsCi0gICAgImRlc2NyaXB0aW9uIjogIlRlc3QgdHlwZSBidWlsZGVyIGdlbmVy
YXRpb24gb2YgdmFyaW91cyBvYmplY3QgdHlwZXMuIiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAg
IHsKLSAgICAgICAgICAgICJpZCI6ICJFcnJvciIsCi0gICAgICAgICAgICAidHlwZSI6ICJvYmpl
Y3QiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkRhdGFiYXNlIGVycm9yLiIsCi0gICAg
ICAgICAgICAicHJvcGVydGllcyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm1lc3Nh
Z2UiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgbWVzc2FnZS4iIH0s
Ci0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2RlIiwgInR5cGUiOiAiaW50ZWdlciIsICJk
ZXNjcmlwdGlvbiI6ICJFcnJvciBjb2RlLiIgfQotICAgICAgICAgICAgXQotICAgICAgICB9LAot
ICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiRXJyb3JMaXN0IiwKLSAgICAgICAgICAgICJ0
eXBlIjogImFycmF5IiwKLSAgICAgICAgICAgICJpdGVtcyI6IHsgIiRyZWYiOiAiRXJyb3IiIH0K
LSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIk1vdXNlQnV0dG9uIiwK
LSAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24i
OiAiRW51bWVyYXRlcyBkaWZmZXJlbnQgbW91c2UgYnV0dG9ucyB0aGF0IGNhbiBiZSB1c2VkLiIs
Ci0gICAgICAgICAgICAiZW51bSI6IFsKLSAgICAgICAgICAgICAgICAiTm9uZSIsCi0gICAgICAg
ICAgICAgICAgIkxlZnQiLAotICAgICAgICAgICAgICAgICJNaWRkbGUiLAotICAgICAgICAgICAg
ICAgICJSaWdodCIKLSAgICAgICAgICAgIF0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAg
ICAgICAgImlkIjogIk9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlIiwKLSAgICAgICAgICAgICJ0eXBl
IjogIm9iamVjdCIsCi0gICAgICAgICAgICAicHJvcGVydGllcyI6IFsKLSAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAib3B0aW9uYWwiOiB0
cnVlLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAotICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAiYnV0dG9ucyIsICJ0eXBlIjogImFycmF5IiwgIm9wdGlvbmFsIjogdHJ1ZSwgIml0
ZW1zIjogeyAiJHJlZiI6ICJNb3VzZUJ1dHRvbiIgfSB9LAotICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAiZGlyZWN0aW9uYWxpdHkiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsiTFRSIiwg
IlJUTCJdLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJu
b3RlcyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6
IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9i
amVjdCIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBh
eWxvYWQiLCAidHlwZSI6ICJhbnkiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJlcnJvciIsICIkcmVmIjogIkVycm9yIiwgIm9wdGlvbmFsIjogdHJ1ZSB9
LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZXJyb3JMaXN0IiwgIiRyZWYiOiAiRXJyb3JM
aXN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0sCi0gICAg
ICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJQYXJhbWV0ZXJCdW5kbGUiLAotICAgICAgICAgICAg
InR5cGUiOiAib2JqZWN0IiwKLSAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwotICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6
IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJidXR0
b25zIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICIkcmVmIjogIk1vdXNlQnV0dG9uIiB9
IH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkaXJlY3Rpb25hbGl0eSIsICJ0eXBlIjog
InN0cmluZyIsICJlbnVtIjogWyJMVFIiLCAiUlRMIl0gfSwKLSAgICAgICAgICAgICAgICB7ICJu
YW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiB9LAotICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiB9LAotICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiB9LAotICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIgfSwKLSAgICAgICAgICAgICAgICB7ICJu
YW1lIjogImVycm9yIiwgIiRyZWYiOiAiRXJyb3IiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJlcnJvckxpc3QiLCAiJHJlZiI6ICJFcnJvckxpc3QiIH0KLSAgICAgICAgICAgIF0KLSAg
ICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIk9iamVjdFdpdGhQcm9wZXJ0
eU5hbWVDb25mbGljdHMiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkNvbmZsaWN0ZWQg
bmFtZXMgbWF5IGNhdXNlIGdlbmVyYXRlZCBnZXR0ZXJzL3NldHRlcnMgdG8gY2xhc2ggd2l0aCBi
dWlsdC1pbiBJbnNwZWN0b3JPYmplY3QgbWV0aG9kcy4iLAotICAgICAgICAgICAgInR5cGUiOiAi
b2JqZWN0IiwKLSAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwotICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAiaW50ZWdlciIsICJ0eXBlIjogInN0cmluZyIgfSwKLSAgICAgICAgICAgICAgICB7
ICJuYW1lIjogImFycmF5IiwgInR5cGUiOiAic3RyaW5nIiB9LAotICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAic3RyaW5nIiwgInR5cGUiOiAic3RyaW5nIiB9LAotICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAidmFsdWUiLCAidHlwZSI6ICJzdHJpbmciIH0sCi0gICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJvYmplY3QiLCAidHlwZSI6ICJzdHJpbmciIH0KLSAgICAgICAgICAgIF0KLSAgICAg
ICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIkR1bW15T2JqZWN0IiwKLSAgICAg
ICAgICAgICJkZXNjcmlwdGlvbiI6ICJBbiBvcGVuIG9iamVjdCB0aGF0IGRvZXNuJ3QgaGF2ZSBh
bnkgcHJlZGVmaW5lZCBmaWVsZHMuIiwKLSAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIKLSAg
ICAgICAgfQotICAgIF0KLX0sCi17Ci0gICAgImRvbWFpbiI6ICJUZXN0IiwKLSAgICAiZGVzY3Jp
cHRpb24iOiAiVGVzdCB0aGUgZ2VuZXJhdGlvbiBvZiBzcGVjaWFsIGJlaGF2aW9ycyB0aGF0IG9u
bHkgYXBwbHkgdG8gc3BlY2lmaWMgY2xhc3Nlcy4iLAotICAgICJ0eXBlcyI6IFsKLSAgICAgICAg
ewotICAgICAgICAgICAgImlkIjogIlBhcmFtZXRlckJ1bmRsZSIsCi0gICAgICAgICAgICAidHlw
ZSI6ICJvYmplY3QiLAotICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCi0gICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJkaXJlY3Rpb25hbGl0eSIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjog
WyJMVFIiLCAiUlRMIl0gfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImJ1dHRvbnMiLCAi
dHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgIiRyZWYiOiAiRGF0YWJhc2UuTW91c2VCdXR0b24i
IH0gfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAi
YXJyYXkiLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAotICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciIH0sCi0gICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiIH0sCi0gICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiIH0sCi0gICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiB9LAotICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAiZXJyb3IiLCAiJHJlZiI6ICJEYXRhYmFzZS5FcnJvciIgfQotICAgICAgICAg
ICAgXQotICAgICAgICB9Ci0gICAgXQotfQotXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvdHlwZS1yZXF1aXJpbmctcnVu
dGltZS1jYXN0cy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4M2Q5NGJlODk3ZDIyY2MwNThiYjY0NmZlY2Q5YTQ3MzAz
N2I2YjkyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL3R5cGUt
cmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAg
QEAKLVsKLXsKLSAgICAiZG9tYWluIjogIlRlc3QiLAotICAgICJ0eXBlcyI6IFsKLSAgICAgICAg
ewotICAgICAgICAgICAgImlkIjogIlR5cGVOZWVkaW5nQ2FzdCIsCi0gICAgICAgICAgICAidHlw
ZSI6ICJvYmplY3QiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkEgZHVtbXkgdHlwZSB0
aGF0IHJlcXVpcmVzIHJ1bnRpbWUgY2FzdHMsIGFuZCBmb3JjZXMgbm9uLXByaW1pdGl2ZSByZWZl
cmVuY2VkIHR5cGVzIHRvIGFsc28gZW1pdCBydW50aW1lIGNhc3QgaGVscGVycy4iLAotICAgICAg
ICAgICAgInByb3BlcnRpZXMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzdHJpbmci
LCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiU3RyaW5nIG1lbWJlci4iIH0sCi0g
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJudW1iZXIiLCAidHlwZSI6ICJpbnRlZ2VyIiwgImRl
c2NyaXB0aW9uIjogIk51bWJlciBtZW1iZXIuIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAiYW5pbWFscyIsICIkcmVmIjogIkNhc3RlZEFuaW1hbHMiLCAiZGVzY3JpcHRpb24iOiAiRW51
bSBtZW1iZXIuIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiaWQiLCAiJHJlZiI6ICJD
YXN0ZWRPYmplY3RJZCIsICJkZXNjcmlwdGlvbiI6ICJBbGlhc2VkIG1lbWJlci4iIH0sCi0gICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJ0cmVlIiwgIiRyZWYiOiAiUmVjdXJzaXZlT2JqZWN0MSIs
ICJkZXNjcmlwdGlvbiI6ICJSZWN1cnNpdmUgb2JqZWN0IG1lbWJlci4iIH0KLSAgICAgICAgICAg
IF0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIkNhc3RlZE9iamVj
dElkIiwKLSAgICAgICAgICAgICJ0eXBlIjogImludGVnZXIiCi0gICAgICAgIH0sCi0gICAgICAg
IHsKLSAgICAgICAgICAgICJpZCI6ICJVbmNhc3RlZE9iamVjdElkIiwKLSAgICAgICAgICAgICJ0
eXBlIjogImludGVnZXIiCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6
ICJVbmNhc3RlZEFuaW1hbHMiLAotICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKLSAgICAg
ICAgICAgICJlbnVtIjogWyJQaWdzIiwgIkNvd3MiLCAiQ2F0cyIsICJIZW5zIl0KLSAgICAgICAg
fSwKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIkNhc3RlZEFuaW1hbHMiLAotICAgICAg
ICAgICAgInR5cGUiOiAic3RyaW5nIiwKLSAgICAgICAgICAgICJlbnVtIjogWyJEdWNrcyIsICJI
ZW5zIiwgIkNyb3dzIiwgIkZsYW1pbmdvcyJdCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAg
ICAgICAgICJpZCI6ICJSZWN1cnNpdmVPYmplY3QxIiwKLSAgICAgICAgICAgICJ0eXBlIjogIm9i
amVjdCIsCi0gICAgICAgICAgICAicHJvcGVydGllcyI6IFsKLSAgICAgICAgICAgICAgICB7ICJu
YW1lIjogIm9iaiIsICIkcmVmIjogIlJlY3Vyc2l2ZU9iamVjdDIiLCAib3B0aW9uYWwiOiB0cnVl
IH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgImlk
IjogIlJlY3Vyc2l2ZU9iamVjdDIiLAotICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKLSAg
ICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAib2Jq
IiwgIiRyZWYiOiAiUmVjdXJzaXZlT2JqZWN0MSIsICJvcHRpb25hbCI6IHRydWUgfQotICAgICAg
ICAgICAgXQotICAgICAgICB9Ci0gICAgXQotfQotXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvdHlwZS13aXRoLW9wZW4t
cGFyYW1ldGVycy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA5OWIwMjIwZDMxMmI0NjRjNDgxNDM3YjU3MTY1M2Y4MDhkZmU4
ZmI3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL3R5cGUtd2l0
aC1vcGVuLXBhcmFtZXRlcnMuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLXsK
LSAgICAiZG9tYWluIjogIlRlc3QiLAotICAgICJ0eXBlcyI6IFsKLSAgICAgICAgewotICAgICAg
ICAgICAgImlkIjogIk5vT3BlblBhcmFtZXRlcnMiLAotICAgICAgICAgICAgInR5cGUiOiAib2Jq
ZWN0IiwKLSAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwotICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAib25lIiwgInR5cGUiOiAibnVtYmVyIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAidHdvIiwgInR5cGUiOiAibnVtYmVyIiB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0sCi0g
ICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJPcGVuUGFyYW1ldGVycyIsCi0gICAgICAgICAg
ICAidHlwZSI6ICJvYmplY3QiLAotICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCi0gICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJhbHBoYSIsICJ0eXBlIjogIm51bWJlciIgfSwKLSAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogImJldGEiLCAidHlwZSI6ICJudW1iZXIiIH0KLSAgICAgICAgICAg
IF0KLSAgICAgICAgfQotICAgIF0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL3ZlcnNpb24uanNvbiBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL3ZlcnNpb24uanNv
bgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTA3YTVkOTAxNzZiOGZkZjMzNzE4YjMy
ZGIzM2IzYTBhYTM1NjAwOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2Vu
ZXJpYy92ZXJzaW9uLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLXsiZG9tYWlu
cyI6WwotewotICAgICJkb21haW4iOiAiVmVyc2lvbkRvbWFpbiIsCi0gICAgInZlcnNpb24iOiA0
MgotfQotXX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9pb3MvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbiBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9pb3MvZGVmaW5pdGlvbnMt
d2l0aC1tYWMtcGxhdGZvcm0uanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODE3
ZjEzNWVlNWE3MjA5N2FlM2UxMzFiZGQ0MGU2MDE2OThhYjEwYy4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvaW9zL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24K
KysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi17Ci0gICAgImRvbWFpbiI6ICJOZXR3b3Jr
IiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJOZXR3b3Jr
RXJyb3IiLAotICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKLSAgICAgICAgICAgICJwbGF0
Zm9ybSI6ICJtYWNvcyIsCi0gICAgICAgICAgICAicHJvcGVydGllcyI6IFsKLSAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogIm1lc3NhZ2UiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24i
OiAiRXJyb3IgbWVzc2FnZS4iIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2RlIiwg
InR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBjb2RlLiIgfQotICAgICAg
ICAgICAgXQotICAgICAgICB9Ci0gICAgXSwKLSAgICAiY29tbWFuZHMiOiBbCi0gICAgICAgIHsK
LSAgICAgICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJjZSIsCi0gICAgICAgICAgICAicGxhdGZv
cm0iOiAibWFjb3MiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3Vy
Y2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91
dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKLSAgICAgICAgfQotICAgIF0sCi0gICAgImV2ZW50cyI6
IFsKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAicmVzb3VyY2VMb2FkZWQiLAotICAg
ICAgICAgICAgInBsYXRmb3JtIjogIm1hY29zIiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6
ICJBIHJlc291cmNlIHdhcyBsb2FkZWQuIgotICAgICAgICB9Ci0gICAgXQotfQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2lvcy9leHBl
Y3RlZC9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uLXJlc3VsdCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9pb3MvZXhwZWN0ZWQvZGVmaW5p
dGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbi1yZXN1bHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGQ0YzBmZTNmZTNjNmJiZGMxMDM2MmQxZTBjMzlmOThjN2FjMzZlNWQuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2lvcy9leHBlY3RlZC9kZWZpbml0aW9ucy13
aXRoLW1hYy1wbGF0Zm9ybS5qc29uLXJlc3VsdAorKysgL2Rldi9udWxsCkBAIC0xLDg3MCArMCww
IEBACi0jIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0u
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotIyMjIEVuZCBG
aWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUo
SU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQotI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bFR5cGVzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRl
ci5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERp
c3BhdGNoZXIgewotcHVibGljOgotICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRy
PEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9
IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KLSAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERp
c3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Ci1w
cml2YXRlOgotICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hl
cjsKLX07Ci0KLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jZW5kaWYgLy8gRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jIyMgRW5kIEZpbGU6IFRlc3RB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tl
bmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5p
dGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9i
amVjdHMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5z
cGVjdG9yIHsKLQotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KLQotCi19IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3Rm
L0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKLSNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgi
Ci0jZW5kaWYKLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0K
LSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1
ZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3Bl
Y3RvciB7Ci0KLWNsYXNzIEZyb250ZW5kUm91dGVyOwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0
Zi9Bc3NlcnRpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotbmFtZXNwYWNl
IFByb3RvY29sIHsKLQotCi0KLQotCi0KLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0K
LX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmpl
Y3RzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0u
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotCi0jaW5jbHVk
ZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1l
c3BhY2UgSW5zcGVjdG9yIHsKLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLX0gLy8gbmFt
ZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIu
aD4KLQotCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9y
bS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBv
cnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgi
Ci0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2luY2x1ZGUgIlRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLW5h
bWVzcGFjZSBJbnNwZWN0b3IgewotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rl
c3RQcm90b2NvbC5oPgotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkK
LUBpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0Ci1AZW5kCi0K
LQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24uaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNp
bXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotI2ltcG9ydCA8SmF2YVNj
cmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KLSNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLQotdXNpbmcg
bmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZp
Z3VyYXRpb24KLXsKLSAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9s
bGVyOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJs
ZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGlu
aXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29u
dHJvbGxlcik7Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxm
OwotfQotCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLUBl
bmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRl
c3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucy5oIgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIElu
c3BlY3RvcjsKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMu
bW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxGb3VuZGF0aW9u
L0ZvdW5kYXRpb24uaD4KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9i
amVjdC5oPgotCi0KLQotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xQ
bGF0Zm9ybSkgewotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsLAotICAgIFRlc3RQcm90b2Nv
bFBsYXRmb3JtR2VuZXJpYywKLSAgICBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUywKLSAgICBUZXN0
UHJvdG9jb2xQbGF0Zm9ybU1hY09TLAotfTsKLQotCi0KLQotCi0KLQotCi0KLQotI2ltcG9ydCA8
V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgotCi0j
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xJbnRlcm5hbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlv
bnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90
b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50
YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0K
LQotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2Nv
bC5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5o
PgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1U
eXBlPgotT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3Ry
aW5nJiB2YWx1ZSk7Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9j
b2xQbGF0Zm9ybSB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQ
cm90b2NvbFBsYXRmb3JtQWxsOgotICAgICAgICByZXR1cm4gImFsbCJfczsKLSAgICBjYXNlIFRl
c3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzoKLSAgICAgICAgcmV0dXJuICJnZW5lcmljIl9zOwot
ICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1JT1M6Ci0gICAgICAgIHJldHVybiAiaW9zIl9z
OwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1NYWNPUzoKLSAgICAgICAgcmV0dXJuICJt
YWNvcyJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJv
dG9jb2xQbGF0Zm9ybT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17
Ci0gICAgaWYgKHZhbHVlID09ICJhbGwiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxh
dGZvcm1BbGw7Ci0gICAgaWYgKHZhbHVlID09ICJnZW5lcmljIikKLSAgICAgICAgcmV0dXJuIFRl
c3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzsKLSAgICBpZiAodmFsdWUgPT0gImlvcyIpCi0gICAg
ICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9ybUlPUzsKLSAgICBpZiAodmFsdWUgPT0gIm1h
Y29zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtTWFjT1M7Ci0gICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVz
dFByb3RvY29sVHlwZVBhcnNlci5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29s
SlNPTk9iamVjdFByaXZhdGUuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0K
LQotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0KLSMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29s
SW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0j
aW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotI2lt
cG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLXVz
aW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xU
eXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL21hYy9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL21hYy9kZWZpbml0aW9ucy13
aXRoLW1hYy1wbGF0Zm9ybS5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MTdm
MTM1ZWU1YTcyMDk3YWUzZTEzMWJkZDQwZTYwMTY5OGFiMTBjLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9tYWMvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgor
KysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIk5ldHdvcmsi
LAotICAgICJ0eXBlcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIk5ldHdvcmtF
cnJvciIsCi0gICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAotICAgICAgICAgICAgInBsYXRm
b3JtIjogIm1hY29zIiwKLSAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwotICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAibWVzc2FnZSIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6
ICJFcnJvciBtZXNzYWdlLiIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvZGUiLCAi
dHlwZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIGNvZGUuIiB9Ci0gICAgICAg
ICAgICBdCi0gICAgICAgIH0KLSAgICBdLAotICAgICJjb21tYW5kcyI6IFsKLSAgICAgICAgewot
ICAgICAgICAgICAgIm5hbWUiOiAibG9hZFJlc291cmNlIiwKLSAgICAgICAgICAgICJwbGF0Zm9y
bSI6ICJtYWNvcyIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9hZHMgYSByZXNvdXJj
ZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFnZSB3aXRob3V0
IGNyb3NzIG9yaWdpbiBjaGVja3MuIgotICAgICAgICB9Ci0gICAgXSwKLSAgICAiZXZlbnRzIjog
WwotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJyZXNvdXJjZUxvYWRlZCIsCi0gICAg
ICAgICAgICAicGxhdGZvcm0iOiAibWFjb3MiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjog
IkEgcmVzb3VyY2Ugd2FzIGxvYWRlZC4iCi0gICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvbWFjL2V4cGVj
dGVkL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24tcmVzdWx0IGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL21hYy9leHBlY3RlZC9kZWZpbml0
aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uLXJlc3VsdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggYzZlNjhmNGE5YWVkZDNkODQzNjcwYTIyZjBjYjgzNTMxN2VmNjQwNC4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvbWFjL2V4cGVjdGVkL2RlZmluaXRpb25zLXdp
dGgtbWFjLXBsYXRmb3JtLmpzb24tcmVzdWx0CisrKyAvZGV2L251bGwKQEAgLTEsMTIxNyArMCww
IEBACi0jIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0u
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0vLyBOZXR3
b3JrCi1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJOZXR3b3JrIiwgbnVsbCk7Ci1J
bnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiTmV0d29yay5sb2FkUmVzb3VyY2UiLCBu
dWxsLCBbXSwgW10pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckV2ZW50KCJOZXR3b3JrLnJl
c291cmNlTG9hZGVkIiwgbnVsbCwgW10pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rlck5ldHdv
cmtEaXNwYXRjaGVyID0gSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRpc3BhdGNoZXIuYmluZChJ
bnNwZWN0b3JCYWNrZW5kLCAiTmV0d29yayIpOwotSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURv
bWFpbigiTmV0d29yayIsIG51bGwpOwotIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29t
bWFuZHMuanMKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hl
cnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgt
bWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCi0jaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotCi1uYW1lc3BhY2UgSW5zcGVj
dG9yIHsKLQotY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAg
IHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRp
c3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0K
LSAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVy
biBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Ci1wcml2YXRlOgotICAgIFJlZlB0cjxCYWNr
ZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKLX07Ci0KLQotY2xhc3MgQWx0ZXJu
YXRlTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJhY2tlbmREaXNw
YXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5BbHRlcm5hdGVOZXR3b3JrQmFja2VuZERp
c3BhdGNoZXIoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgY2FsbElk
KSA9IDA7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotI2VuZGlmIC8vIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotIyMjIEVuZCBGaWxlOiBUZXN0QWx0
ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5k
RGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRp
b25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmpl
Y3RzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3Bl
Y3RvciB7Ci0KLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCi0jaWYgRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi1jbGFzcyBBbHRlcm5hdGVOZXR3b3JrQmFja2Vu
ZERpc3BhdGNoZXI7Ci0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCi0KLWNsYXNzIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewotcHVibGlj
OgotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UoRXJyb3JTdHJpbmcmKSA9IDA7Ci1wcm90
ZWN0ZWQ6Ci0gICAgdmlydHVhbCB+TmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOwot
fTsKLQotY2xhc3MgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBs
ZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE5ldHdv
cmtCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgTmV0d29ya0Jh
Y2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0
SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZp
bmFsOwotcHJpdmF0ZToKLSAgICB2b2lkIGxvYWRSZXNvdXJjZShsb25nIHJlcXVlc3RJZCwgUmVm
UHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKLXB1YmxpYzoKLSAgICB2b2lkIHNldEFsdGVybmF0ZURpc3Bh
dGNoZXIoQWx0ZXJuYXRlTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRj
aGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KLXBy
aXZhdGU6Ci0gICAgQWx0ZXJuYXRlTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyKiBtX2FsdGVybmF0
ZURpc3BhdGNoZXIgeyBudWxscHRyIH07Ci0jZW5kaWYKLXByaXZhdGU6Ci0gICAgTmV0d29ya0Jh
Y2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiwgTmV0d29ya0JhY2tlbmREaXNwYXRj
aGVySGFuZGxlciopOwotICAgIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdl
bnQgeyBudWxscHRyIH07Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQg
RmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFj
a2VuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRl
ZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRl
IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0K
LSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSNpbmNsdWRlICJU
ZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIElu
c3BlY3RvciB7Ci0KLU5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5OZXR3b3JrQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9Ci0KLVJlZjxOZXR3b3JrQmFja2VuZERpc3BhdGNo
ZXI+IE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiBi
YWNrZW5kRGlzcGF0Y2hlciwgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQp
Ci17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyKGJh
Y2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOwotfQotCi1OZXR3b3JrQmFja2VuZERpc3BhdGNoZXI6
Ok5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3Bh
dGNoZXIsIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQotICAgIDogU3Vw
cGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCi0gICAgLCBtX2Fn
ZW50KGFnZW50KQotewotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hl
ckZvckRvbWFpbigiTmV0d29yayJfcywgdGhpcyk7Ci19Ci0KLXZvaWQgTmV0d29ya0JhY2tlbmRE
aXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2Qs
IFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKLXsKLSAgICBSZWY8TmV0d29ya0JhY2tlbmRE
aXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKLQotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBh
cmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRlcnMp
OwotCi0gICAgaWYgKG1ldGhvZCA9PSAibG9hZFJlc291cmNlIikKLSAgICAgICAgbG9hZFJlc291
cmNlKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7Ci0gICAgZWxzZQotICAgICAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVy
OjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrLiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5k
Iik7Ci19Ci0KLXZvaWQgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UobG9u
ZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCi17Ci0jaWYgRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0gICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hl
cikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZShyZXF1ZXN0
SWQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBFcnJvclN0cmluZyBl
cnJvcjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpOwotICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZShlcnJvcik7Ci0KLSAgICBpZiAoIWVycm9y
Lmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVx
dWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFj
a2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNl
cnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgotCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1
ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsK
LQotY2xhc3MgRnJvbnRlbmRSb3V0ZXI7Ci0KLWNsYXNzIE5ldHdvcmtGcm9udGVuZERpc3BhdGNo
ZXIgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIE5ldHdvcmtG
cm9udGVuZERpc3BhdGNoZXIoRnJvbnRlbmRSb3V0ZXImIGZyb250ZW5kUm91dGVyKSA6IG1fZnJv
bnRlbmRSb3V0ZXIoZnJvbnRlbmRSb3V0ZXIpIHsgfQotICAgIHZvaWQgcmVzb3VyY2VMb2FkZWQo
KTsKLXByaXZhdGU6Ci0gICAgRnJvbnRlbmRSb3V0ZXImIG1fZnJvbnRlbmRSb3V0ZXI7Ci19Owot
Ci19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlz
cGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3Bw
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMt
cGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMu
aCIKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsK
LQotdm9pZCBOZXR3b3JrRnJvbnRlbmREaXNwYXRjaGVyOjpyZXNvdXJjZUxvYWRlZCgpCi17Ci0g
ICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIk5ldHdvcmsucmVzb3Vy
Y2VMb2FkZWQiX3MpOwotCi0gICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3Nh
Z2UtPnRvSlNPTlN0cmluZygpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMj
IyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRp
b25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotbmFtZXNwYWNlIFByb3RvY29s
IHsKLQotCi0KLS8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgotbmFtZXNwYWNlIE5ldHdvcmsgewot
Y2xhc3MgTmV0d29ya0Vycm9yOwotfSAvLyBOZXR3b3JrCi0vLyBFbmQgb2YgZm9yd2FyZCBkZWNs
YXJhdGlvbnMuCi0KLQotCi0KLW5hbWVzcGFjZSBOZXR3b3JrIHsKLWNsYXNzIE5ldHdvcmtFcnJv
ciA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKLXB1YmxpYzoKLSAgICBlbnVtIHsKLSAgICAg
ICAgTm9GaWVsZHNTZXQgPSAwLAotICAgICAgICBNZXNzYWdlU2V0ID0gMSA8PCAwLAotICAgICAg
ICBDb2RlU2V0ID0gMSA8PCAxLAotICAgICAgICBBbGxGaWVsZHNTZXQgPSAoTWVzc2FnZVNldCB8
IENvZGVTZXQpCi0gICAgfTsKLQotICAgIHRlbXBsYXRlPGludCBTVEFURT4KLSAgICBjbGFzcyBC
dWlsZGVyIHsKLSAgICBwcml2YXRlOgotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBtX3Jl
c3VsdDsKLQotICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+
JiBjYXN0U3RhdGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0
X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBCdWlsZGVyKFJlZjwvKk5ldHdvcmtFcnJvciovSlNPTjo6T2JqZWN0PiYmIG9iamVjdCkKLSAg
ICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVk
X2luX25vbl9pbml0X3N0YXRlKTsKLSAgICAgICAgfQotICAgICAgICBmcmllbmQgY2xhc3MgTmV0
d29ya0Vycm9yOwotICAgIHB1YmxpYzoKLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTWVzc2Fn
ZVNldD4mIHNldE1lc3NhZ2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICAgICAgewotICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE1lc3NhZ2VTZXQpLCBwcm9wZXJ0eV9tZXNz
YWdlX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1lc3Nh
Z2UiX3MsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TWVzc2FnZVNldD4o
KTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2RlU2V0PiYgc2V0Q29k
ZShpbnQgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBDb2RlU2V0KSwgcHJvcGVydHlfY29kZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0SW50ZWdlcigiY29kZSJfcywgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxDb2RlU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgUmVmPE5ldHdvcmtF
cnJvcj4gcmVsZWFzZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNU
QVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7Ci0gICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChzaXplb2YoTmV0d29ya0Vycm9yKSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0
KSwgY2Fubm90X2Nhc3QpOwotCi0gICAgICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uUmVz
dWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKLSAgICAgICAgICAgIGF1dG8gcmVzdWx0
ID0gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8TmV0d29ya0Vycm9yPio+KCZqc29uUmVz
dWx0KSk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgfTsKLQot
ICAgIC8qCi0gICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgotICAgICAqIFJlZjxOZXR3b3Jr
RXJyb3I+IHJlc3VsdCA9IE5ldHdvcmtFcnJvcjo6Y3JlYXRlKCkKLSAgICAgKiAgICAgLnNldE1l
c3NhZ2UoLi4uKQotICAgICAqICAgICAuc2V0Q29kZSguLi4pCi0gICAgICogICAgIC5yZWxlYXNl
KCk7Ci0gICAgICovCi0gICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCi0g
ICAgewotICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKSk7Ci0gICAgfQotfTsKLQotfSAvLyBOZXR3b3JrCi0KLQotCi19IC8vIG5hbWVzcGFj
ZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sT2JqZWN0cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3Rz
LmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgt
bWFjLXBsYXRmb3JtLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMu
aCIKLQotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0K
LQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
LQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbmNsdWRlIDx3
dGYvUmV0YWluUHRyLmg+Ci0KLUBwcm90b2NvbCBUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluSGFu
ZGxlcjsKLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotY2xhc3MgT2JqQ0luc3BlY3Rvck5l
dHdvcmtCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVOZXR3b3JrQmFj
a2VuZERpc3BhdGNoZXIgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgot
ICAgIE9iakNJbnNwZWN0b3JOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29s
TmV0d29ya0RvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0K
LSAgICB2b2lkIGxvYWRSZXNvdXJjZShsb25nIHJlcXVlc3RJZCkgZmluYWw7Ci1wcml2YXRlOgot
ICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluSGFuZGxlcj4+IG1fZGVs
ZWdhdGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQg
IlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSAiVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIK
LSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQot
dm9pZCBPYmpDSW5zcGVjdG9yTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2Uo
bG9uZyByZXF1ZXN0SWQpCi17Ci0gICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0
b3I6QHNlbGVjdG9yKGxvYWRSZXNvdXJjZVdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFj
azopXSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9y
KHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmsu
bG9hZFJlc291cmNlJyB3YXMgbm90IGZvdW5kIl9zKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5k
RGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3Bh
dGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCkt
PnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgfTsKLQotICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9
IF57Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQs
IEpTT046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKLSAgICB9OwotCi0gICAgW21fZGVsZWdh
dGUgbG9hZFJlc291cmNlV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2Fs
bGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKLX0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
LQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8V2ViSW5z
cGVjdG9yL1Rlc3RQcm90b2NvbC5oPgotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVm
YXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0
Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluLCBzZXR0ZXI9c2V0TmV0d29ya0hhbmRsZXI6
KSBpZDxUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluSGFuZGxlcj4gbmV0d29ya0hhbmRsZXI7Ci1A
cHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5F
dmVudERpc3BhdGNoZXIgKm5ldHdvcmtFdmVudERpc3BhdGNoZXI7Ci1AZW5kCi0KLQotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3Vy
YXRpb24uaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbXBvcnQgIlRl
c3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1
Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLQotdXNpbmcgbmFtZXNwYWNl
IEluc3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24K
LXsKLSAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotICAg
IGlkPFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5IYW5kbGVyPiBfbmV0d29ya0hhbmRsZXI7Ci0g
ICAgVGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkV2ZW50RGlzcGF0Y2hlciAqX25ldHdvcmtFdmVu
dERpc3BhdGNoZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1
Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBb
c3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFT
U0VSVChjb250cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0
dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAgIFtfbmV0d29ya0hhbmRsZXIg
cmVsZWFzZV07Ci0gICAgW19uZXR3b3JrRXZlbnREaXNwYXRjaGVyIHJlbGVhc2VdOwotICAgIFtz
dXBlciBkZWFsbG9jXTsKLX0KLQotLSAodm9pZClzZXROZXR3b3JrSGFuZGxlcjooaWQ8VGVzdFBy
b3RvY29sTmV0d29ya0RvbWFpbkhhbmRsZXI+KWhhbmRsZXIKLXsKLSAgICBpZiAoaGFuZGxlciA9
PSBfbmV0d29ya0hhbmRsZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIFtfbmV0d29ya0hhbmRs
ZXIgcmVsZWFzZV07Ci0gICAgX25ldHdvcmtIYW5kbGVyID0gW2hhbmRsZXIgcmV0YWluXTsKLQot
ICAgIGF1dG8gYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IG1ha2VVbmlxdWU8T2JqQ0luc3BlY3Rvck5l
dHdvcmtCYWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7Ci0gICAgYXV0byBhbHRlcm5hdGVBZ2Vu
dCA9IG1ha2VVbmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8TmV0d29ya0JhY2tlbmRE
aXNwYXRjaGVyLCBBbHRlcm5hdGVOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI+PigiTmV0d29yayJf
cywgKl9jb250cm9sbGVyLCBXVEZNb3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIpKTsKLSAgICBfY29u
dHJvbGxlci0+YXBwZW5kRXh0cmFBZ2VudChXVEZNb3ZlKGFsdGVybmF0ZUFnZW50KSk7Ci19Ci0K
LS0gKGlkPFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5IYW5kbGVyPiluZXR3b3JrSGFuZGxlcgot
ewotICAgIHJldHVybiBfbmV0d29ya0hhbmRsZXI7Ci19Ci0KLS0gKFRlc3RQcm90b2NvbE5ldHdv
cmtEb21haW5FdmVudERpc3BhdGNoZXIgKiluZXR3b3JrRXZlbnREaXNwYXRjaGVyCi17Ci0gICAg
aWYgKCFfbmV0d29ya0V2ZW50RGlzcGF0Y2hlcikKLSAgICAgICAgX25ldHdvcmtFdmVudERpc3Bh
dGNoZXIgPSBbW1Rlc3RQcm90b2NvbE5ldHdvcmtEb21haW5FdmVudERpc3BhdGNoZXIgYWxsb2Nd
IGluaXRXaXRoQ29udHJvbGxlcjpfY29udHJvbGxlcl07Ci0gICAgcmV0dXJuIF9uZXR3b3JrRXZl
bnREaXNwYXRjaGVyOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xD
b25maWd1cmF0aW9uLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3Bh
dGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMt
d2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+
Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJv
dG9jb2xOZXR3b3JrRG9tYWluRXZlbnREaXNwYXRjaGVyCi17Ci0gICAgQXVnbWVudGFibGVJbnNw
ZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVy
Ci17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJl
dHVybiBuaWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIpOwotICAgIF9jb250cm9sbGVyID0gY29u
dHJvbGxlcjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClyZXNvdXJjZUxvYWRlZAot
ewotICAgIGNvbnN0IEZyb250ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29udHJvbGxlci0+ZnJvbnRl
bmRSb3V0ZXIoKTsKLQotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3Ms
ICJOZXR3b3JrLnJlc291cmNlTG9hZGVkIl9zKTsKLSAgICByb3V0ZXIuc2VuZEV2ZW50KGpzb25N
ZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0
aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2ltcG9ydCA8V2Vi
SW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgotCi0KLUBjbGFzcyBUZXN0UHJvdG9j
b2xOZXR3b3JrRXJyb3I7Ci0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2Nv
bFBsYXRmb3JtKSB7Ci0gICAgVGVzdFByb3RvY29sUGxhdGZvcm1BbGwsCi0gICAgVGVzdFByb3Rv
Y29sUGxhdGZvcm1HZW5lcmljLAotICAgIFRlc3RQcm90b2NvbFBsYXRmb3JtSU9TLAotICAgIFRl
c3RQcm90b2NvbFBsYXRmb3JtTWFjT1MsCi19OwotCi0KLQotCi1fX2F0dHJpYnV0ZV9fKCh2aXNp
YmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sTmV0d29ya0Vycm9y
IDogUldJUHJvdG9jb2xKU09OT2JqZWN0Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2Fk
OihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKLS0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aFByb3RvY29sT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2Jq
ZWN0OwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdl
IGNvZGU6KGludCljb2RlOwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNv
cHkpIE5TU3RyaW5nICptZXNzYWdlOwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9t
aWMsIGFzc2lnbikgaW50IGNvZGU7Ci1AZW5kCi0KLUBwcm90b2NvbCBUZXN0UHJvdG9jb2xOZXR3
b3JrRG9tYWluSGFuZGxlciA8TlNPYmplY3Q+Ci1Ab3B0aW9uYWwKLS0gKHZvaWQpbG9hZFJlc291
cmNlV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxi
YWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKSh2b2lkKSlzdWNjZXNzQ2FsbGJhY2s7Ci1AZW5k
Ci0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBU
ZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluRXZlbnREaXNwYXRjaGVyIDogTlNPYmplY3QKLS0gKHZv
aWQpcmVzb3VyY2VMb2FkZWQ7Ci1AZW5kCi0KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVBy
b3RvY29sQnVpbGRDb21wYXRpYmlsaXR5T2JqZWN0cy5oPgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZv
cm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1w
b3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2
YXRlLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRy
b2xsZXIuaD4KLSNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+Ci0KLUBpbnRlcmZhY2UgVGVzdFBy
b3RvY29sTmV0d29ya0RvbWFpbkV2ZW50RGlzcGF0Y2hlciAoUHJpdmF0ZSkKLS0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEluc3BlY3Rvcjo6QXVnbWVudGFibGVJbnNwZWN0b3JD
b250cm9sbGVyKiljb250cm9sbGVyOwotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRo
LW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JX
SVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQot
dGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgotT3B0aW9uYWw8T2JqQ0VudW1UeXBlPiBm
cm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0KLWlubGluZSBTdHJpbmcg
dG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xQbGF0Zm9ybSB2YWx1ZSkKLXsKLSAgICBzd2l0
Y2godmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtQWxsOgotICAgICAgICBy
ZXR1cm4gImFsbCJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzoKLSAg
ICAgICAgcmV0dXJuICJnZW5lcmljIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZvcm1J
T1M6Ci0gICAgICAgIHJldHVybiAiaW9zIl9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sUGxhdGZv
cm1NYWNPUzoKLSAgICAgICAgcmV0dXJuICJtYWNvcyJfczsKLSAgICB9Ci19Ci0KLXRlbXBsYXRl
PD4KLWlubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xQbGF0Zm9ybT4gZnJvbVByb3RvY29sU3Ry
aW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJhbGwiKQotICAg
ICAgICByZXR1cm4gVGVzdFByb3RvY29sUGxhdGZvcm1BbGw7Ci0gICAgaWYgKHZhbHVlID09ICJn
ZW5lcmljIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFBsYXRmb3JtR2VuZXJpYzsKLSAg
ICBpZiAodmFsdWUgPT0gImlvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xQbGF0Zm9y
bUlPUzsKLSAgICBpZiAodmFsdWUgPT0gIm1hY29zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90
b2NvbFBsYXRmb3JtTWFjT1M7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotCi0KLX0g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRo
LW1hYy1wbGF0Zm9ybS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotCi0jaW1wb3J0
ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKLSNp
bXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0KLXVz
aW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zIChOZXR3b3JrRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZU5ldHdvcmtFcnJvcjoo
VGVzdFByb3RvY29sTmV0d29ya0Vycm9yICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXls
b2FkOwotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMgKE5ldHdvcmtEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlTmV0d29ya0Vycm9yOihUZXN0UHJv
dG9jb2xOZXR3b3JrRXJyb3IgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsK
LSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkg
Y2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbE5ldHdvcmtFcnJvciBhbGxv
Y10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbFR5cGVzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5p
dGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1w
b3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rv
ci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9u
cy5oPgotI2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3Bl
Y3RvcjsKLQotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sTmV0d29ya0Vycm9yCi0KLS0g
KGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3Ry
aW5nICosIGlkPiAqKXBheWxvYWQKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkK
LSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURf
UFJPUEVSVFkocGF5bG9hZFtAIm1lc3NhZ2UiXSwgQCJtZXNzYWdlIik7Ci0gICAgc2VsZi5tZXNz
YWdlID0gcGF5bG9hZFtAIm1lc3NhZ2UiXTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVR
VUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImNvZGUiXSwgQCJjb2RlIik7Ci0gICAgc2VsZi5jb2Rl
ID0gW3BheWxvYWRbQCJjb2RlIl0gaW50ZWdlclZhbHVlXTsKLQotICAgIHJldHVybiBzZWxmOwot
fQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdG9jb2xPYmplY3Q6KFJXSVByb3RvY29sSlNP
Tk9iamVjdCAqKW9iamVjdAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhKU09O
T2JqZWN0OltvYmplY3QgdG9KU09OT2JqZWN0XS5nZXQoKV0pKQotICAgICAgICByZXR1cm4gbmls
OwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aE1lc3Nh
Z2U6KE5TU3RyaW5nICopbWVzc2FnZSBjb2RlOihpbnQpY29kZQotewotICAgIGlmICghKHNlbGYg
PSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShtZXNzYWdlLCBAIm1lc3NhZ2UiKTsKLQotICAgIHNl
bGYubWVzc2FnZSA9IG1lc3NhZ2U7Ci0gICAgc2VsZi5jb2RlID0gY29kZTsKLQotICAgIHJldHVy
biBzZWxmOwotfQotCi0tICh2b2lkKXNldE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZQotewot
ICAgIFtzdXBlciBzZXRTdHJpbmc6bWVzc2FnZSBmb3JLZXk6QCJtZXNzYWdlIl07Ci19Ci0KLS0g
KE5TU3RyaW5nICopbWVzc2FnZQotewotICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAi
bWVzc2FnZSJdOwotfQotCi0tICh2b2lkKXNldENvZGU6KGludCljb2RlCi17Ci0gICAgW3N1cGVy
IHNldEludGVnZXI6Y29kZSBmb3JLZXk6QCJjb2RlIl07Ci19Ci0KLS0gKGludCljb2RlCi17Ci0g
ICAgcmV0dXJuIFtzdXBlciBpbnRlZ2VyRm9yS2V5OkAiY29kZSJdOwotfQotCi1AZW5kCi0KLQot
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3NhbWUtdHlwZS1pZC1kaWZmZXJl
bnQtZG9tYWluLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zYmY0
ZGZmNWNjYzI5ZDBlOGMxZmE0YjJkZDMyODNlNzcxNjMyYzdkCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3NhbWUtdHlwZS1p
ZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KQEAgLTAsMCArMSwyMiBAQAorWworeworICAgICJkb21h
aW4iOiAiUnVudGltZSIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAi
aWQiOiAiUmVtb3RlT2JqZWN0SWQiLAorICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAg
ICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIuIgorICAg
ICAgICB9CisgICAgXQorfSwKK3sKKyAgICAiZG9tYWluIjogIlJ1bnRpbWUyIiwKKyAgICAidHlw
ZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJSZW1vdGVPYmplY3RJZCIsCisg
ICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjog
IlVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4iCisgICAgICAgIH0KKyAgICBdCit9CitdCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvc2hh
ZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpz
b24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMjBhMGMxNTUyNzUwZjYyODI4OGNmZjQxOTM5NmJkNmY2YWY3NDlmZQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9zaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgpAQCAtMCwwICsxLDMx
IEBACit7CisgICAgImRvbWFpbiI6ICJSdW50aW1lIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAg
IHsKKyAgICAgICAgICAgICJpZCI6ICJLZXlQYXRoIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9i
amVjdCIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiS2V5IHBhdGguIiwKKyAgICAgICAg
ICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgIm5hbWUiOiAidHlwZSIsCisgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIs
CisgICAgICAgICAgICAgICAgICAgICJlbnVtIjogWyJudWxsIiwgInN0cmluZyIsICJhcnJheSJd
LAorICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiS2V5IHBhdGggdHlwZS4iCisg
ICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICJuYW1lIjogInN0cmluZyIsCisgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIs
CisgICAgICAgICAgICAgICAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAgICAgICAgICAg
ICAgICJkZXNjcmlwdGlvbiI6ICJTdHJpbmcgdmFsdWUuIgorICAgICAgICAgICAgICAgIH0sCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJhcnJheSIsCisg
ICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImFycmF5IiwKKyAgICAgICAgICAgICAgICAgICAg
Im9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgIml0ZW1zIjogeyAidHlwZSI6
ICJzdHJpbmciIH0sCisgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJBcnJheSB2
YWx1ZS4iCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAg
XQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL3Nob3VsZC1zdHJpcC1jb21tZW50cy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3Nob3VsZC1zdHJpcC1jb21tZW50cy5qc29uCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmVjZTFkY2ZjNjFjZDBiYTA5NmNhOTE4YTQ0OGJlMTMzOTMzYzIwMWEKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
c2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24KQEAgLTAsMCArMSw1IEBACit7CisgICAgLyogYWJv
dmUgKi8KKyAgICAvKiBiZWZvcmUgKi8gImRvbWFpbiIgLyogaW4gKi8gOiAvKiBpbiAqLyAiQ29t
bWVudCIgLyogYWZ0ZXIgKi8KKyAgICAvKiBiZWxvdyAqLworfQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRpb24t
YWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlw
ZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmNiYzlkNTM5NDc4ZGI0OTVjOTYwNjdlY2Q1NGE5NWJlNTJmOGQw
NzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24K
QEAgLTAsMCArMSwxMCBAQAoreworICAgICJkb21haW4iOiAiUnVudGltZSIsCisgICAgInR5cGVz
IjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiUmVtb3RlT2JqZWN0SWQiLAorICAg
ICAgICAgICAgInR5cGUiOiAiaW50ZWdlciIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAi
VW5pcXVlIG9iamVjdCBpZGVudGlmaWVyLiIKKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLWRl
Y2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5jZmIwOGJkOTQwYjY0ZmI2NjAzOTY1Y2UxYjA0ZDNmYzk3NDllYTkwCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5
cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCkBAIC0wLDAgKzEsNTAgQEAKK1sKK3sKKyAg
ICAiZG9tYWluIjogIkRlYnVnZ2VyIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAg
ICAgICAgICJpZCI6ICJCcmVha3BvaW50SWQiLAorICAgICAgICAgICAgInR5cGUiOiAiaW50ZWdl
ciIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlJlYXNvbiIsCisg
ICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgImVudW0iOiBbIkRpZWQi
LCAiRmFpbnRlZCIsICJIdW5ncnkiXQorICAgICAgICB9CisgICAgXQorfSwKK3sKKyAgICAiZG9t
YWluIjogIlJ1bnRpbWUiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAg
ImlkIjogIk9iamVjdElkIiwKKyAgICAgICAgICAgICJ0eXBlIjogImludGVnZXIiCisgICAgICAg
IH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJMdWNreU51bWJlcnMiLAorICAgICAg
ICAgICAgInR5cGUiOiAiYXJyYXkiLAorICAgICAgICAgICAgIml0ZW1zIjogeyAidHlwZSI6ICJp
bnRlZ2VyIiB9CisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJCYWJ5
TmFtZXMiLAorICAgICAgICAgICAgInR5cGUiOiAiYXJyYXkiLAorICAgICAgICAgICAgIml0ZW1z
IjogeyAidHlwZSI6ICJzdHJpbmciIH0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAg
ICAgImlkIjogIk5ld09iamVjdHMiLAorICAgICAgICAgICAgInR5cGUiOiAiYXJyYXkiLAorICAg
ICAgICAgICAgIml0ZW1zIjogeyAiJHJlZiI6ICJPYmplY3RJZCIgfQorICAgICAgICB9LAorICAg
ICAgICB7CisgICAgICAgICAgICAiaWQiOiAiT2xkT2JqZWN0cyIsCisgICAgICAgICAgICAidHlw
ZSI6ICJhcnJheSIsCisgICAgICAgICAgICAiaXRlbXMiOiB7ICIkcmVmIjogIkRlYnVnZ2VyLkJy
ZWFrcG9pbnRJZCIgfQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAi
U3RvcFJlYXNvbnMiLAorICAgICAgICAgICAgInR5cGUiOiAiYXJyYXkiLAorICAgICAgICAgICAg
Iml0ZW1zIjogeyAiJHJlZiI6ICJEZWJ1Z2dlci5SZWFzb24iIH0KKyAgICAgICAgfQorICAgIF0K
K30KK10KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBl
Lmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uOWYwYWVlOWM5MWI5NWFiYWYzODdlNzJhOTFhMzMzOGI1NzlkYTlh
YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCkBAIC0wLDAgKzEsMTUg
QEAKK3sKKyAgICAiZG9tYWluIjogIlJ1bnRpbWUiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAg
eworICAgICAgICAgICAgImlkIjogIkZhcm1BbmltYWxzIiwKKyAgICAgICAgICAgICJ0eXBlIjog
InN0cmluZyIsCisgICAgICAgICAgICAiZW51bSI6IFsiUGlncyIsICJDb3dzIiwgIkNhdHMiLCAi
SGVucyJdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJUd29MZWdn
ZWRBbmltYWxzIiwKKyAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAi
ZW51bSI6IFsiRHVja3MiLCAiSGVucyIsICJDcm93cyIsICJGbGFtaW5nb3MiXQorICAgICAgICB9
CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbiBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9uLW9i
amVjdC10eXBlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmM0M2MzMzA5OTJkZTY3NWRiODBkMjk4ZmYzMzFh
NmVmNTg5OTM1ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KQEAg
LTAsMCArMSwxMDAgQEAKK1sKK3sKKyAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKKyAgICAiZGVz
Y3JpcHRpb24iOiAiVGVzdCB0eXBlIGJ1aWxkZXIgZ2VuZXJhdGlvbiBvZiB2YXJpb3VzIG9iamVj
dCB0eXBlcy4iLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjog
IkVycm9yIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAiZGVz
Y3JpcHRpb24iOiAiRGF0YWJhc2UgZXJyb3IuIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjog
WworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibWVzc2FnZSIsICJ0eXBlIjogInN0cmluZyIs
ICJkZXNjcmlwdGlvbiI6ICJFcnJvciBtZXNzYWdlLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJu
YW1lIjogImNvZGUiLCAidHlwZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIGNv
ZGUuIiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAg
ICJpZCI6ICJFcnJvckxpc3QiLAorICAgICAgICAgICAgInR5cGUiOiAiYXJyYXkiLAorICAgICAg
ICAgICAgIml0ZW1zIjogeyAiJHJlZiI6ICJFcnJvciIgfQorICAgICAgICB9LAorICAgICAgICB7
CisgICAgICAgICAgICAiaWQiOiAiTW91c2VCdXR0b24iLAorICAgICAgICAgICAgInR5cGUiOiAi
c3RyaW5nIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJFbnVtZXJhdGVzIGRpZmZlcmVu
dCBtb3VzZSBidXR0b25zIHRoYXQgY2FuIGJlIHVzZWQuIiwKKyAgICAgICAgICAgICJlbnVtIjog
WworICAgICAgICAgICAgICAgICJOb25lIiwKKyAgICAgICAgICAgICAgICAiTGVmdCIsCisgICAg
ICAgICAgICAgICAgIk1pZGRsZSIsCisgICAgICAgICAgICAgICAgIlJpZ2h0IgorICAgICAgICAg
ICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiT3B0aW9uYWxQ
YXJhbWV0ZXJCdW5kbGUiLAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAg
ICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFt
ZXMiLCAidHlwZSI6ICJhcnJheSIsICJvcHRpb25hbCI6IHRydWUsICJpdGVtcyI6IHsgInR5cGUi
OiAic3RyaW5nIiB9IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJidXR0b25zIiwgInR5
cGUiOiAiYXJyYXkiLCAib3B0aW9uYWwiOiB0cnVlLCAiaXRlbXMiOiB7ICIkcmVmIjogIk1vdXNl
QnV0dG9uIiB9IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkaXJlY3Rpb25hbGl0eSIs
ICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJMVFIiLCAiUlRMIl0sICJvcHRpb25hbCI6IHRy
dWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5n
IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0
YW1wIiwgInR5cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogdHJ1
ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIs
ICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImVycm9yIiwg
IiRyZWYiOiAiRXJyb3IiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJlcnJvckxpc3QiLCAiJHJlZiI6ICJFcnJvckxpc3QiLCAib3B0aW9uYWwiOiB0cnVl
IH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlk
IjogIlBhcmFtZXRlckJ1bmRsZSIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAg
ICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1
bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0g
fSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImJ1dHRvbnMiLCAidHlwZSI6ICJhcnJheSIs
ICJpdGVtcyI6IHsgIiRyZWYiOiAiTW91c2VCdXR0b24iIH0gfSwKKyAgICAgICAgICAgICAgICB7
ICJuYW1lIjogImRpcmVjdGlvbmFsaXR5IiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbIkxU
UiIsICJSVEwiXSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6
ICJzdHJpbmciIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlw
ZSI6ICJudW1iZXIiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlw
ZSI6ICJvYmplY3QiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5
cGUiOiAiYW55IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZXJyb3IiLCAiJHJlZiI6
ICJFcnJvciIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImVycm9yTGlzdCIsICIkcmVm
IjogIkVycm9yTGlzdCIgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7Cisg
ICAgICAgICAgICAiaWQiOiAiT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cyIsCisgICAg
ICAgICAgICAiZGVzY3JpcHRpb24iOiAiQ29uZmxpY3RlZCBuYW1lcyBtYXkgY2F1c2UgZ2VuZXJh
dGVkIGdldHRlcnMvc2V0dGVycyB0byBjbGFzaCB3aXRoIGJ1aWx0LWluIEluc3BlY3Rvck9iamVj
dCBtZXRob2RzLiIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAg
InByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJpbnRlZ2VyIiwgInR5
cGUiOiAic3RyaW5nIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYXJyYXkiLCAidHlw
ZSI6ICJzdHJpbmciIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzdHJpbmciLCAidHlw
ZSI6ICJzdHJpbmciIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZSIsICJ0eXBl
IjogInN0cmluZyIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm9iamVjdCIsICJ0eXBl
IjogInN0cmluZyIgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAg
ICAgICAgICAiaWQiOiAiRHVtbXlPYmplY3QiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjog
IkFuIG9wZW4gb2JqZWN0IHRoYXQgZG9lc24ndCBoYXZlIGFueSBwcmVkZWZpbmVkIGZpZWxkcy4i
LAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IgorICAgICAgICB9CisgICAgXQorfSwKK3sK
KyAgICAiZG9tYWluIjogIlRlc3QiLAorICAgICJkZXNjcmlwdGlvbiI6ICJUZXN0IHRoZSBnZW5l
cmF0aW9uIG9mIHNwZWNpYWwgYmVoYXZpb3JzIHRoYXQgb25seSBhcHBseSB0byBzcGVjaWZpYyBj
bGFzc2VzLiIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAi
UGFyYW1ldGVyQnVuZGxlIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAg
ICAgICAicHJvcGVydGllcyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRpcmVjdGlv
bmFsaXR5IiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbIkxUUiIsICJSVEwiXSB9LAorICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAiYnV0dG9ucyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1z
IjogeyAiJHJlZiI6ICJEYXRhYmFzZS5Nb3VzZUJ1dHRvbiIgfSB9LAorICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgInR5
cGUiOiAic3RyaW5nIiB9IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0
eXBlIjogInN0cmluZyIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIs
ICJ0eXBlIjogIm51bWJlciIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIs
ICJ0eXBlIjogIm9iamVjdCIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxvYWQi
LCAidHlwZSI6ICJhbnkiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJlcnJvciIsICIk
cmVmIjogIkRhdGFiYXNlLkVycm9yIiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBd
Cit9CitdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUt
Y2FzdHMuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44M2Q5NGJlODk3ZDIyY2MwNThiYjY0NmZlY2Q5YTQ3MzAz
N2I2YjkyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgpAQCAtMCww
ICsxLDUxIEBACitbCit7CisgICAgImRvbWFpbiI6ICJUZXN0IiwKKyAgICAidHlwZXMiOiBbCisg
ICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJUeXBlTmVlZGluZ0Nhc3QiLAorICAgICAgICAg
ICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJBIGR1bW15
IHR5cGUgdGhhdCByZXF1aXJlcyBydW50aW1lIGNhc3RzLCBhbmQgZm9yY2VzIG5vbi1wcmltaXRp
dmUgcmVmZXJlbmNlZCB0eXBlcyB0byBhbHNvIGVtaXQgcnVudGltZSBjYXN0IGhlbHBlcnMuIiwK
KyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
c3RyaW5nIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIlN0cmluZyBtZW1iZXIu
IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibnVtYmVyIiwgInR5cGUiOiAiaW50ZWdl
ciIsICJkZXNjcmlwdGlvbiI6ICJOdW1iZXIgbWVtYmVyLiIgfSwKKyAgICAgICAgICAgICAgICB7
ICJuYW1lIjogImFuaW1hbHMiLCAiJHJlZiI6ICJDYXN0ZWRBbmltYWxzIiwgImRlc2NyaXB0aW9u
IjogIkVudW0gbWVtYmVyLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImlkIiwgIiRy
ZWYiOiAiQ2FzdGVkT2JqZWN0SWQiLCAiZGVzY3JpcHRpb24iOiAiQWxpYXNlZCBtZW1iZXIuIiB9
LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidHJlZSIsICIkcmVmIjogIlJlY3Vyc2l2ZU9i
amVjdDEiLCAiZGVzY3JpcHRpb24iOiAiUmVjdXJzaXZlIG9iamVjdCBtZW1iZXIuIiB9CisgICAg
ICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJDYXN0
ZWRPYmplY3RJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJpbnRlZ2VyIgorICAgICAgICB9LAor
ICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiVW5jYXN0ZWRPYmplY3RJZCIsCisgICAgICAg
ICAgICAidHlwZSI6ICJpbnRlZ2VyIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAg
ICAiaWQiOiAiVW5jYXN0ZWRBbmltYWxzIiwKKyAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIs
CisgICAgICAgICAgICAiZW51bSI6IFsiUGlncyIsICJDb3dzIiwgIkNhdHMiLCAiSGVucyJdCisg
ICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJDYXN0ZWRBbmltYWxzIiwK
KyAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAiZW51bSI6IFsiRHVj
a3MiLCAiSGVucyIsICJDcm93cyIsICJGbGFtaW5nb3MiXQorICAgICAgICB9LAorICAgICAgICB7
CisgICAgICAgICAgICAiaWQiOiAiUmVjdXJzaXZlT2JqZWN0MSIsCisgICAgICAgICAgICAidHlw
ZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJvYmoiLCAiJHJlZiI6ICJSZWN1cnNpdmVPYmplY3QyIiwgIm9wdGlvbmFs
IjogdHJ1ZSB9CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAg
ICAgICJpZCI6ICJSZWN1cnNpdmVPYmplY3QyIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVj
dCIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogIm9iaiIsICIkcmVmIjogIlJlY3Vyc2l2ZU9iamVjdDEiLCAib3B0aW9uYWwiOiB0cnVlIH0K
KyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0KK30KK10KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLXdpdGgtb3Blbi1w
YXJhbWV0ZXJzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk5YjAyMjBk
MzEyYjQ2NGM0ODE0MzdiNTcxNjUzZjgwOGRmZThmYjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS13aXRoLW9wZW4t
cGFyYW1ldGVycy5qc29uCkBAIC0wLDAgKzEsMjEgQEAKK3sKKyAgICAiZG9tYWluIjogIlRlc3Qi
LAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIk5vT3BlblBh
cmFtZXRlcnMiLAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAgICJw
cm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAib25lIiwgInR5cGUiOiAi
bnVtYmVyIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidHdvIiwgInR5cGUiOiAibnVt
YmVyIiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAg
ICJpZCI6ICJPcGVuUGFyYW1ldGVycyIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAor
ICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJh
bHBoYSIsICJ0eXBlIjogIm51bWJlciIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImJl
dGEiLCAidHlwZSI6ICJudW1iZXIiIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0K
K30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy92ZXJzaW9uLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvdmVyc2lvbi5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUwN2E1ZDkwMTc2YjhmZGYzMzcxOGIz
MmRiMzNiM2EwYWEzNTYwMDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdmVyc2lvbi5qc29uCkBAIC0wLDAgKzEsNiBAQAor
eyJkb21haW5zIjpbCit7CisgICAgImRvbWFpbiI6ICJWZXJzaW9uRG9tYWluIiwKKyAgICAidmVy
c2lvbiI6IDQyCit9CitdfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ29uZmlndXJhdGlv
bnMvRmVhdHVyZURlZmluZXMueGNjb25maWcgYi9Tb3VyY2UvV2ViQ29yZS9Db25maWd1cmF0aW9u
cy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZpZwppbmRleCAwYmU0MjA3YmZjMzQ3ZDhiYmM4YjMzNWNi
MjYwZGI3YzMwMTFmMDhmLi4zZTY5NzhlY2EyNmQ4NmQ3YjIxMjY2YjRkMmQ3MTZhNDhhYjM0ZmU5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Db25maWd1cmF0aW9ucy9GZWF0dXJlRGVmaW5l
cy54Y2NvbmZpZworKysgYi9Tb3VyY2UvV2ViQ29yZS9Db25maWd1cmF0aW9ucy9GZWF0dXJlRGVm
aW5lcy54Y2NvbmZpZwpAQCAtMzc3LDYgKzM3Nyw4IEBAIEVOQUJMRV9WSURFT19UUkFDSyA9IEVO
QUJMRV9WSURFT19UUkFDSzsKIEVOQUJMRV9WSURFT19VU0VTX0VMRU1FTlRfRlVMTFNDUkVFTiA9
ICQoRU5BQkxFX1ZJREVPX1VTRVNfRUxFTUVOVF9GVUxMU0NSRUVOXyQoV0tfUExBVEZPUk1fTkFN
RSkpOwogRU5BQkxFX1ZJREVPX1VTRVNfRUxFTUVOVF9GVUxMU0NSRUVOX21hY29zeCA9IEVOQUJM
RV9WSURFT19VU0VTX0VMRU1FTlRfRlVMTFNDUkVFTjsKIAorRU5BQkxFX1dFQl9BUkNISVZFID0g
RU5BQkxFX1dFQl9BUkNISVZFOworCiBFTkFCTEVfV0VCRFJJVkVSX01PVVNFX0lOVEVSQUNUSU9O
UyA9ICQoRU5BQkxFX1dFQkRSSVZFUl9NT1VTRV9JTlRFUkFDVElPTlNfJChXS19QTEFURk9STV9O
QU1FKSk7CiBFTkFCTEVfV0VCRFJJVkVSX01PVVNFX0lOVEVSQUNUSU9OU19tYWNvc3ggPSBFTkFC
TEVfV0VCRFJJVkVSX01PVVNFX0lOVEVSQUNUSU9OUzsKIApAQCAtNDE5LDQgKzQyMSw0IEBAIEVO
QUJMRV9XSVJFTEVTU19QTEFZQkFDS19UQVJHRVQgPSBFTkFCTEVfV0lSRUxFU1NfUExBWUJBQ0tf
VEFSR0VUOwogCiBFTkFCTEVfWFNMVCA9IEVOQUJMRV9YU0xUOwogCi1GRUFUVVJFX0RFRklORVMg
PSAkKEVOQUJMRV8zRF9UUkFOU0ZPUk1TKSAkKEVOQUJMRV9BQ0NFTEVSQVRFRF8yRF9DQU5WQVMp
ICQoRU5BQkxFX0FDQ0VTU0lCSUxJVFlfSVNPTEFURURfVFJFRSkgJChFTkFCTEVfQVBQTEVfUEFZ
KSAkKEVOQUJMRV9BUFBMRV9QQVlfU0VTU0lPTl9WMykgJChFTkFCTEVfQVBQTEVfUEFZX1NFU1NJ
T05fVjQpICQoRU5BQkxFX0FQUExJQ0FUSU9OX01BTklGRVNUKSAkKEVOQUJMRV9BVFRBQ0hNRU5U
X0VMRU1FTlQpICQoRU5BQkxFX0FWRl9DQVBUSU9OUykgJChFTkFCTEVfQ0FDSEVfUEFSVElUSU9O
SU5HKSAkKEVOQUJMRV9DSEFOTkVMX01FU1NBR0lORykgJChFTkFCTEVfQ09OVEVOVF9GSUxURVJJ
TkcpICQoRU5BQkxFX0NTUzNfVEVYVCkgJChFTkFCTEVfQ1NTX0JPWF9ERUNPUkFUSU9OX0JSRUFL
KSAkKEVOQUJMRV9DU1NfQ09NUE9TSVRJTkcpICQoRU5BQkxFX0NTU19DT05JQ19HUkFESUVOVFMp
ICQoRU5BQkxFX0NTU19JTUFHRV9SRVNPTFVUSU9OKSAkKEVOQUJMRV9DU1NfUEFJTlRJTkdfQVBJ
KSAkKEVOQUJMRV9DU1NfU0NST0xMX1NOQVApICQoRU5BQkxFX0NTU19TRUxFQ1RPUlNfTEVWRUw0
KSAkKEVOQUJMRV9DU1NfVFJBSUxJTkdfV09SRCkgJChFTkFCTEVfQ1NTX1RZUEVEX09NKSAkKEVO
QUJMRV9DVVJTT1JfVklTSUJJTElUWSkgJChFTkFCTEVfQ19MT09QKSAkKEVOQUJMRV9EQVJLX01P
REVfQ1NTKSAkKEVOQUJMRV9EQVRBQ1VFX1ZBTFVFKSAkKEVOQUJMRV9EQVRBTElTVF9FTEVNRU5U
KSAkKEVOQUJMRV9EQVRBX0lOVEVSQUNUSU9OKSAkKEVOQUJMRV9ERVZJQ0VfT1JJRU5UQVRJT04p
ICQoRU5BQkxFX0RSQUdfU1VQUE9SVCkgJChFTkFCTEVfRURJVEFCTEVfUkVHSU9OKSAkKEVOQUJM
RV9FTkNSWVBURURfTUVESUEpICQoRU5BQkxFX0VYUEVSSU1FTlRBTF9GRUFUVVJFUykgJChFTkFC
TEVfRklMVEVSU19MRVZFTF8yKSAkKEVOQUJMRV9GVUxMU0NSRUVOX0FQSSkgJChFTkFCTEVfUElD
VFVSRV9JTl9QSUNUVVJFX0FQSSkgJChFTkFCTEVfR0FNRVBBRCkgJChFTkFCTEVfR0VPTE9DQVRJ
T04pICQoRU5BQkxFX0dQVV9QUk9DRVNTKSAkKEVOQUJMRV9JTkRFWEVEX0RBVEFCQVNFKSAkKEVO
QUJMRV9JTkRFWEVEX0RBVEFCQVNFX0lOX1dPUktFUlMpICQoRU5BQkxFX0lOUFVUX1RZUEVfQ09M
T1IpICQoRU5BQkxFX0lOUFVUX1RZUEVfREFURSkgJChFTkFCTEVfSU5QVVRfVFlQRV9EQVRFVElN
RUxPQ0FMKSAkKEVOQUJMRV9JTlBVVF9UWVBFX0RBVEVUSU1FX0lOQ09NUExFVEUpICQoRU5BQkxF
X0lOUFVUX1RZUEVfTU9OVEgpICQoRU5BQkxFX0lOUFVUX1RZUEVfVElNRSkgJChFTkFCTEVfSU5Q
VVRfVFlQRV9XRUVLKSAkKEVOQUJMRV9JTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKSAk
KEVOQUJMRV9JTlNQRUNUT1JfVEVMRU1FVFJZKSAkKEVOQUJMRV9JTlRFUlNFQ1RJT05fT0JTRVJW
RVIpICQoRU5BQkxFX0lPU19HRVNUVVJFX0VWRU5UUykgJChFTkFCTEVfSU9TX1RPVUNIX0VWRU5U
UykgJChFTkFCTEVfTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkgJChFTkFCTEVfTEVHQUNZX0NT
U19WRU5ET1JfUFJFRklYRVMpICQoRU5BQkxFX0xFR0FDWV9DVVNUT01fUFJPVE9DT0xfTUFOQUdF
UikgJChFTkFCTEVfTEVHQUNZX0VOQ1JZUFRFRF9NRURJQSkgJChFTkFCTEVfTEVUVEVSUFJFU1Mp
ICQoRU5BQkxFX01BQ19HRVNUVVJFX0VWRU5UUykgJChFTkFCTEVfTUFUSE1MKSAkKEVOQUJMRV9N
RURJQV9DQVBUVVJFKSAkKEVOQUJMRV9NRURJQV9DT05UUk9MU19TQ1JJUFQpICQoRU5BQkxFX01F
RElBX1NFU1NJT04pICQoRU5BQkxFX01FRElBX1NPVVJDRSkgJChFTkFCTEVfTUVESUFfU1RBVElT
VElDUykgJChFTkFCTEVfTUVESUFfU1RSRUFNKSAkKEVOQUJMRV9NRU1PUllfU0FNUExFUikgJChF
TkFCTEVfTUVURVJfRUxFTUVOVCkgJChFTkFCTEVfTUhUTUwpICQoRU5BQkxFX01PVVNFX0NVUlNP
Ul9TQ0FMRSkgJChFTkFCTEVfTkFWSUdBVE9SX1NUQU5EQUxPTkUpICQoRU5BQkxFX05FVFdPUktf
Q0FDSEVfU1BFQ1VMQVRJVkVfUkVWQUxJREFUSU9OKSAkKEVOQUJMRV9ORVRXT1JLX0NBQ0hFX1NU
QUxFX1dISUxFX1JFVkFMSURBVEUpICQoRU5BQkxFX05PVElGSUNBVElPTlMpICQoRU5BQkxFX09G
RlNDUkVFTl9DQU5WQVMpICQoRU5BQkxFX09WRVJGTE9XX1NDUk9MTElOR19UT1VDSCkgJChFTkFC
TEVfUEFZTUVOVF9SRVFVRVNUKSAkKEVOQUJMRV9QREZLSVRfUExVR0lOKSAkKEVOQUJMRV9QT0lO
VEVSX0xPQ0spICQoRU5BQkxFX1BVQkxJQ19TVUZGSVhfTElTVCkgJChFTkFCTEVfUVVPVEEpICQo
RU5BQkxFX1JFTU9URV9JTlNQRUNUT1IpICQoRU5BQkxFX1JFU0laRV9PQlNFUlZFUikgJChFTkFC
TEVfUkVTT0xVVElPTl9NRURJQV9RVUVSWSkgJChFTkFCTEVfUkVTT1VSQ0VfTE9BRF9TVEFUSVNU
SUNTKSAkKEVOQUJMRV9SRVNPVVJDRV9VU0FHRSkgJChFTkFCTEVfUlVCQkVSX0JBTkRJTkcpICQo
RU5BQkxFX1NBTkRCT1hfRVhURU5TSU9OUykgJChFTkFCTEVfU0VSVkVSX1BSRUNPTk5FQ1QpICQo
RU5BQkxFX1NFUlZJQ0VfQ09OVFJPTFMpICQoRU5BQkxFX1NFUlZJQ0VfV09SS0VSKSAkKEVOQUJM
RV9TSEFSRUFCTEVfUkVTT1VSQ0UpICQoRU5BQkxFX1NQRUVDSF9TWU5USEVTSVMpICQoRU5BQkxF
X1NUUkVBTVNfQVBJKSAkKEVOQUJMRV9TVkdfRk9OVFMpICQoRU5BQkxFX1RFTEVQSE9ORV9OVU1C
RVJfREVURUNUSU9OKSAkKEVOQUJMRV9URVhUX0FVVE9TSVpJTkcpICQoRU5BQkxFX1RPVUNIX0VW
RU5UUykgJChFTkFCTEVfVVNFUlNFTEVDVF9BTEwpICQoRU5BQkxFX1VTRVJfTUVTU0FHRV9IQU5E
TEVSUykgJChFTkFCTEVfVkFSSUFUSU9OX0ZPTlRTKSAkKEVOQUJMRV9WSURFTykgJChFTkFCTEVf
VklERU9fUFJFU0VOVEFUSU9OX01PREUpICQoRU5BQkxFX1ZJREVPX1RSQUNLKSAkKEVOQUJMRV9W
SURFT19VU0VTX0VMRU1FTlRfRlVMTFNDUkVFTikgJChFTkFCTEVfV0VCRFJJVkVSX01PVVNFX0lO
VEVSQUNUSU9OUykgJChFTkFCTEVfV0VCRFJJVkVSX0tFWUJPQVJEX0lOVEVSQUNUSU9OUykgJChF
TkFCTEVfV0VCRFJJVkVSX1RPVUNIX0lOVEVSQUNUSU9OUykgJChFTkFCTEVfV0VCR0wpICQoRU5B
QkxFX1dFQkdMMikgJChFTkFCTEVfV0VCR1BVKSAkKEVOQUJMRV9XRUJYUikgJChFTkFCTEVfV0VC
X0FQSV9TVEFUSVNUSUNTKSAkKEVOQUJMRV9XRUJfQVVESU8pICQoRU5BQkxFX1dFQl9BVVRITikg
JChFTkFCTEVfV0VCX0NSWVBUTykgJChFTkFCTEVfV0VCX1JUQykgJChFTkFCTEVfV0lSRUxFU1Nf
UExBWUJBQ0tfVEFSR0VUKSAkKEVOQUJMRV9YU0xUKTsKK0ZFQVRVUkVfREVGSU5FUyA9ICQoRU5B
QkxFXzNEX1RSQU5TRk9STVMpICQoRU5BQkxFX0FDQ0VMRVJBVEVEXzJEX0NBTlZBUykgJChFTkFC
TEVfQUNDRVNTSUJJTElUWV9JU09MQVRFRF9UUkVFKSAkKEVOQUJMRV9BUFBMRV9QQVkpICQoRU5B
QkxFX0FQUExFX1BBWV9TRVNTSU9OX1YzKSAkKEVOQUJMRV9BUFBMRV9QQVlfU0VTU0lPTl9WNCkg
JChFTkFCTEVfQVBQTElDQVRJT05fTUFOSUZFU1QpICQoRU5BQkxFX0FUVEFDSE1FTlRfRUxFTUVO
VCkgJChFTkFCTEVfQVZGX0NBUFRJT05TKSAkKEVOQUJMRV9DQUNIRV9QQVJUSVRJT05JTkcpICQo
RU5BQkxFX0NIQU5ORUxfTUVTU0FHSU5HKSAkKEVOQUJMRV9DT05URU5UX0ZJTFRFUklORykgJChF
TkFCTEVfQ1NTM19URVhUKSAkKEVOQUJMRV9DU1NfQk9YX0RFQ09SQVRJT05fQlJFQUspICQoRU5B
QkxFX0NTU19DT01QT1NJVElORykgJChFTkFCTEVfQ1NTX0NPTklDX0dSQURJRU5UUykgJChFTkFC
TEVfQ1NTX0lNQUdFX1JFU09MVVRJT04pICQoRU5BQkxFX0NTU19QQUlOVElOR19BUEkpICQoRU5B
QkxFX0NTU19TQ1JPTExfU05BUCkgJChFTkFCTEVfQ1NTX1NFTEVDVE9SU19MRVZFTDQpICQoRU5B
QkxFX0NTU19UUkFJTElOR19XT1JEKSAkKEVOQUJMRV9DU1NfVFlQRURfT00pICQoRU5BQkxFX0NV
UlNPUl9WSVNJQklMSVRZKSAkKEVOQUJMRV9DX0xPT1ApICQoRU5BQkxFX0RBUktfTU9ERV9DU1Mp
ICQoRU5BQkxFX0RBVEFDVUVfVkFMVUUpICQoRU5BQkxFX0RBVEFMSVNUX0VMRU1FTlQpICQoRU5B
QkxFX0RBVEFfSU5URVJBQ1RJT04pICQoRU5BQkxFX0RFVklDRV9PUklFTlRBVElPTikgJChFTkFC
TEVfRFJBR19TVVBQT1JUKSAkKEVOQUJMRV9FRElUQUJMRV9SRUdJT04pICQoRU5BQkxFX0VOQ1JZ
UFRFRF9NRURJQSkgJChFTkFCTEVfRVhQRVJJTUVOVEFMX0ZFQVRVUkVTKSAkKEVOQUJMRV9GSUxU
RVJTX0xFVkVMXzIpICQoRU5BQkxFX0ZVTExTQ1JFRU5fQVBJKSAkKEVOQUJMRV9QSUNUVVJFX0lO
X1BJQ1RVUkVfQVBJKSAkKEVOQUJMRV9HQU1FUEFEKSAkKEVOQUJMRV9HRU9MT0NBVElPTikgJChF
TkFCTEVfR1BVX1BST0NFU1MpICQoRU5BQkxFX0lOREVYRURfREFUQUJBU0UpICQoRU5BQkxFX0lO
REVYRURfREFUQUJBU0VfSU5fV09SS0VSUykgJChFTkFCTEVfSU5QVVRfVFlQRV9DT0xPUikgJChF
TkFCTEVfSU5QVVRfVFlQRV9EQVRFKSAkKEVOQUJMRV9JTlBVVF9UWVBFX0RBVEVUSU1FTE9DQUwp
ICQoRU5BQkxFX0lOUFVUX1RZUEVfREFURVRJTUVfSU5DT01QTEVURSkgJChFTkFCTEVfSU5QVVRf
VFlQRV9NT05USCkgJChFTkFCTEVfSU5QVVRfVFlQRV9USU1FKSAkKEVOQUJMRV9JTlBVVF9UWVBF
X1dFRUspICQoRU5BQkxFX0lOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpICQoRU5BQkxF
X0lOU1BFQ1RPUl9URUxFTUVUUlkpICQoRU5BQkxFX0lOVEVSU0VDVElPTl9PQlNFUlZFUikgJChF
TkFCTEVfSU9TX0dFU1RVUkVfRVZFTlRTKSAkKEVOQUJMRV9JT1NfVE9VQ0hfRVZFTlRTKSAkKEVO
QUJMRV9MQVlPVVRfRk9STUFUVElOR19DT05URVhUKSAkKEVOQUJMRV9MRUdBQ1lfQ1NTX1ZFTkRP
Ul9QUkVGSVhFUykgJChFTkFCTEVfTEVHQUNZX0NVU1RPTV9QUk9UT0NPTF9NQU5BR0VSKSAkKEVO
QUJMRV9MRUdBQ1lfRU5DUllQVEVEX01FRElBKSAkKEVOQUJMRV9MRVRURVJQUkVTUykgJChFTkFC
TEVfTUFDX0dFU1RVUkVfRVZFTlRTKSAkKEVOQUJMRV9NQVRITUwpICQoRU5BQkxFX01FRElBX0NB
UFRVUkUpICQoRU5BQkxFX01FRElBX0NPTlRST0xTX1NDUklQVCkgJChFTkFCTEVfTUVESUFfU0VT
U0lPTikgJChFTkFCTEVfTUVESUFfU09VUkNFKSAkKEVOQUJMRV9NRURJQV9TVEFUSVNUSUNTKSAk
KEVOQUJMRV9NRURJQV9TVFJFQU0pICQoRU5BQkxFX01FTU9SWV9TQU1QTEVSKSAkKEVOQUJMRV9N
RVRFUl9FTEVNRU5UKSAkKEVOQUJMRV9NSFRNTCkgJChFTkFCTEVfTU9VU0VfQ1VSU09SX1NDQUxF
KSAkKEVOQUJMRV9OQVZJR0FUT1JfU1RBTkRBTE9ORSkgJChFTkFCTEVfTkVUV09SS19DQUNIRV9T
UEVDVUxBVElWRV9SRVZBTElEQVRJT04pICQoRU5BQkxFX05FVFdPUktfQ0FDSEVfU1RBTEVfV0hJ
TEVfUkVWQUxJREFURSkgJChFTkFCTEVfTk9USUZJQ0FUSU9OUykgJChFTkFCTEVfT0ZGU0NSRUVO
X0NBTlZBUykgJChFTkFCTEVfT1ZFUkZMT1dfU0NST0xMSU5HX1RPVUNIKSAkKEVOQUJMRV9QQVlN
RU5UX1JFUVVFU1QpICQoRU5BQkxFX1BERktJVF9QTFVHSU4pICQoRU5BQkxFX1BPSU5URVJfTE9D
SykgJChFTkFCTEVfUFVCTElDX1NVRkZJWF9MSVNUKSAkKEVOQUJMRV9RVU9UQSkgJChFTkFCTEVf
UkVNT1RFX0lOU1BFQ1RPUikgJChFTkFCTEVfUkVTSVpFX09CU0VSVkVSKSAkKEVOQUJMRV9SRVNP
TFVUSU9OX01FRElBX1FVRVJZKSAkKEVOQUJMRV9SRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpICQo
RU5BQkxFX1JFU09VUkNFX1VTQUdFKSAkKEVOQUJMRV9SVUJCRVJfQkFORElORykgJChFTkFCTEVf
U0FOREJPWF9FWFRFTlNJT05TKSAkKEVOQUJMRV9TRVJWRVJfUFJFQ09OTkVDVCkgJChFTkFCTEVf
U0VSVklDRV9DT05UUk9MUykgJChFTkFCTEVfU0VSVklDRV9XT1JLRVIpICQoRU5BQkxFX1NIQVJF
QUJMRV9SRVNPVVJDRSkgJChFTkFCTEVfU1BFRUNIX1NZTlRIRVNJUykgJChFTkFCTEVfU1RSRUFN
U19BUEkpICQoRU5BQkxFX1NWR19GT05UUykgJChFTkFCTEVfVEVMRVBIT05FX05VTUJFUl9ERVRF
Q1RJT04pICQoRU5BQkxFX1RFWFRfQVVUT1NJWklORykgJChFTkFCTEVfVE9VQ0hfRVZFTlRTKSAk
KEVOQUJMRV9VU0VSU0VMRUNUX0FMTCkgJChFTkFCTEVfVVNFUl9NRVNTQUdFX0hBTkRMRVJTKSAk
KEVOQUJMRV9WQVJJQVRJT05fRk9OVFMpICQoRU5BQkxFX1ZJREVPKSAkKEVOQUJMRV9WSURFT19Q
UkVTRU5UQVRJT05fTU9ERSkgJChFTkFCTEVfVklERU9fVFJBQ0spICQoRU5BQkxFX1ZJREVPX1VT
RVNfRUxFTUVOVF9GVUxMU0NSRUVOKSAkKEVOQUJMRV9XRUJfQVJDSElWRSkgJChFTkFCTEVfV0VC
RFJJVkVSX01PVVNFX0lOVEVSQUNUSU9OUykgJChFTkFCTEVfV0VCRFJJVkVSX0tFWUJPQVJEX0lO
VEVSQUNUSU9OUykgJChFTkFCTEVfV0VCRFJJVkVSX1RPVUNIX0lOVEVSQUNUSU9OUykgJChFTkFC
TEVfV0VCR0wpICQoRU5BQkxFX1dFQkdMMikgJChFTkFCTEVfV0VCR1BVKSAkKEVOQUJMRV9XRUJY
UikgJChFTkFCTEVfV0VCX0FQSV9TVEFUSVNUSUNTKSAkKEVOQUJMRV9XRUJfQVVESU8pICQoRU5B
QkxFX1dFQl9BVVRITikgJChFTkFCTEVfV0VCX0NSWVBUTykgJChFTkFCTEVfV0VCX1JUQykgJChF
TkFCTEVfV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKSAkKEVOQUJMRV9YU0xUKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9Db25maWd1cmF0aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2Nv
bmZpZyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9Db25maWd1cmF0aW9ucy9GZWF0dXJlRGVmaW5lcy54
Y2NvbmZpZwppbmRleCAwYmU0MjA3YmZjMzQ3ZDhiYmM4YjMzNWNiMjYwZGI3YzMwMTFmMDhmLi4z
ZTY5NzhlY2EyNmQ4NmQ3YjIxMjY2YjRkMmQ3MTZhNDhhYjM0ZmU5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9QQUwvQ29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25maWcKKysr
IGIvU291cmNlL1dlYkNvcmUvUEFML0NvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29u
ZmlnCkBAIC0zNzcsNiArMzc3LDggQEAgRU5BQkxFX1ZJREVPX1RSQUNLID0gRU5BQkxFX1ZJREVP
X1RSQUNLOwogRU5BQkxFX1ZJREVPX1VTRVNfRUxFTUVOVF9GVUxMU0NSRUVOID0gJChFTkFCTEVf
VklERU9fVVNFU19FTEVNRU5UX0ZVTExTQ1JFRU5fJChXS19QTEFURk9STV9OQU1FKSk7CiBFTkFC
TEVfVklERU9fVVNFU19FTEVNRU5UX0ZVTExTQ1JFRU5fbWFjb3N4ID0gRU5BQkxFX1ZJREVPX1VT
RVNfRUxFTUVOVF9GVUxMU0NSRUVOOwogCitFTkFCTEVfV0VCX0FSQ0hJVkUgPSBFTkFCTEVfV0VC
X0FSQ0hJVkU7CisKIEVOQUJMRV9XRUJEUklWRVJfTU9VU0VfSU5URVJBQ1RJT05TID0gJChFTkFC
TEVfV0VCRFJJVkVSX01PVVNFX0lOVEVSQUNUSU9OU18kKFdLX1BMQVRGT1JNX05BTUUpKTsKIEVO
QUJMRV9XRUJEUklWRVJfTU9VU0VfSU5URVJBQ1RJT05TX21hY29zeCA9IEVOQUJMRV9XRUJEUklW
RVJfTU9VU0VfSU5URVJBQ1RJT05TOwogCkBAIC00MTksNCArNDIxLDQgQEAgRU5BQkxFX1dJUkVM
RVNTX1BMQVlCQUNLX1RBUkdFVCA9IEVOQUJMRV9XSVJFTEVTU19QTEFZQkFDS19UQVJHRVQ7CiAK
IEVOQUJMRV9YU0xUID0gRU5BQkxFX1hTTFQ7CiAKLUZFQVRVUkVfREVGSU5FUyA9ICQoRU5BQkxF
XzNEX1RSQU5TRk9STVMpICQoRU5BQkxFX0FDQ0VMRVJBVEVEXzJEX0NBTlZBUykgJChFTkFCTEVf
QUNDRVNTSUJJTElUWV9JU09MQVRFRF9UUkVFKSAkKEVOQUJMRV9BUFBMRV9QQVkpICQoRU5BQkxF
X0FQUExFX1BBWV9TRVNTSU9OX1YzKSAkKEVOQUJMRV9BUFBMRV9QQVlfU0VTU0lPTl9WNCkgJChF
TkFCTEVfQVBQTElDQVRJT05fTUFOSUZFU1QpICQoRU5BQkxFX0FUVEFDSE1FTlRfRUxFTUVOVCkg
JChFTkFCTEVfQVZGX0NBUFRJT05TKSAkKEVOQUJMRV9DQUNIRV9QQVJUSVRJT05JTkcpICQoRU5B
QkxFX0NIQU5ORUxfTUVTU0FHSU5HKSAkKEVOQUJMRV9DT05URU5UX0ZJTFRFUklORykgJChFTkFC
TEVfQ1NTM19URVhUKSAkKEVOQUJMRV9DU1NfQk9YX0RFQ09SQVRJT05fQlJFQUspICQoRU5BQkxF
X0NTU19DT01QT1NJVElORykgJChFTkFCTEVfQ1NTX0NPTklDX0dSQURJRU5UUykgJChFTkFCTEVf
Q1NTX0lNQUdFX1JFU09MVVRJT04pICQoRU5BQkxFX0NTU19QQUlOVElOR19BUEkpICQoRU5BQkxF
X0NTU19TQ1JPTExfU05BUCkgJChFTkFCTEVfQ1NTX1NFTEVDVE9SU19MRVZFTDQpICQoRU5BQkxF
X0NTU19UUkFJTElOR19XT1JEKSAkKEVOQUJMRV9DU1NfVFlQRURfT00pICQoRU5BQkxFX0NVUlNP
Ul9WSVNJQklMSVRZKSAkKEVOQUJMRV9DX0xPT1ApICQoRU5BQkxFX0RBUktfTU9ERV9DU1MpICQo
RU5BQkxFX0RBVEFDVUVfVkFMVUUpICQoRU5BQkxFX0RBVEFMSVNUX0VMRU1FTlQpICQoRU5BQkxF
X0RBVEFfSU5URVJBQ1RJT04pICQoRU5BQkxFX0RFVklDRV9PUklFTlRBVElPTikgJChFTkFCTEVf
RFJBR19TVVBQT1JUKSAkKEVOQUJMRV9FRElUQUJMRV9SRUdJT04pICQoRU5BQkxFX0VOQ1JZUFRF
RF9NRURJQSkgJChFTkFCTEVfRVhQRVJJTUVOVEFMX0ZFQVRVUkVTKSAkKEVOQUJMRV9GSUxURVJT
X0xFVkVMXzIpICQoRU5BQkxFX0ZVTExTQ1JFRU5fQVBJKSAkKEVOQUJMRV9QSUNUVVJFX0lOX1BJ
Q1RVUkVfQVBJKSAkKEVOQUJMRV9HQU1FUEFEKSAkKEVOQUJMRV9HRU9MT0NBVElPTikgJChFTkFC
TEVfR1BVX1BST0NFU1MpICQoRU5BQkxFX0lOREVYRURfREFUQUJBU0UpICQoRU5BQkxFX0lOREVY
RURfREFUQUJBU0VfSU5fV09SS0VSUykgJChFTkFCTEVfSU5QVVRfVFlQRV9DT0xPUikgJChFTkFC
TEVfSU5QVVRfVFlQRV9EQVRFKSAkKEVOQUJMRV9JTlBVVF9UWVBFX0RBVEVUSU1FTE9DQUwpICQo
RU5BQkxFX0lOUFVUX1RZUEVfREFURVRJTUVfSU5DT01QTEVURSkgJChFTkFCTEVfSU5QVVRfVFlQ
RV9NT05USCkgJChFTkFCTEVfSU5QVVRfVFlQRV9USU1FKSAkKEVOQUJMRV9JTlBVVF9UWVBFX1dF
RUspICQoRU5BQkxFX0lOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpICQoRU5BQkxFX0lO
U1BFQ1RPUl9URUxFTUVUUlkpICQoRU5BQkxFX0lOVEVSU0VDVElPTl9PQlNFUlZFUikgJChFTkFC
TEVfSU9TX0dFU1RVUkVfRVZFTlRTKSAkKEVOQUJMRV9JT1NfVE9VQ0hfRVZFTlRTKSAkKEVOQUJM
RV9MQVlPVVRfRk9STUFUVElOR19DT05URVhUKSAkKEVOQUJMRV9MRUdBQ1lfQ1NTX1ZFTkRPUl9Q
UkVGSVhFUykgJChFTkFCTEVfTEVHQUNZX0NVU1RPTV9QUk9UT0NPTF9NQU5BR0VSKSAkKEVOQUJM
RV9MRUdBQ1lfRU5DUllQVEVEX01FRElBKSAkKEVOQUJMRV9MRVRURVJQUkVTUykgJChFTkFCTEVf
TUFDX0dFU1RVUkVfRVZFTlRTKSAkKEVOQUJMRV9NQVRITUwpICQoRU5BQkxFX01FRElBX0NBUFRV
UkUpICQoRU5BQkxFX01FRElBX0NPTlRST0xTX1NDUklQVCkgJChFTkFCTEVfTUVESUFfU0VTU0lP
TikgJChFTkFCTEVfTUVESUFfU09VUkNFKSAkKEVOQUJMRV9NRURJQV9TVEFUSVNUSUNTKSAkKEVO
QUJMRV9NRURJQV9TVFJFQU0pICQoRU5BQkxFX01FTU9SWV9TQU1QTEVSKSAkKEVOQUJMRV9NRVRF
Ul9FTEVNRU5UKSAkKEVOQUJMRV9NSFRNTCkgJChFTkFCTEVfTU9VU0VfQ1VSU09SX1NDQUxFKSAk
KEVOQUJMRV9OQVZJR0FUT1JfU1RBTkRBTE9ORSkgJChFTkFCTEVfTkVUV09SS19DQUNIRV9TUEVD
VUxBVElWRV9SRVZBTElEQVRJT04pICQoRU5BQkxFX05FVFdPUktfQ0FDSEVfU1RBTEVfV0hJTEVf
UkVWQUxJREFURSkgJChFTkFCTEVfTk9USUZJQ0FUSU9OUykgJChFTkFCTEVfT0ZGU0NSRUVOX0NB
TlZBUykgJChFTkFCTEVfT1ZFUkZMT1dfU0NST0xMSU5HX1RPVUNIKSAkKEVOQUJMRV9QQVlNRU5U
X1JFUVVFU1QpICQoRU5BQkxFX1BERktJVF9QTFVHSU4pICQoRU5BQkxFX1BPSU5URVJfTE9DSykg
JChFTkFCTEVfUFVCTElDX1NVRkZJWF9MSVNUKSAkKEVOQUJMRV9RVU9UQSkgJChFTkFCTEVfUkVN
T1RFX0lOU1BFQ1RPUikgJChFTkFCTEVfUkVTSVpFX09CU0VSVkVSKSAkKEVOQUJMRV9SRVNPTFVU
SU9OX01FRElBX1FVRVJZKSAkKEVOQUJMRV9SRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpICQoRU5B
QkxFX1JFU09VUkNFX1VTQUdFKSAkKEVOQUJMRV9SVUJCRVJfQkFORElORykgJChFTkFCTEVfU0FO
REJPWF9FWFRFTlNJT05TKSAkKEVOQUJMRV9TRVJWRVJfUFJFQ09OTkVDVCkgJChFTkFCTEVfU0VS
VklDRV9DT05UUk9MUykgJChFTkFCTEVfU0VSVklDRV9XT1JLRVIpICQoRU5BQkxFX1NIQVJFQUJM
RV9SRVNPVVJDRSkgJChFTkFCTEVfU1BFRUNIX1NZTlRIRVNJUykgJChFTkFCTEVfU1RSRUFNU19B
UEkpICQoRU5BQkxFX1NWR19GT05UUykgJChFTkFCTEVfVEVMRVBIT05FX05VTUJFUl9ERVRFQ1RJ
T04pICQoRU5BQkxFX1RFWFRfQVVUT1NJWklORykgJChFTkFCTEVfVE9VQ0hfRVZFTlRTKSAkKEVO
QUJMRV9VU0VSU0VMRUNUX0FMTCkgJChFTkFCTEVfVVNFUl9NRVNTQUdFX0hBTkRMRVJTKSAkKEVO
QUJMRV9WQVJJQVRJT05fRk9OVFMpICQoRU5BQkxFX1ZJREVPKSAkKEVOQUJMRV9WSURFT19QUkVT
RU5UQVRJT05fTU9ERSkgJChFTkFCTEVfVklERU9fVFJBQ0spICQoRU5BQkxFX1ZJREVPX1VTRVNf
RUxFTUVOVF9GVUxMU0NSRUVOKSAkKEVOQUJMRV9XRUJEUklWRVJfTU9VU0VfSU5URVJBQ1RJT05T
KSAkKEVOQUJMRV9XRUJEUklWRVJfS0VZQk9BUkRfSU5URVJBQ1RJT05TKSAkKEVOQUJMRV9XRUJE
UklWRVJfVE9VQ0hfSU5URVJBQ1RJT05TKSAkKEVOQUJMRV9XRUJHTCkgJChFTkFCTEVfV0VCR0wy
KSAkKEVOQUJMRV9XRUJHUFUpICQoRU5BQkxFX1dFQlhSKSAkKEVOQUJMRV9XRUJfQVBJX1NUQVRJ
U1RJQ1MpICQoRU5BQkxFX1dFQl9BVURJTykgJChFTkFCTEVfV0VCX0FVVEhOKSAkKEVOQUJMRV9X
RUJfQ1JZUFRPKSAkKEVOQUJMRV9XRUJfUlRDKSAkKEVOQUJMRV9XSVJFTEVTU19QTEFZQkFDS19U
QVJHRVQpICQoRU5BQkxFX1hTTFQpOworRkVBVFVSRV9ERUZJTkVTID0gJChFTkFCTEVfM0RfVFJB
TlNGT1JNUykgJChFTkFCTEVfQUNDRUxFUkFURURfMkRfQ0FOVkFTKSAkKEVOQUJMRV9BQ0NFU1NJ
QklMSVRZX0lTT0xBVEVEX1RSRUUpICQoRU5BQkxFX0FQUExFX1BBWSkgJChFTkFCTEVfQVBQTEVf
UEFZX1NFU1NJT05fVjMpICQoRU5BQkxFX0FQUExFX1BBWV9TRVNTSU9OX1Y0KSAkKEVOQUJMRV9B
UFBMSUNBVElPTl9NQU5JRkVTVCkgJChFTkFCTEVfQVRUQUNITUVOVF9FTEVNRU5UKSAkKEVOQUJM
RV9BVkZfQ0FQVElPTlMpICQoRU5BQkxFX0NBQ0hFX1BBUlRJVElPTklORykgJChFTkFCTEVfQ0hB
Tk5FTF9NRVNTQUdJTkcpICQoRU5BQkxFX0NPTlRFTlRfRklMVEVSSU5HKSAkKEVOQUJMRV9DU1Mz
X1RFWFQpICQoRU5BQkxFX0NTU19CT1hfREVDT1JBVElPTl9CUkVBSykgJChFTkFCTEVfQ1NTX0NP
TVBPU0lUSU5HKSAkKEVOQUJMRV9DU1NfQ09OSUNfR1JBRElFTlRTKSAkKEVOQUJMRV9DU1NfSU1B
R0VfUkVTT0xVVElPTikgJChFTkFCTEVfQ1NTX1BBSU5USU5HX0FQSSkgJChFTkFCTEVfQ1NTX1ND
Uk9MTF9TTkFQKSAkKEVOQUJMRV9DU1NfU0VMRUNUT1JTX0xFVkVMNCkgJChFTkFCTEVfQ1NTX1RS
QUlMSU5HX1dPUkQpICQoRU5BQkxFX0NTU19UWVBFRF9PTSkgJChFTkFCTEVfQ1VSU09SX1ZJU0lC
SUxJVFkpICQoRU5BQkxFX0NfTE9PUCkgJChFTkFCTEVfREFSS19NT0RFX0NTUykgJChFTkFCTEVf
REFUQUNVRV9WQUxVRSkgJChFTkFCTEVfREFUQUxJU1RfRUxFTUVOVCkgJChFTkFCTEVfREFUQV9J
TlRFUkFDVElPTikgJChFTkFCTEVfREVWSUNFX09SSUVOVEFUSU9OKSAkKEVOQUJMRV9EUkFHX1NV
UFBPUlQpICQoRU5BQkxFX0VESVRBQkxFX1JFR0lPTikgJChFTkFCTEVfRU5DUllQVEVEX01FRElB
KSAkKEVOQUJMRV9FWFBFUklNRU5UQUxfRkVBVFVSRVMpICQoRU5BQkxFX0ZJTFRFUlNfTEVWRUxf
MikgJChFTkFCTEVfRlVMTFNDUkVFTl9BUEkpICQoRU5BQkxFX1BJQ1RVUkVfSU5fUElDVFVSRV9B
UEkpICQoRU5BQkxFX0dBTUVQQUQpICQoRU5BQkxFX0dFT0xPQ0FUSU9OKSAkKEVOQUJMRV9HUFVf
UFJPQ0VTUykgJChFTkFCTEVfSU5ERVhFRF9EQVRBQkFTRSkgJChFTkFCTEVfSU5ERVhFRF9EQVRB
QkFTRV9JTl9XT1JLRVJTKSAkKEVOQUJMRV9JTlBVVF9UWVBFX0NPTE9SKSAkKEVOQUJMRV9JTlBV
VF9UWVBFX0RBVEUpICQoRU5BQkxFX0lOUFVUX1RZUEVfREFURVRJTUVMT0NBTCkgJChFTkFCTEVf
SU5QVVRfVFlQRV9EQVRFVElNRV9JTkNPTVBMRVRFKSAkKEVOQUJMRV9JTlBVVF9UWVBFX01PTlRI
KSAkKEVOQUJMRV9JTlBVVF9UWVBFX1RJTUUpICQoRU5BQkxFX0lOUFVUX1RZUEVfV0VFSykgJChF
TkFCTEVfSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykgJChFTkFCTEVfSU5TUEVDVE9S
X1RFTEVNRVRSWSkgJChFTkFCTEVfSU5URVJTRUNUSU9OX09CU0VSVkVSKSAkKEVOQUJMRV9JT1Nf
R0VTVFVSRV9FVkVOVFMpICQoRU5BQkxFX0lPU19UT1VDSF9FVkVOVFMpICQoRU5BQkxFX0xBWU9V
VF9GT1JNQVRUSU5HX0NPTlRFWFQpICQoRU5BQkxFX0xFR0FDWV9DU1NfVkVORE9SX1BSRUZJWEVT
KSAkKEVOQUJMRV9MRUdBQ1lfQ1VTVE9NX1BST1RPQ09MX01BTkFHRVIpICQoRU5BQkxFX0xFR0FD
WV9FTkNSWVBURURfTUVESUEpICQoRU5BQkxFX0xFVFRFUlBSRVNTKSAkKEVOQUJMRV9NQUNfR0VT
VFVSRV9FVkVOVFMpICQoRU5BQkxFX01BVEhNTCkgJChFTkFCTEVfTUVESUFfQ0FQVFVSRSkgJChF
TkFCTEVfTUVESUFfQ09OVFJPTFNfU0NSSVBUKSAkKEVOQUJMRV9NRURJQV9TRVNTSU9OKSAkKEVO
QUJMRV9NRURJQV9TT1VSQ0UpICQoRU5BQkxFX01FRElBX1NUQVRJU1RJQ1MpICQoRU5BQkxFX01F
RElBX1NUUkVBTSkgJChFTkFCTEVfTUVNT1JZX1NBTVBMRVIpICQoRU5BQkxFX01FVEVSX0VMRU1F
TlQpICQoRU5BQkxFX01IVE1MKSAkKEVOQUJMRV9NT1VTRV9DVVJTT1JfU0NBTEUpICQoRU5BQkxF
X05BVklHQVRPUl9TVEFOREFMT05FKSAkKEVOQUJMRV9ORVRXT1JLX0NBQ0hFX1NQRUNVTEFUSVZF
X1JFVkFMSURBVElPTikgJChFTkFCTEVfTkVUV09SS19DQUNIRV9TVEFMRV9XSElMRV9SRVZBTElE
QVRFKSAkKEVOQUJMRV9OT1RJRklDQVRJT05TKSAkKEVOQUJMRV9PRkZTQ1JFRU5fQ0FOVkFTKSAk
KEVOQUJMRV9PVkVSRkxPV19TQ1JPTExJTkdfVE9VQ0gpICQoRU5BQkxFX1BBWU1FTlRfUkVRVUVT
VCkgJChFTkFCTEVfUERGS0lUX1BMVUdJTikgJChFTkFCTEVfUE9JTlRFUl9MT0NLKSAkKEVOQUJM
RV9QVUJMSUNfU1VGRklYX0xJU1QpICQoRU5BQkxFX1FVT1RBKSAkKEVOQUJMRV9SRU1PVEVfSU5T
UEVDVE9SKSAkKEVOQUJMRV9SRVNJWkVfT0JTRVJWRVIpICQoRU5BQkxFX1JFU09MVVRJT05fTUVE
SUFfUVVFUlkpICQoRU5BQkxFX1JFU09VUkNFX0xPQURfU1RBVElTVElDUykgJChFTkFCTEVfUkVT
T1VSQ0VfVVNBR0UpICQoRU5BQkxFX1JVQkJFUl9CQU5ESU5HKSAkKEVOQUJMRV9TQU5EQk9YX0VY
VEVOU0lPTlMpICQoRU5BQkxFX1NFUlZFUl9QUkVDT05ORUNUKSAkKEVOQUJMRV9TRVJWSUNFX0NP
TlRST0xTKSAkKEVOQUJMRV9TRVJWSUNFX1dPUktFUikgJChFTkFCTEVfU0hBUkVBQkxFX1JFU09V
UkNFKSAkKEVOQUJMRV9TUEVFQ0hfU1lOVEhFU0lTKSAkKEVOQUJMRV9TVFJFQU1TX0FQSSkgJChF
TkFCTEVfU1ZHX0ZPTlRTKSAkKEVOQUJMRV9URUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikgJChF
TkFCTEVfVEVYVF9BVVRPU0laSU5HKSAkKEVOQUJMRV9UT1VDSF9FVkVOVFMpICQoRU5BQkxFX1VT
RVJTRUxFQ1RfQUxMKSAkKEVOQUJMRV9VU0VSX01FU1NBR0VfSEFORExFUlMpICQoRU5BQkxFX1ZB
UklBVElPTl9GT05UUykgJChFTkFCTEVfVklERU8pICQoRU5BQkxFX1ZJREVPX1BSRVNFTlRBVElP
Tl9NT0RFKSAkKEVOQUJMRV9WSURFT19UUkFDSykgJChFTkFCTEVfVklERU9fVVNFU19FTEVNRU5U
X0ZVTExTQ1JFRU4pICQoRU5BQkxFX1dFQl9BUkNISVZFKSAkKEVOQUJMRV9XRUJEUklWRVJfTU9V
U0VfSU5URVJBQ1RJT05TKSAkKEVOQUJMRV9XRUJEUklWRVJfS0VZQk9BUkRfSU5URVJBQ1RJT05T
KSAkKEVOQUJMRV9XRUJEUklWRVJfVE9VQ0hfSU5URVJBQ1RJT05TKSAkKEVOQUJMRV9XRUJHTCkg
JChFTkFCTEVfV0VCR0wyKSAkKEVOQUJMRV9XRUJHUFUpICQoRU5BQkxFX1dFQlhSKSAkKEVOQUJM
RV9XRUJfQVBJX1NUQVRJU1RJQ1MpICQoRU5BQkxFX1dFQl9BVURJTykgJChFTkFCTEVfV0VCX0FV
VEhOKSAkKEVOQUJMRV9XRUJfQ1JZUFRPKSAkKEVOQUJMRV9XRUJfUlRDKSAkKEVOQUJMRV9XSVJF
TEVTU19QTEFZQkFDS19UQVJHRVQpICQoRU5BQkxFX1hTTFQpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5pZGwgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmlkbAppbmRleCBlNzhjMTg5MTk2
MjllN2NmMTE5NDIzZDI2OGExYTRlOWNlZTJkOTU4Li4yY2NhMWI3MDMyYmFlY2I5ZTJiNzE5YTll
NWU1NzRlYjQzMDA5ZTRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRnJvbnRlbmRIb3N0LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRnJvbnRlbmRIb3N0LmlkbApAQCAtOTMsOSArOTMsNyBAQAogICAgIGJvb2xlYW4gaXNC
ZWluZ0luc3BlY3RlZCgpOwogCiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGJvb2xlYW4gc3VwcG9y
dHNEaWFnbm9zdGljTG9nZ2luZzsKLSNpZiBFTkFCTEVfSU5TUEVDVE9SX1RFTEVNRVRSWQotICAg
IHZvaWQgbG9nRGlhZ25vc3RpY0V2ZW50KERPTVN0cmluZyBldmVudE5hbWUsIERPTVN0cmluZyBj
b250ZW50KTsKLSNlbmRpZgorICAgIFtDb25kaXRpb25hbD1JTlNQRUNUT1JfVEVMRU1FVFJZXSB2
b2lkIGxvZ0RpYWdub3N0aWNFdmVudChET01TdHJpbmcgZXZlbnROYW1lLCBET01TdHJpbmcgY29u
dGVudCk7CiB9OwogCiBkaWN0aW9uYXJ5IENvbnRleHRNZW51SXRlbSB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwCmluZGV4
IDBjNDQyZWU5MDg4NzdkMjA2N2Q2NWU4NzQ0MTY1MmE4Y2YwMGM4OGUuLmFjYTkzMjg2YWE0YTMy
YTYzNDE2OTA4NWJlNDcyMjRjNGJjYWY4ZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwCkBAIC03OTMsMTEgKzc5Mywx
MyBAQCB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZnJhbWVDbGVhcmVkU2NoZWR1bGVk
TmF2aWdhdGlvbkltcGwoSW5zdHJ1bWVudGluZwogICAgICAgICBpbnNwZWN0b3JQYWdlQWdlbnQt
PmZyYW1lQ2xlYXJlZFNjaGVkdWxlZE5hdmlnYXRpb24oZnJhbWUpOwogfQogCisjaWYgRU5BQkxF
KERBUktfTU9ERV9DU1MpIHx8IEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCiB2b2lkIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6ZGVmYXVsdEFwcGVhcmFuY2VEaWRDaGFuZ2VJbXBsKEluc3Ry
dW1lbnRpbmdBZ2VudHMmIGluc3RydW1lbnRpbmdBZ2VudHMsIGJvb2wgdXNlRGFya0FwcGVhcmFu
Y2UpCiB7CiAgICAgaWYgKEluc3BlY3RvclBhZ2VBZ2VudCogaW5zcGVjdG9yUGFnZUFnZW50ID0g
aW5zdHJ1bWVudGluZ0FnZW50cy5pbnNwZWN0b3JQYWdlQWdlbnQoKSkKICAgICAgICAgaW5zcGVj
dG9yUGFnZUFnZW50LT5kZWZhdWx0QXBwZWFyYW5jZURpZENoYW5nZSh1c2VEYXJrQXBwZWFyYW5j
ZSk7CiB9CisjZW5kaWYKIAogdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxEZXN0
cm95Q2FjaGVkUmVzb3VyY2VJbXBsKENhY2hlZFJlc291cmNlJiBjYWNoZWRSZXNvdXJjZSkKIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50
YXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRp
b24uaAppbmRleCAwM2JkZDU1Y2M5MzBkZTBjZmM2MWY4ZDllNDIxMGY0OTUyYWE0NjMzLi4xODg5
NTY0NzhlMTJlNWJhNGNlZDQ1NjhhOGU0ZmE0ZGQ5NzdiM2EyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oCkBAIC0yMjksNyAr
MjI5LDkgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGZyYW1lU3RvcHBlZExvYWRpbmcoRnJh
bWUmKTsKICAgICBzdGF0aWMgdm9pZCBmcmFtZVNjaGVkdWxlZE5hdmlnYXRpb24oRnJhbWUmLCBT
ZWNvbmRzIGRlbGF5KTsKICAgICBzdGF0aWMgdm9pZCBmcmFtZUNsZWFyZWRTY2hlZHVsZWROYXZp
Z2F0aW9uKEZyYW1lJik7CisjaWYgRU5BQkxFKERBUktfTU9ERV9DU1MpIHx8IEhBVkUoT1NfREFS
S19NT0RFX1NVUFBPUlQpCiAgICAgc3RhdGljIHZvaWQgZGVmYXVsdEFwcGVhcmFuY2VEaWRDaGFu
Z2UoUGFnZSYsIGJvb2wgdXNlRGFya0FwcGVhcmFuY2UpOworI2VuZGlmCiAgICAgc3RhdGljIHZv
aWQgd2lsbERlc3Ryb3lDYWNoZWRSZXNvdXJjZShDYWNoZWRSZXNvdXJjZSYpOwogCiAgICAgc3Rh
dGljIGJvb2wgd2lsbEludGVyY2VwdFJlcXVlc3QoY29uc3QgRnJhbWUqLCBjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmKTsKQEAgLTQzNCw3ICs0MzYsOSBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lk
IGZyYW1lU3RvcHBlZExvYWRpbmdJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMmLCBGcmFtZSYpOwog
ICAgIHN0YXRpYyB2b2lkIGZyYW1lU2NoZWR1bGVkTmF2aWdhdGlvbkltcGwoSW5zdHJ1bWVudGlu
Z0FnZW50cyYsIEZyYW1lJiwgU2Vjb25kcyBkZWxheSk7CiAgICAgc3RhdGljIHZvaWQgZnJhbWVD
bGVhcmVkU2NoZWR1bGVkTmF2aWdhdGlvbkltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyYsIEZyYW1l
Jik7CisjaWYgRU5BQkxFKERBUktfTU9ERV9DU1MpIHx8IEhBVkUoT1NfREFSS19NT0RFX1NVUFBP
UlQpCiAgICAgc3RhdGljIHZvaWQgZGVmYXVsdEFwcGVhcmFuY2VEaWRDaGFuZ2VJbXBsKEluc3Ry
dW1lbnRpbmdBZ2VudHMmLCBib29sIHVzZURhcmtBcHBlYXJhbmNlKTsKKyNlbmRpZgogICAgIHN0
YXRpYyB2b2lkIHdpbGxEZXN0cm95Q2FjaGVkUmVzb3VyY2VJbXBsKENhY2hlZFJlc291cmNlJik7
CiAKICAgICBzdGF0aWMgYm9vbCB3aWxsSW50ZXJjZXB0UmVxdWVzdEltcGwoSW5zdHJ1bWVudGlu
Z0FnZW50cyYsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYpOwpAQCAtMTIzNywxMSArMTI0MSwxMyBA
QCBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmZyYW1lQ2xlYXJlZFNjaGVk
dWxlZE5hdmlnYXRpb24oRnJhbWUmIGZyYQogICAgICAgICBmcmFtZUNsZWFyZWRTY2hlZHVsZWRO
YXZpZ2F0aW9uSW1wbCgqaW5zdHJ1bWVudGluZ0FnZW50cywgZnJhbWUpOwogfQogCisjaWYgRU5B
QkxFKERBUktfTU9ERV9DU1MpIHx8IEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCiBpbmxpbmUg
dm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRlZmF1bHRBcHBlYXJhbmNlRGlkQ2hhbmdl
KFBhZ2UmIHBhZ2UsIGJvb2wgdXNlRGFya0FwcGVhcmFuY2UpCiB7CiAgICAgRkFTVF9SRVRVUk5f
SUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7CiAgICAgZGVmYXVsdEFwcGVhcmFuY2VEaWRDaGFuZ2VJ
bXBsKGluc3RydW1lbnRpbmdBZ2VudHNGb3JQYWdlKHBhZ2UpLCB1c2VEYXJrQXBwZWFyYW5jZSk7
CiB9CisjZW5kaWYKIAogaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxs
RGVzdHJveUNhY2hlZFJlc291cmNlKENhY2hlZFJlc291cmNlJiBjYWNoZWRSZXNvdXJjZSkKIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTaGFkZXJQcm9n
cmFtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTaGFkZXJQcm9ncmFt
LmNwcAppbmRleCAyOTFiZDI0YjA2ZjM3ZDNiNDQ4ZTdiN2VjMzc4NjQ4NDE3OWFlZTU2Li5mODE2
YmI2ZjQzNmYyNmY3Yjg2M2YxMTllYjFjOTAxNGQ3MGZmODgxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU2hhZGVyUHJvZ3JhbS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclNoYWRlclByb2dyYW0uY3BwCkBAIC0yNiw2ICsy
Niw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yU2hhZGVyUHJv
Z3JhbS5oIgogCisjaWYgRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKQorCiAjaW5jbHVk
ZSAiSW5zcGVjdG9yQ2FudmFzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSWRlbnRpZmll
cnNGYWN0b3J5Lmg+CiAjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CkBAIC0xNTIsMTAgKzE1NCw2
IEBAIHN0YXRpYyBSZWZQdHI8V2ViR1BVU2hhZGVyTW9kdWxlPiBzaGFkZXJGb3JUeXBlKFdlYkdQ
VVBpcGVsaW5lJiBwaXBlbGluZSwgSW5zcGVjCiAKIFN0cmluZyBJbnNwZWN0b3JTaGFkZXJQcm9n
cmFtOjpyZXF1ZXN0U2hhZGVyU291cmNlKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6U2hh
ZGVyVHlwZSBzaGFkZXJUeXBlKQogewotI2lmICFFTkFCTEUoV0VCR0wpICYmICFFTkFCTEUoV0VC
R1BVKQotICAgIFVOVVNFRF9QQVJBTShzaGFkZXJUeXBlKTsKLSNlbmRpZgotCiAgICAgcmV0dXJu
IFdURjo6c3dpdGNoT24obV9wcm9ncmFtLAogI2lmIEVOQUJMRShXRUJHTCkKICAgICAgICAgWyZd
IChzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFdlYkdMUHJvZ3JhbT4gcHJvZ3JhbVdyYXBwZXIpIHsK
QEAgLTE4NCwxMSArMTgyLDYgQEAgU3RyaW5nIEluc3BlY3RvclNoYWRlclByb2dyYW06OnJlcXVl
c3RTaGFkZXJTb3VyY2UoSW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjoKIAogYm9vbCBJbnNw
ZWN0b3JTaGFkZXJQcm9ncmFtOjp1cGRhdGVTaGFkZXIoSW5zcGVjdG9yOjpQcm90b2NvbDo6Q2Fu
dmFzOjpTaGFkZXJUeXBlIHNoYWRlclR5cGUsIGNvbnN0IFN0cmluZyYgc291cmNlKQogewotI2lm
ICFFTkFCTEUoV0VCR0wpICYmICFFTkFCTEUoV0VCR1BVKQotICAgIFVOVVNFRF9QQVJBTShzaGFk
ZXJUeXBlKTsKLSAgICBVTlVTRURfUEFSQU0oc291cmNlKTsKLSNlbmRpZgotCiAgICAgcmV0dXJu
IFdURjo6c3dpdGNoT24obV9wcm9ncmFtLAogI2lmIEVOQUJMRShXRUJHTCkKICAgICAgICAgWyZd
IChzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFdlYkdMUHJvZ3JhbT4gcHJvZ3JhbVdyYXBwZXIpIHsK
QEAgLTI4MSwzICsyNzQsNSBAQCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpTaGFk
ZXJQcm9ncmFtPiBJbnNwZWN0b3JTaGFkZXJQcm9ncmFtOjpidWlsZE9iagogfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJH
UFUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU2hhZGVy
UHJvZ3JhbS5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclNoYWRlclByb2dy
YW0uaAppbmRleCA2ZGYxM2RmZmRlYjQwMDQwZmQ4YWE4OWJiZjQwNjVhZTgwNGZiNjY2Li5jY2M3
M2NlZjM3NDY3MDY3MGQ1OTZhOTNiMzJmZTA5YTU1ZDQzNWJiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU2hhZGVyUHJvZ3JhbS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTaGFkZXJQcm9ncmFtLmgKQEAgLTI1LDYgKzI1LDgg
QEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpZiBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUp
CisKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbE9iamVjdHMuaD4K
ICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CkBA
IC05OSwzICsxMDEsNSBAQCBwcml2YXRlOgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDYW52YXNBZ2VudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNhbnZhc0FnZW50LmNw
cAppbmRleCAxZDM5OGM1NDdjYzJmZjI5MTgwNTY3YjYyMDgwOGVhOTYxZTI2NWY1Li43MmI3Mzdm
OTQyN2IyMWM2NTAwMGE4NGEwNjg2ZTMyMjg1YzRkN2I3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNhbnZhc0FnZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNhbnZhc0FnZW50LmNwcApAQCAt
ODgsNyArODgsOSBAQCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6SW5zcGVjdG9yQ2FudmFzQWdlbnQo
UGFnZUFnZW50Q29udGV4dCYgY29udGV4dCkKICAgICAsIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
KGNvbnRleHQuaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKQogICAgICwgbV9pbnNwZWN0ZWRQYWdlKGNv
bnRleHQuaW5zcGVjdGVkUGFnZSkKICAgICAsIG1fY2FudmFzRGVzdHJveWVkVGltZXIoKnRoaXMs
ICZJbnNwZWN0b3JDYW52YXNBZ2VudDo6Y2FudmFzRGVzdHJveWVkVGltZXJGaXJlZCkKKyNpZiBF
TkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpCiAgICAgLCBtX3Byb2dyYW1EZXN0cm95ZWRU
aW1lcigqdGhpcywgJkluc3BlY3RvckNhbnZhc0FnZW50Ojpwcm9ncmFtRGVzdHJveWVkVGltZXJG
aXJlZCkKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpCiB7CiB9CiAK
QEAgLTEzMiw3ICsxMzQsNyBAQCB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjplbmFibGUoRXJy
b3JTdHJpbmcmKQogICAgICAgICAgICAgLy8gVGhlIGFjdHVhbCAiY29udGV4dCIgZm9yIFdlYkdQ
VSBpcyB0aGUgYFdlYkdQVURldmljZWAsIG5vdCB0aGUgPGNhbnZhcz4uCiAgICAgICAgICAgICBp
ZiAoaXM8R1BVQ2FudmFzQ29udGV4dD4oY29udGV4dCkpCiAgICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0jZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR1BVKQogCiAgICAgICAgICAgICBpZiAo
ZXhpc3RzSW5DdXJyZW50UGFnZShjb250ZXh0LT5jYW52YXNCYXNlKCkuc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpKSkKICAgICAgICAgICAgICAgICBiaW5kQ2FudmFzKCpjb250ZXh0LCBmYWxzZSk7
CkBAIC0xNDcsNyArMTQ5LDcgQEAgdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZW5hYmxlKEVy
cm9yU3RyaW5nJikKICAgICAgICAgICAgICAgICBiaW5kQ2FudmFzKCpkZXZpY2UsIGZhbHNlKTsK
ICAgICAgICAgfQogICAgIH0KLSNlbmRpZgorI2VuZGlmIC8vIEVOQUJMRShXRUJHUFUpCiAKICNp
ZiBFTkFCTEUoV0VCR0wpCiAgICAgewpAQCAtMTU3LDcgKzE1OSw3IEBAIHZvaWQgSW5zcGVjdG9y
Q2FudmFzQWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYpCiAgICAgICAgICAgICAgICAgZGlkQ3Jl
YXRlV2ViR0xQcm9ncmFtKCpjb250ZXh0V2ViR0xCYXNlLCAqcHJvZ3JhbSk7CiAgICAgICAgIH0K
ICAgICB9Ci0jZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCiAKICNpZiBFTkFCTEUoV0VC
R1BVKQogICAgIHsKQEAgLTE2Nyw3ICsxNjksNyBAQCB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50
OjplbmFibGUoRXJyb3JTdHJpbmcmKQogICAgICAgICAgICAgICAgIGRpZENyZWF0ZVdlYkdQVVBp
cGVsaW5lKCpkZXZpY2UsICpwaXBlbGluZSk7CiAgICAgICAgIH0KICAgICB9Ci0jZW5kaWYKKyNl
bmRpZiAvLyBFTkFCTEUoV0VCR1BVKQogfQogCiB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50Ojpk
aXNhYmxlKEVycm9yU3RyaW5nJikKQEAgLTMwMyw2ICszMDUsNyBAQCB2b2lkIEluc3BlY3RvckNh
bnZhc0FnZW50OjpzdG9wUmVjb3JkaW5nKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3Qg
U3RyaW5nJgogICAgIGRpZEZpbmlzaFJlY29yZGluZ0NhbnZhc0ZyYW1lKCpjb250ZXh0LCB0cnVl
KTsKIH0KIAorI2lmIEVOQUJMRShXRUJHTCkgfHwgRU5BQkxFKFdFQkdQVSkKIHZvaWQgSW5zcGVj
dG9yQ2FudmFzQWdlbnQ6OnJlcXVlc3RTaGFkZXJTb3VyY2UoRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nLCBjb25zdCBTdHJpbmcmIHByb2dyYW1JZCwgY29uc3QgU3RyaW5nJiBzaGFkZXJUeXBlU3Ry
aW5nLCBTdHJpbmcqIG91dFNvdXJjZSkKIHsKICAgICBhdXRvIGluc3BlY3RvclByb2dyYW0gPSBh
c3NlcnRJbnNwZWN0b3JQcm9ncmFtKGVycm9yU3RyaW5nLCBwcm9ncmFtSWQpOwpAQCAtMzQwLDYg
KzM0Myw3IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnVwZGF0ZVNoYWRlcihFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYKICAgICAgICAgZXJyb3JTdHJpbmcgPSAi
RmFpbGVkIHRvIHVwZGF0ZSBzaGFkZXIgb2YgZ2l2ZW4gc2hhZGVyVHlwZSBmb3IgZ2l2ZW4gcHJv
Z3JhbUlkIl9zOwogfQogCisjaWYgRU5BQkxFKFdFQkdMKQogdm9pZCBJbnNwZWN0b3JDYW52YXNB
Z2VudDo6c2V0U2hhZGVyUHJvZ3JhbURpc2FibGVkKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
Y29uc3QgU3RyaW5nJiBwcm9ncmFtSWQsIGJvb2wgZGlzYWJsZWQpCiB7CiAgICAgYXV0byBpbnNw
ZWN0b3JQcm9ncmFtID0gYXNzZXJ0SW5zcGVjdG9yUHJvZ3JhbShlcnJvclN0cmluZywgcHJvZ3Jh
bUlkKTsKQEAgLTM1Nyw2ICszNjEsOCBAQCB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpzZXRT
aGFkZXJQcm9ncmFtSGlnaGxpZ2h0ZWQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLAogCiAgICAg
aW5zcGVjdG9yUHJvZ3JhbS0+c2V0SGlnaGxpZ2h0ZWQoaGlnaGxpZ2h0ZWQpOwogfQorI2VuZGlm
IC8vIEVOQUJMRShXRUJHTCkKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJH
UFUpCiAKIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmZyYW1lTmF2aWdhdGVkKEZyYW1lJiBm
cmFtZSkKIHsKQEAgLTYyNSw3ICs2MzEsNyBAQCBib29sIEluc3BlY3RvckNhbnZhc0FnZW50Ojpp
c1dlYkdMUHJvZ3JhbUhpZ2hsaWdodGVkKFdlYkdMUHJvZ3JhbSYgcHJvZ3JhbSkKIAogICAgIHJl
dHVybiBpbnNwZWN0b3JQcm9ncmFtLT5oaWdobGlnaHRlZCgpOwogfQotI2VuZGlmCisjZW5kaWYg
Ly8gRU5BQkxFKFdFQkdMKQogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIHZvaWQgSW5zcGVjdG9yQ2Fu
dmFzQWdlbnQ6OmRpZENyZWF0ZVdlYkdQVURldmljZShXZWJHUFVEZXZpY2UmIGRldmljZSkKQEAg
LTY4OCw3ICs2OTQsNyBAQCB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50Ojp3aWxsRGVzdHJveVdl
YkdQVVBpcGVsaW5lKFdlYkdQVVBpcGVsaW5lJiBwaXBlbGluZSkKIAogICAgIHVuYmluZFByb2dy
YW0oKmluc3BlY3RvclByb2dyYW0pOwogfQotI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdQ
VSkKIAogdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6c3RhcnRSZWNvcmRpbmcoSW5zcGVjdG9y
Q2FudmFzJiBpbnNwZWN0b3JDYW52YXMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlY29yZGluZzo6
SW5pdGlhdG9yIGluaXRpYXRvciwgUmVjb3JkaW5nT3B0aW9ucyYmIHJlY29yZGluZ09wdGlvbnMp
CiB7CkBAIC03MDAsMTAgKzcwNiwxMCBAQCB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpzdGFy
dFJlY29yZGluZyhJbnNwZWN0b3JDYW52YXMmIGluc3BlY3RvckNhbnZhcywgSW5zcAogICAgICAg
ICAmJiAhaXM8SW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0Pihjb250ZXh0KQogI2lmIEVOQUJM
RShXRUJHTCkKICAgICAgICAgJiYgIWlzPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4oY29udGV4dCkK
LSNlbmRpZgorI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKICNpZiBFTkFCTEUoV0VCR0wyKQogICAg
ICAgICAmJiAhaXM8V2ViR0wyUmVuZGVyaW5nQ29udGV4dD4oY29udGV4dCkKLSNlbmRpZgorI2Vu
ZGlmIC8vIEVOQUJMRShXRUJHTDIpCiAgICAgKQogICAgICAgICByZXR1cm47CiAKQEAgLTczMyw2
ICs3MzksNyBAQCB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpjYW52YXNEZXN0cm95ZWRUaW1l
ckZpcmVkKCkKICAgICBtX3JlbW92ZWRDYW52YXNJZGVudGlmaWVycy5jbGVhcigpOwogfQogCisj
aWYgRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKQogdm9pZCBJbnNwZWN0b3JDYW52YXNB
Z2VudDo6cHJvZ3JhbURlc3Ryb3llZFRpbWVyRmlyZWQoKQogewogICAgIGlmICghbV9yZW1vdmVk
UHJvZ3JhbUlkZW50aWZpZXJzLnNpemUoKSkKQEAgLTc0Myw2ICs3NTAsNyBAQCB2b2lkIEluc3Bl
Y3RvckNhbnZhc0FnZW50Ojpwcm9ncmFtRGVzdHJveWVkVGltZXJGaXJlZCgpCiAKICAgICBtX3Jl
bW92ZWRQcm9ncmFtSWRlbnRpZmllcnMuY2xlYXIoKTsKIH0KKyNlbmRpZiAvLyBFTkFCTEUoV0VC
R0wpIHx8IEVOQUJMRShXRUJHUFUpCiAKIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnJlc2V0
KCkKIHsKQEAgLTc1NiwxMCArNzY0LDEyIEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnJl
c2V0KCkKICAgICBpZiAobV9jYW52YXNEZXN0cm95ZWRUaW1lci5pc0FjdGl2ZSgpKQogICAgICAg
ICBtX2NhbnZhc0Rlc3Ryb3llZFRpbWVyLnN0b3AoKTsKIAorI2lmIEVOQUJMRShXRUJHTCkgfHwg
RU5BQkxFKFdFQkdQVSkKICAgICBtX2lkZW50aWZpZXJUb0luc3BlY3RvclByb2dyYW0uY2xlYXIo
KTsKICAgICBtX3JlbW92ZWRQcm9ncmFtSWRlbnRpZmllcnMuY2xlYXIoKTsKICAgICBpZiAobV9w
cm9ncmFtRGVzdHJveWVkVGltZXIuaXNBY3RpdmUoKSkKICAgICAgICAgbV9wcm9ncmFtRGVzdHJv
eWVkVGltZXIuc3RvcCgpOworI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkgfHwgRU5BQkxFKFdFQkdQ
VSkKIAogICAgIG1fcmVjb3JkaW5nQ2FudmFzSWRlbnRpZmllcnMuY2xlYXIoKTsKIH0KQEAgLTc5
OCw3ICs4MDgsNyBAQCBJbnNwZWN0b3JDYW52YXMmIEluc3BlY3RvckNhbnZhc0FnZW50OjpiaW5k
Q2FudmFzKFdlYkdQVURldmljZSYgZGV2aWNlLCBib29sIGNhcAogCiAgICAgcmV0dXJuIGluc3Bl
Y3RvckNhbnZhczsKIH0KLSNlbmRpZgorI2VuZGlmIC8vIEVOQUJMRShXRUJHUFUpCiAKIHZvaWQg
SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnVuYmluZENhbnZhcyhJbnNwZWN0b3JDYW52YXMmIGluc3Bl
Y3RvckNhbnZhcykKIHsKQEAgLTgxMSw3ICs4MjEsNyBAQCB2b2lkIEluc3BlY3RvckNhbnZhc0Fn
ZW50Ojp1bmJpbmRDYW52YXMoSW5zcGVjdG9yQ2FudmFzJiBpbnNwZWN0b3JDYW52YXMpCiAKICAg
ICBmb3IgKGF1dG8qIGluc3BlY3RvclByb2dyYW0gOiBwcm9ncmFtc1RvUmVtb3ZlKQogICAgICAg
ICB1bmJpbmRQcm9ncmFtKCppbnNwZWN0b3JQcm9ncmFtKTsKLSNlbmRpZgorI2VuZGlmIC8vIEVO
QUJMRShXRUJHTCkKIAogICAgIGlmIChhdXRvKiBjb250ZXh0ID0gaW5zcGVjdG9yQ2FudmFzLmNh
bnZhc0NvbnRleHQoKSkKICAgICAgICAgY29udGV4dC0+Y2FudmFzQmFzZSgpLnJlbW92ZU9ic2Vy
dmVyKCp0aGlzKTsKQEAgLTg1Niw4ICs4NjYsOSBAQCBSZWZQdHI8SW5zcGVjdG9yQ2FudmFzPiBJ
bnNwZWN0b3JDYW52YXNBZ2VudDo6ZmluZEluc3BlY3RvckNhbnZhcyhXZWJHUFVEZXZpY2UmCiAg
ICAgfQogICAgIHJldHVybiBudWxscHRyOwogfQotI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxFKFdF
QkdQVSkKIAorI2lmIEVOQUJMRShXRUJHTCkgfHwgRU5BQkxFKFdFQkdQVSkKIHZvaWQgSW5zcGVj
dG9yQ2FudmFzQWdlbnQ6OnVuYmluZFByb2dyYW0oSW5zcGVjdG9yU2hhZGVyUHJvZ3JhbSYgaW5z
cGVjdG9yUHJvZ3JhbSkKIHsKICAgICBTdHJpbmcgaWRlbnRpZmllciA9IGluc3BlY3RvclByb2dy
YW0uaWRlbnRpZmllcigpOwpAQCAtODkxLDcgKzkwMiw3IEBAIFJlZlB0cjxJbnNwZWN0b3JTaGFk
ZXJQcm9ncmFtPiBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZmluZEluc3BlY3RvclByb2dyYW0oV2Vi
R0xQCiAgICAgfQogICAgIHJldHVybiBudWxscHRyOwogfQotI2VuZGlmCisjZW5kaWYgLy8gRU5B
QkxFKFdFQkdMKQogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIFJlZlB0cjxJbnNwZWN0b3JTaGFkZXJQ
cm9ncmFtPiBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZmluZEluc3BlY3RvclByb2dyYW0oV2ViR1BV
UGlwZWxpbmUmIHBpcGVsaW5lKQpAQCAtOTAyLDYgKzkxMyw3IEBAIFJlZlB0cjxJbnNwZWN0b3JT
aGFkZXJQcm9ncmFtPiBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZmluZEluc3BlY3RvclByb2dyYW0o
V2ViR1BVCiAgICAgfQogICAgIHJldHVybiBudWxscHRyOwogfQotI2VuZGlmCisjZW5kaWYgLy8g
RU5BQkxFKFdFQkdQVSkKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUp
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ2FudmFzQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ2FudmFzQWdlbnQuaAppbmRleCBmZjlhNTMzZTA0ODE0
Mzg1MGI5YTk2OTBjYjE5OWFlNDdjMjNiNTc2Li4wZWYxYWVmYjY0N2VhZDk5YjdkMGViMjQzZmQw
YjQwOGNlNDViNjBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3RvckNhbnZhc0FnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JDYW52YXNBZ2VudC5oCkBAIC00MywxNyArNDMsMTkgQEAgY2xhc3MgSW5q
ZWN0ZWRTY3JpcHRNYW5hZ2VyOwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0OworI2lmIEVOQUJMRShXRUJHTCkgfHwgRU5BQkxFKFdFQkdQVSkKIGNs
YXNzIEluc3BlY3RvclNoYWRlclByb2dyYW07CiAjaWYgRU5BQkxFKFdFQkdMKQogY2xhc3MgV2Vi
R0xQcm9ncmFtOwogY2xhc3MgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTsKLSNlbmRpZgorI2Vu
ZGlmIC8vIEVOQUJMRShXRUJHTCkKICNpZiBFTkFCTEUoV0VCR1BVKQogY2xhc3MgR1BVQ2FudmFz
Q29udGV4dDsKIGNsYXNzIFdlYkdQVURldmljZTsKIGNsYXNzIFdlYkdQVVBpcGVsaW5lOwogY2xh
c3MgV2ViR1BVU3dhcENoYWluOwotI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdQVSkKKyNl
bmRpZiAvLyBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpCiAKIHR5cGVkZWYgU3RyaW5n
IEVycm9yU3RyaW5nOwogCkBAIC03OSwxMCArODEsMTQgQEAgcHVibGljOgogICAgIHZvaWQgc2V0
UmVjb3JkaW5nQXV0b0NhcHR1cmVGcmFtZUNvdW50KEVycm9yU3RyaW5nJiwgaW50IGNvdW50KSBv
dmVycmlkZTsKICAgICB2b2lkIHN0YXJ0UmVjb3JkaW5nKEVycm9yU3RyaW5nJiwgY29uc3QgU3Ry
aW5nJiBjYW52YXNJZCwgY29uc3QgaW50KiBmcmFtZUNvdW50LCBjb25zdCBpbnQqIG1lbW9yeUxp
bWl0KSBvdmVycmlkZTsKICAgICB2b2lkIHN0b3BSZWNvcmRpbmcoRXJyb3JTdHJpbmcmLCBjb25z
dCBTdHJpbmcmIGNhbnZhc0lkKSBvdmVycmlkZTsKKyNpZiBFTkFCTEUoV0VCR0wpIHx8IEVOQUJM
RShXRUJHUFUpCiAgICAgdm9pZCByZXF1ZXN0U2hhZGVyU291cmNlKEVycm9yU3RyaW5nJiwgY29u
c3QgU3RyaW5nJiBwcm9ncmFtSWQsIGNvbnN0IFN0cmluZyYgc2hhZGVyVHlwZSwgU3RyaW5nKiBz
b3VyY2UpIG92ZXJyaWRlOwogICAgIHZvaWQgdXBkYXRlU2hhZGVyKEVycm9yU3RyaW5nJiwgY29u
c3QgU3RyaW5nJiBwcm9ncmFtSWQsIGNvbnN0IFN0cmluZyYgc2hhZGVyVHlwZSwgY29uc3QgU3Ry
aW5nJiBzb3VyY2UpIG92ZXJyaWRlOworI2lmIEVOQUJMRShXRUJHTCkKICAgICB2b2lkIHNldFNo
YWRlclByb2dyYW1EaXNhYmxlZChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgcHJvZ3JhbUlk
LCBib29sIGRpc2FibGVkKSBvdmVycmlkZTsKICAgICB2b2lkIHNldFNoYWRlclByb2dyYW1IaWdo
bGlnaHRlZChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgcHJvZ3JhbUlkLCBib29sIGhpZ2hs
aWdodGVkKSBvdmVycmlkZTsKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCisjZW5kaWYgLy8gRU5B
QkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKQogCiAgICAgLy8gQ2FudmFzT2JzZXJ2ZXIKICAg
ICB2b2lkIGNhbnZhc0NoYW5nZWQoQ2FudmFzQmFzZSYsIGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJy
aWRlOwpAQCAtMTA0LDE0ICsxMTAsMTQgQEAgcHVibGljOgogICAgIHZvaWQgd2lsbERlc3Ryb3lX
ZWJHTFByb2dyYW0oV2ViR0xQcm9ncmFtJik7CiAgICAgYm9vbCBpc1dlYkdMUHJvZ3JhbURpc2Fi
bGVkKFdlYkdMUHJvZ3JhbSYpOwogICAgIGJvb2wgaXNXZWJHTFByb2dyYW1IaWdobGlnaHRlZChX
ZWJHTFByb2dyYW0mKTsKLSNlbmRpZgorI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKICNpZiBFTkFC
TEUoV0VCR1BVKQogICAgIHZvaWQgZGlkQ3JlYXRlV2ViR1BVRGV2aWNlKFdlYkdQVURldmljZSYp
OwogICAgIHZvaWQgd2lsbERlc3Ryb3lXZWJHUFVEZXZpY2UoV2ViR1BVRGV2aWNlJik7CiAgICAg
dm9pZCB3aWxsQ29uZmlndXJlU3dhcENoYWluKEdQVUNhbnZhc0NvbnRleHQmLCBXZWJHUFVTd2Fw
Q2hhaW4mKTsKICAgICB2b2lkIGRpZENyZWF0ZVdlYkdQVVBpcGVsaW5lKFdlYkdQVURldmljZSYs
IFdlYkdQVVBpcGVsaW5lJik7CiAgICAgdm9pZCB3aWxsRGVzdHJveVdlYkdQVVBpcGVsaW5lKFdl
YkdQVVBpcGVsaW5lJik7Ci0jZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR1BVKQogCiBwcml2
YXRlOgogICAgIHN0cnVjdCBSZWNvcmRpbmdPcHRpb25zIHsKQEAgLTEyMiwyOCArMTI4LDMyIEBA
IHByaXZhdGU6CiAgICAgdm9pZCBzdGFydFJlY29yZGluZyhJbnNwZWN0b3JDYW52YXMmLCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpSZWNvcmRpbmc6OkluaXRpYXRvciwgUmVjb3JkaW5nT3B0aW9ucyYm
ID0geyB9KTsKIAogICAgIHZvaWQgY2FudmFzRGVzdHJveWVkVGltZXJGaXJlZCgpOworI2lmIEVO
QUJMRShXRUJHTCkgfHwgRU5BQkxFKFdFQkdQVSkKICAgICB2b2lkIHByb2dyYW1EZXN0cm95ZWRU
aW1lckZpcmVkKCk7CisjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKQog
ICAgIHZvaWQgcmVzZXQoKTsKIAogICAgIEluc3BlY3RvckNhbnZhcyYgYmluZENhbnZhcyhDYW52
YXNSZW5kZXJpbmdDb250ZXh0JiwgYm9vbCBjYXB0dXJlQmFja3RyYWNlKTsKICNpZiBFTkFCTEUo
V0VCR1BVKQogICAgIEluc3BlY3RvckNhbnZhcyYgYmluZENhbnZhcyhXZWJHUFVEZXZpY2UmLCBi
b29sIGNhcHR1cmVCYWNrdHJhY2UpOwotI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdQVSkK
ICAgICB2b2lkIHVuYmluZENhbnZhcyhJbnNwZWN0b3JDYW52YXMmKTsKICAgICBSZWZQdHI8SW5z
cGVjdG9yQ2FudmFzPiBhc3NlcnRJbnNwZWN0b3JDYW52YXMoRXJyb3JTdHJpbmcmLCBjb25zdCBT
dHJpbmcmIGNhbnZhc0lkKTsKICAgICBSZWZQdHI8SW5zcGVjdG9yQ2FudmFzPiBmaW5kSW5zcGVj
dG9yQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQmKTsKICNpZiBFTkFCTEUoV0VCR1BVKQog
ICAgIFJlZlB0cjxJbnNwZWN0b3JDYW52YXM+IGZpbmRJbnNwZWN0b3JDYW52YXMoV2ViR1BVRGV2
aWNlJik7Ci0jZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR1BVKQogCisjaWYgRU5BQkxFKFdF
QkdMKSB8fCBFTkFCTEUoV0VCR1BVKQogICAgIHZvaWQgdW5iaW5kUHJvZ3JhbShJbnNwZWN0b3JT
aGFkZXJQcm9ncmFtJik7CiAgICAgUmVmUHRyPEluc3BlY3RvclNoYWRlclByb2dyYW0+IGFzc2Vy
dEluc3BlY3RvclByb2dyYW0oRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHByb2dyYW1JZCk7
CiAjaWYgRU5BQkxFKFdFQkdMKQogICAgIFJlZlB0cjxJbnNwZWN0b3JTaGFkZXJQcm9ncmFtPiBm
aW5kSW5zcGVjdG9yUHJvZ3JhbShXZWJHTFByb2dyYW0mKTsKLSNlbmRpZgorI2VuZGlmIC8vIEVO
QUJMRShXRUJHTCkKICNpZiBFTkFCTEUoV0VCR1BVKQogICAgIFJlZlB0cjxJbnNwZWN0b3JTaGFk
ZXJQcm9ncmFtPiBmaW5kSW5zcGVjdG9yUHJvZ3JhbShXZWJHUFVQaXBlbGluZSYpOwotI2VuZGlm
CisjZW5kaWYgLy8gRU5BQkxFKFdFQkdQVSkKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpIHx8IEVO
QUJMRShXRUJHUFUpCiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yOjpDYW52YXNGcm9u
dGVuZERpc3BhdGNoZXI+IG1fZnJvbnRlbmREaXNwYXRjaGVyOwogICAgIFJlZlB0cjxJbnNwZWN0
b3I6OkNhbnZhc0JhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwpAQCAtMTU1
LDkgKzE2NSwxMSBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxTdHJpbmc+IG1fcmVtb3ZlZENhbnZh
c0lkZW50aWZpZXJzOwogICAgIFRpbWVyIG1fY2FudmFzRGVzdHJveWVkVGltZXI7CiAKKyNpZiBF
TkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpCiAgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0
cjxJbnNwZWN0b3JTaGFkZXJQcm9ncmFtPj4gbV9pZGVudGlmaWVyVG9JbnNwZWN0b3JQcm9ncmFt
OwogICAgIFZlY3RvcjxTdHJpbmc+IG1fcmVtb3ZlZFByb2dyYW1JZGVudGlmaWVyczsKICAgICBU
aW1lciBtX3Byb2dyYW1EZXN0cm95ZWRUaW1lcjsKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpIHx8
IEVOQUJMRShXRUJHUFUpCiAKICAgICBIYXNoU2V0PFN0cmluZz4gbV9yZWNvcmRpbmdDYW52YXNJ
ZGVudGlmaWVyczsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JET01BZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3RvckRPTUFnZW50LmNwcAppbmRleCBhMmY4ZGZhMTYyNGRkZmY0MmUzNTljODYyZTA3
NDhlNzJlY2JjOTZjLi5jMzVhMDU4Yjk0YTlhOGVhZmI0MWUzY2I4MjM1MTA1YTMxYWRkOGVlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFn
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRP
TUFnZW50LmNwcApAQCAtMTIwNywxMCArMTIwNywxNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8SGlnaGxp
Z2h0Q29uZmlnPiBJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0Q29uZmlnRnJvbUluc3BlY3Rv
cgogICAgIHJldHVybiBoaWdobGlnaHRDb25maWc7CiB9CiAKKyNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQordm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0SW5zcGVjdE1vZGVFbmFibGVkKEVycm9y
U3RyaW5nJiBlcnJvclN0cmluZywgYm9vbCBlbmFibGVkLCBjb25zdCBKU09OOjpPYmplY3QqIGhp
Z2hsaWdodENvbmZpZykKK3sKKyAgICBzZXRTZWFyY2hpbmdGb3JOb2RlKGVycm9yU3RyaW5nLCBl
bmFibGVkLCBoaWdobGlnaHRDb25maWcgPyBoaWdobGlnaHRDb25maWcgOiBudWxscHRyLCBmYWxz
ZSk7Cit9CisjZWxzZQogdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0SW5zcGVjdE1vZGVFbmFi
bGVkKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgYm9vbCBlbmFibGVkLCBjb25zdCBKU09OOjpP
YmplY3QqIGhpZ2hsaWdodENvbmZpZywgY29uc3QgYm9vbCogc2hvd1J1bGVycykKIHsKICAgICBz
ZXRTZWFyY2hpbmdGb3JOb2RlKGVycm9yU3RyaW5nLCBlbmFibGVkLCBoaWdobGlnaHRDb25maWcg
PyBoaWdobGlnaHRDb25maWcgOiBudWxscHRyLCBzaG93UnVsZXJzICYmICpzaG93UnVsZXJzKTsK
IH0KKyNlbmRpZgogCiB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHRSZWN0KEVycm9y
U3RyaW5nJiwgaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGNvbnN0IEpTT046
Ok9iamVjdCogY29sb3IsIGNvbnN0IEpTT046Ok9iamVjdCogb3V0bGluZUNvbG9yLCBjb25zdCBi
b29sKiB1c2VQYWdlQ29vcmRpbmF0ZXMpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmgKaW5kZXggN2RmMGU4M2ViNTNkNzVjNDFj
NTU0ZjE0MDEyMzViYTIxNzE5NDE0Yy4uZThhNzRmNmQwMDczNjJlYWI3MzkyMzQzYTk1MTFjMjQy
OTYwNDhkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JET01BZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yRE9NQWdlbnQuaApAQCAtMTMxLDcgKzEzMSwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBk
aXNjYXJkU2VhcmNoUmVzdWx0cyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgc2VhcmNoSWQp
IG92ZXJyaWRlOwogICAgIHZvaWQgcmVzb2x2ZU5vZGUoRXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlk
LCBjb25zdCBTdHJpbmcqIG9iamVjdEdyb3VwLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0KSBvdmVycmlkZTsKICAgICB2b2lkIGdldEF0
dHJpYnV0ZXMoRXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxT
dHJpbmc+PiYgcmVzdWx0KSBvdmVycmlkZTsKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAg
IHZvaWQgc2V0SW5zcGVjdE1vZGVFbmFibGVkKEVycm9yU3RyaW5nJiwgYm9vbCBlbmFibGVkLCBj
b25zdCBKU09OOjpPYmplY3QqIGhpZ2hsaWdodENvbmZpZykgb3ZlcnJpZGU7CisjZWxzZQogICAg
IHZvaWQgc2V0SW5zcGVjdE1vZGVFbmFibGVkKEVycm9yU3RyaW5nJiwgYm9vbCBlbmFibGVkLCBj
b25zdCBKU09OOjpPYmplY3QqIGhpZ2hsaWdodENvbmZpZywgY29uc3QgYm9vbCogc2hvd1J1bGVy
cykgb3ZlcnJpZGU7CisjZW5kaWYKICAgICB2b2lkIHJlcXVlc3ROb2RlKEVycm9yU3RyaW5nJiwg
Y29uc3QgU3RyaW5nJiBvYmplY3RJZCwgaW50KiBub2RlSWQpIG92ZXJyaWRlOwogICAgIHZvaWQg
cHVzaE5vZGVCeVBhdGhUb0Zyb250ZW5kKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBwYXRo
LCBpbnQqIG5vZGVJZCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBoaWRlSGlnaGxpZ2h0KEVycm9yU3Ry
aW5nJikgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdl
bnRzL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdl
bnRzL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKaW5kZXggMDJlZGQ0Mzg1OTYwOWNjMGZjZDc5YmFi
YWJkNmYzMzk1NTA3MGRhOS4uNDM1MjI4OTRlMGY5MzAwZjAxOGY3MjVhNDJiYmM0YzU5Yzc0Nzg0
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JQ
YWdlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVj
dG9yUGFnZUFnZW50LmNwcApAQCAtMzU2LDcgKzM1Niw3IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFn
ZW50OjplbmFibGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQogICAgIHN0b3B3YXRjaC5yZXNl
dCgpOwogICAgIHN0b3B3YXRjaC5zdGFydCgpOwogCi0jaWYgSEFWRShPU19EQVJLX01PREVfU1VQ
UE9SVCkKKyNpZiBFTkFCTEUoREFSS19NT0RFX0NTUykgfHwgSEFWRShPU19EQVJLX01PREVfU1VQ
UE9SVCkKICAgICBkZWZhdWx0QXBwZWFyYW5jZURpZENoYW5nZShtX2luc3BlY3RlZFBhZ2UuZGVm
YXVsdFVzZURhcmtBcHBlYXJhbmNlKCkpOwogI2VuZGlmCiB9CkBAIC0zNjcsMTAgKzM2NywxNCBA
QCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYpCiAKICAgICBF
cnJvclN0cmluZyB1bnVzZWQ7CiAgICAgc2V0U2hvd1BhaW50UmVjdHModW51c2VkLCBmYWxzZSk7
CisjaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgc2V0U2hvd1J1bGVycyh1bnVzZWQsIGZh
bHNlKTsKKyNlbmRpZgogICAgIG92ZXJyaWRlVXNlckFnZW50KHVudXNlZCwgbnVsbHB0cik7CiAg
ICAgc2V0RW11bGF0ZWRNZWRpYSh1bnVzZWQsIGVtcHR5U3RyaW5nKCkpOworI2lmIEVOQUJMRShE
QVJLX01PREVfQ1NTKSB8fCBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQogICAgIHNldEZvcmNl
ZEFwcGVhcmFuY2UodW51c2VkLCBlbXB0eVN0cmluZygpKTsKKyNlbmRpZgogCiAgICAgYXV0byYg
aW5zcGVjdGVkUGFnZVNldHRpbmdzID0gbV9pbnNwZWN0ZWRQYWdlLnNldHRpbmdzKCk7CiAgICAg
aW5zcGVjdGVkUGFnZVNldHRpbmdzLnNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkSW5zcGVj
dG9yT3ZlcnJpZGUoV1RGOjpudWxsb3B0KTsKQEAgLTc3MCwxMCArNzc0LDEyIEBAIHZvaWQgSW5z
cGVjdG9yUGFnZUFnZW50OjpzZWFyY2hJblJlc291cmNlcyhFcnJvclN0cmluZyYsIGNvbnN0IFN0
cmluZyYgdGV4dCwgY29uCiAgICAgICAgIG5ldHdvcmtBZ2VudC0+c2VhcmNoT3RoZXJSZXF1ZXN0
cyhyZWdleCwgcmVzdWx0KTsKIH0KIAorI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQogdm9pZCBJ
bnNwZWN0b3JQYWdlQWdlbnQ6OnNldFNob3dSdWxlcnMoRXJyb3JTdHJpbmcmLCBib29sIHNob3dS
dWxlcnMpCiB7CiAgICAgbV9vdmVybGF5LT5zZXRTaG93UnVsZXJzKHNob3dSdWxlcnMpOwogfQor
I2VuZGlmCiAKIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzZXRTaG93UGFpbnRSZWN0cyhFcnJv
clN0cmluZyYsIGJvb2wgc2hvdykKIHsKQEAgLTg2OSwxMCArODc1LDEyIEBAIHZvaWQgSW5zcGVj
dG9yUGFnZUFnZW50OjpmcmFtZUNsZWFyZWRTY2hlZHVsZWROYXZpZ2F0aW9uKEZyYW1lJiBmcmFt
ZSkKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+ZnJhbWVDbGVhcmVkU2NoZWR1bGVkTmF2aWdh
dGlvbihmcmFtZUlkKCZmcmFtZSkpOwogfQogCisjaWYgRU5BQkxFKERBUktfTU9ERV9DU1MpIHx8
IEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCiB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6ZGVm
YXVsdEFwcGVhcmFuY2VEaWRDaGFuZ2UoYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSkKIHsKICAgICBt
X2Zyb250ZW5kRGlzcGF0Y2hlci0+ZGVmYXVsdEFwcGVhcmFuY2VEaWRDaGFuZ2UodXNlRGFya0Fw
cGVhcmFuY2UgPyBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpBcHBlYXJhbmNlOjpEYXJrIDog
SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6QXBwZWFyYW5jZTo6TGlnaHQpOwogfQorI2VuZGlm
CiAKIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpkaWRDbGVhcldpbmRvd09iamVjdEluV29ybGQo
RnJhbWUmIGZyYW1lLCBET01XcmFwcGVyV29ybGQmIHdvcmxkKQogewpAQCAtMTAwOCwxMyArMTAx
Niw5IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzZXRFbXVsYXRlZE1lZGlhKEVycm9yU3Ry
aW5nJiwgY29uc3QgU3RyaW5nJiBtZWRpYSkKICAgICBkb2N1bWVudC0+ZXZhbHVhdGVNZWRpYVF1
ZXJpZXNBbmRSZXBvcnRDaGFuZ2VzKCk7CiB9CiAKKyNpZiBFTkFCTEUoREFSS19NT0RFX0NTUykg
fHwgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50Ojpz
ZXRGb3JjZWRBcHBlYXJhbmNlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBhcHBlYXJhbmNl
KQogewotICAgIGlmIChhcHBlYXJhbmNlID09IG1fZm9yY2VkQXBwZWFyYW5jZSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgbV9mb3JjZWRBcHBlYXJhbmNlID0gYXBwZWFyYW5jZTsKLQogICAgIGlm
IChhcHBlYXJhbmNlID09ICJMaWdodCJfcykKICAgICAgICAgbV9pbnNwZWN0ZWRQYWdlLnNldFVz
ZURhcmtBcHBlYXJhbmNlT3ZlcnJpZGUoZmFsc2UpOwogICAgIGVsc2UgaWYgKGFwcGVhcmFuY2Ug
PT0gIkRhcmsiX3MpCkBAIC0xMDIyLDYgKzEwMjYsNyBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2Vu
dDo6c2V0Rm9yY2VkQXBwZWFyYW5jZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgYXBwZWFy
YQogICAgIGVsc2UKICAgICAgICAgbV9pbnNwZWN0ZWRQYWdlLnNldFVzZURhcmtBcHBlYXJhbmNl
T3ZlcnJpZGUoV1RGOjpudWxsb3B0KTsKIH0KKyNlbmRpZgogCiB2b2lkIEluc3BlY3RvclBhZ2VB
Z2VudDo6YXBwbHlVc2VyQWdlbnRPdmVycmlkZShTdHJpbmcmIHVzZXJBZ2VudCkKIHsKQEAgLTEw
NjksOSArMTA3NCw5IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzbmFwc2hvdFJlY3QoRXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgeCwgaW50IHksIGluCiAgICAgKm91dERhdGFVUkwg
PSBzbmFwc2hvdC0+dG9EYXRhVVJMKCJpbWFnZS9wbmciX3MsIFdURjo6bnVsbG9wdCwgUHJlc2Vy
dmVSZXNvbHV0aW9uOjpZZXMpOwogfQogCisjaWYgRU5BQkxFKFdFQl9BUkNISVZFKSAmJiBVU0Uo
Q0YpCiB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6YXJjaGl2ZShFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIFN0cmluZyogZGF0YSkKIHsKLSNpZiBFTkFCTEUoV0VCX0FSQ0hJVkUpICYmIFVTRShD
RikKICAgICBhdXRvIGFyY2hpdmUgPSBMZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGUobV9pbnNwZWN0
ZWRQYWdlLm1haW5GcmFtZSgpKTsKICAgICBpZiAoIWFyY2hpdmUpIHsKICAgICAgICAgZXJyb3JT
dHJpbmcgPSAiQ291bGQgbm90IGNyZWF0ZSB3ZWIgYXJjaGl2ZSBmb3IgbWFpbiBmcmFtZSJfczsK
QEAgLTEwODAsMTAgKzEwODUsNyBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6YXJjaGl2ZShF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFN0cmluZyogZGF0YSkKIAogICAgIFJldGFpblB0cjxD
RkRhdGFSZWY+IGJ1ZmZlciA9IGFyY2hpdmUtPnJhd0RhdGFSZXByZXNlbnRhdGlvbigpOwogICAg
ICpkYXRhID0gYmFzZTY0RW5jb2RlKENGRGF0YUdldEJ5dGVQdHIoYnVmZmVyLmdldCgpKSwgQ0ZE
YXRhR2V0TGVuZ3RoKGJ1ZmZlci5nZXQoKSkpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oZGF0
YSk7Ci0gICAgZXJyb3JTdHJpbmcgPSAiTm90IHN1cHBvcnRlZCJfczsKLSNlbmRpZgogfQorI2Vu
ZGlmCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUGFnZUFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclBhZ2VBZ2VudC5oCmluZGV4IDZjNzU4Mjk1MDIzMzZi
MDgwNmRiMjUzMWU3ODE4NmQyYzU1OWU0NGMuLjNiY2QwNDg3Y2ZjODc2NmJhYTAxYzc4MDQxNzNh
MTU3NDdiNDdiMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yUGFnZUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JQYWdlQWdlbnQuaApAQCAtMTA4LDEzICsxMDgsMTkgQEAgcHVibGljOgogICAg
IHZvaWQgc2V0Qm9vdHN0cmFwU2NyaXB0KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nKiBvcHRp
b25hbFNvdXJjZSkgZmluYWw7CiAgICAgdm9pZCBzZWFyY2hJblJlc291cmNlKEVycm9yU3RyaW5n
JiwgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5n
JiBxdWVyeSwgY29uc3QgYm9vbCogb3B0aW9uYWxDYXNlU2Vuc2l0aXZlLCBjb25zdCBib29sKiBv
cHRpb25hbElzUmVnZXgsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxSZXF1ZXN0SWQsIFJlZlB0cjxK
U09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkdlbmVyaWNUeXBlczo6U2VhcmNoTWF0
Y2g+PiYpIG92ZXJyaWRlOwogICAgIHZvaWQgc2VhcmNoSW5SZXNvdXJjZXMoRXJyb3JTdHJpbmcm
LCBjb25zdCBTdHJpbmcmLCBjb25zdCBib29sKiBjYXNlU2Vuc2l0aXZlLCBjb25zdCBib29sKiBp
c1JlZ2V4LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpT
ZWFyY2hSZXN1bHQ+PiYpIG92ZXJyaWRlOworI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQogICAg
IHZvaWQgc2V0U2hvd1J1bGVycyhFcnJvclN0cmluZyYsIGJvb2wpIG92ZXJyaWRlOworI2VuZGlm
CiAgICAgdm9pZCBzZXRTaG93UGFpbnRSZWN0cyhFcnJvclN0cmluZyYsIGJvb2wgc2hvdykgb3Zl
cnJpZGU7CiAgICAgdm9pZCBzZXRFbXVsYXRlZE1lZGlhKEVycm9yU3RyaW5nJiwgY29uc3QgU3Ry
aW5nJikgb3ZlcnJpZGU7CisjaWYgRU5BQkxFKERBUktfTU9ERV9DU1MpIHx8IEhBVkUoT1NfREFS
S19NT0RFX1NVUFBPUlQpCiAgICAgdm9pZCBzZXRGb3JjZWRBcHBlYXJhbmNlKEVycm9yU3RyaW5n
JiwgY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7CisjZW5kaWYKICAgICB2b2lkIHNuYXBzaG90Tm9k
ZShFcnJvclN0cmluZyYsIGludCBub2RlSWQsIFN0cmluZyogb3V0RGF0YVVSTCkgb3ZlcnJpZGU7
CiAgICAgdm9pZCBzbmFwc2hvdFJlY3QoRXJyb3JTdHJpbmcmLCBpbnQgeCwgaW50IHksIGludCB3
aWR0aCwgaW50IGhlaWdodCwgY29uc3QgU3RyaW5nJiBjb29yZGluYXRlU3lzdGVtLCBTdHJpbmcq
IG91dERhdGFVUkwpIG92ZXJyaWRlOworI2lmIEVOQUJMRShXRUJfQVJDSElWRSkgJiYgVVNFKENG
KQogICAgIHZvaWQgYXJjaGl2ZShFcnJvclN0cmluZyYsIFN0cmluZyogZGF0YSkgb3ZlcnJpZGU7
CisjZW5kaWYKIAogICAgIC8vIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbgogICAgIHZvaWQgZG9t
Q29udGVudEV2ZW50RmlyZWQoKTsKQEAgLTEyNiw3ICsxMzIsOSBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBmcmFtZVN0b3BwZWRMb2FkaW5nKEZyYW1lJik7CiAgICAgdm9pZCBmcmFtZVNjaGVkdWxlZE5h
dmlnYXRpb24oRnJhbWUmLCBTZWNvbmRzIGRlbGF5KTsKICAgICB2b2lkIGZyYW1lQ2xlYXJlZFNj
aGVkdWxlZE5hdmlnYXRpb24oRnJhbWUmKTsKKyNpZiBFTkFCTEUoREFSS19NT0RFX0NTUykgfHwg
SEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKICAgICB2b2lkIGRlZmF1bHRBcHBlYXJhbmNlRGlk
Q2hhbmdlKGJvb2wgdXNlRGFya0FwcGVhcmFuY2UpOworI2VuZGlmCiAgICAgdm9pZCBhcHBseVVz
ZXJBZ2VudE92ZXJyaWRlKFN0cmluZyYpOwogICAgIHZvaWQgYXBwbHlFbXVsYXRlZE1lZGlhKFN0
cmluZyYpOwogICAgIHZvaWQgZGlkQ2xlYXJXaW5kb3dPYmplY3RJbldvcmxkKEZyYW1lJiwgRE9N
V3JhcHBlcldvcmxkJik7CkBAIC0xNjEsNyArMTY5LDYgQEAgcHJpdmF0ZToKICAgICBIYXNoTWFw
PERvY3VtZW50TG9hZGVyKiwgU3RyaW5nPiBtX2xvYWRlclRvSWRlbnRpZmllcjsKICAgICBTdHJp
bmcgbV91c2VyQWdlbnRPdmVycmlkZTsKICAgICBTdHJpbmcgbV9lbXVsYXRlZE1lZGlhOwotICAg
IFN0cmluZyBtX2ZvcmNlZEFwcGVhcmFuY2U7CiAgICAgU3RyaW5nIG1fYm9vdHN0cmFwU2NyaXB0
OwogICAgIGJvb2wgbV9pc0ZpcnN0TGF5b3V0QWZ0ZXJPbkxvYWQgeyBmYWxzZSB9OwogICAgIGJv
b2wgbV9zaG93UGFpbnRSZWN0cyB7IGZhbHNlIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvQ01ha2VMaXN0
cy50eHQKaW5kZXggNzM1YTRkNWE5MjQ2MTJmMThhMjc1NzY4MDYyYzIzZDE5M2E0ODc1Yy4uMThm
NGNhZGZhYzk0YTQ5ZmQ2ZDZiZDRmN2E3MDM4YjBlMzliMDYwOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkluc3BlY3RvclVJL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9DTWFrZUxpc3RzLnR4dApAQCAtNDksNiArNDksNyBAQCBXRUJLSVRfSU5DTFVERV9DT05GSUdf
RklMRVNfSUZfRVhJU1RTKCkKIGFkZF9jdXN0b21fY29tbWFuZCgKICAgICBPVVRQVVQgJHtXZWJJ
bnNwZWN0b3JVSV9ERVJJVkVEX1NPVVJDRVNfRElSfS9Vc2VySW50ZXJmYWNlL1Byb3RvY29sL0lu
c3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwogICAgIERFUEVORFMgSmF2YVNjcmlwdENvcmUKKyAg
ICAgICAgICAgIEluc3BlY3RvckJhY2tlbmRDb21tYW5kcwogICAgICAgICAgICAgJHtKYXZhU2Ny
aXB0Q29yZV9ERVJJVkVEX1NPVVJDRVNfRElSfS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZENv
bW1hbmRzLmpzCiAgICAgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1FIGNvcHkgJHtKYXZhU2Ny
aXB0Q29yZV9ERVJJVkVEX1NPVVJDRVNfRElSfS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZENv
bW1hbmRzLmpzICR7V2ViSW5zcGVjdG9yVUlfREVSSVZFRF9TT1VSQ0VTX0RJUn0vVXNlckludGVy
ZmFjZS9Qcm90b2NvbC9JbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKICAgICBWRVJCQVRJTQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQmFzZS9NYWlu
LmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQmFzZS9NYWluLmpzCmlu
ZGV4IGU1YjQzMmMyY2I4OWMwOGJiOWIwMzc2YTA0OTZiY2M1MzY2OGNkYjcuLjM1NDM5MThjMTcy
NGY1YjBhZmE0YjQxNzZmNzZkN2NiYWE5MjBhNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Jhc2UvTWFpbi5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9CYXNlL01haW4uanMKQEAgLTIzOTMsNyArMjM5Myw3IEBAIFdJ
Ll91cGRhdGVEb3dubG9hZFRhYkJhckJ1dHRvbiA9IGZ1bmN0aW9uKCkKICAgICBpZiAoIVdJLl9y
ZWxvYWRUYWJCYXJCdXR0b24pCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghSW5zcGVjdG9y
QmFja2VuZC5oYXNEb21haW4oIlBhZ2UiKSkgeworICAgIGlmICghSW5zcGVjdG9yQmFja2VuZC5o
YXNDb21tYW5kKCJQYWdlLmFyY2hpdmUiKSkgewogICAgICAgICBXSS5fZG93bmxvYWRUYWJCYXJC
dXR0b24uaGlkZGVuID0gdHJ1ZTsKICAgICAgICAgV0kuX3VwZGF0ZVRhYkJhckRpdmlkZXJzKCk7
CiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ29uZmlndXJhdGlv
bnMvRmVhdHVyZURlZmluZXMueGNjb25maWcgYi9Tb3VyY2UvV2ViS2l0L0NvbmZpZ3VyYXRpb25z
L0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnCmluZGV4IDBiZTQyMDdiZmMzNDdkOGJiYzhiMzM1Y2Iy
NjBkYjdjMzAxMWYwOGYuLjNlNjk3OGVjYTI2ZDg2ZDdiMjEyNjZiNGQyZDcxNmE0OGFiMzRmZTkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmluZXMu
eGNjb25maWcKKysrIGIvU291cmNlL1dlYktpdC9Db25maWd1cmF0aW9ucy9GZWF0dXJlRGVmaW5l
cy54Y2NvbmZpZwpAQCAtMzc3LDYgKzM3Nyw4IEBAIEVOQUJMRV9WSURFT19UUkFDSyA9IEVOQUJM
RV9WSURFT19UUkFDSzsKIEVOQUJMRV9WSURFT19VU0VTX0VMRU1FTlRfRlVMTFNDUkVFTiA9ICQo
RU5BQkxFX1ZJREVPX1VTRVNfRUxFTUVOVF9GVUxMU0NSRUVOXyQoV0tfUExBVEZPUk1fTkFNRSkp
OwogRU5BQkxFX1ZJREVPX1VTRVNfRUxFTUVOVF9GVUxMU0NSRUVOX21hY29zeCA9IEVOQUJMRV9W
SURFT19VU0VTX0VMRU1FTlRfRlVMTFNDUkVFTjsKIAorRU5BQkxFX1dFQl9BUkNISVZFID0gRU5B
QkxFX1dFQl9BUkNISVZFOworCiBFTkFCTEVfV0VCRFJJVkVSX01PVVNFX0lOVEVSQUNUSU9OUyA9
ICQoRU5BQkxFX1dFQkRSSVZFUl9NT1VTRV9JTlRFUkFDVElPTlNfJChXS19QTEFURk9STV9OQU1F
KSk7CiBFTkFCTEVfV0VCRFJJVkVSX01PVVNFX0lOVEVSQUNUSU9OU19tYWNvc3ggPSBFTkFCTEVf
V0VCRFJJVkVSX01PVVNFX0lOVEVSQUNUSU9OUzsKIApAQCAtNDE5LDQgKzQyMSw0IEBAIEVOQUJM
RV9XSVJFTEVTU19QTEFZQkFDS19UQVJHRVQgPSBFTkFCTEVfV0lSRUxFU1NfUExBWUJBQ0tfVEFS
R0VUOwogCiBFTkFCTEVfWFNMVCA9IEVOQUJMRV9YU0xUOwogCi1GRUFUVVJFX0RFRklORVMgPSAk
KEVOQUJMRV8zRF9UUkFOU0ZPUk1TKSAkKEVOQUJMRV9BQ0NFTEVSQVRFRF8yRF9DQU5WQVMpICQo
RU5BQkxFX0FDQ0VTU0lCSUxJVFlfSVNPTEFURURfVFJFRSkgJChFTkFCTEVfQVBQTEVfUEFZKSAk
KEVOQUJMRV9BUFBMRV9QQVlfU0VTU0lPTl9WMykgJChFTkFCTEVfQVBQTEVfUEFZX1NFU1NJT05f
VjQpICQoRU5BQkxFX0FQUExJQ0FUSU9OX01BTklGRVNUKSAkKEVOQUJMRV9BVFRBQ0hNRU5UX0VM
RU1FTlQpICQoRU5BQkxFX0FWRl9DQVBUSU9OUykgJChFTkFCTEVfQ0FDSEVfUEFSVElUSU9OSU5H
KSAkKEVOQUJMRV9DSEFOTkVMX01FU1NBR0lORykgJChFTkFCTEVfQ09OVEVOVF9GSUxURVJJTkcp
ICQoRU5BQkxFX0NTUzNfVEVYVCkgJChFTkFCTEVfQ1NTX0JPWF9ERUNPUkFUSU9OX0JSRUFLKSAk
KEVOQUJMRV9DU1NfQ09NUE9TSVRJTkcpICQoRU5BQkxFX0NTU19DT05JQ19HUkFESUVOVFMpICQo
RU5BQkxFX0NTU19JTUFHRV9SRVNPTFVUSU9OKSAkKEVOQUJMRV9DU1NfUEFJTlRJTkdfQVBJKSAk
KEVOQUJMRV9DU1NfU0NST0xMX1NOQVApICQoRU5BQkxFX0NTU19TRUxFQ1RPUlNfTEVWRUw0KSAk
KEVOQUJMRV9DU1NfVFJBSUxJTkdfV09SRCkgJChFTkFCTEVfQ1NTX1RZUEVEX09NKSAkKEVOQUJM
RV9DVVJTT1JfVklTSUJJTElUWSkgJChFTkFCTEVfQ19MT09QKSAkKEVOQUJMRV9EQVJLX01PREVf
Q1NTKSAkKEVOQUJMRV9EQVRBQ1VFX1ZBTFVFKSAkKEVOQUJMRV9EQVRBTElTVF9FTEVNRU5UKSAk
KEVOQUJMRV9EQVRBX0lOVEVSQUNUSU9OKSAkKEVOQUJMRV9ERVZJQ0VfT1JJRU5UQVRJT04pICQo
RU5BQkxFX0RSQUdfU1VQUE9SVCkgJChFTkFCTEVfRURJVEFCTEVfUkVHSU9OKSAkKEVOQUJMRV9F
TkNSWVBURURfTUVESUEpICQoRU5BQkxFX0VYUEVSSU1FTlRBTF9GRUFUVVJFUykgJChFTkFCTEVf
RklMVEVSU19MRVZFTF8yKSAkKEVOQUJMRV9GVUxMU0NSRUVOX0FQSSkgJChFTkFCTEVfUElDVFVS
RV9JTl9QSUNUVVJFX0FQSSkgJChFTkFCTEVfR0FNRVBBRCkgJChFTkFCTEVfR0VPTE9DQVRJT04p
ICQoRU5BQkxFX0dQVV9QUk9DRVNTKSAkKEVOQUJMRV9JTkRFWEVEX0RBVEFCQVNFKSAkKEVOQUJM
RV9JTkRFWEVEX0RBVEFCQVNFX0lOX1dPUktFUlMpICQoRU5BQkxFX0lOUFVUX1RZUEVfQ09MT1Ip
ICQoRU5BQkxFX0lOUFVUX1RZUEVfREFURSkgJChFTkFCTEVfSU5QVVRfVFlQRV9EQVRFVElNRUxP
Q0FMKSAkKEVOQUJMRV9JTlBVVF9UWVBFX0RBVEVUSU1FX0lOQ09NUExFVEUpICQoRU5BQkxFX0lO
UFVUX1RZUEVfTU9OVEgpICQoRU5BQkxFX0lOUFVUX1RZUEVfVElNRSkgJChFTkFCTEVfSU5QVVRf
VFlQRV9XRUVLKSAkKEVOQUJMRV9JTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKSAkKEVO
QUJMRV9JTlNQRUNUT1JfVEVMRU1FVFJZKSAkKEVOQUJMRV9JTlRFUlNFQ1RJT05fT0JTRVJWRVIp
ICQoRU5BQkxFX0lPU19HRVNUVVJFX0VWRU5UUykgJChFTkFCTEVfSU9TX1RPVUNIX0VWRU5UUykg
JChFTkFCTEVfTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkgJChFTkFCTEVfTEVHQUNZX0NTU19W
RU5ET1JfUFJFRklYRVMpICQoRU5BQkxFX0xFR0FDWV9DVVNUT01fUFJPVE9DT0xfTUFOQUdFUikg
JChFTkFCTEVfTEVHQUNZX0VOQ1JZUFRFRF9NRURJQSkgJChFTkFCTEVfTEVUVEVSUFJFU1MpICQo
RU5BQkxFX01BQ19HRVNUVVJFX0VWRU5UUykgJChFTkFCTEVfTUFUSE1MKSAkKEVOQUJMRV9NRURJ
QV9DQVBUVVJFKSAkKEVOQUJMRV9NRURJQV9DT05UUk9MU19TQ1JJUFQpICQoRU5BQkxFX01FRElB
X1NFU1NJT04pICQoRU5BQkxFX01FRElBX1NPVVJDRSkgJChFTkFCTEVfTUVESUFfU1RBVElTVElD
UykgJChFTkFCTEVfTUVESUFfU1RSRUFNKSAkKEVOQUJMRV9NRU1PUllfU0FNUExFUikgJChFTkFC
TEVfTUVURVJfRUxFTUVOVCkgJChFTkFCTEVfTUhUTUwpICQoRU5BQkxFX01PVVNFX0NVUlNPUl9T
Q0FMRSkgJChFTkFCTEVfTkFWSUdBVE9SX1NUQU5EQUxPTkUpICQoRU5BQkxFX05FVFdPUktfQ0FD
SEVfU1BFQ1VMQVRJVkVfUkVWQUxJREFUSU9OKSAkKEVOQUJMRV9ORVRXT1JLX0NBQ0hFX1NUQUxF
X1dISUxFX1JFVkFMSURBVEUpICQoRU5BQkxFX05PVElGSUNBVElPTlMpICQoRU5BQkxFX09GRlND
UkVFTl9DQU5WQVMpICQoRU5BQkxFX09WRVJGTE9XX1NDUk9MTElOR19UT1VDSCkgJChFTkFCTEVf
UEFZTUVOVF9SRVFVRVNUKSAkKEVOQUJMRV9QREZLSVRfUExVR0lOKSAkKEVOQUJMRV9QT0lOVEVS
X0xPQ0spICQoRU5BQkxFX1BVQkxJQ19TVUZGSVhfTElTVCkgJChFTkFCTEVfUVVPVEEpICQoRU5B
QkxFX1JFTU9URV9JTlNQRUNUT1IpICQoRU5BQkxFX1JFU0laRV9PQlNFUlZFUikgJChFTkFCTEVf
UkVTT0xVVElPTl9NRURJQV9RVUVSWSkgJChFTkFCTEVfUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNT
KSAkKEVOQUJMRV9SRVNPVVJDRV9VU0FHRSkgJChFTkFCTEVfUlVCQkVSX0JBTkRJTkcpICQoRU5B
QkxFX1NBTkRCT1hfRVhURU5TSU9OUykgJChFTkFCTEVfU0VSVkVSX1BSRUNPTk5FQ1QpICQoRU5B
QkxFX1NFUlZJQ0VfQ09OVFJPTFMpICQoRU5BQkxFX1NFUlZJQ0VfV09SS0VSKSAkKEVOQUJMRV9T
SEFSRUFCTEVfUkVTT1VSQ0UpICQoRU5BQkxFX1NQRUVDSF9TWU5USEVTSVMpICQoRU5BQkxFX1NU
UkVBTVNfQVBJKSAkKEVOQUJMRV9TVkdfRk9OVFMpICQoRU5BQkxFX1RFTEVQSE9ORV9OVU1CRVJf
REVURUNUSU9OKSAkKEVOQUJMRV9URVhUX0FVVE9TSVpJTkcpICQoRU5BQkxFX1RPVUNIX0VWRU5U
UykgJChFTkFCTEVfVVNFUlNFTEVDVF9BTEwpICQoRU5BQkxFX1VTRVJfTUVTU0FHRV9IQU5ETEVS
UykgJChFTkFCTEVfVkFSSUFUSU9OX0ZPTlRTKSAkKEVOQUJMRV9WSURFTykgJChFTkFCTEVfVklE
RU9fUFJFU0VOVEFUSU9OX01PREUpICQoRU5BQkxFX1ZJREVPX1RSQUNLKSAkKEVOQUJMRV9WSURF
T19VU0VTX0VMRU1FTlRfRlVMTFNDUkVFTikgJChFTkFCTEVfV0VCRFJJVkVSX01PVVNFX0lOVEVS
QUNUSU9OUykgJChFTkFCTEVfV0VCRFJJVkVSX0tFWUJPQVJEX0lOVEVSQUNUSU9OUykgJChFTkFC
TEVfV0VCRFJJVkVSX1RPVUNIX0lOVEVSQUNUSU9OUykgJChFTkFCTEVfV0VCR0wpICQoRU5BQkxF
X1dFQkdMMikgJChFTkFCTEVfV0VCR1BVKSAkKEVOQUJMRV9XRUJYUikgJChFTkFCTEVfV0VCX0FQ
SV9TVEFUSVNUSUNTKSAkKEVOQUJMRV9XRUJfQVVESU8pICQoRU5BQkxFX1dFQl9BVVRITikgJChF
TkFCTEVfV0VCX0NSWVBUTykgJChFTkFCTEVfV0VCX1JUQykgJChFTkFCTEVfV0lSRUxFU1NfUExB
WUJBQ0tfVEFSR0VUKSAkKEVOQUJMRV9YU0xUKTsKK0ZFQVRVUkVfREVGSU5FUyA9ICQoRU5BQkxF
XzNEX1RSQU5TRk9STVMpICQoRU5BQkxFX0FDQ0VMRVJBVEVEXzJEX0NBTlZBUykgJChFTkFCTEVf
QUNDRVNTSUJJTElUWV9JU09MQVRFRF9UUkVFKSAkKEVOQUJMRV9BUFBMRV9QQVkpICQoRU5BQkxF
X0FQUExFX1BBWV9TRVNTSU9OX1YzKSAkKEVOQUJMRV9BUFBMRV9QQVlfU0VTU0lPTl9WNCkgJChF
TkFCTEVfQVBQTElDQVRJT05fTUFOSUZFU1QpICQoRU5BQkxFX0FUVEFDSE1FTlRfRUxFTUVOVCkg
JChFTkFCTEVfQVZGX0NBUFRJT05TKSAkKEVOQUJMRV9DQUNIRV9QQVJUSVRJT05JTkcpICQoRU5B
QkxFX0NIQU5ORUxfTUVTU0FHSU5HKSAkKEVOQUJMRV9DT05URU5UX0ZJTFRFUklORykgJChFTkFC
TEVfQ1NTM19URVhUKSAkKEVOQUJMRV9DU1NfQk9YX0RFQ09SQVRJT05fQlJFQUspICQoRU5BQkxF
X0NTU19DT01QT1NJVElORykgJChFTkFCTEVfQ1NTX0NPTklDX0dSQURJRU5UUykgJChFTkFCTEVf
Q1NTX0lNQUdFX1JFU09MVVRJT04pICQoRU5BQkxFX0NTU19QQUlOVElOR19BUEkpICQoRU5BQkxF
X0NTU19TQ1JPTExfU05BUCkgJChFTkFCTEVfQ1NTX1NFTEVDVE9SU19MRVZFTDQpICQoRU5BQkxF
X0NTU19UUkFJTElOR19XT1JEKSAkKEVOQUJMRV9DU1NfVFlQRURfT00pICQoRU5BQkxFX0NVUlNP
Ul9WSVNJQklMSVRZKSAkKEVOQUJMRV9DX0xPT1ApICQoRU5BQkxFX0RBUktfTU9ERV9DU1MpICQo
RU5BQkxFX0RBVEFDVUVfVkFMVUUpICQoRU5BQkxFX0RBVEFMSVNUX0VMRU1FTlQpICQoRU5BQkxF
X0RBVEFfSU5URVJBQ1RJT04pICQoRU5BQkxFX0RFVklDRV9PUklFTlRBVElPTikgJChFTkFCTEVf
RFJBR19TVVBQT1JUKSAkKEVOQUJMRV9FRElUQUJMRV9SRUdJT04pICQoRU5BQkxFX0VOQ1JZUFRF
RF9NRURJQSkgJChFTkFCTEVfRVhQRVJJTUVOVEFMX0ZFQVRVUkVTKSAkKEVOQUJMRV9GSUxURVJT
X0xFVkVMXzIpICQoRU5BQkxFX0ZVTExTQ1JFRU5fQVBJKSAkKEVOQUJMRV9QSUNUVVJFX0lOX1BJ
Q1RVUkVfQVBJKSAkKEVOQUJMRV9HQU1FUEFEKSAkKEVOQUJMRV9HRU9MT0NBVElPTikgJChFTkFC
TEVfR1BVX1BST0NFU1MpICQoRU5BQkxFX0lOREVYRURfREFUQUJBU0UpICQoRU5BQkxFX0lOREVY
RURfREFUQUJBU0VfSU5fV09SS0VSUykgJChFTkFCTEVfSU5QVVRfVFlQRV9DT0xPUikgJChFTkFC
TEVfSU5QVVRfVFlQRV9EQVRFKSAkKEVOQUJMRV9JTlBVVF9UWVBFX0RBVEVUSU1FTE9DQUwpICQo
RU5BQkxFX0lOUFVUX1RZUEVfREFURVRJTUVfSU5DT01QTEVURSkgJChFTkFCTEVfSU5QVVRfVFlQ
RV9NT05USCkgJChFTkFCTEVfSU5QVVRfVFlQRV9USU1FKSAkKEVOQUJMRV9JTlBVVF9UWVBFX1dF
RUspICQoRU5BQkxFX0lOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpICQoRU5BQkxFX0lO
U1BFQ1RPUl9URUxFTUVUUlkpICQoRU5BQkxFX0lOVEVSU0VDVElPTl9PQlNFUlZFUikgJChFTkFC
TEVfSU9TX0dFU1RVUkVfRVZFTlRTKSAkKEVOQUJMRV9JT1NfVE9VQ0hfRVZFTlRTKSAkKEVOQUJM
RV9MQVlPVVRfRk9STUFUVElOR19DT05URVhUKSAkKEVOQUJMRV9MRUdBQ1lfQ1NTX1ZFTkRPUl9Q
UkVGSVhFUykgJChFTkFCTEVfTEVHQUNZX0NVU1RPTV9QUk9UT0NPTF9NQU5BR0VSKSAkKEVOQUJM
RV9MRUdBQ1lfRU5DUllQVEVEX01FRElBKSAkKEVOQUJMRV9MRVRURVJQUkVTUykgJChFTkFCTEVf
TUFDX0dFU1RVUkVfRVZFTlRTKSAkKEVOQUJMRV9NQVRITUwpICQoRU5BQkxFX01FRElBX0NBUFRV
UkUpICQoRU5BQkxFX01FRElBX0NPTlRST0xTX1NDUklQVCkgJChFTkFCTEVfTUVESUFfU0VTU0lP
TikgJChFTkFCTEVfTUVESUFfU09VUkNFKSAkKEVOQUJMRV9NRURJQV9TVEFUSVNUSUNTKSAkKEVO
QUJMRV9NRURJQV9TVFJFQU0pICQoRU5BQkxFX01FTU9SWV9TQU1QTEVSKSAkKEVOQUJMRV9NRVRF
Ul9FTEVNRU5UKSAkKEVOQUJMRV9NSFRNTCkgJChFTkFCTEVfTU9VU0VfQ1VSU09SX1NDQUxFKSAk
KEVOQUJMRV9OQVZJR0FUT1JfU1RBTkRBTE9ORSkgJChFTkFCTEVfTkVUV09SS19DQUNIRV9TUEVD
VUxBVElWRV9SRVZBTElEQVRJT04pICQoRU5BQkxFX05FVFdPUktfQ0FDSEVfU1RBTEVfV0hJTEVf
UkVWQUxJREFURSkgJChFTkFCTEVfTk9USUZJQ0FUSU9OUykgJChFTkFCTEVfT0ZGU0NSRUVOX0NB
TlZBUykgJChFTkFCTEVfT1ZFUkZMT1dfU0NST0xMSU5HX1RPVUNIKSAkKEVOQUJMRV9QQVlNRU5U
X1JFUVVFU1QpICQoRU5BQkxFX1BERktJVF9QTFVHSU4pICQoRU5BQkxFX1BPSU5URVJfTE9DSykg
JChFTkFCTEVfUFVCTElDX1NVRkZJWF9MSVNUKSAkKEVOQUJMRV9RVU9UQSkgJChFTkFCTEVfUkVN
T1RFX0lOU1BFQ1RPUikgJChFTkFCTEVfUkVTSVpFX09CU0VSVkVSKSAkKEVOQUJMRV9SRVNPTFVU
SU9OX01FRElBX1FVRVJZKSAkKEVOQUJMRV9SRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpICQoRU5B
QkxFX1JFU09VUkNFX1VTQUdFKSAkKEVOQUJMRV9SVUJCRVJfQkFORElORykgJChFTkFCTEVfU0FO
REJPWF9FWFRFTlNJT05TKSAkKEVOQUJMRV9TRVJWRVJfUFJFQ09OTkVDVCkgJChFTkFCTEVfU0VS
VklDRV9DT05UUk9MUykgJChFTkFCTEVfU0VSVklDRV9XT1JLRVIpICQoRU5BQkxFX1NIQVJFQUJM
RV9SRVNPVVJDRSkgJChFTkFCTEVfU1BFRUNIX1NZTlRIRVNJUykgJChFTkFCTEVfU1RSRUFNU19B
UEkpICQoRU5BQkxFX1NWR19GT05UUykgJChFTkFCTEVfVEVMRVBIT05FX05VTUJFUl9ERVRFQ1RJ
T04pICQoRU5BQkxFX1RFWFRfQVVUT1NJWklORykgJChFTkFCTEVfVE9VQ0hfRVZFTlRTKSAkKEVO
QUJMRV9VU0VSU0VMRUNUX0FMTCkgJChFTkFCTEVfVVNFUl9NRVNTQUdFX0hBTkRMRVJTKSAkKEVO
QUJMRV9WQVJJQVRJT05fRk9OVFMpICQoRU5BQkxFX1ZJREVPKSAkKEVOQUJMRV9WSURFT19QUkVT
RU5UQVRJT05fTU9ERSkgJChFTkFCTEVfVklERU9fVFJBQ0spICQoRU5BQkxFX1ZJREVPX1VTRVNf
RUxFTUVOVF9GVUxMU0NSRUVOKSAkKEVOQUJMRV9XRUJfQVJDSElWRSkgJChFTkFCTEVfV0VCRFJJ
VkVSX01PVVNFX0lOVEVSQUNUSU9OUykgJChFTkFCTEVfV0VCRFJJVkVSX0tFWUJPQVJEX0lOVEVS
QUNUSU9OUykgJChFTkFCTEVfV0VCRFJJVkVSX1RPVUNIX0lOVEVSQUNUSU9OUykgJChFTkFCTEVf
V0VCR0wpICQoRU5BQkxFX1dFQkdMMikgJChFTkFCTEVfV0VCR1BVKSAkKEVOQUJMRV9XRUJYUikg
JChFTkFCTEVfV0VCX0FQSV9TVEFUSVNUSUNTKSAkKEVOQUJMRV9XRUJfQVVESU8pICQoRU5BQkxF
X1dFQl9BVVRITikgJChFTkFCTEVfV0VCX0NSWVBUTykgJChFTkFCTEVfV0VCX1JUQykgJChFTkFC
TEVfV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKSAkKEVOQUJMRV9YU0xUKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMubWFrZSBiL1NvdXJjZS9XZWJLaXQvRGVyaXZl
ZFNvdXJjZXMubWFrZQppbmRleCBhMTJiNzg2M2M5MjU3OTIzODYxYjMwZjZiMDI3MDUyMGYxZDZh
Y2IxLi44YzU4YTU3NzE0NjQ4MmVjZjBhMjg1MDQyZGY3MDg1M2M2ZWVkZDAwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UKKysrIGIvU291cmNlL1dlYktpdC9E
ZXJpdmVkU291cmNlcy5tYWtlCkBAIC0zMTcsMTcgKzMxNyw5IEBAIEFVVE9NQVRJT05fUFJPVE9D
T0xfT1VUUFVUX0ZJTEVTID0gXAogIwogQVVUT01BVElPTl9QUk9UT0NPTF9PVVRQVVRfUEFUVEVS
TlMgPSAkKHN1YnN0IC4sJSwkKEFVVE9NQVRJT05fUFJPVE9DT0xfT1VUUFVUX0ZJTEVTKSkKIAot
aWZlcSAoJChPUyksTUFDT1MpCi1pZmVxICgkKHNoZWxsICQoQ0MpIC1zdGQ9Z251KysxeiAteCBj
KysgLUUgLVAgLWRNICQoU0RLX0ZMQUdTKSAkKFRBUkdFVF9UUklQTEVfRkxBR1MpICQoRlJBTUVX
T1JLX0ZMQUdTKSAkKEhFQURFUl9GTEFHUykgLWluY2x1ZGUgInd0Zi9QbGF0Zm9ybS5oIiAvZGV2
L251bGwgfCBncmVwICcgV1RGX1BMQVRGT1JNX0lPU19GQU1JTFkgJyB8IGN1dCAtZCcgJyAtZjMp
LCAxKQotCUFVVE9NQVRJT05fQkFDS0VORF9QTEFURk9STV9BUkdVTUVOVFMgPSAtLXBsYXRmb3Jt
IGlPUwotZWxzZQotCUFVVE9NQVRJT05fQkFDS0VORF9QTEFURk9STV9BUkdVTUVOVFMgPSAtLXBs
YXRmb3JtIG1hY09TCi1lbmRpZgotZW5kaWYgIyBNQUNPUwotCiAjIEpTT04tUlBDIEZyb250ZW5k
IERpc3BhdGNoZXJzLCBCYWNrZW5kIERpc3BhdGNoZXJzLCBUeXBlIEJ1aWxkZXJzCiAkKEFVVE9N
QVRJT05fUFJPVE9DT0xfT1VUUFVUX1BBVFRFUk5TKSA6ICQoQVVUT01BVElPTl9QUk9UT0NPTF9J
TlBVVF9GSUxFUykgJChBVVRPTUFUSU9OX1BST1RPQ09MX0dFTkVSQVRPUl9TQ1JJUFRTKQotCSQo
UFlUSE9OKSAkKEphdmFTY3JpcHRDb3JlX1NDUklQVFNfRElSKS9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkgLS1mcmFtZXdvcmsgV2ViS2l0ICQoQVVUT01BVElPTl9CQUNL
RU5EX1BMQVRGT1JNX0FSR1VNRU5UUykgLS1iYWNrZW5kIC0tb3V0cHV0RGlyIC4gJChBVVRPTUFU
SU9OX1BST1RPQ09MX0lOUFVUX0ZJTEVTKQorCSQoUFlUSE9OKSAkKEphdmFTY3JpcHRDb3JlX1ND
UklQVFNfRElSKS9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkgLS1mcmFt
ZXdvcmsgV2ViS2l0IC0tYmFja2VuZCAtLW91dHB1dERpciAuICQoQVVUT01BVElPTl9QUk9UT0NP
TF9JTlBVVF9GSUxFUykKIAogYWxsIDogJChBVVRPTUFUSU9OX1BST1RPQ09MX09VVFBVVF9GSUxF
UykKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybU1hYy5jbWFrZSBiL1NvdXJj
ZS9XZWJLaXQvUGxhdGZvcm1NYWMuY21ha2UKaW5kZXggNDhlMTYwMTNkY2IzYTEzZGZmMGQ1YmNl
NzVmM2FjZTU0MTA0OTQyYi4uNGMyZDMwYmViZjc0ODMxMzU2MDhiNDQ4ZjYyM2Q3YmU1ZmVkYmY5
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybU1hYy5jbWFrZQorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1BsYXRmb3JtTWFjLmNtYWtlCkBAIC00ODAsMTAgKzQ4MCw2IEBAIGZvcmVhY2gg
KF9maWxlICR7T2JqQ0ZvcndhcmRpbmdIZWFkZXJzfSkKICAgICBmaWxlKFdSSVRFICR7Rk9SV0FS
RElOR19IRUFERVJTX0RJUn0vV2ViS2l0LyR7X2ZpbGV9ICIjaW1wb3J0IDxXZWJLaXRMZWdhY3kv
JHtfZmlsZX0+IikKIGVuZGZvcmVhY2ggKCkKIAotbGlzdChBUFBFTkQgV2ViS2l0X0FVVE9NQVRJ
T05fUFJPVE9DT0xfR0VORVJBVE9SX0VYVFJBX0ZMQUdTCi0gICAgLS1wbGF0Zm9ybT1tYWNPUwot
KQotCiBzZXQoU2VjSXRlbVNoaW1EaXJlY3RvcnkgJHtDTUFLRV9MSUJSQVJZX09VVFBVVF9ESVJF
Q1RPUll9L1dlYktpdC5mcmFtZXdvcmsvVmVyc2lvbnMvQS9GcmFtZXdvcmtzKQogYWRkX2xpYnJh
cnkoU2VjSXRlbVNoaW0gU0hBUkVEIFdlYlByb2Nlc3MvbWFjL1NlY0l0ZW1TaGltTGlicmFyeS5t
bSkKIFdFQktJVF9DUkVBVEVfU1lNTElOSyhTZWNJdGVtU2hpbSAke1NlY0l0ZW1TaGltRGlyZWN0
b3J5fSAke0NNQUtFX0xJQlJBUllfT1VUUFVUX0RJUkVDVE9SWX0vV2ViS2l0LmZyYW1ld29yay9G
cmFtZXdvcmtzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlv
bi9BdXRvbWF0aW9uLmpzb24gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL0F1
dG9tYXRpb24uanNvbgppbmRleCA3ZjU1MjU3MDVlZjI4ZWUyOWY4ODUzMGI1MjA0ODA0M2FjOWUx
NDZmLi4zZGNiMjE0MWViMGQyNzk0NzA3ZGUyODRjODcwNzEwZTg3NzIxYzM5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL0F1dG9tYXRpb24uanNvbgorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL0F1dG9tYXRpb24uanNvbgpAQCAt
NDM3LDcgKzQzNyw3IEBACiAgICAgICAgIHsKICAgICAgICAgICAgICJuYW1lIjogImluc3BlY3RC
cm93c2luZ0NvbnRleHQiLAogICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkluc3BlY3QgdGhl
IHNwZWNpZmllZCBicm93c2luZyBjb250ZXh0IHVzaW5nIFdlYiBJbnNwZWN0b3IuIiwKLSAgICAg
ICAgICAgICJwbGF0Zm9ybSI6ICJtYWNvcyIsCisgICAgICAgICAgICAiY29uZGl0aW9uIjogImRl
ZmluZWQoV1RGX1BMQVRGT1JNX01BQykgJiYgV1RGX1BMQVRGT1JNX01BQyIsCiAgICAgICAgICAg
ICAicGFyYW1ldGVycyI6IFsKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImhhbmRsZSIsICIk
cmVmIjogIkJyb3dzaW5nQ29udGV4dEhhbmRsZSIsICJkZXNjcmlwdGlvbiI6ICJUaGUgaGFuZGxl
IGZvciB0aGUgYnJvd3NpbmcgY29udGV4dCB0aGF0IHNob3VsZCBiZSBpbnNwZWN0ZWQuIiB9LAog
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZW5hYmxlQXV0b0NhcHR1cmluZyIsICJ0eXBlIjog
ImJvb2xlYW4iLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiSWYgdGhpcyBvcHRp
b24gaXMgcHJlc2VudCBhbmQgc2V0IHRvIHRydWUsIHRoZSBXZWIgSW5zcGVjdG9yIHdpbGwgYXV0
b21hdGljYWxseSBzdGFydCBhIHRpbWVsaW5lIHJlY29yZGluZyBvZiB0aGUgc3BlY2lmaWVkIGJy
b3dzaW5nIGNvbnRleHQgb25jZSBpdCBpcyBhdHRhY2hlZC4gTm90ZSB0aGF0IHRoaXMgZGlzYWJs
ZXMgdGhlIGRlYnVnZ2VyIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIHJlY29yZGluZy4iIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlv
blNlc3Npb24uaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21h
dGlvblNlc3Npb24uaAppbmRleCAyM2I5OTJmM2NlNDVmODJmMGRjZGVkZTYwMDdhMmUzYTQ2Yjdi
MGI2Li4yYzkxOGE3ZGQyNTk3YjZjMTdlNzM3ZmRmNTY5ZjkzZmNjNWMzYzI0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9u
LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9u
U2Vzc2lvbi5oCkBAIC0yMDAsNyArMjAwLDYgQEAgcHVibGljOgogICAgIHZvaWQgZ2V0U2Vzc2lv
blBlcm1pc3Npb25zKEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmLCBSZWZQdHI8SlNPTjo6QXJyYXlP
ZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpTZXNzaW9uUGVybWlzc2lvbkRhdGE+
PiYgb3V0X3Blcm1pc3Npb25zKSBvdmVycmlkZTsKICAgICB2b2lkIHNldFNlc3Npb25QZXJtaXNz
aW9ucyhJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiwgY29uc3QgSlNPTjo6QXJyYXkmIGluX3Blcm1p
c3Npb25zKSBvdmVycmlkZTsKIAotICAgIC8vIFBsYXRmb3JtOiBtYWNPUwogI2lmIFBMQVRGT1JN
KE1BQykKICAgICB2b2lkIGluc3BlY3RCcm93c2luZ0NvbnRleHQoY29uc3QgU3RyaW5nJiwgY29u
c3QgYm9vbCogb3B0aW9uYWxFbmFibGVBdXRvQ2FwdHVyaW5nLCBSZWY8SW5zcGVjdEJyb3dzaW5n
Q29udGV4dENhbGxiYWNrPiYmKSBvdmVycmlkZTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9tYWMvV2ViQXV0b21hdGlvblNlc3Npb25NYWMu
bW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL21hYy9XZWJBdXRvbWF0aW9u
U2Vzc2lvbk1hYy5tbQppbmRleCBlN2ViMDc4YzJkYjFkYWNhMzM1NTZiYTM2MTJjZThlYTZkNTdi
NTcwLi44YzdmNTg1ZTJhY2RjYmJkODQ0MGY4NzBjMzExMjMyZTIzZjQ0ZmM5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL21hYy9XZWJBdXRvbWF0aW9uU2Vz
c2lvbk1hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL21hYy9X
ZWJBdXRvbWF0aW9uU2Vzc2lvbk1hYy5tbQpAQCAtNDIsNyArNDIsNyBAQAogbmFtZXNwYWNlIFdl
YktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotI3ByYWdtYSBtYXJrIENvbW1hbmRz
IGZvciBQbGF0Zm9ybTogJ21hY09TJworI3ByYWdtYSBtYXJrIENvbW1hbmRzIGZvciAnUExBVEZP
Uk0oTUFDKScKIAogdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6aW5zcGVjdEJyb3dzaW5nQ29u
dGV4dChjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3QgYm9vbCogb3B0aW9uYWxFbmFibGVBdXRv
Q2FwdHVyaW5nLCBSZWY8SW5zcGVjdEJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmIGNhbGxiYWNr
KQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ29uZmlndXJhdGlvbnMv
RmVhdHVyZURlZmluZXMueGNjb25maWcgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9Db25maWd1
cmF0aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZpZwppbmRleCAwYmU0MjA3YmZjMzQ3ZDhiYmM4
YjMzNWNiMjYwZGI3YzMwMTFmMDhmLi4zZTY5NzhlY2EyNmQ4NmQ3YjIxMjY2YjRkMmQ3MTZhNDhh
YjM0ZmU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9Db25maWd1cmF0aW9u
cy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZpZworKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9D
b25maWd1cmF0aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZpZwpAQCAtMzc3LDYgKzM3Nyw4IEBA
IEVOQUJMRV9WSURFT19UUkFDSyA9IEVOQUJMRV9WSURFT19UUkFDSzsKIEVOQUJMRV9WSURFT19V
U0VTX0VMRU1FTlRfRlVMTFNDUkVFTiA9ICQoRU5BQkxFX1ZJREVPX1VTRVNfRUxFTUVOVF9GVUxM
U0NSRUVOXyQoV0tfUExBVEZPUk1fTkFNRSkpOwogRU5BQkxFX1ZJREVPX1VTRVNfRUxFTUVOVF9G
VUxMU0NSRUVOX21hY29zeCA9IEVOQUJMRV9WSURFT19VU0VTX0VMRU1FTlRfRlVMTFNDUkVFTjsK
IAorRU5BQkxFX1dFQl9BUkNISVZFID0gRU5BQkxFX1dFQl9BUkNISVZFOworCiBFTkFCTEVfV0VC
RFJJVkVSX01PVVNFX0lOVEVSQUNUSU9OUyA9ICQoRU5BQkxFX1dFQkRSSVZFUl9NT1VTRV9JTlRF
UkFDVElPTlNfJChXS19QTEFURk9STV9OQU1FKSk7CiBFTkFCTEVfV0VCRFJJVkVSX01PVVNFX0lO
VEVSQUNUSU9OU19tYWNvc3ggPSBFTkFCTEVfV0VCRFJJVkVSX01PVVNFX0lOVEVSQUNUSU9OUzsK
IApAQCAtNDE5LDQgKzQyMSw0IEBAIEVOQUJMRV9XSVJFTEVTU19QTEFZQkFDS19UQVJHRVQgPSBF
TkFCTEVfV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUOwogCiBFTkFCTEVfWFNMVCA9IEVOQUJMRV9Y
U0xUOwogCi1GRUFUVVJFX0RFRklORVMgPSAkKEVOQUJMRV8zRF9UUkFOU0ZPUk1TKSAkKEVOQUJM
RV9BQ0NFTEVSQVRFRF8yRF9DQU5WQVMpICQoRU5BQkxFX0FDQ0VTU0lCSUxJVFlfSVNPTEFURURf
VFJFRSkgJChFTkFCTEVfQVBQTEVfUEFZKSAkKEVOQUJMRV9BUFBMRV9QQVlfU0VTU0lPTl9WMykg
JChFTkFCTEVfQVBQTEVfUEFZX1NFU1NJT05fVjQpICQoRU5BQkxFX0FQUExJQ0FUSU9OX01BTklG
RVNUKSAkKEVOQUJMRV9BVFRBQ0hNRU5UX0VMRU1FTlQpICQoRU5BQkxFX0FWRl9DQVBUSU9OUykg
JChFTkFCTEVfQ0FDSEVfUEFSVElUSU9OSU5HKSAkKEVOQUJMRV9DSEFOTkVMX01FU1NBR0lORykg
JChFTkFCTEVfQ09OVEVOVF9GSUxURVJJTkcpICQoRU5BQkxFX0NTUzNfVEVYVCkgJChFTkFCTEVf
Q1NTX0JPWF9ERUNPUkFUSU9OX0JSRUFLKSAkKEVOQUJMRV9DU1NfQ09NUE9TSVRJTkcpICQoRU5B
QkxFX0NTU19DT05JQ19HUkFESUVOVFMpICQoRU5BQkxFX0NTU19JTUFHRV9SRVNPTFVUSU9OKSAk
KEVOQUJMRV9DU1NfUEFJTlRJTkdfQVBJKSAkKEVOQUJMRV9DU1NfU0NST0xMX1NOQVApICQoRU5B
QkxFX0NTU19TRUxFQ1RPUlNfTEVWRUw0KSAkKEVOQUJMRV9DU1NfVFJBSUxJTkdfV09SRCkgJChF
TkFCTEVfQ1NTX1RZUEVEX09NKSAkKEVOQUJMRV9DVVJTT1JfVklTSUJJTElUWSkgJChFTkFCTEVf
Q19MT09QKSAkKEVOQUJMRV9EQVJLX01PREVfQ1NTKSAkKEVOQUJMRV9EQVRBQ1VFX1ZBTFVFKSAk
KEVOQUJMRV9EQVRBTElTVF9FTEVNRU5UKSAkKEVOQUJMRV9EQVRBX0lOVEVSQUNUSU9OKSAkKEVO
QUJMRV9ERVZJQ0VfT1JJRU5UQVRJT04pICQoRU5BQkxFX0RSQUdfU1VQUE9SVCkgJChFTkFCTEVf
RURJVEFCTEVfUkVHSU9OKSAkKEVOQUJMRV9FTkNSWVBURURfTUVESUEpICQoRU5BQkxFX0VYUEVS
SU1FTlRBTF9GRUFUVVJFUykgJChFTkFCTEVfRklMVEVSU19MRVZFTF8yKSAkKEVOQUJMRV9GVUxM
U0NSRUVOX0FQSSkgJChFTkFCTEVfUElDVFVSRV9JTl9QSUNUVVJFX0FQSSkgJChFTkFCTEVfR0FN
RVBBRCkgJChFTkFCTEVfR0VPTE9DQVRJT04pICQoRU5BQkxFX0dQVV9QUk9DRVNTKSAkKEVOQUJM
RV9JTkRFWEVEX0RBVEFCQVNFKSAkKEVOQUJMRV9JTkRFWEVEX0RBVEFCQVNFX0lOX1dPUktFUlMp
ICQoRU5BQkxFX0lOUFVUX1RZUEVfQ09MT1IpICQoRU5BQkxFX0lOUFVUX1RZUEVfREFURSkgJChF
TkFCTEVfSU5QVVRfVFlQRV9EQVRFVElNRUxPQ0FMKSAkKEVOQUJMRV9JTlBVVF9UWVBFX0RBVEVU
SU1FX0lOQ09NUExFVEUpICQoRU5BQkxFX0lOUFVUX1RZUEVfTU9OVEgpICQoRU5BQkxFX0lOUFVU
X1RZUEVfVElNRSkgJChFTkFCTEVfSU5QVVRfVFlQRV9XRUVLKSAkKEVOQUJMRV9JTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKSAkKEVOQUJMRV9JTlNQRUNUT1JfVEVMRU1FVFJZKSAkKEVO
QUJMRV9JTlRFUlNFQ1RJT05fT0JTRVJWRVIpICQoRU5BQkxFX0lPU19HRVNUVVJFX0VWRU5UUykg
JChFTkFCTEVfSU9TX1RPVUNIX0VWRU5UUykgJChFTkFCTEVfTEFZT1VUX0ZPUk1BVFRJTkdfQ09O
VEVYVCkgJChFTkFCTEVfTEVHQUNZX0NTU19WRU5ET1JfUFJFRklYRVMpICQoRU5BQkxFX0xFR0FD
WV9DVVNUT01fUFJPVE9DT0xfTUFOQUdFUikgJChFTkFCTEVfTEVHQUNZX0VOQ1JZUFRFRF9NRURJ
QSkgJChFTkFCTEVfTEVUVEVSUFJFU1MpICQoRU5BQkxFX01BQ19HRVNUVVJFX0VWRU5UUykgJChF
TkFCTEVfTUFUSE1MKSAkKEVOQUJMRV9NRURJQV9DQVBUVVJFKSAkKEVOQUJMRV9NRURJQV9DT05U
Uk9MU19TQ1JJUFQpICQoRU5BQkxFX01FRElBX1NFU1NJT04pICQoRU5BQkxFX01FRElBX1NPVVJD
RSkgJChFTkFCTEVfTUVESUFfU1RBVElTVElDUykgJChFTkFCTEVfTUVESUFfU1RSRUFNKSAkKEVO
QUJMRV9NRU1PUllfU0FNUExFUikgJChFTkFCTEVfTUVURVJfRUxFTUVOVCkgJChFTkFCTEVfTUhU
TUwpICQoRU5BQkxFX01PVVNFX0NVUlNPUl9TQ0FMRSkgJChFTkFCTEVfTkFWSUdBVE9SX1NUQU5E
QUxPTkUpICQoRU5BQkxFX05FVFdPUktfQ0FDSEVfU1BFQ1VMQVRJVkVfUkVWQUxJREFUSU9OKSAk
KEVOQUJMRV9ORVRXT1JLX0NBQ0hFX1NUQUxFX1dISUxFX1JFVkFMSURBVEUpICQoRU5BQkxFX05P
VElGSUNBVElPTlMpICQoRU5BQkxFX09GRlNDUkVFTl9DQU5WQVMpICQoRU5BQkxFX09WRVJGTE9X
X1NDUk9MTElOR19UT1VDSCkgJChFTkFCTEVfUEFZTUVOVF9SRVFVRVNUKSAkKEVOQUJMRV9QREZL
SVRfUExVR0lOKSAkKEVOQUJMRV9QT0lOVEVSX0xPQ0spICQoRU5BQkxFX1BVQkxJQ19TVUZGSVhf
TElTVCkgJChFTkFCTEVfUVVPVEEpICQoRU5BQkxFX1JFTU9URV9JTlNQRUNUT1IpICQoRU5BQkxF
X1JFU0laRV9PQlNFUlZFUikgJChFTkFCTEVfUkVTT0xVVElPTl9NRURJQV9RVUVSWSkgJChFTkFC
TEVfUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKSAkKEVOQUJMRV9SRVNPVVJDRV9VU0FHRSkgJChF
TkFCTEVfUlVCQkVSX0JBTkRJTkcpICQoRU5BQkxFX1NBTkRCT1hfRVhURU5TSU9OUykgJChFTkFC
TEVfU0VSVkVSX1BSRUNPTk5FQ1QpICQoRU5BQkxFX1NFUlZJQ0VfQ09OVFJPTFMpICQoRU5BQkxF
X1NFUlZJQ0VfV09SS0VSKSAkKEVOQUJMRV9TSEFSRUFCTEVfUkVTT1VSQ0UpICQoRU5BQkxFX1NQ
RUVDSF9TWU5USEVTSVMpICQoRU5BQkxFX1NUUkVBTVNfQVBJKSAkKEVOQUJMRV9TVkdfRk9OVFMp
ICQoRU5BQkxFX1RFTEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKSAkKEVOQUJMRV9URVhUX0FVVE9T
SVpJTkcpICQoRU5BQkxFX1RPVUNIX0VWRU5UUykgJChFTkFCTEVfVVNFUlNFTEVDVF9BTEwpICQo
RU5BQkxFX1VTRVJfTUVTU0FHRV9IQU5ETEVSUykgJChFTkFCTEVfVkFSSUFUSU9OX0ZPTlRTKSAk
KEVOQUJMRV9WSURFTykgJChFTkFCTEVfVklERU9fUFJFU0VOVEFUSU9OX01PREUpICQoRU5BQkxF
X1ZJREVPX1RSQUNLKSAkKEVOQUJMRV9WSURFT19VU0VTX0VMRU1FTlRfRlVMTFNDUkVFTikgJChF
TkFCTEVfV0VCRFJJVkVSX01PVVNFX0lOVEVSQUNUSU9OUykgJChFTkFCTEVfV0VCRFJJVkVSX0tF
WUJPQVJEX0lOVEVSQUNUSU9OUykgJChFTkFCTEVfV0VCRFJJVkVSX1RPVUNIX0lOVEVSQUNUSU9O
UykgJChFTkFCTEVfV0VCR0wpICQoRU5BQkxFX1dFQkdMMikgJChFTkFCTEVfV0VCR1BVKSAkKEVO
QUJMRV9XRUJYUikgJChFTkFCTEVfV0VCX0FQSV9TVEFUSVNUSUNTKSAkKEVOQUJMRV9XRUJfQVVE
SU8pICQoRU5BQkxFX1dFQl9BVVRITikgJChFTkFCTEVfV0VCX0NSWVBUTykgJChFTkFCTEVfV0VC
X1JUQykgJChFTkFCTEVfV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKSAkKEVOQUJMRV9YU0xUKTsK
K0ZFQVRVUkVfREVGSU5FUyA9ICQoRU5BQkxFXzNEX1RSQU5TRk9STVMpICQoRU5BQkxFX0FDQ0VM
RVJBVEVEXzJEX0NBTlZBUykgJChFTkFCTEVfQUNDRVNTSUJJTElUWV9JU09MQVRFRF9UUkVFKSAk
KEVOQUJMRV9BUFBMRV9QQVkpICQoRU5BQkxFX0FQUExFX1BBWV9TRVNTSU9OX1YzKSAkKEVOQUJM
RV9BUFBMRV9QQVlfU0VTU0lPTl9WNCkgJChFTkFCTEVfQVBQTElDQVRJT05fTUFOSUZFU1QpICQo
RU5BQkxFX0FUVEFDSE1FTlRfRUxFTUVOVCkgJChFTkFCTEVfQVZGX0NBUFRJT05TKSAkKEVOQUJM
RV9DQUNIRV9QQVJUSVRJT05JTkcpICQoRU5BQkxFX0NIQU5ORUxfTUVTU0FHSU5HKSAkKEVOQUJM
RV9DT05URU5UX0ZJTFRFUklORykgJChFTkFCTEVfQ1NTM19URVhUKSAkKEVOQUJMRV9DU1NfQk9Y
X0RFQ09SQVRJT05fQlJFQUspICQoRU5BQkxFX0NTU19DT01QT1NJVElORykgJChFTkFCTEVfQ1NT
X0NPTklDX0dSQURJRU5UUykgJChFTkFCTEVfQ1NTX0lNQUdFX1JFU09MVVRJT04pICQoRU5BQkxF
X0NTU19QQUlOVElOR19BUEkpICQoRU5BQkxFX0NTU19TQ1JPTExfU05BUCkgJChFTkFCTEVfQ1NT
X1NFTEVDVE9SU19MRVZFTDQpICQoRU5BQkxFX0NTU19UUkFJTElOR19XT1JEKSAkKEVOQUJMRV9D
U1NfVFlQRURfT00pICQoRU5BQkxFX0NVUlNPUl9WSVNJQklMSVRZKSAkKEVOQUJMRV9DX0xPT1Ap
ICQoRU5BQkxFX0RBUktfTU9ERV9DU1MpICQoRU5BQkxFX0RBVEFDVUVfVkFMVUUpICQoRU5BQkxF
X0RBVEFMSVNUX0VMRU1FTlQpICQoRU5BQkxFX0RBVEFfSU5URVJBQ1RJT04pICQoRU5BQkxFX0RF
VklDRV9PUklFTlRBVElPTikgJChFTkFCTEVfRFJBR19TVVBQT1JUKSAkKEVOQUJMRV9FRElUQUJM
RV9SRUdJT04pICQoRU5BQkxFX0VOQ1JZUFRFRF9NRURJQSkgJChFTkFCTEVfRVhQRVJJTUVOVEFM
X0ZFQVRVUkVTKSAkKEVOQUJMRV9GSUxURVJTX0xFVkVMXzIpICQoRU5BQkxFX0ZVTExTQ1JFRU5f
QVBJKSAkKEVOQUJMRV9QSUNUVVJFX0lOX1BJQ1RVUkVfQVBJKSAkKEVOQUJMRV9HQU1FUEFEKSAk
KEVOQUJMRV9HRU9MT0NBVElPTikgJChFTkFCTEVfR1BVX1BST0NFU1MpICQoRU5BQkxFX0lOREVY
RURfREFUQUJBU0UpICQoRU5BQkxFX0lOREVYRURfREFUQUJBU0VfSU5fV09SS0VSUykgJChFTkFC
TEVfSU5QVVRfVFlQRV9DT0xPUikgJChFTkFCTEVfSU5QVVRfVFlQRV9EQVRFKSAkKEVOQUJMRV9J
TlBVVF9UWVBFX0RBVEVUSU1FTE9DQUwpICQoRU5BQkxFX0lOUFVUX1RZUEVfREFURVRJTUVfSU5D
T01QTEVURSkgJChFTkFCTEVfSU5QVVRfVFlQRV9NT05USCkgJChFTkFCTEVfSU5QVVRfVFlQRV9U
SU1FKSAkKEVOQUJMRV9JTlBVVF9UWVBFX1dFRUspICQoRU5BQkxFX0lOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpICQoRU5BQkxFX0lOU1BFQ1RPUl9URUxFTUVUUlkpICQoRU5BQkxFX0lO
VEVSU0VDVElPTl9PQlNFUlZFUikgJChFTkFCTEVfSU9TX0dFU1RVUkVfRVZFTlRTKSAkKEVOQUJM
RV9JT1NfVE9VQ0hfRVZFTlRTKSAkKEVOQUJMRV9MQVlPVVRfRk9STUFUVElOR19DT05URVhUKSAk
KEVOQUJMRV9MRUdBQ1lfQ1NTX1ZFTkRPUl9QUkVGSVhFUykgJChFTkFCTEVfTEVHQUNZX0NVU1RP
TV9QUk9UT0NPTF9NQU5BR0VSKSAkKEVOQUJMRV9MRUdBQ1lfRU5DUllQVEVEX01FRElBKSAkKEVO
QUJMRV9MRVRURVJQUkVTUykgJChFTkFCTEVfTUFDX0dFU1RVUkVfRVZFTlRTKSAkKEVOQUJMRV9N
QVRITUwpICQoRU5BQkxFX01FRElBX0NBUFRVUkUpICQoRU5BQkxFX01FRElBX0NPTlRST0xTX1ND
UklQVCkgJChFTkFCTEVfTUVESUFfU0VTU0lPTikgJChFTkFCTEVfTUVESUFfU09VUkNFKSAkKEVO
QUJMRV9NRURJQV9TVEFUSVNUSUNTKSAkKEVOQUJMRV9NRURJQV9TVFJFQU0pICQoRU5BQkxFX01F
TU9SWV9TQU1QTEVSKSAkKEVOQUJMRV9NRVRFUl9FTEVNRU5UKSAkKEVOQUJMRV9NSFRNTCkgJChF
TkFCTEVfTU9VU0VfQ1VSU09SX1NDQUxFKSAkKEVOQUJMRV9OQVZJR0FUT1JfU1RBTkRBTE9ORSkg
JChFTkFCTEVfTkVUV09SS19DQUNIRV9TUEVDVUxBVElWRV9SRVZBTElEQVRJT04pICQoRU5BQkxF
X05FVFdPUktfQ0FDSEVfU1RBTEVfV0hJTEVfUkVWQUxJREFURSkgJChFTkFCTEVfTk9USUZJQ0FU
SU9OUykgJChFTkFCTEVfT0ZGU0NSRUVOX0NBTlZBUykgJChFTkFCTEVfT1ZFUkZMT1dfU0NST0xM
SU5HX1RPVUNIKSAkKEVOQUJMRV9QQVlNRU5UX1JFUVVFU1QpICQoRU5BQkxFX1BERktJVF9QTFVH
SU4pICQoRU5BQkxFX1BPSU5URVJfTE9DSykgJChFTkFCTEVfUFVCTElDX1NVRkZJWF9MSVNUKSAk
KEVOQUJMRV9RVU9UQSkgJChFTkFCTEVfUkVNT1RFX0lOU1BFQ1RPUikgJChFTkFCTEVfUkVTSVpF
X09CU0VSVkVSKSAkKEVOQUJMRV9SRVNPTFVUSU9OX01FRElBX1FVRVJZKSAkKEVOQUJMRV9SRVNP
VVJDRV9MT0FEX1NUQVRJU1RJQ1MpICQoRU5BQkxFX1JFU09VUkNFX1VTQUdFKSAkKEVOQUJMRV9S
VUJCRVJfQkFORElORykgJChFTkFCTEVfU0FOREJPWF9FWFRFTlNJT05TKSAkKEVOQUJMRV9TRVJW
RVJfUFJFQ09OTkVDVCkgJChFTkFCTEVfU0VSVklDRV9DT05UUk9MUykgJChFTkFCTEVfU0VSVklD
RV9XT1JLRVIpICQoRU5BQkxFX1NIQVJFQUJMRV9SRVNPVVJDRSkgJChFTkFCTEVfU1BFRUNIX1NZ
TlRIRVNJUykgJChFTkFCTEVfU1RSRUFNU19BUEkpICQoRU5BQkxFX1NWR19GT05UUykgJChFTkFC
TEVfVEVMRVBIT05FX05VTUJFUl9ERVRFQ1RJT04pICQoRU5BQkxFX1RFWFRfQVVUT1NJWklORykg
JChFTkFCTEVfVE9VQ0hfRVZFTlRTKSAkKEVOQUJMRV9VU0VSU0VMRUNUX0FMTCkgJChFTkFCTEVf
VVNFUl9NRVNTQUdFX0hBTkRMRVJTKSAkKEVOQUJMRV9WQVJJQVRJT05fRk9OVFMpICQoRU5BQkxF
X1ZJREVPKSAkKEVOQUJMRV9WSURFT19QUkVTRU5UQVRJT05fTU9ERSkgJChFTkFCTEVfVklERU9f
VFJBQ0spICQoRU5BQkxFX1ZJREVPX1VTRVNfRUxFTUVOVF9GVUxMU0NSRUVOKSAkKEVOQUJMRV9X
RUJfQVJDSElWRSkgJChFTkFCTEVfV0VCRFJJVkVSX01PVVNFX0lOVEVSQUNUSU9OUykgJChFTkFC
TEVfV0VCRFJJVkVSX0tFWUJPQVJEX0lOVEVSQUNUSU9OUykgJChFTkFCTEVfV0VCRFJJVkVSX1RP
VUNIX0lOVEVSQUNUSU9OUykgJChFTkFCTEVfV0VCR0wpICQoRU5BQkxFX1dFQkdMMikgJChFTkFC
TEVfV0VCR1BVKSAkKEVOQUJMRV9XRUJYUikgJChFTkFCTEVfV0VCX0FQSV9TVEFUSVNUSUNTKSAk
KEVOQUJMRV9XRUJfQVVESU8pICQoRU5BQkxFX1dFQl9BVVRITikgJChFTkFCTEVfV0VCX0NSWVBU
TykgJChFTkFCTEVfV0VCX1JUQykgJChFTkFCTEVfV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKSAk
KEVOQUJMRV9YU0xUKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5n
ZUxvZwppbmRleCA1ODU5MzFkY2IxZGVlNWQ2OTMwYWU4ODg5MTU2MDNjZTY4YzJmMTExLi4xN2Yz
MmEzODhhYjBhMjY0Mjk1MzY1MmM0NjMxZjIxZTg5ZTNiOTFkIDEwMDY0NAotLS0gYS9Ub29scy9D
aGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzAgQEAKKzIwMjAtMDUt
MjEgIERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgorCisgICAgICAgIFdlYiBJbnNw
ZWN0b3I6IHJlcGxhY2UgYGZlYXR1cmVHdWFyZGAgYW5kIGBhdmFpbGFiaWxpdHlgIHdpdGggYSBj
b21iaW5lZCBgY29uZGl0aW9uYCB0aGF0IGFjY2VwdHMgYW55IG1hY3JvCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTAwMTQKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQcmV2aW91c2x5LCB0aGUgZ2VuZXJh
dGVkIEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcyB3b3VsZCBpbmNsdWRlIGNvZGUgZm9yIHRo
aW5ncyB0aGF0IHRoZQorICAgICAgICBiYWNrZW5kIGRvZXNuJ3QgYWN0dWFsbHkgc3VwcG9ydC4g
QnkgdXNpbmcgYWN0dWFsIG1hY3JvcyBhbmQgcHJlcHJvY2Vzc2luZyB0aGF0IGZpbGUsIHdlIGNh
bgorICAgICAgICBlbnN1cmUgdGhhdCB0aGUgZnJvbnRlbmQgZG9lc24ndCBpbmNvcnJlY3RseSB0
aGluayB0aGF0IHNvbWV0aGluZyBpcyBzdXBwb3J0ZWQgYnkgdGhlIHBhZ2UKKyAgICAgICAgYmVp
bmcgaW5zcGVjdGVkOgorICAgICAgICAgLSB0aGUgYENhbnZhc2AgY29tbWFuZHMgYW5kIGV2ZW50
cyByZWxhdGVkIHRvIHNoYWRlciBwcm9ncmFtcy9waXBlbGluZXMgc2hvdWxkIG9ubHkgZXhpc3QK
KyAgICAgICAgICAgd2hlbiB0aGUgY29ycmVzcG9uZGluZyBjb250ZXh0IHR5cGUgZXhpc3RzLCBu
YW1lbHkgYEVOQUJMRShXRUJHTClgIGFuZCBgRU5BQkxFKFdFQkdQVSlgLgorICAgICAgICAgLSBp
T1MgZG9lc24ndCBzdXBwb3J0IHNob3dpbmcgcnVsZXJzLCBzbyBjcmVhdGUgYSB2YXJpYW50IG9m
IGBET00uc2V0SW5zcGVjdE1vZGVFbmFibGVkYAorICAgICAgICAgICB0aGF0IG9ubHkgZXhpc3Rz
IGZvciBgUExBVEZPUk0oSU9TX0ZBTUlMWSlgIHRoYXQgZG9lc24ndCBoYXZlIHRoZSBgc2hvd1J1
bGVyc2Agb3B0aW9uYWwKKyAgICAgICAgICAgcGFyYW1ldGVyLCBhcyB3ZWxsIGFzIHJlbW92aW5n
IGBQYWdlLnNldFNob3dSdWxlcnNgIGVudGlyZWx5LgorICAgICAgICAgLSBzZXR0aW5nIHRoZSBm
b3JjZWQgYXBwZWFyYW5jZSBzaG91bGQgb25seSBiZSBwb3NzaWJsZSBpZiBkYXJrIG1vZGUgaXMg
c3VwcG9ydGVkLgorICAgICAgICAgLSB3ZWIgYXJjaGl2ZXMgb25seSBleGlzdCBpZiBDRiBpcyB1
c2VkLgorCisgICAgICAgICogQ29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25maWc6
CisgICAgICAgIEFkZCBgRU5BQkxFX1dFQl9BUkNISVZFYCBzaW5jZSBpdCdzIGFsd2F5cyBlbmFi
bGVkIGluIHd0Zi9QbGF0Zm9ybUVuYWJsZUNvY29hLmguCisKKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L2luc3BlY3Rvci9tYWluLnB5OgorICAgICAgICAoSW5zcGVjdG9yR2VuZXJhdG9yVGVz
dHMuZ2VuZXJhdGVfZnJvbV9qc29uKToKKyAgICAgICAgKEluc3BlY3RvckdlbmVyYXRvclRlc3Rz
LnJ1bl90ZXN0cyk6CisgICAgICAgIChJbnNwZWN0b3JHZW5lcmF0b3JUZXN0cy5tYWluKToKKwog
MjAyMC0wNS0yMSAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgUmVu
YW1lIHNvbWUgdmFyaWFibGVzIGluIEJpdG1hcCBBUEkgdGVzdCBmb3IgY29uc2lzdGVuY3kgYW5k
IGJldHRlciByZWFkYWJpbGl0eS4KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
aW5zcGVjdG9yL21haW4ucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2luc3BlY3Rvci9tYWlu
LnB5CmluZGV4IDE0NjJkODAxOWQ5NDEyZjQ1NmM2NzE0MDQ5OTIyOGY2YzljYTdiM2MuLjllMDkw
NGMyMGZmNmUyOWMxMjRmZWQ0NWQzYzhkMTNiOWEwMDNkMjUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvaW5zcGVjdG9yL21haW4ucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9pbnNwZWN0b3IvbWFpbi5weQpAQCAtMzgsMTQgKzM4LDEzIEBAIGNsYXNzIEluc3BlY3Rv
ckdlbmVyYXRvclRlc3RzOgogICAgICAgICBzZWxmLnJlc2V0X3Jlc3VsdHMgPSByZXNldF9yZXN1
bHRzCiAgICAgICAgIHNlbGYuZXhlY3V0aXZlID0gZXhlY3V0aXZlCiAKLSAgICBkZWYgZ2VuZXJh
dGVfZnJvbV9qc29uKHNlbGYsIGpzb25fZmlsZSwgcGxhdGZvcm0sIG91dHB1dF9kaXJlY3Rvcnkp
OgorICAgIGRlZiBnZW5lcmF0ZV9mcm9tX2pzb24oc2VsZiwganNvbl9maWxlLCBvdXRwdXRfZGly
ZWN0b3J5KToKICAgICAgICAgY21kID0gWydweXRob24nLAogICAgICAgICAgICAgICAgJ0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weScsCiAgICAgICAgICAgICAgICAnLS1vdXRwdXREaXInLCBvdXRwdXRfZGlyZWN0
b3J5LAogICAgICAgICAgICAgICAgJy0tZm9yY2UnLAogICAgICAgICAgICAgICAgJy0tZnJhbWV3
b3JrJywgJ1Rlc3QnLAogICAgICAgICAgICAgICAgJy0tdGVzdCcsCi0gICAgICAgICAgICAgICAn
LS1wbGF0Zm9ybScsIHBsYXRmb3JtLAogICAgICAgICAgICAgICAganNvbl9maWxlXQogCiAgICAg
ICAgIGV4aXRfY29kZSA9IDAKQEAgLTg4LDcgKzg3LDcgQEAgY2xhc3MgSW5zcGVjdG9yR2VuZXJh
dG9yVGVzdHM6CiAgICAgICAgICAgICAgICAgcHJpbnQoJ1BBU1M6ICVzJyAlIG91dHB1dF9maWxl
KQogICAgICAgICByZXR1cm4gY2hhbmdlc19mb3VuZAogCi0gICAgZGVmIHJ1bl90ZXN0cyhzZWxm
LCBwbGF0Zm9ybSwgaW5wdXRfZGlyZWN0b3J5LCByZWZlcmVuY2VfZGlyZWN0b3J5KToKKyAgICBk
ZWYgcnVuX3Rlc3RzKHNlbGYsIGlucHV0X2RpcmVjdG9yeSwgcmVmZXJlbmNlX2RpcmVjdG9yeSk6
CiAgICAgICAgIHdvcmtfZGlyZWN0b3J5ID0gcmVmZXJlbmNlX2RpcmVjdG9yeQogCiAgICAgICAg
IHBhc3NlZCA9IFRydWUKQEAgLTEwMSw3ICsxMDAsNyBAQCBjbGFzcyBJbnNwZWN0b3JHZW5lcmF0
b3JUZXN0czoKICAgICAgICAgICAgIGlmIG5vdCBzZWxmLnJlc2V0X3Jlc3VsdHM6CiAgICAgICAg
ICAgICAgICAgd29ya19kaXJlY3RvcnkgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKIAotICAgICAgICAg
ICAgaWYgc2VsZi5nZW5lcmF0ZV9mcm9tX2pzb24ob3MucGF0aC5qb2luKGlucHV0X2RpcmVjdG9y
eSwgaW5wdXRfZmlsZSksIHBsYXRmb3JtLCB3b3JrX2RpcmVjdG9yeSk6CisgICAgICAgICAgICBp
ZiBzZWxmLmdlbmVyYXRlX2Zyb21fanNvbihvcy5wYXRoLmpvaW4oaW5wdXRfZGlyZWN0b3J5LCBp
bnB1dF9maWxlKSwgd29ya19kaXJlY3RvcnkpOgogICAgICAgICAgICAgICAgIHBhc3NlZCA9IEZh
bHNlCiAKICAgICAgICAgICAgIGlmIHNlbGYucmVzZXRfcmVzdWx0czoKQEAgLTEyMiwyMSArMTIx
LDEwIEBAIGNsYXNzIEluc3BlY3RvckdlbmVyYXRvclRlc3RzOgogICAgICAgICBhbGxfdGVzdHNf
cGFzc2VkID0gVHJ1ZQogCiAgICAgICAgIGJhc2VfZGlyZWN0b3J5ID0gb3MucGF0aC5qb2luKCdK
YXZhU2NyaXB0Q29yZScsICdpbnNwZWN0b3InLCAnc2NyaXB0cycsICd0ZXN0cycpCi0KLSAgICAg
ICAgcGxhdGZvcm1fZGlyZWN0b3JpZXMgPSB7Ci0gICAgICAgICAgICAnbWFjb3MnOiAnbWFjJywK
LSAgICAgICAgICAgICdpb3MnOiAnaW9zJywKLSAgICAgICAgICAgICdnZW5lcmljJzogJ2dlbmVy
aWMnLAotICAgICAgICAgICAgJ2FsbCc6ICdhbGwnLAotICAgICAgICB9Ci0KLSAgICAgICAgZm9y
IHBsYXRmb3JtX25hbWUsIHBsYXRmb3JtX2RpcmVjdG9yeSBpbiBwbGF0Zm9ybV9kaXJlY3Rvcmll
cy5pdGVyaXRlbXMoKToKLSAgICAgICAgICAgIGlucHV0X2RpcmVjdG9yeSA9IG9zLnBhdGguam9p
bihiYXNlX2RpcmVjdG9yeSwgcGxhdGZvcm1fZGlyZWN0b3J5KQotICAgICAgICAgICAgcmVmZXJl
bmNlX2RpcmVjdG9yeSA9IG9zLnBhdGguam9pbihpbnB1dF9kaXJlY3RvcnksICdleHBlY3RlZCcp
Ci0gICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihpbnB1dF9kaXJlY3RvcnkpIG9yIG5v
dCBvcy5wYXRoLmlzZGlyKHJlZmVyZW5jZV9kaXJlY3RvcnkpOgotICAgICAgICAgICAgICAgIGNv
bnRpbnVlCi0KLSAgICAgICAgICAgIGFsbF90ZXN0c19wYXNzZWQgPSBhbGxfdGVzdHNfcGFzc2Vk
IGFuZCBzZWxmLnJ1bl90ZXN0cyhwbGF0Zm9ybV9uYW1lLCBpbnB1dF9kaXJlY3RvcnksIHJlZmVy
ZW5jZV9kaXJlY3RvcnkpCisgICAgICAgIGlucHV0X2RpcmVjdG9yeSA9IGJhc2VfZGlyZWN0b3J5
CisgICAgICAgIHJlZmVyZW5jZV9kaXJlY3RvcnkgPSBvcy5wYXRoLmpvaW4oaW5wdXRfZGlyZWN0
b3J5LCAnZXhwZWN0ZWQnKQorICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGlucHV0X2RpcmVjdG9y
eSkgYW5kIG9zLnBhdGguaXNkaXIocmVmZXJlbmNlX2RpcmVjdG9yeSk6CisgICAgICAgICAgICBh
bGxfdGVzdHNfcGFzc2VkID0gc2VsZi5ydW5fdGVzdHMoaW5wdXRfZGlyZWN0b3J5LCByZWZlcmVu
Y2VfZGlyZWN0b3J5KQogCiAgICAgICAgIHByaW50KCcnKQogICAgICAgICBpZiBhbGxfdGVzdHNf
cGFzc2VkOgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9Db25maWd1cmF0aW9ucy9G
ZWF0dXJlRGVmaW5lcy54Y2NvbmZpZyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvQ29uZmlndXJhdGlv
bnMvRmVhdHVyZURlZmluZXMueGNjb25maWcKaW5kZXggMGJlNDIwN2JmYzM0N2Q4YmJjOGIzMzVj
YjI2MGRiN2MzMDExZjA4Zi4uM2U2OTc4ZWNhMjZkODZkN2IyMTI2NmI0ZDJkNzE2YTQ4YWIzNGZl
OSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9Db25maWd1cmF0aW9ucy9GZWF0dXJl
RGVmaW5lcy54Y2NvbmZpZworKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL0NvbmZpZ3VyYXRpb25z
L0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnCkBAIC0zNzcsNiArMzc3LDggQEAgRU5BQkxFX1ZJREVP
X1RSQUNLID0gRU5BQkxFX1ZJREVPX1RSQUNLOwogRU5BQkxFX1ZJREVPX1VTRVNfRUxFTUVOVF9G
VUxMU0NSRUVOID0gJChFTkFCTEVfVklERU9fVVNFU19FTEVNRU5UX0ZVTExTQ1JFRU5fJChXS19Q
TEFURk9STV9OQU1FKSk7CiBFTkFCTEVfVklERU9fVVNFU19FTEVNRU5UX0ZVTExTQ1JFRU5fbWFj
b3N4ID0gRU5BQkxFX1ZJREVPX1VTRVNfRUxFTUVOVF9GVUxMU0NSRUVOOwogCitFTkFCTEVfV0VC
X0FSQ0hJVkUgPSBFTkFCTEVfV0VCX0FSQ0hJVkU7CisKIEVOQUJMRV9XRUJEUklWRVJfTU9VU0Vf
SU5URVJBQ1RJT05TID0gJChFTkFCTEVfV0VCRFJJVkVSX01PVVNFX0lOVEVSQUNUSU9OU18kKFdL
X1BMQVRGT1JNX05BTUUpKTsKIEVOQUJMRV9XRUJEUklWRVJfTU9VU0VfSU5URVJBQ1RJT05TX21h
Y29zeCA9IEVOQUJMRV9XRUJEUklWRVJfTU9VU0VfSU5URVJBQ1RJT05TOwogCkBAIC00MTksNCAr
NDIxLDQgQEAgRU5BQkxFX1dJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCA9IEVOQUJMRV9XSVJFTEVT
U19QTEFZQkFDS19UQVJHRVQ7CiAKIEVOQUJMRV9YU0xUID0gRU5BQkxFX1hTTFQ7CiAKLUZFQVRV
UkVfREVGSU5FUyA9ICQoRU5BQkxFXzNEX1RSQU5TRk9STVMpICQoRU5BQkxFX0FDQ0VMRVJBVEVE
XzJEX0NBTlZBUykgJChFTkFCTEVfQUNDRVNTSUJJTElUWV9JU09MQVRFRF9UUkVFKSAkKEVOQUJM
RV9BUFBMRV9QQVkpICQoRU5BQkxFX0FQUExFX1BBWV9TRVNTSU9OX1YzKSAkKEVOQUJMRV9BUFBM
RV9QQVlfU0VTU0lPTl9WNCkgJChFTkFCTEVfQVBQTElDQVRJT05fTUFOSUZFU1QpICQoRU5BQkxF
X0FUVEFDSE1FTlRfRUxFTUVOVCkgJChFTkFCTEVfQVZGX0NBUFRJT05TKSAkKEVOQUJMRV9DQUNI
RV9QQVJUSVRJT05JTkcpICQoRU5BQkxFX0NIQU5ORUxfTUVTU0FHSU5HKSAkKEVOQUJMRV9DT05U
RU5UX0ZJTFRFUklORykgJChFTkFCTEVfQ1NTM19URVhUKSAkKEVOQUJMRV9DU1NfQk9YX0RFQ09S
QVRJT05fQlJFQUspICQoRU5BQkxFX0NTU19DT01QT1NJVElORykgJChFTkFCTEVfQ1NTX0NPTklD
X0dSQURJRU5UUykgJChFTkFCTEVfQ1NTX0lNQUdFX1JFU09MVVRJT04pICQoRU5BQkxFX0NTU19Q
QUlOVElOR19BUEkpICQoRU5BQkxFX0NTU19TQ1JPTExfU05BUCkgJChFTkFCTEVfQ1NTX1NFTEVD
VE9SU19MRVZFTDQpICQoRU5BQkxFX0NTU19UUkFJTElOR19XT1JEKSAkKEVOQUJMRV9DU1NfVFlQ
RURfT00pICQoRU5BQkxFX0NVUlNPUl9WSVNJQklMSVRZKSAkKEVOQUJMRV9DX0xPT1ApICQoRU5B
QkxFX0RBUktfTU9ERV9DU1MpICQoRU5BQkxFX0RBVEFDVUVfVkFMVUUpICQoRU5BQkxFX0RBVEFM
SVNUX0VMRU1FTlQpICQoRU5BQkxFX0RBVEFfSU5URVJBQ1RJT04pICQoRU5BQkxFX0RFVklDRV9P
UklFTlRBVElPTikgJChFTkFCTEVfRFJBR19TVVBQT1JUKSAkKEVOQUJMRV9FRElUQUJMRV9SRUdJ
T04pICQoRU5BQkxFX0VOQ1JZUFRFRF9NRURJQSkgJChFTkFCTEVfRVhQRVJJTUVOVEFMX0ZFQVRV
UkVTKSAkKEVOQUJMRV9GSUxURVJTX0xFVkVMXzIpICQoRU5BQkxFX0ZVTExTQ1JFRU5fQVBJKSAk
KEVOQUJMRV9QSUNUVVJFX0lOX1BJQ1RVUkVfQVBJKSAkKEVOQUJMRV9HQU1FUEFEKSAkKEVOQUJM
RV9HRU9MT0NBVElPTikgJChFTkFCTEVfR1BVX1BST0NFU1MpICQoRU5BQkxFX0lOREVYRURfREFU
QUJBU0UpICQoRU5BQkxFX0lOREVYRURfREFUQUJBU0VfSU5fV09SS0VSUykgJChFTkFCTEVfSU5Q
VVRfVFlQRV9DT0xPUikgJChFTkFCTEVfSU5QVVRfVFlQRV9EQVRFKSAkKEVOQUJMRV9JTlBVVF9U
WVBFX0RBVEVUSU1FTE9DQUwpICQoRU5BQkxFX0lOUFVUX1RZUEVfREFURVRJTUVfSU5DT01QTEVU
RSkgJChFTkFCTEVfSU5QVVRfVFlQRV9NT05USCkgJChFTkFCTEVfSU5QVVRfVFlQRV9USU1FKSAk
KEVOQUJMRV9JTlBVVF9UWVBFX1dFRUspICQoRU5BQkxFX0lOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpICQoRU5BQkxFX0lOU1BFQ1RPUl9URUxFTUVUUlkpICQoRU5BQkxFX0lOVEVSU0VD
VElPTl9PQlNFUlZFUikgJChFTkFCTEVfSU9TX0dFU1RVUkVfRVZFTlRTKSAkKEVOQUJMRV9JT1Nf
VE9VQ0hfRVZFTlRTKSAkKEVOQUJMRV9MQVlPVVRfRk9STUFUVElOR19DT05URVhUKSAkKEVOQUJM
RV9MRUdBQ1lfQ1NTX1ZFTkRPUl9QUkVGSVhFUykgJChFTkFCTEVfTEVHQUNZX0NVU1RPTV9QUk9U
T0NPTF9NQU5BR0VSKSAkKEVOQUJMRV9MRUdBQ1lfRU5DUllQVEVEX01FRElBKSAkKEVOQUJMRV9M
RVRURVJQUkVTUykgJChFTkFCTEVfTUFDX0dFU1RVUkVfRVZFTlRTKSAkKEVOQUJMRV9NQVRITUwp
ICQoRU5BQkxFX01FRElBX0NBUFRVUkUpICQoRU5BQkxFX01FRElBX0NPTlRST0xTX1NDUklQVCkg
JChFTkFCTEVfTUVESUFfU0VTU0lPTikgJChFTkFCTEVfTUVESUFfU09VUkNFKSAkKEVOQUJMRV9N
RURJQV9TVEFUSVNUSUNTKSAkKEVOQUJMRV9NRURJQV9TVFJFQU0pICQoRU5BQkxFX01FTU9SWV9T
QU1QTEVSKSAkKEVOQUJMRV9NRVRFUl9FTEVNRU5UKSAkKEVOQUJMRV9NSFRNTCkgJChFTkFCTEVf
TU9VU0VfQ1VSU09SX1NDQUxFKSAkKEVOQUJMRV9OQVZJR0FUT1JfU1RBTkRBTE9ORSkgJChFTkFC
TEVfTkVUV09SS19DQUNIRV9TUEVDVUxBVElWRV9SRVZBTElEQVRJT04pICQoRU5BQkxFX05FVFdP
UktfQ0FDSEVfU1RBTEVfV0hJTEVfUkVWQUxJREFURSkgJChFTkFCTEVfTk9USUZJQ0FUSU9OUykg
JChFTkFCTEVfT0ZGU0NSRUVOX0NBTlZBUykgJChFTkFCTEVfT1ZFUkZMT1dfU0NST0xMSU5HX1RP
VUNIKSAkKEVOQUJMRV9QQVlNRU5UX1JFUVVFU1QpICQoRU5BQkxFX1BERktJVF9QTFVHSU4pICQo
RU5BQkxFX1BPSU5URVJfTE9DSykgJChFTkFCTEVfUFVCTElDX1NVRkZJWF9MSVNUKSAkKEVOQUJM
RV9RVU9UQSkgJChFTkFCTEVfUkVNT1RFX0lOU1BFQ1RPUikgJChFTkFCTEVfUkVTSVpFX09CU0VS
VkVSKSAkKEVOQUJMRV9SRVNPTFVUSU9OX01FRElBX1FVRVJZKSAkKEVOQUJMRV9SRVNPVVJDRV9M
T0FEX1NUQVRJU1RJQ1MpICQoRU5BQkxFX1JFU09VUkNFX1VTQUdFKSAkKEVOQUJMRV9SVUJCRVJf
QkFORElORykgJChFTkFCTEVfU0FOREJPWF9FWFRFTlNJT05TKSAkKEVOQUJMRV9TRVJWRVJfUFJF
Q09OTkVDVCkgJChFTkFCTEVfU0VSVklDRV9DT05UUk9MUykgJChFTkFCTEVfU0VSVklDRV9XT1JL
RVIpICQoRU5BQkxFX1NIQVJFQUJMRV9SRVNPVVJDRSkgJChFTkFCTEVfU1BFRUNIX1NZTlRIRVNJ
UykgJChFTkFCTEVfU1RSRUFNU19BUEkpICQoRU5BQkxFX1NWR19GT05UUykgJChFTkFCTEVfVEVM
RVBIT05FX05VTUJFUl9ERVRFQ1RJT04pICQoRU5BQkxFX1RFWFRfQVVUT1NJWklORykgJChFTkFC
TEVfVE9VQ0hfRVZFTlRTKSAkKEVOQUJMRV9VU0VSU0VMRUNUX0FMTCkgJChFTkFCTEVfVVNFUl9N
RVNTQUdFX0hBTkRMRVJTKSAkKEVOQUJMRV9WQVJJQVRJT05fRk9OVFMpICQoRU5BQkxFX1ZJREVP
KSAkKEVOQUJMRV9WSURFT19QUkVTRU5UQVRJT05fTU9ERSkgJChFTkFCTEVfVklERU9fVFJBQ0sp
ICQoRU5BQkxFX1ZJREVPX1VTRVNfRUxFTUVOVF9GVUxMU0NSRUVOKSAkKEVOQUJMRV9XRUJEUklW
RVJfTU9VU0VfSU5URVJBQ1RJT05TKSAkKEVOQUJMRV9XRUJEUklWRVJfS0VZQk9BUkRfSU5URVJB
Q1RJT05TKSAkKEVOQUJMRV9XRUJEUklWRVJfVE9VQ0hfSU5URVJBQ1RJT05TKSAkKEVOQUJMRV9X
RUJHTCkgJChFTkFCTEVfV0VCR0wyKSAkKEVOQUJMRV9XRUJHUFUpICQoRU5BQkxFX1dFQlhSKSAk
KEVOQUJMRV9XRUJfQVBJX1NUQVRJU1RJQ1MpICQoRU5BQkxFX1dFQl9BVURJTykgJChFTkFCTEVf
V0VCX0FVVEhOKSAkKEVOQUJMRV9XRUJfQ1JZUFRPKSAkKEVOQUJMRV9XRUJfUlRDKSAkKEVOQUJM
RV9XSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpICQoRU5BQkxFX1hTTFQpOworRkVBVFVSRV9ERUZJ
TkVTID0gJChFTkFCTEVfM0RfVFJBTlNGT1JNUykgJChFTkFCTEVfQUNDRUxFUkFURURfMkRfQ0FO
VkFTKSAkKEVOQUJMRV9BQ0NFU1NJQklMSVRZX0lTT0xBVEVEX1RSRUUpICQoRU5BQkxFX0FQUExF
X1BBWSkgJChFTkFCTEVfQVBQTEVfUEFZX1NFU1NJT05fVjMpICQoRU5BQkxFX0FQUExFX1BBWV9T
RVNTSU9OX1Y0KSAkKEVOQUJMRV9BUFBMSUNBVElPTl9NQU5JRkVTVCkgJChFTkFCTEVfQVRUQUNI
TUVOVF9FTEVNRU5UKSAkKEVOQUJMRV9BVkZfQ0FQVElPTlMpICQoRU5BQkxFX0NBQ0hFX1BBUlRJ
VElPTklORykgJChFTkFCTEVfQ0hBTk5FTF9NRVNTQUdJTkcpICQoRU5BQkxFX0NPTlRFTlRfRklM
VEVSSU5HKSAkKEVOQUJMRV9DU1MzX1RFWFQpICQoRU5BQkxFX0NTU19CT1hfREVDT1JBVElPTl9C
UkVBSykgJChFTkFCTEVfQ1NTX0NPTVBPU0lUSU5HKSAkKEVOQUJMRV9DU1NfQ09OSUNfR1JBRElF
TlRTKSAkKEVOQUJMRV9DU1NfSU1BR0VfUkVTT0xVVElPTikgJChFTkFCTEVfQ1NTX1BBSU5USU5H
X0FQSSkgJChFTkFCTEVfQ1NTX1NDUk9MTF9TTkFQKSAkKEVOQUJMRV9DU1NfU0VMRUNUT1JTX0xF
VkVMNCkgJChFTkFCTEVfQ1NTX1RSQUlMSU5HX1dPUkQpICQoRU5BQkxFX0NTU19UWVBFRF9PTSkg
JChFTkFCTEVfQ1VSU09SX1ZJU0lCSUxJVFkpICQoRU5BQkxFX0NfTE9PUCkgJChFTkFCTEVfREFS
S19NT0RFX0NTUykgJChFTkFCTEVfREFUQUNVRV9WQUxVRSkgJChFTkFCTEVfREFUQUxJU1RfRUxF
TUVOVCkgJChFTkFCTEVfREFUQV9JTlRFUkFDVElPTikgJChFTkFCTEVfREVWSUNFX09SSUVOVEFU
SU9OKSAkKEVOQUJMRV9EUkFHX1NVUFBPUlQpICQoRU5BQkxFX0VESVRBQkxFX1JFR0lPTikgJChF
TkFCTEVfRU5DUllQVEVEX01FRElBKSAkKEVOQUJMRV9FWFBFUklNRU5UQUxfRkVBVFVSRVMpICQo
RU5BQkxFX0ZJTFRFUlNfTEVWRUxfMikgJChFTkFCTEVfRlVMTFNDUkVFTl9BUEkpICQoRU5BQkxF
X1BJQ1RVUkVfSU5fUElDVFVSRV9BUEkpICQoRU5BQkxFX0dBTUVQQUQpICQoRU5BQkxFX0dFT0xP
Q0FUSU9OKSAkKEVOQUJMRV9HUFVfUFJPQ0VTUykgJChFTkFCTEVfSU5ERVhFRF9EQVRBQkFTRSkg
JChFTkFCTEVfSU5ERVhFRF9EQVRBQkFTRV9JTl9XT1JLRVJTKSAkKEVOQUJMRV9JTlBVVF9UWVBF
X0NPTE9SKSAkKEVOQUJMRV9JTlBVVF9UWVBFX0RBVEUpICQoRU5BQkxFX0lOUFVUX1RZUEVfREFU
RVRJTUVMT0NBTCkgJChFTkFCTEVfSU5QVVRfVFlQRV9EQVRFVElNRV9JTkNPTVBMRVRFKSAkKEVO
QUJMRV9JTlBVVF9UWVBFX01PTlRIKSAkKEVOQUJMRV9JTlBVVF9UWVBFX1RJTUUpICQoRU5BQkxF
X0lOUFVUX1RZUEVfV0VFSykgJChFTkFCTEVfSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykgJChFTkFCTEVfSU5TUEVDVE9SX1RFTEVNRVRSWSkgJChFTkFCTEVfSU5URVJTRUNUSU9OX09C
U0VSVkVSKSAkKEVOQUJMRV9JT1NfR0VTVFVSRV9FVkVOVFMpICQoRU5BQkxFX0lPU19UT1VDSF9F
VkVOVFMpICQoRU5BQkxFX0xBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpICQoRU5BQkxFX0xFR0FD
WV9DU1NfVkVORE9SX1BSRUZJWEVTKSAkKEVOQUJMRV9MRUdBQ1lfQ1VTVE9NX1BST1RPQ09MX01B
TkFHRVIpICQoRU5BQkxFX0xFR0FDWV9FTkNSWVBURURfTUVESUEpICQoRU5BQkxFX0xFVFRFUlBS
RVNTKSAkKEVOQUJMRV9NQUNfR0VTVFVSRV9FVkVOVFMpICQoRU5BQkxFX01BVEhNTCkgJChFTkFC
TEVfTUVESUFfQ0FQVFVSRSkgJChFTkFCTEVfTUVESUFfQ09OVFJPTFNfU0NSSVBUKSAkKEVOQUJM
RV9NRURJQV9TRVNTSU9OKSAkKEVOQUJMRV9NRURJQV9TT1VSQ0UpICQoRU5BQkxFX01FRElBX1NU
QVRJU1RJQ1MpICQoRU5BQkxFX01FRElBX1NUUkVBTSkgJChFTkFCTEVfTUVNT1JZX1NBTVBMRVIp
ICQoRU5BQkxFX01FVEVSX0VMRU1FTlQpICQoRU5BQkxFX01IVE1MKSAkKEVOQUJMRV9NT1VTRV9D
VVJTT1JfU0NBTEUpICQoRU5BQkxFX05BVklHQVRPUl9TVEFOREFMT05FKSAkKEVOQUJMRV9ORVRX
T1JLX0NBQ0hFX1NQRUNVTEFUSVZFX1JFVkFMSURBVElPTikgJChFTkFCTEVfTkVUV09SS19DQUNI
RV9TVEFMRV9XSElMRV9SRVZBTElEQVRFKSAkKEVOQUJMRV9OT1RJRklDQVRJT05TKSAkKEVOQUJM
RV9PRkZTQ1JFRU5fQ0FOVkFTKSAkKEVOQUJMRV9PVkVSRkxPV19TQ1JPTExJTkdfVE9VQ0gpICQo
RU5BQkxFX1BBWU1FTlRfUkVRVUVTVCkgJChFTkFCTEVfUERGS0lUX1BMVUdJTikgJChFTkFCTEVf
UE9JTlRFUl9MT0NLKSAkKEVOQUJMRV9QVUJMSUNfU1VGRklYX0xJU1QpICQoRU5BQkxFX1FVT1RB
KSAkKEVOQUJMRV9SRU1PVEVfSU5TUEVDVE9SKSAkKEVOQUJMRV9SRVNJWkVfT0JTRVJWRVIpICQo
RU5BQkxFX1JFU09MVVRJT05fTUVESUFfUVVFUlkpICQoRU5BQkxFX1JFU09VUkNFX0xPQURfU1RB
VElTVElDUykgJChFTkFCTEVfUkVTT1VSQ0VfVVNBR0UpICQoRU5BQkxFX1JVQkJFUl9CQU5ESU5H
KSAkKEVOQUJMRV9TQU5EQk9YX0VYVEVOU0lPTlMpICQoRU5BQkxFX1NFUlZFUl9QUkVDT05ORUNU
KSAkKEVOQUJMRV9TRVJWSUNFX0NPTlRST0xTKSAkKEVOQUJMRV9TRVJWSUNFX1dPUktFUikgJChF
TkFCTEVfU0hBUkVBQkxFX1JFU09VUkNFKSAkKEVOQUJMRV9TUEVFQ0hfU1lOVEhFU0lTKSAkKEVO
QUJMRV9TVFJFQU1TX0FQSSkgJChFTkFCTEVfU1ZHX0ZPTlRTKSAkKEVOQUJMRV9URUxFUEhPTkVf
TlVNQkVSX0RFVEVDVElPTikgJChFTkFCTEVfVEVYVF9BVVRPU0laSU5HKSAkKEVOQUJMRV9UT1VD
SF9FVkVOVFMpICQoRU5BQkxFX1VTRVJTRUxFQ1RfQUxMKSAkKEVOQUJMRV9VU0VSX01FU1NBR0Vf
SEFORExFUlMpICQoRU5BQkxFX1ZBUklBVElPTl9GT05UUykgJChFTkFCTEVfVklERU8pICQoRU5B
QkxFX1ZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSAkKEVOQUJMRV9WSURFT19UUkFDSykgJChFTkFC
TEVfVklERU9fVVNFU19FTEVNRU5UX0ZVTExTQ1JFRU4pICQoRU5BQkxFX1dFQl9BUkNISVZFKSAk
KEVOQUJMRV9XRUJEUklWRVJfTU9VU0VfSU5URVJBQ1RJT05TKSAkKEVOQUJMRV9XRUJEUklWRVJf
S0VZQk9BUkRfSU5URVJBQ1RJT05TKSAkKEVOQUJMRV9XRUJEUklWRVJfVE9VQ0hfSU5URVJBQ1RJ
T05TKSAkKEVOQUJMRV9XRUJHTCkgJChFTkFCTEVfV0VCR0wyKSAkKEVOQUJMRV9XRUJHUFUpICQo
RU5BQkxFX1dFQlhSKSAkKEVOQUJMRV9XRUJfQVBJX1NUQVRJU1RJQ1MpICQoRU5BQkxFX1dFQl9B
VURJTykgJChFTkFCTEVfV0VCX0FVVEhOKSAkKEVOQUJMRV9XRUJfQ1JZUFRPKSAkKEVOQUJMRV9X
RUJfUlRDKSAkKEVOQUJMRV9XSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpICQoRU5BQkxFX1hTTFQp
Owo=
</data>

          </attachment>
      

    </bug>

</bugzilla>